diff --git a/.github/calcrom/calcrom.pl b/.github/calcrom/calcrom.pl index 4858babb95..9fbd959945 100755 --- a/.github/calcrom/calcrom.pl +++ b/.github/calcrom/calcrom.pl @@ -1,9 +1,15 @@ #!/usr/bin/perl use IPC::Cmd qw[ run ]; +use Getopt::Long; + +my $usage = "Usage: calcrom.pl file.map [--data]\n"; + +my $showData; +GetOptions("data" => \$showData) or die $usage; (@ARGV == 1) - or die "ERROR: no map file specified.\n"; + or die $usage; open(my $file, $ARGV[0]) or die "ERROR: could not open file '$ARGV[0]'.\n"; @@ -57,14 +63,14 @@ while (my $line = <$file>) # though. Uniq is pretty fast! my $base_cmd = "nm $elffname | awk '{print \$3}' | grep '^[^_].\\{4\\}' | uniq"; -# This looks for Unknown_, Unknown_, or sub_, followed by just numbers. Note that +# This looks for Unknown_, Unknown_, or sub_, followed by an address. Note that # it matches even if stuff precedes the unknown, like sUnknown/gUnknown. -my $undoc_cmd = "grep '[Uu]nknown_[0-9a-fA-F]*\\|sub_[0-9a-fA-F]*'"; +my $undoc_cmd = "grep '[Uu]nknown_[0-9a-fA-F]\\{5,7\\}\\|sub_[0-9a-fA-F]\\{5,7\\}'"; # This looks for every symbol with an address at the end of it. Some things are # given a name based on their type / location, but still have an unknown purpose. # For example, FooMap_EventScript_FFFFFFF. -my $partial_doc_cmd = "grep '_[0-28][0-9a-fA-F]\\{5,6\\}'"; +my $partial_doc_cmd = "grep '_[0-28][0-9a-fA-F]\\{5,7\\}'"; my $count_cmd = "wc -l"; @@ -98,16 +104,19 @@ my $partial_documented_as_string; # Performing addition on a string converts it to a number. Any string that fails # to convert to a number becomes 0. So if our converted number is 0, but our string # is nonzero, then the conversion was an error. +$undocumented_as_string =~ s/^\s+|\s+$//g; my $undocumented = $undocumented_as_string + 0; -(($undocumented != 0) and ($undocumented_as_string ne "0")) +(($undocumented != 0) or (($undocumented == 0) and ($undocumented_as_string eq "0"))) or die "ERROR: Cannot convert string to num: '$undocumented_as_string'"; +$partial_documented_as_string =~ s/^\s+|\s+$//g; my $partial_documented = $partial_documented_as_string + 0; -(($partial_documented != 0) and ($partial_documented_as_string ne "0")) +(($partial_documented != 0) or (($partial_documented == 0) and ($partial_documented_as_string eq "0"))) or die "ERROR: Cannot convert string to num: '$partial_documented_as_string'"; +$total_syms_as_string =~ s/^\s+|\s+$//g; my $total_syms = $total_syms_as_string + 0; -(($total_syms != 0) and ($total_syms_as_string ne "0")) +(($total_syms != 0) or (($total_syms == 0) and ($total_syms_as_string eq "0"))) or die "ERROR: Cannot convert string to num: '$total_syms_as_string'"; ($total_syms != 0) @@ -149,17 +158,13 @@ else print "$undocumented symbols undocumented ($undocPct%)\n"; } -print "\n"; -my $dataTotal = $srcdata + $data; -my $srcDataPct = sprintf("%.4f", 100 * $srcdata / $dataTotal); -my $dataPct = sprintf("%.4f", 100 * $data / $dataTotal); +if ($showData) +{ + print "\n"; + my $dataTotal = $srcdata + $data; + my $srcDataPct = sprintf("%.4f", 100 * $srcdata / $dataTotal); + my $dataPct = sprintf("%.4f", 100 * $data / $dataTotal); -if ($data == 0) -{ - print "Data porting to C is 100% complete\n" -} -else -{ print "$dataTotal total bytes of data\n"; print "$srcdata bytes of data in src ($srcDataPct%)\n"; print "$data bytes of data in data ($dataPct%)\n"; diff --git a/.github/calcrom/webhook.sh b/.github/calcrom/webhook.sh index 2a3015969e..fd54b660b6 100755 --- a/.github/calcrom/webhook.sh +++ b/.github/calcrom/webhook.sh @@ -8,4 +8,4 @@ if [ ! -f $map_file ]; then fi output=$(perl $(dirname "$0")/calcrom.pl $build_name.map | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g') -curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST "$CALCROM_DISCORD_WEBHOOK_URL" +curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`\\n$build_name progress:\\n$output\\n\`\`\`\"}" -H "Content-Type: application/json" -X POST "$CALCROM_DISCORD_WEBHOOK_URL" diff --git a/.gitignore b/.gitignore index 38c3e02d67..cac4a07e61 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.i *.elf *.gba +!data/*.gba *.sgm *.sa1 *.ss[0-9] @@ -34,3 +35,6 @@ porymap.project.cfg *.a .fuse_hidden* *.sna +*.diff +*.sym +*.js diff --git a/INSTALL.md b/INSTALL.md index 1ad3b4b0c9..2759124bee 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -44,15 +44,15 @@ WSL1 is the preferred terminal to build **pokeemerald**. The following instructi 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. + + > You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested.
4. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution.
Notes... - > Note 1: If a dialog pops up asking for you to sign into a Microsoft Account, then just close the dialog. + > Note 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).
@@ -102,8 +102,8 @@ cd /mnt/c/Users//Desktop/decomps
Notes... -> Note 1: The Windows C:\ drive is called /mnt/c/ in WSL. -> Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Desktop/decomp folder"`. +> Note 1: The Windows C:\ drive is called /mnt/c/ in WSL. +> Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Desktop/decomp folder"`. > Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed
@@ -125,12 +125,12 @@ Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or conti Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. -1. Open msys2 at C:\devkitPro\msys2\msys2_shell.bat. +1. Open msys2 at C:\devkitPro\msys2\mingw64.exe or run `C:\devkitPro\msys2\msys2_shell.bat -mingw64`. 2. Certain packages are required to build pokeemerald. Install these by running the following command: ```bash - pacman -S make gcc zlib-devel git + pacman -S make zlib-devel git mingw-w64-x86_64-gcc mingw-w64-x86_64-libpng ```
Note... @@ -138,39 +138,6 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. > This command will ask for confirmation, just enter the yes action when prompted.
-3. Download [libpng](https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.xz/download). - -4. Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at **C:\Users\\⁠_\_**, where *\* is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: - - ```bash - cd Downloads - ``` - -
- Notes... - - > Note 1: While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. - > Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. - > Note 3: Windows path names are case-insensitive so adhering to capitalization isn’t needed. - > Note 4: If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there. -
- -5. Run the following commands to uncompress and install libpng. - - ```bash - tar xf libpng-1.6.37.tar.xz - cd libpng-1.6.37 - ./configure --prefix=/usr - make check - make install - ``` - -6. Then finally, run the following command to change back to the user profile folder. - - ```bash - cd - ``` - ### Choosing where to store pokeemerald (msys2) At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald is stored when changing directory to the pokeemerald folder. @@ -246,8 +213,8 @@ Note that the directory **must exist** in Windows. If you want to store pokeemer
Notes... -> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. -> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed +> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. +> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). @@ -316,8 +283,8 @@ Note that the directory **must exist** in the folder system. If you want to stor
Note... - -> Note: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"` + +> Note: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"`
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). @@ -339,6 +306,20 @@ Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to > [install devkitARM on Debian/Ubuntu-based distributions](#installing-devkitarm-on-debianubuntu-based-distributions). +### Arch Linux +Run this command as root to install the necessary packages: +```bash +pacman -S base-devel arm-none-eabi-binutils git libpng +``` +Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to-store-pokeemerald-linux). +
+ Note for legacy repos... + +> If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md)**, +> then you will have to install devkitARM. Install all the above packages except binutils-arm-none-eabi, and follow the instructions to +> [install devkitARM on Arch Linux](#installing-devkitarm-on-arch-linux). +
+ ### Other distributions _(Specific instructions for other distributions would be greatly appreciated!)_ @@ -437,21 +418,16 @@ If you aren't in the pokeemerald directory already, then **change directory** to ```bash cd pokeemerald ``` -To build **pokeemerald.gba** for the first time and confirm it matches the official ROM image (Note: to speed up builds, see [Parallel builds](#parallel-builds)): +To build **pokeemerald.gba** (Note: to speed up builds, see [Parallel builds](#parallel-builds)): ```bash -make compare +make ``` -If an OK is returned, then the installation went smoothly. +If it has built successfully you will have the output file **pokeemerald.gba** in your project folder.
Note for Windows... > If you switched terminals since the last build (e.g. from msys2 to WSL1), you must run `make clean-tools` once before any subsequent `make` commands.
-To build **pokeemerald.gba** with your changes: -```bash -make -``` - # Building guidance ## Parallel builds @@ -470,11 +446,20 @@ Replace `` with the number that the `nproc` command returned. `nproc` is not available on macOS. The alternative is `sysctl -n hw.ncpu` ([relevant Stack Overflow thread](https://stackoverflow.com/questions/1715580)). -## Debug info +## Compare ROM to the original -To build **pokeemerald.elf** with enhanced debug info: +For contributing, or if you'd simply like to verify that your ROM is identical to the original game, run: ```bash -make DINFO=1 +make compare +``` +If it matches, you will see the following at the end of the output: +```bash +pokeemerald.gba: OK +``` +If there are any changes from the original game, you will instead see: +```bash +pokeemerald.gba: FAILED +shasum: WARNING: 1 computed checksum did NOT match ``` ## devkitARM's C compiler @@ -553,7 +538,25 @@ devkitARM is now installed. devkitARM is now installed. -## Other toolchains +### Installing devkitARM on Arch Linux + +1. Follow [devkitPro's instructions](https://devkitpro.org/wiki/devkitPro_pacman#Customising_Existing_Pacman_Install) to configure `pacman` to download devkitPro packages. +2. Install `gba-dev`: run the following command as root. + + ```console + pacman -S gba-dev + ``` + This will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. + +3. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal): + + ```bash + source /etc/profile.d/devkit-env.sh + ``` + +devkitARM is now installed. + +### Other toolchains To build using a toolchain other than devkitARM, override the `TOOLCHAIN` environment variable with the path to your toolchain, which must contain the subdirectory `bin`. ```bash @@ -565,6 +568,14 @@ make TOOLCHAIN="/usr/local/arm-none-eabi" ``` To compile the `modern` target with this toolchain, the subdirectories `lib`, `include`, and `arm-none-eabi` must also be present. +### Building with debug info under a modern toolchain + +To build **pokeemerald.elf** with debug symbols under a modern toolchain: +```bash +make modern DINFO=1 +``` +Note that this is not necessary for a non-modern build since those are built with debug symbols by default. + # Useful additional tools * [porymap](https://github.com/huderlem/porymap) for viewing and editing maps diff --git a/Makefile b/Makefile index c3ffb5c47a..6a9e0fd6df 100644 --- a/Makefile +++ b/Makefile @@ -107,7 +107,7 @@ LIBPATH := -L ../../tools/agbcc/lib LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall else CC1 = $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet -override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g +override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast ROM := $(MODERN_ROM_NAME) OBJ_DIR := $(MODERN_OBJ_DIR_NAME) LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))" @@ -150,7 +150,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern tidymodern tidynonmodern +.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) libagbsyscall modern tidymodern tidynonmodern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -158,7 +158,7 @@ infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst # Disable dependency scanning for clean/tidy/tools # Use a separate minimal makefile for speed # Since we don't need to reload most of this makefile -ifeq (,$(filter-out all rom compare modern berry_fix libagbsyscall syms,$(MAKECMDGOALS))) +ifeq (,$(filter-out all rom compare modern libagbsyscall syms,$(MAKECMDGOALS))) $(call infoshell, $(MAKE) -f make_tools.mk) else NODEP ?= 1 @@ -169,8 +169,8 @@ ifeq (,$(MAKECMDGOALS)) SCAN_DEPS ?= 1 else # clean, tidy, tools, mostlyclean, clean-tools, $(TOOLDIRS), tidymodern, tidynonmodern don't even build the ROM - # berry_fix and libagbsyscall do their own thing - ifeq (,$(filter-out clean tidy tools mostlyclean clean-tools $(TOOLDIRS) tidymodern tidynonmodern berry_fix libagbsyscall,$(MAKECMDGOALS))) + # libagbsyscall does its own thing + ifeq (,$(filter-out clean tidy tools mostlyclean clean-tools $(TOOLDIRS) tidymodern tidynonmodern libagbsyscall,$(MAKECMDGOALS))) SCAN_DEPS ?= 0 else SCAN_DEPS ?= 1 @@ -243,7 +243,6 @@ mostlyclean: tidynonmodern tidymodern 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 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 berry_fix @$(MAKE) clean -C libagbsyscall tidy: tidynonmodern tidymodern @@ -419,7 +418,7 @@ endif $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld -$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) berry_fix libagbsyscall +$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) libagbsyscall @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent @@ -430,11 +429,6 @@ $(ROM): $(ELF) modern: all -berry_fix/berry_fix.gba: berry_fix - -berry_fix: - @$(MAKE) -C berry_fix COMPARE=$(COMPARE) TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) - libagbsyscall: @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) diff --git a/README.md b/README.md index 7adbb3e2da..ce0b6b4c73 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,28 @@ -# Pokémon Emerald +# pokeemerald Expansion -This is a decompilation of Pokémon Emerald. +## What is the pokeemerald Expansion? -It builds the following ROM: +The pokeemerald Expansion is a collection of feature branches that can be integrated into existing [pokeemerald](https://github.com/pret/pokeemerald) projects. -* [**pokeemerald.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1961) `sha1: f3ae088181bf583e55daf962a92bb46f4f1d07b7` +## What feature branches are included? -To set up the repository, see [INSTALL.md](INSTALL.md). +- **[Battle Engine Upgrade](../tree/battle_engine):** Upgrades the battle engine in pokeemerald to newer Generation games' standards. It also adds newer moves and abilities. +- **[Pokémon Expansion](../tree/pokemon_expansion):** Adds Pokémon from newer Generations and makes them available in the National Dex. It also updates base stats and other Pokémon info. +- **[Item Expansion](../tree/item_expansion):** Adds items from newer Generations and also updates item effects for field use. +- **[master](../tree/master):** Combines the above branches into one single branch for the sake of convenience. Note that this branch is only updated once in a while, so you must merge manually if you want the latest features. +## Who maintains the project? -## See also +The project was originally started by DizzyEgg alongside other contributors. -Other disassembly and/or decompilation projects: -* [**Pokémon Red and Blue**](https://github.com/pret/pokered) -* [**Pokémon Gold and Silver (Space World '97 demo)**](https://github.com/pret/pokegold-spaceworld) -* [**Pokémon Yellow**](https://github.com/pret/pokeyellow) -* [**Pokémon Trading Card Game**](https://github.com/pret/poketcg) -* [**Pokémon Pinball**](https://github.com/pret/pokepinball) -* [**Pokémon Stadium**](https://github.com/pret/pokestadium) -* [**Pokémon Gold and Silver**](https://github.com/pret/pokegold) -* [**Pokémon Crystal**](https://github.com/pret/pokecrystal) -* [**Pokémon Ruby and Sapphire**](https://github.com/pret/pokeruby) -* [**Pokémon Pinball: Ruby & Sapphire**](https://github.com/pret/pokepinballrs) -* [**Pokémon FireRed and LeafGreen**](https://github.com/pret/pokefirered) -* [**Pokémon Mystery Dungeon: Red Rescue Team**](https://github.com/pret/pmd-red) +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. +## Can I contribute even if I'm not a member of ROM Hacking Hideout? -## Contacts +Yes! Contributions are welcome via Pull Requests and they will be reviewed by maintainers. Please note that PRs to master are not accepted, as master is only intended to be a merged branch. -You can find us on [Discord](https://discord.gg/d5dubZ3) and [IRC](https://kiwiirc.com/client/irc.freenode.net/?#pret). +## What is 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.inc b/asm/macros.inc index 77f44a8475..95bb4e31b0 100644 --- a/asm/macros.inc +++ b/asm/macros.inc @@ -1,8 +1,6 @@ .include "asm/macros/asm.inc" .include "asm/macros/function.inc" .include "asm/macros/movement.inc" - .include "asm/macros/window.inc" - .include "asm/macros/pokemon_data.inc" .include "asm/macros/map.inc" .include "asm/macros/field_effect_script.inc" .include "asm/macros/trainer_hill.inc" @@ -16,130 +14,3 @@ .include "asm/macros/battle_frontier/battle_pyramid.inc" .include "asm/macros/battle_frontier/battle_tower.inc" .include "asm/macros/battle_frontier/frontier_util.inc" - - .macro region_map_entry x, y, width, height, name - .byte \x - .byte \y - .byte \width - .byte \height - .4byte gMapName_\name - .endm - - .macro obj_tiles address, uncompressed_size, tag = 0 - .4byte \address - .2byte \uncompressed_size - .2byte \tag - .endm - - .macro null_obj_tiles - obj_tiles 0, 0, 0 - .endm - - .macro obj_pal address, tag - .4byte \address - .2byte \tag - .2byte 0@ padding - .endm - - .macro null_obj_pal - obj_pal 0, 0 - .endm - - .macro paired_pals tag, address - .2byte \tag - .2byte 0 @ padding - .4byte \address - .endm - -@ For object animation frames. - .macro obj_frame_tiles address, uncompressed_size - .4byte \address - .2byte \uncompressed_size - .2byte 0 @ padding - .endm - - .macro spr_template tile_tag, pal_tag, oam, anims, images, affine_anims, callback - .2byte \tile_tag - .2byte \pal_tag - .4byte \oam - .4byte \anims - .4byte \images - .4byte \affine_anims - .4byte \callback - .endm - -@ Berry trees have a table defining the palette slot used for each of their 5 -@ stages. However, the first 2 stages always use the same slots regardless of -@ the type of tree and the slots of the last 3 stages always equal each other. - .macro berry_tree_palette_slot_table slot - .byte 3, 4, \slot, \slot, \slot - .endm - - .macro subsprite x, y, priority, tile_num_offset, size - .byte \x - .byte \y - .2byte ((\priority) << 14) | ((\tile_num_offset) << 4) | SPRITE_SIZE_\size - .endm - - .macro obj_image_anim_frame pic_id, duration, flags = 0 - .2byte \pic_id - .byte (\flags) | (\duration) - .byte 0 @ padding - .endm - - .macro obj_image_anim_loop count - .2byte 0xfffd - .byte \count - .byte 0 @ padding - .endm - - .macro obj_image_anim_jump target_index - .2byte 0xfffe - .byte \target_index - .byte 0 @ padding - .endm - - .macro obj_image_anim_end - .2byte 0xffff - .2byte 0 @ padding - .endm - - .macro obj_rot_scal_anim_frame delta_x_scale, delta_y_scale, delta_angle, duration - .2byte \delta_x_scale - .2byte \delta_y_scale - .byte \delta_angle - .byte \duration - .2byte 0 @ padding - .endm - - .macro obj_rot_scal_anim_loop count - .2byte 0x7ffd - .2byte \count - .4byte 0 @ padding - .endm - - .macro obj_rot_scal_anim_jump target_index - .2byte 0x7ffe - .2byte \target_index - .4byte 0 @ padding - .endm - - .macro obj_rot_scal_anim_end unknown=0 - .2byte 0x7fff - .2byte \unknown - .fill 4 @ padding - .endm - - .macro door_anim_frame unknown, offset - .byte \unknown - .byte 0 @ padding - .2byte \offset - .endm - - .macro door_anim_gfx metatile_num, unknown, unknown2, tile_addr, palette_addr - .2byte \metatile_num - .byte \unknown - .byte \unknown2 - .4byte \tile_addr - .4byte \palette_addr - .endm diff --git a/asm/macros/asm.inc b/asm/macros/asm.inc index 4ac003fabd..3f70145d31 100644 --- a/asm/macros/asm.inc +++ b/asm/macros/asm.inc @@ -1,4 +1,4 @@ - .macro inc x + .macro inc x:req .set \x, \x + 1 .endm @@ -6,7 +6,7 @@ .set __enum__, \x .endm - .macro enum constant + .macro enum constant:req .equiv \constant, __enum__ inc __enum__ .endm diff --git a/asm/macros/battle_ai_script.inc b/asm/macros/battle_ai_script.inc index 4c7646d6f6..7f054c9863 100644 --- a/asm/macros/battle_ai_script.inc +++ b/asm/macros/battle_ai_script.inc @@ -227,15 +227,15 @@ .byte \battler .endm - .macro if_equal_ param0:req, param1:req + .macro if_equal_u32 param0:req, param1:req .byte 0x26 - .byte \param0 + .4byte \param0 .4byte \param1 .endm - .macro if_not_equal_ param0:req, param1:req + .macro if_not_equal_u32 param0:req, param1:req .byte 0x27 - .byte \param0 + .4byte \param0 .4byte \param1 .endm @@ -245,17 +245,17 @@ .4byte \param1 .endm - .macro if_user_doesnt_go param0:req, param1:req + .macro if_cant_use_belch battler:req, ptr:req .byte 0x29 - .byte \param0 - .4byte \param1 + .byte \battler + .4byte \ptr .endm - .macro nullsub_2A + .macro nop_2A .byte 0x2a .endm - .macro nullsub_2B + .macro nop_2B .byte 0x2b .endm @@ -287,11 +287,11 @@ .4byte \param1 .endm - .macro nullsub_32 + .macro nop_32 .byte 0x32 .endm - .macro nullsub_33 + .macro nop_33 .byte 0x33 .endm @@ -315,13 +315,13 @@ .macro if_effect param0:req, param1:req .byte 0x37 - .byte \param0 + .2byte \param0 .4byte \param1 .endm .macro if_not_effect param0:req, param1:req .byte 0x38 - .byte \param0 + .2byte \param0 .4byte \param1 .endm @@ -467,27 +467,35 @@ .byte \battler .endm - .macro nullsub_52 + .macro if_move_flag flag jumpptr .byte 0x52 + .4byte \flag + .4byte \jumpptr .endm - .macro nullsub_53 + .macro if_field_status flag jumpptr .byte 0x53 + .4byte \flag + .4byte \jumpptr .endm - .macro nullsub_54 + .macro get_move_accuracy .byte 0x54 .endm - .macro nullsub_55 + .macro call_if_eq value, ptr .byte 0x55 + .2byte \value + .4byte \ptr .endm - .macro nullsub_56 + .macro call_if_move_flag flag ptr .byte 0x56 + .4byte \flag + .4byte \ptr .endm - .macro nullsub_57 + .macro nop_57 .byte 0x57 .endm @@ -551,7 +559,158 @@ .4byte \param2 .endm + .macro get_ally_chosen_move + .byte 0x63 + .endm + + .macro if_has_no_attacking_moves battler:req, param1:req + .byte 0x64 + .byte \battler + .4byte \param1 + .endm + + .macro get_hazards_count battler:req, effect:req + .byte 0x65 + .byte \battler + .2byte \effect + .endm + + .macro if_doesnt_hold_berry battler:req, ptr:req + .byte 0x66 + .byte \battler + .4byte \ptr + .endm + + .macro if_share_type battler1:req, battler2:req, ptr:req + .byte 0x67 + .byte \battler1 + .byte \battler2 + .4byte \ptr + .endm + + .macro if_cant_use_last_resort battler:req, ptr:req + .byte 0x68 + .byte \battler + .4byte \ptr + .endm + + .macro if_has_move_with_split battler:req, split:req, ptr:req + .byte 0x69 + .byte \battler + .byte \split + .4byte \ptr + .endm + + .macro if_has_no_move_with_split battler:req, split:req, ptr:req + .byte 0x6A + .byte \battler + .byte \split + .4byte \ptr + .endm + + .macro if_physical_moves_unusable attacker:req, target:req, ptr:req + .byte 0x6B + .byte \attacker + .byte \target + .4byte \ptr + .endm + + .macro if_ai_can_go_down ptr:req + .byte 0x6C + .4byte \ptr + .endm + + .macro if_has_move_with_type battler:req, type:req, ptr:req + .byte 0x6D + .byte \battler + .byte \type + .4byte \ptr + .endm + + .macro if_no_move_used battler:req, ptr:req + .byte 0x6E + .byte \battler + .4byte \ptr + .endm + + .macro if_has_move_with_flag battler:req, flag:req, ptr:req + .byte 0x6F + .byte \battler + .4byte \flag + .4byte \ptr + .endm + + .macro if_battler_absent battler:req, ptr:req + .byte 0x70 + .byte \battler + .4byte \ptr + .endm + + .macro if_grounded battler:req, ptr:req + .byte 0x71 + .byte \battler + .4byte \ptr + .endm + + .macro get_best_dmg_hp_percent + .byte 0x72 + .endm + + .macro get_curr_dmg_hp_percent + .byte 0x73 + .endm + + .macro get_move_split_from_result + .byte 0x74 + .endm + + .macro get_considered_move_split + .byte 0x75 + .endm + + .macro get_considered_move_target + .byte 0x76 + .endm + + .macro compare_speeds battler1:req, battler2:req + .byte 0x77 + .byte \battler1 + .byte \battler2 + .endm + + .macro is_wakeup_turn battler:req + .byte 0x78 + .byte \battler + .endm + + .macro if_has_move_with_accuracy_lt battler:req, value:req, ptr:req + .byte 0x79 + .byte \battler + .byte \value + .4byte \ptr + .endm + @ useful script macros + .macro if_has_physical_move battler:req, ptr:req + if_has_move_with_split \battler, SPLIT_PHYSICAL, \ptr + .endm + + .macro if_has_no_physical_move battler:req, ptr:req + if_has_no_move_with_split \battler, SPLIT_PHYSICAL, \ptr + .endm + + .macro if_has_special_move battler:req, ptr:req + if_has_move_with_split \battler, SPLIT_SPECIAL, \ptr + .endm + + .macro if_has_no_special_move battler:req, ptr:req + if_has_no_move_with_split \battler, SPLIT_SPECIAL, \ptr + .endm + + .macro if_holds_no_item battler, ptr:req + if_holds_item \battler, 0, \ptr + .endm + .macro get_curr_move_type get_type AI_TYPE_MOVE .endm @@ -617,3 +776,8 @@ .macro if_any_move_encored battler:req, ptr:req if_any_move_disabled_or_encored \battler, 1, \ptr .endm + + .macro call_if_always_hit ptr:req + get_move_accuracy + call_if_eq 0, \ptr + .endm diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index 5426cdfba3..8dda8979e5 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -14,7 +14,7 @@ .byte 0x02 .4byte \template .if \anim_battler == ANIM_TARGET - .byte 0x80 | (\subpriority_offset & 0x7F) + .byte ANIMSPRITE_IS_TARGET | (\subpriority_offset & 0x7F) .else .byte (\subpriority_offset & 0x7F) .endif @@ -34,20 +34,20 @@ .Lcreatetask_\@_2: .endm - .macro delay param0:req + .macro delay frames:req .byte 0x4 - .byte \param0 + .byte \frames .endm .macro waitforvisualfinish .byte 0x5 .endm - .macro hang1 + .macro nop .byte 0x6 .endm - .macro hang2 + .macro nop2 .byte 0x7 .endm @@ -79,30 +79,30 @@ .byte 0xd .endm - .macro call param0:req + .macro call ptr:req .byte 0xe - .4byte \param0 + .4byte \ptr .endm .macro return .byte 0xf .endm - .macro setarg param0:req, param1:req + .macro setarg argId:req, value:req .byte 0x10 - .byte \param0 - .2byte \param1 + .byte \argId + .2byte \value .endm - .macro choosetwoturnanim param0:req, param1:req + .macro choosetwoturnanim ptr1:req, ptr2:req .byte 0x11 - .4byte \param0 - .4byte \param1 + .4byte \ptr1 + .4byte \ptr2 .endm - .macro jumpifmoveturn param0:req, ptr:req + .macro jumpifmoveturn value:req, ptr:req .byte 0x12 - .byte \param0 + .byte \value .4byte \ptr .endm @@ -144,13 +144,13 @@ .byte \pan .endm - .macro panse_1B se:req, param1:req, param2:req, param3:req, param4:req + .macro panse se:req, currentPan:req, targetPan:req, incrementPan:req, delay:req .byte 0x1b .2byte \se - .byte \param1 - .byte \param2 - .byte \param3 - .byte \param4 + .byte \currentPan + .byte \targetPan + .byte \incrementPan + .byte \delay .endm .macro loopsewithpan se:req, pan:req, wait:req, times:req @@ -168,9 +168,9 @@ .byte \wait .endm - .macro setbldcnt param0:req + .macro setbldcnt bldcnt:req .byte 0x1e - .2byte \param0 + .2byte \bldcnt .endm .macro createsoundtask addr:req, argv:vararg @@ -186,19 +186,19 @@ .byte 0x20 .endm - .macro jumpargeq param0:req, param1:req, ptr:req + .macro jumpargeq argId:req, value:req, ptr:req .byte 0x21 - .byte \param0 - .2byte \param1 + .byte \argId + .2byte \value .4byte \ptr .endm - .macro monbg_22 battler:req + .macro monbg_static battler:req .byte 0x22 .byte \battler .endm - .macro clearmonbg_23 battler:req + .macro clearmonbg_static battler:req .byte 0x23 .byte \battler .endm @@ -208,41 +208,41 @@ .4byte \ptr .endm - .macro fadetobgfromset param0:req, param1:req, param2:req + .macro fadetobgfromset bgOpponent:req, bgPlayer:req, bgContest:req .byte 0x25 - .byte \param0 - .byte \param1 - .byte \param2 + .byte \bgOpponent + .byte \bgPlayer + .byte \bgContest .endm - .macro panse_26 se:req, param1:req, param2:req, param3:req, param4:req + .macro panse_adjustnone se:req, currentPan:req, targetPan:req, incrementPan:req, delay:req .byte 0x26 .2byte \se - .byte \param1 - .byte \param2 - .byte \param3 - .byte \param4 + .byte \currentPan + .byte \targetPan + .byte \incrementPan + .byte \delay .endm - .macro panse_27 se:req, param1:req, param2:req, param3:req, param4:req + .macro panse_adjustall se:req, currentPan:req, targetPan:req, incrementPan:req, delay:req .byte 0x27 .2byte \se - .byte \param1 - .byte \param2 - .byte \param3 - .byte \param4 + .byte \currentPan + .byte \targetPan + .byte \incrementPan + .byte \delay .endm - .macro monbgprio_28 battler:req + .macro splitbgprio battler:req .byte 0x28 .byte \battler .endm - .macro monbgprio_29 + .macro splitbgprio_all .byte 0x29 .endm - .macro monbgprio_2A battler:req + .macro splitbgprio_foes battler:req .byte 0x2a .byte \battler .endm @@ -257,12 +257,12 @@ .byte \battler .endm - .macro doublebattle_2D battler:req + .macro teamattack_moveback battler:req .byte 0x2d .byte \battler .endm - .macro doublebattle_2E battler:req + .macro teamattack_movefwd battler:req .byte 0x2e .byte \battler .endm @@ -283,3 +283,62 @@ .macro jumpretfalse ptr:req jumpreteq FALSE, \ptr .endm + + .macro jumpifdoublebattle ptr:req + createvisualtask AnimTask_IsDoubleBattle, 0 + jumprettrue \ptr + .endm + +@ keep CFRU macros cause I'm lazy. todo: update to createsprite and createvisualtask, respectively +.macro launchtemplate launchtemplatePtr launchtemplatePriority launchtemplateArgsNo launchtemplatearg0 launchtemplatearg1 launchtemplatearg2 launchtemplatearg3 launchtemplatearg4 launchtemplatearg5 launchtemplatearg6 launchtemplatearg7 launchtemplatearg8 + .byte 0x2 + .word \launchtemplatePtr + .byte \launchtemplatePriority + .byte \launchtemplateArgsNo + .hword \launchtemplatearg0 + .hword \launchtemplatearg1 + .hword \launchtemplatearg2 + .hword \launchtemplatearg3 + .hword \launchtemplatearg4 + .hword \launchtemplatearg5 + .hword \launchtemplatearg6 + .hword \launchtemplatearg7 + .hword \launchtemplatearg8 + .endm + +.macro launchtask launchtaskPtr launchtaskPriority launchtaskArgsNo launchtaskarg0 launchtaskarg1 launchtaskarg2 launchtaskarg3 launchtaskarg4 launchtaskarg5 launchtaskarg6 launchtaskarg7 launchtaskarg8 + .byte 0x3 + .word \launchtaskPtr + .byte \launchtaskPriority + .byte \launchtaskArgsNo + .hword \launchtaskarg0 + .hword \launchtaskarg1 + .hword \launchtaskarg2 + .hword \launchtaskarg3 + .hword \launchtaskarg4 + .hword \launchtaskarg5 + .hword \launchtaskarg6 + .hword \launchtaskarg7 + .hword \launchtaskarg8 + .endm + +.macro setblends setblends_value + .byte 0xC + .hword \setblends_value + .endm + +.macro launchsoundtask launchsoundtaskPtr launchsoundtaskArgsNo launchsoundtaskarg0 launchsoundtaskarg1 launchsoundtaskarg2 launchsoundtaskarg3 launchsoundtaskarg4 launchsoundtaskarg5 launchsoundtaskarg6 launchsoundtaskarg7 launchsoundtaskarg8 + .byte 0x1F + .word \launchsoundtaskPtr + .byte \launchsoundtaskArgsNo + .hword \launchsoundtaskarg0 + .hword \launchsoundtaskarg1 + .hword \launchsoundtaskarg2 + .hword \launchsoundtaskarg3 + .hword \launchsoundtaskarg4 + .hword \launchsoundtaskarg5 + .hword \launchsoundtaskarg6 + .hword \launchsoundtaskarg7 + .hword \launchsoundtaskarg8 + .endm + diff --git a/asm/macros/battle_frontier/apprentice.inc b/asm/macros/battle_frontier/apprentice.inc index 5d9ab8e3b9..9eb5f9ea8a 100644 --- a/asm/macros/battle_frontier/apprentice.inc +++ b/asm/macros/battle_frontier/apprentice.inc @@ -53,7 +53,7 @@ special CallApprenticeFunction .endm - @ Always returns TRUE. No side effect. May have been for debug or dummied for some other reason + @ Always returns TRUE. No side effect. May have been for debug or dummied for some other reason .macro apprentice_shouldcheckgone setvar VAR_0x8004, APPRENTICE_FUNC_CHECK_GONE special CallApprenticeFunction @@ -94,11 +94,19 @@ @ Buffer some APPRENTICE_BUFF_* string to the given stringvar (0 for STR_VAR_1, 1 for STR_VAR_2, 2 for STR_VAR_3) .macro apprentice_buff stringvar:req, tobuff:req setvar VAR_0x8004, APPRENTICE_FUNC_BUFFER_STRING - setvar VAR_0x8005, \stringvar - .if \tobuff >= VARS_START - copyvar VAR_0x8006, \tobuff + .if \stringvar == STR_VAR_1 + setvar VAR_0x8005, 0 + .elseif \stringvar == STR_VAR_2 + setvar VAR_0x8005, 1 + .elseif \stringvar == STR_VAR_3 + setvar VAR_0x8005, 2 .else - setvar VAR_0x8006, \tobuff + setvar VAR_0x8005, \stringvar + .endif + .if \tobuff >= VARS_START + copyvar VAR_0x8006, \tobuff + .else + setvar VAR_0x8006, \tobuff .endif special CallApprenticeFunction .endm @@ -109,7 +117,7 @@ special CallApprenticeFunction .endm - @ Set which mon the Apprentice should lead with + @ Set which mon the Apprentice should lead with .macro apprentice_setleadmon monId:req copyvar VAR_0x8005, \monId setvar VAR_0x8004, APPRENTICE_FUNC_SET_LEAD_MON @@ -141,7 +149,7 @@ special CallApprenticeFunction .endm - @ Always returns TRUE. No side effect. May have been for debug or dummied for some other reason + @ Always returns TRUE. No side effect. May have been for debug or dummied for some other reason .macro apprentice_shouldleave setvar VAR_0x8004, APPRENTICE_FUNC_SHOULD_LEAVE special CallApprenticeFunction diff --git a/asm/macros/battle_frontier/battle_factory.inc b/asm/macros/battle_frontier/battle_factory.inc index 684eeb98dc..2d49d44668 100644 --- a/asm/macros/battle_frontier/battle_factory.inc +++ b/asm/macros/battle_frontier/battle_factory.inc @@ -88,7 +88,7 @@ .endm @ Return the FACTORY_STYLE_* dependent on what types of moves the opponents team has, or FACTORY_NUM_STYLES if multiple styles tie for the same amount of moves - .macro factory_getopponentstyle + .macro factory_getopponentstyle setvar VAR_0x8004, BATTLE_FACTORY_FUNC_GET_OPPONENT_STYLE special CallBattleFactoryFunction .endm diff --git a/asm/macros/battle_frontier/battle_palace.inc b/asm/macros/battle_frontier/battle_palace.inc index f326c11546..37c80467a7 100644 --- a/asm/macros/battle_frontier/battle_palace.inc +++ b/asm/macros/battle_frontier/battle_palace.inc @@ -31,7 +31,7 @@ special CallBattlePalaceFunction .endm - @ Buffer the opponents intro speech to gStringVar4. Also used by Battle Arena and Factory + @ Buffer the opponents intro speech to gStringVar4. Also used by Battle Arena and Factory .macro palace_getopponentintro setvar VAR_0x8004, BATTLE_PALACE_FUNC_GET_OPPONENT_INTRO special CallBattlePalaceFunction diff --git a/asm/macros/battle_frontier/battle_pyramid.inc b/asm/macros/battle_frontier/battle_pyramid.inc index f8141e2dd6..bb5069f18a 100644 --- a/asm/macros/battle_frontier/battle_pyramid.inc +++ b/asm/macros/battle_frontier/battle_pyramid.inc @@ -1,7 +1,7 @@ @ Initialize the Battle Pyramid challenge .macro pyramid_init setvar VAR_0x8004, BATTLE_PYRAMID_FUNC_INIT - special CallBattlePyramidFunction + special CallBattlePyramidFunction .endm @ Get the value of some PYRAMID_DATA_*. See GetBattlePyramidData for the data types that can be retrieved @@ -59,7 +59,7 @@ @ Set the facility trainers to gBattleFrontierTrainers .macro pyramid_settrainers setvar VAR_0x8004, BATTLE_PYRAMID_FUNC_SET_TRAINERS - special CallBattlePyramidFunction + special CallBattlePyramidFunction .endm @ Show the post-battle hint text @@ -68,11 +68,11 @@ special CallBattlePyramidFunction .endm - @ VAR_RESULT is 1 if player is on a Pyramid floor, 2 if on the Pyramid peak, 0 otherwise + @ VAR_RESULT is 1 if player is on a Pyramid floor, 2 if on the Pyramid peak, 0 otherwise .macro pyramid_inchallenge setvar VAR_0x8004, BATTLE_PYRAMID_FUNC_IS_IN special CallBattlePyramidFunction - .endm + .endm @ Update the light around the player. 2 different modes, for setting or incrementing light. See PYRAMID_LIGHT_* .macro pyramid_updatelight radius:req, mode:req, sound=0xFFFF @@ -83,7 +83,7 @@ setvar VAR_0x8007, \sound .endif special CallBattlePyramidFunction - .endm + .endm @ Reset the held items to what they were at the start of the challenge .macro pyramid_clearhelditems @@ -100,5 +100,5 @@ @ Reset sketched moves and update the party order in the saveblock .macro pyramid_resetparty setvar VAR_0x8004, BATTLE_PYRAMID_FUNC_RESTORE_PARTY - special CallBattlePyramidFunction + special CallBattlePyramidFunction .endm diff --git a/asm/macros/battle_frontier/battle_tower.inc b/asm/macros/battle_frontier/battle_tower.inc index ccc777c507..46bbc392f6 100644 --- a/asm/macros/battle_frontier/battle_tower.inc +++ b/asm/macros/battle_frontier/battle_tower.inc @@ -89,3 +89,77 @@ setvar VAR_0x8004, BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA special CallBattleTowerFunc .endm + + @Custom multi-battle commands + + .macro choose_mons + fadescreen 1 + special ChooseHalfPartyForBattle @ choose 3 mons for battle + waitstate + .endm + + .macro multi_do type:req, partnerId:req, partnerPicId:req + special ReducePlayerPartyToSelectedMons + setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SET_DATA + setvar VAR_0x8005, FRONTIER_DATA_SELECTED_MON_ORDER + special CallFrontierUtilFunc @ saves the mon order, so the non-selected mons get restored afterwards + setvar VAR_0x8004, SPECIAL_BATTLE_MULTI + setvar VAR_0x8005, \type | MULTI_BATTLE_CHOOSE_MONS + setvar VAR_0x8006, \partnerId + setvar VAR_0x8007, \partnerPicId + special DoSpecialTrainerBattle + waitstate + setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SAVE_PARTY + special CallFrontierUtilFunc + special LoadPlayerParty + .endm + + .macro multi_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req + special SavePlayerParty + trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons + trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons + multi_do MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId + .endm + + .macro multi_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req + special SavePlayerParty + trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons + multi_do MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId + .endm + + @ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out. + .macro multi_wild partnerId:req, partnerPicId:req + special SavePlayerParty + multi_do MULTI_BATTLE_2_VS_WILD, \partnerId, \partnerPicId + .endm + + .macro multi_do_fixed type:req, partnerId:req, partnerPicId:req + setvar VAR_0x8004, SPECIAL_BATTLE_MULTI + setvar VAR_0x8005, \type + setvar VAR_0x8006, \partnerId + setvar VAR_0x8007, \partnerPicId + special DoSpecialTrainerBattle + waitstate + setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SAVE_PARTY + special CallFrontierUtilFunc + special LoadPlayerParty + .endm + + .macro multi_fixed_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req + special SavePlayerParty + trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons + trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons + multi_do_fixed MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId + .endm + + .macro multi_fixed_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req + special SavePlayerParty + trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons + multi_do_fixed MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId + .endm + + @ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out. + .macro multi_fixed_wild partnerId:req, partnerPicId:req + special SavePlayerParty + multi_do_fixed MULTI_BATTLE_2_VS_WILD, \partnerId, \partnerPicId + .endm diff --git a/asm/macros/battle_frontier/frontier_util.inc b/asm/macros/battle_frontier/frontier_util.inc index def5b4d1c7..c875fcdde2 100644 --- a/asm/macros/battle_frontier/frontier_util.inc +++ b/asm/macros/battle_frontier/frontier_util.inc @@ -136,7 +136,13 @@ @ Buffer the name of gTrainerBattleOpponent_A in STR_VAR_1 (0) or STR_VAR_2 (1) .macro frontier_gettrainername stringVar:req setvar VAR_0x8004, FRONTIER_UTIL_FUNC_BUFFER_TRAINER_NAME - setvar VAR_0x8005, \stringVar + .if \stringVar == STR_VAR_1 + setvar VAR_0x8005, 0 + .elseif \stringVar == STR_VAR_2 + setvar VAR_0x8005, 1 + .else + setvar VAR_0x8005, \stringVar + .endif special CallFrontierUtilFunc .endm diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 0f51061e85..50c5f7fd72 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -3,10 +3,10 @@ .byte 0x0 .endm - .macro accuracycheck param0:req, param1:req + .macro accuracycheck failPtr:req, move:req .byte 0x1 - .4byte \param0 - .2byte \param1 + .4byte \failPtr + .2byte \move .endm .macro attackstring @@ -29,11 +29,11 @@ .byte 0x6 .endm - .macro adjustnormaldamage + .macro adjustdamage .byte 0x7 .endm - .macro adjustnormaldamage2 + .macro multihitresultmessage .byte 0x8 .endm @@ -77,9 +77,9 @@ .2byte \id .endm - .macro waitmessage param0:req + .macro waitmessage time:req .byte 0x12 - .2byte \param0 + .2byte \time .endm .macro printfromtable ptr:req @@ -109,10 +109,17 @@ .byte \battler .endm - .macro tryfaintmon battler:req, param1:req, ptr:req + .macro tryfaintmon battler:req .byte 0x19 .byte \battler - .byte \param1 + .byte FALSE + .4byte NULL + .endm + + .macro tryfaintmon_spikes battler:req, ptr:req + .byte 0x19 + .byte \battler + .byte TRUE .4byte \ptr .endm @@ -140,17 +147,17 @@ .4byte \ptr .endm - .macro jumpifability param0:req, ability:req, ptr:req + .macro jumpifability battler:req, ability:req, ptr:req .byte 0x1e - .byte \param0 - .byte \ability + .byte \battler + .2byte \ability .4byte \ptr .endm .macro jumpifsideaffecting battler:req, sidestatus:req, ptr:req .byte 0x1f .byte \battler - .2byte \sidestatus + .4byte \sidestatus .4byte \ptr .endm @@ -163,19 +170,28 @@ .4byte \ptr .endm - .macro jumpifstatus3condition battler:req, status3:req, param2:req, ptr:req + .macro jumpifstatus3condition battler:req, status3:req, condition:req, ptr:req .byte 0x21 .byte \battler .4byte \status3 - .byte \param2 + .byte \condition + .4byte \ptr + .endm + + .macro jumpbasedontype battler:req, type:req, case:req, ptr:req + .byte 0x22 + .byte \battler + .byte \type + .byte \case .4byte \ptr .endm .macro jumpiftype battler:req, type:req, ptr:req - .byte 0x22 - .byte \battler - .byte \type - .4byte \ptr + jumpbasedontype \battler, \type, 1, \ptr + .endm + + .macro jumpifnottype battler:req, type:req, ptr:req + jumpbasedontype \battler, \type, 0, \ptr .endm .macro getexp battler:req @@ -183,7 +199,7 @@ .byte \battler .endm - .macro atk24 ptr:req + .macro checkteamslost ptr:req .byte 0x24 .4byte \ptr .endm @@ -207,118 +223,118 @@ .4byte \ptr .endm - .macro jumpifbyte ifflag:req, param1:req, param2:req, param3:req + .macro jumpifbyte ifflag:req, val:req, byte:req, ptr:req .byte 0x29 .byte \ifflag - .4byte \param1 - .byte \param2 - .4byte \param3 + .4byte \val + .byte \byte + .4byte \ptr .endm - .macro jumpifhalfword ifflag:req, param1:req, param2:req, param3:req + .macro jumpifhalfword ifflag:req, val:req, hword:req, ptr:req .byte 0x2a .byte \ifflag - .4byte \param1 - .2byte \param2 - .4byte \param3 + .4byte \val + .2byte \hword + .4byte \ptr .endm - .macro jumpifword ifflag:req, param1:req, param2:req, param3:req + .macro jumpifword ifflag:req, val:req, word:req, ptr:req .byte 0x2b .byte \ifflag - .4byte \param1 - .4byte \param2 - .4byte \param3 + .4byte \val + .4byte \word + .4byte \ptr .endm - .macro jumpifarrayequal param0:req, param1:req, param2:req, param3:req + .macro jumpifarrayequal val1:req, val2:req, size:req, ptr:req .byte 0x2c - .4byte \param0 - .4byte \param1 - .byte \param2 - .4byte \param3 + .4byte \val1 + .4byte \val2 + .byte \size + .4byte \ptr .endm - .macro jumpifarraynotequal param0:req, param1:req, param2:req, param3:req + .macro jumpifarraynotequal val1:req, val2:req, size:req, ptr:req .byte 0x2d - .4byte \param0 - .4byte \param1 - .byte \param2 - .4byte \param3 + .4byte \val1 + .4byte \val2 + .byte \size + .4byte \ptr .endm - .macro setbyte ptr:req, param1:req + .macro setbyte ptr:req, byte:req .byte 0x2e .4byte \ptr - .byte \param1 + .byte \byte .endm - .macro addbyte ptr:req, param1:req + .macro addbyte ptr:req, byte:req .byte 0x2f .4byte \ptr - .byte \param1 + .byte \byte .endm - .macro subbyte ptr:req, param1:req + .macro subbyte ptr:req, byte:req .byte 0x30 .4byte \ptr - .byte \param1 + .byte \byte .endm - .macro copyarray param0:req, param1:req, param2:req + .macro copyarray dest:req, src:req, size:req .byte 0x31 - .4byte \param0 - .4byte \param1 - .byte \param2 + .4byte \dest + .4byte \src + .byte \size .endm - .macro copyarraywithindex param0:req, param1:req, param2:req, param3:req + .macro copyarraywithindex dest:req, src:req, index:req, size:req .byte 0x32 - .4byte \param0 - .4byte \param1 - .4byte \param2 - .byte \param3 + .4byte \dest + .4byte \src + .4byte \index + .byte \size .endm - .macro orbyte ptr:req, param1:req + .macro orbyte ptr:req, byte:req .byte 0x33 .4byte \ptr - .byte \param1 + .byte \byte .endm - .macro orhalfword ptr:req, param1:req + .macro orhalfword ptr:req, hword:req .byte 0x34 .4byte \ptr - .2byte \param1 + .2byte \hword .endm - .macro orword ptr:req, param1:req + .macro orword ptr:req, word:req .byte 0x35 .4byte \ptr - .4byte \param1 + .4byte \word .endm - .macro bicbyte ptr:req, param1:req + .macro bicbyte ptr:req, byte:req .byte 0x36 .4byte \ptr - .byte \param1 + .byte \byte .endm - .macro bichalfword ptr:req, param1:req + .macro bichalfword ptr:req, hword:req .byte 0x37 .4byte \ptr - .2byte \param1 + .2byte \hword .endm - .macro bicword ptr:req, param1:req + .macro bicword ptr:req, word:req .byte 0x38 .4byte \ptr - .4byte \param1 + .4byte \word .endm - .macro pause param0:req + .macro pause time:req .byte 0x39 - .2byte \param0 + .2byte \time .endm .macro waitstate @@ -356,16 +372,13 @@ .4byte \ptr .endm - .macro jumpiftype2 battler:req, type:req, ptr:req + .macro setroost .byte 0x42 - .byte \battler - .byte \type - .4byte \ptr .endm .macro jumpifabilitypresent ability:req, ptr:req .byte 0x43 - .byte \ability + .2byte \ability .4byte \ptr .endm @@ -373,18 +386,18 @@ .byte 0x44 .endm - .macro playanimation battler:req, param1:req, param2:req + .macro playanimation battler:req, animType:req, arg=NULL .byte 0x45 .byte \battler - .byte \param1 - .4byte \param2 + .byte \animType + .4byte \arg .endm - .macro playanimation2 battler:req, param1:req, param2:req + .macro playanimation_var battler:req, animType:req, arg=NULL .byte 0x46 .byte \battler - .4byte \param1 - .4byte \param2 + .4byte \animType + .4byte \arg .endm .macro setgraphicalstatchangevalues @@ -398,46 +411,47 @@ .byte \statchange .endm - .macro moveend param0:req, param1:req + .macro moveend endMode:req, endState:req .byte 0x49 - .byte \param0 - .byte \param1 + .byte \endMode + .byte \endState .endm - + @ Help macros for 5 uses of moveend command - + @ All cases .macro moveendall setbyte sMOVEEND_STATE, 0 moveend 0, 0 .endm - + @ Chosen case .macro moveendcase case:req setbyte sMOVEEND_STATE, \case moveend 1, 0 .endm - + @ All cases from (inclusive) .macro moveendfrom from:req setbyte sMOVEEND_STATE, \from moveend 0, 0 .endm - + @ All cases from 0 to (not inclusive) .macro moveendto to:req setbyte sMOVEEND_STATE, 0 moveend 2, \to .endm - + @ Cases from (inclusive) to (not inclusive) .macro moveendfromto from:req, to:req setbyte sMOVEEND_STATE, \from moveend 2, \to .endm - .macro typecalc2 + .macro sethealblock ptr:req .byte 0x4a + .4byte \ptr .endm .macro returnatktoball @@ -466,16 +480,16 @@ .4byte \ptr .endm - .macro openpartyscreen param0:req, param1:req + .macro openpartyscreen battler:req, ptr:req .byte 0x50 - .byte \param0 - .4byte \param1 + .byte \battler + .4byte \ptr .endm - .macro switchhandleorder battler:req, param1:req + .macro switchhandleorder battler:req, state:req .byte 0x51 .byte \battler - .byte \param1 + .byte \state .endm .macro switchineffects battler:req @@ -488,14 +502,14 @@ .byte \battler .endm - .macro playse param0:req + .macro playse song:req .byte 0x54 - .2byte \param0 + .2byte \song .endm - .macro fanfare param0:req + .macro fanfare song:req .byte 0x55 - .2byte \param0 + .2byte \song .endm .macro playfaintcry battler:req @@ -512,21 +526,21 @@ .byte \battler .endm - .macro handlelearnnewmove param0:req, param1:req, param2:req + .macro handlelearnnewmove learnedMovePtr:req, nothingToLearnPtr:req, isFirstMove:req .byte 0x59 - .4byte \param0 - .4byte \param1 - .byte \param2 + .4byte \learnedMovePtr + .4byte \nothingToLearnPtr + .byte \isFirstMove .endm - .macro yesnoboxlearnmove param0:req + .macro yesnoboxlearnmove forgotMovePtr:req .byte 0x5a - .4byte \param0 + .4byte \forgotMovePtr .endm - .macro yesnoboxstoplearningmove param0:req + .macro yesnoboxstoplearningmove noPtr:req .byte 0x5b - .4byte \param0 + .4byte \noPtr .endm .macro hitanimation battler:req @@ -538,7 +552,7 @@ .byte 0x5d .endm - .macro atk5E battler:req + .macro updatebattlermoves battler:req .byte 0x5e .byte \battler .endm @@ -547,9 +561,9 @@ .byte 0x5f .endm - .macro incrementgamestat param0:req + .macro incrementgamestat stat:req .byte 0x60 - .byte \param0 + .byte \stat .endm .macro drawpartystatussummary battler:req @@ -562,9 +576,9 @@ .byte \battler .endm - .macro jumptocalledmove param0:req + .macro jumptocalledmove notChosenMove:req .byte 0x63 - .byte \param0 + .byte \notChosenMove .endm .macro statusanimation battler:req @@ -578,11 +592,11 @@ .4byte \status2 .endm - .macro chosenstatusanimation battler:req, param1:req, param2:req + .macro chosenstatusanimation battler:req, isStatus2:req, status:req .byte 0x66 .byte \battler - .byte \param1 - .4byte \param2 + .byte \isStatus2 + .4byte \status .endm .macro yesnobox @@ -593,8 +607,9 @@ .byte 0x68 .endm - .macro adjustsetdamage + .macro setgravity ptr:req .byte 0x69 + .4byte \ptr .endm .macro removeitem battler:req @@ -623,7 +638,7 @@ .byte \battler .endm - .macro recordlastability battler:req + .macro recordability battler:req .byte 0x70 .byte \battler .endm @@ -651,17 +666,17 @@ .byte 0x75 .endm - .macro various battler:req, param1:req + .macro various battler:req, id:req .byte 0x76 .byte \battler - .byte \param1 + .byte \id .endm .macro setprotectlike .byte 0x77 .endm - .macro faintifabilitynotdamp + .macro tryexplosion .byte 0x78 .endm @@ -674,9 +689,9 @@ .4byte \ptr .endm - .macro tryhealhalfhealth param0:req, battler:req + .macro tryhealhalfhealth ptr:req, battler:req .byte 0x7b - .4byte \param0 + .4byte \ptr .byte \battler .endm @@ -696,14 +711,14 @@ .byte 0x7f .endm - .macro manipulatedamage param0:req + .macro manipulatedamage mode:req .byte 0x80 - .byte \param0 + .byte \mode .endm - .macro trysetrest param0:req + .macro trysetrest ptr:req .byte 0x81 - .4byte \param0 + .4byte \ptr .endm .macro jumpifnotfirstturn ptr:req @@ -711,36 +726,38 @@ .4byte \ptr .endm - .macro nop + .macro setmiracleeye ptr:req .byte 0x83 + .4byte \ptr .endm - .macro jumpifcantmakeasleep param0:req + .macro jumpifcantmakeasleep ptr:req .byte 0x84 - .4byte \param0 + .4byte \ptr .endm - .macro stockpile + .macro stockpile id:req .byte 0x85 + .byte \id .endm - .macro stockpiletobasedamage param0:req + .macro stockpiletobasedamage ptr:req .byte 0x86 - .4byte \param0 + .4byte \ptr .endm - .macro stockpiletohpheal param0:req + .macro stockpiletohpheal ptr:req .byte 0x87 - .4byte \param0 + .4byte \ptr .endm - .macro negativedamage + .macro setdrainedhp .byte 0x88 .endm .macro statbuffchange flags:req, jumpptr:req .byte 0x89 - .byte \flags + .2byte \flags .4byte \jumpptr .endm @@ -756,23 +773,23 @@ .byte 0x8c .endm - .macro setmultihitcounter param0:req + .macro setmultihitcounter val:req .byte 0x8d - .byte \param0 + .byte \val .endm .macro initmultihitstring .byte 0x8e .endm - .macro forcerandomswitch param0:req + .macro forcerandomswitch ptr:req .byte 0x8f - .4byte \param0 + .4byte \ptr .endm - .macro tryconversiontypechange param0:req + .macro tryconversiontypechange ptr:req .byte 0x90 - .4byte \param0 + .4byte \ptr .endm .macro givepaydaymoney @@ -783,9 +800,9 @@ .byte 0x92 .endm - .macro tryKO param0:req + .macro tryKO ptr:req .byte 0x93 - .4byte \param0 + .4byte \ptr .endm .macro damagetohalftargethp @@ -800,9 +817,9 @@ .byte 0x96 .endm - .macro tryinfatuating param0:req + .macro tryinfatuating ptr:req .byte 0x97 - .4byte \param0 + .4byte \ptr .endm .macro updatestatusicon battler:req @@ -826,9 +843,9 @@ .byte 0x9c .endm - .macro mimicattackcopy param0:req + .macro mimicattackcopy ptr:req .byte 0x9d - .4byte \param0 + .4byte \ptr .endm .macro metronome @@ -843,48 +860,48 @@ .byte 0xa0 .endm - .macro counterdamagecalculator param0:req + .macro counterdamagecalculator ptr:req .byte 0xa1 - .4byte \param0 + .4byte \ptr .endm - .macro mirrorcoatdamagecalculator param0:req + .macro mirrorcoatdamagecalculator ptr:req .byte 0xa2 - .4byte \param0 + .4byte \ptr .endm - .macro disablelastusedattack param0:req + .macro disablelastusedattack ptr:req .byte 0xa3 - .4byte \param0 + .4byte \ptr .endm - .macro trysetencore param0:req + .macro trysetencore ptr:req .byte 0xa4 - .4byte \param0 + .4byte \ptr .endm - .macro painsplitdmgcalc param0:req + .macro painsplitdmgcalc ptr:req .byte 0xa5 - .4byte \param0 + .4byte \ptr .endm - .macro settypetorandomresistance param0:req + .macro settypetorandomresistance ptr:req .byte 0xa6 - .4byte \param0 + .4byte \ptr .endm .macro setalwayshitflag .byte 0xa7 .endm - .macro copymovepermanently param0:req + .macro copymovepermanently ptr:req .byte 0xa8 - .4byte \param0 + .4byte \ptr .endm - .macro trychoosesleeptalkmove param0:req + .macro trychoosesleeptalkmove ptr:req .byte 0xa9 - .4byte \param0 + .4byte \ptr .endm .macro setdestinybond @@ -895,39 +912,40 @@ .byte 0xab .endm - .macro remaininghptopower + .macro settailwind ptr:req .byte 0xac + .4byte \ptr .endm - .macro tryspiteppreduce param0:req + .macro tryspiteppreduce ptr:req .byte 0xad - .4byte \param0 + .4byte \ptr .endm .macro healpartystatus .byte 0xae .endm - .macro cursetarget param0:req + .macro cursetarget ptr:req .byte 0xaf - .4byte \param0 + .4byte \ptr .endm - .macro trysetspikes param0:req + .macro trysetspikes ptr:req .byte 0xb0 - .4byte \param0 + .4byte \ptr .endm .macro setforesight .byte 0xb1 .endm - .macro trysetperishsong param0:req + .macro trysetperishsong ptr:req .byte 0xb2 - .4byte \param0 + .4byte \ptr .endm - .macro rolloutdamagecalculation + .macro handlerollout .byte 0xb3 .endm @@ -937,12 +955,13 @@ .4byte \ptr .endm - .macro furycuttercalc + .macro handlefurycutter .byte 0xb5 .endm - .macro friendshiptodamagecalculation + .macro setembargo ptr:req .byte 0xb6 + .4byte \ptr .endm .macro presentdamagecalculation @@ -957,23 +976,23 @@ .byte 0xb9 .endm - .macro jumpifnopursuitswitchdmg param0:req + .macro jumpifnopursuitswitchdmg ptr:req .byte 0xba - .4byte \param0 + .4byte \ptr .endm .macro setsunny .byte 0xbb .endm - .macro maxattackhalvehp param0:req + .macro maxattackhalvehp ptr:req .byte 0xbc - .4byte \param0 + .4byte \ptr .endm - .macro copyfoestats param0:req + .macro copyfoestats ptr:req .byte 0xbd - .4byte \param0 + .4byte \ptr .endm .macro rapidspinfree @@ -984,28 +1003,29 @@ .byte 0xbf .endm - .macro recoverbasedonsunlight param0:req + .macro recoverbasedonsunlight ptr:req .byte 0xc0 - .4byte \param0 + .4byte \ptr .endm - .macro hiddenpowercalc + .macro setstickyweb ptr:req .byte 0xc1 + .4byte \ptr .endm .macro selectfirstvalidtarget .byte 0xc2 .endm - .macro trysetfutureattack param0:req + .macro trysetfutureattack ptr:req .byte 0xc3 - .4byte \param0 + .4byte \ptr .endm - .macro trydobeatup param0:req, param1:req + .macro trydobeatup endPtr:req, failPtr:req .byte 0xc4 - .4byte \param0 - .4byte \param1 + .4byte \endPtr + .4byte \failPtr .endm .macro setsemiinvulnerablebit @@ -1024,7 +1044,7 @@ .byte 0xc8 .endm - .macro jumpifattackandspecialattackcannotfall ptr:req + .macro trymemento ptr:req .byte 0xc9 .4byte \ptr .endm @@ -1041,107 +1061,110 @@ .byte 0xcc .endm - .macro cureifburnedparalysedorpoisoned param0:req + .macro cureifburnedparalysedorpoisoned ptr:req .byte 0xcd - .4byte \param0 + .4byte \ptr .endm - .macro settorment param0:req + .macro settorment ptr:req .byte 0xce - .4byte \param0 + .4byte \ptr .endm - .macro jumpifnodamage param0:req + .macro jumpifnodamage ptr:req .byte 0xcf - .4byte \param0 + .4byte \ptr .endm - .macro settaunt param0:req + .macro settaunt ptr:req .byte 0xd0 - .4byte \param0 + .4byte \ptr .endm - .macro trysethelpinghand param0:req + .macro trysethelpinghand ptr:req .byte 0xd1 - .4byte \param0 + .4byte \ptr .endm - .macro tryswapitems param0:req + .macro tryswapitems ptr:req .byte 0xd2 - .4byte \param0 + .4byte \ptr .endm - .macro trycopyability param0:req + .macro trycopyability ptr:req .byte 0xd3 - .4byte \param0 + .4byte \ptr .endm - .macro trywish param0:req, param1:req + .macro trywish turnNumber:req, ptr:req .byte 0xd4 - .byte \param0 - .4byte \param1 + .byte \turnNumber + .4byte \ptr .endm - .macro trysetroots param0:req + .macro settoxicspikes ptr:req .byte 0xd5 - .4byte \param0 + .4byte \ptr .endm - .macro doubledamagedealtifdamaged + .macro setgastroacid ptr:req .byte 0xd6 + .4byte \ptr .endm - .macro setyawn param0:req + .macro setyawn ptr:req .byte 0xd7 - .4byte \param0 + .4byte \ptr .endm - .macro setdamagetohealthdifference param0:req + .macro setdamagetohealthdifference ptr:req .byte 0xd8 - .4byte \param0 + .4byte \ptr .endm - .macro scaledamagebyhealthratio + .macro setroom .byte 0xd9 .endm - .macro tryswapabilities param0:req + .macro tryswapabilities ptr:req .byte 0xda - .4byte \param0 + .4byte \ptr .endm - .macro tryimprison param0:req + .macro tryimprison ptr:req .byte 0xdb - .4byte \param0 + .4byte \ptr .endm - .macro trysetgrudge param0:req + .macro setstealthrock ptr:req .byte 0xdc - .4byte \param0 + .4byte \ptr .endm - .macro weightdamagecalculation + .macro setuserstatus3 flags:req, ptr:req .byte 0xdd + .4byte \flags + .4byte \ptr .endm - .macro assistattackselect param0:req + .macro assistattackselect ptr:req .byte 0xde - .4byte \param0 + .4byte \ptr .endm - .macro trysetmagiccoat param0:req + .macro trysetmagiccoat ptr:req .byte 0xdf - .4byte \param0 + .4byte \ptr .endm - .macro trysetsnatch param0:req + .macro trysetsnatch ptr:req .byte 0xe0 - .4byte \param0 + .4byte \ptr .endm - .macro trygetintimidatetarget param0:req + .macro trygetintimidatetarget ptr:req .byte 0xe1 - .4byte \param0 + .4byte \ptr .endm .macro switchoutabilities battler:req @@ -1149,10 +1172,10 @@ .byte \battler .endm - .macro jumpifhasnohp battler:req, param1:req + .macro jumpifhasnohp battler:req, ptr:req .byte 0xe3 .byte \battler - .4byte \param1 + .4byte \ptr .endm .macro getsecretpowereffect @@ -1171,28 +1194,29 @@ .byte 0xe7 .endm - .macro settypebasedhalvers param0:req + .macro settypebasedhalvers ptr:req .byte 0xe8 - .4byte \param0 + .4byte \ptr .endm - .macro setweatherballtype + .macro jumpifsubstituteblocks ptr:req .byte 0xe9 + .4byte \ptr .endm - .macro tryrecycleitem param0:req + .macro tryrecycleitem ptr:req .byte 0xea - .4byte \param0 + .4byte \ptr .endm - .macro settypetoterrain param0:req + .macro settypetoterrain ptr:req .byte 0xeb - .4byte \param0 + .4byte \ptr .endm - .macro pursuitrelated param0:req + .macro pursuitdoubles ptr:req .byte 0xec - .4byte \param0 + .4byte \ptr .endm .macro snatchsetbattlers @@ -1211,18 +1235,18 @@ .byte 0xf0 .endm - .macro trysetcaughtmondexflags param0:req + .macro trysetcaughtmondexflags ptr:req .byte 0xf1 - .4byte \param0 + .4byte \ptr .endm .macro displaydexinfo .byte 0xf2 .endm - .macro trygivecaughtmonnick param0:req + .macro trygivecaughtmonnick ptr:req .byte 0xf3 - .4byte \param0 + .4byte \ptr .endm .macro subattackerhpbydmg @@ -1241,169 +1265,771 @@ .byte 0xf7 .endm - .macro trainerslideout param0:req + .macro trainerslideout position:req .byte 0xf8 - .byte \param0 + .byte \position .endm - + + .macro settelekinesis ptr:req + .byte 0xf9 + .4byte \ptr + .endm + + .macro swapstatstages stat:req + .byte 0xfa + .byte \stat + .endm + + .macro averagestats stat:req + .byte 0xfb + .byte \stat + .endm + + .macro jumpifoppositegenders ptr:req + .byte 0xfc + .4byte \ptr + .endm + + .macro trygetbaddreamstarget ptr:req + .byte 0xfd + .4byte \ptr + .endm + + .macro tryworryseed ptr:req + .byte 0xfe + .4byte \ptr + .endm + + .macro metalburstdamagecalculator ptr:req + .byte 0xff + .4byte \ptr + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES .endm - + .macro setmagiccoattarget battler:req various \battler, VARIOUS_SET_MAGIC_COAT_TARGET .endm - + .macro getifcantrunfrombattle battler:req various \battler, VARIOUS_IS_RUNNING_IMPOSSIBLE .endm - + .macro getmovetarget battler:req various \battler, VARIOUS_GET_MOVE_TARGET .endm - + .macro getbattlerfainted battler:req various \battler, VARIOUS_GET_BATTLER_FAINTED .endm - + .macro resetintimidatetracebits battler:req various \battler, VARIOUS_RESET_INTIMIDATE_TRACE_BITS .endm - + .macro updatechoicemoveonlvlup battler:req various \battler, VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP .endm - - .macro various7 battler:req - various \battler, 7 + + .macro resetplayerfainted + various BS_ATTACKER, VARIOUS_RESET_PLAYER_FAINTED .endm - + .macro palaceflavortext battler:req various \battler, VARIOUS_PALACE_FLAVOR_TEXT .endm - + .macro arenajudgmentwindow various BS_ATTACKER, VARIOUS_ARENA_JUDGMENT_WINDOW .endm - + .macro arenaopponentmonlost various BS_ATTACKER, VARIOUS_ARENA_OPPONENT_MON_LOST .endm - + .macro arenaplayermonlost various BS_ATTACKER, VARIOUS_ARENA_PLAYER_MON_LOST .endm - + .macro arenabothmonlost various BS_ATTACKER, VARIOUS_ARENA_BOTH_MONS_LOST .endm - + .macro forfeityesnobox battler:req various \battler, VARIOUS_EMIT_YESNOBOX .endm - - .macro various14 battler:req - various \battler, 14 + + .macro arenadrawreftextbox + various BS_ATTACKER, VARIOUS_DRAW_ARENA_REF_TEXT_BOX .endm - - .macro various15 battler:req - various \battler, 15 + + .macro arenaerasereftextbox + various BS_ATTACKER, VARIOUS_ERASE_ARENA_REF_TEXT_BOX .endm - + .macro arenajudgmentstring id:req various \id, VARIOUS_ARENA_JUDGMENT_STRING .endm - + .macro arenawaitmessage id:req various \id, VARIOUS_ARENA_WAIT_STRING .endm - + .macro waitcry battler:req various \battler, VARIOUS_WAIT_CRY .endm - + .macro returnopponentmon1toball battler:req various \battler, VARIOUS_RETURN_OPPONENT_MON1 .endm - + .macro returnopponentmon2toball battler:req various \battler, VARIOUS_RETURN_OPPONENT_MON2 .endm - + .macro volumedown various BS_ATTACKER, VARIOUS_VOLUME_DOWN .endm - + .macro volumeup various BS_ATTACKER, VARIOUS_VOLUME_UP .endm - + .macro setalreadystatusedmoveattempt battler:req - various \battler, 23 + various \battler, VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT .endm - - .macro various24 battler:req - various \battler, 24 + + .macro palacetryescapestatus battler:req + various \battler, VARIOUS_PALACE_TRY_ESCAPE_STATUS .endm - + .macro setoutcomeonteleport battler:req various \battler, VARIOUS_SET_TELEPORT_OUTCOME .endm - + .macro playtrainerdefeatbgm battler:req various \battler, VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC .endm + + .macro stattextbuffer battler:req + various \battler, VARIOUS_STAT_TEXT_BUFFER + .endm + + .macro switchinabilities battler:req + 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 + + .macro clearstatus battler:req + various \battler, VARIOUS_CLEAR_STATUS + .endm + + .macro restorepp battler:req + various \battler, VARIOUS_RESTORE_PP + .endm + + .macro tryactivatemoxie battler:req + various \battler, VARIOUS_TRY_ACTIVATE_MOXIE + .endm + + .macro tryactivatebeastboost battler:req + various \battler, VARIOUS_TRY_ACTIVATE_BEAST_BOOST + .endm + + .macro tryactivatereceiver battler:req + various \battler, VARIOUS_TRY_ACTIVATE_RECEIVER + .endm + + .macro tryactivatesoulheart + various BS_ATTACKER, VARIOUS_TRY_ACTIVATE_SOULHEART + .endm + + .macro tryactivatefellstinger battler:req + various \battler, VARIOUS_TRY_ACTIVATE_FELL_STINGER + .endm + + .macro playmoveanimation battler:req, move:req + various \battler, VARIOUS_PLAY_MOVE_ANIMATION + .2byte \move + .endm + + .macro setluckychant battler:req, ptr:req + various \battler VARIOUS_SET_LUCKY_CHANT + .4byte \ptr + .endm + + .macro suckerpunchcheck ptr:req + various BS_ATTACKER, VARIOUS_SUCKER_PUNCH_CHECK + .4byte \ptr + .endm + + .macro setabilitysimple battler:req, ptr:req + various \battler VARIOUS_SET_SIMPLE_BEAM + .4byte \ptr + .endm + + .macro tryentrainment ptr:req + various BS_ATTACKER, VARIOUS_TRY_ENTRAINMENT + .4byte \ptr + .endm + + .macro setlastusedability battler:req + various \battler, VARIOUS_SET_LAST_USED_ABILITY + .endm + + .macro tryhealpulse battler:req, ptr:req + various \battler, VARIOUS_TRY_HEAL_PULSE + .4byte \ptr + .endm + + .macro tryquash ptr:req + various BS_ATTACKER, VARIOUS_TRY_QUASH + .4byte \ptr + .endm + + .macro tryafteryou ptr:req + various BS_ATTACKER, VARIOUS_AFTER_YOU + .4byte \ptr + .endm + + .macro trybestow ptr:req + various BS_ATTACKER, VARIOUS_BESTOW + .4byte \ptr + .endm + + .macro invertstatstages battler:req + various \battler, VARIOUS_INVERT_STAT_STAGES + .endm + + .macro setterrain ptr:req + various BS_ATTACKER, VARIOUS_SET_TERRAIN + .4byte \ptr + .endm + + .macro trymefirst ptr:req + various BS_ATTACKER, VARIOUS_TRY_ME_FIRST + .4byte \ptr + .endm + + .macro jumpifbattleend ptr:req + various BS_ATTACKER, VARIOUS_JUMP_IF_BATTLE_END + .4byte \ptr + .endm + + .macro tryelectrify ptr:req + various BS_ATTACKER, VARIOUS_TRY_ELECTRIFY + .4byte \ptr + .endm + + .macro tryreflecttype ptr:req + various BS_ATTACKER, VARIOUS_TRY_REFLECT_TYPE + .4byte \ptr + .endm + + .macro trysoak ptr:req + various BS_ATTACKER, VARIOUS_TRY_SOAK + .4byte \ptr + .endm + + .macro handlemegaevo battler:req, case:req + various \battler, VARIOUS_HANDLE_MEGA_EVO + .byte \case + .endm + + .macro handleprimalreversion battler:req, case:req + various \battler, VARIOUS_HANDLE_PRIMAL_REVERSION + .byte \case + .endm + + .macro handleformchange battler:req, case:req + various \battler, VARIOUS_HANDLE_FORM_CHANGE + .byte \case + .endm + + .macro jumpifcantuselastresort battler:req, ptr:req + various \battler, VARIOUS_TRY_LAST_RESORT + .4byte \ptr + .endm + + .macro argumentstatuseffect + various BS_ATTACKER, VARIOUS_ARGUMENT_STATUS_EFFECT + .endm + + .macro tryhitswitchtarget ptr:req + various BS_ATTACKER, VARIOUS_TRY_HIT_SWITCH_TARGET + .4byte \ptr + .endm + + .macro tryautotomize battler:req, ptr:req + various \battler, VARIOUS_TRY_AUTOTOMIZE + .4byte \ptr + .endm + + .macro jumpifcantusesynchronoise ptr:req + various BS_ATTACKER, VARIOUS_TRY_SYNCHRONOISE + .4byte \ptr + .endm + + .macro trycopycat ptr:req + various BS_ATTACKER, VARIOUS_TRY_COPYCAT + .4byte \ptr + .endm + + .macro showabilitypopup battler:req + various \battler, VARIOUS_ABILITY_POPUP + .endm + + .macro updateabilitypopup battler:req + various \battler, VARIOUS_UPDATE_ABILITY_POPUP + .endm + + .macro defogclear battler:req, clear:req, ptr:req + various \battler, VARIOUS_DEFOG + .byte \clear + .4byte \ptr + .endm + + .macro jumpiftargetally ptr:req + various BS_ATTACKER, VARIOUS_JUMP_IF_TARGET_ALLY + .4byte \ptr + .endm + + .macro trypsychoshift ptr:req + various BS_ATTACKER, VARIOUS_PSYCHO_SHIFT + .4byte \ptr + .endm + + .macro curestatus battler:req + various \battler, VARIOUS_CURE_STATUS + .endm + + .macro powertrick battler:req + various \battler, VARIOUS_POWER_TRICK + .endm + + .macro argumenttomoveeffect + various BS_ATTACKER, VARIOUS_ARGUMENT_TO_MOVE_EFFECT + .endm + + .macro jumpifnotgrounded battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_NOT_GROUNDED + .4byte \ptr + .endm + + .macro handletrainerslidemsg battler:req, field:req + various \battler, VARIOUS_HANDLE_TRAINER_SLIDE_MSG + .byte \field + .endm + + .macro trytrainerslidefirstdownmsg battler:req + various \battler, VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF + .endm + + .macro trytrainerslidelastonmsg battler:req + various \battler, VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON + .endm + + .macro setauroraveil battler:req + various \battler, VARIOUS_SET_AURORA_VEIL + .endm + + .macro trysetthirdtype battler:req, ptr:req + various \battler, VARIOUS_TRY_THIRD_TYPE + .4byte \ptr + .endm + + .macro tryaccupressure battler:req, ptr:req + various \battler, VARIOUS_ACUPRESSURE + .4byte \ptr + .endm + + .macro setpowder battler:req + various \battler, VARIOUS_SET_POWDER + .endm + + .macro spectralthiefprintstats + various BS_ATTACKER, VARIOUS_SPECTRAL_THIEF + .endm + + .macro bringdownairbornebattler battler:req + various \battler, VARIOUS_GRAVITY_ON_AIRBORNE_MONS + .endm + + .macro checkgrassyterrainheal battler:req, ptr:req + various \battler, VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS + .4byte \ptr + .endm + + .macro jumpifnotberry battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_NOT_BERRY + .4byte \ptr + .endm + + .macro jumpifroarfails ptr:req + various BS_ATTACKER, VARIOUS_JUMP_IF_ROAR_FAILS + .4byte \ptr + .endm + + .macro tryinstruct ptr:req + various BS_ATTACKER, VARIOUS_TRY_INSTRUCT + .4byte \ptr + .endm + + .macro settracedability battler:req + various \battler, VARIOUS_TRACE_ABILITY + .endm + + .macro updatenick battler:req + various \battler, VARIOUS_UPDATE_NICK + .endm + + .macro tryillusionoff battler:req + various \battler, VARIOUS_TRY_ILLUSION_OFF + .endm + + .macro spriteignore0hp val:req + various BS_ATTACKER, VARIOUS_SET_SPRITEIGNORE0HP + .byte \val + .endm + + .macro getstatvalue battler:req, statId:req + various \battler, VARIOUS_GET_STAT_VALUE + .byte \statId + .endm + + .macro jumpiffullhp battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_FULL_HP + .4byte \ptr + .endm + + .macro losetype battler:req, type:req + various \battler, VARIOUS_LOSE_TYPE + .byte \type + .endm + + .macro tryfriskmsg battler:req + various \battler, VARIOUS_TRY_FRISK + .endm + + .macro jumpifshieldsdown battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED + .4byte \ptr + .endm + + .macro trypoisontype attacker:req, target:req, ptr:req + various \attacker, VARIOUS_POISON_TYPE_IMMUNITY + .byte \target + .4byte \ptr + .endm + + .macro tryparalyzetype attacker:req, target:req, ptr:req + various \attacker, VARIOUS_PARALYZE_TYPE_IMMUNITY + .byte \target + .4byte \ptr + .endm + + .macro trysetfairylock ptr:req + various BS_ATTACKER, VARIOUS_TRY_FAIRY_LOCK + .4byte \ptr + .endm + + .macro jumpifnoally battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_NO_ALLY + .4byte \ptr + .endm + + .macro jumpifnoholdeffect battler:req, holdEffet:req, ptr:req + various \battler, VARIOUS_JUMP_IF_NO_HOLD_EFFECT + .byte \holdEffet + .4byte \ptr + .endm + + .macro infatuatewithbattler battler1:req, battler2:req + various \battler1, VARIOUS_INFATUATE_WITH_BATTLER + .byte \battler2 + .endm + + .macro setlastuseditem battler:req + various \battler, VARIOUS_SET_LAST_USED_ITEM + .endm + + .macro jumpifabsent battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_ABSENT + .4byte \ptr + .endm + + .macro destroyabilitypopup + various BS_ABILITY_BATTLER, VARIOUS_DESTROY_ABILITY_POPUP + .endm + + .macro gettotemboost ptr:req + various BS_ATTACKER, VARIOUS_TOTEM_BOOST + .4byte \ptr + .endm + + .macro tryactivategrimneigh, battler:req + various \battler, VARIOUS_TRY_ACTIVATE_GRIM_NEIGH + .endm + + .macro setzeffect + various BS_ATTACKER, VARIOUS_SET_Z_EFFECT + .endm + .macro consumeberry battler:req, restoreItem=FALSE + various \battler, VARIOUS_CONSUME_BERRY + .byte \restoreItem + .endm + + .macro activateitemeffects battler:req + various \battler, VARIOUS_MOVEEND_ITEM_EFFECTS + .endm + + .macro pickpocketsteal + various 0, VARIOUS_PICKPOCKET + .endm + + .macro doterrainseed battler:req, ptr:req + various \battler, VARIOUS_TERRAIN_SEED + .4byte \ptr + .endm + + .macro makeinvisible battler:req + various \battler, VARIOUS_MAKE_INVISIBLE + .endm + + .macro tryroomservice battler:req, ptr:req + various \battler, VARIOUS_ROOM_SERVICE + .4byte \ptr + .endm + + .macro jumpifterrainaffected battler:req, terrainFlags:req, ptr:req + various \battler, VARIOUS_JUMP_IF_TERRAIN_AFFECTED + .4byte \terrainFlags + .4byte \ptr + .endm + + .macro jumpifpranksterblocked battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_PRANKSTER_BLOCKED + .4byte \ptr + .endm + + .macro eeriespellppreduce ptr:req + various BS_TARGET, VARIOUS_EERIE_SPELL_PP_REDUCE + .4byte \ptr + .endm + + .macro jumpifteamhealthy battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_TEAM_HEALTHY + .4byte \ptr + .endm + + .macro tryhealquarterhealth battler:req, ptr:req + various \battler, VARIOUS_TRY_HEAL_QUARTER_HP + .4byte \ptr + .endm + + .macro removeterrain + various BS_ATTACKER, VARIOUS_REMOVE_TERRAIN + .endm + + .macro trytoclearprimalweather + various BS_ATTACKER, VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER + .endm + + .macro setattackertostickywebuser + various BS_TARGET, VARIOUS_SET_ATTACKER_STICKY_WEB_USER + .endm + + .macro getrototillertargets ptr:req + various BS_ATTACKER, VARIOUS_GET_ROTOTILLER_TARGETS + .4byte \ptr + .endm + + .macro jumpifnotrototilleraffected battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED + .4byte \ptr + .endm + + .macro tryactivatebattlebond battler:req + various \battler, VARIOUS_TRY_ACTIVATE_BATTLE_BOND + .endm + + .macro jumpifcantreverttoprimal ptr:req + various BS_ATTACKER, VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL + .4byte \ptr + .endm + + .macro applyplasmafists + various BS_ATTACKER, VARIOUS_APPLY_PLASMA_FISTS + .endm + + .macro jumpifweatheraffected battler:req, weather:req, ptr:req + various \battler, VARIOUS_JUMP_IF_WEATHER_AFFECTED + .4byte \weather + .4byte \ptr + .endm + + .macro jumpifspecies battler:req, species:req, ptr:req + various \battler, VARIOUS_JUMP_IF_SPECIES + .2byte \species + .4byte \ptr + .endm + + .macro tryendneutralizinggas battler:req + various \battler, VARIOUS_TRY_END_NEUTRALIZING_GAS + .endm + + .macro trytoapplymimicry battler:req, ptr:req + various \battler, VARIOUS_TRY_TO_APPLY_MIMICRY + .4byte \ptr + .endm + + .macro trynoretreat battler:req, ptr:req + various \battler, VARIOUS_TRY_NO_RETREAT + .4byte \ptr + .endm + + .macro trytarshot battler:req, ptr:req + various \battler, VARIOUS_TRY_TAR_SHOT + .4byte \ptr + .endm + + .macro cantarshotwork battler:req, ptr:req + various \battler, VARIOUS_CAN_TAR_SHOT_WORK + .4byte \ptr + .endm + + .macro checkpoltergeist battler:req, ptr:req + various \battler, VARIOUS_CHECK_POLTERGEIST + .4byte \ptr + .endm + + .macro setoctolock battler:req, ptr:req + various \battler, VARIOUS_SET_OCTOLOCK + .4byte \ptr + .endm + + .macro cutonethirdhpraisestats ptr:req + various BS_ATTACKER, VARIOUS_CUT_1_3_HP_RAISE_STATS + .4byte \ptr + .endm + + .macro photongeysercheck battler:req + various \battler, VARIOUS_PHOTON_GEYSER_CHECK + .endm + + .macro shellsidearmcheck + various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK + .endm + + .macro jumpifcantfling battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_CANT_FLING + .4byte \ptr + .endm + + .macro curecertainstatuses battler:req + various \battler, VARIOUS_CURE_CERTAIN_STATUSES + .endm + + .macro tryresetnegativestatstages battler:req + various \battler, VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES + .endm + + .macro jumpiflastuseditemberry ptr:req + various BS_ATTACKER, VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY + .4byte \ptr + .endm + + .macro jumpiflastuseditemholdeffect battler:req, holdEffect:req, ptr:req + various \battler, VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT + .byte \holdEffect + .4byte \ptr + .endm + + .macro savebattleritem battler:req + various \battler, VARIOUS_SAVE_BATTLER_ITEM + .endm + + .macro restorebattleritem battler:req + various \battler, VARIOUS_RESTORE_BATTLER_ITEM + .endm + + .macro battleritemtolastuseditem battler:req + various \battler, VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM + .endm + + .macro setbeakblast battler:req + various \battler, VARIOUS_SET_BEAK_BLAST + .endm + + .macro swapsidestatuses + various BS_ATTACKER, VARIOUS_SWAP_SIDE_STATUSES + .endm + @ helpful macros .macro setstatchanger stat:req, stages:req, down:req - setbyte sSTATCHANGER \stat | \stages << 4 | \down << 7 + setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7 .endm - + .macro setmoveeffect effect:req - setbyte cEFFECT_CHOOSER \effect + sethword sMOVE_EFFECT, \effect + sethword sSAVED_MOVE_EFFECT, \effect .endm - + .macro chosenstatus1animation battler:req, status:req chosenstatusanimation \battler, 0x0, \status .endm - + .macro chosenstatus2animation battler:req, status:req chosenstatusanimation \battler, 0x1, \status .endm - + .macro sethword dst:req, value:req setbyte \dst, (\value) & 0xFF setbyte \dst + 1, ((\value) >> 8) & 0xFF .endm - + .macro setword dst:req, value:req setbyte \dst, (\value) & 0xFF setbyte \dst + 1, ((\value) >> 8) & 0xFF setbyte \dst + 2, ((\value) >> 16) & 0xFF setbyte \dst + 3, ((\value) >> 24) & 0xFF .endm - + .macro copybyte dst:req, src:req copyarray \dst, \src, 0x1 .endm - + .macro copyhword dst:req, src:req copyarray \dst, \src, 0x2 .endm - + .macro copyword dst:req, src:req copyarray \dst, \src, 0x4 .endm - + .macro jumpifbytenotequal byte1:req, byte2:req, jumpptr:req jumpifarraynotequal \byte1, \byte2, 0x1, \jumpptr .endm - + .macro jumpifbyteequal byte1:req, byte2:req, jumpptr:req jumpifarrayequal \byte1, \byte2, 0x1, \jumpptr .endm - + .macro jumpifmove move:req, jumpptr:req jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpptr .endm @@ -1411,23 +2037,98 @@ .macro jumpifnotmove move:req, jumpptr:req jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpptr .endm - + + .macro jumpifnotchosenmove move:req, jumpptr:req + jumpifhalfword CMP_NOT_EQUAL, gChosenMove, \move, \jumpptr + .endm + .macro jumpifstatus3 battler:req, status:req, jumpptr:req - jumpifstatus3condition \battler, \status, 0x0, \jumpptr + jumpifstatus3condition \battler, \status, FALSE, \jumpptr .endm - + .macro jumpifnostatus3 battler:req, status:req, jumpptr:req - jumpifstatus3condition \battler, \status, 0x1, \jumpptr + jumpifstatus3condition \battler, \status, TRUE, \jumpptr .endm - + .macro jumpifmovehadnoeffect jumpptr:req jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpptr .endm - + .macro jumpifbattletype flags:req, jumpptr:req jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr .endm - + .macro jumpifnotbattletype flags:req, jumpptr:req jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr .endm + + .macro dmg_1_8_targethp + manipulatedamage DMG_1_8_TARGET_HP + .endm + + .macro dmgtomaxattackerhp + manipulatedamage DMG_FULL_ATTACKER_HP + .endm + + .macro dmgtocurrattackerhp + manipulatedamage DMG_CURR_ATTACKER_HP + .endm + + .macro dmg_1_2_attackerhp + manipulatedamage DMG_1_2_ATTACKER_HP + .endm + + .macro jumpifflowerveil jumpptr:req + jumpifnottype BS_TARGET, TYPE_GRASS, 1f + jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpptr + 1: + .endm + + .macro jumpifflowerveilattacker jumpptr:req + jumpifnottype BS_ATTACKER, TYPE_GRASS, 1f + jumpifability BS_ATTACKER_SIDE, ABILITY_FLOWER_VEIL, \jumpptr + 1: + .endm + + .macro setallytonexttarget jumpptr:req + jumpifbyte CMP_GREATER_THAN, gBattlerTarget, 0x1, 1f + addbyte gBattlerTarget, 0x2 + goto \jumpptr + 1: + subbyte gBattlerTarget, 0x2 + goto \jumpptr + .endm + + .macro jumpifleafguardprotected battler:req, jumpptr:req + various \battler, VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED + .4byte \jumpptr + .endm + + .macro jumpifsafeguard jumpptr:req + jumpifability BS_ATTACKER, ABILITY_INFILTRATOR, 1f + jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpptr + 1: + .endm + + @ Will jump to script pointer if the target weighs less than 200 kg, or 441 lbs. + .macro jumpifunder200 battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_UNDER_200 + .4byte \ptr + .endm + + @ Sets the sky drop status and does all other necessary operations + .macro setskydrop + various 0, VARIOUS_SET_SKY_DROP + .endm + + @ Clears the sky drop status and does all other necessary operations. + @ If the target fainted in before this script is called, it goes to the given script. + .macro clearskydrop ptr:req + various 0, VARIOUS_CLEAR_SKY_DROP + .4byte \ptr + .endm + + @ Accounts for if the target of Sky Drop was in confuse_lock when the attacker falls asleep due to Yawn. + .macro skydropyawn + various 0, VARIOUS_SKY_DROP_YAWN + .endm diff --git a/asm/macros/battle_tent.inc b/asm/macros/battle_tent.inc index 663d1d344d..142457ed98 100644 --- a/asm/macros/battle_tent.inc +++ b/asm/macros/battle_tent.inc @@ -26,7 +26,7 @@ special CallVerdanturfTentFunction .endm - @ Buffers the opponents intro speech to STR_VAR_4. Despite being a Verdanturf Tent function, it serves the same purpose for all 3 tents. + @ Buffers the opponents intro speech to STR_VAR_4. Despite being a Verdanturf Tent function, it serves the same purpose for all 3 tents. .macro battletent_getopponentintro setvar VAR_0x8004, VERDANTURF_TENT_FUNC_GET_OPPONENT_INTRO special CallVerdanturfTentFunction @@ -36,7 +36,7 @@ .macro verdanturftent_save challengeStatus:req setvar VAR_0x8004, VERDANTURF_TENT_FUNC_SAVE setvar VAR_0x8005, \challengeStatus - special CallVerdanturfTentFunction + special CallVerdanturfTentFunction .endm @ Set the prize item as randomly selected from a list. Randomness unnecessary, as the list is only 1 item @@ -49,7 +49,7 @@ .macro verdanturftent_giveprize setvar VAR_0x8004, VERDANTURF_TENT_FUNC_GIVE_PRIZE special CallVerdanturfTentFunction - .endm + .endm @ Fallarbor Tent @@ -79,7 +79,7 @@ setvar VAR_0x8004, FALLARBOR_TENT_FUNC_SAVE setvar VAR_0x8005, \challengeStatus special CallFallarborTentFunction - .endm + .endm @ Set the prize item as randomly selected from a list. Randomness unnecessary, as the list is only 1 item .macro fallarbortent_setrandomprize @@ -97,7 +97,7 @@ .macro fallarbortent_getopponentname setvar VAR_0x8004, FALLARBOR_TENT_FUNC_GET_OPPONENT_NAME special CallFallarborTentFunction - .endm + .endm @ Slateport Tent @@ -127,15 +127,15 @@ setvar VAR_0x8004, SLATEPORT_TENT_FUNC_SAVE setvar VAR_0x8005, \challengeStatus special CallSlateportTentFunction - .endm + .endm - @ Set the prize item as randomly selected from a list. Randomness unnecessary, as the list is only 1 item + @ Set the prize item as randomly selected from a list. Randomness unnecessary, as the list is only 1 item .macro slateporttent_setrandomprize setvar VAR_0x8004, SLATEPORT_TENT_FUNC_SET_RANDOM_PRIZE special CallSlateportTentFunction .endm - @ Give the current prize item. FALSE if no room for prize + @ Give the current prize item. FALSE if no room for prize .macro slateporttent_giveprize setvar VAR_0x8004, SLATEPORT_TENT_FUNC_GIVE_PRIZE special CallSlateportTentFunction @@ -157,7 +157,7 @@ .macro slateporttent_generateopponentmons setvar VAR_0x8004, SLATEPORT_TENT_FUNC_GENERATE_OPPONENT_MONS special CallSlateportTentFunction - .endm + .endm @ Slateport Tent's version of factory_generaterentalmons .macro slateporttent_generaterentalmons diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 73aef33b58..26391bd4a6 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -44,7 +44,7 @@ .4byte \destination .endm - @ Jumps to the standard function at index function. + @ Jumps to the script in gStdScripts at index function. .macro gotostd function:req .byte 0x08 .byte \function @@ -56,82 +56,82 @@ STD_OBTAIN_DECORATION = 7 STD_REGISTER_MATCH_CALL = 8 - @ Calls the standard function at index function. + @ Calls the script in gStdScripts at index function. .macro callstd function:req .byte 0x09 .byte \function .endm - @ If the result of the last comparison matches condition (see Comparison operators), jumps to the standard function at index function. + @ If the result of the last comparison matches condition (see Comparison operators), jumps to the script in gStdScripts at index function. .macro gotostd_if condition:req, function:req .byte 0x0a .byte \condition .byte \function .endm - @ If the result of the last comparison matches condition (see Comparison operators), calls the standard function at index function. + @ If the result of the last comparison matches condition (see Comparison operators), calls the script in gStdScripts at index function. .macro callstd_if condition:req, function:req .byte 0x0b .byte \condition .byte \function .endm - @ Executes a script stored in a default RAM location. + @ Equivalent to the 'return' command for a RAM script. .macro returnram .byte 0x0c .endm - @ Terminates script execution and "resets the script RAM". - .macro killscript + @ Equivalent to the 'end' command for a RAM script. + .macro endram .byte 0x0d .endm - @ Sets some status related to Mystery Event. + @ Sets the Mystery Event script status (MEVENT_STATUS_*). .macro setmysteryeventstatus value:req .byte 0x0e .byte \value .endm - @ Sets the specified script bank to value. - .macro loadword destination:req, value:req + @ Sets the value at the specified script data index to a fixed 4-byte value. + .macro loadword destIndex:req, value:req .byte 0x0f - .byte \destination + .byte \destIndex .4byte \value .endm - @ Sets the specified script bank to value. - .macro loadbyte destination:req, value:req + @ Sets the value at the specified script data index to a fixed byte value. + .macro loadbyte destIndex:req, value:req .byte 0x10 - .byte \destination + .byte \destIndex .byte \value .endm - @ Sets the byte at offset to value. - .macro writebytetoaddr value:req, offset:req + @ Sets the value at the specified pointer. + .macro setptr value:req, ptr:req .byte 0x11 .byte \value - .4byte \offset + .4byte \ptr .endm - @ Copies the byte value at source into the specified script bank. - .macro loadbytefromaddr destination:req, source:req + @ Sets the value at the specified script data index to the value at pointer 'source'. + .macro loadbytefromptr destIndex:req, source:req .byte 0x12 - .byte \destination + .byte \destIndex .4byte \source .endm - @ Not sure. Judging from XSE's description I think it takes the least-significant byte in bank source and writes it to destination. - .macro setptrbyte source:req, destination:req + @ Sets the value at pointer 'destination' to the contents of the script data at 'srcIndex'. + .macro setptrbyte srcIndex:req, destination:req .byte 0x13 - .byte \source + .byte \srcIndex .4byte \destination .endm - @ Copies the contents of bank source into bank destination. - .macro copylocal destination:req, source:req + @ Copies the contents of the script data from one index to another. + .macro copylocal destIndex:req, srcIndex:req .byte 0x14 - .byte \destination - .byte \source + .byte \destIndex + .byte \srcIndex .endm @ Copies the byte at source to destination, replacing whatever byte was previously there. @@ -176,56 +176,64 @@ .2byte \source .endm - @ Compares the values of script banks a and b, after forcing the values to bytes. - .macro compare_local_to_local byte1:req, byte2:req + @ Compares the values of the script data at indexes 'local1' and 'local2'. + @ The result is stored in comparisonResult to be acted on by goto_if / call_if + .macro compare_local_to_local local1:req, local2:req .byte 0x1b - .byte \byte1 - .byte \byte2 + .byte \local1 + .byte \local2 .endm - @ Compares the least-significant byte of the value of script bank a to a fixed byte value (b). - .macro compare_local_to_value a:req, b:req + @ Compares the value of the script data at index 'local' to a fixed value. + @ The result is stored in comparisonResult to be acted on by goto_if / call_if + .macro compare_local_to_value local:req, value:req .byte 0x1c - .byte \a - .byte \b + .byte \local + .byte \value .endm - @ Compares the least-significant byte of the value of script bank a to the byte located at offset b. - .macro compare_local_to_addr a:req, b:req + @ Compares the value of the script data at index 'local' to the value at 'ptr' + @ The result is stored in comparisonResult to be acted on by goto_if / call_if + .macro compare_local_to_ptr local:req, ptr:req .byte 0x1d - .byte \a - .4byte \b + .byte \local + .4byte \ptr .endm - @ Compares the byte located at offset a to the least-significant byte of the value of script bank b. - .macro compare_addr_to_local a:req, b:req + @ Compares the value at 'ptr' to the value of the script data at index 'local'. + @ The result is stored in comparisonResult to be acted on by goto_if / call_if + .macro compare_ptr_to_local ptr:req, local:req .byte 0x1e - .4byte \a - .byte \b + .4byte \ptr + .byte \local .endm - @ Compares the byte located at offset a to a fixed byte value (b). - .macro compare_addr_to_value a:req, b:req + @ Compares the value at 'ptr' to a fixed value. + @ The result is stored in comparisonResult to be acted on by goto_if / call_if + .macro compare_ptr_to_value ptr:req, value:req .byte 0x1f - .4byte \a - .byte \b + .4byte \ptr + .byte \value .endm - @ Compares the byte located at offset a to the byte located at offset b. - .macro compare_addr_to_addr a:req, b:req + @ Compares the value at 'ptr1' to the value at 'ptr2'. + @ The result is stored in comparisonResult to be acted on by goto_if / call_if + .macro compare_ptr_to_ptr ptr1:req, ptr2:req .byte 0x20 - .4byte \a - .4byte \b + .4byte \ptr1 + .4byte \ptr2 .endm - @ Compares the value of `var` to a fixed word value (b). + @ Compares the value of 'var' to a fixed value. + @ The result is stored in comparisonResult to be acted on by goto_if / call_if .macro compare_var_to_value var:req, value:req .byte 0x21 .2byte \var .2byte \value .endm - @ Compares the value of `var1` to the value of `var2`. + @ Compares the value of 'var1' to the value of 'var2'. + @ The result is stored in comparisonResult to be acted on by goto_if / call_if .macro compare_var_to_var var1:req, var2:req .byte 0x22 .2byte \var1 @@ -233,7 +241,7 @@ .endm @ Generic compare macro which attempts to deduce argument types based on their values - @ Any values between 0x4000 to 0x40FF and 0x8000 to 0x8015 are considered event variable identifiers + @ Any values between VARS_START to VARS_END and SPECIAL_VARS_START to SPECIAL_VARS_END are considered event variable identifiers .macro compare var:req, arg:req .if ((\arg >= VARS_START && \arg <= VARS_END) || (\arg >= SPECIAL_VARS_START && \arg <= SPECIAL_VARS_END)) compare_var_to_var \var, \arg @@ -242,41 +250,34 @@ .endif .endm - @ Calls the native C function stored at `func`. + @ Calls the native C function stored at func. .macro callnative func:req .byte 0x23 .4byte \func .endm - @ Replaces the script with the function stored at `func`. Execution returns to the bytecode script when func returns TRUE. + @ Replaces the script with the function stored at func. Execution returns to the bytecode script when func returns TRUE. .macro gotonative func:req .byte 0x24 .4byte \func .endm - @ Calls a special function; that is, a function designed for use by scripts and listed in a table of pointers. + @ Calls a function listed in the table in data/specials.inc. .macro special function:req .byte 0x25 .2byte SPECIAL_\function .endm - @ Calls a special function. That function's output (if any) will be written to the variable you specify. + @ Calls a function listed in the table in data/specials.inc. + @ That function's output (if any) will be written to the variable specified by 'output'. .macro specialvar output:req, function:req .byte 0x26 .2byte \output .2byte SPECIAL_\function .endm - @ temporary solution - .macro specialvar_ output:req, functionId:req - .byte 0x26 - .2byte \output - .2byte \functionId - .endm - - @ Blocks script execution until a command or ASM code manually unblocks it. Generally used with specific - @ commands and specials. If this command runs, and a subsequent command or piece of ASM does not unblock - @ state, the script will remain blocked indefinitely (essentially a hang). + @ Blocks script execution until a command or C code manually unblocks it. Generally used with specific + @ commands and specials. Calling ScriptContext_Enable for instance will allow execution to continue. .macro waitstate .byte 0x27 .endm @@ -287,46 +288,46 @@ .2byte \frames .endm - @ Sets a to 1. - .macro setflag a:req + @ Sets flag to TRUE. + .macro setflag flag:req .byte 0x29 - .2byte \a + .2byte \flag .endm - @ Sets a to 0. - .macro clearflag a:req + @ Sets flag to FALSE. + .macro clearflag flag:req .byte 0x2a - .2byte \a + .2byte \flag .endm - @ Compares a to 1. - .macro checkflag a:req + @ Compares flag to TRUE and stores the result in comparisonResult to be used by goto_if, etc + @ See additional _if_unset and _if_set macros + .macro checkflag flag:req .byte 0x2b - .2byte \a + .2byte \flag .endm - @ Initializes the RTC`s local time offset to the given hour and minute. In FireRed, this command is a nop. + @ Initializes the RTC`s local time offset to the given hour and minute. .macro initclock hour:req, minute:req .byte 0x2c .2byte \hour .2byte \minute .endm - @ Runs time based events. In FireRed, this command is a nop. + @ Updates local time using the RTC and runs time based events. .macro dotimebasedevents .byte 0x2d .endm - @ Sets the values of variables 0x8000, 0x8001, and 0x8002 to the current hour, minute, and second. In FRLG, - @ this command sets those variables to zero. + @ Sets the values of variables VAR_0x8000, VAR_0x8001, and VAR_0x8002 to the current hour, minute, and second. .macro gettime .byte 0x2e .endm - @ Plays the specified (sound_number) sound. Only one sound may play at a time, with newer ones interrupting older ones. - .macro playse sound_number:req + @ Plays the specified sound. Only one sound may play at a time, with newer ones interrupting older ones. + .macro playse song:req .byte 0x2f - .2byte \sound_number + .2byte \song .endm @ Blocks script execution until the currently-playing sound (triggered by playse) finishes playing. @@ -334,10 +335,10 @@ .byte 0x30 .endm - @ Plays the specified (fanfare_number) fanfare. - .macro playfanfare fanfare_number:req + @ Plays the fanfare specified by the song number. If the specified song is not a fanfare it will instead play the first song in sFanfares. + .macro playfanfare song:req .byte 0x31 - .2byte \fanfare_number + .2byte \song .endm @ Blocks script execution until all currently-playing fanfares finish. @@ -345,18 +346,19 @@ .byte 0x32 .endm - @ Plays the specified (song_number) song. If save_song is TRUE, the - @ specified (song_number) will be saved as if savebgm was called with it. - .macro playbgm song_number:req, save_song:req + @ Plays the specified song. If save_song is TRUE, the + @ specified song will be saved as if savebgm was called with it. + .macro playbgm song:req, save_song:req .byte 0x33 - .2byte \song_number + .2byte \song .byte \save_song .endm - @ Saves the specified (song_number) song to be played later. - .macro savebgm song_number:req + @ Saves the specified song to be played later. Saved music may be played when Overworld_PlaySpecialMapMusic is called. This occurs on + @ exiting most warps. + .macro savebgm song:req .byte 0x34 - .2byte \song_number + .2byte \song .endm @ Crossfades the currently-playing song into the map's default song. @@ -364,10 +366,10 @@ .byte 0x35 .endm - @ Crossfades the currently-playng song into the specified (song_number) song. - .macro fadenewbgm song_number:req + @ Crossfades the currently-playing song into the specified song. + .macro fadenewbgm song:req .byte 0x36 - .2byte \song_number + .2byte \song .endm @ Fades out the currently-playing song. @@ -382,91 +384,125 @@ .byte \speed .endm - @ Sends the player to Warp warp on Map bank.map. If the specified warp is 0xFF, - @ then the player will instead be sent to (X, Y) on the map. - .macro warp map:req, warp:req, X:req, Y:req + @ Helper macro for warp commands that formats their arguments. + @ It allows warp macros to either provide 1. a valid id for which warp location to use, + @ or 2. a pair of x/y coordinates to use. Both may be provided but at least one will be + @ ignored by SetPlayerCoordsFromWarp. If none are provided it will use dummy arguments, + @ and the warp will send the player to the center of the map. + @ Examples of valid inputs for a warp command: + @ - warp MAP, x, y + @ - warp MAP, warpId + @ - warp MAP + @ - warp MAP, warpId, x, y + .macro formatwarp map:req, a, b, c + map \map + .ifb \a @ No arguments provided, use dummy warpId and coords. + .byte WARP_ID_NONE + .2byte -1 @ x + .2byte -1 @ y + .else + .ifb \b @ Only one argument provided, treat it as a warpId and use dummy coords. + .byte \a @ warpId + .2byte -1 @ x + .2byte -1 @ y + .else + .ifb \c @ Only two arguments provided, treat them as a coord pair and use dummy warpId. + .byte WARP_ID_NONE + .2byte \a @ x + .2byte \b @ y + .else @ All three arguments provided. Output them and let the warp sort out which to use. + .byte \a @ warpId + .2byte \b @ x + .2byte \c @ y + .endif + .endif + .endif + .endm + + + @ Warps the player to the specified map. + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro warp map:req, a, b, c .byte 0x39 - map \map - .byte \warp - .2byte \X - .2byte \Y + formatwarp \map, \a, \b, \c .endm - @ Clone of warp that does not play a sound effect. - .macro warpsilent map:req, warp:req, X:req, Y:req + @ Warps the player to the specified map without playing a sound effect. + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro warpsilent map:req, a, b, c .byte 0x3a - map \map - .byte \warp - .2byte \X - .2byte \Y + formatwarp \map, \a, \b, \c .endm - @ Clone of warp that plays a door opening animation before stepping upwards into it. - .macro warpdoor map:req, warp:req, X:req, Y:req + @ Warps the player to the specified map and plays a door opening animation before stepping upwards into it. + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro warpdoor map:req, a, b, c .byte 0x3b - map \map - .byte \warp - .2byte \X - .2byte \Y + formatwarp \map, \a, \b, \c .endm - @ Warps the player to another map using a hole animation. + @ Warps the player to another map using a hole animation. If the specified map is MAP_UNDEFINED it will instead + @ use the map set by setholewarp. In either case the target coordinates on the destination map will be the + @ player's current position. .macro warphole map:req .byte 0x3c map \map .endm - @ Clone of warp that uses a teleport effect. It is apparently only used in R/S/E. - .macro warpteleport map:req, warp:req, X:req, Y:req + @ Warps the player to the specified map using a teleport effect. Effect is similar to warpspinenter but + @ this warp has a fade out first and doesn't maintain the original facing direction. + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro warpteleport map:req, a, b, c .byte 0x3d - map \map - .byte \warp - .2byte \X - .2byte \Y + formatwarp \map, \a, \b, \c .endm @ Sets the warp destination to be used later. - .macro setwarp map:req, warp:req, X:req, Y:req + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro setwarp map:req, a, b, c .byte 0x3e - map \map - .byte \warp - .2byte \X - .2byte \Y + formatwarp \map, \a, \b, \c .endm - @ Sets the warp destination that a warp to Warp 127 on Map 127.127 will connect to. - @ Useful when a map has warps that need to go to script-controlled locations (i.e. elevators). - .macro setdynamicwarp map:req, warp:req, X:req, Y:req + @ Sets the dynamic warp destination. Warps with a destination map of MAP_NONE will target this destination. + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro setdynamicwarp map:req, a, b, c .byte 0x3f - map \map - .byte \warp - .2byte \X - .2byte \Y + formatwarp \map, \a, \b, \c .endm - @ Sets the destination that diving or emerging from a dive will take the player to. - .macro setdivewarp map:req, warp:req, X:req, Y:req + @ Sets the destination that diving or emerging from a dive will take the player to. Note that this only + @ applies if the current map does not have a dive/emerge connection. If it does have a corresponding + @ map connection then that map and the player's current coordinates will be used as the destination instead. + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro setdivewarp map:req, a, b, c .byte 0x40 - map \map - .byte \warp - .2byte \X - .2byte \Y + formatwarp \map, \a, \b, \c .endm @ Sets the destination that falling into a hole will take the player to. - .macro setholewarp map:req, warp:req, X:req, Y:req + @ While it does accept and set the x/y coordinates and warpId, they are ultimately ignored. + @ This is only used to set the map the player should fall to. The exact location on the + @ map to fall to is determined by warphole. + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro setholewarp map:req, a=0, b=0, c .byte 0x41 - map \map - .byte \warp - .2byte \X - .2byte \Y + formatwarp \map, \a, \b, \c .endm - @ Retrieves the player's zero-indexed X- and Y-coordinates in the map, and stores them in the specified variables. - .macro getplayerxy X:req, Y:req + @ Retrieves the player's zero-indexed x- and y-coordinates in the map, and stores them in the specified variables. + .macro getplayerxy x:req, y:req .byte 0x42 - .2byte \X - .2byte \Y + .2byte \x + .2byte \y .endm @ Retrieves the number of Pokemon in the player's party, and stores that number in VAR_RESULT. @@ -474,176 +510,177 @@ .byte 0x43 .endm - @ Attempts to add quantity of item index to the player's Bag. If the player has enough room, the item will be added and - @ VAR_RESULT will be set to TRUE; otherwise, VAR_RESULT is set to FALSE. - .macro additem index:req, quantity=1 + @ Attempts to add quantity of the specified item to the player's Bag. If the player has enough room, the item will + @ be added and VAR_RESULT will be set to TRUE; otherwise, VAR_RESULT is set to FALSE. + .macro additem itemId:req, quantity=1 .byte 0x44 - .2byte \index + .2byte \itemId .2byte \quantity .endm - @ Removes quantity of item index from the player's Bag. - .macro removeitem index:req, quantity=1 + @ Removes quantity of the specified item from the player's Bag. If the player has fewer than 'quantity' in their bag + @ then none will be removed and VAR_RESULT will be set to FALSE. Otherwise it will be set to TRUE. + .macro removeitem itemId:req, quantity=1 .byte 0x45 - .2byte \index + .2byte \itemId .2byte \quantity .endm - @ Checks if the player has enough space in their Bag to hold quantity more of item index. Sets VAR_RESULT to + @ Checks if the player has enough space in their Bag to hold quantity more of the specified item. Sets VAR_RESULT to @ TRUE if there is room, or FALSE is there is no room. - .macro checkitemspace index:req, quantity:req + .macro checkitemspace itemId:req, quantity=1 .byte 0x46 - .2byte \index + .2byte \itemId .2byte \quantity .endm - @ Checks if the player has quantity or more of item index in their Bag. Sets VAR_RESULT to TRUE if the player has + @ Checks if the player has quantity or more of the specified item in their Bag. Sets VAR_RESULT to TRUE if the player has @ enough of the item, or FALSE if they have fewer than quantity of the item. - .macro checkitem index:req, quantity:req + .macro checkitem itemId:req, quantity=1 .byte 0x47 - .2byte \index + .2byte \itemId .2byte \quantity .endm - @ Checks which Bag pocket the specified item belongs in, and writes the pocket value (POCKET_*) to VAR_RESULT. - @ This script is used to show the name of the proper Bag pocket when the player receives an item via callstd (simplified to giveitem in XSE). - .macro checkitemtype index:req + @ Checks which Bag pocket the specified item belongs in, and writes the pocket value (POCKET_*) to VAR_RESULT. + @ This is used to show the name of the proper Bag pocket when the player receives an item via callstd. + .macro checkitemtype itemId:req .byte 0x48 - .2byte \index + .2byte \itemId .endm - @ Adds a quantity amount of item index to the player's PC. Both arguments can be variables. - .macro addpcitem index:req, quantity:req + @ Adds quantity of the specified item to the player's PC. + .macro addpcitem itemId:req, quantity=1 .byte 0x49 - .2byte \index + .2byte \itemId .2byte \quantity .endm - @ Checks for quantity amount of item index in the player's PC. Both arguments can be variables. - .macro checkpcitem index:req, quantity:req + @ Checks for quantity of the specified item in the player's PC. + .macro checkpcitem itemId:req, quantity=1 .byte 0x4a - .2byte \index + .2byte \itemId .2byte \quantity .endm - @ Adds decoration to the player's PC. In FireRed, this command is a nop. (The argument is read, but not used for anything.) + @ Adds a decoration to the player's PC. .macro adddecoration decoration:req .byte 0x4b .2byte \decoration .endm - @ Removes a decoration from the player's PC. In FireRed, this command is a nop. (The argument is read, but not used for anything.) + @ Removes a decoration from the player's PC. .macro removedecoration decoration:req .byte 0x4c .2byte \decoration .endm - @ Checks for decoration in the player's PC. In FireRed, this command is a nop. (The argument is read, but not used for anything.) + @ Checks for decoration in the player's PC. .macro checkdecor decoration:req .byte 0x4d .2byte \decoration .endm - @ Checks if the player has enough space in their PC to hold decoration. Sets VAR_RESULT to TRUE if there is room, or - @ FALSE is there is no room. In FireRed, this command is a nop. (The argument is read, but not used for anything.) + @ Checks if the player has enough space in their PC to hold the decoration. + @ Sets VAR_RESULT to TRUE if there is room, or FALSE is there is no room. .macro checkdecorspace decoration:req .byte 0x4e .2byte \decoration .endm - @ Applies the movement data at movements to the specified (index) Object. Also closes any standard message boxes that are still open. - @ If no map is specified, then the current map is used. - .macro applymovement index:req, movements:req, map + @ Applies the movement data at movements to the specified (localId) object. If no map is specified, then the current map is used. + .macro applymovement localId:req, movements:req, map .ifb \map .byte 0x4f - .2byte \index + .2byte \localId .4byte \movements .else @ Really only useful if the object has followed from one map to another (e.g. Wally during the catching event). .byte 0x50 - .2byte \index + .2byte \localId .4byte \movements map \map .endif .endm - @ Blocks script execution until the movements being applied to the specified (index) Object finish. - @ If the specified Object is 0x0000, then the command will block script execution until all Objects - @ affected by applymovement finish their movements. If the specified Object is not currently being - @ manipulated with applymovement, then this command does nothing. + @ Blocks script execution until the movements being applied to the specified (localId) object finish. + @ If localId is 0, then the id of the last-moved object will be used instead. If the specified object + @ is not currently being manipulated with applymovement, then this command does nothing. @ If no map is specified, then the current map is used. - .macro waitmovement index:req, map + .macro waitmovement localId:req, map .ifb \map .byte 0x51 - .2byte \index + .2byte \localId .else .byte 0x52 - .2byte \index + .2byte \localId map \map .endif .endm - @ Attempts to hide the specified (index) Object on the specified (map_group, map_num) map, - @ by setting its visibility flag if it has a valid one. If the Object does not have a valid - @ visibility flag, this command does nothing. + @ Attempts to despawn the specified (localId) object on the specified map. + @ It also sets the object's visibility flag if it has one. @ If no map is specified, then the current map is used. - .macro removeobject index:req, map + .macro removeobject localId:req, map .ifb \map .byte 0x53 - .2byte \index + .2byte \localId .else .byte 0x54 - .2byte \index + .2byte \localId map \map .endif .endm - @ Unsets the specified (index) Object's visibility flag on the specified (map_group, map_num) map if it has a valid one. - @ If the Object does not have a valid visibility flag, this command does nothing. + @ Attempts to spawn the specified (localId) object the specified map. + @ Note that unlike removeobject this does not modify the object's flag. @ If no map is specified, then the current map is used. - .macro addobject index:req, map + .macro addobject localId:req, map .ifb \map .byte 0x55 - .2byte \index + .2byte \localId .else .byte 0x56 - .2byte \index + .2byte \localId map \map .endif .endm - @ Sets the specified (index) Object's position on the current map. - .macro setobjectxy index:req, x:req, y:req + @ Sets the specified (localId) object's position on the current map. + .macro setobjectxy localId:req, x:req, y:req .byte 0x57 - .2byte \index + .2byte \localId .2byte \x .2byte \y .endm - .macro showobjectat index:req, map:req + @ Sets the specified object's invisibility to FALSE. + .macro showobjectat localId:req, map:req .byte 0x58 - .2byte \index + .2byte \localId map \map .endm - .macro hideobjectat index:req, map:req + @ Sets the specified object's invisibility to TRUE. + .macro hideobjectat localId:req, map:req .byte 0x59 - .2byte \index + .2byte \localId map \map .endm - @ If the script was called by an Object, then that Object will turn to face toward the metatile that the player is standing on. + @ Turns the currently selected object (if there is one) to face the player. .macro faceplayer .byte 0x5a .endm - .macro turnobject index:req, direction:req + @ Turns the specified object in the specified direction. + .macro turnobject localId:req, direction:req .byte 0x5b - .2byte \index + .2byte \localId .byte \direction .endm - @ If the Trainer flag for Trainer index is not set, this command does absolutely nothing. + @ Configures the arguments for a trainer battle, then jumps to the appropriate script in scripts/trainer_battle.inc .macro trainerbattle type:req, trainer:req, local_id:req, pointer1:req, pointer2, pointer3, pointer4 .byte 0x5c .byte \type @@ -700,8 +737,8 @@ NO_MUSIC = FALSE - @ Starts a single trainer battle, takes a trainer, intro text, loss text, and an optional event script - @ when used with an event script, you can also pass in an optional flag to disable music + @ Starts a single trainer battle. Takes a trainer, intro text, loss text, and an optional event script. + @ When used with an event script, you can also pass in an optional flag to disable music .macro trainerbattle_single trainer:req, intro_text:req, lose_text:req, event_script=FALSE, music=TRUE .if \event_script == FALSE trainerbattle TRAINER_BATTLE_SINGLE, \trainer, 0, \intro_text, \lose_text @@ -712,8 +749,8 @@ .endif .endm - @ Starts a double trainer battle, takes a trainer, intro text, loss text, text for when you have too few pokemon - @ and an optional event script, when used with an event script you can pass in an optional flag to disable music + @ Starts a double trainer battle. Takes a trainer, intro text, loss text, text for when you have too few pokemon + @ and an optional event script. When used with an event script you can pass in an optional flag to disable music .macro trainerbattle_double trainer:req, intro_text:req, lose_text:req, not_enough_pkmn_text:req, event_script=FALSE, music=TRUE .if \event_script == FALSE trainerbattle TRAINER_BATTLE_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text @@ -724,25 +761,25 @@ .endif .endm - @ Starts a rematch battle, takes a trainer, intro text and loss text + @ Starts a rematch battle. Takes a trainer, intro text and loss text .macro trainerbattle_rematch trainer:req, intro_text:req, lose_text:req trainerbattle TRAINER_BATTLE_REMATCH, \trainer, 0, \intro_text, \lose_text .endm - @ Starts a rematch double battle, takes a trainer, intro text, loss text, and text for when you have too few pokemon + @ Starts a rematch double battle. Takes a trainer, intro text, loss text, and text for when you have too few pokemon .macro trainerbattle_rematch_double trainer:req, intro_text:req, lose_text:req, not_enough_pkmn_text:req trainerbattle TRAINER_BATTLE_REMATCH_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text .endm - @ Starts a trainer battle, skipping intro text, takes a trainer and loss text + @ Starts a trainer battle, skipping intro text. Takes a trainer and loss text .macro trainerbattle_no_intro trainer:req, lose_text:req trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, \trainer, 0, \lose_text .endm - @ Starts a trainer battle using the battle information stored in RAM (usually by trainerbattle, which actually calls this - @ command behind-the-scenes), and blocks script execution until the battle finishes. - .macro trainerbattlebegin + @ 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. + .macro dotrainerbattle .byte 0x5d .endm @@ -756,53 +793,56 @@ .byte 0x5f .endm - @ Compares Flag (trainer + 0x500) to 1. (If the flag is set, then the trainer has been defeated by the player.) + @ Checks if the trainer has been defeated by the player (by comparing the flag 'trainer + TRAINER_FLAGS_START' to TRUE). .macro checktrainerflag trainer:req .byte 0x60 .2byte \trainer .endm - @ Sets Flag (trainer + 0x500). + @ Sets the trainer flag (trainer + TRAINER_FLAGS_START) to TRUE (defeated). .macro settrainerflag trainer:req .byte 0x61 .2byte \trainer .endm - @ Clears Flag (trainer + 0x500). + @ Sets the trainer flag (trainer + TRAINER_FLAGS_START) to FALSE (not defeated). .macro cleartrainerflag trainer:req .byte 0x62 .2byte \trainer .endm - .macro setobjectxyperm index:req, x:req, y:req + @ Sets the coordinates of an object's template, so that if the sprite goes off screen + @ it'll still be there when it comes back on screen. + .macro setobjectxyperm localId:req, x:req, y:req .byte 0x63 - .2byte \index + .2byte \localId .2byte \x .2byte \y .endm - @ Copies a live object event's xy position to its template, so that if the sprite goes off screen, + @ Copies a live object event's xy position to its template, so that if the sprite goes off screen @ it'll still be there when it comes back on screen. - .macro copyobjectxytoperm index:req + .macro copyobjectxytoperm localId:req .byte 0x64 - .2byte \index + .2byte \localId .endm - .macro setobjectmovementtype word:req, byte:req + @ Sets the movement type (MOVEMENT_TYPE_*) for an object's template. + .macro setobjectmovementtype localId:req, movementType:req .byte 0x65 - .2byte \word - .byte \byte + .2byte \localId + .byte \movementType .endm - @ If a standard message box (or its text) is being drawn on-screen, this command blocks script execution until the + @ If a standard message box (or its text) is being drawn on-screen, this command blocks script execution until the @ box and its text have been fully drawn. .macro waitmessage .byte 0x66 .endm - @ Starts displaying a standard message box containing the specified text. If text is a pointer, then the string at - @ that offset will be loaded and used. If text is script bank 0, then the value of script bank 0 will be treated as - @ a pointer to the text. (You can use loadpointer to place a string pointer in a script bank.) + @ Starts displaying a standard message box containing the specified text. If text is a pointer, then the string at + @ that offset will be loaded and used. If text is NULL, then the value of script data 0 will be treated as + @ a pointer to the text. The 'loadword 0' in msgbox sets this value, for instance. .macro message text:req .byte 0x67 .4byte \text @@ -823,17 +863,17 @@ .byte 0x6a .endm - @ Resumes normal movement for all Objects on-screen, and closes any standard message boxes that are still open. + @ Resumes normal movement for all objects on-screen, and closes any standard message boxes that are still open. .macro releaseall .byte 0x6b .endm - @ If the script was called by an Object, then that Object's movement will resume. This command also closes any standard message boxes that are still open. + @ Resumes normal movement for the selected object (if there is one) and the player. Also closes any standard message boxes that are still open. .macro release .byte 0x6c .endm - @ Blocks script execution until the player presses any key. + @ Blocks script execution until the player presses the A or B button. .macro waitbuttonpress .byte 0x6d .endm @@ -846,7 +886,7 @@ .byte \y .endm - @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. + @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. @ Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with multichoiceId. @ If ignoreBPress is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button. .macro multichoice x:req, y:req, multichoiceId:req, ignoreBPress:req @@ -859,7 +899,7 @@ @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. @ Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with multichoiceId. - @ The default argument determines the initial position of the cursor when the box is first opened; it is zero-indexed, and if it is too large, it is treated as 0x00. + @ The default argument determines the initial position of the cursor when the box is first opened; it is zero-indexed, and if it is too large, it is treated as 0. @ If ignoreBPress is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button. .macro multichoicedefault x:req, y:req, multichoiceId:req, default:req, ignoreBPress:req .byte 0x70 @@ -906,7 +946,7 @@ .byte \ignoreBPress .endm - @ Displays a box containing the front sprite for the specified (species) Pokemon species. + @ Displays a box containing the front sprite for the specified Pokemon species. .macro showmonpic species:req, x:req, y:req .byte 0x75 .2byte \species @@ -914,7 +954,7 @@ .byte \y .endm - @ Hides all boxes displayed with showmonpic. + @ Hides the box displayed by showmonpic. .macro hidemonpic .byte 0x76 .endm @@ -925,9 +965,9 @@ .byte \winnerId .endm - @ Displays the string at pointer as braille text in a standard message box. The string must be formatted to use braille - @ characters and needs to provide six extra starting characters that are skipped (in RS, these characters determined the - @ box's size and position, but in Emerald these are calculated automatically). + @ Displays the given string as braille text in a standard message box. The string should use the .braille directive + @ to convert text to braille, and be preceded by brailleformat. The brailleformat data is skipped over (in RS, these + @ bytes determined the box's size and position, but in Emerald these are calculated automatically). .macro braillemessage text:req .byte 0x78 .4byte \text @@ -944,209 +984,237 @@ .byte \textTop .endm - @ Gives the player one of the specified (species) Pokemon at level level holding item. The trailing 0s are unused parameters - .macro givemon species:req, level:req, item:req + @ Gives the player a Pokémon of the specified species and level, holding the specified item. The trailing 0s are unused 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=ITEM_NONE .byte 0x79 .2byte \species .byte \level .2byte \item - .4byte 0x0 - .4byte 0x0 + .4byte 0 + .4byte 0 .byte 0 .endm + @ Gives the player an Egg of the specified species. + @ VAR_RESULT will be set to MON_GIVEN_TO_PARTY, MON_GIVEN_TO_PC, or MON_CANT_GIVE depending on the outcome. .macro giveegg species:req .byte 0x7a .2byte \species .endm - .macro setmonmove index:req, slot:req, move:req + @ Replaces the move at 'slot' of the Pokémon in the player's party at 'partyIndex' with the specified move. + @ If a value greater than PARTY_SIZE is given for partyIndex it will use the last Pokémon in the party instead. + @ Note that this means in vanilla a value equal to PARTY_SIZE for partyIndex will go out of bounds. + .macro setmonmove partyIndex:req, slot:req, move:req .byte 0x7b - .byte \index + .byte \partyIndex .byte \slot .2byte \move .endm - @ Checks if at least one Pokemon in the player's party knows the specified (index) attack. If so, VAR_RESULT is set to the + @ Checks if at least one Pokemon in the player's party knows the specified move. If so, VAR_RESULT is set to the @ (zero-indexed) slot number of the first Pokemon that knows the move. If not, VAR_RESULT is set to PARTY_SIZE. @ VAR_0x8004 is also set to this Pokemon's species. - .macro checkpartymove index:req + .macro checkpartymove move:req .byte 0x7c - .2byte \index + .2byte \move .endm - @ Writes the name of the Pokemon at index species to the specified buffer. - .macro bufferspeciesname out:req, species:req + @ Converts STR_VAR_1, STR_VAR_2, or STR_VAR_3 to its corresponding index into sScriptStringVars (0, 1, or 2). + @ If given anything else it will output it directly. + @ Note: Because the STR_VAR_# arguments given to this macro are not part of a processed string they are not + @ replaced with their charmap values, they are just passed as the literal characters "STR_VAR_#". + .macro stringvar id:req + .if \id == STR_VAR_1 + .byte 0 + .elseif \id == STR_VAR_2 + .byte 1 + .elseif \id == STR_VAR_3 + .byte 2 + .else + .byte \id + .endif + .endm + + @ Writes the name of the given Pokemon species to the specified buffer. + .macro bufferspeciesname stringVarId:req, species:req .byte 0x7d - .byte \out + stringvar \stringVarId .2byte \species .endm @ Writes the name of the species of the first Pokemon in the player's party to the specified buffer. - .macro bufferleadmonspeciesname out:req + .macro bufferleadmonspeciesname stringVarId:req .byte 0x7e - .byte \out + stringvar \stringVarId .endm - @ Writes the nickname of the Pokemon in slot slot (zero-indexed) of the player's party to the specified buffer. + @ Writes the nickname of the Pokemon in 'slot' (zero-indexed) of the player's party to the specified buffer. @ If an empty or invalid slot is specified, ten spaces ("") are written to the buffer. - .macro bufferpartymonnick out:req, slot:req + .macro bufferpartymonnick stringVarId:req, slot:req .byte 0x7f - .byte \out + stringvar \stringVarId .2byte \slot .endm - @ Writes the name of the item at index item to the specified buffer. If the specified index is larger than - @ the number of items in the game (0x176), the name of item 0 ("????????") is buffered instead. - .macro bufferitemname out:req, item:req + @ Writes the name of the specified item to the specified buffer. If itemId is >= ITEMS_COUNT, + @ then the name of ITEM_NONE ("????????") is buffered instead. + .macro bufferitemname stringVarId:req, item:req .byte 0x80 - .byte \out + stringvar \stringVarId .2byte \item .endm - @ Writes the name of the decoration at index decoration to the specified buffer. In FireRed, this command is a nop. - .macro bufferdecorationname out:req, decoration:req + @ Writes the name of the specified decoration to the specified buffer. + .macro bufferdecorationname stringVarId:req, decoration:req .byte 0x81 - .byte \out + stringvar \stringVarId .2byte \decoration .endm - @ Writes the name of the move at index move to the specified buffer. - .macro buffermovename out:req, move:req + @ Writes the name of the specified move to the specified buffer. + .macro buffermovename stringVarId:req, move:req .byte 0x82 - .byte \out + stringvar \stringVarId .2byte \move .endm @ Converts the value of input to a decimal string, and writes that string to the specified buffer. - .macro buffernumberstring out:req, input:req + .macro buffernumberstring stringVarId:req, input:req .byte 0x83 - .byte \out + stringvar \stringVarId .2byte \input .endm - @ Writes the standard string identified by index to the specified buffer. This command has no protections in place at all, - @ so specifying an invalid standard string (e.x. 0x2B) can and usually will cause crashes or garbage characters. - .macro bufferstdstring out:req, index:req + @ Writes the given standard string (STDSTRING_*) to the specified buffer. Invalid std string ids are not handled. + .macro bufferstdstring stringVarId:req, index:req .byte 0x84 - .byte \out + stringvar \stringVarId .2byte \index .endm - @ Copies the string at offset to the specified buffer. - .macro bufferstring out:req, offset:req + @ Copies the string at the given pointer to the specified buffer. + .macro bufferstring stringVarId:req, text:req .byte 0x85 - .byte \out - .4byte \offset + stringvar \stringVarId + .4byte \text .endm @ Opens the Pokemart system, offering the specified products for sale. + @ Products should be a list of .2byte item values preceded by an .align 2 .macro pokemart products:req .byte 0x86 .4byte \products .endm @ Opens the Pokemart system and treats the list of items as decorations. + @ Products should be a list of .2byte decoration values preceded by an .align 2 .macro pokemartdecoration products:req .byte 0x87 .4byte \products .endm - @ Apparent clone of pokemartdecoration. + @ Identical to pokemartdecoration, but with slight changes to the clerk dialogue. See uses of MART_TYPE_DECOR2. .macro pokemartdecoration2 products:req .byte 0x88 .4byte \products .endm - @ Starts up the slot machine minigame. - .macro playslotmachine word:req + @ Starts up the slot machine minigame. id is a SLOT_MACHINE_* value that influences probabilities of certain reel outcomes. + .macro playslotmachine id:req .byte 0x89 - .2byte \word + .2byte \id .endm - @ Sets a berry tree's specific berry and growth stage. In FireRed, this command is a nop. - .macro setberrytree tree_id:req, berry:req, growth_stage:req + @ Sets a berry tree's berry and growth stage. treeId is any BERRY_TREE_* constant (an index into berryTrees in SaveBlock1), + @ berry is any ITEM_TO_BERRY(ITEM_BERRY_NAME) value, and growthStage is any BERRY_STAGE_* constant. + .macro setberrytree treeId:req, berry:req, growthStage:req .byte 0x8a - .byte \tree_id + .byte \treeId .byte \berry - .byte \growth_stage + .byte \growthStage .endm - @ This allows you to choose a Pokemon to use in a contest. In FireRed, this command sets the byte at 0x03000EA8 to 0x01. + @ Opens the party menu to select a Pokemon for a contest. .macro choosecontestmon .byte 0x8b .endm - @ Starts a contest. In FireRed, this command is a nop. + @ Starts the appeals round of a contest. .macro startcontest .byte 0x8c .endm - @ Shows the results of a contest. In FireRed, this command is a nop. + @ Shows the results screen of a contest. .macro showcontestresults .byte 0x8d .endm - @ Starts a contest over a link connection. In FireRed, this command is a nop. + @ Starts communication to initialize a link contest. .macro contestlinktransfer .byte 0x8e .endm - @ Stores a random integer between 0 and limit in VAR_RESULT. + @ Stores a random integer between 0 and limit (exclusive of limit) in VAR_RESULT. .macro random limit:req .byte 0x8f .2byte \limit .endm - @ If check is 0x00, this command adds value to the player's money. - .macro addmoney value:req, check:req + @ Adds value to the player's money. If adding 'value' money would exceed MAX_MONEY, the player's money is set to MAX_MONEY. + @ If 'disable' is set to anything but 0 then this command does nothing. + .macro addmoney value:req, disable=0 .byte 0x90 .4byte \value - .byte \check + .byte \disable .endm - @ If check is 0x00, this command subtracts value from the player's money. - .macro removemoney value:req, check:req + @ Subtracts value from the player's money. If the player has less than 'value' money, their money is set to 0. + @ If 'disable' is set to anything but 0 then this command does nothing. + .macro removemoney value:req, disable=0 .byte 0x91 .4byte \value - .byte \check + .byte \disable .endm - @ If check is 0x00, this command will check if the player has money >= value; VAR_RESULT is set to TRUE if the player - @ has enough money, or FALSE if they do not. - .macro checkmoney value:req, check:req + @ Checks if the player has money >= value. VAR_RESULT is set to TRUE if the player has enough money, or FALSE if they do not. + @ If 'disable' is set to anything but 0 then this command does nothing. + .macro checkmoney value:req, disable=0 .byte 0x92 .4byte \value - .byte \check + .byte \disable .endm - @ Spawns a secondary box showing how much money the player has. - .macro showmoneybox x:req, y:req, check:req + @ Creates a window showing how much money the player has. + @ If 'disable' is set to anything but 0 then this command does nothing. + .macro showmoneybox x:req, y:req, disable=0 .byte 0x93 .byte \x .byte \y - .byte \check + .byte \disable .endm - @ Hides the secondary box spawned by showmoney. Consumption of the x and y arguments was dummied out. + @ Destroys the window created by showmoneybox. Consumption of the x and y arguments was dummied out. .macro hidemoneybox .byte 0x94 .byte 0 @ \x .byte 0 @ \y .endm - @ Updates the secondary box spawned by showmoney. Consumes but does not use arguments. - .macro updatemoneybox x:req, y:req + @ Updates the window created by showmoneybox. Consumption of the x and y arguments was dummied out. + @ If 'disable' is set to anything but 0 then this command does nothing. + .macro updatemoneybox disable=0 .byte 0x95 - .byte \x - .byte \y - .byte 0 @ 1 = don't perform this command. Always 0 in vanilla. Why this is a thing is beyond me. + .byte 0 @ \x + .byte 0 @ \y + .byte \disable .endm - @ Gets the price reduction for the index given. In FireRed, this command is a nop. - .macro getpricereduction index:req + @ Gets whether the effects of the specified PokeNews program are active. newsKind is a POKENEWS_* constant. + .macro getpokenewsactive newsKind:req .byte 0x96 - .2byte \index + .2byte \newsKind .endm @ Fades the screen to and from black and white. Modes are FADE_(TO/FROM)_(WHITE/BLACK) @@ -1162,65 +1230,71 @@ .byte \speed .endm - .macro setflashradius word:req + @ Sets the flash level. A level of 0 is fully bright, a level of 1 is the largest flash radius, a level + @ of 7 is the smallest flash radius, a level of 8 is fully black. + .macro setflashlevel level:req .byte 0x99 - .2byte \word + .2byte \level .endm - .macro animateflash byte:req + @ Animates the flash radius from its current size to the size it would be at the specified level. + @ Note that this does not actually change the current flash level. It's typically used just before a setflashlevel. + .macro animateflash level:req .byte 0x9a - .byte \byte + .byte \level .endm - .macro messageautoscroll pointer:req + @ Automatically scrolls through the message without player input and at a fixed speed. + .macro messageautoscroll text:req .byte 0x9b - .4byte \pointer + .4byte \text .endm - @ Executes the specified field move animation. + @ Executes the specified field effect animation (FLDEFF_*). .macro dofieldeffect animation:req .byte 0x9c .2byte \animation .endm - @ Sets up the field effect argument argument with the value value. - .macro setfieldeffectargument argument:req, param:req + @ Sets the field effect argument at index 'argNum' to 'value.' + .macro setfieldeffectargument argNum:req, value:req .byte 0x9d - .byte \argument - .2byte \param + .byte \argNum + .2byte \value .endm - @ Blocks script execution until all playing field move animations complete. + @ Blocks script execution until all playing field effect animations complete. .macro waitfieldeffect animation:req .byte 0x9e .2byte \animation .endm - @ Sets which healing place the player will return to if all of the Pokemon in their party faint. + @ Sets which healing location (HEAL_LOCATION_*) the player will return to if all of the Pokemon in their party faint. .macro setrespawn heallocation:req .byte 0x9f .2byte \heallocation .endm - @ Checks the player's gender. If male, then MALE (0) is stored in VAR_RESULT. If female, then FEMALE (1) is stored in VAR_RESULT. + @ Checks the player's gender. Stores the result (MALE (0) or FEMALE (1)) in VAR_RESULT. .macro checkplayergender .byte 0xa0 .endm - @ Plays the specified (species) Pokemon's cry. You can use waitcry to block script execution until the sound finishes. - .macro playmoncry species:req, effect:req + @ Plays the cry of the given species. Mode is any CRY_MODE_* constant. + @ You can use waitmoncry to block script execution until the cry finishes. + .macro playmoncry species:req, mode:req .byte 0xa1 .2byte \species - .2byte \effect + .2byte \mode .endm - @ Changes the metatile at (x, y) on the current map. - .macro setmetatile x:req, y:req, metatile_number:req, has_collision:req + @ Set the metatile at (x, y) on the current map to the given metatile and impassability. + .macro setmetatile x:req, y:req, metatileId:req, impassable:req .byte 0xa2 .2byte \x .2byte \y - .2byte \metatile_number - .2byte \has_collision + .2byte \metatileId + .2byte \impassable .endm @ Queues a weather change to the default weather for the map. @@ -1239,54 +1313,63 @@ .byte 0xa5 .endm - @ This command manages cases in which maps have tiles that change state when stepped on (specifically, cracked/breakable floors). - .macro setstepcallback subroutine:req + @ Enables the overworld task specified by stepCbId (STEP_CB_*). Only 1 can be active at a time. See src/field_tasks.c for more. + .macro setstepcallback stepCbId:req .byte 0xa6 - .byte \subroutine + .byte \stepCbId .endm + @ Sets the current map layout to the one specified by index (LAYOUT_*). + @ This should be done before the layout is loaded, typically in the ON_TRANSITION map script. .macro setmaplayoutindex index:req .byte 0xa7 .2byte \index .endm - .macro setobjectpriority index:req, map:req, priority:req + @ Sets the specified object's sprite's subpriority, and sets fixedPriority to TRUE. + @ Only used to hide the player and Briney behind the boat. + .macro setobjectsubpriority localId:req, map:req, subpriority:req .byte 0xa8 - .2byte \index + .2byte \localId map \map - .byte \priority + .byte \subpriority .endm - .macro resetobjectpriority index:req, map:req + @ Sets the specified object's fixedPriority to FALSE. Does not change the subpriority field. + .macro resetobjectsubpriority localId:req, map:req .byte 0xa9 - .2byte \index + .2byte \localId map \map .endm - .macro createvobject sprite:req, byte2:req, x:req, y:req, elevation, direction + @ Creates a sprite with object graphics. Used when creating large groups of static NPCs that exceed + @ the object event limit (e.g. Contest / Battle Dome audiences and Union Room group members). + @ 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 \sprite - .byte \byte2 + .byte \graphicsId + .byte \id .2byte \x .2byte \y .byte \elevation .byte \direction .endm - .macro turnvobject index:req, direction:req + @ Turns a sprite created with createvobject. + .macro turnvobject id:req, direction:req .byte 0xab - .byte \index + .byte \id .byte \direction .endm - @ Opens the door metatile at (X, Y) with an animation. + @ Opens the door metatile at (x, y) with an animation. .macro opendoor x:req, y:req .byte 0xac .2byte \x .2byte \y .endm - @ Closes the door metatile at (X, Y) with an animation. + @ Closes the door metatile at (x, y) with an animation. .macro closedoor x:req, y:req .byte 0xad .2byte \x @@ -1298,21 +1381,21 @@ .byte 0xae .endm - @ Sets the door tile at (x, y) to be open without an animation. + @ Sets the door metatile at (x, y) to be open without an animation. .macro setdooropen x:req, y:req .byte 0xaf .2byte \x .2byte \y .endm - @ Sets the door tile at (x, y) to be closed without an animation. + @ Sets the door metatile at (x, y) to be closed without an animation. .macro setdoorclosed x:req, y:req .byte 0xb0 .2byte \x .2byte \y .endm - @ In Emerald, this command consumes its parameters and does nothing. In FireRed, this command is a nop. + @ Consumes its parameters and does nothing. It is implemented but unused in Ruby/Sapphire. .macro addelevmenuitem a:req, b:req, c:req, d:req .byte 0xb1 .byte \a @@ -1321,33 +1404,45 @@ .2byte \d .endm - @ In FireRed and Emerald, this command is a nop. + @ Does nothing. It is implemented but unused in Ruby/Sapphire. .macro showelevmenu .byte 0xb2 .endm + @ Gets the number of coins the player has and stores it in the variable 'out'. .macro checkcoins out:req .byte 0xb3 .2byte \out .endm + @ Gives 'count' coins to the player, up to a total of MAX_COINS. + @ If the player already has MAX_COINS then VAR_RESULT is set to TRUE, otherwise it is set to FALSE. .macro addcoins count:req .byte 0xb4 .2byte \count .endm + @ Takes 'count' coins from the player. + @ If the player has fewer than 'count' coins then no coins are taken and VAR_RESULT is set to TRUE. + @ Otherwise VAR_RESULT is set to FALSE. .macro removecoins count:req .byte 0xb5 .2byte \count .endm - @ Prepares to start a wild battle against a species at Level level holding item. Running this command will not affect - @ normal wild battles. You start the prepared battle with dowildbattle. - .macro setwildbattle species:req, level:req, item:req + @ Prepares to start a wild battle against a 'species' at 'level' holding 'item'. + @ If 'species2' is something other than SPECIES_NONE, then the battle is a double battle + @ that is also against 'species2' at 'level2' holding 'item2'. + @ Running this command will not affect normal wild battles. You start the prepared battle with dowildbattle. + @ If the player only has one Pokemon, a scripted double battle will be buggy. + .macro setwildbattle species:req, level:req, item=ITEM_NONE, species2=SPECIES_NONE, level2=0, item2=ITEM_NONE .byte 0xb6 .2byte \species .byte \level .2byte \item + .2byte \species2 + .byte \level2 + .2byte \item2 .endm @ Starts a wild battle against the Pokemon generated by setwildbattle. Blocks script execution until the battle finishes. @@ -1355,83 +1450,90 @@ .byte 0xb7 .endm + @ Sets a relative address to be used by the other vcommands as part of a Mystery Gift script. .macro setvaddress pointer:req .byte 0xb8 .4byte \pointer .endm - .macro vgoto pointer:req + @ Equivalent to goto using the relative address set by setvaddress. + .macro vgoto destination:req .byte 0xb9 - .4byte \pointer + .4byte \destination .endm - .macro vcall pointer:req + @ Equivalent to call using the relative address set by setvaddress. + .macro vcall destination:req .byte 0xba - .4byte \pointer + .4byte \destination .endm - .macro vgoto_if byte:req, pointer:req + @ Equivalent to goto_if using the relative address set by setvaddress. + .macro vgoto_if condition:req, destination:req .byte 0xbb - .byte \byte - .4byte \pointer + .byte \condition + .4byte \destination .endm - .macro vcall_if byte:req, pointer:req + @ Equivalent to call_if using the relative address set by setvaddress. + .macro vcall_if condition:req, destination:req .byte 0xbc - .byte \byte - .4byte \pointer + .byte \condition + .4byte \destination .endm - .macro vmessage pointer:req + @ Equivalent to message using the relative address set by setvaddress. + .macro vmessage text:req .byte 0xbd - .4byte \pointer + .4byte \text .endm - .macro vloadptr pointer:req + @ Expands the given text at the pointer (- the relative address set by setvaddress) into gStringVar4 + .macro vbuffermessage text:req .byte 0xbe - .4byte \pointer + .4byte \text .endm - .macro vbufferstring byte:req, pointer:req + @ Equivalent to bufferstring using the relative address set by setvaddress. + .macro vbufferstring stringVarIndex:req, text:req .byte 0xbf - .byte \byte - .4byte \pointer + stringvar \stringVarIndex + .4byte \text .endm - @ Spawns a secondary box showing how many Coins the player has. + @ Create a window showing how many Coins the player has. .macro showcoinsbox x:req, y:req .byte 0xc0 .byte \x .byte \y .endm - @ Hides the secondary box spawned by showcoins. It consumes its arguments but doesn't use them. + @ Destroys the window created by showcoins. It consumes its arguments but doesn't use them. .macro hidecoinsbox x:req, y:req .byte 0xc1 .byte \x .byte \y .endm - @ Updates the secondary box spawned by showcoins. It consumes its arguments but doesn't use them. + @ Updates the window created by showcoins. It consumes its arguments but doesn't use them. .macro updatecoinsbox x:req, y:req .byte 0xc2 .byte \x .byte \y .endm - @ Increases the value of the specified game stat by 1. The stat's value will not be allowed to exceed 0x00FFFFFF. + @ Increases the value of the specified game stat by 1. The maximum value of a stat is 0xFFFFFF. See include/constants/game_stat.h .macro incrementgamestat stat:req .byte 0xc3 .byte \stat .endm @ Sets the destination that using an Escape Rope or Dig will take the player to. - .macro setescapewarp map:req, warp:req, x:req, y:req + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro setescapewarp map:req, a, b, c .byte 0xc4 - map \map - .byte \warp - .2byte \x - .2byte \y + formatwarp \map, \a, \b, \c .endm @ Blocks script execution until cry finishes. @@ -1439,49 +1541,40 @@ .byte 0xc5 .endm - @ Writes the name of the specified (box) PC box to the specified buffer. - .macro bufferboxname out:req, box:req + @ Writes the name of the specified PC box to the specified buffer. + .macro bufferboxname stringVarId:req, box:req .byte 0xc6 - .byte \out + stringvar \stringVarId .2byte \box .endm - @ Sets the color of the text in standard message boxes. 0x00 produces blue (male) text, 0x01 produces red (female) text, - @ 0xFF resets the color to the default for the current OW's gender, and all other values produce black text. @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro textcolor color:req .byte 0xc7 .byte \color .endm - @ The exact purpose of this command is unknown, but it is related to the blue help-text box that appears on the bottom - @ of the screen when the Main Menu is opened. @ Used only in FireRed/LeafGreen, does nothing in Emerald. - .macro loadhelp pointer:req + .macro loadhelp text:req .byte 0xc8 - .4byte \pointer + .4byte \text .endm - @ The exact purpose of this command is unknown, but it is related to the blue help-text box that appears on the bottom of - @ the screen when the Main Menu is opened. @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro unloadhelp .byte 0xc9 .endm - @ After using this command, all standard message boxes will use the signpost frame. @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro signmsg .byte 0xca .endm - @ Ends the effects of signmsg, returning message box frames to normal. @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro normalmsg .byte 0xcb .endm - @ Compares the value of a hidden variable to a dword. @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro comparehiddenvar a:req, value:req .byte 0xcc @@ -1489,39 +1582,38 @@ .4byte \value .endm - @ Sets the Pokemon in the specified slot of the player party's eventLegal bit. + @ Sets the eventLegal bit for the Pokemon in the specified slot of the player's party. .macro setmoneventlegal slot:req .byte 0xcd .2byte \slot .endm - @ Checks if the Pokemon in the specified slot of the player's party has its eventLegal bit set. If it isn't set, + @ Checks if the eventLegal bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, @ VAR_RESULT is TRUE. If the bit is set (or if the specified slot is empty or invalid), VAR_RESULT is FALSE. .macro checkmoneventlegal slot:req .byte 0xce .2byte \slot .endm - @ Depending on factors I haven't managed to understand yet, this command may cause script execution to jump to the - @ offset specified by the pointer at 0x020375C0. - .macro gotoram + @ Jumps to the ram script saved from a Wonder Card. If there is no valid saved Wonder Card or if the + @ ram script is invalid then this does nothing. + .macro trywondercardscript .byte 0xcf .endm - @ Sets worldmapflag to 1. This allows the player to Fly to the corresponding map, if that map has a flightspot. @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro setworldmapflag worldmapflag:req .byte 0xd0 .2byte \worldmapflag .endm - @ Clone of warpteleport? It is apparently only used in FR/LG, and only with specials.[source] - .macro warpteleport2 map:req, warp:req, x:req, y:req + @ Warps the player to the specified map using a teleport effect. Effect is similar to warpteleport, but + @ this warp has no fade out and maintains the original facing direction. + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro warpspinenter map:req, a, b, c .byte 0xd1 - map \map - .byte \warp - .2byte \x - .2byte \y + formatwarp \map, \a, \b, \c .endm @ Changes the location where the player caught the Pokemon in the specified slot of their party. @@ -1531,99 +1623,114 @@ .byte \location .endm - @ For the rotating tile puzzles in Mossdeep Gym/Trick House Room 7. Moves the objects on the colored puzzle - @ specified by puzzleNumber one rotation + @ For the rotating tile puzzles in Mossdeep Gym / Trick House Room 7. Moves the objects one rotation + @ on the colored puzzle specified by puzzleNumber. .macro moverotatingtileobjects puzzleNumber:req .byte 0xd3 .2byte \puzzleNumber .endm - @ For the rotating tile puzzles in Mossdeep Gym/Trick House Room 7. Updates the facing direction of all objects on the puzzle tiles + @ For the rotating tile puzzles in Mossdeep Gym / Trick House Room 7. Updates the facing direction of all objects on the puzzle tiles .macro turnrotatingtileobjects .byte 0xd4 .endm - @ For the rotating tile puzzles in Mossdeep Gym/Trick House Room 7. Allocates memory for the puzzle objects. + @ For the rotating tile puzzles in Mossdeep Gym / Trick House Room 7. Allocates memory for the puzzle objects. @ isTrickHouse is needed to determine which of the two maps the puzzle is on, in order to know where in the tileset - @ the puzzle tiles start. In FireRed, this command is a nop. + @ the puzzle tiles start (TRUE for Trick House Room, FALSE for Mossdeep Gym). .macro initrotatingtilepuzzle isTrickHouse:req .byte 0xd5 .2byte \isTrickHouse .endm - @ For the rotating tile puzzles in Mossdeep Gym/Trick House Room 7. Frees the memory allocated for the puzzle objects. + @ For the rotating tile puzzles in Mossdeep Gym / Trick House Room 7. Frees the memory allocated for the puzzle objects. .macro freerotatingtilepuzzle .byte 0xd6 .endm - .macro warpmossdeepgym map:req, warpId:req, x:req, y:req + @ Warp used by the teleport tiles in the Mossdeep Gym. Plays SE_WARP_IN and does a simple fade transition. + @ Also skips reloading object events by setting SKIP_OBJECT_EVENT_LOAD. + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro warpmossdeepgym map:req, a, b, c .byte 0xd7 - map \map - .byte \warpId - .2byte \x - .2byte \y + formatwarp \map, \a, \b, \c .endm + @ Sets the selected object to the id of the currently approaching trainer. .macro selectapproachingtrainer .byte 0xd8 .endm + @ Freezes all objects immediately except the player and the approaching trainers. + @ The player and trainers are frozen once their movement is finished. .macro lockfortrainer .byte 0xd9 .endm + @ Destroys the window created by braillemessage. .macro closebraillemessage .byte 0xda .endm - .macro messageinstant pointer:req + @ Prints and draws the message all at once rather than character by character. + @ Does not wait for player input to continue. + .macro messageinstant text:req .byte 0xdb - .4byte \pointer + .4byte \text .endm + @ Equivalent to fadescreen but copies gPlttBufferUnfaded to gPaletteDecompressionBuffer on the fade out + @ and the reverse on the fade in, in effect saving gPlttBufferUnfaded to restore it. .macro fadescreenswapbuffers mode:req .byte 0xdc .byte \mode .endm - .macro buffertrainerclassname out:req, class:req + @ Buffers the specified trainer's class name to the given string var. + @ If the trainer id is >= TRAINERS_COUNT it will be treated as TRAINER_NONE. + .macro buffertrainerclassname stringVarId:req, trainerId:req .byte 0xdd - .byte \out - .2byte \class + stringvar \stringVarId + .2byte \trainerId .endm - .macro buffertrainername out:req, trainer:req + @ Buffers the specified trainer's name to the given string var. + @ If the trainer id is >= TRAINERS_COUNT it will be treated as TRAINER_NONE. + .macro buffertrainername stringVarId:req, trainerId:req .byte 0xde - .byte \out - .2byte \trainer + stringvar \stringVarId + .2byte \trainerId .endm - .macro pokenavcall pointer:req + @ Starts a Pokenav call with the given text. + .macro pokenavcall text:req .byte 0xdf - .4byte \pointer + .4byte \text .endm - .macro warpsootopolislegend map:req, byte:req, word1:req, word2:req + @ Warp with a fade to white. Used during the Sootopolis legendary fight. + @ Warp commands can be given either the id of which warp location to go to on the destination map + @ or a pair of x/y coordinates to go to directly on the destination map. + .macro warpwhitefade map:req, a, b, c .byte 0xe0 - map \map - .byte \byte - .2byte \word1 - .2byte \word2 + formatwarp \map, \a, \b, \c .endm - .macro buffercontesttypestring out:req, word:req + @ Buffers the name of the contest category to the buffer. + @ For example a category of CONTEST_CATEGORY_COOL will buffer the string "COOLNESS CONTEST". + .macro buffercontestname stringVarId:req, category:req .byte 0xe1 - .byte \out - .2byte \word + stringvar \stringVarId + .2byte \category .endm - @ Writes the name of the specified (item) item to the specified buffer. If the specified item is a Berry (0x85 - 0xAE) or - @ Poke Ball (0x4) and if the quantity is 2 or more, the buffered string will be pluralized ("IES" or "S" appended). - @ If the specified item is the Enigma Berry, I have no idea what this command does (but testing showed no pluralization). - @ If the specified index is larger than the number of items in the game (0x176), the name of item 0 ("????????") is buffered instead. - .macro bufferitemnameplural out:req, item:req, quantity:req + @ Writes the name of the specified item to the specified buffer. If 'item' is a Berry or ITEM_POKE_BALL + @ and if the quantity is 2 or more, the buffered string will be pluralized ("IES" or "S" appended). + @ If the specified item is >= ITEMS_COUNT then the name of ITEM_NONE ("????????") is buffered instead. + .macro bufferitemnameplural stringVarId:req, item:req, quantity:req .byte 0xe2 - .byte \out + stringvar \stringVarId .2byte \item .2byte \quantity .endm @@ -1641,28 +1748,48 @@ goto_if TRUE, \dest .endm - .macro goto_if_lt dest:req @ LESS THAN - goto_if 0, \dest - .endm - - .macro goto_if_eq dest:req @ EQUAL - goto_if 1, \dest + @ Allows 'compare' followed by a conditional goto/call to be combined into a single statement. + @ The following are examples of the two acceptable formats this facilitates: + @ compare VAR_RESULT, TRUE + @ goto_if_eq MyScript + @ - or - + @ goto_if_eq VAR_RESULT, TRUE, MyScript + @ + @ The first two arguments to this macro are the base command, e.g. 'goto_if 1' for goto_if_eq. + @ The remaining arguments 'a, b, c' depend on the format: + @ For a single statement, 'a' and 'b' are the values to compare and 'c' is the destination pointer. + @ For a statement preceded by a compare, 'a' is the destination pointer and 'b/c' are not provided. + .macro trycompare jump:req, condition:req, a:req, b, c + .ifnb \c + compare \a, \b + \jump \condition, \c + .else + \jump \condition, \a + .endif .endm - .macro goto_if_gt dest:req @ GREATER THAN - goto_if 2, \dest + .macro goto_if_lt a:req, b, c @ LESS THAN + trycompare goto_if, 0, \a, \b, \c .endm - .macro goto_if_le dest:req @ LESS THAN OR EQUAL - goto_if 3, \dest + .macro goto_if_eq a:req, b, c @ EQUAL + trycompare goto_if, 1, \a, \b, \c .endm - .macro goto_if_ge dest:req @ GREATER THAN OR EQUAL - goto_if 4, \dest + .macro goto_if_gt a:req, b, c @ GREATER THAN + trycompare goto_if, 2, \a, \b, \c .endm - .macro goto_if_ne dest:req @ NOT EQUAL - goto_if 5, \dest + .macro goto_if_le a:req, b, c @ LESS THAN OR EQUAL + trycompare goto_if, 3, \a, \b, \c + .endm + + .macro goto_if_ge a:req, b, c @ GREATER THAN OR EQUAL + trycompare goto_if, 4, \a, \b, \c + .endm + + .macro goto_if_ne a:req, b, c @ NOT EQUAL + trycompare goto_if, 5, \a, \b, \c .endm .macro call_if_unset flag:req, dest:req @@ -1675,36 +1802,36 @@ call_if TRUE, \dest .endm - .macro call_if_lt dest:req @ LESS THAN - call_if 0, \dest - .endm - - .macro call_if_eq dest:req @ EQUAL - call_if 1, \dest + .macro call_if_lt a:req, b, c @ LESS THAN + trycompare call_if, 0, \a, \b, \c .endm - .macro call_if_gt dest:req @ GREATER THAN - call_if 2, \dest + .macro call_if_eq a:req, b, c @ EQUAL + trycompare call_if, 1, \a, \b, \c .endm - .macro call_if_le dest:req @ LESS THAN OR EQUAL - call_if 3, \dest + .macro call_if_gt a:req, b, c @ GREATER THAN + trycompare call_if, 2, \a, \b, \c .endm - .macro call_if_ge dest:req @ GREATER THAN OR EQUAL - call_if 4, \dest + .macro call_if_le a:req, b, c @ LESS THAN OR EQUAL + trycompare call_if, 3, \a, \b, \c .endm - .macro call_if_ne dest:req @ NOT EQUAL - call_if 5, \dest + .macro call_if_ge a:req, b, c @ GREATER THAN OR EQUAL + trycompare call_if, 4, \a, \b, \c .endm - .macro vgoto_if_eq dest:req - vgoto_if TRUE, \dest + .macro call_if_ne a:req, b, c @ NOT EQUAL + trycompare call_if, 5, \a, \b, \c .endm - .macro vgoto_if_ne dest:req - vgoto_if FALSE, \dest + .macro vgoto_if_eq a:req, b, c + trycompare vgoto_if, TRUE, \a, \b, \c + .endm + + .macro vgoto_if_ne a:req, b, c + trycompare vgoto_if, FALSE, \a, \b, \c .endm .macro vgoto_if_unset flag:req, dest:req @@ -1753,32 +1880,42 @@ MSGBOX_YESNO = 5 MSGBOX_AUTOCLOSE = 6 MSGBOX_GETPOINTS = 9 + MSGBOX_POKENAV = 10 YES = 1 NO = 0 + @ Buffers the given text and calls the relevant standard message script (see gStdScripts). .macro msgbox text:req, type=MSGBOX_DEFAULT loadword 0, \text callstd \type .endm + @ Gives 'amount' of the specified 'item' to the player and prints a message with fanfare. + @ If the player doesn't have space for all the items then as many are added as possible, the + @ message indicates there is no room, and VAR_RESULT is set to FALSE. + @ Otherwise VAR_RESULT is set to TRUE, and the message indicates they have received the item(s). .macro giveitem item:req, amount=1 setorcopyvar VAR_0x8000, \item setorcopyvar VAR_0x8001, \amount callstd STD_OBTAIN_ITEM .endm + @ For picking up items in the overworld. Similar to giveitem, but with different language and + @ sets the flag of the last-talked to object (the item the player picked up). .macro finditem item:req, amount=1 setorcopyvar VAR_0x8000, \item setorcopyvar VAR_0x8001, \amount callstd STD_FIND_ITEM .endm + @ Equivalent to giveitem but for a single decoration. .macro givedecoration decoration:req setorcopyvar VAR_0x8000, \decoration callstd STD_OBTAIN_DECORATION .endm + @ Registers the specified trainer in Match Call and plays a fanfare with a notification message. .macro register_matchcall trainer:req setvar VAR_0x8004, \trainer special SetMatchCallRegisteredFlag @@ -1786,9 +1923,98 @@ callstd STD_REGISTER_MATCH_CALL .endm + @ Does a sparkle field effect (e.g. when the Trick Master is hiding) at the given coordinates. .macro dofieldeffectsparkle x:req, y:req, priority:req setfieldeffectargument 0, \x setfieldeffectargument 1, \y setfieldeffectargument 2, \priority dofieldeffect FLDEFF_SPARKLE .endm + + @ Prints a braille message, waits for an A or B press, then closes the message. + .macro braillemsgbox text:req + braillemessage \text + waitbuttonpress + closebraillemessage + .endm + + @ Creates an "event legal" Pokémon for an encounter + .macro seteventmon species:req, level:req, item=ITEM_NONE + setvar VAR_0x8004, \species + setvar VAR_0x8005, \level + setvar VAR_0x8006, \item + special CreateEventLegalEnemyMon + .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. + @ For example, giving the first opponent +1 to atk and -2 to speed would be: settotemboost B_POSITION_OPPONENT_LEFT, 1, 0, -2 + .macro settotemboost battler:req, atk=0,def=0,speed=0,spatk=0,spdef=0,acc=0,evas=0 + setvar VAR_0x8000, \battler + setvar VAR_0x8001, \atk + setvar VAR_0x8002, \def + setvar VAR_0x8003, \speed + setvar VAR_0x8004, \spatk + setvar VAR_0x8005, \spdef + setvar VAR_0x8006, \acc + setvar VAR_0x8007, \evas + special SetTotemBoost + .endm + + @ useful totem boost macros + .macro totemboost_atk1 battler:req + settotemboost \battler, 1 + .endm + .macro totemboost_def1 battler:req + settotemboost \battler, 0, 1 + .endm + .macro totemboost_speed1 battler:req + settotemboost \battler, 0, 0, 1 + .endm + .macro totemboost_spatk1 battler:req + settotemboost \battler, 0, 0, 0, 1 + .endm + .macro totemboost_spdef1 battler:req + settotemboost \battler, 0, 0, 0, 0, 1 + .endm + .macro totemboost_acc1 battler:req + settotemboost \battler, 0, 0, 0, 0, 0, 1 + .endm + .macro totemboost_evas1 battler:req + settotemboost \battler, 0, 0, 0, 0, 0, 0, 1 + .endm + + .macro totemboost_atk2 battler:req + settotemboost \battler, 2 + .endm + .macro totemboost_def2 battler:req + settotemboost \battler, 0, 2 + .endm + .macro totemboost_speed2 battler:req + settotemboost \battler, 0, 0, 2 + .endm + .macro totemboost_spatk2 battler:req + settotemboost \battler, 0, 0, 0, 2 + .endm + .macro totemboost_spdef2 battler:req + settotemboost \battler, 0, 0, 0, 0, 2 + .endm + .macro totemboost_acc2 battler:req + settotemboost \battler, 0, 0, 0, 0, 0, 2 + .endm + .macro totemboost_evas2 battler:req + settotemboost \battler, 0, 0, 0, 0, 0, 0, 2 + .endm + + @ Attempts to trigger a special evolution method in the overworld. + @ There may be other conditions required which are coded for in GetEvolutionTargetSpecies. + @ EX: tryspecialevo EVO_WATER_SCROLL, FALSE, FALSE triggers Kubfu's EVO_WATER_SCROLL evolution + @ method, cannot be cancelled in the evolution scene, and will only evolve one Kubfu if there + @ are multiple in the player's party. + .macro tryspecialevo evoMethod:req, canStopEvo=TRUE, tryMultiple=TRUE + setvar VAR_0x8000, \evoMethod + setvar VAR_0x8001, \canStopEvo + setvar VAR_0x8002, \tryMultiple + special TrySpecialOverworldEvo + .endm diff --git a/asm/macros/field_effect_script.inc b/asm/macros/field_effect_script.inc index 597b89acbb..38f7e31750 100644 --- a/asm/macros/field_effect_script.inc +++ b/asm/macros/field_effect_script.inc @@ -1,19 +1,21 @@ - .macro field_eff_loadtiles address +@ The first .byte argument of each macro below is an index into gFieldEffectScriptFuncs + + .macro field_eff_loadtiles address:req .byte 0 .4byte \address .endm - .macro field_eff_loadfadedpal address + .macro field_eff_loadfadedpal address:req .byte 1 .4byte \address .endm - .macro field_eff_loadpal address + .macro field_eff_loadpal address:req .byte 2 .4byte \address .endm - .macro field_eff_callnative address + .macro field_eff_callnative address:req .byte 3 .4byte \address .endm @@ -22,20 +24,20 @@ .byte 4 .endm - .macro field_eff_loadgfx_callnative tiles_address, palette_address, function_address + .macro field_eff_loadgfx_callnative tiles_address:req, palette_address:req, function_address:req .byte 5 .4byte \tiles_address .4byte \palette_address .4byte \function_address .endm - .macro field_eff_loadtiles_callnative tiles_address, function_address + .macro field_eff_loadtiles_callnative tiles_address:req, function_address:req .byte 6 .4byte \tiles_address .4byte \function_address .endm - .macro field_eff_loadfadedpal_callnative palette_address, function_address + .macro field_eff_loadfadedpal_callnative palette_address:req, function_address:req .byte 7 .4byte \palette_address .4byte \function_address diff --git a/asm/macros/function.inc b/asm/macros/function.inc index b109595dfd..0f4e6720c9 100644 --- a/asm/macros/function.inc +++ b/asm/macros/function.inc @@ -1,15 +1,15 @@ - .macro arm_func_start name + .macro arm_func_start name:req .align 2, 0 .global \name .arm .type \name, %function .endm - .macro arm_func_end name + .macro arm_func_end name:req .size \name, .-\name .endm - .macro thumb_func_start name + .macro thumb_func_start name:req .align 2, 0 .global \name .thumb @@ -17,13 +17,13 @@ .type \name, %function .endm - .macro non_word_aligned_thumb_func_start name + .macro non_word_aligned_thumb_func_start name:req .global \name .thumb .thumb_func .type \name, %function .endm - .macro thumb_func_end name + .macro thumb_func_end name:req .size \name, .-\name .endm diff --git a/asm/macros/m4a.inc b/asm/macros/m4a.inc index 6c5abc09b5..b22da3d634 100644 --- a/asm/macros/m4a.inc +++ b/asm/macros/m4a.inc @@ -1,13 +1,13 @@ - .macro song label, music_player, unknown + .macro song label:req, music_player:req, unknown:req .4byte \label .2byte \music_player .2byte \unknown .endm - .macro music_player info_struct, track_struct, unknown_1, unknown_2 + .macro music_player info_struct:req, track_struct:req, num_tracks:req, unknown:req .4byte \info_struct .4byte \track_struct - .byte \unknown_1 - .space 1 - .2byte \unknown_2 + .byte \num_tracks + .space 1 @ Padding + .2byte \unknown .endm diff --git a/asm/macros/map.inc b/asm/macros/map.inc index 74ed069179..662257e416 100644 --- a/asm/macros/map.inc +++ b/asm/macros/map.inc @@ -1,83 +1,110 @@ - .macro map map_id +@ Most of the macros in this file are for arranging map event data, and are output by mapjson using data from each map's JSON file. + + @ Takes a MAP constant and outputs the map group and map number as separate bytes + .macro map map_id:req .byte \map_id >> 8 @ map group .byte \map_id & 0xFF @ map num .endm - .macro map_script type, address + @ Defines a map script. 'type' is any MAP_SCRIPT_* constant (see include/constants/map_scripts.h) + .macro map_script type:req, script:req .byte \type - .4byte \address + .4byte \script .endm - .macro map_script_2 word1, word2, address - .2byte \word1 - .2byte \word2 - .4byte \address + @ Defines an entry in a map script table (for either ON_WARP_INTO_MAP_TABLE or ON_FRAME_TABLE) + .macro map_script_2 var:req, compare:req, script:req + .2byte \var + .2byte \compare + .4byte \script .endm - .macro object_event index:req, gfx:req, replacement: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, \gfx, \replacement, 0 - .2byte \x - .2byte \y - .byte \elevation, \movement_type, ((\y_radius << 4) | \x_radius), 0 - .2byte \trainer_type, \sight_radius_tree_etc + @ Defines an object event template for map data. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h + .macro object_event index:req, gfx:req, inConnection: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 + .byte \inConnection + .space 1 @ Padding + .2byte \x, \y + .byte \elevation + .byte \movement_type + .byte ((\y_radius << 4) | \x_radius) + .space 1 @ Padding + .2byte \trainer_type + .2byte \sight_radius_tree_etc .4byte \script .2byte \event_flag - .2byte 0 + .space 2 @ Padding inc _num_npcs .endm - .macro warp_def x, y, byte, warp, map_id + @ Defines a warp event for map data. Mirrors the struct layout of WarpEvent in include/global.fieldmap.h + .macro warp_def x:req, y:req, elevation:req, warpId:req, map_id:req .2byte \x, \y - .byte \byte, \warp + .byte \elevation + .byte \warpId .byte \map_id & 0xFF @ map num .byte \map_id >> 8 @ map group inc _num_warps .endm - .macro coord_event x, y, elevation, trigger, index, script + @ Defines a coord event for map data. Mirrors the struct layout of CoordEvent in include/global.fieldmap.h + .macro coord_event x:req, y:req, elevation:req, trigger:req, index:req, script:req .2byte \x, \y - .byte \elevation, 0 - .2byte \trigger, \index, 0 + .byte \elevation + .space 1 @ Padding + .2byte \trigger + .2byte \index + .space 2 @ Padding .4byte \script inc _num_traps .endm - .macro coord_weather_event x, y, elevation, weather - .2byte \x, \y - .byte \elevation, 0 - .2byte \weather - .2byte 0, 0 - .4byte 0 - inc _num_traps + @ Defines a weather coord event for map data. Any coord event is treated as a weather coord event if its script is NULL + .macro coord_weather_event x:req, y:req, elevation:req, weather:req + coord_event \x, \y, \elevation, \weather, 0, NULL .endm - .macro bg_event x, y, elevation, kind, arg6, arg7 + @ Defines a generic background event for map data. Mirrors the struct layout of BgEvent in include/global.fieldmap.h + @ 'kind' is any BG_EVENT_* constant (see include/constants/event_bg.h). + @ 'arg6' and 'arg7' are used differently depending on the bg event type. See macros below + .macro bg_event x:req, y:req, elevation:req, kind:req, arg6:req, arg7 .2byte \x, \y - .byte \elevation, \kind - .2byte 0 + .byte \elevation + .byte \kind + .space 2 @ Padding .if \kind != BG_EVENT_HIDDEN_ITEM - .4byte \arg6 + .4byte \arg6 .else - .2byte \arg6 - .2byte \arg7 + .2byte \arg6 + .2byte \arg7 .endif inc _num_signs .endm - .macro bg_hidden_item_event x, y, height, item, flag - bg_event \x, \y, \height, BG_EVENT_HIDDEN_ITEM, \item, ((\flag) - FLAG_HIDDEN_ITEMS_START) + @ Defines a background sign event for map data. 'facing_dir' is any of the BG_EVENT_PLAYER_FACING_* constants (see include/constants/event_bg.h) + .macro bg_sign_event x:req, y:req, elevation:req, facing_dir:req, script:req + bg_event \x, \y, \elevation, \facing_dir, \script .endm - .macro bg_secret_base_event x, y, height, secret_base_id - bg_event \x, \y, \height, BG_EVENT_SECRET_BASE, \secret_base_id + @ Defines a background hidden item event for map data + .macro bg_hidden_item_event x:req, y:req, elevation:req, item:req, flag:req + bg_event \x, \y, \elevation, BG_EVENT_HIDDEN_ITEM, \item, ((\flag) - FLAG_HIDDEN_ITEMS_START) .endm - .macro map_events npcs, warps, traps, signs + @ Defines a background secret base event for map data + .macro bg_secret_base_event x:req, y:req, elevation:req, secret_base_id:req + bg_event \x, \y, \elevation, BG_EVENT_SECRET_BASE, \secret_base_id + .endm + + @ Defines the table of event data for a map. Mirrors the struct layout of MapEvents in include/global.fieldmap.h + .macro map_events npcs:req, warps:req, traps:req, signs:req .byte _num_npcs, _num_warps, _num_traps, _num_signs .4byte \npcs, \warps, \traps, \signs reset_map_events .endm + @ Resets the event counters used to track how many events a map has. Run when the events table is created by map_events .macro reset_map_events .set _num_npcs, 0 .set _num_warps, 0 @@ -85,23 +112,29 @@ .set _num_signs, 0 .endm + @ Initialize the event counters for the first map reset_map_events - .equiv connection_down, 1 - .equiv connection_up, 2 - .equiv connection_left, 3 - .equiv connection_right, 4 - .equiv connection_dive, 5 - .equiv connection_emerge, 6 + @ Directions for connecting maps + @ The map.json files will only have e.g. "down" as direction data, and this will be appended to "connection_" by the connection macro + .equiv connection_down, CONNECTION_SOUTH + .equiv connection_up, CONNECTION_NORTH + .equiv connection_left, CONNECTION_WEST + .equiv connection_right, CONNECTION_EAST + .equiv connection_dive, CONNECTION_DIVE + .equiv connection_emerge, CONNECTION_EMERGE - .macro connection direction, offset, map - .4byte connection_\direction + @ Defines a map connection. Mirrors the struct layout of MapConnection in include/global.fieldmap.h + .macro connection direction:req, offset:req, map:req + .byte connection_\direction + .space 3 @ Padding .4byte \offset map \map - .space 2 + .space 2 @ Padding .endm + @ Defines the flags for a map header. Mirrors the layout of the bitfield in struct MapHeader in include/global.fieldmap.h .macro map_header_flags allow_cycling:req, allow_escaping:req, allow_running:req, show_map_name:req .byte ((\show_map_name & 1) << 3) | ((\allow_running & 1) << 2) | ((\allow_escaping & 1) << 1) | \allow_cycling .endm diff --git a/asm/macros/movement.inc b/asm/macros/movement.inc index e26a00d76c..a43dc07ac5 100644 --- a/asm/macros/movement.inc +++ b/asm/macros/movement.inc @@ -1,131 +1,166 @@ - .macro create_movement_action name - enum _\name + .macro create_movement_action name:req, value:req .macro \name - .byte _\name + .byte \value .endm .endm - enum_start - create_movement_action face_down - create_movement_action face_up - create_movement_action face_left - create_movement_action face_right - create_movement_action walk_slow_down - create_movement_action walk_slow_up - create_movement_action walk_slow_left - create_movement_action walk_slow_right - create_movement_action walk_down - create_movement_action walk_up - create_movement_action walk_left - create_movement_action walk_right - create_movement_action jump_2_down - create_movement_action jump_2_up - create_movement_action jump_2_left - create_movement_action jump_2_right - create_movement_action delay_1 - create_movement_action delay_2 - create_movement_action delay_4 - create_movement_action delay_8 - create_movement_action delay_16 - create_movement_action walk_fast_down - create_movement_action walk_fast_up - create_movement_action walk_fast_left - create_movement_action walk_fast_right - create_movement_action walk_in_place_slow_down - create_movement_action walk_in_place_slow_up - create_movement_action walk_in_place_slow_left - create_movement_action walk_in_place_slow_right - create_movement_action walk_in_place_down - create_movement_action walk_in_place_up - create_movement_action walk_in_place_left - create_movement_action walk_in_place_right - create_movement_action walk_in_place_fast_down - create_movement_action walk_in_place_fast_up - create_movement_action walk_in_place_fast_left - create_movement_action walk_in_place_fast_right - create_movement_action walk_in_place_fastest_down - create_movement_action walk_in_place_fastest_up - create_movement_action walk_in_place_fastest_left - create_movement_action walk_in_place_fastest_right - create_movement_action ride_water_current_down - create_movement_action ride_water_current_up - create_movement_action ride_water_current_left - create_movement_action ride_water_current_right - create_movement_action walk_fastest_down - create_movement_action walk_fastest_up - create_movement_action walk_fastest_left - create_movement_action walk_fastest_right - create_movement_action slide_down - create_movement_action slide_up - create_movement_action slide_left - create_movement_action slide_right - create_movement_action player_run_down - create_movement_action player_run_up - create_movement_action player_run_left - create_movement_action player_run_right - create_movement_action start_anim_in_direction - create_movement_action jump_special_down - create_movement_action jump_special_up - create_movement_action jump_special_left - create_movement_action jump_special_right - create_movement_action face_player - create_movement_action face_away_player - create_movement_action lock_facing_direction - create_movement_action unlock_facing_direction - create_movement_action jump_down - create_movement_action jump_up - create_movement_action jump_left - create_movement_action jump_right - create_movement_action jump_in_place_down - create_movement_action jump_in_place_up - create_movement_action jump_in_place_left - create_movement_action jump_in_place_right - create_movement_action jump_in_place_down_up - create_movement_action jump_in_place_up_down - create_movement_action jump_in_place_left_right - create_movement_action jump_in_place_right_left - create_movement_action face_original_direction - create_movement_action nurse_joy_bow - create_movement_action enable_jump_landing_ground_effect - create_movement_action disable_jump_landing_ground_effect - create_movement_action disable_anim - create_movement_action restore_anim - create_movement_action set_invisible - create_movement_action set_visible - create_movement_action emote_exclamation_mark - create_movement_action emote_question_mark - create_movement_action emote_heart - create_movement_action reveal_trainer - create_movement_action rock_smash_break - create_movement_action cut_tree - create_movement_action set_fixed_priority - create_movement_action clear_fixed_priority - create_movement_action init_affine_anim - create_movement_action clear_affine_anim - create_movement_action hide_reflection - create_movement_action show_reflection - create_movement_action walk_down_start_affine - create_movement_action walk_down_affine + create_movement_action face_down, MOVEMENT_ACTION_FACE_DOWN + create_movement_action face_up, MOVEMENT_ACTION_FACE_UP + create_movement_action face_left, MOVEMENT_ACTION_FACE_LEFT + create_movement_action face_right, MOVEMENT_ACTION_FACE_RIGHT + create_movement_action walk_slow_down, MOVEMENT_ACTION_WALK_SLOW_DOWN + create_movement_action walk_slow_up, MOVEMENT_ACTION_WALK_SLOW_UP + create_movement_action walk_slow_left, MOVEMENT_ACTION_WALK_SLOW_LEFT + create_movement_action walk_slow_right, MOVEMENT_ACTION_WALK_SLOW_RIGHT + create_movement_action walk_down, MOVEMENT_ACTION_WALK_NORMAL_DOWN + create_movement_action walk_up, MOVEMENT_ACTION_WALK_NORMAL_UP + create_movement_action walk_left, MOVEMENT_ACTION_WALK_NORMAL_LEFT + create_movement_action walk_right, MOVEMENT_ACTION_WALK_NORMAL_RIGHT + create_movement_action jump_2_down, MOVEMENT_ACTION_JUMP_2_DOWN + create_movement_action jump_2_up, MOVEMENT_ACTION_JUMP_2_UP + create_movement_action jump_2_left, MOVEMENT_ACTION_JUMP_2_LEFT + create_movement_action jump_2_right, MOVEMENT_ACTION_JUMP_2_RIGHT + create_movement_action delay_1, MOVEMENT_ACTION_DELAY_1 + create_movement_action delay_2, MOVEMENT_ACTION_DELAY_2 + create_movement_action delay_4, MOVEMENT_ACTION_DELAY_4 + create_movement_action delay_8, MOVEMENT_ACTION_DELAY_8 + create_movement_action delay_16, MOVEMENT_ACTION_DELAY_16 + create_movement_action walk_fast_down, MOVEMENT_ACTION_WALK_FAST_DOWN + create_movement_action walk_fast_up, MOVEMENT_ACTION_WALK_FAST_UP + create_movement_action walk_fast_left, MOVEMENT_ACTION_WALK_FAST_LEFT + create_movement_action walk_fast_right, MOVEMENT_ACTION_WALK_FAST_RIGHT + create_movement_action walk_in_place_slow_down, MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN + create_movement_action walk_in_place_slow_up, MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP + create_movement_action walk_in_place_slow_left, MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT + create_movement_action walk_in_place_slow_right, MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT + create_movement_action walk_in_place_down, MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN + create_movement_action walk_in_place_up, MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP + create_movement_action walk_in_place_left, MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT + create_movement_action walk_in_place_right, MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT + create_movement_action walk_in_place_fast_down, MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN + create_movement_action walk_in_place_fast_up, MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP + create_movement_action walk_in_place_fast_left, MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT + create_movement_action walk_in_place_fast_right, MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT + create_movement_action walk_in_place_faster_down, MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_DOWN + create_movement_action walk_in_place_faster_up, MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_UP + create_movement_action walk_in_place_faster_left, MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_LEFT + create_movement_action walk_in_place_faster_right, MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_RIGHT + create_movement_action ride_water_current_down, MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN + create_movement_action ride_water_current_up, MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP + create_movement_action ride_water_current_left, MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT + create_movement_action ride_water_current_right, MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT + create_movement_action walk_faster_down, MOVEMENT_ACTION_WALK_FASTER_DOWN + create_movement_action walk_faster_up, MOVEMENT_ACTION_WALK_FASTER_UP + create_movement_action walk_faster_left, MOVEMENT_ACTION_WALK_FASTER_LEFT + create_movement_action walk_faster_right, MOVEMENT_ACTION_WALK_FASTER_RIGHT + create_movement_action slide_down, MOVEMENT_ACTION_SLIDE_DOWN + create_movement_action slide_up, MOVEMENT_ACTION_SLIDE_UP + create_movement_action slide_left, MOVEMENT_ACTION_SLIDE_LEFT + create_movement_action slide_right, MOVEMENT_ACTION_SLIDE_RIGHT + create_movement_action player_run_down, MOVEMENT_ACTION_PLAYER_RUN_DOWN + create_movement_action player_run_up, MOVEMENT_ACTION_PLAYER_RUN_UP + create_movement_action player_run_left, MOVEMENT_ACTION_PLAYER_RUN_LEFT + create_movement_action player_run_right, MOVEMENT_ACTION_PLAYER_RUN_RIGHT + create_movement_action start_anim_in_direction, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION + create_movement_action jump_special_down, MOVEMENT_ACTION_JUMP_SPECIAL_DOWN + create_movement_action jump_special_up, MOVEMENT_ACTION_JUMP_SPECIAL_UP + create_movement_action jump_special_left, MOVEMENT_ACTION_JUMP_SPECIAL_LEFT + create_movement_action jump_special_right, MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT + create_movement_action face_player, MOVEMENT_ACTION_FACE_PLAYER + create_movement_action face_away_player, MOVEMENT_ACTION_FACE_AWAY_PLAYER + create_movement_action lock_facing_direction, MOVEMENT_ACTION_LOCK_FACING_DIRECTION + create_movement_action unlock_facing_direction, MOVEMENT_ACTION_UNLOCK_FACING_DIRECTION + create_movement_action jump_down, MOVEMENT_ACTION_JUMP_DOWN + create_movement_action jump_up, MOVEMENT_ACTION_JUMP_UP + create_movement_action jump_left, MOVEMENT_ACTION_JUMP_LEFT + create_movement_action jump_right, MOVEMENT_ACTION_JUMP_RIGHT + create_movement_action jump_in_place_down, MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN + create_movement_action jump_in_place_up, MOVEMENT_ACTION_JUMP_IN_PLACE_UP + create_movement_action jump_in_place_left, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT + create_movement_action jump_in_place_right, MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT + create_movement_action jump_in_place_down_up, MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN_UP + create_movement_action jump_in_place_up_down, MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN + create_movement_action jump_in_place_left_right, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT_RIGHT + create_movement_action jump_in_place_right_left, MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT_LEFT + create_movement_action face_original_direction, MOVEMENT_ACTION_FACE_ORIGINAL_DIRECTION + create_movement_action nurse_joy_bow, MOVEMENT_ACTION_NURSE_JOY_BOW_DOWN + create_movement_action enable_jump_landing_ground_effect, MOVEMENT_ACTION_ENABLE_JUMP_LANDING_GROUND_EFFECT + create_movement_action disable_jump_landing_ground_effect, MOVEMENT_ACTION_DISABLE_JUMP_LANDING_GROUND_EFFECT + create_movement_action disable_anim, MOVEMENT_ACTION_DISABLE_ANIMATION + create_movement_action restore_anim, MOVEMENT_ACTION_RESTORE_ANIMATION + create_movement_action set_invisible, MOVEMENT_ACTION_SET_INVISIBLE + create_movement_action set_visible, MOVEMENT_ACTION_SET_VISIBLE + create_movement_action emote_exclamation_mark, MOVEMENT_ACTION_EMOTE_EXCLAMATION_MARK + create_movement_action emote_question_mark, MOVEMENT_ACTION_EMOTE_QUESTION_MARK + create_movement_action emote_heart, MOVEMENT_ACTION_EMOTE_HEART + create_movement_action reveal_trainer, MOVEMENT_ACTION_REVEAL_TRAINER + create_movement_action rock_smash_break, MOVEMENT_ACTION_ROCK_SMASH_BREAK + create_movement_action cut_tree, MOVEMENT_ACTION_CUT_TREE + create_movement_action set_fixed_priority, MOVEMENT_ACTION_SET_FIXED_PRIORITY + create_movement_action clear_fixed_priority, MOVEMENT_ACTION_CLEAR_FIXED_PRIORITY + create_movement_action init_affine_anim, MOVEMENT_ACTION_INIT_AFFINE_ANIM + create_movement_action clear_affine_anim, MOVEMENT_ACTION_CLEAR_AFFINE_ANIM + create_movement_action hide_reflection, MOVEMENT_ACTION_HIDE_REFLECTION + create_movement_action show_reflection, MOVEMENT_ACTION_SHOW_REFLECTION + create_movement_action walk_down_start_affine, MOVEMENT_ACTION_WALK_DOWN_START_AFFINE + create_movement_action walk_down_affine, MOVEMENT_ACTION_WALK_DOWN_AFFINE + create_movement_action acro_wheelie_face_down, MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN + create_movement_action acro_wheelie_face_up, MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP + create_movement_action acro_wheelie_face_left, MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT + create_movement_action acro_wheelie_face_right, MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT + create_movement_action acro_pop_wheelie_down, MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN + create_movement_action acro_pop_wheelie_up, MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP + create_movement_action acro_pop_wheelie_left, MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT + create_movement_action acro_pop_wheelie_right, MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT + create_movement_action acro_end_wheelie_face_down, MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN + create_movement_action acro_end_wheelie_face_up, MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP + create_movement_action acro_end_wheelie_face_left, MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT + create_movement_action acro_end_wheelie_face_right, MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT + create_movement_action acro_wheelie_hop_face_down, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN + create_movement_action acro_wheelie_hop_face_up, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP + create_movement_action acro_wheelie_hop_face_left, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT + create_movement_action acro_wheelie_hop_face_right, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT + create_movement_action acro_wheelie_hop_down, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN + create_movement_action acro_wheelie_hop_up, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP + create_movement_action acro_wheelie_hop_left, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT + create_movement_action acro_wheelie_hop_right, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT + create_movement_action acro_wheelie_jump_down, MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN + create_movement_action acro_wheelie_jump_up, MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP + create_movement_action acro_wheelie_jump_left, MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT + create_movement_action acro_wheelie_jump_right, MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT + create_movement_action acro_wheelie_in_place_down, MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN + create_movement_action acro_wheelie_in_place_up, MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP + create_movement_action acro_wheelie_in_place_left, MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT + create_movement_action acro_wheelie_in_place_right, MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT + create_movement_action acro_pop_wheelie_move_down, MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN + create_movement_action acro_pop_wheelie_move_up, MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP + create_movement_action acro_pop_wheelie_move_left, MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT + create_movement_action acro_pop_wheelie_move_right, MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT + create_movement_action acro_wheelie_move_down, MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN + create_movement_action acro_wheelie_move_up, MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP + create_movement_action acro_wheelie_move_left, MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT + create_movement_action acro_wheelie_move_right, MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT + create_movement_action acro_end_wheelie_move_down, MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN + create_movement_action acro_end_wheelie_move_up, MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP + create_movement_action acro_end_wheelie_move_left, MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT + create_movement_action acro_end_wheelie_move_right, MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT + create_movement_action walk_diag_northwest, MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_UP_LEFT + create_movement_action walk_diag_northeast, MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_UP_RIGHT + create_movement_action walk_diag_southwest, MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_DOWN_LEFT + create_movement_action walk_diag_southeast, MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_DOWN_RIGHT + create_movement_action walk_slow_diag_northwest, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_LEFT + create_movement_action walk_slow_diag_northeast, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT + create_movement_action walk_slow_diag_southwest, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT + create_movement_action walk_slow_diag_southeast, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT + create_movement_action lock_anim, MOVEMENT_ACTION_LOCK_ANIM + create_movement_action unlock_anim, MOVEMENT_ACTION_UNLOCK_ANIM + create_movement_action walk_left_affine, MOVEMENT_ACTION_WALK_LEFT_AFFINE + create_movement_action walk_right_affine, MOVEMENT_ACTION_WALK_RIGHT_AFFINE + create_movement_action levitate, MOVEMENT_ACTION_LEVITATE + create_movement_action stop_levitate, MOVEMENT_ACTION_STOP_LEVITATE + create_movement_action destroy_extra_task, MOVEMENT_ACTION_STOP_LEVITATE_AT_TOP + create_movement_action figure_8, MOVEMENT_ACTION_FIGURE_8 + create_movement_action fly_up, MOVEMENT_ACTION_FLY_UP + create_movement_action fly_down, MOVEMENT_ACTION_FLY_DOWN - enum_start 0x8C - create_movement_action walk_diag_northwest - create_movement_action walk_diag_northeast - create_movement_action walk_diag_southwest - create_movement_action walk_diag_southeast - create_movement_action walk_slow_diag_northwest - create_movement_action walk_slow_diag_northeast - create_movement_action walk_slow_diag_southwest - create_movement_action walk_slow_diag_southeast - create_movement_action store_lock_anim - create_movement_action free_unlock_anim - create_movement_action walk_left_affine - create_movement_action walk_right_affine - create_movement_action levitate - create_movement_action stop_levitate - create_movement_action destroy_extra_task - create_movement_action figure_8 - create_movement_action fly_up - create_movement_action fly_down - - enum_start 0xfe - create_movement_action step_end + create_movement_action step_end, MOVEMENT_ACTION_STEP_END diff --git a/asm/macros/music_voice.inc b/asm/macros/music_voice.inc index 832c76511b..1460efe9e3 100644 --- a/asm/macros/music_voice.inc +++ b/asm/macros/music_voice.inc @@ -145,7 +145,7 @@ .byte 0xff, 0, 0xff, 0 .endm - .macro cry2 sample:req + .macro cry_reverse sample:req .byte 0x30, 60, 0, 0 .4byte \sample .byte 0xff, 0, 0xff, 0 @@ -157,7 +157,7 @@ .byte 0xff, 0, 0xff, 0 .endm - .macro cry2_uncomp sample @ not compressed + .macro cry_reverse_uncomp sample @ not compressed .byte 0x10, 60, 0, 0 .4byte \sample .byte 0xff, 0, 0xff, 0 diff --git a/asm/macros/pokemon_data.inc b/asm/macros/pokemon_data.inc deleted file mode 100644 index ce8ef98ac3..0000000000 --- a/asm/macros/pokemon_data.inc +++ /dev/null @@ -1,56 +0,0 @@ - .macro pokedex_entry height, width, text_pointer, pokemon_scale, pokemon_offset, trainer_scale, trainer_offset - .2byte \height @ in decimeters - .2byte \width @ in hectograms - .4byte \text_pointer - .2byte 0 @ unused - .2byte \pokemon_scale - .2byte \pokemon_offset - .2byte \trainer_scale - .2byte \trainer_offset - .2byte 0 @ padding - .endm - - .macro base_stats hp, attack, defense, speed, sp_attack, sp_defense - .byte \hp - .byte \attack - .byte \defense - .byte \speed - .byte \sp_attack - .byte \sp_defense - .endm - - .macro ev_yield hp, attack, defense, speed, sp_attack, sp_defense - .2byte (\sp_defense << 10) | (\sp_attack << 8) | (\speed << 6) | (\defense << 4) | (\attack << 2) | \hp - .endm - - .macro level_up_move level, move - .2byte (\level << 9) | \move - .endm - - .macro evo_entry method, parameter, target_species - .2byte \method - .2byte \parameter - .2byte \target_species - .2byte 0 @ padding - .endm - - .macro empty_evo_entries count - .fill 8 * \count, 1, 0 - .endm - - .macro egg_moves_begin species - .2byte 20000 + \species - .endm - -@ If the min level equals the max level, only one level argument is needed. - .macro wild_mon species, min_level, max_level - .byte \min_level - - .ifb \max_level - .byte \min_level - .else - .byte \max_level - .endif - - .2byte \species - .endm diff --git a/asm/macros/trainer_hill.inc b/asm/macros/trainer_hill.inc index 65c8c6befc..988e2867ae 100644 --- a/asm/macros/trainer_hill.inc +++ b/asm/macros/trainer_hill.inc @@ -100,9 +100,9 @@ special CallTrainerHillFunction .endm - @ Set the challenge mode to HILL_TAG_* (Normal, Variety, Unique, or Expert) - .macro trainerhill_settag tag:req - setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_TAG - copyvar VAR_0x8005, \tag + @ Set the challenge mode to HILL_MODE_* (Normal, Variety, Unique, or Expert) + .macro trainerhill_setmode mode:req + setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_MODE + copyvar VAR_0x8005, \mode special CallTrainerHillFunction .endm diff --git a/asm/macros/window.inc b/asm/macros/window.inc deleted file mode 100644 index a91782bbf8..0000000000 --- a/asm/macros/window.inc +++ /dev/null @@ -1,35 +0,0 @@ - .macro window_template bg_id, x, y, width, height, palette, vram_tile_offset - .byte \bg_id - .byte \x - .byte \y - .byte \width - .byte \height - .byte \palette - .2byte \vram_tile_offset - .endm - - .macro null_window_template - window_template 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000 - .endm - - .macro glyph_width_func font_id, func - .4byte \font_id - .4byte \func - .endm - - .macro keypad_icon tile_offset, width, height - .2byte \tile_offset - .byte \width - .byte \height - .endm - - .macro font_info func, max_glyph_width, glyph_height, glyph_spacing, line_spacing, text_color, shadow_color, bg_color - .4byte \func - .byte \max_glyph_width - .byte \glyph_height - .byte \glyph_spacing - .byte \line_spacing - .byte \text_color << 4 @ low nybble seems unused - .byte (\shadow_color << 4) | \bg_color - .2byte 0 @ padding - .endm diff --git a/berry_fix/Makefile b/berry_fix/Makefile deleted file mode 100644 index 464e5f9e9c..0000000000 --- a/berry_fix/Makefile +++ /dev/null @@ -1,203 +0,0 @@ -TOOLCHAIN := $(DEVKITARM) -COMPARE ?= 0 - -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on this system - -ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) -export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif -endif - -PREFIX := arm-none-eabi- -OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc - -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -# use arm-none-eabi-cpp for macOS -# as macOS's default compiler is clang -# and clang's preprocessor will warn on \u -# when preprocessing asm files, expecting a unicode literal -# we can't unconditionally use arm-none-eabi-cpp -# as installations which install binutils-arm-none-eabi -# don't come with it -ifneq ($(MODERN),1) - ifeq ($(shell uname -s),Darwin) - CPP := $(PREFIX)cpp - else - CPP := $(CC) -E - endif -else - CPP := $(PREFIX)cpp -endif - -GAME_CODE := AGBJ -MAKER_CODE := 01 -REVISION := 0 - -SHELL := /bin/bash -o pipefail - -CPPFLAGS := -I ../tools/agbcc/include -I ../tools/agbcc -iquote include -nostdinc -undef - -ROM := berry_fix.gba -OBJ_DIR := build -CC1 := ../tools/agbcc/bin/agbcc$(EXE) -override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm - - -ELF = $(ROM:.gba=.elf) -MAP = $(ROM:.gba=.map) - -C_SUBDIR = src -ASM_SUBDIR = asm -DATA_ASM_SUBDIR = data - -C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR) -ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR) -DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) - -ASFLAGS := -mcpu=arm7tdmi - -LDFLAGS = -Map ../$(MAP) - -SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c -GFX := ../tools/gbagfx/gbagfx$(EXE) -AIF := ../tools/aif2pcm/aif2pcm$(EXE) -MID := ../tools/mid2agb/mid2agb$(EXE) -SCANINC := ../tools/scaninc/scaninc$(EXE) -PREPROC := ../tools/preproc/preproc$(EXE) -RAMSCRGEN := ../tools/ramscrgen/ramscrgen$(EXE) -FIX := ../tools/gbafix/gbafix$(EXE) - -# Clear the default suffixes -.SUFFIXES: -# Don't delete intermediate files -.SECONDARY: -# Delete files that weren't built properly -.DELETE_ON_ERROR: - -# Secondary expansion is required for dependency variables in object rules. -.SECONDEXPANSION: - -.PHONY: all rom clean compare tidy payload - -C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) -C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) - -ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) -ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS)) - -DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s) -DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS)) - -SONG_SRCS := $(wildcard $(SONG_SUBDIR)/*.s) -SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS)) - -MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid) -MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) - -OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) -# OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) - -SUBDIRS := $(sort $(dir $(OBJS))) - -$(shell mkdir -p $(SUBDIRS)) - -all: payload rom - @: - -rom: $(ROM) -ifeq ($(COMPARE),1) - @$(SHA1) rom.sha1 -endif - -# For contributors to make sure a change didn't affect the contents of the ROM. -compare: ; @$(MAKE) COMPARE=1 - -clean: tidy - rm -f sound/direct_sound_samples/*.bin - rm -f $(SONG_OBJS) $(MID_OBJS) $(MID_SUBDIR)/*.s - find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + - make -C payload clean - -tidy: - rm -f $(ROM) $(ELF) $(MAP) - rm -r build/* - make -C payload tidy - -%.s: ; -%.png: ; -%.pal: ; -%.aif: ; - -%.1bpp: %.png ; $(GFX) $< $@ -%.4bpp: %.png ; $(GFX) $< $@ -%.8bpp: %.png ; $(GFX) $< $@ -%.gbapal: %.pal ; $(GFX) $< $@ -%.gbapal: %.png ; $(GFX) $< $@ -%.lz: % ; $(GFX) $< $@ -%.rl: % ; $(GFX) $< $@ - - -ifeq ($(NODEP),1) -$(C_BUILDDIR)/%.o: c_dep := -else -$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c) -endif - -$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep) - @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i - @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s - $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s - -ifeq ($(NODEP),1) -$(ASM_BUILDDIR)/%.o: asm_dep := -else -$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) $(ASM_SUBDIR)/$*.s) -endif - -$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep) - $(AS) $(ASFLAGS) -o $@ $< - -ifeq ($(NODEP),1) -$(DATA_ASM_BUILDDIR)/%.o: data_dep := -else -$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s) -endif - -payload: - @$(MAKE) -C payload COMPARE=$(COMPARE) TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) - -payload/payload.gba: payload - -data/payload.gba.lz: payload/payload.gba - $(GFX) $< $@ -search 1 - -$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep) - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ - -$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s - $(AS) $(ASFLAGS) -I sound -o $@ $< - -$(ELF): ld_script.txt $(OBJS) - cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../ld_script.txt -o ../$@ - -$(ROM): $(ELF) - $(OBJCOPY) -O binary $< $@ - $(FIX) $@ -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent - diff --git a/berry_fix/asm/berry_fix_header.inc b/berry_fix/asm/berry_fix_header.inc deleted file mode 100644 index 5167d2ff03..0000000000 --- a/berry_fix/asm/berry_fix_header.inc +++ /dev/null @@ -1,35 +0,0 @@ - .global BerryFixMBHeaderNintendoLogo -BerryFixMBHeaderNintendoLogo: - .space 156 - -BerryFixMBHeaderGameTitle: - .space 12 - - .global BerryFixMBHeaderGameCode -BerryFixMBHeaderGameCode: - .space 4 - -BerryFixMBHeaderMakerCode: - .space 2 - -BerryFixMBHeaderMagic: - .byte 0 - -BerryFixMBHeaderMainUnitCode: - .byte 0 - -BerryFixMBHeaderDeviceType: - .byte 0 - -BerryFixMBHeaderReserved1: - .space 7 - - .global BerryFixMBHeaderSoftwareVersion -BerryFixMBHeaderSoftwareVersion: - .byte 0 - -BerryFixMBHeaderChecksum: - .byte 0 - -BerryFixMBHeaderReserved2: - .space 2 diff --git a/berry_fix/asm/loader.s b/berry_fix/asm/loader.s deleted file mode 100644 index a780140785..0000000000 --- a/berry_fix/asm/loader.s +++ /dev/null @@ -1,119 +0,0 @@ - .include "../asm/macros/asm.inc" - .include "../asm/macros/function.inc" - .include "../constants/gba_constants.inc" - - .set SIO_ERROR, 0x0040 - .set SIO_MULTI_BUSY, 0x0080 - - .set EWRAM_ORIG, 0x02000000 - .set gCode, 0x02010000 - .set PROG_ORIG, 0x00008000 - - .syntax unified - - .text - - arm_func_start _start -_start: @ 0 - b _entry - arm_func_end _start - - .include "asm/berry_fix_header.inc" - -@ C0 - .word 0 - - .global _GPIOPortData -_GPIOPortData: @ C4 - .2byte 0 - - .global _GPIOPortDirection -_GPIOPortDirection: @ C6 - .2byte 0 - - .global _GPIOPortReadEnable -_GPIOPortReadEnable: @ C8 - .2byte 0 - -@ CA - .2byte 0 - -@ CC - .space 0x34 - - arm_func_start _entry -_entry: @ 100 - b _send - arm_func_end _entry - - .space 0x1C - - arm_func_start _recv -_recv: - @ Waits until link cable is no longer busy. - @ Returns nz if an error has occurred - @ Otherwise, returns the received short in r1. - @ Preserves r0 -_120: - ldrh r1, [r0, 0x8] @ SIOCNT - tst r1, SIO_MULTI_BUSY - beq _120 -_12c: - ldrh r1, [r0, 0x8] @ SIOCNT - tst r1, SIO_MULTI_BUSY - bne _12c - ldrh r1, [r0, 0x8] @ SIOCNT - tst r1, SIO_ERROR - bxne lr - ldrh r1, [r0] @ SIOMULTI0 - bx lr - arm_func_end _recv - - arm_func_start _send -_send: @ 14c - ldr r0, =REG_SIOMULTI0 -_150: - bl _recv - bne _150 - mov r2, #0 - strh r2, [r0, 0xa] @ SIOMLT_SEND - cmp r1, #0 - bne _150 - mov r2, 0x8000 -_16c: - mov r1, #0 -_170: - strh r1, [r0, 0xa] @ SIOMLT_SEND - bl _recv - bne _150 - cmp r1, r2 - bne _16c - lsr r2, #5 - cmp r1, #0 - bne _170 - ldr r3, =BerryFixMBHeaderGameCode - ldrh r2, [r3] - strh r2, [r0, 0xa] @ SIOMLT_SEND - bl _recv -_1a0: - bne _1a0 - cmp r1, r2 - bne _1a0 - ldrh r2, [r3, 0x2] - strh r2, [r0, 0xa] @ SIOMLT_SEND - bl _recv - bne _1a0 - cmp r1, r2 - bne _1a0 - mov r1, #0 - strh r1, [r0, 0xa] @ SIOMLT_SEND - ldr r0, =_data_2f0 - ldr r1, =gCode - swi 0x11 << 16 - ldr lr, =gCode - bx lr - .pool - arm_func_end _send - @ 1f0 - - .align 2, 0 @ don't pad with nop diff --git a/berry_fix/charmap.txt b/berry_fix/charmap.txt deleted file mode 100644 index 1c143ada4f..0000000000 --- a/berry_fix/charmap.txt +++ /dev/null @@ -1,1067 +0,0 @@ -' ' = 00 -'À' = 01 -'Á' = 02 -'Â' = 03 -'Ç' = 04 -'È' = 05 -'É' = 06 -'Ê' = 07 -'Ë' = 08 -'Ì' = 09 -'Î' = 0B -'Ï' = 0C -'Ò' = 0D -'Ó' = 0E -'Ô' = 0F -'Œ' = 10 -'Ù' = 11 -'Ú' = 12 -'Û' = 13 -'Ñ' = 14 -'ß' = 15 -'à' = 16 -'á' = 17 -'ç' = 19 -'è' = 1A -'é' = 1B -'ê' = 1C -'ë' = 1D -'ì' = 1E -'î' = 20 -'ï' = 21 -'ò' = 22 -'ó' = 23 -'ô' = 24 -'œ' = 25 -'ù' = 26 -'ú' = 27 -'û' = 28 -'ñ' = 29 -'º' = 2A -'ª' = 2B -SUPER_ER = 2C -'&' = 2D -'+' = 2E -LV = 34 -'=' = 35 -';' = 36 -'¿' = 51 -'¡' = 52 -PK = 53 -PKMN = 53 54 -POKEBLOCK = 55 56 57 58 59 -'Í' = 5A -'%' = 5B -'(' = 5C -')' = 5D -'â' = 68 -'í' = 6F -UNK_SPACER = 77 -UP_ARROW = 79 -DOWN_ARROW = 7A -LEFT_ARROW = 7B -RIGHT_ARROW = 7C -'0' = A1 -'1' = A2 -'2' = A3 -'3' = A4 -'4' = A5 -'5' = A6 -'6' = A7 -'7' = A8 -'8' = A9 -'9' = AA -'!' = AB -'?' = AC -'.' = AD -'-' = AE -'·' = AF -'…' = B0 -'“' = B1 -'”' = B2 -'‘' = B3 -'’' = B4 -'♂' = B5 -'♀' = B6 -'¥' = B7 -',' = B8 -'×' = B9 -'/' = BA -'A' = BB -'B' = BC -'C' = BD -'D' = BE -'E' = BF -'F' = C0 -'G' = C1 -'H' = C2 -'I' = C3 -'J' = C4 -'K' = C5 -'L' = C6 -'M' = C7 -'N' = C8 -'O' = C9 -'P' = CA -'Q' = CB -'R' = CC -'S' = CD -'T' = CE -'U' = CF -'V' = D0 -'W' = D1 -'X' = D2 -'Y' = D3 -'Z' = D4 -'a' = D5 -'b' = D6 -'c' = D7 -'d' = D8 -'e' = D9 -'f' = DA -'g' = DB -'h' = DC -'i' = DD -'j' = DE -'k' = DF -'l' = E0 -'m' = E1 -'n' = E2 -'o' = E3 -'p' = E4 -'q' = E5 -'r' = E6 -'s' = E7 -'t' = E8 -'u' = E9 -'v' = EA -'w' = EB -'x' = EC -'y' = ED -'z' = EE -'▶' = EF -':' = F0 -'Ä' = F1 -'Ö' = F2 -'Ü' = F3 -'ä' = F4 -'ö' = F5 -'ü' = F6 -TALL_PLUS = FC 0C FB -'$' = FF - -@ Hiragana -'あ' = 01 -'い' = 02 -'う' = 03 -'え' = 04 -'お' = 05 -'か' = 06 -'き' = 07 -'く' = 08 -'け' = 09 -'こ' = 0A -'さ' = 0B -'し' = 0C -'す' = 0D -'せ' = 0E -'そ' = 0F -'た' = 10 -'ち' = 11 -'つ' = 12 -'て' = 13 -'と' = 14 -'な' = 15 -'に' = 16 -'ぬ' = 17 -'ね' = 18 -'の' = 19 -'は' = 1A -'ひ' = 1B -'ふ' = 1C -'へ' = 1D -'ほ' = 1E -'ま' = 1F -'み' = 20 -'む' = 21 -'め' = 22 -'も' = 23 -'や' = 24 -'ゆ' = 25 -'よ' = 26 -'ら' = 27 -'り' = 28 -'る' = 29 -'れ' = 2A -'ろ' = 2B -'わ' = 2C -'を' = 2D -'ん' = 2E -'ぁ' = 2F -'ぃ' = 30 -'ぅ' = 31 -'ぇ' = 32 -'ぉ' = 33 -'ゃ' = 34 -'ゅ' = 35 -'ょ' = 36 -'が' = 37 -'ぎ' = 38 -'ぐ' = 39 -'げ' = 3A -'ご' = 3B -'ざ' = 3C -'じ' = 3D -'ず' = 3E -'ぜ' = 3F -'ぞ' = 40 -'だ' = 41 -'ぢ' = 42 -'づ' = 43 -'で' = 44 -'ど' = 45 -'ば' = 46 -'び' = 47 -'ぶ' = 48 -'べ' = 49 -'ぼ' = 4A -'ぱ' = 4B -'ぴ' = 4C -'ぷ' = 4D -'ぺ' = 4E -'ぽ' = 4F -'っ' = 50 - -@ Katakana -'ア' = 51 -'イ' = 52 -'ウ' = 53 -'エ' = 54 -'オ' = 55 -'カ' = 56 -'キ' = 57 -'ク' = 58 -'ケ' = 59 -'コ' = 5A -'サ' = 5B -'シ' = 5C -'ス' = 5D -'セ' = 5E -'ソ' = 5F -'タ' = 60 -'チ' = 61 -'ツ' = 62 -'テ' = 63 -'ト' = 64 -'ナ' = 65 -'ニ' = 66 -'ヌ' = 67 -'ネ' = 68 -'ノ' = 69 -'ハ' = 6A -'ヒ' = 6B -'フ' = 6C -'ヘ' = 6D -'ホ' = 6E -'マ' = 6F -'ミ' = 70 -'ム' = 71 -'メ' = 72 -'モ' = 73 -'ヤ' = 74 -'ユ' = 75 -'ヨ' = 76 -'ラ' = 77 -'リ' = 78 -'ル' = 79 -'レ' = 7A -'ロ' = 7B -'ワ' = 7C -'ヲ' = 7D -'ン' = 7E -'ァ' = 7F -'ィ' = 80 -'ゥ' = 81 -'ェ' = 82 -'ォ' = 83 -'ャ' = 84 -'ュ' = 85 -'ョ' = 86 -'ガ' = 87 -'ギ' = 88 -'グ' = 89 -'ゲ' = 8A -'ゴ' = 8B -'ザ' = 8C -'ジ' = 8D -'ズ' = 8E -'ゼ' = 8F -'ゾ' = 90 -'ダ' = 91 -'ヂ' = 92 -'ヅ' = 93 -'デ' = 94 -'ド' = 95 -'バ' = 96 -'ビ' = 97 -'ブ' = 98 -'ベ' = 99 -'ボ' = 9A -'パ' = 9B -'ピ' = 9C -'プ' = 9D -'ペ' = 9E -'ポ' = 9F -'ッ' = A0 - -@ Japanese punctuation -' ' = 00 -'!' = AB -'?' = AC -'。' = AD -'ー' = AE -'⋯' = B0 - -STRING = FD - -@ string placeholders -PLAYER = FD 01 -STR_VAR_1 = FD 02 -STR_VAR_2 = FD 03 -STR_VAR_3 = FD 04 -KUN = FD 05 -RIVAL = FD 06 -@ version-dependent strings (originally made for Ruby/Sapphire differences) -@ Emerald uses the Sapphire strings (except for VERSION). -VERSION = FD 07 @ "EMERALD" -AQUA = FD 08 -MAGMA = FD 09 -ARCHIE = FD 0A -MAXIE = FD 0B -KYOGRE = FD 0C -GROUDON = FD 0D - -@ battle string placeholders - -B_BUFF1 = FD 00 -B_BUFF2 = FD 01 -B_COPY_VAR_1 = FD 02 -B_COPY_VAR_2 = FD 03 -B_COPY_VAR_3 = FD 04 -B_PLAYER_MON1_NAME = FD 05 -B_OPPONENT_MON1_NAME = FD 06 -B_PLAYER_MON2_NAME = FD 07 -B_OPPONENT_MON2_NAME = FD 08 -B_LINK_PLAYER_MON1_NAME = FD 09 -B_LINK_OPPONENT_MON1_NAME = FD 0A -B_LINK_PLAYER_MON2_NAME = FD 0B -B_LINK_OPPONENT_MON2_NAME = FD 0C -B_ATK_NAME_WITH_PREFIX_MON1 = FD 0D -B_ATK_PARTNER_NAME = FD 0E -B_ATK_NAME_WITH_PREFIX = FD 0F -B_DEF_NAME_WITH_PREFIX = FD 10 -B_EFF_NAME_WITH_PREFIX = FD 11 @ EFF = short for gEffectBattler -B_ACTIVE_NAME_WITH_PREFIX = FD 12 -B_SCR_ACTIVE_NAME_WITH_PREFIX = FD 13 -B_CURRENT_MOVE = FD 14 -B_LAST_MOVE = FD 15 -B_LAST_ITEM = FD 16 -B_LAST_ABILITY = FD 17 -B_ATK_ABILITY = FD 18 -B_DEF_ABILITY = FD 19 -B_SCR_ACTIVE_ABILITY = FD 1A -B_EFF_ABILITY = FD 1B -B_TRAINER1_CLASS = FD 1C -B_TRAINER1_NAME = FD 1D -B_LINK_PLAYER_NAME = FD 1E -B_LINK_PARTNER_NAME = FD 1F -B_LINK_OPPONENT1_NAME = FD 20 -B_LINK_OPPONENT2_NAME = FD 21 -B_LINK_SCR_TRAINER_NAME = FD 22 -B_PLAYER_NAME = FD 23 -B_TRAINER1_LOSE_TEXT = FD 24 -B_TRAINER1_WIN_TEXT = FD 25 -B_26 = FD 26 -B_PC_CREATOR_NAME = FD 27 -B_ATK_PREFIX1 = FD 28 -B_DEF_PREFIX1 = FD 29 -B_ATK_PREFIX2 = FD 2A -B_DEF_PREFIX2 = FD 2B -B_ATK_PREFIX3 = FD 2C -B_DEF_PREFIX3 = FD 2D -B_TRAINER2_CLASS = FD 2E -B_TRAINER2_NAME = FD 2F -B_TRAINER2_LOSE_TEXT = FD 30 -B_TRAINER2_WIN_TEXT = FD 31 -B_PARTNER_CLASS = FD 32 -B_PARTNER_NAME = FD 33 -B_BUFF3 = FD 34 - -@ indicates the end of a town/city name (before " TOWN" or " CITY") -NAME_END = FC 00 - -@ special 0xF7 character -SPECIAL_F7 = F7 - -@ more text functions - -COLOR = FC 01 @ use a color listed below right after -HIGHLIGHT = FC 02 @ same as fc 01 -SHADOW = FC 03 @ same as fc 01 -COLOR_HIGHLIGHT_SHADOW = FC 04 @ takes 3 bytes -PALETTE = FC 05 @ used in credits -SIZE = FC 06 @ note that anything other than "SMALL" is invalid -UNKNOWN_7 = FC 07 -PAUSE = FC 08 @ manually print the wait byte after this, havent mapped them -PAUSE_UNTIL_PRESS = FC 09 -WAIT_SE = FC 0A -PLAY_BGM = FC 0B -ESCAPE = FC 0C -SHIFT_TEXT = FC 0D -UNKNOWN_E = FC 0E -UNKNOWN_F = FC 0F -PLAY_SE = FC 10 -CLEAR = FC 11 -SKIP = FC 12 -CLEAR_TO = FC 13 -UNKNOWN_14 = FC 14 -JPN = FC 15 -ENG = FC 16 -PAUSE_MUSIC = FC 17 -RESUME_MUSIC = FC 18 - -@ colors - -TRANSPARENT = 00 -WHITE = 01 -DARK_GRAY = 02 -LIGHT_GRAY = 03 -RED = 04 -LIGHT_RED = 05 -GREEN = 06 -LIGHT_GREEN = 07 -BLUE = 08 -LIGHT_BLUE = 09 -@ these next colors can be set to anything arbitrary at runtime -@ usually though they'll have the textbox border colors as described below -DYNAMIC_COLOR1 = 0A @ white -DYNAMIC_COLOR2 = 0B @ white with a tinge of green -DYNAMIC_COLOR3 = 0C @ white 2 -DYNAMIC_COLOR4 = 0D @ aquamarine -DYNAMIC_COLOR5 = 0E @ blue-green -DYNAMIC_COLOR6 = 0F @ cerulean - -@ sound and music - -MUS_DUMMY = 00 00 -SE_USE_ITEM = 01 00 -SE_PC_LOGIN = 02 00 -SE_PC_OFF = 03 00 -SE_PC_ON = 04 00 -SE_SELECT = 05 00 -SE_WIN_OPEN = 06 00 -SE_WALL_HIT = 07 00 -SE_DOOR = 08 00 -SE_EXIT = 09 00 -SE_LEDGE = 0A 00 -SE_BIKE_BELL = 0B 00 -SE_NOT_EFFECTIVE = 0C 00 -SE_EFFECTIVE = 0D 00 -SE_SUPER_EFFECTIVE = 0E 00 -SE_BALL_OPEN = 0F 00 -SE_FAINT = 10 00 -SE_FLEE = 11 00 -SE_SLIDING_DOOR = 12 00 -SE_SHIP = 13 00 -SE_BANG = 14 00 -SE_PIN = 15 00 -SE_BOO = 16 00 -SE_BALL = 17 00 -SE_CONTEST_PLACE = 18 00 -SE_A = 19 00 -SE_I = 1A 00 -SE_U = 1B 00 -SE_E = 1C 00 -SE_O = 1D 00 -SE_N = 1E 00 -SE_SUCCESS = 1F 00 -SE_FAILURE = 20 00 -SE_EXP = 21 00 -SE_BIKE_HOP = 22 00 -SE_SWITCH = 23 00 -SE_CLICK = 24 00 -SE_FU_ZAKU = 25 00 -SE_CONTEST_CONDITION_LOSE = 26 00 -SE_LAVARIDGE_FALL_WARP = 27 00 -SE_ICE_STAIRS = 28 00 -SE_ICE_BREAK = 29 00 -SE_ICE_CRACK = 2A 00 -SE_FALL = 2B 00 -SE_UNLOCK = 2C 00 -SE_WARP_IN = 2D 00 -SE_WARP_OUT = 2E 00 -SE_REPEL = 2F 00 -SE_ROTATING_GATE = 30 00 -SE_TRUCK_MOVE = 31 00 -SE_TRUCK_STOP = 32 00 -SE_TRUCK_UNLOAD = 33 00 -SE_TRUCK_DOOR = 34 00 -SE_BERRY_BLENDER = 35 00 -SE_CARD = 36 00 -SE_SAVE = 37 00 -SE_BALL_BOUNCE_1 = 38 00 -SE_BALL_BOUNCE_2 = 39 00 -SE_BALL_BOUNCE_3 = 3A 00 -SE_BALL_BOUNCE_4 = 3B 00 -SE_BALL_TRADE = 3C 00 -SE_BALL_THROW = 3D 00 -SE_NOTE_C = 3E 00 -SE_NOTE_D = 3F 00 -SE_NOTE_E = 40 00 -SE_NOTE_F = 41 00 -SE_NOTE_G = 42 00 -SE_NOTE_A = 43 00 -SE_NOTE_B = 44 00 -SE_NOTE_C_HIGH = 45 00 -SE_PUDDLE = 46 00 -SE_BRIDGE_WALK = 47 00 -SE_ITEMFINDER = 48 00 -SE_DING_DONG = 49 00 -SE_BALLOON_RED = 4A 00 -SE_BALLOON_BLUE = 4B 00 -SE_BALLOON_YELLOW = 4C 00 -SE_BREAKABLE_DOOR = 4D 00 -SE_MUD_BALL = 4E 00 -SE_FIELD_POISON = 4F 00 -SE_ESCALATOR = 50 00 -SE_THUNDERSTORM = 51 00 -SE_THUNDERSTORM_STOP = 52 00 -SE_DOWNPOUR = 53 00 -SE_DOWNPOUR_STOP = 54 00 -SE_RAIN = 55 00 -SE_RAIN_STOP = 56 00 -SE_THUNDER = 57 00 -SE_THUNDER2 = 58 00 -SE_ELEVATOR = 59 00 -SE_LOW_HEALTH = 5A 00 -SE_EXP_MAX = 5B 00 -SE_ROULETTE_BALL = 5C 00 -SE_ROULETTE_BALL2 = 5D 00 -SE_TAILLOW_WING_FLAP = 5E 00 -SE_SHOP = 5F 00 -SE_CONTEST_HEART = 60 00 -SE_CONTEST_CURTAIN_RISE = 61 00 -SE_CONTEST_CURTAIN_FALL = 62 00 -SE_CONTEST_ICON_CHANGE = 63 00 -SE_CONTEST_ICON_CLEAR = 64 00 -SE_CONTEST_MONS_TURN = 65 00 -SE_SHINY = 66 00 -SE_INTRO_BLAST = 67 00 -SE_MUGSHOT = 68 00 -SE_APPLAUSE = 69 00 -SE_VEND = 6A 00 -SE_ORB = 6B 00 -SE_DEX_SCROLL = 6C 00 -SE_DEX_PAGE = 6D 00 -SE_POKENAV_ON = 6E 00 -SE_POKENAV_OFF = 6F 00 -SE_DEX_SEARCH = 70 00 -SE_EGG_HATCH = 71 00 -SE_BALL_TRAY_ENTER = 72 00 -SE_BALL_TRAY_BALL = 73 00 -SE_BALL_TRAY_EXIT = 74 00 -SE_GLASS_FLUTE = 75 00 -SE_M_THUNDERBOLT = 76 00 -SE_M_THUNDERBOLT2 = 77 00 -SE_M_HARDEN = 78 00 -SE_M_NIGHTMARE = 79 00 -SE_M_VITAL_THROW = 7A 00 -SE_M_VITAL_THROW2 = 7B 00 -SE_M_BUBBLE = 7C 00 -SE_M_BUBBLE2 = 7D 00 -SE_M_BUBBLE3 = 7E 00 -SE_M_RAIN_DANCE = 7F 00 -SE_M_CUT = 80 00 -SE_M_STRING_SHOT = 81 00 -SE_M_STRING_SHOT2 = 82 00 -SE_M_ROCK_THROW = 83 00 -SE_M_GUST = 84 00 -SE_M_GUST2 = 85 00 -SE_M_DOUBLE_SLAP = 86 00 -SE_M_DOUBLE_TEAM = 87 00 -SE_M_RAZOR_WIND = 88 00 -SE_M_ICY_WIND = 89 00 -SE_M_THUNDER_WAVE = 8A 00 -SE_M_COMET_PUNCH = 8B 00 -SE_M_MEGA_KICK = 8C 00 -SE_M_MEGA_KICK2 = 8D 00 -SE_M_CRABHAMMER = 8E 00 -SE_M_JUMP_KICK = 8F 00 -SE_M_FLAME_WHEEL = 90 00 -SE_M_FLAME_WHEEL2 = 91 00 -SE_M_FLAMETHROWER = 92 00 -SE_M_FIRE_PUNCH = 93 00 -SE_M_TOXIC = 94 00 -SE_M_SACRED_FIRE = 95 00 -SE_M_SACRED_FIRE2 = 96 00 -SE_M_EMBER = 97 00 -SE_M_TAKE_DOWN = 98 00 -SE_M_BLIZZARD = 99 00 -SE_M_BLIZZARD2 = 9A 00 -SE_M_SCRATCH = 9B 00 -SE_M_VICEGRIP = 9C 00 -SE_M_WING_ATTACK = 9D 00 -SE_M_FLY = 9E 00 -SE_M_SAND_ATTACK = 9F 00 -SE_M_RAZOR_WIND2 = A0 00 -SE_M_BITE = A1 00 -SE_M_HEADBUTT = A2 00 -SE_M_SURF = A3 00 -SE_M_HYDRO_PUMP = A4 00 -SE_M_WHIRLPOOL = A5 00 -SE_M_HORN_ATTACK = A6 00 -SE_M_TAIL_WHIP = A7 00 -SE_M_MIST = A8 00 -SE_M_POISON_POWDER = A9 00 -SE_M_BIND = AA 00 -SE_M_DRAGON_RAGE = AB 00 -SE_M_SING = AC 00 -SE_M_PERISH_SONG = AD 00 -SE_M_PAY_DAY = AE 00 -SE_M_DIG = AF 00 -SE_M_DIZZY_PUNCH = B0 00 -SE_M_SELF_DESTRUCT = B1 00 -SE_M_EXPLOSION = B2 00 -SE_M_ABSORB_2 = B3 00 -SE_M_ABSORB = B4 00 -SE_M_SCREECH = B5 00 -SE_M_BUBBLE_BEAM = B6 00 -SE_M_BUBBLE_BEAM2 = B7 00 -SE_M_SUPERSONIC = B8 00 -SE_M_BELLY_DRUM = B9 00 -SE_M_METRONOME = BA 00 -SE_M_BONEMERANG = BB 00 -SE_M_LICK = BC 00 -SE_M_PSYBEAM = BD 00 -SE_M_FAINT_ATTACK = BE 00 -SE_M_SWORDS_DANCE = BF 00 -SE_M_LEER = C0 00 -SE_M_SWAGGER = C1 00 -SE_M_SWAGGER2 = C2 00 -SE_M_HEAL_BELL = C3 00 -SE_M_CONFUSE_RAY = C4 00 -SE_M_SNORE = C5 00 -SE_M_BRICK_BREAK = C6 00 -SE_M_GIGA_DRAIN = C7 00 -SE_M_PSYBEAM2 = C8 00 -SE_M_SOLAR_BEAM = C9 00 -SE_M_PETAL_DANCE = CA 00 -SE_M_TELEPORT = CB 00 -SE_M_MINIMIZE = CC 00 -SE_M_SKETCH = CD 00 -SE_M_SWIFT = CE 00 -SE_M_REFLECT = CF 00 -SE_M_BARRIER = D0 00 -SE_M_DETECT = D1 00 -SE_M_LOCK_ON = D2 00 -SE_M_MOONLIGHT = D3 00 -SE_M_CHARM = D4 00 -SE_M_CHARGE = D5 00 -SE_M_STRENGTH = D6 00 -SE_M_HYPER_BEAM = D7 00 -SE_M_WATERFALL = D8 00 -SE_M_REVERSAL = D9 00 -SE_M_ACID_ARMOR = DA 00 -SE_M_SANDSTORM = DB 00 -SE_M_TRI_ATTACK = DC 00 -SE_M_TRI_ATTACK2 = DD 00 -SE_M_ENCORE = DE 00 -SE_M_ENCORE2 = DF 00 -SE_M_BATON_PASS = E0 00 -SE_M_MILK_DRINK = E1 00 -SE_M_ATTRACT = E2 00 -SE_M_ATTRACT2 = E3 00 -SE_M_MORNING_SUN = E4 00 -SE_M_FLATTER = E5 00 -SE_M_SAND_TOMB = E6 00 -SE_M_GRASSWHISTLE = E7 00 -SE_M_SPIT_UP = E8 00 -SE_M_DIVE = E9 00 -SE_M_EARTHQUAKE = EA 00 -SE_M_TWISTER = EB 00 -SE_M_SWEET_SCENT = EC 00 -SE_M_YAWN = ED 00 -SE_M_SKY_UPPERCUT = EE 00 -SE_M_STAT_INCREASE = EF 00 -SE_M_HEAT_WAVE = F0 00 -SE_M_UPROAR = F1 00 -SE_M_HAIL = F2 00 -SE_M_COSMIC_POWER = F3 00 -SE_M_TEETER_DANCE = F4 00 -SE_M_STAT_DECREASE = F5 00 -SE_M_HAZE = F6 00 -SE_M_HYPER_BEAM2 = F7 00 -SE_RG_DOOR = F8 00 -SE_RG_CARD_FLIP = F9 00 -SE_RG_CARD_FLIPPING = FA 00 -SE_RG_CARD_OPEN = FB 00 -SE_RG_BAG_CURSOR = FC 00 -SE_RG_BAG_POCKET = FD 00 -SE_RG_BALL_CLICK = FE 00 -SE_RG_SHOP = FF 00 -SE_RG_SS_ANNE_HORN = 00 01 -SE_RG_HELP_OPEN = 01 01 -SE_RG_HELP_CLOSE = 02 01 -SE_RG_HELP_ERROR = 03 01 -SE_RG_DEOXYS_MOVE = 04 01 -SE_RG_POKE_JUMP_SUCCESS = 05 01 -SE_RG_POKE_JUMP_FAILURE = 06 01 -SE_POKENAV_CALL = 07 01 -SE_POKENAV_HANG_UP = 08 01 -SE_ARENA_TIMEUP1 = 09 01 -SE_ARENA_TIMEUP2 = 0A 01 -SE_PIKE_CURTAIN_CLOSE = 0B 01 -SE_PIKE_CURTAIN_OPEN = 0C 01 -SE_SUDOWOODO_SHAKE = 0D 01 -MUS_LITTLEROOT_TEST = 5E 01 -MUS_GSC_ROUTE38 = 5F 01 -MUS_CAUGHT = 60 01 -MUS_VICTORY_WILD = 61 01 -MUS_VICTORY_GYM_LEADER = 62 01 -MUS_VICTORY_LEAGUE = 63 01 -MUS_C_COMM_CENTER = 64 01 -MUS_GSC_PEWTER = 65 01 -MUS_C_VS_LEGEND_BEAST = 66 01 -MUS_ROUTE101 = 67 01 -MUS_ROUTE110 = 68 01 -MUS_ROUTE120 = 69 01 -MUS_PETALBURG = 6A 01 -MUS_OLDALE = 6B 01 -MUS_GYM = 6C 01 -MUS_SURF = 6D 01 -MUS_PETALBURG_WOODS = 6E 01 -MUS_LEVEL_UP = 6F 01 -MUS_HEAL = 70 01 -MUS_OBTAIN_BADGE = 71 01 -MUS_OBTAIN_ITEM = 72 01 -MUS_EVOLVED = 73 01 -MUS_OBTAIN_TMHM = 74 01 -MUS_LILYCOVE_MUSEUM = 75 01 -MUS_ROUTE122 = 76 01 -MUS_OCEANIC_MUSEUM = 77 01 -MUS_EVOLUTION_INTRO = 78 01 -MUS_EVOLUTION = 79 01 -MUS_MOVE_DELETED = 7A 01 -MUS_ENCOUNTER_GIRL = 7B 01 -MUS_ENCOUNTER_MALE = 7C 01 -MUS_ABANDONED_SHIP = 7D 01 -MUS_FORTREE = 7E 01 -MUS_BIRCH_LAB = 7F 01 -MUS_B_TOWER_RS = 80 01 -MUS_ENCOUNTER_SWIMMER = 81 01 -MUS_CAVE_OF_ORIGIN = 82 01 -MUS_OBTAIN_BERRY = 83 01 -MUS_AWAKEN_LEGEND = 84 01 -MUS_SLOTS_JACKPOT = 85 01 -MUS_SLOTS_WIN = 86 01 -MUS_TOO_BAD = 87 01 -MUS_ROULETTE = 88 01 -MUS_LINK_CONTEST_P1 = 89 01 -MUS_LINK_CONTEST_P2 = 8A 01 -MUS_LINK_CONTEST_P3 = 8B 01 -MUS_LINK_CONTEST_P4 = 8C 01 -MUS_ENCOUNTER_RICH = 8D 01 -MUS_VERDANTURF = 8E 01 -MUS_RUSTBORO = 8F 01 -MUS_POKE_CENTER = 90 01 -MUS_ROUTE104 = 91 01 -MUS_ROUTE119 = 92 01 -MUS_CYCLING = 93 01 -MUS_POKE_MART = 94 01 -MUS_LITTLEROOT = 95 01 -MUS_MT_CHIMNEY = 96 01 -MUS_ENCOUNTER_FEMALE = 97 01 -MUS_LILYCOVE = 98 01 -MUS_ROUTE111 = 99 01 -MUS_HELP = 9A 01 -MUS_UNDERWATER = 9B 01 -MUS_VICTORY_TRAINER = 9C 01 -MUS_TITLE = 9D 01 -MUS_INTRO = 9E 01 -MUS_ENCOUNTER_MAY = 9F 01 -MUS_ENCOUNTER_INTENSE = A0 01 -MUS_ENCOUNTER_COOL = A1 01 -MUS_ROUTE113 = A2 01 -MUS_ENCOUNTER_AQUA = A3 01 -MUS_FOLLOW_ME = A4 01 -MUS_ENCOUNTER_BRENDAN = A5 01 -MUS_EVER_GRANDE = A6 01 -MUS_ENCOUNTER_SUSPICIOUS = A7 01 -MUS_VICTORY_AQUA_MAGMA = A8 01 -MUS_CABLE_CAR = A9 01 -MUS_GAME_CORNER = AA 01 -MUS_DEWFORD = AB 01 -MUS_SAFARI_ZONE = AC 01 -MUS_VICTORY_ROAD = AD 01 -MUS_AQUA_MAGMA_HIDEOUT = AE 01 -MUS_SAILING = AF 01 -MUS_MT_PYRE = B0 01 -MUS_SLATEPORT = B1 01 -MUS_MT_PYRE_EXTERIOR = B2 01 -MUS_SCHOOL = B3 01 -MUS_HALL_OF_FAME = B4 01 -MUS_FALLARBOR = B5 01 -MUS_SEALED_CHAMBER = B6 01 -MUS_CONTEST_WINNER = B7 01 -MUS_CONTEST = B8 01 -MUS_ENCOUNTER_MAGMA = B9 01 -MUS_INTRO_BATTLE = BA 01 -MUS_ABNORMAL_WEATHER = BB 01 -MUS_WEATHER_GROUDON = BC 01 -MUS_SOOTOPOLIS = BD 01 -MUS_CONTEST_RESULTS = BE 01 -MUS_HALL_OF_FAME_ROOM = BF 01 -MUS_TRICK_HOUSE = C0 01 -MUS_ENCOUNTER_TWINS = C1 01 -MUS_ENCOUNTER_ELITE_FOUR = C2 01 -MUS_ENCOUNTER_HIKER = C3 01 -MUS_CONTEST_LOBBY = C4 01 -MUS_ENCOUNTER_INTERVIEWER = C5 01 -MUS_ENCOUNTER_CHAMPION = C6 01 -MUS_CREDITS = C7 01 -MUS_END = C8 01 -MUS_B_FRONTIER = C9 01 -MUS_B_ARENA = CA 01 -MUS_OBTAIN_B_POINTS = CB 01 -MUS_REGISTER_MATCH_CALL = CC 01 -MUS_B_PYRAMID = CD 01 -MUS_B_PYRAMID_TOP = CE 01 -MUS_B_PALACE = CF 01 -MUS_RAYQUAZA_APPEARS = D0 01 -MUS_B_TOWER = D1 01 -MUS_OBTAIN_SYMBOL = D2 01 -MUS_B_DOME = D3 01 -MUS_B_PIKE = D4 01 -MUS_B_FACTORY = D5 01 -MUS_VS_RAYQUAZA = D6 01 -MUS_VS_FRONTIER_BRAIN = D7 01 -MUS_VS_MEW = D8 01 -MUS_B_DOME_LOBBY = D9 01 -MUS_VS_WILD = DA 01 -MUS_VS_AQUA_MAGMA = DB 01 -MUS_VS_TRAINER = DC 01 -MUS_VS_GYM_LEADER = DD 01 -MUS_VS_CHAMPION = DE 01 -MUS_VS_REGI = DF 01 -MUS_VS_KYOGRE_GROUDON = E0 01 -MUS_VS_RIVAL = E1 01 -MUS_VS_ELITE_FOUR = E2 01 -MUS_VS_AQUA_MAGMA_LEADER = E3 01 -MUS_RG_FOLLOW_ME = E4 01 -MUS_RG_GAME_CORNER = E5 01 -MUS_RG_ROCKET_HIDEOUT = E6 01 -MUS_RG_GYM = E7 01 -MUS_RG_JIGGLYPUFF = E8 01 -MUS_RG_INTRO_FIGHT = E9 01 -MUS_RG_TITLE = EA 01 -MUS_RG_CINNABAR = EB 01 -MUS_RG_LAVENDER = EC 01 -MUS_RG_HEAL = ED 01 -MUS_RG_CYCLING = EE 01 -MUS_RG_ENCOUNTER_ROCKET = EF 01 -MUS_RG_ENCOUNTER_GIRL = F0 01 -MUS_RG_ENCOUNTER_BOY = F1 01 -MUS_RG_HALL_OF_FAME = F2 01 -MUS_RG_VIRIDIAN_FOREST = F3 01 -MUS_RG_MT_MOON = F4 01 -MUS_RG_POKE_MANSION = F5 01 -MUS_RG_CREDITS = F6 01 -MUS_RG_ROUTE1 = F7 01 -MUS_RG_ROUTE24 = F8 01 -MUS_RG_ROUTE3 = F9 01 -MUS_RG_ROUTE11 = FA 01 -MUS_RG_VICTORY_ROAD = FB 01 -MUS_RG_VS_GYM_LEADER = FC 01 -MUS_RG_VS_TRAINER = FD 01 -MUS_RG_VS_WILD = FE 01 -MUS_RG_VS_CHAMPION = FF 01 -MUS_RG_PALLET = 00 02 -MUS_RG_OAK_LAB = 01 02 -MUS_RG_OAK = 02 02 -MUS_RG_POKE_CENTER = 03 02 -MUS_RG_SS_ANNE = 04 02 -MUS_RG_SURF = 05 02 -MUS_RG_POKE_TOWER = 06 02 -MUS_RG_SILPH = 07 02 -MUS_RG_FUCHSIA = 08 02 -MUS_RG_CELADON = 09 02 -MUS_RG_VICTORY_TRAINER = 0A 02 -MUS_RG_VICTORY_WILD = 0B 02 -MUS_RG_VICTORY_GYM_LEADER = 0C 02 -MUS_RG_VERMILLION = 0D 02 -MUS_RG_PEWTER = 0E 02 -MUS_RG_ENCOUNTER_RIVAL = 0F 02 -MUS_RG_RIVAL_EXIT = 10 02 -MUS_RG_DEX_RATING = 11 02 -MUS_RG_OBTAIN_KEY_ITEM = 12 02 -MUS_RG_CAUGHT_INTRO = 13 02 -MUS_RG_PHOTO = 14 02 -MUS_RG_GAME_FREAK = 15 02 -MUS_RG_CAUGHT = 16 02 -MUS_RG_NEW_GAME_INSTRUCT = 17 02 -MUS_RG_NEW_GAME_INTRO = 18 02 -MUS_RG_NEW_GAME_EXIT = 19 02 -MUS_RG_POKE_JUMP = 1A 02 -MUS_RG_UNION_ROOM = 1B 02 -MUS_RG_NET_CENTER = 1C 02 -MUS_RG_MYSTERY_GIFT = 1D 02 -MUS_RG_BERRY_PICK = 1E 02 -MUS_RG_SEVII_CAVE = 1F 02 -MUS_RG_TEACHY_TV_SHOW = 20 02 -MUS_RG_SEVII_ROUTE = 21 02 -MUS_RG_SEVII_DUNGEON = 22 02 -MUS_RG_SEVII_123 = 23 02 -MUS_RG_SEVII_45 = 24 02 -MUS_RG_SEVII_67 = 25 02 -MUS_RG_POKE_FLUTE = 26 02 -MUS_RG_VS_DEOXYS = 27 02 -MUS_RG_VS_MEWTWO = 28 02 -MUS_RG_VS_LEGEND = 29 02 -MUS_RG_ENCOUNTER_GYM_LEADER = 2A 02 -MUS_RG_ENCOUNTER_DEOXYS = 2B 02 -MUS_RG_TRAINER_TOWER = 2C 02 -MUS_RG_SLOW_PALLET = 2D 02 -MUS_RG_TEACHY_TV_MENU = 2E 02 -PH_TRAP_BLEND = 2F 02 -PH_TRAP_HELD = 30 02 -PH_TRAP_SOLO = 31 02 -PH_FACE_BLEND = 32 02 -PH_FACE_HELD = 33 02 -PH_FACE_SOLO = 34 02 -PH_CLOTH_BLEND = 35 02 -PH_CLOTH_HELD = 36 02 -PH_CLOTH_SOLO = 37 02 -PH_DRESS_BLEND = 38 02 -PH_DRESS_HELD = 39 02 -PH_DRESS_SOLO = 3A 02 -PH_FLEECE_BLEND = 3B 02 -PH_FLEECE_HELD = 3C 02 -PH_FLEECE_SOLO = 3D 02 -PH_KIT_BLEND = 3E 02 -PH_KIT_HELD = 3F 02 -PH_KIT_SOLO = 40 02 -PH_PRICE_BLEND = 41 02 -PH_PRICE_HELD = 42 02 -PH_PRICE_SOLO = 43 02 -PH_LOT_BLEND = 44 02 -PH_LOT_HELD = 45 02 -PH_LOT_SOLO = 46 02 -PH_GOAT_BLEND = 47 02 -PH_GOAT_HELD = 48 02 -PH_GOAT_SOLO = 49 02 -PH_THOUGHT_BLEND = 4A 02 -PH_THOUGHT_HELD = 4B 02 -PH_THOUGHT_SOLO = 4C 02 -PH_CHOICE_BLEND = 4D 02 -PH_CHOICE_HELD = 4E 02 -PH_CHOICE_SOLO = 4F 02 -PH_MOUTH_BLEND = 50 02 -PH_MOUTH_HELD = 51 02 -PH_MOUTH_SOLO = 52 02 -PH_FOOT_BLEND = 53 02 -PH_FOOT_HELD = 54 02 -PH_FOOT_SOLO = 55 02 -PH_GOOSE_BLEND = 56 02 -PH_GOOSE_HELD = 57 02 -PH_GOOSE_SOLO = 58 02 -PH_STRUT_BLEND = 59 02 -PH_STRUT_HELD = 5A 02 -PH_STRUT_SOLO = 5B 02 -PH_CURE_BLEND = 5C 02 -PH_CURE_HELD = 5D 02 -PH_CURE_SOLO = 5E 02 -PH_NURSE_BLEND = 5F 02 -PH_NURSE_HELD = 60 02 -PH_NURSE_SOLO = 61 02 - -A_BUTTON = F8 00 -B_BUTTON = F8 01 -DPAD_UPDOWN = F8 0A -DPAD_NONE = F8 0C - -UP_ARROW_2 = F9 00 -DOWN_ARROW_2 = F9 01 -LEFT_ARROW_2 = F9 02 -RIGHT_ARROW_2 = F9 03 -PLUS = F9 04 -LV_2 = F9 05 -PP = F9 06 -ID = F9 07 -NO = F9 08 -UNDERSCORE = F9 09 -CIRCLE_1 = F9 0A -CIRCLE_2 = F9 0B -CIRCLE_3 = F9 0C -CIRCLE_4 = F9 0D -CIRCLE_5 = F9 0E -CIRCLE_6 = F9 0F -CIRCLE_7 = F9 10 -CIRCLE_8 = F9 11 -CIRCLE_9 = F9 12 -ROUND_LEFT_PAREN = F9 13 -ROUND_RIGHT_PAREN = F9 14 -CIRCLE_DOT = F9 15 -TRIANGLE = F9 16 -BIG_MULT_X = F9 17 - -EMOJI_UNDERSCORE = F9 D0 -EMOJI_PIPE = F9 D1 -EMOJI_HIGHBAR = F9 D2 -EMOJI_TILDE = F9 D3 -EMOJI_LEFT_PAREN = F9 D4 -EMOJI_RIGHT_PAREN = F9 D5 -EMOJI_UNION = F9 D6 @ ⊂ -EMOJI_GREATER_THAN = F9 D7 -EMOJI_LEFT_EYE = F9 D8 -EMOJI_RIGHT_EYE = F9 D9 -EMOJI_AT = F9 DA -EMOJI_SEMICOLON = F9 DB -EMOJI_PLUS = F9 DC -EMOJI_MINUS = F9 DD -EMOJI_EQUALS = F9 DE -EMOJI_SPIRAL = F9 DF -EMOJI_TONGUE = F9 E0 -EMOJI_TRIANGLE_OUTLINE = F9 E1 -EMOJI_ACUTE = F9 E2 -EMOJI_GRAVE = F9 E3 -EMOJI_CIRCLE = F9 E4 -EMOJI_TRIANGLE = F9 E5 -EMOJI_SQUARE = F9 E6 -EMOJI_HEART = F9 E7 -EMOJI_MOON = F9 E8 -EMOJI_NOTE = F9 E9 -EMOJI_BALL = F9 EA -EMOJI_BOLT = F9 EB -EMOJI_LEAF = F9 EC -EMOJI_FIRE = F9 ED -EMOJI_WATER = F9 EE -EMOJI_LEFT_FIST = F9 EF -EMOJI_RIGHT_FIST = F9 F0 -EMOJI_BIGWHEEL = F9 F1 -EMOJI_SMALLWHEEL = F9 F2 -EMOJI_SPHERE = F9 F3 -EMOJI_IRRITATED = F9 F4 -EMOJI_MISCHIEVOUS = F9 F5 -EMOJI_HAPPY = F9 F6 -EMOJI_ANGRY = F9 F7 -EMOJI_SURPRISED = F9 F8 -EMOJI_BIGSMILE = F9 F9 -EMOJI_EVIL = F9 FA -EMOJI_TIRED = F9 FB -EMOJI_NEUTRAL = F9 FC -EMOJI_SHOCKED = F9 FD -EMOJI_BIGANGER = F9 FE - -'\l' = FA @ scroll up window text -'\p' = FB @ new paragraph -'\n' = FE @ new line diff --git a/berry_fix/data/data.s b/berry_fix/data/data.s deleted file mode 100644 index dbb86b13ba..0000000000 --- a/berry_fix/data/data.s +++ /dev/null @@ -1,4 +0,0 @@ - .section .rodata - -_data_2f0:: - .incbin "data/payload.gba.lz" diff --git a/berry_fix/ld_script.sed b/berry_fix/ld_script.sed deleted file mode 100644 index b91542b6f8..0000000000 --- a/berry_fix/ld_script.sed +++ /dev/null @@ -1,14 +0,0 @@ -// { - r sym_ewram.ld - d -} - -// { - r sym_bss.ld - d -} - -// { - r sym_common.ld - d -} diff --git a/berry_fix/ld_script.txt b/berry_fix/ld_script.txt deleted file mode 100644 index 2edeaef7cb..0000000000 --- a/berry_fix/ld_script.txt +++ /dev/null @@ -1,31 +0,0 @@ -ENTRY(_start) - -SECTIONS { - . = 0x2000000; - - .text : - ALIGN(4) - { - asm/loader.o(.text); - } =0 - - . += 0x100; - .rodata : - ALIGN(4) - { - data/data.o(.rodata); - } =0 - - . = 0x2010000; - - ewram (NOLOAD) : - ALIGN(4) - { - gCode = .; - } - - /DISCARD/ : - { - *(*); - } -} diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile deleted file mode 100644 index 2779c43ba8..0000000000 --- a/berry_fix/payload/Makefile +++ /dev/null @@ -1,209 +0,0 @@ -TOOLCHAIN := $(DEVKITARM) -COMPARE ?= 0 - -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on this system - -ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) -export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif -endif - -PREFIX := arm-none-eabi- -OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc - -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -# use arm-none-eabi-cpp for macOS -# as macOS's default compiler is clang -# and clang's preprocessor will warn on \u -# when preprocessing asm files, expecting a unicode literal -# we can't unconditionally use arm-none-eabi-cpp -# as installations which install binutils-arm-none-eabi -# don't come with it -ifneq ($(MODERN),1) - ifeq ($(shell uname -s),Darwin) - CPP := $(PREFIX)cpp - else - CPP := $(CC) -E - endif -else - CPP := $(PREFIX)cpp -endif - -SHELL := /bin/bash -o pipefail - -CPPFLAGS := -I ../../tools/agbcc/include -I ../../tools/agbcc -iquote include -nostdinc -undef - -ROM := payload.gba -OBJ_DIR := build -CC1 := ../../tools/agbcc/bin/agbcc$(EXE) -override CC1FLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm - - -ELF = $(ROM:.gba=.elf) -MAP = $(ROM:.gba=.map) - -C_SUBDIR = src -ASM_SUBDIR = asm -DATA_ASM_SUBDIR = data - -C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR) -ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR) -DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) - -ASFLAGS := -mcpu=arm7tdmi - -LDFLAGS = -Map ../$(MAP) - -LIB := -L ../../../tools/agbcc/lib -lgcc - -SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c -GFX := ../../tools/gbagfx/gbagfx$(EXE) -AIF := ../../tools/aif2pcm/aif2pcm$(EXE) -MID := ../../tools/mid2agb/mid2agb$(EXE) -SCANINC := ../../tools/scaninc/scaninc$(EXE) -PREPROC := ../../tools/preproc/preproc$(EXE) -RAMSCRGEN := ../../tools/ramscrgen/ramscrgen$(EXE) -FIX := ../../tools/gbafix/gbafix$(EXE) - -# Clear the default suffixes -.SUFFIXES: -# Don't delete intermediate files -.SECONDARY: -# Delete files that weren't built properly -.DELETE_ON_ERROR: - -# Secondary expansion is required for dependency variables in object rules. -.SECONDEXPANSION: - -.PHONY: all rom clean compare tidy - -C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) -C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) - -ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) -ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS)) - -DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s) -DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS)) - -SONG_SRCS := $(wildcard $(SONG_SUBDIR)/*.s) -SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS)) - -MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid) -MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) - -OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) -# OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) - -SUBDIRS := $(sort $(dir $(OBJS))) - -$(shell mkdir -p $(SUBDIRS)) - -$(C_BUILDDIR)/siirtc.o: CC1FLAGS := -mthumb-interwork -$(C_BUILDDIR)/agb_flash.o: CC1FLAGS := -O1 -mthumb-interwork -$(C_BUILDDIR)/agb_flash_1m.o: CC1FLAGS := -O1 -mthumb-interwork -$(C_BUILDDIR)/agb_flash_mx.o: CC1FLAGS := -O1 -mthumb-interwork -$(C_BUILDDIR)/agb_flash_le.o: CC1FLAGS := -O1 -mthumb-interwork - -all: rom - @: - -rom: $(ROM) -ifeq ($(COMPARE),1) - @$(SHA1) rom.sha1 -endif - -# For contributors to make sure a change didn't affect the contents of the ROM. -compare: ; @$(MAKE) COMPARE=1 - -clean: tidy - rm -f sound/direct_sound_samples/*.bin - rm -f $(SONG_OBJS) $(MID_OBJS) $(MID_SUBDIR)/*.s - find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + - -tidy: - rm -f $(ROM) $(ELF) $(MAP) - rm -r build/* - -%.s: ; -%.png: ; -%.pal: ; -%.aif: ; - -%.1bpp: %.png ; $(GFX) $< $@ -%.4bpp: %.png ; $(GFX) $< $@ -%.8bpp: %.png ; $(GFX) $< $@ -%.gbapal: %.pal ; $(GFX) $< $@ -%.gbapal: %.png ; $(GFX) $< $@ -%.lz: % ; $(GFX) $< $@ -%.rl: % ; $(GFX) $< $@ - - -ifeq ($(NODEP),1) -$(C_BUILDDIR)/%.o: c_dep := -else -$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c) -endif - -$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep) - @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i - @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CC1FLAGS) -o $(C_BUILDDIR)/$*.s - @echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s - $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s - -ifeq ($(NODEP),1) -$(ASM_BUILDDIR)/%.o: asm_dep := -else -$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) $(ASM_SUBDIR)/$*.s) -endif - -$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep) - $(AS) $(ASFLAGS) -o $@ $< - -ifeq ($(NODEP),1) -$(DATA_ASM_BUILDDIR)/%.o: data_dep := -else -$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s) -endif - -$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep) - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ - -$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s - $(AS) $(ASFLAGS) -I sound -o $@ $< - -$(OBJ_DIR)/sym_bss.ld: sym_bss.txt - $(RAMSCRGEN) .bss $< ENGLISH > $@ - -$(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) - $(RAMSCRGEN) COMMON $< ENGLISH -c $(C_BUILDDIR),common_syms > $@ - -$(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt - $(RAMSCRGEN) ewram_data $< ENGLISH > $@ - -$(OBJ_DIR)/ld_script.ld: ld_script.txt $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld - cd $(OBJ_DIR) && sed -f ../../ld_script.sed ../$< | sed "s#tools/#../tools/#g" > ld_script.ld - -$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) - cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../$@ $(LIB) - -$(ROM): $(ELF) - $(OBJCOPY) -O binary $< $@ - diff --git a/berry_fix/payload/asm/crt0.s b/berry_fix/payload/asm/crt0.s deleted file mode 100644 index 2bca006365..0000000000 --- a/berry_fix/payload/asm/crt0.s +++ /dev/null @@ -1,82 +0,0 @@ - .include "asm/macros/function.inc" - .include "constants/gba_constants.inc" - - .syntax unified - - .text - - .arm - .align 2, 0 - .global Init -Init: - mov r0, #PSR_IRQ_MODE - msr cpsr_cf, r0 - ldr sp, sp_irq - mov r0, #PSR_SYS_MODE - msr cpsr_cf, r0 - ldr sp, sp_sys - ldr r1, =INTR_VECTOR - ldr r0, =IntrMain - str r0, [r1] - ldr r1, =AgbMain + 1 - mov lr, pc - bx r1 - b Init - - .align 2, 0 -sp_sys: .word IWRAM_END - 0x100 -sp_irq: .word IWRAM_END - 0x60 - - .pool - .size Init, .-Init - - .arm - .align 2, 0 - .global IntrMain -IntrMain: @ 0x2010048 - mov ip, #REG_BASE - add r3, ip, #OFFSET_REG_IE - ldr r2, [r3] - and r1, r2, r2, lsr #16 - mov r2, #0 - ands r0, r1, #0x2000 - strbne r0, [r3, #-0x17c] -_02010064: - bne _02010064 - ands r0, r1, #0xc0 - bne _020100DC - add r2, r2, #4 - ands r0, r1, #1 - strhne r0, [ip, #-8] - bne _020100DC - add r2, r2, #4 - ands r0, r1, #2 - bne _020100DC - add r2, r2, #4 - ands r0, r1, #4 - bne _020100DC - add r2, r2, #4 - ands r0, r1, #0x100 - bne _020100DC - add r2, r2, #4 - ands r0, r1, #0x200 - bne _020100DC - add r2, r2, #4 - ands r0, r1, #0x400 - bne _020100DC - add r2, r2, #4 - ands r0, r1, #0x800 - bne _020100DC - add r2, r2, #4 - ands r0, r1, #0x1000 - bne _020100DC - add r2, r2, #4 - ands r0, r1, #8 -_020100DC: - strh r0, [r3, #2] - ldr r1, =gIntrTable - add r1, r1, r2 - ldr r0, [r1] - bx r0 - .pool - .size IntrMain, .-IntrMain diff --git a/berry_fix/payload/asm/libagbsyscall.s b/berry_fix/payload/asm/libagbsyscall.s deleted file mode 100644 index 9548e80d28..0000000000 --- a/berry_fix/payload/asm/libagbsyscall.s +++ /dev/null @@ -1,46 +0,0 @@ - .include "asm/macros/function.inc" - .include "constants/gba_constants.inc" - - .syntax unified - - .text - - thumb_func_start CpuSet -CpuSet: @ 81E3B64 - svc 0xB - bx lr - thumb_func_end CpuSet - - thumb_func_start Div -Div: @ 81E3B68 - svc 0x6 - bx lr - thumb_func_end Div - - thumb_func_start Mod -Mod: - svc 0x6 - adds r0, r1, 0 - bx lr - thumb_func_end Mod - - thumb_func_start LZ77UnCompVram -LZ77UnCompVram: @ 81E3B6C - svc 0x12 - bx lr - thumb_func_end LZ77UnCompVram - - thumb_func_start RegisterRamReset -RegisterRamReset: @ 81E3B80 - svc 0x1 - bx lr - thumb_func_end RegisterRamReset - - thumb_func_start VBlankIntrWait -VBlankIntrWait: @ 81E3BA0 - movs r2, 0 - svc 0x5 - bx lr - thumb_func_end VBlankIntrWait - - .align 2, 0 @ Don't pad with nop. diff --git a/berry_fix/payload/asm/macros/function.inc b/berry_fix/payload/asm/macros/function.inc deleted file mode 100644 index 67fb373a80..0000000000 --- a/berry_fix/payload/asm/macros/function.inc +++ /dev/null @@ -1,29 +0,0 @@ - .macro arm_func_start name - .align 2, 0 - .global \name - .arm - .type \name, function - .endm - - .macro arm_func_end name - .size \name, .-\name - .endm - - .macro thumb_func_start name - .align 2, 0 - .global \name - .thumb - .thumb_func - .type \name, function - .endm - - .macro non_word_aligned_thumb_func_start name - .global \name - .thumb - .thumb_func - .type \name, function - .endm - - .macro thumb_func_end name - .size \name, .-\name - .endm diff --git a/berry_fix/payload/charmap.txt b/berry_fix/payload/charmap.txt deleted file mode 100644 index 1c143ada4f..0000000000 --- a/berry_fix/payload/charmap.txt +++ /dev/null @@ -1,1067 +0,0 @@ -' ' = 00 -'À' = 01 -'Á' = 02 -'Â' = 03 -'Ç' = 04 -'È' = 05 -'É' = 06 -'Ê' = 07 -'Ë' = 08 -'Ì' = 09 -'Î' = 0B -'Ï' = 0C -'Ò' = 0D -'Ó' = 0E -'Ô' = 0F -'Œ' = 10 -'Ù' = 11 -'Ú' = 12 -'Û' = 13 -'Ñ' = 14 -'ß' = 15 -'à' = 16 -'á' = 17 -'ç' = 19 -'è' = 1A -'é' = 1B -'ê' = 1C -'ë' = 1D -'ì' = 1E -'î' = 20 -'ï' = 21 -'ò' = 22 -'ó' = 23 -'ô' = 24 -'œ' = 25 -'ù' = 26 -'ú' = 27 -'û' = 28 -'ñ' = 29 -'º' = 2A -'ª' = 2B -SUPER_ER = 2C -'&' = 2D -'+' = 2E -LV = 34 -'=' = 35 -';' = 36 -'¿' = 51 -'¡' = 52 -PK = 53 -PKMN = 53 54 -POKEBLOCK = 55 56 57 58 59 -'Í' = 5A -'%' = 5B -'(' = 5C -')' = 5D -'â' = 68 -'í' = 6F -UNK_SPACER = 77 -UP_ARROW = 79 -DOWN_ARROW = 7A -LEFT_ARROW = 7B -RIGHT_ARROW = 7C -'0' = A1 -'1' = A2 -'2' = A3 -'3' = A4 -'4' = A5 -'5' = A6 -'6' = A7 -'7' = A8 -'8' = A9 -'9' = AA -'!' = AB -'?' = AC -'.' = AD -'-' = AE -'·' = AF -'…' = B0 -'“' = B1 -'”' = B2 -'‘' = B3 -'’' = B4 -'♂' = B5 -'♀' = B6 -'¥' = B7 -',' = B8 -'×' = B9 -'/' = BA -'A' = BB -'B' = BC -'C' = BD -'D' = BE -'E' = BF -'F' = C0 -'G' = C1 -'H' = C2 -'I' = C3 -'J' = C4 -'K' = C5 -'L' = C6 -'M' = C7 -'N' = C8 -'O' = C9 -'P' = CA -'Q' = CB -'R' = CC -'S' = CD -'T' = CE -'U' = CF -'V' = D0 -'W' = D1 -'X' = D2 -'Y' = D3 -'Z' = D4 -'a' = D5 -'b' = D6 -'c' = D7 -'d' = D8 -'e' = D9 -'f' = DA -'g' = DB -'h' = DC -'i' = DD -'j' = DE -'k' = DF -'l' = E0 -'m' = E1 -'n' = E2 -'o' = E3 -'p' = E4 -'q' = E5 -'r' = E6 -'s' = E7 -'t' = E8 -'u' = E9 -'v' = EA -'w' = EB -'x' = EC -'y' = ED -'z' = EE -'▶' = EF -':' = F0 -'Ä' = F1 -'Ö' = F2 -'Ü' = F3 -'ä' = F4 -'ö' = F5 -'ü' = F6 -TALL_PLUS = FC 0C FB -'$' = FF - -@ Hiragana -'あ' = 01 -'い' = 02 -'う' = 03 -'え' = 04 -'お' = 05 -'か' = 06 -'き' = 07 -'く' = 08 -'け' = 09 -'こ' = 0A -'さ' = 0B -'し' = 0C -'す' = 0D -'せ' = 0E -'そ' = 0F -'た' = 10 -'ち' = 11 -'つ' = 12 -'て' = 13 -'と' = 14 -'な' = 15 -'に' = 16 -'ぬ' = 17 -'ね' = 18 -'の' = 19 -'は' = 1A -'ひ' = 1B -'ふ' = 1C -'へ' = 1D -'ほ' = 1E -'ま' = 1F -'み' = 20 -'む' = 21 -'め' = 22 -'も' = 23 -'や' = 24 -'ゆ' = 25 -'よ' = 26 -'ら' = 27 -'り' = 28 -'る' = 29 -'れ' = 2A -'ろ' = 2B -'わ' = 2C -'を' = 2D -'ん' = 2E -'ぁ' = 2F -'ぃ' = 30 -'ぅ' = 31 -'ぇ' = 32 -'ぉ' = 33 -'ゃ' = 34 -'ゅ' = 35 -'ょ' = 36 -'が' = 37 -'ぎ' = 38 -'ぐ' = 39 -'げ' = 3A -'ご' = 3B -'ざ' = 3C -'じ' = 3D -'ず' = 3E -'ぜ' = 3F -'ぞ' = 40 -'だ' = 41 -'ぢ' = 42 -'づ' = 43 -'で' = 44 -'ど' = 45 -'ば' = 46 -'び' = 47 -'ぶ' = 48 -'べ' = 49 -'ぼ' = 4A -'ぱ' = 4B -'ぴ' = 4C -'ぷ' = 4D -'ぺ' = 4E -'ぽ' = 4F -'っ' = 50 - -@ Katakana -'ア' = 51 -'イ' = 52 -'ウ' = 53 -'エ' = 54 -'オ' = 55 -'カ' = 56 -'キ' = 57 -'ク' = 58 -'ケ' = 59 -'コ' = 5A -'サ' = 5B -'シ' = 5C -'ス' = 5D -'セ' = 5E -'ソ' = 5F -'タ' = 60 -'チ' = 61 -'ツ' = 62 -'テ' = 63 -'ト' = 64 -'ナ' = 65 -'ニ' = 66 -'ヌ' = 67 -'ネ' = 68 -'ノ' = 69 -'ハ' = 6A -'ヒ' = 6B -'フ' = 6C -'ヘ' = 6D -'ホ' = 6E -'マ' = 6F -'ミ' = 70 -'ム' = 71 -'メ' = 72 -'モ' = 73 -'ヤ' = 74 -'ユ' = 75 -'ヨ' = 76 -'ラ' = 77 -'リ' = 78 -'ル' = 79 -'レ' = 7A -'ロ' = 7B -'ワ' = 7C -'ヲ' = 7D -'ン' = 7E -'ァ' = 7F -'ィ' = 80 -'ゥ' = 81 -'ェ' = 82 -'ォ' = 83 -'ャ' = 84 -'ュ' = 85 -'ョ' = 86 -'ガ' = 87 -'ギ' = 88 -'グ' = 89 -'ゲ' = 8A -'ゴ' = 8B -'ザ' = 8C -'ジ' = 8D -'ズ' = 8E -'ゼ' = 8F -'ゾ' = 90 -'ダ' = 91 -'ヂ' = 92 -'ヅ' = 93 -'デ' = 94 -'ド' = 95 -'バ' = 96 -'ビ' = 97 -'ブ' = 98 -'ベ' = 99 -'ボ' = 9A -'パ' = 9B -'ピ' = 9C -'プ' = 9D -'ペ' = 9E -'ポ' = 9F -'ッ' = A0 - -@ Japanese punctuation -' ' = 00 -'!' = AB -'?' = AC -'。' = AD -'ー' = AE -'⋯' = B0 - -STRING = FD - -@ string placeholders -PLAYER = FD 01 -STR_VAR_1 = FD 02 -STR_VAR_2 = FD 03 -STR_VAR_3 = FD 04 -KUN = FD 05 -RIVAL = FD 06 -@ version-dependent strings (originally made for Ruby/Sapphire differences) -@ Emerald uses the Sapphire strings (except for VERSION). -VERSION = FD 07 @ "EMERALD" -AQUA = FD 08 -MAGMA = FD 09 -ARCHIE = FD 0A -MAXIE = FD 0B -KYOGRE = FD 0C -GROUDON = FD 0D - -@ battle string placeholders - -B_BUFF1 = FD 00 -B_BUFF2 = FD 01 -B_COPY_VAR_1 = FD 02 -B_COPY_VAR_2 = FD 03 -B_COPY_VAR_3 = FD 04 -B_PLAYER_MON1_NAME = FD 05 -B_OPPONENT_MON1_NAME = FD 06 -B_PLAYER_MON2_NAME = FD 07 -B_OPPONENT_MON2_NAME = FD 08 -B_LINK_PLAYER_MON1_NAME = FD 09 -B_LINK_OPPONENT_MON1_NAME = FD 0A -B_LINK_PLAYER_MON2_NAME = FD 0B -B_LINK_OPPONENT_MON2_NAME = FD 0C -B_ATK_NAME_WITH_PREFIX_MON1 = FD 0D -B_ATK_PARTNER_NAME = FD 0E -B_ATK_NAME_WITH_PREFIX = FD 0F -B_DEF_NAME_WITH_PREFIX = FD 10 -B_EFF_NAME_WITH_PREFIX = FD 11 @ EFF = short for gEffectBattler -B_ACTIVE_NAME_WITH_PREFIX = FD 12 -B_SCR_ACTIVE_NAME_WITH_PREFIX = FD 13 -B_CURRENT_MOVE = FD 14 -B_LAST_MOVE = FD 15 -B_LAST_ITEM = FD 16 -B_LAST_ABILITY = FD 17 -B_ATK_ABILITY = FD 18 -B_DEF_ABILITY = FD 19 -B_SCR_ACTIVE_ABILITY = FD 1A -B_EFF_ABILITY = FD 1B -B_TRAINER1_CLASS = FD 1C -B_TRAINER1_NAME = FD 1D -B_LINK_PLAYER_NAME = FD 1E -B_LINK_PARTNER_NAME = FD 1F -B_LINK_OPPONENT1_NAME = FD 20 -B_LINK_OPPONENT2_NAME = FD 21 -B_LINK_SCR_TRAINER_NAME = FD 22 -B_PLAYER_NAME = FD 23 -B_TRAINER1_LOSE_TEXT = FD 24 -B_TRAINER1_WIN_TEXT = FD 25 -B_26 = FD 26 -B_PC_CREATOR_NAME = FD 27 -B_ATK_PREFIX1 = FD 28 -B_DEF_PREFIX1 = FD 29 -B_ATK_PREFIX2 = FD 2A -B_DEF_PREFIX2 = FD 2B -B_ATK_PREFIX3 = FD 2C -B_DEF_PREFIX3 = FD 2D -B_TRAINER2_CLASS = FD 2E -B_TRAINER2_NAME = FD 2F -B_TRAINER2_LOSE_TEXT = FD 30 -B_TRAINER2_WIN_TEXT = FD 31 -B_PARTNER_CLASS = FD 32 -B_PARTNER_NAME = FD 33 -B_BUFF3 = FD 34 - -@ indicates the end of a town/city name (before " TOWN" or " CITY") -NAME_END = FC 00 - -@ special 0xF7 character -SPECIAL_F7 = F7 - -@ more text functions - -COLOR = FC 01 @ use a color listed below right after -HIGHLIGHT = FC 02 @ same as fc 01 -SHADOW = FC 03 @ same as fc 01 -COLOR_HIGHLIGHT_SHADOW = FC 04 @ takes 3 bytes -PALETTE = FC 05 @ used in credits -SIZE = FC 06 @ note that anything other than "SMALL" is invalid -UNKNOWN_7 = FC 07 -PAUSE = FC 08 @ manually print the wait byte after this, havent mapped them -PAUSE_UNTIL_PRESS = FC 09 -WAIT_SE = FC 0A -PLAY_BGM = FC 0B -ESCAPE = FC 0C -SHIFT_TEXT = FC 0D -UNKNOWN_E = FC 0E -UNKNOWN_F = FC 0F -PLAY_SE = FC 10 -CLEAR = FC 11 -SKIP = FC 12 -CLEAR_TO = FC 13 -UNKNOWN_14 = FC 14 -JPN = FC 15 -ENG = FC 16 -PAUSE_MUSIC = FC 17 -RESUME_MUSIC = FC 18 - -@ colors - -TRANSPARENT = 00 -WHITE = 01 -DARK_GRAY = 02 -LIGHT_GRAY = 03 -RED = 04 -LIGHT_RED = 05 -GREEN = 06 -LIGHT_GREEN = 07 -BLUE = 08 -LIGHT_BLUE = 09 -@ these next colors can be set to anything arbitrary at runtime -@ usually though they'll have the textbox border colors as described below -DYNAMIC_COLOR1 = 0A @ white -DYNAMIC_COLOR2 = 0B @ white with a tinge of green -DYNAMIC_COLOR3 = 0C @ white 2 -DYNAMIC_COLOR4 = 0D @ aquamarine -DYNAMIC_COLOR5 = 0E @ blue-green -DYNAMIC_COLOR6 = 0F @ cerulean - -@ sound and music - -MUS_DUMMY = 00 00 -SE_USE_ITEM = 01 00 -SE_PC_LOGIN = 02 00 -SE_PC_OFF = 03 00 -SE_PC_ON = 04 00 -SE_SELECT = 05 00 -SE_WIN_OPEN = 06 00 -SE_WALL_HIT = 07 00 -SE_DOOR = 08 00 -SE_EXIT = 09 00 -SE_LEDGE = 0A 00 -SE_BIKE_BELL = 0B 00 -SE_NOT_EFFECTIVE = 0C 00 -SE_EFFECTIVE = 0D 00 -SE_SUPER_EFFECTIVE = 0E 00 -SE_BALL_OPEN = 0F 00 -SE_FAINT = 10 00 -SE_FLEE = 11 00 -SE_SLIDING_DOOR = 12 00 -SE_SHIP = 13 00 -SE_BANG = 14 00 -SE_PIN = 15 00 -SE_BOO = 16 00 -SE_BALL = 17 00 -SE_CONTEST_PLACE = 18 00 -SE_A = 19 00 -SE_I = 1A 00 -SE_U = 1B 00 -SE_E = 1C 00 -SE_O = 1D 00 -SE_N = 1E 00 -SE_SUCCESS = 1F 00 -SE_FAILURE = 20 00 -SE_EXP = 21 00 -SE_BIKE_HOP = 22 00 -SE_SWITCH = 23 00 -SE_CLICK = 24 00 -SE_FU_ZAKU = 25 00 -SE_CONTEST_CONDITION_LOSE = 26 00 -SE_LAVARIDGE_FALL_WARP = 27 00 -SE_ICE_STAIRS = 28 00 -SE_ICE_BREAK = 29 00 -SE_ICE_CRACK = 2A 00 -SE_FALL = 2B 00 -SE_UNLOCK = 2C 00 -SE_WARP_IN = 2D 00 -SE_WARP_OUT = 2E 00 -SE_REPEL = 2F 00 -SE_ROTATING_GATE = 30 00 -SE_TRUCK_MOVE = 31 00 -SE_TRUCK_STOP = 32 00 -SE_TRUCK_UNLOAD = 33 00 -SE_TRUCK_DOOR = 34 00 -SE_BERRY_BLENDER = 35 00 -SE_CARD = 36 00 -SE_SAVE = 37 00 -SE_BALL_BOUNCE_1 = 38 00 -SE_BALL_BOUNCE_2 = 39 00 -SE_BALL_BOUNCE_3 = 3A 00 -SE_BALL_BOUNCE_4 = 3B 00 -SE_BALL_TRADE = 3C 00 -SE_BALL_THROW = 3D 00 -SE_NOTE_C = 3E 00 -SE_NOTE_D = 3F 00 -SE_NOTE_E = 40 00 -SE_NOTE_F = 41 00 -SE_NOTE_G = 42 00 -SE_NOTE_A = 43 00 -SE_NOTE_B = 44 00 -SE_NOTE_C_HIGH = 45 00 -SE_PUDDLE = 46 00 -SE_BRIDGE_WALK = 47 00 -SE_ITEMFINDER = 48 00 -SE_DING_DONG = 49 00 -SE_BALLOON_RED = 4A 00 -SE_BALLOON_BLUE = 4B 00 -SE_BALLOON_YELLOW = 4C 00 -SE_BREAKABLE_DOOR = 4D 00 -SE_MUD_BALL = 4E 00 -SE_FIELD_POISON = 4F 00 -SE_ESCALATOR = 50 00 -SE_THUNDERSTORM = 51 00 -SE_THUNDERSTORM_STOP = 52 00 -SE_DOWNPOUR = 53 00 -SE_DOWNPOUR_STOP = 54 00 -SE_RAIN = 55 00 -SE_RAIN_STOP = 56 00 -SE_THUNDER = 57 00 -SE_THUNDER2 = 58 00 -SE_ELEVATOR = 59 00 -SE_LOW_HEALTH = 5A 00 -SE_EXP_MAX = 5B 00 -SE_ROULETTE_BALL = 5C 00 -SE_ROULETTE_BALL2 = 5D 00 -SE_TAILLOW_WING_FLAP = 5E 00 -SE_SHOP = 5F 00 -SE_CONTEST_HEART = 60 00 -SE_CONTEST_CURTAIN_RISE = 61 00 -SE_CONTEST_CURTAIN_FALL = 62 00 -SE_CONTEST_ICON_CHANGE = 63 00 -SE_CONTEST_ICON_CLEAR = 64 00 -SE_CONTEST_MONS_TURN = 65 00 -SE_SHINY = 66 00 -SE_INTRO_BLAST = 67 00 -SE_MUGSHOT = 68 00 -SE_APPLAUSE = 69 00 -SE_VEND = 6A 00 -SE_ORB = 6B 00 -SE_DEX_SCROLL = 6C 00 -SE_DEX_PAGE = 6D 00 -SE_POKENAV_ON = 6E 00 -SE_POKENAV_OFF = 6F 00 -SE_DEX_SEARCH = 70 00 -SE_EGG_HATCH = 71 00 -SE_BALL_TRAY_ENTER = 72 00 -SE_BALL_TRAY_BALL = 73 00 -SE_BALL_TRAY_EXIT = 74 00 -SE_GLASS_FLUTE = 75 00 -SE_M_THUNDERBOLT = 76 00 -SE_M_THUNDERBOLT2 = 77 00 -SE_M_HARDEN = 78 00 -SE_M_NIGHTMARE = 79 00 -SE_M_VITAL_THROW = 7A 00 -SE_M_VITAL_THROW2 = 7B 00 -SE_M_BUBBLE = 7C 00 -SE_M_BUBBLE2 = 7D 00 -SE_M_BUBBLE3 = 7E 00 -SE_M_RAIN_DANCE = 7F 00 -SE_M_CUT = 80 00 -SE_M_STRING_SHOT = 81 00 -SE_M_STRING_SHOT2 = 82 00 -SE_M_ROCK_THROW = 83 00 -SE_M_GUST = 84 00 -SE_M_GUST2 = 85 00 -SE_M_DOUBLE_SLAP = 86 00 -SE_M_DOUBLE_TEAM = 87 00 -SE_M_RAZOR_WIND = 88 00 -SE_M_ICY_WIND = 89 00 -SE_M_THUNDER_WAVE = 8A 00 -SE_M_COMET_PUNCH = 8B 00 -SE_M_MEGA_KICK = 8C 00 -SE_M_MEGA_KICK2 = 8D 00 -SE_M_CRABHAMMER = 8E 00 -SE_M_JUMP_KICK = 8F 00 -SE_M_FLAME_WHEEL = 90 00 -SE_M_FLAME_WHEEL2 = 91 00 -SE_M_FLAMETHROWER = 92 00 -SE_M_FIRE_PUNCH = 93 00 -SE_M_TOXIC = 94 00 -SE_M_SACRED_FIRE = 95 00 -SE_M_SACRED_FIRE2 = 96 00 -SE_M_EMBER = 97 00 -SE_M_TAKE_DOWN = 98 00 -SE_M_BLIZZARD = 99 00 -SE_M_BLIZZARD2 = 9A 00 -SE_M_SCRATCH = 9B 00 -SE_M_VICEGRIP = 9C 00 -SE_M_WING_ATTACK = 9D 00 -SE_M_FLY = 9E 00 -SE_M_SAND_ATTACK = 9F 00 -SE_M_RAZOR_WIND2 = A0 00 -SE_M_BITE = A1 00 -SE_M_HEADBUTT = A2 00 -SE_M_SURF = A3 00 -SE_M_HYDRO_PUMP = A4 00 -SE_M_WHIRLPOOL = A5 00 -SE_M_HORN_ATTACK = A6 00 -SE_M_TAIL_WHIP = A7 00 -SE_M_MIST = A8 00 -SE_M_POISON_POWDER = A9 00 -SE_M_BIND = AA 00 -SE_M_DRAGON_RAGE = AB 00 -SE_M_SING = AC 00 -SE_M_PERISH_SONG = AD 00 -SE_M_PAY_DAY = AE 00 -SE_M_DIG = AF 00 -SE_M_DIZZY_PUNCH = B0 00 -SE_M_SELF_DESTRUCT = B1 00 -SE_M_EXPLOSION = B2 00 -SE_M_ABSORB_2 = B3 00 -SE_M_ABSORB = B4 00 -SE_M_SCREECH = B5 00 -SE_M_BUBBLE_BEAM = B6 00 -SE_M_BUBBLE_BEAM2 = B7 00 -SE_M_SUPERSONIC = B8 00 -SE_M_BELLY_DRUM = B9 00 -SE_M_METRONOME = BA 00 -SE_M_BONEMERANG = BB 00 -SE_M_LICK = BC 00 -SE_M_PSYBEAM = BD 00 -SE_M_FAINT_ATTACK = BE 00 -SE_M_SWORDS_DANCE = BF 00 -SE_M_LEER = C0 00 -SE_M_SWAGGER = C1 00 -SE_M_SWAGGER2 = C2 00 -SE_M_HEAL_BELL = C3 00 -SE_M_CONFUSE_RAY = C4 00 -SE_M_SNORE = C5 00 -SE_M_BRICK_BREAK = C6 00 -SE_M_GIGA_DRAIN = C7 00 -SE_M_PSYBEAM2 = C8 00 -SE_M_SOLAR_BEAM = C9 00 -SE_M_PETAL_DANCE = CA 00 -SE_M_TELEPORT = CB 00 -SE_M_MINIMIZE = CC 00 -SE_M_SKETCH = CD 00 -SE_M_SWIFT = CE 00 -SE_M_REFLECT = CF 00 -SE_M_BARRIER = D0 00 -SE_M_DETECT = D1 00 -SE_M_LOCK_ON = D2 00 -SE_M_MOONLIGHT = D3 00 -SE_M_CHARM = D4 00 -SE_M_CHARGE = D5 00 -SE_M_STRENGTH = D6 00 -SE_M_HYPER_BEAM = D7 00 -SE_M_WATERFALL = D8 00 -SE_M_REVERSAL = D9 00 -SE_M_ACID_ARMOR = DA 00 -SE_M_SANDSTORM = DB 00 -SE_M_TRI_ATTACK = DC 00 -SE_M_TRI_ATTACK2 = DD 00 -SE_M_ENCORE = DE 00 -SE_M_ENCORE2 = DF 00 -SE_M_BATON_PASS = E0 00 -SE_M_MILK_DRINK = E1 00 -SE_M_ATTRACT = E2 00 -SE_M_ATTRACT2 = E3 00 -SE_M_MORNING_SUN = E4 00 -SE_M_FLATTER = E5 00 -SE_M_SAND_TOMB = E6 00 -SE_M_GRASSWHISTLE = E7 00 -SE_M_SPIT_UP = E8 00 -SE_M_DIVE = E9 00 -SE_M_EARTHQUAKE = EA 00 -SE_M_TWISTER = EB 00 -SE_M_SWEET_SCENT = EC 00 -SE_M_YAWN = ED 00 -SE_M_SKY_UPPERCUT = EE 00 -SE_M_STAT_INCREASE = EF 00 -SE_M_HEAT_WAVE = F0 00 -SE_M_UPROAR = F1 00 -SE_M_HAIL = F2 00 -SE_M_COSMIC_POWER = F3 00 -SE_M_TEETER_DANCE = F4 00 -SE_M_STAT_DECREASE = F5 00 -SE_M_HAZE = F6 00 -SE_M_HYPER_BEAM2 = F7 00 -SE_RG_DOOR = F8 00 -SE_RG_CARD_FLIP = F9 00 -SE_RG_CARD_FLIPPING = FA 00 -SE_RG_CARD_OPEN = FB 00 -SE_RG_BAG_CURSOR = FC 00 -SE_RG_BAG_POCKET = FD 00 -SE_RG_BALL_CLICK = FE 00 -SE_RG_SHOP = FF 00 -SE_RG_SS_ANNE_HORN = 00 01 -SE_RG_HELP_OPEN = 01 01 -SE_RG_HELP_CLOSE = 02 01 -SE_RG_HELP_ERROR = 03 01 -SE_RG_DEOXYS_MOVE = 04 01 -SE_RG_POKE_JUMP_SUCCESS = 05 01 -SE_RG_POKE_JUMP_FAILURE = 06 01 -SE_POKENAV_CALL = 07 01 -SE_POKENAV_HANG_UP = 08 01 -SE_ARENA_TIMEUP1 = 09 01 -SE_ARENA_TIMEUP2 = 0A 01 -SE_PIKE_CURTAIN_CLOSE = 0B 01 -SE_PIKE_CURTAIN_OPEN = 0C 01 -SE_SUDOWOODO_SHAKE = 0D 01 -MUS_LITTLEROOT_TEST = 5E 01 -MUS_GSC_ROUTE38 = 5F 01 -MUS_CAUGHT = 60 01 -MUS_VICTORY_WILD = 61 01 -MUS_VICTORY_GYM_LEADER = 62 01 -MUS_VICTORY_LEAGUE = 63 01 -MUS_C_COMM_CENTER = 64 01 -MUS_GSC_PEWTER = 65 01 -MUS_C_VS_LEGEND_BEAST = 66 01 -MUS_ROUTE101 = 67 01 -MUS_ROUTE110 = 68 01 -MUS_ROUTE120 = 69 01 -MUS_PETALBURG = 6A 01 -MUS_OLDALE = 6B 01 -MUS_GYM = 6C 01 -MUS_SURF = 6D 01 -MUS_PETALBURG_WOODS = 6E 01 -MUS_LEVEL_UP = 6F 01 -MUS_HEAL = 70 01 -MUS_OBTAIN_BADGE = 71 01 -MUS_OBTAIN_ITEM = 72 01 -MUS_EVOLVED = 73 01 -MUS_OBTAIN_TMHM = 74 01 -MUS_LILYCOVE_MUSEUM = 75 01 -MUS_ROUTE122 = 76 01 -MUS_OCEANIC_MUSEUM = 77 01 -MUS_EVOLUTION_INTRO = 78 01 -MUS_EVOLUTION = 79 01 -MUS_MOVE_DELETED = 7A 01 -MUS_ENCOUNTER_GIRL = 7B 01 -MUS_ENCOUNTER_MALE = 7C 01 -MUS_ABANDONED_SHIP = 7D 01 -MUS_FORTREE = 7E 01 -MUS_BIRCH_LAB = 7F 01 -MUS_B_TOWER_RS = 80 01 -MUS_ENCOUNTER_SWIMMER = 81 01 -MUS_CAVE_OF_ORIGIN = 82 01 -MUS_OBTAIN_BERRY = 83 01 -MUS_AWAKEN_LEGEND = 84 01 -MUS_SLOTS_JACKPOT = 85 01 -MUS_SLOTS_WIN = 86 01 -MUS_TOO_BAD = 87 01 -MUS_ROULETTE = 88 01 -MUS_LINK_CONTEST_P1 = 89 01 -MUS_LINK_CONTEST_P2 = 8A 01 -MUS_LINK_CONTEST_P3 = 8B 01 -MUS_LINK_CONTEST_P4 = 8C 01 -MUS_ENCOUNTER_RICH = 8D 01 -MUS_VERDANTURF = 8E 01 -MUS_RUSTBORO = 8F 01 -MUS_POKE_CENTER = 90 01 -MUS_ROUTE104 = 91 01 -MUS_ROUTE119 = 92 01 -MUS_CYCLING = 93 01 -MUS_POKE_MART = 94 01 -MUS_LITTLEROOT = 95 01 -MUS_MT_CHIMNEY = 96 01 -MUS_ENCOUNTER_FEMALE = 97 01 -MUS_LILYCOVE = 98 01 -MUS_ROUTE111 = 99 01 -MUS_HELP = 9A 01 -MUS_UNDERWATER = 9B 01 -MUS_VICTORY_TRAINER = 9C 01 -MUS_TITLE = 9D 01 -MUS_INTRO = 9E 01 -MUS_ENCOUNTER_MAY = 9F 01 -MUS_ENCOUNTER_INTENSE = A0 01 -MUS_ENCOUNTER_COOL = A1 01 -MUS_ROUTE113 = A2 01 -MUS_ENCOUNTER_AQUA = A3 01 -MUS_FOLLOW_ME = A4 01 -MUS_ENCOUNTER_BRENDAN = A5 01 -MUS_EVER_GRANDE = A6 01 -MUS_ENCOUNTER_SUSPICIOUS = A7 01 -MUS_VICTORY_AQUA_MAGMA = A8 01 -MUS_CABLE_CAR = A9 01 -MUS_GAME_CORNER = AA 01 -MUS_DEWFORD = AB 01 -MUS_SAFARI_ZONE = AC 01 -MUS_VICTORY_ROAD = AD 01 -MUS_AQUA_MAGMA_HIDEOUT = AE 01 -MUS_SAILING = AF 01 -MUS_MT_PYRE = B0 01 -MUS_SLATEPORT = B1 01 -MUS_MT_PYRE_EXTERIOR = B2 01 -MUS_SCHOOL = B3 01 -MUS_HALL_OF_FAME = B4 01 -MUS_FALLARBOR = B5 01 -MUS_SEALED_CHAMBER = B6 01 -MUS_CONTEST_WINNER = B7 01 -MUS_CONTEST = B8 01 -MUS_ENCOUNTER_MAGMA = B9 01 -MUS_INTRO_BATTLE = BA 01 -MUS_ABNORMAL_WEATHER = BB 01 -MUS_WEATHER_GROUDON = BC 01 -MUS_SOOTOPOLIS = BD 01 -MUS_CONTEST_RESULTS = BE 01 -MUS_HALL_OF_FAME_ROOM = BF 01 -MUS_TRICK_HOUSE = C0 01 -MUS_ENCOUNTER_TWINS = C1 01 -MUS_ENCOUNTER_ELITE_FOUR = C2 01 -MUS_ENCOUNTER_HIKER = C3 01 -MUS_CONTEST_LOBBY = C4 01 -MUS_ENCOUNTER_INTERVIEWER = C5 01 -MUS_ENCOUNTER_CHAMPION = C6 01 -MUS_CREDITS = C7 01 -MUS_END = C8 01 -MUS_B_FRONTIER = C9 01 -MUS_B_ARENA = CA 01 -MUS_OBTAIN_B_POINTS = CB 01 -MUS_REGISTER_MATCH_CALL = CC 01 -MUS_B_PYRAMID = CD 01 -MUS_B_PYRAMID_TOP = CE 01 -MUS_B_PALACE = CF 01 -MUS_RAYQUAZA_APPEARS = D0 01 -MUS_B_TOWER = D1 01 -MUS_OBTAIN_SYMBOL = D2 01 -MUS_B_DOME = D3 01 -MUS_B_PIKE = D4 01 -MUS_B_FACTORY = D5 01 -MUS_VS_RAYQUAZA = D6 01 -MUS_VS_FRONTIER_BRAIN = D7 01 -MUS_VS_MEW = D8 01 -MUS_B_DOME_LOBBY = D9 01 -MUS_VS_WILD = DA 01 -MUS_VS_AQUA_MAGMA = DB 01 -MUS_VS_TRAINER = DC 01 -MUS_VS_GYM_LEADER = DD 01 -MUS_VS_CHAMPION = DE 01 -MUS_VS_REGI = DF 01 -MUS_VS_KYOGRE_GROUDON = E0 01 -MUS_VS_RIVAL = E1 01 -MUS_VS_ELITE_FOUR = E2 01 -MUS_VS_AQUA_MAGMA_LEADER = E3 01 -MUS_RG_FOLLOW_ME = E4 01 -MUS_RG_GAME_CORNER = E5 01 -MUS_RG_ROCKET_HIDEOUT = E6 01 -MUS_RG_GYM = E7 01 -MUS_RG_JIGGLYPUFF = E8 01 -MUS_RG_INTRO_FIGHT = E9 01 -MUS_RG_TITLE = EA 01 -MUS_RG_CINNABAR = EB 01 -MUS_RG_LAVENDER = EC 01 -MUS_RG_HEAL = ED 01 -MUS_RG_CYCLING = EE 01 -MUS_RG_ENCOUNTER_ROCKET = EF 01 -MUS_RG_ENCOUNTER_GIRL = F0 01 -MUS_RG_ENCOUNTER_BOY = F1 01 -MUS_RG_HALL_OF_FAME = F2 01 -MUS_RG_VIRIDIAN_FOREST = F3 01 -MUS_RG_MT_MOON = F4 01 -MUS_RG_POKE_MANSION = F5 01 -MUS_RG_CREDITS = F6 01 -MUS_RG_ROUTE1 = F7 01 -MUS_RG_ROUTE24 = F8 01 -MUS_RG_ROUTE3 = F9 01 -MUS_RG_ROUTE11 = FA 01 -MUS_RG_VICTORY_ROAD = FB 01 -MUS_RG_VS_GYM_LEADER = FC 01 -MUS_RG_VS_TRAINER = FD 01 -MUS_RG_VS_WILD = FE 01 -MUS_RG_VS_CHAMPION = FF 01 -MUS_RG_PALLET = 00 02 -MUS_RG_OAK_LAB = 01 02 -MUS_RG_OAK = 02 02 -MUS_RG_POKE_CENTER = 03 02 -MUS_RG_SS_ANNE = 04 02 -MUS_RG_SURF = 05 02 -MUS_RG_POKE_TOWER = 06 02 -MUS_RG_SILPH = 07 02 -MUS_RG_FUCHSIA = 08 02 -MUS_RG_CELADON = 09 02 -MUS_RG_VICTORY_TRAINER = 0A 02 -MUS_RG_VICTORY_WILD = 0B 02 -MUS_RG_VICTORY_GYM_LEADER = 0C 02 -MUS_RG_VERMILLION = 0D 02 -MUS_RG_PEWTER = 0E 02 -MUS_RG_ENCOUNTER_RIVAL = 0F 02 -MUS_RG_RIVAL_EXIT = 10 02 -MUS_RG_DEX_RATING = 11 02 -MUS_RG_OBTAIN_KEY_ITEM = 12 02 -MUS_RG_CAUGHT_INTRO = 13 02 -MUS_RG_PHOTO = 14 02 -MUS_RG_GAME_FREAK = 15 02 -MUS_RG_CAUGHT = 16 02 -MUS_RG_NEW_GAME_INSTRUCT = 17 02 -MUS_RG_NEW_GAME_INTRO = 18 02 -MUS_RG_NEW_GAME_EXIT = 19 02 -MUS_RG_POKE_JUMP = 1A 02 -MUS_RG_UNION_ROOM = 1B 02 -MUS_RG_NET_CENTER = 1C 02 -MUS_RG_MYSTERY_GIFT = 1D 02 -MUS_RG_BERRY_PICK = 1E 02 -MUS_RG_SEVII_CAVE = 1F 02 -MUS_RG_TEACHY_TV_SHOW = 20 02 -MUS_RG_SEVII_ROUTE = 21 02 -MUS_RG_SEVII_DUNGEON = 22 02 -MUS_RG_SEVII_123 = 23 02 -MUS_RG_SEVII_45 = 24 02 -MUS_RG_SEVII_67 = 25 02 -MUS_RG_POKE_FLUTE = 26 02 -MUS_RG_VS_DEOXYS = 27 02 -MUS_RG_VS_MEWTWO = 28 02 -MUS_RG_VS_LEGEND = 29 02 -MUS_RG_ENCOUNTER_GYM_LEADER = 2A 02 -MUS_RG_ENCOUNTER_DEOXYS = 2B 02 -MUS_RG_TRAINER_TOWER = 2C 02 -MUS_RG_SLOW_PALLET = 2D 02 -MUS_RG_TEACHY_TV_MENU = 2E 02 -PH_TRAP_BLEND = 2F 02 -PH_TRAP_HELD = 30 02 -PH_TRAP_SOLO = 31 02 -PH_FACE_BLEND = 32 02 -PH_FACE_HELD = 33 02 -PH_FACE_SOLO = 34 02 -PH_CLOTH_BLEND = 35 02 -PH_CLOTH_HELD = 36 02 -PH_CLOTH_SOLO = 37 02 -PH_DRESS_BLEND = 38 02 -PH_DRESS_HELD = 39 02 -PH_DRESS_SOLO = 3A 02 -PH_FLEECE_BLEND = 3B 02 -PH_FLEECE_HELD = 3C 02 -PH_FLEECE_SOLO = 3D 02 -PH_KIT_BLEND = 3E 02 -PH_KIT_HELD = 3F 02 -PH_KIT_SOLO = 40 02 -PH_PRICE_BLEND = 41 02 -PH_PRICE_HELD = 42 02 -PH_PRICE_SOLO = 43 02 -PH_LOT_BLEND = 44 02 -PH_LOT_HELD = 45 02 -PH_LOT_SOLO = 46 02 -PH_GOAT_BLEND = 47 02 -PH_GOAT_HELD = 48 02 -PH_GOAT_SOLO = 49 02 -PH_THOUGHT_BLEND = 4A 02 -PH_THOUGHT_HELD = 4B 02 -PH_THOUGHT_SOLO = 4C 02 -PH_CHOICE_BLEND = 4D 02 -PH_CHOICE_HELD = 4E 02 -PH_CHOICE_SOLO = 4F 02 -PH_MOUTH_BLEND = 50 02 -PH_MOUTH_HELD = 51 02 -PH_MOUTH_SOLO = 52 02 -PH_FOOT_BLEND = 53 02 -PH_FOOT_HELD = 54 02 -PH_FOOT_SOLO = 55 02 -PH_GOOSE_BLEND = 56 02 -PH_GOOSE_HELD = 57 02 -PH_GOOSE_SOLO = 58 02 -PH_STRUT_BLEND = 59 02 -PH_STRUT_HELD = 5A 02 -PH_STRUT_SOLO = 5B 02 -PH_CURE_BLEND = 5C 02 -PH_CURE_HELD = 5D 02 -PH_CURE_SOLO = 5E 02 -PH_NURSE_BLEND = 5F 02 -PH_NURSE_HELD = 60 02 -PH_NURSE_SOLO = 61 02 - -A_BUTTON = F8 00 -B_BUTTON = F8 01 -DPAD_UPDOWN = F8 0A -DPAD_NONE = F8 0C - -UP_ARROW_2 = F9 00 -DOWN_ARROW_2 = F9 01 -LEFT_ARROW_2 = F9 02 -RIGHT_ARROW_2 = F9 03 -PLUS = F9 04 -LV_2 = F9 05 -PP = F9 06 -ID = F9 07 -NO = F9 08 -UNDERSCORE = F9 09 -CIRCLE_1 = F9 0A -CIRCLE_2 = F9 0B -CIRCLE_3 = F9 0C -CIRCLE_4 = F9 0D -CIRCLE_5 = F9 0E -CIRCLE_6 = F9 0F -CIRCLE_7 = F9 10 -CIRCLE_8 = F9 11 -CIRCLE_9 = F9 12 -ROUND_LEFT_PAREN = F9 13 -ROUND_RIGHT_PAREN = F9 14 -CIRCLE_DOT = F9 15 -TRIANGLE = F9 16 -BIG_MULT_X = F9 17 - -EMOJI_UNDERSCORE = F9 D0 -EMOJI_PIPE = F9 D1 -EMOJI_HIGHBAR = F9 D2 -EMOJI_TILDE = F9 D3 -EMOJI_LEFT_PAREN = F9 D4 -EMOJI_RIGHT_PAREN = F9 D5 -EMOJI_UNION = F9 D6 @ ⊂ -EMOJI_GREATER_THAN = F9 D7 -EMOJI_LEFT_EYE = F9 D8 -EMOJI_RIGHT_EYE = F9 D9 -EMOJI_AT = F9 DA -EMOJI_SEMICOLON = F9 DB -EMOJI_PLUS = F9 DC -EMOJI_MINUS = F9 DD -EMOJI_EQUALS = F9 DE -EMOJI_SPIRAL = F9 DF -EMOJI_TONGUE = F9 E0 -EMOJI_TRIANGLE_OUTLINE = F9 E1 -EMOJI_ACUTE = F9 E2 -EMOJI_GRAVE = F9 E3 -EMOJI_CIRCLE = F9 E4 -EMOJI_TRIANGLE = F9 E5 -EMOJI_SQUARE = F9 E6 -EMOJI_HEART = F9 E7 -EMOJI_MOON = F9 E8 -EMOJI_NOTE = F9 E9 -EMOJI_BALL = F9 EA -EMOJI_BOLT = F9 EB -EMOJI_LEAF = F9 EC -EMOJI_FIRE = F9 ED -EMOJI_WATER = F9 EE -EMOJI_LEFT_FIST = F9 EF -EMOJI_RIGHT_FIST = F9 F0 -EMOJI_BIGWHEEL = F9 F1 -EMOJI_SMALLWHEEL = F9 F2 -EMOJI_SPHERE = F9 F3 -EMOJI_IRRITATED = F9 F4 -EMOJI_MISCHIEVOUS = F9 F5 -EMOJI_HAPPY = F9 F6 -EMOJI_ANGRY = F9 F7 -EMOJI_SURPRISED = F9 F8 -EMOJI_BIGSMILE = F9 F9 -EMOJI_EVIL = F9 FA -EMOJI_TIRED = F9 FB -EMOJI_NEUTRAL = F9 FC -EMOJI_SHOCKED = F9 FD -EMOJI_BIGANGER = F9 FE - -'\l' = FA @ scroll up window text -'\p' = FB @ new paragraph -'\n' = FE @ new line diff --git a/berry_fix/payload/common_syms/agb_flash.txt b/berry_fix/payload/common_syms/agb_flash.txt deleted file mode 100644 index cb421ec80d..0000000000 --- a/berry_fix/payload/common_syms/agb_flash.txt +++ /dev/null @@ -1,10 +0,0 @@ -gFlashTimeoutFlag -PollFlashStatus -WaitForFlashWrite -ProgramFlashSector -gFlash -ProgramFlashByte -gFlashNumRemainingBytes -EraseFlashChip -EraseFlashSector -gFlashMaxTime diff --git a/berry_fix/payload/common_syms/main.txt b/berry_fix/payload/common_syms/main.txt deleted file mode 100644 index b62c721240..0000000000 --- a/berry_fix/payload/common_syms/main.txt +++ /dev/null @@ -1,9 +0,0 @@ -gIntrTable -gHeldKeys -gNewKeys -gIntrVector -gUpdateSuccessful -gUnknown_3001194 -gUnknown_30011A0 -gMainCallbackState -gGameVersion diff --git a/berry_fix/payload/common_syms/rtc.txt b/berry_fix/payload/common_syms/rtc.txt deleted file mode 100644 index 7aafbe65df..0000000000 --- a/berry_fix/payload/common_syms/rtc.txt +++ /dev/null @@ -1,2 +0,0 @@ -gTimeSinceBerryUpdate -gRtcUTCTime diff --git a/berry_fix/payload/constants/gba_constants.inc b/berry_fix/payload/constants/gba_constants.inc deleted file mode 100644 index 9d59c8fcdd..0000000000 --- a/berry_fix/payload/constants/gba_constants.inc +++ /dev/null @@ -1,490 +0,0 @@ - .set PSR_USR_MODE, 0x00000010 - .set PSR_FIQ_MODE, 0x00000011 - .set PSR_IRQ_MODE, 0x00000012 - .set PSR_SVC_MODE, 0x00000013 - .set PSR_ABT_MODE, 0x00000017 - .set PSR_UND_MODE, 0x0000001b - .set PSR_SYS_MODE, 0x0000001f - .set PSR_MODE_MASK, 0x0000001f - .set PSR_T_BIT, 0x00000020 - .set PSR_F_BIT, 0x00000040 - .set PSR_I_BIT, 0x00000080 - - .set EWRAM_START, 0x02000000 - .set EWRAM_END, EWRAM_START + 0x40000 - .set IWRAM_START, 0x03000000 - .set IWRAM_END, IWRAM_START + 0x8000 - - .set PLTT, 0x5000000 - .set BG_PLTT, PLTT - .set OBJ_PLTT, PLTT + 0x200 - - .set VRAM, 0x6000000 - .set BG_VRAM, VRAM - .set OBJ_VRAM0, VRAM + 0x10000 @ text-mode BG - .set OBJ_VRAM1, VRAM + 0x14000 @ bitmap-mode BG - - .set OAM, 0x7000000 - - .set SOUND_INFO_PTR, 0x3007FF0 - .set INTR_CHECK, 0x3007FF8 - .set INTR_VECTOR, 0x3007FFC - - .set INTR_FLAG_VBLANK, 1 << 0 - .set INTR_FLAG_HBLANK, 1 << 1 - .set INTR_FLAG_VCOUNT, 1 << 2 - .set INTR_FLAG_TIMER0, 1 << 3 - .set INTR_FLAG_TIMER1, 1 << 4 - .set INTR_FLAG_TIMER2, 1 << 5 - .set INTR_FLAG_TIMER3, 1 << 6 - .set INTR_FLAG_SERIAL, 1 << 7 - .set INTR_FLAG_DMA0, 1 << 8 - .set INTR_FLAG_DMA1, 1 << 9 - .set INTR_FLAG_DMA2, 1 << 10 - .set INTR_FLAG_DMA3, 1 << 11 - .set INTR_FLAG_KEYPAD, 1 << 12 - .set INTR_FLAG_GAMEPAK, 1 << 13 - - .set VCOUNT_VBLANK, 160 - .set TOTAL_SCANLINES, 228 - - .set REG_BASE, 0x4000000 @ I/O register base address - -@ I/O register offsets - .set OFFSET_REG_DISPCNT, 0x0 - .set OFFSET_REG_DISPSTAT, 0x4 - .set OFFSET_REG_VCOUNT, 0x6 - .set OFFSET_REG_BG0CNT, 0x8 - .set OFFSET_REG_BG1CNT, 0xa - .set OFFSET_REG_BG2CNT, 0xc - .set OFFSET_REG_BG3CNT, 0xe - .set OFFSET_REG_BG0HOFS, 0x10 - .set OFFSET_REG_BG0VOFS, 0x12 - .set OFFSET_REG_BG1HOFS, 0x14 - .set OFFSET_REG_BG1VOFS, 0x16 - .set OFFSET_REG_BG2HOFS, 0x18 - .set OFFSET_REG_BG2VOFS, 0x1a - .set OFFSET_REG_BG3HOFS, 0x1c - .set OFFSET_REG_BG3VOFS, 0x1e - .set OFFSET_REG_BG2PA, 0x20 - .set OFFSET_REG_BG2PB, 0x22 - .set OFFSET_REG_BG2PC, 0x24 - .set OFFSET_REG_BG2PD, 0x26 - .set OFFSET_REG_BG2X_L, 0x28 - .set OFFSET_REG_BG2X_H, 0x2a - .set OFFSET_REG_BG2Y_L, 0x2c - .set OFFSET_REG_BG2Y_H, 0x2e - .set OFFSET_REG_BG3PA, 0x30 - .set OFFSET_REG_BG3PB, 0x32 - .set OFFSET_REG_BG3PC, 0x34 - .set OFFSET_REG_BG3PD, 0x36 - .set OFFSET_REG_BG3X_L, 0x38 - .set OFFSET_REG_BG3X_H, 0x3a - .set OFFSET_REG_BG3Y_L, 0x3c - .set OFFSET_REG_BG3Y_H, 0x3e - .set OFFSET_REG_WIN0H, 0x40 - .set OFFSET_REG_WIN1H, 0x42 - .set OFFSET_REG_WIN0V, 0x44 - .set OFFSET_REG_WIN1V, 0x46 - .set OFFSET_REG_WININ, 0x48 - .set OFFSET_REG_WINOUT, 0x4a - .set OFFSET_REG_MOSAIC, 0x4c - .set OFFSET_REG_BLDCNT, 0x50 - .set OFFSET_REG_BLDALPHA, 0x52 - .set OFFSET_REG_BLDY, 0x54 - - .set OFFSET_REG_SOUND1CNT, 0x60 - .set OFFSET_REG_SOUND1CNT_L, 0x60 - .set OFFSET_REG_NR10, 0x60 - .set OFFSET_REG_SOUND1CNT_H, 0x62 - .set OFFSET_REG_NR11, 0x62 - .set OFFSET_REG_NR12, 0x63 - .set OFFSET_REG_SOUND1CNT_X, 0x64 - .set OFFSET_REG_NR13, 0x64 - .set OFFSET_REG_NR14, 0x65 - .set OFFSET_REG_SOUND2CNT, 0x68 - .set OFFSET_REG_SOUND2CNT_L, 0x68 - .set OFFSET_REG_NR21, 0x68 - .set OFFSET_REG_NR22, 0x69 - .set OFFSET_REG_SOUND2CNT_H, 0x6c - .set OFFSET_REG_NR23, 0x6c - .set OFFSET_REG_NR24, 0x6d - .set OFFSET_REG_SOUND3CNT, 0x70 - .set OFFSET_REG_SOUND3CNT_L, 0x70 - .set OFFSET_REG_NR30, 0x70 - .set OFFSET_REG_SOUND3CNT_H, 0x72 - .set OFFSET_REG_NR31, 0x72 - .set OFFSET_REG_NR32, 0x73 - .set OFFSET_REG_SOUND3CNT_X, 0x74 - .set OFFSET_REG_NR33, 0x74 - .set OFFSET_REG_NR34, 0x75 - .set OFFSET_REG_SOUND4CNT, 0x78 - .set OFFSET_REG_SOUND4CNT_L, 0x78 - .set OFFSET_REG_NR41, 0x78 - .set OFFSET_REG_NR42, 0x79 - .set OFFSET_REG_SOUND4CNT_H, 0x7c - .set OFFSET_REG_NR43, 0x7c - .set OFFSET_REG_NR44, 0x7d - .set OFFSET_REG_SOUNDCNT, 0x80 - .set OFFSET_REG_SOUNDCNT_L, 0x80 - .set OFFSET_REG_NR50, 0x80 - .set OFFSET_REG_NR51, 0x81 - .set OFFSET_REG_SOUNDCNT_H, 0x82 - .set OFFSET_REG_SOUNDCNT_X, 0x84 - .set OFFSET_REG_NR52, 0x84 - .set OFFSET_REG_SOUNDBIAS, 0x88 - .set OFFSET_REG_WAVE_RAM, 0x90 - .set OFFSET_REG_WAVE_RAM0, 0x90 - .set OFFSET_REG_WAVE_RAM0_L, 0x90 - .set OFFSET_REG_WAVE_RAM0_H, 0x92 - .set OFFSET_REG_WAVE_RAM1, 0x94 - .set OFFSET_REG_WAVE_RAM1_L, 0x94 - .set OFFSET_REG_WAVE_RAM1_H, 0x96 - .set OFFSET_REG_WAVE_RAM2, 0x98 - .set OFFSET_REG_WAVE_RAM2_L, 0x98 - .set OFFSET_REG_WAVE_RAM2_H, 0x9a - .set OFFSET_REG_WAVE_RAM3, 0x9c - .set OFFSET_REG_WAVE_RAM3_L, 0x9c - .set OFFSET_REG_WAVE_RAM3_H, 0x9e - .set OFFSET_REG_FIFO, 0xa0 - .set OFFSET_REG_FIFO_A, 0xa0 - .set OFFSET_REG_FIFO_A_L, 0xa0 - .set OFFSET_REG_FIFO_A_H, 0xa2 - .set OFFSET_REG_FIFO_B, 0xa4 - .set OFFSET_REG_FIFO_B_L, 0xa4 - .set OFFSET_REG_FIFO_B_H, 0xa6 - - .set OFFSET_REG_DMA0, 0xb0 - .set OFFSET_REG_DMA0SAD, 0xb0 - .set OFFSET_REG_DMA0SAD_L, 0xb0 - .set OFFSET_REG_DMA0SAD_H, 0xb2 - .set OFFSET_REG_DMA0DAD, 0xb4 - .set OFFSET_REG_DMA0DAD_L, 0xb4 - .set OFFSET_REG_DMA0DAD_H, 0xb6 - .set OFFSET_REG_DMA0CNT, 0xb8 - .set OFFSET_REG_DMA0CNT_L, 0xb8 - .set OFFSET_REG_DMA0CNT_H, 0xba - .set OFFSET_REG_DMA1, 0xbc - .set OFFSET_REG_DMA1SAD, 0xbc - .set OFFSET_REG_DMA1SAD_L, 0xbc - .set OFFSET_REG_DMA1SAD_H, 0xbe - .set OFFSET_REG_DMA1DAD, 0xc0 - .set OFFSET_REG_DMA1DAD_L, 0xc0 - .set OFFSET_REG_DMA1DAD_H, 0xc2 - .set OFFSET_REG_DMA1CNT, 0xc4 - .set OFFSET_REG_DMA1CNT_L, 0xc4 - .set OFFSET_REG_DMA1CNT_H, 0xc6 - .set OFFSET_REG_DMA2, 0xc8 - .set OFFSET_REG_DMA2SAD, 0xc8 - .set OFFSET_REG_DMA2SAD_L, 0xc8 - .set OFFSET_REG_DMA2SAD_H, 0xca - .set OFFSET_REG_DMA2DAD, 0xcc - .set OFFSET_REG_DMA2DAD_L, 0xcc - .set OFFSET_REG_DMA2DAD_H, 0xce - .set OFFSET_REG_DMA2CNT, 0xd0 - .set OFFSET_REG_DMA2CNT_L, 0xd0 - .set OFFSET_REG_DMA2CNT_H, 0xd2 - .set OFFSET_REG_DMA3, 0xd4 - .set OFFSET_REG_DMA3SAD, 0xd4 - .set OFFSET_REG_DMA3SAD_L, 0xd4 - .set OFFSET_REG_DMA3SAD_H, 0xd6 - .set OFFSET_REG_DMA3DAD, 0xd8 - .set OFFSET_REG_DMA3DAD_L, 0xd8 - .set OFFSET_REG_DMA3DAD_H, 0xda - .set OFFSET_REG_DMA3CNT, 0xdc - .set OFFSET_REG_DMA3CNT_L, 0xdc - .set OFFSET_REG_DMA3CNT_H, 0xde - - .set OFFSET_REG_TM0CNT, 0x100 - .set OFFSET_REG_TM0CNT_L, 0x100 - .set OFFSET_REG_TM0CNT_H, 0x102 - .set OFFSET_REG_TM1CNT, 0x104 - .set OFFSET_REG_TM1CNT_L, 0x104 - .set OFFSET_REG_TM1CNT_H, 0x106 - .set OFFSET_REG_TM2CNT, 0x108 - .set OFFSET_REG_TM2CNT_L, 0x108 - .set OFFSET_REG_TM2CNT_H, 0x10a - .set OFFSET_REG_TM3CNT, 0x10c - .set OFFSET_REG_TM3CNT_L, 0x10c - .set OFFSET_REG_TM3CNT_H, 0x10e - - .set OFFSET_REG_SIOCNT, 0x128 - .set OFFSET_REG_SIODATA8, 0x12a - .set OFFSET_REG_SIODATA32, 0x120 - .set OFFSET_REG_SIOMLT_SEND, 0x12a - .set OFFSET_REG_SIOMLT_RECV, 0x120 - .set OFFSET_REG_SIOMULTI0, 0x120 - .set OFFSET_REG_SIOMULTI1, 0x122 - .set OFFSET_REG_SIOMULTI2, 0x124 - .set OFFSET_REG_SIOMULTI3, 0x126 - - .set OFFSET_REG_KEYINPUT, 0x130 - .set OFFSET_REG_KEYCNT, 0x132 - - .set OFFSET_REG_RCNT, 0x134 - - .set OFFSET_REG_JOYCNT, 0x140 - .set OFFSET_REG_JOYSTAT, 0x158 - .set OFFSET_REG_JOY_RECV, 0x150 - .set OFFSET_REG_JOY_RECV_L, 0x150 - .set OFFSET_REG_JOY_RECV_H, 0x152 - .set OFFSET_REG_JOY_TRANS, 0x154 - .set OFFSET_REG_JOY_TRANS_L, 0x154 - .set OFFSET_REG_JOY_TRANS_H, 0x156 - - .set OFFSET_REG_IME, 0x208 - .set OFFSET_REG_IE, 0x200 - .set OFFSET_REG_IF, 0x202 - - .set OFFSET_REG_WAITCNT, 0x204 - -@ I/O register addresses - .set REG_DISPCNT, REG_BASE + OFFSET_REG_DISPCNT - .set REG_DISPSTAT, REG_BASE + OFFSET_REG_DISPSTAT - .set REG_VCOUNT, REG_BASE + OFFSET_REG_VCOUNT - .set REG_BG0CNT, REG_BASE + OFFSET_REG_BG0CNT - .set REG_BG1CNT, REG_BASE + OFFSET_REG_BG1CNT - .set REG_BG2CNT, REG_BASE + OFFSET_REG_BG2CNT - .set REG_BG3CNT, REG_BASE + OFFSET_REG_BG3CNT - .set REG_BG0HOFS, REG_BASE + OFFSET_REG_BG0HOFS - .set REG_BG0VOFS, REG_BASE + OFFSET_REG_BG0VOFS - .set REG_BG1HOFS, REG_BASE + OFFSET_REG_BG1HOFS - .set REG_BG1VOFS, REG_BASE + OFFSET_REG_BG1VOFS - .set REG_BG2HOFS, REG_BASE + OFFSET_REG_BG2HOFS - .set REG_BG2VOFS, REG_BASE + OFFSET_REG_BG2VOFS - .set REG_BG3HOFS, REG_BASE + OFFSET_REG_BG3HOFS - .set REG_BG3VOFS, REG_BASE + OFFSET_REG_BG3VOFS - .set REG_BG2PA, REG_BASE + OFFSET_REG_BG2PA - .set REG_BG2PB, REG_BASE + OFFSET_REG_BG2PB - .set REG_BG2PC, REG_BASE + OFFSET_REG_BG2PC - .set REG_BG2PD, REG_BASE + OFFSET_REG_BG2PD - .set REG_BG2X_L, REG_BASE + OFFSET_REG_BG2X_L - .set REG_BG2X_H, REG_BASE + OFFSET_REG_BG2X_H - .set REG_BG2Y_L, REG_BASE + OFFSET_REG_BG2Y_L - .set REG_BG2Y_H, REG_BASE + OFFSET_REG_BG2Y_H - .set REG_BG3PA, REG_BASE + OFFSET_REG_BG3PA - .set REG_BG3PB, REG_BASE + OFFSET_REG_BG3PB - .set REG_BG3PC, REG_BASE + OFFSET_REG_BG3PC - .set REG_BG3PD, REG_BASE + OFFSET_REG_BG3PD - .set REG_BG3X_L, REG_BASE + OFFSET_REG_BG3X_L - .set REG_BG3X_H, REG_BASE + OFFSET_REG_BG3X_H - .set REG_BG3Y_L, REG_BASE + OFFSET_REG_BG3Y_L - .set REG_BG3Y_H, REG_BASE + OFFSET_REG_BG3Y_H - .set REG_WIN0H, REG_BASE + OFFSET_REG_WIN0H - .set REG_WIN1H, REG_BASE + OFFSET_REG_WIN1H - .set REG_WIN0V, REG_BASE + OFFSET_REG_WIN0V - .set REG_WIN1V, REG_BASE + OFFSET_REG_WIN1V - .set REG_WININ, REG_BASE + OFFSET_REG_WININ - .set REG_WINOUT, REG_BASE + OFFSET_REG_WINOUT - .set REG_MOSAIC, REG_BASE + OFFSET_REG_MOSAIC - .set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT - .set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA - .set REG_BLDY, REG_BASE + OFFSET_REG_BLDY - - .set REG_SOUND1CNT, REG_BASE + OFFSET_REG_SOUND1CNT - .set REG_SOUND1CNT_L, REG_BASE + OFFSET_REG_SOUND1CNT_L - .set REG_NR10, REG_BASE + OFFSET_REG_NR10 - .set REG_SOUND1CNT_H, REG_BASE + OFFSET_REG_SOUND1CNT_H - .set REG_NR11, REG_BASE + OFFSET_REG_NR11 - .set REG_NR12, REG_BASE + OFFSET_REG_NR12 - .set REG_SOUND1CNT_X, REG_BASE + OFFSET_REG_SOUND1CNT_X - .set REG_NR13, REG_BASE + OFFSET_REG_NR13 - .set REG_NR14, REG_BASE + OFFSET_REG_NR14 - .set REG_SOUND2CNT, REG_BASE + OFFSET_REG_SOUND2CNT - .set REG_SOUND2CNT_L, REG_BASE + OFFSET_REG_SOUND2CNT_L - .set REG_NR21, REG_BASE + OFFSET_REG_NR21 - .set REG_NR22, REG_BASE + OFFSET_REG_NR22 - .set REG_SOUND2CNT_H, REG_BASE + OFFSET_REG_SOUND2CNT_H - .set REG_NR23, REG_BASE + OFFSET_REG_NR23 - .set REG_NR24, REG_BASE + OFFSET_REG_NR24 - .set REG_SOUND3CNT, REG_BASE + OFFSET_REG_SOUND3CNT - .set REG_SOUND3CNT_L, REG_BASE + OFFSET_REG_SOUND3CNT_L - .set REG_NR30, REG_BASE + OFFSET_REG_NR30 - .set REG_SOUND3CNT_H, REG_BASE + OFFSET_REG_SOUND3CNT_H - .set REG_NR31, REG_BASE + OFFSET_REG_NR31 - .set REG_NR32, REG_BASE + OFFSET_REG_NR32 - .set REG_SOUND3CNT_X, REG_BASE + OFFSET_REG_SOUND3CNT_X - .set REG_NR33, REG_BASE + OFFSET_REG_NR33 - .set REG_NR34, REG_BASE + OFFSET_REG_NR34 - .set REG_SOUND4CNT, REG_BASE + OFFSET_REG_SOUND4CNT - .set REG_SOUND4CNT_L, REG_BASE + OFFSET_REG_SOUND4CNT_L - .set REG_NR41, REG_BASE + OFFSET_REG_NR41 - .set REG_NR42, REG_BASE + OFFSET_REG_NR42 - .set REG_SOUND4CNT_H, REG_BASE + OFFSET_REG_SOUND4CNT_H - .set REG_NR43, REG_BASE + OFFSET_REG_NR43 - .set REG_NR44, REG_BASE + OFFSET_REG_NR44 - .set REG_SOUNDCNT, REG_BASE + OFFSET_REG_SOUNDCNT - .set REG_SOUNDCNT_L, REG_BASE + OFFSET_REG_SOUNDCNT_L - .set REG_NR50, REG_BASE + OFFSET_REG_NR50 - .set REG_NR51, REG_BASE + OFFSET_REG_NR51 - .set REG_SOUNDCNT_H, REG_BASE + OFFSET_REG_SOUNDCNT_H - .set REG_SOUNDCNT_X, REG_BASE + OFFSET_REG_SOUNDCNT_X - .set REG_NR52, REG_BASE + OFFSET_REG_NR52 - .set REG_SOUNDBIAS, REG_BASE + OFFSET_REG_SOUNDBIAS - .set REG_WAVE_RAM, REG_BASE + OFFSET_REG_WAVE_RAM - .set REG_WAVE_RAM0, REG_BASE + OFFSET_REG_WAVE_RAM0 - .set REG_WAVE_RAM0_L, REG_BASE + OFFSET_REG_WAVE_RAM0_L - .set REG_WAVE_RAM0_H, REG_BASE + OFFSET_REG_WAVE_RAM0_H - .set REG_WAVE_RAM1, REG_BASE + OFFSET_REG_WAVE_RAM1 - .set REG_WAVE_RAM1_L, REG_BASE + OFFSET_REG_WAVE_RAM1_L - .set REG_WAVE_RAM1_H, REG_BASE + OFFSET_REG_WAVE_RAM1_H - .set REG_WAVE_RAM2, REG_BASE + OFFSET_REG_WAVE_RAM2 - .set REG_WAVE_RAM2_L, REG_BASE + OFFSET_REG_WAVE_RAM2_L - .set REG_WAVE_RAM2_H, REG_BASE + OFFSET_REG_WAVE_RAM2_H - .set REG_WAVE_RAM3, REG_BASE + OFFSET_REG_WAVE_RAM3 - .set REG_WAVE_RAM3_L, REG_BASE + OFFSET_REG_WAVE_RAM3_L - .set REG_WAVE_RAM3_H, REG_BASE + OFFSET_REG_WAVE_RAM3_H - .set REG_FIFO, REG_BASE + OFFSET_REG_FIFO - .set REG_FIFO_A, REG_BASE + OFFSET_REG_FIFO_A - .set REG_FIFO_A_L, REG_BASE + OFFSET_REG_FIFO_A_L - .set REG_FIFO_A_H, REG_BASE + OFFSET_REG_FIFO_A_H - .set REG_FIFO_B, REG_BASE + OFFSET_REG_FIFO_B - .set REG_FIFO_B_L, REG_BASE + OFFSET_REG_FIFO_B_L - .set REG_FIFO_B_H, REG_BASE + OFFSET_REG_FIFO_B_H - - .set REG_DMA0, REG_BASE + OFFSET_REG_DMA0 - .set REG_DMA0SAD, REG_BASE + OFFSET_REG_DMA0SAD - .set REG_DMA0SAD_L, REG_BASE + OFFSET_REG_DMA0SAD_L - .set REG_DMA0SAD_H, REG_BASE + OFFSET_REG_DMA0SAD_H - .set REG_DMA0DAD, REG_BASE + OFFSET_REG_DMA0DAD - .set REG_DMA0DAD_L, REG_BASE + OFFSET_REG_DMA0DAD_L - .set REG_DMA0DAD_H, REG_BASE + OFFSET_REG_DMA0DAD_H - .set REG_DMA0CNT, REG_BASE + OFFSET_REG_DMA0CNT - .set REG_DMA0CNT_L, REG_BASE + OFFSET_REG_DMA0CNT_L - .set REG_DMA0CNT_H, REG_BASE + OFFSET_REG_DMA0CNT_H - .set REG_DMA1, REG_BASE + OFFSET_REG_DMA1 - .set REG_DMA1SAD, REG_BASE + OFFSET_REG_DMA1SAD - .set REG_DMA1SAD_L, REG_BASE + OFFSET_REG_DMA1SAD_L - .set REG_DMA1SAD_H, REG_BASE + OFFSET_REG_DMA1SAD_H - .set REG_DMA1DAD, REG_BASE + OFFSET_REG_DMA1DAD - .set REG_DMA1DAD_L, REG_BASE + OFFSET_REG_DMA1DAD_L - .set REG_DMA1DAD_H, REG_BASE + OFFSET_REG_DMA1DAD_H - .set REG_DMA1CNT, REG_BASE + OFFSET_REG_DMA1CNT - .set REG_DMA1CNT_L, REG_BASE + OFFSET_REG_DMA1CNT_L - .set REG_DMA1CNT_H, REG_BASE + OFFSET_REG_DMA1CNT_H - .set REG_DMA2, REG_BASE + OFFSET_REG_DMA2 - .set REG_DMA2SAD, REG_BASE + OFFSET_REG_DMA2SAD - .set REG_DMA2SAD_L, REG_BASE + OFFSET_REG_DMA2SAD_L - .set REG_DMA2SAD_H, REG_BASE + OFFSET_REG_DMA2SAD_H - .set REG_DMA2DAD, REG_BASE + OFFSET_REG_DMA2DAD - .set REG_DMA2DAD_L, REG_BASE + OFFSET_REG_DMA2DAD_L - .set REG_DMA2DAD_H, REG_BASE + OFFSET_REG_DMA2DAD_H - .set REG_DMA2CNT, REG_BASE + OFFSET_REG_DMA2CNT - .set REG_DMA2CNT_L, REG_BASE + OFFSET_REG_DMA2CNT_L - .set REG_DMA2CNT_H, REG_BASE + OFFSET_REG_DMA2CNT_H - .set REG_DMA3, REG_BASE + OFFSET_REG_DMA3 - .set REG_DMA3SAD, REG_BASE + OFFSET_REG_DMA3SAD - .set REG_DMA3SAD_L, REG_BASE + OFFSET_REG_DMA3SAD_L - .set REG_DMA3SAD_H, REG_BASE + OFFSET_REG_DMA3SAD_H - .set REG_DMA3DAD, REG_BASE + OFFSET_REG_DMA3DAD - .set REG_DMA3DAD_L, REG_BASE + OFFSET_REG_DMA3DAD_L - .set REG_DMA3DAD_H, REG_BASE + OFFSET_REG_DMA3DAD_H - .set REG_DMA3CNT, REG_BASE + OFFSET_REG_DMA3CNT - .set REG_DMA3CNT_L, REG_BASE + OFFSET_REG_DMA3CNT_L - .set REG_DMA3CNT_H, REG_BASE + OFFSET_REG_DMA3CNT_H - - .set REG_TM0CNT, REG_BASE + OFFSET_REG_TM0CNT - .set REG_TM0CNT_L, REG_BASE + OFFSET_REG_TM0CNT_L - .set REG_TM0CNT_H, REG_BASE + OFFSET_REG_TM0CNT_H - .set REG_TM1CNT, REG_BASE + OFFSET_REG_TM1CNT - .set REG_TM1CNT_L, REG_BASE + OFFSET_REG_TM1CNT_L - .set REG_TM1CNT_H, REG_BASE + OFFSET_REG_TM1CNT_H - .set REG_TM2CNT, REG_BASE + OFFSET_REG_TM2CNT - .set REG_TM2CNT_L, REG_BASE + OFFSET_REG_TM2CNT_L - .set REG_TM2CNT_H, REG_BASE + OFFSET_REG_TM2CNT_H - .set REG_TM3CNT, REG_BASE + OFFSET_REG_TM3CNT - .set REG_TM3CNT_L, REG_BASE + OFFSET_REG_TM3CNT_L - .set REG_TM3CNT_H, REG_BASE + OFFSET_REG_TM3CNT_H - - .set REG_SIOCNT, REG_BASE + OFFSET_REG_SIOCNT - .set REG_SIODATA8, REG_BASE + OFFSET_REG_SIODATA8 - .set REG_SIODATA32, REG_BASE + OFFSET_REG_SIODATA32 - .set REG_SIOMLT_SEND, REG_BASE + OFFSET_REG_SIOMLT_SEND - .set REG_SIOMLT_RECV, REG_BASE + OFFSET_REG_SIOMLT_RECV - .set REG_SIOMULTI0, REG_BASE + OFFSET_REG_SIOMULTI0 - .set REG_SIOMULTI1, REG_BASE + OFFSET_REG_SIOMULTI1 - .set REG_SIOMULTI2, REG_BASE + OFFSET_REG_SIOMULTI2 - .set REG_SIOMULTI3, REG_BASE + OFFSET_REG_SIOMULTI3 - - .set REG_KEYINPUT, REG_BASE + OFFSET_REG_KEYINPUT - .set REG_KEYCNT, REG_BASE + OFFSET_REG_KEYCNT - - .set REG_RCNT, REG_BASE + OFFSET_REG_RCNT - - .set REG_JOYCNT, REG_BASE + OFFSET_REG_JOYCNT - .set REG_JOYSTAT, REG_BASE + OFFSET_REG_JOYSTAT - .set REG_JOY_RECV, REG_BASE + OFFSET_REG_JOY_RECV - .set REG_JOY_RECV_L, REG_BASE + OFFSET_REG_JOY_RECV_L - .set REG_JOY_RECV_H, REG_BASE + OFFSET_REG_JOY_RECV_H - .set REG_JOY_TRANS, REG_BASE + OFFSET_REG_JOY_TRANS - .set REG_JOY_TRANS_L, REG_BASE + OFFSET_REG_JOY_TRANS_L - .set REG_JOY_TRANS_H, REG_BASE + OFFSET_REG_JOY_TRANS_H - - .set REG_IME, REG_BASE + OFFSET_REG_IME - .set REG_IE, REG_BASE + OFFSET_REG_IE - .set REG_IF, REG_BASE + OFFSET_REG_IF - - .set REG_WAITCNT, REG_BASE + OFFSET_REG_WAITCNT - -@ DMA register constants - - .set DMA_DEST_INC, 0x0000 - .set DMA_DEST_DEC, 0x0020 - .set DMA_DEST_FIXED, 0x0040 - .set DMA_DEST_RELOAD, 0x0060 - .set DMA_SRC_INC, 0x0000 - .set DMA_SRC_DEC, 0x0080 - .set DMA_SRC_FIXED, 0x0100 - .set DMA_REPEAT, 0x0200 - .set DMA_16BIT, 0x0000 - .set DMA_32BIT, 0x0400 - .set DMA_DREQ_ON, 0x0800 - .set DMA_START_NOW, 0x0000 - .set DMA_START_VBLANK, 0x1000 - .set DMA_START_HBLANK, 0x2000 - .set DMA_START_SPECIAL, 0x3000 - .set DMA_INTR_ENABLE, 0x4000 - .set DMA_ENABLE, 0x8000 - -@ OAM attribute constants - - .set OAM_OBJ_NORMAL, 0x00000000 - .set OAM_OBJ_BLEND, 0x00000400 - .set OAM_OBJ_WINDOW, 0x00000800 - - .set OAM_AFFINE_NONE, 0x00000000 - .set OAM_AFFINE_NORMAL_SIZE, 0x00000100 - .set OAM_OBJ_DISABLED, 0x00000200 - .set OAM_AFFINE_DOUBLE_SIZE, 0x00000300 - - .set OAM_MOSAIC_OFF, 0x00000000 - .set OAM_MOSAIC_ON, 0x00001000 - - .set OAM_4BPP, 0x00000000 - .set OAM_8BPP, 0x00002000 - - .set OAM_H_FLIP, 0x10000000 - .set OAM_V_FLIP, 0x20000000 - - .set OAM_SQUARE, 0x00000000 - .set OAM_H_RECTANGLE, 0x00004000 - .set OAM_V_RECTANGLE, 0x00008000 - .set OAM_SIZE_0, 0x00000000 - .set OAM_SIZE_1, 0x40000000 - .set OAM_SIZE_2, 0x80000000 - .set OAM_SIZE_3, 0xc0000000 - - .set OAM_SIZE_8x8, OAM_SIZE_0 | OAM_SQUARE - .set OAM_SIZE_16x16, OAM_SIZE_1 | OAM_SQUARE - .set OAM_SIZE_32x32, OAM_SIZE_2 | OAM_SQUARE - .set OAM_SIZE_64x64, OAM_SIZE_3 | OAM_SQUARE - - .set OAM_SIZE_16x8, OAM_SIZE_0 | OAM_H_RECTANGLE - .set OAM_SIZE_32x8, OAM_SIZE_1 | OAM_H_RECTANGLE - .set OAM_SIZE_32x16, OAM_SIZE_2 | OAM_H_RECTANGLE - .set OAM_SIZE_64x32, OAM_SIZE_3 | OAM_H_RECTANGLE - - .set OAM_SIZE_8x16, OAM_SIZE_0 | OAM_V_RECTANGLE - .set OAM_SIZE_8x32, OAM_SIZE_1 | OAM_V_RECTANGLE - .set OAM_SIZE_16x32, OAM_SIZE_2 | OAM_V_RECTANGLE - .set OAM_SIZE_32x64, OAM_SIZE_3 | OAM_V_RECTANGLE diff --git a/berry_fix/payload/graphics/debug_digits.png b/berry_fix/payload/graphics/debug_digits.png deleted file mode 100644 index edf0d36c96..0000000000 Binary files a/berry_fix/payload/graphics/debug_digits.png and /dev/null differ diff --git a/berry_fix/payload/graphics/msg_box.png b/berry_fix/payload/graphics/msg_box.png deleted file mode 100644 index 00d1bbe37e..0000000000 Binary files a/berry_fix/payload/graphics/msg_box.png and /dev/null differ diff --git a/berry_fix/payload/graphics/msg_box.tilemap b/berry_fix/payload/graphics/msg_box.tilemap deleted file mode 100644 index 5b82401bad..0000000000 Binary files a/berry_fix/payload/graphics/msg_box.tilemap and /dev/null differ diff --git a/berry_fix/payload/include/constants/game_stat.h b/berry_fix/payload/include/constants/game_stat.h deleted file mode 100644 index 47d703d853..0000000000 --- a/berry_fix/payload/include/constants/game_stat.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef GUARD_CONSTANTS_GAME_STAT_H -#define GUARD_CONSTANTS_GAME_STAT_H - -#define GAME_STAT_SAVED_GAME 0 -#define GAME_STAT_FIRST_HOF_PLAY_TIME 1 -#define GAME_STAT_STARTED_TRENDS 2 -#define GAME_STAT_PLANTED_BERRIES 3 -#define GAME_STAT_TRADED_BIKES 4 -#define GAME_STAT_STEPS 5 -#define GAME_STAT_GOT_INTERVIEWED 6 -#define GAME_STAT_TOTAL_BATTLES 7 -#define GAME_STAT_WILD_BATTLES 8 -#define GAME_STAT_TRAINER_BATTLES 9 -#define GAME_STAT_ENTERED_HOF 10 -#define GAME_STAT_POKEMON_CAPTURES 11 -#define GAME_STAT_FISHING_CAPTURES 12 -#define GAME_STAT_HATCHED_EGGS 13 -#define GAME_STAT_EVOLVED_POKEMON 14 -#define GAME_STAT_USED_POKECENTER 15 -#define GAME_STAT_RESTED_AT_HOME 16 -#define GAME_STAT_ENTERED_SAFARI_ZONE 17 -#define GAME_STAT_USED_CUT 18 -#define GAME_STAT_USED_ROCK_SMASH 19 -#define GAME_STAT_MOVED_SECRET_BASE 20 -#define GAME_STAT_POKEMON_TRADES 21 -#define GAME_STAT_UNKNOWN_22 22 -#define GAME_STAT_LINK_BATTLE_WINS 23 -#define GAME_STAT_LINK_BATTLE_LOSSES 24 -#define GAME_STAT_LINK_BATTLE_DRAWS 25 -#define GAME_STAT_USED_SPLASH 26 -#define GAME_STAT_USED_STRUGGLE 27 -#define GAME_STAT_SLOT_JACKPOTS 28 -#define GAME_STAT_CONSECUTIVE_ROULETTE_WINS 29 -#define GAME_STAT_ENTERED_BATTLE_TOWER 30 -#define GAME_STAT_UNKNOWN_31 31 -#define GAME_STAT_BATTLE_TOWER_BEST_STREAK 32 -#define GAME_STAT_POKEBLOCKS 33 -#define GAME_STAT_POKEBLOCKS_WITH_FRIENDS 34 -#define GAME_STAT_WON_LINK_CONTEST 35 -#define GAME_STAT_ENTERED_CONTEST 36 -#define GAME_STAT_WON_CONTEST 37 -#define GAME_STAT_SHOPPED 38 -#define GAME_STAT_USED_ITEMFINDER 39 -#define GAME_STAT_GOT_RAINED_ON 40 -#define GAME_STAT_CHECKED_POKEDEX 41 -#define GAME_STAT_RECEIVED_RIBBONS 42 -#define GAME_STAT_JUMPED_DOWN_LEDGES 43 -#define GAME_STAT_WATCHED_TV 44 -#define GAME_STAT_CHECKED_CLOCK 45 -#define GAME_STAT_WON_POKEMON_LOTTERY 46 -#define GAME_STAT_USED_DAYCARE 47 -#define GAME_STAT_RODE_CABLE_CAR 48 -#define GAME_STAT_ENTERED_HOT_SPRINGS 49 -#define NUM_GAME_STATS 50 - -#endif // GUARD_CONSTANTS_GAME_STAT_H diff --git a/berry_fix/payload/include/constants/vars.h b/berry_fix/payload/include/constants/vars.h deleted file mode 100644 index 4b40c1d8c3..0000000000 --- a/berry_fix/payload/include/constants/vars.h +++ /dev/null @@ -1,196 +0,0 @@ -#ifndef GUARD_CONSTANTS_VARS_H -#define GUARD_CONSTANTS_VARS_H - -#define VAR_0x3F20 0x3F20 - -#define VARS_START 0x4000 - -// temporary vars -// The first 0x10 vars are are temporary--they are cleared every time a map is loaded. -#define VAR_TEMP_0 0x4000 -#define VAR_TEMP_1 0x4001 -#define VAR_TEMP_2 0x4002 -#define VAR_TEMP_3 0x4003 -#define VAR_TEMP_4 0x4004 -#define VAR_TEMP_5 0x4005 -#define VAR_TEMP_6 0x4006 -#define VAR_TEMP_7 0x4007 -#define VAR_TEMP_8 0x4008 -#define VAR_TEMP_9 0x4009 -#define VAR_TEMP_A 0x400A -#define VAR_TEMP_B 0x400B -#define VAR_TEMP_C 0x400C -#define VAR_TEMP_D 0x400D -#define VAR_TEMP_E 0x400E -#define VAR_TEMP_F 0x400F - -// object gfx id vars -// These 0x10 vars are used to dynamically control a event object's sprite. -// For example, the rival's sprite id is dynamically set based on the player's gender. -// See VarGetEventObjectGraphicsId(). -#define VAR_OBJ_GFX_ID_0 0x4010 -#define VAR_OBJ_GFX_ID_1 0x4011 -#define VAR_OBJ_GFX_ID_2 0x4012 -#define VAR_OBJ_GFX_ID_3 0x4013 -#define VAR_OBJ_GFX_ID_4 0x4014 -#define VAR_OBJ_GFX_ID_5 0x4015 -#define VAR_OBJ_GFX_ID_6 0x4016 -#define VAR_OBJ_GFX_ID_7 0x4017 -#define VAR_OBJ_GFX_ID_8 0x4018 -#define VAR_OBJ_GFX_ID_9 0x4019 -#define VAR_OBJ_GFX_ID_A 0x401A -#define VAR_OBJ_GFX_ID_B 0x401B -#define VAR_OBJ_GFX_ID_C 0x401C -#define VAR_OBJ_GFX_ID_D 0x401D -#define VAR_OBJ_GFX_ID_E 0x401E -#define VAR_OBJ_GFX_ID_F 0x401F - -// general purpose vars -#define VAR_RECYCLE_GOODS 0x4020 -#define VAR_REPEL_STEP_COUNT 0x4021 -#define VAR_ICE_STEP_COUNT 0x4022 -#define VAR_STARTER_MON 0x4023 // 0=Treecko, 1=Torchic, 2=Mudkip -#define VAR_MIRAGE_RND_H 0x4024 -#define VAR_MIRAGE_RND_L 0x4025 -#define VAR_SECRET_BASE_MAP 0x4026 -#define VAR_CYCLING_ROAD_RECORD_COLLISIONS 0x4027 -#define VAR_CYCLING_ROAD_RECORD_TIME_L 0x4028 -#define VAR_CYCLING_ROAD_RECORD_TIME_H 0x4029 -#define VAR_HAPPINESS_STEP_COUNTER 0x402A -#define VAR_POISON_STEP_COUNTER 0x402B -#define VAR_RESET_RTC_ENABLE 0x402C -#define VAR_ENIGMA_BERRY_AVAILABLE 0x402D - -#define VAR_DAYS 0x4040 -#define VAR_FANCLUB_UNKNOWN_1 0x4041 // TODO: document these two fanclub vars -#define VAR_FANCLUB_UNKNOWN_2 0x4042 -#define VAR_DEPT_STORE_FLOOR 0x4043 -#define VAR_TRICK_HOUSE_ROOMS_COMPLETED 0x4044 -#define VAR_LOTTERY_PRIZE 0x4045 -#define VAR_NATIONAL_DEX 0x4046 -#define VAR_SHROOMISH_SIZE_RECORD 0x4047 -#define VAR_ASH_GATHER_COUNT 0x4048 -#define VAR_BIRCH_STATE 0x4049 -#define VAR_CRUISE_STEP_COUNT 0x404A -#define VAR_LOTTERY_RND_L 0x404B -#define VAR_LOTTERY_RND_H 0x404C - -#define VAR_BARBOACH_SIZE_RECORD 0x404F -#define VAR_LITTLEROOT_STATE 0x4050 -#define VAR_ROUTE102_ACCESSIBLE 0x4051 - -#define VAR_LAVARIDGE_RIVAL_STATE 0x4053 -#define VAR_CURRENT_SECRET_BASE 0x4054 - -#define VAR_PETALBURG_STATE 0x4057 -#define VAR_SLATEPORT_STATE 0x4058 - -#define VAR_RUSTBORO_STATE 0x405A - -#define VAR_SOOTOPOLIS_STATE 0x405E - -#define VAR_ROUTE101_STATE 0x4060 - -#define VAR_ROUTE103_STATE 0x4062 - -#define VAR_ROUTE110_STATE 0x4069 - -#define VAR_ROUTE116_STATE 0x406F - -#define VAR_ROUTE118_STATE 0x4071 -#define VAR_ROUTE119_STATE 0x4072 - -#define VAR_ROUTE121_STATE 0x4074 -#define VAR_ROUTE128_STATE 0x407B - -#define VAR_LITTLEROOT_HOUSES_STATE 0x4082 // TODO: needs more investigation - -#define VAR_BIRCH_LAB_STATE 0x4084 -#define VAR_PETALBURG_GYM_STATE 0x4085 -#define VAR_LINK_CONTEST_ROOM_STATE 0x4086 -#define VAR_CABLE_CLUB_STATE 0x4087 -#define VAR_CONTEST_LOCATION 0x4088 -#define VAR_MAP_SCENE_SIX_ISLAND_POKEMON_CENTER_1F 0x4089 // TODO: related to decorations -#define VAR_CONTEST_PRIZE_PICKUP 0x408A - -#define VAR_LITTLEROOT_HOUSES_STATE_2 0x408C // TODO: needs more investigation -#define VAR_LITTLEROOT_RIVAL_STATE 0x408D -#define VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE 0x408E -#define VAR_DEVON_CORP_3F_STATE 0x408F -#define VAR_BRINEY_HOUSE_STATE 0x4090 - -#define VAR_LITTLEROOT_INTRO_STATE 0x4092 -#define VAR_MAUVILLE_GYM_STATE 0x4093 -#define VAR_LILYCOVE_MUSEUM_2F_STATE 0x4094 -#define VAR_LILYCOVE_FAN_CLUB_STATE 0x4095 -#define VAR_BRINEY_LOCATION 0x4096 -#define VAR_0x4097 0x4097 // TODO: related to creating new secret base -#define VAR_PETALBURG_WOODS_STATE 0x4098 -#define VAR_LILYCOVE_CONTEST_LOBBY_STATE 0x4099 -#define VAR_RUSTURF_TUNNEL_STATE 0x409a -#define VAR_CAVE_OF_ORIGIN_B4F_STATE 0x409B -#define VAR_ELITE_4_STATE 0x409C - -#define VAR_SLATEPORT_HARBOR_STATE 0x40A0 - -#define VAR_SEAFLOOR_CAVERN_STATE 0x40A2 -#define VAR_CABLE_CAR_STATION_STATE 0x40A3 -#define VAR_SAFARI_ZONE_STATE 0x40A4 -#define VAR_TRICK_HOUSE_ENTRANCE_STATE 0x40A5 -#define VAR_TRICK_HOUSE_ENTRANCE_STATE_2 0x40A6 -#define VAR_TRICK_HOUSE_ENTRANCE_STATE_3 0x40A7 - -#define VAR_CYCLING_CHALLENGE_STATE 0x40A9 -#define VAR_SLATEPORT_MUSEUM_1F_STATE 0x40AA -#define VAR_TRICK_HOUSE_PUZZLE_1_STATE 0x40AB -#define VAR_TRICK_HOUSE_PUZZLE_2_STATE 0x40AC -#define VAR_TRICK_HOUSE_PUZZLE_3_STATE 0x40AD -#define VAR_TRICK_HOUSE_PUZZLE_4_STATE 0x40AE -#define VAR_TRICK_HOUSE_PUZZLE_5_STATE 0x40AF -#define VAR_TRICK_HOUSE_PUZZLE_6_STATE 0x40B0 -#define VAR_TRICK_HOUSE_PUZZLE_7_STATE 0x40B1 -#define VAR_TRICK_HOUSE_PUZZLE_8_STATE 0x40B2 -#define VAR_WEATHER_INSTITUTE_STATE 0x40B3 -#define VAR_PORTHOLE_STATE 0x40B4 -#define VAR_TRICK_HOUSE_STATE 0x40B5 // TODO: needs some further investigation -#define VAR_TRICK_HOUSE_PUZZLE_7_STATE_2 0x40B6 -#define VAR_SLATEPORT_FAN_CLUB_STATE 0x40B7 - -#define VAR_MT_PYRE_STATE 0x40B9 -#define VAR_NEW_MAUVILLE_STATE 0x40BA - -#define VAR_BRAVO_TRAINER_BATTLE_TOWER_ON 0x40BC -#define VAR_JAGGED_PASS_VOLCANIC_ASH_WEATHER 0x40BD -#define VAR_GLASS_WORKSHOP_STATE 0x40BE -#define VAR_METEOR_FALLS_STATE 0x40BF -#define VAR_GAME_CORNER_STATE 0x40C0 -#define VAR_TRICK_HOUSE_PRIZE_PICKUP 0x40C1 -#define VAR_PACIFIDLOG_TM_RECEIVED_DAY 0x40C2 -#define VAR_VICTORY_ROAD_1F_STATE 0x40C3 -#define VAR_FOSSIL_RESURRECTION_STATE 0x40C4 -#define VAR_WHICH_FOSSIL_REVIVED 0x40C5 -#define VAR_STEVENS_HOUSE_STATE 0x40C6 -#define VAR_OLDALE_STATE 0x40C7 - -// special vars -// They are commonly used as parameters to commands, or return values from commands. -#define VAR_SPECIAL_0 0x8000 -#define VAR_SPECIAL_1 0x8001 -#define VAR_SPECIAL_2 0x8002 -#define VAR_SPECIAL_3 0x8003 -#define VAR_SPECIAL_4 0x8004 -#define VAR_SPECIAL_5 0x8005 -#define VAR_SPECIAL_6 0x8006 -#define VAR_SPECIAL_7 0x8007 -#define VAR_SPECIAL_8 0x8008 -#define VAR_SPECIAL_9 0x8009 -#define VAR_SPECIAL_A 0x800A -#define VAR_SPECIAL_B 0x800B -#define FACING 0x800C -#define RESULT 0x800D -#define ITEM_ID 0x800E -#define LAST_TALKED 0x800F -#define CONTEST_RANK 0x8010 -#define CONTEST_CATEGORY 0x8011 - -#endif // GUARD_CONSTANTS_VARS_H diff --git a/berry_fix/payload/include/flash.h b/berry_fix/payload/include/flash.h deleted file mode 100644 index 7fc35896d0..0000000000 --- a/berry_fix/payload/include/flash.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef GUARD_FLASH_H -#define GUARD_FLASH_H - -#include "gba/gba.h" - -enum -{ - SECTOR_DAMAGED, - SECTOR_OK, - SECTOR_CHECK, // unused -}; - -enum MsgBoxUpdateMessage -{ - MSGBOX_WILL_NOW_UPDATE = 0, - MSGBOX_HAS_BEEN_UPDATED, - MSGBOX_UNABLE_TO_UPDATE, - MSGBOX_NO_NEED_TO_UPDATE, - MSGBOX_UPDATING -}; - -struct SaveSector -{ - u8 data[0xFF4]; - u16 id; - u16 checksum; - u32 signature; - u32 counter; -}; // size is 0x1000 - -// headless save section? -struct UnkSaveSection -{ - u8 data[0xFF4]; - u32 signature; -}; // size is 0xFF8 - -#define eSaveSection ((struct SaveSector *)0x2020000) - -#define NUM_SECTORS_PER_SAVE_SLOT 14 // Number of sectors occupied by a save slot -#define FILE_SIGNATURE 0x08012025 - -#define SAVE_STATUS_EMPTY 0 -#define SAVE_STATUS_OK 1 -#define SAVE_STATUS_NO_FLASH 4 -#define SAVE_STATUS_ERROR 0xFF - -bool32 flash_maincb_ident_is_valid(void); -bool8 flash_maincb_read_save(u32); -void msg_load_gfx(void); -void msg_display(enum MsgBoxUpdateMessage); -bool32 flash_maincb_check_need_reset_pacifidlog_tm(void); -bool32 flash_maincb_reset_pacifidlog_tm(void); - -#endif //GUARD_FLASH_H diff --git a/berry_fix/payload/include/gba/defines.h b/berry_fix/payload/include/gba/defines.h deleted file mode 100644 index 4037af5846..0000000000 --- a/berry_fix/payload/include/gba/defines.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef GUARD_GBA_DEFINES_H -#define GUARD_GBA_DEFINES_H - -#include - -#define TRUE 1 -#define FALSE 0 - -#define BSS_DATA __attribute__((section(".bss"))) -#define IWRAM_DATA __attribute__((section("iwram_data"))) -#define EWRAM_DATA __attribute__((section("ewram_data"))) -#define UNUSED __attribute__((unused)) -#define NAKED __attribute__((naked)) - -#define ALIGNED(n) __attribute__((aligned(n))) - -#define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0) -#define INTR_CHECK (*(u16 *)0x3007FF8) -#define INTR_VECTOR (*(void **)0x3007FFC) - -#define EWRAM_START 0x02000000 -#define EWRAM_END (EWRAM_START + 0x40000) -#define IWRAM_START 0x03000000 -#define IWRAM_END (IWRAM_START + 0x8000) - -#define PLTT 0x5000000 -#define PLTT_SIZE 0x400 - -#define BG_PLTT PLTT -#define BG_PLTT_SIZE 0x200 - -#define OBJ_PLTT (PLTT + 0x200) -#define OBJ_PLTT_SIZE 0x200 - -#define VRAM 0x6000000 -#define VRAM_SIZE 0x18000 - -#define BG_VRAM VRAM -#define BG_VRAM_SIZE 0x10000 -#define BG_CHAR_SIZE 0x4000 -#define BG_SCREEN_SIZE 0x800 -#define BG_CHAR_ADDR(n) (void *)(BG_VRAM + (0x4000 * (n))) -#define BG_SCREEN_ADDR(n) (void *)(BG_VRAM + (0x800 * (n))) -#define BG_TILE_ADDR(n) (void *)(BG_VRAM + (0x80 * (n))) - -#define BG_TILE_H_FLIP(n) (0x400 + (n)) -#define BG_TILE_V_FLIP(n) (0x800 + (n)) - -// text-mode BG -#define OBJ_VRAM0 (void *)(VRAM + 0x10000) -#define OBJ_VRAM0_SIZE 0x8000 - -// bitmap-mode BG -#define OBJ_VRAM1 (void *)(VRAM + 0x14000) -#define OBJ_VRAM1_SIZE 0x4000 - -#define OAM 0x7000000 -#define OAM_SIZE 0x400 - -#define ROM_HEADER_SIZE 0xC0 - -#define DISPLAY_WIDTH 240 -#define DISPLAY_HEIGHT 160 - -#define TILE_SIZE_4BPP 32 -#define TILE_SIZE_8BPP 64 - -#define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP) -#define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP) - -#define TOTAL_OBJ_TILE_COUNT 1024 - -#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10)) -#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r)) -#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F)) - -#define RGB_BLACK RGB(0, 0, 0) -#define RGB_WHITE RGB(31, 31, 31) -#define RGB_RED RGB(31, 0, 0) -#define RGB_GREEN RGB(0, 31, 0) -#define RGB_BLUE RGB(0, 0, 31) -#define RGB_YELLOW RGB(31, 31, 0) -#define RGB_MAGENTA RGB(31, 0, 31) -#define RGB_CYAN RGB(0, 31, 31) -#define RGB_WHITEALPHA (RGB_WHITE | 0x8000) - -#endif // GUARD_GBA_DEFINES_H diff --git a/berry_fix/payload/include/gba/flash_internal.h b/berry_fix/payload/include/gba/flash_internal.h deleted file mode 100644 index 6fbec31f1b..0000000000 --- a/berry_fix/payload/include/gba/flash_internal.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef GUARD_GBA_FLASH_INTERNAL_H -#define GUARD_GBA_FLASH_INTERNAL_H - -#include "gba/gba.h" - -#define FLASH_BASE ((u8 *)0xE000000) - -#define FLASH_WRITE(addr, data) ((*(vu8 *)(FLASH_BASE + (addr))) = (data)) - -#define FLASH_ROM_SIZE_1M 131072 // 1 megabit ROM - -#define SECTORS_PER_BANK 16 - -struct FlashSector -{ - u32 size; - u8 shift; - u16 count; - u16 top; -}; - -struct FlashType { - u32 romSize; - struct FlashSector sector; - u16 wait[2]; // game pak bus read/write wait - - // TODO: add support for anonymous unions/structs if possible - union { - struct { - u8 makerId; - u8 deviceId; - } separate; - u16 joined; - } ids; -}; - -struct FlashSetupInfo -{ - u16 (*programFlashByte)(u16, u32, u8); - u16 (*programFlashSector)(u16, void *); - u16 (*eraseFlashChip)(void); - u16 (*eraseFlashSector)(u16); - u16 (*WaitForFlashWrite)(u8, u8 *, u8); - const u16 *maxTime; - struct FlashType type; -}; - -extern u16 gFlashNumRemainingBytes; - -extern u16 (*ProgramFlashByte)(u16, u32, u8); -extern u16 (*ProgramFlashSector)(u16, void *); -extern u16 (*EraseFlashChip)(void); -extern u16 (*EraseFlashSector)(u16); -extern u16 (*WaitForFlashWrite)(u8, u8 *, u8); -extern const u16 *gFlashMaxTime; -extern const struct FlashType *gFlash; - -extern u8 (*PollFlashStatus)(u8 *); -extern u8 gFlashTimeoutFlag; - -extern const struct FlashSetupInfo MX29L010; -extern const struct FlashSetupInfo LE26FV10N1TS; -extern const struct FlashSetupInfo DefaultFlash; - -void SwitchFlashBank(u8 bankNum); -u16 ReadFlashId(void); -void StartFlashTimer(u8 phase); -void SetReadFlash1(u16 *dest); -void StopFlashTimer(void); -u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)); -u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src); -void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size); -u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *dataSrc, u32 n); - -u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData); - -u16 EraseFlashChip_MX(void); -u16 EraseFlashSector_MX(u16 sectorNum); -u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data); -u16 ProgramFlashSector_MX(u16 sectorNum, void *src); - -// agb_flash_1m -u32 IdentifyFlash(void); - -#endif // GUARD_GBA_FLASH_INTERNAL_H diff --git a/berry_fix/payload/include/gba/gba.h b/berry_fix/payload/include/gba/gba.h deleted file mode 100644 index 349344031f..0000000000 --- a/berry_fix/payload/include/gba/gba.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef GUARD_GBA_GBA_H -#define GUARD_GBA_GBA_H - -#include "gba/defines.h" -#include "gba/io_reg.h" -#include "gba/types.h" -#include "gba/multiboot.h" -#include "gba/syscall.h" -#include "gba/macro.h" -#include "gba/isagbprint.h" - -#endif // GUARD_GBA_GBA_H diff --git a/berry_fix/payload/include/gba/io_reg.h b/berry_fix/payload/include/gba/io_reg.h deleted file mode 100644 index df79b084d3..0000000000 --- a/berry_fix/payload/include/gba/io_reg.h +++ /dev/null @@ -1,770 +0,0 @@ -#ifndef GUARD_GBA_IO_REG_H -#define GUARD_GBA_IO_REG_H - -#define REG_BASE 0x4000000 // I/O register base address - -// I/O register offsets - -#define REG_OFFSET_DISPCNT 0x0 -#define REG_OFFSET_DISPSTAT 0x4 -#define REG_OFFSET_VCOUNT 0x6 -#define REG_OFFSET_BG0CNT 0x8 -#define REG_OFFSET_BG1CNT 0xa -#define REG_OFFSET_BG2CNT 0xc -#define REG_OFFSET_BG3CNT 0xe -#define REG_OFFSET_BG0HOFS 0x10 -#define REG_OFFSET_BG0VOFS 0x12 -#define REG_OFFSET_BG1HOFS 0x14 -#define REG_OFFSET_BG1VOFS 0x16 -#define REG_OFFSET_BG2HOFS 0x18 -#define REG_OFFSET_BG2VOFS 0x1a -#define REG_OFFSET_BG3HOFS 0x1c -#define REG_OFFSET_BG3VOFS 0x1e -#define REG_OFFSET_BG2PA 0x20 -#define REG_OFFSET_BG2PB 0x22 -#define REG_OFFSET_BG2PC 0x24 -#define REG_OFFSET_BG2PD 0x26 -#define REG_OFFSET_BG2X 0x28 -#define REG_OFFSET_BG2X_L 0x28 -#define REG_OFFSET_BG2X_H 0x2a -#define REG_OFFSET_BG2Y 0x2c -#define REG_OFFSET_BG2Y_L 0x2c -#define REG_OFFSET_BG2Y_H 0x2e -#define REG_OFFSET_BG3PA 0x30 -#define REG_OFFSET_BG3PB 0x32 -#define REG_OFFSET_BG3PC 0x34 -#define REG_OFFSET_BG3PD 0x36 -#define REG_OFFSET_BG3X 0x38 -#define REG_OFFSET_BG3X_L 0x38 -#define REG_OFFSET_BG3X_H 0x3a -#define REG_OFFSET_BG3Y 0x3c -#define REG_OFFSET_BG3Y_L 0x3c -#define REG_OFFSET_BG3Y_H 0x3e -#define REG_OFFSET_WIN0H 0x40 -#define REG_OFFSET_WIN1H 0x42 -#define REG_OFFSET_WIN0V 0x44 -#define REG_OFFSET_WIN1V 0x46 -#define REG_OFFSET_WININ 0x48 -#define REG_OFFSET_WINOUT 0x4a -#define REG_OFFSET_MOSAIC 0x4c -#define REG_OFFSET_BLDCNT 0x50 -#define REG_OFFSET_BLDALPHA 0x52 -#define REG_OFFSET_BLDY 0x54 - -#define REG_OFFSET_SOUND1CNT_L 0x60 -#define REG_OFFSET_NR10 0x60 -#define REG_OFFSET_SOUND1CNT_H 0x62 -#define REG_OFFSET_NR11 0x62 -#define REG_OFFSET_NR12 0x63 -#define REG_OFFSET_SOUND1CNT_X 0x64 -#define REG_OFFSET_NR13 0x64 -#define REG_OFFSET_NR14 0x65 -#define REG_OFFSET_SOUND2CNT_L 0x68 -#define REG_OFFSET_NR21 0x68 -#define REG_OFFSET_NR22 0x69 -#define REG_OFFSET_SOUND2CNT_H 0x6c -#define REG_OFFSET_NR23 0x6c -#define REG_OFFSET_NR24 0x6d -#define REG_OFFSET_SOUND3CNT_L 0x70 -#define REG_OFFSET_NR30 0x70 -#define REG_OFFSET_SOUND3CNT_H 0x72 -#define REG_OFFSET_NR31 0x72 -#define REG_OFFSET_NR32 0x73 -#define REG_OFFSET_SOUND3CNT_X 0x74 -#define REG_OFFSET_NR33 0x74 -#define REG_OFFSET_NR34 0x75 -#define REG_OFFSET_SOUND4CNT_L 0x78 -#define REG_OFFSET_NR41 0x78 -#define REG_OFFSET_NR42 0x79 -#define REG_OFFSET_SOUND4CNT_H 0x7c -#define REG_OFFSET_NR43 0x7c -#define REG_OFFSET_NR44 0x7d -#define REG_OFFSET_SOUNDCNT_L 0x80 -#define REG_OFFSET_NR50 0x80 -#define REG_OFFSET_NR51 0x81 -#define REG_OFFSET_SOUNDCNT_H 0x82 -#define REG_OFFSET_SOUNDCNT_X 0x84 -#define REG_OFFSET_NR52 0x84 -#define REG_OFFSET_SOUNDBIAS 0x88 -#define REG_OFFSET_SOUNDBIAS_L 0x88 -#define REG_OFFSET_SOUNDBIAS_H 0x89 -#define REG_OFFSET_WAVE_RAM0 0x90 -#define REG_OFFSET_WAVE_RAM1 0x94 -#define REG_OFFSET_WAVE_RAM2 0x98 -#define REG_OFFSET_WAVE_RAM3 0x9c -#define REG_OFFSET_FIFO_A 0xa0 -#define REG_OFFSET_FIFO_B 0xa4 - -#define REG_OFFSET_DMA0 0xb0 -#define REG_OFFSET_DMA0SAD 0xb0 -#define REG_OFFSET_DMA0SAD_L 0xb0 -#define REG_OFFSET_DMA0SAD_H 0xb2 -#define REG_OFFSET_DMA0DAD 0xb4 -#define REG_OFFSET_DMA0DAD_L 0xb4 -#define REG_OFFSET_DMA0DAD_H 0xb6 -#define REG_OFFSET_DMA0CNT 0xb8 -#define REG_OFFSET_DMA0CNT_L 0xb8 -#define REG_OFFSET_DMA0CNT_H 0xba -#define REG_OFFSET_DMA1 0xbc -#define REG_OFFSET_DMA1SAD 0xbc -#define REG_OFFSET_DMA1SAD_L 0xbc -#define REG_OFFSET_DMA1SAD_H 0xbe -#define REG_OFFSET_DMA1DAD 0xc0 -#define REG_OFFSET_DMA1DAD_L 0xc0 -#define REG_OFFSET_DMA1DAD_H 0xc2 -#define REG_OFFSET_DMA1CNT 0xc4 -#define REG_OFFSET_DMA1CNT_L 0xc4 -#define REG_OFFSET_DMA1CNT_H 0xc6 -#define REG_OFFSET_DMA2 0xc8 -#define REG_OFFSET_DMA2SAD 0xc8 -#define REG_OFFSET_DMA2SAD_L 0xc8 -#define REG_OFFSET_DMA2SAD_H 0xca -#define REG_OFFSET_DMA2DAD 0xcc -#define REG_OFFSET_DMA2DAD_L 0xcc -#define REG_OFFSET_DMA2DAD_H 0xce -#define REG_OFFSET_DMA2CNT 0xd0 -#define REG_OFFSET_DMA2CNT_L 0xd0 -#define REG_OFFSET_DMA2CNT_H 0xd2 -#define REG_OFFSET_DMA3 0xd4 -#define REG_OFFSET_DMA3SAD 0xd4 -#define REG_OFFSET_DMA3SAD_L 0xd4 -#define REG_OFFSET_DMA3SAD_H 0xd6 -#define REG_OFFSET_DMA3DAD 0xd8 -#define REG_OFFSET_DMA3DAD_L 0xd8 -#define REG_OFFSET_DMA3DAD_H 0xda -#define REG_OFFSET_DMA3CNT 0xdc -#define REG_OFFSET_DMA3CNT_L 0xdc -#define REG_OFFSET_DMA3CNT_H 0xde - -#define REG_OFFSET_TMCNT 0x100 -#define REG_OFFSET_TMCNT_L 0x100 -#define REG_OFFSET_TMCNT_H 0x102 -#define REG_OFFSET_TM0CNT 0x100 -#define REG_OFFSET_TM0CNT_L 0x100 -#define REG_OFFSET_TM0CNT_H 0x102 -#define REG_OFFSET_TM1CNT 0x104 -#define REG_OFFSET_TM1CNT_L 0x104 -#define REG_OFFSET_TM1CNT_H 0x106 -#define REG_OFFSET_TM2CNT 0x108 -#define REG_OFFSET_TM2CNT_L 0x108 -#define REG_OFFSET_TM2CNT_H 0x10a -#define REG_OFFSET_TM3CNT 0x10c -#define REG_OFFSET_TM3CNT_L 0x10c -#define REG_OFFSET_TM3CNT_H 0x10e - -#define REG_OFFSET_SIOCNT 0x128 -#define REG_OFFSET_SIODATA8 0x12a -#define REG_OFFSET_SIODATA32 0x120 -#define REG_OFFSET_SIOMLT_SEND 0x12a -#define REG_OFFSET_SIOMLT_RECV 0x120 -#define REG_OFFSET_SIOMULTI0 0x120 -#define REG_OFFSET_SIOMULTI1 0x122 -#define REG_OFFSET_SIOMULTI2 0x124 -#define REG_OFFSET_SIOMULTI3 0x126 - -#define REG_OFFSET_KEYINPUT 0x130 -#define REG_OFFSET_KEYCNT 0x132 - -#define REG_OFFSET_RCNT 0x134 - -#define REG_OFFSET_JOYCNT 0x140 -#define REG_OFFSET_JOYSTAT 0x158 -#define REG_OFFSET_JOY_RECV 0x150 -#define REG_OFFSET_JOY_RECV_L 0x150 -#define REG_OFFSET_JOY_RECV_H 0x152 -#define REG_OFFSET_JOY_TRANS 0x154 -#define REG_OFFSET_JOY_TRANS_L 0x154 -#define REG_OFFSET_JOY_TRANS_H 0x156 - -#define REG_OFFSET_IME 0x208 -#define REG_OFFSET_IE 0x200 -#define REG_OFFSET_IF 0x202 - -#define REG_OFFSET_WAITCNT 0x204 - -// I/O register addresses - -#define REG_ADDR_DISPCNT (REG_BASE + REG_OFFSET_DISPCNT) -#define REG_ADDR_DISPSTAT (REG_BASE + REG_OFFSET_DISPSTAT) -#define REG_ADDR_VCOUNT (REG_BASE + REG_OFFSET_VCOUNT) -#define REG_ADDR_BG0CNT (REG_BASE + REG_OFFSET_BG0CNT) -#define REG_ADDR_BG1CNT (REG_BASE + REG_OFFSET_BG1CNT) -#define REG_ADDR_BG2CNT (REG_BASE + REG_OFFSET_BG2CNT) -#define REG_ADDR_BG3CNT (REG_BASE + REG_OFFSET_BG3CNT) -#define REG_ADDR_BG0HOFS (REG_BASE + REG_OFFSET_BG0HOFS) -#define REG_ADDR_BG0VOFS (REG_BASE + REG_OFFSET_BG0VOFS) -#define REG_ADDR_BG1HOFS (REG_BASE + REG_OFFSET_BG1HOFS) -#define REG_ADDR_BG1VOFS (REG_BASE + REG_OFFSET_BG1VOFS) -#define REG_ADDR_BG2HOFS (REG_BASE + REG_OFFSET_BG2HOFS) -#define REG_ADDR_BG2VOFS (REG_BASE + REG_OFFSET_BG2VOFS) -#define REG_ADDR_BG3HOFS (REG_BASE + REG_OFFSET_BG3HOFS) -#define REG_ADDR_BG3VOFS (REG_BASE + REG_OFFSET_BG3VOFS) -#define REG_ADDR_BG2PA (REG_BASE + REG_OFFSET_BG2PA) -#define REG_ADDR_BG2PB (REG_BASE + REG_OFFSET_BG2PB) -#define REG_ADDR_BG2PC (REG_BASE + REG_OFFSET_BG2PC) -#define REG_ADDR_BG2PD (REG_BASE + REG_OFFSET_BG2PD) -#define REG_ADDR_BG2X (REG_BASE + REG_OFFSET_BG2X) -#define REG_ADDR_BG2X_L (REG_BASE + REG_OFFSET_BG2X_L) -#define REG_ADDR_BG2X_H (REG_BASE + REG_OFFSET_BG2X_H) -#define REG_ADDR_BG2Y (REG_BASE + REG_OFFSET_BG2Y) -#define REG_ADDR_BG2Y_L (REG_BASE + REG_OFFSET_BG2Y_L) -#define REG_ADDR_BG2Y_H (REG_BASE + REG_OFFSET_BG2Y_H) -#define REG_ADDR_BG3PA (REG_BASE + REG_OFFSET_BG3PA) -#define REG_ADDR_BG3PB (REG_BASE + REG_OFFSET_BG3PB) -#define REG_ADDR_BG3PC (REG_BASE + REG_OFFSET_BG3PC) -#define REG_ADDR_BG3PD (REG_BASE + REG_OFFSET_BG3PD) -#define REG_ADDR_BG3X (REG_BASE + REG_OFFSET_BG3X) -#define REG_ADDR_BG3X_L (REG_BASE + REG_OFFSET_BG3X_L) -#define REG_ADDR_BG3X_H (REG_BASE + REG_OFFSET_BG3X_H) -#define REG_ADDR_BG3Y (REG_BASE + REG_OFFSET_BG3Y) -#define REG_ADDR_BG3Y_L (REG_BASE + REG_OFFSET_BG3Y_L) -#define REG_ADDR_BG3Y_H (REG_BASE + REG_OFFSET_BG3Y_H) -#define REG_ADDR_WIN0H (REG_BASE + REG_OFFSET_WIN0H) -#define REG_ADDR_WIN1H (REG_BASE + REG_OFFSET_WIN1H) -#define REG_ADDR_WIN0V (REG_BASE + REG_OFFSET_WIN0V) -#define REG_ADDR_WIN1V (REG_BASE + REG_OFFSET_WIN1V) -#define REG_ADDR_WININ (REG_BASE + REG_OFFSET_WININ) -#define REG_ADDR_WINOUT (REG_BASE + REG_OFFSET_WINOUT) -#define REG_ADDR_MOSAIC (REG_BASE + REG_OFFSET_MOSAIC) -#define REG_ADDR_BLDCNT (REG_BASE + REG_OFFSET_BLDCNT) -#define REG_ADDR_BLDALPHA (REG_BASE + REG_OFFSET_BLDALPHA) -#define REG_ADDR_BLDY (REG_BASE + REG_OFFSET_BLDY) - -#define REG_ADDR_SOUND1CNT_L (REG_BASE + REG_OFFSET_SOUND1CNT_L) -#define REG_ADDR_NR10 (REG_BASE + REG_OFFSET_NR10) -#define REG_ADDR_SOUND1CNT_H (REG_BASE + REG_OFFSET_SOUND1CNT_H) -#define REG_ADDR_NR11 (REG_BASE + REG_OFFSET_NR11) -#define REG_ADDR_NR12 (REG_BASE + REG_OFFSET_NR12) -#define REG_ADDR_SOUND1CNT_X (REG_BASE + REG_OFFSET_SOUND1CNT_X) -#define REG_ADDR_NR13 (REG_BASE + REG_OFFSET_NR13) -#define REG_ADDR_NR14 (REG_BASE + REG_OFFSET_NR14) -#define REG_ADDR_SOUND2CNT_L (REG_BASE + REG_OFFSET_SOUND2CNT_L) -#define REG_ADDR_NR21 (REG_BASE + REG_OFFSET_NR21) -#define REG_ADDR_NR22 (REG_BASE + REG_OFFSET_NR22) -#define REG_ADDR_SOUND2CNT_H (REG_BASE + REG_OFFSET_SOUND2CNT_H) -#define REG_ADDR_NR23 (REG_BASE + REG_OFFSET_NR23) -#define REG_ADDR_NR24 (REG_BASE + REG_OFFSET_NR24) -#define REG_ADDR_SOUND3CNT_L (REG_BASE + REG_OFFSET_SOUND3CNT_L) -#define REG_ADDR_NR30 (REG_BASE + REG_OFFSET_NR30) -#define REG_ADDR_SOUND3CNT_H (REG_BASE + REG_OFFSET_SOUND3CNT_H) -#define REG_ADDR_NR31 (REG_BASE + REG_OFFSET_NR31) -#define REG_ADDR_NR32 (REG_BASE + REG_OFFSET_NR32) -#define REG_ADDR_SOUND3CNT_X (REG_BASE + REG_OFFSET_SOUND3CNT_X) -#define REG_ADDR_NR33 (REG_BASE + REG_OFFSET_NR33) -#define REG_ADDR_NR34 (REG_BASE + REG_OFFSET_NR34) -#define REG_ADDR_SOUND4CNT_L (REG_BASE + REG_OFFSET_SOUND4CNT_L) -#define REG_ADDR_NR41 (REG_BASE + REG_OFFSET_NR41) -#define REG_ADDR_NR42 (REG_BASE + REG_OFFSET_NR42) -#define REG_ADDR_SOUND4CNT_H (REG_BASE + REG_OFFSET_SOUND4CNT_H) -#define REG_ADDR_NR43 (REG_BASE + REG_OFFSET_NR43) -#define REG_ADDR_NR44 (REG_BASE + REG_OFFSET_NR44) -#define REG_ADDR_SOUNDCNT_L (REG_BASE + REG_OFFSET_SOUNDCNT_L) -#define REG_ADDR_NR50 (REG_BASE + REG_OFFSET_NR50) -#define REG_ADDR_NR51 (REG_BASE + REG_OFFSET_NR51) -#define REG_ADDR_SOUNDCNT_H (REG_BASE + REG_OFFSET_SOUNDCNT_H) -#define REG_ADDR_SOUNDCNT_X (REG_BASE + REG_OFFSET_SOUNDCNT_X) -#define REG_ADDR_NR52 (REG_BASE + REG_OFFSET_NR52) -#define REG_ADDR_SOUNDBIAS (REG_BASE + REG_OFFSET_SOUNDBIAS) -#define REG_ADDR_SOUNDBIAS_L (REG_BASE + REG_OFFSET_SOUNDBIAS_L) -#define REG_ADDR_SOUNDBIAS_H (REG_BASE + REG_OFFSET_SOUNDBIAS_H) -#define REG_ADDR_WAVE_RAM0 (REG_BASE + REG_OFFSET_WAVE_RAM0) -#define REG_ADDR_WAVE_RAM1 (REG_BASE + REG_OFFSET_WAVE_RAM1) -#define REG_ADDR_WAVE_RAM2 (REG_BASE + REG_OFFSET_WAVE_RAM2) -#define REG_ADDR_WAVE_RAM3 (REG_BASE + REG_OFFSET_WAVE_RAM3) -#define REG_ADDR_FIFO_A (REG_BASE + REG_OFFSET_FIFO_A) -#define REG_ADDR_FIFO_B (REG_BASE + REG_OFFSET_FIFO_B) - -#define REG_ADDR_DMA0 (REG_BASE + REG_OFFSET_DMA0) -#define REG_ADDR_DMA0SAD (REG_BASE + REG_OFFSET_DMA0SAD) -#define REG_ADDR_DMA0DAD (REG_BASE + REG_OFFSET_DMA0DAD) -#define REG_ADDR_DMA0CNT (REG_BASE + REG_OFFSET_DMA0CNT) -#define REG_ADDR_DMA0CNT_L (REG_BASE + REG_OFFSET_DMA0CNT_L) -#define REG_ADDR_DMA0CNT_H (REG_BASE + REG_OFFSET_DMA0CNT_H) -#define REG_ADDR_DMA1 (REG_BASE + REG_OFFSET_DMA1) -#define REG_ADDR_DMA1SAD (REG_BASE + REG_OFFSET_DMA1SAD) -#define REG_ADDR_DMA1DAD (REG_BASE + REG_OFFSET_DMA1DAD) -#define REG_ADDR_DMA1CNT (REG_BASE + REG_OFFSET_DMA1CNT) -#define REG_ADDR_DMA1CNT_L (REG_BASE + REG_OFFSET_DMA1CNT_L) -#define REG_ADDR_DMA1CNT_H (REG_BASE + REG_OFFSET_DMA1CNT_H) -#define REG_ADDR_DMA2 (REG_BASE + REG_OFFSET_DMA2) -#define REG_ADDR_DMA2SAD (REG_BASE + REG_OFFSET_DMA2SAD) -#define REG_ADDR_DMA2DAD (REG_BASE + REG_OFFSET_DMA2DAD) -#define REG_ADDR_DMA2CNT (REG_BASE + REG_OFFSET_DMA2CNT) -#define REG_ADDR_DMA2CNT_L (REG_BASE + REG_OFFSET_DMA2CNT_L) -#define REG_ADDR_DMA2CNT_H (REG_BASE + REG_OFFSET_DMA2CNT_H) -#define REG_ADDR_DMA3 (REG_BASE + REG_OFFSET_DMA3) -#define REG_ADDR_DMA3SAD (REG_BASE + REG_OFFSET_DMA3SAD) -#define REG_ADDR_DMA3DAD (REG_BASE + REG_OFFSET_DMA3DAD) -#define REG_ADDR_DMA3CNT (REG_BASE + REG_OFFSET_DMA3CNT) -#define REG_ADDR_DMA3CNT_L (REG_BASE + REG_OFFSET_DMA3CNT_L) -#define REG_ADDR_DMA3CNT_H (REG_BASE + REG_OFFSET_DMA3CNT_H) - -#define REG_ADDR_TMCNT (REG_BASE + REG_OFFSET_TMCNT) -#define REG_ADDR_TMCNT_L (REG_BASE + REG_OFFSET_TMCNT_L) -#define REG_ADDR_TMCNT_H (REG_BASE + REG_OFFSET_TMCNT_H) -#define REG_ADDR_TM0CNT (REG_BASE + REG_OFFSET_TM0CNT) -#define REG_ADDR_TM0CNT_L (REG_BASE + REG_OFFSET_TM0CNT_L) -#define REG_ADDR_TM0CNT_H (REG_BASE + REG_OFFSET_TM0CNT_H) -#define REG_ADDR_TM1CNT (REG_BASE + REG_OFFSET_TM1CNT) -#define REG_ADDR_TM1CNT_L (REG_BASE + REG_OFFSET_TM1CNT_L) -#define REG_ADDR_TM1CNT_H (REG_BASE + REG_OFFSET_TM1CNT_H) -#define REG_ADDR_TM2CNT (REG_BASE + REG_OFFSET_TM2CNT) -#define REG_ADDR_TM2CNT_L (REG_BASE + REG_OFFSET_TM2CNT_L) -#define REG_ADDR_TM2CNT_H (REG_BASE + REG_OFFSET_TM2CNT_H) -#define REG_ADDR_TM3CNT (REG_BASE + REG_OFFSET_TM3CNT) -#define REG_ADDR_TM3CNT_L (REG_BASE + REG_OFFSET_TM3CNT_L) -#define REG_ADDR_TM3CNT_H (REG_BASE + REG_OFFSET_TM3CNT_H) - -#define REG_ADDR_SIOCNT (REG_BASE + REG_OFFSET_SIOCNT) -#define REG_ADDR_SIODATA8 (REG_BASE + REG_OFFSET_SIODATA8) -#define REG_ADDR_SIODATA32 (REG_BASE + REG_OFFSET_SIODATA32) -#define REG_ADDR_SIOMLT_SEND (REG_BASE + REG_OFFSET_SIOMLT_SEND) -#define REG_ADDR_SIOMLT_RECV (REG_BASE + REG_OFFSET_SIOMLT_RECV) -#define REG_ADDR_SIOMULTI0 (REG_BASE + REG_OFFSET_SIOMULTI0) -#define REG_ADDR_SIOMULTI1 (REG_BASE + REG_OFFSET_SIOMULTI1) -#define REG_ADDR_SIOMULTI2 (REG_BASE + REG_OFFSET_SIOMULTI2) -#define REG_ADDR_SIOMULTI3 (REG_BASE + REG_OFFSET_SIOMULTI3) - -#define REG_ADDR_KEYINPUT (REG_BASE + REG_OFFSET_KEYINPUT) -#define REG_ADDR_KEYCNT (REG_BASE + REG_OFFSET_KEYCNT) - -#define REG_ADDR_RCNT (REG_BASE + REG_OFFSET_RCNT) - -#define REG_ADDR_JOYCNT (REG_BASE + REG_OFFSET_JOYCNT) -#define REG_ADDR_JOYSTAT (REG_BASE + REG_OFFSET_JOYSTAT) -#define REG_ADDR_JOY_RECV (REG_BASE + REG_OFFSET_JOY_RECV) -#define REG_ADDR_JOY_RECV_L (REG_BASE + REG_OFFSET_JOY_RECV_L) -#define REG_ADDR_JOY_RECV_H (REG_BASE + REG_OFFSET_JOY_RECV_H) -#define REG_ADDR_JOY_TRANS (REG_BASE + REG_OFFSET_JOY_TRANS) -#define REG_ADDR_JOY_TRANS_L (REG_BASE + REG_OFFSET_JOY_TRANS_L) -#define REG_ADDR_JOY_TRANS_H (REG_BASE + REG_OFFSET_JOY_TRANS_H) - -#define REG_ADDR_IME (REG_BASE + REG_OFFSET_IME) -#define REG_ADDR_IE (REG_BASE + REG_OFFSET_IE) -#define REG_ADDR_IF (REG_BASE + REG_OFFSET_IF) - -#define REG_ADDR_WAITCNT (REG_BASE + REG_OFFSET_WAITCNT) - -// I/O registers - -#define REG_DISPCNT (*(vu16 *)REG_ADDR_DISPCNT) -#define REG_DISPSTAT (*(vu16 *)REG_ADDR_DISPSTAT) -#define REG_VCOUNT (*(vu16 *)REG_ADDR_VCOUNT) -#define REG_BG0CNT (*(vu16 *)REG_ADDR_BG0CNT) -#define REG_BG1CNT (*(vu16 *)REG_ADDR_BG1CNT) -#define REG_BG2CNT (*(vu16 *)REG_ADDR_BG2CNT) -#define REG_BG3CNT (*(vu16 *)REG_ADDR_BG3CNT) -#define REG_BG0HOFS (*(vu16 *)REG_ADDR_BG0HOFS) -#define REG_BG0VOFS (*(vu16 *)REG_ADDR_BG0VOFS) -#define REG_BG1HOFS (*(vu16 *)REG_ADDR_BG1HOFS) -#define REG_BG1VOFS (*(vu16 *)REG_ADDR_BG1VOFS) -#define REG_BG2HOFS (*(vu16 *)REG_ADDR_BG2HOFS) -#define REG_BG2VOFS (*(vu16 *)REG_ADDR_BG2VOFS) -#define REG_BG3HOFS (*(vu16 *)REG_ADDR_BG3HOFS) -#define REG_BG3VOFS (*(vu16 *)REG_ADDR_BG3VOFS) -#define REG_BG2PA (*(vu16 *)REG_ADDR_BG2PA) -#define REG_BG2PB (*(vu16 *)REG_ADDR_BG2PB) -#define REG_BG2PC (*(vu16 *)REG_ADDR_BG2PC) -#define REG_BG2PD (*(vu16 *)REG_ADDR_BG2PD) -#define REG_BG2X (*(vu32 *)REG_ADDR_BG2X) -#define REG_BG2X_L (*(vu16 *)REG_ADDR_BG2X_L) -#define REG_BG2X_H (*(vu16 *)REG_ADDR_BG2X_H) -#define REG_BG2Y (*(vu32 *)REG_ADDR_BG2Y) -#define REG_BG2Y_L (*(vu16 *)REG_ADDR_BG2Y_L) -#define REG_BG2Y_H (*(vu16 *)REG_ADDR_BG2Y_H) -#define REG_BG3PA (*(vu16 *)REG_ADDR_BG3PA) -#define REG_BG3PB (*(vu16 *)REG_ADDR_BG3PB) -#define REG_BG3PC (*(vu16 *)REG_ADDR_BG3PC) -#define REG_BG3PD (*(vu16 *)REG_ADDR_BG3PD) -#define REG_BG3X (*(vu32 *)REG_ADDR_BG3X) -#define REG_BG3X_L (*(vu16 *)REG_ADDR_BG3X_L) -#define REG_BG3X_H (*(vu16 *)REG_ADDR_BG3X_H) -#define REG_BG3Y (*(vu32 *)REG_ADDR_BG3Y) -#define REG_BG3Y_L (*(vu16 *)REG_ADDR_BG3Y_L) -#define REG_BG3Y_H (*(vu16 *)REG_ADDR_BG3Y_H) -#define REG_WIN0H (*(vu16 *)REG_ADDR_WIN0H) -#define REG_WIN1H (*(vu16 *)REG_ADDR_WIN1H) -#define REG_WIN0V (*(vu16 *)REG_ADDR_WIN0V) -#define REG_WIN1V (*(vu16 *)REG_ADDR_WIN1V) -#define REG_WININ (*(vu16 *)REG_ADDR_WININ) -#define REG_WINOUT (*(vu16 *)REG_ADDR_WINOUT) -#define REG_MOSAIC (*(vu16 *)REG_ADDR_MOSAIC) -#define REG_BLDCNT (*(vu16 *)REG_ADDR_BLDCNT) -#define REG_BLDALPHA (*(vu16 *)REG_ADDR_BLDALPHA) -#define REG_BLDY (*(vu16 *)REG_ADDR_BLDY) - -#define REG_SOUND1CNT_L (*(vu16 *)REG_ADDR_SOUND1CNT_L) -#define REG_NR10 (*(vu8 *)REG_ADDR_NR10) -#define REG_SOUND1CNT_H (*(vu16 *)REG_ADDR_SOUND1CNT_H) -#define REG_NR11 (*(vu8 *)REG_ADDR_NR11) -#define REG_NR12 (*(vu8 *)REG_ADDR_NR12) -#define REG_SOUND1CNT_X (*(vu16 *)REG_ADDR_SOUND1CNT_X) -#define REG_NR13 (*(vu8 *)REG_ADDR_NR13) -#define REG_NR14 (*(vu8 *)REG_ADDR_NR14) -#define REG_SOUND2CNT_L (*(vu16 *)REG_ADDR_SOUND2CNT_L) -#define REG_NR21 (*(vu8 *)REG_ADDR_NR21) -#define REG_NR22 (*(vu8 *)REG_ADDR_NR22) -#define REG_SOUND2CNT_H (*(vu16 *)REG_ADDR_SOUND2CNT_H) -#define REG_NR23 (*(vu8 *)REG_ADDR_NR23) -#define REG_NR24 (*(vu8 *)REG_ADDR_NR24) -#define REG_SOUND3CNT_L (*(vu16 *)REG_ADDR_SOUND3CNT_L) -#define REG_NR30 (*(vu8 *)REG_ADDR_NR30) -#define REG_SOUND3CNT_H (*(vu16 *)REG_ADDR_SOUND3CNT_H) -#define REG_NR31 (*(vu8 *)REG_ADDR_NR31) -#define REG_NR32 (*(vu8 *)REG_ADDR_NR32) -#define REG_SOUND3CNT_X (*(vu16 *)REG_ADDR_SOUND3CNT_X) -#define REG_NR33 (*(vu8 *)REG_ADDR_NR33) -#define REG_NR34 (*(vu8 *)REG_ADDR_NR34) -#define REG_SOUND4CNT_L (*(vu16 *)REG_ADDR_SOUND4CNT_L) -#define REG_NR41 (*(vu8 *)REG_ADDR_NR41) -#define REG_NR42 (*(vu8 *)REG_ADDR_NR42) -#define REG_SOUND4CNT_H (*(vu16 *)REG_ADDR_SOUND4CNT_H) -#define REG_NR43 (*(vu8 *)REG_ADDR_NR43) -#define REG_NR44 (*(vu8 *)REG_ADDR_NR44) -#define REG_SOUNDCNT_L (*(vu16 *)REG_ADDR_SOUNDCNT_L) -#define REG_NR50 (*(vu8 *)REG_ADDR_NR50) -#define REG_NR51 (*(vu8 *)REG_ADDR_NR51) -#define REG_SOUNDCNT_H (*(vu16 *)REG_ADDR_SOUNDCNT_H) -#define REG_SOUNDCNT_X (*(vu16 *)REG_ADDR_SOUNDCNT_X) -#define REG_NR52 (*(vu8 *)REG_ADDR_NR52) -#define REG_SOUNDBIAS (*(vu16 *)REG_ADDR_SOUNDBIAS) -#define REG_SOUNDBIAS_L (*(vu8 *)REG_ADDR_SOUNDBIAS_L) -#define REG_SOUNDBIAS_H (*(vu8 *)REG_ADDR_SOUNDBIAS_H) -#define REG_WAVE_RAM0 (*(vu32 *)REG_ADDR_WAVE_RAM0) -#define REG_WAVE_RAM1 (*(vu32 *)REG_ADDR_WAVE_RAM1) -#define REG_WAVE_RAM2 (*(vu32 *)REG_ADDR_WAVE_RAM2) -#define REG_WAVE_RAM3 (*(vu32 *)REG_ADDR_WAVE_RAM3) -#define REG_FIFO_A (*(vu32 *)REG_ADDR_FIFO_A) -#define REG_FIFO_B (*(vu32 *)REG_ADDR_FIFO_B) - -#define REG_DMA0SAD (*(vu32 *)REG_ADDR_DMA0SAD) -#define REG_DMA0DAD (*(vu32 *)REG_ADDR_DMA0DAD) -#define REG_DMA0CNT (*(vu32 *)REG_ADDR_DMA0CNT) -#define REG_DMA0CNT_L (*(vu16 *)REG_ADDR_DMA0CNT_L) -#define REG_DMA0CNT_H (*(vu16 *)REG_ADDR_DMA0CNT_H) - -#define REG_DMA1SAD (*(vu32 *)REG_ADDR_DMA1SAD) -#define REG_DMA1DAD (*(vu32 *)REG_ADDR_DMA1DAD) -#define REG_DMA1CNT (*(vu32 *)REG_ADDR_DMA1CNT) -#define REG_DMA1CNT_L (*(vu16 *)REG_ADDR_DMA1CNT_L) -#define REG_DMA1CNT_H (*(vu16 *)REG_ADDR_DMA1CNT_H) - -#define REG_DMA2SAD (*(vu32 *)REG_ADDR_DMA2SAD) -#define REG_DMA2DAD (*(vu32 *)REG_ADDR_DMA2DAD) -#define REG_DMA2CNT (*(vu32 *)REG_ADDR_DMA2CNT) -#define REG_DMA2CNT_L (*(vu16 *)REG_ADDR_DMA2CNT_L) -#define REG_DMA2CNT_H (*(vu16 *)REG_ADDR_DMA2CNT_H) - -#define REG_DMA3SAD (*(vu32 *)REG_ADDR_DMA3SAD) -#define REG_DMA3DAD (*(vu32 *)REG_ADDR_DMA3DAD) -#define REG_DMA3CNT (*(vu32 *)REG_ADDR_DMA3CNT) -#define REG_DMA3CNT_L (*(vu16 *)REG_ADDR_DMA3CNT_L) -#define REG_DMA3CNT_H (*(vu16 *)REG_ADDR_DMA3CNT_H) - -#define REG_TMCNT(n) (*(vu16 *)(REG_ADDR_TMCNT + ((n) * 4))) -#define REG_TMCNT_L(n) (*(vu16 *)(REG_ADDR_TMCNT_L + ((n) * 4))) -#define REG_TMCNT_H(n) (*(vu16 *)(REG_ADDR_TMCNT_H + ((n) * 4))) -#define REG_TM0CNT (*(vu32 *)REG_ADDR_TM0CNT) -#define REG_TM0CNT_L (*(vu16 *)REG_ADDR_TM0CNT_L) -#define REG_TM0CNT_H (*(vu16 *)REG_ADDR_TM0CNT_H) -#define REG_TM1CNT (*(vu32 *)REG_ADDR_TM1CNT) -#define REG_TM1CNT_L (*(vu16 *)REG_ADDR_TM1CNT_L) -#define REG_TM1CNT_H (*(vu16 *)REG_ADDR_TM1CNT_H) -#define REG_TM2CNT (*(vu32 *)REG_ADDR_TM2CNT) -#define REG_TM2CNT_L (*(vu16 *)REG_ADDR_TM2CNT_L) -#define REG_TM2CNT_H (*(vu16 *)REG_ADDR_TM2CNT_H) -#define REG_TM3CNT (*(vu32 *)REG_ADDR_TM3CNT) -#define REG_TM3CNT_L (*(vu16 *)REG_ADDR_TM3CNT_L) -#define REG_TM3CNT_H (*(vu16 *)REG_ADDR_TM3CNT_H) - -#define REG_SIOCNT (*(vu16 *)REG_ADDR_SIOCNT) -#define REG_SIODATA8 (*(vu16 *)REG_ADDR_SIODATA8) -#define REG_SIODATA32 (*(vu32 *)REG_ADDR_SIODATA32) -#define REG_SIOMLT_SEND (*(vu16 *)REG_ADDR_SIOMLT_SEND) -#define REG_SIOMLT_RECV (*(vu64 *)REG_ADDR_SIOMLT_RECV) -#define REG_SIOMULTI0 (*(vu16 *)REG_ADDR_SIOMULTI0) -#define REG_SIOMULTI1 (*(vu16 *)REG_ADDR_SIOMULTI1) -#define REG_SIOMULTI2 (*(vu16 *)REG_ADDR_SIOMULTI2) -#define REG_SIOMULTI3 (*(vu16 *)REG_ADDR_SIOMULTI3) - -#define REG_KEYINPUT (*(vu16 *)REG_ADDR_KEYINPUT) -#define REG_KEYCNT (*(vu16 *)REG_ADDR_KEYCNT) - -#define REG_RCNT (*(vu16 *)REG_ADDR_RCNT) - -#define REG_IME (*(vu16 *)REG_ADDR_IME) -#define REG_IE (*(vu16 *)REG_ADDR_IE) -#define REG_IF (*(vu16 *)REG_ADDR_IF) - -#define REG_WAITCNT (*(vu16 *)REG_ADDR_WAITCNT) - -// I/O register fields - -// DISPCNT -#define DISPCNT_MODE_0 0x0000 // BG0: text, BG1: text, BG2: text, BG3: text -#define DISPCNT_MODE_1 0x0001 // BG0: text, BG1: text, BG2: affine, BG3: off -#define DISPCNT_MODE_2 0x0002 // BG0: off, BG1: off, BG2: affine, BG3: affine -#define DISPCNT_MODE_3 0x0003 // Bitmap mode, 240x160, BGR555 color -#define DISPCNT_MODE_4 0x0004 // Bitmap mode, 240x160, 256 color palette -#define DISPCNT_MODE_5 0x0005 // Bitmap mode, 160x128, BGR555 color -#define DISPCNT_HBLANK_INTERVAL 0x0020 // Allow access to OAM during H-Blank -#define DISPCNT_OBJ_1D_MAP 0x0040 -#define DISPCNT_FORCED_BLANK 0x0080 -#define DISPCNT_BG0_ON 0x0100 -#define DISPCNT_BG1_ON 0x0200 -#define DISPCNT_BG2_ON 0x0400 -#define DISPCNT_BG3_ON 0x0800 -#define DISPCNT_BG_ALL_ON 0x0F00 -#define DISPCNT_OBJ_ON 0x1000 -#define DISPCNT_WIN0_ON 0x2000 -#define DISPCNT_WIN1_ON 0x4000 -#define DISPCNT_OBJWIN_ON 0x8000 - -// DISPSTAT -#define DISPSTAT_VBLANK 0x0001 // in V-Blank -#define DISPSTAT_HBLANK 0x0002 // in H-Blank -#define DISPSTAT_VCOUNT 0x0004 // V-Count match -#define DISPSTAT_VBLANK_INTR 0x0008 // V-Blank interrupt enabled -#define DISPSTAT_HBLANK_INTR 0x0010 // H-Blank interrupt enabled -#define DISPSTAT_VCOUNT_INTR 0x0020 // V-Count interrupt enabled - -// BGCNT -#define BGCNT_PRIORITY(n) (n) // Values 0 - 3. Lower priority BGs will be drawn on top of higher priority BGs. -#define BGCNT_CHARBASE(n) ((n) << 2) // Values 0 - 3. Base block for tile pixel data. -#define BGCNT_MOSAIC 0x0040 -#define BGCNT_16COLOR 0x0000 // 4 bits per pixel -#define BGCNT_256COLOR 0x0080 // 8 bits per pixel -#define BGCNT_SCREENBASE(n) ((n) << 8) // Values 0 - 31. Base block for tile map. -#define BGCNT_WRAP 0x2000 // Only affects affine BGs. Text BGs wrap by default. -#define BGCNT_TXT256x256 0x0000 // Internal screen size size of text mode BG in pixels. -#define BGCNT_TXT512x256 0x4000 -#define BGCNT_TXT256x512 0x8000 -#define BGCNT_TXT512x512 0xC000 -#define BGCNT_AFF128x128 0x0000 // Internal screen size size of affine mode BG in pixels. -#define BGCNT_AFF256x256 0x4000 -#define BGCNT_AFF512x512 0x8000 -#define BGCNT_AFF1024x1024 0xC000 - -// WININ/OUT -#define WININ_WIN0_BG0 (1 << 0) -#define WININ_WIN0_BG1 (1 << 1) -#define WININ_WIN0_BG2 (1 << 2) -#define WININ_WIN0_BG3 (1 << 3) -#define WININ_WIN0_BG_ALL (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3) -#define WININ_WIN0_OBJ (1 << 4) -#define WININ_WIN0_CLR (1 << 5) -#define WININ_WIN1_BG0 (1 << 8) -#define WININ_WIN1_BG1 (1 << 9) -#define WININ_WIN1_BG2 (1 << 10) -#define WININ_WIN1_BG3 (1 << 11) -#define WININ_WIN1_BG_ALL (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3) -#define WININ_WIN1_OBJ (1 << 12) -#define WININ_WIN1_CLR (1 << 13) - -#define WINOUT_WIN01_BG0 (1 << 0) -#define WINOUT_WIN01_BG1 (1 << 1) -#define WINOUT_WIN01_BG2 (1 << 2) -#define WINOUT_WIN01_BG3 (1 << 3) -#define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3) -#define WINOUT_WIN01_OBJ (1 << 4) -#define WINOUT_WIN01_CLR (1 << 5) -#define WINOUT_WINOBJ_BG0 (1 << 8) -#define WINOUT_WINOBJ_BG1 (1 << 9) -#define WINOUT_WINOBJ_BG2 (1 << 10) -#define WINOUT_WINOBJ_BG3 (1 << 11) -#define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3) -#define WINOUT_WINOBJ_OBJ (1 << 12) -#define WINOUT_WINOBJ_CLR (1 << 13) - -#define WIN_RANGE(a, b) (((a) << 8) | (b)) -#define WIN_RANGE2(a, b) ((b) | ((a) << 8)) - -// BLDCNT -// Bits 0-5 select layers for the 1st target -#define BLDCNT_TGT1_BG0 (1 << 0) -#define BLDCNT_TGT1_BG1 (1 << 1) -#define BLDCNT_TGT1_BG2 (1 << 2) -#define BLDCNT_TGT1_BG3 (1 << 3) -#define BLDCNT_TGT1_OBJ (1 << 4) -#define BLDCNT_TGT1_BD (1 << 5) -#define BLDCNT_TGT1_ALL (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD) -// Bits 6-7 select the special effect -#define BLDCNT_EFFECT_NONE (0 << 6) // no special effect -#define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA) -#define BLDCNT_EFFECT_LIGHTEN (2 << 6) // 1st target becomes whiter (controlled by BLDY) -#define BLDCNT_EFFECT_DARKEN (3 << 6) // 1st target becomes blacker (controlled by BLDY) -// Bits 8-13 select layers for the 2nd target -#define BLDCNT_TGT2_BG0 (1 << 8) -#define BLDCNT_TGT2_BG1 (1 << 9) -#define BLDCNT_TGT2_BG2 (1 << 10) -#define BLDCNT_TGT2_BG3 (1 << 11) -#define BLDCNT_TGT2_OBJ (1 << 12) -#define BLDCNT_TGT2_BD (1 << 13) -#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD) - -// BLDALPHA -#define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1)) - -// SOUNDCNT_H -#define SOUND_CGB_MIX_QUARTER 0x0000 -#define SOUND_CGB_MIX_HALF 0x0001 -#define SOUND_CGB_MIX_FULL 0x0002 -#define SOUND_A_MIX_HALF 0x0000 -#define SOUND_A_MIX_FULL 0x0004 -#define SOUND_B_MIX_HALF 0x0000 -#define SOUND_B_MIX_FULL 0x0008 -#define SOUND_ALL_MIX_FULL 0x000E -#define SOUND_A_RIGHT_OUTPUT 0x0100 -#define SOUND_A_LEFT_OUTPUT 0x0200 -#define SOUND_A_TIMER_0 0x0000 -#define SOUND_A_TIMER_1 0x0400 -#define SOUND_A_FIFO_RESET 0x0800 -#define SOUND_B_RIGHT_OUTPUT 0x1000 -#define SOUND_B_LEFT_OUTPUT 0x2000 -#define SOUND_B_TIMER_0 0x0000 -#define SOUND_B_TIMER_1 0x4000 -#define SOUND_B_FIFO_RESET 0x8000 - -// SOUNDCNT_X -#define SOUND_1_ON 0x0001 -#define SOUND_2_ON 0x0002 -#define SOUND_3_ON 0x0004 -#define SOUND_4_ON 0x0008 -#define SOUND_MASTER_ENABLE 0x0080 - -// DMA -#define DMA_DEST_INC 0x0000 -#define DMA_DEST_DEC 0x0020 -#define DMA_DEST_FIXED 0x0040 -#define DMA_DEST_RELOAD 0x0060 -#define DMA_SRC_INC 0x0000 -#define DMA_SRC_DEC 0x0080 -#define DMA_SRC_FIXED 0x0100 -#define DMA_REPEAT 0x0200 -#define DMA_16BIT 0x0000 -#define DMA_32BIT 0x0400 -#define DMA_DREQ_ON 0x0800 -#define DMA_START_NOW 0x0000 -#define DMA_START_VBLANK 0x1000 -#define DMA_START_HBLANK 0x2000 -#define DMA_START_SPECIAL 0x3000 -#define DMA_START_MASK 0x3000 -#define DMA_INTR_ENABLE 0x4000 -#define DMA_ENABLE 0x8000 - -// timer -#define TIMER_1CLK 0x00 -#define TIMER_64CLK 0x01 -#define TIMER_256CLK 0x02 -#define TIMER_1024CLK 0x03 -#define TIMER_INTR_ENABLE 0x40 -#define TIMER_ENABLE 0x80 - -// serial -#define SIO_ID 0x0030 // Communication ID - -#define SIO_8BIT_MODE 0x0000 // Normal 8-bit communication mode -#define SIO_32BIT_MODE 0x1000 // Normal 32-bit communication mode -#define SIO_MULTI_MODE 0x2000 // Multi-player communication mode -#define SIO_UART_MODE 0x3000 // UART communication mode - -#define SIO_9600_BPS 0x0000 // baud rate 9600 bps -#define SIO_38400_BPS 0x0001 // 38400 bps -#define SIO_57600_BPS 0x0002 // 57600 bps -#define SIO_115200_BPS 0x0003 // 115200 bps - -#define SIO_MULTI_SI 0x0004 // Multi-player communication SI terminal -#define SIO_MULTI_SD 0x0008 // SD terminal -#define SIO_MULTI_BUSY 0x0080 - -#define SIO_ERROR 0x0040 // Detect error -#define SIO_START 0x0080 // Start transfer -#define SIO_ENABLE 0x0080 // Enable SIO - -#define SIO_INTR_ENABLE 0x4000 - -#define SIO_MULTI_SI_SHIFT 2 -#define SIO_MULTI_SI_MASK 0x1 -#define SIO_MULTI_DI_SHIFT 3 -#define SIO_MULTI_DI_MASK 0x1 - -// keys -#define A_BUTTON 0x0001 -#define B_BUTTON 0x0002 -#define SELECT_BUTTON 0x0004 -#define START_BUTTON 0x0008 -#define DPAD_RIGHT 0x0010 -#define DPAD_LEFT 0x0020 -#define DPAD_UP 0x0040 -#define DPAD_DOWN 0x0080 -#define R_BUTTON 0x0100 -#define L_BUTTON 0x0200 -#define KEYS_MASK 0x03FF -#define KEY_INTR_ENABLE 0x0400 -#define KEY_OR_INTR 0x0000 -#define KEY_AND_INTR 0x8000 -#define DPAD_ANY ((DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN)) -#define JOY_EXCL_DPAD 0x030F - -// interrupt flags -#define INTR_FLAG_VBLANK (1 << 0) -#define INTR_FLAG_HBLANK (1 << 1) -#define INTR_FLAG_VCOUNT (1 << 2) -#define INTR_FLAG_TIMER0 (1 << 3) -#define INTR_FLAG_TIMER1 (1 << 4) -#define INTR_FLAG_TIMER2 (1 << 5) -#define INTR_FLAG_TIMER3 (1 << 6) -#define INTR_FLAG_SERIAL (1 << 7) -#define INTR_FLAG_DMA0 (1 << 8) -#define INTR_FLAG_DMA1 (1 << 9) -#define INTR_FLAG_DMA2 (1 << 10) -#define INTR_FLAG_DMA3 (1 << 11) -#define INTR_FLAG_KEYPAD (1 << 12) -#define INTR_FLAG_GAMEPAK (1 << 13) - -// WAITCNT -#define WAITCNT_SRAM_4 (0 << 0) -#define WAITCNT_SRAM_3 (1 << 0) -#define WAITCNT_SRAM_2 (2 << 0) -#define WAITCNT_SRAM_8 (3 << 0) -#define WAITCNT_SRAM_MASK (3 << 0) - -#define WAITCNT_WS0_N_4 (0 << 2) -#define WAITCNT_WS0_N_3 (1 << 2) -#define WAITCNT_WS0_N_2 (2 << 2) -#define WAITCNT_WS0_N_8 (3 << 2) -#define WAITCNT_WS0_N_MASK (3 << 2) - -#define WAITCNT_WS0_S_2 (0 << 4) -#define WAITCNT_WS0_S_1 (1 << 4) - -#define WAITCNT_WS1_N_4 (0 << 5) -#define WAITCNT_WS1_N_3 (1 << 5) -#define WAITCNT_WS1_N_2 (2 << 5) -#define WAITCNT_WS1_N_8 (3 << 5) -#define WAITCNT_WS1_N_MASK (3 << 5) - -#define WAITCNT_WS1_S_4 (0 << 7) -#define WAITCNT_WS1_S_1 (1 << 7) - -#define WAITCNT_WS2_N_4 (0 << 8) -#define WAITCNT_WS2_N_3 (1 << 8) -#define WAITCNT_WS2_N_2 (2 << 8) -#define WAITCNT_WS2_N_8 (3 << 8) -#define WAITCNT_WS2_N_MASK (3 << 8) - -#define WAITCNT_WS2_S_8 (0 << 10) -#define WAITCNT_WS2_S_1 (1 << 10) - -#define WAITCNT_PHI_OUT_NONE (0 << 11) -#define WAITCNT_PHI_OUT_4MHZ (1 << 11) -#define WAITCNT_PHI_OUT_8MHZ (2 << 11) -#define WAITCNT_PHI_OUT_16MHZ (3 << 11) -#define WAITCNT_PHI_OUT_MASK (3 << 11) - -#define WAITCNT_PREFETCH_ENABLE (1 << 14) - -#define WAITCNT_AGB (0 << 15) -#define WAITCNT_CGB (1 << 15) - -#endif // GUARD_GBA_IO_REG_H diff --git a/berry_fix/payload/include/gba/isagbprint.h b/berry_fix/payload/include/gba/isagbprint.h deleted file mode 100644 index c5eb456c3f..0000000000 --- a/berry_fix/payload/include/gba/isagbprint.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef GUARD_GBA_ISAGBPRINT_H -#define GUARD_GBA_ISAGBPRINT_H - -#ifdef NDEBUG -#define AGBPrintInit() -#define AGBPutc(cChr) -#define AGBPrint(pBuf) -#define AGBPrintf(pBuf, ...) -#define AGBPrintFlush1Block() -#define AGBPrintFlush() -#define AGBAssert(pFile, nLine, pExpression, nStopProgram) -#else -void AGBPrintInit(void); -void AGBPutc(const char cChr); -void AGBPrint(const char *pBuf); -void AGBPrintf(const char *pBuf, ...); -void AGBPrintFlush1Block(void); -void AGBPrintFlush(void); -void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopProgram); -#endif - -#undef AGB_ASSERT -#ifdef NDEBUG -#define AGB_ASSERT(exp) -#else -#define AGB_ASSERT(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 1); -#endif - -#undef AGB_WARNING -#ifdef NDEBUG -#define AGB_WARNING(exp) -#else -#define AGB_WARNING(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 0); -#endif - -// for matching purposes - -#ifdef NDEBUG -#define AGB_ASSERT_EX(exp, file, line) -#else -#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 1); -#endif - -#ifdef NDEBUG -#define AGB_WARNING_EX(exp, file, line) -#else -#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 0); -#endif - -#endif // GUARD_GBA_ISAGBPRINT_H diff --git a/berry_fix/payload/include/gba/m4a_internal.h b/berry_fix/payload/include/gba/m4a_internal.h deleted file mode 100644 index 1aca675854..0000000000 --- a/berry_fix/payload/include/gba/m4a_internal.h +++ /dev/null @@ -1,467 +0,0 @@ -#ifndef GUARD_GBA_M4A_INTERNAL_H -#define GUARD_GBA_M4A_INTERNAL_H - -#include "gba/gba.h" - -// ASCII encoding of 'Smsh' in reverse -// This is presumably short for SMASH, the developer of MKS4AGB. -#define ID_NUMBER 0x68736D53 - -#define C_V 0x40 // center value for PAN, BEND, and TUNE - -#define SOUND_MODE_REVERB_VAL 0x0000007F -#define SOUND_MODE_REVERB_SET 0x00000080 -#define SOUND_MODE_MAXCHN 0x00000F00 -#define SOUND_MODE_MAXCHN_SHIFT 8 -#define SOUND_MODE_MASVOL 0x0000F000 -#define SOUND_MODE_MASVOL_SHIFT 12 -#define SOUND_MODE_FREQ_05734 0x00010000 -#define SOUND_MODE_FREQ_07884 0x00020000 -#define SOUND_MODE_FREQ_10512 0x00030000 -#define SOUND_MODE_FREQ_13379 0x00040000 -#define SOUND_MODE_FREQ_15768 0x00050000 -#define SOUND_MODE_FREQ_18157 0x00060000 -#define SOUND_MODE_FREQ_21024 0x00070000 -#define SOUND_MODE_FREQ_26758 0x00080000 -#define SOUND_MODE_FREQ_31536 0x00090000 -#define SOUND_MODE_FREQ_36314 0x000A0000 -#define SOUND_MODE_FREQ_40137 0x000B0000 -#define SOUND_MODE_FREQ_42048 0x000C0000 -#define SOUND_MODE_FREQ 0x000F0000 -#define SOUND_MODE_FREQ_SHIFT 16 -#define SOUND_MODE_DA_BIT_9 0x00800000 -#define SOUND_MODE_DA_BIT_8 0x00900000 -#define SOUND_MODE_DA_BIT_7 0x00A00000 -#define SOUND_MODE_DA_BIT_6 0x00B00000 -#define SOUND_MODE_DA_BIT 0x00B00000 -#define SOUND_MODE_DA_BIT_SHIFT 20 - -struct WaveData -{ - u16 type; - u16 status; - u32 freq; - u32 loopStart; - u32 size; // number of samples - s8 data[1]; // samples -}; - -#define TONEDATA_TYPE_CGB 0x07 -#define TONEDATA_TYPE_FIX 0x08 -#define TONEDATA_TYPE_SPL 0x40 // key split -#define TONEDATA_TYPE_RHY 0x80 // rhythm - -#define TONEDATA_P_S_PAN 0xc0 -#define TONEDATA_P_S_PAM TONEDATA_P_S_PAN - -struct ToneData -{ - u8 type; - u8 key; - u8 length; // sound length (compatible sound) - u8 pan_sweep; // pan or sweep (compatible sound ch. 1) - struct WaveData *wav; - u8 attack; - u8 decay; - u8 sustain; - u8 release; -}; - -struct CgbChannel -{ - u8 sf; - u8 ty; - u8 rightVolume; - u8 leftVolume; - u8 at; - u8 de; - u8 su; - u8 re; - u8 ky; - u8 ev; - u8 eg; - u8 ec; - u8 echoVolume; - u8 echoLength; - u8 d1; - u8 d2; - u8 gt; - u8 mk; - u8 ve; - u8 pr; - u8 rp; - u8 d3[3]; - u8 d5; - u8 sg; - u8 n4; - u8 pan; - u8 panMask; - u8 mo; - u8 le; - u8 sw; - u32 fr; - u32 wp; - u32 cp; - u32 tp; - u32 pp; - u32 np; - u8 d4[8]; -}; - -struct MusicPlayerTrack; - -struct SoundChannel -{ - u8 status; - u8 type; - u8 rightVolume; - u8 leftVolume; - u8 attack; - u8 decay; - u8 sustain; - u8 release; - u8 ky; - u8 ev; - u8 er; - u8 el; - u8 echoVolume; - u8 echoLength; - u8 d1; - u8 d2; - u8 gt; - u8 mk; - u8 ve; - u8 pr; - u8 rp; - u8 d3[3]; - u32 ct; - u32 fw; - u32 freq; - struct WaveData *wav; - u32 cp; - struct MusicPlayerTrack *track; - u32 pp; - u32 np; - u32 d4; - u16 xpi; - u16 xpc; -}; - -#define MAX_DIRECTSOUND_CHANNELS 12 - -#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer - -struct SoundInfo -{ - // This field is normally equal to ID_NUMBER but it is set to other - // values during sensitive operations for locking purposes. - // This field should be volatile but isn't. This could potentially cause - // race conditions. - u32 ident; - - vu8 pcmDmaCounter; - - // Direct Sound - u8 reverb; - u8 maxChans; - u8 masterVolume; - u8 freq; - - u8 mode; - u8 c15; - u8 pcmDmaPeriod; // number of V-blanks per PCM DMA - u8 maxLines; - u8 gap[3]; - s32 pcmSamplesPerVBlank; - s32 pcmFreq; - s32 divFreq; - struct CgbChannel *cgbChans; - u32 func; - u32 intp; - void (*CgbSound)(void); - void (*CgbOscOff)(u8); - u32 (*MidiKeyToCgbFreq)(u8, u8, u8); - u32 MPlayJumpTable; - u32 plynote; - u32 ExtVolPit; - u8 gap2[16]; - struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; - s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; -}; - -struct SongHeader -{ - u8 trackCount; - u8 blockCount; - u8 priority; - u8 reverb; - struct ToneData *tone; - u8 *part[1]; -}; - -struct PokemonCrySong -{ - u8 trackCount; - u8 blockCount; - u8 priority; - u8 reverb; - struct ToneData *tone; - u8 *part[2]; - u8 gap; - u8 part0; // 0x11 - u8 tuneValue; // 0x12 - u8 gotoCmd; // 0x13 - u32 gotoTarget; // 0x14 - u8 part1; // 0x18 - u8 tuneValue2; // 0x19 - u8 cont[2]; // 0x1A - u8 volCmd; // 0x1C - u8 volumeValue; // 0x1D - u8 unkCmd0D[2]; // 0x1E - u32 unkCmd0DParam; // 0x20 - u8 xreleCmd[2]; // 0x24 - u8 releaseValue; // 0x26 - u8 panCmd; - u8 panValue; // 0x28 - u8 tieCmd; // 0x29 - u8 tieKeyValue; // 0x2A - u8 tieVelocityValue; // 0x2B - u8 unkCmd0C[2]; // 0x2C - u16 unkCmd0CParam; // 0x2E - u8 end[2]; // 0x30 -}; - -#define MPT_FLG_VOLSET 0x01 -#define MPT_FLG_VOLCHG 0x03 -#define MPT_FLG_PITSET 0x04 -#define MPT_FLG_PITCHG 0x0C -#define MPT_FLG_START 0x40 -#define MPT_FLG_EXIST 0x80 - -struct MusicPlayerTrack -{ - u8 flags; - u8 wait; - u8 patternLevel; - u8 repN; - u8 gateTime; - u8 key; - u8 velocity; - u8 runningStatus; - u8 keyM; - u8 pitM; - s8 keyShift; - s8 keyShiftX; - s8 tune; - u8 pitX; - s8 bend; - u8 bendRange; - u8 volMR; - u8 volML; - u8 vol; - u8 volX; - s8 pan; - s8 panX; - s8 modM; - u8 mod; - u8 modT; - u8 lfoSpeed; - u8 lfoSpeedC; - u8 lfoDelay; - u8 lfoDelayC; - u8 priority; - u8 echoVolume; - u8 echoLength; - struct SoundChannel *chan; - struct ToneData tone; - u8 gap[10]; - u16 unk_3A; - u32 unk_3C; - u8 *cmdPtr; - u8 *patternStack[3]; -}; - -#define MUSICPLAYER_STATUS_TRACK 0x0000ffff -#define MUSICPLAYER_STATUS_PAUSE 0x80000000 - -#define MAX_MUSICPLAYER_TRACKS 16 - -#define TEMPORARY_FADE 0x0001 -#define FADE_IN 0x0002 -#define FADE_VOL_MAX 64 -#define FADE_VOL_SHIFT 2 - -struct MusicPlayerInfo -{ - struct SongHeader *songHeader; - u32 status; - u8 trackCount; - u8 priority; - u8 cmd; - u8 unk_B; - u32 clock; - u8 gap[8]; - u8 *memAccArea; - u16 tempoD; - u16 tempoU; - u16 tempoI; - u16 tempoC; - u16 fadeOI; - u16 fadeOC; - u16 fadeOV; - struct MusicPlayerTrack *tracks; - struct ToneData *tone; - u32 ident; - u32 func; - u32 intp; -}; - -struct MusicPlayer -{ - struct MusicPlayerInfo *info; - struct MusicPlayerTrack *track; - u8 unk_8; - u16 unk_A; -}; - -struct Song -{ - struct SongHeader *header; - u16 ms; - u16 me; -}; - -extern const struct MusicPlayer gMPlayTable[]; -extern const struct Song gSongTable[]; - - - -extern u8 gMPlayMemAccArea[]; - -//u8 gPokemonCrySong[52]; -//u8 gPokemonCrySongs[52 * MAX_POKEMON_CRIES]; - -#define MAX_POKEMON_CRIES 2 - -extern struct PokemonCrySong gPokemonCrySong; -extern struct PokemonCrySong gPokemonCrySongs[]; - -extern struct MusicPlayerInfo gPokemonCryMusicPlayers[]; -extern struct MusicPlayerTrack gPokemonCryTracks[]; - -extern char SoundMainRAM[]; - -extern void *gMPlayJumpTable[]; - -typedef void (*XcmdFunc)(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -extern const XcmdFunc gXcmdTable[]; - -extern struct CgbChannel gCgbChans[]; - -extern const u8 gScaleTable[]; -extern const u32 gFreqTable[]; -extern const u16 gPcmSamplesPerVBlankTable[]; - -extern const u8 gCgbScaleTable[]; -extern const s16 gCgbFreqTable[]; -extern const u8 gNoiseTable[]; - -extern const struct PokemonCrySong gPokemonCrySongTemplate; - -extern const struct ToneData voicegroup000; - -extern char gNumMusicPlayers[]; -extern char gMaxLines[]; - -#define NUM_MUSIC_PLAYERS ((u16)gNumMusicPlayers) -#define MAX_LINES ((u32)gMaxLines) - -u32 umul3232H32(u32 multiplier, u32 multiplicand); -void SoundMain(void); -void SoundMainBTM(void); -void TrackStop(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track); -void MPlayMain(void); -void RealClearChain(void *x); - -void MPlayContinue(struct MusicPlayerInfo *mplayInfo); -void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader); -void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo); -void FadeOutBody(struct MusicPlayerInfo *mplayInfo); -void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track); -void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed); -void ClearChain(void *x); -void Clear64byte(void *addr); -void SoundInit(struct SoundInfo *soundInfo); -void MPlayExtender(struct CgbChannel *cgbChans); -void m4aSoundMode(u32 mode); -void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track, u8 a3); -void CgbSound(void); -void CgbOscOff(u8); -u32 MidiKeyToCgbFreq(u8, u8, u8); -void DummyFunc(void); -void MPlayJumpTableCopy(void **mplayJumpTable); -void SampleFreqSet(u32 freq); -void m4aSoundVSyncOn(void); -void m4aSoundVSyncOff(void); - -void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo); -void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume); -void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch); -void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan); -void ClearModM(struct MusicPlayerTrack *track); -void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth); -void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed); - -struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone); -void SetPokemonCryVolume(u8 val); -void SetPokemonCryPanpot(s8 val); -void SetPokemonCryPitch(s16 val); -void SetPokemonCryLength(u16 val); -void SetPokemonCryRelease(u8 val); -void SetPokemonCryProgress(u32 val); -bool32 IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo); -void SetPokemonCryChorus(s8 val); -void SetPokemonCryStereo(u32 val); -void SetPokemonCryPriority(u8 val); - -// sound command handler functions -void ply_fine(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_goto(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_patt(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_pend(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_rept(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_memacc(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_prio(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_tempo(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_keysh(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_voice(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_vol(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_pan(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_bend(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_bendr(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_lfos(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_lfodl(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_mod(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_modt(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *); - -// extended sound command handler functions -void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xwave(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xtype(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xatta(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xdeca(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xsust(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xrele(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xiecv(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xiecl(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xleng(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xswee(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xcmd_0C(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xcmd_0D(struct MusicPlayerInfo *, struct MusicPlayerTrack *); - -#endif // GUARD_GBA_M4A_INTERNAL_H diff --git a/berry_fix/payload/include/gba/macro.h b/berry_fix/payload/include/gba/macro.h deleted file mode 100644 index 6f9c55f2ed..0000000000 --- a/berry_fix/payload/include/gba/macro.h +++ /dev/null @@ -1,247 +0,0 @@ -#ifndef GUARD_GBA_MACRO_H -#define GUARD_GBA_MACRO_H - -#define CPU_FILL(value, dest, size, bit) \ -{ \ - vu##bit tmp = (vu##bit)(value); \ - CpuSet((void *)&tmp, \ - dest, \ - CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size)/(bit/8) & 0x1FFFFF)); \ -} - -#define CpuFill16(value, dest, size) CPU_FILL(value, dest, size, 16) -#define CpuFill32(value, dest, size) CPU_FILL(value, dest, size, 32) - -#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size)/(bit/8) & 0x1FFFFF)) - -#define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16) -#define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32) - -#define CpuFastFill(value, dest, size) \ -{ \ - vu32 tmp = (vu32)(value); \ - CpuFastSet((void *)&tmp, \ - dest, \ - CPU_FAST_SET_SRC_FIXED | ((size)/(32/8) & 0x1FFFFF)); \ -} - -#define CpuFastFill16(value, dest, size) CpuFastFill(((value) << 16) | (value), (dest), (size)) - -#define CpuFastFill8(value, dest, size) CpuFastFill(((value) << 24) | ((value) << 16) | ((value) << 8) | (value), (dest), (size)) - -#define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF)) - -#define DmaSet(dmaNum, src, dest, control) \ -{ \ - vu32 *dmaRegs = (vu32 *)REG_ADDR_DMA##dmaNum; \ - dmaRegs[0] = (vu32)(src); \ - dmaRegs[1] = (vu32)(dest); \ - dmaRegs[2] = (vu32)(control); \ - dmaRegs[2]; \ -} - -#define DMA_FILL(dmaNum, value, dest, size, bit) \ -{ \ - vu##bit tmp = (vu##bit)(value); \ - DmaSet(dmaNum, \ - &tmp, \ - dest, \ - (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 \ - | ((size)/(bit/8))); \ -} - -#define DmaFill16(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 16) -#define DmaFill32(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 32) - -// Note that the DMA clear macros cause the DMA control value to be calculated -// at runtime rather than compile time. The size is divided by the DMA transfer -// unit size (2 or 4 bytes) and then combined with the DMA control flags using a -// bitwise OR operation. - -#define DMA_CLEAR(dmaNum, dest, size, bit) \ -{ \ - vu##bit *_dest = (vu##bit *)(dest); \ - u32 _size = size; \ - DmaFill##bit(dmaNum, 0, _dest, _size); \ -} - -#define DmaClear16(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 16) -#define DmaClear32(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 32) - -#define DMA_COPY(dmaNum, src, dest, size, bit) \ - DmaSet(dmaNum, \ - src, \ - dest, \ - (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 \ - | ((size)/(bit/8))) - -#define DmaCopy16(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 16) -#define DmaCopy32(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 32) - -#define DmaCopyLarge(dmaNum, src, dest, size, block, bit) \ -{ \ - const void *_src = src; \ - void *_dest = (void *)dest; \ - u32 _size = size; \ - while (1) \ - { \ - DmaCopy##bit(dmaNum, _src, _dest, (block)); \ - _src += (block); \ - _dest += (block); \ - _size -= (block); \ - if (_size <= (block)) \ - { \ - DmaCopy##bit(dmaNum, _src, _dest, _size); \ - break; \ - } \ - } \ -} - -#define DmaCopyLarge16(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 16) - -#define DmaCopyLarge32(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 32) - -#define DmaFillLarge(dmaNum, value, dest, size, block, bit) \ -{ \ - void *_dest = (void *)dest; \ - u32 _size = size; \ - while (1) \ - { \ - DmaFill##bit(dmaNum, value, _dest, (block)); \ - _dest += (block); \ - _size -= (block); \ - if (_size <= (block)) \ - { \ - DmaFill##bit(dmaNum, value, _dest, _size); \ - break; \ - } \ - } \ -} - -#define DmaFillLarge16(dmaNum, value, dest, size, block) DmaFillLarge(dmaNum, value, dest, size, block, 16) - -#define DmaFillLarge32(dmaNum, value, dest, size, block) DmaFillLarge(dmaNum, value, dest, size, block, 32) - -#define DmaClearLarge(dmaNum, dest, size, block, bit) \ -{ \ - void *_dest = (void *)dest; \ - u32 _size = size; \ - while (1) \ - { \ - DmaFill##bit(dmaNum, 0, _dest, (block)); \ - _dest += (block); \ - _size -= (block); \ - if (_size <= (block)) \ - { \ - DmaFill##bit(dmaNum, 0, _dest, _size); \ - break; \ - } \ - } \ -} - -#define DmaClearLarge16(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 16) - -#define DmaClearLarge32(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 32) - -#define DmaCopyDefvars(dmaNum, src, dest, size, bit) \ -{ \ - const void *_src = src; \ - void *_dest = (void *)(dest); \ - u32 _size = size; \ - DmaCopy##bit(dmaNum, _src, _dest, _size); \ -} - -#define DmaCopy16Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 16) -#define DmaCopy32Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 32) - -#define DmaFillDefvars(dmaNum, value, dest, size, bit) \ -{ \ - void *_dest = (void *)dest; \ - u32 _size = size; \ - DmaFill##bit(dmaNum, value, _dest, _size); \ -} - -#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16) -#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32) - -#define DmaClearDefvars(dmaNum, dest, size, bit) \ -{ \ - void *_dest = (void *)dest; \ - u32 _size = size; \ - DmaClear##bit(dmaNum, _dest, _size); \ -} - -#define DmaClear16Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 16) -#define DmaClear32Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 32) - -#define DmaStop(dmaNum) \ -{ \ - vu16 *dmaRegs = (vu16 *)REG_ADDR_DMA##dmaNum; \ - dmaRegs[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); \ - dmaRegs[5] &= ~DMA_ENABLE; \ - dmaRegs[5]; \ -} - -#define IntrEnable(flags) \ -{ \ - u16 imeTemp; \ - \ - imeTemp = REG_IME; \ - REG_IME = 0; \ - REG_IE |= flags; \ - REG_IME = imeTemp; \ -} \ -// from pokeemerald -// Maximum amount of data we will transfer in one operation -#define MAX_DMA_BLOCK_SIZE 0x1000 - -#define MAX_DMA_REQUESTS 128 - -#define DMA_REQUEST_COPY32 1 -#define DMA_REQUEST_FILL32 2 -#define DMA_REQUEST_COPY16 3 -#define DMA_REQUEST_FILL16 4 - -#define Dma3CopyLarge_(src, dest, size, bit) \ -{ \ - const void *_src = src; \ - void *_dest = (void *)dest; \ - u32 _size = size; \ - while (1) \ - { \ - if (_size <= MAX_DMA_BLOCK_SIZE) \ - { \ - DmaCopy##bit(3, _src, _dest, _size); \ - break; \ - } \ - DmaCopy##bit(3, _src, _dest, MAX_DMA_BLOCK_SIZE); \ - _src += MAX_DMA_BLOCK_SIZE; \ - _dest += MAX_DMA_BLOCK_SIZE; \ - _size -= MAX_DMA_BLOCK_SIZE; \ - } \ -} - -#define Dma3CopyLarge16_(src, dest, size) Dma3CopyLarge_(src, dest, size, 16) -#define Dma3CopyLarge32_(src, dest, size) Dma3CopyLarge_(src, dest, size, 32) - -#define Dma3FillLarge_(value, dest, size, bit) \ -{ \ - void *_dest = (void *)dest; \ - u32 _size = size; \ - while (1) \ - { \ - if (_size <= MAX_DMA_BLOCK_SIZE) \ - { \ - DmaFill##bit(3, value, _dest, _size); \ - break; \ - } \ - DmaFill##bit(3, value, _dest, MAX_DMA_BLOCK_SIZE); \ - _dest += MAX_DMA_BLOCK_SIZE; \ - _size -= MAX_DMA_BLOCK_SIZE; \ - } \ -} - -#define Dma3FillLarge16_(value, dest, size) Dma3FillLarge_(value, dest, size, 16) -#define Dma3FillLarge32_(value, dest, size) Dma3FillLarge_(value, dest, size, 32) - -#endif // GUARD_GBA_MACRO_H diff --git a/berry_fix/payload/include/gba/multiboot.h b/berry_fix/payload/include/gba/multiboot.h deleted file mode 100644 index 14b6594b29..0000000000 --- a/berry_fix/payload/include/gba/multiboot.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef GUARD_GBA_MULTIBOOT_H -#define GUARD_GBA_MULTIBOOT_H - -#define MULTIBOOT_NCHILD 3 // Maximum number of slaves -#define MULTIBOOT_HEADER_SIZE 0xc0 // Header size -#define MULTIBOOT_SEND_SIZE_MIN 0x100 // Minimum transmission size -#define MULTIBOOT_SEND_SIZE_MAX 0x40000 // Maximum transmission size - -struct MultiBootParam -{ - u32 system_work[5]; // 00 - u8 handshake_data; // 14 - u8 padding; // 15 - u16 handshake_timeout; // 16 - u8 probe_count; // 18 - u8 client_data[MULTIBOOT_NCHILD]; // 19 - u8 palette_data; // 1c - u8 response_bit; // 1d - u8 client_bit; // 1e - u8 reserved1; // 1f - const u8 *boot_srcp; // 20 - const u8 *boot_endp; // 24 - const u8 *masterp; - u8 *reserved2[MULTIBOOT_NCHILD]; - u32 system_work2[4]; - u8 sendflag; - u8 probe_target_bit; - u8 check_wait; - u8 server_type; -}; - -#define MULTIBOOT_ERROR_04 0x04 -#define MULTIBOOT_ERROR_08 0x08 -#define MULTIBOOT_ERROR_0c 0x0c -#define MULTIBOOT_ERROR_40 0x40 -#define MULTIBOOT_ERROR_44 0x44 -#define MULTIBOOT_ERROR_48 0x48 -#define MULTIBOOT_ERROR_4c 0x4c -#define MULTIBOOT_ERROR_80 0x80 -#define MULTIBOOT_ERROR_84 0x84 -#define MULTIBOOT_ERROR_88 0x88 -#define MULTIBOOT_ERROR_8c 0x8c -#define MULTIBOOT_ERROR_NO_PROBE_TARGET 0x50 -#define MULTIBOOT_ERROR_NO_DLREADY 0x60 -#define MULTIBOOT_ERROR_BOOT_FAILURE 0x70 -#define MULTIBOOT_ERROR_HANDSHAKE_FAILURE 0x71 - -#define MULTIBOOT_CONNECTION_CHECK_WAIT 15 - -#define MULTIBOOT_SERVER_TYPE_NORMAL 0 -#define MULTIBOOT_SERVER_TYPE_QUICK 1 - -#define MULTIBOOT_HANDSHAKE_TIMEOUT 400 - -#endif // GUARD_GBA_MULTIBOOT_H diff --git a/berry_fix/payload/include/gba/syscall.h b/berry_fix/payload/include/gba/syscall.h deleted file mode 100644 index eb1bd4e20f..0000000000 --- a/berry_fix/payload/include/gba/syscall.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef GUARD_GBA_SYSCALL_H -#define GUARD_GBA_SYSCALL_H - -#include "gba/types.h" - -#define RESET_EWRAM 0x01 -#define RESET_IWRAM 0x02 -#define RESET_PALETTE 0x04 -#define RESET_VRAM 0x08 -#define RESET_OAM 0x10 -#define RESET_SIO_REGS 0x20 -#define RESET_SOUND_REGS 0x40 -#define RESET_REGS 0x80 -#define RESET_ALL 0xFF - -void SoftReset(u32 resetFlags); - -void RegisterRamReset(u32 resetFlags); - -void VBlankIntrWait(void); - -u16 Sqrt(u32 num); - -u16 ArcTan2(s16 x, s16 y); - -#define CPU_SET_SRC_FIXED 0x01000000 -#define CPU_SET_16BIT 0x00000000 -#define CPU_SET_32BIT 0x04000000 - -void CpuSet(const void *src, void *dest, u32 control); - -#define CPU_FAST_SET_SRC_FIXED 0x01000000 - -void CpuFastSet(const void *src, void *dest, u32 control); - -void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count); - -void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset); - -void LZ77UnCompWram(const void *src, void *dest); - -void LZ77UnCompVram(const void *src, void *dest); - -void RLUnCompWram(const void *src, void *dest); - -void RLUnCompVram(const void *src, void *dest); - -int MultiBoot(struct MultiBootParam *mp); - -void SoundBiasReset(void); - -void SoundBiasSet(void); - -u32 Div(u32 divisor, u32 dividend); -u32 Mod(u32 divisor, u32 dividend); - -#endif // GUARD_GBA_SYSCALL_H diff --git a/berry_fix/payload/include/gba/types.h b/berry_fix/payload/include/gba/types.h deleted file mode 100644 index e919abc22a..0000000000 --- a/berry_fix/payload/include/gba/types.h +++ /dev/null @@ -1,146 +0,0 @@ -#ifndef GUARD_GBA_TYPES_H -#define GUARD_GBA_TYPES_H - -#include - -typedef uint8_t u8; -typedef uint16_t u16; -typedef uint32_t u32; -typedef uint64_t u64; -typedef int8_t s8; -typedef int16_t s16; -typedef int32_t s32; -typedef int64_t s64; - -typedef volatile u8 vu8; -typedef volatile u16 vu16; -typedef volatile u32 vu32; -typedef volatile u64 vu64; -typedef volatile s8 vs8; -typedef volatile s16 vs16; -typedef volatile s32 vs32; -typedef volatile s64 vs64; - -typedef float f32; -typedef double f64; - -typedef u8 bool8; -typedef u16 bool16; -typedef u32 bool32; - -struct BgCnt -{ - u16 priority:2; - u16 charBaseBlock:2; - u16 dummy:2; - u16 mosaic:1; - u16 palettes:1; - u16 screenBaseBlock:5; - u16 areaOverflowMode:1; - u16 screenSize:2; -}; -typedef volatile struct BgCnt vBgCnt; - -struct PlttData -{ - u16 r:5; // red - u16 g:5; // green - u16 b:5; // blue - u16 unused_15:1; -}; - -struct OamData -{ - /*0x00*/ u32 y:8; - /*0x01*/ u32 affineMode:2; // 0x1, 0x2 -> 0x4 - u32 objMode:2; // 0x4, 0x8 -> 0xC - u32 mosaic:1; // 0x10 - u32 bpp:1; // 0x20 - u32 shape:2; // 0x40, 0x80 -> 0xC0 - - /*0x02*/ u32 x:9; - u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode - u32 size:2; - - /*0x04*/ u16 tileNum:10; // 0x3FF - u16 priority:2; // 0x400, 0x800 -> 0xC00 - u16 paletteNum:4; - /*0x06*/ u16 affineParam; -}; - -#define ST_OAM_OBJ_NORMAL 0 -#define ST_OAM_OBJ_BLEND 1 -#define ST_OAM_OBJ_WINDOW 2 - -#define ST_OAM_AFFINE_OFF 0 -#define ST_OAM_AFFINE_NORMAL 1 -#define ST_OAM_AFFINE_ERASE 2 -#define ST_OAM_AFFINE_DOUBLE 3 - -#define ST_OAM_AFFINE_ON_MASK 1 -#define ST_OAM_AFFINE_DOUBLE_MASK 2 - -#define ST_OAM_4BPP 0 -#define ST_OAM_8BPP 1 - -#define ST_OAM_SQUARE 0 -#define ST_OAM_H_RECTANGLE 1 -#define ST_OAM_V_RECTANGLE 2 - -struct BgAffineSrcData -{ - s32 texX; - s32 texY; - s16 scrX; - s16 scrY; - s16 sx; - s16 sy; - u16 alpha; -}; - -struct BgAffineDstData -{ - s16 pa; - s16 pb; - s16 pc; - s16 pd; - s32 dx; - s32 dy; -}; - -struct ObjAffineSrcData -{ - s16 xScale; - s16 yScale; - u16 rotation; -}; - -// Multi-player SIO Control Structure -struct SioMultiCnt -{ - u16 baudRate:2; // baud rate - u16 si:1; // SI terminal - u16 sd:1; // SD terminal - u16 id:2; // ID - u16 error:1; // error flag - u16 enable:1; // SIO enable - u16 unused_11_8:4; - u16 mode:2; // communication mode (should equal 2) - u16 intrEnable:1; // IRQ enable - u16 unused_15:1; - u16 data; // data -}; - -#define ST_SIO_MULTI_MODE 2 // Multi-player communication mode - -// baud rate -#define ST_SIO_9600_BPS 0 // 9600 bps -#define ST_SIO_38400_BPS 1 // 38400 bps -#define ST_SIO_57600_BPS 2 // 57600 bps -#define ST_SIO_115200_BPS 3 // 115200 bps - -typedef void (*MainCallback)(void); -typedef void (*IntrCallback)(void); -typedef void (*IntrFunc)(void); - -#endif // GUARD_GBA_TYPES_H diff --git a/berry_fix/payload/include/global.berry.h b/berry_fix/payload/include/global.berry.h deleted file mode 100644 index 8f185c8f9d..0000000000 --- a/berry_fix/payload/include/global.berry.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef GUARD_GLOBAL_BERRY_H -#define GUARD_GLOBAL_BERRY_H - -struct Berry -{ - /*0x00*/ u8 name[7]; - /*0x07*/ u8 firmness; - /*0x08*/ u16 size; - /*0x0A*/ u8 maxYield; - /*0x0B*/ u8 minYield; - /*0x0C*/ const u8 *description1; - /*0x10*/ const u8 *description2; - /*0x14*/ u8 stageDuration; - /*0x15*/ u8 spicy; - /*0x16*/ u8 dry; - /*0x17*/ u8 sweet; - /*0x18*/ u8 bitter; - /*0x19*/ u8 sour; - /*0x1A*/ u8 smoothness; -}; - -struct EnigmaBerry -{ - /*0x000*/ struct Berry berry; - /*0x01B*/ u8 pic[(6 * 6) * TILE_SIZE_4BPP]; - /*0x49C*/ u16 palette[16]; - /*0x4BC*/ u8 description1[45]; - /*0x4E9*/ u8 description2[45]; - /*0x516*/ u8 itemEffect[18]; - /*0x528*/ u8 holdEffect; - /*0x529*/ u8 holdEffectParam; - /*0x52C*/ u32 checksum; -}; - -struct BattleEnigmaBerry -{ - /*0x00*/ u8 name[7]; - /*0x07*/ u8 holdEffect; - /*0x08*/ u8 itemEffect[18]; - /*0x1A*/ u8 holdEffectParam; -}; - -struct BerryTree -{ - /*0x00*/ u8 berry; - /*0x01*/ u8 stage:7; - /* - A berry sparkle is a state that a berry tree - can be in after growing within the player's - viewport. - */ - /*0x01*/ bool8 growthSparkle:1; - /*0x02*/ u16 minutesUntilNextStage; - /*0x04*/ u8 berryYield; - /*0x05*/ u8 regrowthCount:4; - /*0x05*/ u8 watered1:1; - /*0x05*/ u8 watered2:1; - /*0x05*/ u8 watered3:1; - /*0x05*/ u8 watered4:1; -}; - -#endif // GUARD_GLOBAL_BERRY_H diff --git a/berry_fix/payload/include/global.fieldmap.h b/berry_fix/payload/include/global.fieldmap.h deleted file mode 100644 index d5ab0812e5..0000000000 --- a/berry_fix/payload/include/global.fieldmap.h +++ /dev/null @@ -1,310 +0,0 @@ -#ifndef GUARD_GLOBAL_FIELDMAP_H -#define GUARD_GLOBAL_FIELDMAP_H - -enum -{ - CONNECTION_SOUTH = 1, - CONNECTION_NORTH, - CONNECTION_WEST, - CONNECTION_EAST, - CONNECTION_DIVE, - CONNECTION_EMERGE -}; - -typedef void (*TilesetCB)(void); - -struct Tileset -{ - /*0x00*/ bool8 isCompressed; - /*0x01*/ bool8 isSecondary; - /*0x04*/ void *tiles; - /*0x08*/ void *palettes; - /*0x0c*/ void *metatiles; - /*0x10*/ void *metatileAttributes; - /*0x14*/ TilesetCB callback; -}; - -struct MapLayout -{ - /*0x00*/ s32 width; - /*0x04*/ s32 height; - /*0x08*/ u16 *border; - /*0x0c*/ u16 *map; - /*0x10*/ struct Tileset *primaryTileset; - /*0x14*/ struct Tileset *secondaryTileset; -}; - -struct BackupMapLayout -{ - s32 width; - s32 height; - u16 *map; -}; - -struct EventObjectTemplate -{ - /*0x00*/ u8 localId; - /*0x01*/ u8 graphicsId; - /*0x02*/ u8 unk2; - /*0x04*/ s16 x; - /*0x06*/ s16 y; - /*0x08*/ u8 elevation; - /*0x09*/ u8 movementType; - /*0x0A*/ u8 movementRangeX:4; - u8 movementRangeY:4; - /*0x0C*/ u16 trainerType; - /*0x0E*/ u16 trainerRange_berryTreeId; - /*0x10*/ u8 *script; - /*0x14*/ u16 flagId; -}; - -struct WarpEvent -{ - s16 x, y; - u8 elevation; - u8 warpId; - u8 mapNum; - u8 mapGroup; -}; - -struct CoordEvent -{ - s16 x, y; - u8 elevation; - u16 trigger; - u16 index; - u8 filler_A[0x2]; - u8 *script; -}; - -struct BgEvent -{ - u16 x, y; - u8 elevation; - u8 kind; // The "kind" field determines how to access bgUnion union below. - union { - u8 *script; - struct { - u16 item; - u16 hiddenItemId; - } hiddenItem; - u32 secretBaseId; - } bgUnion; -}; - -struct MapEvents -{ - u8 eventObjectCount; - u8 warpCount; - u8 coordEventCount; - u8 bgEventCount; - - struct EventObjectTemplate *eventObjects; - struct WarpEvent *warps; - struct CoordEvent *coordEvents; - struct BgEvent *bgEvents; -}; - -struct MapConnection -{ - /*0x00*/ u8 direction; - /*0x01*/ u32 offset; - /*0x05*/ u8 mapGroup; - /*0x06*/ u8 mapNum; -}; - -struct MapConnections -{ - s32 count; - struct MapConnection *connections; -}; - -struct MapHeader -{ - /* 0x00 */ struct MapLayout *mapLayout; - /* 0x04 */ struct MapEvents *events; - /* 0x08 */ u8 *mapScripts; - /* 0x0C */ struct MapConnections *connections; - /* 0x10 */ u16 music; - /* 0x12 */ u16 mapLayoutId; - /* 0x14 */ u8 regionMapSectionId; - /* 0x15 */ u8 cave; - /* 0x16 */ u8 weather; - /* 0x17 */ u8 mapType; - /* 0x18 */ u8 filler_18; - /* 0x19 */ u8 escapeRope; - /* 0x1A */ u8 flags; - /* 0x1B */ u8 battleType; -}; - -struct EventObject -{ - /*0x00*/ u32 active:1; - u32 singleMovementActive:1; - u32 triggerGroundEffectsOnMove:1; - u32 triggerGroundEffectsOnStop:1; - u32 disableCoveringGroundEffects:1; // disables ground effects that cover parts of the object's sprite - u32 landingJump:1; - u32 heldMovementActive:1; - u32 heldMovementFinished:1; - /*0x01*/ u32 frozen:1; - u32 facingDirectionLocked:1; - u32 disableAnim:1; // used to disable forced movement sliding animations (like on ice) - u32 enableAnim:1; - u32 inanimate:1; - u32 invisible:1; - u32 offScreen:1; - u32 trackedByCamera:1; // only set for the player object - /*0x02*/ u32 isPlayer:1; - u32 hasReflection:1; - u32 inShortGrass:1; - u32 inShallowFlowingWater:1; - u32 inSandPile:1; - u32 inHotSprings:1; - u32 hasShadow:1; - u32 spriteAnimPausedBackup:1; - /*0x03*/ u32 spriteAffineAnimPausedBackup:1; - u32 disableJumpLandingGroundEffect:1; - u32 fixedPriority:1; - /*0x04*/ u8 spriteId; - /*0x05*/ u8 graphicsId; - /*0x06*/ u8 movementType; - /*0x07*/ u8 trainerType; - /*0x08*/ u8 localId; - /*0x09*/ u8 mapNum; - /*0x0A*/ u8 mapGroup; - /*0x0B*/ u8 currentElevation:4; - u8 previousElevation:4; - /*0x0C*/ struct Coords16 initialCoords; - /*0x10*/ struct Coords16 currentCoords; - /*0x14*/ struct Coords16 previousCoords; - /*0x18*/ u8 facingDirection:4; - /*0x18*/ u8 movementDirection:4; - /*0x19*/ union __attribute__((packed)) { - u8 as_byte; - struct __attribute__((packed)) { - u16 x:4; - u16 y:4; - } as_nybbles; - } range; - /*0x1A*/ u8 fieldEffectSpriteId; - /*0x1B*/ u8 warpArrowSpriteId; - /*0x1C*/ u8 movementActionId; - /*0x1D*/ u8 trainerRange_berryTreeId; - /*0x1E*/ u8 currentMetatileBehavior; - /*0x1F*/ u8 previousMetatileBehavior; - /*0x20*/ u8 previousMovementDirection; - /*0x21*/ u8 directionSequenceIndex; - /*0x22*/ u8 playerCopyableMovement; // used as an index to gCopyPlayerMovementFuncs for the "copy player" movement types - /*size = 0x24*/ -}; - -struct EventObjectGraphicsInfo -{ - /*0x00*/ u16 tileTag; - /*0x02*/ u16 paletteTag; - /*0x04*/ u16 bridgeReflectionPaletteTag; - /*0x06*/ u16 size; - /*0x08*/ s16 width; - /*0x0A*/ s16 height; - /*0x0C*/ u8 paletteSlot:4; - u8 shadowSize:2; - u8 inanimate:1; - u8 disableReflectionPaletteLoad:1; - /*0x0D*/ u8 tracks; - /*0x10*/ const struct OamData *oam; - /*0x14*/ const struct SubspriteTable *subspriteTables; - /*0x18*/ const union AnimCmd *const *anims; - /*0x1C*/ const struct SpriteFrameImage *images; - /*0x20*/ const union AffineAnimCmd *const *affineAnims; -}; - -#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0) -#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1) -#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2) -#define PLAYER_AVATAR_FLAG_SURFING (1 << 3) -#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4) -#define PLAYER_AVATAR_FLAG_5 (1 << 5) -#define PLAYER_AVATAR_FLAG_6 (1 << 6) -#define PLAYER_AVATAR_FLAG_DASH (1 << 7) - -enum -{ - ACRO_BIKE_NORMAL, - ACRO_BIKE_TURNING, - ACRO_BIKE_WHEELIE_STANDING, - ACRO_BIKE_BUNNY_HOP, - ACRO_BIKE_WHEELIE_MOVING, - ACRO_BIKE_STATE5, - ACRO_BIKE_STATE6, -}; - -enum -{ - DIR_NONE, - DIR_SOUTH, - DIR_NORTH, - DIR_WEST, - DIR_EAST, - DIR_SOUTHWEST, - DIR_SOUTHEAST, - DIR_NORTHWEST, - DIR_NORTHEAST, -}; - -enum -{ - COLLISION_LEDGE_JUMP = 6 -}; - -// player running states -enum -{ - NOT_MOVING, - TURN_DIRECTION, // not the same as turning! turns your avatar without moving. also known as a turn frame in some circles - MOVING, -}; - -// player tile transition states -enum -{ - T_NOT_MOVING, - T_TILE_TRANSITION, - T_TILE_CENTER, // player is on a frame in which they are centered on a tile during which the player either stops or keeps their momentum and keeps going, changing direction if necessary. -}; - -struct PlayerAvatar /* 0x202E858 */ -{ - /*0x00*/ u8 flags; - /*0x01*/ u8 unk1; // used to be named bike, but its definitely not that. seems to be some transition flags - /*0x02*/ u8 runningState; // this is a static running state. 00 is not moving, 01 is turn direction, 02 is moving. - /*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning. - /*0x04*/ u8 spriteId; - /*0x05*/ u8 eventObjectId; - /*0x06*/ bool8 preventStep; - /*0x07*/ u8 gender; - /*0x08*/ u8 acroBikeState; // 00 is normal, 01 is turning, 02 is standing wheelie, 03 is hopping wheelie - /*0x09*/ u8 newDirBackup; // during bike movement, the new direction as opposed to player's direction is backed up here. - /*0x0A*/ u8 bikeFrameCounter; // on the mach bike, when this value is 1, the bike is moving but not accelerating yet for 1 tile. on the acro bike, this acts as a timer for acro bike. - /*0x0B*/ u8 bikeSpeed; - // acro bike only - /*0x0C*/ u32 directionHistory; // up/down/left/right history is stored in each nybble, but using the field directions and not the io inputs. - /*0x10*/ u32 abStartSelectHistory; // same as above but for A + B + start + select only - // these two are timer history arrays which [0] is the active timer for acro bike. every element is backed up to the next element upon update. - /*0x14*/ u8 dirTimerHistory[8]; - /*0x1C*/ u8 abStartSelectTimerHistory[8]; -}; - -struct Camera -{ - bool8 active:1; - s32 x; - s32 y; -}; - -extern struct EventObject gMapObjects[]; -extern u8 gSelectedEventObject; -extern struct MapHeader gMapHeader; -extern struct PlayerAvatar gPlayerAvatar; - -#endif // GUARD_GLOBAL_FIELDMAP_H diff --git a/berry_fix/payload/include/global.h b/berry_fix/payload/include/global.h deleted file mode 100644 index c218b5f4e8..0000000000 --- a/berry_fix/payload/include/global.h +++ /dev/null @@ -1,875 +0,0 @@ -#ifndef GUARD_GLOBAL_H -#define GUARD_GLOBAL_H - -#include "gba/gba.h" - -// global.h from pokemon ruby - -// IDE support -#if defined(__APPLE__) || defined(__CYGWIN__) -#define _(x) x -#define __(x) x -#define INCBIN(x) {0} -#define INCBIN_U8 INCBIN -#define INCBIN_U16 INCBIN -#define INCBIN_U32 INCBIN -#define INCBIN_S8 INCBIN -#define INCBIN_S16 INCBIN -#define INCBIN_S32 INCBIN -#endif - -// Prevent cross-jump optimization. -#define BLOCK_CROSS_JUMP asm(""); - -// to help in decompiling -#define asm_comment(x) asm volatile("@ -- " x " -- ") - -#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided\n") - -#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) - - -#define POKEMON_SLOTS_NUMBER 412 -#define POKEMON_NAME_LENGTH 10 -#define OT_NAME_LENGTH 7 - -#define min(a, b) ((a) < (b) ? (a) : (b)) -#define max(a, b) ((a) >= (b) ? (a) : (b)) - -// why does GF hate 2d arrays -#define MULTI_DIM_ARR(x, dim, y) ((x) * dim + (y)) - -// dim access enums -enum -{ - B_8 = 1, - B_16 = 2, - B_32 = 4 -}; - -// There are many quirks in the source code which have overarching behavioral differences from -// a number of other files. For example, diploma.c seems to declare rodata before each use while -// other files declare out of order and must be at the beginning. There are also a number of -// macros which differ from one file to the next due to the method of obtaining the result, such -// as these below. Because of this, there is a theory (Two Team Theory) that states that these -// programming projects had more than 1 "programming team" which utilized different macros for -// each of the files that were worked on. -#define T1_READ_8(ptr) ((ptr)[0]) -#define T1_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) -#define T1_READ_32(ptr) ((ptr)[0] | ((ptr)[1] << 8) | ((ptr)[2] << 16) | ((ptr)[3] << 24)) -#define T1_READ_PTR(ptr) (u8*) T1_READ_32(ptr) - -// T2_READ_8 is a duplicate to remain consistent with each group. -#define T2_READ_8(ptr) ((ptr)[0]) -#define T2_READ_16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) -#define T2_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) -#define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr) - -// Credits to Made (dolphin emoji) -#define S16TOPOSFLOAT(val) \ -({ \ - s16 v = (val); \ - float f = (float)v; \ - if(v < 0) f += 65536.0f; \ - f; \ -}) - -enum -{ - VERSION_SAPPHIRE = 1, - VERSION_RUBY = 2, - VERSION_EMERALD = 3, -}; - -enum LanguageId -{ - LANGUAGE_JAPANESE = 1, - LANGUAGE_ENGLISH = 2, - LANGUAGE_GERMAN = 5, -}; - -// capacities of various saveblock objects -#define DAYCARE_MON_COUNT 2 -#define POKEBLOCKS_COUNT 40 -#define PARTY_SIZE 6 -#define EVENT_OBJECTS_COUNT 16 -#define BERRY_TREES_COUNT 128 -#define FLAGS_COUNT 288 -#define VARS_COUNT 256 -#define MAIL_COUNT 16 -#define SECRET_BASES_COUNT 20 -#define TV_SHOWS_COUNT 25 -#define POKE_NEWS_COUNT 16 -#define PC_ITEMS_COUNT 50 -#define BAG_ITEMS_COUNT 20 -#define BAG_KEYITEMS_COUNT 20 -#define BAG_POKEBALLS_COUNT 16 -#define BAG_TMHM_COUNT 64 -#define BAG_BERRIES_COUNT 46 - -enum -{ - MALE, - FEMALE -}; - -enum -{ - OPTIONS_BUTTON_MODE_NORMAL, - OPTIONS_BUTTON_MODE_LR, - OPTIONS_BUTTON_MODE_L_EQUALS_A -}; - -enum -{ - OPTIONS_TEXT_SPEED_SLOW, - OPTIONS_TEXT_SPEED_MID, - OPTIONS_TEXT_SPEED_FAST -}; - -enum -{ - OPTIONS_SOUND_MONO, - OPTIONS_SOUND_STEREO -}; - -enum -{ - OPTIONS_BATTLE_STYLE_SHIFT, - OPTIONS_BATTLE_STYLE_SET -}; - -enum -{ - BAG_ITEMS = 1, - BAG_POKEBALLS, - BAG_TMsHMs, - BAG_BERRIES, - BAG_KEYITEMS -}; - -struct Coords16 -{ - s16 x; - s16 y; -}; - -struct UCoords16 -{ - u16 x; - u16 y; -}; - -struct SecretBaseRecord -{ - /*0x1A08*/ u8 secretBaseId; - /*0x1A09*/ u8 sbr_field_1_0:4; - /*0x1A09*/ u8 gender:1; - /*0x1A09*/ u8 sbr_field_1_5:1; - /*0x1A09*/ u8 sbr_field_1_6:2; - /*0x1A0A*/ u8 playerName[OT_NAME_LENGTH]; - /*0x1A11*/ u8 trainerId[4]; // byte 0 is used for determining trainer class - /*0x1A16*/ u16 sbr_field_e; - /*0x1A18*/ u8 sbr_field_10; - /*0x1A19*/ u8 sbr_field_11; - /*0x1A1A*/ u8 decorations[16]; - /*0x1A2A*/ u8 decorationPos[16]; - /*0x1A3C*/ u32 partyPersonality[6]; - /*0x1A54*/ u16 partyMoves[6 * 4]; - /*0x1A84*/ u16 partySpecies[6]; - /*0x1A90*/ u16 partyHeldItems[6]; - /*0x1A9C*/ u8 partyLevels[6]; - /*0x1AA2*/ u8 partyEVs[6]; -}; - -#include "constants/game_stat.h" -#include "global.fieldmap.h" -#include "global.berry.h" -#include "pokemon.h" - -struct WarpData -{ - s8 mapGroup; - s8 mapNum; - s8 warpId; - s16 x, y; -}; - -struct ItemSlot -{ - u16 itemId; - u16 quantity; -}; - -struct Pokeblock -{ - u8 color; - u8 spicy; - u8 dry; - u8 sweet; - u8 bitter; - u8 sour; - u8 feel; -}; - -struct Roamer -{ - /*0x00*/ u32 ivs; - /*0x04*/ u32 personality; - /*0x08*/ u16 species; - /*0x0A*/ u16 hp; - /*0x0C*/ u8 level; - /*0x0D*/ u8 status; - /*0x0E*/ u8 cool; - /*0x0F*/ u8 beauty; - /*0x10*/ u8 cute; - /*0x11*/ u8 smart; - /*0x12*/ u8 tough; - /*0x13*/ bool8 active; - /*0x14*/ u8 filler[0x8]; -}; - -struct RamScriptData -{ - u8 magic; - u8 mapGroup; - u8 mapNum; - u8 objectId; - u8 script[995]; -}; - -struct RamScript -{ - u32 checksum; - struct RamScriptData data; -}; - -struct EasyChatPair -{ - u16 unk0_0:7; - u16 unk0_7:7; - u16 unk1_6:1; - u16 unk2; - u16 words[2]; -}; /*size = 0x8*/ - -struct TVShowCommon -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u8 pad02[20]; - /*0x16*/ u16 var16[3]; - /*0x1C*/ u8 srcTrainerId3Lo; - /*0x1D*/ u8 srcTrainerId3Hi; - /*0x1E*/ u8 srcTrainerId2Lo; - /*0x1F*/ u8 srcTrainerId2Hi; - /*0x20*/ u8 srcTrainerIdLo; - /*0x21*/ u8 srcTrainerIdHi; - /*0x22*/ u8 trainerIdLo; - /*0x23*/ u8 trainerIdHi; -}; - -struct TVShowFanClubLetter -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u16 species; - /*0x04*/ u16 pad04[6]; - /*0x10*/ u8 playerName[8]; - /*0x18*/ u8 language; -}; - -struct TVShowRecentHappenings -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u16 var02; - /*0x04*/ u16 var04[6]; - /*0x10*/ u8 playerName[8]; - /*0x18*/ u8 language; - /*0x19*/ u8 pad19[10]; -}; - -struct TVShowFanclubOpinions -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u16 var02; - /*0x04*/ u8 var04A:4; - /*0x04*/ u8 var04B:4; - /*0x05*/ u8 playerName[8]; - /*0x0D*/ u8 language; - /*0x0E*/ u8 var0E; - /*0x0F*/ u8 var0F; - /*0x10*/ u8 var10[8]; - /*0x18*/ u16 var18[2]; - /*0x1C*/ u16 var1C[4]; -}; - -struct TVShowUnknownType04 -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u8 pad02[4]; - /*0x06*/ u16 var06; -}; - -struct TVShowNameRaterShow -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u16 species; - /*0x04*/ u8 pokemonName[11]; - /*0x0F*/ u8 trainerName[11]; - /*0x1A*/ u8 random; - /*0x1B*/ u8 random2; - /*0x1C*/ u16 var1C; - /*0x1E*/ u8 language; - /*0x1F*/ u8 pokemonNameLanguage; -}; - -struct TVShowBravoTrainerPokemonProfiles -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u16 species; - /*0x04*/ u16 var04[2]; - /*0x08*/ u8 pokemonNickname[11]; - /*0x13*/ u8 contestCategory:3; - /*0x13*/ u8 contestRank:2; - /*0x13*/ u8 contestResult:2; - /*0x13*/ u8 var13_7:1; - /*0x14*/ u16 var14; - /*0x16*/ u8 playerName[8]; - /*0x1E*/ u8 language; - /*0x1F*/ u8 var1f; -}; - -struct TVShowBravoTrainerBattleTowerSpotlight -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u8 trainerName[8]; - /*0x0A*/ u16 species; - /*0x0C*/ u8 enemyTrainerName[8]; - /*0x14*/ u16 defeatedSpecies; - /*0x16*/ u16 var16; - /*0x18*/ u16 var18[1]; - /*0x1A*/ u8 btLevel; - /*0x1B*/ u8 var1b; - /*0x1C*/ u8 var1c; - /*0x1D*/ u8 language; -}; - -struct TVShowPokemonToday -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u8 language; - /*0x03*/ u8 language2; - /*0x04*/ u8 nickname[11]; - /*0x0F*/ u8 ball; - /*0x10*/ u16 species; - /*0x12*/ u8 var12; - /*0x13*/ u8 playerName[8]; -}; - -struct TVShowSmartShopper -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u8 priceReduced; - /*0x03*/ u8 language; - /*0x04*/ u8 pad04[2]; - /*0x06*/ u16 itemIds[3]; - /*0x0C*/ u16 itemAmounts[3]; - /*0x12*/ u8 shopLocation; - /*0x13*/ u8 playerName[8]; -}; - -struct TVShowPokemonTodayFailed -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u8 language; - /*0x03*/ u8 pad03[9]; - /*0x0c*/ u16 species; - /*0x0e*/ u16 species2; - /*0x10*/ u8 var10; - /*0x11*/ u8 var11; - /*0x12*/ u8 var12; - /*0x13*/ u8 playerName[8]; -}; - -struct TVShowPokemonAngler -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u8 var02; - /*0x03*/ u8 var03; - /*0x04*/ u16 var04; - /*0x06*/ u8 language; - u8 pad07[12]; - /*0x13*/ u8 playerName[8]; -}; - -struct TVShowWorldOfMasters -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u16 var02; - /*0x04*/ u16 var04; - /*0x06*/ u16 var06; - /*0x08*/ u16 var08; - /*0x0a*/ u8 var0a; - /*0x0b*/ u8 language; - u8 pad0c[7]; - /*0x13*/ u8 playerName[8]; -}; - -struct TVShowMassOutbreak -{ - /*0x00*/ u8 kind; - /*0x01*/ bool8 active; - /*0x02*/ u8 var02; - /*0x03*/ u8 var03; - /*0x04*/ u16 moves[4]; - /*0x0C*/ u16 species; - /*0x0E*/ u16 var0E; - /*0x10*/ u8 locationMapNum; - /*0x11*/ u8 locationMapGroup; - /*0x12*/ u8 var12; - /*0x13*/ u8 probability; - /*0x14*/ u8 level; - /*0x15*/ u8 var15; - /*0x16*/ u16 daysLeft; - /*0x18*/ u8 language; - u8 pad19[11]; -}; - -typedef union TVShow -{ - struct TVShowCommon common; - struct TVShowFanClubLetter fanclubLetter; - struct TVShowRecentHappenings recentHappenings; - struct TVShowFanclubOpinions fanclubOpinions; - struct TVShowUnknownType04 unkShow04; - struct TVShowNameRaterShow nameRaterShow; - struct TVShowBravoTrainerPokemonProfiles bravoTrainer; - struct TVShowBravoTrainerBattleTowerSpotlight bravoTrainerTower; - struct TVShowPokemonToday pokemonToday; - struct TVShowSmartShopper smartshopperShow; - struct TVShowPokemonTodayFailed pokemonTodayFailed; - struct TVShowPokemonAngler pokemonAngler; - struct TVShowWorldOfMasters worldOfMasters; - struct TVShowMassOutbreak massOutbreak; -} TVShow; - -struct MailStruct -{ - /*0x00*/ u16 words[9]; - /*0x12*/ u8 playerName[8]; - /*0x1A*/ u8 trainerId[4]; - /*0x1E*/ u16 species; - /*0x20*/ u16 itemId; -}; - - -// Mauville Pokemon Center men - -struct MauvilleManCommon -{ - u8 id; -}; - -struct MauvilleManBard -{ - /*0x00*/ u8 id; - /*0x02*/ u16 songLyrics[6]; - /*0x0E*/ u16 temporaryLyrics[6]; - /*0x1A*/ u8 playerName[8]; - /*0x22*/ u8 filler_2DB6[0x3]; - /*0x25*/ u8 playerTrainerId[4]; - /*0x29*/ bool8 hasChangedSong; -}; /*size = 0x2C*/ - -struct MauvilleManHipster -{ - u8 id; - bool8 alreadySpoken; -}; - -struct MauvilleManTrader -{ - u8 id; - u8 unk1[4]; - u8 unk5[4][11]; - bool8 alreadyTraded; -}; - -struct MauvilleManStoryteller -{ - u8 id; - bool8 alreadyRecorded; - u8 filler2[2]; - u8 gameStatIDs[4]; - u8 trainerNames[4][7]; - u8 statValues[4][4]; -}; - -struct MauvilleManGiddy -{ - /*0x00*/ u8 id; - /*0x01*/ u8 taleCounter; - /*0x02*/ u8 questionNum; - /*0x04*/ u16 randomWords[10]; - /*0x18*/ u8 questionList[12]; -}; /*size = 0x2C*/ - - -union MauvilleMan -{ - struct MauvilleManCommon common; - struct MauvilleManBard bard; - struct MauvilleManHipster hipster; - struct MauvilleManTrader trader; - struct MauvilleManStoryteller storyteller; - struct MauvilleManGiddy giddy; - u8 filler[0x40]; // needed to pad out the struct -}; - -struct PokeNews -{ - u8 kind; - u8 state; - u16 days; -}; - -struct GabbyAndTyData -{ - /*2b10*/ u16 mon1; - /*2b12*/ u16 mon2; - /*2b14*/ u16 lastMove; - /*2b16*/ u16 quote; - /*2b18*/ u8 mapnum; - /*2b19*/ u8 battleNum; - /*2b1a*/ u8 valA_0:1; - /*2b1a*/ u8 valA_1:1; - /*2b1a*/ u8 valA_2:1; - /*2b1a*/ u8 valA_3:1; - /*2b1a*/ u8 valA_4:1; - /*2b1a*/ u8 valA_5:3; - /*2b1b*/ u8 valB_0:1; - /*2b1b*/ u8 valB_1:1; - /*2b1b*/ u8 valB_2:1; - /*2b1b*/ u8 valB_3:1; - /*2b1b*/ u8 valB_4:1; - /*2b1b*/ u8 valB_5:3; -}; - -struct DayCareMail -{ - /*0x00*/ struct MailStruct message; - /*0x24*/ u8 names[19]; -}; - -struct DayCareStepCountersEtc { - u32 steps[DAYCARE_MON_COUNT]; - u16 pendingEggPersonality; - u8 eggCycleStepsRemaining; -}; - -struct RecordMixingDayCareMail -{ - struct DayCareMail mail[DAYCARE_MON_COUNT]; - u32 numDaycareMons; - u16 itemsHeld[DAYCARE_MON_COUNT]; // marks whether or not each daycare mon is currently holding an item. -}; - -struct DayCareMisc -{ - struct DayCareMail mail[DAYCARE_MON_COUNT]; - struct DayCareStepCountersEtc countersEtc; -}; - -struct DayCare { - struct BoxPokemon mons[DAYCARE_MON_COUNT]; - struct DayCareMisc misc; -}; - -struct LinkBattleRecord -{ - u8 name[8]; - u16 trainerId; - u16 wins; - u16 losses; - u16 draws; -}; - -struct RecordMixingGiftData -{ - u8 unk0; - u8 quantity; - u16 itemId; - u8 filler4[8]; -}; - -struct RecordMixingGift -{ - int checksum; - struct RecordMixingGiftData data; -}; - -struct ContestWinner -{ - /*0x00*/ u32 personality; // personality - /*0x04*/ u32 otId; // otId - /*0x08*/ u16 species; // species - /*0x0A*/ u8 contestCategory; - /*0x0B*/ u8 nickname[11]; - /*0x16*/ u8 trainerName[8]; -}; - -// there should be enough flags for all 412 slots -// each slot takes up 8 flags -// if the value is not divisible by 8, we need to account for the reminder as well -#define DEX_FLAGS_NO ((POKEMON_SLOTS_NUMBER / 8) + ((POKEMON_SLOTS_NUMBER % 8) ? 1 : 0)) - -struct SaveBlock1 /* 0x02025734 */ -{ - /*0x00*/ struct Coords16 pos; - /*0x04*/ struct WarpData location; - /*0x0C*/ struct WarpData warp1; - /*0x14*/ struct WarpData warp2; - /*0x1C*/ struct WarpData lastHealLocation; - /*0x24*/ struct WarpData warp4; - /*0x2C*/ u16 savedMusic; - /*0x2E*/ u8 weather; - /*0x2F*/ u8 weatherCycleStage; - /*0x30*/ u8 flashLevel; // flash level on current map, 0 being normal and 4 being the darkest - /*0x32*/ u16 mapLayoutId; - /*0x34*/ u16 mapView[0x100]; - /*0x234*/ u8 playerPartyCount; - /*0x238*/ struct Pokemon playerParty[6]; - /*0x490*/ u32 money; - /*0x494*/ u16 coins; - /*0x496*/ u16 registeredItem; // registered for use with SELECT button - /*0x498*/ struct ItemSlot pcItems[PC_ITEMS_COUNT]; - /*0x560*/ struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT]; - /*0x5B0*/ struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT]; - /*0x600*/ struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT]; - /*0x640*/ struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT]; - /*0x740*/ struct ItemSlot bagPocket_Berries[BAG_BERRIES_COUNT]; - /*0x7F8*/ struct Pokeblock pokeblocks[POKEBLOCKS_COUNT]; - /*0x938*/ u8 dexSeen2[DEX_FLAGS_NO]; - /*0x96C*/ u16 berryBlenderRecords[3]; - /*0x972*/ u8 filler_972[0x6]; - /*0x978*/ u16 trainerRematchStepCounter; - /*0x97A*/ u8 trainerRematches[100]; - /*0x9E0*/ struct EventObject eventObjects[EVENT_OBJECTS_COUNT]; - /*0xC20*/ struct EventObjectTemplate eventObjectTemplates[64]; - /*0x1220*/ u8 flags[FLAGS_COUNT]; - /*0x1340*/ u16 vars[VARS_COUNT]; - /*0x1540*/ u32 gameStats[NUM_GAME_STATS]; - /*0x1608*/ struct BerryTree berryTrees[BERRY_TREES_COUNT]; - /*0x1A08*/ struct SecretBaseRecord secretBases[SECRET_BASES_COUNT]; - /*0x2688*/ u8 playerRoomDecor[12]; - /*0x2694*/ u8 playerRoomDecorPos[12]; - /*0x26A0*/ u8 decorDesk[10]; - /*0x26AA*/ u8 decorChair[10]; - /*0x26B4*/ u8 decorPlant[10]; - /*0x26BE*/ u8 decorOrnament[30]; - /*0x26DC*/ u8 decorMat[30]; - /*0x26FA*/ u8 decorPoster[10]; - /*0x2704*/ u8 decorDoll[40]; - /*0x272C*/ u8 decorCushion[10]; - /*0x2736*/ u8 padding_2736[2]; - /*0x2738*/ TVShow tvShows[TV_SHOWS_COUNT]; - /*0x2ABC*/ struct PokeNews pokeNews[POKE_NEWS_COUNT]; - /*0x2AFC*/ u16 outbreakPokemonSpecies; - /*0x2AFE*/ u8 outbreakLocationMapNum; - /*0x2AFF*/ u8 outbreakLocationMapGroup; - /*0x2B00*/ u8 outbreakPokemonLevel; - /*0x2B01*/ u8 outbreakUnk1; - /*0x2B02*/ u16 outbreakUnk2; - /*0x2B04*/ u16 outbreakPokemonMoves[4]; - /*0x2B0C*/ u8 outbreakUnk4; - /*0x2B0D*/ u8 outbreakPokemonProbability; - /*0x2B0E*/ u16 outbreakUnk5; - /*0x2B10*/ struct GabbyAndTyData gabbyAndTyData; - /*0x2B1C*/ struct { - /*0x2B1C*/ u16 unk2B1C[6]; - /*0x2B28*/ u16 unk2B28[6]; - /*0x2B34*/ u16 unk2B34[6]; - /*0x2B40*/ u16 unk2B40[6]; - } easyChats; - /*0x2B4C*/ struct MailStruct mail[MAIL_COUNT]; - /*0x2D8C*/ u8 unk2D8C[4]; // What is this? Apparently it's supposed to be 64 bytes in size. - /*0x2D90*/ u8 filler_2D90[0x4]; - /*0x2D94*/ union MauvilleMan mauvilleMan; - /*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff - /*0x2DFC*/ struct ContestWinner contestWinners[8]; - /*0x2EFC*/ struct ContestWinner museumPortraits[5]; - /*0x2F9C*/ struct DayCare daycare; - /*0x30B8*/ struct LinkBattleRecord linkBattleRecords[5]; - struct { - /*0x3108*/ u8 unknown1[8]; - /*0x3110*/ u8 giftRibbons[11]; - /*0x311B*/ u8 unknown2[8]; - /*0x3123*/ u32 currentPokeCoupons; - /*0x3127*/ u32 totalEarnedPokeCoupons; - /*0x312B*/ u8 unknown3[6]; - /*0x3131*/ u8 receivedWishmakerJirachi; - /*0x3132*/ u8 unknown4[18]; - } __attribute__((packed)) externalReservedData; - /*0x3144*/ struct Roamer roamer; - /*0x3160*/ struct EnigmaBerry enigmaBerry; - /*0x3690*/ struct RamScript ramScript; - /*0x3A7C*/ struct RecordMixingGift recordMixingGift; - /*0x3A8C*/ u8 dexSeen3[DEX_FLAGS_NO]; -}; - -extern struct SaveBlock1 gSaveBlock1; - -struct Time -{ - /*0x00*/ s16 days; - /*0x02*/ s8 hours; - /*0x03*/ s8 minutes; - /*0x04*/ s8 seconds; -}; - -struct Pokedex -{ - /*0x00*/ u8 order; - /*0x01*/ u8 unknown1; - /*0x02*/ u8 nationalMagic; // must equal 0xDA in order to have National mode - /*0x03*/ u8 unknown2; - /*0x04*/ u32 unownPersonality; // set when you first see Unown - /*0x08*/ u32 spindaPersonality; // set when you first see Spinda - /*0x0C*/ u32 unknown3; - /*0x10*/ u8 owned[DEX_FLAGS_NO]; - /*0x44*/ u8 seen[DEX_FLAGS_NO]; -}; - -struct BattleTowerTrainer -{ - /*0x00*/ u8 trainerClass; - /*0x01*/ u8 name[8]; - /*0x09*/ u8 teamFlags; - u8 filler0A[2]; - /*0x0C*/ u16 greeting[6]; -}; - -struct BattleTowerRecord // record mixing -{ - /*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100 - /*0x01*/ u8 trainerClass; - /*0x02*/ u16 winStreak; - /*0x04*/ u8 name[8]; - /*0x0C*/ u8 trainerId[4]; - /*0x10*/ u16 greeting[6]; - /*0x1C*/ struct BattleTowerPokemon party[3]; - /*0xA0*/ u32 checksum; -}; - -struct BattleTowerEReaderTrainer -{ - /*0x00*/ u8 unk0; - /*0x01*/ u8 trainerClass; - /*0x02*/ u16 winStreak; - /*0x04*/ u8 name[8]; - /*0x0C*/ u8 trainerId[4]; - /*0x10*/ u16 greeting[6]; - /*0x1C*/ u16 farewellPlayerLost[6]; - /*0x28*/ u16 farewellPlayerWon[6]; - /*0x34*/ struct BattleTowerPokemon party[3]; - /*0xB8*/ u32 checksum; -}; - -struct BattleTowerData -{ - /*0x0000, 0x00A8*/ struct BattleTowerRecord playerRecord; - /*0x00A4, 0x014C*/ struct BattleTowerRecord records[5]; // from record mixing - /*0x03D8, 0x0480*/ u16 firstMonSpecies; // species of the first pokemon in the player's battle tower party - /*0x03DA, 0x0482*/ u16 defeatedBySpecies; // species of the pokemon that defated the player - /*0x03DC, 0x0484*/ u8 defeatedByTrainerName[8]; - /*0x03E4, 0x048C*/ u8 firstMonNickname[POKEMON_NAME_LENGTH]; // nickname of the first pokemon in the player's battle tower party - /*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer; - /*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100 - /*0x04AC, 0x0554*/ u8 unk_554:1; - /*0x04AD, 0x0555*/ u8 battleOutcome; - /*0x04AE, 0x0556*/ u8 var_4AE[2]; - /*0x04B0, 0x0558*/ u16 curChallengeBattleNum[2]; // 1-based index of battle in the current challenge. (challenges consist of 7 battles) - /*0x04B4, 0x055C*/ u16 curStreakChallengesNum[2]; // 1-based index of the current challenge in the current streak. - /*0x04B8, 0x0560*/ u16 recordWinStreaks[2]; - /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table - /*0x04BD, 0x0565*/ u8 selectedPartyMons[0x3]; // indices of the 3 selected player party mons. - /*0x04C0, 0x0568*/ u16 prizeItem; - /*0x04C2, 0x056A*/ u8 battledTrainerIds[6]; - /*0x04C8, 0x0570*/ u16 totalBattleTowerWins; - /*0x04CA, 0x0572*/ u16 bestBattleTowerWinStreak; - /*0x04CC, 0x0574*/ u16 currentWinStreaks[2]; - /*0x04D0, 0x0578*/ u8 lastStreakLevelType; // 0 = level 50, 1 = level 100. level type of the last streak. Used by tv to report the level mode. - /*0x04D1, 0x0579*/ u8 filler_4D1[0x317]; -}; - -struct SaveBlock2 /* 0x02024EA4 */ -{ - /*0x00*/ u8 playerName[8]; - /*0x08*/ u8 playerGender; // MALE, FEMALE - /*0x09*/ u8 specialSaveWarp; - /*0x0A*/ u8 playerTrainerId[4]; - /*0x0E*/ u16 playTimeHours; - /*0x10*/ u8 playTimeMinutes; - /*0x11*/ u8 playTimeSeconds; - /*0x12*/ u8 playTimeVBlanks; - /*0x13*/ u8 optionsButtonMode; // OPTIONS_BUTTON_MODE_[NORMAL/LR/L_EQUALS_A] - /*0x14*/ u16 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST] - u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes - u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO] - u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET] - u16 optionsBattleSceneOff:1; // whether battle animations are disabled - u16 regionMapZoom:1; // whether the map is zoomed in - /*0x18*/ struct Pokedex pokedex; - /*0x90*/ u8 filler_90[0x8]; - /*0x98*/ struct Time localTimeOffset; - /*0xA0*/ struct Time lastBerryTreeUpdate; - /*0xA8*/ struct BattleTowerData battleTower; -}; - -struct MapPosition -{ - s16 x; - s16 y; - s8 height; -}; - -struct UnkStruct_8054FF8 -{ - u8 a; - u8 b; - u8 c; - u8 d; - struct MapPosition sub; - u16 field_C; -}; - -// wasnt defined so I had to define it -struct HallOfFame -{ - u8 filler[0x1F00]; -}; - -extern struct SaveBlock2 gSaveBlock2; - -#define RomHeaderGameTitle ((const char *)0x080000A0) -#define RomHeaderGameCode ((const char *)0x080000AC) -#define RomHeaderMakerCode ((const char *)0x080000B0) -#define RomHeaderMagic ((const u8 *) 0x080000B2) -#define RomHeaderSoftwareVersion ((const u8 *) 0x080000BC) - -#define LocalTimeOffset ((struct Time *)0x02028098) -#define LastBerryTreeUpdate ((struct Time *)0x020280A0) - -#endif //GUARD_GLOBAL_H diff --git a/berry_fix/payload/include/main.h b/berry_fix/payload/include/main.h deleted file mode 100644 index cb58d59826..0000000000 --- a/berry_fix/payload/include/main.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef GUARD_MAIN_H -#define GUARD_MAIN_H - -#include "gba/gba.h" - -enum RomHeaderValidationResult -{ - SAPPHIRE_UPDATABLE = 2, - RUBY_UPDATABLE, - SAPPHIRE_NONEED, - RUBY_NONEED, - INVALID -}; - -enum MainCallbackState -{ - MAINCB_INIT = 0, - MAINCB_CHECK_RTC, - MAINCB_CHECK_FLASH, - MAINCB_READ_SAVE, - MAINCB_CHECK_TIME, - MAINCB_FIX_DATE, - MAINCB_NO_NEED_TO_FIX, - MAINCB_YEAR_MAKES_NO_SENSE, - MAINCB_FINISHED, - MAINCB_CHECK_PACIFIDLOG_TM, - MAINCB_FIX_PACIFIDLOG_TM, - MAINCB_ERROR -}; - -extern IntrFunc gIntrTable[]; -extern u16 gHeldKeys; -extern u16 gNewKeys; -extern u8 gIntrVector[]; -extern u32 gUpdateSuccessful; -extern u32 gUnknown_3001194; -extern u32 gUnknown_30011A0[]; -extern u32 gMainCallbackState; -extern u32 gGameVersion; - -extern u8 gSharedMem[0x8000]; - -extern const IntrFunc gIntrFuncPointers[]; - -#endif //GUARD_MAIN_H diff --git a/berry_fix/payload/include/pokemon.h b/berry_fix/payload/include/pokemon.h deleted file mode 100644 index d3a14ffff9..0000000000 --- a/berry_fix/payload/include/pokemon.h +++ /dev/null @@ -1,154 +0,0 @@ -#ifndef GUARD_POKEMON_H -#define GUARD_POKEMON_H - -struct PokemonSubstruct0 -{ - u16 species; - u16 heldItem; - u32 experience; - u8 ppBonuses; - u8 friendship; -}; - -struct PokemonSubstruct1 -{ - u16 moves[4]; - u8 pp[4]; -}; - -struct PokemonSubstruct2 -{ - u8 hpEV; - u8 attackEV; - u8 defenseEV; - u8 speedEV; - u8 spAttackEV; - u8 spDefenseEV; - u8 cool; - u8 beauty; - u8 cute; - u8 smart; - u8 tough; - u8 sheen; -}; - -struct PokemonSubstruct3 -{ - /*0x00*/ u8 pokerus; - /*0x01*/ u8 metLocation; - - /*0x02*/ u16 metLevel:7; - /*0x02*/ u16 metGame:4; - /*0x03*/ u16 pokeball:4; - /*0x03*/ u16 otGender:1; - - /*0x04*/ u32 hpIV:5; - /*0x04*/ u32 attackIV:5; - /*0x05*/ u32 defenseIV:5; - /*0x05*/ u32 speedIV:5; - /*0x05*/ u32 spAttackIV:5; - /*0x06*/ u32 spDefenseIV:5; - /*0x07*/ u32 isEgg:1; - /*0x07*/ u32 altAbility:1; - - /*0x08*/ u32 coolRibbon:3; - /*0x08*/ u32 beautyRibbon:3; - /*0x08*/ u32 cuteRibbon:3; - /*0x09*/ u32 smartRibbon:3; - /*0x09*/ u32 toughRibbon:3; - /*0x09*/ u32 championRibbon:1; - /*0x0A*/ u32 winningRibbon:1; - /*0x0A*/ u32 victoryRibbon:1; - /*0x0A*/ u32 artistRibbon:1; - /*0x0A*/ u32 effortRibbon:1; - /*0x0A*/ u32 giftRibbon1:1; - /*0x0A*/ u32 giftRibbon2:1; - /*0x0A*/ u32 giftRibbon3:1; - /*0x0A*/ u32 giftRibbon4:1; - /*0x0B*/ u32 giftRibbon5:1; - /*0x0B*/ u32 giftRibbon6:1; - /*0x0B*/ u32 giftRibbon7:1; - /*0x0B*/ u32 fatefulEncounter:5; // unused in Ruby/Sapphire, but the high bit must be set for Mew/Deoxys to obey in FR/LG/Emerald -}; - -union PokemonSubstruct -{ - struct PokemonSubstruct0 type0; - struct PokemonSubstruct1 type1; - struct PokemonSubstruct2 type2; - struct PokemonSubstruct3 type3; - u16 raw[6]; -}; - -struct BoxPokemon -{ - /*0x00*/ u32 personality; - /*0x04*/ u32 otId; - /*0x08*/ u8 nickname[POKEMON_NAME_LENGTH]; - /*0x12*/ u8 language; - /*0x13*/ u8 isBadEgg:1; - u8 hasSpecies:1; - u8 isEgg:1; - /*0x14*/ u8 otName[OT_NAME_LENGTH]; - /*0x1B*/ u8 markings; - /*0x1C*/ u16 checksum; - /*0x1E*/ u16 unknown; - - union - { - u32 raw[12]; - union PokemonSubstruct substructs[4]; - } secure; -}; /*size = 0x50*/ - -struct Pokemon -{ - /*0x00*/ struct BoxPokemon box; - /*0x50*/ u32 status; - /*0x54*/ u8 level; - /*0x55*/ u8 mail; - /*0x56*/ u16 hp; - /*0x58*/ u16 maxHP; - /*0x5A*/ u16 attack; - /*0x5C*/ u16 defense; - /*0x5E*/ u16 speed; - /*0x60*/ u16 spAttack; - /*0x62*/ u16 spDefense; -}; - -struct BattleTowerPokemon -{ - /*0x00*/u16 species; - /*0x02*/u16 heldItem; - /*0x04*/u16 moves[4]; - /*0x0C*/u8 level; - /*0x0D*/u8 ppBonuses; - /*0x0E*/u8 hpEV; - /*0x0F*/u8 attackEV; - /*0x10*/u8 defenseEV; - /*0x11*/u8 speedEV; - /*0x12*/u8 spAttackEV; - /*0x13*/u8 spDefenseEV; - /*0x14*/u32 otId; - /*0x18*/u32 hpIV:5; - /*0x18*/u32 attackIV:5; - /*0x19*/u32 defenseIV:5; - /*0x19*/u32 speedIV:5; - /*0x1A*/u32 spAttackIV:5; - /*0x1A*/u32 spDefenseIV:5; - /*0x1B*/u32 gap:1; - /*0x1B*/u32 altAbility:1; - /*0x1C*/u32 personality; - /*0x20*/u8 nickname[POKEMON_NAME_LENGTH + 1]; - /*0x2B*/u8 friendship; -}; - -struct PokemonStorage -{ - /*0x0000*/ u8 currentBox; - /*0x0004*/ struct BoxPokemon boxes[14][30]; - /*0x8344*/ u8 boxNames[14][9]; - /*0x83c2*/ u8 wallpaper[14]; -}; - -#endif // GUARD_POKEMON_H diff --git a/berry_fix/payload/include/rtc.h b/berry_fix/payload/include/rtc.h deleted file mode 100644 index 35654d866b..0000000000 --- a/berry_fix/payload/include/rtc.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef GUARD_RTC_H -#define GUARD_RTC_H - -#include "gba/gba.h" -#include "siirtc.h" -#include "global.h" - -extern struct Time gTimeSinceBerryUpdate; -extern struct Time gRtcUTCTime; - -bool32 rtc_maincb_is_rtc_working(void); -bool32 rtc_maincb_is_time_since_last_berry_update_positive(u8 *); -void rtc_maincb_fix_date(void); - -#endif //GUARD_RTC_H diff --git a/berry_fix/payload/include/siirtc.h b/berry_fix/payload/include/siirtc.h deleted file mode 100644 index de4fd634df..0000000000 --- a/berry_fix/payload/include/siirtc.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef GUARD_RTC_H -#define GUARD_RTC_H - -#include "gba/gba.h" - -#define SIIRTCINFO_INTFE 0x01 // frequency interrupt enable -#define SIIRTCINFO_INTME 0x02 // per-minute interrupt enable -#define SIIRTCINFO_INTAE 0x04 // alarm interrupt enable -#define SIIRTCINFO_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode -#define SIIRTCINFO_POWER 0x80 // power on or power failure occurred - -enum -{ - MONTH_JAN = 1, - MONTH_FEB, - MONTH_MAR, - MONTH_APR, - MONTH_MAY, - MONTH_JUN, - MONTH_JUL, - MONTH_AUG, - MONTH_SEP, - MONTH_OCT, - MONTH_NOV, - MONTH_DEC -}; - -struct SiiRtcInfo -{ - u8 year; - u8 month; - u8 day; - u8 dayOfWeek; - u8 hour; - u8 minute; - u8 second; - u8 status; - u8 alarmHour; - u8 alarmMinute; -}; - -void SiiRtcUnprotect(void); -void SiiRtcProtect(void); -u8 SiiRtcProbe(void); -bool8 SiiRtcReset(void); -bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc); -bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc); -bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc); -bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc); -bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc); -bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc); -bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc); - -#endif // GUARD_RTC_H diff --git a/berry_fix/payload/ld_script.sed b/berry_fix/payload/ld_script.sed deleted file mode 100644 index b91542b6f8..0000000000 --- a/berry_fix/payload/ld_script.sed +++ /dev/null @@ -1,14 +0,0 @@ -// { - r sym_ewram.ld - d -} - -// { - r sym_bss.ld - d -} - -// { - r sym_common.ld - d -} diff --git a/berry_fix/payload/ld_script.txt b/berry_fix/payload/ld_script.txt deleted file mode 100644 index d0a0af9edb..0000000000 --- a/berry_fix/payload/ld_script.txt +++ /dev/null @@ -1,107 +0,0 @@ -ENTRY(Init) - -SECTIONS { - . = 0x2010000; - - .text : - ALIGN(4) - { - asm/crt0.o(.text); - src/main.o(.text); - src/rtc.o(.text); - src/flash.o(.text); - } =0 - - lib_text : - ALIGN(4) - { - src/agb_flash.o(.text); - src/agb_flash_1m.o(.text); - src/agb_flash_mx.o(.text); - asm/libagbsyscall.o(.text); - src/siirtc.o(.text); - *libgcc.a:_call_via_rX.o(.text); - *libgcc.a:_modsi3.o(.text); - *libgcc.a:_umodsi3.o(.text); - *libgcc.a:_dvmd_tls.o(.text); - } =0 - - .rodata : - ALIGN(4) - { - src/main.o(.rodata); - src/rtc.o(.rodata); - src/flash.o(.rodata); - } =0 - - lib_rodata : - ALIGN(4) - { - src/agb_flash.o(.rodata); - src/agb_flash_1m.o(.rodata); - src/agb_flash_mx.o(.rodata); - src/agb_flash_le.o(.rodata); - src/siirtc.o(.rodata); - } - - . = 0x2020000; - - ewram (NOLOAD) : - ALIGN(4) - { - - } - - . = 0x3001000; - - iwram (NOLOAD) : - ALIGN(4) - { - - . = 0x40; - - end = .; - } - - . = 0x8000000; - - RS_Rom (NOLOAD) : - ALIGN(4) - { - _start = .; - . += 4; - RomHeaderNintendoLogo = .; - . += 156; - RS_RomHeader = .; - RomHeaderGameTitle = .; - . += 12; - RomHeaderGameCode = .; - . += 4; - RomHeaderMakerCode = .; - . += 2; - RomHeaderMagic = .; - . += 1; - RomHeaderMainUnitCode = .; - . += 1; - RomHeaderDeviceType = .; - . += 1; - RomHeaderReserved1 = .; - . += 7; - RomHeaderSoftwareVersion = .; - . += 1; - RomHeaderChecksum = .; - . += 1; - RomHeaderReserved2 = .; - . += 6; - GPIOPortData = .; - . += 2; - GPIOPortDirection = .; - . += 2; - GPIOPortReadEnable = .; - } =0 - - /DISCARD/ : - { - *(*); - } -} diff --git a/berry_fix/payload/rom.sha1 b/berry_fix/payload/rom.sha1 deleted file mode 100644 index 92eee7e879..0000000000 --- a/berry_fix/payload/rom.sha1 +++ /dev/null @@ -1 +0,0 @@ -866991e2b5a8de02d12f53abe0ee9af03a2b6e01 payload.gba diff --git a/berry_fix/payload/src/agb_flash.c b/berry_fix/payload/src/agb_flash.c deleted file mode 100644 index 2c2c96e6e9..0000000000 --- a/berry_fix/payload/src/agb_flash.c +++ /dev/null @@ -1,296 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -static u8 sTimerNum; -static u16 sTimerCount; -static vu16 *sTimerReg; -static u16 sSavedIme; - -u8 gFlashTimeoutFlag; -u8 (*PollFlashStatus)(u8 *); -const struct FlashType *gFlash; -u16 gFlashNumRemainingBytes; -const u16 *gFlashMaxTime; - -u16 (*ProgramFlashByte)(u16, u32, u8); -u16 (*ProgramFlashSector)(u16, void *); -u16 (*EraseFlashChip)(void); -u16 (*EraseFlashSector)(u16); -u16 (*WaitForFlashWrite)(u8, u8 *, u8); - -void SetReadFlash1(u16 *dest); - -void SwitchFlashBank(u8 bankNum) -{ - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xB0); - FLASH_WRITE(0x0000, bankNum); -} - -#define DELAY() \ -do { \ - vu16 i; \ - for (i = 20000; i != 0; i--) \ - ; \ -} while (0) - -u16 ReadFlashId(void) -{ - u16 flashId; - u16 readFlash1Buffer[0x20]; - u8 (*readFlash1)(u8 *); - - SetReadFlash1(readFlash1Buffer); - readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1); - - // Enter ID mode. - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x90); - DELAY(); - - flashId = readFlash1(FLASH_BASE + 1) << 8; - flashId |= readFlash1(FLASH_BASE); - - // Leave ID mode. - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xF0); - FLASH_WRITE(0x5555, 0xF0); - DELAY(); - - return flashId; -} - -void FlashTimerIntr(void) -{ - if (sTimerCount != 0 && --sTimerCount == 0) - gFlashTimeoutFlag = 1; -} - -u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)) -{ - if (timerNum >= 4) - return 1; - - sTimerNum = timerNum; - sTimerReg = ®_TMCNT(sTimerNum); - *intrFunc = FlashTimerIntr; - return 0; -} - -void StartFlashTimer(u8 phase) -{ - const u16 *maxTime = &gFlashMaxTime[phase * 3]; - sSavedIme = REG_IME; - REG_IME = 0; - sTimerReg[1] = 0; - REG_IE |= (INTR_FLAG_TIMER0 << sTimerNum); - gFlashTimeoutFlag = 0; - sTimerCount = *maxTime++; - *sTimerReg++ = *maxTime++; - *sTimerReg-- = *maxTime++; - REG_IF = (INTR_FLAG_TIMER0 << sTimerNum); - REG_IME = 1; -} - -void StopFlashTimer(void) -{ - REG_IME = 0; - *sTimerReg++ = 0; - *sTimerReg-- = 0; - REG_IE &= ~(INTR_FLAG_TIMER0 << sTimerNum); - REG_IME = sSavedIme; -} - -u8 ReadFlash1(u8 *addr) -{ - return *addr; -} - -void SetReadFlash1(u16 *dest) -{ - u16 *src; - u16 i; - - PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1); - - src = (u16 *)ReadFlash1; - src = (u16 *)((s32)src ^ 1); - - i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1; - - while (i != 0) - { - *dest++ = *src++; - i--; - } -} - -void ReadFlash_Core(u8 *src, u8 *dest, u32 size) -{ - while (size-- != 0) - { - *dest++ = *src++; - } -} - -void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size) -{ - u8 *src; - u16 i; - u16 readFlash_Core_Buffer[0x40]; - u16 *funcSrc; - u16 *funcDest; - void (*readFlash_Core)(u8 *, u8 *, u32); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - if (gFlash->romSize == FLASH_ROM_SIZE_1M) - { - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - } - - funcSrc = (u16 *)ReadFlash_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); - funcDest = readFlash_Core_Buffer; - - i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1; - - while (i != 0) - { - *funcDest++ = *funcSrc++; - i--; - } - - readFlash_Core = (void (*)(u8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1); - - src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; - - readFlash_Core(src, dest, size); -} - -u32 VerifyFlashSector_Core(u8 *src, u8 *tgt, u32 size) -{ - while (size-- != 0) - { - if (*tgt++ != *src++) - return (u32)(tgt - 1); - } - - return 0; -} - -u32 VerifyFlashSector(u16 sectorNum, u8 *src) -{ - u16 i; - u16 verifyFlashSector_Core_Buffer[0x80]; - u16 *funcSrc; - u16 *funcDest; - u8 *tgt; - u16 size; - u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - if (gFlash->romSize == FLASH_ROM_SIZE_1M) - { - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - } - - funcSrc = (u16 *)VerifyFlashSector_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); - funcDest = verifyFlashSector_Core_Buffer; - - i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; - - while (i != 0) - { - *funcDest++ = *funcSrc++; - i--; - } - - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); - - tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); - size = gFlash->sector.size; - - return verifyFlashSector_Core(src, tgt, size); -} - -u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) -{ - u16 i; - u16 verifyFlashSector_Core_Buffer[0x80]; - u16 *funcSrc; - u16 *funcDest; - u8 *tgt; - u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); - - if (gFlash->romSize == FLASH_ROM_SIZE_1M) - { - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - } - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - funcSrc = (u16 *)VerifyFlashSector_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); - funcDest = verifyFlashSector_Core_Buffer; - - i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; - - while (i != 0) - { - *funcDest++ = *funcSrc++; - i--; - } - - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); - - tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); - - return verifyFlashSector_Core(src, tgt, n); -} - -u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src) -{ - u8 i; - u32 result; - - for (i = 0; i < 3; i++) - { - result = ProgramFlashSector(sectorNum, src); - if (result != 0) - continue; - - result = VerifyFlashSector(sectorNum, src); - if (result == 0) - break; - } - - return result; -} - -u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *src, u32 n) -{ - u8 i; - u32 result; - - for (i = 0; i < 3; i++) - { - result = ProgramFlashSector(sectorNum, src); - if (result != 0) - continue; - - result = VerifyFlashSectorNBytes(sectorNum, src, n); - if (result == 0) - break; - } - - return result; -} diff --git a/berry_fix/payload/src/agb_flash_1m.c b/berry_fix/payload/src/agb_flash_1m.c deleted file mode 100644 index 7f8bdeb5f0..0000000000 --- a/berry_fix/payload/src/agb_flash_1m.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -static const char AgbLibFlashVersion[] = "FLASH1M_V103"; - -const struct FlashSetupInfo * const sSetupInfos[] = -{ - &MX29L010, - &LE26FV10N1TS, - &DefaultFlash -}; - -u32 IdentifyFlash(void) -{ - u16 result; - u16 flashId; - const struct FlashSetupInfo * const *setupInfo; - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - flashId = ReadFlashId(); - - setupInfo = sSetupInfos; - result = 1; - - for (;;) - { - if ((*setupInfo)->type.ids.separate.makerId == 0) - break; - - if (flashId == (*setupInfo)->type.ids.joined) - { - result = 0; - break; - } - - setupInfo++; - } - - ProgramFlashByte = (*setupInfo)->programFlashByte; - ProgramFlashSector = (*setupInfo)->programFlashSector; - EraseFlashChip = (*setupInfo)->eraseFlashChip; - EraseFlashSector = (*setupInfo)->eraseFlashSector; - WaitForFlashWrite = (*setupInfo)->WaitForFlashWrite; - gFlashMaxTime = (*setupInfo)->maxTime; - gFlash = &(*setupInfo)->type; - - return result; -} - -u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData) -{ - u16 result = 0; - u8 status; - - StartFlashTimer(phase); - - while ((status = PollFlashStatus(addr)) != lastData) - { - if (status & 0x20) - { - // The write operation exceeded the flash chip's time limit. - - if (PollFlashStatus(addr) == lastData) - break; - - FLASH_WRITE(0x5555, 0xF0); - result = phase | 0xA000u; - break; - } - - if (gFlashTimeoutFlag) - { - if (PollFlashStatus(addr) == lastData) - break; - - FLASH_WRITE(0x5555, 0xF0); - result = phase | 0xC000u; - break; - } - } - - StopFlashTimer(); - - return result; -} diff --git a/berry_fix/payload/src/agb_flash_le.c b/berry_fix/payload/src/agb_flash_le.c deleted file mode 100644 index 39d956e277..0000000000 --- a/berry_fix/payload/src/agb_flash_le.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -const u16 leMaxTime[] = -{ - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, -}; - -const struct FlashSetupInfo LE26FV10N1TS = -{ - ProgramFlashByte_MX, - ProgramFlashSector_MX, - EraseFlashChip_MX, - EraseFlashSector_MX, - WaitForFlashWrite_Common, - leMaxTime, - { - 131072, // ROM size - { - 4096, // sector size - 12, // bit shift to multiply by sector size (4096 == 1 << 12) - 32, // number of sectors - 0 // appears to be unused - }, - { 3, 1 }, // wait state setup data - { { 0x62, 0x13 } } // ID - } -}; diff --git a/berry_fix/payload/src/agb_flash_mx.c b/berry_fix/payload/src/agb_flash_mx.c deleted file mode 100644 index 68eb00cd8d..0000000000 --- a/berry_fix/payload/src/agb_flash_mx.c +++ /dev/null @@ -1,193 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -const u16 mxMaxTime[] = -{ - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, -}; - -const struct FlashSetupInfo MX29L010 = -{ - ProgramFlashByte_MX, - ProgramFlashSector_MX, - EraseFlashChip_MX, - EraseFlashSector_MX, - WaitForFlashWrite_Common, - mxMaxTime, - { - 131072, // ROM size - { - 4096, // sector size - 12, // bit shift to multiply by sector size (4096 == 1 << 12) - 32, // number of sectors - 0 // appears to be unused - }, - { 3, 1 }, // wait state setup data - { { 0xC2, 0x09 } } // ID - } -}; - -const struct FlashSetupInfo DefaultFlash = -{ - ProgramFlashByte_MX, - ProgramFlashSector_MX, - EraseFlashChip_MX, - EraseFlashSector_MX, - WaitForFlashWrite_Common, - mxMaxTime, - { - 131072, // ROM size - { - 4096, // sector size - 12, // bit shift to multiply by sector size (4096 == 1 << 12) - 32, // number of sectors - 0 // appears to be unused - }, - { 3, 1 }, // wait state setup data - { { 0x00, 0x00 } } // ID of 0 - } -}; - -u16 EraseFlashChip_MX(void) -{ - u16 result; - u16 readFlash1Buffer[0x20]; - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x80); - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x10); - - SetReadFlash1(readFlash1Buffer); - - result = WaitForFlashWrite(3, FLASH_BASE, 0xFF); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - return result; -} - -u16 EraseFlashSector_MX(u16 sectorNum) -{ - u16 numTries; - u16 result; - u8 *addr; - u16 readFlash1Buffer[0x20]; - - if (sectorNum >= gFlash->sector.count) - return 0x80FF; - - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - - numTries = 0; - -try_erase: - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - addr = FLASH_BASE + (sectorNum << gFlash->sector.shift); - - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x80); - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - *addr = 0x30; - - SetReadFlash1(readFlash1Buffer); - - result = WaitForFlashWrite(2, addr, 0xFF); - - if (!(result & 0xA000) || numTries > 3) - goto done; - - numTries++; - - goto try_erase; - -done: - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - return result; -} - -u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data) -{ - u8 *addr; - u16 readFlash1Buffer[0x20]; - - if (offset >= gFlash->sector.size) - return 0x8000; - - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - - addr = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; - - SetReadFlash1(readFlash1Buffer); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xA0); - *addr = data; - - return WaitForFlashWrite(1, addr, data); -} - -static u16 ProgramByte(u8 *src, u8 *dest) -{ - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xA0); - *dest = *src; - - return WaitForFlashWrite(1, dest, *src); -} - -u16 ProgramFlashSector_MX(u16 sectorNum, void *src) -{ - u16 result; - u8 *dest; - u16 readFlash1Buffer[0x20]; - - if (sectorNum >= gFlash->sector.count) - return 0x80FF; - - result = EraseFlashSector_MX(sectorNum); - - if (result != 0) - return result; - - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - - SetReadFlash1(readFlash1Buffer); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - gFlashNumRemainingBytes = gFlash->sector.size; - dest = FLASH_BASE + (sectorNum << gFlash->sector.shift); - - while (gFlashNumRemainingBytes > 0) - { - result = ProgramByte(src, dest); - - if (result != 0) - break; - - gFlashNumRemainingBytes--; - src++; - dest++; - } - - return result; -} diff --git a/berry_fix/payload/src/flash.c b/berry_fix/payload/src/flash.c deleted file mode 100644 index 1f09d0b8f7..0000000000 --- a/berry_fix/payload/src/flash.c +++ /dev/null @@ -1,752 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" -#include "constants/vars.h" -#include "global.h" -#include "main.h" -#include "flash.h" -#include "rtc.h" - -struct SaveBlockChunk -{ - u8 * data; - u16 size; -}; - -u8 WriteSaveBlockChunks(u16 a0, const struct SaveBlockChunk * a1); -u8 WriteSingleChunk(u16 a0, const struct SaveBlockChunk * a1); -u8 TryWriteSector(u8, u8 *); -u8 EraseCurrentChunk(u16 a0, const struct SaveBlockChunk * a1); -u8 TryReadAllSaveSectorsCurrentSlot(u16 a0, const struct SaveBlockChunk * a1); -u8 ReadAllSaveSectorsCurrentSlot(u16 a0, const struct SaveBlockChunk * a1); -u8 GetSaveValidStatus(const struct SaveBlockChunk * a1); -u32 DoReadFlashWholeSection(u8 a0, struct SaveSector * a1); -u16 CalculateChecksum(const void *, u16); - -u16 gFirstSaveSector; -u32 gPrevSaveCounter; -u16 gLastKnownGoodSector; -u32 gDamagedSaveSectors; -u32 gSaveCounter; -struct SaveSector * gFastSaveSection; -u16 gCurSaveChunk; -bool32 gFlashIdentIsValid; - -EWRAM_DATA struct SaveBlock2 gSaveBlock2 = {}; -EWRAM_DATA struct SaveBlock1 gSaveBlock1 = {}; -EWRAM_DATA struct PokemonStorage gPokemonStorage = {}; - -// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer -#define SECTOR_DATA_SIZE 3968 -#define SECTOR_FOOTER_SIZE 128 - -#define SAVEBLOCK_CHUNK(structure, chunkNum) \ -{ \ - (u8 *)&structure + chunkNum * SECTOR_DATA_SIZE, \ - min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) \ -} \ - -static const struct SaveBlockChunk sSaveBlockChunks[] = -{ - SAVEBLOCK_CHUNK(gSaveBlock2, 0), - - SAVEBLOCK_CHUNK(gSaveBlock1, 0), - SAVEBLOCK_CHUNK(gSaveBlock1, 1), - SAVEBLOCK_CHUNK(gSaveBlock1, 2), - SAVEBLOCK_CHUNK(gSaveBlock1, 3), - - SAVEBLOCK_CHUNK(gPokemonStorage, 0), - SAVEBLOCK_CHUNK(gPokemonStorage, 1), - SAVEBLOCK_CHUNK(gPokemonStorage, 2), - SAVEBLOCK_CHUNK(gPokemonStorage, 3), - SAVEBLOCK_CHUNK(gPokemonStorage, 4), - SAVEBLOCK_CHUNK(gPokemonStorage, 5), - SAVEBLOCK_CHUNK(gPokemonStorage, 6), - SAVEBLOCK_CHUNK(gPokemonStorage, 7), - SAVEBLOCK_CHUNK(gPokemonStorage, 8), -}; - -const u16 gInfoMessagesPal[] = INCBIN_U16("graphics/msg_box.gbapal"); -const u8 gInfoMessagesTilemap[] = INCBIN_U8("graphics/msg_box.tilemap.lz"); -const u8 gInfoMessagesGfx[] = INCBIN_U8("graphics/msg_box.4bpp.lz"); - -bool32 flash_maincb_ident_is_valid(void) -{ - gFlashIdentIsValid = TRUE; - if (!IdentifyFlash()) - { - SetFlashTimerIntr(0, &((IntrFunc *)gIntrFuncPointers)[9]); - return TRUE; - } - gFlashIdentIsValid = FALSE; - return FALSE; -} - -void Call_ReadFlash(u16 sectorNum, ptrdiff_t offset, void * dest, size_t size) -{ - ReadFlash(sectorNum, offset, dest, size); -} - -u8 Call_WriteSaveBlockChunks(u16 a0, const struct SaveBlockChunk * a1) -{ - return WriteSaveBlockChunks(a0, a1); -} - -u8 Call_TryReadAllSaveSectorsCurrentSlot(u16 a0, const struct SaveBlockChunk * a1) -{ - return TryReadAllSaveSectorsCurrentSlot(a0, a1); -} - -u32 * GetDamagedSaveSectorsPtr(void) -{ - return &gDamagedSaveSectors; -} - -s32 flash_write_save_block_chunks(u8 a0) -{ - u8 i; - - switch (a0) - { - case 0: - default: - Call_WriteSaveBlockChunks(0xFFFF, sSaveBlockChunks); - break; - case 1: - for (i = 0; i < 5; i++) - { - Call_WriteSaveBlockChunks(i, sSaveBlockChunks); - } - break; - case 2: - Call_WriteSaveBlockChunks(0, sSaveBlockChunks); - break; - } - - return 0; -} - -u8 flash_write_save_block_chunks_check_damage(u8 a0) -{ - flash_write_save_block_chunks(a0); - if (*GetDamagedSaveSectorsPtr() == 0) - return 1; - return 0xFF; -} - -u8 flash_maincb_read_save(u32 unused) -{ - return Call_TryReadAllSaveSectorsCurrentSlot(0xFFFF, sSaveBlockChunks); -} - -void msg_load_gfx(void) -{ - REG_DISPCNT = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BLDCNT = 0; - LZ77UnCompVram(gInfoMessagesGfx, (void *)BG_VRAM); - LZ77UnCompVram(gInfoMessagesTilemap, (void *)BG_SCREEN_ADDR(28)); - CpuCopy16(gInfoMessagesPal, (void *)BG_PLTT, 0x200); - REG_BG0CNT = BGCNT_SCREENBASE(28) | BGCNT_TXT512x512; - REG_DISPCNT = DISPCNT_BG0_ON; -} - -void msg_display(enum MsgBoxUpdateMessage a0) -{ - switch (a0) - { - case MSGBOX_WILL_NOW_UPDATE: - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - break; - case MSGBOX_HAS_BEEN_UPDATED: - REG_BG0HOFS = 0x100; - REG_BG0VOFS = 0; - break; - case MSGBOX_UNABLE_TO_UPDATE: - REG_BG0HOFS = 0x100; - REG_BG0VOFS = 0xB0; - break; - case MSGBOX_NO_NEED_TO_UPDATE: - REG_BG0HOFS = 0; - REG_BG0VOFS = 0xB0; - break; - case MSGBOX_UPDATING: - REG_BG0HOFS = 0; - REG_BG0VOFS = 0x160; - break; - } -} - -void Save_EraseAllData(void) -{ - u16 i; - for (i = 0; i < 32; i++) - EraseFlashSector(i); -} - -void Save_ResetSaveCounters(void) -{ - gSaveCounter = 0; - gFirstSaveSector = 0; - gDamagedSaveSectors = 0; -} - -bool32 SetSectorDamagedStatus(u8 op, u8 sectorNum) -{ - bool32 retVal = FALSE; - - switch (op) - { - case SECTOR_DAMAGED: - gDamagedSaveSectors |= (1 << sectorNum); - break; - case SECTOR_OK: - gDamagedSaveSectors &= ~(1 << sectorNum); - break; - case SECTOR_CHECK: // unused - if (gDamagedSaveSectors & (1 << sectorNum)) - retVal = TRUE; - break; - } - - return retVal; -} - -u8 WriteSaveBlockChunks(u16 chunkId, const struct SaveBlockChunk *chunks) -{ - u32 retVal; - u16 i; - - gFastSaveSection = eSaveSection; - - if (chunkId != 0xFFFF) // write single chunk - { - retVal = WriteSingleChunk(chunkId, chunks); - } - else // write all chunks - { - gLastKnownGoodSector = gFirstSaveSector; - gPrevSaveCounter = gSaveCounter; - gFirstSaveSector++; - gFirstSaveSector %= NUM_SECTORS_PER_SAVE_SLOT; - gSaveCounter++; - retVal = SAVE_STATUS_OK; - - for (i = 0; i < NUM_SECTORS_PER_SAVE_SLOT; i++) - WriteSingleChunk(i, chunks); - - // Check for any bad sectors - if (gDamagedSaveSectors != 0) // skip the damaged sector. - { - retVal = SAVE_STATUS_ERROR; - gFirstSaveSector = gLastKnownGoodSector; - gSaveCounter = gPrevSaveCounter; - } - } - - return retVal; -} - -u8 WriteSingleChunk(u16 chunkId, const struct SaveBlockChunk * chunks) -{ - u16 i; - u16 sectorNum; - u8 *chunkData; - u16 chunkSize; - - // select sector number - sectorNum = chunkId + gFirstSaveSector; - sectorNum %= NUM_SECTORS_PER_SAVE_SLOT; - // select save slot - sectorNum += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); - - chunkData = chunks[chunkId].data; - chunkSize = chunks[chunkId].size; - - // clear save section. - for (i = 0; i < sizeof(struct SaveSector); i++) - ((u8 *)gFastSaveSection)[i] = 0; - - gFastSaveSection->id = chunkId; - gFastSaveSection->signature = FILE_SIGNATURE; - gFastSaveSection->counter = gSaveCounter; - for (i = 0; i < chunkSize; i++) - gFastSaveSection->data[i] = chunkData[i]; - gFastSaveSection->checksum = CalculateChecksum(chunkData, chunkSize); - - return TryWriteSector(sectorNum, gFastSaveSection->data); -} - -u8 HandleWriteSectorNBytes(u8 sectorNum, u8 *data, u16 size) -{ - u16 i; - struct SaveSector *section = eSaveSection; - - for (i = 0; i < sizeof(struct SaveSector); i++) - ((char *)section)[i] = 0; - - section->signature = FILE_SIGNATURE; - for (i = 0; i < size; i++) - section->data[i] = data[i]; - section->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used. - - return TryWriteSector(sectorNum, section->data); -} - -u8 TryWriteSector(u8 sectorNum, u8 *data) -{ - if (ProgramFlashSectorAndVerify(sectorNum, data) != 0) // is damaged? - { - SetSectorDamagedStatus(SECTOR_DAMAGED, sectorNum); // set damaged sector bits. - return SAVE_STATUS_ERROR; - } - else - { - SetSectorDamagedStatus(SECTOR_OK, sectorNum); // unset damaged sector bits. it's safe now. - return SAVE_STATUS_OK; - } -} - -u32 RestoreSaveBackupVarsAndIncrement(const struct SaveBlockChunk *chunk) // chunk is unused -{ - gFastSaveSection = eSaveSection; - gLastKnownGoodSector = gFirstSaveSector; - gPrevSaveCounter = gSaveCounter; - gFirstSaveSector++; - gFirstSaveSector %= NUM_SECTORS_PER_SAVE_SLOT; - gSaveCounter++; - gCurSaveChunk = 0; - gDamagedSaveSectors = 0; - return 0; -} - -u32 RestoreSaveBackupVars(const struct SaveBlockChunk *chunk) -{ - gFastSaveSection = eSaveSection; - gLastKnownGoodSector = gFirstSaveSector; - gPrevSaveCounter = gSaveCounter; - gCurSaveChunk = 0; - gDamagedSaveSectors = 0; - return 0; -} - -u8 WriteSingleChunkAndIncrement(u16 a1, const struct SaveBlockChunk * chunk) -{ - u8 retVal; - - if (gCurSaveChunk < a1 - 1) - { - retVal = SAVE_STATUS_OK; - WriteSingleChunk(gCurSaveChunk, chunk); - gCurSaveChunk++; - if (gDamagedSaveSectors) - { - retVal = SAVE_STATUS_ERROR; - gFirstSaveSector = gLastKnownGoodSector; - gSaveCounter = gPrevSaveCounter; - } - } - else - { - retVal = SAVE_STATUS_ERROR; - } - - return retVal; -} - -u8 ErasePreviousChunk(u16 a1, const struct SaveBlockChunk *chunk) -{ - u8 retVal = SAVE_STATUS_OK; - - EraseCurrentChunk(a1 - 1, chunk); - - if (gDamagedSaveSectors) - { - retVal = SAVE_STATUS_ERROR; - gFirstSaveSector = gLastKnownGoodSector; - gSaveCounter = gPrevSaveCounter; - } - return retVal; -} - -u8 EraseCurrentChunk(u16 chunkId, const struct SaveBlockChunk *chunks) -{ - u16 i; - u16 sector; - u8 *data; - u16 size; - u8 status; - - // select sector number - sector = chunkId + gFirstSaveSector; - sector %= NUM_SECTORS_PER_SAVE_SLOT; - // select save slot - sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); - - data = chunks[chunkId].data; - size = chunks[chunkId].size; - - // clear temp save section. - for (i = 0; i < sizeof(struct SaveSector); i++) - ((char *)gFastSaveSection)[i] = 0; - - gFastSaveSection->id = chunkId; - gFastSaveSection->signature = FILE_SIGNATURE; - gFastSaveSection->counter = gSaveCounter; - - // set temp section's data. - for (i = 0; i < size; i++) - gFastSaveSection->data[i] = data[i]; - - // calculate checksum. - gFastSaveSection->checksum = CalculateChecksum(data, size); - - EraseFlashSector(sector); - - status = SAVE_STATUS_OK; - - for (i = 0; i < sizeof(struct UnkSaveSection); i++) - { - if (ProgramFlashByte(sector, i, gFastSaveSection->data[i])) - { - status = SAVE_STATUS_ERROR; - break; - } - } - - if (status == SAVE_STATUS_ERROR) - { - SetSectorDamagedStatus(SECTOR_DAMAGED, sector); - return SAVE_STATUS_ERROR; - } - else - { - status = SAVE_STATUS_OK; - - for (i = 0; i < 7; i++) - { - if (ProgramFlashByte(sector, 0xFF9 + i, ((u8 *)gFastSaveSection)[0xFF9 + i])) - { - status = SAVE_STATUS_ERROR; - break; - } - } - - if (status == SAVE_STATUS_ERROR) - { - SetSectorDamagedStatus(SECTOR_DAMAGED, sector); - return SAVE_STATUS_ERROR; - } - else - { - SetSectorDamagedStatus(SECTOR_OK, sector); - return SAVE_STATUS_OK; - } - } -} - -u8 WriteSomeFlashByteToPrevSector(u16 a1, const struct SaveBlockChunk *chunk) -{ - u16 sector; - - // select sector number - sector = a1 + gFirstSaveSector - 1; - sector %= NUM_SECTORS_PER_SAVE_SLOT; - // select save slot - sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); - - if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), ((u8 *)gFastSaveSection)[sizeof(struct UnkSaveSection)])) - { - // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. - SetSectorDamagedStatus(SECTOR_DAMAGED, sector); - gFirstSaveSector = gLastKnownGoodSector; - gSaveCounter = gPrevSaveCounter; - return SAVE_STATUS_ERROR; - } - else - { - SetSectorDamagedStatus(SECTOR_OK, sector); - return SAVE_STATUS_OK; - } -} - -u8 WriteSomeFlashByte0x25ToPrevSector(u16 a1, const struct SaveBlockChunk *chunk) -{ - u16 sector; - - sector = a1 + gFirstSaveSector - 1; - sector %= NUM_SECTORS_PER_SAVE_SLOT; - sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); - - if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25)) - { - // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. - SetSectorDamagedStatus(SECTOR_DAMAGED, sector); - gFirstSaveSector = gLastKnownGoodSector; - gSaveCounter = gPrevSaveCounter; - return SAVE_STATUS_ERROR; - } - else - { - SetSectorDamagedStatus(SECTOR_OK, sector); - return SAVE_STATUS_OK; - } -} - -u8 TryReadAllSaveSectorsCurrentSlot(u16 a1, const struct SaveBlockChunk *chunk) -{ - u8 retVal; - gFastSaveSection = eSaveSection; - if (a1 != 0xFFFF) - { - retVal = SAVE_STATUS_ERROR; - } - else - { - retVal = GetSaveValidStatus(chunk); - ReadAllSaveSectorsCurrentSlot(0xFFFF, chunk); - } - - return retVal; -} - -u8 ReadAllSaveSectorsCurrentSlot(u16 a1, const struct SaveBlockChunk *chunks) -{ - u16 i; - u16 checksum; - u16 sector = NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); - u16 id; - - for (i = 0; i < NUM_SECTORS_PER_SAVE_SLOT; i++) - { - DoReadFlashWholeSection(i + sector, gFastSaveSection); - id = gFastSaveSection->id; - if (id == 0) - gFirstSaveSector = i; - checksum = CalculateChecksum(gFastSaveSection->data, chunks[id].size); - if (gFastSaveSection->signature == FILE_SIGNATURE - && gFastSaveSection->checksum == checksum) - { - u16 j; - for (j = 0; j < chunks[id].size; j++) - chunks[id].data[j] = gFastSaveSection->data[j]; - } - } - - return 1; -} - -u8 GetSaveValidStatus(const struct SaveBlockChunk *chunks) -{ - u16 sector; - bool8 signatureValid; - u16 checksum; - u32 slot1saveCounter = 0; - u32 slot2saveCounter = 0; - u8 slot1Status; - u8 slot2Status; - u32 validSectors; - const u32 ALL_SECTORS = (1 << NUM_SECTORS_PER_SAVE_SLOT) - 1; // bitmask of all saveblock sectors - - // check save slot 1. - validSectors = 0; - signatureValid = FALSE; - for (sector = 0; sector < NUM_SECTORS_PER_SAVE_SLOT; sector++) - { - DoReadFlashWholeSection(sector, gFastSaveSection); - if (gFastSaveSection->signature == FILE_SIGNATURE) - { - signatureValid = TRUE; - checksum = CalculateChecksum(gFastSaveSection->data, chunks[gFastSaveSection->id].size); - if (gFastSaveSection->checksum == checksum) - { - slot1saveCounter = gFastSaveSection->counter; - validSectors |= 1 << gFastSaveSection->id; - } - } - } - - if (signatureValid) - { - if (validSectors == ALL_SECTORS) - slot1Status = SAVE_STATUS_OK; - else - slot1Status = SAVE_STATUS_ERROR; - } - else - { - slot1Status = SAVE_STATUS_EMPTY; - } - - // check save slot 2. - validSectors = 0; - signatureValid = FALSE; - for (sector = 0; sector < NUM_SECTORS_PER_SAVE_SLOT; sector++) - { - DoReadFlashWholeSection(NUM_SECTORS_PER_SAVE_SLOT + sector, gFastSaveSection); - if (gFastSaveSection->signature == FILE_SIGNATURE) - { - signatureValid = TRUE; - checksum = CalculateChecksum(gFastSaveSection->data, chunks[gFastSaveSection->id].size); - if (gFastSaveSection->checksum == checksum) - { - slot2saveCounter = gFastSaveSection->counter; - validSectors |= 1 << gFastSaveSection->id; - } - } - } - - if (signatureValid) - { - if (validSectors == ALL_SECTORS) - slot2Status = SAVE_STATUS_OK; - else - slot2Status = SAVE_STATUS_ERROR; - } - else - { - slot2Status = SAVE_STATUS_EMPTY; - } - - if (slot1Status == SAVE_STATUS_OK && slot2Status == SAVE_STATUS_OK) - { - // Choose counter of the most recent save file - if ((slot1saveCounter == -1 && slot2saveCounter == 0) || (slot1saveCounter == 0 && slot2saveCounter == -1)) - { - if ((unsigned)(slot1saveCounter + 1) < (unsigned)(slot2saveCounter + 1)) - gSaveCounter = slot2saveCounter; - else - gSaveCounter = slot1saveCounter; - } - else - { - if (slot1saveCounter < slot2saveCounter) - gSaveCounter = slot2saveCounter; - else - gSaveCounter = slot1saveCounter; - } - return SAVE_STATUS_OK; - } - - if (slot1Status == SAVE_STATUS_OK) - { - gSaveCounter = slot1saveCounter; - if (slot2Status == SAVE_STATUS_ERROR) - return SAVE_STATUS_ERROR; - else - return SAVE_STATUS_OK; - } - - if (slot2Status == SAVE_STATUS_OK) - { - gSaveCounter = slot2saveCounter; - if (slot1Status == SAVE_STATUS_ERROR) - return SAVE_STATUS_ERROR; - else - return SAVE_STATUS_OK; - } - - if (slot1Status == SAVE_STATUS_EMPTY && slot2Status == SAVE_STATUS_EMPTY) - { - gSaveCounter = 0; - gFirstSaveSector = 0; - return SAVE_STATUS_EMPTY; - } - - gSaveCounter = 0; - gFirstSaveSector = 0; - return 2; -} - -u8 ReadSomeUnknownSectorAndVerify(u8 sector, u8 *data, u16 size) -{ - u16 i; - struct SaveSector *section = eSaveSection; - - DoReadFlashWholeSection(sector, section); - if (section->signature == FILE_SIGNATURE) - { - u16 checksum = CalculateChecksum(section->data, size); - if (section->id == checksum) - { - for (i = 0; i < size; i++) - data[i] = section->data[i]; - return SAVE_STATUS_OK; - } - else - { - return 2; - } - } - else - { - return SAVE_STATUS_EMPTY; - } -} - -u32 DoReadFlashWholeSection(u8 sector, struct SaveSector *section) -{ - ReadFlash(sector, 0, section->data, sizeof(struct SaveSector)); - return 1; -} - -u16 CalculateChecksum(const void *data, u16 size) -{ - u16 i; - u32 checksum = 0; - - for (i = 0; i < (size / 4); i++) - { - checksum += *((u32 *)data); - data += sizeof(u32); - } - - return ((checksum >> 16) + checksum); -} - -void nullsub_0201182C() -{ -} - -void nullsub_02011830() -{ -} - -void nullsub_02011834() -{ -} - -u16 * get_var_addr(u16 a0) -{ - if (a0 < VARS_START) - return NULL; - if (a0 < VAR_SPECIAL_0) - return &gSaveBlock1.vars[a0 - VARS_START]; - return NULL; -} - -bool32 flash_maincb_check_need_reset_pacifidlog_tm(void) -{ - u8 sp0; - u16 * data = get_var_addr(VAR_PACIFIDLOG_TM_RECEIVED_DAY); - rtc_maincb_is_time_since_last_berry_update_positive(&sp0); - if (*data <= gRtcUTCTime.days) - return TRUE; - else - return FALSE; -} - -bool32 flash_maincb_reset_pacifidlog_tm(void) -{ - u8 sp0; - if (flash_maincb_check_need_reset_pacifidlog_tm() == TRUE) - return TRUE; - rtc_maincb_is_time_since_last_berry_update_positive(&sp0); - if (gRtcUTCTime.days < 0) - return FALSE; - *get_var_addr(VAR_PACIFIDLOG_TM_RECEIVED_DAY) = 1; - if (flash_write_save_block_chunks_check_damage(0) != TRUE) - return FALSE; - return TRUE; -} diff --git a/berry_fix/payload/src/main.c b/berry_fix/payload/src/main.c deleted file mode 100644 index 325d3830eb..0000000000 --- a/berry_fix/payload/src/main.c +++ /dev/null @@ -1,289 +0,0 @@ -#include "gba/gba.h" -#include "global.h" -#include "main.h" -#include "rtc.h" -#include "flash.h" - -static s32 gInitialWaitTimer; -IntrFunc gIntrTable[16]; -u16 gHeldKeys; -u16 gNewKeys; -u8 gIntrVector[0x100]; -u32 gUpdateSuccessful; -u32 gUnknown_3001194; -u32 gUnknown_30011A0[0x19]; -u32 gMainCallbackState; -u32 gGameVersion; - -EWRAM_DATA u8 gSharedMem[0x8000] = {}; - -void IntrMain(void); -void ReadKeys(void); -void dummy_intr_0(void); -void dummy_intr_1(void); -void main_callback(u32 *, void *, void *); - - -const char gBerryFixGameCode[] = "AGBJ"; -const IntrFunc gIntrFuncPointers[] = { - dummy_intr_0, - dummy_intr_1, - dummy_intr_0, - dummy_intr_0, - dummy_intr_0, - dummy_intr_0, - dummy_intr_0, - dummy_intr_0, - dummy_intr_0, - dummy_intr_0, - NULL, - NULL, - NULL -}; -const char gVersionData[][2] = { - {'J', 1}, - {'E', 2}, - {'D', 1}, - {'F', 1}, - {'I', 1}, - {'S', 1} -}; -const char gRubyTitleAndCode[] = "POKEMON RUBYAXV"; -const char gSapphireTitleAndCode[] = "POKEMON SAPPAXP"; -const u16 sDebugPals[20] = { - RGB(00, 00, 00), - RGB(31, 00, 00), - RGB(00, 31, 00), - RGB(00, 00, 31) -}; -const u16 sDebugDigitsGfx[] = INCBIN_U16("graphics/debug_digits.4bpp"); - -void AgbMain(void) -{ - RegisterRamReset(0x1E); - DmaCopy32(3, gIntrFuncPointers, gIntrTable, sizeof gIntrFuncPointers); - DmaCopy32(3, IntrMain, gIntrVector, sizeof(gIntrVector)); - INTR_VECTOR = gIntrVector; - REG_IE = INTR_FLAG_VBLANK; - if (*RomHeaderMagic == 0x96 && *(u32 *)RomHeaderGameCode == *(u32 *)gBerryFixGameCode) - REG_IE |= INTR_FLAG_GAMEPAK; - REG_DISPSTAT = DISPSTAT_VBLANK_INTR; - REG_IME = INTR_FLAG_VBLANK; - msg_load_gfx(); - gMainCallbackState = MAINCB_INIT; - gUnknown_3001194 = 0; - for (;;) - { - VBlankIntrWait(); - ReadKeys(); - main_callback(&gMainCallbackState, gUnknown_30011A0, gSharedMem); - } -} - -void dummy_intr_1(void) -{} - -void dummy_intr_0(void) -{} - -void ReadKeys(void) -{ - u16 keyInput = REG_KEYINPUT ^ KEYS_MASK; - gNewKeys = keyInput & ~gHeldKeys; - gHeldKeys = keyInput; -} - -void fill_palette(const u8 * src, u16 * dest, u8 value) -{ - s32 i; - for (i = 0; src[i] != 0; i++) - dest[i] = src[i] | value << 12; -} - -bool32 berry_fix_memcmp(const char * src1, const char * src2, size_t size) -{ - s32 i; - for (i = 0; i < size; i++) - { - if (src1[i] != src2[i]) - return FALSE; - } - return TRUE; -} - -s32 validate_rom_header_internal(void) -{ - char languageCode = *(RomHeaderGameCode + 3); - s32 softwareVersion = *RomHeaderSoftwareVersion; - s32 shouldUpdate = -1; - s32 i; - for (i = 0; i < ARRAY_COUNT(gVersionData); i++) - { - if (languageCode == gVersionData[i][0]) - { - if (softwareVersion >= gVersionData[i][1]) - { - shouldUpdate = 0; - } - else - { - shouldUpdate = 1; - } - break; - } - } - if (shouldUpdate != -1) - { - if (berry_fix_memcmp(RomHeaderGameTitle, gRubyTitleAndCode, 15) == TRUE) - { - if (shouldUpdate == 0) - return RUBY_NONEED; - else - { - gGameVersion = VERSION_RUBY; - return RUBY_UPDATABLE; - } - } - else if (berry_fix_memcmp(RomHeaderGameTitle, gSapphireTitleAndCode, 15) == TRUE) - { - if (shouldUpdate == 0) - return SAPPHIRE_NONEED; - else - { - gGameVersion = VERSION_SAPPHIRE; - return SAPPHIRE_UPDATABLE; - } - } - } - return INVALID; -} - -s32 validate_rom_header(void) -{ - if (*RomHeaderMakerCode == '0' && *(RomHeaderMakerCode + 1) == '1' && *RomHeaderMagic == 0x96) - return validate_rom_header_internal(); - else - return INVALID; -} - -void main_callback(u32 * state, void * unused1, void * unused2) -{ - u8 year; - switch (*state) - { - case MAINCB_INIT: - msg_display(MSGBOX_WILL_NOW_UPDATE); - if (++gInitialWaitTimer >= 180) - { - gInitialWaitTimer = 0; - gUpdateSuccessful = 0; - switch (validate_rom_header()) - { - case SAPPHIRE_UPDATABLE: - case RUBY_UPDATABLE: // Should Update Ruby - ++(*state); // MAINCB_CHECK_RTC - break; - case INVALID: // Invalid header - *state = MAINCB_ERROR; - break; - case SAPPHIRE_NONEED: // Should not update Sapphire - case RUBY_NONEED: // Should not update Ruby - *state = MAINCB_NO_NEED_TO_FIX; - break; - } - } - break; - case MAINCB_CHECK_RTC: - if (!rtc_maincb_is_rtc_working()) - *state = MAINCB_ERROR; - else - ++(*state); // MAINCB_CHECK_FLASH - break; - case MAINCB_CHECK_FLASH: - if (flash_maincb_ident_is_valid() == TRUE) - ++(*state); // MAINCB_READ_SAVE - else - *state = MAINCB_ERROR; - break; - case MAINCB_READ_SAVE: - if (flash_maincb_read_save(0) == SAVE_STATUS_OK) - ++(*state); // MAINCB_CHECK_TIME - else - *state = MAINCB_ERROR; - break; - case MAINCB_CHECK_TIME: - if (rtc_maincb_is_time_since_last_berry_update_positive(&year) == TRUE) - { - if (year == 0) - ++(*state); // MAINCB_FIX_DATE - else - *state = MAINCB_CHECK_PACIFIDLOG_TM; - } - else - { - if (year != 1) - *state = MAINCB_YEAR_MAKES_NO_SENSE; - else - ++(*state); // MAINCB_FIX_DATE - } - break; - case MAINCB_FIX_DATE: - rtc_maincb_fix_date(); - gUpdateSuccessful |= 1; - *state = MAINCB_CHECK_PACIFIDLOG_TM; - break; - case MAINCB_CHECK_PACIFIDLOG_TM: - if (flash_maincb_check_need_reset_pacifidlog_tm() == TRUE) - *state = MAINCB_FINISHED; - else - *state = MAINCB_FIX_PACIFIDLOG_TM; - break; - case MAINCB_FIX_PACIFIDLOG_TM: - msg_display(MSGBOX_UPDATING); - if (flash_maincb_reset_pacifidlog_tm() == TRUE) - { - gUpdateSuccessful |= 1; - *state = MAINCB_FINISHED; - } - else - *state = MAINCB_ERROR; - break; - case MAINCB_FINISHED: - if (gUpdateSuccessful == 0) - *state = MAINCB_NO_NEED_TO_FIX; - else - msg_display(MSGBOX_HAS_BEEN_UPDATED); - break; - case MAINCB_NO_NEED_TO_FIX: - msg_display(MSGBOX_NO_NEED_TO_UPDATE); - break; - case MAINCB_YEAR_MAKES_NO_SENSE: - msg_display(MSGBOX_UNABLE_TO_UPDATE); - break; - case MAINCB_ERROR: - msg_display(MSGBOX_UNABLE_TO_UPDATE); - break; - } -} - -void DBG_LoadDigitsPal(void) -{ - const u16 * src; - s32 i; - register vu16 * dest asm("r3") = (vu16 *)BG_PLTT + 1; - DmaFill16(3, RGB(31, 31, 31), (vu16 *)BG_PLTT, BG_PLTT_SIZE); - src = sDebugPals; - for (i = 0; i < 4; i++) - { - *dest = *src; - dest += 16; - src++; - } -} - -void DBG_LoadDigits(void) -{ - DmaFill16(3, 0x1111, (void *)VRAM + 0x8420, 0x1800); - DmaCopy32(3, sDebugDigitsGfx, (void *)VRAM + 0x8600, 0x200); - DBG_LoadDigitsPal(); -} diff --git a/berry_fix/payload/src/rtc.c b/berry_fix/payload/src/rtc.c deleted file mode 100644 index e73f522aad..0000000000 --- a/berry_fix/payload/src/rtc.c +++ /dev/null @@ -1,346 +0,0 @@ -#include "gba/gba.h" -#include "siirtc.h" -#include "global.h" -#include "main.h" - -struct Time gTimeSinceBerryUpdate; -struct Time gRtcUTCTime; - -static u16 sRtcProbeStatus; -static struct SiiRtcInfo sRtcInfoBuffer; -static u8 sRtcProbeCode; -static u16 sImeBak; -static struct SiiRtcInfo sRtcInfoWork; - -const struct SiiRtcInfo sDefaultRTC = { - .year = 0, // 2000 - .month = 1, // January - .day = 1, // 01 - .dayOfWeek = 0, - .hour = 0, - .minute = 0, - .second = 0, - .status = 0, - .alarmHour = 0, - .alarmMinute = 0 -}; -const s32 sDaysPerMonth[] = { - 31, - 28, - 31, - 30, - 31, - 30, - 31, - 31, - 30, - 31, - 30, - 31 -}; - -void rtc_get_status_and_datetime(struct SiiRtcInfo *); -u16 rtc_validate_datetime(struct SiiRtcInfo *); - - -void rtc_intr_disable(void) -{ - sImeBak = REG_IME; - REG_IME = 0; -} - -void rtc_intr_enable(void) -{ - REG_IME = sImeBak; -} - -s32 bcd_to_hex(u8 a0) -{ - if (a0 >= 0xa0 || (a0 & 0xF) >= 10) - return 0xFF; - return ((a0 >> 4) & 0xF) * 10 + (a0 & 0xF); -} - -bool8 is_leap_year(u8 year) -{ - if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) - return TRUE; - return FALSE; -} - -u16 rtc_count_days_parameterized(u8 year, u8 month, u8 day) -{ - u16 numDays = 0; - s32 i; - for (i = year - 1; i > 0; i--) - { - numDays += 365; - if (is_leap_year(i) == TRUE) - numDays++; - } - for (i = 0; i < month - 1; i++) - numDays += sDaysPerMonth[i]; - if (month > MONTH_FEB && is_leap_year(year) == TRUE) - numDays++; - numDays += day; - return numDays; -} - -u16 rtc_count_days_from_info(struct SiiRtcInfo *info) -{ - return rtc_count_days_parameterized(bcd_to_hex(info->year), bcd_to_hex(info->month), bcd_to_hex(info->day)); -} - -static void rtc_probe_status(void) -{ - sRtcProbeStatus = 0; - rtc_intr_disable(); - SiiRtcUnprotect(); - sRtcProbeCode = SiiRtcProbe(); - rtc_intr_enable(); - if ((sRtcProbeCode & 0xF) != 1) - sRtcProbeStatus = 1; - else - { - if (sRtcProbeCode & 0xF0) - sRtcProbeStatus = 2; - else - sRtcProbeStatus = 0; - rtc_get_status_and_datetime(&sRtcInfoBuffer); - sRtcProbeStatus = rtc_validate_datetime(&sRtcInfoBuffer); - } -} - -u16 rtc_get_probe_status(void) -{ - return sRtcProbeStatus; -} - -void sub_020106EC(struct SiiRtcInfo * info) -{ - if (sRtcProbeStatus & 0xFF0) - *info = sDefaultRTC; - else - rtc_get_status_and_datetime(info); -} - -void rtc_get_datetime(struct SiiRtcInfo * info) -{ - rtc_intr_disable(); - SiiRtcGetDateTime(info); - rtc_intr_enable(); -} - -void rtc_get_status(struct SiiRtcInfo * info) -{ - rtc_intr_disable(); - SiiRtcGetStatus(info); - rtc_intr_enable(); -} - -void rtc_get_status_and_datetime(struct SiiRtcInfo * info) -{ - rtc_get_status(info); - rtc_get_datetime(info); -} - -u16 rtc_validate_datetime(struct SiiRtcInfo * info) -{ - s32 year, month, day; - u16 r4 = (info->status & SIIRTCINFO_POWER) ? 0x20 : 0; - if (!(info->status & SIIRTCINFO_24HOUR)) - r4 |= 0x10; - year = bcd_to_hex(info->year); - if (year == 0xFF) - r4 |= 0x40; - month = bcd_to_hex(info->month); - if (month == 0xFF || month == 0 || month > 12) - r4 |= 0x80; - day = bcd_to_hex(info->day); - if (day == 0xFF) - r4 |= 0x100; - if (month == MONTH_FEB) - { - if (day > is_leap_year(year) + sDaysPerMonth[1]) - r4 |= 0x100; - } - else - { - if (day > sDaysPerMonth[month - 1]) - r4 |= 0x100; - } - day = bcd_to_hex(info->hour); - if (day > 24) - r4 |= 0x200; - day = bcd_to_hex(info->minute); - if (day > 60) - r4 |= 0x400; - day = bcd_to_hex(info->second); - if (day > 60) - r4 |= 0x800; - return r4; -} - -void rtc_reset(void) -{ - rtc_intr_disable(); - SiiRtcReset(); - rtc_intr_enable(); -} - -void rtc_sub_time_from_datetime(struct SiiRtcInfo * datetime, struct Time * dest, struct Time * timediff) -{ - u16 r4 = rtc_count_days_from_info(datetime); - dest->seconds = bcd_to_hex(datetime->second) - timediff->seconds; - dest->minutes = bcd_to_hex(datetime->minute) - timediff->minutes; - dest->hours = bcd_to_hex(datetime->hour) - timediff->hours; - dest->days = r4 - timediff->days; - if (dest->seconds < 0) - { - dest->seconds += 60; - dest->minutes--; - } - if (dest->minutes < 0) - { - dest->minutes += 60; - dest->hours--; - } - if (dest->hours < 0) - { - dest->hours += 24; - dest->days--; - } -} - -void rtc_sub_time_from_time(struct Time * dest, struct Time * diff, struct Time * src) -{ - dest->seconds = src->seconds - diff->seconds; - dest->minutes = src->minutes - diff->minutes; - dest->hours = src->hours - diff->hours; - dest->days = src->days - diff->days; - if (dest->seconds < 0) - { - dest->seconds += 60; - dest->minutes--; - } - if (dest->minutes < 0) - { - dest->minutes += 60; - dest->hours--; - } - if (dest->hours < 0) - { - dest->hours += 24; - dest->days--; - } -} - -bool32 rtc_maincb_is_rtc_working(void) -{ - rtc_probe_status(); - if (rtc_get_probe_status() & 0xFF0) - return FALSE; - return TRUE; -} - -void rtc_set_datetime(struct SiiRtcInfo * info) -{ - vu16 imeBak = REG_IME; - REG_IME = 0; - SiiRtcSetDateTime(info); - REG_IME = imeBak; -} - -bool32 rtc_maincb_is_time_since_last_berry_update_positive(u8 * a0) -{ - rtc_get_status_and_datetime(&sRtcInfoWork); - *a0 = bcd_to_hex(sRtcInfoWork.year); - rtc_sub_time_from_datetime(&sRtcInfoWork, &gRtcUTCTime, LocalTimeOffset); - rtc_sub_time_from_time(&gTimeSinceBerryUpdate, LastBerryTreeUpdate, &gRtcUTCTime); - if (gTimeSinceBerryUpdate.days * 1440 + gTimeSinceBerryUpdate.hours * 60 + gTimeSinceBerryUpdate.minutes >= 0) - return TRUE; - return FALSE; -} - -u32 hex_to_bcd(u8 a0) -{ - u32 r4; - if (a0 > 99) - return 0xFF; - r4 = Div(a0, 10) << 4; - r4 |= Mod(a0, 10); - return r4; -} - -void sii_rtc_inc(u8 * a0) -{ - *a0 = hex_to_bcd(bcd_to_hex(*a0) + 1); -} - -void sii_rtc_inc_month(struct SiiRtcInfo * a0) -{ - sii_rtc_inc(&a0->month); - if (bcd_to_hex(a0->month) > 12) - { - sii_rtc_inc(&a0->year); - a0->month = MONTH_JAN; - } -} - -void sii_rtc_inc_day(struct SiiRtcInfo * a0) -{ - sii_rtc_inc(&a0->day); - if (bcd_to_hex(a0->day) > sDaysPerMonth[bcd_to_hex(a0->month) - 1]) - { - if (!is_leap_year(bcd_to_hex(a0->year)) || bcd_to_hex(a0->month) != MONTH_FEB || bcd_to_hex(a0->day) != 29) - { - a0->day = 1; - sii_rtc_inc_month(a0); - } - } -} - -bool32 rtc_is_past_feb_28_2000(struct SiiRtcInfo * a0) -{ - if (bcd_to_hex(a0->year) == 0) - { - if (bcd_to_hex(a0->month) == MONTH_JAN) - return FALSE; - if (bcd_to_hex(a0->month) > MONTH_FEB) - return TRUE; - if (bcd_to_hex(a0->day) == 29) - return TRUE; - return FALSE; - } - if (bcd_to_hex(a0->year) == 1) - return TRUE; - return FALSE; -} - -void rtc_maincb_fix_date(void) -{ - rtc_get_status_and_datetime(&sRtcInfoWork); - if (bcd_to_hex(sRtcInfoWork.year) == 0 || bcd_to_hex(sRtcInfoWork.year) == 1) - { - if (bcd_to_hex(sRtcInfoWork.year) == 1) - { - sRtcInfoWork.year = 2; - sRtcInfoWork.month = MONTH_JAN; - sRtcInfoWork.day = 2; - rtc_set_datetime(&sRtcInfoWork); - } - else - { - if (rtc_is_past_feb_28_2000(&sRtcInfoWork) == TRUE) - { - sii_rtc_inc_day(&sRtcInfoWork); - sii_rtc_inc(&sRtcInfoWork.year); - } - else - { - sii_rtc_inc(&sRtcInfoWork.year); - } - rtc_set_datetime(&sRtcInfoWork); - } - } -} diff --git a/berry_fix/payload/src/siirtc.c b/berry_fix/payload/src/siirtc.c deleted file mode 100644 index 965a068f13..0000000000 --- a/berry_fix/payload/src/siirtc.c +++ /dev/null @@ -1,432 +0,0 @@ -// Ruby/Sapphire/Emerald cartridges contain a Seiko Instruments Inc. (SII) -// S-3511A real-time clock (RTC). This library ("SIIRTC_V001") is for -// communicating with the RTC. - -#include "gba/gba.h" -#include "siirtc.h" - -#define STATUS_INTFE 0x02 // frequency interrupt enable -#define STATUS_INTME 0x08 // per-minute interrupt enable -#define STATUS_INTAE 0x20 // alarm interrupt enable -#define STATUS_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode -#define STATUS_POWER 0x80 // power on or power failure occurred - -#define TEST_MODE 0x80 // flag in the "second" byte - -#define ALARM_AM 0x00 -#define ALARM_PM 0x80 - -#define OFFSET_YEAR offsetof(struct SiiRtcInfo, year) -#define OFFSET_MONTH offsetof(struct SiiRtcInfo, month) -#define OFFSET_DAY offsetof(struct SiiRtcInfo, day) -#define OFFSET_DAY_OF_WEEK offsetof(struct SiiRtcInfo, dayOfWeek) -#define OFFSET_HOUR offsetof(struct SiiRtcInfo, hour) -#define OFFSET_MINUTE offsetof(struct SiiRtcInfo, minute) -#define OFFSET_SECOND offsetof(struct SiiRtcInfo, second) -#define OFFSET_STATUS offsetof(struct SiiRtcInfo, status) -#define OFFSET_ALARM_HOUR offsetof(struct SiiRtcInfo, alarmHour) -#define OFFSET_ALARM_MINUTE offsetof(struct SiiRtcInfo, alarmMinute) - -#define INFO_BUF(info, index) (*((u8 *)(info) + (index))) - -#define DATETIME_BUF(info, index) INFO_BUF(info, OFFSET_YEAR + index) -#define DATETIME_BUF_LEN (OFFSET_SECOND - OFFSET_YEAR + 1) - -#define TIME_BUF(info, index) INFO_BUF(info, OFFSET_HOUR + index) -#define TIME_BUF_LEN (OFFSET_SECOND - OFFSET_HOUR + 1) - -#define WR 0 // command for writing data -#define RD 1 // command for reading data - -#define CMD(n) (0x60 | (n << 1)) - -#define CMD_RESET CMD(0) -#define CMD_STATUS CMD(1) -#define CMD_DATETIME CMD(2) -#define CMD_TIME CMD(3) -#define CMD_ALARM CMD(4) - -#define GPIO_PORT_DATA (*(vu16 *)0x80000C4) -#define GPIO_PORT_DIRECTION (*(vu16 *)0x80000C6) -#define GPIO_PORT_READ_ENABLE (*(vu16 *)0x80000C8) - -extern vu16 GPIOPortDirection; - -static u16 sDummy; // unused variable -static bool8 sLocked; - -static int WriteCommand(u8 value); -static int WriteData(u8 value); -static u8 ReadData(); -static void EnableGpioPortRead(); -static void DisableGpioPortRead(); - -static const char AgbLibRtcVersion[] = "SIIRTC_V001"; - -void SiiRtcUnprotect() -{ - EnableGpioPortRead(); - sLocked = FALSE; -} - -void SiiRtcProtect() -{ - DisableGpioPortRead(); - sLocked = TRUE; -} - -u8 SiiRtcProbe() -{ - u8 errorCode; - struct SiiRtcInfo rtc; - - if (!SiiRtcGetStatus(&rtc)) - return 0; - - errorCode = 0; - - if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER - || (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0) - { - // The RTC is in 12-hour mode. Reset it and switch to 24-hour mode. - - // Note that the conditions are redundant and equivalent to simply - // "(rtc.status & SIIRTCINFO_24HOUR) == 0". It's possible that this - // was also intended to handle resetting the clock after power failure - // but a mistake was made. - - if (!SiiRtcReset()) - return 0; - - errorCode++; - } - - SiiRtcGetTime(&rtc); - - if (rtc.second & TEST_MODE) - { - // The RTC is in test mode. Reset it to leave test mode. - - if (!SiiRtcReset()) - return (errorCode << 4) & 0xF0; - - errorCode++; - } - - return (errorCode << 4) | 1; -} - -bool8 SiiRtcReset() -{ - u8 result; - struct SiiRtcInfo rtc; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_RESET | WR); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - rtc.status = SIIRTCINFO_24HOUR; - - result = SiiRtcSetStatus(&rtc); - - return result; -} - -bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc) -{ - u8 statusData; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_STATUS | RD); - - GPIO_PORT_DIRECTION = 5; - - statusData = ReadData(); - - rtc->status = (statusData & (STATUS_POWER | STATUS_24HOUR)) - | ((statusData & STATUS_INTAE) >> 3) - | ((statusData & STATUS_INTME) >> 2) - | ((statusData & STATUS_INTFE) >> 1); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc) -{ - u8 statusData; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - statusData = STATUS_24HOUR - | ((rtc->status & SIIRTCINFO_INTAE) << 3) - | ((rtc->status & SIIRTCINFO_INTME) << 2) - | ((rtc->status & SIIRTCINFO_INTFE) << 1); - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_STATUS | WR); - - WriteData(statusData); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_DATETIME | RD); - - GPIO_PORT_DIRECTION = 5; - - for (i = 0; i < DATETIME_BUF_LEN; i++) - DATETIME_BUF(rtc, i) = ReadData(); - - INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_DATETIME | WR); - - for (i = 0; i < DATETIME_BUF_LEN; i++) - WriteData(DATETIME_BUF(rtc, i)); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_TIME | RD); - - GPIO_PORT_DIRECTION = 5; - - for (i = 0; i < TIME_BUF_LEN; i++) - TIME_BUF(rtc, i) = ReadData(); - - INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_TIME | WR); - - for (i = 0; i < TIME_BUF_LEN; i++) - WriteData(TIME_BUF(rtc, i)); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc) -{ - u8 i; - u8 alarmData[2]; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - // Decode BCD. - alarmData[0] = (rtc->alarmHour & 0xF) + 10 * ((rtc->alarmHour >> 4) & 0xF); - - // The AM/PM flag must be set correctly even in 24-hour mode. - - if (alarmData[0] < 12) - alarmData[0] = rtc->alarmHour | ALARM_AM; - else - alarmData[0] = rtc->alarmHour | ALARM_PM; - - alarmData[1] = rtc->alarmMinute; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIOPortDirection = 7; // Why is this the only instance that uses a symbol? - - WriteCommand(CMD_ALARM | WR); - - for (i = 0; i < 2; i++) - WriteData(alarmData[i]); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -static int WriteCommand(u8 value) -{ - u8 i; - u8 temp; - - for (i = 0; i < 8; i++) - { - temp = ((value >> (7 - i)) & 1); - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 5; - } - - // control reaches end of non-void function -} - -static int WriteData(u8 value) -{ - u8 i; - u8 temp; - - for (i = 0; i < 8; i++) - { - temp = ((value >> i) & 1); - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 5; - } - - // control reaches end of non-void function -} - -static u8 ReadData() -{ - u8 i; - u8 temp; - u8 value; - - for (i = 0; i < 8; i++) - { - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 5; - - temp = ((GPIO_PORT_DATA & 2) >> 1); - value = (value >> 1) | (temp << 7); // UB: accessing uninitialized var - } - - return value; -} - -static void EnableGpioPortRead() -{ - GPIO_PORT_READ_ENABLE = 1; -} - -static void DisableGpioPortRead() -{ - GPIO_PORT_READ_ENABLE = 0; -} diff --git a/berry_fix/payload/sym_bss.txt b/berry_fix/payload/sym_bss.txt deleted file mode 100644 index 3b1c62ae96..0000000000 --- a/berry_fix/payload/sym_bss.txt +++ /dev/null @@ -1,5 +0,0 @@ - .include "src/main.o" - .include "src/rtc.o" - .include "src/flash.o" - .include "src/agb_flash.o" - .include "src/siirtc.o" diff --git a/berry_fix/payload/sym_common.txt b/berry_fix/payload/sym_common.txt deleted file mode 100644 index 28b47f52e3..0000000000 --- a/berry_fix/payload/sym_common.txt +++ /dev/null @@ -1,29 +0,0 @@ - .include "main.o" - .include "rtc.o" - - .align 4 -gFirstSaveSector: @ 0x03001220 - .space 0x4 - -gPrevSaveCounter: @ 0x03001224 - .space 0x4 - -gLastKnownGoodSector: @ 0x03001228 - .space 0x4 - -gDamagedSaveSectors: @ 0x0300122C - .space 0x4 - -gSaveCounter: @ 0x03001230 - .space 0x4 - -gFastSaveSection: @ 0x03001234 - .space 0x4 - -gCurSaveChunk: - .space 0x4 - -gFlashIdentIsValid: @ 0x0300123C - .space 0x4 - - .include "agb_flash.o" diff --git a/berry_fix/payload/sym_ewram.txt b/berry_fix/payload/sym_ewram.txt deleted file mode 100644 index 2c61f5e7e5..0000000000 --- a/berry_fix/payload/sym_ewram.txt +++ /dev/null @@ -1,3 +0,0 @@ - .include "src/main.o" - .include "src/rtc.o" - .include "src/flash.o" diff --git a/berry_fix/rom.sha1 b/berry_fix/rom.sha1 deleted file mode 100644 index 145b083b2c..0000000000 --- a/berry_fix/rom.sha1 +++ /dev/null @@ -1 +0,0 @@ -2eb0a94a913bebfb4cb59ceb57f3f965da55ef6d berry_fix.gba diff --git a/charmap.txt b/charmap.txt index 84e1496f05..980a3e5dd8 100644 --- a/charmap.txt +++ b/charmap.txt @@ -84,6 +84,7 @@ SUPER_RE = A0 '“' = B1 '”' = B2 '‘' = B3 +'’' = B4 '\'' = B4 '♂' = B5 '♀' = B6 @@ -400,6 +401,15 @@ B_TRAINER2_WIN_TEXT = FD 31 B_PARTNER_CLASS = FD 32 B_PARTNER_NAME = FD 33 B_BUFF3 = FD 34 +B_ATK_TRAINER_NAME = FD 35 +B_ATK_TRAINER_CLASS = FD 36 +B_ATK_TEAM1 = FD 37 +B_ATK_TEAM2 = FD 38 +B_DEF_NAME = FD 39 +B_DEF_TEAM1 = FD 3A +B_DEF_TEAM2 = FD 3B +B_ACTIVE_NAME = FD 3C +B_ACTIVE_NAME2 = FD 3D @ no Illusion check @ indicates the end of a town/city name (before " TOWN" or " CITY") NAME_END = FC 00 @@ -414,7 +424,7 @@ HIGHLIGHT = FC 02 @ same as fc 01 SHADOW = FC 03 @ same as fc 01 COLOR_HIGHLIGHT_SHADOW = FC 04 @ takes 3 bytes PALETTE = FC 05 @ used in credits -SIZE = FC 06 @ note that anything other than "SMALL" is invalid +FONT = FC 06 @ Given a font id, or use font constants below instead RESET_SIZE = FC 07 PAUSE = FC 08 @ manually print the wait byte after this, havent mapped them PAUSE_UNTIL_PRESS = FC 09 @@ -434,6 +444,14 @@ ENG = FC 16 PAUSE_MUSIC = FC 17 RESUME_MUSIC = FC 18 +@ fonts + +FONT_SMALL = FC 06 00 +FONT_NORMAL = FC 06 01 +FONT_SHORT = FC 06 02 +FONT_NARROW = FC 06 07 +FONT_SMALL_NARROW = FC 06 08 + @ colors TRANSPARENT = 00 diff --git a/common_syms/bg.txt b/common_syms/bg.txt index 2495d1646b..0a3c3aecca 100644 --- a/common_syms/bg.txt +++ b/common_syms/bg.txt @@ -1 +1 @@ -gUnneededFireRedVariable +gWindowTileAutoAllocEnabled diff --git a/common_syms/ereader_screen.txt b/common_syms/ereader_screen.txt index 5a89d370d0..2189eedbc9 100644 --- a/common_syms/ereader_screen.txt +++ b/common_syms/ereader_screen.txt @@ -1 +1 @@ -gUnknown_03006370 +gEReaderData diff --git a/common_syms/link_rfu_2.txt b/common_syms/link_rfu_2.txt index ac292845ef..4b8f02bad8 100644 --- a/common_syms/link_rfu_2.txt +++ b/common_syms/link_rfu_2.txt @@ -1,2 +1,2 @@ -gf_rfu_REQ_api -Rfu +gRfuAPIBuffer +gRfu diff --git a/common_syms/overworld.txt b/common_syms/overworld.txt index e136f54449..dcada0bbef 100644 --- a/common_syms/overworld.txt +++ b/common_syms/overworld.txt @@ -1,6 +1,6 @@ -gBGTilemapBuffers1 -gBGTilemapBuffers2 -gBGTilemapBuffers3 +gOverworldTilemapBuffer_Bg2 +gOverworldTilemapBuffer_Bg1 +gOverworldTilemapBuffer_Bg3 gHeldKeyCodeToSend gFieldCallback gFieldCallback2 diff --git a/common_syms/save.txt b/common_syms/save.txt index 190a658406..131031d506 100644 --- a/common_syms/save.txt +++ b/common_syms/save.txt @@ -3,11 +3,11 @@ gLastSaveCounter gLastKnownGoodSector gDamagedSaveSectors gSaveCounter -gFastSaveSection -gUnknown_03006208 +gReadWriteSector +gIncrementalSectorId gSaveUnusedVar gSaveFileStatus gGameContinueCallback -gRamSaveSectionLocations +gRamSaveSectorLocations gSaveUnusedVar2 gSaveAttemptStatus diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s deleted file mode 100644 index 0d4c85771d..0000000000 --- a/data/battle_ai_scripts.s +++ /dev/null @@ -1,3215 +0,0 @@ -#include "constants/battle.h" -#include "constants/battle_ai.h" -#include "constants/abilities.h" -#include "constants/items.h" -#include "constants/moves.h" -#include "constants/battle_move_effects.h" -#include "constants/hold_effects.h" -#include "constants/pokemon.h" - .include "asm/macros/battle_ai_script.inc" - .include "constants/constants.inc" - - .section script_data, "aw", %progbits - - .align 2 -gBattleAI_ScriptsTable:: - .4byte AI_CheckBadMove @ AI_SCRIPT_CHECK_BAD_MOVE - .4byte AI_TryToFaint @ AI_SCRIPT_TRY_TO_FAINT - .4byte AI_CheckViability @ AI_SCRIPT_CHECK_VIABILITY - .4byte AI_SetupFirstTurn @ AI_SCRIPT_SETUP_FIRST_TURN - .4byte AI_Risky @ AI_SCRIPT_RISKY - .4byte AI_PreferPowerExtremes @ AI_SCRIPT_PREFER_POWER_EXTREMES - .4byte AI_PreferBatonPass @ AI_SCRIPT_PREFER_BATON_PASS - .4byte AI_DoubleBattle @ AI_SCRIPT_DOUBLE_BATTLE - .4byte AI_HPAware @ AI_SCRIPT_HP_AWARE - .4byte AI_TrySunnyDayStart @ AI_SCRIPT_TRY_SUNNY_DAY_START - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Ret - .4byte AI_Roaming @ AI_SCRIPT_ROAMING - .4byte AI_Safari @ AI_SCRIPT_SAFARI - .4byte AI_FirstBattle @ AI_SCRIPT_FIRST_BATTLE - -AI_CheckBadMove: - if_target_is_ally AI_Ret - if_move MOVE_FISSURE, AI_CBM_CheckIfNegatesType - if_move MOVE_HORN_DRILL, AI_CBM_CheckIfNegatesType - get_how_powerful_move_is - if_equal MOVE_POWER_OTHER, AI_CheckBadMove_CheckSoundproof -AI_CBM_CheckIfNegatesType: - if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 - get_ability AI_TARGET - if_equal ABILITY_VOLT_ABSORB, CheckIfVoltAbsorbCancelsElectric - if_equal ABILITY_WATER_ABSORB, CheckIfWaterAbsorbCancelsWater - if_equal ABILITY_FLASH_FIRE, CheckIfFlashFireCancelsFire - if_equal ABILITY_WONDER_GUARD, CheckIfWonderGuardCancelsMove - if_equal ABILITY_LEVITATE, CheckIfLevitateCancelsGroundMove - goto AI_CheckBadMove_CheckSoundproof_ - -CheckIfVoltAbsorbCancelsElectric: - get_curr_move_type - if_equal_ TYPE_ELECTRIC, Score_Minus12 - goto AI_CheckBadMove_CheckSoundproof_ - -CheckIfWaterAbsorbCancelsWater: - get_curr_move_type - if_equal_ TYPE_WATER, Score_Minus12 - goto AI_CheckBadMove_CheckSoundproof_ - -CheckIfFlashFireCancelsFire: - get_curr_move_type - if_equal_ TYPE_FIRE, Score_Minus12 - goto AI_CheckBadMove_CheckSoundproof_ - -CheckIfWonderGuardCancelsMove: - if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CheckBadMove_CheckSoundproof_ - goto Score_Minus10 - -CheckIfLevitateCancelsGroundMove: - get_curr_move_type - if_equal_ TYPE_GROUND, Score_Minus10 -AI_CheckBadMove_CheckSoundproof_: - get_how_powerful_move_is - if_equal MOVE_POWER_OTHER, AI_CheckBadMove_CheckSoundproof @ Pointless check -AI_CheckBadMove_CheckSoundproof: - get_ability AI_TARGET - if_not_equal ABILITY_SOUNDPROOF, AI_CheckBadMove_CheckEffect - if_move MOVE_GROWL, Score_Minus10 - if_move MOVE_ROAR, Score_Minus10 - if_move MOVE_SING, Score_Minus10 - if_move MOVE_SUPERSONIC, Score_Minus10 - if_move MOVE_SCREECH, Score_Minus10 - if_move MOVE_SNORE, Score_Minus10 - if_move MOVE_UPROAR, Score_Minus10 - if_move MOVE_METAL_SOUND, Score_Minus10 - if_move MOVE_GRASS_WHISTLE, Score_Minus10 -AI_CheckBadMove_CheckEffect: - if_effect EFFECT_SLEEP, AI_CBM_Sleep - if_effect EFFECT_EXPLOSION, AI_CBM_Explosion - if_effect EFFECT_DREAM_EATER, AI_CBM_DreamEater - if_effect EFFECT_ATTACK_UP, AI_CBM_AttackUp - if_effect EFFECT_DEFENSE_UP, AI_CBM_DefenseUp - if_effect EFFECT_SPEED_UP, AI_CBM_SpeedUp - if_effect EFFECT_SPECIAL_ATTACK_UP, AI_CBM_SpAtkUp - if_effect EFFECT_SPECIAL_DEFENSE_UP, AI_CBM_SpDefUp - if_effect EFFECT_ACCURACY_UP, AI_CBM_AccUp - if_effect EFFECT_EVASION_UP, AI_CBM_EvasionUp - if_effect EFFECT_ATTACK_DOWN, AI_CBM_AttackDown - if_effect EFFECT_DEFENSE_DOWN, AI_CBM_DefenseDown - if_effect EFFECT_SPEED_DOWN, AI_CBM_SpeedDown - if_effect EFFECT_SPECIAL_ATTACK_DOWN, AI_CBM_SpAtkDown - if_effect EFFECT_SPECIAL_DEFENSE_DOWN, AI_CBM_SpDefDown - if_effect EFFECT_ACCURACY_DOWN, AI_CBM_AccDown - if_effect EFFECT_EVASION_DOWN, AI_CBM_EvasionDown - if_effect EFFECT_HAZE, AI_CBM_Haze - if_effect EFFECT_BIDE, AI_CBM_HighRiskForDamage - if_effect EFFECT_ROAR, AI_CBM_Roar - if_effect EFFECT_TOXIC, AI_CBM_Toxic - if_effect EFFECT_LIGHT_SCREEN, AI_CBM_LightScreen - if_effect EFFECT_OHKO, AI_CBM_OneHitKO - if_effect EFFECT_RAZOR_WIND, AI_CBM_HighRiskForDamage - if_effect EFFECT_SUPER_FANG, AI_CBM_HighRiskForDamage - if_effect EFFECT_MIST, AI_CBM_Mist - if_effect EFFECT_FOCUS_ENERGY, AI_CBM_FocusEnergy - if_effect EFFECT_CONFUSE, AI_CBM_Confuse - if_effect EFFECT_ATTACK_UP_2, AI_CBM_AttackUp - if_effect EFFECT_DEFENSE_UP_2, AI_CBM_DefenseUp - if_effect EFFECT_SPEED_UP_2, AI_CBM_SpeedUp - if_effect EFFECT_SPECIAL_ATTACK_UP_2, AI_CBM_SpAtkUp - if_effect EFFECT_SPECIAL_DEFENSE_UP_2, AI_CBM_SpDefUp - if_effect EFFECT_ACCURACY_UP_2, AI_CBM_AccUp - if_effect EFFECT_EVASION_UP_2, AI_CBM_EvasionUp - if_effect EFFECT_ATTACK_DOWN_2, AI_CBM_AttackDown - if_effect EFFECT_DEFENSE_DOWN_2, AI_CBM_DefenseDown - if_effect EFFECT_SPEED_DOWN_2, AI_CBM_SpeedDown - if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, AI_CBM_SpAtkDown - if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, AI_CBM_SpDefDown - if_effect EFFECT_ACCURACY_DOWN_2, AI_CBM_AccDown - if_effect EFFECT_EVASION_DOWN_2, AI_CBM_EvasionDown - if_effect EFFECT_REFLECT, AI_CBM_Reflect - if_effect EFFECT_POISON, AI_CBM_Toxic - if_effect EFFECT_PARALYZE, AI_CBM_Paralyze - if_effect EFFECT_SUBSTITUTE, AI_CBM_Substitute - if_effect EFFECT_RECHARGE, AI_CBM_HighRiskForDamage - if_effect EFFECT_LEECH_SEED, AI_CBM_LeechSeed - if_effect EFFECT_DISABLE, AI_CBM_Disable - if_effect EFFECT_LEVEL_DAMAGE, AI_CBM_HighRiskForDamage - if_effect EFFECT_PSYWAVE, AI_CBM_HighRiskForDamage - if_effect EFFECT_COUNTER, AI_CBM_HighRiskForDamage - if_effect EFFECT_ENCORE, AI_CBM_Encore - if_effect EFFECT_SNORE, AI_CBM_DamageDuringSleep - if_effect EFFECT_SLEEP_TALK, AI_CBM_DamageDuringSleep - if_effect EFFECT_FLAIL, AI_CBM_HighRiskForDamage - if_effect EFFECT_MEAN_LOOK, AI_CBM_CantEscape - if_effect EFFECT_NIGHTMARE, AI_CBM_Nightmare - if_effect EFFECT_MINIMIZE, AI_CBM_EvasionUp - if_effect EFFECT_CURSE, AI_CBM_Curse - if_effect EFFECT_SPIKES, AI_CBM_Spikes - if_effect EFFECT_FORESIGHT, AI_CBM_Foresight - if_effect EFFECT_PERISH_SONG, AI_CBM_PerishSong - if_effect EFFECT_SANDSTORM, AI_CBM_Sandstorm - if_effect EFFECT_SWAGGER, AI_CBM_Confuse - if_effect EFFECT_ATTRACT, AI_CBM_Attract - if_effect EFFECT_RETURN, AI_CBM_HighRiskForDamage - if_effect EFFECT_PRESENT, AI_CBM_HighRiskForDamage - if_effect EFFECT_FRUSTRATION, AI_CBM_HighRiskForDamage - if_effect EFFECT_SAFEGUARD, AI_CBM_Safeguard - if_effect EFFECT_MAGNITUDE, AI_CBM_Magnitude - if_effect EFFECT_BATON_PASS, AI_CBM_BatonPass - if_effect EFFECT_SONICBOOM, AI_CBM_HighRiskForDamage - if_effect EFFECT_RAIN_DANCE, AI_CBM_RainDance - if_effect EFFECT_SUNNY_DAY, AI_CBM_SunnyDay - if_effect EFFECT_BELLY_DRUM, AI_CBM_BellyDrum - if_effect EFFECT_PSYCH_UP, AI_CBM_Haze - if_effect EFFECT_MIRROR_COAT, AI_CBM_HighRiskForDamage - if_effect EFFECT_SKULL_BASH, AI_CBM_HighRiskForDamage - if_effect EFFECT_FUTURE_SIGHT, AI_CBM_FutureSight - if_effect EFFECT_TELEPORT, Score_Minus10 - if_effect EFFECT_DEFENSE_CURL, AI_CBM_DefenseUp - if_effect EFFECT_FAKE_OUT, AI_CBM_FakeOut - if_effect EFFECT_STOCKPILE, AI_CBM_Stockpile - if_effect EFFECT_SPIT_UP, AI_CBM_SpitUpAndSwallow - if_effect EFFECT_SWALLOW, AI_CBM_SpitUpAndSwallow - if_effect EFFECT_HAIL, AI_CBM_Hail - if_effect EFFECT_TORMENT, AI_CBM_Torment - if_effect EFFECT_FLATTER, AI_CBM_Confuse - if_effect EFFECT_WILL_O_WISP, AI_CBM_WillOWisp - if_effect EFFECT_MEMENTO, AI_CBM_Memento - if_effect EFFECT_FOCUS_PUNCH, AI_CBM_HighRiskForDamage - if_effect EFFECT_HELPING_HAND, AI_CBM_HelpingHand - if_effect EFFECT_TRICK, AI_CBM_TrickAndKnockOff - if_effect EFFECT_INGRAIN, AI_CBM_Ingrain - if_effect EFFECT_SUPERPOWER, AI_CBM_HighRiskForDamage - if_effect EFFECT_RECYCLE, AI_CBM_Recycle - if_effect EFFECT_KNOCK_OFF, AI_CBM_TrickAndKnockOff - if_effect EFFECT_ENDEAVOR, AI_CBM_HighRiskForDamage - if_effect EFFECT_IMPRISON, AI_CBM_Imprison - if_effect EFFECT_REFRESH, AI_CBM_Refresh - if_effect EFFECT_LOW_KICK, AI_CBM_HighRiskForDamage - if_effect EFFECT_MUD_SPORT, AI_CBM_MudSport - if_effect EFFECT_TICKLE, AI_CBM_Tickle - if_effect EFFECT_COSMIC_POWER, AI_CBM_CosmicPower - if_effect EFFECT_BULK_UP, AI_CBM_BulkUp - if_effect EFFECT_WATER_SPORT, AI_CBM_WaterSport - if_effect EFFECT_CALM_MIND, AI_CBM_CalmMind - if_effect EFFECT_DRAGON_DANCE, AI_CBM_DragonDance - end - -AI_CBM_Sleep: - get_ability AI_TARGET - if_equal ABILITY_INSOMNIA, Score_Minus10 - if_equal ABILITY_VITAL_SPIRIT, Score_Minus10 - if_status AI_TARGET, STATUS1_ANY, Score_Minus10 - if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 - end - -AI_CBM_Explosion: - if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 - get_ability AI_TARGET - if_equal ABILITY_DAMP, Score_Minus10 - count_usable_party_mons AI_USER - if_not_equal 0, AI_CBM_Explosion_End - count_usable_party_mons AI_TARGET - if_not_equal 0, Score_Minus10 - goto Score_Minus1 - -AI_CBM_Explosion_End: - end - -AI_CBM_Nightmare: - if_status2 AI_TARGET, STATUS2_NIGHTMARE, Score_Minus10 - if_not_status AI_TARGET, STATUS1_SLEEP, Score_Minus8 - end - -AI_CBM_DreamEater: - if_not_status AI_TARGET, STATUS1_SLEEP, Score_Minus8 - if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 - end - -AI_CBM_BellyDrum: - if_hp_less_than AI_USER, 51, Score_Minus10 -AI_CBM_AttackUp: - if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10 - end - -AI_CBM_DefenseUp: - if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus10 - end - -AI_CBM_SpeedUp: - if_stat_level_equal AI_USER, STAT_SPEED, MAX_STAT_STAGE, Score_Minus10 - end - -AI_CBM_SpAtkUp: - if_stat_level_equal AI_USER, STAT_SPATK, MAX_STAT_STAGE, Score_Minus10 - end - -AI_CBM_SpDefUp: - if_stat_level_equal AI_USER, STAT_SPDEF, MAX_STAT_STAGE, Score_Minus10 - end - -AI_CBM_AccUp: - if_stat_level_equal AI_USER, STAT_ACC, MAX_STAT_STAGE, Score_Minus10 - end - -AI_CBM_EvasionUp: - if_stat_level_equal AI_USER, STAT_EVASION, MAX_STAT_STAGE, Score_Minus10 - end - -AI_CBM_AttackDown: - if_stat_level_equal AI_TARGET, STAT_ATK, MIN_STAT_STAGE, Score_Minus10 - get_ability AI_TARGET - if_equal ABILITY_HYPER_CUTTER, Score_Minus10 - goto CheckIfAbilityBlocksStatChange - -AI_CBM_DefenseDown: - if_stat_level_equal AI_TARGET, STAT_DEF, MIN_STAT_STAGE, Score_Minus10 - goto CheckIfAbilityBlocksStatChange - -AI_CBM_SpeedDown: - if_stat_level_equal AI_TARGET, STAT_SPEED, MIN_STAT_STAGE, Score_Minus10 - if_ability AI_TARGET, ABILITY_SPEED_BOOST, Score_Minus10 - goto CheckIfAbilityBlocksStatChange - -AI_CBM_SpAtkDown: - if_stat_level_equal AI_TARGET, STAT_SPATK, MIN_STAT_STAGE, Score_Minus10 - goto CheckIfAbilityBlocksStatChange - -AI_CBM_SpDefDown: - if_stat_level_equal AI_TARGET, STAT_SPDEF, MIN_STAT_STAGE, Score_Minus10 - goto CheckIfAbilityBlocksStatChange - -AI_CBM_AccDown: - if_stat_level_equal AI_TARGET, STAT_ACC, MIN_STAT_STAGE, Score_Minus10 - get_ability AI_TARGET - if_equal ABILITY_KEEN_EYE, Score_Minus10 - goto CheckIfAbilityBlocksStatChange - -AI_CBM_EvasionDown: - if_stat_level_equal AI_TARGET, STAT_EVASION, MIN_STAT_STAGE, Score_Minus10 -CheckIfAbilityBlocksStatChange: - get_ability AI_TARGET - if_equal ABILITY_CLEAR_BODY, Score_Minus10 - if_equal ABILITY_WHITE_SMOKE, Score_Minus10 - end - -AI_CBM_Haze: - if_stat_level_less_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_DEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_SPEED, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_SPDEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_ACC, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_less_than AI_USER, STAT_EVASION, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_ATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_DEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_SPEED, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_SPATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_SPDEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_ACC, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - if_stat_level_more_than AI_TARGET, STAT_EVASION, DEFAULT_STAT_STAGE, AI_CBM_Haze_End - goto Score_Minus10 - -AI_CBM_Haze_End: - end - -AI_CBM_Roar: - count_usable_party_mons AI_TARGET - if_equal 0, Score_Minus10 - get_ability AI_TARGET - if_equal ABILITY_SUCTION_CUPS, Score_Minus10 - end - -AI_CBM_Toxic: - get_target_type1 - if_equal TYPE_STEEL, Score_Minus10 - if_equal TYPE_POISON, Score_Minus10 - get_target_type2 - if_equal TYPE_STEEL, Score_Minus10 - if_equal TYPE_POISON, Score_Minus10 - get_ability AI_TARGET - if_equal ABILITY_IMMUNITY, Score_Minus10 - if_status AI_TARGET, STATUS1_ANY, Score_Minus10 - if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 - end - -AI_CBM_LightScreen: - if_side_affecting AI_USER, SIDE_STATUS_LIGHTSCREEN, Score_Minus8 - end - -AI_CBM_OneHitKO: - if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 - get_ability AI_TARGET - if_equal ABILITY_STURDY, Score_Minus10 - if_level_cond 1, Score_Minus10 - end - -AI_CBM_Magnitude: - get_ability AI_TARGET - if_equal ABILITY_LEVITATE, Score_Minus10 -AI_CBM_HighRiskForDamage: - if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 - get_ability AI_TARGET - if_not_equal ABILITY_WONDER_GUARD, AI_CBM_HighRiskForDamage_End - if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CBM_HighRiskForDamage_End - goto Score_Minus10 - -AI_CBM_HighRiskForDamage_End: - end - -AI_CBM_Mist: - if_side_affecting AI_USER, SIDE_STATUS_MIST, Score_Minus8 - end - -AI_CBM_FocusEnergy: - if_status2 AI_USER, STATUS2_FOCUS_ENERGY, Score_Minus10 - end - -AI_CBM_Confuse: - if_status2 AI_TARGET, STATUS2_CONFUSION, Score_Minus5 - get_ability AI_TARGET - if_equal ABILITY_OWN_TEMPO, Score_Minus10 - if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 - end - -AI_CBM_Reflect: - if_side_affecting AI_USER, SIDE_STATUS_REFLECT, Score_Minus8 - end - -AI_CBM_Paralyze: - if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 - get_ability AI_TARGET - if_equal ABILITY_LIMBER, Score_Minus10 - if_status AI_TARGET, STATUS1_ANY, Score_Minus10 - if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 - end - -AI_CBM_Substitute: - if_status2 AI_USER, STATUS2_SUBSTITUTE, Score_Minus8 - if_hp_less_than AI_USER, 26, Score_Minus10 - end - -AI_CBM_LeechSeed: - if_status3 AI_TARGET, STATUS3_LEECHSEED, Score_Minus10 - get_target_type1 - if_equal TYPE_GRASS, Score_Minus10 - get_target_type2 - if_equal TYPE_GRASS, Score_Minus10 - end - -AI_CBM_Disable: - if_any_move_disabled AI_TARGET, Score_Minus8 - end - -AI_CBM_Encore: - if_any_move_encored AI_TARGET, Score_Minus8 - end - -AI_CBM_DamageDuringSleep: - if_not_status AI_USER, STATUS1_SLEEP, Score_Minus8 - end - -AI_CBM_CantEscape: - if_status2 AI_TARGET, STATUS2_ESCAPE_PREVENTION, Score_Minus10 - end - -AI_CBM_Curse: - if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10 - if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus8 - end - -AI_CBM_Spikes: - if_side_affecting AI_TARGET, SIDE_STATUS_SPIKES, Score_Minus10 - end - -AI_CBM_Foresight: - if_status2 AI_TARGET, STATUS2_FORESIGHT, Score_Minus10 - end - -AI_CBM_PerishSong: - if_status3 AI_TARGET, STATUS3_PERISH_SONG, Score_Minus10 - end - -AI_CBM_Sandstorm: - get_weather - if_equal AI_WEATHER_SANDSTORM, Score_Minus8 - end - -AI_CBM_Attract: - if_status2 AI_TARGET, STATUS2_INFATUATION, Score_Minus10 - get_ability AI_TARGET - if_equal ABILITY_OBLIVIOUS, Score_Minus10 - get_gender AI_USER - if_equal MON_MALE, AI_CBM_Attract_CheckIfTargetIsFemale - if_equal MON_FEMALE, AI_CBM_Attract_CheckIfTargetIsMale - goto Score_Minus10 - -AI_CBM_Attract_CheckIfTargetIsFemale: - get_gender AI_TARGET - if_equal MON_FEMALE, AI_CBM_Attract_End - goto Score_Minus10 - -AI_CBM_Attract_CheckIfTargetIsMale: - get_gender AI_TARGET - if_equal MON_MALE, AI_CBM_Attract_End - goto Score_Minus10 - -AI_CBM_Attract_End: - end - -AI_CBM_Safeguard: - if_side_affecting AI_USER, SIDE_STATUS_SAFEGUARD, Score_Minus8 - end - -AI_CBM_Memento: - if_stat_level_equal AI_TARGET, STAT_ATK, MIN_STAT_STAGE, Score_Minus10 - if_stat_level_equal AI_TARGET, STAT_SPATK, MIN_STAT_STAGE, Score_Minus8 -AI_CBM_BatonPass: - count_usable_party_mons AI_USER - if_equal 0, Score_Minus10 - end - -AI_CBM_RainDance: - get_weather - if_equal AI_WEATHER_RAIN, Score_Minus8 - end - -AI_CBM_SunnyDay: - get_weather - if_equal AI_WEATHER_SUN, Score_Minus8 - end - -AI_CBM_FutureSight: - if_side_affecting AI_TARGET, SIDE_STATUS_FUTUREATTACK, Score_Minus12 - if_side_affecting AI_USER, SIDE_STATUS_FUTUREATTACK, Score_Minus12 - score +5 - end - -AI_CBM_FakeOut: - is_first_turn_for AI_USER - if_equal FALSE, Score_Minus10 - end - -AI_CBM_Stockpile: - get_stockpile_count AI_USER - if_equal 3, Score_Minus10 - end - -AI_CBM_SpitUpAndSwallow: - if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 - get_stockpile_count AI_USER - if_equal 0, Score_Minus10 - end - -AI_CBM_Hail: - get_weather - if_equal AI_WEATHER_HAIL, Score_Minus8 - end - -AI_CBM_Torment: - if_status2 AI_TARGET, STATUS2_TORMENT, Score_Minus10 - end - -AI_CBM_WillOWisp: - get_ability AI_TARGET - if_equal ABILITY_WATER_VEIL, Score_Minus10 - if_status AI_TARGET, STATUS1_ANY, Score_Minus10 - if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, Score_Minus10 - if_type_effectiveness AI_EFFECTIVENESS_x0_25, Score_Minus10 - if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 - end - -AI_CBM_HelpingHand: - if_not_double_battle Score_Minus10 - end - -AI_CBM_TrickAndKnockOff: - get_ability AI_TARGET - if_equal ABILITY_STICKY_HOLD, Score_Minus10 - end - -AI_CBM_Ingrain: - if_status3 AI_USER, STATUS3_ROOTED, Score_Minus10 - end - -AI_CBM_Recycle: - get_used_held_item AI_USER - if_equal ITEM_NONE, Score_Minus10 - end - -AI_CBM_Imprison: - if_status3 AI_USER, STATUS3_IMPRISONED_OTHERS, Score_Minus10 - end - -AI_CBM_Refresh: - if_not_status AI_USER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, Score_Minus10 - end - -AI_CBM_MudSport: - if_status3 AI_USER, STATUS3_MUDSPORT, Score_Minus10 - end - -AI_CBM_Tickle: - if_stat_level_equal AI_TARGET, STAT_ATK, MIN_STAT_STAGE, Score_Minus10 - if_stat_level_equal AI_TARGET, STAT_DEF, MIN_STAT_STAGE, Score_Minus8 - end - -AI_CBM_CosmicPower: - if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus10 - if_stat_level_equal AI_USER, STAT_SPDEF, MAX_STAT_STAGE, Score_Minus8 - end - -AI_CBM_BulkUp: - if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10 - if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus8 - end - -AI_CBM_WaterSport: - if_status3 AI_USER, STATUS3_WATERSPORT, Score_Minus10 - end - -AI_CBM_CalmMind: - if_stat_level_equal AI_USER, STAT_SPATK, MAX_STAT_STAGE, Score_Minus10 - if_stat_level_equal AI_USER, STAT_SPDEF, MAX_STAT_STAGE, Score_Minus8 - end - -AI_CBM_DragonDance: - if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10 - if_stat_level_equal AI_USER, STAT_SPEED, MAX_STAT_STAGE, Score_Minus8 - end - -Score_Minus1: - score -1 - end - -Score_Minus2: - score -2 - end - -Score_Minus3: - score -3 - end - -Score_Minus5: - score -5 - end - -Score_Minus8: - score -8 - end - -Score_Minus10: - score -10 - end - -Score_Minus12: - score -12 - end - -Score_Minus30: - score -30 - end - -Score_Plus1: - score +1 - end - -Score_Plus2: - score +2 - end - -Score_Plus3: - score +3 - end - -Score_Plus5: - score +5 - end - -Score_Plus10: - score +10 - end - -AI_CheckViability: - if_target_is_ally AI_Ret - if_effect EFFECT_SLEEP, AI_CV_Sleep - if_effect EFFECT_ABSORB, AI_CV_Absorb - if_effect EFFECT_EXPLOSION, AI_CV_SelfKO - if_effect EFFECT_DREAM_EATER, AI_CV_DreamEater - if_effect EFFECT_MIRROR_MOVE, AI_CV_MirrorMove - if_effect EFFECT_ATTACK_UP, AI_CV_AttackUp - if_effect EFFECT_DEFENSE_UP, AI_CV_DefenseUp - if_effect EFFECT_SPEED_UP, AI_CV_SpeedUp - if_effect EFFECT_SPECIAL_ATTACK_UP, AI_CV_SpAtkUp - if_effect EFFECT_SPECIAL_DEFENSE_UP, AI_CV_SpDefUp - if_effect EFFECT_ACCURACY_UP, AI_CV_AccuracyUp - if_effect EFFECT_EVASION_UP, AI_CV_EvasionUp - if_effect EFFECT_ALWAYS_HIT, AI_CV_AlwaysHit - if_effect EFFECT_ATTACK_DOWN, AI_CV_AttackDown - if_effect EFFECT_DEFENSE_DOWN, AI_CV_DefenseDown - if_effect EFFECT_SPEED_DOWN, AI_CV_SpeedDown - if_effect EFFECT_SPECIAL_ATTACK_DOWN, AI_CV_SpAtkDown - if_effect EFFECT_SPECIAL_DEFENSE_DOWN, AI_CV_SpDefDown - if_effect EFFECT_ACCURACY_DOWN, AI_CV_AccuracyDown - if_effect EFFECT_EVASION_DOWN, AI_CV_EvasionDown - if_effect EFFECT_HAZE, AI_CV_Haze - if_effect EFFECT_BIDE, AI_CV_Bide - if_effect EFFECT_ROAR, AI_CV_Roar - if_effect EFFECT_CONVERSION, AI_CV_Conversion - if_effect EFFECT_RESTORE_HP, AI_CV_Heal - if_effect EFFECT_TOXIC, AI_CV_Toxic - if_effect EFFECT_LIGHT_SCREEN, AI_CV_LightScreen - if_effect EFFECT_REST, AI_CV_Rest - if_effect EFFECT_OHKO, AI_CV_OneHitKO - if_effect EFFECT_RAZOR_WIND, AI_CV_ChargeUpMove - if_effect EFFECT_SUPER_FANG, AI_CV_SuperFang - if_effect EFFECT_TRAP, AI_CV_Trap - if_effect EFFECT_HIGH_CRITICAL, AI_CV_HighCrit - if_effect EFFECT_CONFUSE, AI_CV_Confuse - if_effect EFFECT_ATTACK_UP_2, AI_CV_AttackUp - if_effect EFFECT_DEFENSE_UP_2, AI_CV_DefenseUp - if_effect EFFECT_SPEED_UP_2, AI_CV_SpeedUp - if_effect EFFECT_SPECIAL_ATTACK_UP_2, AI_CV_SpAtkUp - if_effect EFFECT_SPECIAL_DEFENSE_UP_2, AI_CV_SpDefUp - if_effect EFFECT_ACCURACY_UP_2, AI_CV_AccuracyUp - if_effect EFFECT_EVASION_UP_2, AI_CV_EvasionUp - if_effect EFFECT_ATTACK_DOWN_2, AI_CV_AttackDown - if_effect EFFECT_DEFENSE_DOWN_2, AI_CV_DefenseDown - if_effect EFFECT_SPEED_DOWN_2, AI_CV_SpeedDown - if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, AI_CV_SpAtkDown - if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, AI_CV_SpDefDown - if_effect EFFECT_ACCURACY_DOWN_2, AI_CV_AccuracyDown - if_effect EFFECT_EVASION_DOWN_2, AI_CV_EvasionDown - if_effect EFFECT_REFLECT, AI_CV_Reflect - if_effect EFFECT_POISON, AI_CV_Poison - if_effect EFFECT_PARALYZE, AI_CV_Paralyze - if_effect EFFECT_SWAGGER, AI_CV_Swagger - if_effect EFFECT_SPEED_DOWN_HIT, AI_CV_SpeedDownFromChance - if_effect EFFECT_SKY_ATTACK, AI_CV_ChargeUpMove - if_effect EFFECT_VITAL_THROW, AI_CV_VitalThrow - if_effect EFFECT_SUBSTITUTE, AI_CV_Substitute - if_effect EFFECT_RECHARGE, AI_CV_Recharge - if_effect EFFECT_LEECH_SEED, AI_CV_Toxic - if_effect EFFECT_DISABLE, AI_CV_Disable - if_effect EFFECT_COUNTER, AI_CV_Counter - if_effect EFFECT_ENCORE, AI_CV_Encore - if_effect EFFECT_PAIN_SPLIT, AI_CV_PainSplit - if_effect EFFECT_SNORE, AI_CV_Snore - if_effect EFFECT_LOCK_ON, AI_CV_LockOn - if_effect EFFECT_SLEEP_TALK, AI_CV_SleepTalk - if_effect EFFECT_DESTINY_BOND, AI_CV_DestinyBond - if_effect EFFECT_FLAIL, AI_CV_Flail - if_effect EFFECT_HEAL_BELL, AI_CV_HealBell - if_effect EFFECT_THIEF, AI_CV_Thief - if_effect EFFECT_MEAN_LOOK, AI_CV_Trap - if_effect EFFECT_MINIMIZE, AI_CV_EvasionUp - if_effect EFFECT_CURSE, AI_CV_Curse - if_effect EFFECT_PROTECT, AI_CV_Protect - if_effect EFFECT_FORESIGHT, AI_CV_Foresight - if_effect EFFECT_ENDURE, AI_CV_Endure - if_effect EFFECT_BATON_PASS, AI_CV_BatonPass - if_effect EFFECT_PURSUIT, AI_CV_Pursuit - if_effect EFFECT_MORNING_SUN, AI_CV_HealWeather - if_effect EFFECT_SYNTHESIS, AI_CV_HealWeather - if_effect EFFECT_MOONLIGHT, AI_CV_HealWeather - if_effect EFFECT_RAIN_DANCE, AI_CV_RainDance - if_effect EFFECT_SUNNY_DAY, AI_CV_SunnyDay - if_effect EFFECT_BELLY_DRUM, AI_CV_BellyDrum - if_effect EFFECT_PSYCH_UP, AI_CV_PsychUp - if_effect EFFECT_MIRROR_COAT, AI_CV_MirrorCoat - if_effect EFFECT_SKULL_BASH, AI_CV_ChargeUpMove - if_effect EFFECT_SOLARBEAM, AI_CV_ChargeUpMove - if_effect EFFECT_SEMI_INVULNERABLE, AI_CV_SemiInvulnerable - if_effect EFFECT_SOFTBOILED, AI_CV_Heal - if_effect EFFECT_FAKE_OUT, AI_CV_FakeOut - if_effect EFFECT_SPIT_UP, AI_CV_SpitUp - if_effect EFFECT_SWALLOW, AI_CV_Heal - if_effect EFFECT_HAIL, AI_CV_Hail - if_effect EFFECT_FLATTER, AI_CV_Flatter - if_effect EFFECT_MEMENTO, AI_CV_SelfKO - if_effect EFFECT_FACADE, AI_CV_Facade - if_effect EFFECT_FOCUS_PUNCH, AI_CV_FocusPunch - if_effect EFFECT_SMELLINGSALT, AI_CV_SmellingSalt - if_effect EFFECT_TRICK, AI_CV_Trick - if_effect EFFECT_ROLE_PLAY, AI_CV_ChangeSelfAbility - if_effect EFFECT_SUPERPOWER, AI_CV_Superpower - if_effect EFFECT_MAGIC_COAT, AI_CV_MagicCoat - if_effect EFFECT_RECYCLE, AI_CV_Recycle - if_effect EFFECT_REVENGE, AI_CV_Revenge - if_effect EFFECT_BRICK_BREAK, AI_CV_BrickBreak - if_effect EFFECT_KNOCK_OFF, AI_CV_KnockOff - if_effect EFFECT_ENDEAVOR, AI_CV_Endeavor - if_effect EFFECT_ERUPTION, AI_CV_Eruption - if_effect EFFECT_SKILL_SWAP, AI_CV_ChangeSelfAbility - if_effect EFFECT_IMPRISON, AI_CV_Imprison - if_effect EFFECT_REFRESH, AI_CV_Refresh - if_effect EFFECT_SNATCH, AI_CV_Snatch - if_effect EFFECT_BLAZE_KICK, AI_CV_HighCrit - if_effect EFFECT_MUD_SPORT, AI_CV_MudSport - if_effect EFFECT_OVERHEAT, AI_CV_Overheat - if_effect EFFECT_TICKLE, AI_CV_DefenseDown - if_effect EFFECT_COSMIC_POWER, AI_CV_SpDefUp - if_effect EFFECT_BULK_UP, AI_CV_DefenseUp - if_effect EFFECT_POISON_TAIL, AI_CV_HighCrit - if_effect EFFECT_WATER_SPORT, AI_CV_WaterSport - if_effect EFFECT_CALM_MIND, AI_CV_SpDefUp - if_effect EFFECT_DRAGON_DANCE, AI_CV_DragonDance - end - -AI_CV_Sleep: - if_has_move_with_effect AI_TARGET, EFFECT_DREAM_EATER, AI_CV_SleepEncourageSlpDamage - if_has_move_with_effect AI_TARGET, EFFECT_NIGHTMARE, AI_CV_SleepEncourageSlpDamage - goto AI_CV_Sleep_End - -AI_CV_SleepEncourageSlpDamage: - if_random_less_than 128, AI_CV_Sleep_End - score +1 -AI_CV_Sleep_End: - end - -AI_CV_Absorb: - if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_AbsorbEncourageMaybe - if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_AbsorbEncourageMaybe - goto AI_CV_Absorb_End - -AI_CV_AbsorbEncourageMaybe: - if_random_less_than 50, AI_CV_Absorb_End - score -3 -AI_CV_Absorb_End: - end - -AI_CV_SelfKO: - if_stat_level_less_than AI_TARGET, STAT_EVASION, 7, AI_CV_SelfKO_Encourage1 - score -1 - if_stat_level_less_than AI_TARGET, STAT_EVASION, 10, AI_CV_SelfKO_Encourage1 - if_random_less_than 128, AI_CV_SelfKO_Encourage1 - score -1 -AI_CV_SelfKO_Encourage1: - if_hp_less_than AI_USER, 80, AI_CV_SelfKO_Encourage2 - if_target_faster AI_CV_SelfKO_Encourage2 - if_random_less_than 50, AI_CV_SelfKO_End - goto Score_Minus3 - -AI_CV_SelfKO_Encourage2: - if_hp_more_than AI_USER, 50, AI_CV_SelfKO_Encourage4 - if_random_less_than 128, AI_CV_SelfKO_Encourage3 - score +1 -AI_CV_SelfKO_Encourage3: - if_hp_more_than AI_USER, 30, AI_CV_SelfKO_End - if_random_less_than 50, AI_CV_SelfKO_End - score +1 - goto AI_CV_SelfKO_End - -AI_CV_SelfKO_Encourage4: - if_random_less_than 50, AI_CV_SelfKO_End - score -1 -AI_CV_SelfKO_End: - end - -AI_CV_DreamEater: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_DreamEater_ScoreDown1 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_DreamEater_ScoreDown1 - goto AI_CV_DreamEater_End - -AI_CV_DreamEater_ScoreDown1: - score -1 -AI_CV_DreamEater_End: - end - -AI_CV_MirrorMove: - if_target_faster AI_CV_MirrorMove2 - get_last_used_bank_move AI_TARGET - if_not_in_hwords AI_CV_MirrorMove_EncouragedMovesToMirror, AI_CV_MirrorMove2 - if_random_less_than 128, AI_CV_MirrorMove_End - score +2 - goto AI_CV_MirrorMove_End - -AI_CV_MirrorMove2: - get_last_used_bank_move AI_TARGET - if_in_hwords AI_CV_MirrorMove_EncouragedMovesToMirror, AI_CV_MirrorMove_End - if_random_less_than 80, AI_CV_MirrorMove_End - score -1 -AI_CV_MirrorMove_End: - end - -AI_CV_MirrorMove_EncouragedMovesToMirror: - .2byte MOVE_SLEEP_POWDER - .2byte MOVE_LOVELY_KISS - .2byte MOVE_SPORE - .2byte MOVE_HYPNOSIS - .2byte MOVE_SING - .2byte MOVE_GRASS_WHISTLE - .2byte MOVE_SHADOW_PUNCH - .2byte MOVE_SAND_ATTACK - .2byte MOVE_SMOKESCREEN - .2byte MOVE_TOXIC - .2byte MOVE_GUILLOTINE - .2byte MOVE_HORN_DRILL - .2byte MOVE_FISSURE - .2byte MOVE_SHEER_COLD - .2byte MOVE_CROSS_CHOP - .2byte MOVE_AEROBLAST - .2byte MOVE_CONFUSE_RAY - .2byte MOVE_SWEET_KISS - .2byte MOVE_SCREECH - .2byte MOVE_COTTON_SPORE - .2byte MOVE_SCARY_FACE - .2byte MOVE_FAKE_TEARS - .2byte MOVE_METAL_SOUND - .2byte MOVE_THUNDER_WAVE - .2byte MOVE_GLARE - .2byte MOVE_POISON_POWDER - .2byte MOVE_SHADOW_BALL - .2byte MOVE_DYNAMIC_PUNCH - .2byte MOVE_HYPER_BEAM - .2byte MOVE_EXTREME_SPEED - .2byte MOVE_THIEF - .2byte MOVE_COVET - .2byte MOVE_ATTRACT - .2byte MOVE_SWAGGER - .2byte MOVE_TORMENT - .2byte MOVE_FLATTER - .2byte MOVE_TRICK - .2byte MOVE_SUPERPOWER - .2byte MOVE_SKILL_SWAP - .2byte -1 - -AI_CV_AttackUp: - if_stat_level_less_than AI_USER, STAT_ATK, 9, AI_CV_AttackUp2 - if_random_less_than 100, AI_CV_AttackUp3 - score -1 - goto AI_CV_AttackUp3 - -AI_CV_AttackUp2: - if_hp_not_equal AI_USER, 100, AI_CV_AttackUp3 - if_random_less_than 128, AI_CV_AttackUp3 - score +2 -AI_CV_AttackUp3: - if_hp_more_than AI_USER, 70, AI_CV_AttackUp_End - if_hp_less_than AI_USER, 40, AI_CV_AttackUp_ScoreDown2 - if_random_less_than 40, AI_CV_AttackUp_End -AI_CV_AttackUp_ScoreDown2: - score -2 -AI_CV_AttackUp_End: - end - -AI_CV_DefenseUp: - if_stat_level_less_than AI_USER, STAT_DEF, 9, AI_CV_DefenseUp2 - if_random_less_than 100, AI_CV_DefenseUp3 - score -1 - goto AI_CV_DefenseUp3 - -AI_CV_DefenseUp2: - if_hp_not_equal AI_USER, 100, AI_CV_DefenseUp3 - if_random_less_than 128, AI_CV_DefenseUp3 - score +2 -AI_CV_DefenseUp3: - if_hp_less_than AI_USER, 70, AI_CV_DefenseUp4 - if_random_less_than 200, AI_CV_DefenseUp_End -AI_CV_DefenseUp4: - if_hp_less_than AI_USER, 40, AI_CV_DefenseUp_ScoreDown2 - get_last_used_bank_move AI_TARGET - get_move_power_from_result - if_equal 0, AI_CV_DefenseUp5 - get_last_used_bank_move AI_TARGET - get_move_type_from_result - if_not_in_bytes AI_CV_DefenseUp_PhysicalTypes, AI_CV_DefenseUp_ScoreDown2 - if_random_less_than 60, AI_CV_DefenseUp_End -AI_CV_DefenseUp5: - if_random_less_than 60, AI_CV_DefenseUp_End -AI_CV_DefenseUp_ScoreDown2: - score -2 -AI_CV_DefenseUp_End: - end - -AI_CV_DefenseUp_PhysicalTypes: - .byte TYPE_NORMAL - .byte TYPE_FIGHTING - .byte TYPE_POISON - .byte TYPE_GROUND - .byte TYPE_FLYING - .byte TYPE_ROCK - .byte TYPE_BUG - .byte TYPE_GHOST - .byte TYPE_STEEL - .byte -1 - -AI_CV_SpeedUp: - if_target_faster AI_CV_SpeedUp2 - score -3 - goto AI_CV_SpeedUp_End - -AI_CV_SpeedUp2: - if_random_less_than 70, AI_CV_SpeedUp_End - score +3 -AI_CV_SpeedUp_End: - end - -AI_CV_SpAtkUp: - if_stat_level_less_than AI_USER, STAT_SPATK, 9, AI_CV_SpAtkUp2 - if_random_less_than 100, AI_CV_SpAtkUp3 - score -1 - goto AI_CV_SpAtkUp3 - -AI_CV_SpAtkUp2: - if_hp_not_equal AI_USER, 100, AI_CV_SpAtkUp3 - if_random_less_than 128, AI_CV_SpAtkUp3 - score +2 -AI_CV_SpAtkUp3: - if_hp_more_than AI_USER, 70, AI_CV_SpAtkUp_End - if_hp_less_than AI_USER, 40, AI_CV_SpAtkUp_ScoreDown2 - if_random_less_than 70, AI_CV_SpAtkUp_End -AI_CV_SpAtkUp_ScoreDown2: - score -2 -AI_CV_SpAtkUp_End: - end - -AI_CV_SpDefUp: - if_stat_level_less_than AI_USER, STAT_SPDEF, 9, AI_CV_SpDefUp2 - if_random_less_than 100, AI_CV_SpDefUp3 - score -1 - goto AI_CV_SpDefUp3 - -AI_CV_SpDefUp2: - if_hp_not_equal AI_USER, 100, AI_CV_SpDefUp3 - if_random_less_than 128, AI_CV_SpDefUp3 - score +2 -AI_CV_SpDefUp3: - if_hp_less_than AI_USER, 70, AI_CV_SpDefUp4 - if_random_less_than 200, AI_CV_SpDefUp_End -AI_CV_SpDefUp4: - if_hp_less_than AI_USER, 40, AI_CV_SpDefUp_ScoreDown2 - get_last_used_bank_move AI_TARGET - get_move_power_from_result - if_equal 0, AI_CV_SpDefUp5 - get_last_used_bank_move AI_TARGET - get_move_type_from_result - if_in_bytes AI_CV_SpDefUp_PhysicalTypes, AI_CV_SpDefUp_ScoreDown2 - if_random_less_than 60, AI_CV_SpDefUp_End -AI_CV_SpDefUp5: - if_random_less_than 60, AI_CV_SpDefUp_End -AI_CV_SpDefUp_ScoreDown2: - score -2 -AI_CV_SpDefUp_End: - end - -AI_CV_SpDefUp_PhysicalTypes: - .byte TYPE_NORMAL - .byte TYPE_FIGHTING - .byte TYPE_POISON - .byte TYPE_GROUND - .byte TYPE_FLYING - .byte TYPE_ROCK - .byte TYPE_BUG - .byte TYPE_GHOST - .byte TYPE_STEEL - .byte -1 - -AI_CV_AccuracyUp: - if_stat_level_less_than AI_USER, STAT_ACC, 9, AI_CV_AccuracyUp2 - if_random_less_than 50, AI_CV_AccuracyUp2 - score -2 -AI_CV_AccuracyUp2: - if_hp_more_than AI_USER, 70, AI_CV_AccuracyUp_End - score -2 -AI_CV_AccuracyUp_End: - end - -AI_CV_EvasionUp: - if_hp_less_than AI_USER, 90, AI_CV_EvasionUp2 - if_random_less_than 100, AI_CV_EvasionUp2 - score +3 -AI_CV_EvasionUp2: - if_stat_level_less_than AI_USER, STAT_EVASION, 9, AI_CV_EvasionUp3 - if_random_less_than 128, AI_CV_EvasionUp3 - score -1 -AI_CV_EvasionUp3: - if_not_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_EvasionUp5 - if_hp_more_than AI_USER, 50, AI_CV_EvasionUp4 - if_random_less_than 80, AI_CV_EvasionUp5 -AI_CV_EvasionUp4: - if_random_less_than 50, AI_CV_EvasionUp5 - score +3 -AI_CV_EvasionUp5: - if_not_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_EvasionUp6 - if_random_less_than 70, AI_CV_EvasionUp6 - score +3 -AI_CV_EvasionUp6: - if_not_status3 AI_USER, STATUS3_ROOTED, AI_CV_EvasionUp7 - if_random_less_than 128, AI_CV_EvasionUp7 - score +2 -AI_CV_EvasionUp7: - if_not_status2 AI_TARGET, STATUS2_CURSED, AI_CV_EvasionUp8 - if_random_less_than 70, AI_CV_EvasionUp8 - score +3 -AI_CV_EvasionUp8: - if_hp_more_than AI_USER, 70, AI_CV_EvasionUp_End - if_stat_level_equal AI_USER, STAT_EVASION, DEFAULT_STAT_STAGE, AI_CV_EvasionUp_End - if_hp_less_than AI_USER, 40, AI_CV_EvasionUp_ScoreDown2 - if_hp_less_than AI_TARGET, 40, AI_CV_EvasionUp_ScoreDown2 - if_random_less_than 70, AI_CV_EvasionUp_End -AI_CV_EvasionUp_ScoreDown2: - score -2 -AI_CV_EvasionUp_End: - end - -AI_CV_AlwaysHit: - if_stat_level_more_than AI_TARGET, STAT_EVASION, 10, AI_CV_AlwaysHit_ScoreUp1 - if_stat_level_less_than AI_USER, STAT_ACC, 2, AI_CV_AlwaysHit_ScoreUp1 - if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_AlwaysHit2 - if_stat_level_less_than AI_USER, STAT_ACC, 4, AI_CV_AlwaysHit2 - goto AI_CV_AlwaysHit_End - -AI_CV_AlwaysHit_ScoreUp1: - score +1 -AI_CV_AlwaysHit2: - if_random_less_than 100, AI_CV_AlwaysHit_End - score +1 -AI_CV_AlwaysHit_End: - end - -AI_CV_AttackDown: - if_stat_level_equal AI_TARGET, STAT_ATK, DEFAULT_STAT_STAGE, AI_CV_AttackDown3 - score -1 - if_hp_more_than AI_USER, 90, AI_CV_AttackDown2 - score -1 -AI_CV_AttackDown2: - if_stat_level_more_than AI_TARGET, STAT_ATK, 3, AI_CV_AttackDown3 - if_random_less_than 50, AI_CV_AttackDown3 - score -2 -AI_CV_AttackDown3: - if_hp_more_than AI_TARGET, 70, AI_CV_AttackDown4 - score -2 -AI_CV_AttackDown4: - get_target_type1 - if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End - get_target_type2 - if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End - if_random_less_than 50, AI_CV_AttackDown_End - score -2 -AI_CV_AttackDown_End: - end - -AI_CV_AttackDown_UnknownTypeList: - .byte TYPE_NORMAL - .byte TYPE_FIGHTING - .byte TYPE_GROUND - .byte TYPE_ROCK - .byte TYPE_BUG - .byte TYPE_STEEL - .byte -1 - -AI_CV_DefenseDown: - if_hp_less_than AI_USER, 70, AI_CV_DefenseDown2 - if_stat_level_more_than AI_TARGET, STAT_DEF, 3, AI_CV_DefenseDown3 -AI_CV_DefenseDown2: - if_random_less_than 50, AI_CV_DefenseDown3 - score -2 -AI_CV_DefenseDown3: - if_hp_more_than AI_TARGET, 70, AI_CV_DefenseDown_End - score -2 -AI_CV_DefenseDown_End: - end - -AI_CV_SpeedDownFromChance: - if_move MOVE_ICY_WIND, AI_CV_SpeedDown - if_move MOVE_ROCK_TOMB, AI_CV_SpeedDown - if_move MOVE_MUD_SHOT, AI_CV_SpeedDown - end - -AI_CV_SpeedDown: - if_target_faster AI_CV_SpeedDown2 - score -3 - goto AI_CV_SpeedDown_End - -AI_CV_SpeedDown2: - if_random_less_than 70, AI_CV_SpeedDown_End - score +2 -AI_CV_SpeedDown_End: - end - -AI_CV_SpAtkDown: - if_stat_level_equal AI_TARGET, STAT_ATK, DEFAULT_STAT_STAGE, AI_CV_SpAtkDown3 - score -1 - if_hp_more_than AI_USER, 90, AI_CV_SpAtkDown2 - score -1 -AI_CV_SpAtkDown2: - if_stat_level_more_than AI_TARGET, STAT_SPATK, 3, AI_CV_SpAtkDown3 - if_random_less_than 50, AI_CV_SpAtkDown3 - score -2 -AI_CV_SpAtkDown3: - if_hp_more_than AI_TARGET, 70, AI_CV_SpAtkDown4 - score -2 -AI_CV_SpAtkDown4: - get_target_type1 - if_in_bytes AI_CV_SpAtkDown_SpecialTypeList, AI_CV_SpAtkDown_End - get_target_type2 - if_in_bytes AI_CV_SpAtkDown_SpecialTypeList, AI_CV_SpAtkDown_End - if_random_less_than 50, AI_CV_SpAtkDown_End - score -2 -AI_CV_SpAtkDown_End: - end - -AI_CV_SpAtkDown_SpecialTypeList: - .byte TYPE_FIRE - .byte TYPE_WATER - .byte TYPE_GRASS - .byte TYPE_ELECTRIC - .byte TYPE_PSYCHIC - .byte TYPE_ICE - .byte TYPE_DRAGON - .byte TYPE_DARK - .byte -1 - -AI_CV_SpDefDown: - if_hp_less_than AI_USER, 70, AI_CV_SpDefDown2 - if_stat_level_more_than AI_TARGET, STAT_SPDEF, 3, AI_CV_SpDefDown3 -AI_CV_SpDefDown2: - if_random_less_than 50, AI_CV_SpDefDown3 - score -2 -AI_CV_SpDefDown3: - if_hp_more_than AI_TARGET, 70, AI_CV_SpDefDown_End - score -2 -AI_CV_SpDefDown_End: - end - -AI_CV_AccuracyDown: - if_hp_less_than AI_USER, 70, AI_CV_AccuracyDown2 - if_hp_more_than AI_TARGET, 70, AI_CV_AccuracyDown3 -AI_CV_AccuracyDown2: - if_random_less_than 100, AI_CV_AccuracyDown3 - score -1 -AI_CV_AccuracyDown3: - if_stat_level_more_than AI_USER, STAT_ACC, 4, AI_CV_AccuracyDown4 - if_random_less_than 80, AI_CV_AccuracyDown4 - score -2 -AI_CV_AccuracyDown4: - if_not_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_AccuracyDown5 - if_random_less_than 70, AI_CV_AccuracyDown5 - score +2 -AI_CV_AccuracyDown5: - if_not_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_AccuracyDown6 - if_random_less_than 70, AI_CV_AccuracyDown6 - score +2 -AI_CV_AccuracyDown6: - if_not_status3 AI_USER, STATUS3_ROOTED, AI_CV_AccuracyDown7 - if_random_less_than 128, AI_CV_AccuracyDown7 - score +1 -AI_CV_AccuracyDown7: - if_not_status2 AI_TARGET, STATUS2_CURSED, AI_CV_AccuracyDown8 - if_random_less_than 70, AI_CV_AccuracyDown8 - score +2 -AI_CV_AccuracyDown8: - if_hp_more_than AI_USER, 70, AI_CV_AccuracyDown_End - if_stat_level_equal AI_TARGET, STAT_ACC, DEFAULT_STAT_STAGE, AI_CV_AccuracyDown_End - if_hp_less_than AI_USER, 40, AI_CV_AccuracyDown_ScoreDown2 - if_hp_less_than AI_TARGET, 40, AI_CV_AccuracyDown_ScoreDown2 - if_random_less_than 70, AI_CV_AccuracyDown_End -AI_CV_AccuracyDown_ScoreDown2: - score -2 -AI_CV_AccuracyDown_End: - end - -AI_CV_EvasionDown: - if_hp_less_than AI_USER, 70, AI_CV_EvasionDown2 - if_stat_level_more_than AI_TARGET, STAT_EVASION, 3, AI_CV_EvasionDown3 -AI_CV_EvasionDown2: - if_random_less_than 50, AI_CV_EvasionDown3 - score -2 -AI_CV_EvasionDown3: - if_hp_more_than AI_TARGET, 70, AI_CV_EvasionDown_End - score -2 -AI_CV_EvasionDown_End: - end - -AI_CV_Haze: - if_stat_level_more_than AI_USER, STAT_ATK, 8, AI_CV_Haze2 - if_stat_level_more_than AI_USER, STAT_DEF, 8, AI_CV_Haze2 - if_stat_level_more_than AI_USER, STAT_SPATK, 8, AI_CV_Haze2 - if_stat_level_more_than AI_USER, STAT_SPDEF, 8, AI_CV_Haze2 - if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_Haze2 - if_stat_level_less_than AI_TARGET, STAT_ATK, 4, AI_CV_Haze2 - if_stat_level_less_than AI_TARGET, STAT_DEF, 4, AI_CV_Haze2 - if_stat_level_less_than AI_TARGET, STAT_SPATK, 4, AI_CV_Haze2 - if_stat_level_less_than AI_TARGET, STAT_SPDEF, 4, AI_CV_Haze2 - if_stat_level_less_than AI_TARGET, STAT_ACC, 4, AI_CV_Haze2 - goto AI_CV_Haze3 - -AI_CV_Haze2: - if_random_less_than 50, AI_CV_Haze3 - score -3 -AI_CV_Haze3: - if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_Haze4 - if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_Haze4 - if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_Haze4 - if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_Haze4 - if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Haze4 - if_stat_level_less_than AI_USER, STAT_ATK, 4, AI_CV_Haze4 - if_stat_level_less_than AI_USER, STAT_DEF, 4, AI_CV_Haze4 - if_stat_level_less_than AI_USER, STAT_SPATK, 4, AI_CV_Haze4 - if_stat_level_less_than AI_USER, STAT_SPDEF, 4, AI_CV_Haze4 - if_stat_level_less_than AI_USER, STAT_ACC, 4, AI_CV_Haze4 - if_random_less_than 50, AI_CV_Haze_End - score -1 - goto AI_CV_Haze_End - -AI_CV_Haze4: - if_random_less_than 50, AI_CV_Haze_End - score +3 -AI_CV_Haze_End: - end - -AI_CV_Bide: - if_hp_more_than AI_USER, 90, AI_CV_Bide_End - score -2 -AI_CV_Bide_End: - end - -AI_CV_Roar: - if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_Roar2 - if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_Roar2 - if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_Roar2 - if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_Roar2 - if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Roar2 - score -3 - goto AI_CV_Roar_End - -AI_CV_Roar2: - if_random_less_than 128, AI_CV_Roar_End - score +2 -AI_CV_Roar_End: - end - -AI_CV_Conversion: - if_hp_more_than AI_USER, 90, AI_CV_Conversion2 - score -2 -AI_CV_Conversion2: - get_turn_count - if_equal 0, AI_CV_Conversion_End - if_random_less_than 200, Score_Minus2 -AI_CV_Conversion_End: - end - -AI_CV_HealWeather: - get_weather - if_equal AI_WEATHER_HAIL, AI_CV_HealWeather_ScoreDown2 - if_equal AI_WEATHER_RAIN, AI_CV_HealWeather_ScoreDown2 - if_equal AI_WEATHER_SANDSTORM, AI_CV_HealWeather_ScoreDown2 - goto AI_CV_Heal - -AI_CV_HealWeather_ScoreDown2: - score -2 -AI_CV_Heal: - if_hp_equal AI_USER, 100, AI_CV_Heal3 - if_target_faster AI_CV_Heal4 - score -8 - goto AI_CV_Heal_End - -AI_CV_Heal2: - if_hp_less_than AI_USER, 50, AI_CV_Heal5 - if_hp_more_than AI_USER, 80, AI_CV_Heal3 - if_random_less_than 70, AI_CV_Heal5 -AI_CV_Heal3: - score -3 - goto AI_CV_Heal_End - -AI_CV_Heal4: - if_hp_less_than AI_USER, 70, AI_CV_Heal5 - if_random_less_than 30, AI_CV_Heal5 - score -3 - goto AI_CV_Heal_End - -AI_CV_Heal5: - if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, AI_CV_Heal6 - if_random_less_than 100, AI_CV_Heal_End -AI_CV_Heal6: - if_random_less_than 20, AI_CV_Heal_End - score +2 -AI_CV_Heal_End: - end - -AI_CV_Toxic: - if_user_has_no_attacking_moves AI_CV_Toxic3 - if_hp_more_than AI_USER, 50, AI_CV_Toxic2 - if_random_less_than 50, AI_CV_Toxic2 - score -3 -AI_CV_Toxic2: - if_hp_more_than AI_TARGET, 50, AI_CV_Toxic3 - if_random_less_than 50, AI_CV_Toxic3 - score -3 -AI_CV_Toxic3: - if_has_move_with_effect AI_USER, EFFECT_SPECIAL_DEFENSE_UP, AI_CV_Toxic4 - if_has_move_with_effect AI_USER, EFFECT_PROTECT, AI_CV_Toxic4 - goto AI_CV_Toxic_End - -AI_CV_Toxic4: - if_random_less_than 60, AI_CV_Toxic_End - score +2 -AI_CV_Toxic_End: - end - -AI_CV_LightScreen: - if_hp_less_than AI_USER, 50, AI_CV_LightScreen_ScoreDown2 - get_target_type1 - if_in_bytes AI_CV_LightScreen_SpecialTypeList, AI_CV_LightScreen_End - get_target_type2 - if_in_bytes AI_CV_LightScreen_SpecialTypeList, AI_CV_LightScreen_End - if_random_less_than 50, AI_CV_LightScreen_End -AI_CV_LightScreen_ScoreDown2: - score -2 -AI_CV_LightScreen_End: - end - -AI_CV_LightScreen_SpecialTypeList: - .byte TYPE_FIRE - .byte TYPE_WATER - .byte TYPE_GRASS - .byte TYPE_ELECTRIC - .byte TYPE_PSYCHIC - .byte TYPE_ICE - .byte TYPE_DRAGON - .byte TYPE_DARK - .byte -1 - -AI_CV_Rest: - if_target_faster AI_CV_Rest4 - if_hp_not_equal AI_USER, 100, AI_CV_Rest2 - score -8 - goto AI_CV_Rest_End - -AI_CV_Rest2: - if_hp_less_than AI_USER, 40, AI_CV_Rest6 - if_hp_more_than AI_USER, 50, AI_CV_Rest3 - if_random_less_than 70, AI_CV_Rest6 -AI_CV_Rest3: - score -3 - goto AI_CV_Rest_End - -AI_CV_Rest4: - if_hp_less_than AI_USER, 60, AI_CV_Rest6 - if_hp_more_than AI_USER, 70, AI_CV_Rest5 - if_random_less_than 50, AI_CV_Rest6 -AI_CV_Rest5: - score -3 - goto AI_CV_Rest_End - -AI_CV_Rest6: - if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, AI_CV_Rest7 - if_random_less_than 50, AI_CV_Rest_End -AI_CV_Rest7: - if_random_less_than 10, AI_CV_Rest_End - score +3 -AI_CV_Rest_End: - end - -AI_CV_OneHitKO: - end - -AI_CV_SuperFang: - if_hp_more_than AI_TARGET, 50, AI_CV_SuperFang_End - score -1 -AI_CV_SuperFang_End: - end - -AI_CV_Trap: - if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_Trap2 - if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_Trap2 - if_status3 AI_TARGET, STATUS3_PERISH_SONG, AI_CV_Trap2 - if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Trap2 - goto AI_CV_Trap_End - -AI_CV_Trap2: - if_random_less_than 128, AI_CV_Trap_End - score +1 -AI_CV_Trap_End: - end - -AI_CV_HighCrit: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_HighCrit_End - if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_HighCrit_End - if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CV_HighCrit2 - if_type_effectiveness AI_EFFECTIVENESS_x4, AI_CV_HighCrit2 - if_random_less_than 128, AI_CV_HighCrit_End - -AI_CV_HighCrit2: - if_random_less_than 128, AI_CV_HighCrit_End - score +1 -AI_CV_HighCrit_End: - end - -AI_CV_Swagger: - if_has_move AI_USER, MOVE_PSYCH_UP, AI_CV_SwaggerHasPsychUp -AI_CV_Flatter: - if_random_less_than 128, AI_CV_Confuse - score +1 -AI_CV_Confuse: - if_hp_more_than AI_TARGET, 70, AI_CV_Confuse_End - if_random_less_than 128, AI_CV_Confuse2 - score -1 -AI_CV_Confuse2: - if_hp_more_than AI_TARGET, 50, AI_CV_Confuse_End - score -1 - if_hp_more_than AI_TARGET, 30, AI_CV_Confuse_End - score -1 -AI_CV_Confuse_End: - end - -AI_CV_SwaggerHasPsychUp: - if_stat_level_more_than AI_TARGET, STAT_ATK, 3, AI_CV_SwaggerHasPsychUp_Minus5 - score +3 - get_turn_count - if_not_equal 0, AI_CV_SwaggerHasPsychUp_End - score +2 - goto AI_CV_SwaggerHasPsychUp_End - -AI_CV_SwaggerHasPsychUp_Minus5: - score -5 -AI_CV_SwaggerHasPsychUp_End: - end - -AI_CV_Reflect: - if_hp_less_than AI_USER, 50, AI_CV_Reflect_ScoreDown2 - get_target_type1 - if_in_bytes AI_CV_Reflect_PhysicalTypeList, AI_CV_Reflect_End - get_target_type2 - if_in_bytes AI_CV_Reflect_PhysicalTypeList, AI_CV_Reflect_End - if_random_less_than 50, AI_CV_Reflect_End -AI_CV_Reflect_ScoreDown2: - score -2 -AI_CV_Reflect_End: - end - -AI_CV_Reflect_PhysicalTypeList: - .byte TYPE_NORMAL - .byte TYPE_FIGHTING - .byte TYPE_FLYING - .byte TYPE_POISON - .byte TYPE_GROUND - .byte TYPE_ROCK - .byte TYPE_BUG - .byte TYPE_GHOST - .byte TYPE_STEEL - .byte -1 - -AI_CV_Poison: - if_hp_less_than AI_USER, 50, AI_CV_Poison_ScoreDown1 - if_hp_more_than AI_TARGET, 50, AI_CV_Poison_End -AI_CV_Poison_ScoreDown1: - score -1 -AI_CV_Poison_End: - end - -AI_CV_Paralyze: - if_target_faster AI_CV_Paralyze2 - if_hp_more_than AI_USER, 70, AI_CV_Paralyze_End - score -1 - goto AI_CV_Paralyze_End - -AI_CV_Paralyze2: - if_random_less_than 20, AI_CV_Paralyze_End - score +3 -AI_CV_Paralyze_End: - end - -AI_CV_VitalThrow: - if_target_faster AI_CV_VitalThrow_End - if_hp_more_than AI_USER, 60, AI_CV_VitalThrow_End - if_hp_less_than AI_USER, 40, AI_CV_VitalThrow2 - if_random_less_than 180, AI_CV_VitalThrow_End -AI_CV_VitalThrow2: - if_random_less_than 50, AI_CV_VitalThrow_End - score -1 -AI_CV_VitalThrow_End: - end - -AI_CV_Substitute: - if_hp_more_than AI_USER, 90, AI_CV_Substitute4 - if_hp_more_than AI_USER, 70, AI_CV_Substitute3 - if_hp_more_than AI_USER, 50, AI_CV_Substitute2 - if_random_less_than 100, AI_CV_Substitute2 - score -1 -AI_CV_Substitute2: - if_random_less_than 100, AI_CV_Substitute3 - score -1 -AI_CV_Substitute3: - if_random_less_than 100, AI_CV_Substitute4 - score -1 -AI_CV_Substitute4: - if_target_faster AI_CV_Substitute_End - get_last_used_bank_move AI_TARGET - get_move_effect_from_result - if_equal EFFECT_SLEEP, AI_CV_Substitute5 - if_equal EFFECT_TOXIC, AI_CV_Substitute5 - if_equal EFFECT_POISON, AI_CV_Substitute5 - if_equal EFFECT_PARALYZE, AI_CV_Substitute5 - if_equal EFFECT_WILL_O_WISP, AI_CV_Substitute5 - if_equal EFFECT_CONFUSE, AI_CV_Substitute6 - if_equal EFFECT_LEECH_SEED, AI_CV_Substitute7 - goto AI_CV_Substitute_End - -AI_CV_Substitute5: - if_not_status AI_TARGET, STATUS1_ANY, AI_CV_Substitute8 - goto AI_CV_Substitute_End - -AI_CV_Substitute6: - if_not_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Substitute8 - goto AI_CV_Substitute_End - -AI_CV_Substitute7: - if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Substitute_End -AI_CV_Substitute8: - if_random_less_than 100, AI_CV_Substitute_End - score +1 -AI_CV_Substitute_End: - end - -AI_CV_Recharge: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Recharge_ScoreDown1 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Recharge_ScoreDown1 - if_target_faster AI_CV_Recharge2 - if_hp_more_than AI_USER, 40, AI_CV_Recharge_ScoreDown1 - goto AI_CV_Recharge_End - -AI_CV_Recharge2: - if_hp_less_than AI_USER, 60, AI_CV_Recharge_End -AI_CV_Recharge_ScoreDown1: - score -1 -AI_CV_Recharge_End: - end - -AI_CV_Disable: - if_target_faster AI_CV_Disable_End - get_last_used_bank_move AI_TARGET - get_move_power_from_result - if_equal 0, AI_CV_Disable2 - score +1 - goto AI_CV_Disable_End - -AI_CV_Disable2: - if_random_less_than 100, AI_CV_Disable_End - score -1 -AI_CV_Disable_End: - end - -AI_CV_Counter: - if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Counter_ScoreDown1 - if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Counter_ScoreDown1 - if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Counter_ScoreDown1 - if_hp_more_than AI_USER, 30, AI_CV_Counter2 - if_random_less_than 10, AI_CV_Counter2 - score -1 -AI_CV_Counter2: - if_hp_more_than AI_USER, 50, AI_CV_Counter3 - if_random_less_than 100, AI_CV_Counter3 - score -1 -AI_CV_Counter3: - if_has_move AI_USER, MOVE_MIRROR_COAT, AI_CV_Counter7 - get_last_used_bank_move AI_TARGET - get_move_power_from_result - if_equal 0, AI_CV_Counter5 - if_target_not_taunted AI_CV_Counter4 - if_random_less_than 100, AI_CV_Counter4 - score +1 -AI_CV_Counter4: - get_last_used_bank_move AI_TARGET - get_move_type_from_result - if_not_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_ScoreDown1 - if_random_less_than 100, AI_CV_Counter_End - score +1 - goto AI_CV_Counter_End - -AI_CV_Counter5: - if_target_not_taunted AI_CV_Counter6 - if_random_less_than 100, AI_CV_Counter6 - score +1 -AI_CV_Counter6: - get_target_type1 - if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End - get_target_type2 - if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End - if_random_less_than 50, AI_CV_Counter_End -AI_CV_Counter7: - if_random_less_than 100, AI_CV_Counter8 - score +4 -AI_CV_Counter8: - end - -AI_CV_Counter_ScoreDown1: - score -1 -AI_CV_Counter_End: - end - -AI_CV_Counter_PhysicalTypeList: - .byte TYPE_NORMAL - .byte TYPE_FIGHTING - .byte TYPE_FLYING - .byte TYPE_POISON - .byte TYPE_GROUND - .byte TYPE_ROCK - .byte TYPE_BUG - .byte TYPE_GHOST - .byte TYPE_STEEL - .byte -1 - -AI_CV_Encore: - if_any_move_disabled AI_TARGET, AI_CV_Encore2 - if_target_faster AI_CV_Encore_ScoreDown2 - get_last_used_bank_move AI_TARGET - get_move_effect_from_result - if_not_in_bytes AI_CV_Encore_EncouragedMovesToEncore, AI_CV_Encore_ScoreDown2 -AI_CV_Encore2: - if_random_less_than 30, AI_CV_Encore_End - score +3 - goto AI_CV_Encore_End - -AI_CV_Encore_ScoreDown2: - score -2 -AI_CV_Encore_End: - end - -AI_CV_Encore_EncouragedMovesToEncore: - .byte EFFECT_DREAM_EATER - .byte EFFECT_ATTACK_UP - .byte EFFECT_DEFENSE_UP - .byte EFFECT_SPEED_UP - .byte EFFECT_SPECIAL_ATTACK_UP - .byte EFFECT_HAZE - .byte EFFECT_ROAR - .byte EFFECT_CONVERSION - .byte EFFECT_TOXIC - .byte EFFECT_LIGHT_SCREEN - .byte EFFECT_REST - .byte EFFECT_SUPER_FANG - .byte EFFECT_SPECIAL_DEFENSE_UP_2 - .byte EFFECT_CONFUSE - .byte EFFECT_POISON - .byte EFFECT_PARALYZE - .byte EFFECT_LEECH_SEED - .byte EFFECT_SPLASH - .byte EFFECT_ATTACK_UP_2 - .byte EFFECT_ENCORE - .byte EFFECT_CONVERSION_2 - .byte EFFECT_LOCK_ON - .byte EFFECT_HEAL_BELL - .byte EFFECT_MEAN_LOOK - .byte EFFECT_NIGHTMARE - .byte EFFECT_PROTECT - .byte EFFECT_SKILL_SWAP - .byte EFFECT_FORESIGHT - .byte EFFECT_PERISH_SONG - .byte EFFECT_SANDSTORM - .byte EFFECT_ENDURE - .byte EFFECT_SWAGGER - .byte EFFECT_ATTRACT - .byte EFFECT_SAFEGUARD - .byte EFFECT_RAIN_DANCE - .byte EFFECT_SUNNY_DAY - .byte EFFECT_BELLY_DRUM - .byte EFFECT_PSYCH_UP - .byte EFFECT_FUTURE_SIGHT - .byte EFFECT_FAKE_OUT - .byte EFFECT_STOCKPILE - .byte EFFECT_SPIT_UP - .byte EFFECT_SWALLOW - .byte EFFECT_HAIL - .byte EFFECT_TORMENT - .byte EFFECT_WILL_O_WISP - .byte EFFECT_FOLLOW_ME - .byte EFFECT_CHARGE - .byte EFFECT_TRICK - .byte EFFECT_ROLE_PLAY - .byte EFFECT_INGRAIN - .byte EFFECT_RECYCLE - .byte EFFECT_KNOCK_OFF - .byte EFFECT_SKILL_SWAP - .byte EFFECT_IMPRISON - .byte EFFECT_REFRESH - .byte EFFECT_GRUDGE - .byte EFFECT_TEETER_DANCE - .byte EFFECT_MUD_SPORT - .byte EFFECT_WATER_SPORT - .byte EFFECT_DRAGON_DANCE - .byte EFFECT_CAMOUFLAGE - .byte -1 - -AI_CV_PainSplit: - if_hp_less_than AI_TARGET, 80, AI_CV_PainSplit_ScoreDown1 - if_target_faster AI_CV_PainSplit2 - if_hp_more_than AI_USER, 40, AI_CV_PainSplit_ScoreDown1 - score +1 - goto AI_CV_PainSplit_End - -AI_CV_PainSplit2: - if_hp_more_than AI_USER, 60, AI_CV_PainSplit_ScoreDown1 - score +1 - goto AI_CV_PainSplit_End - -AI_CV_PainSplit_ScoreDown1: - score -1 -AI_CV_PainSplit_End: - end - -AI_CV_Snore: - score +2 - end - -AI_CV_LockOn: - if_random_less_than 128, AI_CV_LockOn_End - score +2 -AI_CV_LockOn_End: - end - -AI_CV_SleepTalk: - if_status AI_USER, STATUS1_SLEEP, Score_Plus10 - score -5 - end - -AI_CV_DestinyBond: - score -1 - if_target_faster AI_CV_DestinyBond_End - if_hp_more_than AI_USER, 70, AI_CV_DestinyBond_End - if_random_less_than 128, AI_CV_DestinyBond2 - score +1 -AI_CV_DestinyBond2: - if_hp_more_than AI_USER, 50, AI_CV_DestinyBond_End - if_random_less_than 128, AI_CV_DestinyBond3 - score +1 -AI_CV_DestinyBond3: - if_hp_more_than AI_USER, 30, AI_CV_DestinyBond_End - if_random_less_than 100, AI_CV_DestinyBond_End - score +2 -AI_CV_DestinyBond_End: - end - -AI_CV_Flail: - if_target_faster AI_CV_Flail2 - if_hp_more_than AI_USER, 33, AI_CV_Flail_ScoreDown1 - if_hp_more_than AI_USER, 20, AI_CV_Flail_End - if_hp_less_than AI_USER, 8, AI_CV_Flail_ScoreUp1 - goto AI_CV_Flail3 - -AI_CV_Flail2: - if_hp_more_than AI_USER, 60, AI_CV_Flail_ScoreDown1 - if_hp_more_than AI_USER, 40, AI_CV_Flail_End - goto AI_CV_Flail3 - -AI_CV_Flail_ScoreUp1: - score +1 -AI_CV_Flail3: - if_random_less_than 100, AI_CV_Flail_End - score +1 - goto AI_CV_Flail_End - -AI_CV_Flail_ScoreDown1: - score -1 -AI_CV_Flail_End: - end - -AI_CV_HealBell: - if_status AI_TARGET, STATUS1_ANY, AI_CV_HealBell_End - if_status_in_party AI_TARGET, STATUS1_ANY, AI_CV_HealBell_End - score -5 -AI_CV_HealBell_End: - end - -AI_CV_Thief: - get_hold_effect AI_TARGET - if_not_in_bytes AI_CV_Thief_EncourageItemsToSteal, AI_CV_Thief_ScoreDown2 - if_random_less_than 50, AI_CV_Thief_End - score +1 - goto AI_CV_Thief_End - -AI_CV_Thief_ScoreDown2: - score -2 -AI_CV_Thief_End: - end - -AI_CV_Thief_EncourageItemsToSteal: - .byte HOLD_EFFECT_CURE_SLP - .byte HOLD_EFFECT_CURE_STATUS - .byte HOLD_EFFECT_RESTORE_HP - .byte HOLD_EFFECT_EVASION_UP - .byte HOLD_EFFECT_LEFTOVERS - .byte HOLD_EFFECT_LIGHT_BALL - .byte HOLD_EFFECT_THICK_CLUB - .byte -1 - -AI_CV_Curse: - get_user_type1 - if_equal TYPE_GHOST, AI_CV_Curse4 - get_user_type2 - if_equal TYPE_GHOST, AI_CV_Curse4 - if_stat_level_more_than AI_USER, STAT_DEF, 9, AI_CV_Curse_End - if_random_less_than 128, AI_CV_Curse2 - score +1 -AI_CV_Curse2: - if_stat_level_more_than AI_USER, STAT_DEF, 7, AI_CV_Curse_End - if_random_less_than 128, AI_CV_Curse3 - score +1 -AI_CV_Curse3: - if_stat_level_more_than AI_USER, STAT_DEF, DEFAULT_STAT_STAGE, AI_CV_Curse_End - if_random_less_than 128, AI_CV_Curse_End - score +1 - goto AI_CV_Curse_End - -AI_CV_Curse4: - if_hp_more_than AI_USER, 80, AI_CV_Curse_End - score -1 -AI_CV_Curse_End: - end - -AI_CV_Protect: - get_protect_count AI_USER - if_more_than 1, AI_CV_Protect_ScoreDown2 - if_status AI_USER, STATUS1_TOXIC_POISON, AI_CV_Protect3 - if_status2 AI_USER, STATUS2_CURSED, AI_CV_Protect3 - if_status3 AI_USER, STATUS3_PERISH_SONG, AI_CV_Protect3 - if_status2 AI_USER, STATUS2_INFATUATION, AI_CV_Protect3 - if_status3 AI_USER, STATUS3_LEECHSEED, AI_CV_Protect3 - if_status3 AI_USER, STATUS3_YAWN, AI_CV_Protect3 - if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, AI_CV_Protect3 - if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, AI_CV_Protect3 - if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_Protect_ScoreUp2 - if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_Protect_ScoreUp2 - if_status3 AI_TARGET, STATUS3_PERISH_SONG, AI_CV_Protect_ScoreUp2 - if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Protect_ScoreUp2 - if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Protect_ScoreUp2 - if_status3 AI_TARGET, STATUS3_YAWN, AI_CV_Protect_ScoreUp2 - get_last_used_bank_move AI_TARGET - get_move_effect_from_result - if_not_equal EFFECT_LOCK_ON, AI_CV_Protect_ScoreUp2 - goto AI_CV_Protect2 - -AI_CV_Protect_ScoreUp2: - score +2 -AI_CV_Protect2: - if_random_less_than 128, AI_CV_Protect4 - score -1 -AI_CV_Protect4: - get_protect_count AI_USER - if_equal 0, AI_CV_Protect_End - score -1 - if_random_less_than 128, AI_CV_Protect_End - score -1 - goto AI_CV_Protect_End - -AI_CV_Protect3: - get_last_used_bank_move AI_TARGET - get_move_effect_from_result - if_not_equal EFFECT_LOCK_ON, AI_CV_Protect_End -AI_CV_Protect_ScoreDown2: - score -2 -AI_CV_Protect_End: - end - -@ BUG: Foresight is only encouraged if the user is Ghost type or -@ has high evasion, but should check target instead -AI_CV_Foresight: -.ifdef BUGFIX - get_target_type1 - if_equal TYPE_GHOST, AI_CV_Foresight2 - get_target_type2 - if_equal TYPE_GHOST, AI_CV_Foresight2 - if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Foresight3 -.else - get_user_type1 - if_equal TYPE_GHOST, AI_CV_Foresight2 - get_user_type2 - if_equal TYPE_GHOST, AI_CV_Foresight2 - if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_Foresight3 -.endif - score -2 - goto AI_CV_Foresight_End - -AI_CV_Foresight2: - if_random_less_than 80, AI_CV_Foresight_End -AI_CV_Foresight3: - if_random_less_than 80, AI_CV_Foresight_End - score +2 -AI_CV_Foresight_End: - end - -AI_CV_Endure: - if_hp_less_than AI_USER, 4, AI_CV_Endure2 - if_hp_less_than AI_USER, 35, AI_CV_Endure3 -AI_CV_Endure2: - score -1 - goto AI_CV_Endure_End - -AI_CV_Endure3: - if_random_less_than 70, AI_CV_Endure_End - score +1 -AI_CV_Endure_End: - end - -AI_CV_BatonPass: - if_stat_level_more_than AI_USER, STAT_ATK, 8, AI_CV_BatonPass2 - if_stat_level_more_than AI_USER, STAT_DEF, 8, AI_CV_BatonPass2 - if_stat_level_more_than AI_USER, STAT_SPATK, 8, AI_CV_BatonPass2 - if_stat_level_more_than AI_USER, STAT_SPDEF, 8, AI_CV_BatonPass2 - if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_BatonPass2 - goto AI_CV_BatonPass5 - -AI_CV_BatonPass2: - if_target_faster AI_CV_BatonPass3 - if_hp_more_than AI_USER, 60, AI_CV_BatonPass_End - goto AI_CV_BatonPass4 - -AI_CV_BatonPass3: - if_hp_more_than AI_USER, 70, AI_CV_BatonPass_End -AI_CV_BatonPass4: - if_random_less_than 80, AI_CV_BatonPass_End - score +2 - goto AI_CV_BatonPass_End - -AI_CV_BatonPass5: - if_stat_level_more_than AI_USER, STAT_ATK, 7, AI_CV_BatonPass7 - if_stat_level_more_than AI_USER, STAT_DEF, 7, AI_CV_BatonPass7 - if_stat_level_more_than AI_USER, STAT_SPATK, 7, AI_CV_BatonPass7 - if_stat_level_more_than AI_USER, STAT_SPDEF, 7, AI_CV_BatonPass7 - if_stat_level_more_than AI_USER, STAT_EVASION, 7, AI_CV_BatonPass7 - goto AI_CV_BatonPass_ScoreDown2 - -AI_CV_BatonPass7: - if_target_faster AI_CV_BatonPass8 - if_hp_more_than AI_USER, 60, AI_CV_BatonPass_ScoreDown2 - goto AI_CV_BatonPass_End - -AI_CV_BatonPass8: - if_hp_less_than AI_USER, 70, AI_CV_BatonPass_End -AI_CV_BatonPass_ScoreDown2: - score -2 -AI_CV_BatonPass_End: - end - -AI_CV_Pursuit: - is_first_turn_for AI_USER - if_not_equal 0, AI_CV_Pursuit_End - get_target_type1 - if_equal TYPE_GHOST, AI_CV_Pursuit2 - get_target_type1 - if_equal TYPE_PSYCHIC, AI_CV_Pursuit2 - get_target_type2 - if_equal TYPE_GHOST, AI_CV_Pursuit2 - get_target_type2 - if_equal TYPE_PSYCHIC, AI_CV_Pursuit2 - goto AI_CV_Pursuit_End - -AI_CV_Pursuit2: - if_random_less_than 128, AI_CV_Pursuit_End - score +1 -AI_CV_Pursuit_End: - end - -AI_CV_RainDance: - if_user_faster AI_CV_RainDance2 - get_ability AI_USER - if_equal ABILITY_SWIFT_SWIM, AI_CV_RainDance3 -AI_CV_RainDance2: - if_hp_less_than AI_USER, 40, AI_CV_RainDance_ScoreDown1 - get_weather - if_equal AI_WEATHER_HAIL, AI_CV_RainDance3 - if_equal AI_WEATHER_SUN, AI_CV_RainDance3 - if_equal AI_WEATHER_SANDSTORM, AI_CV_RainDance3 - get_ability AI_USER - if_equal ABILITY_RAIN_DISH, AI_CV_RainDance3 - goto AI_CV_RainDance_End - -AI_CV_RainDance3: - score +1 - goto AI_CV_RainDance_End - -AI_CV_RainDance_ScoreDown1: - score -1 -AI_CV_RainDance_End: - end - -AI_CV_SunnyDay: - if_hp_less_than AI_USER, 40, AI_CV_SunnyDay_ScoreDown1 - get_weather - if_equal AI_WEATHER_HAIL, AI_CV_SunnyDay2 - if_equal AI_WEATHER_RAIN, AI_CV_SunnyDay2 - if_equal AI_WEATHER_SANDSTORM, AI_CV_SunnyDay2 - goto AI_CV_SunnyDay_End - -AI_CV_SunnyDay2: - score +1 - goto AI_CV_SunnyDay_End - -AI_CV_SunnyDay_ScoreDown1: - score -1 -AI_CV_SunnyDay_End: - end - -AI_CV_BellyDrum: - if_hp_less_than AI_USER, 90, AI_CV_BellyDrum_ScoreDown2 - goto AI_CV_BellyDrum_End - -AI_CV_BellyDrum_ScoreDown2: - score -2 -AI_CV_BellyDrum_End: - end - -AI_CV_PsychUp: - if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_PsychUp2 - if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_PsychUp2 - if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_PsychUp2 - if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_PsychUp2 - if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_PsychUp2 - goto AI_CV_PsychUp_ScoreDown2 - -AI_CV_PsychUp2: - if_stat_level_less_than AI_USER, STAT_ATK, 7, AI_CV_PsychUp3 - if_stat_level_less_than AI_USER, STAT_DEF, 7, AI_CV_PsychUp3 - if_stat_level_less_than AI_USER, STAT_SPATK, 7, AI_CV_PsychUp3 - if_stat_level_less_than AI_USER, STAT_SPDEF, 7, AI_CV_PsychUp3 - if_stat_level_less_than AI_USER, STAT_EVASION, 7, AI_CV_PsychUp_ScoreUp1 - if_random_less_than 50, AI_CV_PsychUp_End - goto AI_CV_PsychUp_ScoreDown2 - -AI_CV_PsychUp_ScoreUp1: - score +1 -AI_CV_PsychUp3: - score +1 - end - -AI_CV_PsychUp_ScoreDown2: - score -2 -AI_CV_PsychUp_End: - end - -AI_CV_MirrorCoat: - if_status AI_TARGET, STATUS1_SLEEP, AI_CV_MirrorCoat_ScoreDown1 - if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_MirrorCoat_ScoreDown1 - if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_MirrorCoat_ScoreDown1 - if_hp_more_than AI_USER, 30, AI_CV_MirrorCoat2 - if_random_less_than 10, AI_CV_MirrorCoat2 - score -1 -AI_CV_MirrorCoat2: - if_hp_more_than AI_USER, 50, AI_CV_MirrorCoat3 - if_random_less_than 100, AI_CV_MirrorCoat3 - score -1 -AI_CV_MirrorCoat3: - if_has_move AI_USER, MOVE_COUNTER, AI_CV_MirrorCoat_ScoreUp4 - get_last_used_bank_move AI_TARGET - get_move_power_from_result - if_equal 0, AI_CV_MirrorCoat5 - if_target_not_taunted AI_CV_MirrorCoat4 - if_random_less_than 100, AI_CV_MirrorCoat4 - score +1 -AI_CV_MirrorCoat4: - get_last_used_bank_move AI_TARGET - get_move_type_from_result - if_not_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_ScoreDown1 - if_random_less_than 100, AI_CV_MirrorCoat_End - score +1 - goto AI_CV_MirrorCoat_End - -AI_CV_MirrorCoat5: - if_target_not_taunted AI_CV_MirrorCoat6 - if_random_less_than 100, AI_CV_MirrorCoat6 - score +1 -AI_CV_MirrorCoat6: - get_target_type1 - if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End - get_target_type2 - if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End - if_random_less_than 50, AI_CV_MirrorCoat_End -AI_CV_MirrorCoat_ScoreUp4: - if_random_less_than 100, AI_CV_MirrorCoat_ScoreUp4_End - score +4 -AI_CV_MirrorCoat_ScoreUp4_End: - end - -AI_CV_MirrorCoat_ScoreDown1: - score -1 -AI_CV_MirrorCoat_End: - end - -AI_CV_MirrorCoat_SpecialTypeList: - .byte TYPE_FIRE - .byte TYPE_WATER - .byte TYPE_GRASS - .byte TYPE_ELECTRIC - .byte TYPE_PSYCHIC - .byte TYPE_ICE - .byte TYPE_DRAGON - .byte TYPE_DARK - .byte -1 - -AI_CV_ChargeUpMove: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_ChargeUpMove_ScoreDown2 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_ChargeUpMove_ScoreDown2 - if_has_move_with_effect AI_TARGET, EFFECT_PROTECT, AI_CV_ChargeUpMove_ScoreDown2 - if_hp_more_than AI_USER, 38, AI_CV_ChargeUpMove_End - score -1 - goto AI_CV_ChargeUpMove_End - -AI_CV_ChargeUpMove_ScoreDown2: - score -2 -AI_CV_ChargeUpMove_End: - end - -AI_CV_SemiInvulnerable: - if_doesnt_have_move_with_effect AI_TARGET, EFFECT_PROTECT, AI_CV_SemiInvulnerable2 - score -1 - goto AI_CV_SemiInvulnerable_End - -@ BUG: The scripts for checking type-resistance to weather for semi-invulnerable moves are swapped -@ The result is that the AI is encouraged to stall while taking damage from weather -AI_CV_SemiInvulnerable2: - if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_SemiInvulnerable_TryEncourage - if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_SemiInvulnerable_TryEncourage - if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_SemiInvulnerable_TryEncourage - get_weather -.ifdef BUGFIX - if_equal AI_WEATHER_HAIL, AI_CV_SemiInvulnerable_CheckIceType - if_equal AI_WEATHER_SANDSTORM, AI_CV_SemiInvulnerable_CheckSandstormTypes -.else - if_equal AI_WEATHER_HAIL, AI_CV_SemiInvulnerable_CheckSandstormTypes - if_equal AI_WEATHER_SANDSTORM, AI_CV_SemiInvulnerable_CheckIceType -.endif - goto AI_CV_SemiInvulnerable5 - -AI_CV_SemiInvulnerable_CheckSandstormTypes: - get_user_type1 - if_in_bytes AI_CV_SandstormResistantTypes, AI_CV_SemiInvulnerable_TryEncourage - get_user_type2 - if_in_bytes AI_CV_SandstormResistantTypes, AI_CV_SemiInvulnerable_TryEncourage - goto AI_CV_SemiInvulnerable5 - -AI_CV_SemiInvulnerable_CheckIceType: - get_user_type1 - if_equal TYPE_ICE, AI_CV_SemiInvulnerable_TryEncourage - get_user_type2 - if_equal TYPE_ICE, AI_CV_SemiInvulnerable_TryEncourage -AI_CV_SemiInvulnerable5: - if_target_faster AI_CV_SemiInvulnerable_End - get_last_used_bank_move AI_TARGET - get_move_effect_from_result - if_not_equal EFFECT_LOCK_ON, AI_CV_SemiInvulnerable_TryEncourage - goto AI_CV_SemiInvulnerable_End - -AI_CV_SemiInvulnerable_TryEncourage: - if_random_less_than 80, AI_CV_SemiInvulnerable_End - score +1 -AI_CV_SemiInvulnerable_End: - end - -AI_CV_SandstormResistantTypes: - .byte TYPE_GROUND - .byte TYPE_ROCK - .byte TYPE_STEEL - .byte -1 - -AI_CV_FakeOut: - score +2 - end - -AI_CV_SpitUp: - get_stockpile_count AI_USER - if_less_than 2, AI_CV_SpitUp_End - if_random_less_than 80, AI_CV_SpitUp_End - score +2 -AI_CV_SpitUp_End: - end - -AI_CV_Hail: - if_hp_less_than AI_USER, 40, AI_CV_Hail_ScoreDown1 - get_weather - if_equal AI_WEATHER_SUN, AI_CV_Hail2 - if_equal AI_WEATHER_RAIN, AI_CV_Hail2 - if_equal AI_WEATHER_SANDSTORM, AI_CV_Hail2 - goto AI_CV_Hail_End - -AI_CV_Hail2: - score +1 - goto AI_CV_Hail_End - -AI_CV_Hail_ScoreDown1: - score -1 -AI_CV_Hail_End: - end - -@ BUG: Facade score is increased if the target is statused, but should be if the user is -AI_CV_Facade: -.ifdef BUGFIX - if_not_status AI_USER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End -.else - if_not_status AI_TARGET, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End -.endif - score +1 -AI_CV_Facade_End: - end - -AI_CV_FocusPunch: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_FocusPunch2 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_FocusPunch2 - if_status AI_TARGET, STATUS1_SLEEP, AI_CV_FocusPunch_ScoreUp1 - if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_FocusPunch3 - if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_FocusPunch3 - is_first_turn_for AI_USER - if_not_equal 0, AI_CV_FocusPunch_End - if_random_less_than 100, AI_CV_FocusPunch_End - score +1 - goto AI_CV_FocusPunch_End - -AI_CV_FocusPunch2: - score -1 - goto AI_CV_FocusPunch_End - -AI_CV_FocusPunch3: - if_random_less_than 100, AI_CV_FocusPunch_End - if_status2 AI_USER, STATUS2_SUBSTITUTE, Score_Plus5 -AI_CV_FocusPunch_ScoreUp1: - score +1 -AI_CV_FocusPunch_End: - end - -AI_CV_SmellingSalt: - if_status AI_TARGET, STATUS1_PARALYSIS, AI_CV_SmellingSalt_ScoreUp1 - goto AI_CV_SmellingSalt_End - -AI_CV_SmellingSalt_ScoreUp1: - score +1 -AI_CV_SmellingSalt_End: - end - -AI_CV_Trick: - get_hold_effect AI_USER - if_in_bytes AI_CV_Trick_EffectsToEncourage2, AI_CV_Trick3 - if_in_bytes AI_CV_Trick_EffectsToEncourage, AI_CV_Trick4 -AI_CV_Trick2: - score -3 - goto AI_CV_Trick_End - -AI_CV_Trick3: - get_hold_effect AI_TARGET - if_in_bytes AI_CV_Trick_EffectsToEncourage2, AI_CV_Trick2 - score +5 - goto AI_CV_Trick_End - -AI_CV_Trick4: - get_hold_effect AI_TARGET - if_in_bytes AI_CV_Trick_EffectsToEncourage, AI_CV_Trick2 - if_random_less_than 50, AI_CV_Trick_End - score +2 -AI_CV_Trick_End: - end - -AI_CV_Trick_EffectsToEncourage: - .byte HOLD_EFFECT_CONFUSE_SPICY - .byte HOLD_EFFECT_CONFUSE_DRY - .byte HOLD_EFFECT_CONFUSE_SWEET - .byte HOLD_EFFECT_CONFUSE_BITTER - .byte HOLD_EFFECT_CONFUSE_SOUR - .byte HOLD_EFFECT_MACHO_BRACE - .byte HOLD_EFFECT_CHOICE_BAND - .byte -1 - -AI_CV_Trick_EffectsToEncourage2: - .byte HOLD_EFFECT_CHOICE_BAND - .byte -1 - -AI_CV_ChangeSelfAbility: - get_ability AI_USER - if_in_bytes AI_CV_ChangeSelfAbility_AbilitiesToEncourage, AI_CV_ChangeSelfAbility2 - get_ability AI_TARGET - if_in_bytes AI_CV_ChangeSelfAbility_AbilitiesToEncourage, AI_CV_ChangeSelfAbility3 -AI_CV_ChangeSelfAbility2: - score -1 - goto AI_CV_ChangeSelfAbility_End - -AI_CV_ChangeSelfAbility3: - if_random_less_than 50, AI_CV_ChangeSelfAbility_End - score +2 -AI_CV_ChangeSelfAbility_End: - end - -AI_CV_ChangeSelfAbility_AbilitiesToEncourage: - .byte ABILITY_SPEED_BOOST - .byte ABILITY_BATTLE_ARMOR - .byte ABILITY_SAND_VEIL - .byte ABILITY_STATIC - .byte ABILITY_FLASH_FIRE - .byte ABILITY_WONDER_GUARD - .byte ABILITY_EFFECT_SPORE - .byte ABILITY_SWIFT_SWIM - .byte ABILITY_HUGE_POWER - .byte ABILITY_RAIN_DISH - .byte ABILITY_CUTE_CHARM - .byte ABILITY_SHED_SKIN - .byte ABILITY_MARVEL_SCALE - .byte ABILITY_PURE_POWER - .byte ABILITY_CHLOROPHYLL - .byte ABILITY_SHIELD_DUST - .byte -1 - -AI_CV_Superpower: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Superpower_ScoreDown1 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Superpower_ScoreDown1 - if_stat_level_less_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE, AI_CV_Superpower_ScoreDown1 - if_target_faster AI_CV_Superpower2 - if_hp_more_than AI_USER, 40, AI_CV_Superpower_ScoreDown1 - goto AI_CV_Superpower_End - -AI_CV_Superpower2: - if_hp_less_than AI_USER, 60, AI_CV_Superpower_End -AI_CV_Superpower_ScoreDown1: - score -1 -AI_CV_Superpower_End: - end - -AI_CV_MagicCoat: - if_hp_more_than AI_TARGET, 30, AI_CV_MagicCoat2 - if_random_less_than 100, AI_CV_MagicCoat2 - score -1 -AI_CV_MagicCoat2: - is_first_turn_for AI_USER - if_equal FALSE, AI_CV_MagicCoat4 - if_random_less_than 150, AI_CV_MagicCoat_End - score +1 - goto AI_CV_MagicCoat_End - -AI_CV_MagicCoat3: - if_random_less_than 50, AI_CV_MagicCoat_End -AI_CV_MagicCoat4: - if_random_less_than 30, AI_CV_MagicCoat_End - score -1 -AI_CV_MagicCoat_End: - end - -AI_CV_Recycle: - get_used_held_item AI_USER - if_not_in_bytes AI_CV_Recycle_ItemsToEncourage, AI_CV_Recycle_ScoreDown2 - if_random_less_than 50, AI_CV_Recycle_End - score +1 - goto AI_CV_Recycle_End - -AI_CV_Recycle_ScoreDown2: - score -2 -AI_CV_Recycle_End: - end - -AI_CV_Recycle_ItemsToEncourage: - .byte ITEM_CHESTO_BERRY - .byte ITEM_LUM_BERRY - .byte ITEM_STARF_BERRY - .byte -1 - -AI_CV_Revenge: - if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Revenge_ScoreDown2 - if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Revenge_ScoreDown2 - if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Revenge_ScoreDown2 - if_random_less_than 180, AI_CV_Revenge_ScoreDown2 - score +2 - goto AI_CV_Revenge_End - -AI_CV_Revenge_ScoreDown2: - score -2 -AI_CV_Revenge_End: - end - -AI_CV_BrickBreak: - if_side_affecting AI_TARGET, SIDE_STATUS_REFLECT, AI_CV_BrickBreak_ScoreUp1 - goto AI_CV_BrickBreak_End - -AI_CV_BrickBreak_ScoreUp1: - score +1 -AI_CV_BrickBreak_End: - end - -AI_CV_KnockOff: - if_hp_less_than AI_TARGET, 30, AI_CV_KnockOff_End - is_first_turn_for AI_USER - if_more_than 0, AI_CV_KnockOff_End - if_random_less_than 180, AI_CV_KnockOff_End - score +1 -AI_CV_KnockOff_End: - end - -AI_CV_Endeavor: - if_hp_less_than AI_TARGET, 70, AI_CV_Endeavor_ScoreDown1 - if_target_faster AI_CV_Endeavor2 - if_hp_more_than AI_USER, 40, AI_CV_Endeavor_ScoreDown1 - score +1 - goto AI_CV_Endeavor_End - -AI_CV_Endeavor2: - if_hp_more_than AI_USER, 50, AI_CV_Endeavor_ScoreDown1 - score +1 - goto AI_CV_Endeavor_End - -AI_CV_Endeavor_ScoreDown1: - score -1 -AI_CV_Endeavor_End: - end - -AI_CV_Eruption: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Eruption_ScoreDown1 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Eruption_ScoreDown1 - if_target_faster AI_CV_Eruption2 - if_hp_more_than AI_TARGET, 50, AI_CV_Eruption_End - goto AI_CV_Eruption_ScoreDown1 - -AI_CV_Eruption2: - if_hp_more_than AI_TARGET, 70, AI_CV_Eruption_End -AI_CV_Eruption_ScoreDown1: - score -1 -AI_CV_Eruption_End: - end - -AI_CV_Imprison: - is_first_turn_for AI_USER - if_more_than 0, AI_CV_Imprison_End - if_random_less_than 100, AI_CV_Imprison_End - score +2 -AI_CV_Imprison_End: - end - -AI_CV_Refresh: - if_hp_less_than AI_TARGET, 50, AI_CV_Refresh_ScoreDown1 - goto AI_CV_Refresh_End - -AI_CV_Refresh_ScoreDown1: - score -1 -AI_CV_Refresh_End: - end - -AI_CV_Snatch: - is_first_turn_for AI_USER - if_equal TRUE, AI_CV_Snatch3 - if_random_less_than 30, AI_CV_Snatch_End - if_target_faster AI_CV_Snatch2 - if_hp_not_equal AI_USER, 100, AI_CV_Snatch5 - if_hp_less_than AI_TARGET, 70, AI_CV_Snatch5 - if_random_less_than 60, AI_CV_Snatch_End - goto AI_CV_Snatch5 - -AI_CV_Snatch2: - if_hp_more_than AI_TARGET, 25, AI_CV_Snatch5 - if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, AI_CV_Snatch3 - if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, AI_CV_Snatch3 - goto AI_CV_Snatch4 - -AI_CV_Snatch3: - if_random_less_than 150, AI_CV_Snatch_End - score +2 - goto AI_CV_Snatch_End - -AI_CV_Snatch4: - if_random_less_than 230, AI_CV_Snatch5 - score +1 - goto AI_CV_Snatch_End - -AI_CV_Snatch5: - if_random_less_than 30, AI_CV_Snatch_End - score -2 -AI_CV_Snatch_End: - end - -AI_CV_MudSport: - if_hp_less_than AI_USER, 50, AI_CV_MudSport_ScoreDown1 - get_target_type1 - if_equal TYPE_ELECTRIC, AI_CV_MudSport2 - get_target_type2 - if_equal TYPE_ELECTRIC, AI_CV_MudSport2 - goto AI_CV_MudSport_ScoreDown1 - -AI_CV_MudSport2: - score +1 - goto AI_CV_MudSport_End - -AI_CV_MudSport_ScoreDown1: - score -1 -AI_CV_MudSport_End: - end - -AI_CV_Overheat: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Overheat_ScoreDown1 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Overheat_ScoreDown1 - if_target_faster AI_CV_Overheat2 - if_hp_more_than AI_USER, 60, AI_CV_Overheat_End - goto AI_CV_Overheat_ScoreDown1 - -AI_CV_Overheat2: - if_hp_more_than AI_USER, 80, AI_CV_Overheat_End -AI_CV_Overheat_ScoreDown1: - score -1 -AI_CV_Overheat_End: - end - -AI_CV_WaterSport: - if_hp_less_than AI_USER, 50, AI_CV_WaterSport_ScoreDown1 - get_target_type1 - if_equal TYPE_FIRE, AI_CV_WaterSport2 - get_target_type2 - if_equal TYPE_FIRE, AI_CV_WaterSport2 - goto AI_CV_WaterSport_ScoreDown1 - -AI_CV_WaterSport2: - score +1 - goto AI_CV_WaterSport_End - -AI_CV_WaterSport_ScoreDown1: - score -1 -AI_CV_WaterSport_End: - end - -AI_CV_DragonDance: - if_target_faster AI_CV_DragonDance2 - if_hp_more_than AI_USER, 50, AI_CV_DragonDance_End - if_random_less_than 70, AI_CV_DragonDance_End - score -1 - goto AI_CV_DragonDance_End - -AI_CV_DragonDance2: - if_random_less_than 128, AI_CV_DragonDance_End - score +1 -AI_CV_DragonDance_End: - end - -AI_TryToFaint: - if_target_is_ally AI_Ret - if_can_faint AI_TryToFaint_TryToEncourageQuickAttack - get_how_powerful_move_is - if_equal MOVE_NOT_MOST_POWERFUL, Score_Minus1 - if_type_effectiveness AI_EFFECTIVENESS_x4, AI_TryToFaint_DoubleSuperEffective - end - -AI_TryToFaint_DoubleSuperEffective: - if_random_less_than 80, AI_TryToFaint_End - score +2 - end - -AI_TryToFaint_TryToEncourageQuickAttack: - if_effect EFFECT_EXPLOSION, AI_TryToFaint_End - if_not_effect EFFECT_QUICK_ATTACK, AI_TryToFaint_ScoreUp4 - score +2 -AI_TryToFaint_ScoreUp4: - score +4 -AI_TryToFaint_End: - end - -AI_SetupFirstTurn: - if_target_is_ally AI_Ret - get_turn_count - if_not_equal 0, AI_SetupFirstTurn_End - get_considered_move_effect - if_not_in_bytes AI_SetupFirstTurn_SetupEffectsToEncourage, AI_SetupFirstTurn_End - if_random_less_than 80, AI_SetupFirstTurn_End - score +2 -AI_SetupFirstTurn_End: - end - -AI_SetupFirstTurn_SetupEffectsToEncourage: - .byte EFFECT_ATTACK_UP - .byte EFFECT_DEFENSE_UP - .byte EFFECT_SPEED_UP - .byte EFFECT_SPECIAL_ATTACK_UP - .byte EFFECT_SPECIAL_DEFENSE_UP - .byte EFFECT_ACCURACY_UP - .byte EFFECT_EVASION_UP - .byte EFFECT_ATTACK_DOWN - .byte EFFECT_DEFENSE_DOWN - .byte EFFECT_SPEED_DOWN - .byte EFFECT_SPECIAL_ATTACK_DOWN - .byte EFFECT_SPECIAL_DEFENSE_DOWN - .byte EFFECT_ACCURACY_DOWN - .byte EFFECT_EVASION_DOWN - .byte EFFECT_CONVERSION - .byte EFFECT_LIGHT_SCREEN - .byte EFFECT_SPECIAL_DEFENSE_UP_2 - .byte EFFECT_FOCUS_ENERGY - .byte EFFECT_CONFUSE - .byte EFFECT_ATTACK_UP_2 - .byte EFFECT_DEFENSE_UP_2 - .byte EFFECT_SPEED_UP_2 - .byte EFFECT_SPECIAL_ATTACK_UP_2 - .byte EFFECT_SPECIAL_DEFENSE_UP_2 - .byte EFFECT_ACCURACY_UP_2 - .byte EFFECT_EVASION_UP_2 - .byte EFFECT_ATTACK_DOWN_2 - .byte EFFECT_DEFENSE_DOWN_2 - .byte EFFECT_SPEED_DOWN_2 - .byte EFFECT_SPECIAL_ATTACK_DOWN_2 - .byte EFFECT_SPECIAL_DEFENSE_DOWN_2 - .byte EFFECT_ACCURACY_DOWN_2 - .byte EFFECT_EVASION_DOWN_2 - .byte EFFECT_REFLECT - .byte EFFECT_POISON - .byte EFFECT_PARALYZE - .byte EFFECT_SUBSTITUTE - .byte EFFECT_LEECH_SEED - .byte EFFECT_MINIMIZE - .byte EFFECT_CURSE - .byte EFFECT_SWAGGER - .byte EFFECT_CAMOUFLAGE - .byte EFFECT_YAWN - .byte EFFECT_DEFENSE_CURL - .byte EFFECT_TORMENT - .byte EFFECT_FLATTER - .byte EFFECT_WILL_O_WISP - .byte EFFECT_INGRAIN - .byte EFFECT_IMPRISON - .byte EFFECT_TEETER_DANCE - .byte EFFECT_TICKLE - .byte EFFECT_COSMIC_POWER - .byte EFFECT_BULK_UP - .byte EFFECT_CALM_MIND - .byte EFFECT_CAMOUFLAGE - .byte -1 - -@ ~60% chance to prefer moves that do 0 or 1 damage, or are in sIgnoredPowerfulMoveEffects -@ Oddly this group includes moves like Explosion and Eruption, so the AI strategy isn't very coherent -AI_PreferPowerExtremes: - if_target_is_ally AI_Ret - get_how_powerful_move_is - if_not_equal MOVE_POWER_OTHER, AI_PreferPowerExtremes_End - if_random_less_than 100, AI_PreferPowerExtremes_End - score +2 -AI_PreferPowerExtremes_End: - end - -AI_Risky: - if_target_is_ally AI_Ret - get_considered_move_effect - if_not_in_bytes AI_Risky_EffectsToEncourage, AI_Risky_End - if_random_less_than 128, AI_Risky_End - score +2 -AI_Risky_End: - end - -AI_Risky_EffectsToEncourage: - .byte EFFECT_SLEEP - .byte EFFECT_EXPLOSION - .byte EFFECT_MIRROR_MOVE - .byte EFFECT_OHKO - .byte EFFECT_HIGH_CRITICAL - .byte EFFECT_CONFUSE - .byte EFFECT_METRONOME - .byte EFFECT_PSYWAVE - .byte EFFECT_COUNTER - .byte EFFECT_DESTINY_BOND - .byte EFFECT_SWAGGER - .byte EFFECT_ATTRACT - .byte EFFECT_PRESENT - .byte EFFECT_ALL_STATS_UP_HIT - .byte EFFECT_BELLY_DRUM - .byte EFFECT_MIRROR_COAT - .byte EFFECT_FOCUS_PUNCH - .byte EFFECT_REVENGE - .byte EFFECT_TEETER_DANCE - .byte -1 - -AI_PreferBatonPass: - if_target_is_ally AI_Ret - count_usable_party_mons AI_USER - if_equal 0, AI_PreferBatonPassEnd - get_how_powerful_move_is - if_not_equal MOVE_POWER_OTHER, AI_PreferBatonPassEnd - if_has_move_with_effect AI_USER, EFFECT_BATON_PASS, AI_PreferBatonPass_GoForBatonPass - if_random_less_than 80, AI_Risky_End -AI_PreferBatonPass_GoForBatonPass: - if_move MOVE_SWORDS_DANCE, AI_PreferBatonPass2 - if_move MOVE_DRAGON_DANCE, AI_PreferBatonPass2 - if_move MOVE_CALM_MIND, AI_PreferBatonPass2 - if_effect EFFECT_PROTECT, AI_PreferBatonPass_End - if_move MOVE_BATON_PASS, AI_PreferBatonPass_EncourageIfHighStats - if_random_less_than 20, AI_Risky_End - score +3 -AI_PreferBatonPass2: - get_turn_count - if_equal 0, Score_Plus5 - if_hp_less_than AI_USER, 60, Score_Minus10 - goto Score_Plus1 - -AI_PreferBatonPass_End: - get_last_used_bank_move AI_USER - if_in_hwords sMovesTable_ProtectMoves, Score_Minus2 - score +2 - end - -sMovesTable_ProtectMoves: - .2byte MOVE_PROTECT - .2byte MOVE_DETECT - .2byte -1 - -AI_PreferBatonPass_EncourageIfHighStats: - get_turn_count - if_equal 0, Score_Minus2 - if_stat_level_more_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE + 2, Score_Plus3 - if_stat_level_more_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE + 1, Score_Plus2 - if_stat_level_more_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE, Score_Plus1 - if_stat_level_more_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE + 2, Score_Plus3 - if_stat_level_more_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE + 1, Score_Plus2 - if_stat_level_more_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE, Score_Plus1 - end - -AI_PreferBatonPassEnd: - end - -AI_DoubleBattle: - if_target_is_ally AI_TryOnAlly - if_move MOVE_SKILL_SWAP, AI_DoubleBattleSkillSwap - get_curr_move_type - if_move MOVE_EARTHQUAKE, AI_DoubleBattleAllHittingGroundMove - if_move MOVE_MAGNITUDE, AI_DoubleBattleAllHittingGroundMove - if_equal TYPE_ELECTRIC, AI_DoubleBattleElectricMove - if_equal TYPE_FIRE, AI_DoubleBattleFireMove - get_ability AI_USER - if_not_equal ABILITY_GUTS, AI_DoubleBattleCheckUserStatus - if_has_move AI_USER_PARTNER, MOVE_HELPING_HAND, AI_DoubleBattlePartnerHasHelpingHand - end - -AI_DoubleBattlePartnerHasHelpingHand: - get_how_powerful_move_is - if_not_equal MOVE_POWER_OTHER, Score_Plus1 - end - -AI_DoubleBattleCheckUserStatus: - if_status AI_USER, STATUS1_ANY, AI_DoubleBattleCheckUserStatus2 - end - -AI_DoubleBattleCheckUserStatus2: - get_how_powerful_move_is - if_equal MOVE_POWER_OTHER, Score_Minus5 - score +1 - if_equal MOVE_MOST_POWERFUL, Score_Plus2 - end - -AI_DoubleBattleAllHittingGroundMove: - if_ability AI_USER_PARTNER, ABILITY_LEVITATE, Score_Plus2 - if_type AI_USER_PARTNER, TYPE_FLYING, Score_Plus2 - if_type AI_USER_PARTNER, TYPE_FIRE, Score_Minus10 - if_type AI_USER_PARTNER, TYPE_ELECTRIC, Score_Minus10 - if_type AI_USER_PARTNER, TYPE_POISON, Score_Minus10 - if_type AI_USER_PARTNER, TYPE_ROCK, Score_Minus10 - goto Score_Minus3 - -AI_DoubleBattleSkillSwap: - get_ability AI_USER - if_equal ABILITY_TRUANT, Score_Plus5 - get_ability AI_TARGET - if_equal ABILITY_SHADOW_TAG, Score_Plus2 - if_equal ABILITY_PURE_POWER, Score_Plus2 - end - -AI_DoubleBattleElectricMove: - if_no_ability AI_TARGET_PARTNER, ABILITY_LIGHTNING_ROD, AI_DoubleBattleElectricMoveEnd - score -2 - if_no_type AI_TARGET_PARTNER, TYPE_GROUND, AI_DoubleBattleElectricMoveEnd - score -8 -AI_DoubleBattleElectricMoveEnd: - end - -AI_DoubleBattleFireMove: - if_flash_fired AI_USER, AI_DoubleBattleFireMove2 - end - -AI_DoubleBattleFireMove2: - goto Score_Plus1 - -AI_TryOnAlly: - get_how_powerful_move_is - if_equal MOVE_POWER_OTHER, AI_TryStatusMoveOnAlly - get_curr_move_type - if_equal TYPE_FIRE, AI_TryFireMoveOnAlly -AI_DiscourageOnAlly: - goto Score_Minus30 - -AI_TryFireMoveOnAlly: - if_ability AI_USER_PARTNER, ABILITY_FLASH_FIRE, AI_TryFireMoveOnAlly_FlashFire - goto AI_DiscourageOnAlly - -AI_TryFireMoveOnAlly_FlashFire: - if_flash_fired AI_USER_PARTNER, AI_DiscourageOnAlly - goto Score_Plus3 - -AI_TryStatusMoveOnAlly: - if_move MOVE_SKILL_SWAP, AI_TrySkillSwapOnAlly - if_move MOVE_WILL_O_WISP, AI_TryStatusOnAlly - if_move MOVE_TOXIC, AI_TryStatusOnAlly - if_move MOVE_HELPING_HAND, AI_TryHelpingHandOnAlly - if_move MOVE_SWAGGER, AI_TrySwaggerOnAlly - goto Score_Minus30_ - -AI_TrySkillSwapOnAlly: - get_ability AI_TARGET - if_equal ABILITY_TRUANT, Score_Plus10 - get_ability AI_USER - if_not_equal ABILITY_LEVITATE, AI_TrySkillSwapOnAlly2 - get_ability AI_TARGET - if_equal ABILITY_LEVITATE, Score_Minus30_ - get_target_type1 - if_not_equal TYPE_ELECTRIC, AI_TrySkillSwapOnAlly2 - score +1 - get_target_type2 - if_not_equal TYPE_ELECTRIC, AI_TrySkillSwapOnAlly2 - score +1 - end - -AI_TrySkillSwapOnAlly2: - if_not_equal ABILITY_COMPOUND_EYES, Score_Minus30_ - if_has_move AI_USER_PARTNER, MOVE_FIRE_BLAST, AI_TrySkillSwapOnAllyPlus3 - if_has_move AI_USER_PARTNER, MOVE_THUNDER, AI_TrySkillSwapOnAllyPlus3 - if_has_move AI_USER_PARTNER, MOVE_CROSS_CHOP, AI_TrySkillSwapOnAllyPlus3 - if_has_move AI_USER_PARTNER, MOVE_HYDRO_PUMP, AI_TrySkillSwapOnAllyPlus3 - if_has_move AI_USER_PARTNER, MOVE_DYNAMIC_PUNCH, AI_TrySkillSwapOnAllyPlus3 - if_has_move AI_USER_PARTNER, MOVE_BLIZZARD, AI_TrySkillSwapOnAllyPlus3 - if_has_move AI_USER_PARTNER, MOVE_MEGAHORN, AI_TrySkillSwapOnAllyPlus3 - goto Score_Minus30_ - -AI_TrySkillSwapOnAllyPlus3: - goto Score_Plus3 - -AI_TryStatusOnAlly: - get_ability AI_TARGET - if_not_equal ABILITY_GUTS, Score_Minus30_ - if_status AI_TARGET, STATUS1_ANY, Score_Minus30_ - if_hp_less_than AI_USER, 91, Score_Minus30_ - goto Score_Plus5 - -AI_TryHelpingHandOnAlly: - if_random_less_than 64, Score_Minus1 - goto Score_Plus2 - -AI_TrySwaggerOnAlly: - if_holds_item AI_TARGET, ITEM_PERSIM_BERRY, AI_TrySwaggerOnAlly2 - goto Score_Minus30_ - -AI_TrySwaggerOnAlly2: - if_stat_level_more_than AI_TARGET, STAT_ATK, 7, AI_TrySwaggerOnAlly_End - score +3 -AI_TrySwaggerOnAlly_End: - end - -Score_Minus30_: - score -30 - end - -AI_HPAware: - if_target_is_ally AI_TryOnAlly - if_hp_more_than AI_USER, 70, AI_HPAware_UserHasHighHP - if_hp_more_than AI_USER, 30, AI_HPAware_UserHasMediumHP - get_considered_move_effect - if_in_bytes AI_HPAware_DiscouragedEffectsWhenLowHP, AI_HPAware_TryToDiscourage - goto AI_HPAware_ConsiderTarget - -AI_HPAware_UserHasHighHP: - get_considered_move_effect - if_in_bytes AI_HPAware_DiscouragedEffectsWhenHighHP, AI_HPAware_TryToDiscourage - goto AI_HPAware_ConsiderTarget - -AI_HPAware_UserHasMediumHP: - get_considered_move_effect - if_in_bytes AI_HPAware_DiscouragedEffectsWhenMediumHP, AI_HPAware_TryToDiscourage - goto AI_HPAware_ConsiderTarget - -AI_HPAware_TryToDiscourage: - if_random_less_than 50, AI_HPAware_ConsiderTarget - score -2 -AI_HPAware_ConsiderTarget: - if_hp_more_than AI_TARGET, 70, AI_HPAware_TargetHasHighHP - if_hp_more_than AI_TARGET, 30, AI_HPAware_TargetHasMediumHP - get_considered_move_effect - if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetLowHP, AI_HPAware_TargetTryToDiscourage - goto AI_HPAware_End - -AI_HPAware_TargetHasHighHP: - get_considered_move_effect - if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetHighHP, AI_HPAware_TargetTryToDiscourage - goto AI_HPAware_End - -AI_HPAware_TargetHasMediumHP: - get_considered_move_effect - if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetMediumHP, AI_HPAware_TargetTryToDiscourage - goto AI_HPAware_End - -AI_HPAware_TargetTryToDiscourage: - if_random_less_than 50, AI_HPAware_End - score -2 -AI_HPAware_End: - end - -AI_HPAware_DiscouragedEffectsWhenHighHP: - .byte EFFECT_EXPLOSION - .byte EFFECT_RESTORE_HP - .byte EFFECT_REST - .byte EFFECT_DESTINY_BOND - .byte EFFECT_FLAIL - .byte EFFECT_ENDURE - .byte EFFECT_MORNING_SUN - .byte EFFECT_SYNTHESIS - .byte EFFECT_MOONLIGHT - .byte EFFECT_SOFTBOILED - .byte EFFECT_MEMENTO - .byte EFFECT_GRUDGE - .byte EFFECT_OVERHEAT - .byte -1 - -AI_HPAware_DiscouragedEffectsWhenMediumHP: - .byte EFFECT_EXPLOSION - .byte EFFECT_ATTACK_UP - .byte EFFECT_DEFENSE_UP - .byte EFFECT_SPEED_UP - .byte EFFECT_SPECIAL_ATTACK_UP - .byte EFFECT_SPECIAL_DEFENSE_UP - .byte EFFECT_ACCURACY_UP - .byte EFFECT_EVASION_UP - .byte EFFECT_ATTACK_DOWN - .byte EFFECT_DEFENSE_DOWN - .byte EFFECT_SPEED_DOWN - .byte EFFECT_SPECIAL_ATTACK_DOWN - .byte EFFECT_SPECIAL_DEFENSE_DOWN - .byte EFFECT_ACCURACY_DOWN - .byte EFFECT_EVASION_DOWN - .byte EFFECT_BIDE - .byte EFFECT_CONVERSION - .byte EFFECT_LIGHT_SCREEN - .byte EFFECT_MIST - .byte EFFECT_FOCUS_ENERGY - .byte EFFECT_ATTACK_UP_2 - .byte EFFECT_DEFENSE_UP_2 - .byte EFFECT_SPEED_UP_2 - .byte EFFECT_SPECIAL_ATTACK_UP_2 - .byte EFFECT_SPECIAL_DEFENSE_UP_2 - .byte EFFECT_ACCURACY_UP_2 - .byte EFFECT_EVASION_UP_2 - .byte EFFECT_ATTACK_DOWN_2 - .byte EFFECT_DEFENSE_DOWN_2 - .byte EFFECT_SPEED_DOWN_2 - .byte EFFECT_SPECIAL_ATTACK_DOWN_2 - .byte EFFECT_SPECIAL_DEFENSE_DOWN_2 - .byte EFFECT_ACCURACY_DOWN_2 - .byte EFFECT_EVASION_DOWN_2 - .byte EFFECT_CONVERSION_2 - .byte EFFECT_SAFEGUARD - .byte EFFECT_BELLY_DRUM - .byte EFFECT_TICKLE - .byte EFFECT_COSMIC_POWER - .byte EFFECT_BULK_UP - .byte EFFECT_CALM_MIND - .byte EFFECT_DRAGON_DANCE - .byte -1 - -AI_HPAware_DiscouragedEffectsWhenLowHP: - .byte EFFECT_ATTACK_UP - .byte EFFECT_DEFENSE_UP - .byte EFFECT_SPEED_UP - .byte EFFECT_SPECIAL_ATTACK_UP - .byte EFFECT_SPECIAL_DEFENSE_UP - .byte EFFECT_ACCURACY_UP - .byte EFFECT_EVASION_UP - .byte EFFECT_ATTACK_DOWN - .byte EFFECT_DEFENSE_DOWN - .byte EFFECT_SPEED_DOWN - .byte EFFECT_SPECIAL_ATTACK_DOWN - .byte EFFECT_SPECIAL_DEFENSE_DOWN - .byte EFFECT_ACCURACY_DOWN - .byte EFFECT_EVASION_DOWN - .byte EFFECT_BIDE - .byte EFFECT_CONVERSION - .byte EFFECT_LIGHT_SCREEN - .byte EFFECT_MIST - .byte EFFECT_FOCUS_ENERGY - .byte EFFECT_ATTACK_UP_2 - .byte EFFECT_DEFENSE_UP_2 - .byte EFFECT_SPEED_UP_2 - .byte EFFECT_SPECIAL_ATTACK_UP_2 - .byte EFFECT_SPECIAL_DEFENSE_UP_2 - .byte EFFECT_ACCURACY_UP_2 - .byte EFFECT_EVASION_UP_2 - .byte EFFECT_ATTACK_DOWN_2 - .byte EFFECT_DEFENSE_DOWN_2 - .byte EFFECT_SPEED_DOWN_2 - .byte EFFECT_SPECIAL_ATTACK_DOWN_2 - .byte EFFECT_SPECIAL_DEFENSE_DOWN_2 - .byte EFFECT_ACCURACY_DOWN_2 - .byte EFFECT_EVASION_DOWN_2 - .byte EFFECT_RAGE - .byte EFFECT_CONVERSION_2 - .byte EFFECT_LOCK_ON - .byte EFFECT_SAFEGUARD - .byte EFFECT_BELLY_DRUM - .byte EFFECT_PSYCH_UP - .byte EFFECT_MIRROR_COAT - .byte EFFECT_SOLARBEAM - .byte EFFECT_ERUPTION - .byte EFFECT_TICKLE - .byte EFFECT_COSMIC_POWER - .byte EFFECT_BULK_UP - .byte EFFECT_CALM_MIND - .byte EFFECT_DRAGON_DANCE - .byte -1 - -AI_HPAware_DiscouragedEffectsWhenTargetHighHP: - .byte -1 - -AI_HPAware_DiscouragedEffectsWhenTargetMediumHP: - .byte EFFECT_ATTACK_UP - .byte EFFECT_DEFENSE_UP - .byte EFFECT_SPEED_UP - .byte EFFECT_SPECIAL_ATTACK_UP - .byte EFFECT_SPECIAL_DEFENSE_UP - .byte EFFECT_ACCURACY_UP - .byte EFFECT_EVASION_UP - .byte EFFECT_ATTACK_DOWN - .byte EFFECT_DEFENSE_DOWN - .byte EFFECT_SPEED_DOWN - .byte EFFECT_SPECIAL_ATTACK_DOWN - .byte EFFECT_SPECIAL_DEFENSE_DOWN - .byte EFFECT_ACCURACY_DOWN - .byte EFFECT_EVASION_DOWN - .byte EFFECT_MIST - .byte EFFECT_FOCUS_ENERGY - .byte EFFECT_ATTACK_UP_2 - .byte EFFECT_DEFENSE_UP_2 - .byte EFFECT_SPEED_UP_2 - .byte EFFECT_SPECIAL_ATTACK_UP_2 - .byte EFFECT_SPECIAL_DEFENSE_UP_2 - .byte EFFECT_ACCURACY_UP_2 - .byte EFFECT_EVASION_UP_2 - .byte EFFECT_ATTACK_DOWN_2 - .byte EFFECT_DEFENSE_DOWN_2 - .byte EFFECT_SPEED_DOWN_2 - .byte EFFECT_SPECIAL_ATTACK_DOWN_2 - .byte EFFECT_SPECIAL_DEFENSE_DOWN_2 - .byte EFFECT_ACCURACY_DOWN_2 - .byte EFFECT_EVASION_DOWN_2 - .byte EFFECT_POISON - .byte EFFECT_PAIN_SPLIT - .byte EFFECT_PERISH_SONG - .byte EFFECT_SAFEGUARD - .byte EFFECT_TICKLE - .byte EFFECT_COSMIC_POWER - .byte EFFECT_BULK_UP - .byte EFFECT_CALM_MIND - .byte EFFECT_DRAGON_DANCE - .byte -1 - -AI_HPAware_DiscouragedEffectsWhenTargetLowHP: - .byte EFFECT_SLEEP - .byte EFFECT_EXPLOSION - .byte EFFECT_ATTACK_UP - .byte EFFECT_DEFENSE_UP - .byte EFFECT_SPEED_UP - .byte EFFECT_SPECIAL_ATTACK_UP - .byte EFFECT_SPECIAL_DEFENSE_UP - .byte EFFECT_ACCURACY_UP - .byte EFFECT_EVASION_UP - .byte EFFECT_ATTACK_DOWN - .byte EFFECT_DEFENSE_DOWN - .byte EFFECT_SPEED_DOWN - .byte EFFECT_SPECIAL_ATTACK_DOWN - .byte EFFECT_SPECIAL_DEFENSE_DOWN - .byte EFFECT_ACCURACY_DOWN - .byte EFFECT_EVASION_DOWN - .byte EFFECT_BIDE - .byte EFFECT_CONVERSION - .byte EFFECT_TOXIC - .byte EFFECT_LIGHT_SCREEN - .byte EFFECT_OHKO - .byte EFFECT_SUPER_FANG //Maybe supposed to be EFFECT_RAZOR_WIND - .byte EFFECT_SUPER_FANG - .byte EFFECT_MIST - .byte EFFECT_FOCUS_ENERGY - .byte EFFECT_CONFUSE - .byte EFFECT_ATTACK_UP_2 - .byte EFFECT_DEFENSE_UP_2 - .byte EFFECT_SPEED_UP_2 - .byte EFFECT_SPECIAL_ATTACK_UP_2 - .byte EFFECT_SPECIAL_DEFENSE_UP_2 - .byte EFFECT_ACCURACY_UP_2 - .byte EFFECT_EVASION_UP_2 - .byte EFFECT_ATTACK_DOWN_2 - .byte EFFECT_DEFENSE_DOWN_2 - .byte EFFECT_SPEED_DOWN_2 - .byte EFFECT_SPECIAL_ATTACK_DOWN_2 - .byte EFFECT_SPECIAL_DEFENSE_DOWN_2 - .byte EFFECT_ACCURACY_DOWN_2 - .byte EFFECT_EVASION_DOWN_2 - .byte EFFECT_POISON - .byte EFFECT_PARALYZE - .byte EFFECT_PAIN_SPLIT - .byte EFFECT_CONVERSION_2 - .byte EFFECT_LOCK_ON - .byte EFFECT_SPITE - .byte EFFECT_PERISH_SONG - .byte EFFECT_SWAGGER - .byte EFFECT_FURY_CUTTER - .byte EFFECT_ATTRACT - .byte EFFECT_SAFEGUARD - .byte EFFECT_PSYCH_UP - .byte EFFECT_MIRROR_COAT - .byte EFFECT_WILL_O_WISP - .byte EFFECT_TICKLE - .byte EFFECT_COSMIC_POWER - .byte EFFECT_BULK_UP - .byte EFFECT_CALM_MIND - .byte EFFECT_DRAGON_DANCE - .byte -1 - -@ Given the AI_TryOnAlly at the beginning it's possible that this was the start of a more -@ comprehensive double battle AI script -AI_TrySunnyDayStart: - if_target_is_ally AI_TryOnAlly - if_not_effect EFFECT_SUNNY_DAY, AI_TrySunnyDayStart_End -.ifndef BUGFIX @ funcResult has not been set in this script yet, below call is nonsense - if_equal FALSE, AI_TrySunnyDayStart_End -.endif - is_first_turn_for AI_USER - if_equal FALSE, AI_TrySunnyDayStart_End - score +5 -AI_TrySunnyDayStart_End: - end - -AI_Roaming: - if_status2 AI_USER, STATUS2_WRAPPED, AI_Roaming_End - if_status2 AI_USER, STATUS2_ESCAPE_PREVENTION, AI_Roaming_End - get_ability AI_TARGET - if_equal ABILITY_SHADOW_TAG, AI_Roaming_End - get_ability AI_USER - if_equal ABILITY_LEVITATE, AI_Roaming_Flee - get_ability AI_TARGET - if_equal ABILITY_ARENA_TRAP, AI_Roaming_End -AI_Roaming_Flee: - flee - -AI_Roaming_End: - end - -AI_Safari: - if_random_safari_flee AI_Safari_Flee - watch - -AI_Safari_Flee: - flee - -AI_FirstBattle: - if_hp_equal AI_TARGET, 20, AI_FirstBattle_Flee - if_hp_less_than AI_TARGET, 20, AI_FirstBattle_Flee - end - -AI_FirstBattle_Flee: - flee - -AI_Ret: - end diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index e7aad6a931..23eb678f96 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -2,7 +2,11 @@ #include "constants/battle_anim.h" #include "constants/rgb.h" #include "constants/songs.h" +#include "constants/sound.h" #include "constants/moves.h" +#include "constants/pokemon.h" +#include "constants/items.h" +#include "constants/battle_config.h" .include "asm/macros.inc" .include "asm/macros/battle_anim_script.inc" .include "constants/constants.inc" @@ -151,7 +155,7 @@ gBattleAnims_Moves:: .4byte Move_AMNESIA .4byte Move_KINESIS .4byte Move_SOFT_BOILED - .4byte Move_HI_JUMP_KICK + .4byte Move_HIGH_JUMP_KICK .4byte Move_GLARE .4byte Move_DREAM_EATER .4byte Move_POISON_GAS @@ -280,7 +284,7 @@ gBattleAnims_Moves:: .4byte Move_MEMENTO .4byte Move_FACADE .4byte Move_FOCUS_PUNCH - .4byte Move_SMELLING_SALT + .4byte Move_SMELLING_SALTS .4byte Move_FOLLOW_ME .4byte Move_NATURE_POWER .4byte Move_CHARGE @@ -370,7 +374,474 @@ gBattleAnims_Moves:: .4byte Move_WATER_PULSE .4byte Move_DOOM_DESIRE .4byte Move_PSYCHO_BOOST - .4byte Move_COUNT @ cannot be reached, because last move is 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 +@@@@ 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 +@@@ Last Move - cannot be reached + .4byte Move_COUNT .align 2 gBattleAnims_StatusConditions:: @@ -383,6 +854,7 @@ gBattleAnims_StatusConditions:: .4byte Status_Freeze @ B_ANIM_STATUS_FRZ .4byte Status_Curse @ B_ANIM_STATUS_CURSED .4byte Status_Nightmare @ B_ANIM_STATUS_NIGHTMARE + .4byte Status_Powder .align 2 gBattleAnims_General:: @@ -395,7 +867,7 @@ gBattleAnims_General:: .4byte General_TurnTrap @ B_ANIM_TURN_TRAP .4byte General_HeldItemEffect @ B_ANIM_HELD_ITEM_EFFECT .4byte General_SmokeballEscape @ B_ANIM_SMOKEBALL_ESCAPE - .4byte General_FocusBand @ B_ANIM_FOCUS_BAND + .4byte General_HangedOn @ B_ANIM_HANGED_ON .4byte General_Rain @ B_ANIM_RAIN_CONTINUES .4byte General_Sun @ B_ANIM_SUN_CONTINUES .4byte General_Sandstorm @ B_ANIM_SANDSTORM_CONTINUES @@ -409,6 +881,20 @@ gBattleAnims_General:: .4byte General_FocusPunchSetUp @ B_ANIM_FOCUS_PUNCH_SETUP .4byte General_IngrainHeal @ B_ANIM_INGRAIN_HEAL .4byte General_WishHeal @ B_ANIM_WISH_HEAL + .4byte General_MegaEvolution @ B_ANIM_MEGA_EVOLUTION + .4byte General_IllusionOff @ B_ANIM_ILLUSION_OFF + .4byte General_FormChange @ B_ANIM_FORM_CHANGE + .4byte General_SlideOffScreen @ B_ANIM_SLIDE_OFFSCREEN + .4byte General_RestoreBg @ B_ANIM_RESTORE_BG + .4byte General_TotemFlare @ B_ANIM_TOTEM_FLARE + .4byte General_GulpMissile @ B_ANIM_GULP_MISSILE + .4byte General_StrongWinds @ B_ANIM_STRONG_WINDS + .4byte General_PrimalReversion @ B_ANIM_PRIMAL_REVERSION + .4byte General_AquaRingHeal @ B_ANIM_AQUA_RING_HEAL + .4byte General_BeakBlastSetUp @ B_ANIM_BEAK_BLAST_SETUP + .4byte General_ShellTrapSetUp @ B_ANIM_SHELL_TRAP_SETUP + .4byte General_ZMoveActivate @ B_ANIM_ZMOVE_ACTIVATE + .4byte General_AffectionHangedOn @ B_ANIM_AFFECTION_HANGED_ON .align 2 gBattleAnims_Special:: @@ -419,7 +905,13443 @@ gBattleAnims_Special:: .4byte Special_BallThrowWithTrainer @ B_ANIM_BALL_THROW_WITH_TRAINER .4byte Special_SubstituteToMon @ B_ANIM_SUBSTITUTE_TO_MON .4byte Special_MonToSubstitute @ B_ANIM_MON_TO_SUBSTITUTE + .4byte Special_CriticalCaptureBallThrow @ B_ANIM_CRITICAL_CAPTURE_THROW +@@@@@@@@@@@@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@@@@@@@@@@@@ +Move_ROOST: + loadspritegfx ANIM_TAG_WHITE_FEATHER + loadspritegfx ANIM_TAG_BLUE_STAR + monbg ANIM_ATTACKER + splitbgprio_all + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_TARGET + delay 0 + createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 64, 2, 104, 11304, 32, 1 + delay 6 + createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 32, 2, 104, 11304, 32, 1 + createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 0, 2, 104, 11304, 32, 1 + delay 6 + createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 224, 2, 104, 11304, 32, 1 + createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 128, 2, 104, 11304, 32, 1 + delay 6 + createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 192, 2, 104, 11304, 32, 1 + createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 160, 2, 104, 11304, 32, 1 + delay 6 + createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 96, 2, 104, 11304, 32, 1 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + call HealingEffect + waitforvisualfinish + end + +Move_GRAVITY: + fadetobg BG_COSMIC + waitbgfadein + createvisualtask AnimTask_SetAnimTargetToAttackerOpposite, 1 + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ShakeAndSinkMon, 5, ANIM_ATTACKER, 2, 0, 96, 30 + createvisualtask AnimTask_ShakeAndSinkMon, 5, ANIM_DEF_PARTNER, 2, 0, 96, 30 + createvisualtask AnimTask_ShakeAndSinkMon, 5, ANIM_ATK_PARTNER, 2, 0, 96, 30 + createvisualtask AnimTask_ShakeAndSinkMon, 5, ANIM_TARGET, 2, 0, 96, 30 + waitforvisualfinish + restorebg + waitbgfadeout + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 3, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATK_PARTNER, 3, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 1, 1 + setarg 0x7, 0xffff + waitbgfadein + waitforvisualfinish + end + +Move_MIRACLE_EYE: + loadspritegfx ANIM_TAG_TEAL_ALERT + loadspritegfx ANIM_TAG_OPENING_EYE + loadspritegfx ANIM_TAG_ROUND_WHITE_HALO + monbg ANIM_DEF_PARTNER + call SetPsychicBackground + playsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_TARGET + createsprite gOpeningEyeSpriteTemplate, ANIM_ATTACKER, 5, 0, 0, 1, 0 + createsprite gWhiteHaloSpriteTemplate, ANIM_ATTACKER, 5 + delay 40 + playsewithpan SE_M_LEER, SOUND_PAN_TARGET + createvisualtask AnimTask_BlendColorCycle, 2, 1, 1, 2, 0, 10, RGB_BLACK + call MindReaderEyeSpikeEffect + waitforvisualfinish + call UnsetPsychicBg + clearmonbg ANIM_DEF_PARTNER + end + +Move_WAKE_UP_SLAP: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 0, 0, 10, 1, 3, 0 + waitforvisualfinish + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 2 + waitforvisualfinish + createsprite gSmellingSaltExclamationSpriteTemplate, ANIM_TARGET, 2, 1, 8, 3 + loopsewithpan SE_M_SWAGGER2, +63, 16, 3 + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_HAMMER_ARM: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_SLAM_HIT + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 3, 0, 4 + delay 1 + createsprite gSlamHitSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 + delay 3 + setarg 7, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, -8, 1, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 5, 1 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -12, 32, 3, 4 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 8, 31, 2, 2 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -4, 28, 2, 3 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 30, 4, 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 2, 0, 0, 5 + clearmonbg ANIM_TARGET + blendoff + end + +Move_GYRO_BALL: + loadspritegfx ANIM_TAG_IMPACT + loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + waitforvisualfinish + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 3 + waitforvisualfinish + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, 1, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 + waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 0, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 1, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 0, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 1, 1 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + end + +Move_HEALING_WISH: + loadspritegfx ANIM_TAG_GREEN_SPARKLE + setalpha 0, 16 + createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 + playsewithpan SE_M_MOONLIGHT, 0 + delay 30 + createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, -12, 0 + delay 30 + createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, -24, 0 + delay 30 + createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, 21, 0 + delay 30 + createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, 0, 0 + delay 30 + createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, 10, 0 + delay 20 + createvisualtask AnimTask_MoonlightEndFade, 2 + waitforvisualfinish + end + +Move_BRINE: + loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB + loadspritegfx ANIM_TAG_WATER_IMPACT + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_DIVE, -64 + waitforvisualfinish + delay 16 + createvisualtask AnimTask_WaterSpoutRain, 5 + playsewithpan SE_M_SURF, +63 + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_NATURAL_GIFT: + loadspritegfx ANIM_TAG_SPARKLE_2 + loadspritegfx ANIM_TAG_HOLLOW_ORB + monbg ANIM_ATTACKER + splitbgprio ANIM_ATTACKER + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 16, RGB(27, 31, 18) + playsewithpan SE_M_MEGA_KICK, -64 + call GrantingStarsEffect + waitforvisualfinish + delay 1 + createvisualtask AnimTask_DragonDanceWaver, 5 + playsewithpan SE_M_TELEPORT, -64 + delay 8 + createvisualtask AnimTask_BlendPalInAndOutByTag, 5, 10249, 19456, 14, 0, 3 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 43 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 85 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 128 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 170 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 213 + delay 30 + playsewithpan SE_M_TELEPORT, -64 + delay 30 + playsewithpan SE_M_TELEPORT, -64 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 1 + end + +Move_FEINT: + loadspritegfx ANIM_TAG_FEINT + createsprite gFeintSwipeSpriteTemplate, ANIM_ATTACKER, 10, -32, 0, 15 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + delay 15 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + delay 15 + waitforvisualfinish + delay 5 + createsprite gFeintZoomSpriteTemplate, ANIM_ATTACKER, 10, 0, 0 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + waitforvisualfinish + end + +Move_PLUCK: + loadspritegfx ANIM_TAG_SEED_BROWN + loadspritegfx ANIM_TAG_IMPACT + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 40, -10, -5, 1, 2 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 3, 0, 20, 2, 1 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 7, 1, 20, 1, 1 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -3, 5, 25, 2, -1 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 4, -4, 30, 3, -1 + delay 30 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 40, 5, 10, 1, 2 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 3, -4, 20, 1, 1 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 7, -6, 20, 0, 1 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -3, -9, 25, 1, -1 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 4, -4, 30, 2, -1 + delay 30 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 1, 2 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -3, -4, 20, 1, 1 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 7, -6, 25, 0, 1 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -4, -10, 25, 1, 1 + createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 4, -4, 25, 1, 2 + waitforvisualfinish + end + +Move_TAILWIND: + loadspritegfx ANIM_TAG_FLYING_DIRT + playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER + call SetHighSpeedBg + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 4, 4 + createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 10 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 10, 2304, 96, 0 + delay 12 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 90, 2048, 96, 0 + delay 12 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 50, 2560, 96, 0 + delay 12 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 20, 2304, 96, 0 + delay 12 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 70, 1984, 96, 0 + delay 12 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0, 2816, 96, 0 + delay 10 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 0 + waitforvisualfinish + stopsound + call UnsetHighSpeedBg + clearmonbg ANIM_ATK_PARTNER + blendoff + delay 1 + end + +Move_ACUPRESSURE: + loadspritegfx ANIM_TAG_ACCUPRESSURE + loadspritegfx ANIM_TAG_SPARK_2 + createsprite gAccupressureSpriteTemplate, ANIM_ATTACKER, 40, 0, -40, 40 + waitforvisualfinish + call ElectricityEffect + end + +Move_METAL_BURST: + loadspritegfx ANIM_TAG_ECLIPSING_ORB + loadspritegfx ANIM_TAG_RED_ORB + loopsewithpan SE_M_TRI_ATTACK, -64, 18, 3 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 0 + createvisualtask AnimTask_DefenseCurlDeformMon, 5 + waitforvisualfinish + setarg 7, -1 + playsewithpan SE_M_REFLECT, -64 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 0 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 32 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 64 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 96 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 128 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 160 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 20, 192 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224 + waitforvisualfinish + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 1 + waitforvisualfinish + end + +Move_U_TURN: + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + createvisualtask AnimTask_CanBattlerSwitch, 1, ANIM_ATTACKER + jumpretfalse UTurnVisible + createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, TRUE +UTurnContinue: + delay 20 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + createvisualtask AnimTask_CanBattlerSwitch, 1, ANIM_ATTACKER + jumpretfalse UTurnLast + invisible ANIM_ATTACKER +UTurnLast: + blendoff + waitforvisualfinish + end +UTurnVisible: + createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE + goto UTurnContinue + +Move_CLOSE_COMBAT: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET + call SetHighSpeedBg + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 10 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + playsewithpan SE_M_VITAL_THROW2, +63 + delay 10 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + playsewithpan SE_M_MEGA_KICK2, +63 + delay 10 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 10 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + playsewithpan SE_M_VITAL_THROW2, +63 + delay 10 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + playsewithpan SE_M_MEGA_KICK2, +63 + delay 10 + call UnsetHighSpeedBg + clearmonbg ANIM_TARGET + blendoff + delay 1 + setarg 7, 0x1000 + delay 1 + end + +Move_PAYBACK: + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + fadetobg BG_DARK + waitbgfadein + delay 0 + 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 + end + +Move_ASSURANCE: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE + monbg ANIM_TARGET + fadetobg BG_DARK + waitbgfadein + delay 0 + setalpha 12, 8 + createsprite gPalmSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0 + playsewithpan SE_M_VITAL_THROW2, -64 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + delay 0 + restorebg + waitbgfadein + end + +Move_EMBARGO: + loadspritegfx ANIM_TAG_RED_ORB + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + loopsewithpan SE_M_POISON_POWDER, +63, 18, 10 + call EmbargoOrbs1 + call EmbargoOrbs1 + call EmbargoOrbs1 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 10, 1 + playsewithpan SE_M_NIGHTMARE, +63 + clearmonbg ANIM_DEF_PARTNER + end +EmbargoOrbs1: + createsprite gPowerOrbs_Float, ANIM_ATTACKER, 2, 0, -20, 85, 80, 0 + delay 12 + createsprite gPowerOrbs_Float, ANIM_ATTACKER, 2, 0, -10, 170, 80, 0 + delay 12 + createsprite gPowerOrbs_Float, ANIM_ATTACKER, 2, 0, -15, 0, 80, 0 + delay 12 + return + +Move_FLING: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_BLACK_BALL + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + createsprite gBlackBallSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25 + playsewithpan SE_M_SWAGGER, -64 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_VITAL_THROW, +63 + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_PSYCHO_SHIFT: + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_HOLLOW_ORB + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_THIN_RING + monbg ANIM_ATTACKER + setalpha 12, 8 + playsewithpan SE_M_MEGA_KICK, -64 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 + delay 30 + waitforvisualfinish + createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 1, 0 + playsewithpan SE_M_SUPERSONIC, -64 + delay 14 + createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 1, 0 + playsewithpan SE_M_SUPERSONIC, -64 + delay 14 + createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 1, 0 + playsewithpan SE_M_SUPERSONIC, -64 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end + clearmonbg ANIM_ATTACKER + blendoff + end + +Move_TRUMP_CARD: + loadspritegfx ANIM_TAG_TRUMP_CARD + loadspritegfx ANIM_TAG_CUT + loadspritegfx ANIM_TAG_TRUMP_CARD_PARTICLES + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_TARGET + createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 0, 32 + delay 2 + createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 1, 32 + delay 2 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_TARGET + createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 0, 32 + delay 2 + createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 2, 32 + delay 2 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_TARGET + createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 2, 32 + delay 2 + createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 2, 32 + delay 2 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_TARGET + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 + createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 1, 32 + delay 2 + createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 1, 32 + delay 3 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 + createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 1, 12, -5, -4, 0 + createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 0, 13, 5, 4, 1 + createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 1, 8, -3, 0, 2 + createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 2, 12, -5, 4, 3 + delay 2 + createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 1, 10, 1, -4, 4 + createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 0, 13, 5, 6, 1 + createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 1, 12, -2, 1, 3 + createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 2, 13, -2, 1, 2 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + waitforvisualfinish + end + +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 + createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 0, -5, 1, 0 + delay 7 + createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, 10, 1, 0 + delay 7 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1 | 4, 4, 2, 12, 0, RGB_BLACK + createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 0, -5, 1, 0 + delay 7 + createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, 10, 1, 0 + delay 7 + createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, -15, 1, 0 + delay 7 + createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 10, -5, 1, 0 + delay 7 + waitforvisualfinish + delay 11 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1 | 4, 4, 2, 0, 12, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +Move_WRING_OUT: + loadspritegfx ANIM_TAG_WRING_OUT + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, FALSE + delay 3 + createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, TRUE + delay 3 + createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, TRUE + delay 3 + createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, TRUE + delay 3 + createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, TRUE + delay 3 + createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, TRUE + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + waitforvisualfinish + end + +Move_POWER_TRICK: + loadspritegfx ANIM_TAG_POWER_TRICK + loopsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET 0xa 0x3 + createvisualtask AnimTask_UproarDistortion 0x2, 0x0 + createsprite gPowerTrickSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0, 0, SOUND_PAN_TARGET, 0 + delay 0x10 + createvisualtask AnimTask_UproarDistortion 0x2, 0x0 + delay 0x10 + createvisualtask AnimTask_UproarDistortion 0x2, 0x0 + waitforvisualfinish + end + +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 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 5 + createsprite gGreenPoisonBubble, ANIM_TARGET, 2, 20, 0, 40, 1, 24, 0, FALSE + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 5 + createsprite gGreenPoisonBubble, ANIM_TARGET, 2, 20, 0, 40, 1, -24, 0, FALSE + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 15 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 + createvisualtask AnimTask_BlendColorCycle, 2, ANIM_PAL_DEF, 2, 2, 0, 12, RGB(30, 0, 31) + createsprite gGreenPoisonDrip, ANIM_TARGET, 2, 0, -22, 0, 15, 55, FALSE + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + delay 10 + createsprite gGreenPoisonDrip, ANIM_TARGET, 2, -26, -24, 0, 15, 55, FALSE + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + delay 10 + createsprite gGreenPoisonDrip, ANIM_TARGET, 2, 15, -27, 0, 15, 50, FALSE + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + delay 10 + createsprite gGreenPoisonDrip, ANIM_TARGET, 2, -15, -17, 0, 10, 45, FALSE + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + delay 10 + createsprite gGreenPoisonDrip, ANIM_TARGET, 2, 27, -22, 0, 15, 50, FALSE + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_LUCKY_CHANT: + loadspritegfx ANIM_TAG_GOLD_STARS + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + createsprite gLuckyChantBigStarsSpriteTemplate, 2, 4, 0, -18, 8, 140 + createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, 16, -18, 8, 100 + createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, -16, -18, 8, 100 + delay 15 + createsprite gLuckyChantBigStarsSpriteTemplate 2, 4, 0, -18, 8, 140 + createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, 32, -18, 8, 100 + createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, -32, -18, 8, 100 + delay 15 + createsprite gLuckyChantBigStarsSpriteTemplate 2, 4, 0, -18, 8, 140 + createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, 24, -18, 8, 100 + createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, -18, -18, 8, 100 + delay 30 + createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, 16, -18, 0, 100 + createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, -16, -18, 0, 100 + delay 30 + createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, 20, -16, 14, 80 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + unloadspritegfx ANIM_TAG_GOLD_STARS + end + +Move_ME_FIRST: + end + +Move_COPYCAT: + loadspritegfx ANIM_TAG_GRAY_ORB + loadspritegfx ANIM_TAG_THIN_RING + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendColorCycle, 2, 2, 8, 1, 0, 12, RGB_WHITE + createvisualtask AnimTask_StockpileDeformMon, 5 + call StockpileAbsorb + call StockpileAbsorb + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 12, 0, RGB_WHITE + waitforvisualfinish + createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 0, 0 + playsewithpan SE_M_SUPERSONIC, -64 + delay 14 + createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 0, 0 + playsewithpan SE_M_SUPERSONIC, -64 + delay 14 + createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 0, 0 + playsewithpan SE_M_SUPERSONIC, -64 + waitforvisualfinish + end + +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 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32 + delay 2 + playsewithpan SE_M_DOUBLE_TEAM, 0 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32 + + waitforvisualfinish + playsewithpan SE_M_DOUBLE_TEAM, 0 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 0, 42, -32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32 + delay 2 + playsewithpan SE_M_DOUBLE_TEAM, 0 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32 + delay 2 + waitforvisualfinish + end + +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 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32 + delay 2 + playsewithpan SE_M_DOUBLE_TEAM, 0 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32 + + waitforvisualfinish + playsewithpan SE_M_DOUBLE_TEAM, 0 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 0, 42, -32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32 + delay 2 + playsewithpan SE_M_DOUBLE_TEAM, 0 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32 + delay 2 + createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32 + delay 2 + waitforvisualfinish + end + +Move_PUNISHMENT: + loadspritegfx ANIM_TAG_SCRATCH + loadspritegfx ANIM_TAG_POISON_BUBBLE + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan 155, SOUND_PAN_TARGET + createsprite gPunishmentSpriteTemplate, 2, 4, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + waitforvisualfinish + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + createsprite gPunishmentImpactSpriteTemplate 2, 4, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon 2, ANIM_TARGET, 3, 0, 6, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_LAST_RESORT: + fadetobg BG_COSMIC + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 2, 4, 0, 128, 0, -1 + waitbgfadein + loadspritegfx ANIM_TAG_IMPACT + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + createsprite gComplexPaletteBlendSpriteTemplate, 2, 7, 2, 4, 2, RGB(31, 31, 31), 10, 0, 0 + waitforvisualfinish + delay 10 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 18, 6, 2, 4 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 0, 16, 16, RGB(31, 31, 31) + createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 + delay 3 + waitforvisualfinish + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, 132, 4, -10, 0, 1, 0 + createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 1, -32, 0, 0, 3 + waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 8, -256, 0, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 8, -256, 1, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 0, 4, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 4, 0, 12, 1 + createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 2, 16, 0, RGB(31, 31, 31) + waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 8, -256, 0, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 8, -256, 1, 1 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 1, 0, 7 + waitforvisualfinish + call UnsetHighSpeedBg + end + +Move_WORRY_SEED: + loadspritegfx ANIM_TAG_WORRY_SEED + loadspritegfx ANIM_TAG_SMALL_CLOUD + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER + createsprite gWorrySeedSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 32, -32 + waitforvisualfinish + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET + createsprite gSmallCloudTemplate, ANIM_ATTACKER, 3, -2, -1, 0, -1, -1 + createsprite gSmallCloudTemplate, ANIM_ATTACKER, 3, 3, 1, 1, 2, -1 + createsprite gSmallCloudTemplate, ANIM_ATTACKER, 3, -2, 1, 2, 1, -2 + createsprite gSmallCloudTemplate, ANIM_ATTACKER, 3, 3, -2, 1, -1, -2 + waitforvisualfinish + end + +Move_SUCKER_PUNCH: + loadspritegfx ANIM_TAG_POISON_JAB + loadspritegfx ANIM_TAG_IMPACT + createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 + createsprite gSuckerPunchSpriteTemplate, 130, 6, -18, 5, 40, 8, 160, 0 + delay 4 + createsprite gBasicHitSplatSpriteTemplate, 130, 4, -8, 8, 1, 2 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 6, 384, 1, 2 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4 + end + +Move_TOXIC_SPIKES: + loadspritegfx ANIM_TAG_TOXIC_SPIKES + loadspritegfx ANIM_TAG_POISON_BUBBLE + monbg ANIM_DEF_PARTNER + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28 + createsprite gToxicSpikesSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 24, 30 + delay 10 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28 + createsprite gToxicSpikesSpriteTemplate, ANIM_TARGET, 2, 20, 0, -24, 24, 30 + delay 10 + waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28 + createsprite gToxicSpikesSpriteTemplate, ANIM_TARGET, 2, 20, 0, 24, 24, 30 + delay 40 + call PoisonBubblesEffect + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_HEART_SWAP: + end + +Move_AQUA_RING: +General_AquaRingHeal: + loadspritegfx ANIM_TAG_BLUE_STAR + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_ICE_CRYSTALS + loadspritegfx ANIM_TAG_GUARD_RING + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_GUARD_RING, 0, 14, 14, RGB_BLUE + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 23, 1 + delay 5 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, 10, 10, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, -15, 0, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, 20, 10, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, 0, -10, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, -10, 15, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, 25, 20, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, -20, 20, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, 12, 0, 25, 0 + setalpha 8, 8 + playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER, + createsprite gGuardRingSpriteTemplate, 2, 0 + delay 4 + createsprite gGuardRingSpriteTemplate, 2, 0 + delay 4 + createsprite gGuardRingSpriteTemplate, 2, 0 + waitforvisualfinish + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendColorCycle, 2, 10, 0, 2, 10, RGB(31, 31, 31) + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + end + +Move_MAGNET_RISE: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_SPARK_2 + delay 0 + createvisualtask AnimTask_BlendColorCycle 2, 31, -31, 1, 5, 5, RGB(31, 31, 20) + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createvisualtask AnimTask_WindUpLunge, 5, 7, 0, -12, 4, 10, 10, 12, 6 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 32, 24, 190, 12, 0, 1, 0 + delay 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 80, 24, 22, 12, 0, 1, 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 156, 24, 121, 13, 0, 1, 1 + delay 0 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 4 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 100, 24, 60, 10, 0, 1, 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 170, 24, 42, 11, 0, 1, 1 + delay 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 238, 24, 165, 10, 0, 1, 1 + delay 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 32, 24, 190, 12, 0, 1, 0 + delay 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 80, 24, 22, 12, 0, 1, 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 156, 24, 121, 13, 0, 1, 1 + delay 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 100, 24, 60, 10, 0, 1, 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 170, 24, 42, 11, 0, 1, 1 + delay 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 238, 24, 165, 10, 0, 1, 1 + delay 0 + createvisualtask AnimTask_BlendColorCycle, 2, 31, -31, 1, 0, 0, RGB(31, 31, 20) + delay 20 + createvisualtask AnimTask_BlendColorCycle, 2, 31, -31, 1, 7, 7, RGB(31, 31, 20) + waitforvisualfinish + createvisualtask AnimTask_BlendColorCycle, 2, 31, -31, 1, 0, 0, RGB(31, 31, 20) + waitforvisualfinish + end + +Move_FLARE_BLITZ: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_SMALL_EMBER + monbg ANIM_TARGET + splitbgprio_foes ANIM_TARGET + setalpha 12, 8 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 2 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 6 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 10 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + waitforvisualfinish + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 1, 4 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 6 + waitforvisualfinish + call SetImpactBackground + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 + createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0 + createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, 192, 176, 40 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, 1, 0 + createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 + createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, -192, 240, 40 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, 1, 0 + createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 + createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, 192, -160, 40 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, 1, 0 + createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 + createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, -192, -112, 40 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, 1, 0 + createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 + createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, 160, 48, 40 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, 1, 0 + createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 + createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, -224, -32, 40 + createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, 112, -128, 40 + playsewithpan SE_M_COMET_PUNCH, +63 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 0, RGB_BLACK + playsewithpan SE_M_COMET_PUNCH, +63 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 9 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + delay 2 + restorebg + waitbgfadein + end + +Move_FORCE_PALM: + loadspritegfx ANIM_TAG_SHADOW_BALL + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + createsprite gKarateChopSpriteTemplate, 2, 8, -16, 0, 0, 0, 10, 1, 3, 0 + waitforvisualfinish + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gForcePalmSpriteTemplate 3, 4, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_AURA_SPHERE: + loadspritegfx ANIM_TAG_METEOR + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + setalpha 12, 8 + call SetAuraSphereBG + playsewithpan SE_M_SKY_UPPERCUT, 0 + delay 60 + createsprite gAuraSphereBlast, ANIM_TARGET, 3, 0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + delay 16 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 16, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + waitforvisualfinish + call UnsetHighSpeedBg + clearmonbg ANIM_ATK_PARTNER + blendoff + delay 1 + end + +SetAuraSphereBG: + fadetobg BG_AURA_SPHERE + goto SetHighSpeedBgFade + +Move_ROCK_POLISH: + loadspritegfx ANIM_TAG_WHITE_STREAK + loadspritegfx ANIM_TAG_SPARKLE_3 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 0, 12, RGB_BLACK + waitforvisualfinish + loopsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 10, 7 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -10, 3 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 24, -19 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -28, -15 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -6, -30 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -20, 6 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 28, 2 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -14, -25 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 9, -2 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -1, 0 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 21, 4 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 28, 20 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -7, 24 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -11, 1 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 12, -18 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -21, -14 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -29, 7 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 15, 28 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -21, -16 + delay 2 + waitforvisualfinish + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -20, 9 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -10, -15 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 1, 17 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -23, -16 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, -6 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -16, -7 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 22, -7 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -19, 11 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 12, 12 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 0, -17 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 12, 0, RGB_BLACK + waitforvisualfinish + blendoff + end + +Move_POISON_JAB: + loadspritegfx ANIM_TAG_PURPLE_JAB + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_POISON_BUBBLE + setalpha 12, 8 + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 3, -31, 10 + delay 2 + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -18, -25, 10 + delay 2 + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 27, 17, 10 + delay 2 + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -26, 18, 10 + delay 2 + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 10, 30, 10 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -7, 4, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -17, -27, 10 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -4, -6, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 2, 31, 10 + createvisualtask AnimTask_SwayMon, 5, 0, 3, 0x2000, 6, ANIM_TARGET + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB(16, 0, 16), 12, 0, 1 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 6, 4, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 15, -27, 10 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -6, 8, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -31, -2, 10 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 12, 6, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -26, -18, 10 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -6, -8, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 8, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -8, 0, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -7, -5, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + call PoisonBubblesEffect + waitforvisualfinish + blendoff + end + +Move_DARK_PULSE: + loadspritegfx ANIM_TAG_THIN_RING + monbg ANIM_TARGET + fadetobg BG_DARK + waitbgfadein + delay 0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 + createvisualtask AnimTask_SpiteTargetShadow, 2 + loopsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET, 20, 3 + delay 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 + delay 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 + delay 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 + delay 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 + delay 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 + delay 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 + waitforvisualfinish + clearmonbg ANIM_TARGET + delay 1 + restorebg + waitbgfadein + end + +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 + waitforvisualfinish + createsprite gNightSlashLeftSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gNightSlashLeftSpriteTemplate, ANIM_TARGET, 2, 1, 8, 0 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 + delay 40 + createsprite gNightSlashRightSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 + createsprite gNightSlashRightSpriteTemplate, ANIM_TARGET, 2, 1, 8, 0 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 18, 1 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 12, 0, RGB_BLACK + waitforvisualfinish + end + +Move_AQUA_TAIL: + loadspritegfx ANIM_TAG_WATER_IMPACT + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_ICE_CRYSTALS + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 23, 1 + delay 5 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, 10, 10, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, -16, 0, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, 20, 10, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, 0, -10, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, -10, 15, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, 25, 20, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, -20, 20, 25, 0 + delay 4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, 2, 4, 12, 0, 25, 0 + waitforvisualfinish + loadspritegfx ANIM_TAG_SLAM_HIT_2 + loadspritegfx ANIM_TAG_IMPACT + createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 6 + delay 4 + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET + createsprite gAquaTailKnockOffSpriteTemplate, 130, 2, -16, -16 + delay 8 + createsprite gComplexPaletteBlendSpriteTemplate, 2, 7, 31, 5, 1, RGB(31, 31, 31), 10, 0, 0 + createsprite gAquaTailHitSpriteTemplate, 131, 4, 0, 0, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 1, -12, 10, 0, 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 0, 5 + delay 3 + createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 0, 3, 6, 1 + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 1, 0, 6 + delay 10 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_SEED_BOMB: + loadspritegfx ANIM_TAG_SEED + loadspritegfx ANIM_TAG_EXPLOSION + createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 + delay 5 + createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 + delay 5 + createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 + delay 5 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 30, 1 + createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 1, 0 + delay 6 + createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -16, -15, 1, 0 + delay 6 + createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 16, -5, 1, 0 + delay 6 + createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -12, 18, 1, 0 + delay 6 + createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 1, 0 + delay 6 + createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 1, 0 + delay 6 + createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -16, -15, 1, 0 + delay 6 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 16, -5, 1, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -12, 18, 1, 0 + delay 6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 1, 0 + waitforvisualfinish + end + +Move_AIR_SLASH: + loadspritegfx ANIM_TAG_SLASH + call SetSkyBg + createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, 8, 0 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 18, 1 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + waitforvisualfinish + call UnsetSkyBg + end + +Move_XSCISSOR: + loadspritegfx ANIM_TAG_CUT + monbg ANIM_TARGET + setalpha 12, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 + createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 3 + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + delay 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 10, 0, 0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_BUG_BUZZ: + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE + loadspritegfx ANIM_TAG_THIN_RING + monbg ANIM_DEF_PARTNER + call SetBugBg + createvisualtask AnimTask_UproarDistortion, 2, 0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 29, -12, 0 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -12, -29, 1 + delay 16 + createvisualtask AnimTask_UproarDistortion, 2, 0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 12, -29, 1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -29, -12, 0 + delay 16 + createvisualtask AnimTask_UproarDistortion, 2, 0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, -24, 1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, -24, 0 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + call UnsetBugBg + end + +Move_DRAGON_PULSE: + loadspritegfx ANIM_TAG_DRAGON_PULSE + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK + waitforvisualfinish + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15 + call DragonPulseParticle + call DragonPulseParticle + createvisualtask AnimTask_SwayMon, 5, 0, 6, 51200, 4, ANIM_TARGET + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(30, 10, 13) + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + waitforvisualfinish + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, RGB_BLACK + waitforvisualfinish + blendoff + clearmonbg ANIM_TARGET + end +DragonPulseParticle: + createsprite gDragonPulseSpriteTemplate, 130, 6, 16, 0, 0, 0, 13, 0 + delay 4 + return + +Move_DRAGON_RUSH: + loadspritegfx ANIM_TAG_SLAM_HIT_2 + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_RED_HEART + createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 6 + delay 4 + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET + createsprite gDragonRushSpriteTemplate, 131, 2, -16, -16 + delay 8 + createsprite gComplexPaletteBlendSpriteTemplate, 2, 7, 31, 5, 1, RGB(31, 31, 31), 10, 0, 0 + createsprite gBasicHitSplatSpriteTemplate, 3, 4, 0, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 + waitforvisualfinish + playsewithpan 131, SOUND_PAN_TARGET + createsprite gRockFragmentSpriteTemplate, 2, 6, 0, 0, 20, 24, 14, 2 + createsprite gRockFragmentSpriteTemplate, 2, 6, 5, 0, -20, 24, 14, 1 + createsprite gRockFragmentSpriteTemplate, 2, 6, 0, 5, 20, -24, 14, 2 + createsprite gRockFragmentSpriteTemplate, 2, 6, -5, 0, 20, 24, 14, 2 + createsprite gRockFragmentSpriteTemplate, 2, 6, 0, -5, 30, 18, 8, 2 + createsprite gRockFragmentSpriteTemplate, 2, 6, 0, 0, 30, -18, 8, 2 + createsprite gRockFragmentSpriteTemplate, 2, 6, 0, 0, -30, 18, 8, 2 + createsprite gRockFragmentSpriteTemplate, 2, 6, 0, 0, -30, -18, 8, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +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 + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + waitforvisualfinish + delay 30 + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB_WHITE, 12, 5, 1 + delay 4 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 0 + createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 42 + createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 84 + createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 126 + createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 168 + createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 210 + delay 52 + setarg 7, -1 + playsewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 0 + createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 32 + createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 64 + createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 96 + createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 128 + createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 160 + createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 192 + createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 1, 7, 0, RGB_BLACK + waitforvisualfinish + end + +Move_DRAIN_PUNCH: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_BLUE_STAR + loadspritegfx ANIM_TAG_ORBS + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_VITAL_THROW2, -64 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 + delay 20 + call MegaDrainAbsorbEffect + waitforvisualfinish + delay 15 + call HealingEffect + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_VACUUM_WAVE: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_THIN_RING + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, -8, 1, 2 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0, 0x7FFF, 3 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_FOCUS_BLAST: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_METEOR + loadspritegfx ANIM_TAG_FLAT_ROCK + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + setalpha 12, 8 + call SetFocusBlastBG + createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 2, 0 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 16, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + waitforvisualfinish + call UnsetHighSpeedBg + clearmonbg ANIM_ATK_PARTNER + blendoff + delay 1 + end + +SetFocusBlastBG: + fadetobg BG_FOCUS_BLAST + goto SetHighSpeedBgFade + +Move_ENERGY_BALL: + loadspritegfx ANIM_TAG_ENERGY_BALL + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 8, RGB_BLACK + waitforvisualfinish + delay 15 + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_MIST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 5, 0, 5 + createsprite gEnergyBallSpriteTemplate, ANIM_TARGET, 2, 12, 4, 8 + waitforvisualfinish + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 8, 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 8, 0, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_BRAVE_BIRD: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_BIRD + call SetSkyBg + monbg ANIM_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 0, 16, RGB_WHITE + delay 4 + createvisualtask AnimTask_AttackerFadeToInvisible, 5, 0 + waitforvisualfinish + createvisualtask SoundTask_PlaySE2WithPanning, 5, 238, SOUND_PAN_ATTACKER + createsprite gSkyAttackBirdSpriteTemplate, ANIM_TARGET, 2 + delay 14 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 10, 0, 18, 1 + createvisualtask SoundTask_PlaySE1WithPanning, 5, 141, SOUND_PAN_TARGET + delay 20 + createvisualtask AnimTask_AttackerFadeFromInvisible, 5, 1 + delay 2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 15, 0, RGB_WHITE + waitforvisualfinish + clearmonbg ANIM_ATTACKER + call UnsetSkyBg + end + +Move_EARTH_POWER: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_FIRE_PLUME + createvisualtask AnimTask_HorizontalShake, 3, 5, 10, 50 + createvisualtask AnimTask_HorizontalShake, 3, 1, 10, 50 + playsewithpan SE_M_EARTHQUAKE, SOUND_PAN_TARGET + delay 40 + loopsewithpan 145, SOUND_PAN_TARGET 11, 3 + createvisualtask AnimTask_ShakeMon 5, 5, ANIM_TARGET, 0, 3, 25, 1 + createsprite gDragonRageFirePlumeSpriteTemplate, 194, 3, 1, 5, 0 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, 194, 3, 1, -10, -15 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, 130, 3, 1, 0, 25 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, 194, 3, 1, 15, 5 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, 194, 3, 1, -25, 0 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, 130, 3, 1, 30, 30 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, 130, 3, 1, -27, 25 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, 194, 3, 1, 0, 8 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, 194, 3, 0, 0, 4 + waitforvisualfinish + end + +Move_SWITCHEROO: + fadetobg BG_DARK + waitbgfadein + loadspritegfx ANIM_TAG_ITEM_BAG + loadspritegfx ANIM_TAG_SPEED_DUST + createsprite gTrickBagSpriteTemplate, 2, 2, -39, 80 + createsprite gTrickBagSpriteTemplate, 2, 2, -39, 208 + delay 16 + playsewithpan SE_M_SKETCH, 0 + createvisualtask AnimTask_StretchTargetUp, 3, 0 + createvisualtask AnimTask_StretchAttackerUp, 3, 0 + delay 30 + playsewithpan SE_M_DOUBLE_TEAM, 0 + delay 24 + playsewithpan SE_M_DOUBLE_TEAM, 0 + delay 16 + playsewithpan SE_M_DOUBLE_TEAM, 0 + delay 16 + playsewithpan SE_M_DOUBLE_TEAM, 0 + delay 16 + playsewithpan SE_M_DOUBLE_TEAM, 0 + delay 16 + playsewithpan SE_M_DOUBLE_TEAM, 0 + delay 16 + playsewithpan SE_M_ATTRACT, 0 + createvisualtask AnimTask_ShakeMon, 3, ANIM_ATTACKER, 5, 0, 7, 2 + createvisualtask AnimTask_ShakeMon, 3, ANIM_TARGET, 5, 0, 7, 2 + waitforvisualfinish + restorebg + waitbgfadein + end + +Move_GIGA_IMPACT: + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + createvisualtask AnimTask_IsContest, 2 + jumprettrue SetGigaImpactContestsBG + createvisualtask AnimTask_IsTargetPlayerSide, 2 + jumpretfalse SetGigaImpactOpponentBG + goto SetGigaImpactPlayerBG +SetGigaImpactOpponentBG: + fadetobg BG_GIGA_IMPACT_OPPONENT + goto GigaImpactContinuity +SetGigaImpactPlayerBG: + fadetobg BG_GIGA_IMPACT_PLAYER + goto GigaImpactContinuity +SetGigaImpactContestsBG: + fadetobg BG_GIGA_IMPACT_CONTEST + goto GigaImpactContinuity +GigaImpactContinuity: + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, ANIM_ATTACKER + waitforvisualfinish + delay 11 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5 + delay 6 + waitbgfadeout + createsprite gBasicHitSplatSpriteTemplate, 4, 4, -10, 0, 1, 0 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + delay 1 + createsprite gSlideMonToOffsetSpriteTemplate 2, 5, 1, -16, 0, 0, 4 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace 2, 5, 1, 4, 0, 12, 1 + waitforvisualfinish + delay 2 + createsprite gSlideMonToOriginalPosSpriteTemplate 2, 3, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate 2, 3, 1, 0, 6 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + restorebg + waitbgfadein + waitforvisualfinish + end + +Move_NASTY_PLOT: + loadspritegfx ANIM_TAG_AMNESIA + fadetobg BG_DARK + waitbgfadeout + createvisualtask AnimTask_FadeScreenToWhite, 5 + waitbgfadein + delay 8 + createsprite gQuestionMarkSpriteTemplate, 20, 0 + playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER, + delay 54 + loopsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER, 16, 3 + waitforvisualfinish + call UnsetPsychicBg + end + +Move_BULLET_PUNCH: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -8, 0, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -16, 8, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 8, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, -16, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 8, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 8, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 24, 0, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 24, 16, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 24, 16, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -24, 16, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -24, 16, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -24, -8, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -24, -8, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -24, 8, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -24, 8, 1, 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 9, 0, 8, 1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + + clearmonbg ANIM_TARGET + blendoff + end + +Move_AVALANCHE: + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_ICE_CHUNK + monbg ANIM_DEF_PARTNER + createsprite gShakeMonOrTerrainSpriteTemplate, 2, 4, 7, 1, 11, 1 + createsprite gAvalancheSpriteTemplate, 130, 4, -5, 1, -5, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + createsprite gAvalancheSpriteTemplate, 130, 4, 5, 0, 6, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + createsprite gAvalancheSpriteTemplate, 130, 4, 19, 1, 10, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + createsprite gAvalancheSpriteTemplate 130, 4, -17, 2, -20, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 50, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 5, 50, 1 + delay 2 + call SnowSlide1 + call SnowSlide1 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end +SnowSlide1: + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -20, 0, -10, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, 28, 1, 10, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -10, 1, -5, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, 10, 0, 6, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, 24, 1, 10, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -32, 2, -10, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -20, 0, -10, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, 30, 2, 10, 1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 2 + return + +Move_ICE_SHARD: + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + setalpha 12, 8 + loadspritegfx ANIM_TAG_ICE_CRYSTALS + fadetobg BG_ICE + waitbgfadein + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_BUBBLE_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 4, 4, 0, 10 + createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, 70, 0, 42, 35 + createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, 58, 0, 30, 35 + createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, -12, 0, 22, 40 + createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, 0, 0, 10, 40 + delay 5 + createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -30, 10, -12, 45 + createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -42, 10, -24, 45 + createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -20, 10, -36, 45 + createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -32, 10, -24, 45 + delay 5 + createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, 20, 22, 45 + createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, -2, 20, 10, 45 + createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 20, -2, 30 + createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, 8, 20, 10, 30 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, -31, 0, 7, RGB(0, 20, 31) + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 25, 1 + waitforvisualfinish + delay 20 + call IceCrystalEffectShort + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, 5, 7, 0, RGB(0, 20, 31) + waitforvisualfinish + restorebg + waitbgfadein + clearmonbg ANIM_TARGET + blendoff + end + +Move_SHADOW_CLAW: + loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL + loadspritegfx ANIM_TAG_CLAW_SLASH + loadspritegfx ANIM_TAG_TORN_METAL + fadetobg BG_GHOST + waitbgfadein + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate ANIM_ATTACKER, 2, 6, 4 + delay 4 + createvisualtask AnimTask_ShakeMon2 2, ANIM_TARGET, 2, 0, 18, 1 + createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, -10, 0 + createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, 10, 0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 12, + createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, -10, 1 + createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, 10, 1 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + waitforvisualfinish + restorebg + waitbgfadein + waitforvisualfinish + blendoff + clearmonbg ANIM_TARGET + end + +Move_THUNDER_FANG: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_LIGHTNING + loadspritegfx ANIM_TAG_SHARP_TEETH + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, RGB_BLACK + waitforvisualfinish + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, -16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, 16 + delay 1 + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + delay 1 + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + delay 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_BLACK + delay 20 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + delay 1 + end + +Move_ICE_FANG: + monbg ANIM_TARGET + setalpha 12, 8 + loadspritegfx ANIM_TAG_ICE_CRYSTALS + loadspritegfx ANIM_TAG_SHARP_TEETH + loadspritegfx ANIM_TAG_IMPACT + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB(12, 26, 31) + delay 20 + playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 0 + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 64 + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 128 + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 192 + delay 5 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 32 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 96 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 160 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 224 + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 7, 1 + delay 15 + call IceCrystalEffectShort + delay 5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 9, 0, RGB(12, 26, 31) + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7, 0, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + delay 1 + end + +Move_FIRE_FANG: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_SHARP_TEETH + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB_RED + createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 0 + createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 64 + createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 128 + createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 196 + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + delay 10 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 7, 1 + call FireSpreadEffect + delay 4 + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 9, 0, RGB_RED + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + delay 1 + end + +Move_SHADOW_SNEAK: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond + loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour + loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison + loadspritegfx ANIM_TAG_HANDS_AND_FEET + monbg ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x7 0x0000 + waitforvisualfinish + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x12 0x6 0x1 0x3 + launchtask AnimTask_AttackerFadeToInvisible 0x2 0x1 0x1 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + invisible ANIM_ATTACKER + delay 0x1 + launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x30 + delay 0x30 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xF 0x0 + createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 + call ShadowSneakMovement + createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 + call ShadowSneakMovement + createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 + call ShadowSneakMovement + createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 + call ShadowSneakMovement + waitforvisualfinish + visible ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x0000 + waitforvisualfinish + end +ShadowSneakMovement: + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + delay 0x4 + return + +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 + delay 5 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25 + delay 5 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25 + delay 5 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25 + delay 11 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1 + createsprite gMudBombSplash, ANIM_TARGET, 2, 42, 27, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, 42, 27, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, -27, 44, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, 39, -28, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, -42, -42, 20 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 5 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1 + createsprite gMudBombSplash, ANIM_TARGET, 2, 0, 40, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, -8, -44, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, -46, -28, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, 46, 9, 20 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 5 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1 + createsprite gMudBombSplash, ANIM_TARGET, 2, 42, 0, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, -43, -12, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, 16, -46, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, -16, 44, 20 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 5 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1 + createsprite gMudBombSplash, ANIM_TARGET, 2, 0, 40, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, -8, -44, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, -46, -28, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, 46, 9, 20 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 5 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1 + createsprite gMudBombSplash, ANIM_TARGET, 2, 42, 0, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, -43, -12, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, 16, -46, 20 + createsprite gMudBombSplash, ANIM_TARGET, 2, -16, 44, 20 + waitforvisualfinish + end + +Move_PSYCHO_CUT: + loadspritegfx ANIM_TAG_SPIRAL + loadspritegfx ANIM_TAG_PSYCHO_CUT + monbg ANIM_ATK_PARTNER + createsprite gPsychoCutSpiralSpriteTemplate, 2, 4, 0, 0, 0, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 1, 2, 2, 0, 10, RGB(20, 12, 23) + delay 30 + clearmonbg ANIM_ATK_PARTNER + waitforvisualfinish + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, + createsprite gPsychoCutSpriteTemplate, 130, 5, 20, 0, -8, 0, 20 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 1, 2, 2, 10, 0, RGB(20, 12, 23) + clearmonbg ANIM_TARGET + blendoff + waitforvisualfinish + end + +Move_ZEN_HEADBUTT: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_WATER_IMPACT + monbg ANIM_ATTACKER + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 2, 0, 4, 0 + waitforvisualfinish + createsprite gZenHeadbuttSpriteTemplate, 66, 1, 0 + delay 18, + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 2, + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + loadspritegfx ANIM_TAG_IMPACT + createsprite gBowMonSpriteTemplate, 2, 1, 0 + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 2 + createsprite gBowMonSpriteTemplate, 2, 1, 1 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 0, 2, 0, 4, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 + createsprite gBowMonSpriteTemplate, 2, 1, 2 + createsprite gAquaTailHitSpriteTemplate, 131, 4, 0, 0, 1, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 4, 4, 0, 0 + clearmonbg ANIM_ATTACKER + blendoff + delay 1 + end + +Move_MIRROR_SHOT: + loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 1, 0, 0 + waitforvisualfinish + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 10, RGB_WHITEALPHA + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(21, 21, 21) + waitforvisualfinish + createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 10, 0, RGB_WHITEALPHA + createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end + +Move_FLASH_CANNON: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_FLASH_CANNON_BALL + monbg ANIM_ATTACKER + setalpha 13, 8 + createvisualtask AnimTask_ElectricChargingParticles, 2, 0, 60, 2, 12 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 30 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 30 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + createsprite gFlashCannonGrayChargeTemplate, ANIM_ATTACKER, 2, 0 + delay 25 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 20 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 15 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 10 + delay 6 + loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 6, 5 + waitforvisualfinish + playsewithpan SE_M_PAY_DAY, SOUND_PAN_ATTACKER + createsprite gFlashCannonBallMovementTemplate, ANIM_TARGET, 2, 0, 0, 0x15 + clearmonbg ANIM_ATTACKER + waitforvisualfinish + playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER + createvisualtask AnimTask_Flash, 2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 16, 0, 0x1f + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 15, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +Move_ROCK_CLIMB: + createvisualtask AnimTask_Splash, 2, 2, ANIM_ATTACKER, 3 + delay 8 + loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3 + waitforvisualfinish + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_MUD_SAND + loadspritegfx ANIM_TAG_ROCKS + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + createvisualtask AnimTask_Rollout, 2, 0 + waitforvisualfinish + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, 5, 0, 1, 30, 1, RGB(0, 16, 1) + createsprite gBasicHitSplatSpriteTemplate, 131, 4, -15, 8, 1, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, 131, 4, -5, -12, 1, 1 + delay 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, 131, 4, 0, -32, 1, 1 + delay 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, 131, 4, 5, -52, 1, 1 + createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 1, -25, 16, 1, 4 + delay 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 0, 3, 6, 1 + delay 30 + createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 0, 6 + delay 4 + createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 1, 0, 6 + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_DEFOG: + loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT + monbg ANIM_ATTACKER + setalpha 12, 8 + playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER + createsprite gLusterPurgeCircleSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0 + delay 20 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, -1 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, 2, 0, 16, -1 + waitforvisualfinish + waitforvisualfinish + delay 16 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, -1 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end + +Move_TRICK_ROOM:: + call InitRoomAnimation + fadetobg BG_TRICK_ROOM + waitbgfadein + delay 0x40 + restorebg + waitbgfadein + blendoff + end +InitRoomAnimation: + setalpha 8, 8 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET + launchtask AnimTask_ScaleMonAndRestore 5 5 0xfffa 0xfffa 15, 1 1 + return + +Move_DRACO_METEOR: + loadspritegfx ANIM_TAG_WARM_ROCK + loadspritegfx ANIM_TAG_GOLD_STARS + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ICE_SPIKES + playsewithpan SE_M_CHARGE, SOUND_PAN_TARGET + fadetobg BG_COSMIC + waitbgfadein + waitforvisualfinish + createsprite gDracoMeteorSmashSpriteTemplate, 131, 5, -47, -63, 72, 32, 30 + delay 10 + createsprite gDracoMeteorSmashSpriteTemplate, 131, 5, -111, -63, 8, 32, 30 + delay 40 + createsprite gDracoMetorSpriteTemplate, 131, 4, 0, 0, 0, 30 + createsprite gDracoMeteorSmashSpriteTemplate, 131, 5, -79, -63, 40, 32, 30 + delay 20 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 10 + restorebg + waitbgfadein + waitforvisualfinish + end + +Move_DISCHARGE: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_SPARK_2 + delay 0 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, RGB(31, 31, 20) + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, 0, 1, 0 + delay 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, 0, 1, 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, 0, 1, 1 + delay 0 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 20) + delay 10 + createvisualtask AnimTask_BlendColorCycle 2, 3, -31, 1, 5, 5, RGB(31, 31, 20) + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, 0, 1, 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, 0, 1, 1 + loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_IMPACT + waitbgfadein + monbg ANIM_ATTACKER + setalpha 12, 8 + playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER + createsprite gLusterPurgeCircleSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0 + delay 20 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, 2, 0, 16, RGB_WHITEALPHA + waitforvisualfinish + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(0, 0, 23) + waitforvisualfinish + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA + createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 + createvisualtask AnimTask_HorizontalShake, 5, ANIM_DEF_PARTNER, 5, 14 + createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATK_PARTNER, 5, 14 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + call DischargeElectrify + waitforvisualfinish + end +DischargeElectrify: + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_DEF_PARTNER + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_ATK_PARTNER + delay 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_DEF_PARTNER + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_ATK_PARTNER + delay 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_DEF_PARTNER + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_ATK_PARTNER + delay 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_DEF_PARTNER + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_ATK_PARTNER + delay 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_DEF_PARTNER + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_ATK_PARTNER + delay 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_DEF_PARTNER + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_ATK_PARTNER + delay 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_DEF_PARTNER + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_ATK_PARTNER + delay 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_DEF_PARTNER + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_ATK_PARTNER + return + +Move_LAVA_PLUME: + loadspritegfx ANIM_TAG_FIRE_PLUME + loopsewithpan 152, SOUND_PAN_ATTACKER, 9, 2 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_RED + createvisualtask AnimTask_ShakeMon2 2, ANIM_TARGET, 1, 0, 32, 1 + createvisualtask AnimTask_ShakeMon2 2, ANIM_DEF_PARTNER, 1, 0, 32, 1 + createvisualtask AnimTask_ShakeMon2 2, ANIM_ATK_PARTNER, 1, 0, 32, 1 + waitforvisualfinish + createsprite gLavaPlumeSpriteTemplate, 130, 1, 0 + createsprite gLavaPlumeSpriteTemplate, 130, 1, 32 + createsprite gLavaPlumeSpriteTemplate, 130, 1, 64 + createsprite gLavaPlumeSpriteTemplate, 130, 1, 96 + createsprite gLavaPlumeSpriteTemplate, 130, 1, 128 + createsprite gLavaPlumeSpriteTemplate, 130, 1, 160 + createsprite gLavaPlumeSpriteTemplate, 130, 1, 192 + createsprite gLavaPlumeSpriteTemplate, 130, 1, 224 + playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER + waitforvisualfinish + end + +Move_LEAF_STORM: + loadspritegfx ANIM_TAG_RAZOR_LEAF + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_LEAF + monbg ANIM_DEF_PARTNER + splitbgprio_foes ANIM_TARGET + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 12, RGB(13, 31, 12) + waitforvisualfinish + splitbgprio ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0 + delay 3 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 5, 0, 50, 1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -8, 11, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0 + delay 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 + delay 3 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 0, -36, 10 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 24, -12, 10 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 24, 12, 10 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 0, 36, 10 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -24, 12, 10 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -24, -12, 10 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 2 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 36, 0, 10 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 12, -24, 10 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 12, 24, 10 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -36, 0, 10 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -12, 24, 10 + createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -12, -24, 10 + waitforvisualfinish + blendoff + delay 0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 12, 0, RGB(13, 31, 12) + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_POWER_WHIP: + loadspritegfx ANIM_TAG_WHIP_HIT + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 10 + delay 6 + playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET + createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, 0, 0 + delay 6 + call SetImpactBackground + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 + restorebg + waitbgfadein + end + +Move_ROCK_WRECKER: + jumpargeq 7, 1, RockWrecker_1 + fadetobg BG_ROCK_WRECKER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, -1024, 0, 1, -1 + goto RockWrecker_2 +RockWrecker_1: + fadetobg BG_ROCK_WRECKER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, -1024, 0, 0, -1 + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_IMPACT + createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 6 + delay 3 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + createsprite gRockBlastRockSpriteTemplate, 130, 6, 16, 0, 0, 0, 25, 257 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, 131, 4, 0, 0, 1, 1 + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + createsprite gRockFragmentSpriteTemplate, 130, 6, 0, 0, 20, 24, 14, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 + createsprite gRockFragmentSpriteTemplate, 130, 6, 5, 0, -20, 24, 14, 1 + createsprite gRockFragmentSpriteTemplate, 130, 6, 0, 5, 20, -18, 14, 2 + createsprite gRockFragmentSpriteTemplate, 130, 6, -5, 0, -20, -18, 14, 2 + waitforvisualfinish + call UnsetPsychicBg + end +RockWrecker_2: + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_IMPACT + createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 6 + delay 3 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + createsprite gRockBlastRockSpriteTemplate, 130, 6, 16, 0, 0, 0, 25, 257 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, 131, 4, 0, 0, 1, 1 + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + createsprite gRockFragmentSpriteTemplate 130, 6, 0, 0, 20, 24, 14, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 + createsprite gRockFragmentSpriteTemplate 130, 6, 5, 0, -20, 24, 14, 1 + createsprite gRockFragmentSpriteTemplate 130, 6, 0, 5, 20, -18, 14, 2 + createsprite gRockFragmentSpriteTemplate 130, 6, -5, 0, -20, -18, 14, 2 + waitforvisualfinish + call UnsetPsychicBg + end + +Move_CROSS_POISON: + loadspritegfx ANIM_TAG_POISON_BUBBLE + loadspritegfx ANIM_TAG_CROSS_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_WHITE, 10, 0, 10 + createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 + waitforvisualfinish + call PoisonBubblesEffect + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_GUNK_SHOT: + loadspritegfx ANIM_TAG_WATER_ORB + loadspritegfx ANIM_TAG_POISON_BUBBLE + loadspritegfx ANIM_TAG_WATER_IMPACT + loadspritegfx ANIM_TAG_POISON_BUBBLE + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + call SetGunkShotBG + createvisualtask AnimTask_ShakeMon 5, 5, ANIM_ATTACKER, 0, 2, 40, 1 + delay 6 + panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 + createvisualtask AnimTask_StartSinAnimTimer, 5, 1, 100 + call GunkShotParticles + call GunkShotParticles + call GunkShotParticles + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 27, 1 + loopsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET, 3, 15 + call GunkShotImpact + call GunkShotParticles + call GunkShotParticles + call GunkShotImpact + call GunkShotParticles + call GunkShotParticles + call GunkShotImpact + call GunkShotParticles + call GunkShotParticles + call GunkShotImpact + call GunkShotParticles + call GunkShotParticles + call GunkShotImpact + delay 1 + delay 1 + call GunkShotImpact + call PoisonBubblesEffect + waitforvisualfinish + call UnsetHighSpeedBg + clearmonbg ANIM_DEF_PARTNER + blendoff + end +GunkShotParticles: + createsprite gGunkShoParticlesSpriteTemplate, 3, 4, 10, 10, 0, 16 + createsprite gGunkShoParticlesSpriteTemplate, 3, 4, 10, 10, 0, -16 + delay 1 + createsprite gGunkShoParticlesSpriteTemplate, 3, 4, 10, 10, 0, 16 + createsprite gGunkShoParticlesSpriteTemplate, 3, 4, 10, 10, 0, -16 + delay 1 + return +GunkShotImpact: + createsprite gGunkShotImpactSpriteTemplate, 4, 4, 0, 15, 1, 1 + createsprite gGunkShotImpactSpriteTemplate, 4, 4, 0, -15, 1, 1 + return +SetGunkShotBG: + fadetobg BG_GUNK_SHOT + goto SetHighSpeedBgFade + + +Move_IRON_HEAD: + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_IMPACT + loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 1, 0, 0 + waitforvisualfinish + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 2 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 1 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 4, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 7, 1 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 1 + waitforvisualfinish + end + +Move_MAGNET_BOMB: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_SPARK_2 + delay 0 + playsewithpan 119, 192 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 32, 24, 190, 12, 0, 1, 0 + delay 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 80, 24, 22, 12, 0, 1, 0 + createsprite gSparkElectricitySpriteTemplate, 0, 7, 156, 24, 121, 13, 0, 1, 1 + delay 0 + playsewithpan 119, 192 + createsprite gSparkElectricitySpriteTemplate 0, 7, 100, 24, 60, 10, 0, 1, 0 + createsprite gSparkElectricitySpriteTemplate 0, 7, 170, 24, 42, 11, 0, 1, 1 + delay 0 + createsprite gSparkElectricitySpriteTemplate 0, 7, 238, 24, 165, 10, 0, 1, 1 + delay 0 + loadspritegfx ANIM_TAG_RED_ORB + playsewithpan 152, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + waitforvisualfinish + delay 30 + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(19, 31, 31), 12, 5, 1 + delay 4 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + playsewithpan 217, SOUND_PAN_ATTACKER + createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 0 + createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 42 + createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 84 + createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 126 + createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 168 + createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 210 + delay 52 + setarg 7, -1 + playsewithpan 207, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 0 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 32 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 64 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 96 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 128 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 160 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 192 + createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224 + loadspritegfx ANIM_TAG_GRAY_SMOKE + loadspritegfx ANIM_TAG_BLACK_BALL + playsewithpan 177, 63 + createsprite gOctazookaSmokeSpriteTemplate, 130, 4, 8, 8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, 130, 4, -8, -8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, 130, 4, 8, -8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, 130, 4, -8, 8, 1, 0 + waitforvisualfinish + playsewithpan 177, 63 + createsprite gOctazookaSmokeSpriteTemplate, 130, 4, 8, 8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, 130, 4, -8, -8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, 130, 4, 8, -8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, 130, 4, -8, 8, 1, 0 + waitforvisualfinish + end + +Move_STONE_EDGE: + loadspritegfx ANIM_TAG_STONE_EDGE + loadspritegfx ANIM_TAG_IMPACT + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 528, 30, 13, 50, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 32, 480, 20, 16, -46, 1 + delay 2 + loopsewithpan 131, SOUND_PAN_TARGET 24, 3 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 576, 20, 8, 42, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 31, 400, 25, 11, -42, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 512, 25, 16, 46, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 464, 30, 15, 49, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 528, 30, 13, 50, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 32, 480, 20, 16, -46, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 576, 20, 8, 42, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 31, 400, 25, 11, -42, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 512, 25, 16, 46, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 464, 30, 15, 49, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 528, 30, 13, 50, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 32, 480, 20, 16, -46, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 576, 20, 8, 42, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 31, 400, 25, 11, -42, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 512, 25, 16, 46, 1 + delay 2 + createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 464, 30, 15, 49, 1 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, 131, 4, -32, -16, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 3, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 3, 3, 0, 12, 1 + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 4 + createsprite gBasicHitSplatSpriteTemplate, 131, 4, 32, 20, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_CAPTIVATE: + loadspritegfx ANIM_TAG_MAGENTA_HEART + loadspritegfx ANIM_TAG_SPARKLE_2 + createvisualtask AnimTask_RockMonBackAndForth, 5, 3, 0, 2, 0 + createsprite gMagentaHeartSpriteTemplate, 3, 2, 0, 20 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + delay 15 + createsprite gMagentaHeartSpriteTemplate, 3, 2, -20, 20 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + delay 15 + createsprite gMagentaHeartSpriteTemplate, 3, 2, 20, 20 + playsewithpan 228, SOUND_PAN_ATTACKER, + call GrantingStarsEffect + waitforvisualfinish + end + +Move_STEALTH_ROCK: + loadspritegfx ANIM_TAG_STEALTH_ROCK + monbg ANIM_DEF_PARTNER + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28 + createsprite gStealthRockSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 24, 30 + delay 10 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28 + createsprite gStealthRockSpriteTemplate, ANIM_TARGET, 2, 20, 0, -24, 24, 30 + delay 10 + waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28 + createsprite gStealthRockSpriteTemplate, ANIM_TARGET, 2, 20, 0, 24, 24, 30 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_GRASS_KNOT: + loadspritegfx ANIM_TAG_RAZOR_LEAF + loadspritegfx ANIM_TAG_IMPACT + createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 + createsprite gGrassKnotSpriteTemplate, 130, 6, -18, 19, 40, 8, 160, 0 + delay 4 + createsprite gBasicHitSplatSpriteTemplate, 130, 4, -8, 8, 1, 2 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 6, 384, 1, 2 + playsewithpan SE_M_VITAL_THROW2 SOUND_PAN_TARGET + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4 + end + +Move_CHATTER: + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE + loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_MUSIC_NOTES + monbg ANIM_DEF_PARTNER + createvisualtask AnimTask_UproarDistortion, 2, 0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1f, 8 + createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 0xff + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0x1d, -12, 0 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -12, 0xffe3, 1 + delay 16 + createvisualtask AnimTask_UproarDistortion, 2, 0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1f, 8 + createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 0xff + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 12, 0xffe3, 1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0xffe3, -12, 0 + delay 16 + createvisualtask AnimTask_UproarDistortion, 2, 0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1f, 8 + createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 0xff + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0x18, 0xffe8, 1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0xffe8, 0xffe8, 0 + waitforvisualfinish + loadspritegfx ANIM_TAG_ICE_CRYSTALS @FreezingCrystalsSingleBattle particles + createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, -10, -10, 0 + delay 4 + createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 10, 20, 0 + delay 4 + createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 0xfffb, 10, 0 + delay 4 + createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 0x11, -12, 0 + delay 4 + createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 0xfff1, 15, 0 + delay 4 + createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 0, 0, 0 + delay 4 + createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 20, 2, 0 + clearmonbg ANIM_DEF_PARTNER + end + +Move_JUDGMENT: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_GREEN_SPIKE + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_ELECTRICITY + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_GUST, 0, 14, 14, 0 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HANDS_AND_FEET, 0, 10, 10, 0 + monbg ANIM_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 15, 32767 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 83, 1 + createsprite gJudgmentBlackChargeTemplate, ANIM_TARGET, 1, 1, ANIM_TARGET + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET + call JudgmentInwardSpikes + delay 5 + call JudgmentInwardSpikes2 + delay 5 + call JudgmentInwardSpikes + delay 5 + call JudgmentInwardSpikes2 + delay 5 + call JudgmentInwardSpikes + delay 5 + call JudgmentInwardSpikes2 + delay 5 + call JudgmentInwardSpikes2 + delay 0x2F + call JudgmentOutwardSpikes + delay 5 + call JudgmentOutwardSpikes2 + delay 5 + call JudgmentOutwardSpikes + delay 5 + call JudgmentOutwardSpikes2 + delay 5 + call JudgmentOutwardSpikes + delay 5 + call JudgmentOutwardSpikes2 + delay 5 + call JudgmentOutwardSpikes + delay 5 + call JudgmentOutwardSpikes2 + delay 5 + call JudgmentOutwardSpikes + delay 5 + call JudgmentOutwardSpikes2 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 15, 0, 32767 + waitforvisualfinish + clearmonbg ANIM_TARGET + end +JudgmentOutwardSpikes: + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0, 0xFF90, 16 @up + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 95, 0xFF9D, 16 @upper right + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0x73, 0, 16 @right + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0x4F, 0x37, 16 @lower right + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0, 0x53, 16 @down + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFFB0, 0x43, 16 @lower left + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFF60, 0, 16 @left + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFFAA, 0xFF94, 16 @upper left + playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER + return +JudgmentOutwardSpikes2: + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0x2D, 0xFF9D, 16 @between up and upper right + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xDF, 0xFF9D, 16 @between right and upper right + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0x9F, 0x37, 16 @between right and lower right + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0x1F, 0x37, 16 @between lower right and down + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFFE0, 0x43, 16 @between lower left and down + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFF60, 0x43, 16 @between left and lower left + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFF2A, 0xFFAA, 16 @between left and upper left + createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFFDA, 0xFF94, 16 @between up and upper left + playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER + return +JudgmentInwardSpikes: + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0, 0xFF90, 16 @up + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 95, 0xFF9D, 16 @upper right + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0x73, 0, 16 @right + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0x4F, 0x37, 16 @lower right + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0, 0x53, 16 @down + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFB0, 0x43, 16 @lower left + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFF60, 0, 16 @left + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFAA, 0xFF94, 16 @upper left + return +JudgmentInwardSpikes2: + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0x2D, 0xFF9D, 16 @between up and upper right + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xDF, 0xFF9D, 16 @between right and upper right + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0x9F, 0x37, 16 @between right and lower right + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0x1F, 0x37, 16 @between lower right and down + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFE0, 0x43, 16 @between lower left and down + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFF60, 0x43, 16 @between left and lower left + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFF2A, 0xFFAA, 16 @between left and upper left + createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFDA, 0xFF94, 16 @between up and upper left + return + +Move_BUG_BITE: + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET + monbg ANIM_TARGET + setalpha 12, 8 + delay 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 + waitforvisualfinish + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 20, 24, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 5, 0, -20, 24, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 5, 20, -24, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -5, 0, -20, -24, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, -5, 30, 18, 8, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 30, -18, 8, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1 + delay 8 + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 10, 5, 30, 29, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 15, 5, -10, 29, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 30, -19, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 5, 5, -30, -19, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, 40, 23, 8, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 10, 5, 40, -13, 8, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1 + delay 8 + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -10, -5, 10, 19, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -5, -5, -30, 19, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -10, 0, 10, -29, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -15, -5, -30, -29, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -10, -10, 20, 13, 8, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -10, -5, 20, -23, 8, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1 + delay 8 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_CHARGE_BEAM: + loadspritegfx ANIM_TAG_BLACK_BALL_2 + loadspritegfx ANIM_TAG_SPARK_2 + delay 0 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, RGB(31, 31, 22) + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, 0, 1, 0 + delay 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, 0, 1, 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, 0, 1, 1 + delay 0 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22) + delay 10 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, RGB(31, 31, 22) + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, 0, 1, 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, 0, 1, 1 + delay 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, 0, 1, 1 + delay 0 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22) + delay 20 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 7, 7, RGB(31, 31, 22) + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 128, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 192, 20, 2, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 32, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 96, 20, 1, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 160, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 + delay 4 + waitforvisualfinish + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22) + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER + createsprite gZapCannonBallSpriteTemplate, ANIM_TARGET, 3, 10, 0, 0, 0, 30, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 64, 40, 1 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 128, 40, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 192, 40, 2 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 32, 40, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 96, 40, 1 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 160, 40, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 224, 40, 2 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 + delay 15 + waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 19 + call ElectricityEffect + waitforvisualfinish + end + +Move_WOOD_HAMMER: + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 3 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 0, 10, 0, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, 1, 0 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + delay 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -16, 0, 0, 4 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + waitforvisualfinish + delay 2 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_AQUA_JET: + loadspritegfx ANIM_TAG_SPARKLE_6 + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_SPLASH + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + createsprite gDiveBallSpriteTemplate, 2, 4, 0, 0, 13, 336 + waitforvisualfinish + playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER + createsprite gDiveWaterSplashSpriteTemplate, 3, 1, 0 + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + loadspritegfx ANIM_TAG_WATER_IMPACT + loadspritegfx ANIM_TAG_SMALL_BUBBLES + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gDiveWaterSplashSpriteTemplate, 131, 1, 1 + call DiveAttackWaterDroplets + call DiveAttackWaterDroplets + call DiveAttackWaterDroplets + call DiveAttackWaterDroplets + call DiveAttackWaterDroplets + delay 12 + call RisingWaterHitEffect + waitforvisualfinish + visible 0 + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_ATTACK_ORDER: + loadspritegfx ANIM_TAG_ATTACK_ORDER + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ROCKS + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_TARGET + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 70, 5, 70, 30 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 55, 6, 60, 25 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 60, 7, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 55, 10, 60, 30 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 100, 50, 4, 50, 26 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 105, 25, 8, 60, 20 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 40, 10, 48, 30 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 30, 6, 45, 25 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 35, 10, 60, 30 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 105, 20, 8, 40, 0 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 20, 255, 15, 32, 0 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 110, 10, 8, 32, 20 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate 131, 4, -32, -16, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 3, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 3, 0, 12, 1 + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate 131, 2, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate 131, 2, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 4 + createsprite gBasicHitSplatSpriteTemplate 131, 4, 32, 20, 1, 3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_DEFEND_ORDER: + loadspritegfx ANIM_TAG_ATTACK_ORDER + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ROCKS + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_TARGET + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 120, 70, 5, 70, 30 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 55, 6, 60, 25 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 60, 7, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 55, 10, 60, 30 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 100, 50, 4, 50, 26 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 105, 25, 8, 60, 20 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 40, 10, 48, 30 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 120, 30, 6, 45, 25 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 35, 10, 60, 30 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 105, 20, 8, 40, 0 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 20, 255, 15, 32, 0 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 110, 10, 8, 32, 20 + waitforvisualfinish + loadspritegfx ANIM_TAG_BLUE_STAR + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + delay 1 + call BideSetUp + waitforvisualfinish + end + +Move_HEAL_ORDER: + loadspritegfx ANIM_TAG_ATTACK_ORDER + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ROCKS + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_TARGET + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 120, 70, 5, 70, 30 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 55, 6, 60, 25 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 60, 7, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 55, 10, 60, 30 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 100, 50, 4, 50, 26 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 105, 25, 8, 60, 20 + delay 1 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 40, 10, 48, 30 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 120, 30, 6, 45, 25 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 35, 10, 60, 30 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 105, 20, 8, 40, 0 + delay 3 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 20, 255, 15, 32, 0 + createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 110, 10, 8, 32, 20 + waitforvisualfinish + loadspritegfx ANIM_TAG_BLUE_STAR + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + delay 1 + call HealingEffect + waitforvisualfinish + end + +Move_HEAD_SMASH: + loadspritegfx ANIM_TAG_IMPACT + call SetImpactBackground + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 2 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 1 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 4, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 8, 3 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + delay 2 + restorebg + waitbgfadein + end + +Move_DOUBLE_HIT: + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 4 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, 2, 4, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 8 + waitforvisualfinish + createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 4 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, 2, 4, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 8 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_ROAR_OF_TIME: + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_WATER_GUN + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 16, 0 + delay 0x20 + monbg ANIM_ATK_PARTNER + setalpha 0xc, 0x8 + loopsewithpan 133, SOUND_PAN_ATTACKER 13 3 + call RecoverAbsorbEffect + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 16, 0, 0 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 16, -1 + createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 0xff + delay 0x20 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 10, 0, 20, 1 + playsewithpan 170, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + delay 6 + playsewithpan 170, SOUND_PAN_TARGET + createsprite gRoarOfTimeBombTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, 1, 1 + delay 6 + playsewithpan 170, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 16, 1, 1 + delay 6 + playsewithpan 170, SOUND_PAN_TARGET + createsprite gRoarOfTimeBombTemplate, ANIM_ATTACKER, 3, 0xffe8, -12, 1, 1 + delay 6 + playsewithpan 170, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1 + delay 6 + playsewithpan 170, SOUND_PAN_TARGET + createsprite gRoarOfTimeBombTemplate, ANIM_ATTACKER, 3, 0xffe8, 0x18, 1, 1 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 16, 0, -1 + waitforvisualfinish + end + +Move_SPACIAL_REND: + loadspritegfx ANIM_TAG_PUNISHMENT_BLADES + loadspritegfx ANIM_TAG_PINK_HEART_2 @ANIM_TAG_BERRY_EATEN + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 16, 0 + loopsewithpan 133, SOUND_PAN_ATTACKER 13 2 + createsprite gSpacialRendBladesTemplate, ANIM_ATTACKER, 3, 0, 0, 0x38, 0 + delay 2 + createsprite gSpacialRendBladesTemplate, ANIM_ATTACKER, 3, 0, 0, 0x38, 4 + delay 2 + createsprite gSpacialRendBladesTemplate, ANIM_ATTACKER, 3, 0, 0, 0x38, 8 + delay 2 + createsprite gSpacialRendBladesTemplate, ANIM_ATTACKER, 3, 0, 0, 0x38, 12 + waitforvisualfinish + fadetobgfromset BG_SPACIAL_REND_ON_OPPONENT BG_SPACIAL_REND_ON_PLAYER BG_SPACIAL_REND_ON_OPPONENT + waitbgfadein + loopsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET, 3, 5 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 0, 10, SOUND_PAN_ATTACKER, 0xb0, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, 0xff40, 0xf0, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, SOUND_PAN_ATTACKER, 0xff60, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, 0xff40, 0xff90, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, 0xa0, 0x30, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, 0xff20, 0xffe0, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, 0x70, 0xff80, 0x28 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 + waitforvisualfinish + restorebg + waitbgfadein + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 0, 0 + clearmonbg ANIM_ATK_PARTNER + blendoff + end + +Move_LUNAR_DANCE: + loadspritegfx ANIM_TAG_MOON + loadspritegfx ANIM_TAG_GREEN_SPARKLE + loadspritegfx ANIM_TAG_HOLLOW_ORB + setalpha 0, 16 + createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 1, 0, 16, 0 + waitforvisualfinish + createsprite gMoonSpriteTemplate, 2, 2, 120, 56 + createvisualtask AnimTask_AlphaFadeIn, 3, 5, 0, 16, 16, 0, 1 + playsewithpan 211, 0 + delay 30 + createsprite gMoonlightSparkleSpriteTemplate, 40, 2, -12, 0 + delay 30 + createsprite gMoonlightSparkleSpriteTemplate, 40, 2, -18, 0 + delay 30 + createsprite gMoonlightSparkleSpriteTemplate, 40, 2, 21, 0 + delay 30 + createsprite gMoonlightSparkleSpriteTemplate, 40, 2, 0, 0 + delay 30 + createsprite gMoonlightSparkleSpriteTemplate, 40, 2, 10, 0 + delay 20 + createvisualtask AnimTask_MoonlightEndFade, 2, 0 + createvisualtask AnimTask_DragonDanceWaver, 5, 0 + playsewithpan 203, SOUND_PAN_ATTACKER + delay 8 + createvisualtask AnimTask_BlendPalInAndOutByTag, 5, 5, ANIM_TAG_HOLLOW_ORB, RGB(0, 0, 19), 14, 0, 3 + createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 0 + createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 43 + createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 85 + createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 128 + createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 170 + createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 213 + delay 30 + playsewithpan 203, SOUND_PAN_ATTACKER + delay 30 + playsewithpan 203, SOUND_PAN_ATTACKER + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 1 + end + +Move_CRUSH_GRIP: + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_ACCUPRESSURE + loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE + setalpha 15, 0 + createsprite gCrushGripHandTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 25, 0x101 + waitforvisualfinish + createvisualtask AnimTask_CompressTargetHorizontally, 2 + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0, 0, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0x18, 0xffe8, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0xfff0, 16, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0xffe8, -12, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 16, 16, 1, 1 + waitforvisualfinish + blendoff + end + +Move_MAGMA_STORM: + loadspritegfx ANIM_TAG_SMALL_EMBER + fadetobg BG_MAGMA_STORM @Add new bg + waitbgfadeout + createvisualtask AnimTask_MoveSeismicTossBg, 3 + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 5, 8 + createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 + createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7) + call FireSpinEffect + call FireSpinEffect + createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7) + call FireSpinEffect + call FireSpinEffect + createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7) + call FireSpinEffect + restorebg + waitbgfadeout + setarg 7, 0xFFF + waitbgfadein + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +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 + loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison + fadetobg BG_DARK_VOID + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0, 0xFFA0, 1, 0xffff + waitbgfadein + createvisualtask AnimTask_DestinyBondWhiteShadow, 5, 0, 0x30 + loopsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_ATTACKER, 5, 2 + delay 0x30 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfd00, 0x15, 0, 0x70 @Last is speed + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0xfd00, 0x15, 0, 0x70 @Last is speed + delay 0x40 + invisible ANIM_TARGET + invisible ANIM_DEF_PARTNER + createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0, 0x20, 0x3c + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 16 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0, 16 + delay 0x20 + call UnsetPsychicBg + visible ANIM_TARGET + visible ANIM_DEF_PARTNER + end + +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 + loadspritegfx ANIM_TAG_ORBS @charging circles + loadspritegfx ANIM_TAG_FLYING_DIRT @heat wave animation + monbg ANIM_ATTACKER + setalpha 14, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 12, 32767 + waitforvisualfinish + playsewithpan 133, SOUND_PAN_ATTACKER + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0, 0x28, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0, 0xffd8, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, -20, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 20, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, -20, 16 + delay 2 + createsprite gSeedFlareGreenChargeTemplate, ANIM_ATTACKER 2, 0 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, 20, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, -20, 30, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 20, 0xffe2, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, -20, 0xffe2, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 20, 30, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, 0, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 0, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0, 0x28, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0, 0xffd8, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, -20, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 20, 16 + delay 2 + createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, -20, 16 + delay 30 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 0x28, 1 + createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 10, 0x900, 0x60, 1 + createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, 20, 1 + createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, -20, 1 + delay 2 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x5a, 0x800, 0x60, 1 + delay 8 + createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x32, 0xa00, 0x60, 1 + createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, 20, 1 + createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, -20, 1 + delay 2 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 20, 0x900, 0x60, 1 + delay 8 + createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x46, 0x7c0, 0x60, 1 + createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, 20, 1 + createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, -20, 1 + delay 2 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 8 + createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0, 0xb00, 0x60, 1 + delay 10 + createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x3c, 0xa00, 0x60, 1 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 12, 0, 32767 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end + +Move_OMINOUS_WIND: + loadspritegfx ANIM_TAG_SPARKLE_6 + panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET 2, 0 + playsewithpan 228, 0 + delay 0 + monbg ANIM_DEF_PARTNER + @bankBG_over_partnerBG + delay 0 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 5, 1, 0, 0, 0, 0 + delay 0 + createvisualtask AnimTask_GetAttackerSide, 2, 0 + jumpargeq 7, 1, OminousWindFadeToBg + fadetobg BG_GHOST + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, RGB(0, 16, 1), 0, 0, -1 + goto OminousWindHit +OminousWindFadeToBg: + fadetobg BG_GHOST + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, -1535, 0, 0, -1 + goto OminousWindHit +OminousWindHit: + delay 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 4, 4, RGB_BLACK + waitbgfadein + createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1 + createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1 + createsprite gSilverWindBigSparkSpriteTemplate, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1 + createsprite gSilverWindBigSparkSpriteTemplate, ANIM_ATTACKER, 120, -40, 14, 128, 4, 1, 2, 1 + delay 0 + createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1 + createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1 + createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1 + createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_ATTACKER, 120, -40, 14, 128, 4, 1, 2, 1 + delay 0 + createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1 + createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1 + createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1 + createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_ATTACKER, 120, -40, 14, 128, 4, 1, 2, 1 + delay 6 + createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -4, 16, 0, 6, 1, 2, 1 + createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -16, 12, 192, 5, 2, 3, 1 + delay 0 + createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_TARGET, 66, -4, 16, 0, 6, 1, 2, 1 + createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_TARGET, 66, -16, 12, 192, 5, 2, 3, 1 + delay 0 + createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_TARGET, 66, -4, 16, 0, 6, 1, 2, 1 + createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_TARGET, 66, -16, 12, 192, 5, 2, 3, 1 + waitforvisualfinish + playsewithpan SE_M_GUST2, SOUND_PAN_TARGET + clearmonbg ANIM_DEF_PARTNER + delay 0 + restorebg + waitbgfadeout + createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 4, 0, RGB_BLACK + setarg 7, -1 + waitbgfadein + end + +Move_SHADOW_FORCE: + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_IMPACT + choosetwoturnanim ShadowForcePrep ShadowForceAttack +ShadowForceWaitEnd: + waitforvisualfinish + end +ShadowForcePrep: + monbg ANIM_ATTACKER + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER, + createsprite gSimplePaletteBlendSpriteTemplate ANIM_ATTACKER, 2, 1, 3, 0, 16, RGB_BLACK + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, 0 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 0 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATK_PARTNER, 0 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_DEF_PARTNER, 0 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 1, 3 + createvisualtask AnimTask_AttackerFadeToInvisible, 2, 1 + delay 80 + createsprite gSimplePaletteBlendSpriteTemplate ANIM_ATTACKER, 2, 1, 3, 16, 0, RGB_BLACK + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, 1 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 1 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATK_PARTNER, 1 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_DEF_PARTNER, 1 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + invisible 0 + delay 1 + goto ShadowForceWaitEnd +ShadowForceAttack: + monbg ANIM_ATTACKER + splitbgprio ANIM_ATTACKER + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + call ShadowForceBg + waitbgfadein + delay 10 + playsewithpan SOUND_PAN_ATTACKER, 192 + createvisualtask AnimTask_NightShadeClone, 5, 85 + delay 70 + createvisualtask AnimTask_ShakeMon2 2, 1, 2, 0, 12, 1 + createvisualtask AnimTask_BlendColorCycle 2, 4, 0, 2, 0, 13, 0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 1 + call UnsetPsychicBg + waitbgfadein + goto ShadowForceWaitEnd +ShadowForceBg: + fadetobg BG_DARK + waitbgfadeout + createvisualtask AnimTask_FadeScreenToWhite, 5 + waitbgfadein + return + +@@@@@@@@@@@@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@@@@@@@@@@@@ +Move_HONE_CLAWS: + loadspritegfx ANIM_TAG_SWIPE + call HoneClawsAnim + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SWIPE, 0, 6, 6, RGB_BLACK + call HoneClawsAnim + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SWIPE, 0, 10, 10, RGB_BLACK + call HoneClawsAnim + end +HoneClawsAnim: + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 2, 2 + delay 4 + playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET + createsprite gFurySwipesSpriteTemplate, ANIM_TARGET, 2, 16, 0, 1 + delay 10 + createsprite gHorizontalLungeSpriteTemplate, ANIM_TARGET, 2, 2, 2 + delay 4 + playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET + createsprite gFurySwipesSpriteTemplate, ANIM_TARGET, 2, -16, 0, 0 + delay 10 + return + +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 + loadspritegfx ANIM_TAG_ROCKS @brown color + loadspritegfx ANIM_TAG_CONVERSION @conversion + loadspritegfx ANIM_TAG_WATER_ORB @blue color + monbg ANIM_ATTACKER + setalpha 12, 8 + createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x3, 0x0 + waitplaysewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 0x10 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xffe8, 0xffe8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xfff8, 0xffe8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x8, 0xffe8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x18, 0xffe8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xffe8, 0xfff8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xfff8, 0xfff8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x8, 0xfff8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x18, 0xfff8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xffe8, 0x8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xfff8, 0x8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x8, 0x8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x18, 0x8 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xffe8, 0x18 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xfff8, 0x18 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x8, 0x18 + delay 3 + createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x18, 0x18 + delay 0x14 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + createvisualtask AnimTask_ConversionAlphaBlend, 5 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end + +Move_GUARD_SPLIT:: + loadspritegfx ANIM_TAG_BLUEGREEN_ORB + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0xC, 0x0 + loopsewithpan SE_M_LOCK_ON, SOUND_PAN_ATTACKER, 0x18, 0x3 + call GuardSplitLaunch + call GuardSplitLaunch + call GuardSplitLaunch + call GuardSplitLaunch + call GuardSplitLaunch + call GuardSplitLaunch + call GuardSplitLaunch + call GuardSplitLaunch + call GuardSplitLaunch + call GuardSplitLaunch + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0xC, 0x0, 0x0 + waitforvisualfinish + end +GuardSplitLaunch: + createsprite gGuardSwapOrbs1Template, ANIM_TARGET, 2, 0xfff4, 0x0 + createsprite gGuardSwapOrbs2Template, ANIM_TARGET, 0, 0x0, 0x0, 0x0, 0x0, 0x1E, 0x0 + delay 0x5 + return + +Move_POWER_SPLIT:: + loadspritegfx ANIM_TAG_RED_HEART + loadspritegfx ANIM_TAG_BLUEGREEN_ORB + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0xC, 0x0 + loopsewithpan SE_M_LOCK_ON, SOUND_PAN_ATTACKER, 0x18, 0x3 + call PowerSplitLaunch + call PowerSplitLaunch + call PowerSplitLaunch + call PowerSplitLaunch + call PowerSplitLaunch + call PowerSplitLaunch + call PowerSplitLaunch + call PowerSplitLaunch + call PowerSplitLaunch + call PowerSplitLaunch + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0xC, 0x0, 0x0 + waitforvisualfinish + end +PowerSplitLaunch: + createsprite gPowerSplitOrbs1Template, ANIM_TARGET, 2, 0xfff4, 0x0 + createsprite gPowerSplitOrbs2Template, ANIM_TARGET, 0, 0x0, 0x0, 0x0, 0x0, 0x1E, 0x0 + delay 5 + return + +Move_WONDER_ROOM:: + call InitRoomAnimation + fadetobg BG_WONDER_ROOM + waitbgfadein + delay 0x40 + restorebg + waitbgfadein + blendoff + end + +Move_PSYSHOCK: + monbg ANIM_TARGET + setalpha 8, 8 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, 767 + waitforvisualfinish + loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 15, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -6, -6, 15, ANIM_TARGET, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_VENOSHOCK: + loadspritegfx ANIM_TAG_POISON_BUBBLE + loadspritegfx ANIM_TAG_TOXIC_BUBBLE + createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -24, 16, 1, 1 + playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET + delay 5 + createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -16, 16, 1, 1 + playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET + delay 5 + createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -8, 16, 1, 1 + playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET + delay 5 + createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, 0, 16, 1, 1 + playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET + delay 5 + createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, 8, 16, 1, 1 + playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET + delay 5 + createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, 16, 16, 1, 1 + playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET + delay 5 + createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, 24, 16, 1, 1 + playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET + delay 5 + waitforvisualfinish + delay 15 + end + +Move_AUTOTOMIZE: + loadspritegfx ANIM_TAG_METAL_BITS @Metal Bits + setalpha 12, 8 + monbg ANIM_ATK_PARTNER + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x18, 0x6, 0x4, 0x4 + createvisualtask AnimTask_TraceMonBlended 0x2, 0x0, 0x4, 0x7, 0xa + playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER + createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x0 + createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x1 + delay 0xc + createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x2 + createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x3 + delay 0xc + createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x0 + createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x1 + delay 0xc + createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x2 + createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x3 + delay 0x18 + waitforvisualfinish + stopsound + clearmonbg ANIM_ATK_PARTNER + blendoff + end + +Move_RAGE_POWDER:: + loadspritegfx ANIM_TAG_SPORE @Powder + loadspritegfx ANIM_TAG_HEART_STAMP @Red Colour + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 0x12, 0xa + call RagePowderSprinkle + call RagePowderSprinkle + call RagePowderSprinkle + createvisualtask AnimTask_BlendColorCycle, ANIM_ATTACKER, 0x2, ANIM_PAL_ATK, 0x2, 0x2, 0x0, 0xb, 0x1f + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end +RagePowderSprinkle: + createsprite gRagePowderRedPowderTemplate, ANIM_ATTACKER, 0x2, 0x0, 0xffec, 0x55, 0x50, 0x0 + delay 0xc + createsprite gRagePowderRedPowderTemplate, ANIM_ATTACKER, 0x2, 0x0, 0xfff6, 0xaa, 0x50, 0x0 + delay 0xc + createsprite gRagePowderRedPowderTemplate, ANIM_ATTACKER, 0x2, 0x0, 0xfff1, 0x0, 0x50, 0x0 + delay 0xc + return + +Move_TELEKINESIS:: + loadspritegfx ANIM_TAG_SPARKLE_4 @detect + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0x9, 0x0 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 0x1, 0x0, 0x9, 0x7fff + delay 0x12 + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 0xd, 0x14, 0xffec + waitforvisualfinish + loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x3 + createvisualtask AnimTask_SwayMon, 0x5, 0x1, 0x18, 0xD0, 0x1, ANIM_TARGET + waitforvisualfinish + delay 0xA + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x9, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 0x2, 0x9, 0x0, 0x7fff + waitforvisualfinish + end + +Move_MAGIC_ROOM:: + call InitRoomAnimation + fadetobg BG_MAGIC_ROOM + waitbgfadein + delay 0x40 + restorebg + waitbgfadein + blendoff + end + +Move_SMACK_DOWN:: + loadspritegfx ANIM_TAG_BLACK_BALL + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ROCKS + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + createsprite gRockBlastRockSpriteTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x0, 0x0, 0x15, 0xffe7 + waitforvisualfinish + createvisualtask AnimTask_SmokescreenImpact, 0x8, 0x400, 0x1902 + fadetobg BG_IN_AIR + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0x0, 0x0, 0x0, 0xffff + createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 + goto SeismicTossWeak + +Move_STORM_THROW: + call StormThorwAnim + call StormThorwAnim + call StormThorwAnim + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + delay 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 10, 0xC00, 1, 2 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 + waitforvisualfinish + end +StormThorwAnim: + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + delay 6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 + delay 8 + return + +Move_FLAME_BURST: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_EXPLOSION + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 18 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 16, 1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 0, 1, 0 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 192, 76, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -192, 76, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 20, 140, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -20, 140, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 192, -160, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -192, -160, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 82, -112, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -82, -112, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 160, -52, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -160, -52, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 224, -32, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -224, -32, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 112, -128, 70 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -112, -128, 70 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 3 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 14, -14, 1, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + waitforvisualfinish + end + +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: + loadspritegfx ANIM_TAG_HOLLOW_ORB + monbg ANIM_ATTACKER + call SetBugBg + createvisualtask AnimTask_DragonDanceWaver, 5 + playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER + delay 8 + createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB_GREEN, 14, 0, 3 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 43 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 85 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 128 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 170 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 213 + delay 30 + playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER + delay 30 + playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER + waitforvisualfinish + clearmonbg ANIM_ATTACKER + call UnsetBugBg + end + +Move_HEAVY_SLAM: + loadspritegfx ANIM_TAG_CLAW_SLASH + loadspritegfx ANIM_TAG_IMPACT + loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + waitforvisualfinish + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, ANIM_ATTACKER + waitforvisualfinish + delay 11 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, 1, 0 + loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 10, 2 + delay 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + waitforvisualfinish + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6 + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_SYCHRONOISE: + loadspritegfx ANIM_TAG_THIN_RING @hypervoice ring + loadspritegfx ANIM_TAG_SPARK_2 @yellow color + loadspritegfx ANIM_TAG_WATER_ORB @blue color + loadspritegfx ANIM_TAG_POISON_BUBBLE @violet color + loadspritegfx ANIM_TAG_SMALL_EMBER @flame wheel particle + loadspritegfx ANIM_TAG_AIR_WAVE_2 @aero particles + monbg ANIM_DEF_PARTNER + splitbgprio_foes ANIM_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0xC, 0x0 @Darken + waitforvisualfinish + panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + createsprite gSynchronoiseVioletRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 + delay 0x1 + createsprite gSynchronoiseBlueRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 + delay 0x1 + createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 + delay 0x25 + panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + createsprite gSynchronoiseBlueRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 + delay 0x1 + createsprite gSynchronoiseVioletRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 + delay 0x1 + createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 + waitforvisualfinish + loopsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET, 0x3, 0x5 + createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, SOUND_PAN_ATTACKER, 0xb0, 0x28 + createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0xff40, 0xf0, 0x28 + createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, SOUND_PAN_ATTACKER, 0xff60, 0x28 + createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0xff40, 0xff90, 0x28 + createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0xa0, 0x30, 0x28 + createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0xff20, 0xffe0, 0x28 + createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0x70, 0xff80, 0x28 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0xC, 0x0, 0x0 @Darken + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_ELECTRO_BALL: + loadspritegfx ANIM_TAG_SPARK_2 @yelow + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @ball + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + createsprite gGrowingChargeOrb2SpriteTemplate, ANIM_ATTACKER, 2, 0 + delay 0x19 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0x14 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0xF + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0x6 + loopsewithpan SE_M_CHARGE, 0xC, 0x6, 0x5 + waitforvisualfinish + createsprite gElectroBallCannonBallTemplate, ANIM_TARGET, 2, 16, 16, 8 + waitforvisualfinish + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x4, 0x0, 0x8, 0x1 + call ElectricityEffect + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_SOAK: + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_WATER_IMPACT + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + setalpha 12, 8 + createsprite gWaterGunProjectileSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 0, 0, 40, -25 + playsewithpan SE_M_BUBBLE, 192 + delay 2 + createsprite gWaterGunProjectileSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 5, 0, 40, -25 + playsewithpan SE_M_BUBBLE, 192 + delay 2 + createsprite gWaterGunProjectileSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, -5, 0, 40, -25 + playsewithpan SE_M_BUBBLE, 192 + delay 30 + playsewithpan SE_M_WATERFALL, 63 + createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 17, 1 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 2, 0, 12, RGB_BLUE + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 0 + delay 2 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 5, 0, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 5, 0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 5, 0 + delay 2 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -5, 0, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, -5, 0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, -5, 0 + delay 2 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_FLAME_CHARGE: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 0x20, 0x6 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0xc, 0x6, 0x6, 0x3 + call FlameChargeSwirl + delay 0x9 + call FlameChargeSwirl + delay 0x9 + call FlameChargeSwirl + delay 0x9 + call FlameChargeSwirl + delay 0x9 + call FlameChargeSwirl + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x18 0x0 0x0 0x5 + delay 0x3 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x0 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x6, 0x0, 0x8, 0x1 + call FireSpreadEffect + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 0x8 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x7 + waitforvisualfinish + clearmonbg ANIM_TARGET + end +FlameChargeSwirl: + launchtemplate gFlameChargeEmberTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + return + +Move_COIL: + loadspritegfx ANIM_TAG_TENDRILS + loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4 + launchtemplate gConstrictBindingSpriteTemplate 0x84, 0x4, 0x0 0x10 0x0 0x2 + delay 0x7 + launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0x0 0x0 0x2 + launchtemplate gConstrictBindingSpriteTemplate 0x82, 0x4, 0x0 0x8 0x1 0x2 + delay 0x7 + launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0xfff8 0x1 0x2 + delay 0x8 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x3 0x0 0x6 0x1 + delay 0x14 + launchtask AnimTask_ShakeMon2 0x83 0x5 0x1 0x4 0x0 0x5 0x1 + launchtask AnimTask_StretchTargetUp 0x3 0x0 + playsewithpan SE_M_BIND, SOUND_PAN_TARGET + setarg 0x7 0xffff + waitforvisualfinish + end + +Move_LOW_SWEEP: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + createsprite gSlidingKickSpriteTemplate, ANIM_TARGET, 2, -24, 14, 40, 8, 160, 0 + delay 4 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 2 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 + end + +Move_ACID_SPRAY: + loadspritegfx ANIM_TAG_POISON_BUBBLE + monbg ANIM_TARGET + createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, -20, FALSE + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 33 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(30, 0, 31) + playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 10, 15, 55, FALSE + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, -20, 15, 55, FALSE + delay 3 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 5, 15, 55, FALSE + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, -10, 15, 55, FALSE + delay 3 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 30, 15, 55, FALSE + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, -30, 15, 55, FALSE + delay 3 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 2, 15, 55, FALSE + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, -5, 15, 55, FALSE + delay 3 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 20, 15, 55, FALSE + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +Move_FOUL_PLAY: + loadspritegfx ANIM_TAG_POISON_BUBBLE + loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET @Black colour + monbg ANIM_TARGET + setalpha 12, 8 + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 + delay 0x6 + launchtemplate gFoulPlayImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1 + playsewithpan SE_M_VITAL_THROW SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 0x3, 0xa, 0x0, 0x0 + launchtemplate gFoulPlayRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + delay 0x8 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 0x3, 0xa, 0x0, 0x0 + launchtemplate gFoulPlayRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_SIMPLE_BEAM: + loadspritegfx ANIM_TAG_GOLD_RING @psybeam + loadspritegfx ANIM_TAG_ROCKS @brown color + loadspritegfx ANIM_TAG_PINK_PETAL @pink color + loadspritegfx ANIM_TAG_THIN_RING @ring + setalpha 8, 8 + monbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + playsewithpan SE_M_BUBBLE_BEAM, SOUND_PAN_ATTACKER + call SimpleBeamsRegular + call SimpleBeamsRegular + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x7FFF + launchtask AnimTask_SwayMon 0x5 0x5 0x0 0x6 0x800 0x4 ANIM_TARGET + call SimpleBeamWithRings + call SimpleBeamWithRings + call SimpleBeamWithRings + call SimpleBeamWithRings + call SimpleBeamWithRings + launchtemplate gSimpleBeamBrownRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8 + delay 0x2 + launchtemplate gSimpleBeamPinkRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8 + delay 0x2 + stopsound + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7FFF + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +SimpleBeamsRegular: + launchtemplate gSimpleBeamBrownTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0 + delay 0x2 + launchtemplate gSimpleBeamPinkTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0 + delay 0x2 + return +SimpleBeamWithRings: + launchtemplate gSimpleBeamBrownTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0 + launchtemplate gSimpleBeamBrownRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8 + delay 0x2 + launchtemplate gSimpleBeamPinkTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0 + launchtemplate gSimpleBeamPinkRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8 + delay 0x2 + return + +Move_ENTRAINMENT: + createvisualtask AnimTask_TeeterDanceMovement, 5 + playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER + delay 0x18 + playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER + delay 0x18 + playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER + delay 0x18 + playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER + delay 0x18 + playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x1f 0x1 + waitforvisualfinish + end + +Move_AFTER_YOU: + loadspritegfx ANIM_TAG_ANGER @rage + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @green color + launchtask AnimTask_SwayMon 0x5 0x5 0x1 0xF 0x600 0x2 ANIM_ATTACKER + delay 0x1 + launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0xffec 0xffe0 + launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0xfffb 0xffe5 + playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER + delay 0x14 + launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0x14 0xffe0 + launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0x23 0xffe5 + playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER + waitforvisualfinish + end + +Move_ROUND: + loadspritegfx ANIM_TAG_MUSIC_NOTES + createvisualtask AnimTask_MusicNotesRainbowBlend, 2 + waitforvisualfinish + monbg ANIM_TARGET + createvisualtask SoundTask_PlayCryHighPitch, 2, 0, 255 + createvisualtask AnimTask_UproarDistortion, 2, 0 + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 7, 0, 12 + delay 5 + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 6, 1, 12 + delay 5 + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 1, 2, 12 + delay 5 + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 2, 3, 12 + delay 20 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 13, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + createvisualtask AnimTask_MusicNotesClearRainbowBlend, 2 + waitforvisualfinish + end + +Move_ECHOED_VOICE: + loadspritegfx ANIM_TAG_METAL_SOUND_WAVES + monbg ANIM_DEF_PARTNER + splitbgprio_foes ANIM_TARGET + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x2 0x0 0x8 0x1 + call MetalSoundPlayNote + call MetalSoundPlayNote + call MetalSoundPlayNote + call MetalSoundPlayNote + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + delay 0x0 + waitforvisualfinish + end +MetalSoundPlayNote: + panse SE_M_UPROAR, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 + launchtemplate gMetalSoundSpriteTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0x1e 0x0 + delay 0x2 + return + +Move_CHIP_AWAY: + loadspritegfx ANIM_TAG_IMPACT + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x7FFF + waitforvisualfinish + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x18 0x6 0x1 0x5 + delay 0x4 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1 + launchtemplate gBasicHitSplatSpriteTemplate 0x84, 0x4, 0x0 0x0 0x1 0x1 + playsewithpan SE_M_VITAL_THROW2 SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x7FFF + waitforvisualfinish + blendoff + end + +Move_CLEAR_SMOG: + loadspritegfx ANIM_TAG_MIST_CLOUD + monbg ANIM_TARGET + splitbgprio_all + setalpha 12, 8 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_MIST_CLOUD, 0, 6, 6, RGB(26, 0, 26) + loopsewithpan SE_M_MIST, SOUND_PAN_TARGET, 17, 10 + call ClearSmogCloud + call ClearSmogCloud + call ClearSmogCloud + call ClearSmogCloud + call ClearSmogCloud + call ClearSmogCloud + call ClearSmogCloud + delay 120 + loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 18, 2 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB_WHITE + delay 10 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 15, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +ClearSmogCloud: + createsprite gMistCloudSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, 48, 240, 1, 0 + delay 7 + return + +Move_STORED_POWER: + loadspritegfx ANIM_TAG_RED_ORB_2 + loadspritegfx ANIM_TAG_IMPACT + call SetPsychicBackground + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createvisualtask AnimTask_SpitUpDeformMon, 5 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 8, 2 + delay 45 + playsewithpan SE_M_SPIT_UP, SOUND_PAN_ATTACKER + delay 3 + createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 0, 12 + createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 32, 12 + createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 64, 12 + createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 96, 12 + createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 128, 12 + createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 160, 12 + createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 192, 12 + createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 224, 12 + delay 10 + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, 0, 1, 8, 1, 0 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -12, 10, 1, 1 + delay 5 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 12, -10, 1, 1 + waitforvisualfinish + call UnsetPsychicBg + waitforvisualfinish + end + +Move_QUICK_GUARD: + loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @hand + loadspritegfx ANIM_TAG_SPARKLE_4 @sparkles + setalpha 12, 8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x2 0x0 0xa 0x7FFF + delay 0x10 + monbg ANIM_ATTACKER + launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xE 0x0 0x8 0x0 0x0 + launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xfff2 0x0 0x8 0x0 0x0 + delay 0x1 + launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xE 0x0 0x8 0x0 0x0 + launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xfff2 0x0 0x8 0x0 0x0 + delay 0x1 + launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xE 0x0 0x8 0x0 0x0 + launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xfff2 0x0 0x8 0x0 0x0 + waitforvisualfinish + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x0 0xffe3 @up + launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x16 0xffec @upper right + launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x1D 0x0 @right + launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0xffe9 0xffec @upper left + launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0xffe2 0x0 @left + launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x0 0x1c @down + launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x16 0x13 @lower left + launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0xffea 0x13 @lower right + waitforvisualfinish + blendoff + clearmonbg ANIM_ATTACKER + end + +Move_ALLY_SWITCH: + end + +Move_SCALD: + loadspritegfx ANIM_TAG_WATER_ORB + loadspritegfx ANIM_TAG_WATER_IMPACT + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1 + delay 6 + panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + createvisualtask AnimTask_StartSinAnimTimer, 5, 100 + call ScaldBeams + call ScaldBeams + call ScaldBeams + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 11, RGB_RED + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1 + call ScaldHitSplats + call ScaldBeams + call ScaldBeams + call ScaldHitSplats + call ScaldBeams + call ScaldBeams + call ScaldHitSplats + call ScaldBeams + call ScaldBeams + call ScaldHitSplats + call ScaldBeams + call ScaldBeams + call ScaldHitSplats + delay 2 + call ScaldHitSplats + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +ScaldBeams: + createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 0 + delay 1 + createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 0 + delay 1 + return + +ScaldHitSplats: + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 1 + return + +Move_SHELL_SMASH: + loadspritegfx ANIM_TAG_SHELL_RIGHT + loadspritegfx ANIM_TAG_SHELL_LEFT + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_HANDS_AND_FEET + playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER + createsprite gShellSmashRightShellSpriteTemplate, ANIM_ATTACKER, 2, 0xffd7, 0x0, 0x2, 0x333, 0x0, 0xa + createsprite gShellSmashLeftShellSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x0, 0x6, 0xfccd, 0x0, 0xa + delay 10 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x8, 0x1, 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 5, 1 + waitforvisualfinish + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x18, 0xe, 0x2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x5, 0x0, 0xffec, 0x18, 0xe, 0x1 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x5, 0x14, 0xffe8, 0xe, 0x2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0xfffb, 0x0, 0xffec, 0xffe8, 0xe, 0x2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0x1e, 0x12, 0x8, 0x2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0xffee, 0x8, 0x2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xffe2, 0x12, 0x8, 0x2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xffe2, 0xffee, 0x8, 0x2 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 7, 1 + waitforvisualfinish + end + +Move_HEAL_PULSE: + loadspritegfx ANIM_TAG_GREEN_SPARKLE + loadspritegfx ANIM_TAG_BLUE_STAR + loadspritegfx ANIM_TAG_THIN_RING + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8 + createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -16, 32, -3, 1 + delay 3 + createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 16, 32, -3, -1 + delay 3 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8 + createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 32, 32, -3, 1 + delay 3 + createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -32, 32, -3, 1 + delay 3 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8 + createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 0, 32, -3, 1 + delay 3 + createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -8, 32, -3, 1 + delay 3 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8 + createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -8, 32, -3, 1 + delay 3 + createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 24, 32, -3, 1 + delay 3 + createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -24, 32, -3, 1 + waitforvisualfinish + waitsound + call HealingEffect2 + end + +Move_HEX: + loadspritegfx ANIM_TAG_PURPLE_FLAME + loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x4C4A @;Deep purple + waitforvisualfinish + monbg ANIM_TARGET + splitbgprio_all + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + waitbgfadein + launchtask AnimTask_PurpleFlamesOnTarget 0x3 0x0 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x2 0x0 0x25 0x1 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET + delay 0x20 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xc 0x4C4A @;Deep purple + launchtemplate gCurseGhostSpriteTemplate 0x84, 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x10 0x0 0x4C4A @;Deep purple + waitforvisualfinish + end + +Move_SKY_DROP: + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_IMPACT + choosetwoturnanim SkyDropSetup SkyDropUnleash + end +SkyDropSetup: + invisible ANIM_ATTACKER + loadspritegfx ANIM_TAG_SMALL_BUBBLES @mist ball + loadspritegfx ANIM_TAG_WHITE_FEATHER + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + delay 0x0 + playsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER + launchtemplate gSkyDropFlyBallTemplate 0x80 0x6 0x0 0x0 0x0 0x0 0x1e 0x0 + waitforvisualfinish + invisible ANIM_TARGET + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gSkyDropTargetFlyingTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + end +SkyDropUnleash: + visible ANIM_TARGET + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 + delay 0x7 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + launchtemplate gBasicHitSplatSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0 + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x5 0xb 0x1 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_SHIFT_GEAR: + loadspritegfx ANIM_TAG_GEAR @Gear + monbg ANIM_ATTACKER + playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER + launchtemplate gShiftGearGearsTemplate 0x2 0x5 ANIM_ATTACKER 0xFFF3 0x8 0x65 0xa + launchtemplate gShiftGearGearsTemplate 0x2 0x5 ANIM_ATTACKER 0xE 0xFFF8 0x65 0xa + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end + +Move_CIRCLE_THROW: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_ICE_CHUNK + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0xc 0x4 0x1 0x2 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x14 0x0 0x0 0x4 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1 + launchtemplate gCircleThrowRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 0x1 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe8 0x0 0x0 0x4 + launchtemplate gCircleThrowRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + waitforvisualfinish + delay 0x3 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x7 + delay 0xb + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0xa + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_INCINERATE: + loadspritegfx ANIM_TAG_SMALL_EMBER + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + setalpha 12, 8 + delay 1 + createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + createvisualtask AnimTask_SwayMon, 5, 0, 3, 0xc00, 8, ANIM_TARGET + createvisualtask AnimTask_SwayMon, 5, 0, 3, 0xc00, 8, ANIM_DEF_PARTNER + delay 3 + createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20 + delay 3 + createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 3 + createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20 + delay 3 + createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 3 + createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20 + delay 3 + createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 3 + createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20 + delay 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 8, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 0, 8, 1 + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB_RED, 12, 1, 1 + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_DEF_PARTNER, RGB_RED, 12, 1, 1 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 0, 9 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_QUASH: + loadspritegfx ANIM_TAG_ASSURANCE_HAND @hand + fadetobg BG_DARK + waitbgfadein + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtemplate gQuashArmHitTemplate 0x83, 0x3 0x0 0xffe0 0xf + delay 0x13 + playsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER + launchtask AnimTask_SquishTarget 0x2 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + restorebg + waitbgfadein + end + +Move_ACROBATICS: + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336 + waitforvisualfinish + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 + delay 7 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 11, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +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 + loadspritegfx ANIM_TAG_PINK_PETAL @pink color + monbg ANIM_TARGET + setalpha 8, 8 + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + launchtemplate gReflectTypeBlueStringTemplate 0x82 0x2 0x0 0xa + delay 0x4 + launchtemplate gReflectTypeVioletStringTemplate 0x82 0x2 0x0 0xfffe + delay 0x4 + launchtemplate gReflectTypeWhiteStringTemplate 0x82 0x2 0x0 0x16 + waitforvisualfinish + clearmonbg ANIM_TARGET + delay 0x1F + monbg ANIM_ATTACKER + playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER + launchtemplate gReflectTypeWhiteRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gReflectTypePinkRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gReflectTypeVioletRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gReflectTypeBlueRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gReflectTypeWhiteRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gReflectTypePinkRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gReflectTypeVioletRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gReflectTypeBlueRingTemplate 0x2 0x0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end + +Move_RETALIATE: + loadspritegfx ANIM_TAG_CUT @Cut + monbg ANIM_DEF_PARTNER + setalpha 9, 8 + launchtask AnimTask_AttackerPunchWithTrace 0x2 0x2 0x7128 0xa + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + waitforvisualfinish + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gGuillotineSpriteTemplate 0x2 0x1 0x0 + launchtemplate gGuillotineSpriteTemplate 0x2 0x1 0x1 + delay 0x38 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x10 0x43D + waitforvisualfinish + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x043D + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_FINAL_GAMBIT: + loadspritegfx ANIM_TAG_PINK_CLOUD @yawn animation + loadspritegfx ANIM_TAG_WATER_IMPACT @blue colour + loadspritegfx ANIM_TAG_EXPLOSION @explosion animation + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 @Darken + waitforvisualfinish + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0xa 0x1 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x2 0x0 0x8 0x7fff + waitforvisualfinish + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER + launchtemplate gFinalGambitBlueYawnTemplate 0x2 0x3 0x0 0x0 0x25 + delay 0x4 + waitforvisualfinish + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0xf 0x1 + launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1 + waitforvisualfinish + monbg ANIM_TARGET + delay 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gFinalGambitExplosionTemplate 0x3 0x4 0x0 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + waitforvisualfinish + clearmonbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + end + +Move_BESTOW: + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + panse SE_M_METRONOME, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + launchtask AnimTask_CreateBestowItem 0x2 0x6 0x14 0x0 0x0 0x0 0x28 0xffe7 + waitforvisualfinish + unloadspritegfx ANIM_TAG_ITEM_BAG @;The generated item sprite uses this tag + clearmonbg ANIM_TARGET + end + +Move_INFERNO: + loadspritegfx ANIM_TAG_SMALL_EMBER + call SetImpactBackground + loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 40, 4 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 2, 94, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 0, 9, RGB_RED + call InfernoAnim + call InfernoAnim + call InfernoAnim + call InfernoAnim + call InfernoAnim + call InfernoAnim + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 9, 0, RGB_RED + restorebg + waitbgfadein + waitforvisualfinish + end +InfernoAnim: + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 50, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, -25, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -46, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 23, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 42, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -21, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -42, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 21, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 46, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -23, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, -50, 1 + delay 1 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 25, 1 + delay 1 + return + +Move_WATER_PLEDGE: + loadspritegfx ANIM_TAG_WATER_ORB + loadspritegfx ANIM_TAG_WATER_IMPACT + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + +@left fountain + + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1 + delay 6 + panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, ANIM_TARGET, 1 + + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, ANIM_TARGET, 1 + + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + +@middle fountain (also continues left fountain) + + panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 11, RGB_BLUE + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1 + + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + +@right fountain (also continues middle and left fountains) + + panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 0, ANIM_TARGET, 1 + + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 0, ANIM_TARGET, 1 + + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_FIRE_PLEDGE: + loadspritegfx ANIM_TAG_SMALL_EMBER + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + +@left fountain + + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1 + delay 6 + panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + +@middle fountain (also continues left fountain) + + panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 11, RGB_RED + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1 + + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + +@right fountain (also continues middle and left fountains) + + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_GRASS_PLEDGE: + loadspritegfx ANIM_TAG_LEAF + loadspritegfx ANIM_TAG_WHIP_HIT + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1 + delay 6 + playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET + createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, -16, 0 + + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + +@middle fountain (also continues left fountain) + + playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET + createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, 0, 0 + + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 11, RGB_GREEN + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1 + + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + +@right fountain (also continues middle and left fountains) + + playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET + createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, 16, 0 + + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_VOLT_SWITCH: + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_THIN_RING + monbg ANIM_ATTACKER + setalpha 12, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 4 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8 + delay 4 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 3, 45, 1 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8 + delay 4 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8 + delay 4 + call ElectricityEffect + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createvisualtask AnimTask_CanBattlerSwitch 1, ANIM_ATTACKER + jumpretfalse VoltSwitchContinue + createvisualtask AnimTask_IsTargetSameSide 1 + jumprettrue VoltSwitchAgainstPartner + createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, -2 +VoltSwitchContinue: + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + createvisualtask AnimTask_CanBattlerSwitch 1, ANIM_ATTACKER + jumpretfalse VoltSwitchLast + invisible ANIM_ATTACKER +VoltSwitchLast: + delay 8 + end +@ Attacking the same side requires a change of direction +@ why would you attack your partner though?! +VoltSwitchAgainstPartner: + createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, +2 + goto VoltSwitchContinue + +Move_STRUGGLE_BUG: + loadspritegfx ANIM_TAG_MOVEMENT_WAVES + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 2, 0, 9, 0x0a1f + waitforvisualfinish + createvisualtask AnimTask_FlailMovement, 2, 0 + createsprite gMovementWavesSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 2 + createsprite gMovementWavesSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 2 + loopsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER, 0x8, 0x2 + waitforvisualfinish + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 0x1e, 1, 0 + createvisualtask AnimTask_ShakeTargetPartnerBasedOnMovePowerOrDmg, 2, FALSE, 1, 0x1e, 1, 0 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 2, 9, 0, 0x0a1f + delay 5 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 + delay 5 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_BULLDOZE: + launchtask AnimTask_Splash 0x2 0x2 0x0 0x3 + delay 0x8 + goto Move_EARTHQUAKE + +Move_FROST_BREATH: + loadspritegfx ANIM_TAG_ICE_CHUNK + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_FIRE_PLUME + fadetobg BG_ICE + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x300 0x0 0x0 0xffff + waitbgfadein + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x5 0x5 0x0 0x0 0x2 0x28 0x1 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x82 0x5 0x0 0xf 0x0 0x0 0x4 + waitforvisualfinish + launchtemplate gFrostBreathBlueBreathTemplate 0x82 0x5 0x1e 0xf 0x0 0xa 0xa + waitforvisualfinish + loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0xb, 0x3 + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x3 0x19 0x1 + launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0x5 0x0 + delay 0x1 + launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0xfff6 0xfff1 + delay 0x1 + launchtemplate gFrostBreathBlueRageTemplate 0x82, 0x3, 0x1 0x0 0x19 + delay 0x1 + launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0xf 0x5 + delay 0x1 + launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0xffe7 0x0 + delay 0x1 + launchtemplate gFrostBreathBlueRageTemplate 0x82, 0x3, 0x1 0x1e 0x1e + delay 0x1 + launchtemplate gFrostBreathBlueRageTemplate 0x82, 0x3, 0x1 0xffe5 0x19 + delay 0x1 + launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0x0 0x8 + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0xc2 0x3 0x0 0x0 0x4 + waitforvisualfinish + call UnsetPsychicBg + end + +Move_DRAGON_TAIL: + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_SLAM_HIT + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SLAM_HIT, 0x2, 0xD, 0xD, 0x5CAE + waitforvisualfinish + setalpha 12, 8 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x14 0x3 0x0 0x4 + delay 0x1 + launchtemplate gSlamHitSpriteTemplate 0x2 0x2 0x0 0x0 + delay 0x3 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfff4 0xa 0x0 0x3 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + call TailWhackDown + delay 0x3 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x0 0x3 0x6 0x1 + waitforvisualfinish + delay 0x5 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x6 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +TailWhackDown: + launchtemplate gBasicHitSplatSpriteTemplate 0x83 4 0xfff6 0xfff8 1 1 + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + launchtemplate gRockScatterSpriteTemplate, 0x82, 4, -12, 0x1b, 2, 3 + launchtemplate gRockScatterSpriteTemplate, 0x82, 4, 8, 28, 3, 4 + launchtemplate gRockScatterSpriteTemplate, 0x82, 4, -4, 30, 2, 3 + launchtemplate gRockScatterSpriteTemplate, 0x82, 4, 12, 25, 4, 4 + return + +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 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 28, 26, 2 + delay 5 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -23, 10, 2 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 23, 10, 2 + delay 5 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -18, 26, 3 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 18, 26, 3 + delay 14 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB(31, 2, 4) + createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -13, 26, 2 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 13, 26, 2 + delay 5 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -8, 10, 2 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 8, 10, 2 + delay 5 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -3, 26, 3 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 3, 26, 3 + delay 14 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -2, 26, 2 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 2, 26, 2 + delay 5 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -7, 10, 2 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 7, 10, 2 + delay 5 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -12, 26, 3 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 12, 26, 3 + waitforvisualfinish + end + +Move_ELECTROWEB: + loadspritegfx ANIM_TAG_SPIDER_WEB + loadspritegfx ANIM_TAG_WEB_THREAD + loadspritegfx ANIM_TAG_SPARK_2 + monbg ANIM_DEF_PARTNER + delay 0 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPIDER_WEB, 0, 6, 6, RGB(31, 30, 1) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, RGB_BLACK + waitforvisualfinish + splitbgprio ANIM_TARGET + waitforvisualfinish + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, TRUE + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK + + @ ElectricityEffect looks ugly against both opponents, to do later + jumpifdoublebattle Move_ELECTROWEB_Wait + + call ElectricityEffect +Move_ELECTROWEB_Wait: + waitforvisualfinish + end + +Move_WILD_CHARGE: + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gGrowingShockWaveOrbSpriteTemplate 0x2 0x0 @electric circle + delay 0x1e + waitforvisualfinish + loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 0x1c, 0x2 + call ScreenFlash + waitforvisualfinish + call ScreenFlash + waitforvisualfinish + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0 + waitforvisualfinish + delay 0xb + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5 + delay 0x6 + launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x10 0x1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + call ElectricityEffect + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +ScreenFlash: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x07FE + return + +Move_DRILL_RUN: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HORN_HIT + setalpha 12, 8 + fadetobg BG_FISSURE + waitbgfadeout + launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff + launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x0 + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 0x2 + launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x1 + launchtemplate gHornHitSpriteTemplate 0x84 0x3 0x0 0x0 0xc + waitforvisualfinish + playse 0x14 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x0 0x2 0x0 0x28 0x1 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0xa 0x0 0x28 0x1 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x2 0x1 0x3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xfffc 0x3 0x1 0x3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xfff8 0xfffb 0x1 0x3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x4 0xfff4 0x1 0x3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x10 0x0 0x1 0x3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x5 0x12 0x1 0x3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xffef 0xc 0x1 0x2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xffeb 0xfff1 0x1 0x2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x8 0xffe5 0x1 0x2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x20 0x0 0x1 0x2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x2 + waitforvisualfinish + call UnsetPsychicBg + end + +Move_DUAL_CHOP: + loadspritegfx ANIM_TAG_HANDS_AND_FEET @hand + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 + delay 0x6 + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x5 0x0 0x6 0x1 + launchtemplate gKarateChopSpriteTemplate 0x2 0x8 0xffe0 0x0 0x0 0x0 0xa 0x1 0x3 0x0 @left + launchtemplate gKarateChopSpriteTemplate 0x2 0x8 0x0515 0x0 0x0 0x0 0xa 0x1 0x3 0x0 @right + waitforvisualfinish + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtemplate gDualChopImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x4 0x0 0x6 0x1 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_HEART_STAMP: + loadspritegfx ANIM_TAG_HEART_STAMP + monbg ANIM_TARGET + loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 0xc, 0x3 + launchtemplate gHeartStampSpinningHeartTemplate, 0x80, 0x4 0x0 0x0 0x1 0x1e + delay 0x1E + clearmonbg ANIM_TARGET + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon2 0x83 0x5 0x1 0x4 0x0 0x5 0x1 + launchtask AnimTask_StretchTargetUp 0x3 0x0 + waitforvisualfinish + end + +Move_HORN_LEECH: + loadspritegfx ANIM_TAG_HORN_LEECH @Horn + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_BLUE_STAR + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + launchtemplate gHornLeechHornTemplate 0x82, 0x3, 0x0 0x0 0x25 + waitforvisualfinish + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + call GigaDrainAbsorbEffect + waitforvisualfinish + call HealingEffect + waitforvisualfinish + end + +Move_SACRED_SWORD: + loadspritegfx ANIM_TAG_CUT @Cut + loadspritegfx ANIM_TAG_SWORD @Sword + loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour + loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade + monbg ANIM_ATTACKER + setalpha 12, 8 + playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER + launchtemplate gSwordsDanceBladeSpriteTemplate 0x2 0x2 0x0 0x0 + delay 0x16 + launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2715 0x2 0x2 0x7ff2 0x10 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 0x1 + monbg ANIM_TARGET + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + launchtemplate gSacredSwordBladesTemplate 0x81 0x5 0x0 0xa 0x0 0xFF00 0xA + launchtemplate gSacredSwordCutTemplate 0x2 0x3 0x28 0xffe0 0x0 + delay 0x5 + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x0 0x3 0xa 0x1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + waitforvisualfinish + end + +Move_RAZOR_SHELL: + loadspritegfx ANIM_TAG_RAZOR_SHELL + loadspritegfx ANIM_TAG_CUT + monbg ANIM_TARGET + launchtemplate gRazorShellTemplate 0x2 0x5 ANIM_TARGET 0x0 0x0 25 0 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gCuttingSliceSpriteTemplate 0x1 0x3 0x28 0xffe0 0x0 + delay 0x5 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xa 0x1 + waitforvisualfinish + clearmonbg ANIM_TARGET + waitforvisualfinish + end + +Move_HEAT_CRASH: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_WARM_ROCK + loadspritegfx ANIM_TAG_ROCKS + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_SUCCESS, SOUND_PAN_TARGET + launchtemplate gHeatCrashEruptionRockTemplate 0x3 0x3 0x0 0xffe0 0xf + delay 0x13 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0xfff8 0x1 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x4 0x9 0x1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + delay 0x5 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x5 0x1 + launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0xfff4 0x20 0x3 0x4 + launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0x8 0x1f 0x2 0x2 + launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0xfffc 0x1c 0x2 0x3 + launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0xc 0x1e 0x4 0x3 + clearmonbg ANIM_TARGET + blendoff + end + +Move_LEAF_TORNADO: + loadspritegfx ANIM_TAG_GUST @Gust + loadspritegfx ANIM_TAG_LEAF @Leaves + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + playsewithpan SE_M_GUST, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x2f 0x1 + launchtemplate gEllipticalGustSpriteTemplate 0x2 0x2 0x0 0xfff0 + launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + call LeafTornadoVortex + call LeafTornadoVortex + call LeafTornadoVortex + waitforvisualfinish + stopsound + clearmonbg ANIM_TARGET + end +LeafTornadoVortex: + launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x1 + delay 0x2 + launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x1 + delay 0x2 + launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x1 + delay 0x2 + launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x1 + delay 0x2 + launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x1 + delay 0x2 + launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x1 + delay 0x2 + return + +Move_STEAMROLLER: + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, 1, 0 + loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 6, 3 + delay 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 3, 1, 0 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 10, 6, 1, 0 + delay 1 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + waitforvisualfinish + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6 + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_COTTON_GUARD: + loadspritegfx ANIM_TAG_SPORE + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET 0x12 0x6 + call CreateCottonSpores + call CottonSporesSpiralInward + call CottonSporesSpiralInward + call CottonSporesSpiralInward + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + end +CottonSporesSpiralInward: + launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0x28 0xfff6 0xd + delay 0x3 + launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xffdd 0xfff6 0xd + delay 0x3 + launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xf 0xffd8 0xd + delay 0x3 + launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xfff6 0xffe0 0xd + delay 0x3 + launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0x19 0xffec 0xd + delay 0x3 + launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xffd8 0xffec 0xd + delay 0x3 + launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0x5 0xffd8 0xd + delay 0x3 + return + +Move_NIGHT_DAZE: + loadspritegfx ANIM_TAG_THIN_RING @uproar + loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color + loadspritegfx ANIM_TAG_RED_ORB @circles + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + playsewithpan SE_ORB, SOUND_PAN_ATTACKER + launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x0 + launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x20 + launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x40 + launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x60 + launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x80 + launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0xa0 + launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x0 + launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0xe0 + delay 0x1 + launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + delay 0x1 + launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + delay 0xF + launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + delay 0x1 + launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + delay 0x1 + launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + waitforvisualfinish + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x1f 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x2002 + delay 0x6 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x2002 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + end + +Move_PSYSTRIKE: + monbg ANIM_TARGET + setalpha 8, 8 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_RED + waitforvisualfinish + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 15, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -9, -9, 15, ANIM_TARGET, 1 + waitforvisualfinish + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_TAIL_SLAP: + loadspritegfx ANIM_TAG_IMPACT @Hit + loadspritegfx ANIM_TAG_AIR_WAVE_2 @Aeroblast + loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blades + monbg ANIM_TARGET + setalpha 12, 8 + choosetwoturnanim TailSlapRight TailSlapLeft +TailSlapContinue: + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +TailSlapRight: + launchtemplate gTailSlapTemplate 0x2 0x4 0xfff8 0x0 0x1 0x0 + goto TailSlapContinue +TailSlapLeft: + launchtemplate gTailSlapTemplate 0x2 0x4 0x8 0x0 0x1 0x0 + goto TailSlapContinue + +Move_HURRICANE: + loadspritegfx ANIM_TAG_GUST + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + fadetobg BG_HURRICANE + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x1000 0x0 0x1 0xffff + waitbgfadein + playsewithpan SE_M_GUST, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x40 0x1 + call HurricaneGust + delay 0xA + call HurricaneGust + delay 0xA + call HurricaneGust + delay 0xA + call HurricaneGust + delay 0xA + call HurricaneGust + delay 0xA + call HurricaneGust + waitforvisualfinish + stopsound + clearmonbg ANIM_DEF_PARTNER + blendoff + call UnsetPsychicBg + end +HurricaneGust: + createsprite gEllipticalGustSpriteTemplate, ANIM_ATTACKER, 2, 0, -16 + createvisualtask AnimTask_AnimateGustTornadoPalette, 5, 1, 70 + return + +Move_HEAD_CHARGE: + loadspritegfx ANIM_TAG_IMPACT + fadetobgfromset BG_GIGA_IMPACT_OPPONENT, BG_GIGA_IMPACT_PLAYER, BG_GIGA_IMPACT_OPPONENT + waitbgfadein + launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x0 + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 0x2 + launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x1 + waitforvisualfinish + launchtask AnimTask_ShakeMon 0x2 0x5 0x0 0x2 0x0 0x4 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1 + launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x2 + launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + restorebg + waitbgfadeout + end + +Move_GEAR_GRIND: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_GEAR @Gear + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER + launchtemplate gGearGrindTemplate 0x2 0x6 0xffe0 0xffe0 0x0 0x333 0x333 0xa + launchtemplate gGearGrindTemplate 0x2 0x6 0x20 0x20 0x0 0xfccd 0xfccd 0xa + delay 0xa + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0x5 0x2 + waitforvisualfinish + launchtemplate gGearGrindTemplate 0x2 0x6 0x20 0xffe0 0x0 0xfccd 0x333 0xa + launchtemplate gGearGrindTemplate 0x2 0x6 0xffe0 0x20 0x0 0x333 0xfccd 0xa + delay 0xa + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x8 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x8 0x4 0x2 + waitforvisualfinish + stopsound + clearmonbg ANIM_TARGET + blendoff + end + +Move_SEARING_SHOT: + loadspritegfx ANIM_TAG_SPARK_2 @yellow color + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_WARM_ROCK @eruption + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ELECTRIC_ORBS, 0x0, 0xC, 0xC, 0x0E3E @Orange + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_WARM_ROCK, 0x0, 0xB, 0xB, 0x01BE @Orange + monbg ANIM_ATTACKER + setalpha 8, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + waitforvisualfinish + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x1F + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0x1e + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0x1e + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gSearingShotRedChargeTemplate 0x2 0x1 0x0 + delay 0x19 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0x14 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0xf + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + waitforvisualfinish + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x0 0x1e 0x19 0xffec + launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x20 0x1e 0x19 0xffec + launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x40 0x1e 0x19 0xffec + delay 0x2 + launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x60 0x1e 0x19 0xffec + launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x80 0x1e 0x19 0xffec + delay 0x2 + launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0xffec + launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0xffec + delay 0x2 + launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xe0 0x1e 0x19 0xffec + delay 0xF + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x0 0x1e 0x19 0x0 + delay 0x2 + launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x20 0x1e 0x19 0x0 + launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x40 0x1e 0x19 0x0 + launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x60 0x1e 0x19 0x0 + delay 0x2 + launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x80 0x1e 0x19 0x0 + delay 0x2 + launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0x0 + launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0x0 + delay 0x2 + launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xe0 0x1e 0x19 0x0 + delay 0x15 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x1F + clearmonbg ANIM_ATTACKER + fadetobg BG_FIRE + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xA00 0x0 0x1 0xffff + waitbgfadein + delay 0x1E + monbg ANIM_ATK_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK_PARTNER | ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER 0x2 0x0 0x9 0x1F + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x1B 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x1B 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATK_PARTNER 0x3 0x0 0x1B 0x1 + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, -5, -5, 0x1 0x1E ANIM_TARGET + launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, 5, 10, 0x1 0x1E ANIM_TARGET + launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, -5, -5, 0x1 0x1E ANIM_DEF_PARTNER + launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, 5, 10, 0x1 0x1E ANIM_DEF_PARTNER + launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, -5, -5, 0x1 0x1E ANIM_ATK_PARTNER + launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, 5, 10, 0x1 0x1E ANIM_ATK_PARTNER + delay 0x1E + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK_PARTNER | ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER 0x2 0x9 0x0 0x1F + delay 0x1E + call UnsetPsychicBg + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0 + clearmonbg ANIM_ATK_PARTNER + blendoff + end + +Move_TECHNO_BLAST: + launchtask AnimTask_TechnoBlast 0x5 0x0 + jumpargeq 0x0, TYPE_FIRE, TechnoBlastFire + jumpargeq 0x0, TYPE_WATER, TechnoBlastWater + jumpargeq 0x0, TYPE_ELECTRIC, TechnoBlastElectric + jumpargeq 0x0, TYPE_ICE, TechnoBlastIce +TechnoBlastNormal: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation + loadspritegfx ANIM_TAG_ORBS @circles + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray color + loadspritegfx ANIM_TAG_BLACK_BALL_2 @blast + loadspritegfx ANIM_TAG_SPARK_2 @blast particles + loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal + monbg ANIM_ATTACKER + setblends 0x80E + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 0xE, 0x8 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x28 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffd8 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0x28 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0xffd8 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0xffec 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x14 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffec 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteChargeTemplate 0x2 0x1 0x0 + call TechnoBlastWhiteCircles + call TechnoBlastWhiteCircles + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x28 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffd8 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0x28 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0xffd8 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0xffec 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x14 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffec 0x10 + delay 0x2 + waitforvisualfinish + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastWhiteBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 + launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 + launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 + launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 + launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 + launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 + launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 + launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 + launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + waitforvisualfinish + playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 + launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0 + delay 0x2 + launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 + delay 0x2 + launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 + delay 0x2 + launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + blendoff + clearmonbg ANIM_ATTACKER + end +TechnoBlastWhiteCircles: + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0x14 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffec 0x1e 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x14 0xffe2 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffec 0xffe2 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x14 0x1e 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0x0 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x0 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x28 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffd8 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0x28 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0xffd8 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0xffec 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x14 0x10 + delay 0x2 + launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffec 0x10 + delay 0x2 + return + +TechnoBlastElectric: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation + loadspritegfx ANIM_TAG_ORBS @circles + loadspritegfx ANIM_TAG_BLACK_BALL_2 @blast + loadspritegfx ANIM_TAG_SPARK_2 @blast particles + loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal + monbg ANIM_ATTACKER + setblends 0x80E + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 0xE, 0x8 + launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 0x0 + call TechnoBlastCharging1 + delay 0xF + call TechnoBlastCharging2 + delay 0xF + call TechnoBlastCharging1 + delay 0xF + call TechnoBlastCharging2 + delay 0xF + call TechnoBlastCharging1 + delay 0xF + call TechnoBlastCharging2 + delay 0xF + call TechnoBlastCharging1 + delay 0xF + call TechnoBlastCharging2 + delay 0xF + waitforvisualfinish + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastYellowBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 + launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 + launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 + launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 + launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 + launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 + launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 + launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 + launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + waitforvisualfinish + playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 + launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1 + delay 0x2 + launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + delay 0x2 + launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + delay 0x2 + launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + blendoff + clearmonbg ANIM_ATTACKER + end +TechnoBlastCharging1: + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + return +TechnoBlastCharging2: + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + return + +TechnoBlastWater: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation + loadspritegfx ANIM_TAG_WATER_ORB @blue color + loadspritegfx ANIM_TAG_BLACK_BALL_2 @blast + loadspritegfx ANIM_TAG_SPARK_2 @blast particles + loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal + loadspritegfx ANIM_TAG_BUBBLE @bubbles + monbg ANIM_ATTACKER + setblends 0x80E + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x1 + waitforvisualfinish + launchtemplate gTechnoBlastBlueChargeTemplate 0x2 0x1 0x0 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + waitforvisualfinish + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastBlueBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 + launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 + launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 + launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 + launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 + launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 + launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 + launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 + launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + waitforvisualfinish + playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 + launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0 + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x1 + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x1 + delay 0x2 + launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x1 + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x1 + delay 0x2 + launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x1 + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x1 + delay 0x2 + launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x1 + launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + blendoff + clearmonbg ANIM_ATTACKER + end + +TechnoBlastFire: + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color + loadspritegfx ANIM_TAG_SMALL_RED_EYE @another red color + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation + loadspritegfx ANIM_TAG_BLACK_BALL_2 @blast + loadspritegfx ANIM_TAG_SPARK_2 @blast particles + loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal + monbg ANIM_ATTACKER + setblends 0x80E + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + launchtemplate gTechnoBlastRedChargeTemplate 0x2 0x1 0x0 + delay 0x5 + call TechnoBlastFireSpiral + call TechnoBlastFireSpiral + call TechnoBlastFireSpiral + waitforvisualfinish + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastRedBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 + launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 + launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 + launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 + launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 + launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 + launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 + launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 + launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + waitforvisualfinish + playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 + launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 + delay 0x2 + launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 + delay 0x2 + launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 + delay 0x2 + launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + blendoff + clearmonbg ANIM_ATTACKER + end +TechnoBlastFireSpiral: + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + return + +TechnoBlastIce: + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice + loadspritegfx ANIM_TAG_ICE_CHUNK @ice color + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation + loadspritegfx ANIM_TAG_BLACK_BALL_2 @blast + loadspritegfx ANIM_TAG_SPARK_2 @blast particles + loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal + monbg ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + launchtemplate gTechnoBlastIceChargeTemplate 0x2 0x1 0x0 + delay 0x5 + call TechnoBlastIceChargeParticles + call TechnoBlastIceChargeParticles + call TechnoBlastIceChargeParticles + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfff6 0xfff6 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xa 0x14 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfffb 0xa 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x11 0xfff4 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + waitforvisualfinish + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gTechnoBlastIceBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 + launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 + launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 + launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 + launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 + launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 + launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 + launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 + launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + waitforvisualfinish + playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 + launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + delay 0x2 + launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xa 0x14 0x0 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + delay 0x2 + launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + delay 0x2 + launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0x14 0x2 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end +TechnoBlastIceChargeParticles: + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfff6 0xfff6 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xa 0x14 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfffb 0xa 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x11 0xfff4 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfff1 0xf 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x14 0x2 0x0 0x2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + return + +Move_RELIC_SONG: + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE + loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_MUSIC_NOTES + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_DEF_PARTNER + launchtask AnimTask_MusicNotesRainbowBlend 0x2 0x0 + waitforvisualfinish + createvisualtask SoundTask_PlayCryWithEcho, 2, ANIM_ATTACKER, 2 + launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x7 0x0 0xc + delay 0x5 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x6 0x1 0xc + delay 0x5 + launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xc 0xffe3 0x1 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe3 0xfff4 0x0 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x1 0x2 0xc + delay 0x5 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x3 0xc + delay 0x5 + launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x18 0xffe8 0x1 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe8 0xffe8 0x0 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x3 0x0 0xc + delay 0x5 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x1 0xc + delay 0x5 + launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x5 0x2 0xc + delay 0x5 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x6 0x3 0xc + delay 0x5 + launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xc 0xffe3 0x1 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe3 0xfff4 0x0 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x0 0xc + delay 0x5 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x1 0xc + delay 0x5 + launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x18 0xffe8 0x1 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe8 0xffe8 0x0 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x1 0x2 0xc + delay 0x5 + launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x5 0x3 0xc + delay 0x5 + launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1 + waitforvisualfinish + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x3 0x0 0xc 0x1 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x3 0x3 0x0 0xc 0x1 + delay 0x5 + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 0x5 + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 0x5 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + launchtask AnimTask_MusicNotesClearRainbowBlend 0x2 0x0 + waitforvisualfinish + end + +Move_SECRET_SWORD: + loadspritegfx ANIM_TAG_CUT @Cut + loadspritegfx ANIM_TAG_SWORD @Sword + loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour + loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade + monbg ANIM_ATTACKER + setalpha 12, 8 + playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x0 + launchtemplate gSwordsDanceBladeSpriteTemplate 0x2 0x2 0x0 0x0 + delay 0x16 + launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2715 0x2 0x2 0x7ff2 0x10 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 0x1 + monbg ANIM_TARGET + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + launchtemplate gSecretSwordBladesTemplate 0x81 0x5 0x0 0xa 0x0 0xFF00 0xA + launchtemplate gCuttingSliceSpriteTemplate 0x2 0x3 0x28 0xffe0 0x0 + delay 0x5 + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x0 0x3 0xa 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x10 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + waitforvisualfinish + end + +Move_GLACIATE: + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice + loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke + loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + fadetobg BG_ICE + waitbgfadeout + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfff4 0x68 0x0 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfff4 0x48 0x1 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfffa 0x38 0x1 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfffa 0x58 0x0 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x0 0x38 0x0 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x0 0x58 0x1 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x6 0x48 0x0 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x6 0x68 0x1 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xc 0x48 0x0 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xc 0x38 0x1 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x12 0x50 0x0 0x4b + launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x12 0x48 0x1 0x4b + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER), 0x2, 0x0, 0xA, 0x7FFF + call IceCrystalEffectLong + createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER), 0x2, 0xA, 0x0, 0x7FFF + waitforvisualfinish + blendoff + clearmonbg ANIM_DEF_PARTNER + call UnsetPsychicBg + end + +Move_BOLT_STRIKE:: + loadspritegfx ANIM_TAG_SPARK_2 @Electricity + loadspritegfx ANIM_TAG_IMPACT @Hit + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @Electric Balls + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @Electric Circle + monbg ANIM_ATTACKER + setalpha 12, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x07FE + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x40 0x0 0x2 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0xc + launchtemplate gGrowingShockWaveOrbSpriteTemplate 0x2 0x0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 0x8 + launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x12 0x6 0x2 0x4 + delay 0xA + fadetobg BG_BOLT_STRIKE + waitbgfadeout + waitforvisualfinish + monbg ANIM_TARGET + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5 + delay 0x6 + launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x07FE + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0x20 0x1 + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + call ElectricityEffect + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x07FE + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + call ElectricityEffect + waitforvisualfinish + clearmonbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x07FE + call UnsetPsychicBg + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0 + blendoff + waitforvisualfinish + end + +Move_BLUE_FLARE:: + loadspritegfx ANIM_TAG_SMALL_EMBER @Fire + loadspritegfx ANIM_TAG_METAL_BITS @Blue Flare Colour + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x0 + loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 0x7, 0x9 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x0 0xffe0 0x10 + delay 0x2 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x16 0xffea 0x10 + delay 0x2 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x1 0x0 0x9 0x1F + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x1e 0x0 0x10 + delay 0x2 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10 + delay 0x2 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x0 0x1c 0x10 + delay 0x2 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0xffed 0x13 0x10 + delay 0x2 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0xffe5 0x0 0x10 + delay 0x2 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0xffee 0xffee 0x10 + delay 0x2 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x0 0xffe7 0x10 + delay 0x2 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x11 0xffef 0x10 + delay 0x2 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x17 0x0 0x10 + delay 0x2 + launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x10 0x10 0x10 + waitforvisualfinish + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + call BlueFlareFireSpin + call BlueFlareFireSpin + call BlueFlareFireSpin + fadetobg BG_FIRE_2 + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x1000 0x0 0x0 0xFFFF + waitbgfadein + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + call BlueFlareFlameSpreadEffect + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x1 0x9 0x0 0x1f + call UnsetPsychicBg + waitforvisualfinish + end +BlueFlareFireSpin: + launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x1 + delay 0x2 + launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x1 + delay 0x2 + launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x1 + delay 0x2 + launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x1 + delay 0x2 + launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x1 + delay 0x2 + launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x1 + delay 0x2 + return +BlueFlareFlameSpreadEffect: + launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0x0 0xb0 0x28 + launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xff40 0xf0 0x28 + launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0x0 0xff60 0x28 + launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xff40 0xff90 0x28 + launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xa0 0x30 0x28 + launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xff20 0xffe0 0x28 + launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0x70 0xff80 0x28 + return + +Move_FIERY_DANCE:: + loadspritegfx ANIM_TAG_SMALL_EMBER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x14be + waitforvisualfinish + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x2 0x40 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x0 0x9 0x1f + call FireSpinEffect + call FireSpinEffect + call FireSpinEffect + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + call FireSpinEffect + call FireSpinEffect + call FireSpinEffect + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x9 0x0 0x1f + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x14be + waitforvisualfinish + end + +Move_FREEZE_SHOCK:: + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_ICE_CHUNK @Ice Ball + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @Electric Circle + choosetwoturnanim FreezeShockCharge FreezeShockAttack +FreezeShockCharge: + launchtask AnimTask_HorizontalShake 0x5 0x3 0x0 0x2 0x10 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x0 0xf 0x7fff + launchtemplate gFreezeShockCircleTemplate 0x2 0x0 @electric circle + delay 0x14 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0xf 0x0 0x7fff + waitforvisualfinish + end +FreezeShockAttack: + loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0x5, 0x5 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + monbg ANIM_TARGET + waitforvisualfinish + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER + launchtemplate gFreezeShockIceBallTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + waitforvisualfinish + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 + delay 0xf + waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 0x13 + call ElectricityEffect + waitforvisualfinish + clearmonbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0 + waitforvisualfinish + end + +Move_ICE_BURN:: + loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke + loadspritegfx ANIM_TAG_ICE_CHUNK @white color + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice + loadspritegfx ANIM_TAG_SMALL_EMBER + choosetwoturnanim IceBurnCharge, IceBurnUnleash + waitforvisualfinish + end +IceBurnCharge: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0x4, 0x3 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x8 0x0 0x0 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x0 0x2 0x10 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x0 0xf 0x7fff + delay 0x14 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0xf 0x0 0x7fff + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + end +IceBurnUnleash: + monbg ANIM_TARGET + fadetobg BG_ICE + waitbgfadeout + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x7fff + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfff4 0x68 0x0 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfff4 0x48 0x1 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfffa 0x38 0x1 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfffa 0x58 0x0 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x0 0x38 0x0 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x0 0x58 0x1 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x6 0x48 0x0 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x6 0x68 0x1 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xc 0x48 0x0 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xc 0x38 0x1 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x12 0x50 0x0 0x4b + launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x12 0x48 0x1 0x4b + call FireSpreadEffect + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xa 0x14 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0x14 0x2 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7fff + waitforvisualfinish + restorebg + clearmonbg ANIM_TARGET + end + +Move_SNARL:: + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE + loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_DEF_PARTNER + fadetobg BG_DARK + waitbgfadeout + launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1 + delay 0x10 + launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xc 0xffe3 0x1 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe3 0xfff4 0x0 + delay 0x10 + launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x18 0xffe8 0x1 + launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe8 0xffe8 0x0 + waitforvisualfinish + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x3 0x0 0xc 0x1 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x3 0x3 0x0 0xc 0x1 + delay 0x4 + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + call UnsetPsychicBg + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_ICICLE_CRASH:: + loadspritegfx ANIM_TAG_ICICLE_SPEAR @Icicle + fadetobg BG_ICE + waitbgfadein + monbg ANIM_DEF_PARTNER + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xfffb 0x0 0xfffb 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x5 0x0 0x6 0x1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x13 0x0 0xa 0x01 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffe9 0x0 0xfff6 0x1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x5 0x32 0x1 + delay 0x2 + call LaunchIcicleCrashSpear + call LaunchIcicleCrashSpear + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + restorebg + waitbgfadeout + end +LaunchIcicleCrashSpear: + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x1c 0x0 0xa 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xfff6 0x0 0xfffb 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xa 0x0 0x6 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x18 0x0 0xa 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffe0 0x0 0xfff6 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x1e 0x0 0xa 0x0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x2 + return + +Move_V_CREATE:: + loadspritegfx ANIM_TAG_SMALL_EMBER @fire blast flame + loadspritegfx ANIM_TAG_THIN_RING @calm mind animation + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color + loadspritegfx ANIM_TAG_ECLIPSING_ORB @defense curl animation + monbg ANIM_ATK_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 @Darken + launchtemplate gVCreateRedOrbTemplate 0x2 0x4 0x0 0x11 0x0 0x1 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gVCreateRedRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x1f + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + call VCreateFlames + call VCreateFlames + call VCreateFlames + call VCreateFlames + call VCreateFlames + call VCreateFlames + call VCreateFlames + call VCreateFlames + call VCreateFlames + call VCreateFlames + waitforvisualfinish + unloadspritegfx ANIM_TAG_SMALL_EMBER + unloadspritegfx ANIM_TAG_THIN_RING + unloadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE + unloadspritegfx ANIM_TAG_ECLIPSING_ORB + loadspritegfx ANIM_TAG_EXPLOSION @explosion animation + loadspritegfx ANIM_TAG_CLAW_SLASH @dragon claw animation + clearmonbg ANIM_ATK_PARTNER + fadetobg BG_FIRE @Mr. DS Fire + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xA00 0x0 0x1 0xffff + waitbgfadein + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa + delay 0x23 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x5 0x32 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x1f + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 0x1 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 0x1 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 0x1 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 0x1 0x1 + waitforvisualfinish + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 + launchtemplate gClawSlashSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + launchtemplate gClawSlashSpriteTemplate 0x82, 0x3, 0xa 0xfff6 0x1 + waitforvisualfinish + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x4 0x0 0xc 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x1f + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x1f + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + call UnsetPsychicBg + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0xffff + waitforvisualfinish + end +VCreateFlames: + launchtemplate gVCreateFlameTemplate 0x82 0x5 0x0 0x1 0x16 0xFFEA 0x10 @upperright + launchtemplate gVCreateFlameTemplate 0x82 0x5 0x0 0x1 0xFFEE 0xFFEE 0x10 @upperleft + delay 0x3 + return + +Move_FUSION_FLARE:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @ball + loadspritegfx ANIM_TAG_VERTICAL_HEX @ball palette + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @flame palette + loadspritegfx ANIM_TAG_SMALL_BUBBLES @particles + loadspritegfx ANIM_TAG_THIN_RING @ring + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SMALL_BUBBLES, 0x0, 0xD, 0xD, 0x015B @Reddish Orange + monbg ANIM_TARGET + setalpha 12, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call FusionFlareBuff + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x1F + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x8 0x1 0x0 + delay 0x8 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gFusionFlareRedBallUpTemplate 0x2 0x0 + delay 0x20 + launchtemplate gFusionFlareRedBallTemplate 0x3 0x3 0x0 0xffA0 0x2F + launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0 + launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1 + launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0 + launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0 + launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1 + delay 0x29 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xb 0x1F + delay 0x5 + launchtemplate gFusionFlareRedRingTemplate 0x3 0x6 0x1 0x1 0x1 0x1 0x1F 0x8 + launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0 + launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1 + launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0 + launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0 + launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x2 0x10 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +FusionFlareBuff: + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return + +Move_FUSION_BOLT:: + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_ELECTRICITY + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x0, 0x0, 0xE, 0x0 + waitforvisualfinish + launchtemplate gVoltTackleOrbSlideSpriteTemplate 0x1 0x0 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + invisible ANIM_ATTACKER + waitforvisualfinish + delay 0x8 + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x0 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x1 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x2 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x3 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + waitforvisualfinish + launchtemplate gFusionBoltBallTemplate 0x82 0x1 0x10 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER + delay 0x8 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0xa 0x0 0x12 0x1 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x1 0x10 0x10 + delay 0x2 + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x1 0xfff0 0xfff0 + delay 0x8 + launchtask AnimTask_VoltTackleAttackerReappear 0x5 0x0 + waitforvisualfinish + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x3 0x0 0x9 0x1 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10 + delay 0x2 + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0xE 0x0 0x0 + waitforvisualfinish + end + +@@@@@@@@@@@@@@@@@@@@@@@ GEN 6 @@@@@@@@@@@@@@@@@@@@@@@ +Move_FLYING_PRESS:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly/bounce + loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke + setblends 0xF + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + waitforvisualfinish + delay 0xF + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 + delay 0x2 + launchtask AnimTask_SquishTarget 0x2 0x0 + delay 0x5 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0x8 0x1 0x0 + delay 0x2 + launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0xfff8 0x1 0x0 + delay 0x2 + launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0xfff8 0x1 0x0 + delay 0x2 + launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0x8 0x1 0x0 + delay 0x2 + launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0x8 0x1 0x0 + delay 0x2 + launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0xfff8 0x1 0x0 + delay 0x2 + launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0xfff8 0x1 0x0 + delay 0x2 + launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0x8 0x1 0x0 + waitforvisualfinish + blendoff + end + +Move_MAT_BLOCK:: + loadspritegfx ANIM_TAG_CONVERSION + loadspritegfx ANIM_TAG_GREEN_LIGHT_WALL @green color + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + setblends 0x10 + delay 0x0 + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0x18 + launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0x18 + delay 0x3 + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0x8 + launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0x8 + delay 0x3 + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0xfff8 + launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0xfff8 + delay 0x3 + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0xffe8 + launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0xffe8 + delay 0x14 + launchtask AnimTask_ConversionAlphaBlend 0x5 0x0 + waitforvisualfinish + delay 0x1 + clearmonbg ANIM_ATK_PARTNER + blendoff + end + +Move_BELCH:: + loadspritegfx ANIM_TAG_BERRY_NORMAL + loadspritegfx ANIM_TAG_EXPLOSION @Explosion + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_SUCCESS, SOUND_PAN_ATTACKER + launchtemplate gBelchBerryTemplate 0x2 0x6 0x14 0xfff8 0xfff8 0xfff8 0x14 0xffe0 + delay 0x13 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0xa 0x0 0x14 0x1 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1 + delay 0x6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 0x1 0x1 + delay 0x6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 0x1 0x1 + delay 0x6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 0x1 0x1 + delay 0x6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 0x1 0x1 + delay 0x6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0x18 0x1 0x1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_ROTOTILLER:: + loadspritegfx ANIM_TAG_MUD_SAND + loadspritegfx ANIM_TAG_DIRT_MOUND + loadspritegfx ANIM_TAG_GREEN_SPARKLE + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x112C + waitforvisualfinish + launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x0 0xb4 + launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x1 0xb4 + launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x6 0x4 0x2 0x4 + call DigThrowDirt + call DigThrowDirt + launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x6 0x4 0x2 0x4 + call DigThrowDirt + call DigThrowDirt + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x112C + waitforvisualfinish + end + +Move_STICKY_WEB: + loadspritegfx ANIM_TAG_SPIDER_WEB + loadspritegfx ANIM_TAG_WEB_THREAD + monbg ANIM_DEF_PARTNER + delay 0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, RGB_BLACK + waitforvisualfinish + splitbgprio ANIM_TARGET + loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 9, 6 + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + waitforvisualfinish + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, TRUE + delay 50 + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, -30, 30, TRUE + delay 50 + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 30, -30, TRUE + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK + end + +Move_FELL_STINGER: + loadspritegfx ANIM_TAG_NEEDLE + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + fadetobg BG_DARK + waitbgfadein + delay 0 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 5, 1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + waitforvisualfinish + delay 1 + restorebg + waitbgfadein + clearmonbg ANIM_TARGET + end + +Move_PHANTOM_FORCE: + choosetwoturnanim PhantomForceSetUp, PhantomForceUnleash +PhantomForceEnd: + end +PhantomForceSetUp: + invisible ANIM_ATTACKER + goto PhantomForceEnd +PhantomForceUnleash: + visible ANIM_ATTACKER + goto PhantomForceEnd + +Move_TRICK_OR_TREAT: + end + +Move_NOBLE_ROAR: + loadspritegfx ANIM_TAG_NOISE_LINE + monbg ANIM_ATTACKER + splitbgprio ANIM_ATTACKER + setalpha 8, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 8, RGB(4, 0, 0) + waitforvisualfinish + createvisualtask SoundTask_PlayCryHighPitch, 2, ANIM_ATTACKER, 2 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, ANIM_ATTACKER, 1 + call RoarEffect + delay 10 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 9, 1 + delay 10 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 8, 0, RGB(4, 0, 0) + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + waitforvisualfinish + delay 20 + end + +Move_ION_DELUGE: + end + +Move_PARABOLIC_CHARGE: + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_LIGHTNING + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_BLUE_STAR + monbg ANIM_ATTACKER + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 6, RGB(18, 16, 3) + waitforvisualfinish + createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 3, 20, 20 + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + delay 12 + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 + delay 30 + jumpifdoublebattle ParabolicChargeDouble + createvisualtask AnimTask_ShockWaveProgressingBolt, 5, ANIM_TARGET + delay 12 + waitforvisualfinish + createvisualtask AnimTask_ShockWaveLightning, 5, ANIM_TARGET + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 16, 16, RGB_BLACK + delay 4 + createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 0, 0, RGB_BLACK +ParabolicChargeHeal: + waitforvisualfinish + clearmonbg ANIM_ATTACKER + waitforvisualfinish + call HealingEffect + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 6, 0, RGB(18, 16, 3) + waitforvisualfinish + blendoff + end +ParabolicChargeDouble: + createvisualtask AnimTask_ShockWaveProgressingBolt, 5, ANIM_TARGET + createvisualtask AnimTask_ShockWaveProgressingBolt, 5, ANIM_DEF_PARTNER + createvisualtask AnimTask_ShockWaveProgressingBolt, 5, ANIM_ATK_PARTNER + delay 12 + waitforvisualfinish + createvisualtask AnimTask_ShockWaveLightning, 5, ANIM_TARGET + createvisualtask AnimTask_ShockWaveLightning, 5, ANIM_DEF_PARTNER + createvisualtask AnimTask_ShockWaveLightning, 5, ANIM_ATK_PARTNER + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 6, 18, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATK_PARTNER, 0, 6, 18, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 16, 16, RGB_BLACK + delay 4 + createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 0, 0, RGB_BLACK + goto ParabolicChargeHeal; + +Move_FORESTS_CURSE: + loadspritegfx ANIM_TAG_ROOTS @frenzy plant + loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @curse + monbg ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + waitforvisualfinish + playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x8 0x02E3 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1 + waitforvisualfinish + playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1 + waitforvisualfinish + playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0 + launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1 + waitforvisualfinish + launchtemplate gCurseGhostSpriteTemplate 0x82 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0xe 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x8 0x0 0x02E3 + delay 0x3 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end + +Move_PETAL_BLIZZARD:: + loadspritegfx ANIM_TAG_LEAF + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_FLOWER + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + playsewithpan SE_M_TWISTER, SOUND_PAN_TARGET + createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 120, 70, 5, 70, 30 + delay 0x1 + createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x37, 0x6, 0x3c, 0x19 + delay 0x1 + createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x3c, 0x7, 0x3c, 0x1e + launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x73 0x37 0xA 0x3c 0x1e + delay 0x3 + launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x64 0x32 0x4 0x32 0x1A + delay 0x1 + launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x69 0x19 0x8 0x3c 0x14 + delay 0x1 + launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x73 0x28 0xA 0x30 0x1E + delay 0x3 + launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x78 0x1E 0x6 0x2d 0x19 + createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x23, 0xA, 0x3c, 0x1e + delay 0x3 + launchtemplate gPetalBlizzardTwister2Template 0x82 0x5 0x69 0x14 0x8 0x28 0x0 + delay 0x3 + createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xff, 0xf, 0x20, 0x0 + createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x6e, 0xA, 0x8, 0x20, 0x14 + waitforvisualfinish + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 ANIM_TARGET 0x3 0x0 0xC 0x1 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0xC 0x1 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 ANIM_ATK_PARTNER 0x3 0x0 0xC 0x1 + delay 0x4 + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_FREEZE_DRY:: + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + loadspritegfx ANIM_TAG_ICE_CRYSTALS + loadspritegfx ANIM_TAG_IMPACT + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB(12, 26, 31) + delay 20 + playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 0 + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 64 + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 128 + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 192 + delay 5 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 32 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 96 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 160 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 224 + delay 17 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 3, 1 + waitforvisualfinish + delay 15 + call IceCrystalEffectShort + delay 5 + loadspritegfx ANIM_TAG_ICE_CUBE + createvisualtask AnimTask_FrozenIceCube, 2 + waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 17 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 9, 0, RGB(12, 26, 31) + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7, 0, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_DISARMING_VOICE:: + loadspritegfx ANIM_TAG_NOISE_LINE + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6e7d + waitforvisualfinish + launchtask SoundTask_PlayDoubleCry 0x2 0x2 0x0 0xff + call RoarEffect + delay 0xA + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x1 0x0 0x1A 0x1 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x1A 0x1 + waitforvisualfinish + launchtask SoundTask_WaitForCry 0x5 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6e7d + waitforvisualfinish + end + +Move_PARTING_SHOT: + loadspritegfx ANIM_TAG_NOISE_LINE + fadetobg BG_DARK + waitbgfadein + delay 0 + createvisualtask SoundTask_PlayDoubleCry, 2, 0, 255 + call RoarEffect + delay 10 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 9, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 9, 1 + waitforvisualfinish + createvisualtask SoundTask_WaitForCry, 5 + waitforvisualfinish + delay 1 + restorebg + waitbgfadein + end + +Move_TOPSY_TURVY: + loadspritegfx ANIM_TAG_SWEAT_DROP + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 1, 2, 0, 4, RGB_BLACK + waitforvisualfinish + createvisualtask AnimTask_RotateVertically, 2, ANIM_TARGET, 768 + createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 4, 5, 0, 8, RGB(9, 0, 16) + playsewithpan SE_ROTATING_GATE, SOUND_PAN_TARGET + delay 116 + createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 4, 5, 8, 0, RGB(9, 0, 16) + playsewithpan SE_FALL, SOUND_PAN_TARGET + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 1, 2, 4, 0, RGB_BLACK + waitforvisualfinish + blendoff + end + +Move_DRAINING_KISS: + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_BLUE_STAR + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_RED_HEART + loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3 + createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER + delay 15 + createsprite gRedHeartProjectileSpriteTemplate, ANIM_TARGET, 3, 20, -8 + waitforvisualfinish + playsewithpan SE_M_ATTRACT, SOUND_PAN_TARGET + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 160, -32 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -256, -40 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 128, -16 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 416, -38 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -128, -22 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + delay 5 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 + waitforvisualfinish + delay 3 + call AbsorbEffect + waitforvisualfinish + delay 15 + call HealingEffect + waitforvisualfinish + end + +Move_CRAFTY_SHIELD:: + loadspritegfx ANIM_TAG_CRAFTY_SHIELD + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x5 0x4DBF + setblends 0x10 + delay 0x0 + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0xffe8 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0xffe8 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0xffe8 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0xffe8 + delay 0x3 + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0xfff8 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0xfff8 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0xfff8 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0xfff8 + delay 0x3 + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0x8 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0x8 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0x8 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0x8 + delay 0x3 + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0x18 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0x18 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0x18 + delay 0x3 + launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0x18 + delay 0x14 + playsewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER + launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2722 0x1 0x1 0x37ff 0xc 0x0 0x0 + delay 0x6 + launchtask AnimTask_ConversionAlphaBlend 0x5 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x5 0x0 0x4DBF + waitforvisualfinish + delay 0x1 + clearmonbg ANIM_ATK_PARTNER + blendoff + end + +Move_FLOWER_SHIELD:: + loadspritegfx ANIM_TAG_FLOWER + loadspritegfx ANIM_TAG_IMPACT + setalpha 12, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6e7d + waitforvisualfinish + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + launchtemplate gPetalDanceBigFlowerSpriteTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x10 0xffe8 0x8 0x64 + launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xfff0 0xffe8 0x8 0x64 + delay 0xf + launchtemplate gPetalDanceBigFlowerSpriteTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x20 0xffe8 0x8 0x64 + launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xffe0 0xffe8 0x8 0x64 + delay 0xf + launchtemplate gPetalDanceBigFlowerSpriteTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x18 0xffe8 0x8 0x64 + launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xffe8 0xffe8 0x8 0x64 + delay 0x1e + launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x10 0xffe8 0x0 0x64 + launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xfff0 0xffe8 0x0 0x64 + delay 0x1e + launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x14 0xfff0 0xe 0x50 + launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xffec 0xfff2 0x10 0x50 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6e7d + waitforvisualfinish + blendoff + end + +Move_GRASSY_TERRAIN:: + loadspritegfx ANIM_TAG_ORBS @Recover Ball + loadspritegfx ANIM_TAG_GREEN_SPARKLE @Green Star + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + waitforvisualfinish + delay 30 + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(11, 26, 11), 12, 5, 1 + delay 4 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 0 + createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 42 + createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 84 + createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126 + createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168 + createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210 + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 4, RGB(11, 26, 11) + delay 52 + setarg 7, 0xFFFF + playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 0 + createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 32 + createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 64 + createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 96 + createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 128 + createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 160 + createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 192 + createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 224 + panse_adjustnone SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0x0 + waitforvisualfinish + delay 4 + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(31, 24, 31) + waitforvisualfinish + end + +Move_MISTY_TERRAIN:: + loadspritegfx ANIM_TAG_ORBS @Recover Ball + loadspritegfx ANIM_TAG_WATER_GUN @Light Blue Colour + loadspritegfx ANIM_TAG_GREEN_SPARKLE + playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + waitforvisualfinish + delay 30 + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(31, 24, 31), 12, 5, 1 + delay 4 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 0 + createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 42 + createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 84 + createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126 + createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168 + createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210 + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 7, RGB(31, 24, 31) + delay 52 + setarg 7, 0xFFFF + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 0 + createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 32 + createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 64 + playse SE_M_COSMIC_POWER + createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 96 + createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 128 + createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 160 + createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 192 + createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 224 + waitforvisualfinish + delay 4 + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 7, 0, RGB(31, 24, 31) + waitforvisualfinish + end + +Move_ELECTRIFY:: + loadspritegfx ANIM_TAG_GUARD_RING @ring around user + loadspritegfx ANIM_TAG_SPARK_2 @yellow color + loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color + loadspritegfx ANIM_TAG_SPARK @electric travel + loadspritegfx ANIM_TAG_THIN_RING @ring + monbg ANIM_ATTACKER + loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET 0xa 0x4 + launchtemplate gElectrifyRingTemplate 0x2 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0x4 + launchtemplate gElectrifyRingTemplate 0x2 0x0 + delay 0x4 + launchtemplate gElectrifyRingTemplate 0x2 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + waitforvisualfinish + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0 0x28 0x2 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 + launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + delay 0xA + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x0 0xB 0x039B + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x3 0x039B + delay 0x4 + clearmonbg ANIM_ATTACKER + delay 0x1 + monbg ANIM_DEF_PARTNER + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET + launchtemplate gElectrifyYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0 + delay 0x1 + launchtemplate gElectrifyYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 + delay 0x1 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1 + launchtemplate gElectrifyYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 + delay 0x1 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + delay 0x2 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1 + delay 0x2 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + delay 0x2 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0 + delay 0x2 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0xB 0x0 0x039B + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x3 0x0 0x039B + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_PLAY_ROUGH:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_PINK_HEART + loadspritegfx ANIM_TAG_DUCK + monbg 0x3 + setalpha 12, 8 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0xa + waitplaysewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER, 0x14 + waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x1e + waitplaysewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER, 0x28 + waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x32 + waitplaysewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER, 0x3c + waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x46 + waitplaysewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER, 0x50 + waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x5a + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0x6 0x6 0x4 + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0x6 0x6 0x4 + launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff00 0xffd6 + launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x80 0xfff2 + launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x1a0 0xffda + launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff80 0xffea + delay 0x0 + call SubmissionHit + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xa0 0xffe0 + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff00 0xffd8 + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x80 0xfff0 + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x1a0 0xffda + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff80 0xffea + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xfe80 0xffe1 + delay 0x0 + call SubmissionHit + playsewithpan SE_M_DIVE, SOUND_PAN_TARGET + launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff00 0xffd6 + launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x80 0xfff2 + launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x1a0 0xffda + launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff80 0xffea + delay 0x0 + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xa0 0xffe0 + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff00 0xffd8 + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x80 0xfff0 + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x1a0 0xffda + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff80 0xffea + launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xfe80 0xffe1 + delay 0x0 + call SubmissionHit + waitforvisualfinish + delay 0xD + stopsound + clearmonbg 0x3 + blendoff + waitforvisualfinish + end + +Move_FAIRY_WIND:: + loadspritegfx ANIM_TAG_PINK_CLOUD + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6e7d + waitforvisualfinish + playsewithpan SE_M_GUST, SOUND_PAN_TARGET + launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0x14 0x1 + delay 0x5 + launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x5 0x16 0xffee 0x1 + delay 0x5 + launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0xfff6 0x16 0xf 0x1 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0x12 0x1 + delay 0x5 + launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0xffec 0x1 + delay 0x5 + launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0xc 0x1 + delay 0x5 + waitforvisualfinish + stopsound + playsewithpan SE_M_GUST2, SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6e7d + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_MOONBLAST: + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_MOON + loadspritegfx ANIM_TAG_GREEN_SPARKLE + loadspritegfx ANIM_TAG_BLUE_STAR + setalpha 0, 16 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 16, 0 + waitforvisualfinish + createsprite gMoonSpriteTemplate, ANIM_ATTACKER, 2, 120, 56 + createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 + panse SE_M_BARRIER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 0 + delay 40 + playsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER + createsprite gMistBallSpriteTemplate, ANIM_ATTACKER, 5, 0, 0, 0, 0, 30, 0 + delay 30 + loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 5, 4 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 10, 0 + delay 4 + createvisualtask AnimTask_MoonlightEndFade, 2 + waitforvisualfinish + blendoff + end + +Move_BOOMBURST: + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_THIN_RING + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10 + createvisualtask SoundTask_PlayCryWithEcho, 5 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, ANIM_ATTACKER, 0 + createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 6, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATK_PARTNER, 1, 0, 6, 1 + createvisualtask SoundTask_WaitForCry, 2, 1, 0, 6, 1 + delay 20 + jumpifdoublebattle Boomburst_Doubles + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + delay 4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 24, -24, 1, 1 + delay 4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, -16, 16, 1, 1 + delay 4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, -24, -12, 1, 1 + delay 4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1 +Boomburst_Last: + delay 4 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10 + waitforvisualfinish + end +Boomburst_Doubles: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 2, 1 + delay 4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 24, -24, 1, 1 + delay 4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, -16, 16, 1, 1 + delay 4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, -24, -12, 1, 1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, -24, -12, 2, 1 + delay 4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1 + goto Boomburst_Last + +Move_FAIRY_LOCK:: + loadspritegfx ANIM_TAG_CHAIN_LINK @Chain Colour + loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @Fairy Lock Chain + setalpha 8, 8 + monbg ANIM_ATK_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6B1F + waitforvisualfinish + loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4 + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x7 + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x33 + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x2 + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x32 + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x6 + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x35 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6B1F + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + end + +Move_KINGS_SHIELD:: + loadspritegfx ANIM_TAG_PROTECT @protect + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0x0, 0xC, 0xC, 0x318C @Gray + goto Move_PROTECT + +Move_PLAY_NICE:: + loadspritegfx ANIM_TAG_RED_HEART + loopsewithpan SE_M_SANDSTORM, SOUND_PAN_ATTACKER, 0xc, 0x3 + launchtask AnimTask_SwayMon 0x5 0x5 0x0 0xc 0x1000 0x4 0x0 + delay 0xF + launchtemplate gRedHeartProjectileSpriteTemplate 0x83 0x2 0x14 0xfff8 + end + +Move_CONFIDE:: + loadspritegfx ANIM_TAG_CONFIDE @Confide Bubble + launchtask AnimTask_Splash 0x2 0x2 ANIM_ATTACKER 0x3 + launchtemplate gConfideBubbleTemplate 0xb 0x2 0x0 0x64 + playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER + waitforvisualfinish + end + +Move_DIAMOND_STORM:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ICE_CRYSTALS + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x1888 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ICE_CRYSTALS, 0, 0xD, 0xD, 0x7DDE @Pink + waitforvisualfinish + panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff6 0x0 0xfff6 0x48 0x1 + launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x50 0x0 0x0 0x1 + delay 0x3 + launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff1 0x0 0xfff1 0x48 0x1 + launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x50 0x0 0x0 0x1 + delay 0x3 + launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfffb 0x0 0xfffb 0x48 0x1 + launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x50 0x0 0x0 0x1 + delay 0x3 + launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff6 0x0 0xfff6 0x48 0x1 + launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x50 0x0 0x0 0x1 + delay 0x3 + launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xffec 0x0 0xffec 0x48 0x1 + launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x50 0x0 0x0 0x1 + delay 0x3 + launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff1 0x0 0xfff1 0x48 0x1 + launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x50 0x0 0x0 0x1 + delay 0x3 + launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xffe7 0x0 0xffe7 0x48 0x1 + launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x50 0x0 0x0 0x1 + delay 0x3 + playsewithpan SE_M_TWISTER, SOUND_PAN_TARGET + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x78 0x46 0x5 0x46 0x1e + delay 0x1 + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x37 0x6 0x3c 0x19 + delay 0x1 + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x3c 0x7 0x3c 0x1e + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x37 0xa 0x3c 0x1e + delay 0x3 + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x64 0x32 0x4 0x32 0x1a + delay 0x1 + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x69 0x19 0x8 0x3c 0x14 + delay 0x1 + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x28 0xa 0x30 0x1e + delay 0x3 + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x78 0x1e 0x6 0x2d 0x19 + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x23 0xa 0x3c 0x1e + delay 0x3 + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x69 0x14 0x8 0x28 0x0 + delay 0x3 + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x14 0xff 0xf 0x20 0x0 + launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x6e 0xa 0x8 0x20 0x14 + waitforvisualfinish + @this is the buffet part + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x3 0x0 0xc 0x1 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x3 0x3 0x0 0xc 0x1 + delay 0x4 + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xF 0x0 0x1888 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_STEAM_ERUPTION:: + loadspritegfx ANIM_TAG_STEAM_ERUPTION @Steam Eruption Particle + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x7 0x043D + delay 0x20 + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + call SteamEruptionBreath + call SteamEruptionBreath + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x0 0x9 0x1f + call SteamEruptionBreath + delay 0x2 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0x15 0x1 + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + call SteamEruptionBreath + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x9 0x0 0x1f + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x043D + waitforvisualfinish + end +SteamEruptionBreath: + launchtemplate gSteamEruptionBreathTemplate 0x82 0x5 0x0 0x5 0x0 0x5 0x14 + delay 0x1 + return + +Move_HYPERSPACE_HOLE:: + loadspritegfx ANIM_TAG_IMPACT @Hits + loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond + loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour + loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison Colour + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x7FFF + waitforvisualfinish + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + invisible ANIM_ATTACKER + delay 0x1 + visible ANIM_ATTACKER + delay 0x1 + invisible ANIM_ATTACKER + delay 0x1 + visible ANIM_ATTACKER + delay 0x1 + invisible ANIM_ATTACKER + waitsound + launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x30 + delay 0x17 + launchtask AnimTask_IsTargetSameSide 0x2 0x0 + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + delay 0x19 + visible ANIM_ATTACKER + invisible ANIM_ATTACKER + delay 0x5 + launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + call HyperspaceHoleMovement + launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0xa 0x14 0x0 + call HyperspaceHoleMovement + launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + call HyperspaceHoleMovement + launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + call HyperspaceHoleMovement + waitforvisualfinish + visible ANIM_ATTACKER + delay 0x1 + invisible ANIM_ATTACKER + delay 0x1 + visible ANIM_ATTACKER + delay 0x1 + invisible ANIM_ATTACKER + delay 0x1 + visible ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x7FFF + waitforvisualfinish + end +HyperspaceHoleMovement: + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x3 0x0 0xf 0x1 + delay 0x4 + return + +Move_WATER_SHURIKEN:: + loadspritegfx ANIM_TAG_WATER_ORB @blue color + loadspritegfx ANIM_TAG_YELLOW_STAR @swift + loadspritegfx ANIM_TAG_BLUE_RING_2 @rings + loadspritegfx ANIM_TAG_SMALL_BUBBLES @bubbles + loadspritegfx ANIM_TAG_IMPACT @hydro pump hit + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0x87, 0xffc0, SOUND_PAN_TARGET, 0x5, 0x5, 0x0, 0x5 + launchtemplate gWaterShurikenStarTemplate 0x82, 0x3, 0x0 0x0 0x27 + delay 0x8 + launchtemplate gWaterShurikenRingTemplate 0x82, 0x4, 0x0 0x0 0x28 0xf + delay 0x5 + launchtemplate gWaterShurikenRingTemplate 0x82, 0x4, 0x0 0x0 0x28 0xf + delay 0x5 + launchtemplate gWaterShurikenRingTemplate 0x82, 0x4, 0x0 0x0 0x28 0xf + delay 0xC + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET + launchtemplate gWaterShurikenImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_MYSTICAL_FIRE:: + call SetPsychicBackground + loadspritegfx ANIM_TAG_FIRE + setalpha 8, 8 + playse 0xb1 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0xa 0x1 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x0 0x2 0x0 0x8 0x7fff + waitforvisualfinish + waitsound + blendoff + launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0xffff 0x0 + delay 0x1 + launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x0 0x1 + delay 0x1 + launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0xffff 0xffff + delay 0x1 + launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x2 0x1 + delay 0x1 + launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x1 0xffff + delay 0x1 + launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0xffff 0x1 + delay 0x1 + launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x1 0xfffe + delay 0x1 + launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x3 0x1 + playse 0x8c + waitforvisualfinish + call UnsetPsychicBg + end + +Move_SPIKY_SHIELD:: + loadspritegfx ANIM_TAG_PROTECT + loadspritegfx ANIM_TAG_GREEN_SPIKE + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 + launchtemplate gProtectSpriteTemplate 0x2 0x3 0x18 0x0 0x5a + delay 0xF + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x0 0xFFE0 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x16 0xFFEA 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x1E 0x0 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x14 0x14 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x0 0x1C 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0xFFED 0x13 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0xFFE5 0x0 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0xFFEE 0xFFEE 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x0 0xFFE7 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x11 0xFFEF 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x17 0x0 0x10 + delay 0x2 + launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x10 0x10 0x10 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end + +Move_AROMATIC_MIST:: + loadspritegfx ANIM_TAG_PINK_PETAL + playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6E7D + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x64 + delay 0x19 + setpan 0x0 + call SweetScentEffect + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x2 0x37 0x0 + setpan SOUND_PAN_TARGET + createvisualtask AnimTask_BlendColorCycle, 2, (ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER), 1, 5, 5, 13, 0x56bf + call SweetScentEffect + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6E7D + waitforvisualfinish + end + +Move_EERIE_IMPULSE:: + loadspritegfx ANIM_TAG_THIN_RING @hypervoice circle + loadspritegfx ANIM_TAG_SPARK @electric particles + loadspritegfx ANIM_TAG_SPARK_2 @electric particles + loadspritegfx ANIM_TAG_BLUE_STAR @heal particles + loadspritegfx ANIM_TAG_SPARK_H @lighter yellow particle + loadspritegfx ANIM_TAG_GOLD_RING @psybeam ring + monbg ANIM_DEF_PARTNER + waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET 0x13 + delay 0x4 + launchtemplate gEerieImpulseRingTemplate 0x0 0x7 0x2d 0x0 0x0 0x0 0x0 0x0 0x1 + delay 0xB + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 0 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 1 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 0 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 2 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 0 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 1 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 0 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 2 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 0 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 1 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 0 + launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 2 + waitforvisualfinish + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0x0 0xfffb 0x1 0x0 0x20 0x10 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1 + delay 0x7 + launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0xfff1 0xa 0x1 0x0 0x20 0x10 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + delay 0x7 + launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0xfff1 0xfff1 0x1 0x0 0x20 0x10 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + delay 0x7 + launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0xa 0xfffb 0x1 0x0 0x20 0x10 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0 + launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_VENOM_DRENCH:: + loadspritegfx ANIM_TAG_POISON_BUBBLE + monbg ANIM_DEF_PARTNER + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfffb 0x1 0xfffb 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x5 0x0 0x6 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x13 0x1 0xa 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe9 0x2 0xfff6 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + call AcidDrench + call AcidDrench + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end +AcidDrench: + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1c 0x1 0xa 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfff6 0x1 0xfffb 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xa 0x0 0x6 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x18 0x1 0xa 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe0 0x2 0xfff6 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1e 0x2 0xa 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET + delay 0x2 + return + +Move_POWDER:: + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color + loadspritegfx ANIM_TAG_SPORE @powder + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 0x12, 0xa + call POWDER_SPORE + call POWDER_SPORE + call POWDER_SPORE + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end +POWDER_SPORE: + launchtemplate gPowderBlackSporeTemplate 0x2 0x5 0x0 0xffec 0x55 0x50 0x0 + delay 0xc + launchtemplate gPowderBlackSporeTemplate 0x2 0x5 0x0 0xfff6 0xaa 0x50 0x0 + delay 0xc + launchtemplate gPowderBlackSporeTemplate 0x2 0x5 0x0 0xfff1 0x0 0x50 0x0 + delay 0xc + return + +Move_GEOMANCY:: + loadspritegfx ANIM_TAG_ZYGARDE_HEXES @Hex + loadspritegfx ANIM_TAG_GUARD_RING @safeguard + loadspritegfx ANIM_TAG_PAW_PRINT @yellow color + loadspritegfx ANIM_TAG_WHIP_HIT @green color + loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color + loadspritegfx ANIM_TAG_SMALL_EMBER @dragon claw buff / red color + monbg ANIM_ATK_PARTNER + setalpha 8, 8 + choosetwoturnanim GeomancyChargeUp GeomancyUnleash +GeomancyChargeUp: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @endure buff effect + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + playsewithpan SE_M_COSMIC_POWER, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x5f 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x1F + call GeomancyRingBuff + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x2C0 + call GeomancyRingBuff + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x7C60 + call GeomancyRingBuff + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x5 0x0 0x7C60 + waitforvisualfinish + blendoff + clearmonbg ANIM_ATK_PARTNER + end +GeomancyRingBuff: + launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x0 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x0 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyBlueCellVortexTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x0 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x2 + launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x0 + delay 0x2 + launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x0 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyBlueCellVortexTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x0 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x0 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x2 + launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x0 + delay 0x2 + launchtemplate gGeomancyBlueCellVortexTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x0 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x0 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x0 + delay 0x2 + return +GeomancyUnleash: + loadspritegfx ANIM_TAG_FIRE_PLUME @dragon rage + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x24CF + playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + delay 0x1 + launchtemplate gGeomancyRingTemplate 0x2 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x10 0x4D01 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x25 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x1F + launchtemplate gGeomancyRedCellRaiseTemplate 0x2 0x5 0x14 0x20 0xffd0 0x32 0x1 + launchtemplate gGeomancyGreenCellRaiseTemplate 0x2 0x5 0x0 0x20 0xffda 0x19 0x1 + launchtemplate gGeomancyBlueCellRaiseTemplate 0x2 0x5 0x20 0x20 0xffe4 0x28 0x1 + launchtemplate gGeomancyRedCellRaiseTemplate 0x2 0x5 0xffec 0x20 0xffd0 0x32 0x1 + launchtemplate gGeomancyGreenCellRaiseTemplate 0x2 0x5 0x14 0x20 0xffe4 0x3c 0x1 + launchtemplate gGeomancyBlueCellRaiseTemplate 0x2 0x5 0x0 0x20 0xffe4 0x1e 0x1 + call GeomancyRageBuff + call GeomancyRageBuff + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x4D01 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x5 0x0 0x1F + waitforvisualfinish + blendoff + clearmonbg ANIM_ATK_PARTNER + end +GeomancyRageBuff: + launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0x5 0x0 + delay 0x1 + launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0xfff6 0xfff1 + delay 0x1 + launchtemplate gGeomancyYellowRageTemplate 0x82, 0x3, 0x0 0x0 0x19 + delay 0x1 + launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0xf 0x5 + delay 0x1 + launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0xffe7 0x0 + delay 0x1 + launchtemplate gGeomancyYellowRageTemplate 0x82, 0x3, 0x0 0x1e 0x1e + delay 0x1 + launchtemplate gGeomancyYellowRageTemplate 0x82, 0x3, 0x0 0xffe5 0x19 + delay 0x1 + launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0x0 0x8 + delay 0x1 + return + +Move_MAGNETIC_FLUX:: + loadspritegfx ANIM_TAG_THIN_RING @uproar + loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect + loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color + createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK), 2, 0, 9, 0x243B + createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK_PARTNER), 2, 0, 9, 0x243B + loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 0x12, 0x3 + launchtask AnimTask_DefenseCurlDeformMon 0x5 0x0 + call MagneticFluxSparks1 + delay 0xA + call MagneticFluxSparks2 + delay 0xA + call MagneticFluxSparks1 + delay 0xA + launchtemplate gMagneticFluxUproarTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + call MagneticFluxSparks2 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK), 2, 9, 0, 0x243B + createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK_PARTNER), 2, 9, 0, 0x243B + waitforvisualfinish + end +MagneticFluxSparks1: + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + return +MagneticFluxSparks2: + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + return + +Move_HAPPY_HOUR:: + loadspritegfx ANIM_TAG_COIN + monbg ANIM_ATTACKER + loopsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET, 0x8, 10 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xfffb 0x0 0xfffb 0x1 + delay 0x2 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x5 0x0 0x6 0x1 + delay 0x2 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x13 0x0 0xa 0x1 + delay 0x2 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffe9 0x0 0xfff6 0x1 + delay 0x2 + call CoinShower + call CoinShower + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end +CoinShower: + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x1 + delay 0x2 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x1c 0x0 0xa 0x1 + delay 0x2 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xfff6 0x0 0xfffb 0x1 + delay 0x2 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xa 0x0 0x6 0x1 + delay 0x2 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x18 0x0 0xa 0x1 + delay 0x2 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffe0 0x0 0xfff6 0x1 + delay 0x2 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x1 + delay 0x2 + launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x1e 0x0 0xa 0x1 + delay 0x2 + return + +Move_ELECTRIC_TERRAIN:: + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + waitforvisualfinish + delay 30 + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(27, 27, 0), 12, 5, 1 + delay 4 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 0 + createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 42 + createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 84 + createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126 + createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168 + createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210 + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 4, RGB(28, 28, 0) + delay 52 + setarg 7, 0xFFFF + playsewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 0 + createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 32 + createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 64 + createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 96 + createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 128 + createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 160 + createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 192 + createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 224 + loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 0x16, 0x3 + waitforvisualfinish + delay 2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(28, 28, 0) + waitforvisualfinish + end + +Move_DAZZLING_GLEAM:: + loadspritegfx ANIM_TAG_SPARKLE_2 + loadspritegfx ANIM_TAG_BLUE_STAR + launchtemplate gSimplePaletteBlendSpriteTemplate 0x2 0x5 0x1 0x2 0x0 0xd 0x7fff + playsewithpan SE_M_TWISTER, SOUND_PAN_ATTACKER + @call 0x081D56B3 -> middle of GrantingStarsEffect + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 12, -5, 0, 0, 32, 60 + delay 8 + waitforvisualfinish + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x0 0x3 0x0 0x10 0x7fff + delay 0x4 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtemplate gSimplePaletteBlendSpriteTemplate 0x2 0x5 0x1 0x0 0xd 0x0 0x7fff + waitforvisualfinish + clearmonbg 0x0 + blendoff + end + +Move_CELEBRATE:: + loadspritegfx ANIM_TAG_ITEM_BAG + launchtemplate gCelebrateBagTemplate 0x2 0x1 0x0 + playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER + delay 0x12 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 0x47 + loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER 0x16 0x3 + end + +Move_HOLD_HANDS:: + loadspritegfx ANIM_TAG_TAG_HAND @hand + loadspritegfx ANIM_TAG_MAGENTA_HEART @charm + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0xc 0x6 0x6 0x3 + launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + delay 0x8 + launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + delay 0x8 + launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + delay 0x8 + launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + delay 0x8 + launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + delay 0x8 + launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + delay 0x8 + launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + delay 0x8 + launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + delay 0x8 + launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + delay 0x8 + launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + waitforvisualfinish + launchtask AnimTask_HelpingHandAttackerMovement 0x5 0x0 + launchtemplate gHelpingHandClapSpriteTemplate 0x28 0x1 0x0 + launchtemplate gHelpingHandClapSpriteTemplate 0x28 0x1 0x1 + delay 0x13 + playsewithpan SE_M_ENCORE, 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x2 0x2 0x0 0x5 0x1 + delay 0xe + playsewithpan SE_M_ENCORE, 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x2 0x2 0x0 0x5 0x1 + delay 0x14 + playsewithpan SE_M_ENCORE, 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x2 0x3 0x0 0xa 0x1 + launchtask AnimTask_BlendMonInAndOut 0x2 0x5 0x2 0x3ff 0xc 0x1 0x1 + end + +Move_BABY_DOLL_EYES:: + loadspritegfx ANIM_TAG_LEER + loadspritegfx ANIM_TAG_PINK_CLOUD + loadspritegfx ANIM_TAG_OPENING_EYE @eye + setalpha 8, 8 + monbg ANIM_DEF_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xA 0x7FFF + waitforvisualfinish + launchtemplate gOpeningEyeSpriteTemplate 0x5 0x4 0x0 0x0 0x1 0x0 + delay 0x20 + playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER + launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffb 0xfffb 0xa 0x0 0x1 + waitforvisualfinish + delay 0xa + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x1 0x0 0x9 0x1 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x9 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0xA 0x0 0x7FFF + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_NUZZLE:: + loadspritegfx ANIM_TAG_MAGENTA_HEART + loadspritegfx ANIM_TAG_ITEM_BAG + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_IMPACT + launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + launchtemplate gMagentaHeartSpriteTemplate 0x3 0x2 0x0 0x14 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + delay 0xf + launchtemplate gMagentaHeartSpriteTemplate 0x3 0x2 0xffec 0x14 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + delay 0xf + launchtemplate gMagentaHeartSpriteTemplate 0x3 0x2 0x14 0x14 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + waitforvisualfinish + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + call ElectricityEffectNoSound + waitforvisualfinish + end + +Move_HOLD_BACK:: + loadspritegfx ANIM_TAG_PAW_PRINT @ yellow/brown + loadspritegfx ANIM_TAG_IMPACT @ hit + loadspritegfx ANIM_TAG_PURPLE_SWIPE @ swipe + loadspritegfx ANIM_TAG_THIN_RING @ ring + loadspritegfx ANIM_TAG_DUCK @ dizzy punch + loadspritegfx ANIM_TAG_PAIN_SPLIT @ pain split + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + launchtemplate gHoldBackSwipeTemplate 0x82, 0x3, 0x0 0x0 0x1 + waitforvisualfinish + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x3 0x0 0xa 0x1 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + launchtemplate gHoldBackRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0 + launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8 + launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0 + launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda + launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea + launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_INFESTATION:: + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color + loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_DEF, 0x2, 0x0, 0x9, 0x7320 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x4f 0x1 + loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0x0, 0x4F + call InfestationVortex + call InfestationVortex + call InfestationVortex + call InfestationVortex + call InfestationVortex + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7320 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end +InfestationVortex: + launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x1 + delay 0x1 + launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x1 + delay 0x1 + launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x1 + delay 0x1 + launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x1 + delay 0x1 + launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x1 + delay 0x1 + launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x1 + delay 0x1 + return + +Move_POWER_UP_PUNCH: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_BREATH + monbg ANIM_TARGET + setalpha 12, 8 + createvisualtask AnimTask_GrowAndShrink, 2, + playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER + waitforvisualfinish + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_OBLIVION_WING:: + loadspritegfx ANIM_TAG_HYDRO_PUMP + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_BLUE_STAR + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0x0, 0xC, 0xC, 0x289F @Pinkish Red + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0x0, 0xD, 0xD, 0x289F @Pinkish Red + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xE 0x0 @Black + waitforvisualfinish + createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 + call OblivionWingBeam + call OblivionWingBeam + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 40 0x1 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x4 0x0 0xc 0x289F @Pinkish Red + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + delay 15 + visible ANIM_ATTACKER + call HealingEffect + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xE 0x0 0x0 @From black + waitforvisualfinish + end +OblivionWingBeam: + launchtemplate gOblivionWingBeamTemplate 0x82, 0x6, 0, -90, 0, 20, 0x15 0x0 + delay 0x2 + launchtemplate gOblivionWingBeamTemplate 0x82, 0x6, 0, -90, 0, 20, 0x15 0x0 + delay 0x2 + return + +Move_THOUSAND_ARROWS:: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation + loadspritegfx ANIM_TAG_ELECTRICITY @charge animation + loadspritegfx ANIM_TAG_LEAF @green color + loadspritegfx ANIM_TAG_RAZOR_LEAF @green color 2 + loadspritegfx ANIM_TAG_ZYGARDE_HEXES @hexagon + loadspritegfx ANIM_TAG_VERTICAL_HEX @arrow + loadspritegfx ANIM_TAG_NEEDLE @sting + monbg ANIM_ATTACKER + setblends 0x80e + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + launchtemplate gThousandArrowsGreenChargeTemplate 0x2 0x1 0x0 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0x18 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0x18 + call ThousandArrowsHexes + call ThousandArrowsHexes + call ThousandArrowsHexes + call ThousandArrowsHexes + call ThousandArrowsHexes + call ThousandArrowsHexes + call ThousandArrowsHexes + launchtemplate gThousandArrowsGreenDischargeTemplate 0x2 0x3 0x0 0x10 0x10 + delay 0x2 + launchtemplate gThousandArrowsGreenDischargeTemplate 0x2 0x3 0x0 0xfff0 0xfff0 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 0x30 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x32 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x32 + call ThousandArrowsDown + call ThousandArrowsDown + call ThousandArrowsDown + call ThousandArrowsDown + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0xffff + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end +ThousandArrowsHexes: + launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0xfffc 0xfff0 + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0x100D 0xfff0 + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0x4 0xfff4 + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0xfff0 0xfff0 + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + return +ThousandArrowsDown: + launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xdc 0x3c + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x3c 0x64 + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x8c 0x37 + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xb4 0x32 + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x14 0x5a + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x5a 0x5a + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xa0 0x3c + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x1e 0x5a + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x78 0x3c + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xc8 0x28 + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + return + +Move_THOUSAND_WAVES:: + loadspritegfx ANIM_TAG_ZYGARDE_HEXES @Hex + loadspritegfx ANIM_TAG_FLYING_DIRT @heat wave animation + loadspritegfx ANIM_TAG_LEAF @green color + loadspritegfx ANIM_TAG_IMPACT @pound hits + monbg ANIM_ATK_PARTNER + setalpha 8, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x0 + launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x2b + launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x55 + launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x80 + launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0xaa + launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0xd5 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER @I placed this one here, because it ruins the teleport animation + loopsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x3, 0x15 + call ThousandWavesRecover + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0xfff6 0xd + delay 0x3 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffdd 0x8 0xd + delay 0x3 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffdd 0xfff6 0xd + delay 0x3 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x8 0xd + delay 0x3 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xf 0xffd8 0xd + delay 0x3 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xfff6 0xffe0 0xd + delay 0x3 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x5 0x27 0xd + delay 0x3 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x19 0xffec 0xd + delay 0x3 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0xffec 0xd + delay 0x3 + launchtask AnimTask_AttackerStretchAndDisappear 0x2 0x0 + playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x5 0xffd8 0xd + waitforvisualfinish + panse SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + delay 0x4 + launchtask AnimTask_MoveHeatWaveTargets 0x5 0x0 + delay 0xc + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0xa 0x900 0x60 0x1 + delay 0x2 + launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x5a 0x800 0x60 0x1 + delay 0x2 + launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x32 0xa00 0x60 0x1 + delay 0x2 + launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x14 0x900 0x60 0x1 + delay 0x2 + call ThousandWavesRotatingImpact + call ThousandWavesRotatingImpact + waitforvisualfinish + launchtask AnimTask_ExtremeSpeedMonReappear 0x2 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0xffff + waitforvisualfinish + blendoff + clearmonbg ANIM_DEF_PARTNER + end +ThousandWavesRecover: + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x28 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0xffd8 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x0 0x28 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x0 0xffd8 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0xffec 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x14 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0xffec 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0x14 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffec 0x1e 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x14 0xffe2 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffec 0xffe2 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x14 0x1e 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0x0 0x10 + delay 0x2 + launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x0 0x10 + delay 0x2 + return +ThousandWavesRotatingImpact: + launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x1c 0x180 0x32 0x8 0x32 0x1 @1 + launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x46 0x7c0 0x60 0x1 + delay 0x2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0x0 0x0 0x3 + launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x20 0xf0 0x28 0xb 0xffd2 0x1 @2 + launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x0 0xb00 0x60 0x1 + delay 0x2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0x5 0xfff4 0x3 + launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x21 0x1a0 0x28 0x4 0x2a 0x1 @3 + launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x3c 0xa00 0x60 0x1 + delay 0x2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0xfffa 0x9 0x3 + launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x1f 0x120 0x2d 0x6 0xffd6 0x1 @4 + launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0xa 0x900 0x60 0x1 + delay 0x2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0xfffa 0xfff4 0x3 + launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x1c 0x1c0 0x2d 0xb 0x2e 0x1 @5 + launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x5a 0x800 0x60 0x1 + delay 0x2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0x5 0x9 0x3 + launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x21 0x1d0 0x32 0xa 0xffce 0x1 @6 + launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x32 0xa00 0x60 0x1 + delay 0x2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0xfffa 0x0 0x3 + return + +Move_LANDS_WRATH:: + loadspritegfx ANIM_TAG_WATER_ORB @whirl motion + loadspritegfx ANIM_TAG_SPARK_2 @yellow color + monbg ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xE 0x0 + waitforvisualfinish + call LandsWrathVortex + call LandsWrathVortex + call LandsWrathVortex + call LandsWrathVortex + waitforvisualfinish + fadetobg BG_FISSURE + waitbgfadeout + playsewithpan SE_M_EARTHQUAKE, 0x0 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x32 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x32 + launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff + waitbgfadein + waitforvisualfinish + call UnsetPsychicBg + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0 + clearmonbg ANIM_ATTACKER + end +LandsWrathVortex: + playsewithpan SE_M_SACRED_FIRE2 SOUND_PAN_TARGET + launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 0x0 + delay 0x2 + launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 0x0 + delay 0x2 + launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a 0x0 + delay 0x2 + launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 0x0 + delay 0x2 + launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e 0x0 + delay 0x2 + launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce 0x0 + delay 0x2 + return + +Move_LIGHT_OF_RUIN:: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @launchtask particles + loadspritegfx ANIM_TAG_ORBS @beam particles + loadspritegfx ANIM_TAG_ELECTRICITY @discharge + loadspritegfx ANIM_TAG_PINK_PETAL @pink color + loadspritegfx ANIM_TAG_EXPLOSION @explosion + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 0xC, 0xC, 0x6DDE @Pink + waitforvisualfinish + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x14 0x0 0x2 + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x6B1F + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, 0x1f, 0x10, 0, 0 + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1 + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + call LightOfRuinBeam + delay 0x20 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gLightOfRuinPinkDischargeTemplate 0x2 0x3 0x1 0x10 0x10 + delay 0x2 + launchtemplate gLightOfRuinPinkDischargeTemplate 0x2 0x3 0x1 0xfff0 0xfff0 + delay 0x5 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x5 0xb 0x1 + launchtemplate gLightOfRuinPinkExplosionTemplate 0x3 0x4 0x0 0x0 0x1 0x1 + delay 0x10 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x7FFF + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x1 0x0 0x0 0x0 + waitforvisualfinish + end +LightOfRuinBeam: + launchtemplate gLightOfRuinPinkOrbsTemplate 0x82 0x0 + launchtemplate gLightOfRuinPinkOrbsTemplate 0x82 0x0 + delay 0x1 + return + +Move_ORIGIN_PULSE:: + loadspritegfx ANIM_TAG_THIN_RING @uproar + loadspritegfx ANIM_TAG_WATER_ORB @blue color + loadspritegfx ANIM_TAG_ORBS @circles + loadspritegfx ANIM_TAG_GREEN_SPIKE @inward + loadspritegfx ANIM_TAG_IMPACT @hits + setalpha 8, 8 + fadetobg BG_WATER + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x400 0x0 0x1 0xffff + waitbgfadein + launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + delay 0x10 + launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + delay 0x10 + launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + playsewithpan SE_INTRO_BLAST, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x0 + launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x2b + launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x55 + launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x80 + launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0xaa + launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0xd5 + delay 0x35 + launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + delay 0x10 + launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + waitforvisualfinish + delay 0x2F + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x0 0xFF90 0x10 @up + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x5F 0xFF9D 0x10 @upper right + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x73 0x0 0x10 @right + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x4F 0x37 0x10 @lower right + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x0 0x53 0x10 @down + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFB0 0x43 0x10 @lower left + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFF60 0x0 0x10 @left + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFAA 0xFF94 0x10 @upper left + delay 0x5 + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x2D 0xFF9D 0x10 @between up and upper right + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xDF 0xFF9D 0x10 @between right and upper right + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x9F 0x37 0x10 @between right and lower right + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x1F 0x37 0x10 @between lower right and down + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFE0 0x43 0x10 @between lower left and down + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFF60 0x43 0x10 @between left and lower left + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFF2A 0xFFAA 0x10 @between left and upper left + launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFDA 0xFF94 0x10 @between up and upper left + waitforvisualfinish + monbg ANIM_DEF_PARTNER + launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffb0 0xfff0 0x1 0x1 + stopsound + playsewithpan SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER + delay 0x5 + launchtemplate gOriginPulseBlueImpactTemplate 0x83 0x2 0x1 0x1 + delay 0x5 + launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0x0 0x0 0x1 0x1 + delay 0x5 + launchtemplate gOriginPulseBlueImpactTemplate 0x83 0x2 0x1 0x1 + delay 0x5 + launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffc0 0x14 0x1 0x1 + delay 0x5 + launchtemplate gOriginPulseBlueImpactTemplate 0x83 0x2 0x1 0x1 + delay 0x5 + launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffe0 0x5 0x1 0x1 + waitsound + call UnsetPsychicBg + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_PRECIPICE_BLADES:: + loadspritegfx ANIM_TAG_LARGE_SPIKE + loadspritegfx ANIM_TAG_FIRE_PLUME + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_LARGE_SPIKE, 0, 10, 10, 0x159F @Blood orange + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + fadetobg 0x15 + waitbgfadeout + launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x5 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x5 + playsewithpan SE_M_EARTHQUAKE, 0x0 + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7, ANIM_TARGET, PrecipiceBladesOpponent +PrecipiceBladesPlayer: + launchtemplate gPrecipiceBladesSpikeTemplate 3, 0x5, ANIM_ATTACKER, -45, 5, 145 0x0 + delay 10 + launchtemplate gPrecipiceBladesSpikeTemplate 3, 0x5, ANIM_ATTACKER, 10, 7, 135 0x0 + delay 10 + launchtemplate gPrecipiceBladesSpikeTemplate 4, 0x5, ANIM_ATTACKER, -30, 15, 125 0x0 + delay 5 + launchtemplate gPrecipiceBladesSpikeTemplate 5, 0x5, ANIM_ATTACKER, -10, 17, 120 0x0 +PrecipiceBladesContinue: + delay 0x10 + launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, -15, 18, ANIM_TARGET + launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, -15, 18, ANIM_DEF_PARTNER + delay 0x20 + launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, 15, 18, ANIM_TARGET + launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, 15, 18, ANIM_DEF_PARTNER + delay 0x20 + stopsound + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + launchtemplate gPrecipiceBladesLargeSpikeTemplate 0x82, 0x5, ANIM_TARGET, 0, -25, 40, 0x0 + launchtemplate gPrecipiceBladesLargeSpikeTemplate 0x82, 0x5, ANIM_DEF_PARTNER, 0, -25, 40, 0x0 + delay 0x6 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x82, 0x5, ANIM_TARGET, -20 0 0x6 0x1 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x82, 0x5, ANIM_DEF_PARTNER, -20 0 0x6 0x1 + delay 0x22 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x82, 0x3 ANIM_TARGET 0x0 0x6 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x82, 0x3 ANIM_DEF_PARTNER 0x0 0x6 + waitforvisualfinish + call UnsetPsychicBg + clearmonbg ANIM_DEF_PARTNER + blendoff + end +PrecipiceBladesOpponent: + launchtemplate gPrecipiceBladesSpikeTemplate 0x43, 0x5, ANIM_ATTACKER, 35, -5, 145 0x0 + delay 10 + launchtemplate gPrecipiceBladesSpikeTemplate 0x43, 0x5, ANIM_ATTACKER, -20, -7, 135 0x0 + delay 10 + launchtemplate gPrecipiceBladesSpikeTemplate 0x44, 0x5, ANIM_ATTACKER, 20, -15, 125 0x0 + delay 5 + launchtemplate gPrecipiceBladesSpikeTemplate 0x45, 0x5, ANIM_ATTACKER, 0, -17, 120 0x0 + goto PrecipiceBladesContinue + +Move_DRAGON_ASCENT:: + loadspritegfx ANIM_TAG_DRAGON_ASCENT + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 11, 11, RGB(16, 31, 16) + fadetobg BG_COSMIC + waitbgfadeout + launchtask AnimTask_StartSlidingBg, 0x2 0x4, 0, 128, 0, -1 + waitbgfadein + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + invisible ANIM_ATTACKER + launchtemplate gDragonAscentFlyUpTemplate 0x2 0x7 0x0 0x0 0x400 0x24 0x15 0x1 ANIM_ATTACKER + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa 0x5, (ANIM_PAL_ATK | ANIM_PAL_BG | ANIM_PAL_BG_4 | ANIM_PAL_BG_5), 4, 0, 14, RGB(21, 31, 27) + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + waitforvisualfinish + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtask AnimTask_StartSlidingBg, 0x5 0x4, -7304, -784, 1, -1 + delay 2 + launchtask AnimTask_BlendBattleAnimPal, 0xa 0x5, (ANIM_PAL_ATK | ANIM_PAL_BG | ANIM_PAL_BG_4 | ANIM_PAL_BG_5), 0, 14, 0, RGB(21, 31, 27) + waitforvisualfinish + delay 1 + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + launchtemplate gDragonAscentDrakeTemplate, 2, 0x1 5 + delay 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + launchtemplate gBasicHitSplatSpriteTemplate, 0x84, 0x4, -10, 0, 1, 0 + launchtemplate gSlideMonToOffsetSpriteTemplate, 2, 0x5, 0x1, -32, 0, 0, 3 + launchtask AnimTask_ShakeMonInPlace, 0x2 0x5, ANIM_TARGET, 6, 0, 12, 1 + launchtask AnimTask_BlendBattleAnimPal, 0xa 0x5, (ANIM_PAL_ATK | ANIM_PAL_BG | ANIM_PAL_BG_4 | ANIM_PAL_BG_5), 2, 16, 0, RGB(26, 31, 0) + waitforvisualfinish + delay 3 + launchtemplate gSlideMonToOriginalPosSpriteTemplate, 2, 0x3, 1, 0, 7 + waitforvisualfinish + blendoff + clearmonbg ANIM_DEF_PARTNER + call UnsetPsychicBg + end + +Move_HYPERSPACE_FURY:: + loadspritegfx ANIM_TAG_HOOPA_HAND @Hoopa Hand + loadspritegfx ANIM_TAG_HOOPA_RING @Hoopa Ring + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_POISON_BUBBLE + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + delay 0x5 + launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x4 + delay 0x5 + launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x8 + delay 0x5 + launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0xc + delay 0x5 + launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x10 + delay 0x15 + invisible ANIM_ATTACKER + waitforvisualfinish + fadetobg BG_HYPERSPACE_FURY + waitbgfadeout + launchtask AnimTask_SetPsychicBackground 0x5 0x0 + waitbgfadein + loopsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET, 0x2, 0x10 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x20 0x1 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x0 0xffe0 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x16 0xffea 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x1e 0x0 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtask AnimTask_IsTargetSameSide 0x2 0x0 + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x0 0x1c 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0xffed 0x13 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0xffe5 0x0 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0xffee 0xffee 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x0 0xffe7 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x11 0xffef 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x17 0x0 0x10 + call HyperspaceFuryRandomImpact + delay 0x2 + launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x10 0x10 0x10 + call HyperspaceFuryRandomImpact + delay 0x7 + launchtask SoundTask_PlayDoubleCry 0x2 0x2 ANIM_ATTACKER 0xff + visible ANIM_ATTACKER + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x0 0x3 0x20 0x1 + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + invisible ANIM_ATTACKER + call UnsetPsychicBg + waitforvisualfinish + visible ANIM_ATTACKER + delay 0x1 + invisible ANIM_ATTACKER + delay 0x1 + visible ANIM_ATTACKER + delay 0x1 + invisible ANIM_ATTACKER + delay 0x1 + visible ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0 + end +HyperspaceFuryRandomImpact: + launchtemplate gHyperspaceFuryImpactTemplate 0x83 0x2 0x1 0x1 + return + +@@@@@@@@@@@@@@@@@@@@@@@ GEN 7 @@@@@@@@@@@@@@@@@@@@@@@ +Move_SHORE_UP:: + loadspritegfx ANIM_TAG_FLYING_DIRT @sandstorm + loadspritegfx ANIM_TAG_BLUE_STAR @heal2 + playsewithpan SE_M_SANDSTORM, 0x0 + launchtask AnimTask_LoadSandstormBackground 0x5 0x1 0x0 + delay 0x10 + launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0xa 0x900 0x60 0x0 + delay 0xa + launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x5a 0x800 0x60 0x0 + delay 0xa + launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x32 0xa00 0x60 0x0 + delay 0xa + launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x14 0x900 0x60 0x0 + delay 0xa + launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x46 0x7c0 0x60 0x0 + delay 0xa + launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x0 0xb00 0x60 0x0 + delay 0xa + launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x3c 0xa00 0x60 0x0 + call HealingEffect + waitforvisualfinish + end + +Move_FIRST_IMPRESSION:: + loadspritegfx ANIM_TAG_SWEAT_BEAD @astonish + loadspritegfx ANIM_TAG_IMPACT @pound hit + loadspritegfx ANIM_TAG_RAZOR_LEAF @green + launchtemplate gSprayWaterDropletSpriteTemplate 0x85 0x2 0x0 0x1 + playsewithpan SE_M_SKETCH, SOUND_PAN_TARGET + launchtemplate gSprayWaterDropletSpriteTemplate 0x85 0x2 0x1 0x1 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 + launchtask AnimTask_StretchTargetUp 0x3 0x0 + waitforvisualfinish + delay 0x19 + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x6 + waitforvisualfinish + monbg ANIM_TARGET @This is placed here on purpose (to not ruin astonishs animation) + delay 0x1 + launchtemplate gFirstImpressionPoundTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0 + loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET 0xA 0x2 + delay 0x1 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe4 0x0 0x0 0x3 + waitforvisualfinish + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x4 0x0 0xc 0x1 + waitforvisualfinish + delay 0xa + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x6 + delay 0x5 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x6 + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +Move_BANEFUL_BUNKER:: + loadspritegfx ANIM_TAG_PROTECT @protect + loadspritegfx ANIM_TAG_POISON_BUBBLE @poison + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER 0x10 + launchtemplate gProtectSpriteTemplate 0x2 0x3 0x18 0x0 0x5a + launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + delay 0x4 + launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + delay 0x4 + launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + delay 0x4 + launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + delay 0x4 + launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + delay 0x4 + launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + delay 0x4 + launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + delay 0x4 + launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end + +Move_SPIRIT_SHACKLE:: + loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow + loadspritegfx ANIM_TAG_CHAIN_LINK @Chain + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + waitforvisualfinish + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + launchtemplate gSpiritShackleArrowTemplate 0x82 0x5 0x10 0x0 0x0 0x0 0xf + delay 0x8 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0xa 0x1 + waitforvisualfinish + loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x1c, 0x2 + launchtemplate gSpiritShackleChainTemplate 0x82 0x2 0xfff0 0xfff0 + delay 0x4 + launchtemplate gSpiritShackleChainTemplate 0x82 0x2 0xfff0 0x0 + delay 0x4 + launchtemplate gSpiritShackleChainTemplate 0x82 0x2 0xfff0 0x10 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_DARKEST_LARIAT:: + fadetobg BG_DARK + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x0 0x0 0xffff + waitbgfadein + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple color + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0xa + waitplaysewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 0x14 + waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x1e + waitplaysewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 0x28 + waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x32 + waitplaysewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 0x3c + waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x46 + waitplaysewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 0x50 + waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x5a + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0x6 0x6 0x4 + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0x6 0x6 0x4 + call DarkestLariatImpact + call DarkestLariatImpact + call DarkestLariatImpact + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + call UnsetPsychicBg + end +DarkestLariatImpact: + launchtemplate gDarkestLariatImpactTemplate 0x3 0x4 0x0 0xfff4 0x1 0x1 + delay 0x8 + launchtemplate gDarkestLariatImpactTemplate 0x3 0x4 0xfff4 0x8 0x1 0x1 + delay 0x8 + launchtemplate gDarkestLariatImpactTemplate 0x3 0x4 0xc 0x0 0x1 0x1 + delay 0x8 + return + +Move_SPARKLING_ARIA:: + loadspritegfx ANIM_TAG_WATER_ORB @blue color + loadspritegfx ANIM_TAG_BUBBLE @circles + loadspritegfx ANIM_TAG_HYDRO_PUMP @hydro pump + monbg ANIM_ATTACKER + setblends 0x80E + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xE 0x0 + waitforvisualfinish + launchtemplate gSparklingAriaBlueChargeTemplate 0x2 0x1 0x0 + call SparklingAriaCharge + call SparklingAriaCharge + call SparklingAriaCharge + waitforvisualfinish + delay 0x1E + playsewithpan SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER + call SparklingAriaRain + call SparklingAriaRain + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xE 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end +SparklingAriaRain: + launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0xdc 0x3c + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + delay 0x2 + launchtemplate gSparklingAriaBubbleRainTemplate 0x82, 0x3, 0x1 0x3c 0x64 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + delay 0x2 + launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x8c 0x37 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + delay 0x2 + launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0xb4 0x32 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + delay 0x2 + launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x14 0x5a + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + delay 0x2 + launchtemplate gSparklingAriaBubbleRainTemplate 0x82, 0x3, 0x1 0x5a 0x5a + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + delay 0x2 + launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0xa0 0x3c + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + delay 0x2 + launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x1e 0x5a + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + delay 0x2 + launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x78 0x3c + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + delay 0x2 + launchtemplate gSparklingAriaBubbleRainTemplate 0x82, 0x3, 0x1 0xc8 0x28 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + delay 0x2 + return +SparklingAriaCharge: + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER + launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + delay 0x4 + return + +Move_ICE_HAMMER:: + loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @punch + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice + loadspritegfx ANIM_TAG_ECLIPSING_ORB @gray color + loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke + setalpha 12, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + launchtemplate gIceHammerPunchStompTemplate 0x83, 0x3 0x0 0xffe0 0xf + delay 0x13 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + launchtask AnimTask_SquishTarget 0x2 0x0 + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfff4 0x68 0x0 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfff4 0x48 0x1 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfffa 0x38 0x1 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfffa 0x58 0x0 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x0 0x38 0x0 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x0 0x58 0x1 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x6 0x48 0x0 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x6 0x68 0x1 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xc 0x48 0x0 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xc 0x38 0x1 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x12 0x50 0x0 0x4b + launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x12 0x48 0x1 0x4b + call IceCrystalEffectShort + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + blendoff + end + +Move_FLORAL_HEALING:: + loadspritegfx ANIM_TAG_SPARKLE_2 @heal + loadspritegfx ANIM_TAG_FLOWER @flowers + loadspritegfx ANIM_TAG_LEAF @leaves + loadspritegfx ANIM_TAG_ORBS @circles + loadspritegfx ANIM_TAG_PINK_PETAL @pink particles + monbg ANIM_ATTACKER + monbg ANIM_TARGET + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + call CIRCLES_LEAVES + call CIRCLES_LEAVES + waitforvisualfinish + panse SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + playsewithpan SE_M_TWISTER, 0x0 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x46 0x1 0x40 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3c 0x0 0x40 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x50 0x1 0x40 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3a 0x0 0x78 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5a 0x0 0x40 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x30 0x0 0x40 @2 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5f 0x1 0x50 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x4b 0x1 0x40 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x55 0x0 0x78 + delay 0x2 + loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 0x12, 0xa + call FloralHealingSpores + call FloralHealingSpores + call FloralHealingSpores + waitforvisualfinish + playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER + launchtemplate gGrantingStarsSpriteTemplate 0x10 0x7 0xfff1 0x0 0x1 0x0 0x20 0x3c 0x1 + delay 0x8 + launchtemplate gGrantingStarsSpriteTemplate 0x10 0x7 0xc 0xfffb 0x1 0x0 0x20 0x3c 0x1 + waitforvisualfinish + clearmonbg ANIM_TARGET + clearmonbg ANIM_ATTACKER + end +FloralHealingSpores: + launchtemplate gFloralHealingFlowerTemplate 0x2 0x5 0x0 0xffec 0x55 0x50 0x0 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x46 0x1 0x40 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3c 0x0 0x40 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x50 0x1 0x40 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3a 0x0 0x78 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5a 0x0 0x40 + delay 0x3 + launchtemplate gFloralHealingFlowerTemplate 0x2 0x5 0x0 0xfff6 0xaa 0x50 0x0 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x30 0x0 0x40 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5f 0x1 0x50 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x4b 0x1 0x40 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x55 0x0 0x78 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x46 0x1 0x40 + delay 0x3 + launchtemplate gFloralHealingFlowerTemplate 0x2 0x5 0x0 0xfff1 0x0 0x50 0x0 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3c 0x0 0x40 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x50 0x1 0x40 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3a 0x0 0x78 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78 + delay 0x2 + launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5a 0x0 0x40 + delay 0x2 + launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x30 0x0 0x40 + delay 0x3 + return +CIRCLES_LEAVES: + launchtemplate gFloralHealingOrbsTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 0x0 + delay 0x2 + launchtemplate gFloralHealingLeavesTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 0x0 + delay 0x2 + launchtemplate gFloralHealingOrbsTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a 0x0 + delay 0x2 + launchtemplate gFloralHealingLeavesTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 0x0 + delay 0x2 + launchtemplate gFloralHealingOrbsTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e 0x0 + delay 0x2 + launchtemplate gFloralHealingLeavesTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce 0x0 + delay 0x2 + return + +Move_HIGH_HORSEPOWER:: + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @horseshoe + monbg ANIM_TARGET + delay 0x2 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x0 + setalpha 12, 8 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET + launchtemplate gHighHorsepowerHorseshoeTemplate 0x3 0x4 0x0 0x0 0x1 0x32 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x7 0x7fff + delay 0x32 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + call SetImpactBackground + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x16 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x0 0x7fff + launchtemplate gComplexPaletteBlendSpriteTemplate 0x2 0x7 0x1f 0x3 0x1 0x0 0x8 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + delay 0x2 + restorebg + waitbgfadein + end + +Move_STRENGTH_SAP:: + loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke + loadspritegfx ANIM_TAG_TEAL_ALERT @inward + loadspritegfx ANIM_TAG_RED_HEART @heart color + loadspritegfx ANIM_TAG_PINK_PETAL @pink color + loadspritegfx ANIM_TAG_ORBS @absorb + loadspritegfx ANIM_TAG_SPARKLE_2 @stars + monbg ANIM_DEF_PARTNER + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0x8 0x3 0x1 0x0 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x46 0x0 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x28 0x28 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xa 0xffc4 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffce 0xffd8 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffd8 0x28 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x32 0xffce 0x6 + delay 0x2 + launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x32 0xffe2 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x3c 0xa 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x0 0x3c 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x0 0xffd8 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffc4 0x14 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffc4 0xffe2 0x6 + delay 0x2 + launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffce 0x32 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffc4 0x14 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffd8 0xffd8 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x14 0xffc4 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x32 0xffce 0x6 + launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x23 0x28 0x6 + delay 0x2 + launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x3 0x07FD + delay 0x5 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET + launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x0 0x5 0x8 0x1a + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET + launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xa 0xfffb 0xfff8 0x1a + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET + launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xfffb 0xf 0x10 0x21 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET + launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x0 0xfff1 0xfff0 0x24 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET + launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x0 0x5 0x8 0x1a + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET + launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xa 0xfffb 0xfff8 0x1a + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET + launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xfff6 0x14 0x14 0x27 + delay 0x4 + playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET + launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x5 0xffee 0xffec 0x23 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x3 0x0 0x07FD + loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x3 + call GrantingStarsEffect + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_SOLAR_BLADE:: + loadspritegfx ANIM_TAG_ORBS + choosetwoturnanim SolarBeamSetUp SolarBladeUnleash +SolarBladeUnleash: + loadspritegfx ANIM_TAG_SWORD @swords dance + loadspritegfx ANIM_TAG_CLAW_SLASH @blade hit + loadspritegfx ANIM_TAG_SPARK_2 @yellow color + loadspritegfx ANIM_TAG_SUNLIGHT @sun rays + monbg ANIM_ATTACKER + setblends 0x30d + createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 1, 0, 6, 0x7fff + waitforvisualfinish + playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER + launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x10 0x6 0x1 0x4 + launchtemplate gSwordsDanceBladeSpriteTemplate 0x2 0x2 0x0 0x0 + call SolarBladeSunRays + call SolarBladeSunRays + call SolarBladeSunRays + call SolarBladeSunRays + launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2715 0x2 0x2 0x7ff2 0x10 0x0 0x0 + waitforvisualfinish + call SetSolarBeamBg + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + launchtemplate gSolarBladeImpactTemplate 0x82, 0x3, 0x0 0x0 0x1 + delay 0x2 + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0xC 0x1 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 1, 6, 0, 0x7fff + waitforvisualfinish + call UnsetPsychicBg + clearmonbg ANIM_ATTACKER + blendoff + end +SolarBladeSunRays: + launchtemplate gSunlightRaySpriteTemplate 0x28 0x0 + delay 0x6 + return + +Move_LEAFAGE:: + loadspritegfx ANIM_TAG_RAZOR_LEAF @leaf + loadspritegfx ANIM_TAG_IMPACT @hit + monbg ANIM_DEF_PARTNER + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + launchtemplate gRazorLeafCutterSpriteTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0x14 0x1 + launchtemplate gRazorLeafCutterSpriteTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0xffec 0x1 + launchtemplate gRazorLeafCutterSpriteTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0x0 0x1 + delay 0x14 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + launchtemplate gLeafageImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_SPOTLIGHT:: + loadspritegfx ANIM_TAG_SPOTLIGHT + loadspritegfx ANIM_TAG_TAG_HAND + launchtask AnimTask_CreateSpotlight 0x2 0x0 + launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0x0 0xa 0x0 + waitforvisualfinish + playsewithpan SE_CONTEST_ICON_CHANGE, SOUND_PAN_ATTACKER + launchtemplate gSpotlightSpriteTemplate 0x82 0x2 0x0 0xfff8 + delay 0x40 + launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0xa 0x0 0x1 + waitforvisualfinish + launchtask AnimTask_RemoveSpotlight 0x2 0x0 + end + +Move_TOXIC_THREAD:: + loadspritegfx ANIM_TAG_STRING + loadspritegfx ANIM_TAG_WEB_THREAD + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_STRING, 0, 0xA, 0xA, 0x6038 @Purple + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WEB_THREAD, 0x0, 0xA, 0xA, 0x6038 @Purple + monbg ANIM_DEF_PARTNER + delay 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x9 0x0 + waitforvisualfinish + loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 0x9, 0x6 + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + call SpiderWebThread + waitforvisualfinish + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + launchtemplate gToxicThreadString 0x82 0x2 0x0 0xa + delay 0x4 + launchtemplate gToxicThreadString 0x82 0x2 0x0 0xfffe + delay 0x4 + launchtemplate gToxicThreadString 0x82 0x2 0x0 0x16 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + delay 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x9 0x0 0x0 + end + +Move_LASER_FOCUS:: + loadspritegfx ANIM_TAG_EYE_SPARKLE @red + loadspritegfx ANIM_TAG_OPENING_EYE @eyes + loadspritegfx ANIM_TAG_LEER @leer + monbg ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + launchtemplate gLaserFocusRedEyesTemplate 0x5 0x4 0x0 0x0 0x0 0x0 + waitforvisualfinish + playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x18 0xfff4 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end + +Move_GEAR_UP:: + loadspritegfx ANIM_TAG_GEAR + loadspritegfx ANIM_TAG_SPARK_2 @sparks + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x039B + launchtemplate gGearUpGearsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0xF + playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER + launchtemplate gGearUpGearsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0xF + playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER + launchtemplate gGearUpGearsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0xF + playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER + call GearUpSparks + call GearUpSparks + call GearUpSparks + playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x039B + waitforvisualfinish + end +GearUpSparks: + playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0xF + playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0xF + return + +Move_THROAT_CHOP:: + loadspritegfx ANIM_TAG_HANDS_AND_FEET @karate chop + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + launchtemplate gKarateChopSpriteTemplate 0x2 0x8 0xfff0 0x0 0x0 0x0 0xa 0x1 0x3 0x0 + waitforvisualfinish + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 + launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + delay 0x3 + launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + delay 0x3 + launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + delay 0x3 + launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + delay 0x3 + launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + delay 0x3 + launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + delay 0x3 + launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + delay 0x3 + launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1 + waitforvisualfinish + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_POLLEN_PUFF:: + launchtask AnimTask_IsTargetSameSide 0x5 0x0 + jumpargeq 0x0, 0x1, PollenPuffAlly +PollenPuffOpponent: + loadspritegfx ANIM_TAG_SPARKLE_2 @stars + loadspritegfx ANIM_TAG_PINK_PETAL @pink color + loadspritegfx ANIM_TAG_BLACK_BALL_2 @circle launch + loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color + loadspritegfx ANIM_TAG_SPORE @ball + loadspritegfx ANIM_TAG_FLAT_ROCK @brown color + loadspritegfx ANIM_TAG_ORBS @hit + monbg ANIM_ATTACKER + setalpha 12, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x0 + waitforvisualfinish + launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + delay 0xD + launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + delay 0xD + launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + delay 0xD + launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + clearmonbg ANIM_ATTACKER + waitforvisualfinish + stopsound + monbg ANIM_TARGET + launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xA0 0x28 0x0 + launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x110 0x28 0x0 + launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xB0 0x28 0x0 + launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x100 0x28 0x0 + launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x90 0x28 0x0 + launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x110 0x28 0x0 + launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xB0 0x28 0x0 + launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x100 0x28 0x0 + delay 0x1 + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET + launchtemplate gPollenPuffSporeTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0 + waitforvisualfinish + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x0 0xFFE0 0x10 @up + launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0xFFEE 0xFFEE 0x10 @upperleft + launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x0 0x1C 0x10 @down + delay 0x4 + launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0xFFE5 0x0 0x10 @left + launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x14 0x14 0x10 @lowerright + launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0xFFED 0x13 0x10 @lowerleft + delay 0x4 + launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x1E 0x0 0x10 @right + launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x16 0xFFEA 0x10 @upperright + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +PollenPuffAlly: + loadspritegfx ANIM_TAG_SPARKLE_2 @stars + loadspritegfx ANIM_TAG_PINK_PETAL @pink color + loadspritegfx ANIM_TAG_BLACK_BALL_2 @circle launch + loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color + loadspritegfx ANIM_TAG_SPORE @ball + monbg ANIM_ATTACKER + setalpha 12, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x0 + waitforvisualfinish + launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + delay 0xD + launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + delay 0xD + launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + delay 0xD + launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER + clearmonbg ANIM_ATTACKER + waitforvisualfinish + stopsound + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER + monbg ANIM_TARGET + launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xa0 0x28 0x0 + launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x120 0x28 0x0 + launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x90 0x28 0x0 + launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x110 0x28 0x0 + launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xa0 0x28 0x0 + launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x120 0x28 0x0 + launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x90 0x28 0x0 + launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x110 0x28 0x0 + delay 0x1 + launchtemplate gPollenPuffSporeTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0 + waitforvisualfinish + unloadspritegfx ANIM_TAG_SPARKLE_2 @stars + loadspritegfx ANIM_TAG_BLUE_STAR @heal + playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER + launchtemplate gPollenPuffHealTemplate 0x2 0x4 0x0 0xfffb 0x1 0x0 + delay 0x7 + launchtemplate gPollenPuffHealTemplate 0x2 0x4 0xfff1 0xa 0x1 0x0 + delay 0x7 + launchtemplate gPollenPuffHealTemplate 0x2 0x4 0xfff1 0xfff1 0x1 0x0 + delay 0x7 + launchtemplate gPollenPuffHealTemplate 0x2 0x4 0xa 0xfffb 0x1 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x1 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_ANCHOR_SHOT:: + loadspritegfx ANIM_TAG_CHAIN_LINK + loadspritegfx ANIM_TAG_ANCHOR + playsewithpan SE_FALL SOUND_PAN_TARGET + monbg ANIM_TARGET + launchtemplate gAnchorShotAngledAnchorTemplate 0x2 0x3 0x0 0x0 0x35 + waitforvisualfinish + launchtemplate gAnchorShotAnchorTemplate 0x3 0x3 0x0 0xffe0 0xf + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + delay 0x25 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + waitforvisualfinish + loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER 0x1c 0x2 + launchtemplate gAnchorShotChainTemplate 0x82 0x2 0xfff0 0xfff0 + delay 0x4 + launchtemplate gAnchorShotChainTemplate 0x82 0x2 0xfff0 0x0 + delay 0x4 + launchtemplate gAnchorShotChainTemplate 0x82 0x2 0xfff0 0x10 + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +Move_PSYCHIC_TERRAIN:: + loadspritegfx ANIM_TAG_ORBS @Recover Ball + loadspritegfx ANIM_TAG_GREEN_SPARKLE @Green Star + loadspritegfx ANIM_TAG_POISON_BUBBLE @Purple Colour + playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + waitforvisualfinish + delay 30 + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(27, 0, 13), 12, 5, 1 + delay 4 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 0 + createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 42 + createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 84 + createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126 + createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168 + createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210 + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 4, RGB(27, 0, 13) + delay 52 + setarg 7, 0xFFFF + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 + createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 0 + createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 32 + createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 64 + createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 96 + createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 128 + createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 160 + createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 192 + createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 224 + loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x3 + waitforvisualfinish + delay 4 + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(27, 0, 13) + waitforvisualfinish + end + +Move_LUNGE:: + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_TEAL_ALERT @hit particles + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @psycho boost charge + loadspritegfx ANIM_TAG_LEAF @green + loadspritegfx ANIM_TAG_RAZOR_LEAF @green + loadspritegfx ANIM_TAG_SMALL_BUBBLES @ball + monbg ANIM_ATK_PARTNER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x3 0x0 0xf0 0x0 + loopsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 0xe, 0xa + launchtemplate gLungeGreenChargeTemplate 0x2 0x0 + delay 0x6e + delay 0x3e + playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER + delay 0x15 + clearmonbg ANIM_ATK_PARTNER + invisible ANIM_ATTACKER + waitforvisualfinish + playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER + launchtemplate gLungeGreenBubbleTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0 + delay 0xF + monbg ANIM_DEF_PARTNER + delay 0x1 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x46 0x0 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x28 0x28 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xa 0xffc4 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffce 0xffd8 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffd8 0x28 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x32 0xffce 0x6 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x5 0xb 0x1 + delay 0x2 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x32 0xffe2 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x3c 0xa 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x0 0x3c 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x0 0xffd8 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffc4 0x14 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffc4 0xffe2 0x6 + delay 0x2 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffce 0x32 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffc4 0x14 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffd8 0xffd8 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x14 0xffc4 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x32 0xffce 0x6 + launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x23 0x28 0x6 + waitforvisualfinish + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtemplate gLungeGreenImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + waitforvisualfinish + visible ANIM_ATTACKER + clearmonbg ANIM_DEF_PARTNER + end + +Move_FIRE_LASH:: + loadspritegfx ANIM_TAG_SMALL_EMBER + monbg ANIM_DEF_PARTNER + splitbgprio_foes ANIM_TARGET + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x18 0x0 0x0 0x6 + delay 0x4 + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x5 0x0 0x8 0x1 + launchtask AnimTask_BlendMonInAndOut 0x3 0x5 0x1 0x1f 0xc 0x1 0x1 + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + loadspritegfx ANIM_TAG_SLASH + launchtemplate gSlashSliceSpriteTemplate 0x82, 0x3, 0x1 0xfff8 0x0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gSlashSliceSpriteTemplate 0x82, 0x3, 0x1 0x8 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x12 0x1 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 0x7 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x9 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_POWER_TRIP:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color + loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color + loadspritegfx ANIM_TAG_IMPACT @hit + monbg ANIM_DEF_PARTNER + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call PowerTripBuffUp + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call PowerTripBuffUp + delay 0x8 + call PowerTripBuffUp + waitforvisualfinish + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtemplate gPowerTripImpactTemplate 0x2 0x4 0xFFF5 0xA 0x1 0x2 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x5 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtemplate gPowerTripImpactTemplate 0x2 0x4 0x0 0xFFF5 0x1 0x2 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x5 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtemplate gPowerTripImpactTemplate 0x2 0x4 0xA 0x0 0x1 0x2 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end +PowerTripBuffUp: + launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return + +Move_BURN_UP:: + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color + loadspritegfx ANIM_TAG_PINK_CLOUD @yawn + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + monbg ANIM_DEF_PARTNER + setblends 0x120C + fadetobg BG_FIRE + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xA00 0x0 0x1 0xffff + waitbgfadein + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x5 0x1c + waitforvisualfinish + launchtask AnimTask_AllocBackupPalBuffer 0x5 0x0 + waitforvisualfinish + launchtask AnimTask_CopyPalUnfadedToBackup 0x5 0x2 0x0 0x1 + delay 0x1 + launchtask AnimTask_CopyPalFadedToUnfaded 0x5 0x1 0x0 + delay 0x1 + loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER 0x9 0x2 + launchtask AnimTask_CopyPalUnfadedToBackup 0x5 0x2 0x1 0x0 + delay 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x0 0xd 0x1c + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x2 0x0 0xf 0x1 + waitforvisualfinish + delay 0x1E + launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + waitforvisualfinish + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtemplate gBurnUpRedYawnTemplate 0x80, 0x6 0x0 0x0 0x0 0x0 0x1e 0x0 + delay 0x1 + launchtask AnimTask_CopyPalFadedToUnfaded 0x5 0x1 0x1 + delay 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x0 0xd 0x4a52 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x3 0x0 0xf 0x1 + delay 0xF + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x0 0xC 0x1C + delay 0x1 + launchtask AnimTask_CopyPalUnfadedFromBackup 0x5 0x2 0x0 0x1 + delay 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x5 0x0 0x1c + delay 0x1 + launchtask AnimTask_CopyPalUnfadedFromBackup 0x5 0x2 0x1 0x0 + delay 0x1 + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x2 0x0 0xf 0x1 + call FireSpreadEffect + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xd 0x0 0x4a52 + delay 0x1 + launchtask AnimTask_FreeBackupPalBuffer 0x5 0x0 + delay 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0xC 0x0 0x1C + waitforvisualfinish + call UnsetPsychicBg + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_SPEED_SWAP:: + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_ICE_CHUNK @blue green + loadspritegfx ANIM_TAG_ORBS @circle + monbg ANIM_TARGET + panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0 + delay 0xf + launchtemplate gSpeedSwapCircleTemplate 0x82 0x2 0xfff4 0x18 + delay 0x5 + launchtemplate gSpeedSwapRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x0 0xFFE0 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x16 0xFFEA 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x1E 0x0 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x0 0x1C 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0xFFED 0x13 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0xFFE5 0x0 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0xFFEE 0xFFEE 0x10 + waitforvisualfinish + panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0 + launchtemplate gSpeedSwapOrbMissileTemplate 0x80 0x6 0x0 0x0 0x0 0x0 0x1e 0x0 + launchtemplate gSpeedSwapRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x0 0xFFE0 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x16 0xFFEA 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x1E 0x0 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x14 0x14 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x0 0x1C 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0xFFED 0x13 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0xFFE5 0x0 0x10 + launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0xFFEE 0xFFEE 0x10 + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +Move_SMART_STRIKE:: + loadspritegfx ANIM_TAG_POWER_GEM @gem + loadspritegfx ANIM_TAG_AIR_WAVE @sonicboom + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @ball + loadspritegfx ANIM_TAG_LOCK_ON + launchtemplate gLockOnTargetSpriteTemplate 0x28 0x0 + launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x1 + launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x2 + launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x3 + launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x4 + delay 0x78 + setarg 0x7 0xffff + waitforvisualfinish + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + call SonicBoomProjectile + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0xa 0x1 + loadspritegfx ANIM_TAG_FLASH_CANNON_BALL + launchtemplate gSmartStrikeImpactTemplate 0x84 0x5 0x0 0x0 0x8 0x1 0x0 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x0 0xffe8 0xa + launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x11 0xffef 0xa + launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x18 0x0 0xa + launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x11 0x11 0xa + launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x0 0x18 0xa + launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0xffef 0x11 0xa + launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0xffe8 0x0 0xa + launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0xffef 0xffef 0xa + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + waitforvisualfinish + end + +Move_PURIFY:: + loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @Ball + loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke + loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + launchtemplate gPurifyWhiteBallTemplate 0x2 0x6 0x14 0xfff8 0xfff8 0xfff8 0x14 0xffe0 + delay 0x13 + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfff4 0x68 0x0 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfff4 0x48 0x1 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfffa 0x38 0x1 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfffa 0x58 0x0 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x0 0x38 0x0 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x0 0x58 0x1 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x6 0x48 0x0 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x6 0x68 0x1 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xc 0x48 0x0 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xc 0x38 0x1 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x12 0x50 0x0 0x4b + launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x12 0x48 0x1 0x4b + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_REVELATION_DANCE:: + loadspritegfx ANIM_TAG_ORBS @circles + loadspritegfx ANIM_TAG_FLOWER @particles + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @another yellow + loadspritegfx ANIM_TAG_AIR_WAVE @sonicboom + loadspritegfx ANIM_TAG_THIN_RING @ring + monbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x0 + waitforvisualfinish + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + launchtemplate gRevelationDanceYellowOrbsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x10 0xffe8 0x8 0x64 + launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xfff0 0xffe8 0x8 0x64 + delay 0xf + launchtemplate gRevelationDanceYellowOrbsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x20 0xffe8 0x8 0x64 + launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xffe0 0xffe8 0x8 0x64 + delay 0xf + launchtemplate gRevelationDanceYellowOrbsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x18 0xffe8 0x8 0x64 + launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xffe8 0xffe8 0x8 0x64 + delay 0x1e + launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x10 0xffe8 0x0 0x64 + launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xfff0 0xffe8 0x0 0x64 + delay 0x1e + launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x14 0xfff0 0xe 0x50 + launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xffec 0xfff2 0x10 0x50 + waitforvisualfinish + unloadspritegfx ANIM_TAG_FLOWER @particles + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_SMALL_EMBER @light yellow + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + launchtemplate gRevelationDanceYellowAirWaveTemplate 0x82 0x5 0x10 0x0 0x0 0x0 0xf + waitforvisualfinish + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtemplate gRevelationDanceYellowImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + launchtemplate gRevelationDanceYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 + launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0x0 0xb0 0x28 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_ATTACKER + launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xff40 0xf0 0x28 + launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0x0 0xff60 0x28 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_ATTACKER + launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xff40 0xff90 0x28 + launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xa0 0x30 0x28 + launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xff20 0xffe0 0x28 + launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0x70 0xff80 0x28 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xF 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +Move_CORE_ENFORCER:: + loadspritegfx ANIM_TAG_SPARK_2 @yellow color + loadspritegfx ANIM_TAG_LEAF @green color + loadspritegfx ANIM_TAG_RAZOR_LEAF @another green color + loadspritegfx ANIM_TAG_WATER_ORB @blue color + loadspritegfx ANIM_TAG_THIN_RING @rings + loadspritegfx ANIM_TAG_SHOCK_3 @circle from thunderbolt + monbg ANIM_ATTACKER + setalpha 12, 8 + fadetobg BG_COSMIC + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xFC00 0x1 0xffff + waitbgfadein + loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER 0xd 0xA + launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + launchtemplate gCoreEnforcerBlueRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + waitforvisualfinish + launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + waitforvisualfinish + launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + launchtemplate gCoreEnforcerYellowRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + waitforvisualfinish + launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + waitforvisualfinish + launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + launchtemplate gCoreEnforcerGreenRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + waitforvisualfinish + launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x5 + launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + waitforvisualfinish + unloadspritegfx ANIM_TAG_SPARK_2 @yellow color + unloadspritegfx ANIM_TAG_LEAF @green color + unloadspritegfx ANIM_TAG_RAZOR_LEAF @another green color + unloadspritegfx ANIM_TAG_WATER_ORB @blue color + unloadspritegfx ANIM_TAG_THIN_RING @rings + unloadspritegfx ANIM_TAG_SHOCK_3 @circle from thunderbolt + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ORBS @charging particles + loadspritegfx ANIM_TAG_SNORE_Z + loadspritegfx ANIM_TAG_EXPLOSION + clearmonbg ANIM_ATTACKER + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 0xD, 0xD, 0x079F @Yellow + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ORBS, 0, 0xA, 0xA, 0x7501 @Royal Blue + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SNORE_Z, 0, 0xA, 0xA, 0x0688 @Green + delay 0x10 + monbg ANIM_TARGET + launchtask AnimTask_CreateSmallSolarBeamOrbs 0x5 0x0 + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_TARGET 0x2 0x0 0x41 0x1 + launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_DEF_PARTNER 0x2 0x0 0x41 0x1 + launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x0 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff5 0xffe2 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfffa 0xffe2 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xffff 0xffe2 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x5 0xffe2 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xA 0xffe2 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xF 0xffe2 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x14 0xffe2 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xF 0xffe7 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x2 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xC 0xffea 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x9 0xffed 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x6 0xfff0 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x3 0xfff3 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x3 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x0 0xfff6 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfffc 0xfff9 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff9 0xfffc 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff6 0xffff 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x4 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff3 0x3 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff8 0x3 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfffd 0x3 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x2 0x3 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x5 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x7 0x3 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xC 0x3 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x11 0x3 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x16 0x3 0x1 0x3 + delay 0x1 + launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x6 + delay 0x7 + launchtemplate gCoreEnforcerSnoreTemplate 0x2 0x2 0x0 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0x1e 0x1 + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_DEF_PARTNER 0x2 0x0 0x1e 0x1 + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_ATK_PARTNER 0x2 0x0 0x1e 0x1 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0xffe8 0x18 ANIM_TARGET 0x1 + waitforvisualfinish + call UnsetPsychicBg + clearmonbg ANIM_TARGET + blendoff + end + +Move_TROP_KICK:: + loadspritegfx ANIM_TAG_HANDS_AND_FEET @kick + loadspritegfx ANIM_TAG_LEAF @leaves + loadspritegfx ANIM_TAG_FLOWER @flowers + monbg ANIM_DEF_PARTNER + launchtemplate gTropKickGreenFootTemplate 0x2 0x8 0xfff0 0x8 0x0 0x0 0xa 0x1 0x1 0x1 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 0xA + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, 192, 176, 40 + launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, -192, 240, 40 + launchtemplate gTropKickFlowerTemplate, ANIM_TARGET, 5, 0, 10, 192, -160, 40 + launchtemplate gTropKickFlowerTemplate, ANIM_TARGET, 5, 0, 10, -192, -112, 40 + launchtemplate gTropKickFlowerTemplate, ANIM_TARGET, 5, 0, 10, 160, 48, 40 + launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, -224, -32, 40 + launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, 112, -128, 40 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_INSTRUCT:: + loadspritegfx ANIM_TAG_FINGER @finger + loadspritegfx ANIM_TAG_SPOTLIGHT @spotlight + setalpha 12, 8 + launchtemplate gMetronomeFingerSpriteTemplate 0xc 0x1 0x0 + delay 0x18 + loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 0x16, 0x3 + waitforvisualfinish + launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0x0 0xa 0x0 + waitforvisualfinish + launchtemplate gSpotlightSpriteTemplate 0x82 0x2 0x0 0xfff8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x8 0x7DB9 + delay 0x4 + monbg ANIM_TARGET + launchtask AnimTask_BlendMonInAndOut 0x5 0x5 0x0 0x37b 0xc 0x1 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x29 0x1 + playsewithpan SE_M_BIND, SOUND_PAN_TARGET + delay 0x1A + launchtask AnimTask_BlendMonInAndOut 0x5 0x5 0x0 0x37b 0xc 0x1 0x1 + playsewithpan SE_M_BIND, SOUND_PAN_TARGET + delay 0x1A + launchtask AnimTask_BlendMonInAndOut 0x5 0x5 0x0 0x37b 0xc 0x1 0x1 + playsewithpan SE_M_BIND, SOUND_PAN_TARGET + delay 0x1D + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x8 0x0 0x7DB9 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +General_BeakBlastSetUp: + loadspritegfx ANIM_TAG_SMALL_EMBER @Fire + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + delay 0x3 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x1f + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + waitforvisualfinish + end +Move_BEAK_BLAST:: + loadspritegfx ANIM_TAG_IMPACT + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x1F + waitforvisualfinish + launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x0 + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 0x2 + launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x1 + delay 0x2 + loopsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET 0x4 0x8 + launchtask AnimTask_DrillPeckHitSplats 0x5 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x12 0x1 + waitforvisualfinish + launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x2 + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x6 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x1F + waitforvisualfinish + end + +Move_CLANGING_SCALES:: + loadspritegfx ANIM_TAG_METAL_SOUND_WAVES @metal sound + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple color + monbg ANIM_DEF_PARTNER + splitbgprio_foes ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x2002 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_METAL_SOUND_WAVES, 0, 10, 10, 0x642D + waitforvisualfinish + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x2 0x0 0x8 0x1 + call ClangingScalesMetalSound + call ClangingScalesMetalSound + call ClangingScalesMetalSound + call ClangingScalesMetalSound + delay 0x5 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x0 0x3 0xf 0x1 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + delay 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x2002 + waitforvisualfinish + end +ClangingScalesMetalSound: + panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + launchtemplate gClangingScalesPurpleMetalSoundTemplate 0x82 0x7 0x10 0x0 0x0 0x0 0x1e 0x0 ANIM_TARGET + launchtemplate gClangingScalesPurpleMetalSoundTemplate 0x82 0x7 0x10 0x0 0x0 0x0 0x1e 0x0 ANIM_DEF_PARTNER + delay 0x2 + return + +Move_DRAGON_HAMMER:: + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_GRAY_SMOKE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 12, 12, 0x7D7F @Pinkish purple + fadetobg BG_COSMIC + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0, -500, 0x0 0xffff + waitbgfadein + setblends 0xF + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5 + delay 0x6 + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 + delay 0x2 + launchtask AnimTask_SquishTarget 0x2 0x0 + delay 0x5 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, 8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, -8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, -8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, 8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, -8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, -8, 1, 0 + delay 2 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 0 + delay 51 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + waitforvisualfinish + call UnsetPsychicBg + blendoff + end + +Move_BRUTAL_SWING:: + loadspritegfx ANIM_TAG_IMPACT @hits + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color + monbg ANIM_TARGET + setalpha 12, 8 + fadetobg BG_DARK + waitbgfadeout + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0 + waitforvisualfinish + delay 0xb + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5 + delay 0x6 + launchtemplate gBrutalSwingBasicImpactTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x15 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x0 0x3 0x15 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATK_PARTNER 0x0 0x3 0x15 0x1 + delay 0x4 + launchtemplate gBrutalSwingRandomImpactTemplate 0x83 0x2 0x1 0x1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gBrutalSwingRandomImpactTemplate 0x83 0x2 0x1 0x1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gBrutalSwingBasicImpactTemplate 0x83 0x4 0x20 0x14 0x1 0x1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitsound + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x6 + waitforvisualfinish + restorebg + blendoff + clearmonbg ANIM_TARGET + end + +Move_AURORA_VEIL:: + loadspritegfx ANIM_TAG_GUARD_RING + fadetobg BG_AURORA + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x400 0x0 0x0 0xffff + waitbgfadein + monbg ANIM_ATK_PARTNER + setalpha 8, 8 + playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER + launchtemplate gAuroraVeilRingTemplate 0x2 0x0 + delay 0x4 + launchtemplate gAuroraVeilRingTemplate 0x2 0x0 + delay 0x4 + launchtemplate gAuroraVeilRingTemplate 0x2 0x0 + waitforvisualfinish + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendColorCycle 0x2 0x6 0xa 0x0 0x2 0x0 0xa 0x7fff + waitforvisualfinish + call UnsetPsychicBg + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + end + +General_ShellTrapSetUp: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + call FireSpreadEffect + delay 0x4 + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + delay 0x15 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0xA 0x1 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xA 0x0 0x1 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xA 0xA 0x1 0x2 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +Move_SHELL_TRAP:: +ShellTrapUnleash: + loadspritegfx ANIM_TAG_IMPACT @pound + loadspritegfx ANIM_TAG_SMALL_RED_EYE @red + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + loadspritegfx ANIM_TAG_ICE_CRYSTALS @fire launches + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red + monbg ANIM_TARGET + waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 + delay 0x6 + launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + delay 0x5 + waitforvisualfinish + call ShellTrapFireLaunch1 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1 + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1 + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1 + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1 + delay 0x3 + call ShellTrapFireLaunch2 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x3 + waitforvisualfinish + clearmonbg ANIM_TARGET + end +ShellTrapFireLaunch1: + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1 + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1 + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1 + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1 + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x38 0x4 0x4 0x1 + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0x4 0x4 0x1 + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x38 0x4 0x4 0x1 + delay 0x3 + return +ShellTrapFireLaunch2: + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x38 0x4 0x4 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0x4 0x4 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x3 + launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x38 0x4 0x4 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 0x3 + return + +Move_FLEUR_CANNON:: + loadspritegfx ANIM_TAG_ORBS @beam particles + loadspritegfx ANIM_TAG_ELECTRICITY @discharge + loadspritegfx ANIM_TAG_PINK_PETAL @pink color + loadspritegfx ANIM_TAG_PINK_HEART @pink color + setalpha 12, 8 + monbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x7440 + waitforvisualfinish + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, 0x1f, 16, 0, 0 + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1 + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + call FleurCannonBeam + delay 0x20 + launchtemplate gFleurCannonDischargeTemplate 0x2 0x3 0x1 0x10 0x10 + delay 0x2 + launchtemplate gFleurCannonDischargeTemplate 0x2 0x3 0x1 0xfff0 0xfff0 + delay 0x5 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x5 0xb 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x7440 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +FleurCannonBeam: + launchtemplate gFleurCannonOrbTemplate 0x82 0x0 + launchtemplate gFleurCannonOrbTemplate 0x82 0x0 + delay 0x1 + launchtemplate gFleurCannonOrbTemplate 0x82 0x0 + launchtemplate gFleurCannonOrbTemplate 0x82 0x0 + delay 0x1 + return + +Move_PSYCHIC_FANGS:: + loadspritegfx ANIM_TAG_SHARP_TEETH @Teeth + loadspritegfx ANIM_TAG_IMPACT @Hit + loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL @Screen + loadspritegfx ANIM_TAG_TORN_METAL @Broken Screen + monbg ANIM_TARGET + call SetPsychicBackground + setalpha 12, 8 + choosetwoturnanim PsychicFangsRegular PsychicFangsDestroyWall +PsychicFangsRegular: + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0xffe0 0x1 0x333 0x333 0xa + launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0x20 0x5 0xfccd 0xfccd 0xa + delay 0xa + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0x5 0x2 + delay 0x10 + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0xffe0 0x7 0xfccd 0x333 0xa + launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0x20 0x3 0x333 0xfccd 0xa + delay 0xa + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x8 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x8 0x4 0x2 +PsychicFangsEnd: + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + call UnsetPsychicBg + end +PsychicFangsDestroyWall: + launchtemplate gBrickBreakWallSpriteTemplate 0x3 0x5 0x1 0x0 0x0 0x21 0xa + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0xffe0 0x1 0x333 0x333 0xa + launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0x20 0x5 0xfccd 0xfccd 0xa + delay 0xa + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0x5 0x2 + delay 0x10 + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0xffe0 0x7 0xfccd 0x333 0xa + launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0x20 0x3 0x333 0xfccd 0xa + delay 0xa + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x8 0x0 0x1 0x1 + launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x0 0xfff8 0xfff4 + launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x1 0x8 0xfff4 + launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x2 0xfff8 0xc + launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x3 0x8 0xc + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x8 0x4 0x2 + delay 0x10 + goto PsychicFangsEnd + +Move_STOMPING_TANTRUM:: + loadspritegfx ANIM_TAG_ROCKS @rock colour + loadspritegfx ANIM_TAG_SMALL_ROCK @small rock + loadspritegfx ANIM_TAG_IMPACT @pound hit + loadspritegfx ANIM_TAG_SMALL_EMBER @hit color + monbg ANIM_TARGET + launchtask AnimTask_Splash 0x2 0x2 ANIM_ATTACKER 0x3 + delay 0x5 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x5 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x5 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x0 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x1 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x2 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x3 + call StompingTantrumImpact + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x25 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x0 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x1 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x2 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x3 + call StompingTantrumImpact + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x25 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x0 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x1 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x2 + launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x3 + call StompingTantrumImpact + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + end +StompingTantrumImpact: + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x1 + return + +Move_SHADOW_BONE:: + loadspritegfx ANIM_TAG_BONE + loadspritegfx ANIM_TAG_IMPACT + fadetobg BG_NIGHTMARE + waitbgfadein + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_BONEMERANG, SOUND_PAN_TARGET + launchtemplate gSpinningBoneSpriteTemplate 0x2 0x5 0xffd6 0xffe7 0x0 0x0 0xf + delay 0xc + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x5 0x5 0x1 + launchtemplate gComplexPaletteBlendSpriteTemplate 0x2 0x7 0x7 0x5 0x1 0x0 0xa 0x0 0x0 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + launchtask AnimTask_NightmareClone 0x2 0x0 + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x28 0x1 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET + waitforvisualfinish + restorebg + waitbgfadein + clearmonbg 0x3 + blendoff + end + +Move_ACCELEROCK:: + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x18 0x6 0x1 0x5 + launchtask AnimTask_TraceMonBlended 0x2 0x4 0x0 0x4 0x7 0x3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + delay 0x4 + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x5 0x0 0x6 0x1 + launchtemplate gBasicHitSplatSpriteTemplate 0x84, 0x4, 0x0 0x0 0x1 0x1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x5 0x1 0x3 0x0 0x5 0x1 + launchtemplate gRockFragmentSpriteTemplate 0x82 0x6 0x5 0x0 0xffec 0x18 0xe 0x1 + launchtemplate gRockFragmentSpriteTemplate 0x82 0x6 0x0 0x5 0x14 0xffe8 0xe 0x2 + launchtemplate gRockFragmentSpriteTemplate 0x82 0x6 0xfffb 0x0 0xffec 0xffe8 0xe 0x2 + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x5 0x1 0x3 0x0 0x5 0x1 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + waitforvisualfinish + end + +Move_LIQUIDATION:: + loadspritegfx ANIM_TAG_WATER_IMPACT + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_ICE_CRYSTALS + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 + delay 0x6 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + waitforvisualfinish + call RisingWaterHitEffect + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_PRISMATIC_LASER:: + loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color + loadspritegfx ANIM_TAG_SPARK_H @yellow color + loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color + loadspritegfx ANIM_TAG_RAZOR_LEAF @green color + loadspritegfx ANIM_TAG_POISON_BUBBLE @violet color + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation + loadspritegfx ANIM_TAG_TEAL_ALERT @straight lines + loadspritegfx ANIM_TAG_GREEN_SPIKE @needle arm animation + loadspritegfx ANIM_TAG_NEEDLE @sting + monbg ANIM_ATTACKER + setblends 0x80E + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER + launchtemplate gPrismaticLaserChargeTemplate 0x2 0x1 0x0 + call PrismaticLaserInwardSpikes + playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER + call PrismaticLaserInwardSpikes + playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER + call PrismaticLaserInwardSpikes + playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER + call PrismaticLaserInwardSpikes + playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER + delay 0x1E + call PrismaticLaserOutwardSpikes + delay 0x5 + call PrismaticLaserOutwardSpikes2 + delay 0x5 + call PrismaticLaserOutwardSpikes + delay 0x5 + call PrismaticLaserOutwardSpikes2 + delay 0x5 + call PrismaticLaserOutwardSpikes + waitforvisualfinish + unloadspritegfx ANIM_TAG_TEAL_ALERT + unloadspritegfx ANIM_TAG_GREEN_SPIKE + unloadspritegfx ANIM_TAG_ICE_CHUNK + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + delay 0x1E + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x32 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x32 + playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER + call PrismaticLaserRain + call PrismaticLaserRain + call PrismaticLaserRain + call PrismaticLaserRain + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end +PrismaticLaserOutwardSpikes: + launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0x0 0xFF90 0x10 @up + launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0x5F 0xFF9D 0x10 @upper right + launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0x73 0x0 0x10 @right + launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0x4F 0x37 0x10 @lower right + launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0x0 0x53 0x10 @down + launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0xFFB0 0x43 0x10 @lower left + launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0xFF60 0x0 0x10 @left + launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0xFFAA 0xFF94 0x10 @upper left + playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER + return +PrismaticLaserOutwardSpikes2: + launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0xFFE0 0x43 0x10 @between lower left and down + launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0x1F 0x37 0x10 @between lower right and down + launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0xFFDA 0xFF94 0x10 @between up and upper left + launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0xFF60 0x43 0x10 @between left and lower left + launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0xFF2A 0xFFAA 0x10 @between left and upper left + launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0x2D 0xFF9D 0x10 @between up and upper right + launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0xDF 0xFF9D 0x10 @between right and upper right + launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0x9F 0x37 0x10 @between right and lower right + playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER + return +PrismaticLaserInwardSpikes: + launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0x0 0xFF90 0x10 @up + launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0xFFE0 0x43 0x10 @between lower left and down + delay 0x1 + launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0x5F 0xFF9D 0x10 @upper right + launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0x1F 0x37 0x10 @between lower right and down + launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0xFFDA 0xFF94 0x10 @between up and upper left + delay 0x1 + launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0x73 0x0 0x10 @right + launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0xFF60 0x43 0x10 @between left and lower left + delay 0x1 + launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0x4F 0x37 0x10 @lower right + launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0xFF2A 0xFFAA 0x10 @between left and upper left + delay 0x1 + launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0x0 0x53 0x10 @down + launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0x2D 0xFF9D 0x10 @between up and upper right + delay 0x1 + launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0xFFB0 0x43 0x10 @lower left + launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0xDF 0xFF9D 0x10 @between right and upper right + delay 0x1 + launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0xFF60 0x0 0x10 @left + launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0x9F 0x37 0x10 @between right and lower right + delay 0x1 + launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0xFFAA 0xFF94 0x10 @upper left + delay 0x1 + return +PrismaticLaserRain: + launchtemplate gPrismaticLaserYellowRainTemplate 0x82, 0x4, 35, 0x3c, 4, ANIM_TARGET + delay 0x2 + launchtemplate gPrismaticLaserGreenRainTemplate 0x82, 0x4, -30, 0x44, 4, ANIM_TARGET + delay 0x2 + launchtemplate gPrismaticLaserRedRainTemplate 0x82, 0x4, 27, 0x37, 4, ANIM_TARGET + delay 0x2 + launchtemplate gPrismaticLaserVioletRainTemplate 0x82, 0x4, -20, 0x32, 4, ANIM_TARGET + delay 0x2 + launchtemplate gPrismaticLaserYellowRainTemplate 0x82, 0x4, 33, 0x3a, 4, ANIM_TARGET + delay 0x2 + launchtemplate gPrismaticLaserGreenRainTemplate 0x82, 0x4, -12, 0x3a, 4, ANIM_TARGET + delay 0x2 + launchtemplate gPrismaticLaserRedRainTemplate 0x82, 0x4, 19, 0x3c, 4, ANIM_TARGET + delay 0x2 + launchtemplate gPrismaticLaserVioletRainTemplate 0x82, 0x4, -38, 0x3a, 4, ANIM_TARGET + delay 0x2 + launchtemplate gPrismaticLaserYellowRainTemplate 0x82, 0x4, 5, 0x3c, 4, ANIM_TARGET + delay 0x2 + launchtemplate gPrismaticLaserGreenRainTemplate 0x82, 0x4, -23, 0x28, 4, ANIM_TARGET + return + +Move_SPECTRAL_THIEF:: + choosetwoturnanim SpectralThiefSteal SpectralThiefUnleash +SpectralThiefUnleash: + loadspritegfx ANIM_TAG_HANDS_AND_FEET @Black Colour + loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour + loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke + loadspritegfx ANIM_TAG_WHITE_SHADOW @destiny bond + loadspritegfx ANIM_TAG_IMPACT @hits + loadspritegfx ANIM_TAG_POISON_BUBBLE + fadetobg BG_GHOST + waitbgfadein + delay 0x5 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0x8 0x0 0x0 + invisible 0x0 + delay 0x2 + launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x0 0x0 + delay 0x2 + launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x0 0x0 + delay 0x2 + launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x0 0x0 + delay 0x2 + launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0x8 0x0 0x0 + delay 0x2 + launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x0 0x0 + delay 0x2 + launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x0 0x0 + delay 0x2 + launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x0 0x0 + waitforvisualfinish + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x30 + delay 0x30 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x0 0x2 0x0 0x18 0x1 + launchtask AnimTask_BlendBattleAnimPalExclude 0x2 0x5 0x6 0x1 0x0 0xc 0x77bd + delay 0x18 + launchtask AnimTask_BlendBattleAnimPalExclude 0x2 0x5 0x6 0x1 0xc 0x0 0x77bd + waitforvisualfinish + setblends 0x1000 + delay 0x1 + monbg_static ANIM_TARGET + launchtask AnimTask_MoveTargetMementoShadow 0x5 0x0 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg_static ANIM_TARGET + delay 0x1 + blendoff + delay 0x1 + setalpha 12, 8 + monbg ANIM_TARGET + delay 0x1 + launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x4 + launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xa 0x14 0x0 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x4 + launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x4 + launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x4 + launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x4 + launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0x0 0x0 0x0 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x4 + launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0x14 0x2 0x0 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + waitforvisualfinish + visible 0x0 + delay 0x2 + restorebg + waitbgfadein + clearmonbg ANIM_TARGET + blendoff + end +SpectralThiefSteal: + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color + loadspritegfx ANIM_TAG_ORBS @mimic + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + setblends 0x50b + splitbgprio_all + panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0 + delay 0xf + launchtemplate gSpectralThiefBlackOrbsTemplate 0x82 0x2 0xfff4 0x18 + delay 0xB + setarg 0x7 0xffff + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call SpectralThiefBuffUp + delay 0x8 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call SpectralThiefBuffUp + delay 0x8 + call SpectralThiefBuffUp + waitforvisualfinish + blendoff + end +SpectralThiefBuffUp: + launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return + +Move_SUNSTEEL_STRIKE:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_AIR_WAVE_2 @black color + loadspritegfx ANIM_TAG_ROCKS @rock colour + loadspritegfx ANIM_TAG_SMALL_ROCK @small rock + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + launchtemplate gSunsteelStrikeBlackFlyBallTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x1 0x1A + delay 0x18 + launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x0 @The rock particles mess up the fly animation + launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x1 + launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x2 + launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x3 + waitforvisualfinish + unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly + unloadspritegfx ANIM_TAG_AIR_WAVE_2 @black color + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_GOLD_RING @beam + loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color + loadspritegfx ANIM_TAG_IMPACT @hit + playsewithpan SE_ORB, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_BG | ANIM_PAL_ATK), 3, 0, 15, 0 + waitforvisualfinish + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + stopsound + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + launchtemplate gSunsteelStrikeSuperpowerTemplate 0x82 0x1 0x14 + delay 0x14 + launchtemplate gSunsteelStrikeRedImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x0 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x6 0x0 0x8 0x1 + waitforvisualfinish + unloadspritegfx ANIM_TAG_METEOR @superpower + unloadspritegfx ANIM_TAG_GOLD_RING @beam + unloadspritegfx ANIM_TAG_SMALL_RED_EYE @red color + unloadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_SMALL_EMBER @FireSpreadEffect + call FireSpreadEffect + delay 0x4 + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + visible ANIM_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_BG | ANIM_PAL_ATK), 3, 15, 0, 0 + waitforvisualfinish + blendoff + clearmonbg ANIM_TARGET + end +SunsteelStrikeBeam: + launchtemplate gSunsteelStrikeYellowBeamTemplate 0x82 0x1 0x14 + delay 0x1 + launchtemplate gSunsteelStrikeRedBeamTemplate 0x82 0x1 0x14 + delay 0x1 + return + +Move_MOONGEIST_BEAM:: + loadspritegfx ANIM_TAG_MOON + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_ORBS @hyper beam + loadspritegfx ANIM_TAG_WATER_GUN @water gun colour + loadspritegfx ANIM_TAG_ASSURANCE_HAND @purple colour + setalpha 8, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 15, 15, 0x7FFF @White + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 15, 15, 0x7FFC @Light Blue + waitforvisualfinish + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET + launchtemplate gMoonSpriteTemplate 0x80 0x2 0x20 0x15 + launchtask AnimTask_AlphaFadeIn 0x3 0x5 0x0 0x10 0x10 0x0 0x1 + call MoongeistBeamCharge + call MoongeistBeamCharge + call MoongeistBeamCharge + call MoongeistBeamCharge + launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 0x0 @;Charge circle + call MoongeistBeamCharge + delay 0x20 + createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xCC, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, 0x1f, 0x10, 0, 0 + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0xb 0x6739 + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + call MoongeistBeamOrbs + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0xb 0x0 0x6739 + delay 0x1A + stopsound + launchtask AnimTask_MoonlightEndFade 0x2 0x0 + end +MoongeistBeamCharge: + launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, 40, 0, 0, 0, 30, 10 @From right + launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, -40, 0, 0, 0, 30, -10 @From left + launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, -25, -40, 0, 0, 30, -20 @From top left + launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, 25, -40, 0, 0, 30, 20 @From top right + launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, 25, 20, 0, 0, 30, 20 @From bottom right + launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, -25, 40, 0, 0, 30, -20 @From bottom left + delay 0x5 + return +MoongeistBeamOrbs: + launchtemplate gMoongeistBeamBlueOrbsTemplate 0x82 0x0 + launchtemplate gMoongeistBeamPurpleOrbsTemplate 0x82 0x0 + delay 0x1 + return + +Move_TEARFUL_LOOK:: + loadspritegfx ANIM_TAG_SMALL_BUBBLES @tears + loadspritegfx ANIM_TAG_OPENING_EYE @eye + monbg ANIM_DEF_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x5 0x7DE0 + waitforvisualfinish + playsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_TARGET + launchtemplate gOpeningEyeSpriteTemplate 0x5 0x4 0x0 0x0 0x1 0x0 + delay 0x35 + loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 0xC, 0x2 + delay 0x8 + launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x0 + launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x1 + launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x2 + launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x3 + delay 0x8 + launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x0 + launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x1 + launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x2 + launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x3 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x5 0x0 0x7DE0 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_ZING_ZAP:: + loadspritegfx ANIM_TAG_SPARK_2 @sparks + loadspritegfx ANIM_TAG_YELLOW_BALL @ball + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_SPARK_H @yellow color + loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color + monbg ANIM_TARGET + call ZingZapSparks1 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1 + delay 0xA + call ZingZapSparks2 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1 + delay 0xA + call ZingZapSparks1 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1 + delay 0xA + call ZingZapSparks2 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1 + delay 0xA + launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x18 0x6 0x1 0x5 + delay 0x4 + call ZingZapSparks1 + invisible 0x0 + launchtemplate gZingZapYellowBallTemplate 0x82, 0x3, 0x0 0x0 0xF + delay 0xA + call ZingZapSparks2 + delay 0x5 + stopsound + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtemplate gZingZapRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1 + call ElectricityEffect + visible 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + end +ZingZapSparks1: + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + return +ZingZapSparks2: + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + return + +Move_NATURES_MADNESS:: + loadspritegfx ANIM_TAG_ICE_CRYSTALS @small circles + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_SPARKLE_2 @stars + loadspritegfx ANIM_TAG_PINK_PETAL @pink + loadspritegfx ANIM_TAG_ICE_CHUNK @blue green + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_TEAL_ALERT @charge particles + loadspritegfx ANIM_TAG_ECLIPSING_ORB @blue green + monbg ANIM_ATTACKER + setblends 0x80E + delay 0x1 + loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x3 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + delay 0x4 + launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + delay 0x4 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + delay 0x4 + launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + delay 0x4 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + delay 0x4 + launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + delay 0x4 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + delay 0x4 + launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + clearmonbg ANIM_ATTACKER + delay 0x1 + monbg ANIM_TARGET + waitforvisualfinish + launchtemplate gNaturesMadnessGrayRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0 + playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER + delay 0xe + launchtemplate gNaturesMadnessGrayRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0 + playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER + delay 0xe + launchtemplate gNaturesMadnessGrayRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0 + playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER + waitforvisualfinish + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xa 0xa 0x19 0x1 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x1 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x14 0xa 0x19 0x1 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x1 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x1 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x19 0x14 0x19 0x1 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xffec 0x14 0x19 0x1 + launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xc 0x0 0x19 0x1 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xa 0xa 0x19 0x1 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x1 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x14 0xa 0x19 0x1 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x1 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x1 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x19 0x14 0x19 0x1 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xffec 0x14 0x19 0x1 + launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xc 0x0 0x19 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x5 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + delay 0x5 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_MULTI_ATTACK:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_CUT @cut + monbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call MultiAttackBuff + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x7fff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call MultiAttackBuff + delay 0x8 + call MultiAttackBuff + waitforvisualfinish + delay 0xF + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + launchtemplate gCuttingSliceSpriteTemplate 0x2 0x3 0x28 0xffe0 0x0 + launchtemplate gCuttingSliceSpriteTemplate 0x2 0x3 0x28 0xffd0 0x0 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + end +MultiAttackBuff: + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return + +Move_MIND_BLOWN:: + loadspritegfx ANIM_TAG_PINK_HEART @pink color + loadspritegfx ANIM_TAG_SMALL_BUBBLES @blue color + loadspritegfx ANIM_TAG_BLACEPHALON_HEAD @head + loadspritegfx ANIM_TAG_ORBS @circles + loadspritegfx ANIM_TAG_IMPACT @hit + monbg ANIM_TARGET + setalpha 12, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + waitforvisualfinish + playsewithpan SE_FALL, SOUND_PAN_TARGET + launchtemplate gMindBlownHeadTemplate 0x82, 0x3, 0x0 0x0 0x25 + waitforvisualfinish + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0xf 0x1 + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_DEF_PARTNER 0x2 0x0 0xf 0x1 + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_ATK_PARTNER 0x2 0x0 0xf 0x1 + delay 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMindBlownBlueImpactTemplate 0x83 0x2 0x1 0x0 + launchtemplate gMindBlownPinkImpactTemplate 0x83 0x2 0x1 0x0 + call MindBlownBlueOrbs + delay 0x1 + call MindBlownPinkOrbs + delay 0x1 + call MindBlownBlueOrbs + delay 0x1 + call MindBlownPinkOrbs + delay 0x1 + call MindBlownBlueOrbs + delay 0x1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + blendoff + clearmonbg ANIM_TARGET + end +MindBlownBlueOrbs: + launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x0 0xFF90 0x8 @up + launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x5F 0xFF9D 0x8 @upper right + launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x73 0x0 0x8 @right + launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x4F 0x37 0x8 @lower right + launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x0 0x53 0x8 @down + launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0xFFB0 0x43 0x8 @lower left + launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0xFF60 0x0 0x8 @left + launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0xFFAA 0xFF94 0x8 @upper left + return +MindBlownPinkOrbs: + launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0x2D 0xFF9D 0x8 @between up and upper right + launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xDF 0xFF9D 0x8 @between right and upper right + launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0x9F 0x37 0x8 @between right and lower right + launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0x1F 0x37 0x8 @between lower right and down + launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFFE0 0x43 0x8 @between lower left and down + launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFF60 0x43 0x8 @between left and lower left + launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFF2A 0xFFAA 0x8 @between left and upper left + launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFFDA 0xFF94 0x8 @between up and upper left + return + +Move_PLASMA_FISTS:: + loadspritegfx ANIM_TAG_SHOCK_3 @charge + loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect + loadspritegfx ANIM_TAG_SPARK @shock wave + loadspritegfx ANIM_TAG_IMPACT @thunder punch + loadspritegfx ANIM_TAG_HANDS_AND_FEET @thunder punch + loadspritegfx ANIM_TAG_LIGHTNING @thunder punch + monbg ANIM_ATTACKER + setalpha 12, 8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + waitforvisualfinish + launchtemplate gPlasmaFistsChargeTemplate 0x2 0x1 0x0 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x3 0x5c 0x1 + call PlasmaFistSpark1 + delay 0xA + call PlasmaFistSpark2 + delay 0xA + call PlasmaFistSpark1 + delay 0xA + call PlasmaFistSpark2 + delay 0xA + call PlasmaFistSpark1 + delay 0xA + call PlasmaFistSpark2 + delay 0xA + call PlasmaFistSpark1 + delay 0xA + call PlasmaFistSpark2 + delay 0xA + call PlasmaFistSpark1 + delay 0xA + call PlasmaFistSpark2 + delay 0xA + call PlasmaFistSpark1 + delay 0xA + call PlasmaFistSpark2 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + launchtask AnimTask_ShockWaveProgressingBolt 0x5 0x0 + waitforvisualfinish + monbg ANIM_TARGET + call PlasmaFistsImpact + waitforvisualfinish + call PlasmaFistsImpact + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +PlasmaFistSpark1: + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x2 0x0 0xb 0x5bff + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + return +PlasmaFistSpark2: + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + return +PlasmaFistsImpact: + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtemplate gFistFootSpriteTemplate 0x84 0x5 0x0 0x0 0x8 0x1 0x0 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1 + delay 0x1 + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xffd0 + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x2 0x2 0x0 0x10 + delay 0x1 + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 + delay 0x2 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + return + +Move_PHOTON_GEYSER:: + loadspritegfx ANIM_TAG_SHOCK_3 @charge + loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect + loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color + loadspritegfx ANIM_TAG_THIN_RING @calm mind + loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color + loadspritegfx ANIM_TAG_ORBS @recover + monbg ANIM_ATTACKER + setalpha 12, 8 + launchtemplate gPhotonGeyserChargeTemplate 0x2 0x1 0x0 + call PhotonGeyserSparks1 + launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0xffd8 0xffd8 0x10 + launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x0 0x28 0x10 + delay 0xA + call PhotonGeyserSparks2 + delay 0xA + call PhotonGeyserSparks1 + delay 0xA + call PhotonGeyserSparks2 + delay 0xA + call PhotonGeyserSparks1 + launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x0 0xffd8 0x10 + launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x28 0x14 0x10 + delay 0xA + call PhotonGeyserSparks2 + delay 0xA + call PhotonGeyserSparks1 + delay 0xA + call PhotonGeyserSparks2 + delay 0xA + call PhotonGeyserSparks1 + launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0xffd8 0x0 0x10 + launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x28 0x0 0x10 + delay 0xA + call PhotonGeyserSparks2 + delay 0xA + call PhotonGeyserSparks1 + delay 0xA + call PhotonGeyserSparks2 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x0 + clearmonbg ANIM_ATTACKER + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER + unloadspritegfx ANIM_TAG_ORBS @recover + unloadspritegfx ANIM_TAG_SHOCK_3 @charge + loadspritegfx ANIM_TAG_YELLOW_BALL @confuse ray (for zap cannon) + loadspritegfx ANIM_TAG_BLACK_BALL_2 @zap cannon + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray color + launchtemplate gPhotonGeyserWhiteRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + launchtemplate gPhotonGeyserZapBallTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 + launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 + launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 + launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 + launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 + launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 + launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 + launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 + launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + waitforvisualfinish + monbg ANIM_TARGET + launchtemplate gPhotonGeyserYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + unloadspritegfx ANIM_TAG_YELLOW_BALL @confuse ray (for zap cannon) + unloadspritegfx ANIM_TAG_BLACK_BALL_2 @zap cannon + unloadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray color + @Shoot beam to the sky + loadspritegfx ANIM_TAG_STRAIGHT_BEAM + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x6 0x0 0x10 0x43FF @Light yellow + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x4 0x0 0x60 0x1 + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + call PhotonGeyserBeam + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x10 0x0 0x43FF @Light yellow + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xF 0x0 0x0 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end +PhotonGeyserSparks1: + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gThinRingShrinkingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + delay 0x0 + launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + return +PhotonGeyserSparks2: + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + return +PhotonGeyserBeam: + launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, 19, ANIM_TARGET, 180, 2, 6 + delay 0x1 + launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, 3, ANIM_TARGET, 180, 2, 5 + delay 0x1 + launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -13, ANIM_TARGET, 180, 2, 4 + delay 0x1 + launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -29, ANIM_TARGET, 180, 2, 3 + delay 0x1 + launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -45, ANIM_TARGET, 180, 2, 2 + delay 0x1 + launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -61, ANIM_TARGET, 180, 2, 1 + delay 0x1 + launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -77, ANIM_TARGET, 180, 2, 0 + return + +Move_ZIPPY_ZAP:: + end @to do: + +Move_SPLISHY_SPLASH:: + end @to do: + +Move_FLOATY_FALL:: + end @to do: + +Move_PIKA_PAPOW:: + end @to do: + +Move_BOUNCY_BUBBLE:: + end @to do: + +Move_BUZZY_BUZZ:: + end @to do: + +Move_SIZZLY_SLIDE:: + end @to do: + +Move_GLITZY_GLOW:: + end @to do: + +Move_BADDY_BAD:: + end @to do: + +Move_SAPPY_SEED:: + end @to do: + +Move_FREEZY_FROST:: + end @to do: + +Move_SPARKLY_SWIRL:: + end @to do: + +Move_VEEVEE_VOLLEY:: + end @to do: + +Move_DOUBLE_IRON_BASH:: + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_IMPACT + loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 0x1c, 0x2 + launchtask AnimTask_MetallicShine 0x5 0x3 0x0 0x0 0x0 + waitforvisualfinish + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + setalpha 12, 8 + loopsewithpan SE_M_WING_ATTACK, SOUND_PAN_ATTACKER, 0x14, 0x2 + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xc 0x4 0x1 0x4 + launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + launchtemplate gGustToTargetSpriteTemplate 0x2 0x5 0xffe7 0x0 0x0 0x0 0x0 @wing attack + launchtemplate gGustToTargetSpriteTemplate 0x2 0x5 0x19 0x0 0x0 0x0 0x0 @wing attack + delay 0x18 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x18 0x0 0x0 0x9 + delay 0x11 + launchtemplate gBasicHitSplatSpriteTemplate 0x84, 0x4, 0x0 0x0 0x1 0x1 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe0 0x0 0x0 0x3 + waitforvisualfinish + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0xb + waitforvisualfinish + delay 0x3 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7 + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +@@@@@@@@@@@@@@@@@@@@@@@ GEN 8 @@@@@@@@@@@@@@@@@@@@@@@ +Move_DYNAMAX_CANNON:: + goto Move_HYPER_BEAM + +Move_SNIPE_SHOT:: + loadspritegfx ANIM_TAG_IMPACT_2 + loadspritegfx ANIM_TAG_LEER + launchtask AnimTask_BlendBattleAnimPal 10 5 ANIM_PAL_BG 0 0 16, 0 @;Black + waitforvisualfinish + launchtemplate gLeerSpriteTemplate 0x82, 2 0x18 -12 + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 0x20 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + launchtemplate gSnipeShotBallTemplate 0x82, 3, 0 0 16, + waitforvisualfinish + launchtask AnimTask_ShakeMon2 2 5 1 4 0 8, 1 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 10 5 ANIM_PAL_BG 0 16, 0 0 @;Black + waitforvisualfinish + end + +Move_JAW_LOCK:: + loadspritegfx ANIM_TAG_SHARP_TEETH + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x0B1D @Light orange + monbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x7 0x0 @Black + waitforvisualfinish + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + launchtemplate gJawLockTeethTemplate 0x2 0x7 0xffe0 0xffe0 0x1 0x333 0x333 0xa 15 + launchtemplate gJawLockTeethTemplate 0x2 0x7 0x20 0x20 0x5 0xfccd 0xfccd 0xa 15 + delay 0xa + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0xA 0x2 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x0 @;Black + waitforvisualfinish + clearmonbg ANIM_TARGET + delay 0x1 + end + +Move_STUFF_CHEEKS:: + loadspritegfx ANIM_TAG_BERRY_NORMAL + loadspritegfx ANIM_TAG_SHARP_TEETH + loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_SPARKLE_2 + playsewithpan SE_M_METRONOME, 0xc0 + launchtemplate gFloatingBerryTemplate 1 0x1 0x0 + delay 0x45 + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 0x1 BERRYEAT_ON_PLAYER +BerryEatingOpponent: + call BiteOpponent + delay 0x10 + call BiteOpponent + delay 0xA + goto POST_BERRY_EAT +BERRYEAT_ON_PLAYER: + call BitePlayer + delay 0x10 + call BitePlayer + delay 0xA +POST_BERRY_EAT: + playsewithpan SE_SHINY, 0xc0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x2 0x3 0x7 0x0 0x67f1 + launchtemplate gThinRingExpandingSpriteTemplate 3 0x4 0x0 0x0 0x0 0x0 + waitforvisualfinish + end +BitePlayer: + playsewithpan SE_M_BITE, 0x3f + launchtemplate gSharpTeethSpriteTemplate 2 0x6 0x27 0xffD0 0x0 0x0 0x333 0xa + launchtemplate gSharpTeethSpriteTemplate 2 0x6 0x27 0x10 0x4 0x0 0xfccd 0xa + return +BiteOpponent: + playsewithpan SE_M_BITE, 0x3f + launchtemplate gSharpTeethSpriteTemplate 2 0x6 0xffDF 0xffD0 0x0 0x0 0x333 0xa + launchtemplate gSharpTeethSpriteTemplate 2 0x6 0xffDF 0x10 0x4 0x0 0xfccd 0xa + return + +Move_NO_RETREAT:: + loadspritegfx ANIM_TAG_SMALL_EMBER + loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER 0x7 0x12 + launchtemplate gNoRetreatFlameTemplate 2, 0x5 ANIM_ATTACKER, 20, 10, 0xA0, 0 + launchtemplate gNoRetreatFlameTemplate 2, 0x5 ANIM_ATTACKER, -20, 10, 0xA0, 0 + launchtask AnimTask_TeeterDanceMovement 0x5 0x0 + waitforvisualfinish + end + +Move_TAR_SHOT:: + loadspritegfx ANIM_TAG_POISON_BUBBLE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 15, 15, 0 @Black + monbg ANIM_TARGET + launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0x0 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 0x5 + launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0xffe8 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 0xf + launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_TARGET 0x2 0x0 0xa 0x1 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0x10 0x0 @;Black + launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xffe6 0xffe8 0x0 0xf 0x37 + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + delay 0xa + launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xf 0xffe5 0x0 0xC 0x32 + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + delay 0xa + launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xfff1 0xffef 0x0 0xa 0x2d + playsewithpan SE_M_BUBBLE SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +Move_MAGIC_POWDER:: + loadspritegfx ANIM_TAG_POISON_POWDER + loadspritegfx ANIM_TAG_WATER_GUN + loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER 0xE 0x8 + launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xffe2 0xffea 0x75 0x50 0x5 0x1 + launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xa 0xffea 0x75 0x50 0xfffb 0x1 + launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xffe7 0xffea 0x75 0x70 0x5 0x3 + delay 0xf + launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfffb 0xffea 0x75 0x50 0xfffb 0x1 + launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0x5 0xffea 0x75 0x60 0x5 0x1 + launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0x0 0xffea 0x75 0x45 0xfffb 0x1 + launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xfff1 0xffea 0x75 0x70 0x5 0x2 + delay 0x1e + launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfff1 0xffea 0x75 0x70 0x5 0x2 + launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xf 0xffea 0x75 0x50 0xfffb 0x1 + launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfff6 0xffea 0x75 0x60 0x7 0x2 + launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xfffb 0xffea 0x75 0x5a 0xfff8 0x0 + delay 0x14 + launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfff6 0xffea 0x75 0x50 0xfffb 0x1 + launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0x0 0xffea 0x75 0x59 0x5 0x2 + launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0x14 0xffea 0x75 0x70 0xfff8 0x2 + launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0x5 0xffea 0x75 0x50 0x5 0x1 + waitforvisualfinish + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET + launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffa 0xfffa 0xf 0x1 0x1 + waitforvisualfinish + end + +Move_DRAGON_DARTS:: + loadspritegfx ANIM_TAG_DREEPY + loadspritegfx ANIM_TAG_EXPLOSION + playsewithpan SE_FALL, SOUND_PAN_ATTACKER + launchtemplate gDreepyMissileTemplate 0x82, 0x3, 0x0 0x0 0x19 + delay 0x19 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x10 0x1 + launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x0 0x0 0x1 0x1 + waitforvisualfinish + end + +Move_TEATIME:: + goto Move_MILK_DRINK + +Move_OCTOLOCK:: + loadspritegfx ANIM_TAG_TENDRILS + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_TENDRILS, 0, 12, 12, 0x3D98 @Pinkish Red + loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET 0x6 0x4 + launchtemplate gConstrictBindingSpriteTemplate 0x84, 0x4, 0x0 0x10 0x0 0x2 + delay 0x7 + launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0x0 0x0 0x2 + launchtemplate gConstrictBindingSpriteTemplate 0x82, 0x4, 0x0 0x8 0x1 0x2 + delay 0x7 + launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0xfff8 0x1 0x2 + delay 0x8 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x3 0x0 0x6 0x1 + delay 0x14 + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0x8 0x1f + playsewithpan SE_M_BIND, SOUND_PAN_TARGET + setarg 0x7 0xffff + waitforvisualfinish + end + +Move_BOLT_BEAK:: + loadspritegfx ANIM_TAG_HORN_HIT + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_ELECTRICITY + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0, 12, 12, 0x76E1 @Blue Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HORN_HIT, 0, 12, 12, 0x079D @Yellow + call BoltBeakSparks + waitforvisualfinish + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff + createsprite gHorizontalLungeSpriteTemplate, 0x2, 0x2, 0x4, 0x4 + delay 0x4 + createsprite gHornHitSpriteTemplate, 0x84, 0x3, 0x8, 0x8, 0xa + waitforvisualfinish + createsprite gFlashingHitSplatSpriteTemplate, 0x83, 0x4, 0x0, 0x0, 0x1, 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1 + waitforvisualfinish + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x4 0xffe1 0x2 0x0 0x6 0x5bff + call ElectricityEffect + waitforvisualfinish + end +BoltBeakSparks: + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 + delay 0x0 + createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 + delay 0x0 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff + delay 0xa + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x5 0x5 0x5bff + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 + delay 0x0 + createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 + delay 0x0 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x76E1 + delay 0x14 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x4 0x4 0x76E1 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x0, 0x0 + createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x40, 0x14, 0x1, 0x0 + createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x80, 0x14, 0x0, 0x0 + createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x2, 0x0 + createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0x20, 0x14, 0x0, 0x0 + createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0x60, 0x14, 0x1, 0x0 + createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0xa0, 0x14, 0x0, 0x0 + createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0xe0, 0x14, 0x2, 0x0 + delay 0x4 + return + +Move_FISHIOUS_REND:: + loadspritegfx ANIM_TAG_SHARP_TEETH @Teeth + loadspritegfx ANIM_TAG_SMALL_BUBBLES + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x726A @Blue Teeth + playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET + launchtemplate gFishiousRendTeethTemplate, 0x80, 0x2, 50, 4 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x4 0x0 0xC 0x2 + call FishousRendBubbles + waitforvisualfinish + end +FishousRendBubbles: + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xF 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xF 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xffec 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xffec 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0 + delay 0x2 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0 + launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0 + return + +Move_COURT_CHANGE:: + goto Move_TRICK_ROOM + +Move_CLANGOROUS_SOUL:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey + loadspritegfx ANIM_TAG_SPARKLE_2 @stars + launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + call ClangorousSoulStarBuffEffect + call ClangorousSoulStarBuffEffect + call ClangorousSoulStarBuffEffect + waitforvisualfinish + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @fist + createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0xfff0, 0, 0, 0, 10, ANIM_ATTACKER, ANIM_RIGHT_FIST, 1 + createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0x10, 0, 0, 0, 10, ANIM_ATTACKER, ANIM_LEFT_FIST, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + loadspritegfx ANIM_TAG_THIN_RING @ring + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + launchtemplate gClangorousSoulRedRingTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + waitforvisualfinish + end +ClangorousSoulStarBuffEffect: + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtemplate gClangorousSoulBlueBuffTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gClangorousSoulPurpleBuffTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + delay 0x4 + launchtemplate gClangorousSoulWhiteBuffTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + return + +Move_BODY_PRESS:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly and bounce animation + loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 0xD, 0xD, 0x1E5D @Orange + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0 + delay 0x7 + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 @Fly up + waitforvisualfinish + delay 0x2F + launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 @Bounce down + delay 0x2 + playsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER + launchtask AnimTask_SquishTarget 0x2 0x0 + waitforvisualfinish + end + +Move_DECORATE:: + goto Move_FLOWER_SHIELD + +Move_DRUM_BEATING:: + loadspritegfx ANIM_TAG_MUSIC_NOTES + loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE + loadspritegfx ANIM_TAG_ROOTS + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_MUSIC_NOTES, 0, 0xD, 0xD, 0x03AC @Green + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + setalpha 12, 8 + call BellyDrumRight + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER + delay 0xf + call BellyDrumLeft + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0 + playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER + delay 0xf + call BellyDrumRight + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80 + playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER + delay 0x7 + call BellyDrumLeft + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80 + playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER + delay 0x7 + call BellyDrumRight + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0 + playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER + delay 0x7 + call BellyDrumLeft + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0 + playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER + launchtemplate gFrenzyPlantRootSpriteTemplate 0x2 0x6 0x55 0x10 0x6 0x0 0x3 0x50 + playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET + delay 0x5 + launchtemplate gFrenzyPlantRootSpriteTemplate 0x2 0x6 0x55 0xfff0 0xfffa 0x0 0x2 0x4b + playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET + delay 0x5 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff6 0xfff6 0x1 0x3 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x3 0x5 ANIM_TARGET 0x8 0x0 0x14 0x1 + delay 0x3 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xa 0x8 0x1 0x3 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + delay 0x3 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xa 0xfffd 0x1 0x2 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + delay 0x3 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfffd 0x1 0x1 0x2 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff6 0x1 0x1 0x1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0xa 0x1 0x1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end + +Move_SNAP_TRAP:: @ placeholder + goto Move_BITE + +Move_PYRO_BALL:: + loadspritegfx ANIM_TAG_FLAT_ROCK + loadspritegfx ANIM_TAG_SMALL_EMBER + playsewithpan SE_LEDGE, SOUND_PAN_ATTACKER @;Hop + launchtemplate gPyroBallRockTemplate, 2, 0x3, 0, 0, 0 + delay 0x19 + playsewithpan SE_LEDGE, SOUND_PAN_ATTACKER @;Hop + delay 0x19 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x3 0x0 0x7 0x043D + launchtemplate gPyroBallBurningRockTemplate, 2, 0x3, 0, 0, 0 + delay 0x19 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET + delay 0x19 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET + launchtemplate gPyroBallFlamesUpTemplate, 2, 0x3, 0, 0, 1 + delay 0x19 + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + launchtemplate gPyroBallEmberBallTemplate, 2, 0x6, 0, 10, 0, 5, 20, -20 + waitforvisualfinish + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xc 0x1f + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + call FireSpreadEffect + delay 0x20 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x043D + waitforvisualfinish + end + +Move_BEHEMOTH_BLADE:: + goto Move_SACRED_SWORD + +Move_BEHEMOTH_BASH:: + goto Move_SUNSTEEL_STRIKE + +Move_AURA_WHEEL:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_SPARK_2 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK, 0x0, 0xC, 0xC, 0x303B @Pinkish-Red Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 0x0, 0xC, 0xC, 0x76E1 @Blue Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0x0, 0xA, 0xA, 0x303B @Pinkish-Red + setalpha 12, 8 + monbg ANIM_DEF_PARTNER + splitbgprio_foes ANIM_TARGET + launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x0 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gAuraWheelRedElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x4 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x8 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gAuraWheelRedElectricityTemplate 3, 0x4 0x0 0x0 0x38 0xc + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x10 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gAuraWheelRedElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x18 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 2, 0x5 0x0 0x18 0x0 0x0 0x6 + delay 0x4 + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x17 0x1 + launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 2, 12, 0, 0x76E1 @Revert blue Electricity + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0xc0 0x28 0x2 0x8003 + delay 0x7 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 2, 0x3 0x0 0x0 0x9 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +Move_BREAKING_SWIPE:: + loadspritegfx ANIM_TAG_IMPACT @hits + loadspritegfx ANIM_TAG_SPARK_2 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, 0x001F @Red + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 0, 12, 12, 0x001F @Red + monbg ANIM_TARGET + setalpha 12, 8 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x1 + launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0x5 0x0 0x5 0x0 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x15 0x1 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x0 0x3 0x15 0x1 + delay 0x4 + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x1 + launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x1 + launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x1 + launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0xffec 0xf 0x5 0x1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitsound + waitforvisualfinish + blendoff + clearmonbg ANIM_TARGET + end + +Move_BRANCH_POKE:: + loadspritegfx ANIM_TAG_BRANCH + loadspritegfx ANIM_TAG_IMPACT + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + launchtemplate gBranchPokeBranchTemplate, 0x82, 0x3 0x0 0x0 0x25 + waitforvisualfinish + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1 + launchtemplate gFlashingHitSplatSpriteTemplate, 0x83, 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + waitforvisualfinish + end + +Move_OVERDRIVE:: + loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_ELECTRICITY + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0, 12, 12, 0x76E1 @Blue Electricity + call BoltBeakSparks + waitforvisualfinish + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_THIN_RING, 0, 12, 12, 0x17BF @Yellow Electricity + call OverdriveRings + delay 0x8 + call OverdriveRings + delay 0x10 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_THIN_RING, 0, 0, 12, 0x76E1 @Blue Electricity + waitforvisualfinish + end +OverdriveRings: + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + launchtemplate gSimplePaletteBlendSpriteTemplate 0x2 0x5 0x1f 0x3 0x8 0x0 0x3ff + launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffb 0xfffb 0x5 0x0 0x0 + launchtemplate gHyperVoiceRingSpriteTemplate 0x0 0x7 0x2d 0x0 0x0 0x0 0x0 0x0 0x1 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x1 0x0 0x6 0x1 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x6 0x1 + launchtask AnimTask_ShakeBattleTerrain 0x2 0x4 0x1 0x0 0x6 0x1 + launchtask SoundTask_WaitForCry 0x5 0x0 + return + +Move_APPLE_ACID:: + loadspritegfx ANIM_TAG_APPLE + loadspritegfx ANIM_TAG_POISON_BUBBLE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, 0x061D @Orange + playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER + launchtemplate gAppleAcidFloatingAppleTemplate 0xc 0x1 0x0 + delay 0x30 + monbg ANIM_TARGET + launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0x0 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 0x5 + launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0x18 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 0x5 + launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0xffe8 0x0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 0xf + launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_TARGET 0x2 0x0 0xa 0x1 + launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0x0 0xffea 0x0 0xf 0x37 + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + delay 0xa + launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xffe6 0xffe8 0x0 0xf 0x37 + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + delay 0xa + launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xf 0xffe5 0x0 0xf 0x32 + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + delay 0xa + launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xfff1 0xffef 0x0 0xa 0x2d + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + delay 0xa + launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0x1b 0xffea 0x0 0xf 0x32 + playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +Move_GRAV_APPLE:: + loadspritegfx ANIM_TAG_APPLE + fadetobg BG_IN_AIR + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff + waitbgfadein + call SmallAppleShower + call SmallAppleShower + launchtemplate gGravAppleLargeApple, 0x82, 0x4, 0x0, 0x3c, 4, ANIM_TARGET + delay 0x7 + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0 0x15 0x0 0x4 + delay 0x30 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + waitforvisualfinish + call UnsetPsychicBg + end +SmallAppleShower: + launchtemplate gGravAppleSmallApple, 0x82, 0x4, 35, 0x3c, 4, ANIM_TARGET + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x2 + launchtemplate gGravAppleSmallApple, 0x82, 0x4, -30, 0x44, 4, ANIM_TARGET + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x2 + launchtemplate gGravAppleSmallApple, 0x82, 0x4, 27, 0x37, 4, ANIM_TARGET + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x2 + launchtemplate gGravAppleSmallApple, 0x82, 0x4, -20, 0x32, 4, ANIM_TARGET + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x2 + launchtemplate gGravAppleSmallApple, 0x82, 0x4, 33, 0x3a, 4, ANIM_TARGET + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x2 + launchtemplate gGravAppleSmallApple, 0x82, 0x4, -12, 0x3a, 4, ANIM_TARGET + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x2 + launchtemplate gGravAppleSmallApple, 0x82, 0x4, 19, 0x3c, 4, ANIM_TARGET + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x2 + launchtemplate gGravAppleSmallApple, 0x82, 0x4, -38, 0x3a, 4, ANIM_TARGET + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x2 + launchtemplate gGravAppleSmallApple, 0x82, 0x4, 5, 0x3c, 4, ANIM_TARGET + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x2 + launchtemplate gGravAppleSmallApple, 0x82, 0x4, -23, 0x28, 4, ANIM_TARGET + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x2 + return + +Move_SPIRIT_BREAK:: + goto Move_PSYCHIC + +Move_STRANGE_STEAM:: + loadspritegfx ANIM_TAG_PINK_CLOUD + loadspritegfx ANIM_TAG_FINGER + loadspritegfx ANIM_TAG_WATER_GUN @blue colour + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FINGER, 0, 10, 10, 0x4798 @Green + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 0x4, 0xA + call StrangeSteamCloud + call StrangeSteamCloud + call StrangeSteamCloud + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0x2A 0x1 + call StrangeSteamCloud + call StrangeSteamCloud + call StrangeSteamCloud + call StrangeSteamCloud + call StrangeSteamCloud + call StrangeSteamCloud + call StrangeSteamCloud + call StrangeSteamCloud + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end +StrangeSteamCloud: + launchtemplate gStrangeSteamPinkCloudTemplate 0x82 0x5 0xf 0xf 0x14 0x0 0x0 + launchtemplate gStrangeSteamGreenCloudTemplate 0x82 0x5 0xf 0xf 0x14 0xa 0x5 + launchtemplate gStrangeSteamPinkCloudTemplate 0x82 0x5 0xf 0xf 0x14 0xfff6 0xfffb + launchtemplate gStrangeSteamGreenCloudTemplate 0x82 0x5 0xf 0xf 0x14 0x14 0xa + launchtemplate gStrangeSteamBlueCloudTemplate 0x82 0x5 0xf 0xf 0x14 0xffec 0xfff6 + delay 0x2 + return + +Move_LIFE_DEW:: + loadspritegfx ANIM_TAG_WATER_DROPLET + loadspritegfx ANIM_TAG_BLUE_STAR + monbg ANIM_ATK_PARTNER + launchtemplate gLifeDewDropletTemplate, 2, 0x3, 0, 0, ANIM_ATTACKER + launchtemplate gLifeDewDropletTemplate, 2, 0x3, 0, 0, ANIM_ATK_PARTNER + delay 0x15 + playsewithpan SE_M_BUBBLE, SOUND_PAN_ATTACKER + waitforvisualfinish + playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER + launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 0, -5, ANIM_ATTACKER, FALSE + launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 0, -5, ANIM_ATK_PARTNER, FALSE + delay 0x7 + launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, 10, ANIM_ATTACKER, FALSE + launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, 10, ANIM_ATK_PARTNER, FALSE + delay 0x7 + launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, -15, ANIM_ATTACKER, FALSE + launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, -15, ANIM_ATK_PARTNER, FALSE + delay 0x7 + launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 10, -5, ANIM_ATTACKER, FALSE + launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 10, -5, ANIM_ATK_PARTNER, FALSE + delay 0x7 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end + +Move_OBSTRUCT:: + loadspritegfx ANIM_TAG_NOISE_LINE @growl + loadspritegfx ANIM_TAG_PROTECT + loadspritegfx ANIM_TAG_OBSTRUCT_CROSS + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_NOISE_LINE, 0, 10, 10, 0 @Black + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 10, 10, 0 @Black + launchtask SoundTask_PlayDoubleCry 0x2 0x2 ANIM_ATTACKER 0xff + call RoarEffect + waitforvisualfinish + delay 0x10 + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 + launchtemplate gProtectSpriteTemplate, 2, 0x3 0x18 0x0 0x5a @;Protect + waitforvisualfinish + launchtemplate gObstructCrossTemplate, 2, 0x4 0x0 0x0 0x1 0x24 + playsewithpan SE_M_LEER, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end + +Move_FALSE_SURRENDER:: + goto Move_FEINT + +Move_METEOR_ASSAULT:: + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_METEOR + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 12, 12, 0x0B1D @Light orange + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 1, 0, 9, 0x0B1D @Light orange + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x30 0x0 0x4 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + waitforvisualfinish + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate, 0x83, 0x1 0x0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + delay 0xF + createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_ATK | ANIM_PAL_BG), 1, 0x10, 0x10, 0x7FFF @Screen flash white + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x5 0x20 0x1 + call BasicExplosion + call BasicExplosion + waitforvisualfinish + visible ANIM_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_ATK | ANIM_PAL_BG), 1, 0x10, 0, 0x7FFF @Screen revert from white + waitforvisualfinish + end +BasicExplosion: + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x0 0x0 0x1 0x1 + delay 0x3 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x18 0xffe8 0x1 0x1 + delay 0x3 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0xfff0 0x10 0x1 0x1 + delay 0x3 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0xffe8 0xfff4 0x1 0x1 + delay 0x3 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x10 0x10 0x1 0x1 + return + +Move_ETERNA_BEAM:: + goto Move_HYPER_BEAM + +Move_STEEL_BEAM:: + loadspritegfx ANIM_TAG_CLAW_SLASH + loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + delay 48 + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_GUST + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x14 0x0 0x2 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 20 + loadspritegfx ANIM_TAG_STEEL_BEAM + call SetSteelBeamBackground + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + createvisualtask AnimTask_CreateSmallSteelBeamOrbs, 5 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0 + delay 4 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1 + delay 4 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 0, 10, RGB(24, 24, 48) + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2 + delay 4 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 65, 1 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 3 + delay 4 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 4 + delay 4 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 5 + delay 4 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 6 + delay 4 + call SteelBeam_Continuity + call SteelBeam_Continuity + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 10, 0, RGB(24, 24, 48) + call UnsetHighSpeedBg + end +SteelBeam_Continuity: + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0 + delay 4 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1 + delay 4 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2 + delay 4 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 3 + delay 4 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 4 + delay 4 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 5 + delay 4 + createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 6 + delay 4 + return +SetSteelBeamBackground: + createvisualtask AnimTask_GetAttackerSide, 2 + jumprettrue SetSteelBeamBgPlayer + fadetobg BG_STEEL_BEAM_OPPONENT + goto SetHighSpeedBgFade +SetSteelBeamBgPlayer: + fadetobg BG_STEEL_BEAM_PLAYER + +Move_EXPANDING_FORCE:: + end @to do: + +Move_STEEL_ROLLER:: + goto Move_GYRO_BALL + +Move_SCALE_SHOT:: + end @to do: + +Move_METEOR_BEAM:: + end @to do: + +Move_SHELL_SIDE_ARM:: + launchtask AnimTask_ShellSideArm 0x5 0x0 + 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 + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 6, 6, RGB_MAGENTA + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, ANIM_ATTACKER + waitforvisualfinish + delay 11 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 10, 2 + delay 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + waitforvisualfinish + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6 + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end +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 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_LEER, 0, 6, 6, RGB_MAGENTA + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x82, 2 0x18 -12 + waitforvisualfinish + delay 0x20 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + launchtemplate gSnipeShotBallTemplate 0x82, 3, 0 0 24, + waitforvisualfinish + launchtask AnimTask_ShakeMon2 2 5 1 4 0 8, 1 + waitforvisualfinish + end + +Move_MISTY_EXPLOSION:: + end @to do: + +Move_GRASSY_GLIDE:: + end @to do: + +Move_RISING_VOLTAGE:: + end @to do: + +Move_TERRAIN_PULSE:: + loadspritegfx ANIM_TAG_DRAGON_PULSE + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK + launchtask AnimTask_TerrainPulse 0x5 0x0 + jumpargeq 0x0, TYPE_ELECTRIC, TerrainPulseElectric + jumpargeq 0x0, TYPE_GRASS, TerrainPulseGrass + jumpargeq 0x0, TYPE_FAIRY, TerrainPulseFairy + jumpargeq 0x0, TYPE_PSYCHIC, TerrainPulsePsychic +TerrainPulseNormal: + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB_WHITE + waitforvisualfinish + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15 + call DragonPulseParticle + call DragonPulseParticle + createvisualtask AnimTask_SwayMon, 5, 0, 2, 51200, 24, ANIM_TARGET + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB_WHITE + goto TerrainPulseEnd + +TerrainPulseElectric: + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(27, 27, 0) + waitforvisualfinish + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15 + call DragonPulseParticle + call DragonPulseParticle + createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(27, 27, 0) + goto TerrainPulseEnd + +TerrainPulseGrass: + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(11, 26, 11) + waitforvisualfinish + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15 + call DragonPulseParticle + call DragonPulseParticle + createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(11, 26, 11) + goto TerrainPulseEnd + +TerrainPulseFairy: + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(31, 24, 31) + waitforvisualfinish + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15 + call DragonPulseParticle + call DragonPulseParticle + createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(31, 24, 31) + goto TerrainPulseEnd + +TerrainPulsePsychic: + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(27, 0, 13) + waitforvisualfinish + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15 + call DragonPulseParticle + call DragonPulseParticle + createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(27, 0, 13) + goto TerrainPulseEnd + +TerrainPulseEnd: + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + call DragonPulseParticle + waitforvisualfinish + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, RGB_BLACK + waitforvisualfinish + blendoff + clearmonbg ANIM_TARGET + end + +Move_SKITTER_SMACK:: + end @to do: + +Move_BURNING_JEALOUSY:: + goto Move_OVERHEAT + +Move_LASH_OUT:: + end @to do: + +Move_POLTERGEIST:: + loadspritegfx ANIM_TAG_EYE_SPARKLE + loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond + loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_POLTERGEIST + fadetobg BG_NIGHTMARE + waitbgfadein + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 0, 16, RGB_BLACK + waitforvisualfinish + createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, -16, -8 + createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, 16, -8 + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 16, 0, RGB_BLACK + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + delay 0x1 + launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x24 + delay 0x30 + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET + createvisualtask AnimTask_PoltergeistItem, 2 + waitforvisualfinish + setalpha 12, 8 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x5 0x5 0x1 + launchtemplate gComplexPaletteBlendSpriteTemplate 0x2 0x7 0x7 0x5 0x1 0x0 0xa 0x0 0x0 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + launchtask AnimTask_NightmareClone 0x2 0x0 + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x28 0x1 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET + waitforvisualfinish + restorebg + waitbgfadein + clearmonbg 0x3 + blendoff + end + +Move_CORROSIVE_GAS:: +Move_COACHING:: +Move_FLIP_TURN:: +Move_TRIPLE_AXEL:: +Move_DUAL_WINGBEAT:: +Move_SCORCHING_SANDS:: + end @to do + +Move_JUNGLE_HEALING:: + goto Move_AROMATHERAPY + +Move_WICKED_BLOW:: +Move_SURGING_STRIKES:: +Move_THUNDER_CAGE:: +Move_DRAGON_ENERGY:: +Move_FREEZING_GLARE:: +Move_FIERY_WRATH:: +Move_THUNDEROUS_KICK:: +Move_GLACIAL_LANCE:: +Move_ASTRAL_BARRAGE:: +Move_EERIE_SPELL:: +Move_DIRE_CLAW:: +Move_PSYSHIELD_BASH:: +Move_POWER_SHIFT:: +Move_STONE_AXE:: +Move_SPRINGTIDE_STORM:: +Move_MYSTICAL_POWER:: +Move_RAGING_FURY:: +Move_WAVE_CRASH:: +Move_CHLOROBLAST:: +Move_MOUNTAIN_GALE:: +Move_VICTORY_DANCE:: +Move_HEADLONG_RUSH:: +Move_BARB_BARRAGE:: +Move_ESPER_WING:: +Move_BITTER_MALICE:: +Move_SHELTER:: +Move_TRIPLE_ARROWS:: +Move_INFERNAL_PARADE:: +Move_CEASELESS_EDGE:: +Move_BLEAKWIND_STORM:: +Move_WILDBOLT_STORM:: +Move_SANDSEAR_STORM:: +Move_LUNAR_BLESSING:: +Move_TAKE_HEART:: + end @to do + +@@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ Move_NONE: Move_MIRROR_MOVE: Move_POUND: @@ -622,7 +14544,7 @@ Move_BODY_SLAM: Move_SUPERSONIC: loadspritegfx ANIM_TAG_GOLD_RING monbg ANIM_ATK_PARTNER - monbgprio_2A ANIM_ATTACKER + splitbgprio_foes ANIM_ATTACKER setalpha 12, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 2, 0, 8, 1 call SupersonicRing @@ -659,7 +14581,7 @@ ScreechRing: Move_FLAME_WHEEL: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER - monbgprio_2A ANIM_TARGET + splitbgprio_foes ANIM_TARGET createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 2 @@ -702,7 +14624,7 @@ Move_PIN_MISSILE: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gPinMissileSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, -8, -8, 20, -32 @@ -731,7 +14653,7 @@ Move_ICICLE_SPEAR: loadspritegfx ANIM_TAG_ICICLE_SPEAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_ICY_WIND, SOUND_PAN_ATTACKER createsprite gIcicleSpearSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, -8, -8, 20, -32 @@ -762,7 +14684,7 @@ Move_TAKE_DOWN: setalpha 12, 8 createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -24, 8, 23, 10, 40, 10 delay 35 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 10, RGB_BLACK, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 1 @@ -782,14 +14704,14 @@ Move_TAKE_DOWN: Move_DOUBLE_EDGE: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 4, 2, RGB_WHITE, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 waitforvisualfinish delay 10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 16, 16, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 delay 3 waitforvisualfinish @@ -797,14 +14719,14 @@ Move_DOUBLE_EDGE: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 waitforvisualfinish - createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 0, 0 - createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 1, 0 + 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 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE waitforvisualfinish - createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 0, 1 - createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 1, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 delay 3 @@ -817,7 +14739,7 @@ Move_POISON_STING: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20 @@ -836,7 +14758,7 @@ Move_TWINEEDLE: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 6, 2 createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 10, -4, 0, -4, 20 @@ -859,7 +14781,7 @@ Move_FIRE_BLAST: call FireBlastRing call FireBlastRing delay 24 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 3, 0, 8, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 8, RGB_BLACK waitforvisualfinish delay 19 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 20, 1 @@ -881,7 +14803,7 @@ Move_FIRE_BLAST: delay 3 call FireBlastCross waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 2, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 2, 8, 0, RGB_BLACK waitforvisualfinish end FireBlastRing: @@ -935,30 +14857,6 @@ EmberFireHit: delay 4 return -Move_MEGA_PUNCH: - loadspritegfx ANIM_TAG_IMPACT - loadspritegfx ANIM_TAG_HANDS_AND_FEET - monbg ANIM_TARGET - delay 2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 16, RGB_BLACK - setalpha 12, 8 - playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET - createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 50 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 7, RGB_WHITE - delay 50 - call SetImpactBackground - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 - createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 8, 0, 0 - playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - waitforvisualfinish - clearmonbg ANIM_TARGET - blendoff - delay 2 - restorebg - waitbgfadein - end SetImpactBackground: delay 2 createvisualtask AnimTask_IsContest, 2 @@ -978,23 +14876,48 @@ SetImpactContestsBG: changebg BG_IMPACT_CONTESTS goto SetImpactBackgroundRet +Move_MEGA_PUNCH: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET + monbg ANIM_TARGET + delay 2 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 16, RGB_BLACK + setalpha 12, 8 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET + createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 50 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE + delay 50 + call SetImpactBackground + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + delay 2 + restorebg + waitbgfadein + end + Move_MEGA_KICK: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET delay 2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 16, RGB_BLACK setalpha 12, 8 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 50 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 7, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE delay 50 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET call SetImpactBackground createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 8, 0, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -1029,7 +14952,7 @@ Move_SONIC_BOOM: loadspritegfx ANIM_TAG_AIR_WAVE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 call SonicBoomProjectile call SonicBoomProjectile @@ -1053,21 +14976,21 @@ SonicBoomHit: Move_THUNDER_SHOCK: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 0, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK waitforvisualfinish delay 10 createvisualtask AnimTask_ElectricBolt, 5, 0, -44, 0 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET delay 9 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 0, 13, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 13, RGB_BLACK waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 13, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 13, 0, RGB_BLACK waitforvisualfinish delay 20 call ElectricityEffect waitforvisualfinish delay 20 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 6, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK waitforvisualfinish end @@ -1075,7 +14998,7 @@ Move_THUNDERBOLT: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SHOCK_3 loadspritegfx ANIM_TAG_SPARK_2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 0, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK waitforvisualfinish delay 10 createvisualtask AnimTask_ElectricBolt, 5, 24, -52, 0 @@ -1087,9 +15010,9 @@ Move_THUNDERBOLT: createvisualtask AnimTask_ElectricBolt, 5, 0, -60, 1 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET delay 9 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 0, 13, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 13, RGB_BLACK waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 13, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 13, 0, RGB_BLACK waitforvisualfinish delay 20 createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 44, 0, 0, 3 @@ -1103,20 +15026,20 @@ Move_THUNDERBOLT: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 224, 40, 2, -32765 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 0 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 2, 2, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK delay 6 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 6, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 6, RGB_BLACK delay 6 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 2, 2, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK delay 6 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 6, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 6, RGB_BLACK waitforvisualfinish delay 20 waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 19 call ElectricityEffect waitforvisualfinish delay 20 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 6, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK waitforvisualfinish end @@ -1124,7 +15047,7 @@ Move_THUNDER_WAVE: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_SPARK_H - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 0, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK waitforvisualfinish delay 10 createvisualtask AnimTask_ElectricBolt, 5, 0, -48, 0 @@ -1137,7 +15060,7 @@ Move_THUNDER_WAVE: delay 4 createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, 16 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 6, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK waitforvisualfinish end @@ -1246,10 +15169,10 @@ Move_REVERSAL: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, RGB_WHITE, 8, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB_WHITE, 8, RGB_BLACK, 0 waitforvisualfinish delay 30 - createvisualtask AnimTask_BlendColorCycle, 2, 31, 3, 2, 0, 10, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 2, 0, 10, RGB_WHITE delay 10 playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER createsprite gReversalOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 0 @@ -1263,7 +15186,7 @@ Move_REVERSAL: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 delay 8 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_WHITE, 8, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_WHITE, 8, RGB_BLACK, 0 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 10, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 8, 1, 0 @@ -1300,7 +15223,7 @@ Move_SPIKE_CANNON: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -4, 0, 4, 6, 8, 4 waitforvisualfinish @@ -1347,7 +15270,7 @@ Move_PSYCH_UP: delay 4 playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, ANIM_ATTACKER, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 9, 2, 2, 10, 0, RGB_YELLOW + createvisualtask AnimTask_BlendBattleAnimPal, 9, F_PAL_ATTACKER, 2, 10, 0, RGB_YELLOW delay 30 clearmonbg ANIM_ATK_PARTNER blendoff @@ -1445,18 +15368,18 @@ FuryCutterRight: createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 goto FuryCutterContinue FuryCutterMedium: - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB(9, 8, 10), 4, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB(9, 8, 10), 4, RGB_BLACK, 0 goto FuryCutterContinue2 FuryCutterStrong: - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, RGB(9, 8, 10), 4, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 goto FuryCutterContinue2 FuryCutterStrongest: - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, RGB(9, 8, 10), 4, 0, 0 + 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: loadspritegfx ANIM_TAG_EXPLOSION - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 0, 9, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB_RED createvisualtask AnimTask_ShakeMon2, 5, 4, 6, 0, 38, 1 createvisualtask AnimTask_ShakeMon2, 5, 5, 6, 0, 38, 1 createvisualtask AnimTask_ShakeMon2, 5, 6, 6, 0, 38, 1 @@ -1465,7 +15388,7 @@ Move_SELF_DESTRUCT: call SelfDestructExplode call SelfDestructExplode waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 9, 0, RGB_RED end SelfDestructExplode: playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_ATTACKER @@ -1622,7 +15545,7 @@ RisingWaterHitEffect: Move_EXPLOSION: loadspritegfx ANIM_TAG_EXPLOSION - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 8, 9, RGB(26, 8, 8), 8, 0, 8 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(26, 8, 8), 8, RGB_BLACK, 8 createvisualtask AnimTask_ShakeMon2, 5, 4, 8, 0, 40, 1 createvisualtask AnimTask_ShakeMon2, 5, 5, 8, 0, 40, 1 createvisualtask AnimTask_ShakeMon2, 5, 6, 8, 0, 40, 1 @@ -1631,9 +15554,9 @@ Move_EXPLOSION: call Explosion1 call Explosion1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 16, 16, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 16, RGB_WHITE delay 50 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 3, 16, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 16, 0, RGB_WHITE end Explosion1: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER @@ -1668,7 +15591,7 @@ Move_DEFENSE_CURL: Move_PROTECT: loadspritegfx ANIM_TAG_PROTECT monbg ANIM_ATK_PARTNER - monbgprio_28 ANIM_ATTACKER + splitbgprio ANIM_ATTACKER waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 16 createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, 90 waitforvisualfinish @@ -1677,16 +15600,16 @@ Move_PROTECT: Move_DETECT: loadspritegfx ANIM_TAG_SPARKLE_4 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 9, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 9, RGB_BLACK waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 0, 9, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB_WHITE delay 18 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 20, -20 waitforvisualfinish delay 10 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 9, 0, RGB_BLACK - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 2, 9, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 9, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB_WHITE waitforvisualfinish end @@ -1708,7 +15631,7 @@ Frustration_Continue: Frustration_Strongest: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon2, 5, ANIM_ATTACKER, 1, 0, 15, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 3, 0, 9, 31 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 0, 9, RGB_RED waitforvisualfinish delay 20 playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER @@ -1739,12 +15662,12 @@ Frustration_Strongest: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, ANIM_TARGET, 0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 3, 9, 0, 31 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 9, 0, RGB_RED goto Frustration_Continue Frustration_Strong: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon2, 5, ANIM_ATTACKER, 1, 0, 15, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 3, 0, 9, 31 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 0, 9, RGB_RED waitforvisualfinish delay 20 playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER @@ -1765,7 +15688,7 @@ Frustration_Strong: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -12, -6, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 6, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 3, 9, 0, 31 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 9, 0, RGB_RED goto Frustration_Continue Frustration_Medium: playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER @@ -1807,7 +15730,7 @@ Move_SAFEGUARD: createsprite gGuardRingSpriteTemplate, ANIM_ATTACKER, 2 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, 10, 0, 2, 0, 10, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATK_SIDE, 0, 2, 0, 10, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -1863,13 +15786,13 @@ Move_GUILLOTINE: playsewithpan SE_M_VICEGRIP, SOUND_PAN_TARGET createsprite gGuillotineSpriteTemplate, ANIM_ATTACKER, 2, 0 createsprite gGuillotineSpriteTemplate, ANIM_ATTACKER, 2, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB_BLACK delay 9 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 23, 1 delay 46 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 8, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 8, 0, 0 + 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 clearmonbg ANIM_DEF_PARTNER @@ -1882,7 +15805,7 @@ Move_PAY_DAY: loadspritegfx ANIM_TAG_COIN loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER createsprite gCoinThrowSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 0, 0, 1152 @@ -1899,7 +15822,7 @@ Move_PAY_DAY: Move_OUTRAGE: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 8, 3 - createvisualtask AnimTask_BlendColorCycle, 2, 7, 2, 5, 3, 8, RGB(14, 13, 0) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 2, 5, 3, 8, RGB(14, 13, 0) createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 6, 5, 4 delay 0 createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 1280, 0, 3 @@ -1945,25 +15868,25 @@ Move_SPARK: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 5, 5, RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, ANIM_ATTACKER, 1, 0 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 0, 0, RGB(31, 31, 22) delay 10 - createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 5, 5, RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, ANIM_ATTACKER, 1, 1 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 0, 0, RGB(31, 31, 22) delay 20 - createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 7, 7, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 7, 7, RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0 @@ -1975,14 +15898,14 @@ Move_SPARK: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 delay 4 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 0, 0, RGB(31, 31, 22) createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 4 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, 4, -31, 2, 0, 6, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, -31, 2, 0, 6, RGB(31, 31, 22) call ElectricityEffect waitforvisualfinish end @@ -2013,7 +15936,7 @@ Move_ATTRACT: createsprite gRedHeartRisingSpriteTemplate, ANIM_ATTACKER, 40, 112, 256, 90 createsprite gRedHeartRisingSpriteTemplate, ANIM_ATTACKER, 40, 200, 272, 90 delay 75 - createvisualtask AnimTask_BlendColorCycle, 2, 4, 4, 4, 0, 10, RGB(31, 25, 27) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 10, RGB(31, 25, 27) end Move_GROWTH: @@ -2023,7 +15946,7 @@ Move_GROWTH: waitforvisualfinish end GrowthEffect: - createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, ANIM_ATTACKER, 0 return @@ -2083,12 +16006,12 @@ Move_MEAN_LOOK: loadspritegfx ANIM_TAG_EYE monbg ANIM_DEF_PARTNER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 16, RGB_BLACK loopsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_TARGET, 15, 4 waitplaysewithpan SE_M_LEER, SOUND_PAN_TARGET, 85 createsprite gMeanLookEyeSpriteTemplate, ANIM_ATTACKER, 2 delay 120 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK delay 30 clearmonbg ANIM_DEF_PARTNER waitforvisualfinish @@ -2190,7 +16113,7 @@ Move_BUBBLE_BEAM: loadspritegfx ANIM_TAG_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 delay 1 call BulbblebeamCreateBubbles @@ -2228,13 +16151,13 @@ Move_ICY_WIND: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_ICE_SPIKES monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 10, 11, 4, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_ATK_SIDE, 4, 0, 4, RGB_BLACK fadetobg BG_ICE waitbgfadeout playsewithpan SE_M_ICY_WIND, 0 waitbgfadein waitforvisualfinish - panse_1B SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 call IcyWindSwirlingSnowballs delay 5 call IcyWindSwirlingSnowballs @@ -2245,7 +16168,7 @@ Move_ICY_WIND: clearmonbg ANIM_DEF_PARTNER restorebg waitbgfadeout - createvisualtask AnimTask_BlendBattleAnimPal, 10, 11, 4, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_ATK_SIDE, 4, 4, 0, RGB_BLACK waitbgfadein end IcyWindSwirlingSnowballs: @@ -2287,7 +16210,7 @@ Move_SMOKESCREEN: Move_CONVERSION: loadspritegfx ANIM_TAG_CONVERSION monbg ANIM_ATK_PARTNER - monbgprio_28 ANIM_ATTACKER + splitbgprio ANIM_ATTACKER setalpha 16, 0 delay 0 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER @@ -2339,7 +16262,7 @@ Move_CONVERSION: Move_CONVERSION_2: loadspritegfx ANIM_TAG_CONVERSION monbg ANIM_DEF_PARTNER - monbgprio_2A ANIM_TARGET + splitbgprio_foes ANIM_TARGET setalpha 0, 16 delay 0 playsewithpan SE_M_BARRIER, SOUND_PAN_TARGET @@ -2440,7 +16363,7 @@ Move_HORN_ATTACK: Move_FURY_ATTACK: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT - createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 256, 0, 2 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 256, ANIM_ATTACKER, 2 choosetwoturnanim FuryAttackRight, FuryAttackLeft FuryAttackContinue: createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 @@ -2551,7 +16474,7 @@ Move_SING: monbg ANIM_DEF_PARTNER createvisualtask AnimTask_MusicNotesRainbowBlend, 2 waitforvisualfinish - panse_1B SE_M_SING, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_SING, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 7, 0, 12 delay 5 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 6, 1, 12 @@ -2589,7 +16512,7 @@ Move_LOW_KICK: createsprite gSlidingKickSpriteTemplate, ANIM_TARGET, 2, -24, 28, 40, 8, 160, 0 delay 4 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 8, ANIM_TARGET, 2 - createvisualtask AnimTask_RotateMonSpriteToSide, 2, 6, 384, 1, 2 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 6, 384, ANIM_TARGET, 2 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 @@ -2600,9 +16523,9 @@ Move_EARTHQUAKE: createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 50 playsewithpan SE_M_EARTHQUAKE, 0 delay 10 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, 0x7FFF, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 delay 16 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, 0x7FFF, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 end Move_FISSURE: @@ -2613,11 +16536,11 @@ Move_FISSURE: delay 8 call FissureDirtPlumeFar delay 15 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, 0x7FFF, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 delay 15 call FissureDirtPlumeClose delay 15 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, 0x7FFF, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 delay 15 call FissureDirtPlumeFar delay 50 @@ -2657,7 +16580,7 @@ DigSetUp: loadspritegfx ANIM_TAG_DIRT_MOUND createsprite gDirtMoundSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, 180 createsprite gDirtMoundSpriteTemplate, ANIM_ATTACKER, 1, 0, 1, 180 - monbg_22 ANIM_ATTACKER + monbg_static ANIM_ATTACKER delay 1 createvisualtask AnimTask_DigDownMovement, 2, FALSE delay 6 @@ -2667,7 +16590,7 @@ DigSetUp: call DigThrowDirt call DigThrowDirt waitforvisualfinish - clearmonbg_23 ANIM_ATTACKER + clearmonbg_static ANIM_ATTACKER delay 1 createvisualtask AnimTask_DigDownMovement, 2, TRUE goto DigEnd @@ -2703,7 +16626,7 @@ Move_MEDITATE: delay 16 playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER waitforvisualfinish - call UnsetPsychicBackground + call UnsetPsychicBg end Move_AGILITY: @@ -2770,7 +16693,7 @@ Move_TELEPORT: createvisualtask AnimTask_Teleport, 2 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER delay 15 - call UnsetPsychicBackground + call UnsetPsychicBg waitforvisualfinish end @@ -2834,7 +16757,7 @@ SkullBashSetUpHeadDown: createsprite gSlideMonToOffsetAndBackSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, -24, 0, 0, 10, 0 playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_RotateMonSpriteToSide, 2, 16, 96, 0, 2 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 16, 96, ANIM_ATTACKER, 2 waitforvisualfinish createsprite gSlideMonToOffsetAndBackSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 10, 1 waitforvisualfinish @@ -2845,7 +16768,7 @@ SkullBashAttack: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER waitforvisualfinish playse SE_BANG - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, 0x7FFF, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 40, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 0 @@ -2863,7 +16786,7 @@ Move_AMNESIA: delay 54 loopsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER, 16, 3 waitforvisualfinish - call UnsetPsychicBackground + call UnsetPsychicBg end Move_KINESIS: @@ -2882,7 +16805,7 @@ Move_KINESIS: delay 70 playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER waitforvisualfinish - call UnsetPsychicBackground + call UnsetPsychicBg end Move_GLARE: @@ -2891,7 +16814,7 @@ Move_GLARE: createvisualtask AnimTask_GlareEyeDots, 5, 0 playsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 5, 1, 0, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 0, 16, RGB_BLACK waitforvisualfinish createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, -16, -8 createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, 16, -8 @@ -2900,7 +16823,7 @@ Move_GLARE: delay 2 createvisualtask AnimTask_ShakeTargetInPattern, 3, 20, 1, FALSE waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 5, 1, 0, 16, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 16, 0, RGB_BLACK end Move_BARRAGE: @@ -2925,17 +16848,17 @@ SkyAttackSetUp: jumpretfalse SkyAttackSetUpAgainstOpponent goto SkyAttackSetUpAgainstPartner SkyAttackSetUpAgainstOpponent: - createvisualtask AnimTask_BlendBattleAnimPal, 10, 27, 1, 0, 12, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER, 1, 0, 12, RGB_BLACK waitforvisualfinish delay 12 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 8, 0, RGB_BLACK createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATTACKER, 2, 16 loopsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER, 4, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 0, 15, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 15, RGB_WHITE delay 20 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 15, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 15, 0, RGB_WHITE waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 25, 1, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_ATK_PARTNER | F_PAL_DEF_PARTNER, 1, 8, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -2944,13 +16867,13 @@ SkyAttackSetUpAgainstPartner: createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, ANIM_TARGET, 1, 0, 12, RGB_BLACK waitforvisualfinish delay 12 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 8, 0, RGB_BLACK createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATTACKER, 2, 16 playsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER delay 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 0, 15, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 15, RGB_WHITE delay 20 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 15, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 15, 0, RGB_WHITE waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 4, 1, 8, 0, RGB_BLACK waitforvisualfinish @@ -2962,7 +16885,7 @@ SkyAttackUnleash: loadspritegfx ANIM_TAG_BIRD call SetSkyBg monbg ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 0, 16, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE delay 4 createvisualtask AnimTask_AttackerFadeToInvisible, 5, 0 waitforvisualfinish @@ -2974,7 +16897,7 @@ SkyAttackUnleash: delay 20 createvisualtask AnimTask_AttackerFadeFromInvisible, 5, 1 delay 2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 15, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 15, 0, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATTACKER call UnsetSkyBg @@ -3024,7 +16947,7 @@ Move_SUPER_FANG: createsprite gSuperFangSpriteTemplate, ANIM_TARGET, 2 playsewithpan SE_M_BITE, SOUND_PAN_TARGET delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB(31, 2, 2), 14, 0x7FFF, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB(31, 2, 2), 14, RGB_WHITE, 14 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 7, 12, 1 waitforvisualfinish blendoff @@ -3112,7 +17035,7 @@ Move_SPITE: playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitbgfadein monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 6, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 6, 0, 8, RGB_WHITE createvisualtask AnimTask_SpiteTargetShadow, 2 loopsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET, 20, 3 waitforvisualfinish @@ -3121,17 +17044,31 @@ Move_SPITE: clearmonbg ANIM_TARGET end +SetHighSpeedBg: + createvisualtask AnimTask_GetAttackerSide, 2 + jumprettrue SetHighSpeedBgPlayer + fadetobg BG_HIGHSPEED_OPPONENT + goto SetHighSpeedBgFade +SetHighSpeedBgPlayer: + fadetobg BG_HIGHSPEED_PLAYER +SetHighSpeedBgFade: + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, -2304, 0, 1, -1 + waitbgfadein + return + +UnsetHighSpeedBg: + restorebg + waitbgfadeout + setarg 7, -1 + waitbgfadein + return + Move_MACH_PUNCH: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_ATK_PARTNER - createvisualtask AnimTask_GetAttackerSide, 2 - jumprettrue MachPunchAgainstPlayer - fadetobg BG_HIGHSPEED_OPPONENT -MachPunchContinue: - waitbgfadeout - createvisualtask AnimTask_StartSlidingBg, 5, -2304, 0, 1, -1 - waitbgfadein + call SetHighSpeedBg delay 0 setalpha 9, 8 createvisualtask AnimTask_AttackerPunchWithTrace, 2, RGB(8, 9, 28), 10 @@ -3144,19 +17081,13 @@ MachPunchContinue: waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff - restorebg - waitbgfadeout - setarg 7, 0xFFFF - waitbgfadein + call UnsetHighSpeedBg end -MachPunchAgainstPlayer: - fadetobg BG_HIGHSPEED_PLAYER - goto MachPunchContinue Move_FORESIGHT: loadspritegfx ANIM_TAG_MAGNIFYING_GLASS monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 16, 0 createsprite gForesightMagnifyingGlassSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET delay 17 @@ -3197,7 +17128,7 @@ Move_ENDURE: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_RED + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -3236,7 +17167,7 @@ Move_ROLLOUT: loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_ROCKS monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 createvisualtask AnimTask_Rollout, 2 waitforvisualfinish @@ -3331,9 +17262,9 @@ MagnitudeIntense: createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 0, 50 loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 10 delay 10 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, 0x7FFF, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 delay 16 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, 0x7FFF, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 goto MagnitudeEnd Move_RAPID_SPIN: @@ -3360,7 +17291,7 @@ Move_MOONLIGHT: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR setalpha 0, 16 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 16, RGB_BLACK waitforvisualfinish createsprite gMoonSpriteTemplate, ANIM_ATTACKER, 2, 120, 56 createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 @@ -3385,13 +17316,7 @@ Move_MOONLIGHT: Move_EXTREME_SPEED: loadspritegfx ANIM_TAG_SPEED_DUST loadspritegfx ANIM_TAG_IMPACT - createvisualtask AnimTask_GetAttackerSide, 2 - jumprettrue ExtremeSpeedAgainstPlayer - fadetobg BG_HIGHSPEED_OPPONENT -ExtremeSpeedContinue: - waitbgfadeout - createvisualtask AnimTask_StartSlidingBg, 5, -2304, 0, 1, -1 - waitbgfadein + call SetHighSpeedBg createvisualtask AnimTask_AttackerStretchAndDisappear, 2 loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 3 waitforvisualfinish @@ -3416,19 +17341,13 @@ ExtremeSpeedContinue: createvisualtask AnimTask_ExtremeSpeedMonReappear, 2 loopsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 8, 4 waitforvisualfinish - restorebg - waitbgfadeout - setarg 7, 0xFFFF - waitbgfadein + call UnsetHighSpeedBg clearmonbg ANIM_TARGET blendoff delay 1 setarg 7, 0x1000 delay 1 end -ExtremeSpeedAgainstPlayer: - fadetobg BG_HIGHSPEED_PLAYER - goto ExtremeSpeedContinue Move_UPROAR: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @@ -3460,7 +17379,7 @@ Move_HEAT_WAVE: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 6, 6, RGB_RED createvisualtask AnimTask_LoadSandstormBackground, 5, TRUE createvisualtask AnimTask_BlendBackground, 6, 6, RGB_RED - panse_1B SE_M_HEAT_WAVE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_HEAT_WAVE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 delay 4 createvisualtask AnimTask_MoveHeatWaveTargets, 5 delay 12 @@ -3483,12 +17402,12 @@ Move_HEAT_WAVE: Move_HAIL: loadspritegfx ANIM_TAG_HAIL loadspritegfx ANIM_TAG_ICE_CRYSTALS - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 3, 0, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_Hail, 5 loopsewithpan SE_M_HAIL, 0, 8, 10 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 3, 6, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK end Move_TORMENT: @@ -3514,15 +17433,15 @@ Move_MEMENTO: delay 48 playsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask sub_8114470, 2 + createvisualtask AnimTask_MementoHandleBg, 2 delay 12 setalpha 0, 16 delay 1 - monbg_22 ANIM_TARGET + monbg_static ANIM_TARGET createvisualtask AnimTask_MoveTargetMementoShadow, 5 playsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET waitforvisualfinish - clearmonbg_23 ANIM_TARGET + clearmonbg_static ANIM_TARGET delay 1 blendoff delay 1 @@ -3535,7 +17454,7 @@ Move_FACADE: loopsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 24, 3 end -Move_SMELLING_SALT: +Move_SMELLING_SALTS: loadspritegfx ANIM_TAG_TAG_HAND loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT createsprite gSmellingSaltsHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 2 @@ -3566,7 +17485,7 @@ Move_CHARGE: loadspritegfx ANIM_TAG_ELECTRICITY monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 60, 2, 12 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER @@ -3590,7 +17509,7 @@ Move_CHARGE: createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0, -16, -16 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB_BLACK clearmonbg ANIM_ATTACKER blendoff end @@ -3654,7 +17573,7 @@ Move_SUPERPOWER: loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK monbg ANIM_ATK_PARTNER - monbgprio_28 ANIM_ATTACKER + splitbgprio ANIM_ATTACKER setalpha 12, 8 createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 2, ANIM_ATTACKER playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -3720,13 +17639,13 @@ BrickBreakNormal: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET delay 20 createvisualtask AnimTask_WindUpLunge, 2, ANIM_ATTACKER, -24, 0, 24, 10, 24, 3 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 6, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 6, RGB_BLACK delay 37 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 10, 1, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 6, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 6, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET end @@ -3746,7 +17665,7 @@ BrickBreakShatteredWall: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET delay 20 createvisualtask AnimTask_WindUpLunge, 2, ANIM_ATTACKER, -24, 0, 24, 10, 24, 3 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 6, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 6, RGB_BLACK delay 37 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 10, 1, 0 @@ -3758,7 +17677,7 @@ BrickBreakShatteredWall: createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 3, 8, 12 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 6, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 6, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET end @@ -3797,7 +17716,7 @@ Move_ENDEAVOR: Move_ERUPTION: loadspritegfx ANIM_TAG_WARM_ROCK - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 2, 0, 4, RGB_RED + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 2, 0, 4, RGB_RED waitforvisualfinish createvisualtask AnimTask_EruptionLaunchRocks, 2 waitplaysewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER, 60 @@ -3817,7 +17736,7 @@ Move_ERUPTION: createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 8, 60 loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 16, 12 delay 80 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, 31, 4, 4, 0, RGB_RED + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, F_PAL_BG | F_PAL_BATTLERS, 4, 4, 0, RGB_RED end Move_SKILL_SWAP: @@ -3830,7 +17749,7 @@ Move_SKILL_SWAP: createvisualtask AnimTask_SkillSwap, 3, ANIM_ATTACKER createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB_WHITE, 12, 3, 1 waitforvisualfinish - call UnsetPsychicBackground + call UnsetPsychicBg end Move_IMPRISON: @@ -3847,13 +17766,13 @@ Move_IMPRISON: createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 1, 10 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_ATTACKER clearmonbg ANIM_DEF_PARTNER - call UnsetPsychicBackground + call UnsetPsychicBg end Move_GRUDGE: loadspritegfx ANIM_TAG_PURPLE_FLAME monbg ANIM_ATTACKER - monbgprio_29 + splitbgprio_all fadetobg BG_GHOST playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitbgfadein @@ -3870,15 +17789,15 @@ Move_GRUDGE: Move_CAMOUFLAGE: monbg ANIM_ATK_PARTNER - monbgprio_28 ANIM_ATTACKER + splitbgprio ANIM_ATTACKER setalpha 16, 0 - createvisualtask AnimTask_SetCamouflageBlend, 5, 2, 3, 0, 14 + createvisualtask AnimTask_SetCamouflageBlend, 5, F_PAL_ATTACKER, 3, 0, 14 delay 16 createvisualtask AnimTask_AttackerFadeToInvisible, 2, 4 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER waitforvisualfinish delay 8 - createvisualtask AnimTask_SetCamouflageBlend, 5, 2, 0, 0, 0 + createvisualtask AnimTask_SetCamouflageBlend, 5, F_PAL_ATTACKER, 0, 0, 0 waitforvisualfinish createvisualtask AnimTask_AttackerFadeFromInvisible, 2, 1 waitforvisualfinish @@ -3890,13 +17809,13 @@ Move_TAIL_GLOW: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK waitforvisualfinish createsprite gTailGlowOrbSpriteTemplate, ANIM_ATTACKER, 66, ANIM_ATTACKER delay 18 loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER, 16, 6 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB_BLACK clearmonbg ANIM_ATTACKER blendoff delay 1 @@ -3942,7 +17861,7 @@ Move_LUSTER_PURGE: waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff - call UnsetPsychicBackground + call UnsetPsychicBg end Move_MIST_BALL: @@ -3954,21 +17873,21 @@ Move_MIST_BALL: waitforvisualfinish playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 10, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 1, 1, RGB(23, 16, 31), 16, 0x7FFF, 16 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 1, 1, RGB(23, 16, 31), 16, RGB_WHITE, 16 delay 0 playsewithpan SE_M_HAZE, 0 - createvisualtask AnimTask_LoadMistTiles, 5 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 3, 0, 16, RGB_WHITE + createvisualtask AnimTask_MistBallFog, 5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 3, 0, 16, RGB_WHITE delay 8 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 4, 0, 70, 0 delay 70 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 16, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB_WHITE end Move_FEATHER_DANCE: loadspritegfx ANIM_TAG_WHITE_FEATHER monbg ANIM_DEF_PARTNER - monbgprio_29 + splitbgprio_all playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_TARGET delay 0 createsprite gFallingFeatherSpriteTemplate, ANIM_TARGET, 0, 0, -16, 64, 2, 104, 11304, 32, 1 @@ -4132,7 +18051,7 @@ Move_AROMATHERAPY: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 0, 0, 7, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 0, 0, 7, RGB(13, 31, 12) delay 1 monbg ANIM_ATTACKER delay 1 @@ -4150,7 +18069,7 @@ Move_AROMATHERAPY: waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 0, 7, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 0, 7, 0, RGB(13, 31, 12) delay 1 playsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER createvisualtask AnimTask_StatusClearedEffect, 2, 1 @@ -4161,7 +18080,7 @@ Move_AROMATHERAPY: createsprite gSparklingStarsSpriteTemplate, ANIM_ATTACKER, 16, 12, -5, 0, 0, 32, 60, 1 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 43, 3, 10, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_ANIM_1, 3, 10, 0, RGB(13, 31, 12) createsprite gBlendThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 16, 0, 0, 0, 1 waitforvisualfinish end @@ -4222,17 +18141,17 @@ Move_ODOR_SLEUTH: waitforvisualfinish clearmonbg ANIM_TARGET delay 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_WHITEALPHA, 16, -1, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_WHITEALPHA, 16, RGB_WHITEALPHA, 0 playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER end Move_GRASS_WHISTLE: loadspritegfx ANIM_TAG_MUSIC_NOTES - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, RGB(18, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB(18, 31, 12) waitforvisualfinish createvisualtask AnimTask_MusicNotesRainbowBlend, 2 waitforvisualfinish - panse_1B SE_M_GRASSWHISTLE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_GRASSWHISTLE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 7, 1, 0 delay 5 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 6, 1, 0 @@ -4259,19 +18178,19 @@ Move_GRASS_WHISTLE: delay 4 waitforvisualfinish createvisualtask AnimTask_MusicNotesClearRainbowBlend, 2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, RGB(18, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB(18, 31, 12) waitforvisualfinish end Move_TICKLE: loadspritegfx ANIM_TAG_EYE_SPARKLE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 0, 16, RGB_BLACK waitforvisualfinish createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, -16, -8 createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, 16, -8 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 16, 0, RGB_BLACK waitforvisualfinish delay 20 createvisualtask AnimTask_SwayMon, 3, 0, 6, 1280, 3, ANIM_ATTACKER @@ -4337,7 +18256,7 @@ Move_EXTRASENSORY: waitforvisualfinish blendoff clearmonbg ANIM_DEF_PARTNER - call UnsetPsychicBackground + call UnsetPsychicBg end Move_AERIAL_ACE: @@ -4350,7 +18269,7 @@ Move_AERIAL_ACE: playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 10, RGB_BLACK, 0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -4360,7 +18279,7 @@ Move_AERIAL_ACE: Move_IRON_DEFENSE: loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 8, 2, RGB_WHITEALPHA, 14, -1, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 2, RGB_WHITEALPHA, 14, RGB_WHITEALPHA, 0 waitforvisualfinish end @@ -4413,7 +18332,7 @@ Move_VOLT_TACKLE: loadspritegfx ANIM_TAG_ELECTRICITY monbg ANIM_ATTACKER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 0, 8, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 8, RGB_BLACK waitforvisualfinish createsprite gVoltTackleOrbSlideSpriteTemplate, ANIM_ATTACKER, 1 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER @@ -4450,7 +18369,7 @@ Move_VOLT_TACKLE: delay 2 createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0, -16, -16 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 8, 0, RGB_BLACK waitforvisualfinish end @@ -4464,7 +18383,7 @@ Move_WATER_SPORT: delay 44 playsewithpan SE_M_SURF, SOUND_PAN_ATTACKER delay 44 - panse_1B SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 end Move_CALM_MIND: @@ -4518,7 +18437,7 @@ Move_LEAF_BLADE: Move_DRAGON_DANCE: loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER - monbgprio_28 ANIM_ATTACKER + splitbgprio ANIM_ATTACKER delay 1 createvisualtask AnimTask_DragonDanceWaver, 5 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER @@ -4546,24 +18465,24 @@ Move_SHOCK_WAVE: loadspritegfx ANIM_TAG_LIGHTNING monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 20, 0, 2 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 12 createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 delay 30 - createvisualtask AnimTask_ShockWaveProgressingBolt, 5 + createvisualtask AnimTask_ShockWaveProgressingBolt, 5, ANIM_TARGET delay 12 waitforvisualfinish - createvisualtask AnimTask_ShockWaveLightning, 5 + createvisualtask AnimTask_ShockWaveLightning, 5, ANIM_TARGET playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 5, 1, 3, 16, 0, RGB_WHITE - createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 16, 16, RGB_BLACK + 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, 4, 0, 0, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_TARGET, 0, 0, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff @@ -4628,7 +18547,7 @@ Move_MIND_READER: createsprite gWhiteHaloSpriteTemplate, ANIM_ATTACKER, 5 delay 40 playsewithpan SE_M_LEER, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, 1, 1, 2, 0, 10, RGB_BLACK + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG, 1, 2, 0, 10, RGB_BLACK call MindReaderEyeSpikeEffect waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -4664,8 +18583,8 @@ Move_ICE_PUNCH: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB(12, 26, 31) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(12, 26, 31) delay 20 playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 0 @@ -4687,9 +18606,9 @@ Move_ICE_PUNCH: delay 15 call IceCrystalEffectShort delay 5 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 9, 0, RGB(12, 26, 31) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(12, 26, 31) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 7, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -4711,7 +18630,7 @@ Move_CONFUSION: call SetPsychicBackground setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE waitforvisualfinish playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 15, 1 @@ -4720,7 +18639,7 @@ Move_CONFUSION: clearmonbg ANIM_DEF_PARTNER blendoff delay 1 - call UnsetPsychicBackground + call UnsetPsychicBg end Move_PSYCHIC: @@ -4728,7 +18647,7 @@ Move_PSYCHIC: call SetPsychicBackground setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB(31, 23, 0) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB(31, 23, 0) waitforvisualfinish loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 15, 1 @@ -4737,7 +18656,7 @@ Move_PSYCHIC: clearmonbg ANIM_DEF_PARTNER blendoff delay 1 - call UnsetPsychicBackground + call UnsetPsychicBg end Move_FUTURE_SIGHT: @@ -4745,7 +18664,7 @@ Move_FUTURE_SIGHT: FutureSightContinue: waitforvisualfinish delay 1 - call UnsetPsychicBackground + call UnsetPsychicBg end FutureSight: monbg ANIM_ATK_PARTNER @@ -4753,7 +18672,7 @@ FutureSight: call SetPsychicBackground setalpha 8, 8 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, ANIM_ATTACKER, 1 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -4766,9 +18685,9 @@ Move_THUNDER: waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 5, -256, 0, 1, -1 waitbgfadein - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK delay 16 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 16, -36 @@ -4785,7 +18704,7 @@ Move_THUNDER: createsprite gLightningSpriteTemplate, ANIM_TARGET, 6, -16, 16 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET delay 5 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 24, -32 delay 1 @@ -4793,9 +18712,9 @@ Move_THUNDER: delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 24, 16 delay 30 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 5 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -32 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET @@ -4804,13 +18723,13 @@ Move_THUNDER: delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 delay 10 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 1 createvisualtask AnimTask_ShakeTargetInPattern, 2, 30, 3, TRUE, 0 delay 2 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, 1, 2, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK waitforvisualfinish restorebg waitbgfadeout @@ -4824,13 +18743,13 @@ Move_THUNDER_PUNCH: loadspritegfx ANIM_TAG_LIGHTNING monbg ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK waitforvisualfinish playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 delay 1 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48 delay 1 @@ -4839,12 +18758,12 @@ Move_THUNDER_PUNCH: createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, 16 delay 1 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK delay 20 waitforvisualfinish clearmonbg ANIM_TARGET @@ -4867,12 +18786,12 @@ Move_SACRED_FIRE: delay 1 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 20, 10, 50, 5, 1, 1 delay 1 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 1 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 16, 50, 5, 0, 1 delay 1 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -20, 10, 50, 5, -1, 1 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 1 waitforvisualfinish playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET @@ -4884,10 +18803,10 @@ Move_SACRED_FIRE: playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET createsprite gLargeFlameSpriteTemplate, ANIM_TARGET, 2, 16, 0, 80, 16, 0, 1 delay 1 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 1 waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 1 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 30, -1, 0 @@ -4924,13 +18843,13 @@ Move_SCRATCH: Move_DRAGON_BREATH: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 7, 7 createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 delay 2 createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 delay 2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 0, 9, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 9, RGB_RED createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 delay 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 21, 1 @@ -4950,7 +18869,7 @@ Move_DRAGON_BREATH: delay 2 createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 9, 0, RGB_RED waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -4958,9 +18877,9 @@ Move_DRAGON_BREATH: Move_ROAR: loadspritegfx ANIM_TAG_NOISE_LINE monbg ANIM_ATTACKER - monbgprio_28 ANIM_ATTACKER + splitbgprio ANIM_ATTACKER setalpha 8, 8 - createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 2 + createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_ROAR createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, ANIM_ATTACKER, 1 call RoarEffect delay 20 @@ -4985,7 +18904,7 @@ RoarEffect: Move_GROWL: loadspritegfx ANIM_TAG_NOISE_LINE - createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 255 + createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL call RoarEffect delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 9, 1 @@ -5030,17 +18949,17 @@ Move_LIGHT_SCREEN: end SpecialScreenSparkle: - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 23, 0, ANIM_ATTACKER, 1 + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 23, 0, ANIM_ATTACKER, TRUE delay 6 - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 31, -8, ANIM_ATTACKER, 1 + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 31, -8, ANIM_ATTACKER, TRUE delay 5 - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 30, 20, ANIM_ATTACKER, 1 + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 30, 20, ANIM_ATTACKER, TRUE delay 7 - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, -15, ANIM_ATTACKER, 1 + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, -15, ANIM_ATTACKER, TRUE delay 6 - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 20, 10, ANIM_ATTACKER, 1 + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 20, 10, ANIM_ATTACKER, TRUE delay 6 - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 18, ANIM_ATTACKER, 1 + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 18, ANIM_ATTACKER, TRUE return Move_MIRROR_COAT: @@ -5063,11 +18982,11 @@ Move_REFLECT: waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 15 createsprite gReflectWallSpriteTemplate, ANIM_ATTACKER, 1, 40, 0, ANIM_TAG_BLUE_LIGHT_WALL delay 20 - createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 30, 0, ANIM_ATTACKER, 1 + createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 30, 0, ANIM_ATTACKER, TRUE delay 7 - createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 19, -12, ANIM_ATTACKER, 1 + createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 19, -12, ANIM_ATTACKER, TRUE delay 7 - createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 20, ANIM_ATTACKER, 1 + createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 20, ANIM_ATTACKER, TRUE waitforvisualfinish delay 1 blendoff @@ -5122,7 +19041,7 @@ Move_BUBBLE: Move_SMOG: loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD monbg ANIM_DEF_PARTNER - monbgprio_29 + splitbgprio_all setalpha 12, 8 loopsewithpan SE_M_MIST, SOUND_PAN_TARGET, 17, 10 call SmogCloud @@ -5134,7 +19053,7 @@ Move_SMOG: call SmogCloud delay 120 loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 18, 2 - createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(26, 0, 26) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(26, 0, 26) delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 15, 1 waitforvisualfinish @@ -5185,7 +19104,7 @@ Move_FAINT_ATTACK: Move_SAND_ATTACK: loadspritegfx ANIM_TAG_MUD_SAND monbg ANIM_ATK_PARTNER - monbgprio_28 ANIM_ATTACKER + splitbgprio ANIM_ATTACKER setalpha 12, 8 playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 0, 0, 3 @@ -5268,14 +19187,14 @@ Move_DRAGON_RAGE: Move_RAIN_DANCE: loadspritegfx ANIM_TAG_RAIN_DROPS playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 2, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 0, 4, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120 createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120 delay 120 delay 30 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 2, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 4, 0, RGB_BLACK waitforvisualfinish end @@ -5343,10 +19262,10 @@ Move_CLAMP: Move_ICE_BEAM: monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK waitforvisualfinish createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_BUBBLE_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 4, 4, 0, 10 createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 20, 12, 0, 12, 20 @@ -5355,7 +19274,7 @@ Move_ICE_BEAM: call IceBeamCreateCrystals call IceBeamCreateCrystals call IceBeamCreateCrystals - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, -31, 0, 7, RGB(0, 20, 31) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, -31, 0, 7, RGB(0, 20, 31) createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 25, 1 call IceBeamCreateCrystals call IceBeamCreateCrystals @@ -5371,9 +19290,9 @@ Move_ICE_BEAM: waitforvisualfinish delay 20 call IceCrystalEffectShort - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, 5, 7, 0, RGB(0, 20, 31) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 5, 7, 0, RGB(0, 20, 31) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 7, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -5436,7 +19355,7 @@ SolarBeamEnd: SolarBeamSetUp: monbg ANIM_ATK_PARTNER setalpha 12, 8 - createvisualtask AnimTask_BlendColorCycle, 2, 2, 1, 4, 0, 11, RGB(31, 31, 11) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 1, 4, 0, 11, RGB(31, 31, 11) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call SolarBeamAbsorbEffect waitforvisualfinish @@ -5474,60 +19393,54 @@ SolarBeamAbsorbEffect: delay 2 return SolarBeamUnleash: - call SetSolarbeamBg - panse_1B SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 - createvisualtask AnimTask_CreateSmallSolarbeamOrbs, 5 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0 + call SetSolarBeamBg + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + createvisualtask AnimTask_CreateSmallSolarBeamOrbs, 5 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0 delay 4 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1 delay 4 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 0, 10, RGB(25, 31, 0) - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 10, RGB(25, 31, 0) + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2 delay 4 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 65, 1 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 3 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 3 delay 4 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 4 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 4 delay 4 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 5 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 5 delay 4 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 6 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 6 delay 4 call SolarBeamUnleash1 call SolarBeamUnleash1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 10, 0, RGB(25, 31, 0) - call UnsetSolarbeamBg + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 10, 0, RGB(25, 31, 0) + call UnsetSolarBeamBg goto SolarBeamEnd SolarBeamUnleash1: - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0 delay 4 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1 delay 4 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2 delay 4 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 3 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 3 delay 4 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 4 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 4 delay 4 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 5 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 5 delay 4 - createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 6 + createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 6 delay 4 return Move_BLIZZARD: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_GetAttackerSide, 2 - jumprettrue BlizzardAgainstPlayer - fadetobg BG_HIGHSPEED_OPPONENT -BlizzardContinue: - waitbgfadeout - createvisualtask AnimTask_StartSlidingBg, 5, -2304, 0, 1, -1 - waitbgfadein + call SetHighSpeedBg waitforvisualfinish - panse_1B SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 call BlizzardIceCrystals call BlizzardIceCrystals playsewithpan SE_M_BLIZZARD2, SOUND_PAN_TARGET @@ -5535,10 +19448,7 @@ BlizzardContinue: call IceCrystalEffectLong waitforvisualfinish delay 20 - restorebg - waitbgfadeout - setarg 7, 0xFFFF - waitbgfadein + call UnsetHighSpeedBg clearmonbg ANIM_DEF_PARTNER end BlizzardIceCrystals: @@ -5564,16 +19474,13 @@ BlizzardIceCrystals: createsprite gBlizzardIceCrystalSpriteTemplate, ANIM_ATTACKER, 40, 0, 20, 0, 20, 80, 0, 0, 1 delay 3 return -BlizzardAgainstPlayer: - fadetobg BG_HIGHSPEED_PLAYER - goto BlizzardContinue Move_POWDER_SNOW: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 1, 0, 3, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 0, 3, RGB_BLACK waitforvisualfinish - panse_1B SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 call PowderSnowSnowballs call PowderSnowSnowballs playsewithpan SE_M_GUST2, SOUND_PAN_TARGET @@ -5583,7 +19490,7 @@ Move_POWDER_SNOW: waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 20 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 1, 3, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 3, 0, RGB_BLACK end PowderSnowSnowballs: createsprite gPowderSnowSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 0, 0, 56, 4, 4, 1 @@ -5606,11 +19513,11 @@ Move_HYDRO_PUMP: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1 delay 6 - panse_1B SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 createvisualtask AnimTask_StartSinAnimTimer, 5, 100 call HydroPumpBeams call HydroPumpBeams @@ -5655,7 +19562,7 @@ Move_SIGNAL_BEAM: loadspritegfx ANIM_TAG_DUCK createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 25, 1 delay 6 - panse_1B SE_M_BUBBLE_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0 + panse SE_M_BUBBLE_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0 createvisualtask AnimTask_StartSinAnimTimer, 5, 100 call SignalBeamOrbs call SignalBeamOrbs @@ -5664,7 +19571,7 @@ Move_SIGNAL_BEAM: call SignalBeamOrbs call SignalBeamOrbs createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 25, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, 8, 5, RGB_RED, 8, 961, 8 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 8, 5, RGB_RED, 8, RGB(1, 30, 0), 8 call SignalBeamOrbs call SignalBeamOrbs call SignalBeamOrbs @@ -5695,9 +19602,9 @@ Move_ABSORB: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_2A ANIM_TARGET + splitbgprio_foes ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 4, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 4, RGB(13, 31, 12) waitforvisualfinish playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 @@ -5710,7 +19617,7 @@ Move_ABSORB: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 4, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 4, 0, RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5748,9 +19655,9 @@ Move_MEGA_DRAIN: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_2A ANIM_TARGET + splitbgprio_foes ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 8, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 8, RGB(13, 31, 12) waitforvisualfinish playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 @@ -5763,7 +19670,7 @@ Move_MEGA_DRAIN: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 8, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 8, 0, RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5809,9 +19716,9 @@ Move_GIGA_DRAIN: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_2A ANIM_TARGET + splitbgprio_foes ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 12, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 12, RGB(13, 31, 12) waitforvisualfinish playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 @@ -5824,7 +19731,7 @@ Move_GIGA_DRAIN: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 12, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 12, 0, RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5880,7 +19787,7 @@ Move_LEECH_LIFE: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_2A ANIM_TARGET + splitbgprio_foes ANIM_TARGET setalpha 12, 8 delay 1 createsprite gLeechLifeNeedleSpriteTemplate, ANIM_ATTACKER, 2, -20, 15, 12 @@ -5890,14 +19797,14 @@ Move_LEECH_LIFE: delay 2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK waitforvisualfinish call AbsorbEffect waitforvisualfinish delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 7, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5905,7 +19812,7 @@ Move_LEECH_LIFE: Move_SYNTHESIS: loadspritegfx ANIM_TAG_SPARKLE_2 - createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 16, RGB(27, 31, 18) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 16, RGB(27, 31, 18) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call GrantingStarsEffect waitforvisualfinish @@ -5947,7 +19854,7 @@ Move_SLUDGE: createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1 - createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 2, 0, 12, RGB(30, 0, 31) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(30, 0, 31) call PoisonBubblesEffect waitforvisualfinish end @@ -5965,7 +19872,7 @@ Move_SLUDGE_BOMB: call SludgeBombProjectile call SludgeBombProjectile createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 - createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 2, 0, 12, RGB(30, 0, 31) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(30, 0, 31) createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 @@ -5998,31 +19905,31 @@ SludgeBombProjectile: Move_ACID: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER - createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0 + createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, TRUE playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 5 - createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 24, 0 + createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 24, 0, TRUE playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 5 - createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, -24, 0 + createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, -24, 0, TRUE playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 15 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_DEF_PARTNER, 2, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, 20, 2, 2, 0, 12, RGB(30, 0, 31) - createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -22, 0, 15, 55 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 2, 2, 0, 12, RGB(30, 0, 31) + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -22, 0, 15, 55, TRUE playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 10 - createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, -26, -24, 0, 15, 55 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, -26, -24, 0, 15, 55, TRUE playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 10 - createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 15, -27, 0, 15, 50 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 15, -27, 0, 15, 50, TRUE playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 10 - createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, -15, -17, 0, 10, 45 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, -15, -17, 0, 10, 45, TRUE playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 10 - createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 27, -22, 0, 15, 50 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 27, -22, 0, 15, 50, TRUE playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -6032,7 +19939,7 @@ Move_BONEMERANG: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_BONEMERANG, SOUND_PAN_ATTACKER createsprite gBonemerangSpriteTemplate, ANIM_ATTACKER, 2 @@ -6052,14 +19959,14 @@ Move_BONE_CLUB: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_BONEMERANG, SOUND_PAN_TARGET createsprite gSpinningBoneSpriteTemplate, ANIM_ATTACKER, 2, -42, -25, 0, 0, 15 delay 12 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 7, 5, 1, RGB_BLACK, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 5, 1, RGB_BLACK, 10, RGB_BLACK, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -6123,7 +20030,7 @@ MegahornContinue: createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -16, 4, 1, 4 waitforvisualfinish createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, -4, 1, 12, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 7, 5, 1, RGB_WHITE, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 delay 10 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 11 delay 3 @@ -6146,7 +20053,7 @@ Move_GUST: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_GUST, SOUND_PAN_TARGET createsprite gEllipticalGustSpriteTemplate, ANIM_ATTACKER, 2, 0, -16 @@ -6164,7 +20071,7 @@ Move_WING_ATTACK: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 loopsewithpan SE_M_WING_ATTACK, SOUND_PAN_ATTACKER, 20, 2 createvisualtask AnimTask_TranslateMonElliptical, 2, 0, 12, 4, 1, 4 @@ -6197,7 +20104,7 @@ Move_AEROBLAST: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER call SetSkyBg - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 call AeroblastBeam createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 5, 0, 50, 1 @@ -6237,7 +20144,7 @@ Move_WATER_GUN: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 createsprite gWaterGunProjectileSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 0, 0, 40, -25 playsewithpan SE_M_BUBBLE, SOUND_PAN_ATTACKER @@ -6265,7 +20172,7 @@ Move_CRABHAMMER: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB(13, 21, 31), 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB(13, 21, 31), 10, RGB_BLACK, 0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -24, 0, 0, 4 waitforvisualfinish delay 8 @@ -6295,21 +20202,21 @@ Move_CRABHAMMER: end Move_SURF: - createvisualtask AnimTask_CreateSurfWave, 2, FALSE + createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SURF delay 24 - panse_1B SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 waitforvisualfinish end Move_FLAMETHROWER: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1 delay 6 createvisualtask AnimTask_StartSinAnimTimer, 5, 100 - panse_1B SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 call FlamethrowerCreateFlames call FlamethrowerCreateFlames call FlamethrowerCreateFlames @@ -6358,17 +20265,17 @@ Move_SANDSTORM: Move_WHIRLPOOL: loadspritegfx ANIM_TAG_WATER_ORB monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, RGB(0, 13, 23) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(0, 13, 23) playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 50, 1 call WhirlpoolEffect call WhirlpoolEffect call WhirlpoolEffect delay 12 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, RGB(0, 13, 23) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(0, 13, 23) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -6405,7 +20312,7 @@ FlyUnleash: monbg ANIM_DEF_PARTNER setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20 + createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE delay 20 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 @@ -6445,7 +20352,7 @@ Move_KARATE_CHOP: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 0, 0, 10, 1, 3, 0 @@ -6468,7 +20375,7 @@ Move_CROSS_CHOP: createsprite gCrossChopHandSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1 delay 40 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_WHITE, 10, 0, 10 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_WHITE, 10, RGB_BLACK, 10 createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 waitforvisualfinish @@ -6494,7 +20401,7 @@ Move_JUMP_KICK: blendoff end -Move_HI_JUMP_KICK: +Move_HIGH_JUMP_KICK: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -6720,15 +20627,15 @@ Move_SUNNY_DAY: loadspritegfx ANIM_TAG_SUNLIGHT monbg ANIM_ATK_PARTNER setalpha 13, 3 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 1, 0, 6, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 1, 0, 6, RGB_WHITE waitforvisualfinish - panse_26 SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0 + panse_adjustnone SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0 call SunnyDayLightRay call SunnyDayLightRay call SunnyDayLightRay call SunnyDayLightRay waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 1, 6, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 1, 6, 0, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -6742,7 +20649,7 @@ SunnyDayLightRay: Move_COTTON_SPORE: loadspritegfx ANIM_TAG_SPORE monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 18, 10 call CreateCottonSpores call CreateCottonSpores @@ -6928,7 +20835,7 @@ Move_MIST: call MistCloud call MistCloud delay 32 - createvisualtask AnimTask_BlendColorCycle, 2, 10, 8, 2, 0, 14, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATK_SIDE, 8, 2, 0, 14, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -6944,9 +20851,9 @@ Move_HAZE: playsewithpan SE_M_HAZE, 0 createvisualtask AnimTask_HazeScrollingFog, 5 delay 30 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x780, 2, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 2, 0, 16, RGB_BLACK delay 90 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x780, 1, 16, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 1, 16, 0, RGB_BLACK end Move_FIRE_PUNCH: @@ -6955,7 +20862,7 @@ Move_FIRE_PUNCH: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB_RED createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 0 createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 64 createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 128 @@ -6967,9 +20874,9 @@ Move_FIRE_PUNCH: createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 call FireSpreadEffect delay 4 - playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 9, 0, RGB_RED waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -6988,7 +20895,7 @@ FireSpreadEffect: Move_LEER: loadspritegfx ANIM_TAG_LEER monbg ANIM_ATTACKER - monbgprio_28 ANIM_ATTACKER + splitbgprio ANIM_ATTACKER setalpha 8, 8 playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 24, -12 @@ -7008,7 +20915,7 @@ Move_DREAM_EATER: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_DEF_PARTNER - monbgprio_2A ANIM_TARGET + splitbgprio_foes ANIM_TARGET playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER call SetPsychicBackground setalpha 8, 8 @@ -7026,7 +20933,7 @@ Move_DREAM_EATER: clearmonbg ANIM_DEF_PARTNER blendoff delay 1 - call UnsetPsychicBackground + call UnsetPsychicBg end DreamEaterAbsorb: playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET @@ -7076,7 +20983,7 @@ Move_POISON_GAS: loadspritegfx ANIM_TAG_POISON_BUBBLE delay 0 monbg ANIM_DEF_PARTNER - monbgprio_29 + splitbgprio_all setalpha 12, 8 delay 0 playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER @@ -7098,7 +21005,7 @@ Move_POISON_GAS: createsprite gPoisonGasCloudSpriteTemplate, ANIM_TARGET, 0, 64, 0, 0, -32, -6, 4192, 1072, 0 delay 40 loopsewithpan SE_M_MIST, SOUND_PAN_TARGET, 28, 6 - createvisualtask AnimTask_BlendColorCycle, 2, 4, 6, 2, 0, 12, RGB(26, 0, 26) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 6, 2, 0, 12, RGB(26, 0, 26) waitforvisualfinish blendoff clearmonbg ANIM_DEF_PARTNER @@ -7132,7 +21039,7 @@ Move_PSYBEAM: call PsybeamRings call PsybeamRings createvisualtask AnimTask_SwayMon, 5, 0, 6, 2048, 4, ANIM_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(31, 18, 31) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 18, 31) call PsybeamRings call PsybeamRings call PsybeamRings @@ -7144,7 +21051,7 @@ Move_PSYBEAM: call PsybeamRings waitforvisualfinish delay 1 - call UnsetPsychicBackground + call UnsetPsychicBg end PsybeamRings: createsprite gGoldRingSpriteTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 13, 0 @@ -7157,10 +21064,10 @@ Move_HYPNOSIS: call HypnosisRings call HypnosisRings call HypnosisRings - createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(31, 18, 31) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 18, 31) waitforvisualfinish delay 1 - call UnsetPsychicBackground + call UnsetPsychicBg end HypnosisRings: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER @@ -7177,14 +21084,14 @@ Move_PSYWAVE: createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_TELEPORT, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 9, 0, 10 call PsywaveRings call PsywaveRings - createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 4, 0, 12, RGB(31, 18, 31) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 4, 0, 12, RGB(31, 18, 31) call PsywaveRings call PsywaveRings call PsywaveRings call PsywaveRings waitforvisualfinish delay 1 - call UnsetPsychicBackground + call UnsetPsychicBg end PsywaveRings: createsprite gPsywaveRingSpriteTemplate, ANIM_TARGET, 3, 10, 10, 0, 16 @@ -7221,7 +21128,7 @@ Move_STEEL_WING: createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 waitforvisualfinish monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 loopsewithpan SE_M_WING_ATTACK, SOUND_PAN_ATTACKER, 20, 2 createvisualtask AnimTask_TranslateMonElliptical, 2, 0, 12, 4, 1, 4 @@ -7304,7 +21211,7 @@ Move_METAL_CLAW: Move_NIGHT_SHADE: monbg ANIM_ATTACKER - monbgprio_28 ANIM_ATTACKER + splitbgprio ANIM_ATTACKER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER fadetobg BG_GHOST waitbgfadein @@ -7313,7 +21220,7 @@ Move_NIGHT_SHADE: createvisualtask AnimTask_NightShadeClone, 5, 85 delay 70 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 12, 1 - createvisualtask AnimTask_BlendColorCycle, 2, 4, 0, 2, 0, 13, RGB_BLACK + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 0, 2, 0, 13, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 @@ -7375,7 +21282,7 @@ Move_FOCUS_ENERGY: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_WHITE createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -7388,7 +21295,7 @@ Move_BIDE: end BideSetUp: loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER, 9, 2 - createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_RED + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 waitforvisualfinish end @@ -7398,7 +21305,7 @@ BideUnleash: monbg ANIM_DEF_PARTNER setalpha 12, 8 loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER, 9, 2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 2, 0, 11, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 11, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 4 @@ -7417,7 +21324,7 @@ BideUnleash: delay 5 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 2, 11, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 11, 0, RGB_RED waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -7428,7 +21335,7 @@ Move_STRING_SHOT: loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 0, 9, RGB_BLACK waitforvisualfinish loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 9, 6 call StringShotThread @@ -7460,7 +21367,7 @@ Move_STRING_SHOT: clearmonbg ANIM_DEF_PARTNER delay 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 9, 0, RGB_BLACK end StringShotThread: @@ -7473,9 +21380,9 @@ Move_SPIDER_WEB: loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 0, 9, RGB_BLACK waitforvisualfinish - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 9, 6 call SpiderWebThread call SpiderWebThread @@ -7493,11 +21400,11 @@ Move_SPIDER_WEB: call SpiderWebThread waitforvisualfinish playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET - createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2 + createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, FALSE waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 9, 0, RGB_BLACK end SpiderWebThread: @@ -7546,7 +21453,7 @@ RazorWindUnleash: Move_DISABLE: loadspritegfx ANIM_TAG_SPARKLE_4 monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 8, 8 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 24, -16 @@ -7565,7 +21472,7 @@ Move_RECOVER: monbg ANIM_ATK_PARTNER setalpha 12, 8 loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3 - createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 6, 0, 11, RGB(31, 31, 11) call RecoverAbsorbEffect call RecoverAbsorbEffect call RecoverAbsorbEffect @@ -7597,9 +21504,9 @@ RecoverAbsorbEffect: Move_MIMIC: loadspritegfx ANIM_TAG_ORBS setalpha 11, 5 - monbg_22 ANIM_DEF_PARTNER - monbgprio_29 - panse_1B SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0 + monbg_static ANIM_DEF_PARTNER + splitbgprio_all + panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0 createvisualtask AnimTask_ShrinkTargetCopy, 5, 128, 24 delay 15 createsprite gMimicOrbSpriteTemplate, ANIM_TARGET, 2, -12, 24 @@ -7607,9 +21514,9 @@ Move_MIMIC: setarg 7, 0xFFFF waitforvisualfinish playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 11, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 11, RGB_WHITE waitforvisualfinish - clearmonbg_23 ANIM_DEF_PARTNER + clearmonbg_static ANIM_DEF_PARTNER blendoff end @@ -7654,7 +21561,7 @@ CurseGhost: createsprite gCurseGhostSpriteTemplate, ANIM_TARGET, 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 14, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 16, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -7672,7 +21579,7 @@ CurseStats: CurseStats1: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_DrawFallingWhiteLinesOnAttacker, 5 - createvisualtask AnimTask_BlendColorCycle, 5, 2, 4, 2, 0, 10, RGB_RED + createvisualtask AnimTask_BlendColorCycle, 5, F_PAL_ATTACKER, 4, 2, 0, 10, RGB_RED return Move_SOFT_BOILED: @@ -7687,7 +21594,7 @@ Move_SOFT_BOILED: delay 120 delay 7 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 10, 0, RGB(12, 24, 30) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 10, 0, RGB(12, 24, 30) createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 31, 16, 0, 1 delay 8 createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 31, 16, 0, 1 @@ -7702,7 +21609,7 @@ Move_HEAL_BELL: loadspritegfx ANIM_TAG_BELL loadspritegfx ANIM_TAG_MUSIC_NOTES_2 loadspritegfx ANIM_TAG_THIN_RING - createvisualtask AnimTask_BlendBattleAnimPal, 10, 10, 0, 0, 10, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATK_SIDE, 0, 0, 10, RGB_WHITE waitforvisualfinish createvisualtask AnimTask_LoadMusicNotesPals, 5 createsprite gBellSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, 0, 1 @@ -7740,12 +21647,12 @@ Move_HEAL_BELL: loadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_SHINY, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 4, 3, 10, 0, RGB(12, 24, 30) - createvisualtask AnimTask_BlendBattleAnimPal, 10, 10, 3, 10, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATK_SIDE, 3, 10, 0, RGB_WHITE createsprite gBlendThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 16, 0, 0, 0, 1 end HealBellRing: createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 4, 3, 8, 0, RGB(12, 24, 30) - createvisualtask AnimTask_BlendBattleAnimPal, 10, 10, 3, 2, 10, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATK_SIDE, 3, 2, 10, RGB_WHITE createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 40, 0, -24, 0, 1 playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER return @@ -7758,12 +21665,12 @@ Move_FAKE_OUT: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 createvisualtask AnimTask_StretchTargetUp, 3 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 16, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE end Move_SCARY_FACE: loadspritegfx ANIM_TAG_EYE_SPARKLE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 27, 3, 0, 16, RGB_BLACK + 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 waitforvisualfinish delay 10 @@ -7775,7 +21682,7 @@ Move_SCARY_FACE: waitforvisualfinish createvisualtask AnimTask_ShakeTargetInPattern, 3, 20, 1, FALSE playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 27, 3, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER, 3, 16, 0, RGB_BLACK waitforvisualfinish end @@ -7919,7 +21826,7 @@ PresentHeal: Move_BATON_PASS: loadspritegfx ANIM_TAG_POKEBALL playsewithpan SE_M_BATON_PASS, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, 31, 1, 2, 0, 11, RGB(31, 22, 30) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 2, 0, 11, RGB(31, 22, 30) createsprite gBatonPassPokeballSpriteTemplate, ANIM_ATTACKER, 2 end @@ -7943,15 +21850,15 @@ Move_PERISH_SONG: createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 15, 0, 240 createsprite gPerishSongMusicNote2SpriteTemplate, ANIM_ATTACKER, 4, 15, 0, 0 delay 20 - panse_1B SE_M_PERISH_SONG, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_PERISH_SONG, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 delay 80 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 16, RGB_BLACK createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 4, 0 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 5, 0 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 6, 0 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 7, 0 delay 100 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_BLACK createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 4, 1 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 5, 1 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 6, 1 @@ -8026,7 +21933,7 @@ Move_TRI_ATTACK: delay 20 createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 6, 0, 7 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK delay 16 loadspritegfx ANIM_TAG_FIRE createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 30, -1, 0 @@ -8048,7 +21955,7 @@ Move_TRI_ATTACK: createvisualtask AnimTask_ShakeTargetInPattern, 2, 20, 3, TRUE, 1 waitforvisualfinish loadspritegfx ANIM_TAG_LIGHTNING - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48 delay 1 @@ -8058,11 +21965,11 @@ Move_TRI_ATTACK: delay 20 createvisualtask AnimTask_ShakeTargetInPattern, 2, 20, 3, TRUE, 0 delay 2 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 waitforvisualfinish loadspritegfx ANIM_TAG_ICE_CRYSTALS call IceCrystalEffectShort - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK waitforvisualfinish end @@ -8070,7 +21977,7 @@ Move_WILL_O_WISP: loadspritegfx ANIM_TAG_WISP_FIRE loadspritegfx ANIM_TAG_WISP_ORB monbg ANIM_DEF_PARTNER - monbgprio_2A ANIM_TARGET + splitbgprio_foes ANIM_TARGET playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_EMBER, SOUND_PAN_ATTACKER, 10 createvisualtask SoundTask_AdjustPanningVar, 2, SOUND_PAN_ATTACKER, SOUND_PAN_ATTACKER, 1, 0 @@ -8084,7 +21991,7 @@ Move_WILL_O_WISP: delay 40 createvisualtask SoundTask_AdjustPanningVar, 2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 waitforvisualfinish - monbgprio_29 + splitbgprio_all playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 13, 1 createsprite gWillOWispFireSpriteTemplate, ANIM_ATTACKER, 2, 0 @@ -8148,28 +22055,28 @@ Move_TRICK: Move_WISH: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_SPARKLE_2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 10, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK waitforvisualfinish - panse_27 SE_M_REFLECT, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0 + panse_adjustall SE_M_REFLECT, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0 createsprite gWishStarSpriteTemplate, ANIM_ATTACKER, 40 waitforvisualfinish delay 60 loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 16, 3 call GrantingStarsEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 10, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK waitforvisualfinish end Move_STOCKPILE: loadspritegfx ANIM_TAG_GRAY_ORB playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, 2, 8, 1, 0, 12, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 8, 1, 0, 12, RGB_WHITE createvisualtask AnimTask_StockpileDeformMon, 5 call StockpileAbsorb call StockpileAbsorb waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 12, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 12, 0, RGB_WHITE end StockpileAbsorb: createsprite gStockpileAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 55, 55, 13 @@ -8277,7 +22184,7 @@ Move_TRANSFORM: monbg ANIM_ATTACKER playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48 - createvisualtask AnimTask_TransformMon, 2, 0 + createvisualtask AnimTask_TransformMon, 2, 0, 0 waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -8287,7 +22194,7 @@ Move_MORNING_SUN: loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_MorningSunLightBeam, 5 delay 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 8, 0, 12, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 8, 0, 12, RGB_WHITE delay 14 call MorningSunStar call MorningSunStar @@ -8304,7 +22211,7 @@ Move_MORNING_SUN: call MorningSunStar call MorningSunStar call MorningSunStar - createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 3, 12, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 3, 12, 0, RGB_WHITE waitforvisualfinish waitsound call HealingEffect @@ -8323,7 +22230,7 @@ Move_SWEET_SCENT: call SweetScentEffect createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 55, 0 setpan SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, 20, 1, 5, 5, 13, RGB(31, 21, 21) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 1, 5, 5, 13, RGB(31, 21, 21) call SweetScentEffect waitforvisualfinish end @@ -8354,7 +22261,7 @@ SweetScentEffect: Move_HYPER_BEAM: loadspritegfx ANIM_TAG_ORBS - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 0, 16, RGB_BLACK waitforvisualfinish delay 10 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_ATTACKER @@ -8370,7 +22277,7 @@ Move_HYPER_BEAM: call HyperBeamOrbs call HyperBeamOrbs createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 50, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 11, RGB(25, 25, 25) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(25, 25, 25) call HyperBeamOrbs call HyperBeamOrbs call HyperBeamOrbs @@ -8392,9 +22299,9 @@ Move_HYPER_BEAM: call HyperBeamOrbs call HyperBeamOrbs call HyperBeamOrbs - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 11, 0, RGB(25, 25, 25) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(25, 25, 25) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 16, 0, RGB_BLACK end HyperBeamOrbs: createsprite gHyperBeamOrbSpriteTemplate, ANIM_TARGET, 2 @@ -8449,17 +22356,17 @@ CreateFlatterConfetti: Move_ROLE_PLAY: monbg ANIM_ATK_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 16, RGB_WHITE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 10, RGB_BLACK + 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 waitforvisualfinish playsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_DETECT, SOUND_PAN_ATTACKER, 30 createvisualtask AnimTask_RolePlaySilhouette, 2 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 16, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB_WHITE delay 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 10, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 10, 0, RGB_BLACK end Move_REFRESH: @@ -8472,7 +22379,7 @@ Move_REFRESH: call GrantingStarsEffect waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 10, 0, RGB(12, 24, 30) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 10, 0, RGB(12, 24, 30) createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 end @@ -8484,13 +22391,13 @@ Move_BLAZE_KICK: setalpha 12, 8 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET createsprite gSpinningHandOrFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 30 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 7, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE delay 30 - playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 14, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 8, 0, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 call FireSpreadEffect waitforvisualfinish clearmonbg ANIM_TARGET @@ -8499,16 +22406,17 @@ Move_BLAZE_KICK: Move_HYPER_VOICE: loadspritegfx ANIM_TAG_THIN_RING - createvisualtask SoundTask_PlayCryWithEcho, 5, 0 + createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE call HyperVoiceEffect waitforvisualfinish delay 8 - createvisualtask SoundTask_PlayCryWithEcho, 5, 1 + createvisualtask SoundTask_PlayCryWithEcho, 5, TRUE call HyperVoiceEffect waitforvisualfinish end + HyperVoiceEffect: - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 8, 0, RGB_YELLOW + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 8, 0, RGB_YELLOW createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, ANIM_ATTACKER, 0 createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 @@ -8519,14 +22427,14 @@ HyperVoiceEffect: Move_SAND_TOMB: loadspritegfx ANIM_TAG_MUD_SAND - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, RGB(19, 17, 0) + 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 playsewithpan SE_M_SAND_TOMB, SOUND_PAN_TARGET call SandTombSwirlingDirt call SandTombSwirlingDirt call SandTombSwirlingDirt delay 22 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, RGB(19, 17, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(19, 17, 0) waitforvisualfinish end @@ -8552,7 +22460,7 @@ Move_SHEER_COLD: waitbgfadein loadspritegfx ANIM_TAG_ICE_CUBE monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 createvisualtask AnimTask_FrozenIceCube, 2 waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 17 @@ -8566,16 +22474,16 @@ Move_SHEER_COLD: Move_ARM_THRUST: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 - createvisualtask AnimTask_RotateMonSpriteToSide, 5, 8, 5, 0, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 5, 8, 5, ANIM_ATTACKER, 0 delay 6 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 3 delay 4 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET createsprite gArmThrustHandSpriteTemplate, ANIM_TARGET, 2, 10, -8, 14, 3 waitforvisualfinish - createvisualtask AnimTask_RotateMonSpriteToSide, 5, 8, 5, 0, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 5, 8, 5, ANIM_ATTACKER, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET choosetwoturnanim ArmThrustRight, ArmThrustLeft ArmThrustContinue: @@ -8591,8 +22499,8 @@ ArmThrustLeft: goto ArmThrustContinue Move_MUDDY_WATER: - panse_1B SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 - createvisualtask AnimTask_CreateSurfWave, 2, TRUE + panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_MUDDY_WATER waitforvisualfinish end @@ -8625,7 +22533,7 @@ Move_DRAGON_CLAW: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_CLAW_SLASH playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 4, 0, 8, RGB(31, 19, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 4, 0, 8, RGB(31, 19, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 15, 1 call DragonClawFireSpiral call DragonClawFireSpiral @@ -8662,7 +22570,7 @@ Move_DRAGON_CLAW: createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 28, 512, 25, 16, 46, ANIM_ATTACKER delay 2 createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 33, 464, 30, 15, -50, ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 4, 8, 0, RGB(31, 19, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 4, 8, 0, RGB(31, 19, 0) waitforvisualfinish end DragonClawFireSpiral: @@ -8684,12 +22592,12 @@ DragonClawFireSpiral: Move_MUD_SHOT: loadspritegfx ANIM_TAG_BROWN_ORB monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1 delay 6 createvisualtask AnimTask_StartSinAnimTimer, 5, 100 - panse_1B SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0 + panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0 call MudShotOrbs call MudShotOrbs call MudShotOrbs @@ -8717,7 +22625,7 @@ Move_METEOR_MASH: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET - panse_1B SE_M_BARRIER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +3, 0 + panse SE_M_BARRIER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +3, 0 fadetobg BG_COSMIC waitbgfadein waitforvisualfinish @@ -8745,7 +22653,7 @@ Move_REVENGE: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createsprite gRevengeSmallScratchSpriteTemplate, ANIM_ATTACKER, 2, 10, -10 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 4, 2, 8, RGB_RED + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 4, 2, 8, RGB_RED waitforvisualfinish unloadspritegfx ANIM_TAG_PURPLE_SCRATCH loadspritegfx ANIM_TAG_PURPLE_SWIPE @@ -8775,7 +22683,7 @@ Move_POISON_FANG: delay 10 createvisualtask AnimTask_ShakeMon, 3, ANIM_TARGET, 3, 0, 10, 1 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, 4, 0, 4, 0, 12, RGB(26, 0, 26) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 0, 4, 0, 12, RGB(26, 0, 26) call PoisonBubblesEffect waitforvisualfinish end @@ -8789,9 +22697,9 @@ Move_FRENZY_PLANT: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 2, 0, 5, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 2, 0, 5, RGB_BLACK waitforvisualfinish createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 10, 8, 2, 0, 0, 100 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER @@ -8839,7 +22747,7 @@ Move_FRENZY_PLANT: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, ANIM_TARGET, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 2, 5, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 2, 5, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -8848,7 +22756,7 @@ Move_FRENZY_PLANT: Move_METAL_SOUND: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES monbg ANIM_DEF_PARTNER - monbgprio_2A ANIM_TARGET + splitbgprio_foes ANIM_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 2, 0, 8, 1 call MetalSoundRings call MetalSoundRings @@ -8860,7 +22768,7 @@ Move_METAL_SOUND: waitforvisualfinish end MetalSoundRings: - panse_1B SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 createsprite gMetalSoundSpriteTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 30, 0 delay 2 return @@ -8981,7 +22889,7 @@ ReturnStrong: createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 goto ReturnContinue ReturnStrongest: - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 6, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 6, RGB_BLACK waitforvisualfinish createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 16, 1, ANIM_ATTACKER createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -9038,7 +22946,7 @@ ReturnStrongest: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -5, 3, ANIM_TARGET, 0 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_MEGA_KICK2, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 6, 0, RGB_BLACK goto ReturnContinue ReturnStrongestHit: createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 4, 3, ANIM_ATTACKER @@ -9100,7 +23008,7 @@ Move_BLAST_BURN: createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 40, 20, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -40, 20, 24, 0, 0, 0 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 25 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -96, 0, 24, 0, 0, 0 @@ -9114,7 +23022,7 @@ Move_BLAST_BURN: createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 60, 30, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 48, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -60, 30, 24, 0, 0, 0 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -9152,24 +23060,41 @@ Move_ROCK_TOMB: waitforvisualfinish end -Move_SILVER_WIND: - loadspritegfx ANIM_TAG_SPARKLE_6 - panse_1B SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 - playsewithpan SE_M_MORNING_SUN, 0 - delay 0 - monbg ANIM_DEF_PARTNER - monbgprio_29 - delay 0 - createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, ANIM_TARGET, 0, 0, 4, RGB_BLACK - createvisualtask AnimTask_GetTargetSide, 2 - jumprettrue SilverWindOnPlayer +SetBugBg: + createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 0, 4, RGB_BLACK + createvisualtask AnimTask_GetAttackerSide, 2 + jumprettrue SetBugBgPlayer fadetobg BG_BUG_OPPONENT waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 5, 1536, 0, 0, -1 -SilverWindContinue: + goto SetBugBgFade +SetBugBgPlayer: + fadetobg BG_BUG_PLAYER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, -1536, 0, 0, -1 +SetBugBgFade: delay 0 createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 4, 4, RGB_BLACK waitbgfadein + return + +UnsetBugBg: + restorebg + waitbgfadeout + createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 4, 0, RGB_BLACK + setarg 7, -1 + waitbgfadein + return + +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 + delay 0 + monbg ANIM_DEF_PARTNER + splitbgprio_all + delay 0 + call SetBugBg createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1 createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1 createsprite gSilverWindBigSparkSpriteTemplate, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1 @@ -9197,17 +23122,8 @@ SilverWindContinue: playsewithpan SE_M_GUST2, SOUND_PAN_TARGET clearmonbg ANIM_DEF_PARTNER delay 0 - restorebg - waitbgfadeout - createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, ANIM_TARGET, 0, 4, 0, RGB_BLACK - setarg 7, 0xFFFF - waitbgfadein + call UnsetBugBg end -SilverWindOnPlayer: - fadetobg BG_BUG_PLAYER - waitbgfadeout - createvisualtask AnimTask_StartSlidingBg, 5, -1536, 0, 0, -1 - goto SilverWindContinue Move_SNATCH: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -9282,7 +23198,7 @@ Move_OVERHEAT: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 18 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 5, RGB(28, 0, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 5, RGB(28, 0, 0) waitforvisualfinish createvisualtask AnimTask_AllocBackupPalBuffer, 5 waitforvisualfinish @@ -9293,7 +23209,7 @@ Move_OVERHEAT: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_CopyPalUnfadedToBackup, 5, 1, 0 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 1, 0, 13, RGB(28, 0, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 1, 0, 13, RGB(28, 0, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 2, 0, 15, 1 waitforvisualfinish playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER @@ -9326,25 +23242,25 @@ Move_OVERHEAT: delay 5 waitforvisualfinish createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -5, 3, ANIM_TARGET, 0 - playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 10, 0, 25, 1 delay 6 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, -5, ANIM_TARGET, 0 - playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET delay 8 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, 10, ANIM_TARGET, 0 - playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET delay 8 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 0 - playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET createvisualtask AnimTask_CopyPalFadedToUnfaded, 5, 1 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, -1, 0, 13, RGB(18, 18, 18) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, -1, 0, 13, RGB(18, 18, 18) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 3, 0, 15, 1 waitforvisualfinish createvisualtask AnimTask_CopyPalUnfadedFromBackup, 5, 0, 1 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 5, 0, RGB(28, 0, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 5, 0, RGB(28, 0, 0) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -9352,7 +23268,7 @@ Move_OVERHEAT: delay 15 createvisualtask AnimTask_CopyPalUnfadedFromBackup, 5, 1, 0 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 13, 0, RGB(18, 18, 18) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 13, 0, RGB(18, 18, 18) waitforvisualfinish createvisualtask AnimTask_FreeBackupPalBuffer, 5 waitforvisualfinish @@ -9366,9 +23282,9 @@ Move_HYDRO_CANNON: playsewithpan SE_M_SURF, SOUND_PAN_ATTACKER createsprite gHydroCannonChargeSpriteTemplate, ANIM_TARGET, 2 delay 10 - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 delay 30 - panse_1B SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 call HydroCannonBeam createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 10, 0, 40, 1 createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 @@ -9383,7 +23299,7 @@ Move_HYDRO_CANNON: call HydroCannonBeam createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -9494,9 +23410,9 @@ Move_WATER_PULSE: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_BLUE_RING_2 monbg ANIM_TARGET - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 7, RGB(0, 25, 28) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 7, RGB(0, 25, 28) delay 10 createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 100, 100, 8, 1, 20, 40, 0 createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 20, 100, 16, 2, 10, 35, 1 @@ -9516,7 +23432,7 @@ Move_WATER_PULSE: delay 13 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 8, 18, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, RGB(0, 25, 28) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 7, 0, RGB(0, 25, 28) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -9529,9 +23445,9 @@ Move_PSYCHO_BOOST: createvisualtask AnimTask_FadeScreenToWhite, 5 waitbgfadein delay 6 - createvisualtask AnimTask_BlendColorCycle, 2, 1, 2, 8, 0, 10, RGB_BLACK + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG, 2, 8, 0, 10, RGB_BLACK delay 0 - monbgprio_28 ANIM_ATTACKER + splitbgprio ANIM_ATTACKER setalpha 8, 8 delay 10 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 3, 0, 240, 0 @@ -9545,7 +23461,7 @@ Move_PSYCHO_BOOST: waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff - call UnsetPsychicBackground + call UnsetPsychicBg end Move_KNOCK_OFF: @@ -9556,7 +23472,7 @@ Move_KNOCK_OFF: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET createsprite gKnockOffStrikeSpriteTemplate, ANIM_TARGET, 2, -16, -16 delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 5, 1, RGB_WHITE, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -12, 10, 0, 3 @@ -9574,7 +23490,7 @@ Move_DOOM_DESIRE: delay 1 monbg ANIM_ATK_PARTNER createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, FALSE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 4, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 4, RGB_BLACK waitforvisualfinish setalpha 8, 8 playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -9582,7 +23498,7 @@ Move_DOOM_DESIRE: waitforvisualfinish delay 20 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, TRUE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 4, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 4, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -9591,7 +23507,7 @@ Move_DOOM_DESIRE: Move_SKY_UPPERCUT: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET fadetobg BG_IN_AIR waitbgfadeout playsewithpan SE_M_SKY_UPPERCUT, SOUND_PAN_ATTACKER @@ -9633,24 +23549,57 @@ Move_SKY_UPPERCUT: end 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 + jumpargeq 0, STATUS_FIELD_ELECTRIC_TERRAIN, Move_THUNDER_SHOCK + jumpargeq 0, STATUS_FIELD_PSYCHIC_TERRAIN, Move_CONFUSION createvisualtask AnimTask_GetBattleTerrain, 5 - jumpargeq 0, BATTLE_TERRAIN_GRASS, Move_NEEDLE_ARM - jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, Move_MAGICAL_LEAF - jumpargeq 0, BATTLE_TERRAIN_SAND, Move_MUD_SHOT - jumpargeq 0, BATTLE_TERRAIN_UNDERWATER, Move_WATERFALL - jumpargeq 0, BATTLE_TERRAIN_WATER, Move_SURF - jumpargeq 0, BATTLE_TERRAIN_POND, Move_BUBBLE_BEAM - jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, Move_ROCK_THROW - jumpargeq 0, BATTLE_TERRAIN_CAVE, Move_BITE - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH + jumpargeq 0, BATTLE_TERRAIN_GRASS, Move_NEEDLE_ARM + jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, Move_MAGICAL_LEAF + jumpargeq 0, BATTLE_TERRAIN_SAND, Move_MUD_SHOT + jumpargeq 0, BATTLE_TERRAIN_UNDERWATER, Move_WATERFALL + jumpargeq 0, BATTLE_TERRAIN_WATER, Move_SURF + jumpargeq 0, BATTLE_TERRAIN_POND, Move_BUBBLE_BEAM + jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, Move_ROCK_THROW + jumpargeq 0, BATTLE_TERRAIN_CAVE, Move_BITE + jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH + jumpargeq 0, BATTLE_TERRAIN_SOARING, Move_GUST + jumpargeq 0, BATTLE_TERRAIN_SKY_PILLAR, Move_GUST + jumpargeq 0, BATTLE_TERRAIN_BURIAL_GROUND, Move_SHADOW_SNEAK + jumpargeq 0, BATTLE_TERRAIN_PUDDLE, Move_MUD_SHOT + jumpargeq 0, BATTLE_TERRAIN_MARSH, Move_MUD_SHOT + jumpargeq 0, BATTLE_TERRAIN_SWAMP, Move_MUD_SHOT +.if B_SECRET_POWER_ANIMATION >= GEN_7 + jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_ICE_SHARD +.else + jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_AVALANCHE +.endif + jumpargeq 0, BATTLE_TERRAIN_ICE, Move_ICE_SHARD + jumpargeq 0, BATTLE_TERRAIN_VOLCANO, Move_INCINERATE + jumpargeq 0, BATTLE_TERRAIN_DISTORTION_WORLD, Move_POUND + jumpargeq 0, BATTLE_TERRAIN_SPACE, Move_SWIFT + jumpargeq 0, BATTLE_TERRAIN_ULTRA_SPACE, Move_PSYWAVE +.if B_SECRET_POWER_ANIMATION >= GEN_7 + jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_SPIT_UP + goto Move_SPIT_UP +.elseif B_SECRET_POWER_ANIMATION == GEN_6 + jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_BODY_SLAM + goto Move_BODY_SLAM +.elseif B_SECRET_POWER_ANIMATION == GEN_5 || B_SECRET_POWER_ANIMATION == GEN_4 + jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_BODY_SLAM + goto Move_MUD_SLAP +.else + jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH goto Move_SLAM +.endif Move_TWISTER: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET playsewithpan SE_M_TWISTER, SOUND_PAN_TARGET createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 120, 70, 5, 70, 30 delay 1 @@ -9834,7 +23783,7 @@ Move_WEATHER_BALL: waitforvisualfinish delay 15 playsewithpan SE_M_DETECT, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 5, 1, RGB_WHITE, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 waitforvisualfinish createvisualtask AnimTask_GetWeather, 2 delay 1 @@ -10128,21 +24077,22 @@ WaterBubblesEffectLong: ElectricityEffect: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0 +ElectricityEffectNoSound: + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET return ConfusionEffect: @@ -10161,7 +24111,7 @@ SetPsychicBackground: waitbgfadein return -UnsetPsychicBackground: +UnsetPsychicBg: restorebg waitbgfadeout setarg 7, 0xFFFF @@ -10189,26 +24139,26 @@ UnsetSkyBg: waitbgfadein return -SetSolarbeamBg: +SetSolarBeamBg: createvisualtask AnimTask_IsContest, 2 - jumprettrue SetSolarbeamBgContest + jumprettrue SetSolarBeamBgContest createvisualtask AnimTask_IsTargetPlayerSide, 2 - jumpretfalse SetSolarbeamBgOpponent - goto SetSolarbeamBgPlayer -SetSolarbeamBgContinue: + jumpretfalse SetSolarBeamBgOpponent + goto SetSolarBeamBgPlayer +SetSolarBeamBgContinue: waitbgfadein return -SetSolarbeamBgContest: - fadetobg BG_SOLARBEAM_CONTESTS - goto SetSolarbeamBgContinue -SetSolarbeamBgPlayer: - fadetobg BG_SOLARBEAM_PLAYER - goto SetSolarbeamBgContinue -SetSolarbeamBgOpponent: - fadetobg BG_SOLARBEAM_OPPONENT - goto SetSolarbeamBgContinue +SetSolarBeamBgContest: + fadetobg BG_SOLAR_BEAM_CONTESTS + goto SetSolarBeamBgContinue +SetSolarBeamBgPlayer: + fadetobg BG_SOLAR_BEAM_PLAYER + goto SetSolarBeamBgContinue +SetSolarBeamBgOpponent: + fadetobg BG_SOLAR_BEAM_OPPONENT + goto SetSolarBeamBgContinue -UnsetSolarbeamBg: +UnsetSolarBeamBg: restorebg waitbgfadein return @@ -10216,7 +24166,7 @@ UnsetSolarbeamBg: Status_Poison: loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 13, 6 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 18, 2 - createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 12, RGB(30, 0, 31) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 12, RGB(30, 0, 31) end Status_Confusion: @@ -10267,7 +24217,7 @@ Status_Freeze: playsewithpan SE_M_ICY_WIND, 0 loadspritegfx ANIM_TAG_ICE_CUBE monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 17 createvisualtask AnimTask_FrozenIceCube, 2 waitforvisualfinish @@ -10294,15 +24244,18 @@ Status_Nightmare: clearmonbg ANIM_DEF_PARTNER end +Status_Powder: + end + General_CastformChange: createvisualtask AnimTask_IsMonInvisible, 2 - jumpreteq 1, CastformChangeSkipAnim + jumpreteq TRUE, CastformChangeSkipAnim goto CastformChangeContinue CastformChangeContinue: monbg ANIM_ATTACKER playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48 - createvisualtask AnimTask_TransformMon, 2, 1 + createvisualtask AnimTask_TransformMon, 2, 1, 0 waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -10318,13 +24271,13 @@ General_StatsChange: General_SubstituteFade: monbg ANIM_ATTACKER createvisualtask AnimTask_SubstituteFadeToInvisible, 5 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 0, 16, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE waitforvisualfinish delay 1 clearmonbg ANIM_ATTACKER delay 2 blendoff - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 0, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 0, RGB_WHITE createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, TRUE end @@ -10356,6 +24309,9 @@ General_TurnTrap: jumpargeq 0, TRAP_ANIM_WHIRLPOOL, Status_Whirlpool jumpargeq 0, TRAP_ANIM_CLAMP, Status_Clamp jumpargeq 0, TRAP_ANIM_SAND_TOMB, Status_SandTomb + jumpargeq 0, TRAP_ANIM_MAGMA_STORM, Status_MagmaStorm + jumpargeq 0, TRAP_ANIM_INFESTATION, Status_Infestation + jumpargeq 0, TRAP_ANIM_SNAP_TRAP, Status_Snap_Trap goto Status_BindWrap Status_BindWrap: loadspritegfx ANIM_TAG_TENDRILS @@ -10381,19 +24337,45 @@ Status_FireSpin: stopsound end +Status_MagmaStorm: + loadspritegfx ANIM_TAG_SMALL_EMBER + fadetobg BG_MAGMA_STORM + waitbgfadeout + createvisualtask AnimTask_MoveSeismicTossBg, 3 + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 5, 8 + createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 + createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7) + call FireSpinEffect + call FireSpinEffect + createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7) + call FireSpinEffect + call FireSpinEffect + createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7) + call FireSpinEffect + restorebg + waitbgfadeout + setarg 7, 0xFFF + waitbgfadein + stopsound + clearmonbg ANIM_DEF_PARTNER + blendoff + end + Status_Whirlpool: loadspritegfx ANIM_TAG_WATER_ORB monbg ANIM_DEF_PARTNER - monbgprio_28 ANIM_TARGET + splitbgprio ANIM_TARGET setalpha 12, 8 delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, RGB(0, 13, 23) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(0, 13, 23) playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 30, 1 call WhirlpoolEffect call WhirlpoolEffect delay 12 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, RGB(0, 13, 23) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(0, 13, 23) waitforvisualfinish stopsound clearmonbg ANIM_DEF_PARTNER @@ -10416,19 +24398,38 @@ Status_Clamp: waitforvisualfinish end +Status_Snap_Trap: @ placeholder + goto Move_BITE + Status_SandTomb: loadspritegfx ANIM_TAG_MUD_SAND - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, RGB(19, 17, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(19, 17, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 30, 1 playsewithpan SE_M_SAND_TOMB, SOUND_PAN_TARGET call SandTombSwirlingDirt call SandTombSwirlingDirt delay 22 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, RGB(19, 17, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(19, 17, 0) waitforvisualfinish stopsound end +Status_Infestation: + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color + loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_DEF, 0x2, 0x0, 0x9, 0x7320 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 30 0x1 + loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0x0, 30 + call InfestationVortex + call InfestationVortex + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7320 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + General_HeldItemEffect: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 @@ -10446,7 +24447,7 @@ General_HeldItemEffect: call GrantingStarsEffect waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 3, 7, 0, RGB(17, 31, 25) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 3, 7, 0, RGB(17, 31, 25) createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 waitforvisualfinish end @@ -10489,12 +24490,12 @@ General_SmokeballEscape: blendoff end -General_FocusBand: - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 2, 7, 0, 9, RGB_RED +General_HangedOn: + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_ATTACKER, 7, 0, 9, RGB_RED playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_SlideMonForFocusBand, 5, 30, 128, 0, 1, 2, 0, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 2, 4, 9, 0, RGB_RED + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_ATTACKER, 4, 9, 0, RGB_RED waitforvisualfinish delay 6 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 0, 0, 0, 15 @@ -10503,13 +24504,13 @@ General_FocusBand: General_Rain: loadspritegfx ANIM_TAG_RAIN_DROPS playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 2, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 0, 4, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 delay 50 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 2, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 4, 0, RGB_BLACK waitforvisualfinish end @@ -10587,13 +24588,13 @@ General_FutureSightHit: blendoff waitforvisualfinish delay 1 - call UnsetPsychicBackground + call UnsetPsychicBg end General_DoomDesireHit: createvisualtask AnimTask_SetAnimTargetToBattlerTarget, 2 loadspritegfx ANIM_TAG_EXPLOSION - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 16, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 16, RGB_WHITE waitforvisualfinish delay 10 createvisualtask AnimTask_DoomDesireLightBeam, 5 @@ -10620,7 +24621,7 @@ General_DoomDesireHit: playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 16, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE waitforvisualfinish end @@ -10629,7 +24630,7 @@ General_FocusPunchSetUp: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_RED + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -10642,7 +24643,7 @@ General_IngrainHeal: loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_DEF_PARTNER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 4, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 4, RGB(13, 31, 12) waitforvisualfinish delay 3 call AbsorbEffect @@ -10650,7 +24651,7 @@ General_IngrainHeal: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 4, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 4, 0, RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -10658,7 +24659,7 @@ General_IngrainHeal: General_WishHeal: loadspritegfx ANIM_TAG_SPARKLE_2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 10, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call GrantingStarsEffect @@ -10667,7 +24668,263 @@ General_WishHeal: loadspritegfx ANIM_TAG_BLUE_STAR call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 10, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK + end + +General_IllusionOff: + monbg ANIM_TARGET + createvisualtask AnimTask_TransformMon, 2, 0, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +General_FormChange: + monbg ANIM_ATTACKER + createvisualtask AnimTask_TransformMon, 2, 0, 1 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end + +General_SlideOffScreen: + createvisualtask AnimTask_SlideOffScreen, 5, ANIM_TARGET, +3 + waitforvisualfinish + createvisualtask AnimTask_SetInvisible, 1, ANIM_TARGET, TRUE + waitforvisualfinish + end + +General_MegaEvolution: + loadspritegfx ANIM_TAG_MEGA_STONE + loadspritegfx ANIM_TAG_MEGA_PARTICLES + loadspritegfx ANIM_TAG_MEGA_SYMBOL + monbg ANIM_ATTACKER + setalpha 12, 8 + loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11) + call MegaEvolutionParticles + call MegaEvolutionParticles + call MegaEvolutionParticles + waitforvisualfinish + playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER + createsprite gMegaStoneSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0 + delay 20 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA + waitforvisualfinish + createvisualtask AnimTask_TransformMon, 2, 0, 1 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA + createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 + waitforvisualfinish + createsprite gMegaSymbolSpriteTemplate ANIM_ATTACKER, 2 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + end + +MegaEvolutionParticles: + createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, 40, -10, 13 + delay 3 + createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, -35, -10, 13 + delay 3 + createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, 15, -40, 13 + delay 3 + createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, -10, -32, 13 + delay 3 + createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, 25, -20, 13 + delay 3 + createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, -40, -20, 13 + delay 3 + createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, 5, -40, 13 + delay 3 + return + +General_RestoreBg: + restorebg + waitbgfadein + end + +end + +General_ZMoveActivate: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_Z_MOVE_SYMBOL @Z-Move Symbol + loadspritegfx ANIM_TAG_WHIP_HIT @green color + loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color + loadspritegfx ANIM_TAG_PAW_PRINT @yellow color + monbg ANIM_ATTACKER + setblends 0x80c + fadetobg BG_ZMOVE_ACTIVATE + waitbgfadein + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x0 0x0 0xFFFF + playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendColorCycle, 0x2, 0x6, ANIM_PAL_ATK, 0x0, 0x6, 0x0, 0xb, 0x76BC + call ZMoveBuffEffect + call ZMoveBuffEffect + call ZMoveBuffEffect + launchtemplate gZMoveSymbolSpriteTemplate 0x29 0x4 0x0 0x0 0x0 0x0 + call ZMoveBuffEffect + call ZMoveBuffEffect + waitforvisualfinish + call UnsetPsychicBg + blendoff + clearmonbg ANIM_ATTACKER + end +ZMoveBuffEffect: + launchtemplate gBlueZMoveEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x3 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 @Red Buff + delay 0x3 + launchtemplate gGreenZMoveEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x3 + launchtemplate gYellowZMoveEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x3 + return + +General_TotemFlare:: + 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 + setblends 0x80c + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x6 0x0 0xb 0x1f + call RainbowEndureEffect + call RainbowEndureEffect + call RainbowEndureEffect + call RainbowEndureEffect + call RainbowEndureEffect + waitforvisualfinish + blendoff + clearmonbg ANIM_ATTACKER + end + +RainbowEndureEffect: + launchtemplate gBlueEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x3 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 @Red Buff + delay 0x3 + launchtemplate gGreenEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x3 + launchtemplate gYellowEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x3 + return + +General_GulpMissile: @ Tackle anim (placeholder) + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_ATTACKER + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_ATTACKER, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 3, 0, 6, 1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end + +General_StrongWinds:: + loadspritegfx ANIM_TAG_FLYING_DIRT + playsewithpan SE_M_GUST, 0 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 12, 12, RGB(20, 20, 20) + waitforvisualfinish + createvisualtask AnimTask_LoadWindstormBackground, 5, FALSE + delay 32 + waitforvisualfinish + stopsound + end + +General_PrimalReversion:: + launchtask AnimTask_PrimalReversion 0x5 0x0 + jumpargeq 0x0, ITEM_RED_ORB, General_PrimalReversion_Omega + jumpargeq 0x1, ITEM_BLUE_ORB, General_PrimalReversion_Alpha +General_PrimalReversion_Alpha: + loadspritegfx ANIM_TAG_ALPHA_STONE + loadspritegfx ANIM_TAG_PRIMAL_PARTICLES + loadspritegfx ANIM_TAG_ALPHA_SYMBOL + monbg ANIM_ATTACKER + setalpha 12, 8 + loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11) + call PrimalReversionParticles + call PrimalReversionParticles + call PrimalReversionParticles + waitforvisualfinish + playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER + createsprite gAlphaStoneSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0 + delay 20 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA + waitforvisualfinish + createvisualtask AnimTask_TransformMon, 2, 0, 1 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA + createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 + waitforvisualfinish + createsprite gAlphaSymbolSpriteTemplate ANIM_ATTACKER, 2 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + end +General_PrimalReversion_Omega: + loadspritegfx ANIM_TAG_OMEGA_STONE + loadspritegfx ANIM_TAG_PRIMAL_PARTICLES + loadspritegfx ANIM_TAG_OMEGA_SYMBOL + monbg ANIM_ATTACKER + setalpha 12, 8 + loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11) + call PrimalReversionParticles + call PrimalReversionParticles + call PrimalReversionParticles + waitforvisualfinish + playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER + createsprite gOmegaStoneSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0 + delay 20 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA + waitforvisualfinish + createvisualtask AnimTask_TransformMon, 2, 0, 1 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA + createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 + waitforvisualfinish + createsprite gOmegaSymbolSpriteTemplate ANIM_ATTACKER, 2 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + end +PrimalReversionParticles: + createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 40, -10, 13 + delay 3 + createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, -35, -10, 13 + delay 3 + createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 15, -40, 13 + delay 3 + createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, -10, -32, 13 + delay 3 + createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 25, -20, 13 + delay 3 + createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, -40, -20, 13 + delay 3 + createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 5, -40, 13 + delay 3 + return + +General_AffectionHangedOn:: + loadspritegfx ANIM_TAG_RED_HEART + loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3 + createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER + delay 15 + launchtask AnimTask_AffectionHangedOn 0x5 0x0 + jumpargeq 0x0, FRIENDSHIP_100_TO_149, General_AffectionHangedOn_3Hearts + jumpargeq 0x0, FRIENDSHIP_150_TO_199, General_AffectionHangedOn_4Hearts + jumpargeq 0x0, FRIENDSHIP_200_TO_254, General_AffectionHangedOn_5Hearts + createsprite gRedHeartBurstSpriteTemplate, ANIM_ATTACKER, 3, -384, -31 +General_AffectionHangedOn_5Hearts: + createsprite gRedHeartBurstSpriteTemplate, ANIM_ATTACKER, 3, -128, -22 +General_AffectionHangedOn_4Hearts: + createsprite gRedHeartBurstSpriteTemplate, ANIM_ATTACKER, 3, 416, -38 +General_AffectionHangedOn_3Hearts: + createsprite gRedHeartBurstSpriteTemplate, ANIM_ATTACKER, 3, 160, -32 + createsprite gRedHeartBurstSpriteTemplate, ANIM_ATTACKER, 3, -256, -40 + createsprite gRedHeartBurstSpriteTemplate, ANIM_ATTACKER, 3, 128, -16 + waitforvisualfinish end SnatchMoveTrySwapFromSubstitute: @@ -10753,3 +25010,5641 @@ Special_SubstituteToMon: Special_MonToSubstitute: createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, FALSE end + +Special_CriticalCaptureBallThrow: + createvisualtask AnimTask_LoadBallGfx, 2 + delay 0 + playsewithpan SE_FALL, 0 + createvisualtask AnimTask_ThrowBall, 2 + createvisualtask AnimTask_IsBallBlockedByTrainer, 2 + jumpreteq -1, BallThrowTrainerBlock + goto BallThrowEnd + +@@@@@@@@@@ Z MOVES @@@@@@@@@@ +Move_BREAKNECK_BLITZ:: + loadspritegfx ANIM_TAG_HOLLOW_ORB + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_METEOR + loadspritegfx ANIM_TAG_FLAT_ROCK + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x5 0x20 @ shake screen + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x5 0x20 @ shake banks + playsewithpan SE_M_EARTHQUAKE, 0x0 + monbg ANIM_ATTACKER + splitbgprio ANIM_ATTACKER + delay 0x1 + launchtask AnimTask_BlendPalInAndOutByTag, 0x5, 0x5, ANIM_TAG_HOLLOW_ORB, 0x4c00, 0xe, 0x0, 0x3 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x0 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x2b + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x55 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x80 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xaa + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xd5 + delay 0xf + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x0 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x2b + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x55 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x80 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xaa + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xd5 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + fadetobg BG_DRILL + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x300 0x1 0xffff + waitbgfadein + setblends 0x80c + delay 0x10 + launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa + delay 0x23 + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + delay 0x8 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1 @ 0, 0 + delay 0x1 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0xa 0xfff6 0x1 0x1 @ +10, -10 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + delay 0x1 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0xf 0xfff1 0x1 0x1 @ +15, -15 + delay 0x1 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x14 0xffec 0x1 0x1 @ +20, -20 + delay 0x1 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x19 0xffe7 0x1 0x1 @ +25, -25 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 + waitforvisualfinish + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x8 0xfe00 0x1 0x0 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x0 0x4 0x0 0xc 0x1 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x4 0x0 0xc 0x1 + waitforvisualfinish + delay 0x4 + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x8 0xfe00 0x1 0x1 + delay 0xa + delay 0x19 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x6 + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + waitforvisualfinish + delay 0x10 + blendoff + clearmonbg ANIM_DEF_PARTNER + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + call UnsetPsychicBg + end + + +Move_ALL_OUT_PUMMELING: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_METEOR + loadspritegfx ANIM_TAG_FLAT_ROCK + loadspritegfx ANIM_TAG_FOCUS_ENERGY + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + call EndureEffect + loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER 0x9 0x2 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x1f + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call EndureEffect + waitforvisualfinish + fadetobg BG_ROCK_WRECKER + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x800 0x0 0x0 0xffff + waitbgfadein + setblends 0x80c + monbg ANIM_DEF_PARTNER + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 SOUND_PAN_TARGET 0x1 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 ANIM_FOOT_1 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xfffa 0x12 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffc0 0x10 0x0 0x0 0xa 0x1 ANIM_FIST_1 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x15 0x0 0x0 0xa 0x1 ANIM_FOOT_2 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x14 0x0 0x0 0xa 0x1 ANIM_FIST_1 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffe0 0x17 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffc0 0x11 0x0 0x0 0xa 0x1 ANIM_FOOT_1 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffb0 0x10 0x0 0x0 0xa 0x1 ANIM_FOOT_2 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffa0 0x15 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1 + delay 0x2 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 0x10 + launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa + delay 0x23 + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + delay 0xc + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffd0 0x0 0x0 0x4 + waitforvisualfinish + delay 0x30 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7 + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + waitforvisualfinish + delay 0x10 + blendoff + clearmonbg ANIM_DEF_PARTNER + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + call UnsetPsychicBg + end + + +Move_SUPERSONIC_SKYSTRIKE: + loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly + loadspritegfx ANIM_TAG_MUD_SAND @ dig + loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy + loadspritegfx ANIM_TAG_BIRD @ sky attack bird + loadspritegfx ANIM_TAG_IMPACT @ hit + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + monbg ANIM_DEF_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x8 0x0 0x0 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x0 0x2 0x10 + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0xf 0x0 0x7fff + clearmonbg ANIM_DEF_PARTNER + call EndureEffect + delay 0x8 + call EndureEffect + delay 0x20 + delay 0xA + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + delay 0x2 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + delay 0x30 + launchtask AnimTask_DoomDesireLightBeam 0x5 0x0 + delay 0x9 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + delay 0x9 + playsewithpan SE_M_MORNING_SUN, 0x0 + delay 0x9 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET + delay 0x19 + fadetobg BG_SKY + waitbgfadeout + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 0x1 SupersonicSkystrikeOnPlayer +SupersonicSkystrikeOnOpponent: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf800 0x800 0x0 0xffff + goto FinishSupersonicSkystrike +SupersonicSkystrikeOnPlayer: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x800 0xf800 0x0 0xffff +FinishSupersonicSkystrike: + waitbgfadein + waitforvisualfinish + monbg ANIM_DEF_PARTNER + setblends 0x80c + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + launchtemplate gSupersonicSkystrikeFlySpriteTemplate 0x2 0x1 0x14 + delay 0x10 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffd0 0xfff0 0x18 @ 12, -24, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xfff0 0xfff6 0x18 @ 16, -38, -10, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffcc 0xffee 0x18 @ 14, -20, -18, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffe0 0xfff0 0x18 @ 12, -36, -16, 24 + delay 0x30 + clearmonbg ANIM_DEF_PARTNER + blendoff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + call UnsetPsychicBg + waitforvisualfinish + end + + +Move_ACID_DOWNPOUR: + loadspritegfx ANIM_TAG_BLUE_ORB @ reversal + loadspritegfx ANIM_TAG_POISON_JAB @ poison jab + loadspritegfx ANIM_TAG_POISON_BUBBLE @ poison bubbles + fadetobg BG_POISON + waitbgfadeout + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 0x1 AcidDownpourOnPlayer +AcidDownpourOnOpponent: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xff10 0x1 0xffff + goto FinishAcidDownpour +AcidDownpourOnPlayer: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf0 0x1 0xffff +FinishAcidDownpour: + waitbgfadein + setblends 0x80c + monbg ANIM_ATTACKER + loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 0xd, 0x6 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x32 0x1 + call AcidDownpourFlareOnAttacker + call AcidDownpourFlareOnAttacker + call AcidDownpourFlareOnAttacker + delay 0x5 + clearmonbg ANIM_ATTACKER + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + blendoff + delay 0x20 + loopsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET, 0xd, 0x3 + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x0 + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x2a + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x54 + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x7e + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0xa8 + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0xd2 + delay 0x20 + panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + launchtask AnimTask_CreateSurfWave 0x2 0x1 ANIM_SURF_PAL_SLUDGE_WAVE + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x7 0xd87c + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x32 0x1 + call AcidDownpourFlare + call AcidDownpourFlare + delay 0x15 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0x15 0x0 0x2a + delay 0x2c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x7 0x0 0xd87c + invisible ANIM_TARGET + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + waitforvisualfinish + end +AcidDownpourFlare: + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_TARGET + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_TARGET + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_TARGET + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_TARGET + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_TARGET + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_TARGET + delay 0x2 + return +AcidDownpourFlareOnAttacker: + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + return + + +Move_TECTONIC_RAGE: + loadspritegfx ANIM_TAG_DIRT_MOUND @ dig + loadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks + loadspritegfx ANIM_TAG_ROCKS @ rollout + loadspritegfx ANIM_TAG_IMPACT @ hit + launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x0 0xb4 + launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x1 0xb4 + monbg_static ANIM_ATTACKER + delay 0x1 + launchtask AnimTask_DigDownMovement 0x2 0x1 0x0 + delay 0x6 + call DigThrowDirt + call DigThrowDirt + call DigThrowDirt + call DigThrowDirt + launchtask AnimTask_TectonicRageRollout 0x2 0x0 + call DigThrowDirt + setblends 0x80c + delay 0x20 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + monbg ANIM_TARGET + launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0x0 0x0 0x1 0x2 + delay 0x1 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + delay 0xa + waitforvisualfinish + clearmonbg ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + invisible ANIM_TARGET + delay 0x5 + invisible ANIM_ATTACKER + waitforvisualfinish + delay 0xa + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + fadetobg BG_TECTONIC_RAGE @ brown/yellow sky uppercut + unloadspritegfx ANIM_TAG_DIRT_MOUND @ dig + unloadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks + unloadspritegfx ANIM_TAG_ROCKS @ rollout + unloadspritegfx ANIM_TAG_IMPACT @ hit + loadspritegfx ANIM_TAG_WARM_ROCK @ eruption + loadspritegfx ANIM_TAG_FIRE_PLUME @ blast burn + loadspritegfx ANIM_TAG_EXPLOSION_2 @ explosion + waitbgfadeout + visible ANIM_TARGET + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff + waitbgfadein + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x1e + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0xc8 0xffe0 0x0 0x64 0x0 + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x1e 0xffe0 0x10 0x5a 0x1 + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x96 0xffe0 0x20 0x3c 0x2 + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x5a 0xffe0 0x30 0x50 0x3 + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x6e 0xffe0 0x40 0x32 0x0 + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x3c 0xffe0 0x50 0x46 0x1 + delay 0x16 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x8 0x3c + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x8 0x3c + loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 0x10, 0xc + delay 0x30 + call TectonicRageExplosion + playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + call TectonicRageExplosion + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + call TectonicRageExplosion + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + call TectonicRageExplosion + waitforvisualfinish + call UnsetPsychicBg + waitbgfadein + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +TectonicRageExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return + + +Move_CONTINENTAL_CRUSH:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly + loadspritegfx ANIM_TAG_MUD_SAND @ dig + loadspritegfx ANIM_TAG_ROCKS @ rocks + loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy + loadspritegfx ANIM_TAG_IMPACT @ hit + loadspritegfx ANIM_TAG_REALLY_BIG_ROCK + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call ContinentalCrashBuffEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call ContinentalCrashBuffEffect + delay 0x8 + call ContinentalCrashBuffEffect + delay 0x4 + delay 0xA + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + delay 0x2 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + delay 0x30 + launchtask AnimTask_GetTimeOfDay 0x2 0x0 + jumpargeq 0x0 0x0 ContinentalCrushDay + jumpargeq 0x0 0x2 ContinentalCrushAfternoon +ContinentalCrushNight: + fadetobg BG_BLUE_SKY_NIGHT + goto FinishContinentalCrush +ContinentalCrushDay: + fadetobg BG_BLUE_SKY_DAY + goto FinishContinentalCrush +ContinentalCrushAfternoon: + fadetobg BG_BLUE_SKY_AFTERNOON +FinishContinentalCrush: + delay 0x18 + invisible ANIM_TARGET + waitbgfadeout + delay 0x5 + visible ANIM_ATTACKER + delay 0x4 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + launchtemplate gContinentalCrushGrowingRockSpriteTemplate 0x2 0x1 0x0 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + invisible ANIM_ATTACKER + waitforvisualfinish + fadetobg BG_IN_AIR + waitbgfadeout + visible ANIM_TARGET + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff + waitbgfadein + loopsewithpan SE_FALL, SOUND_PAN_ATTACKER, 0x20, 0x4 @;Falling sound + delay 0x1e + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0xc8 0xffe0 0x0 0x64 0x0 + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x1e 0xffe0 0x10 0x5a 0x1 + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x96 0xffe0 0x20 0x3c 0x2 + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x5a 0xffe0 0x30 0x50 0x3 + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x6e 0xffe0 0x40 0x32 0x0 + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x3c 0xffe0 0x50 0x46 0x1 + delay 0x16 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x8 0x1c + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x8 0x1c + unloadspritegfx ANIM_TAG_ROUND_SHADOW @ fly + unloadspritegfx ANIM_TAG_MUD_SAND @ dig + unloadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy + unloadspritegfx ANIM_TAG_IMPACT @ hit + loadspritegfx ANIM_TAG_REALLY_BIG_ROCK + delay 0x30 + launchtemplate gContinentalCrushBigRockStompSpriteTemplate, 0x82, 0x4, 0, 0x3c, 3, ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x7 0x0000 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0xffd0 0xfff0 0x18 @ 12, -24, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0xfff0 0xfff6 0x18 @ 16, -38, -10, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0xffcc 0xffee 0x18 @ 14, -20, -18, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0xffe0 0xfff0 0x18 @ 12, -36, -16, 24 + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x7 0x0 0x0000 @undo pal change on tgt + delay 0x10 + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + waitforvisualfinish + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + delay 0x4 + waitforvisualfinish + end +ContinentalCrashBuffEffect: + launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +ContinentalCrushStockpileRocks: + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0xffc0 0x20 @ 0,-32 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x2c 0xffd4 0x20 @ +44,-44 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x3c 0x0 0x20 @ +60,0 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x28 0x28 0x20 @ +40,+40 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0x38 0x20 @ +0,+56 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffda 0x26 0x20 @ -38,+38 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffca 0x0 0x20 @ -54, +0 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffdc 0xffdc 0x20 @ -36, -36 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0xffce 0x20 @ 0, -50 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x22 0xffde 0x20 @ +34, -34 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x2e 0x0 0x20 @ +46, +0 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x20 0x20 0x20 @ +32, +32 + delay 0x2 + return + + +Move_SAVAGE_SPIN_OUT:: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_RAZOR_LEAF @green color + loadspritegfx ANIM_TAG_STRING @string shot + loadspritegfx ANIM_TAG_SPIDER_WEB @spider web + loadspritegfx ANIM_TAG_MUD_SAND @rocks + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + monbg ANIM_ATTACKER + setblends 0x80c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0 + launchtemplate gSavageSpinOutGreenChargeSpriteTemplate 0x2 0x1 0x0 + delay 0x19 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0x14 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0xf + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x4 0x0 0x0 + clearmonbg ANIM_ATTACKER + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + call gSavageSpinOutStringBlastSpriteTemplateSHOT + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x5 0x0 0x32 0x1 + call gSavageSpinOutStringBlastSpriteTemplateSHOT + call gSavageSpinOutStringBlastSpriteTemplateSHOT + call gSavageSpinOutStringBlastSpriteTemplateSHOT + launchtemplate gSpiderWebSpriteTemplate 0x82 0x0 @ spider web + call gSavageSpinOutStringBlastSpriteTemplateSHOT + delay 0xe + blendoff + waitforvisualfinish + unloadspritegfx ANIM_TAG_STRING + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_COCOON + loadspritegfx ANIM_TAG_IMPACT @hit + delay 0x1 + invisible ANIM_TARGET + delay 0x0 + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + delay 0x0 + jumpargeq 0x7 ANIM_TARGET SavageSpinOutOnPlayer +SavageSpinOutOnOpponent: + launchtemplate gSavageSpinOutCacoonSpriteTemplate 0x82 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x80 + goto FinishSavageSpinOut +SavageSpinOutOnPlayer: + launchtemplate gSavageSpinOutCacoonSpriteTemplate 0x3 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x80 +FinishSavageSpinOut: + fadetobg BG_IN_AIR + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff @+0x1000 + waitbgfadein + delay 0x10 + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed @0 + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed @-0x1000 + delay 0x4 + call SavageSpinOutCrash_2 @SeismicToss2 + delay 0xa + call SavageSpinOutCrash_1 @SeismicToss1 + delay 0xa + call SavageSpinOutCrash_2 @SeismicToss2 + delay 0xa + call SavageSpinOutCrash_1 @SeismicToss1 + delay 0xc + call UnsetPsychicBg + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - no idea why though - something to do with the background scrolling + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + delay 0x1E + unloadspritegfx ANIM_TAG_MUD_SAND + unloadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_CUT @cut + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray + launchtask AnimTask_ShakeMonInPlace 0x82 0x5 ANIM_TARGET 0x4 0x0 0xc 0x1 + launchtask AnimTask_ShakeMonInPlace 0x82 0x5 ANIM_TARGET 0x4 0x0 0xc 0x1 + createsprite gSavageSpinOutGreenCutSpriteTemplate, ANIM_TARGET, 2, 0x28, 0xffe0, 0x0 + createsprite gSavageSpinOutGreenCutSpriteTemplate, ANIM_TARGET, 2, 0x28, 0xffd0, 0x0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 0xc + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + launchtemplate gSpiderWebSpriteTemplate 0x82 0x0 @ spider web + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +gSavageSpinOutStringBlastSpriteTemplateSHOT: + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x0 0x0 + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x0 0x0 + delay 0x3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x1 0x0 + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x1 0x0 + delay 0x3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x2 0x0 + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x2 0x0 + delay 0x3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x3 0x0 + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x3 0x0 + delay 0x3 + return +SavageSpinOutCrash_1: + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff8, 0x1, 0x1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffe8 0xfff0 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xffda 0xfff6 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffec 0xffee 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffdc 0xfff0 0x18 + return +SavageSpinOutCrash_2: + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xfff8, 0x1, 0x1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffd0 0xfff0 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xfff0 0xfff6 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffcc 0xffee 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffe0 0xfff0 0x18 + return +SlowSavageSpinOutBackgroundSpeed: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xfd56 0x0 0xffff @-0x2aa + delay 0x1 + return + + +Move_NEVER_ENDING_NIGHTMARE:: + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_ASSURANCE_HAND @purple hand + loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loadspritegfx ANIM_TAG_VERTICAL_HEX @hex + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call NeverendingNightmareBuffEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x40c0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call NeverendingNightmareBuffEffect + delay 0x8 + call NeverendingNightmareBuffEffect + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + call NeverendingNightmareAttackerRings + delay 0x1 + call NeverendingNightmareAttackerRings + delay 0x1 + call NeverendingNightmareAttackerRings + delay 0xa + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + call NeverendingNightmareTargetRings + delay 0x1 + call NeverendingNightmareTargetRings + delay 0x1 + call NeverendingNightmareTargetRings + delay 0x1 + waitforvisualfinish + fadetobg BG_NEVERENDING_NIGHTMARE + waitbgfadein + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x4 0x78 0x1 + playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET + call NeverendingNightmareHands + call NeverendingNightmareHands + delay 0xa + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x10 0x40c0 @ fade to purple + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + loadspritegfx ANIM_TAG_EXPLOSION_2 + unloadspritegfx ANIM_TAG_THIN_RING + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_VERTICAL_HEX, 0x2, 0xA, 0xA, 0x580A @;Purple + call NeverendingNightmareGeyser + playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_TARGET + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + call NeverendingNightmareGeyser + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + call NeverendingNightmareGeyser + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + call NeverendingNightmareGeyser + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x10 0x0 0x40c0 @ fade to normal + waitforvisualfinish + restorebg + waitbgfadeout + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +NeverendingNightmareBuffEffect: + launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +NeverendingNightmareTargetRings: + launchtemplate gNeverEndingNightmareRingTargetSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 + delay 0x8 + return +NeverendingNightmareAttackerRings: + launchtemplate gNeverEndingNightmareRingAttackerSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0xe + return +NeverendingNightmareHands: + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0xffc0 0x20 @ 0,-32 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x2c 0xffd4 0x20 @ +44,-44 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x3c 0x0 0x20 @ +60,0 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x28 0x28 0x20 @ +40,+40 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0x38 0x20 @ +0,+56 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffda 0x26 0x20 @ -38,+38 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffca 0x0 0x20 @ -54, +0 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffdc 0xffdc 0x20 @ -36, -36 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0xffce 0x20 @ 0, -50 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x22 0xffde 0x20 @ +34, -34 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x2e 0x0 0x20 @ +46, +0 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x20 0x20 0x20 @ +32, +32 + delay 0x2 + return +NeverendingNightmareGeyser: + createsprite gNeverEndingNightmareExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0x0005, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xfff1, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xfffb, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0x0012, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0x0005, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 + return + + +Move_CORKSCREW_CRASH:: + loadspritegfx ANIM_TAG_SPIKES @metal bits + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_CORKSCREW @drill + loadspritegfx ANIM_TAG_WHIRLWIND_LINES @whirlwind + loadspritegfx ANIM_TAG_MUD_SAND @rock + monbg ANIM_ATTACKER + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0x6318 @fade atker to gray + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_SPIKES, 0x0, 0xC, 0xC, 0x6318 @;Gray + playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x4f 0x1 + launchtemplate gCorkscrewCrashChargeSpriteTemplate 0x2 0x1 0x0 + call CorkscrewCrashMetalFlare + call CorkscrewCrashMetalFlare + call CorkscrewCrashMetalFlare + call CorkscrewCrashMetalFlare + call CorkscrewCrashMetalFlare + waitforvisualfinish + clearmonbg ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0x6318 @fade atker back + waitforvisualfinish + stopsound + invisible ANIM_ATTACKER + launchtemplate gCorkscrewCrashCorkscrewFlyUpSpriteTemplate 0x2 0x7 0x0 0x0 0x4e0 0x24 0x15 0x1 ANIM_ATTACKER + playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER + fadetobg BG_HIGHSPEED_OPPONENT + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x0 0x1 0xffff + waitbgfadein + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET CorkscrewCrashOnPlayer +CorkscrewCrashOnOpponent: + launchtemplate gCorkscrewCrashRightUpSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 + waitforvisualfinish + delay 0xa + launchtemplate gCorkscrewCrashLeftUpSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 + waitforvisualfinish + visible ANIM_TARGET + delay 0x5 + goto FinishCorkscrewCrash +CorkscrewCrashOnPlayer: + launchtemplate gCorkscrewCrashLeftDownSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 + waitforvisualfinish + delay 0xa + launchtemplate gCorkscrewCrashRightDownSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 + waitforvisualfinish + visible ANIM_TARGET + delay 0x5 +FinishCorkscrewCrash: + launchtemplate gCorkscrewCrashStrikeSpriteTemplate 0x82 0x1 0x14 + loadspritegfx ANIM_TAG_IMPACT @hit + delay 0x10 + stopsound + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x0 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0xf 0x0 0x4 @ shove target down a bit + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xffc0 0x0f + delay 0xf + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x30 + launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03 + call CorkscrewCrashSpinningWind + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x0 + launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03 + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x1 + launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03 + delay 0x4 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x2, 0x0, 0x10, 0x7fff + waitforvisualfinish + delay 0x10 + call ResetFromWhiteScreen + waitforvisualfinish + end +CorkscrewCrashSpinningWind: + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0xfff8 0x1 0x2c 0x0 + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x0 0x1 0x3c 0x1 + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x8 0x1 0x3c 0x2 + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x10 0x1 0x3c 0x3 + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x18 0x1 0x3c 0x4 + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x20 0x1 0x3c 0x0 + return +CorkscrewCrashMetalFlare: + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + return +CorkscrewCrashSprayRocks: + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffe8 0xfff0 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xffda 0xfff6 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffec 0xffee 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffdc 0xfff0 0x18 + return + + +Move_INFERNO_OVERDRIVE:: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x1F + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + fadetobg BG_INFERNO_OVERDRIVE + waitbgfadeout + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET InfernoOverdriveOnPlayer +InfernoOverdriveOnOpponent: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfb00 0x0 0x0 0xFFFF + goto FinishInfernoOverdrive +InfernoOverdriveOnPlayer: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0500 0x0 0x0 0xFFFF +FinishInfernoOverdrive: + waitbgfadein + monbg ANIM_ATTACKER + setblends 0x80c + loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER, 0x13, 0x8 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x4f 0x1 + launchtemplate gInfernoOverdriveChargeSpriteTemplate 0x2 0x1 0x0 + call InfernoOverdriveFireSpin + call InfernoOverdriveFireSpin + call InfernoOverdriveFireSpin + call InfernoOverdriveFireSpin + call InfernoOverdriveFireSpin + waitforvisualfinish + stopsound + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + unloadspritegfx ANIM_TAG_SMALL_EMBER @fire + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_VERTICAL_HEX @red color + clearmonbg ANIM_ATTACKER + launchtemplate gInfernoOverdriveSuperpowerSpriteTemplate 0x83 0x1 0x0 @ super power shot + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + delay 0x10 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x8 0x0 0x10 0x1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x2 0x4f 0x1 + call InfernoOverdriveExplosion + delay 0x6 + call InfernoOverdriveExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x1, 0x0, 0x10, 0x001b @ red bg pal + delay 0x6 + call InfernoOverdriveExplosion + waitforvisualfinish + call ResetFromRedScreen + blendoff + end +InfernoOverdriveFireSpin: + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + return +InfernoOverdriveExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + return + + +Move_HYDRO_VORTEX:: + loadspritegfx ANIM_TAG_SPLASH @dive + loadspritegfx ANIM_TAG_SWEAT_BEAD @dive + loadspritegfx ANIM_TAG_ICE_CRYSTALS @crabhammer bubbles + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_WATER_ORB @whirlpool + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_CreateSurfWave 0x2 0x1 0x0 + delay 0x18 + panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + waitforvisualfinish + loadspritegfx ANIM_TAG_ROUND_SHADOW + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + launchtemplate gDiveBallSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + waitforvisualfinish + playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER + launchtemplate gDiveWaterSplashSpriteTemplate 0x3 0x1 0x0 + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0x15 0x0 0x1a + delay 0x1a + invisible ANIM_TARGET + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7 + delay 0x5 + fadetobg BG_WATER_PULSE + waitbgfadeout + delay 0x5 + visible ANIM_ATTACKER + visible ANIM_TARGET + loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x3 + call HydroVortexBubbles + loadspritegfx ANIM_TAG_FOCUS_ENERGY + playsewithpan SE_M_WATERFALL, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5da0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + waitforvisualfinish + unloadspritegfx ANIM_TAG_SPLASH + unloadspritegfx ANIM_TAG_SWEAT_BEAD + loadspritegfx ANIM_TAG_IMPACT + launchtemplate gHydroVortexSuperpowerSpriteTemplate 0x83 0x1 0x0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + invisible ANIM_ATTACKER + delay 0x10 + launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x10 0x5da0 + loadspritegfx ANIM_TAG_GUST + launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x8 0x3c + call HydroVortexWhirlpoolHurricane + call HydroVortexWhirlpoolHurricane + call HydroVortexWhirlpoolHurricane + call HydroVortexWhirlpoolHurricane + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x10 0x0 0x5da0 + waitforvisualfinish + restorebg + waitbgfadeout + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +HydroVortexBubbles: + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xa 0xa 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xa, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x14 0xffec 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xffec, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff1 0xf 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff1, 0xf, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x0 0x0 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x0, 0x0, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff6 0xffec 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff6, 0xffec, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x10 0xfff8 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x10, 0xfff8, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x5 0x8 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x5, 0x8, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff0 0x0 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff0, 0x0, 0x14, ANIM_TARGET + return +HydroVortexWhirlpoolHurricane: + playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET + launchtemplate gHydroVortexHurricaneSpriteTemplate 0x82 0x2 0x0 0xfff0 + launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xfff6 0xfff8 0x1 0x1 + launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 0x1 + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 0x1 + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a 0x1 + delay 0x2 + launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 0x1 + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e 0x1 + launchtemplate gHydroVortexHurricaneSpriteTemplate 0x82 0x2 0x0 0xfff0 + launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce 0x1 + delay 0x2 + return + + +Move_BLOOM_DOOM:: + loadspritegfx ANIM_TAG_FLOWER @petal + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_RAZOR_LEAF @green + loadspritegfx ANIM_TAG_GUST @hurricane + loadspritegfx ANIM_TAG_VERTICAL_HEX @hex diamond + monbg ANIM_ATTACKER + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + setblends 0x80c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0 + loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x9, 0x3 + launchtemplate gBloomDoomGreenChargeSpriteTemplate 0x2 0x1 0x0 + delay 0x3C + blendoff + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4 + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14 + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x4 0x0 0x0 + waitforvisualfinish + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + fadetobg BG_BLOOM_DOOM + waitbgfadein + loadspritegfx ANIM_TAG_ORBS + delay 0x5 + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x18 0x10 0x0 0x2 0x2 0x0 0x0 + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x40 0x18 0x0 0x3 0x1 0x1 0x0 + launchtemplate gAromatherapyBigFlowerSpriteTemplate 0x0 0x7 0x10 0x18 0x0 0x2 0x1 0x0 0x0 + delay 0x5 + launchsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 + launchtask AnimTask_ShakeMon 0x2 0x5 0x0 0x0 0x4 0x32 0x1 @ shake attacker + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x72 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0xb 0x33ed + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x30 0xc 0x0 0x4 0x3 0x1 0x0 + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x64 0x10 0x0 0x3 0x2 0x0 0x0 + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x4a 0x18 0xb4 0x3 0x2 0x0 0x0 + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x50 0x1e 0x0 0x4 0x1 0x1 0x0 + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x80 0xc 0x0 0x3 0x3 0x0 0x0 + launchtemplate gAromatherapyBigFlowerSpriteTemplate 0x0 0x7 0x5a 0x10 0x0 0x2 0x1 0x0 0x0 + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0xb 0x0 0x33ed + loadspritegfx ANIM_TAG_EXPLOSION @explosion + call BloomDoomPetalBlast + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF, 0x1, 0x0, 0x10, 0x33ed + call BloomDoomPetalBlast + launchtask AnimTask_IsTargetPartner 0x5 0x0 + jumpargeq 0x0 0x1 BloomDoomFadeScreenTargetPartner + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x1, 0x0, 0x10, 0x33ed @ green bg pal +BloomDoomEnding: + call BloomDoomPetalBlast + waitforvisualfinish + clearmonbg ANIM_ATTACKER + call ResetFromGreenScreen + end +BloomDoomFadeScreenTargetPartner: + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x1, 0x0, 0x10, 0x33ed @ green bg pal + goto BloomDoomEnding +BloomDoomHurricane: + launchtemplate gBloomDoomHurricaneSpriteTemplate 0x2 0x2 0x0 0xfff0 + launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + return +BloomDoomFlowerGeyser: + launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0xfffc 0x10 @ -4, -0x10 + delay 0x0 + launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x100D 0x10 @ + delay 0x0 + launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x4 0x10 + delay 0x0 + launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0xfff0 0x10 + delay 0x0 + return +BloomDoomHyperBeam: + launchtemplate gBloomDoomGreenBeamSpriteTemplate 0x82 0x0 + launchtemplate gBloomDoomGreenBeamSpriteTemplate 0x82 0x0 + delay 0x1 + return +BloomDoomPetalBlast: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0xffe0 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x16 0xffea 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x1e 0x0 0x10 + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0x1c 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffed 0x13 0x10 + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffe5 0x0 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffee 0xffee 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0xffe7 0x10 + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBloomDoomExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x11 0xffef 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x17 0x0 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x10 0x10 0x10 + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBloomDoomExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x2 + return +ResetFromGreenScreen: + launchtask AnimTask_AllBanksInvisible 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x0, 0x33ED @Everything from green + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + waitforvisualfinish + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG, 0x1, 0x0, 0x0, 0x33ED + waitforvisualfinish + return + + +Move_GIGAVOLT_HAVOC:: + loadspritegfx ANIM_TAG_HAVOC_SPEAR + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_ELECTRICITY + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_GRAY_SMOKE + loadspritegfx ANIM_TAG_THIN_RING + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x6 0x0 0x10 0x0000 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gGigavoltHavocChargingSpearSpriteTemplate 0x2 0x1 ANIM_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0xa + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x0 + delay 0x5 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x5 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x20 0x14 0x0 0x0 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x60 0x14 0x1 0x0 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xa0 0x14 0x0 0x0 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xe0 0x14 0x2 0x0 + delay 0x5 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + monbg ANIM_ATTACKER + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + waitforvisualfinish + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + launchtemplate gGigavoltHavocLaunchSpearSpriteTemplate 0x83 0x1 0x0 + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10 + delay 0x2 + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0 + delay 0xe + clearmonbg ANIM_ATTACKER + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x1c @shake target + unloadspritegfx ANIM_TAG_HAVOC_SPEAR + loadspritegfx ANIM_TAG_SHOCK_3 @thunderbolt + launchtemplate gThunderboltOrbSpriteTemplate 0x83 0x4 0x2c 0x0 0x0 0x3 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0x0 0xc 0x5bff +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x8003 + playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET + delay 0x19 + loadspritegfx ANIM_TAG_VERTICAL_HEX + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF, 0x2, 0xc, 0x0, 0x5bff + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG, 0x1, 0x10, 0x0, 0x0000 + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xa 0x0 + waitforvisualfinish + end +HavocSpearGeyser: + createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 @ -4, -0x10 + delay 1 + createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 @ + delay 1 + createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 + delay 1 + createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 + delay 1 + return +HavocSpearSparkTarget: +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x0 0x14 0x0 0x8000 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x0 0x14 0x0 0x8000 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x40 0x14 0x1 0x8000 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x40 0x14 0x1 0x8000 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x80 0x14 0x0 0x8000 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x80 0x14 0x0 0x8000 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000 + return + + +Move_SHATTERED_PSYCHE:: + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL @reflect + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_PINK_PETAL @pink + loadspritegfx ANIM_TAG_TORN_METAL @brick break shatter + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPalExclude 0x5 0x5 0x0 0x0 0x0 0x10 0x0 + waitforvisualfinish + launchtask AnimTask_SetAllNonAttackersInvisiblity 0x5 0x1 0x1 + waitforvisualfinish + launchtemplate gShatteredPsychePinkChargeSpriteTemplate 0x2 0x1 0x0 + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + delay 0x4 + fadetobg BG_SHATTERED_PSYCHE + delay 0x4 + launchtask AnimTask_BlendBattleAnimPalExclude 0x5 0x5 0x0 0x0 0x10 0x0 0x0 + delay 0x7 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0xf 0x1 + launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1 + waitforvisualfinish +ShatteredPsycheCheckBattler: + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET ShatteredPsycheOnPlayer +ShatteredPsycheOnOpponent: + call ShatteredPsycheFlingOpponent + waitforvisualfinish + goto ShatteredPsycheFinish +ShatteredPsycheOnPlayer: + call ShatteredPsycheFlingPlayer + waitforvisualfinish + call ShatteredPsycheFlingPlayer + waitforvisualfinish +ShatteredPsycheFinish: + delay 0x8 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + restorebg + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0xf 0x1 + launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x0 @ -8, -12 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x0 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x2, 0x0, 0x0 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x3, 0x0, 0x0 + waitbgfadeout + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +ShatteredPsycheFlingOpponent: + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26, +16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, -16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0xfff0 0x1 0x4 @ -26,-16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0x10 0x1 0x1 @ 26, 16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x0 0x20 0x1 0x4 @ 0,32 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x0 0xffe0 0x1 0x1 @ 0, -32 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x0 0xffe0 0x1 0x4 @ 0,-32 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x0 0x20 0x1 0x1 @ 0, 32 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0x10 0x1 0x4 @ 26,16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0xfff0 0x1 0x1 @ -26, -16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0xffe0 0x1 0x4 @ 26,-16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0x10 0x1 0x1 @ 0, 32 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x5 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26, +16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, -16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0xfff0 0x1 0x4 @ -26,-16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0x10 0x1 0x1 @ 26, 16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + return +ShatteredPsycheFlingPlayer: + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26,-16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, 16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x20 0x0 0x1 0x4 @ 32,0 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe0 0x0 0x1 0x1 @ + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe0 0x0 0x1 0x4 @ -32,0 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x20 0x0 0x1 0x1 @ 32, 0 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xa 0x20 0x1 0x4 @ 10, -32 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xfff6 0x5 0x1 0x1 @ 10, -32 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x5 + waitforvisualfinish + return + + +Move_SUBZERO_SLAMMER:: + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice + loadspritegfx ANIM_TAG_ICE_CUBE @glacier + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x6A23 + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + fadetobg BG_ICE + waitbgfadeout + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET SubzeroSlammerOnPlayer +SubzeroSlammerOnOpponent: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfd00 0x0 0x0 0xFFFF + goto SubzeroSlammerFinish +SubzeroSlammerOnPlayer: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0300 0x0 0x0 0xFFFF +SubzeroSlammerFinish: + waitbgfadein + monbg ANIM_ATK_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x0 0xb 0x7e80 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x0 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x4 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x8 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0xc + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x10 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x14 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x18 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x20 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0x7e80 + delay 0x20 + launchtask AnimTask_FrozenIceCubeAttacker 0x2 0x0 + waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 0x11 + waitforvisualfinish + call SubzeroSlammerIceSwirl + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x7e80 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call SubzeroSlammerIceSwirl + call SubzeroSlammerIceSwirl + delay 0xa + clearmonbg ANIM_ATK_PARTNER + launchsoundtask SoundTask_LoopSEAdjustPanning 0x7 0xb0 0xffc0 SOUND_PAN_TARGET 0x4 0x4 0x0 0xa + launchtemplate gIceBeamOuterCrystalSpriteTemplate 0x2 0x5 0x14 0xc 0x0 0xc 0x14 + launchtemplate gIceBeamOuterCrystalSpriteTemplate 0x2 0x5 0x14 0xfff4 0x0 0xfff4 0x14 + delay 0x1 + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x7 0x7e80 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0x19 0x1 + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceCrystalEffectShort + delay 0x5 + monbg ANIM_DEF_PARTNER + launchtask AnimTask_FrozenIceCube 0x82 0x0 + playsewithpan SE_M_HAIL, SOUND_PAN_TARGET + waitforvisualfinish + loadspritegfx ANIM_TAG_TORN_METAL + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + delay 0x3 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x0 @ -8, -12 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x0 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x2, 0x0, 0x0 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x3, 0x0, 0x0 + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x1c + call SubzeroSlammerExplosion + call SubzeroSlammerExplosion + clearmonbg ANIM_DEF_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x5 0x7 0x0 0x7e80 + waitforvisualfinish + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + waitforvisualfinish + end +SubzeroSlammerExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + delay 0x3 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xa 0x14 0x0 + delay 0x3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + delay 0x3 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + delay 0x3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + delay 0x3 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0 + delay 0x3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0x14 0x2 0x0 + delay 0x3 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + delay 0x3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + delay 0x3 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + delay 0x3 + return +SubzeroSlammerIceSwirl: + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + return + + +Move_DEVASTATING_DRAKE:: + loadspritegfx ANIM_TAG_PURPLE_DRAKE + loadspritegfx ANIM_TAG_POISON_BUBBLE @ purple + loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @ shock wave + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call DevastatingDrakeBuffEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x40c0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call DevastatingDrakeBuffEffect + delay 0x8 + call DevastatingDrakeBuffEffect + waitforvisualfinish + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeShockwaveSpriteTemplate 0x2 0x0 + delay 0x2a + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + monbg ANIM_ATTACKER + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeDrakeUpSpriteTemplate 0x2 0x7 0x0 0x0 0x4e0 0x24 0x15 0x1 ANIM_ATTACKER + clearmonbg ANIM_ATTACKER + fadetobg BG_SKY + invisible ANIM_ATTACKER + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff + waitbgfadein + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET DevastatingDrakeOnPlayer +DevastatingDrakeOnOpponent: + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 @left to right + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 @right to left + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0x0f 0x15 @left to right + goto DevastatingDrakeFinish +DevastatingDrakeOnPlayer: + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 @right to left + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 @left to right + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x78 0xfff0 0x58 0x15 @right to left +DevastatingDrakeFinish: + call UnsetPsychicBg + waitforvisualfinish + visible ANIM_TARGET + delay 0xa + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeStrikeSpriteTemplate 0x82 0x1 0x14 + delay 0x10 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + loadspritegfx ANIM_TAG_EXPLOSION + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION, 0x0, 0xC, 0xC, 0x502B + launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x5 0x35 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x10 0x40c0 @ fade to purple + call DevastatingDrakeExplosion + delay 0x6 + launchtask AnimTask_IsTargetPartner 0x5 0x0 + jumpargeq 0x0 0x1 DevastatingDrakeFadeTargetPartner + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x6, 0x0, 0x10, 0x40c0 + call DevastatingDrakeExplosion + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back +DevastatingDrakeUniversalEnding: + loadspritegfx ANIM_TAG_FIRE_PLUME + loadspritegfx ANIM_TAG_VERTICAL_HEX + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + unloadspritegfx ANIM_TAG_PURPLE_DRAKE + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_FIRE_PLUME, 0x0, 0xC, 0xC, 0x502B + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_VERTICAL_HEX, 0x0, 0xC, 0xC, 0x502B + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x502B + launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x5 0x20 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + call DevastatingDrakeGeyser + playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + call DevastatingDrakeGeyser + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + call DevastatingDrakeGeyser + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + call DevastatingDrakeGeyser + delay 0x4 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x10 0x0 0x40c0 @ fade from purple + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x0 @ reset all colours + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +DevastatingDrakeFadeTargetPartner: + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x6, 0x0, 0x10, 0x40c0 + call DevastatingDrakeExplosion + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back + goto DevastatingDrakeUniversalEnding +DevastatingDrakeBuffEffect: + launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +DevastatingDrakeGeyser: + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0x0005 0x1 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xfff1 0x1 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xfffb 0x1 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0012 0x1 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0x0005 0x1 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xfff5 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffe1 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffeb ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0002 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xfff5 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xffe5 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffd1 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffdb ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0xfff2 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xffe5 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + return +DevastatingDrakeExplosion: + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + return + + +Move_BLACK_HOLE_ECLIPSE:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave + loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_ICE_CHUNK @blue + loadspritegfx ANIM_TAG_BLACK_BALL_2 @black + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call EndureEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x0000 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call EndureEffect + delay 0x8 + call EndureEffect + waitforvisualfinish + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseShockwaveSpriteTemplate 0x2 0x0 + waitforvisualfinish + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseHoleUserSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_ATTACKER 0x0 + launchtemplate gBlackHoleEclipseBlueRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseBlackRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseBlueRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseBlackRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + delay 0x8 + waitforvisualfinish + stopsound + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x07 0x0000 + loadspritegfx ANIM_TAG_WISP_ORB @will o wisp + invisible ANIM_ATTACKER + loopsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x10, 0x5 + launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x2 0x3 0x0 0x10 0x0 + delay 0x3 + launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x3 0x3 0x0 0x10 0x1 + delay 0x3 + launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x4 0x3 0x0 0x10 0x2 + delay 0x3 + launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x4 0x3 0x0 0x10 0x3 + waitforvisualfinish + fadetobg BG_BLACKHOLE_ECLIPSE + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + delay 0x4 + launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + delay 0x4 + launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + waitbgfadeout + unloadspritegfx ANIM_TAG_WISP_ORB + launchtemplate gBlackHoleEclipseHoleSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 @ eclipse at target origin + delay 0x10 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 @ target down and left (instantaneously (last arg)) + delay 0x2 + visible ANIM_TARGET + loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x5 + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin target around (0x50 (time), -0x400 (rot speed)) + launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly) + launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x15 + invisible ANIM_TARGET + delay 0x8 + launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseHoleShrinkSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 + waitforvisualfinish + loadspritegfx ANIM_TAG_SPARKLE_4 @detect + launchtemplate gTargetTwinkleSpriteTemplate 0xd 0x3 0x0 0x0 ANIM_TARGET @detect star + delay 0x2 + unloadspritegfx ANIM_TAG_SHADOW_BALL + unloadspritegfx ANIM_TAG_THIN_RING + unloadspritegfx ANIM_TAG_ICE_CHUNK + unloadspritegfx ANIM_TAG_BLACK_BALL_2 + loadspritegfx ANIM_TAG_EXPLOSION_2 + call BlackHoleEclipseExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x1, 0x0, 0x10, 0x7fff @ bg to white pal + call BlackHoleEclipseExplosion + waitforvisualfinish + delay 0x18 + invisible ANIM_TARGET + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix rotation + invisible ANIM_TARGET + delay 0x1 + waitforvisualfinish + call ResetFromWhiteScreen + end +BlackHoleEclipseExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return +ResetFromWhiteScreen: + launchtask AnimTask_AllBanksInvisible 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x7FFF @everything from white + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + waitforvisualfinish + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x7fff + waitforvisualfinish + return + + +Move_TWINKLE_TACKLE:: + loadspritegfx ANIM_TAG_SPARKLE_2 @star + loadspritegfx ANIM_TAG_PINK_PETAL @pink + loadspritegfx ANIM_TAG_THIN_RING @ring + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + call TwinkleTacklePinkStars + delay 0x8 + fadetobg BG_TWINKLE_TACKLE + launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + waitbgfadeout + invisible ANIM_TARGET + delay 0x1 + loadspritegfx ANIM_TAG_YELLOW_STAR + launchtemplate gTwinkleTackleStarGrowSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + waitforvisualfinish + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET TwinkleTackleOnPlayer +TwinkleTackleOnOpponent: + call PlayerTwinkling + goto TwinkleTackleFinish +TwinkleTackleOnPlayer: + call OpponentTwinkling +TwinkleTackleFinish: + waitforvisualfinish + delay 0x5 + visible ANIM_ATTACKER + visible ANIM_TARGET + launchtask AnimTask_SwayMon 0x5 0x5, 0x0 0x8 2048 1 ANIM_ATTACKER + call TwinkleTackleStars + waitforvisualfinish + launchtask AnimTask_SwayMon 0x5 0x5, 0x0 0x8 2048 1 ANIM_ATTACKER + call TwinkleTackleStars + waitforvisualfinish + loadspritegfx ANIM_TAG_SPARKLE_4 @detect + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_PAIN_SPLIT @pain-split + delay 0x1 + launchtemplate gTwinkleTackleYellowImpactSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0 + call TwinkleTackleStarsTarget + playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET + delay 0x5 + launchtask AnimTask_TwinkleTackleLaunch 0x2 0x1 89 + delay 89 + playsewithpan SE_M_DETECT, SOUND_PAN_TARGET + launchtemplate gTwinkleTackleTwinkleSpriteTemplate 0x8d, 0x3, 0x0 0x0 ANIM_TARGET @detect star + waitforvisualfinish + delay 0x10 + restorebg + delay 0x18 + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +TwinkleTacklePinkStars: + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + delay 0x8 + launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + delay 0x8 + launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + return +PlayerTwinkling: + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x12 0x0 0x0 0x0 0x20 0x1c + delay 0x3 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x1f 0xfffb 0x0 0x0 0x20 0x1c + delay 0x16 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x20 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x10 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x0 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xfff0 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffe0 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffd0 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffc0 0xffc0 0x0 0x0 0x20 0x1c + return +OpponentTwinkling: + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x10 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x20 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xa0 0xfffb 0x0 0x0 0x20 0x1c + delay 0x5 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xa0 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0x2c 0x0 0x0 0x20 0x1c + return +TwinkleTackleStars: + playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER + launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + return +TwinkleTackleStarsTarget: + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0 + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8 + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0 + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1 + return + +@ signature z moves +Move_CATASTROPIKA:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call EndureEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call EndureEffect + delay 0x8 + call EndureEffect + delay 0x8 + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + waitforvisualfinish + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + unloadspritegfx ANIM_TAG_ROUND_SHADOW + launchtask AnimTask_GetTimeOfDay 0x2 0x0 + jumpargeq 0x0 0x0 CatastropikaDaytime + jumpargeq 0x0 0x2 CatastropikaAfternoon +CatastropikaNight: + fadetobg BG_BLUE_SKY_NIGHT + goto CatastropikaFinish +CatastropikaDaytime: + fadetobg BG_BLUE_SKY_DAY + goto CatastropikaFinish +CatastropikaAfternoon: + fadetobg BG_BLUE_SKY_AFTERNOON +CatastropikaFinish: + waitbgfadeout + visible ANIM_ATTACKER + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_SPARK_2 @spark + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3 +@ delay 0x14 +@ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 +@ delay 0x14 +@ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER @ charge + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0xe0 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + restorebg + waitbgfadeout + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + waitforvisualfinish + loadspritegfx ANIM_TAG_METEOR + invisible ANIM_ATTACKER + visible ANIM_TARGET + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtemplate gCatastrokpikaSuperpowerSpriteTemplate 0x83 0x1 0x0 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0x1 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0x1 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0xd + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + loadspritegfx ANIM_TAG_MUD_SAND + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24 + loadspritegfx ANIM_TAG_LIGHTNING @thunder + call CatastropikaThundering + invisible ANIM_TARGET + unloadspritegfx ANIM_TAG_MUD_SAND + call CatastropikaThundering + call CatastropikaThundering + call CatastropikaThundering + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x7fff @ bg to white + call CatastropikaThundering + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x10, 0x0, 0x7fff @ bg to white + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 @fix tgt position + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +CatastropikaThundering: + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0 + delay 2 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10 + delay 2 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0 + delay 2 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10 + delay 2 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0 + delay 2 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10 + delay 2 + return + + +Move_10000000_VOLT_THUNDERBOLT:: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_SPARK_2 @sparks + loadspritegfx ANIM_TAG_LIGHTNING @lightning + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call EndureEffect + waitforvisualfinish + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate g10MillionVoltBoltYellowFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xe0 0x28 0x2 0x3 + delay 0x2 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x20 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x60 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xa0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xe0 0x28 0x2 0x3 + delay 0x2 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xe0 0x28 0x2 0x3 + waitforvisualfinish + unloadspritegfx ANIM_TAG_ROUND_SHADOW + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + fadetobg BG_THUNDER + waitbgfadeout + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xff00 0x0 0x1 0xffff + waitbgfadein + visible ANIM_ATTACKER + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x10 + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash + launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER @ charge + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xffdc + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xffec + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xc + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xffdc + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xffec + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xc + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xffdc + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xffec + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xc + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x10 + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xffdc + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xffec + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xc + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + waitforvisualfinish + call UnsetPsychicBg + visible ANIM_TARGET + loadspritegfx ANIM_TAG_ORBS @hyper beam + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_BERRY_EATEN @pink + loadspritegfx ANIM_TAG_LEAF @green + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER, 0x5, 0xA + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1 +@ launchtask AnimTask_FlashAnimTagWithColor, 0x2, 0x7, ANIM_TAG_ORBS, 0x1, 0xc, 0x1f, 0x10, 0x0, 0x0 + call TenMillionVoltThunderboltBeamRed + call TenMillionVoltThunderboltBeamBlue + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x4 0x0 0x32 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x07FE + call TenMillionVoltThunderboltBeamPink + call TenMillionVoltThunderboltBeamYellow + call TenMillionVoltThunderboltBeamGreen + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1 + call TenMillionVoltThunderboltBeamPurple + call TenMillionVoltThunderboltBeamRed + call TenMillionVoltThunderboltBeamBlue + call TenMillionVoltThunderboltBeamPink + call TenMillionVoltThunderboltBeamYellow + call TenMillionVoltThunderboltBeamGreen + call TenMillionVoltThunderboltBeamPurple + call TenMillionVoltThunderboltBeamRed + call TenMillionVoltThunderboltBeamBlue + call TenMillionVoltThunderboltBeamPink + call TenMillionVoltThunderboltBeamYellow + call TenMillionVoltThunderboltBeamGreen +@ call TenMillionVoltThunderboltBeamPurple +@ call TenMillionVoltThunderboltBeamRed +@ call TenMillionVoltThunderboltBeamBlue +@ call TenMillionVoltThunderboltBeamPink +@ call TenMillionVoltThunderboltBeamYellow +@ call TenMillionVoltThunderboltBeamGreen +@ call TenMillionVoltThunderboltBeamPurple + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 +@ delay 0x6 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 +@ delay 0x6 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate g10MillionVoltBoltShockwaveSpriteTemplate 0x82 0x0 @ charge out and in + waitforvisualfinish + unloadspritegfx ANIM_TAG_ORBS @hyper beam + unloadspritegfx ANIM_TAG_VERTICAL_HEX @red + unloadspritegfx ANIM_TAG_WATER_ORB @blue + unloadspritegfx ANIM_TAG_BERRY_EATEN @pink + unloadspritegfx ANIM_TAG_LEAF @green + unloadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loadspritegfx ANIM_TAG_EXPLOSION @explosion + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x2c +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x30 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 + call TenMillionVoltThunderboltSparkGeyser +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x37 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x7fff + call TenMillionVoltThunderboltSparkGeyser + waitforvisualfinish + delay 0x10 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x3, 0x10, 0x0, 0x7fff + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +TenMillionVoltThunderboltBeamRed: + launchtemplate g10MillionVoltBoltRedBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltRedBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltBeamBlue: + launchtemplate g10MillionVoltBoltBlueBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltBlueBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltBeamPink: + launchtemplate g10MillionVoltBoltPinkBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltPinkBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltBeamYellow: + launchtemplate g10MillionVoltBoltYellowBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltYellowBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltBeamGreen: + launchtemplate g10MillionVoltBoltGreenBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltGreenBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltBeamPurple: + launchtemplate g10MillionVoltBoltPurpleBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltPurpleBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltSparkGeyser: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x8 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x8 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + return + + +Move_STOKED_SPARKSURFER:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_SPARK_2 @spark + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gStokedSparksurferFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xe0 0x28 0x2 0x3 + delay 0x2 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xe0 0x28 0x2 0x3 + delay 0x2 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xe0 0x28 0x2 0x3 + waitforvisualfinish + unloadspritegfx ANIM_TAG_ROUND_SHADOW + launchtask AnimTask_GetTimeOfDay 0x2 0x0 + jumpargeq 0x0 0x0 StokedSparksurferDay + jumpargeq 0x0 0x2 StokedSparksurferAfternoon +StokedSparksurferNight: + fadetobg BG_BLUE_SKY_NIGHT + goto StokedSparksurferFinish +StokedSparksurferAfternoon: + fadetobg BG_BLUE_SKY_AFTERNOON +StokedSparksurferDay: + fadetobg BG_BLUE_SKY_DAY +StokedSparksurferFinish: + waitbgfadeout + visible ANIM_ATTACKER + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x1c 0x2 0xc + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x3c 0x1 + call EndureEffect + delay 0x8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x5 0x0 0x10 0x5bff + call EndureEffect + delay 0x8 + call EndureEffect + delay 0x2 + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_ELECTRICITY + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x10 0x0 0x5bff + launchtemplate gVoltTackleOrbSlideSpriteTemplate 0x1 0x0 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x0 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x1 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x2 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x3 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + delay 0x1 + fadetobg BG_ZMOVE_ACTIVATE + waitbgfadeout + visible ANIM_TARGET + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x4 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + waitforvisualfinish + unloadspritegfx ANIM_TAG_SPARK + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + unloadspritegfx ANIM_TAG_ELECTRIC_ORBS + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x5 0x1c + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x30 0x2c 0xc0 0x28 0x2 0x8003 + call StokedSparksurferSparkGeyser + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF | ANIM_PAL_ATK, 0x2, 0x0, 0x10, 0x5bff + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x80 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x37 0x2c 0xc0 0x28 0x2 0x8003 + call StokedSparksurferSparkGeyser + launchtask AnimTask_VoltTackleAttackerReappear 0x5 0x0 @ attacker flicker back + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10 + delay 0x2 + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0 + delay 0x4 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF | ANIM_PAL_ATK, 0x2, 0x10, 0x0, 0x5bff + restorebg + delay 0x18 + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end + +StokedSparksurferSparkGeyser: + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x80 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x80 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x1a + return + + +Move_EXTREME_EVOBOOST:: + loadspritegfx ANIM_TAG_LEER @leer + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_ATK_PARTNER | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x3, 0x0, 0x10, 0x0000 + waitforvisualfinish + launchtask AnimTask_AllBanksInvisible 0xA 0x0 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ATK | ANIM_PAL_ATK_PARTNER | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 3, 0, 0, 0 @;Remove fading on everyone + waitforvisualfinish + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x18 0xfff4 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffe8 0xfff4 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x28 0xfff0 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xfff8 0xfff0 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x8 0xfffe + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffd8 0xfffe + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x10 0x5 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffe0 0x5 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x20 0xfff0 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xfff0 0xfff0 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x5 0x0 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffd5 0x0 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x1c 0x5 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffec 0x5 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xf 0xfff4 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffdf 0xfff4 + waitforvisualfinish + fadetobg BG_ZMOVE_ACTIVATE + waitbgfadeout + unloadspritegfx ANIM_TAG_LEER + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_BERRY_EATEN @pink + loadspritegfx ANIM_TAG_ICE_CHUNK @ice + loadspritegfx ANIM_TAG_WISP_ORB @will o wisp + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loadspritegfx ANIM_TAG_LEAF @green + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0x10, 0x10, 0x5bff + waitforvisualfinish + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + launchtemplate gExtremeEvoboostRedChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostPinkChargeUpSpriteTemplate 0x82 0x7 0x0 0x20 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostIceChargeUpSpriteTemplate 0x82 0x7 0x0 0x21 0x540 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostBlackChargeUpSpriteTemplate 0x82 0x7 0x0 0x1f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostBlueChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostPurpleChargeUpSpriteTemplate 0x82 0x7 0x0 0x21 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostYellowChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostGreenChargeUpSpriteTemplate 0x82 0x7 0x0 0x20 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + waitforvisualfinish + visible ANIM_ATTACKER + loopsewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x15, 0xd + call ExtremeEvoboostColorCircle + launchtask AnimTask_StockpileDeformMon 0x5 0x0 @stockpile movement + call ExtremeEvoboostColorCharge + call ExtremeEvoboostColorCharge + call ExtremeEvoboostColorCharge + waitforvisualfinish + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ATK | ANIM_PAL_BG, 0x0, 0x0, 0x10, 0x7fff + delay 0x18 + call ResetFromWhiteScreen + end +ExtremeEvoboostColorCircle: + launchtemplate gExtremeEvoboostRedChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostIceChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + return +ExtremeEvoboostColorCharge: + launchtemplate gExtremeEvoboostRedChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostRedStockpileSpriteTemplate 0x2 0x3 0x37 0x37 0xd + delay 0x2 + launchtemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostPinkStockpileSpriteTemplate 0x2 0x3 0xffc9 0xffc9 0xd + delay 0x2 + launchtemplate gExtremeEvoboostIceChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostIceStockpileSpriteTemplate 0x2 0x3 0x0 0x37 0xd + delay 0x2 + launchtemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostBlackStockpileSpriteTemplate 0x2 0x3 0x0 0xffc9 0xd + delay 0x2 + launchtemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostBlueStockpileSpriteTemplate 0x2 0x3 0x37 0xffde 0xd + delay 0x2 + launchtemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostPurpleStockpileSpriteTemplate 0x2 0x3 0x37 0x22 0xd + delay 0x2 + launchtemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostYellowStockpileSpriteTemplate 0x2 0x3 0xffc9 0xffde 0xd + delay 0x2 + launchtemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostGreenStockpileSpriteTemplate 0x2 0x3 0xffc9 0x22 0xd + delay 0x2 + return + + +Move_PULVERIZING_PANCAKE:: + loadspritegfx ANIM_TAG_SPARKLE_4 @detect + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_MUD_SAND @dig + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @black colour + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET PulverizingPancakeOnPlayer +PulverizingPancakeOnOpponent: + launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0x14 0xffec + goto PulverizingPancakeFinish +PulverizingPancakeOnPlayer: + launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0xa 0xfff2 + launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0xfff6 0xfff2 +PulverizingPancakeFinish: + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_SOLAR_BEAM_OPPONENT + waitbgfadeout + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x32 0x1 + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + delay 0x2 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x22 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x22 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x22 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x22 + unloadspritegfx ANIM_TAG_SPARKLE_4 + unloadspritegfx ANIM_TAG_VERTICAL_HEX + fadetobg BG_IN_AIR + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff + waitbgfadein + loadspritegfx ANIM_TAG_WHITE_SHADOW + launchtask AnimTask_PulverizingPancakeWhiteShadow 0x5 0x2 0x33 0x33 @first arg is duration, last arg is move speed + delay 0x10 + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0xb 0x0000 @ target darkens + call PulverizingPancakeSlowBackground @0 + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground @-0x1000 + delay 0x1 + waitbgfadein + loadspritegfx ANIM_TAG_THIN_RING @ring + unloadspritegfx ANIM_TAG_MUD_SAND @dig + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @yellow + launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 + delay 0x7 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBasicHitSplatSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0 @big hit marker + delay 0x0 + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x4 0x2c + launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 + delay 0x5 + loadspritegfx ANIM_TAG_EXPLOSION @explosion + call PulverizingPancakeExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x7fff @ everything goes white + call PulverizingPancakeExplosion + waitforvisualfinish + call ResetFromWhiteScreen + end +PulverizingPancakeDiggingRun: + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x5 + return +PulverizingPancakeSlowBackground: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xfd56 0x0 0xffff @-0x2aa + delay 0x1 + return +PulverizingPancakeExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 + launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 + launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return + + +Move_GENESIS_SUPERNOVA:: + loadspritegfx ANIM_TAG_BLUE_ORB @reversal + loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble + loadspritegfx ANIM_TAG_POISON_JAB @purple + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + call SetPsychicBackground + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET GenesisSupernovaOnPlayer +GenesisSupernovaOnOpponent: + call GenesisSupernovaBuffEffectPlayer_1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0xd87c + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x70 0x1 + call GenesisSupernovaBuffEffectPlayer_2 + call GenesisSupernovaBuffEffectPlayer_1 + goto GenesisSupernovaFinish +GenesisSupernovaOnPlayer: + call GenesisSupernovaBuffOpponent_1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0xd87c + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x70 0x1 + call GenesisSupernovaBuffOpponent_2 + call GenesisSupernovaBuffOpponent_1 +GenesisSupernovaFinish: + loopsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER, 0x18, 0x6 + call GenesisSupernovaReversalWave + call GenesisSupernovaReversalWave + call GenesisSupernovaReversalWave + delay 0x15 + unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + monbg ANIM_ATTACKER + setblends 0x80c + launchtemplate gGenesisSupernovaChargeSpriteTemplate 0x2 0x1 0x0 @charge + call GenesisSupernovaFlare @delay 12 per + call GenesisSupernovaFlare + call GenesisSupernovaFlare + call GenesisSupernovaFlare + call GenesisSupernovaFlare + delay 0x4 + unloadspritegfx ANIM_TAG_BLUE_ORB @reversal + loadspritegfx ANIM_TAG_WISP_ORB @will-o-wisp + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles + launchtemplate gGenesisSupernovaSuperpowerSpriteTemplate 0x83 0x1 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0xd87c + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_SPARKLE_2, 0x0, 0x0, 0xc, 0x7fff + delay 0x8 + invisible ANIM_TARGET + loadspritegfx ANIM_TAG_EXPLOSION @explosion + unloadspritegfx ANIM_TAG_METEOR @superpower + call GenesisSupernovaBubbleExplosion + call GenesisSupernovaBubbleExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x3, 0x0, 0x10, 0x7fff + call GenesisSupernovaBubbleExplosion + waitforvisualfinish + delay 0x10 + launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_SPARKLE_2, 0x0, 0xc, 0x0, 0x7fff + clearmonbg ANIM_ATTACKER + blendoff + delay 0x0 + call ResetFromWhiteScreen + waitforvisualfinish + end +GenesisSupernovaBubbleExplosion: + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 ANIM_TARGET 0x0 0x20 0x3c + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xa 0xa 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + delay 0x6 + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x14 0xffec 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + delay 0x6 + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb ANIM_TARGET 0x0 0x20 0x3c + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xffec 0xf 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + delay 0x6 + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + delay 0x6 + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xffec 0xffec 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + delay 0x6 + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x10 0xfff8 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xffe0 0xffe8 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + return +GenesisSupernovaBuffEffectPlayer_1: + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x24 0x80 0x24 0x30 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x10 0x80 0x10 0x35 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x45 0x80 0x45 0x3a 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x30 0x80 0x30 0x3c 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x55 0x80 0x55 0x33 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +GenesisSupernovaBuffEffectPlayer_2: + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x29 0x80 0x29 0x31 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x73 0x80 0x73 0x32 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x4a 0x80 0x4a 0x3c 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x64 0x80 0x64 0x33 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x2c 0x80 0x2c 0x3d 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x6c 0x80 0x6c 0x30 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +GenesisSupernovaReversalWave: + launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x0 + launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x2a + launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x54 + launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x7e + return +GenesisSupernovaFlare: + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + return +GenesisSupernovaBuffOpponent_1: + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x94 0x40 0x94 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x80 0x40 0x80 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xb5 0x40 0xb5 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xa0 0x40 0xa0 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xc5 0x40 0xc5 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +GenesisSupernovaBuffOpponent_2: + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x99 0x40 0x99 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xe3 0x40 0xe3 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xba 0x40 0xba 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xd4 0x40 0xd4 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x9c 0x40 0x9c 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xdc 0x40 0xdc 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return + + +Move_SINISTER_ARROW_RAID:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_SPIRIT_ARROW @arrow + loadspritegfx ANIM_TAG_LEAF @green + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + waitforvisualfinish + unloadspritegfx ANIM_TAG_ROUND_SHADOW + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x388C @ bg to purple + waitforvisualfinish + visible ANIM_ATTACKER + playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + waitforvisualfinish + invisible ANIM_ATTACKER + loadspritegfx ANIM_TAG_BIRD @sky attack + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET SinisterArrowRaidOnPlayer +SinisterArrowRaidOnOpponent: + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 @left to right + delay 0x5 + launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x8a 0x100 0x3a 0x15 @left to right + delay 0x1 + launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x8c 0x100 0x3c 0x15 + delay 0x1 + launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x86 0x100 0x36 0x15 + delay 0x1 + launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x84 0x100 0x34 0x15 + delay 0x1 + launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER @[x0] [y0] [xf] [yf] + launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 @right to left + delay 0x5 + launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x36 0xfff0 0x36 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x3a 0xfff0 0x3a 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x37 0xfff0 0x37 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x3c 0xfff0 0x3c 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0x0f 0x15 @left to right + delay 0x5 + launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x0a 0x100 0x11 0x15 + delay 0x1 + launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x0c 0x100 0x13 0x15 + delay 0x1 + launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x06 0x100 0xd 0x15 + delay 0x1 + launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x04 0x100 0xb 0x15 + delay 0x1 + launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0xf 0x15 + waitforvisualfinish + call SinisterArrowRaidFlyStrike + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x4b + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x10 0x40c0 @ defender to purple + call SinisterArrowRaidStrikeOpponent + call SinisterArrowRaidOpponentExplosion + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + call SinisterArrowRaidFinalExplosion + goto SinisterArrowRaidFinish +@on player +SinisterArrowRaidOnPlayer: + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 @right to left + delay 0x5 + launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x0a 0xfff0 0x11 0x15 + delay 0x1 + launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x0c 0xfff0 0x13 0x15 + delay 0x1 + launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x06 0xfff0 0xd 0x15 + delay 0x1 + launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x04 0xfff0 0xb 0x15 + delay 0x1 + launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0xf 0x15 + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 @left to right + delay 0x5 + launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x36 0x100 0x36 0x15 + delay 0x1 + launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x3a 0x100 0x3a 0x15 + delay 0x1 + launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x37 0x100 0x37 0x15 + delay 0x1 + launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x3c 0x100 0x3c 0x15 + delay 0x1 + launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x78 0xfff0 0x58 0x15 @right to left + delay 0x5 + launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x8a 0xfff0 0x3a 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x8c 0xfff0 0x3c 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x86 0xfff0 0x36 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x84 0xfff0 0x34 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x88 0xfff0 0x38 0x15 + waitforvisualfinish + call SinisterArrowRaidFlyStrike + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x4b + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x10 0x40c0 @ defender to purple + call SinisterArrowRaidArrowsStrikePlayer + call SinisterArrowRaidPlayerExplosion + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + call SinisterArrowRaidFinalExplosion +@ finish +SinisterArrowRaidFinish: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x10 0x0 0x40c0 @ return tgt to normal + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x00 0x388C @ bg to nrml + delay 0x5 + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +SinisterArrowRaidFlyStrike: + visible ANIM_TARGET + delay 0xa + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyStrikeSpriteTemplate 0x82 0x1 0x14 + waitforvisualfinish + delay 0x5 + return +SinisterArrowRaidStrikeOpponent: + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x95 0xfff0 0xb5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x75 0xfff0 0x95 0x40 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa5 0xfff0 0xc5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x6f 0xfff0 0x8f 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x7b 0xfff0 0x9b 0x40 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa2 0xfff0 0xc2 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x82 0xfff0 0xa2 0x40 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x87 0xfff0 0xa7 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x72 0xfff0 0x92 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x8b 0xfff0 0xab 0x40 0x4 + delay 0x1 + return +SinisterArrowRaidOpponentExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x95 0xfff0 0xb5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x75 0xfff0 0x95 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa5 0xfff0 0xc5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x6f 0xfff0 0x8f 0x40 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x7b 0xfff0 0x9b 0x40 0x4 + delay 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa2 0xfff0 0xc2 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x82 0xfff0 0xa2 0x40 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x87 0xfff0 0xa7 0x40 0x4 + delay 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x72 0xfff0 0x92 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x8b 0xfff0 0xab 0x40 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x1 + return +SinisterArrowRaidArrowsStrikePlayer: + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x5 0xfff0 0x55 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe5 0xfff0 0x35 0x90 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x15 0xfff0 0x65 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffdf 0xfff0 0x2f 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffeb 0xfff0 0x3b 0x90 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x12 0xfff0 0x62 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff2 0xfff0 0x42 0x90 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff7 0xfff0 0x47 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe2 0xfff0 0x32 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfffb 0xfff0 0x4b 0x90 0x4 + delay 0x1 + return +SinisterArrowRaidPlayerExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x5 0xfff0 0x55 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe5 0xfff0 0x35 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x15 0xfff0 0x65 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffdf 0xfff0 0x2f 0x90 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffeb 0xfff0 0x3b 0x90 0x4 + delay 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x12 0xfff0 0x62 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff2 0xfff0 0x42 0x90 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff7 0xfff0 0x47 0x90 0x4 + delay 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe2 0xfff0 0x32 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfffb 0xfff0 0x4b 0x90 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x1 + return +SinisterArrowRaidFinalExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return + + +Move_MALICIOUS_MOONSAULT:: + loadspritegfx ANIM_TAG_FIRE_PLUME @dragon rage + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + fadetobg BG_MALICIOUS_MOONSAULT + waitbgfadeout + setblends 0x80c + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0 + delay 0x1 + launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + waitforvisualfinish + delay 0x0 + monbg ANIM_ATTACKER + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + call MaliciousMoonsaultFireSpin + call MaliciousMoonsaultFireSpin + clearmonbg ANIM_ATTACKER + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultRedFlySpriteTemplate 0x82, 0x4, 0x0 0x0 0xd 0x150 + call MaliciousMoonsaultFireSpin + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x5 0x0 0xa 0x0000 @ target darkens + delay 0x1a + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + launchtemplate gMaliciousMoonsaultRedBounceSpriteTemplate 0x83 0x0 + delay 0x7 + launchtemplate gMaliciousMoonsaultRedImpactSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + call MaliciousMoonsaultExplosion + delay 0x6 + call MaliciousMoonsaultExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x1, 0x0, 0x10, 0x001b @ fade all to red + delay 0x6 + call MaliciousMoonsaultExplosion + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + waitforvisualfinish + call ResetFromRedScreen + blendoff + end +MaliciousMoonsaultFireSpin: + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x1 + return +MaliciousMoonsaultExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + return + + +Move_OCEANIC_OPERETTA:: + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + loadspritegfx ANIM_TAG_SPOTLIGHT + launchtask AnimTask_CreateSpotlight 0x2 0x0 + launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0x0 0xa 0x0 + waitforvisualfinish + launchtemplate gOceanOperaSpotlightSpriteTemplate 0x82, 0x3, 0x0 0xfff8 0x50 @spotlight + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_WATER_ORB @blue + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call OceanicOperettaBuffEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x7fff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call OceanicOperettaBuffEffect + delay 0x8 + call OceanicOperettaBuffEffect + waitforvisualfinish + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + unloadspritegfx ANIM_TAG_SPOTLIGHT + launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0xa 0x0 0x1 + waitforvisualfinish + launchtask AnimTask_RemoveSpotlight 0x2 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x6 0x5da0 + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_THIN_RING + invisible ANIM_ATTACKER + launchtemplate gOceanOperaBlueChargeSpriteTemplate 0x2 0x1 0x0 @charge + delay 0x2 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x50 0x1 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_GRASSWHISTLE, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x1a + visible ANIM_TARGET + loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x5 + launchtemplate gOceanOperaMovingOrbsSpriteTemplate 0x32 0x6 0x0 0x0 0x0 0x0 0x60 0x0 @mist ball + delay 0x5c + visible ANIM_ATTACKER + delay 0x0 + loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x1 + launchtemplate gOceanOperaBlueOrbsSpriteTemplate 0x32 0x6 0x0 ANIM_TARGET 0x0 0x0 0x0 0x35 + delay 0x5 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + delay 0x4 + launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + delay 0x4 + launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + delay 0x4 + launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + delay 0x4 + launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + delay 0x10 + loadspritegfx ANIM_TAG_EXPLOSION @explosion + loadspritegfx ANIM_TAG_SPARKLE_2 @sparkle + loadspritegfx ANIM_TAG_RAIN_DROPS @rain + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x40 + call OceanicOperettaExplosion + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x2 0x0 0xb 0x5da0 + launchtask AnimTask_CreateRaindrops 0x2 0x3 0x0 0x3 0x78 + call OceanicOperettaExplosion + call OceanicOperettaExplosion + playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER + launchtask AnimTask_CreateRaindrops 0x2 0x3 0x0 0x3 0x78 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x2 0xb 0x0 0x5da0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x6 0x0 0x5da0 + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +OceanicOperettaBuffEffect: + launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +OceanicOperettaExplosion: + launchtemplate gOceanOperaSparkleSpriteTemplate 0x33 0x6 0xfff1 0x0 ANIM_TARGET 0x0 0x20 0x3c + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gOceanOperaSparkleSpriteTemplate 0x33 0x6 0xc 0xfffb ANIM_TARGET 0x0 0x20 0x3c + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return + + +Move_SPLINTERED_STORMSHARDS:: + loadspritegfx ANIM_TAG_ROCKS @rock + loadspritegfx ANIM_TAG_ICICLE_SPEAR @spear + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_GetLycanrocForm 0x2 0x0 + jumpargeq 0x0 0x1 SplinteredStormshardsNightForme +SplinteredStormshardsDayForme: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x5bff + goto SplinteredStormshardsFinishFade +SplinteredStormshardsNightForme: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x0000 +SplinteredStormshardsFinishFade: + waitforvisualfinish + setblends 0x80c + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET SplinteredStormshardsByOpponent +SplinteredStormshardsByPlayer: + loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 0x10, 0xc + call SplinteredStormshardsPlayer_Rising1 + delay 0x2 + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + invisible ANIM_TARGET + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + call SplinteredStormshardsPlayer_Rising1 + call SplinteredStormshardsPlayer_Rising2 + visible ANIM_ATTACKER + delay 0x1 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + delay 0x2 + call SplinteredStormshardsPlayer_Rising2 + call SplinteredStormshardsPlayer_Rising1 + delay 16 + waitforvisualfinish + visible ANIM_TARGET + call SplinteredStormshardsFixBackgroundFade + waitforvisualfinish + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_EXPLOSION @explosion + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + delay 0x2 + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x60 0x1 @shake target up and down + launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x2 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x2 0x8 0xffd0 0x1 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x4 + call SplinteredStormshardsExplosionOpponent + call SplinteredStormshardsExplosionOpponent +SplinteredStormshardsEnd: + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x0, 0x10, 0x7fff + call SplinteredStormshardsBrownExplode + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x10, 0x0, 0x7fff + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + waitforvisualfinish + end +SplinteredStormshardsExplosionOpponent: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0x0 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0xfff8 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0x0 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + return +SplinteredStormshardsByOpponent: + loopsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET 0x10 0xc + call SplinteredStormshardsOpponent_Rising1 + delay 0x2 + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + invisible ANIM_TARGET + launchtemplate gSplinteredShardsFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + call SplinteredStormshardsOpponent_Rising1 + call SplinteredStormshardsOpponent_Rising2 + visible ANIM_ATTACKER + delay 0x1 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + delay 0x2 + call SplinteredStormshardsOpponent_Rising2 + call SplinteredStormshardsOpponent_Rising1 + delay 16 + waitforvisualfinish + visible ANIM_TARGET + call SplinteredStormshardsFixBackgroundFade + waitforvisualfinish + visible ANIM_TARGET + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_EXPLOSION @explosion + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + delay 0x2 + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x60 0x1 @shake target up and down + launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x30 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + delay 0x4 + call SplinteredStormshardsExplosionOnPlayer + call SplinteredStormshardsExplosionOnPlayer + goto SplinteredStormshardsEnd +SplinteredStormshardsExplosionOnPlayer: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x35 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x1c 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x16 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x2d 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + return +SplinteredStormshardsBrownExplode: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return +SplinteredStormshardsPlayer_Rising1: + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x24 0x80 0x24 0x30 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x10 0x80 0x10 0x35 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x45 0x80 0x45 0x3a 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x30 0x80 0x30 0x3c 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x55 0x80 0x55 0x33 0x30 + delay 0x2 + return +SplinteredStormshardsPlayer_Rising2: + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x29 0x80 0x29 0x31 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x73 0x80 0x73 0x32 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x4a 0x80 0x4a 0x3c 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x64 0x80 0x64 0x33 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x2c 0x80 0x2c 0x3d 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x6c 0x80 0x6c 0x30 0x30 + delay 0x2 + return +SplinteredStormshardsOpponent_Rising1: + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x94 0x40 0x94 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x80 0x40 0x80 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xb5 0x40 0xb5 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xa0 0x40 0xa0 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xc5 0x40 0xc5 0x0 0x30 + delay 0x2 + return +SplinteredStormshardsOpponent_Rising2: + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x99 0x40 0x99 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xe3 0x40 0xe3 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xba 0x40 0xba 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd4 0x40 0xd4 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x9c 0x40 0x9c 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xdc 0x40 0xdc 0x0 0x30 + delay 0x2 + return +SplinteredStormshardsFixBackgroundFade: + launchtask AnimTask_GetLycanrocForm 0x2 0x0 + jumpargeq 0x0 0x1 SplinteredStormshardsNightFormeReturn +SplinteredStormshardsDayFormeReturn: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x5bff + goto SplinteredStormshardsFinishFadeReturn +SplinteredStormshardsNightFormeReturn: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x0000 +SplinteredStormshardsFinishFadeReturn: + return + + +Move_LETS_SNUGGLE_FOREVER:: + loadspritegfx ANIM_TAG_MAGENTA_HEART @sharm + loadspritegfx ANIM_TAG_MUSIC_NOTES @music note + loadspritegfx ANIM_TAG_SMALL_BUBBLES @fake tears + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + launchtemplate gSnuggleForeverHeartSpriteTemplate 0x3 0x2 0x0 0x14 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0 + delay 0x7 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80 + delay 0x8 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80 + delay 0x7 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0 + delay 0x8 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + delay 0x7 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0 + delay 0x7 + fadetobg BG_SNUGGLE_FOREVER + waitbgfadeout + invisible ANIM_ATTACKER + delay 0x1 + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + delay 0x10 + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + waitforvisualfinish + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + delay 0x10 + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + waitforvisualfinish + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + delay 0x10 + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x32 0x1 + call LetsSnuggleForeverTears + delay 0x8 + call LetsSnuggleForeverTears + delay 0x8 + call LetsSnuggleForeverTears + delay 0x8 + call LetsSnuggleForeverTears + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x0000 + waitforvisualfinish + loadspritegfx ANIM_TAG_SPARKLE_4 @detect + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gSnuggleForeverEyesSpriteTemplate 0xd 0x2 0xa 0xfff2 + launchtemplate gSnuggleForeverEyesSpriteTemplate 0xd 0x2 0xfff6 0xfff2 + delay 0x20 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x0 0x10 0x579D + launchtask AnimTask_GrowTarget 0x5 0x0 + delay 0x5 + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_PAIN_SPLIT @painsplit + loadspritegfx ANIM_TAG_DUCK @duck + loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 10 + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0xa 0xa 0x4 + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0xa 0xa 0x4 + call LetsSnuggleForeverStars_1 + call LetsSnuggleForeverImpacts + call LetsSnuggleForeverStars_2 + call LetsSnuggleForeverImpacts + call LetsSnuggleForeverStars_1 + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET + call LetsSnuggleForeverStars_2 + call LetsSnuggleForeverImpacts + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0x6 0x6 0x4 + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0x6 0x6 0x4 + call LetsSnuggleForeverStars_1 + delay 0x0 + call LetsSnuggleForeverImpacts + call LetsSnuggleForeverStars_2 + delay 0x0 + call LetsSnuggleForeverImpacts + call LetsSnuggleForeverStars_1 + delay 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL-ANIM_PAL_DEF 0x2 0x0 0x10 0x7fff + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET + call LetsSnuggleForeverStars_2 + delay 0x0 + call LetsSnuggleForeverImpacts + invisible ANIM_TARGET + stopsound + waitforvisualfinish + call ResetFromWhiteScreen + end +LetsSnuggleForeverTears: + playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_TARGET + launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x0 + launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x1 + delay 0x8 + launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x2 + launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x3 + return +LetsSnuggleForeverImpacts: + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0xfff4 0x1 0x0 + delay 0x8 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xfff4 0x8 0x1 0x0 + delay 0x8 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xc 0x0 0x1 0x0 + delay 0x8 + return +LetsSnuggleForeverStars_1: + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1 + return +LetsSnuggleForeverStars_2: + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xa0 0xffe0 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xff00 0xffd8 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0x80 0xfff0 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0x1a0 0xffda + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xff80 0xffea + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xfe80 0xffe1 + return + + +Move_CLANGOROUS_SOULBLAZE:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey + loadspritegfx ANIM_TAG_SPARKLE_2 @stars + fadetobg BG_CLANGOROUS_SOULBLAZE + waitbgfadein + launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + call ClangorousSoulblazeBuffEffect + call ClangorousSoulblazeBuffEffect + call ClangorousSoulblazeBuffEffect + waitforvisualfinish + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @fist + launchtemplate gClangorousSoulRedFistTemplate 0x2 0x8 0xfff0 0x0 0x0 0x0 0xa ANIM_ATTACKER ANIM_RIGHT_FIST 0x1 + launchtemplate gClangorousSoulRedFistTemplate 0x2 0x8 0x10 0x0 0x0 0x0 0xa ANIM_ATTACKER ANIM_LEFT_FIST 0x1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + loadspritegfx ANIM_TAG_THIN_RING @ring + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + launchtemplate gClangorousSoulRedRingTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + waitforvisualfinish + unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST + unloadspritegfx ANIM_TAG_SPARKLE_2 @stars + loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazeWhiteFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + delay 0x2 + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xFFE0 0x1 0xffff + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0xa 0x0 0x2a + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_DEF_PARTNER 0xfd00 0xa 0x0 0x2a + delay 0x20 + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x20 0x1 0xffff + delay 0xC + setblends 0x80c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0 + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + visible ANIM_ATTACKER + monbg ANIM_ATTACKER + loopsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 0xe, 0xa + launchtemplate gClangoorousSoulblazePurpleChargeSpriteTemplate 0x2 0x1 0x0 @charge + call ClangorousSoulblazeEnergySwirl + call ClangorousSoulblazeEnergySwirl + call ClangorousSoulblazeEnergySwirl + call ClangorousSoulblazeEnergySwirl + call ClangorousSoulblazeEnergySwirl + waitforvisualfinish + unloadspritegfx ANIM_TAG_WATER_ORB @whirlpool + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly + unloadspritegfx ANIM_TAG_AIR_WAVE_2 @white + unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_MUSIC_NOTES @music note + clearmonbg ANIM_ATTACKER + invisible ANIM_ATTACKER + invisible ANIM_ATK_PARTNER + delay 0x0 + monbg ANIM_TARGET + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 @music note + delay 0x5 + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x3c + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_DEF_PARTNER 0x2 0x3c + call ClangorousSoulblazePulse_1 + delay 0x5 + call ClangorousSoulblazePulse_2 + delay 0x5 + call ClangorousSoulblazePulse_3 + delay 0x5 + call ClangorousSoulblazePulse_4 + loadspritegfx ANIM_TAG_EXPLOSION + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET ClangorousSoulblazeOnOpponent +ClangorousSoulblazeOnPlayer: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0xfff0 ANIM_ATTACKER 0x1 + delay 0x5 + call ClangorousSoulblazePulse_5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_ATTACKER 0x1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x20 0xffe0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x20 0x0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x30 0xffe0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x30 0xfff0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x35 0x0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x40 0x10 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x40 0x0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x45 0xfff0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x50 0x10 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x50 0xffe0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x60 0xfff0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x60 0xffe0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x0, 0x10, 0x7fff + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x65 0xfff0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x65 0xffe0 ANIM_ATTACKER 0x1 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + goto FINISH_SOULBLAZE +ClangorousSoulblazeOnOpponent: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x15 ANIM_ATTACKER 0x1 + delay 0x5 + call ClangorousSoulblazePulse_5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x0 ANIM_ATTACKER 0x1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x20 0x25 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x20 0x5 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x30 0x25 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x30 0x15 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x35 0x0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x40 0xa ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x40 0x0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x45 0x10 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x50 0x30 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x50 0x25 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x60 0x40 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x60 0x45 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x7fff + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x65 0x35 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x65 0x40 ANIM_ATTACKER 0x1 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 +FINISH_SOULBLAZE: + waitforvisualfinish + clearmonbg ANIM_TARGET + delay 0x5 + call ResetFromWhiteScreen + blendoff + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_DEF_PARTNER 0x0 0x10 + waitforvisualfinish + end +ClangorousSoulblazeEnergySwirl: + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x2 + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + return +ClangorousSoulblazeBuffEffect: + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtemplate gClangorousSoulBlueBuffTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gClangorousSoulPurpleBuffTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + delay 0x4 + launchtemplate gClangorousSoulWhiteBuffTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + return +ClangorousSoulblazePulse_1: + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0 + return +ClangorousSoulblazePulse_2: + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80 + return +ClangorousSoulblazePulse_3: + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80 + return +ClangorousSoulblazePulse_4: + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0 + return +ClangorousSoulblazePulse_5: + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0 + return + + +Move_GUARDIAN_OF_ALOLA:: + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_MUD_SAND @dig + loadspritegfx ANIM_TAG_SPEED_DUST @extremespeed + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtemplate gThinRingExpandingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + waitforvisualfinish + unloadspritegfx ANIM_TAG_THIN_RING + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0xff00 0xf 0x0 0x4 + call GuardianOfAlolaRocksPlayer + delay 0xa + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x10 + call GuardianOfAlolaRocksPlayer + waitforvisualfinish + delay 0xa + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0xff00 0xf 0x0 0x4 + call GuardianOfAlolaRocksPlayer + delay 0xa + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x10 + call GuardianOfAlolaRocksPlayer + waitforvisualfinish + delay 0xa + delay 0x10 + call GuardianOfAlolaRocksPlayer + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0xC 0xC 0x277f @;Yellow + launchtask AnimTask_NightShadeClone 0x5 0x1 0x75 + delay 0x10 + call GuardianOfAlolaRocksPlayer + delay 0x10 + call GuardianOfAlolaRocksPlayer + delay 0x10 + loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST + call GuardianOfAlolaRocksPlayer + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x3 0x0 0xb 0x0000 + delay 0x1 + launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_HORSESHOE_SIDE_FIST, 0x0, 0xC, 0xc, 0x277f + fadetobg BG_FISSURE + waitbgfadeout + call GuardianOfAlolaRocksPlayer + launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff + waitbgfadein + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + launchtemplate gGuardianOfAlolaFistSpriteTemplate 0x83 0x3 0x0 0xffd0 0x1f + delay 0x24 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0xb 0x0 0x0000 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtask AnimTask_HorizontalShake 0x3 0x3 ANIM_TARGET 0xa 0x25 + loopsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET 0x10 0x9 + call GuardianOfAlolaRocksTarget + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRocksTarget + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRocksTarget + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRocksTarget + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x3 0x0 0x10 0x7fff + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRocksTarget + waitforvisualfinish + call ResetFromWhiteScreen + end +GuardianOfAlolaRocksPlayer: + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + return +GuardianOfAlolaRocksTarget: + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0x4 0xfff0 0x12 + return +GuardianOfAlolaRockGeyser: + launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0xfffc 0x10 @ -4, -0x10 + delay 0x0 + launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0x100D 0x10 @ + delay 0x0 + launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0x4 0x10 + delay 0x0 + launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0xfff0 0x10 + delay 0x0 + return + + +Move_SEARING_SUNRAZE_SMASH:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xe 0x001b + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call SearingSunrazeSmashFlare + delay 0x8 + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x7fff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call SearingSunrazeSmashFlare + delay 0x8 + call SearingSunrazeSmashFlare + waitforvisualfinish + unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + unloadspritegfx ANIM_TAG_SPARKLE_2 @sparkles + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + launchtemplate gSearingSunrazeSmashGrowWormholeSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x10 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 + delay 0x2 + loadspritegfx ANIM_TAG_METEOR @superpower + visible ANIM_TARGET + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin up target + call SearingSunrazeSmashRingsInward + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly) + call SearingSunrazeSmashRingsInward + delay 0xD + invisible ANIM_TARGET + launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x6 + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + delay 0x2 + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower + launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER + fadetobg BG_COSMIC + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x0 0x1 0xffff + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix tgt rotation + invisible ANIM_TARGET + waitbgfadein + visible ANIM_ATTACKER + visible ANIM_TARGET + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + launchtemplate gSearingSunrazeSmashInfernoOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER + loopsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER, 0x13, 0x8 + call SearingSunrazeSmashCharge + call SearingSunrazeSmashCharge + call SearingSunrazeSmashCharge + call SearingSunrazeSmashCharge + waitforvisualfinish + unloadspritegfx ANIM_TAG_WATER_ORB @blue + unloadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashRedFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG+ANIM_PAL_ATK 0x3 0x0 0xF 0x0 + waitforvisualfinish + playsewithpan SE_ORB, SOUND_PAN_ATTACKER + unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly + unloadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball + loadspritegfx ANIM_TAG_GOLD_RING @beam + loadspritegfx ANIM_TAG_SMALL_RED_EYE @beam colour + invisible ANIM_ATTACKER + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + stopsound + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + loadspritegfx ANIM_TAG_CUT @cut + launchtemplate gSunsteelStrikeSuperpowerTemplate 0x82 0x1 0x14 +SearingSunrazeSmashImpact: + delay 0x8 + delay 0x1 + unloadspritegfx ANIM_TAG_GOLD_RING @beam + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x4 0x3c + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x20 0xffe0 0x0 + delay 0x2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x20 0xffe0 0x1 + delay 0x2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x1c 0xffe0 0x0 + delay 0x2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x1c 0xffe0 0x1 + delay 0x2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x2c 0xffe0 0x0 + delay 0x2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x2c 0xffe0 0x1 + delay 0x2 + loadspritegfx ANIM_TAG_CROSS_IMPACT @x + delay 0x0 + unloadspritegfx ANIM_TAG_METEOR @superpower + unloadspritegfx ANIM_TAG_DRAGON_ASCENT @dragon ascent 1 + unloadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @dragon ascent 2 + launchtemplate gSearingSunrazeSmashCrossImpactSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x24 + playsewithpan SE_M_LEER, SOUND_PAN_TARGET + visible ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK, 0x3, 0xF, 0x0, 0x0 + visible ANIM_ATTACKER + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x10 0x0000 + launchtemplate gSearingSunrazeSmashShockwaveSpriteTemplate 0x82 0x0 @ charge out and in + delay 0x1c + invisible ANIM_TARGET + unloadspritegfx ANIM_TAG_CUT @cut + unloadspritegfx ANIM_TAG_CROSS_IMPACT @x + call SearingSunrazeSmashInferno + call SearingSunrazeSmashInferno + call SearingSunrazeSmashInferno + call SearingSunrazeSmashInferno + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x001b @full red + call SearingSunrazeSmashInferno + call SearingSunrazeSmashInferno + call SearingSunrazeSmashInferno + waitforvisualfinish + delay 0x10 + call ResetFromRedScreen + end +SearingSunrazeSmashFlare: + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return + +SearingSunrazeSmashRingsInward: + launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + return +SearingSunrazeSmashInferno: + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x3 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x3 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x3 + return +SearingSunrazeSmashCharge: + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x1 + return +ResetFromRedScreen: + launchtask AnimTask_AllBanksInvisible 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x1B @Everything from red + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x33ED + waitforvisualfinish + return + + +Move_MENACING_MOONRAZE_MAELSTROM:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xe 0x40c0 + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call MenacingMoonrazeMaelstromFlare + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xc 0x0000 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call MenacingMoonrazeMaelstromFlare + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + delay 0x8 + call MenacingMoonrazeMaelstromFlare + waitforvisualfinish + unloadspritegfx ANIM_TAG_SPARKLE_2 @sparkles + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromWormholeSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x10 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 @ target down and left (instantaneously (last arg)) + delay 0x2 + loadspritegfx ANIM_TAG_METEOR @superpower + visible ANIM_TARGET + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin up target + call MenacingMoonrazeMaelstromRingsInward + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly) + call MenacingMoonrazeMaelstromRingsInward + delay 0xD + invisible ANIM_TARGET + launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gMoonrazeMaelstromWhiteRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x6 + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + delay 0x2 + invisible ANIM_ATTACKER + launchtemplate gMoonrazeMaelstromSuperpowerSpriteTemplate 0x83 0x1 0x0 @superpower + launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER + fadetobg BG_COSMIC + waitbgfadeout + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET MenacingMoonrazeMaelstromOnPlayer +MenacingMoonrazeMaelstromOnOpponent: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfd00 0x200 0x1 0xffff + goto MenacingMoonrazeMaelstromFinish +MenacingMoonrazeMaelstromOnPlayer: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x200 0xfd00 0x1 0xffff +MenacingMoonrazeMaelstromFinish: + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix tgt rotation + invisible ANIM_TARGET + waitbgfadein + visible ANIM_ATTACKER + delay 0x2 + visible ANIM_TARGET + waitforvisualfinish + loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble + loadspritegfx ANIM_TAG_ORBS @hyper beam + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave + unloadspritegfx ANIM_TAG_THIN_RING @ring + unloadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey + unloadspritegfx ANIM_TAG_METEOR @superpower + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call MenacingMoonrazeMaelstromChargeUp + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xc 0x0000 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call MenacingMoonrazeMaelstromChargeUp + call MenacingMoonrazeMaelstromChargeUp + launchsoundtask SoundTask_LoopSEAdjustPanning 0x7 0xf0 0xffc0 SOUND_PAN_TARGET 0x1 0xf 0x0 0x5 + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x3c 0x1 + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x4 0x0 0xc 0x0000 + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromShockwaveSpriteTemplate 0x82 0x0 + call MenacingMoonrazeMaelstromBeam + waitforvisualfinish + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave + unloadspritegfx ANIM_TAG_ORBS @hyper beam + unloadspritegfx ANIM_TAG_HANDS_AND_FEET @black + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x4c 0x1 + call MenacingMoonrazeMaelstromExplosion + call MenacingMoonrazeMaelstromExplosion + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x2 0x0 0x10 0x7fff + call MenacingMoonrazeMaelstromExplosion + waitforvisualfinish + call ResetFromWhiteScreen + end +MenacingMoonrazeMaelstromExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return +MenacingMoonrazeMaelstromFlare: + launchtemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + launchtemplate gMoonrazeMaelstromBlueBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gMoonrazeMaelstromBlueBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +MenacingMoonrazeMaelstromRingsInward: + launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gMoonrazeMaelstromWhiteRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + return +MenacingMoonrazeMaelstromChargeUp: + launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +MenacingMoonrazeMaelstromBeam: + launchtemplate gMoonrazeMaelstromBeamSpriteTemplate 0x82 0x0 + launchtemplate gMoonrazeMaelstromBeamSpriteTemplate 0x82 0x0 + delay 0x1 + return + + +Move_LIGHT_THAT_BURNS_THE_SKY:: + loadspritegfx ANIM_TAG_SPARK_2 @spark + loadspritegfx ANIM_TAG_LEAF @green + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge particles + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @psycho boost + fadetobg BG_ZMOVE_MOUNTAIN + waitbgfadeout + loadspritegfx ANIM_TAG_FOCUS_ENERGY + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call EndureEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call EndureEffect + delay 0x8 + call EndureEffect + delay 0x8 + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + monbg ANIM_ATTACKER + setblends 0x80c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL-ANIM_PAL_ATK 0x2 0x0 0xF 0x0000 + waitforvisualfinish + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @ charge particles to attacker + delay 0x1e + loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0xe, 0xa + launchtemplate gSuperpowerOrbSpriteTemplate, 0x83, 0x1, 0x0 + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + delay 0xe + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x4 0x0000 + clearmonbg ANIM_ATTACKER + blendoff + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0x1 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0x1 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0x6 + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x3c + unloadspritegfx ANIM_TAG_LEAF @green + unloadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge + loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn + loadspritegfx ANIM_TAG_EXPLOSION_2 @explode + loadspritegfx ANIM_TAG_STRAIGHT_BEAM + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + monbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x6 0x0 0x10 0x43FF @;Light yellow + call PhotonGeyserBeam + call LightThatBurnsTheSkyGeyser + call LightThatBurnsTheSkyBlast_1 + call LightThatBurnsTheSkyGeyser + call LightThatBurnsTheSkyBlast_2 + call LightThatBurnsTheSkyGeyser + launchtask AnimTask_BlendBattleAnimPal, 0x2, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x4, 0x0, 0x10, 0x43FF + call LightThatBurnsTheSkyBlast_3 + clearmonbg ANIM_TARGET + waitforvisualfinish + delay 0x10 + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x0 0x10 0x0 0x43FF + restorebg + waitbgfadeout + end +LightThatBurnsTheSkyBlast_1: + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + return +LightThatBurnsTheSkyBlast_2: + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + return +LightThatBurnsTheSkyBlast_3: + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + return +LightThatBurnsTheSkyGeyser: + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0x0005 0x1 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xfff1 0x1 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xfffb 0x1 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0012 0x1 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0x0005 0x1 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xfff5 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffe1 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffeb ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0002 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xfff5 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xffe5 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffd1 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffdb ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0xfff2 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xffe5 ANIM_TARGET 0x0 + delay 0x0 + return +LightThatBurnsTheSkyGreenSparks: + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x10 + return + + +Move_SOUL_STEALING_7_STAR_STRIKE:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @bounce + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice blue + loadspritegfx ANIM_TAG_WISP_FIRE @will o wisp + loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn + loadspritegfx ANIM_TAG_HANDS_AND_FEET @fist + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + setblends 0x80c + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + delay 0x5 + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gSoulStealBlackFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + waitforvisualfinish + invisible ANIM_TARGET + fadetobg BG_SOULSTEALING_7STAR_STRIKE + waitbgfadeout + visible ANIM_ATTACKER + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call SoulStealingSevenStarStrikeBuffEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call SoulStealingSevenStarStrikeBuffEffect + delay 0x8 + call SoulStealingSevenStarStrikeBuffEffect + delay 0x4 + visible ANIM_TARGET + waitforvisualfinish + unloadspritegfx ANIM_TAG_FIRE_PLUME + loadspritegfx ANIM_TAG_PAIN_SPLIT @pain split + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x25 0x1 + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x14 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x30 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x10 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 ANIM_TARGET 0x12 0x0 0x0 0x2c + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x08 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xffeb 0xfff8 0x2 0x0 0x0 0x28 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x12 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfffb 0xfff4 0x2 0x0 0x0 0x24 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x15 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x5 0xfff8 0x2 0x0 0x0 0x20 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x0c 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfff0 0x1 0x2 0x0 0x0 0x1c + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x13 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 0x1 0x2 0x0 0x0 0x18 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x0e 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfff0 0x10 0x2 0x0 0x0 0x14 + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x12 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 0x10 0x2 0x0 0x0 0x10 + delay 0x4 + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gSoulStealBlackFlySpriteTemplate 0x82, 0x4, 0x0 0x0 0xd 0x150 + delay 0x20 + unloadspritegfx ANIM_TAG_PAIN_SPLIT + unloadspritegfx ANIM_TAG_ROUND_SHADOW + unloadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_SPARK_2 @paralyze + loadspritegfx ANIM_TAG_SNORE_Z @z + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + delay 0x1c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0x0 0x10 0x0000 + delay 0x1 + launchtemplate gSoulStealZStarSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x24 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x0 + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x2a + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x54 + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x7e + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0xa8 + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0xd2 + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + call SoulStealingSevenStarStrikeBlueParalysis + call SoulStealingSevenStarStrikeBlueParalysis + waitforvisualfinish + visible ANIM_ATTACKER + unloadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_SPARKLE_4 @ detect + loadspritegfx ANIM_TAG_EXPLOSION @ explosion + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gTargetTwinkleSpriteTemplate 0x8d 0x3 0x0 0x0 ANIM_TARGET @detect star + delay 0xa + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x20 + call SoulStealingSevenStarStrikeExplosion + call SoulStealingSevenStarStrikeExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x2, 0x0, 0x10, 0x0 @everything to black + call SoulStealingSevenStarStrikeExplosion + waitforvisualfinish + blendoff + restorebg + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x10, 0x0, 0x0 @everything from black + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x0 + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +SoulStealingSevenStarStrikeBuffEffect: + launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +SoulStealingSevenStarStrikeBlueParalysis: + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1 + return +SoulStealingSevenStarStrikeExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 74efef7acb..e3d4c89430 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1,242 +1,2973 @@ #include "constants/global.h" #include "constants/battle.h" #include "constants/pokemon.h" +#include "constants/battle_arena.h" #include "constants/battle_script_commands.h" #include "constants/battle_anim.h" #include "constants/battle_string_ids.h" #include "constants/abilities.h" +#include "constants/hold_effects.h" #include "constants/moves.h" #include "constants/songs.h" #include "constants/game_stat.h" #include "constants/trainers.h" +#include "constants/battle_config.h" +#include "constants/species.h" .include "asm/macros.inc" .include "asm/macros/battle_script.inc" .include "constants/constants.inc" .section script_data, "aw", %progbits - + .align 2 gBattleScriptsForMoveEffects:: - .4byte BattleScript_EffectHit @ EFFECT_HIT - .4byte BattleScript_EffectSleep @ EFFECT_SLEEP - .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_HIT - .4byte BattleScript_EffectAbsorb @ EFFECT_ABSORB - .4byte BattleScript_EffectBurnHit @ EFFECT_BURN_HIT - .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_HIT - .4byte BattleScript_EffectParalyzeHit @ EFFECT_PARALYZE_HIT - .4byte BattleScript_EffectExplosion @ EFFECT_EXPLOSION - .4byte BattleScript_EffectDreamEater @ EFFECT_DREAM_EATER - .4byte BattleScript_EffectMirrorMove @ EFFECT_MIRROR_MOVE - .4byte BattleScript_EffectAttackUp @ EFFECT_ATTACK_UP - .4byte BattleScript_EffectDefenseUp @ EFFECT_DEFENSE_UP - .4byte BattleScript_EffectHit @ EFFECT_SPEED_UP - .4byte BattleScript_EffectSpecialAttackUp @ EFFECT_SPECIAL_ATTACK_UP - .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_DEFENSE_UP - .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_UP - .4byte BattleScript_EffectEvasionUp @ EFFECT_EVASION_UP - .4byte BattleScript_EffectHit @ EFFECT_ALWAYS_HIT - .4byte BattleScript_EffectAttackDown @ EFFECT_ATTACK_DOWN - .4byte BattleScript_EffectDefenseDown @ EFFECT_DEFENSE_DOWN - .4byte BattleScript_EffectSpeedDown @ EFFECT_SPEED_DOWN - .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_ATTACK_DOWN - .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_DEFENSE_DOWN - .4byte BattleScript_EffectAccuracyDown @ EFFECT_ACCURACY_DOWN - .4byte BattleScript_EffectEvasionDown @ EFFECT_EVASION_DOWN - .4byte BattleScript_EffectHaze @ EFFECT_HAZE - .4byte BattleScript_EffectBide @ EFFECT_BIDE - .4byte BattleScript_EffectRampage @ EFFECT_RAMPAGE - .4byte BattleScript_EffectRoar @ EFFECT_ROAR - .4byte BattleScript_EffectMultiHit @ EFFECT_MULTI_HIT - .4byte BattleScript_EffectConversion @ EFFECT_CONVERSION - .4byte BattleScript_EffectFlinchHit @ EFFECT_FLINCH_HIT - .4byte BattleScript_EffectRestoreHp @ EFFECT_RESTORE_HP - .4byte BattleScript_EffectToxic @ EFFECT_TOXIC - .4byte BattleScript_EffectPayDay @ EFFECT_PAY_DAY - .4byte BattleScript_EffectLightScreen @ EFFECT_LIGHT_SCREEN - .4byte BattleScript_EffectTriAttack @ EFFECT_TRI_ATTACK - .4byte BattleScript_EffectRest @ EFFECT_REST - .4byte BattleScript_EffectOHKO @ EFFECT_OHKO - .4byte BattleScript_EffectRazorWind @ EFFECT_RAZOR_WIND - .4byte BattleScript_EffectSuperFang @ EFFECT_SUPER_FANG - .4byte BattleScript_EffectDragonRage @ EFFECT_DRAGON_RAGE - .4byte BattleScript_EffectTrap @ EFFECT_TRAP - .4byte BattleScript_EffectHit @ EFFECT_HIGH_CRITICAL - .4byte BattleScript_EffectDoubleHit @ EFFECT_DOUBLE_HIT - .4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS - .4byte BattleScript_EffectMist @ EFFECT_MIST - .4byte BattleScript_EffectFocusEnergy @ EFFECT_FOCUS_ENERGY - .4byte BattleScript_EffectRecoil @ EFFECT_RECOIL - .4byte BattleScript_EffectConfuse @ EFFECT_CONFUSE - .4byte BattleScript_EffectAttackUp2 @ EFFECT_ATTACK_UP_2 - .4byte BattleScript_EffectDefenseUp2 @ EFFECT_DEFENSE_UP_2 - .4byte BattleScript_EffectSpeedUp2 @ EFFECT_SPEED_UP_2 - .4byte BattleScript_EffectSpecialAttackUp2 @ EFFECT_SPECIAL_ATTACK_UP_2 - .4byte BattleScript_EffectSpecialDefenseUp2 @ EFFECT_SPECIAL_DEFENSE_UP_2 - .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_UP_2 - .4byte BattleScript_EffectHit @ EFFECT_EVASION_UP_2 - .4byte BattleScript_EffectTransform @ EFFECT_TRANSFORM - .4byte BattleScript_EffectAttackDown2 @ EFFECT_ATTACK_DOWN_2 - .4byte BattleScript_EffectDefenseDown2 @ EFFECT_DEFENSE_DOWN_2 - .4byte BattleScript_EffectSpeedDown2 @ EFFECT_SPEED_DOWN_2 - .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_ATTACK_DOWN_2 - .4byte BattleScript_EffectSpecialDefenseDown2 @ EFFECT_SPECIAL_DEFENSE_DOWN_2 - .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_DOWN_2 - .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_2 - .4byte BattleScript_EffectReflect @ EFFECT_REFLECT - .4byte BattleScript_EffectPoison @ EFFECT_POISON - .4byte BattleScript_EffectParalyze @ EFFECT_PARALYZE - .4byte BattleScript_EffectAttackDownHit @ EFFECT_ATTACK_DOWN_HIT - .4byte BattleScript_EffectDefenseDownHit @ EFFECT_DEFENSE_DOWN_HIT - .4byte BattleScript_EffectSpeedDownHit @ EFFECT_SPEED_DOWN_HIT - .4byte BattleScript_EffectSpecialAttackDownHit @ EFFECT_SPECIAL_ATTACK_DOWN_HIT - .4byte BattleScript_EffectSpecialDefenseDownHit @ EFFECT_SPECIAL_DEFENSE_DOWN_HIT - .4byte BattleScript_EffectAccuracyDownHit @ EFFECT_ACCURACY_DOWN_HIT - .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_HIT - .4byte BattleScript_EffectSkyAttack @ EFFECT_SKY_ATTACK - .4byte BattleScript_EffectConfuseHit @ EFFECT_CONFUSE_HIT - .4byte BattleScript_EffectTwineedle @ EFFECT_TWINEEDLE - .4byte BattleScript_EffectHit @ EFFECT_VITAL_THROW - .4byte BattleScript_EffectSubstitute @ EFFECT_SUBSTITUTE - .4byte BattleScript_EffectRecharge @ EFFECT_RECHARGE - .4byte BattleScript_EffectRage @ EFFECT_RAGE - .4byte BattleScript_EffectMimic @ EFFECT_MIMIC - .4byte BattleScript_EffectMetronome @ EFFECT_METRONOME - .4byte BattleScript_EffectLeechSeed @ EFFECT_LEECH_SEED - .4byte BattleScript_EffectSplash @ EFFECT_SPLASH - .4byte BattleScript_EffectDisable @ EFFECT_DISABLE - .4byte BattleScript_EffectLevelDamage @ EFFECT_LEVEL_DAMAGE - .4byte BattleScript_EffectPsywave @ EFFECT_PSYWAVE - .4byte BattleScript_EffectCounter @ EFFECT_COUNTER - .4byte BattleScript_EffectEncore @ EFFECT_ENCORE - .4byte BattleScript_EffectPainSplit @ EFFECT_PAIN_SPLIT - .4byte BattleScript_EffectSnore @ EFFECT_SNORE - .4byte BattleScript_EffectConversion2 @ EFFECT_CONVERSION_2 - .4byte BattleScript_EffectLockOn @ EFFECT_LOCK_ON - .4byte BattleScript_EffectSketch @ EFFECT_SKETCH - .4byte BattleScript_EffectHit @ EFFECT_UNUSED_60 - .4byte BattleScript_EffectSleepTalk @ EFFECT_SLEEP_TALK - .4byte BattleScript_EffectDestinyBond @ EFFECT_DESTINY_BOND - .4byte BattleScript_EffectFlail @ EFFECT_FLAIL - .4byte BattleScript_EffectSpite @ EFFECT_SPITE - .4byte BattleScript_EffectHit @ EFFECT_FALSE_SWIPE - .4byte BattleScript_EffectHealBell @ EFFECT_HEAL_BELL - .4byte BattleScript_EffectHit @ EFFECT_QUICK_ATTACK - .4byte BattleScript_EffectTripleKick @ EFFECT_TRIPLE_KICK - .4byte BattleScript_EffectThief @ EFFECT_THIEF - .4byte BattleScript_EffectMeanLook @ EFFECT_MEAN_LOOK - .4byte BattleScript_EffectNightmare @ EFFECT_NIGHTMARE - .4byte BattleScript_EffectMinimize @ EFFECT_MINIMIZE - .4byte BattleScript_EffectCurse @ EFFECT_CURSE - .4byte BattleScript_EffectHit @ EFFECT_UNUSED_6E - .4byte BattleScript_EffectProtect @ EFFECT_PROTECT - .4byte BattleScript_EffectSpikes @ EFFECT_SPIKES - .4byte BattleScript_EffectForesight @ EFFECT_FORESIGHT - .4byte BattleScript_EffectPerishSong @ EFFECT_PERISH_SONG - .4byte BattleScript_EffectSandstorm @ EFFECT_SANDSTORM - .4byte BattleScript_EffectEndure @ EFFECT_ENDURE - .4byte BattleScript_EffectRollout @ EFFECT_ROLLOUT - .4byte BattleScript_EffectSwagger @ EFFECT_SWAGGER - .4byte BattleScript_EffectFuryCutter @ EFFECT_FURY_CUTTER - .4byte BattleScript_EffectAttract @ EFFECT_ATTRACT - .4byte BattleScript_EffectReturn @ EFFECT_RETURN - .4byte BattleScript_EffectPresent @ EFFECT_PRESENT - .4byte BattleScript_EffectFrustration @ EFFECT_FRUSTRATION - .4byte BattleScript_EffectSafeguard @ EFFECT_SAFEGUARD - .4byte BattleScript_EffectThawHit @ EFFECT_THAW_HIT - .4byte BattleScript_EffectMagnitude @ EFFECT_MAGNITUDE - .4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS - .4byte BattleScript_EffectHit @ EFFECT_PURSUIT - .4byte BattleScript_EffectRapidSpin @ EFFECT_RAPID_SPIN - .4byte BattleScript_EffectSonicboom @ EFFECT_SONICBOOM - .4byte BattleScript_EffectHit @ EFFECT_UNUSED_83 - .4byte BattleScript_EffectMorningSun @ EFFECT_MORNING_SUN - .4byte BattleScript_EffectSynthesis @ EFFECT_SYNTHESIS - .4byte BattleScript_EffectMoonlight @ EFFECT_MOONLIGHT - .4byte BattleScript_EffectHiddenPower @ EFFECT_HIDDEN_POWER - .4byte BattleScript_EffectRainDance @ EFFECT_RAIN_DANCE - .4byte BattleScript_EffectSunnyDay @ EFFECT_SUNNY_DAY - .4byte BattleScript_EffectDefenseUpHit @ EFFECT_DEFENSE_UP_HIT - .4byte BattleScript_EffectAttackUpHit @ EFFECT_ATTACK_UP_HIT - .4byte BattleScript_EffectAllStatsUpHit @ EFFECT_ALL_STATS_UP_HIT - .4byte BattleScript_EffectHit @ EFFECT_UNUSED_8D - .4byte BattleScript_EffectBellyDrum @ EFFECT_BELLY_DRUM - .4byte BattleScript_EffectPsychUp @ EFFECT_PSYCH_UP - .4byte BattleScript_EffectMirrorCoat @ EFFECT_MIRROR_COAT - .4byte BattleScript_EffectSkullBash @ EFFECT_SKULL_BASH - .4byte BattleScript_EffectTwister @ EFFECT_TWISTER - .4byte BattleScript_EffectEarthquake @ EFFECT_EARTHQUAKE - .4byte BattleScript_EffectFutureSight @ EFFECT_FUTURE_SIGHT - .4byte BattleScript_EffectGust @ EFFECT_GUST - .4byte BattleScript_EffectStomp @ EFFECT_FLINCH_MINIMIZE_HIT - .4byte BattleScript_EffectSolarbeam @ EFFECT_SOLARBEAM - .4byte BattleScript_EffectThunder @ EFFECT_THUNDER - .4byte BattleScript_EffectTeleport @ EFFECT_TELEPORT - .4byte BattleScript_EffectBeatUp @ EFFECT_BEAT_UP - .4byte BattleScript_EffectSemiInvulnerable @ EFFECT_SEMI_INVULNERABLE - .4byte BattleScript_EffectDefenseCurl @ EFFECT_DEFENSE_CURL - .4byte BattleScript_EffectSoftboiled @ EFFECT_SOFTBOILED - .4byte BattleScript_EffectFakeOut @ EFFECT_FAKE_OUT - .4byte BattleScript_EffectUproar @ EFFECT_UPROAR - .4byte BattleScript_EffectStockpile @ EFFECT_STOCKPILE - .4byte BattleScript_EffectSpitUp @ EFFECT_SPIT_UP - .4byte BattleScript_EffectSwallow @ EFFECT_SWALLOW - .4byte BattleScript_EffectHit @ EFFECT_UNUSED_A3 - .4byte BattleScript_EffectHail @ EFFECT_HAIL - .4byte BattleScript_EffectTorment @ EFFECT_TORMENT - .4byte BattleScript_EffectFlatter @ EFFECT_FLATTER - .4byte BattleScript_EffectWillOWisp @ EFFECT_WILL_O_WISP - .4byte BattleScript_EffectMemento @ EFFECT_MEMENTO - .4byte BattleScript_EffectFacade @ EFFECT_FACADE - .4byte BattleScript_EffectFocusPunch @ EFFECT_FOCUS_PUNCH - .4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLINGSALT - .4byte BattleScript_EffectFollowMe @ EFFECT_FOLLOW_ME - .4byte BattleScript_EffectNaturePower @ EFFECT_NATURE_POWER - .4byte BattleScript_EffectCharge @ EFFECT_CHARGE - .4byte BattleScript_EffectTaunt @ EFFECT_TAUNT - .4byte BattleScript_EffectHelpingHand @ EFFECT_HELPING_HAND - .4byte BattleScript_EffectTrick @ EFFECT_TRICK - .4byte BattleScript_EffectRolePlay @ EFFECT_ROLE_PLAY - .4byte BattleScript_EffectWish @ EFFECT_WISH - .4byte BattleScript_EffectAssist @ EFFECT_ASSIST - .4byte BattleScript_EffectIngrain @ EFFECT_INGRAIN - .4byte BattleScript_EffectSuperpower @ EFFECT_SUPERPOWER - .4byte BattleScript_EffectMagicCoat @ EFFECT_MAGIC_COAT - .4byte BattleScript_EffectRecycle @ EFFECT_RECYCLE - .4byte BattleScript_EffectRevenge @ EFFECT_REVENGE - .4byte BattleScript_EffectBrickBreak @ EFFECT_BRICK_BREAK - .4byte BattleScript_EffectYawn @ EFFECT_YAWN - .4byte BattleScript_EffectKnockOff @ EFFECT_KNOCK_OFF - .4byte BattleScript_EffectEndeavor @ EFFECT_ENDEAVOR - .4byte BattleScript_EffectEruption @ EFFECT_ERUPTION - .4byte BattleScript_EffectSkillSwap @ EFFECT_SKILL_SWAP - .4byte BattleScript_EffectImprison @ EFFECT_IMPRISON - .4byte BattleScript_EffectRefresh @ EFFECT_REFRESH - .4byte BattleScript_EffectGrudge @ EFFECT_GRUDGE - .4byte BattleScript_EffectSnatch @ EFFECT_SNATCH - .4byte BattleScript_EffectLowKick @ EFFECT_LOW_KICK - .4byte BattleScript_EffectSecretPower @ EFFECT_SECRET_POWER - .4byte BattleScript_EffectDoubleEdge @ EFFECT_DOUBLE_EDGE - .4byte BattleScript_EffectTeeterDance @ EFFECT_TEETER_DANCE - .4byte BattleScript_EffectBurnHit @ EFFECT_BLAZE_KICK - .4byte BattleScript_EffectMudSport @ EFFECT_MUD_SPORT - .4byte BattleScript_EffectPoisonFang @ EFFECT_POISON_FANG - .4byte BattleScript_EffectWeatherBall @ EFFECT_WEATHER_BALL - .4byte BattleScript_EffectOverheat @ EFFECT_OVERHEAT - .4byte BattleScript_EffectTickle @ EFFECT_TICKLE - .4byte BattleScript_EffectCosmicPower @ EFFECT_COSMIC_POWER - .4byte BattleScript_EffectSkyUppercut @ EFFECT_SKY_UPPERCUT - .4byte BattleScript_EffectBulkUp @ EFFECT_BULK_UP - .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_TAIL - .4byte BattleScript_EffectWaterSport @ EFFECT_WATER_SPORT - .4byte BattleScript_EffectCalmMind @ EFFECT_CALM_MIND - .4byte BattleScript_EffectDragonDance @ EFFECT_DRAGON_DANCE - .4byte BattleScript_EffectCamouflage @ EFFECT_CAMOUFLAGE + .4byte BattleScript_EffectHit @ EFFECT_HIT + .4byte BattleScript_EffectSleep @ EFFECT_SLEEP + .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_HIT + .4byte BattleScript_EffectAbsorb @ EFFECT_ABSORB + .4byte BattleScript_EffectBurnHit @ EFFECT_BURN_HIT + .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_HIT + .4byte BattleScript_EffectParalyzeHit @ EFFECT_PARALYZE_HIT + .4byte BattleScript_EffectExplosion @ EFFECT_EXPLOSION + .4byte BattleScript_EffectDreamEater @ EFFECT_DREAM_EATER + .4byte BattleScript_EffectMirrorMove @ EFFECT_MIRROR_MOVE + .4byte BattleScript_EffectAttackUp @ EFFECT_ATTACK_UP + .4byte BattleScript_EffectDefenseUp @ EFFECT_DEFENSE_UP + .4byte BattleScript_EffectSpeedUp @ EFFECT_SPEED_UP + .4byte BattleScript_EffectSpecialAttackUp @ EFFECT_SPECIAL_ATTACK_UP + .4byte BattleScript_EffectSpecialDefenseUp @ EFFECT_SPECIAL_DEFENSE_UP + .4byte BattleScript_EffectAccuracyUp @ EFFECT_ACCURACY_UP + .4byte BattleScript_EffectEvasionUp @ EFFECT_EVASION_UP + .4byte BattleScript_EffectSpecialAttackUp3 @ EFFECT_SPECIAL_ATTACK_UP_3 + .4byte BattleScript_EffectAttackDown @ EFFECT_ATTACK_DOWN + .4byte BattleScript_EffectDefenseDown @ EFFECT_DEFENSE_DOWN + .4byte BattleScript_EffectSpeedDown @ EFFECT_SPEED_DOWN + .4byte BattleScript_EffectSpecialAttackDown @ EFFECT_SPECIAL_ATTACK_DOWN + .4byte BattleScript_EffectSpecialDefenseDown @ EFFECT_SPECIAL_DEFENSE_DOWN + .4byte BattleScript_EffectAccuracyDown @ EFFECT_ACCURACY_DOWN + .4byte BattleScript_EffectEvasionDown @ EFFECT_EVASION_DOWN + .4byte BattleScript_EffectHaze @ EFFECT_HAZE + .4byte BattleScript_EffectBide @ EFFECT_BIDE + .4byte BattleScript_EffectRampage @ EFFECT_RAMPAGE + .4byte BattleScript_EffectRoar @ EFFECT_ROAR + .4byte BattleScript_EffectMultiHit @ EFFECT_MULTI_HIT + .4byte BattleScript_EffectConversion @ EFFECT_CONVERSION + .4byte BattleScript_EffectFlinchHit @ EFFECT_FLINCH_HIT + .4byte BattleScript_EffectRestoreHp @ EFFECT_RESTORE_HP + .4byte BattleScript_EffectToxic @ EFFECT_TOXIC + .4byte BattleScript_EffectPayDay @ EFFECT_PAY_DAY + .4byte BattleScript_EffectLightScreen @ EFFECT_LIGHT_SCREEN + .4byte BattleScript_EffectTriAttack @ EFFECT_TRI_ATTACK + .4byte BattleScript_EffectRest @ EFFECT_REST + .4byte BattleScript_EffectOHKO @ EFFECT_OHKO + .4byte BattleScript_EffectHit @ EFFECT_FUSION_COMBO + .4byte BattleScript_EffectSuperFang @ EFFECT_SUPER_FANG + .4byte BattleScript_EffectDragonRage @ EFFECT_DRAGON_RAGE + .4byte BattleScript_EffectTrap @ EFFECT_TRAP + .4byte BattleScript_EffectHealBlock @ EFFECT_HEAL_BLOCK + .4byte BattleScript_EffectDoubleHit @ EFFECT_DOUBLE_HIT + .4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS + .4byte BattleScript_EffectMist @ EFFECT_MIST + .4byte BattleScript_EffectFocusEnergy @ EFFECT_FOCUS_ENERGY + .4byte BattleScript_EffectRecoil25 @ EFFECT_RECOIL_25 + .4byte BattleScript_EffectConfuse @ EFFECT_CONFUSE + .4byte BattleScript_EffectAttackUp2 @ EFFECT_ATTACK_UP_2 + .4byte BattleScript_EffectDefenseUp2 @ EFFECT_DEFENSE_UP_2 + .4byte BattleScript_EffectSpeedUp2 @ EFFECT_SPEED_UP_2 + .4byte BattleScript_EffectSpecialAttackUp2 @ EFFECT_SPECIAL_ATTACK_UP_2 + .4byte BattleScript_EffectSpecialDefenseUp2 @ EFFECT_SPECIAL_DEFENSE_UP_2 + .4byte BattleScript_EffectAccuracyUp2 @ EFFECT_ACCURACY_UP_2 + .4byte BattleScript_EffectEvasionUp2 @ EFFECT_EVASION_UP_2 + .4byte BattleScript_EffectTransform @ EFFECT_TRANSFORM + .4byte BattleScript_EffectAttackDown2 @ EFFECT_ATTACK_DOWN_2 + .4byte BattleScript_EffectDefenseDown2 @ EFFECT_DEFENSE_DOWN_2 + .4byte BattleScript_EffectSpeedDown2 @ EFFECT_SPEED_DOWN_2 + .4byte BattleScript_EffectSpecialAttackDown2 @ EFFECT_SPECIAL_ATTACK_DOWN_2 + .4byte BattleScript_EffectSpecialDefenseDown2 @ EFFECT_SPECIAL_DEFENSE_DOWN_2 + .4byte BattleScript_EffectAccuracyDown2 @ EFFECT_ACCURACY_DOWN_2 + .4byte BattleScript_EffectEvasionDown2 @ EFFECT_EVASION_DOWN_2 + .4byte BattleScript_EffectReflect @ EFFECT_REFLECT + .4byte BattleScript_EffectPoison @ EFFECT_POISON + .4byte BattleScript_EffectParalyze @ EFFECT_PARALYZE + .4byte BattleScript_EffectAttackDownHit @ EFFECT_ATTACK_DOWN_HIT + .4byte BattleScript_EffectDefenseDownHit @ EFFECT_DEFENSE_DOWN_HIT + .4byte BattleScript_EffectSpeedDownHit @ EFFECT_SPEED_DOWN_HIT + .4byte BattleScript_EffectSpecialAttackDownHit @ EFFECT_SPECIAL_ATTACK_DOWN_HIT + .4byte BattleScript_EffectSpecialDefenseDownHit @ EFFECT_SPECIAL_DEFENSE_DOWN_HIT + .4byte BattleScript_EffectAccuracyDownHit @ EFFECT_ACCURACY_DOWN_HIT + .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_HIT + .4byte BattleScript_EffectTwoTurnsAttack @ EFFECT_TWO_TURNS_ATTACK + .4byte BattleScript_EffectConfuseHit @ EFFECT_CONFUSE_HIT + .4byte BattleScript_EffectTwineedle @ EFFECT_TWINEEDLE + .4byte BattleScript_EffectHit @ EFFECT_VITAL_THROW + .4byte BattleScript_EffectSubstitute @ EFFECT_SUBSTITUTE + .4byte BattleScript_EffectRecharge @ EFFECT_RECHARGE + .4byte BattleScript_EffectRage @ EFFECT_RAGE + .4byte BattleScript_EffectMimic @ EFFECT_MIMIC + .4byte BattleScript_EffectMetronome @ EFFECT_METRONOME + .4byte BattleScript_EffectLeechSeed @ EFFECT_LEECH_SEED + .4byte BattleScript_EffectDoNothing @ EFFECT_DO_NOTHING + .4byte BattleScript_EffectDisable @ EFFECT_DISABLE + .4byte BattleScript_EffectLevelDamage @ EFFECT_LEVEL_DAMAGE + .4byte BattleScript_EffectPsywave @ EFFECT_PSYWAVE + .4byte BattleScript_EffectCounter @ EFFECT_COUNTER + .4byte BattleScript_EffectEncore @ EFFECT_ENCORE + .4byte BattleScript_EffectPainSplit @ EFFECT_PAIN_SPLIT + .4byte BattleScript_EffectSnore @ EFFECT_SNORE + .4byte BattleScript_EffectConversion2 @ EFFECT_CONVERSION_2 + .4byte BattleScript_EffectLockOn @ EFFECT_LOCK_ON + .4byte BattleScript_EffectSketch @ EFFECT_SKETCH + .4byte BattleScript_EffectHammerArm @ EFFECT_HAMMER_ARM + .4byte BattleScript_EffectSleepTalk @ EFFECT_SLEEP_TALK + .4byte BattleScript_EffectDestinyBond @ EFFECT_DESTINY_BOND + .4byte BattleScript_EffectHit @ EFFECT_FLAIL + .4byte BattleScript_EffectSpite @ EFFECT_SPITE + .4byte BattleScript_EffectHit @ EFFECT_FALSE_SWIPE + .4byte BattleScript_EffectHealBell @ EFFECT_HEAL_BELL + .4byte BattleScript_EffectHit @ EFFECT_ALWAYS_CRIT + .4byte BattleScript_EffectTripleKick @ EFFECT_TRIPLE_KICK + .4byte BattleScript_EffectThief @ EFFECT_THIEF + .4byte BattleScript_EffectMeanLook @ EFFECT_MEAN_LOOK + .4byte BattleScript_EffectNightmare @ EFFECT_NIGHTMARE + .4byte BattleScript_EffectMinimize @ EFFECT_MINIMIZE + .4byte BattleScript_EffectCurse @ EFFECT_CURSE + .4byte BattleScript_EffectHealingWish @ EFFECT_HEALING_WISH + .4byte BattleScript_EffectProtect @ EFFECT_PROTECT + .4byte BattleScript_EffectSpikes @ EFFECT_SPIKES + .4byte BattleScript_EffectForesight @ EFFECT_FORESIGHT + .4byte BattleScript_EffectPerishSong @ EFFECT_PERISH_SONG + .4byte BattleScript_EffectSandstorm @ EFFECT_SANDSTORM + .4byte BattleScript_EffectEndure @ EFFECT_ENDURE + .4byte BattleScript_EffectRollout @ EFFECT_ROLLOUT + .4byte BattleScript_EffectSwagger @ EFFECT_SWAGGER + .4byte BattleScript_EffectFuryCutter @ EFFECT_FURY_CUTTER + .4byte BattleScript_EffectAttract @ EFFECT_ATTRACT + .4byte BattleScript_EffectHit @ EFFECT_RETURN + .4byte BattleScript_EffectPresent @ EFFECT_PRESENT + .4byte BattleScript_EffectHit @ EFFECT_FRUSTRATION + .4byte BattleScript_EffectSafeguard @ EFFECT_SAFEGUARD + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_125 + .4byte BattleScript_EffectMagnitude @ EFFECT_MAGNITUDE + .4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS + .4byte BattleScript_EffectHit @ EFFECT_PURSUIT + .4byte BattleScript_EffectRapidSpin @ EFFECT_RAPID_SPIN + .4byte BattleScript_EffectSonicboom @ EFFECT_SONICBOOM + .4byte BattleScript_EffectCaptivate @ EFFECT_CAPTIVATE + .4byte BattleScript_EffectMorningSun @ EFFECT_MORNING_SUN + .4byte BattleScript_EffectSynthesis @ EFFECT_SYNTHESIS + .4byte BattleScript_EffectMoonlight @ EFFECT_MOONLIGHT + .4byte BattleScript_EffectHit @ EFFECT_HIDDEN_POWER + .4byte BattleScript_EffectRainDance @ EFFECT_RAIN_DANCE + .4byte BattleScript_EffectSunnyDay @ EFFECT_SUNNY_DAY + .4byte BattleScript_EffectDefenseUpHit @ EFFECT_DEFENSE_UP_HIT + .4byte BattleScript_EffectAttackUpHit @ EFFECT_ATTACK_UP_HIT + .4byte BattleScript_EffectAllStatsUpHit @ EFFECT_ALL_STATS_UP_HIT + .4byte BattleScript_EffectHit @ EFFECT_FELL_STINGER + .4byte BattleScript_EffectBellyDrum @ EFFECT_BELLY_DRUM + .4byte BattleScript_EffectPsychUp @ EFFECT_PSYCH_UP + .4byte BattleScript_EffectMirrorCoat @ EFFECT_MIRROR_COAT + .4byte BattleScript_EffectSkullBash @ EFFECT_SKULL_BASH + .4byte BattleScript_EffectTwister @ EFFECT_TWISTER + .4byte BattleScript_EffectEarthquake @ EFFECT_EARTHQUAKE + .4byte BattleScript_EffectFutureSight @ EFFECT_FUTURE_SIGHT + .4byte BattleScript_EffectGust @ EFFECT_GUST + .4byte BattleScript_EffectStomp @ EFFECT_FLINCH_MINIMIZE_HIT + .4byte BattleScript_EffectSolarBeam @ EFFECT_SOLAR_BEAM + .4byte BattleScript_EffectThunder @ EFFECT_THUNDER + .4byte BattleScript_EffectTeleport @ EFFECT_TELEPORT + .4byte BattleScript_EffectBeatUp @ EFFECT_BEAT_UP + .4byte BattleScript_EffectSemiInvulnerable @ EFFECT_SEMI_INVULNERABLE + .4byte BattleScript_EffectDefenseCurl @ EFFECT_DEFENSE_CURL + .4byte BattleScript_EffectSoftboiled @ EFFECT_SOFTBOILED + .4byte BattleScript_EffectFakeOut @ EFFECT_FAKE_OUT + .4byte BattleScript_EffectUproar @ EFFECT_UPROAR + .4byte BattleScript_EffectStockpile @ EFFECT_STOCKPILE + .4byte BattleScript_EffectSpitUp @ EFFECT_SPIT_UP + .4byte BattleScript_EffectSwallow @ EFFECT_SWALLOW + .4byte BattleScript_EffectWorrySeed @ EFFECT_WORRY_SEED + .4byte BattleScript_EffectHail @ EFFECT_HAIL + .4byte BattleScript_EffectTorment @ EFFECT_TORMENT + .4byte BattleScript_EffectFlatter @ EFFECT_FLATTER + .4byte BattleScript_EffectWillOWisp @ EFFECT_WILL_O_WISP + .4byte BattleScript_EffectMemento @ EFFECT_MEMENTO + .4byte BattleScript_EffectHit @ EFFECT_FACADE + .4byte BattleScript_EffectFocusPunch @ EFFECT_FOCUS_PUNCH + .4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLINGSALT + .4byte BattleScript_EffectFollowMe @ EFFECT_FOLLOW_ME + .4byte BattleScript_EffectNaturePower @ EFFECT_NATURE_POWER + .4byte BattleScript_EffectCharge @ EFFECT_CHARGE + .4byte BattleScript_EffectTaunt @ EFFECT_TAUNT + .4byte BattleScript_EffectHelpingHand @ EFFECT_HELPING_HAND + .4byte BattleScript_EffectTrick @ EFFECT_TRICK + .4byte BattleScript_EffectRolePlay @ EFFECT_ROLE_PLAY + .4byte BattleScript_EffectWish @ EFFECT_WISH + .4byte BattleScript_EffectAssist @ EFFECT_ASSIST + .4byte BattleScript_EffectIngrain @ EFFECT_INGRAIN + .4byte BattleScript_EffectSuperpower @ EFFECT_SUPERPOWER + .4byte BattleScript_EffectMagicCoat @ EFFECT_MAGIC_COAT + .4byte BattleScript_EffectRecycle @ EFFECT_RECYCLE + .4byte BattleScript_EffectHit @ EFFECT_REVENGE + .4byte BattleScript_EffectBrickBreak @ EFFECT_BRICK_BREAK + .4byte BattleScript_EffectYawn @ EFFECT_YAWN + .4byte BattleScript_EffectKnockOff @ EFFECT_KNOCK_OFF + .4byte BattleScript_EffectEndeavor @ EFFECT_ENDEAVOR + .4byte BattleScript_EffectHit @ EFFECT_ERUPTION + .4byte BattleScript_EffectSkillSwap @ EFFECT_SKILL_SWAP + .4byte BattleScript_EffectImprison @ EFFECT_IMPRISON + .4byte BattleScript_EffectRefresh @ EFFECT_REFRESH + .4byte BattleScript_EffectGrudge @ EFFECT_GRUDGE + .4byte BattleScript_EffectSnatch @ EFFECT_SNATCH + .4byte BattleScript_EffectHit @ EFFECT_LOW_KICK + .4byte BattleScript_EffectSecretPower @ EFFECT_SECRET_POWER + .4byte BattleScript_EffectRecoil33 @ EFFECT_RECOIL_33 + .4byte BattleScript_EffectTeeterDance @ EFFECT_TEETER_DANCE + .4byte BattleScript_EffectHitEscape @ EFFECT_HIT_ESCAPE + .4byte BattleScript_EffectMudSport @ EFFECT_MUD_SPORT + .4byte BattleScript_EffectPoisonFang @ EFFECT_POISON_FANG + .4byte BattleScript_EffectHit @ EFFECT_WEATHER_BALL + .4byte BattleScript_EffectOverheat @ EFFECT_OVERHEAT + .4byte BattleScript_EffectTickle @ EFFECT_TICKLE + .4byte BattleScript_EffectCosmicPower @ EFFECT_COSMIC_POWER + .4byte BattleScript_EffectSkyUppercut @ EFFECT_SKY_UPPERCUT + .4byte BattleScript_EffectBulkUp @ EFFECT_BULK_UP + .4byte BattleScript_EffectPlaceholder @ EFFECT_PLACEHOLDER + .4byte BattleScript_EffectWaterSport @ EFFECT_WATER_SPORT + .4byte BattleScript_EffectCalmMind @ EFFECT_CALM_MIND + .4byte BattleScript_EffectDragonDance @ EFFECT_DRAGON_DANCE + .4byte BattleScript_EffectCamouflage @ EFFECT_CAMOUFLAGE + .4byte BattleScript_EffectHit @ EFFECT_PLEDGE + .4byte BattleScript_EffectFling @ EFFECT_FLING + .4byte BattleScript_EffectNaturalGift @ EFFECT_NATURAL_GIFT + .4byte BattleScript_EffectWakeUpSlap @ EFFECT_WAKE_UP_SLAP + .4byte BattleScript_EffectHit @ EFFECT_WRING_OUT + .4byte BattleScript_EffectHit @ EFFECT_HEX + .4byte BattleScript_EffectHit @ EFFECT_ASSURANCE + .4byte BattleScript_EffectHit @ EFFECT_TRUMP_CARD + .4byte BattleScript_EffectHit @ EFFECT_ACROBATICS + .4byte BattleScript_EffectHit @ EFFECT_HEAT_CRASH + .4byte BattleScript_EffectHit @ EFFECT_PUNISHMENT + .4byte BattleScript_EffectHit @ EFFECT_STORED_POWER + .4byte BattleScript_EffectHit @ EFFECT_ELECTRO_BALL + .4byte BattleScript_EffectHit @ EFFECT_GYRO_BALL + .4byte BattleScript_EffectHit @ EFFECT_ECHOED_VOICE + .4byte BattleScript_EffectHit @ EFFECT_PAYBACK + .4byte BattleScript_EffectHit @ EFFECT_ROUND + .4byte BattleScript_EffectHit @ EFFECT_BRINE + .4byte BattleScript_EffectHit @ EFFECT_VENOSHOCK + .4byte BattleScript_EffectHit @ EFFECT_RETALIATE + .4byte BattleScript_EffectBulldoze @ EFFECT_BULLDOZE + .4byte BattleScript_EffectHit @ EFFECT_FOUL_PLAY + .4byte BattleScript_EffectHit @ EFFECT_PSYSHOCK + .4byte BattleScript_EffectRoost @ EFFECT_ROOST + .4byte BattleScript_EffectGravity @ EFFECT_GRAVITY + .4byte BattleScript_EffectMircleEye @ EFFECT_MIRACLE_EYE + .4byte BattleScript_EffectTailwind @ EFFECT_TAILWIND + .4byte BattleScript_EffectEmbargo @ EFFECT_EMBARGO + .4byte BattleScript_EffectAquaRing @ EFFECT_AQUA_RING + .4byte BattleScript_EffectTrickRoom @ EFFECT_TRICK_ROOM + .4byte BattleScript_EffectWonderRoom @ EFFECT_WONDER_ROOM + .4byte BattleScript_EffectMagicRoom @ EFFECT_MAGIC_ROOM + .4byte BattleScript_EffectMagnetRise @ EFFECT_MAGNET_RISE + .4byte BattleScript_EffectToxicSpikes @ EFFECT_TOXIC_SPIKES + .4byte BattleScript_EffectGastroAcid @ EFFECT_GASTRO_ACID + .4byte BattleScript_EffectStealthRock @ EFFECT_STEALTH_ROCK + .4byte BattleScript_EffectTelekinesis @ EFFECT_TELEKINESIS + .4byte BattleScript_EffectPowerSwap @ EFFECT_POWER_SWAP + .4byte BattleScript_EffectGuardSwap @ EFFECT_GUARD_SWAP + .4byte BattleScript_EffectHeartSwap @ EFFECT_HEART_SWAP + .4byte BattleScript_EffectPowerSplit @ EFFECT_POWER_SPLIT + .4byte BattleScript_EffectGuardSplit @ EFFECT_GUARD_SPLIT + .4byte BattleScript_EffectStickyWeb @ EFFECT_STICKY_WEB + .4byte BattleScript_EffectMetalBurst @ EFFECT_METAL_BURST + .4byte BattleScript_EffectLuckyChant @ EFFECT_LUCKY_CHANT + .4byte BattleScript_EffectSuckerPunch @ EFFECT_SUCKER_PUNCH + .4byte BattleScript_EffectSpecialDefenseDownHit2 @ EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2 + .4byte BattleScript_EffectSimpleBeam @ EFFECT_SIMPLE_BEAM + .4byte BattleScript_EffectEntrainment @ EFFECT_ENTRAINMENT + .4byte BattleScript_EffectHealPulse @ EFFECT_HEAL_PULSE + .4byte BattleScript_EffectQuash @ EFFECT_QUASH + .4byte BattleScript_EffectIonDeluge @ EFFECT_ION_DELUGE + .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_DRY + .4byte BattleScript_EffectTopsyTurvy @ EFFECT_TOPSY_TURVY + .4byte BattleScript_EffectMistyTerrain @ EFFECT_MISTY_TERRAIN + .4byte BattleScript_EffectGrassyTerrain @ EFFECT_GRASSY_TERRAIN + .4byte BattleScript_EffectElectricTerrain @ EFFECT_ELECTRIC_TERRAIN + .4byte BattleScript_EffectPsychicTerrain @ EFFECT_PSYCHIC_TERRAIN + .4byte BattleScript_EffectAttackAccUp @ EFFECT_ATTACK_ACCURACY_UP + .4byte BattleScript_EffectAttackSpAttackUp @ EFFECT_ATTACK_SPATK_UP + .4byte BattleScript_EffectHurricane @ EFFECT_HURRICANE + .4byte BattleScript_EffectHit @ EFFECT_TWO_TYPED_MOVE + .4byte BattleScript_EffectMeFirst @ EFFECT_ME_FIRST + .4byte BattleScript_EffectSpeedUpHit @ EFFECT_SPEED_UP_HIT + .4byte BattleScript_EffectQuiverDance @ EFFECT_QUIVER_DANCE + .4byte BattleScript_EffectCoil @ EFFECT_COIL + .4byte BattleScript_EffectElectrify @ EFFECT_ELECTRIFY + .4byte BattleScript_EffectBurnHit @ EFFECT_SCALD + .4byte BattleScript_EffectReflectType @ EFFECT_REFLECT_TYPE + .4byte BattleScript_EffectSoak @ EFFECT_SOAK + .4byte BattleScript_EffectGrowth @ EFFECT_GROWTH + .4byte BattleScript_EffectCloseCombat @ EFFECT_CLOSE_COMBAT + .4byte BattleScript_EffectLastResort @ EFFECT_LAST_RESORT + .4byte BattleScript_EffectRecoil33Status @ EFFECT_RECOIL_33_STATUS + .4byte BattleScript_EffectFlinchStatus @ EFFECT_FLINCH_STATUS + .4byte BattleScript_EffectRecoil50 @ EFFECT_RECOIL_50 + .4byte BattleScript_EffectShellSmash @ EFFECT_SHELL_SMASH + .4byte BattleScript_EffectShiftGear @ EFFECT_SHIFT_GEAR + .4byte BattleScript_EffectDefenseUp3 @ EFFECT_DEFENSE_UP_3 + .4byte BattleScript_EffectNobleRoar @ EFFECT_NOBLE_ROAR + .4byte BattleScript_EffectVenomDrench @ EFFECT_VENOM_DRENCH + .4byte BattleScript_EffectToxicThread @ EFFECT_TOXIC_THREAD + .4byte BattleScript_EffectClearSmog @ EFFECT_CLEAR_SMOG + .4byte BattleScript_EffectHitSwitchTarget @ EFFECT_HIT_SWITCH_TARGET + .4byte BattleScript_EffectFinalGambit @ EFFECT_FINAL_GAMBIT + .4byte BattleScript_EffectHit @ EFFECT_CHANGE_TYPE_ON_ITEM + .4byte BattleScript_EffectAutotomize @ EFFECT_AUTOTOMIZE + .4byte BattleScript_EffectCopycat @ EFFECT_COPYCAT + .4byte BattleScript_EffectDefog @ EFFECT_DEFOG + .4byte BattleScript_EffectHitEnemyHealAlly @ EFFECT_HIT_ENEMY_HEAL_ALLY + .4byte BattleScript_EffectSmackDown @ EFFECT_SMACK_DOWN + .4byte BattleScript_EffectSynchronoise @ EFFECT_SYNCHRONOISE + .4byte BattleScript_EffectPsychoShift @ EFFECT_PSYCHO_SHIFT + .4byte BattleScript_EffectPowerTrick @ EFFECT_POWER_TRICK + .4byte BattleScript_EffectFlameBurst @ EFFECT_FLAME_BURST + .4byte BattleScript_EffectAfterYou @ EFFECT_AFTER_YOU + .4byte BattleScript_EffectBestow @ EFFECT_BESTOW + .4byte BattleScript_EffectRototiller @ EFFECT_ROTOTILLER + .4byte BattleScript_EffectFlowerShield @ EFFECT_FLOWER_SHIELD + .4byte BattleScript_EffectHitPreventEscape @ EFFECT_HIT_PREVENT_ESCAPE + .4byte BattleScript_EffectSpeedSwap @ EFFECT_SPEED_SWAP + .4byte BattleScript_EffectDefenseUp2Hit @ EFFECT_DEFENSE_UP2_HIT + .4byte BattleScript_EffectHit @ EFFECT_REVELATION_DANCE + .4byte BattleScript_EffectAuroraVeil @ EFFECT_AURORA_VEIL + .4byte BattleScript_EffectThirdType @ EFFECT_THIRD_TYPE + .4byte BattleScript_EffectFeint @ EFFECT_FEINT + .4byte BattleScript_EffectSparklingAria @ EFFECT_SPARKLING_ARIA + .4byte BattleScript_EffectAcupressure @ EFFECT_ACUPRESSURE + .4byte BattleScript_EffectAromaticMist @ EFFECT_AROMATIC_MIST + .4byte BattleScript_EffectPowder @ EFFECT_POWDER + .4byte BattleScript_EffectSpAtkUpHit @ EFFECT_SP_ATTACK_UP_HIT + .4byte BattleScript_EffectHit @ EFFECT_BELCH + .4byte BattleScript_EffectPartingShot @ EFFECT_PARTING_SHOT + .4byte BattleScript_EffectSpectralThief @ EFFECT_SPECTRAL_THIEF + .4byte BattleScript_EffectVCreate @ EFFECT_V_CREATE + .4byte BattleScript_EffectMatBlock @ EFFECT_MAT_BLOCK + .4byte BattleScript_EffectHit @ EFFECT_STOMPING_TANTRUM + .4byte BattleScript_EffectCoreEnforcer @ EFFECT_CORE_ENFORCER + .4byte BattleScript_EffectInstruct @ EFFECT_INSTRUCT + .4byte BattleScript_EffectThroatChop @ EFFECT_THROAT_CHOP + .4byte BattleScript_EffectLaserFocus @ EFFECT_LASER_FOCUS + .4byte BattleScript_EffectMagneticFlux @ EFFECT_MAGNETIC_FLUX + .4byte BattleScript_EffectGearUp @ EFFECT_GEAR_UP + .4byte BattleScript_EffectIncinerate @ EFFECT_INCINERATE + .4byte BattleScript_EffectBugBite @ EFFECT_BUG_BITE + .4byte BattleScript_EffectStrengthSap @ EFFECT_STRENGTH_SAP + .4byte BattleScript_EffectMindBlown @ EFFECT_MIND_BLOWN + .4byte BattleScript_EffectPurify @ EFFECT_PURIFY + .4byte BattleScript_EffectBurnUp @ EFFECT_BURN_UP + .4byte BattleScript_EffectShoreUp @ EFFECT_SHORE_UP + .4byte BattleScript_EffectGeomancy @ EFFECT_GEOMANCY + .4byte BattleScript_EffectFairyLock @ EFFECT_FAIRY_LOCK + .4byte BattleScript_EffectAllySwitch @ EFFECT_ALLY_SWITCH + .4byte BattleScript_EffectRelicSong @ EFFECT_RELIC_SONG + .4byte BattleScript_EffectAttackerDefenseDownHit @ EFFECT_ATTACKER_DEFENSE_DOWN_HIT + .4byte BattleScript_EffectHit @ EFFECT_BODY_PRESS + .4byte BattleScript_EffectEerieSpell @ EFFECT_EERIE_SPELL + .4byte BattleScript_EffectJungleHealing @ EFFECT_JUNGLE_HEALING + .4byte BattleScript_EffectCoaching @ EFFECT_COACHING + .4byte BattleScript_EffectHit @ EFFECT_LASH_OUT + .4byte BattleScript_EffectHit @ EFFECT_GRASSY_GLIDE + .4byte BattleScript_EffectRemoveTerrain @ EFFECT_REMOVE_TERRAIN + .4byte BattleScript_EffectHit @ EFFECT_DYNAMAX_DOUBLE_DMG + .4byte BattleScript_EffectDecorate @ EFFECT_DECORATE + .4byte BattleScript_EffectHit @ EFFECT_SNIPE_SHOT + .4byte BattleScript_EffectTripleHit @ EFFECT_TRIPLE_HIT + .4byte BattleScript_EffectRecoilHP25 @ EFFECT_RECOIL_HP_25 + .4byte BattleScript_EffectStuffCheeks @ EFFECT_STUFF_CHEEKS + .4byte BattleScript_EffectDefenseDownHit @ EFFECT_GRAV_APPLE + .4byte BattleScript_EffectEvasionUpHit @ EFFECT_EVASION_UP_HIT + .4byte BattleScript_EffectDoubleIronBash @ EFFECT_DOUBLE_IRON_BASH + .4byte BattleScript_EffectGlitzyGlow @ EFFECT_GLITZY_GLOW + .4byte BattleScript_EffectBaddyBad @ EFFECT_BADDY_BAD + .4byte BattleScript_EffectSappySeed @ EFFECT_SAPPY_SEED + .4byte BattleScript_EffectFreezyFrost @ EFFECT_FREEZY_FROST + .4byte BattleScript_EffectSparklySwirl @ EFFECT_SPARKLY_SWIRL + .4byte BattleScript_EffectPlasmaFists @ EFFECT_PLASMA_FISTS + .4byte BattleScript_EffectHyperspaceFury @ EFFECT_HYPERSPACE_FURY + .4byte BattleScript_EffectAuraWheel @ EFFECT_AURA_WHEEL + .4byte BattleScript_EffectPhotonGeyser @ EFFECT_PHOTON_GEYSER + .4byte BattleScript_EffectShellSideArm @ EFFECT_SHELL_SIDE_ARM + .4byte BattleScript_EffectHit @ EFFECT_TERRAIN_PULSE + .4byte BattleScript_EffectJawLock @ EFFECT_JAW_LOCK + .4byte BattleScript_EffectNoRetreat @ EFFECT_NO_RETREAT + .4byte BattleScript_EffectTarShot @ EFFECT_TAR_SHOT + .4byte BattleScript_EffectPoltergeist @ EFFECT_POLTERGEIST + .4byte BattleScript_EffectOctolock @ EFFECT_OCTOLOCK + .4byte BattleScript_EffectClangorousSoul @ EFFECT_CLANGOROUS_SOUL + .4byte BattleScript_EffectHit @ EFFECT_BOLT_BEAK + .4byte BattleScript_EffectSkyDrop @ EFFECT_SKY_DROP + .4byte BattleScript_EffectHit @ EFFECT_EXPANDING_FORCE + .4byte BattleScript_EffectScaleShot @ EFFECT_SCALE_SHOT + .4byte BattleScript_EffectMeteorBeam @ EFFECT_METEOR_BEAM + .4byte BattleScript_EffectHit @ EFFECT_RISING_VOLTAGE + .4byte BattleScript_EffectHit @ EFFECT_BEAK_BLAST + .4byte BattleScript_EffectCourtChange @ EFFECT_COURT_CHANGE + .4byte BattleScript_EffectSteelBeam @ EFFECT_STEEL_BEAM + .4byte BattleScript_EffectExtremeEvoboost @ EFFECT_EXTREME_EVOBOOST + .4byte BattleScript_EffectTerrainHit @ EFFECT_DAMAGE_SET_TERRAIN + +BattleScript_AffectionBasedEndurance:: + playanimation BS_TARGET, B_ANIM_AFFECTION_HANGED_ON + printstring STRINGID_TARGETTOUGHEDITOUT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AffectionBasedStatusHeal:: + jumpifstatus BS_ATTACKER, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_AffectionBasedStatus_HealPoisonString + jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_AffectionBasedStatus_HealSleepString + jumpifstatus BS_ATTACKER, STATUS1_PARALYSIS, BattleScript_AffectionBasedStatus_HealParalysisString + jumpifstatus BS_ATTACKER, STATUS1_BURN, BattleScript_AffectionBasedStatus_HealBurnString + jumpifstatus BS_ATTACKER, STATUS1_FREEZE, BattleScript_AffectionBasedStatus_HealFreezeString + end2 +BattleScript_AffectionBasedStatus_HealPoisonString: + printstring STRINGID_ATTACKEREXPELLEDTHEPOISON + goto BattleScript_AffectionBasedStatusHeal_Continue +BattleScript_AffectionBasedStatus_HealSleepString: + printstring STRINGID_ATTACKERSHOOKITSELFAWAKE + goto BattleScript_AffectionBasedStatusHeal_Continue +BattleScript_AffectionBasedStatus_HealParalysisString: + printstring STRINGID_ATTACKERBROKETHROUGHPARALYSIS + goto BattleScript_AffectionBasedStatusHeal_Continue +BattleScript_AffectionBasedStatus_HealBurnString: + printstring STRINGID_ATTACKERHEALEDITSBURN + goto BattleScript_AffectionBasedStatusHeal_Continue +BattleScript_AffectionBasedStatus_HealFreezeString: + printstring STRINGID_ATTACKERMELTEDTHEICE +BattleScript_AffectionBasedStatusHeal_Continue: + waitmessage B_WAIT_TIME_LONG + clearstatus BS_ATTACKER + waitstate + updatestatusicon BS_ATTACKER + waitstate + end2 + +BattleScript_EffectSteelBeam:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_SteelBeamMiss, ACC_CURR_MOVE + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_SteelBeamAfterSelfDamage + call BattleScript_SteelBeamSelfDamage +BattleScript_SteelBeamAfterSelfDamage:: + waitstate + tryfaintmon BS_ATTACKER + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd +BattleScript_SteelBeamMiss:: + pause B_WAIT_TIME_SHORT + effectivenesssound + resultmessage + waitmessage B_WAIT_TIME_LONG + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_MoveEnd + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED + call BattleScript_SteelBeamSelfDamage + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED + goto BattleScript_SteelBeamAfterSelfDamage + +BattleScript_SteelBeamSelfDamage:: + dmg_1_2_attackerhp + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + return + +BattleScript_EffectCourtChange:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + swapsidestatuses + attackanimation + waitanimation + printstring STRINGID_COURTCHANGE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_BeakBlastSetUp:: + setbeakblast BS_ATTACKER + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + playanimation BS_ATTACKER, B_ANIM_BEAK_BLAST_SETUP, NULL + printstring STRINGID_HEATUPBEAK + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_BeakBlastBurn:: + setbyte cMULTISTRING_CHOOSER, 0 + copybyte gEffectBattler, gBattlerAttacker + call BattleScript_MoveEffectBurn + return + +BattleScript_EffectMeteorBeam:: + @ DecideTurn + jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn + setbyte sTWOTURN_STRINGID, B_MSG_TURN1_METEOR_BEAM + call BattleScript_FirstChargingTurnMeteorBeam + jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd + call BattleScript_PowerHerbActivation + goto BattleScript_TwoTurnMovesSecondTurn + +BattleScript_FirstChargingTurnMeteorBeam:: + attackcanceler + printstring STRINGID_EMPTYSTRING3 + ppreduce + attackanimation + waitanimation + orword gHitMarker, HITMARKER_CHARGING + setmoveeffect MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER + seteffectprimary + copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID + printfromtable gFirstTurnOfTwoStringIds + waitmessage B_WAIT_TIME_LONG + setmoveeffect MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER + seteffectsecondary + return + +BattleScript_EffectScaleShot:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setmultihitcounter 0x0 + initmultihitstring + sethword sMULTIHIT_EFFECT, 0x0 +BattleScript_ScaleShotLoop:: + jumpifhasnohp BS_ATTACKER, BattleScript_ScaleShotEnd + jumpifhasnohp BS_TARGET, BattleScript_ScaleShotPrintStrings + jumpifhalfword CMP_EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_ScaleShotDoMultiHit + jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_ScaleShotPrintStrings +BattleScript_ScaleShotDoMultiHit:: + movevaluescleanup + copyhword sMOVE_EFFECT, sMULTIHIT_EFFECT + critcalc + damagecalc + jumpifmovehadnoeffect BattleScript_ScaleShotMultiHitNoMoreHits + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + multihitresultmessage + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + addbyte sMULTIHIT_STRING + 4, 0x1 + moveendto MOVEEND_NEXT_TARGET + jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_FOE_ENDURED, BattleScript_ScaleShotPrintStrings + decrementmultihit BattleScript_ScaleShotLoop + goto BattleScript_ScaleShotPrintStrings +BattleScript_ScaleShotMultiHitNoMoreHits:: + pause B_WAIT_TIME_SHORT +BattleScript_ScaleShotPrintStrings:: + resultmessage + waitmessage B_WAIT_TIME_LONG + jumpifmovehadnoeffect BattleScript_ScaleShotEnd + copyarray gBattleTextBuff1, sMULTIHIT_STRING, 0x6 + printstring STRINGID_HITXTIMES + waitmessage B_WAIT_TIME_LONG +BattleScript_ScaleShotEnd:: + setmoveeffect MOVE_EFFECT_SCALE_SHOT | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + seteffectwithchance + tryfaintmon BS_TARGET + moveendcase MOVEEND_SYNCHRONIZE_TARGET + moveendfrom MOVEEND_STATUS_IMMUNITY_ABILITIES + end + +BattleScript_EffectSkyDrop: + jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SkyDropTurn2 + attackcanceler + ppreduce + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + jumpifsubstituteblocks BattleScript_ButItFailed + jumpiftargetally BattleScript_ButItFailed + jumpifunder200 BS_TARGET, BattleScript_SkyDropWork + pause B_WAIT_TIME_SHORT + printstring STRINGID_TARGETTOOHEAVY + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_SkyDropWork: + setskydrop + setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SKY_DROP + setsemiinvulnerablebit + call BattleScriptFirstChargingTurnAfterAttackString + goto BattleScript_MoveEnd +BattleScript_SkyDropTurn2: + attackcanceler + setmoveeffect MOVE_EFFECT_CHARGING + setbyte sB_ANIM_TURN, 0x1 + clearstatusfromeffect BS_ATTACKER + orword gHitMarker, HITMARKER_NO_PPDEDUCT + argumenttomoveeffect + clearsemiinvulnerablebit + attackstring + clearskydrop BattleScript_SkyDropChangedTarget + jumpiftype BS_TARGET, TYPE_FLYING, BattleScript_SkyDropFlyingType + goto BattleScript_HitFromCritCalc +BattleScript_SkyDropFlyingType: + makevisible BS_TARGET + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_LONG + makevisible BS_ATTACKER + jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_SkyDropFlyingAlreadyConfused + jumpifstatus2 BS_TARGET, STATUS2_LOCK_CONFUSE, BattleScript_SkyDropFlyingConfuseLock + goto BattleScript_MoveEnd +BattleScript_SkyDropChangedTarget: + pause B_WAIT_TIME_SHORT + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + resultmessage + waitmessage B_WAIT_TIME_LONG + makevisible BS_ATTACKER + goto BattleScript_MoveEnd + +BattleScript_SkyDropFlyingConfuseLock: + setmoveeffect MOVE_EFFECT_CONFUSION + seteffectprimary +BattleScript_SkyDropFlyingAlreadyConfused: + setmoveeffect MOVE_EFFECT_THRASH + clearstatusfromeffect BS_TARGET + jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_MoveEnd + setbyte BS_ATTACKER, BS_TARGET + goto BattleScript_ThrashConfuses + +BattleScript_EffectFling: + jumpifcantfling BS_ATTACKER, BattleScript_ButItFailedAtkStringPpReduce + jumpifstatus3 BS_ATTACKER, STATUS3_EMBARGO, BattleScript_ButItFailedAtkStringPpReduce + jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_MAGIC_ROOM, BattleScript_ButItFailedAtkStringPpReduce + setlastuseditem BS_ATTACKER + removeitem BS_ATTACKER + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + pause B_WAIT_TIME_SHORT + printstring STRINGID_PKMNFLUNG + waitmessage B_WAIT_TIME_SHORT + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_MED + resultmessage + waitmessage B_WAIT_TIME_MED + jumpiflastuseditemberry BattleScript_EffectFlingConsumeBerry + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_FLAME_ORB, BattleScript_FlingFlameOrb + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_FLINCH, BattleScript_FlingFlinch + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_LIGHT_BALL, BattleScript_FlingLightBall + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_MENTAL_HERB, BattleScript_FlingMentalHerb + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_POISON_POWER, BattleScript_FlingPoisonBarb + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_TOXIC_ORB, BattleScript_FlingToxicOrb + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_RESTORE_STATS, BattleScript_FlingWhiteHerb +BattleScript_EffectFlingConsumeBerry: + savebattleritem BS_TARGET + battleritemtolastuseditem BS_TARGET + setbyte sBERRY_OVERRIDE, TRUE @ override the requirements for eating berries + orword gHitMarker, HITMARKER_NO_ANIMATIONS + consumeberry BS_TARGET + bicword gHitMarker, HITMARKER_NO_ANIMATIONS + setbyte sBERRY_OVERRIDE, FALSE + restorebattleritem BS_TARGET +BattleScript_FlingEnd: + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_FlingFlameOrb: + setmoveeffect MOVE_EFFECT_BURN + seteffectprimary + goto BattleScript_FlingEnd +BattleScript_FlingFlinch: + setmoveeffect MOVE_EFFECT_FLINCH + seteffectprimary + goto BattleScript_FlingEnd +BattleScript_FlingLightBall: + setmoveeffect MOVE_EFFECT_PARALYSIS + seteffectprimary + goto BattleScript_FlingEnd +BattleScript_FlingMentalHerb: + curecertainstatuses BS_TARGET + savetarget + copybyte gBattlerAttacker, gBattlerTarget + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL + printfromtable gMentalHerbCureStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_ATTACKER + restoretarget + goto BattleScript_FlingEnd +BattleScript_FlingPoisonBarb: + setmoveeffect MOVE_EFFECT_POISON + seteffectprimary + goto BattleScript_FlingEnd +BattleScript_FlingToxicOrb: + setmoveeffect MOVE_EFFECT_TOXIC + seteffectprimary + goto BattleScript_FlingEnd +BattleScript_FlingWhiteHerb: + tryresetnegativestatstages BS_TARGET + swapattackerwithtarget + printstring STRINGID_PKMNSTATUSNORMAL + waitmessage B_WAIT_TIME_MED + swapattackerwithtarget + goto BattleScript_FlingEnd + +BattleScript_EffectShellSideArm: + shellsidearmcheck + setmoveeffect MOVE_EFFECT_POISON + goto BattleScript_EffectHit + +BattleScript_EffectPhotonGeyser: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + photongeysercheck BS_ATTACKER + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_EffectAuraWheel: @ Aura Wheel can only be used by Morpeko + jumpifspecies BS_ATTACKER, SPECIES_MORPEKO, BattleScript_EffectSpeedUpHit + jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectSpeedUpHit + printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectClangorousSoul: + attackcanceler + attackstring + ppreduce + cutonethirdhpraisestats BattleScript_ButItFailed + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_SKIP_DMG_TRACK | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE + attackanimation + waitanimation + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + call BattleScript_AllStatsUp + goto BattleScript_MoveEnd + +BattleScript_EffectOctolock: + attackcanceler + jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setoctolock BS_TARGET, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_OctolockEndTurn:: + setbyte sSTAT_ANIM_PLAYED, FALSE + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_OctolockLowerDef + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_OctolockTryLowerSpDef + goto BattleScript_OctolockEnd2 +BattleScript_OctolockLowerDef: + jumpifability BS_TARGET, ABILITY_BIG_PECKS, BattleScript_OctolockTryLowerSpDef + playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE + setbyte sSTAT_ANIM_PLAYED, TRUE + setstatchanger STAT_DEF, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_OctolockTryLowerSpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_OctolockTryLowerSpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_OctolockTryLowerSpDef: + jumpifbyte CMP_EQUAL, sSTAT_ANIM_PLAYED, TRUE, BattleScript_OctolockSkipSpDefAnim + playstatchangeanimation BS_ATTACKER, BIT_SPDEF, STAT_CHANGE_NEGATIVE +BattleScript_OctolockSkipSpDefAnim: + setstatchanger STAT_SPDEF, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_OctolockEnd2 + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_OctolockEnd2 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_OctolockEnd2:: + end2 + +BattleScript_EffectPoltergeist: + attackcanceler + attackstring + ppreduce + checkpoltergeist BS_TARGET, BattleScript_ButItFailed + printstring STRINGID_ABOUTTOUSEPOLTERGEIST + waitmessage B_WAIT_TIME_LONG + goto BattleScript_HitFromCritCalc + +BattleScript_EffectTarShot: + attackcanceler + jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + cantarshotwork BS_TARGET, BattleScript_ButItFailedAtkStringPpReduce + attackstring + ppreduce + setstatchanger STAT_SPEED, 1, TRUE + attackanimation + waitanimation + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TryTarShot + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_TryTarShot: + trytarshot BS_TARGET, BattleScript_MoveEnd + printstring STRINGID_PKMNBECAMEWEAKERTOFIRE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectNoRetreat: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + trynoretreat BS_TARGET, BattleScript_ButItFailed + attackanimation + waitanimation + call BattleScript_AllStatsUp + jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_MoveEnd + setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE + seteffectprimary + printstring STRINGID_CANTESCAPEDUETOUSEDMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectJawLock: + setmoveeffect MOVE_EFFECT_TRAP_BOTH | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + +BattleScript_BothCanNoLongerEscape:: + printstring STRINGID_BOTHCANNOLONGERESCAPE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectHyperspaceFury: + jumpifspecies BS_ATTACKER, SPECIES_HOOPA_UNBOUND, BattleScript_EffectHyperspaceFuryUnbound + jumpifspecies BS_ATTACKER, SPECIES_HOOPA, BattleScript_ButHoopaCantUseIt + printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectHyperspaceFuryUnbound:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + pause B_WAIT_TIME_LONG + ppreduce + setmoveeffect MOVE_EFFECT_FEINT + seteffectwithchance + setmoveeffect MOVE_EFFECT_DEF_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + goto BattleScript_HitFromCritCalc + +BattleScript_ButHoopaCantUseIt: + printstring STRINGID_BUTHOOPACANTUSEIT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_HyperspaceFuryRemoveProtect:: + printstring STRINGID_BROKETHROUGHPROTECTION + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectPlasmaFists: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET + applyplasmafists + printstring STRINGID_IONDELUGEON + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectSparklySwirl: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET + healpartystatus + waitstate + updatestatusicon BS_ATTACKER_WITH_PARTNER + waitstate + goto BattleScript_MoveEnd + +BattleScript_EffectFreezyFrost: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET + normalisebuffs + printstring STRINGID_STATCHANGESGONE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectSappySeed: + jumpifstatus3 BS_TARGET, STATUS3_LEECHSEED, BattleScript_EffectHit + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET + jumpifhasnohp BS_TARGET, BattleScript_MoveEnd + setseeded + printfromtable gLeechSeedStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectBaddyBad: + jumpifsideaffecting BS_ATTACKER, SIDE_STATUS_REFLECT, BattleScript_EffectHit + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET + setreflect + printfromtable gReflectLightScreenSafeguardStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectGlitzyGlow: + jumpifsideaffecting BS_ATTACKER, SIDE_STATUS_LIGHTSCREEN, BattleScript_EffectHit + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET + setlightscreen + printfromtable gReflectLightScreenSafeguardStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectDoubleIronBash: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setmultihitcounter 2 + initmultihitstring + sethword sMULTIHIT_EFFECT, MOVE_EFFECT_FLINCH + goto BattleScript_MultiHitLoop + +BattleScript_EffectEvasionUpHit: + setmoveeffect MOVE_EFFECT_EVS_PLUS_1 | MOVE_EFFECT_AFFECTS_USER + goto BattleScript_EffectHit + +BattleScript_EffectStuffCheeks:: + attackcanceler + attackstring + ppreduce + jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed + attackanimation + waitanimation +BattleScript_StuffCheeksEatBerry: + setbyte sBERRY_OVERRIDE, TRUE + orword gHitMarker, HITMARKER_NO_ANIMATIONS + consumeberry BS_ATTACKER + bicword gHitMarker, HITMARKER_NO_ANIMATIONS + setbyte sBERRY_OVERRIDE, FALSE + setstatchanger STAT_DEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StuffCheeksEnd + setgraphicalstatchangevalues + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StuffCheeksEnd @ cant raise def + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_StuffCheeksEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectDecorate: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 12, BattleScript_DecorateBoost + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPATK, 12, BattleScript_DecorateBoost + goto BattleScript_ButItFailed +BattleScript_DecorateBoost: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0x0 + setstatchanger STAT_ATK, 2, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_DecorateBoostSpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DecorateBoostSpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_DecorateBoostSpAtk: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectRemoveTerrain: + attackcanceler + attackstring + ppreduce + jumpifword CMP_NO_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_ANY, BattleScript_ButItFailed + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + removeterrain + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 4, BattleScript_MoveEnd + printfromtable gTerrainEndingStringIds + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_EffectCoaching: + attackcanceler + attackstring + ppreduce + jumpifnoally BS_ATTACKER, BattleScript_ButItFailed + copybyte gBattlerTarget, gBattlerAttacker + setallytonexttarget EffectCoaching_CheckAllyStats + goto BattleScript_ButItFailed +EffectCoaching_CheckAllyStats: + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CoachingWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, MAX_STAT_STAGE, BattleScript_CoachingWorks + goto BattleScript_ButItFailed @ ally at max atk, def +BattleScript_CoachingWorks: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_DEF, 0x0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_CoachingBoostDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CoachingBoostDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CoachingBoostDef: + setstatchanger STAT_DEF, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectJungleHealing: + attackcanceler + attackstring + ppreduce + jumpifteamhealthy BS_ATTACKER, BattleScript_ButItFailed + attackanimation + waitanimation + copybyte gBattlerTarget, gBattlerAttacker + setbyte gBattleCommunication, 0 +JungleHealing_RestoreTargetHealth: + copybyte gBattlerAttacker, gBattlerTarget + tryhealquarterhealth BS_TARGET, BattleScript_JungleHealing_TryCureStatus + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + printstring STRINGID_PKMNREGAINEDHEALTH + waitmessage B_WAIT_TIME_LONG +BattleScript_JungleHealing_TryCureStatus: + jumpifmove MOVE_LIFE_DEW, BattleScript_JungleHealingTryRestoreAlly @ life dew only heals + jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_JungleHealingCureStatus + goto BattleScript_JungleHealingTryRestoreAlly +BattleScript_JungleHealingCureStatus: + curestatus BS_TARGET + updatestatusicon BS_TARGET + printstring STRINGID_PKMNSTATUSNORMAL + waitmessage B_WAIT_TIME_LONG +BattleScript_JungleHealingTryRestoreAlly: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_MoveEnd + addbyte gBattleCommunication, 1 + jumpifnoally BS_TARGET, BattleScript_MoveEnd + setallytonexttarget JungleHealing_RestoreTargetHealth + goto BattleScript_MoveEnd + +BattleScript_EffectAttackerDefenseDownHit: + setmoveeffect MOVE_EFFECT_DEF_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + +BattleScript_EffectRelicSong: + setmoveeffect MOVE_EFFECT_RELIC_SONG | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + argumentstatuseffect + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_EffectAllySwitch: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifnoally BS_ATTACKER, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_ALLYSWITCHPOSITION + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectFairyLock: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + trysetfairylock BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_NOONEWILLBEABLETORUNAWAY + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectBurnUp: + attackcanceler + attackstring + ppreduce + jumpiftype BS_ATTACKER, TYPE_FIRE, BattleScript_BurnUpWorks + goto BattleScript_ButItFailed +BattleScript_BurnUpWorks: + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + losetype BS_ATTACKER, TYPE_FIRE + printstring STRINGID_ATTACKERLOSTFIRETYPE + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_EffectPurify: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_PurifyWorks + goto BattleScript_ButItFailed +BattleScript_PurifyWorks: + attackanimation + waitanimation + curestatus BS_TARGET + updatestatusicon BS_TARGET + printstring STRINGID_ATTACKERCUREDTARGETSTATUS + waitmessage B_WAIT_TIME_LONG + tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_ATTACKER + goto BattleScript_RestoreHp + +BattleScript_EffectStrengthSap: + setstatchanger STAT_ATK, 1, TRUE + attackcanceler + jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MIN_STAT_STAGE, BattleScript_StrengthSapTryLower + pause B_WAIT_TIME_SHORT + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd +BattleScript_StrengthSapTryLower: + getstatvalue BS_TARGET, STAT_ATK + jumpiffullhp BS_ATTACKER, BattleScript_StrengthSapMustLower + attackanimation + waitanimation + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StrengthSapHp + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StrengthSapHp +BattleScript_StrengthSapLower: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + 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: + jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveEnd + jumpiffullhp BS_ATTACKER, BattleScript_MoveEnd + manipulatedamage DMG_BIG_ROOT + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_PKMNENERGYDRAINED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd +BattleScript_StrengthSapMustLower: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_MoveEnd + attackanimation + waitanimation + goto BattleScript_StrengthSapLower + +BattleScript_EffectBugBite: + setmoveeffect MOVE_EFFECT_BUG_BITE | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + +BattleScript_EffectIncinerate: + setmoveeffect MOVE_EFFECT_INCINERATE | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + +BattleScript_MoveEffectIncinerate:: + printstring STRINGID_INCINERATEBURN + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_MoveEffectBugBite:: + printstring STRINGID_BUGBITE + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_NO_ANIMATIONS + setbyte sBERRY_OVERRIDE, TRUE @ override the requirements for eating berries + consumeberry BS_ATTACKER, TRUE @ consume the berry, then restore the item from changedItems + bicword gHitMarker, HITMARKER_NO_ANIMATIONS + setbyte sBERRY_OVERRIDE, FALSE + return + +BattleScript_EffectCoreEnforcer: + setmoveeffect MOVE_EFFECT_CORE_ENFORCER | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + +BattleScript_MoveEffectCoreEnforcer:: + setgastroacid BattleScript_CoreEnforcerRet + printstring STRINGID_PKMNSABILITYSUPPRESSED + waitmessage B_WAIT_TIME_LONG + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 +BattleScript_CoreEnforcerRet: + return + +BattleScript_EffectLaserFocus: + attackcanceler + attackstring + ppreduce + setuserstatus3 STATUS3_LASER_FOCUS, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_LASERFOCUS + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectVCreate: + setmoveeffect MOVE_EFFECT_V_CREATE | MOVE_EFFECT_AFFECTS_USER + goto BattleScript_EffectHit + +BattleScript_VCreateStatLoss:: + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_VCreateStatLossRet +BattleScript_VCreateStatAnim: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF | BIT_SPEED, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT + setstatchanger STAT_DEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateTrySpDef + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VCreateTrySpDef: + setstatchanger STAT_SPDEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateTrySpeed + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VCreateTrySpeed: + setstatchanger STAT_SPEED, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateStatLossRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateStatLossRet + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VCreateStatLossRet: + return + +BattleScript_SpectralThiefSteal:: + printstring STRINGID_SPECTRALTHIEFSTEAL + waitmessage B_WAIT_TIME_LONG + setbyte sB_ANIM_ARG2, 0 + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + spectralthiefprintstats + return + +BattleScript_EffectSpectralThief: + setmoveeffect MOVE_EFFECT_SPECTRAL_THIEF + goto BattleScript_EffectHit + +BattleScript_EffectPartingShot:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_EffectPartingShotTryAtk + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats +BattleScript_EffectPartingShotTryAtk: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS + playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_ATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotTrySpAtk + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectPartingShotTrySpAtk: + playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_SPATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotSwitch + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectPartingShotSwitch: + moveendall + jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_PartingShotEnd + jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_PartingShotEnd + openpartyscreen BS_ATTACKER, BattleScript_PartingShotEnd + switchoutabilities BS_ATTACKER + waitstate + switchhandleorder BS_ATTACKER, 2 + returntoball BS_ATTACKER + getswitchedmondata BS_ATTACKER + switchindataupdate BS_ATTACKER + hpthresholds BS_ATTACKER + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + printstring STRINGID_SWITCHINMON + switchinanim BS_ATTACKER, TRUE + waitstate + switchineffects BS_ATTACKER +BattleScript_PartingShotEnd: + end + +BattleScript_EffectSpAtkUpHit: + setmoveeffect MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER + goto BattleScript_EffectHit + +BattleScript_EffectPowder: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON + attackstring + ppreduce + jumpifstatus2 BS_TARGET, STATUS2_POWDER, BattleScript_ButItFailed + setpowder BS_TARGET + attackanimation + waitanimation + printstring STRINGID_COVEREDINPOWDER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectAromaticMist: + attackcanceler + attackstring + ppreduce + jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_ButItFailed + jumpiftargetally BattleScript_EffectAromaticMistWorks + goto BattleScript_ButItFailed +BattleScript_EffectAromaticMistWorks: + setstatchanger STAT_SPDEF, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAromaticMistEnd + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AromaticMistAnim + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_TARGETSTATWONTGOHIGHER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_EffectAromaticMistEnd +BattleScript_AromaticMistAnim: + attackanimation + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectAromaticMistEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectMagneticFlux:: + attackcanceler + attackstring + ppreduce + setbyte gBattleCommunication, 0 +BattleScript_EffectMagneticFluxStart: + jumpifability BS_TARGET, ABILITY_MINUS, BattleScript_EffectMagneticFluxCheckStats + jumpifability BS_TARGET, ABILITY_PLUS, BattleScript_EffectMagneticFluxCheckStats + goto BattleScript_EffectMagneticFluxLoop +BattleScript_EffectMagneticFluxCheckStats: + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_EffectMagneticFluxTryDef + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_EffectMagneticFluxLoop +BattleScript_EffectMagneticFluxTryDef: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_EffectMagneticFluxSkipAnim + attackanimation + waitanimation +BattleScript_EffectMagneticFluxSkipAnim: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_DEF | BIT_SPDEF, 0 + setstatchanger STAT_DEF, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMagneticFluxTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectMagneticFluxTrySpDef + addbyte gBattleCommunication, 1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectMagneticFluxTrySpDef: + setstatchanger STAT_SPDEF, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMagneticFluxLoop + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectMagneticFluxLoop + addbyte gBattleCommunication, 1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectMagneticFluxLoop: + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectMagneticFluxEnd + setallytonexttarget BattleScript_EffectMagneticFluxStart +BattleScript_EffectMagneticFluxEnd: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_MoveEnd + goto BattleScript_ButItFailed + +BattleScript_EffectGearUp:: + attackcanceler + attackstring + ppreduce + setbyte gBattleCommunication, 0 +BattleScript_EffectGearUpStart: + jumpifability BS_TARGET, ABILITY_MINUS, BattleScript_EffectGearUpCheckStats + jumpifability BS_TARGET, ABILITY_PLUS, BattleScript_EffectGearUpCheckStats + goto BattleScript_EffectGearUpLoop +BattleScript_EffectGearUpCheckStats: + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_EffectGearUpTryAtk + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_EffectGearUpLoop +BattleScript_EffectGearUpTryAtk: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_EffectGearUpSkipAnim + attackanimation + waitanimation +BattleScript_EffectGearUpSkipAnim: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectGearUpTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectGearUpTrySpAtk + addbyte gBattleCommunication, 1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectGearUpTrySpAtk: + setstatchanger STAT_SPATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectGearUpLoop + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectGearUpLoop + addbyte gBattleCommunication, 1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectGearUpLoop: + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectGearUpEnd + setallytonexttarget BattleScript_EffectGearUpStart +BattleScript_EffectGearUpEnd: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_MoveEnd + goto BattleScript_ButItFailed + +BattleScript_EffectAcupressure: + attackcanceler + jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectAcupressureTry + jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_PrintMoveMissed +BattleScript_EffectAcupressureTry: + attackstring + ppreduce + tryaccupressure BS_TARGET, BattleScript_ButItFailed + attackanimation + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange MOVE_EFFECT_CERTAIN, BattleScript_MoveEnd + printstring STRINGID_DEFENDERSSTATROSE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_MoveEffectFeint:: + printstring STRINGID_FELLFORFEINT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectFeint: + setmoveeffect MOVE_EFFECT_FEINT + goto BattleScript_EffectHit + +BattleScript_EffectThirdType: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + trysetthirdtype BS_TARGET, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_THIRDTYPEADDED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectDefenseUp2Hit: + setmoveeffect MOVE_EFFECT_DEF_PLUS_2 | MOVE_EFFECT_AFFECTS_USER + goto BattleScript_EffectHit + +BattleScript_EffectFlowerShield: + attackcanceler + attackstring + ppreduce + selectfirstvalidtarget +BattleScript_FlowerShieldIsAnyGrass: + jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoopStart + jumpifnexttargetvalid BattleScript_FlowerShieldIsAnyGrass + goto BattleScript_ButItFailed +BattleScript_FlowerShieldLoopStart: + selectfirstvalidtarget +BattleScript_FlowerShieldLoop: + movevaluescleanup + jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoop2 + goto BattleScript_FlowerShieldMoveTargetEnd +BattleScript_FlowerShieldLoop2: + setstatchanger STAT_DEF, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_FlowerShieldMoveTargetEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_FlowerShieldDoAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_FlowerShieldMoveTargetEnd + pause 21 + goto BattleScript_FlowerShieldString +BattleScript_FlowerShieldDoAnim: + attackanimation + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_FlowerShieldString: + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_FlowerShieldMoveTargetEnd: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_FlowerShieldLoop + end + +BattleScript_EffectRototiller: + attackcanceler + attackstring + ppreduce + getrototillertargets BattleScript_ButItFailed + @ at least one battler is affected + attackanimation + waitanimation + savetarget + setbyte gBattlerTarget, 0 +BattleScript_RototillerLoop: + movevaluescleanup + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_RototillerCheckAffected + 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 + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RototillerTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RototillerTrySpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_RototillerTrySpAtk:: + setstatchanger STAT_SPATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RototillerMoveTargetEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RototillerMoveTargetEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_RototillerMoveTargetEnd: + moveendto MOVEEND_NEXT_TARGET + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_RototillerLoop + end + +BattleScript_RototillerCantRaiseMultipleStats: + copybyte gBattlerAttacker, gBattlerTarget + printstring STRINGID_STATSWONTINCREASE2 + waitmessage B_WAIT_TIME_LONG + goto BattleScript_RototillerMoveTargetEnd + +BattleScript_RototillerNoEffect: + pause B_WAIT_TIME_SHORT + printstring STRINGID_NOEFFECTONTARGET + waitmessage B_WAIT_TIME_LONG + goto BattleScript_RototillerMoveTargetEnd + +BattleScript_EffectBestow: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON + attackstring + ppreduce + jumpifsubstituteblocks BattleScript_ButItFailed + trybestow BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_BESTOWITEMGIVING + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectAfterYou: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryafteryou BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_KINDOFFER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectFlameBurst: + setmoveeffect MOVE_EFFECT_FLAME_BURST | MOVE_EFFECT_AFFECTS_USER + goto BattleScript_EffectHit + +BattleScript_MoveEffectFlameBurst:: + tryfaintmon BS_TARGET + copybyte sBATTLER, sSAVED_BATTLER + printstring STRINGID_BURSTINGFLAMESHIT + waitmessage B_WAIT_TIME_LONG + savetarget + copybyte gBattlerTarget, sSAVED_BATTLER + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + tryfaintmon BS_TARGET + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectPowerTrick: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + powertrick BS_ATTACKER + attackanimation + waitanimation + printstring STRINGID_PKMNSWITCHEDATKANDDEF + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectPsychoShift: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifstatus BS_ATTACKER, STATUS1_ANY, BattleScript_EffectPsychoShiftCanWork + goto BattleScript_ButItFailed +BattleScript_EffectPsychoShiftCanWork: + jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed + jumpifsafeguard BattleScript_SafeguardProtected + trypsychoshift BattleScript_ButItFailed + attackanimation + waitanimation + copybyte gEffectBattler, gBattlerTarget + printfromtable gStatusConditionsStringIds + waitmessage B_WAIT_TIME_LONG + statusanimation BS_TARGET + updatestatusicon BS_TARGET + curestatus BS_ATTACKER + printstring STRINGID_PKMNSTATUSNORMAL + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_ATTACKER + goto BattleScript_MoveEnd + +BattleScript_EffectSynchronoise: + attackcanceler + attackstring + ppreduce + selectfirstvalidtarget +BattleScript_SynchronoiseLoop: + movevaluescleanup + jumpifcantusesynchronoise BattleScript_SynchronoiseNoEffect + accuracycheck BattleScript_SynchronoiseMissed, ACC_CURR_MOVE + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + tryfaintmon BS_TARGET +BattleScript_SynchronoiseMoveTargetEnd: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_SynchronoiseLoop + end +BattleScript_SynchronoiseMissed: + pause B_WAIT_TIME_SHORT + resultmessage + waitmessage B_WAIT_TIME_LONG + goto BattleScript_SynchronoiseMoveTargetEnd +BattleScript_SynchronoiseNoEffect: + pause B_WAIT_TIME_SHORT + printstring STRINGID_NOEFFECTONTARGET + waitmessage B_WAIT_TIME_LONG + goto BattleScript_SynchronoiseMoveTargetEnd + +BattleScript_EffectSmackDown: + setmoveeffect MOVE_EFFECT_SMACK_DOWN + goto BattleScript_EffectHit + +BattleScript_MoveEffectSmackDown:: + printstring STRINGID_FELLSTRAIGHTDOWN + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectHitEnemyHealAlly: + jumpiftargetally BattleScript_EffectHealPulse + goto BattleScript_EffectHit + +BattleScript_EffectDefog: + setstatchanger STAT_EVASION, 1, TRUE + attackcanceler + jumpifsubstituteblocks BattleScript_DefogIfCanClearHazards + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_EVASION, MIN_STAT_STAGE, BattleScript_DefogWorks +BattleScript_DefogIfCanClearHazards: + defogclear BS_ATTACKER, FALSE, BattleScript_ButItFailedAtkStringPpReduce +BattleScript_DefogWorks: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_DefogTryHazardsWithAnim + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_DefogDoAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_DefogTryHazardsWithAnim + pause B_WAIT_TIME_SHORT + goto BattleScript_DefogPrintString +BattleScript_DefogDoAnim:: + attackanimation + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_DefogPrintString:: + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_DefogTryHazards:: + copybyte gEffectBattler, gBattlerAttacker + defogclear BS_ATTACKER, TRUE, NULL + copybyte gBattlerAttacker, gEffectBattler + goto BattleScript_MoveEnd +BattleScript_DefogTryHazardsWithAnim: + attackanimation + waitanimation + goto BattleScript_DefogTryHazards + +BattleScript_EffectCopycat: + attackcanceler + attackstring + pause 5 + trycopycat BattleScript_CopycatFail + attackanimation + waitanimation + jumptocalledmove TRUE +BattleScript_CopycatFail: + ppreduce + goto BattleScript_ButItFailed + +BattleScript_EffectInstruct: + attackcanceler + attackstring + ppreduce + pause 5 + tryinstruct BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_USEDINSTRUCTEDMOVE + waitmessage B_WAIT_TIME_LONG + setbyte sB_ANIM_TURN, 0 + setbyte sB_ANIM_TARGETS_HIT, 0 + jumptocalledmove TRUE + +BattleScript_EffectAutotomize: + setstatchanger STAT_SPEED, 2, FALSE + attackcanceler + attackstring + ppreduce + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AutotomizeWeightLoss + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AutotomizeAttackAnim + pause B_WAIT_TIME_SHORT + goto BattleScript_AutotomizePrintString +BattleScript_AutotomizeAttackAnim:: + attackanimation + waitanimation +BattleScript_AutotomizeDoAnim:: + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_AutotomizePrintString:: + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_AutotomizeWeightLoss:: + jumpifmovehadnoeffect BattleScript_MoveEnd + tryautotomize BS_ATTACKER, BattleScript_MoveEnd + printstring STRINGID_BECAMENIMBLE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectFinalGambit: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + typecalc + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + dmgtocurrattackerhp + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + resultmessage + waitmessage B_WAIT_TIME_LONG + dmgtocurrattackerhp + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + seteffectwithchance + tryfaintmon BS_ATTACKER + tryfaintmon BS_TARGET + jumpifmovehadnoeffect BattleScript_MoveEnd + goto BattleScript_MoveEnd + +BattleScript_EffectHitSwitchTarget: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET + moveendall + jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut + jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted + tryhitswitchtarget BattleScript_EffectHitSwitchTargetMoveEnd +BattleScript_EffectHitSwitchTargetMoveEnd: + end + +BattleScript_EffectClearSmog: + setmoveeffect MOVE_EFFECT_CLEAR_SMOG + goto BattleScript_EffectHit + +BattleScript_EffectToxicThread: + setstatchanger STAT_SPEED, 2, TRUE + attackcanceler + jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_ToxicThreadWorks + jumpifstatus BS_TARGET, STATUS1_PSN_ANY, BattleScript_ButItFailedAtkStringPpReduce +BattleScript_ToxicThreadWorks: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_ToxicThreadTryPsn + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_ToxicThreadDoAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_ToxicThreadTryPsn + pause B_WAIT_TIME_SHORT + goto BattleScript_ToxicThreadPrintString +BattleScript_ToxicThreadDoAnim:: + attackanimation + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_ToxicThreadPrintString:: + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ToxicThreadTryPsn:: + setmoveeffect MOVE_EFFECT_POISON + seteffectprimary + goto BattleScript_MoveEnd + +BattleScript_EffectVenomDrench: + attackcanceler + attackstring + ppreduce + jumpifstatus BS_TARGET, STATUS1_PSN_ANY, BattleScript_EffectVenomDrenchCanBeUsed + goto BattleScript_ButItFailed +BattleScript_EffectVenomDrenchCanBeUsed: + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_VenomDrenchDoMoveAnim + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_SPATK, MIN_STAT_STAGE, BattleScript_VenomDrenchDoMoveAnim + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats +BattleScript_VenomDrenchDoMoveAnim:: + accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK | BIT_SPEED, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS + playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_ATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchTryLowerSpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchTryLowerSpAtk + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VenomDrenchTryLowerSpAtk:: + playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_SPATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchTryLowerSpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchTryLowerSpeed + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VenomDrenchTryLowerSpeed:: + playstatchangeanimation BS_TARGET, BIT_SPEED, STAT_CHANGE_NEGATIVE + setstatchanger STAT_SPEED, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchEnd + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VenomDrenchEnd:: + goto BattleScript_MoveEnd + +BattleScript_EffectNobleRoar: + attackcanceler + attackstring + ppreduce + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_NobleRoarDoMoveAnim + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats +BattleScript_NobleRoarDoMoveAnim:: + accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS + playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_ATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_NobleRoarTryLowerSpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_NobleRoarTryLowerSpAtk + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_NobleRoarTryLowerSpAtk:: + playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_SPATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_NobleRoarEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_NobleRoarEnd + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_NobleRoarEnd:: + goto BattleScript_MoveEnd + +BattleScript_EffectShellSmash: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_ButItFailed +BattleScript_ShellSmashTryDef:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT + setstatchanger STAT_DEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_ShellSmashTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShellSmashTrySpDef: + setstatchanger STAT_SPDEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_ShellSmashTryAttack + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTryAttack + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShellSmashTryAttack: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_ATK | BIT_SPEED, STAT_CHANGE_BY_TWO + setstatchanger STAT_ATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShellSmashTrySpAtk: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShellSmashTrySpeed: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShellSmashEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectLastResort: + attackcanceler + attackstring + ppreduce + jumpifcantuselastresort BS_ATTACKER, BattleScript_ButItFailed + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + goto BattleScript_HitFromCritCalc + +BattleScript_EffectGrowth: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_GrowthDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_GrowthDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPATK, 0 + jumpifweatheraffected BS_ATTACKER, B_WEATHER_SUN, BattleScript_GrowthAtk2 + setstatchanger STAT_ATK, 1, FALSE + goto BattleScript_GrowthAtk +BattleScript_GrowthAtk2: + setstatchanger STAT_ATK, 2, FALSE +BattleScript_GrowthAtk: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GrowthTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GrowthTrySpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_GrowthTrySpAtk:: + jumpifweatheraffected BS_ATTACKER, B_WEATHER_SUN, BattleScript_GrowthSpAtk2 + setstatchanger STAT_SPATK, 1, FALSE + goto BattleScript_GrowthSpAtk +BattleScript_GrowthSpAtk2: + setstatchanger STAT_SPATK, 2, FALSE +BattleScript_GrowthSpAtk: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GrowthEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GrowthEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_GrowthEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectSoak: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifability BS_TARGET, ABILITY_MULTITYPE, BattleScript_ButItFailed + jumpifability BS_TARGET, ABILITY_RKS_SYSTEM, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed + attackanimation + waitanimation + trysoak BattleScript_ButItFailed + printstring STRINGID_TARGETCHANGEDTYPE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectReflectType: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryreflecttype BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_REFLECTTARGETSTYPE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectElectrify: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryelectrify BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_TARGETELECTRIFIED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectShiftGear: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ShiftGearDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_ShiftGearDoMoveAnim: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPEED, 10, BattleScript_ShiftGearSpeedBy1 + playstatchangeanimation BS_ATTACKER, BIT_SPEED | BIT_ATK, STAT_CHANGE_BY_TWO + setstatchanger STAT_SPEED, 2, FALSE + goto BattleScript_ShiftGearDoSpeed +BattleScript_ShiftGearSpeedBy1: + playstatchangeanimation BS_ATTACKER, BIT_SPEED | BIT_ATK, 0 + setstatchanger STAT_SPEED, 1, FALSE +BattleScript_ShiftGearDoSpeed: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShiftGearTryAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShiftGearTryAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShiftGearTryAtk: + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShiftGearEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShiftGearEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShiftGearEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectCoil: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_CoilDoMoveAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_CoilDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ACC, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_CoilDoMoveAnim: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_ACC, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilTryDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilTryDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CoilTryDef: + setstatchanger STAT_DEF, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilTryAcc + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilTryAcc + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CoilTryAcc: + setstatchanger STAT_ACC, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CoilEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectQuiverDance: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_QuiverDanceDoMoveAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_QuiverDanceDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_QuiverDanceDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF | BIT_SPEED, 0 + setstatchanger STAT_SPATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceTrySpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_QuiverDanceTrySpDef:: + setstatchanger STAT_SPDEF, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceTrySpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_QuiverDanceTrySpeed:: + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_QuiverDanceEnd:: + goto BattleScript_MoveEnd + +BattleScript_EffectSpeedUpHit: + setmoveeffect MOVE_EFFECT_SPD_PLUS_1 | MOVE_EFFECT_AFFECTS_USER + goto BattleScript_EffectHit + +BattleScript_EffectMeFirst: + attackcanceler + attackstring + trymefirst BattleScript_ButItFailedPpReduce + attackanimation + waitanimation + setbyte sB_ANIM_TURN, 0 + setbyte sB_ANIM_TARGETS_HIT, 0 + jumptocalledmove TRUE + +BattleScript_EffectAttackSpAttackUp: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AttackSpAttackUpDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_AttackSpAttackUpDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPATK, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackSpAttackUpTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackSpAttackUpTrySpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_AttackSpAttackUpTrySpAtk:: + setstatchanger STAT_SPATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackSpAttackUpEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackSpAttackUpEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_AttackSpAttackUpEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectAttackAccUp: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AttackAccUpDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ACC, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_AttackAccUpDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackAccUpTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackAccUpTrySpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_AttackAccUpTrySpDef:: + setstatchanger STAT_ACC, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackAccUpEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackAccUpEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_AttackAccUpEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectMistyTerrain: +BattleScript_EffectGrassyTerrain: +BattleScript_EffectElectricTerrain: +BattleScript_EffectPsychicTerrain: + attackcanceler + attackstring + ppreduce + setterrain BattleScript_ButItFailed + attackanimation + waitanimation + printfromtable gTerrainStringIds + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + call BattleScript_TerrainSeedLoop + jumpifabilitypresent ABILITY_MIMICRY, BattleScript_ApplyMimicry + goto BattleScript_MoveEnd + +BattleScript_ApplyMimicry:: + savetarget + setbyte gBattlerTarget, 0 +BattleScript_MimicryLoopIter: + copybyte sBATTLER, gBattlerTarget + trytoapplymimicry BS_TARGET, BattleScript_MimicryLoop_NextBattler + copybyte gBattlerAbility, sBATTLER + call BattleScript_AbilityPopUp + printstring STRINGID_BATTLERTYPECHANGEDTO + waitmessage B_WAIT_TIME_LONG +BattleScript_MimicryLoop_NextBattler: + addbyte gBattlerTarget, 0x1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_MimicryLoopIter + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectTopsyTurvy: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPATK, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPDEF, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPEED, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ACC, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_EQUAL, STAT_EVASION, 6, BattleScript_ButItFailed +BattleScript_EffectTopsyTurvyWorks: + attackanimation + waitanimation + invertstatstages BS_TARGET + printstring STRINGID_TOPSYTURVYSWITCHEDSTATS + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectIonDeluge: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + orword gFieldStatuses, STATUS_FIELD_ION_DELUGE + attackanimation + waitanimation + printstring STRINGID_IONDELUGEON + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectQuash: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryquash BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_QUASHSUCCESS + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectHealPulse: + attackcanceler + attackstring + ppreduce + jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents @ stops pollen puff + jumpifstatus3 BS_TARGET, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + jumpifsubstituteblocks BattleScript_ButItFailed + tryhealpulse BS_TARGET, BattleScript_AlreadyAtFullHp + attackanimation + waitanimation + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + printstring STRINGID_PKMNREGAINEDHEALTH + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectEntrainment: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryentrainment BattleScript_ButItFailed + attackanimation + waitanimation + setlastusedability BS_TARGET + printstring STRINGID_PKMNACQUIREDABILITY + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectSimpleBeam: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setabilitysimple BS_TARGET, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNACQUIREDSIMPLE + waitmessage B_WAIT_TIME_LONG + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + tryendneutralizinggas BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_EffectSuckerPunch: + attackcanceler + suckerpunchcheck BattleScript_ButItFailedAtkStringPpReduce + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + goto BattleScript_HitFromAtkString + +BattleScript_EffectLuckyChant: + attackcanceler + attackstring + ppreduce + setluckychant BS_ATTACKER, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_SHIELDEDFROMCRITICALHITS + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectMetalBurst: + attackcanceler + metalburstdamagecalculator BattleScript_ButItFailedAtkStringPpReduce + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + typecalc + bichalfword gMoveResultFlags, MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE + adjustdamage + goto BattleScript_HitFromAtkAnimation + +BattleScript_EffectHealingWish: + attackcanceler + jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_ButItFailedAtkStringPpReduce + attackstring + ppreduce + attackanimation + waitanimation + instanthpdrop BS_ATTACKER + setatkhptozero + tryfaintmon BS_ATTACKER + openpartyscreen BS_ATTACKER, BattleScript_EffectHealingWishEnd + switchoutabilities BS_ATTACKER + waitstate + switchhandleorder BS_ATTACKER, 2 + returnatktoball + getswitchedmondata BS_ATTACKER + switchindataupdate BS_ATTACKER + hpthresholds BS_ATTACKER + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + printstring STRINGID_SWITCHINMON + switchinanim BS_ATTACKER, TRUE + waitstate + setbyte cMULTISTRING_CHOOSER, 0 + jumpifnotchosenmove MOVE_LUNAR_DANCE, BattleScript_EffectHealingWishNewMon + setbyte cMULTISTRING_CHOOSER, 1 + restorepp BS_ATTACKER +BattleScript_EffectHealingWishNewMon: + printfromtable gHealingWishStringIds + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_WISH_HEAL + waitanimation + dmgtomaxattackerhp + manipulatedamage DMG_CHANGE_SIGN + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + clearstatus BS_ATTACKER + waitstate + updatestatusicon BS_ATTACKER + waitstate + printstring STRINGID_HEALINGWISHHEALED + waitmessage B_WAIT_TIME_LONG + switchineffects BS_ATTACKER +BattleScript_EffectHealingWishEnd: + moveendall + end + +BattleScript_EffectWorrySeed: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryworryseed BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNACQUIREDABILITY + waitmessage B_WAIT_TIME_LONG + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + goto BattleScript_MoveEnd + +BattleScript_EffectPowerSplit: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + averagestats STAT_ATK + averagestats STAT_SPATK + attackanimation + waitanimation + printstring STRINGID_SHAREDITSPOWER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectGuardSplit: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + averagestats STAT_DEF + averagestats STAT_SPDEF + attackanimation + waitanimation + printstring STRINGID_SHAREDITSGUARD + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectHeartSwap: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + swapstatstages STAT_ATK + swapstatstages STAT_DEF + swapstatstages STAT_SPEED + swapstatstages STAT_SPATK + swapstatstages STAT_SPDEF + swapstatstages STAT_EVASION + swapstatstages STAT_ACC + attackanimation + waitanimation + printstring STRINGID_PKMNSWITCHEDSTATCHANGES + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectPowerSwap: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + swapstatstages STAT_ATK + swapstatstages STAT_SPATK + attackanimation + waitanimation + printstring STRINGID_PKMNSWITCHEDSTATCHANGES + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectGuardSwap: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + swapstatstages STAT_DEF + swapstatstages STAT_SPDEF + attackanimation + waitanimation + printstring STRINGID_PKMNSWITCHEDSTATCHANGES + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectSpeedSwap: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + swapstatstages STAT_SPEED + attackanimation + waitanimation + printstring STRINGID_PKMNSWITCHEDSTATCHANGES + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectTelekinesis: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON + attackstring + ppreduce + settelekinesis BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNIDENTIFIED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectStealthRock: + attackcanceler + attackstring + ppreduce + setstealthrock BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_POINTEDSTONESFLOAT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectStickyWeb: + attackcanceler + attackstring + ppreduce + setstickyweb BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_STICKYWEBUSED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectGastroAcid: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setgastroacid BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNSABILITYSUPPRESSED + waitmessage B_WAIT_TIME_LONG + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + tryendneutralizinggas BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_EffectToxicSpikes: + attackcanceler + attackstring + ppreduce + settoxicspikes BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_POISONSPIKESSCATTERED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectMagnetRise: + attackcanceler + attackstring + ppreduce + setuserstatus3 STATUS3_MAGNET_RISE, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNLEVITATEDONELECTROMAGNETISM + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectTrickRoom: + attackcanceler + attackstring + ppreduce + setroom + attackanimation + waitanimation + printfromtable gRoomsStringIds + waitmessage B_WAIT_TIME_LONG + savetarget + setbyte gBattlerTarget, 0 +BattleScript_RoomServiceLoop: + copybyte sBATTLER, gBattlerTarget + tryroomservice BS_TARGET, BattleScript_RoomServiceLoop_NextBattler + removeitem BS_TARGET +BattleScript_RoomServiceLoop_NextBattler: + addbyte gBattlerTarget, 0x1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_RoomServiceLoop + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectWonderRoom: +BattleScript_EffectMagicRoom: + attackcanceler + attackstring + ppreduce + setroom + attackanimation + waitanimation + printfromtable gRoomsStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectAquaRing: + attackcanceler + attackstring + ppreduce + setuserstatus3 STATUS3_AQUA_RING, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNSURROUNDEDWITHVEILOFWATER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectEmbargo: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setembargo BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNCANTUSEITEMSANYMORE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectTailwind: + attackcanceler + attackstring + ppreduce + settailwind BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_TAILWINDBLEW + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectMircleEye: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setmiracleeye BattleScript_ButItFailed + goto BattleScript_IdentifiedFoe + +BattleScript_EffectGravity: + attackcanceler + attackstring + ppreduce + setgravity BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_GRAVITYINTENSIFIED + waitmessage B_WAIT_TIME_LONG + selectfirstvalidtarget +BattleScript_GravityLoop: + movevaluescleanup + jumpifstatus3 BS_TARGET, STATUS3_ON_AIR | STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS, BattleScript_GravityLoopDrop + goto BattleScript_GravityLoopEnd +BattleScript_GravityLoopDrop: + bringdownairbornebattler BS_TARGET + printstring STRINGID_GRAVITYGROUNDING + waitmessage B_WAIT_TIME_LONG +BattleScript_GravityLoopEnd: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_GravityLoop + end + +BattleScript_EffectRoost: + attackcanceler + attackstring + ppreduce + tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_TARGET + setroost + goto BattleScript_PresentHealTarget + +BattleScript_EffectCaptivate: + setstatchanger STAT_SPATK, 2, TRUE + attackcanceler + jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce + jumpifoppositegenders BattleScript_CaptivateCheckAcc + goto BattleScript_ButItFailedAtkStringPpReduce +BattleScript_CaptivateCheckAcc: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + goto BattleScript_StatDownFromAttackString + +BattleScript_EffectHealBlock: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects + sethealblock BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNPREVENTEDFROMHEALING + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectThroatChop: + jumpifsubstituteblocks BattleScript_EffectHit + setmoveeffect MOVE_EFFECT_THROAT_CHOP | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + +BattleScript_EffectHitEscape: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + jumpifmovehadnoeffect BattleScript_MoveEnd + seteffectwithchance + tryfaintmon BS_TARGET + moveendto MOVEEND_ATTACKER_VISIBLE + moveendfrom MOVEEND_TARGET_VISIBLE + jumpifbattleend BattleScript_HitEscapeEnd + jumpifbyte CMP_NOT_EQUAL gBattleOutcome 0, BattleScript_HitEscapeEnd + jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_HitEscapeEnd + jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_HitEscapeEnd + openpartyscreen BS_ATTACKER, BattleScript_HitEscapeEnd + switchoutabilities BS_ATTACKER + waitstate + switchhandleorder BS_ATTACKER, 2 + returntoball BS_ATTACKER + getswitchedmondata BS_ATTACKER + switchindataupdate BS_ATTACKER + hpthresholds BS_ATTACKER + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + printstring STRINGID_SWITCHINMON + switchinanim BS_ATTACKER, TRUE + waitstate + switchineffects BS_ATTACKER +BattleScript_HitEscapeEnd: + end + +BattleScript_EffectPlaceholder: + attackcanceler + attackstring + ppreduce + pause 5 + printstring STRINGID_NOTDONEYET + goto BattleScript_MoveEnd BattleScript_EffectHit:: - jumpifnotmove MOVE_SURF, BattleScript_HitFromAtkCanceler - jumpifnostatus3 BS_TARGET, STATUS3_UNDERWATER, BattleScript_HitFromAtkCanceler - orword gHitMarker, HITMARKER_IGNORE_UNDERWATER - setbyte sDMG_MULTIPLIER, 2 BattleScript_HitFromAtkCanceler:: attackcanceler BattleScript_HitFromAccCheck:: @@ -247,8 +2978,7 @@ BattleScript_HitFromAtkString:: BattleScript_HitFromCritCalc:: critcalc damagecalc - typecalc - adjustnormaldamage + adjustdamage BattleScript_HitFromAtkAnimation:: attackanimation waitanimation @@ -262,13 +2992,43 @@ BattleScript_HitFromAtkAnimation:: resultmessage waitmessage B_WAIT_TIME_LONG seteffectwithchance - tryfaintmon BS_TARGET, FALSE, NULL + tryfaintmon BS_TARGET BattleScript_MoveEnd:: moveendall end +BattleScript_EffectNaturalGift: + attackcanceler + attackstring + ppreduce + jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed + jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_MAGIC_ROOM, BattleScript_ButItFailed + jumpifability BS_ATTACKER, ABILITY_KLUTZ, BattleScript_ButItFailed + jumpifstatus3 BS_ATTACKER, STATUS3_EMBARGO, BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + jumpifmovehadnoeffect BattleScript_EffectNaturalGiftEnd + removeitem BS_ATTACKER +BattleScript_EffectNaturalGiftEnd: + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + BattleScript_MakeMoveMissed:: - orbyte gMoveResultFlags, MOVE_RESULT_MISSED + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED BattleScript_PrintMoveMissed:: attackstring ppreduce @@ -284,38 +3044,128 @@ BattleScript_EffectSleep:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_AlreadyAsleep jumpifcantmakeasleep BattleScript_CantMakeAsleep + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifability BS_TARGET_SIDE, ABILITY_SWEET_VEIL, BattleScript_SweetVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects + jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed + jumpifterrainaffected BS_TARGET, STATUS_FIELD_ELECTRIC_TERRAIN, BattleScript_ElectricTerrainPrevents + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected attackanimation waitanimation setmoveeffect MOVE_EFFECT_SLEEP seteffectprimary goto BattleScript_MoveEnd +BattleScript_TerrainPreventsEnd2:: + pause B_WAIT_TIME_SHORT + printfromtable gTerrainPreventsStringIds + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_ElectricTerrainPrevents:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_ELECTRICTERRAINPREVENTS + waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_MistyTerrainPrevents:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_MISTYTERRAINPREVENTS + waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_FlowerVeilProtectsRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_FLOWERVEILPROTECTED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_FlowerVeilProtects: + call BattleScript_FlowerVeilProtectsRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_SweetVeilProtectsRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_FLOWERVEILPROTECTED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_SweetVeilProtects: + call BattleScript_SweetVeilProtectsRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_AromaVeilProtectsRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_AROMAVEILPROTECTED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AromaVeilProtects: + call BattleScript_AromaVeilProtectsRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_PastelVeilProtectsRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PASTELVEILPROTECTED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_PastelVeilProtects: + call BattleScript_PastelVeilProtectsRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_LeafGuardProtectsRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_LeafGuardProtects: + call BattleScript_LeafGuardProtectsRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + BattleScript_AlreadyAsleep:: setalreadystatusedmoveattempt BS_ATTACKER pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNALREADYASLEEP waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd BattleScript_WasntAffected:: pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNWASNTAFFECTED waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd BattleScript_CantMakeAsleep:: pause B_WAIT_TIME_SHORT printfromtable gUproarAwakeStringIds waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd -BattleScript_EffectPoisonHit:: +BattleScript_EffectPoisonHit: setmoveeffect MOVE_EFFECT_POISON goto BattleScript_EffectHit @@ -326,8 +3176,7 @@ BattleScript_EffectAbsorb:: ppreduce critcalc damagecalc - typecalc - adjustnormaldamage + adjustdamage attackanimation waitanimation effectivenesssound @@ -339,12 +3188,16 @@ BattleScript_EffectAbsorb:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - negativedamage - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_AbsorbHealBlock + setdrainedhp + manipulatedamage DMG_BIG_ROOT + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_AbsorbLiquidOoze setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB goto BattleScript_AbsorbUpdateHp BattleScript_AbsorbLiquidOoze:: + copybyte gBattlerAbility, gBattlerTarget + call BattleScript_AbilityPopUp manipulatedamage DMG_CHANGE_SIGN setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB_OOZE BattleScript_AbsorbUpdateHp:: @@ -354,8 +3207,9 @@ BattleScript_AbsorbUpdateHp:: printfromtable gAbsorbDrainStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AbsorbTryFainting:: - tryfaintmon BS_ATTACKER, FALSE, NULL - tryfaintmon BS_TARGET, FALSE, NULL + tryfaintmon BS_ATTACKER +BattleScript_AbsorbHealBlock:: + tryfaintmon BS_TARGET goto BattleScript_MoveEnd BattleScript_EffectBurnHit:: @@ -374,7 +3228,8 @@ BattleScript_EffectExplosion:: attackcanceler attackstring ppreduce - faintifabilitynotdamp +@ Below jumps to BattleScript_DampStopsExplosion if it fails (only way it can) + tryexplosion setatkhptozero waitstate jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop @@ -387,8 +3242,7 @@ BattleScript_ExplosionLoop: movevaluescleanup critcalc damagecalc - typecalc - adjustnormaldamage + adjustdamage accuracycheck BattleScript_ExplosionMissed, ACC_CURR_MOVE effectivenesssound hitanimation BS_TARGET @@ -399,10 +3253,11 @@ BattleScript_ExplosionLoop: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET, FALSE, NULL + tryfaintmon BS_TARGET moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_ExplosionLoop - tryfaintmon BS_ATTACKER, FALSE, NULL + tryfaintmon BS_ATTACKER + moveendcase MOVEEND_CLEAR_BITS end BattleScript_ExplosionMissed: effectivenesssound @@ -410,20 +3265,34 @@ BattleScript_ExplosionMissed: waitmessage B_WAIT_TIME_LONG moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_ExplosionLoop - tryfaintmon BS_ATTACKER, FALSE, NULL + tryfaintmon BS_ATTACKER end +BattleScript_EffectMindBlown:: + attackcanceler + attackstring + ppreduce + tryexplosion + dmg_1_2_attackerhp + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + waitstate + jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop + call BattleScript_PreserveMissedBitDoMoveAnim + goto BattleScript_ExplosionLoop + BattleScript_PreserveMissedBitDoMoveAnim: - bicbyte gMoveResultFlags, MOVE_RESULT_MISSED + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED attackanimation waitanimation - orbyte gMoveResultFlags, MOVE_RESULT_MISSED + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED return BattleScript_EffectDreamEater:: attackcanceler - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_DreamEaterNoEffect + jumpifsubstituteblocks BattleScript_DreamEaterNoEffect jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_DreamEaterWorked + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_DreamEaterWorked BattleScript_DreamEaterNoEffect: attackstring ppreduce @@ -435,8 +3304,7 @@ BattleScript_DreamEaterWorked: ppreduce critcalc damagecalc - typecalc - adjustnormaldamage + adjustdamage attackanimation waitanimation effectivenesssound @@ -448,7 +3316,9 @@ BattleScript_DreamEaterWorked: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - negativedamage + jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_DreamEaterTryFaintEnd + setdrainedhp + manipulatedamage DMG_BIG_ROOT orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER @@ -456,7 +3326,7 @@ BattleScript_DreamEaterWorked: printstring STRINGID_PKMNDREAMEATEN waitmessage B_WAIT_TIME_LONG BattleScript_DreamEaterTryFaintEnd: - tryfaintmon BS_TARGET, FALSE, NULL + tryfaintmon BS_TARGET goto BattleScript_MoveEnd BattleScript_EffectMirrorMove:: @@ -465,7 +3335,7 @@ BattleScript_EffectMirrorMove:: pause B_WAIT_TIME_LONG trymirrormove ppreduce - orbyte gMoveResultFlags, MOVE_RESULT_FAILED + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED printstring STRINGID_MIRRORMOVEFAILED waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -482,6 +3352,18 @@ BattleScript_EffectSpecialAttackUp:: setstatchanger STAT_SPATK, 1, FALSE goto BattleScript_EffectStatUp +BattleScript_EffectSpeedUp: + setstatchanger STAT_SPEED, 1, FALSE + goto BattleScript_EffectStatUp + +BattleScript_EffectSpecialDefenseUp: + setstatchanger STAT_SPDEF, 1, FALSE + goto BattleScript_EffectStatUp + +BattleScript_EffectAccuracyUp: + setstatchanger STAT_ACC, 1, FALSE + goto BattleScript_EffectStatUp + BattleScript_EffectEvasionUp:: setstatchanger STAT_EVASION, 1, FALSE BattleScript_EffectStatUp:: @@ -489,7 +3371,7 @@ BattleScript_EffectStatUp:: BattleScript_EffectStatUpAfterAtkCanceler:: attackstring ppreduce - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_StatUpEnd + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StatUpEnd jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpAttackAnim pause B_WAIT_TIME_SHORT goto BattleScript_StatUpPrintString @@ -507,35 +3389,45 @@ BattleScript_StatUpEnd:: BattleScript_StatUp:: playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_StatUpMsg:: printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG return -BattleScript_EffectAttackDown:: +BattleScript_EffectAttackDown: setstatchanger STAT_ATK, 1, TRUE goto BattleScript_EffectStatDown -BattleScript_EffectDefenseDown:: +BattleScript_EffectDefenseDown: setstatchanger STAT_DEF, 1, TRUE goto BattleScript_EffectStatDown -BattleScript_EffectSpeedDown:: +BattleScript_EffectSpeedDown: setstatchanger STAT_SPEED, 1, TRUE goto BattleScript_EffectStatDown -BattleScript_EffectAccuracyDown:: +BattleScript_EffectAccuracyDown: setstatchanger STAT_ACC, 1, TRUE goto BattleScript_EffectStatDown -BattleScript_EffectEvasionDown:: +BattleScript_EffectSpecialAttackDown: + setstatchanger STAT_SPATK, 1, TRUE + goto BattleScript_EffectStatDown + +BattleScript_EffectSpecialDefenseDown: + setstatchanger STAT_SPDEF, 1, TRUE + goto BattleScript_EffectStatDown + +BattleScript_EffectEvasionDown: setstatchanger STAT_EVASION, 1, TRUE -BattleScript_EffectStatDown:: +BattleScript_EffectStatDown: attackcanceler - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailedAtkStringPpReduce + jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE +BattleScript_StatDownFromAttackString: attackstring ppreduce - statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_StatDownEnd + 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 pause B_WAIT_TIME_SHORT @@ -551,6 +3443,34 @@ BattleScript_StatDownPrintString:: BattleScript_StatDownEnd:: goto BattleScript_MoveEnd +BattleScript_MirrorArmorReflect:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + jumpifsubstituteblocks BattleScript_AbilityNoSpecificStatLoss +BattleScript_MirrorArmorReflectStatLoss: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorArmorReflectEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_MirrorArmorReflectAnim + goto BattleScript_MirrorArmorReflectWontFall +BattleScript_MirrorArmorReflectAnim: + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_MirrorArmorReflectPrintString: + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_MirrorArmorReflectEnd: + return + +BattleScript_MirrorArmorReflectWontFall: + copybyte gBattlerTarget, gBattlerAttacker @ STRINGID_STATSWONTDECREASE uses target + goto BattleScript_MirrorArmorReflectPrintString + +@ gBattlerTarget is battler with Mirror Armor +BattleScript_MirrorArmorReflectStickyWeb: + call BattleScript_AbilityPopUp + setattackertostickywebuser + jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_StickyWebOnSwitchInEnd @ Sticky web user not on field -> no stat loss + goto BattleScript_MirrorArmorReflectStatLoss + BattleScript_StatDown:: playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatDownStringIds @@ -592,11 +3512,13 @@ BattleScript_EffectRoar:: attackcanceler attackstring ppreduce + jumpifroarfails BattleScript_ButItFailed jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_ButItFailed +BattleScript_ForceRandomSwitch:: forcerandomswitch BattleScript_ButItFailed BattleScript_EffectMultiHit:: @@ -606,7 +3528,7 @@ BattleScript_EffectMultiHit:: ppreduce setmultihitcounter 0 initmultihitstring - setbyte sMULTIHIT_EFFECT, 0 + sethword sMULTIHIT_EFFECT, 0 BattleScript_MultiHitLoop:: jumpifhasnohp BS_ATTACKER, BattleScript_MultiHitEnd jumpifhasnohp BS_TARGET, BattleScript_MultiHitPrintStrings @@ -614,12 +3536,11 @@ BattleScript_MultiHitLoop:: jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_MultiHitPrintStrings BattleScript_DoMultiHit:: movevaluescleanup - copybyte cEFFECT_CHOOSER, sMULTIHIT_EFFECT + copyhword sMOVE_EFFECT, sMULTIHIT_EFFECT critcalc damagecalc - typecalc jumpifmovehadnoeffect BattleScript_MultiHitNoMoreHits - adjustnormaldamage + adjustdamage attackanimation waitanimation effectivenesssound @@ -629,6 +3550,7 @@ BattleScript_DoMultiHit:: datahpupdate BS_TARGET critmessage waitmessage B_WAIT_TIME_LONG + multihitresultmessage printstring STRINGID_EMPTYSTRING3 waitmessage 1 addbyte sMULTIHIT_STRING + 4, 1 @@ -647,9 +3569,9 @@ BattleScript_MultiHitPrintStrings:: waitmessage B_WAIT_TIME_LONG BattleScript_MultiHitEnd:: seteffectwithchance - tryfaintmon BS_TARGET, FALSE, NULL + tryfaintmon BS_TARGET moveendcase MOVEEND_SYNCHRONIZE_TARGET - moveendfrom MOVEEND_IMMUNITY_ABILITIES + moveendfrom MOVEEND_STATUS_IMMUNITY_ABILITIES end BattleScript_EffectConversion:: @@ -667,6 +3589,31 @@ BattleScript_EffectFlinchHit:: setmoveeffect MOVE_EFFECT_FLINCH goto BattleScript_EffectHit +BattleScript_EffectFlinchStatus: + setmoveeffect MOVE_EFFECT_FLINCH + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + argumentstatuseffect + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + BattleScript_EffectRestoreHp:: attackcanceler attackstring @@ -674,6 +3621,7 @@ BattleScript_EffectRestoreHp:: tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_ATTACKER attackanimation waitanimation +BattleScript_RestoreHp: orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER @@ -686,14 +3634,18 @@ BattleScript_EffectToxic:: attackstring ppreduce jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed - jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned - jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects + jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifsubstituteblocks BattleScript_ButItFailed + jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed - jumpiftype BS_TARGET, TYPE_POISON, BattleScript_NotAffected - jumpiftype BS_TARGET, TYPE_STEEL, BattleScript_NotAffected + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents + trypoisontype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected attackanimation waitanimation setmoveeffect MOVE_EFFECT_TOXIC @@ -711,6 +3663,7 @@ BattleScript_AlreadyPoisoned:: BattleScript_ImmunityProtected:: copybyte gEffectBattler, gBattlerTarget + call BattleScript_AbilityPopUp setbyte cMULTISTRING_CHOOSER, B_MSG_ABILITY_PREVENTS_MOVE_STATUS call BattleScript_PSNPrevention goto BattleScript_MoveEnd @@ -719,6 +3672,13 @@ BattleScript_EffectPayDay:: setmoveeffect MOVE_EFFECT_PAYDAY goto BattleScript_EffectHit +BattleScript_EffectAuroraVeil: + attackcanceler + attackstring + ppreduce + setauroraveil BS_ATTACKER + goto BattleScript_PrintReflectLightScreenSafeguardString + BattleScript_EffectLightScreen:: attackcanceler attackstring @@ -735,6 +3695,7 @@ BattleScript_EffectRest:: attackstring ppreduce jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_RestIsAlreadyAsleep + jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_RestIsAlreadyAsleep jumpifcantmakeasleep BattleScript_RestCantSleep trysetrest BattleScript_AlreadyAtFullHp pause B_WAIT_TIME_SHORT @@ -773,35 +3734,30 @@ BattleScript_KOFail:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectRazorWind:: - jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn - setbyte sTWOTURN_STRINGID, B_MSG_TURN1_RAZOR_WIND - call BattleScriptFirstChargingTurn - goto BattleScript_MoveEnd - BattleScript_TwoTurnMovesSecondTurn:: attackcanceler setmoveeffect MOVE_EFFECT_CHARGING setbyte sB_ANIM_TURN, 1 clearstatusfromeffect BS_ATTACKER orword gHitMarker, HITMARKER_NO_PPDEDUCT - jumpifnotmove MOVE_SKY_ATTACK, BattleScript_HitFromAccCheck - setmoveeffect MOVE_EFFECT_FLINCH + argumenttomoveeffect goto BattleScript_HitFromAccCheck BattleScriptFirstChargingTurn:: attackcanceler printstring STRINGID_EMPTYSTRING3 ppreduce + attackstring +BattleScriptFirstChargingTurnAfterAttackString: + pause B_WAIT_TIME_LONG + copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID + printfromtable gFirstTurnOfTwoStringIds + waitmessage B_WAIT_TIME_LONG attackanimation waitanimation orword gHitMarker, HITMARKER_CHARGING setmoveeffect MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER seteffectprimary - copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID - printfromtable gFirstTurnOfTwoStringIds - waitmessage B_WAIT_TIME_LONG return BattleScript_EffectSuperFang:: @@ -810,7 +3766,7 @@ BattleScript_EffectSuperFang:: attackstring ppreduce typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE damagetohalftargethp goto BattleScript_HitFromAtkAnimation @@ -820,20 +3776,25 @@ BattleScript_EffectDragonRage:: attackstring ppreduce typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE setword gBattleMoveDamage, 40 - adjustsetdamage + adjustdamage goto BattleScript_HitFromAtkAnimation BattleScript_EffectTrap:: - jumpifnotmove MOVE_WHIRLPOOL, BattleScript_DoWrapEffect - jumpifnostatus3 BS_TARGET, STATUS3_UNDERWATER, BattleScript_DoWrapEffect - orword gHitMarker, HITMARKER_IGNORE_UNDERWATER - setbyte sDMG_MULTIPLIER, 2 -BattleScript_DoWrapEffect:: setmoveeffect MOVE_EFFECT_WRAP goto BattleScript_EffectHit +BattleScript_EffectTripleHit:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setmultihitcounter 3 + initmultihitstring + sethword sMULTIHIT_EFFECT, 0 + goto BattleScript_MultiHitLoop + BattleScript_EffectDoubleHit:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE @@ -841,32 +3802,51 @@ BattleScript_EffectDoubleHit:: ppreduce setmultihitcounter 2 initmultihitstring - setbyte sMULTIHIT_EFFECT, 0 + sethword sMULTIHIT_EFFECT, 0 goto BattleScript_MultiHitLoop BattleScript_EffectRecoilIfMiss:: attackcanceler accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE +.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 + typecalc + jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveMissedDoDamage +.endif goto BattleScript_HitFromAtkString BattleScript_MoveMissedDoDamage:: + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_PrintMoveMissed attackstring ppreduce pause B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd +.if B_CRASH_IF_TARGET_IMMUNE < GEN_4 + jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd +.endif printstring STRINGID_PKMNCRASHED waitmessage B_WAIT_TIME_LONG damagecalc typecalc - adjustnormaldamage + adjustdamage +.if B_CRASH_IF_TARGET_IMMUNE == GEN_4 + manipulatedamage DMG_RECOIL_FROM_IMMUNE +.else manipulatedamage DMG_RECOIL_FROM_MISS - bicbyte gMoveResultFlags, MOVE_RESULT_MISSED - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE +.endif +.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE +.else + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED +.endif + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER - tryfaintmon BS_ATTACKER, FALSE, NULL - orbyte gMoveResultFlags, MOVE_RESULT_MISSED + tryfaintmon BS_ATTACKER +.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE +.else + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED +.endif goto BattleScript_MoveEnd BattleScript_EffectMist:: @@ -880,7 +3860,7 @@ BattleScript_EffectMist:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectFocusEnergy:: +BattleScript_EffectFocusEnergy: attackcanceler attackstring ppreduce @@ -892,21 +3872,16 @@ BattleScript_EffectFocusEnergy:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectRecoil:: - setmoveeffect MOVE_EFFECT_RECOIL_25 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN - jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit - incrementgamestat GAME_STAT_USED_STRUGGLE - goto BattleScript_EffectHit - -BattleScript_EffectConfuse:: +BattleScript_EffectConfuse: attackcanceler attackstring ppreduce jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_AlreadyConfused + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected attackanimation waitanimation setmoveeffect MOVE_EFFECT_CONFUSION @@ -930,6 +3905,10 @@ BattleScript_EffectDefenseUp2:: setstatchanger STAT_DEF, 2, FALSE goto BattleScript_EffectStatUp +BattleScript_EffectDefenseUp3: + setstatchanger STAT_DEF, 3, FALSE + goto BattleScript_EffectStatUp + BattleScript_EffectSpeedUp2:: setstatchanger STAT_SPEED, 2, FALSE goto BattleScript_EffectStatUp @@ -938,14 +3917,29 @@ BattleScript_EffectSpecialAttackUp2:: setstatchanger STAT_SPATK, 2, FALSE goto BattleScript_EffectStatUp +BattleScript_EffectSpecialAttackUp3:: + setstatchanger STAT_SPATK, 3, FALSE + goto BattleScript_EffectStatUp + BattleScript_EffectSpecialDefenseUp2:: setstatchanger STAT_SPDEF, 2, FALSE goto BattleScript_EffectStatUp +BattleScript_EffectAccuracyUp2: + setstatchanger STAT_ACC, 2, FALSE + goto BattleScript_EffectStatUp + +BattleScript_EffectEvasionUp2: + setstatchanger STAT_EVASION, 2, FALSE + goto BattleScript_EffectStatUp + BattleScript_EffectTransform:: attackcanceler attackstring ppreduce + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 transformdataexecution attackanimation waitanimation @@ -953,22 +3947,34 @@ BattleScript_EffectTransform:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectAttackDown2:: +BattleScript_EffectAttackDown2: setstatchanger STAT_ATK, 2, TRUE goto BattleScript_EffectStatDown -BattleScript_EffectDefenseDown2:: +BattleScript_EffectDefenseDown2: setstatchanger STAT_DEF, 2, TRUE goto BattleScript_EffectStatDown -BattleScript_EffectSpeedDown2:: +BattleScript_EffectSpeedDown2: setstatchanger STAT_SPEED, 2, TRUE goto BattleScript_EffectStatDown -BattleScript_EffectSpecialDefenseDown2:: +BattleScript_EffectSpecialDefenseDown2: setstatchanger STAT_SPDEF, 2, TRUE goto BattleScript_EffectStatDown +BattleScript_EffectSpecialAttackDown2: + setstatchanger STAT_SPATK, 2, TRUE + goto BattleScript_EffectStatDown + +BattleScript_EffectAccuracyDown2: + setstatchanger STAT_ACC, 2, TRUE + goto BattleScript_EffectStatDown + +BattleScript_EffectEvasionDown2: + setstatchanger STAT_EVASION, 2, TRUE + goto BattleScript_EffectStatDown + BattleScript_EffectReflect:: attackcanceler attackstring @@ -986,14 +3992,19 @@ BattleScript_EffectPoison:: attackstring ppreduce jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects + jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned - jumpiftype BS_TARGET, TYPE_POISON, BattleScript_NotAffected - jumpiftype BS_TARGET, TYPE_STEEL, BattleScript_NotAffected + trypoisontype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected attackanimation waitanimation setmoveeffect MOVE_EFFECT_POISON @@ -1002,18 +4013,26 @@ BattleScript_EffectPoison:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectParalyze:: +BattleScript_EffectParalyze: attackcanceler attackstring ppreduce jumpifability BS_TARGET, ABILITY_LIMBER, BattleScript_LimberProtected - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects + jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifsubstituteblocks BattleScript_ButItFailed typecalc +BattleScript_BattleScript_EffectParalyzeNoTypeCalc: jumpifmovehadnoeffect BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed + tryparalyzetype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE attackanimation waitanimation setmoveeffect MOVE_EFFECT_PARALYSIS @@ -1022,7 +4041,7 @@ BattleScript_EffectParalyze:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_AlreadyParalyzed:: +BattleScript_AlreadyParalyzed: setalreadystatusedmoveattempt BS_ATTACKER pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNISALREADYPARALYZED @@ -1055,15 +4074,87 @@ BattleScript_EffectSpecialDefenseDownHit:: setmoveeffect MOVE_EFFECT_SP_DEF_MINUS_1 goto BattleScript_EffectHit +BattleScript_EffectSpecialDefenseDownHit2:: + setmoveeffect MOVE_EFFECT_SP_DEF_MINUS_2 + goto BattleScript_EffectHit + BattleScript_EffectAccuracyDownHit:: setmoveeffect MOVE_EFFECT_ACC_MINUS_1 goto BattleScript_EffectHit -BattleScript_EffectSkyAttack:: +BattleScript_PowerHerbActivation: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_POWERHERB + waitmessage B_WAIT_TIME_LONG + removeitem BS_ATTACKER + return + +BattleScript_EffectTwoTurnsAttack:: jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn - setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SKY_ATTACK + jumpifmove MOVE_SKY_ATTACK, BattleScript_EffectTwoTurnsAttackSkyAttack + jumpifmove MOVE_RAZOR_WIND, BattleScript_EffectTwoTurnsAttackRazorWind + jumpifmove MOVE_ICE_BURN, BattleScript_EffectTwoTurnsAttackIceBurn + jumpifmove MOVE_FREEZE_SHOCK, BattleScript_EffectTwoTurnsAttackFreezeShock + setbyte sTWOTURN_STRINGID, B_MSG_TURN1_RAZOR_WIND +BattleScript_EffectTwoTurnsAttackContinue: call BattleScriptFirstChargingTurn + jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd + call BattleScript_PowerHerbActivation + goto BattleScript_TwoTurnMovesSecondTurn +BattleScript_EffectTwoTurnsAttackSkyAttack: + setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SKY_ATTACK + goto BattleScript_EffectTwoTurnsAttackContinue +BattleScript_EffectTwoTurnsAttackRazorWind: + setbyte sTWOTURN_STRINGID, B_MSG_TURN1_RAZOR_WIND + goto BattleScript_EffectTwoTurnsAttackContinue +BattleScript_EffectTwoTurnsAttackIceBurn: + setbyte sTWOTURN_STRINGID, B_MSG_TURN1_RAZOR_WIND + goto BattleScript_EffectTwoTurnsAttackContinue +BattleScript_EffectTwoTurnsAttackFreezeShock: + setbyte sTWOTURN_STRINGID, B_MSG_TURN1_FREEZE_SHOCK + goto BattleScript_EffectTwoTurnsAttackContinue + +BattleScript_EffectGeomancy: + jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_GeomancySecondTurn + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_GeomancySecondTurn + setbyte sTWOTURN_STRINGID, B_MSG_TURN1_GEOMANCY + call BattleScriptFirstChargingTurn + jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd + call BattleScript_PowerHerbActivation +BattleScript_GeomancySecondTurn: + attackcanceler + setmoveeffect MOVE_EFFECT_CHARGING + setbyte sB_ANIM_TURN, 1 + clearstatusfromeffect BS_ATTACKER + orword gHitMarker, HITMARKER_NO_PPDEDUCT + attackstring + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_GeomancyDoMoveAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_GeomancyDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_GeomancyDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF | BIT_SPEED, 0 + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyTrySpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_GeomancyTrySpDef:: + setstatchanger STAT_SPDEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyTrySpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_GeomancyTrySpeed:: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_GeomancyEnd:: goto BattleScript_MoveEnd BattleScript_EffectConfuseHit:: @@ -1073,7 +4164,7 @@ BattleScript_EffectConfuseHit:: BattleScript_EffectTwineedle:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - setbyte sMULTIHIT_EFFECT, MOVE_EFFECT_POISON + sethword sMULTIHIT_EFFECT, MOVE_EFFECT_POISON attackstring ppreduce setmultihitcounter 2 @@ -1133,7 +4224,7 @@ BattleScript_EffectMimic:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON mimicattackcopy BattleScript_ButItFailed attackanimation @@ -1157,7 +4248,7 @@ BattleScript_EffectLeechSeed:: attackstring pause B_WAIT_TIME_SHORT ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_DoLeechSeed, ACC_CURR_MOVE BattleScript_DoLeechSeed:: setseeded @@ -1167,21 +4258,39 @@ BattleScript_DoLeechSeed:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectSplash:: +BattleScript_EffectDoNothing:: attackcanceler attackstring ppreduce + jumpifmove MOVE_HOLD_HANDS, BattleScript_EffectHoldHands attackanimation waitanimation + jumpifmove MOVE_CELEBRATE, BattleScript_EffectCelebrate + jumpifmove MOVE_HAPPY_HOUR, BattleScript_EffectHappyHour incrementgamestat GAME_STAT_USED_SPLASH printstring STRINGID_BUTNOTHINGHAPPENED waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_EffectHoldHands: + jumpifsideaffecting BS_TARGET, SIDE_STATUS_CRAFTY_SHIELD, BattleScript_ButItFailed + jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_ButItFailed + attackanimation + waitanimation + goto BattleScript_MoveEnd +BattleScript_EffectCelebrate: + printstring STRINGID_CELEBRATEMESSAGE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd +BattleScript_EffectHappyHour: + setmoveeffect MOVE_EFFECT_HAPPY_HOUR + seteffectprimary + goto BattleScript_MoveEnd BattleScript_EffectDisable:: attackcanceler attackstring ppreduce + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE disablelastusedattack BattleScript_ButItFailed attackanimation @@ -1196,9 +4305,9 @@ BattleScript_EffectLevelDamage:: attackstring ppreduce typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE dmgtolevel - adjustsetdamage + adjustdamage goto BattleScript_HitFromAtkAnimation BattleScript_EffectPsywave:: @@ -1207,9 +4316,9 @@ BattleScript_EffectPsywave:: attackstring ppreduce typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE psywavedamageeffect - adjustsetdamage + adjustdamage goto BattleScript_HitFromAtkAnimation BattleScript_EffectCounter:: @@ -1218,8 +4327,9 @@ BattleScript_EffectCounter:: accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce - typecalc2 - adjustsetdamage + typecalc + bichalfword gMoveResultFlags, MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE + adjustdamage goto BattleScript_HitFromAtkAnimation BattleScript_EffectEncore:: @@ -1227,6 +4337,7 @@ BattleScript_EffectEncore:: accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects trysetencore BattleScript_ButItFailed attackanimation waitanimation @@ -1254,6 +4365,7 @@ BattleScript_EffectPainSplit:: BattleScript_EffectSnore:: attackcanceler + jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_SnoreIsAsleep jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_SnoreIsAsleep attackstring ppreduce @@ -1285,7 +4397,7 @@ BattleScript_EffectLockOn:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE setalwayshitflag attackanimation @@ -1298,7 +4410,6 @@ BattleScript_EffectSketch:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed copymovepermanently BattleScript_ButItFailed attackanimation waitanimation @@ -1308,6 +4419,7 @@ BattleScript_EffectSketch:: BattleScript_EffectSleepTalk:: attackcanceler + jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_SleepTalkIsAsleep jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_SleepTalkIsAsleep attackstring ppreduce @@ -1340,9 +4452,32 @@ BattleScript_EffectDestinyBond:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectFlail:: - remaininghptopower - goto BattleScript_EffectHit +BattleScript_EffectEerieSpell:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET + eeriespellppreduce BattleScript_MoveEnd + printstring STRINGID_PKMNREDUCEDPP + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd BattleScript_EffectSpite:: attackcanceler @@ -1394,13 +4529,18 @@ BattleScript_TripleKickLoop:: BattleScript_DoTripleKickAttack:: accuracycheck BattleScript_TripleKickNoMoreHits, ACC_CURR_MOVE movevaluescleanup + jumpifmove MOVE_SURGING_STRIKES, EffectTripleKick_DoDmgCalcs @ no power boost each hit + jumpifmove MOVE_TRIPLE_AXEL, EffectTripleKick_TripleAxelBoost @ triple axel gets +20 power + addbyte sTRIPLE_KICK_POWER, 10 @ triple kick gets +10 power + goto EffectTripleKick_DoDmgCalcs +EffectTripleKick_TripleAxelBoost: + addbyte sTRIPLE_KICK_POWER, 20 +EffectTripleKick_DoDmgCalcs: addbyte sTRIPLE_KICK_POWER, 10 addbyte sMULTIHIT_STRING + 4, 1 - copyhword gDynamicBasePower, sTRIPLE_KICK_POWER critcalc damagecalc - typecalc - adjustnormaldamage + adjustdamage jumpifmovehadnoeffect BattleScript_TripleKickNoMoreHits attackanimation waitanimation @@ -1420,18 +4560,18 @@ BattleScript_DoTripleKickAttack:: BattleScript_TripleKickNoMoreHits:: pause B_WAIT_TIME_SHORT jumpifbyte CMP_EQUAL, sMULTIHIT_STRING + 4, 0, BattleScript_TripleKickPrintStrings - bicbyte gMoveResultFlags, MOVE_RESULT_MISSED + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED BattleScript_TripleKickPrintStrings:: resultmessage waitmessage B_WAIT_TIME_LONG jumpifbyte CMP_EQUAL, sMULTIHIT_STRING + 4, 0, BattleScript_TripleKickEnd - jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_TripleKickEnd + jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_TripleKickEnd copyarray gBattleTextBuff1, sMULTIHIT_STRING, 6 printstring STRINGID_HITXTIMES waitmessage B_WAIT_TIME_LONG BattleScript_TripleKickEnd:: seteffectwithchance - tryfaintmon BS_TARGET, FALSE, NULL + tryfaintmon BS_TARGET moveendfrom MOVEEND_UPDATE_LAST_MOVES end @@ -1439,13 +4579,20 @@ BattleScript_EffectThief:: setmoveeffect MOVE_EFFECT_STEAL_ITEM goto BattleScript_EffectHit +BattleScript_EffectHitPreventEscape: + setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE + goto BattleScript_EffectHit + BattleScript_EffectMeanLook:: attackcanceler attackstring ppreduce - accuracycheck BattleScript_ButItFailed, NO_ACC_CALC + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_ButItFailed - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed +.if B_GHOSTS_ESCAPE >= GEN_6 + jumpiftype BS_TARGET, TYPE_GHOST, BattleScript_ButItFailed +.endif attackanimation waitanimation setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE @@ -1458,9 +4605,10 @@ BattleScript_EffectNightmare:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus2 BS_TARGET, STATUS2_NIGHTMARE, BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_NightmareWorked + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_NightmareWorked goto BattleScript_ButItFailed BattleScript_NightmareWorked:: attackanimation @@ -1474,11 +4622,15 @@ BattleScript_NightmareWorked:: BattleScript_EffectMinimize:: attackcanceler setminimize +.if B_MINIMIZE_EVASION >= GEN_5 + setstatchanger STAT_EVASION, 2, FALSE +.else setstatchanger STAT_EVASION, 1, FALSE +.endif goto BattleScript_EffectStatUpAfterAtkCanceler BattleScript_EffectCurse:: - jumpiftype2 BS_ATTACKER, TYPE_GHOST, BattleScript_GhostCurse + jumpiftype BS_ATTACKER, TYPE_GHOST, BattleScript_GhostCurse attackcanceler attackstring ppreduce @@ -1491,17 +4643,17 @@ BattleScript_CurseTrySpeed:: attackanimation waitanimation setstatchanger STAT_SPEED, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CurseTryAttack + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseTryAttack printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CurseTryAttack:: setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CurseTryDefense + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseTryDefense printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CurseTryDefense:: setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CurseEnd + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CurseEnd:: @@ -1513,7 +4665,6 @@ BattleScript_DoGhostCurse:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON cursetarget BattleScript_ButItFailed orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE @@ -1524,12 +4675,18 @@ BattleScript_DoGhostCurse:: datahpupdate BS_ATTACKER printstring STRINGID_PKMNLAIDCURSE waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER, FALSE, NULL + tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd +BattleScript_EffectMatBlock:: + attackcanceler + jumpifnotfirstturn BattleScript_ButItFailedAtkStringPpReduce + goto BattleScript_ProtectLikeAtkString + BattleScript_EffectProtect:: BattleScript_EffectEndure:: attackcanceler +BattleScript_ProtectLikeAtkString: attackstring ppreduce setprotectlike @@ -1550,12 +4707,14 @@ BattleScript_EffectSpikes:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectForesight:: +BattleScript_EffectForesight: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + jumpifstatus2 BS_TARGET, STATUS2_FORESIGHT, BattleScript_ButItFailed setforesight +BattleScript_IdentifiedFoe: attackanimation waitanimation printstring STRINGID_PKMNIDENTIFIED @@ -1571,23 +4730,33 @@ BattleScript_EffectPerishSong:: waitanimation printstring STRINGID_FAINTINTHREE waitmessage B_WAIT_TIME_LONG - setbyte sBATTLER, 0 + setbyte gBattlerTarget, 0 BattleScript_PerishSongLoop:: - jumpifability BS_SCRIPTING, ABILITY_SOUNDPROOF, BattleScript_PerishSongNotAffected + jumpifability BS_TARGET, ABILITY_SOUNDPROOF, BattleScript_PerishSongBlocked + jumpifpranksterblocked BS_TARGET, BattleScript_PerishSongNotAffected BattleScript_PerishSongLoopIncrement:: - addbyte sBATTLER, 1 - jumpifbytenotequal sBATTLER, gBattlersCount, BattleScript_PerishSongLoop + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_PerishSongLoop goto BattleScript_MoveEnd -BattleScript_PerishSongNotAffected:: +BattleScript_PerishSongBlocked:: + copybyte sBATTLER, gBattlerTarget printstring STRINGID_PKMNSXBLOCKSY2 waitmessage B_WAIT_TIME_LONG goto BattleScript_PerishSongLoopIncrement +BattleScript_PerishSongNotAffected: + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_PerishSongLoopIncrement + BattleScript_EffectSandstorm:: attackcanceler attackstring ppreduce + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn setsandstorm goto BattleScript_MoveWeatherChange @@ -1599,13 +4768,13 @@ BattleScript_EffectRollout:: BattleScript_RolloutCheckAccuracy:: accuracycheck BattleScript_RolloutHit, ACC_CURR_MOVE BattleScript_RolloutHit:: - typecalc2 - rolloutdamagecalculation + typecalc + handlerollout goto BattleScript_HitFromCritCalc BattleScript_EffectSwagger:: attackcanceler - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed + jumpifsubstituteblocks BattleScript_MakeMoveMissed accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -1613,52 +4782,70 @@ BattleScript_EffectSwagger:: attackanimation waitanimation setstatchanger STAT_ATK, 2, FALSE - statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_SwaggerTryConfuse + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_SwaggerTryConfuse jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_SwaggerTryConfuse setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG -BattleScript_SwaggerTryConfuse:: +BattleScript_SwaggerTryConfuse: jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected setmoveeffect MOVE_EFFECT_CONFUSION seteffectprimary goto BattleScript_MoveEnd -BattleScript_EffectFuryCutter:: +BattleScript_EffectFuryCutter: attackcanceler attackstring ppreduce accuracycheck BattleScript_FuryCutterHit, ACC_CURR_MOVE -BattleScript_FuryCutterHit:: - furycuttercalc +BattleScript_FuryCutterHit: + handlefurycutter critcalc damagecalc - typecalc jumpifmovehadnoeffect BattleScript_FuryCutterHit - adjustnormaldamage + adjustdamage goto BattleScript_HitFromAtkAnimation +BattleScript_TryDestinyKnotTarget: + jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotTargetRet + infatuatewithbattler BS_TARGET, BS_ATTACKER + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + status2animation BS_TARGET, STATUS2_INFATUATION + waitanimation + printstring STRINGID_DESTINYKNOTACTIVATES + waitmessage B_WAIT_TIME_LONG +BattleScript_TryDestinyKnotTargetRet: + return + +BattleScript_TryDestinyKnotAttacker: + jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotAttackerRet + infatuatewithbattler BS_ATTACKER, BS_TARGET + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation + status2animation BS_ATTACKER, STATUS2_INFATUATION + waitanimation + printstring STRINGID_DESTINYKNOTACTIVATES + waitmessage B_WAIT_TIME_LONG +BattleScript_TryDestinyKnotAttackerRet: + return + BattleScript_EffectAttract:: attackcanceler attackstring ppreduce accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects tryinfatuating BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNFELLINLOVE waitmessage B_WAIT_TIME_LONG + call BattleScript_TryDestinyKnotAttacker goto BattleScript_MoveEnd -BattleScript_EffectReturn:: -BattleScript_EffectFrustration:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - friendshiptodamagecalculation - goto BattleScript_HitFromAtkString - BattleScript_EffectPresent:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE @@ -1674,20 +4861,18 @@ BattleScript_EffectSafeguard:: setsafeguard goto BattleScript_PrintReflectLightScreenSafeguardString -BattleScript_EffectThawHit:: - setmoveeffect MOVE_EFFECT_BURN - goto BattleScript_EffectHit - BattleScript_EffectMagnitude:: + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_EffectMagnitudeTarget attackcanceler attackstring ppreduce - selectfirstvalidtarget magnitudedamagecalculation pause B_WAIT_TIME_SHORT printstring STRINGID_MAGNITUDESTRENGTH waitmessage B_WAIT_TIME_LONG - goto BattleScript_HitsAllWithUndergroundBonusLoop +BattleScript_EffectMagnitudeTarget: + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + goto BattleScript_HitFromCritCalc BattleScript_EffectBatonPass:: attackcanceler @@ -1705,6 +4890,9 @@ BattleScript_EffectBatonPass:: getswitchedmondata BS_ATTACKER switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 printstring STRINGID_SWITCHINMON switchinanim BS_ATTACKER, TRUE waitstate @@ -1712,8 +4900,43 @@ BattleScript_EffectBatonPass:: goto BattleScript_MoveEnd BattleScript_EffectRapidSpin:: +.if B_SPEED_BUFFING_RAPID_SPIN == GEN_8 + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd + setmoveeffect MOVE_EFFECT_RAPIDSPIN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + seteffectwithchance + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectRapidSpinEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectRapidSpinEnd + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectRapidSpinEnd:: + tryfaintmon BS_TARGET + moveendall + end +.else setmoveeffect MOVE_EFFECT_RAPIDSPIN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit +.endif BattleScript_EffectSonicboom:: attackcanceler @@ -1721,28 +4944,28 @@ BattleScript_EffectSonicboom:: attackstring ppreduce typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE setword gBattleMoveDamage, 20 - adjustsetdamage + adjustdamage goto BattleScript_HitFromAtkAnimation BattleScript_EffectMorningSun:: BattleScript_EffectSynthesis:: BattleScript_EffectMoonlight:: +BattleScript_EffectShoreUp:: attackcanceler attackstring ppreduce recoverbasedonsunlight BattleScript_AlreadyAtFullHp goto BattleScript_PresentHealTarget -BattleScript_EffectHiddenPower:: - hiddenpowercalc - goto BattleScript_EffectHit - BattleScript_EffectRainDance:: attackcanceler attackstring ppreduce + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn setrain BattleScript_MoveWeatherChange:: attackanimation @@ -1756,9 +4979,80 @@ BattleScript_EffectSunnyDay:: attackcanceler attackstring ppreduce + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn setsunny goto BattleScript_MoveWeatherChange +BattleScript_ExtremelyHarshSunlightWasNotLessened: + pause B_WAIT_TIME_SHORT + printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_ExtremelyHarshSunlightWasNotLessenedEnd3: + pause B_WAIT_TIME_SHORT + printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_ExtremelyHarshSunlightWasNotLessenedRet: + pause B_WAIT_TIME_SHORT + printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_NoReliefFromHeavyRain: + pause B_WAIT_TIME_SHORT + printstring STRINGID_NORELIEFROMHEAVYRAIN + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_NoReliefFromHeavyRainEnd3: + pause B_WAIT_TIME_SHORT + printstring STRINGID_NORELIEFROMHEAVYRAIN + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_NoReliefFromHeavyRainRet: + pause B_WAIT_TIME_SHORT + printstring STRINGID_NORELIEFROMHEAVYRAIN + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_MysteriousAirCurrentBlowsOn: + pause B_WAIT_TIME_SHORT + printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_MysteriousAirCurrentBlowsOnEnd3: + pause B_WAIT_TIME_SHORT + printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_MysteriousAirCurrentBlowsOnRet: + pause B_WAIT_TIME_SHORT + printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_BlockedByPrimalWeatherEnd3:: + call BattleScript_AbilityPopUp + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessenedEnd3 + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRainEnd3 + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnEnd3 + end3 + +BattleScript_BlockedByPrimalWeatherRet:: + call BattleScript_AbilityPopUp + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessenedRet + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRainRet + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnRet + return + BattleScript_EffectDefenseUpHit:: setmoveeffect MOVE_EFFECT_DEF_PLUS_1 | MOVE_EFFECT_AFFECTS_USER goto BattleScript_EffectHit @@ -1802,8 +5096,9 @@ BattleScript_EffectMirrorCoat:: accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce - typecalc2 - adjustsetdamage + typecalc + bichalfword gMoveResultFlags, MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE + adjustdamage goto BattleScript_HitFromAtkAnimation BattleScript_EffectSkullBash:: @@ -1812,69 +5107,27 @@ BattleScript_EffectSkullBash:: setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SKULL_BASH call BattleScriptFirstChargingTurn setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_SkullBashEnd + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_SkullBashEnd jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_SkullBashEnd setgraphicalstatchangevalues playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_SkullBashEnd:: - goto BattleScript_MoveEnd + jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd + call BattleScript_PowerHerbActivation + goto BattleScript_TwoTurnMovesSecondTurn -BattleScript_EffectTwister:: - jumpifnostatus3 BS_TARGET, STATUS3_ON_AIR, BattleScript_FlinchEffect - orword gHitMarker, HITMARKER_IGNORE_ON_AIR - setbyte sDMG_MULTIPLIER, 2 -BattleScript_FlinchEffect:: +BattleScript_EffectTwister: +BattleScript_FlinchEffect: +BattleScript_EffectStomp: setmoveeffect MOVE_EFFECT_FLINCH goto BattleScript_EffectHit -BattleScript_EffectEarthquake:: - attackcanceler - attackstring - ppreduce - selectfirstvalidtarget -BattleScript_HitsAllWithUndergroundBonusLoop:: - movevaluescleanup - jumpifnostatus3 BS_TARGET, STATUS3_UNDERGROUND, BattleScript_HitsAllNoUndergroundBonus - orword gHitMarker, HITMARKER_IGNORE_UNDERGROUND - setbyte sDMG_MULTIPLIER, 2 - goto BattleScript_DoHitAllWithUndergroundBonus -BattleScript_HitsAllNoUndergroundBonus:: - bicword gHitMarker, HITMARKER_IGNORE_UNDERGROUND - setbyte sDMG_MULTIPLIER, 1 -BattleScript_DoHitAllWithUndergroundBonus:: - accuracycheck BattleScript_HitAllWithUndergroundBonusMissed, ACC_CURR_MOVE - critcalc - damagecalc - typecalc - adjustnormaldamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 - tryfaintmon BS_TARGET, FALSE, NULL - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_HitsAllWithUndergroundBonusLoop - end -BattleScript_HitAllWithUndergroundBonusMissed:: - pause B_WAIT_TIME_SHORT - typecalc - effectivenesssound - resultmessage - waitmessage B_WAIT_TIME_LONG - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_HitsAllWithUndergroundBonusLoop - end +BattleScript_EffectBulldoze: + setmoveeffect MOVE_EFFECT_SPD_MINUS_1 +BattleScript_EffectEarthquake: + goto BattleScript_EffectHit BattleScript_EffectFutureSight:: attackcanceler @@ -1888,46 +5141,41 @@ BattleScript_EffectFutureSight:: goto BattleScript_MoveEnd BattleScript_EffectGust:: - jumpifnostatus3 BS_TARGET, STATUS3_ON_AIR, BattleScript_EffectHit - orword gHitMarker, HITMARKER_IGNORE_ON_AIR - setbyte sDMG_MULTIPLIER, 2 goto BattleScript_EffectHit -BattleScript_EffectStomp:: - jumpifnostatus3 BS_TARGET, STATUS3_MINIMIZED, BattleScript_FlinchEffect - setbyte sDMG_MULTIPLIER, 2 - goto BattleScript_FlinchEffect - -BattleScript_EffectSolarbeam:: - jumpifabilitypresent ABILITY_CLOUD_NINE, BattleScript_SolarbeamDecideTurn - jumpifabilitypresent ABILITY_AIR_LOCK, BattleScript_SolarbeamDecideTurn - jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT, BattleScript_SolarbeamOnFirstTurn -BattleScript_SolarbeamDecideTurn:: +BattleScript_EffectSolarBeam:: + jumpifweatheraffected BS_ATTACKER, B_WEATHER_SUN, BattleScript_SolarBeamOnFirstTurn +BattleScript_SolarBeamDecideTurn:: jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SOLAR_BEAM call BattleScriptFirstChargingTurn - goto BattleScript_MoveEnd -BattleScript_SolarbeamOnFirstTurn:: + jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd + call BattleScript_PowerHerbActivation + goto BattleScript_TwoTurnMovesSecondTurn +BattleScript_SolarBeamOnFirstTurn:: orword gHitMarker, HITMARKER_CHARGING setmoveeffect MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER seteffectprimary ppreduce goto BattleScript_TwoTurnMovesSecondTurn -BattleScript_EffectThunder:: +BattleScript_EffectThunder: setmoveeffect MOVE_EFFECT_PARALYSIS - orword gHitMarker, HITMARKER_IGNORE_ON_AIR goto BattleScript_EffectHit -BattleScript_EffectTeleport:: +BattleScript_EffectHurricane: + setmoveeffect MOVE_EFFECT_CONFUSION + goto BattleScript_EffectHit + +BattleScript_EffectTeleport: attackcanceler attackstring ppreduce jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_ButItFailed getifcantrunfrombattle BS_ATTACKER - jumpifbyte CMP_EQUAL, gBattleCommunication, 1, BattleScript_ButItFailed - jumpifbyte CMP_EQUAL, gBattleCommunication, 2, BattleScript_PrintAbilityMadeIneffective + jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FORBIDDEN, BattleScript_ButItFailed + jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FAILURE, BattleScript_PrintAbilityMadeIneffective attackanimation waitanimation printstring STRINGID_PKMNFLEDFROMBATTLE @@ -1947,10 +5195,10 @@ BattleScript_BeatUpLoop:: trydobeatup BattleScript_BeatUpEnd, BattleScript_ButItFailed printstring STRINGID_PKMNATTACK critcalc - jumpifbyte CMP_NOT_EQUAL, gCritMultiplier, 2, BattleScript_BeatUpAttack + jumpifbyte CMP_NOT_EQUAL, gIsCriticalHit, TRUE, BattleScript_BeatUpAttack manipulatedamage DMG_DOUBLED BattleScript_BeatUpAttack:: - adjustnormaldamage + adjustdamage attackanimation waitanimation effectivenesssound @@ -1962,7 +5210,7 @@ BattleScript_BeatUpAttack:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET, FALSE, NULL + tryfaintmon BS_TARGET moveendto MOVEEND_NEXT_TARGET goto BattleScript_BeatUpLoop BattleScript_BeatUpEnd:: @@ -1974,32 +5222,33 @@ BattleScript_EffectSemiInvulnerable:: jumpifmove MOVE_FLY, BattleScript_FirstTurnFly jumpifmove MOVE_DIVE, BattleScript_FirstTurnDive jumpifmove MOVE_BOUNCE, BattleScript_FirstTurnBounce + jumpifmove MOVE_PHANTOM_FORCE, BattleScript_FirstTurnPhantomForce + jumpifmove MOVE_SHADOW_FORCE, BattleScript_FirstTurnPhantomForce setbyte sTWOTURN_STRINGID, B_MSG_TURN1_DIG goto BattleScript_FirstTurnSemiInvulnerable - BattleScript_FirstTurnBounce:: setbyte sTWOTURN_STRINGID, B_MSG_TURN1_BOUNCE goto BattleScript_FirstTurnSemiInvulnerable - BattleScript_FirstTurnDive:: setbyte sTWOTURN_STRINGID, B_MSG_TURN1_DIVE goto BattleScript_FirstTurnSemiInvulnerable - +BattleScript_FirstTurnPhantomForce: + setbyte sTWOTURN_STRINGID, B_MSG_TURN1_PHANTOM_FORCE + goto BattleScript_FirstTurnSemiInvulnerable BattleScript_FirstTurnFly:: setbyte sTWOTURN_STRINGID, B_MSG_TURN1_FLY BattleScript_FirstTurnSemiInvulnerable:: call BattleScriptFirstChargingTurn setsemiinvulnerablebit - goto BattleScript_MoveEnd - + jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd + call BattleScript_PowerHerbActivation BattleScript_SecondTurnSemiInvulnerable:: attackcanceler setmoveeffect MOVE_EFFECT_CHARGING setbyte sB_ANIM_TURN, 1 clearstatusfromeffect BS_ATTACKER orword gHitMarker, HITMARKER_NO_PPDEDUCT - jumpifnotmove MOVE_BOUNCE, BattleScript_SemiInvulnerableTryHit - setmoveeffect MOVE_EFFECT_PARALYSIS + argumenttomoveeffect BattleScript_SemiInvulnerableTryHit:: accuracycheck BattleScript_SemiInvulnerableMiss, ACC_CURR_MOVE clearsemiinvulnerablebit @@ -2015,7 +5264,7 @@ BattleScript_EffectDefenseCurl:: ppreduce setdefensecurlbit setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_DefenseCurlDoStatUpAnim + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_DefenseCurlDoStatUpAnim jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpPrintString attackanimation waitanimation @@ -2046,7 +5295,7 @@ BattleScript_AlreadyAtFullHp:: BattleScript_EffectFakeOut:: attackcanceler jumpifnotfirstturn BattleScript_ButItFailedAtkStringPpReduce - setmoveeffect MOVE_EFFECT_FLINCH | MOVE_EFFECT_CERTAIN + setmoveeffect MOVE_EFFECT_FLINCH goto BattleScript_EffectHit BattleScript_ButItFailedAtkStringPpReduce:: @@ -2055,14 +5304,23 @@ BattleScript_ButItFailedPpReduce:: ppreduce BattleScript_ButItFailed:: pause B_WAIT_TIME_SHORT - orbyte gMoveResultFlags, MOVE_RESULT_FAILED + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_NotAffected:: pause B_WAIT_TIME_SHORT - orbyte gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + resultmessage + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_NotAffectedAbilityPopUp:: + copybyte gBattlerAbility, gBattlerTarget + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -2075,18 +5333,36 @@ BattleScript_EffectUproar:: jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_UproarHit ppreduce BattleScript_UproarHit:: - nop goto BattleScript_HitFromCritCalc BattleScript_EffectStockpile:: attackcanceler attackstring ppreduce - stockpile + stockpile 0 attackanimation waitanimation printfromtable gStockpileUsedStringIds waitmessage B_WAIT_TIME_LONG + jumpifmovehadnoeffect BattleScript_EffectStockpileEnd + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_EffectStockpileDef + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_EffectStockpileEnd +BattleScript_EffectStockpileDef: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, 0 + setstatchanger STAT_DEF, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectStockpileSpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectStockpileSpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectStockpileSpDef:: + setstatchanger STAT_SPDEF, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectStockpileEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectStockpileEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectStockpileEnd: + stockpile 1 goto BattleScript_MoveEnd BattleScript_EffectSpitUp:: @@ -2095,9 +5371,10 @@ BattleScript_EffectSpitUp:: attackstring ppreduce accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + setbyte gIsCriticalHit, FALSE + damagecalc + adjustdamage stockpiletobasedamage BattleScript_SpitUpFail - typecalc - adjustsetdamage goto BattleScript_HitFromAtkAnimation BattleScript_SpitUpFail:: pause B_WAIT_TIME_SHORT @@ -2131,6 +5408,9 @@ BattleScript_EffectHail:: attackcanceler attackstring ppreduce + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn sethail goto BattleScript_MoveWeatherChange @@ -2139,6 +5419,7 @@ BattleScript_EffectTorment:: attackstring ppreduce accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects settorment BattleScript_ButItFailed attackanimation waitanimation @@ -2148,7 +5429,7 @@ BattleScript_EffectTorment:: BattleScript_EffectFlatter:: attackcanceler - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed + jumpifsubstituteblocks BattleScript_MakeMoveMissed accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -2156,7 +5437,7 @@ BattleScript_EffectFlatter:: attackanimation waitanimation setstatchanger STAT_SPATK, 1, FALSE - statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_FlatterTryConfuse + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_FlatterTryConfuse jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_FlatterTryConfuse setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 @@ -2164,7 +5445,7 @@ BattleScript_EffectFlatter:: waitmessage B_WAIT_TIME_LONG BattleScript_FlatterTryConfuse:: jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected setmoveeffect MOVE_EFFECT_CONFUSION seteffectprimary goto BattleScript_MoveEnd @@ -2173,13 +5454,19 @@ BattleScript_EffectWillOWisp:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_BURN, BattleScript_AlreadyBurned jumpiftype BS_TARGET, TYPE_FIRE, BattleScript_NotAffected jumpifability BS_TARGET, ABILITY_WATER_VEIL, BattleScript_WaterVeilPrevents + jumpifability BS_TARGET, ABILITY_WATER_BUBBLE, BattleScript_WaterVeilPrevents + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects + jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected attackanimation waitanimation setmoveeffect MOVE_EFFECT_BURN @@ -2187,6 +5474,7 @@ BattleScript_EffectWillOWisp:: goto BattleScript_MoveEnd BattleScript_WaterVeilPrevents:: + call BattleScript_AbilityPopUp copybyte gEffectBattler, gBattlerTarget setbyte cMULTISTRING_CHOOSER, B_MSG_ABILITY_PREVENTS_MOVE_STATUS call BattleScript_BRNPrevention @@ -2201,59 +5489,52 @@ BattleScript_AlreadyBurned:: BattleScript_EffectMemento:: attackcanceler - jumpifbyte CMP_EQUAL, cMISS_TYPE, B_MSG_PROTECTED, BattleScript_MementoFailProtect + jumpifbyte CMP_EQUAL, cMISS_TYPE, B_MSG_PROTECTED, BattleScript_MementoTargetProtect attackstring ppreduce - jumpifattackandspecialattackcannotfall BattleScript_ButItFailed + trymemento BattleScript_ButItFailed setatkhptozero attackanimation waitanimation - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_EffectMementoPrintNoEffect + jumpifsubstituteblocks BattleScript_EffectMementoPrintNoEffect setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO | STAT_CHANGE_MULTIPLE_STATS playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO setstatchanger STAT_ATK, 2, TRUE - statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_EffectMementoTrySpAtk - @ Greater than STAT_FELL is checking if the stat cannot decrease + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMementoTrySpAtk +@ Greater than B_MSG_DEFENDER_STAT_FELL is checking if the stat cannot decrease jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_EffectMementoTrySpAtk printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectMementoTrySpAtk: playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO setstatchanger STAT_SPATK, 2, TRUE - statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_EffectMementoTryFaint - @ Greater than STAT_FELL is checking if the stat cannot decrease + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMementoTryFaint +@ Greater than B_MSG_DEFENDER_STAT_FELL is checking if the stat cannot decrease jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_EffectMementoTryFaint printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectMementoTryFaint: - tryfaintmon BS_ATTACKER, FALSE, NULL + tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd BattleScript_EffectMementoPrintNoEffect: printstring STRINGID_BUTNOEFFECT waitmessage B_WAIT_TIME_LONG goto BattleScript_EffectMementoTryFaint -BattleScript_MementoFailProtect: +@ If the target is protected there's no need to check the target's stats or animate, the user will just faint +BattleScript_MementoTargetProtect: attackstring ppreduce - jumpifattackandspecialattackcannotfall BattleScript_MementoFailEnd -BattleScript_MementoFailEnd: + trymemento BattleScript_MementoTargetProtectEnd +BattleScript_MementoTargetProtectEnd: setatkhptozero pause B_WAIT_TIME_LONG effectivenesssound resultmessage waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER, FALSE, NULL + tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd -BattleScript_EffectFacade:: - jumpifstatus BS_ATTACKER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, BattleScript_FacadeDoubleDmg - goto BattleScript_EffectHit - -BattleScript_FacadeDoubleDmg:: - setbyte sDMG_MULTIPLIER, 2 - goto BattleScript_EffectHit - BattleScript_EffectFocusPunch:: attackcanceler jumpifnodamage BattleScript_HitFromAccCheck @@ -2262,13 +5543,11 @@ BattleScript_EffectFocusPunch:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectSmellingsalt:: - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_EffectHit - setmoveeffect MOVE_EFFECT_REMOVE_PARALYSIS | MOVE_EFFECT_CERTAIN - jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_SmellingsaltDoubleDmg - goto BattleScript_EffectHit -BattleScript_SmellingsaltDoubleDmg: - setbyte sDMG_MULTIPLIER, 2 +BattleScript_EffectSmellingsalt: +BattleScript_EffectWakeUpSlap: +BattleScript_EffectSparklingAria: + jumpifsubstituteblocks BattleScript_EffectHit + setmoveeffect MOVE_EFFECT_REMOVE_STATUS | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit BattleScript_EffectFollowMe:: @@ -2298,6 +5577,16 @@ BattleScript_EffectCharge:: setcharge attackanimation waitanimation +.if B_CHARGE_SPDEF_RAISE >= GEN_5 + setstatchanger STAT_SPDEF, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectChargeString + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectChargeString + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectChargeString: +.endif printstring STRINGID_PKMNCHARGINGPOWER waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -2306,6 +5595,7 @@ BattleScript_EffectTaunt:: attackcanceler attackstring ppreduce + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE settaunt BattleScript_ButItFailed attackanimation @@ -2329,7 +5619,7 @@ BattleScript_EffectTrick:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE tryswapitems BattleScript_ButItFailed attackanimation @@ -2348,8 +5638,19 @@ BattleScript_EffectRolePlay:: trycopyability BattleScript_ButItFailed attackanimation waitanimation +.if B_ABILITY_POP_UP == TRUE + setbyte sFIXED_ABILITY_POPUP, TRUE + showabilitypopup BS_ATTACKER + pause 60 + sethword sABILITY_OVERWRITE, 0 + updateabilitypopup BS_ATTACKER + pause 20 + destroyabilitypopup + pause 40 +.endif printstring STRINGID_PKMNCOPIEDFOE waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER goto BattleScript_MoveEnd BattleScript_EffectWish:: @@ -2361,7 +5662,7 @@ BattleScript_EffectWish:: waitanimation goto BattleScript_MoveEnd -BattleScript_EffectAssist:: +BattleScript_EffectAssist: attackcanceler attackstring assistattackselect BattleScript_ButItFailedPpReduce @@ -2371,22 +5672,26 @@ BattleScript_EffectAssist:: setbyte sB_ANIM_TARGETS_HIT, 0 jumptocalledmove TRUE -BattleScript_EffectIngrain:: +BattleScript_EffectIngrain: attackcanceler attackstring ppreduce - trysetroots BattleScript_ButItFailed + setuserstatus3 STATUS3_ROOTED, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNPLANTEDROOTS waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectSuperpower:: +BattleScript_EffectSuperpower: setmoveeffect MOVE_EFFECT_ATK_DEF_DOWN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit -BattleScript_EffectMagicCoat:: +BattleScript_EffectCloseCombat: + setmoveeffect MOVE_EFFECT_DEF_SPDEF_DOWN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + +BattleScript_EffectMagicCoat: attackcanceler trysetmagiccoat BattleScript_ButItFailedAtkStringPpReduce attackstring @@ -2408,10 +5713,6 @@ BattleScript_EffectRecycle:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectRevenge:: - doubledamagedealtifdamaged - goto BattleScript_EffectHit - BattleScript_EffectBrickBreak:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE @@ -2420,10 +5721,9 @@ BattleScript_EffectBrickBreak:: removelightscreenreflect critcalc damagecalc - typecalc - adjustnormaldamage + adjustdamage jumpifbyte CMP_EQUAL, sB_ANIM_TURN, 0, BattleScript_BrickBreakAnim - bicbyte gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE BattleScript_BrickBreakAnim:: attackanimation waitanimation @@ -2431,7 +5731,7 @@ BattleScript_BrickBreakAnim:: printstring STRINGID_THEWALLSHATTERED waitmessage B_WAIT_TIME_LONG BattleScript_BrickBreakDoHit:: - typecalc2 + typecalc effectivenesssound hitanimation BS_TARGET waitstate @@ -2442,7 +5742,7 @@ BattleScript_BrickBreakDoHit:: resultmessage waitmessage B_WAIT_TIME_LONG seteffectwithchance - tryfaintmon BS_TARGET, FALSE, NULL + tryfaintmon BS_TARGET goto BattleScript_MoveEnd BattleScript_EffectYawn:: @@ -2451,8 +5751,12 @@ BattleScript_EffectYawn:: ppreduce jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_PrintBankAbilityMadeIneffective jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_PrintBankAbilityMadeIneffective - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_PrintBankAbilityMadeIneffective + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects + jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifsubstituteblocks BattleScript_ButItFailed + jumpifsafeguard BattleScript_SafeguardProtected accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON jumpifcantmakeasleep BattleScript_ButItFailed setyawn BattleScript_ButItFailed @@ -2462,7 +5766,7 @@ BattleScript_EffectYawn:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_PrintBankAbilityMadeIneffective:: - copybyte sBATTLER, sBATTLER_WITH_ABILITY + copybyte sBATTLER, gBattlerAbility BattleScript_PrintAbilityMadeIneffective:: pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNSXMADEITINEFFECTIVE @@ -2482,16 +5786,12 @@ BattleScript_EffectEndeavor:: accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE typecalc jumpifmovehadnoeffect BattleScript_HitFromAtkAnimation - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE copyword gBattleMoveDamage, gHpDealt - adjustsetdamage + adjustdamage goto BattleScript_HitFromAtkAnimation -BattleScript_EffectEruption:: - scaledamagebyhealthratio - goto BattleScript_EffectHit - -BattleScript_EffectSkillSwap:: +BattleScript_EffectSkillSwap: attackcanceler attackstring ppreduce @@ -2499,8 +5799,19 @@ BattleScript_EffectSkillSwap:: tryswapabilities BattleScript_ButItFailed attackanimation waitanimation +.if B_ABILITY_POP_UP == TRUE + copybyte gBattlerAbility, gBattlerTarget + call BattleScript_AbilityPopUp + pause 20 + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp +.endif printstring STRINGID_PKMNSWAPPEDABILITIES waitmessage B_WAIT_TIME_LONG +.if B_SKILL_SWAP >= GEN_4 + switchinabilities BS_ATTACKER + switchinabilities BS_TARGET +.endif goto BattleScript_MoveEnd BattleScript_EffectImprison:: @@ -2514,7 +5825,7 @@ BattleScript_EffectImprison:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectRefresh:: +BattleScript_EffectRefresh: attackcanceler attackstring ppreduce @@ -2526,18 +5837,18 @@ BattleScript_EffectRefresh:: updatestatusicon BS_ATTACKER goto BattleScript_MoveEnd -BattleScript_EffectGrudge:: +BattleScript_EffectGrudge: attackcanceler attackstring ppreduce - trysetgrudge BattleScript_ButItFailed + setuserstatus3 STATUS3_GRUDGE, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNWANTSGRUDGE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectSnatch:: +BattleScript_EffectSnatch: attackcanceler trysetsnatch BattleScript_ButItFailedAtkStringPpReduce attackstring @@ -2549,22 +5860,34 @@ BattleScript_EffectSnatch:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectLowKick:: - attackcanceler - attackstring - ppreduce - weightdamagecalculation - accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE - goto BattleScript_HitFromCritCalc - BattleScript_EffectSecretPower:: getsecretpowereffect goto BattleScript_EffectHit -BattleScript_EffectDoubleEdge:: +BattleScript_EffectRecoil25: + setmoveeffect MOVE_EFFECT_RECOIL_25 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit + incrementgamestat GAME_STAT_USED_STRUGGLE + goto BattleScript_EffectHit + +BattleScript_EffectRecoil33:: setmoveeffect MOVE_EFFECT_RECOIL_33 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit +BattleScript_EffectRecoil33Status: + setmoveeffect MOVE_EFFECT_RECOIL_33_STATUS | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + +BattleScript_EffectRecoil50: + setmoveeffect MOVE_EFFECT_RECOIL_50 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + +BattleScript_EffectRecoilHP25: + setmoveeffect MOVE_EFFECT_RECOIL_HP_25 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit + incrementgamestat GAME_STAT_USED_STRUGGLE + goto BattleScript_EffectHit + BattleScript_EffectTeeterDance:: attackcanceler attackstring @@ -2575,11 +5898,11 @@ BattleScript_TeeterDanceLoop:: setmoveeffect MOVE_EFFECT_CONFUSION jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_TeeterDanceLoopIncrement jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_TeeterDanceOwnTempoPrevents - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_TeeterDanceSubstitutePrevents + jumpifsubstituteblocks BattleScript_TeeterDanceSubstitutePrevents jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_TeeterDanceAlreadyConfused jumpifhasnohp BS_TARGET, BattleScript_TeeterDanceLoopIncrement accuracycheck BattleScript_TeeterDanceMissed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_TeeterDanceSafeguardProtected + jumpifsafeguard BattleScript_TeeterDanceSafeguardProtected attackanimation waitanimation seteffectprimary @@ -2638,14 +5961,14 @@ BattleScript_EffectPoisonFang:: setmoveeffect MOVE_EFFECT_TOXIC goto BattleScript_EffectHit -BattleScript_EffectWeatherBall:: - setweatherballtype - goto BattleScript_EffectHit - BattleScript_EffectOverheat:: setmoveeffect MOVE_EFFECT_SP_ATK_TWO_DOWN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit +BattleScript_EffectHammerArm:: + setmoveeffect MOVE_EFFECT_SPD_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + BattleScript_EffectTickle:: attackcanceler attackstring @@ -2660,14 +5983,14 @@ BattleScript_TickleDoMoveAnim:: playstatchangeanimation BS_TARGET, BIT_ATK | BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE setstatchanger STAT_ATK, 1, TRUE - statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_TickleTryLowerDef + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TickleTryLowerDef jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_TickleTryLowerDef printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_TickleTryLowerDef:: playstatchangeanimation BS_TARGET, BIT_DEF, STAT_CHANGE_NEGATIVE setstatchanger STAT_DEF, 1, TRUE - statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_TickleEnd + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TickleEnd jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_TickleEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG @@ -2676,7 +5999,7 @@ BattleScript_TickleEnd:: BattleScript_CantLowerMultipleStats:: pause B_WAIT_TIME_SHORT - orbyte gMoveResultFlags, MOVE_RESULT_FAILED + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED printstring STRINGID_STATSWONTDECREASE2 waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -2693,13 +6016,13 @@ BattleScript_CosmicPowerDoMoveAnim:: setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, 0 setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CosmicPowerTrySpDef + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CosmicPowerTrySpDef jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CosmicPowerTrySpDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CosmicPowerTrySpDef:: setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CosmicPowerEnd + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CosmicPowerEnd jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CosmicPowerEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -2707,7 +6030,6 @@ BattleScript_CosmicPowerEnd:: goto BattleScript_MoveEnd BattleScript_EffectSkyUppercut:: - orword gHitMarker, HITMARKER_IGNORE_ON_AIR goto BattleScript_EffectHit BattleScript_EffectBulkUp:: @@ -2722,13 +6044,13 @@ BattleScript_BulkUpDoMoveAnim:: setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_BulkUpTryDef + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_BulkUpTryDef jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_BulkUpTryDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_BulkUpTryDef:: setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_BulkUpEnd + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_BulkUpEnd jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_BulkUpEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -2747,13 +6069,13 @@ BattleScript_CalmMindDoMoveAnim:: setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, 0 setstatchanger STAT_SPATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CalmMindTrySpDef + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CalmMindTrySpDef jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CalmMindTrySpDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CalmMindTrySpDef:: setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CalmMindEnd + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CalmMindEnd jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CalmMindEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -2762,7 +6084,7 @@ BattleScript_CalmMindEnd:: BattleScript_CantRaiseMultipleStats:: pause B_WAIT_TIME_SHORT - orbyte gMoveResultFlags, MOVE_RESULT_FAILED + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED printstring STRINGID_STATSWONTINCREASE2 waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -2779,13 +6101,13 @@ BattleScript_DragonDanceDoMoveAnim:: setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPEED, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_DragonDanceTrySpeed + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_DragonDanceTrySpeed jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DragonDanceTrySpeed printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_DragonDanceTrySpeed:: setstatchanger STAT_SPEED, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_DragonDanceEnd + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_DragonDanceEnd jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DragonDanceEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -2804,56 +6126,76 @@ BattleScript_EffectCamouflage:: goto BattleScript_MoveEnd BattleScript_FaintAttacker:: + tryillusionoff BS_ATTACKER playfaintcry BS_ATTACKER pause B_WAIT_TIME_LONG dofaintanimation BS_ATTACKER - cleareffectsonfaint BS_ATTACKER printstring STRINGID_ATTACKERFAINTED + cleareffectsonfaint BS_ATTACKER + tryactivatesoulheart + tryactivatereceiver BS_ATTACKER + trytrainerslidefirstdownmsg BS_ATTACKER return BattleScript_FaintTarget:: + tryillusionoff BS_TARGET playfaintcry BS_TARGET pause B_WAIT_TIME_LONG dofaintanimation BS_TARGET - cleareffectsonfaint BS_TARGET printstring STRINGID_TARGETFAINTED + cleareffectsonfaint BS_TARGET + tryactivatefellstinger BS_ATTACKER + tryactivatesoulheart + tryactivatereceiver BS_TARGET + tryactivatemoxie BS_ATTACKER @ and chilling neigh, as one ice rider + tryactivatebeastboost BS_ATTACKER + tryactivategrimneigh BS_ATTACKER @ and as one shadow rider + tryactivatebattlebond BS_ATTACKER + trytrainerslidefirstdownmsg BS_TARGET return BattleScript_GiveExp:: setbyte sGIVEEXP_STATE, 0 getexp BS_TARGET end2 - + BattleScript_HandleFaintedMon:: - atk24 BattleScript_HandleFaintedMonMultiple + setbyte sSHIFT_SWITCHED, 0 + checkteamslost BattleScript_LinkHandleFaintedMonMultiple jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_FaintedMonEnd - jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_FaintedMonTryChooseAnother - jumpifword CMP_NO_COMMON_BITS, gHitMarker, HITMARKER_x400000, BattleScript_FaintedMonTryChooseAnother + jumpifbattletype BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonTryChoose + jumpifword CMP_NO_COMMON_BITS, gHitMarker, HITMARKER_PLAYER_FAINTED, BattleScript_FaintedMonTryChoose +@ Yes/No for sending out a new Pokémon if one is defeated in a wild battle printstring STRINGID_USENEXTPKMN setbyte gBattleCommunication, 0 yesnobox - jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0, BattleScript_FaintedMonTryChooseAnother + jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0, BattleScript_FaintedMonTryChoose +@ Player said no, try to run jumpifplayerran BattleScript_FaintedMonEnd printstring STRINGID_CANTESCAPE2 -BattleScript_FaintedMonTryChooseAnother:: +BattleScript_FaintedMonTryChoose: openpartyscreen BS_FAINTED, BattleScript_FaintedMonEnd switchhandleorder BS_FAINTED, 2 - jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_FaintedMonChooseAnother - jumpifbattletype BATTLE_TYPE_LINK, BattleScript_FaintedMonChooseAnother - jumpifbattletype BATTLE_TYPE_RECORDED_LINK, BattleScript_FaintedMonChooseAnother - jumpifbattletype BATTLE_TYPE_FRONTIER, BattleScript_FaintedMonChooseAnother - jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonChooseAnother - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_x400000, BattleScript_FaintedMonChooseAnother - jumpifbyte CMP_EQUAL, sBATTLE_STYLE, OPTIONS_BATTLE_STYLE_SET, BattleScript_FaintedMonChooseAnother - jumpifcantswitch BS_PLAYER1, BattleScript_FaintedMonChooseAnother + jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_FaintedMonSendOutNew + jumpifbattletype BATTLE_TYPE_LINK, BattleScript_FaintedMonSendOutNew + jumpifbattletype BATTLE_TYPE_RECORDED_LINK, BattleScript_FaintedMonSendOutNew + jumpifbattletype BATTLE_TYPE_FRONTIER, BattleScript_FaintedMonSendOutNew + jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonSendOutNew + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_PLAYER_FAINTED, BattleScript_FaintedMonSendOutNew + jumpifbyte CMP_EQUAL, sBATTLE_STYLE, OPTIONS_BATTLE_STYLE_SET, BattleScript_FaintedMonSendOutNew + jumpifcantswitch BS_PLAYER1, BattleScript_FaintedMonSendOutNew + setbyte sILLUSION_NICK_HACK, 1 +@ Yes/No for sending out a new Pokémon when the opponent is switching printstring STRINGID_ENEMYABOUTTOSWITCHPKMN setbyte gBattleCommunication, 0 yesnobox - jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 1, BattleScript_FaintedMonChooseAnother + jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 1, BattleScript_FaintedMonSendOutNew +@ Player said yes, go to party screen (note optional flag, player may exit the menu instead) setatktoplayer0 - openpartyscreen BS_ATTACKER | PARTY_SCREEN_OPTIONAL, BattleScript_FaintedMonChooseAnother + openpartyscreen BS_ATTACKER | PARTY_SCREEN_OPTIONAL, BattleScript_FaintedMonSendOutNew switchhandleorder BS_ATTACKER, 2 - jumpifbyte CMP_EQUAL, gBattleCommunication, PARTY_SIZE, BattleScript_FaintedMonChooseAnother + jumpifbyte CMP_EQUAL, gBattleCommunication, PARTY_SIZE, BattleScript_FaintedMonSendOutNew +@ Switch Pokémon before opponent atknameinbuff1 resetintimidatetracebits BS_ATTACKER hpthresholds2 BS_ATTACKER @@ -2866,47 +6208,64 @@ BattleScript_FaintedMonTryChooseAnother:: getswitchedmondata BS_ATTACKER switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 printstring STRINGID_SWITCHINMON hidepartystatussummary BS_ATTACKER switchinanim BS_ATTACKER, 0 waitstate - switchineffects BS_ATTACKER - resetsentmonsvalue -BattleScript_FaintedMonChooseAnother:: + setbyte sSHIFT_SWITCHED, 1 +BattleScript_FaintedMonSendOutNew: drawpartystatussummary BS_FAINTED getswitchedmondata BS_FAINTED switchindataupdate BS_FAINTED hpthresholds BS_FAINTED + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 printstring STRINGID_SWITCHINMON hidepartystatussummary BS_FAINTED switchinanim BS_FAINTED, FALSE waitstate - various7 BS_ATTACKER + resetplayerfainted + trytrainerslidelastonmsg BS_FAINTED + jumpifbytenotequal sSHIFT_SWITCHED, sZero, BattleScript_FaintedMonShiftSwitched +BattleScript_FaintedMonSendOutNewEnd: switchineffects BS_FAINTED jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonEnd cancelallactions BattleScript_FaintedMonEnd:: end2 +BattleScript_FaintedMonShiftSwitched: + copybyte sSAVED_BATTLER, gBattlerTarget + switchineffects BS_ATTACKER + resetsentmonsvalue + copybyte gBattlerTarget, sSAVED_BATTLER + goto BattleScript_FaintedMonSendOutNewEnd -BattleScript_HandleFaintedMonMultiple:: - openpartyscreen BS_UNK_5, BattleScript_HandleFaintedMonMultipleStart -BattleScript_HandleFaintedMonMultipleStart:: +BattleScript_LinkHandleFaintedMonMultiple:: + openpartyscreen BS_FAINTED_LINK_MULTIPLE_1, BattleScript_LinkHandleFaintedMonMultipleStart +BattleScript_LinkHandleFaintedMonMultipleStart:: switchhandleorder BS_FAINTED, 0 - openpartyscreen BS_UNK_6, BattleScript_HandleFaintedMonMultipleEnd + openpartyscreen BS_FAINTED_LINK_MULTIPLE_2, BattleScript_LinkHandleFaintedMonMultipleEnd switchhandleorder BS_FAINTED, 0 -BattleScript_HandleFaintedMonLoop:: +BattleScript_LinkHandleFaintedMonLoop:: switchhandleorder BS_FAINTED, 3 drawpartystatussummary BS_FAINTED getswitchedmondata BS_FAINTED switchindataupdate BS_FAINTED hpthresholds BS_FAINTED + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 printstring STRINGID_SWITCHINMON hidepartystatussummary BS_FAINTED switchinanim BS_FAINTED, FALSE waitstate - switchineffects 5 - jumpifbytenotequal gBattlerFainted, gBattlersCount, BattleScript_HandleFaintedMonLoop -BattleScript_HandleFaintedMonMultipleEnd:: + switchineffects BS_FAINTED_LINK_MULTIPLE_1 + jumpifbytenotequal gBattlerFainted, gBattlersCount, BattleScript_LinkHandleFaintedMonLoop +BattleScript_LinkHandleFaintedMonMultipleEnd:: end2 BattleScript_LocalTrainerBattleWon:: @@ -2935,18 +6294,37 @@ BattleScript_PayDayMoneyAndPickUpItems:: end2 BattleScript_LocalBattleLost:: + jumpifbattletype BATTLE_TYPE_INGAME_PARTNER, BattleScript_LocalBattleLostPrintWhiteOut jumpifbattletype BATTLE_TYPE_DOME, BattleScript_CheckDomeDrew jumpifbattletype BATTLE_TYPE_FRONTIER, BattleScript_LocalBattleLostPrintTrainersWinText jumpifbattletype BATTLE_TYPE_TRAINER_HILL, BattleScript_LocalBattleLostPrintTrainersWinText jumpifbattletype BATTLE_TYPE_EREADER_TRAINER, BattleScript_LocalBattleLostEnd jumpifhalfword CMP_EQUAL, gTrainerBattleOpponent_A, TRAINER_SECRET_BASE, BattleScript_LocalBattleLostEnd BattleScript_LocalBattleLostPrintWhiteOut:: +.if B_WHITEOUT_MONEY >= GEN_4 + jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_LocalBattleLostEnd + printstring STRINGID_PLAYERWHITEOUT + waitmessage B_WAIT_TIME_LONG + getmoneyreward + printstring STRINGID_PLAYERWHITEOUT2 + waitmessage B_WAIT_TIME_LONG + end2 +BattleScript_LocalBattleLostEnd:: + printstring STRINGID_PLAYERLOSTTOENEMYTRAINER + waitmessage B_WAIT_TIME_LONG + getmoneyreward + printstring STRINGID_PLAYERPAIDPRIZEMONEY + waitmessage B_WAIT_TIME_LONG + end2 +.else printstring STRINGID_PLAYERWHITEOUT waitmessage B_WAIT_TIME_LONG printstring STRINGID_PLAYERWHITEOUT2 waitmessage B_WAIT_TIME_LONG BattleScript_LocalBattleLostEnd:: end2 +.endif + BattleScript_CheckDomeDrew:: jumpifbyte CMP_EQUAL, gBattleOutcome, B_OUTCOME_DREW, BattleScript_LocalBattleLostEnd_ BattleScript_LocalBattleLostPrintTrainersWinText:: @@ -3040,7 +6418,7 @@ BattleScript_FrontierTrainerBattleWon_End: end2 BattleScript_SmokeBallEscape:: - playanimation BS_ATTACKER, B_ANIM_SMOKEBALL_ESCAPE, NULL + playanimation BS_ATTACKER, B_ANIM_SMOKEBALL_ESCAPE printstring STRINGID_PKMNFLEDUSINGITS waitmessage B_WAIT_TIME_LONG end2 @@ -3080,7 +6458,6 @@ BattleScript_PrintFullBox:: BattleScript_ActionSwitch:: hpthresholds2 BS_ATTACKER printstring STRINGID_RETURNMON - setbyte sDMG_MULTIPLIER, 2 jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_PursuitSwitchDmgSetMultihit setmultihit 1 goto BattleScript_PursuitSwitchDmgLoop @@ -3103,12 +6480,18 @@ BattleScript_DoSwitchOut:: getswitchedmondata BS_ATTACKER switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 printstring STRINGID_SWITCHINMON hidepartystatussummary BS_ATTACKER switchinanim BS_ATTACKER, FALSE waitstate + jumpifcantreverttoprimal BattleScript_DoSwitchOut2 + call BattleScript_PrimalReversionRet +BattleScript_DoSwitchOut2: switchineffects BS_ATTACKER - moveendcase MOVEEND_IMMUNITY_ABILITIES + moveendcase MOVEEND_STATUS_IMMUNITY_ABILITIES moveendcase MOVEEND_MIRROR_MOVE end2 @@ -3118,8 +6501,7 @@ BattleScript_PursuitDmgOnSwitchOut:: ppreduce critcalc damagecalc - typecalc - adjustnormaldamage + adjustdamage attackanimation waitanimation effectivenesssound @@ -3131,8 +6513,8 @@ BattleScript_PursuitDmgOnSwitchOut:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET, FALSE, NULL - moveendfromto MOVEEND_ON_DAMAGE_ABILITIES, MOVEEND_CHOICE_MOVE + tryfaintmon BS_TARGET + moveendfromto MOVEEND_ABILITIES, MOVEEND_CHOICE_MOVE getbattlerfainted BS_TARGET jumpifbyte CMP_EQUAL, gBattleCommunication, FALSE, BattleScript_PursuitDmgOnSwitchOutRet setbyte sGIVEEXP_STATE, 0 @@ -3184,57 +6566,74 @@ BattleScript_LearnMoveReturn:: BattleScript_RainContinuesOrEnds:: printfromtable gRainContinuesStringIds waitmessage B_WAIT_TIME_LONG - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_RAIN_STOPPED, BattleScript_RainContinuesOrEndsEnd - playanimation BS_ATTACKER, B_ANIM_RAIN_CONTINUES, NULL -BattleScript_RainContinuesOrEndsEnd:: + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_RAIN_STOPPED, BattleScript_RainEnds + playanimation BS_ATTACKER, B_ANIM_RAIN_CONTINUES + end2 +BattleScript_RainEnds:: + call BattleScript_WeatherFormChanges end2 BattleScript_DamagingWeatherContinues:: printfromtable gSandStormHailContinuesStringIds waitmessage B_WAIT_TIME_LONG - playanimation2 BS_ATTACKER, sB_ANIM_ARG1, NULL + 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 printfromtable gSandStormHailDmgStringIds waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_x20 | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 | HITMARKER_GRUDGE effectivenesssound hitanimation BS_ATTACKER + goto BattleScript_DamagingWeatherHpChange +BattleScript_DamagingWeatherHeal: + call BattleScript_AbilityPopUp + printstring STRINGID_ICEBODYHPGAIN + waitmessage B_WAIT_TIME_LONG +BattleScript_DamagingWeatherHpChange: + orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER - tryfaintmon BS_ATTACKER, FALSE, NULL - atk24 BattleScript_DamagingWeatherLoopIncrement + 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_x20 | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 | HITMARKER_GRUDGE + bicword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE end2 BattleScript_SandStormHailEnds:: printfromtable gSandStormHailEndStringIds waitmessage B_WAIT_TIME_LONG + call BattleScript_WeatherFormChanges end2 BattleScript_SunlightContinues:: printstring STRINGID_SUNLIGHTSTRONG waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_SUN_CONTINUES, NULL + playanimation BS_ATTACKER, B_ANIM_SUN_CONTINUES end2 BattleScript_SunlightFaded:: printstring STRINGID_SUNLIGHTFADED waitmessage B_WAIT_TIME_LONG + call BattleScript_WeatherFormChanges end2 BattleScript_OverworldWeatherStarts:: printfromtable gWeatherStartsStringIds waitmessage B_WAIT_TIME_LONG - playanimation2 BS_ATTACKER, sB_ANIM_ARG1, NULL + playanimation_var BS_ATTACKER, sB_ANIM_ARG1 + end3 + +BattleScript_OverworldTerrain:: + printfromtable gTerrainStringIds + waitmessage B_WAIT_TIME_LONG + playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG end3 BattleScript_SideStatusWoreOff:: @@ -3242,6 +6641,75 @@ BattleScript_SideStatusWoreOff:: waitmessage B_WAIT_TIME_LONG end2 +BattleScript_SideStatusWoreOffReturn:: + printstring STRINGID_PKMNSXWOREOFF + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_LuckyChantEnds:: + printstring STRINGID_LUCKYCHANTENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_TailwindEnds:: + printstring STRINGID_TAILWINDENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_TrickRoomEnds:: + printstring STRINGID_TRICKROOMENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_WonderRoomEnds:: + printstring STRINGID_WONDERROOMENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_MagicRoomEnds:: + printstring STRINGID_MAGICROOMENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_ElectricTerrainEnds:: + printstring STRINGID_ELECTRICTERRAINENDS + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + end2 + +BattleScript_MistyTerrainEnds:: + printstring STRINGID_MISTYTERRAINENDS + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + end2 + +BattleScript_GrassyTerrainEnds:: + printstring STRINGID_GRASSYTERRAINENDS + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + end2 + +BattleScript_PsychicTerrainEnds:: + printstring STRINGID_PSYCHICTERRAINENDS + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + end2 + +BattleScript_MudSportEnds:: + printstring STRINGID_MUDSPORTENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_WaterSportEnds:: + printstring STRINGID_WATERSPORTENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_GravityEnds:: + printstring STRINGID_GRAVITYENDS + waitmessage B_WAIT_TIME_LONG + end2 + BattleScript_SafeguardProtected:: pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNUSEDSAFEGUARD @@ -3256,25 +6724,31 @@ BattleScript_SafeguardEnds:: BattleScript_LeechSeedTurnDrain:: playanimation BS_ATTACKER, B_ANIM_LEECH_SEED_DRAIN, sB_ANIM_ARG1 - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER copyword gBattleMoveDamage, gHpDealt jumpifability BS_ATTACKER, ABILITY_LIQUID_OOZE, BattleScript_LeechSeedTurnPrintLiquidOoze - manipulatedamage DMG_CHANGE_SIGN setbyte cMULTISTRING_CHOOSER, B_MSG_LEECH_SEED_DRAIN + jumpifstatus3 BS_TARGET, STATUS3_HEAL_BLOCK, BattleScript_LeechSeedHealBlock + manipulatedamage DMG_BIG_ROOT goto BattleScript_LeechSeedTurnPrintAndUpdateHp BattleScript_LeechSeedTurnPrintLiquidOoze:: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp setbyte cMULTISTRING_CHOOSER, B_MSG_LEECH_SEED_OOZE BattleScript_LeechSeedTurnPrintAndUpdateHp:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_TARGET datahpupdate BS_TARGET printfromtable gLeechSeedStringIds waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER, FALSE, NULL - tryfaintmon BS_TARGET, FALSE, NULL + tryfaintmon BS_ATTACKER + tryfaintmon BS_TARGET end2 +BattleScript_LeechSeedHealBlock: + setword gBattleMoveDamage, 0 + goto BattleScript_LeechSeedTurnPrintAndUpdateHp BattleScript_BideStoringEnergy:: printstring STRINGID_PKMNSTORINGENERGY @@ -3289,9 +6763,9 @@ BattleScript_BideAttack:: waitmessage B_WAIT_TIME_LONG accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE copyword gBattleMoveDamage, sBIDE_DMG - adjustsetdamage + adjustdamage setbyte sB_ANIM_TURN, 1 attackanimation waitanimation @@ -3302,7 +6776,7 @@ BattleScript_BideAttack:: datahpupdate BS_TARGET resultmessage waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET, FALSE, NULL + tryfaintmon BS_TARGET goto BattleScript_MoveEnd BattleScript_BideNoEnergyToAttack:: @@ -3313,24 +6787,98 @@ BattleScript_BideNoEnergyToAttack:: waitmessage B_WAIT_TIME_LONG goto BattleScript_ButItFailed -BattleScript_SuccessForceOut:: - attackanimation - waitanimation - switchoutabilities BS_TARGET - returntoball BS_TARGET - waitstate - jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_TrainerBattleForceOut - setoutcomeonteleport BS_ATTACKER - finishaction - -BattleScript_TrainerBattleForceOut:: +BattleScript_RoarSuccessSwitch:: + call BattleScript_RoarSuccessRet getswitchedmondata BS_TARGET switchindataupdate BS_TARGET + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 switchinanim BS_TARGET, FALSE waitstate printstring STRINGID_PKMNWASDRAGGEDOUT switchineffects BS_TARGET + jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_RED_CARD, BattleScript_RoarSuccessSwitch_Ret + setbyte sSWITCH_CASE, B_SWITCH_NORMAL goto BattleScript_MoveEnd +BattleScript_RoarSuccessSwitch_Ret: + swapattackerwithtarget @ continuation of RedCardActivates + restoretarget + removeitem BS_TARGET + setbyte sSWITCH_CASE, B_SWITCH_NORMAL + return + +BattleScript_RoarSuccessEndBattle:: + call BattleScript_RoarSuccessRet + setbyte sSWITCH_CASE, B_SWITCH_NORMAL + setoutcomeonteleport BS_ATTACKER + finishaction + +BattleScript_RoarSuccessRet: + jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_HIT, BattleScript_RoarSuccessRet_Ret + jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_RED_CARD, BattleScript_RoarSuccessRet_Ret + attackanimation + waitanimation +BattleScript_RoarSuccessRet_Ret: + switchoutabilities BS_TARGET + returntoball BS_TARGET + waitstate + return + +BattleScript_WeaknessPolicy:: + copybyte sBATTLER, gBattlerTarget + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_WeaknessPolicyAtk + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_WeaknessPolicyEnd +BattleScript_WeaknessPolicyAtk: + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_BY_TWO + setstatchanger STAT_ATK, 2, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeaknessPolicySpAtk + printstring STRINGID_USINGITEMSTATOFPKMNROSE + waitmessage B_WAIT_TIME_LONG +BattleScript_WeaknessPolicySpAtk: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicyRemoveItem + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeaknessPolicyRemoveItem + printstring STRINGID_USINGITEMSTATOFPKMNROSE + waitmessage B_WAIT_TIME_LONG +BattleScript_WeaknessPolicyRemoveItem: + removeitem BS_TARGET +BattleScript_WeaknessPolicyEnd: + return + +BattleScript_TargetItemStatRaise:: + copybyte sBATTLER, gBattlerTarget + statbuffchange 0, BattleScript_TargetItemStatRaiseRemoveItemRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_TargetItemStatRaiseRemoveItemRet + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_USINGITEMSTATOFPKMNROSE + waitmessage B_WAIT_TIME_LONG + removeitem BS_TARGET +BattleScript_TargetItemStatRaiseRemoveItemRet: + return + +BattleScript_AttackerItemStatRaise:: + copybyte sBATTLER, gBattlerAttacker + statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_AttackerItemStatRaiseRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AttackerItemStatRaiseRet + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_USINGITEMSTATOFPKMNROSE + waitmessage B_WAIT_TIME_LONG + removeitem BS_ATTACKER +BattleScript_AttackerItemStatRaiseRet: + return BattleScript_MistProtected:: pause B_WAIT_TIME_SHORT @@ -3371,71 +6919,183 @@ BattleScript_EncoredNoMore:: BattleScript_DestinyBondTakesLife:: printstring STRINGID_PKMNTOOKFOE waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER - tryfaintmon BS_ATTACKER, FALSE, NULL + tryfaintmon BS_ATTACKER return -BattleScript_SpikesOnAttacker:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 +BattleScript_DmgHazardsOnAttacker:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER - call BattleScript_PrintHurtBySpikes - tryfaintmon BS_ATTACKER, FALSE, NULL - tryfaintmon BS_ATTACKER, TRUE, BattleScript_SpikesOnAttackerFainted + call BattleScript_PrintHurtByDmgHazards + tryfaintmon BS_ATTACKER + tryfaintmon_spikes BS_ATTACKER, BattleScript_DmgHazardsOnAttackerFainted return -BattleScript_SpikesOnAttackerFainted:: +BattleScript_DmgHazardsOnAttackerFainted:: setbyte sGIVEEXP_STATE, 0 getexp BS_ATTACKER moveendall goto BattleScript_HandleFaintedMon -BattleScript_SpikesOnTarget:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 +BattleScript_DmgHazardsOnTarget:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_TARGET datahpupdate BS_TARGET - call BattleScript_PrintHurtBySpikes - tryfaintmon BS_TARGET, FALSE, NULL - tryfaintmon BS_TARGET, TRUE, BattleScript_SpikesOnTargetFainted + call BattleScript_PrintHurtByDmgHazards + tryfaintmon BS_TARGET + tryfaintmon_spikes BS_TARGET, BattleScript_DmgHazardsOnTargetFainted return -BattleScript_SpikesOnTargetFainted:: +BattleScript_DmgHazardsOnTargetFainted:: setbyte sGIVEEXP_STATE, 0 getexp BS_TARGET moveendall goto BattleScript_HandleFaintedMon -BattleScript_SpikesOnFaintedBattler:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 +BattleScript_DmgHazardsOnFaintedBattler:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_FAINTED datahpupdate BS_FAINTED - call BattleScript_PrintHurtBySpikes - tryfaintmon BS_FAINTED, FALSE, NULL - tryfaintmon BS_FAINTED, TRUE, BattleScript_SpikesOnFaintedBattlerFainted + call BattleScript_PrintHurtByDmgHazards + tryfaintmon BS_FAINTED + tryfaintmon_spikes BS_FAINTED, BattleScript_DmgHazardsOnFaintedBattlerFainted return -BattleScript_SpikesOnFaintedBattlerFainted:: +BattleScript_DmgHazardsOnFaintedBattlerFainted:: setbyte sGIVEEXP_STATE, 0 getexp BS_FAINTED moveendall goto BattleScript_HandleFaintedMon -BattleScript_PrintHurtBySpikes:: - printstring STRINGID_PKMNHURTBYSPIKES +BattleScript_PrintHurtByDmgHazards:: + printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG return +BattleScript_ToxicSpikesAbsorbed:: + printstring STRINGID_TOXICSPIKESABSORBED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ToxicSpikesPoisoned:: + printstring STRINGID_TOXICSPIKESPOISONED + waitmessage B_WAIT_TIME_LONG + statusanimation BS_SCRIPTING + updatestatusicon BS_SCRIPTING + waitstate + return + +BattleScript_StickyWebOnSwitchIn:: + savetarget + copybyte gBattlerTarget, sBATTLER + setbyte sSTICKY_WEB_STAT_DROP, 1 + printstring STRINGID_STICKYWEBSWITCHIN + waitmessage B_WAIT_TIME_LONG + jumpifability BS_TARGET, ABILITY_MIRROR_ARMOR, BattleScript_MirrorArmorReflectStickyWeb + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StickyWebOnSwitchInEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_StickyWebOnSwitchInStatAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StickyWebOnSwitchInEnd + pause B_WAIT_TIME_SHORT + goto BattleScript_StickyWebOnSwitchInPrintStatMsg +BattleScript_StickyWebOnSwitchInStatAnim: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_StickyWebOnSwitchInPrintStatMsg: + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_StickyWebOnSwitchInEnd: + restoretarget + return + BattleScript_PerishSongTakesLife:: printstring STRINGID_PKMNPERISHCOUNTFELL waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER - tryfaintmon BS_ATTACKER, FALSE, NULL + tryfaintmon BS_ATTACKER end2 +BattleScript_PerishBodyActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSWILLPERISHIN3TURNS + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + return + +BattleScript_GulpMissileGorging:: + call BattleScript_AbilityPopUp + playanimation BS_ATTACKER, B_ANIM_GULP_MISSILE + waitanimation + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + effectivenesssound + hitanimation BS_ATTACKER + waitstate + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_GulpMissileNoDmgGorging + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + tryfaintmon BS_ATTACKER + getbattlerfainted BS_ATTACKER + jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_GulpMissileNoSecondEffectGorging +BattleScript_GulpMissileNoDmgGorging: + handleformchange BS_TARGET, 0 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE + waitanimation + swapattackerwithtarget + setmoveeffect MOVE_EFFECT_PARALYSIS + seteffectprimary + swapattackerwithtarget + return +BattleScript_GulpMissileNoSecondEffectGorging: + handleformchange BS_TARGET, 0 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE + waitanimation + return + +BattleScript_GulpMissileGulping:: + call BattleScript_AbilityPopUp + playanimation BS_ATTACKER, B_ANIM_GULP_MISSILE + waitanimation + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + effectivenesssound + hitanimation BS_ATTACKER + waitstate + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_GulpMissileNoDmgGulping + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + tryfaintmon BS_ATTACKER + getbattlerfainted BS_ATTACKER + jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_GulpMissileNoSecondEffectGulping + jumpifability BS_ATTACKER, ABILITY_CLEAR_BODY, BattleScript_GulpMissileNoSecondEffectGulping + jumpifability BS_ATTACKER, ABILITY_FULL_METAL_BODY, BattleScript_GulpMissileNoSecondEffectGulping + jumpifability BS_ATTACKER, ABILITY_WHITE_SMOKE, BattleScript_GulpMissileNoSecondEffectGulping + jumpifflowerveilattacker BattleScript_GulpMissileNoSecondEffectGulping +BattleScript_GulpMissileNoDmgGulping: + handleformchange BS_TARGET, 0 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE + waitanimation + swapattackerwithtarget @ to make gStatDownStringIds down below print the right battler + setstatchanger STAT_DEF, 1, TRUE + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_GulpMissileGorgingTargetDefenseCantGoLower + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG + swapattackerwithtarget @ restore the battlers, just in case + return +BattleScript_GulpMissileNoSecondEffectGulping: + handleformchange BS_TARGET, 0 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE + waitanimation + return +BattleScript_GulpMissileGorgingTargetDefenseCantGoLower: + printstring STRINGID_STATSWONTDECREASE + waitmessage B_WAIT_TIME_LONG + return + BattleScript_PerishSongCountGoesDown:: printstring STRINGID_PKMNPERISHCOUNTFELL waitmessage B_WAIT_TIME_LONG @@ -3451,27 +7111,27 @@ BattleScript_AllStatsUpAtk:: setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_AllStatsUpDef + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUpDef:: setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_AllStatsUpSpeed + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpeed printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUpSpeed:: setstatchanger STAT_SPEED, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_AllStatsUpSpAtk + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpAtk printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUpSpAtk:: setstatchanger STAT_SPATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_AllStatsUpSpDef + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUpSpDef:: setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_AllStatsUpRet + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpRet printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUpRet:: @@ -3497,6 +7157,21 @@ BattleScript_SpikesFree:: waitmessage B_WAIT_TIME_LONG return +BattleScript_ToxicSpikesFree:: + printstring STRINGID_PKMNBLEWAWAYTOXICSPIKES + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StickyWebFree:: + printstring STRINGID_PKMNBLEWAWAYSTICKYWEB + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StealthRockFree:: + printstring STRINGID_PKMNBLEWAWAYSTEALTHROCK + waitmessage B_WAIT_TIME_LONG + return + BattleScript_MonTookFutureAttack:: printstring STRINGID_PKMNTOOKATTACK waitmessage B_WAIT_TIME_LONG @@ -3506,35 +7181,39 @@ BattleScript_MonTookFutureAttack:: BattleScript_CheckDoomDesireMiss:: accuracycheck BattleScript_FutureAttackMiss, MOVE_DOOM_DESIRE BattleScript_FutureAttackAnimate:: - adjustnormaldamage2 + critcalc + damagecalc + adjustdamage + jumpifmovehadnoeffect BattleScript_DoFutureAttackResult jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_FUTURE_SIGHT, BattleScript_FutureHitAnimDoomDesire - playanimation BS_ATTACKER, B_ANIM_FUTURE_SIGHT_HIT, NULL + playanimation BS_ATTACKER, B_ANIM_FUTURE_SIGHT_HIT goto BattleScript_DoFutureAttackHit BattleScript_FutureHitAnimDoomDesire:: - playanimation BS_ATTACKER, B_ANIM_DOOM_DESIRE_HIT, NULL + playanimation BS_ATTACKER, B_ANIM_DOOM_DESIRE_HIT BattleScript_DoFutureAttackHit:: effectivenesssound hitanimation BS_TARGET waitstate healthbarupdate BS_TARGET datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG +BattleScript_DoFutureAttackResult: resultmessage waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET, FALSE, NULL - atk24 BattleScript_FutureAttackEnd + tryfaintmon BS_TARGET + checkteamslost BattleScript_FutureAttackEnd BattleScript_FutureAttackEnd:: moveendcase MOVEEND_RAGE moveendfromto MOVEEND_ITEM_EFFECTS_ALL, MOVEEND_UPDATE_LAST_MOVES setbyte gMoveResultFlags, 0 end2 - BattleScript_FutureAttackMiss:: pause B_WAIT_TIME_SHORT - setbyte gMoveResultFlags, 0 - orbyte gMoveResultFlags, MOVE_RESULT_FAILED + sethword gMoveResultFlags, MOVE_RESULT_FAILED resultmessage waitmessage B_WAIT_TIME_LONG - setbyte gMoveResultFlags, 0 + sethword gMoveResultFlags, 0 end2 BattleScript_NoMovesLeft:: @@ -3578,9 +7257,77 @@ BattleScript_SelectingNotAllowedMoveTauntInPalace:: printstring STRINGID_PKMNCANTUSEMOVETAUNT goto BattleScript_SelectingUnusableMoveInPalace +BattleScript_SelectingNotAllowedMoveThroatChop:: + printselectionstring STRINGID_PKMNCANTUSEMOVETHROATCHOP + endselectionscript + +BattleScript_MoveUsedIsThroatChopPrevented:: + printstring STRINGID_PKMNCANTUSEMOVETHROATCHOP + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_SelectingNotAllowedMoveThroatChopInPalace:: + printstring STRINGID_PKMNCANTUSEMOVETHROATCHOP + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_ThroatChopEndTurn:: + printstring STRINGID_THROATCHOPENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_SlowStartEnds:: + pause 5 + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + printstring STRINGID_SLOWSTARTEND + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_SelectingNotAllowedMoveGravity:: + printselectionstring STRINGID_GRAVITYPREVENTSUSAGE + endselectionscript + +BattleScript_SelectingNotAllowedStuffCheeks:: + printselectionstring STRINGID_STUFFCHEEKSCANTSELECT + endselectionscript + +BattleScript_SelectingNotAllowedStuffCheeksInPalace:: + printstring STRINGID_STUFFCHEEKSCANTSELECT + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedBelch:: + printselectionstring STRINGID_BELCHCANTSELECT + endselectionscript + +BattleScript_SelectingNotAllowedBelchInPalace:: + printstring STRINGID_BELCHCANTSELECT + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_MoveUsedGravityPrevents:: + printstring STRINGID_GRAVITYPREVENTSUSAGE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_SelectingNotAllowedMoveGravityInPalace:: + printstring STRINGID_GRAVITYPREVENTSUSAGE + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedMoveHealBlock:: + printselectionstring STRINGID_HEALBLOCKPREVENTSUSAGE + endselectionscript + +BattleScript_MoveUsedHealBlockPrevents:: + printstring STRINGID_HEALBLOCKPREVENTSUSAGE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_SelectingNotAllowedMoveHealBlockInPalace:: + printstring STRINGID_HEALBLOCKPREVENTSUSAGE + goto BattleScript_SelectingUnusableMoveInPalace + BattleScript_WishComesTrue:: trywish 1, BattleScript_WishButFullHp - playanimation BS_TARGET, B_ANIM_WISH_HEAL, NULL + playanimation BS_TARGET, B_ANIM_WISH_HEAL printstring STRINGID_PKMNWISHCAMETRUE waitmessage B_WAIT_TIME_LONG orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE @@ -3599,14 +7346,20 @@ BattleScript_WishButFullHp:: end2 BattleScript_IngrainTurnHeal:: - playanimation BS_ATTACKER, B_ANIM_INGRAIN_HEAL, NULL + playanimation BS_ATTACKER, B_ANIM_INGRAIN_HEAL printstring STRINGID_PKMNABSORBEDNUTRIENTS +BattleScript_TurnHeal: waitmessage B_WAIT_TIME_LONG orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER end2 +BattleScript_AquaRingHeal:: + playanimation BS_ATTACKER, B_ANIM_AQUA_RING_HEAL + printstring STRINGID_AQUARINGHEAL + goto BattleScript_TurnHeal + BattleScript_PrintMonIsRooted:: pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNANCHOREDITSELF @@ -3618,22 +7371,61 @@ BattleScript_AtkDefDown:: playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS playstatchangeanimation BS_ATTACKER, BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE setstatchanger STAT_ATK, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_BUFF_ALLOW_PTR, BattleScript_AtkDefDown_TryDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDown_TryDef + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownTryDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDownTryDef printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG -BattleScript_AtkDefDown_TryDef:: +BattleScript_AtkDefDownTryDef: playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE setstatchanger STAT_DEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_BUFF_ALLOW_PTR, BattleScript_AtkDefDown_End - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDown_End + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDownRet printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG -BattleScript_AtkDefDown_End:: +BattleScript_AtkDefDownRet: + return + +BattleScript_DefSpDefDown:: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS + playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE + setstatchanger STAT_DEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_DefSpDefDownTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_DefSpDefDownTrySpDef + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_DefSpDefDownTrySpDef:: + playstatchangeanimation BS_ATTACKER, BIT_SPDEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE + setstatchanger STAT_SPDEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_DefSpDefDownRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_DefSpDefDownRet + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_DefSpDefDownRet:: + return + +BattleScript_DefDownSpeedUp:: + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_DefDownSpeedUpTryDef + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_DefDownSpeedUpRet +BattleScript_DefDownSpeedUpTryDef:: + playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT + setstatchanger STAT_DEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_DefDownSpeedUpTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DefDownSpeedUpTrySpeed + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_DefDownSpeedUpTrySpeed: + playstatchangeanimation BS_ATTACKER, BIT_SPEED, 0 + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_DefDownSpeedUpRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DefDownSpeedUpRet + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_DefDownSpeedUpRet:: return BattleScript_KnockedOff:: - playanimation BS_TARGET, B_ANIM_ITEM_KNOCKOFF, NULL + playanimation BS_TARGET, B_ANIM_ITEM_KNOCKOFF printstring STRINGID_PKMNKNOCKEDOFF waitmessage B_WAIT_TIME_LONG return @@ -3660,20 +7452,32 @@ BattleScript_MagicCoatBounce:: attackstring ppreduce pause B_WAIT_TIME_SHORT - printstring STRINGID_PKMNMOVEBOUNCED + printfromtable gMagicCoatBounceStringIds waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_x800000 + orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_ALLOW_NO_PP + bicword gHitMarker, HITMARKER_NO_ATTACKSTRING setmagiccoattarget BS_ATTACKER return +BattleScript_MagicCoatBouncePrankster:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + printfromtable gMagicCoatBounceStringIds + waitmessage B_WAIT_TIME_LONG + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + goto BattleScript_MoveEnd + BattleScript_SnatchedMove:: attackstring ppreduce snatchsetbattlers - playanimation BS_TARGET, B_ANIM_SNATCH_MOVE, NULL + playanimation BS_TARGET, B_ANIM_SNATCH_MOVE printstring STRINGID_PKMNSNATCHEDMOVE waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_x800000 + orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_ALLOW_NO_PP swapattackerwithtarget return @@ -3682,6 +7486,14 @@ BattleScript_EnduredMsg:: waitmessage B_WAIT_TIME_LONG return +BattleScript_SturdiedMsg:: + copybyte gBattlerAbility, gBattlerTarget + pause B_WAIT_TIME_SHORTEST + call BattleScript_AbilityPopUp + printstring STRINGID_ENDUREDSTURDY + waitmessage B_WAIT_TIME_LONG + return + BattleScript_OneHitKOMsg:: printstring STRINGID_ONEHITKO waitmessage B_WAIT_TIME_LONG @@ -3691,21 +7503,190 @@ 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_BUFF_ALLOW_PTR, BattleScript_SAtkDown2End + 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 + return + BattleScript_FocusPunchSetUp:: printstring STRINGID_EMPTYSTRING3 waitmessage 1 - playanimation BS_ATTACKER, B_ANIM_FOCUS_PUNCH_SETUP, NULL + playanimation BS_ATTACKER, B_ANIM_FOCUS_PUNCH_SETUP printstring STRINGID_PKMNTIGHTENINGFOCUS waitmessage B_WAIT_TIME_LONG end2 +BattleScript_MegaEvolution:: + printstring STRINGID_MEGAEVOREACTING + waitmessage B_WAIT_TIME_LONG + setbyte gIsCriticalHit, 0 + handlemegaevo BS_ATTACKER, 0 + handlemegaevo BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_MEGA_EVOLUTION + waitanimation + handlemegaevo BS_ATTACKER, 2 + printstring STRINGID_MEGAEVOEVOLVED + waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER + end2 + +BattleScript_WishMegaEvolution:: + printstring STRINGID_FERVENTWISHREACHED + waitmessage B_WAIT_TIME_LONG + setbyte gIsCriticalHit, 0 + handlemegaevo BS_ATTACKER, 0 + handlemegaevo BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_MEGA_EVOLUTION + waitanimation + handlemegaevo BS_ATTACKER, 2 + printstring STRINGID_MEGAEVOEVOLVED + waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER + end2 + +BattleScript_PrimalReversion:: + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + setbyte gIsCriticalHit, 0 + handleprimalreversion BS_ATTACKER, 0 + handleprimalreversion BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_PRIMAL_REVERSION + waitanimation + handleprimalreversion BS_ATTACKER, 2 + printstring STRINGID_PKMNREVERTEDTOPRIMAL + waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER + end2 + +BattleScript_PrimalReversionRet:: + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + setbyte gIsCriticalHit, 0 + handleprimalreversion BS_ATTACKER, 0 + handleprimalreversion BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_PRIMAL_REVERSION + waitanimation + handleprimalreversion BS_ATTACKER, 2 + printstring STRINGID_PKMNREVERTEDTOPRIMAL + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AttackerFormChange:: + pause 5 + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 +BattleScript_AttackerFormChangeNoPopup:: + handleformchange BS_ATTACKER, 0 + handleformchange BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE + waitanimation + handleformchange BS_ATTACKER, 2 + return + +BattleScript_AttackerFormChangeEnd3:: + call BattleScript_AttackerFormChange + end3 + +BattleScript_AttackerFormChangeEnd3NoPopup:: + call BattleScript_AttackerFormChangeNoPopup + +BattleScript_AttackerFormChangeMoveEffect:: + waitmessage 1 + handleformchange BS_ATTACKER, 0 + handleformchange BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE + waitanimation + copybyte sBATTLER, gBattlerAttacker + printstring STRINGID_PKMNTRANSFORMED + waitmessage B_WAIT_TIME_LONG + handleformchange BS_ATTACKER, 2 + end3 + +BattleScript_BallFetch:: + call BattleScript_AbilityPopUp + printstring STRINGID_FETCHEDPOKEBALL + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_TargetFormChange:: + pause 5 + copybyte gBattlerAbility, gBattlerTarget + call BattleScript_AbilityPopUp + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + handleformchange BS_TARGET, 0 + handleformchange BS_TARGET, 1 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE + waitanimation + handleformchange BS_TARGET, 2 + return + +BattleScript_IllusionOff:: + spriteignore0hp TRUE + playanimation BS_TARGET, B_ANIM_ILLUSION_OFF + waitanimation + updatenick BS_TARGET + waitstate + spriteignore0hp FALSE + printstring STRINGID_ILLUSIONWOREOFF + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_CottonDownActivates:: + setbyte sFIXED_ABILITY_POPUP, TRUE + call BattleScript_AbilityPopUp + copybyte gEffectBattler, gBattlerTarget + savetarget + setbyte gBattlerTarget, 0 +BattleScript_CottonDownLoop: + getbattlerfainted BS_TARGET + jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_CottonDownLoopIncrement + setstatchanger STAT_SPEED, 1, TRUE + jumpifbyteequal gBattlerTarget, gEffectBattler, BattleScript_CottonDownLoopIncrement + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_CottonDownTargetSpeedCantGoLower + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_CottonDownLoopIncrement +BattleScript_CottonDownTargetSpeedCantGoLower: + printstring STRINGID_STATSWONTDECREASE + waitmessage B_WAIT_TIME_LONG +BattleScript_CottonDownLoopIncrement: + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_CottonDownLoop +BattleScript_CottonDownReturn: + restoretarget + destroyabilitypopup + return + +BattleScript_AnticipationActivates:: + pause 5 + call BattleScript_AbilityPopUp + printstring STRINGID_ANTICIPATIONACTIVATES + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AftermathDmg:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_AFTERMATHDMG + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER + return + BattleScript_MoveUsedIsAsleep:: printstring STRINGID_PKMNFASTASLEEP waitmessage B_WAIT_TIME_LONG @@ -3713,7 +7694,7 @@ BattleScript_MoveUsedIsAsleep:: goto BattleScript_MoveEnd BattleScript_MoveUsedWokeUp:: - bicword gHitMarker, HITMARKER_x10 + bicword gHitMarker, HITMARKER_WAKE_UP_CLEAR printfromtable gWokeUpStringIds waitmessage B_WAIT_TIME_LONG updatestatusicon BS_ATTACKER @@ -3730,13 +7711,23 @@ BattleScript_PoisonTurnDmg:: waitmessage B_WAIT_TIME_LONG BattleScript_DoStatusTurnDmg:: statusanimation BS_ATTACKER -BattleScript_DoTurnDmg:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 +BattleScript_DoTurnDmg: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + tryfaintmon BS_ATTACKER + checkteamslost BattleScript_DoTurnDmgEnd +BattleScript_DoTurnDmgEnd: + end2 + +BattleScript_PoisonHealActivates:: + printstring STRINGID_POISONHEALHPUP + waitmessage B_WAIT_TIME_LONG + recordability BS_ATTACKER + statusanimation BS_ATTACKER + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER - tryfaintmon BS_ATTACKER, FALSE, NULL - atk24 BattleScript_DoTurnDmgEnd -BattleScript_DoTurnDmgEnd:: end2 BattleScript_BurnTurnDmg:: @@ -3769,10 +7760,43 @@ BattleScript_MoveUsedIsParalyzed:: cancelmultiturnmoves BS_ATTACKER goto BattleScript_MoveEnd +BattleScript_PowderMoveNoEffect:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_PowderMoveNoEffectPrint + jumpifability BS_TARGET, ABILITY_OVERCOAT, BattleScript_PowderMoveNoEffectOvercoat + printstring STRINGID_SAFETYGOGGLESPROTECTED + goto BattleScript_PowderMoveNoEffectWaitMsg +BattleScript_PowderMoveNoEffectOvercoat: + call BattleScript_AbilityPopUp +BattleScript_PowderMoveNoEffectPrint: + printstring STRINGID_ITDOESNTAFFECT +BattleScript_PowderMoveNoEffectWaitMsg: + waitmessage B_WAIT_TIME_LONG + cancelmultiturnmoves BS_ATTACKER + sethword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + BattleScript_MoveUsedFlinched:: printstring STRINGID_PKMNFLINCHED waitmessage B_WAIT_TIME_LONG + jumpifability BS_ATTACKER ABILITY_STEADFAST BattleScript_TryActivateSteadFast +BattleScript_MoveUsedFlinchedEnd: goto BattleScript_MoveEnd +BattleScript_TryActivateSteadFast: + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_MoveUsedFlinchedEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_MoveUsedFlinchedEnd + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + setbyte gBattleCommunication STAT_SPEED + stattextbuffer BS_ATTACKER + printstring STRINGID_ATTACKERABILITYSTATRAISE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveUsedFlinchedEnd BattleScript_PrintUproarOverTurns:: printfromtable gUproarOverTurnStringIds @@ -3792,22 +7816,41 @@ BattleScript_MoveUsedIsConfused:: jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, FALSE, BattleScript_MoveUsedIsConfusedRet BattleScript_DoSelfConfusionDmg:: cancelmultiturnmoves BS_ATTACKER - adjustnormaldamage2 + adjustdamage printstring STRINGID_ITHURTCONFUSION waitmessage B_WAIT_TIME_LONG effectivenesssound hitanimation BS_ATTACKER waitstate - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER resultmessage waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER, FALSE, NULL + tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd BattleScript_MoveUsedIsConfusedRet:: return +BattleScript_MoveUsedPowder:: + bicword gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + cancelmultiturnmoves BS_ATTACKER + status2animation BS_ATTACKER, STATUS2_POWDER + waitanimation + effectivenesssound + hitanimation BS_ATTACKER + waitstate + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_POWDEREXPLODES + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER + goto BattleScript_MoveEnd + BattleScript_MoveUsedIsConfusedNoMore:: printstring STRINGID_PKMNHEALEDCONFUSION waitmessage B_WAIT_TIME_LONG @@ -3819,6 +7862,7 @@ BattleScript_PrintPayDayMoneyString:: return BattleScript_WrapTurnDmg:: + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_DoTurnDmgEnd playanimation BS_ATTACKER, B_ANIM_TURN_TRAP, sB_ANIM_ARG1 printstring STRINGID_PKMNHURTBY waitmessage B_WAIT_TIME_LONG @@ -3858,6 +7902,18 @@ BattleScript_TargetPRLZHeal:: updatestatusicon BS_TARGET return +BattleScript_TargetWokeUp:: + printstring STRINGID_TARGETWOKEUP + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_TARGET + return + +BattleScript_TargetBurnHeal:: + printstring STRINGID_PKMNBURNHEALED + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_TARGET + return + BattleScript_MoveEffectSleep:: statusanimation BS_EFFECT_BATTLER printfromtable gFellAsleepStringIds @@ -3873,7 +7929,37 @@ BattleScript_YawnMakesAsleep:: waitmessage B_WAIT_TIME_LONG updatestatusicon BS_EFFECT_BATTLER waitstate + jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_SKY_DROPPED, BattleScript_YawnEnd makevisible BS_EFFECT_BATTLER + skydropyawn +BattleScript_YawnEnd: + end2 + +BattleScript_EmbargoEndTurn:: + printstring STRINGID_EMBARGOENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_TelekinesisEndTurn:: + printstring STRINGID_TELEKINESISENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_BufferEndTurn:: + printstring STRINGID_BUFFERENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_ToxicOrb:: + setbyte cMULTISTRING_CHOOSER, 0 + copybyte gEffectBattler, gBattlerAttacker + call BattleScript_MoveEffectToxic + end2 + +BattleScript_FlameOrb:: + setbyte cMULTISTRING_CHOOSER, 0 + copybyte gEffectBattler, gBattlerAttacker + call BattleScript_MoveEffectBurn end2 BattleScript_MoveEffectPoison:: @@ -3927,62 +8013,212 @@ BattleScript_MoveEffectConfusion:: waitmessage B_WAIT_TIME_LONG return +BattleScript_MoveEffectRecoilWithStatus:: + argumentstatuseffect + copyword gBattleMoveDamage, sSAVED_DMG BattleScript_MoveEffectRecoil:: jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_RecoilEnd BattleScript_DoRecoil:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printstring STRINGID_PKMNHITWITHRECOIL waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER, FALSE, NULL + tryfaintmon BS_ATTACKER BattleScript_RecoilEnd:: return +BattleScript_EffectWithChance:: + seteffectwithchance + return + BattleScript_ItemSteal:: - playanimation BS_TARGET, B_ANIM_ITEM_STEAL, NULL + playanimation BS_TARGET, B_ANIM_ITEM_STEAL printstring STRINGID_PKMNSTOLEITEM waitmessage B_WAIT_TIME_LONG return BattleScript_DrizzleActivates:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNMADEITRAIN waitstate - playanimation BS_BATTLER_0, B_ANIM_RAIN_CONTINUES, NULL + playanimation BS_BATTLER_0, B_ANIM_RAIN_CONTINUES call BattleScript_WeatherFormChanges end3 +BattleScript_AbilityRaisesDefenderStat:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + statbuffchange 0, NULL + setgraphicalstatchangevalues + playanimation BS_ABILITY_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_DEFENDERSSTATROSE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AbilityPopUp: + .if B_ABILITY_POP_UP == TRUE + showabilitypopup BS_ABILITY_BATTLER + recordability BS_ABILITY_BATTLER + pause 40 + .endif + sethword sABILITY_OVERWRITE, 0 + return + BattleScript_SpeedBoostActivates:: + call BattleScript_AbilityPopUp playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printstring STRINGID_PKMNRAISEDSPEED waitmessage B_WAIT_TIME_LONG end3 -BattleScript_TraceActivates:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_PKMNTRACED +@ Can't compare directly to a value, have to compare to value at pointer +sZero: +.byte 0 + +BattleScript_MoodyActivates:: + call BattleScript_AbilityPopUp + jumpifbyteequal sSTATCHANGER, sZero, BattleScript_MoodyLower + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyLower + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_ROSE, BattleScript_MoodyLower + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG +BattleScript_MoodyLower: + jumpifbyteequal sSAVED_STAT_CHANGER, sZero, BattleScript_MoodyEnd + copybyte sSTATCHANGER, sSAVED_STAT_CHANGER + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyEnd + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_MoodyEnd + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_MoodyEnd: end3 -BattleScript_RainDishActivates:: +BattleScript_EmergencyExit:: + pause 5 + call BattleScript_AbilityPopUp + pause B_WAIT_TIME_LONG +BattleScript_EmergencyExitNoPopUp:: + playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN + waitanimation + openpartyscreen BS_TARGET, BattleScript_EmergencyExitRet + switchoutabilities BS_TARGET + waitstate + switchhandleorder BS_TARGET, 2 + returntoball BS_TARGET + getswitchedmondata BS_TARGET + switchindataupdate BS_TARGET + hpthresholds BS_TARGET + printstring STRINGID_SWITCHINMON + switchinanim BS_TARGET, TRUE + waitstate + switchineffects BS_TARGET +BattleScript_EmergencyExitRet: + return + +BattleScript_EmergencyExitWild:: + pause 5 + call BattleScript_AbilityPopUp + pause B_WAIT_TIME_LONG +BattleScript_EmergencyExitWildNoPopUp:: + playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN + waitanimation + setoutcomeonteleport BS_TARGET + finishaction + return + +BattleScript_TraceActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNTRACED + waitmessage B_WAIT_TIME_LONG + settracedability BS_SCRIPTING + switchinabilities BS_SCRIPTING + return + +BattleScript_TraceActivatesEnd3:: + call BattleScript_TraceActivates + end3 + +BattleScript_ReceiverActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_RECEIVERABILITYTAKEOVER + waitmessage B_WAIT_TIME_LONG + settracedability BS_ABILITY_BATTLER + return + +BattleScript_AbilityHpHeal: + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXRESTOREDHPALITTLE2 waitmessage B_WAIT_TIME_LONG orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER + return + +BattleScript_RainDishActivates:: + call BattleScript_AbilityHpHeal + end3 + +BattleScript_CheekPouchActivates:: + copybyte sSAVED_BATTLER, gBattlerAttacker + copybyte gBattlerAttacker, gBattlerAbility + call BattleScript_AbilityHpHeal + copybyte gBattlerAttacker, sSAVED_BATTLER + return + +BattleScript_HarvestActivates:: + pause 5 + tryrecycleitem BattleScript_HarvestActivatesEnd + call BattleScript_AbilityPopUp + printstring STRINGID_HARVESTBERRY + waitmessage B_WAIT_TIME_LONG +BattleScript_HarvestActivatesEnd: + end3 + +BattleScript_SolarPowerActivates:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + call BattleScript_AbilityPopUp + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_SOLARPOWERHPDROP + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER + end3 + +BattleScript_HealerActivates:: + call BattleScript_AbilityPopUp + curestatus BS_SCRIPTING + updatestatusicon BS_SCRIPTING + printstring STRINGID_HEALERCURE + waitmessage B_WAIT_TIME_LONG end3 BattleScript_SandstreamActivates:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXWHIPPEDUPSANDSTORM waitstate - playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES, NULL + playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES call BattleScript_WeatherFormChanges end3 +BattleScript_SandSpitActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_ASANDSTORMKICKEDUP + waitstate + playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES + call BattleScript_WeatherFormChanges + return + BattleScript_ShedSkinActivates:: + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXCUREDYPROBLEM waitmessage B_WAIT_TIME_LONG updatestatusicon BS_ATTACKER @@ -4001,12 +8237,30 @@ BattleScript_CastformChange:: end3 BattleScript_DoCastformChange:: + copybyte gBattlerAbility, sBATTLER + call BattleScript_AbilityPopUp docastformchangeanimation waitstate printstring STRINGID_PKMNTRANSFORMED waitmessage B_WAIT_TIME_LONG return +BattleScript_TryAdrenalineOrb: + jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_ADRENALINE_ORB, BattleScript_TryAdrenalineOrbRet + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, 12, BattleScript_TryAdrenalineOrbRet + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_TryAdrenalineOrbRet + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + copybyte sBATTLER, gBattlerTarget + setlastuseditem BS_TARGET + printstring STRINGID_USINGITEMSTATOFPKMNROSE + waitmessage B_WAIT_TIME_LONG + removeitem BS_TARGET +BattleScript_TryAdrenalineOrbRet: + return + BattleScript_IntimidateActivatesEnd3:: call BattleScript_PauseIntimidateActivates end3 @@ -4015,19 +8269,27 @@ BattleScript_PauseIntimidateActivates: pause B_WAIT_TIME_SHORT BattleScript_IntimidateActivates:: setbyte gBattlerTarget, 0 - setstatchanger STAT_ATK, 1, TRUE + call BattleScript_AbilityPopUp BattleScript_IntimidateActivatesLoop: + setstatchanger STAT_ATK, 1, TRUE trygetintimidatetarget BattleScript_IntimidateActivatesReturn jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateActivatesLoopIncrement jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_IntimidatePrevented jumpifability BS_TARGET, ABILITY_HYPER_CUTTER, BattleScript_IntimidatePrevented jumpifability BS_TARGET, ABILITY_WHITE_SMOKE, BattleScript_IntimidatePrevented - statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | STAT_BUFF_ALLOW_PTR, BattleScript_IntimidateActivatesLoopIncrement +.if B_UPDATED_INTIMIDATE >= GEN_8 + jumpifability BS_TARGET, ABILITY_INNER_FOCUS, BattleScript_IntimidatePrevented + jumpifability BS_TARGET, ABILITY_SCRAPPY, BattleScript_IntimidatePrevented + jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_IntimidatePrevented + jumpifability BS_TARGET, ABILITY_OBLIVIOUS, BattleScript_IntimidatePrevented +.endif + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_IntimidateActivatesLoopIncrement jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 1, BattleScript_IntimidateActivatesLoopIncrement setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printstring STRINGID_PKMNCUTSATTACKWITH waitmessage B_WAIT_TIME_LONG + call BattleScript_TryAdrenalineOrb BattleScript_IntimidateActivatesLoopIncrement: addbyte gBattlerTarget, 1 goto BattleScript_IntimidateActivatesLoop @@ -4035,18 +8297,155 @@ BattleScript_IntimidateActivatesReturn: return BattleScript_IntimidatePrevented: pause B_WAIT_TIME_SHORT - printstring STRINGID_PREVENTEDFROMWORKING + call BattleScript_AbilityPopUp + setbyte gBattleCommunication STAT_ATK + stattextbuffer BS_ATTACKER + printstring STRINGID_STATWASNOTLOWERED waitmessage B_WAIT_TIME_LONG + call BattleScript_TryAdrenalineOrb goto BattleScript_IntimidateActivatesLoopIncrement - + BattleScript_DroughtActivates:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXINTENSIFIEDSUN waitstate - playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES, NULL + playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES call BattleScript_WeatherFormChanges end3 +BattleScript_DesolateLandActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_EXTREMELYHARSHSUNLIGHT + waitstate + playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES + call BattleScript_WeatherFormChanges + end3 + +BattleScript_DesolateLandEvaporatesWaterTypeMoves:: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + pause B_WAIT_TIME_SHORT + ppreduce + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_STRING_PRINTED, BattleScript_MoveEnd + printstring STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_STRING_PRINTED + goto BattleScript_MoveEnd + +BattleScript_PrimordialSeaActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_HEAVYRAIN + waitstate + playanimation BS_BATTLER_0, B_ANIM_RAIN_CONTINUES + call BattleScript_WeatherFormChanges + end3 + +BattleScript_PrimordialSeaFizzlesOutFireTypeMoves:: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + pause B_WAIT_TIME_SHORT + ppreduce + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_STRING_PRINTED, BattleScript_MoveEnd + printstring STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_STRING_PRINTED + goto BattleScript_MoveEnd + +BattleScript_DeltaStreamActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_MYSTERIOUSAIRCURRENT + waitstate + playanimation BS_ATTACKER, B_ANIM_STRONG_WINDS + end3 + +BattleScript_AttackWeakenedByStrongWinds:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_ATTACKWEAKENEDBSTRONGWINDS + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_SnowWarningActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_SNOWWARNINGHAIL + waitstate + playanimation BS_BATTLER_0, B_ANIM_HAIL_CONTINUES + call BattleScript_WeatherFormChanges + end3 + +BattleScript_TerrainSeedLoop: + savetarget + setbyte gBattlerTarget, 0 +BattleScript_TerrainSeedLoopIter: + copybyte sBATTLER, gBattlerTarget + doterrainseed BS_TARGET, BattleScript_TerrainSeedLoop_NextBattler + removeitem BS_TARGET +BattleScript_TerrainSeedLoop_NextBattler: + addbyte gBattlerTarget, 0x1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TerrainSeedLoopIter + restoretarget + return + +BattleScript_ElectricSurgeActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_TERRAINBECOMESELECTRIC + waitmessage B_WAIT_TIME_LONG + playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_TerrainSeedLoop + end3 + +BattleScript_MistySurgeActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_TERRAINBECOMESMISTY + waitmessage B_WAIT_TIME_LONG + playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_TerrainSeedLoop + end3 + +BattleScript_GrassySurgeActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_TERRAINBECOMESGRASSY + waitmessage B_WAIT_TIME_LONG + playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_TerrainSeedLoop + end3 + +BattleScript_PsychicSurgeActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_TERRAINBECOMESPSYCHIC + waitmessage B_WAIT_TIME_LONG + playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_TerrainSeedLoop + end3 + +BattleScript_BadDreamsActivates:: + setbyte gBattlerTarget, 0 + call BattleScript_AbilityPopUp +BattleScript_BadDreamsLoop: + trygetbaddreamstarget BattleScript_BadDreamsEnd + dmg_1_8_targethp + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + printstring STRINGID_BADDREAMSDMG + waitmessage B_WAIT_TIME_LONG + jumpifability BS_TARGET, ABILITY_MAGIC_GUARD, BattleScript_BadDreamsIncrement + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + tryfaintmon BS_TARGET + checkteamslost BattleScript_BadDreamsIncrement +BattleScript_BadDreamsIncrement: + addbyte gBattlerTarget, 1 + goto BattleScript_BadDreamsLoop +BattleScript_BadDreamsEnd: + end3 + BattleScript_TookAttack:: attackstring pause B_WAIT_TIME_SHORT @@ -4057,27 +8456,48 @@ BattleScript_TookAttack:: BattleScript_SturdyPreventsOHKO:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNPROTECTEDBY pause B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_DampStopsExplosion:: pause B_WAIT_TIME_SHORT + copybyte gBattlerAbility, gBattlerTarget + call BattleScript_AbilityPopUp printstring STRINGID_PKMNPREVENTSUSAGE pause B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + moveendto MOVEEND_NEXT_TARGET + moveendcase MOVEEND_CLEAR_BITS + end BattleScript_MoveHPDrain_PPLoss:: ppreduce BattleScript_MoveHPDrain:: attackstring pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_TARGET datahpupdate BS_TARGET printstring STRINGID_PKMNRESTOREDHPUSING waitmessage B_WAIT_TIME_LONG - orbyte gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + goto BattleScript_MoveEnd + +BattleScript_MoveStatDrain_PPLoss:: + ppreduce +BattleScript_MoveStatDrain:: + attackstring + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_TARGETABILITYSTATRAISE + waitmessage B_WAIT_TIME_LONG + clearsemiinvulnerablebit + tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd BattleScript_MonMadeMoveUseless_PPLoss:: @@ -4085,9 +8505,11 @@ BattleScript_MonMadeMoveUseless_PPLoss:: BattleScript_MonMadeMoveUseless:: attackstring pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXMADEYUSELESS waitmessage B_WAIT_TIME_LONG - orbyte gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + tryfaintmon BS_ATTACKER + orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE goto BattleScript_MoveEnd BattleScript_FlashFireBoost_PPLoss:: @@ -4095,18 +8517,22 @@ BattleScript_FlashFireBoost_PPLoss:: BattleScript_FlashFireBoost:: attackstring pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printfromtable gFlashFireStringIds waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd BattleScript_AbilityPreventsPhasingOut:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNANCHORSITSELFWITH waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_AbilityNoStatLoss:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNPREVENTSSTATLOSSWITH waitmessage B_WAIT_TIME_LONG return @@ -4131,18 +8557,21 @@ BattleScript_PSNPrevention:: BattleScript_ObliviousPreventsAttraction:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNPREVENTSROMANCEWITH waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_FlinchPrevention:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXPREVENTSFLINCHING waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_OwnTempoPrevents:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNPREVENTSCONFUSIONWITH waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -4151,50 +8580,375 @@ BattleScript_SoundproofProtected:: attackstring ppreduce pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXBLOCKSY waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + goto BattleScript_MoveEnd + +BattleScript_DazzlingProtected:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_POKEMONCANNOTUSEMOVE + waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_MoveUsedPsychicTerrainPrevents:: + printstring STRINGID_POKEMONCANNOTUSEMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_GrassyTerrainHeals:: + setbyte gBattleCommunication, 0 +BattleScript_GrassyTerrainLoop: + copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1 + checkgrassyterrainheal BS_ATTACKER, BattleScript_GrassyTerrainLoopIncrement + printstring STRINGID_GRASSYTERRAINHEALS + waitmessage B_WAIT_TIME_LONG +BattleScript_GrassyTerrainHpChange: + orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | 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_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_PERMANENT, BattleScript_GrassyTerrainHealEnd + jumpifbyte CMP_EQUAL, gFieldTimers + 5, 0, BattleScript_GrassyTerrainEnds +BattleScript_GrassyTerrainHealEnd: + end2 + 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 + orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT return BattleScript_StickyHoldActivates:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXMADEYINEFFECTIVE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_ColorChangeActivates:: + call BattleScript_AbilityPopUp printstring STRINGID_PKMNCHANGEDTYPEWITH waitmessage B_WAIT_TIME_LONG return -BattleScript_RoughSkinActivates:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 +BattleScript_MimicryActivatesEnd3:: + call BattleScript_AbilityPopUp + printstring STRINGID_BATTLERTYPECHANGEDTO + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_ProteanActivates:: + pause B_WAIT_TIME_SHORTEST + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNCHANGEDTYPE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_CursedBodyActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_CUSEDBODYDISABLED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_MummyActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_ATTACKERACQUIREDABILITY + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_WanderingSpiritActivates:: +.if B_ABILITY_POP_UP == TRUE + setbyte sFIXED_ABILITY_POPUP, TRUE + sethword sABILITY_OVERWRITE, ABILITY_WANDERING_SPIRIT + showabilitypopup BS_TARGET + pause 60 + sethword sABILITY_OVERWRITE, 0 + updateabilitypopup BS_TARGET + pause 20 + destroyabilitypopup + pause 40 + + setbyte sFIXED_ABILITY_POPUP, TRUE + copyhword sABILITY_OVERWRITE, gLastUsedAbility + showabilitypopup BS_ATTACKER + pause 60 + sethword sABILITY_OVERWRITE, 0 + updateabilitypopup BS_ATTACKER + pause 20 + destroyabilitypopup + pause 40 +.endif + printstring STRINGID_SWAPPEDABILITIES + waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER + switchinabilities BS_TARGET + return + +BattleScript_TargetsStatWasMaxedOut:: + call BattleScript_AbilityPopUp + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_TARGETSSTATWASMAXEDOUT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_BattlerAbilityStatRaiseOnSwitchIn:: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_BATTLERABILITYRAISEDSTAT + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_TargetAbilityStatRaiseOnMoveEnd:: + call BattleScript_AbilityPopUp + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_ABILITYRAISEDSTATDRASTICALLY + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ScriptingAbilityStatRaise:: + copybyte gBattlerAbility, sBATTLER + call BattleScript_AbilityPopUp + copybyte sSAVED_DMG, gBattlerAttacker + copybyte gBattlerAttacker, sBATTLER + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + setgraphicalstatchangevalues + playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_ATTACKERABILITYSTATRAISE + waitmessage B_WAIT_TIME_LONG + copybyte gBattlerAttacker, sSAVED_DMG + return + +BattleScript_WeakArmorActivates:: + call BattleScript_AbilityPopUp + setstatchanger STAT_DEF, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesSpeed + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_WeakArmorDefAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_WeakArmorActivatesSpeed + pause B_WAIT_TIME_SHORTEST + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_WeakArmorActivatesSpeed +BattleScript_WeakArmorDefAnim: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_TARGETABILITYSTATLOWER + waitmessage B_WAIT_TIME_LONG +BattleScript_WeakArmorActivatesSpeed: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeakArmorSpeedAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_WeakArmorActivatesEnd + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_TARGETSTATWONTGOHIGHER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_WeakArmorActivatesEnd +BattleScript_WeakArmorSpeedAnim: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_TARGETABILITYSTATRAISE + waitmessage B_WAIT_TIME_LONG +BattleScript_WeakArmorActivatesEnd: + return + +BattleScript_RaiseStatOnFaintingTarget:: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_LASTABILITYRAISEDSTAT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AttackerAbilityStatRaise:: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_ATTACKERABILITYSTATRAISE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_FellStingerRaisesStat:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FellStingerRaisesAtkEnd + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_ROSE, BattleScript_FellStingerRaisesAtkEnd + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_FellStingerRaisesAtkEnd: + return + +BattleScript_AttackerAbilityStatRaiseEnd3:: + call BattleScript_AttackerAbilityStatRaise + end3 + +BattleScript_SwitchInAbilityMsg:: + call BattleScript_AbilityPopUp + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_SwitchInAbilityMsgRet:: + call BattleScript_AbilityPopUp + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ActivateAsOne:: + call BattleScript_AbilityPopUp + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG + @ show unnerve + sethword sABILITY_OVERWRITE, ABILITY_UNNERVE + setbyte cMULTISTRING_CHOOSER, B_MSG_SWITCHIN_UNNERVE + call BattleScript_AbilityPopUp + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_FriskMsgWithPopup:: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp +BattleScript_FriskMsg:: + printstring STRINGID_FRISKACTIVATES + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_FriskActivates:: + tryfriskmsg BS_ATTACKER + end3 + +BattleScript_ImposterActivates:: + transformdataexecution + call BattleScript_AbilityPopUp + playmoveanimation BS_ATTACKER, MOVE_TRANSFORM + waitanimation + printstring STRINGID_IMPOSTERTRANSFORM + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_HurtAttacker: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printstring STRINGID_PKMNHURTSWITH waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER, FALSE, NULL + tryfaintmon BS_ATTACKER + return + +BattleScript_RoughSkinActivates:: + call BattleScript_AbilityPopUp + call BattleScript_HurtAttacker + return + +BattleScript_RockyHelmetActivates:: + @ don't play the animation for a fainted mon + jumpifabsent BS_TARGET, BattleScript_RockyHelmetActivatesDmg + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation +BattleScript_RockyHelmetActivatesDmg: + call BattleScript_HurtAttacker + return + +BattleScript_SpikyShieldEffect:: + jumpifabsent BS_ATTACKER, BattleScript_SpikyShieldRet + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_PKMNHURTSWITH + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER +BattleScript_SpikyShieldRet:: + return + +BattleScript_KingsShieldEffect:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + seteffectsecondary + setmoveeffect 0 + copybyte sBATTLER, gBattlerTarget + copybyte gBattlerTarget, gBattlerAttacker + copybyte gBattlerAttacker, sBATTLER + return + +BattleScript_BanefulBunkerEffect:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_PASSIVE_DAMAGE + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + seteffectsecondary + setmoveeffect 0 return BattleScript_CuteCharmActivates:: + call BattleScript_AbilityPopUp status2animation BS_ATTACKER, STATUS2_INFATUATION printstring STRINGID_PKMNSXINFATUATEDY waitmessage B_WAIT_TIME_LONG + call BattleScript_TryDestinyKnotTarget return -BattleScript_ApplySecondaryEffect:: +BattleScript_GooeyActivates:: waitstate + call BattleScript_AbilityPopUp + swapattackerwithtarget @ for defiant, mirror armor seteffectsecondary return +BattleScript_AbilityStatusEffect:: + waitstate + call BattleScript_AbilityPopUp + seteffectsecondary + return + +BattleScript_BattleBondActivatesOnMoveEndAttacker:: + pause 5 + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + printstring STRINGID_ATTACKERBECAMEFULLYCHARGED + handleformchange BS_ATTACKER, 0 + handleformchange BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE + waitanimation + handleformchange BS_ATTACKER, 2 + printstring STRINGID_ATTACKERBECAMEASHSPECIES + return + +BattleScript_DancerActivates:: + call BattleScript_AbilityPopUp + waitmessage B_WAIT_TIME_SHORT + setbyte sB_ANIM_TURN, 0 + setbyte sB_ANIM_TARGETS_HIT, 0 + orword gHitMarker, HITMARKER_ALLOW_NO_PP + jumptocalledmove TRUE + BattleScript_SynchronizeActivates:: waitstate + call BattleScript_AbilityPopUp seteffectprimary return @@ -4205,11 +8959,24 @@ BattleScript_NoItemSteal:: return BattleScript_AbilityCuredStatus:: + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXCUREDITSYPROBLEM waitmessage B_WAIT_TIME_LONG updatestatusicon BS_SCRIPTING return +BattleScript_BattlerShookOffTaunt:: + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSHOOKOFFTHETAUNT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_BattlerGotOverItsInfatuation:: + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNGOTOVERITSINFATUATION + waitmessage B_WAIT_TIME_LONG + return + BattleScript_IgnoresWhileAsleep:: printstring STRINGID_PKMNIGNORESASLEEP waitmessage B_WAIT_TIME_LONG @@ -4222,15 +8989,20 @@ BattleScript_IgnoresAndUsesRandomMove:: jumptocalledmove FALSE BattleScript_MoveUsedLoafingAround:: + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_LOAFING, BattleScript_MoveUsedLoafingAroundMsg + @ Skip ahead if not the Battle Palace message jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_INCAPABLE_OF_POWER, BattleScript_MoveUsedLoafingAroundMsg setbyte gBattleCommunication, 0 - various24 BS_ATTACKER + palacetryescapestatus BS_ATTACKER setbyte cMULTISTRING_CHOOSER, B_MSG_INCAPABLE_OF_POWER BattleScript_MoveUsedLoafingAroundMsg:: printfromtable gInobedientStringIds waitmessage B_WAIT_TIME_LONG moveendto MOVEEND_NEXT_TARGET end +BattleScript_TruantLoafingAround:: + call BattleScript_AbilityPopUp + goto BattleScript_MoveUsedLoafingAroundMsg BattleScript_IgnoresAndFallsAsleep:: printstring STRINGID_PKMNBEGANTONAP @@ -4246,7 +9018,7 @@ BattleScript_IgnoresAndHitsItself:: goto BattleScript_DoSelfConfusionDmg BattleScript_SubstituteFade:: - playanimation BS_TARGET, B_ANIM_SUBSTITUTE_FADE, NULL + playanimation BS_TARGET, B_ANIM_SUBSTITUTE_FADE printstring STRINGID_PKMNSUBSTITUTEFADED return @@ -4255,7 +9027,7 @@ BattleScript_BerryCurePrlzEnd2:: end2 BattleScript_BerryCureParRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMCUREDPARALYSIS waitmessage B_WAIT_TIME_LONG updatestatusicon BS_SCRIPTING @@ -4267,7 +9039,7 @@ BattleScript_BerryCurePsnEnd2:: end2 BattleScript_BerryCurePsnRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMCUREDPOISON waitmessage B_WAIT_TIME_LONG updatestatusicon BS_SCRIPTING @@ -4279,7 +9051,7 @@ BattleScript_BerryCureBrnEnd2:: end2 BattleScript_BerryCureBrnRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMHEALEDBURN waitmessage B_WAIT_TIME_LONG updatestatusicon BS_SCRIPTING @@ -4291,7 +9063,7 @@ BattleScript_BerryCureFrzEnd2:: end2 BattleScript_BerryCureFrzRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMDEFROSTEDIT waitmessage B_WAIT_TIME_LONG updatestatusicon BS_SCRIPTING @@ -4303,19 +9075,41 @@ BattleScript_BerryCureSlpEnd2:: end2 BattleScript_BerryCureSlpRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMWOKEIT waitmessage B_WAIT_TIME_LONG updatestatusicon BS_SCRIPTING removeitem BS_SCRIPTING return +BattleScript_GemActivates:: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + printstring STRINGID_GEMACTIVATES + waitmessage B_WAIT_TIME_LONG + removeitem BS_ATTACKER + return + +BattleScript_BerryReduceDmg:: + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation + printstring STRINGID_TARGETATEITEM + waitmessage B_WAIT_TIME_LONG + removeitem BS_TARGET + return + +BattleScript_PrintBerryReduceString:: + waitmessage B_WAIT_TIME_LONG + printstring STRINGID_BERRYDMGREDUCES + waitmessage B_WAIT_TIME_LONG + return + BattleScript_BerryCureConfusionEnd2:: call BattleScript_BerryCureConfusionRet end2 BattleScript_BerryCureConfusionRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMSNAPPEDOUT waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING @@ -4326,36 +9120,74 @@ BattleScript_BerryCureChosenStatusEnd2:: end2 BattleScript_BerryCureChosenStatusRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printfromtable gBerryEffectStringIds waitmessage B_WAIT_TIME_LONG updatestatusicon BS_SCRIPTING removeitem BS_SCRIPTING return +BattleScript_MentalHerbCureRet:: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + printfromtable gMentalHerbCureStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_SCRIPTING + removeitem BS_SCRIPTING + copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe + return + +BattleScript_MentalHerbCureEnd2:: + call BattleScript_MentalHerbCureRet + end2 + BattleScript_WhiteHerbEnd2:: call BattleScript_WhiteHerbRet end2 BattleScript_WhiteHerbRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDSTATUS waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING return -BattleScript_ItemHealHP_RemoveItem:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL +BattleScript_ItemHealHP_RemoveItemRet:: + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_ItemHealHP_RemoveItemRet_AbilityPopUp + goto BattleScript_ItemHealHP_RemoveItemRet_Anim +BattleScript_ItemHealHP_RemoveItemRet_AbilityPopUp: + call BattleScript_AbilityPopUp +BattleScript_ItemHealHP_RemoveItemRet_Anim: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING + removeitem BS_SCRIPTING + return + +BattleScript_ItemHealHP_RemoveItemEnd2:: + jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_ItemHealHP_RemoveItemEnd2_AbilityPopUp + goto BattleScript_ItemHealHP_RemoveItemEnd2_Anim +BattleScript_ItemHealHP_RemoveItemEnd2_AbilityPopUp: + call BattleScript_AbilityPopUp +BattleScript_ItemHealHP_RemoveItemEnd2_Anim: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_PKMNSITEMRESTOREDHEALTH + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER removeitem BS_ATTACKER end2 BattleScript_BerryPPHealEnd2:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL + jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_BerryPPHealEnd2_AbilityPopup + goto BattleScript_BerryPPHealEnd2_Anim +BattleScript_BerryPPHealEnd2_AbilityPopup: + call BattleScript_AbilityPopUp +BattleScript_BerryPPHealEnd2_Anim: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDPP waitmessage B_WAIT_TIME_LONG removeitem BS_ATTACKER @@ -4365,11 +9197,37 @@ BattleScript_ItemHealHP_End2:: call BattleScript_ItemHealHP_Ret end2 +BattleScript_AirBaloonMsgIn:: + printstring STRINGID_AIRBALLOONFLOAT + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_AirBaloonMsgPop:: + printstring STRINGID_AIRBALLOONPOP + waitmessage B_WAIT_TIME_LONG + removeitem BS_TARGET + return + +BattleScript_ItemHurtRet:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_HURTBYITEM + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER + return + +BattleScript_ItemHurtEnd2:: + playanimation BS_ATTACKER, B_ANIM_MON_HIT + waitanimation + call BattleScript_ItemHurtRet + end2 + BattleScript_ItemHealHP_Ret:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHPALITTLE waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER return @@ -4378,37 +9236,113 @@ BattleScript_SelectingNotAllowedMoveChoiceItem:: printselectionstring STRINGID_ITEMALLOWSONLYYMOVE endselectionscript -BattleScript_FocusBandActivates:: - playanimation BS_TARGET, B_ANIM_FOCUS_BAND, NULL +BattleScript_SelectingNotAllowedMoveChoiceItemInPalace:: + printstring STRINGID_ITEMALLOWSONLYYMOVE + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedMoveGorillaTactics:: + printselectionstring STRINGID_ABILITYALLOWSONLYMOVE + endselectionscript + +BattleScript_SelectingNotAllowedMoveGorillaTacticsInPalace:: + printstring STRINGID_ABILITYALLOWSONLYMOVE + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedMoveAssaultVest:: + printselectionstring STRINGID_ASSAULTVESTDOESNTALLOW + endselectionscript + +BattleScript_SelectingNotAllowedMoveAssaultVestInPalace:: + printstring STRINGID_ASSAULTVESTDOESNTALLOW + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedPlaceholder:: + printselectionstring STRINGID_NOTDONEYET + endselectionscript + +BattleScript_SelectingNotAllowedPlaceholderInPalace:: + printstring STRINGID_NOTDONEYET + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_HangedOnMsg:: + playanimation BS_TARGET, B_ANIM_HANGED_ON printstring STRINGID_PKMNHUNGONWITHX waitmessage B_WAIT_TIME_LONG + jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_FOCUS_SASH, BattleScript_HangedOnMsgRet + removeitem BS_TARGET +BattleScript_HangedOnMsgRet: return BattleScript_BerryConfuseHealEnd2:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryConfuseHealEnd2_AbilityPopup + goto BattleScript_BerryConfuseHealEnd2_Anim +BattleScript_BerryConfuseHealEnd2_AbilityPopup: + call BattleScript_AbilityPopUp +BattleScript_BerryConfuseHealEnd2_Anim: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING printstring STRINGID_FORXCOMMAYZ waitmessage B_WAIT_TIME_LONG setmoveeffect MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER seteffectprimary - removeitem BS_ATTACKER + removeitem BS_SCRIPTING end2 +BattleScript_BerryConfuseHealRet:: + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryConfuseHealRet_AbilityPopup + goto BattleScript_BerryConfuseHealRet_Anim +BattleScript_BerryConfuseHealRet_AbilityPopup: + call BattleScript_AbilityPopUp +BattleScript_BerryConfuseHealRet_Anim: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_PKMNSITEMRESTOREDHEALTH + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING + printstring STRINGID_FORXCOMMAYZ + waitmessage B_WAIT_TIME_LONG + setmoveeffect MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN + seteffectprimary + removeitem BS_TARGET + return + BattleScript_BerryStatRaiseEnd2:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_BerryStatRaiseDoStatUp -BattleScript_BerryStatRaiseDoStatUp:: + jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_BerryStatRaiseEnd2_AbilityPopup + goto BattleScript_BerryStatRaiseEnd2_Anim +BattleScript_BerryStatRaiseEnd2_AbilityPopup: + call BattleScript_AbilityPopUp +BattleScript_BerryStatRaiseEnd2_Anim: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerryStatRaiseEnd2_End + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM call BattleScript_StatUp removeitem BS_ATTACKER +BattleScript_BerryStatRaiseEnd2_End:: end2 +BattleScript_BerryStatRaiseRet:: + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryStatRaiseRet_AbilityPopup + goto BattleScript_BerryStatRaiseRet_Anim +BattleScript_BerryStatRaiseRet_AbilityPopup: + call BattleScript_AbilityPopUp +BattleScript_BerryStatRaiseRet_Anim: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerryStatRaiseRet_End + setgraphicalstatchangevalues + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 + setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM + call BattleScript_StatUp + removeitem BS_SCRIPTING +BattleScript_BerryStatRaiseRet_End: + return + BattleScript_BerryFocusEnergyEnd2:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNUSEDXTOGETPUMPED waitmessage B_WAIT_TIME_LONG removeitem BS_ATTACKER @@ -4442,22 +9376,22 @@ BattleScript_ArenaTurnBeginning:: playse SE_ARENA_TIMEUP1 pause 8 playse SE_ARENA_TIMEUP1 - various14 BS_ATTACKER + arenadrawreftextbox arenajudgmentstring B_MSG_REF_COMMENCE_BATTLE arenawaitmessage B_MSG_REF_COMMENCE_BATTLE pause B_WAIT_TIME_LONG - various15 BS_ATTACKER + arenaerasereftextbox volumeup end2 @ Unused BattleScript_ArenaNothingDecided:: playse SE_DING_DONG - various14 BS_ATTACKER + arenadrawreftextbox arenajudgmentstring B_MSG_REF_NOTHING_IS_DECIDED arenawaitmessage B_MSG_REF_NOTHING_IS_DECIDED pause B_WAIT_TIME_LONG - various15 BS_ATTACKER + arenaerasereftextbox end2 BattleScript_ArenaDoJudgment:: @@ -4470,11 +9404,11 @@ BattleScript_ArenaDoJudgment:: pause 8 playse SE_ARENA_TIMEUP1 pause B_WAIT_TIME_LONG - various14 BS_ATTACKER + arenadrawreftextbox arenajudgmentstring B_MSG_REF_THATS_IT arenawaitmessage B_MSG_REF_THATS_IT pause B_WAIT_TIME_LONG - setbyte gBattleCommunication, 0 + setbyte gBattleCommunication, 0 @ Reset state for arenajudgmentwindow arenajudgmentwindow pause B_WAIT_TIME_LONG arenajudgmentwindow @@ -4487,12 +9421,13 @@ BattleScript_ArenaDoJudgment:: arenajudgmentstring B_MSG_REF_JUDGE_BODY arenawaitmessage B_MSG_REF_JUDGE_BODY arenajudgmentwindow - jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 3, BattleScript_ArenaJudgmentPlayerLoses - jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 4, BattleScript_ArenaJudgmentDraw + jumpifbyte CMP_EQUAL, gBattleCommunication + 1, ARENA_RESULT_PLAYER_LOST, BattleScript_ArenaJudgmentPlayerLoses + jumpifbyte CMP_EQUAL, gBattleCommunication + 1, ARENA_RESULT_TIE, BattleScript_ArenaJudgmentDraw +@ ARENA_RESULT_PLAYER_WON arenajudgmentstring B_MSG_REF_PLAYER_WON arenawaitmessage B_MSG_REF_PLAYER_WON arenajudgmentwindow - various15 BS_ATTACKER + arenaerasereftextbox printstring STRINGID_DEFEATEDOPPONENTBYREFEREE waitmessage B_WAIT_TIME_LONG playfaintcry BS_OPPONENT1 @@ -4506,7 +9441,7 @@ BattleScript_ArenaJudgmentPlayerLoses: arenajudgmentstring B_MSG_REF_OPPONENT_WON arenawaitmessage B_MSG_REF_OPPONENT_WON arenajudgmentwindow - various15 BS_ATTACKER + arenaerasereftextbox printstring STRINGID_LOSTTOOPPONENTBYREFEREE waitmessage B_WAIT_TIME_LONG playfaintcry BS_PLAYER1 @@ -4520,7 +9455,7 @@ BattleScript_ArenaJudgmentDraw: arenajudgmentstring B_MSG_REF_DRAW arenawaitmessage B_MSG_REF_DRAW arenajudgmentwindow - various15 BS_ATTACKER + arenaerasereftextbox printstring STRINGID_TIEDOPPONENTBYREFEREE waitmessage B_WAIT_TIME_LONG playfaintcry BS_PLAYER1 @@ -4550,3 +9485,351 @@ BattleScript_PrintPlayerForfeitedLinkBattle:: endlinkbattle waitmessage B_WAIT_TIME_LONG end2 + +BattleScript_TotemFlaredToLife:: + playanimation BS_ATTACKER, B_ANIM_TOTEM_FLARE + printstring STRINGID_AURAFLAREDTOLIFE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_ApplyTotemVarBoost + +BattleScript_TotemVar:: + gettotemboost BattleScript_ApplyTotemVarBoost +BattleScript_TotemVarEnd: + end2 +BattleScript_ApplyTotemVarBoost: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TotemVarEnd + setgraphicalstatchangevalues + playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_TotemVarPrintStatMsg: + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_TotemVar @loop until stats bitfield is empty + +BattleScript_AnnounceAirLockCloudNine:: + call BattleScript_AbilityPopUp + printstring STRINGID_AIRLOCKACTIVATES + waitmessage B_WAIT_TIME_LONG + call BattleScript_WeatherFormChanges + end3 + +BattleScript_QuickClawActivation:: + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + printstring STRINGID_CANACTFASTERTHANKSTO + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_QuickDrawActivation:: + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + call BattleScript_AbilityPopUp + printstring STRINGID_CANACTFASTERTHANKSTO + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_CustapBerryActivation:: + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + printstring STRINGID_CANACTFASTERTHANKSTO + waitmessage B_WAIT_TIME_LONG + removeitem BS_ATTACKER + end2 + +BattleScript_MicleBerryActivateEnd2:: + jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_MicleBerryActivateEnd2_Ripen + goto BattleScript_MicleBerryActivateEnd2_Anim +BattleScript_MicleBerryActivateEnd2_Ripen: + call BattleScript_AbilityPopUp +BattleScript_MicleBerryActivateEnd2_Anim: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_MICLEBERRYACTIVATES + waitmessage B_WAIT_TIME_LONG + removeitem BS_ATTACKER + end2 + +BattleScript_MicleBerryActivateRet:: + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_MicleBerryActivateRet_Ripen + goto BattleScript_MicleBerryActivateRet_Anim +BattleScript_MicleBerryActivateRet_Ripen: + call BattleScript_AbilityPopUp +BattleScript_MicleBerryActivateRet_Anim: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_MICLEBERRYACTIVATES + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + return + +BattleScript_JabocaRowapBerryActivates:: + jumpifability BS_TARGET, ABILITY_RIPEN, BattleScript_JabocaRowapBerryActivate_Ripen + goto BattleScript_JabocaRowapBerryActivate_Anim +BattleScript_JabocaRowapBerryActivate_Ripen: + call BattleScript_AbilityPopUp +BattleScript_JabocaRowapBerryActivate_Anim: + jumpifabsent BS_TARGET, BattleScript_JabocaRowapBerryActivate_Dmg @ dont play the animation for a fainted target + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation +BattleScript_JabocaRowapBerryActivate_Dmg: + call BattleScript_HurtAttacker + removeitem BS_TARGET + return + +@ z moves / effects +BattleScript_ZMoveActivateDamaging:: + printstring STRINGID_ZPOWERSURROUNDS + playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL + printstring STRINGID_ZMOVEUNLEASHED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ZMoveActivateStatus:: + savetarget + printstring STRINGID_ZPOWERSURROUNDS + playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL + setzeffect + restoretarget + copybyte sSTATCHANGER, sSAVED_STAT_CHANGER + return + +BattleScript_ZEffectPrintString:: + printfromtable gZEffectStringIds + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_RecoverHPZMove:: + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING + printfromtable gZEffectStringIds + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StatUpZMove:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StatUpZMoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpZMoveEnd + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_ZMOVESTATUP + waitmessage B_WAIT_TIME_LONG + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_StatUpZMoveEnd: + return + +BattleScript_HealReplacementZMove:: + playanimation BS_SCRIPTING B_ANIM_WISH_HEAL 0x0 + printfromtable gZEffectStringIds + waitmessage B_WAIT_TIME_LONG + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING + return + +BattleScript_EffectExtremeEvoboost:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + goto BattleScript_ButItFailed +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 + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ExtremeEvoboostDef:: + setstatchanger STAT_DEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ExtremeEvoboostSpeed:: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ExtremeEvoboostSpAtk:: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ExtremeEvoboostSpDef:: + setstatchanger STAT_SPDEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ExtremeEvoboostEnd:: + goto BattleScript_MoveEnd + +BattleScript_EffectTerrainHit: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + setterrain BattleScript_TryFaint + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + printfromtable gTerrainStringIds +BattleScript_TryFaint: + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_Pickpocket:: + call BattleScript_AbilityPopUp + jumpifability BS_ATTACKER, ABILITY_STICKY_HOLD, BattleScript_PickpocketPrevented + swapattackerwithtarget + call BattleScript_ItemSteal + swapattackerwithtarget + activateitemeffects BS_TARGET + return + +BattleScript_PickpocketPrevented: + pause B_WAIT_TIME_SHORT + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + printstring STRINGID_ITEMCANNOTBEREMOVED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StickyBarbTransfer:: + playanimation BS_TARGET, B_ANIM_ITEM_STEAL + printstring STRINGID_STICKYBARBTRANSFER + waitmessage B_WAIT_TIME_LONG + removeitem BS_TARGET + return + +BattleScript_RedCardActivates:: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_REDCARDACTIVATE + waitmessage B_WAIT_TIME_LONG + swapattackerwithtarget + jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_ROOTED, BattleScript_RedCardIngrain + jumpifability BS_EFFECT_BATTLER, ABILITY_SUCTION_CUPS, BattleScript_RedCardSuctionCups + setbyte sSWITCH_CASE, B_SWITCH_RED_CARD + forcerandomswitch BattleScript_RedCardEnd + @ changes the current battle script. the rest happens in BattleScript_RoarSuccessSwitch_Ret, if switch is successful +BattleScript_RedCardEnd: + return +BattleScript_RedCardIngrain: + printstring STRINGID_PKMNANCHOREDITSELF + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + swapattackerwithtarget + return +BattleScript_RedCardSuctionCups: + printstring STRINGID_PKMNANCHORSITSELFWITH + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + swapattackerwithtarget + return + +BattleScript_EjectButtonActivates:: + makevisible BS_ATTACKER + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_EJECTBUTTONACTIVATE + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + makeinvisible BS_SCRIPTING + openpartyscreen BS_SCRIPTING, BattleScript_EjectButtonEnd + switchoutabilities BS_SCRIPTING + waitstate + switchhandleorder BS_SCRIPTING 0x2 + returntoball BS_SCRIPTING + getswitchedmondata BS_SCRIPTING + switchindataupdate BS_SCRIPTING + hpthresholds BS_SCRIPTING + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + printstring 0x3 + switchinanim BS_SCRIPTING 0x1 + waitstate + switchineffects BS_SCRIPTING +BattleScript_EjectButtonEnd: + return + +BattleScript_EjectPackActivate_Ret:: + goto BattleScript_EjectButtonActivates + +BattleScript_EjectPackActivate_End2:: + call BattleScript_EjectPackActivate_Ret + end2 + +BattleScript_EjectPackActivates:: + jumpifcantswitch BS_SCRIPTING, BattleScript_EjectButtonEnd + goto BattleScript_EjectPackActivate_Ret + +BattleScript_DarkTypePreventsPrankster:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + goto BattleScript_MoveEnd + +BattleScript_PastelVeilActivates:: + setbyte gBattleCommunication, 0 + setbyte gBattleCommunication + 1, 0 +BattleScript_PastelVeil_TryCurePoison: + jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_PastelVeilCurePoison + goto BattleScript_PastelVeilLoopIncrement +BattleScript_PastelVeilCurePoison: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication + 1, 0x0, BattleScript_PastelVeilCurePoisonNoPopUp + call BattleScript_AbilityPopUp + setbyte gBattleCommunication + 1, 1 +BattleScript_PastelVeilCurePoisonNoPopUp: @ Only show Pastel Veil pop up once if it cures two mons + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG + curestatus BS_TARGET + updatestatusicon BS_TARGET +BattleScript_PastelVeilLoopIncrement: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_PastelVeilEnd + addbyte gBattleCommunication, 1 + jumpifnoally BS_TARGET, BattleScript_PastelVeilEnd + setallytonexttarget BattleScript_PastelVeil_TryCurePoison + goto BattleScript_PastelVeilEnd +BattleScript_PastelVeilEnd: + end3 + +sByteFour: +.byte MAX_BATTLERS_COUNT + +BattleScript_NeutralizingGasExits:: + savetarget + pause B_WAIT_TIME_SHORT + printstring STRINGID_NEUTRALIZINGGASOVER + waitmessage B_WAIT_TIME_LONG + setbyte gBattlerTarget, 0 +BattleScript_NeutralizingGasExitsLoop: + switchinabilities BS_TARGET + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, sByteFour, BattleScript_NeutralizingGasExitsLoop @ SOMEHOW, comparing to gBattlersCount is problematic. + restoretarget + return + +BattleScript_MagicianActivates:: + call BattleScript_AbilityPopUp + call BattleScript_ItemSteal + return diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index b7f0f693fb..c1dfde61d8 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -2,6 +2,7 @@ #include "constants/battle_script_commands.h" #include "constants/battle_anim.h" #include "constants/battle_string_ids.h" +#include "constants/battle_config.h" #include "constants/items.h" #include "constants/songs.h" #include "constants/game_stat.h" @@ -11,22 +12,6 @@ .section script_data, "aw", %progbits - .align 2 -gBattlescriptsForBallThrow:: - .4byte BattleScript_BallThrow @ ITEM_NONE - .4byte BattleScript_BallThrow @ ITEM_MASTER_BALL - .4byte BattleScript_BallThrow @ ITEM_ULTRA_BALL - .4byte BattleScript_BallThrow @ ITEM_GREAT_BALL - .4byte BattleScript_BallThrow @ ITEM_POKE_BALL - .4byte BattleScript_SafariBallThrow @ ITEM_SAFARI_BALL - .4byte BattleScript_BallThrow @ ITEM_NET_BALL - .4byte BattleScript_BallThrow @ ITEM_DIVE_BALL - .4byte BattleScript_BallThrow @ ITEM_NEST_BALL - .4byte BattleScript_BallThrow @ ITEM_REPEAT_BALL - .4byte BattleScript_BallThrow @ ITEM_TIMER_BALL - .4byte BattleScript_BallThrow @ ITEM_LUXURY_BALL - .4byte BattleScript_BallThrow @ ITEM_PREMIER_BALL - .align 2 gBattlescriptsForUsingItem:: .4byte BattleScript_PlayerUsesItem @@ -62,10 +47,15 @@ BattleScript_SafariBallThrow:: handleballthrow BattleScript_SuccessBallThrow:: - jumpifhalfword CMP_EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_PrintCaughtMonInfo + setbyte sMON_CAUGHT, TRUE incrementgamestat GAME_STAT_POKEMON_CAPTURES BattleScript_PrintCaughtMonInfo:: printstring STRINGID_GOTCHAPKMNCAUGHT + jumpifbyte CMP_NOT_EQUAL, sEXP_CATCH, TRUE, BattleScript_TryPrintCaughtMonInfo + setbyte sGIVEEXP_STATE, 0 + getexp BS_TARGET + sethword gBattle_BG2_X, 0 +BattleScript_TryPrintCaughtMonInfo: trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon printstring STRINGID_PKMNDATAADDEDTODEX waitstate @@ -120,6 +110,7 @@ BattleScript_OpponentUsesHealItem:: playse SE_USE_ITEM printstring STRINGID_TRAINER1USEDITEM waitmessage B_WAIT_TIME_LONG + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT useitemonopponent orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER @@ -200,3 +191,17 @@ BattleScript_ActionWallyThrow: printstring STRINGID_YOUTHROWABALLNOWRIGHT waitmessage B_WAIT_TIME_LONG end2 + +BattleScript_TrainerSlideMsgRet:: + handletrainerslidemsg BS_SCRIPTING, 0 + trainerslidein 1 + handletrainerslidemsg BS_SCRIPTING, 1 + waitstate + trainerslideout 1 + handletrainerslidemsg BS_SCRIPTING, 2 + waitstate + return + +BattleScript_TrainerSlideMsgEnd2:: + call BattleScript_TrainerSlideMsgRet + end2 diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s index f0972264f0..ef4feb25ff 100644 --- a/data/contest_ai_scripts.s +++ b/data/contest_ai_scripts.s @@ -48,7 +48,7 @@ gContestAI_ScriptsTable:: .4byte AI_Nothing @ CONTEST_AI_DUMMY_25 -@ Unused. Encourages improving condition on the 1st appeal, or startling mons if the users turn is later +@ Unused. Encourages improving condition on the 1st appeal, or startling mons if the users turn is later AI_CheckTiming: if_appeal_num_not_eq 0, AI_CheckTiming_SkipCondition if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, AI_CheckTiming_SkipCondition @@ -388,7 +388,7 @@ AI_CGM_AppealAsGoodAsPrevOnes_Last: score +20 end -@ Encourages move more for each opponent who will have a turn before the user +@ Encourages move more for each opponent who will have a turn before the user AI_CGM_AppealAsGoodAsPrevOne: if_user_order_eq MON_1, AI_CGM_AppealAsGoodAsPrevOne_1stUp if_user_order_eq MON_2, AI_CGM_AppealAsGoodAsPrevOne_2ndUp @@ -456,7 +456,7 @@ AI_CGM_BetterWhenAudienceExcited_Not1stUp: score +10 end -@ Encourage move more for each condition star the prev mons have +@ Encourage move more for each condition star the prev mons have AI_CGM_WorsenConditionOfPrevMons: if_user_order_eq MON_1, AI_CGM_End goto AI_CGM_WorsenConditionOfPrevMons_CheckMon1 diff --git a/data/event_scripts.s b/data/event_scripts.s index 852fa36d8c..7c3a2b23f9 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -2,6 +2,7 @@ #include "constants/apprentice.h" #include "constants/battle.h" #include "constants/battle_arena.h" +#include "constants/battle_config.h" #include "constants/battle_dome.h" #include "constants/battle_factory.h" #include "constants/battle_frontier.h" @@ -44,6 +45,7 @@ #include "constants/script_menu.h" #include "constants/secret_bases.h" #include "constants/songs.h" +#include "constants/sound.h" #include "constants/species.h" #include "constants/trade.h" #include "constants/trainer_hill.h" @@ -58,7 +60,6 @@ .section script_data, "aw", %progbits -@ 81DB67C .include "data/script_cmd_table.inc" gSpecialVars:: @@ -98,7 +99,7 @@ gStdScripts:: .4byte Std_ObtainDecoration @ STD_OBTAIN_DECORATION .4byte Std_RegisteredInMatchCall @ STD_REGISTER_MATCH_CALL .4byte Std_MsgboxGetPoints @ MSGBOX_GETPOINTS - .4byte Std_10 + .4byte Std_MsgboxPokenav @ MSGBOX_POKENAV gStdScripts_End:: .include "data/maps/PetalburgCity/scripts.inc" @@ -582,12 +583,9 @@ EventScript_WhiteOut:: end EventScript_ResetMrBriney:: - compare VAR_BRINEY_LOCATION, 1 - goto_if_eq EventScript_MoveMrBrineyToHouse - compare VAR_BRINEY_LOCATION, 2 - goto_if_eq EventScript_MoveMrBrineyToDewford - compare VAR_BRINEY_LOCATION, 3 - goto_if_eq EventScript_MoveMrBrineyToRoute109 + goto_if_eq VAR_BRINEY_LOCATION, 1, EventScript_MoveMrBrineyToHouse + goto_if_eq VAR_BRINEY_LOCATION, 2, EventScript_MoveMrBrineyToDewford + goto_if_eq VAR_BRINEY_LOCATION, 3, EventScript_MoveMrBrineyToRoute109 end EventScript_MoveMrBrineyToHouse:: @@ -786,7 +784,7 @@ RusturfTunnel_EventScript_SetRusturfTunnelOpen:: EventScript_UnusedBoardFerry:: delay 30 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 showobjectat OBJ_EVENT_ID_PLAYER, 0 delay 30 @@ -800,10 +798,8 @@ Movement_UnusedBoardFerry: step_end Common_EventScript_FerryDepartIsland:: - compare VAR_FACING, DIR_SOUTH - call_if_eq Ferry_EventScript_DepartIslandSouth - compare VAR_FACING, DIR_WEST - call_if_eq Ferry_EventScript_DepartIslandWest + call_if_eq VAR_FACING, DIR_SOUTH, Ferry_EventScript_DepartIslandSouth + call_if_eq VAR_FACING, DIR_WEST, Ferry_EventScript_DepartIslandWest delay 30 hideobjectat OBJ_EVENT_ID_PLAYER, 0 call Common_EventScript_FerryDepart @@ -819,7 +815,7 @@ Common_EventScript_NameReceivedPartyMon:: return Common_EventScript_PlayerHandedOverTheItem:: - bufferitemname 0, VAR_0x8004 + bufferitemname STR_VAR_1, VAR_0x8004 playfanfare MUS_OBTAIN_TMHM message gText_PlayerHandedOverTheItem waitmessage @@ -956,7 +952,7 @@ gText_LegendaryFlewAway:: .string "The {STR_VAR_1} flew away!$" .include "data/text/pc_transfer.inc" - .include "data/text/mevent.inc" + .include "data/text/questionnaire.inc" .include "data/text/abnormal_weather.inc" EventScript_SelectWithoutRegisteredItem:: @@ -1000,13 +996,13 @@ Common_EventScript_LegendaryFlewAway:: fadescreenswapbuffers FADE_TO_BLACK removeobject VAR_LAST_TALKED fadescreenswapbuffers FADE_FROM_BLACK - bufferspeciesname 0, VAR_0x8004 + bufferspeciesname STR_VAR_1, VAR_0x8004 msgbox gText_LegendaryFlewAway, MSGBOX_DEFAULT release end .include "data/scripts/pc_transfer.inc" - .include "data/scripts/mevent.inc" + .include "data/scripts/questionnaire.inc" .include "data/scripts/abnormal_weather.inc" .include "data/scripts/trainer_script.inc" .include "data/scripts/berry_tree.inc" @@ -1026,7 +1022,7 @@ Common_EventScript_LegendaryFlewAway:: .include "data/scripts/mauville_man.inc" .include "data/scripts/field_move_scripts.inc" .include "data/scripts/item_ball_scripts.inc" - .include "data/scripts/mystery_event_club.inc" + .include "data/scripts/profile_man.inc" .include "data/scripts/day_care.inc" .include "data/scripts/flash.inc" .include "data/scripts/players_house.inc" diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 1c97da8fe4..49fcf798b6 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -50,7 +50,7 @@ gFieldEffectScriptPointers:: .4byte gFieldEffectScript_HotSpringsWater @ FLDEFF_HOT_SPRINGS_WATER .4byte gFieldEffectScript_UseWaterfall @ FLDEFF_USE_WATERFALL .4byte gFieldEffectScript_UseDive @ FLDEFF_USE_DIVE - .4byte gFieldEffectScript_Pokeball @ FLDEFF_POKEBALL + .4byte gFieldEffectScript_PokeballTrail @ FLDEFF_POKEBALL_TRAIL .4byte gFieldEffectScript_HeartIcon @ FLDEFF_HEART_ICON .4byte gFieldEffectScript_Nop47 @ FLDEFF_NOP_47 .4byte gFieldEffectScript_Nop48 @ FLDEFF_NOP_48 @@ -254,9 +254,9 @@ gFieldEffectScript_UseDive:: field_eff_callnative FldEff_UseDive field_eff_end -gFieldEffectScript_Pokeball:: +gFieldEffectScript_PokeballTrail:: field_eff_loadpal gSpritePalette_Pokeball - field_eff_callnative FldEff_Pokeball + field_eff_callnative FldEff_PokeballTrail field_eff_end gFieldEffectScript_HeartIcon:: diff --git a/data/fonts.s b/data/fonts.s deleted file mode 100644 index 9283724814..0000000000 --- a/data/fonts.s +++ /dev/null @@ -1,76 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gFont8LatinGlyphs:: - .incbin "graphics/fonts/font8.latfont" - - .align 2 -gFont8LatinGlyphWidths:: - .include "graphics/fonts/font8_latin_widths.inc" - - .align 2 -gFont0LatinGlyphs:: - .incbin "graphics/fonts/font0.latfont" - - .align 2 -gFont0LatinGlyphWidths:: - .include "graphics/fonts/font0_latin_widths.inc" - - .align 2 -gFont7LatinGlyphs:: - .incbin "graphics/fonts/font7.latfont" - - .align 2 -gFont7LatinGlyphWidths:: - .include "graphics/fonts/font7_latin_widths.inc" - - .align 2 -gFont2LatinGlyphs:: - .incbin "graphics/fonts/font2.latfont" - - .align 2 -gFont2LatinGlyphWidths:: - .include "graphics/fonts/font2_latin_widths.inc" - - .align 2 -gFont1LatinGlyphs:: - .incbin "graphics/fonts/font1.latfont" - - .align 2 -gFont1LatinGlyphWidths:: - .include "graphics/fonts/font1_latin_widths.inc" - - .align 2 -gFont0JapaneseGlyphs:: - .incbin "graphics/fonts/font0.hwjpnfont" - - .align 2 -gFont1JapaneseGlyphs:: - .incbin "graphics/fonts/font1.hwjpnfont" - - .align 2 -gUnusedJapaneseFireRedLeafGreenMaleFontGlyphs:: - .incbin "graphics/fonts/unused_frlg_male.fwjpnfont" - - .align 2 -gUnusedJapaneseFireRedLeafGreenMaleFontGlyphWidths:: - .include "graphics/fonts/unused_japanese_frlg_male_font_widths.inc" - - .align 2 -gUnusedJapaneseFireRedLeafGreenFemaleFontGlyphs:: - .incbin "graphics/fonts/unused_frlg_female.fwjpnfont" - - .align 2 -gUnusedJapaneseFireRedLeafGreenFemaleFontGlyphWidths:: - .include "graphics/fonts/unused_japanese_frlg_female_font_widths.inc" - - .align 2 -gFont2JapaneseGlyphs:: - .incbin "graphics/fonts/font2.fwjpnfont" - - .align 2 -gFont2JapaneseGlyphWidths:: - .include "graphics/fonts/font2_japanese_widths.inc" diff --git a/data/map_events.s b/data/map_events.s index dcbb9cfb17..cfa5799d37 100644 --- a/data/map_events.s +++ b/data/map_events.s @@ -1,3 +1,4 @@ +#include "constants/global.h" #include "constants/event_bg.h" #include "constants/event_object_movement.h" #include "constants/event_objects.h" diff --git a/data/maps.s b/data/maps.s index beb28ddec8..9d9ac2101c 100644 --- a/data/maps.s +++ b/data/maps.s @@ -1,3 +1,4 @@ +#include "constants/global.h" #include "constants/layouts.h" #include "constants/map_types.h" #include "constants/maps.h" diff --git a/data/maps/AbandonedShip_CaptainsOffice/scripts.inc b/data/maps/AbandonedShip_CaptainsOffice/scripts.inc index 99dfa7bd80..7c59fec967 100644 --- a/data/maps/AbandonedShip_CaptainsOffice/scripts.inc +++ b/data/maps/AbandonedShip_CaptainsOffice/scripts.inc @@ -5,9 +5,8 @@ AbandonedShip_CaptainsOffice_EventScript_CaptSternAide:: lock faceplayer goto_if_set FLAG_EXCHANGED_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus - checkitem ITEM_SCANNER, 1 - compare VAR_RESULT, TRUE - goto_if_eq AbandonedShip_CaptainsOffice_EventScript_CanYouDeliverScanner + checkitem ITEM_SCANNER + goto_if_eq VAR_RESULT, TRUE, AbandonedShip_CaptainsOffice_EventScript_CanYouDeliverScanner goto_if_set FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus msgbox AbandonedShip_CaptainsOffice_Text_NoSuccessFindingScanner, MSGBOX_DEFAULT release diff --git a/data/maps/AbandonedShip_Corridors_B1F/scripts.inc b/data/maps/AbandonedShip_Corridors_B1F/scripts.inc index dd70c9dd32..19f103362e 100644 --- a/data/maps/AbandonedShip_Corridors_B1F/scripts.inc +++ b/data/maps/AbandonedShip_Corridors_B1F/scripts.inc @@ -4,7 +4,7 @@ AbandonedShip_Corridors_B1F_MapScripts:: .byte 0 AbandonedShip_Corridors_B1F_OnResume: - setdivewarp MAP_ABANDONED_SHIP_UNDERWATER1, 255, 5, 4 + setdivewarp MAP_ABANDONED_SHIP_UNDERWATER1, 5, 4 end AbandonedShip_Corridors_B1F_OnLoad: @@ -13,11 +13,11 @@ AbandonedShip_Corridors_B1F_OnLoad: end AbandonedShip_Corridors_B1F_EventScript_LockStorageRoom:: - setmetatile 11, 4, METATILE_InsideShip_IntactDoor_Bottom_Locked, 1 + setmetatile 11, 4, METATILE_InsideShip_IntactDoor_Bottom_Locked, TRUE return AbandonedShip_Corridors_B1F_EventScript_UnlockStorageRoom:: - setmetatile 11, 4, METATILE_InsideShip_IntactDoor_Bottom_Unlocked, 1 + setmetatile 11, 4, METATILE_InsideShip_IntactDoor_Bottom_Unlocked, TRUE return AbandonedShip_Corridors_B1F_EventScript_TuberM:: @@ -27,9 +27,8 @@ AbandonedShip_Corridors_B1F_EventScript_TuberM:: AbandonedShip_Corridors_B1F_EventScript_StorageRoomDoor:: lockall goto_if_set FLAG_USED_STORAGE_KEY, AbandonedShip_Corridors_B1F_EventScript_DoorIsUnlocked - checkitem ITEM_STORAGE_KEY, 1 - compare VAR_RESULT, FALSE - goto_if_eq AbandonedShip_Corridors_B1F_EventScript_DoorIsLocked + checkitem ITEM_STORAGE_KEY + goto_if_eq VAR_RESULT, FALSE, AbandonedShip_Corridors_B1F_EventScript_DoorIsLocked msgbox AbandonedShip_Corridors_B1F_Text_InsertedStorageKey, MSGBOX_DEFAULT playse SE_PIN removeitem ITEM_STORAGE_KEY diff --git a/data/maps/AbandonedShip_HiddenFloorCorridors/scripts.inc b/data/maps/AbandonedShip_HiddenFloorCorridors/scripts.inc index 4ec63a7e10..23f4573b9b 100644 --- a/data/maps/AbandonedShip_HiddenFloorCorridors/scripts.inc +++ b/data/maps/AbandonedShip_HiddenFloorCorridors/scripts.inc @@ -4,7 +4,7 @@ AbandonedShip_HiddenFloorCorridors_MapScripts:: .byte 0 AbandonedShip_HiddenFloorCorridors_OnResume: - setdivewarp MAP_ABANDONED_SHIP_UNDERWATER1, 255, 5, 4 + setdivewarp MAP_ABANDONED_SHIP_UNDERWATER1, 5, 4 end AbandonedShip_HiddenFloorCorridors_OnLoad: @@ -19,46 +19,45 @@ AbandonedShip_HiddenFloorCorridors_OnLoad: end AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom1:: - setmetatile 3, 8, METATILE_InsideShip_IntactDoor_Bottom_Unlocked, 1 + setmetatile 3, 8, METATILE_InsideShip_IntactDoor_Bottom_Unlocked, TRUE return AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom2:: - setmetatile 6, 8, METATILE_InsideShip_IntactDoor_Bottom_Unlocked, 1 + setmetatile 6, 8, METATILE_InsideShip_IntactDoor_Bottom_Unlocked, TRUE return AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom4:: - setmetatile 3, 3, METATILE_InsideShip_DoorIndent_Unlocked, 0 + setmetatile 3, 3, METATILE_InsideShip_DoorIndent_Unlocked, FALSE return AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom6:: - setmetatile 9, 3, METATILE_InsideShip_DoorIndent_Unlocked, 0 + setmetatile 9, 3, METATILE_InsideShip_DoorIndent_Unlocked, FALSE return AbandonedShip_HiddenFloorCorridors_EventScript_LockRoom1:: - setmetatile 3, 8, METATILE_InsideShip_IntactDoor_Bottom_Locked, 1 + setmetatile 3, 8, METATILE_InsideShip_IntactDoor_Bottom_Locked, TRUE return AbandonedShip_HiddenFloorCorridors_EventScript_LockRoom2:: - setmetatile 6, 8, METATILE_InsideShip_IntactDoor_Bottom_Locked, 1 + setmetatile 6, 8, METATILE_InsideShip_IntactDoor_Bottom_Locked, TRUE return AbandonedShip_HiddenFloorCorridors_EventScript_LockRoom4:: - setmetatile 3, 3, METATILE_InsideShip_DoorIndent_Locked, 0 + setmetatile 3, 3, METATILE_InsideShip_DoorIndent_Locked, FALSE return AbandonedShip_HiddenFloorCorridors_EventScript_LockRoom6:: - setmetatile 9, 3, METATILE_InsideShip_DoorIndent_Locked, 0 + setmetatile 9, 3, METATILE_InsideShip_DoorIndent_Locked, FALSE return AbandonedShip_HiddenFloorCorridors_EventScript_Room1Door:: lockall goto_if_set FLAG_USED_ROOM_1_KEY, AbandonedShip_HiddenFloorCorridors_EventScript_TheDoorIsOpen - checkitem ITEM_ROOM_1_KEY, 1 - compare VAR_RESULT, FALSE - goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_Rm1IsLocked + checkitem ITEM_KEY_TO_ROOM_1 + goto_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorCorridors_EventScript_Rm1IsLocked msgbox AbandonedShip_HiddenFloorCorridors_Text_InsertedKey, MSGBOX_DEFAULT playse SE_PIN - removeitem ITEM_ROOM_1_KEY + removeitem ITEM_KEY_TO_ROOM_1 setflag FLAG_USED_ROOM_1_KEY call AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom1 special DrawWholeMapView @@ -68,12 +67,11 @@ AbandonedShip_HiddenFloorCorridors_EventScript_Room1Door:: AbandonedShip_HiddenFloorCorridors_EventScript_Room2Door:: lockall goto_if_set FLAG_USED_ROOM_2_KEY, AbandonedShip_HiddenFloorCorridors_EventScript_TheDoorIsOpen - checkitem ITEM_ROOM_2_KEY, 1 - compare VAR_RESULT, FALSE - goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_Rm2IsLocked + checkitem ITEM_KEY_TO_ROOM_2 + goto_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorCorridors_EventScript_Rm2IsLocked msgbox AbandonedShip_HiddenFloorCorridors_Text_InsertedKey, MSGBOX_DEFAULT playse SE_PIN - removeitem ITEM_ROOM_2_KEY + removeitem ITEM_KEY_TO_ROOM_2 setflag FLAG_USED_ROOM_2_KEY call AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom2 special DrawWholeMapView @@ -83,12 +81,11 @@ AbandonedShip_HiddenFloorCorridors_EventScript_Room2Door:: AbandonedShip_HiddenFloorCorridors_EventScript_Room4Door:: lockall goto_if_set FLAG_USED_ROOM_4_KEY, AbandonedShip_HiddenFloorCorridors_EventScript_TheDoorIsOpen - checkitem ITEM_ROOM_4_KEY, 1 - compare VAR_RESULT, FALSE - goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_Rm4IsLocked + checkitem ITEM_KEY_TO_ROOM_4 + goto_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorCorridors_EventScript_Rm4IsLocked msgbox AbandonedShip_HiddenFloorCorridors_Text_InsertedKey, MSGBOX_DEFAULT playse SE_PIN - removeitem ITEM_ROOM_4_KEY + removeitem ITEM_KEY_TO_ROOM_4 setflag FLAG_USED_ROOM_4_KEY call AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom4 special DrawWholeMapView @@ -98,12 +95,11 @@ AbandonedShip_HiddenFloorCorridors_EventScript_Room4Door:: AbandonedShip_HiddenFloorCorridors_EventScript_Room6Door:: lockall goto_if_set FLAG_USED_ROOM_6_KEY, AbandonedShip_HiddenFloorCorridors_EventScript_TheDoorIsOpen - checkitem ITEM_ROOM_6_KEY, 1 - compare VAR_RESULT, FALSE - goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_Rm6IsLocked + checkitem ITEM_KEY_TO_ROOM_6 + goto_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorCorridors_EventScript_Rm6IsLocked msgbox AbandonedShip_HiddenFloorCorridors_Text_InsertedKey, MSGBOX_DEFAULT playse SE_PIN - removeitem ITEM_ROOM_6_KEY + removeitem ITEM_KEY_TO_ROOM_6 setflag FLAG_USED_ROOM_6_KEY call AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom6 special DrawWholeMapView diff --git a/data/maps/AbandonedShip_HiddenFloorRooms/map.json b/data/maps/AbandonedShip_HiddenFloorRooms/map.json index b81c33c843..8b6e05f12f 100644 --- a/data/maps/AbandonedShip_HiddenFloorRooms/map.json +++ b/data/maps/AbandonedShip_HiddenFloorRooms/map.json @@ -139,7 +139,7 @@ "x": 42, "y": 10, "elevation": 3, - "item": "ITEM_ROOM_1_KEY", + "item": "ITEM_KEY_TO_ROOM_1", "flag": "FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY" }, { @@ -147,7 +147,7 @@ "x": 20, "y": 5, "elevation": 3, - "item": "ITEM_ROOM_2_KEY", + "item": "ITEM_KEY_TO_ROOM_2", "flag": "FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY" }, { @@ -155,7 +155,7 @@ "x": 1, "y": 12, "elevation": 3, - "item": "ITEM_ROOM_4_KEY", + "item": "ITEM_KEY_TO_ROOM_4", "flag": "FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY" }, { @@ -163,7 +163,7 @@ "x": 1, "y": 2, "elevation": 0, - "item": "ITEM_ROOM_6_KEY", + "item": "ITEM_KEY_TO_ROOM_6", "flag": "FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY" }, { diff --git a/data/maps/AbandonedShip_HiddenFloorRooms/scripts.inc b/data/maps/AbandonedShip_HiddenFloorRooms/scripts.inc index cdeb225de2..e9b14b7b0b 100644 --- a/data/maps/AbandonedShip_HiddenFloorRooms/scripts.inc +++ b/data/maps/AbandonedShip_HiddenFloorRooms/scripts.inc @@ -17,12 +17,9 @@ AbandonedShip_HiddenFloorRooms_EventScript_DoHiddenItemSparkle:: setvar VAR_TEMP_1, 1 getplayerxy VAR_TEMP_2, VAR_TEMP_3 setvar VAR_TEMP_4, 1 - compare VAR_TEMP_2, 21 - call_if_eq AbandonedShip_HiddenFloorRooms_EventScript_InMiddleRoomColumn - compare VAR_TEMP_2, 36 - call_if_eq AbandonedShip_HiddenFloorRooms_EventScript_InRightRoomColumn - compare VAR_TEMP_3, 2 - call_if_eq AbandonedShip_HiddenFloorRooms_EventScript_InUpperRoomRow + call_if_eq VAR_TEMP_2, 21, AbandonedShip_HiddenFloorRooms_EventScript_InMiddleRoomColumn + call_if_eq VAR_TEMP_2, 36, AbandonedShip_HiddenFloorRooms_EventScript_InRightRoomColumn + call_if_eq VAR_TEMP_3, 2, AbandonedShip_HiddenFloorRooms_EventScript_InUpperRoomRow switch VAR_TEMP_4 case 1, AbandonedShip_HiddenFloorRooms_EventScript_EnterRm1 case 2, AbandonedShip_HiddenFloorRooms_EventScript_EnterRm2 @@ -48,8 +45,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_EnterRm1:: delay 20 dofieldeffectsparkle 10, 10, 0 specialvar VAR_RESULT, FoundAbandonedShipRoom4Key - compare VAR_RESULT, FALSE - call_if_eq AbandonedShip_HiddenFloorRooms_EventScript_Rm4KeySparkle + call_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorRooms_EventScript_Rm4KeySparkle waitfieldeffect FLDEFF_SPARKLE delay 10 end @@ -59,11 +55,9 @@ AbandonedShip_HiddenFloorRooms_EventScript_EnterRm2:: AbandonedShip_HiddenFloorRooms_EventScript_EnterRm3:: specialvar VAR_RESULT, FoundAbandonedShipRoom1Key - compare VAR_RESULT, TRUE - goto_if_eq AbandonedShip_HiddenFloorRooms_EventScript_Rm3NoSparkle + goto_if_eq VAR_RESULT, TRUE, AbandonedShip_HiddenFloorRooms_EventScript_Rm3NoSparkle delay 20 - compare VAR_RESULT, FALSE - call_if_eq AbandonedShip_HiddenFloorRooms_EventScript_Rm1KeySparkle + call_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorRooms_EventScript_Rm1KeySparkle waitfieldeffect FLDEFF_SPARKLE delay 10 end @@ -76,8 +70,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_EnterRm4:: dofieldeffectsparkle 8, 5, 0 dofieldeffectsparkle 11, 3, 0 specialvar VAR_RESULT, FoundAbandonedShipRoom6Key - compare VAR_RESULT, FALSE - call_if_eq AbandonedShip_HiddenFloorRooms_EventScript_Rm6KeySparkle + call_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorRooms_EventScript_Rm6KeySparkle waitfieldeffect FLDEFF_SPARKLE delay 10 end @@ -88,8 +81,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_EnterRm5:: dofieldeffectsparkle 25, 2, 0 dofieldeffectsparkle 24, 6, 0 specialvar VAR_RESULT, FoundAbandonedShipRoom2Key - compare VAR_RESULT, FALSE - call_if_eq AbandonedShip_HiddenFloorRooms_EventScript_Rm2KeySparkle + call_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorRooms_EventScript_Rm2KeySparkle waitfieldeffect FLDEFF_SPARKLE delay 10 end diff --git a/data/maps/AbandonedShip_Rooms2_1F/scripts.inc b/data/maps/AbandonedShip_Rooms2_1F/scripts.inc index e02d109b7b..b0f317ef28 100644 --- a/data/maps/AbandonedShip_Rooms2_1F/scripts.inc +++ b/data/maps/AbandonedShip_Rooms2_1F/scripts.inc @@ -4,8 +4,7 @@ AbandonedShip_Rooms2_1F_MapScripts:: AbandonedShip_Rooms2_1F_EventScript_Dan:: trainerbattle_double TRAINER_KIRA_AND_DAN_1, AbandonedShip_Rooms2_1F_Text_DanIntro, AbandonedShip_Rooms2_1F_Text_DanDefeat, AbandonedShip_Rooms2_1F_Text_DanNotEnoughMons, AbandonedShip_Rooms2_1F_EventScript_RegisterDan specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq AbandonedShip_Rooms2_1F_EventScript_DanRematch + goto_if_eq VAR_RESULT, TRUE, AbandonedShip_Rooms2_1F_EventScript_DanRematch msgbox AbandonedShip_Rooms2_1F_Text_DanPostBattle, MSGBOX_DEFAULT release end @@ -24,8 +23,7 @@ AbandonedShip_Rooms2_1F_EventScript_DanRematch:: AbandonedShip_Rooms2_1F_EventScript_Kira:: trainerbattle_double TRAINER_KIRA_AND_DAN_1, AbandonedShip_Rooms2_1F_Text_KiraIntro, AbandonedShip_Rooms2_1F_Text_KiraDefeat, AbandonedShip_Rooms2_1F_Text_KiraNotEnoughMons, AbandonedShip_Rooms2_1F_EventScript_RegisterKira specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq AbandonedShip_Rooms2_1F_EventScript_KiraRematch + goto_if_eq VAR_RESULT, TRUE, AbandonedShip_Rooms2_1F_EventScript_KiraRematch msgbox AbandonedShip_Rooms2_1F_Text_KiraPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/AbandonedShip_Rooms_1F/scripts.inc b/data/maps/AbandonedShip_Rooms_1F/scripts.inc index 41b4eb3b67..c8ea849640 100644 --- a/data/maps/AbandonedShip_Rooms_1F/scripts.inc +++ b/data/maps/AbandonedShip_Rooms_1F/scripts.inc @@ -13,8 +13,7 @@ AbandonedShip_Rooms_1F_EventScript_Demetrius:: AbandonedShip_Rooms_1F_EventScript_Thalia:: trainerbattle_single TRAINER_THALIA_1, AbandonedShip_Rooms_1F_Text_ThaliaIntro, AbandonedShip_Rooms_1F_Text_ThaliaDefeat, AbandonedShip_Rooms_1F_EventScript_RegisterThalia specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq AbandonedShip_Rooms_1F_EventScript_ThaliaRematch + goto_if_eq VAR_RESULT, TRUE, AbandonedShip_Rooms_1F_EventScript_ThaliaRematch msgbox AbandonedShip_Rooms_1F_Text_ThaliaPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/AbandonedShip_Rooms_B1F/scripts.inc b/data/maps/AbandonedShip_Rooms_B1F/scripts.inc index a716972ff4..484f15ba12 100644 --- a/data/maps/AbandonedShip_Rooms_B1F/scripts.inc +++ b/data/maps/AbandonedShip_Rooms_B1F/scripts.inc @@ -3,7 +3,7 @@ AbandonedShip_Rooms_B1F_MapScripts:: .byte 0 AbandonedShip_Rooms_B1F_OnResume: - setdivewarp MAP_ABANDONED_SHIP_UNDERWATER2, 255, 17, 4 + setdivewarp MAP_ABANDONED_SHIP_UNDERWATER2, 17, 4 end AbandonedShip_Rooms_B1F_EventScript_FatMan:: diff --git a/data/maps/AbandonedShip_Underwater1/scripts.inc b/data/maps/AbandonedShip_Underwater1/scripts.inc index 9b3528b779..0f47704d1a 100644 --- a/data/maps/AbandonedShip_Underwater1/scripts.inc +++ b/data/maps/AbandonedShip_Underwater1/scripts.inc @@ -3,6 +3,6 @@ AbandonedShip_Underwater1_MapScripts:: .byte 0 AbandonedShip_Underwater1_OnResume: - setdivewarp MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS, 255, 0, 10 + setdivewarp MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS, 0, 10 end diff --git a/data/maps/AbandonedShip_Underwater2/scripts.inc b/data/maps/AbandonedShip_Underwater2/scripts.inc index bb139bd510..6258b50c18 100644 --- a/data/maps/AbandonedShip_Underwater2/scripts.inc +++ b/data/maps/AbandonedShip_Underwater2/scripts.inc @@ -3,6 +3,6 @@ AbandonedShip_Underwater2_MapScripts:: .byte 0 AbandonedShip_Underwater2_OnResume: - setdivewarp MAP_ABANDONED_SHIP_ROOMS_B1F, 255, 13, 7 + setdivewarp MAP_ABANDONED_SHIP_ROOMS_B1F, 13, 7 end diff --git a/data/maps/AncientTomb/scripts.inc b/data/maps/AncientTomb/scripts.inc index 40d9f0dff0..dd22359558 100644 --- a/data/maps/AncientTomb/scripts.inc +++ b/data/maps/AncientTomb/scripts.inc @@ -10,8 +10,7 @@ AncientTomb_OnResume: AncientTomb_EventScript_TryRemoveRegisteel:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject VAR_LAST_TALKED return @@ -29,20 +28,18 @@ AncientTomb_OnLoad: end AncientTomb_EventScript_HideRegiEntrance:: - setmetatile 7, 19, METATILE_Cave_EntranceCover, 1 - setmetatile 8, 19, METATILE_Cave_EntranceCover, 1 - setmetatile 9, 19, METATILE_Cave_EntranceCover, 1 - setmetatile 7, 20, METATILE_Cave_SealedChamberBraille_Mid, 1 - setmetatile 8, 20, METATILE_Cave_SealedChamberBraille_Mid, 1 - setmetatile 9, 20, METATILE_Cave_SealedChamberBraille_Mid, 1 + setmetatile 7, 19, METATILE_Cave_EntranceCover, TRUE + setmetatile 8, 19, METATILE_Cave_EntranceCover, TRUE + setmetatile 9, 19, METATILE_Cave_EntranceCover, TRUE + setmetatile 7, 20, METATILE_Cave_SealedChamberBraille_Mid, TRUE + setmetatile 8, 20, METATILE_Cave_SealedChamberBraille_Mid, TRUE + setmetatile 9, 20, METATILE_Cave_SealedChamberBraille_Mid, TRUE return AncientTomb_EventScript_CaveEntranceMiddle:: lockall goto_if_set FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED, AncientTomb_EventScript_BigHoleInWall - braillemessage AncientTomb_Braille_ShineInTheMiddle - waitbuttonpress - closebraillemessage + braillemsgbox AncientTomb_Braille_ShineInTheMiddle releaseall end @@ -53,9 +50,7 @@ AncientTomb_EventScript_BigHoleInWall:: AncientTomb_EventScript_CaveEntranceSide:: lockall - braillemessage AncientTomb_Braille_ShineInTheMiddle - waitbuttonpress - closebraillemessage + braillemsgbox AncientTomb_Braille_ShineInTheMiddle releaseall end @@ -63,21 +58,18 @@ AncientTomb_EventScript_Registeel:: lock faceplayer waitse - playmoncry SPECIES_REGISTEEL, 2 + playmoncry SPECIES_REGISTEEL, CRY_MODE_ENCOUNTER delay 40 waitmoncry - setwildbattle SPECIES_REGISTEEL, 40, ITEM_NONE + setwildbattle SPECIES_REGISTEEL, 40 setflag FLAG_SYS_CTRL_OBJ_DELETE special StartRegiBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq AncientTomb_EventScript_DefeatedRegisteel - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq AncientTomb_EventScript_RanFromRegisteel - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq AncientTomb_EventScript_RanFromRegisteel + goto_if_eq VAR_RESULT, B_OUTCOME_WON, AncientTomb_EventScript_DefeatedRegisteel + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, AncientTomb_EventScript_RanFromRegisteel + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, AncientTomb_EventScript_RanFromRegisteel setflag FLAG_DEFEATED_REGISTEEL release end diff --git a/data/maps/AquaHideout_B1F/scripts.inc b/data/maps/AquaHideout_B1F/scripts.inc index 4a4a95cc44..f644f6ae56 100644 --- a/data/maps/AquaHideout_B1F/scripts.inc +++ b/data/maps/AquaHideout_B1F/scripts.inc @@ -9,8 +9,7 @@ AquaHideout_B1F_OnResume: AquaHideout_B1F_EventScript_TryRemoveElectrode:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject VAR_LAST_TALKED return @@ -30,21 +29,18 @@ AquaHideout_B1F_EventScript_ShowElectrode2:: AquaHideout_B1F_EventScript_Electrode1:: lock faceplayer - setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE + setwildbattle SPECIES_ELECTRODE, 30 waitse - playmoncry SPECIES_ELECTRODE, 2 + playmoncry SPECIES_ELECTRODE, CRY_MODE_ENCOUNTER delay 40 waitmoncry setflag FLAG_SYS_CTRL_OBJ_DELETE dowildbattle clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq AquaHideout_B1F_EventScript_DefeatedElectrode1 - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq AquaHideout_B1F_EventScript_DefeatedElectrode1 - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq AquaHideout_B1F_EventScript_DefeatedElectrode1 + goto_if_eq VAR_RESULT, B_OUTCOME_WON, AquaHideout_B1F_EventScript_DefeatedElectrode1 + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, AquaHideout_B1F_EventScript_DefeatedElectrode1 + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, AquaHideout_B1F_EventScript_DefeatedElectrode1 setflag FLAG_DEFEATED_ELECTRODE_1_AQUA_HIDEOUT release end @@ -57,21 +53,18 @@ AquaHideout_B1F_EventScript_DefeatedElectrode1:: AquaHideout_B1F_EventScript_Electrode2:: lock faceplayer - setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE + setwildbattle SPECIES_ELECTRODE, 30 waitse - playmoncry SPECIES_ELECTRODE, 2 + playmoncry SPECIES_ELECTRODE, CRY_MODE_ENCOUNTER delay 40 waitmoncry setflag FLAG_SYS_CTRL_OBJ_DELETE dowildbattle clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq AquaHideout_B1F_EventScript_DefeatedElectrode2 - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq AquaHideout_B1F_EventScript_DefeatedElectrode2 - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq AquaHideout_B1F_EventScript_DefeatedElectrode2 + goto_if_eq VAR_RESULT, B_OUTCOME_WON, AquaHideout_B1F_EventScript_DefeatedElectrode2 + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, AquaHideout_B1F_EventScript_DefeatedElectrode2 + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, AquaHideout_B1F_EventScript_DefeatedElectrode2 setflag FLAG_DEFEATED_ELECTRODE_2_AQUA_HIDEOUT release end diff --git a/data/maps/AquaHideout_B2F/scripts.inc b/data/maps/AquaHideout_B2F/scripts.inc index 95059fb6d3..7dc34676b3 100644 --- a/data/maps/AquaHideout_B2F/scripts.inc +++ b/data/maps/AquaHideout_B2F/scripts.inc @@ -34,14 +34,14 @@ AquaHideout_B2F_EventScript_Matt:: AquaHideout_B2F_EventScript_SubmarineEscape:: setvar VAR_0x8008, LOCALID_MATT setvar VAR_0x8009, LOCALID_SUBMARINE - applymovement VAR_0x8008, Common_Movement_WalkInPlaceFastestLeft + applymovement VAR_0x8008, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 delay 20 applymovement VAR_0x8008, Common_Movement_FacePlayer waitmovement 0 msgbox AquaHideout_B2F_Text_OurBossGotThroughHisPreparations, MSGBOX_DEFAULT closemessage - applymovement VAR_0x8008, Common_Movement_WalkInPlaceFastestLeft + applymovement VAR_0x8008, Common_Movement_WalkInPlaceFasterLeft applymovement VAR_0x8009, AquaHideout_B2F_Movement_SumbarineDepartLeft waitmovement 0 removeobject VAR_0x8009 diff --git a/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc index 4f7d3bd873..844ec070a6 100644 --- a/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc @@ -28,10 +28,8 @@ BattleFrontier_BattleArenaBattleRoom_OnTransition: BattleFrontier_BattleArenaBattleRoom_EventScript_SetPlayerGfx:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_SetPlayerGfxMale - compare VAR_RESULT, FEMALE - goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_SetPlayerGfxFemale + goto_if_eq VAR_RESULT, MALE, BattleFrontier_BattleArenaBattleRoom_EventScript_SetPlayerGfxMale + goto_if_eq VAR_RESULT, FEMALE, BattleFrontier_BattleArenaBattleRoom_EventScript_SetPlayerGfxFemale return BattleFrontier_BattleArenaBattleRoom_EventScript_SetPlayerGfxMale:: @@ -52,8 +50,7 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_EnterRoom:: applymovement LOCALID_PLAYER, BattleFrontier_BattleArenaBattleRoom_Movement_PlayerEnter waitmovement 0 frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_AnnounceTrainers + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleArenaBattleRoom_EventScript_AnnounceTrainers applymovement LOCALID_ATTENDANT, BattleFrontier_BattleArenaBattleRoom_Movement_WalkInPlaceDown applymovement LOCALID_PLAYER, BattleFrontier_BattleArenaBattleRoom_Movement_WalkInPlaceLeft setvar VAR_TEMP_2, 1 @@ -110,7 +107,7 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_DeclareOpponentWinner:: msgbox BattleFrontier_BattleArenaBattleRoom_Text_WinnerIsOpponent, MSGBOX_DEFAULT BattleFrontier_BattleArenaBattleRoom_EventScript_WarpToLobbyLost:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST - warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY, 255, 7, 8 + warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY, 7, 8 waitstate BattleFrontier_BattleArenaBattleRoom_EventScript_DefeatedOpponent:: @@ -137,24 +134,16 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_DefeatedOpponent:: BattleFrontier_BattleArenaBattleRoom_EventScript_AskReadyForOpponent:: frontier_getbrainstatus copyvar VAR_TEMP_F, VAR_RESULT - compare VAR_RESULT, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattleArenaBattleRoom_EventScript_TycoonUpNext + goto_if_ne VAR_RESULT, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleArenaBattleRoom_EventScript_TycoonUpNext frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 1 - call_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor2ndOpponent - compare VAR_RESULT, 2 - call_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor3rdOpponent - compare VAR_RESULT, 3 - call_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor4thOpponent - compare VAR_RESULT, 4 - call_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor5thOpponent - compare VAR_RESULT, 5 - call_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor6thOpponent - compare VAR_RESULT, 6 - call_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor7thOpponent + call_if_eq VAR_RESULT, 1, BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor2ndOpponent + call_if_eq VAR_RESULT, 2, BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor3rdOpponent + call_if_eq VAR_RESULT, 3, BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor4thOpponent + call_if_eq VAR_RESULT, 4, BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor5thOpponent + call_if_eq VAR_RESULT, 5, BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor6thOpponent + call_if_eq VAR_RESULT, 6, BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor7thOpponent call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_AskReadyForOpponentNoRecord + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleArenaBattleRoom_EventScript_AskReadyForOpponentNoRecord multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, TRUE switch VAR_RESULT case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_ContinueChallenge @@ -210,7 +199,7 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_ContinueChallenge:: BattleFrontier_BattleArenaBattleRoom_EventScript_ReturnToLobbyWon:: delay 60 frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_WON - warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY, 255, 7, 8 + warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY, 7, 8 waitstate BattleFrontier_BattleArenaBattleRoom_EventScript_ReadyFor2ndOpponent:: @@ -254,16 +243,14 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_PauseChallenge:: end BattleFrontier_BattleArenaBattleRoom_EventScript_TycoonUpNext:: - compare VAR_TEMP_2, 1 - goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_AskReadyForTycoon + goto_if_eq VAR_TEMP_2, 1, BattleFrontier_BattleArenaBattleRoom_EventScript_AskReadyForTycoon msgbox BattleFrontier_BattleArenaBattleRoom_Text_NowFaceTycoon, MSGBOX_DEFAULT setvar VAR_TEMP_2, 1 BattleFrontier_BattleArenaBattleRoom_EventScript_AskReadyForTycoon:: message BattleFrontier_BattleArenaBattleRoom_Text_PreparedForTycoon waitmessage call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_AskReadyForTycoonNoRecord + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleArenaBattleRoom_EventScript_AskReadyForTycoonNoRecord multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, TRUE switch VAR_RESULT case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGreta @@ -309,8 +296,7 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGreta:: case FRONTIER_BRAIN_STREAK, BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGretaSilver case FRONTIER_BRAIN_STREAK_LONG, BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGretaGold frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGretaSilver + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGretaSilver msgbox BattleFrontier_BattleArenaBattleRoom_Text_GretaYoureChallenger, MSGBOX_DEFAULT closemessage frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH @@ -324,15 +310,13 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGreta:: BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGretaSilver:: msgbox BattleFrontier_BattleArenaBattleRoom_Text_IgniteMyPassionForBattle, MSGBOX_DEFAULT call BattleFrontier_BattleArenaBattleRoom_EventScript_StartArenaBattle - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_DefeatedGretaSilver + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattleArenaBattleRoom_EventScript_DefeatedGretaSilver goto BattleFrontier_BattleArenaBattleRoom_EventScript_DeclareOpponentWinner BattleFrontier_BattleArenaBattleRoom_EventScript_DefeatedGretaSilver:: call BattleFrontier_BattleArenaBattleRoom_EventScript_DeclarePlayerWinner frontier_getsymbols - compare VAR_RESULT, 0 - goto_if_ne BattleFrontier_BattleArenaBattleRoom_EventScript_ReturnToLobbyWon + goto_if_ne VAR_RESULT, 0, BattleFrontier_BattleArenaBattleRoom_EventScript_ReturnToLobbyWon applymovement LOCALID_OPPONENT, BattleFrontier_BattleArenaBattleRoom_Movement_OpponentStepForwardLong waitmovement 0 msgbox BattleFrontier_BattleArenaBattleRoom_Text_GretaYoureToughAfterAll, MSGBOX_DEFAULT @@ -346,8 +330,7 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_DefeatedGretaSilver:: BattleFrontier_BattleArenaBattleRoom_EventScript_IntroGretaGold:: frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGretaGold + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGretaGold msgbox BattleFrontier_BattleArenaBattleRoom_Text_GretaLookingForwardToSeeingAgain, MSGBOX_DEFAULT closemessage frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH @@ -361,15 +344,13 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_IntroGretaGold:: BattleFrontier_BattleArenaBattleRoom_EventScript_BattleGretaGold:: msgbox BattleFrontier_BattleArenaBattleRoom_Text_LetsGetThisStarted, MSGBOX_DEFAULT call BattleFrontier_BattleArenaBattleRoom_EventScript_StartArenaBattle - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_DefeatedGretaGold + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattleArenaBattleRoom_EventScript_DefeatedGretaGold goto BattleFrontier_BattleArenaBattleRoom_EventScript_DeclareOpponentWinner BattleFrontier_BattleArenaBattleRoom_EventScript_DefeatedGretaGold:: call BattleFrontier_BattleArenaBattleRoom_EventScript_DeclarePlayerWinner frontier_getsymbols - compare VAR_RESULT, 2 - goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_ReturnToLobbyWon + goto_if_eq VAR_RESULT, 2, BattleFrontier_BattleArenaBattleRoom_EventScript_ReturnToLobbyWon applymovement LOCALID_OPPONENT, BattleFrontier_BattleArenaBattleRoom_Movement_OpponentStepForwardLong waitmovement 0 msgbox BattleFrontier_BattleArenaBattleRoom_Text_GretaBlownAway, MSGBOX_DEFAULT @@ -426,15 +407,15 @@ BattleFrontier_BattleArenaBattleRoom_Movement_PlayerStepForward: BattleFrontier_BattleArenaBattleRoom_Movement_PlayerWalkBackToLine: walk_left walk_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end BattleFrontier_BattleArenaBattleRoom_Movement_WalkInPlaceLeft: - walk_in_place_fastest_up + walk_in_place_faster_up step_end BattleFrontier_BattleArenaBattleRoom_Movement_WalkInPlaceRight: - walk_in_place_fastest_right + walk_in_place_faster_right step_end BattleFrontier_BattleArenaBattleRoom_Movement_OpponentEnter: @@ -475,12 +456,12 @@ BattleFrontier_BattleArenaBattleRoom_Movement_JumpInPlaceUp: step_end BattleFrontier_BattleArenaBattleRoom_Movement_WalkInPlaceDown: - walk_in_place_fastest_down + walk_in_place_faster_down step_end @ Unused, redundant BattleFrontier_BattleArenaBattleRoom_Movement_WalkInPlaceRight2: - walk_in_place_fastest_right + walk_in_place_faster_right step_end BattleFrontier_BattleArenaBattleRoom_OnWarp: @@ -497,19 +478,19 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_SetUpRoomObjects:: BattleFrontier_BattleArenaBattleRoom_Movement_GretaLookAroundPlayer: walk_down - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 delay_16 delay_16 delay_16 walk_up walk_up - walk_in_place_fastest_left + walk_in_place_faster_left step_end BattleFrontier_BattleArenaBattleRoom_Movement_GretaWalkBackToCenter: walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end BattleFrontier_BattleArenaBattleRoom_Text_PlayerStepForward: diff --git a/data/maps/BattleFrontier_BattleArenaCorridor/scripts.inc b/data/maps/BattleFrontier_BattleArenaCorridor/scripts.inc index fe808159e2..7086819569 100644 --- a/data/maps/BattleFrontier_BattleArenaCorridor/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaCorridor/scripts.inc @@ -22,7 +22,7 @@ BattleFrontier_BattleArenaCorridor_EventScript_WalkToBattleRoom:: applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleArenaCorridor_Movement_PlayerEnterDoor waitmovement 0 setvar VAR_0x8006, 0 - warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM, 255, 7, 5 + warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM, 7, 5 waitstate end @@ -78,12 +78,12 @@ BattleFrontier_BattleArenaCorridor_Movement_AttendantWalkToDoor: step_end BattleFrontier_BattleArenaCorridor_Movement_AttendantFacePlayer: - walk_in_place_fastest_left + walk_in_place_faster_left step_end BattleFrontier_BattleArenaCorridor_Movement_AttendantMoveOutOfWay: walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end BattleFrontier_BattleArenaCorridor_Text_PleaseStepIn: diff --git a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc index 287fd4639a..9467f34197 100644 --- a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc @@ -40,8 +40,7 @@ BattleFrontier_BattleArenaLobby_EventScript_QuitWithoutSaving:: BattleFrontier_BattleArenaLobby_EventScript_WonChallenge:: lockall frontier_isbrain - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleArenaLobby_EventScript_DefeatedTycoon + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleArenaLobby_EventScript_DefeatedTycoon msgbox BattleFrontier_BattleArenaLobby_Text_CongratsOnSevenWins, MSGBOX_DEFAULT goto BattleFrontier_BattleArenaLobby_EventScript_GiveBattlePoints @@ -80,8 +79,7 @@ BattleFrontier_BattleArenaLobby_EventScript_SaveAfterChallenge:: playse SE_SAVE waitse call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleArenaLobby_EventScript_EndSaveAfterChallenge + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleArenaLobby_EventScript_EndSaveAfterChallenge message BattleFrontier_BattleArenaLobby_Text_RecordLastMatch waitmessage multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE @@ -131,8 +129,7 @@ BattleFrontier_BattleArenaLobby_EventScript_TryEnterChallenge:: case FRONTIER_LVL_TENT, BattleFrontier_BattleArenaLobby_EventScript_CancelChallenge case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_CancelChallenge frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleArenaLobby_Text_SelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -141,8 +138,7 @@ BattleFrontier_BattleArenaLobby_EventScript_TryEnterChallenge:: setvar VAR_0x8005, FRONTIER_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleArenaLobby_EventScript_LoadPartyAndCancelChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleArenaLobby_EventScript_LoadPartyAndCancelChallenge msgbox BattleFrontier_BattleArenaLobby_Text_OkayToSave, MSGBOX_YESNO switch VAR_RESULT case NO, BattleFrontier_BattleArenaLobby_EventScript_LoadPartyAndCancelChallenge @@ -161,19 +157,16 @@ BattleFrontier_BattleArenaLobby_EventScript_SaveBeforeChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleArenaLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleArenaLobby_EventScript_CancelChallengeSaveFailed BattleFrontier_BattleArenaLobby_EventScript_EnterChallenge:: special SavePlayerParty frontier_setpartyorder FRONTIER_PARTY_SIZE msgbox BattleFrontier_BattleArenaLobby_Text_GuideYouToArena, MSGBOX_DEFAULT closemessage frontier_get FRONTIER_DATA_LVL_MODE - compare VAR_RESULT, FRONTIER_LVL_50 - call_if_eq BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLv50 - compare VAR_RESULT, FRONTIER_LVL_OPEN - call_if_eq BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLvOpen - warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR, 255, 9, 13 + call_if_eq VAR_RESULT, FRONTIER_LVL_50, BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLv50 + call_if_eq VAR_RESULT, FRONTIER_LVL_OPEN, BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLvOpen + warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR, 9, 13 setvar VAR_TEMP_0, 0 waitstate end @@ -247,7 +240,7 @@ BattleFrontier_BattleArenaLobby_Movement_PlayerWalkToLeftDoor: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end BattleFrontier_BattleArenaLobby_Movement_PlayerEnterDoor: @@ -289,7 +282,7 @@ BattleFrontier_BattleArenaLobby_Movement_PlayerWalkToRightDoor: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end BattleFrontier_BattleArenaLobby_EventScript_ShowResults:: diff --git a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc index b092d56034..def903b1df 100644 --- a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc @@ -5,6 +5,10 @@ .set LOCALID_PLAYER, 13 .set LOCALID_OPPONENT, 15 +.set NO_DRAW, 0 +.set DRAW_TRAINER, 1 +.set DRAW_TUCKER, 2 + BattleFrontier_BattleDomeBattleRoom_MapScripts:: map_script MAP_SCRIPT_ON_TRANSITION, BattleFrontier_BattleDomeBattleRoom_OnTransition map_script MAP_SCRIPT_ON_FRAME_TABLE, BattleFrontier_BattleDomeBattleRoom_OnFrame @@ -12,25 +16,18 @@ BattleFrontier_BattleDomeBattleRoom_MapScripts:: map_script MAP_SCRIPT_ON_RESUME, BattleFrontier_BattleDomeBattleRoom_OnResume .byte 0 - .set NO_DRAW, 0 - .set DRAW_TRAINER, 1 - .set DRAW_TUCKER, 2 - BattleFrontier_BattleDomeBattleRoom_OnTransition: dome_setopponentgfx frontier_get FRONTIER_DATA_BATTLE_NUM copyvar VAR_TEMP_F, VAR_RESULT - compare VAR_RESULT, DOME_ROUND1 - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_SetWalkingAudienceMemberPos + call_if_eq VAR_RESULT, DOME_ROUND1, BattleFrontier_BattleDomeBattleRoom_EventScript_SetWalkingAudienceMemberPos call BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfx end BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfx:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfxMale - compare VAR_RESULT, FEMALE - goto_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfxFemale + goto_if_eq VAR_RESULT, MALE, BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfxMale + goto_if_eq VAR_RESULT, FEMALE, BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfxFemale return BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfxMale:: @@ -48,18 +45,15 @@ BattleFrontier_BattleDomeBattleRoom_OnFrame: BattleFrontier_BattleDomeBattleRoom_EventScript_EnterRoom:: lockall call BattleFrontier_BattleDomeBattleRoom_EventScript_GetRoundNum - compare VAR_RESULT, DOME_ROUND1 - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_TryDoAudienceMemberWalkToSeat + call_if_eq VAR_RESULT, DOME_ROUND1, BattleFrontier_BattleDomeBattleRoom_EventScript_TryDoAudienceMemberWalkToSeat applymovement LOCALID_ANNOUNCER, Common_Movement_WalkInPlaceDown waitmovement 0 call BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayer msgbox BattleFrontier_BattleDomeBattleRoom_Text_PlayerHasEnteredDome, MSGBOX_DEFAULT closemessage showobjectat LOCALID_PLAYER, MAP_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM - compare VAR_TEMP_F, DOME_FINAL - goto_if_ne BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerEnter - compare VAR_TEMP_E, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerEnterForTucker + goto_if_ne VAR_TEMP_F, DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerEnter + goto_if_ne VAR_TEMP_E, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerEnterForTucker BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerEnter:: applymovement LOCALID_PLAYER, BattleFrontier_BattleDomeBattleRoom_Movement_PlayerEnter goto BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceReactToPlayer @@ -70,10 +64,8 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceReactToPlayer:: playse SE_M_ENCORE2 call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround waitmovement 0 - compare VAR_TEMP_F, DOME_FINAL - goto_if_ne BattleFrontier_BattleDomeBattleRoom_EventScript_BattleOpponent - compare VAR_TEMP_E, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattleDomeBattleRoom_EventScript_AnnounceTucker + goto_if_ne VAR_TEMP_F, DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_BattleOpponent + goto_if_ne VAR_TEMP_E, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnounceTucker BattleFrontier_BattleDomeBattleRoom_EventScript_BattleOpponent:: dome_getopponentname msgbox BattleFrontier_BattleDomeBattleRoom_Text_PlayerVersusTrainer, MSGBOX_DEFAULT @@ -105,8 +97,7 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_Draw:: delay 180 applymovement LOCALID_REFEREE, BattleFrontier_BattleDomeBattleRoom_Movement_RefereeExit waitmovement 0 - compare VAR_TEMP_2, DRAW_TUCKER @ Tucker always wins on a draw - goto_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_LostToOpponent + goto_if_eq VAR_TEMP_2, DRAW_TUCKER, BattleFrontier_BattleDomeBattleRoom_EventScript_LostToOpponent @ Tucker always wins on a draw dome_compareseeds switch VAR_RESULT case 1, BattleFrontier_BattleDomeBattleRoom_EventScript_DefeatedOpponent @@ -114,12 +105,9 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_LostToOpponent:: applymovement LOCALID_ANNOUNCER, Common_Movement_WalkInPlaceDown waitmovement 0 dome_getopponentname - compare VAR_TEMP_2, NO_DRAW - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_OpponentWon - compare VAR_TEMP_2, DRAW_TRAINER - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_OpponentWonDraw - compare VAR_TEMP_2, DRAW_TUCKER - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerWonDraw + call_if_eq VAR_TEMP_2, NO_DRAW, BattleFrontier_BattleDomeBattleRoom_EventScript_OpponentWon + call_if_eq VAR_TEMP_2, DRAW_TRAINER, BattleFrontier_BattleDomeBattleRoom_EventScript_OpponentWonDraw + call_if_eq VAR_TEMP_2, DRAW_TUCKER, BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerWonDraw playse SE_M_ENCORE2 call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround delay 60 @@ -130,13 +118,13 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_WarpToLobbyLost:: goto BattleFrontier_BattleDomeBattleRoom_EventScript_WarpToLobby BattleFrontier_BattleDomeBattleRoom_EventScript_OpponentWon:: - frontier_gettrainername 1 + frontier_gettrainername STR_VAR_2 message BattleFrontier_BattleDomeBattleRoom_Text_TrainerIsWinner waitmessage return BattleFrontier_BattleDomeBattleRoom_EventScript_OpponentWonDraw:: - frontier_gettrainername 0 + frontier_gettrainername STR_VAR_1 message BattleFrontier_BattleDomeBattleRoom_Text_RefereesDecidedWinnerTrainer waitmessage return @@ -149,10 +137,8 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerWonDraw:: BattleFrontier_BattleDomeBattleRoom_EventScript_DefeatedOpponent:: applymovement LOCALID_ANNOUNCER, Common_Movement_WalkInPlaceDown waitmovement 0 - compare VAR_TEMP_2, NO_DRAW - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerWon - compare VAR_TEMP_2, DRAW_TRAINER - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerWonDraw + call_if_eq VAR_TEMP_2, NO_DRAW, BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerWon + call_if_eq VAR_TEMP_2, DRAW_TRAINER, BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerWonDraw playse SE_M_ENCORE2 call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround delay 60 @@ -164,7 +150,7 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_DefeatedOpponent:: switch VAR_RESULT case DOME_ROUNDS_COUNT, BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney setvar VAR_0x8006, 1 - warp MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM, 255, 5, 3 + warp MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM, 5, 3 waitstate BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney:: @@ -196,14 +182,11 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerWonDraw:: BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayer:: dome_get DOME_DATA_ATTEMPTED_CHALLENGE - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttempt + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttempt dome_get DOME_DATA_HAS_WON_CHALLENGE - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWon + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWon dome_get DOME_DATA_WIN_STREAK_ACTIVE - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreak + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreak goto BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampion return @@ -266,8 +249,7 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWonFinal:: return BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampion:: - compare VAR_TEMP_F, DOME_FINAL - goto_if_ne BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionNoTucker + goto_if_ne VAR_TEMP_F, DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionNoTucker switch VAR_TEMP_E case FRONTIER_BRAIN_SILVER, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerPreTuckerSilver case FRONTIER_BRAIN_GOLD, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerPreTuckerGold @@ -387,8 +369,7 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerEnter:: case FRONTIER_BRAIN_STREAK, BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerSilver case FRONTIER_BRAIN_STREAK_LONG, BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerGold frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerSilver + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerSilver msgbox BattleFrontier_BattleDomeBattleRoom_Text_TuckerSilverIntro, MSGBOX_DEFAULT frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerSilver:: @@ -401,8 +382,7 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerSilver:: msgbox BattleFrontier_BattleDomeBattleRoom_Text_IncredibleVictorIsPlayer, MSGBOX_DEFAULT dome_resolvewinners DOME_PLAYER_WON_MATCH frontier_getsymbols - compare VAR_RESULT, 0 - goto_if_ne BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney + goto_if_ne VAR_RESULT, 0, BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney closemessage applymovement LOCALID_OPPONENT, BattleFrontier_BattleDomeBattleRoom_Movement_TuckerApproachPlayer waitmovement 0 @@ -417,8 +397,7 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerSilver:: BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerGoldIntro:: frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerGold + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerGold msgbox BattleFrontier_BattleDomeBattleRoom_Text_TuckerGoldIntro, MSGBOX_DEFAULT frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerGold:: @@ -431,8 +410,7 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerGold:: msgbox BattleFrontier_BattleDomeBattleRoom_Text_IncredibleVictorIsPlayer, MSGBOX_DEFAULT dome_resolvewinners DOME_PLAYER_WON_MATCH frontier_getsymbols - compare VAR_RESULT, 2 - goto_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney + goto_if_eq VAR_RESULT, 2, BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney closemessage applymovement LOCALID_OPPONENT, BattleFrontier_BattleDomeBattleRoom_Movement_TuckerApproachPlayer waitmovement 0 @@ -490,12 +468,10 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_SetUpObjects:: setvar VAR_TEMP_1, 1 applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleDomeBattleRoom_Movement_SetInvisible frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, DOME_FINAL - goto_if_ne BattleFrontier_BattleDomeBattleRoom_EventScript_EndSetUpObjects + goto_if_ne VAR_RESULT, DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_EndSetUpObjects frontier_getbrainstatus copyvar VAR_TEMP_E, VAR_RESULT - compare VAR_RESULT, FRONTIER_BRAIN_NOT_READY - goto_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_EndSetUpObjects + goto_if_eq VAR_RESULT, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleDomeBattleRoom_EventScript_EndSetUpObjects call BattleFrontier_EventScript_SetBrainObjectGfx setobjectxyperm LOCALID_OPPONENT, 13, 9 removeobject LOCALID_OPPONENT @@ -505,8 +481,7 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_EndSetUpObjects:: end BattleFrontier_BattleDomeBattleRoom_OnResume: - compare VAR_TEMP_9, 1 - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_CallAddAudience + call_if_eq VAR_TEMP_9, 1, BattleFrontier_BattleDomeBattleRoom_EventScript_CallAddAudience end BattleFrontier_BattleDomeBattleRoom_EventScript_CallAddAudience:: @@ -515,90 +490,86 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_CallAddAudience:: @ Add audience members to supplement the permanent object event audience BattleFrontier_BattleDomeBattleRoom_EventScript_AddAudience:: - compare VAR_TEMP_F, DOME_ROUND1 - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_AddRound1Audience - compare VAR_TEMP_F, DOME_ROUND2 - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_AddRound2Audience - compare VAR_TEMP_F, DOME_SEMIFINAL - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_AddSemifinalAudience - compare VAR_TEMP_F, DOME_FINAL - call_if_eq BattleFrontier_BattleDomeBattleRoom_EventScript_AddFinalAudience + call_if_eq VAR_TEMP_F, DOME_ROUND1, BattleFrontier_BattleDomeBattleRoom_EventScript_AddRound1Audience + call_if_eq VAR_TEMP_F, DOME_ROUND2, BattleFrontier_BattleDomeBattleRoom_EventScript_AddRound2Audience + call_if_eq VAR_TEMP_F, DOME_SEMIFINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AddSemifinalAudience + call_if_eq VAR_TEMP_F, DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AddFinalAudience return BattleFrontier_BattleDomeBattleRoom_EventScript_AddRound1Audience:: return BattleFrontier_BattleDomeBattleRoom_EventScript_AddRound2Audience:: - createvobject OBJ_EVENT_GFX_SCIENTIST_1, 1, 3, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_EXPERT_F, 4, 6, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_NINJA_BOY, 6, 8, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_LITTLE_GIRL, 9, 11, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_SCIENTIST_1, 11, 13, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_MAN_5, 13, 15, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_BEAUTY, 19, 7, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_5, 22, 11, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_LITTLE_BOY, 25, 15, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_YOUNGSTER, 26, 2, 2, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH + createvobject OBJ_EVENT_GFX_SCIENTIST_1, 1, 3, 0 + createvobject OBJ_EVENT_GFX_EXPERT_F, 4, 6, 0 + createvobject OBJ_EVENT_GFX_NINJA_BOY, 6, 8, 0 + createvobject OBJ_EVENT_GFX_LITTLE_GIRL, 9, 11, 0 + createvobject OBJ_EVENT_GFX_SCIENTIST_1, 11, 13, 0 + createvobject OBJ_EVENT_GFX_MAN_5, 13, 15, 0 + createvobject OBJ_EVENT_GFX_BEAUTY, 19, 7, 1 + createvobject OBJ_EVENT_GFX_WOMAN_5, 22, 11, 1 + createvobject OBJ_EVENT_GFX_LITTLE_BOY, 25, 15, 1 + createvobject OBJ_EVENT_GFX_YOUNGSTER, 26, 2, 2 + createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1 return BattleFrontier_BattleDomeBattleRoom_EventScript_AddSemifinalAudience:: - createvobject OBJ_EVENT_GFX_SCIENTIST_1, 1, 3, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_EXPERT_F, 4, 6, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_NINJA_BOY, 6, 8, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_2, 7, 9, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_LITTLE_GIRL, 9, 11, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_LASS, 10, 12, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_SCIENTIST_1, 11, 13, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_MAN_5, 13, 15, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_GENTLEMAN, 15, 2, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_NINJA_BOY, 16, 3, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_2, 17, 4, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_BEAUTY, 19, 7, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_EXPERT_F, 20, 9, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_5, 22, 11, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_SCIENTIST_1, 23, 13, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_LITTLE_BOY, 25, 15, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_YOUNGSTER, 26, 2, 2, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_HEX_MANIAC, 28, 5, 2, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_MART_EMPLOYEE, 30, 6, 2, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_5, 31, 8, 2, 3, DIR_SOUTH + createvobject OBJ_EVENT_GFX_SCIENTIST_1, 1, 3, 0 + createvobject OBJ_EVENT_GFX_EXPERT_F, 4, 6, 0 + createvobject OBJ_EVENT_GFX_NINJA_BOY, 6, 8, 0 + createvobject OBJ_EVENT_GFX_WOMAN_2, 7, 9, 0 + createvobject OBJ_EVENT_GFX_LITTLE_GIRL, 9, 11, 0 + createvobject OBJ_EVENT_GFX_LASS, 10, 12, 0 + createvobject OBJ_EVENT_GFX_SCIENTIST_1, 11, 13, 0 + createvobject OBJ_EVENT_GFX_MAN_5, 13, 15, 0 + createvobject OBJ_EVENT_GFX_GENTLEMAN, 15, 2, 1 + createvobject OBJ_EVENT_GFX_NINJA_BOY, 16, 3, 1 + createvobject OBJ_EVENT_GFX_WOMAN_2, 17, 4, 1 + createvobject OBJ_EVENT_GFX_BEAUTY, 19, 7, 1 + createvobject OBJ_EVENT_GFX_EXPERT_F, 20, 9, 1 + createvobject OBJ_EVENT_GFX_WOMAN_5, 22, 11, 1 + createvobject OBJ_EVENT_GFX_SCIENTIST_1, 23, 13, 1 + createvobject OBJ_EVENT_GFX_LITTLE_BOY, 25, 15, 1 + createvobject OBJ_EVENT_GFX_YOUNGSTER, 26, 2, 2 + createvobject OBJ_EVENT_GFX_HEX_MANIAC, 28, 5, 2 + createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1 + createvobject OBJ_EVENT_GFX_MART_EMPLOYEE, 30, 6, 2 + createvobject OBJ_EVENT_GFX_WOMAN_5, 31, 8, 2 return BattleFrontier_BattleDomeBattleRoom_EventScript_AddFinalAudience:: - createvobject OBJ_EVENT_GFX_NINJA_BOY, 0, 2, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_SCIENTIST_1, 1, 3, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_BEAUTY, 2, 15, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_MAN_5, 3, 5, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_EXPERT_F, 4, 6, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_SCIENTIST_1, 5, 7, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_NINJA_BOY, 6, 8, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_2, 7, 9, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_3, 8, 10, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_LITTLE_GIRL, 9, 11, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_LASS, 10, 12, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_SCIENTIST_1, 11, 13, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_BEAUTY, 12, 14, 0, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_MAN_5, 13, 15, 2, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_HIKER, 14, 12, 2, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_GENTLEMAN, 15, 2, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_NINJA_BOY, 16, 3, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_2, 17, 4, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_3, 18, 6, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_BEAUTY, 19, 7, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_EXPERT_F, 20, 9, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_MAN_2, 21, 10, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_5, 22, 11, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_SCIENTIST_1, 23, 13, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_GENTLEMAN, 24, 14, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_LITTLE_BOY, 25, 15, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_YOUNGSTER, 26, 2, 2, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_FAT_MAN, 27, 3, 2, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_HEX_MANIAC, 28, 5, 2, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_MART_EMPLOYEE, 30, 6, 2, 3, DIR_SOUTH - createvobject OBJ_EVENT_GFX_WOMAN_5, 31, 8, 2, 3, DIR_SOUTH + createvobject OBJ_EVENT_GFX_NINJA_BOY, 0, 2, 0 + createvobject OBJ_EVENT_GFX_SCIENTIST_1, 1, 3, 0 + createvobject OBJ_EVENT_GFX_BEAUTY, 2, 15, 0 + createvobject OBJ_EVENT_GFX_MAN_5, 3, 5, 0 + createvobject OBJ_EVENT_GFX_EXPERT_F, 4, 6, 0 + createvobject OBJ_EVENT_GFX_SCIENTIST_1, 5, 7, 0 + createvobject OBJ_EVENT_GFX_NINJA_BOY, 6, 8, 0 + createvobject OBJ_EVENT_GFX_WOMAN_2, 7, 9, 0 + createvobject OBJ_EVENT_GFX_WOMAN_3, 8, 10, 0 + createvobject OBJ_EVENT_GFX_LITTLE_GIRL, 9, 11, 0 + createvobject OBJ_EVENT_GFX_LASS, 10, 12, 0 + createvobject OBJ_EVENT_GFX_SCIENTIST_1, 11, 13, 0 + createvobject OBJ_EVENT_GFX_BEAUTY, 12, 14, 0 + createvobject OBJ_EVENT_GFX_MAN_5, 13, 15, 2 + createvobject OBJ_EVENT_GFX_HIKER, 14, 12, 2 + createvobject OBJ_EVENT_GFX_GENTLEMAN, 15, 2, 1 + createvobject OBJ_EVENT_GFX_NINJA_BOY, 16, 3, 1 + createvobject OBJ_EVENT_GFX_WOMAN_2, 17, 4, 1 + createvobject OBJ_EVENT_GFX_WOMAN_3, 18, 6, 1 + createvobject OBJ_EVENT_GFX_BEAUTY, 19, 7, 1 + createvobject OBJ_EVENT_GFX_EXPERT_F, 20, 9, 1 + createvobject OBJ_EVENT_GFX_MAN_2, 21, 10, 1 + createvobject OBJ_EVENT_GFX_WOMAN_5, 22, 11, 1 + createvobject OBJ_EVENT_GFX_SCIENTIST_1, 23, 13, 1 + createvobject OBJ_EVENT_GFX_GENTLEMAN, 24, 14, 1 + createvobject OBJ_EVENT_GFX_LITTLE_BOY, 25, 15, 1 + createvobject OBJ_EVENT_GFX_YOUNGSTER, 26, 2, 2 + createvobject OBJ_EVENT_GFX_FAT_MAN, 27, 3, 2 + createvobject OBJ_EVENT_GFX_HEX_MANIAC, 28, 5, 2 + createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1 + createvobject OBJ_EVENT_GFX_MART_EMPLOYEE, 30, 6, 2 + createvobject OBJ_EVENT_GFX_WOMAN_5, 31, 8, 2 return BattleFrontier_BattleDomeBattleRoom_Movement_SetInvisible: @@ -758,7 +729,7 @@ BattleFrontier_BattleDomeBattleRoom_Movement_AnnouncerMoveForTuckerEntrance: delay_16 walk_left walk_left - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 delay_16 delay_16 @@ -800,7 +771,7 @@ BattleFrontier_BattleDomeBattleRoom_Movement_AnnouncerMoveForTuckerEntrance: delay_16 walk_right walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end BattleFrontier_BattleDomeBattleRoom_Movement_TuckerStepForward: @@ -883,14 +854,13 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround:: BattleFrontier_BattleDomeBattleRoom_EventScript_WarpToLobby:: copyvar VAR_RESULT, VAR_FRONTIER_BATTLE_MODE - compare VAR_RESULT, FRONTIER_MODE_DOUBLES - goto_if_eq BattleFrontier_BattleDomePreBattleRoom_EventScript_WarpToLobbyDoubles - warp MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY, 255, 5, 11 + goto_if_eq VAR_RESULT, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomePreBattleRoom_EventScript_WarpToLobbyDoubles + warp MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY, 5, 11 waitstate end BattleFrontier_BattleDomePreBattleRoom_EventScript_WarpToLobbyDoubles:: - warp MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY, 255, 17, 11 + warp MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY, 17, 11 waitstate end @@ -898,15 +868,13 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_WarpToLobbyDoubles:: BattleFrontier_BattleDomeBattleRoom_EventScript_SetWalkingAudienceMemberPos:: random 2 copyvar VAR_TEMP_D, VAR_RESULT - compare VAR_TEMP_D, 0 - goto_if_eq Common_EventScript_NopReturn + goto_if_eq VAR_TEMP_D, 0, Common_EventScript_NopReturn setobjectxyperm LOCALID_AUDIENCE_WALKING, 2, 0 setobjectmovementtype LOCALID_AUDIENCE_WALKING, MOVEMENT_TYPE_FACE_RIGHT return BattleFrontier_BattleDomeBattleRoom_EventScript_TryDoAudienceMemberWalkToSeat:: - compare VAR_TEMP_D, 0 - goto_if_eq Common_EventScript_NopReturn + goto_if_eq VAR_TEMP_D, 0, Common_EventScript_NopReturn applymovement LOCALID_AUDIENCE_WALKING, BattleFrontier_BattleDomeBattleRoom_Movement_AudienceMemberWalkToSeat return @@ -936,7 +904,7 @@ BattleFrontier_BattleDomeBattleRoom_Movement_AudienceMemberWalkToSeat: walk_down walk_right walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end BattleFrontier_BattleDomeBattleRoom_Movement_RefereeEnter: @@ -947,7 +915,7 @@ BattleFrontier_BattleDomeBattleRoom_Movement_RefereeEnter: step_end BattleFrontier_BattleDomeBattleRoom_Movement_AnnouncerFaceLeft: - walk_in_place_fastest_left + walk_in_place_faster_left step_end BattleFrontier_BattleDomeBattleRoom_Movement_RefereeExit: diff --git a/data/maps/BattleFrontier_BattleDomeCorridor/scripts.inc b/data/maps/BattleFrontier_BattleDomeCorridor/scripts.inc index 2c35779c7e..d286dc8681 100644 --- a/data/maps/BattleFrontier_BattleDomeCorridor/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeCorridor/scripts.inc @@ -12,8 +12,7 @@ BattleFrontier_BattleDomeCorridor_EventScript_EnterCorridor:: delay 16 setvar VAR_TEMP_0, 1 frontier_get FRONTIER_DATA_LVL_MODE - compare VAR_RESULT, FRONTIER_LVL_OPEN - goto_if_eq BattleFrontier_BattleDomeCorridor_EventScript_WalkToBattleRoomLvOpen + goto_if_eq VAR_RESULT, FRONTIER_LVL_OPEN, BattleFrontier_BattleDomeCorridor_EventScript_WalkToBattleRoomLvOpen applymovement LOCALID_ATTENDANT, BattleFrontier_BattleDomeCorridor_Movement_AttendantWalkToDoorLv50 applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleDomeCorridor_Movement_PlayerWalkToDoorLv50 waitmovement 0 @@ -40,7 +39,7 @@ BattleFrontier_BattleDomeCorridor_EventScript_WalkToBattleRoomLvOpen:: BattleFrontier_BattleDomeCorridor_EventScript_WarpToPreBattleRoom:: waitmovement 0 setvar VAR_0x8006, 0 - warp MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM, 255, 5, 7 + warp MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM, 5, 7 waitstate end @@ -56,7 +55,7 @@ BattleFrontier_BattleDomeCorridor_Movement_PlayerWalkToDoorLv50: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end BattleFrontier_BattleDomeCorridor_Movement_PlayerEnterDoorLv50: @@ -100,7 +99,7 @@ BattleFrontier_BattleDomeCorridor_Movement_PlayerWalkToDoorLvOpen: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end BattleFrontier_BattleDomeCorridor_Movement_PlayerEnterDoorLvOpen: diff --git a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc index 04df6f38c6..b972a0814c 100644 --- a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc @@ -48,8 +48,7 @@ BattleFrontier_BattleDomeLobby_EventScript_WonChallenge:: call BattleFrontier_EventScript_IncrementWinStreak lockall frontier_isbrain - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleDomeLobby_EventScript_DefeatedAce + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleDomeLobby_EventScript_DefeatedAce msgbox BattleFrontier_BattleDomeLobby_Text_CongratsForWinningTourney, MSGBOX_DEFAULT goto BattleFrontier_BattleDomeLobby_EventScript_GiveBattlePoints @@ -88,8 +87,7 @@ BattleFrontier_BattleDomeLobby_EventScript_AskRecordBattle:: playse SE_SAVE waitse call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleDomeLobby_EventScript_EndChallenge + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleDomeLobby_EventScript_EndChallenge message BattleFrontier_BattleDomeLobby_Text_RecordLastMatch waitmessage multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE @@ -137,15 +135,11 @@ BattleFrontier_BattleDomeLobby_EventScript_DoublesAttendant:: BattleFrontier_BattleDomeLobby_EventScript_AttendantWelcome:: special SavePlayerParty - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_WelcomeSingles - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_WelcomeDoubles + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_WelcomeSingles + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_WelcomeDoubles BattleFrontier_BattleDomeLobby_EventScript_AskTakeChallenge:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_TakeSinglesChallenge - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_TakeDoublesChallenge + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_TakeSinglesChallenge + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_TakeDoublesChallenge waitmessage multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE switch VAR_RESULT @@ -162,8 +156,7 @@ BattleFrontier_BattleDomeLobby_EventScript_TryEnterChallenge:: case FRONTIER_LVL_TENT, BattleFrontier_BattleDomeLobby_EventScript_CancelChallenge case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_CancelChallenge frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleDomeLobby_Text_SelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -172,8 +165,7 @@ BattleFrontier_BattleDomeLobby_EventScript_TryEnterChallenge:: setvar VAR_0x8005, FRONTIER_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleDomeLobby_EventScript_LoadPartyCancelChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleDomeLobby_EventScript_LoadPartyCancelChallenge msgbox BattleFrontier_BattleDomeLobby_Text_OkayToSaveBeforeChallenge, MSGBOX_YESNO switch VAR_RESULT case NO, BattleFrontier_BattleDomeLobby_EventScript_LoadPartyCancelChallenge @@ -191,8 +183,7 @@ BattleFrontier_BattleDomeLobby_EventScript_SaveBeforeChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleDomeLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleDomeLobby_EventScript_CancelChallengeSaveFailed dome_inittrainers BattleFrontier_BattleDomeLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -202,16 +193,14 @@ BattleFrontier_BattleDomeLobby_EventScript_EnterChallenge:: closemessage call BattleFrontier_BattleDomeLobby_EventScript_WalkToDoor special HealPlayerParty - warp MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR, 255, 23, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR, 23, 6 setvar VAR_TEMP_0, 0 waitstate end BattleFrontier_BattleDomeLobby_EventScript_ExplainChallenge:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_ExplainSinglesChallenge - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_ExplainDoublesChallenge + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_ExplainSinglesChallenge + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_ExplainDoublesChallenge goto BattleFrontier_BattleDomeLobby_EventScript_AskTakeChallenge BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMons:: @@ -240,27 +229,19 @@ BattleFrontier_BattleDomeLobby_EventScript_EndCancelChallenge:: end BattleFrontier_BattleDomeLobby_EventScript_WalkToDoor:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendantWalkToDoor - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_DoublesAttendantWalkToDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendantWalkToDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_DoublesAttendantWalkToDoor applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleDomeLobby_Movement_WalkToDoor waitmovement 0 - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_OpenSinglesDoor - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_OpenDoublesDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_OpenSinglesDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_OpenDoublesDoor waitdooranim - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendantEnterDoor - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_DoublesAttendantEnterDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendantEnterDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_DoublesAttendantEnterDoor applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleDomeLobby_Movement_PlayerEnterDoor waitmovement 0 - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_CloseSinglesDoor - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_CloseDoublesDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_CloseSinglesDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_CloseDoublesDoor waitdooranim return @@ -357,14 +338,10 @@ BattleFrontier_BattleDomeLobby_EventScript_ShowDoublesResults:: BattleFrontier_BattleDomeLobby_EventScript_ShowPrevTourneyTree:: dome_get DOME_DATA_PREV_TOURNEY_TYPE - compare VAR_RESULT, 0 - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsSinglesLv50 - compare VAR_RESULT, 1 - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsDoublesLv50 - compare VAR_RESULT, 2 - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsSinglesLvOpen - compare VAR_RESULT, 3 - call_if_eq BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsDoublesLvOpen + call_if_eq VAR_RESULT, 0, BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsSinglesLv50 + call_if_eq VAR_RESULT, 1, BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsDoublesLv50 + call_if_eq VAR_RESULT, 2, BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsSinglesLvOpen + call_if_eq VAR_RESULT, 3, BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsDoublesLvOpen fadescreen FADE_TO_BLACK dome_showprevtourneytree waitstate diff --git a/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc index ca441cf1f8..6ca4296cc0 100644 --- a/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc @@ -19,8 +19,7 @@ BattleFrontier_BattleDomePreBattleRoom_OnFrame: .2byte 0 BattleFrontier_BattleDomePreBattleRoom_EventScript_EnterRoom:: - compare VAR_0x8006, 1 - goto_if_eq BattleFrontier_BattleDomePreBattleRoom_EventScript_ReturnFromBattle + goto_if_eq VAR_0x8006, 1, BattleFrontier_BattleDomePreBattleRoom_EventScript_ReturnFromBattle frontier_set FRONTIER_DATA_RECORD_DISABLED, TRUE setvar VAR_TEMP_0, 1 applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleDomePreBattleRoom_Movement_PlayerEnter @@ -31,8 +30,7 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_AskReadyForNextRound:: waitmessage switch VAR_RESULT @ No case? call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleDomePreBattleRoom_EventScript_AskReadyForNextRoundNoRecord + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleDomePreBattleRoom_EventScript_AskReadyForNextRoundNoRecord multichoice 16, 0, MULTI_TOURNEY_WITH_RECORD, TRUE switch VAR_RESULT case 0, BattleFrontier_BattleDomePreBattleRoom_EventScript_ShowOpponentInfo @@ -146,8 +144,7 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_ContinueChallenge:: special ChoosePartyForBattleFrontier waitstate frontier_resetsketch - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleDomePreBattleRoom_EventScript_AskReadyForNextRound + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleDomePreBattleRoom_EventScript_AskReadyForNextRound dome_set DOME_DATA_SELECTED_MONS dome_reduceparty dome_setopponent @@ -163,7 +160,7 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_ContinueChallenge:: waitmovement 0 closedoor 5, 1 waitdooranim - warp MAP_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM, 255, 9, 5 + warp MAP_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM, 9, 5 setvar VAR_TEMP_0, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc index 367756054f..cf44e3118e 100644 --- a/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc @@ -19,14 +19,11 @@ BattleFrontier_BattleFactoryBattleRoom_MapScripts:: BattleFrontier_BattleFactoryBattleRoom_OnTransition: frontier_settrainers checkplayergender - compare VAR_RESULT, MALE - call_if_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_SetPlayerGfxMale - compare VAR_RESULT, FEMALE - call_if_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_SetPlayerGfxFemale + call_if_eq VAR_RESULT, MALE, BattleFrontier_BattleFactoryBattleRoom_EventScript_SetPlayerGfxMale + call_if_eq VAR_RESULT, FEMALE, BattleFrontier_BattleFactoryBattleRoom_EventScript_SetPlayerGfxFemale frontier_getbrainstatus copyvar VAR_TEMP_F, VAR_RESULT - compare VAR_RESULT, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattleFactoryBattleRoom_EventScript_SetUpFactoryHeadObj + goto_if_ne VAR_RESULT, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleFactoryBattleRoom_EventScript_SetUpFactoryHeadObj end BattleFrontier_BattleFactoryBattleRoom_EventScript_SetUpFactoryHeadObj:: @@ -41,8 +38,7 @@ BattleFrontier_BattleFactoryBattleRoom_OnWarp: BattleFrontier_BattleFactoryBattleRoom_EventScript_HideObjects:: setvar VAR_TEMP_1, 1 hideobjectat OBJ_EVENT_ID_PLAYER, MAP_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM - compare VAR_TEMP_F, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattleFactoryBattleRoom_EventScript_EndHideObjects + goto_if_ne VAR_TEMP_F, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleFactoryBattleRoom_EventScript_EndHideObjects hideobjectat LOCALID_OPPONENT, MAP_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM BattleFrontier_BattleFactoryBattleRoom_EventScript_EndHideObjects:: end @@ -71,8 +67,7 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_EnterRoomFactoryHeadBattle:: end BattleFrontier_BattleFactoryBattleRoom_EventScript_EnterRoom:: - compare VAR_TEMP_F, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattleFactoryBattleRoom_EventScript_EnterRoomFactoryHeadBattle + goto_if_ne VAR_TEMP_F, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleFactoryBattleRoom_EventScript_EnterRoomFactoryHeadBattle applymovement LOCALID_PLAYER, BattleFrontier_BattleFactoryBattleRoom_Movement_PlayerEnterRoom applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleFactoryBattleRoom_Movement_PlayerEnterRoom waitmovement 0 @@ -84,8 +79,7 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_EnterRoom:: applymovement LOCALID_OPPONENT, BattleFrontier_BattleFactoryBattleRoom_Movement_OpponentEnter waitmovement 0 BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleOpponent:: - compare VAR_TEMP_F, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNoland + goto_if_ne VAR_TEMP_F, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNoland palace_getopponentintro lockall msgbox gStringVar4, MSGBOX_DEFAULT @@ -105,8 +99,7 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_WarpToLobbyLost:: BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedOpponent:: factory_get FACTORY_DATA_WIN_STREAK_SWAPS - compare VAR_RESULT, MAX_STREAK - goto_if_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_IncrementWinStreak + goto_if_eq VAR_RESULT, MAX_STREAK, BattleFrontier_BattleFactoryBattleRoom_EventScript_IncrementWinStreak addvar VAR_RESULT, 1 setorcopyvar VAR_0x8006, VAR_RESULT factory_set FACTORY_DATA_WIN_STREAK_SWAPS @ uses VAR_0x8006 above @@ -119,7 +112,7 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_IncrementBattleNum:: switch VAR_RESULT case 7, BattleFrontier_BattleFactoryBattleRoom_EventScript_WarpToLobbyWon setvar VAR_0x8006, 1 - warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM, 255, 8, 8 + warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM, 8, 8 waitstate BattleFrontier_BattleFactoryBattleRoom_EventScript_WarpToLobbyWon:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_WON @@ -131,21 +124,18 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNoland:: case FRONTIER_BRAIN_STREAK, BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNolandSilver case FRONTIER_BRAIN_STREAK_LONG, BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNolandGold frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNolandSilver + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNolandSilver msgbox BattleFrontier_BattleFactoryBattleRoom_Text_NolandImFactoryHead, MSGBOX_DEFAULT frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNolandSilver:: msgbox BattleFrontier_BattleFactoryBattleRoom_Text_ShakeOutKnowledgeBringItOn, MSGBOX_DEFAULT call BattleFrontier_BattleFactoryBattleRoom_EventScript_DoNolandBattle - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNolandSilver + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNolandSilver goto BattleFrontier_BattleFactoryBattleRoom_EventScript_WarpToLobbyLost BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNolandSilver:: frontier_getsymbols - compare VAR_RESULT, 0 - goto_if_ne BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNoland + goto_if_ne VAR_RESULT, 0, BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNoland msgbox BattleFrontier_BattleFactoryBattleRoom_Text_NolandLetsSeeFrontierPass, MSGBOX_DEFAULT closemessage applymovement LOCALID_PLAYER, BattleFrontier_BattleFactoryBattleRoom_Movement_PlayerApproachNoland @@ -160,21 +150,18 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNolandSilver:: BattleFrontier_BattleFactoryBattleRoom_EventScript_IntroNolandGold:: frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNolandGold + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNolandGold msgbox BattleFrontier_BattleFactoryBattleRoom_Text_HarderLookThanLastTime, MSGBOX_DEFAULT frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH BattleFrontier_BattleFactoryBattleRoom_EventScript_BattleNolandGold:: msgbox BattleFrontier_BattleFactoryBattleRoom_Text_AllRightBringItOn, MSGBOX_DEFAULT call BattleFrontier_BattleFactoryBattleRoom_EventScript_DoNolandBattle - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNolandGold + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNolandGold goto BattleFrontier_BattleFactoryBattleRoom_EventScript_WarpToLobbyLost BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNolandGold:: frontier_getsymbols - compare VAR_RESULT, 2 - goto_if_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNoland + goto_if_eq VAR_RESULT, 2, BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNoland msgbox BattleFrontier_BattleFactoryBattleRoom_Text_OutOfMyLeagueLetsSeePass, MSGBOX_DEFAULT waitmessage applymovement LOCALID_PLAYER, BattleFrontier_BattleFactoryBattleRoom_Movement_PlayerApproachNoland @@ -199,14 +186,12 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_DoNolandBattle:: BattleFrontier_BattleFactoryBattleRoom_EventScript_DefeatedNoland:: factory_get FACTORY_DATA_WIN_STREAK_SWAPS - compare VAR_RESULT, MAX_STREAK - goto_if_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_IncrementWinStreak + goto_if_eq VAR_RESULT, MAX_STREAK, BattleFrontier_BattleFactoryBattleRoom_EventScript_IncrementWinStreak addvar VAR_RESULT, 1 setorcopyvar VAR_0x8006, VAR_RESULT factory_set FACTORY_DATA_WIN_STREAK_SWAPS @ uses VAR_0x8006 above factory_get FACTORY_DATA_WIN_STREAK - compare VAR_RESULT, MAX_STREAK - goto_if_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_IncrementBattleNum + goto_if_eq VAR_RESULT, MAX_STREAK, BattleFrontier_BattleFactoryBattleRoom_EventScript_IncrementBattleNum addvar VAR_RESULT, 1 factory_set FACTORY_DATA_WIN_STREAK, VAR_RESULT frontier_get FRONTIER_DATA_BATTLE_NUM @@ -245,24 +230,23 @@ BattleFrontier_BattleFactoryBattleRoom_Movement_NolandMoveToBattle: BattleFrontier_BattleFactoryBattleRoom_EventScript_WarpToLobby:: copyvar VAR_RESULT, VAR_FRONTIER_BATTLE_MODE - compare VAR_RESULT, FRONTIER_MODE_DOUBLES - goto_if_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_WarpToLobbyDoubles - warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY, 255, 4, 8 + goto_if_eq VAR_RESULT, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleFactoryBattleRoom_EventScript_WarpToLobbyDoubles + warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY, 4, 8 waitstate end BattleFrontier_BattleFactoryBattleRoom_EventScript_WarpToLobbyDoubles:: - warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY, 255, 14, 8 + warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY, 14, 8 waitstate end BattleFrontier_BattleFactoryBattleRoom_EventScript_ScientistsFaceBattle:: - applymovement LOCALID_SCIENTIST_1, Common_Movement_WalkInPlaceFastestRight - applymovement LOCALID_SCIENTIST_2, Common_Movement_WalkInPlaceFastestRight - applymovement LOCALID_SCIENTIST_3, Common_Movement_WalkInPlaceFastestRight - applymovement LOCALID_SCIENTIST_4, Common_Movement_WalkInPlaceFastestLeft - applymovement LOCALID_SCIENTIST_5, Common_Movement_WalkInPlaceFastestLeft - applymovement LOCALID_SCIENTIST_6, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_SCIENTIST_1, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_SCIENTIST_2, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_SCIENTIST_3, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_SCIENTIST_4, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_SCIENTIST_5, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_SCIENTIST_6, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return diff --git a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc index 3b11392947..682b2c91d1 100644 --- a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc @@ -43,8 +43,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_QuitWithoutSaving:: BattleFrontier_BattleFactoryLobby_EventScript_WonChallenge:: lockall frontier_isbrain - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleFactoryLobby_EventScript_DefeatedFactoryHead + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleFactoryLobby_EventScript_DefeatedFactoryHead msgbox BattleFrontier_BattleFactoryLobby_Text_CongratsSevenWins, MSGBOX_DEFAULT waitmessage goto BattleFrontier_BattleFactoryLobby_EventScript_GiveBattlePoints @@ -79,8 +78,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_LostChallenge:: BattleFrontier_BattleFactoryLobby_EventScript_AskRecordBattle:: call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleFactoryLobby_EventScript_EndRecordBattle + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleFactoryLobby_EventScript_EndRecordBattle message BattleFrontier_BattleFactoryLobby_Text_RecordLastMatch waitmessage multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE @@ -126,15 +124,11 @@ BattleFrontier_BattleFactoryLobby_EventScript_DoublesAttendant:: BattleFrontier_BattleFactoryLobby_EventScript_Attendant:: special SavePlayerParty - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleFactoryLobby_EventScript_WelcomeForSingleBattle - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleFactoryLobby_EventScript_WelcomeForDoubleBattle + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleFactoryLobby_EventScript_WelcomeForSingleBattle + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleFactoryLobby_EventScript_WelcomeForDoubleBattle BattleFrontier_BattleFactoryLobby_EventScript_AskTakeChallenge:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleFactoryLobby_EventScript_TakeSinglesChallenge - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleFactoryLobby_EventScript_TakeDoublesChallenge + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleFactoryLobby_EventScript_TakeSinglesChallenge + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleFactoryLobby_EventScript_TakeDoublesChallenge waitmessage multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE switch VAR_RESULT @@ -167,21 +161,18 @@ BattleFrontier_BattleFactoryLobby_EventScript_SaveBeforeChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleFactoryLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleFactoryLobby_EventScript_CancelChallengeSaveFailed setvar VAR_0x8006, 0 BattleFrontier_BattleFactoryLobby_EventScript_EnterChallenge:: special SavePlayerParty msgbox BattleFrontier_BattleFactoryLobby_Text_StepThisWay, MSGBOX_DEFAULT closemessage - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleFactoryLobby_EventScript_TalkedToSinglesAttendant - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleFactoryLobby_EventScript_TalkedToDoublesAttendant + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleFactoryLobby_EventScript_TalkedToSinglesAttendant + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleFactoryLobby_EventScript_TalkedToDoublesAttendant applymovement VAR_LAST_TALKED, BattleFrontier_BattleFactoryLobby_Movement_AttendantEnterDoor applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleFactoryLobby_Movement_PlayerEnterDoor waitmovement 0 - warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM, 255, 8, 13 + warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM, 8, 13 setvar VAR_TEMP_0, 0 waitstate end @@ -195,10 +186,8 @@ BattleFrontier_BattleFactoryLobby_EventScript_TalkedToDoublesAttendant:: return BattleFrontier_BattleFactoryLobby_EventScript_ExplainChallenge:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleFactoryLobby_EventScript_ExplainSinglesChallenge - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleFactoryLobby_EventScript_ExplainDoublesChallenge + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleFactoryLobby_EventScript_ExplainSinglesChallenge + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleFactoryLobby_EventScript_ExplainDoublesChallenge goto BattleFrontier_BattleFactoryLobby_EventScript_AskTakeChallenge BattleFrontier_BattleFactoryLobby_EventScript_CancelChallengeSaveFailed:: diff --git a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc index ce3cb357c2..d54cf83570 100644 --- a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc @@ -11,8 +11,7 @@ BattleFrontier_BattleFactoryPreBattleRoom_OnWarp: BattleFrontier_BattleFactoryPreBattleRoom_EventScript_SetUpObjects:: setvar VAR_TEMP_1, 1 - compare VAR_0x8006, 1 - goto_if_ne BattleFrontier_BattleFactoryPreBattleRoom_EventScript_TurnPlayerNorth + goto_if_ne VAR_0x8006, 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_TurnPlayerNorth setobjectxy LOCALID_ATTENDANT, 8, 7 turnobject LOCALID_ATTENDANT, DIR_SOUTH BattleFrontier_BattleFactoryPreBattleRoom_EventScript_TurnPlayerNorth:: @@ -24,14 +23,12 @@ BattleFrontier_BattleFactoryPreBattleRoom_OnFrame: .2byte 0 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_EnterRoom:: - compare VAR_0x8006, 1 - goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReturnToRoomFromBattle + goto_if_eq VAR_0x8006, 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReturnToRoomFromBattle setvar VAR_TEMP_0, 1 applymovement LOCALID_ATTENDANT, BattleFrontier_BattleFactoryPreBattleRoom_Movement_AttendantEnterRoom applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleFactoryPreBattleRoom_Movement_PlayerEnterRoom waitmovement 0 - compare VAR_0x8006, 2 - goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ResumeChallenge + goto_if_eq VAR_0x8006, 2, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ResumeChallenge factory_generaterentalmons factory_generateopponentmons factory_getopponentmontype @@ -49,12 +46,10 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_EnterBattleRoom:: msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_RightThisWay, MSGBOX_DEFAULT closemessage call BattleFrontier_EventScript_GetLvlMode - compare VAR_RESULT, FRONTIER_LVL_50 - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_WalkToBattleRoomLv50 - compare VAR_RESULT, FRONTIER_LVL_OPEN - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_WalkToBattleRoomLvOpen + call_if_eq VAR_RESULT, FRONTIER_LVL_50, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_WalkToBattleRoomLv50 + call_if_eq VAR_RESULT, FRONTIER_LVL_OPEN, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_WalkToBattleRoomLvOpen waitmovement 0 - warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM, 255, 6, 11 + warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM, 6, 11 waitstate end @@ -66,8 +61,7 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReturnToRoomFromBattle:: waitfanfare special HealPlayerParty frontier_getbrainstatus - compare VAR_RESULT, FRONTIER_BRAIN_NOT_READY - goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForRegularOpponent + goto_if_eq VAR_RESULT, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForRegularOpponent playse SE_POKENAV_CALL waitse msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_WaitFewMoments, MSGBOX_DEFAULT @@ -86,25 +80,17 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReturnToRoomFromBattle:: BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForOpponent:: frontier_getbrainstatus - compare VAR_RESULT, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForHead + goto_if_ne VAR_RESULT, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForHead BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForRegularOpponent:: frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 1 - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor2ndOpponent - compare VAR_RESULT, 2 - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor3rdOpponent - compare VAR_RESULT, 3 - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor4thOpponent - compare VAR_RESULT, 4 - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor5thOpponent - compare VAR_RESULT, 5 - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor6thOpponent - compare VAR_RESULT, 6 - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor7thOpponent + call_if_eq VAR_RESULT, 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor2ndOpponent + call_if_eq VAR_RESULT, 2, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor3rdOpponent + call_if_eq VAR_RESULT, 3, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor4thOpponent + call_if_eq VAR_RESULT, 4, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor5thOpponent + call_if_eq VAR_RESULT, 5, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor6thOpponent + call_if_eq VAR_RESULT, 6, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ReadyFor7thOpponent call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForOpponentNoRecord + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForOpponentNoRecord multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, TRUE switch VAR_RESULT case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskSwapMon @@ -168,8 +154,7 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_SwapMons:: fadescreen FADE_TO_BLACK factory_swapmons waitstate - compare VAR_RESULT, TRUE @ Did player keep current pokemon - goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_EnterBattleRoom + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_EnterBattleRoom @ Did player keep current pokemon factory_setswapped msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_YourSwapIsComplete, MSGBOX_DEFAULT goto BattleFrontier_BattleFactoryPreBattleRoom_EventScript_EnterBattleRoom @@ -223,42 +208,24 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_ResumeChallenge:: BattleFrontier_BattleFactoryPreBattleRoom_EventScript_CommentOnOpponentType:: msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_InvestigatedUpcomingOpponent, MSGBOX_DEFAULT - compare VAR_0x8005, TYPE_NORMAL - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesNormal - compare VAR_0x8005, TYPE_FIGHTING - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesFighting - compare VAR_0x8005, TYPE_FLYING - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesFlying - compare VAR_0x8005, TYPE_POISON - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesPoison - compare VAR_0x8005, TYPE_GROUND - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesGround - compare VAR_0x8005, TYPE_ROCK - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesRock - compare VAR_0x8005, TYPE_BUG - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesBug - compare VAR_0x8005, TYPE_GHOST - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesGhost - compare VAR_0x8005, TYPE_STEEL - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesSteel - compare VAR_0x8005, TYPE_FIRE - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesFire - compare VAR_0x8005, TYPE_WATER - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesWater - compare VAR_0x8005, TYPE_GRASS - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesGrass - compare VAR_0x8005, TYPE_ELECTRIC - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesElectric - compare VAR_0x8005, TYPE_PSYCHIC - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesPsychic - compare VAR_0x8005, TYPE_ICE - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesIce - compare VAR_0x8005, TYPE_DRAGON - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesDragon - compare VAR_0x8005, TYPE_DARK - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesDark - compare VAR_0x8005, NUMBER_OF_MON_TYPES - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentHasNoMostCommonType + call_if_eq VAR_0x8005, TYPE_NORMAL, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesNormal + call_if_eq VAR_0x8005, TYPE_FIGHTING, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesFighting + call_if_eq VAR_0x8005, TYPE_FLYING, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesFlying + call_if_eq VAR_0x8005, TYPE_POISON, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesPoison + call_if_eq VAR_0x8005, TYPE_GROUND, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesGround + call_if_eq VAR_0x8005, TYPE_ROCK, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesRock + call_if_eq VAR_0x8005, TYPE_BUG, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesBug + call_if_eq VAR_0x8005, TYPE_GHOST, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesGhost + call_if_eq VAR_0x8005, TYPE_STEEL, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesSteel + call_if_eq VAR_0x8005, TYPE_FIRE, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesFire + call_if_eq VAR_0x8005, TYPE_WATER, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesWater + call_if_eq VAR_0x8005, TYPE_GRASS, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesGrass + call_if_eq VAR_0x8005, TYPE_ELECTRIC, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesElectric + call_if_eq VAR_0x8005, TYPE_PSYCHIC, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesPsychic + call_if_eq VAR_0x8005, TYPE_ICE, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesIce + call_if_eq VAR_0x8005, TYPE_DRAGON, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesDragon + call_if_eq VAR_0x8005, TYPE_DARK, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesDark + call_if_eq VAR_0x8005, NUMBER_OF_MON_TYPES, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentHasNoMostCommonType return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesNormal:: @@ -334,24 +301,15 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentHasNoMostCommonTyp return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_CommentOnOpponentStyle:: - compare VAR_0x8006, FACTORY_STYLE_NONE - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleUnrestrained - compare VAR_0x8006, FACTORY_STYLE_PREPARATION - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleTotalPreparation - compare VAR_0x8006, FACTORY_STYLE_SLOW_STEADY - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleSlowAndSteady - compare VAR_0x8006, FACTORY_STYLE_ENDURANCE - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleEndurance - compare VAR_0x8006, FACTORY_STYLE_HIGH_RISK - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleHighRisk - compare VAR_0x8006, FACTORY_STYLE_WEAKENING - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleWeakenFoe - compare VAR_0x8006, FACTORY_STYLE_UNPREDICTABLE - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleImpossibleToPredict - compare VAR_0x8006, FACTORY_STYLE_WEATHER - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleDependsOnFlow - compare VAR_0x8006, FACTORY_NUM_STYLES - call_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleFlexible + call_if_eq VAR_0x8006, FACTORY_STYLE_NONE, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleUnrestrained + call_if_eq VAR_0x8006, FACTORY_STYLE_PREPARATION, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleTotalPreparation + call_if_eq VAR_0x8006, FACTORY_STYLE_SLOW_STEADY, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleSlowAndSteady + call_if_eq VAR_0x8006, FACTORY_STYLE_ENDURANCE, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleEndurance + call_if_eq VAR_0x8006, FACTORY_STYLE_HIGH_RISK, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleHighRisk + call_if_eq VAR_0x8006, FACTORY_STYLE_WEAKENING, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleWeakenFoe + call_if_eq VAR_0x8006, FACTORY_STYLE_UNPREDICTABLE, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleImpossibleToPredict + call_if_eq VAR_0x8006, FACTORY_STYLE_WEATHER, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleDependsOnFlow + call_if_eq VAR_0x8006, FACTORY_NUM_STYLES, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleFlexible return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_StyleUnrestrained:: @@ -394,8 +352,7 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForHead:: message BattleFrontier_BattleFactoryPreBattleRoom_Text_PreparedToFaceHead waitmessage call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForHeadNoRecord + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskReadyForHeadNoRecord multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, TRUE switch VAR_RESULT case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_AskSwapBeforeHead diff --git a/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc index a838c7eadd..2e9366d44b 100644 --- a/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc @@ -21,10 +21,8 @@ BattleFrontier_BattlePalaceBattleRoom_OnTransition: BattleFrontier_BattlePalaceBattleRoom_EventScript_SetPlayerGfx:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_SetPlayerGfxMale - compare VAR_RESULT, FEMALE - goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_SetPlayerGfxFemale + goto_if_eq VAR_RESULT, MALE, BattleFrontier_BattlePalaceBattleRoom_EventScript_SetPlayerGfxMale + goto_if_eq VAR_RESULT, FEMALE, BattleFrontier_BattlePalaceBattleRoom_EventScript_SetPlayerGfxFemale return @ The opponent's gfx are set to the players by default @@ -45,8 +43,7 @@ BattleFrontier_BattlePalaceBattleRoom_OnFrame: BattleFrontier_BattlePalaceBattleRoom_EventScript_EnterRoom:: showobjectat LOCALID_PLAYER, MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_BeginChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_BeginChallenge applymovement LOCALID_PLAYER, BattleFrontier_BattlePalaceBattleRoom_Movement_PlayerReturnToChallenge waitmovement 0 applymovement LOCALID_ATTENDANT, BattleFrontier_BattlePalaceBattleRoom_Movement_FaceDown @@ -95,24 +92,16 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_DefeatedOpponent:: BattleFrontier_BattlePalaceBattleRoom_EventScript_AskReadyForOpponent:: frontier_getbrainstatus copyvar VAR_TEMP_F, VAR_RESULT - compare VAR_RESULT, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattlePalaceBattleRoom_EventScript_MavenUpNext + goto_if_ne VAR_RESULT, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattlePalaceBattleRoom_EventScript_MavenUpNext frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 1 - call_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor2ndOpponent - compare VAR_RESULT, 2 - call_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor3rdOpponent - compare VAR_RESULT, 3 - call_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor4thOpponent - compare VAR_RESULT, 4 - call_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor5thOpponent - compare VAR_RESULT, 5 - call_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor6thOpponent - compare VAR_RESULT, 6 - call_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor7thOpponent + call_if_eq VAR_RESULT, 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor2ndOpponent + call_if_eq VAR_RESULT, 2, BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor3rdOpponent + call_if_eq VAR_RESULT, 3, BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor4thOpponent + call_if_eq VAR_RESULT, 4, BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor5thOpponent + call_if_eq VAR_RESULT, 5, BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor6thOpponent + call_if_eq VAR_RESULT, 6, BattleFrontier_BattlePalaceBattleRoom_EventScript_ReadyFor7thOpponent call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_AskReadyForOpponentNoRecord + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePalaceBattleRoom_EventScript_AskReadyForOpponentNoRecord multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, TRUE switch VAR_RESULT case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_ContinueChallenge @@ -179,16 +168,14 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_PauseChallenge:: end BattleFrontier_BattlePalaceBattleRoom_EventScript_MavenUpNext:: - compare VAR_TEMP_2, 1 - goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_AskReadyForMaven + goto_if_eq VAR_TEMP_2, 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_AskReadyForMaven msgbox BattleFrontier_BattlePalaceBattleRoom_Text_ChallengingPalaceMaven, MSGBOX_DEFAULT setvar VAR_TEMP_2, 1 BattleFrontier_BattlePalaceBattleRoom_EventScript_AskReadyForMaven:: message BattleFrontier_BattlePalaceBattleRoom_Text_ReadyForPalaceMaven waitmessage call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_AskReadyForMavenNoRecord + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePalaceBattleRoom_EventScript_AskReadyForMavenNoRecord multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, TRUE switch VAR_RESULT case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_BattleSpenser @@ -225,22 +212,19 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_BattleSpenser:: case FRONTIER_BRAIN_STREAK, BattleFrontier_BattlePalaceBattleRoom_EventScript_BattleSpenserSilver case FRONTIER_BRAIN_STREAK_LONG, BattleFrontier_BattlePalaceBattleRoom_EventScript_BattleSpenserGold frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattlePalaceBattleRoom_EventScript_BattleSpenserSilver + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattlePalaceBattleRoom_EventScript_BattleSpenserSilver msgbox BattleFrontier_BattlePalaceBattleRoom_Text_SpenserFirstIntro, MSGBOX_DEFAULT frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH BattleFrontier_BattlePalaceBattleRoom_EventScript_BattleSpenserSilver:: msgbox BattleFrontier_BattlePalaceBattleRoom_Text_ProveYourBondWithMons, MSGBOX_DEFAULT call BattleFrontier_BattlePalaceBattleRoom_EventScript_DoPalaceBattle - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_DefeatedSpenserSilver + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_DefeatedSpenserSilver goto BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyLost BattleFrontier_BattlePalaceBattleRoom_EventScript_DefeatedSpenserSilver:: palace_incrementstreak frontier_getsymbols - compare VAR_RESULT, 0 - goto_if_ne BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyWon + goto_if_ne VAR_RESULT, 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyWon msgbox BattleFrontier_BattlePalaceBattleRoom_Text_SpenserPostSilverBattle, MSGBOX_DEFAULT applymovement LOCALID_PLAYER, BattleFrontier_BattlePalaceBattleRoom_Movement_FaceUp applymovement LOCALID_ATTENDANT, BattleFrontier_BattlePalaceBattleRoom_Movement_FaceDown @@ -252,30 +236,27 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_DefeatedSpenserSilver:: frontier_givesymbol applymovement LOCALID_OPPONENT, Common_Movement_WalkInPlaceLeft waitmovement 0 - applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFastestRight - applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox BattleFrontier_BattlePalaceBattleRoom_Text_SpenserAwaitNextTime, MSGBOX_DEFAULT goto BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyWon BattleFrontier_BattlePalaceBattleRoom_EventScript_IntroSpenserGold:: frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattlePalaceBattleRoom_EventScript_BattleSpenserGold + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattlePalaceBattleRoom_EventScript_BattleSpenserGold msgbox BattleFrontier_BattlePalaceBattleRoom_Text_SpenserThisTimeWontHoldBack, MSGBOX_DEFAULT frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH BattleFrontier_BattlePalaceBattleRoom_EventScript_BattleSpenserGold:: msgbox BattleFrontier_BattlePalaceBattleRoom_Text_Kaaah, MSGBOX_DEFAULT call BattleFrontier_BattlePalaceBattleRoom_EventScript_DoPalaceBattle - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_DefeatedSpenserGold + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_DefeatedSpenserGold goto BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyLost BattleFrontier_BattlePalaceBattleRoom_EventScript_DefeatedSpenserGold:: palace_incrementstreak frontier_getsymbols - compare VAR_RESULT, 2 - goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyWon + goto_if_eq VAR_RESULT, 2, BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyWon msgbox BattleFrontier_BattlePalaceBattleRoom_Text_SpenserYourTeamIsAdmirable, MSGBOX_DEFAULT applymovement LOCALID_PLAYER, BattleFrontier_BattlePalaceBattleRoom_Movement_FaceUp applymovement LOCALID_ATTENDANT, BattleFrontier_BattlePalaceBattleRoom_Movement_FaceDown @@ -287,8 +268,8 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_DefeatedSpenserGold:: frontier_givesymbol applymovement LOCALID_OPPONENT, Common_Movement_WalkInPlaceLeft waitmovement 0 - applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFastestRight - applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox BattleFrontier_BattlePalaceBattleRoom_Text_SpenserComeSeeMeAgain, MSGBOX_DEFAULT goto BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyWon @@ -417,14 +398,13 @@ BattleFrontier_BattlePalaceBattleRoom_Movement_UnusedOpponentEnter3: BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobby:: copyvar VAR_RESULT, VAR_FRONTIER_BATTLE_MODE - compare VAR_RESULT, FRONTIER_MODE_DOUBLES - goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyDoubles - warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY, 255, 5, 7 + goto_if_eq VAR_RESULT, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyDoubles + warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY, 5, 7 waitstate end BattleFrontier_BattlePalaceBattleRoom_EventScript_WarpToLobbyDoubles:: - warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY, 255, 19, 7 + warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY, 19, 7 waitstate end @@ -435,7 +415,7 @@ BattleFrontier_BattlePalaceBattleRoom_Movement_DusclopsEnter: walk_down walk_right walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end BattleFrontier_BattlePalaceBattleRoom_Movement_AzurillEnter: @@ -447,7 +427,7 @@ BattleFrontier_BattlePalaceBattleRoom_Movement_AzurillEnter: walk_fast_down walk_fast_down walk_fast_down - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 step_end diff --git a/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc b/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc index 011170bae8..ad2a2ee9f5 100644 --- a/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc @@ -15,20 +15,14 @@ BattleFrontier_BattlePalaceCorridor_EventScript_WalkThroughCorridor:: waitmovement 0 lockall palace_getcomment - compare VAR_RESULT, 0 - call_if_eq BattleFrontier_BattlePalaceCorridor_EventScript_RandomComment1 - compare VAR_RESULT, 1 - call_if_eq BattleFrontier_BattlePalaceCorridor_EventScript_RandomComment2 - compare VAR_RESULT, 2 - call_if_eq BattleFrontier_BattlePalaceCorridor_EventScript_RandomComment3 - compare VAR_RESULT, 3 - call_if_eq BattleFrontier_BattlePalaceCorridor_EventScript_StreakComment - compare VAR_RESULT, 4 - call_if_eq BattleFrontier_BattlePalaceCorridor_EventScript_LongStreakComment + call_if_eq VAR_RESULT, 0, BattleFrontier_BattlePalaceCorridor_EventScript_RandomComment1 + call_if_eq VAR_RESULT, 1, BattleFrontier_BattlePalaceCorridor_EventScript_RandomComment2 + call_if_eq VAR_RESULT, 2, BattleFrontier_BattlePalaceCorridor_EventScript_RandomComment3 + call_if_eq VAR_RESULT, 3, BattleFrontier_BattlePalaceCorridor_EventScript_StreakComment + call_if_eq VAR_RESULT, 4, BattleFrontier_BattlePalaceCorridor_EventScript_LongStreakComment closemessage frontier_get FRONTIER_DATA_LVL_MODE - compare VAR_RESULT, FRONTIER_LVL_OPEN - goto_if_eq BattleFrontier_BattlePalaceCorridor_EventScript_WalkToOpenBattleRoom + goto_if_eq VAR_RESULT, FRONTIER_LVL_OPEN, BattleFrontier_BattlePalaceCorridor_EventScript_WalkToOpenBattleRoom applymovement LOCALID_ATTENDANT, BattleFrontier_BattlePalaceCorridor_Movement_AttendantWalkTo50BattleRoom applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePalaceCorridor_Movement_PlayerWalkTo50BattleRoom waitmovement 0 @@ -53,7 +47,7 @@ BattleFrontier_BattlePalaceCorridor_EventScript_WalkToOpenBattleRoom:: closedoor 10, 3 waitdooranim BattleFrontier_BattlePalaceCorridor_EventScript_WarpToBattleRoom:: - warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM, 255, 7, 4 + warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM, 7, 4 waitstate end diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc index a51fa48fde..2a8903fe6f 100644 --- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc @@ -41,8 +41,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_QuitWithoutSaving:: BattleFrontier_BattlePalaceLobby_EventScript_WonChallenge:: lockall frontier_isbrain - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattlePalaceLobby_EventScript_DefeatedMaven + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePalaceLobby_EventScript_DefeatedMaven msgbox BattleFrontier_BattlePalaceLobby_Text_FirmTrueBondsFor7WinStreak, MSGBOX_DEFAULT goto BattleFrontier_BattlePalaceLobby_EventScript_GiveBattlePoints @@ -81,8 +80,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_SaveAfterChallenge:: playse SE_SAVE waitse call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattlePalaceLobby_EventScript_EndSaveAfterChallenge + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePalaceLobby_EventScript_EndSaveAfterChallenge message BattleFrontier_BattlePalaceLobby_Text_LikeToRecordMatch waitmessage multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE @@ -126,18 +124,13 @@ BattleFrontier_BattlePalaceLobby_EventScript_DoublesAttendant:: BattleFrontier_BattlePalaceLobby_EventScript_Attendant:: palace_get PALACE_DATA_PRIZE - compare VAR_RESULT, ITEM_NONE - goto_if_ne BattleFrontier_BattlePalaceLobby_EventScript_WonChallenge + goto_if_ne VAR_RESULT, ITEM_NONE, BattleFrontier_BattlePalaceLobby_EventScript_WonChallenge special SavePlayerParty - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_WelcomeForSingleBattle - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_WelcomeForDoubleBattle + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattlePalaceLobby_EventScript_WelcomeForSingleBattle + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_WelcomeForDoubleBattle BattleFrontier_BattlePalaceLobby_EventScript_AskTakeChallenge:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_AskTakeSingleBattleChallenge - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_AskTakeDoubleBattleChallenge + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattlePalaceLobby_EventScript_AskTakeSingleBattleChallenge + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_AskTakeDoubleBattleChallenge waitmessage multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE switch VAR_RESULT @@ -154,8 +147,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_TryEnterChallenge:: case FRONTIER_LVL_TENT, BattleFrontier_BattlePalaceLobby_EventScript_CancelChallenge case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_CancelChallenge frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattlePalaceLobby_Text_NowSelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -164,8 +156,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_TryEnterChallenge:: setvar VAR_0x8005, FRONTIER_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattlePalaceLobby_EventScript_LoadPartyAndCancelChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePalaceLobby_EventScript_LoadPartyAndCancelChallenge msgbox BattleFrontier_BattlePalaceLobby_Text_MustSaveBeforeChallenge2, MSGBOX_YESNO switch VAR_RESULT case NO, BattleFrontier_BattlePalaceLobby_EventScript_LoadPartyAndCancelChallenge @@ -184,22 +175,20 @@ BattleFrontier_BattlePalaceLobby_EventScript_SaveBeforeChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattlePalaceLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePalaceLobby_EventScript_CancelChallengeSaveFailed BattleFrontier_BattlePalaceLobby_EventScript_EnterChallenge:: special SavePlayerParty frontier_setpartyorder FRONTIER_PARTY_SIZE msgbox BattleFrontier_BattlePalaceLobby_Text_FollowMe, MSGBOX_DEFAULT closemessage call BattleFrontier_BattlePalaceLobby_EventScript_WalkToDoor - warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR, 255, 8, 13 + warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR, 8, 13 setvar VAR_TEMP_0, 0 waitstate end BattleFrontier_BattlePalaceLobby_EventScript_ExplainChallenge:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - goto_if_eq BattleFrontier_BattlePalaceLobby_EventScript_ExplainDoublesChallenge + goto_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_ExplainDoublesChallenge msgbox BattleFrontier_BattlePalaceLobby_Text_ExplainSingleBattleChallenge, MSGBOX_DEFAULT goto BattleFrontier_BattlePalaceLobby_EventScript_AskTakeChallenge @@ -249,25 +238,19 @@ BattleFrontier_BattlePalaceLobby_EventScript_AskTakeDoubleBattleChallenge:: return BattleFrontier_BattlePalaceLobby_EventScript_WalkToDoor:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_TalkedToSinglesAttendant - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_TalkedToDoublesAttendant + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattlePalaceLobby_EventScript_TalkedToSinglesAttendant + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_TalkedToDoublesAttendant applymovement VAR_LAST_TALKED, BattleFrontier_BattlePalaceLobby_Movement_WalkToDoor applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePalaceLobby_Movement_WalkToDoor waitmovement 0 - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_OpenSinglesHallDoor - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_OpenDoublesHallDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattlePalaceLobby_EventScript_OpenSinglesHallDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_OpenDoublesHallDoor waitdooranim applymovement VAR_LAST_TALKED, BattleFrontier_BattlePalaceLobby_Movement_AttendantEnterDoor applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePalaceLobby_Movement_PlayerEnterDoor waitmovement 0 - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_CloseSinglesHallDoor - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_CloseDoublesHallDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattlePalaceLobby_EventScript_CloseSinglesHallDoor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_CloseDoublesHallDoor waitdooranim return @@ -489,8 +472,8 @@ BattleFrontier_BattlePalaceLobby_Text_FeatWillBeRecorded: @ Unused BattleFrontier_BattlePalaceLobby_Text_BattlePointsFor7WinStreak: - .string "For the feat of your 7-win streak,\n" - .string "we present you with Battle Point(s).$" + .string "For the feat of your 7-win streak,\n" + .string "we present you with Battle Point(s).$" BattleFrontier_BattlePalaceLobby_Text_NoSpaceForPrize: .string "You seem to have no space for\n" diff --git a/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc b/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc index 44539747b8..fe2c6ed00f 100644 --- a/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc @@ -25,7 +25,7 @@ BattleFrontier_BattlePikeCorridor_EventScript_EnterCorridor:: waitmovement 0 frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 99 call BattleFrontier_BattlePike_EventScript_CloseCurtain - warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM, 255, 6, 10 + warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM, 6, 10 waitstate end diff --git a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc index ecbbafef24..3e729e2121 100644 --- a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc @@ -31,7 +31,7 @@ BattleFrontier_BattlePikeLobby_EventScript_QuitWithoutSaving:: lockall msgbox BattleFrontier_BattlePikeLobby_Text_FailedToSaveBeforeQuitting, MSGBOX_DEFAULT closemessage - pike_set PIKE_DATA_WIN_STREAK 0 + pike_set PIKE_DATA_WIN_STREAK, 0 pike_set PIKE_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 setvar VAR_TEMP_0, 255 @@ -41,8 +41,7 @@ BattleFrontier_BattlePikeLobby_EventScript_QuitWithoutSaving:: BattleFrontier_BattlePikeLobby_EventScript_WonChallenge:: lockall frontier_isbrain - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattlePikeLobby_EventScript_DefeatedQueen + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePikeLobby_EventScript_DefeatedQueen msgbox BattleFrontier_BattlePikeLobby_Text_PossessLuckInAbundance, MSGBOX_DEFAULT waitmessage goto BattleFrontier_BattlePikeLobby_EventScript_GiveBattlePoints @@ -116,8 +115,7 @@ BattleFrontier_BattlePikeLobby_EventScript_TryEnterChallenge:: case FRONTIER_LVL_TENT, BattleFrontier_BattlePikeLobby_EventScript_CancelChallenge case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_CancelChallenge frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattlePikeLobby_Text_PleaseChooseThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -126,8 +124,7 @@ BattleFrontier_BattlePikeLobby_EventScript_TryEnterChallenge:: setvar VAR_0x8005, FRONTIER_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattlePikeLobby_EventScript_LoadPartyAndCancelChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePikeLobby_EventScript_LoadPartyAndCancelChallenge msgbox BattleFrontier_BattlePikeLobby_Text_SaveBeforeChallenge, MSGBOX_YESNO switch VAR_RESULT case NO, BattleFrontier_BattlePikeLobby_EventScript_LoadPartyAndCancelChallenge @@ -149,8 +146,7 @@ BattleFrontier_BattlePikeLobby_EventScript_SaveBeforeChallenge:: call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 pike_savehelditems - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattlePikeLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePikeLobby_EventScript_CancelChallengeSaveFailed special SavePlayerParty frontier_setpartyorder FRONTIER_PARTY_SIZE msgbox BattleFrontier_BattlePikeLobby_Text_StepThisWay, MSGBOX_DEFAULT @@ -159,7 +155,7 @@ BattleFrontier_BattlePikeLobby_EventScript_SaveBeforeChallenge:: call BattleFrontier_BattlePikeLobby_EventScript_WalkToCorridor special HealPlayerParty call BattleFrontier_BattlePike_EventScript_CloseCurtain - warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR, 255, 6, 7 + warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR, 6, 7 setvar VAR_TEMP_0, 0 waitstate end @@ -368,7 +364,8 @@ BattleFrontier_BattlePikeLobby_Text_AwardYouTheseBattlePoints2: @ Unused BattleFrontier_BattlePikeLobby_Text_ReachedBattlePointLimit: .string "You appear to have reached the limit\n" - .string "for Battle Points…\pPlease exchange some Battle Points\n" + .string "for Battle Points…\p" + .string "Please exchange some Battle Points\n" .string "for prizes, then return…$" BattleFrontier_BattlePikeLobby_Text_FailedToSaveBeforeQuitting: diff --git a/data/maps/BattleFrontier_BattlePikeRoomFinal/scripts.inc b/data/maps/BattleFrontier_BattlePikeRoomFinal/scripts.inc index 15ebbeb3fd..e0246ed57d 100644 --- a/data/maps/BattleFrontier_BattlePikeRoomFinal/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeRoomFinal/scripts.inc @@ -18,7 +18,7 @@ BattleFrontier_BattlePikeRoomFinal_EventScript_EnterRoom:: msgbox BattleFrontier_BattlePikeRoomFinal_Text_CongratsThisWayPlease, MSGBOX_DEFAULT closemessage releaseall - warp MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY, 255, 5, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY, 5, 6 waitstate end diff --git a/data/maps/BattleFrontier_BattlePikeRoomNormal/scripts.inc b/data/maps/BattleFrontier_BattlePikeRoomNormal/scripts.inc index 6ab862287c..45f042e4f8 100644 --- a/data/maps/BattleFrontier_BattlePikeRoomNormal/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeRoomNormal/scripts.inc @@ -44,7 +44,7 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_EnterSingleBattleRoom:: case 1, BattleFrontier_BattlePikeRoomNormal_EventScript_WonSingleBattle BattleFrontier_BattlePikeRoomNormal_EventScript_WarpToLobbyLost:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST - warp MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY, 255, 5, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY, 5, 6 waitstate end @@ -137,21 +137,18 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_LucyEnter:: case FRONTIER_BRAIN_STREAK, BattleFrontier_BattlePikeRoomNormal_EventScript_BattleLucySilver case FRONTIER_BRAIN_STREAK_LONG, BattleFrontier_BattlePikeRoomNormal_EventScript_BattleLucyGold frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattlePikeRoomNormal_EventScript_BattleLucySilver + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattlePikeRoomNormal_EventScript_BattleLucySilver msgbox BattleFrontier_BattlePikeRoomNormal_Text_ImThePikeQueen, MSGBOX_DEFAULT frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH BattleFrontier_BattlePikeRoomNormal_EventScript_BattleLucySilver:: msgbox BattleFrontier_BattlePikeRoomNormal_Text_HopeYouDidntUseUpLuck, MSGBOX_DEFAULT call BattleFrontier_BattlePikeRoomNormal_EventScript_DoPikeQueenBattle - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucySilver + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucySilver goto BattleFrontier_BattlePikeRoomNormal_EventScript_WarpToLobbyLost BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucySilver:: frontier_getsymbols - compare VAR_RESULT, 0 - goto_if_ne BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucy + goto_if_ne VAR_RESULT, 0, BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucy msgbox BattleFrontier_BattlePikeRoomNormal_Text_LucyShowMeFrontierPass, MSGBOX_DEFAULT waitmessage playfanfare MUS_OBTAIN_SYMBOL @@ -165,21 +162,18 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucySilver:: BattleFrontier_BattlePikeRoomNormal_EventScript_IntroLucyGold:: frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattlePikeRoomNormal_EventScript_BattleLucyGold + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattlePikeRoomNormal_EventScript_BattleLucyGold msgbox BattleFrontier_BattlePikeRoomNormal_Text_LucyYouAgain, MSGBOX_DEFAULT frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH BattleFrontier_BattlePikeRoomNormal_EventScript_BattleLucyGold:: msgbox BattleFrontier_BattlePikeRoomNormal_Text_NowComeOn, MSGBOX_DEFAULT call BattleFrontier_BattlePikeRoomNormal_EventScript_DoPikeQueenBattle - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucyGold + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucyGold goto BattleFrontier_BattlePikeRoomNormal_EventScript_WarpToLobbyLost BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucyGold:: frontier_getsymbols - compare VAR_RESULT, 2 - goto_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucy + goto_if_eq VAR_RESULT, 2, BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucy msgbox BattleFrontier_BattlePikeRoomNormal_Text_LucyFrontierPass, MSGBOX_DEFAULT waitmessage playfanfare MUS_OBTAIN_SYMBOL @@ -199,7 +193,7 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_DefeatedLucy:: waitmovement 0 pike_get PIKE_DATA_WIN_STREAK addvar VAR_RESULT, 1 - pike_set PIKE_DATA_WIN_STREAK VAR_RESULT + pike_set PIKE_DATA_WIN_STREAK, VAR_RESULT call BattleFrontier_BattlePikeRoom_EventScript_WarpToFinalRoom waitstate end @@ -290,10 +284,8 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_EnterStatusRoom:: waitmovement 0 pike_getstatusmon copyvar VAR_0x8004, VAR_RESULT - compare VAR_0x8004, PIKE_STATUSMON_KIRLIA - call_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaAttack - compare VAR_0x8004, PIKE_STATUSMON_DUSCLOPS - call_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_DusclopsAttack + call_if_eq VAR_0x8004, PIKE_STATUSMON_KIRLIA, BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaAttack + call_if_eq VAR_0x8004, PIKE_STATUSMON_DUSCLOPS, BattleFrontier_BattlePikeRoomNormal_EventScript_DusclopsAttack msgbox BattleFrontier_BattlePikeRoomNormal_Text_AttacksWhenStartled, MSGBOX_DEFAULT closemessage releaseall @@ -303,17 +295,13 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaAttack:: msgbox BattleFrontier_BattlePikeRoomNormal_Text_KirliaStop, MSGBOX_DEFAULT closemessage waitse - playmoncry SPECIES_KIRLIA, 0 + playmoncry SPECIES_KIRLIA, CRY_MODE_NORMAL waitmoncry pike_getstatus - compare VAR_RESULT, PIKE_STATUS_TOXIC - call_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaUsedToxic - compare VAR_RESULT, PIKE_STATUS_BURN - call_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaUsedWillOWisp - compare VAR_RESULT, PIKE_STATUS_PARALYSIS - call_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaUsedThunderWave - compare VAR_RESULT, PIKE_STATUS_SLEEP - call_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaUsedHypnosis + call_if_eq VAR_RESULT, PIKE_STATUS_TOXIC, BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaUsedToxic + call_if_eq VAR_RESULT, PIKE_STATUS_BURN, BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaUsedWillOWisp + call_if_eq VAR_RESULT, PIKE_STATUS_PARALYSIS, BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaUsedThunderWave + call_if_eq VAR_RESULT, PIKE_STATUS_SLEEP, BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaUsedHypnosis pike_flashscreen waitstate applymovement LOCALID_OBJ_0, BattleFrontier_BattlePikeRoomNormal_Movement_NPCApproachMon @@ -321,11 +309,11 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaAttack:: applymovement LOCALID_OBJ_1, BattleFrontier_BattlePikeRoomNormal_Movement_MonFaceNPC waitmovement 0 waitse - playmoncry SPECIES_KIRLIA, 0 + playmoncry SPECIES_KIRLIA, CRY_MODE_NORMAL waitmoncry msgbox BattleFrontier_BattlePikeRoomNormal_Text_ThatsEnough, MSGBOX_DEFAULT waitse - playmoncry SPECIES_KIRLIA, 0 + playmoncry SPECIES_KIRLIA, CRY_MODE_NORMAL waitmoncry closemessage applymovement LOCALID_OBJ_1, BattleFrontier_BattlePikeRoomNormal_Movement_MonMoveAside @@ -338,13 +326,11 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_DusclopsAttack:: msgbox BattleFrontier_BattlePikeRoomNormal_Text_DusclopsStop, MSGBOX_DEFAULT closemessage waitse - playmoncry SPECIES_DUSCLOPS, 0 + playmoncry SPECIES_DUSCLOPS, CRY_MODE_NORMAL waitmoncry pike_getstatus - compare VAR_RESULT, PIKE_STATUS_FREEZE - call_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_DusclopsUsedIceBeam - compare VAR_RESULT, PIKE_STATUS_BURN - call_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_DusclopsUsedWillOWisp + call_if_eq VAR_RESULT, PIKE_STATUS_FREEZE, BattleFrontier_BattlePikeRoomNormal_EventScript_DusclopsUsedIceBeam + call_if_eq VAR_RESULT, PIKE_STATUS_BURN, BattleFrontier_BattlePikeRoomNormal_EventScript_DusclopsUsedWillOWisp pike_flashscreen waitstate applymovement LOCALID_OBJ_0, BattleFrontier_BattlePikeRoomNormal_Movement_NPCApproachMon @@ -352,11 +338,11 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_DusclopsAttack:: applymovement LOCALID_OBJ_1, BattleFrontier_BattlePikeRoomNormal_Movement_MonFaceNPC waitmovement 0 waitse - playmoncry SPECIES_DUSCLOPS, 0 + playmoncry SPECIES_DUSCLOPS, CRY_MODE_NORMAL waitmoncry msgbox BattleFrontier_BattlePikeRoomNormal_Text_ThatsEnough, MSGBOX_DEFAULT waitse - playmoncry SPECIES_DUSCLOPS, 0 + playmoncry SPECIES_DUSCLOPS, CRY_MODE_NORMAL waitmoncry closemessage applymovement LOCALID_OBJ_1, BattleFrontier_BattlePikeRoomNormal_Movement_MonMoveAside @@ -569,10 +555,8 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_StatusNPC:: BattleFrontier_BattlePikeRoomNormal_EventScript_HealNPC:: pike_healonetwomons - compare VAR_RESULT, 2 - call_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_WillRestoreTwoMons - compare VAR_RESULT, 1 - call_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_WillRestoreOneMon + call_if_eq VAR_RESULT, 2, BattleFrontier_BattlePikeRoomNormal_EventScript_WillRestoreTwoMons + call_if_eq VAR_RESULT, 1, BattleFrontier_BattlePikeRoomNormal_EventScript_WillRestoreOneMon playfanfare MUS_HEAL waitfanfare msgbox BattleFrontier_BattlePikeRoomNormal_Text_BestOfLuckFarewell, MSGBOX_DEFAULT @@ -608,46 +592,46 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_StatusMon:: end BattleFrontier_BattlePikeRoomNormal_EventScript_SetCurtainTilesMostlyClosed:: - setmetatile 4, 1, METATILE_BattlePike_Curtain_Stage1_Tile0, 1 - setmetatile 3, 2, METATILE_BattlePike_Curtain_Stage1_Tile1, 1 - setmetatile 4, 2, METATILE_BattlePike_Curtain_Stage1_Tile2, 1 - setmetatile 5, 2, METATILE_BattlePike_Curtain_Stage1_Tile3, 1 - setmetatile 3, 3, METATILE_BattlePike_Curtain_Stage1_Tile4, 1 - setmetatile 4, 3, METATILE_BattlePike_Curtain_Stage1_Tile5, 0 - setmetatile 5, 3, METATILE_BattlePike_Curtain_Stage1_Tile6, 1 + setmetatile 4, 1, METATILE_BattlePike_Curtain_Stage1_Tile0, TRUE + setmetatile 3, 2, METATILE_BattlePike_Curtain_Stage1_Tile1, TRUE + setmetatile 4, 2, METATILE_BattlePike_Curtain_Stage1_Tile2, TRUE + setmetatile 5, 2, METATILE_BattlePike_Curtain_Stage1_Tile3, TRUE + setmetatile 3, 3, METATILE_BattlePike_Curtain_Stage1_Tile4, TRUE + setmetatile 4, 3, METATILE_BattlePike_Curtain_Stage1_Tile5, FALSE + setmetatile 5, 3, METATILE_BattlePike_Curtain_Stage1_Tile6, TRUE special DrawWholeMapView return BattleFrontier_BattlePikeRoomNormal_EventScript_SetCurtainTilesLittleClosed:: - setmetatile 4, 1, METATILE_BattlePike_Curtain_Stage2_Tile0, 1 - setmetatile 3, 2, METATILE_BattlePike_Curtain_Stage2_Tile1, 1 - setmetatile 4, 2, METATILE_BattlePike_Curtain_Stage2_Tile2, 1 - setmetatile 5, 2, METATILE_BattlePike_Curtain_Stage2_Tile3, 1 - setmetatile 3, 3, METATILE_BattlePike_Curtain_Stage2_Tile4, 1 - setmetatile 4, 3, METATILE_BattlePike_Curtain_Stage2_Tile5, 0 - setmetatile 5, 3, METATILE_BattlePike_Curtain_Stage2_Tile6, 1 + setmetatile 4, 1, METATILE_BattlePike_Curtain_Stage2_Tile0, TRUE + setmetatile 3, 2, METATILE_BattlePike_Curtain_Stage2_Tile1, TRUE + setmetatile 4, 2, METATILE_BattlePike_Curtain_Stage2_Tile2, TRUE + setmetatile 5, 2, METATILE_BattlePike_Curtain_Stage2_Tile3, TRUE + setmetatile 3, 3, METATILE_BattlePike_Curtain_Stage2_Tile4, TRUE + setmetatile 4, 3, METATILE_BattlePike_Curtain_Stage2_Tile5, FALSE + setmetatile 5, 3, METATILE_BattlePike_Curtain_Stage2_Tile6, TRUE special DrawWholeMapView return BattleFrontier_BattlePikeRoomNormal_EventScript_SetCurtainTilesOpen:: - setmetatile 4, 1, METATILE_BattlePike_Curtain_Stage3_Tile0, 1 - setmetatile 3, 2, METATILE_BattlePike_Curtain_Stage3_Tile1, 1 - setmetatile 4, 2, METATILE_BattlePike_Curtain_Stage3_Tile2, 1 - setmetatile 5, 2, METATILE_BattlePike_Curtain_Stage3_Tile3, 1 - setmetatile 3, 3, METATILE_BattlePike_Curtain_Stage3_Tile4, 1 - setmetatile 4, 3, METATILE_BattlePike_Curtain_Stage3_Tile5, 0 - setmetatile 5, 3, METATILE_BattlePike_Curtain_Stage3_Tile6, 1 + setmetatile 4, 1, METATILE_BattlePike_Curtain_Stage3_Tile0, TRUE + setmetatile 3, 2, METATILE_BattlePike_Curtain_Stage3_Tile1, TRUE + setmetatile 4, 2, METATILE_BattlePike_Curtain_Stage3_Tile2, TRUE + setmetatile 5, 2, METATILE_BattlePike_Curtain_Stage3_Tile3, TRUE + setmetatile 3, 3, METATILE_BattlePike_Curtain_Stage3_Tile4, TRUE + setmetatile 4, 3, METATILE_BattlePike_Curtain_Stage3_Tile5, FALSE + setmetatile 5, 3, METATILE_BattlePike_Curtain_Stage3_Tile6, TRUE special DrawWholeMapView return BattleFrontier_BattlePikeRoomNormal_EventScript_SetCurtainTilesClosed:: - setmetatile 4, 1, METATILE_BattlePike_Curtain_Stage0_Tile0, 1 - setmetatile 3, 2, METATILE_BattlePike_Curtain_Stage0_Tile1, 1 - setmetatile 4, 2, METATILE_BattlePike_Curtain_Stage0_Tile2, 1 - setmetatile 5, 2, METATILE_BattlePike_Curtain_Stage0_Tile3, 1 - setmetatile 3, 3, METATILE_BattlePike_Curtain_Stage0_Tile4, 1 - setmetatile 4, 3, METATILE_BattlePike_Curtain_Stage0_Tile5, 0 - setmetatile 5, 3, METATILE_BattlePike_Curtain_Stage0_Tile6, 1 + setmetatile 4, 1, METATILE_BattlePike_Curtain_Stage0_Tile0, TRUE + setmetatile 3, 2, METATILE_BattlePike_Curtain_Stage0_Tile1, TRUE + setmetatile 4, 2, METATILE_BattlePike_Curtain_Stage0_Tile2, TRUE + setmetatile 5, 2, METATILE_BattlePike_Curtain_Stage0_Tile3, TRUE + setmetatile 3, 3, METATILE_BattlePike_Curtain_Stage0_Tile4, TRUE + setmetatile 4, 3, METATILE_BattlePike_Curtain_Stage0_Tile5, FALSE + setmetatile 5, 3, METATILE_BattlePike_Curtain_Stage0_Tile6, TRUE special DrawWholeMapView return diff --git a/data/maps/BattleFrontier_BattlePikeRoomWildMons/scripts.inc b/data/maps/BattleFrontier_BattlePikeRoomWildMons/scripts.inc index ee9e548f6e..19926b9675 100644 --- a/data/maps/BattleFrontier_BattlePikeRoomWildMons/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeRoomWildMons/scripts.inc @@ -16,7 +16,7 @@ BattleFrontier_BattlePikeRoomWildMons_EventScript_SetInWildMonRoom:: BattleFrontier_BattlePikeRoomWildMons_EventScript_WarpToLobbyLost:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST - warp MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY, 255, 5, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY, 5, 6 waitstate end @@ -32,10 +32,8 @@ BattleFrontier_BattlePikeRoomWildMons_EventScript_TurnPlayerNorth:: BattleFrontier_BattlePikeRoomWildMons_OnResume: call BattleFrontier_BattlePikeRoom_EventScript_ResetSketchedMoves frontier_get FRONTIER_DATA_BATTLE_OUTCOME - compare VAR_RESULT, B_OUTCOME_LOST - goto_if_eq BattleFrontier_BattlePikeRoomWildMons_EventScript_SetLost - compare VAR_RESULT, B_OUTCOME_DREW - goto_if_eq BattleFrontier_BattlePikeRoomWildMons_EventScript_SetLost + goto_if_eq VAR_RESULT, B_OUTCOME_LOST, BattleFrontier_BattlePikeRoomWildMons_EventScript_SetLost + goto_if_eq VAR_RESULT, B_OUTCOME_DREW, BattleFrontier_BattlePikeRoomWildMons_EventScript_SetLost end BattleFrontier_BattlePikeRoomWildMons_EventScript_SetLost:: diff --git a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc index 37737554f5..e95ca9dcea 100644 --- a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc @@ -28,7 +28,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_GetChallengeStatus:: end BattleFrontier_BattlePikeThreePathRoom_EventScript_WarpToLobby:: - warp MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY, 255, 5, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY, 5, 6 waitstate end @@ -151,8 +151,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_AskRetireChallenge:: BattleFrontier_BattlePikeThreePathRoom_EventScript_SetHintRoom:: pike_sethintroom - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattlePikeThreePathRoom_EventScript_SetPikeQueenHint + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePikeThreePathRoom_EventScript_SetPikeQueenHint setvar VAR_TEMP_5, 255 end @@ -173,8 +172,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_GivePikeQueenHint:: BattleFrontier_BattlePikeThreePathRoom_EventScript_HintGiver:: pike_gethint - compare VAR_RESULT, PIKE_HINT_BRAIN - goto_if_eq BattleFrontier_BattlePikeThreePathRoom_EventScript_GiveBrainHint + goto_if_eq VAR_RESULT, PIKE_HINT_BRAIN, BattleFrontier_BattlePikeThreePathRoom_EventScript_GiveBrainHint lock faceplayer msgbox BattleFrontier_BattlePikeThreePathRoom_Text_FindingItDifficultToChoose, MSGBOX_YESNO diff --git a/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc b/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc index 8993418ee8..a6b3f63c8e 100644 --- a/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc @@ -21,8 +21,7 @@ BattleFrontier_BattlePyramidFloor_EventScript_UpdateLight:: BattleFrontier_BattlePyramidFloor_EventScript_UpdateLightLoop:: special CallBattlePyramidFunction delay 2 - compare VAR_RESULT, 2 - goto_if_ne BattleFrontier_BattlePyramidFloor_EventScript_UpdateLightLoop + goto_if_ne VAR_RESULT, 2, BattleFrontier_BattlePyramidFloor_EventScript_UpdateLightLoop setvar VAR_TEMP_D, 0 releaseall end @@ -45,18 +44,12 @@ BattleFrontier_BattlePyramidFloor_OnResume: case CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramid_EventScript_WarpToLobby case CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidFloor_EventScript_ReadyChallenge frontier_get FRONTIER_DATA_BATTLE_OUTCOME - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq BattleFrontier_BattlePyramidFloor_EventScript_ResetParty - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq BattleFrontier_BattlePyramidFloor_EventScript_ResetParty - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattlePyramidFloor_EventScript_ResetParty - compare VAR_RESULT, B_OUTCOME_LOST - goto_if_eq BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost - compare VAR_RESULT, B_OUTCOME_DREW - goto_if_eq BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost - compare VAR_RESULT, B_OUTCOME_FORFEITED - goto_if_eq BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, BattleFrontier_BattlePyramidFloor_EventScript_ResetParty + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, BattleFrontier_BattlePyramidFloor_EventScript_ResetParty + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidFloor_EventScript_ResetParty + goto_if_eq VAR_RESULT, B_OUTCOME_LOST, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost + goto_if_eq VAR_RESULT, B_OUTCOME_DREW, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost + goto_if_eq VAR_RESULT, B_OUTCOME_FORFEITED, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost frontier_isbattletype BATTLE_TYPE_TRAINER @ VAR_RESULT seems to be ignored here setvar VAR_TEMP_D, 1 BattleFrontier_BattlePyramidFloor_EventScript_ResetParty:: @@ -70,7 +63,7 @@ BattleFrontier_BattlePyramid_EventScript_WarpToLobby:: pyramid_updatelight 0, PYRAMID_LIGHT_SET_RADIUS pyramid_clearhelditems special HealPlayerParty - warpsilent MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY, 255, 7, 13 + warpsilent MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY, 7, 13 waitstate end @@ -97,17 +90,16 @@ BattlePyramid_WarpToNextFloor:: frontier_get FRONTIER_DATA_BATTLE_NUM @ Floor number addvar VAR_RESULT, 1 frontier_set FRONTIER_DATA_BATTLE_NUM, VAR_RESULT - compare VAR_RESULT, 7 - goto_if_eq BattlePyramid_WarpToTop + goto_if_eq VAR_RESULT, 7, BattlePyramid_WarpToTop pyramid_seedfloor frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 setvar VAR_RESULT, 0 - warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR, 255, 1, 1 + warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR, 1, 1 waitstate end BattlePyramid_WarpToTop:: - warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP, 255, 17, 17 + warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP, 17, 17 waitstate end @@ -124,8 +116,7 @@ BattlePyramid_TrainerBattle:: BattlePyramid_FindItemBall:: pyramid_setitem callstd STD_FIND_ITEM - compare VAR_0x8007, 0 - goto_if_eq BattlePyramid_FindItemBallEnd + goto_if_eq VAR_0x8007, 0, BattlePyramid_FindItemBallEnd pyramid_hideitem BattlePyramid_FindItemBallEnd:: end diff --git a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc index c93deee3ec..550644511b 100644 --- a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc @@ -45,8 +45,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_QuitWithoutSaving:: BattleFrontier_BattlePyramidLobby_EventScript_WonChallenge:: lockall frontier_isbrain - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattlePyramidLobby_EventScript_DefeatedKing + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePyramidLobby_EventScript_DefeatedKing msgbox BattleFrontier_BattlePyramidLobby_Text_YouveConqueredPyramid, MSGBOX_DEFAULT goto BattleFrontier_BattlePyramidLobby_EventScript_GiveBattlePoints @@ -54,8 +53,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_DefeatedKing:: msgbox BattleFrontier_BattlePyramidLobby_Text_YouveDefeatedPyramidKing, MSGBOX_DEFAULT BattleFrontier_BattlePyramidLobby_EventScript_GiveBattlePoints:: special DoBattlePyramidMonsHaveHeldItem - compare VAR_RESULT, TRUE - call_if_eq BattleFrontier_BattlePyramidLobby_EventScript_StoreHeldItemsInPyramidBag + call_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePyramidLobby_EventScript_StoreHeldItemsInPyramidBag clearflag FLAG_STORING_ITEMS_IN_PYRAMID_BAG frontier_checkairshow special LoadPlayerParty @@ -130,8 +128,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_TryEnterChallenge:: case FRONTIER_LVL_TENT, BattleFrontier_BattlePyramidLobby_EventScript_CancelChallenge case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_CancelChallenge frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattlePyramidLobby_Text_SelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -140,8 +137,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_TryEnterChallenge:: setvar VAR_0x8005, FRONTIER_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattlePyramidLobby_EventScript_LoadPartyAndCancelChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidLobby_EventScript_LoadPartyAndCancelChallenge msgbox BattleFrontier_BattlePyramidLobby_Text_OkayToSaveBeforeChallenge, MSGBOX_YESNO switch VAR_RESULT case NO, BattleFrontier_BattlePyramidLobby_EventScript_LoadPartyAndCancelChallenge @@ -162,8 +158,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_SaveBeforeChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattlePyramidLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidLobby_EventScript_CancelChallengeSaveFailed BattleFrontier_BattlePyramidLobby_EventScript_EnterChallenge:: special SavePlayerParty frontier_setpartyorder FRONTIER_PARTY_SIZE @@ -173,7 +168,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_EnterChallenge:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 setvar VAR_RESULT, 0 special HealPlayerParty - warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR, 255, 1, 1 + warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR, 1, 1 setvar VAR_TEMP_0, 0 waitstate end @@ -233,8 +228,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_NoHint:: BattleFrontier_BattlePyramidLobby_EventScript_GiveHintLv50:: msgbox BattleFrontier_BattlePyramidLobby_Text_Aah, MSGBOX_DEFAULT pyramid_get PYRAMID_DATA_WIN_STREAK_ACTIVE_50 - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattlePyramidLobby_EventScript_GiveHintGetLv50Streak + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattlePyramidLobby_EventScript_GiveHintGetLv50Streak setvar VAR_RESULT, 0 goto BattleFrontier_BattlePyramidLobby_EventScript_DoHintComment return @@ -247,8 +241,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_GiveHintGetLv50Streak:: BattleFrontier_BattlePyramidLobby_EventScript_GiveHintLvOpen:: msgbox BattleFrontier_BattlePyramidLobby_Text_Aah, MSGBOX_DEFAULT pyramid_get PYRAMID_DATA_WIN_STREAK_ACTIVE_OPEN - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattlePyramidLobby_EventScript_GiveHintGetLvOpenStreak + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattlePyramidLobby_EventScript_GiveHintGetLvOpenStreak setvar VAR_RESULT, 0 goto BattleFrontier_BattlePyramidLobby_EventScript_DoHintComment return @@ -378,8 +371,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_WalkToPanelAndReceiveBag:: waitmovement 0 msgbox BattleFrontier_BattlePyramidLobby_Text_WeWillHoldBagForSafekeeping, MSGBOX_DEFAULT pyramid_get PYRAMID_DATA_WIN_STREAK - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattlePyramidLobby_EventScript_ReceiveNewBattleBag + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidLobby_EventScript_ReceiveNewBattleBag msgbox BattleFrontier_BattlePyramidLobby_Text_PleaseTakePreviousBattleBag, MSGBOX_DEFAULT goto BattleFrontier_BattlePyramidLobby_EventScript_ReceiveBattleBag @@ -433,8 +425,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_StoreHeldItemsInPyramidBag:: msgbox BattleFrontier_BattlePyramidLobby_Text_MonHoldingItemCannotTake, MSGBOX_DEFAULT setflag FLAG_STORING_ITEMS_IN_PYRAMID_BAG special TryStoreHeldItemsInPyramidBag - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattlePyramidLobby_EventScript_HeldItemsStoredInPyramidBag + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidLobby_EventScript_HeldItemsStoredInPyramidBag message BattleFrontier_BattlePyramidLobby_Text_BagCannotHoldPickItemsToKeep waitmessage goto BattleFrontier_BattlePyramidLobby_EventScript_PickItemsToKeep @@ -472,8 +463,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_PickItemsFromParty:: BattleFrontier_BattlePyramidLobby_EventScript_ExitPickItems:: special DoBattlePyramidMonsHaveHeldItem - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattlePyramidLobby_EventScript_PartyStillHasHeldItems + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePyramidLobby_EventScript_PartyStillHasHeldItems return BattleFrontier_BattlePyramidLobby_EventScript_PartyStillHasHeldItems:: diff --git a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc index 1f031ea40f..385356c4ba 100644 --- a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc @@ -20,16 +20,14 @@ BattleFrontier_BattlePyramidTop_OnWarp: BattleFrontier_BattlePyramidTop_EventScript_SetUpObjects:: setvar VAR_TEMP_1, 1 turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH - compare VAR_TEMP_C, 0 - goto_if_ne BattleFrontier_BattlePyramidTop_EventScript_EndSetUpObjects + goto_if_ne VAR_TEMP_C, 0, BattleFrontier_BattlePyramidTop_EventScript_EndSetUpObjects setobjectxyperm LOCALID_BRANDON, 0, 0 BattleFrontier_BattlePyramidTop_EventScript_EndSetUpObjects:: end BattleFrontier_BattlePyramidTop_OnResume: frontier_getbrainstatus - compare VAR_RESULT, FRONTIER_BRAIN_NOT_READY - goto_if_eq BattleFrontier_BattlePyramidTop_EventScript_CheckChallengeStatus + goto_if_eq VAR_RESULT, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattlePyramidTop_EventScript_CheckChallengeStatus call BattleFrontier_EventScript_SetBrainObjectGfx BattleFrontier_BattlePyramidTop_EventScript_CheckChallengeStatus:: copyvar VAR_TEMP_C, VAR_RESULT @@ -39,12 +37,9 @@ BattleFrontier_BattlePyramidTop_EventScript_CheckChallengeStatus:: case CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramid_EventScript_WarpToLobby case CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidTop_EventScript_ReadyChallenge frontier_get FRONTIER_DATA_BATTLE_OUTCOME - compare VAR_RESULT, B_OUTCOME_LOST - goto_if_eq BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost - compare VAR_RESULT, B_OUTCOME_DREW - goto_if_eq BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost - compare VAR_RESULT, B_OUTCOME_FORFEITED - goto_if_eq BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost + goto_if_eq VAR_RESULT, B_OUTCOME_LOST, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost + goto_if_eq VAR_RESULT, B_OUTCOME_DREW, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost + goto_if_eq VAR_RESULT, B_OUTCOME_FORFEITED, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost end BattleFrontier_BattlePyramidTop_OnFrame: @@ -74,10 +69,8 @@ BattleFrontier_BattlePyramidTop_EventScript_ReadyChallenge:: BattleFrontier_BattlePyramidTop_EventScript_Attendant:: lock faceplayer - compare VAR_TEMP_D, 0 - goto_if_ne BattleFrontier_BattlePyramidTop_EventScript_StepForwardWhenReady - compare VAR_TEMP_C, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattlePyramidTop_EventScript_BrandonHereMoveAside + goto_if_ne VAR_TEMP_D, 0, BattleFrontier_BattlePyramidTop_EventScript_StepForwardWhenReady + goto_if_ne VAR_TEMP_C, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattlePyramidTop_EventScript_BrandonHereMoveAside msgbox BattleFrontier_BattlePyramidTop_Text_ReachedSummitUpYouGo, MSGBOX_DEFAULT closemessage applymovement LOCALID_ATTENDANT, BattleFrontier_BattlePyramidTop_Movement_AttendantMoveAside @@ -93,7 +86,7 @@ BattleFrontier_BattlePyramidTop_EventScript_Attendant:: closemessage BattleFrontier_BattlePyramidTop_EventScript_WarpToLobbyWon:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_WON - warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY, 255, 7, 13 + warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY, 7, 13 waitstate end @@ -116,8 +109,7 @@ BattleFrontier_BattlePyramidTop_EventScript_BattleBrandon:: case FRONTIER_BRAIN_STREAK, BattleFrontier_BattlePyramidTop_EventScript_BrandonHeardSilverSpeech case FRONTIER_BRAIN_STREAK_LONG, BattleFrontier_BattlePyramidTop_EventScript_BrandonHeardGoldSpeech frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattlePyramidTop_EventScript_BrandonHeardSilverSpeech + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattlePyramidTop_EventScript_BrandonHeardSilverSpeech special SpawnCameraObject applymovement OBJ_EVENT_ID_CAMERA, BattleFrontier_BattlePyramidTop_Movement_CameraPanUp waitmovement 0 @@ -137,14 +129,12 @@ BattleFrontier_BattlePyramidTop_EventScript_BattleBrandonSilver:: msgbox BattleFrontier_BattlePyramidTop_Text_BringCourageToOurBattle, MSGBOX_DEFAULT call BattleFrontier_BattlePyramidTop_EventScript_DoBrandonBattle playbgm MUS_B_PYRAMID_TOP, FALSE - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattlePyramidTop_EventScript_DefeatedBrandonSilver + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattlePyramidTop_EventScript_DefeatedBrandonSilver goto BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost BattleFrontier_BattlePyramidTop_EventScript_DefeatedBrandonSilver:: frontier_getsymbols - compare VAR_RESULT, 0 - goto_if_ne BattleFrontier_BattlePyramidTop_EventScript_WarpToLobbyWon + goto_if_ne VAR_RESULT, 0, BattleFrontier_BattlePyramidTop_EventScript_WarpToLobbyWon msgbox BattleFrontier_BattlePyramidTop_Text_BrandonFrontierPassPlease, MSGBOX_DEFAULT playfanfare MUS_OBTAIN_SYMBOL message BattleFrontier_BattlePyramidTop_Text_ReceivedBraveSymbol @@ -156,8 +146,7 @@ BattleFrontier_BattlePyramidTop_EventScript_DefeatedBrandonSilver:: BattleFrontier_BattlePyramidTop_EventScript_BrandonIntroGold:: frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattlePyramidTop_EventScript_BrandonHeardGoldSpeech + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattlePyramidTop_EventScript_BrandonHeardGoldSpeech special SpawnCameraObject applymovement OBJ_EVENT_ID_CAMERA, BattleFrontier_BattlePyramidTop_Movement_CameraPanUp waitmovement 0 @@ -177,14 +166,12 @@ BattleFrontier_BattlePyramidTop_EventScript_BattleBrandonGold:: msgbox BattleFrontier_BattlePyramidTop_Text_EverythingYouHave, MSGBOX_DEFAULT call BattleFrontier_BattlePyramidTop_EventScript_DoBrandonBattle playbgm MUS_B_PYRAMID_TOP, FALSE - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattlePyramidTop_EventScript_DefeatedBrandonGold + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattlePyramidTop_EventScript_DefeatedBrandonGold goto BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost BattleFrontier_BattlePyramidTop_EventScript_DefeatedBrandonGold:: frontier_getsymbols - compare VAR_RESULT, 2 - goto_if_eq BattleFrontier_BattlePyramidTop_EventScript_WarpToLobbyWon + goto_if_eq VAR_RESULT, 2, BattleFrontier_BattlePyramidTop_EventScript_WarpToLobbyWon msgbox BattleFrontier_BattlePyramidTop_Text_BrandonRemarkableHaveThis, MSGBOX_DEFAULT playfanfare MUS_OBTAIN_SYMBOL message BattleFrontier_BattlePyramidTop_Text_BraveSymbolTookGoldenShine @@ -204,12 +191,12 @@ BattleFrontier_BattlePyramidTop_EventScript_DoBrandonBattle:: BattleFrontier_BattlePyramidTop_Movement_AttendantMoveAside: walk_right - walk_in_place_fastest_left + walk_in_place_faster_left step_end BattleFrontier_BattlePyramidTop_Movement_AttendantBlockPath: walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end BattleFrontier_BattlePyramidTop_Movement_PlayerClimbToTop: @@ -218,7 +205,7 @@ BattleFrontier_BattlePyramidTop_Movement_PlayerClimbToTop: walk_up walk_up walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end BattleFrontier_BattlePyramidTop_Movement_BrandonApproachPlayer: diff --git a/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc index c909239bea..9b466af3bc 100644 --- a/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc @@ -25,8 +25,7 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_EnterRoom:: applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleTowerBattleRoom_Movement_PlayerEnter waitmovement 0 frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_OpponentEnter + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerBattleRoom_EventScript_OpponentEnter applymovement LOCALID_ATTENDANT_1, BattleFrontier_BattleTowerBattleRoom_Movement_AttendantApproachPlayer waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleTowerBattleRoom_Movement_PlayerFaceAttendant @@ -62,8 +61,7 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_DefeatedOpponent:: waitmovement 0 removeobject LOCALID_OPPONENT frontier_getbrainstatus - compare VAR_RESULT, FRONTIER_BRAIN_NOT_READY - call_if_ne BattleFrontier_BattleTowerBattleRoom_EventScript_SecondAttendantEnter + call_if_ne VAR_RESULT, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleTowerBattleRoom_EventScript_SecondAttendantEnter applymovement LOCALID_ATTENDANT_1, BattleFrontier_BattleTowerBattleRoom_Movement_AttendantApproachPlayer waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleTowerBattleRoom_Movement_PlayerFaceAttendant @@ -75,13 +73,11 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_DefeatedOpponent:: BattleFrontier_BattleTowerBattleRoom_EventScript_AskReadyForOpponent:: frontier_getbrainstatus copyvar VAR_TEMP_F, VAR_RESULT - compare VAR_RESULT, FRONTIER_BRAIN_NOT_READY - goto_if_ne BattleFrontier_BattleTowerBattleRoom_EventScript_MaidenUpNext + goto_if_ne VAR_RESULT, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleTowerBattleRoom_EventScript_MaidenUpNext frontier_get FRONTIER_DATA_BATTLE_NUM call BattleFrontier_BattleTowerBattleRoom_EventScript_ReadyForOpponent call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_AskReadyForOpponentNoRecord + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerBattleRoom_EventScript_AskReadyForOpponentNoRecord multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, TRUE switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_ContinueChallenge @@ -214,16 +210,14 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_SecondAttendantEnter:: return BattleFrontier_BattleTowerBattleRoom_EventScript_MaidenUpNext:: - compare VAR_TEMP_2, 1 - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_AskReadyForMaiden + goto_if_eq VAR_TEMP_2, 1, BattleFrontier_BattleTowerBattleRoom_EventScript_AskReadyForMaiden msgbox BattleFrontier_BattleTowerBattleRoom_Text_SalonMaidenOnHerWay, MSGBOX_DEFAULT setvar VAR_TEMP_2, 1 BattleFrontier_BattleTowerBattleRoom_EventScript_AskReadyForMaiden:: message BattleFrontier_BattleTowerBattleRoom_Text_ReadyForSalonMaiden waitmessage call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_AskReadyForMaidenNoRecord + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerBattleRoom_EventScript_AskReadyForMaidenNoRecord multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, TRUE switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_BattleAnabel @@ -255,22 +249,19 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_BattleAnabel:: case FRONTIER_BRAIN_STREAK, BattleFrontier_BattleTowerBattleRoom_EventScript_BattleAnabelSilver case FRONTIER_BRAIN_STREAK_LONG, BattleFrontier_BattleTowerBattleRoom_EventScript_BattleAnabelGold frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattleTowerBattleRoom_EventScript_BattleAnabelSilver + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattleTowerBattleRoom_EventScript_BattleAnabelSilver msgbox BattleFrontier_BattleTowerBattleRoom_Text_GreetingsImAnabel, MSGBOX_DEFAULT frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH BattleFrontier_BattleTowerBattleRoom_EventScript_BattleAnabelSilver:: msgbox BattleFrontier_BattleTowerBattleRoom_Text_LetMeSeeYourTalent, MSGBOX_DEFAULT call BattleFrontier_BattleTowerBattleRoom_EventScript_DoTowerBattle - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_DefeatedAnabelSilver + goto_if_eq VAR_RESULT, B_OUTCOME_WON, BattleFrontier_BattleTowerBattleRoom_EventScript_DefeatedAnabelSilver goto BattleFrontier_BattleTower_EventScript_WarpToLobbyLost BattleFrontier_BattleTowerBattleRoom_EventScript_DefeatedAnabelSilver:: call BattleFrontier_EventScript_IncrementWinStreak frontier_getsymbols - compare VAR_RESULT, 0 - goto_if_ne BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyWon + goto_if_ne VAR_RESULT, 0, BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyWon msgbox BattleFrontier_BattleTowerBattleRoom_Text_AnabelTalentShallBeRecognized, MSGBOX_DEFAULT playfanfare MUS_OBTAIN_SYMBOL message BattleFrontier_BattleTowerBattleRoom_Text_ReceivedAbilitySymbol @@ -282,22 +273,19 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_DefeatedAnabelSilver:: BattleFrontier_BattleTowerBattleRoom_EventScript_AnabelGoldIntro:: frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH - compare VAR_RESULT, FALSE - goto_if_ne BattleFrontier_BattleTowerBattleRoom_EventScript_BattleAnabelGold + goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattleTowerBattleRoom_EventScript_BattleAnabelGold msgbox BattleFrontier_BattleTowerBattleRoom_Text_AnabelYouCameBack, MSGBOX_DEFAULT frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH BattleFrontier_BattleTowerBattleRoom_EventScript_BattleAnabelGold:: msgbox BattleFrontier_BattleTowerBattleRoom_Text_LetsBeginShallWe, MSGBOX_DEFAULT call BattleFrontier_BattleTowerBattleRoom_EventScript_DoTowerBattle - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_DefeatedAnabelGold + goto_if_eq VAR_RESULT, B_OUTCOME_WON, BattleFrontier_BattleTowerBattleRoom_EventScript_DefeatedAnabelGold goto BattleFrontier_BattleTower_EventScript_WarpToLobbyLost BattleFrontier_BattleTowerBattleRoom_EventScript_DefeatedAnabelGold:: call BattleFrontier_EventScript_IncrementWinStreak frontier_getsymbols - compare VAR_RESULT, 2 - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyWon + goto_if_eq VAR_RESULT, 2, BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyWon msgbox BattleFrontier_BattleTowerBattleRoom_Text_AnabelCongratsYourPassPlease, MSGBOX_DEFAULT playfanfare MUS_OBTAIN_SYMBOL message BattleFrontier_BattleTowerBattleRoom_Text_AbilitySymbolTookGoldenShine @@ -317,8 +305,7 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_DoTowerBattle:: special DoSpecialTrainerBattle waitstate copyvar VAR_0x8004, VAR_FRONTIER_BATTLE_MODE - compare VAR_0x8004, FRONTIER_MODE_LINK_MULTIS - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_EndTowerBattle + goto_if_eq VAR_0x8004, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerBattleRoom_EventScript_EndTowerBattle frontier_restorehelditems special HealPlayerParty frontier_resetsketch @@ -422,29 +409,26 @@ BattleFrontier_BattleTowerBattleRoom_Movement_AnabelEnter: BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobby:: copyvar VAR_RESULT, VAR_FRONTIER_BATTLE_MODE - compare VAR_RESULT, FRONTIER_MODE_DOUBLES - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyDoubles - compare VAR_RESULT, FRONTIER_MODE_MULTIS - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyMultis - compare VAR_RESULT, FRONTIER_MODE_LINK_MULTIS - goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyLinkMultis - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, 255, 6, 6 + goto_if_eq VAR_RESULT, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyDoubles + goto_if_eq VAR_RESULT, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyMultis + goto_if_eq VAR_RESULT, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyLinkMultis + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, 6, 6 waitstate end BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyDoubles:: - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, 255, 10, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, 10, 6 waitstate end BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyMultis:: - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, 255, 14, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, 14, 6 waitstate end BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyLinkMultis:: tower_closelink - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, 255, 18, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, 18, 6 waitstate end diff --git a/data/maps/BattleFrontier_BattleTowerCorridor/scripts.inc b/data/maps/BattleFrontier_BattleTowerCorridor/scripts.inc index c09c897e98..d0f3d487a8 100644 --- a/data/maps/BattleFrontier_BattleTowerCorridor/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerCorridor/scripts.inc @@ -6,15 +6,14 @@ BattleFrontier_BattleTowerCorridor_MapScripts:: .byte 0 BattleFrontier_BattleTowerCorridor_OnLoad: - compare VAR_0x8006, 1 - goto_if_eq BattleFrontier_BattleTowerCorridor_EventScript_OpenFarDoor - setmetatile 12, 0, METATILE_BattleFrontier_CorridorOpenDoor_Top, 0 - setmetatile 12, 1, METATILE_BattleFrontier_CorridorOpenDoor_Bottom, 0 + goto_if_eq VAR_0x8006, 1, BattleFrontier_BattleTowerCorridor_EventScript_OpenFarDoor + setmetatile 12, 0, METATILE_BattleFrontier_CorridorOpenDoor_Top, FALSE + setmetatile 12, 1, METATILE_BattleFrontier_CorridorOpenDoor_Bottom, FALSE end BattleFrontier_BattleTowerCorridor_EventScript_OpenFarDoor:: - setmetatile 15, 0, METATILE_BattleFrontier_CorridorOpenDoor_Top, 0 - setmetatile 15, 1, METATILE_BattleFrontier_CorridorOpenDoor_Bottom, 0 + setmetatile 15, 0, METATILE_BattleFrontier_CorridorOpenDoor_Top, FALSE + setmetatile 15, 1, METATILE_BattleFrontier_CorridorOpenDoor_Bottom, FALSE end BattleFrontier_BattleTowerCorridor_OnFrame: @@ -23,8 +22,7 @@ BattleFrontier_BattleTowerCorridor_OnFrame: BattleFrontier_BattleTowerCorridor_EventScript_EnterCorridor:: setvar VAR_TEMP_0, 1 - compare VAR_0x8006, 1 - goto_if_eq BattleFrontier_BattleTowerCorridor_EventScript_WalkToFarDoor + goto_if_eq VAR_0x8006, 1, BattleFrontier_BattleTowerCorridor_EventScript_WalkToFarDoor applymovement LOCALID_ATTENDANT, BattleFrontier_BattleTowerCorridor_Movement_AttendantWalkToDoor applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleTowerCorridor_Movement_PlayerWalkToDoor waitmovement 0 @@ -37,7 +35,7 @@ BattleFrontier_BattleTowerCorridor_EventScript_WalkToFarDoor:: BattleFrontier_BattleTowerCorridor_EventScript_WarpToBattleRoom:: setvar VAR_TEMP_0, 0 - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM, 255, 4, 8 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM, 4, 8 waitstate end diff --git a/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc b/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc index 0021b9e842..06f4ff0a70 100644 --- a/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc @@ -26,34 +26,30 @@ BattleFrontier_BattleTowerElevator_EventScript_EnterElevator:: end BattleFrontier_BattleTowerElevator_EventScript_WarpToNextRoom:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleTowerElevator_EventScript_WarpToCorridor - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleTowerElevator_EventScript_WarpToCorridor - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS - call_if_eq BattleFrontier_BattleTowerElevator_EventScript_WarpToNextRoomMulti - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - call_if_eq BattleFrontier_BattleTowerElevator_EventScript_WarpToCorridorMulti + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerElevator_EventScript_WarpToCorridor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerElevator_EventScript_WarpToCorridor + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerElevator_EventScript_WarpToNextRoomMulti + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerElevator_EventScript_WarpToCorridorMulti return BattleFrontier_BattleTowerElevator_EventScript_WarpToCorridor:: - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR, 255, 8, 1 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR, 8, 1 waitstate return BattleFrontier_BattleTowerElevator_EventScript_WarpToNextRoomMulti:: goto_if_unset FLAG_CHOSEN_MULTI_BATTLE_NPC_PARTNER, BattleFrontier_BattleTowerElevator_EventScript_WarpToPartnerRoom - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR, 255, 7, 2 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR, 7, 2 waitstate return BattleFrontier_BattleTowerElevator_EventScript_WarpToCorridorMulti:: - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR, 255, 7, 2 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR, 7, 2 waitstate return BattleFrontier_BattleTowerElevator_EventScript_WarpToPartnerRoom:: - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM, 255, 10, 1 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM, 10, 1 waitstate return diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index ab2a620436..40936936a7 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -19,8 +19,7 @@ BattleFrontier_BattleTowerLobby_OnResume: BattleFrontier_BattleTowerLobby_OnTransition: call BattleFrontier_BattleTowerLobby_EventScript_ShowOrHideReporter apprentice_shouldcheckgone - compare VAR_0x8004, FALSE @ Always TRUE here - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ShowApprentice + goto_if_eq VAR_0x8004, FALSE, BattleFrontier_BattleTowerLobby_EventScript_ShowApprentice @ VAR_0x8004 always TRUE here goto_if_set FLAG_DAILY_APPRENTICE_LEAVES, BattleFrontier_BattleTowerLobby_EventScript_HideApprentice BattleFrontier_BattleTowerLobby_EventScript_ShowApprentice:: clearflag FLAG_HIDE_APPRENTICE @@ -69,8 +68,7 @@ BattleFrontier_BattleTowerLobby_EventScript_WonChallenge:: lock faceplayer frontier_isbrain - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_DefeatedMaiden + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_DefeatedMaiden message BattleFrontier_BattleTowerLobby_Text_CongratsBeatenSeven waitmessage goto BattleFrontier_BattleTowerLobby_EventScript_GiveRibbons @@ -79,8 +77,7 @@ BattleFrontier_BattleTowerLobby_EventScript_DefeatedMaiden:: msgbox BattleFrontier_BattleTowerLobby_Text_CongratsDefeatedMaiden, MSGBOX_DEFAULT BattleFrontier_BattleTowerLobby_EventScript_GiveRibbons:: tower_giveribbons - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_GiveBattlePoints + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_BattleTowerLobby_EventScript_GiveBattlePoints message BattleFrontier_BattleTowerLobby_Text_HereAreSomeRibbons waitmessage playfanfare MUS_OBTAIN_ITEM @@ -92,8 +89,7 @@ BattleFrontier_BattleTowerLobby_EventScript_GiveBattlePoints:: msgbox BattleFrontier_Text_ObtainedXBattlePoints, MSGBOX_GETPOINTS call BattleFrontier_BattleTowerLobby_EventScript_AskSaveBattle tower_get TOWER_DATA_WIN_STREAK - compare VAR_RESULT, 49 - goto_if_ne BattleFrontier_BattleTowerLobby_EventScript_LookForwardToChallenge + goto_if_ne VAR_RESULT, 49, BattleFrontier_BattleTowerLobby_EventScript_LookForwardToChallenge msgbox BattleFrontier_BattleTowerLobby_Text_AboutToFace50thTrainer, MSGBOX_DEFAULT BattleFrontier_BattleTowerLobby_EventScript_LookForwardToChallenge:: msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT @@ -103,12 +99,10 @@ BattleFrontier_BattleTowerLobby_EventScript_LookForwardToChallenge:: end BattleFrontier_BattleTowerLobby_EventScript_LostChallenge:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS - goto_if_ne BattleFrontier_BattleTowerLobby_EventScript_CancelWinStreak + goto_if_ne VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_CancelWinStreak goto_if_set FLAG_CHOSEN_MULTI_BATTLE_NPC_PARTNER, BattleFrontier_BattleTowerLobby_EventScript_CancelWinStreak tower_get TOWER_DATA_WIN_STREAK - compare VAR_RESULT, 0 - goto_if_ne BattleFrontier_BattleTowerLobby_EventScript_LostThanksForPlaying + goto_if_ne VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_LostThanksForPlaying BattleFrontier_BattleTowerLobby_EventScript_CancelWinStreak:: tower_set TOWER_DATA_WIN_STREAK_ACTIVE, FALSE BattleFrontier_BattleTowerLobby_EventScript_LostThanksForPlaying:: @@ -133,8 +127,7 @@ BattleFrontier_BattleTowerLobby_EventScript_AskSaveBattle:: playse SE_SAVE waitse call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_EndSaveBattle + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_EndSaveBattle message BattleFrontier_BattleTowerLobby_Text_RecordLastMatch waitmessage multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE @@ -145,8 +138,7 @@ BattleFrontier_BattleTowerLobby_EventScript_AskSaveBattle:: BattleFrontier_EventScript_SaveBattle:: frontier_savebattle - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_EventScript_BattleSaveFailed + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_EventScript_BattleSaveFailed playse SE_SAVE msgbox BattleFrontier_BattleTowerLobby_Text_BattleRecordedOnPass, MSGBOX_DEFAULT goto BattleFrontier_BattleTowerLobby_EventScript_EndSaveBattle @@ -163,8 +155,7 @@ BattleFrontier_EventScript_GetCantRecordBattle:: BattleFrontier_BattleTowerLobby_EventScript_ResumeChallenge:: lock faceplayer - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_SetBravoTrainerOn + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_SetBravoTrainerOn message BattleFrontier_BattleTowerLobby_Text_WeveBeenWaitingForYou waitmessage message BattleFrontier_BattleTowerLobby_Text_ProgressWillBeSaved @@ -205,8 +196,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterSinglesChallenge:: case FRONTIER_LVL_TENT, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleTowerLobby_Text_SelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -215,8 +205,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterSinglesChallenge:: setvar VAR_0x8005, FRONTIER_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge msgbox BattleFrontier_BattleTowerLobby_Text_OkayToSaveBeforeEntering, MSGBOX_YESNO switch VAR_RESULT case NO, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge @@ -234,8 +223,7 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeSinglesChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, TRUE goto BattleFrontier_BattleTowerLobby_EventScript_EnterElevator @@ -271,8 +259,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterDoublesChallenge:: case FRONTIER_LVL_TENT, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleTowerLobby_Text_PleaseSelectFourMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -281,8 +268,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterDoublesChallenge:: setvar VAR_0x8005, FRONTIER_DOUBLES_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge msgbox BattleFrontier_BattleTowerLobby_Text_OkayToSaveBeforeEntering, MSGBOX_YESNO switch VAR_RESULT case NO, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge @@ -300,8 +286,7 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeDoublesChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, FALSE goto BattleFrontier_BattleTowerLobby_EventScript_EnterElevator @@ -338,8 +323,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterMultisChallenge:: case FRONTIER_LVL_TENT, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleTowerLobby_Text_PleaseSelectTwoMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -348,8 +332,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterMultisChallenge:: setvar VAR_0x8005, FRONTIER_MULTI_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge msgbox BattleFrontier_BattleTowerLobby_Text_OkayToSaveBeforeEntering, MSGBOX_YESNO switch VAR_RESULT case NO, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge @@ -367,8 +350,7 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeMultisChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, FALSE goto BattleFrontier_BattleTowerLobby_EventScript_EnterElevator @@ -404,8 +386,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterLinkMultisChallenge:: case FRONTIER_LVL_TENT, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleTowerLobby_Text_PleaseSelectTwoMons2, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -414,8 +395,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterLinkMultisChallenge:: setvar VAR_0x8005, FRONTIER_MULTI_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge msgbox BattleFrontier_BattleTowerLobby_Text_OkayToSaveBeforeEntering, MSGBOX_YESNO switch VAR_RESULT case NO, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge @@ -434,12 +414,10 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge:: tower_save 0 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER specialvar VAR_RESULT, IsWirelessAdapterConnected - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryWirelessLink + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_TryWirelessLink goto BattleFrontier_BattleTowerLobby_EventScript_TryCableLink end @@ -491,10 +469,8 @@ BattleFrontier_BattleTowerLobby_EventScript_FeelingsWontTell:: end BattleFrontier_BattleTowerLobby_EventScript_CheckFeelings:: - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CanceledEasyChat - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_SubmittedFeelings + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CanceledEasyChat + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattleTowerLobby_EventScript_SubmittedFeelings end BattleFrontier_BattleTowerLobby_EventScript_CanceledEasyChat:: @@ -611,19 +587,17 @@ BattleFrontier_BattleTowerLobby_EventScript_EnterElevator:: BattleFrontier_BattleTowerLobby_EventScript_WaitForLinkOpponentLoad:: tower_loadlinkopponents delay 1 - compare VAR_RESULT, 6 - goto_if_ne BattleFrontier_BattleTowerLobby_EventScript_WaitForLinkOpponentLoad + goto_if_ne VAR_RESULT, 6, BattleFrontier_BattleTowerLobby_EventScript_WaitForLinkOpponentLoad call BattleFrontier_BattleTowerLobby_EventScript_ShowYouToBattleRoom clearflag FLAG_CANCEL_BATTLE_ROOM_CHALLENGE - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR, 255, 1, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR, 1, 6 setvar VAR_TEMP_0, 0 waitstate end BattleFrontier_BattleTowerLobby_EventScript_ShowYouToBattleRoom:: call BattleFrontier_BattleTowerLobby_EventScript_BufferModeText - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ShowYouToLinkMultiBattleRoom + goto_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_ShowYouToLinkMultiBattleRoom msgbox BattleFrontier_BattleTowerLobby_Text_ShowYouToBattleRoom, MSGBOX_DEFAULT goto BattleFrontier_BattleTowerLobby_EventScript_WalkToElevator @@ -675,41 +649,33 @@ BattleFrontier_BattleTowerLobby_Movement_UnusedEnterElevator: step_end BattleFrontier_BattleTowerLobby_EventScript_BufferModeText:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_BufferTextSingle - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_BufferTextDouble - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_BufferTextMulti - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_BufferTextLinkMulti + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_BufferTextSingle + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_BufferTextDouble + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_BufferTextMulti + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_BufferTextLinkMulti return BattleFrontier_BattleTowerLobby_EventScript_BufferTextSingle:: - bufferstdstring 0, STDSTRING_SINGLE + bufferstdstring STR_VAR_1, STDSTRING_SINGLE return BattleFrontier_BattleTowerLobby_EventScript_BufferTextDouble:: - bufferstdstring 0, STDSTRING_DOUBLE + bufferstdstring STR_VAR_1, STDSTRING_DOUBLE return BattleFrontier_BattleTowerLobby_EventScript_BufferTextMulti:: - bufferstdstring 0, STDSTRING_MULTI + bufferstdstring STR_VAR_1, STDSTRING_MULTI return BattleFrontier_BattleTowerLobby_EventScript_BufferTextLinkMulti:: - bufferstdstring 0, STDSTRING_MULTI_LINK + bufferstdstring STR_VAR_1, STDSTRING_MULTI_LINK return BattleFrontier_BattleTowerLobby_EventScript_SetAttendantTalkedTo:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_TalkedToSinglesAttendant - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_TalkedToDoublesAttendant - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_TalkedToMultisAttendant - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_TalkedToLinkMultisAttendant + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_TalkedToSinglesAttendant + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_TalkedToDoublesAttendant + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_TalkedToMultisAttendant + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_TalkedToLinkMultisAttendant return BattleFrontier_BattleTowerLobby_EventScript_TalkedToSinglesAttendant:: @@ -729,14 +695,10 @@ BattleFrontier_BattleTowerLobby_EventScript_TalkedToLinkMultisAttendant:: return BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoord:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordSingles - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordDoubles - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordMultis - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordLinkMultis + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordSingles + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordDoubles + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordMultis + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordLinkMultis return BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordSingles:: @@ -756,14 +718,10 @@ BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordLinkMultis:: return BattleFrontier_BattleTowerLobby_EventScript_GetPartySize:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_GetSinglesPartySize - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_GetDoublesPartySize - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_GetMultisPartySize - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_GetLinkMultisPartySize + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_GetSinglesPartySize + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_GetDoublesPartySize + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_GetMultisPartySize + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_GetLinkMultisPartySize return BattleFrontier_BattleTowerLobby_EventScript_GetSinglesPartySize:: @@ -793,26 +751,18 @@ BattleFrontier_BattleTowerLobby_EventScript_TryCableLink:: setvar VAR_0x8005, 0 special TryBattleLinkup waitstate - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful - compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY - goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady - compare VAR_RESULT, LINKUP_DIFF_SELECTIONS - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections - compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkIncorrectNumberOfPlayers - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge - compare VAR_RESULT, LINKUP_CONNECTION_ERROR - goto_if_eq CableClub_EventScript_AbortLinkConnectionError - compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful + goto_if_eq VAR_RESULT, LINKUP_SOMEONE_NOT_READY, CableClub_EventScript_AbortLinkSomeoneNotReady + goto_if_eq VAR_RESULT, LINKUP_DIFF_SELECTIONS, BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections + goto_if_eq VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS, BattleFrontier_BattleTowerLobby_EventScript_AbortLinkIncorrectNumberOfPlayers + goto_if_eq VAR_RESULT, LINKUP_FAILED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge + goto_if_eq VAR_RESULT, LINKUP_CONNECTION_ERROR, CableClub_EventScript_AbortLinkConnectionError + goto_if_eq VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER, BattleFrontier_BattleTowerLobby_EventScript_AbortLink end BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections:: special CloseLink - compare VAR_0x8005, 3 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_FriendDifferentSelection + goto_if_eq VAR_0x8005, 3, BattleFrontier_BattleTowerLobby_EventScript_FriendDifferentSelection msgbox Text_PlayersMadeDifferentSelections, MSGBOX_DEFAULT release end @@ -832,12 +782,9 @@ BattleFrontier_BattleTowerLobby_EventScript_AbortLinkIncorrectNumberOfPlayers:: BattleFrontier_BattleTowerLobby_EventScript_AbortLink:: special CloseLink - compare VAR_0x8005, 0 - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_FriendChoseDifferentLvlMode - compare VAR_0x8005, 1 - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_FriendAlsoSelectedMon - compare VAR_0x8005, 2 - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_FriendAlsoSelectedMons + call_if_eq VAR_0x8005, 0, BattleFrontier_BattleTowerLobby_EventScript_FriendChoseDifferentLvlMode + call_if_eq VAR_0x8005, 1, BattleFrontier_BattleTowerLobby_EventScript_FriendAlsoSelectedMon + call_if_eq VAR_0x8005, 2, BattleFrontier_BattleTowerLobby_EventScript_FriendAlsoSelectedMons msgbox BattleFrontier_BattleTowerLobby_Text_ChooseDifferentMonsMatchLvlMode, MSGBOX_DEFAULT release end @@ -891,27 +838,19 @@ BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader:: BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader:: call CableClub_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader - compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful + goto_if_eq VAR_RESULT, LINKUP_FAILED, BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader + goto_if_eq VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER, BattleFrontier_BattleTowerLobby_EventScript_AbortLink release return BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup:: call CableClub_EventScript_TryJoinLinkGroup - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup - compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful + goto_if_eq VAR_RESULT, LINKUP_FAILED, BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup + goto_if_eq VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER, BattleFrontier_BattleTowerLobby_EventScript_AbortLink release return diff --git a/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc index b7354d9a20..e1cb64dda0 100644 --- a/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc @@ -16,17 +16,14 @@ BattleFrontier_BattleTowerMultiBattleRoom_MapScripts:: @ The multi partner is represented by LOCALID_PARTNER, which has the gfx id VAR_OBJ_GFX_ID_E BattleFrontier_BattleTowerMultiBattleRoom_OnTransition: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS - call_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_SetObjGfx - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - call_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_SetLinkPlayerGfx + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_SetObjGfx + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_SetLinkPlayerGfx end BattleFrontier_BattleTowerMultiBattleRoom_EventScript_SetObjGfx:: tower_setpartnergfx checkplayergender - compare VAR_RESULT, FEMALE - goto_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_SetPlayerGfxFemale + goto_if_eq VAR_RESULT, FEMALE, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_SetPlayerGfxFemale setvar VAR_OBJ_GFX_ID_F, OBJ_EVENT_GFX_BRENDAN_NORMAL return @@ -56,8 +53,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_EnterRoom:: applymovement LOCALID_PARTNER, BattleFrontier_BattleTowerMultiBattleRoom_Movement_PartnerEnterRoom waitmovement 0 frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_OpponentsEnter + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_OpponentsEnter applymovement LOCALID_ATTENDANT_1, BattleFrontier_BattleTowerMultiBattleRoom_Movement_AttendantApproachPlayer applymovement LOCALID_ATTENDANT_2, BattleFrontier_BattleTowerMultiBattleRoom_Movement_AttendantApproachPlayer waitmovement 0 @@ -74,8 +70,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_OpponentsEnter:: applymovement LOCALID_OPPONENT_1, BattleFrontier_BattleTowerMultiBattleRoom_Movement_Opponent1Enter applymovement LOCALID_OPPONENT_2, BattleFrontier_BattleTowerMultiBattleRoom_Movement_Opponent2Enter waitmovement 0 - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - goto_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_DoOpponentIntrosLink + goto_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_DoOpponentIntrosLink tower_getopponentintro 0 delay 15 applymovement LOCALID_OPPONENT_1, BattleFrontier_BattleTowerMultiBattleRoom_Movement_WalkInPlaceLeft @@ -130,8 +125,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_DefeatedOpponents:: applymovement LOCALID_PLAYER, BattleFrontier_BattleTowerMultiBattleRoom_Movement_FaceAttendant applymovement LOCALID_PARTNER, BattleFrontier_BattleTowerMultiBattleRoom_Movement_FaceAttendant waitmovement 0 - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - goto_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_RetorePartyMsgLink + goto_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_RetorePartyMsgLink msgbox BattleFrontier_BattleTowerBattleRoom_Text_RestoreMonsToFullHealth, MSGBOX_DEFAULT goto BattleFrontier_BattleTowerMultiBattleRoom_EventScript_RestoreParty @@ -142,19 +136,16 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_RetorePartyMsgLink:: BattleFrontier_BattleTowerMultiBattleRoom_EventScript_RestoreParty:: special LoadPlayerParty frontier_setpartyorder FRONTIER_MULTI_PARTY_SIZE - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - call_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ReconnectLink + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ReconnectLink playfanfare MUS_HEAL waitfanfare special HealPlayerParty BattleFrontier_BattleTowerMultiBattleRoom_EventScript_AskReadyForOpponents:: frontier_get FRONTIER_DATA_BATTLE_NUM call BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ReadyForNextOpponentSet - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - goto_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ContinueChallenge + goto_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ContinueChallenge call BattleFrontier_EventScript_GetCantRecordBattle - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_AskReadyForOpponentsNoRecord + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_AskReadyForOpponentsNoRecord multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, TRUE switch VAR_RESULT case 0, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ContinueChallenge @@ -230,8 +221,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_PauseChallenge:: end BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ReadyForNextOpponentSet:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - goto_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ReadyForNextOpponentSetLink + goto_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ReadyForNextOpponentSetLink copyvar VAR_TEMP_F, VAR_RESULT switch VAR_TEMP_F case 1, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ReadyFor2ndOpponentSet @@ -347,8 +337,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_ContinueChallengeLink:: waitmessage special LinkRetireStatusWithBattleTowerPartner waitstate - compare VAR_RESULT, BATTLE_TOWER_LINKSTAT_CONTINUE - goto_if_ne BattleFrontier_BattleTowerMultiBattleRoom_EventScript_WarpToLobbyLost + goto_if_ne VAR_RESULT, BATTLE_TOWER_LINKSTAT_CONTINUE, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_WarpToLobbyLost goto BattleFrontier_BattleTowerMultiBattleRoom_EventScript_LinkDelayForMsg end @@ -368,8 +357,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_AskRetireChallengeLink:: message BattleFrontier_BattleTowerBattleRoom_Text_CancelYourChallenge waitmessage multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_RetireChallengeLink + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_RetireChallengeLink goto BattleFrontier_BattleTowerMultiBattleRoom_EventScript_AskReadyForOpponents end @@ -408,7 +396,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_Movement_FaceAttendant: step_end BattleFrontier_BattleTowerMultiBattleRoom_Movement_FaceBattle: - walk_in_place_fastest_right + walk_in_place_faster_right step_end BattleFrontier_BattleTowerMultiBattleRoom_Movement_Opponent1Enter: @@ -449,7 +437,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_Movement_AttendantApproachPlayer: BattleFrontier_BattleTowerMultiBattleRoom_Movement_AttendantReturnToPos: walk_left walk_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end BattleFrontier_BattleTowerMultiBattleRoom_Movement_WalkInPlaceLeft: diff --git a/data/maps/BattleFrontier_BattleTowerMultiCorridor/scripts.inc b/data/maps/BattleFrontier_BattleTowerMultiCorridor/scripts.inc index 9c6a8bb2bf..b36d2e6fd3 100644 --- a/data/maps/BattleFrontier_BattleTowerMultiCorridor/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerMultiCorridor/scripts.inc @@ -14,17 +14,14 @@ BattleFrontier_BattleTowerMultiCorridor_MapScripts:: @ The multi partner is represented by LOCALID_PARTNER, and has the gfx id VAR_OBJ_GFX_ID_E BattleFrontier_BattleTowerMultiCorridor_OnTransition: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS - call_if_eq BattleFrontier_BattleTowerMultiCorridor_EventScript_SetObjGfx - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - call_if_eq BattleFrontier_BattleTowerMultiCorridor_EventScript_SetLinkPlayerGfx + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerMultiCorridor_EventScript_SetObjGfx + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerMultiCorridor_EventScript_SetLinkPlayerGfx end BattleFrontier_BattleTowerMultiCorridor_EventScript_SetObjGfx:: tower_setpartnergfx checkplayergender - compare VAR_RESULT, FEMALE - goto_if_eq BattleFrontier_BattleTowerMultiCorridor_EventScript_SetPlayerGfxFemale + goto_if_eq VAR_RESULT, FEMALE, BattleFrontier_BattleTowerMultiCorridor_EventScript_SetPlayerGfxFemale setvar VAR_OBJ_GFX_ID_F, OBJ_EVENT_GFX_BRENDAN_NORMAL return @@ -76,8 +73,8 @@ BattleFrontier_BattleTowerMultiCorridor_EventScript_EnterCorridor:: applymovement LOCALID_ATTENDANT_1, BattleFrontier_BattleTowerMultiCorridor_Movement_PartnerAttendantWalkToDoor waitmovement 0 delay 40 - applymovement LOCALID_ATTENDANT_2, Common_Movement_WalkInPlaceFastestUp - applymovement LOCALID_ATTENDANT_1, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_ATTENDANT_2, Common_Movement_WalkInPlaceFasterUp + applymovement LOCALID_ATTENDANT_1, Common_Movement_WalkInPlaceFasterUp waitmovement 0 opendoor 7, 1 waitdooranim @@ -95,29 +92,25 @@ BattleFrontier_BattleTowerMultiCorridor_EventScript_EnterCorridor:: end BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToBattleRoom:: - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES - call_if_eq BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToNormalBattleRoom - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES - call_if_eq BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToNormalBattleRoom - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS - call_if_eq BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToMultiBattleRoom - compare VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS - call_if_eq BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToLinkMultiBattleRoom + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToNormalBattleRoom + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToNormalBattleRoom + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToMultiBattleRoom + call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToLinkMultiBattleRoom return BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToNormalBattleRoom:: - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM, 255, 4, 8 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM, 4, 8 waitstate return BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToMultiBattleRoom:: - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM, 255, 4, 5 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM, 4, 5 waitstate return @ Unnecessary duplicate of the above BattleFrontier_BattleTowerMultiCorridor_EventScript_WarpToLinkMultiBattleRoom:: - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM, 255, 4, 5 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM, 4, 5 waitstate return @@ -149,7 +142,7 @@ BattleFrontier_BattleTowerMultiCorridor_Movement_PlayerAttendantWalkToDoor: walk_right walk_right walk_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end BattleFrontier_BattleTowerMultiCorridor_Movement_PartnerAttendantWalkToDoor: @@ -160,7 +153,7 @@ BattleFrontier_BattleTowerMultiCorridor_Movement_PartnerAttendantWalkToDoor: walk_left walk_left walk_up - walk_in_place_fastest_left + walk_in_place_faster_left step_end BattleFrontier_BattleTowerMultiCorridor_Movement_TrainerEnterDoor: diff --git a/data/maps/BattleFrontier_BattleTowerMultiPartnerRoom/scripts.inc b/data/maps/BattleFrontier_BattleTowerMultiPartnerRoom/scripts.inc index 4a6d29446e..b9fc7d5543 100644 --- a/data/maps/BattleFrontier_BattleTowerMultiPartnerRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerMultiPartnerRoom/scripts.inc @@ -64,7 +64,7 @@ BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_EnterRoom:: applymovement LOCALID_ATTENDANT, BattleFrontier_BattleTowerMultiPartnerRoom_Movement_AttendantBlockExit waitmovement 0 copyobjectxytoperm LOCALID_ATTENDANT - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox BattleFrontier_BattleTowerMultiPartnerRoom_Text_PleaseFindPartner, MSGBOX_DEFAULT special HealPlayerParty @@ -78,7 +78,7 @@ BattleFrontier_BattleTowerMultiPartnerRoom_Movement_PlayerEnterRoom: BattleFrontier_BattleTowerMultiPartnerRoom_Movement_AttendantBlockExit: walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_Attendant:: @@ -87,8 +87,7 @@ BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_Attendant:: message BattleFrontier_BattleTowerMultiPartnerRoom_Text_QuitLookingForPartner waitmessage multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_QuitChallenge + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_QuitChallenge msgbox BattleFrontier_BattleTowerMultiPartnerRoom_Text_PleaseFindPartner2, MSGBOX_DEFAULT release end @@ -101,14 +100,14 @@ BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_QuitChallenge:: BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_EnterElevator:: msgbox BattleFrontier_BattleTowerMultiPartnerRoom_Text_ThankYouForChoosingPartner, MSGBOX_DEFAULT closemessage - applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFasterUp waitmovement 0 opendoor 10, 1 waitdooranim call BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_MoveToElevator closedoor 10, 1 waitdooranim - warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR, 255, 1, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR, 1, 6 waitstate releaseall end @@ -183,13 +182,11 @@ BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_TalkToPotentialPartner:: waitmessage waitbuttonpress closemessage - compare VAR_FACING, DIR_SOUTH - call_if_ne BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_PartnerExit - compare VAR_FACING, DIR_SOUTH - call_if_eq BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_PartnerExitSouth + call_if_ne VAR_FACING, DIR_SOUTH, BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_PartnerExit + call_if_eq VAR_FACING, DIR_SOUTH, BattleFrontier_BattleTowerMultiPartnerRoom_EventScript_PartnerExitSouth removeobject VAR_LAST_TALKED setflag FLAG_CHOSEN_MULTI_BATTLE_NPC_PARTNER - warpsilent MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM, 255, 10, 3 + warpsilent MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM, 10, 3 waitstate release end diff --git a/data/maps/BattleFrontier_ExchangeServiceCorner/scripts.inc b/data/maps/BattleFrontier_ExchangeServiceCorner/scripts.inc index 360b8162cf..703b1ec900 100644 --- a/data/maps/BattleFrontier_ExchangeServiceCorner/scripts.inc +++ b/data/maps/BattleFrontier_ExchangeServiceCorner/scripts.inc @@ -14,38 +14,30 @@ BattleFrontier_ExchangeServiceCorner_EventScript_ClerkGoodbye:: BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize:: specialvar VAR_TEMP_1, GetFrontierBattlePoints - compare VAR_TEMP_1, VAR_0x8008 - goto_if_ge BattleFrontier_ExchangeServiceCorner_EventScript_TryGivePrize + goto_if_ge VAR_TEMP_1, VAR_0x8008, BattleFrontier_ExchangeServiceCorner_EventScript_TryGivePrize msgbox BattleFrontier_ExchangeServiceCorner_Text_DontHaveEnoughPoints, MSGBOX_DEFAULT - compare VAR_TEMP_2, EXCHANGE_CORNER_DECOR1_CLERK - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 - compare VAR_TEMP_2, EXCHANGE_CORNER_DECOR2_CLERK - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 - compare VAR_TEMP_2, EXCHANGE_CORNER_VITAMIN_CLERK - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin + goto_if_eq VAR_TEMP_2, EXCHANGE_CORNER_DECOR1_CLERK, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_TEMP_2, EXCHANGE_CORNER_DECOR2_CLERK, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 + goto_if_eq VAR_TEMP_2, EXCHANGE_CORNER_VITAMIN_CLERK, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin goto BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem end BattleFrontier_ExchangeServiceCorner_EventScript_TryGivePrize:: - compare VAR_TEMP_2, EXCHANGE_CORNER_DECOR1_CLERK - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_TryGiveDecor - compare VAR_TEMP_2, EXCHANGE_CORNER_DECOR2_CLERK - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_TryGiveDecor + goto_if_eq VAR_TEMP_2, EXCHANGE_CORNER_DECOR1_CLERK, BattleFrontier_ExchangeServiceCorner_EventScript_TryGiveDecor + goto_if_eq VAR_TEMP_2, EXCHANGE_CORNER_DECOR2_CLERK, BattleFrontier_ExchangeServiceCorner_EventScript_TryGiveDecor goto BattleFrontier_ExchangeServiceCorner_EventScript_TryGiveItem end BattleFrontier_ExchangeServiceCorner_EventScript_TryGiveDecor:: checkdecorspace VAR_0x8009 - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_NoRoomForDecor + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_ExchangeServiceCorner_EventScript_NoRoomForDecor copyvar VAR_0x8004, VAR_0x8008 special TakeFrontierBattlePoints adddecoration VAR_0x8009 special UpdateBattlePointsWindow playse SE_SHOP msgbox BattleFrontier_ExchangeServiceCorner_Text_WellSendItToPC, MSGBOX_DEFAULT - compare VAR_TEMP_2, EXCHANGE_CORNER_DECOR1_CLERK - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_TEMP_2, EXCHANGE_CORNER_DECOR1_CLERK, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 goto BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 end @@ -56,17 +48,15 @@ BattleFrontier_ExchangeServiceCorner_EventScript_NoRoomForDecor:: end BattleFrontier_ExchangeServiceCorner_EventScript_TryGiveItem:: - checkitemspace VAR_0x8009, 1 - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_BagFull + checkitemspace VAR_0x8009 + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_ExchangeServiceCorner_EventScript_BagFull copyvar VAR_0x8004, VAR_0x8008 special TakeFrontierBattlePoints additem VAR_0x8009 special UpdateBattlePointsWindow playse SE_SHOP msgbox BattleFrontier_ExchangeServiceCorner_Text_HereIsYourPrize, MSGBOX_DEFAULT - compare VAR_TEMP_2, EXCHANGE_CORNER_VITAMIN_CLERK - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin + goto_if_eq VAR_TEMP_2, EXCHANGE_CORNER_VITAMIN_CLERK, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin goto BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem end @@ -107,8 +97,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1:: BattleFrontier_ExchangeServiceCorner_EventScript_KissPoster:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmKissPoster, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 setvar VAR_0x8008, 16 setvar VAR_0x8009, DECOR_KISS_POSTER goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -116,8 +105,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_KissPoster:: BattleFrontier_ExchangeServiceCorner_EventScript_KissCushion:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmKissCushion, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 setvar VAR_0x8008, 32 setvar VAR_0x8009, DECOR_KISS_CUSHION goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -125,8 +113,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_KissCushion:: BattleFrontier_ExchangeServiceCorner_EventScript_SmoochumDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmSmoochumDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 setvar VAR_0x8008, 32 setvar VAR_0x8009, DECOR_SMOOCHUM_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -134,8 +121,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_SmoochumDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_TogepiDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmTogepiDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 setvar VAR_0x8008, 48 setvar VAR_0x8009, DECOR_TOGEPI_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -143,8 +129,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_TogepiDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_MeowthDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmMeowthDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 setvar VAR_0x8008, 48 setvar VAR_0x8009, DECOR_MEOWTH_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -152,8 +137,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_MeowthDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_ClefairyDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmClefairyDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 setvar VAR_0x8008, 48 setvar VAR_0x8009, DECOR_CLEFAIRY_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -161,8 +145,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_ClefairyDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_DittoDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmDittoDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 setvar VAR_0x8008, 48 setvar VAR_0x8009, DECOR_DITTO_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -170,8 +153,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_DittoDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_CyndaquilDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmCyndaquilDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 setvar VAR_0x8008, 80 setvar VAR_0x8009, DECOR_CYNDAQUIL_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -179,8 +161,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_CyndaquilDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_ChikoritaDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmChikoritaDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 setvar VAR_0x8008, 80 setvar VAR_0x8009, DECOR_CHIKORITA_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -188,8 +169,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_ChikoritaDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_TotodileDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmTotodileDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor1 setvar VAR_0x8008, 80 setvar VAR_0x8009, DECOR_TOTODILE_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -221,8 +201,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2:: BattleFrontier_ExchangeServiceCorner_EventScript_LaprasDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmLaprasDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 setvar VAR_0x8008, 128 setvar VAR_0x8009, DECOR_LAPRAS_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -230,8 +209,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_LaprasDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_SnorlaxDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmSnorlaxDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 setvar VAR_0x8008, 128 setvar VAR_0x8009, DECOR_SNORLAX_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -239,8 +217,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_SnorlaxDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_VenusaurDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmVenusaurDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 setvar VAR_0x8008, 256 setvar VAR_0x8009, DECOR_VENUSAUR_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -248,8 +225,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_VenusaurDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_CharizardDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmCharizardDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 setvar VAR_0x8008, 256 setvar VAR_0x8009, DECOR_CHARIZARD_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -257,8 +233,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_CharizardDoll:: BattleFrontier_ExchangeServiceCorner_EventScript_BlastoiseDoll:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmBlastoiseDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseDecor2 setvar VAR_0x8008, 256 setvar VAR_0x8009, DECOR_BLASTOISE_DOLL goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -291,8 +266,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin:: BattleFrontier_ExchangeServiceCorner_EventScript_Protein:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmProtein, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin setvar VAR_0x8008, 1 setvar VAR_0x8009, ITEM_PROTEIN goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -300,8 +274,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_Protein:: BattleFrontier_ExchangeServiceCorner_EventScript_Calcium:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmCalcium, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin setvar VAR_0x8008, 1 setvar VAR_0x8009, ITEM_CALCIUM goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -309,8 +282,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_Calcium:: BattleFrontier_ExchangeServiceCorner_EventScript_Iron:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmIron, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin setvar VAR_0x8008, 1 setvar VAR_0x8009, ITEM_IRON goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -318,8 +290,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_Iron:: BattleFrontier_ExchangeServiceCorner_EventScript_Zinc:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmZinc, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin setvar VAR_0x8008, 1 setvar VAR_0x8009, ITEM_ZINC goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -327,8 +298,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_Zinc:: BattleFrontier_ExchangeServiceCorner_EventScript_Carbos:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmCarbos, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin setvar VAR_0x8008, 1 setvar VAR_0x8009, ITEM_CARBOS goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -336,8 +306,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_Carbos:: BattleFrontier_ExchangeServiceCorner_EventScript_HPUp:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmHPUp, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseVitamin setvar VAR_0x8008, 1 setvar VAR_0x8009, ITEM_HP_UP goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -373,8 +342,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem:: BattleFrontier_ExchangeServiceCorner_EventScript_Leftovers:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmLeftovers, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem setvar VAR_0x8008, 48 setvar VAR_0x8009, ITEM_LEFTOVERS goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -382,8 +350,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_Leftovers:: BattleFrontier_ExchangeServiceCorner_EventScript_WhiteHerb:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmWhiteHerb, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem setvar VAR_0x8008, 48 setvar VAR_0x8009, ITEM_WHITE_HERB goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -391,8 +358,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_WhiteHerb:: BattleFrontier_ExchangeServiceCorner_EventScript_QuickClaw:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmQuickClaw, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem setvar VAR_0x8008, 48 setvar VAR_0x8009, ITEM_QUICK_CLAW goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -400,8 +366,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_QuickClaw:: BattleFrontier_ExchangeServiceCorner_EventScript_MentalHerb:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmMentalHerb, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem setvar VAR_0x8008, 48 setvar VAR_0x8009, ITEM_MENTAL_HERB goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -409,8 +374,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_MentalHerb:: BattleFrontier_ExchangeServiceCorner_EventScript_Brightpowder:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmBrightpowder, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem setvar VAR_0x8008, 64 setvar VAR_0x8009, ITEM_BRIGHT_POWDER goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -418,8 +382,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_Brightpowder:: BattleFrontier_ExchangeServiceCorner_EventScript_ChoiceBand:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmChoiceBand, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem setvar VAR_0x8008, 64 setvar VAR_0x8009, ITEM_CHOICE_BAND goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -427,8 +390,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_ChoiceBand:: BattleFrontier_ExchangeServiceCorner_EventScript_KingsRock:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmKingsRock, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem setvar VAR_0x8008, 64 setvar VAR_0x8009, ITEM_KINGS_ROCK goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -436,8 +398,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_KingsRock:: BattleFrontier_ExchangeServiceCorner_EventScript_FocusBand:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmFocusBand, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem setvar VAR_0x8008, 64 setvar VAR_0x8009, ITEM_FOCUS_BAND goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize @@ -445,8 +406,7 @@ BattleFrontier_ExchangeServiceCorner_EventScript_FocusBand:: BattleFrontier_ExchangeServiceCorner_EventScript_ScopeLens:: msgbox BattleFrontier_ExchangeServiceCorner_Text_ConfirmScopeLens, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, NO, BattleFrontier_ExchangeServiceCorner_EventScript_ChooseHoldItem setvar VAR_0x8008, 64 setvar VAR_0x8009, ITEM_SCOPE_LENS goto BattleFrontier_ExchangeServiceCorner_EventScript_TryPurchasePrize diff --git a/data/maps/BattleFrontier_Lounge1/scripts.inc b/data/maps/BattleFrontier_Lounge1/scripts.inc index 0455d577ce..6aca2b4ced 100644 --- a/data/maps/BattleFrontier_Lounge1/scripts.inc +++ b/data/maps/BattleFrontier_Lounge1/scripts.inc @@ -14,10 +14,8 @@ BattleFrontier_Lounge1_EventScript_Breeder:: BattleFrontier_Lounge1_EventScript_ChooseMonToShowBreeder:: special ChoosePartyMon waitstate - compare VAR_0x8004, 255 - goto_if_ne BattleFrontier_Lounge1_EventScript_ShowMonToBreeder - compare VAR_0x8004, 255 - goto_if_eq BattleFrontier_Lounge1_EventScript_CancelMonSelect + goto_if_ne VAR_0x8004, PARTY_NOTHING_CHOSEN, BattleFrontier_Lounge1_EventScript_ShowMonToBreeder + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, BattleFrontier_Lounge1_EventScript_CancelMonSelect end BattleFrontier_Lounge1_EventScript_BreederIntro:: @@ -34,17 +32,12 @@ BattleFrontier_Lounge1_EventScript_AlreadyMetBreeder:: @ VAR_0x8007: IV of the highest IV stat BattleFrontier_Lounge1_EventScript_ShowMonToBreeder:: specialvar VAR_RESULT, ScriptGetPartyMonSpecies - compare VAR_RESULT, SPECIES_EGG - goto_if_eq BattleFrontier_Lounge1_EventScript_ShowEggToBreeder + goto_if_eq VAR_RESULT, SPECIES_EGG, BattleFrontier_Lounge1_EventScript_ShowEggToBreeder special BufferVarsForIVRater - compare VAR_0x8005, 90 @ Average of 15 - goto_if_le BattleFrontier_Lounge1_EventScript_AverageTotalIVs - compare VAR_0x8005, 120 @ Average of 20 - goto_if_le BattleFrontier_Lounge1_EventScript_AboveAverageTotalIVs - compare VAR_0x8005, 150 @ Average of 25 - goto_if_le BattleFrontier_Lounge1_EventScript_HighTotalIVs - compare VAR_0x8005, 151 @ Average of > 25 - goto_if_ge BattleFrontier_Lounge1_EventScript_VeryHighTotalIVs + goto_if_le VAR_0x8005, 90, BattleFrontier_Lounge1_EventScript_AverageTotalIVs @ Average of 15 + goto_if_le VAR_0x8005, 120, BattleFrontier_Lounge1_EventScript_AboveAverageTotalIVs @ Average of 20 + goto_if_le VAR_0x8005, 150, BattleFrontier_Lounge1_EventScript_HighTotalIVs @ Average of 25 + goto_if_ge VAR_0x8005, 151, BattleFrontier_Lounge1_EventScript_VeryHighTotalIVs @ Average of > 25 end BattleFrontier_Lounge1_EventScript_ShowEggToBreeder:: @@ -54,30 +47,20 @@ BattleFrontier_Lounge1_EventScript_ShowEggToBreeder:: @ Comment on the highest IV stat BattleFrontier_Lounge1_EventScript_HighestIVStat:: - compare VAR_0x8006, STAT_HP - goto_if_eq BattleFrontier_Lounge1_EventScript_HighestIVHP - compare VAR_0x8006, STAT_ATK - goto_if_eq BattleFrontier_Lounge1_EventScript_HighestIVAtk - compare VAR_0x8006, STAT_DEF - goto_if_eq BattleFrontier_Lounge1_EventScript_HighestIVDef - compare VAR_0x8006, STAT_SPEED - goto_if_eq BattleFrontier_Lounge1_EventScript_HighestIVSpeed - compare VAR_0x8006, STAT_SPATK - goto_if_eq BattleFrontier_Lounge1_EventScript_HighestIVSpAtk - compare VAR_0x8006, STAT_SPDEF - goto_if_eq BattleFrontier_Lounge1_EventScript_HighestIVSpDef + goto_if_eq VAR_0x8006, STAT_HP, BattleFrontier_Lounge1_EventScript_HighestIVHP + goto_if_eq VAR_0x8006, STAT_ATK, BattleFrontier_Lounge1_EventScript_HighestIVAtk + goto_if_eq VAR_0x8006, STAT_DEF, BattleFrontier_Lounge1_EventScript_HighestIVDef + goto_if_eq VAR_0x8006, STAT_SPEED, BattleFrontier_Lounge1_EventScript_HighestIVSpeed + goto_if_eq VAR_0x8006, STAT_SPATK, BattleFrontier_Lounge1_EventScript_HighestIVSpAtk + goto_if_eq VAR_0x8006, STAT_SPDEF, BattleFrontier_Lounge1_EventScript_HighestIVSpDef end @ Comment on the highest IV value BattleFrontier_Lounge1_EventScript_HighestIVValue:: - compare VAR_0x8007, 15 - goto_if_le BattleFrontier_Lounge1_EventScript_HighestIVLow - compare VAR_0x8007, 25 - goto_if_le BattleFrontier_Lounge1_EventScript_HighestIVMid - compare VAR_0x8007, 30 - goto_if_le BattleFrontier_Lounge1_EventScript_HighestIVHigh - compare VAR_0x8007, 31 - goto_if_ge BattleFrontier_Lounge1_EventScript_HighestIVMax + goto_if_le VAR_0x8007, 15, BattleFrontier_Lounge1_EventScript_HighestIVLow + goto_if_le VAR_0x8007, 25, BattleFrontier_Lounge1_EventScript_HighestIVMid + goto_if_le VAR_0x8007, 30, BattleFrontier_Lounge1_EventScript_HighestIVHigh + goto_if_ge VAR_0x8007, 31, BattleFrontier_Lounge1_EventScript_HighestIVMax end BattleFrontier_Lounge1_EventScript_EndBreederComments:: diff --git a/data/maps/BattleFrontier_Lounge2/scripts.inc b/data/maps/BattleFrontier_Lounge2/scripts.inc index 106d1d1793..12eda4a5ee 100644 --- a/data/maps/BattleFrontier_Lounge2/scripts.inc +++ b/data/maps/BattleFrontier_Lounge2/scripts.inc @@ -2,7 +2,7 @@ BattleFrontier_Lounge2_MapScripts:: .byte 0 @ This NPC gives hints about a random facility or battle mode. -@ For battle modes he gives generic advice +@ For battle modes he gives generic advice @ For facilities, depending on how far the player has progressed he will say either @ The name of the Frontier Brain there @ The type and description of the 3 pokemon they use in their silver battle @@ -22,30 +22,20 @@ BattleFrontier_Lounge2_EventScript_AlreadyMetManiac:: end BattleFrontier_Lounge2_EventScript_GiveAdvice:: - compare VAR_FRONTIER_MANIAC_FACILITY, 0 - call_if_eq BattleFrontier_Lounge2_EventScript_BufferSingle - compare VAR_FRONTIER_MANIAC_FACILITY, 1 - call_if_eq BattleFrontier_Lounge2_EventScript_BufferDouble - compare VAR_FRONTIER_MANIAC_FACILITY, 2 - call_if_eq BattleFrontier_Lounge2_EventScript_BufferMulti - compare VAR_FRONTIER_MANIAC_FACILITY, 3 - call_if_eq BattleFrontier_Lounge2_EventScript_BufferMultiLink - compare VAR_FRONTIER_MANIAC_FACILITY, 4 - call_if_eq BattleFrontier_Lounge2_EventScript_BufferBattleDome - compare VAR_FRONTIER_MANIAC_FACILITY, 5 - call_if_eq BattleFrontier_Lounge2_EventScript_BufferBattleFactory - compare VAR_FRONTIER_MANIAC_FACILITY, 6 - call_if_eq BattleFrontier_Lounge2_EventScript_BufferBattlePalace - compare VAR_FRONTIER_MANIAC_FACILITY, 7 - call_if_eq BattleFrontier_Lounge2_EventScript_BufferBattleArena - compare VAR_FRONTIER_MANIAC_FACILITY, 8 - call_if_eq BattleFrontier_Lounge2_EventScript_BufferBattlePike - compare VAR_FRONTIER_MANIAC_FACILITY, 9 - call_if_eq BattleFrontier_Lounge2_EventScript_BufferBattlePyramid - compare VAR_FRONTIER_MANIAC_FACILITY, 3 - call_if_le BattleFrontier_Lounge2_EventScript_BattleTowerNews - compare VAR_FRONTIER_MANIAC_FACILITY, 4 - call_if_ge BattleFrontier_Lounge2_EventScript_FacilityNews + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_TOWER_SINGLES, BattleFrontier_Lounge2_EventScript_BufferSingle + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_TOWER_DOUBLES, BattleFrontier_Lounge2_EventScript_BufferDouble + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_TOWER_MULTIS, BattleFrontier_Lounge2_EventScript_BufferMulti + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_TOWER_LINK, BattleFrontier_Lounge2_EventScript_BufferMultiLink + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_DOME, BattleFrontier_Lounge2_EventScript_BufferBattleDome + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_FACTORY, BattleFrontier_Lounge2_EventScript_BufferBattleFactory + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_PALACE, BattleFrontier_Lounge2_EventScript_BufferBattlePalace + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_ARENA, BattleFrontier_Lounge2_EventScript_BufferBattleArena + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_PIKE, BattleFrontier_Lounge2_EventScript_BufferBattlePike + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_PYRAMID, BattleFrontier_Lounge2_EventScript_BufferBattlePyramid +@ <= FRONTIER_MANIAC_TOWER_LINK is any Battle Tower mode + call_if_le VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_TOWER_LINK, BattleFrontier_Lounge2_EventScript_BattleTowerNews +@ >= FRONTIER_MANIAC_DOME is any facility other than Battle Tower + call_if_ge VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_DOME, BattleFrontier_Lounge2_EventScript_FacilityNews special ShowFrontierManiacMessage waitmessage waitbuttonpress @@ -61,43 +51,43 @@ BattleFrontier_Lounge2_EventScript_FacilityNews:: return BattleFrontier_Lounge2_EventScript_BufferSingle:: - bufferstdstring 0, STDSTRING_SINGLE + bufferstdstring STR_VAR_1, STDSTRING_SINGLE return BattleFrontier_Lounge2_EventScript_BufferDouble:: - bufferstdstring 0, STDSTRING_DOUBLE + bufferstdstring STR_VAR_1, STDSTRING_DOUBLE return BattleFrontier_Lounge2_EventScript_BufferMulti:: - bufferstdstring 0, STDSTRING_MULTI + bufferstdstring STR_VAR_1, STDSTRING_MULTI return BattleFrontier_Lounge2_EventScript_BufferMultiLink:: - bufferstdstring 0, STDSTRING_MULTI_LINK + bufferstdstring STR_VAR_1, STDSTRING_MULTI_LINK return BattleFrontier_Lounge2_EventScript_BufferBattleDome:: - bufferstdstring 0, STDSTRING_BATTLE_DOME + bufferstdstring STR_VAR_1, STDSTRING_BATTLE_DOME return BattleFrontier_Lounge2_EventScript_BufferBattleFactory:: - bufferstdstring 0, STDSTRING_BATTLE_FACTORY + bufferstdstring STR_VAR_1, STDSTRING_BATTLE_FACTORY return BattleFrontier_Lounge2_EventScript_BufferBattlePalace:: - bufferstdstring 0, STDSTRING_BATTLE_PALACE + bufferstdstring STR_VAR_1, STDSTRING_BATTLE_PALACE return BattleFrontier_Lounge2_EventScript_BufferBattleArena:: - bufferstdstring 0, STDSTRING_BATTLE_ARENA + bufferstdstring STR_VAR_1, STDSTRING_BATTLE_ARENA return BattleFrontier_Lounge2_EventScript_BufferBattlePike:: - bufferstdstring 0, STDSTRING_BATTLE_PIKE + bufferstdstring STR_VAR_1, STDSTRING_BATTLE_PIKE return BattleFrontier_Lounge2_EventScript_BufferBattlePyramid:: - bufferstdstring 0, STDSTRING_BATTLE_PYRAMID + bufferstdstring STR_VAR_1, STDSTRING_BATTLE_PYRAMID return BattleFrontier_Lounge2_EventScript_Maniac1:: diff --git a/data/maps/BattleFrontier_Lounge3/scripts.inc b/data/maps/BattleFrontier_Lounge3/scripts.inc index c0a9417385..7d9befafb1 100644 --- a/data/maps/BattleFrontier_Lounge3/scripts.inc +++ b/data/maps/BattleFrontier_Lounge3/scripts.inc @@ -10,8 +10,7 @@ BattleFrontier_Lounge3_EventScript_Gambler:: faceplayer goto_if_set FLAG_MET_BATTLE_FRONTIER_GAMBLER, BattleFrontier_Lounge3_EventScript_AlreadyMetGambler call BattleFrontier_Lounge3_EventScript_CountSilverSymbols - compare VAR_0x8004, 2 - goto_if_le BattleFrontier_Lounge3_EventScript_NotEnoughSilverSymbols + goto_if_le VAR_0x8004, 2, BattleFrontier_Lounge3_EventScript_NotEnoughSilverSymbols setflag FLAG_MET_BATTLE_FRONTIER_GAMBLER msgbox BattleFrontier_Lounge3_Text_YouLookToughExplainGambling, MSGBOX_DEFAULT goto BattleFrontier_Lounge3_EventScript_AskToEnterChallenge @@ -22,11 +21,9 @@ BattleFrontier_Lounge3_EventScript_AskToEnterChallenge:: waitmessage waitbuttonpress msgbox BattleFrontier_Lounge3_Text_HowAboutEnteringEventForMe, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_Lounge3_EventScript_DeclineChallenge + goto_if_eq VAR_RESULT, NO, BattleFrontier_Lounge3_EventScript_DeclineChallenge msgbox BattleFrontier_Lounge3_Text_SpotMeSomeBattlePoints, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_Lounge3_EventScript_DeclineChallenge + goto_if_eq VAR_RESULT, NO, BattleFrontier_Lounge3_EventScript_DeclineChallenge message BattleFrontier_Lounge3_Text_HowMuchCanYouSpot waitmessage special ShowBattlePointsWindow @@ -61,8 +58,7 @@ BattleFrontier_Lounge3_EventScript_Bet15:: BattleFrontier_Lounge3_EventScript_TryPlaceBet:: specialvar VAR_TEMP_1, GetFrontierBattlePoints - compare VAR_TEMP_1, VAR_0x8008 - goto_if_ge BattleFrontier_Lounge3_EventScript_PlaceBet + goto_if_ge VAR_TEMP_1, VAR_0x8008, BattleFrontier_Lounge3_EventScript_PlaceBet msgbox BattleFrontier_Lounge3_Text_YouDontHaveEnoughPoints, MSGBOX_DEFAULT message BattleFrontier_Lounge3_Text_HowMuchCanYouSpot waitmessage @@ -109,27 +105,21 @@ BattleFrontier_Lounge3_EventScript_NotEnoughSilverSymbols:: BattleFrontier_Lounge3_EventScript_AlreadyMetGambler:: msgbox BattleFrontier_Lounge3_Text_Oh, MSGBOX_DEFAULT - compare VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_PLACED_BET - goto_if_ge BattleFrontier_Lounge3_EventScript_CheckBetResults + goto_if_ge VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_PLACED_BET, BattleFrontier_Lounge3_EventScript_CheckBetResults goto BattleFrontier_Lounge3_EventScript_AskToEnterChallenge end BattleFrontier_Lounge3_EventScript_CheckBetResults:: - compare VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_PLACED_BET - goto_if_eq BattleFrontier_Lounge3_EventScript_ChallengeNotAttempted - compare VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WON - goto_if_eq BattleFrontier_Lounge3_EventScript_WonChallenge + goto_if_eq VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_PLACED_BET, BattleFrontier_Lounge3_EventScript_ChallengeNotAttempted + goto_if_eq VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WON, BattleFrontier_Lounge3_EventScript_WonChallenge goto BattleFrontier_Lounge3_EventScript_LostChallenge end BattleFrontier_Lounge3_EventScript_WonChallenge:: msgbox BattleFrontier_Lounge3_Text_HelloChampHeresYourPoints, MSGBOX_DEFAULT - compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_5 - call_if_eq BattleFrontier_Lounge3_EventScript_RewardBet5 - compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_10 - call_if_eq BattleFrontier_Lounge3_EventScript_RewardBet10 - compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_15 - call_if_eq BattleFrontier_Lounge3_EventScript_RewardBet15 + call_if_eq VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_5, BattleFrontier_Lounge3_EventScript_RewardBet5 + call_if_eq VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_10, BattleFrontier_Lounge3_EventScript_RewardBet10 + call_if_eq VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_15, BattleFrontier_Lounge3_EventScript_RewardBet15 msgbox BattleFrontier_Lounge3_Text_ObtainedBattlePoints, MSGBOX_GETPOINTS special GiveFrontierBattlePoints msgbox BattleFrontier_Lounge3_Text_ThinkOfMeForAnotherChallenge, MSGBOX_DEFAULT @@ -144,17 +134,17 @@ BattleFrontier_Lounge3_EventScript_LostChallenge:: end BattleFrontier_Lounge3_EventScript_RewardBet5:: - buffernumberstring 0, (BET_AMOUNT_5 * 2) + buffernumberstring STR_VAR_1, (BET_AMOUNT_5 * 2) setvar VAR_0x8004, (BET_AMOUNT_5 * 2) return BattleFrontier_Lounge3_EventScript_RewardBet10:: - buffernumberstring 0, (BET_AMOUNT_10 * 2) + buffernumberstring STR_VAR_1, (BET_AMOUNT_10 * 2) setvar VAR_0x8004, (BET_AMOUNT_10 * 2) return BattleFrontier_Lounge3_EventScript_RewardBet15:: - buffernumberstring 0, (BET_AMOUNT_15 * 2) + buffernumberstring STR_VAR_1, (BET_AMOUNT_15 * 2) setvar VAR_0x8004, (BET_AMOUNT_15 * 2) return diff --git a/data/maps/BattleFrontier_Lounge5/scripts.inc b/data/maps/BattleFrontier_Lounge5/scripts.inc index 61ac0cb9e2..b81c748e5d 100644 --- a/data/maps/BattleFrontier_Lounge5/scripts.inc +++ b/data/maps/BattleFrontier_Lounge5/scripts.inc @@ -5,17 +5,14 @@ BattleFrontier_Lounge5_EventScript_NatureGirl:: lock faceplayer msgbox BattleFrontier_Lounge5_Text_NatureGirlGreeting, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_Lounge5_EventScript_NatureGirlNoneShown + goto_if_eq VAR_RESULT, NO, BattleFrontier_Lounge5_EventScript_NatureGirlNoneShown special ChoosePartyMon waitstate lock faceplayer - compare VAR_0x8004, 255 - goto_if_eq BattleFrontier_Lounge5_EventScript_NatureGirlNoneShown + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, BattleFrontier_Lounge5_EventScript_NatureGirlNoneShown specialvar VAR_RESULT, ScriptGetPartyMonSpecies - compare VAR_RESULT, SPECIES_EGG - goto_if_eq BattleFrontier_Lounge5_EventScript_NatureGirlEgg + goto_if_eq VAR_RESULT, SPECIES_EGG, BattleFrontier_Lounge5_EventScript_NatureGirlEgg special ShowNatureGirlMessage waitmessage waitbuttonpress diff --git a/data/maps/BattleFrontier_Lounge6/scripts.inc b/data/maps/BattleFrontier_Lounge6/scripts.inc index f88c69324d..0b01b32e3e 100644 --- a/data/maps/BattleFrontier_Lounge6/scripts.inc +++ b/data/maps/BattleFrontier_Lounge6/scripts.inc @@ -10,18 +10,15 @@ BattleFrontier_Lounge6_EventScript_Trader:: specialvar VAR_RESULT, GetInGameTradeSpeciesInfo copyvar VAR_0x8009, VAR_RESULT msgbox BattleFrontier_Lounge6_Text_WouldYouLikeToTrade, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_Lounge6_EventScript_DeclineTrade + goto_if_eq VAR_RESULT, NO, BattleFrontier_Lounge6_EventScript_DeclineTrade special ChoosePartyMon waitstate copyvar VAR_0x800A, VAR_0x8004 - compare VAR_0x8004, 255 - goto_if_eq BattleFrontier_Lounge6_EventScript_DeclineTrade + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, BattleFrontier_Lounge6_EventScript_DeclineTrade copyvar VAR_0x8005, VAR_0x800A specialvar VAR_RESULT, GetTradeSpecies copyvar VAR_0x800B, VAR_RESULT - compare VAR_RESULT, VAR_0x8009 - goto_if_ne BattleFrontier_Lounge6_EventScript_NotRequestedMon + goto_if_ne VAR_RESULT, VAR_0x8009, BattleFrontier_Lounge6_EventScript_NotRequestedMon copyvar VAR_0x8004, VAR_0x8008 copyvar VAR_0x8005, VAR_0x800A special CreateInGameTradePokemon @@ -38,7 +35,7 @@ BattleFrontier_Lounge6_EventScript_DeclineTrade:: end BattleFrontier_Lounge6_EventScript_NotRequestedMon:: - bufferspeciesname 0, VAR_0x8009 + bufferspeciesname STR_VAR_1, VAR_0x8009 msgbox BattleFrontier_Lounge6_Text_DontTradeForAnythingButMon, MSGBOX_DEFAULT release end diff --git a/data/maps/BattleFrontier_Lounge7/scripts.inc b/data/maps/BattleFrontier_Lounge7/scripts.inc index 2878444706..9528dd11da 100644 --- a/data/maps/BattleFrontier_Lounge7/scripts.inc +++ b/data/maps/BattleFrontier_Lounge7/scripts.inc @@ -67,51 +67,61 @@ BattleFrontier_Lounge7_EventScript_ChooseNewLeftTutorMove:: BattleFrontier_Lounge7_EventScript_Softboiled:: setvar VAR_0x8008, 16 + setvar VAR_0x8005, MOVE_SOFT_BOILED goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_SeismicToss:: setvar VAR_0x8008, 24 + setvar VAR_0x8005, MOVE_SEISMIC_TOSS goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_DreamEater:: setvar VAR_0x8008, 24 + setvar VAR_0x8005, MOVE_DREAM_EATER goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_MegaPunch:: setvar VAR_0x8008, 24 + setvar VAR_0x8005, MOVE_MEGA_PUNCH goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_MegaKick:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_MEGA_KICK goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_BodySlam:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_BODY_SLAM goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_RockSlide:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_ROCK_SLIDE goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_Counter:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_COUNTER goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_ThunderWave:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_THUNDER_WAVE goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_SwordsDance:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_SWORDS_DANCE goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end @@ -135,7 +145,6 @@ BattleFrontier_Lounge7_EventScript_ChooseRightTutorMove:: waitmessage special ShowBattlePointsWindow setvar VAR_TEMP_E, 1 - setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_2 setvar VAR_0x8006, 0 special ShowScrollableMultichoice waitstate @@ -159,7 +168,6 @@ BattleFrontier_Lounge7_EventScript_ChooseNewRightTutorMove:: message BattleFrontier_Lounge7_Text_TeachWhichMove waitmessage setvar VAR_TEMP_E, 1 - setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_2 setvar VAR_0x8006, 1 special ShowScrollableMultichoice waitstate @@ -181,51 +189,61 @@ BattleFrontier_Lounge7_EventScript_ChooseNewRightTutorMove:: BattleFrontier_Lounge7_EventScript_DefenseCurl:: setvar VAR_0x8008, 16 + setvar VAR_0x8005, MOVE_DEFENSE_CURL goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_Snore:: setvar VAR_0x8008, 24 + setvar VAR_0x8005, MOVE_SNORE goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_MudSlap:: setvar VAR_0x8008, 24 + setvar VAR_0x8005, MOVE_MUD_SLAP goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_Swift:: setvar VAR_0x8008, 24 + setvar VAR_0x8005, MOVE_SWIFT goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_IcyWind:: setvar VAR_0x8008, 24 + setvar VAR_0x8005, MOVE_ICY_WIND goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_Endure:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_ENDURE goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_PsychUp:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_PSYCH_UP goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_IcePunch:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_ICE_PUNCH goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_ThunderPunch:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_THUNDER_PUNCH goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end BattleFrontier_Lounge7_EventScript_FirePunch:: setvar VAR_0x8008, 48 + setvar VAR_0x8005, MOVE_FIRE_PUNCH goto BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection end @@ -246,31 +264,24 @@ BattleFrontier_Lounge7_EventScript_CancelChooseMon:: @ VAR_TEMP_D is the move selection @ VAR_TEMP_E is which move tutor was spoken to BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection:: - copyvar VAR_0x8004, VAR_TEMP_D - copyvar VAR_0x8005, VAR_TEMP_E special BufferBattleFrontierTutorMoveName - buffernumberstring 1, VAR_0x8008 - copyvar VAR_0x8004, VAR_TEMP_C + buffernumberstring STR_VAR_2, VAR_0x8008 msgbox BattleFrontier_Lounge7_Text_MoveWillBeXBattlePoints, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_Lounge7_EventScript_ChooseNewMove + goto_if_eq VAR_RESULT, NO, BattleFrontier_Lounge7_EventScript_ChooseNewMove specialvar VAR_TEMP_1, GetFrontierBattlePoints - compare VAR_TEMP_1, VAR_0x8008 - goto_if_ge BattleFrontier_Lounge7_EventScript_TeachTutorMove + goto_if_ge VAR_TEMP_1, VAR_0x8008, BattleFrontier_Lounge7_EventScript_TeachTutorMove msgbox BattleFrontier_Lounge7_Text_HaventGotEnoughPoints, MSGBOX_DEFAULT goto BattleFrontier_Lounge7_EventScript_ChooseNewMove end BattleFrontier_Lounge7_EventScript_TeachTutorMove:: msgbox BattleFrontier_Lounge7_Text_TeachMoveToWhichMon, MSGBOX_DEFAULT - special GetBattleFrontierTutorMoveIndex fadescreen FADE_TO_BLACK special CloseBattlePointsWindow special CloseBattleFrontierTutorWindow special ChooseMonForMoveTutor waitstate - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_Lounge7_EventScript_CancelChooseMon + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_Lounge7_EventScript_CancelChooseMon msgbox BattleFrontier_Lounge7_Text_IllTakeBattlePoints, MSGBOX_DEFAULT copyvar VAR_0x8004, VAR_0x8008 special TakeFrontierBattlePoints @@ -278,8 +289,7 @@ BattleFrontier_Lounge7_EventScript_TeachTutorMove:: end BattleFrontier_Lounge7_EventScript_ChooseNewMove:: - compare VAR_TEMP_E, 0 - goto_if_eq BattleFrontier_Lounge7_EventScript_ChooseNewLeftTutorMove + goto_if_eq VAR_TEMP_E, 0, BattleFrontier_Lounge7_EventScript_ChooseNewLeftTutorMove goto BattleFrontier_Lounge7_EventScript_ChooseNewRightTutorMove end diff --git a/data/maps/BattleFrontier_OutsideEast/scripts.inc b/data/maps/BattleFrontier_OutsideEast/scripts.inc index 8166f91869..e8eec6f160 100644 --- a/data/maps/BattleFrontier_OutsideEast/scripts.inc +++ b/data/maps/BattleFrontier_OutsideEast/scripts.inc @@ -11,8 +11,7 @@ BattleFrontier_OutsideEast_OnResume: BattleFrontier_OutsideEast_EventScript_TryRemoveSudowoodo:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject VAR_LAST_TALKED return @@ -72,7 +71,7 @@ BattleFrontier_OutsideEast_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox BattleFrontier_OutsideEast_Text_ZigzagoonLooksVacant, MSGBOX_DEFAULT waitmoncry release @@ -126,21 +125,18 @@ BattleFrontier_OutsideEast_EventScript_WaterSudowoodo:: msgbox gText_Sudowoodo_Attacked, MSGBOX_DEFAULT closemessage waitse - playmoncry SPECIES_SUDOWOODO, 2 + playmoncry SPECIES_SUDOWOODO, CRY_MODE_ENCOUNTER delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_SUDOWOODO - setwildbattle SPECIES_SUDOWOODO, 40, ITEM_NONE + setwildbattle SPECIES_SUDOWOODO, 40 setflag FLAG_SYS_CTRL_OBJ_DELETE dowildbattle clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq BattleFrontier_OutsideEast_EventScript_DefeatedSudowoodo - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq BattleFrontier_OutsideEast_EventScript_DefeatedSudowoodo - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq BattleFrontier_OutsideEast_EventScript_DefeatedSudowoodo + goto_if_eq VAR_RESULT, B_OUTCOME_WON, BattleFrontier_OutsideEast_EventScript_DefeatedSudowoodo + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, BattleFrontier_OutsideEast_EventScript_DefeatedSudowoodo + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, BattleFrontier_OutsideEast_EventScript_DefeatedSudowoodo setflag FLAG_DEFEATED_SUDOWOODO release end diff --git a/data/maps/BattleFrontier_OutsideWest/scripts.inc b/data/maps/BattleFrontier_OutsideWest/scripts.inc index 19f0562585..5ca5cb9fbb 100644 --- a/data/maps/BattleFrontier_OutsideWest/scripts.inc +++ b/data/maps/BattleFrontier_OutsideWest/scripts.inc @@ -20,9 +20,8 @@ BattleFrontier_OutsideWest_EventScript_FerryAttendant:: lock faceplayer msgbox BattleFrontier_OutsideWest_Text_MayISeeYourTicket, MSGBOX_DEFAULT - checkitem ITEM_SS_TICKET, 1 - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_OutsideWest_EventScript_NoSSTicket + checkitem ITEM_SS_TICKET + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_OutsideWest_EventScript_NoSSTicket message BattleFrontier_OutsideWest_Text_WhereWouldYouLikeToGo waitmessage goto BattleFrontier_OutsideWest_EventScript_ChooseFerryDestination @@ -44,22 +43,20 @@ BattleFrontier_OutsideWest_EventScript_NoSSTicket:: BattleFrontier_OutsideWest_EventScript_FerryToSlateport:: msgbox BattleFrontier_OutsideWest_Text_SlateportItIs, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_OutsideWest_EventScript_ChooseNewFerryDestination + goto_if_eq VAR_RESULT, NO, BattleFrontier_OutsideWest_EventScript_ChooseNewFerryDestination msgbox BattleFrontier_OutsideWest_Text_PleaseBoardFerry, MSGBOX_DEFAULT call BattleFrontier_OutsideWest_EventScript_BoardFerry - warp MAP_SLATEPORT_CITY_HARBOR, 255, 8, 11 + warp MAP_SLATEPORT_CITY_HARBOR, 8, 11 waitstate release end BattleFrontier_OutsideWest_EventScript_FerryToLilycove:: msgbox BattleFrontier_OutsideWest_Text_LilycoveItIs, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_OutsideWest_EventScript_ChooseNewFerryDestination + goto_if_eq VAR_RESULT, NO, BattleFrontier_OutsideWest_EventScript_ChooseNewFerryDestination msgbox BattleFrontier_OutsideWest_Text_PleaseBoardFerry, MSGBOX_DEFAULT call BattleFrontier_OutsideWest_EventScript_BoardFerry - warp MAP_LILYCOVE_CITY_HARBOR, 255, 8, 11 + warp MAP_LILYCOVE_CITY_HARBOR, 8, 11 waitstate release end @@ -72,7 +69,7 @@ BattleFrontier_OutsideWest_EventScript_ChooseNewFerryDestination:: BattleFrontier_OutsideWest_EventScript_BoardFerry:: closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 30 hideobjectat LOCALID_FERRY_ATTENDANT, MAP_BATTLE_FRONTIER_OUTSIDE_WEST @@ -137,16 +134,16 @@ BattleFrontier_OutsideWest_EventScript_Maniac2:: end BattleFrontier_OutsideWest_EventScript_FactoryChallengersTalk:: - applymovement LOCALID_MANIAC_1, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_MANIAC_1, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox BattleFrontier_OutsideWest_Text_SureWeCanChallengeWithNoMons, MSGBOX_DEFAULT - applymovement LOCALID_MANIAC_2, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_MANIAC_2, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox BattleFrontier_OutsideWest_Text_BigGuySaidIllLendYouMons, MSGBOX_DEFAULT closemessage delay 25 - applymovement LOCALID_MANIAC_1, Common_Movement_WalkInPlaceFastestUp - applymovement LOCALID_MANIAC_2, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_MANIAC_1, Common_Movement_WalkInPlaceFasterUp + applymovement LOCALID_MANIAC_2, Common_Movement_WalkInPlaceFasterUp waitmovement 0 release end @@ -155,20 +152,16 @@ BattleFrontier_OutsideWest_EventScript_Camper:: lock faceplayer delay 20 - compare VAR_FACING, DIR_NORTH - call_if_eq BattleFrontier_OutsideWest_EventScript_CamperFaceFactory - compare VAR_FACING, DIR_SOUTH - call_if_eq BattleFrontier_OutsideWest_EventScript_CamperAlreadyFacingFactory - compare VAR_FACING, DIR_WEST - call_if_eq BattleFrontier_OutsideWest_EventScript_CamperFaceFactory - compare VAR_FACING, DIR_EAST - call_if_eq BattleFrontier_OutsideWest_EventScript_CamperFaceFactory + call_if_eq VAR_FACING, DIR_NORTH, BattleFrontier_OutsideWest_EventScript_CamperFaceFactory + call_if_eq VAR_FACING, DIR_SOUTH, BattleFrontier_OutsideWest_EventScript_CamperAlreadyFacingFactory + call_if_eq VAR_FACING, DIR_WEST, BattleFrontier_OutsideWest_EventScript_CamperFaceFactory + call_if_eq VAR_FACING, DIR_EAST, BattleFrontier_OutsideWest_EventScript_CamperFaceFactory msgbox BattleFrontier_OutsideWest_Text_WhosRaisingThoseRentalMons, MSGBOX_DEFAULT release end BattleFrontier_OutsideWest_EventScript_CamperFaceFactory:: - applymovement LOCALID_CAMPER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_CAMPER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return @@ -180,14 +173,10 @@ BattleFrontier_OutsideWest_EventScript_Girl:: faceplayer message BattleFrontier_OutsideWest_Text_ScaredOfPikeBecauseSeviper waitmessage - compare VAR_FACING, DIR_NORTH - call_if_eq BattleFrontier_OutsideWest_EventScript_GirlShudderNorth - compare VAR_FACING, DIR_SOUTH - call_if_eq BattleFrontier_OutsideWest_EventScript_GirlShudderSouth - compare VAR_FACING, DIR_WEST - call_if_eq BattleFrontier_OutsideWest_EventScript_GirlShudderWest - compare VAR_FACING, DIR_EAST - call_if_eq BattleFrontier_OutsideWest_EventScript_GirlShudderEast + call_if_eq VAR_FACING, DIR_NORTH, BattleFrontier_OutsideWest_EventScript_GirlShudderNorth + call_if_eq VAR_FACING, DIR_SOUTH, BattleFrontier_OutsideWest_EventScript_GirlShudderSouth + call_if_eq VAR_FACING, DIR_WEST, BattleFrontier_OutsideWest_EventScript_GirlShudderWest + call_if_eq VAR_FACING, DIR_EAST, BattleFrontier_OutsideWest_EventScript_GirlShudderEast waitbuttonpress release end @@ -213,23 +202,23 @@ BattleFrontier_OutsideWest_EventScript_GirlShudderEast:: return BattleFrontier_OutsideWest_Movement_GirlShudderNorth: - walk_in_place_fastest_down - walk_in_place_fastest_down + walk_in_place_faster_down + walk_in_place_faster_down step_end BattleFrontier_OutsideWest_Movement_GirlShudderSouth: - walk_in_place_fastest_up - walk_in_place_fastest_up + walk_in_place_faster_up + walk_in_place_faster_up step_end BattleFrontier_OutsideWest_Movement_GirlShudderWest: - walk_in_place_fastest_right - walk_in_place_fastest_right + walk_in_place_faster_right + walk_in_place_faster_right step_end BattleFrontier_OutsideWest_Movement_GirlShudderEast: - walk_in_place_fastest_left - walk_in_place_fastest_left + walk_in_place_faster_left + walk_in_place_faster_left step_end BattleFrontier_OutsideWest_EventScript_Woman2:: @@ -237,8 +226,7 @@ BattleFrontier_OutsideWest_EventScript_Woman2:: faceplayer msgbox BattleFrontier_OutsideWest_Text_LetsPlayRockPaperScissors, MSGBOX_DEFAULT random 2 - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_OutsideWest_EventScript_WomanWonRockPaperScissors + goto_if_eq VAR_RESULT, 1, BattleFrontier_OutsideWest_EventScript_WomanWonRockPaperScissors goto BattleFrontier_OutsideWest_EventScript_WomanLostRockPaperScissors end diff --git a/data/maps/BattleFrontier_PokemonCenter_1F/scripts.inc b/data/maps/BattleFrontier_PokemonCenter_1F/scripts.inc index 6479270503..44806858fb 100644 --- a/data/maps/BattleFrontier_PokemonCenter_1F/scripts.inc +++ b/data/maps/BattleFrontier_PokemonCenter_1F/scripts.inc @@ -33,7 +33,7 @@ BattleFrontier_PokemonCenter_1F_EventScript_Skitty:: lock faceplayer waitse - playmoncry SPECIES_SKITTY, 0 + playmoncry SPECIES_SKITTY, CRY_MODE_NORMAL msgbox BattleFrontier_PokemonCenter_1F_Text_Skitty, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/BattleFrontier_RankingHall/scripts.inc b/data/maps/BattleFrontier_RankingHall/scripts.inc index 20b2b21c1e..915ed98d9f 100644 --- a/data/maps/BattleFrontier_RankingHall/scripts.inc +++ b/data/maps/BattleFrontier_RankingHall/scripts.inc @@ -3,61 +3,61 @@ BattleFrontier_RankingHall_MapScripts:: BattleFrontier_RankingHall_EventScript_TowerSinglesRecords:: lockall - setvar VAR_0x8005, RANKING_HALL_BATTLE_TOWER_SINGLES + setvar VAR_0x8005, RANKING_HALL_TOWER_SINGLES goto BattleFrontier_RankingHall_EventScript_ShowRecords end BattleFrontier_RankingHall_EventScript_TowerDoublesRecords:: lockall - setvar VAR_0x8005, RANKING_HALL_BATTLE_TOWER_DOUBLES + setvar VAR_0x8005, RANKING_HALL_TOWER_DOUBLES goto BattleFrontier_RankingHall_EventScript_ShowRecords end BattleFrontier_RankingHall_EventScript_TowerMultisRecords:: lockall - setvar VAR_0x8005, RANKING_HALL_BATTLE_TOWER_MULTIS + setvar VAR_0x8005, RANKING_HALL_TOWER_MULTIS goto BattleFrontier_RankingHall_EventScript_ShowRecords end BattleFrontier_RankingHall_EventScript_TowerLinkRecords:: lockall - setvar VAR_0x8005, RANKING_HALL_BATTLE_TOWER_LINK + setvar VAR_0x8005, RANKING_HALL_TOWER_LINK goto BattleFrontier_RankingHall_EventScript_ShowRecords end BattleFrontier_RankingHall_EventScript_ArenaRecords:: lockall - setvar VAR_0x8005, RANKING_HALL_BATTLE_ARENA + setvar VAR_0x8005, RANKING_HALL_ARENA goto BattleFrontier_RankingHall_EventScript_ShowRecords end BattleFrontier_RankingHall_EventScript_PalaceRecords:: lockall - setvar VAR_0x8005, RANKING_HALL_BATTLE_PALACE + setvar VAR_0x8005, RANKING_HALL_PALACE goto BattleFrontier_RankingHall_EventScript_ShowRecords end BattleFrontier_RankingHall_EventScript_FactoryRecords:: lockall - setvar VAR_0x8005, RANKING_HALL_BATTLE_FACTORY + setvar VAR_0x8005, RANKING_HALL_FACTORY goto BattleFrontier_RankingHall_EventScript_ShowRecords end BattleFrontier_RankingHall_EventScript_DomeRecords:: lockall - setvar VAR_0x8005, RANKING_HALL_BATTLE_DOME + setvar VAR_0x8005, RANKING_HALL_DOME goto BattleFrontier_RankingHall_EventScript_ShowRecords end BattleFrontier_RankingHall_EventScript_PikeRecords:: lockall - setvar VAR_0x8005, RANKING_HALL_BATTLE_PIKE + setvar VAR_0x8005, RANKING_HALL_PIKE goto BattleFrontier_RankingHall_EventScript_ShowRecords end BattleFrontier_RankingHall_EventScript_PyramidRecords:: lockall - setvar VAR_0x8005, RANKING_HALL_BATTLE_PYRAMID + setvar VAR_0x8005, RANKING_HALL_PYRAMID goto BattleFrontier_RankingHall_EventScript_ShowRecords end @@ -86,8 +86,7 @@ BattleFrontier_RankingHall_EventScript_NinjaBoy:: lock faceplayer msgbox BattleFrontier_RankingHall_Text_IsYourNameOnThisList, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BattleFrontier_RankingHall_EventScript_NinjaBoyNameOnList + goto_if_eq VAR_RESULT, YES, BattleFrontier_RankingHall_EventScript_NinjaBoyNameOnList msgbox BattleFrontier_RankingHall_Text_WorkHarderIfYouSawFriendsName, MSGBOX_DEFAULT release end diff --git a/data/maps/BattleFrontier_ReceptionGate/scripts.inc b/data/maps/BattleFrontier_ReceptionGate/scripts.inc index 410eb747d7..151bc665b5 100644 --- a/data/maps/BattleFrontier_ReceptionGate/scripts.inc +++ b/data/maps/BattleFrontier_ReceptionGate/scripts.inc @@ -42,9 +42,9 @@ BattleFrontier_ReceptionGate_EventScript_ScottScene:: msgbox BattleFrontier_ReceptionGate_Text_EnjoyBattleFrontier, MSGBOX_DEFAULT msgbox BattleFrontier_ReceptionGate_Text_IfItIsntPlayerYouCame, MSGBOX_DEFAULT closemessage - applymovement LOCALID_GREETER, Common_Movement_WalkInPlaceFastestUp - applymovement LOCALID_GUIDE, Common_Movement_WalkInPlaceFastestUp - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_GREETER, Common_Movement_WalkInPlaceFasterUp + applymovement LOCALID_GUIDE, Common_Movement_WalkInPlaceFasterUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 playse SE_PIN applymovement LOCALID_GREETER, Common_Movement_ExclamationMark @@ -78,7 +78,7 @@ BattleFrontier_ReceptionGate_Movement_PlayerFaceScott: delay_16 delay_16 delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right step_end @ Unused @@ -112,7 +112,7 @@ BattleFrontier_ReceptionGate_Movement_GreeterFaceScott: delay_16 delay_16 delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right step_end BattleFrontier_ReceptionGate_Movement_FacilityGuideFaceScott: @@ -120,7 +120,7 @@ BattleFrontier_ReceptionGate_Movement_FacilityGuideFaceScott: delay_16 delay_16 delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left step_end BattleFrontier_ReceptionGate_EventScript_Greeter:: diff --git a/data/maps/BattleFrontier_ScottsHouse/scripts.inc b/data/maps/BattleFrontier_ScottsHouse/scripts.inc index 5c793517ee..affd05d349 100644 --- a/data/maps/BattleFrontier_ScottsHouse/scripts.inc +++ b/data/maps/BattleFrontier_ScottsHouse/scripts.inc @@ -35,8 +35,7 @@ BattleFrontier_ScottsHouse_EventScript_CheckSilverSymbols:: goto_if_unset FLAG_SYS_PYRAMID_SILVER, BattleFrontier_ScottsHouse_EventScript_CheckGiveShield msgbox BattleFrontier_ScottsHouse_Text_YouveCollectedAllSilverSymbols, MSGBOX_DEFAULT giveitem ITEM_LANSAT_BERRY - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_ScottsHouse_EventScript_BerryPocketFull + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_ScottsHouse_EventScript_BerryPocketFull setflag FLAG_COLLECTED_ALL_SILVER_SYMBOLS setflag FLAG_TEMP_4 release @@ -52,8 +51,7 @@ BattleFrontier_ScottsHouse_EventScript_CheckGoldSymbols:: goto_if_unset FLAG_SYS_PYRAMID_GOLD, BattleFrontier_ScottsHouse_EventScript_CheckGiveShield msgbox BattleFrontier_ScottsHouse_Text_YouveCollectedAllGoldSymbols, MSGBOX_DEFAULT giveitem ITEM_STARF_BERRY - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_ScottsHouse_EventScript_BerryPocketFull + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_ScottsHouse_EventScript_BerryPocketFull setflag FLAG_COLLECTED_ALL_GOLD_SYMBOLS setflag FLAG_TEMP_4 release @@ -71,10 +69,8 @@ BattleFrontier_ScottsHouse_EventScript_GivenBerry:: BattleFrontier_ScottsHouse_EventScript_RandomComment:: random 3 - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_ScottsHouse_EventScript_FrontierBrainComment - compare VAR_RESULT, 2 - goto_if_eq BattleFrontier_ScottsHouse_EventScript_ArtisanCaveComment + goto_if_eq VAR_RESULT, 1, BattleFrontier_ScottsHouse_EventScript_FrontierBrainComment + goto_if_eq VAR_RESULT, 2, BattleFrontier_ScottsHouse_EventScript_ArtisanCaveComment msgbox BattleFrontier_ScottsHouse_Text_WhyIGoSeekingTrainers, MSGBOX_DEFAULT release end @@ -93,20 +89,17 @@ BattleFrontier_ScottsHouse_EventScript_CheckGiveSilverShield:: setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_50 tower_get TOWER_DATA_WIN_STREAK - compare VAR_RESULT, 50 - goto_if_ge BattleFrontier_ScottsHouse_EventScript_GiveSilverShield + goto_if_ge VAR_RESULT, 50, BattleFrontier_ScottsHouse_EventScript_GiveSilverShield frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_OPEN tower_get TOWER_DATA_WIN_STREAK - compare VAR_RESULT, 50 - goto_if_ge BattleFrontier_ScottsHouse_EventScript_GiveSilverShield + goto_if_ge VAR_RESULT, 50, BattleFrontier_ScottsHouse_EventScript_GiveSilverShield goto BattleFrontier_ScottsHouse_EventScript_RandomComment end BattleFrontier_ScottsHouse_EventScript_GiveSilverShield:: msgbox BattleFrontier_ScottsHouse_Text_Beat50TrainersInARow, MSGBOX_DEFAULT givedecoration DECOR_SILVER_SHIELD - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_ScottsHouse_EventScript_NoRoomForShield + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_ScottsHouse_EventScript_NoRoomForShield setflag FLAG_RECEIVED_SILVER_SHIELD setflag FLAG_TEMP_3 goto BattleFrontier_ScottsHouse_EventScript_GivenShield @@ -126,20 +119,17 @@ BattleFrontier_ScottsHouse_EventScript_CheckGiveGoldShield:: setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_50 tower_get TOWER_DATA_WIN_STREAK - compare VAR_RESULT, 100 - goto_if_ge BattleFrontier_ScottsHouse_EventScript_GiveGoldShield + goto_if_ge VAR_RESULT, 100, BattleFrontier_ScottsHouse_EventScript_GiveGoldShield frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_OPEN tower_get TOWER_DATA_WIN_STREAK - compare VAR_RESULT, 100 - goto_if_ge BattleFrontier_ScottsHouse_EventScript_GiveGoldShield + goto_if_ge VAR_RESULT, 100, BattleFrontier_ScottsHouse_EventScript_GiveGoldShield goto BattleFrontier_ScottsHouse_EventScript_RandomComment end BattleFrontier_ScottsHouse_EventScript_GiveGoldShield:: msgbox BattleFrontier_ScottsHouse_Text_Beat100TrainersInARow, MSGBOX_DEFAULT givedecoration DECOR_GOLD_SHIELD - compare VAR_RESULT, FALSE - goto_if_eq BattleFrontier_ScottsHouse_EventScript_NoRoomForShield + goto_if_eq VAR_RESULT, FALSE, BattleFrontier_ScottsHouse_EventScript_NoRoomForShield setflag FLAG_RECEIVED_GOLD_SHIELD setflag FLAG_TEMP_3 goto BattleFrontier_ScottsHouse_EventScript_GivenShield @@ -154,47 +144,40 @@ BattleFrontier_ScottsHouse_EventScript_WelcomeToFrontier:: msgbox BattleFrontier_ScottsHouse_Text_WelcomeToBattleFrontier, MSGBOX_DEFAULT closemessage delay 30 - compare VAR_FACING, DIR_NORTH - call_if_eq BattleFrontier_ScottsHouse_EventScript_ScottFaceAwayNorth - compare VAR_FACING, DIR_SOUTH - call_if_eq BattleFrontier_ScottsHouse_EventScript_ScottFaceAwaySouth - compare VAR_FACING, DIR_EAST - call_if_eq BattleFrontier_ScottsHouse_EventScript_ScottFaceAwayEast - compare VAR_FACING, DIR_WEST - call_if_eq BattleFrontier_ScottsHouse_EventScript_ScottFaceAwayWest + call_if_eq VAR_FACING, DIR_NORTH, BattleFrontier_ScottsHouse_EventScript_ScottFaceAwayNorth + call_if_eq VAR_FACING, DIR_SOUTH, BattleFrontier_ScottsHouse_EventScript_ScottFaceAwaySouth + call_if_eq VAR_FACING, DIR_EAST, BattleFrontier_ScottsHouse_EventScript_ScottFaceAwayEast + call_if_eq VAR_FACING, DIR_WEST, BattleFrontier_ScottsHouse_EventScript_ScottFaceAwayWest msgbox BattleFrontier_ScottsHouse_Text_HowMuchEffortItTookToMakeReal, MSGBOX_DEFAULT applymovement LOCALID_SCOTT, Common_Movement_FacePlayer waitmovement 0 msgbox BattleFrontier_ScottsHouse_Text_HaveThisAsMementoOfOurPathsCrossing, MSGBOX_DEFAULT - compare VAR_SCOTT_STATE, 13 - goto_if_eq BattleFrontier_ScottsHouse_EventScript_Give4BattlePoints - compare VAR_SCOTT_STATE, 9 - goto_if_ge BattleFrontier_ScottsHouse_EventScript_Give3BattlePoints - compare VAR_SCOTT_STATE, 6 - goto_if_ge BattleFrontier_ScottsHouse_EventScript_Give2BattlePoints + goto_if_eq VAR_SCOTT_STATE, 13, BattleFrontier_ScottsHouse_EventScript_Give4BattlePoints + goto_if_ge VAR_SCOTT_STATE, 9, BattleFrontier_ScottsHouse_EventScript_Give3BattlePoints + goto_if_ge VAR_SCOTT_STATE, 6, BattleFrontier_ScottsHouse_EventScript_Give2BattlePoints goto BattleFrontier_ScottsHouse_EventScript_Give1BattlePoint end BattleFrontier_ScottsHouse_EventScript_Give4BattlePoints:: - buffernumberstring 0, 4 + buffernumberstring STR_VAR_1, 4 setvar VAR_0x8004, 4 goto BattleFrontier_ScottsHouse_EventScript_GiveBattlePoints end BattleFrontier_ScottsHouse_EventScript_Give3BattlePoints:: - buffernumberstring 0, 3 + buffernumberstring STR_VAR_1, 3 setvar VAR_0x8004, 3 goto BattleFrontier_ScottsHouse_EventScript_GiveBattlePoints end BattleFrontier_ScottsHouse_EventScript_Give2BattlePoints:: - buffernumberstring 0, 2 + buffernumberstring STR_VAR_1, 2 setvar VAR_0x8004, 2 goto BattleFrontier_ScottsHouse_EventScript_GiveBattlePoints end BattleFrontier_ScottsHouse_EventScript_Give1BattlePoint:: - buffernumberstring 0, 1 + buffernumberstring STR_VAR_1, 1 setvar VAR_0x8004, 1 goto BattleFrontier_ScottsHouse_EventScript_GiveBattlePoints end @@ -209,22 +192,22 @@ BattleFrontier_ScottsHouse_EventScript_GiveBattlePoints:: end BattleFrontier_ScottsHouse_EventScript_ScottFaceAwayNorth:: - applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return BattleFrontier_ScottsHouse_EventScript_ScottFaceAwaySouth:: - applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return BattleFrontier_ScottsHouse_EventScript_ScottFaceAwayEast:: - applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return BattleFrontier_ScottsHouse_EventScript_ScottFaceAwayWest:: - applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index 03463729cb..68d3124d95 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -38,8 +38,7 @@ BirthIsland_Exterior_OnResume: BirthIsland_Exterior_EventScript_TryRemoveDeoxys:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject LOCALID_DEOXYS return @@ -79,25 +78,19 @@ BirthIsland_Exterior_EventScript_Deoxys:: applymovement LOCALID_DEOXYS, BirthIsland_Exterior_Movement_DeoxysApproach waitmovement 0 waitse - playmoncry SPECIES_DEOXYS, 2 + playmoncry SPECIES_DEOXYS, CRY_MODE_ENCOUNTER delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_DEOXYS - setvar VAR_0x8004, SPECIES_DEOXYS - setvar VAR_0x8005, 30 @ level - setvar VAR_0x8006, ITEM_NONE - special CreateEventLegalEnemyMon + seteventmon SPECIES_DEOXYS, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq BirthIsland_Exterior_EventScript_DefeatedDeoxys - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq BirthIsland_Exterior_EventScript_RanFromDeoxys - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq BirthIsland_Exterior_EventScript_RanFromDeoxys + goto_if_eq VAR_RESULT, B_OUTCOME_WON, BirthIsland_Exterior_EventScript_DefeatedDeoxys + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, BirthIsland_Exterior_EventScript_RanFromDeoxys + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, BirthIsland_Exterior_EventScript_RanFromDeoxys setflag FLAG_BATTLED_DEOXYS release end diff --git a/data/maps/BirthIsland_Harbor/scripts.inc b/data/maps/BirthIsland_Harbor/scripts.inc index 7ec88ae188..e91238cbdc 100644 --- a/data/maps/BirthIsland_Harbor/scripts.inc +++ b/data/maps/BirthIsland_Harbor/scripts.inc @@ -8,17 +8,16 @@ BirthIsland_Harbor_EventScript_Sailor:: lock faceplayer msgbox BirthIsland_Harbor_Text_SailorReturn, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq BirthIsland_Harbor_EventScript_AsYouLike + goto_if_eq VAR_RESULT, NO, BirthIsland_Harbor_EventScript_AsYouLike msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 30 hideobjectat LOCALID_SAILOR, MAP_BIRTH_ISLAND_HARBOR setvar VAR_0x8004, LOCALID_SS_TIDAL call Common_EventScript_FerryDepartIsland - warp MAP_LILYCOVE_CITY_HARBOR, 255, 8, 11 + warp MAP_LILYCOVE_CITY_HARBOR, 8, 11 waitstate release end diff --git a/data/maps/CaveOfOrigin_B1F/scripts.inc b/data/maps/CaveOfOrigin_B1F/scripts.inc index 511364cfa5..11ca66aab0 100644 --- a/data/maps/CaveOfOrigin_B1F/scripts.inc +++ b/data/maps/CaveOfOrigin_B1F/scripts.inc @@ -8,7 +8,7 @@ CaveOfOrigin_B1F_EventScript_Wallace:: faceplayer msgbox CaveOfOrigin_B1F_Text_WallaceStory, MSGBOX_DEFAULT closemessage - applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 60 playse SE_PIN diff --git a/data/maps/CaveOfOrigin_Entrance/scripts.inc b/data/maps/CaveOfOrigin_Entrance/scripts.inc index 091246ae0d..40ca7a654d 100644 --- a/data/maps/CaveOfOrigin_Entrance/scripts.inc +++ b/data/maps/CaveOfOrigin_Entrance/scripts.inc @@ -3,6 +3,6 @@ CaveOfOrigin_Entrance_MapScripts:: .byte 0 CaveOfOrigin_Entrance_OnResume: - setescapewarp MAP_SOOTOPOLIS_CITY, 255, 31, 17 + setescapewarp MAP_SOOTOPOLIS_CITY, 31, 17 end diff --git a/data/maps/ContestHall/scripts.inc b/data/maps/ContestHall/scripts.inc index 535e28b789..7ca6a57f69 100644 --- a/data/maps/ContestHall/scripts.inc +++ b/data/maps/ContestHall/scripts.inc @@ -19,16 +19,11 @@ ContestHall_OnTransition: ContestHall_EventScript_ReadyContestMusic:: call ContestHall_EventScript_TryWaitForLink special GetContestMultiplayerId - compare VAR_RESULT, 0 - call_if_eq ContestHall_EventScript_SaveContestMusicPlayer1 - compare VAR_RESULT, 1 - call_if_eq ContestHall_EventScript_SaveContestMusicPlayer2 - compare VAR_RESULT, 2 - call_if_eq ContestHall_EventScript_SaveContestMusicPlayer3 - compare VAR_RESULT, 3 - call_if_eq ContestHall_EventScript_SaveContestMusicPlayer4 - compare VAR_RESULT, 4 - call_if_eq ContestHall_EventScript_SaveContestMusic + call_if_eq VAR_RESULT, 0, ContestHall_EventScript_SaveContestMusicPlayer1 + call_if_eq VAR_RESULT, 1, ContestHall_EventScript_SaveContestMusicPlayer2 + call_if_eq VAR_RESULT, 2, ContestHall_EventScript_SaveContestMusicPlayer3 + call_if_eq VAR_RESULT, 3, ContestHall_EventScript_SaveContestMusicPlayer4 + call_if_eq VAR_RESULT, 4, ContestHall_EventScript_SaveContestMusic return ContestHall_EventScript_SaveContestMusicPlayer1:: @@ -52,8 +47,7 @@ ContestHall_EventScript_SaveContestMusic:: return ContestHall_OnResume: - compare VAR_TEMP_9, 1 - call_if_eq ContestHall_EventScript_ReShowAudience + call_if_eq VAR_TEMP_9, 1, ContestHall_EventScript_ReShowAudience end ContestHall_EventScript_ReShowAudience:: @@ -84,8 +78,7 @@ ContestHall_EventScript_SetContestObjects:: ContestHall_EventScript_AddRandomAudienceMembers:: call ContestHall_EventScript_GetRandomAudienceGfxId call ContestHall_EventScript_SetRandomAudienceGfx - compare VAR_TEMP_0, 8 - goto_if_lt ContestHall_EventScript_AddRandomAudienceMembers + goto_if_lt VAR_TEMP_0, 8, ContestHall_EventScript_AddRandomAudienceMembers return ContestHall_EventScript_SetRandomAudienceGfx:: @@ -303,8 +296,7 @@ ContestHall_EventScript_RandomAudienceScientist1:: ContestHall_EventScript_CreateAudience:: specialvar VAR_RESULT, IsWirelessContest - compare VAR_RESULT, TRUE - goto_if_eq ContestHall_EventScript_CreateWirelessContestAudience + goto_if_eq VAR_RESULT, TRUE, ContestHall_EventScript_CreateWirelessContestAudience switch VAR_CONTEST_TYPE case CONTEST_TYPE_NPC_NORMAL, ContestHall_EventScript_CreateNormalContestAudience case CONTEST_TYPE_NPC_SUPER, ContestHall_EventScript_CreateSuperContestAudience @@ -418,36 +410,34 @@ ContestHall_EventScript_SetExitWarp:: return ContestHall_EventScript_SetExitWarpNormalContest:: - warp MAP_LILYCOVE_CITY_CONTEST_LOBBY, 255, 14, 4 + warp MAP_LILYCOVE_CITY_CONTEST_LOBBY, 14, 4 waitstate end ContestHall_EventScript_SetExitWarpSuperContest:: - warp MAP_LILYCOVE_CITY_CONTEST_LOBBY, 255, 14, 4 + warp MAP_LILYCOVE_CITY_CONTEST_LOBBY, 14, 4 waitstate end ContestHall_EventScript_SetExitWarpHyperContest:: - warp MAP_LILYCOVE_CITY_CONTEST_LOBBY, 255, 14, 4 + warp MAP_LILYCOVE_CITY_CONTEST_LOBBY, 14, 4 waitstate end ContestHall_EventScript_SetExitWarpMasterContest:: - warp MAP_LILYCOVE_CITY_CONTEST_LOBBY, 255, 14, 4 + warp MAP_LILYCOVE_CITY_CONTEST_LOBBY, 14, 4 waitstate end ContestHall_EventScript_SetExitWarpLinkContest:: - warp MAP_LILYCOVE_CITY_CONTEST_LOBBY, 255, 15, 4 + warp MAP_LILYCOVE_CITY_CONTEST_LOBBY, 15, 4 waitstate end LilycoveCity_ContestLobby_EventScript_SetPlayerGfx:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq LilycoveCity_ContestLobby_EventScript_SetPlayerGfxBrendan - compare VAR_RESULT, FEMALE - goto_if_eq LilycoveCity_ContestLobby_EventScript_SetPlayerGfxMay + goto_if_eq VAR_RESULT, MALE, LilycoveCity_ContestLobby_EventScript_SetPlayerGfxBrendan + goto_if_eq VAR_RESULT, FEMALE, LilycoveCity_ContestLobby_EventScript_SetPlayerGfxMay return LilycoveCity_ContestLobby_EventScript_SetPlayerGfxBrendan:: diff --git a/data/maps/DesertRuins/scripts.inc b/data/maps/DesertRuins/scripts.inc index 414dbfc572..21473e87a3 100644 --- a/data/maps/DesertRuins/scripts.inc +++ b/data/maps/DesertRuins/scripts.inc @@ -10,8 +10,7 @@ DesertRuins_OnResume: DesertRuins_EventScript_TryRemoveRegirock:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject VAR_LAST_TALKED return @@ -20,12 +19,12 @@ DesertRuins_OnLoad: end DesertRuins_EventScript_HideRegiEntrance:: - setmetatile 7, 19, METATILE_Cave_EntranceCover, 1 - setmetatile 8, 19, METATILE_Cave_EntranceCover, 1 - setmetatile 9, 19, METATILE_Cave_EntranceCover, 1 - setmetatile 7, 20, METATILE_Cave_SealedChamberBraille_Mid, 1 - setmetatile 8, 20, METATILE_Cave_SealedChamberBraille_Mid, 1 - setmetatile 9, 20, METATILE_Cave_SealedChamberBraille_Mid, 1 + setmetatile 7, 19, METATILE_Cave_EntranceCover, TRUE + setmetatile 8, 19, METATILE_Cave_EntranceCover, TRUE + setmetatile 9, 19, METATILE_Cave_EntranceCover, TRUE + setmetatile 7, 20, METATILE_Cave_SealedChamberBraille_Mid, TRUE + setmetatile 8, 20, METATILE_Cave_SealedChamberBraille_Mid, TRUE + setmetatile 9, 20, METATILE_Cave_SealedChamberBraille_Mid, TRUE return DesertRuins_OnTransition: @@ -40,9 +39,7 @@ DesertRuins_EventScript_ShowRegirock:: DesertRuins_EventScript_CaveEntranceMiddle:: lockall goto_if_set FLAG_SYS_REGIROCK_PUZZLE_COMPLETED, DesertRuins_EventScript_BigHoleInWall - braillemessage DesertRuins_Braille_UseRockSmash - waitbuttonpress - closebraillemessage + braillemsgbox DesertRuins_Braille_UseRockSmash releaseall end @@ -53,9 +50,7 @@ DesertRuins_EventScript_BigHoleInWall:: DesertRuins_EventScript_CaveEntranceSide:: lockall - braillemessage DesertRuins_Braille_UseRockSmash - waitbuttonpress - closebraillemessage + braillemsgbox DesertRuins_Braille_UseRockSmash releaseall end @@ -63,21 +58,18 @@ DesertRuins_EventScript_Regirock:: lock faceplayer waitse - playmoncry SPECIES_REGIROCK, 2 + playmoncry SPECIES_REGIROCK, CRY_MODE_ENCOUNTER delay 40 waitmoncry - setwildbattle SPECIES_REGIROCK, 40, ITEM_NONE + setwildbattle SPECIES_REGIROCK, 40 setflag FLAG_SYS_CTRL_OBJ_DELETE special StartRegiBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq DesertRuins_EventScript_DefeatedRegirock - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq DesertRuins_EventScript_RanFromRegirock - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq DesertRuins_EventScript_RanFromRegirock + goto_if_eq VAR_RESULT, B_OUTCOME_WON, DesertRuins_EventScript_DefeatedRegirock + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, DesertRuins_EventScript_RanFromRegirock + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, DesertRuins_EventScript_RanFromRegirock setflag FLAG_DEFEATED_REGIROCK release end diff --git a/data/maps/DewfordTown/scripts.inc b/data/maps/DewfordTown/scripts.inc index fdf8c785ef..1250c2d767 100644 --- a/data/maps/DewfordTown/scripts.inc +++ b/data/maps/DewfordTown/scripts.inc @@ -4,7 +4,7 @@ .equ LOCALID_BRINEY_DEWFORD, 2 .equ LOCALID_BOAT_DEWFORD, 4 -.equ LOCALID_BOAT_R109, 1 +.equ LOCALID_BOAT_R109, 1 .equ LOCALID_BRINEY_R109, 2 .equ LOCALID_BOAT_R104, 7 @@ -54,8 +54,7 @@ DewfordTown_EventScript_CancelSailSelect:: DewfordTown_EventScript_ReturnToPetalburgPrompt:: msgbox DewfordTown_Text_SetSailBackToPetalburg, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq DewfordTown_EventScript_SailBackToPetalburg + goto_if_eq VAR_RESULT, YES, DewfordTown_EventScript_SailBackToPetalburg msgbox DewfordTown_Text_GoDeliverIllBeWaiting, MSGBOX_DEFAULT release end @@ -87,10 +86,8 @@ DewfordTown_EventScript_OldRodFisherman:: faceplayer goto_if_set FLAG_RECEIVED_OLD_ROD, DewfordTown_EventScript_HowsFishing msgbox DewfordTown_Text_GettingItchToFish, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq DewfordTown_EventScript_GiveOldRod - compare VAR_RESULT, NO - goto_if_eq DewfordTown_EventScript_NotGettingItchToFish + goto_if_eq VAR_RESULT, YES, DewfordTown_EventScript_GiveOldRod + goto_if_eq VAR_RESULT, NO, DewfordTown_EventScript_NotGettingItchToFish end DewfordTown_EventScript_GiveOldRod:: @@ -110,10 +107,8 @@ DewfordTown_EventScript_HowsFishing:: message DewfordTown_Text_HowsYourFishing waitmessage multichoice 20, 8, MULTI_HOWS_FISHING, TRUE - compare VAR_RESULT, 0 - goto_if_eq DewfordTown_EventScript_FishingExcellent - compare VAR_RESULT, 1 - goto_if_eq DewfordTown_EventScript_FishingNotSoGood + goto_if_eq VAR_RESULT, 0, DewfordTown_EventScript_FishingExcellent + goto_if_eq VAR_RESULT, 1, DewfordTown_EventScript_FishingNotSoGood end DewfordTown_EventScript_FishingExcellent:: @@ -128,8 +123,8 @@ DewfordTown_EventScript_FishingNotSoGood:: DewfordTown_EventScript_SailToPetalburg:: call EventScript_BackupMrBrineyLocation - setobjectpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN, 0 - setobjectpriority OBJ_EVENT_ID_PLAYER, MAP_DEWFORD_TOWN, 0 + setobjectsubpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN, 0 + setobjectsubpriority OBJ_EVENT_ID_PLAYER, MAP_DEWFORD_TOWN, 0 applymovement LOCALID_BRINEY_DEWFORD, DewfordTown_Movement_BrineyBoardBoat waitmovement 0 removeobject LOCALID_BRINEY_DEWFORD @@ -151,8 +146,8 @@ DewfordTown_EventScript_SailToPetalburg:: setflag FLAG_HIDE_MR_BRINEY_BOAT_DEWFORD_TOWN hideobjectat LOCALID_BOAT_DEWFORD, MAP_DEWFORD_TOWN setvar VAR_BOARD_BRINEY_BOAT_STATE, 2 - resetobjectpriority OBJ_EVENT_ID_PLAYER, MAP_DEWFORD_TOWN - warp MAP_ROUTE104_MR_BRINEYS_HOUSE, 255, 5, 4 + resetobjectsubpriority OBJ_EVENT_ID_PLAYER, MAP_DEWFORD_TOWN + warp MAP_ROUTE104_MR_BRINEYS_HOUSE, 5, 4 copyvar VAR_BRINEY_LOCATION, VAR_0x8008 waitstate release @@ -160,8 +155,8 @@ DewfordTown_EventScript_SailToPetalburg:: DewfordTown_EventScript_SailToSlateport:: call EventScript_BackupMrBrineyLocation - setobjectpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN, 0 - setobjectpriority OBJ_EVENT_ID_PLAYER, MAP_DEWFORD_TOWN, 1 + setobjectsubpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN, 0 + setobjectsubpriority OBJ_EVENT_ID_PLAYER, MAP_DEWFORD_TOWN, 1 applymovement LOCALID_BRINEY_DEWFORD, DewfordTown_Movement_BrineyBoardBoat waitmovement 0 removeobject LOCALID_BRINEY_DEWFORD @@ -178,7 +173,7 @@ DewfordTown_EventScript_SailToSlateport:: waitmovement 0 setobjectxyperm LOCALID_BRINEY_R109, 21, 26 addobject LOCALID_BRINEY_R109 - setobjectpriority LOCALID_BRINEY_R109, MAP_ROUTE109, 0 + setobjectsubpriority LOCALID_BRINEY_R109, MAP_ROUTE109, 0 applymovement LOCALID_BRINEY_R109, DewfordTown_Movement_BrineyExitBoat waitmovement 0 clearflag FLAG_HIDE_ROUTE_109_MR_BRINEY @@ -190,8 +185,8 @@ DewfordTown_EventScript_SailToSlateport:: call_if_set FLAG_DELIVERED_DEVON_GOODS, DewfordTown_EventScript_LandedSlateport closemessage copyvar VAR_BRINEY_LOCATION, VAR_0x8008 - resetobjectpriority OBJ_EVENT_ID_PLAYER, MAP_DEWFORD_TOWN - resetobjectpriority LOCALID_BRINEY_R109, MAP_ROUTE109 + resetobjectsubpriority OBJ_EVENT_ID_PLAYER, MAP_DEWFORD_TOWN + resetobjectsubpriority LOCALID_BRINEY_R109, MAP_ROUTE109 copyobjectxytoperm LOCALID_BRINEY_R109 release end @@ -230,46 +225,46 @@ DewfordTown_Movement_SailToPetalburg: walk_fast_left walk_fast_left walk_fast_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left walk_fast_left walk_fast_left walk_fast_left @@ -278,119 +273,119 @@ DewfordTown_Movement_SailToPetalburg: walk_fast_up walk_fast_up walk_fast_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up walk_fast_up walk_fast_up walk_fast_up walk_fast_up walk_fast_left walk_fast_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left walk_fast_left walk_fast_left walk_fast_up walk_fast_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up walk_fast_up walk_fast_up walk_fast_up @@ -405,164 +400,164 @@ DewfordTown_Movement_SailToSlateport: walk_right walk_fast_right walk_fast_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right walk_fast_right walk_fast_right walk_fast_up walk_fast_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up walk_fast_up walk_fast_up walk_fast_up @@ -590,7 +585,7 @@ DewfordTown_Movement_ExitBoatSlateport: walk_up walk_up walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end DewfordTown_Movement_BrineyBoardBoat: @@ -607,10 +602,8 @@ DewfordTown_EventScript_TrendyPhraseBoy:: faceplayer call Common_EventScript_BufferTrendyPhrase msgbox DewfordTown_Text_XIsTheBiggestHappeningThingRight, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq DewfordTown_EventScript_ConfirmTrendyPhrase - compare VAR_RESULT, NO - goto_if_eq DewfordTown_EventScript_RejectTrendyPhrase + goto_if_eq VAR_RESULT, YES, DewfordTown_EventScript_ConfirmTrendyPhrase + goto_if_eq VAR_RESULT, NO, DewfordTown_EventScript_RejectTrendyPhrase end DewfordTown_EventScript_ConfirmTrendyPhrase:: @@ -624,16 +617,13 @@ DewfordTown_EventScript_RejectTrendyPhrase:: call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, TRUE - goto_if_eq DewfordTown_EventScript_GiveNewTrendyPhrase - compare VAR_RESULT, FALSE - goto_if_eq DewfordTown_EventScript_CancelNewTrendyPhrase + goto_if_eq VAR_RESULT, TRUE, DewfordTown_EventScript_GiveNewTrendyPhrase + goto_if_eq VAR_RESULT, FALSE, DewfordTown_EventScript_CancelNewTrendyPhrase end DewfordTown_EventScript_GiveNewTrendyPhrase:: incrementgamestat GAME_STAT_STARTED_TRENDS - compare VAR_0x8004, FALSE - goto_if_eq DewfordTown_EventScript_PhraseNotTrendyEnough + goto_if_eq VAR_0x8004, FALSE, DewfordTown_EventScript_PhraseNotTrendyEnough msgbox DewfordTown_Text_OfCourseIKnowAboutThat, MSGBOX_DEFAULT release end diff --git a/data/maps/DewfordTown_Gym/scripts.inc b/data/maps/DewfordTown_Gym/scripts.inc index d2b51766af..81474af726 100644 --- a/data/maps/DewfordTown_Gym/scripts.inc +++ b/data/maps/DewfordTown_Gym/scripts.inc @@ -3,77 +3,66 @@ DewfordTown_Gym_MapScripts:: .byte 0 DewfordTown_Gym_OnTransition: - call DewfordTown_Gym_EventScript_SetFlashRadius + call DewfordTown_Gym_EventScript_SetFlashLevel end -DewfordTown_Gym_EventScript_SetFlashRadius:: +DewfordTown_Gym_EventScript_SetFlashLevel:: goto_if_defeated TRAINER_BRAWLY_1, DewfordTown_Gym_EventScript_SetLightsOn call DewfordTown_Gym_EventScript_CountTrainersDefeated copyvar VAR_0x8001, VAR_0x8000 - compare VAR_0x8000, 0 - goto_if_eq DewfordTown_Gym_EventScript_SetFlashRadius7 - compare VAR_0x8000, 1 - goto_if_eq DewfordTown_Gym_EventScript_SetFlashRadius6 - compare VAR_0x8000, 2 - goto_if_eq DewfordTown_Gym_EventScript_SetFlashRadius5 - compare VAR_0x8000, 3 - goto_if_eq DewfordTown_Gym_EventScript_SetFlashRadius4 - compare VAR_0x8000, 4 - goto_if_eq DewfordTown_Gym_EventScript_SetFlashRadius3 - compare VAR_0x8000, 5 - goto_if_eq DewfordTown_Gym_EventScript_SetFlashRadius2 - goto DewfordTown_Gym_EventScript_SetFlashRadius1 + goto_if_eq VAR_0x8000, 0, DewfordTown_Gym_EventScript_SetFlashLevel7 + goto_if_eq VAR_0x8000, 1, DewfordTown_Gym_EventScript_SetFlashLevel6 + goto_if_eq VAR_0x8000, 2, DewfordTown_Gym_EventScript_SetFlashLevel5 + goto_if_eq VAR_0x8000, 3, DewfordTown_Gym_EventScript_SetFlashLevel4 + goto_if_eq VAR_0x8000, 4, DewfordTown_Gym_EventScript_SetFlashLevel3 + goto_if_eq VAR_0x8000, 5, DewfordTown_Gym_EventScript_SetFlashLevel2 + goto DewfordTown_Gym_EventScript_SetFlashLevel1 DewfordTown_Gym_EventScript_SetLightsOn:: - setflashradius 0 + setflashlevel 0 return -DewfordTown_Gym_EventScript_SetFlashRadius1:: - setflashradius 1 +@ Brightest +DewfordTown_Gym_EventScript_SetFlashLevel1:: + setflashlevel 1 return -DewfordTown_Gym_EventScript_SetFlashRadius2:: - setflashradius 2 +DewfordTown_Gym_EventScript_SetFlashLevel2:: + setflashlevel 2 return -DewfordTown_Gym_EventScript_SetFlashRadius3:: - setflashradius 3 +DewfordTown_Gym_EventScript_SetFlashLevel3:: + setflashlevel 3 return -DewfordTown_Gym_EventScript_SetFlashRadius4:: - setflashradius 4 +DewfordTown_Gym_EventScript_SetFlashLevel4:: + setflashlevel 4 return -DewfordTown_Gym_EventScript_SetFlashRadius5:: - setflashradius 5 +DewfordTown_Gym_EventScript_SetFlashLevel5:: + setflashlevel 5 return -DewfordTown_Gym_EventScript_SetFlashRadius6:: - setflashradius 6 +DewfordTown_Gym_EventScript_SetFlashLevel6:: + setflashlevel 6 return -DewfordTown_Gym_EventScript_SetFlashRadius7:: - setflashradius 7 +@ Darkest +DewfordTown_Gym_EventScript_SetFlashLevel7:: + setflashlevel 7 return DewfordTown_Gym_EventScript_BrightenRoom:: call DewfordTown_Gym_EventScript_CountTrainersDefeated nop1 - compare VAR_0x8000, VAR_0x8001 - goto_if_eq DewfordTown_Gym_EventScript_NoLightChange + goto_if_eq VAR_0x8000, VAR_0x8001, DewfordTown_Gym_EventScript_NoLightChange copyvar VAR_0x8001, VAR_0x8000 - compare VAR_0x8000, 1 - goto_if_eq DewfordTown_Gym_EventScript_AnimateFlash1Trainer - compare VAR_0x8000, 2 - goto_if_eq DewfordTown_Gym_EventScript_AnimateFlash2Trainers - compare VAR_0x8000, 3 - goto_if_eq DewfordTown_Gym_EventScript_AnimateFlash3Trainers - compare VAR_0x8000, 4 - goto_if_eq DewfordTown_Gym_EventScript_AnimateFlash4Trainers - compare VAR_0x8000, 5 - goto_if_eq DewfordTown_Gym_EventScript_AnimateFlash5Trainers - compare VAR_0x8000, 6 - goto_if_eq DewfordTown_Gym_EventScript_AnimateFlash6Trainers + goto_if_eq VAR_0x8000, 1, DewfordTown_Gym_EventScript_AnimateFlash1Trainer + goto_if_eq VAR_0x8000, 2, DewfordTown_Gym_EventScript_AnimateFlash2Trainers + goto_if_eq VAR_0x8000, 3, DewfordTown_Gym_EventScript_AnimateFlash3Trainers + goto_if_eq VAR_0x8000, 4, DewfordTown_Gym_EventScript_AnimateFlash4Trainers + goto_if_eq VAR_0x8000, 5, DewfordTown_Gym_EventScript_AnimateFlash5Trainers + goto_if_eq VAR_0x8000, 6, DewfordTown_Gym_EventScript_AnimateFlash6Trainers DewfordTown_Gym_EventScript_NoLightChange:: return @@ -82,43 +71,43 @@ DewfordTown_Gym_EventScript_NoLightChange:: DewfordTown_Gym_EventScript_AnimateFlash1Trainer:: playse SE_SWITCH animateflash 6 - call DewfordTown_Gym_EventScript_SetFlashRadius + call DewfordTown_Gym_EventScript_SetFlashLevel return DewfordTown_Gym_EventScript_AnimateFlash2Trainers:: playse SE_SWITCH animateflash 5 - call DewfordTown_Gym_EventScript_SetFlashRadius + call DewfordTown_Gym_EventScript_SetFlashLevel return DewfordTown_Gym_EventScript_AnimateFlash3Trainers:: playse SE_SWITCH animateflash 4 - call DewfordTown_Gym_EventScript_SetFlashRadius + call DewfordTown_Gym_EventScript_SetFlashLevel return DewfordTown_Gym_EventScript_AnimateFlash4Trainers:: playse SE_SWITCH animateflash 3 - call DewfordTown_Gym_EventScript_SetFlashRadius + call DewfordTown_Gym_EventScript_SetFlashLevel return DewfordTown_Gym_EventScript_AnimateFlash5Trainers:: playse SE_SWITCH animateflash 2 - call DewfordTown_Gym_EventScript_SetFlashRadius + call DewfordTown_Gym_EventScript_SetFlashLevel return DewfordTown_Gym_EventScript_AnimateFlash6Trainers:: playse SE_SWITCH animateflash 1 - call DewfordTown_Gym_EventScript_SetFlashRadius + call DewfordTown_Gym_EventScript_SetFlashLevel return DewfordTown_Gym_EventScript_AnimateFlashFullBrightness:: playse SE_SWITCH animateflash 0 - call DewfordTown_Gym_EventScript_SetFlashRadius + call DewfordTown_Gym_EventScript_SetFlashLevel return DewfordTown_Gym_EventScript_CountTrainersDefeated:: @@ -146,8 +135,7 @@ DewfordTown_Gym_EventScript_StopCountingTrainers:: DewfordTown_Gym_EventScript_Brawly:: trainerbattle_single TRAINER_BRAWLY_1, DewfordTown_Gym_Text_BrawlyIntro, DewfordTown_Gym_Text_BrawlyDefeat, DewfordTown_Gym_EventScript_BrawlyDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq DewfordTown_Gym_EventScript_BrawlyRematch + goto_if_eq VAR_RESULT, TRUE, DewfordTown_Gym_EventScript_BrawlyRematch goto_if_unset FLAG_RECEIVED_TM08, DewfordTown_Gym_EventScript_GiveBulkUp2 msgbox DewfordTown_Gym_Text_BrawlyPostBattle, MSGBOX_DEFAULT release @@ -162,8 +150,7 @@ DewfordTown_Gym_EventScript_BrawlyDefeated:: setflag FLAG_DEFEATED_DEWFORD_GYM setflag FLAG_BADGE02_GET addvar VAR_PETALBURG_GYM_STATE, 1 - compare VAR_PETALBURG_GYM_STATE, 6 - call_if_eq Common_EventScript_ReadyPetalburgGymForBattle + call_if_eq VAR_PETALBURG_GYM_STATE, 6, Common_EventScript_ReadyPetalburgGymForBattle setvar VAR_0x8008, 2 call Common_EventScript_SetGymTrainers call DewfordTown_Gym_EventScript_GiveBulkUp @@ -182,16 +169,14 @@ DewfordTown_Gym_EventScript_BrawlyDefeated:: DewfordTown_Gym_EventScript_GiveBulkUp:: giveitem ITEM_TM08 - compare VAR_RESULT, 0 - goto_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, 0, Common_EventScript_BagIsFull msgbox DewfordTown_Gym_Text_ExplainBulkUp, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM08 return DewfordTown_Gym_EventScript_GiveBulkUp2: giveitem ITEM_TM08 - compare VAR_RESULT, 0 - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull msgbox DewfordTown_Gym_Text_ExplainBulkUp, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM08 release diff --git a/data/maps/DewfordTown_Hall/scripts.inc b/data/maps/DewfordTown_Hall/scripts.inc index db9d13518b..6249a7fac5 100644 --- a/data/maps/DewfordTown_Hall/scripts.inc +++ b/data/maps/DewfordTown_Hall/scripts.inc @@ -11,8 +11,7 @@ DewfordTown_Hall_EventScript_Girl:: faceplayer call Common_EventScript_BufferTrendyPhrase special IsTrendyPhraseBoring - compare VAR_RESULT, TRUE - goto_if_eq DewfordTown_Hall_EventScript_GirlBoredOfTrend + goto_if_eq VAR_RESULT, TRUE, DewfordTown_Hall_EventScript_GirlBoredOfTrend msgbox DewfordTown_Hall_Text_CantImagineLifeWithoutTrend, MSGBOX_DEFAULT release end @@ -36,10 +35,8 @@ DewfordTown_Hall_EventScript_Man:: call Common_EventScript_BufferTrendyPhrase special BufferDeepLinkPhrase msgbox DewfordTown_Hall_Text_DeepLinkBetweenXAndY, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq DewfordTown_Hall_EventScript_ConfirmTrendLink - compare VAR_RESULT, NO - goto_if_eq DewfordTown_Hall_EventScript_RejectTrendLink + goto_if_eq VAR_RESULT, YES, DewfordTown_Hall_EventScript_ConfirmTrendLink + goto_if_eq VAR_RESULT, NO, DewfordTown_Hall_EventScript_RejectTrendLink end DewfordTown_Hall_EventScript_ConfirmTrendLink:: @@ -58,7 +55,7 @@ DewfordTown_Hall_EventScript_ExpertM:: call Common_EventScript_BufferTrendyPhrase msgbox DewfordTown_Hall_Text_TVShowAboutTrend, MSGBOX_DEFAULT closemessage - applymovement LOCALID_EXPERT_M, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_EXPERT_M, Common_Movement_WalkInPlaceFasterUp waitmovement 0 release end @@ -69,7 +66,7 @@ DewfordTown_Hall_EventScript_Twin:: call Common_EventScript_BufferTrendyPhrase msgbox DewfordTown_Hall_Text_IsTrendMorePopularAcrossSea, MSGBOX_DEFAULT closemessage - applymovement LOCALID_TWIN, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_TWIN, Common_Movement_WalkInPlaceFasterUp waitmovement 0 release end @@ -196,16 +193,13 @@ DewfordTown_Hall_EventScript_DontMovePlayer1:: DewfordTown_Hall_EventScript_DebateReact1:: applymovement LOCALID_PSYCHIC_M, DewfordTown_Hall_Movement_PsychicWalkInPlaceLeft waitmovement 0 - compare VAR_0x8008, 0 - goto_if_eq DewfordTown_Hall_EventScript_PlayerReactWest - compare VAR_0x8008, 1 - goto_if_eq DewfordTown_Hall_EventScript_DontMovePlayer2 + goto_if_eq VAR_0x8008, 0, DewfordTown_Hall_EventScript_PlayerReactWest + goto_if_eq VAR_0x8008, 1, DewfordTown_Hall_EventScript_DontMovePlayer2 end DewfordTown_Hall_EventScript_PlayerReactWest:: - compare VAR_FACING, DIR_EAST - goto_if_eq DewfordTown_Hall_EventScript_DontMovePlayer1 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + goto_if_eq VAR_FACING, DIR_EAST, DewfordTown_Hall_EventScript_DontMovePlayer1 + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return @@ -215,33 +209,28 @@ DewfordTown_Hall_EventScript_DontMovePlayer2:: DewfordTown_Hall_EventScript_DebateReact2:: applymovement LOCALID_SCHOOL_KID_M, DewfordTown_Hall_Movement_SchoolKidWalkInPlaceRight waitmovement 0 - compare VAR_0x8008, 0 - goto_if_eq DewfordTown_Hall_EventScript_PlayerReactNorthSouth - compare VAR_0x8008, 1 - goto_if_eq DewfordTown_Hall_EventScript_PlayerReactEast + goto_if_eq VAR_0x8008, 0, DewfordTown_Hall_EventScript_PlayerReactNorthSouth + goto_if_eq VAR_0x8008, 1, DewfordTown_Hall_EventScript_PlayerReactEast end DewfordTown_Hall_EventScript_PlayerReactNorthSouth:: - compare VAR_FACING, DIR_NORTH - call_if_eq DewfordTown_Hall_EventScript_PlayerWalkInPlaceUp - compare VAR_FACING, DIR_SOUTH - call_if_eq DewfordTown_Hall_EventScript_PlayerWalkInPlaceDown + call_if_eq VAR_FACING, DIR_NORTH, DewfordTown_Hall_EventScript_PlayerWalkInPlaceUp + call_if_eq VAR_FACING, DIR_SOUTH, DewfordTown_Hall_EventScript_PlayerWalkInPlaceDown return DewfordTown_Hall_EventScript_PlayerWalkInPlaceUp:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return DewfordTown_Hall_EventScript_PlayerWalkInPlaceDown:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return DewfordTown_Hall_EventScript_PlayerReactEast:: - compare VAR_FACING, DIR_WEST - goto_if_eq DewfordTown_Hall_EventScript_DontMovePlayer1 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + goto_if_eq VAR_FACING, DIR_WEST, DewfordTown_Hall_EventScript_DontMovePlayer1 + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return @@ -260,8 +249,7 @@ DewfordTown_Hall_EventScript_SludgeBombMan:: goto_if_set FLAG_RECEIVED_TM36, DewfordTown_Hall_EventScript_ReceivedSludgeBomb msgbox DewfordTown_Hall_Text_GiveYouSludgeBomb, MSGBOX_DEFAULT giveitem ITEM_TM36 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM36 release end diff --git a/data/maps/DewfordTown_House1/scripts.inc b/data/maps/DewfordTown_House1/scripts.inc index 0aba45d3c7..cdd9d0cd29 100644 --- a/data/maps/DewfordTown_House1/scripts.inc +++ b/data/maps/DewfordTown_House1/scripts.inc @@ -13,7 +13,7 @@ DewfordTown_House1_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox DewfordTown_House1_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/DewfordTown_House2/scripts.inc b/data/maps/DewfordTown_House2/scripts.inc index ae173f151c..cb68664aaf 100644 --- a/data/maps/DewfordTown_House2/scripts.inc +++ b/data/maps/DewfordTown_House2/scripts.inc @@ -7,8 +7,7 @@ DewfordTown_House2_EventScript_Man:: goto_if_set FLAG_RECEIVED_SILK_SCARF, DewfordTown_House2_EventScript_ExplainSilkScarf msgbox DewfordTown_House2_Text_WantYouToHaveSilkScarf, MSGBOX_DEFAULT giveitem ITEM_SILK_SCARF - compare VAR_RESULT, FALSE - goto_if_eq DewfordTown_House2_EventScript_NoRoomForScarf + goto_if_eq VAR_RESULT, FALSE, DewfordTown_House2_EventScript_NoRoomForScarf setflag FLAG_RECEIVED_SILK_SCARF release end diff --git a/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc b/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc index dc2bb4d722..f9723ffa0f 100644 --- a/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc +++ b/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc @@ -33,8 +33,8 @@ EverGrandeCity_ChampionsRoom_EventScript_EnterRoom:: waitmovement 0 setvar VAR_TEMP_1, 1 goto EverGrandeCity_ChampionsRoom_EventScript_Wallace - releaseall - end + releaseall + end EverGrandeCity_ChampionsRoom_Movement_PlayerApproachWallace: walk_up @@ -50,24 +50,20 @@ EverGrandeCity_ChampionsRoom_EventScript_Wallace:: EverGrandeCity_ChampionsRoom_EventScript_Defeated:: playse SE_DOOR - setmetatile 6, 1, METATILE_EliteFour_OpenDoorChampion_Frame, 0 - setmetatile 6, 2, METATILE_EliteFour_OpenDoorChampion_Opening, 0 + setmetatile 6, 1, METATILE_EliteFour_OpenDoorChampion_Frame, FALSE + setmetatile 6, 2, METATILE_EliteFour_OpenDoorChampion_Opening, FALSE special DrawWholeMapView msgbox EverGrandeCity_ChampionsRoom_Text_PostBattleSpeech, MSGBOX_DEFAULT closemessage playse SE_DOOR checkplayergender - compare VAR_RESULT, MALE - call_if_eq EverGrandeCity_ChampionsRoom_EventScript_PlayMayMusic - compare VAR_RESULT, FEMALE - call_if_eq EverGrandeCity_ChampionsRoom_EventScript_PlayBrendanMusic + call_if_eq VAR_RESULT, MALE, EverGrandeCity_ChampionsRoom_EventScript_PlayMayMusic + call_if_eq VAR_RESULT, FEMALE, EverGrandeCity_ChampionsRoom_EventScript_PlayBrendanMusic addobject LOCALID_RIVAL call EverGrandeCity_ChampionsRoom_EventScript_RivalApproachPlayer checkplayergender - compare VAR_RESULT, MALE - goto_if_eq EverGrandeCity_ChampionsRoom_EventScript_MayAdvice - compare VAR_RESULT, FEMALE - goto_if_eq EverGrandeCity_ChampionsRoom_EventScript_BrendanAdvice + goto_if_eq VAR_RESULT, MALE, EverGrandeCity_ChampionsRoom_EventScript_MayAdvice + goto_if_eq VAR_RESULT, FEMALE, EverGrandeCity_ChampionsRoom_EventScript_BrendanAdvice end EverGrandeCity_ChampionsRoom_EventScript_PlayMayMusic:: @@ -109,39 +105,37 @@ EverGrandeCity_ChampionsRoom_EventScript_BirchArrivesExitForHoF:: addobject LOCALID_BIRCH applymovement LOCALID_BIRCH, EverGrandeCity_ChampionsRoom_Movement_BirchArrives waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox EverGrandeCity_ChampionsRoom_Text_BirchArriveRatePokedex, MSGBOX_DEFAULT call ProfBirch_EventScript_RatePokedex msgbox EverGrandeCity_ChampionsRoom_Text_BirchCongratulations, MSGBOX_DEFAULT - applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 20 - applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox EverGrandeCity_ChampionsRoom_Text_WallaceComeWithMe, MSGBOX_DEFAULT closemessage delay 30 applymovement LOCALID_WALLACE, EverGrandeCity_ChampionsRoom_Movement_WallaceExitStart applymovement OBJ_EVENT_ID_PLAYER, EverGrandeCity_ChampionsRoom_Movement_PlayerExitStart - applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFasterUp applymovement LOCALID_RIVAL, EverGrandeCity_ChampionsRoom_Movement_RivalFollows waitmovement 0 delay 20 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox EverGrandeCity_ChampionsRoom_Text_WallaceWaitOutside, MSGBOX_DEFAULT checkplayergender - compare VAR_RESULT, MALE - call_if_eq EverGrandeCity_ChampionsRoom_EventScript_MayCongratulations - compare VAR_RESULT, FEMALE - call_if_eq EverGrandeCity_ChampionsRoom_EventScript_BrendanCongratulations + call_if_eq VAR_RESULT, MALE, EverGrandeCity_ChampionsRoom_EventScript_MayCongratulations + call_if_eq VAR_RESULT, FEMALE, EverGrandeCity_ChampionsRoom_EventScript_BrendanCongratulations closemessage applymovement LOCALID_WALLACE, EverGrandeCity_ChampionsRoom_Movement_WallaceExit applymovement OBJ_EVENT_ID_PLAYER, EverGrandeCity_ChampionsRoom_Movement_PlayerExit waitmovement 0 setflag FLAG_HIDE_PETALBURG_GYM_GREETER - warp MAP_EVER_GRANDE_CITY_HALL_OF_FAME, 255, 7, 16 + warp MAP_EVER_GRANDE_CITY_HALL_OF_FAME, 7, 16 waitstate releaseall end @@ -157,7 +151,7 @@ EverGrandeCity_ChampionsRoom_EventScript_BrendanCongratulations:: EverGrandeCity_ChampionsRoom_EventScript_RivalApproachPlayer:: applymovement LOCALID_RIVAL, EverGrandeCity_ChampionsRoom_Movement_RivalApproachPlayer waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return @@ -187,17 +181,17 @@ EverGrandeCity_ChampionsRoom_Movement_RivalApproachPlayer: walk_up walk_left walk_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end EverGrandeCity_ChampionsRoom_Movement_RivalLookBackAndForth: - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 step_end @@ -209,7 +203,7 @@ EverGrandeCity_ChampionsRoom_Movement_RivalFollows: EverGrandeCity_ChampionsRoom_Movement_WallaceExitStart: walk_up walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end EverGrandeCity_ChampionsRoom_Movement_WallaceExit: @@ -226,7 +220,7 @@ EverGrandeCity_ChampionsRoom_Movement_BirchArrives: walk_up walk_right walk_up - walk_in_place_fastest_left + walk_in_place_faster_left step_end EverGrandeCity_ChampionsRoom_Text_IntroSpeech: diff --git a/data/maps/EverGrandeCity_DrakesRoom/scripts.inc b/data/maps/EverGrandeCity_DrakesRoom/scripts.inc index 75b16e7750..80b1f568c8 100644 --- a/data/maps/EverGrandeCity_DrakesRoom/scripts.inc +++ b/data/maps/EverGrandeCity_DrakesRoom/scripts.inc @@ -26,8 +26,7 @@ EverGrandeCity_DrakesRoom_EventScript_WalkInCloseDoor:: EverGrandeCity_DrakesRoom_OnLoad: call_if_set FLAG_DEFEATED_ELITE_4_DRAKE, EverGrandeCity_DrakesRoom_EventScript_ResetAdvanceToNextRoom - compare VAR_ELITE_4_STATE, 4 - call_if_eq EverGrandeCity_DrakesRoom_EventScript_CloseDoor + call_if_eq VAR_ELITE_4_STATE, 4, EverGrandeCity_DrakesRoom_EventScript_CloseDoor end EverGrandeCity_DrakesRoom_EventScript_ResetAdvanceToNextRoom:: diff --git a/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc b/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc index 59f4440c45..b2d556448c 100644 --- a/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc +++ b/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc @@ -25,8 +25,7 @@ EverGrandeCity_GlaciasRoom_EventScript_WalkInCloseDoor:: EverGrandeCity_GlaciasRoom_OnLoad: call_if_set FLAG_DEFEATED_ELITE_4_GLACIA, EverGrandeCity_GlaciasRoom_EventScript_ResetAdvanceToNextRoom - compare VAR_ELITE_4_STATE, 3 - call_if_eq EverGrandeCity_GlaciasRoom_EventScript_CloseDoor + call_if_eq VAR_ELITE_4_STATE, 3, EverGrandeCity_GlaciasRoom_EventScript_CloseDoor end EverGrandeCity_GlaciasRoom_EventScript_ResetAdvanceToNextRoom:: diff --git a/data/maps/EverGrandeCity_HallOfFame/scripts.inc b/data/maps/EverGrandeCity_HallOfFame/scripts.inc index f5e4155652..92b01af970 100644 --- a/data/maps/EverGrandeCity_HallOfFame/scripts.inc +++ b/data/maps/EverGrandeCity_HallOfFame/scripts.inc @@ -22,8 +22,8 @@ EverGrandeCity_HallOfFame_EventScript_EnterHallOfFame:: applymovement LOCALID_WALLACE, EverGrandeCity_HallOfFame_Movement_WalkIntoHallOfFame1 applymovement OBJ_EVENT_ID_PLAYER, EverGrandeCity_HallOfFame_Movement_WalkIntoHallOfFame1 waitmovement 0 - applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFastestRight - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFasterRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox EverGrandeCity_HallOfFame_Text_HereWeHonorLeagueChampions, MSGBOX_DEFAULT closemessage @@ -31,13 +31,13 @@ EverGrandeCity_HallOfFame_EventScript_EnterHallOfFame:: applymovement OBJ_EVENT_ID_PLAYER, EverGrandeCity_HallOfFame_Movement_WalkIntoHallOfFame2 waitmovement 0 delay 20 - applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFastestRight - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFasterRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox EverGrandeCity_HallOfFame_Text_LetsRecordYouAndYourPartnersNames, MSGBOX_DEFAULT closemessage - applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFastestUp - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFasterUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 20 dofieldeffect FLDEFF_HALL_OF_FAME_RECORD @@ -46,10 +46,8 @@ EverGrandeCity_HallOfFame_EventScript_EnterHallOfFame:: setvar VAR_TEMP_1, 1 call EverGrandeCity_HallOfFame_EventScript_SetGameClearFlags checkplayergender - compare VAR_RESULT, MALE - goto_if_eq EverGrandeCity_HallOfFame_EventScript_GameClearMale - compare VAR_RESULT, FEMALE - goto_if_eq EverGrandeCity_HallOfFame_EventScript_GameClearFemale + goto_if_eq VAR_RESULT, MALE, EverGrandeCity_HallOfFame_EventScript_GameClearMale + goto_if_eq VAR_RESULT, FEMALE, EverGrandeCity_HallOfFame_EventScript_GameClearFemale end EverGrandeCity_HallOfFame_EventScript_GameClearMale:: diff --git a/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc b/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc index b64f5145a0..ed272eb901 100644 --- a/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc +++ b/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc @@ -25,8 +25,7 @@ EverGrandeCity_PhoebesRoom_EventScript_WalkInCloseDoor:: EverGrandeCity_PhoebesRoom_OnLoad: call_if_set FLAG_DEFEATED_ELITE_4_PHOEBE, EverGrandeCity_PhoebesRoom_EventScript_ResetAdvanceToNextRoom - compare VAR_ELITE_4_STATE, 2 - call_if_eq EverGrandeCity_PhoebesRoom_EventScript_CloseDoor + call_if_eq VAR_ELITE_4_STATE, 2, EverGrandeCity_PhoebesRoom_EventScript_CloseDoor end EverGrandeCity_PhoebesRoom_EventScript_ResetAdvanceToNextRoom:: diff --git a/data/maps/EverGrandeCity_PokemonCenter_1F/scripts.inc b/data/maps/EverGrandeCity_PokemonCenter_1F/scripts.inc index 1244b82fd2..ec45732e8c 100644 --- a/data/maps/EverGrandeCity_PokemonCenter_1F/scripts.inc +++ b/data/maps/EverGrandeCity_PokemonCenter_1F/scripts.inc @@ -37,12 +37,9 @@ EverGrandeCity_PokemonCenter_1F_EventScript_Scott:: faceplayer msgbox EverGrandeCity_PokemonCenter_1F_Text_ScottHappyForYou, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_NORTH - call_if_eq EverGrandeCity_PokemonCenter_1F_EventScript_ScottExitNorth - compare VAR_FACING, DIR_EAST - call_if_eq EverGrandeCity_PokemonCenter_1F_EventScript_ScottExit - compare VAR_FACING, DIR_WEST - call_if_eq EverGrandeCity_PokemonCenter_1F_EventScript_ScottExit + call_if_eq VAR_FACING, DIR_NORTH, EverGrandeCity_PokemonCenter_1F_EventScript_ScottExitNorth + call_if_eq VAR_FACING, DIR_EAST, EverGrandeCity_PokemonCenter_1F_EventScript_ScottExit + call_if_eq VAR_FACING, DIR_WEST, EverGrandeCity_PokemonCenter_1F_EventScript_ScottExit addvar VAR_SCOTT_STATE, 1 setflag FLAG_MET_SCOTT_IN_EVERGRANDE playse SE_EXIT diff --git a/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc b/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc index 1be2e7c1f3..c13e716975 100644 --- a/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc +++ b/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc @@ -55,10 +55,8 @@ EverGrandeCity_PokemonLeague_1F_EventScript_DoorGuard:: lockall goto_if_set FLAG_ENTERED_ELITE_FOUR, EverGrandeCity_PokemonLeague_1F_EventScript_GoForth getplayerxy VAR_TEMP_0, VAR_TEMP_1 - compare VAR_TEMP_0, 11 - call_if_ge EverGrandeCity_PokemonLeague_1F_EventScript_PlayerMoveToFrontFromRight - compare VAR_TEMP_0, 8 - call_if_le EverGrandeCity_PokemonLeague_1F_EventScript_PlayerMoveToFrontFromLeft + call_if_ge VAR_TEMP_0, 11, EverGrandeCity_PokemonLeague_1F_EventScript_PlayerMoveToFrontFromRight + call_if_le VAR_TEMP_0, 8, EverGrandeCity_PokemonLeague_1F_EventScript_PlayerMoveToFrontFromLeft message EverGrandeCity_PokemonLeague_1F_Text_MustHaveAllGymBadges waitmessage delay 120 @@ -108,23 +106,23 @@ EverGrandeCity_PokemonLeague_1F_EventScript_GoForth:: EverGrandeCity_PokemonLeague_1F_Movement_MoveToFrontFromRight: walk_down walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end EverGrandeCity_PokemonLeague_1F_Movement_MoveToFrontFromLeft: walk_down walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end EverGrandeCity_PokemonLeague_1F_Movement_LeftGuardOutOfWay: walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end EverGrandeCity_PokemonLeague_1F_Movement_RightGuardOutOfWay: walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end EverGrandeCity_PokemonLeague_1F_Text_MustHaveAllGymBadges: diff --git a/data/maps/EverGrandeCity_SidneysRoom/scripts.inc b/data/maps/EverGrandeCity_SidneysRoom/scripts.inc index 3444d078b1..03b4a4e03b 100644 --- a/data/maps/EverGrandeCity_SidneysRoom/scripts.inc +++ b/data/maps/EverGrandeCity_SidneysRoom/scripts.inc @@ -12,8 +12,7 @@ EverGrandeCity_SidneysRoom_OnTransition: EverGrandeCity_SidneysRoom_OnLoad: call_if_set FLAG_DEFEATED_ELITE_4_SIDNEY, EverGrandeCity_SidneysRoom_EventScript_ResetAdvanceToNextRoom - compare VAR_ELITE_4_STATE, 1 - call_if_eq EverGrandeCity_SidneysRoom_EventScript_CloseDoor + call_if_eq VAR_ELITE_4_STATE, 1, EverGrandeCity_SidneysRoom_EventScript_CloseDoor end EverGrandeCity_SidneysRoom_EventScript_ResetAdvanceToNextRoom:: diff --git a/data/maps/FallarborTown/scripts.inc b/data/maps/FallarborTown/scripts.inc index 809909a5ca..96f4088436 100644 --- a/data/maps/FallarborTown/scripts.inc +++ b/data/maps/FallarborTown/scripts.inc @@ -33,7 +33,7 @@ FallarborTown_EventScript_Azurill:: lock faceplayer waitse - playmoncry SPECIES_AZURILL, 0 + playmoncry SPECIES_AZURILL, CRY_MODE_NORMAL msgbox FallarborTown_Text_Azurill, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc b/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc index 947bbb8bba..707995daeb 100644 --- a/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc +++ b/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc @@ -18,10 +18,8 @@ FallarborTown_BattleTentBattleRoom_OnTransition: FallarborTown_BattleTentBattleRoom_EventScript_SetPlayerGfx:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq FallarborTown_BattleTentBattleRoom_EventScript_SetPlayerGfxMale - compare VAR_RESULT, FEMALE - goto_if_eq FallarborTown_BattleTentBattleRoom_EventScript_SetPlayerGfxFemale + goto_if_eq VAR_RESULT, MALE, FallarborTown_BattleTentBattleRoom_EventScript_SetPlayerGfxMale + goto_if_eq VAR_RESULT, FEMALE, FallarborTown_BattleTentBattleRoom_EventScript_SetPlayerGfxFemale return FallarborTown_BattleTentBattleRoom_EventScript_SetPlayerGfxMale:: @@ -44,8 +42,7 @@ FallarborTown_BattleTentBattleRoom_EventScript_EnterRoom:: applymovement LOCALID_PLAYER, FallarborTown_BattleTentBattleRoom_Movement_PlayerEnter waitmovement 0 frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 0 - goto_if_ne FallarborTown_BattleTentBattleRoom_EventScript_ResumeChallenge + goto_if_ne VAR_RESULT, 0, FallarborTown_BattleTentBattleRoom_EventScript_ResumeChallenge FallarborTown_BattleTentBattleRoom_EventScript_NextOpponentEnter:: tower_setopponent addobject LOCALID_OPPONENT @@ -71,7 +68,7 @@ FallarborTown_BattleTentBattleRoom_EventScript_NextOpponentEnter:: FallarborTown_BattleTentBattleRoom_EventScript_WarpToLobbyLost:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST special LoadPlayerParty - warp MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY, 255, 6, 6 + warp MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY, 6, 6 waitstate FallarborTown_BattleTentBattleRoom_EventScript_DefeatedOpponent:: @@ -103,10 +100,8 @@ FallarborTown_BattleTentBattleRoom_EventScript_IncrementBattleNum:: special HealPlayerParty FallarborTown_BattleTentBattleRoom_EventScript_AskContinueChallenge:: frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 1 - call_if_eq FallarborTown_BattleTentBattleRoom_EventScript_ReadyFor2ndOpponent - compare VAR_RESULT, 2 - call_if_eq FallarborTown_BattleTentBattleRoom_EventScript_ReadyFor3rdOpponent + call_if_eq VAR_RESULT, 1, FallarborTown_BattleTentBattleRoom_EventScript_ReadyFor2ndOpponent + call_if_eq VAR_RESULT, 2, FallarborTown_BattleTentBattleRoom_EventScript_ReadyFor3rdOpponent multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, TRUE switch VAR_RESULT case 0, FallarborTown_BattleTentBattleRoom_EventScript_ContinueChallenge @@ -142,13 +137,12 @@ FallarborTown_BattleTentBattleRoom_EventScript_WarpToLobbyWon:: delay 60 frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_WON special LoadPlayerParty - warp MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY, 255, 6, 6 + warp MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY, 6, 6 waitstate @ Unreachable code block? The flow into the next block also doesnt make sense arena_get ARENA_DATA_WIN_STREAK - compare VAR_RESULT, MAX_STREAK - goto_if_eq FallarborTown_BattleTentBattleRoom_EventScript_IncrementBattleNum + goto_if_eq VAR_RESULT, MAX_STREAK, FallarborTown_BattleTentBattleRoom_EventScript_IncrementBattleNum addvar VAR_RESULT, 1 arena_set ARENA_DATA_WIN_STREAK, VAR_RESULT @ See above @@ -185,15 +179,15 @@ FallarborTown_BattleTentBattleRoom_Movement_PlayerEnter: walk_up walk_up walk_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end FallarborTown_BattleTentBattleRoom_Movement_PlayerFaceBattle: - walk_in_place_fastest_right + walk_in_place_faster_right step_end FallarborTown_BattleTentBattleRoom_Movement_PlayerFaceAttendant: - walk_in_place_fastest_left + walk_in_place_faster_left step_end FallarborTown_BattleTentBattleRoom_Movement_OpponentEnter: @@ -201,7 +195,7 @@ FallarborTown_BattleTentBattleRoom_Movement_OpponentEnter: walk_down walk_down walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end @ Unused @@ -225,14 +219,14 @@ FallarborTown_BattleTentBattleRoom_Movement_AttendantApproachPlayer: walk_down walk_down walk_down - walk_in_place_fastest_right + walk_in_place_faster_right step_end FallarborTown_BattleTentBattleRoom_Movement_AttendantReturnToPos: walk_up walk_up walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end FallarborTown_BattleTentBattleRoom_OnWarp: diff --git a/data/maps/FallarborTown_BattleTentCorridor/scripts.inc b/data/maps/FallarborTown_BattleTentCorridor/scripts.inc index 077cdfe798..023dc919f8 100644 --- a/data/maps/FallarborTown_BattleTentCorridor/scripts.inc +++ b/data/maps/FallarborTown_BattleTentCorridor/scripts.inc @@ -22,7 +22,7 @@ FallarborTown_BattleTentCorridor_EventScript_EnterCorridor:: closedoor 2, 1 waitdooranim setvar VAR_0x8006, 0 - warp MAP_FALLARBOR_TOWN_BATTLE_TENT_BATTLE_ROOM, 255, 4, 4 + warp MAP_FALLARBOR_TOWN_BATTLE_TENT_BATTLE_ROOM, 4, 4 waitstate releaseall end diff --git a/data/maps/FallarborTown_BattleTentLobby/scripts.inc b/data/maps/FallarborTown_BattleTentLobby/scripts.inc index 6a2c8713fa..1bcd04559c 100644 --- a/data/maps/FallarborTown_BattleTentLobby/scripts.inc +++ b/data/maps/FallarborTown_BattleTentLobby/scripts.inc @@ -106,8 +106,7 @@ FallarborTown_BattleTentLobby_EventScript_Attendant:: lock faceplayer fallarbortent_getprize - compare VAR_RESULT, ITEM_NONE - goto_if_ne FallarborTown_BattleTentLobby_EventScript_PrizeWaiting + goto_if_ne VAR_RESULT, ITEM_NONE, FallarborTown_BattleTentLobby_EventScript_PrizeWaiting special SavePlayerParty msgbox FallarborTown_BattleTentLobby_Text_WelcomeToBattleTent, MSGBOX_DEFAULT FallarborTown_BattleTentLobby_EventScript_AskEnterChallenge:: @@ -125,8 +124,7 @@ FallarborTown_BattleTentLobby_EventScript_TryEnterChallenge:: setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES setvar VAR_RESULT, 2 frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq FallarborTown_BattleTentLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, FallarborTown_BattleTentLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_TENT msgbox FallarborTown_BattleTentLobby_Text_SelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -134,8 +132,7 @@ FallarborTown_BattleTentLobby_EventScript_TryEnterChallenge:: setvar VAR_0x8005, FRONTIER_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq FallarborTown_BattleTentLobby_EventScript_LoadPartyCancelChallenge + goto_if_eq VAR_RESULT, 0, FallarborTown_BattleTentLobby_EventScript_LoadPartyCancelChallenge msgbox FallarborTown_BattleTentLobby_Text_SaveBeforeChallenge, MSGBOX_YESNO switch VAR_RESULT case NO, FallarborTown_BattleTentLobby_EventScript_LoadPartyCancelChallenge @@ -153,15 +150,14 @@ FallarborTown_BattleTentLobby_EventScript_SaveBeforeChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq FallarborTown_BattleTentLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, FallarborTown_BattleTentLobby_EventScript_CancelChallengeSaveFailed FallarborTown_BattleTentLobby_EventScript_EnterChallenge:: special SavePlayerParty frontier_setpartyorder FRONTIER_PARTY_SIZE msgbox FallarborTown_BattleTentLobby_Text_GuideYouToBattleTent, MSGBOX_DEFAULT closemessage call FallarborTown_BattleTentLobby_EventScript_WalkToDoor - warp MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR, 255, 2, 7 + warp MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR, 2, 7 setvar VAR_TEMP_0, 0 waitstate end diff --git a/data/maps/FallarborTown_CozmosHouse/scripts.inc b/data/maps/FallarborTown_CozmosHouse/scripts.inc index 43a9dca7f3..61f297e69d 100644 --- a/data/maps/FallarborTown_CozmosHouse/scripts.inc +++ b/data/maps/FallarborTown_CozmosHouse/scripts.inc @@ -5,9 +5,8 @@ FallarborTown_CozmosHouse_EventScript_ProfCozmo:: lock faceplayer goto_if_set FLAG_RECEIVED_TM27, FallarborTown_CozmosHouse_EventScript_GaveMeteorite - checkitem ITEM_METEORITE, 1 - compare VAR_RESULT, TRUE - goto_if_eq FallarborTown_CozmosHouse_EventScript_PlayerHasMeteorite + checkitem ITEM_METEORITE + goto_if_eq VAR_RESULT, TRUE, FallarborTown_CozmosHouse_EventScript_PlayerHasMeteorite msgbox FallarborTown_CozmosHouse_Text_MeteoriteWillNeverBeMineNow, MSGBOX_DEFAULT release end @@ -15,12 +14,10 @@ FallarborTown_CozmosHouse_EventScript_ProfCozmo:: FallarborTown_CozmosHouse_EventScript_PlayerHasMeteorite:: call_if_unset FLAG_TEMP_2, FallarborTown_CozmosHouse_EventScript_NoticeMeteorite call_if_set FLAG_TEMP_2, FallarborTown_CozmosHouse_EventScript_AskForMeteorite - compare VAR_RESULT, NO - goto_if_eq FallarborTown_CozmosHouse_EventScript_DeclineGiveMeteorite + goto_if_eq VAR_RESULT, NO, FallarborTown_CozmosHouse_EventScript_DeclineGiveMeteorite msgbox FallarborTown_CozmosHouse_Text_PleaseUseThisTM, MSGBOX_DEFAULT giveitem ITEM_TM27 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setvar VAR_0x8004, ITEM_METEORITE call Common_EventScript_PlayerHandedOverTheItem setflag FLAG_RECEIVED_TM27 diff --git a/data/maps/FallarborTown_Mart/scripts.inc b/data/maps/FallarborTown_Mart/scripts.inc index 2b18a9e143..27c8cc1e70 100644 --- a/data/maps/FallarborTown_Mart/scripts.inc +++ b/data/maps/FallarborTown_Mart/scripts.inc @@ -19,10 +19,10 @@ FallarborTown_Mart_Pokemart: .2byte ITEM_PARALYZE_HEAL .2byte ITEM_ESCAPE_ROPE .2byte ITEM_SUPER_REPEL - .2byte ITEM_X_SPECIAL + .2byte ITEM_X_SP_ATK .2byte ITEM_X_SPEED .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_DIRE_HIT .2byte ITEM_GUARD_SPEC .2byte ITEM_NONE @@ -41,7 +41,7 @@ FallarborTown_Mart_EventScript_Skitty:: lock faceplayer waitse - playmoncry SPECIES_SKITTY, 0 + playmoncry SPECIES_SKITTY, CRY_MODE_NORMAL msgbox FallarborTown_Mart_Text_Skitty, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/FallarborTown_MoveRelearnersHouse/scripts.inc b/data/maps/FallarborTown_MoveRelearnersHouse/scripts.inc index 1bd54b4b8d..f17754328d 100644 --- a/data/maps/FallarborTown_MoveRelearnersHouse/scripts.inc +++ b/data/maps/FallarborTown_MoveRelearnersHouse/scripts.inc @@ -14,9 +14,8 @@ FallarborTown_MoveRelearnersHouse_EventScript_MoveRelearner:: end FallarborTown_MoveRelearnersHouse_EventScript_AskTeachMove:: - checkitem ITEM_HEART_SCALE, 1 - compare VAR_RESULT, FALSE - goto_if_eq FallarborTown_MoveRelearnersHouse_EventScript_ComeBackWithHeartScale + checkitem ITEM_HEART_SCALE + goto_if_eq VAR_RESULT, FALSE, FallarborTown_MoveRelearnersHouse_EventScript_ComeBackWithHeartScale msgbox FallarborTown_MoveRelearnersHouse_Text_ThatsAHeartScaleWantMeToTeachMove, MSGBOX_YESNO switch VAR_RESULT case NO, FallarborTown_MoveRelearnersHouse_EventScript_ComeBackWithHeartScale @@ -27,13 +26,10 @@ FallarborTown_MoveRelearnersHouse_EventScript_ChooseMon:: msgbox FallarborTown_MoveRelearnersHouse_Text_TutorWhichMon, MSGBOX_DEFAULT special ChooseMonForMoveRelearner waitstate - compare VAR_0x8004, 255 - goto_if_eq FallarborTown_MoveRelearnersHouse_EventScript_ComeBackWithHeartScale + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, FallarborTown_MoveRelearnersHouse_EventScript_ComeBackWithHeartScale special IsSelectedMonEgg - compare VAR_RESULT, TRUE - goto_if_eq FallarborTown_MoveRelearnersHouse_EventScript_CantTeachEgg - compare VAR_0x8005, 0 - goto_if_eq FallarborTown_MoveRelearnersHouse_EventScript_NoMoveToTeachMon + goto_if_eq VAR_RESULT, TRUE, FallarborTown_MoveRelearnersHouse_EventScript_CantTeachEgg + goto_if_eq VAR_0x8005, 0, FallarborTown_MoveRelearnersHouse_EventScript_NoMoveToTeachMon goto FallarborTown_MoveRelearnersHouse_EventScript_ChooseMove end @@ -41,8 +37,7 @@ FallarborTown_MoveRelearnersHouse_EventScript_ChooseMove:: msgbox FallarborTown_MoveRelearnersHouse_Text_TeachWhichMove, MSGBOX_DEFAULT special TeachMoveRelearnerMove waitstate - compare VAR_0x8004, 0 - goto_if_eq FallarborTown_MoveRelearnersHouse_EventScript_ChooseMon + goto_if_eq VAR_0x8004, 0, FallarborTown_MoveRelearnersHouse_EventScript_ChooseMon msgbox FallarborTown_MoveRelearnersHouse_Text_HandedOverHeartScale, MSGBOX_DEFAULT removeitem ITEM_HEART_SCALE goto FallarborTown_MoveRelearnersHouse_EventScript_ComeBackWithHeartScale diff --git a/data/maps/FarawayIsland_Entrance/scripts.inc b/data/maps/FarawayIsland_Entrance/scripts.inc index c4b4c9ab08..504b0dc6a6 100644 --- a/data/maps/FarawayIsland_Entrance/scripts.inc +++ b/data/maps/FarawayIsland_Entrance/scripts.inc @@ -23,17 +23,16 @@ FarawayIsland_Entrance_EventScript_Sailor:: lock faceplayer msgbox FarawayIsland_Entrance_Text_SailorReturn, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq FarawayIsland_Entrance_EventScript_AsYouLike + goto_if_eq VAR_RESULT, NO, FarawayIsland_Entrance_EventScript_AsYouLike msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 30 hideobjectat LOCALID_SAILOR, MAP_FARAWAY_ISLAND_ENTRANCE setvar VAR_0x8004, LOCALID_SS_TIDAL call Common_EventScript_FerryDepartIsland - warp MAP_LILYCOVE_CITY_HARBOR, 255, 8, 11 + warp MAP_LILYCOVE_CITY_HARBOR, 8, 11 waitstate release end diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index bd2b479f70..d3d519ed15 100644 --- a/data/maps/FarawayIsland_Interior/scripts.inc +++ b/data/maps/FarawayIsland_Interior/scripts.inc @@ -13,14 +13,10 @@ FarawayIsland_Interior_OnReturnToField: FarawayIsland_Interior_EventScript_TrySetMewAboveGrass:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq FarawayIsland_Interior_EventScript_SetMewAboveGrass - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq FarawayIsland_Interior_EventScript_SetMewAboveGrass - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq FarawayIsland_Interior_EventScript_SetMewAboveGrass - compare VAR_RESULT, B_OUTCOME_MON_TELEPORTED - goto_if_eq FarawayIsland_Interior_EventScript_SetMewAboveGrass + goto_if_eq VAR_RESULT, B_OUTCOME_WON, FarawayIsland_Interior_EventScript_SetMewAboveGrass + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, FarawayIsland_Interior_EventScript_SetMewAboveGrass + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, FarawayIsland_Interior_EventScript_SetMewAboveGrass + goto_if_eq VAR_RESULT, B_OUTCOME_MON_TELEPORTED, FarawayIsland_Interior_EventScript_SetMewAboveGrass return FarawayIsland_Interior_EventScript_SetMewAboveGrass:: @@ -34,8 +30,7 @@ FarawayIsland_Interior_OnResume: FarawayIsland_Interior_EventScript_TryRemoveMew:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject VAR_LAST_TALKED return @@ -73,7 +68,7 @@ FarawayIsland_Interior_Movement_MewMoveAndHide: walk_up walk_up walk_up - walk_in_place_fastest_down + walk_in_place_faster_down set_invisible step_end @@ -126,35 +121,24 @@ FarawayIsland_Interior_EventScript_Mew:: special SetMewAboveGrass message FarawayIsland_Interior_Text_Mew waitse - playmoncry SPECIES_MEW, 2 - compare VAR_FACING, DIR_NORTH - call_if_eq FarawayIsland_Interior_EventScript_FoundMewNorth - compare VAR_FACING, DIR_SOUTH - call_if_eq FarawayIsland_Interior_EventScript_FoundMewSouth - compare VAR_FACING, DIR_WEST - call_if_eq FarawayIsland_Interior_EventScript_FoundMewWest - compare VAR_FACING, DIR_EAST - call_if_eq FarawayIsland_Interior_EventScript_FoundMewEast + playmoncry SPECIES_MEW, CRY_MODE_ENCOUNTER + call_if_eq VAR_FACING, DIR_NORTH, FarawayIsland_Interior_EventScript_FoundMewNorth + call_if_eq VAR_FACING, DIR_SOUTH, FarawayIsland_Interior_EventScript_FoundMewSouth + call_if_eq VAR_FACING, DIR_WEST, FarawayIsland_Interior_EventScript_FoundMewWest + call_if_eq VAR_FACING, DIR_EAST, FarawayIsland_Interior_EventScript_FoundMewEast special DestroyMewEmergingGrassSprite delay 40 waitmoncry - setvar VAR_0x8004, SPECIES_MEW - setvar VAR_0x8005, 30 @ level - setvar VAR_0x8006, ITEM_NONE - special CreateEventLegalEnemyMon + seteventmon SPECIES_MEW, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq FarawayIsland_Interior_EventScript_MewDefeated - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq FarawayIsland_Interior_EventScript_PlayerOrMewRan - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq FarawayIsland_Interior_EventScript_PlayerOrMewRan - compare VAR_RESULT, B_OUTCOME_MON_TELEPORTED - goto_if_eq FarawayIsland_Interior_EventScript_PlayerOrMewRan + goto_if_eq VAR_RESULT, B_OUTCOME_WON, FarawayIsland_Interior_EventScript_MewDefeated + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, FarawayIsland_Interior_EventScript_PlayerOrMewRan + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, FarawayIsland_Interior_EventScript_PlayerOrMewRan + goto_if_eq VAR_RESULT, B_OUTCOME_MON_TELEPORTED, FarawayIsland_Interior_EventScript_PlayerOrMewRan setflag FLAG_CAUGHT_MEW release end diff --git a/data/maps/FortreeCity/scripts.inc b/data/maps/FortreeCity/scripts.inc index 1ef3cffc73..f1694aaa84 100644 --- a/data/maps/FortreeCity/scripts.inc +++ b/data/maps/FortreeCity/scripts.inc @@ -55,17 +55,15 @@ FortreeCity_EventScript_GymSign:: FortreeCity_EventScript_Kecleon:: lock faceplayer - checkitem ITEM_DEVON_SCOPE, 1 - compare VAR_RESULT, TRUE - goto_if_eq FortreeCity_EventScript_AskUseDevonScope + checkitem ITEM_DEVON_SCOPE + goto_if_eq VAR_RESULT, TRUE, FortreeCity_EventScript_AskUseDevonScope msgbox FortreeCity_Text_SomethingUnseeable, MSGBOX_DEFAULT release end FortreeCity_EventScript_AskUseDevonScope:: msgbox FortreeCity_Text_UnseeableUseDevonScope, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq FortreeCity_EventScript_UseDevonScope + goto_if_eq VAR_RESULT, YES, FortreeCity_EventScript_UseDevonScope release end @@ -75,7 +73,7 @@ FortreeCity_EventScript_UseDevonScope:: applymovement VAR_LAST_TALKED, Movement_KecleonAppears waitmovement 0 waitse - playmoncry SPECIES_KECLEON, 2 + playmoncry SPECIES_KECLEON, CRY_MODE_ENCOUNTER delay 40 waitmoncry applymovement VAR_LAST_TALKED, FortreeCity_Movement_KecleonFlee diff --git a/data/maps/FortreeCity_DecorationShop/scripts.inc b/data/maps/FortreeCity_DecorationShop/scripts.inc index a42f47af73..4394312876 100644 --- a/data/maps/FortreeCity_DecorationShop/scripts.inc +++ b/data/maps/FortreeCity_DecorationShop/scripts.inc @@ -19,7 +19,7 @@ FortreeCity_DecorationShop_EventScript_ClerkDesks:: release end - .align 2 + .align 2 FortreeCity_DecorationShop_PokemartDecor_Desks: .2byte DECOR_SMALL_DESK .2byte DECOR_POKEMON_DESK diff --git a/data/maps/FortreeCity_Gym/scripts.inc b/data/maps/FortreeCity_Gym/scripts.inc index caac724738..1c729bc44e 100644 --- a/data/maps/FortreeCity_Gym/scripts.inc +++ b/data/maps/FortreeCity_Gym/scripts.inc @@ -18,8 +18,7 @@ FortreeCity_Gym_EventScript_InitRotatingGates:: FortreeCity_Gym_EventScript_Winona:: trainerbattle_single TRAINER_WINONA_1, FortreeCity_Gym_Text_WinonaIntro, FortreeCity_Gym_Text_WinonaDefeat, FortreeCity_Gym_EventScript_WinonaDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq FortreeCity_Gym_EventScript_WinonaRematch + goto_if_eq VAR_RESULT, TRUE, FortreeCity_Gym_EventScript_WinonaRematch goto_if_unset FLAG_RECEIVED_TM40, FortreeCity_Gym_EventScript_GiveAerialAce2 msgbox FortreeCity_Gym_Text_WinonaPostBattle, MSGBOX_DEFAULT release @@ -50,8 +49,7 @@ FortreeCity_Gym_EventScript_WinonaDefeated:: FortreeCity_Gym_EventScript_GiveAerialAce2:: giveitem ITEM_TM40 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox FortreeCity_Gym_Text_ExplainAerialAce, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM40 release @@ -59,8 +57,7 @@ FortreeCity_Gym_EventScript_GiveAerialAce2:: FortreeCity_Gym_EventScript_GiveAerialAce:: giveitem ITEM_TM40 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox FortreeCity_Gym_Text_ExplainAerialAce, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM40 return diff --git a/data/maps/FortreeCity_House1/scripts.inc b/data/maps/FortreeCity_House1/scripts.inc index 3dd58ca344..a072f56106 100644 --- a/data/maps/FortreeCity_House1/scripts.inc +++ b/data/maps/FortreeCity_House1/scripts.inc @@ -10,24 +10,21 @@ FortreeCity_House1_EventScript_Trader:: specialvar VAR_RESULT, GetInGameTradeSpeciesInfo copyvar VAR_0x8009, VAR_RESULT msgbox FortreeCity_House1_Text_YouWillTradeWontYou, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq FortreeCity_House1_EventScript_DeclineTrade + goto_if_eq VAR_RESULT, NO, FortreeCity_House1_EventScript_DeclineTrade special ChoosePartyMon waitstate copyvar VAR_0x800A, VAR_0x8004 - compare VAR_0x8004, 255 - goto_if_eq FortreeCity_House1_EventScript_DeclineTrade + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, FortreeCity_House1_EventScript_DeclineTrade copyvar VAR_0x8005, VAR_0x800A specialvar VAR_RESULT, GetTradeSpecies copyvar VAR_0x800B, VAR_RESULT - compare VAR_RESULT, VAR_0x8009 - goto_if_ne FortreeCity_House1_EventScript_NotRequestedMon + goto_if_ne VAR_RESULT, VAR_0x8009, FortreeCity_House1_EventScript_NotRequestedMon copyvar VAR_0x8004, VAR_0x8008 copyvar VAR_0x8005, VAR_0x800A special CreateInGameTradePokemon special DoInGameTradeScene waitstate - bufferspeciesname 0, VAR_0x8009 + bufferspeciesname STR_VAR_1, VAR_0x8009 msgbox FortreeCity_House1_Text_MonYouTakeCare, MSGBOX_DEFAULT setflag FLAG_FORTREE_NPC_TRADE_COMPLETED release @@ -39,7 +36,7 @@ FortreeCity_House1_EventScript_DeclineTrade:: end FortreeCity_House1_EventScript_NotRequestedMon:: - bufferspeciesname 0, VAR_0x8009 + bufferspeciesname STR_VAR_1, VAR_0x8009 msgbox FortreeCity_House1_Text_ThisIsntAMon, MSGBOX_DEFAULT release end @@ -57,7 +54,7 @@ FortreeCity_House1_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox FortreeCity_House1_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/FortreeCity_House2/scripts.inc b/data/maps/FortreeCity_House2/scripts.inc index 29e9ea93cf..cdd0fc99f7 100644 --- a/data/maps/FortreeCity_House2/scripts.inc +++ b/data/maps/FortreeCity_House2/scripts.inc @@ -20,8 +20,7 @@ FortreeCity_House2_EventScript_HiddenPowerGiver:: case 0, FortreeCity_House2_EventScript_WrongGuess msgbox FortreeCity_House2_Text_YourHiddenPowerHasAwoken, MSGBOX_DEFAULT giveitem ITEM_TM10 - compare VAR_RESULT, 0 - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM10 msgbox FortreeCity_House2_Text_ExplainHiddenPower, MSGBOX_DEFAULT release diff --git a/data/maps/FortreeCity_House4/scripts.inc b/data/maps/FortreeCity_House4/scripts.inc index 8a6d71eb4d..ed91674173 100644 --- a/data/maps/FortreeCity_House4/scripts.inc +++ b/data/maps/FortreeCity_House4/scripts.inc @@ -34,8 +34,7 @@ FortreeCity_House4_EventScript_WingullReturned:: waitmovement 0 msgbox FortreeCity_House4_Text_WelcomeWingullTakeMentalHerb, MSGBOX_DEFAULT giveitem ITEM_MENTAL_HERB - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_MENTAL_HERB releaseall end @@ -51,7 +50,7 @@ FortreeCity_House4_Movement_WingullExit: walk_fast_down walk_fast_down walk_fast_right - walk_in_place_fastest_down + walk_in_place_faster_down delay_8 step_end @@ -59,7 +58,7 @@ FortreeCity_House4_EventScript_Wingull:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox FortreeCity_House4_Text_Wingull, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/FortreeCity_House5/scripts.inc b/data/maps/FortreeCity_House5/scripts.inc index 71fcc78cad..eee6d358bf 100644 --- a/data/maps/FortreeCity_House5/scripts.inc +++ b/data/maps/FortreeCity_House5/scripts.inc @@ -13,7 +13,7 @@ FortreeCity_House5_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox FortreeCity_House5_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/GraniteCave_B1F/scripts.inc b/data/maps/GraniteCave_B1F/scripts.inc index f1b52ce662..24519aef65 100644 --- a/data/maps/GraniteCave_B1F/scripts.inc +++ b/data/maps/GraniteCave_B1F/scripts.inc @@ -6,6 +6,6 @@ GraniteCave_B1F_MapScripts:: GraniteCave_B1F_SetHoleWarp: setstepcallback STEP_CB_CRACKED_FLOOR - setholewarp MAP_GRANITE_CAVE_B2F, 255, 0, 0 + setholewarp MAP_GRANITE_CAVE_B2F end diff --git a/data/maps/GraniteCave_StevensRoom/scripts.inc b/data/maps/GraniteCave_StevensRoom/scripts.inc index 73c50b70a5..384e648ee2 100644 --- a/data/maps/GraniteCave_StevensRoom/scripts.inc +++ b/data/maps/GraniteCave_StevensRoom/scripts.inc @@ -12,8 +12,7 @@ GraniteCave_StevensRoom_EventScript_Steven:: setflag FLAG_DELIVERED_STEVEN_LETTER msgbox GraniteCave_StevensRoom_Text_ThankYouTakeThis, MSGBOX_DEFAULT giveitem ITEM_TM47 - compare VAR_RESULT, FALSE - call_if_eq GraniteCave_StevensRoom_EventScript_BagFull + call_if_eq VAR_RESULT, FALSE, GraniteCave_StevensRoom_EventScript_BagFull msgbox GraniteCave_StevensRoom_Text_CouldBecomeChampionLetsRegister, MSGBOX_DEFAULT closemessage delay 30 @@ -25,14 +24,10 @@ GraniteCave_StevensRoom_EventScript_Steven:: setflag FLAG_REGISTERED_STEVEN_POKENAV msgbox GraniteCave_StevensRoom_Text_IveGotToHurryAlong, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_NORTH - call_if_eq GraniteCave_StevensRoom_EventScript_StevenExitNorth - compare VAR_FACING, DIR_SOUTH - call_if_eq GraniteCave_StevensRoom_EventScript_StevenExitSouth - compare VAR_FACING, DIR_WEST - call_if_eq GraniteCave_StevensRoom_EventScript_StevenExitWestEast - compare VAR_FACING, DIR_EAST - call_if_eq GraniteCave_StevensRoom_EventScript_StevenExitWestEast + call_if_eq VAR_FACING, DIR_NORTH, GraniteCave_StevensRoom_EventScript_StevenExitNorth + call_if_eq VAR_FACING, DIR_SOUTH, GraniteCave_StevensRoom_EventScript_StevenExitSouth + call_if_eq VAR_FACING, DIR_WEST, GraniteCave_StevensRoom_EventScript_StevenExitWestEast + call_if_eq VAR_FACING, DIR_EAST, GraniteCave_StevensRoom_EventScript_StevenExitWestEast playse SE_EXIT removeobject LOCALID_STEVEN release @@ -72,7 +67,7 @@ GraniteCave_StevensRoom_Movement_PlayerTurnTowardExit: delay_16 delay_16 delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up step_end GraniteCave_StevensRoom_Movement_StevenExitSouth: diff --git a/data/maps/InsideOfTruck/scripts.inc b/data/maps/InsideOfTruck/scripts.inc index 3068b11841..c59d5a97be 100644 --- a/data/maps/InsideOfTruck/scripts.inc +++ b/data/maps/InsideOfTruck/scripts.inc @@ -4,9 +4,9 @@ InsideOfTruck_MapScripts:: .byte 0 InsideOfTruck_OnLoad: - setmetatile 4, 1, METATILE_InsideOfTruck_ExitLight_Top, 0 - setmetatile 4, 2, METATILE_InsideOfTruck_ExitLight_Mid, 0 - setmetatile 4, 3, METATILE_InsideOfTruck_ExitLight_Bottom, 0 + setmetatile 4, 1, METATILE_InsideOfTruck_ExitLight_Top, FALSE + setmetatile 4, 2, METATILE_InsideOfTruck_ExitLight_Mid, FALSE + setmetatile 4, 3, METATILE_InsideOfTruck_ExitLight_Bottom, FALSE end InsideOfTruck_OnResume: @@ -17,10 +17,8 @@ InsideOfTruck_EventScript_SetIntroFlags:: lockall setflag FLAG_HIDE_MAP_NAME_POPUP checkplayergender - compare VAR_RESULT, MALE - goto_if_eq InsideOfTruck_EventScript_SetIntroFlagsMale - compare VAR_RESULT, FEMALE - goto_if_eq InsideOfTruck_EventScript_SetIntroFlagsFemale + goto_if_eq VAR_RESULT, MALE, InsideOfTruck_EventScript_SetIntroFlagsMale + goto_if_eq VAR_RESULT, FEMALE, InsideOfTruck_EventScript_SetIntroFlagsFemale end InsideOfTruck_EventScript_SetIntroFlagsMale:: @@ -32,7 +30,7 @@ InsideOfTruck_EventScript_SetIntroFlagsMale:: setflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_SIBLING setflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F_POKE_BALL setvar VAR_LITTLEROOT_HOUSES_STATE_BRENDAN, 1 - setdynamicwarp MAP_LITTLEROOT_TOWN, 255, 3, 10 + setdynamicwarp MAP_LITTLEROOT_TOWN, 3, 10 releaseall end @@ -45,7 +43,7 @@ InsideOfTruck_EventScript_SetIntroFlagsFemale:: setflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_SIBLING setflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_2F_POKE_BALL setvar VAR_LITTLEROOT_HOUSES_STATE_MAY, 1 - setdynamicwarp MAP_LITTLEROOT_TOWN, 255, 12, 10 + setdynamicwarp MAP_LITTLEROOT_TOWN, 12, 10 releaseall end diff --git a/data/maps/IslandCave/scripts.inc b/data/maps/IslandCave/scripts.inc index af93863b7c..d15802aaa8 100644 --- a/data/maps/IslandCave/scripts.inc +++ b/data/maps/IslandCave/scripts.inc @@ -10,8 +10,7 @@ IslandCave_OnResume: IslandCave_EventScript_TryRemoveRegice:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject VAR_LAST_TALKED return @@ -20,12 +19,12 @@ IslandCave_OnLoad: end IslandCave_EventScript_HideRegiEntrance:: - setmetatile 7, 19, METATILE_Cave_EntranceCover, 1 - setmetatile 8, 19, METATILE_Cave_EntranceCover, 1 - setmetatile 9, 19, METATILE_Cave_EntranceCover, 1 - setmetatile 7, 20, METATILE_Cave_SealedChamberBraille_Mid, 1 - setmetatile 8, 20, METATILE_Cave_SealedChamberBraille_Mid, 1 - setmetatile 9, 20, METATILE_Cave_SealedChamberBraille_Mid, 1 + setmetatile 7, 19, METATILE_Cave_EntranceCover, TRUE + setmetatile 8, 19, METATILE_Cave_EntranceCover, TRUE + setmetatile 9, 19, METATILE_Cave_EntranceCover, TRUE + setmetatile 7, 20, METATILE_Cave_SealedChamberBraille_Mid, TRUE + setmetatile 8, 20, METATILE_Cave_SealedChamberBraille_Mid, TRUE + setmetatile 9, 20, METATILE_Cave_SealedChamberBraille_Mid, TRUE return IslandCave_OnTransition: @@ -39,12 +38,12 @@ IslandCave_EventScript_ShowRegice:: return IslandCave_EventScript_OpenRegiEntrance:: - setmetatile 7, 19, METATILE_Cave_SealedChamberEntrance_TopLeft, 1 - setmetatile 8, 19, METATILE_Cave_SealedChamberEntrance_TopMid, 1 - setmetatile 9, 19, METATILE_Cave_SealedChamberEntrance_TopRight, 1 - setmetatile 7, 20, METATILE_Cave_SealedChamberEntrance_BottomLeft, 1 - setmetatile 8, 20, METATILE_Cave_SealedChamberEntrance_BottomMid, 0 - setmetatile 9, 20, METATILE_Cave_SealedChamberEntrance_BottomRight, 1 + setmetatile 7, 19, METATILE_Cave_SealedChamberEntrance_TopLeft, TRUE + setmetatile 8, 19, METATILE_Cave_SealedChamberEntrance_TopMid, TRUE + setmetatile 9, 19, METATILE_Cave_SealedChamberEntrance_TopRight, TRUE + setmetatile 7, 20, METATILE_Cave_SealedChamberEntrance_BottomLeft, TRUE + setmetatile 8, 20, METATILE_Cave_SealedChamberEntrance_BottomMid, FALSE + setmetatile 9, 20, METATILE_Cave_SealedChamberEntrance_BottomRight, TRUE special DrawWholeMapView playse SE_BANG setflag FLAG_SYS_BRAILLE_REGICE_COMPLETED @@ -92,21 +91,18 @@ IslandCave_EventScript_Regice:: lock faceplayer waitse - playmoncry SPECIES_REGICE, 2 + playmoncry SPECIES_REGICE, CRY_MODE_ENCOUNTER delay 40 waitmoncry - setwildbattle SPECIES_REGICE, 40, ITEM_NONE + setwildbattle SPECIES_REGICE, 40 setflag FLAG_SYS_CTRL_OBJ_DELETE special StartRegiBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq IslandCave_EventScript_DefeatedRegice - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq IslandCave_EventScript_RanFromRegice - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq IslandCave_EventScript_RanFromRegice + goto_if_eq VAR_RESULT, B_OUTCOME_WON, IslandCave_EventScript_DefeatedRegice + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, IslandCave_EventScript_RanFromRegice + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, IslandCave_EventScript_RanFromRegice setflag FLAG_DEFEATED_REGICE release end diff --git a/data/maps/JaggedPass/scripts.inc b/data/maps/JaggedPass/scripts.inc index 754ee00cf5..f969a4dec6 100644 --- a/data/maps/JaggedPass/scripts.inc +++ b/data/maps/JaggedPass/scripts.inc @@ -8,14 +8,12 @@ JaggedPass_MapScripts:: JaggedPass_OnResume: setstepcallback STEP_CB_ASH - compare VAR_JAGGED_PASS_STATE, 0 - call_if_eq JaggedPass_EventScript_CheckHasMagmaEmblem + call_if_eq VAR_JAGGED_PASS_STATE, 0, JaggedPass_EventScript_CheckHasMagmaEmblem end JaggedPass_EventScript_CheckHasMagmaEmblem:: - checkitem ITEM_MAGMA_EMBLEM, 1 - compare VAR_RESULT, TRUE - goto_if_eq JaggedPass_EventScript_SetReadyToOpenHideout + checkitem ITEM_MAGMA_EMBLEM + goto_if_eq VAR_RESULT, TRUE, JaggedPass_EventScript_SetReadyToOpenHideout return JaggedPass_EventScript_SetReadyToOpenHideout:: @@ -23,8 +21,7 @@ JaggedPass_EventScript_SetReadyToOpenHideout:: return JaggedPass_OnTransition: - compare VAR_JAGGED_PASS_ASH_WEATHER, 1 - call_if_eq JaggedPass_EventScript_SetWeatherAsh + call_if_eq VAR_JAGGED_PASS_ASH_WEATHER, 1, JaggedPass_EventScript_SetWeatherAsh end JaggedPass_EventScript_SetWeatherAsh:: @@ -33,13 +30,12 @@ JaggedPass_EventScript_SetWeatherAsh:: return JaggedPass_OnLoad: - compare VAR_JAGGED_PASS_STATE, 1 - goto_if_le JaggedPass_EventScript_ConcealHideoutEntrance + goto_if_le VAR_JAGGED_PASS_STATE, 1, JaggedPass_EventScript_ConcealHideoutEntrance end JaggedPass_EventScript_ConcealHideoutEntrance:: - setmetatile 16, 17, METATILE_Lavaridge_RockWall, 1 - setmetatile 16, 18, METATILE_Lavaridge_RockWall, 1 + setmetatile 16, 17, METATILE_Lavaridge_RockWall, TRUE + setmetatile 16, 18, METATILE_Lavaridge_RockWall, TRUE end JaggedPass_EventScript_OpenMagmaHideout:: @@ -59,8 +55,8 @@ JaggedPass_EventScript_OpenMagmaHideout:: special ShakeCamera waitstate playse SE_EFFECTIVE - setmetatile 16, 17, METATILE_Lavaridge_CaveEntrance_Top, 1 - setmetatile 16, 18, METATILE_Lavaridge_CaveEntrance_Bottom, 0 + setmetatile 16, 17, METATILE_Lavaridge_CaveEntrance_Top, TRUE + setmetatile 16, 18, METATILE_Lavaridge_CaveEntrance_Bottom, FALSE special DrawWholeMapView delay 30 setvar VAR_JAGGED_PASS_STATE, 2 @@ -106,8 +102,7 @@ JaggedPass_EventScript_Eric:: JaggedPass_EventScript_Diana:: trainerbattle_single TRAINER_DIANA_1, JaggedPass_Text_DianaIntro, JaggedPass_Text_DianaDefeat, JaggedPass_EventScript_RegisterDiana specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq JaggedPass_EventScript_DianaRematch + goto_if_eq VAR_RESULT, TRUE, JaggedPass_EventScript_DianaRematch msgbox JaggedPass_Text_DianaPostBattle, MSGBOX_DEFAULT release end @@ -127,8 +122,7 @@ JaggedPass_EventScript_DianaRematch:: JaggedPass_EventScript_Ethan:: trainerbattle_single TRAINER_ETHAN_1, JaggedPass_Text_EthanIntro, JaggedPass_Text_EthanDefeat, JaggedPass_EventScript_RegisterEthan specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq JaggedPass_EventScript_EthanRematch + goto_if_eq VAR_RESULT, TRUE, JaggedPass_EventScript_EthanRematch msgbox JaggedPass_Text_EthanPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/LavaridgeTown/scripts.inc b/data/maps/LavaridgeTown/scripts.inc index baa9027a94..3ce226c4c1 100644 --- a/data/maps/LavaridgeTown/scripts.inc +++ b/data/maps/LavaridgeTown/scripts.inc @@ -12,10 +12,8 @@ LavaridgeTown_OnTransition: call_if_set FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY, LavaridgeTown_EventScript_ShowMtChimneyTrainers call Common_EventScript_SetupRivalGfxId call Common_EventScript_SetupRivalOnBikeGfxId - compare VAR_LAVARIDGE_TOWN_STATE, 1 - call_if_eq LavaridgeTown_EventScript_CheckSetRivalPos - compare VAR_LAVARIDGE_TOWN_STATE, 1 - call_if_eq LavaridgeTown_EventScript_HideMapNamePopup + call_if_eq VAR_LAVARIDGE_TOWN_STATE, 1, LavaridgeTown_EventScript_CheckSetRivalPos + call_if_eq VAR_LAVARIDGE_TOWN_STATE, 1, LavaridgeTown_EventScript_HideMapNamePopup end LavaridgeTown_EventScript_ClearLavaridgeWhiteOut:: @@ -24,8 +22,7 @@ LavaridgeTown_EventScript_ClearLavaridgeWhiteOut:: LavaridgeTown_EventScript_CheckSetRivalPos:: getplayerxy VAR_0x8004, VAR_0x8005 - compare VAR_0x8004, 9 - goto_if_eq LavaridgeTown_EventScript_SetRivalPos + goto_if_eq VAR_0x8004, 9, LavaridgeTown_EventScript_SetRivalPos return LavaridgeTown_EventScript_SetRivalPos:: @@ -50,25 +47,17 @@ LavaridgeTown_OnFrame: LavaridgeTown_EventScript_RivalGiveGoGoggles:: lockall getplayerxy VAR_0x8008, VAR_0x8009 - compare VAR_0x8008, 9 - call_if_eq LavaridgeTown_EventScript_RivalNoticePlayer - compare VAR_0x8008, 9 - call_if_ne LavaridgeTown_EventScript_RivalExitHerbShop + call_if_eq VAR_0x8008, 9, LavaridgeTown_EventScript_RivalNoticePlayer + call_if_ne VAR_0x8008, 9, LavaridgeTown_EventScript_RivalExitHerbShop delay 20 checkplayergender - compare VAR_RESULT, MALE - call_if_eq LavaridgeTown_EventScript_PlayMayMusic - compare VAR_RESULT, FEMALE - call_if_eq LavaridgeTown_EventScript_PlayBrendanMusic - compare VAR_0x8008, 9 - call_if_eq LavaridgeTown_EventScript_RivalApproachPlayer1 - compare VAR_0x8008, 9 - call_if_ne LavaridgeTown_EventScript_RivalApproachPlayer2 + call_if_eq VAR_RESULT, MALE, LavaridgeTown_EventScript_PlayMayMusic + call_if_eq VAR_RESULT, FEMALE, LavaridgeTown_EventScript_PlayBrendanMusic + call_if_eq VAR_0x8008, 9, LavaridgeTown_EventScript_RivalApproachPlayer1 + call_if_ne VAR_0x8008, 9, LavaridgeTown_EventScript_RivalApproachPlayer2 checkplayergender - compare VAR_RESULT, MALE - goto_if_eq LavaridgeTown_EventScript_MayGiveGoGoggles - compare VAR_RESULT, FEMALE - goto_if_eq LavaridgeTown_EventScript_BrendanGiveGoGoggles + goto_if_eq VAR_RESULT, MALE, LavaridgeTown_EventScript_MayGiveGoGoggles + goto_if_eq VAR_RESULT, FEMALE, LavaridgeTown_EventScript_BrendanGiveGoGoggles end LavaridgeTown_EventScript_MayGiveGoGoggles:: @@ -92,10 +81,8 @@ LavaridgeTown_EventScript_RivalExit:: removeobject LOCALID_RIVAL addobject LOCALID_RIVAL_ON_BIKE delay 30 - compare VAR_0x8008, 9 - call_if_eq LavaridgeTown_EventScript_RivalExit1 - compare VAR_0x8008, 9 - call_if_ne LavaridgeTown_EventScript_RivalExit2 + call_if_eq VAR_0x8008, 9, LavaridgeTown_EventScript_RivalExit1 + call_if_ne VAR_0x8008, 9, LavaridgeTown_EventScript_RivalExit2 removeobject LOCALID_RIVAL_ON_BIKE setvar VAR_LAVARIDGE_TOWN_STATE, 2 clearflag FLAG_HIDE_MAP_NAME_POPUP @@ -113,7 +100,7 @@ LavaridgeTown_EventScript_PlayBrendanMusic:: return LavaridgeTown_EventScript_RivalNoticePlayer:: - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterUp waitmovement 0 playse SE_PIN applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark @@ -130,14 +117,14 @@ LavaridgeTown_EventScript_RivalExitHerbShop:: waitmovement 0 closedoor 12, 15 waitdooranim - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 playse SE_PIN applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark waitmovement 0 applymovement LOCALID_RIVAL, Common_Movement_Delay48 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return @@ -178,7 +165,7 @@ LavaridgeTown_Movement_RivalExit2: LavaridgeTown_Movement_PlayerWatchRivalExit: delay_16 delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right step_end LavaridgeTown_Movement_RivalExit1: @@ -214,8 +201,7 @@ LavaridgeTown_Movement_RivalExitHerbShop: LavaridgeTown_EventScript_HotSpringsTrigger:: specialvar VAR_RESULT, GetPlayerFacingDirection - compare VAR_RESULT, DIR_SOUTH - goto_if_eq LavaridgeTown_EventScript_EnteredHotSprings + goto_if_eq VAR_RESULT, DIR_SOUTH, LavaridgeTown_EventScript_EnteredHotSprings end LavaridgeTown_EventScript_EnteredHotSprings:: @@ -251,11 +237,9 @@ LavaridgeTown_EventScript_EggWoman:: faceplayer goto_if_set FLAG_RECEIVED_LAVARIDGE_EGG, LavaridgeTown_EventScript_ReceivedEgg msgbox LavaridgeTown_Text_HaveEggWillYouTakeIt, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LavaridgeTown_EventScript_DeclineEgg + goto_if_eq VAR_RESULT, NO, LavaridgeTown_EventScript_DeclineEgg getpartysize - compare VAR_RESULT, PARTY_SIZE - goto_if_eq LavaridgeTown_EventScript_NoRoomForEgg + goto_if_eq VAR_RESULT, PARTY_SIZE, LavaridgeTown_EventScript_NoRoomForEgg msgbox LavaridgeTown_Text_HopeYoullWalkPlentyWithEgg, MSGBOX_DEFAULT setflag FLAG_RECEIVED_LAVARIDGE_EGG playfanfare MUS_OBTAIN_ITEM diff --git a/data/maps/LavaridgeTown_Gym_1F/scripts.inc b/data/maps/LavaridgeTown_Gym_1F/scripts.inc index 608f32e24c..530d6e9598 100644 --- a/data/maps/LavaridgeTown_Gym_1F/scripts.inc +++ b/data/maps/LavaridgeTown_Gym_1F/scripts.inc @@ -19,7 +19,7 @@ LavaridgeTown_Gym_1F_EventScript_SetTrainerTempVars:: setvar VAR_TEMP_D, 0 setvar VAR_TEMP_E, 0 setvar VAR_TEMP_F, 0 - goto_if_defeated TRAINER_COLE LavaridgeTown_Gym_1F_EventScript_SetGeraldTempVar + goto_if_defeated TRAINER_COLE, LavaridgeTown_Gym_1F_EventScript_SetGeraldTempVar setvar VAR_TEMP_B, 1 LavaridgeTown_Gym_1F_EventScript_SetGeraldTempVar:: goto_if_defeated TRAINER_GERALD, LavaridgeTown_Gym_1F_EventScript_SetAxleTempVar @@ -51,8 +51,7 @@ LavaridgeTown_Gym_1F_EventScript_EndCheckBuryTrainers:: LavaridgeTown_Gym_1F_EventScript_Flannery:: trainerbattle_single TRAINER_FLANNERY_1, LavaridgeTown_Gym_1F_Text_FlanneryIntro, LavaridgeTown_Gym_1F_Text_FlanneryDefeat, LavaridgeTown_Gym_1F_EventScript_FlanneryDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq LavaridgeTown_Gym_1F_EventScript_FlanneryRematch + goto_if_eq VAR_RESULT, TRUE, LavaridgeTown_Gym_1F_EventScript_FlanneryRematch goto_if_unset FLAG_RECEIVED_TM50, LavaridgeTown_Gym_1F_EventScript_GiveOverheat2 msgbox LavaridgeTown_Gym_1F_Text_FlanneryPostBattle, MSGBOX_DEFAULT release @@ -67,8 +66,7 @@ LavaridgeTown_Gym_1F_EventScript_FlanneryDefeated:: setflag FLAG_DEFEATED_LAVARIDGE_GYM setflag FLAG_BADGE04_GET addvar VAR_PETALBURG_GYM_STATE, 1 - compare VAR_PETALBURG_GYM_STATE, 6 - call_if_eq Common_EventScript_ReadyPetalburgGymForBattle + call_if_eq VAR_PETALBURG_GYM_STATE, 6, Common_EventScript_ReadyPetalburgGymForBattle setvar VAR_0x8008, 4 call Common_EventScript_SetGymTrainers setflag FLAG_HIDE_VERDANTURF_TOWN_WANDAS_HOUSE_WALLY @@ -87,8 +85,7 @@ LavaridgeTown_Gym_1F_EventScript_FlanneryDefeated:: LavaridgeTown_Gym_1F_EventScript_GiveOverheat2:: giveitem ITEM_TM50 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox LavaridgeTown_Gym_1F_Text_ExplainOverheat, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM50 release @@ -96,8 +93,7 @@ LavaridgeTown_Gym_1F_EventScript_GiveOverheat2:: LavaridgeTown_Gym_1F_EventScript_GiveOverheat:: giveitem ITEM_TM50 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox LavaridgeTown_Gym_1F_Text_ExplainOverheat, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM50 return @@ -109,15 +105,14 @@ LavaridgeTown_Gym_1F_EventScript_FlanneryRematch:: LavaridgeTown_Gym_1F_EventScript_Cole:: trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_COLE, LOCALID_COLE, LavaridgeTown_Gym_1F_Text_ColeIntro, LavaridgeTown_Gym_1F_Text_ColeDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript - msgbox LavaridgeTown_Gym_1F_Text_ColePostBattle MSGBOX_AUTOCLOSE + msgbox LavaridgeTown_Gym_1F_Text_ColePostBattle, MSGBOX_AUTOCLOSE end LavaridgeTown_Gym_EventScript_CheckTrainerScript:: call LavaridgeTown_Gym_1F_EventScript_SetTrainerTempVars release special ShouldTryGetTrainerScript - compare VAR_RESULT, 1 - goto_if_eq EventScript_GotoTrainerScript + goto_if_eq VAR_RESULT, 1, EventScript_GotoTrainerScript end LavaridgeTown_Gym_1F_EventScript_Axle:: diff --git a/data/maps/LavaridgeTown_HerbShop/scripts.inc b/data/maps/LavaridgeTown_HerbShop/scripts.inc index 2637f5c09d..dbe1b564ac 100644 --- a/data/maps/LavaridgeTown_HerbShop/scripts.inc +++ b/data/maps/LavaridgeTown_HerbShop/scripts.inc @@ -31,8 +31,7 @@ LavaridgeTown_HerbShop_EventScript_OldMan:: goto_if_set FLAG_RECEIVED_CHARCOAL, LavaridgeTown_HerbShop_EventScript_ExplainCharcoal msgbox LavaridgeTown_HerbShop_Text_YouveComeToLookAtHerbalMedicine, MSGBOX_DEFAULT giveitem ITEM_CHARCOAL - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_CHARCOAL release end diff --git a/data/maps/LavaridgeTown_House/scripts.inc b/data/maps/LavaridgeTown_House/scripts.inc index 58fd8ecb25..30f4e99ba4 100644 --- a/data/maps/LavaridgeTown_House/scripts.inc +++ b/data/maps/LavaridgeTown_House/scripts.inc @@ -9,7 +9,7 @@ LavaridgeTown_House_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox LavaridgeTown_House_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/LilycoveCity/scripts.inc b/data/maps/LilycoveCity/scripts.inc index 048cabacbc..094592d646 100644 --- a/data/maps/LilycoveCity/scripts.inc +++ b/data/maps/LilycoveCity/scripts.inc @@ -19,18 +19,18 @@ LilycoveCity_OnLoad: end LilycoveCity_EventScript_SetWailmerMetatiles:: - setmetatile 76, 12, METATILE_Lilycove_Wailmer0, 1 - setmetatile 77, 12, METATILE_Lilycove_Wailmer1, 1 - setmetatile 76, 13, METATILE_Lilycove_Wailmer2, 1 - setmetatile 77, 13, METATILE_Lilycove_Wailmer3, 1 - setmetatile 76, 14, METATILE_Lilycove_Wailmer0_Alt, 1 - setmetatile 77, 14, METATILE_Lilycove_Wailmer1_Alt, 1 - setmetatile 76, 15, METATILE_Lilycove_Wailmer2, 1 - setmetatile 77, 15, METATILE_Lilycove_Wailmer3, 1 - setmetatile 77, 16, METATILE_Lilycove_Wailmer0_Alt, 1 - setmetatile 78, 16, METATILE_Lilycove_Wailmer1_Alt, 1 - setmetatile 77, 17, METATILE_Lilycove_Wailmer2, 1 - setmetatile 78, 17, METATILE_Lilycove_Wailmer3, 1 + setmetatile 76, 12, METATILE_Lilycove_Wailmer0, TRUE + setmetatile 77, 12, METATILE_Lilycove_Wailmer1, TRUE + setmetatile 76, 13, METATILE_Lilycove_Wailmer2, TRUE + setmetatile 77, 13, METATILE_Lilycove_Wailmer3, TRUE + setmetatile 76, 14, METATILE_Lilycove_Wailmer0_Alt, TRUE + setmetatile 77, 14, METATILE_Lilycove_Wailmer1_Alt, TRUE + setmetatile 76, 15, METATILE_Lilycove_Wailmer2, TRUE + setmetatile 77, 15, METATILE_Lilycove_Wailmer3, TRUE + setmetatile 77, 16, METATILE_Lilycove_Wailmer0_Alt, TRUE + setmetatile 78, 16, METATILE_Lilycove_Wailmer1_Alt, TRUE + setmetatile 77, 17, METATILE_Lilycove_Wailmer2, TRUE + setmetatile 78, 17, METATILE_Lilycove_Wailmer3, TRUE return LilycoveCity_EventScript_BerryGentleman:: @@ -42,8 +42,7 @@ LilycoveCity_EventScript_BerryGentleman:: random 10 addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem VAR_RESULT - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_DAILY_LILYCOVE_RECEIVED_BERRY msgbox LilycoveCity_Text_BecauseYoureTrainer, MSGBOX_DEFAULT release @@ -234,18 +233,15 @@ LilycoveCity_EventScript_Rival:: lock faceplayer checkplayergender - compare VAR_RESULT, MALE - goto_if_eq LilycoveCity_EventScript_May - compare VAR_RESULT, FEMALE - goto_if_eq LilycoveCity_EventScript_Brendan + goto_if_eq VAR_RESULT, MALE, LilycoveCity_EventScript_May + goto_if_eq VAR_RESULT, FEMALE, LilycoveCity_EventScript_Brendan end LilycoveCity_EventScript_May:: playbgm MUS_ENCOUNTER_MAY, TRUE call_if_set FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE, LilycoveCity_EventScript_MayAskToBattleAgain call_if_unset FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE, LilycoveCity_EventScript_MayAskToBattle - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_EventScript_DeclineMayBattle + goto_if_eq VAR_RESULT, NO, LilycoveCity_EventScript_DeclineMayBattle msgbox LilycoveCity_Text_MayWontBeBeaten, MSGBOX_DEFAULT switch VAR_STARTER_MON case 0, LilycoveCity_EventScript_BattleMayTreecko @@ -273,8 +269,7 @@ LilycoveCity_EventScript_Brendan:: playbgm MUS_ENCOUNTER_BRENDAN, TRUE call_if_set FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE, LilycoveCity_EventScript_BrendanAskToBattleAgain call_if_unset FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE, LilycoveCity_EventScript_BrendanAskToBattle - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_EventScript_DeclineBrendanBattle + goto_if_eq VAR_RESULT, NO, LilycoveCity_EventScript_DeclineBrendanBattle msgbox LilycoveCity_Text_BrendanWontBeBeaten, MSGBOX_DEFAULT switch VAR_STARTER_MON case 0, LilycoveCity_EventScript_BattleBrendanTreecko @@ -332,10 +327,8 @@ LilycoveCity_EventScript_DefeatedMay:: msgbox LilycoveCity_Text_MayGoingBackToLittleroot, MSGBOX_DEFAULT setvar VAR_RESULT, FALSE call_if_set FLAG_BADGE06_GET, LilycoveCity_EventScript_CheckFinalBadge - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_EventScript_MayCollectBadges - compare VAR_RESULT, TRUE - call_if_eq LilycoveCity_EventScript_MayPokemonLeague + call_if_eq VAR_RESULT, FALSE, LilycoveCity_EventScript_MayCollectBadges + call_if_eq VAR_RESULT, TRUE, LilycoveCity_EventScript_MayPokemonLeague clearflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_BEDROOM clearflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_2F_PICHU_DOLL goto LilycoveCity_EventScript_RivalFlyAway @@ -366,10 +359,8 @@ LilycoveCity_EventScript_DefeatedBrendan:: msgbox LilycoveCity_Text_BrendanGoingBackToLittleroot, MSGBOX_DEFAULT setvar VAR_RESULT, FALSE call_if_set FLAG_BADGE06_GET, LilycoveCity_EventScript_CheckFinalBadge - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_EventScript_BrendanCollectBadges - compare VAR_RESULT, TRUE - call_if_eq LilycoveCity_EventScript_BrendanPokemonLeague + call_if_eq VAR_RESULT, FALSE, LilycoveCity_EventScript_BrendanCollectBadges + call_if_eq VAR_RESULT, TRUE, LilycoveCity_EventScript_BrendanPokemonLeague clearflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_BEDROOM clearflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F_SWABLU_DOLL goto LilycoveCity_EventScript_RivalFlyAway @@ -390,7 +381,7 @@ LilycoveCity_EventScript_BrendanBattleFrontier:: LilycoveCity_EventScript_RivalFlyAway:: closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 50 setfieldeffectargument 0, 1 @@ -408,10 +399,8 @@ LilycoveCity_EventScript_SchoolKidM:: lock faceplayer msgbox LilycoveCity_Text_DoYouKnowAboutBerryBlender, MSGBOX_YESNO - compare VAR_RESULT, YES - call_if_eq LilycoveCity_EventScript_KnowAboutBerryBlender - compare VAR_RESULT, NO - call_if_eq LilycoveCity_EventScript_DontKnowAboutBerryBlender + call_if_eq VAR_RESULT, YES, LilycoveCity_EventScript_KnowAboutBerryBlender + call_if_eq VAR_RESULT, NO, LilycoveCity_EventScript_DontKnowAboutBerryBlender release end diff --git a/data/maps/LilycoveCity_ContestLobby/scripts.inc b/data/maps/LilycoveCity_ContestLobby/scripts.inc index 48a8e6b926..fa884a0966 100644 --- a/data/maps/LilycoveCity_ContestLobby/scripts.inc +++ b/data/maps/LilycoveCity_ContestLobby/scripts.inc @@ -17,9 +17,8 @@ LilycoveCity_ContestLobby_OnTransition: end LilycoveCity_ContestLobby_EventScript_TryShowBlendMaster:: - getpricereduction POKENEWS_BLENDMASTER - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_ContestLobby_EventScript_ShowBlendMaster + getpokenewsactive POKENEWS_BLENDMASTER + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_ContestLobby_EventScript_ShowBlendMaster clearflag FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER_REPLACEMENT setflag FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER return @@ -52,10 +51,8 @@ LilycoveCity_ContestLobby_EventScript_ContestArtist:: showcontestpainting CONTEST_WINNER_ARTIST lockall msgbox LilycoveCity_ContestLobby_Text_ShouldITakePaintingToMuseum, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseum - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_ContestLobby_EventScript_ConfirmDontTakePainting + goto_if_eq VAR_RESULT, YES, LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseum + goto_if_eq VAR_RESULT, NO, LilycoveCity_ContestLobby_EventScript_ConfirmDontTakePainting releaseall end @@ -65,8 +62,7 @@ LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseum:: special SaveMuseumContestPainting setvar VAR_LILYCOVE_CONTEST_LOBBY_STATE, 0 specialvar VAR_RESULT, GiveMonArtistRibbon - compare VAR_RESULT, TRUE - call_if_eq LilycoveCity_ContestLobby_EventScript_ReceivedArtistRibbon + call_if_eq VAR_RESULT, TRUE, LilycoveCity_ContestLobby_EventScript_ReceivedArtistRibbon applymovement LOCALID_ARTIST, LilycoveCity_ContestLobby_Movement_ArtistExit waitmovement 0 removeobject LOCALID_ARTIST @@ -77,8 +73,7 @@ LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseum:: LilycoveCity_ContestLobby_EventScript_ConfirmDontTakePainting:: msgbox LilycoveCity_ContestLobby_Text_TakeHomeButIdLikeToTakeToMuseum, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseum + goto_if_eq VAR_RESULT, YES, LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseum msgbox LilycoveCity_ContestLobby_Text_FineThatsTheWayItIs, MSGBOX_DEFAULT closemessage applymovement LOCALID_ARTIST, LilycoveCity_ContestLobby_Movement_ArtistExit @@ -188,7 +183,7 @@ LilycoveCity_ContestLobby_Movement_ArtistExit: step_end LilycoveCity_ContestLobby_Movement_PlayerFaceArtist: - walk_in_place_fastest_left + walk_in_place_faster_left step_end LilycoveCity_ContestLobby_Movement_ArtistBeginToExit: @@ -205,7 +200,7 @@ LilycoveCity_ContestLobby_Movement_ArtistReturnToPlayer: walk_fast_up walk_fast_up walk_fast_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end LilycoveCity_ContestLobby_EventScript_TryDoLinkContestArtist:: @@ -225,10 +220,8 @@ LilycoveCity_ContestLobby_EventScript_LinkContestArtist:: fadescreen FADE_TO_BLACK showcontestpainting CONTEST_WINNER_ARTIST msgbox LilycoveCity_ContestLobby_Text_ShouldITakePaintingToMuseum, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseumLink - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_ContestLobby_EventScript_ConfirmDontTakePaintingLink + goto_if_eq VAR_RESULT, YES, LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseumLink + goto_if_eq VAR_RESULT, NO, LilycoveCity_ContestLobby_EventScript_ConfirmDontTakePaintingLink end LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseumLink:: @@ -237,8 +230,7 @@ LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseumLink:: special SaveMuseumContestPainting setvar VAR_LILYCOVE_CONTEST_LOBBY_STATE, 0 specialvar VAR_RESULT, GiveMonArtistRibbon - compare VAR_RESULT, TRUE - call_if_eq LilycoveCity_ContestLobby_EventScript_ReceivedLinkArtistRibbon + call_if_eq VAR_RESULT, TRUE, LilycoveCity_ContestLobby_EventScript_ReceivedLinkArtistRibbon applymovement LOCALID_ARTIST_LINK, LilycoveCity_ContestLobby_Movement_LinkArtistExit waitmovement 0 removeobject LOCALID_ARTIST_LINK @@ -249,8 +241,7 @@ LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseumLink:: LilycoveCity_ContestLobby_EventScript_ConfirmDontTakePaintingLink:: msgbox LilycoveCity_ContestLobby_Text_TakeHomeButIdLikeToTakeToMuseum, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseumLink + goto_if_eq VAR_RESULT, YES, LilycoveCity_ContestLobby_EventScript_TakePaintingToMuseumLink msgbox LilycoveCity_ContestLobby_Text_FineThatsTheWayItIs, MSGBOX_DEFAULT closemessage applymovement LOCALID_ARTIST_LINK, LilycoveCity_ContestLobby_Movement_LinkArtistExit @@ -303,7 +294,7 @@ LilycoveCity_ContestLobby_Movement_LinkArtistExit: step_end LilycoveCity_ContestLobby_Movement_PlayerFaceLinkArtist: - walk_in_place_fastest_right + walk_in_place_faster_right step_end LilycoveCity_ContestLobby_Movement_LinkArtistBeginExit: @@ -320,15 +311,14 @@ LilycoveCity_ContestLobby_Movement_LinkArtistReturnToPlayer: walk_fast_up walk_fast_up walk_fast_up - walk_in_place_fastest_left + walk_in_place_faster_left step_end @ EventScript_SpeakToContestReceptionist either ends or returns after a contest entry is submitted LilycoveCity_ContestLobby_EventScript_ContestReceptionist:: special ClearLinkContestFlags specialvar VAR_RESULT, IsContestDebugActive @ Always FALSE - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_ContestLobby_EventScript_SetDebug + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_ContestLobby_EventScript_SetDebug call LilycoveCity_ContestLobby_EventScript_SpeakToContestReceptionist call LilycoveCity_ContestLobby_EventScript_LeadToContestHall special SetContestTrainerGfxIds @@ -384,31 +374,31 @@ LilycoveCity_ContestLobby_EventScript_WarpToContestHall:: return LilycoveCity_ContestLobby_EventScript_WarpToCoolContestHall:: - setwarp MAP_CONTEST_HALL_COOL, 255, 7, 5 + setwarp MAP_CONTEST_HALL_COOL, 7, 5 special DoContestHallWarp waitstate return LilycoveCity_ContestLobby_EventScript_WarpToBeautyContestHall:: - setwarp MAP_CONTEST_HALL_BEAUTY, 255, 7, 5 + setwarp MAP_CONTEST_HALL_BEAUTY, 7, 5 special DoContestHallWarp waitstate return LilycoveCity_ContestLobby_EventScript_WarpToCuteContestHall:: - setwarp MAP_CONTEST_HALL_CUTE, 255, 7, 5 + setwarp MAP_CONTEST_HALL_CUTE, 7, 5 special DoContestHallWarp waitstate return LilycoveCity_ContestLobby_EventScript_WarpToSmartContestHall:: - setwarp MAP_CONTEST_HALL_SMART, 255, 7, 5 + setwarp MAP_CONTEST_HALL_SMART, 7, 5 special DoContestHallWarp waitstate return LilycoveCity_ContestLobby_EventScript_WarpToToughContestHall:: - setwarp MAP_CONTEST_HALL_TOUGH, 255, 7, 5 + setwarp MAP_CONTEST_HALL_TOUGH, 7, 5 special DoContestHallWarp waitstate return @@ -418,14 +408,14 @@ LilycoveCity_ContestLobby_EventScript_LeadToContestHall:: applymovement LOCALID_RECEPTIONIST, LilycoveCity_ContestLobby_Movement_ReceptionistApproachCounter waitmovement 0 playse SE_BRIDGE_WALK - setmetatile 12, 2, METATILE_Contest_WallShadow, 1 - setmetatile 12, 3, METATILE_Contest_FloorShadow, 1 + setmetatile 12, 2, METATILE_Contest_WallShadow, TRUE + setmetatile 12, 3, METATILE_Contest_FloorShadow, TRUE special DrawWholeMapView applymovement LOCALID_RECEPTIONIST, LilycoveCity_ContestLobby_Movement_ReceptionistExitCounter waitmovement 0 playse SE_BRIDGE_WALK - setmetatile 12, 2, METATILE_Contest_CounterFlap_Top, 1 - setmetatile 12, 3, METATILE_Contest_CounterFlap_Bottom, 1 + setmetatile 12, 2, METATILE_Contest_CounterFlap_Top, TRUE + setmetatile 12, 3, METATILE_Contest_CounterFlap_Bottom, TRUE special DrawWholeMapView delay 20 applymovement LOCALID_RECEPTIONIST, LilycoveCity_ContestLobby_Movement_ReceptionistFacePlayer @@ -453,20 +443,20 @@ LilycoveCity_ContestLobby_Movement_PlayerWalkToContestHall: step_end LilycoveCity_ContestLobby_Movement_PlayerApproachReceptionist: - walk_in_place_fastest_left + walk_in_place_faster_left walk_left step_end LilycoveCity_ContestLobby_Movement_ReceptionistApproachCounter: walk_left walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end LilycoveCity_ContestLobby_Movement_ReceptionistExitCounter: walk_down walk_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end LilycoveCity_ContestLobby_Movement_ReceptionistWalkToContestHall: @@ -481,7 +471,7 @@ LilycoveCity_ContestLobby_Movement_ReceptionistWalkToContestHall: step_end LilycoveCity_ContestLobby_Movement_ReceptionistFacePlayer: - walk_in_place_fastest_right + walk_in_place_faster_right step_end LilycoveCity_ContestLobby_EventScript_BlackBelt:: @@ -648,11 +638,9 @@ LilycoveCity_ContestLobby_EventScript_AskEnterLinkContest:: LilycoveCity_ContestLobby_EventScript_TryEnterLinkContest:: msgbox LilycoveCity_ContestLobby_Text_ProgressWillBeSaved, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkContest + goto_if_eq VAR_RESULT, NO, LilycoveCity_ContestLobby_EventScript_CancelLinkContest call Common_EventScript_SaveGame - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkContest + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_ContestLobby_EventScript_CancelLinkContest message LilycoveCity_ContestLobby_Text_WhichContestMode waitmessage specialvar VAR_TEMP_D, IsWirelessAdapterConnected @@ -671,8 +659,7 @@ LilycoveCity_ContestLobby_EventScript_EmeraldMode:: LilycoveCity_ContestLobby_EventScript_GlobalMode:: setvar VAR_TEMP_C, 1 - compare VAR_TEMP_D, 1 - goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkNoWirelessGMode + goto_if_eq VAR_TEMP_D, 1, LilycoveCity_ContestLobby_EventScript_CancelLinkNoWirelessGMode goto LilycoveCity_ContestLobby_EventScript_ChooseLinkContestType end @@ -724,19 +711,13 @@ LilycoveCity_ContestLobby_EventScript_ChooseLinkContestMon:: msgbox LilycoveCity_ContestLobby_Text_EnterWhichPokemon3, MSGBOX_DEFAULT setvar VAR_CONTEST_RANK, 0 choosecontestmon - compare VAR_0x8004, 255 - goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkContest + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, LilycoveCity_ContestLobby_EventScript_CancelLinkContest special TryEnterContestMon - compare VAR_RESULT, CANT_ENTER_CONTEST - goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkCantEnterLowRank - compare VAR_RESULT, CAN_ENTER_CONTEST_EQUAL_RANK - goto_if_eq LilycoveCity_ContestLobby_EventScript_EnterMonForLinkContest - compare VAR_RESULT, CAN_ENTER_CONTEST_HIGH_RANK - goto_if_eq LilycoveCity_ContestLobby_EventScript_EnterMonForLinkContest - compare VAR_RESULT, CANT_ENTER_CONTEST_EGG - goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkCantEnterEgg - compare VAR_RESULT, CANT_ENTER_CONTEST_FAINTED - goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkCantEnterFainted + goto_if_eq VAR_RESULT, CANT_ENTER_CONTEST, LilycoveCity_ContestLobby_EventScript_LinkCantEnterLowRank + goto_if_eq VAR_RESULT, CAN_ENTER_CONTEST_EQUAL_RANK, LilycoveCity_ContestLobby_EventScript_EnterMonForLinkContest + goto_if_eq VAR_RESULT, CAN_ENTER_CONTEST_HIGH_RANK, LilycoveCity_ContestLobby_EventScript_EnterMonForLinkContest + goto_if_eq VAR_RESULT, CANT_ENTER_CONTEST_EGG, LilycoveCity_ContestLobby_EventScript_LinkCantEnterEgg + goto_if_eq VAR_RESULT, CANT_ENTER_CONTEST_FAINTED, LilycoveCity_ContestLobby_EventScript_LinkCantEnterFainted end LilycoveCity_ContestLobby_EventScript_LinkCantEnterLowRank:: @@ -760,29 +741,19 @@ LilycoveCity_ContestLobby_EventScript_EnterMonForLinkContest:: end LilycoveCity_ContestLobby_EventScript_TrySetUpLinkContest:: - compare VAR_TEMP_D, 1 - goto_if_eq LilycoveCity_ContestLobby_EventScript_SetLinkGroupType - compare VAR_TEMP_D, 2 - goto_if_ge LilycoveCity_ContestLobby_EventScript_CancelLinkContest + goto_if_eq VAR_TEMP_D, 1, LilycoveCity_ContestLobby_EventScript_SetLinkGroupType + goto_if_ge VAR_TEMP_D, 2, LilycoveCity_ContestLobby_EventScript_CancelLinkContest message LilycoveCity_ContestLobby_Text_PleaseWaitBButtonCancel waitmessage copyvar VAR_0x8004, VAR_RESULT - compare VAR_TEMP_C, 0 - call_if_eq LilycoveCity_ContestLobby_EventScript_TryLinkEMode - compare VAR_TEMP_C, 1 - call_if_eq LilycoveCity_ContestLobby_EventScript_TryLinkGMode - compare VAR_TEMP_C, 2 - goto_if_ge LilycoveCity_ContestLobby_EventScript_CancelLinkContest - compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS - goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices - compare VAR_RESULT, LINKUP_DIFF_SELECTIONS - goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkContest - compare VAR_RESULT, LINKUP_CONNECTION_ERROR - goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkError - compare VAR_RESULT, LINKUP_FAILED_CONTEST_GMODE - goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkModeDifference + call_if_eq VAR_TEMP_C, 0, LilycoveCity_ContestLobby_EventScript_TryLinkEMode + call_if_eq VAR_TEMP_C, 1, LilycoveCity_ContestLobby_EventScript_TryLinkGMode + goto_if_ge VAR_TEMP_C, 2, LilycoveCity_ContestLobby_EventScript_CancelLinkContest + goto_if_eq VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS, LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices + goto_if_eq VAR_RESULT, LINKUP_DIFF_SELECTIONS, LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices + goto_if_eq VAR_RESULT, LINKUP_FAILED, LilycoveCity_ContestLobby_EventScript_CancelLinkContest + goto_if_eq VAR_RESULT, LINKUP_CONNECTION_ERROR, LilycoveCity_ContestLobby_EventScript_CancelLinkError + goto_if_eq VAR_RESULT, LINKUP_FAILED_CONTEST_GMODE, LilycoveCity_ContestLobby_EventScript_CancelLinkModeDifference messageinstant LilycoveCity_ContestLobby_Text_Transmitting contestlinktransfer switch VAR_0x8004 @@ -836,7 +807,7 @@ LilycoveCity_ContestLobby_EventScript_CancelLinkTransmissionError:: LilycoveCity_ContestLobby_EventScript_StartLinkContest:: special GetContestPlayerId addvar VAR_0x8004, 1 - buffernumberstring 1, VAR_0x8004 + buffernumberstring STR_VAR_2, VAR_0x8004 messageautoscroll LilycoveCity_ContestLobby_Text_YourMonIsEntryNumX waitmessage subvar VAR_0x8004, 1 @@ -849,16 +820,11 @@ LilycoveCity_ContestLobby_EventScript_StartLinkContest:: end LilycoveCity_ContestLobby_EventScript_SetLinkGroupType:: - compare VAR_CONTEST_CATEGORY, CONTEST_CATEGORY_COOL - call_if_eq LilycoveCity_ContestLobby_EventScript_SetLinkGroupCoolContest - compare VAR_CONTEST_CATEGORY, CONTEST_CATEGORY_BEAUTY - call_if_eq LilycoveCity_ContestLobby_EventScript_SetLinkGroupBeautyContest - compare VAR_CONTEST_CATEGORY, CONTEST_CATEGORY_CUTE - call_if_eq LilycoveCity_ContestLobby_EventScript_SetLinkGroupCuteContest - compare VAR_CONTEST_CATEGORY, CONTEST_CATEGORY_SMART - call_if_eq LilycoveCity_ContestLobby_EventScript_SetLinkGroupSmartContest - compare VAR_CONTEST_CATEGORY, CONTEST_CATEGORY_TOUGH - call_if_eq LilycoveCity_ContestLobby_EventScript_SetLinkGroupToughContest + call_if_eq VAR_CONTEST_CATEGORY, CONTEST_CATEGORY_COOL, LilycoveCity_ContestLobby_EventScript_SetLinkGroupCoolContest + call_if_eq VAR_CONTEST_CATEGORY, CONTEST_CATEGORY_BEAUTY, LilycoveCity_ContestLobby_EventScript_SetLinkGroupBeautyContest + call_if_eq VAR_CONTEST_CATEGORY, CONTEST_CATEGORY_CUTE, LilycoveCity_ContestLobby_EventScript_SetLinkGroupCuteContest + call_if_eq VAR_CONTEST_CATEGORY, CONTEST_CATEGORY_SMART, LilycoveCity_ContestLobby_EventScript_SetLinkGroupSmartContest + call_if_eq VAR_CONTEST_CATEGORY, CONTEST_CATEGORY_TOUGH, LilycoveCity_ContestLobby_EventScript_SetLinkGroupToughContest goto LilycoveCity_ContestLobby_EventScript_DecideLinkLeader end @@ -895,23 +861,17 @@ LilycoveCity_ContestLobby_EventScript_DecideLinkLeader:: LilycoveCity_ContestLobby_EventScript_TryLeadGroup:: call LilycoveCity_ContestLobby_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq LilycoveCity_ContestLobby_EventScript_TryLeadGroup + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided + goto_if_eq VAR_RESULT, LINKUP_FAILED, LilycoveCity_ContestLobby_EventScript_DecideLinkLeader + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, LilycoveCity_ContestLobby_EventScript_TryLeadGroup release end LilycoveCity_ContestLobby_EventScript_TryJoinGroup:: call LilycoveCity_ContestLobby_EventScript_TryJoinLinkGroup - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq LilycoveCity_ContestLobby_EventScript_TryJoinGroup + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided + goto_if_eq VAR_RESULT, LINKUP_FAILED, LilycoveCity_ContestLobby_EventScript_DecideLinkLeader + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, LilycoveCity_ContestLobby_EventScript_TryJoinGroup release end @@ -939,14 +899,14 @@ LilycoveCity_ContestLobby_EventScript_LeadToLinkContestHall:: applymovement LOCALID_LINK_RECEPTIONIST, LilycoveCity_ContestLobby_Movement_LinkReceptionistApproachCounter waitmovement 0 playse SE_BRIDGE_WALK - setmetatile 17, 2, METATILE_Contest_WallShadow, 1 - setmetatile 17, 3, METATILE_Contest_FloorShadow, 1 + setmetatile 17, 2, METATILE_Contest_WallShadow, TRUE + setmetatile 17, 3, METATILE_Contest_FloorShadow, TRUE special DrawWholeMapView applymovement LOCALID_LINK_RECEPTIONIST, LilycoveCity_ContestLobby_Movement_LinkReceptionistExitCounter waitmovement 0 playse SE_BRIDGE_WALK - setmetatile 17, 2, METATILE_Contest_CounterFlap_Top, 1 - setmetatile 17, 3, METATILE_Contest_CounterFlap_Bottom, 1 + setmetatile 17, 2, METATILE_Contest_CounterFlap_Top, TRUE + setmetatile 17, 3, METATILE_Contest_CounterFlap_Bottom, TRUE special DrawWholeMapView delay 20 applymovement LOCALID_LINK_RECEPTIONIST, LilycoveCity_ContestLobby_Movement_LinkReceptionistFacePlayer @@ -984,13 +944,13 @@ LilycoveCity_ContestLobby_Movement_PlayerApproachLinkReceptionist: LilycoveCity_ContestLobby_Movement_LinkReceptionistApproachCounter: walk_right walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end LilycoveCity_ContestLobby_Movement_LinkReceptionistExitCounter: walk_down walk_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end LilycoveCity_ContestLobby_Movement_LinkReceptionistWalkToContestHall: @@ -1006,7 +966,7 @@ LilycoveCity_ContestLobby_Movement_LinkReceptionistWalkToContestHall: step_end LilycoveCity_ContestLobby_Movement_LinkReceptionistFacePlayer: - walk_in_place_fastest_left + walk_in_place_faster_left step_end LilycoveCity_ContestLobby_EventScript_LittleGirl:: diff --git a/data/maps/LilycoveCity_CoveLilyMotel_1F/scripts.inc b/data/maps/LilycoveCity_CoveLilyMotel_1F/scripts.inc index 8ce2a97df2..796645f47f 100644 --- a/data/maps/LilycoveCity_CoveLilyMotel_1F/scripts.inc +++ b/data/maps/LilycoveCity_CoveLilyMotel_1F/scripts.inc @@ -46,7 +46,7 @@ LilycoveCity_CoveLilyMotel_1F_EventScript_BlockingTV:: waitmovement 0 applymovement LOCALID_OWNER, Common_Movement_Delay48 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox LilycoveCity_CoveLilyMotel_1F_Text_CantSeeTheTV, MSGBOX_DEFAULT closemessage diff --git a/data/maps/LilycoveCity_CoveLilyMotel_2F/scripts.inc b/data/maps/LilycoveCity_CoveLilyMotel_2F/scripts.inc index a5e8b40cf6..ca7481b533 100644 --- a/data/maps/LilycoveCity_CoveLilyMotel_2F/scripts.inc +++ b/data/maps/LilycoveCity_CoveLilyMotel_2F/scripts.inc @@ -7,8 +7,7 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_GameDesigner:: call_if_unset FLAG_TEMP_2, LilycoveCity_CoveLilyMotel_2F_EventScript_ShowMeCompletedDex call_if_set FLAG_TEMP_2, LilycoveCity_CoveLilyMotel_2F_EventScript_ShowDiploma specialvar VAR_RESULT, HasAllHoennMons - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_CoveLilyMotel_2F_EventScript_AllHoennMonsFanfare + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_CoveLilyMotel_2F_EventScript_AllHoennMonsFanfare release end diff --git a/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc b/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc index a7b062096f..d7d152408d 100644 --- a/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc @@ -59,9 +59,8 @@ LilycoveCity_DepartmentStoreElevator_EventScript_ChooseFloor:: LilycoveCity_DepartmentStoreElevator_EventScript_1stFloor:: setvar VAR_0x8006, DEPT_STORE_FLOORNUM_1F - setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F, 255, 2, 1 - compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_1F - goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect + setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F, 2, 1 + goto_if_eq VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_1F, LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect call LilycoveCity_DepartmentStoreElevator_EventScript_MoveElevator setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_1F goto LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect @@ -69,9 +68,8 @@ LilycoveCity_DepartmentStoreElevator_EventScript_1stFloor:: LilycoveCity_DepartmentStoreElevator_EventScript_2ndFloor:: setvar VAR_0x8006, DEPT_STORE_FLOORNUM_2F - setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F, 255, 2, 1 - compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_2F - goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect + setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F, 2, 1 + goto_if_eq VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_2F, LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect call LilycoveCity_DepartmentStoreElevator_EventScript_MoveElevator setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_2F goto LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect @@ -79,9 +77,8 @@ LilycoveCity_DepartmentStoreElevator_EventScript_2ndFloor:: LilycoveCity_DepartmentStoreElevator_EventScript_3rdFloor:: setvar VAR_0x8006, DEPT_STORE_FLOORNUM_3F - setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F, 255, 2, 1 - compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_3F - goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect + setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F, 2, 1 + goto_if_eq VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_3F, LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect call LilycoveCity_DepartmentStoreElevator_EventScript_MoveElevator setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_3F goto LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect @@ -89,9 +86,8 @@ LilycoveCity_DepartmentStoreElevator_EventScript_3rdFloor:: LilycoveCity_DepartmentStoreElevator_EventScript_4thFloor:: setvar VAR_0x8006, DEPT_STORE_FLOORNUM_4F - setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F, 255, 2, 1 - compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_4F - goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect + setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F, 2, 1 + goto_if_eq VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_4F, LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect call LilycoveCity_DepartmentStoreElevator_EventScript_MoveElevator setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_4F goto LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect @@ -99,9 +95,8 @@ LilycoveCity_DepartmentStoreElevator_EventScript_4thFloor:: LilycoveCity_DepartmentStoreElevator_EventScript_5thFloor:: setvar VAR_0x8006, DEPT_STORE_FLOORNUM_5F - setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F, 255, 2, 1 - compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_5F - goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect + setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F, 2, 1 + goto_if_eq VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_5F, LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect call LilycoveCity_DepartmentStoreElevator_EventScript_MoveElevator setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_5F goto LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect @@ -115,7 +110,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_ExitFloorSelect:: LilycoveCity_DepartmentStoreElevator_EventScript_MoveElevator:: special CloseDeptStoreElevatorWindow closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 waitse special MoveElevator diff --git a/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc b/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc index e91ca7745c..8c67ee1496 100644 --- a/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc @@ -3,11 +3,9 @@ LilycoveCity_DepartmentStoreRooftop_MapScripts:: .byte 0 LilycoveCity_DepartmentStoreRooftop_OnTransition: - getpricereduction POKENEWS_LILYCOVE - compare VAR_RESULT, TRUE - call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_ShowSaleWoman - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_HideSaleWoman + getpokenewsactive POKENEWS_LILYCOVE + call_if_eq VAR_RESULT, TRUE, LilycoveCity_DepartmentStoreRooftop_EventScript_ShowSaleWoman + call_if_eq VAR_RESULT, FALSE, LilycoveCity_DepartmentStoreRooftop_EventScript_HideSaleWoman end LilycoveCity_DepartmentStoreRooftop_EventScript_ShowSaleWoman:: @@ -51,9 +49,8 @@ LilycoveCity_DepartmentStoreRooftop_PokemartDecor_ClearOutSale: LilycoveCity_DepartmentStoreRooftop_EventScript_Man:: lock faceplayer - getpricereduction POKENEWS_LILYCOVE - compare VAR_RESULT, TRUE - call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_ManClearOutSale + getpokenewsactive POKENEWS_LILYCOVE + call_if_eq VAR_RESULT, TRUE, LilycoveCity_DepartmentStoreRooftop_EventScript_ManClearOutSale msgbox LilycoveCity_DepartmentStoreRooftop_Text_SetDatesForClearOutSales, MSGBOX_DEFAULT release end @@ -71,7 +68,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_VendingMachine:: lockall message LilycoveCity_DepartmentStoreRooftop_Text_WhichDrinkWouldYouLike waitmessage - showmoneybox 0, 0, 0 + showmoneybox 0, 0 goto LilycoveCity_DepartmentStoreRooftop_EventScript_ChooseDrink end @@ -102,78 +99,66 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_Lemonade:: end LilycoveCity_DepartmentStoreRooftop_EventScript_CheckMoneyFreshWater:: - checkmoney 200, 0 + checkmoney 200 return LilycoveCity_DepartmentStoreRooftop_EventScript_CheckMoneySodaPop:: - checkmoney 300, 0 + checkmoney 300 return LilycoveCity_DepartmentStoreRooftop_EventScript_CheckMoneyLemonade:: - checkmoney 350, 0 + checkmoney 350 return LilycoveCity_DepartmentStoreRooftop_EventScript_RemoveMoneyFreshWater:: - removemoney 200, 0 + removemoney 200 return LilycoveCity_DepartmentStoreRooftop_EventScript_RemoveMoneySodaPop:: - removemoney 300, 0 + removemoney 300 return LilycoveCity_DepartmentStoreRooftop_EventScript_RemoveMoneyLemonade:: - removemoney 350, 0 + removemoney 350 return LilycoveCity_DepartmentStoreRooftop_EventScript_TryBuyDrink:: - compare VAR_TEMP_1, 0 - call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_CheckMoneyFreshWater - compare VAR_TEMP_1, 1 - call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_CheckMoneySodaPop - compare VAR_TEMP_1, 2 - call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_CheckMoneyLemonade - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_NotEnoughMoneyForDrink - checkitemspace VAR_TEMP_0, 1 - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_NoRoomForDrink - compare VAR_TEMP_1, 0 - call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_RemoveMoneyFreshWater - compare VAR_TEMP_1, 1 - call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_RemoveMoneySodaPop - compare VAR_TEMP_1, 2 - call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_RemoveMoneyLemonade - updatemoneybox 0, 0 - bufferitemname 0, VAR_TEMP_0 + call_if_eq VAR_TEMP_1, 0, LilycoveCity_DepartmentStoreRooftop_EventScript_CheckMoneyFreshWater + call_if_eq VAR_TEMP_1, 1, LilycoveCity_DepartmentStoreRooftop_EventScript_CheckMoneySodaPop + call_if_eq VAR_TEMP_1, 2, LilycoveCity_DepartmentStoreRooftop_EventScript_CheckMoneyLemonade + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_DepartmentStoreRooftop_EventScript_NotEnoughMoneyForDrink + checkitemspace VAR_TEMP_0 + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_DepartmentStoreRooftop_EventScript_NoRoomForDrink + call_if_eq VAR_TEMP_1, 0, LilycoveCity_DepartmentStoreRooftop_EventScript_RemoveMoneyFreshWater + call_if_eq VAR_TEMP_1, 1, LilycoveCity_DepartmentStoreRooftop_EventScript_RemoveMoneySodaPop + call_if_eq VAR_TEMP_1, 2, LilycoveCity_DepartmentStoreRooftop_EventScript_RemoveMoneyLemonade + updatemoneybox + bufferitemname STR_VAR_1, VAR_TEMP_0 playse SE_VEND msgbox LilycoveCity_DepartmentStoreRooftop_Text_CanOfDrinkDroppedDown, MSGBOX_DEFAULT additem VAR_TEMP_0 - bufferitemname 1, VAR_TEMP_0 - bufferstdstring 2, STDSTRING_ITEMS + bufferitemname STR_VAR_2, VAR_TEMP_0 + bufferstdstring STR_VAR_3, STDSTRING_ITEMS msgbox gText_PutItemInPocket, MSGBOX_DEFAULT random 64 @ 1/64 chance of an additional drink dropping - compare VAR_RESULT, 0 - goto_if_ne LilycoveCity_DepartmentStoreRooftop_EventScript_ChooseNewDrink - checkitemspace VAR_TEMP_0, 1 - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_NoRoomForDrink + goto_if_ne VAR_RESULT, 0, LilycoveCity_DepartmentStoreRooftop_EventScript_ChooseNewDrink + checkitemspace VAR_TEMP_0 + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_DepartmentStoreRooftop_EventScript_NoRoomForDrink playse SE_VEND msgbox LilycoveCity_DepartmentStoreRooftop_Text_ExtraCanOfDrinkDroppedDown, MSGBOX_DEFAULT additem VAR_TEMP_0 - bufferitemname 1, VAR_TEMP_0 - bufferstdstring 2, STDSTRING_ITEMS + bufferitemname STR_VAR_2, VAR_TEMP_0 + bufferstdstring STR_VAR_3, STDSTRING_ITEMS msgbox gText_PutItemInPocket, MSGBOX_DEFAULT random 64 @ 1/64 * the prev 1/64 chance of a third additional drink dropping, ~ 0.02% chance - compare VAR_RESULT, 0 - goto_if_ne LilycoveCity_DepartmentStoreRooftop_EventScript_ChooseNewDrink - checkitemspace VAR_TEMP_0, 1 - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_NoRoomForDrink + goto_if_ne VAR_RESULT, 0, LilycoveCity_DepartmentStoreRooftop_EventScript_ChooseNewDrink + checkitemspace VAR_TEMP_0 + goto_if_eq VAR_RESULT, 0, LilycoveCity_DepartmentStoreRooftop_EventScript_NoRoomForDrink playse SE_VEND msgbox LilycoveCity_DepartmentStoreRooftop_Text_ExtraCanOfDrinkDroppedDown, MSGBOX_DEFAULT additem VAR_TEMP_0 - bufferitemname 1, VAR_TEMP_0 - bufferstdstring 2, STDSTRING_ITEMS + bufferitemname STR_VAR_2, VAR_TEMP_0 + bufferstdstring STR_VAR_3, STDSTRING_ITEMS msgbox gText_PutItemInPocket, MSGBOX_DEFAULT goto LilycoveCity_DepartmentStoreRooftop_EventScript_ChooseNewDrink end diff --git a/data/maps/LilycoveCity_DepartmentStore_1F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_1F/scripts.inc index e1167ad7ea..b0656cfd4a 100644 --- a/data/maps/LilycoveCity_DepartmentStore_1F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_1F/scripts.inc @@ -11,12 +11,10 @@ LilycoveCity_DepartmentStore_1F_EventScript_LotteryClerk:: lock faceplayer dotimebasedevents - compare VAR_POKELOT_PRIZE_ITEM, ITEM_NONE - goto_if_ne LilycoveCity_DepartmentStore_1F_EventScript_GivePrizeFromEarlier + goto_if_ne VAR_POKELOT_PRIZE_ITEM, ITEM_NONE, LilycoveCity_DepartmentStore_1F_EventScript_GivePrizeFromEarlier goto_if_set FLAG_DAILY_PICKED_LOTO_TICKET, LilycoveCity_DepartmentStore_1F_EventScript_ComeBackTomorrow msgbox LilycoveCity_DepartmentStore_1F_Text_LotteryCornerDrawTicket, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_PleaseVisitAgain + goto_if_eq VAR_RESULT, NO, LilycoveCity_DepartmentStore_1F_EventScript_PleaseVisitAgain setflag FLAG_DAILY_PICKED_LOTO_TICKET message LilycoveCity_DepartmentStore_1F_Text_PleasePickTicket waitmessage @@ -24,7 +22,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_LotteryClerk:: copyvar VAR_0x8008, VAR_RESULT special BufferLottoTicketNumber msgbox LilycoveCity_DepartmentStore_1F_Text_TicketNumberIsXPleaseWait, MSGBOX_DEFAULT - applymovement LOCALID_LOTTERY_CLERK, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_LOTTERY_CLERK, Common_Movement_WalkInPlaceFasterRight waitmovement 0 playse SE_PC_ON special DoLotteryCornerComputerEffect @@ -34,25 +32,17 @@ LilycoveCity_DepartmentStore_1F_EventScript_LotteryClerk:: delay 10 applymovement LOCALID_LOTTERY_CLERK, Common_Movement_FacePlayer waitmovement 0 - compare VAR_0x8004, 0 - goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_NoMatch + goto_if_eq VAR_0x8004, 0, LilycoveCity_DepartmentStore_1F_EventScript_NoMatch incrementgamestat GAME_STAT_WON_POKEMON_LOTTERY - compare VAR_0x8006, 0 - call_if_eq LilycoveCity_DepartmentStore_1F_EventScript_TicketMatchPartyMon - compare VAR_0x8006, 1 - call_if_eq LilycoveCity_DepartmentStore_1F_EventScript_TicketMatchPCMon - bufferitemname 0, VAR_0x8005 - compare VAR_0x8004, 1 - call_if_eq LilycoveCity_DepartmentStore_1F_EventScript_TwoDigitMatch - compare VAR_0x8004, 2 - call_if_eq LilycoveCity_DepartmentStore_1F_EventScript_ThreeDigitMatch - compare VAR_0x8004, 3 - call_if_eq LilycoveCity_DepartmentStore_1F_EventScript_FourDigitMatch - compare VAR_0x8004, 4 - call_if_eq LilycoveCity_DepartmentStore_1F_EventScript_FullMatch + call_if_eq VAR_0x8006, 0, LilycoveCity_DepartmentStore_1F_EventScript_TicketMatchPartyMon + call_if_eq VAR_0x8006, 1, LilycoveCity_DepartmentStore_1F_EventScript_TicketMatchPCMon + bufferitemname STR_VAR_1, VAR_0x8005 + call_if_eq VAR_0x8004, 1, LilycoveCity_DepartmentStore_1F_EventScript_TwoDigitMatch + call_if_eq VAR_0x8004, 2, LilycoveCity_DepartmentStore_1F_EventScript_ThreeDigitMatch + call_if_eq VAR_0x8004, 3, LilycoveCity_DepartmentStore_1F_EventScript_FourDigitMatch + call_if_eq VAR_0x8004, 4, LilycoveCity_DepartmentStore_1F_EventScript_FullMatch giveitem VAR_0x8005 - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_RecordPrizeNoRoom + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_DepartmentStore_1F_EventScript_RecordPrizeNoRoom special TryPutLotteryWinnerReportOnAir goto LilycoveCity_DepartmentStore_1F_EventScript_PleaseVisitAgain2 end @@ -115,8 +105,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_NoRoomForPrize:: LilycoveCity_DepartmentStore_1F_EventScript_GivePrizeFromEarlier:: msgbox LilycoveCity_DepartmentStore_1F_Text_PrizeWeveBeenHolding, MSGBOX_DEFAULT giveitem VAR_POKELOT_PRIZE_ITEM - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_NoRoomForPrize + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_DepartmentStore_1F_EventScript_NoRoomForPrize copyvar VAR_0x8004, VAR_POKELOT_PRIZE_PLACE copyvar VAR_0x8005, VAR_POKELOT_PRIZE_ITEM special TryPutLotteryWinnerReportOnAir @@ -141,7 +130,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_Azumarill:: lock faceplayer waitse - playmoncry SPECIES_AZUMARILL, 0 + playmoncry SPECIES_AZUMARILL, CRY_MODE_NORMAL msgbox LilycoveCity_DepartmentStore_1F_Text_Azumarill, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc index 20480068b8..9189df1f50 100644 --- a/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc @@ -36,9 +36,9 @@ LilycoveCity_DepartmentStore_3F_EventScript_ClerkRight:: .align 2 LilycoveCity_DepartmentStore_3F_Pokemart_StatBoosters: .2byte ITEM_X_SPEED - .2byte ITEM_X_SPECIAL + .2byte ITEM_X_SP_ATK .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_DIRE_HIT .2byte ITEM_GUARD_SPEC .2byte ITEM_X_ACCURACY diff --git a/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc index 374bd8df73..a9683d13c9 100644 --- a/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc @@ -33,7 +33,7 @@ LilycoveCity_DepartmentStore_5F_Pokemart_Dolls: .2byte DECOR_PIKACHU_DOLL .2byte DECOR_MARILL_DOLL .2byte DECOR_JIGGLYPUFF_DOLL - .2byte DECOR_DUSKULL_DOLL + .2byte DECOR_DUSKULL_DOLL .2byte DECOR_WYNAUT_DOLL .2byte DECOR_BALTOY_DOLL .2byte DECOR_KECLEON_DOLL @@ -129,10 +129,8 @@ LilycoveCity_DepartmentStore_5F_EventScript_Woman:: lockall applymovement LOCALID_WOMAN, Common_Movement_FacePlayer waitmovement 0 - compare VAR_SOOTOPOLIS_CITY_STATE, 0 - goto_if_eq LilycoveCity_DepartmentStore_5F_EventScript_WomanNormal - compare VAR_SOOTOPOLIS_CITY_STATE, 4 - goto_if_ge LilycoveCity_DepartmentStore_5F_EventScript_WomanNormal + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 0, LilycoveCity_DepartmentStore_5F_EventScript_WomanNormal + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 4, LilycoveCity_DepartmentStore_5F_EventScript_WomanNormal goto LilycoveCity_DepartmentStore_5F_EventScript_WomanLegendaryWeather end @@ -145,7 +143,7 @@ LilycoveCity_DepartmentStore_5F_EventScript_WomanNormal:: LilycoveCity_DepartmentStore_5F_EventScript_WomanLegendaryWeather:: msgbox LilycoveCity_DepartmentStore_5F_Text_ClosedRooftopForWeather, MSGBOX_DEFAULT closemessage - applymovement LOCALID_WOMAN, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_WOMAN, Common_Movement_WalkInPlaceFasterUp waitmovement 0 releaseall end diff --git a/data/maps/LilycoveCity_Harbor/scripts.inc b/data/maps/LilycoveCity_Harbor/scripts.inc index 8f7f7d15ca..63010dc4c7 100644 --- a/data/maps/LilycoveCity_Harbor/scripts.inc +++ b/data/maps/LilycoveCity_Harbor/scripts.inc @@ -8,7 +8,7 @@ LilycoveCity_Harbor_MapScripts:: .byte 0 LilycoveCity_Harbor_OnTransition: - setescapewarp MAP_LILYCOVE_CITY, 255, 12, 33 + setescapewarp MAP_LILYCOVE_CITY, 12, 33 end LilycoveCity_Harbor_EventScript_FerryAttendant:: @@ -21,25 +21,18 @@ LilycoveCity_Harbor_EventScript_FerryAttendant:: call LilycoveCity_Harbor_EventScript_GetMysticTicketState call LilycoveCity_Harbor_EventScript_GetFirstTimeShowingTicket call LilycoveCity_Harbor_EventScript_GetHasTicketsState - compare VAR_TEMP_C, 2 - goto_if_eq LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime - compare VAR_TEMP_B, 1 - goto_if_eq LilycoveCity_Harbor_EventScript_EonTicketFirstTime - compare VAR_TEMP_B, 2 - goto_if_eq LilycoveCity_Harbor_EventScript_AuroraTicketFirstTime - compare VAR_TEMP_B, 4 - goto_if_eq LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime - compare VAR_TEMP_B, 8 - goto_if_eq LilycoveCity_Harbor_EventScript_MysticTicketFirstTime - compare VAR_TEMP_B, 0 - goto_if_ne LilycoveCity_Harbor_EventScript_MultipleEventTicketsFirstTime + goto_if_eq VAR_TEMP_C, 2, LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime + goto_if_eq VAR_TEMP_B, 1, LilycoveCity_Harbor_EventScript_EonTicketFirstTime + goto_if_eq VAR_TEMP_B, 2, LilycoveCity_Harbor_EventScript_AuroraTicketFirstTime + goto_if_eq VAR_TEMP_B, 4, LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime + goto_if_eq VAR_TEMP_B, 8, LilycoveCity_Harbor_EventScript_MysticTicketFirstTime + goto_if_ne VAR_TEMP_B, 0, LilycoveCity_Harbor_EventScript_MultipleEventTicketsFirstTime goto LilycoveCity_Harbor_EventScript_NoFirstTimeEventTickets end @ First goto_if_eq is unnecessary; identical scripts LilycoveCity_Harbor_EventScript_NoFirstTimeEventTickets:: - compare VAR_TEMP_A, 0 - goto_if_eq LilycoveCity_Harbor_EventScript_NoEventTickets + goto_if_eq VAR_TEMP_A, 0, LilycoveCity_Harbor_EventScript_NoEventTickets msgbox LilycoveCity_Harbor_Text_MayISeeYourTicket, MSGBOX_DEFAULT message LilycoveCity_Harbor_Text_FlashTicketWhereTo waitmessage @@ -64,49 +57,47 @@ LilycoveCity_Harbor_EventScript_FerryRegularLocationSelect:: LilycoveCity_Harbor_EventScript_GoToSouthernIsland:: call LilycoveCity_Harbor_EventScript_BoardFerry - warp MAP_SOUTHERN_ISLAND_EXTERIOR, 255, 13, 22 + warp MAP_SOUTHERN_ISLAND_EXTERIOR, 13, 22 waitstate release end LilycoveCity_Harbor_EventScript_GoToNavelRock:: call LilycoveCity_Harbor_EventScript_BoardFerry - warp MAP_NAVEL_ROCK_HARBOR, 255, 8, 4 + warp MAP_NAVEL_ROCK_HARBOR, 8, 4 waitstate release end LilycoveCity_Harbor_EventScript_GoToBirthIsland:: call LilycoveCity_Harbor_EventScript_BoardFerry - warp MAP_BIRTH_ISLAND_HARBOR, 255, 8, 4 + warp MAP_BIRTH_ISLAND_HARBOR, 8, 4 waitstate release end LilycoveCity_Harbor_EventScript_GoToFarawayIsland:: call LilycoveCity_Harbor_EventScript_BoardFerry - warp MAP_FARAWAY_ISLAND_ENTRANCE, 255, 13, 38 + warp MAP_FARAWAY_ISLAND_ENTRANCE, 13, 38 waitstate release end LilycoveCity_Harbor_EventScript_GoToSlateport:: msgbox LilycoveCity_Harbor_Text_SlateportItIs, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind + goto_if_eq VAR_RESULT, NO, LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind setvar VAR_SS_TIDAL_STATE, SS_TIDAL_BOARD_LILYCOVE call LilycoveCity_Harbor_EventScript_BoardFerry - warp MAP_SS_TIDAL_CORRIDOR, 255, 1, 10 + warp MAP_SS_TIDAL_CORRIDOR, 1, 10 waitstate release end LilycoveCity_Harbor_EventScript_GoToBattleFrontier:: msgbox LilycoveCity_Harbor_Text_BattleFrontierItIs, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind + goto_if_eq VAR_RESULT, NO, LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind call LilycoveCity_Harbor_EventScript_BoardFerry - warp MAP_BATTLE_FRONTIER_OUTSIDE_WEST, 255, 19, 67 + warp MAP_BATTLE_FRONTIER_OUTSIDE_WEST, 19, 67 waitstate release end @@ -114,9 +105,8 @@ LilycoveCity_Harbor_EventScript_GoToBattleFrontier:: LilycoveCity_Harbor_EventScript_GetEonTicketState:: setvar VAR_TEMP_E, 0 goto_if_unset FLAG_ENABLE_SHIP_SOUTHERN_ISLAND, Common_EventScript_NopReturn - checkitem ITEM_EON_TICKET, 1 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_NopReturn + checkitem ITEM_EON_TICKET + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_NopReturn setvar VAR_TEMP_E, 1 goto_if_set FLAG_SHOWN_EON_TICKET, Common_EventScript_NopReturn setvar VAR_TEMP_E, 2 @@ -125,9 +115,8 @@ LilycoveCity_Harbor_EventScript_GetEonTicketState:: LilycoveCity_Harbor_EventScript_GetAuroraTicketState:: setvar VAR_TEMP_D, 0 goto_if_unset FLAG_ENABLE_SHIP_BIRTH_ISLAND, Common_EventScript_NopReturn - checkitem ITEM_AURORA_TICKET, 1 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_NopReturn + checkitem ITEM_AURORA_TICKET + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_NopReturn setvar VAR_TEMP_D, 1 goto_if_set FLAG_SHOWN_AURORA_TICKET, Common_EventScript_NopReturn setvar VAR_TEMP_D, 2 @@ -136,9 +125,8 @@ LilycoveCity_Harbor_EventScript_GetAuroraTicketState:: LilycoveCity_Harbor_EventScript_GetOldSeaMapState:: setvar VAR_TEMP_C, 0 goto_if_unset FLAG_ENABLE_SHIP_FARAWAY_ISLAND, Common_EventScript_NopReturn - checkitem ITEM_OLD_SEA_MAP, 1 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_NopReturn + checkitem ITEM_OLD_SEA_MAP + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_NopReturn setvar VAR_TEMP_C, 1 goto_if_set FLAG_SHOWN_OLD_SEA_MAP, Common_EventScript_NopReturn setvar VAR_TEMP_C, 2 @@ -147,9 +135,8 @@ LilycoveCity_Harbor_EventScript_GetOldSeaMapState:: LilycoveCity_Harbor_EventScript_GetMysticTicketState:: setvar VAR_TEMP_9, 0 goto_if_unset FLAG_ENABLE_SHIP_NAVEL_ROCK, Common_EventScript_NopReturn - checkitem ITEM_MYSTIC_TICKET, 1 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_NopReturn + checkitem ITEM_MYSTIC_TICKET + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_NopReturn setvar VAR_TEMP_9, 1 goto_if_set FLAG_SHOWN_MYSTIC_TICKET, Common_EventScript_NopReturn setvar VAR_TEMP_9, 2 @@ -157,14 +144,10 @@ LilycoveCity_Harbor_EventScript_GetMysticTicketState:: LilycoveCity_Harbor_EventScript_GetFirstTimeShowingTicket:: setvar VAR_TEMP_B, 0 - compare VAR_TEMP_E, 2 - call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingEonTicket - compare VAR_TEMP_D, 2 - call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingAuroraTicket - compare VAR_TEMP_C, 2 - call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingOldSeaMap - compare VAR_TEMP_9, 2 - call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingMysticTicket + call_if_eq VAR_TEMP_E, 2, LilycoveCity_Harbor_EventScript_SetFirstTimeShowingEonTicket + call_if_eq VAR_TEMP_D, 2, LilycoveCity_Harbor_EventScript_SetFirstTimeShowingAuroraTicket + call_if_eq VAR_TEMP_C, 2, LilycoveCity_Harbor_EventScript_SetFirstTimeShowingOldSeaMap + call_if_eq VAR_TEMP_9, 2, LilycoveCity_Harbor_EventScript_SetFirstTimeShowingMysticTicket return LilycoveCity_Harbor_EventScript_SetFirstTimeShowingEonTicket:: @@ -185,14 +168,10 @@ LilycoveCity_Harbor_EventScript_SetFirstTimeShowingMysticTicket:: LilycoveCity_Harbor_EventScript_GetHasTicketsState:: setvar VAR_TEMP_A, 0 - compare VAR_TEMP_E, 1 - call_if_eq LilycoveCity_Harbor_EventScript_SetHasEonTicket - compare VAR_TEMP_D, 1 - call_if_eq LilycoveCity_Harbor_EventScript_SetHasAuroraTicket - compare VAR_TEMP_C, 1 - call_if_eq LilycoveCity_Harbor_EventScript_SetHasOldSeaMap - compare VAR_TEMP_9, 1 - call_if_eq LilycoveCity_Harbor_EventScript_SetHasMysticTicket + call_if_eq VAR_TEMP_E, 1, LilycoveCity_Harbor_EventScript_SetHasEonTicket + call_if_eq VAR_TEMP_D, 1, LilycoveCity_Harbor_EventScript_SetHasAuroraTicket + call_if_eq VAR_TEMP_C, 1, LilycoveCity_Harbor_EventScript_SetHasOldSeaMap + call_if_eq VAR_TEMP_9, 1, LilycoveCity_Harbor_EventScript_SetHasMysticTicket return LilycoveCity_Harbor_EventScript_SetHasEonTicket:: @@ -223,7 +202,7 @@ LilycoveCity_Harbor_EventScript_EonTicketFirstTime:: LilycoveCity_Harbor_EventScript_GoToSouthernIslandFirstTime:: closemessage call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor - warp MAP_SOUTHERN_ISLAND_EXTERIOR, 255, 13, 22 + warp MAP_SOUTHERN_ISLAND_EXTERIOR, 13, 22 waitstate release end @@ -240,7 +219,7 @@ LilycoveCity_Harbor_EventScript_AuroraTicketFirstTime:: LilycoveCity_Harbor_EventScript_GoToBirthIslandFirstTime:: closemessage call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor - warp MAP_BIRTH_ISLAND_HARBOR, 255, 8, 4 + warp MAP_BIRTH_ISLAND_HARBOR, 8, 4 waitstate release end @@ -252,36 +231,28 @@ LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime:: call LilycoveCity_Harbor_EventScript_GetEventTicketSailor msgbox EventTicket_Text_OldSeaMapTooFar, MSGBOX_DEFAULT closemessage - applymovement LOCALID_FERRY_SAILOR, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_FERRY_SAILOR, Common_Movement_WalkInPlaceFasterUp waitmovement 0 playse SE_PIN applymovement LOCALID_FERRY_SAILOR, Common_Movement_ExclamationMark waitmovement 0 applymovement LOCALID_FERRY_SAILOR, Common_Movement_Delay48 waitmovement 0 - compare VAR_FACING, DIR_NORTH - call_if_eq LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayNorth - compare VAR_FACING, DIR_EAST - call_if_eq LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayEast + call_if_eq VAR_FACING, DIR_NORTH, LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayNorth + call_if_eq VAR_FACING, DIR_EAST, LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayEast addobject LOCALID_BRINEY - compare VAR_FACING, DIR_NORTH - call_if_eq LilycoveCity_Harbor_EventScript_BrineyFaceSailorNorth - compare VAR_FACING, DIR_EAST - call_if_eq LilycoveCity_Harbor_EventScript_BrineyFaceSailorEast + call_if_eq VAR_FACING, DIR_NORTH, LilycoveCity_Harbor_EventScript_BrineyFaceSailorNorth + call_if_eq VAR_FACING, DIR_EAST, LilycoveCity_Harbor_EventScript_BrineyFaceSailorEast msgbox EventTicket_Text_BrineyHoldOnASecond, MSGBOX_DEFAULT - compare VAR_FACING, DIR_NORTH - call_if_eq LilycoveCity_Harbor_EventScript_BrineyFacePlayerNorth - compare VAR_FACING, DIR_EAST - call_if_eq LilycoveCity_Harbor_EventScript_BrineyFacePlayerEast + call_if_eq VAR_FACING, DIR_NORTH, LilycoveCity_Harbor_EventScript_BrineyFacePlayerNorth + call_if_eq VAR_FACING, DIR_EAST, LilycoveCity_Harbor_EventScript_BrineyFacePlayerEast msgbox EventTicket_Text_BrineyLetsSail, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_NORTH - call_if_eq LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorNorth - compare VAR_FACING, DIR_EAST - call_if_eq LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorEast + call_if_eq VAR_FACING, DIR_NORTH, LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorNorth + call_if_eq VAR_FACING, DIR_EAST, LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorEast setvar VAR_0x8004, LOCALID_SS_TIDAL call Common_EventScript_FerryDepart - warp MAP_FARAWAY_ISLAND_ENTRANCE, 255, 13, 38 + warp MAP_FARAWAY_ISLAND_ENTRANCE, 13, 38 waitstate release end @@ -289,7 +260,7 @@ LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime:: LilycoveCity_Harbor_EventScript_GoToFarawayIslandFirstTime:: closemessage call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor - warp MAP_FARAWAY_ISLAND_ENTRANCE, 255, 13, 38 + warp MAP_FARAWAY_ISLAND_ENTRANCE, 13, 38 waitstate release end @@ -306,7 +277,7 @@ LilycoveCity_Harbor_EventScript_MysticTicketFirstTime:: LilycoveCity_Harbor_EventScript_GoToNavelRockFirstTime:: closemessage call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor - warp MAP_NAVEL_ROCK_HARBOR, 255, 8, 4 + warp MAP_NAVEL_ROCK_HARBOR, 8, 4 waitstate release end @@ -334,12 +305,12 @@ LilycoveCity_Harbor_EventScript_MultipleEventTicketsFirstTime:: LilycoveCity_Harbor_EventScript_ExitFirstTimeTicketSailSelect:: msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT closemessage - applymovement LOCALID_FERRY_SAILOR, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_FERRY_SAILOR, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 30 removeobject LOCALID_FERRY_SAILOR delay 30 - applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFasterDown waitmovement 0 showobjectat LOCALID_ATTENDANT, MAP_LILYCOVE_CITY_HARBOR delay 30 @@ -348,7 +319,7 @@ LilycoveCity_Harbor_EventScript_ExitFirstTimeTicketSailSelect:: end LilycoveCity_Harbor_EventScript_GetEventTicketSailor:: - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestUp + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 30 hideobjectat VAR_LAST_TALKED, MAP_LILYCOVE_CITY_HARBOR @@ -360,14 +331,12 @@ LilycoveCity_Harbor_EventScript_GetEventTicketSailor:: return LilycoveCity_Harbor_EventScript_BoardFerryWithSailor:: - applymovement LOCALID_FERRY_SAILOR, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_FERRY_SAILOR, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 30 removeobject LOCALID_FERRY_SAILOR - compare VAR_FACING, DIR_NORTH - call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth - compare VAR_FACING, DIR_EAST - call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast + call_if_eq VAR_FACING, DIR_NORTH, LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth + call_if_eq VAR_FACING, DIR_EAST, LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast delay 30 hideobjectat OBJ_EVENT_ID_PLAYER, 0 setvar VAR_0x8004, LOCALID_SS_TIDAL @@ -395,11 +364,10 @@ LilycoveCity_Harbor_EventScript_NoTicket:: @ Unused LilycoveCity_Harbor_EventScript_GoToSlateportUnused:: msgbox LilycoveCity_Harbor_Text_SlateportItIs, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind + goto_if_eq VAR_RESULT, NO, LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind setvar VAR_SS_TIDAL_STATE, SS_TIDAL_BOARD_LILYCOVE call LilycoveCity_Harbor_EventScript_BoardFerry - warp MAP_SS_TIDAL_CORRIDOR, 255, 1, 10 + warp MAP_SS_TIDAL_CORRIDOR, 1, 10 waitstate release end @@ -407,10 +375,9 @@ LilycoveCity_Harbor_EventScript_GoToSlateportUnused:: @ Unused LilycoveCity_Harbor_EventScript_GoToBattleFrontierUnused:: msgbox LilycoveCity_Harbor_Text_BattleFrontierItIs, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind + goto_if_eq VAR_RESULT, NO, LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind call LilycoveCity_Harbor_EventScript_BoardFerry - warp MAP_BATTLE_FRONTIER_OUTSIDE_WEST, 255, 19, 67 + warp MAP_BATTLE_FRONTIER_OUTSIDE_WEST, 19, 67 waitstate release end @@ -424,14 +391,12 @@ LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind:: LilycoveCity_Harbor_EventScript_BoardFerry:: msgbox LilycoveCity_Harbor_Text_PleaseBoard, MSGBOX_DEFAULT closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestUp + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 30 hideobjectat VAR_LAST_TALKED, MAP_LILYCOVE_CITY_HARBOR - compare VAR_FACING, DIR_NORTH - call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth - compare VAR_FACING, DIR_EAST - call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast + call_if_eq VAR_FACING, DIR_NORTH, LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth + call_if_eq VAR_FACING, DIR_EAST, LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast delay 30 hideobjectat OBJ_EVENT_ID_PLAYER, 0 setvar VAR_0x8004, LOCALID_SS_TIDAL @@ -455,7 +420,7 @@ LilycoveCity_Harbor_EventScript_ExitSailSelect:: LilycoveCity_Harbor_Movement_PlayerBoardFerryEast: walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end LilycoveCity_Harbor_Movement_PlayerBoardFerryNorth: @@ -490,7 +455,7 @@ LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayEast:: return LilycoveCity_Harbor_Movement_SailorOutOfWayNorth: - walk_in_place_fastest_right + walk_in_place_faster_right lock_facing_direction walk_left unlock_facing_direction @@ -503,22 +468,22 @@ LilycoveCity_Harbor_Movement_SailorOutOfWayEast: step_end LilycoveCity_Harbor_EventScript_BrineyFaceSailorNorth:: - applymovement LOCALID_BRINEY, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_BRINEY, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return LilycoveCity_Harbor_EventScript_BrineyFaceSailorEast:: - applymovement LOCALID_BRINEY, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_BRINEY, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return LilycoveCity_Harbor_EventScript_BrineyFacePlayerNorth:: - applymovement LOCALID_BRINEY, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_BRINEY, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return LilycoveCity_Harbor_EventScript_BrineyFacePlayerEast:: - applymovement LOCALID_BRINEY, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_BRINEY, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return @@ -537,7 +502,7 @@ LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorEast:: return LilycoveCity_Harbor_Movement_BrineyBoardFerry: - walk_in_place_fastest_up + walk_in_place_faster_up delay_8 set_invisible step_end @@ -554,7 +519,7 @@ LilycoveCity_Harbor_Movement_SailorBoardWithBrineyNorth: delay_16 delay_16 walk_right - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 set_invisible step_end @@ -562,7 +527,7 @@ LilycoveCity_Harbor_Movement_SailorBoardWithBrineyNorth: LilycoveCity_Harbor_Movement_PlayerBoardWithBrineyEast: delay_16 walk_right - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 set_invisible step_end diff --git a/data/maps/LilycoveCity_House1/scripts.inc b/data/maps/LilycoveCity_House1/scripts.inc index 34e9e6d90e..c2bd21cdc2 100644 --- a/data/maps/LilycoveCity_House1/scripts.inc +++ b/data/maps/LilycoveCity_House1/scripts.inc @@ -9,7 +9,7 @@ LilycoveCity_House1_EventScript_Kecleon:: lock faceplayer waitse - playmoncry SPECIES_KECLEON, 0 + playmoncry SPECIES_KECLEON, CRY_MODE_NORMAL msgbox LilycoveCity_House1_Text_Kecleon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/LilycoveCity_House2/scripts.inc b/data/maps/LilycoveCity_House2/scripts.inc index c7664c641f..965d82acfb 100644 --- a/data/maps/LilycoveCity_House2/scripts.inc +++ b/data/maps/LilycoveCity_House2/scripts.inc @@ -7,8 +7,7 @@ LilycoveCity_House2_EventScript_FatMan:: goto_if_set FLAG_RECEIVED_TM44, LilycoveCity_House2_EventScript_ReceivedRest msgbox LilycoveCity_House2_Text_NotAwakeYetHaveThis, MSGBOX_DEFAULT giveitem ITEM_TM44 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM44 msgbox LilycoveCity_House2_Text_SleepIsEssential, MSGBOX_DEFAULT release diff --git a/data/maps/LilycoveCity_House3/scripts.inc b/data/maps/LilycoveCity_House3/scripts.inc index de76c58b6b..57e6804732 100644 --- a/data/maps/LilycoveCity_House3/scripts.inc +++ b/data/maps/LilycoveCity_House3/scripts.inc @@ -11,8 +11,7 @@ LilycoveCity_House3_EventScript_PokefanF:: lock faceplayer msgbox LilycoveCity_House3_Text_LearnFromMasterOfPokeblocks, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_House3_EventScript_DeclinePokeblockLearn + goto_if_eq VAR_RESULT, NO, LilycoveCity_House3_EventScript_DeclinePokeblockLearn msgbox LilycoveCity_House3_Text_ExplainPokeblocks, MSGBOX_DEFAULT closemessage applymovement VAR_LAST_TALKED, Common_Movement_FaceOriginalDirection diff --git a/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc b/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc index e5d855633e..2d9d446f9d 100644 --- a/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc +++ b/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc @@ -14,10 +14,8 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_Curator:: message LilycoveCity_LilycoveMuseum_1F_Text_ImCuratorHaveYouViewedOurPaintings waitmessage multichoice 20, 8, MULTI_VIEWED_PAINTINGS, TRUE - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_SawPaintings - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_NotYet + goto_if_eq VAR_RESULT, 0, LilycoveCity_LilycoveMuseum_1F_EventScript_SawPaintings + goto_if_eq VAR_RESULT, 1, LilycoveCity_LilycoveMuseum_1F_EventScript_NotYet end LilycoveCity_LilycoveMuseum_1F_EventScript_NotYet:: @@ -26,10 +24,8 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_NotYet:: LilycoveCity_LilycoveMuseum_1F_EventScript_SawPaintings:: msgbox LilycoveCity_LilycoveMuseum_1F_Text_HaveYouAnInterestInPaintings, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_NotInterested - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_InterestedInPaintings + goto_if_eq VAR_RESULT, NO, LilycoveCity_LilycoveMuseum_1F_EventScript_NotInterested + goto_if_eq VAR_RESULT, YES, LilycoveCity_LilycoveMuseum_1F_EventScript_InterestedInPaintings end LilycoveCity_LilycoveMuseum_1F_EventScript_NotInterested:: @@ -52,7 +48,7 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_FollowCuratorNorth:: lockall applymovement OBJ_EVENT_ID_PLAYER, LilycoveCity_LilycoveMuseum_1F_Movement_FollowCuratorNorth waitmovement 0 - warp MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F, 255, 11, 8 + warp MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F, 11, 8 waitstate end @@ -60,7 +56,7 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_FollowCuratorWest:: lockall applymovement OBJ_EVENT_ID_PLAYER, LilycoveCity_LilycoveMuseum_1F_Movement_FollowCuratorWest waitmovement 0 - warp MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F, 255, 11, 8 + warp MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F, 11, 8 waitstate end @@ -68,7 +64,7 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_FollowCuratorEast:: lockall applymovement OBJ_EVENT_ID_PLAYER, LilycoveCity_LilycoveMuseum_1F_Movement_FollowCuratorEast waitmovement 0 - warp MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F, 255, 11, 8 + warp MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F, 11, 8 waitstate end diff --git a/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc b/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc index 27b59502cd..9212ca67df 100644 --- a/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc +++ b/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc @@ -30,32 +30,32 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_CheckToughPainting:: end LilycoveCity_LilycoveMuseum_2F_EventScript_SetCoolPainting:: - setmetatile 10, 6, METATILE_LilycoveMuseum_Painting2_Left, 1 - setmetatile 11, 6, METATILE_LilycoveMuseum_Painting2_Right, 1 + setmetatile 10, 6, METATILE_LilycoveMuseum_Painting2_Left, TRUE + setmetatile 11, 6, METATILE_LilycoveMuseum_Painting2_Right, TRUE goto LilycoveCity_LilycoveMuseum_2F_EventScript_CheckBeautyPainting end LilycoveCity_LilycoveMuseum_2F_EventScript_SetBeautyPainting:: - setmetatile 18, 6, METATILE_LilycoveMuseum_Painting1_Left, 1 - setmetatile 19, 6, METATILE_LilycoveMuseum_Painting1_Right, 1 + setmetatile 18, 6, METATILE_LilycoveMuseum_Painting1_Left, TRUE + setmetatile 19, 6, METATILE_LilycoveMuseum_Painting1_Right, TRUE goto LilycoveCity_LilycoveMuseum_2F_EventScript_CheckCutePainting end LilycoveCity_LilycoveMuseum_2F_EventScript_SetCutePainting:: - setmetatile 14, 10, METATILE_LilycoveMuseum_Painting3_Left, 1 - setmetatile 15, 10, METATILE_LilycoveMuseum_Painting3_Right, 1 + setmetatile 14, 10, METATILE_LilycoveMuseum_Painting3_Left, TRUE + setmetatile 15, 10, METATILE_LilycoveMuseum_Painting3_Right, TRUE goto LilycoveCity_LilycoveMuseum_2F_EventScript_CheckSmartPainting end LilycoveCity_LilycoveMuseum_2F_EventScript_SetSmartPainting:: - setmetatile 6, 10, METATILE_LilycoveMuseum_Painting0_Left, 1 - setmetatile 7, 10, METATILE_LilycoveMuseum_Painting0_Right, 1 + setmetatile 6, 10, METATILE_LilycoveMuseum_Painting0_Left, TRUE + setmetatile 7, 10, METATILE_LilycoveMuseum_Painting0_Right, TRUE goto LilycoveCity_LilycoveMuseum_2F_EventScript_CheckToughPainting end LilycoveCity_LilycoveMuseum_2F_EventScript_SetToughPainting:: - setmetatile 2, 6, METATILE_LilycoveMuseum_Painting4_Left, 1 - setmetatile 3, 6, METATILE_LilycoveMuseum_Painting4_Right, 1 + setmetatile 2, 6, METATILE_LilycoveMuseum_Painting4_Left, TRUE + setmetatile 3, 6, METATILE_LilycoveMuseum_Painting4_Right, TRUE end LilycoveCity_LilycoveMuseum_2F_OnFrame: @@ -83,7 +83,7 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_ShowExhibitHall:: end LilycoveCity_LilycoveMuseum_2F_Movement_PlayerWalkInPlaceLeft: - walk_in_place_fastest_left + walk_in_place_faster_left step_end LilycoveCity_LilycoveMuseum_2F_Movement_FaceExhibitHall: @@ -121,8 +121,7 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_GiveGlassOrnament:: applymovement LOCALID_CURATOR, Common_Movement_FacePlayer msgbox LilycoveCity_LilycoveMuseum_2F_Text_TokenOfGratitude, MSGBOX_DEFAULT givedecoration DECOR_GLASS_ORNAMENT - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_NoRoomForGlassOrnament + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_LilycoveMuseum_2F_EventScript_NoRoomForGlassOrnament setflag FLAG_RECEIVED_GLASS_ORNAMENT closemessage releaseall diff --git a/data/maps/LilycoveCity_MoveDeletersHouse/scripts.inc b/data/maps/LilycoveCity_MoveDeletersHouse/scripts.inc index ff340c9f33..db042653e1 100644 --- a/data/maps/LilycoveCity_MoveDeletersHouse/scripts.inc +++ b/data/maps/LilycoveCity_MoveDeletersHouse/scripts.inc @@ -18,20 +18,16 @@ LilycoveCity_MoveDeletersHouse_EventScript_ChooseMonAndMoveToForget:: msgbox LilycoveCity_MoveDeletersHouse_Text_WhichMonShouldForget, MSGBOX_DEFAULT special ChoosePartyMon waitstate - compare VAR_0x8004, 255 - goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_ComeAgain + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, LilycoveCity_MoveDeletersHouse_EventScript_ComeAgain special IsSelectedMonEgg - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_EggCantForgetMoves + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_MoveDeletersHouse_EventScript_EggCantForgetMoves special GetNumMovesSelectedMonHas - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_MonOnlyKnowsOneMove + goto_if_eq VAR_RESULT, 1, LilycoveCity_MoveDeletersHouse_EventScript_MonOnlyKnowsOneMove msgbox LilycoveCity_MoveDeletersHouse_Text_WhichMoveShouldBeForgotten, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK special MoveDeleterChooseMoveToForget fadescreen FADE_FROM_BLACK - compare VAR_0x8005, MAX_MON_MOVES - goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_ChooseMonAndMoveToForget + goto_if_eq VAR_0x8005, MAX_MON_MOVES, LilycoveCity_MoveDeletersHouse_EventScript_ChooseMonAndMoveToForget special BufferMoveDeleterNicknameAndMove msgbox LilycoveCity_MoveDeletersHouse_Text_MonsMoveShouldBeForgotten, MSGBOX_YESNO switch VAR_RESULT @@ -42,8 +38,7 @@ LilycoveCity_MoveDeletersHouse_EventScript_ChooseMonAndMoveToForget:: LilycoveCity_MoveDeletersHouse_EventScript_TryForgetMove:: special IsLastMonThatKnowsSurf - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_LastMonWithSurf + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_MoveDeletersHouse_EventScript_LastMonWithSurf special MoveDeleterForgetMove playfanfare MUS_MOVE_DELETED waitfanfare diff --git a/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc b/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc index 03f2657e71..a7f853afad 100644 --- a/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc +++ b/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc @@ -13,10 +13,8 @@ LilycoveCity_PokemonCenter_1F_OnTransition: @ SetLilycoveLadyGfx returns TRUE if its the Contest Lady LilycoveCity_PokemonCenter_1F_EventScript_SetLilycoveLadyGfx:: special SetLilycoveLadyGfx - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_HideContestLadyMon - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_ShowContestLadyMon + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_HideContestLadyMon + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonCenter_1F_EventScript_ShowContestLadyMon end LilycoveCity_PokemonCenter_1F_EventScript_HideContestLadyMon:: diff --git a/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc b/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc index 211073c581..ba8001324a 100644 --- a/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc +++ b/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc @@ -20,18 +20,18 @@ LilycoveCity_PokemonTrainerFanClub_OnFrame: LilycoveCity_PokemonTrainerFanClub_EventScript_MeetFirstFans:: lockall - applymovement LOCALID_LASS, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_LASS, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox LilycoveCity_PokemonTrainerFanClub_Text_OhWowItsPlayer, MSGBOX_DEFAULT applymovement LOCALID_LITTLE_GIRL, LilycoveCity_PokemonTrainerFanClub_Movement_LittleGirlWatchPlayer applymovement LOCALID_MAN, LilycoveCity_PokemonTrainerFanClub_Movement_FanApproachPlayer waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox LilycoveCity_PokemonTrainerFanClub_Text_HeardAboutYouImYourFan, MSGBOX_DEFAULT applymovement LOCALID_LITTLE_GIRL, LilycoveCity_PokemonTrainerFanClub_Movement_LittleGirlMoveCloserToPlayer waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 applymovement LOCALID_LITTLE_GIRL, LilycoveCity_PokemonTrainerFanClub_Movement_LittleGirlHideFromPlayer waitmovement 0 @@ -41,7 +41,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_MeetFirstFans:: LilycoveCity_PokemonTrainerFanClub_Movement_FanApproachPlayer: delay_8 - walk_in_place_fastest_down + walk_in_place_faster_down walk_down walk_down walk_down @@ -60,7 +60,7 @@ LilycoveCity_PokemonTrainerFanClub_Movement_LittleGirlWatchPlayer: LilycoveCity_PokemonTrainerFanClub_Movement_LittleGirlMoveCloserToPlayer: walk_down - walk_in_place_fastest_right + walk_in_place_faster_right step_end LilycoveCity_PokemonTrainerFanClub_Movement_LittleGirlHideFromPlayer: @@ -68,15 +68,13 @@ LilycoveCity_PokemonTrainerFanClub_Movement_LittleGirlHideFromPlayer: walk_fast_up walk_fast_up walk_fast_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end LilycoveCity_PokemonTrainerFanClub_OnTransition: call LilycoveCity_PokemonTrainerFanClub_EventScript_HideOrShowInterviewer - compare VAR_LILYCOVE_FAN_CLUB_STATE, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_SetFanMemberPositionsForFirstFanMeeting - compare VAR_LILYCOVE_FAN_CLUB_STATE, 2 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_UpdateFanMemberPositions + goto_if_eq VAR_LILYCOVE_FAN_CLUB_STATE, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_SetFanMemberPositionsForFirstFanMeeting + goto_if_eq VAR_LILYCOVE_FAN_CLUB_STATE, 2, LilycoveCity_PokemonTrainerFanClub_EventScript_UpdateFanMemberPositions end LilycoveCity_PokemonTrainerFanClub_EventScript_UpdateFanMemberPositions:: @@ -84,42 +82,33 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_UpdateFanMemberPositions:: call LilycoveCity_PokemonTrainerFanClub_EventScript_CheckSetUpTVShow setvar VAR_0x8004, FANCLUB_MEMBER1 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember1ToFarTable + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember1ToFarTable setvar VAR_0x8004, FANCLUB_MEMBER2 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember2ToFarTable + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember2ToFarTable setvar VAR_0x8004, FANCLUB_MEMBER3 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember3ToFarTable + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember3ToFarTable setvar VAR_0x8004, FANCLUB_MEMBER4 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember4ToFarTable + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember4ToFarTable setvar VAR_0x8004, FANCLUB_MEMBER5 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember5ToFarTable + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember5ToFarTable setvar VAR_0x8004, FANCLUB_MEMBER6 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember6ToFarTable + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember6ToFarTable setvar VAR_0x8004, FANCLUB_MEMBER7 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember7ToFarTable + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember7ToFarTable setvar VAR_0x8004, FANCLUB_MEMBER8 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember8ToFarTable + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_MoveMember8ToFarTable end LilycoveCity_PokemonTrainerFanClub_EventScript_HideOrShowInterviewer:: specialvar VAR_RESULT, ShouldHideFanClubInterviewer - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_HideInterviewer + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonTrainerFanClub_EventScript_HideInterviewer clearflag FLAG_HIDE_LILYCOVE_FAN_CLUB_INTERVIEWER clearflag FLAG_FAN_CLUB_STRENGTH_SHARED return @@ -134,38 +123,29 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_CheckSetUpTVShow:: setvar VAR_0x8005, NUM_TRAINER_FAN_CLUB_MEMBERS setvar VAR_0x8004, FANCLUB_MEMBER1 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan setvar VAR_0x8004, FANCLUB_MEMBER2 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan setvar VAR_0x8004, FANCLUB_MEMBER3 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan setvar VAR_0x8004, FANCLUB_MEMBER4 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan setvar VAR_0x8004, FANCLUB_MEMBER5 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan setvar VAR_0x8004, FANCLUB_MEMBER6 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan setvar VAR_0x8004, FANCLUB_MEMBER7 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan setvar VAR_0x8004, FANCLUB_MEMBER8 specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, FALSE - call_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan - compare VAR_0x8005, 5 - goto_if_ge LilycoveCity_PokemonTrainerFanClub_EventScript_TrySetUpTVShow + call_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan + goto_if_ge VAR_0x8005, 5, LilycoveCity_PokemonTrainerFanClub_EventScript_TrySetUpTVShow return LilycoveCity_PokemonTrainerFanClub_EventScript_CountNotPlayersFan:: @@ -222,22 +202,18 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_Man:: faceplayer setvar VAR_0x8004, FANCLUB_MEMBER6 special BufferFanClubTrainerName - compare VAR_LILYCOVE_FAN_CLUB_STATE, 0 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_ManPlayerNotChampion + goto_if_eq VAR_LILYCOVE_FAN_CLUB_STATE, 0, LilycoveCity_PokemonTrainerFanClub_EventScript_ManPlayerNotChampion specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_ManPlayersFan + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonTrainerFanClub_EventScript_ManPlayersFan specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1) - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_ManOnlyNonFan + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), LilycoveCity_PokemonTrainerFanClub_EventScript_ManOnlyNonFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_TrainersPowerIsOutOfTheOrdinary, MSGBOX_DEFAULT release end LilycoveCity_PokemonTrainerFanClub_EventScript_ManPlayersFan:: specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_ManOnlyFan + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_ManOnlyFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_YoureOneWeWantToWin, MSGBOX_DEFAULT release end @@ -262,22 +238,18 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_Lass:: faceplayer setvar VAR_0x8004, FANCLUB_MEMBER1 special BufferFanClubTrainerName - compare VAR_LILYCOVE_FAN_CLUB_STATE, 0 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_LassPlayerNotChampion + goto_if_eq VAR_LILYCOVE_FAN_CLUB_STATE, 0, LilycoveCity_PokemonTrainerFanClub_EventScript_LassPlayerNotChampion specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_LassPlayersFan + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonTrainerFanClub_EventScript_LassPlayersFan specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1) - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_LassOnlyNonFan + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), LilycoveCity_PokemonTrainerFanClub_EventScript_LassOnlyNonFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_ICantHelpLikingBrawly, MSGBOX_DEFAULT release end LilycoveCity_PokemonTrainerFanClub_EventScript_LassPlayersFan:: specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_LassOnlyFan + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_LassOnlyFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_ImPullingForYou, MSGBOX_DEFAULT release end @@ -302,22 +274,18 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_PokefanM:: faceplayer setvar VAR_0x8004, FANCLUB_MEMBER2 special BufferFanClubTrainerName - compare VAR_LILYCOVE_FAN_CLUB_STATE, 0 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_PokefanMPlayerNotChampion + goto_if_eq VAR_LILYCOVE_FAN_CLUB_STATE, 0, LilycoveCity_PokemonTrainerFanClub_EventScript_PokefanMPlayerNotChampion specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_PokefanMPlayersFan + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonTrainerFanClub_EventScript_PokefanMPlayersFan specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1) - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_PokefanMOnlyNonFan + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), LilycoveCity_PokemonTrainerFanClub_EventScript_PokefanMOnlyNonFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_LongWayToGoComparedToNorman, MSGBOX_DEFAULT release end LilycoveCity_PokemonTrainerFanClub_EventScript_PokefanMPlayersFan:: specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_PokefanMOnlyFan + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_PokefanMOnlyFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_YouveSurpassedYourFather, MSGBOX_DEFAULT release end @@ -342,22 +310,18 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_LittleGirl:: faceplayer setvar VAR_0x8004, FANCLUB_MEMBER3 special BufferFanClubTrainerName - compare VAR_LILYCOVE_FAN_CLUB_STATE, 0 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_LittleGirlPlayerNotChampion + goto_if_eq VAR_LILYCOVE_FAN_CLUB_STATE, 0, LilycoveCity_PokemonTrainerFanClub_EventScript_LittleGirlPlayerNotChampion specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_LittleGirlPlayersFan + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonTrainerFanClub_EventScript_LittleGirlPlayersFan specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1) - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_LittleGirlOnlyNonFan + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), LilycoveCity_PokemonTrainerFanClub_EventScript_LittleGirlOnlyNonFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_EveryoneThinksTrainerIsCool, MSGBOX_DEFAULT release end LilycoveCity_PokemonTrainerFanClub_EventScript_LittleGirlPlayersFan:: specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_LittleGirlOnlyFan + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_LittleGirlOnlyFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_OhWoweeItsPlayer, MSGBOX_DEFAULT release end @@ -383,19 +347,16 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_NinjaBoy:: setvar VAR_0x8004, FANCLUB_MEMBER4 special BufferFanClubTrainerName specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_NinjaBoyPlayersFan + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonTrainerFanClub_EventScript_NinjaBoyPlayersFan specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1) - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_NinjaBoyOnlyNonFan + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), LilycoveCity_PokemonTrainerFanClub_EventScript_NinjaBoyOnlyNonFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_TrainerIsWickedlyCool, MSGBOX_DEFAULT release end LilycoveCity_PokemonTrainerFanClub_EventScript_NinjaBoyPlayersFan:: specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_NinjaBoyOnlyFan + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_NinjaBoyOnlyFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_WantToBeStrongLikeYou, MSGBOX_DEFAULT release end @@ -416,19 +377,16 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_Boy:: setvar VAR_0x8004, FANCLUB_MEMBER5 special BufferFanClubTrainerName specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_BoyPlayersFan + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonTrainerFanClub_EventScript_BoyPlayersFan specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1) - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_BoyOnlyNonFan + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), LilycoveCity_PokemonTrainerFanClub_EventScript_BoyOnlyNonFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_ThinkTrainerIsNumberOne, MSGBOX_DEFAULT release end LilycoveCity_PokemonTrainerFanClub_EventScript_BoyPlayersFan:: specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_BoyOnlyFan + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_BoyOnlyFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_YoureAmazingAfterAll, MSGBOX_DEFAULT release end @@ -449,19 +407,16 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_Woman:: setvar VAR_0x8004, FANCLUB_MEMBER7 special BufferFanClubTrainerName specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_WomanPlayersFan + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonTrainerFanClub_EventScript_WomanPlayersFan specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1) - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_WomanOnlyNonFan + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), LilycoveCity_PokemonTrainerFanClub_EventScript_WomanOnlyNonFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_TrainerIsStandout, MSGBOX_DEFAULT release end LilycoveCity_PokemonTrainerFanClub_EventScript_WomanPlayersFan:: specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_WomanOnlyFan + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_WomanOnlyFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_YouChangedMyMind, MSGBOX_DEFAULT release end @@ -482,19 +437,16 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_ExpertF:: setvar VAR_0x8004, FANCLUB_MEMBER8 special BufferFanClubTrainerName specialvar VAR_RESULT, IsFanClubMemberFanOfPlayer - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_ExpertFPlayersFan + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonTrainerFanClub_EventScript_ExpertFPlayersFan specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1) - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_ExpertFOnlyNonFan + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), LilycoveCity_PokemonTrainerFanClub_EventScript_ExpertFOnlyNonFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_HaventRealizedPotential, MSGBOX_DEFAULT release end LilycoveCity_PokemonTrainerFanClub_EventScript_ExpertFPlayersFan:: specialvar VAR_RESULT, GetNumFansOfPlayerInTrainerFanClub - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_ExpertFOnlyFan + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_ExpertFOnlyFan msgbox LilycoveCity_PokemonTrainerFanClub_Text_YouImpressive, MSGBOX_DEFAULT release end @@ -521,8 +473,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_Interviewer:: LilycoveCity_PokemonTrainerFanClub_EventScript_Interview:: setvar VAR_0x8005, TVSHOW_FAN_CLUB_SPECIAL special InterviewBefore - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_AlreadyInterviewed2 + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonTrainerFanClub_EventScript_AlreadyInterviewed2 copyvar VAR_0x800A, VAR_0x8006 setvar VAR_0x8004, FANCLUB_MEMBER1 special BufferFanClubTrainerName @@ -532,10 +483,8 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_Interview:: call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_SubmitOpinion - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_CancelGiveOpinion + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_SubmitOpinion + goto_if_eq VAR_RESULT, 0, LilycoveCity_PokemonTrainerFanClub_EventScript_CancelGiveOpinion end LilycoveCity_PokemonTrainerFanClub_EventScript_SubmitOpinion:: @@ -547,10 +496,8 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_CancelGiveOpinion:: setvar VAR_0x8004, FANCLUB_MEMBER1 special BufferFanClubTrainerName msgbox LilycoveCity_PokemonTrainerFanClub_Text_HaveYouForgottenTrainer, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_ForgetTrainer - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_AskForOpinion + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonTrainerFanClub_EventScript_ForgetTrainer + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonTrainerFanClub_EventScript_AskForOpinion end LilycoveCity_PokemonTrainerFanClub_EventScript_AskForOpinion:: @@ -562,10 +509,8 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_AskForOpinion:: call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_SubmitOpinion - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_CancelGiveOpinion + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonTrainerFanClub_EventScript_SubmitOpinion + goto_if_eq VAR_RESULT, 0, LilycoveCity_PokemonTrainerFanClub_EventScript_CancelGiveOpinion end LilycoveCity_PokemonTrainerFanClub_EventScript_RateTrainer:: @@ -592,10 +537,8 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_CancelRateTrainer:: setvar VAR_0x8004, FANCLUB_MEMBER1 special BufferFanClubTrainerName msgbox LilycoveCity_PokemonTrainerFanClub_Text_HaveYouForgottenTrainer2, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_ForgetTrainer - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_RateTrainer + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonTrainerFanClub_EventScript_ForgetTrainer + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonTrainerFanClub_EventScript_RateTrainer end LilycoveCity_PokemonTrainerFanClub_EventScript_ForgetTrainer:: diff --git a/data/maps/LittlerootTown/scripts.inc b/data/maps/LittlerootTown/scripts.inc index 2d74a26183..69961bf362 100644 --- a/data/maps/LittlerootTown/scripts.inc +++ b/data/maps/LittlerootTown/scripts.inc @@ -42,23 +42,15 @@ LittlerootTown_MapScripts:: LittlerootTown_OnTransition: setflag FLAG_VISITED_LITTLEROOT_TOWN call Common_EventScript_SetupRivalGfxId - compare VAR_LITTLEROOT_INTRO_STATE, 2 - call_if_eq LittlerootTown_EventScript_MoveMomToMaysDoor + call_if_eq VAR_LITTLEROOT_INTRO_STATE, 2, LittlerootTown_EventScript_MoveMomToMaysDoor call_if_unset FLAG_RESCUED_BIRCH, LittlerootTown_EventScript_SetTwinPos - compare VAR_LITTLEROOT_TOWN_STATE, 3 - call_if_eq LittlerootTown_EventScript_SetMomStandingInFrontOfDoorPos - compare VAR_LITTLEROOT_HOUSES_STATE_MAY, 4 - call_if_eq LittlerootTown_EventScript_SetExitedHouseAfterLatiSSTicketEvent - compare VAR_LITTLEROOT_HOUSES_STATE_BRENDAN, 4 - call_if_eq LittlerootTown_EventScript_SetExitedHouseAfterLatiSSTicketEvent - compare VAR_OLDALE_RIVAL_STATE, 1 - call_if_eq LittlerootTown_EventScript_MoveRivalFromOldale - compare VAR_LITTLEROOT_RIVAL_STATE, 3 - call_if_eq LittlerootTown_EventScript_SetRivalLeftForRoute103 - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 1 - call_if_eq LittlerootTown_EventScript_HideMapNamePopup - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 - call_if_eq LittlerootTown_EventScript_LeftLabAfterDexUpgrade + call_if_eq VAR_LITTLEROOT_TOWN_STATE, 3, LittlerootTown_EventScript_SetMomStandingInFrontOfDoorPos + call_if_eq VAR_LITTLEROOT_HOUSES_STATE_MAY, 4, LittlerootTown_EventScript_SetExitedHouseAfterLatiSSTicketEvent + call_if_eq VAR_LITTLEROOT_HOUSES_STATE_BRENDAN, 4, LittlerootTown_EventScript_SetExitedHouseAfterLatiSSTicketEvent + call_if_eq VAR_OLDALE_RIVAL_STATE, 1, LittlerootTown_EventScript_MoveRivalFromOldale + call_if_eq VAR_LITTLEROOT_RIVAL_STATE, 3, LittlerootTown_EventScript_SetRivalLeftForRoute103 + call_if_eq VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 1, LittlerootTown_EventScript_HideMapNamePopup + call_if_eq VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2, LittlerootTown_EventScript_LeftLabAfterDexUpgrade end LittlerootTown_EventScript_LeftLabAfterDexUpgrade:: @@ -88,8 +80,7 @@ LittlerootTown_EventScript_MoveMomToMaysDoor:: return LittlerootTown_EventScript_SetTwinPos:: - compare VAR_LITTLEROOT_TOWN_STATE, 0 - goto_if_eq LittlerootTown_EventScript_SetTwinGuardingRoutePos + goto_if_eq VAR_LITTLEROOT_TOWN_STATE, 0, LittlerootTown_EventScript_SetTwinGuardingRoutePos setobjectxyperm LOCALID_TWIN, 10, 1 setobjectmovementtype LOCALID_TWIN, MOVEMENT_TYPE_FACE_UP return @@ -103,10 +94,8 @@ LittlerootTown_EventScript_SetMomStandingInFrontOfDoorPos:: clearflag FLAG_HIDE_LITTLEROOT_TOWN_MOM_OUTSIDE setobjectmovementtype LOCALID_MOM, MOVEMENT_TYPE_FACE_DOWN checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_EventScript_SetMomInFrontOfDoorMale - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_EventScript_SetMomInFrontOfDoorFemale + call_if_eq VAR_RESULT, MALE, LittlerootTown_EventScript_SetMomInFrontOfDoorMale + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_EventScript_SetMomInFrontOfDoorFemale return LittlerootTown_EventScript_SetMomInFrontOfDoorMale:: @@ -129,7 +118,7 @@ LittlerootTown_EventScript_StepOffTruckMale:: setvar VAR_0x8005, 8 call LittlerootTown_EventScript_GoInsideWithMom setflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_TRUCK - warpsilent MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F, 255, 8, 8 + warpsilent MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F, 8, 8 waitstate releaseall end @@ -140,7 +129,7 @@ LittlerootTown_EventScript_StepOffTruckFemale:: setvar VAR_0x8005, 8 call LittlerootTown_EventScript_GoInsideWithMom setflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_TRUCK - warpsilent MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F, 255, 2, 8 + warpsilent MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F, 2, 8 waitstate releaseall end @@ -185,7 +174,7 @@ LittlerootTown_Movement_MomExitHouse: LittlerootTown_Movement_MomApproachPlayerAtTruck: walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end LittlerootTown_Movement_MomApproachDoor: @@ -203,7 +192,7 @@ LittlerootTown_Movement_PlayerApproachDoor: delay_16 delay_8 walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_Movement_PlayerEnterHouse: @@ -230,7 +219,7 @@ LittlerootTown_EventScript_BeginDexUpgradeScene:: clearflag FLAG_HIDE_LITTLEROOT_TOWN_BIRCH delay 20 clearflag FLAG_HIDE_MAP_NAME_POPUP - warp MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB, 255, 6, 5 + warp MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB, 6, 5 waitstate releaseall end @@ -243,8 +232,7 @@ LittlerootTown_EventScript_SetRivalBirchPosForDexUpgrade:: addobject LOCALID_BIRCH addobject LOCALID_RIVAL checkplayergender - compare VAR_RESULT, MALE - goto_if_eq LittlerootTown_EventScript_SetRivalBirchPosForDexUpgradeMale + goto_if_eq VAR_RESULT, MALE, LittlerootTown_EventScript_SetRivalBirchPosForDexUpgradeMale goto LittlerootTown_EventScript_SetRivalBirchPosForDexUpgradeFemale end @@ -271,8 +259,7 @@ LittlerootTown_EventScript_Twin:: faceplayer goto_if_set FLAG_ADVENTURE_STARTED, LittlerootTown_EventScript_GoodLuck goto_if_set FLAG_RESCUED_BIRCH, LittlerootTown_EventScript_YouSavedBirch - compare VAR_LITTLEROOT_TOWN_STATE, 0 - goto_if_ne LittlerootTown_EventScript_GoSaveBirch + goto_if_ne VAR_LITTLEROOT_TOWN_STATE, 0, LittlerootTown_EventScript_GoSaveBirch msgbox LittlerootTown_Text_IfYouGoInGrassPokemonWillJumpOut, MSGBOX_DEFAULT release end @@ -347,7 +334,7 @@ LittlerootTown_Movement_TwinReturnLeft: walk_left walk_left walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end LittlerootTown_Movement_PushPlayerBackFromRoute: @@ -387,14 +374,14 @@ LittlerootTown_Movement_TwinReturnRight: walk_left walk_left walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end LittlerootTown_EventScript_GoSaveBirchTrigger:: lockall - applymovement LOCALID_TWIN, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_TWIN, Common_Movement_WalkInPlaceFasterRight waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 special GetPlayerBigGuyGirlString msgbox LittlerootTown_Text_CanYouGoSeeWhatsHappening, MSGBOX_DEFAULT @@ -416,10 +403,8 @@ LittlerootTown_EventScript_BirchsLabSign:: LittlerootTown_EventScript_BrendansHouseSign:: lockall checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_EventScript_PlayersHouseSignMale - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_EventScript_BirchsHouseSignFemale + call_if_eq VAR_RESULT, MALE, LittlerootTown_EventScript_PlayersHouseSignMale + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_EventScript_BirchsHouseSignFemale releaseall end @@ -434,10 +419,8 @@ LittlerootTown_EventScript_BirchsHouseSignFemale:: LittlerootTown_EventScript_MaysHouseSign:: lockall checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_EventScript_BirchsHouseSignMale - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_EventScript_PlayersHouseSignFemale + call_if_eq VAR_RESULT, MALE, LittlerootTown_EventScript_BirchsHouseSignMale + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_EventScript_PlayersHouseSignFemale releaseall end @@ -489,28 +472,20 @@ LittlerootTown_EventScript_GiveRunningShoesTrigger5:: LittlerootTown_EventScript_GiveRunningShoesTrigger:: checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_EventScript_MomNoticePlayerMale - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_EventScript_MomNoticePlayerFemale + call_if_eq VAR_RESULT, MALE, LittlerootTown_EventScript_MomNoticePlayerMale + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_EventScript_MomNoticePlayerFemale checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_EventScript_SetHomeDoorCoordsMale - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_EventScript_SetHomeDoorCoordsFemale + call_if_eq VAR_RESULT, MALE, LittlerootTown_EventScript_SetHomeDoorCoordsMale + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_EventScript_SetHomeDoorCoordsFemale msgbox LittlerootTown_Text_WaitPlayer, MSGBOX_DEFAULT closemessage checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_EventScript_MomApproachPlayerMale - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_EventScript_MomApproachPlayerFemale + call_if_eq VAR_RESULT, MALE, LittlerootTown_EventScript_MomApproachPlayerMale + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_EventScript_MomApproachPlayerFemale call LittlerootTown_EventScript_GiveRunningShoes checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_EventScript_MomReturnHomeMale - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_EventScript_MomReturnHomeFemale + call_if_eq VAR_RESULT, MALE, LittlerootTown_EventScript_MomReturnHomeMale + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_EventScript_MomReturnHomeFemale goto LittlerootTown_EventScript_SetReceivedRunningShoes end @@ -525,143 +500,119 @@ LittlerootTown_EventScript_SetHomeDoorCoordsFemale:: return LittlerootTown_EventScript_MomNoticePlayerMale:: - applymovement LOCALID_MOM, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_MOM, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return LittlerootTown_EventScript_MomNoticePlayerFemale:: - applymovement LOCALID_MOM, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_MOM, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return LittlerootTown_EventScript_MomApproachPlayerMale:: - compare VAR_0x8008, 0 - call_if_eq LittlerootTown_EventScript_MomApproachPlayer0 - compare VAR_0x8008, 1 - call_if_eq LittlerootTown_EventScript_MomApproachPlayer1 - compare VAR_0x8008, 2 - call_if_eq LittlerootTown_EventScript_MomApproachPlayerMale2 - compare VAR_0x8008, 3 - call_if_eq LittlerootTown_EventScript_MomApproachPlayerMale3 - compare VAR_0x8008, 4 - call_if_eq LittlerootTown_EventScript_MomApproachPlayerMale4 - compare VAR_0x8008, 5 - call_if_eq LittlerootTown_EventScript_MomApproachPlayerMale5 + call_if_eq VAR_0x8008, 0, LittlerootTown_EventScript_MomApproachPlayer0 + call_if_eq VAR_0x8008, 1, LittlerootTown_EventScript_MomApproachPlayer1 + call_if_eq VAR_0x8008, 2, LittlerootTown_EventScript_MomApproachPlayerMale2 + call_if_eq VAR_0x8008, 3, LittlerootTown_EventScript_MomApproachPlayerMale3 + call_if_eq VAR_0x8008, 4, LittlerootTown_EventScript_MomApproachPlayerMale4 + call_if_eq VAR_0x8008, 5, LittlerootTown_EventScript_MomApproachPlayerMale5 return LittlerootTown_EventScript_MomApproachPlayerFemale:: - compare VAR_0x8008, 0 - call_if_eq LittlerootTown_EventScript_MomApproachPlayer0 - compare VAR_0x8008, 1 - call_if_eq LittlerootTown_EventScript_MomApproachPlayer1 - compare VAR_0x8008, 2 - call_if_eq LittlerootTown_EventScript_MomApproachPlayerFemale2 - compare VAR_0x8008, 3 - call_if_eq LittlerootTown_EventScript_MomApproachPlayerFemale3 - compare VAR_0x8008, 4 - call_if_eq LittlerootTown_EventScript_MomApproachPlayerFemale4 - compare VAR_0x8008, 5 - call_if_eq LittlerootTown_EventScript_MomApproachPlayerFemale5 + call_if_eq VAR_0x8008, 0, LittlerootTown_EventScript_MomApproachPlayer0 + call_if_eq VAR_0x8008, 1, LittlerootTown_EventScript_MomApproachPlayer1 + call_if_eq VAR_0x8008, 2, LittlerootTown_EventScript_MomApproachPlayerFemale2 + call_if_eq VAR_0x8008, 3, LittlerootTown_EventScript_MomApproachPlayerFemale3 + call_if_eq VAR_0x8008, 4, LittlerootTown_EventScript_MomApproachPlayerFemale4 + call_if_eq VAR_0x8008, 5, LittlerootTown_EventScript_MomApproachPlayerFemale5 return LittlerootTown_EventScript_MomApproachPlayer0:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 applymovement LOCALID_MOM, LittlerootTown_Movement_MomApproachPlayer0 waitmovement 0 return LittlerootTown_EventScript_MomApproachPlayer1:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 applymovement LOCALID_MOM, LittlerootTown_Movement_MomApproachPlayer1 waitmovement 0 return LittlerootTown_EventScript_MomApproachPlayerMale2:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 applymovement LOCALID_MOM, LittlerootTown_Movement_MomApproachPlayerMale2 waitmovement 0 return LittlerootTown_EventScript_MomApproachPlayerMale3:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 applymovement LOCALID_MOM, LittlerootTown_Movement_MomApproachPlayerMale3 waitmovement 0 return LittlerootTown_EventScript_MomApproachPlayerMale4:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 applymovement LOCALID_MOM, LittlerootTown_Movement_MomApproachPlayerMale4 waitmovement 0 return LittlerootTown_EventScript_MomApproachPlayerMale5:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 applymovement LOCALID_MOM, LittlerootTown_Movement_MomApproachPlayerMale5 waitmovement 0 return LittlerootTown_EventScript_MomApproachPlayerFemale2:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 applymovement LOCALID_MOM, LittlerootTown_Movement_MomApproachPlayerFemale2 waitmovement 0 return LittlerootTown_EventScript_MomApproachPlayerFemale3:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 applymovement LOCALID_MOM, LittlerootTown_Movement_MomApproachPlayerFemale3 waitmovement 0 return LittlerootTown_EventScript_MomApproachPlayerFemale4:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 applymovement LOCALID_MOM, LittlerootTown_Movement_MomApproachPlayerFemale4 waitmovement 0 return LittlerootTown_EventScript_MomApproachPlayerFemale5:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 applymovement LOCALID_MOM, LittlerootTown_Movement_MomApproachPlayerFemale5 waitmovement 0 return LittlerootTown_EventScript_MomReturnHomeMale:: - compare VAR_0x8008, 0 - call_if_eq LittlerootTown_EventScript_MomReturnHome0 - compare VAR_0x8008, 1 - call_if_eq LittlerootTown_EventScript_MomReturnHome1 - compare VAR_0x8008, 2 - call_if_eq LittlerootTown_EventScript_MomReturnHomeMale2 - compare VAR_0x8008, 3 - call_if_eq LittlerootTown_EventScript_MomReturnHomeMale3 - compare VAR_0x8008, 4 - call_if_eq LittlerootTown_EventScript_MomReturnHomeMale4 - compare VAR_0x8008, 5 - call_if_eq LittlerootTown_EventScript_MomReturnHomeMale5 + call_if_eq VAR_0x8008, 0, LittlerootTown_EventScript_MomReturnHome0 + call_if_eq VAR_0x8008, 1, LittlerootTown_EventScript_MomReturnHome1 + call_if_eq VAR_0x8008, 2, LittlerootTown_EventScript_MomReturnHomeMale2 + call_if_eq VAR_0x8008, 3, LittlerootTown_EventScript_MomReturnHomeMale3 + call_if_eq VAR_0x8008, 4, LittlerootTown_EventScript_MomReturnHomeMale4 + call_if_eq VAR_0x8008, 5, LittlerootTown_EventScript_MomReturnHomeMale5 return LittlerootTown_EventScript_MomReturnHomeFemale:: - compare VAR_0x8008, 0 - call_if_eq LittlerootTown_EventScript_MomReturnHome0 - compare VAR_0x8008, 1 - call_if_eq LittlerootTown_EventScript_MomReturnHome1 - compare VAR_0x8008, 2 - call_if_eq LittlerootTown_EventScript_MomReturnHomeFemale2 - compare VAR_0x8008, 3 - call_if_eq LittlerootTown_EventScript_MomReturnHomeFemale3 - compare VAR_0x8008, 4 - call_if_eq LittlerootTown_EventScript_MomReturnHomeFemale4 - compare VAR_0x8008, 5 - call_if_eq LittlerootTown_EventScript_MomReturnHomeFemale5 + call_if_eq VAR_0x8008, 0, LittlerootTown_EventScript_MomReturnHome0 + call_if_eq VAR_0x8008, 1, LittlerootTown_EventScript_MomReturnHome1 + call_if_eq VAR_0x8008, 2, LittlerootTown_EventScript_MomReturnHomeFemale2 + call_if_eq VAR_0x8008, 3, LittlerootTown_EventScript_MomReturnHomeFemale3 + call_if_eq VAR_0x8008, 4, LittlerootTown_EventScript_MomReturnHomeFemale4 + call_if_eq VAR_0x8008, 5, LittlerootTown_EventScript_MomReturnHomeFemale5 return LittlerootTown_EventScript_MomReturnHome0:: @@ -861,7 +812,7 @@ LittlerootTown_Movement_MomReturnHomeMale2: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_Movement_MomReturnHomeMale3: @@ -870,33 +821,33 @@ LittlerootTown_Movement_MomReturnHomeMale3: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_Movement_MomReturnHomeMale4: walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_Movement_MomReturnHomeMale5: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_Movement_MomReturnHomeFemale2: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_Movement_MomReturnHomeFemale3: walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_Movement_MomReturnHomeFemale4: @@ -905,7 +856,7 @@ LittlerootTown_Movement_MomReturnHomeFemale4: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_Movement_MomReturnHomeFemale5: @@ -913,7 +864,7 @@ LittlerootTown_Movement_MomReturnHomeFemale5: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_Movement_MomExitThroughDoor: @@ -924,12 +875,10 @@ LittlerootTown_EventScript_Mom:: lock faceplayer checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_EventScript_SetHomeDoorCoordsMale - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_EventScript_SetHomeDoorCoordsFemale + call_if_eq VAR_RESULT, MALE, LittlerootTown_EventScript_SetHomeDoorCoordsMale + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_EventScript_SetHomeDoorCoordsFemale call LittlerootTown_EventScript_GiveRunningShoes - applymovement LOCALID_MOM, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_MOM, Common_Movement_WalkInPlaceFasterUp waitmovement 0 opendoor VAR_0x8009, VAR_0x800A waitdooranim diff --git a/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc b/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc index 9d19519c81..cce8cd59b9 100644 --- a/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc +++ b/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc @@ -9,33 +9,28 @@ LittlerootTown_BrendansHouse_1F_MapScripts:: .byte 0 LittlerootTown_BrendansHouse_1F_OnLoad: - compare VAR_LITTLEROOT_INTRO_STATE, 6 - call_if_lt LittlerootTown_BrendansHouse_1F_EventScript_SetMovingBoxes + call_if_lt VAR_LITTLEROOT_INTRO_STATE, 6, LittlerootTown_BrendansHouse_1F_EventScript_SetMovingBoxes call_if_set FLAG_RECEIVED_RUNNING_SHOES, LittlerootTown_BrendansHouse_1F_EventScript_CheckShowShoesManual end LittlerootTown_BrendansHouse_1F_EventScript_SetMovingBoxes:: - setmetatile 5, 4, METATILE_BrendansMaysHouse_MovingBox_Open, 1 - setmetatile 5, 2, METATILE_BrendansMaysHouse_MovingBox_Closed, 1 + setmetatile 5, 4, METATILE_BrendansMaysHouse_MovingBox_Open, TRUE + setmetatile 5, 2, METATILE_BrendansMaysHouse_MovingBox_Closed, TRUE return LittlerootTown_BrendansHouse_1F_EventScript_CheckShowShoesManual:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_ShowRunningShoesManual + goto_if_eq VAR_RESULT, MALE, LittlerootTown_BrendansHouse_1F_EventScript_ShowRunningShoesManual return LittlerootTown_BrendansHouse_1F_EventScript_ShowRunningShoesManual:: - setmetatile 3, 7, METATILE_BrendansMaysHouse_BookOnTable, 1 + setmetatile 3, 7, METATILE_BrendansMaysHouse_BookOnTable, TRUE return LittlerootTown_BrendansHouse_1F_OnTransition: - compare VAR_LITTLEROOT_INTRO_STATE, 3 - call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_MoveMomToDoor - compare VAR_LITTLEROOT_INTRO_STATE, 5 - call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_MoveMomToStairs - compare VAR_LITTLEROOT_INTRO_STATE, 6 - call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_MoveMomToTV + call_if_eq VAR_LITTLEROOT_INTRO_STATE, 3, LittlerootTown_BrendansHouse_1F_EventScript_MoveMomToDoor + call_if_eq VAR_LITTLEROOT_INTRO_STATE, 5, LittlerootTown_BrendansHouse_1F_EventScript_MoveMomToStairs + call_if_eq VAR_LITTLEROOT_INTRO_STATE, 6, LittlerootTown_BrendansHouse_1F_EventScript_MoveMomToTV end LittlerootTown_BrendansHouse_1F_EventScript_MoveMomToStairs:: @@ -70,7 +65,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_GoUpstairsToSetClock:: applymovement OBJ_EVENT_ID_PLAYER, LittlerootTown_BrendansHouse_1F_Movement_PushTowardStairs applymovement LOCALID_MOM, LittlerootTown_BrendansHouse_1F_Movement_PushTowardStairs waitmovement 0 - warp MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F, 255, 7, 1 + warp MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F, 7, 1 waitstate releaseall end @@ -100,7 +95,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_YoureNewNeighbor:: waitmovement 0 applymovement LOCALID_RIVAL_MOM, Common_Movement_Delay48 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft applymovement LOCALID_RIVAL_MOM, LittlerootTown_BrendansHouse_1F_Movement_RivalMomApproach waitmovement 0 special GetRivalSonDaughterString @@ -123,7 +118,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_GoSeeRoom:: lockall setvar VAR_0x8004, LOCALID_MOM setvar VAR_0x8005, MALE - applymovement VAR_0x8004, Common_Movement_WalkInPlaceFastestLeft + applymovement VAR_0x8004, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 goto PlayersHouse_1F_EventScript_MomGoSeeRoom end @@ -156,23 +151,16 @@ LittlerootTown_BrendansHouse_1F_EventScript_MeetRival:: waitmovement 0 applymovement LOCALID_RIVAL, Common_Movement_Delay48 waitmovement 0 - compare VAR_0x8008, 1 - call_if_ne LittlerootTown_BrendansHouse_1F_EventScript_PlayerFaceBrendan + call_if_ne VAR_0x8008, 1, LittlerootTown_BrendansHouse_1F_EventScript_PlayerFaceBrendan playbgm MUS_ENCOUNTER_BRENDAN, TRUE - compare VAR_0x8008, 0 - call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_BrendanApproachPlayer0 - compare VAR_0x8008, 1 - call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_BrendanApproachPlayer1 - compare VAR_0x8008, 2 - call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_BrendanApproachPlayer2 + call_if_eq VAR_0x8008, 0, LittlerootTown_BrendansHouse_1F_EventScript_BrendanApproachPlayer0 + call_if_eq VAR_0x8008, 1, LittlerootTown_BrendansHouse_1F_EventScript_BrendanApproachPlayer1 + call_if_eq VAR_0x8008, 2, LittlerootTown_BrendansHouse_1F_EventScript_BrendanApproachPlayer2 msgbox RivalsHouse_1F_Text_BrendanWhoAreYou, MSGBOX_DEFAULT closemessage - compare VAR_0x8008, 0 - call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_BrendanGoUpstairs0 - compare VAR_0x8008, 1 - call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_BrendanGoUpstairs1 - compare VAR_0x8008, 2 - call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_BrendanGoUpstairs2 + call_if_eq VAR_0x8008, 0, LittlerootTown_BrendansHouse_1F_EventScript_BrendanGoUpstairs0 + call_if_eq VAR_0x8008, 1, LittlerootTown_BrendansHouse_1F_EventScript_BrendanGoUpstairs1 + call_if_eq VAR_0x8008, 2, LittlerootTown_BrendansHouse_1F_EventScript_BrendanGoUpstairs2 playse SE_EXIT removeobject LOCALID_RIVAL setflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_BRENDAN @@ -187,7 +175,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_MeetRival:: end LittlerootTown_BrendansHouse_1F_EventScript_PlayerFaceBrendan:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return @@ -207,9 +195,9 @@ LittlerootTown_BrendansHouse_1F_EventScript_BrendanApproachPlayer2:: return LittlerootTown_BrendansHouse_1F_Movement_BrendanApproachPlayer0: - walk_in_place_fastest_left + walk_in_place_faster_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up walk_up walk_up walk_up @@ -223,9 +211,9 @@ LittlerootTown_BrendansHouse_1F_Movement_BrendanApproachPlayer1: step_end LittlerootTown_BrendansHouse_1F_Movement_BrendanApproachPlayer2: - walk_in_place_fastest_right + walk_in_place_faster_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up walk_up walk_up walk_up @@ -253,48 +241,48 @@ LittlerootTown_BrendansHouse_1F_EventScript_BrendanGoUpstairs2:: LittlerootTown_BrendansHouse_1F_Movement_PlayerWatchBrendanExit0: delay_16 delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right step_end LittlerootTown_BrendansHouse_1F_Movement_PlayerWatchBrendanExit1: delay_16 delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_BrendansHouse_1F_Movement_PlayerWatchBrendanExit2: delay_16 delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left step_end LittlerootTown_BrendansHouse_1F_Movement_BrendanGoUpstairs0: - walk_in_place_fastest_right + walk_in_place_faster_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up walk_up walk_up step_end LittlerootTown_BrendansHouse_1F_Movement_BrendanGoUpstairs1: - walk_in_place_fastest_right + walk_in_place_faster_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up walk_up walk_up - walk_in_place_fastest_left + walk_in_place_faster_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up walk_up step_end LittlerootTown_BrendansHouse_1F_Movement_BrendanGoUpstairs2: - walk_in_place_fastest_left + walk_in_place_faster_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up walk_up walk_up step_end diff --git a/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc b/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc index 5d6af5cf00..cd4d155192 100644 --- a/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc +++ b/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc @@ -6,28 +6,23 @@ LittlerootTown_BrendansHouse_2F_MapScripts:: .byte 0 LittlerootTown_BrendansHouse_2F_OnTransition: - compare VAR_LITTLEROOT_RIVAL_STATE, 2 - call_if_lt LittlerootTown_BrendansHouse_2F_EventScript_CheckSetReadyToMeetBrendan - compare VAR_LITTLEROOT_RIVAL_STATE, 3 - call_if_ge LittlerootTown_BrendansHouse_2F_EventScript_CheckShouldUpdateBrendanPos - compare VAR_LITTLEROOT_INTRO_STATE, 4 - call_if_eq PlayersHouse_2F_EventScript_BlockStairsUntilClockIsSet + call_if_lt VAR_LITTLEROOT_RIVAL_STATE, 2, LittlerootTown_BrendansHouse_2F_EventScript_CheckSetReadyToMeetBrendan + call_if_ge VAR_LITTLEROOT_RIVAL_STATE, 3, LittlerootTown_BrendansHouse_2F_EventScript_CheckShouldUpdateBrendanPos + call_if_eq VAR_LITTLEROOT_INTRO_STATE, 4, PlayersHouse_2F_EventScript_BlockStairsUntilClockIsSet call SecretBase_EventScript_SetDecorationFlags setvar VAR_SECRET_BASE_INITIALIZED, 0 end LittlerootTown_BrendansHouse_2F_EventScript_CheckShouldUpdateBrendanPos:: goto_if_set FLAG_MET_RIVAL_LILYCOVE, LittlerootTown_BrendansHouse_2F_EventScript_TryUpdateBrendanPos - compare VAR_BIRCH_LAB_STATE, 2 - goto_if_ge LittlerootTown_BrendansHouse_2F_EventScript_Ret + goto_if_ge VAR_BIRCH_LAB_STATE, 2, LittlerootTown_BrendansHouse_2F_EventScript_Ret goto LittlerootTown_BrendansHouse_2F_EventScript_TryUpdateBrendanPos LittlerootTown_BrendansHouse_2F_EventScript_TryUpdateBrendanPos:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_Ret - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 - goto_if_ge LittlerootTown_MaysHouse_2F_EventScript_Ret @ Odd that the MaysHouse equivalent was used here instead + goto_if_eq VAR_RESULT, MALE, LittlerootTown_BrendansHouse_2F_EventScript_Ret + @ Odd that the MaysHouse equivalent was used below instead + goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2, LittlerootTown_MaysHouse_2F_EventScript_Ret setobjectxyperm LOCALID_RIVAL, 0, 2 setobjectmovementtype LOCALID_RIVAL, MOVEMENT_TYPE_FACE_UP return @@ -37,8 +32,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_Ret:: LittlerootTown_BrendansHouse_2F_EventScript_CheckSetReadyToMeetBrendan:: checkplayergender - compare VAR_RESULT, FEMALE - goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_SetReadyToMeetBrendan + goto_if_eq VAR_RESULT, FEMALE, LittlerootTown_BrendansHouse_2F_EventScript_SetReadyToMeetBrendan return LittlerootTown_BrendansHouse_2F_EventScript_SetReadyToMeetBrendan:: @@ -51,14 +45,12 @@ LittlerootTown_BrendansHouse_2F_OnWarp: LittlerootTown_BrendansHouse_2F_EventScript_CheckInitDecor:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq SecretBase_EventScript_InitDecorations + goto_if_eq VAR_RESULT, MALE, SecretBase_EventScript_InitDecorations end LittlerootTown_BrendansHouse_2F_EventScript_RivalsPokeBall:: lockall - compare VAR_LITTLEROOT_RIVAL_STATE, 2 - goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendan + goto_if_eq VAR_LITTLEROOT_RIVAL_STATE, 2, LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendan msgbox RivalsHouse_2F_Text_ItsRivalsPokeBall, MSGBOX_DEFAULT releaseall end @@ -75,14 +67,10 @@ LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendan:: waitmovement 0 delay 10 playbgm MUS_ENCOUNTER_BRENDAN, TRUE - compare VAR_FACING, DIR_NORTH - call_if_eq LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanNorth - compare VAR_FACING, DIR_SOUTH - call_if_eq LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanSouth - compare VAR_FACING, DIR_WEST - call_if_eq LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanWest - compare VAR_FACING, DIR_EAST - call_if_eq LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanEast + call_if_eq VAR_FACING, DIR_NORTH, LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanNorth + call_if_eq VAR_FACING, DIR_SOUTH, LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanSouth + call_if_eq VAR_FACING, DIR_WEST, LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanWest + call_if_eq VAR_FACING, DIR_EAST, LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanEast setvar VAR_LITTLEROOT_RIVAL_STATE, 3 setflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F_POKE_BALL clearflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_BEDROOM @@ -95,7 +83,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendan:: LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanNorth:: applymovement LOCALID_RIVAL, LittlerootTown_BrendansHouse_2F_Movement_BrendanApproachPlayerNorth waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox RivalsHouse_2F_Text_BrendanWhoAreYou, MSGBOX_DEFAULT closemessage @@ -107,7 +95,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanNorth:: LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanSouth:: applymovement LOCALID_RIVAL, LittlerootTown_BrendansHouse_2F_Movement_BrendanApproachPlayerSouth waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox RivalsHouse_2F_Text_BrendanWhoAreYou, MSGBOX_DEFAULT closemessage @@ -119,7 +107,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanSouth:: LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanWest:: applymovement LOCALID_RIVAL, LittlerootTown_BrendansHouse_2F_Movement_BrendanApproachPlayerWest waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox RivalsHouse_2F_Text_BrendanWhoAreYou, MSGBOX_DEFAULT closemessage @@ -131,7 +119,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanWest:: LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanEast:: applymovement LOCALID_RIVAL, LittlerootTown_BrendansHouse_2F_Movement_BrendanApproachPlayerEast waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox RivalsHouse_2F_Text_BrendanWhoAreYou, MSGBOX_DEFAULT closemessage @@ -142,7 +130,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanEast:: LittlerootTown_BrendansHouse_2F_Movement_BrendanEnters: walk_down walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end LittlerootTown_BrendansHouse_2F_Movement_BrendanApproachPlayerNorth: @@ -161,17 +149,17 @@ LittlerootTown_BrendansHouse_2F_Movement_BrendanWalkToPCNorth: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_BrendansHouse_2F_Movement_PlayerWatchBrendanNorth: delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 delay_16 delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end LittlerootTown_BrendansHouse_2F_Movement_BrendanApproachPlayerSouth: @@ -186,22 +174,22 @@ LittlerootTown_BrendansHouse_2F_Movement_BrendanWalkToPCSouth: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_BrendansHouse_2F_Movement_PlayerWatchBrendanSouth: delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end LittlerootTown_BrendansHouse_2F_Movement_BrendanApproachPlayerWest: walk_left walk_left walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end LittlerootTown_BrendansHouse_2F_Movement_BrendanWalkToPCWest: @@ -212,16 +200,16 @@ LittlerootTown_BrendansHouse_2F_Movement_BrendanWalkToPCWest: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_BrendansHouse_2F_Movement_PlayerWatchBrendanWest: delay_8 delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end LittlerootTown_BrendansHouse_2F_Movement_BrendanApproachPlayerEast: @@ -230,34 +218,32 @@ LittlerootTown_BrendansHouse_2F_Movement_BrendanApproachPlayerEast: walk_left walk_left walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end LittlerootTown_BrendansHouse_2F_Movement_BrendanWalkToPCEast: walk_up walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end @ Unused, the player is already facing this direction so its unneeded LittlerootTown_BrendansHouse_2F_Movement_PlayerWatchBrendanEast: delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end LittlerootTown_BrendansHouse_2F_EventScript_PC:: lockall checkplayergender - compare VAR_RESULT, MALE - goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_CheckPlayersPC - compare VAR_RESULT, FEMALE - goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_CheckRivalsPC + goto_if_eq VAR_RESULT, MALE, LittlerootTown_BrendansHouse_2F_EventScript_CheckPlayersPC + goto_if_eq VAR_RESULT, FEMALE, LittlerootTown_BrendansHouse_2F_EventScript_CheckRivalsPC end LittlerootTown_BrendansHouse_2F_EventScript_CheckPlayersPC:: - setvar VAR_0x8004, 1 + setvar VAR_0x8004, PC_LOCATION_BRENDANS_HOUSE special DoPCTurnOnEffect playse SE_PC_ON msgbox gText_PlayerHouseBootPC, MSGBOX_DEFAULT @@ -267,7 +253,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_CheckPlayersPC:: end LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC:: - setvar VAR_0x8004, 1 + setvar VAR_0x8004, PC_LOCATION_BRENDANS_HOUSE playse SE_PC_OFF special DoPCTurnOffEffect releaseall diff --git a/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc b/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc index 80c8c919e3..b4c4775c33 100644 --- a/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc +++ b/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc @@ -9,33 +9,28 @@ LittlerootTown_MaysHouse_1F_MapScripts:: .byte 0 LittlerootTown_MaysHouse_1F_OnLoad: - compare VAR_LITTLEROOT_INTRO_STATE, 6 - call_if_lt LittlerootTown_MaysHouse_1F_EventScript_SetMovingBoxes + call_if_lt VAR_LITTLEROOT_INTRO_STATE, 6, LittlerootTown_MaysHouse_1F_EventScript_SetMovingBoxes call_if_set FLAG_RECEIVED_RUNNING_SHOES, LittlerootTown_MaysHouse_1F_EventScript_CheckShowShoesManual end LittlerootTown_MaysHouse_1F_EventScript_SetMovingBoxes:: - setmetatile 5, 4, METATILE_BrendansMaysHouse_MovingBox_Open, 1 - setmetatile 5, 2, METATILE_BrendansMaysHouse_MovingBox_Closed, 1 + setmetatile 5, 4, METATILE_BrendansMaysHouse_MovingBox_Open, TRUE + setmetatile 5, 2, METATILE_BrendansMaysHouse_MovingBox_Closed, TRUE return LittlerootTown_MaysHouse_1F_EventScript_CheckShowShoesManual:: checkplayergender - compare VAR_RESULT, FEMALE - goto_if_eq LittlerootTown_MaysHouse_1F_EventScript_ShowRunningShoesManual + goto_if_eq VAR_RESULT, FEMALE, LittlerootTown_MaysHouse_1F_EventScript_ShowRunningShoesManual return LittlerootTown_MaysHouse_1F_EventScript_ShowRunningShoesManual:: - setmetatile 6, 7, METATILE_BrendansMaysHouse_BookOnTable, 1 + setmetatile 6, 7, METATILE_BrendansMaysHouse_BookOnTable, TRUE return LittlerootTown_MaysHouse_1F_OnTransition: - compare VAR_LITTLEROOT_INTRO_STATE, 3 - call_if_eq LittlerootTown_MaysHouse_1F_EventScript_MoveMomToDoor - compare VAR_LITTLEROOT_INTRO_STATE, 5 - call_if_eq LittlerootTown_MaysHouse_1F_EventScript_MoveMomToStairs - compare VAR_LITTLEROOT_INTRO_STATE, 6 - call_if_eq LittlerootTown_MaysHouse_1F_EventScript_MoveMomToTV + call_if_eq VAR_LITTLEROOT_INTRO_STATE, 3, LittlerootTown_MaysHouse_1F_EventScript_MoveMomToDoor + call_if_eq VAR_LITTLEROOT_INTRO_STATE, 5, LittlerootTown_MaysHouse_1F_EventScript_MoveMomToStairs + call_if_eq VAR_LITTLEROOT_INTRO_STATE, 6, LittlerootTown_MaysHouse_1F_EventScript_MoveMomToTV end LittlerootTown_MaysHouse_1F_EventScript_MoveMomToStairs:: @@ -69,7 +64,7 @@ LittlerootTown_MaysHouse_1F_EventScript_GoUpstairsToSetClock:: applymovement OBJ_EVENT_ID_PLAYER, LittlerootTown_MaysHouse_1F_Movement_PushTowardStairs applymovement LOCALID_MOM, LittlerootTown_MaysHouse_1F_Movement_PushTowardStairs waitmovement 0 - warp MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F, 255, 1, 1 + warp MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F, 1, 1 waitstate releaseall end @@ -99,7 +94,7 @@ LittlerootTown_MaysHouse_1F_EventScript_YoureNewNeighbor:: waitmovement 0 applymovement LOCALID_RIVAL_MOM, Common_Movement_Delay48 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight applymovement LOCALID_RIVAL_MOM, LittlerootTown_MaysHouse_1F_Movement_RivalMomApproach waitmovement 0 special GetRivalSonDaughterString @@ -123,8 +118,7 @@ RivalsHouse_1F_EventScript_RivalMom:: faceplayer goto_if_set FLAG_DEFEATED_RIVAL_ROUTE103, RivalsHouse_1F_EventScript_GoHomeEverySoOften goto_if_set FLAG_SYS_POKEMON_GET, RivalsHouse_1F_EventScript_RivalIsOnRoute103 - compare VAR_LITTLEROOT_RIVAL_STATE, 3 - goto_if_eq RivalsHouse_1F_EventScript_RivalTooBusy + goto_if_eq VAR_LITTLEROOT_RIVAL_STATE, 3, RivalsHouse_1F_EventScript_RivalTooBusy special GetRivalSonDaughterString msgbox RivalsHouse_1F_Text_LikeChildLikeFather, MSGBOX_DEFAULT release @@ -157,7 +151,7 @@ LittlerootTown_MaysHouse_1F_EventScript_GoSeeRoom:: lockall setvar VAR_0x8004, LOCALID_MOM setvar VAR_0x8005, FEMALE - applymovement VAR_0x8004, Common_Movement_WalkInPlaceFastestRight + applymovement VAR_0x8004, Common_Movement_WalkInPlaceFasterRight waitmovement 0 goto PlayersHouse_1F_EventScript_MomGoSeeRoom end @@ -190,23 +184,16 @@ LittlerootTown_MaysHouse_1F_EventScript_MeetRival:: waitmovement 0 applymovement LOCALID_RIVAL, Common_Movement_Delay48 waitmovement 0 - compare VAR_0x8008, 1 - call_if_ne LittlerootTown_MaysHouse_1F_EventScript_PlayerFaceMay + call_if_ne VAR_0x8008, 1, LittlerootTown_MaysHouse_1F_EventScript_PlayerFaceMay playbgm MUS_ENCOUNTER_MAY, TRUE - compare VAR_0x8008, 0 - call_if_eq LittlerootTown_MaysHouse_1F_EventScript_MayApproachPlayer0 - compare VAR_0x8008, 1 - call_if_eq LittlerootTown_MaysHouse_1F_EventScript_MayApproachPlayer1 - compare VAR_0x8008, 2 - call_if_eq LittlerootTown_MaysHouse_1F_EventScript_MayApproachPlayer2 + call_if_eq VAR_0x8008, 0, LittlerootTown_MaysHouse_1F_EventScript_MayApproachPlayer0 + call_if_eq VAR_0x8008, 1, LittlerootTown_MaysHouse_1F_EventScript_MayApproachPlayer1 + call_if_eq VAR_0x8008, 2, LittlerootTown_MaysHouse_1F_EventScript_MayApproachPlayer2 msgbox RivalsHouse_1F_Text_MayWhoAreYou, MSGBOX_DEFAULT closemessage - compare VAR_0x8008, 0 - call_if_eq LittlerootTown_MaysHouse_1F_EventScript_MayGoUpstairs0 - compare VAR_0x8008, 1 - call_if_eq LittlerootTown_MaysHouse_1F_EventScript_MayGoUpstairs1 - compare VAR_0x8008, 2 - call_if_eq LittlerootTown_MaysHouse_1F_EventScript_MayGoUpstairs2 + call_if_eq VAR_0x8008, 0, LittlerootTown_MaysHouse_1F_EventScript_MayGoUpstairs0 + call_if_eq VAR_0x8008, 1, LittlerootTown_MaysHouse_1F_EventScript_MayGoUpstairs1 + call_if_eq VAR_0x8008, 2, LittlerootTown_MaysHouse_1F_EventScript_MayGoUpstairs2 playse SE_EXIT removeobject LOCALID_RIVAL setflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_MAY @@ -221,7 +208,7 @@ LittlerootTown_MaysHouse_1F_EventScript_MeetRival:: end LittlerootTown_MaysHouse_1F_EventScript_PlayerFaceMay:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return @@ -241,9 +228,9 @@ LittlerootTown_MaysHouse_1F_EventScript_MayApproachPlayer2:: return LittlerootTown_MaysHouse_1F_Movement_MayApproachPlayer0: - walk_in_place_fastest_left + walk_in_place_faster_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up walk_up walk_up walk_up @@ -257,9 +244,9 @@ LittlerootTown_MaysHouse_1F_Movement_MayApproachPlayer1: step_end LittlerootTown_MaysHouse_1F_Movement_MayApproachPlayer2: - walk_in_place_fastest_right + walk_in_place_faster_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up walk_up walk_up walk_up @@ -287,48 +274,48 @@ LittlerootTown_MaysHouse_1F_EventScript_MayGoUpstairs2:: LittlerootTown_MaysHouse_1F_Movement_PlayerWatchMayExit0: delay_16 delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right step_end LittlerootTown_MaysHouse_1F_Movement_PlayerWatchMayExit1: delay_16 delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_MaysHouse_1F_Movement_PlayerWatchMayExit2: delay_16 delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left step_end LittlerootTown_MaysHouse_1F_Movement_MayGoUpstairs0: - walk_in_place_fastest_right + walk_in_place_faster_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up walk_up walk_up step_end LittlerootTown_MaysHouse_1F_Movement_MayGoUpstairs1: - walk_in_place_fastest_right + walk_in_place_faster_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up walk_up walk_up - walk_in_place_fastest_left + walk_in_place_faster_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up walk_up step_end LittlerootTown_MaysHouse_1F_Movement_MayGoUpstairs2: - walk_in_place_fastest_left + walk_in_place_faster_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up walk_up walk_up step_end diff --git a/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc b/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc index 1483a845c3..ef8e83bf7e 100644 --- a/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc +++ b/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc @@ -6,28 +6,22 @@ LittlerootTown_MaysHouse_2F_MapScripts:: .byte 0 LittlerootTown_MaysHouse_2F_OnTransition: - compare VAR_LITTLEROOT_RIVAL_STATE, 2 - call_if_lt LittlerootTown_MaysHouse_2F_EventScript_CheckSetReadyToMeetMay - compare VAR_LITTLEROOT_RIVAL_STATE, 3 - call_if_ge LittlerootTown_MaysHouse_2F_EventScript_CheckShouldUpdateMayPos - compare VAR_LITTLEROOT_INTRO_STATE, 4 - call_if_eq PlayersHouse_2F_EventScript_BlockStairsUntilClockIsSet + call_if_lt VAR_LITTLEROOT_RIVAL_STATE, 2, LittlerootTown_MaysHouse_2F_EventScript_CheckSetReadyToMeetMay + call_if_ge VAR_LITTLEROOT_RIVAL_STATE, 3, LittlerootTown_MaysHouse_2F_EventScript_CheckShouldUpdateMayPos + call_if_eq VAR_LITTLEROOT_INTRO_STATE, 4, PlayersHouse_2F_EventScript_BlockStairsUntilClockIsSet call SecretBase_EventScript_SetDecorationFlags setvar VAR_SECRET_BASE_INITIALIZED, 0 end LittlerootTown_MaysHouse_2F_EventScript_CheckShouldUpdateMayPos:: goto_if_set FLAG_MET_RIVAL_LILYCOVE, LittlerootTown_MaysHouse_2F_EventScript_TryUpdateMayPos - compare VAR_BIRCH_LAB_STATE, 2 - goto_if_ge LittlerootTown_MaysHouse_2F_EventScript_Ret + goto_if_ge VAR_BIRCH_LAB_STATE, 2, LittlerootTown_MaysHouse_2F_EventScript_Ret goto LittlerootTown_MaysHouse_2F_EventScript_TryUpdateMayPos LittlerootTown_MaysHouse_2F_EventScript_TryUpdateMayPos:: checkplayergender - compare VAR_RESULT, FEMALE - goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_Ret - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 - goto_if_ge LittlerootTown_MaysHouse_2F_EventScript_Ret + goto_if_eq VAR_RESULT, FEMALE, LittlerootTown_MaysHouse_2F_EventScript_Ret + goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2, LittlerootTown_MaysHouse_2F_EventScript_Ret setobjectxyperm LOCALID_RIVAL, 8, 2 setobjectmovementtype LOCALID_RIVAL, MOVEMENT_TYPE_FACE_UP return @@ -37,8 +31,7 @@ LittlerootTown_MaysHouse_2F_EventScript_Ret:: LittlerootTown_MaysHouse_2F_EventScript_CheckSetReadyToMeetMay:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_SetReadyToMeetMay + goto_if_eq VAR_RESULT, MALE, LittlerootTown_MaysHouse_2F_EventScript_SetReadyToMeetMay return LittlerootTown_MaysHouse_2F_EventScript_SetReadyToMeetMay:: @@ -51,14 +44,12 @@ LittlerootTown_MaysHouse_2F_OnWarp: LittlerootTown_MaysHouse_2F_EventScript_CheckInitDecor:: checkplayergender - compare VAR_RESULT, FEMALE - goto_if_eq SecretBase_EventScript_InitDecorations + goto_if_eq VAR_RESULT, FEMALE, SecretBase_EventScript_InitDecorations end LittlerootTown_MaysHouse_2F_EventScript_RivalsPokeBall:: lockall - compare VAR_LITTLEROOT_RIVAL_STATE, 2 - goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_MeetMay + goto_if_eq VAR_LITTLEROOT_RIVAL_STATE, 2, LittlerootTown_MaysHouse_2F_EventScript_MeetMay msgbox RivalsHouse_2F_Text_ItsRivalsPokeBall, MSGBOX_DEFAULT releaseall end @@ -75,14 +66,10 @@ LittlerootTown_MaysHouse_2F_EventScript_MeetMay:: waitmovement 0 delay 10 playbgm MUS_ENCOUNTER_MAY, TRUE - compare VAR_FACING, DIR_NORTH - call_if_eq LittlerootTown_MaysHouse_2F_EventScript_MeetMayNorth - compare VAR_FACING, DIR_SOUTH - call_if_eq LittlerootTown_MaysHouse_2F_EventScript_MeetMaySouth - compare VAR_FACING, DIR_WEST - call_if_eq LittlerootTown_MaysHouse_2F_EventScript_MeetMayWest - compare VAR_FACING, DIR_EAST - call_if_eq LittlerootTown_MaysHouse_2F_EventScript_MeetMayEast + call_if_eq VAR_FACING, DIR_NORTH, LittlerootTown_MaysHouse_2F_EventScript_MeetMayNorth + call_if_eq VAR_FACING, DIR_SOUTH, LittlerootTown_MaysHouse_2F_EventScript_MeetMaySouth + call_if_eq VAR_FACING, DIR_WEST, LittlerootTown_MaysHouse_2F_EventScript_MeetMayWest + call_if_eq VAR_FACING, DIR_EAST, LittlerootTown_MaysHouse_2F_EventScript_MeetMayEast setvar VAR_LITTLEROOT_RIVAL_STATE, 3 setflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_2F_POKE_BALL clearflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_BEDROOM @@ -95,7 +82,7 @@ LittlerootTown_MaysHouse_2F_EventScript_MeetMay:: LittlerootTown_MaysHouse_2F_EventScript_MeetMayNorth:: applymovement LOCALID_RIVAL, LittlerootTown_MaysHouse_2F_Movement_MayApproachPlayerNorth waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox RivalsHouse_2F_Text_MayWhoAreYou, MSGBOX_DEFAULT closemessage @@ -107,7 +94,7 @@ LittlerootTown_MaysHouse_2F_EventScript_MeetMayNorth:: LittlerootTown_MaysHouse_2F_EventScript_MeetMaySouth:: applymovement LOCALID_RIVAL, LittlerootTown_MaysHouse_2F_Movement_MayApproachPlayerSouth waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox RivalsHouse_2F_Text_MayWhoAreYou, MSGBOX_DEFAULT closemessage @@ -119,7 +106,7 @@ LittlerootTown_MaysHouse_2F_EventScript_MeetMaySouth:: LittlerootTown_MaysHouse_2F_EventScript_MeetMayWest:: applymovement LOCALID_RIVAL, LittlerootTown_MaysHouse_2F_Movement_MayApproachPlayerWest waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox RivalsHouse_2F_Text_MayWhoAreYou, MSGBOX_DEFAULT closemessage @@ -130,7 +117,7 @@ LittlerootTown_MaysHouse_2F_EventScript_MeetMayWest:: LittlerootTown_MaysHouse_2F_EventScript_MeetMayEast:: applymovement LOCALID_RIVAL, LittlerootTown_MaysHouse_2F_Movement_MayApproachPlayerEast waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox RivalsHouse_2F_Text_MayWhoAreYou, MSGBOX_DEFAULT closemessage @@ -142,7 +129,7 @@ LittlerootTown_MaysHouse_2F_EventScript_MeetMayEast:: LittlerootTown_MaysHouse_2F_Movement_MayEnters: walk_down walk_down - walk_in_place_fastest_right + walk_in_place_faster_right step_end LittlerootTown_MaysHouse_2F_Movement_MayApproachPlayerNorth: @@ -157,22 +144,22 @@ LittlerootTown_MaysHouse_2F_Movement_MayWalkToPCNorth: walk_up walk_up walk_up - walk_in_place_fastest_right + walk_in_place_faster_right walk_right walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_MaysHouse_2F_Movement_PlayerWatchMayNorth: delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 delay_16 delay_16 delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right step_end LittlerootTown_MaysHouse_2F_Movement_MayApproachPlayerSouth: @@ -183,20 +170,20 @@ LittlerootTown_MaysHouse_2F_Movement_MayApproachPlayerSouth: LittlerootTown_MaysHouse_2F_Movement_MayWalkToPCSouth: walk_up - walk_in_place_fastest_right + walk_in_place_faster_right walk_right walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_MaysHouse_2F_Movement_PlayerWatchMaySouth: delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right step_end LittlerootTown_MaysHouse_2F_Movement_MayApproachPlayerWest: @@ -205,28 +192,28 @@ LittlerootTown_MaysHouse_2F_Movement_MayApproachPlayerWest: walk_right walk_right walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end LittlerootTown_MaysHouse_2F_Movement_MayWalkToPCWest: walk_up walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end @ Unused, the player is already facing this direction so its unneeded LittlerootTown_MaysHouse_2F_Movement_PlayerWatchMayWest: delay_16 delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right step_end LittlerootTown_MaysHouse_2F_Movement_MayApproachPlayerEast: walk_right walk_right walk_down - walk_in_place_fastest_right + walk_in_place_faster_right step_end LittlerootTown_MaysHouse_2F_Movement_MayWalkToPCEast: @@ -237,25 +224,23 @@ LittlerootTown_MaysHouse_2F_Movement_MayWalkToPCEast: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_MaysHouse_2F_Movement_PlayerWatchMayEast: delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right step_end RivalsHouse_2F_EventScript_Rival:: lockall goto_if_set FLAG_MET_RIVAL_LILYCOVE, RivalsHouse_2F_EventScript_RivalPostLilycove checkplayergender - compare VAR_RESULT, MALE - goto_if_eq RivalsHouse_2F_EventScript_May - compare VAR_RESULT, FEMALE - goto_if_eq RivalsHouse_2F_EventScript_Brendan + goto_if_eq VAR_RESULT, MALE, RivalsHouse_2F_EventScript_May + goto_if_eq VAR_RESULT, FEMALE, RivalsHouse_2F_EventScript_Brendan end RivalsHouse_2F_EventScript_May:: @@ -272,10 +257,8 @@ RivalsHouse_2F_EventScript_RivalPostLilycove:: applymovement VAR_LAST_TALKED, Common_Movement_FacePlayer waitmovement 0 checkplayergender - compare VAR_RESULT, MALE - call_if_eq RivalsHouse_2F_EventScript_MayPostLilycove - compare VAR_RESULT, FEMALE - call_if_eq RivalsHouse_2F_EventScript_BrendanPostLilycove + call_if_eq VAR_RESULT, MALE, RivalsHouse_2F_EventScript_MayPostLilycove + call_if_eq VAR_RESULT, FEMALE, RivalsHouse_2F_EventScript_BrendanPostLilycove setflag FLAG_MET_RIVAL_IN_HOUSE_AFTER_LILYCOVE releaseall end @@ -301,10 +284,8 @@ RivalsHouse_2F_EventScript_BrendanWhereShouldIGoNext:: LittlerootTown_MaysHouse_2F_EventScript_PC:: lockall checkplayergender - compare VAR_RESULT, MALE - goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_CheckRivalsPC - compare VAR_RESULT, FEMALE - goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_CheckPlayersPC + goto_if_eq VAR_RESULT, MALE, LittlerootTown_MaysHouse_2F_EventScript_CheckRivalsPC + goto_if_eq VAR_RESULT, FEMALE, LittlerootTown_MaysHouse_2F_EventScript_CheckPlayersPC end LittlerootTown_MaysHouse_2F_EventScript_CheckRivalsPC:: @@ -313,7 +294,7 @@ LittlerootTown_MaysHouse_2F_EventScript_CheckRivalsPC:: end LittlerootTown_MaysHouse_2F_EventScript_CheckPlayersPC:: - setvar VAR_0x8004, 2 + setvar VAR_0x8004, PC_LOCATION_MAYS_HOUSE special DoPCTurnOnEffect playse SE_PC_ON msgbox gText_PlayerHouseBootPC, MSGBOX_DEFAULT @@ -323,7 +304,7 @@ LittlerootTown_MaysHouse_2F_EventScript_CheckPlayersPC:: end LittlerootTown_MaysHouse_2F_EventScript_TurnOffPlayerPC:: - setvar VAR_0x8004, 2 + setvar VAR_0x8004, PC_LOCATION_MAYS_HOUSE playse SE_PC_OFF special DoPCTurnOffEffect releaseall diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc index 2bff65b313..acf80f0e40 100644 --- a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc +++ b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc @@ -29,18 +29,14 @@ LittlerootTown_ProfessorBirchsLab_MapScripts:: LittlerootTown_ProfessorBirchsLab_OnTransition: call Common_EventScript_SetupRivalGfxId call ProfBirch_EventScript_UpdateLocation - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 - goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_SetAfterJohtoStarterLayout - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 4 - goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_SetJohtoStarterLayout - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 3 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_CheckReadyForJohtoStarter + goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6, LittlerootTown_ProfessorBirchsLab_EventScript_SetAfterJohtoStarterLayout + goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 4, LittlerootTown_ProfessorBirchsLab_EventScript_SetJohtoStarterLayout + goto_if_eq VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 3, LittlerootTown_ProfessorBirchsLab_EventScript_CheckReadyForJohtoStarter end LittlerootTown_ProfessorBirchsLab_EventScript_CheckReadyForJohtoStarter:: specialvar VAR_RESULT, HasAllHoennMons - compare VAR_RESULT, TRUE - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_SetReadyForJohtoStarter + goto_if_eq VAR_RESULT, TRUE, LittlerootTown_ProfessorBirchsLab_EventScript_SetReadyForJohtoStarter setobjectmovementtype LOCALID_RIVAL, MOVEMENT_TYPE_WANDER_UP_AND_DOWN setobjectxyperm LOCALID_RIVAL, 5, 10 end @@ -117,16 +113,14 @@ LittlerootTown_ProfessorBirchsLab_OnFrame: @ This is just where the game tells you its yours and lets you nickname it LittlerootTown_ProfessorBirchsLab_EventScript_GiveStarterEvent:: lockall - bufferleadmonspeciesname 0 + bufferleadmonspeciesname STR_VAR_1 message LittlerootTown_ProfessorBirchsLab_Text_LikeYouToHavePokemon waitmessage playfanfare MUS_OBTAIN_ITEM waitfanfare msgbox LittlerootTown_ProfessorBirchsLab_Text_WhyNotGiveNicknameToMon, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_NicknameStarter - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_GoSeeRival + goto_if_eq VAR_RESULT, YES, LittlerootTown_ProfessorBirchsLab_EventScript_NicknameStarter + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_GoSeeRival end LittlerootTown_ProfessorBirchsLab_EventScript_NicknameStarter:: @@ -137,10 +131,8 @@ LittlerootTown_ProfessorBirchsLab_EventScript_NicknameStarter:: LittlerootTown_ProfessorBirchsLab_EventScript_GoSeeRival:: msgbox LittlerootTown_ProfessorBirchsLab_Text_MightBeGoodIdeaToGoSeeRival, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_AgreeToSeeRival - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_DeclineSeeingRival + goto_if_eq VAR_RESULT, YES, LittlerootTown_ProfessorBirchsLab_EventScript_AgreeToSeeRival + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_DeclineSeeingRival end LittlerootTown_ProfessorBirchsLab_EventScript_AgreeToSeeRival:: @@ -152,10 +144,8 @@ LittlerootTown_ProfessorBirchsLab_EventScript_AgreeToSeeRival:: LittlerootTown_ProfessorBirchsLab_EventScript_DeclineSeeingRival:: msgbox LittlerootTown_ProfessorBirchsLab_Text_DontBeThatWay, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_AgreeToSeeRival - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_DeclineSeeingRival + goto_if_eq VAR_RESULT, YES, LittlerootTown_ProfessorBirchsLab_EventScript_AgreeToSeeRival + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_DeclineSeeingRival end LittlerootTown_ProfessorBirchsLab_EventScript_GivePokedexEvent:: @@ -191,21 +181,19 @@ LittlerootTown_ProfessorBirchsLab_EventScript_UpgradeToNationalDex:: delay 10 playse SE_CLICK delay 20 - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestRight - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_MayUpgradeComment - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_BrendanUpgradeComment + call_if_eq VAR_RESULT, MALE, LittlerootTown_ProfessorBirchsLab_EventScript_MayUpgradeComment + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_ProfessorBirchsLab_EventScript_BrendanUpgradeComment playse SE_PC_ON waitse delay 20 applymovement LOCALID_BIRCH, LittlerootTown_ProfessorBirchsLab_Movement_BirchReturnPokedex waitmovement 0 - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestUp - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox LittlerootTown_ProfessorBirchsLab_Text_OkayAllDone, MSGBOX_DEFAULT playfanfare MUS_OBTAIN_ITEM @@ -236,11 +224,11 @@ LittlerootTown_ProfessorBirchsLab_EventScript_BrendanUpgradeComment:: LittlerootTown_ProfessorBirchsLab_Movement_BirchRetrievePokedexes: walk_left - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_16 walk_right - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_16 walk_right @@ -251,7 +239,7 @@ LittlerootTown_ProfessorBirchsLab_Movement_BirchRetrievePokedexes: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end LittlerootTown_ProfessorBirchsLab_Movement_BirchReturnPokedex: @@ -263,7 +251,7 @@ LittlerootTown_ProfessorBirchsLab_Movement_BirchReturnPokedex: walk_up walk_up walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end LittlerootTown_ProfessorBirchsLab_EventScript_ChooseJohtoStarter:: @@ -288,8 +276,7 @@ LittlerootTown_ProfessorBirchsLab_Movement_PlayerEnterLabForJohtoStarter: LittlerootTown_ProfessorBirchsLab_EventScript_Aide:: lock faceplayer - compare VAR_BIRCH_LAB_STATE, 3 - goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_AideReceivedStarter + goto_if_ge VAR_BIRCH_LAB_STATE, 3, LittlerootTown_ProfessorBirchsLab_EventScript_AideReceivedStarter goto_if_set FLAG_BIRCH_AIDE_MET, LittlerootTown_ProfessorBirchsLab_EventScript_AideAlreadyMet msgbox LittlerootTown_ProfessorBirchsLab_Text_BirchAwayOnFieldwork, MSGBOX_DEFAULT setflag FLAG_BIRCH_AIDE_MET @@ -308,40 +295,34 @@ LittlerootTown_ProfessorBirchsLab_EventScript_AideReceivedStarter:: LittlerootTown_ProfessorBirchsLab_EventScript_Cyndaquil:: release - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 - goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_AlreadyChoseJohtoStarter - applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFastestRight + goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6, LittlerootTown_ProfessorBirchsLab_EventScript_AlreadyChoseJohtoStarter + applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFasterRight waitmovement 0 showmonpic SPECIES_CYNDAQUIL, 10, 3 msgbox LittlerootTown_ProfessorBirchsLab_Text_YoullTakeCyndaquil, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_TakeYourTime + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_TakeYourTime goto LittlerootTown_ProfessorBirchsLab_EventScript_GiveCyndaquil end LittlerootTown_ProfessorBirchsLab_EventScript_Totodile:: release - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 - goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_AlreadyChoseJohtoStarter - applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFastestRight + goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6, LittlerootTown_ProfessorBirchsLab_EventScript_AlreadyChoseJohtoStarter + applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFasterRight waitmovement 0 showmonpic SPECIES_TOTODILE, 10, 3 msgbox LittlerootTown_ProfessorBirchsLab_Text_YoullTakeTotodile, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_TakeYourTime + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_TakeYourTime goto LittlerootTown_ProfessorBirchsLab_EventScript_GiveTotodile end LittlerootTown_ProfessorBirchsLab_EventScript_Chikorita:: release - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 - goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_AlreadyChoseJohtoStarter - applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFastestRight + goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6, LittlerootTown_ProfessorBirchsLab_EventScript_AlreadyChoseJohtoStarter + applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFasterRight waitmovement 0 showmonpic SPECIES_CHIKORITA, 10, 3 msgbox LittlerootTown_ProfessorBirchsLab_Text_YoullTakeChikorita, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_TakeYourTime + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_TakeYourTime goto LittlerootTown_ProfessorBirchsLab_EventScript_GiveChikorita end @@ -357,13 +338,11 @@ LittlerootTown_ProfessorBirchsLab_EventScript_TakeYourTime:: end LittlerootTown_ProfessorBirchsLab_EventScript_GiveCyndaquil:: - bufferspeciesname 0, SPECIES_CYNDAQUIL + bufferspeciesname STR_VAR_1, SPECIES_CYNDAQUIL setvar VAR_TEMP_1, SPECIES_CYNDAQUIL - givemon SPECIES_CYNDAQUIL, 5, ITEM_NONE - compare VAR_RESULT, 0 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_SendCyndaquilToParty - compare VAR_RESULT, 1 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_SendCyndaquilToPC + givemon SPECIES_CYNDAQUIL, 5 + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, LittlerootTown_ProfessorBirchsLab_EventScript_SendCyndaquilToParty + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, LittlerootTown_ProfessorBirchsLab_EventScript_SendCyndaquilToPC hidemonpic goto Common_EventScript_NoMoreRoomForPokemon end @@ -372,8 +351,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_SendCyndaquilToParty:: call LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedJohtoStarter removeobject LOCALID_BALL_CYNDAQUIL msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedCyndaquil + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedCyndaquil call Common_EventScript_GetGiftMonPartySlot call Common_EventScript_NameReceivedPartyMon goto LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedCyndaquil @@ -383,8 +361,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_SendCyndaquilToPC:: call LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedJohtoStarter removeobject LOCALID_BALL_CYNDAQUIL msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_CyndaquilTransferredToPC + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_CyndaquilTransferredToPC call Common_EventScript_NameReceivedBoxMon goto LittlerootTown_ProfessorBirchsLab_EventScript_CyndaquilTransferredToPC end @@ -402,13 +379,11 @@ LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedCyndaquil:: end LittlerootTown_ProfessorBirchsLab_EventScript_GiveTotodile:: - bufferspeciesname 0, SPECIES_TOTODILE + bufferspeciesname STR_VAR_1, SPECIES_TOTODILE setvar VAR_TEMP_1, SPECIES_TOTODILE - givemon SPECIES_TOTODILE, 5, ITEM_NONE - compare VAR_RESULT, 0 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_SendTotodileToParty - compare VAR_RESULT, 1 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_SendTotodileToPC + givemon SPECIES_TOTODILE, 5 + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, LittlerootTown_ProfessorBirchsLab_EventScript_SendTotodileToParty + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, LittlerootTown_ProfessorBirchsLab_EventScript_SendTotodileToPC hidemonpic goto Common_EventScript_NoMoreRoomForPokemon end @@ -417,8 +392,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_SendTotodileToParty:: call LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedJohtoStarter removeobject LOCALID_BALL_TOTODILE msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedTotodile + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedTotodile call Common_EventScript_GetGiftMonPartySlot call Common_EventScript_NameReceivedPartyMon goto LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedTotodile @@ -428,8 +402,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_SendTotodileToPC:: call LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedJohtoStarter removeobject LOCALID_BALL_TOTODILE msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_TotodileTransferredToPC + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_TotodileTransferredToPC call Common_EventScript_NameReceivedBoxMon goto LittlerootTown_ProfessorBirchsLab_EventScript_TotodileTransferredToPC end @@ -447,13 +420,11 @@ LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedTotodile:: end LittlerootTown_ProfessorBirchsLab_EventScript_GiveChikorita:: - bufferspeciesname 0, SPECIES_CHIKORITA + bufferspeciesname STR_VAR_1, SPECIES_CHIKORITA setvar VAR_TEMP_1, SPECIES_CHIKORITA - givemon SPECIES_CHIKORITA, 5, ITEM_NONE - compare VAR_RESULT, 0 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_SendChikoritaToParty - compare VAR_RESULT, 1 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_SendChikoritaToPC + givemon SPECIES_CHIKORITA, 5 + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, LittlerootTown_ProfessorBirchsLab_EventScript_SendChikoritaToParty + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, LittlerootTown_ProfessorBirchsLab_EventScript_SendChikoritaToPC hidemonpic goto Common_EventScript_NoMoreRoomForPokemon end @@ -462,8 +433,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_SendChikoritaToParty:: call LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedJohtoStarter removeobject LOCALID_BALL_CHIKORITA msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedChikorita + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedChikorita call Common_EventScript_GetGiftMonPartySlot call Common_EventScript_NameReceivedPartyMon goto LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedChikorita @@ -473,8 +443,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_SendChikoritaToPC:: call LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedJohtoStarter removeobject LOCALID_BALL_CHIKORITA msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_ChikoritaTransferredToPC + goto_if_eq VAR_RESULT, NO, LittlerootTown_ProfessorBirchsLab_EventScript_ChikoritaTransferredToPC call Common_EventScript_NameReceivedBoxMon goto LittlerootTown_ProfessorBirchsLab_EventScript_ChikoritaTransferredToPC end @@ -501,10 +470,8 @@ LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedJohtoStarter:: LittlerootTown_ProfessorBirchsLab_EventScript_Birch:: lock faceplayer - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 5 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_CanHaveAnyOneOfRarePokemon - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_GrassyPatchWaiting + goto_if_eq VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 5, LittlerootTown_ProfessorBirchsLab_EventScript_CanHaveAnyOneOfRarePokemon + goto_if_eq VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2, LittlerootTown_ProfessorBirchsLab_EventScript_GrassyPatchWaiting goto_if_unset FLAG_HAS_MATCH_CALL, LittlerootTown_ProfessorBirchsLab_EventScript_TryRatePokedexOrRegister goto_if_unset FLAG_ENABLE_PROF_BIRCH_MATCH_CALL, EventScript_RegisterProfBirch goto LittlerootTown_ProfessorBirchsLab_EventScript_TryRatePokedexOrRegister @@ -522,12 +489,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_GrassyPatchWaiting:: LittlerootTown_ProfessorBirchsLab_EventScript_TryRatePokedexOrRegister:: goto_if_unset FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_UNKNOWN_0x380, ProfBirch_EventScript_RatePokedexOrRegister - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 3 - goto_if_eq ProfBirch_EventScript_RatePokedexOrRegister - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 - goto_if_ge ProfBirch_EventScript_RatePokedexOrRegister - compare VAR_BIRCH_LAB_STATE, 5 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_PokemonAwait + goto_if_eq VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 3, ProfBirch_EventScript_RatePokedexOrRegister + goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6, ProfBirch_EventScript_RatePokedexOrRegister + goto_if_eq VAR_BIRCH_LAB_STATE, 5, LittlerootTown_ProfessorBirchsLab_EventScript_PokemonAwait msgbox LittlerootTown_ProfessorBirchsLab_Text_BirchRivalGoneHome, MSGBOX_DEFAULT release end @@ -553,13 +517,11 @@ LittlerootTown_ProfessorBirchsLab_EventScript_GivePokedex:: closemessage applymovement LOCALID_RIVAL, LittlerootTown_ProfessorBirchsLab_Movement_RivalApproachPlayer waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_MayGivePokeBalls - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_BrendanGivePokeBalls + call_if_eq VAR_RESULT, MALE, LittlerootTown_ProfessorBirchsLab_EventScript_MayGivePokeBalls + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_ProfessorBirchsLab_EventScript_BrendanGivePokeBalls setvar VAR_BIRCH_LAB_STATE, 5 setflag FLAG_ADVENTURE_STARTED setvar VAR_OLDALE_TOWN_STATE, 1 @@ -571,8 +533,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_GivePokedex:: LittlerootTown_ProfessorBirchsLab_EventScript_MayGivePokeBalls:: msgbox LittlerootTown_ProfessorBirchsLab_Text_MayGotPokedexTooTakeThese, MSGBOX_DEFAULT giveitem ITEM_POKE_BALL, 5 - compare VAR_RESULT, FALSE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_MayNoRoomForPokeBalls + call_if_eq VAR_RESULT, FALSE, LittlerootTown_ProfessorBirchsLab_EventScript_MayNoRoomForPokeBalls msgbox LittlerootTown_ProfessorBirchsLab_Text_CatchCutePokemonWithPokeBalls, MSGBOX_DEFAULT setvar VAR_RESULT, 0 return @@ -580,8 +541,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_MayGivePokeBalls:: LittlerootTown_ProfessorBirchsLab_EventScript_BrendanGivePokeBalls:: msgbox LittlerootTown_ProfessorBirchsLab_Text_BrendanGotPokedexTooTakeThese, MSGBOX_DEFAULT giveitem ITEM_POKE_BALL, 5 - compare VAR_RESULT, FALSE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_BrendanNoRoomForPokeBalls + call_if_eq VAR_RESULT, FALSE, LittlerootTown_ProfessorBirchsLab_EventScript_BrendanNoRoomForPokeBalls msgbox LittlerootTown_ProfessorBirchsLab_Text_CatchCoolPokemonWithPokeBalls, MSGBOX_DEFAULT setvar VAR_RESULT, 1 return @@ -611,7 +571,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_BrendanNoRoomForPokeBalls:: LittlerootTown_ProfessorBirchsLab_Movement_RivalApproachPlayer: walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end LittlerootTown_ProfessorBirchsLab_EventScript_Machine:: @@ -621,17 +581,12 @@ LittlerootTown_ProfessorBirchsLab_EventScript_Machine:: LittlerootTown_ProfessorBirchsLab_EventScript_Rival:: lock faceplayer - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 5 - goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_RivalFuturePlans - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 - goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_RivalHaveYouGoneToBattleFrontier - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 - goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_RivalTakeBreakFromFieldwork + goto_if_eq VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 5, LittlerootTown_ProfessorBirchsLab_EventScript_RivalFuturePlans + goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6, LittlerootTown_ProfessorBirchsLab_EventScript_RivalHaveYouGoneToBattleFrontier + goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2, LittlerootTown_ProfessorBirchsLab_EventScript_RivalTakeBreakFromFieldwork checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_MayWhereShouldIGoNext - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_BrendanWhereShouldIGoNext + call_if_eq VAR_RESULT, MALE, LittlerootTown_ProfessorBirchsLab_EventScript_MayWhereShouldIGoNext + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_ProfessorBirchsLab_EventScript_BrendanWhereShouldIGoNext release end @@ -645,10 +600,8 @@ LittlerootTown_ProfessorBirchsLab_EventScript_BrendanWhereShouldIGoNext:: LittlerootTown_ProfessorBirchsLab_EventScript_RivalFuturePlans:: checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_MayWhatNextImStayingHere - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_BrendanPreferCollectingSlowly + call_if_eq VAR_RESULT, MALE, LittlerootTown_ProfessorBirchsLab_EventScript_MayWhatNextImStayingHere + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_ProfessorBirchsLab_EventScript_BrendanPreferCollectingSlowly release end @@ -662,10 +615,8 @@ LittlerootTown_ProfessorBirchsLab_EventScript_BrendanPreferCollectingSlowly: LittlerootTown_ProfessorBirchsLab_EventScript_RivalHaveYouGoneToBattleFrontier:: checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_MayHaveYouGoneToBattleFrontier - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_BrendanHaveYouGoneToBattleFrontier + call_if_eq VAR_RESULT, MALE, LittlerootTown_ProfessorBirchsLab_EventScript_MayHaveYouGoneToBattleFrontier + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_ProfessorBirchsLab_EventScript_BrendanHaveYouGoneToBattleFrontier release end @@ -679,10 +630,8 @@ LittlerootTown_ProfessorBirchsLab_EventScript_BrendanHaveYouGoneToBattleFrontier LittlerootTown_ProfessorBirchsLab_EventScript_RivalTakeBreakFromFieldwork:: checkplayergender - compare VAR_RESULT, MALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_MayTakeBreakFromFieldwork - compare VAR_RESULT, FEMALE - call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_BrendanTakeBreakFromFieldwork + call_if_eq VAR_RESULT, MALE, LittlerootTown_ProfessorBirchsLab_EventScript_MayTakeBreakFromFieldwork + call_if_eq VAR_RESULT, FEMALE, LittlerootTown_ProfessorBirchsLab_EventScript_BrendanTakeBreakFromFieldwork release end diff --git a/data/maps/MagmaHideout_4F/scripts.inc b/data/maps/MagmaHideout_4F/scripts.inc index a89054b7af..ef29d1180a 100644 --- a/data/maps/MagmaHideout_4F/scripts.inc +++ b/data/maps/MagmaHideout_4F/scripts.inc @@ -23,7 +23,7 @@ MagmaHideout_4F_EventScript_Maxie:: playfanfare MUS_AWAKEN_LEGEND playse SE_ORB special DoOrbEffect - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 150 removeobject LOCALID_GROUDON_SLEEPING @@ -55,7 +55,7 @@ MagmaHideout_4F_EventScript_Maxie:: waitmovement 0 msgbox MagmaHideout_4F_Text_MaxieGroudonWhatsWrong, MSGBOX_DEFAULT closemessage - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 30 applymovement LOCALID_MAXIE, Common_Movement_FacePlayer diff --git a/data/maps/MarineCave_End/scripts.inc b/data/maps/MarineCave_End/scripts.inc index 47bbf9aada..a7ff583695 100644 --- a/data/maps/MarineCave_End/scripts.inc +++ b/data/maps/MarineCave_End/scripts.inc @@ -11,8 +11,7 @@ MarineCave_End_OnResume: MarineCave_End_EventScript_TryRemoveKyogre:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject LOCALID_KYOGRE return @@ -32,23 +31,20 @@ MarineCave_End_EventScript_Kyogre:: applymovement LOCALID_KYOGRE, MarineCave_End_Movement_KyogreApproach waitmovement 0 waitse - playmoncry SPECIES_KYOGRE, 2 + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_KYOGRE - setwildbattle SPECIES_KYOGRE, 70, ITEM_NONE + setwildbattle SPECIES_KYOGRE, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE setvar VAR_TEMP_1, 0 specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq MarineCave_End_EventScript_DefeatedKyogre - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq MarineCave_End_EventScript_RanFromKyogre - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq MarineCave_End_EventScript_RanFromKyogre + goto_if_eq VAR_RESULT, B_OUTCOME_WON, MarineCave_End_EventScript_DefeatedKyogre + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, MarineCave_End_EventScript_RanFromKyogre + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, MarineCave_End_EventScript_RanFromKyogre setvar VAR_SHOULD_END_ABNORMAL_WEATHER, 1 setflag FLAG_DEFEATED_KYOGRE releaseall diff --git a/data/maps/MarineCave_Entrance/scripts.inc b/data/maps/MarineCave_Entrance/scripts.inc index a075d2c30d..172a19d26c 100644 --- a/data/maps/MarineCave_Entrance/scripts.inc +++ b/data/maps/MarineCave_Entrance/scripts.inc @@ -3,6 +3,6 @@ MarineCave_Entrance_MapScripts:: .byte 0 MarineCave_Entrance_OnResume: - setdivewarp MAP_UNDERWATER_MARINE_CAVE, 255, 9, 6 + setdivewarp MAP_UNDERWATER_MARINE_CAVE, 9, 6 end diff --git a/data/maps/MauvilleCity/scripts.inc b/data/maps/MauvilleCity/scripts.inc index 748fbd3c79..2ad39aec1c 100644 --- a/data/maps/MauvilleCity/scripts.inc +++ b/data/maps/MauvilleCity/scripts.inc @@ -90,7 +90,7 @@ MauvilleCity_EventScript_UncleAskPlayerToBattleWally:: MauvilleCity_EventScript_Wally:: lockall goto_if_set FLAG_DECLINED_WALLY_BATTLE_MAUVILLE, MauvilleCity_EventScript_WallyRequestBattleAgain - applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox MauvilleCity_Text_WallyWantToChallengeGym, MSGBOX_DEFAULT msgbox MauvilleCity_Text_UncleYourePushingIt, MSGBOX_DEFAULT @@ -107,10 +107,8 @@ MauvilleCity_EventScript_Wally:: end MauvilleCity_EventScript_BattleWallyPrompt:: - compare VAR_RESULT, YES - call_if_eq MauvilleCity_EventScript_BattleWally - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_EventScript_DeclineWallyBattle + call_if_eq VAR_RESULT, YES, MauvilleCity_EventScript_BattleWally + goto_if_eq VAR_RESULT, NO, MauvilleCity_EventScript_DeclineWallyBattle closemessage switch VAR_FACING case DIR_NORTH, MauvilleCity_EventScript_WallyAndUncleExitNorth @@ -122,7 +120,7 @@ MauvilleCity_EventScript_WallyAndUncleExitNorth:: applymovement LOCALID_WALLY, MauvilleCity_Movement_WallyExitNorth1 applymovement LOCALID_WALLYS_UNCLE, MauvilleCity_Movement_WallysUncleExitNorth1 waitmovement 0 - applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 30 applymovement OBJ_EVENT_ID_PLAYER, MauvilleCity_Movement_PlayerFaceUncleNorth @@ -142,7 +140,7 @@ MauvilleCity_EventScript_WallyAndUncleExitEast:: applymovement LOCALID_WALLY, MauvilleCity_Movement_WallyExitEast1 applymovement LOCALID_WALLYS_UNCLE, MauvilleCity_Movement_WallysUncleExitEast1 waitmovement 0 - applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 30 applymovement LOCALID_WALLYS_UNCLE, MauvilleCity_Movement_WallysUncleApproachPlayerEast @@ -164,19 +162,15 @@ MauvilleCity_EventScript_DefeatedWally:: setflag FLAG_DEFEATED_WALLY_MAUVILLE setvar VAR_WALLY_CALL_STEP_COUNTER, 0 setflag FLAG_ENABLE_FIRST_WALLY_POKENAV_CALL - compare VAR_FACING, DIR_NORTH - call_if_eq MauvilleCity_EventScript_ScottApproachPlayerNorth - compare VAR_FACING, DIR_EAST - call_if_eq MauvilleCity_EventScript_ScottApproachPlayerEast - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + call_if_eq VAR_FACING, DIR_NORTH, MauvilleCity_EventScript_ScottApproachPlayerNorth + call_if_eq VAR_FACING, DIR_EAST, MauvilleCity_EventScript_ScottApproachPlayerEast + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox MauvilleCity_Text_ScottYouDidntHoldBack, MSGBOX_DEFAULT closemessage addvar VAR_SCOTT_STATE, 1 - compare VAR_FACING, DIR_NORTH - call_if_eq MauvilleCity_EventScript_ScottExitNorth - compare VAR_FACING, DIR_EAST - call_if_eq MauvilleCity_EventScript_ScottExitEast + call_if_eq VAR_FACING, DIR_NORTH, MauvilleCity_EventScript_ScottExitNorth + call_if_eq VAR_FACING, DIR_EAST, MauvilleCity_EventScript_ScottExitEast removeobject LOCALID_SCOTT releaseall end @@ -209,13 +203,13 @@ MauvilleCity_EventScript_ScottExitEast:: MauvilleCity_EventScript_BattleWally:: msgbox MauvilleCity_Text_WallyHereICome, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_WALLY_MAUVILLE, MauvilleCity_Text_WallyDefeat - applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox MauvilleCity_Text_WallyIllGoBackToVerdanturf, MSGBOX_DEFAULT applymovement LOCALID_WALLY, Common_Movement_FacePlayer waitmovement 0 msgbox MauvilleCity_Text_ThankYouNotEnoughToBattle, MSGBOX_DEFAULT - applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox MauvilleCity_Text_UncleNoNeedToBeDown, MSGBOX_DEFAULT return @@ -280,35 +274,35 @@ MauvilleCity_Movement_WallyExitEast2: MauvilleCity_Movement_PlayerWatchWallyExitNorth2: delay_16 delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left step_end MauvilleCity_Movement_PlayerWatchWallyExitEast2: delay_16 delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end MauvilleCity_Movement_PlayerWatchScottExitNorth: delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end MauvilleCity_Movement_PlayerWatchScottExitEast: delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end MauvilleCity_Movement_PlayerWatchWallyExitEast1: delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end MauvilleCity_Movement_PlayerWatchWallyExitNorth1: delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end MauvilleCity_Movement_WallysUncleExitNorth1: @@ -331,13 +325,13 @@ MauvilleCity_Movement_PlayerFaceUncleNorth: delay_16 delay_8 delay_4 - walk_in_place_fastest_down + walk_in_place_faster_down step_end MauvilleCity_Movement_WallysUncleApproachPlayerNorth: walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end MauvilleCity_Movement_WallysUncleApproachPlayerEast: @@ -379,7 +373,7 @@ MauvilleCity_Movement_ScottApproachPlayerNorth: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end MauvilleCity_Movement_ScottApproachPlayerEast: @@ -425,8 +419,7 @@ MauvilleCity_EventScript_Wattson:: lock faceplayer goto_if_set FLAG_GOT_TM24_FROM_WATTSON, MauvilleCity_EventScript_ReceivedThunderbolt - compare VAR_NEW_MAUVILLE_STATE, 2 - goto_if_eq MauvilleCity_EventScript_CompletedNewMauville + goto_if_eq VAR_NEW_MAUVILLE_STATE, 2, MauvilleCity_EventScript_CompletedNewMauville goto_if_set FLAG_GOT_BASEMENT_KEY_FROM_WATTSON, MauvilleCity_EventScript_BegunNewMauville msgbox MauvilleCity_Text_WattsonNeedFavorTakeKey, MSGBOX_DEFAULT giveitem ITEM_BASEMENT_KEY @@ -443,8 +436,7 @@ MauvilleCity_EventScript_BegunNewMauville:: MauvilleCity_EventScript_CompletedNewMauville:: msgbox MauvilleCity_Text_WattsonThanksTakeTM, MSGBOX_DEFAULT giveitem ITEM_TM24 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_GOT_TM24_FROM_WATTSON msgbox MauvilleCity_Text_WattsonYoungTakeCharge, MSGBOX_DEFAULT release diff --git a/data/maps/MauvilleCity_BikeShop/scripts.inc b/data/maps/MauvilleCity_BikeShop/scripts.inc index 45efbe8f3b..0893384101 100644 --- a/data/maps/MauvilleCity_BikeShop/scripts.inc +++ b/data/maps/MauvilleCity_BikeShop/scripts.inc @@ -8,18 +8,14 @@ MauvilleCity_BikeShop_EventScript_Rydel:: goto_if_set FLAG_DECLINED_BIKE, MauvilleCity_BikeShop_EventScript_SkipGreeting msgbox MauvilleCity_BikeShop_Text_RydelGreeting, MSGBOX_DEFAULT msgbox MauvilleCity_BikeShop_Text_DidYouComeFromFarAway, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq MauvilleCity_BikeShop_EventScript_YesFar - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_BikeShop_EventScript_NotFar + goto_if_eq VAR_RESULT, YES, MauvilleCity_BikeShop_EventScript_YesFar + goto_if_eq VAR_RESULT, NO, MauvilleCity_BikeShop_EventScript_NotFar end MauvilleCity_BikeShop_EventScript_SkipGreeting:: msgbox MauvilleCity_BikeShop_Text_DidYouComeFromFarAway, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq MauvilleCity_BikeShop_EventScript_YesFar - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_BikeShop_EventScript_NotFar + goto_if_eq VAR_RESULT, YES, MauvilleCity_BikeShop_EventScript_YesFar + goto_if_eq VAR_RESULT, NO, MauvilleCity_BikeShop_EventScript_NotFar end MauvilleCity_BikeShop_EventScript_ChooseBike:: @@ -62,21 +58,17 @@ MauvilleCity_BikeShop_EventScript_ComeBackToSwitchBikes:: MauvilleCity_BikeShop_EventScript_AskSwitchBikes:: msgbox MauvilleCity_BikeShop_Text_WantToSwitchBikes, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq MauvilleCity_BikeShop_EventScript_SwitchBikes - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_BikeShop_EventScript_KeepBike + goto_if_eq VAR_RESULT, YES, MauvilleCity_BikeShop_EventScript_SwitchBikes + goto_if_eq VAR_RESULT, NO, MauvilleCity_BikeShop_EventScript_KeepBike end @ If the player does not have a bike on them Rydel assumes its stored in the PC MauvilleCity_BikeShop_EventScript_SwitchBikes:: msgbox MauvilleCity_BikeShop_Text_IllSwitchBikes, MSGBOX_DEFAULT - checkitem ITEM_ACRO_BIKE, 1 - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_BikeShop_EventScript_SwitchAcroForMach - checkitem ITEM_MACH_BIKE, 1 - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_BikeShop_EventScript_SwitchMachForAcro + checkitem ITEM_ACRO_BIKE + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_BikeShop_EventScript_SwitchAcroForMach + checkitem ITEM_MACH_BIKE + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_BikeShop_EventScript_SwitchMachForAcro msgbox MauvilleCity_BikeShop_Text_OhYourBikeIsInPC, MSGBOX_DEFAULT release end diff --git a/data/maps/MauvilleCity_GameCorner/scripts.inc b/data/maps/MauvilleCity_GameCorner/scripts.inc index 896dfa6807..b7c8603a33 100644 --- a/data/maps/MauvilleCity_GameCorner/scripts.inc +++ b/data/maps/MauvilleCity_GameCorner/scripts.inc @@ -16,12 +16,11 @@ MauvilleCity_GameCorner_EventScript_CoinsClerk:: lock faceplayer msgbox MauvilleCity_GameCorner_Text_ThisIsMauvilleGameCorner, MSGBOX_DEFAULT - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NeedCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NeedCoinCase message MauvilleCity_GameCorner_Text_WereYouLookingForCoins waitmessage - showmoneybox 0, 0, 0 + showmoneybox 0, 0 showcoinsbox 1, 6 goto MauvilleCity_GameCorner_EventScript_ChooseCoinsDefault50 @@ -44,14 +43,12 @@ MauvilleCity_GameCorner_EventScript_ChooseCoinsDefault500:: MauvilleCity_GameCorner_EventScript_Buy50Coins:: checkcoins VAR_TEMP_1 - compare VAR_TEMP_1, (MAX_COINS + 1 - 50) - goto_if_ge MauvilleCity_GameCorner_EventScript_NoRoomForCoins - checkmoney COINS_PRICE_50, 0 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NotEnoughMoney + goto_if_ge VAR_TEMP_1, (MAX_COINS + 1 - 50), MauvilleCity_GameCorner_EventScript_NoRoomForCoins + checkmoney COINS_PRICE_50 + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NotEnoughMoney addcoins 50 - removemoney COINS_PRICE_50, 0 - updatemoneybox 0, 0 + removemoney COINS_PRICE_50 + updatemoneybox updatecoinsbox 1, 6 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_ThankYouHereAreYourCoins, MSGBOX_DEFAULT @@ -62,14 +59,12 @@ MauvilleCity_GameCorner_EventScript_Buy50Coins:: MauvilleCity_GameCorner_EventScript_Buy500Coins:: checkcoins VAR_TEMP_1 - compare VAR_TEMP_1, (MAX_COINS + 1 - 500) - goto_if_ge MauvilleCity_GameCorner_EventScript_NoRoomForCoins - checkmoney COINS_PRICE_500, 0 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NotEnoughMoney + goto_if_ge VAR_TEMP_1, (MAX_COINS + 1 - 500), MauvilleCity_GameCorner_EventScript_NoRoomForCoins + checkmoney COINS_PRICE_500 + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NotEnoughMoney addcoins 500 - removemoney COINS_PRICE_500, 0 - updatemoneybox 0, 0 + removemoney COINS_PRICE_500 + updatemoneybox updatecoinsbox 1, 6 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_ThankYouHereAreYourCoins, MSGBOX_DEFAULT @@ -108,9 +103,8 @@ MauvilleCity_GameCorner_EventScript_PrizeCornerDolls:: lock faceplayer msgbox MauvilleCity_GameCorner_Text_ExchangeCoinsForPrizes, MSGBOX_DEFAULT - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_GameCorner_EventScript_ChooseDollPrizeMessage + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_GameCorner_EventScript_ChooseDollPrizeMessage release end @@ -138,23 +132,22 @@ MauvilleCity_GameCorner_EventScript_ChooseDollPrize:: MauvilleCity_GameCorner_EventScript_TreeckoDoll:: setvar VAR_TEMP_1, 1 - bufferdecorationname 0, DECOR_TREECKO_DOLL + bufferdecorationname STR_VAR_1, DECOR_TREECKO_DOLL goto MauvilleCity_GameCorner_EventScript_ConfirmDollPrize MauvilleCity_GameCorner_EventScript_TorchicDoll:: setvar VAR_TEMP_1, 2 - bufferdecorationname 0, DECOR_TORCHIC_DOLL + bufferdecorationname STR_VAR_1, DECOR_TORCHIC_DOLL goto MauvilleCity_GameCorner_EventScript_ConfirmDollPrize MauvilleCity_GameCorner_EventScript_MudkipDoll:: setvar VAR_TEMP_1, 3 - bufferdecorationname 0, DECOR_MUDKIP_DOLL + bufferdecorationname STR_VAR_1, DECOR_MUDKIP_DOLL goto MauvilleCity_GameCorner_EventScript_ConfirmDollPrize MauvilleCity_GameCorner_EventScript_ConfirmDollPrize:: msgbox MauvilleCity_GameCorner_Text_SoYourChoiceIsX, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_GameCorner_EventScript_CancelDollSelect + goto_if_eq VAR_RESULT, NO, MauvilleCity_GameCorner_EventScript_CancelDollSelect switch VAR_TEMP_1 case 1, MauvilleCity_GameCorner_EventScript_BuyTreeckoDoll case 2, MauvilleCity_GameCorner_EventScript_BuyTorchicDoll @@ -163,12 +156,10 @@ MauvilleCity_GameCorner_EventScript_ConfirmDollPrize:: MauvilleCity_GameCorner_EventScript_BuyTreeckoDoll:: checkcoins VAR_TEMP_2 - compare VAR_TEMP_2, DOLL_COINS - goto_if_lt MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForDoll - bufferdecorationname 1, DECOR_TREECKO_DOLL + goto_if_lt VAR_TEMP_2, DOLL_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForDoll + bufferdecorationname STR_VAR_2, DECOR_TREECKO_DOLL checkdecorspace DECOR_TREECKO_DOLL - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForDoll + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForDoll removecoins DOLL_COINS adddecoration DECOR_TREECKO_DOLL updatecoinsbox 1, 1 @@ -179,12 +170,10 @@ MauvilleCity_GameCorner_EventScript_BuyTreeckoDoll:: MauvilleCity_GameCorner_EventScript_BuyTorchicDoll:: checkcoins VAR_TEMP_2 - compare VAR_TEMP_2, DOLL_COINS - goto_if_lt MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForDoll - bufferdecorationname 1, DECOR_TORCHIC_DOLL + goto_if_lt VAR_TEMP_2, DOLL_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForDoll + bufferdecorationname STR_VAR_2, DECOR_TORCHIC_DOLL checkdecorspace DECOR_TORCHIC_DOLL - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForDoll + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForDoll removecoins DOLL_COINS adddecoration DECOR_TORCHIC_DOLL updatecoinsbox 1, 1 @@ -195,12 +184,10 @@ MauvilleCity_GameCorner_EventScript_BuyTorchicDoll:: MauvilleCity_GameCorner_EventScript_BuyMudkipDoll:: checkcoins VAR_TEMP_2 - compare VAR_TEMP_2, DOLL_COINS - goto_if_lt MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForDoll - bufferdecorationname 1, DECOR_MUDKIP_DOLL + goto_if_lt VAR_TEMP_2, DOLL_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForDoll + bufferdecorationname STR_VAR_2, DECOR_MUDKIP_DOLL checkdecorspace DECOR_MUDKIP_DOLL - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForDoll + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForDoll removecoins DOLL_COINS adddecoration DECOR_MUDKIP_DOLL updatecoinsbox 1, 1 @@ -229,9 +216,8 @@ MauvilleCity_GameCorner_EventScript_PrizeCornerTMs:: lock faceplayer msgbox MauvilleCity_GameCorner_Text_ExchangeCoinsForPrizes, MSGBOX_DEFAULT - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_GameCorner_EventScript_ChooseTMPrizeMessage + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_GameCorner_EventScript_ChooseTMPrizeMessage release end @@ -261,39 +247,38 @@ MauvilleCity_GameCorner_EventScript_ChooseTMPrize:: MauvilleCity_GameCorner_EventScript_TM32:: setvar VAR_TEMP_1, 1 - bufferitemname 0, ITEM_TM32 + bufferitemname STR_VAR_1, ITEM_TM32 setvar VAR_0x8004, ITEM_TM32 goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize MauvilleCity_GameCorner_EventScript_TM29:: setvar VAR_TEMP_1, 2 - bufferitemname 0, ITEM_TM29 + bufferitemname STR_VAR_1, ITEM_TM29 setvar VAR_0x8004, ITEM_TM29 goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize MauvilleCity_GameCorner_EventScript_TM35:: setvar VAR_TEMP_1, 3 - bufferitemname 0, ITEM_TM35 + bufferitemname STR_VAR_1, ITEM_TM35 setvar VAR_0x8004, ITEM_TM35 goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize MauvilleCity_GameCorner_EventScript_TM24:: setvar VAR_TEMP_1, 4 - bufferitemname 0, ITEM_TM24 + bufferitemname STR_VAR_1, ITEM_TM24 setvar VAR_0x8004, ITEM_TM24 goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize MauvilleCity_GameCorner_EventScript_TM13:: setvar VAR_TEMP_1, 5 - bufferitemname 0, ITEM_TM13 + bufferitemname STR_VAR_1, ITEM_TM13 setvar VAR_0x8004, ITEM_TM13 goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize MauvilleCity_GameCorner_EventScript_ConfirmTMPrize:: special BufferTMHMMoveName msgbox MauvilleCity_GameCorner_Text_SoYourChoiceIsTheTMX, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_GameCorner_EventScript_CancelTMSelect + goto_if_eq VAR_RESULT, NO, MauvilleCity_GameCorner_EventScript_CancelTMSelect switch VAR_TEMP_1 case 1, MauvilleCity_GameCorner_EventScript_BuyTM32 case 2, MauvilleCity_GameCorner_EventScript_BuyTM29 @@ -304,11 +289,9 @@ MauvilleCity_GameCorner_EventScript_ConfirmTMPrize:: MauvilleCity_GameCorner_EventScript_BuyTM32:: checkcoins VAR_TEMP_2 - compare VAR_TEMP_2, TM32_COINS - goto_if_lt MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM32, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForTM + goto_if_lt VAR_TEMP_2, TM32_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM32 + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM removecoins TM32_COINS additem ITEM_TM32 updatecoinsbox 1, 1 @@ -319,11 +302,9 @@ MauvilleCity_GameCorner_EventScript_BuyTM32:: MauvilleCity_GameCorner_EventScript_BuyTM29:: checkcoins VAR_TEMP_2 - compare VAR_TEMP_2, TM29_COINS - goto_if_lt MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM29, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForTM + goto_if_lt VAR_TEMP_2, TM29_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM29 + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM removecoins TM29_COINS additem ITEM_TM29 updatecoinsbox 1, 1 @@ -334,11 +315,9 @@ MauvilleCity_GameCorner_EventScript_BuyTM29:: MauvilleCity_GameCorner_EventScript_BuyTM35:: checkcoins VAR_TEMP_2 - compare VAR_TEMP_2, TM35_COINS - goto_if_lt MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM35, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForTM + goto_if_lt VAR_TEMP_2, TM35_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM35 + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM removecoins TM35_COINS additem ITEM_TM35 updatecoinsbox 1, 1 @@ -349,11 +328,9 @@ MauvilleCity_GameCorner_EventScript_BuyTM35:: MauvilleCity_GameCorner_EventScript_BuyTM24:: checkcoins VAR_TEMP_2 - compare VAR_TEMP_2, TM24_COINS - goto_if_lt MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM24, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForTM + goto_if_lt VAR_TEMP_2, TM24_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM24 + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM removecoins TM24_COINS additem ITEM_TM24 updatecoinsbox 1, 1 @@ -364,11 +341,9 @@ MauvilleCity_GameCorner_EventScript_BuyTM24:: MauvilleCity_GameCorner_EventScript_BuyTM13:: checkcoins VAR_TEMP_2 - compare VAR_TEMP_2, TM13_COINS - goto_if_lt MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM13, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForTM + goto_if_lt VAR_TEMP_2, TM13_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM13 + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM removecoins TM13_COINS additem ITEM_TM13 updatecoinsbox 1, 1 @@ -406,8 +381,7 @@ MauvilleCity_GameCorner_EventScript_Girl:: faceplayer goto_if_set FLAG_RECEIVED_STARTER_DOLL, MauvilleCity_GameCorner_EventScript_ReceivedStarterDoll msgbox MauvilleCity_GameCorner_Text_GotTwoOfSameDollWantOne, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_GameCorner_EventScript_DeclineStarterDoll + goto_if_eq VAR_RESULT, NO, MauvilleCity_GameCorner_EventScript_DeclineStarterDoll switch VAR_STARTER_MON case 0, MauvilleCity_GameCorner_EventScript_GiveTreeckoDoll case 1, MauvilleCity_GameCorner_EventScript_GiveTorchicDoll @@ -415,10 +389,9 @@ MauvilleCity_GameCorner_EventScript_Girl:: end MauvilleCity_GameCorner_EventScript_GiveTreeckoDoll:: - bufferdecorationname 1, DECOR_TREECKO_DOLL + bufferdecorationname STR_VAR_2, DECOR_TREECKO_DOLL checkdecorspace DECOR_TREECKO_DOLL - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForStarterDoll + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForStarterDoll msgbox MauvilleCity_GameCorner_Text_HereYouGo2, MSGBOX_DEFAULT givedecoration DECOR_TREECKO_DOLL setflag FLAG_RECEIVED_STARTER_DOLL @@ -426,10 +399,9 @@ MauvilleCity_GameCorner_EventScript_GiveTreeckoDoll:: end MauvilleCity_GameCorner_EventScript_GiveTorchicDoll:: - bufferdecorationname 1, DECOR_TORCHIC_DOLL + bufferdecorationname STR_VAR_2, DECOR_TORCHIC_DOLL checkdecorspace DECOR_TORCHIC_DOLL - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForStarterDoll + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForStarterDoll msgbox MauvilleCity_GameCorner_Text_HereYouGo2, MSGBOX_DEFAULT givedecoration DECOR_TORCHIC_DOLL setflag FLAG_RECEIVED_STARTER_DOLL @@ -437,10 +409,9 @@ MauvilleCity_GameCorner_EventScript_GiveTorchicDoll:: end MauvilleCity_GameCorner_EventScript_GiveMudkipDoll:: - bufferdecorationname 1, DECOR_MUDKIP_DOLL + bufferdecorationname STR_VAR_2, DECOR_MUDKIP_DOLL checkdecorspace DECOR_MUDKIP_DOLL - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoRoomForStarterDoll + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForStarterDoll msgbox MauvilleCity_GameCorner_Text_HereYouGo2, MSGBOX_DEFAULT givedecoration DECOR_MUDKIP_DOLL setflag FLAG_RECEIVED_STARTER_DOLL @@ -466,9 +437,8 @@ MauvilleCity_GameCorner_EventScript_ReceivedStarterDoll:: MauvilleCity_GameCorner_EventScript_PokefanM:: lock faceplayer - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_GameCorner_EventScript_TryGive20Coins + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_GameCorner_EventScript_TryGive20Coins msgbox MauvilleCity_GameCorner_Text_NeedCoinCaseGoNextDoor, MSGBOX_DEFAULT goto MauvilleCity_GameCorner_EventScript_NPCReturnToSlots end @@ -476,8 +446,7 @@ MauvilleCity_GameCorner_EventScript_PokefanM:: MauvilleCity_GameCorner_EventScript_TryGive20Coins:: goto_if_set FLAG_RECEIVED_20_COINS, MauvilleCity_GameCorner_EventScript_PokefanMNormal checkcoins VAR_TEMP_1 - compare VAR_TEMP_1, 1 @ Only give 20 coins if player has no coins - goto_if_ge MauvilleCity_GameCorner_EventScript_PokefanMNormal + goto_if_ge VAR_TEMP_1, 1, MauvilleCity_GameCorner_EventScript_PokefanMNormal @ Only give 20 coins if player has no coins setflag FLAG_RECEIVED_20_COINS addcoins 20 msgbox MauvilleCity_GameCorner_Text_LuckOnlyLastSoLongTakeCoins, MSGBOX_DEFAULT @@ -534,9 +503,8 @@ MauvilleCity_GameCorner_EventScript_Woman:: MauvilleCity_GameCorner_EventScript_SlotMachine0:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 0 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -545,9 +513,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine0:: MauvilleCity_GameCorner_EventScript_SlotMachine1:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 1 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -556,9 +523,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine1:: MauvilleCity_GameCorner_EventScript_SlotMachine2:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 2 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -567,9 +533,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine2:: MauvilleCity_GameCorner_EventScript_SlotMachine3:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 3 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -578,9 +543,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine3:: MauvilleCity_GameCorner_EventScript_SlotMachine4:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 4 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -589,9 +553,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine4:: MauvilleCity_GameCorner_EventScript_SlotMachine5:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 5 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -600,9 +563,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine5:: MauvilleCity_GameCorner_EventScript_SlotMachine6:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 6 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -611,9 +573,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine6:: MauvilleCity_GameCorner_EventScript_SlotMachine7:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 7 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -622,9 +583,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine7:: MauvilleCity_GameCorner_EventScript_SlotMachine8:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 8 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -633,9 +593,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine8:: MauvilleCity_GameCorner_EventScript_SlotMachine9:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 9 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -644,9 +603,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine9:: MauvilleCity_GameCorner_EventScript_SlotMachine10:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 10 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT @@ -655,9 +613,8 @@ MauvilleCity_GameCorner_EventScript_SlotMachine10:: MauvilleCity_GameCorner_EventScript_SlotMachine11:: lockall - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 11 specialvar VAR_RESULT, GetSlotMachineId playslotmachine VAR_RESULT diff --git a/data/maps/MauvilleCity_Gym/scripts.inc b/data/maps/MauvilleCity_Gym/scripts.inc index 3c09ecfa20..de924d7d93 100644 --- a/data/maps/MauvilleCity_Gym/scripts.inc +++ b/data/maps/MauvilleCity_Gym/scripts.inc @@ -17,32 +17,32 @@ MauvilleCity_Gym_EventScript_UpdateBarriers:: end MauvilleCity_Gym_EventScript_SetAltBarriers:: - setmetatile 3, 11, METATILE_MauvilleGym_RedBeamV1_On, 1 - setmetatile 3, 12, METATILE_MauvilleGym_RedBeamV2_On, 1 - setmetatile 3, 13, METATILE_MauvilleGym_PoleTop_On, 1 - setmetatile 4, 10, METATILE_MauvilleGym_RedBeamH1_On, 0 - setmetatile 5, 10, METATILE_MauvilleGym_RedBeamH2_On, 0 - setmetatile 4, 11, METATILE_MauvilleGym_RedBeamH3_On, 1 - setmetatile 5, 11, METATILE_MauvilleGym_RedBeamH4_On, 1 - setmetatile 7, 10, METATILE_MauvilleGym_RedBeamH1_On, 0 - setmetatile 8, 10, METATILE_MauvilleGym_RedBeamH2_On, 0 - setmetatile 7, 11, METATILE_MauvilleGym_RedBeamH3_On, 1 - setmetatile 8, 11, METATILE_MauvilleGym_RedBeamH4_On, 1 - setmetatile 4, 13, METATILE_MauvilleGym_GreenBeamH1_Off, 0 - setmetatile 5, 13, METATILE_MauvilleGym_GreenBeamH2_Off, 0 - setmetatile 4, 14, METATILE_MauvilleGym_GreenBeamH3_Off, 0 - setmetatile 5, 14, METATILE_MauvilleGym_GreenBeamH4_Off, 0 - setmetatile 1, 10, METATILE_MauvilleGym_GreenBeamH1_Off, 0 - setmetatile 2, 10, METATILE_MauvilleGym_GreenBeamH2_Off, 0 - setmetatile 1, 11, METATILE_MauvilleGym_GreenBeamH3_Off, 0 - setmetatile 2, 11, METATILE_MauvilleGym_GreenBeamH4_Off, 0 - setmetatile 6, 8, METATILE_MauvilleGym_PoleBottom_On, 1 - setmetatile 6, 9, METATILE_MauvilleGym_FloorTile, 0 - setmetatile 6, 10, METATILE_MauvilleGym_PoleTop_Off, 0 - setmetatile 4, 6, METATILE_MauvilleGym_GreenBeamH1_Off, 0 - setmetatile 5, 6, METATILE_MauvilleGym_GreenBeamH2_Off, 0 - setmetatile 4, 7, METATILE_MauvilleGym_GreenBeamH3_Off, 0 - setmetatile 5, 7, METATILE_MauvilleGym_GreenBeamH4_Off, 0 + setmetatile 3, 11, METATILE_MauvilleGym_RedBeamV1_On, TRUE + setmetatile 3, 12, METATILE_MauvilleGym_RedBeamV2_On, TRUE + setmetatile 3, 13, METATILE_MauvilleGym_PoleTop_On, TRUE + setmetatile 4, 10, METATILE_MauvilleGym_RedBeamH1_On, FALSE + setmetatile 5, 10, METATILE_MauvilleGym_RedBeamH2_On, FALSE + setmetatile 4, 11, METATILE_MauvilleGym_RedBeamH3_On, TRUE + setmetatile 5, 11, METATILE_MauvilleGym_RedBeamH4_On, TRUE + setmetatile 7, 10, METATILE_MauvilleGym_RedBeamH1_On, FALSE + setmetatile 8, 10, METATILE_MauvilleGym_RedBeamH2_On, FALSE + setmetatile 7, 11, METATILE_MauvilleGym_RedBeamH3_On, TRUE + setmetatile 8, 11, METATILE_MauvilleGym_RedBeamH4_On, TRUE + setmetatile 4, 13, METATILE_MauvilleGym_GreenBeamH1_Off, FALSE + setmetatile 5, 13, METATILE_MauvilleGym_GreenBeamH2_Off, FALSE + setmetatile 4, 14, METATILE_MauvilleGym_GreenBeamH3_Off, FALSE + setmetatile 5, 14, METATILE_MauvilleGym_GreenBeamH4_Off, FALSE + setmetatile 1, 10, METATILE_MauvilleGym_GreenBeamH1_Off, FALSE + setmetatile 2, 10, METATILE_MauvilleGym_GreenBeamH2_Off, FALSE + setmetatile 1, 11, METATILE_MauvilleGym_GreenBeamH3_Off, FALSE + setmetatile 2, 11, METATILE_MauvilleGym_GreenBeamH4_Off, FALSE + setmetatile 6, 8, METATILE_MauvilleGym_PoleBottom_On, TRUE + setmetatile 6, 9, METATILE_MauvilleGym_FloorTile, FALSE + setmetatile 6, 10, METATILE_MauvilleGym_PoleTop_Off, FALSE + setmetatile 4, 6, METATILE_MauvilleGym_GreenBeamH1_Off, FALSE + setmetatile 5, 6, METATILE_MauvilleGym_GreenBeamH2_Off, FALSE + setmetatile 4, 7, METATILE_MauvilleGym_GreenBeamH3_Off, FALSE + setmetatile 5, 7, METATILE_MauvilleGym_GreenBeamH4_Off, FALSE end MauvilleCity_Gym_EventScript_Switch1Pressed:: @@ -76,11 +76,9 @@ MauvilleCity_Gym_EventScript_DeactivatePuzzle:: MauvilleCity_Gym_EventScript_Wattson:: trainerbattle_single TRAINER_WATTSON_1, MauvilleCity_Gym_Text_WattsonIntro, MauvilleCity_Gym_Text_WattsonDefeat, MauvilleCity_Gym_EventScript_WattsonDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_Gym_EventScript_WattsonRematch + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_Gym_EventScript_WattsonRematch goto_if_unset FLAG_RECEIVED_TM34, MauvilleCity_Gym_EventScript_GiveShockWave2 - compare VAR_NEW_MAUVILLE_STATE, 2 - goto_if_eq MauvilleCity_Gym_EventScript_CompletedNewMauville + goto_if_eq VAR_NEW_MAUVILLE_STATE, 2, MauvilleCity_Gym_EventScript_CompletedNewMauville msgbox MauvilleCity_Gym_Text_WattsonPostBattle, MSGBOX_DEFAULT release end @@ -95,8 +93,7 @@ MauvilleCity_Gym_EventScript_WattsonDefeated:: setflag FLAG_DEFEATED_MAUVILLE_GYM setflag FLAG_BADGE03_GET addvar VAR_PETALBURG_GYM_STATE, 1 - compare VAR_PETALBURG_GYM_STATE, 6 - call_if_eq Common_EventScript_ReadyPetalburgGymForBattle + call_if_eq VAR_PETALBURG_GYM_STATE, 6, Common_EventScript_ReadyPetalburgGymForBattle setvar VAR_0x8008, 3 call Common_EventScript_SetGymTrainers special MauvilleGymDeactivatePuzzle @@ -116,8 +113,7 @@ MauvilleCity_Gym_EventScript_WattsonDefeated:: MauvilleCity_Gym_EventScript_GiveShockWave2:: giveitem ITEM_TM34 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox MauvilleCity_Gym_Text_ExplainShockWave, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM34 release @@ -125,8 +121,7 @@ MauvilleCity_Gym_EventScript_GiveShockWave2:: MauvilleCity_Gym_EventScript_GiveShockWave:: giveitem ITEM_TM34 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox MauvilleCity_Gym_Text_ExplainShockWave, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM34 return @@ -144,8 +139,7 @@ MauvilleCity_Gym_EventScript_WattsonRematch:: MauvilleCity_Gym_EventScript_Switch1:: lockall goto_if_set FLAG_DEFEATED_MAUVILLE_GYM, MauvilleCity_Gym_EventScript_SwitchDoNothing - compare VAR_MAUVILLE_GYM_STATE, 1 - goto_if_eq MauvilleCity_Gym_EventScript_SwitchDoNothing + goto_if_eq VAR_MAUVILLE_GYM_STATE, 1, MauvilleCity_Gym_EventScript_SwitchDoNothing setvar VAR_MAUVILLE_GYM_STATE, 1 setvar VAR_0x8004, 0 goto MauvilleCity_Gym_EventScript_PressFloorSwitch @@ -154,8 +148,7 @@ MauvilleCity_Gym_EventScript_Switch1:: MauvilleCity_Gym_EventScript_Switch2:: lockall goto_if_set FLAG_DEFEATED_MAUVILLE_GYM, MauvilleCity_Gym_EventScript_SwitchDoNothing - compare VAR_MAUVILLE_GYM_STATE, 2 - goto_if_eq MauvilleCity_Gym_EventScript_SwitchDoNothing + goto_if_eq VAR_MAUVILLE_GYM_STATE, 2, MauvilleCity_Gym_EventScript_SwitchDoNothing setvar VAR_MAUVILLE_GYM_STATE, 2 setvar VAR_0x8004, 1 goto MauvilleCity_Gym_EventScript_PressFloorSwitch @@ -164,8 +157,7 @@ MauvilleCity_Gym_EventScript_Switch2:: MauvilleCity_Gym_EventScript_Switch3:: lockall goto_if_set FLAG_DEFEATED_MAUVILLE_GYM, MauvilleCity_Gym_EventScript_SwitchDoNothing - compare VAR_MAUVILLE_GYM_STATE, 3 - goto_if_eq MauvilleCity_Gym_EventScript_SwitchDoNothing + goto_if_eq VAR_MAUVILLE_GYM_STATE, 3, MauvilleCity_Gym_EventScript_SwitchDoNothing setvar VAR_MAUVILLE_GYM_STATE, 3 setvar VAR_0x8004, 2 goto MauvilleCity_Gym_EventScript_PressFloorSwitch @@ -174,8 +166,7 @@ MauvilleCity_Gym_EventScript_Switch3:: MauvilleCity_Gym_EventScript_Switch4:: lockall goto_if_set FLAG_DEFEATED_MAUVILLE_GYM, MauvilleCity_Gym_EventScript_SwitchDoNothing - compare VAR_MAUVILLE_GYM_STATE, 4 - goto_if_eq MauvilleCity_Gym_EventScript_SwitchDoNothing + goto_if_eq VAR_MAUVILLE_GYM_STATE, 4, MauvilleCity_Gym_EventScript_SwitchDoNothing setvar VAR_MAUVILLE_GYM_STATE, 4 setvar VAR_0x8004, 3 goto MauvilleCity_Gym_EventScript_PressFloorSwitch diff --git a/data/maps/MauvilleCity_House2/scripts.inc b/data/maps/MauvilleCity_House2/scripts.inc index 178b79f9b4..193e0c04ce 100644 --- a/data/maps/MauvilleCity_House2/scripts.inc +++ b/data/maps/MauvilleCity_House2/scripts.inc @@ -6,9 +6,8 @@ MauvilleCity_House2_EventScript_Woman:: faceplayer goto_if_set FLAG_RECEIVED_COIN_CASE, MauvilleCity_House2_EventScript_ReceivedCoinCase msgbox MauvilleCity_House2_Text_BuyHarborMailAtSlateport, MSGBOX_DEFAULT - checkitem ITEM_HARBOR_MAIL, 1 - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_House2_EventScript_AskToTradeForHarborMail + checkitem ITEM_HARBOR_MAIL + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_House2_EventScript_AskToTradeForHarborMail release end @@ -19,10 +18,8 @@ MauvilleCity_House2_EventScript_AskToTradeForHarborMail:: applymovement VAR_LAST_TALKED, Common_Movement_Delay48 waitmovement 0 msgbox MauvilleCity_House2_Text_TradeHarborMailForCoinCase, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq MauvilleCity_House2_EventScript_AcceptTrade - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_House2_EventScript_DeclineTrade + goto_if_eq VAR_RESULT, YES, MauvilleCity_House2_EventScript_AcceptTrade + goto_if_eq VAR_RESULT, NO, MauvilleCity_House2_EventScript_DeclineTrade end MauvilleCity_House2_EventScript_AcceptTrade:: diff --git a/data/maps/MauvilleCity_Mart/scripts.inc b/data/maps/MauvilleCity_Mart/scripts.inc index 4cf5bc20bb..751835caab 100644 --- a/data/maps/MauvilleCity_Mart/scripts.inc +++ b/data/maps/MauvilleCity_Mart/scripts.inc @@ -21,7 +21,7 @@ MauvilleCity_Mart_Pokemart: .2byte ITEM_AWAKENING .2byte ITEM_X_SPEED .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_GUARD_SPEC .2byte ITEM_DIRE_HIT .2byte ITEM_X_ACCURACY diff --git a/data/maps/MauvilleCity_PokemonCenter_1F/scripts.inc b/data/maps/MauvilleCity_PokemonCenter_1F/scripts.inc index 4347c47734..463d652b3b 100644 --- a/data/maps/MauvilleCity_PokemonCenter_1F/scripts.inc +++ b/data/maps/MauvilleCity_PokemonCenter_1F/scripts.inc @@ -12,7 +12,7 @@ MauvilleCity_PokemonCenter_1F_OnTransition: end MauvilleCity_PokemonCenter_1F_EventScript_SetMauvilleOldManGfx:: - special ScrSpecial_SetMauvilleOldManObjEventGfx + special SetMauvilleOldManObjEventGfx end MauvilleCity_PokemonCenter_1F_EventScript_Nurse:: diff --git a/data/maps/MeteorFalls_1F_1R/scripts.inc b/data/maps/MeteorFalls_1F_1R/scripts.inc index 4a40912697..b81f5de267 100644 --- a/data/maps/MeteorFalls_1F_1R/scripts.inc +++ b/data/maps/MeteorFalls_1F_1R/scripts.inc @@ -13,10 +13,10 @@ MeteorFalls_1F_1R_OnLoad: end MeteorFalls_1F_1R_EventScript_OpenStevensCave:: - setmetatile 4, 1, METATILE_MeteorFalls_CaveEntrance_Top, 1 - setmetatile 3, 2, METATILE_MeteorFalls_CaveEntrance_Left, 1 - setmetatile 4, 2, METATILE_MeteorFalls_CaveEntrance_Bottom, 0 - setmetatile 5, 2, METATILE_MeteorFalls_CaveEntrance_Right, 1 + setmetatile 4, 1, METATILE_MeteorFalls_CaveEntrance_Top, TRUE + setmetatile 3, 2, METATILE_MeteorFalls_CaveEntrance_Left, TRUE + setmetatile 4, 2, METATILE_MeteorFalls_CaveEntrance_Bottom, FALSE + setmetatile 5, 2, METATILE_MeteorFalls_CaveEntrance_Right, TRUE return MeteorFalls_1F_1R_EventScript_MagmaStealsMeteoriteScene:: @@ -29,8 +29,8 @@ MeteorFalls_1F_1R_EventScript_MagmaStealsMeteoriteScene:: waitmovement 0 msgbox MeteorFalls_1F_1R_Text_WithThisMeteorite, MSGBOX_DEFAULT closemessage - applymovement LOCALID_MAGMA_GRUNT_1, Common_Movement_WalkInPlaceFastestUp - applymovement LOCALID_MAGMA_GRUNT_2, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_MAGMA_GRUNT_1, Common_Movement_WalkInPlaceFasterUp + applymovement LOCALID_MAGMA_GRUNT_2, Common_Movement_WalkInPlaceFasterUp waitmovement 0 playse SE_PIN applymovement LOCALID_MAGMA_GRUNT_1, Common_Movement_ExclamationMark @@ -43,9 +43,9 @@ MeteorFalls_1F_1R_EventScript_MagmaStealsMeteoriteScene:: waitmovement 0 msgbox MeteorFalls_1F_1R_Text_HoldItRightThereMagma, MSGBOX_DEFAULT closemessage - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft - applymovement LOCALID_MAGMA_GRUNT_1, Common_Movement_WalkInPlaceFastestLeft - applymovement LOCALID_MAGMA_GRUNT_2, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_MAGMA_GRUNT_1, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_MAGMA_GRUNT_2, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 addobject LOCALID_ARCHIE addobject LOCALID_AQUA_GRUNT_1 @@ -55,8 +55,8 @@ MeteorFalls_1F_1R_EventScript_MagmaStealsMeteoriteScene:: applymovement LOCALID_AQUA_GRUNT_1, MeteorFalls_1F_1R_Movement_AquaGrunt1Arrive applymovement LOCALID_AQUA_GRUNT_2, MeteorFalls_1F_1R_Movement_AquaGrunt2Arrive waitmovement 0 - applymovement LOCALID_MAGMA_GRUNT_1, Common_Movement_WalkInPlaceFastestLeft - applymovement LOCALID_MAGMA_GRUNT_2, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_MAGMA_GRUNT_1, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_MAGMA_GRUNT_2, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox MeteorFalls_1F_1R_Text_BeSeeingYouTeamAqua, MSGBOX_DEFAULT closemessage @@ -74,10 +74,10 @@ MeteorFalls_1F_1R_EventScript_MagmaStealsMeteoriteScene:: applymovement LOCALID_AQUA_GRUNT_2, MeteorFalls_1F_1R_Movement_AquaGrunt2ApproachArchie waitmovement 0 msgbox MeteorFalls_1F_1R_Text_BossWeShouldChaseMagma, MSGBOX_DEFAULT - applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox MeteorFalls_1F_1R_Text_ArchieYesNoTellingWhatMagmaWillDo, MSGBOX_DEFAULT - applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox MeteorFalls_1F_1R_Text_ArchieFarewell, MSGBOX_DEFAULT closemessage @@ -99,7 +99,7 @@ MeteorFalls_1F_1R_EventScript_MagmaStealsMeteoriteScene:: MeteorFalls_1F_1R_Movement_MagmaGruntApproachPlayer: walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end MeteorFalls_1F_1R_Movement_MagmaGrunt1Exit: @@ -171,7 +171,7 @@ MeteorFalls_1F_1R_Movement_ArchieApproachPlayer: walk_right walk_up walk_up - walk_in_place_fastest_left + walk_in_place_faster_left step_end MeteorFalls_1F_1R_Movement_AquaGrunt1Exit: @@ -190,7 +190,7 @@ MeteorFalls_1F_1R_Movement_AquaGrunt1ApproachArchie: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end MeteorFalls_1F_1R_Movement_AquaGrunt2Exit: @@ -210,13 +210,13 @@ MeteorFalls_1F_1R_Movement_AquaGrunt2ApproachArchie: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end MeteorFalls_1F_1R_Movement_PushPlayerOutOfWay: - walk_in_place_fastest_down + walk_in_place_faster_down delay_4 - walk_in_place_fastest_right + walk_in_place_faster_right lock_facing_direction walk_left unlock_facing_direction diff --git a/data/maps/MeteorFalls_1F_2R/scripts.inc b/data/maps/MeteorFalls_1F_2R/scripts.inc index 706d362bed..4e3e9b321b 100644 --- a/data/maps/MeteorFalls_1F_2R/scripts.inc +++ b/data/maps/MeteorFalls_1F_2R/scripts.inc @@ -4,8 +4,7 @@ MeteorFalls_1F_2R_MapScripts:: MeteorFalls_1F_2R_EventScript_Nicolas:: trainerbattle_single TRAINER_NICOLAS_1, MeteorFalls_1F_2R_Text_NicolasIntro, MeteorFalls_1F_2R_Text_NicolasDefeat, MeteorFalls_1F_2R_EventScript_RegisterNicolas specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq MeteorFalls_1F_2R_EventScript_RematchNicolas + goto_if_eq VAR_RESULT, TRUE, MeteorFalls_1F_2R_EventScript_RematchNicolas msgbox MeteorFalls_1F_2R_Text_NicolasPostBattle, MSGBOX_DEFAULT release end @@ -26,8 +25,7 @@ MeteorFalls_1F_2R_EventScript_RematchNicolas:: MeteorFalls_1F_2R_EventScript_John:: trainerbattle_double TRAINER_JOHN_AND_JAY_1, MeteorFalls_1F_2R_Text_JohnIntro, MeteorFalls_1F_2R_Text_JohnDefeat, MeteorFalls_1F_2R_Text_JohnNotEnoughMons, MeteorFalls_1F_2R_EventScript_RegisterJohn specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq MeteorFalls_1F_2R_EventScript_RematchJohn + goto_if_eq VAR_RESULT, TRUE, MeteorFalls_1F_2R_EventScript_RematchJohn msgbox MeteorFalls_1F_2R_Text_JohnPostBattle, MSGBOX_DEFAULT release end @@ -46,8 +44,7 @@ MeteorFalls_1F_2R_EventScript_RematchJohn:: MeteorFalls_1F_2R_EventScript_Jay:: trainerbattle_double TRAINER_JOHN_AND_JAY_1, MeteorFalls_1F_2R_Text_JayIntro, MeteorFalls_1F_2R_Text_JayDefeat, MeteorFalls_1F_2R_Text_JayNotEnoughMons, MeteorFalls_1F_2R_EventScript_RegisterJay specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq MeteorFalls_1F_2R_EventScript_RematchJay + goto_if_eq VAR_RESULT, TRUE, MeteorFalls_1F_2R_EventScript_RematchJay msgbox MeteorFalls_1F_2R_Text_JayPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/MirageTower_2F/scripts.inc b/data/maps/MirageTower_2F/scripts.inc index 3d53359d4c..39d2be7f43 100644 --- a/data/maps/MirageTower_2F/scripts.inc +++ b/data/maps/MirageTower_2F/scripts.inc @@ -6,6 +6,6 @@ MirageTower_2F_MapScripts:: MirageTower_2F_SetHoleWarp: setstepcallback STEP_CB_CRACKED_FLOOR - setholewarp MAP_MIRAGE_TOWER_1F, 255, 0, 0 + setholewarp MAP_MIRAGE_TOWER_1F end diff --git a/data/maps/MirageTower_3F/scripts.inc b/data/maps/MirageTower_3F/scripts.inc index 02b0864008..1b2f04aeee 100644 --- a/data/maps/MirageTower_3F/scripts.inc +++ b/data/maps/MirageTower_3F/scripts.inc @@ -6,6 +6,6 @@ MirageTower_3F_MapScripts:: MirageTower_3F_SetHoleWarp: setstepcallback STEP_CB_CRACKED_FLOOR - setholewarp MAP_MIRAGE_TOWER_2F, 255, 0, 0 + setholewarp MAP_MIRAGE_TOWER_2F end diff --git a/data/maps/MirageTower_4F/scripts.inc b/data/maps/MirageTower_4F/scripts.inc index 2c96710d13..61bde877c5 100644 --- a/data/maps/MirageTower_4F/scripts.inc +++ b/data/maps/MirageTower_4F/scripts.inc @@ -8,8 +8,7 @@ MirageTower_4F_EventScript_RootFossil:: lock faceplayer msgbox MirageTower_4F_Text_TakeRootFossil, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MirageTower_4F_EventScript_LeaveRootFossil + goto_if_eq VAR_RESULT, NO, MirageTower_4F_EventScript_LeaveRootFossil giveitem ITEM_ROOT_FOSSIL closemessage setflag FLAG_HIDE_MIRAGE_TOWER_ROOT_FOSSIL @@ -29,8 +28,7 @@ MirageTower_4F_EventScript_ClawFossil:: lock faceplayer msgbox MirageTower_4F_Text_TakeClawFossil, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MirageTower_4F_EventScript_LeaveClawFossil + goto_if_eq VAR_RESULT, NO, MirageTower_4F_EventScript_LeaveClawFossil giveitem ITEM_CLAW_FOSSIL closemessage setflag FLAG_HIDE_MIRAGE_TOWER_CLAW_FOSSIL @@ -57,7 +55,7 @@ MirageTower_4F_EventScript_CollapseMirageTower:: waitstate setvar VAR_MIRAGE_TOWER_STATE, 1 clearflag FLAG_LANDMARK_MIRAGE_TOWER - warp MAP_ROUTE111, 255, 19, 59 + warp MAP_ROUTE111, 19, 59 waitstate release end diff --git a/data/maps/MossdeepCity/scripts.inc b/data/maps/MossdeepCity/scripts.inc index 07758873d8..836490cbdd 100644 --- a/data/maps/MossdeepCity/scripts.inc +++ b/data/maps/MossdeepCity/scripts.inc @@ -233,12 +233,10 @@ MossdeepCity_EventScript_KingsRockBoy:: faceplayer goto_if_set FLAG_RECEIVED_KINGS_ROCK, MossdeepCity_EventScript_ReceivedKingsRock msgbox MossdeepCity_Text_WantKingsRockStevenGaveMe, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MossdeepCity_EventScript_DeclineKingsRock + goto_if_eq VAR_RESULT, NO, MossdeepCity_EventScript_DeclineKingsRock msgbox MossdeepCity_Text_YouCanKeepIt, MSGBOX_DEFAULT giveitem ITEM_KINGS_ROCK - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_KINGS_ROCK release end @@ -262,10 +260,8 @@ MossdeepCity_EventScript_Scott:: faceplayer msgbox MossdeepCity_Text_ScottSomethingWrongWithTown, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_NORTH - call_if_eq MossdeepCity_EventScript_ScottExitNorth - compare VAR_FACING, DIR_EAST - call_if_eq MossdeepCity_EventScript_ScottExitEast + call_if_eq VAR_FACING, DIR_NORTH, MossdeepCity_EventScript_ScottExitNorth + call_if_eq VAR_FACING, DIR_EAST, MossdeepCity_EventScript_ScottExitEast addvar VAR_SCOTT_STATE, 1 removeobject LOCALID_SCOTT release @@ -286,7 +282,7 @@ MossdeepCity_EventScript_ScottExitEast:: MossdeepCity_Movement_PlayerWatchScottExit: delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end MossdeepCity_Movement_ScottExitNorth: diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc index 22c2e17ab9..b47011d680 100644 --- a/data/maps/MossdeepCity_Gym/scripts.inc +++ b/data/maps/MossdeepCity_Gym/scripts.inc @@ -26,33 +26,32 @@ MossdeepCity_Gym_EventScript_CheckSwitch4:: @ All the below set metatile scripts are leftover from RS and are functionally unused MossdeepCity_Gym_EventScript_SetSwitch1Metatiles:: - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, 0 - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, 1 + setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE + setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch2 end MossdeepCity_Gym_EventScript_SetSwitch2Metatiles:: - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, 0 - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, 1 + setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE + setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch3 end MossdeepCity_Gym_EventScript_SetSwitch3Metatiles:: - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, 0 - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, 1 + setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE + setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch4 end MossdeepCity_Gym_EventScript_SetSwitch4Metatiles:: - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, 0 - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, 1 + setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, FALSE + setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, TRUE end MossdeepCity_Gym_EventScript_TateAndLiza:: 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 specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq MossdeepCity_Gym_EventScript_TateAndLizaRematch + goto_if_eq VAR_RESULT, TRUE, MossdeepCity_Gym_EventScript_TateAndLizaRematch goto_if_unset FLAG_RECEIVED_TM04, MossdeepCity_Gym_EventScript_GiveCalmMind2 msgbox MossdeepCity_Gym_Text_TateAndLizaPostBattle, MSGBOX_DEFAULT release @@ -92,8 +91,7 @@ MossdeepCity_Gym_EventScript_TateAndLizaDefeated:: MossdeepCity_Gym_EventScript_GiveCalmMind2:: giveitem ITEM_TM04 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox MossdeepCity_Gym_Text_ExplainCalmMind, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM04 release @@ -101,8 +99,7 @@ MossdeepCity_Gym_EventScript_GiveCalmMind2:: MossdeepCity_Gym_EventScript_GiveCalmMind:: giveitem ITEM_TM04 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox MossdeepCity_Gym_Text_ExplainCalmMind, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM04 return @@ -119,8 +116,8 @@ MossdeepCity_Gym_EventScript_Switch1:: setflag FLAG_MOSSDEEP_GYM_SWITCH_1 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, 0 - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, 1 + setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE + setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -134,8 +131,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch1:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_1 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Left, 0 - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Up, 1 + setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE + setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -145,8 +142,8 @@ MossdeepCity_Gym_EventScript_Switch2:: setflag FLAG_MOSSDEEP_GYM_SWITCH_2 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, 0 - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, 1 + setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE + setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -154,8 +151,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch2:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_2 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Down, 0 - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Up, 1 + setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Down, FALSE + setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -165,8 +162,8 @@ MossdeepCity_Gym_EventScript_Switch3:: setflag FLAG_MOSSDEEP_GYM_SWITCH_3 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, 0 - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, 1 + setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE + setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -174,8 +171,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch3:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_3 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Right, 0 - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Up, 1 + setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE + setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -185,8 +182,8 @@ MossdeepCity_Gym_EventScript_Switch4:: setflag FLAG_MOSSDEEP_GYM_SWITCH_4 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, 0 - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, 1 + setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, FALSE + setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -194,14 +191,14 @@ MossdeepCity_Gym_EventScript_ClearSwitch4:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_4 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Right, 0 - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Up, 1 + setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE + setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end MossdeepCity_Gym_EventScript_WarpToEntrance:: lockall - warpmossdeepgym MAP_MOSSDEEP_CITY_GYM, 255, 7, 30 + warpmossdeepgym MAP_MOSSDEEP_CITY_GYM, 7, 30 waitstate releaseall end diff --git a/data/maps/MossdeepCity_House1/scripts.inc b/data/maps/MossdeepCity_House1/scripts.inc index 99224a795e..433defa666 100644 --- a/data/maps/MossdeepCity_House1/scripts.inc +++ b/data/maps/MossdeepCity_House1/scripts.inc @@ -4,11 +4,10 @@ MossdeepCity_House1_MapScripts:: MossdeepCity_House1_EventScript_BlackBelt:: lock faceplayer - bufferleadmonspeciesname 0 + bufferleadmonspeciesname STR_VAR_1 msgbox MossdeepCity_House1_Text_HmmYourPokemon, MSGBOX_DEFAULT specialvar VAR_RESULT, GetPokeblockNameByMonNature - compare VAR_RESULT, 0 - goto_if_eq MossdeepCity_House1_EventScript_NeutralNature + goto_if_eq VAR_RESULT, 0, MossdeepCity_House1_EventScript_NeutralNature msgbox MossdeepCity_House1_Text_ItLikesXPokeblocks, MSGBOX_DEFAULT release end diff --git a/data/maps/MossdeepCity_House2/scripts.inc b/data/maps/MossdeepCity_House2/scripts.inc index 63036814b2..56a8381963 100644 --- a/data/maps/MossdeepCity_House2/scripts.inc +++ b/data/maps/MossdeepCity_House2/scripts.inc @@ -15,16 +15,14 @@ MossdeepCity_House2_EventScript_Wingull:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox MossdeepCity_House2_Text_Wingull, MSGBOX_DEFAULT waitmoncry closemessage setflag FLAG_WINGULL_DELIVERED_MAIL clearflag FLAG_HIDE_FORTREE_CITY_HOUSE_4_WINGULL - compare VAR_FACING, DIR_NORTH - call_if_eq MossdeepCity_House2_EventScript_WingullExitNorth - compare VAR_FACING, DIR_WEST - call_if_eq MossdeepCity_House2_EventScript_WingullExitWest + call_if_eq VAR_FACING, DIR_NORTH, MossdeepCity_House2_EventScript_WingullExitNorth + call_if_eq VAR_FACING, DIR_WEST, MossdeepCity_House2_EventScript_WingullExitWest removeobject LOCALID_WINGULL release end diff --git a/data/maps/MossdeepCity_House3/scripts.inc b/data/maps/MossdeepCity_House3/scripts.inc index 51df05fe04..73b0cc26e9 100644 --- a/data/maps/MossdeepCity_House3/scripts.inc +++ b/data/maps/MossdeepCity_House3/scripts.inc @@ -6,8 +6,7 @@ MossdeepCity_House3_EventScript_SuperRodFisherman:: faceplayer goto_if_set FLAG_RECEIVED_SUPER_ROD, MossdeepCity_House3_EventScript_ReceivedSuperRod msgbox MossdeepCity_House3_Text_YouWantSuperRod, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MossdeepCity_House3_EventScript_DeclineSuperRod + goto_if_eq VAR_RESULT, NO, MossdeepCity_House3_EventScript_DeclineSuperRod msgbox MossdeepCity_House3_Text_SuperRodIsSuper, MSGBOX_DEFAULT giveitem ITEM_SUPER_ROD setflag FLAG_RECEIVED_SUPER_ROD diff --git a/data/maps/MossdeepCity_House4/scripts.inc b/data/maps/MossdeepCity_House4/scripts.inc index 85c0e5ebc0..8d0046857a 100644 --- a/data/maps/MossdeepCity_House4/scripts.inc +++ b/data/maps/MossdeepCity_House4/scripts.inc @@ -18,8 +18,7 @@ MossdeepCity_House4_EventScript_NinjaBoy:: lock faceplayer special CheckPlayerHasSecretBase - compare VAR_RESULT, FALSE - goto_if_eq MossdeepCity_House4_EventScript_NoSecretBase + goto_if_eq VAR_RESULT, FALSE, MossdeepCity_House4_EventScript_NoSecretBase special GetSecretBaseNearbyMapName msgbox MossdeepCity_House4_Text_YouMadeSecretBaseNearX, MSGBOX_DEFAULT release @@ -34,7 +33,7 @@ MossdeepCity_House4_EventScript_Skitty:: lock faceplayer waitse - playmoncry SPECIES_SKITTY, 0 + playmoncry SPECIES_SKITTY, CRY_MODE_NORMAL msgbox MossdeepCity_House4_Text_Skitty, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/MossdeepCity_Mart/scripts.inc b/data/maps/MossdeepCity_Mart/scripts.inc index 50edddd09a..6618b6a6a3 100644 --- a/data/maps/MossdeepCity_Mart/scripts.inc +++ b/data/maps/MossdeepCity_Mart/scripts.inc @@ -21,7 +21,7 @@ MossdeepCity_Mart_Pokemart: .2byte ITEM_REVIVE .2byte ITEM_MAX_REPEL .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_NONE release end diff --git a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc index 4d69725b4c..263b071056 100644 --- a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc @@ -11,8 +11,7 @@ MossdeepCity_SpaceCenter_1F_MapScripts:: .byte 0 MossdeepCity_SpaceCenter_1F_OnTransition: - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_MoveObjectsForTeamMagma + goto_if_eq VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_1F_EventScript_MoveObjectsForTeamMagma end MossdeepCity_SpaceCenter_1F_EventScript_MoveObjectsForTeamMagma:: @@ -25,12 +24,9 @@ MossdeepCity_SpaceCenter_1F_EventScript_MoveObjectsForTeamMagma:: setobjectxyperm LOCALID_SCIENTIST_1, 3, 4 setobjectmovementtype LOCALID_SCIENTIST_1, MOVEMENT_TYPE_FACE_RIGHT setobjectmovementtype LOCALID_SCIENTIST_2, MOVEMENT_TYPE_FACE_RIGHT - compare VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 1 - goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_MoveStairGuardLeft - compare VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 2 - goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_MoveStairGuardDown - compare VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 3 - goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_MoveStairGuardRight + goto_if_eq VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 1, MossdeepCity_SpaceCenter_1F_EventScript_MoveStairGuardLeft + goto_if_eq VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 2, MossdeepCity_SpaceCenter_1F_EventScript_MoveStairGuardDown + goto_if_eq VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 3, MossdeepCity_SpaceCenter_1F_EventScript_MoveStairGuardRight end MossdeepCity_SpaceCenter_1F_EventScript_MoveStairGuardLeft:: @@ -47,26 +43,22 @@ MossdeepCity_SpaceCenter_1F_EventScript_MoveStairGuardRight:: end MossdeepCity_SpaceCenter_1F_OnLoad: - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_le MossdeepCity_SpaceCenter_1F_EventScript_SetMagmaNote + goto_if_le VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_1F_EventScript_SetMagmaNote end MossdeepCity_SpaceCenter_1F_EventScript_SetMagmaNote:: - setmetatile 2, 5, METATILE_Facility_DataPad, 1 + setmetatile 2, 5, METATILE_Facility_DataPad, TRUE return MossdeepCity_SpaceCenter_1F_EventScript_RocketLaunchCounter:: lock faceplayer - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_RocketLaunchCounterMagma + goto_if_eq VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_1F_EventScript_RocketLaunchCounterMagma dotimebasedevents specialvar VAR_RESULT, GetWeekCount - buffernumberstring 0, VAR_RESULT - compare VAR_RESULT, 0 - call_if_eq MossdeepCity_SpaceCenter_1F_EventScript_NoLaunchesYet - compare VAR_RESULT, 1 - call_if_ge MossdeepCity_SpaceCenter_1F_EventScript_ShowLaunchNumber + buffernumberstring STR_VAR_1, VAR_RESULT + call_if_eq VAR_RESULT, 0, MossdeepCity_SpaceCenter_1F_EventScript_NoLaunchesYet + call_if_ge VAR_RESULT, 1, MossdeepCity_SpaceCenter_1F_EventScript_ShowLaunchNumber closemessage applymovement VAR_LAST_TALKED, Common_Movement_FaceOriginalDirection waitmovement 0 @@ -84,13 +76,11 @@ MossdeepCity_SpaceCenter_1F_EventScript_ShowLaunchNumber:: MossdeepCity_SpaceCenter_1F_EventScript_RocketLaunchCounterMagma:: dotimebasedevents specialvar VAR_RESULT, GetWeekCount - buffernumberstring 0, VAR_RESULT - compare VAR_RESULT, 0 - call_if_eq MossdeepCity_SpaceCenter_1F_EventScript_NoLaunchesYetMagma - compare VAR_RESULT, 1 - call_if_ge MossdeepCity_SpaceCenter_1F_EventScript_ShowLaunchNumberMagma + buffernumberstring STR_VAR_1, VAR_RESULT + call_if_eq VAR_RESULT, 0, MossdeepCity_SpaceCenter_1F_EventScript_NoLaunchesYetMagma + call_if_ge VAR_RESULT, 1, MossdeepCity_SpaceCenter_1F_EventScript_ShowLaunchNumberMagma closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestRight + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterRight waitmovement 0 release end @@ -106,15 +96,14 @@ MossdeepCity_SpaceCenter_1F_EventScript_ShowLaunchNumberMagma:: MossdeepCity_SpaceCenter_1F_EventScript_Scientist:: lock faceplayer - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_ScientistMagma + goto_if_eq VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_1F_EventScript_ScientistMagma msgbox MossdeepCity_SpaceCenter_1F_Text_RocketLaunchDemandsPerfection, MSGBOX_DEFAULT release end MossdeepCity_SpaceCenter_1F_EventScript_ScientistMagma:: msgbox MossdeepCity_SpaceCenter_1F_Text_MagmaHaveSightsOnSpaceCenter, MSGBOX_DEFAULT - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestRight + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterRight waitmovement 0 release end @@ -122,13 +111,11 @@ MossdeepCity_SpaceCenter_1F_EventScript_ScientistMagma:: MossdeepCity_SpaceCenter_1F_EventScript_SunStoneMan:: lock faceplayer - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_SunStoneManMagma + goto_if_eq VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_1F_EventScript_SunStoneManMagma goto_if_set FLAG_RECEIVED_SUN_STONE_MOSSDEEP, MossdeepCity_SpaceCenter_1F_EventScript_GaveSunStone msgbox MossdeepCity_SpaceCenter_1F_Text_FoundThisYouCanHaveIt, MSGBOX_DEFAULT giveitem ITEM_SUN_STONE - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_SUN_STONE_MOSSDEEP msgbox MossdeepCity_SpaceCenter_1F_Text_HoennFamousForMeteorShowers, MSGBOX_DEFAULT release @@ -143,18 +130,17 @@ MossdeepCity_SpaceCenter_1F_EventScript_SunStoneManMagma:: goto_if_set FLAG_RECEIVED_SUN_STONE_MOSSDEEP, MossdeepCity_SpaceCenter_1F_EventScript_GaveSunStoneMagma msgbox MossdeepCity_SpaceCenter_1F_Text_MagmaCantStealFuelTakeThis, MSGBOX_DEFAULT giveitem ITEM_SUN_STONE - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_SUN_STONE_MOSSDEEP msgbox MossdeepCity_SpaceCenter_1F_Text_CantStrollOnBeachWithMagma, MSGBOX_DEFAULT - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestRight + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterRight waitmovement 0 release end MossdeepCity_SpaceCenter_1F_EventScript_GaveSunStoneMagma:: msgbox MossdeepCity_SpaceCenter_1F_Text_CantStrollOnBeachWithMagma, MSGBOX_DEFAULT - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestRight + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterRight waitmovement 0 release end @@ -163,10 +149,8 @@ MossdeepCity_SpaceCenter_1F_EventScript_Woman:: lock faceplayer goto_if_set FLAG_SYS_GAME_CLEAR, MossdeepCity_SpaceCenter_1F_EventScript_WomanNormal - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_WomanMagma - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_lt MossdeepCity_SpaceCenter_1F_EventScript_WomanNormal + goto_if_eq VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_1F_EventScript_WomanMagma + goto_if_lt VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_1F_EventScript_WomanNormal goto MossdeepCity_SpaceCenter_1F_EventScript_WomanMagma end @@ -184,10 +168,8 @@ MossdeepCity_SpaceCenter_1F_EventScript_OldMan:: lock faceplayer goto_if_set FLAG_SYS_GAME_CLEAR, MossdeepCity_SpaceCenter_1F_EventScript_OldManNormal - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_OldManMagma - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_lt MossdeepCity_SpaceCenter_1F_EventScript_OldManNormal + goto_if_eq VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_1F_EventScript_OldManMagma + goto_if_lt VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_1F_EventScript_OldManNormal goto MossdeepCity_SpaceCenter_1F_EventScript_OldManMagma end diff --git a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc index 839ab8f248..4a22bf8eea 100644 --- a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc @@ -15,10 +15,8 @@ MossdeepCity_SpaceCenter_2F_MapScripts:: .byte 0 MossdeepCity_SpaceCenter_2F_OnTransition: - compare VAR_MOSSDEEP_CITY_STATE, 2 - call_if_eq MossdeepCity_SpaceCenter_2F_EventScript_MoveCivilians - compare VAR_MOSSDEEP_SPACE_CENTER_STATE, 2 - call_if_eq MossdeepCity_SpaceCenter_2F_EventScript_MoveDefeatedGrunts + call_if_eq VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_2F_EventScript_MoveCivilians + call_if_eq VAR_MOSSDEEP_SPACE_CENTER_STATE, 2, MossdeepCity_SpaceCenter_2F_EventScript_MoveDefeatedGrunts end MossdeepCity_SpaceCenter_2F_EventScript_MoveCivilians:: @@ -48,13 +46,12 @@ MossdeepCity_SpaceCenter_2F_EventScript_ThreeMagmaGrunts:: applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_Delay48 waitmovement 0 msgbox MossdeepCity_SpaceCenter_2F_Text_YoureOutnumberedTakeUsOn, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq MossdeepCity_SpaceCenter_2F_EventScript_BattleThreeMagmaGrunts + goto_if_eq VAR_RESULT, YES, MossdeepCity_SpaceCenter_2F_EventScript_BattleThreeMagmaGrunts msgbox MossdeepCity_SpaceCenter_2F_Text_GoodAnswer, MSGBOX_DEFAULT closemessage applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_SpaceCenter_2F_Movement_PlayerExit waitmovement 0 - warp MAP_MOSSDEEP_CITY_SPACE_CENTER_1F, 255, 13, 1 + warp MAP_MOSSDEEP_CITY_SPACE_CENTER_1F, 13, 1 waitstate releaseall end @@ -68,13 +65,13 @@ MossdeepCity_SpaceCenter_2F_EventScript_BattleThreeMagmaGrunts:: trainerbattle_no_intro TRAINER_GRUNT_SPACE_CENTER_5, MossdeepCity_SpaceCenter_2F_Text_Grunt5Defeat applymovement LOCALID_GRUNT_5, MossdeepCity_SpaceCenter_2F_Movement_Grunt5Defeated waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox MossdeepCity_SpaceCenter_2F_Text_Grunt6Intro, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_GRUNT_SPACE_CENTER_6, MossdeepCity_SpaceCenter_2F_Text_Grunt6Defeat applymovement LOCALID_GRUNT_6, MossdeepCity_SpaceCenter_2F_Movement_Grunt6Defeated waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox MossdeepCity_SpaceCenter_2F_Text_Grunt7Intro, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_GRUNT_SPACE_CENTER_7, MossdeepCity_SpaceCenter_2F_Text_Grunt7Defeat @@ -109,10 +106,8 @@ MossdeepCity_SpaceCenter_2F_EventScript_Scientist:: lock faceplayer goto_if_set FLAG_SYS_GAME_CLEAR, MossdeepCity_SpaceCenter_2F_EventScript_ScientistNormal - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_eq MossdeepCity_SpaceCenter_2F_EventScript_ScientistMagma - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_lt MossdeepCity_SpaceCenter_2F_EventScript_ScientistNormal + goto_if_eq VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_2F_EventScript_ScientistMagma + goto_if_lt VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_2F_EventScript_ScientistNormal goto MossdeepCity_SpaceCenter_2F_EventScript_ScientistMagma end @@ -130,10 +125,8 @@ MossdeepCity_SpaceCenter_2F_EventScript_Gentleman:: lock faceplayer goto_if_set FLAG_SYS_GAME_CLEAR, MossdeepCity_SpaceCenter_2F_EventScript_GentlemanNormal - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_eq MossdeepCity_SpaceCenter_2F_EventScript_GentlemanMagma - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_lt MossdeepCity_SpaceCenter_2F_EventScript_GentlemanNormal + goto_if_eq VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_2F_EventScript_GentlemanMagma + goto_if_lt VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_2F_EventScript_GentlemanNormal goto MossdeepCity_SpaceCenter_2F_EventScript_GentlemanMagma end @@ -151,10 +144,8 @@ MossdeepCity_SpaceCenter_2F_EventScript_RichBoy:: lock faceplayer goto_if_set FLAG_SYS_GAME_CLEAR, MossdeepCity_SpaceCenter_2F_EventScript_RichBoyNormal - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_eq MossdeepCity_SpaceCenter_2F_EventScript_RichBoyMagma - compare VAR_MOSSDEEP_CITY_STATE, 2 - goto_if_lt MossdeepCity_SpaceCenter_2F_EventScript_RichBoyNormal + goto_if_eq VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_2F_EventScript_RichBoyMagma + goto_if_lt VAR_MOSSDEEP_CITY_STATE, 2, MossdeepCity_SpaceCenter_2F_EventScript_RichBoyNormal goto MossdeepCity_SpaceCenter_2F_EventScript_RichBoyMagma end @@ -246,24 +237,22 @@ MossdeepCity_SpaceCenter_2F_EventScript_ReadyForBattlePrompt:: applymovement VAR_LAST_TALKED, Common_Movement_FacePlayer waitmovement 0 msgbox MossdeepCity_SpaceCenter_2F_Text_StevenAreYouReadyToBattle, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq MossdeepCity_SpaceCenter_2F_EventScript_ChoosePartyForMultiBattle + goto_if_eq VAR_RESULT, YES, MossdeepCity_SpaceCenter_2F_EventScript_ChoosePartyForMultiBattle msgbox MossdeepCity_SpaceCenter_2F_Text_StevenHurryGetReadyQuickly, MSGBOX_DEFAULT closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 releaseall end MossdeepCity_SpaceCenter_2F_EventScript_ChoosePartyForMultiBattle:: - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 special SavePlayerParty fadescreen FADE_TO_BLACK special ChooseHalfPartyForBattle waitstate - compare VAR_RESULT, 0 - goto_if_ne MossdeepCity_SpaceCenter_2F_EventScript_DoStevenMultiBattle + goto_if_ne VAR_RESULT, 0, MossdeepCity_SpaceCenter_2F_EventScript_DoStevenMultiBattle special LoadPlayerParty goto MossdeepCity_SpaceCenter_2F_EventScript_ReadyForBattlePrompt @@ -286,12 +275,12 @@ MossdeepCity_SpaceCenter_2F_EventScript_DefeatedMaxieTabitha:: msgbox MossdeepCity_SpaceCenter_2F_Text_MaxieWeFailedIsAquaAlsoMisguided, MSGBOX_DEFAULT closemessage delay 20 - applymovement LOCALID_MAXIE, Common_Movement_WalkInPlaceFastestLeft - applymovement LOCALID_TABITHA, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_MAXIE, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_TABITHA, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 60 - applymovement LOCALID_MAXIE, Common_Movement_WalkInPlaceFastestUp - applymovement LOCALID_TABITHA, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_MAXIE, Common_Movement_WalkInPlaceFasterUp + applymovement LOCALID_TABITHA, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 20 msgbox MossdeepCity_SpaceCenter_2F_Text_MaxieWeWillGiveUp, MSGBOX_DEFAULT @@ -358,10 +347,8 @@ MossdeepCity_SpaceCenter_2F_EventScript_TabithaTrainer:: MossdeepCity_SpaceCenter_2F_EventScript_RivalRayquazaCall:: lockall checkplayergender - compare VAR_RESULT, MALE - call_if_eq MossdeepCity_SpaceCenter_2F_EventScript_MayRayquazaCall - compare VAR_RESULT, FEMALE - call_if_eq MossdeepCity_SpaceCenter_2F_EventScript_BrendanRayquazaCall + call_if_eq VAR_RESULT, MALE, MossdeepCity_SpaceCenter_2F_EventScript_MayRayquazaCall + call_if_eq VAR_RESULT, FEMALE, MossdeepCity_SpaceCenter_2F_EventScript_BrendanRayquazaCall closemessage clearflag FLAG_DEFEATED_MAGMA_SPACE_CENTER releaseall diff --git a/data/maps/MossdeepCity_StevensHouse/scripts.inc b/data/maps/MossdeepCity_StevensHouse/scripts.inc index 1f5a9e09a9..0470e977a6 100644 --- a/data/maps/MossdeepCity_StevensHouse/scripts.inc +++ b/data/maps/MossdeepCity_StevensHouse/scripts.inc @@ -12,12 +12,11 @@ MossdeepCity_StevensHouse_OnLoad: end MossdeepCity_StevensHouse_EventScript_HideStevensNote:: - setmetatile 6, 4, METATILE_GenericBuilding_TableEdge, 1 + setmetatile 6, 4, METATILE_GenericBuilding_TableEdge, TRUE return MossdeepCity_StevensHouse_OnTransition: - compare VAR_STEVENS_HOUSE_STATE, 2 - call_if_eq MossdeepCity_StevensHouse_EventScript_SetStevenPos + call_if_eq VAR_STEVENS_HOUSE_STATE, 2, MossdeepCity_StevensHouse_EventScript_SetStevenPos end MossdeepCity_StevensHouse_EventScript_SetStevenPos:: @@ -31,7 +30,7 @@ MossdeepCity_StevensHouse_OnFrame: MossdeepCity_StevensHouse_EventScript_StevenGivesDive:: lockall - applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 playse SE_PIN applymovement LOCALID_STEVEN, Common_Movement_ExclamationMark @@ -62,7 +61,7 @@ MossdeepCity_StevensHouse_Movement_StevenApproachPlayer: walk_left walk_left walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end MossdeepCity_StevensHouse_Movement_StevenReturn: @@ -70,14 +69,13 @@ MossdeepCity_StevensHouse_Movement_StevenReturn: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end MossdeepCity_StevensHouse_EventScript_BeldumPokeball:: lockall msgbox MossdeepCity_StevensHouse_Text_TakeBallContainingBeldum, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MossdeepCity_StevensHouse_EventScript_LeaveBeldum + goto_if_eq VAR_RESULT, NO, MossdeepCity_StevensHouse_EventScript_LeaveBeldum goto MossdeepCity_StevensHouse_EventScript_GiveBeldum end @@ -88,19 +86,16 @@ MossdeepCity_StevensHouse_EventScript_LeaveBeldum:: MossdeepCity_StevensHouse_EventScript_GiveBeldum:: setvar VAR_TEMP_1, SPECIES_BELDUM - givemon SPECIES_BELDUM, 5, ITEM_NONE - compare VAR_RESULT, 0 - goto_if_eq MossdeepCity_StevensHouse_EventScript_SendBeldumParty - compare VAR_RESULT, 1 - goto_if_eq MossdeepCity_StevensHouse_EventScript_SendBeldumPC + givemon SPECIES_BELDUM, 5 + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, MossdeepCity_StevensHouse_EventScript_SendBeldumParty + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, MossdeepCity_StevensHouse_EventScript_SendBeldumPC goto Common_EventScript_NoMoreRoomForPokemon end MossdeepCity_StevensHouse_EventScript_SendBeldumParty:: call MossdeepCity_StevensHouse_EventScript_ReceivedBeldumFanfare msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MossdeepCity_StevensHouse_EventScript_ReceivedBeldum + goto_if_eq VAR_RESULT, NO, MossdeepCity_StevensHouse_EventScript_ReceivedBeldum call Common_EventScript_GetGiftMonPartySlot call Common_EventScript_NameReceivedPartyMon goto MossdeepCity_StevensHouse_EventScript_ReceivedBeldum @@ -109,8 +104,7 @@ MossdeepCity_StevensHouse_EventScript_SendBeldumParty:: MossdeepCity_StevensHouse_EventScript_SendBeldumPC:: call MossdeepCity_StevensHouse_EventScript_ReceivedBeldumFanfare msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MossdeepCity_StevensHouse_EventScript_BeldumTransferredToPC + goto_if_eq VAR_RESULT, NO, MossdeepCity_StevensHouse_EventScript_BeldumTransferredToPC call Common_EventScript_NameReceivedBoxMon goto MossdeepCity_StevensHouse_EventScript_BeldumTransferredToPC end @@ -121,13 +115,13 @@ MossdeepCity_StevensHouse_EventScript_BeldumTransferredToPC:: end MossdeepCity_StevensHouse_EventScript_ReceivedBeldumFanfare:: - bufferspeciesname 1, SPECIES_BELDUM + bufferspeciesname STR_VAR_2, SPECIES_BELDUM removeobject LOCALID_BELDUM_BALL playfanfare MUS_OBTAIN_ITEM message MossdeepCity_StevensHouse_Text_ObtainedBeldum waitmessage waitfanfare - bufferspeciesname 0, SPECIES_BELDUM + bufferspeciesname STR_VAR_1, SPECIES_BELDUM return MossdeepCity_StevensHouse_EventScript_ReceivedBeldum:: diff --git a/data/maps/MtChimney/scripts.inc b/data/maps/MtChimney/scripts.inc index cd07667b5b..1931633258 100644 --- a/data/maps/MtChimney/scripts.inc +++ b/data/maps/MtChimney/scripts.inc @@ -63,18 +63,14 @@ MtChimney_EventScript_Maxie:: fadescreen FADE_FROM_BLACK setobjectxyperm LOCALID_ARCHIE, 10, 12 addobject LOCALID_ARCHIE - compare VAR_FACING, DIR_EAST - call_if_eq MtChimney_EventScript_ArchieApproachPlayerEast - compare VAR_FACING, DIR_NORTH - call_if_eq MtChimney_EventScript_ArchieApproachPlayerNorth - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + call_if_eq VAR_FACING, DIR_EAST, MtChimney_EventScript_ArchieApproachPlayerEast + call_if_eq VAR_FACING, DIR_NORTH, MtChimney_EventScript_ArchieApproachPlayerNorth + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox MtChimney_Text_ArchieThankYou, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_EAST - call_if_eq MtChimney_EventScript_ArchieExitEast - compare VAR_FACING, DIR_NORTH - call_if_eq MtChimney_EventScript_ArchieExitNorth + call_if_eq VAR_FACING, DIR_EAST, MtChimney_EventScript_ArchieExitEast + call_if_eq VAR_FACING, DIR_NORTH, MtChimney_EventScript_ArchieExitNorth removeobject LOCALID_ARCHIE setflag FLAG_HIDE_MT_CHIMNEY_TEAM_AQUA setflag FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY @@ -107,20 +103,16 @@ MtChimney_EventScript_ArchieExitNorth:: MtChimney_EventScript_LavaCookieLady:: lock faceplayer - showmoneybox 0, 0, 0 + showmoneybox 0, 0 msgbox MtChimney_Text_LavaCookiesJust200, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MtChimney_EventScript_DeclineLavaCookie - checkmoney 200, 0 - compare VAR_RESULT, FALSE - goto_if_eq MtChimney_EventScript_NotEnoughMoney + goto_if_eq VAR_RESULT, NO, MtChimney_EventScript_DeclineLavaCookie + checkmoney 200 + goto_if_eq VAR_RESULT, FALSE, MtChimney_EventScript_NotEnoughMoney msgbox MtChimney_Text_ThankYouDear, MSGBOX_DEFAULT - checkitemspace ITEM_LAVA_COOKIE, 1 - compare VAR_RESULT, TRUE - call_if_eq MtChimney_EventScript_RemoveMoney + checkitemspace ITEM_LAVA_COOKIE + call_if_eq VAR_RESULT, TRUE, MtChimney_EventScript_RemoveMoney giveitem ITEM_LAVA_COOKIE - compare VAR_RESULT, FALSE - goto_if_eq MtChimney_EventScript_BagIsFull + goto_if_eq VAR_RESULT, FALSE, MtChimney_EventScript_BagIsFull hidemoneybox release end @@ -132,8 +124,8 @@ MtChimney_EventScript_BagIsFull:: end MtChimney_EventScript_RemoveMoney:: - removemoney 200, 0 - updatemoneybox 0, 0 + removemoney 200 + updatemoneybox return MtChimney_EventScript_DeclineLavaCookie:: @@ -323,7 +315,7 @@ MtChimney_Movement_Unused8: walk_left walk_left walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end MtChimney_Movement_Unused9: @@ -359,7 +351,7 @@ MtChimney_Movement_Unused11: MtChimney_Movement_Unused12: delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 walk_down walk_down @@ -375,7 +367,7 @@ MtChimney_Movement_Unused13: delay_16 delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 walk_down walk_down @@ -390,7 +382,7 @@ MtChimney_Movement_Unused14: MtChimney_Movement_Unused15: walk_left - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 step_end @@ -453,8 +445,7 @@ MtChimney_EventScript_MeteoriteMachine:: goto_if_unset FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY, MtChimney_EventScript_MachineOn goto_if_set FLAG_RECEIVED_METEORITE, MtChimney_EventScript_MachineOff msgbox MtChimney_Text_RemoveTheMeteorite, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MtChimney_EventScript_LeaveMeteoriteAlone + goto_if_eq VAR_RESULT, NO, MtChimney_EventScript_LeaveMeteoriteAlone msgbox MtChimney_Text_PlayerRemovedMeteorite, MSGBOX_DEFAULT giveitem ITEM_METEORITE setflag FLAG_RECEIVED_METEORITE @@ -483,8 +474,7 @@ MtChimney_EventScript_RouteSign:: MtChimney_EventScript_Shelby:: trainerbattle_single TRAINER_SHELBY_1, MtChimney_Text_ShelbyIntro, MtChimney_Text_ShelbyDefeat, MtChimney_EventScript_DefeatedShelby specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq MtChimney_EventScript_RematchShelby + goto_if_eq VAR_RESULT, TRUE, MtChimney_EventScript_RematchShelby msgbox MtChimney_Text_ShelbyPostBattle, MSGBOX_DEFAULT release end @@ -525,8 +515,7 @@ MtChimney_EventScript_Grunt1:: MtChimney_EventScript_Sawyer:: trainerbattle_single TRAINER_SAWYER_1, MtChimney_Text_SawyerIntro, MtChimney_Text_SawyerDefeat, MtChimney_EventScript_SawyerDefeated specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq MtChimney_EventScript_SawyerRematch + goto_if_eq VAR_RESULT, TRUE, MtChimney_EventScript_SawyerRematch msgbox MtChimney_Text_SawyerPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/MtChimney_CableCarStation/scripts.inc b/data/maps/MtChimney_CableCarStation/scripts.inc index c2e8da486e..b3e36a496a 100644 --- a/data/maps/MtChimney_CableCarStation/scripts.inc +++ b/data/maps/MtChimney_CableCarStation/scripts.inc @@ -6,8 +6,7 @@ MtChimney_CableCarStation_MapScripts:: .byte 0 MtChimney_CableCarStation_OnTransition: - compare VAR_CABLE_CAR_STATION_STATE, 1 - call_if_eq MtChimney_CableCarStation_EventScript_MoveAttendantAside + call_if_eq VAR_CABLE_CAR_STATION_STATE, 1, MtChimney_CableCarStation_EventScript_MoveAttendantAside end MtChimney_CableCarStation_EventScript_MoveAttendantAside:: @@ -34,10 +33,8 @@ MtChimney_CableCarStation_EventScript_Attendant:: lock faceplayer msgbox MtChimney_CableCarStation_Text_CableCarReadyGetOn, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq MtChimney_CableCarStation_EventScript_RideCableCar - compare VAR_RESULT, NO - goto_if_eq MtChimney_CableCarStation_EventScript_DeclineRide + goto_if_eq VAR_RESULT, YES, MtChimney_CableCarStation_EventScript_RideCableCar + goto_if_eq VAR_RESULT, NO, MtChimney_CableCarStation_EventScript_DeclineRide end MtChimney_CableCarStation_EventScript_RideCableCar:: @@ -64,7 +61,7 @@ MtChimney_CableCarStation_Movement_LeadPlayerToCableCar: walk_up walk_up walk_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end MtChimney_CableCarStation_Movement_FollowPlayerOutFromCableCar: diff --git a/data/maps/MtPyre_1F/scripts.inc b/data/maps/MtPyre_1F/scripts.inc index 1354b2ac1b..f97149b050 100644 --- a/data/maps/MtPyre_1F/scripts.inc +++ b/data/maps/MtPyre_1F/scripts.inc @@ -7,8 +7,7 @@ MtPyre_1F_EventScript_CleanseTagWoman:: goto_if_set FLAG_RECEIVED_CLEANSE_TAG, MtPyre_1F_EventScript_ReceivedCleanseTag msgbox MtPyre_1F_Text_TakeThisForYourOwnGood, MSGBOX_DEFAULT giveitem ITEM_CLEANSE_TAG - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_CLEANSE_TAG release end diff --git a/data/maps/MtPyre_2F/scripts.inc b/data/maps/MtPyre_2F/scripts.inc index 9fe7bf9d2f..381d034596 100644 --- a/data/maps/MtPyre_2F/scripts.inc +++ b/data/maps/MtPyre_2F/scripts.inc @@ -6,7 +6,7 @@ MtPyre_2F_MapScripts:: MtPyre_2F_SetHoleWarp: setstepcallback STEP_CB_CRACKED_FLOOR - setholewarp MAP_MT_PYRE_1F, 255, 0, 0 + setholewarp MAP_MT_PYRE_1F end MtPyre_2F_EventScript_Woman:: diff --git a/data/maps/MtPyre_3F/scripts.inc b/data/maps/MtPyre_3F/scripts.inc index b91a589bc0..3c79e807a4 100644 --- a/data/maps/MtPyre_3F/scripts.inc +++ b/data/maps/MtPyre_3F/scripts.inc @@ -7,15 +7,14 @@ MtPyre_3F_EventScript_William:: end MtPyre_3F_EventScript_Kayla:: - trainerbattle_single TRAINER_KAYLA, MtPyre_3F_Text_KaylaIntro MtPyre_3F_Text_KaylaDefeat + trainerbattle_single TRAINER_KAYLA, MtPyre_3F_Text_KaylaIntro, MtPyre_3F_Text_KaylaDefeat msgbox MtPyre_3F_Text_KaylaPostBattle, MSGBOX_AUTOCLOSE end MtPyre_3F_EventScript_Gabrielle:: trainerbattle_single TRAINER_GABRIELLE_1, MtPyre_3F_Text_GabrielleIntro, MtPyre_3F_Text_GabrielleDefeat, MtPyre_3F_EventScript_RegisterGabrielle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq MtPyre_3F_EventScript_RematchGabrielle + goto_if_eq VAR_RESULT, TRUE, MtPyre_3F_EventScript_RematchGabrielle msgbox MtPyre_3F_Text_GabriellePostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/MtPyre_6F/scripts.inc b/data/maps/MtPyre_6F/scripts.inc index 4b7df8e7cf..4de3f6e8b1 100644 --- a/data/maps/MtPyre_6F/scripts.inc +++ b/data/maps/MtPyre_6F/scripts.inc @@ -4,8 +4,7 @@ MtPyre_6F_MapScripts:: MtPyre_6F_EventScript_Valerie:: trainerbattle_single TRAINER_VALERIE_1, MtPyre_6F_Text_ValerieIntro, MtPyre_6F_Text_ValerieDefeat, MtPyre_6F_EventScript_RegisterValerie specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq MtPyre_6F_EventScript_RematchValerie + goto_if_eq VAR_RESULT, TRUE, MtPyre_6F_EventScript_RematchValerie msgbox MtPyre_6F_Text_ValeriePostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/MtPyre_Exterior/scripts.inc b/data/maps/MtPyre_Exterior/scripts.inc index 01279d645c..83bced7359 100644 --- a/data/maps/MtPyre_Exterior/scripts.inc +++ b/data/maps/MtPyre_Exterior/scripts.inc @@ -8,8 +8,7 @@ MtPyre_Exterior_OnTransition: MtPyre_Exterior_EventScript_CheckEnterFromSummit:: getplayerxy VAR_TEMP_0, VAR_TEMP_1 - compare VAR_TEMP_1, 12 - goto_if_lt MtPyre_Exterior_EventScript_EnterFromSummit + goto_if_lt VAR_TEMP_1, 12, MtPyre_Exterior_EventScript_EnterFromSummit return MtPyre_Exterior_EventScript_EnterFromSummit:: diff --git a/data/maps/MtPyre_Summit/scripts.inc b/data/maps/MtPyre_Summit/scripts.inc index d55872792b..3de60df3f2 100644 --- a/data/maps/MtPyre_Summit/scripts.inc +++ b/data/maps/MtPyre_Summit/scripts.inc @@ -11,8 +11,7 @@ MtPyre_Summit_MapScripts:: .byte 0 MtPyre_Summit_OnTransition: - compare VAR_MT_PYRE_STATE, 2 - call_if_eq MtPyre_Summit_EventScript_SetArchieMaxiePositions + call_if_eq VAR_MT_PYRE_STATE, 2, MtPyre_Summit_EventScript_SetArchieMaxiePositions end MtPyre_Summit_EventScript_SetArchieMaxiePositions:: @@ -42,15 +41,12 @@ MtPyre_Summit_EventScript_TeamAquaExits:: playbgm MUS_ENCOUNTER_AQUA, FALSE applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceUp waitmovement 0 - applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 50 - compare VAR_0x8008, 0 - call_if_eq MtPyre_Summit_EventScript_ArchieFacePlayer0 - compare VAR_0x8008, 1 - call_if_eq MtPyre_Summit_EventScript_ArchieFacePlayer1 - compare VAR_0x8008, 2 - call_if_eq MtPyre_Summit_EventScript_ArchieFacePlayer2 + call_if_eq VAR_0x8008, 0, MtPyre_Summit_EventScript_ArchieFacePlayer0 + call_if_eq VAR_0x8008, 1, MtPyre_Summit_EventScript_ArchieFacePlayer1 + call_if_eq VAR_0x8008, 2, MtPyre_Summit_EventScript_ArchieFacePlayer2 msgbox MtPyre_Summit_Text_ArchieWeGotTheOrbLetsGo, MSGBOX_DEFAULT closemessage fadescreen FADE_TO_BLACK @@ -65,12 +61,9 @@ MtPyre_Summit_EventScript_TeamAquaExits:: fadescreen FADE_FROM_BLACK delay 20 setvar VAR_MT_PYRE_STATE, 1 - compare VAR_0x8008, 0 - call_if_eq MtPyre_Summit_EventScript_OldLadyApproachPlayer0 - compare VAR_0x8008, 1 - call_if_eq MtPyre_Summit_EventScript_OldLadyApproachPlayer1 - compare VAR_0x8008, 2 - call_if_eq MtPyre_Summit_EventScript_OldLadyApproachPlayer2 + call_if_eq VAR_0x8008, 0, MtPyre_Summit_EventScript_OldLadyApproachPlayer0 + call_if_eq VAR_0x8008, 1, MtPyre_Summit_EventScript_OldLadyApproachPlayer1 + call_if_eq VAR_0x8008, 2, MtPyre_Summit_EventScript_OldLadyApproachPlayer2 msgbox MtPyre_Summit_Text_BothOrbsTakenMagmaLeftThis, MSGBOX_DEFAULT giveitem ITEM_MAGMA_EMBLEM setflag FLAG_RECEIVED_RED_OR_BLUE_ORB @@ -95,7 +88,7 @@ MtPyre_Summit_EventScript_ArchieFacePlayer2:: MtPyre_Summit_EventScript_OldLadyApproachPlayer0:: applymovement LOCALID_OLD_LADY, MtPyre_Summit_Movement_OldLadyApproachPlayer0 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return @@ -107,14 +100,14 @@ MtPyre_Summit_EventScript_OldLadyApproachPlayer1:: MtPyre_Summit_EventScript_OldLadyApproachPlayer2:: applymovement LOCALID_OLD_LADY, MtPyre_Summit_Movement_OldLadyApproachPlayer2 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return MtPyre_Summit_Movement_OldLadyApproachPlayer0: walk_down walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end MtPyre_Summit_Movement_OldLadyApproachPlayer1: @@ -124,17 +117,17 @@ MtPyre_Summit_Movement_OldLadyApproachPlayer1: MtPyre_Summit_Movement_OldLadyApproachPlayer2: walk_down walk_down - walk_in_place_fastest_right + walk_in_place_faster_right step_end MtPyre_Summit_Movement_ArchieFacePlayer0: walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end MtPyre_Summit_Movement_ArchieFacePlayer2: walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end MtPyre_Summit_EventScript_OldMan:: @@ -142,19 +135,15 @@ MtPyre_Summit_EventScript_OldMan:: faceplayer goto_if_set FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, MtPyre_Summit_EventScript_OldManAfterRayquaza msgbox MtPyre_Summit_Text_WillYouHearOutMyTale, MSGBOX_YESNO - compare VAR_RESULT, YES - call_if_eq MtPyre_Summit_EventScript_OldManTale - compare VAR_RESULT, NO - call_if_eq MtPyre_Summit_EventScript_DeclineOldManTale + call_if_eq VAR_RESULT, YES, MtPyre_Summit_EventScript_OldManTale + call_if_eq VAR_RESULT, NO, MtPyre_Summit_EventScript_DeclineOldManTale release end MtPyre_Summit_EventScript_OldManAfterRayquaza:: msgbox MtPyre_Summit_Text_HearTheNewLegendOfHoenn, MSGBOX_YESNO - compare VAR_RESULT, YES - call_if_eq MtPyre_Summit_EventScript_OldManNewTale - compare VAR_RESULT, NO - call_if_eq MtPyre_Summit_EventScript_DeclineOldManTale + call_if_eq VAR_RESULT, YES, MtPyre_Summit_EventScript_OldManNewTale + call_if_eq VAR_RESULT, NO, MtPyre_Summit_EventScript_DeclineOldManTale release end @@ -174,8 +163,7 @@ MtPyre_Summit_EventScript_OldLady:: lock faceplayer goto_if_set FLAG_RETURNED_RED_OR_BLUE_ORB, MtPyre_Summit_EventScript_OldLadyAfterOrbsReturned - compare VAR_MT_PYRE_STATE, 3 - call_if_ge MtPyre_Summit_EventScript_OldLadyOrbsReturned + call_if_ge VAR_MT_PYRE_STATE, 3, MtPyre_Summit_EventScript_OldLadyOrbsReturned goto_if_set FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, MtPyre_Summit_EventScript_OldLadyLegendariesAwake msgbox MtPyre_Summit_Text_OrbsHaveBeenTaken, MSGBOX_DEFAULT release @@ -216,35 +204,26 @@ MtPyre_Summit_EventScript_ArchieMaxieTrigger2:: end MtPyre_Summit_EventScript_ArchieMaxieReturnOrbs:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 60 - compare VAR_0x8008, 0 - call_if_eq MtPyre_Summit_EventScript_ArchieMaxieBeginExit0 - compare VAR_0x8008, 1 - call_if_eq MtPyre_Summit_EventScript_ArchieMaxieBeginExit1 - compare VAR_0x8008, 2 - call_if_eq MtPyre_Summit_EventScript_ArchieMaxieBeginExit2 + call_if_eq VAR_0x8008, 0, MtPyre_Summit_EventScript_ArchieMaxieBeginExit0 + call_if_eq VAR_0x8008, 1, MtPyre_Summit_EventScript_ArchieMaxieBeginExit1 + call_if_eq VAR_0x8008, 2, MtPyre_Summit_EventScript_ArchieMaxieBeginExit2 playse SE_PIN applymovement LOCALID_MAXIE, Common_Movement_ExclamationMark waitmovement 0 applymovement LOCALID_MAXIE, Common_Movement_Delay48 waitmovement 0 delay 30 - compare VAR_0x8008, 0 - call_if_eq MtPyre_Summit_EventScript_MaxieApproachPlayer0 - compare VAR_0x8008, 1 - call_if_eq MtPyre_Summit_EventScript_MaxieApproachPlayer1 - compare VAR_0x8008, 2 - call_if_eq MtPyre_Summit_EventScript_MaxieApproachPlayer2 + call_if_eq VAR_0x8008, 0, MtPyre_Summit_EventScript_MaxieApproachPlayer0 + call_if_eq VAR_0x8008, 1, MtPyre_Summit_EventScript_MaxieApproachPlayer1 + call_if_eq VAR_0x8008, 2, MtPyre_Summit_EventScript_MaxieApproachPlayer2 msgbox MtPyre_Summit_Text_MaxieSilence, MSGBOX_DEFAULT closemessage - compare VAR_0x8008, 0 - call_if_eq MtPyre_Summit_EventScript_MaxieApproachArchie0 - compare VAR_0x8008, 1 - call_if_eq MtPyre_Summit_EventScript_MaxieApproachArchie1 - compare VAR_0x8008, 2 - call_if_eq MtPyre_Summit_EventScript_MaxieApproachArchie2 + call_if_eq VAR_0x8008, 0, MtPyre_Summit_EventScript_MaxieApproachArchie0 + call_if_eq VAR_0x8008, 1, MtPyre_Summit_EventScript_MaxieApproachArchie1 + call_if_eq VAR_0x8008, 2, MtPyre_Summit_EventScript_MaxieApproachArchie2 delay 30 applymovement LOCALID_ARCHIE, MtPyre_Summit_Movement_ArchieExit applymovement LOCALID_MAXIE, MtPyre_Summit_Movement_MaxieExit @@ -301,7 +280,7 @@ MtPyre_Summit_EventScript_MaxieApproachArchie0:: applymovement OBJ_EVENT_ID_PLAYER, MtPyre_Summit_Movement_PlayerWatchMaxie applymovement LOCALID_MAXIE, MtPyre_Summit_Movement_MaxieApproachArchie0 waitmovement 0 - applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return @@ -309,7 +288,7 @@ MtPyre_Summit_EventScript_MaxieApproachArchie1:: applymovement OBJ_EVENT_ID_PLAYER, MtPyre_Summit_Movement_PlayerWatchMaxie applymovement LOCALID_MAXIE, MtPyre_Summit_Movement_MaxieApproachArchie1 waitmovement 0 - applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return @@ -317,20 +296,20 @@ MtPyre_Summit_EventScript_MaxieApproachArchie2:: applymovement OBJ_EVENT_ID_PLAYER, MtPyre_Summit_Movement_PlayerWatchMaxie applymovement LOCALID_MAXIE, MtPyre_Summit_Movement_MaxieApproachArchie2 waitmovement 0 - applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return MtPyre_Summit_Movement_PlayerFaceMaxie0: delay_16 delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right step_end MtPyre_Summit_Movement_PlayerFaceMaxie: delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end MtPyre_Summit_Movement_ArchieExit: @@ -355,26 +334,26 @@ MtPyre_Summit_Movement_PlayerWatchArchieMaxieExit0: delay_16 delay_8 walk_left - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end MtPyre_Summit_Movement_PlayerWatchArchieMaxieExit1: delay_16 delay_8 walk_right - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end MtPyre_Summit_Movement_PlayerWatchArchieMaxieExit2: delay_16 delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end MtPyre_Summit_Movement_MaxieApproachPlayer0: @@ -388,24 +367,24 @@ MtPyre_Summit_Movement_MaxieApproachPlayer1: walk_up walk_up walk_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end MtPyre_Summit_Movement_MaxieApproachPlayer2: walk_up walk_up walk_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end MtPyre_Summit_Movement_ArchieWatchMaxie: delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up step_end MtPyre_Summit_Movement_PlayerWatchMaxie: delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end MtPyre_Summit_Movement_MaxieApproachArchie0: @@ -413,21 +392,21 @@ MtPyre_Summit_Movement_MaxieApproachArchie0: walk_right walk_down walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end MtPyre_Summit_Movement_MaxieApproachArchie1: walk_down walk_down walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end MtPyre_Summit_Movement_MaxieApproachArchie2: walk_down walk_down walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end MtPyre_Summit_EventScript_Grunt1:: diff --git a/data/maps/NavelRock_Bottom/scripts.inc b/data/maps/NavelRock_Bottom/scripts.inc index da9e06cff3..90cc229895 100644 --- a/data/maps/NavelRock_Bottom/scripts.inc +++ b/data/maps/NavelRock_Bottom/scripts.inc @@ -25,8 +25,7 @@ NavelRock_Bottom_OnResume: NavelRock_Bottom_EventScript_TryRemoveLugia:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject LOCALID_LUGIA return @@ -51,24 +50,18 @@ NavelRock_Bottom_EventScript_Lugia:: delay 30 delay 50 waitse - playmoncry SPECIES_LUGIA, 2 + playmoncry SPECIES_LUGIA, CRY_MODE_ENCOUNTER waitmoncry delay 20 - setvar VAR_0x8004, SPECIES_LUGIA - setvar VAR_0x8005, 70 @ level - setvar VAR_0x8006, ITEM_NONE - special CreateEventLegalEnemyMon + seteventmon SPECIES_LUGIA, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq NavelRock_Bottom_EventScript_DefeatedLugia - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq NavelRock_Bottom_EventScript_RanFromLugia - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq NavelRock_Bottom_EventScript_RanFromLugia + goto_if_eq VAR_RESULT, B_OUTCOME_WON, NavelRock_Bottom_EventScript_DefeatedLugia + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, NavelRock_Bottom_EventScript_RanFromLugia + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, NavelRock_Bottom_EventScript_RanFromLugia setflag FLAG_CAUGHT_LUGIA release end diff --git a/data/maps/NavelRock_Harbor/scripts.inc b/data/maps/NavelRock_Harbor/scripts.inc index 586085cbfb..a981759175 100644 --- a/data/maps/NavelRock_Harbor/scripts.inc +++ b/data/maps/NavelRock_Harbor/scripts.inc @@ -8,17 +8,16 @@ NavelRock_Harbor_EventScript_Sailor:: lock faceplayer msgbox NavelRock_Harbor_Text_SailorReturn, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq NavelRock_Harbor_EventScript_AsYouLike + goto_if_eq VAR_RESULT, NO, NavelRock_Harbor_EventScript_AsYouLike msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 30 hideobjectat LOCALID_SAILOR, MAP_NAVEL_ROCK_HARBOR setvar VAR_0x8004, LOCALID_SS_TIDAL call Common_EventScript_FerryDepartIsland - warp MAP_LILYCOVE_CITY_HARBOR, 255, 8, 11 + warp MAP_LILYCOVE_CITY_HARBOR, 8, 11 waitstate release end diff --git a/data/maps/NavelRock_Top/scripts.inc b/data/maps/NavelRock_Top/scripts.inc index 4355699ee5..10969367a1 100644 --- a/data/maps/NavelRock_Top/scripts.inc +++ b/data/maps/NavelRock_Top/scripts.inc @@ -28,8 +28,7 @@ NavelRock_Top_OnResume: NavelRock_Top_EventScript_TryRemoveHoOh:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject LOCALID_HO_OH return @@ -47,7 +46,7 @@ NavelRock_Top_EventScript_HoOh:: setweather WEATHER_NONE doweather waitse - playmoncry SPECIES_HO_OH, 2 + playmoncry SPECIES_HO_OH, CRY_MODE_ENCOUNTER delay 30 waitmoncry delay 60 @@ -58,22 +57,16 @@ NavelRock_Top_EventScript_HoOh:: applymovement LOCALID_HO_OH, NavelRock_Top_Movement_HoOhApproach waitmovement 0 special RemoveCameraObject - setvar VAR_0x8004, SPECIES_HO_OH - setvar VAR_0x8005, 70 @ level - setvar VAR_0x8006, ITEM_NONE - special CreateEventLegalEnemyMon + seteventmon SPECIES_HO_OH, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE setvar VAR_LAST_TALKED, LOCALID_HO_OH specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq NavelRock_Top_EventScript_DefeatedHoOh - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq NavelRock_Top_EventScript_RanFromHoOh - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq NavelRock_Top_EventScript_RanFromHoOh + goto_if_eq VAR_RESULT, B_OUTCOME_WON, NavelRock_Top_EventScript_DefeatedHoOh + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, NavelRock_Top_EventScript_RanFromHoOh + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, NavelRock_Top_EventScript_RanFromHoOh setflag FLAG_CAUGHT_HO_OH releaseall end diff --git a/data/maps/NewMauville_Entrance/scripts.inc b/data/maps/NewMauville_Entrance/scripts.inc index 7bc134d502..4c498190e0 100644 --- a/data/maps/NewMauville_Entrance/scripts.inc +++ b/data/maps/NewMauville_Entrance/scripts.inc @@ -4,17 +4,16 @@ NewMauville_Entrance_MapScripts:: .byte 0 NewMauville_Entrance_OnLoad: - compare VAR_NEW_MAUVILLE_STATE, 0 - call_if_eq NewMauville_Entrance_EventScript_CloseDoor + call_if_eq VAR_NEW_MAUVILLE_STATE, 0, NewMauville_Entrance_EventScript_CloseDoor end NewMauville_Entrance_EventScript_CloseDoor:: - setmetatile 3, 0, METATILE_Facility_NewMauvilleDoor_Closed_Tile0, 1 - setmetatile 4, 0, METATILE_Facility_NewMauvilleDoor_Closed_Tile1, 1 - setmetatile 5, 0, METATILE_Facility_NewMauvilleDoor_Closed_Tile2, 1 - setmetatile 3, 1, METATILE_Facility_NewMauvilleDoor_Closed_Tile3, 1 - setmetatile 4, 1, METATILE_Facility_NewMauvilleDoor_Closed_Tile4, 1 - setmetatile 5, 1, METATILE_Facility_NewMauvilleDoor_Closed_Tile5, 1 + setmetatile 3, 0, METATILE_Facility_NewMauvilleDoor_Closed_Tile0, TRUE + setmetatile 4, 0, METATILE_Facility_NewMauvilleDoor_Closed_Tile1, TRUE + setmetatile 5, 0, METATILE_Facility_NewMauvilleDoor_Closed_Tile2, TRUE + setmetatile 3, 1, METATILE_Facility_NewMauvilleDoor_Closed_Tile3, TRUE + setmetatile 4, 1, METATILE_Facility_NewMauvilleDoor_Closed_Tile4, TRUE + setmetatile 5, 1, METATILE_Facility_NewMauvilleDoor_Closed_Tile5, TRUE return NewMauville_Entrance_OnTransition: @@ -23,22 +22,20 @@ NewMauville_Entrance_OnTransition: NewMauville_Entrance_EventScript_Door:: lockall - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox NewMauville_Entrance_Text_DoorIsLocked, MSGBOX_DEFAULT - checkitem ITEM_BASEMENT_KEY, 1 - compare VAR_RESULT, FALSE - goto_if_eq NewMauville_Entrance_EventScript_DontOpenDoor + checkitem ITEM_BASEMENT_KEY + goto_if_eq VAR_RESULT, FALSE, NewMauville_Entrance_EventScript_DontOpenDoor msgbox NewMauville_Entrance_Text_UseBasementKey, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq NewMauville_Entrance_EventScript_DontOpenDoor + goto_if_eq VAR_RESULT, NO, NewMauville_Entrance_EventScript_DontOpenDoor msgbox NewMauville_Entrance_Text_UsedBasementKey, MSGBOX_DEFAULT - setmetatile 3, 0, METATILE_Facility_NewMauvilleDoor_Open_Tile0, 0 - setmetatile 4, 0, METATILE_Facility_NewMauvilleDoor_Open_Tile1, 0 - setmetatile 5, 0, METATILE_Facility_NewMauvilleDoor_Open_Tile2, 0 - setmetatile 3, 1, METATILE_Facility_NewMauvilleDoor_Open_Tile3, 1 - setmetatile 4, 1, METATILE_Facility_NewMauvilleDoor_Open_Tile4, 0 - setmetatile 5, 1, METATILE_Facility_NewMauvilleDoor_Open_Tile5, 1 + setmetatile 3, 0, METATILE_Facility_NewMauvilleDoor_Open_Tile0, FALSE + setmetatile 4, 0, METATILE_Facility_NewMauvilleDoor_Open_Tile1, FALSE + setmetatile 5, 0, METATILE_Facility_NewMauvilleDoor_Open_Tile2, FALSE + setmetatile 3, 1, METATILE_Facility_NewMauvilleDoor_Open_Tile3, TRUE + setmetatile 4, 1, METATILE_Facility_NewMauvilleDoor_Open_Tile4, FALSE + setmetatile 5, 1, METATILE_Facility_NewMauvilleDoor_Open_Tile5, TRUE special DrawWholeMapView playse SE_BANG setvar VAR_NEW_MAUVILLE_STATE, 1 diff --git a/data/maps/NewMauville_Inside/scripts.inc b/data/maps/NewMauville_Inside/scripts.inc index ac9572ea85..244eea436f 100644 --- a/data/maps/NewMauville_Inside/scripts.inc +++ b/data/maps/NewMauville_Inside/scripts.inc @@ -5,17 +5,14 @@ NewMauville_Inside_MapScripts:: .byte 0 NewMauville_Inside_OnResume: - compare VAR_TEMP_1, 1 - call_if_eq NewMauville_Inside_EventScript_SetBarrierStateBlueButton - compare VAR_TEMP_2, 1 - call_if_eq NewMauville_Inside_EventScript_SetBarrierStateGreenButton + call_if_eq VAR_TEMP_1, 1, NewMauville_Inside_EventScript_SetBarrierStateBlueButton + call_if_eq VAR_TEMP_2, 1, NewMauville_Inside_EventScript_SetBarrierStateGreenButton call_if_set FLAG_SYS_CTRL_OBJ_DELETE, NewMauville_Inside_EventScript_TryRemoveVoltorb end NewMauville_Inside_EventScript_TryRemoveVoltorb:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject VAR_LAST_TALKED return @@ -40,8 +37,7 @@ NewMauville_Inside_EventScript_ShowVoltorb3:: return NewMauville_Inside_OnLoad: - compare VAR_NEW_MAUVILLE_STATE, 2 - call_if_eq NewMauville_Inside_EventScript_SetGeneratorOffMetatiles + call_if_eq VAR_NEW_MAUVILLE_STATE, 2, NewMauville_Inside_EventScript_SetGeneratorOffMetatiles end NewMauville_Inside_EventScript_BlueButton:: @@ -65,83 +61,83 @@ NewMauville_Inside_EventScript_GreenButton:: end NewMauville_Inside_EventScript_SetBarrierStateBlueButton:: - setmetatile 23, 34, METATILE_BikeShop_Barrier_Hidden_Top, 1 - setmetatile 23, 35, METATILE_BikeShop_Barrier_Hidden_Bottom, 1 - setmetatile 23, 36, METATILE_BikeShop_Floor_Shadow_Top, 0 - setmetatile 23, 37, METATILE_BikeShop_Wall_Edge_Top, 0 - setmetatile 10, 16, METATILE_BikeShop_Barrier_Hidden_Top, 1 - setmetatile 10, 17, METATILE_BikeShop_Barrier_Hidden_Bottom, 1 - setmetatile 10, 18, METATILE_BikeShop_Floor_Shadow_Top, 0 - setmetatile 10, 19, METATILE_BikeShop_Wall_Edge_Top, 0 - setmetatile 10, 0, METATILE_BikeShop_Barrier_Hidden_Top, 1 - setmetatile 10, 1, METATILE_BikeShop_Barrier_Hidden_Bottom, 1 - setmetatile 10, 2, METATILE_BikeShop_Floor_Shadow_Top, 0 - setmetatile 10, 3, METATILE_BikeShop_Wall_Edge_Top, 0 - setmetatile 37, 33, METATILE_BikeShop_Barrier_Green_Top, 1 - setmetatile 37, 34, METATILE_BikeShop_Barrier_Green_TopMid, 1 - setmetatile 37, 35, METATILE_BikeShop_Barrier_Green_BottomMid, 1 - setmetatile 37, 36, METATILE_BikeShop_Barrier_Green_Bottom, 1 - setmetatile 28, 22, METATILE_BikeShop_Barrier_Green_Top, 1 - setmetatile 28, 23, METATILE_BikeShop_Barrier_Green_TopMid, 1 - setmetatile 28, 24, METATILE_BikeShop_Barrier_Green_BottomMid, 1 - setmetatile 28, 25, METATILE_BikeShop_Barrier_Green_Bottom, 1 - setmetatile 10, 24, METATILE_BikeShop_Barrier_Green_Top, 1 - setmetatile 10, 25, METATILE_BikeShop_Barrier_Green_TopMid, 1 - setmetatile 10, 26, METATILE_BikeShop_Barrier_Green_BottomMid, 1 - setmetatile 10, 27, METATILE_BikeShop_Barrier_Green_Bottom, 1 - setmetatile 21, 2, METATILE_BikeShop_Barrier_Green_Top, 1 - setmetatile 21, 3, METATILE_BikeShop_Barrier_Green_TopMid, 1 - setmetatile 21, 4, METATILE_BikeShop_Barrier_Green_BottomMid, 1 - setmetatile 21, 5, METATILE_BikeShop_Barrier_Green_Bottom, 1 - setmetatile 6, 11, METATILE_BikeShop_Button_Pressed, 0 - setmetatile 13, 10, METATILE_BikeShop_Button_Pressed, 0 - setmetatile 16, 22, METATILE_BikeShop_Button_Pressed, 0 - setmetatile 4, 26, METATILE_BikeShop_Button_Pressed, 0 - setmetatile 30, 38, METATILE_BikeShop_Button_Pressed, 0 - setmetatile 2, 11, METATILE_BikeShop_Button_Green, 0 - setmetatile 17, 10, METATILE_BikeShop_Button_Green, 0 - setmetatile 25, 18, METATILE_BikeShop_Button_Green, 0 - setmetatile 18, 36, METATILE_BikeShop_Button_Green, 0 + setmetatile 23, 34, METATILE_BikeShop_Barrier_Hidden_Top, TRUE + setmetatile 23, 35, METATILE_BikeShop_Barrier_Hidden_Bottom, TRUE + setmetatile 23, 36, METATILE_BikeShop_Floor_Shadow_Top, FALSE + setmetatile 23, 37, METATILE_BikeShop_Wall_Edge_Top, FALSE + setmetatile 10, 16, METATILE_BikeShop_Barrier_Hidden_Top, TRUE + setmetatile 10, 17, METATILE_BikeShop_Barrier_Hidden_Bottom, TRUE + setmetatile 10, 18, METATILE_BikeShop_Floor_Shadow_Top, FALSE + setmetatile 10, 19, METATILE_BikeShop_Wall_Edge_Top, FALSE + setmetatile 10, 0, METATILE_BikeShop_Barrier_Hidden_Top, TRUE + setmetatile 10, 1, METATILE_BikeShop_Barrier_Hidden_Bottom, TRUE + setmetatile 10, 2, METATILE_BikeShop_Floor_Shadow_Top, FALSE + setmetatile 10, 3, METATILE_BikeShop_Wall_Edge_Top, FALSE + setmetatile 37, 33, METATILE_BikeShop_Barrier_Green_Top, TRUE + setmetatile 37, 34, METATILE_BikeShop_Barrier_Green_TopMid, TRUE + setmetatile 37, 35, METATILE_BikeShop_Barrier_Green_BottomMid, TRUE + setmetatile 37, 36, METATILE_BikeShop_Barrier_Green_Bottom, TRUE + setmetatile 28, 22, METATILE_BikeShop_Barrier_Green_Top, TRUE + setmetatile 28, 23, METATILE_BikeShop_Barrier_Green_TopMid, TRUE + setmetatile 28, 24, METATILE_BikeShop_Barrier_Green_BottomMid, TRUE + setmetatile 28, 25, METATILE_BikeShop_Barrier_Green_Bottom, TRUE + setmetatile 10, 24, METATILE_BikeShop_Barrier_Green_Top, TRUE + setmetatile 10, 25, METATILE_BikeShop_Barrier_Green_TopMid, TRUE + setmetatile 10, 26, METATILE_BikeShop_Barrier_Green_BottomMid, TRUE + setmetatile 10, 27, METATILE_BikeShop_Barrier_Green_Bottom, TRUE + setmetatile 21, 2, METATILE_BikeShop_Barrier_Green_Top, TRUE + setmetatile 21, 3, METATILE_BikeShop_Barrier_Green_TopMid, TRUE + setmetatile 21, 4, METATILE_BikeShop_Barrier_Green_BottomMid, TRUE + setmetatile 21, 5, METATILE_BikeShop_Barrier_Green_Bottom, TRUE + setmetatile 6, 11, METATILE_BikeShop_Button_Pressed, FALSE + setmetatile 13, 10, METATILE_BikeShop_Button_Pressed, FALSE + setmetatile 16, 22, METATILE_BikeShop_Button_Pressed, FALSE + setmetatile 4, 26, METATILE_BikeShop_Button_Pressed, FALSE + setmetatile 30, 38, METATILE_BikeShop_Button_Pressed, FALSE + setmetatile 2, 11, METATILE_BikeShop_Button_Green, FALSE + setmetatile 17, 10, METATILE_BikeShop_Button_Green, FALSE + setmetatile 25, 18, METATILE_BikeShop_Button_Green, FALSE + setmetatile 18, 36, METATILE_BikeShop_Button_Green, FALSE return NewMauville_Inside_EventScript_SetBarrierStateGreenButton:: - setmetatile 23, 34, METATILE_BikeShop_Barrier_Blue_Top, 1 - setmetatile 23, 35, METATILE_BikeShop_Barrier_Blue_TopMid, 1 - setmetatile 23, 36, METATILE_BikeShop_Barrier_Blue_BottomMid, 1 - setmetatile 23, 37, METATILE_BikeShop_Barrier_Blue_Bottom, 1 - setmetatile 10, 16, METATILE_BikeShop_Barrier_Blue_Top, 1 - setmetatile 10, 17, METATILE_BikeShop_Barrier_Blue_TopMid, 1 - setmetatile 10, 18, METATILE_BikeShop_Barrier_Blue_BottomMid, 1 - setmetatile 10, 19, METATILE_BikeShop_Barrier_Blue_Bottom, 1 - setmetatile 10, 0, METATILE_BikeShop_Barrier_Blue_Top, 1 - setmetatile 10, 1, METATILE_BikeShop_Barrier_Blue_TopMid, 1 - setmetatile 10, 2, METATILE_BikeShop_Barrier_Blue_BottomMid, 1 - setmetatile 10, 3, METATILE_BikeShop_Barrier_Blue_Bottom, 1 - setmetatile 37, 33, METATILE_BikeShop_Barrier_Hidden_Top, 1 - setmetatile 37, 34, METATILE_BikeShop_Barrier_Hidden_Bottom, 1 - setmetatile 37, 35, METATILE_BikeShop_Floor_Shadow_Top, 0 - setmetatile 37, 36, METATILE_BikeShop_Wall_Edge_Top, 0 - setmetatile 28, 22, METATILE_BikeShop_Barrier_Hidden_Top, 1 - setmetatile 28, 23, METATILE_BikeShop_Barrier_Hidden_Bottom, 1 - setmetatile 28, 24, METATILE_BikeShop_Floor_Shadow_Top, 0 - setmetatile 28, 25, METATILE_BikeShop_Wall_Edge_Top, 0 - setmetatile 10, 24, METATILE_BikeShop_Barrier_Hidden_Top, 1 - setmetatile 10, 25, METATILE_BikeShop_Barrier_Hidden_Bottom, 1 - setmetatile 10, 26, METATILE_BikeShop_Floor_Shadow_Top, 0 - setmetatile 10, 27, METATILE_BikeShop_Wall_Edge_Top, 0 - setmetatile 21, 2, METATILE_BikeShop_Barrier_Hidden_Top, 1 - setmetatile 21, 3, METATILE_BikeShop_Barrier_Hidden_Bottom, 1 - setmetatile 21, 4, METATILE_BikeShop_Floor_Shadow_Top, 0 - setmetatile 21, 5, METATILE_BikeShop_Wall_Edge_Top, 0 - setmetatile 2, 11, METATILE_BikeShop_Button_Pressed, 0 - setmetatile 17, 10, METATILE_BikeShop_Button_Pressed, 0 - setmetatile 25, 18, METATILE_BikeShop_Button_Pressed, 0 - setmetatile 18, 36, METATILE_BikeShop_Button_Pressed, 0 - setmetatile 6, 11, METATILE_BikeShop_Button_Blue, 0 - setmetatile 13, 10, METATILE_BikeShop_Button_Blue, 0 - setmetatile 16, 22, METATILE_BikeShop_Button_Blue, 0 - setmetatile 4, 26, METATILE_BikeShop_Button_Blue, 0 - setmetatile 30, 38, METATILE_BikeShop_Button_Blue, 0 + setmetatile 23, 34, METATILE_BikeShop_Barrier_Blue_Top, TRUE + setmetatile 23, 35, METATILE_BikeShop_Barrier_Blue_TopMid, TRUE + setmetatile 23, 36, METATILE_BikeShop_Barrier_Blue_BottomMid, TRUE + setmetatile 23, 37, METATILE_BikeShop_Barrier_Blue_Bottom, TRUE + setmetatile 10, 16, METATILE_BikeShop_Barrier_Blue_Top, TRUE + setmetatile 10, 17, METATILE_BikeShop_Barrier_Blue_TopMid, TRUE + setmetatile 10, 18, METATILE_BikeShop_Barrier_Blue_BottomMid, TRUE + setmetatile 10, 19, METATILE_BikeShop_Barrier_Blue_Bottom, TRUE + setmetatile 10, 0, METATILE_BikeShop_Barrier_Blue_Top, TRUE + setmetatile 10, 1, METATILE_BikeShop_Barrier_Blue_TopMid, TRUE + setmetatile 10, 2, METATILE_BikeShop_Barrier_Blue_BottomMid, TRUE + setmetatile 10, 3, METATILE_BikeShop_Barrier_Blue_Bottom, TRUE + setmetatile 37, 33, METATILE_BikeShop_Barrier_Hidden_Top, TRUE + setmetatile 37, 34, METATILE_BikeShop_Barrier_Hidden_Bottom, TRUE + setmetatile 37, 35, METATILE_BikeShop_Floor_Shadow_Top, FALSE + setmetatile 37, 36, METATILE_BikeShop_Wall_Edge_Top, FALSE + setmetatile 28, 22, METATILE_BikeShop_Barrier_Hidden_Top, TRUE + setmetatile 28, 23, METATILE_BikeShop_Barrier_Hidden_Bottom, TRUE + setmetatile 28, 24, METATILE_BikeShop_Floor_Shadow_Top, FALSE + setmetatile 28, 25, METATILE_BikeShop_Wall_Edge_Top, FALSE + setmetatile 10, 24, METATILE_BikeShop_Barrier_Hidden_Top, TRUE + setmetatile 10, 25, METATILE_BikeShop_Barrier_Hidden_Bottom, TRUE + setmetatile 10, 26, METATILE_BikeShop_Floor_Shadow_Top, FALSE + setmetatile 10, 27, METATILE_BikeShop_Wall_Edge_Top, FALSE + setmetatile 21, 2, METATILE_BikeShop_Barrier_Hidden_Top, TRUE + setmetatile 21, 3, METATILE_BikeShop_Barrier_Hidden_Bottom, TRUE + setmetatile 21, 4, METATILE_BikeShop_Floor_Shadow_Top, FALSE + setmetatile 21, 5, METATILE_BikeShop_Wall_Edge_Top, FALSE + setmetatile 2, 11, METATILE_BikeShop_Button_Pressed, FALSE + setmetatile 17, 10, METATILE_BikeShop_Button_Pressed, FALSE + setmetatile 25, 18, METATILE_BikeShop_Button_Pressed, FALSE + setmetatile 18, 36, METATILE_BikeShop_Button_Pressed, FALSE + setmetatile 6, 11, METATILE_BikeShop_Button_Blue, FALSE + setmetatile 13, 10, METATILE_BikeShop_Button_Blue, FALSE + setmetatile 16, 22, METATILE_BikeShop_Button_Blue, FALSE + setmetatile 4, 26, METATILE_BikeShop_Button_Blue, FALSE + setmetatile 30, 38, METATILE_BikeShop_Button_Blue, FALSE return NewMauville_Inside_EventScript_RedButton:: @@ -153,22 +149,21 @@ NewMauville_Inside_EventScript_RedButton:: end NewMauville_Inside_EventScript_SetGeneratorOffMetatiles:: - setmetatile 33, 6, METATILE_BikeShop_Button_Pressed, 0 - setmetatile 32, 2, METATILE_BikeShop_Generator_Off_Tile0, 1 - setmetatile 33, 2, METATILE_BikeShop_Generator_Off_Tile1, 1 - setmetatile 34, 2, METATILE_BikeShop_Generator_Off_Tile2, 1 - setmetatile 35, 2, METATILE_BikeShop_Generator_Off_Tile3, 1 - setmetatile 32, 3, METATILE_BikeShop_Generator_Off_Tile4, 1 - setmetatile 33, 3, METATILE_BikeShop_Generator_Off_Tile5, 1 - setmetatile 34, 3, METATILE_BikeShop_Generator_Off_Tile6, 1 - setmetatile 35, 3, METATILE_BikeShop_Generator_Off_Tile7, 1 + setmetatile 33, 6, METATILE_BikeShop_Button_Pressed, FALSE + setmetatile 32, 2, METATILE_BikeShop_Generator_Off_Tile0, TRUE + setmetatile 33, 2, METATILE_BikeShop_Generator_Off_Tile1, TRUE + setmetatile 34, 2, METATILE_BikeShop_Generator_Off_Tile2, TRUE + setmetatile 35, 2, METATILE_BikeShop_Generator_Off_Tile3, TRUE + setmetatile 32, 3, METATILE_BikeShop_Generator_Off_Tile4, TRUE + setmetatile 33, 3, METATILE_BikeShop_Generator_Off_Tile5, TRUE + setmetatile 34, 3, METATILE_BikeShop_Generator_Off_Tile6, TRUE + setmetatile 35, 3, METATILE_BikeShop_Generator_Off_Tile7, TRUE special DrawWholeMapView return NewMauville_Inside_EventScript_Generator:: lockall - compare VAR_NEW_MAUVILLE_STATE, 2 - goto_if_eq NewMauville_Inside_EventScript_GeneratorOff + goto_if_eq VAR_NEW_MAUVILLE_STATE, 2, NewMauville_Inside_EventScript_GeneratorOff msgbox NewMauville_Inside_Text_GeneratorRadiatingHeat, MSGBOX_DEFAULT releaseall end @@ -181,21 +176,18 @@ NewMauville_Inside_EventScript_GeneratorOff:: NewMauville_Inside_EventScript_Voltorb1:: lock faceplayer - setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE + setwildbattle SPECIES_VOLTORB, 25 waitse - playmoncry SPECIES_VOLTORB, 2 + playmoncry SPECIES_VOLTORB, CRY_MODE_ENCOUNTER delay 40 waitmoncry setflag FLAG_SYS_CTRL_OBJ_DELETE dowildbattle clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq NewMauville_Inside_EventScript_DefeatedVoltorb1 - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq NewMauville_Inside_EventScript_DefeatedVoltorb1 - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq NewMauville_Inside_EventScript_DefeatedVoltorb1 + goto_if_eq VAR_RESULT, B_OUTCOME_WON, NewMauville_Inside_EventScript_DefeatedVoltorb1 + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, NewMauville_Inside_EventScript_DefeatedVoltorb1 + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, NewMauville_Inside_EventScript_DefeatedVoltorb1 setflag FLAG_DEFEATED_VOLTORB_1_NEW_MAUVILLE release end @@ -208,21 +200,18 @@ NewMauville_Inside_EventScript_DefeatedVoltorb1:: NewMauville_Inside_EventScript_Voltorb2:: lock faceplayer - setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE + setwildbattle SPECIES_VOLTORB, 25 waitse - playmoncry SPECIES_VOLTORB, 2 + playmoncry SPECIES_VOLTORB, CRY_MODE_ENCOUNTER delay 40 waitmoncry setflag FLAG_SYS_CTRL_OBJ_DELETE dowildbattle clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq NewMauville_Inside_EventScript_DefeatedVoltorb2 - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq NewMauville_Inside_EventScript_DefeatedVoltorb2 - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq NewMauville_Inside_EventScript_DefeatedVoltorb2 + goto_if_eq VAR_RESULT, B_OUTCOME_WON, NewMauville_Inside_EventScript_DefeatedVoltorb2 + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, NewMauville_Inside_EventScript_DefeatedVoltorb2 + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, NewMauville_Inside_EventScript_DefeatedVoltorb2 setflag FLAG_DEFEATED_VOLTORB_2_NEW_MAUVILLE release end @@ -235,21 +224,18 @@ NewMauville_Inside_EventScript_DefeatedVoltorb2:: NewMauville_Inside_EventScript_Voltorb3:: lock faceplayer - setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE + setwildbattle SPECIES_VOLTORB, 25 waitse - playmoncry SPECIES_VOLTORB, 2 + playmoncry SPECIES_VOLTORB, CRY_MODE_ENCOUNTER delay 40 waitmoncry setflag FLAG_SYS_CTRL_OBJ_DELETE dowildbattle clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq NewMauville_Inside_EventScript_DefeatedVoltorb3 - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq NewMauville_Inside_EventScript_DefeatedVoltorb3 - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq NewMauville_Inside_EventScript_DefeatedVoltorb3 + goto_if_eq VAR_RESULT, B_OUTCOME_WON, NewMauville_Inside_EventScript_DefeatedVoltorb3 + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, NewMauville_Inside_EventScript_DefeatedVoltorb3 + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, NewMauville_Inside_EventScript_DefeatedVoltorb3 setflag FLAG_DEFEATED_VOLTORB_3_NEW_MAUVILLE release end diff --git a/data/maps/OldaleTown/map.json b/data/maps/OldaleTown/map.json index ee6101ff6c..cc4bd008c3 100644 --- a/data/maps/OldaleTown/map.json +++ b/data/maps/OldaleTown/map.json @@ -158,7 +158,7 @@ "y": 9, "elevation": 0, "player_facing_dir": "BG_EVENT_PLAYER_FACING_ANY", - "script": "OldaleTown_EventScript_CitySign" + "script": "OldaleTown_EventScript_TownSign" }, { "type": "sign", diff --git a/data/maps/OldaleTown/scripts.inc b/data/maps/OldaleTown/scripts.inc index 8ba0e4d25d..b2c25a6dfb 100644 --- a/data/maps/OldaleTown/scripts.inc +++ b/data/maps/OldaleTown/scripts.inc @@ -29,8 +29,8 @@ OldaleTown_EventScript_MoveMartEmployee:: setobjectmovementtype LOCALID_MART_EMPLOYEE, MOVEMENT_TYPE_FACE_DOWN return -OldaleTown_EventScript_CitySign:: - msgbox OldaleTown_Text_CitySign, MSGBOX_SIGN +OldaleTown_EventScript_TownSign:: + msgbox OldaleTown_Text_TownSign, MSGBOX_SIGN end OldaleTown_EventScript_Girl:: @@ -76,8 +76,7 @@ OldaleTown_EventScript_GoToMartEast:: OldaleTown_EventScript_ExplainPokemonMart:: msgbox OldaleTown_Text_ThisIsAPokemonMart, MSGBOX_DEFAULT giveitem ITEM_POTION - compare VAR_RESULT, FALSE - goto_if_eq OldaleTown_EventScript_BagIsFull + goto_if_eq VAR_RESULT, FALSE, OldaleTown_EventScript_BagIsFull msgbox OldaleTown_Text_PotionExplanation, MSGBOX_DEFAULT setflag FLAG_RECEIVED_POTION_OLDALE fadedefaultbgm @@ -103,7 +102,7 @@ OldaleTown_Movement_EmployeeEast: walk_up walk_up walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end OldaleTown_Movement_EmployeeSouth: @@ -116,7 +115,7 @@ OldaleTown_Movement_EmployeeSouth: walk_up walk_up walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end OldaleTown_Movement_EmployeeNorth: @@ -127,7 +126,7 @@ OldaleTown_Movement_EmployeeNorth: walk_up walk_up walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end OldaleTown_Movement_Unknown1: @@ -143,7 +142,7 @@ OldaleTown_Movement_Unknown1: walk_up walk_up delay_8 - walk_in_place_fastest_down + walk_in_place_faster_down step_end OldaleTown_Movement_PlayerEast: @@ -232,7 +231,7 @@ OldaleTown_EventScript_RivalTrigger1:: lockall applymovement LOCALID_RIVAL, OldaleTown_Movement_RivalApproachPlayer1 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 setvar VAR_0x8009, 1 goto OldaleTown_EventScript_ShowRivalMessage @@ -242,7 +241,7 @@ OldaleTown_EventScript_RivalTrigger2:: lockall applymovement LOCALID_RIVAL, OldaleTown_Movement_RivalApproachPlayer2 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 setvar VAR_0x8009, 1 goto OldaleTown_EventScript_ShowRivalMessage @@ -252,7 +251,7 @@ OldaleTown_EventScript_RivalTrigger3:: lockall applymovement LOCALID_RIVAL, OldaleTown_Movement_RivalApproachPlayer3 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 setvar VAR_0x8009, 1 goto OldaleTown_EventScript_ShowRivalMessage @@ -260,10 +259,8 @@ OldaleTown_EventScript_RivalTrigger3:: OldaleTown_EventScript_ShowRivalMessage:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq OldaleTown_EventScript_ShowMayMessage - compare VAR_RESULT, FEMALE - goto_if_eq OldaleTown_EventScript_ShowBrendanMessage + goto_if_eq VAR_RESULT, MALE, OldaleTown_EventScript_ShowMayMessage + goto_if_eq VAR_RESULT, FEMALE, OldaleTown_EventScript_ShowBrendanMessage end OldaleTown_EventScript_ShowMayMessage:: @@ -278,10 +275,8 @@ OldaleTown_EventScript_ShowBrendanMessage:: OldaleTown_EventScript_RivalFinish:: closemessage - compare VAR_0x8009, 0 - call_if_eq OldaleTown_EventScript_DoExitMovement1 - compare VAR_0x8009, 1 - call_if_eq OldaleTown_EventScript_DoExitMovement2 + call_if_eq VAR_0x8009, 0, OldaleTown_EventScript_DoExitMovement1 + call_if_eq VAR_0x8009, 1, OldaleTown_EventScript_DoExitMovement2 applymovement LOCALID_RIVAL, OldaleTown_Movement_RivalExit waitmovement 0 removeobject LOCALID_RIVAL @@ -291,8 +286,7 @@ OldaleTown_EventScript_RivalFinish:: end OldaleTown_EventScript_DoExitMovement1:: - compare VAR_FACING, DIR_SOUTH - goto_if_ne OldaleTown_EventScript_DoExitMovement2 + goto_if_ne VAR_FACING, DIR_SOUTH, OldaleTown_EventScript_DoExitMovement2 applymovement LOCALID_RIVAL, OldaleTown_Movement_RivalExit waitmovement 0 return @@ -328,7 +322,7 @@ OldaleTown_Movement_RivalExit: OldaleTown_Movement_WatchRivalExit: delay_8 delay_4 - walk_in_place_fastest_down + walk_in_place_faster_down step_end OldaleTown_Movement_PlayerStepBack: @@ -338,7 +332,7 @@ OldaleTown_Movement_PlayerStepBack: OldaleTown_Movement_BackUp: walk_fast_up - walk_in_place_fastest_left + walk_in_place_faster_left lock_facing_direction walk_right unlock_facing_direction @@ -401,7 +395,7 @@ OldaleTown_Text_BrendanLetsGoBack: .string "LAB now.\l" .string "{PLAYER}, you should hustle back, too.$" -OldaleTown_Text_CitySign: +OldaleTown_Text_TownSign: .string "OLDALE TOWN\n" .string "“Where things start off scarce.”$" diff --git a/data/maps/PacifidlogTown_House2/scripts.inc b/data/maps/PacifidlogTown_House2/scripts.inc index 3c0be269e2..175b477e7a 100644 --- a/data/maps/PacifidlogTown_House2/scripts.inc +++ b/data/maps/PacifidlogTown_House2/scripts.inc @@ -11,19 +11,16 @@ PacifidlogTown_House2_EventScript_FanClubYoungerBrother:: call_if_unset FLAG_MET_FANCLUB_YOUNGER_BROTHER, PacifidlogTown_House2_EventScript_FirstMonAssessment setflag FLAG_MET_FANCLUB_YOUNGER_BROTHER specialvar VAR_RESULT, GetLeadMonFriendshipScore - compare VAR_RESULT, 4 - goto_if_ge PacifidlogTown_House2_EventScript_GiveReturn + goto_if_ge VAR_RESULT, FRIENDSHIP_150_TO_199, PacifidlogTown_House2_EventScript_GiveReturn specialvar VAR_RESULT, GetLeadMonFriendshipScore - compare VAR_RESULT, 2 - goto_if_ge PacifidlogTown_House2_EventScript_PutInEffort + goto_if_ge VAR_RESULT, FRIENDSHIP_50_TO_99, PacifidlogTown_House2_EventScript_PutInEffort goto PacifidlogTown_House2_EventScript_GiveFrustration end PacifidlogTown_House2_EventScript_UpdateFanClubTMFlag:: goto_if_unset FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK, Common_EventScript_NopReturn specialvar VAR_RESULT, GetDaysUntilPacifidlogTMAvailable - compare VAR_RESULT, 0 - call_if_eq PacifidlogTown_House2_EventScript_ClearReceivedFanClubTM + call_if_eq VAR_RESULT, 0, PacifidlogTown_House2_EventScript_ClearReceivedFanClubTM return PacifidlogTown_House2_EventScript_MonAssessment:: @@ -42,8 +39,7 @@ PacifidlogTown_House2_EventScript_ClearReceivedFanClubTM:: PacifidlogTown_House2_EventScript_GiveReturn:: msgbox PacifidlogTown_House2_Text_AdoringPokemonTakeThis, MSGBOX_DEFAULT giveitem ITEM_TM27 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK special SetPacifidlogTMReceivedDay msgbox PacifidlogTown_House2_Text_ExplainReturnFrustration, MSGBOX_DEFAULT @@ -58,8 +54,7 @@ PacifidlogTown_House2_EventScript_PutInEffort:: PacifidlogTown_House2_EventScript_GiveFrustration:: msgbox PacifidlogTown_House2_Text_ViciousPokemonTakeThis, MSGBOX_DEFAULT giveitem ITEM_TM21 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK special SetPacifidlogTMReceivedDay msgbox PacifidlogTown_House2_Text_ExplainReturnFrustration, MSGBOX_DEFAULT @@ -68,7 +63,7 @@ PacifidlogTown_House2_EventScript_GiveFrustration:: PacifidlogTown_House2_EventScript_ComeBackInXDays:: specialvar VAR_RESULT, GetDaysUntilPacifidlogTMAvailable - buffernumberstring 0, VAR_RESULT + buffernumberstring STR_VAR_1, VAR_RESULT msgbox PacifidlogTown_House2_Text_GetGoodTMInXDays, MSGBOX_DEFAULT release end @@ -77,7 +72,7 @@ PacifidlogTown_House2_EventScript_HappyAzurill:: lock faceplayer waitse - playmoncry SPECIES_AZURILL, 0 + playmoncry SPECIES_AZURILL, CRY_MODE_NORMAL msgbox PacifidlogTown_House2_Text_Rurii, MSGBOX_DEFAULT waitmoncry msgbox PacifidlogTown_House2_Text_VeryFriendlyWithTrainer, MSGBOX_DEFAULT @@ -88,7 +83,7 @@ PacifidlogTown_House2_EventScript_UnhappyAzurill:: lock faceplayer waitse - playmoncry SPECIES_AZURILL, 2 + playmoncry SPECIES_AZURILL, CRY_MODE_ENCOUNTER msgbox PacifidlogTown_House2_Text_Rururi, MSGBOX_DEFAULT waitmoncry msgbox PacifidlogTown_House2_Text_DoesntLikeTrainerVeryMuch, MSGBOX_DEFAULT diff --git a/data/maps/PacifidlogTown_House3/scripts.inc b/data/maps/PacifidlogTown_House3/scripts.inc index c53ef05196..5582f3b6b9 100644 --- a/data/maps/PacifidlogTown_House3/scripts.inc +++ b/data/maps/PacifidlogTown_House3/scripts.inc @@ -10,24 +10,21 @@ PacifidlogTown_House3_EventScript_Trader:: specialvar VAR_RESULT, GetInGameTradeSpeciesInfo copyvar VAR_0x8009, VAR_RESULT msgbox PacifidlogTown_House3_Text_WillingToTradeIt, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq PacifidlogTown_House3_EventScript_DeclineTrade + goto_if_eq VAR_RESULT, NO, PacifidlogTown_House3_EventScript_DeclineTrade special ChoosePartyMon waitstate copyvar VAR_0x800A, VAR_0x8004 - compare VAR_0x8004, 255 - goto_if_eq PacifidlogTown_House3_EventScript_DeclineTrade + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, PacifidlogTown_House3_EventScript_DeclineTrade copyvar VAR_0x8005, VAR_0x800A specialvar VAR_RESULT, GetTradeSpecies copyvar VAR_0x800B, VAR_RESULT - compare VAR_RESULT, VAR_0x8009 - goto_if_ne PacifidlogTown_House3_EventScript_NotRequestedMon + goto_if_ne VAR_RESULT, VAR_0x8009, PacifidlogTown_House3_EventScript_NotRequestedMon copyvar VAR_0x8004, VAR_0x8008 copyvar VAR_0x8005, VAR_0x800A special CreateInGameTradePokemon special DoInGameTradeScene waitstate - bufferspeciesname 0, VAR_0x8009 + bufferspeciesname STR_VAR_1, VAR_0x8009 msgbox PacifidlogTown_House3_Text_ItsSubtlyDifferentThankYou, MSGBOX_DEFAULT setflag FLAG_PACIFIDLOG_NPC_TRADE_COMPLETED release @@ -39,7 +36,7 @@ PacifidlogTown_House3_EventScript_DeclineTrade:: end PacifidlogTown_House3_EventScript_NotRequestedMon:: - bufferspeciesname 0, VAR_0x8009 + bufferspeciesname STR_VAR_1, VAR_0x8009 msgbox PacifidlogTown_House3_Text_WontAcceptAnyLessThanRealMon, MSGBOX_DEFAULT release end diff --git a/data/maps/PacifidlogTown_House4/scripts.inc b/data/maps/PacifidlogTown_House4/scripts.inc index 12d7197bd1..f17abcd30e 100644 --- a/data/maps/PacifidlogTown_House4/scripts.inc +++ b/data/maps/PacifidlogTown_House4/scripts.inc @@ -13,10 +13,8 @@ PacifidlogTown_House4_EventScript_Boy:: lock faceplayer msgbox PacifidlogTown_House4_Text_WhereDidYouComeFrom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PacifidlogTown_House4_EventScript_Yes - compare VAR_RESULT, NO - goto_if_eq PacifidlogTown_House4_EventScript_No + goto_if_eq VAR_RESULT, YES, PacifidlogTown_House4_EventScript_Yes + goto_if_eq VAR_RESULT, NO, PacifidlogTown_House4_EventScript_No end PacifidlogTown_House4_EventScript_Yes:: diff --git a/data/maps/PacifidlogTown_House5/scripts.inc b/data/maps/PacifidlogTown_House5/scripts.inc index 5da4fb9022..474a2663ec 100644 --- a/data/maps/PacifidlogTown_House5/scripts.inc +++ b/data/maps/PacifidlogTown_House5/scripts.inc @@ -5,8 +5,7 @@ PacifidlogTown_House5_EventScript_MirageIslandWatcher:: lock faceplayer specialvar VAR_RESULT, IsMirageIslandPresent - compare VAR_RESULT, TRUE - goto_if_eq PacifidlogTown_House5_EventScript_MirageIslandPresent + goto_if_eq VAR_RESULT, TRUE, PacifidlogTown_House5_EventScript_MirageIslandPresent msgbox PacifidlogTown_House5_Text_CantSeeMirageIslandToday, MSGBOX_DEFAULT release end diff --git a/data/maps/PetalburgCity/scripts.inc b/data/maps/PetalburgCity/scripts.inc index 49f1efadb2..3609b26226 100644 --- a/data/maps/PetalburgCity/scripts.inc +++ b/data/maps/PetalburgCity/scripts.inc @@ -11,14 +11,10 @@ PetalburgCity_MapScripts:: PetalburgCity_OnTransition: setflag FLAG_VISITED_PETALBURG_CITY - compare VAR_PETALBURG_CITY_STATE, 0 - call_if_eq PetalburgCity_EventScript_MoveGymBoyToWestEntrance - compare VAR_PETALBURG_CITY_STATE, 2 - call_if_eq PetalburgCity_EventScript_DisableMapNameAndMusic - compare VAR_PETALBURG_CITY_STATE, 4 - call_if_eq PetalburgCity_EventScript_DisableMapNameAndMusic - compare VAR_PETALBURG_GYM_STATE, 8 - call_if_eq PetalburgCity_EventScript_SetGymDoorsUnlocked + call_if_eq VAR_PETALBURG_CITY_STATE, 0, PetalburgCity_EventScript_MoveGymBoyToWestEntrance + call_if_eq VAR_PETALBURG_CITY_STATE, 2, PetalburgCity_EventScript_DisableMapNameAndMusic + call_if_eq VAR_PETALBURG_CITY_STATE, 4, PetalburgCity_EventScript_DisableMapNameAndMusic + call_if_eq VAR_PETALBURG_GYM_STATE, 8, PetalburgCity_EventScript_SetGymDoorsUnlocked end PetalburgCity_EventScript_MoveGymBoyToWestEntrance:: @@ -50,7 +46,7 @@ PetalburgCity_EventScript_WallyTutorial:: special StartWallyTutorialBattle waitstate msgbox Route102_Text_WallyIDidIt, MSGBOX_DEFAULT - applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFastestLeft, MAP_PETALBURG_CITY + applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFasterLeft, MAP_PETALBURG_CITY waitmovement LOCALID_WALLY, MAP_PETALBURG_CITY msgbox Route102_Text_LetsGoBack, MSGBOX_DEFAULT closemessage @@ -60,7 +56,7 @@ PetalburgCity_EventScript_WallyTutorial:: clearflag FLAG_DONT_TRANSITION_MUSIC special LoadPlayerParty setvar VAR_PETALBURG_GYM_STATE, 1 - warp MAP_PETALBURG_CITY_GYM, 255, 4, 108 + warp MAP_PETALBURG_CITY_GYM, 4, 108 waitstate releaseall end @@ -85,7 +81,7 @@ PetalburgCity_EventScript_WalkToWallyHouse:: clearflag FLAG_HIDE_MAP_NAME_POPUP fadedefaultbgm clearflag FLAG_DONT_TRANSITION_MUSIC - warp MAP_PETALBURG_CITY_WALLYS_HOUSE, 255, 2, 4 + warp MAP_PETALBURG_CITY_WALLYS_HOUSE, 2, 4 waitstate releaseall end @@ -186,7 +182,7 @@ PetalburgCity_Movement_WallyTutorialPlayer: walk_right walk_up walk_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end PetalburgCity_Movement_WallyTutorialWally: @@ -222,10 +218,10 @@ PetalburgCity_Movement_WallyTutorialWally: walk_up walk_right delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right step_end PetalburgCity_EventScript_GymSign:: @@ -277,27 +273,19 @@ PetalburgCity_EventScript_ShowGymToPlayer:: waitmovement 0 applymovement LOCALID_GYM_BOY, Common_Movement_Delay48 waitmovement 0 - compare VAR_0x8008, 0 - call_if_eq PetalburgCity_EventScript_BoyApproachPlayer0 - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_EventScript_BoyApproachPlayer1 - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_EventScript_BoyApproachPlayer2 - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_EventScript_BoyApproachPlayer3 + call_if_eq VAR_0x8008, 0, PetalburgCity_EventScript_BoyApproachPlayer0 + call_if_eq VAR_0x8008, 1, PetalburgCity_EventScript_BoyApproachPlayer1 + call_if_eq VAR_0x8008, 2, PetalburgCity_EventScript_BoyApproachPlayer2 + call_if_eq VAR_0x8008, 3, PetalburgCity_EventScript_BoyApproachPlayer3 msgbox PetalburgCity_Text_AreYouRookieTrainer, MSGBOX_DEFAULT closemessage - compare VAR_0x8008, 0 - call_if_eq PetalburgCity_EventScript_LeadPlayerToGym0 - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_EventScript_LeadPlayerToGym1 - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_EventScript_LeadPlayerToGym2 - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_EventScript_LeadPlayerToGym3 + call_if_eq VAR_0x8008, 0, PetalburgCity_EventScript_LeadPlayerToGym0 + call_if_eq VAR_0x8008, 1, PetalburgCity_EventScript_LeadPlayerToGym1 + call_if_eq VAR_0x8008, 2, PetalburgCity_EventScript_LeadPlayerToGym2 + call_if_eq VAR_0x8008, 3, PetalburgCity_EventScript_LeadPlayerToGym3 msgbox PetalburgCity_Text_ThisIsPetalburgGym, MSGBOX_DEFAULT - applymovement LOCALID_GYM_BOY, Common_Movement_WalkInPlaceFastestRight - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_GYM_BOY, Common_Movement_WalkInPlaceFasterRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox PetalburgCity_Text_ThisIsGymSign, MSGBOX_DEFAULT closemessage @@ -310,7 +298,7 @@ PetalburgCity_EventScript_ShowGymToPlayer:: PetalburgCity_EventScript_BoyApproachPlayer0:: applymovement LOCALID_GYM_BOY, PetalburgCity_Movement_BoyApproachPlayer0 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return @@ -322,14 +310,14 @@ PetalburgCity_EventScript_BoyApproachPlayer1:: PetalburgCity_EventScript_BoyApproachPlayer2:: applymovement LOCALID_GYM_BOY, PetalburgCity_Movement_BoyApproachPlayer2 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return PetalburgCity_EventScript_BoyApproachPlayer3:: applymovement LOCALID_GYM_BOY, PetalburgCity_Movement_BoyApproachPlayer3 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return @@ -368,7 +356,7 @@ PetalburgCity_Movement_BoyApproachPlayer0: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end PetalburgCity_Movement_BoyApproachPlayer1: @@ -380,7 +368,7 @@ PetalburgCity_Movement_BoyApproachPlayer2: walk_right walk_right walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end PetalburgCity_Movement_BoyApproachPlayer3: @@ -388,7 +376,7 @@ PetalburgCity_Movement_BoyApproachPlayer3: walk_right walk_right walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end PetalburgCity_Movement_BoyWalkToGym0: @@ -401,7 +389,7 @@ PetalburgCity_Movement_BoyWalkToGym0: walk_right walk_up walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end PetalburgCity_Movement_BoyWalkToGym1: @@ -417,7 +405,7 @@ PetalburgCity_Movement_BoyWalkToGym1: walk_up walk_up walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end PetalburgCity_Movement_BoyWalkToGym2: @@ -430,7 +418,7 @@ PetalburgCity_Movement_BoyWalkToGym2: walk_right walk_up walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end PetalburgCity_Movement_BoyWalkToGym3: @@ -444,7 +432,7 @@ PetalburgCity_Movement_BoyWalkToGym3: walk_up walk_up walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end PetalburgCity_Movement_BoyWalkAway: @@ -556,29 +544,25 @@ PetalburgCity_EventScript_Scott:: waitmovement 0 applymovement LOCALID_SCOTT, PetalburgCity_Movement_ScottApproachPlayer waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 setvar VAR_SCOTT_STATE, 1 msgbox PetalburgCity_Text_AreYouATrainer, MSGBOX_DEFAULT closemessage - applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 30 msgbox PetalburgCity_Text_WellMaybeNot, MSGBOX_DEFAULT closemessage - applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 delay 30 msgbox PetalburgCity_Text_ImLookingForTalentedTrainers, MSGBOX_DEFAULT closemessage - compare VAR_0x8008, 0 - call_if_eq PetalburgCity_EventScript_ScottExit0 - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_EventScript_ScottExit1 - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_EventScript_ScottExit2 - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_EventScript_ScottExit3 + call_if_eq VAR_0x8008, 0, PetalburgCity_EventScript_ScottExit0 + call_if_eq VAR_0x8008, 1, PetalburgCity_EventScript_ScottExit1 + call_if_eq VAR_0x8008, 2, PetalburgCity_EventScript_ScottExit2 + call_if_eq VAR_0x8008, 3, PetalburgCity_EventScript_ScottExit3 setvar VAR_SCOTT_PETALBURG_ENCOUNTER, 1 removeobject LOCALID_SCOTT releaseall @@ -640,11 +624,11 @@ PetalburgCity_Movement_ScottExit0: PetalburgCity_Movement_PlayerWatchScottExit0: delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_16 delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left step_end PetalburgCity_Movement_ScottExit1: @@ -664,10 +648,10 @@ PetalburgCity_Movement_ScottExit1: PetalburgCity_Movement_PlayerWatchScottExit1: delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left step_end PetalburgCity_Movement_ScottExit2: @@ -687,10 +671,10 @@ PetalburgCity_Movement_ScottExit2: PetalburgCity_Movement_PlayerWatchScottExit2: delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left step_end PetalburgCity_Movement_ScottExit3: @@ -710,10 +694,10 @@ PetalburgCity_Movement_ScottExit3: PetalburgCity_Movement_PlayerWatchScottExit3: delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left step_end PetalburgCity_EventScript_GymBoy:: diff --git a/data/maps/PetalburgCity_Gym/scripts.inc b/data/maps/PetalburgCity_Gym/scripts.inc index 43e8c4108c..f2489b7dbb 100644 --- a/data/maps/PetalburgCity_Gym/scripts.inc +++ b/data/maps/PetalburgCity_Gym/scripts.inc @@ -10,10 +10,8 @@ PetalburgCity_Gym_MapScripts:: .byte 0 PetalburgCity_Gym_OnLoad: - compare VAR_PETALBURG_GYM_STATE, 6 - goto_if_eq PetalburgCity_Gym_EventScript_OpenUnlockedDoors - compare VAR_PETALBURG_GYM_STATE, 7 - call_if_ge PetalburgCity_Gym_EventScript_UnlockAllDoors + goto_if_eq VAR_PETALBURG_GYM_STATE, 6, PetalburgCity_Gym_EventScript_OpenUnlockedDoors + call_if_ge VAR_PETALBURG_GYM_STATE, 7, PetalburgCity_Gym_EventScript_UnlockAllDoors end @ NOTE: Strength and OHKO rooms are misleading. Both are more accurately Critical-Hit @@ -42,10 +40,8 @@ PetalburgCity_Gym_EventScript_UnlockAllDoors:: return PetalburgCity_Gym_OnTransition: - compare VAR_PETALBURG_GYM_STATE, 1 - call_if_eq PetalburgCity_Gym_EventScript_MoveWallyToEntrance - compare VAR_PETALBURG_GYM_STATE, 6 - call_if_lt PetalburgCity_Gym_EventScript_MoveNormanToEntrance + call_if_eq VAR_PETALBURG_GYM_STATE, 1, PetalburgCity_Gym_EventScript_MoveWallyToEntrance + call_if_lt VAR_PETALBURG_GYM_STATE, 6, PetalburgCity_Gym_EventScript_MoveNormanToEntrance call_if_set FLAG_SYS_GAME_CLEAR, PetalburgCity_Gym_EventScript_CheckNormanForRematch end @@ -60,10 +56,8 @@ PetalburgCity_Gym_EventScript_MoveNormanToEntrance:: PetalburgCity_Gym_EventScript_CheckNormanForRematch:: setorcopyvar VAR_TRAINER_BATTLE_OPPONENT_A, TRAINER_NORMAN_1 specialvar VAR_RESULT, IsTrainerReadyForRematch - compare VAR_RESULT, TRUE - goto_if_eq PetalburgCity_Gym_EventScript_DontMoveNormanToFront - compare VAR_PETALBURG_GYM_STATE, 8 - goto_if_eq PetalburgCity_Gym_EventScript_DontMoveNormanToFront + goto_if_eq VAR_RESULT, TRUE, PetalburgCity_Gym_EventScript_DontMoveNormanToFront + goto_if_eq VAR_PETALBURG_GYM_STATE, 8, PetalburgCity_Gym_EventScript_DontMoveNormanToFront setobjectxyperm LOCALID_NORMAN, 4, 107 return @@ -88,14 +82,14 @@ PetalburgCity_Gym_EventScript_ReturnFromWallyTutorial:: msgbox PetalburgCity_Gym_Text_DadSoDidItWorkOut, MSGBOX_DEFAULT msgbox PetalburgCity_Gym_Text_WallyThankYouBye, MSGBOX_DEFAULT closemessage - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown applymovement LOCALID_WALLY, PetalburgCity_Gym_Movement_WallyExitGym waitmovement 0 playse SE_EXIT removeobject LOCALID_WALLY setflag FLAG_HIDE_PETALBURG_CITY_WALLY delay 30 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox PetalburgCity_Gym_Text_DadGoCollectBadges, MSGBOX_DEFAULT setvar VAR_PETALBURG_GYM_STATE, 2 @@ -152,66 +146,42 @@ PetalburgCity_Gym_EventScript_BeginWallyTutorialEast:: PetalburgCity_Gym_EventScript_BeginWallyTutorial:: addobject LOCALID_WALLY playse SE_DOOR - compare VAR_0x8008, 0 - call_if_eq PetalburgCity_Gym_EventScript_WallyArriveSouth - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_WallyArriveNorth - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_WallyArriveWestEast - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_WallyArriveWestEast + call_if_eq VAR_0x8008, 0, PetalburgCity_Gym_EventScript_WallyArriveSouth + call_if_eq VAR_0x8008, 1, PetalburgCity_Gym_EventScript_WallyArriveNorth + call_if_eq VAR_0x8008, 2, PetalburgCity_Gym_EventScript_WallyArriveWestEast + call_if_eq VAR_0x8008, 3, PetalburgCity_Gym_EventScript_WallyArriveWestEast msgbox PetalburgCity_Gym_Text_WallyIdLikeAPokemon, MSGBOX_DEFAULT msgbox PetalburgCity_Gym_Text_DadOhYoureWallyRight, MSGBOX_DEFAULT msgbox PetalburgCity_Gym_Text_WallyIveNeverCaughtAPokemon, MSGBOX_DEFAULT msgbox PetalburgCity_Gym_Text_DadHmISee, MSGBOX_DEFAULT - compare VAR_0x8008, 0 - call_if_eq PetalburgCity_Gym_EventScript_NormanAddressPlayerSouth - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_NormanAddressPlayerNorth - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_NormanAddressPlayerWest - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_NormanAddressPlayerEast + call_if_eq VAR_0x8008, 0, PetalburgCity_Gym_EventScript_NormanAddressPlayerSouth + call_if_eq VAR_0x8008, 1, PetalburgCity_Gym_EventScript_NormanAddressPlayerNorth + call_if_eq VAR_0x8008, 2, PetalburgCity_Gym_EventScript_NormanAddressPlayerWest + call_if_eq VAR_0x8008, 3, PetalburgCity_Gym_EventScript_NormanAddressPlayerEast msgbox PetalburgCity_Gym_Text_DadPlayerGoWithWally, MSGBOX_DEFAULT - compare VAR_0x8008, 0 - call_if_eq PetalburgCity_Gym_EventScript_NormanAddressWallySouth - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_NormanAddressWallyNorth - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_NormanAddressWallyWest - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_NormanAddressWallyEast + call_if_eq VAR_0x8008, 0, PetalburgCity_Gym_EventScript_NormanAddressWallySouth + call_if_eq VAR_0x8008, 1, PetalburgCity_Gym_EventScript_NormanAddressWallyNorth + call_if_eq VAR_0x8008, 2, PetalburgCity_Gym_EventScript_NormanAddressWallyWest + call_if_eq VAR_0x8008, 3, PetalburgCity_Gym_EventScript_NormanAddressWallyEast msgbox PetalburgCity_Gym_Text_IllLoanYouMyZigzagoon, MSGBOX_DEFAULT msgbox PetalburgCity_Gym_Text_WallyThankYouAndDadGivesPokeBall, MSGBOX_DEFAULT msgbox PetalburgCity_Gym_Text_WallyOhWowThankYou, MSGBOX_DEFAULT - compare VAR_0x8008, 0 - call_if_eq PetalburgCity_Gym_EventScript_NormanFaceDoorSouth - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_NormanFaceDoorNorth - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_NormanFaceDoorWest - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_NormanFaceDoorEast - compare VAR_0x8008, 0 - call_if_eq PetalburgCity_Gym_EventScript_WallyFacePlayer - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_WallyFaceDown - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_WallyFacePlayer - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_WallyFacePlayer + call_if_eq VAR_0x8008, 0, PetalburgCity_Gym_EventScript_NormanFaceDoorSouth + call_if_eq VAR_0x8008, 1, PetalburgCity_Gym_EventScript_NormanFaceDoorNorth + call_if_eq VAR_0x8008, 2, PetalburgCity_Gym_EventScript_NormanFaceDoorWest + call_if_eq VAR_0x8008, 3, PetalburgCity_Gym_EventScript_NormanFaceDoorEast + call_if_eq VAR_0x8008, 0, PetalburgCity_Gym_EventScript_WallyFacePlayer + call_if_eq VAR_0x8008, 1, PetalburgCity_Gym_EventScript_WallyFaceDown + call_if_eq VAR_0x8008, 2, PetalburgCity_Gym_EventScript_WallyFacePlayer + call_if_eq VAR_0x8008, 3, PetalburgCity_Gym_EventScript_WallyFacePlayer msgbox PetalburgCity_Gym_Text_WouldYouReallyComeWithMe, MSGBOX_DEFAULT closemessage setflag FLAG_DONT_TRANSITION_MUSIC playbgm MUS_FOLLOW_ME, FALSE - compare VAR_0x8008, 0 - call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallySouth - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallyNorth - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallyWest - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallyEast + call_if_eq VAR_0x8008, 0, PetalburgCity_Gym_EventScript_ExitGymWithWallySouth + call_if_eq VAR_0x8008, 1, PetalburgCity_Gym_EventScript_ExitGymWithWallyNorth + call_if_eq VAR_0x8008, 2, PetalburgCity_Gym_EventScript_ExitGymWithWallyWest + call_if_eq VAR_0x8008, 3, PetalburgCity_Gym_EventScript_ExitGymWithWallyEast removeobject LOCALID_WALLY setflag FLAG_HIDE_PETALBURG_CITY_WALLYS_MOM setvar VAR_PETALBURG_GYM_STATE, 1 @@ -220,13 +190,13 @@ PetalburgCity_Gym_EventScript_BeginWallyTutorial:: clearflag FLAG_HIDE_PETALBURG_GYM_WALLY setflag FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_RIVAL special InitBirchState - warp MAP_PETALBURG_CITY, 255, 15, 8 + warp MAP_PETALBURG_CITY, 15, 8 waitstate release end PetalburgCity_Gym_EventScript_WallyArriveSouth:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown applymovement LOCALID_WALLY, PetalburgCity_Gym_Movement_WallyArrive waitmovement 0 return @@ -234,20 +204,20 @@ PetalburgCity_Gym_EventScript_WallyArriveSouth:: PetalburgCity_Gym_EventScript_WallyArriveNorth:: applymovement LOCALID_WALLY, PetalburgCity_Gym_Movement_WallyArriveNorth waitmovement 0 - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestRight - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return PetalburgCity_Gym_EventScript_WallyArriveWestEast:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown applymovement LOCALID_WALLY, PetalburgCity_Gym_Movement_WallyArrive waitmovement 0 return PetalburgCity_Gym_EventScript_ExitGymWithWallySouth:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown applymovement LOCALID_WALLY, PetalburgCity_Gym_Movement_WallyExitSouthWest applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Gym_Movement_PlayerExitWithWallySouth waitmovement 0 @@ -272,45 +242,45 @@ PetalburgCity_Gym_EventScript_ExitGymWithWallyEast:: return PetalburgCity_Gym_EventScript_NormanAddressPlayerSouth:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return PetalburgCity_Gym_EventScript_NormanAddressPlayerNorth:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return PetalburgCity_Gym_EventScript_NormanAddressPlayerWest:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestRight - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return PetalburgCity_Gym_EventScript_NormanAddressPlayerEast:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestLeft - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return PetalburgCity_Gym_EventScript_NormanAddressWallySouth:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return PetalburgCity_Gym_EventScript_NormanAddressWallyNorth:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return PetalburgCity_Gym_EventScript_NormanAddressWallyWest:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return PetalburgCity_Gym_EventScript_NormanAddressWallyEast:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return @@ -320,7 +290,7 @@ PetalburgCity_Gym_EventScript_WallyFacePlayer:: return PetalburgCity_Gym_EventScript_WallyFaceDown:: - applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_WALLY, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return @@ -349,7 +319,7 @@ PetalburgCity_Gym_EventScript_NormanFaceDoorSouth:: @ For all other NormanFaceDoorX, Norman is already facing the door from NormanAddressWallyX PetalburgCity_Gym_EventScript_NormanFaceDoorNorth:: - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return @@ -361,8 +331,7 @@ PetalburgCity_Gym_EventScript_NormanFaceDoorEast:: PetalburgCity_Gym_EventScript_NormanPostBattle:: call PetalburgCity_Gym_EventScript_ShouldGiveEnigmaBerry - compare VAR_RESULT, TRUE - goto_if_eq PetalburgCity_Gym_EventScript_GiveEnigmaBerry + goto_if_eq VAR_RESULT, TRUE, PetalburgCity_Gym_EventScript_GiveEnigmaBerry goto_if_unset FLAG_RECEIVED_TM42, PetalburgCity_Gym_EventScript_GiveFacade2 goto_if_set FLAG_SYS_GAME_CLEAR, PetalburgCity_Gym_EventScript_NoAmountOfTrainingIsEnough msgbox PetalburgCity_Gym_Text_DadGoingToKeepTraining, MSGBOX_DEFAULT @@ -381,16 +350,12 @@ PetalburgCity_Gym_EventScript_NormanRematch:: PetalburgCity_Gym_EventScript_ShouldGiveEnigmaBerry:: specialvar VAR_RESULT, IsEnigmaBerryValid - compare VAR_RESULT, FALSE - goto_if_eq PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry - checkitem ITEM_ENIGMA_BERRY, 1 - compare VAR_RESULT, TRUE - goto_if_eq PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry - checkpcitem ITEM_ENIGMA_BERRY, 1 - compare VAR_RESULT, TRUE - goto_if_eq PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry - compare VAR_ENIGMA_BERRY_AVAILABLE, 0 - goto_if_eq PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry + goto_if_eq VAR_RESULT, FALSE, PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry + checkitem ITEM_ENIGMA_BERRY_E_READER + goto_if_eq VAR_RESULT, TRUE, PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry + checkpcitem ITEM_ENIGMA_BERRY_E_READER + goto_if_eq VAR_RESULT, TRUE, PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry + goto_if_eq VAR_ENIGMA_BERRY_AVAILABLE, 0, PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry msgbox PetalburgCity_Gym_Text_GiveEnigmaBerry, MSGBOX_DEFAULT setvar VAR_RESULT, TRUE return @@ -400,9 +365,8 @@ PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry:: return PetalburgCity_Gym_EventScript_GiveEnigmaBerry:: - giveitem ITEM_ENIGMA_BERRY - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + giveitem ITEM_ENIGMA_BERRY_E_READER + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setvar VAR_ENIGMA_BERRY_AVAILABLE, 0 release end @@ -442,8 +406,7 @@ PetalburgCity_Gym_EventScript_NormanBattle:: PetalburgCity_Gym_EventScript_GiveFacade:: giveitem ITEM_TM42 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull setflag FLAG_RECEIVED_TM42 msgbox PetalburgCity_Gym_Text_ExplainFacade, MSGBOX_DEFAULT return @@ -469,81 +432,72 @@ PetalburgCity_Gym_EventScript_WallysDadArrives:: applymovement LOCALID_WALLYS_DAD, Common_Movement_Delay48 waitmovement 0 delay 10 - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_WallysDadApproachPlayerNorth - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_WallysDadApproachPlayerEast - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_WallysDadApproachPlayerWest + call_if_eq VAR_0x8008, 1, PetalburgCity_Gym_EventScript_WallysDadApproachPlayerNorth + call_if_eq VAR_0x8008, 2, PetalburgCity_Gym_EventScript_WallysDadApproachPlayerEast + call_if_eq VAR_0x8008, 3, PetalburgCity_Gym_EventScript_WallysDadApproachPlayerWest msgbox PetalburgCity_Gym_Text_PleaseComeWithMe, MSGBOX_DEFAULT closemessage delay 20 - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_WallysDadFaceNormanNorth - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_WallysDadFaceNormanEast - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_WallysDadFaceNormanWest + call_if_eq VAR_0x8008, 1, PetalburgCity_Gym_EventScript_WallysDadFaceNormanNorth + call_if_eq VAR_0x8008, 2, PetalburgCity_Gym_EventScript_WallysDadFaceNormanEast + call_if_eq VAR_0x8008, 3, PetalburgCity_Gym_EventScript_WallysDadFaceNormanWest msgbox PetalburgCity_Gym_Text_LetMeBorrowPlayer, MSGBOX_DEFAULT closemessage setflag FLAG_DONT_TRANSITION_MUSIC playbgm MUS_FOLLOW_ME, FALSE - compare VAR_0x8008, 1 - call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallysDadNorth - compare VAR_0x8008, 2 - call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallysDadEast - compare VAR_0x8008, 3 - call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallysDadWest + call_if_eq VAR_0x8008, 1, PetalburgCity_Gym_EventScript_ExitGymWithWallysDadNorth + call_if_eq VAR_0x8008, 2, PetalburgCity_Gym_EventScript_ExitGymWithWallysDadEast + call_if_eq VAR_0x8008, 3, PetalburgCity_Gym_EventScript_ExitGymWithWallysDadWest removeobject LOCALID_WALLYS_DAD setvar VAR_PETALBURG_CITY_STATE, 4 clearflag FLAG_HIDE_PETALBURG_CITY_WALLYS_DAD - warp MAP_PETALBURG_CITY, 255, 15, 8 + warp MAP_PETALBURG_CITY, 15, 8 waitstate release end PetalburgCity_Gym_EventScript_WallysDadFaceNormanNorth:: - applymovement LOCALID_WALLYS_DAD, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_WALLYS_DAD, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return PetalburgCity_Gym_EventScript_WallysDadFaceNormanEast:: - applymovement LOCALID_WALLYS_DAD, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_WALLYS_DAD, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return PetalburgCity_Gym_EventScript_WallysDadFaceNormanWest:: - applymovement LOCALID_WALLYS_DAD, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_WALLYS_DAD, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return PetalburgCity_Gym_EventScript_WallysDadApproachPlayerNorth:: applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadApproachPlayerNorth waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return PetalburgCity_Gym_EventScript_WallysDadApproachPlayerEast:: applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadApproachPlayerEast waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return PetalburgCity_Gym_EventScript_WallysDadApproachPlayerWest:: applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadApproachPlayerWest waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return PetalburgCity_Gym_EventScript_ExitGymWithWallysDadNorth:: applymovement LOCALID_WALLYS_DAD, PetalburgCity_Gym_Movement_WallysDadExitNorth - applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_NORMAN, Common_Movement_WalkInPlaceFasterDown applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Gym_Movement_PlayerExitWithWallysDadNorth waitmovement 0 return @@ -567,7 +521,7 @@ PetalburgCity_Gym_Movement_WallysDadExitNorth: walk_left walk_down walk_down - walk_in_place_fastest_up + walk_in_place_faster_up delay_8 walk_in_place_down set_invisible @@ -580,7 +534,7 @@ PetalburgCity_Gym_Movement_WallysDadExitEast: walk_left walk_down walk_down - walk_in_place_fastest_up + walk_in_place_faster_up delay_8 walk_in_place_down set_invisible @@ -595,7 +549,7 @@ PetalburgCity_Gym_Movement_WallysDadExitWest: walk_left walk_down walk_down - walk_in_place_fastest_up + walk_in_place_faster_up delay_8 walk_in_place_down set_invisible @@ -636,11 +590,11 @@ PetalburgCity_Gym_Movement_PlayerExitWithWallysDadWest: PetalburgCity_Gym_Movement_WallysDadEnterGym: walk_up delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up step_end PetalburgCity_Gym_Movement_WallysDadApproachPlayerNorth: @@ -649,7 +603,7 @@ PetalburgCity_Gym_Movement_WallysDadApproachPlayerNorth: walk_up walk_up walk_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end PetalburgCity_Gym_Movement_WallysDadApproachPlayerEast: @@ -671,14 +625,14 @@ PetalburgCity_Gym_Movement_WallysDadApproachPlayerWest: step_end PetalburgCity_Gym_Movement_Unused: - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 delay_16 delay_16 delay_16 delay_16 delay_8 - walk_in_place_fastest_down + walk_in_place_faster_down step_end PetalburgCity_Gym_Movement_WallyArriveNorth: @@ -690,7 +644,7 @@ PetalburgCity_Gym_Movement_WallyArriveNorth: walk_right walk_up walk_up - walk_in_place_fastest_left + walk_in_place_faster_left step_end PetalburgCity_Gym_Movement_WallyArrive: @@ -707,7 +661,7 @@ PetalburgCity_Gym_Movement_WallyExitNorth: walk_down walk_down walk_down - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 walk_in_place_down step_end @@ -717,7 +671,7 @@ PetalburgCity_Gym_Movement_WallyExitEast: walk_down walk_right walk_down - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 walk_in_place_down step_end @@ -726,7 +680,7 @@ PetalburgCity_Gym_Movement_WallyExitSouthWest: walk_down walk_down walk_down - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 walk_in_place_down step_end @@ -764,7 +718,7 @@ PetalburgCity_Gym_Movement_PlayerExitWithWallyWest: step_end PetalburgCity_Gym_Movement_PlayerExitWithWallyEast: - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_16 walk_down @@ -782,21 +736,18 @@ PetalburgCity_Gym_EventScript_NoAmountOfTrainingIsEnough:: PetalburgCity_Gym_EventScript_SpeedRoomDoor:: lockall - compare VAR_PETALBURG_GYM_STATE, 6 - goto_if_lt PetalburgCity_Gym_EventScript_DoorLocked + goto_if_lt VAR_PETALBURG_GYM_STATE, 6, PetalburgCity_Gym_EventScript_DoorLocked setvar VAR_0x8008, 7 setvar VAR_0x8009, 85 msgbox PetalburgCity_Gym_Text_EnterSpeedRoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_EnterRoom:: closemessage delay 30 - warpdoor MAP_PETALBURG_CITY_GYM, 255, VAR_0x8008, VAR_0x8009 + warpdoor MAP_PETALBURG_CITY_GYM, VAR_0x8008, VAR_0x8009 waitstate releaseall end @@ -813,15 +764,12 @@ PetalburgCity_Gym_EventScript_DoorLocked:: @ VAR_0x8008 and VAR_0x8009 below are the x and y coordinates of the warp PetalburgCity_Gym_EventScript_AccuracyRoomDoor:: lockall - compare VAR_PETALBURG_GYM_STATE, 6 - goto_if_lt PetalburgCity_Gym_EventScript_DoorLocked + goto_if_lt VAR_PETALBURG_GYM_STATE, 6, PetalburgCity_Gym_EventScript_DoorLocked setvar VAR_0x8008, 1 setvar VAR_0x8009, 98 msgbox PetalburgCity_Gym_Text_EnterAccuracyRoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_ConfusionRoomDoor:: @@ -830,10 +778,8 @@ PetalburgCity_Gym_EventScript_ConfusionRoomDoor:: setvar VAR_0x8008, 7 setvar VAR_0x8009, 46 msgbox PetalburgCity_Gym_Text_EnterConfusionRoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_LeftDefenseRoomDoor:: @@ -842,10 +788,8 @@ PetalburgCity_Gym_EventScript_LeftDefenseRoomDoor:: setvar VAR_0x8008, 1 setvar VAR_0x8009, 59 msgbox PetalburgCity_Gym_Text_EnterDefenseRoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_RightDefenseRoomDoor:: @@ -854,10 +798,8 @@ PetalburgCity_Gym_EventScript_RightDefenseRoomDoor:: setvar VAR_0x8008, 7 setvar VAR_0x8009, 59 msgbox PetalburgCity_Gym_Text_EnterDefenseRoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_RecoveryRoomDoor:: @@ -866,10 +808,8 @@ PetalburgCity_Gym_EventScript_RecoveryRoomDoor:: setvar VAR_0x8008, 1 setvar VAR_0x8009, 72 msgbox PetalburgCity_Gym_Text_EnterRecoveryRoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_LeftStrengthRoomDoor:: @@ -878,10 +818,8 @@ PetalburgCity_Gym_EventScript_LeftStrengthRoomDoor:: setvar VAR_0x8008, 1 setvar VAR_0x8009, 20 msgbox PetalburgCity_Gym_Text_EnterStrengthRoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_RightStrengthRoomDoor:: @@ -890,10 +828,8 @@ PetalburgCity_Gym_EventScript_RightStrengthRoomDoor:: setvar VAR_0x8008, 7 setvar VAR_0x8009, 20 msgbox PetalburgCity_Gym_Text_EnterStrengthRoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_LeftOHKORoomDoor:: @@ -902,10 +838,8 @@ PetalburgCity_Gym_EventScript_LeftOHKORoomDoor:: setvar VAR_0x8008, 1 setvar VAR_0x8009, 33 msgbox PetalburgCity_Gym_Text_EnterOHKORoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_RightOHKORoomDoor:: @@ -914,10 +848,8 @@ PetalburgCity_Gym_EventScript_RightOHKORoomDoor:: setvar VAR_0x8008, 7 setvar VAR_0x8009, 33 msgbox PetalburgCity_Gym_Text_EnterOHKORoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_LeftGymLeadersRoomDoor:: @@ -926,10 +858,8 @@ PetalburgCity_Gym_EventScript_LeftGymLeadersRoomDoor:: setvar VAR_0x8008, 1 setvar VAR_0x8009, 7 msgbox PetalburgCity_Gym_Text_EnterGymLeadersRoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_RightGymLeadersRoomDoor:: @@ -938,10 +868,8 @@ PetalburgCity_Gym_EventScript_RightGymLeadersRoomDoor:: setvar VAR_0x8008, 7 setvar VAR_0x8009, 7 msgbox PetalburgCity_Gym_Text_EnterGymLeadersRoom, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq PetalburgCity_Gym_EventScript_EnterRoom - compare VAR_RESULT, NO - goto_if_eq PetalburgCity_Gym_EventScript_DontEnterRoom + goto_if_eq VAR_RESULT, YES, PetalburgCity_Gym_EventScript_EnterRoom + goto_if_eq VAR_RESULT, NO, PetalburgCity_Gym_EventScript_DontEnterRoom end PetalburgCity_Gym_EventScript_Randall:: @@ -1067,122 +995,106 @@ PetalburgCity_Gym_EventScript_JodyPostBadge:: @ VAR_0x8005 below is 0 when the door should be slid open and 1 when it should be unlocked immediately PetalburgCity_Gym_EventScript_OpenGymEntranceDoors:: setvar VAR_0x8004, 1 - compare VAR_0x8005, 0 - call_if_eq PetalburgCity_Gym_EventScript_SlideOpenRoomDoors - compare VAR_0x8005, 1 - call_if_eq PetalburgCity_Gym_EventScript_UnlockRoomDoors + call_if_eq VAR_0x8005, 0, PetalburgCity_Gym_EventScript_SlideOpenRoomDoors + call_if_eq VAR_0x8005, 1, PetalburgCity_Gym_EventScript_UnlockRoomDoors call PetalburgCity_Gym_EventScript_SetEntranceRoomDoorMetatiles return PetalburgCity_Gym_EventScript_OpenSpeedRoomDoors:: setvar VAR_0x8004, 2 - compare VAR_0x8005, 0 - call_if_eq PetalburgCity_Gym_EventScript_SlideOpenRoomDoors - compare VAR_0x8005, 1 - call_if_eq PetalburgCity_Gym_EventScript_UnlockRoomDoors + call_if_eq VAR_0x8005, 0, PetalburgCity_Gym_EventScript_SlideOpenRoomDoors + call_if_eq VAR_0x8005, 1, PetalburgCity_Gym_EventScript_UnlockRoomDoors call PetalburgCity_Gym_EventScript_SetSpeedRoomDoorMetatiles return PetalburgCity_Gym_EventScript_OpenAccuracyRoomDoors:: setvar VAR_0x8004, 3 - compare VAR_0x8005, 0 - call_if_eq PetalburgCity_Gym_EventScript_SlideOpenRoomDoors - compare VAR_0x8005, 1 - call_if_eq PetalburgCity_Gym_EventScript_UnlockRoomDoors + call_if_eq VAR_0x8005, 0, PetalburgCity_Gym_EventScript_SlideOpenRoomDoors + call_if_eq VAR_0x8005, 1, PetalburgCity_Gym_EventScript_UnlockRoomDoors call PetalburgCity_Gym_EventScript_SetAccuracyRoomDoorMetatiles return PetalburgCity_Gym_EventScript_OpenConfusionRoomDoors:: setvar VAR_0x8004, 4 - compare VAR_0x8005, 0 - call_if_eq PetalburgCity_Gym_EventScript_SlideOpenRoomDoors - compare VAR_0x8005, 1 - call_if_eq PetalburgCity_Gym_EventScript_UnlockRoomDoors + call_if_eq VAR_0x8005, 0, PetalburgCity_Gym_EventScript_SlideOpenRoomDoors + call_if_eq VAR_0x8005, 1, PetalburgCity_Gym_EventScript_UnlockRoomDoors call PetalburgCity_Gym_EventScript_SetConfusionRoomDoorMetatiles return PetalburgCity_Gym_EventScript_OpenDefenseRoomDoors:: setvar VAR_0x8004, 5 - compare VAR_0x8005, 0 - call_if_eq PetalburgCity_Gym_EventScript_SlideOpenRoomDoors - compare VAR_0x8005, 1 - call_if_eq PetalburgCity_Gym_EventScript_UnlockRoomDoors + call_if_eq VAR_0x8005, 0, PetalburgCity_Gym_EventScript_SlideOpenRoomDoors + call_if_eq VAR_0x8005, 1, PetalburgCity_Gym_EventScript_UnlockRoomDoors call PetalburgCity_Gym_EventScript_SetDefenseRoomDoorMetatiles return PetalburgCity_Gym_EventScript_OpenRecoveryRoomDoors:: setvar VAR_0x8004, 6 - compare VAR_0x8005, 0 - call_if_eq PetalburgCity_Gym_EventScript_SlideOpenRoomDoors - compare VAR_0x8005, 1 - call_if_eq PetalburgCity_Gym_EventScript_UnlockRoomDoors + call_if_eq VAR_0x8005, 0, PetalburgCity_Gym_EventScript_SlideOpenRoomDoors + call_if_eq VAR_0x8005, 1, PetalburgCity_Gym_EventScript_UnlockRoomDoors call PetalburgCity_Gym_EventScript_SetRecoveryRoomDoorMetatiles return PetalburgCity_Gym_EventScript_OpenStrengthRoomDoors:: setvar VAR_0x8004, 7 - compare VAR_0x8005, 0 - call_if_eq PetalburgCity_Gym_EventScript_SlideOpenRoomDoors - compare VAR_0x8005, 1 - call_if_eq PetalburgCity_Gym_EventScript_UnlockRoomDoors + call_if_eq VAR_0x8005, 0, PetalburgCity_Gym_EventScript_SlideOpenRoomDoors + call_if_eq VAR_0x8005, 1, PetalburgCity_Gym_EventScript_UnlockRoomDoors call PetalburgCity_Gym_EventScript_SetStrengthRoomDoorMetatiles return PetalburgCity_Gym_EventScript_OpenOHKORoomDoors:: setvar VAR_0x8004, 8 - compare VAR_0x8005, 0 - call_if_eq PetalburgCity_Gym_EventScript_SlideOpenRoomDoors - compare VAR_0x8005, 1 - call_if_eq PetalburgCity_Gym_EventScript_UnlockRoomDoors + call_if_eq VAR_0x8005, 0, PetalburgCity_Gym_EventScript_SlideOpenRoomDoors + call_if_eq VAR_0x8005, 1, PetalburgCity_Gym_EventScript_UnlockRoomDoors call PetalburgCity_Gym_EventScript_SetOHKORoomDoorMetatiles return PetalburgCity_Gym_EventScript_SetEntranceRoomDoorMetatiles:: - setmetatile 6, 85, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 7, 85, METATILE_PetalburgGym_RoomEntrance_Right, 0 - setmetatile 1, 98, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 2, 98, METATILE_PetalburgGym_RoomEntrance_Right, 0 + setmetatile 6, 85, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 7, 85, METATILE_PetalburgGym_RoomEntrance_Right, FALSE + setmetatile 1, 98, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 2, 98, METATILE_PetalburgGym_RoomEntrance_Right, FALSE return PetalburgCity_Gym_EventScript_SetSpeedRoomDoorMetatiles:: - setmetatile 6, 46, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 7, 46, METATILE_PetalburgGym_RoomEntrance_Right, 0 - setmetatile 1, 59, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 2, 59, METATILE_PetalburgGym_RoomEntrance_Right, 0 + setmetatile 6, 46, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 7, 46, METATILE_PetalburgGym_RoomEntrance_Right, FALSE + setmetatile 1, 59, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 2, 59, METATILE_PetalburgGym_RoomEntrance_Right, FALSE return PetalburgCity_Gym_EventScript_SetAccuracyRoomDoorMetatiles:: - setmetatile 6, 59, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 7, 59, METATILE_PetalburgGym_RoomEntrance_Right, 0 - setmetatile 1, 72, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 2, 72, METATILE_PetalburgGym_RoomEntrance_Right, 0 + setmetatile 6, 59, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 7, 59, METATILE_PetalburgGym_RoomEntrance_Right, FALSE + setmetatile 1, 72, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 2, 72, METATILE_PetalburgGym_RoomEntrance_Right, FALSE return PetalburgCity_Gym_EventScript_SetConfusionRoomDoorMetatiles:: - setmetatile 1, 20, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 2, 20, METATILE_PetalburgGym_RoomEntrance_Right, 0 + setmetatile 1, 20, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 2, 20, METATILE_PetalburgGym_RoomEntrance_Right, FALSE return PetalburgCity_Gym_EventScript_SetDefenseRoomDoorMetatiles:: - setmetatile 6, 20, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 7, 20, METATILE_PetalburgGym_RoomEntrance_Right, 0 - setmetatile 1, 33, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 2, 33, METATILE_PetalburgGym_RoomEntrance_Right, 0 + setmetatile 6, 20, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 7, 20, METATILE_PetalburgGym_RoomEntrance_Right, FALSE + setmetatile 1, 33, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 2, 33, METATILE_PetalburgGym_RoomEntrance_Right, FALSE return PetalburgCity_Gym_EventScript_SetRecoveryRoomDoorMetatiles:: - setmetatile 6, 33, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 7, 33, METATILE_PetalburgGym_RoomEntrance_Right, 0 + setmetatile 6, 33, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 7, 33, METATILE_PetalburgGym_RoomEntrance_Right, FALSE return PetalburgCity_Gym_EventScript_SetStrengthRoomDoorMetatiles:: - setmetatile 1, 7, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 2, 7, METATILE_PetalburgGym_RoomEntrance_Right, 0 + setmetatile 1, 7, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 2, 7, METATILE_PetalburgGym_RoomEntrance_Right, FALSE return PetalburgCity_Gym_EventScript_SetOHKORoomDoorMetatiles:: - setmetatile 6, 7, METATILE_PetalburgGym_RoomEntrance_Left, 0 - setmetatile 7, 7, METATILE_PetalburgGym_RoomEntrance_Right, 0 + setmetatile 6, 7, METATILE_PetalburgGym_RoomEntrance_Left, FALSE + setmetatile 7, 7, METATILE_PetalburgGym_RoomEntrance_Right, FALSE return PetalburgCity_Gym_EventScript_SlideOpenRoomDoors:: diff --git a/data/maps/PetalburgCity_Mart/scripts.inc b/data/maps/PetalburgCity_Mart/scripts.inc index abaa7b5b0e..acae50929d 100644 --- a/data/maps/PetalburgCity_Mart/scripts.inc +++ b/data/maps/PetalburgCity_Mart/scripts.inc @@ -23,7 +23,7 @@ PetalburgCity_Mart_Pokemart_Basic: .2byte ITEM_REPEL .2byte ITEM_X_SPEED .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_ORANGE_MAIL .2byte ITEM_NONE release @@ -48,7 +48,7 @@ PetalburgCity_Mart_Pokemart_Expanded: .2byte ITEM_REPEL .2byte ITEM_X_SPEED .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_ORANGE_MAIL .2byte ITEM_NONE release diff --git a/data/maps/PetalburgCity_PokemonCenter_1F/map.json b/data/maps/PetalburgCity_PokemonCenter_1F/map.json index 1fd6e972b9..875c53c2b9 100644 --- a/data/maps/PetalburgCity_PokemonCenter_1F/map.json +++ b/data/maps/PetalburgCity_PokemonCenter_1F/map.json @@ -37,7 +37,7 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "MysteryEventClub_EventScript_Man", + "script": "ProfileMan_EventScript_Man", "flag": "0" }, { diff --git a/data/maps/PetalburgCity_PokemonCenter_1F/scripts.inc b/data/maps/PetalburgCity_PokemonCenter_1F/scripts.inc index 58b58054f2..3dadd3184b 100644 --- a/data/maps/PetalburgCity_PokemonCenter_1F/scripts.inc +++ b/data/maps/PetalburgCity_PokemonCenter_1F/scripts.inc @@ -31,18 +31,14 @@ PetalburgCity_PokemonCenter_1F_EventScript_Woman:: faceplayer msgbox PetalburgCity_PokemonCenter_1F_Text_ManyTypesOfPokemon, MSGBOX_DEFAULT specialvar VAR_RESULT, IsStarterInParty - compare VAR_RESULT, TRUE - goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_SayStarterTypeInfo + goto_if_eq VAR_RESULT, TRUE, PetalburgCity_PokemonCenter_1F_EventScript_SayStarterTypeInfo release end PetalburgCity_PokemonCenter_1F_EventScript_SayStarterTypeInfo:: - compare VAR_STARTER_MON, 0 - call_if_eq PetalburgCity_PokemonCenter_1F_EventScript_SayTreeckoType - compare VAR_STARTER_MON, 1 - call_if_eq PetalburgCity_PokemonCenter_1F_EventScript_SayTorchicType - compare VAR_STARTER_MON, 2 - call_if_eq PetalburgCity_PokemonCenter_1F_EventScript_SayMudkipType + call_if_eq VAR_STARTER_MON, 0, PetalburgCity_PokemonCenter_1F_EventScript_SayTreeckoType + call_if_eq VAR_STARTER_MON, 1, PetalburgCity_PokemonCenter_1F_EventScript_SayTorchicType + call_if_eq VAR_STARTER_MON, 2, PetalburgCity_PokemonCenter_1F_EventScript_SayMudkipType release end diff --git a/data/maps/PetalburgWoods/scripts.inc b/data/maps/PetalburgWoods/scripts.inc index 2ade896421..94bd390148 100644 --- a/data/maps/PetalburgWoods/scripts.inc +++ b/data/maps/PetalburgWoods/scripts.inc @@ -18,7 +18,7 @@ PetalburgWoods_EventScript_DevonResearcherLeft:: closemessage applymovement LOCALID_GRUNT, PetalburgWoods_Movement_AquaApproachResearcherLeft waitmovement 0 - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox PetalburgWoods_Text_HandOverThosePapers, MSGBOX_DEFAULT closemessage @@ -44,7 +44,7 @@ PetalburgWoods_EventScript_DevonResearcherRight:: call PetalburgWoods_EventScript_DevonResearcherIntro applymovement LOCALID_DEVON_EMPLOYEE, PetalburgWoods_Movement_DevonResearcherApproachPlayerRight waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox PetalburgWoods_Text_HaveYouSeenShroomish, MSGBOX_DEFAULT closemessage @@ -55,14 +55,14 @@ PetalburgWoods_EventScript_DevonResearcherRight:: closemessage applymovement LOCALID_GRUNT, PetalburgWoods_Movement_AquaApproachResearcherRight waitmovement 0 - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox PetalburgWoods_Text_HandOverThosePapers, MSGBOX_DEFAULT closemessage applymovement LOCALID_DEVON_EMPLOYEE, PetalburgWoods_Movement_DevonResearcherFleeToPlayerRight waitmovement 0 msgbox PetalburgWoods_Text_YouHaveToHelpMe, MSGBOX_DEFAULT - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox PetalburgWoods_Text_NoOneCrossesTeamAqua, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_GRUNT_PETALBURG_WOODS, PetalburgWoods_Text_YoureKiddingMe @@ -88,12 +88,11 @@ PetalburgWoods_EventScript_DevonResearcherPostBattle:: applymovement LOCALID_GRUNT, PetalburgWoods_Movement_AquaRunAway waitmovement 0 removeobject LOCALID_GRUNT - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox PetalburgWoods_Text_ThatWasAwfullyClose, MSGBOX_DEFAULT giveitem ITEM_GREAT_BALL - compare VAR_RESULT, FALSE - goto_if_eq PetalburgWoods_EventScript_BagFull + goto_if_eq VAR_RESULT, FALSE, PetalburgWoods_EventScript_BagFull goto PetalburgWoods_EventScript_DevonResearcherFinish end @@ -159,7 +158,7 @@ PetalburgWoods_Movement_DevonResearcherApproachPlayerRight: walk_down walk_down walk_down - walk_in_place_fastest_right + walk_in_place_faster_right step_end PetalburgWoods_Movement_DevonResearcherExitRight: @@ -176,7 +175,7 @@ PetalburgWoods_Movement_DevonResearcherExitRight: PetalburgWoods_Movement_WatchResearcherLeave: delay_16 delay_16 - walk_in_place_fastest_up + walk_in_place_faster_up step_end PetalburgWoods_Movement_DevonResearcherFleeToPlayerLeft: @@ -184,17 +183,17 @@ PetalburgWoods_Movement_DevonResearcherFleeToPlayerLeft: walk_fast_down walk_fast_down walk_fast_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end PetalburgWoods_Movement_DevonResearcherFleeToPlayerRight: walk_fast_down walk_fast_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end PetalburgWoods_Movement_DevonResearcherStartExit: - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_16 delay_16 @@ -255,8 +254,7 @@ PetalburgWoods_EventScript_Girl:: goto_if_set FLAG_RECEIVED_MIRACLE_SEED, PetalburgWoods_EventScript_ExplainMiracleSeed msgbox PetalburgWoods_Text_TryUsingThisItem, MSGBOX_DEFAULT giveitem ITEM_MIRACLE_SEED - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_MIRACLE_SEED release end @@ -282,12 +280,10 @@ PetalburgWoods_EventScript_Lyle:: PetalburgWoods_EventScript_James:: trainerbattle_single TRAINER_JAMES_1, PetalburgWoods_Text_InstantlyPopularWithBugPokemon, PetalburgWoods_Text_CantBePopularIfILose, PetalburgWoods_EventScript_TryRegisterJames specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq PetalburgWoods_EventScript_JamesRematch + goto_if_eq VAR_RESULT, TRUE, PetalburgWoods_EventScript_JamesRematch setvar VAR_0x8004, TRAINER_JAMES_1 specialvar VAR_RESULT, IsTrainerRegistered - compare VAR_RESULT, FALSE - goto_if_eq PetalburgWoods_EventScript_TryRegisterJames2 + goto_if_eq VAR_RESULT, FALSE, PetalburgWoods_EventScript_TryRegisterJames2 msgbox PetalburgWoods_Text_PeopleRespectYou, MSGBOX_DEFAULT release end diff --git a/data/maps/Route101/scripts.inc b/data/maps/Route101/scripts.inc index d83c8213b6..dd0ef5dcec 100644 --- a/data/maps/Route101/scripts.inc +++ b/data/maps/Route101/scripts.inc @@ -33,7 +33,7 @@ Route101_EventScript_StartBirchRescue:: applymovement LOCALID_ZIGZAGOON, Route101_Movement_ZigzagoonChaseInCircles applymovement LOCALID_BIRCH, Route101_Movement_BirchRunInCircles waitmovement 0 - applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFasterRight waitmovement 0 applymovement LOCALID_ZIGZAGOON, Route101_Movement_ZigzagoonFaceBirch applymovement LOCALID_BIRCH, Route101_Movement_BirchFaceZigzagoon @@ -140,7 +140,7 @@ Route101_Movement_EnterScene: walk_fast_up walk_fast_up walk_fast_up - walk_in_place_fastest_left + walk_in_place_faster_left step_end Route101_Movement_BirchRunInCircles: @@ -226,7 +226,7 @@ Route101_EventScript_BirchsBag:: fadescreen FADE_TO_BLACK removeobject LOCALID_ZIGZAGOON setobjectxy OBJ_EVENT_ID_PLAYER, 6, 13 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 special ChooseStarter waitstate @@ -241,11 +241,9 @@ Route101_EventScript_BirchsBag:: setvar VAR_ROUTE101_STATE, 3 clearflag FLAG_HIDE_MAP_NAME_POPUP checkplayergender - compare VAR_RESULT, MALE - call_if_eq Route101_EventScript_HideMayInBedroom - compare VAR_RESULT, FEMALE - call_if_eq Route101_EventScript_HideBrendanInBedroom - warp MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB, 255, 6, 5 + call_if_eq VAR_RESULT, MALE, Route101_EventScript_HideMayInBedroom + call_if_eq VAR_RESULT, FEMALE, Route101_EventScript_HideBrendanInBedroom + warp MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB, 6, 5 waitstate release end diff --git a/data/maps/Route102/scripts.inc b/data/maps/Route102/scripts.inc index cc1eaa4bb7..6131ef9e01 100644 --- a/data/maps/Route102/scripts.inc +++ b/data/maps/Route102/scripts.inc @@ -20,12 +20,10 @@ Route102_EventScript_Boy:: Route102_EventScript_Calvin:: trainerbattle_single TRAINER_CALVIN_1, Route102_Text_CalvinIntro, Route102_Text_CalvinDefeated, Route102_EventScript_CalvinRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route102_EventScript_CalvinRematch + goto_if_eq VAR_RESULT, TRUE, Route102_EventScript_CalvinRematch setvar VAR_0x8004, TRAINER_CALVIN_1 specialvar VAR_RESULT, IsTrainerRegistered - compare VAR_RESULT, FALSE - goto_if_eq Route102_EventScript_CalvinTryRegister + goto_if_eq VAR_RESULT, FALSE, Route102_EventScript_CalvinTryRegister msgbox Route102_Text_CalvinPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route103/scripts.inc b/data/maps/Route103/scripts.inc index f0ac53949d..e2b75e0c3d 100644 --- a/data/maps/Route103/scripts.inc +++ b/data/maps/Route103/scripts.inc @@ -15,17 +15,15 @@ Route103_OnLoad: end Route103_EventScript_OpenAlteringCave:: - setmetatile 45, 5, METATILE_General_CaveEntrance_Top, 1 - setmetatile 45, 6, METATILE_General_CaveEntrance_Bottom, 0 + setmetatile 45, 5, METATILE_General_CaveEntrance_Top, TRUE + setmetatile 45, 6, METATILE_General_CaveEntrance_Bottom, FALSE return Route103_EventScript_Rival:: lockall checkplayergender - compare VAR_RESULT, MALE - goto_if_eq Route103_EventScript_RivalMay - compare VAR_RESULT, FEMALE - goto_if_eq Route103_EventScript_RivalBrendan + goto_if_eq VAR_RESULT, MALE, Route103_EventScript_RivalMay + goto_if_eq VAR_RESULT, FEMALE, Route103_EventScript_RivalBrendan end Route103_EventScript_RivalMay:: @@ -169,9 +167,9 @@ Route103_EventScript_RivalExitFacingNorth2: Route103_Movement_WatchRivalExitFacingNorth: delay_16 delay_4 - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end Route103_Movement_RivalExit1: @@ -188,7 +186,7 @@ Route103_Movement_RivalExit2: Route103_Movement_WatchRivalExitFacingEastOrWest: delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end Route103_EventScript_Boy:: @@ -211,8 +209,7 @@ Route103_EventScript_Daisy:: Route103_EventScript_Amy:: trainerbattle_double TRAINER_AMY_AND_LIV_1, Route103_Text_AmyIntro, Route103_Text_AmyDefeated, Route103_Text_AmyNotEnoughPokemon, Route102_EventScript_AmyRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route102_EventScript_AmyRematch + goto_if_eq VAR_RESULT, TRUE, Route102_EventScript_AmyRematch msgbox Route103_Text_AmyPostBattle, MSGBOX_AUTOCLOSE end @@ -230,8 +227,7 @@ Route102_EventScript_AmyRematch:: Route103_EventScript_Liv:: trainerbattle_double TRAINER_AMY_AND_LIV_1, Route103_Text_LivIntro, Route103_Text_LivDefeated, Route103_Text_LivNotEnoughPokemon, Route102_EventScript_LivRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route102_EventScript_LivRematch + goto_if_eq VAR_RESULT, TRUE, Route102_EventScript_LivRematch msgbox Route103_Text_LivPostBattle, MSGBOX_AUTOCLOSE end @@ -254,8 +250,7 @@ Route103_EventScript_Andrew:: Route103_EventScript_Miguel:: trainerbattle_single TRAINER_MIGUEL_1, Route103_Text_MiguelIntro, Route103_Text_MiguelDefeated, Route102_EventScript_MiguelRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route103_EventScript_MiguelRematch + goto_if_eq VAR_RESULT, TRUE, Route103_EventScript_MiguelRematch msgbox Route103_Text_MiguelPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route104/scripts.inc b/data/maps/Route104/scripts.inc index 87880ab59b..68aeb0a212 100644 --- a/data/maps/Route104/scripts.inc +++ b/data/maps/Route104/scripts.inc @@ -1,4 +1,4 @@ -@ NOTE: Route 104's sail to Dewford script references local IDs from Dewford's map. +@ NOTE: Route 104's sail to Dewford script references local IDs from Dewford's map. @ These are labeled in DewfordTown/scripts.inc .set LOCALID_RIVAL, 34 @@ -33,8 +33,7 @@ Route104_EventScript_HideWhiteHerbFlorist:: return Route104_EventScript_TrySetRivalPos:: - compare VAR_BOARD_BRINEY_BOAT_STATE, 1 - goto_if_ge Route104_EventScript_DontSetRivalPos + goto_if_ge VAR_BOARD_BRINEY_BOAT_STATE, 1, Route104_EventScript_DontSetRivalPos goto_if_set FLAG_MET_RIVAL_RUSTBORO, Route104_EventScript_DontSetRivalPos goto_if_unset FLAG_REGISTER_RIVAL_POKENAV, Route104_EventScript_DontSetRivalPos setobjectxyperm LOCALID_RIVAL, 17, 52 @@ -55,7 +54,7 @@ Route104_EventScript_RivalTrigger:: setflag FLAG_HIDE_RUSTBORO_CITY_RIVAL setvar VAR_RUSTBORO_CITY_STATE, 8 setvar VAR_ROUTE104_STATE, 2 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 10 addobject LOCALID_RIVAL @@ -77,10 +76,8 @@ Route104_EventScript_RivalTrigger:: @ Unused, shares script with Rustboro encounter instead Route104_EventScript_PlayRivalMusic:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq Route104_EventScript_PlayMayMusic - compare VAR_RESULT, FEMALE - goto_if_eq Route104_EventScript_PlayBrendanMusic + goto_if_eq VAR_RESULT, MALE, Route104_EventScript_PlayMayMusic + goto_if_eq VAR_RESULT, FEMALE, Route104_EventScript_PlayBrendanMusic return Route104_EventScript_PlayMayMusic:: @@ -93,10 +90,8 @@ Route104_EventScript_PlayBrendanMusic:: Route104_EventScript_RivalEncounter:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq Route104_EventScript_MayEncounter - compare VAR_RESULT, FEMALE - goto_if_eq Route104_EventScript_BrendanEncounter + goto_if_eq VAR_RESULT, MALE, Route104_EventScript_MayEncounter + goto_if_eq VAR_RESULT, FEMALE, Route104_EventScript_BrendanEncounter end Route104_EventScript_MayEncounter:: @@ -121,8 +116,7 @@ Route104_EventScript_MayEncounter:: waitmovement 0 copyobjectxytoperm LOCALID_RIVAL msgbox Route104_Text_MayMinesDecentLetsBattle, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route104_EventScript_BattleMay + goto_if_eq VAR_RESULT, YES, Route104_EventScript_BattleMay msgbox Route104_Text_MayHaventRaisedPokemon, MSGBOX_DEFAULT call Route104_EventScript_RestoreMusic releaseall @@ -139,13 +133,12 @@ Route104_Movement_RivalApproachPlayer: Route104_Movement_PlayerFaceRival: delay_4 - walk_in_place_fastest_left + walk_in_place_faster_left step_end Route104_EventScript_MayAskToBattle:: msgbox Route104_Text_MayLetsBattle, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route104_EventScript_BattleMay + goto_if_eq VAR_RESULT, YES, Route104_EventScript_BattleMay msgbox Route104_Text_MayHaventRaisedPokemon, MSGBOX_DEFAULT releaseall end @@ -160,8 +153,7 @@ Route104_EventScript_BattleMay:: Route104_EventScript_MayDefeated:: msgbox Route104_Text_MayPostBattle, MSGBOX_DEFAULT - compare VAR_0x8008, 0 - call_if_eq Route104_EventScript_RestoreMusic + call_if_eq VAR_0x8008, 0, Route104_EventScript_RestoreMusic releaseall end @@ -210,8 +202,7 @@ Route104_EventScript_BrendanEncounter:: waitmovement 0 copyobjectxytoperm LOCALID_RIVAL msgbox Route104_Text_BrendanDoingGreatLetsBattle, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route104_EventScript_BattleBrendan + goto_if_eq VAR_RESULT, YES, Route104_EventScript_BattleBrendan msgbox Route104_Text_BrendanNoConfidence, MSGBOX_DEFAULT call Route104_EventScript_RestoreMusic releaseall @@ -219,8 +210,7 @@ Route104_EventScript_BrendanEncounter:: Route104_EventScript_BrendanAskToBattle:: msgbox Route104_Text_BrendanLetsBattle, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route104_EventScript_BattleBrendan + goto_if_eq VAR_RESULT, YES, Route104_EventScript_BattleBrendan msgbox Route104_Text_BrendanNoConfidence, MSGBOX_DEFAULT releaseall end @@ -235,8 +225,7 @@ Route104_EventScript_BattleBrendan:: Route104_EventScript_BrendanDefeated:: msgbox Route104_Text_BrendanPostBattle, MSGBOX_DEFAULT - compare VAR_0x8008, 0 - call_if_eq Route104_EventScript_RestoreMusic + call_if_eq VAR_0x8008, 0, Route104_EventScript_RestoreMusic releaseall end @@ -274,8 +263,7 @@ Route104_EventScript_ExpertF:: goto_if_set FLAG_RECEIVED_CHESTO_BERRY_ROUTE_104, Route104_EventScript_ReceivedBerry msgbox Route104_Text_PlantBerriesInSoilTakeThis, MSGBOX_DEFAULT giveitem ITEM_CHESTO_BERRY - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_CHESTO_BERRY_ROUTE_104 msgbox Route104_Text_TrainersOftenMakeMonHoldBerries, MSGBOX_DEFAULT release @@ -292,8 +280,7 @@ Route104_EventScript_WhiteHerbFlorist:: goto_if_set FLAG_RECEIVED_WHITE_HERB, Route104_EventScript_ReceivedWhiteHerb msgbox Route104_Text_DontNeedThisTakeIt, MSGBOX_DEFAULT giveitem ITEM_WHITE_HERB - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_WHITE_HERB release end @@ -345,8 +332,7 @@ Route104_EventScript_Boy2:: goto_if_set FLAG_RECEIVED_TM09, Route104_EventScript_ReceivedBulletSeed msgbox Route104_Text_LikeFillingMouthWithSeedsTakeThis, MSGBOX_DEFAULT giveitem ITEM_TM09 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM09 release end @@ -361,8 +347,8 @@ Route104_EventScript_Girl2:: end Route104_EventScript_SailToDewford:: - setobjectpriority LOCALID_BRINEY_R104, MAP_ROUTE104, 0 - setobjectpriority OBJ_EVENT_ID_PLAYER, MAP_ROUTE104, 0 + setobjectsubpriority LOCALID_BRINEY_R104, MAP_ROUTE104, 0 + setobjectsubpriority OBJ_EVENT_ID_PLAYER, MAP_ROUTE104, 0 applymovement LOCALID_BRINEY_R104, Route104_Movement_BrineyBoardBoat waitmovement 0 removeobject LOCALID_BRINEY_R104 @@ -409,7 +395,7 @@ Route104_EventScript_ArriveInDewford:: waitmovement 0 setobjectxyperm LOCALID_BRINEY_DEWFORD, 12, 8 addobject LOCALID_BRINEY_DEWFORD - setobjectpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN, 0 + setobjectsubpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN, 0 clearflag FLAG_HIDE_MR_BRINEY_DEWFORD_TOWN applymovement LOCALID_BRINEY_DEWFORD, Route104_Movement_BrineyExitBoat waitmovement 0 @@ -419,8 +405,8 @@ Route104_EventScript_ArriveInDewford:: setflag FLAG_HIDE_ROUTE_104_MR_BRINEY_BOAT hideobjectat LOCALID_BOAT_R104, MAP_ROUTE104 copyvar VAR_BRINEY_LOCATION, VAR_0x8008 - resetobjectpriority OBJ_EVENT_ID_PLAYER, MAP_ROUTE104 - resetobjectpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN + resetobjectsubpriority OBJ_EVENT_ID_PLAYER, MAP_ROUTE104 + resetobjectsubpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN copyobjectxytoperm LOCALID_BRINEY_DEWFORD setvar VAR_BOARD_BRINEY_BOAT_STATE, 0 goto_if_unset FLAG_DELIVERED_STEVEN_LETTER, Route104_EventScript_DeliverLetterReminder @@ -446,122 +432,122 @@ Route104_Movement_SailToDewfordBeforeDadCalls: walk_fast_down walk_fast_down walk_fast_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down walk_fast_down walk_fast_down walk_fast_down walk_fast_down walk_fast_right walk_fast_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right walk_fast_right walk_fast_right walk_fast_down walk_fast_down walk_fast_down walk_fast_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down step_end Route104_Movement_SailToDewfordAfterDadCalls: - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down walk_fast_down walk_fast_down walk_fast_down @@ -570,46 +556,46 @@ Route104_Movement_SailToDewfordAfterDadCalls: walk_fast_right walk_fast_right walk_fast_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right walk_fast_right walk_fast_right walk_fast_right @@ -646,119 +632,119 @@ Route104_Movement_SailToDewford: walk_fast_down walk_fast_down walk_fast_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down walk_fast_down walk_fast_down walk_fast_down walk_fast_down walk_fast_right walk_fast_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right walk_fast_right walk_fast_right walk_fast_down walk_fast_down walk_fast_down walk_fast_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down walk_fast_down walk_fast_down walk_fast_down @@ -767,46 +753,46 @@ Route104_Movement_SailToDewford: walk_fast_right walk_fast_right walk_fast_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right - walk_fastest_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right + walk_faster_right walk_fast_right walk_fast_right walk_fast_right @@ -847,7 +833,7 @@ Route104_Movement_PlayerExitBoat: Route104_Movement_PlayerMoveForBriney: walk_down walk_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end Route104_Movement_BrineyBoardBoat: @@ -857,7 +843,7 @@ Route104_Movement_BrineyBoardBoat: Route104_Movement_BrineyExitBoat: walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end Route104_EventScript_Ivan:: @@ -873,12 +859,10 @@ Route104_EventScript_Billy:: Route104_EventScript_Haley:: trainerbattle_single TRAINER_HALEY_1, Route104_Text_HaleyIntro, Route104_Text_HaleyDefeat, Route104_EventScript_TryRegisterHaleyAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route104_EventScript_RematchHaley + goto_if_eq VAR_RESULT, TRUE, Route104_EventScript_RematchHaley setvar VAR_0x8004, TRAINER_HALEY_1 specialvar VAR_RESULT, IsTrainerRegistered - compare VAR_RESULT, FALSE - goto_if_eq Route104_EventScript_TryRegisterHaley + goto_if_eq VAR_RESULT, FALSE, Route104_EventScript_TryRegisterHaley msgbox Route104_Text_HaleyPostBattle, MSGBOX_DEFAULT release end @@ -916,12 +900,10 @@ Route104_EventScript_RematchHaley:: Route104_EventScript_Winston:: trainerbattle_single TRAINER_WINSTON_1, Route104_Text_WinstonIntro, Route104_Text_WinstonDefeat, Route104_EventScript_TryRegisterWinstonAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route104_EventScript_RematchWinston + goto_if_eq VAR_RESULT, TRUE, Route104_EventScript_RematchWinston setvar VAR_0x8004, TRAINER_WINSTON_1 specialvar VAR_RESULT, IsTrainerRegistered - compare VAR_RESULT, FALSE - goto_if_eq Route104_EventScript_TryRegisterWinston + goto_if_eq VAR_RESULT, FALSE, Route104_EventScript_TryRegisterWinston msgbox Route104_Text_WinstonPostBattle, MSGBOX_DEFAULT release end @@ -959,12 +941,10 @@ Route104_EventScript_RematchWinston:: Route104_EventScript_Cindy:: trainerbattle_single TRAINER_CINDY_1, Route104_Text_CindyIntro, Route104_Text_CindyDefeat, Route104_EventScript_TryRegisterCindyAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route104_EventScript_RematchCindy + goto_if_eq VAR_RESULT, TRUE, Route104_EventScript_RematchCindy setvar VAR_0x8004, TRAINER_CINDY_1 specialvar VAR_RESULT, IsTrainerRegistered - compare VAR_RESULT, FALSE - goto_if_eq Route104_EventScript_TryRegisterCindy + goto_if_eq VAR_RESULT, FALSE, Route104_EventScript_TryRegisterCindy msgbox Route104_Text_CindyPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route104_MrBrineysHouse/scripts.inc b/data/maps/Route104_MrBrineysHouse/scripts.inc index 60e08c7b89..4c693cb4fa 100644 --- a/data/maps/Route104_MrBrineysHouse/scripts.inc +++ b/data/maps/Route104_MrBrineysHouse/scripts.inc @@ -7,8 +7,7 @@ Route104_MrBrineysHouse_MapScripts:: Route104_MrBrineysHouse_OnTransition: setflag FLAG_LANDMARK_MR_BRINEY_HOUSE - compare VAR_BRINEY_HOUSE_STATE, 1 - call_if_eq Route104_MrBrineysHouse_EventScript_SetBrineyPeekoPos + call_if_eq VAR_BRINEY_HOUSE_STATE, 1, Route104_MrBrineysHouse_EventScript_SetBrineyPeekoPos call_if_set FLAG_RECEIVED_POKENAV, Route104_MrBrineysHouse_EventScript_HideRustboroRival end @@ -36,8 +35,7 @@ Route104_MrBrineysHouse_EventScript_SailingIntro:: setflag FLAG_MR_BRINEY_SAILING_INTRO msgbox Route104_MrBrineysHouse_Text_WaitUpPeeko, MSGBOX_DEFAULT msgbox Route104_MrBrineysHouse_Text_ItsYouLetsSailToDewford, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route104_MrBrineysHouse_EventScript_DeclineDeliverySailing + goto_if_eq VAR_RESULT, NO, Route104_MrBrineysHouse_EventScript_DeclineDeliverySailing goto Route104_MrBrineysHouse_EventScript_SailToDewford end @@ -53,15 +51,13 @@ Route104_MrBrineysHouse_EventScript_WhereAreWeBound:: Route104_MrBrineysHouse_EventScript_SailBothDeliveries:: msgbox Route104_MrBrineysHouse_Text_NeedToMakeDeliveriesSailToDewford, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route104_MrBrineysHouse_EventScript_DeclineDeliverySailing + goto_if_eq VAR_RESULT, NO, Route104_MrBrineysHouse_EventScript_DeclineDeliverySailing goto Route104_MrBrineysHouse_EventScript_SailToDewford end Route104_MrBrineysHouse_EventScript_SailDeliverPackage:: msgbox Route104_MrBrineysHouse_Text_NeedToDeliverPackageSailToDewford, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route104_MrBrineysHouse_EventScript_DeclineDeliverySailing + goto_if_eq VAR_RESULT, NO, Route104_MrBrineysHouse_EventScript_DeclineDeliverySailing goto Route104_MrBrineysHouse_EventScript_SailToDewford end @@ -86,7 +82,7 @@ Route104_MrBrineysHouse_EventScript_SailToDewford:: setvar VAR_ROUTE104_STATE, 2 setflag FLAG_HIDE_RUSTBORO_CITY_RIVAL setflag FLAG_HIDE_ROUTE_104_RIVAL - warp MAP_ROUTE104, 255, 13, 51 + warp MAP_ROUTE104, 13, 51 waitstate releaseall end @@ -95,7 +91,7 @@ Route104_MrBrineysHouse_EventScript_Peeko:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox Route104_MrBrineysHouse_Text_Peeko, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc b/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc index 34f5ba42c4..5f0ec28fa5 100644 --- a/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc +++ b/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc @@ -23,19 +23,15 @@ Route104_PrettyPetalFlowerShop_EventScript_ShopOwner:: goto_if_set FLAG_MET_PRETTY_PETAL_SHOP_OWNER, Route104_PrettyPetalFlowerShop_EventScript_AlreadyMet setflag FLAG_MET_PRETTY_PETAL_SHOP_OWNER msgbox Route104_PrettyPetalFlowerShop_Text_IntroLearnAboutBerries, MSGBOX_YESNO - compare VAR_RESULT, YES - call_if_eq Route104_PrettyPetalFlowerShop_EventScript_ExplainBerries - compare VAR_RESULT, NO - call_if_eq Route104_PrettyPetalFlowerShop_EventScript_DontExplainBerries + call_if_eq VAR_RESULT, YES, Route104_PrettyPetalFlowerShop_EventScript_ExplainBerries + call_if_eq VAR_RESULT, NO, Route104_PrettyPetalFlowerShop_EventScript_DontExplainBerries release end Route104_PrettyPetalFlowerShop_EventScript_AlreadyMet:: msgbox Route104_PrettyPetalFlowerShop_Text_LearnAboutBerries, MSGBOX_YESNO - compare VAR_RESULT, YES - call_if_eq Route104_PrettyPetalFlowerShop_EventScript_ExplainBerries - compare VAR_RESULT, NO - call_if_eq Route104_PrettyPetalFlowerShop_EventScript_DontExplainBerries + call_if_eq VAR_RESULT, YES, Route104_PrettyPetalFlowerShop_EventScript_ExplainBerries + call_if_eq VAR_RESULT, NO, Route104_PrettyPetalFlowerShop_EventScript_DontExplainBerries release end @@ -92,8 +88,7 @@ Route104_PrettyPetalFlowerShop_EventScript_RandomBerryGirl:: random 8 addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem VAR_RESULT - compare VAR_RESULT, 0 - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull setflag FLAG_DAILY_FLOWER_SHOP_RECEIVED_BERRY msgbox Route104_PrettyPetalFlowerShop_Text_MachineMixesBerries, MSGBOX_DEFAULT release diff --git a/data/maps/Route105/scripts.inc b/data/maps/Route105/scripts.inc index b60cd181fa..bfad0daaae 100644 --- a/data/maps/Route105/scripts.inc +++ b/data/maps/Route105/scripts.inc @@ -6,24 +6,19 @@ Route105_MapScripts:: Route105_OnLoad: call_if_unset FLAG_REGI_DOORS_OPENED, Route105_CloseRegiEntrance - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_105_NORTH - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute105North - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_105_SOUTH - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute105South + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_105_NORTH, AbnormalWeather_EventScript_PlaceTilesRoute105North + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_105_SOUTH, AbnormalWeather_EventScript_PlaceTilesRoute105South end Route105_CloseRegiEntrance:: - setmetatile 9, 19, METATILE_General_RockWall_RockBase, 1 - setmetatile 9, 20, METATILE_General_RockWall_SandBase, 1 + setmetatile 9, 19, METATILE_General_RockWall_RockBase, TRUE + setmetatile 9, 20, METATILE_General_RockWall_SandBase, TRUE return Route105_OnTransition: - compare VAR_SHOULD_END_ABNORMAL_WEATHER, 1 - call_if_eq AbnormalWeather_EventScript_HideMapNamePopup - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_105_NORTH - call_if_eq AbnormalWeather_StartKyogreWeather - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_105_SOUTH - call_if_eq AbnormalWeather_StartKyogreWeather + call_if_eq VAR_SHOULD_END_ABNORMAL_WEATHER, 1, AbnormalWeather_EventScript_HideMapNamePopup + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_105_NORTH, AbnormalWeather_StartKyogreWeather + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_105_SOUTH, AbnormalWeather_StartKyogreWeather end Route105_OnFrame: @@ -63,8 +58,7 @@ Route105_EventScript_Josue:: Route105_EventScript_Andres:: trainerbattle_single TRAINER_ANDRES_1, Route105_Text_AndresIntro, Route105_Text_AndresDefeated, Route105_EventScript_AndresRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route105_EventScript_AndresRematch + goto_if_eq VAR_RESULT, TRUE, Route105_EventScript_AndresRematch msgbox Route105_Text_AndresPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route106/scripts.inc b/data/maps/Route106/scripts.inc index 2107ce1c3b..0202f57f01 100644 --- a/data/maps/Route106/scripts.inc +++ b/data/maps/Route106/scripts.inc @@ -18,8 +18,7 @@ Route106_EventScript_Kyla:: Route106_EventScript_Elliot:: trainerbattle_single TRAINER_ELLIOT_1, Route106_Text_ElliotIntro, Route106_Text_ElliotDefeated, Route106_EventScript_ElliotRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route106_EventScript_ElliotRematch + goto_if_eq VAR_RESULT, TRUE, Route106_EventScript_ElliotRematch msgbox Route106_Text_ElliotPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route107/scripts.inc b/data/maps/Route107/scripts.inc index cffeafb08f..b61e3e705e 100644 --- a/data/maps/Route107/scripts.inc +++ b/data/maps/Route107/scripts.inc @@ -9,8 +9,7 @@ Route107_EventScript_Darrin:: Route107_EventScript_Tony:: trainerbattle_single TRAINER_TONY_1, Route107_Text_TonyIntro, Route107_Text_TonyDefeated, Route107_EventScript_TonyRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route107_EventScript_TonyRematch + goto_if_eq VAR_RESULT, TRUE, Route107_EventScript_TonyRematch msgbox Route107_Text_TonyPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route108/scripts.inc b/data/maps/Route108/scripts.inc index 8663915545..cc2a3e9c3d 100644 --- a/data/maps/Route108/scripts.inc +++ b/data/maps/Route108/scripts.inc @@ -29,8 +29,7 @@ Route108_EventScript_Carolina:: Route108_EventScript_Cory:: trainerbattle_single TRAINER_CORY_1, Route108_Text_CoryIntro, Route108_Text_CoryDefeated, Route108_EventScript_CoryRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route108_EventScript_CoryRematch + goto_if_eq VAR_RESULT, TRUE, Route108_EventScript_CoryRematch msgbox Route108_Text_CoryPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route109/scripts.inc b/data/maps/Route109/scripts.inc index ff1ac4ac05..f0353fef4d 100644 --- a/data/maps/Route109/scripts.inc +++ b/data/maps/Route109/scripts.inc @@ -1,4 +1,4 @@ -@ NOTE: Route 109's sail to Dewford script references local IDs from Dewford's map. +@ NOTE: Route 109's sail to Dewford script references local IDs from Dewford's map. @ These are labeled in DewfordTown/scripts.inc Route109_MapScripts:: @@ -6,8 +6,8 @@ Route109_MapScripts:: Route109_EventScript_StartDepartForDewford:: call EventScript_BackupMrBrineyLocation - setobjectpriority LOCALID_BRINEY_R109, MAP_ROUTE109, 0 - setobjectpriority OBJ_EVENT_ID_PLAYER, MAP_ROUTE109, 0 + setobjectsubpriority LOCALID_BRINEY_R109, MAP_ROUTE109, 0 + setobjectsubpriority OBJ_EVENT_ID_PLAYER, MAP_ROUTE109, 0 applymovement LOCALID_BRINEY_R109, Route109_Movement_BrineyEnterBoat waitmovement 0 removeobject LOCALID_BRINEY_R109 @@ -50,7 +50,7 @@ Route109_EventScript_DoSailToDewford:: clearflag FLAG_HIDE_MR_BRINEY_BOAT_DEWFORD_TOWN setobjectxyperm LOCALID_BRINEY_DEWFORD, 12, 8 addobject LOCALID_BRINEY_DEWFORD - setobjectpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN, 0 + setobjectsubpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN, 0 applymovement LOCALID_BRINEY_DEWFORD, Route109_Movement_BrineyExitBoat waitmovement 0 clearflag FLAG_HIDE_MR_BRINEY_DEWFORD_TOWN @@ -59,174 +59,174 @@ Route109_EventScript_DoSailToDewford:: msgbox DewfordTown_Text_BrineyLandedInDewford, MSGBOX_DEFAULT closemessage copyvar VAR_BRINEY_LOCATION, VAR_0x8008 - resetobjectpriority OBJ_EVENT_ID_PLAYER, MAP_ROUTE109 - resetobjectpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN + resetobjectsubpriority OBJ_EVENT_ID_PLAYER, MAP_ROUTE109 + resetobjectsubpriority LOCALID_BRINEY_DEWFORD, MAP_DEWFORD_TOWN copyobjectxytoperm LOCALID_BRINEY_DEWFORD release end Route109_Movement_SailToDewford: - walk_in_place_fastest_down + walk_in_place_faster_down walk_down walk_down walk_fast_down walk_fast_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down - walk_fastest_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down + walk_faster_down walk_fast_down walk_fast_down walk_fast_left walk_fast_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left - walk_fastest_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left + walk_faster_left walk_fast_left walk_fast_left walk_fast_left @@ -238,7 +238,7 @@ Route109_Movement_SailToDewford: walk_fast_left walk_left walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end Route109_Movement_PlayerEnterBoatSouth: @@ -250,7 +250,7 @@ Route109_Movement_PlayerExitBoat: walk_down walk_down walk_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end Route109_Movement_PlayerEnterBoatEast: @@ -269,7 +269,7 @@ Route109_Movement_BrineyEnterBoat: Route109_Movement_BrineyExitBoat: walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end Route109_EventScript_MrBriney:: @@ -282,8 +282,7 @@ Route109_EventScript_MrBriney:: Route109_EventScript_HaveNotDeliveredDevonGood:: message Route109_Text_BrineySailToDewfordQuestion msgbox Route109_Text_BrineySailToDewfordQuestion, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route109_EventScript_StayHere + goto_if_eq VAR_RESULT, NO, Route109_EventScript_StayHere goto Route109_EventScript_SailToDewford end @@ -334,8 +333,7 @@ Route109_EventScript_SoftSandGirl:: goto_if_set FLAG_RECEIVED_SOFT_SAND, Route109_EventScript_AlreadyReceivedSoftSand msgbox Route109_Text_YouCanHaveThis, MSGBOX_DEFAULT giveitem ITEM_SOFT_SAND - compare VAR_RESULT, 0 - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull closemessage applymovement VAR_LAST_TALKED, Common_Movement_FaceOriginalDirection waitmovement 0 @@ -362,7 +360,7 @@ Route109_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox Route109_Text_ZigzagoonCry, MSGBOX_DEFAULT waitmoncry release @@ -399,8 +397,7 @@ Route109_EventScript_Edmond:: Route109_EventScript_Ricky:: trainerbattle_single TRAINER_RICKY_1, Route109_Text_RickyIntro, Route109_Text_RickyDefeated, Route109_EventScript_RickyRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route109_EventScript_RickyRematch + goto_if_eq VAR_RESULT, TRUE, Route109_EventScript_RickyRematch msgbox Route109_Text_RickyPostBattle, MSGBOX_DEFAULT release end @@ -421,8 +418,7 @@ Route109_EventScript_RickyRematch:: Route109_EventScript_Lola:: trainerbattle_single TRAINER_LOLA_1, Route109_Text_LolaIntro, Route109_Text_LolaDefeated, Route109_EventScript_LolaRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route109_EventScript_LolaRematch + goto_if_eq VAR_RESULT, TRUE, Route109_EventScript_LolaRematch msgbox Route109_Text_LolaPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route109_SeashoreHouse/scripts.inc b/data/maps/Route109_SeashoreHouse/scripts.inc index c4cfd1576e..afb2a4aa0d 100644 --- a/data/maps/Route109_SeashoreHouse/scripts.inc +++ b/data/maps/Route109_SeashoreHouse/scripts.inc @@ -25,8 +25,7 @@ Route109_SeashoreHouse_EventScript_AlreadyGaveIntroduction:: Route109_SeashoreHouse_EventScript_DefeatedTrainers:: msgbox Route109_SeashoreHouse_Text_TakeTheseSodaPopBottles, MSGBOX_DEFAULT giveitem ITEM_SODA_POP, 6 - compare VAR_RESULT, FALSE - goto_if_eq Route109_SeashoreHouse_EventScript_BagFull + goto_if_eq VAR_RESULT, FALSE, Route109_SeashoreHouse_EventScript_BagFull setflag FLAG_RECEIVED_6_SODA_POP release end @@ -37,25 +36,22 @@ Route109_SeashoreHouse_EventScript_BagFull:: end Route109_SeashoreHouse_EventScript_AlreadyReceivedSodaPop:: - showmoneybox 0, 0, 0 + showmoneybox 0, 0 msgbox Route109_SeashoreHouse_Text_WantToBuySodaPop, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route109_SeashoreHouse_EventScript_BuySodaPop + goto_if_eq VAR_RESULT, YES, Route109_SeashoreHouse_EventScript_BuySodaPop msgbox Route109_SeashoreHouse_Text_ThatsTooBad, MSGBOX_DEFAULT hidemoneybox release end Route109_SeashoreHouse_EventScript_BuySodaPop:: - checkmoney 300, 0 - compare VAR_RESULT, FALSE - goto_if_eq Route109_SeashoreHouse_EventScript_NotEnoughMoney - checkitemspace ITEM_SODA_POP, 1 - compare VAR_RESULT, FALSE - goto_if_eq Route109_SeashoreHouse_EventScript_NotEnoughSpace + checkmoney 300 + goto_if_eq VAR_RESULT, FALSE, Route109_SeashoreHouse_EventScript_NotEnoughMoney + checkitemspace ITEM_SODA_POP + goto_if_eq VAR_RESULT, FALSE, Route109_SeashoreHouse_EventScript_NotEnoughSpace msgbox Route109_SeashoreHouse_Text_HereYouGo, MSGBOX_DEFAULT - removemoney 300, 0 - updatemoneybox 0, 0 + removemoney 300 + updatemoneybox giveitem ITEM_SODA_POP hidemoneybox release diff --git a/data/maps/Route110/scripts.inc b/data/maps/Route110/scripts.inc index e9caf68ade..8447604aca 100644 --- a/data/maps/Route110/scripts.inc +++ b/data/maps/Route110/scripts.inc @@ -16,8 +16,7 @@ Route110_OnResume: Route110_OnTransition: call Common_EventScript_SetupRivalGfxId call Common_EventScript_SetupRivalOnBikeGfxId - compare VAR_CYCLING_CHALLENGE_STATE, 1 - call_if_eq Route110_EventScript_SaveCyclingMusic + call_if_eq VAR_CYCLING_CHALLENGE_STATE, 1, Route110_EventScript_SaveCyclingMusic end Route110_EventScript_SaveCyclingMusic:: @@ -136,8 +135,7 @@ Route110_EventScript_TrickHouseSign:: Route110_EventScript_CyclingRoadResultsSign:: lockall specialvar VAR_RESULT, GetRecordedCyclingRoadResults - compare VAR_RESULT, FALSE - goto_if_eq Route110_EventScript_NoRecordSet + goto_if_eq VAR_RESULT, FALSE, Route110_EventScript_NoRecordSet msgbox Route110_Text_BestRecord, MSGBOX_DEFAULT releaseall end @@ -151,10 +149,8 @@ Route110_EventScript_ChallengeGuy:: lock faceplayer specialvar VAR_RESULT, GetPlayerAvatarBike - compare VAR_RESULT, 1 - goto_if_eq Route110_EventScript_PlayerRidingAcroBike - compare VAR_CYCLING_CHALLENGE_STATE, 0 - goto_if_eq Route110_EventScript_PlayerNotRidingBike + goto_if_eq VAR_RESULT, 1, Route110_EventScript_PlayerRidingAcroBike + goto_if_eq VAR_CYCLING_CHALLENGE_STATE, 0, Route110_EventScript_PlayerNotRidingBike msgbox Route110_Text_AlwaysAimHigher, MSGBOX_DEFAULT release end @@ -182,8 +178,7 @@ Route110_EventScript_Jaclyn:: Route110_EventScript_Edwin:: trainerbattle_single TRAINER_EDWIN_1, Route110_Text_EdwinIntro, Route110_Text_EdwinDefeated, Route110_EventScript_EdwinRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route110_EventScript_EdwinRematch + goto_if_eq VAR_RESULT, TRUE, Route110_EventScript_EdwinRematch msgbox Route110_Text_EdwinPostBattle, MSGBOX_DEFAULT release end @@ -219,8 +214,7 @@ Route110_EventScript_Anthony:: Route110_EventScript_Benjamin:: trainerbattle_single TRAINER_BENJAMIN_1, Route110_Text_BenjaminIntro, Route110_Text_BenjaminDefeated, Route110_EventScript_BenjaminRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route110_EventScript_BenjaminRematch + goto_if_eq VAR_RESULT, TRUE, Route110_EventScript_BenjaminRematch msgbox Route110_Text_BenjaminPostBattle, MSGBOX_DEFAULT release end @@ -246,8 +240,7 @@ Route110_EventScript_Jasmine:: Route110_EventScript_Abigail:: trainerbattle_single TRAINER_ABIGAIL_1, Route110_Text_AbigailIntro, Route110_Text_AbigailDefeated, Route110_EventScript_AbigailRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route110_EventScript_AbigailRematch + goto_if_eq VAR_RESULT, TRUE, Route110_EventScript_AbigailRematch msgbox Route110_Text_AbigailPostBattle, MSGBOX_DEFAULT release end @@ -268,8 +261,7 @@ Route110_EventScript_AbigailRematch:: Route110_EventScript_Isabel:: trainerbattle_single TRAINER_ISABEL_1, Route110_Text_IsabelIntro, Route110_Text_IsabelDefeated, Route110_EventScript_IsabelRegisterMatchCallAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route110_EventScript_IsabelRematch + goto_if_eq VAR_RESULT, TRUE, Route110_EventScript_IsabelRematch msgbox Route110_Text_IsabelPostBattle, MSGBOX_DEFAULT release end @@ -312,7 +304,7 @@ Route110_EventScript_Alyssa:: Route110_EventScript_CyclingChallengeEnd:: lockall - applymovement LOCALID_CHALLENGE_BIKER, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_CHALLENGE_BIKER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 call Route110_EventScript_CyclingChallengeResults releaseall @@ -384,28 +376,21 @@ Route110_EventScript_RivalTrigger3:: Route110_EventScript_RivalScene:: lockall checkplayergender - compare VAR_RESULT, MALE - call_if_eq Route110_EventScript_PlayMayMusic - compare VAR_RESULT, FEMALE - call_if_eq Route110_EventScript_PlayBrendanMusic - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestDown + call_if_eq VAR_RESULT, MALE, Route110_EventScript_PlayMayMusic + call_if_eq VAR_RESULT, FEMALE, Route110_EventScript_PlayBrendanMusic + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterDown waitmovement 0 applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark waitmovement 0 applymovement LOCALID_RIVAL, Common_Movement_Delay48 waitmovement 0 delay 30 - compare VAR_0x8008, 1 - call_if_eq Route110_EventScript_RivalApproachPlayer1 - compare VAR_0x8008, 2 - call_if_eq Route110_EventScript_RivalApproachPlayer2 - compare VAR_0x8008, 3 - call_if_eq Route110_EventScript_RivalApproachPlayer3 + call_if_eq VAR_0x8008, 1, Route110_EventScript_RivalApproachPlayer1 + call_if_eq VAR_0x8008, 2, Route110_EventScript_RivalApproachPlayer2 + call_if_eq VAR_0x8008, 3, Route110_EventScript_RivalApproachPlayer3 checkplayergender - compare VAR_RESULT, MALE - goto_if_eq Route110_EventScript_MayBattle - compare VAR_RESULT, FEMALE - goto_if_eq Route110_EventScript_BrendanBattle + goto_if_eq VAR_RESULT, MALE, Route110_EventScript_MayBattle + goto_if_eq VAR_RESULT, FEMALE, Route110_EventScript_BrendanBattle releaseall end @@ -478,28 +463,22 @@ Route110_EventScript_BrendanDefeated:: end Route110_EventScript_GiveItemfinder:: - giveitem ITEM_ITEMFINDER + giveitem ITEM_DOWSING_MACHINE return Route110_EventScript_RivalExit:: closemessage - compare VAR_0x8008, 1 - call_if_eq Route110_EventScript_MoveRival1 - compare VAR_0x8008, 2 - call_if_eq Route110_EventScript_MoveRival2 - compare VAR_0x8008, 3 - call_if_eq Route110_EventScript_MoveRival3 + call_if_eq VAR_0x8008, 1, Route110_EventScript_MoveRival1 + call_if_eq VAR_0x8008, 2, Route110_EventScript_MoveRival2 + call_if_eq VAR_0x8008, 3, Route110_EventScript_MoveRival3 setobjectmovementtype LOCALID_RIVAL, MOVEMENT_TYPE_FACE_RIGHT setobjectmovementtype LOCALID_RIVAL_ON_BIKE, MOVEMENT_TYPE_FACE_RIGHT removeobject LOCALID_RIVAL addobject LOCALID_RIVAL_ON_BIKE delay 45 - compare VAR_0x8008, 1 - call_if_eq Route110_EventScript_RivalExit1 - compare VAR_0x8008, 2 - call_if_eq Route110_EventScript_RivalExit2 - compare VAR_0x8008, 3 - call_if_eq Route110_EventScript_RivalExit3 + call_if_eq VAR_0x8008, 1, Route110_EventScript_RivalExit1 + call_if_eq VAR_0x8008, 2, Route110_EventScript_RivalExit2 + call_if_eq VAR_0x8008, 3, Route110_EventScript_RivalExit3 removeobject LOCALID_RIVAL_ON_BIKE setvar VAR_ROUTE110_STATE, 1 savebgm MUS_DUMMY @@ -552,7 +531,7 @@ Route110_EventScript_MoveRival3:: Route110_Movement_RivalApproachPlayer1: walk_down walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end Route110_Movement_RivalApproachPlayer2: @@ -562,7 +541,7 @@ Route110_Movement_RivalApproachPlayer2: Route110_Movement_RivalApproachPlayer3: walk_down walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end Route110_Movement_RivalExit1: @@ -625,24 +604,20 @@ Route110_EventScript_BirchScene:: waitmovement 0 applymovement LOCALID_BIRCH, Common_Movement_Delay48 waitmovement 0 - compare VAR_0x8008, 1 - call_if_eq Route110_EventScript_BirchApproachPlayer1 - compare VAR_0x8008, 2 - call_if_eq Route110_EventScript_BirchApproachPlayer2 - compare VAR_0x8008, 3 - call_if_eq Route110_EventScript_BirchApproachPlayer3 - compare VAR_0x8008, 4 - call_if_eq Route110_EventScript_BirchApproachPlayer4 + call_if_eq VAR_0x8008, 1, Route110_EventScript_BirchApproachPlayer1 + call_if_eq VAR_0x8008, 2, Route110_EventScript_BirchApproachPlayer2 + call_if_eq VAR_0x8008, 3, Route110_EventScript_BirchApproachPlayer3 + call_if_eq VAR_0x8008, 4, Route110_EventScript_BirchApproachPlayer4 msgbox Route110_Text_ImagineSeeingYouHere, MSGBOX_DEFAULT closemessage delay 20 - applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 delay 10 - applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 20 - applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_BIRCH, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 30 msgbox Route110_Text_HeardYouInstallMatchCall, MSGBOX_DEFAULT @@ -656,14 +631,10 @@ Route110_EventScript_BirchScene:: setflag FLAG_ENABLE_PROF_BIRCH_MATCH_CALL msgbox Route110_Text_KeepAnEyeOutForRival, MSGBOX_DEFAULT closemessage - compare VAR_0x8008, 1 - call_if_eq Route110_EventScript_BirchExit1 - compare VAR_0x8008, 2 - call_if_eq Route110_EventScript_BirchExit2 - compare VAR_0x8008, 3 - call_if_eq Route110_EventScript_BirchExit3 - compare VAR_0x8008, 4 - call_if_eq Route110_EventScript_BirchExit4 + call_if_eq VAR_0x8008, 1, Route110_EventScript_BirchExit1 + call_if_eq VAR_0x8008, 2, Route110_EventScript_BirchExit2 + call_if_eq VAR_0x8008, 3, Route110_EventScript_BirchExit3 + call_if_eq VAR_0x8008, 4, Route110_EventScript_BirchExit4 removeobject LOCALID_BIRCH setvar VAR_REGISTER_BIRCH_STATE, 2 releaseall diff --git a/data/maps/Route110_SeasideCyclingRoadNorthEntrance/scripts.inc b/data/maps/Route110_SeasideCyclingRoadNorthEntrance/scripts.inc index 4bad754c4d..5eb1f3dea2 100644 --- a/data/maps/Route110_SeasideCyclingRoadNorthEntrance/scripts.inc +++ b/data/maps/Route110_SeasideCyclingRoadNorthEntrance/scripts.inc @@ -11,8 +11,7 @@ Route110_SeasideCyclingRoadNorthEntrance_EventScript_Clerk:: Route110_SeasideCyclingRoadNorthEntrance_EventScript_BikeCheck:: lockall specialvar VAR_RESULT, GetPlayerAvatarBike - compare VAR_RESULT, 0 - goto_if_eq Route110_SeasideCyclingRoadNorthEntrance_EventScript_NoBike + goto_if_eq VAR_RESULT, 0, Route110_SeasideCyclingRoadNorthEntrance_EventScript_NoBike setflag FLAG_SYS_CYCLING_ROAD setvar VAR_TEMP_1, 1 releaseall diff --git a/data/maps/Route110_SeasideCyclingRoadSouthEntrance/scripts.inc b/data/maps/Route110_SeasideCyclingRoadSouthEntrance/scripts.inc index 92b4b3e44c..df53f55ccf 100644 --- a/data/maps/Route110_SeasideCyclingRoadSouthEntrance/scripts.inc +++ b/data/maps/Route110_SeasideCyclingRoadSouthEntrance/scripts.inc @@ -3,10 +3,8 @@ Route110_SeasideCyclingRoadSouthEntrance_MapScripts:: .byte 0 Route110_SeasideCyclingRoadSouthEntrance_OnTransition: - compare VAR_CYCLING_CHALLENGE_STATE, 3 - call_if_eq Route110_SeasideCyclingRoadSouthEntrance_EventScript_RestartChallenge - compare VAR_CYCLING_CHALLENGE_STATE, 2 - call_if_eq Route110_SeasideCyclingRoadSouthEntrance_EventScript_RestartChallenge + call_if_eq VAR_CYCLING_CHALLENGE_STATE, 3, Route110_SeasideCyclingRoadSouthEntrance_EventScript_RestartChallenge + call_if_eq VAR_CYCLING_CHALLENGE_STATE, 2, Route110_SeasideCyclingRoadSouthEntrance_EventScript_RestartChallenge end Route110_SeasideCyclingRoadSouthEntrance_EventScript_RestartChallenge:: @@ -23,10 +21,8 @@ Route110_SeasideCyclingRoadSouthEntrance_EventScript_Clerk:: Route110_SeasideCyclingRoadSouthEntrance_EventScript_BikeCheck:: lockall specialvar VAR_RESULT, GetPlayerAvatarBike - compare VAR_RESULT, 2 - call_if_eq Route110_SeasideCyclingRoadSouthEntrance_EventScript_OnMachBike - compare VAR_RESULT, 0 - goto_if_eq Route110_SeasideCyclingRoadSouthEntrance_EventScript_NoBike + call_if_eq VAR_RESULT, 2, Route110_SeasideCyclingRoadSouthEntrance_EventScript_OnMachBike + goto_if_eq VAR_RESULT, 0, Route110_SeasideCyclingRoadSouthEntrance_EventScript_NoBike setflag FLAG_SYS_CYCLING_ROAD setvar VAR_TEMP_1, 1 releaseall diff --git a/data/maps/Route110_TrickHouseEnd/scripts.inc b/data/maps/Route110_TrickHouseEnd/scripts.inc index 9167cbd34a..be8f75e961 100644 --- a/data/maps/Route110_TrickHouseEnd/scripts.inc +++ b/data/maps/Route110_TrickHouseEnd/scripts.inc @@ -8,8 +8,7 @@ Route110_TrickHouseEnd_MapScripts:: .byte 0 Route110_TrickHouseEnd_OnResume: - compare VAR_TEMP_1, 1 - call_if_eq Route110_TrickHouseEnd_EventScript_SetDoorClosedMetatile + call_if_eq VAR_TEMP_1, 1, Route110_TrickHouseEnd_EventScript_SetDoorClosedMetatile end Route110_TrickHouseEnd_OnTransition: @@ -39,7 +38,7 @@ Route110_TrickHouseEnd_EventScript_CloseDoor:: end Route110_TrickHouseEnd_EventScript_SetDoorClosedMetatile:: - setmetatile 10, 1, METATILE_GenericBuilding_TrickHouse_Door_Closed, 1 + setmetatile 10, 1, METATILE_GenericBuilding_TrickHouse_Door_Closed, TRUE return Route110_TrickHouseEnd_EventScript_TrickMaster:: @@ -63,8 +62,7 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle1:: msgbox Route110_TrickHouseEnd_Text_YouHaveEarnedThisReward, MSGBOX_DEFAULT setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 giveitem ITEM_RARE_CANDY - compare VAR_RESULT, FALSE - call_if_eq Route110_TrickHouseEnd_EventScript_BagFull + call_if_eq VAR_RESULT, FALSE, Route110_TrickHouseEnd_EventScript_BagFull msgbox Route110_TrickHouseEnd_Text_MakeNewTricksToStumpYou, MSGBOX_DEFAULT closemessage call Route110_TrickHouseEnd_EventScript_TrickMasterExit @@ -76,8 +74,7 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle2:: msgbox Route110_TrickHouseEnd_Text_YouHaveEarnedThisReward, MSGBOX_DEFAULT setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 giveitem ITEM_TIMER_BALL - compare VAR_RESULT, FALSE - call_if_eq Route110_TrickHouseEnd_EventScript_BagFull + call_if_eq VAR_RESULT, FALSE, Route110_TrickHouseEnd_EventScript_BagFull msgbox Route110_TrickHouseEnd_Text_MakeNewTricksToStumpYou, MSGBOX_DEFAULT closemessage call Route110_TrickHouseEnd_EventScript_TrickMasterExit @@ -89,8 +86,7 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle3:: msgbox Route110_TrickHouseEnd_Text_YouHaveEarnedThisReward, MSGBOX_DEFAULT setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 giveitem ITEM_HARD_STONE - compare VAR_RESULT, FALSE - call_if_eq Route110_TrickHouseEnd_EventScript_BagFull + call_if_eq VAR_RESULT, FALSE, Route110_TrickHouseEnd_EventScript_BagFull msgbox Route110_TrickHouseEnd_Text_MakeNewTricksToStumpYou, MSGBOX_DEFAULT closemessage call Route110_TrickHouseEnd_EventScript_TrickMasterExit @@ -102,8 +98,7 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle4:: msgbox Route110_TrickHouseEnd_Text_YouHaveEarnedThisReward, MSGBOX_DEFAULT setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 giveitem ITEM_SMOKE_BALL - compare VAR_RESULT, FALSE - call_if_eq Route110_TrickHouseEnd_EventScript_BagFull + call_if_eq VAR_RESULT, FALSE, Route110_TrickHouseEnd_EventScript_BagFull msgbox Route110_TrickHouseEnd_Text_MakeNewTricksToStumpYou, MSGBOX_DEFAULT closemessage call Route110_TrickHouseEnd_EventScript_TrickMasterExit @@ -115,8 +110,7 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle5:: msgbox Route110_TrickHouseEnd_Text_YouHaveEarnedThisReward, MSGBOX_DEFAULT setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 giveitem ITEM_TM12 - compare VAR_RESULT, FALSE - call_if_eq Route110_TrickHouseEnd_EventScript_BagFull + call_if_eq VAR_RESULT, FALSE, Route110_TrickHouseEnd_EventScript_BagFull msgbox Route110_TrickHouseEnd_Text_MakeNewTricksToStumpYou, MSGBOX_DEFAULT closemessage call Route110_TrickHouseEnd_EventScript_TrickMasterExit @@ -128,8 +122,7 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle6:: msgbox Route110_TrickHouseEnd_Text_YouHaveEarnedThisReward, MSGBOX_DEFAULT setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 giveitem ITEM_MAGNET - compare VAR_RESULT, FALSE - call_if_eq Route110_TrickHouseEnd_EventScript_BagFull + call_if_eq VAR_RESULT, FALSE, Route110_TrickHouseEnd_EventScript_BagFull msgbox Route110_TrickHouseEnd_Text_MakeNewTricksToStumpYou, MSGBOX_DEFAULT closemessage call Route110_TrickHouseEnd_EventScript_TrickMasterExit @@ -141,8 +134,7 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle7:: msgbox Route110_TrickHouseEnd_Text_YouHaveEarnedThisReward, MSGBOX_DEFAULT setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 giveitem ITEM_PP_MAX - compare VAR_RESULT, FALSE - call_if_eq Route110_TrickHouseEnd_EventScript_BagFull + call_if_eq VAR_RESULT, FALSE, Route110_TrickHouseEnd_EventScript_BagFull msgbox Route110_TrickHouseEnd_Text_MakeNewTricksToStumpYou, MSGBOX_DEFAULT closemessage call Route110_TrickHouseEnd_EventScript_TrickMasterExit @@ -152,14 +144,10 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle7:: Route110_TrickHouseEnd_EventScript_CompletedPuzzle8:: msgbox Route110_TrickHouseEnd_Text_AllNightPolishingFloors, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_SOUTH - call_if_eq Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwaySouth - compare VAR_FACING, DIR_NORTH - call_if_eq Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwayNorth - compare VAR_FACING, DIR_WEST - call_if_eq Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwayWest - compare VAR_FACING, DIR_EAST - call_if_eq Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwayEast + call_if_eq VAR_FACING, DIR_SOUTH, Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwaySouth + call_if_eq VAR_FACING, DIR_NORTH, Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwayNorth + call_if_eq VAR_FACING, DIR_WEST, Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwayWest + call_if_eq VAR_FACING, DIR_EAST, Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwayEast delay 30 msgbox Route110_TrickHouseEnd_Text_FountainOfIdeasRunDry, MSGBOX_DEFAULT closemessage @@ -169,8 +157,7 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle8:: msgbox Route110_TrickHouseEnd_Text_DefeatedMePreferWhichTent, MSGBOX_DEFAULT setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 call Route110_TrickHouseEnd_EventScript_ChooseTent - compare VAR_RESULT, FALSE - call_if_eq Route110_TrickHouseEnd_EventScript_NoRoomForTent + call_if_eq VAR_RESULT, FALSE, Route110_TrickHouseEnd_EventScript_NoRoomForTent msgbox Route110_TrickHouseEnd_Text_LeavingOnJourney, MSGBOX_DEFAULT call Route110_TrickHouseEnd_EventScript_TrickMasterExit special ResetTrickHouseNuggetFlag @@ -214,22 +201,22 @@ Route110_TrickHouseEnd_EventScript_NoRoomForTent:: return Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwaySouth:: - applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwayNorth:: - applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwayWest:: - applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return Route110_TrickHouseEnd_EventScript_TrickMasterFaceAwayEast:: - applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return @@ -243,7 +230,7 @@ Route110_TrickHouseEnd_EventScript_TrickMasterExitTrigger:: applymovement LOCALID_TRICK_MASTER, Route110_TrickHouseEnd_Movement_TrickMasterSurprise waitmovement 0 playse SE_M_EXPLOSION - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox Route110_TrickHouseEnd_Text_YoureIgnoringMe, MSGBOX_DEFAULT closemessage diff --git a/data/maps/Route110_TrickHouseEntrance/scripts.inc b/data/maps/Route110_TrickHouseEntrance/scripts.inc index 9375f2046f..44dda8c5c1 100644 --- a/data/maps/Route110_TrickHouseEntrance/scripts.inc +++ b/data/maps/Route110_TrickHouseEntrance/scripts.inc @@ -17,18 +17,12 @@ Route110_TrickHouseEntrance_MapScripts:: Route110_TrickHouseEntrance_OnTransition: setflag FLAG_LANDMARK_TRICK_HOUSE - compare VAR_TRICK_HOUSE_ENTER_FROM_CORRIDOR, 1 - goto_if_eq Route110_TrickHouseEntrance_EventScript_EnterFromCorridor - compare VAR_TRICK_HOUSE_PRIZE_PICKUP, 1 - goto_if_eq Route110_TrickHouseEntrance_EventScript_SetReadyToGiveReward - compare VAR_TRICK_HOUSE_FOUND_TRICK_MASTER, 1 - goto_if_eq Route110_TrickHouseEntrance_EventScript_MoveTrickMasterToDoor - compare VAR_TRICK_HOUSE_ENTRANCE_STATE, 5 - call_if_eq Route110_TrickHouseEntrance_EventScript_CheckReadyForNextPuzzle - compare VAR_TRICK_HOUSE_ENTRANCE_STATE, 3 - call_if_eq Route110_TrickHouseEntrance_EventScript_CheckReadyForNextPuzzle - compare VAR_TRICK_HOUSE_ENTRANCE_STATE, 0 - call_if_eq Route110_TrickHouseEntrance_EventScript_CheckReadyForNextPuzzle + goto_if_eq VAR_TRICK_HOUSE_ENTER_FROM_CORRIDOR, 1, Route110_TrickHouseEntrance_EventScript_EnterFromCorridor + goto_if_eq VAR_TRICK_HOUSE_PRIZE_PICKUP, 1, Route110_TrickHouseEntrance_EventScript_SetReadyToGiveReward + goto_if_eq VAR_TRICK_HOUSE_FOUND_TRICK_MASTER, 1, Route110_TrickHouseEntrance_EventScript_MoveTrickMasterToDoor + call_if_eq VAR_TRICK_HOUSE_ENTRANCE_STATE, 5, Route110_TrickHouseEntrance_EventScript_CheckReadyForNextPuzzle + call_if_eq VAR_TRICK_HOUSE_ENTRANCE_STATE, 3, Route110_TrickHouseEntrance_EventScript_CheckReadyForNextPuzzle + call_if_eq VAR_TRICK_HOUSE_ENTRANCE_STATE, 0, Route110_TrickHouseEntrance_EventScript_CheckReadyForNextPuzzle switch VAR_TRICK_HOUSE_ENTRANCE_STATE case 0, Route110_TrickHouseEntrance_EventScript_ReadyBeingWatchedTrigger case 1, Route110_TrickHouseEntrance_EventScript_SetNotBeingWatched1 @@ -38,8 +32,7 @@ Route110_TrickHouseEntrance_OnTransition: Route110_TrickHouseEntrance_EventScript_SetReadyToGiveReward:: setvar VAR_TRICK_HOUSE_BEING_WATCHED_STATE, 1 - compare VAR_TRICK_HOUSE_LEVEL, 8 - goto_if_eq Route110_TrickHouseEntrance_EventScript_ReadyToGiveTentReward + goto_if_eq VAR_TRICK_HOUSE_LEVEL, 8, Route110_TrickHouseEntrance_EventScript_ReadyToGiveTentReward setvar VAR_TRICK_HOUSE_ENTRANCE_STATE, 2 end @@ -55,22 +48,14 @@ Route110_TrickHouseEntrance_EventScript_EnterFromCorridor:: Route110_TrickHouseEntrance_EventScript_CheckReadyForNextPuzzle:: setvar VAR_TRICK_HOUSE_ENTRANCE_STATE, 0 - compare VAR_TRICK_HOUSE_LEVEL, 1 - call_if_eq Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle2 - compare VAR_TRICK_HOUSE_LEVEL, 2 - call_if_eq Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle3 - compare VAR_TRICK_HOUSE_LEVEL, 3 - call_if_eq Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle4 - compare VAR_TRICK_HOUSE_LEVEL, 4 - call_if_eq Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle5 - compare VAR_TRICK_HOUSE_LEVEL, 5 - call_if_eq Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle6 - compare VAR_TRICK_HOUSE_LEVEL, 6 - call_if_eq Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle7 - compare VAR_TRICK_HOUSE_LEVEL, 7 - call_if_eq Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle8 - compare VAR_TRICK_HOUSE_LEVEL, 8 - call_if_eq Route110_TrickHouseEntrance_EventScript_FinishedPuzzles + call_if_eq VAR_TRICK_HOUSE_LEVEL, 1, Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle2 + call_if_eq VAR_TRICK_HOUSE_LEVEL, 2, Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle3 + call_if_eq VAR_TRICK_HOUSE_LEVEL, 3, Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle4 + call_if_eq VAR_TRICK_HOUSE_LEVEL, 4, Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle5 + call_if_eq VAR_TRICK_HOUSE_LEVEL, 5, Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle6 + call_if_eq VAR_TRICK_HOUSE_LEVEL, 6, Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle7 + call_if_eq VAR_TRICK_HOUSE_LEVEL, 7, Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle8 + call_if_eq VAR_TRICK_HOUSE_LEVEL, 8, Route110_TrickHouseEntrance_EventScript_FinishedPuzzles return Route110_TrickHouseEntrance_EventScript_CheckReadyForPuzzle2:: @@ -216,8 +201,7 @@ Route110_TrickHouseEntrance_OnFrame: Route110_TrickHouseEntrance_EventScript_BeginChallenge:: lockall delay 20 - compare VAR_TRICK_HOUSE_LEVEL, 0 - call_if_eq Route110_TrickHouseEntrance_EventScript_MeetTrickMaster + call_if_eq VAR_TRICK_HOUSE_LEVEL, 0, Route110_TrickHouseEntrance_EventScript_MeetTrickMaster msgbox Route110_TrickHouseEntrance_Text_ComeToChallengeTrickHouse, MSGBOX_DEFAULT closemessage delay 20 @@ -251,25 +235,17 @@ Route110_TrickHouseEntrance_EventScript_FoundTrickMaster:: waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_Delay48 waitmovement 0 - compare VAR_TRICK_HOUSE_LEVEL, 0 - call_if_eq Route110_TrickHouseEntrance_EventScript_FoundBeneathDesk - compare VAR_TRICK_HOUSE_LEVEL, 1 - call_if_eq Route110_TrickHouseEntrance_EventScript_FoundBehindTree - compare VAR_TRICK_HOUSE_LEVEL, 2 - call_if_eq Route110_TrickHouseEntrance_EventScript_FoundInDresser - compare VAR_TRICK_HOUSE_LEVEL, 3 - call_if_eq Route110_TrickHouseEntrance_EventScript_FoundBeyondWindow - compare VAR_TRICK_HOUSE_LEVEL, 4 - call_if_eq Route110_TrickHouseEntrance_EventScript_FoundInPlanter - compare VAR_TRICK_HOUSE_LEVEL, 5 - call_if_eq Route110_TrickHouseEntrance_EventScript_FoundInCupboard - compare VAR_TRICK_HOUSE_LEVEL, 6 - call_if_eq Route110_TrickHouseEntrance_EventScript_FoundBehindWindow - compare VAR_TRICK_HOUSE_LEVEL, 7 - call_if_eq Route110_TrickHouseEntrance_EventScript_FoundBeneathCushion + call_if_eq VAR_TRICK_HOUSE_LEVEL, 0, Route110_TrickHouseEntrance_EventScript_FoundBeneathDesk + call_if_eq VAR_TRICK_HOUSE_LEVEL, 1, Route110_TrickHouseEntrance_EventScript_FoundBehindTree + call_if_eq VAR_TRICK_HOUSE_LEVEL, 2, Route110_TrickHouseEntrance_EventScript_FoundInDresser + call_if_eq VAR_TRICK_HOUSE_LEVEL, 3, Route110_TrickHouseEntrance_EventScript_FoundBeyondWindow + call_if_eq VAR_TRICK_HOUSE_LEVEL, 4, Route110_TrickHouseEntrance_EventScript_FoundInPlanter + call_if_eq VAR_TRICK_HOUSE_LEVEL, 5, Route110_TrickHouseEntrance_EventScript_FoundInCupboard + call_if_eq VAR_TRICK_HOUSE_LEVEL, 6, Route110_TrickHouseEntrance_EventScript_FoundBehindWindow + call_if_eq VAR_TRICK_HOUSE_LEVEL, 7, Route110_TrickHouseEntrance_EventScript_FoundBeneathCushion closemessage setvar VAR_TRICK_HOUSE_FOUND_TRICK_MASTER, 1 - warpsilent MAP_ROUTE110_TRICK_HOUSE_ENTRANCE, 255, 6, 2 + warpsilent MAP_ROUTE110_TRICK_HOUSE_ENTRANCE, 6, 2 waitstate releaseall end @@ -343,7 +319,7 @@ Route110_TrickHouseEntrance_EventScript_StillMakingPuzzle:: applymovement LOCALID_TRICK_MASTER, Common_Movement_Delay48 waitmovement 0 msgbox Route110_TrickHouseEntrance_Text_InMidstOfDevisingNewChallenges, MSGBOX_DEFAULT - applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 releaseall end @@ -352,88 +328,67 @@ Route110_TrickHouseEntrance_EventScript_GiveReward:: applymovement LOCALID_TRICK_MASTER, Common_Movement_FacePlayer waitmovement 0 msgbox Route110_TrickHouseEntrance_Text_YoureHereToAcceptReward, MSGBOX_DEFAULT - compare VAR_TRICK_HOUSE_LEVEL, 1 - goto_if_eq Route110_TrickHouseEntrance_EventScript_GivePuzzle1Reward - compare VAR_TRICK_HOUSE_LEVEL, 2 - goto_if_eq Route110_TrickHouseEntrance_EventScript_GivePuzzle2Reward - compare VAR_TRICK_HOUSE_LEVEL, 3 - goto_if_eq Route110_TrickHouseEntrance_EventScript_GivePuzzle3Reward - compare VAR_TRICK_HOUSE_LEVEL, 4 - goto_if_eq Route110_TrickHouseEntrance_EventScript_GivePuzzle4Reward - compare VAR_TRICK_HOUSE_LEVEL, 5 - goto_if_eq Route110_TrickHouseEntrance_EventScript_GivePuzzle5Reward - compare VAR_TRICK_HOUSE_LEVEL, 6 - goto_if_eq Route110_TrickHouseEntrance_EventScript_GivePuzzle6Reward - compare VAR_TRICK_HOUSE_LEVEL, 7 - goto_if_eq Route110_TrickHouseEntrance_EventScript_GivePuzzle7Reward + goto_if_eq VAR_TRICK_HOUSE_LEVEL, 1, Route110_TrickHouseEntrance_EventScript_GivePuzzle1Reward + goto_if_eq VAR_TRICK_HOUSE_LEVEL, 2, Route110_TrickHouseEntrance_EventScript_GivePuzzle2Reward + goto_if_eq VAR_TRICK_HOUSE_LEVEL, 3, Route110_TrickHouseEntrance_EventScript_GivePuzzle3Reward + goto_if_eq VAR_TRICK_HOUSE_LEVEL, 4, Route110_TrickHouseEntrance_EventScript_GivePuzzle4Reward + goto_if_eq VAR_TRICK_HOUSE_LEVEL, 5, Route110_TrickHouseEntrance_EventScript_GivePuzzle5Reward + goto_if_eq VAR_TRICK_HOUSE_LEVEL, 6, Route110_TrickHouseEntrance_EventScript_GivePuzzle6Reward + goto_if_eq VAR_TRICK_HOUSE_LEVEL, 7, Route110_TrickHouseEntrance_EventScript_GivePuzzle7Reward end Route110_TrickHouseEntrance_EventScript_GivePuzzle1Reward:: giveitem ITEM_RARE_CANDY - compare VAR_RESULT, TRUE - goto_if_eq Route110_TrickHouseEntrance_EventScript_GotReward - compare VAR_RESULT, FALSE - call_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, TRUE, Route110_TrickHouseEntrance_EventScript_GotReward + call_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox Route110_TrickHouseEntrance_Text_DidYouNotComeToClaimReward, MSGBOX_DEFAULT releaseall end Route110_TrickHouseEntrance_EventScript_GivePuzzle2Reward:: giveitem ITEM_TIMER_BALL - compare VAR_RESULT, TRUE - goto_if_eq Route110_TrickHouseEntrance_EventScript_GotReward - compare VAR_RESULT, FALSE - call_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, TRUE, Route110_TrickHouseEntrance_EventScript_GotReward + call_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox Route110_TrickHouseEntrance_Text_DidYouNotComeToClaimReward, MSGBOX_DEFAULT releaseall end Route110_TrickHouseEntrance_EventScript_GivePuzzle3Reward:: giveitem ITEM_HARD_STONE - compare VAR_RESULT, TRUE - goto_if_eq Route110_TrickHouseEntrance_EventScript_GotReward - compare VAR_RESULT, FALSE - call_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, TRUE, Route110_TrickHouseEntrance_EventScript_GotReward + call_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox Route110_TrickHouseEntrance_Text_DidYouNotComeToClaimReward, MSGBOX_DEFAULT releaseall end Route110_TrickHouseEntrance_EventScript_GivePuzzle4Reward:: giveitem ITEM_SMOKE_BALL - compare VAR_RESULT, TRUE - goto_if_eq Route110_TrickHouseEntrance_EventScript_GotReward - compare VAR_RESULT, FALSE - call_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, TRUE, Route110_TrickHouseEntrance_EventScript_GotReward + call_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox Route110_TrickHouseEntrance_Text_DidYouNotComeToClaimReward, MSGBOX_DEFAULT releaseall end Route110_TrickHouseEntrance_EventScript_GivePuzzle5Reward:: giveitem ITEM_TM12 - compare VAR_RESULT, TRUE - goto_if_eq Route110_TrickHouseEntrance_EventScript_GotReward - compare VAR_RESULT, FALSE - call_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, TRUE, Route110_TrickHouseEntrance_EventScript_GotReward + call_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox Route110_TrickHouseEntrance_Text_DidYouNotComeToClaimReward, MSGBOX_DEFAULT releaseall end Route110_TrickHouseEntrance_EventScript_GivePuzzle6Reward:: giveitem ITEM_MAGNET - compare VAR_RESULT, TRUE - goto_if_eq Route110_TrickHouseEntrance_EventScript_GotReward - compare VAR_RESULT, FALSE - call_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, TRUE, Route110_TrickHouseEntrance_EventScript_GotReward + call_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox Route110_TrickHouseEntrance_Text_DidYouNotComeToClaimReward, MSGBOX_DEFAULT releaseall end Route110_TrickHouseEntrance_EventScript_GivePuzzle7Reward:: giveitem ITEM_PP_MAX - compare VAR_RESULT, TRUE - goto_if_eq Route110_TrickHouseEntrance_EventScript_GotReward - compare VAR_RESULT, FALSE - call_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, TRUE, Route110_TrickHouseEntrance_EventScript_GotReward + call_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox Route110_TrickHouseEntrance_Text_DidYouNotComeToClaimReward, MSGBOX_DEFAULT releaseall end @@ -441,7 +396,7 @@ Route110_TrickHouseEntrance_EventScript_GivePuzzle7Reward:: Route110_TrickHouseEntrance_EventScript_GotReward:: setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 setvar VAR_TRICK_HOUSE_ENTRANCE_STATE, 3 - applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_TRICK_MASTER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 releaseall end @@ -451,10 +406,8 @@ Route110_TrickHouseEntrance_EventScript_MechadollReward:: waitmovement 0 msgbox Route110_TrickHouseEntrance_Text_MechadollWhichTent, MSGBOX_DEFAULT call Route110_TrickHouseEntrance_EventScript_ChooseTent - compare VAR_RESULT, TRUE - goto_if_eq Route110_TrickHouseEntrance_EventScript_ReceivedTent - compare VAR_RESULT, FALSE - call_if_eq Common_EventScript_NoRoomForDecor + goto_if_eq VAR_RESULT, TRUE, Route110_TrickHouseEntrance_EventScript_ReceivedTent + call_if_eq VAR_RESULT, FALSE, Common_EventScript_NoRoomForDecor msgbox Route110_TrickHouseEntrance_Text_PCFullAgain, MSGBOX_DEFAULT releaseall end @@ -506,13 +459,12 @@ Route110_TrickHouseEntrance_EventScript_ItsAScroll:: Route110_TrickHouseEntrance_EventScript_GoInHolePrompt:: msgbox Route110_TrickHouseEntrance_Text_GoInHoleBehindScroll, MSGBOX_YESNO closemessage - compare VAR_RESULT, YES - goto_if_eq Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom + goto_if_eq VAR_RESULT, YES, Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom releaseall end Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom:: - setmetatile 5, 1, METATILE_GenericBuilding_TrickHouse_Stairs_Down, 0 + setmetatile 5, 1, METATILE_GenericBuilding_TrickHouse_Stairs_Down, FALSE special DrawWholeMapView delay 20 applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkUp @@ -535,49 +487,49 @@ Route110_TrickHouseEntrance_Movement_EnterRoom: step_end Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom1:: - warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE1, 255, 0, 21 + warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE1, 0, 21 waitstate releaseall end Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom2:: - warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE2, 255, 0, 21 + warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE2, 0, 21 waitstate releaseall end Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom3:: - warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE3, 255, 0, 21 + warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE3, 0, 21 waitstate releaseall end Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom4:: - warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE4, 255, 0, 21 + warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE4, 0, 21 waitstate releaseall end Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom5:: - warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE5, 255, 0, 21 + warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE5, 0, 21 waitstate releaseall end Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom6:: - warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE6, 255, 0, 21 + warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE6, 0, 21 waitstate releaseall end Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom7:: - warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE7, 255, 0, 21 + warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE7, 0, 21 waitstate releaseall end Route110_TrickHouseEntrance_EventScript_EnterPuzzleRoom8:: - warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE8, 255, 0, 21 + warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE8, 0, 21 waitstate releaseall end @@ -588,8 +540,7 @@ Route110_TrickHouseEntrance_EventScript_LeftOnJourneyNote:: end Route110_TrickHouseEntrance_EventScript_CheckLevelForMessage:: - compare VAR_TRICK_HOUSE_LEVEL, 8 - goto_if_eq Route110_TrickHouseEntrance_EventScript_LeftOnJourneyNote2 + goto_if_eq VAR_TRICK_HOUSE_LEVEL, 8, Route110_TrickHouseEntrance_EventScript_LeftOnJourneyNote2 msgbox Route110_TrickHouseEntrance_Text_ItsAScroll, MSGBOX_DEFAULT releaseall end @@ -613,89 +564,81 @@ Route110_TrickHousePuzzle_EventScript_Door:: end Route110_TrickHousePuzzle1_EventScript_Door:: - compare VAR_TRICK_HOUSE_PUZZLE_1_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle_EventScript_DoorLocked + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_1_STATE, 0, Route110_TrickHousePuzzle_EventScript_DoorLocked msgbox Route110_TrickHousePuzzle1_Text_WroteSecretCodeLockOpened, MSGBOX_DEFAULT playse SE_PIN setvar VAR_TRICK_HOUSE_PUZZLE_1_STATE, 2 - setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, 0 + setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, FALSE special DrawWholeMapView releaseall end Route110_TrickHousePuzzle2_EventScript_Door:: - compare VAR_TRICK_HOUSE_PUZZLE_2_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle_EventScript_DoorLocked + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_2_STATE, 0, Route110_TrickHousePuzzle_EventScript_DoorLocked msgbox Route110_TrickHousePuzzle2_Text_WroteSecretCodeLockOpened, MSGBOX_DEFAULT playse SE_PIN setvar VAR_TRICK_HOUSE_PUZZLE_2_STATE, 2 - setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, 0 + setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, FALSE special DrawWholeMapView releaseall end Route110_TrickHousePuzzle3_EventScript_Door:: - compare VAR_TRICK_HOUSE_PUZZLE_3_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle_EventScript_DoorLocked + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_3_STATE, 0, Route110_TrickHousePuzzle_EventScript_DoorLocked msgbox Route110_TrickHousePuzzle3_Text_WroteSecretCodeLockOpened, MSGBOX_DEFAULT playse SE_PIN setvar VAR_TRICK_HOUSE_PUZZLE_3_STATE, 2 - setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, 0 + setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, FALSE special DrawWholeMapView releaseall end Route110_TrickHousePuzzle4_EventScript_Door:: - compare VAR_TRICK_HOUSE_PUZZLE_4_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle_EventScript_DoorLocked + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_4_STATE, 0, Route110_TrickHousePuzzle_EventScript_DoorLocked msgbox Route110_TrickHousePuzzle4_Text_WroteSecretCodeLockOpened, MSGBOX_DEFAULT playse SE_PIN setvar VAR_TRICK_HOUSE_PUZZLE_4_STATE, 2 - setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, 0 + setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, FALSE special DrawWholeMapView releaseall end Route110_TrickHousePuzzle5_EventScript_Door:: - compare VAR_TRICK_HOUSE_PUZZLE_5_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle_EventScript_DoorLocked + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_5_STATE, 0, Route110_TrickHousePuzzle_EventScript_DoorLocked msgbox Route110_TrickHousePuzzle5_Text_WroteSecretCodeLockOpened, MSGBOX_DEFAULT playse SE_PIN setvar VAR_TRICK_HOUSE_PUZZLE_5_STATE, 2 - setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, 0 + setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, FALSE special DrawWholeMapView releaseall end Route110_TrickHousePuzzle6_EventScript_Door:: - compare VAR_TRICK_HOUSE_PUZZLE_6_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle_EventScript_DoorLocked + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_6_STATE, 0, Route110_TrickHousePuzzle_EventScript_DoorLocked msgbox Route110_TrickHousePuzzle6_Text_WroteSecretCodeLockOpened, MSGBOX_DEFAULT playse SE_PIN setvar VAR_TRICK_HOUSE_PUZZLE_6_STATE, 2 - setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, 0 + setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, FALSE special DrawWholeMapView releaseall end Route110_TrickHousePuzzle7_EventScript_Door:: - compare VAR_TRICK_HOUSE_PUZZLE_7_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle_EventScript_DoorLocked + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_7_STATE, 0, Route110_TrickHousePuzzle_EventScript_DoorLocked msgbox Route110_TrickHousePuzzle7_EventScript_WroteSecretCodeLockOpened, MSGBOX_DEFAULT playse SE_PIN setvar VAR_TRICK_HOUSE_PUZZLE_7_STATE, 2 - setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, 0 + setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, FALSE special DrawWholeMapView releaseall end Route110_TrickHousePuzzle8_EventScript_Door:: - compare VAR_TRICK_HOUSE_PUZZLE_8_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle_EventScript_DoorLocked + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_8_STATE, 0, Route110_TrickHousePuzzle_EventScript_DoorLocked msgbox Route110_TrickHousePuzzle8_EventScript_WroteSecretCodeLockOpened, MSGBOX_DEFAULT playse SE_PIN setvar VAR_TRICK_HOUSE_PUZZLE_8_STATE, 2 - setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, 0 + setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, FALSE special DrawWholeMapView releaseall end @@ -722,12 +665,9 @@ Route110_TrickHouseEntrance_EventScript_TrickMasterHiding:: lockall msgbox Route110_TrickHouseEntrance_Text_YoureBeingWatched, MSGBOX_DEFAULT releaseall - compare VAR_TRICK_HOUSE_LEVEL, 0 - call_if_eq Route110_TrickHouseEntrance_EventScript_DoHidingSpotSparkle1 - compare VAR_TRICK_HOUSE_LEVEL, 1 - call_if_eq Route110_TrickHouseEntrance_EventScript_DoHidingSpotSparkle2 - compare VAR_TRICK_HOUSE_LEVEL, 2 - call_if_eq Route110_TrickHouseEntrance_EventScript_DoHidingSpotSparkle3 + call_if_eq VAR_TRICK_HOUSE_LEVEL, 0, Route110_TrickHouseEntrance_EventScript_DoHidingSpotSparkle1 + call_if_eq VAR_TRICK_HOUSE_LEVEL, 1, Route110_TrickHouseEntrance_EventScript_DoHidingSpotSparkle2 + call_if_eq VAR_TRICK_HOUSE_LEVEL, 2, Route110_TrickHouseEntrance_EventScript_DoHidingSpotSparkle3 setvar VAR_TRICK_HOUSE_BEING_WATCHED_STATE, 1 end diff --git a/data/maps/Route110_TrickHousePuzzle1/scripts.inc b/data/maps/Route110_TrickHousePuzzle1/scripts.inc index 6fc6adcd56..2ed769167a 100644 --- a/data/maps/Route110_TrickHousePuzzle1/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle1/scripts.inc @@ -3,18 +3,16 @@ Route110_TrickHousePuzzle1_MapScripts:: .byte 0 Route110_TrickHousePuzzle1_OnLoad: - compare VAR_TRICK_HOUSE_PUZZLE_1_STATE, 2 - goto_if_eq Route110_TrickHousePuzzle1_EventScript_OpenDoor + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_1_STATE, 2, Route110_TrickHousePuzzle1_EventScript_OpenDoor end Route110_TrickHousePuzzle1_EventScript_OpenDoor:: - setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, 0 + setmetatile 13, 1, METATILE_TrickHousePuzzle_Stairs_Down, FALSE end Route110_TrickHousePuzzle1_EventScript_Scroll:: lockall - compare VAR_TRICK_HOUSE_PUZZLE_1_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle1_EventScript_FoundScroll + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_1_STATE, 0, Route110_TrickHousePuzzle1_EventScript_FoundScroll goto Route110_TrickHousePuzzle_EventScript_ReadScrollAgain end diff --git a/data/maps/Route110_TrickHousePuzzle2/scripts.inc b/data/maps/Route110_TrickHousePuzzle2/scripts.inc index a0222733a9..012a62d93d 100644 --- a/data/maps/Route110_TrickHousePuzzle2/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle2/scripts.inc @@ -4,14 +4,10 @@ Route110_TrickHousePuzzle2_MapScripts:: .byte 0 Route110_TrickHousePuzzle2_OnResume: - compare VAR_TEMP_1, 1 - call_if_eq Route110_TrickHousePuzzle2_EventScript_PressButton1 - compare VAR_TEMP_2, 1 - call_if_eq Route110_TrickHousePuzzle2_EventScript_PressButton2 - compare VAR_TEMP_3, 1 - call_if_eq Route110_TrickHousePuzzle2_EventScript_PressButton3 - compare VAR_TEMP_4, 1 - call_if_eq Route110_TrickHousePuzzle2_EventScript_PressButton4 + call_if_eq VAR_TEMP_1, 1, Route110_TrickHousePuzzle2_EventScript_PressButton1 + call_if_eq VAR_TEMP_2, 1, Route110_TrickHousePuzzle2_EventScript_PressButton2 + call_if_eq VAR_TEMP_3, 1, Route110_TrickHousePuzzle2_EventScript_PressButton3 + call_if_eq VAR_TEMP_4, 1, Route110_TrickHousePuzzle2_EventScript_PressButton4 end Route110_TrickHousePuzzle2_OnTransition: @@ -23,8 +19,7 @@ Route110_TrickHousePuzzle2_OnTransition: Route110_TrickHousePuzzle2_EventScript_Scroll:: lockall - compare VAR_TRICK_HOUSE_PUZZLE_2_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle2_EventScript_FoundScroll + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_2_STATE, 0, Route110_TrickHousePuzzle2_EventScript_FoundScroll goto Route110_TrickHousePuzzle_EventScript_ReadScrollAgain end @@ -70,23 +65,23 @@ Route110_TrickHousePuzzle2_EventScript_Button4:: end Route110_TrickHousePuzzle2_EventScript_PressButton1:: - setmetatile 11, 12, METATILE_TrickHousePuzzle_Button_Pressed, 0 - setmetatile 1, 13, METATILE_TrickHousePuzzle_Door_Shuttered, 0 + setmetatile 11, 12, METATILE_TrickHousePuzzle_Button_Pressed, FALSE + setmetatile 1, 13, METATILE_TrickHousePuzzle_Door_Shuttered, FALSE return Route110_TrickHousePuzzle2_EventScript_PressButton2:: - setmetatile 0, 4, METATILE_TrickHousePuzzle_Button_Pressed, 0 - setmetatile 5, 6, METATILE_TrickHousePuzzle_Door_Shuttered, 0 + setmetatile 0, 4, METATILE_TrickHousePuzzle_Button_Pressed, FALSE + setmetatile 5, 6, METATILE_TrickHousePuzzle_Door_Shuttered, FALSE return Route110_TrickHousePuzzle2_EventScript_PressButton3:: - setmetatile 14, 5, METATILE_TrickHousePuzzle_Button_Pressed, 0 - setmetatile 7, 15, METATILE_TrickHousePuzzle_Door_Shuttered, 0 + setmetatile 14, 5, METATILE_TrickHousePuzzle_Button_Pressed, FALSE + setmetatile 7, 15, METATILE_TrickHousePuzzle_Door_Shuttered, FALSE return Route110_TrickHousePuzzle2_EventScript_PressButton4:: - setmetatile 7, 11, METATILE_TrickHousePuzzle_Button_Pressed, 0 - setmetatile 14, 12, METATILE_TrickHousePuzzle_Door_Shuttered, 0 + setmetatile 7, 11, METATILE_TrickHousePuzzle_Button_Pressed, FALSE + setmetatile 14, 12, METATILE_TrickHousePuzzle_Door_Shuttered, FALSE return Route110_TrickHousePuzzle2_EventScript_Ted:: diff --git a/data/maps/Route110_TrickHousePuzzle3/scripts.inc b/data/maps/Route110_TrickHousePuzzle3/scripts.inc index 4e706268c0..1831639b18 100644 --- a/data/maps/Route110_TrickHousePuzzle3/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle3/scripts.inc @@ -5,10 +5,8 @@ Route110_TrickHousePuzzle3_MapScripts:: Route110_TrickHousePuzzle3_OnResume: call Route110_TrickHousePuzzle3_EventScript_UpdateButtonMetatiles - compare VAR_TEMP_9, 0 - call_if_eq Route110_TrickHousePuzzle3_EventScript_SetDoorsState0 - compare VAR_TEMP_9, 1 - call_if_eq Route110_TrickHousePuzzle3_EventScript_SetDoorsState1 + call_if_eq VAR_TEMP_9, 0, Route110_TrickHousePuzzle3_EventScript_SetDoorsState0 + call_if_eq VAR_TEMP_9, 1, Route110_TrickHousePuzzle3_EventScript_SetDoorsState1 end Route110_TrickHousePuzzle3_OnTransition: @@ -21,188 +19,184 @@ Route110_TrickHousePuzzle3_OnTransition: end Route110_TrickHousePuzzle3_EventScript_UpdateButtonMetatiles:: - setmetatile 4, 14, METATILE_TrickHousePuzzle_Button_Up, 0 - setmetatile 3, 11, METATILE_TrickHousePuzzle_Button_Up, 0 - setmetatile 12, 5, METATILE_TrickHousePuzzle_Button_Up, 0 - setmetatile 8, 2, METATILE_TrickHousePuzzle_Button_Up, 0 - compare VAR_TEMP_8, 1 - call_if_eq Route110_TrickHousePuzzle3_EventScript_PressedButton1Metatile - compare VAR_TEMP_8, 2 - call_if_eq Route110_TrickHousePuzzle3_EventScript_PressedButton2Metatile - compare VAR_TEMP_8, 3 - call_if_eq Route110_TrickHousePuzzle3_EventScript_PressedButton3Metatile - compare VAR_TEMP_8, 4 - call_if_eq Route110_TrickHousePuzzle3_EventScript_PressedButton4Metatile + setmetatile 4, 14, METATILE_TrickHousePuzzle_Button_Up, FALSE + setmetatile 3, 11, METATILE_TrickHousePuzzle_Button_Up, FALSE + setmetatile 12, 5, METATILE_TrickHousePuzzle_Button_Up, FALSE + setmetatile 8, 2, METATILE_TrickHousePuzzle_Button_Up, FALSE + call_if_eq VAR_TEMP_8, 1, Route110_TrickHousePuzzle3_EventScript_PressedButton1Metatile + call_if_eq VAR_TEMP_8, 2, Route110_TrickHousePuzzle3_EventScript_PressedButton2Metatile + call_if_eq VAR_TEMP_8, 3, Route110_TrickHousePuzzle3_EventScript_PressedButton3Metatile + call_if_eq VAR_TEMP_8, 4, Route110_TrickHousePuzzle3_EventScript_PressedButton4Metatile return Route110_TrickHousePuzzle3_EventScript_PressedButton1Metatile:: - setmetatile 4, 14, METATILE_TrickHousePuzzle_Button_Pressed, 0 + setmetatile 4, 14, METATILE_TrickHousePuzzle_Button_Pressed, FALSE return Route110_TrickHousePuzzle3_EventScript_PressedButton2Metatile:: - setmetatile 3, 11, METATILE_TrickHousePuzzle_Button_Pressed, 0 + setmetatile 3, 11, METATILE_TrickHousePuzzle_Button_Pressed, FALSE return Route110_TrickHousePuzzle3_EventScript_PressedButton3Metatile:: - setmetatile 12, 5, METATILE_TrickHousePuzzle_Button_Pressed, 0 + setmetatile 12, 5, METATILE_TrickHousePuzzle_Button_Pressed, FALSE return Route110_TrickHousePuzzle3_EventScript_PressedButton4Metatile:: - setmetatile 8, 2, METATILE_TrickHousePuzzle_Button_Pressed, 0 + setmetatile 8, 2, METATILE_TrickHousePuzzle_Button_Pressed, FALSE return Route110_TrickHousePuzzle3_EventScript_SetDoorsState0:: - setmetatile 1, 6, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0, 0 - setmetatile 2, 6, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1, 0 - setmetatile 1, 7, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2, 0 - setmetatile 2, 7, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3, 0 - setmetatile 1, 9, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0, 0 - setmetatile 2, 9, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1, 0 - setmetatile 1, 10, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2, 0 - setmetatile 2, 10, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3, 0 - setmetatile 4, 15, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0, 0 - setmetatile 5, 15, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1, 0 - setmetatile 4, 16, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2, 0 - setmetatile 5, 16, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3, 0 - setmetatile 13, 9, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0, 0 - setmetatile 14, 9, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1, 0 - setmetatile 13, 10, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2, 0 - setmetatile 14, 10, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3, 0 - setmetatile 13, 15, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0, 0 - setmetatile 14, 15, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1, 0 - setmetatile 13, 16, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2, 0 - setmetatile 14, 16, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3, 0 - setmetatile 3, 7, METATILE_TrickHousePuzzle_BlueDoorV_Retracted, 1 - setmetatile 3, 8, METATILE_TrickHousePuzzle_Floor_ShadowTop, 0 - setmetatile 3, 13, METATILE_TrickHousePuzzle_BlueDoorV_Retracted, 1 - setmetatile 3, 14, METATILE_TrickHousePuzzle_Floor_ShadowTop, 0 - setmetatile 6, 4, METATILE_TrickHousePuzzle_BlueDoorV_Retracted, 1 - setmetatile 6, 5, METATILE_TrickHousePuzzle_Floor_ShadowTop, 0 - setmetatile 9, 16, METATILE_TrickHousePuzzle_BlueDoorV_Retracted, 1 - setmetatile 9, 17, METATILE_TrickHousePuzzle_Floor_ShadowTop, 0 - setmetatile 12, 7, METATILE_TrickHousePuzzle_BlueDoorV_Retracted, 1 - setmetatile 12, 8, METATILE_TrickHousePuzzle_Floor_ShadowTop, 0 - setmetatile 1, 3, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, 0 - setmetatile 2, 3, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, 0 - setmetatile 1, 4, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, 1 - setmetatile 2, 4, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, 1 - setmetatile 1, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, 0 - setmetatile 2, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, 0 - setmetatile 1, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, 1 - setmetatile 2, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, 1 - setmetatile 4, 6, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, 0 - setmetatile 5, 6, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, 0 - setmetatile 4, 7, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, 1 - setmetatile 5, 7, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, 1 - setmetatile 4, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, 0 - setmetatile 5, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, 0 - setmetatile 4, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, 1 - setmetatile 5, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, 1 - setmetatile 4, 18, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, 0 - setmetatile 5, 18, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, 0 - setmetatile 4, 19, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, 1 - setmetatile 5, 19, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, 1 - setmetatile 7, 9, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, 0 - setmetatile 8, 9, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, 0 - setmetatile 7, 10, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, 1 - setmetatile 8, 10, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, 1 - setmetatile 10, 6, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, 0 - setmetatile 11, 6, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, 0 - setmetatile 10, 7, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, 1 - setmetatile 11, 7, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, 1 - setmetatile 10, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, 0 - setmetatile 11, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, 0 - setmetatile 10, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, 1 - setmetatile 11, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, 1 - setmetatile 10, 18, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, 0 - setmetatile 11, 18, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, 0 - setmetatile 10, 19, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, 1 - setmetatile 11, 19, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, 1 - setmetatile 13, 3, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, 0 - setmetatile 14, 3, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, 0 - setmetatile 13, 4, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, 1 - setmetatile 14, 4, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, 1 - setmetatile 3, 16, METATILE_TrickHousePuzzle_RedDoorV_Open0, 1 - setmetatile 3, 17, METATILE_TrickHousePuzzle_RedDoorV_Open1, 1 - setmetatile 9, 4, METATILE_TrickHousePuzzle_RedDoorV_Open0, 1 - setmetatile 9, 5, METATILE_TrickHousePuzzle_RedDoorV_Open1, 1 + setmetatile 1, 6, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0, FALSE + setmetatile 2, 6, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1, FALSE + setmetatile 1, 7, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2, FALSE + setmetatile 2, 7, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3, FALSE + setmetatile 1, 9, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0, FALSE + setmetatile 2, 9, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1, FALSE + setmetatile 1, 10, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2, FALSE + setmetatile 2, 10, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3, FALSE + setmetatile 4, 15, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0, FALSE + setmetatile 5, 15, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1, FALSE + setmetatile 4, 16, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2, FALSE + setmetatile 5, 16, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3, FALSE + setmetatile 13, 9, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0, FALSE + setmetatile 14, 9, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1, FALSE + setmetatile 13, 10, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2, FALSE + setmetatile 14, 10, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3, FALSE + setmetatile 13, 15, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0, FALSE + setmetatile 14, 15, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1, FALSE + setmetatile 13, 16, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2, FALSE + setmetatile 14, 16, METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3, FALSE + setmetatile 3, 7, METATILE_TrickHousePuzzle_BlueDoorV_Retracted, TRUE + setmetatile 3, 8, METATILE_TrickHousePuzzle_Floor_ShadowTop, FALSE + setmetatile 3, 13, METATILE_TrickHousePuzzle_BlueDoorV_Retracted, TRUE + setmetatile 3, 14, METATILE_TrickHousePuzzle_Floor_ShadowTop, FALSE + setmetatile 6, 4, METATILE_TrickHousePuzzle_BlueDoorV_Retracted, TRUE + setmetatile 6, 5, METATILE_TrickHousePuzzle_Floor_ShadowTop, FALSE + setmetatile 9, 16, METATILE_TrickHousePuzzle_BlueDoorV_Retracted, TRUE + setmetatile 9, 17, METATILE_TrickHousePuzzle_Floor_ShadowTop, FALSE + setmetatile 12, 7, METATILE_TrickHousePuzzle_BlueDoorV_Retracted, TRUE + setmetatile 12, 8, METATILE_TrickHousePuzzle_Floor_ShadowTop, FALSE + setmetatile 1, 3, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, FALSE + setmetatile 2, 3, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, FALSE + setmetatile 1, 4, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, TRUE + setmetatile 2, 4, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, TRUE + setmetatile 1, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, FALSE + setmetatile 2, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, FALSE + setmetatile 1, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, TRUE + setmetatile 2, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, TRUE + setmetatile 4, 6, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, FALSE + setmetatile 5, 6, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, FALSE + setmetatile 4, 7, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, TRUE + setmetatile 5, 7, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, TRUE + setmetatile 4, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, FALSE + setmetatile 5, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, FALSE + setmetatile 4, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, TRUE + setmetatile 5, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, TRUE + setmetatile 4, 18, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, FALSE + setmetatile 5, 18, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, FALSE + setmetatile 4, 19, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, TRUE + setmetatile 5, 19, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, TRUE + setmetatile 7, 9, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, FALSE + setmetatile 8, 9, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, FALSE + setmetatile 7, 10, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, TRUE + setmetatile 8, 10, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, TRUE + setmetatile 10, 6, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, FALSE + setmetatile 11, 6, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, FALSE + setmetatile 10, 7, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, TRUE + setmetatile 11, 7, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, TRUE + setmetatile 10, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, FALSE + setmetatile 11, 12, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, FALSE + setmetatile 10, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, TRUE + setmetatile 11, 13, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, TRUE + setmetatile 10, 18, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, FALSE + setmetatile 11, 18, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, FALSE + setmetatile 10, 19, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, TRUE + setmetatile 11, 19, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, TRUE + setmetatile 13, 3, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0, FALSE + setmetatile 14, 3, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1, FALSE + setmetatile 13, 4, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2, TRUE + setmetatile 14, 4, METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3, TRUE + setmetatile 3, 16, METATILE_TrickHousePuzzle_RedDoorV_Open0, TRUE + setmetatile 3, 17, METATILE_TrickHousePuzzle_RedDoorV_Open1, TRUE + setmetatile 9, 4, METATILE_TrickHousePuzzle_RedDoorV_Open0, TRUE + setmetatile 9, 5, METATILE_TrickHousePuzzle_RedDoorV_Open1, TRUE return Route110_TrickHousePuzzle3_EventScript_SetDoorsState1:: - setmetatile 1, 6, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0, 0 - setmetatile 2, 6, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1, 0 - setmetatile 1, 7, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2, 1 - setmetatile 2, 7, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3, 1 - setmetatile 1, 9, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0, 0 - setmetatile 2, 9, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1, 0 - setmetatile 1, 10, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2, 1 - setmetatile 2, 10, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3, 1 - setmetatile 4, 15, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0, 0 - setmetatile 5, 15, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1, 0 - setmetatile 4, 16, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2, 1 - setmetatile 5, 16, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3, 1 - setmetatile 13, 9, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0, 0 - setmetatile 14, 9, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1, 0 - setmetatile 13, 10, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2, 1 - setmetatile 14, 10, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3, 1 - setmetatile 13, 15, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0, 0 - setmetatile 14, 15, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1, 0 - setmetatile 13, 16, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2, 1 - setmetatile 14, 16, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3, 1 - setmetatile 3, 7, METATILE_TrickHousePuzzle_BlueDoorV_Open0, 1 - setmetatile 3, 8, METATILE_TrickHousePuzzle_BlueDoorV_Open1, 1 - setmetatile 3, 13, METATILE_TrickHousePuzzle_BlueDoorV_Open0, 1 - setmetatile 3, 14, METATILE_TrickHousePuzzle_BlueDoorV_Open1, 1 - setmetatile 6, 4, METATILE_TrickHousePuzzle_BlueDoorV_Open0, 1 - setmetatile 6, 5, METATILE_TrickHousePuzzle_BlueDoorV_Open1, 1 - setmetatile 9, 16, METATILE_TrickHousePuzzle_BlueDoorV_Open0, 1 - setmetatile 9, 17, METATILE_TrickHousePuzzle_BlueDoorV_Open1, 1 - setmetatile 12, 7, METATILE_TrickHousePuzzle_BlueDoorV_Open0, 1 - setmetatile 12, 8, METATILE_TrickHousePuzzle_BlueDoorV_Open1, 1 - setmetatile 1, 3, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, 0 - setmetatile 2, 3, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, 0 - setmetatile 1, 4, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, 0 - setmetatile 2, 4, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, 0 - setmetatile 1, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, 0 - setmetatile 2, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, 0 - setmetatile 1, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, 0 - setmetatile 2, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, 0 - setmetatile 4, 6, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, 0 - setmetatile 5, 6, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, 0 - setmetatile 4, 7, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, 0 - setmetatile 5, 7, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, 0 - setmetatile 4, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, 0 - setmetatile 5, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, 0 - setmetatile 4, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, 0 - setmetatile 5, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, 0 - setmetatile 4, 18, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, 0 - setmetatile 5, 18, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, 0 - setmetatile 4, 19, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, 0 - setmetatile 5, 19, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, 0 - setmetatile 7, 9, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, 0 - setmetatile 8, 9, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, 0 - setmetatile 7, 10, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, 0 - setmetatile 8, 10, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, 0 - setmetatile 10, 6, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, 0 - setmetatile 11, 6, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, 0 - setmetatile 10, 7, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, 0 - setmetatile 11, 7, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, 0 - setmetatile 10, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, 0 - setmetatile 11, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, 0 - setmetatile 10, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, 0 - setmetatile 11, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, 0 - setmetatile 10, 18, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, 0 - setmetatile 11, 18, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, 0 - setmetatile 10, 19, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, 0 - setmetatile 11, 19, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, 0 - setmetatile 13, 3, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, 0 - setmetatile 14, 3, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, 0 - setmetatile 13, 4, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, 0 - setmetatile 14, 4, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, 0 - setmetatile 3, 16, METATILE_TrickHousePuzzle_RedDoorV_Retracted, 1 - setmetatile 3, 17, METATILE_TrickHousePuzzle_Floor_ShadowTop_Alt, 0 - setmetatile 9, 4, METATILE_TrickHousePuzzle_RedDoorV_Retracted, 1 - setmetatile 9, 5, METATILE_TrickHousePuzzle_Floor_ShadowTop_Alt, 0 + setmetatile 1, 6, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0, FALSE + setmetatile 2, 6, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1, FALSE + setmetatile 1, 7, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2, TRUE + setmetatile 2, 7, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3, TRUE + setmetatile 1, 9, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0, FALSE + setmetatile 2, 9, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1, FALSE + setmetatile 1, 10, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2, TRUE + setmetatile 2, 10, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3, TRUE + setmetatile 4, 15, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0, FALSE + setmetatile 5, 15, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1, FALSE + setmetatile 4, 16, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2, TRUE + setmetatile 5, 16, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3, TRUE + setmetatile 13, 9, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0, FALSE + setmetatile 14, 9, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1, FALSE + setmetatile 13, 10, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2, TRUE + setmetatile 14, 10, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3, TRUE + setmetatile 13, 15, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0, FALSE + setmetatile 14, 15, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1, FALSE + setmetatile 13, 16, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2, TRUE + setmetatile 14, 16, METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3, TRUE + setmetatile 3, 7, METATILE_TrickHousePuzzle_BlueDoorV_Open0, TRUE + setmetatile 3, 8, METATILE_TrickHousePuzzle_BlueDoorV_Open1, TRUE + setmetatile 3, 13, METATILE_TrickHousePuzzle_BlueDoorV_Open0, TRUE + setmetatile 3, 14, METATILE_TrickHousePuzzle_BlueDoorV_Open1, TRUE + setmetatile 6, 4, METATILE_TrickHousePuzzle_BlueDoorV_Open0, TRUE + setmetatile 6, 5, METATILE_TrickHousePuzzle_BlueDoorV_Open1, TRUE + setmetatile 9, 16, METATILE_TrickHousePuzzle_BlueDoorV_Open0, TRUE + setmetatile 9, 17, METATILE_TrickHousePuzzle_BlueDoorV_Open1, TRUE + setmetatile 12, 7, METATILE_TrickHousePuzzle_BlueDoorV_Open0, TRUE + setmetatile 12, 8, METATILE_TrickHousePuzzle_BlueDoorV_Open1, TRUE + setmetatile 1, 3, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, FALSE + setmetatile 2, 3, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, FALSE + setmetatile 1, 4, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, FALSE + setmetatile 2, 4, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, FALSE + setmetatile 1, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, FALSE + setmetatile 2, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, FALSE + setmetatile 1, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, FALSE + setmetatile 2, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, FALSE + setmetatile 4, 6, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, FALSE + setmetatile 5, 6, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, FALSE + setmetatile 4, 7, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, FALSE + setmetatile 5, 7, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, FALSE + setmetatile 4, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, FALSE + setmetatile 5, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, FALSE + setmetatile 4, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, FALSE + setmetatile 5, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, FALSE + setmetatile 4, 18, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, FALSE + setmetatile 5, 18, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, FALSE + setmetatile 4, 19, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, FALSE + setmetatile 5, 19, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, FALSE + setmetatile 7, 9, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, FALSE + setmetatile 8, 9, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, FALSE + setmetatile 7, 10, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, FALSE + setmetatile 8, 10, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, FALSE + setmetatile 10, 6, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, FALSE + setmetatile 11, 6, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, FALSE + setmetatile 10, 7, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, FALSE + setmetatile 11, 7, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, FALSE + setmetatile 10, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, FALSE + setmetatile 11, 12, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, FALSE + setmetatile 10, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, FALSE + setmetatile 11, 13, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, FALSE + setmetatile 10, 18, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, FALSE + setmetatile 11, 18, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, FALSE + setmetatile 10, 19, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, FALSE + setmetatile 11, 19, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, FALSE + setmetatile 13, 3, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0, FALSE + setmetatile 14, 3, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1, FALSE + setmetatile 13, 4, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2, FALSE + setmetatile 14, 4, METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3, FALSE + setmetatile 3, 16, METATILE_TrickHousePuzzle_RedDoorV_Retracted, TRUE + setmetatile 3, 17, METATILE_TrickHousePuzzle_Floor_ShadowTop_Alt, FALSE + setmetatile 9, 4, METATILE_TrickHousePuzzle_RedDoorV_Retracted, TRUE + setmetatile 9, 5, METATILE_TrickHousePuzzle_Floor_ShadowTop_Alt, FALSE return Route110_TrickHousePuzzle3_EventScript_Button1:: @@ -241,14 +235,10 @@ Route110_TrickHousePuzzle3_EventScript_SetButton:: setvar VAR_TEMP_2, 0 setvar VAR_TEMP_3, 0 setvar VAR_TEMP_4, 0 - compare VAR_TEMP_8, 1 - call_if_eq Route110_TrickHousePuzzle3_EventScript_SetButton1 - compare VAR_TEMP_8, 2 - call_if_eq Route110_TrickHousePuzzle3_EventScript_SetButton2 - compare VAR_TEMP_8, 3 - call_if_eq Route110_TrickHousePuzzle3_EventScript_SetButton3 - compare VAR_TEMP_8, 4 - call_if_eq Route110_TrickHousePuzzle3_EventScript_SetButton4 + call_if_eq VAR_TEMP_8, 1, Route110_TrickHousePuzzle3_EventScript_SetButton1 + call_if_eq VAR_TEMP_8, 2, Route110_TrickHousePuzzle3_EventScript_SetButton2 + call_if_eq VAR_TEMP_8, 3, Route110_TrickHousePuzzle3_EventScript_SetButton3 + call_if_eq VAR_TEMP_8, 4, Route110_TrickHousePuzzle3_EventScript_SetButton4 return Route110_TrickHousePuzzle3_EventScript_SetButton1:: @@ -268,15 +258,11 @@ Route110_TrickHousePuzzle3_EventScript_SetButton4:: return Route110_TrickHousePuzzle3_EventScript_AlternateDoors:: - compare VAR_TEMP_9, 1 - call_if_eq Route110_TrickHousePuzzle3_EventScript_SetDoorsState0 - compare VAR_TEMP_9, 0 - call_if_eq Route110_TrickHousePuzzle3_EventScript_SetDoorsState1 + call_if_eq VAR_TEMP_9, 1, Route110_TrickHousePuzzle3_EventScript_SetDoorsState0 + call_if_eq VAR_TEMP_9, 0, Route110_TrickHousePuzzle3_EventScript_SetDoorsState1 special DrawWholeMapView - compare VAR_TEMP_9, 1 - goto_if_eq Route110_TrickHousePuzzle3_EventScript_ClearAltDoorState - compare VAR_TEMP_9, 0 - goto_if_eq Route110_TrickHousePuzzle3_EventScript_SetAltDoorState + goto_if_eq VAR_TEMP_9, 1, Route110_TrickHousePuzzle3_EventScript_ClearAltDoorState + goto_if_eq VAR_TEMP_9, 0, Route110_TrickHousePuzzle3_EventScript_SetAltDoorState end Route110_TrickHousePuzzle3_EventScript_ClearAltDoorState:: @@ -291,8 +277,7 @@ Route110_TrickHousePuzzle3_EventScript_SetAltDoorState:: Route110_TrickHousePuzzle3_EventScript_Scroll:: lockall - compare VAR_TRICK_HOUSE_PUZZLE_3_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle3_EventScript_FoundScroll + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_3_STATE, 0, Route110_TrickHousePuzzle3_EventScript_FoundScroll goto Route110_TrickHousePuzzle_EventScript_ReadScrollAgain end diff --git a/data/maps/Route110_TrickHousePuzzle4/scripts.inc b/data/maps/Route110_TrickHousePuzzle4/scripts.inc index 10f49adb50..2350d4ceb2 100644 --- a/data/maps/Route110_TrickHousePuzzle4/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle4/scripts.inc @@ -3,8 +3,7 @@ Route110_TrickHousePuzzle4_MapScripts:: Route110_TrickHousePuzzle4_EventScript_Scroll:: lockall - compare VAR_TRICK_HOUSE_PUZZLE_4_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle4_EventScript_FoundScroll + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_4_STATE, 0, Route110_TrickHousePuzzle4_EventScript_FoundScroll goto Route110_TrickHousePuzzle_EventScript_ReadScrollAgain end diff --git a/data/maps/Route110_TrickHousePuzzle5/scripts.inc b/data/maps/Route110_TrickHousePuzzle5/scripts.inc index 3c574441ec..e0fa432bd2 100644 --- a/data/maps/Route110_TrickHousePuzzle5/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle5/scripts.inc @@ -19,8 +19,7 @@ Route110_TrickHousePuzzle5_OnTransition: Route110_TrickHousePuzzle5_EventScript_Scroll:: lockall - compare VAR_TRICK_HOUSE_PUZZLE_5_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle5_EventScript_FoundScroll + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_5_STATE, 0, Route110_TrickHousePuzzle5_EventScript_FoundScroll goto Route110_TrickHousePuzzle_EventScript_ReadScrollAgain end @@ -33,8 +32,7 @@ Route110_TrickHousePuzzle5_EventScript_Mechadoll1:: lockall applymovement LOCALID_MECHADOLL_1, Common_Movement_FacePlayer waitmovement 0 - compare VAR_TEMP_1, 1 - goto_if_eq Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough + goto_if_eq VAR_TEMP_1, 1, Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough setvar VAR_TEMP_9, 0 goto Route110_TrickHousePuzzle5_EventScript_Mechadoll1Activate end @@ -43,8 +41,7 @@ Route110_TrickHousePuzzle5_EventScript_Mechadoll2:: lockall applymovement LOCALID_MECHADOLL_2, Common_Movement_FacePlayer waitmovement 0 - compare VAR_TEMP_2, 1 - goto_if_eq Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough + goto_if_eq VAR_TEMP_2, 1, Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough setvar VAR_TEMP_9, 0 goto Route110_TrickHousePuzzle5_EventScript_Mechadoll2Activate end @@ -53,8 +50,7 @@ Route110_TrickHousePuzzle5_EventScript_Mechadoll3:: lockall applymovement LOCALID_MECHADOLL_3, Common_Movement_FacePlayer waitmovement 0 - compare VAR_TEMP_3, 1 - goto_if_eq Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough + goto_if_eq VAR_TEMP_3, 1, Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough setvar VAR_TEMP_9, 0 goto Route110_TrickHousePuzzle5_EventScript_Mechadoll3Activate end @@ -63,8 +59,7 @@ Route110_TrickHousePuzzle5_EventScript_Mechadoll4:: lockall applymovement LOCALID_MECHADOLL_4, Common_Movement_FacePlayer waitmovement 0 - compare VAR_TEMP_4, 1 - goto_if_eq Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough + goto_if_eq VAR_TEMP_4, 1, Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough setvar VAR_TEMP_9, 0 goto Route110_TrickHousePuzzle5_EventScript_Mechadoll4Activate end @@ -73,8 +68,7 @@ Route110_TrickHousePuzzle5_EventScript_Mechadoll5:: lockall applymovement LOCALID_MECHADOLL_5, Common_Movement_FacePlayer waitmovement 0 - compare VAR_TEMP_5, 1 - goto_if_eq Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough + goto_if_eq VAR_TEMP_5, 1, Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough setvar VAR_TEMP_9, 0 goto Route110_TrickHousePuzzle5_EventScript_Mechadoll5Activate end @@ -226,14 +220,10 @@ Route110_TrickHousePuzzle5_EventScript_Mechadoll1Activate:: waitmovement 0 applymovement LOCALID_MECHADOLL_1, Common_Movement_Delay48 waitmovement 0 - compare VAR_TEMP_9, 1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft1 - compare VAR_TEMP_9, 2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft2 - compare VAR_TEMP_9, 3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft3 - compare VAR_TEMP_9, 4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft4 + call_if_eq VAR_TEMP_9, 1, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft1 + call_if_eq VAR_TEMP_9, 2, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft2 + call_if_eq VAR_TEMP_9, 3, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft3 + call_if_eq VAR_TEMP_9, 4, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft4 msgbox Route110_TrickHousePuzzle5_Text_Mechadoll1Intro, MSGBOX_DEFAULT random 3 switch VAR_RESULT @@ -250,16 +240,11 @@ Route110_TrickHousePuzzle5_EventScript_Mechadoll2Activate:: waitmovement 0 applymovement LOCALID_MECHADOLL_2, Common_Movement_Delay48 waitmovement 0 - compare VAR_TEMP_9, 1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight1 - compare VAR_TEMP_9, 2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight2 - compare VAR_TEMP_9, 3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight3 - compare VAR_TEMP_9, 4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight4 - compare VAR_TEMP_9, 5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight5 + call_if_eq VAR_TEMP_9, 1, Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight1 + call_if_eq VAR_TEMP_9, 2, Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight2 + call_if_eq VAR_TEMP_9, 3, Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight3 + call_if_eq VAR_TEMP_9, 4, Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight4 + call_if_eq VAR_TEMP_9, 5, Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight5 msgbox Route110_TrickHousePuzzle5_Text_Mechadoll2Intro, MSGBOX_DEFAULT random 3 switch VAR_RESULT @@ -276,14 +261,10 @@ Route110_TrickHousePuzzle5_EventScript_Mechadoll3Activate:: waitmovement 0 applymovement LOCALID_MECHADOLL_3, Common_Movement_Delay48 waitmovement 0 - compare VAR_TEMP_9, 1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft1 - compare VAR_TEMP_9, 2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft2 - compare VAR_TEMP_9, 3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft3 - compare VAR_TEMP_9, 4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft4 + call_if_eq VAR_TEMP_9, 1, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft1 + call_if_eq VAR_TEMP_9, 2, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft2 + call_if_eq VAR_TEMP_9, 3, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft3 + call_if_eq VAR_TEMP_9, 4, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft4 msgbox Route110_TrickHousePuzzle5_Text_Mechadoll3Intro, MSGBOX_DEFAULT random 3 switch VAR_RESULT @@ -300,14 +281,10 @@ Route110_TrickHousePuzzle5_EventScript_Mechadoll4Activate:: waitmovement 0 applymovement LOCALID_MECHADOLL_4, Common_Movement_Delay48 waitmovement 0 - compare VAR_TEMP_9, 1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft1 - compare VAR_TEMP_9, 2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft2 - compare VAR_TEMP_9, 3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft3 - compare VAR_TEMP_9, 4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft4 + call_if_eq VAR_TEMP_9, 1, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft1 + call_if_eq VAR_TEMP_9, 2, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft2 + call_if_eq VAR_TEMP_9, 3, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft3 + call_if_eq VAR_TEMP_9, 4, Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft4 msgbox Route110_TrickHousePuzzle5_Text_Mechadoll4Intro, MSGBOX_DEFAULT random 3 switch VAR_RESULT @@ -465,7 +442,7 @@ Route110_TrickHousePuzzle5_EventScript_IncorrectAnswer:: waitmovement 0 msgbox Route110_TrickHousePuzzle5_Text_WaitForNextChallenge, MSGBOX_DEFAULT closemessage - warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE5, 255, 0, 21 + warp MAP_ROUTE110_TRICK_HOUSE_PUZZLE5, 0, 21 waitstate releaseall end @@ -487,133 +464,83 @@ Route110_TrickHousePuzzle5_EventScript_CorrectGoThrough:: @ Mechadoll 5 never walks, all the Mechadoll5Walk scripts are unused @ No mechadoll walks left 5 paces, all the WalkLeft5 scripts are unused Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft1:: - compare VAR_TEMP_8, LOCALID_MECHADOLL_1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft1 - compare VAR_TEMP_8, LOCALID_MECHADOLL_2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkLeft1 - compare VAR_TEMP_8, LOCALID_MECHADOLL_3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkLeft1 - compare VAR_TEMP_8, LOCALID_MECHADOLL_4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkLeft1 - compare VAR_TEMP_8, LOCALID_MECHADOLL_5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkLeft1 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_1, Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft1 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_2, Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkLeft1 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_3, Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkLeft1 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_4, Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkLeft1 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_5, Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkLeft1 return Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft2:: - compare VAR_TEMP_8, LOCALID_MECHADOLL_1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft2 - compare VAR_TEMP_8, LOCALID_MECHADOLL_2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkLeft2 - compare VAR_TEMP_8, LOCALID_MECHADOLL_3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkLeft2 - compare VAR_TEMP_8, LOCALID_MECHADOLL_4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkLeft2 - compare VAR_TEMP_8, LOCALID_MECHADOLL_5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkLeft2 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_1, Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft2 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_2, Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkLeft2 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_3, Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkLeft2 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_4, Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkLeft2 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_5, Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkLeft2 return Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft3:: - compare VAR_TEMP_8, LOCALID_MECHADOLL_1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft3 - compare VAR_TEMP_8, LOCALID_MECHADOLL_2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkLeft3 - compare VAR_TEMP_8, LOCALID_MECHADOLL_3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkLeft3 - compare VAR_TEMP_8, LOCALID_MECHADOLL_4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkLeft3 - compare VAR_TEMP_8, LOCALID_MECHADOLL_5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkLeft3 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_1, Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft3 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_2, Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkLeft3 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_3, Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkLeft3 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_4, Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkLeft3 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_5, Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkLeft3 return Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft4:: - compare VAR_TEMP_8, LOCALID_MECHADOLL_1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft4 - compare VAR_TEMP_8, LOCALID_MECHADOLL_2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkLeft4 - compare VAR_TEMP_8, LOCALID_MECHADOLL_3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkLeft4 - compare VAR_TEMP_8, LOCALID_MECHADOLL_4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkLeft4 - compare VAR_TEMP_8, LOCALID_MECHADOLL_5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkLeft4 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_1, Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft4 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_2, Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkLeft4 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_3, Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkLeft4 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_4, Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkLeft4 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_5, Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkLeft4 return Route110_TrickHousePuzzle5_EventScript_MechadollWalkLeft5:: - compare VAR_TEMP_8, LOCALID_MECHADOLL_1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft5 - compare VAR_TEMP_8, LOCALID_MECHADOLL_2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkLeft5 - compare VAR_TEMP_8, LOCALID_MECHADOLL_3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkLeft5 - compare VAR_TEMP_8, LOCALID_MECHADOLL_4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkLeft5 - compare VAR_TEMP_8, LOCALID_MECHADOLL_5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkLeft5 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_1, Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft5 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_2, Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkLeft5 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_3, Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkLeft5 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_4, Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkLeft5 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_5, Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkLeft5 return Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight1:: - compare VAR_TEMP_8, LOCALID_MECHADOLL_1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkRight1 - compare VAR_TEMP_8, LOCALID_MECHADOLL_2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkRight1 - compare VAR_TEMP_8, LOCALID_MECHADOLL_3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkRight1 - compare VAR_TEMP_8, LOCALID_MECHADOLL_4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkRight1 - compare VAR_TEMP_8, LOCALID_MECHADOLL_5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkRight1 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_1, Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkRight1 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_2, Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkRight1 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_3, Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkRight1 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_4, Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkRight1 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_5, Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkRight1 return Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight2:: - compare VAR_TEMP_8, LOCALID_MECHADOLL_1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkRight2 - compare VAR_TEMP_8, LOCALID_MECHADOLL_2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkRight2 - compare VAR_TEMP_8, LOCALID_MECHADOLL_3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkRight2 - compare VAR_TEMP_8, LOCALID_MECHADOLL_4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkRight2 - compare VAR_TEMP_8, LOCALID_MECHADOLL_5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkRight2 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_1, Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkRight2 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_2, Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkRight2 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_3, Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkRight2 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_4, Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkRight2 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_5, Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkRight2 return Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight3:: - compare VAR_TEMP_8, LOCALID_MECHADOLL_1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkRight3 - compare VAR_TEMP_8, LOCALID_MECHADOLL_2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkRight3 - compare VAR_TEMP_8, LOCALID_MECHADOLL_3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkRight3 - compare VAR_TEMP_8, LOCALID_MECHADOLL_4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkRight3 - compare VAR_TEMP_8, LOCALID_MECHADOLL_5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkRight3 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_1, Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkRight3 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_2, Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkRight3 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_3, Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkRight3 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_4, Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkRight3 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_5, Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkRight3 return Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight4:: - compare VAR_TEMP_8, LOCALID_MECHADOLL_1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkRight4 - compare VAR_TEMP_8, LOCALID_MECHADOLL_2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkRight4 - compare VAR_TEMP_8, LOCALID_MECHADOLL_3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkRight4 - compare VAR_TEMP_8, LOCALID_MECHADOLL_4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkRight4 - compare VAR_TEMP_8, LOCALID_MECHADOLL_5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkRight4 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_1, Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkRight4 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_2, Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkRight4 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_3, Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkRight4 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_4, Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkRight4 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_5, Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkRight4 return Route110_TrickHousePuzzle5_EventScript_MechadollWalkRight5:: - compare VAR_TEMP_8, LOCALID_MECHADOLL_1 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkRight5 - compare VAR_TEMP_8, LOCALID_MECHADOLL_2 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkRight5 - compare VAR_TEMP_8, LOCALID_MECHADOLL_3 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkRight5 - compare VAR_TEMP_8, LOCALID_MECHADOLL_4 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkRight5 - compare VAR_TEMP_8, LOCALID_MECHADOLL_5 - call_if_eq Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkRight5 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_1, Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkRight5 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_2, Route110_TrickHousePuzzle5_EventScript_Mechadoll2WalkRight5 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_3, Route110_TrickHousePuzzle5_EventScript_Mechadoll3WalkRight5 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_4, Route110_TrickHousePuzzle5_EventScript_Mechadoll4WalkRight5 + call_if_eq VAR_TEMP_8, LOCALID_MECHADOLL_5, Route110_TrickHousePuzzle5_EventScript_Mechadoll5WalkRight5 return Route110_TrickHousePuzzle5_EventScript_Mechadoll1WalkLeft1:: diff --git a/data/maps/Route110_TrickHousePuzzle6/scripts.inc b/data/maps/Route110_TrickHousePuzzle6/scripts.inc index 35d657acc3..e442d094d5 100644 --- a/data/maps/Route110_TrickHousePuzzle6/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle6/scripts.inc @@ -17,8 +17,7 @@ Route110_TrickHousePuzzle6_EventScript_InitPuzzle:: Route110_TrickHousePuzzle6_EventScript_Scroll:: lockall - compare VAR_TRICK_HOUSE_PUZZLE_6_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle6_EventScript_FoundScroll + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_6_STATE, 0, Route110_TrickHousePuzzle6_EventScript_FoundScroll goto Route110_TrickHousePuzzle_EventScript_ReadScrollAgain end diff --git a/data/maps/Route110_TrickHousePuzzle7/scripts.inc b/data/maps/Route110_TrickHousePuzzle7/scripts.inc index b0f1cbea12..a47df82cac 100644 --- a/data/maps/Route110_TrickHousePuzzle7/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle7/scripts.inc @@ -22,58 +22,57 @@ Route110_TrickHousePuzzle7_EventScript_UpdateSwitchMetatiles:: @ Leftover from R/S, none of the below metatile scripts are ever called Route110_TrickHousePuzzle7_EventScript_SetSwitch1MetatilesOn:: - setmetatile 13, 17, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up, 0 - setmetatile 12, 16, METATILE_TrickHousePuzzle_Lever_On, 1 + setmetatile 13, 17, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up, FALSE + setmetatile 12, 16, METATILE_TrickHousePuzzle_Lever_On, TRUE return Route110_TrickHousePuzzle7_EventScript_SetSwitch2MetatilesOn:: - setmetatile 12, 13, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up, 0 - setmetatile 12, 11, METATILE_TrickHousePuzzle_Lever_On, 1 + setmetatile 12, 13, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up, FALSE + setmetatile 12, 11, METATILE_TrickHousePuzzle_Lever_On, TRUE return Route110_TrickHousePuzzle7_EventScript_SetSwitch3MetatilesOn:: - setmetatile 7, 12, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up, 0 - setmetatile 5, 10, METATILE_TrickHousePuzzle_Lever_On, 1 + setmetatile 7, 12, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up, FALSE + setmetatile 5, 10, METATILE_TrickHousePuzzle_Lever_On, TRUE return Route110_TrickHousePuzzle7_EventScript_SetSwitch4MetatilesOn:: - setmetatile 6, 6, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right_Alt, 0 - setmetatile 4, 4, METATILE_TrickHousePuzzle_Lever_On, 1 + setmetatile 6, 6, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right_Alt, FALSE + setmetatile 4, 4, METATILE_TrickHousePuzzle_Lever_On, TRUE return Route110_TrickHousePuzzle7_EventScript_SetSwitch5MetatilesOn:: - setmetatile 8, 4, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left, 0 - setmetatile 7, 5, METATILE_TrickHousePuzzle_Lever_On, 1 + setmetatile 8, 4, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left, FALSE + setmetatile 7, 5, METATILE_TrickHousePuzzle_Lever_On, TRUE return Route110_TrickHousePuzzle7_EventScript_SetSwitch1MetatilesOff:: - setmetatile 13, 17, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down, 0 - setmetatile 12, 16, METATILE_TrickHousePuzzle_Lever_Off, 1 + setmetatile 13, 17, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down, FALSE + setmetatile 12, 16, METATILE_TrickHousePuzzle_Lever_Off, TRUE return Route110_TrickHousePuzzle7_EventScript_SetSwitch2MetatilesOff:: - setmetatile 12, 13, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left, 0 - setmetatile 12, 11, METATILE_TrickHousePuzzle_Lever_Off, 1 + setmetatile 12, 13, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left, FALSE + setmetatile 12, 11, METATILE_TrickHousePuzzle_Lever_Off, TRUE return Route110_TrickHousePuzzle7_EventScript_SetSwitch3MetatilesOff:: - setmetatile 7, 12, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down, 0 - setmetatile 5, 10, METATILE_TrickHousePuzzle_Lever_Off, 1 + setmetatile 7, 12, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down, FALSE + setmetatile 5, 10, METATILE_TrickHousePuzzle_Lever_Off, TRUE return Route110_TrickHousePuzzle7_EventScript_SetSwitch4MetatilesOff:: - setmetatile 6, 6, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left_Alt, 0 - setmetatile 4, 4, METATILE_TrickHousePuzzle_Lever_Off, 1 + setmetatile 6, 6, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left_Alt, FALSE + setmetatile 4, 4, METATILE_TrickHousePuzzle_Lever_Off, TRUE return Route110_TrickHousePuzzle7_EventScript_SetSwitch5MetatilesOff:: - setmetatile 8, 4, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right, 0 - setmetatile 7, 5, METATILE_TrickHousePuzzle_Lever_Off, 1 + setmetatile 8, 4, METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right, FALSE + setmetatile 7, 5, METATILE_TrickHousePuzzle_Lever_Off, TRUE return Route110_TrickHousePuzzle7_OnTransition: - compare VAR_TRICK_HOUSE_PUZZLE_7_STATE_2, 1 - goto_if_eq Route110_TrickHousePuzzle7_EventScript_TeleportedTransition + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_7_STATE_2, 1, Route110_TrickHousePuzzle7_EventScript_TeleportedTransition clearflag FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_1 clearflag FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_2 clearflag FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_3 @@ -85,8 +84,7 @@ Route110_TrickHousePuzzle7_EventScript_TeleportedTransition:: end Route110_TrickHousePuzzle7_OnLoad: - compare VAR_TRICK_HOUSE_PUZZLE_7_STATE_2, 1 - call_if_eq Route110_TrickHousePuzzle7_EventScript_UpdateSwitchMetatiles + call_if_eq VAR_TRICK_HOUSE_PUZZLE_7_STATE_2, 1, Route110_TrickHousePuzzle7_EventScript_UpdateSwitchMetatiles end Route110_TrickHousePuzzle7_OnFrame: @@ -99,8 +97,7 @@ Route110_TrickHousePuzzle7_EventScript_ClearState2:: Route110_TrickHousePuzzle7_EventScript_Scroll:: lockall - compare VAR_TRICK_HOUSE_PUZZLE_7_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle7_EventScript_FoundScroll + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_7_STATE, 0, Route110_TrickHousePuzzle7_EventScript_FoundScroll goto Route110_TrickHousePuzzle_EventScript_ReadScrollAgain end @@ -113,7 +110,7 @@ Route110_TrickHousePuzzle7_EventScript_FoundScroll:: Route110_TrickHousePuzzle7_EventScript_TeleportPad:: lockall setvar VAR_TRICK_HOUSE_PUZZLE_7_STATE_2, 1 - warpteleport MAP_ROUTE110_TRICK_HOUSE_PUZZLE7, 255, 3, 19 + warpteleport MAP_ROUTE110_TRICK_HOUSE_PUZZLE7, 3, 19 waitstate releaseall end diff --git a/data/maps/Route110_TrickHousePuzzle8/scripts.inc b/data/maps/Route110_TrickHousePuzzle8/scripts.inc index 310751e5df..371f610004 100644 --- a/data/maps/Route110_TrickHousePuzzle8/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle8/scripts.inc @@ -3,8 +3,7 @@ Route110_TrickHousePuzzle8_MapScripts:: Route110_TrickHousePuzzle8_EventScript_Scroll:: lockall - compare VAR_TRICK_HOUSE_PUZZLE_8_STATE, 0 - goto_if_eq Route110_TrickHousePuzzle8_EventScript_FoundScroll + goto_if_eq VAR_TRICK_HOUSE_PUZZLE_8_STATE, 0, Route110_TrickHousePuzzle8_EventScript_FoundScroll goto Route110_TrickHousePuzzle_EventScript_ReadScrollAgain end diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc index 95f262dd24..f97326c543 100644 --- a/data/maps/Route111/scripts.inc +++ b/data/maps/Route111/scripts.inc @@ -15,45 +15,42 @@ Route111_MapScripts:: Route111_OnLoad: call_if_unset FLAG_REGI_DOORS_OPENED, Route111_EventScript_CloseDesertRuins - compare VAR_MIRAGE_TOWER_STATE, 1 - call_if_eq Route111_EventScript_ShowTemporaryMirageTower + call_if_eq VAR_MIRAGE_TOWER_STATE, 1, Route111_EventScript_ShowTemporaryMirageTower end Route111_EventScript_CloseDesertRuins:: - setmetatile 29, 86, METATILE_General_RockWall_RockBase, 1 - setmetatile 29, 87, METATILE_General_RockWall_SandBase, 1 + setmetatile 29, 86, METATILE_General_RockWall_RockBase, TRUE + setmetatile 29, 87, METATILE_General_RockWall_SandBase, TRUE return @ Show Mirage Tower just prior to disintegration. Mirage Tower is otherwise handled by the map layout Route111_EventScript_ShowTemporaryMirageTower:: - setmetatile 18, 53, METATILE_Mauville_MirageTower_Tile0, 0 - setmetatile 19, 53, METATILE_Mauville_MirageTower_Tile1, 0 - setmetatile 20, 53, METATILE_Mauville_MirageTower_Tile2, 0 - setmetatile 18, 54, METATILE_Mauville_MirageTower_Tile3, 0 - setmetatile 19, 54, METATILE_Mauville_MirageTower_Tile4, 0 - setmetatile 20, 54, METATILE_Mauville_MirageTower_Tile5, 0 - setmetatile 18, 55, METATILE_Mauville_MirageTower_Tile6, 0 - setmetatile 19, 55, METATILE_Mauville_MirageTower_Tile7, 0 - setmetatile 20, 55, METATILE_Mauville_MirageTower_Tile8, 0 - setmetatile 18, 56, METATILE_Mauville_MirageTower_Tile9, 0 - setmetatile 19, 56, METATILE_Mauville_MirageTower_TileA, 0 - setmetatile 20, 56, METATILE_Mauville_MirageTower_TileB, 0 - setmetatile 18, 57, METATILE_Mauville_MirageTower_TileC, 0 - setmetatile 19, 57, METATILE_Mauville_MirageTower_TileD, 0 - setmetatile 20, 57, METATILE_Mauville_MirageTower_TileE, 0 - setmetatile 18, 58, METATILE_Mauville_MirageTower_TileF, 0 - setmetatile 19, 58, METATILE_Mauville_MirageTower_Tile10, 0 - setmetatile 20, 58, METATILE_Mauville_MirageTower_Tile11, 0 + setmetatile 18, 53, METATILE_Mauville_MirageTower_Tile0, FALSE + setmetatile 19, 53, METATILE_Mauville_MirageTower_Tile1, FALSE + setmetatile 20, 53, METATILE_Mauville_MirageTower_Tile2, FALSE + setmetatile 18, 54, METATILE_Mauville_MirageTower_Tile3, FALSE + setmetatile 19, 54, METATILE_Mauville_MirageTower_Tile4, FALSE + setmetatile 20, 54, METATILE_Mauville_MirageTower_Tile5, FALSE + setmetatile 18, 55, METATILE_Mauville_MirageTower_Tile6, FALSE + setmetatile 19, 55, METATILE_Mauville_MirageTower_Tile7, FALSE + setmetatile 20, 55, METATILE_Mauville_MirageTower_Tile8, FALSE + setmetatile 18, 56, METATILE_Mauville_MirageTower_Tile9, FALSE + setmetatile 19, 56, METATILE_Mauville_MirageTower_TileA, FALSE + setmetatile 20, 56, METATILE_Mauville_MirageTower_TileB, FALSE + setmetatile 18, 57, METATILE_Mauville_MirageTower_TileC, FALSE + setmetatile 19, 57, METATILE_Mauville_MirageTower_TileD, FALSE + setmetatile 20, 57, METATILE_Mauville_MirageTower_TileE, FALSE + setmetatile 18, 58, METATILE_Mauville_MirageTower_TileF, FALSE + setmetatile 19, 58, METATILE_Mauville_MirageTower_Tile10, FALSE + setmetatile 20, 58, METATILE_Mauville_MirageTower_Tile11, FALSE return Route111_OnTransition: setvar VAR_TRAINER_HILL_IS_ACTIVE, 0 special SetMirageTowerVisibility call_if_unset FLAG_MIRAGE_TOWER_VISIBLE, Route111_EventScript_SetLayoutNoMirageTower - compare VAR_MIRAGE_TOWER_STATE, 1 - call_if_eq Route111_EventScript_SetFallingPlayerGfx - compare VAR_MIRAGE_TOWER_STATE, 2 - call_if_eq Route111_EventScript_SetMirageTowerGone + call_if_eq VAR_MIRAGE_TOWER_STATE, 1, Route111_EventScript_SetFallingPlayerGfx + call_if_eq VAR_MIRAGE_TOWER_STATE, 2, Route111_EventScript_SetMirageTowerGone call Route111_EventScript_CheckSetSandstorm call GabbyAndTy_EventScript_UpdateLocation goto_if_not_defeated TRAINER_VICKY, Route111_EventScript_SetWinstratesNotDefeated @@ -61,10 +58,8 @@ Route111_OnTransition: Route111_EventScript_SetFallingPlayerGfx:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq Route111_EventScript_SetFallingPlayerGfxMale - compare VAR_RESULT, FEMALE - goto_if_eq Route111_EventScript_SetFallingPlayerGfxFemale + goto_if_eq VAR_RESULT, MALE, Route111_EventScript_SetFallingPlayerGfxMale + goto_if_eq VAR_RESULT, FEMALE, Route111_EventScript_SetFallingPlayerGfxFemale return Route111_EventScript_SetFallingPlayerGfxMale:: @@ -77,16 +72,11 @@ Route111_EventScript_SetFallingPlayerGfxFemale:: Route111_EventScript_CheckSetSandstorm:: getplayerxy VAR_TEMP_0, VAR_TEMP_1 - compare VAR_TEMP_1, 34 - goto_if_lt Route111_EventScript_EndCheckSetSandstorm - compare VAR_TEMP_1, 107 - goto_if_gt Route111_EventScript_EndCheckSetSandstorm - compare VAR_TEMP_1, 72 - goto_if_gt Route111_EventScript_SetSandstorm - compare VAR_TEMP_0, 2000 - goto_if_gt Route111_EventScript_EndCheckSetSandstorm - compare VAR_TEMP_0, 8 - goto_if_lt Route111_EventScript_EndCheckSetSandstorm + goto_if_lt VAR_TEMP_1, 34, Route111_EventScript_EndCheckSetSandstorm + goto_if_gt VAR_TEMP_1, 107, Route111_EventScript_EndCheckSetSandstorm + goto_if_gt VAR_TEMP_1, 72, Route111_EventScript_SetSandstorm + goto_if_gt VAR_TEMP_0, 2000, Route111_EventScript_EndCheckSetSandstorm + goto_if_lt VAR_TEMP_0, 8, Route111_EventScript_EndCheckSetSandstorm Route111_EventScript_SetSandstorm:: setweather WEATHER_SANDSTORM Route111_EventScript_EndCheckSetSandstorm:: @@ -154,7 +144,7 @@ Route111_EventScript_RootFossilDisappeared:: @ Unused Route111_Movement_PlayerFall:: - store_lock_anim + lock_anim walk_fast_down walk_fast_down walk_fast_down @@ -170,8 +160,7 @@ Route111_EventScript_Girl:: goto_if_set FLAG_DAILY_ROUTE_111_RECEIVED_BERRY, Route111_EventScript_ReceivedBerry msgbox Route111_Text_WateredPlantsEveryDayTakeBerry, MSGBOX_DEFAULT giveitem ITEM_RAZZ_BERRY - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_DAILY_ROUTE_111_RECEIVED_BERRY special GetPlayerBigGuyGirlString msgbox Route111_Text_GoingToTryToMakeDifferentColorBerries, MSGBOX_DEFAULT @@ -210,9 +199,8 @@ Route111_EventScript_ViciousSandstormTriggerRight:: end Route111_EventScript_ViciousSandstormTrigger:: - checkitem ITEM_GO_GOGGLES, 1 - compare VAR_RESULT, FALSE - goto_if_eq Route111_EventScript_PreventRouteAccess + checkitem ITEM_GO_GOGGLES + goto_if_eq VAR_RESULT, FALSE, Route111_EventScript_PreventRouteAccess setvar VAR_TEMP_3, 1 releaseall end @@ -220,14 +208,10 @@ Route111_EventScript_ViciousSandstormTrigger:: Route111_EventScript_PreventRouteAccess:: msgbox gText_SandstormIsVicious, MSGBOX_DEFAULT closemessage - compare VAR_0x8004, 0 - call_if_eq Route111_EventScript_PushUpFromRoute - compare VAR_0x8004, 1 - call_if_eq Route111_EventScript_PushDownFromRoute - compare VAR_0x8004, 2 - call_if_eq Route111_EventScript_PushLeftFromRoute - compare VAR_0x8004, 3 - call_if_eq Route111_EventScript_PushRightFromRoute + call_if_eq VAR_0x8004, 0, Route111_EventScript_PushUpFromRoute + call_if_eq VAR_0x8004, 1, Route111_EventScript_PushDownFromRoute + call_if_eq VAR_0x8004, 2, Route111_EventScript_PushLeftFromRoute + call_if_eq VAR_0x8004, 3, Route111_EventScript_PushRightFromRoute releaseall end @@ -285,8 +269,7 @@ Route111_EventScript_Victor:: faceplayer setflag FLAG_LANDMARK_WINSTRATE_FAMILY msgbox Route111_Text_BattleOurFamily, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route111_EventScript_BattleWinstrates + goto_if_eq VAR_RESULT, YES, Route111_EventScript_BattleWinstrates msgbox Route111_Text_IsThatSo, MSGBOX_DEFAULT release end @@ -294,7 +277,7 @@ Route111_EventScript_Victor:: Route111_EventScript_BattleWinstrates:: msgbox Route111_Text_VictorIntro, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_VICTOR, Route111_Text_VictorDefeat - applymovement LOCALID_VICTOR, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_VICTOR, Common_Movement_WalkInPlaceFasterUp waitmovement 0 call Route111_EventScript_OpenWinstrateDoor msgbox Route111_Text_VictorPostBattle, MSGBOX_DEFAULT @@ -312,7 +295,7 @@ Route111_EventScript_BattleWinstrates:: call Route111_EventScript_CloseWinstrateDoor msgbox Route111_Text_VictoriaIntro, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_VICTORIA, Route111_Text_VictoriaDefeat - applymovement LOCALID_VICTORIA, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_VICTORIA, Common_Movement_WalkInPlaceFasterUp waitmovement 0 call Route111_EventScript_OpenWinstrateDoor msgbox Route111_Text_VictoriaPostBattle, MSGBOX_DEFAULT @@ -330,7 +313,7 @@ Route111_EventScript_BattleWinstrates:: call Route111_EventScript_CloseWinstrateDoor msgbox Route111_Text_ViviIntro, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_VIVI, Route111_Text_ViviDefeat - applymovement LOCALID_VIVI, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_VIVI, Common_Movement_WalkInPlaceFasterUp waitmovement 0 call Route111_EventScript_OpenWinstrateDoor msgbox Route111_Text_ViviPostBattle, MSGBOX_DEFAULT @@ -350,7 +333,7 @@ Route111_EventScript_BattleWinstrates:: trainerbattle_no_intro TRAINER_VICKY, Route111_Text_VickyDefeat msgbox Route111_Text_VickyPostBattle, MSGBOX_DEFAULT closemessage - applymovement LOCALID_VICKY, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_VICKY, Common_Movement_WalkInPlaceFasterUp waitmovement 0 call Route111_EventScript_OpenWinstrateDoor applymovement LOCALID_VICKY, Route111_Movement_WinstrateEnterHouse @@ -371,7 +354,7 @@ Route111_EventScript_CloseWinstrateDoor:: return Route111_Movement_WinstrateEnterHouse: - walk_in_place_fastest_up + walk_in_place_faster_up walk_up step_end @@ -420,10 +403,8 @@ Route111_EventScript_Man2:: Route111_EventScript_Hiker:: lock faceplayer - compare VAR_MIRAGE_TOWER_STATE, 3 - goto_if_eq Route111_EventScript_HikerMirageTowerGone - compare VAR_MIRAGE_TOWER_STATE, 2 - goto_if_eq Route111_EventScript_HikerMirageTowerDisintegrated + goto_if_eq VAR_MIRAGE_TOWER_STATE, 3, Route111_EventScript_HikerMirageTowerGone + goto_if_eq VAR_MIRAGE_TOWER_STATE, 2, Route111_EventScript_HikerMirageTowerDisintegrated goto_if_set FLAG_MIRAGE_TOWER_VISIBLE, Route111_EventScript_HikerMirageTowerVisible msgbox Route111_Text_ShouldBeMirageTowerAroundHere, MSGBOX_DEFAULT release @@ -478,8 +459,7 @@ Route111_EventScript_Becky:: Route111_EventScript_Dusty:: trainerbattle_single TRAINER_DUSTY_1, Route111_Text_DustyIntro, Route111_Text_DustyDefeat, Route111_EventScript_RegisterDusty specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route111_EventScript_RematchDusty + goto_if_eq VAR_RESULT, TRUE, Route111_EventScript_RematchDusty msgbox Route111_Text_DustyPostBattle, MSGBOX_DEFAULT release end @@ -515,8 +495,7 @@ Route111_EventScript_Daisuke:: Route111_EventScript_Wilton:: trainerbattle_single TRAINER_WILTON_1, Route111_Text_WiltonIntro, Route111_Text_WiltonDefeat, Route111_EventScript_RegisterWilton specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route111_EventScript_RematchWilton + goto_if_eq VAR_RESULT, TRUE, Route111_EventScript_RematchWilton msgbox Route111_Text_WiltonPostBattle, MSGBOX_DEFAULT release end @@ -537,8 +516,7 @@ Route111_EventScript_RematchWilton:: Route111_EventScript_Brooke:: trainerbattle_single TRAINER_BROOKE_1, Route111_Text_BrookeIntro, Route111_Text_BrookeDefeat, Route111_EventScript_RegisterBrooke specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route111_EventScript_RematchBrooke + goto_if_eq VAR_RESULT, TRUE, Route111_EventScript_RematchBrooke msgbox Route111_Text_BrookePostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route111_OldLadysRestStop/scripts.inc b/data/maps/Route111_OldLadysRestStop/scripts.inc index 645ce4de41..6b7b5a8abc 100644 --- a/data/maps/Route111_OldLadysRestStop/scripts.inc +++ b/data/maps/Route111_OldLadysRestStop/scripts.inc @@ -10,10 +10,8 @@ Route111_OldLadysRestStop_EventScript_OldLady:: lock faceplayer msgbox Route111_OldLadysRestStop_Text_RestUpHere, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route111_OldLadysRestStop_EventScript_Rest - compare VAR_RESULT, NO - goto_if_eq Route111_OldLadysRestStop_EventScript_DeclineRest + goto_if_eq VAR_RESULT, YES, Route111_OldLadysRestStop_EventScript_Rest + goto_if_eq VAR_RESULT, NO, Route111_OldLadysRestStop_EventScript_DeclineRest end Route111_OldLadysRestStop_EventScript_Rest:: @@ -21,10 +19,8 @@ Route111_OldLadysRestStop_EventScript_Rest:: closemessage call Common_EventScript_OutOfCenterPartyHeal msgbox Route111_OldLadysRestStop_Text_StillTiredTakeAnotherRest, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route111_OldLadysRestStop_EventScript_Rest - compare VAR_RESULT, NO - goto_if_eq Route111_OldLadysRestStop_EventScript_DeclineRest + goto_if_eq VAR_RESULT, YES, Route111_OldLadysRestStop_EventScript_Rest + goto_if_eq VAR_RESULT, NO, Route111_OldLadysRestStop_EventScript_DeclineRest end Route111_OldLadysRestStop_EventScript_DeclineRest:: diff --git a/data/maps/Route111_WinstrateFamilysHouse/scripts.inc b/data/maps/Route111_WinstrateFamilysHouse/scripts.inc index eedd83f068..a163c7b4f2 100644 --- a/data/maps/Route111_WinstrateFamilysHouse/scripts.inc +++ b/data/maps/Route111_WinstrateFamilysHouse/scripts.inc @@ -21,8 +21,7 @@ Route111_WinstrateFamilysHouse_EventScript_Victoria:: goto_if_set FLAG_RECEIVED_MACHO_BRACE, Route111_WinstrateFamilysHouse_EventScript_ReceivedMachoBrace msgbox Route111_WinstrateFamilysHouse_Text_LikeYouToHaveMachoBrace, MSGBOX_DEFAULT giveitem ITEM_MACHO_BRACE - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_MACHO_BRACE goto Route111_WinstrateFamilysHouse_EventScript_FaceOriginalDirection end diff --git a/data/maps/Route112/scripts.inc b/data/maps/Route112/scripts.inc index 4f9d60206b..a6c248e1f6 100644 --- a/data/maps/Route112/scripts.inc +++ b/data/maps/Route112/scripts.inc @@ -13,7 +13,7 @@ Route112_OnTransition: Route112_EventScript_MagmaGrunts:: lockall delay 40 - applymovement LOCALID_GRUNT_1, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_GRUNT_1, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 20 msgbox Route112_Text_LeaderGoingToAwakenThing, MSGBOX_DEFAULT @@ -21,7 +21,7 @@ Route112_EventScript_MagmaGrunts:: applymovement LOCALID_GRUNT_1, Common_Movement_FaceOriginalDirection waitmovement 0 delay 40 - applymovement LOCALID_GRUNT_2, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_GRUNT_2, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 delay 20 msgbox Route112_Text_YeahWeNeedMeteorite, MSGBOX_DEFAULT @@ -29,7 +29,7 @@ Route112_EventScript_MagmaGrunts:: applymovement LOCALID_GRUNT_2, Common_Movement_FaceOriginalDirection waitmovement 0 delay 40 - applymovement LOCALID_GRUNT_1, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_GRUNT_1, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 20 msgbox Route112_Text_OhThatsWhyCrewWentToFallarbor, MSGBOX_DEFAULT @@ -37,7 +37,7 @@ Route112_EventScript_MagmaGrunts:: applymovement LOCALID_GRUNT_1, Common_Movement_FaceOriginalDirection waitmovement 0 delay 40 - applymovement LOCALID_GRUNT_2, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_GRUNT_2, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 delay 20 msgbox Route112_Text_CantLetAnyonePassUntilTheyreBack, MSGBOX_DEFAULT @@ -71,8 +71,7 @@ Route112_EventScript_Brice:: Route112_EventScript_Trent:: trainerbattle_single TRAINER_TRENT_1, Route112_Text_TrentIntro, Route112_Text_TrentDefeat, Route112_EventScript_RegisterTrent specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route112_EventScript_RematchTrent + goto_if_eq VAR_RESULT, TRUE, Route112_EventScript_RematchTrent msgbox Route112_Text_TrentPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route112_CableCarStation/scripts.inc b/data/maps/Route112_CableCarStation/scripts.inc index ebc5142ae2..3ce4f62e2a 100644 --- a/data/maps/Route112_CableCarStation/scripts.inc +++ b/data/maps/Route112_CableCarStation/scripts.inc @@ -6,9 +6,8 @@ Route112_CableCarStation_MapScripts:: .byte 0 Route112_CableCarStation_OnTransition: - setescapewarp MAP_ROUTE112, 255, 28, 28 - compare VAR_CABLE_CAR_STATION_STATE, 2 - call_if_eq Route112_CableCarStation_EventScript_MoveAttendantAside + setescapewarp MAP_ROUTE112, 28, 28 + call_if_eq VAR_CABLE_CAR_STATION_STATE, 2, Route112_CableCarStation_EventScript_MoveAttendantAside end Route112_CableCarStation_EventScript_MoveAttendantAside:: @@ -35,10 +34,8 @@ Route112_CableCarStation_EventScript_Attendant:: lock faceplayer msgbox Route112_CableCarStation_Text_CableCarReadyGetOn, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route112_CableCarStation_EventScript_RideCableCar - compare VAR_RESULT, NO - goto_if_eq Route112_CableCarStation_EventScript_DeclineRide + goto_if_eq VAR_RESULT, YES, Route112_CableCarStation_EventScript_RideCableCar + goto_if_eq VAR_RESULT, NO, Route112_CableCarStation_EventScript_DeclineRide end Route112_CableCarStation_EventScript_RideCableCar:: @@ -65,7 +62,7 @@ Route112_CableCarStation_Movement_LeadPlayerToCableCar: walk_up walk_up walk_right - walk_in_place_fastest_left + walk_in_place_faster_left step_end Route112_CableCarStation_Movement_FollowPlayerOutFromCableCar: diff --git a/data/maps/Route113/scripts.inc b/data/maps/Route113/scripts.inc index 0a8bb092c3..4f02e74b64 100644 --- a/data/maps/Route113/scripts.inc +++ b/data/maps/Route113/scripts.inc @@ -14,10 +14,8 @@ Route113_OnTransition: Route113_EventScript_CheckSetAshWeather:: getplayerxy VAR_TEMP_0, VAR_TEMP_1 - compare VAR_TEMP_0, 19 - goto_if_lt Route113_EventScript_DontSetAshWeather - compare VAR_TEMP_0, 84 - goto_if_gt Route113_EventScript_DontSetAshWeather + goto_if_lt VAR_TEMP_0, 19, Route113_EventScript_DontSetAshWeather + goto_if_gt VAR_TEMP_0, 84, Route113_EventScript_DontSetAshWeather setweather WEATHER_VOLCANIC_ASH return @@ -61,8 +59,7 @@ Route113_EventScript_Dillon:: Route113_EventScript_Madeline:: trainerbattle_single TRAINER_MADELINE_1, Route113_Text_MadelineIntro, Route113_Text_MadelineDefeat, Route113_EventScript_RegisterMadeline specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route113_EventScript_RematchMadeline + goto_if_eq VAR_RESULT, TRUE, Route113_EventScript_RematchMadeline msgbox Route113_Text_MadelinePostBattle, MSGBOX_DEFAULT release end @@ -83,8 +80,7 @@ Route113_EventScript_RematchMadeline:: Route113_EventScript_Lao:: trainerbattle_single TRAINER_LAO_1, Route113_Text_LaoIntro, Route113_Text_LaoDefeat, Route113_EventScript_RegisterLao specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route113_EventScript_RematchLao + goto_if_eq VAR_RESULT, TRUE, Route113_EventScript_RematchLao msgbox Route113_Text_LaoPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route113_GlassWorkshop/scripts.inc b/data/maps/Route113_GlassWorkshop/scripts.inc index bad739806f..41182b2ae5 100644 --- a/data/maps/Route113_GlassWorkshop/scripts.inc +++ b/data/maps/Route113_GlassWorkshop/scripts.inc @@ -13,8 +13,7 @@ Route113_GlassWorkshop_MapScripts:: Route113_GlassWorkshop_OnTransition: setflag FLAG_LANDMARK_GLASS_WORKSHOP - compare VAR_GLASS_WORKSHOP_STATE, 1 - call_if_eq Route113_GlassWorkshop_EventScript_ReenterWorkshopAfterSootSack + call_if_eq VAR_GLASS_WORKSHOP_STATE, 1, Route113_GlassWorkshop_EventScript_ReenterWorkshopAfterSootSack end Route113_GlassWorkshop_EventScript_ReenterWorkshopAfterSootSack:: @@ -24,12 +23,9 @@ Route113_GlassWorkshop_EventScript_ReenterWorkshopAfterSootSack:: Route113_GlassWorkshop_EventScript_GlassWorker:: lock faceplayer - compare VAR_GLASS_WORKSHOP_STATE, 10 - goto_if_ge Route113_GlassWorkshop_EventScript_GiveItemAfterNoRoom - compare VAR_GLASS_WORKSHOP_STATE, 2 - goto_if_eq Route113_GlassWorkshop_EventScript_CheckCollectedAsh - compare VAR_GLASS_WORKSHOP_STATE, 1 - goto_if_eq Route113_GlassWorkshop_EventScript_ExplainSootSack + goto_if_ge VAR_GLASS_WORKSHOP_STATE, 10, Route113_GlassWorkshop_EventScript_GiveItemAfterNoRoom + goto_if_eq VAR_GLASS_WORKSHOP_STATE, 2, Route113_GlassWorkshop_EventScript_CheckCollectedAsh + goto_if_eq VAR_GLASS_WORKSHOP_STATE, 1, Route113_GlassWorkshop_EventScript_ExplainSootSack msgbox Route113_GlassWorkshop_Text_GoCollectAshWithThis, MSGBOX_DEFAULT giveitem ITEM_SOOT_SACK setvar VAR_GLASS_WORKSHOP_STATE, 1 @@ -43,12 +39,10 @@ Route113_GlassWorkshop_EventScript_ExplainSootSack:: end Route113_GlassWorkshop_EventScript_CheckCollectedAsh:: - checkitem ITEM_SOOT_SACK, 1 - compare VAR_RESULT, FALSE - goto_if_eq Route113_GlassWorkshop_EventScript_SootSackNotInBag + checkitem ITEM_SOOT_SACK + goto_if_eq VAR_RESULT, FALSE, Route113_GlassWorkshop_EventScript_SootSackNotInBag msgbox Route113_GlassWorkshop_Text_LetsSeeCollectedAshes, MSGBOX_DEFAULT - compare VAR_ASH_GATHER_COUNT, LOWEST_ASH_PRICE - goto_if_lt Route113_GlassWorkshop_EventScript_NotEnoughAsh + goto_if_lt VAR_ASH_GATHER_COUNT, LOWEST_ASH_PRICE, Route113_GlassWorkshop_EventScript_NotEnoughAsh message Route113_GlassWorkshop_Text_WhichGlassItemWoudYouLike waitmessage goto Route113_GlassWorkshop_EventScript_ChooseGlassItem @@ -78,13 +72,11 @@ Route113_GlassWorkshop_EventScript_ChooseGlassItem:: Route113_GlassWorkshop_EventScript_BlueFlute:: setvar VAR_0x8008, ITEM_BLUE_FLUTE - bufferitemname 0, VAR_0x8008 + bufferitemname STR_VAR_1, VAR_0x8008 setvar VAR_0x800A, BLUE_FLUTE_PRICE - compare VAR_ASH_GATHER_COUNT, BLUE_FLUTE_PRICE - goto_if_lt Route113_GlassWorkshop_EventScript_NotEnoughAshForItem + goto_if_lt VAR_ASH_GATHER_COUNT, BLUE_FLUTE_PRICE, Route113_GlassWorkshop_EventScript_NotEnoughAshForItem msgbox Route113_GlassWorkshop_Text_IsThatTheItemForYou, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route113_GlassWorkshop_EventScript_ChooseDifferentItem + goto_if_eq VAR_RESULT, NO, Route113_GlassWorkshop_EventScript_ChooseDifferentItem setvar VAR_GLASS_WORKSHOP_STATE, 10 subvar VAR_ASH_GATHER_COUNT, BLUE_FLUTE_PRICE goto Route113_GlassWorkshop_EventScript_MakeGlassItem @@ -92,13 +84,11 @@ Route113_GlassWorkshop_EventScript_BlueFlute:: Route113_GlassWorkshop_EventScript_YellowFlute:: setvar VAR_0x8008, ITEM_YELLOW_FLUTE - bufferitemname 0, VAR_0x8008 + bufferitemname STR_VAR_1, VAR_0x8008 setvar VAR_0x800A, YELLOW_FLUTE_PRICE - compare VAR_ASH_GATHER_COUNT, YELLOW_FLUTE_PRICE - goto_if_lt Route113_GlassWorkshop_EventScript_NotEnoughAshForItem + goto_if_lt VAR_ASH_GATHER_COUNT, YELLOW_FLUTE_PRICE, Route113_GlassWorkshop_EventScript_NotEnoughAshForItem msgbox Route113_GlassWorkshop_Text_IsThatTheItemForYou, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route113_GlassWorkshop_EventScript_ChooseDifferentItem + goto_if_eq VAR_RESULT, NO, Route113_GlassWorkshop_EventScript_ChooseDifferentItem setvar VAR_GLASS_WORKSHOP_STATE, 11 subvar VAR_ASH_GATHER_COUNT, YELLOW_FLUTE_PRICE goto Route113_GlassWorkshop_EventScript_MakeGlassItem @@ -106,13 +96,11 @@ Route113_GlassWorkshop_EventScript_YellowFlute:: Route113_GlassWorkshop_EventScript_RedFlute:: setvar VAR_0x8008, ITEM_RED_FLUTE - bufferitemname 0, VAR_0x8008 + bufferitemname STR_VAR_1, VAR_0x8008 setvar VAR_0x800A, RED_FLUTE_PRICE - compare VAR_ASH_GATHER_COUNT, RED_FLUTE_PRICE - goto_if_lt Route113_GlassWorkshop_EventScript_NotEnoughAshForItem + goto_if_lt VAR_ASH_GATHER_COUNT, RED_FLUTE_PRICE, Route113_GlassWorkshop_EventScript_NotEnoughAshForItem msgbox Route113_GlassWorkshop_Text_IsThatTheItemForYou, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route113_GlassWorkshop_EventScript_ChooseDifferentItem + goto_if_eq VAR_RESULT, NO, Route113_GlassWorkshop_EventScript_ChooseDifferentItem setvar VAR_GLASS_WORKSHOP_STATE, 12 subvar VAR_ASH_GATHER_COUNT, RED_FLUTE_PRICE goto Route113_GlassWorkshop_EventScript_MakeGlassItem @@ -120,13 +108,11 @@ Route113_GlassWorkshop_EventScript_RedFlute:: Route113_GlassWorkshop_EventScript_WhiteFlute:: setvar VAR_0x8008, ITEM_WHITE_FLUTE - bufferitemname 0, VAR_0x8008 + bufferitemname STR_VAR_1, VAR_0x8008 setvar VAR_0x800A, WHITE_FLUTE_PRICE - compare VAR_ASH_GATHER_COUNT, WHITE_FLUTE_PRICE - goto_if_lt Route113_GlassWorkshop_EventScript_NotEnoughAshForItem + goto_if_lt VAR_ASH_GATHER_COUNT, WHITE_FLUTE_PRICE, Route113_GlassWorkshop_EventScript_NotEnoughAshForItem msgbox Route113_GlassWorkshop_Text_IsThatTheItemForYou, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route113_GlassWorkshop_EventScript_ChooseDifferentItem + goto_if_eq VAR_RESULT, NO, Route113_GlassWorkshop_EventScript_ChooseDifferentItem setvar VAR_GLASS_WORKSHOP_STATE, 13 subvar VAR_ASH_GATHER_COUNT, WHITE_FLUTE_PRICE goto Route113_GlassWorkshop_EventScript_MakeGlassItem @@ -134,13 +120,11 @@ Route113_GlassWorkshop_EventScript_WhiteFlute:: Route113_GlassWorkshop_EventScript_BlackFlute:: setvar VAR_0x8008, ITEM_BLACK_FLUTE - bufferitemname 0, VAR_0x8008 + bufferitemname STR_VAR_1, VAR_0x8008 setvar VAR_0x800A, BLACK_FLUTE_PRICE - compare VAR_ASH_GATHER_COUNT, BLACK_FLUTE_PRICE - goto_if_lt Route113_GlassWorkshop_EventScript_NotEnoughAshForItem + goto_if_lt VAR_ASH_GATHER_COUNT, BLACK_FLUTE_PRICE, Route113_GlassWorkshop_EventScript_NotEnoughAshForItem msgbox Route113_GlassWorkshop_Text_IsThatTheItemForYou, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route113_GlassWorkshop_EventScript_ChooseDifferentItem + goto_if_eq VAR_RESULT, NO, Route113_GlassWorkshop_EventScript_ChooseDifferentItem setvar VAR_GLASS_WORKSHOP_STATE, 14 subvar VAR_ASH_GATHER_COUNT, BLACK_FLUTE_PRICE goto Route113_GlassWorkshop_EventScript_MakeGlassItem @@ -149,13 +133,11 @@ Route113_GlassWorkshop_EventScript_BlackFlute:: Route113_GlassWorkshop_EventScript_PrettyChair:: setvar VAR_0x8009, 1 setvar VAR_0x8008, DECOR_PRETTY_CHAIR - bufferdecorationname 0, VAR_0x8008 + bufferdecorationname STR_VAR_1, VAR_0x8008 setvar VAR_0x800A, PRETTY_CHAIR_PRICE - compare VAR_ASH_GATHER_COUNT, PRETTY_CHAIR_PRICE - goto_if_lt Route113_GlassWorkshop_EventScript_NotEnoughAshForItem + goto_if_lt VAR_ASH_GATHER_COUNT, PRETTY_CHAIR_PRICE, Route113_GlassWorkshop_EventScript_NotEnoughAshForItem msgbox Route113_GlassWorkshop_Text_IsThatTheItemForYou, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route113_GlassWorkshop_EventScript_ChooseDifferentItem + goto_if_eq VAR_RESULT, NO, Route113_GlassWorkshop_EventScript_ChooseDifferentItem setvar VAR_GLASS_WORKSHOP_STATE, 15 subvar VAR_ASH_GATHER_COUNT, PRETTY_CHAIR_PRICE goto Route113_GlassWorkshop_EventScript_MakeGlassItem @@ -164,13 +146,11 @@ Route113_GlassWorkshop_EventScript_PrettyChair:: Route113_GlassWorkshop_EventScript_PrettyDesk:: setvar VAR_0x8009, 1 setvar VAR_0x8008, DECOR_PRETTY_DESK - bufferdecorationname 0, VAR_0x8008 + bufferdecorationname STR_VAR_1, VAR_0x8008 setvar VAR_0x800A, PRETTY_DESK_PRICE - compare VAR_ASH_GATHER_COUNT, PRETTY_DESK_PRICE - goto_if_lt Route113_GlassWorkshop_EventScript_NotEnoughAshForItem + goto_if_lt VAR_ASH_GATHER_COUNT, PRETTY_DESK_PRICE, Route113_GlassWorkshop_EventScript_NotEnoughAshForItem msgbox Route113_GlassWorkshop_Text_IsThatTheItemForYou, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route113_GlassWorkshop_EventScript_ChooseDifferentItem + goto_if_eq VAR_RESULT, NO, Route113_GlassWorkshop_EventScript_ChooseDifferentItem setvar VAR_GLASS_WORKSHOP_STATE, 16 subvar VAR_ASH_GATHER_COUNT, PRETTY_DESK_PRICE goto Route113_GlassWorkshop_EventScript_MakeGlassItem @@ -184,14 +164,14 @@ Route113_GlassWorkshop_EventScript_CancelGlassItemSelect:: Route113_GlassWorkshop_EventScript_NotEnoughAsh:: setvar VAR_0x800A, LOWEST_ASH_PRICE subvar VAR_0x800A, VAR_ASH_GATHER_COUNT - buffernumberstring 0, VAR_0x800A + buffernumberstring STR_VAR_1, VAR_0x800A msgbox Route113_GlassWorkshop_Text_NotEnoughAshNeedX, MSGBOX_DEFAULT release end Route113_GlassWorkshop_EventScript_NotEnoughAshForItem:: subvar VAR_0x800A, VAR_ASH_GATHER_COUNT - buffernumberstring 1, VAR_0x800A + buffernumberstring STR_VAR_2, VAR_0x800A message Route113_GlassWorkshop_Text_NotEnoughAshToMakeItem waitmessage goto Route113_GlassWorkshop_EventScript_ChooseGlassItem @@ -211,24 +191,20 @@ Route113_GlassWorkshop_EventScript_MakeGlassItem:: delay 30 fadescreen FADE_FROM_BLACK msgbox Route113_GlassWorkshop_Text_IveFinishedGlassItem, MSGBOX_DEFAULT - compare VAR_0x8009, 0 - call_if_eq Route113_GlassWorkshop_EventScript_GiveGlassFlute - compare VAR_0x8009, 1 - call_if_eq Route113_GlassWorkshop_EventScript_GiveGlassDecor + call_if_eq VAR_0x8009, 0, Route113_GlassWorkshop_EventScript_GiveGlassFlute + call_if_eq VAR_0x8009, 1, Route113_GlassWorkshop_EventScript_GiveGlassDecor setvar VAR_GLASS_WORKSHOP_STATE, 2 release end Route113_GlassWorkshop_EventScript_GiveGlassFlute:: giveitem VAR_0x8008 - compare VAR_RESULT, FALSE - goto_if_eq Route113_GlassWorkshop_EventScript_NoRoomForFlute + goto_if_eq VAR_RESULT, FALSE, Route113_GlassWorkshop_EventScript_NoRoomForFlute return Route113_GlassWorkshop_EventScript_GiveGlassDecor:: givedecoration VAR_0x8008 - compare VAR_RESULT, FALSE - goto_if_eq Route113_GlassWorkshop_EventScript_NoRoomForDecor + goto_if_eq VAR_RESULT, FALSE, Route113_GlassWorkshop_EventScript_NoRoomForDecor return Route113_GlassWorkshop_EventScript_NoRoomForFlute:: @@ -257,58 +233,56 @@ Route113_GlassWorkshop_EventScript_GiveItemAfterNoRoom:: Route113_GlassWorkshop_EventScript_GiveBlueFlute:: setvar VAR_0x8009, 0 setvar VAR_0x8008, ITEM_BLUE_FLUTE - bufferitemname 0, VAR_0x8008 + bufferitemname STR_VAR_1, VAR_0x8008 goto Route113_GlassWorkshop_EventScript_TryGiveItemAgain end Route113_GlassWorkshop_EventScript_GiveYellowFlute:: setvar VAR_0x8009, 0 setvar VAR_0x8008, ITEM_YELLOW_FLUTE - bufferitemname 0, VAR_0x8008 + bufferitemname STR_VAR_1, VAR_0x8008 goto Route113_GlassWorkshop_EventScript_TryGiveItemAgain end Route113_GlassWorkshop_EventScript_GiveRedFlute:: setvar VAR_0x8009, 0 setvar VAR_0x8008, ITEM_RED_FLUTE - bufferitemname 0, VAR_0x8008 + bufferitemname STR_VAR_1, VAR_0x8008 goto Route113_GlassWorkshop_EventScript_TryGiveItemAgain end Route113_GlassWorkshop_EventScript_GiveWhiteFlute:: setvar VAR_0x8009, 0 setvar VAR_0x8008, ITEM_WHITE_FLUTE - bufferitemname 0, VAR_0x8008 + bufferitemname STR_VAR_1, VAR_0x8008 goto Route113_GlassWorkshop_EventScript_TryGiveItemAgain end Route113_GlassWorkshop_EventScript_GiveBlackFlute:: setvar VAR_0x8009, 0 setvar VAR_0x8008, ITEM_BLACK_FLUTE - bufferitemname 0, VAR_0x8008 + bufferitemname STR_VAR_1, VAR_0x8008 goto Route113_GlassWorkshop_EventScript_TryGiveItemAgain end Route113_GlassWorkshop_EventScript_GivePrettyChair:: setvar VAR_0x8009, 1 setvar VAR_0x8008, DECOR_PRETTY_CHAIR - bufferdecorationname 0, DECOR_PRETTY_CHAIR + bufferdecorationname STR_VAR_1, DECOR_PRETTY_CHAIR goto Route113_GlassWorkshop_EventScript_TryGiveItemAgain end Route113_GlassWorkshop_EventScript_GivePrettyDesk:: setvar VAR_0x8009, 1 setvar VAR_0x8008, DECOR_PRETTY_DESK - bufferdecorationname 0, DECOR_PRETTY_DESK + bufferdecorationname STR_VAR_1, DECOR_PRETTY_DESK goto Route113_GlassWorkshop_EventScript_TryGiveItemAgain end Route113_GlassWorkshop_EventScript_TryGiveItemAgain:: msgbox Route113_GlassWorkshop_Text_IveFinishedGlassItem, MSGBOX_DEFAULT - compare VAR_0x8009, 0 - call_if_eq Route113_GlassWorkshop_EventScript_GiveGlassFlute - compare VAR_0x8009, 1 - call_if_eq Route113_GlassWorkshop_EventScript_GiveGlassDecor + call_if_eq VAR_0x8009, 0, Route113_GlassWorkshop_EventScript_GiveGlassFlute + call_if_eq VAR_0x8009, 1, Route113_GlassWorkshop_EventScript_GiveGlassDecor setvar VAR_GLASS_WORKSHOP_STATE, 2 release end diff --git a/data/maps/Route114/scripts.inc b/data/maps/Route114/scripts.inc index 3eb92d0f1e..abf70ea081 100644 --- a/data/maps/Route114/scripts.inc +++ b/data/maps/Route114/scripts.inc @@ -5,19 +5,14 @@ Route114_MapScripts:: .byte 0 Route114_OnTransition: - compare VAR_SHOULD_END_ABNORMAL_WEATHER, 1 - call_if_eq AbnormalWeather_EventScript_HideMapNamePopup - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_114_NORTH - call_if_eq AbnormalWeather_StartGroudonWeather - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_114_SOUTH - call_if_eq AbnormalWeather_StartGroudonWeather + call_if_eq VAR_SHOULD_END_ABNORMAL_WEATHER, 1, AbnormalWeather_EventScript_HideMapNamePopup + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_114_NORTH, AbnormalWeather_StartGroudonWeather + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_114_SOUTH, AbnormalWeather_StartGroudonWeather end Route114_OnLoad: - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_114_NORTH - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute114North - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_114_SOUTH - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute114South + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_114_NORTH, AbnormalWeather_EventScript_PlaceTilesRoute114North + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_114_SOUTH, AbnormalWeather_EventScript_PlaceTilesRoute114South end Route114_OnFrame: @@ -34,8 +29,7 @@ Route114_EventScript_Man:: addvar VAR_RESULT, NUM_ROUTE_114_MAN_BERRIES_SKIPPED addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem VAR_RESULT - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_DAILY_ROUTE_114_RECEIVED_BERRY msgbox Route114_Text_TryBerryCrushWithFriends, MSGBOX_DEFAULT release @@ -52,8 +46,7 @@ Route114_EventScript_RoarGentleman:: goto_if_set FLAG_RECEIVED_TM05, Route114_EventScript_ReceivedRoar msgbox Route114_Text_AllMyMonDoesIsRoarTakeThis, MSGBOX_DEFAULT giveitem ITEM_TM05 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM05 msgbox Route114_Text_ExplainRoar, MSGBOX_DEFAULT release @@ -68,7 +61,7 @@ Route114_EventScript_Poochyena:: lock faceplayer waitse - playmoncry SPECIES_POOCHYENA, 2 + playmoncry SPECIES_POOCHYENA, CRY_MODE_ENCOUNTER msgbox Route114_Text_Poochyena, MSGBOX_DEFAULT waitmoncry release @@ -109,8 +102,7 @@ Route114_EventScript_Nancy:: Route114_EventScript_Steve:: trainerbattle_single TRAINER_STEVE_1, Route114_Text_SteveIntro, Route114_Text_SteveDefeat, Route114_EventScript_RegisterSteve specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route114_EventScript_RematchSteve + goto_if_eq VAR_RESULT, TRUE, Route114_EventScript_RematchSteve msgbox Route114_Text_StevePostBattle, MSGBOX_DEFAULT release end @@ -131,8 +123,7 @@ Route114_EventScript_RematchSteve:: Route114_EventScript_Bernie:: trainerbattle_single TRAINER_BERNIE_1, Route114_Text_BernieIntro, Route114_Text_BernieDefeat, Route114_EventScript_RegisterBernie specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route114_EventScript_RematchBernie + goto_if_eq VAR_RESULT, TRUE, Route114_EventScript_RematchBernie msgbox Route114_Text_BerniePostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route114_FossilManiacsHouse/scripts.inc b/data/maps/Route114_FossilManiacsHouse/scripts.inc index f291cd5ee4..ba3c0c60e5 100644 --- a/data/maps/Route114_FossilManiacsHouse/scripts.inc +++ b/data/maps/Route114_FossilManiacsHouse/scripts.inc @@ -12,8 +12,7 @@ Route114_FossilManiacsHouse_EventScript_FossilManiacsBrother:: goto_if_set FLAG_RECEIVED_TM28, Route114_FossilManiacsHouse_EventScript_ReceivedDig msgbox Route114_FossilManiacsHouse_Text_HaveThisToDigLikeMyBrother, MSGBOX_DEFAULT giveitem ITEM_TM28 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM28 release end diff --git a/data/maps/Route114_FossilManiacsTunnel/scripts.inc b/data/maps/Route114_FossilManiacsTunnel/scripts.inc index a5181be793..72138bbe40 100644 --- a/data/maps/Route114_FossilManiacsTunnel/scripts.inc +++ b/data/maps/Route114_FossilManiacsTunnel/scripts.inc @@ -19,14 +19,14 @@ Route114_FossilManiacsTunnel_OnLoad: end Route114_FossilManiacsTunnel_EventScript_CloseDesertUnderpass:: - setmetatile 6, 1, METATILE_Fallarbor_RedRockWall, 1 - setmetatile 6, 2, METATILE_Fallarbor_RedRockWall, 1 + setmetatile 6, 1, METATILE_Fallarbor_RedRockWall, TRUE + setmetatile 6, 2, METATILE_Fallarbor_RedRockWall, TRUE return Route114_FossilManiacsTunnel_EventScript_ManiacMentionCaveIn:: lockall - applymovement LOCALID_FOSSIL_MANIAC, Common_Movement_WalkInPlaceFastestUp - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_FOSSIL_MANIAC, Common_Movement_WalkInPlaceFasterUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox Route114_FossilManiacsTunnel_Text_NotSafeThatWay, MSGBOX_DEFAULT setvar VAR_FOSSIL_MANIAC_STATE, 2 @@ -37,12 +37,10 @@ Route114_FossilManiacsTunnel_EventScript_FossilManiac:: lock faceplayer goto_if_set FLAG_RECEIVED_REVIVED_FOSSIL_MON, Route114_FossilManiacsTunnel_EventScript_PlayerRevivedFossil - checkitem ITEM_ROOT_FOSSIL, 1 - compare VAR_RESULT, TRUE - goto_if_eq Route114_FossilManiacsTunnel_EventScript_PlayerHasFossil - checkitem ITEM_CLAW_FOSSIL, 1 - compare VAR_RESULT, TRUE - goto_if_eq Route114_FossilManiacsTunnel_EventScript_PlayerHasFossil + checkitem ITEM_ROOT_FOSSIL + goto_if_eq VAR_RESULT, TRUE, Route114_FossilManiacsTunnel_EventScript_PlayerHasFossil + checkitem ITEM_CLAW_FOSSIL + goto_if_eq VAR_RESULT, TRUE, Route114_FossilManiacsTunnel_EventScript_PlayerHasFossil msgbox Route114_FossilManiacsTunnel_Text_LookInDesertForFossils, MSGBOX_DEFAULT release end diff --git a/data/maps/Route114_LanettesHouse/scripts.inc b/data/maps/Route114_LanettesHouse/scripts.inc index 5a7ccb3415..9143b27954 100644 --- a/data/maps/Route114_LanettesHouse/scripts.inc +++ b/data/maps/Route114_LanettesHouse/scripts.inc @@ -13,8 +13,7 @@ Route114_LanettesHouse_EventScript_Lanette:: setflag FLAG_SYS_PC_LANETTE msgbox Route114_LanettesHouse_Text_EverythingClutteredKeepThis, MSGBOX_DEFAULT givedecoration DECOR_LOTAD_DOLL - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowNoRoomForDecor + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowNoRoomForDecor setflag FLAG_RECEIVED_DOLL_LANETTE release end @@ -27,16 +26,14 @@ Route114_LanettesHouse_EventScript_OfferAdvice:: Route114_LanettesHouse_EventScript_Notebook:: lockall msgbox Route114_LanettesHouse_Text_ResearchNotesPage1, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route114_LanettesHouse_EventScript_NotebookPage2 + goto_if_eq VAR_RESULT, YES, Route114_LanettesHouse_EventScript_NotebookPage2 msgbox Route114_LanettesHouse_Text_ClosedTheNotebook, MSGBOX_DEFAULT releaseall end Route114_LanettesHouse_EventScript_NotebookPage2:: msgbox Route114_LanettesHouse_Text_ResearchNotesPage2, MSGBOX_YESNO - compare VAR_RESULT, YES - call_if_eq Route114_LanettesHouse_EventScript_NotebookPage3 + call_if_eq VAR_RESULT, YES, Route114_LanettesHouse_EventScript_NotebookPage3 releaseall end diff --git a/data/maps/Route115/scripts.inc b/data/maps/Route115/scripts.inc index 600e6751f2..e00fdb27dc 100644 --- a/data/maps/Route115/scripts.inc +++ b/data/maps/Route115/scripts.inc @@ -5,19 +5,14 @@ Route115_MapScripts:: .byte 0 Route115_OnLoad: - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_115_WEST - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute115West - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_115_EAST - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute115East + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_115_WEST, AbnormalWeather_EventScript_PlaceTilesRoute115West + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_115_EAST, AbnormalWeather_EventScript_PlaceTilesRoute115East end Route115_OnTransition: - compare VAR_SHOULD_END_ABNORMAL_WEATHER, 1 - call_if_eq AbnormalWeather_EventScript_HideMapNamePopup - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_115_WEST - call_if_eq AbnormalWeather_StartGroudonWeather - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_115_EAST - call_if_eq AbnormalWeather_StartGroudonWeather + call_if_eq VAR_SHOULD_END_ABNORMAL_WEATHER, 1, AbnormalWeather_EventScript_HideMapNamePopup + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_115_WEST, AbnormalWeather_StartGroudonWeather + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_115_EAST, AbnormalWeather_StartGroudonWeather end Route115_OnFrame: @@ -39,8 +34,7 @@ Route115_EventScript_MeteorFallsSign:: Route115_EventScript_Timothy:: trainerbattle_single TRAINER_TIMOTHY_1, Route115_Text_TimothyIntro, Route115_Text_TimothyDefeat, Route115_EventScript_RegisterTimothy specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route115_EventScript_RematchTimothy + goto_if_eq VAR_RESULT, TRUE, Route115_EventScript_RematchTimothy msgbox Route115_Text_TimothyPostBattle, MSGBOX_DEFAULT release end @@ -66,8 +60,7 @@ Route115_EventScript_Koichi:: Route115_EventScript_Nob:: trainerbattle_single TRAINER_NOB_1, Route115_Text_NobIntro, Route115_Text_NobDefeat, Route115_EventScript_RegisterNob specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route115_EventScript_RematchNob + goto_if_eq VAR_RESULT, TRUE, Route115_EventScript_RematchNob msgbox Route115_Text_NobPostBattle, MSGBOX_DEFAULT release end @@ -88,8 +81,7 @@ Route115_EventScript_RematchNob:: Route115_EventScript_Cyndy:: trainerbattle_single TRAINER_CYNDY_1, Route115_Text_CyndyIntro, Route115_Text_CyndyDefeat, Route115_EventScript_RegisterCyndy specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route115_EventScript_RematchCyndy + goto_if_eq VAR_RESULT, TRUE, Route115_EventScript_RematchCyndy msgbox Route115_Text_CyndyPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route116/scripts.inc b/data/maps/Route116/scripts.inc index 2b974035a0..2a464d1996 100644 --- a/data/maps/Route116/scripts.inc +++ b/data/maps/Route116/scripts.inc @@ -9,12 +9,9 @@ Route116_MapScripts:: Route116_OnTransition: call_if_set FLAG_RECOVERED_DEVON_GOODS, Route116_EventScript_SetWandasBoyfriendPos - compare VAR_SHOULD_END_ABNORMAL_WEATHER, 1 - call_if_eq AbnormalWeather_EventScript_HideMapNamePopup - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_116_NORTH - call_if_eq AbnormalWeather_StartGroudonWeather - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_116_SOUTH - call_if_eq AbnormalWeather_StartGroudonWeather + call_if_eq VAR_SHOULD_END_ABNORMAL_WEATHER, 1, AbnormalWeather_EventScript_HideMapNamePopup + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_116_NORTH, AbnormalWeather_StartGroudonWeather + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_116_SOUTH, AbnormalWeather_StartGroudonWeather end Route116_EventScript_SetWandasBoyfriendPos:: @@ -22,10 +19,8 @@ Route116_EventScript_SetWandasBoyfriendPos:: return Route116_OnLoad: - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_116_NORTH - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute116North - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_116_SOUTH - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute116South + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_116_NORTH, AbnormalWeather_EventScript_PlaceTilesRoute116North + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_116_SOUTH, AbnormalWeather_EventScript_PlaceTilesRoute116South end Route116_OnFrame: @@ -62,18 +57,13 @@ Route116_EventScript_DevonEmployee:: Route116_EventScript_GiveRepeatBall:: setflag FLAG_MET_DEVON_EMPLOYEE giveitem ITEM_REPEAT_BALL - compare VAR_RESULT, FALSE - goto_if_eq Route116_EventScript_NoRoomForRepeatBall + goto_if_eq VAR_RESULT, FALSE, Route116_EventScript_NoRoomForRepeatBall msgbox Route116_Text_NewBallAvailableAtMart, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_NORTH - call_if_eq Route116_EventScript_DevonEmployeeExit - compare VAR_FACING, DIR_SOUTH - call_if_eq Route116_EventScript_DevonEmployeeExit - compare VAR_FACING, DIR_WEST - call_if_eq Route116_EventScript_DevonEmployeeExit - compare VAR_FACING, DIR_EAST - call_if_eq Route116_EventScript_DevonEmployeeExitEast + call_if_eq VAR_FACING, DIR_NORTH, Route116_EventScript_DevonEmployeeExit + call_if_eq VAR_FACING, DIR_SOUTH, Route116_EventScript_DevonEmployeeExit + call_if_eq VAR_FACING, DIR_WEST, Route116_EventScript_DevonEmployeeExit + call_if_eq VAR_FACING, DIR_EAST, Route116_EventScript_DevonEmployeeExitEast removeobject VAR_LAST_TALKED clearflag FLAG_HIDE_RUSTBORO_CITY_DEVON_CORP_3F_EMPLOYEE setflag FLAG_RECEIVED_REPEAT_BALL @@ -154,8 +144,8 @@ Route116_EventScript_Briney:: Route116_EventScript_BrineyTrigger:: lockall - applymovement LOCALID_BRINEY, Common_Movement_WalkInPlaceFastestRight - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_BRINEY, Common_Movement_WalkInPlaceFasterRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox Route116_Text_ScoundrelMadeOffWithPeeko, MSGBOX_DEFAULT setvar VAR_ROUTE116_STATE, 2 @@ -165,12 +155,10 @@ Route116_EventScript_BrineyTrigger:: Route116_EventScript_GlassesMan:: lock faceplayer - checkitem ITEM_BLACK_GLASSES, 1 - compare VAR_RESULT, TRUE - goto_if_eq Route116_EventScript_PlayerHasGlasses + checkitem ITEM_BLACK_GLASSES + goto_if_eq VAR_RESULT, TRUE, Route116_EventScript_PlayerHasGlasses specialvar VAR_RESULT, FoundBlackGlasses - compare VAR_RESULT, TRUE - goto_if_eq Route116_EventScript_FoundGlassesNotOnPlayer + goto_if_eq VAR_RESULT, TRUE, Route116_EventScript_FoundGlassesNotOnPlayer msgbox Route116_Text_CanYouHelpMeFindGlasses, MSGBOX_DEFAULT release end @@ -185,8 +173,7 @@ Route116_EventScript_PlayerHasGlasses:: msgbox Route116_Text_CanYouHelpMeFindGlasses, MSGBOX_DEFAULT msgbox Route116_Text_MayISeeThoseGlasses, MSGBOX_DEFAULT specialvar VAR_RESULT, FoundBlackGlasses - compare VAR_RESULT, TRUE - goto_if_eq Route116_EventScript_FoundGlassesOnPlayer + goto_if_eq VAR_RESULT, TRUE, Route116_EventScript_FoundGlassesOnPlayer msgbox Route116_Text_NotWhatImLookingFor, MSGBOX_DEFAULT release end @@ -199,14 +186,10 @@ Route116_EventScript_FoundGlassesOnPlayer:: Route116_EventScript_GlassesManExit:: delay 20 - compare VAR_FACING, DIR_NORTH - call_if_eq Route116_EventScript_GlassesManExitNormal - compare VAR_FACING, DIR_SOUTH - call_if_eq Route116_EventScript_GlassesManExitNormal - compare VAR_FACING, DIR_WEST - call_if_eq Route116_EventScript_GlassesManExitNormal - compare VAR_FACING, DIR_EAST - call_if_eq Route116_EventScript_GlassesManExitEast + call_if_eq VAR_FACING, DIR_NORTH, Route116_EventScript_GlassesManExitNormal + call_if_eq VAR_FACING, DIR_SOUTH, Route116_EventScript_GlassesManExitNormal + call_if_eq VAR_FACING, DIR_WEST, Route116_EventScript_GlassesManExitNormal + call_if_eq VAR_FACING, DIR_EAST, Route116_EventScript_GlassesManExitEast removeobject VAR_LAST_TALKED release end @@ -259,12 +242,10 @@ Route116_EventScript_Jose:: Route116_EventScript_Jerry:: trainerbattle_single TRAINER_JERRY_1, Route116_Text_JerryIntro, Route116_Text_JerryDefeat, Route116_EventScript_TryRegisterJerryAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route116_EventScript_RematchJerry + goto_if_eq VAR_RESULT, TRUE, Route116_EventScript_RematchJerry setvar VAR_0x8004, TRAINER_JERRY_1 specialvar VAR_RESULT, IsTrainerRegistered - compare VAR_RESULT, FALSE - goto_if_eq Route116_EventScript_TryRegisterJerry + goto_if_eq VAR_RESULT, FALSE, Route116_EventScript_TryRegisterJerry msgbox Route116_Text_JerryPostBattle, MSGBOX_DEFAULT release end @@ -312,12 +293,10 @@ Route116_EventScript_Janice:: Route116_EventScript_Karen:: trainerbattle_single TRAINER_KAREN_1, Route116_Text_KarenIntro, Route116_Text_KarenDefeat, Route116_EventScript_TryRegisterKarenAfterBattle specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route116_EventScript_RematchKaren + goto_if_eq VAR_RESULT, TRUE, Route116_EventScript_RematchKaren setvar VAR_0x8004, TRAINER_KAREN_1 specialvar VAR_RESULT, IsTrainerRegistered - compare VAR_RESULT, FALSE - goto_if_eq Route116_EventScript_TryRegisterKaren + goto_if_eq VAR_RESULT, FALSE, Route116_EventScript_TryRegisterKaren msgbox Route116_Text_KarenPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route117/scripts.inc b/data/maps/Route117/scripts.inc index f6ab885917..37d589ce31 100644 --- a/data/maps/Route117/scripts.inc +++ b/data/maps/Route117/scripts.inc @@ -41,8 +41,7 @@ Route117_EventScript_DayCareSign:: Route117_EventScript_Isaac:: trainerbattle_single TRAINER_ISAAC_1, Route117_Text_IsaacIntro, Route117_Text_IsaacDefeat, Route117_EventScript_RegisterIsaac specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route117_EventScript_RematchIsaac + goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchIsaac msgbox Route117_Text_IsaacPostBattle, MSGBOX_DEFAULT release end @@ -63,8 +62,7 @@ Route117_EventScript_RematchIsaac:: Route117_EventScript_Lydia:: trainerbattle_single TRAINER_LYDIA_1, Route117_Text_LydiaIntro, Route117_Text_LydiaDefeat, Route117_EventScript_RegisterLydia specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route117_EventScript_RematchLydia + goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchLydia msgbox Route117_Text_LydiaPostBattle, MSGBOX_DEFAULT release end @@ -85,8 +83,7 @@ Route117_EventScript_RematchLydia:: Route117_EventScript_Dylan:: trainerbattle_single TRAINER_DYLAN_1, Route117_Text_DylanIntro, Route117_Text_DylanDefeat, Route117_EventScript_RegisterDylan specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route117_EventScript_RematchDylan + goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchDylan msgbox Route117_Text_DylanPostBattle, MSGBOX_DEFAULT release end @@ -107,8 +104,7 @@ Route117_EventScript_RematchDylan:: Route117_EventScript_Maria:: trainerbattle_single TRAINER_MARIA_1, Route117_Text_MariaIntro, Route117_Text_MariaDefeat, Route117_EventScript_RegisterMaria specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route117_EventScript_RematchMaria + goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchMaria msgbox Route117_Text_MariaPostBattle, MSGBOX_DEFAULT release end @@ -134,8 +130,7 @@ Route117_EventScript_Derek:: Route117_EventScript_Anna:: trainerbattle_double TRAINER_ANNA_AND_MEG_1, Route117_Text_AnnaIntro, Route117_Text_AnnaDefeat, Route117_Text_AnnaNotEnoughMons, Route117_EventScript_RegisterAnna specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route117_EventScript_RematchAnna + goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchAnna msgbox Route117_Text_AnnaPostBattle, MSGBOX_DEFAULT release end @@ -154,8 +149,7 @@ Route117_EventScript_RematchAnna:: Route117_EventScript_Meg:: trainerbattle_double TRAINER_ANNA_AND_MEG_1, Route117_Text_MegIntro, Route117_Text_MegDefeat, Route117_Text_MegNotEnoughMons, Route117_EventScript_RegisterMeg specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route117_EventScript_RematchMeg + goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchMeg msgbox Route117_Text_MegPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route118/scripts.inc b/data/maps/Route118/scripts.inc index 723f3c0b54..92dd8847d4 100644 --- a/data/maps/Route118/scripts.inc +++ b/data/maps/Route118/scripts.inc @@ -8,19 +8,14 @@ Route118_MapScripts:: Route118_OnTransition: call GabbyAndTy_EventScript_UpdateLocation - compare VAR_SHOULD_END_ABNORMAL_WEATHER, 1 - call_if_eq AbnormalWeather_EventScript_HideMapNamePopup - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_118_EAST - call_if_eq AbnormalWeather_StartGroudonWeather - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_118_WEST - call_if_eq AbnormalWeather_StartGroudonWeather + call_if_eq VAR_SHOULD_END_ABNORMAL_WEATHER, 1, AbnormalWeather_EventScript_HideMapNamePopup + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_118_EAST, AbnormalWeather_StartGroudonWeather + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_118_WEST, AbnormalWeather_StartGroudonWeather end Route118_OnLoad: - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_118_EAST - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute118East - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_118_WEST - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute118West + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_118_EAST, AbnormalWeather_EventScript_PlaceTilesRoute118East + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_118_WEST, AbnormalWeather_EventScript_PlaceTilesRoute118West end Route118_OnFrame: @@ -32,10 +27,8 @@ Route118_EventScript_GoodRodFisherman:: faceplayer goto_if_set FLAG_RECEIVED_GOOD_ROD, Route118_EventScript_ReceivedGoodRod msgbox Route118_Text_YouAgreeGoodRodIsGood, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route118_EventScript_ReceiveGoodRod - compare VAR_RESULT, NO - goto_if_eq Route118_EventScript_DeclineGoodRod + goto_if_eq VAR_RESULT, YES, Route118_EventScript_ReceiveGoodRod + goto_if_eq VAR_RESULT, NO, Route118_EventScript_DeclineGoodRod end Route118_EventScript_ReceiveGoodRod:: @@ -103,12 +96,9 @@ Route118_EventScript_StevenTrigger:: delay 30 msgbox Route118_Text_StevenQuestions, MSGBOX_DEFAULT closemessage - compare VAR_0x8008, 0 - call_if_eq Route118_EventScript_StevenExit0 - compare VAR_0x8008, 1 - call_if_eq Route118_EventScript_StevenExit1 - compare VAR_0x8008, 2 - call_if_eq Route118_EventScript_StevenExit2 + call_if_eq VAR_0x8008, 0, Route118_EventScript_StevenExit0 + call_if_eq VAR_0x8008, 1, Route118_EventScript_StevenExit1 + call_if_eq VAR_0x8008, 2, Route118_EventScript_StevenExit2 setvar VAR_ROUTE118_STATE, 1 removeobject LOCALID_STEVEN releaseall @@ -134,7 +124,7 @@ Route118_EventScript_StevenExit2:: Route118_Movement_PlayerWatchStevenExit: delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right step_end Route118_Movement_StevenApproachLedge0: @@ -190,8 +180,7 @@ Route118_Movement_StevenExit2: Route118_EventScript_Rose:: trainerbattle_single TRAINER_ROSE_1, Route118_Text_RoseIntro, Route118_Text_RoseDefeat, Route118_EventScript_RegisterRose specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route118_EventScript_RematchRose + goto_if_eq VAR_RESULT, TRUE, Route118_EventScript_RematchRose msgbox Route118_Text_RosePostBattle, MSGBOX_DEFAULT release end @@ -222,8 +211,7 @@ Route118_EventScript_Wade:: Route118_EventScript_Dalton:: trainerbattle_single TRAINER_DALTON_1, Route118_Text_DaltonIntro, Route118_Text_DaltonDefeat, Route118_EventScript_RegisterDalton specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route118_EventScript_RematchDalton + goto_if_eq VAR_RESULT, TRUE, Route118_EventScript_RematchDalton msgbox Route118_Text_DaltonPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route119/scripts.inc b/data/maps/Route119/scripts.inc index 5e53f4ac8f..94094206c7 100644 --- a/data/maps/Route119/scripts.inc +++ b/data/maps/Route119/scripts.inc @@ -13,16 +13,14 @@ Route119_OnResume: Route119_EventScript_TryRemoveKecleon:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject VAR_LAST_TALKED return Route119_OnTransition: call Common_EventScript_SetupRivalGfxId call Common_EventScript_SetupRivalOnBikeGfxId - compare VAR_WEATHER_INSTITUTE_STATE, 1 - call_if_eq Route119_EventScript_MoveInstituteWorkersDownstairs + call_if_eq VAR_WEATHER_INSTITUTE_STATE, 1, Route119_EventScript_MoveInstituteWorkersDownstairs special SetRoute119Weather end @@ -46,30 +44,22 @@ Route119_EventScript_RivalEncounter:: lockall addobject LOCALID_RIVAL_ON_BIKE checkplayergender - compare VAR_RESULT, MALE - call_if_eq Route119_EventScript_PlayMayMusic - compare VAR_RESULT, FEMALE - call_if_eq Route119_EventScript_PlayBrendanMusic + call_if_eq VAR_RESULT, MALE, Route119_EventScript_PlayMayMusic + call_if_eq VAR_RESULT, FEMALE, Route119_EventScript_PlayBrendanMusic delay 65 - compare VAR_TEMP_1, 1 - call_if_eq Route119_EventScript_RivalEnter1 - compare VAR_TEMP_1, 2 - call_if_eq Route119_EventScript_RivalEnter2 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + call_if_eq VAR_TEMP_1, 1, Route119_EventScript_RivalEnter1 + call_if_eq VAR_TEMP_1, 2, Route119_EventScript_RivalEnter2 + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 30 - compare VAR_TEMP_1, 1 - call_if_eq Route119_EventScript_SetRivalPos1 - compare VAR_TEMP_1, 2 - call_if_eq Route119_EventScript_SetRivalPos2 + call_if_eq VAR_TEMP_1, 1, Route119_EventScript_SetRivalPos1 + call_if_eq VAR_TEMP_1, 2, Route119_EventScript_SetRivalPos2 removeobject LOCALID_RIVAL_ON_BIKE addobject LOCALID_RIVAL delay 30 checkplayergender - compare VAR_RESULT, MALE - goto_if_eq Route119_EventScript_BattleMay - compare VAR_RESULT, FEMALE - goto_if_eq Route119_EventScript_BattleBrendan + goto_if_eq VAR_RESULT, MALE, Route119_EventScript_BattleMay + goto_if_eq VAR_RESULT, FEMALE, Route119_EventScript_BattleBrendan releaseall end @@ -148,36 +138,28 @@ Route119_EventScript_GiveFlyHM:: Route119_EventScript_RivalExitScottArrive:: closemessage - compare VAR_TEMP_1, 1 - call_if_eq Route119_EventScript_SetRivalPos1 - compare VAR_TEMP_1, 2 - call_if_eq Route119_EventScript_SetRivalPos2 + call_if_eq VAR_TEMP_1, 1, Route119_EventScript_SetRivalPos1 + call_if_eq VAR_TEMP_1, 2, Route119_EventScript_SetRivalPos2 removeobject LOCALID_RIVAL addobject LOCALID_RIVAL_ON_BIKE delay 30 - compare VAR_TEMP_1, 1 - call_if_eq Route119_EventScript_RivalExit1 - compare VAR_TEMP_1, 2 - call_if_eq Route119_EventScript_RivalExit2 + call_if_eq VAR_TEMP_1, 1, Route119_EventScript_RivalExit1 + call_if_eq VAR_TEMP_1, 2, Route119_EventScript_RivalExit2 removeobject LOCALID_RIVAL_ON_BIKE setvar VAR_ROUTE119_STATE, 1 savebgm MUS_DUMMY fadedefaultbgm delay 60 - compare VAR_TEMP_1, 1 - call_if_eq Route119_EventScript_SetScottPos1 - compare VAR_TEMP_1, 2 - call_if_eq Route119_EventScript_SetScottPos2 + call_if_eq VAR_TEMP_1, 1, Route119_EventScript_SetScottPos1 + call_if_eq VAR_TEMP_1, 2, Route119_EventScript_SetScottPos2 addobject LOCALID_SCOTT applymovement LOCALID_SCOTT, Route119_Movement_ScottEnter waitmovement 0 addvar VAR_SCOTT_STATE, 1 msgbox Route119_Text_ScottWayToGoBeSeeingYou, MSGBOX_DEFAULT closemessage - compare VAR_TEMP_1, 1 - call_if_eq Route119_EventScript_ScottExit1 - compare VAR_TEMP_1, 2 - call_if_eq Route119_EventScript_ScottExit2 + call_if_eq VAR_TEMP_1, 1, Route119_EventScript_ScottExit1 + call_if_eq VAR_TEMP_1, 2, Route119_EventScript_ScottExit2 removeobject LOCALID_SCOTT releaseall end @@ -234,16 +216,16 @@ Route119_EventScript_SetRivalPos2:: Route119_Movement_PlayerWatchRivalExit1: delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right delay_8 - walk_in_place_fastest_up + walk_in_place_faster_up step_end Route119_Movement_PlayerWatchRivalExit2: delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left delay_8 - walk_in_place_fastest_up + walk_in_place_faster_up step_end Route119_Movement_RivalEnter1: @@ -372,8 +354,7 @@ Route119_EventScript_Kent:: Route119_EventScript_Jackson:: trainerbattle_single TRAINER_JACKSON_1, Route119_Text_JacksonIntro, Route119_Text_JacksonDefeat, Route119_EventScript_RegisterJackson specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route119_EventScript_RematchJackson + goto_if_eq VAR_RESULT, TRUE, Route119_EventScript_RematchJackson msgbox Route119_Text_JacksonPostBattle, MSGBOX_DEFAULT release end @@ -394,8 +375,7 @@ Route119_EventScript_RematchJackson:: Route119_EventScript_Catherine:: trainerbattle_single TRAINER_CATHERINE_1, Route119_Text_CatherineIntro, Route119_Text_CatherineDefeat, Route119_EventScript_RegisterCatherine specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route119_EventScript_RematchCatherine + goto_if_eq VAR_RESULT, TRUE, Route119_EventScript_RematchCatherine msgbox Route119_Text_CatherinePostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route119_House/scripts.inc b/data/maps/Route119_House/scripts.inc index 548b2c3948..9a44179a58 100644 --- a/data/maps/Route119_House/scripts.inc +++ b/data/maps/Route119_House/scripts.inc @@ -9,7 +9,7 @@ Route119_House_EventScript_Wingull:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox Route119_House_Text_Wingull, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/Route119_WeatherInstitute_1F/scripts.inc b/data/maps/Route119_WeatherInstitute_1F/scripts.inc index 33ba0b025d..cce41bfb5f 100644 --- a/data/maps/Route119_WeatherInstitute_1F/scripts.inc +++ b/data/maps/Route119_WeatherInstitute_1F/scripts.inc @@ -5,8 +5,7 @@ Route119_WeatherInstitute_1F_MapScripts:: .byte 0 Route119_WeatherInstitute_1F_OnTransition: - compare VAR_WEATHER_INSTITUTE_STATE, 0 - call_if_eq Route119_WeatherInstitute_1F_EventScript_SetLittleBoyPos + call_if_eq VAR_WEATHER_INSTITUTE_STATE, 0, Route119_WeatherInstitute_1F_EventScript_SetLittleBoyPos end Route119_WeatherInstitute_1F_EventScript_SetLittleBoyPos:: @@ -18,8 +17,7 @@ Route119_WeatherInstitute_1F_EventScript_LittleBoy:: lock faceplayer special GetPlayerBigGuyGirlString - compare VAR_WEATHER_INSTITUTE_STATE, 0 - goto_if_eq Route119_WeatherInstitute_1F_EventScript_LittleBoyTeamAquaHere + goto_if_eq VAR_WEATHER_INSTITUTE_STATE, 0, Route119_WeatherInstitute_1F_EventScript_LittleBoyTeamAquaHere msgbox Route119_WeatherInstitute_1F_Text_WowYoureStrong, MSGBOX_DEFAULT release end @@ -36,8 +34,7 @@ Route119_WeatherInstitute_1F_EventScript_InstituteWorker1:: setvar VAR_0x8004, 0 call_if_set FLAG_DEFEATED_KYOGRE, Route119_WeatherInstitute_1F_EventScript_LegendaryDefeated call_if_set FLAG_DEFEATED_GROUDON, Route119_WeatherInstitute_1F_EventScript_LegendaryDefeated - compare VAR_0x8004, 2 @ Both defeated - goto_if_eq Route119_WeatherInstitute_1F_EventScript_StudyingRain + goto_if_eq VAR_0x8004, 2, Route119_WeatherInstitute_1F_EventScript_StudyingRain @ Both defeated msgbox Route119_WeatherInstitute_1F_Text_NoticingAbnormalWeather, MSGBOX_DEFAULT release end diff --git a/data/maps/Route119_WeatherInstitute_2F/scripts.inc b/data/maps/Route119_WeatherInstitute_2F/scripts.inc index af281ea0a5..2060cb03c9 100644 --- a/data/maps/Route119_WeatherInstitute_2F/scripts.inc +++ b/data/maps/Route119_WeatherInstitute_2F/scripts.inc @@ -10,10 +10,8 @@ Route119_WeatherInstitute_2F_MapScripts:: .byte 0 Route119_WeatherInstitute_2F_OnTransition: - compare VAR_WEATHER_INSTITUTE_STATE, 0 - call_if_eq Route119_WeatherInstitute_2F_EventScript_SetScientistPosAquaHere - compare VAR_WEATHER_INSTITUTE_STATE, 1 - call_if_eq Route119_WeatherInstitute_2F_EventScript_SetScientistPosAquaGone + call_if_eq VAR_WEATHER_INSTITUTE_STATE, 0, Route119_WeatherInstitute_2F_EventScript_SetScientistPosAquaHere + call_if_eq VAR_WEATHER_INSTITUTE_STATE, 1, Route119_WeatherInstitute_2F_EventScript_SetScientistPosAquaGone call_if_set FLAG_SYS_GAME_CLEAR, Route119_WeatherInstitute_2F_EventScript_SetScientistPosGameClear end @@ -92,18 +90,15 @@ Route119_WeatherInstitute_2F_EventScript_ReceiveCastform:: msgbox Route119_WeatherInstitute_2F_Text_ThanksPleaseTakePokemon, MSGBOX_DEFAULT setvar VAR_TEMP_1, SPECIES_CASTFORM givemon SPECIES_CASTFORM, 25, ITEM_MYSTIC_WATER - compare VAR_RESULT, 0 - goto_if_eq Route119_WeatherInstitute_2F_EventScript_ReceiveCastformParty - compare VAR_RESULT, 1 - goto_if_eq Route119_WeatherInstitute_2F_EventScript_ReceiveCastformPC + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, Route119_WeatherInstitute_2F_EventScript_ReceiveCastformParty + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, Route119_WeatherInstitute_2F_EventScript_ReceiveCastformPC goto Common_EventScript_NoMoreRoomForPokemon end Route119_WeatherInstitute_2F_EventScript_ReceiveCastformParty:: call Route119_WeatherInstitute_2F_EventScript_ReceivedCastformFanfare msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route119_WeatherInstitute_2F_EventScript_ExplainCastform + goto_if_eq VAR_RESULT, NO, Route119_WeatherInstitute_2F_EventScript_ExplainCastform call Common_EventScript_GetGiftMonPartySlot call Common_EventScript_NameReceivedPartyMon goto Route119_WeatherInstitute_2F_EventScript_ExplainCastform @@ -112,8 +107,7 @@ Route119_WeatherInstitute_2F_EventScript_ReceiveCastformParty:: Route119_WeatherInstitute_2F_EventScript_ReceiveCastformPC:: call Route119_WeatherInstitute_2F_EventScript_ReceivedCastformFanfare msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route119_WeatherInstitute_2F_EventScript_SendCastformToPC + goto_if_eq VAR_RESULT, NO, Route119_WeatherInstitute_2F_EventScript_SendCastformToPC call Common_EventScript_NameReceivedBoxMon goto Route119_WeatherInstitute_2F_EventScript_SendCastformToPC end @@ -128,7 +122,7 @@ Route119_WeatherInstitute_2F_EventScript_ReceivedCastformFanfare:: message Route119_WeatherInstitute_2F_Text_PlayerReceivedCastform waitmessage waitfanfare - bufferspeciesname 0, SPECIES_CASTFORM + bufferspeciesname STR_VAR_1, SPECIES_CASTFORM return Route119_WeatherInstitute_2F_EventScript_ExplainCastform:: @@ -147,12 +141,10 @@ Route119_WeatherInstitute_2F_EventScript_TryStartAbnormalWeather:: setvar VAR_0x8004, 0 call_if_set FLAG_DEFEATED_KYOGRE, Route119_WeatherInstitute_2F_EventScript_LegendaryDefeated call_if_set FLAG_DEFEATED_GROUDON, Route119_WeatherInstitute_2F_EventScript_LegendaryDefeated - compare VAR_0x8004, 2 @ Both defeated - goto_if_eq Route119_WeatherInstitute_2F_EventScript_NoAbnormalWeather + goto_if_eq VAR_0x8004, 2, Route119_WeatherInstitute_2F_EventScript_NoAbnormalWeather @ Both defeated call_if_unset FLAG_TEMP_2, Route119_WeatherInstitute_2F_EventScript_CreateAbnormalWeather specialvar VAR_RESULT, GetAbnormalWeatherMapNameAndType - compare VAR_RESULT, 1 - goto_if_eq Route119_WeatherInstitute_2F_EventScript_KyogreWeather + goto_if_eq VAR_RESULT, 1, Route119_WeatherInstitute_2F_EventScript_KyogreWeather msgbox Route119_WeatherInstitute_2F_Text_GroudonWeather, MSGBOX_DEFAULT release end @@ -197,12 +189,12 @@ Route119_WeatherInstitute_2F_Movement_ShovePlayerOutOfWay: delay_16 delay_16 ride_water_current_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end Route119_WeatherInstitute_2F_Movement_PlayerReturnToPosition: slide_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end Route119_WeatherInstitute_2F_Movement_ScientistApproachPlayer: diff --git a/data/maps/Route120/scripts.inc b/data/maps/Route120/scripts.inc index f073958246..a0bfbc60c3 100644 --- a/data/maps/Route120/scripts.inc +++ b/data/maps/Route120/scripts.inc @@ -13,32 +13,24 @@ Route120_OnResume: end Route120_EventScript_RemoveKecleonObject:: - compare VAR_0x8009, 0 - call_if_eq Route120_EventScript_RemoveBridgeKecleon - compare VAR_0x8009, 1 - call_if_eq Route120_EventScript_RemoveKecleon - compare VAR_0x8009, 2 - call_if_eq Route120_EventScript_RemoveKecleon - compare VAR_0x8009, 3 - call_if_eq Route120_EventScript_RemoveKecleon - compare VAR_0x8009, 4 - call_if_eq Route120_EventScript_RemoveKecleon - compare VAR_0x8009, 5 - call_if_eq Route120_EventScript_RemoveKecleon + call_if_eq VAR_0x8009, 0, Route120_EventScript_RemoveBridgeKecleon + call_if_eq VAR_0x8009, 1, Route120_EventScript_RemoveKecleon + call_if_eq VAR_0x8009, 2, Route120_EventScript_RemoveKecleon + call_if_eq VAR_0x8009, 3, Route120_EventScript_RemoveKecleon + call_if_eq VAR_0x8009, 4, Route120_EventScript_RemoveKecleon + call_if_eq VAR_0x8009, 5, Route120_EventScript_RemoveKecleon return Route120_EventScript_RemoveBridgeKecleon:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject LOCALID_BRIDGE_KECLEON removeobject LOCALID_BRIDGE_KECLEON_SHADOW return Route120_EventScript_RemoveKecleon:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject VAR_LAST_TALKED return @@ -49,15 +41,15 @@ Route120_OnLoad: end Route120_EventScript_CloseAncientTomb:: - setmetatile 7, 54, METATILE_General_RockWall_RockBase, 1 - setmetatile 7, 55, METATILE_General_RockWall_SandBase, 1 + setmetatile 7, 54, METATILE_General_RockWall_RockBase, TRUE + setmetatile 7, 55, METATILE_General_RockWall_SandBase, TRUE return Route120_EventScript_SetBridgeClearMetatiles:: - setmetatile 13, 15, METATILE_Fortree_WoodBridge1_Top, 0 - setmetatile 12, 16, METATILE_Fortree_WoodBridge1_Bottom, 0 - setmetatile 12, 17, METATILE_General_ReflectiveWater, 0 - setmetatile 13, 17, METATILE_General_ReflectiveWater, 0 + setmetatile 13, 15, METATILE_Fortree_WoodBridge1_Top, FALSE + setmetatile 12, 16, METATILE_Fortree_WoodBridge1_Bottom, FALSE + setmetatile 12, 17, METATILE_General_ReflectiveWater, FALSE + setmetatile 13, 17, METATILE_General_ReflectiveWater, FALSE return Route120_EventScript_SetBridgeKecleonMovement:: @@ -71,12 +63,9 @@ Route120_OnTransition: Route120_EventScript_SetWeather:: getplayerxy VAR_TEMP_0, VAR_TEMP_1 - compare VAR_TEMP_1, 14 - goto_if_le Route120_EventScript_SetSunnyWeather - compare VAR_TEMP_1, 60 - goto_if_le Route120_EventScript_TrySetRainyWeather - compare VAR_TEMP_1, 61 - goto_if_ge Route120_EventScript_SetCloudyWeather + goto_if_le VAR_TEMP_1, 14, Route120_EventScript_SetSunnyWeather + goto_if_le VAR_TEMP_1, 60, Route120_EventScript_TrySetRainyWeather + goto_if_ge VAR_TEMP_1, 61, Route120_EventScript_SetCloudyWeather return Route120_EventScript_SetCloudyWeather:: @@ -88,10 +77,8 @@ Route120_EventScript_SetSunnyWeather:: return Route120_EventScript_TrySetRainyWeather:: - compare VAR_TEMP_0, 7 - goto_if_le Route120_EventScript_SetRainyWeather - compare VAR_TEMP_0, 19 - goto_if_le Route120_EventScript_SetSunnyWeather + goto_if_le VAR_TEMP_0, 7, Route120_EventScript_SetRainyWeather + goto_if_le VAR_TEMP_0, 19, Route120_EventScript_SetSunnyWeather goto Route120_EventScript_SetRainyWeather end @@ -105,10 +92,8 @@ Route120_EventScript_BerryBeauty:: dotimebasedevents goto_if_set FLAG_DAILY_ROUTE_120_RECEIVED_BERRY, Route120_EventScript_ReceivedBerry msgbox Route120_Text_BerriesExpressionOfLoveIsntIt, MSGBOX_YESNO - compare VAR_RESULT, YES - call_if_eq Route120_EventScript_BerryLove - compare VAR_RESULT, NO - call_if_eq Route120_EventScript_BerryNotLove + call_if_eq VAR_RESULT, YES, Route120_EventScript_BerryLove + call_if_eq VAR_RESULT, NO, Route120_EventScript_BerryNotLove specialvar VAR_RESULT, GetPlayerTrainerIdOnesDigit switch VAR_RESULT case 0, Route120_EventScript_GiveFigyBerry @@ -150,8 +135,7 @@ Route120_EventScript_GiveIapapaBerry:: Route120_EventScript_GiveBerry:: giveitem VAR_0x8004 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_DAILY_ROUTE_120_RECEIVED_BERRY msgbox Route120_Text_BerryIsRareRaiseItWithCare, MSGBOX_DEFAULT release @@ -175,8 +159,7 @@ Route120_EventScript_Steven:: faceplayer goto_if_set FLAG_NOT_READY_FOR_BATTLE_ROUTE_120, Route120_EventScript_StevenAskReadyForBattle msgbox Route120_Text_StevenGreeting, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route120_EventScript_StevenNotReady + goto_if_eq VAR_RESULT, NO, Route120_EventScript_StevenNotReady goto Route120_EventScript_StevenBattleKecleon end @@ -188,43 +171,37 @@ Route120_EventScript_StevenNotReady:: Route120_EventScript_StevenAskReadyForBattle:: msgbox Route120_Text_StevenReadyForBattle, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route120_EventScript_StevenNotReady + goto_if_eq VAR_RESULT, NO, Route120_EventScript_StevenNotReady goto Route120_EventScript_StevenBattleKecleon end Route120_EventScript_StevenBattleKecleon:: msgbox Route120_Text_StevenShowMeYourPower, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_NORTH - call_if_eq Route120_EventScript_PlayerApproachKecleonNorth - compare VAR_FACING, DIR_WEST - call_if_eq Route120_EventScript_PlayerApproachKecleonWest - applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFastestLeft + call_if_eq VAR_FACING, DIR_NORTH, Route120_EventScript_PlayerApproachKecleonNorth + call_if_eq VAR_FACING, DIR_WEST, Route120_EventScript_PlayerApproachKecleonWest + applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 delay 20 msgbox Route120_Text_StevenUsedDevonScope, MSGBOX_DEFAULT closemessage - applymovement LOCALID_BRIDGE_KECLEON, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_BRIDGE_KECLEON, Common_Movement_WalkInPlaceFasterRight waitmovement 0 applymovement LOCALID_BRIDGE_KECLEON, Movement_KecleonAppears waitmovement 0 waitse - playmoncry SPECIES_KECLEON, 2 + playmoncry SPECIES_KECLEON, CRY_MODE_ENCOUNTER delay 40 waitmoncry - setwildbattle SPECIES_KECLEON, 30, ITEM_NONE + setwildbattle SPECIES_KECLEON, 30 setvar VAR_0x8009, 0 setflag FLAG_SYS_CTRL_OBJ_DELETE dowildbattle clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq Route120_EventScript_RemoveBridgeKecleonPostBattle - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq Route120_EventScript_RemoveBridgeKecleonPostBattle - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq Route120_EventScript_RemoveBridgeKecleonPostBattle + goto_if_eq VAR_RESULT, B_OUTCOME_WON, Route120_EventScript_RemoveBridgeKecleonPostBattle + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, Route120_EventScript_RemoveBridgeKecleonPostBattle + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, Route120_EventScript_RemoveBridgeKecleonPostBattle goto Route120_EventScript_StevenGiveDeconScope end @@ -237,15 +214,15 @@ Route120_EventScript_RemoveBridgeKecleonPostBattle:: end Route120_EventScript_StevenGiveDeconScope:: - applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFastestDown - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFasterDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox Route120_Text_StevenGiveDevonScope, MSGBOX_DEFAULT giveitem ITEM_DEVON_SCOPE setflag FLAG_RECEIVED_DEVON_SCOPE msgbox Route120_Text_StevenGoodbye, MSGBOX_DEFAULT closemessage - applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 50 setfieldeffectargument 0, 1 @@ -253,16 +230,16 @@ Route120_EventScript_StevenGiveDeconScope:: delay 15 removeobject LOCALID_STEVEN waitfieldeffect FLDEFF_NPCFLY_OUT - setmetatile 13, 15, METATILE_Fortree_WoodBridge1_Top, 0 - setmetatile 12, 16, METATILE_Fortree_WoodBridge1_Bottom, 0 - setmetatile 12, 17, METATILE_General_ReflectiveWater, 0 - setmetatile 13, 17, METATILE_General_ReflectiveWater, 0 + setmetatile 13, 15, METATILE_Fortree_WoodBridge1_Top, FALSE + setmetatile 12, 16, METATILE_Fortree_WoodBridge1_Bottom, FALSE + setmetatile 12, 17, METATILE_General_ReflectiveWater, FALSE + setmetatile 13, 17, METATILE_General_ReflectiveWater, FALSE special DrawWholeMapView release end Route120_EventScript_PlayerApproachKecleonNorth:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return @@ -296,8 +273,7 @@ Route120_EventScript_Colin:: Route120_EventScript_Robert:: trainerbattle_single TRAINER_ROBERT_1, Route120_Text_RobertIntro, Route120_Text_RobertDefeat, Route120_EventScript_RegisterRobert specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route120_EventScript_RematchRobert + goto_if_eq VAR_RESULT, TRUE, Route120_EventScript_RematchRobert msgbox Route120_Text_RobertPostBattle, MSGBOX_DEFAULT release end @@ -328,8 +304,7 @@ Route120_EventScript_Jenna:: Route120_EventScript_Jeffrey:: trainerbattle_single TRAINER_JEFFREY_1, Route120_Text_JeffreyIntro, Route120_Text_JeffreyDefeat, Route120_EventScript_RegisterJeffrey specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route120_EventScript_RematchJeffrey + goto_if_eq VAR_RESULT, TRUE, Route120_EventScript_RematchJeffrey msgbox Route120_Text_JeffreyPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route121/scripts.inc b/data/maps/Route121/scripts.inc index 3bd0a42ee1..317328825c 100644 --- a/data/maps/Route121/scripts.inc +++ b/data/maps/Route121/scripts.inc @@ -77,8 +77,7 @@ Route121_EventScript_Vanessa:: Route121_EventScript_Walter:: trainerbattle_single TRAINER_WALTER_1, Route121_Text_WalterIntro, Route121_Text_WalterDefeat, Route121_EventScript_RegisterWalter specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route121_EventScript_RematchWalter + goto_if_eq VAR_RESULT, TRUE, Route121_EventScript_RematchWalter msgbox Route121_Text_WalterPostBattle, MSGBOX_DEFAULT release end @@ -114,8 +113,7 @@ Route121_EventScript_Joy:: Route121_EventScript_Jessica:: trainerbattle_single TRAINER_JESSICA_1, Route121_Text_JessicaIntro, Route121_Text_JessicaDefeat, Route121_EventScript_RegisterJessica specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route121_EventScript_RematchJessica + goto_if_eq VAR_RESULT, TRUE, Route121_EventScript_RematchJessica msgbox Route121_Text_JessicaPostBattle, MSGBOX_DEFAULT release end @@ -156,8 +154,7 @@ Route121_EventScript_Marcel:: Route121_EventScript_Cristin:: trainerbattle_single TRAINER_CRISTIN_1, Route121_Text_CristinIntro, Route121_Text_CristinDefeat, Route121_EventScript_RegisterCristin specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route121_EventScript_RematchCristin + goto_if_eq VAR_RESULT, TRUE, Route121_EventScript_RematchCristin msgbox Route121_Text_CristinPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route121_SafariZoneEntrance/scripts.inc b/data/maps/Route121_SafariZoneEntrance/scripts.inc index 6945f69dcb..92fdc2d0bd 100644 --- a/data/maps/Route121_SafariZoneEntrance/scripts.inc +++ b/data/maps/Route121_SafariZoneEntrance/scripts.inc @@ -33,8 +33,7 @@ Route121_SafariZoneEntrance_EventScript_InfoAttendant:: lock faceplayer msgbox Route121_SafariZoneEntrance_Text_WelcomeFirstTime, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route121_SafariZoneEntrance_EventScript_FirstTimeInfo + goto_if_eq VAR_RESULT, YES, Route121_SafariZoneEntrance_EventScript_FirstTimeInfo msgbox Route121_SafariZoneEntrance_Text_ComeInAndEnjoy, MSGBOX_DEFAULT release end @@ -46,28 +45,25 @@ Route121_SafariZoneEntrance_EventScript_FirstTimeInfo:: Route121_SafariZoneEntrance_EventScript_EntranceCounterTrigger:: lockall - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 - showmoneybox 0, 0, 0 + showmoneybox 0, 0 msgbox Route121_SafariZoneEntrance_Text_WouldYouLikeToPlay, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route121_SafariZoneEntrance_EventScript_TryEnterSafariZone + goto_if_eq VAR_RESULT, YES, Route121_SafariZoneEntrance_EventScript_TryEnterSafariZone msgbox Route121_SafariZoneEntrance_Text_PlayAnotherTime, MSGBOX_DEFAULT goto Route121_SafariZoneEntrance_EventScript_MovePlayerBackFromCounter end Route121_SafariZoneEntrance_EventScript_TryEnterSafariZone:: - checkitem ITEM_POKEBLOCK_CASE, 1 - compare VAR_RESULT, 0 - goto_if_eq Route121_SafariZoneEntrance_EventScript_NoPokeblockCase + checkitem ITEM_POKEBLOCK_CASE + goto_if_eq VAR_RESULT, 0, Route121_SafariZoneEntrance_EventScript_NoPokeblockCase call Route121_SafariZoneEntrance_EventScript_CheckHasRoomForPokemon - checkmoney 500, 0 - compare VAR_RESULT, 0 - goto_if_eq Route121_SafariZoneEntrance_EventScript_NotEnoughMoney + checkmoney 500 + goto_if_eq VAR_RESULT, 0, Route121_SafariZoneEntrance_EventScript_NotEnoughMoney playse SE_SHOP msgbox Route121_SafariZoneEntrance_Text_ThatWillBe500Please, MSGBOX_DEFAULT - removemoney 500, 0 - updatemoneybox 0, 0 + removemoney 500 + updatemoneybox msgbox Route121_SafariZoneEntrance_Text_HereAreYourSafariBalls, MSGBOX_DEFAULT playfanfare MUS_OBTAIN_ITEM message Route121_SafariZoneEntrance_Text_Received30SafariBalls @@ -80,17 +76,15 @@ Route121_SafariZoneEntrance_EventScript_TryEnterSafariZone:: special EnterSafariMode setvar VAR_SAFARI_ZONE_STATE, 2 clearflag FLAG_GOOD_LUCK_SAFARI_ZONE - warp MAP_SAFARI_ZONE_SOUTH, 255, 32, 33 + warp MAP_SAFARI_ZONE_SOUTH, 32, 33 waitstate end Route121_SafariZoneEntrance_EventScript_CheckHasRoomForPokemon:: getpartysize - compare VAR_RESULT, PARTY_SIZE - goto_if_ne Route121_SafariZoneEntrance_EventScript_HasRoomForPokemon + goto_if_ne VAR_RESULT, PARTY_SIZE, Route121_SafariZoneEntrance_EventScript_HasRoomForPokemon specialvar VAR_RESULT, ScriptCheckFreePokemonStorageSpace - compare VAR_RESULT, 1 - goto_if_eq Route121_SafariZoneEntrance_EventScript_HasRoomForPokemon + goto_if_eq VAR_RESULT, 1, Route121_SafariZoneEntrance_EventScript_HasRoomForPokemon msgbox Route121_SafariZoneEntrance_Text_PCIsFull, MSGBOX_DEFAULT goto Route121_SafariZoneEntrance_EventScript_MovePlayerBackFromCounter end diff --git a/data/maps/Route123/scripts.inc b/data/maps/Route123/scripts.inc index 6ce0de6544..fe63661261 100644 --- a/data/maps/Route123/scripts.inc +++ b/data/maps/Route123/scripts.inc @@ -12,12 +12,10 @@ Route123_EventScript_GigaDrainGirl:: goto_if_set FLAG_RECEIVED_TM19, Route123_EventScript_ReceivedGigaDrain msgbox Route123_Text_LoveGrassMonsHaveAny, MSGBOX_DEFAULT special IsGrassTypeInParty - compare VAR_RESULT, FALSE - goto_if_eq Route123_EventScript_NoGrassMons + goto_if_eq VAR_RESULT, FALSE, Route123_EventScript_NoGrassMons msgbox Route123_Text_YouLikeGrassMonsTooHaveThis, MSGBOX_DEFAULT giveitem ITEM_TM19 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM19 msgbox Route123_Text_CheckTreesWithMyGrassMon, MSGBOX_DEFAULT release @@ -62,8 +60,7 @@ Route123_EventScript_Violet:: Route123_EventScript_Cameron:: trainerbattle_single TRAINER_CAMERON_1, Route123_Text_CameronIntro, Route123_Text_CameronDefeat, Route123_EventScript_RegisterCameron specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route123_EventScript_RematchCameron + goto_if_eq VAR_RESULT, TRUE, Route123_EventScript_RematchCameron msgbox Route123_Text_CameronPostBattle, MSGBOX_DEFAULT release end @@ -84,8 +81,7 @@ Route123_EventScript_RematchCameron:: Route123_EventScript_Jacki:: trainerbattle_single TRAINER_JACKI_1, Route123_Text_JackiIntro, Route123_Text_JackiDefeat, Route123_EventScript_RegisterJacki specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route123_EventScript_RematchJacki + goto_if_eq VAR_RESULT, TRUE, Route123_EventScript_RematchJacki msgbox Route123_Text_JackiPostBattle, MSGBOX_DEFAULT release end @@ -156,8 +152,7 @@ Route123_EventScript_Davis:: Route123_EventScript_Fernando:: trainerbattle_single TRAINER_FERNANDO_1, Route123_Text_FernandoIntro, Route123_Text_FernandoDefeat, Route123_EventScript_RegisterFernando specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route123_EventScript_RematchFernando + goto_if_eq VAR_RESULT, TRUE, Route123_EventScript_RematchFernando msgbox Route123_Text_FernandoPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route123_BerryMastersHouse/scripts.inc b/data/maps/Route123_BerryMastersHouse/scripts.inc index a9fbfd9d0a..bdc0b0456b 100644 --- a/data/maps/Route123_BerryMastersHouse/scripts.inc +++ b/data/maps/Route123_BerryMastersHouse/scripts.inc @@ -16,16 +16,14 @@ Route123_BerryMastersHouse_EventScript_BerryMaster:: addvar VAR_RESULT, NUM_BERRY_MASTER_BERRIES_SKIPPED addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem VAR_RESULT - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_DAILY_BERRY_MASTER_RECEIVED_BERRY msgbox Route123_BerryMastersHouse_Text_WhyBeStingyTakeAnother, MSGBOX_DEFAULT random NUM_BERRY_MASTER_BERRIES addvar VAR_RESULT, NUM_BERRY_MASTER_BERRIES_SKIPPED addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem VAR_RESULT - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox Route123_BerryMastersHouse_Text_VisitPrettyPetalFlowerShop, MSGBOX_DEFAULT release end @@ -45,10 +43,8 @@ Route123_BerryMastersHouse_EventScript_BerryMastersWife:: call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, TRUE - goto_if_eq Route123_BerryMastersHouse_EventScript_GavePhrase - compare VAR_RESULT, FALSE - goto_if_eq Route123_BerryMastersHouse_EventScript_CancelPhrase + goto_if_eq VAR_RESULT, TRUE, Route123_BerryMastersHouse_EventScript_GavePhrase + goto_if_eq VAR_RESULT, FALSE, Route123_BerryMastersHouse_EventScript_CancelPhrase end Route123_BerryMastersHouse_EventScript_CancelPhrase:: @@ -58,18 +54,12 @@ Route123_BerryMastersHouse_EventScript_CancelPhrase:: end Route123_BerryMastersHouse_EventScript_GavePhrase:: - compare VAR_0x8004, NOT_SPECIAL_PHRASE - goto_if_eq Route123_BerryMastersHouse_EventScript_GiveNormalBerry - compare VAR_0x8004, PHRASE_GREAT_BATTLE - goto_if_eq Route123_BerryMastersHouse_EventScript_GiveSpelonBerry - compare VAR_0x8004, PHRASE_CHALLENGE_CONTEST - goto_if_eq Route123_BerryMastersHouse_EventScript_GivePamtreBerry - compare VAR_0x8004, PHRASE_OVERWHELMING_LATIAS - goto_if_eq Route123_BerryMastersHouse_EventScript_GiveWatmelBerry - compare VAR_0x8004, PHRASE_COOL_LATIOS - goto_if_eq Route123_BerryMastersHouse_EventScript_GiveDurinBerry - compare VAR_0x8004, PHRASE_SUPER_HUSTLE - goto_if_eq Route123_BerryMastersHouse_EventScript_GiveBelueBerry + goto_if_eq VAR_0x8004, NOT_SPECIAL_PHRASE, Route123_BerryMastersHouse_EventScript_GiveNormalBerry + goto_if_eq VAR_0x8004, PHRASE_GREAT_BATTLE, Route123_BerryMastersHouse_EventScript_GiveSpelonBerry + goto_if_eq VAR_0x8004, PHRASE_CHALLENGE_CONTEST, Route123_BerryMastersHouse_EventScript_GivePamtreBerry + goto_if_eq VAR_0x8004, PHRASE_OVERWHELMING_LATIAS, Route123_BerryMastersHouse_EventScript_GiveWatmelBerry + goto_if_eq VAR_0x8004, PHRASE_COOL_LATIOS, Route123_BerryMastersHouse_EventScript_GiveDurinBerry + goto_if_eq VAR_0x8004, PHRASE_SUPER_HUSTLE, Route123_BerryMastersHouse_EventScript_GiveBelueBerry end Route123_BerryMastersHouse_EventScript_GiveNormalBerry:: @@ -77,8 +67,7 @@ Route123_BerryMastersHouse_EventScript_GiveNormalBerry:: random NUM_BERRY_MASTER_WIFE_BERRIES addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem VAR_RESULT - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull goto Route123_BerryMastersHouse_EventScript_GaveBerry release end @@ -87,8 +76,7 @@ Route123_BerryMastersHouse_EventScript_GiveSpelonBerry:: goto_if_set FLAG_RECEIVED_SPELON_BERRY, Route123_BerryMastersHouse_EventScript_GiveNormalBerry msgbox Route123_BerryMastersHouse_Text_InspirationalTakeThis, MSGBOX_DEFAULT giveitem ITEM_SPELON_BERRY - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_SPELON_BERRY goto Route123_BerryMastersHouse_EventScript_GaveBerry end @@ -97,8 +85,7 @@ Route123_BerryMastersHouse_EventScript_GivePamtreBerry:: goto_if_set FLAG_RECEIVED_PAMTRE_BERRY, Route123_BerryMastersHouse_EventScript_GiveNormalBerry msgbox Route123_BerryMastersHouse_Text_InspirationalTakeThis, MSGBOX_DEFAULT giveitem ITEM_PAMTRE_BERRY - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_PAMTRE_BERRY goto Route123_BerryMastersHouse_EventScript_GaveBerry end @@ -107,8 +94,7 @@ Route123_BerryMastersHouse_EventScript_GiveWatmelBerry:: goto_if_set FLAG_RECEIVED_WATMEL_BERRY, Route123_BerryMastersHouse_EventScript_GiveNormalBerry msgbox Route123_BerryMastersHouse_Text_InspirationalTakeThis, MSGBOX_DEFAULT giveitem ITEM_WATMEL_BERRY - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_WATMEL_BERRY goto Route123_BerryMastersHouse_EventScript_GaveBerry end @@ -117,8 +103,7 @@ Route123_BerryMastersHouse_EventScript_GiveDurinBerry:: goto_if_set FLAG_RECEIVED_DURIN_BERRY, Route123_BerryMastersHouse_EventScript_GiveNormalBerry msgbox Route123_BerryMastersHouse_Text_InspirationalTakeThis, MSGBOX_DEFAULT giveitem ITEM_DURIN_BERRY - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_DURIN_BERRY goto Route123_BerryMastersHouse_EventScript_GaveBerry end @@ -127,8 +112,7 @@ Route123_BerryMastersHouse_EventScript_GiveBelueBerry:: goto_if_set FLAG_RECEIVED_BELUE_BERRY, Route123_BerryMastersHouse_EventScript_GiveNormalBerry msgbox Route123_BerryMastersHouse_Text_InspirationalTakeThis, MSGBOX_DEFAULT giveitem ITEM_BELUE_BERRY - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_BELUE_BERRY goto Route123_BerryMastersHouse_EventScript_GaveBerry end diff --git a/data/maps/Route124/scripts.inc b/data/maps/Route124/scripts.inc index d1cd8ef8c2..108b915da2 100644 --- a/data/maps/Route124/scripts.inc +++ b/data/maps/Route124/scripts.inc @@ -23,8 +23,7 @@ Route124_EventScript_Roland:: Route124_EventScript_Jenny:: trainerbattle_single TRAINER_JENNY_1, Route124_Text_JennyIntro, Route124_Text_JennyDefeat, Route124_EventScript_RegisterJenny specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route124_EventScript_RematchJenny + goto_if_eq VAR_RESULT, TRUE, Route124_EventScript_RematchJenny msgbox Route124_Text_JennyPostBattle, MSGBOX_DEFAULT release end @@ -55,8 +54,7 @@ Route124_EventScript_Chad:: Route124_EventScript_Lila:: trainerbattle_double TRAINER_LILA_AND_ROY_1, Route124_Text_LilaIntro, Route124_Text_LilaDefeat, Route124_Text_LilaNotEnoughMons, Route124_EventScript_RegisterLila specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route124_EventScript_RematchLila + goto_if_eq VAR_RESULT, TRUE, Route124_EventScript_RematchLila msgbox Route124_Text_LilaPostBattle, MSGBOX_DEFAULT release end @@ -75,8 +73,7 @@ Route124_EventScript_RematchLila:: Route124_EventScript_Roy:: trainerbattle_double TRAINER_LILA_AND_ROY_1, Route124_Text_RoyIntro, Route124_Text_RoyDefeat, Route124_Text_RoyNotEnoughMons, Route124_EventScript_RegisterRoy specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route124_EventScript_RematchRoy + goto_if_eq VAR_RESULT, TRUE, Route124_EventScript_RematchRoy msgbox Route124_Text_RoyPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc b/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc index 63bee6ed5b..b100438f55 100644 --- a/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc +++ b/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc @@ -22,25 +22,20 @@ Route124_DivingTreasureHuntersHouse_EventScript_SkipGreeting:: Route124_DivingTreasureHuntersHouse_EventScript_CheckPlayerHasShard:: call Route124_DivingTreasureHuntersHouse_EventScript_GetPlayersShards - compare VAR_TEMP_1, 0 - goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_NoShards + goto_if_eq VAR_TEMP_1, 0, Route124_DivingTreasureHuntersHouse_EventScript_NoShards goto Route124_DivingTreasureHuntersHouse_EventScript_HasShard end Route124_DivingTreasureHuntersHouse_EventScript_GetPlayersShards:: setvar VAR_TEMP_1, 0 - checkitem ITEM_RED_SHARD, 1 - compare VAR_RESULT, TRUE - call_if_eq Route124_DivingTreasureHuntersHouse_EventScript_HasRedShard - checkitem ITEM_YELLOW_SHARD, 1 - compare VAR_RESULT, TRUE - call_if_eq Route124_DivingTreasureHuntersHouse_EventScript_HasYellowShard - checkitem ITEM_BLUE_SHARD, 1 - compare VAR_RESULT, TRUE - call_if_eq Route124_DivingTreasureHuntersHouse_EventScript_HasBlueShard - checkitem ITEM_GREEN_SHARD, 1 - compare VAR_RESULT, TRUE - call_if_eq Route124_DivingTreasureHuntersHouse_EventScript_HasGreenShard + checkitem ITEM_RED_SHARD + call_if_eq VAR_RESULT, TRUE, Route124_DivingTreasureHuntersHouse_EventScript_HasRedShard + checkitem ITEM_YELLOW_SHARD + call_if_eq VAR_RESULT, TRUE, Route124_DivingTreasureHuntersHouse_EventScript_HasYellowShard + checkitem ITEM_BLUE_SHARD + call_if_eq VAR_RESULT, TRUE, Route124_DivingTreasureHuntersHouse_EventScript_HasBlueShard + checkitem ITEM_GREEN_SHARD + call_if_eq VAR_RESULT, TRUE, Route124_DivingTreasureHuntersHouse_EventScript_HasGreenShard return Route124_DivingTreasureHuntersHouse_EventScript_HasRedShard:: @@ -243,17 +238,14 @@ Route124_DivingTreasureHuntersHouse_EventScript_TradeGreenShard:: goto Route124_DivingTreasureHuntersHouse_EventScript_TryTradeShard Route124_DivingTreasureHuntersHouse_EventScript_TryTradeShard:: - bufferitemname 0, VAR_0x8008 - bufferitemname 1, VAR_0x8009 + bufferitemname STR_VAR_1, VAR_0x8008 + bufferitemname STR_VAR_2, VAR_0x8009 msgbox Route124_DivingTreasureHuntersHouse_Text_YoullTradeShardForStone, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_DeclineTrade - checkitemspace VAR_0x8009, 1 - compare VAR_RESULT, TRUE - goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_TradeShard + goto_if_eq VAR_RESULT, NO, Route124_DivingTreasureHuntersHouse_EventScript_DeclineTrade + checkitemspace VAR_0x8009 + goto_if_eq VAR_RESULT, TRUE, Route124_DivingTreasureHuntersHouse_EventScript_TradeShard checkitem VAR_0x8008, 2 - compare VAR_RESULT, FALSE - goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_TradeShard + goto_if_eq VAR_RESULT, FALSE, Route124_DivingTreasureHuntersHouse_EventScript_TradeShard goto Route124_DivingTreasureHuntersHouse_EventScript_BagFull end @@ -262,11 +254,9 @@ Route124_DivingTreasureHuntersHouse_EventScript_TradeShard:: giveitem VAR_0x8009 msgbox Route124_DivingTreasureHuntersHouse_Text_ItsADeal, MSGBOX_DEFAULT call Route124_DivingTreasureHuntersHouse_EventScript_GetPlayersShards - compare VAR_TEMP_1, 0 - goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_EndTrade + goto_if_eq VAR_TEMP_1, 0, Route124_DivingTreasureHuntersHouse_EventScript_EndTrade msgbox Route124_DivingTreasureHuntersHouse_Text_TradeSomethingElse, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_ShowTradeOptions + goto_if_eq VAR_RESULT, YES, Route124_DivingTreasureHuntersHouse_EventScript_ShowTradeOptions goto Route124_DivingTreasureHuntersHouse_EventScript_DeclineTrade end diff --git a/data/maps/Route125/scripts.inc b/data/maps/Route125/scripts.inc index 7a2d3f15fa..cafdf8fbbf 100644 --- a/data/maps/Route125/scripts.inc +++ b/data/maps/Route125/scripts.inc @@ -6,19 +6,14 @@ Route125_MapScripts:: Route125_OnTransition: call_if_set FLAG_SYS_WEATHER_CTRL, Common_EventScript_SetAbnormalWeather - compare VAR_SHOULD_END_ABNORMAL_WEATHER, 1 - call_if_eq AbnormalWeather_EventScript_HideMapNamePopup - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_125_WEST - call_if_eq AbnormalWeather_StartKyogreWeather - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_125_EAST - call_if_eq AbnormalWeather_StartKyogreWeather + call_if_eq VAR_SHOULD_END_ABNORMAL_WEATHER, 1, AbnormalWeather_EventScript_HideMapNamePopup + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_125_WEST, AbnormalWeather_StartKyogreWeather + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_125_EAST, AbnormalWeather_StartKyogreWeather end Route125_OnLoad: - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_125_WEST - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute125West - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_125_EAST - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute125East + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_125_WEST, AbnormalWeather_EventScript_PlaceTilesRoute125West + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_125_EAST, AbnormalWeather_EventScript_PlaceTilesRoute125East end Route125_OnFrame: @@ -48,8 +43,7 @@ Route125_EventScript_Sharon:: Route125_EventScript_Ernest:: trainerbattle_single TRAINER_ERNEST_1, Route125_Text_ErnestIntro, Route125_Text_ErnestDefeat, Route125_EventScript_RegisterErnest specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route125_EventScript_RematchErnest + goto_if_eq VAR_RESULT, TRUE, Route125_EventScript_RematchErnest msgbox Route125_Text_ErnestPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route126/scripts.inc b/data/maps/Route126/scripts.inc index 79f5bb11be..752cd2d4d5 100644 --- a/data/maps/Route126/scripts.inc +++ b/data/maps/Route126/scripts.inc @@ -44,8 +44,7 @@ Route126_EventScript_Sienna:: Route126_EventScript_Pablo:: trainerbattle_single TRAINER_PABLO_1, Route126_Text_PabloIntro, Route126_Text_PabloDefeat, Route126_EventScript_RegisterPablo specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route126_EventScript_RematchPablo + goto_if_eq VAR_RESULT, TRUE, Route126_EventScript_RematchPablo msgbox Route126_Text_PabloPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route127/scripts.inc b/data/maps/Route127/scripts.inc index 426e814702..05bfb14ffe 100644 --- a/data/maps/Route127/scripts.inc +++ b/data/maps/Route127/scripts.inc @@ -6,19 +6,14 @@ Route127_MapScripts:: Route127_OnTransition: call_if_set FLAG_SYS_WEATHER_CTRL, Common_EventScript_SetAbnormalWeather - compare VAR_SHOULD_END_ABNORMAL_WEATHER, 1 - call_if_eq AbnormalWeather_EventScript_HideMapNamePopup - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_127_NORTH - call_if_eq AbnormalWeather_StartKyogreWeather - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_127_SOUTH - call_if_eq AbnormalWeather_StartKyogreWeather + call_if_eq VAR_SHOULD_END_ABNORMAL_WEATHER, 1, AbnormalWeather_EventScript_HideMapNamePopup + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_127_NORTH, AbnormalWeather_StartKyogreWeather + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_127_SOUTH, AbnormalWeather_StartKyogreWeather end Route127_OnLoad: - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_127_NORTH - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute127North - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_127_SOUTH - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute127South + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_127_NORTH, AbnormalWeather_EventScript_PlaceTilesRoute127North + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_127_SOUTH, AbnormalWeather_EventScript_PlaceTilesRoute127South end Route127_OnFrame: @@ -63,8 +58,7 @@ Route127_EventScript_Athena:: Route127_EventScript_Koji:: trainerbattle_single TRAINER_KOJI_1, Route127_Text_KojiIntro, Route127_Text_KojiDefeat, Route127_EventScript_RegisterKoji specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route127_EventScript_RematchKoji + goto_if_eq VAR_RESULT, TRUE, Route127_EventScript_RematchKoji msgbox Route127_Text_KojiPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route128/scripts.inc b/data/maps/Route128/scripts.inc index 09b5c404ac..d08605128a 100644 --- a/data/maps/Route128/scripts.inc +++ b/data/maps/Route128/scripts.inc @@ -28,18 +28,18 @@ Route128_EventScript_KyogreAwakenedScene:: closemessage applymovement LOCALID_MAXIE, Route128_Movement_MaxieApproachArchie waitmovement 0 - applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox Route128_Text_MaxieDoYouUnderstandNow, MSGBOX_DEFAULT closemessage applymovement LOCALID_MAXIE, Route128_Movement_MaxieApproachPlayer waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox Route128_Text_MaxieResposibilityFallsToArchieAndMe, MSGBOX_DEFAULT closemessage applymovement LOCALID_ARCHIE, Route128_Movement_ArchieRunLeft - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft applymovement LOCALID_MAXIE, Route128_Movement_MaxieWalkLeft waitmovement 0 msgbox Route128_Text_MaxieThisDefiesBelief, MSGBOX_DEFAULT @@ -57,19 +57,19 @@ Route128_EventScript_KyogreAwakenedScene:: addobject LOCALID_STEVEN applymovement LOCALID_STEVEN, Route128_Movement_StevenApproachPlayer waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox Route128_Text_StevenWhatIsHappening, MSGBOX_DEFAULT closemessage applymovement LOCALID_STEVEN, Route128_Movement_StevenWalkUp - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox Route128_Text_StevenWholeWorldWillDrown, MSGBOX_DEFAULT - applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox Route128_Text_StevenImGoingToSootopolis, MSGBOX_DEFAULT closemessage - applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_STEVEN, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 50 setfieldeffectargument 0, 1 @@ -111,12 +111,12 @@ Route128_Movement_StevenApproachPlayer: Route128_Movement_ArchieLookAround: walk_fast_down - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end Route128_Movement_ArchieBackUp: @@ -130,7 +130,7 @@ Route128_Movement_ArchieRunLeft: walk_fast_left walk_fast_left walk_fast_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end Route128_Movement_ArchieExit: @@ -157,7 +157,7 @@ Route128_Movement_MaxieWalkLeft: Route128_Movement_MaxieApproachArchie: walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end Route128_Movement_MaxieExit: @@ -175,14 +175,13 @@ Route128_Movement_MaxieExit: Route128_Movement_MaxieApproachPlayer: walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end Route128_EventScript_Isaiah:: trainerbattle_single TRAINER_ISAIAH_1, Route128_Text_IsaiahIntro, Route128_Text_IsaiahDefeat, Route128_EventScript_RegisterIsaiah specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route128_EventScript_RematchIsaiah + goto_if_eq VAR_RESULT, TRUE, Route128_EventScript_RematchIsaiah msgbox Route128_Text_IsaiahPostBattle, MSGBOX_DEFAULT release end @@ -203,8 +202,7 @@ Route128_EventScript_RematchIsaiah:: Route128_EventScript_Katelyn:: trainerbattle_single TRAINER_KATELYN_1, Route128_Text_KatelynIntro, Route128_Text_KatelynDefeat, Route128_EventScript_RegisterKatelyn specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq Route128_EventScript_RematchKatelyn + goto_if_eq VAR_RESULT, TRUE, Route128_EventScript_RematchKatelyn msgbox Route128_Text_KatelynPostBattle, MSGBOX_DEFAULT release end diff --git a/data/maps/Route129/scripts.inc b/data/maps/Route129/scripts.inc index e996722cc9..7055675a0e 100644 --- a/data/maps/Route129/scripts.inc +++ b/data/maps/Route129/scripts.inc @@ -5,21 +5,15 @@ Route129_MapScripts:: .byte 0 Route129_OnLoad: - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_129_WEST - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute129West - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_129_EAST - call_if_eq AbnormalWeather_EventScript_PlaceTilesRoute129East + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_129_WEST, AbnormalWeather_EventScript_PlaceTilesRoute129West + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_129_EAST, AbnormalWeather_EventScript_PlaceTilesRoute129East end Route129_OnTransition: - compare VAR_SHOULD_END_ABNORMAL_WEATHER, 1 - call_if_eq AbnormalWeather_EventScript_HideMapNamePopup - compare VAR_SOOTOPOLIS_CITY_STATE, 4 - call_if_ge Route129_EventScript_CheckSetAbnormalWeather - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_129_WEST - call_if_eq AbnormalWeather_StartKyogreWeather - compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_129_EAST - call_if_eq AbnormalWeather_StartKyogreWeather + call_if_eq VAR_SHOULD_END_ABNORMAL_WEATHER, 1, AbnormalWeather_EventScript_HideMapNamePopup + call_if_ge VAR_SOOTOPOLIS_CITY_STATE, 4, Route129_EventScript_CheckSetAbnormalWeather + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_129_WEST, AbnormalWeather_StartKyogreWeather + call_if_eq VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_ROUTE_129_EAST, AbnormalWeather_StartKyogreWeather end Route129_EventScript_CheckSetAbnormalWeather:: diff --git a/data/maps/Route130/scripts.inc b/data/maps/Route130/scripts.inc index fe360a36bb..7e0ecc8bd1 100644 --- a/data/maps/Route130/scripts.inc +++ b/data/maps/Route130/scripts.inc @@ -3,11 +3,9 @@ Route130_MapScripts:: .byte 0 Route130_OnTransition: - compare VAR_SOOTOPOLIS_CITY_STATE, 4 - call_if_ge Route130_EventScript_CheckSetAbnormalWeather + call_if_ge VAR_SOOTOPOLIS_CITY_STATE, 4, Route130_EventScript_CheckSetAbnormalWeather specialvar VAR_RESULT, IsMirageIslandPresent - compare VAR_RESULT, TRUE - goto_if_eq Route130_EventScript_SetMirageIslandLayout + goto_if_eq VAR_RESULT, TRUE, Route130_EventScript_SetMirageIslandLayout setflag FLAG_TEMP_11 setflag FLAG_TEMP_12 setflag FLAG_TEMP_13 diff --git a/data/maps/Route131/scripts.inc b/data/maps/Route131/scripts.inc index 846998bfe9..17060c183b 100644 --- a/data/maps/Route131/scripts.inc +++ b/data/maps/Route131/scripts.inc @@ -3,8 +3,7 @@ Route131_MapScripts:: .byte 0 Route131_OnTransition: - compare VAR_SOOTOPOLIS_CITY_STATE, 4 - call_if_ge Route131_EventScript_CheckSetAbnormalWeather + call_if_ge VAR_SOOTOPOLIS_CITY_STATE, 4, Route131_EventScript_CheckSetAbnormalWeather call Route131_EventScript_SetLayout end diff --git a/data/maps/Route134/scripts.inc b/data/maps/Route134/scripts.inc index 043835373e..226135c1d5 100644 --- a/data/maps/Route134/scripts.inc +++ b/data/maps/Route134/scripts.inc @@ -3,7 +3,7 @@ Route134_MapScripts:: .byte 0 Route134_OnResume: - setdivewarp MAP_UNDERWATER_ROUTE134, 255, 8, 6 + setdivewarp MAP_UNDERWATER_ROUTE134, 8, 6 end Route134_EventScript_Jack:: diff --git a/data/maps/RustboroCity/scripts.inc b/data/maps/RustboroCity/scripts.inc index 5c6ef09022..28fd389210 100644 --- a/data/maps/RustboroCity/scripts.inc +++ b/data/maps/RustboroCity/scripts.inc @@ -13,16 +13,13 @@ RustboroCity_MapScripts:: RustboroCity_OnTransition: setflag FLAG_VISITED_RUSTBORO_CITY call Common_EventScript_SetupRivalGfxId - compare VAR_RUSTBORO_CITY_STATE, 6 - call_if_eq RustboroCity_EventScript_HideMapNamePopup + call_if_eq VAR_RUSTBORO_CITY_STATE, 6, RustboroCity_EventScript_HideMapNamePopup getplayerxy VAR_TEMP_0, VAR_TEMP_1 - compare VAR_RUSTBORO_CITY_STATE, 6 - goto_if_eq RustboroCity_EventScript_PositionScientistForExit + goto_if_eq VAR_RUSTBORO_CITY_STATE, 6, RustboroCity_EventScript_PositionScientistForExit end RustboroCity_EventScript_PositionScientistForExit:: - compare VAR_TEMP_0, 11 - goto_if_eq RustboroCity_EventScript_PositionScientistLeftExit + goto_if_eq VAR_TEMP_0, 11, RustboroCity_EventScript_PositionScientistLeftExit setobjectxyperm LOCALID_SCIENTIST, 12, 15 end @@ -53,14 +50,14 @@ RustboroCity_EventScript_ScientistAddMatchCall:: waitmovement 0 applymovement LOCALID_SCIENTIST, Common_Movement_Delay48 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 applymovement LOCALID_SCIENTIST, RustboroCity_Movement_ScientistWalkInPlaceDown waitmovement 0 msgbox RustboroCity_Text_DevelopedNewPokenavFeature, MSGBOX_DEFAULT closemessage setflag FLAG_HAS_MATCH_CALL - applymovement LOCALID_SCIENTIST, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_SCIENTIST, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 playse SE_CLICK delay 10 @@ -70,7 +67,7 @@ RustboroCity_EventScript_ScientistAddMatchCall:: delay 10 playse SE_CLICK delay 20 - applymovement LOCALID_SCIENTIST, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_SCIENTIST, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox RustboroCity_Text_AddedMatchCallPleaseCallMrStone, MSGBOX_DEFAULT closemessage @@ -131,7 +128,7 @@ RustboroCity_Movement_ScientistWalkAroundPlayer: walk_down walk_down walk_right - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 step_end @@ -360,14 +357,14 @@ RustboroCity_EventScript_EmployeeApproachDown:: RustboroCity_EventScript_EmployeeApproachPlayerFar:: applymovement LOCALID_DEVON_EMPLOYEE, RustboroCity_Movement_EmployeeApproachPlayerFar waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return @ Unused RustboroCity_Movement_GruntEscapeExtended: - walk_fastest_right - walk_fastest_right + walk_faster_right + walk_faster_right walk_fast_right walk_fast_right walk_fast_right @@ -386,8 +383,8 @@ RustboroCity_Movement_GruntEscapeExtended: step_end RustboroCity_Movement_GruntEscape: - walk_fastest_right - walk_fastest_right + walk_faster_right + walk_faster_right walk_fast_right walk_fast_right walk_fast_right @@ -411,7 +408,7 @@ RustboroCity_Movement_EmployeeChaseGrunt1: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end RustboroCity_Movement_EmployeeChaseGrunt2: @@ -464,7 +461,7 @@ RustboroCity_Movement_EmployeeApproachPlayerFar: walk_right walk_right walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end RustboroCity_EventScript_DevonEmployee1:: @@ -506,14 +503,10 @@ RustboroCity_EventScript_HelpGetGoodsTrigger3:: end RustboroCity_EventScript_EmployeeAskToGetGoods:: - compare VAR_TEMP_1, 0 - call_if_eq RustboroCity_EventScript_EmployeeFacePlayerUp1 - compare VAR_TEMP_1, 1 - call_if_eq RustboroCity_EventScript_EmployeeFacePlayerLeft1 - compare VAR_TEMP_1, 2 - call_if_eq RustboroCity_EventScript_EmployeeFacePlayerDown1 - compare VAR_TEMP_1, 3 - call_if_eq RustboroCity_EventScript_EmployeeApproachPlayerDown1 + call_if_eq VAR_TEMP_1, 0, RustboroCity_EventScript_EmployeeFacePlayerUp1 + call_if_eq VAR_TEMP_1, 1, RustboroCity_EventScript_EmployeeFacePlayerLeft1 + call_if_eq VAR_TEMP_1, 2, RustboroCity_EventScript_EmployeeFacePlayerDown1 + call_if_eq VAR_TEMP_1, 3, RustboroCity_EventScript_EmployeeApproachPlayerDown1 setflag FLAG_INTERACTED_WITH_DEVON_EMPLOYEE_GOODS_STOLEN setvar VAR_RUSTBORO_CITY_STATE, 3 copyobjectxytoperm LOCALID_DEVON_EMPLOYEE @@ -523,19 +516,19 @@ RustboroCity_EventScript_EmployeeAskToGetGoods:: @ The below movement scripts are either partially or fully duplicated by the movement scripts when the player returns the goods RustboroCity_EventScript_EmployeeFacePlayerUp1:: - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterUp waitmovement 0 playse SE_PIN applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_ExclamationMark waitmovement 0 applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_Delay48 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return RustboroCity_EventScript_EmployeeFacePlayerLeft1:: - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 playse SE_PIN applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_ExclamationMark @@ -547,19 +540,19 @@ RustboroCity_EventScript_EmployeeFacePlayerLeft1:: return RustboroCity_EventScript_EmployeeFacePlayerDown1:: - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_ExclamationMark waitmovement 0 applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_Delay48 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return RustboroCity_EventScript_EmployeeApproachPlayerDown1:: - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_ExclamationMark @@ -568,7 +561,7 @@ RustboroCity_EventScript_EmployeeApproachPlayerDown1:: waitmovement 0 applymovement LOCALID_DEVON_EMPLOYEE, RustboroCity_Movement_EmployeeApproachPlayerDown waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return @@ -601,27 +594,21 @@ RustboroCity_EventScript_ReturnGoodsTrigger3:: end RustboroCity_EventScript_ReturnGoods:: - compare VAR_TEMP_1, 0 - call_if_eq RustboroCity_EventScript_EmployeeFacePlayerUp2 - compare VAR_TEMP_1, 1 - call_if_eq RustboroCity_EventScript_EmployeeFacePlayerLeft2 - compare VAR_TEMP_1, 2 - call_if_eq RustboroCity_EventScript_EmployeeFacePlayerDown2 - compare VAR_TEMP_1, 3 - call_if_eq RustboroCity_EventScript_EmployeeApproachPlayerDown2 - compare VAR_TEMP_1, 4 - call_if_eq RustboroCity_EventScript_EmployeeFacePlayerRight + call_if_eq VAR_TEMP_1, 0, RustboroCity_EventScript_EmployeeFacePlayerUp2 + call_if_eq VAR_TEMP_1, 1, RustboroCity_EventScript_EmployeeFacePlayerLeft2 + call_if_eq VAR_TEMP_1, 2, RustboroCity_EventScript_EmployeeFacePlayerDown2 + call_if_eq VAR_TEMP_1, 3, RustboroCity_EventScript_EmployeeApproachPlayerDown2 + call_if_eq VAR_TEMP_1, 4, RustboroCity_EventScript_EmployeeFacePlayerRight msgbox RustboroCity_Text_YouGotItThankYou, MSGBOX_DEFAULT giveitem ITEM_GREAT_BALL - compare VAR_RESULT, FALSE - call_if_eq RustboroCity_EventScript_BagFull + call_if_eq VAR_RESULT, FALSE, RustboroCity_EventScript_BagFull msgbox RustboroCity_Text_PleaseComeWithMe, MSGBOX_DEFAULT closemessage setflag FLAG_RETURNED_DEVON_GOODS setflag FLAG_HIDE_RUSTBORO_CITY_DEVON_EMPLOYEE_1 setvar VAR_RUSTBORO_CITY_STATE, 5 delay 30 - warp MAP_RUSTBORO_CITY_DEVON_CORP_3F, 255, 2, 2 + warp MAP_RUSTBORO_CITY_DEVON_CORP_3F, 2, 2 waitstate releaseall end @@ -631,19 +618,19 @@ RustboroCity_EventScript_BagFull:: return RustboroCity_EventScript_EmployeeFacePlayerUp2:: - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterUp waitmovement 0 playse SE_PIN applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_ExclamationMark waitmovement 0 applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_Delay48 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return RustboroCity_EventScript_EmployeeFacePlayerLeft2:: - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterRight waitmovement 0 playse SE_PIN applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_ExclamationMark @@ -655,19 +642,19 @@ RustboroCity_EventScript_EmployeeFacePlayerLeft2:: return RustboroCity_EventScript_EmployeeFacePlayerDown2:: - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_ExclamationMark waitmovement 0 applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_Delay48 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return RustboroCity_EventScript_EmployeeApproachPlayerDown2:: - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_ExclamationMark @@ -676,12 +663,12 @@ RustboroCity_EventScript_EmployeeApproachPlayerDown2:: waitmovement 0 applymovement LOCALID_DEVON_EMPLOYEE, RustboroCity_Movement_EmployeeApproachPlayerDown waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return RustboroCity_EventScript_EmployeeFacePlayerRight:: - applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 playse SE_PIN applymovement LOCALID_DEVON_EMPLOYEE, Common_Movement_ExclamationMark @@ -699,10 +686,8 @@ RustboroCity_EventScript_Rival:: RustboroCity_EventScript_PlayRivalMusic:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq RustboroCity_EventScript_PlayMayMusic - compare VAR_RESULT, FEMALE - goto_if_eq RustboroCity_EventScript_PlayBrendanMusic + goto_if_eq VAR_RESULT, MALE, RustboroCity_EventScript_PlayMayMusic + goto_if_eq VAR_RESULT, FEMALE, RustboroCity_EventScript_PlayBrendanMusic return RustboroCity_EventScript_PlayMayMusic:: @@ -716,7 +701,7 @@ RustboroCity_EventScript_PlayBrendanMusic:: RustboroCity_EventScript_RivalTrigger0:: lockall call RustboroCity_EventScript_PlayRivalMusic - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark @@ -725,14 +710,14 @@ RustboroCity_EventScript_RivalTrigger0:: waitmovement 0 applymovement LOCALID_RIVAL, RustboroCity_Movement_RivalApproachPlayer0 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 goto RustboroCity_EventScript_RivalEncounter RustboroCity_EventScript_RivalTrigger1:: lockall call RustboroCity_EventScript_PlayRivalMusic - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark @@ -741,14 +726,14 @@ RustboroCity_EventScript_RivalTrigger1:: waitmovement 0 applymovement LOCALID_RIVAL, RustboroCity_Movement_RivalApproachPlayer1 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 goto RustboroCity_EventScript_RivalEncounter RustboroCity_EventScript_RivalTrigger2:: lockall call RustboroCity_EventScript_PlayRivalMusic - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark @@ -757,14 +742,14 @@ RustboroCity_EventScript_RivalTrigger2:: waitmovement 0 applymovement LOCALID_RIVAL, RustboroCity_Movement_RivalApproachPlayer2 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 goto RustboroCity_EventScript_RivalEncounter RustboroCity_EventScript_RivalTrigger3:: lockall call RustboroCity_EventScript_PlayRivalMusic - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark @@ -773,14 +758,14 @@ RustboroCity_EventScript_RivalTrigger3:: waitmovement 0 applymovement LOCALID_RIVAL, RustboroCity_Movement_RivalApproachPlayer3 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 goto RustboroCity_EventScript_RivalEncounter RustboroCity_EventScript_RivalTrigger4:: lockall call RustboroCity_EventScript_PlayRivalMusic - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark @@ -789,14 +774,14 @@ RustboroCity_EventScript_RivalTrigger4:: waitmovement 0 applymovement LOCALID_RIVAL, RustboroCity_Movement_RivalApproachPlayer4 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 goto RustboroCity_EventScript_RivalEncounter RustboroCity_EventScript_RivalTrigger5:: lockall call RustboroCity_EventScript_PlayRivalMusic - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark @@ -805,14 +790,14 @@ RustboroCity_EventScript_RivalTrigger5:: waitmovement 0 applymovement LOCALID_RIVAL, RustboroCity_Movement_RivalApproachPlayer5 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 goto RustboroCity_EventScript_RivalEncounter RustboroCity_EventScript_RivalTrigger6:: lockall call RustboroCity_EventScript_PlayRivalMusic - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark @@ -821,14 +806,14 @@ RustboroCity_EventScript_RivalTrigger6:: waitmovement 0 applymovement LOCALID_RIVAL, RustboroCity_Movement_RivalApproachPlayer6 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 goto RustboroCity_EventScript_RivalEncounter RustboroCity_EventScript_RivalTrigger7:: lockall call RustboroCity_EventScript_PlayRivalMusic - applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_RIVAL, Common_Movement_WalkInPlaceFasterDown waitmovement 0 playse SE_PIN applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark @@ -837,16 +822,14 @@ RustboroCity_EventScript_RivalTrigger7:: waitmovement 0 applymovement LOCALID_RIVAL, RustboroCity_Movement_RivalApproachPlayer7 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 goto RustboroCity_EventScript_RivalEncounter RustboroCity_EventScript_RivalEncounter:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq RustboroCity_EventScript_MayEncounter - compare VAR_RESULT, FEMALE - goto_if_eq RustboroCity_EventScript_BrendanEncounter + goto_if_eq VAR_RESULT, MALE, RustboroCity_EventScript_MayEncounter + goto_if_eq VAR_RESULT, FEMALE, RustboroCity_EventScript_BrendanEncounter end RustboroCity_EventScript_MayEncounter:: @@ -866,8 +849,7 @@ RustboroCity_EventScript_MayEncounter:: setvar VAR_ROUTE104_STATE, 2 setvar VAR_0x8008, 0 msgbox RustboroCity_Text_MayPassedBrineyWantToBattle, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq RustboroCity_EventScript_BattleMay + goto_if_eq VAR_RESULT, YES, RustboroCity_EventScript_BattleMay msgbox RustboroCity_Text_MayOhHaventRaisedPokemonEnough, MSGBOX_DEFAULT call RustboroCity_EventScript_RestoreBgm releaseall @@ -876,8 +858,7 @@ RustboroCity_EventScript_MayEncounter:: RustboroCity_EventScript_MayAskToBattle:: setvar VAR_0x8008, 1 msgbox RustboroCity_Text_MayWantToBattle, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq RustboroCity_EventScript_BattleMay + goto_if_eq VAR_RESULT, YES, RustboroCity_EventScript_BattleMay msgbox RustboroCity_Text_MayOhHaventRaisedPokemonEnough, MSGBOX_DEFAULT releaseall end @@ -892,8 +873,7 @@ RustboroCity_EventScript_BattleMay:: RustboroCity_EventScript_MayBrineyHint:: msgbox RustboroCity_Text_MayMrBrineyHint, MSGBOX_DEFAULT - compare VAR_0x8008, 0 - call_if_eq RustboroCity_EventScript_RestoreBgm + call_if_eq VAR_0x8008, 0, RustboroCity_EventScript_RestoreBgm releaseall end @@ -936,8 +916,7 @@ RustboroCity_EventScript_BrendanEncounter:: setvar VAR_RUSTBORO_CITY_STATE, 8 setvar VAR_ROUTE104_STATE, 2 msgbox RustboroCity_Text_BrendanPassedBrineyWantToBattle, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq RustboroCity_EventScript_BattleBrendan + goto_if_eq VAR_RESULT, YES, RustboroCity_EventScript_BattleBrendan msgbox RustboroCity_Text_BrendanNoConfidenceInPokemon, MSGBOX_DEFAULT call RustboroCity_EventScript_RestoreBgm releaseall @@ -945,8 +924,7 @@ RustboroCity_EventScript_BrendanEncounter:: RustboroCity_EventScript_BrendanAskToBattle:: msgbox RustboroCity_Text_BrendanWantToBattle, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq RustboroCity_EventScript_BattleBrendan + goto_if_eq VAR_RESULT, YES, RustboroCity_EventScript_BattleBrendan msgbox RustboroCity_Text_BrendanNoConfidenceInPokemon, MSGBOX_DEFAULT releaseall end @@ -961,8 +939,7 @@ RustboroCity_EventScript_BattleBrendan:: RustboroCity_EventScript_BrendanBrineyHint:: msgbox RustboroCity_Text_BrendanMrBrineyHint, MSGBOX_DEFAULT - compare VAR_0x8008, 0 - call_if_eq RustboroCity_EventScript_RestoreBgm + call_if_eq VAR_0x8008, 0, RustboroCity_EventScript_RestoreBgm releaseall end diff --git a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc index 326cd946e6..747070645c 100644 --- a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc +++ b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc @@ -5,8 +5,7 @@ RustboroCity_DevonCorp_2F_MapScripts:: .byte 0 RustboroCity_DevonCorp_2F_OnTransition: - compare VAR_FOSSIL_RESURRECTION_STATE, 1 - call_if_eq RustboroCity_DevonCorp_2F_EventScript_SetFossilReady + call_if_eq VAR_FOSSIL_RESURRECTION_STATE, 1, RustboroCity_DevonCorp_2F_EventScript_SetFossilReady end RustboroCity_DevonCorp_2F_EventScript_SetFossilReady:: @@ -16,8 +15,7 @@ RustboroCity_DevonCorp_2F_EventScript_SetFossilReady:: RustboroCity_DevonCorp_2F_EventScript_TalkToPokemonScientist:: lock faceplayer - compare VAR_FOSSIL_RESURRECTION_STATE, 1 - call_if_eq RustboroCity_DevonCorp_2F_EventScript_SetFossilReady + call_if_eq VAR_FOSSIL_RESURRECTION_STATE, 1, RustboroCity_DevonCorp_2F_EventScript_SetFossilReady msgbox RustboroCity_DevonCorp_2F_Text_DeviceForTalkingToPokemon, MSGBOX_DEFAULT release end @@ -25,8 +23,7 @@ RustboroCity_DevonCorp_2F_EventScript_TalkToPokemonScientist:: RustboroCity_DevonCorp_2F_EventScript_BallScientist:: lock faceplayer - compare VAR_FOSSIL_RESURRECTION_STATE, 1 - call_if_eq RustboroCity_DevonCorp_2F_EventScript_SetFossilReady + call_if_eq VAR_FOSSIL_RESURRECTION_STATE, 1, RustboroCity_DevonCorp_2F_EventScript_SetFossilReady goto_if_set FLAG_MET_DEVON_EMPLOYEE, RustboroCity_DevonCorp_2F_EventScript_DevelopedBalls msgbox RustboroCity_DevonCorp_2F_Text_DevelopingNewBalls, MSGBOX_DEFAULT release @@ -40,8 +37,7 @@ RustboroCity_DevonCorp_2F_EventScript_DevelopedBalls:: RustboroCity_DevonCorp_2F_EventScript_PokenavScientist:: lock faceplayer - compare VAR_FOSSIL_RESURRECTION_STATE, 1 - call_if_eq RustboroCity_DevonCorp_2F_EventScript_SetFossilReady + call_if_eq VAR_FOSSIL_RESURRECTION_STATE, 1, RustboroCity_DevonCorp_2F_EventScript_SetFossilReady goto_if_set FLAG_RECEIVED_POKENAV, RustboroCity_DevonCorp_2F_EventScript_HasPokenav msgbox RustboroCity_DevonCorp_2F_Text_IMadePokenav, MSGBOX_DEFAULT release @@ -55,8 +51,7 @@ RustboroCity_DevonCorp_2F_EventScript_HasPokenav:: RustboroCity_DevonCorp_2F_EventScript_PokemonDreamsScientist:: lock faceplayer - compare VAR_FOSSIL_RESURRECTION_STATE, 1 - call_if_eq RustboroCity_DevonCorp_2F_EventScript_SetFossilReady + call_if_eq VAR_FOSSIL_RESURRECTION_STATE, 1, RustboroCity_DevonCorp_2F_EventScript_SetFossilReady msgbox RustboroCity_DevonCorp_2F_Text_DeviceToVisualizePokemonDreams, MSGBOX_DEFAULT release end @@ -64,17 +59,13 @@ RustboroCity_DevonCorp_2F_EventScript_PokemonDreamsScientist:: RustboroCity_DevonCorp_2F_EventScript_FossilScientist:: lock faceplayer - compare VAR_FOSSIL_RESURRECTION_STATE, 2 - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_FossilMonReady - compare VAR_FOSSIL_RESURRECTION_STATE, 1 - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_StillRegenerating + goto_if_eq VAR_FOSSIL_RESURRECTION_STATE, 2, RustboroCity_DevonCorp_2F_EventScript_FossilMonReady + goto_if_eq VAR_FOSSIL_RESURRECTION_STATE, 1, RustboroCity_DevonCorp_2F_EventScript_StillRegenerating msgbox RustboroCity_DevonCorp_2F_Text_DevelopDeviceToResurrectFossils, MSGBOX_DEFAULT - checkitem ITEM_ROOT_FOSSIL, 1 - compare VAR_RESULT, TRUE - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_NoticeRootFossil - checkitem ITEM_CLAW_FOSSIL, 1 - compare VAR_RESULT, TRUE - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_NoticeClawFossil + checkitem ITEM_ROOT_FOSSIL + goto_if_eq VAR_RESULT, TRUE, RustboroCity_DevonCorp_2F_EventScript_NoticeRootFossil + checkitem ITEM_CLAW_FOSSIL + goto_if_eq VAR_RESULT, TRUE, RustboroCity_DevonCorp_2F_EventScript_NoticeClawFossil release end @@ -87,16 +78,14 @@ RustboroCity_DevonCorp_2F_EventScript_NoticeRootFossil:: applymovement LOCALID_FOSSIL_SCIENTIST, Common_Movement_Delay48 waitmovement 0 msgbox RustboroCity_DevonCorp_2F_Text_WantToBringFossilBackToLife, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_DeclineGiveFossil - checkitem ITEM_CLAW_FOSSIL, 1 - compare VAR_RESULT, TRUE - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_ChooseFossil + goto_if_eq VAR_RESULT, NO, RustboroCity_DevonCorp_2F_EventScript_DeclineGiveFossil + checkitem ITEM_CLAW_FOSSIL + goto_if_eq VAR_RESULT, TRUE, RustboroCity_DevonCorp_2F_EventScript_ChooseFossil goto RustboroCity_DevonCorp_2F_EventScript_GiveRootFossil end RustboroCity_DevonCorp_2F_EventScript_GiveRootFossil:: - bufferitemname 0, ITEM_ROOT_FOSSIL + bufferitemname STR_VAR_1, ITEM_ROOT_FOSSIL msgbox RustboroCity_DevonCorp_2F_Text_HandedFossilToResearcher, MSGBOX_DEFAULT removeitem ITEM_ROOT_FOSSIL setvar VAR_FOSSIL_RESURRECTION_STATE, 1 @@ -112,16 +101,14 @@ RustboroCity_DevonCorp_2F_EventScript_NoticeClawFossil:: applymovement LOCALID_FOSSIL_SCIENTIST, Common_Movement_Delay48 waitmovement 0 msgbox RustboroCity_DevonCorp_2F_Text_WantToBringFossilBackToLife, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_DeclineGiveFossil - checkitem ITEM_ROOT_FOSSIL, 1 - compare VAR_RESULT, TRUE - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_ChooseFossil + goto_if_eq VAR_RESULT, NO, RustboroCity_DevonCorp_2F_EventScript_DeclineGiveFossil + checkitem ITEM_ROOT_FOSSIL + goto_if_eq VAR_RESULT, TRUE, RustboroCity_DevonCorp_2F_EventScript_ChooseFossil goto RustboroCity_DevonCorp_2F_EventScript_GiveClawFossil end RustboroCity_DevonCorp_2F_EventScript_GiveClawFossil:: - bufferitemname 0, ITEM_CLAW_FOSSIL + bufferitemname STR_VAR_1, ITEM_CLAW_FOSSIL msgbox RustboroCity_DevonCorp_2F_Text_HandedFossilToResearcher, MSGBOX_DEFAULT removeitem ITEM_CLAW_FOSSIL setvar VAR_FOSSIL_RESURRECTION_STATE, 1 @@ -140,39 +127,34 @@ RustboroCity_DevonCorp_2F_EventScript_StillRegenerating:: end RustboroCity_DevonCorp_2F_EventScript_FossilMonReady:: - compare VAR_WHICH_FOSSIL_REVIVED, 1 - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_LileepReady - compare VAR_WHICH_FOSSIL_REVIVED, 2 - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_AnorithReady + goto_if_eq VAR_WHICH_FOSSIL_REVIVED, 1, RustboroCity_DevonCorp_2F_EventScript_LileepReady + goto_if_eq VAR_WHICH_FOSSIL_REVIVED, 2, RustboroCity_DevonCorp_2F_EventScript_AnorithReady end RustboroCity_DevonCorp_2F_EventScript_LileepReady:: - bufferspeciesname 1, SPECIES_LILEEP + bufferspeciesname STR_VAR_2, SPECIES_LILEEP msgbox RustboroCity_DevonCorp_2F_Text_FossilizedMonBroughtBackToLife, MSGBOX_DEFAULT goto RustboroCity_DevonCorp_2F_EventScript_ReceiveLileep end RustboroCity_DevonCorp_2F_EventScript_AnorithReady:: - bufferspeciesname 1, SPECIES_ANORITH + bufferspeciesname STR_VAR_2, SPECIES_ANORITH msgbox RustboroCity_DevonCorp_2F_Text_FossilizedMonBroughtBackToLife, MSGBOX_DEFAULT goto RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorith end RustboroCity_DevonCorp_2F_EventScript_ReceiveLileep:: setvar VAR_TEMP_1, SPECIES_LILEEP - givemon SPECIES_LILEEP, 20, ITEM_NONE - compare VAR_RESULT, 0 - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepParty - compare VAR_RESULT, 1 - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepPC + givemon SPECIES_LILEEP, 20 + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepParty + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepPC goto Common_EventScript_NoMoreRoomForPokemon end RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepParty:: call RustboroCity_DevonCorp_2F_EventScript_ReceivedLileepFanfare msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_FinishReceivingLileep + goto_if_eq VAR_RESULT, NO, RustboroCity_DevonCorp_2F_EventScript_FinishReceivingLileep call Common_EventScript_GetGiftMonPartySlot call Common_EventScript_NameReceivedPartyMon goto RustboroCity_DevonCorp_2F_EventScript_FinishReceivingLileep @@ -181,8 +163,7 @@ RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepParty:: RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepPC:: call RustboroCity_DevonCorp_2F_EventScript_ReceivedLileepFanfare msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_TransferLileepToPC + goto_if_eq VAR_RESULT, NO, RustboroCity_DevonCorp_2F_EventScript_TransferLileepToPC call Common_EventScript_NameReceivedBoxMon goto RustboroCity_DevonCorp_2F_EventScript_TransferLileepToPC end @@ -193,12 +174,12 @@ RustboroCity_DevonCorp_2F_EventScript_TransferLileepToPC:: end RustboroCity_DevonCorp_2F_EventScript_ReceivedLileepFanfare:: - bufferspeciesname 1, SPECIES_LILEEP + bufferspeciesname STR_VAR_2, SPECIES_LILEEP playfanfare MUS_OBTAIN_ITEM message RustboroCity_DevonCorp_2F_Text_ReceivedMonFromResearcher waitmessage waitfanfare - bufferspeciesname 0, SPECIES_LILEEP + bufferspeciesname STR_VAR_1, SPECIES_LILEEP return RustboroCity_DevonCorp_2F_EventScript_FinishReceivingLileep:: @@ -209,19 +190,16 @@ RustboroCity_DevonCorp_2F_EventScript_FinishReceivingLileep:: RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorith:: setvar VAR_TEMP_1, SPECIES_ANORITH - givemon SPECIES_ANORITH, 20, ITEM_NONE - compare VAR_RESULT, 0 - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithParty - compare VAR_RESULT, 1 - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithPC + givemon SPECIES_ANORITH, 20 + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithParty + goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithPC goto Common_EventScript_NoMoreRoomForPokemon end RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithParty:: call RustboroCity_DevonCorp_2F_EventScript_ReceivedAnorithFanfare msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_FinishReceivingAnorith + goto_if_eq VAR_RESULT, NO, RustboroCity_DevonCorp_2F_EventScript_FinishReceivingAnorith call Common_EventScript_GetGiftMonPartySlot call Common_EventScript_NameReceivedPartyMon goto RustboroCity_DevonCorp_2F_EventScript_FinishReceivingAnorith @@ -230,8 +208,7 @@ RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithParty:: RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithPC:: call RustboroCity_DevonCorp_2F_EventScript_ReceivedAnorithFanfare msgbox gText_NicknameThisPokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq RustboroCity_DevonCorp_2F_EventScript_TransferAnorithToPC + goto_if_eq VAR_RESULT, NO, RustboroCity_DevonCorp_2F_EventScript_TransferAnorithToPC call Common_EventScript_NameReceivedBoxMon goto RustboroCity_DevonCorp_2F_EventScript_TransferAnorithToPC end @@ -242,12 +219,12 @@ RustboroCity_DevonCorp_2F_EventScript_TransferAnorithToPC:: end RustboroCity_DevonCorp_2F_EventScript_ReceivedAnorithFanfare:: - bufferspeciesname 1, SPECIES_ANORITH + bufferspeciesname STR_VAR_2, SPECIES_ANORITH playfanfare MUS_OBTAIN_ITEM message RustboroCity_DevonCorp_2F_Text_ReceivedMonFromResearcher waitmessage waitfanfare - bufferspeciesname 0, SPECIES_ANORITH + bufferspeciesname STR_VAR_1, SPECIES_ANORITH return RustboroCity_DevonCorp_2F_EventScript_FinishReceivingAnorith:: @@ -282,10 +259,8 @@ RustboroCity_DevonCorp_2F_EventScript_CancelFossilSelect:: RustboroCity_DevonCorp_2F_EventScript_MatchCallScientist:: lock faceplayer - compare VAR_FOSSIL_RESURRECTION_STATE, 1 - call_if_eq RustboroCity_DevonCorp_2F_EventScript_SetFossilReady - compare VAR_RUSTBORO_CITY_STATE, 6 - goto_if_ge RustboroCity_DevonCorp_2F_EventScript_WorkOnNext + call_if_eq VAR_FOSSIL_RESURRECTION_STATE, 1, RustboroCity_DevonCorp_2F_EventScript_SetFossilReady + goto_if_ge VAR_RUSTBORO_CITY_STATE, 6, RustboroCity_DevonCorp_2F_EventScript_WorkOnNext msgbox RustboroCity_DevonCorp_2F_Text_DevelopNewPokenavFeature, MSGBOX_DEFAULT release end diff --git a/data/maps/RustboroCity_DevonCorp_3F/scripts.inc b/data/maps/RustboroCity_DevonCorp_3F/scripts.inc index cfd6709983..ebf9044c54 100644 --- a/data/maps/RustboroCity_DevonCorp_3F/scripts.inc +++ b/data/maps/RustboroCity_DevonCorp_3F/scripts.inc @@ -7,8 +7,7 @@ RustboroCity_DevonCorp_3F_MapScripts:: .byte 0 RustboroCity_DevonCorp_3F_OnTransition: - compare VAR_DEVON_CORP_3F_STATE, 0 - call_if_eq RustboroCity_DevonCorp_3F_EventScript_SetEmployeePos + call_if_eq VAR_DEVON_CORP_3F_STATE, 0, RustboroCity_DevonCorp_3F_EventScript_SetEmployeePos end RustboroCity_DevonCorp_3F_EventScript_SetEmployeePos:: @@ -78,7 +77,7 @@ RustboroCity_DevonCorp_3F_Movement_Unused: walk_up walk_up walk_up - walk_in_place_fastest_left + walk_in_place_faster_left step_end RustboroCity_DevonCorp_3F_Movement_LeadPlayerToPresident: @@ -95,12 +94,12 @@ RustboroCity_DevonCorp_3F_Movement_LeadPlayerToPresident: walk_right walk_right walk_right - walk_in_place_fastest_left + walk_in_place_faster_left step_end RustboroCity_DevonCorp_3F_Movement_EmployeeFaceDesk: delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end RustboroCity_DevonCorp_3F_Movement_EmployeeWalkOffscreen: @@ -146,7 +145,7 @@ RustboroCity_DevonCorp_3F_Movement_PlayerApproachDesk: delay_16 walk_down walk_down - walk_in_place_fastest_right + walk_in_place_faster_right step_end RustboroCity_DevonCorp_3F_EventScript_MrStone:: @@ -164,8 +163,7 @@ RustboroCity_DevonCorp_3F_EventScript_MrStone:: RustboroCity_DevonCorp_3F_EventScript_GiveExpShare:: msgbox RustboroCity_DevonCorp_3F_Text_ThankYouForDeliveringLetter, MSGBOX_DEFAULT giveitem ITEM_EXP_SHARE - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_EXP_SHARE msgbox RustboroCity_DevonCorp_3F_Text_ExplainExpShare, MSGBOX_DEFAULT closemessage diff --git a/data/maps/RustboroCity_Flat1_2F/scripts.inc b/data/maps/RustboroCity_Flat1_2F/scripts.inc index a9d24092f8..8e972182c1 100644 --- a/data/maps/RustboroCity_Flat1_2F/scripts.inc +++ b/data/maps/RustboroCity_Flat1_2F/scripts.inc @@ -7,36 +7,28 @@ RustboroCity_Flat1_2F_EventScript_WaldasDad:: lock faceplayer specialvar VAR_RESULT, TryBufferWaldaPhrase - compare VAR_RESULT, FALSE - goto_if_eq RustboroCity_Flat1_2F_EventScript_WaldasDadFirstPhrase - compare VAR_RESULT, TRUE - goto_if_eq RustboroCity_Flat1_2F_EventScript_WaldasDadNewPhrase + goto_if_eq VAR_RESULT, FALSE, RustboroCity_Flat1_2F_EventScript_WaldasDadFirstPhrase + goto_if_eq VAR_RESULT, TRUE, RustboroCity_Flat1_2F_EventScript_WaldasDadNewPhrase RustboroCity_Flat1_2F_EventScript_GivePhrase:: special DoWaldaNamingScreen waitstate - compare VAR_0x8004, 1 - goto_if_eq RustboroCity_Flat1_2F_EventScript_CancelGivePhrase - compare VAR_0x8004, 2 - goto_if_eq RustboroCity_Flat1_2F_EventScript_CancelGiveFirstPhrase + goto_if_eq VAR_0x8004, 1, RustboroCity_Flat1_2F_EventScript_CancelGivePhrase + goto_if_eq VAR_0x8004, 2, RustboroCity_Flat1_2F_EventScript_CancelGiveFirstPhrase specialvar VAR_RESULT, TryGetWallpaperWithWaldaPhrase - compare VAR_RESULT, TRUE - goto_if_eq RustboroCity_Flat1_2F_EventScript_WaldaLikesPhrase - compare VAR_RESULT, FALSE - goto_if_eq RustboroCity_Flat1_2F_EventScript_WaldaDoesntLikePhrase + goto_if_eq VAR_RESULT, TRUE, RustboroCity_Flat1_2F_EventScript_WaldaLikesPhrase + goto_if_eq VAR_RESULT, FALSE, RustboroCity_Flat1_2F_EventScript_WaldaDoesntLikePhrase end RustboroCity_Flat1_2F_EventScript_WaldasDadFirstPhrase:: msgbox RustboroCity_Flat1_2F_Text_HelloDoYouKnowFunnyPhrase, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq RustboroCity_Flat1_2F_EventScript_DeclineGivePhrase + goto_if_eq VAR_RESULT, NO, RustboroCity_Flat1_2F_EventScript_DeclineGivePhrase msgbox RustboroCity_Flat1_2F_Text_WonderfulLetsHearSuggestion, MSGBOX_DEFAULT goto RustboroCity_Flat1_2F_EventScript_GivePhrase RustboroCity_Flat1_2F_EventScript_WaldasDadNewPhrase:: msgbox RustboroCity_Flat1_2F_Text_BeenSayingXDoYouKnowBetterPhrase, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq RustboroCity_Flat1_2F_EventScript_DeclineGivePhrase + goto_if_eq VAR_RESULT, NO, RustboroCity_Flat1_2F_EventScript_DeclineGivePhrase msgbox RustboroCity_Flat1_2F_Text_WonderfulLetsHearSuggestion, MSGBOX_DEFAULT goto RustboroCity_Flat1_2F_EventScript_GivePhrase diff --git a/data/maps/RustboroCity_Flat2_1F/scripts.inc b/data/maps/RustboroCity_Flat2_1F/scripts.inc index eda27c7168..7d965e8f3d 100644 --- a/data/maps/RustboroCity_Flat2_1F/scripts.inc +++ b/data/maps/RustboroCity_Flat2_1F/scripts.inc @@ -9,7 +9,7 @@ RustboroCity_Flat2_1F_EventScript_Skitty:: lock faceplayer waitse - playmoncry SPECIES_SKITTY, 0 + playmoncry SPECIES_SKITTY, CRY_MODE_NORMAL msgbox RustboroCity_Flat2_1F_Text_Skitty, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/RustboroCity_Flat2_2F/scripts.inc b/data/maps/RustboroCity_Flat2_2F/scripts.inc index 29edb7b586..97145ce8f2 100644 --- a/data/maps/RustboroCity_Flat2_2F/scripts.inc +++ b/data/maps/RustboroCity_Flat2_2F/scripts.inc @@ -11,8 +11,7 @@ RustboroCity_Flat2_2F_EventScript_NinjaBoy:: goto_if_set FLAG_RECEIVED_PREMIER_BALL_RUSTBORO, RustboroCity_Flat2_2F_EventScript_GavePremierBall msgbox RustboroCity_Flat2_2F_Text_MyDaddyMadeThisYouCanHaveIt, MSGBOX_DEFAULT giveitem ITEM_PREMIER_BALL - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_PREMIER_BALL_RUSTBORO release end diff --git a/data/maps/RustboroCity_Gym/scripts.inc b/data/maps/RustboroCity_Gym/scripts.inc index 11354fac0a..e1596a9730 100644 --- a/data/maps/RustboroCity_Gym/scripts.inc +++ b/data/maps/RustboroCity_Gym/scripts.inc @@ -4,8 +4,7 @@ RustboroCity_Gym_MapScripts:: RustboroCity_Gym_EventScript_Roxanne:: trainerbattle_single TRAINER_ROXANNE_1, RustboroCity_Gym_Text_RoxanneIntro, RustboroCity_Gym_Text_RoxanneDefeat, RustboroCity_Gym_EventScript_RoxanneDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq RustboroCity_Gym_EventScript_RoxanneRematch + goto_if_eq VAR_RESULT, TRUE, RustboroCity_Gym_EventScript_RoxanneRematch goto_if_unset FLAG_RECEIVED_TM39, RustboroCity_Gym_EventScript_GiveRockTomb msgbox RustboroCity_Gym_Text_RoxannePostBattle, MSGBOX_DEFAULT release @@ -22,15 +21,13 @@ RustboroCity_Gym_EventScript_RoxanneDefeated:: addvar VAR_PETALBURG_GYM_STATE, 1 setvar VAR_0x8008, 1 call Common_EventScript_SetGymTrainers - compare VAR_PETALBURG_GYM_STATE, 6 - call_if_eq Common_EventScript_ReadyPetalburgGymForBattle + call_if_eq VAR_PETALBURG_GYM_STATE, 6, Common_EventScript_ReadyPetalburgGymForBattle goto RustboroCity_Gym_EventScript_GiveRockTomb end RustboroCity_Gym_EventScript_GiveRockTomb:: giveitem ITEM_TM39 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM39 msgbox RustboroCity_Gym_Text_ExplainRockTomb, MSGBOX_DEFAULT release diff --git a/data/maps/RustboroCity_House1/scripts.inc b/data/maps/RustboroCity_House1/scripts.inc index 0b7de48bc5..88a33786c0 100644 --- a/data/maps/RustboroCity_House1/scripts.inc +++ b/data/maps/RustboroCity_House1/scripts.inc @@ -10,18 +10,15 @@ RustboroCity_House1_EventScript_Trader:: specialvar VAR_RESULT, GetInGameTradeSpeciesInfo copyvar VAR_0x8009, VAR_RESULT msgbox RustboroCity_House1_Text_IllTradeIfYouWant, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq RustboroCity_House1_EventScript_DeclineTrade + goto_if_eq VAR_RESULT, NO, RustboroCity_House1_EventScript_DeclineTrade special ChoosePartyMon waitstate copyvar VAR_0x800A, VAR_0x8004 - compare VAR_0x8004, 255 - goto_if_eq RustboroCity_House1_EventScript_DeclineTrade + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, RustboroCity_House1_EventScript_DeclineTrade copyvar VAR_0x8005, VAR_0x800A specialvar VAR_RESULT, GetTradeSpecies copyvar VAR_0x800B, VAR_RESULT - compare VAR_RESULT, VAR_0x8009 - goto_if_ne RustboroCity_House1_EventScript_NotRequestedMon + goto_if_ne VAR_RESULT, VAR_0x8009, RustboroCity_House1_EventScript_NotRequestedMon copyvar VAR_0x8004, VAR_0x8008 copyvar VAR_0x8005, VAR_0x800A special CreateInGameTradePokemon @@ -38,7 +35,7 @@ RustboroCity_House1_EventScript_DeclineTrade:: end RustboroCity_House1_EventScript_NotRequestedMon:: - bufferspeciesname 0, VAR_0x8009 + bufferspeciesname STR_VAR_1, VAR_0x8009 msgbox RustboroCity_House1_Text_DoesntLookLikeMonToMe, MSGBOX_DEFAULT release end diff --git a/data/maps/RustboroCity_House3/scripts.inc b/data/maps/RustboroCity_House3/scripts.inc index 70a359df63..549b4246c7 100644 --- a/data/maps/RustboroCity_House3/scripts.inc +++ b/data/maps/RustboroCity_House3/scripts.inc @@ -14,7 +14,7 @@ RustboroCity_House3_EventScript_Pekachu:: lock faceplayer waitse - playmoncry SPECIES_PIKACHU, 0 + playmoncry SPECIES_PIKACHU, CRY_MODE_NORMAL msgbox RustboroCity_House3_Text_Pekachu, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/RustboroCity_Mart/scripts.inc b/data/maps/RustboroCity_Mart/scripts.inc index 18120cb4de..65cc71baba 100644 --- a/data/maps/RustboroCity_Mart/scripts.inc +++ b/data/maps/RustboroCity_Mart/scripts.inc @@ -27,7 +27,7 @@ RustboroCity_Mart_Pokemart_Basic: .2byte ITEM_REPEL .2byte ITEM_X_SPEED .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_NONE release end @@ -51,7 +51,7 @@ RustboroCity_Mart_Pokemart_Expanded: .2byte ITEM_REPEL .2byte ITEM_X_SPEED .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_NONE release end diff --git a/data/maps/RustboroCity_PokemonSchool/scripts.inc b/data/maps/RustboroCity_PokemonSchool/scripts.inc index 791f5ee841..8a409d49b3 100644 --- a/data/maps/RustboroCity_PokemonSchool/scripts.inc +++ b/data/maps/RustboroCity_PokemonSchool/scripts.inc @@ -78,16 +78,13 @@ RustboroCity_PokemonSchool_EventScript_Teacher:: lock faceplayer goto_if_set FLAG_RECEIVED_QUICK_CLAW, RustboroCity_PokemonSchool_EventScript_GaveQuickClaw - compare VAR_FACING, DIR_EAST - call_if_eq RustboroCity_PokemonSchool_EventScript_TeacherCheckOnStudentsEast - compare VAR_FACING, DIR_WEST - call_if_eq RustboroCity_PokemonSchool_EventScript_TeacherCheckOnStudentsWest + call_if_eq VAR_FACING, DIR_EAST, RustboroCity_PokemonSchool_EventScript_TeacherCheckOnStudentsEast + call_if_eq VAR_FACING, DIR_WEST, RustboroCity_PokemonSchool_EventScript_TeacherCheckOnStudentsWest msgbox RustboroCity_PokemonSchool_Text_StudentsWhoDontStudyGetQuickClaw, MSGBOX_DEFAULT giveitem ITEM_QUICK_CLAW - compare VAR_RESULT, 0 - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 setflag FLAG_RECEIVED_QUICK_CLAW release @@ -106,7 +103,7 @@ RustboroCity_PokemonSchool_EventScript_TeacherCheckOnStudentsWest:: RustboroCity_PokemonSchool_EventScript_GaveQuickClaw:: msgbox RustboroCity_PokemonSchool_Text_ExplainQuickClaw, MSGBOX_DEFAULT closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 release end @@ -116,12 +113,12 @@ RustboroCity_PokemonSchool_Movement_TeacherCheckOnStudentsWest: walk_down walk_down walk_right - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_16 delay_16 walk_down - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 delay_16 walk_right @@ -143,12 +140,12 @@ RustboroCity_PokemonSchool_Movement_TeacherCheckOnStudentsEast: walk_down walk_left walk_left - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_16 delay_16 walk_down - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 delay_16 walk_right diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc index 1ba3c240c4..54e9574bd5 100644 --- a/data/maps/RusturfTunnel/scripts.inc +++ b/data/maps/RusturfTunnel/scripts.inc @@ -15,8 +15,7 @@ RusturfTunnel_OnFrame: .2byte 0 RusturfTunnel_OnTransition: - compare VAR_RUSTURF_TUNNEL_STATE, 2 - call_if_eq RusturfTunnel_EventScript_SetAquaGruntAndPeekoPos + call_if_eq VAR_RUSTURF_TUNNEL_STATE, 2, RusturfTunnel_EventScript_SetAquaGruntAndPeekoPos end RusturfTunnel_EventScript_SetAquaGruntAndPeekoPos:: @@ -56,36 +55,25 @@ RusturfTunnel_EventScript_AlreadySpokenTo:: RusturfTunnel_EventScript_ClearTunnelScene:: lockall - compare VAR_TEMP_1, 1 - call_if_eq RusturfTunnel_EventScript_FaceWandasBoyfriend1 - compare VAR_TEMP_1, 2 - call_if_eq RusturfTunnel_EventScript_FaceWandasBoyfriend2 - compare VAR_TEMP_1, 3 - call_if_eq RusturfTunnel_EventScript_FaceWandasBoyfriend3 + call_if_eq VAR_TEMP_1, 1, RusturfTunnel_EventScript_FaceWandasBoyfriend1 + call_if_eq VAR_TEMP_1, 2, RusturfTunnel_EventScript_FaceWandasBoyfriend2 + call_if_eq VAR_TEMP_1, 3, RusturfTunnel_EventScript_FaceWandasBoyfriend3 call RusturfTunnel_EventScript_WandasBoyfriendNotice msgbox RusturfTunnel_Text_YouShatteredBoulderTakeHM, MSGBOX_DEFAULT - compare VAR_TEMP_1, 2 - call_if_eq RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer - compare VAR_TEMP_1, 3 - call_if_eq RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer + call_if_eq VAR_TEMP_1, 2, RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer + call_if_eq VAR_TEMP_1, 3, RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer giveitem ITEM_HM04 setflag FLAG_RECEIVED_HM04 msgbox RusturfTunnel_Text_ExplainStrength, MSGBOX_DEFAULT closemessage - compare VAR_TEMP_1, 1 - call_if_eq RusturfTunnel_EventScript_BoyfriendApproachWanda1 - compare VAR_TEMP_1, 2 - call_if_eq RusturfTunnel_EventScript_BoyfriendApproachWanda2 - compare VAR_TEMP_1, 3 - call_if_eq RusturfTunnel_EventScript_BoyfriendApproachWanda3 + call_if_eq VAR_TEMP_1, 1, RusturfTunnel_EventScript_BoyfriendApproachWanda1 + call_if_eq VAR_TEMP_1, 2, RusturfTunnel_EventScript_BoyfriendApproachWanda2 + call_if_eq VAR_TEMP_1, 3, RusturfTunnel_EventScript_BoyfriendApproachWanda3 msgbox RusturfTunnel_Text_WandaReunion, MSGBOX_DEFAULT closemessage - compare VAR_TEMP_1, 1 - call_if_eq RusturfTunnel_EventScript_WandaAndBoyfriendExit1 - compare VAR_TEMP_1, 2 - call_if_eq RusturfTunnel_EventScript_WandaAndBoyfriendExit - compare VAR_TEMP_1, 3 - call_if_eq RusturfTunnel_EventScript_WandaAndBoyfriendExit + call_if_eq VAR_TEMP_1, 1, RusturfTunnel_EventScript_WandaAndBoyfriendExit1 + call_if_eq VAR_TEMP_1, 2, RusturfTunnel_EventScript_WandaAndBoyfriendExit + call_if_eq VAR_TEMP_1, 3, RusturfTunnel_EventScript_WandaAndBoyfriendExit call RusturfTunnel_EventScript_SetRusturfTunnelOpen releaseall end @@ -100,7 +88,7 @@ RusturfTunnel_EventScript_BoyfriendApproachWanda2:: applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PlayerWatchBoyfriend applymovement LOCALID_WANDAS_BF, RusturfTunnel_Movement_BoyfriendApproachWanda waitmovement 0 - applymovement LOCALID_WANDA, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_WANDA, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return @@ -108,14 +96,14 @@ RusturfTunnel_EventScript_BoyfriendApproachWanda3:: applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PlayerWatchBoyfriend applymovement LOCALID_WANDAS_BF, RusturfTunnel_Movement_BoyfriendApproachWanda waitmovement 0 - applymovement LOCALID_WANDA, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_WANDA, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return RusturfTunnel_EventScript_FaceWandasBoyfriend1:: - applymovement LOCALID_WANDAS_BF, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_WANDAS_BF, Common_Movement_WalkInPlaceFasterUp waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return @@ -184,44 +172,44 @@ RusturfTunnel_Movement_WandaExit: RusturfTunnel_Movement_PlayerWatchWandaExit: delay_8 - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right step_end RusturfTunnel_Movement_Unused1: walk_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end RusturfTunnel_Movement_Unused2: walk_down - walk_in_place_fastest_up + walk_in_place_faster_up delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right step_end RusturfTunnel_Movement_Unused3: walk_up - walk_in_place_fastest_down + walk_in_place_faster_down delay_8 - walk_in_place_fastest_right + walk_in_place_faster_right step_end RusturfTunnel_Movement_PlayerWatchBoyfriend1: walk_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end RusturfTunnel_Movement_PlayerWatchBoyfriend: walk_right - walk_in_place_fastest_left + walk_in_place_faster_left step_end RusturfTunnel_Movement_BoyfriendFaceRight: walk_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end RusturfTunnel_Movement_WandasBoyfriendExit1: @@ -269,7 +257,7 @@ RusturfTunnel_Movement_BoyfriendApproachWanda: walk_in_place_fast_right walk_in_place_fast_right walk_fast_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end RusturfTunnel_EventScript_TunnelBlockagePos1:: @@ -307,7 +295,7 @@ RusturfTunnel_EventScript_Peeko:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox RusturfTunnel_Text_Peeko, MSGBOX_DEFAULT waitmoncry release @@ -320,7 +308,7 @@ RusturfTunnel_EventScript_Grunt:: msgbox RusturfTunnel_Text_GruntIntro, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_GRUNT_RUSTURF_TUNNEL, RusturfTunnel_Text_GruntDefeat msgbox RusturfTunnel_Text_GruntTakePackage, MSGBOX_DEFAULT - giveitem ITEM_DEVON_GOODS + giveitem ITEM_DEVON_PARTS closemessage applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PushPlayerAsideForGrunt applymovement LOCALID_GRUNT, RusturfTunnel_Movement_GruntEscape @@ -339,7 +327,7 @@ RusturfTunnel_EventScript_Grunt:: message RusturfTunnel_Text_ThankYouLetsGoHomePeeko waitmessage waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL waitbuttonpress waitmoncry closemessage @@ -362,12 +350,12 @@ RusturfTunnel_Movement_PushPlayerAsideForGrunt: lock_facing_direction walk_up unlock_facing_direction - walk_in_place_fastest_left + walk_in_place_faster_left step_end RusturfTunnel_Movement_PlayerMoveAsideForBriney: walk_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end RusturfTunnel_Movement_GruntEscape: @@ -410,7 +398,7 @@ RusturfTunnel_Movement_PlayerWatchBrineyExit: delay_16 delay_8 delay_4 - walk_in_place_fastest_left + walk_in_place_faster_left step_end RusturfTunnel_Movement_BrineyApproachPeeko2: diff --git a/data/maps/SSTidalCorridor/scripts.inc b/data/maps/SSTidalCorridor/scripts.inc index 07c397e8c8..b39b9a4336 100644 --- a/data/maps/SSTidalCorridor/scripts.inc +++ b/data/maps/SSTidalCorridor/scripts.inc @@ -45,10 +45,8 @@ SSTidalRooms_EventScript_ArrivedInLilycove:: return SSTidalCorridor_EventScript_ReachedStepCount:: - compare VAR_SS_TIDAL_STATE, SS_TIDAL_DEPART_SLATEPORT - goto_if_eq SSTidalCorridor_EventScript_HalfwayToLilycove - compare VAR_SS_TIDAL_STATE, SS_TIDAL_HALFWAY_SLATEPORT - goto_if_eq SSTidalCorridor_EventScript_ArrivedInSlateport + goto_if_eq VAR_SS_TIDAL_STATE, SS_TIDAL_DEPART_SLATEPORT, SSTidalCorridor_EventScript_HalfwayToLilycove + goto_if_eq VAR_SS_TIDAL_STATE, SS_TIDAL_HALFWAY_SLATEPORT, SSTidalCorridor_EventScript_ArrivedInSlateport end SSTidalCorridor_EventScript_HalfwayToLilycove:: @@ -92,7 +90,7 @@ SSTidalCorridor_EventScript_Peeko:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox SSTidalCorridor_Text_Peeko, MSGBOX_DEFAULT waitmoncry release @@ -117,10 +115,8 @@ SSTidalCorridor_EventScript_Cabin4Sign:: SSTidalCorridor_EventScript_ExitSailor:: lock faceplayer - compare VAR_SS_TIDAL_STATE, SS_TIDAL_LAND_LILYCOVE - goto_if_eq SSTidalCorridor_EventScript_ExitLilycove - compare VAR_SS_TIDAL_STATE, SS_TIDAL_LAND_SLATEPORT - goto_if_eq SSTidalCorridor_EventScript_ExitSlateport + goto_if_eq VAR_SS_TIDAL_STATE, SS_TIDAL_LAND_LILYCOVE, SSTidalCorridor_EventScript_ExitLilycove + goto_if_eq VAR_SS_TIDAL_STATE, SS_TIDAL_LAND_SLATEPORT, SSTidalCorridor_EventScript_ExitSlateport msgbox SSTidalCorridor_Text_CanRestInCabin2, MSGBOX_DEFAULT release end @@ -129,7 +125,7 @@ SSTidalCorridor_EventScript_ExitLilycove:: setrespawn HEAL_LOCATION_LILYCOVE_CITY msgbox SSTidalCorridor_Text_WeveArrived, MSGBOX_DEFAULT call_if_set FLAG_RECEIVED_TM49, SSTidalCorridor_EventScript_HideSnatchGiver - warp MAP_LILYCOVE_CITY_HARBOR, 255, 8, 11 + warp MAP_LILYCOVE_CITY_HARBOR, 8, 11 waitstate release end @@ -138,7 +134,7 @@ SSTidalCorridor_EventScript_ExitSlateport:: setrespawn HEAL_LOCATION_SLATEPORT_CITY msgbox SSTidalCorridor_Text_WeveArrived, MSGBOX_DEFAULT call_if_set FLAG_RECEIVED_TM49, SSTidalCorridor_EventScript_HideSnatchGiver - warp MAP_SLATEPORT_CITY_HARBOR, 255, 8, 11 + warp MAP_SLATEPORT_CITY_HARBOR, 8, 11 waitstate release end @@ -149,10 +145,8 @@ SSTidalCorridor_EventScript_HideSnatchGiver:: SSTidalCorridor_EventScript_Porthole:: lockall - compare VAR_SS_TIDAL_STATE, SS_TIDAL_DEPART_SLATEPORT - goto_if_eq SSTidalCorridor_EventScript_LookThroughPorthole - compare VAR_SS_TIDAL_STATE, SS_TIDAL_HALFWAY_SLATEPORT - goto_if_eq SSTidalCorridor_EventScript_LookThroughPorthole + goto_if_eq VAR_SS_TIDAL_STATE, SS_TIDAL_DEPART_SLATEPORT, SSTidalCorridor_EventScript_LookThroughPorthole + goto_if_eq VAR_SS_TIDAL_STATE, SS_TIDAL_HALFWAY_SLATEPORT, SSTidalCorridor_EventScript_LookThroughPorthole msgbox SSTidalCorridor_Text_HorizonSpreadsBeyondPorthole, MSGBOX_DEFAULT releaseall end @@ -196,7 +190,7 @@ SSTidalCorridor_EventScript_ScottScene:: lockall applymovement LOCALID_SCOTT, SSTidalCorridor_Movement_ScottApproachPlayer waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox SSTidalCorridor_Text_ScottBattleFrontierInvite, MSGBOX_DEFAULT closemessage @@ -226,7 +220,7 @@ SSTidalCorridor_Movement_ScottApproachPlayer: step_end SSTidalCorridor_Movement_ScottExit: - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_16 delay_16 @@ -241,22 +235,22 @@ SSTidalCorridor_Movement_PlayerWatchScottExit: delay_16 delay_16 delay_8 - walk_in_place_fastest_down + walk_in_place_faster_down step_end SSTidalCorridor_Movement_SailorMoveForScott: delay_16 walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end SSTidalCorridor_Movement_SailorReturn: walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end SSTidalCorridor_Text_ScottBattleFrontierInvite: diff --git a/data/maps/SSTidalRooms/scripts.inc b/data/maps/SSTidalRooms/scripts.inc index c5cade489e..c3aa8ff8ab 100644 --- a/data/maps/SSTidalRooms/scripts.inc +++ b/data/maps/SSTidalRooms/scripts.inc @@ -7,8 +7,7 @@ SSTidalRooms_EventScript_SnatchGiver:: goto_if_set FLAG_RECEIVED_TM49, SSTidalRooms_EventScript_ExplainSnatch msgbox SSTidalRooms_Text_NotSuspiciousTakeThis, MSGBOX_DEFAULT giveitem ITEM_TM49 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM49 msgbox SSTidalRooms_Text_ExplainSnatch, MSGBOX_DEFAULT release diff --git a/data/maps/SafariZone_South/scripts.inc b/data/maps/SafariZone_South/scripts.inc index ee98443400..6b4c774c2b 100644 --- a/data/maps/SafariZone_South/scripts.inc +++ b/data/maps/SafariZone_South/scripts.inc @@ -21,8 +21,7 @@ SafariZone_South_EventScript_EnterSafariZone:: end SafariZone_South_OnTransition: - compare VAR_SAFARI_ZONE_STATE, 2 - call_if_eq SafariZone_South_EventScript_SetExitAttendantAside + call_if_eq VAR_SAFARI_ZONE_STATE, 2, SafariZone_South_EventScript_SetExitAttendantAside end SafariZone_South_EventScript_SetExitAttendantAside:: @@ -35,7 +34,7 @@ SafariZone_South_Movement_PlayerEnter: SafariZone_South_Movement_ExitAttendantBlockDoor: walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end SafariZone_South_EventScript_Boy:: @@ -55,8 +54,7 @@ SafariZone_South_EventScript_ExitAttendant:: faceplayer goto_if_unset FLAG_GOOD_LUCK_SAFARI_ZONE, SafariZone_South_EventScript_GoodLuck msgbox SafariZone_South_Text_StillHaveTimeExit, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SafariZone_South_EventScript_ExitEarly + goto_if_eq VAR_RESULT, YES, SafariZone_South_EventScript_ExitEarly msgbox SafariZone_South_Text_EnjoyTheRestOfYourAdventure, MSGBOX_DEFAULT release end @@ -94,7 +92,7 @@ SafariZone_South_EventScript_ExitEarlyEast:: SafariZone_South_EventScript_Exit:: setvar VAR_SAFARI_ZONE_STATE, 1 special ExitSafariMode - warpdoor MAP_ROUTE121_SAFARI_ZONE_ENTRANCE, 255, 2, 5 + warpdoor MAP_ROUTE121_SAFARI_ZONE_ENTRANCE, 2, 5 waitstate end @@ -104,17 +102,17 @@ SafariZone_South_Movement_PlayerExitNorth: SafariZone_South_Movement_PlayerExitEast: walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end SafariZone_South_Movement_MoveExitAttendantNorth: walk_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end SafariZone_South_Movement_MoveExitAttendantEast: walk_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end SafariZone_South_EventScript_ConstructionWorker1:: diff --git a/data/maps/SeafloorCavern_Entrance/scripts.inc b/data/maps/SeafloorCavern_Entrance/scripts.inc index b6b7b66759..eec69e6f80 100644 --- a/data/maps/SeafloorCavern_Entrance/scripts.inc +++ b/data/maps/SeafloorCavern_Entrance/scripts.inc @@ -5,14 +5,13 @@ SeafloorCavern_Entrance_MapScripts:: .byte 0 SeafloorCavern_Entrance_OnResume: - setdivewarp MAP_UNDERWATER_SEAFLOOR_CAVERN, 255, 6, 5 - setescapewarp MAP_UNDERWATER_SEAFLOOR_CAVERN, 255, 6, 5 + setdivewarp MAP_UNDERWATER_SEAFLOOR_CAVERN, 6, 5 + setescapewarp MAP_UNDERWATER_SEAFLOOR_CAVERN, 6, 5 end SeafloorCavern_Entrance_EventScript_Grunt:: lockall - compare VAR_HAS_TALKED_TO_SEAFLOOR_CAVERN_ENTRANCE_GRUNT, 1 - goto_if_eq SeafloorCavern_Entrance_EventScript_GruntSpeechShort + goto_if_eq VAR_HAS_TALKED_TO_SEAFLOOR_CAVERN_ENTRANCE_GRUNT, 1, SeafloorCavern_Entrance_EventScript_GruntSpeechShort waitse playse SE_PIN applymovement LOCALID_GRUNT, Common_Movement_ExclamationMark @@ -20,48 +19,42 @@ SeafloorCavern_Entrance_EventScript_Grunt:: applymovement LOCALID_GRUNT, Common_Movement_Delay48 waitmovement 0 delay 20 - compare VAR_FACING, DIR_WEST - call_if_eq SeafloorCavern_Entrance_EventScript_GruntFacePlayerWest - compare VAR_FACING, DIR_EAST - call_if_eq SeafloorCavern_Entrance_EventScript_GruntFacePlayerEast - compare VAR_FACING, DIR_NORTH - call_if_eq SeafloorCavern_Entrance_EventScript_GruntFacePlayerNorth + call_if_eq VAR_FACING, DIR_WEST, SeafloorCavern_Entrance_EventScript_GruntFacePlayerWest + call_if_eq VAR_FACING, DIR_EAST, SeafloorCavern_Entrance_EventScript_GruntFacePlayerEast + call_if_eq VAR_FACING, DIR_NORTH, SeafloorCavern_Entrance_EventScript_GruntFacePlayerNorth delay 30 setvar VAR_HAS_TALKED_TO_SEAFLOOR_CAVERN_ENTRANCE_GRUNT, 1 copyobjectxytoperm LOCALID_GRUNT msgbox SeafloorCavern_Entrance_Text_HearMagmaNearMossdeep, MSGBOX_DEFAULT closemessage - applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFasterUp waitmovement 0 releaseall end SeafloorCavern_Entrance_EventScript_GruntSpeechShort:: - compare VAR_FACING, DIR_WEST - call_if_eq SeafloorCavern_Entrance_EventScript_GruntFacePlayerWest - compare VAR_FACING, DIR_EAST - call_if_eq SeafloorCavern_Entrance_EventScript_GruntFacePlayerEast - compare VAR_FACING, DIR_NORTH - call_if_eq SeafloorCavern_Entrance_EventScript_GruntFacePlayerNorth + call_if_eq VAR_FACING, DIR_WEST, SeafloorCavern_Entrance_EventScript_GruntFacePlayerWest + call_if_eq VAR_FACING, DIR_EAST, SeafloorCavern_Entrance_EventScript_GruntFacePlayerEast + call_if_eq VAR_FACING, DIR_NORTH, SeafloorCavern_Entrance_EventScript_GruntFacePlayerNorth msgbox SeafloorCavern_Entrance_Text_HearMagmaNearMossdeepShort, MSGBOX_DEFAULT closemessage - applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFasterUp waitmovement 0 releaseall end SeafloorCavern_Entrance_EventScript_GruntFacePlayerEast:: - applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return SeafloorCavern_Entrance_EventScript_GruntFacePlayerWest:: - applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return SeafloorCavern_Entrance_EventScript_GruntFacePlayerNorth:: - applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return diff --git a/data/maps/SeafloorCavern_Room9/scripts.inc b/data/maps/SeafloorCavern_Room9/scripts.inc index 7749d7a194..63e6baf3c7 100644 --- a/data/maps/SeafloorCavern_Room9/scripts.inc +++ b/data/maps/SeafloorCavern_Room9/scripts.inc @@ -14,7 +14,7 @@ SeafloorCavern_Room9_EventScript_ArchieAwakenKyogre:: setvar VAR_0x8005, LOCALID_MAXIE setvar VAR_0x8006, LOCALID_GRUNT_1 setvar VAR_0x8007, LOCALID_GRUNT_2 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, SeafloorCavern_Room9_Movement_Delay32 waitmovement 0 @@ -22,12 +22,12 @@ SeafloorCavern_Room9_EventScript_ArchieAwakenKyogre:: msgbox SeafloorCavern_Room9_Text_ArchieHoldItRightThere, MSGBOX_DEFAULT closemessage addobject VAR_0x8004 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 applymovement VAR_0x8004, SeafloorCavern_Room9_Movement_ArchieApproachPlayer waitmovement 0 msgbox SeafloorCavern_Room9_Text_ArchieSoItWasYou, MSGBOX_DEFAULT - applymovement VAR_0x8004, Common_Movement_WalkInPlaceFastestUp + applymovement VAR_0x8004, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox SeafloorCavern_Room9_Text_ArchieBeholdKyogre, MSGBOX_DEFAULT applymovement VAR_0x8004, Common_Movement_FacePlayer @@ -51,8 +51,8 @@ SeafloorCavern_Room9_EventScript_ArchieAwakenKyogre:: playfanfare MUS_AWAKEN_LEGEND playse SE_ORB special DoOrbEffect - applymovement VAR_0x8004, Common_Movement_WalkInPlaceFastestUp - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement VAR_0x8004, Common_Movement_WalkInPlaceFasterUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 150 removeobject LOCALID_KYOGRE_SLEEPING @@ -86,7 +86,7 @@ SeafloorCavern_Room9_EventScript_ArchieAwakenKyogre:: setvar VAR_0x8007, LOCALID_GRUNT_2 msgbox SeafloorCavern_Room9_Text_ArchieWhereDidKyogreGo, MSGBOX_DEFAULT playse SE_PC_LOGIN - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox SeafloorCavern_Room9_Text_ArchieAMessageFromOutside, MSGBOX_DEFAULT closemessage @@ -96,7 +96,7 @@ SeafloorCavern_Room9_EventScript_ArchieAwakenKyogre:: closemessage playse SE_PC_OFF delay 20 - applymovement VAR_0x8004, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_0x8004, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox SeafloorCavern_Room9_Text_ArchieWhyDidKyogreDisappear, MSGBOX_DEFAULT closemessage @@ -107,7 +107,7 @@ SeafloorCavern_Room9_EventScript_ArchieAwakenKyogre:: applymovement VAR_0x8006, SeafloorCavern_Room9_Movement_MagmaGruntArrive applymovement VAR_0x8005, SeafloorCavern_Room9_Movement_MaxieArrive waitmovement 0 - applymovement VAR_0x8004, Common_Movement_WalkInPlaceFastestLeft + applymovement VAR_0x8004, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox SeafloorCavern_Room9_Text_MaxieWhatHaveYouWrought, MSGBOX_DEFAULT playse SE_PIN @@ -145,7 +145,7 @@ SeafloorCavern_Room9_EventScript_ArchieAwakenKyogre:: setflag FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_KYOGRE setflag FLAG_HIDE_SEAFLOOR_CAVERN_AQUA_GRUNTS setflag FLAG_HIDE_MAP_NAME_POPUP - warp MAP_ROUTE128, 255, 38, 22 + warp MAP_ROUTE128, 38, 22 waitstate releaseall end @@ -179,7 +179,7 @@ SeafloorCavern_Room9_Movement_ArchieExit: lock_facing_direction walk_down unlock_facing_direction - walk_in_place_fastest_right + walk_in_place_faster_right step_end SeafloorCavern_Room9_Movement_KyogreApproach: diff --git a/data/maps/SealedChamber_InnerRoom/scripts.inc b/data/maps/SealedChamber_InnerRoom/scripts.inc index f81e5f9fde..036ab4fb80 100644 --- a/data/maps/SealedChamber_InnerRoom/scripts.inc +++ b/data/maps/SealedChamber_InnerRoom/scripts.inc @@ -3,27 +3,24 @@ SealedChamber_InnerRoom_MapScripts:: SealedChamber_InnerRoom_EventScript_BrailleBackWall:: lockall - braillemessage SealedChamber_InnerRoom_Braille_FirstWailordLastRelicanth - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_InnerRoom_Braille_FirstWailordLastRelicanth goto_if_set FLAG_REGI_DOORS_OPENED, SealedChamber_InnerRoom_EventScript_NoEffect specialvar VAR_RESULT, CheckRelicanthWailord - compare VAR_RESULT, FALSE - goto_if_eq SealedChamber_InnerRoom_EventScript_NoEffect + goto_if_eq VAR_RESULT, FALSE, SealedChamber_InnerRoom_EventScript_NoEffect fadeoutbgm 0 playse SE_TRUCK_MOVE - special DoSealedChamberShakingEffect1 + special DoSealedChamberShakingEffect_Long waitstate delay 40 - special DoSealedChamberShakingEffect2 + special DoSealedChamberShakingEffect_Short waitstate playse SE_DOOR delay 40 - special DoSealedChamberShakingEffect2 + special DoSealedChamberShakingEffect_Short waitstate playse SE_DOOR delay 40 - special DoSealedChamberShakingEffect2 + special DoSealedChamberShakingEffect_Short waitstate playse SE_DOOR delay 40 @@ -40,49 +37,37 @@ SealedChamber_InnerRoom_EventScript_NoEffect:: SealedChamber_InnerRoom_EventScript_BrailleStoryPart1:: lockall - braillemessage SealedChamber_InnerRoom_Braille_InThisCaveWeHaveLived - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_InnerRoom_Braille_InThisCaveWeHaveLived releaseall end SealedChamber_InnerRoom_EventScript_BrailleStoryPart2:: lockall - braillemessage SealedChamber_InnerRoom_Braille_WeOweAllToThePokemon - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_InnerRoom_Braille_WeOweAllToThePokemon releaseall end SealedChamber_InnerRoom_EventScript_BrailleStoryPart3:: lockall - braillemessage SealedChamber_InnerRoom_Braille_ButWeSealedThePokemonAway - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_InnerRoom_Braille_ButWeSealedThePokemonAway releaseall end SealedChamber_InnerRoom_EventScript_BrailleStoryPart4:: lockall - braillemessage SealedChamber_InnerRoom_Braille_WeFearedIt - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_InnerRoom_Braille_WeFearedIt releaseall end SealedChamber_InnerRoom_EventScript_BrailleStoryPart5:: lockall - braillemessage SealedChamber_InnerRoom_Braille_ThoseWithCourageHope - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_InnerRoom_Braille_ThoseWithCourageHope releaseall end SealedChamber_InnerRoom_EventScript_BrailleStoryPart6:: lockall - braillemessage SealedChamber_InnerRoom_Braille_OpenDoorEternalPokemonWaits - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_InnerRoom_Braille_OpenDoorEternalPokemonWaits releaseall end diff --git a/data/maps/SealedChamber_OuterRoom/scripts.inc b/data/maps/SealedChamber_OuterRoom/scripts.inc index 2e80d06c82..bf02c7fe37 100644 --- a/data/maps/SealedChamber_OuterRoom/scripts.inc +++ b/data/maps/SealedChamber_OuterRoom/scripts.inc @@ -5,8 +5,8 @@ SealedChamber_OuterRoom_MapScripts:: .byte 0 SealedChamber_OuterRoom_OnResume: - setdivewarp MAP_UNDERWATER_SEALED_CHAMBER, 255, 12, 44 - setescapewarp MAP_UNDERWATER_SEALED_CHAMBER, 255, 12, 44 + setdivewarp MAP_UNDERWATER_SEALED_CHAMBER, 12, 44 + setescapewarp MAP_UNDERWATER_SEALED_CHAMBER, 12, 44 end SealedChamber_OuterRoom_OnTransition: @@ -18,100 +18,78 @@ SealedChamber_OuterRoom_OnLoad: end SealedChamber_OuterRoom_EventScript_CloseInnerRoomEntrance:: - setmetatile 9, 1, METATILE_Cave_EntranceCover, 1 - setmetatile 10, 1, METATILE_Cave_EntranceCover, 1 - setmetatile 11, 1, METATILE_Cave_EntranceCover, 1 - setmetatile 9, 2, METATILE_Cave_SealedChamberBraille_Mid, 1 - setmetatile 10, 2, METATILE_Cave_SealedChamberBraille_Mid, 1 - setmetatile 11, 2, METATILE_Cave_SealedChamberBraille_Mid, 1 + setmetatile 9, 1, METATILE_Cave_EntranceCover, TRUE + setmetatile 10, 1, METATILE_Cave_EntranceCover, TRUE + setmetatile 11, 1, METATILE_Cave_EntranceCover, TRUE + setmetatile 9, 2, METATILE_Cave_SealedChamberBraille_Mid, TRUE + setmetatile 10, 2, METATILE_Cave_SealedChamberBraille_Mid, TRUE + setmetatile 11, 2, METATILE_Cave_SealedChamberBraille_Mid, TRUE return SealedChamber_OuterRoom_EventScript_BrailleABC:: lockall - braillemessage SealedChamber_OuterRoom_Braille_ABC - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_ABC releaseall end SealedChamber_OuterRoom_EventScript_BrailleGHI:: lockall - braillemessage SealedChamber_OuterRoom_Braille_GHI - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_GHI releaseall end SealedChamber_OuterRoom_EventScript_BrailleMNO:: lockall - braillemessage SealedChamber_OuterRoom_Braille_MNO - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_MNO releaseall end SealedChamber_OuterRoom_EventScript_BrailleTUV:: lockall - braillemessage SealedChamber_OuterRoom_Braille_TUV - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_TUV releaseall end SealedChamber_OuterRoom_EventScript_BrailleDEF:: lockall - braillemessage SealedChamber_OuterRoom_Braille_DEF - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_DEF releaseall end SealedChamber_OuterRoom_EventScript_BrailleJKL:: lockall - braillemessage SealedChamber_OuterRoom_Braille_JKL - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_JKL releaseall end SealedChamber_OuterRoom_EventScript_BraillePQRS:: lockall - braillemessage SealedChamber_OuterRoom_Braille_PQRS - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_PQRS releaseall end SealedChamber_OuterRoom_EventScript_BraillePeriod:: lockall - braillemessage SealedChamber_OuterRoom_Braille_Period - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_Period releaseall end SealedChamber_OuterRoom_EventScript_BrailleWXYZ:: lockall - braillemessage SealedChamber_OuterRoom_Braille_WXYZ - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_WXYZ releaseall end SealedChamber_OuterRoom_EventScript_BrailleComma:: lockall - braillemessage SealedChamber_OuterRoom_Braille_Comma - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_Comma releaseall end SealedChamber_OuterRoom_EventScript_InnerRoomEntranceWall:: lockall goto_if_set FLAG_SYS_BRAILLE_DIG, SealedChamber_OuterRoom_EventScript_HoleInWall - braillemessage SealedChamber_OuterRoom_Braille_DigHere - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_DigHere releaseall end @@ -122,9 +100,7 @@ SealedChamber_OuterRoom_EventScript_HoleInWall:: SealedChamber_OuterRoom_EventScript_BrailleDigHere:: lockall - braillemessage SealedChamber_OuterRoom_Braille_DigHere - waitbuttonpress - closebraillemessage + braillemsgbox SealedChamber_OuterRoom_Braille_DigHere releaseall end diff --git a/data/maps/SecretBase_BlueCave1/map.json b/data/maps/SecretBase_BlueCave1/map.json index 3fb6157cca..066cfb3857 100644 --- a/data/maps/SecretBase_BlueCave1/map.json +++ b/data/maps/SecretBase_BlueCave1/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_BlueCave2/map.json b/data/maps/SecretBase_BlueCave2/map.json index ca15e39f18..b74fa5afb6 100644 --- a/data/maps/SecretBase_BlueCave2/map.json +++ b/data/maps/SecretBase_BlueCave2/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_BlueCave3/map.json b/data/maps/SecretBase_BlueCave3/map.json index 356b4894d4..dd67e2d546 100644 --- a/data/maps/SecretBase_BlueCave3/map.json +++ b/data/maps/SecretBase_BlueCave3/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_BlueCave4/map.json b/data/maps/SecretBase_BlueCave4/map.json index 078bada8e6..3c97371f53 100644 --- a/data/maps/SecretBase_BlueCave4/map.json +++ b/data/maps/SecretBase_BlueCave4/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_BrownCave1/map.json b/data/maps/SecretBase_BrownCave1/map.json index 6f2dc92f24..062eac9f4b 100644 --- a/data/maps/SecretBase_BrownCave1/map.json +++ b/data/maps/SecretBase_BrownCave1/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_BrownCave2/map.json b/data/maps/SecretBase_BrownCave2/map.json index 11559c12fb..eb04f2a8de 100644 --- a/data/maps/SecretBase_BrownCave2/map.json +++ b/data/maps/SecretBase_BrownCave2/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_BrownCave3/map.json b/data/maps/SecretBase_BrownCave3/map.json index c2dbb7fc45..1d00ee139a 100644 --- a/data/maps/SecretBase_BrownCave3/map.json +++ b/data/maps/SecretBase_BrownCave3/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_BrownCave4/map.json b/data/maps/SecretBase_BrownCave4/map.json index e7147ae85d..f1fb82eb4f 100644 --- a/data/maps/SecretBase_BrownCave4/map.json +++ b/data/maps/SecretBase_BrownCave4/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_RedCave1/map.json b/data/maps/SecretBase_RedCave1/map.json index fd264fc6cf..e83458a87a 100644 --- a/data/maps/SecretBase_RedCave1/map.json +++ b/data/maps/SecretBase_RedCave1/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_RedCave2/map.json b/data/maps/SecretBase_RedCave2/map.json index b60b3bbff2..9a0ac210f4 100644 --- a/data/maps/SecretBase_RedCave2/map.json +++ b/data/maps/SecretBase_RedCave2/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_RedCave3/map.json b/data/maps/SecretBase_RedCave3/map.json index 079837a621..ce405a40ab 100644 --- a/data/maps/SecretBase_RedCave3/map.json +++ b/data/maps/SecretBase_RedCave3/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_RedCave4/map.json b/data/maps/SecretBase_RedCave4/map.json index 10fbbfeb0d..2b1ad8c2c9 100644 --- a/data/maps/SecretBase_RedCave4/map.json +++ b/data/maps/SecretBase_RedCave4/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_Shrub1/map.json b/data/maps/SecretBase_Shrub1/map.json index e0d1015cbb..a028cbe62a 100644 --- a/data/maps/SecretBase_Shrub1/map.json +++ b/data/maps/SecretBase_Shrub1/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_Shrub2/map.json b/data/maps/SecretBase_Shrub2/map.json index 879b7464e9..60977e70d4 100644 --- a/data/maps/SecretBase_Shrub2/map.json +++ b/data/maps/SecretBase_Shrub2/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_Shrub3/map.json b/data/maps/SecretBase_Shrub3/map.json index 6751a74147..a513b0bd2b 100644 --- a/data/maps/SecretBase_Shrub3/map.json +++ b/data/maps/SecretBase_Shrub3/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_Shrub4/map.json b/data/maps/SecretBase_Shrub4/map.json index c193b8348e..6aded553b8 100644 --- a/data/maps/SecretBase_Shrub4/map.json +++ b/data/maps/SecretBase_Shrub4/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_Tree1/map.json b/data/maps/SecretBase_Tree1/map.json index cd0cad5f08..cd6a0b33af 100644 --- a/data/maps/SecretBase_Tree1/map.json +++ b/data/maps/SecretBase_Tree1/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_Tree2/map.json b/data/maps/SecretBase_Tree2/map.json index 1ac393a158..3aad151ffe 100644 --- a/data/maps/SecretBase_Tree2/map.json +++ b/data/maps/SecretBase_Tree2/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_Tree3/map.json b/data/maps/SecretBase_Tree3/map.json index b7eec22440..498852c024 100644 --- a/data/maps/SecretBase_Tree3/map.json +++ b/data/maps/SecretBase_Tree3/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_Tree4/map.json b/data/maps/SecretBase_Tree4/map.json index 0e068ec94d..b24d1d8a99 100644 --- a/data/maps/SecretBase_Tree4/map.json +++ b/data/maps/SecretBase_Tree4/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_YellowCave1/map.json b/data/maps/SecretBase_YellowCave1/map.json index 1d873bfe29..54916fda32 100644 --- a/data/maps/SecretBase_YellowCave1/map.json +++ b/data/maps/SecretBase_YellowCave1/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_YellowCave2/map.json b/data/maps/SecretBase_YellowCave2/map.json index af2e957bc6..f9d9a572be 100644 --- a/data/maps/SecretBase_YellowCave2/map.json +++ b/data/maps/SecretBase_YellowCave2/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_YellowCave3/map.json b/data/maps/SecretBase_YellowCave3/map.json index d78aa28628..fdcc94c18b 100644 --- a/data/maps/SecretBase_YellowCave3/map.json +++ b/data/maps/SecretBase_YellowCave3/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/SecretBase_YellowCave4/map.json b/data/maps/SecretBase_YellowCave4/map.json index 0ca4bc4d32..246974eaad 100644 --- a/data/maps/SecretBase_YellowCave4/map.json +++ b/data/maps/SecretBase_YellowCave4/map.json @@ -26,7 +26,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "SecretBase_EventScript_RecordMixTrainer", - "flag": "FLAG_DECORATION_0" + "flag": "FLAG_HIDE_SECRET_BASE_TRAINER" }, { "graphics_id": "OBJ_EVENT_GFX_VAR_0", diff --git a/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc b/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc index a1206dfb47..905a9a77a7 100644 --- a/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc +++ b/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc @@ -21,25 +21,19 @@ ShoalCave_LowTideEntranceRoom_EventScript_ShellBellExpert:: dotimebasedevents call_if_set FLAG_SYS_SHOAL_ITEM, ShoalCave_LowTideEntranceRoom_EventScript_ResetShoalItems checkitem ITEM_SHOAL_SALT, 4 - compare VAR_RESULT, FALSE - goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_NotEnoughShoalSaltOrShells + goto_if_eq VAR_RESULT, FALSE, ShoalCave_LowTideEntranceRoom_EventScript_NotEnoughShoalSaltOrShells checkitem ITEM_SHOAL_SHELL, 4 - compare VAR_RESULT, FALSE - goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_NotEnoughShoalSaltOrShells + goto_if_eq VAR_RESULT, FALSE, ShoalCave_LowTideEntranceRoom_EventScript_NotEnoughShoalSaltOrShells msgbox ShoalCave_LowTideEntranceRoom_Text_WouldYouLikeShellBell, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_DeclineShellBell - checkitemspace ITEM_SHELL_BELL, 1 - compare VAR_RESULT, FALSE - call_if_eq ShoalCave_LowTideEntranceRoom_EventScript_CheckSpaceWillBeFreed - compare VAR_RESULT, 2 - goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_NoRoomForShellBell + goto_if_eq VAR_RESULT, NO, ShoalCave_LowTideEntranceRoom_EventScript_DeclineShellBell + checkitemspace ITEM_SHELL_BELL + call_if_eq VAR_RESULT, FALSE, ShoalCave_LowTideEntranceRoom_EventScript_CheckSpaceWillBeFreed + goto_if_eq VAR_RESULT, 2, ShoalCave_LowTideEntranceRoom_EventScript_NoRoomForShellBell msgbox ShoalCave_LowTideEntranceRoom_Text_MakeShellBellRightAway, MSGBOX_DEFAULT removeitem ITEM_SHOAL_SALT, 4 removeitem ITEM_SHOAL_SHELL, 4 giveitem ITEM_SHELL_BELL - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox ShoalCave_LowTideEntranceRoom_Text_ExplainShellBell, MSGBOX_DEFAULT setflag FLAG_TEMP_2 release @@ -48,14 +42,12 @@ ShoalCave_LowTideEntranceRoom_EventScript_ShellBellExpert:: @ If the bag is full, check if a slot will be freed when 4 Shoal Salt or Shells are given ShoalCave_LowTideEntranceRoom_EventScript_CheckSpaceWillBeFreed:: checkitem ITEM_SHOAL_SALT, 5 - compare VAR_RESULT, TRUE - goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_CheckSpaceWillBeFreedShells + goto_if_eq VAR_RESULT, TRUE, ShoalCave_LowTideEntranceRoom_EventScript_CheckSpaceWillBeFreedShells return ShoalCave_LowTideEntranceRoom_EventScript_CheckSpaceWillBeFreedShells:: checkitem ITEM_SHOAL_SHELL, 5 - compare VAR_RESULT, TRUE - goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_NoSpaceWillBeFreed + goto_if_eq VAR_RESULT, TRUE, ShoalCave_LowTideEntranceRoom_EventScript_NoSpaceWillBeFreed return ShoalCave_LowTideEntranceRoom_EventScript_NoSpaceWillBeFreed:: @@ -68,12 +60,10 @@ ShoalCave_LowTideEntranceRoom_EventScript_NoRoomForShellBell:: end ShoalCave_LowTideEntranceRoom_EventScript_NotEnoughShoalSaltOrShells:: - checkitem ITEM_SHOAL_SALT, 1 - compare VAR_RESULT, TRUE - goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_HasSomeShoalSaltOrShell - checkitem ITEM_SHOAL_SHELL, 1 - compare VAR_RESULT, TRUE - goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_HasSomeShoalSaltOrShell + checkitem ITEM_SHOAL_SALT + goto_if_eq VAR_RESULT, TRUE, ShoalCave_LowTideEntranceRoom_EventScript_HasSomeShoalSaltOrShell + checkitem ITEM_SHOAL_SHELL + goto_if_eq VAR_RESULT, TRUE, ShoalCave_LowTideEntranceRoom_EventScript_HasSomeShoalSaltOrShell msgbox ShoalCave_LowTideEntranceRoom_Text_AreYouPlanningOnGoingInThere, MSGBOX_DEFAULT release end diff --git a/data/maps/ShoalCave_LowTideInnerRoom/scripts.inc b/data/maps/ShoalCave_LowTideInnerRoom/scripts.inc index 9692d2f694..17f6a7ca6b 100644 --- a/data/maps/ShoalCave_LowTideInnerRoom/scripts.inc +++ b/data/maps/ShoalCave_LowTideInnerRoom/scripts.inc @@ -22,38 +22,38 @@ ShoalCave_LowTideInnerRoom_OnLoad: ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles:: goto_if_set FLAG_RECEIVED_SHOAL_SALT_1, ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles2 goto_if_set FLAG_SYS_SHOAL_TIDE, ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles2 - setmetatile 31, 8, METATILE_Cave_ShoalCave_DirtPile_Large, 1 + setmetatile 31, 8, METATILE_Cave_ShoalCave_DirtPile_Large, TRUE goto ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles2 end ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles2:: goto_if_set FLAG_RECEIVED_SHOAL_SALT_2, ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles3 goto_if_set FLAG_SYS_SHOAL_TIDE, ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles3 - setmetatile 14, 26, METATILE_Cave_ShoalCave_DirtPile_Large, 1 + setmetatile 14, 26, METATILE_Cave_ShoalCave_DirtPile_Large, TRUE goto ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles3 end ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles3:: goto_if_set FLAG_RECEIVED_SHOAL_SHELL_1, ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles4 - setmetatile 41, 20, METATILE_Cave_ShoalCave_BlueStone_Large, 1 + setmetatile 41, 20, METATILE_Cave_ShoalCave_BlueStone_Large, TRUE goto ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles4 end ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles4:: goto_if_set FLAG_RECEIVED_SHOAL_SHELL_2, ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles5 - setmetatile 41, 10, METATILE_Cave_ShoalCave_BlueStone_Large, 1 + setmetatile 41, 10, METATILE_Cave_ShoalCave_BlueStone_Large, TRUE goto ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles5 end ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles5:: goto_if_set FLAG_RECEIVED_SHOAL_SHELL_3, ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles6 - setmetatile 6, 9, METATILE_Cave_ShoalCave_BlueStone_Large, 1 + setmetatile 6, 9, METATILE_Cave_ShoalCave_BlueStone_Large, TRUE goto ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles6 end ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatiles6:: goto_if_set FLAG_RECEIVED_SHOAL_SHELL_4, ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatilesEnd - setmetatile 16, 13, METATILE_Cave_ShoalCave_BlueStone_Large, 1 + setmetatile 16, 13, METATILE_Cave_ShoalCave_BlueStone_Large, TRUE return ShoalCave_LowTideInnerRoom_EventScript_SetShoalItemMetatilesEnd:: @@ -63,9 +63,8 @@ ShoalCave_LowTideInnerRoom_EventScript_ShoalShell1:: lockall goto_if_set FLAG_RECEIVED_SHOAL_SHELL_1, ShoalCave_LowTideInnerRoom_EventScript_ReceivedShoalShell giveitem ITEM_SHOAL_SHELL - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull - setmetatile 41, 20, METATILE_Cave_ShoalCave_BlueStone_Small, 0 + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull + setmetatile 41, 20, METATILE_Cave_ShoalCave_BlueStone_Small, FALSE special DrawWholeMapView setflag FLAG_RECEIVED_SHOAL_SHELL_1 releaseall @@ -80,9 +79,8 @@ ShoalCave_LowTideInnerRoom_EventScript_ShoalShell2:: lockall goto_if_set FLAG_RECEIVED_SHOAL_SHELL_2, ShoalCave_LowTideInnerRoom_EventScript_ReceivedShoalShell giveitem ITEM_SHOAL_SHELL - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull - setmetatile 41, 10, METATILE_Cave_ShoalCave_BlueStone_Small, 0 + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull + setmetatile 41, 10, METATILE_Cave_ShoalCave_BlueStone_Small, FALSE special DrawWholeMapView setflag FLAG_RECEIVED_SHOAL_SHELL_2 releaseall @@ -92,9 +90,8 @@ ShoalCave_LowTideInnerRoom_EventScript_ShoalShell3:: lockall goto_if_set FLAG_RECEIVED_SHOAL_SHELL_3, ShoalCave_LowTideInnerRoom_EventScript_ReceivedShoalShell giveitem ITEM_SHOAL_SHELL - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull - setmetatile 6, 9, METATILE_Cave_ShoalCave_BlueStone_Small, 0 + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull + setmetatile 6, 9, METATILE_Cave_ShoalCave_BlueStone_Small, FALSE special DrawWholeMapView setflag FLAG_RECEIVED_SHOAL_SHELL_3 releaseall @@ -104,9 +101,8 @@ ShoalCave_LowTideInnerRoom_EventScript_ShoalShell4:: lockall goto_if_set FLAG_RECEIVED_SHOAL_SHELL_4, ShoalCave_LowTideInnerRoom_EventScript_ReceivedShoalShell giveitem ITEM_SHOAL_SHELL - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull - setmetatile 16, 13, METATILE_Cave_ShoalCave_BlueStone_Small, 0 + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull + setmetatile 16, 13, METATILE_Cave_ShoalCave_BlueStone_Small, FALSE special DrawWholeMapView setflag FLAG_RECEIVED_SHOAL_SHELL_4 releaseall @@ -116,9 +112,8 @@ ShoalCave_LowTideInnerRoom_EventScript_ShoalSalt1:: lockall goto_if_set FLAG_RECEIVED_SHOAL_SALT_1, ShoalCave_LowTideInnerRoom_EventScript_ReceivedShoalSalt giveitem ITEM_SHOAL_SALT - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull - setmetatile 31, 8, METATILE_Cave_ShoalCave_DirtPile_Small, 0 + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull + setmetatile 31, 8, METATILE_Cave_ShoalCave_DirtPile_Small, FALSE special DrawWholeMapView setflag FLAG_RECEIVED_SHOAL_SALT_1 releaseall @@ -133,9 +128,8 @@ ShoalCave_LowTideInnerRoom_EventScript_ShoalSalt2:: lockall goto_if_set FLAG_RECEIVED_SHOAL_SALT_2, ShoalCave_LowTideInnerRoom_EventScript_ReceivedShoalSalt giveitem ITEM_SHOAL_SALT - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull - setmetatile 14, 26, METATILE_Cave_ShoalCave_DirtPile_Small, 0 + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull + setmetatile 14, 26, METATILE_Cave_ShoalCave_DirtPile_Small, FALSE special DrawWholeMapView setflag FLAG_RECEIVED_SHOAL_SALT_2 releaseall diff --git a/data/maps/ShoalCave_LowTideLowerRoom/scripts.inc b/data/maps/ShoalCave_LowTideLowerRoom/scripts.inc index d7937998ee..a06d46cc2a 100644 --- a/data/maps/ShoalCave_LowTideLowerRoom/scripts.inc +++ b/data/maps/ShoalCave_LowTideLowerRoom/scripts.inc @@ -8,7 +8,7 @@ ShoalCave_LowTideLowerRoom_OnLoad: ShoalCave_LowTideLowerRoom_EventScript_SetShoalItemMetatiles:: goto_if_set FLAG_RECEIVED_SHOAL_SALT_4, ShoalCave_LowTideLowerRoom_EventScript_SetShoalItemMetatilesEnd - setmetatile 18, 2, METATILE_Cave_ShoalCave_DirtPile_Large, 1 + setmetatile 18, 2, METATILE_Cave_ShoalCave_DirtPile_Large, TRUE return ShoalCave_LowTideLowerRoom_EventScript_SetShoalItemMetatilesEnd:: @@ -18,9 +18,8 @@ ShoalCave_LowTideLowerRoom_EventScript_ShoalSalt4:: lockall goto_if_set FLAG_RECEIVED_SHOAL_SALT_4, ShoalCave_LowTideLowerRoom_EventScript_ReceivedShoalSalt giveitem ITEM_SHOAL_SALT - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull - setmetatile 18, 2, METATILE_Cave_ShoalCave_DirtPile_Small, 0 + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull + setmetatile 18, 2, METATILE_Cave_ShoalCave_DirtPile_Small, FALSE special DrawWholeMapView setflag FLAG_RECEIVED_SHOAL_SALT_4 releaseall @@ -37,8 +36,7 @@ ShoalCave_LowTideLowerRoom_EventScript_BlackBelt:: goto_if_set FLAG_RECEIVED_FOCUS_BAND, ShoalCave_LowTideLowerRoom_EventScript_ReceivedFocusBand msgbox ShoalCave_LowTideLowerRoom_Text_CanOvercomeColdWithFocus, MSGBOX_DEFAULT giveitem ITEM_FOCUS_BAND - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_FOCUS_BAND release end diff --git a/data/maps/ShoalCave_LowTideStairsRoom/scripts.inc b/data/maps/ShoalCave_LowTideStairsRoom/scripts.inc index a778a18e11..655711e9c6 100644 --- a/data/maps/ShoalCave_LowTideStairsRoom/scripts.inc +++ b/data/maps/ShoalCave_LowTideStairsRoom/scripts.inc @@ -8,7 +8,7 @@ ShoalCave_LowTideStairsRoom_OnLoad: ShoalCave_LowTideStairsRoom_EventScript_SetShoalItemMetatiles:: goto_if_set FLAG_RECEIVED_SHOAL_SALT_3, ShoalCave_LowTideStairsRoom_EventScript_SetShoalItemMetatilesEnd - setmetatile 11, 11, METATILE_Cave_ShoalCave_DirtPile_Large, 1 + setmetatile 11, 11, METATILE_Cave_ShoalCave_DirtPile_Large, TRUE return ShoalCave_LowTideStairsRoom_EventScript_SetShoalItemMetatilesEnd:: @@ -18,9 +18,8 @@ ShoalCave_LowTideStairsRoom_EventScript_ShoalSalt3:: lockall goto_if_set FLAG_RECEIVED_SHOAL_SALT_3, ShoalCave_LowTideStairsRoom_EventScript_ReceivedShoalSalt giveitem ITEM_SHOAL_SALT - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull - setmetatile 11, 11, METATILE_Cave_ShoalCave_DirtPile_Small, 0 + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull + setmetatile 11, 11, METATILE_Cave_ShoalCave_DirtPile_Small, FALSE special DrawWholeMapView setflag FLAG_RECEIVED_SHOAL_SALT_3 releaseall diff --git a/data/maps/SkyPillar_1F/scripts.inc b/data/maps/SkyPillar_1F/scripts.inc index 3ef94b261c..b521b541c1 100644 --- a/data/maps/SkyPillar_1F/scripts.inc +++ b/data/maps/SkyPillar_1F/scripts.inc @@ -3,8 +3,7 @@ SkyPillar_1F_MapScripts:: .byte 0 SkyPillar_1F_OnTransition: - compare VAR_SKY_PILLAR_STATE, 2 - call_if_lt SkyPillar_1F_EventScript_CleanFloor + call_if_lt VAR_SKY_PILLAR_STATE, 2, SkyPillar_1F_EventScript_CleanFloor end SkyPillar_1F_EventScript_CleanFloor:: diff --git a/data/maps/SkyPillar_2F/scripts.inc b/data/maps/SkyPillar_2F/scripts.inc index 9990ebba96..bad2488f0b 100644 --- a/data/maps/SkyPillar_2F/scripts.inc +++ b/data/maps/SkyPillar_2F/scripts.inc @@ -5,8 +5,7 @@ SkyPillar_2F_MapScripts:: .byte 0 SkyPillar_2F_OnTransition: - compare VAR_SKY_PILLAR_STATE, 2 - call_if_lt SkyPillar_2F_EventScript_CleanFloor + call_if_lt VAR_SKY_PILLAR_STATE, 2, SkyPillar_2F_EventScript_CleanFloor copyvar VAR_ICE_STEP_COUNT, 1 end @@ -16,6 +15,6 @@ SkyPillar_2F_EventScript_CleanFloor:: SkyPillar_2F_SetHoleWarp: setstepcallback STEP_CB_CRACKED_FLOOR - setholewarp MAP_SKY_PILLAR_1F, 255, 0, 0 + setholewarp MAP_SKY_PILLAR_1F end diff --git a/data/maps/SkyPillar_3F/scripts.inc b/data/maps/SkyPillar_3F/scripts.inc index 681137df08..07ef3bb449 100644 --- a/data/maps/SkyPillar_3F/scripts.inc +++ b/data/maps/SkyPillar_3F/scripts.inc @@ -3,8 +3,7 @@ SkyPillar_3F_MapScripts:: .byte 0 SkyPillar_3F_OnTransition: - compare VAR_SKY_PILLAR_STATE, 2 - call_if_lt SkyPillar_3F_EventScript_CleanFloor + call_if_lt VAR_SKY_PILLAR_STATE, 2, SkyPillar_3F_EventScript_CleanFloor end SkyPillar_3F_EventScript_CleanFloor:: diff --git a/data/maps/SkyPillar_4F/scripts.inc b/data/maps/SkyPillar_4F/scripts.inc index bed91a1751..9e8f1e80ea 100644 --- a/data/maps/SkyPillar_4F/scripts.inc +++ b/data/maps/SkyPillar_4F/scripts.inc @@ -5,8 +5,7 @@ SkyPillar_4F_MapScripts:: .byte 0 SkyPillar_4F_OnTransition: - compare VAR_SKY_PILLAR_STATE, 2 - call_if_lt SkyPillar_4F_EventScript_CleanFloor + call_if_lt VAR_SKY_PILLAR_STATE, 2, SkyPillar_4F_EventScript_CleanFloor copyvar VAR_ICE_STEP_COUNT, 1 end @@ -16,6 +15,6 @@ SkyPillar_4F_EventScript_CleanFloor:: SkyPillar_4F_SetHoleWarp: setstepcallback STEP_CB_CRACKED_FLOOR - setholewarp MAP_SKY_PILLAR_3F, 255, 0, 0 + setholewarp MAP_SKY_PILLAR_3F end diff --git a/data/maps/SkyPillar_5F/scripts.inc b/data/maps/SkyPillar_5F/scripts.inc index 12fc72f493..47d02fb61b 100644 --- a/data/maps/SkyPillar_5F/scripts.inc +++ b/data/maps/SkyPillar_5F/scripts.inc @@ -3,8 +3,7 @@ SkyPillar_5F_MapScripts:: .byte 0 SkyPillar_5F_OnTransition: - compare VAR_SKY_PILLAR_STATE, 2 - call_if_lt SkyPillar_5F_EventScript_CleanFloor + call_if_lt VAR_SKY_PILLAR_STATE, 2, SkyPillar_5F_EventScript_CleanFloor return SkyPillar_5F_EventScript_CleanFloor:: diff --git a/data/maps/SkyPillar_Outside/scripts.inc b/data/maps/SkyPillar_Outside/scripts.inc index f11b378ed3..f25c82df65 100644 --- a/data/maps/SkyPillar_Outside/scripts.inc +++ b/data/maps/SkyPillar_Outside/scripts.inc @@ -7,10 +7,8 @@ SkyPillar_Outside_MapScripts:: .byte 0 SkyPillar_Outside_OnTransition: - compare VAR_SOOTOPOLIS_CITY_STATE, 3 - call_if_eq SkyPillar_Outside_EventScript_HideMapNamePopup - compare VAR_SOOTOPOLIS_CITY_STATE, 4 - call_if_ge SkyPillar_Outside_EventScript_CheckSetAbnormalWeather + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 3, SkyPillar_Outside_EventScript_HideMapNamePopup + call_if_ge VAR_SOOTOPOLIS_CITY_STATE, 4, SkyPillar_Outside_EventScript_CheckSetAbnormalWeather end SkyPillar_Outside_EventScript_HideMapNamePopup:: @@ -26,8 +24,8 @@ SkyPillar_Outside_OnLoad: end SkyPillar_Outside_EventScript_OpenDoor:: - setmetatile 14, 4, METATILE_Pacifidlog_SkyPillar_DoorOpen_Top, 0 - setmetatile 14, 5, METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom, 0 + setmetatile 14, 4, METATILE_Pacifidlog_SkyPillar_DoorOpen_Top, FALSE + setmetatile 14, 5, METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom, FALSE return SkyPillar_Outside_OnFrame: @@ -38,7 +36,7 @@ SkyPillar_Outside_EventScript_WallaceScene:: lockall applymovement LOCALID_WALLACE, SkyPillar_Outside_Movement_WallaceApproachPlayer waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox SkyPillar_Outside_Text_OpenedDoorToSkyPillar, MSGBOX_DEFAULT closemessage @@ -62,13 +60,13 @@ SkyPillar_Outside_EventScript_WallaceScene:: special ShakeCamera waitstate delay 20 - applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 delay 10 - applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 20 - applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_WALLACE, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 30 msgbox SkyPillar_Outside_Text_SituationGettingWorse, MSGBOX_DEFAULT diff --git a/data/maps/SkyPillar_Top/scripts.inc b/data/maps/SkyPillar_Top/scripts.inc index acbdb4c8bd..7b65d9e257 100644 --- a/data/maps/SkyPillar_Top/scripts.inc +++ b/data/maps/SkyPillar_Top/scripts.inc @@ -12,16 +12,13 @@ SkyPillar_Top_OnResume: SkyPillar_Top_EventScript_TryRemoveRayquaza:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject VAR_LAST_TALKED return SkyPillar_Top_OnTransition: - compare VAR_SKY_PILLAR_STATE, 2 - call_if_lt SkyPillar_Top_EventScript_SetCleanLayout - compare VAR_SKY_PILLAR_STATE, 2 - call_if_ge SkyPillar_Top_EventScript_TryShowRayquaza + call_if_lt VAR_SKY_PILLAR_STATE, 2, SkyPillar_Top_EventScript_SetCleanLayout + call_if_ge VAR_SKY_PILLAR_STATE, 2, SkyPillar_Top_EventScript_TryShowRayquaza end SkyPillar_Top_EventScript_SetCleanLayout:: @@ -48,21 +45,18 @@ SkyPillar_Top_EventScript_RayquazaFaceDown:: SkyPillar_Top_EventScript_Rayquaza:: lockall waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER delay 40 waitmoncry - setwildbattle SPECIES_RAYQUAZA, 70, ITEM_NONE + setwildbattle SPECIES_RAYQUAZA, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq SkyPillar_Top_EventScript_DefeatedRayquaza - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq SkyPillar_Top_EventScript_RanFromRayquaza - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq SkyPillar_Top_EventScript_RanFromRayquaza + goto_if_eq VAR_RESULT, B_OUTCOME_WON, SkyPillar_Top_EventScript_DefeatedRayquaza + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, SkyPillar_Top_EventScript_RanFromRayquaza + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, SkyPillar_Top_EventScript_RanFromRayquaza setflag FLAG_DEFEATED_RAYQUAZA releaseall end @@ -88,7 +82,7 @@ SkyPillar_Top_EventScript_RanFromRayquaza2:: fadescreenswapbuffers FADE_TO_BLACK removeobject VAR_LAST_TALKED fadescreenswapbuffers FADE_FROM_BLACK - bufferspeciesname 0, VAR_0x8004 + bufferspeciesname STR_VAR_1, VAR_0x8004 msgbox gText_LegendaryFlewAway, MSGBOX_DEFAULT releaseall end @@ -105,7 +99,7 @@ SkyPillar_Top_EventScript_AwakenRayquaza:: applymovement LOCALID_RAYQUAZA_SLEEPING, SkyPillar_Top_Movement_RayquazaStir waitmovement 0 waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 1 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes @@ -113,7 +107,7 @@ SkyPillar_Top_EventScript_AwakenRayquaza:: special ShakeCamera waitstate waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 2 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes @@ -165,7 +159,7 @@ SkyPillar_Top_Movement_RayquazaFlyOff: delay_8 walk_in_place_right @ Normal, awake delay_8 - walk_fastest_up @ Fly up + walk_faster_up @ Fly up slide_up slide_up slide_up diff --git a/data/maps/SlateportCity/scripts.inc b/data/maps/SlateportCity/scripts.inc index 4a56717149..653f405c45 100644 --- a/data/maps/SlateportCity/scripts.inc +++ b/data/maps/SlateportCity/scripts.inc @@ -19,6 +19,8 @@ .set LOCALID_GRUNT_11, 33 .set LOCALID_SCOTT, 35 +@ Note: LOCALID_SLATEPORT_ENERGY_GURU is a local id for this map used elsewhere. It's defined in event_objects.h + SlateportCity_MapScripts:: map_script MAP_SCRIPT_ON_TRANSITION, SlateportCity_OnTransition map_script MAP_SCRIPT_ON_FRAME_TABLE, SlateportCity_OnFrame @@ -27,10 +29,8 @@ SlateportCity_MapScripts:: SlateportCity_OnTransition: setvar VAR_SLATEPORT_MUSEUM_1F_STATE, 0 call SlateportCity_EventScript_EnterSlateport - compare VAR_SLATEPORT_CITY_STATE, 1 - call_if_eq SlateportCity_EventScript_MovePeopleForSternInterview - compare VAR_SLATEPORT_OUTSIDE_MUSEUM_STATE, 1 - call_if_eq SlateportCity_EventScript_SetReadyForScottScene + call_if_eq VAR_SLATEPORT_CITY_STATE, 1, SlateportCity_EventScript_MovePeopleForSternInterview + call_if_eq VAR_SLATEPORT_OUTSIDE_MUSEUM_STATE, 1, SlateportCity_EventScript_SetReadyForScottScene end SlateportCity_EventScript_EnterSlateport:: @@ -59,8 +59,7 @@ SlateportCity_EventScript_MovePeopleForSternInterview:: SlateportCity_EventScript_SetReadyForScottScene:: setflag FLAG_HIDE_MAP_NAME_POPUP getplayerxy VAR_0x8004, VAR_0x8005 - compare VAR_0x8004, 30 - goto_if_eq SlateportCity_EventScript_MoveScottLeft + goto_if_eq VAR_0x8004, 30, SlateportCity_EventScript_MoveScottLeft setobjectxyperm LOCALID_SCOTT, 23, 27 setobjectmovementtype LOCALID_SCOTT, MOVEMENT_TYPE_FACE_RIGHT return @@ -82,11 +81,11 @@ SlateportCity_EventScript_ScottScene:: waitmovement 0 msgbox SlateportCity_Text_YouDroveTeamAquaAway, MSGBOX_DEFAULT closemessage - applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 delay 60 msgbox SlateportCity_Text_MaybeThisTrainer, MSGBOX_DEFAULT - applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_SCOTT, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox SlateportCity_Text_LetsRegisterEachOther, MSGBOX_DEFAULT closemessage @@ -113,7 +112,7 @@ SlateportCity_EventScript_ScottScene:: SlateportCity_Movement_PlayerFaceScott: delay_16 delay_8 - walk_in_place_fastest_left + walk_in_place_faster_left step_end SlateportCity_Movement_ScottApproachPlayer: @@ -162,14 +161,12 @@ SlateportCity_Pokemart_EnergyGuru: SlateportCity_EventScript_EffortRibbonWoman:: lock faceplayer - bufferleadmonspeciesname 0 + bufferleadmonspeciesname STR_VAR_1 msgbox SlateportCity_Text_OhYourPokemon, MSGBOX_DEFAULT specialvar VAR_RESULT, LeadMonHasEffortRibbon - compare VAR_RESULT, TRUE - call_if_eq SlateportCity_EventScript_MonHasEffortRibbon + call_if_eq VAR_RESULT, TRUE, SlateportCity_EventScript_MonHasEffortRibbon specialvar VAR_RESULT, Special_AreLeadMonEVsMaxedOut - compare VAR_RESULT, FALSE - call_if_eq SlateportCity_EventScript_MonEVsNotMaxed + call_if_eq VAR_RESULT, FALSE, SlateportCity_EventScript_MonEVsNotMaxed msgbox SlateportCity_Text_PleaseGiveItThisEffortRibbon, MSGBOX_DEFAULT playfanfare MUS_OBTAIN_ITEM message SlateportCity_Text_ReceivedEffortRibbon @@ -192,8 +189,7 @@ SlateportCity_EventScript_MonHasEffortRibbon:: SlateportCity_EventScript_Cook:: lock faceplayer - compare VAR_SLATEPORT_CITY_STATE, 1 - call_if_eq SlateportCity_EventScript_CookSternInterview + call_if_eq VAR_SLATEPORT_CITY_STATE, 1, SlateportCity_EventScript_CookSternInterview msgbox SlateportCity_Text_SeaweedFullOfLife, MSGBOX_DEFAULT release end @@ -206,8 +202,7 @@ SlateportCity_EventScript_CookSternInterview:: SlateportCity_EventScript_OldWoman:: lock faceplayer - compare VAR_SLATEPORT_CITY_STATE, 1 - call_if_eq SlateportCity_EventScript_OldWomanSternInterview + call_if_eq VAR_SLATEPORT_CITY_STATE, 1, SlateportCity_EventScript_OldWomanSternInterview msgbox SlateportCity_Text_HowTownIsBornAndGrows, MSGBOX_DEFAULT release end @@ -220,8 +215,7 @@ SlateportCity_EventScript_OldWomanSternInterview:: SlateportCity_EventScript_Girl:: lock faceplayer - compare VAR_SLATEPORT_CITY_STATE, 1 - call_if_eq SlateportCity_EventScript_GirlSternInterview + call_if_eq VAR_SLATEPORT_CITY_STATE, 1, SlateportCity_EventScript_GirlSternInterview goto_if_set FLAG_RECEIVED_SECRET_POWER, SlateportCity_EventScript_GirlSecretBase msgbox SlateportCity_Text_SlateportWonderfulPlace, MSGBOX_DEFAULT release @@ -240,8 +234,7 @@ SlateportCity_EventScript_GirlSecretBase:: SlateportCity_EventScript_RichBoy:: lock faceplayer - compare VAR_SLATEPORT_CITY_STATE, 1 - call_if_eq SlateportCity_EventScript_RichBoySternInterview + call_if_eq VAR_SLATEPORT_CITY_STATE, 1, SlateportCity_EventScript_RichBoySternInterview msgbox SlateportCity_Text_GoingToCompeteInBattleTent, MSGBOX_DEFAULT release end @@ -252,8 +245,7 @@ SlateportCity_EventScript_RichBoySternInterview:: end SlateportCity_EventScript_FatMan:: - compare VAR_SLATEPORT_CITY_STATE, 1 - goto_if_eq SlateportCity_EventScript_FatManSternInterview + goto_if_eq VAR_SLATEPORT_CITY_STATE, 1, SlateportCity_EventScript_FatManSternInterview msgbox SlateportCity_Text_BushedHikingFromMauville, MSGBOX_NPC end @@ -264,8 +256,7 @@ SlateportCity_EventScript_FatManSternInterview:: SlateportCity_EventScript_Man1:: lock faceplayer - compare VAR_SLATEPORT_CITY_STATE, 1 - call_if_eq SlateportCity_EventScript_Man1SternInterview + call_if_eq VAR_SLATEPORT_CITY_STATE, 1, SlateportCity_EventScript_Man1SternInterview msgbox SlateportCity_Text_EveryoneCallsHimCaptStern, MSGBOX_DEFAULT release end @@ -345,8 +336,7 @@ SlateportCity_EventScript_NameRatersHouseSign:: SlateportCity_EventScript_Maniac:: lock faceplayer - compare VAR_SLATEPORT_CITY_STATE, 1 - call_if_eq SlateportCity_EventScript_ManiacSternInterview + call_if_eq VAR_SLATEPORT_CITY_STATE, 1, SlateportCity_EventScript_ManiacSternInterview msgbox SlateportCity_Text_GetNameRaterToHelpYou, MSGBOX_DEFAULT release end @@ -588,10 +578,10 @@ SlateportCity_EventScript_CaptStern:: msgbox SlateportCity_Text_SternMoveAheadWithExploration, MSGBOX_DEFAULT msgbox SlateportCity_Text_GabbyWonderfulThanksForInterview, MSGBOX_DEFAULT closemessage - applymovement LOCALID_GABBY, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_GABBY, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 10 - applymovement LOCALID_TY, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_TY, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 25 applymovement LOCALID_CAPT_STERN, SlateportCity_Movement_SternWatchGabbyAndTyExit @@ -602,18 +592,18 @@ SlateportCity_EventScript_CaptStern:: removeobject LOCALID_GABBY removeobject LOCALID_TY msgbox SlateportCity_Text_SternWhewFirstInterview, MSGBOX_DEFAULT - applymovement LOCALID_CAPT_STERN, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_CAPT_STERN, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox SlateportCity_Text_OhPlayerWeMadeDiscovery, MSGBOX_DEFAULT playbgm MUS_ENCOUNTER_AQUA, FALSE msgbox SlateportCity_Text_AquaWillAssumeControlOfSubmarine, MSGBOX_DEFAULT - applymovement LOCALID_COOK, Common_Movement_WalkInPlaceFastestLeft - applymovement LOCALID_FAT_MAN, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_COOK, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_FAT_MAN, Common_Movement_WalkInPlaceFasterLeft applymovement LOCALID_OLD_WOMAN, SlateportCity_Movement_OldWomanConcern applymovement LOCALID_RICH_BOY, Common_Movement_QuestionMark applymovement LOCALID_MAN_1, SlateportCity_Movement_ManConcern waitmovement 0 - applymovement LOCALID_CAPT_STERN, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_CAPT_STERN, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox SlateportCity_Text_SternWhatWasAllThat, MSGBOX_DEFAULT playse SE_PIN @@ -621,7 +611,7 @@ SlateportCity_EventScript_CaptStern:: waitmovement 0 applymovement LOCALID_CAPT_STERN, Common_Movement_Delay48 waitmovement 0 - applymovement LOCALID_CAPT_STERN, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_CAPT_STERN, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox SlateportCity_Text_FromHarborTryingToTakeSub, MSGBOX_DEFAULT msgbox SlateportCity_Text_PleaseComeWithMe, MSGBOX_DEFAULT @@ -635,7 +625,7 @@ SlateportCity_EventScript_CaptStern:: clearflag FLAG_HIDE_SLATEPORT_CITY_HARBOR_AQUA_GRUNT clearflag FLAG_HIDE_SLATEPORT_CITY_HARBOR_ARCHIE setvar VAR_SLATEPORT_CITY_STATE, 2 - warp MAP_SLATEPORT_CITY_HARBOR, 255, 11, 14 + warp MAP_SLATEPORT_CITY_HARBOR, 11, 14 waitstate releaseall end @@ -644,20 +634,20 @@ SlateportCity_Movement_OldWomanConcern: delay_16 delay_16 emote_question_mark - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end SlateportCity_Movement_ManConcern: emote_question_mark - walk_in_place_fastest_up + walk_in_place_faster_up delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left step_end SlateportCity_Movement_GabbyExit: @@ -693,7 +683,7 @@ SlateportCity_Movement_TyExit: SlateportCity_Movement_Unused: walk_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end SlateportCity_Movement_SternEnterHarbor: @@ -714,7 +704,7 @@ SlateportCity_Movement_SternWatchGabbyAndTyExit: step_end SlateportCity_Movement_PlayerEnterHarbor: - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 delay_16 walk_right @@ -729,7 +719,7 @@ SlateportCity_Movement_PlayerFaceStern: delay_16 delay_16 delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end SlateportCity_EventScript_Ty:: @@ -758,8 +748,7 @@ SlateportCity_EventScript_BerryPowderClerk:: SlateportCity_EventScript_ReceivedPowderJar:: setvar VAR_0x8004, 1 specialvar VAR_RESULT, HasEnoughBerryPowder - compare VAR_RESULT, FALSE - goto_if_eq SlateportCity_EventScript_ExplainBerryPowder + goto_if_eq VAR_RESULT, FALSE, SlateportCity_EventScript_ExplainBerryPowder msgbox SlateportCity_Text_BroughtMeSomeBerryPowder, MSGBOX_DEFAULT special DisplayBerryPowderVendorMenu goto SlateportCity_EventScript_ChooseBerryPowderItem @@ -793,77 +782,77 @@ SlateportCity_EventScript_ChooseBerryPowderItem:: end SlateportCity_EventScript_EnergyPowder:: - bufferitemname 0, ITEM_ENERGY_POWDER + bufferitemname STR_VAR_1, ITEM_ENERGY_POWDER setvar VAR_0x8008, ITEM_ENERGY_POWDER setvar VAR_0x8009, 50 goto SlateportCity_EventScript_TryBuyBerryPowderItem end SlateportCity_EventScript_EnergyRoot:: - bufferitemname 0, ITEM_ENERGY_ROOT + bufferitemname STR_VAR_1, ITEM_ENERGY_ROOT setvar VAR_0x8008, ITEM_ENERGY_ROOT setvar VAR_0x8009, 80 goto SlateportCity_EventScript_TryBuyBerryPowderItem end SlateportCity_EventScript_HealPowder:: - bufferitemname 0, ITEM_HEAL_POWDER + bufferitemname STR_VAR_1, ITEM_HEAL_POWDER setvar VAR_0x8008, ITEM_HEAL_POWDER setvar VAR_0x8009, 50 goto SlateportCity_EventScript_TryBuyBerryPowderItem end SlateportCity_EventScript_RevivalHerb:: - bufferitemname 0, ITEM_REVIVAL_HERB + bufferitemname STR_VAR_1, ITEM_REVIVAL_HERB setvar VAR_0x8008, ITEM_REVIVAL_HERB setvar VAR_0x8009, 300 goto SlateportCity_EventScript_TryBuyBerryPowderItem end SlateportCity_EventScript_Protein:: - bufferitemname 0, ITEM_PROTEIN + bufferitemname STR_VAR_1, ITEM_PROTEIN setvar VAR_0x8008, ITEM_PROTEIN setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_TryBuyBerryPowderItem end SlateportCity_EventScript_Iron:: - bufferitemname 0, ITEM_IRON + bufferitemname STR_VAR_1, ITEM_IRON setvar VAR_0x8008, ITEM_IRON setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_TryBuyBerryPowderItem end SlateportCity_EventScript_Carbos:: - bufferitemname 0, ITEM_CARBOS + bufferitemname STR_VAR_1, ITEM_CARBOS setvar VAR_0x8008, ITEM_CARBOS setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_TryBuyBerryPowderItem end SlateportCity_EventScript_Calcium:: - bufferitemname 0, ITEM_CALCIUM + bufferitemname STR_VAR_1, ITEM_CALCIUM setvar VAR_0x8008, ITEM_CALCIUM setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_TryBuyBerryPowderItem end SlateportCity_EventScript_Zinc:: - bufferitemname 0, ITEM_ZINC + bufferitemname STR_VAR_1, ITEM_ZINC setvar VAR_0x8008, ITEM_ZINC setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_TryBuyBerryPowderItem end SlateportCity_EventScript_HPUp:: - bufferitemname 0, ITEM_HP_UP + bufferitemname STR_VAR_1, ITEM_HP_UP setvar VAR_0x8008, ITEM_HP_UP setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_TryBuyBerryPowderItem end SlateportCity_EventScript_PPUp:: - bufferitemname 0, ITEM_PP_UP + bufferitemname STR_VAR_1, ITEM_PP_UP setvar VAR_0x8008, ITEM_PP_UP setvar VAR_0x8009, 3000 goto SlateportCity_EventScript_TryBuyBerryPowderItem @@ -877,21 +866,17 @@ SlateportCity_EventScript_CancelPowderItemSelect:: SlateportCity_EventScript_TryBuyBerryPowderItem:: msgbox SlateportCity_Text_ExchangeBerryPowderForItem, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SlateportCity_EventScript_ChooseBerryPowderItem + goto_if_eq VAR_RESULT, NO, SlateportCity_EventScript_ChooseBerryPowderItem copyvar VAR_0x8004, VAR_0x8009 specialvar VAR_RESULT, HasEnoughBerryPowder - compare VAR_RESULT, FALSE - goto_if_eq SlateportCity_EventScript_NotEnoughBerryPowder + goto_if_eq VAR_RESULT, FALSE, SlateportCity_EventScript_NotEnoughBerryPowder giveitem VAR_0x8008 - compare VAR_RESULT, FALSE - goto_if_eq SlateportCity_EventScript_NoRoomForBerryPowderItem + goto_if_eq VAR_RESULT, FALSE, SlateportCity_EventScript_NoRoomForBerryPowderItem copyvar VAR_0x8004, VAR_0x8009 special TakeBerryPowder special PrintPlayerBerryPowderAmount msgbox SlateportCity_Text_FineBerryPowderTradeSomethingElse, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SlateportCity_EventScript_ChooseBerryPowderItem + goto_if_eq VAR_RESULT, YES, SlateportCity_EventScript_ChooseBerryPowderItem msgbox SlateportCity_Text_WhenYouGetMoreBringItToMe, MSGBOX_DEFAULT special RemoveBerryPowderVendorMenu release @@ -939,7 +924,7 @@ SlateportCity_Movement_PushPlayerDown: SlateportCity_Movement_PlayerWatchScottExit: delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right step_end SlateportCity_Movement_ScottExitBattleTent: diff --git a/data/maps/SlateportCity_BattleTentBattleRoom/scripts.inc b/data/maps/SlateportCity_BattleTentBattleRoom/scripts.inc index c1e9bfc532..53514bb5e9 100644 --- a/data/maps/SlateportCity_BattleTentBattleRoom/scripts.inc +++ b/data/maps/SlateportCity_BattleTentBattleRoom/scripts.inc @@ -16,10 +16,8 @@ SlateportCity_BattleTentBattleRoom_OnTransition: SlateportCity_BattleTentBattleRoom_EventScript_SetPlayerGfx:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq SlateportCity_BattleTentBattleRoom_EventScript_SetPlayerGfxMale - compare VAR_RESULT, FEMALE - goto_if_eq SlateportCity_BattleTentBattleRoom_EventScript_SetPlayerGfxFemale + goto_if_eq VAR_RESULT, MALE, SlateportCity_BattleTentBattleRoom_EventScript_SetPlayerGfxMale + goto_if_eq VAR_RESULT, FEMALE, SlateportCity_BattleTentBattleRoom_EventScript_SetPlayerGfxFemale return SlateportCity_BattleTentBattleRoom_EventScript_SetPlayerGfxMale:: @@ -68,7 +66,7 @@ SlateportCity_BattleTentBattleRoom_EventScript_EnterRoom:: SlateportCity_BattleTent_EventScript_WarpToLobbyLost:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST special LoadPlayerParty - warp MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY, 255, 6, 6 + warp MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY, 6, 6 waitstate @ forced stop @@ -79,14 +77,14 @@ SlateportCity_BattleTentBattleRoom_EventScript_DefeatedOpponent:: switch VAR_RESULT case 3, SlateportCity_BattleTentBattleRoom_EventScript_WarpToLobbyWon setvar VAR_0x8006, 1 - warp MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR, 255, 2, 3 + warp MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR, 2, 3 waitstate @ forced stop SlateportCity_BattleTentBattleRoom_EventScript_WarpToLobbyWon:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_WON special LoadPlayerParty - warp MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY, 255, 6, 6 + warp MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY, 6, 6 waitstate @ forced stop @@ -94,7 +92,7 @@ SlateportCity_BattleTentBattleRoom_Movement_PlayerEnter: walk_up walk_up walk_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end SlateportCity_BattleTentBattleRoom_Movement_OpponentEnter: @@ -102,6 +100,6 @@ SlateportCity_BattleTentBattleRoom_Movement_OpponentEnter: walk_down walk_down walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end diff --git a/data/maps/SlateportCity_BattleTentCorridor/scripts.inc b/data/maps/SlateportCity_BattleTentCorridor/scripts.inc index 08b19391ce..75156f68f0 100644 --- a/data/maps/SlateportCity_BattleTentCorridor/scripts.inc +++ b/data/maps/SlateportCity_BattleTentCorridor/scripts.inc @@ -13,8 +13,7 @@ SlateportCity_BattleTentCorridor_OnWarp: SlateportCity_BattleTentCorridor_EventScript_SetUpObjects:: setvar VAR_TEMP_1, 1 - compare VAR_0x8006, 1 - goto_if_ne SlateportCity_BattleTentCorridor_EventScript_TurnPlayerNorth + goto_if_ne VAR_0x8006, 1, SlateportCity_BattleTentCorridor_EventScript_TurnPlayerNorth setobjectxy LOCALID_ATTENDANT, 2, 2 turnobject LOCALID_ATTENDANT, DIR_SOUTH SlateportCity_BattleTentCorridor_EventScript_TurnPlayerNorth:: @@ -26,14 +25,12 @@ SlateportCity_BattleTentCorridor_OnFrame: .2byte 0 SlateportCity_BattleTentCorridor_EventScript_EnterCorridor:: - compare VAR_0x8006, 1 - goto_if_eq SlateportCity_BattleTentCorridor_EventScript_ReturnToRoomFromBattle + goto_if_eq VAR_0x8006, 1, SlateportCity_BattleTentCorridor_EventScript_ReturnToRoomFromBattle setvar VAR_TEMP_0, 1 applymovement LOCALID_ATTENDANT, SlateportCity_BattleTentCorridor_Movement_AttendantEnter applymovement OBJ_EVENT_ID_PLAYER, SlateportCity_BattleTentCorridor_Movement_PlayerEnter waitmovement 0 - compare VAR_0x8006, 2 - goto_if_eq SlateportCity_BattleTentCorridor_EventScript_ResumeChallenge + goto_if_eq VAR_0x8006, 2, SlateportCity_BattleTentCorridor_EventScript_ResumeChallenge slateporttent_generaterentalmons slateporttent_generateopponentmons msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_HoldMonsChooseFromSelection, MSGBOX_DEFAULT @@ -43,7 +40,7 @@ SlateportCity_BattleTentCorridor_EventScript_EnterCorridor:: SlateportCity_BattleTentCorridor_EventScript_EnterBattleRoom:: msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_RightThisWay, MSGBOX_DEFAULT closemessage - applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFasterUp waitmovement 0 opendoor 2, 1 waitdooranim @@ -52,7 +49,7 @@ SlateportCity_BattleTentCorridor_EventScript_EnterBattleRoom:: waitmovement 0 closedoor 2, 1 waitdooranim - warp MAP_SLATEPORT_CITY_BATTLE_TENT_BATTLE_ROOM, 255, 4, 4 + warp MAP_SLATEPORT_CITY_BATTLE_TENT_BATTLE_ROOM, 4, 4 waitstate end @@ -65,10 +62,8 @@ SlateportCity_BattleTentCorridor_EventScript_ReturnToRoomFromBattle:: special HealPlayerParty SlateportCity_BattleTentCorridor_EventScript_AskReadyForOpponent:: frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 1 - call_if_eq SlateportCity_BattleTentCorridor_EventScript_ReadyFor2ndOpponent - compare VAR_RESULT, 2 - call_if_eq SlateportCity_BattleTentCorridor_EventScript_ReadyFor3rdOpponent + call_if_eq VAR_RESULT, 1, SlateportCity_BattleTentCorridor_EventScript_ReadyFor2ndOpponent + call_if_eq VAR_RESULT, 2, SlateportCity_BattleTentCorridor_EventScript_ReadyFor3rdOpponent multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, TRUE switch VAR_RESULT case 0, SlateportCity_BattleTentCorridor_EventScript_AskSwapMon @@ -103,8 +98,7 @@ SlateportCity_BattleTentCorridor_EventScript_SwapMons:: fadescreen FADE_TO_BLACK slateporttent_swapmons waitstate - compare VAR_RESULT, 1 - goto_if_eq SlateportCity_BattleTentCorridor_EventScript_EnterBattleRoom + goto_if_eq VAR_RESULT, 1, SlateportCity_BattleTentCorridor_EventScript_EnterBattleRoom msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_YourSwapIsComplete, MSGBOX_DEFAULT goto SlateportCity_BattleTentCorridor_EventScript_EnterBattleRoom @@ -151,7 +145,7 @@ SlateportCity_BattleTentCorridor_Movement_AttendantEnter: walk_up walk_up walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end SlateportCity_BattleTentCorridor_Movement_AttendantExit: diff --git a/data/maps/SlateportCity_BattleTentLobby/scripts.inc b/data/maps/SlateportCity_BattleTentLobby/scripts.inc index 8361cdfcc3..0d3fae875f 100644 --- a/data/maps/SlateportCity_BattleTentLobby/scripts.inc +++ b/data/maps/SlateportCity_BattleTentLobby/scripts.inc @@ -93,8 +93,7 @@ SlateportCity_BattleTentLobby_EventScript_Attendant:: lock faceplayer slateporttent_getprize - compare VAR_RESULT, ITEM_NONE - goto_if_ne SlateportCity_BattleTentLobby_EventScript_GivePrize + goto_if_ne VAR_RESULT, ITEM_NONE, SlateportCity_BattleTentLobby_EventScript_GivePrize special SavePlayerParty msgbox SlateportCity_BattleTentLobby_Text_WelcomeToBattleTent, MSGBOX_DEFAULT SlateportCity_BattleTentLobby_EventScript_AskEnterChallenge:: @@ -127,14 +126,13 @@ SlateportCity_BattleTentLobby_EventScript_SaveBeforeChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq SlateportCity_BattleTentLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, SlateportCity_BattleTentLobby_EventScript_CancelChallengeSaveFailed setvar VAR_0x8006, 0 SlateportCity_BattleTentLobby_EventScript_EnterChallenge:: msgbox SlateportCity_BattleTentLobby_Text_StepThisWay, MSGBOX_DEFAULT closemessage call SlateportCity_BattleTentLobby_EventScript_WalkToDoor - warp MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR, 255, 2, 7 + warp MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR, 2, 7 setvar VAR_TEMP_0, 0 waitstate end @@ -204,8 +202,7 @@ SlateportCity_BattleTentLobby_EventScript_TormentGiver:: goto_if_set FLAG_RECEIVED_TM41, SlateportCity_BattleTentLobby_EventScript_ReceivedTorment msgbox SlateportCity_BattleTentLobby_Text_CouldntFindMonForMe, MSGBOX_DEFAULT giveitem ITEM_TM41 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM41 msgbox SlateportCity_BattleTentLobby_Text_ExplainTorment, MSGBOX_DEFAULT release diff --git a/data/maps/SlateportCity_Harbor/scripts.inc b/data/maps/SlateportCity_Harbor/scripts.inc index fb73f5b938..b2a71f2b7c 100644 --- a/data/maps/SlateportCity_Harbor/scripts.inc +++ b/data/maps/SlateportCity_Harbor/scripts.inc @@ -9,10 +9,9 @@ SlateportCity_Harbor_MapScripts:: .byte 0 SlateportCity_Harbor_OnTransition: - setescapewarp MAP_SLATEPORT_CITY, 255, 28, 13 + setescapewarp MAP_SLATEPORT_CITY, 28, 13 setvar VAR_TEMP_1, 0 - compare VAR_SLATEPORT_HARBOR_STATE, 1 - call_if_eq SlateportCity_Harbor_EventScript_ReadyAquaEscapeScene + call_if_eq VAR_SLATEPORT_HARBOR_STATE, 1, SlateportCity_Harbor_EventScript_ReadyAquaEscapeScene call_if_set FLAG_SYS_GAME_CLEAR, SlateportCity_Harbor_EventScript_ShowSSTidal end @@ -54,10 +53,10 @@ SlateportCity_Harbor_EventScript_AquaEscapeTrigger3:: end SlateportCity_Harbor_EventScript_AquaEscapeScene:: - applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFastestDown + applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFasterDown waitmovement 0 - applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFastestDown - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_GRUNT, Common_Movement_WalkInPlaceFasterDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox SlateportCity_Harbor_Text_ArchieYouAgainHideoutInLilycove, MSGBOX_DEFAULT closemessage @@ -71,14 +70,10 @@ SlateportCity_Harbor_EventScript_AquaEscapeScene:: setvar VAR_SLATEPORT_HARBOR_STATE, 2 setflag FLAG_MET_TEAM_AQUA_HARBOR setflag FLAG_HIDE_LILYCOVE_MOTEL_SCOTT - compare VAR_0x8008, 0 - call_if_eq SlateportCity_Harbor_EventScript_SternApproachPlayer0 - compare VAR_0x8008, 1 - call_if_eq SlateportCity_Harbor_EventScript_SternApproachPlayer1 - compare VAR_0x8008, 2 - call_if_eq SlateportCity_Harbor_EventScript_SternApproachPlayer - compare VAR_0x8008, 3 - call_if_eq SlateportCity_Harbor_EventScript_SternApproachPlayer + call_if_eq VAR_0x8008, 0, SlateportCity_Harbor_EventScript_SternApproachPlayer0 + call_if_eq VAR_0x8008, 1, SlateportCity_Harbor_EventScript_SternApproachPlayer1 + call_if_eq VAR_0x8008, 2, SlateportCity_Harbor_EventScript_SternApproachPlayer + call_if_eq VAR_0x8008, 3, SlateportCity_Harbor_EventScript_SternApproachPlayer msgbox SlateportCity_Harbor_Text_CaptSternWhyStealMySubmarine, MSGBOX_DEFAULT closemessage setflag FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_1_BLOCKING_ENTRANCE @@ -91,21 +86,21 @@ SlateportCity_Harbor_EventScript_AquaEscapeScene:: SlateportCity_Harbor_EventScript_SternApproachPlayer0:: applymovement LOCALID_CAPT_STERN, SlateportCity_Harbor_Movement_SternApproachPlayer0 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 return SlateportCity_Harbor_EventScript_SternApproachPlayer1:: applymovement LOCALID_CAPT_STERN, SlateportCity_Harbor_Movement_SternApproachPlayer1 waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return SlateportCity_Harbor_EventScript_SternApproachPlayer:: applymovement LOCALID_CAPT_STERN, SlateportCity_Harbor_Movement_SternApproachPlayer waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return @@ -206,21 +201,19 @@ SlateportCity_Harbor_EventScript_NoTicket:: SlateportCity_Harbor_EventScript_Lilycove:: msgbox SlateportCity_Harbor_Text_LilycoveItIs, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SlateportCity_Harbor_EventScript_ChooseNewDestination + goto_if_eq VAR_RESULT, NO, SlateportCity_Harbor_EventScript_ChooseNewDestination setvar VAR_SS_TIDAL_STATE, SS_TIDAL_BOARD_SLATEPORT call SlateportCity_Harbor_EventScript_BoardFerry - warp MAP_SS_TIDAL_CORRIDOR, 255, 1, 10 + warp MAP_SS_TIDAL_CORRIDOR, 1, 10 waitstate release end SlateportCity_Harbor_EventScript_BattleFrontier:: msgbox SlateportCity_Harbor_Text_BattleFrontierItIs, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SlateportCity_Harbor_EventScript_ChooseNewDestination + goto_if_eq VAR_RESULT, NO, SlateportCity_Harbor_EventScript_ChooseNewDestination call SlateportCity_Harbor_EventScript_BoardFerry - warp MAP_BATTLE_FRONTIER_OUTSIDE_WEST, 255, 19, 67 + warp MAP_BATTLE_FRONTIER_OUTSIDE_WEST, 19, 67 waitstate release end @@ -234,14 +227,12 @@ SlateportCity_Harbor_EventScript_ChooseNewDestination:: SlateportCity_Harbor_EventScript_BoardFerry:: msgbox SlateportCity_Harbor_Text_PleaseBoardFerry, MSGBOX_DEFAULT closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestUp + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterUp waitmovement 0 delay 30 hideobjectat VAR_LAST_TALKED, MAP_SLATEPORT_CITY_HARBOR - compare VAR_FACING, DIR_NORTH - call_if_eq SlateportCity_Harbor_EventScript_BoardFerryNorth - compare VAR_FACING, DIR_EAST - call_if_eq SlateportCity_Harbor_EventScript_BoardFerryEast + call_if_eq VAR_FACING, DIR_NORTH, SlateportCity_Harbor_EventScript_BoardFerryNorth + call_if_eq VAR_FACING, DIR_EAST, SlateportCity_Harbor_EventScript_BoardFerryEast delay 30 hideobjectat OBJ_EVENT_ID_PLAYER, 0 setvar VAR_0x8004, LOCALID_SS_TIDAL @@ -265,7 +256,7 @@ SlateportCity_Harbor_EventScript_BoardFerryNorth:: SlateportCity_Harbor_Movement_BoardFerryEast: walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end SlateportCity_Harbor_Movement_BoardFerryNorth: @@ -279,8 +270,7 @@ SlateportCity_Harbor_EventScript_Sailor:: setvar VAR_0x8004, 0 call_if_set FLAG_DEFEATED_KYOGRE, SlateportCity_Harbor_EventScript_CountDefeatedLegendary call_if_set FLAG_DEFEATED_GROUDON, SlateportCity_Harbor_EventScript_CountDefeatedLegendary - compare VAR_0x8004, 2 @ Defeated both - goto_if_eq SlateportCity_Harbor_EventScript_SailorNoAbnormalWeather + goto_if_eq VAR_0x8004, 2, SlateportCity_Harbor_EventScript_SailorNoAbnormalWeather @ Defeated both msgbox SlateportCity_Harbor_Text_AbnormalWeather, MSGBOX_DEFAULT release end @@ -304,8 +294,7 @@ SlateportCity_Harbor_EventScript_CaptStern:: goto_if_set FLAG_BADGE07_GET, SlateportCity_Harbor_EventScript_CaptSternFerryOrScannerComment goto_if_set FLAG_EVIL_TEAM_ESCAPED_STERN_SPOKE, SlateportCity_Harbor_EventScript_NeedDive goto_if_set FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, SlateportCity_Harbor_EventScript_TeamAquaLeftNeedDive - compare VAR_SLATEPORT_HARBOR_STATE, 2 - goto_if_eq SlateportCity_Harbor_EventScript_WhyStealSubmarine + goto_if_eq VAR_SLATEPORT_HARBOR_STATE, 2, SlateportCity_Harbor_EventScript_WhyStealSubmarine msgbox SlateportCity_Harbor_Text_SameThugsTriedToRobAtMuseum, MSGBOX_DEFAULT closemessage applymovement VAR_LAST_TALKED, Common_Movement_FaceOriginalDirection @@ -330,11 +319,9 @@ SlateportCity_Harbor_EventScript_NeedDive:: end SlateportCity_Harbor_EventScript_CaptSternFerryOrScannerComment:: - compare VAR_TEMP_1, 1 - goto_if_eq SlateportCity_Harbor_EventScript_TradedScanner - checkitem ITEM_SCANNER, 1 - compare VAR_RESULT, TRUE - goto_if_eq SlateportCity_Harbor_EventScript_AskToTradeScanner + goto_if_eq VAR_TEMP_1, 1, SlateportCity_Harbor_EventScript_TradedScanner + checkitem ITEM_SCANNER + goto_if_eq VAR_RESULT, TRUE, SlateportCity_Harbor_EventScript_AskToTradeScanner goto_if_set FLAG_SYS_GAME_CLEAR, SlateportCity_Harbor_EventScript_FerryFinished msgbox SlateportCity_Harbor_Text_WontBeLongBeforeWeFinishFerry, MSGBOX_DEFAULT release @@ -362,11 +349,9 @@ SlateportCity_Harbor_EventScript_ChooseScannerTrade:: SlateportCity_Harbor_EventScript_DeepSeaTooth:: msgbox SlateportCity_Harbor_Text_TradeForDeepSeaTooth, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SlateportCity_Harbor_EventScript_ChooseDifferentTrade + goto_if_eq VAR_RESULT, NO, SlateportCity_Harbor_EventScript_ChooseDifferentTrade giveitem ITEM_DEEP_SEA_TOOTH - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull removeitem ITEM_SCANNER msgbox SlateportCity_Harbor_Text_HandedScannerToStern, MSGBOX_DEFAULT setflag FLAG_EXCHANGED_SCANNER @@ -375,11 +360,9 @@ SlateportCity_Harbor_EventScript_DeepSeaTooth:: SlateportCity_Harbor_EventScript_DeepSeaScale:: msgbox SlateportCity_Harbor_Text_TradeForDeepSeaScale, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SlateportCity_Harbor_EventScript_ChooseDifferentTrade + goto_if_eq VAR_RESULT, NO, SlateportCity_Harbor_EventScript_ChooseDifferentTrade giveitem ITEM_DEEP_SEA_SCALE - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull removeitem ITEM_SCANNER msgbox SlateportCity_Harbor_Text_HandedScannerToStern, MSGBOX_DEFAULT setflag FLAG_EXCHANGED_SCANNER diff --git a/data/maps/SlateportCity_NameRatersHouse/scripts.inc b/data/maps/SlateportCity_NameRatersHouse/scripts.inc index 87ed2d07f8..34d788a6aa 100644 --- a/data/maps/SlateportCity_NameRatersHouse/scripts.inc +++ b/data/maps/SlateportCity_NameRatersHouse/scripts.inc @@ -5,20 +5,16 @@ SlateportCity_NameRatersHouse_EventScript_NameRater:: lock faceplayer msgbox SlateportCity_NameRatersHouse_Text_PleasedToRateMonNickname, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SlateportCity_NameRatersHouse_EventScript_ChooseMonToRate - compare VAR_RESULT, NO - goto_if_eq SlateportCity_NameRatersHouse_EventScript_DeclineNameRate + goto_if_eq VAR_RESULT, YES, SlateportCity_NameRatersHouse_EventScript_ChooseMonToRate + goto_if_eq VAR_RESULT, NO, SlateportCity_NameRatersHouse_EventScript_DeclineNameRate end SlateportCity_NameRatersHouse_EventScript_ChooseMonToRate:: msgbox SlateportCity_NameRatersHouse_Text_CritiqueWhichMonNickname, MSGBOX_DEFAULT special ChoosePartyMon waitstate - compare VAR_0x8004, 255 - goto_if_ne SlateportCity_NameRatersHouse_EventScript_RateMonNickname - compare VAR_0x8004, 255 - goto_if_eq SlateportCity_NameRatersHouse_EventScript_DeclineNameRate + goto_if_ne VAR_0x8004, PARTY_NOTHING_CHOSEN, SlateportCity_NameRatersHouse_EventScript_RateMonNickname + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, SlateportCity_NameRatersHouse_EventScript_DeclineNameRate end SlateportCity_NameRatersHouse_EventScript_DeclineNameRate:: @@ -28,21 +24,16 @@ SlateportCity_NameRatersHouse_EventScript_DeclineNameRate:: SlateportCity_NameRatersHouse_EventScript_RateMonNickname:: specialvar VAR_RESULT, ScriptGetPartyMonSpecies - compare VAR_RESULT, SPECIES_EGG - goto_if_eq SlateportCity_NameRatersHouse_EventScript_CantRateEgg + goto_if_eq VAR_RESULT, SPECIES_EGG, SlateportCity_NameRatersHouse_EventScript_CantRateEgg special BufferMonNickname special IsMonOTIDNotPlayers - compare VAR_RESULT, TRUE - goto_if_eq SlateportCity_NameRatersHouse_EventScript_PlayerNotMonsOT + goto_if_eq VAR_RESULT, TRUE, SlateportCity_NameRatersHouse_EventScript_PlayerNotMonsOT specialvar VAR_RESULT, MonOTNameNotPlayer special BufferMonNickname - compare VAR_RESULT, TRUE - goto_if_eq SlateportCity_NameRatersHouse_EventScript_PlayerNotMonsOT + goto_if_eq VAR_RESULT, TRUE, SlateportCity_NameRatersHouse_EventScript_PlayerNotMonsOT msgbox SlateportCity_NameRatersHouse_Text_FineNameSuggestBetterOne, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SlateportCity_NameRatersHouse_EventScript_ChangeNickname - compare VAR_RESULT, NO - goto_if_eq SlateportCity_NameRatersHouse_EventScript_DeclineNameRate + goto_if_eq VAR_RESULT, YES, SlateportCity_NameRatersHouse_EventScript_ChangeNickname + goto_if_eq VAR_RESULT, NO, SlateportCity_NameRatersHouse_EventScript_DeclineNameRate end SlateportCity_NameRatersHouse_EventScript_CantRateEgg:: @@ -60,8 +51,7 @@ SlateportCity_NameRatersHouse_EventScript_ChangeNickname:: call Common_EventScript_NameReceivedPartyMon specialvar VAR_RESULT, TryPutNameRaterShowOnTheAir special BufferMonNickname - compare VAR_RESULT, TRUE - goto_if_eq SlateportCity_NameRatersHouse_EventScript_NewNameDifferent + goto_if_eq VAR_RESULT, TRUE, SlateportCity_NameRatersHouse_EventScript_NewNameDifferent msgbox SlateportCity_NameRatersHouse_Text_NameNoDifferentYetSuperior, MSGBOX_DEFAULT release end diff --git a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc index 38ec344649..96892f948d 100644 --- a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc @@ -9,23 +9,22 @@ SlateportCity_OceanicMuseum_1F_EventScript_EntranceAttendant:: SlateportCity_OceanicMuseum_1F_EventScript_PayEntranceFeeLeft:: lockall - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 goto SlateportCity_OceanicMuseum_1F_EventScript_PayEntranceFee end SlateportCity_OceanicMuseum_1F_EventScript_PayEntranceFeeRight:: lockall - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 goto SlateportCity_OceanicMuseum_1F_EventScript_PayEntranceFee end SlateportCity_OceanicMuseum_1F_EventScript_PayEntranceFee:: - showmoneybox 0, 0, 0 + showmoneybox 0, 0 msgbox SlateportCity_OceanicMuseum_1F_Text_WouldYouLikeToEnter, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_CheckMoneyForFee + goto_if_eq VAR_RESULT, YES, SlateportCity_OceanicMuseum_1F_EventScript_CheckMoneyForFee closemessage hidemoneybox applymovement OBJ_EVENT_ID_PLAYER, SlateportCity_OceanicMuseum_1F_Movement_PushPlayerBackFromCounter @@ -34,12 +33,11 @@ SlateportCity_OceanicMuseum_1F_EventScript_PayEntranceFee:: end SlateportCity_OceanicMuseum_1F_EventScript_CheckMoneyForFee:: - checkmoney 50, 0 - compare VAR_RESULT, FALSE - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_NotEnoughMoney + checkmoney 50 + goto_if_eq VAR_RESULT, FALSE, SlateportCity_OceanicMuseum_1F_EventScript_NotEnoughMoney playse SE_SHOP - removemoney 50, 0 - updatemoneybox 0, 0 + removemoney 50 + updatemoneybox msgbox SlateportCity_OceanicMuseum_1F_Text_PleaseEnjoyYourself, MSGBOX_DEFAULT setvar VAR_SLATEPORT_MUSEUM_1F_STATE, 1 hidemoneybox @@ -154,19 +152,14 @@ SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGrunt:: waitmovement 0 msgbox SlateportCity_OceanicMuseum_1F_Text_RememberMeTakeThis, MSGBOX_DEFAULT giveitem ITEM_TM46 - compare VAR_RESULT, 0 - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_NoRoomForThief + goto_if_eq VAR_RESULT, 0, SlateportCity_OceanicMuseum_1F_EventScript_NoRoomForThief setflag FLAG_RECEIVED_TM46 msgbox SlateportCity_OceanicMuseum_1F_Text_HopeINeverSeeYouAgain, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_NORTH - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitNorth - compare VAR_FACING, DIR_SOUTH - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitSouth - compare VAR_FACING, DIR_WEST - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitWestEast - compare VAR_FACING, DIR_EAST - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitWestEast + goto_if_eq VAR_FACING, DIR_NORTH, SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitNorth + goto_if_eq VAR_FACING, DIR_SOUTH, SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitSouth + goto_if_eq VAR_FACING, DIR_WEST, SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitWestEast + goto_if_eq VAR_FACING, DIR_EAST, SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitWestEast end SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitNorth:: @@ -205,12 +198,12 @@ SlateportCity_OceanicMuseum_1F_Movement_PlayerWatchGruntExitNorth: delay_16 delay_8 delay_4 - walk_in_place_fastest_down + walk_in_place_faster_down step_end SlateportCity_OceanicMuseum_1F_Movement_PlayerWatchGruntExitWestEast: delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end SlateportCity_OceanicMuseum_1F_Movement_FamiliarGruntExit: diff --git a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc index 90b5c83de0..ae7141f39e 100644 --- a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc @@ -21,22 +21,17 @@ SlateportCity_OceanicMuseum_2F_EventScript_CaptStern:: applymovement LOCALID_GRUNT_1, SlateportCity_OceanicMuseum_2F_Movement_FirstGruntApproach applymovement LOCALID_GRUNT_2, SlateportCity_OceanicMuseum_2F_Movement_SecondGruntApproach waitmovement 0 - compare VAR_FACING, DIR_SOUTH - call_if_eq SlateportCity_OceanicMuseum_2F_EventScript_PlayerFaceGrunts - compare VAR_FACING, DIR_EAST - call_if_eq SlateportCity_OceanicMuseum_2F_EventScript_PlayerFaceGrunts + call_if_eq VAR_FACING, DIR_SOUTH, SlateportCity_OceanicMuseum_2F_EventScript_PlayerFaceGrunts + call_if_eq VAR_FACING, DIR_EAST, SlateportCity_OceanicMuseum_2F_EventScript_PlayerFaceGrunts msgbox SlateportCity_OceanicMuseum_2F_Text_WellTakeThoseParts, MSGBOX_DEFAULT - compare VAR_FACING, DIR_EAST - call_if_ne SlateportCity_OceanicMuseum_2F_EventScript_SternFaceGrunts + call_if_ne VAR_FACING, DIR_EAST, SlateportCity_OceanicMuseum_2F_EventScript_SternFaceGrunts msgbox SlateportCity_OceanicMuseum_2F_Text_SternWhoAreYou, MSGBOX_DEFAULT msgbox SlateportCity_OceanicMuseum_2F_Text_WereTeamAqua, MSGBOX_DEFAULT closemessage applymovement LOCALID_GRUNT_2, SlateportCity_OceanicMuseum_2F_Movement_GruntApproachToBattle waitmovement 0 - compare VAR_FACING, DIR_SOUTH - call_if_eq SlateportCity_OceanicMuseum_2F_EventScript_PlayerApproachGruntSouth - compare VAR_FACING, DIR_WEST - call_if_eq SlateportCity_OceanicMuseum_2F_EventScript_PlayerApproachGruntWest + call_if_eq VAR_FACING, DIR_SOUTH, SlateportCity_OceanicMuseum_2F_EventScript_PlayerApproachGruntSouth + call_if_eq VAR_FACING, DIR_WEST, SlateportCity_OceanicMuseum_2F_EventScript_PlayerApproachGruntWest trainerbattle_no_intro TRAINER_GRUNT_MUSEUM_1, SlateportCity_OceanicMuseum_2F_Text_Grunt1Defeat msgbox SlateportCity_OceanicMuseum_2F_Text_BossGoingToBeFurious, MSGBOX_DEFAULT closemessage @@ -48,8 +43,8 @@ SlateportCity_OceanicMuseum_2F_EventScript_CaptStern:: trainerbattle_no_intro TRAINER_GRUNT_MUSEUM_2, SlateportCity_OceanicMuseum_2F_Text_Grunt2Defeat applymovement LOCALID_GRUNT_1, SlateportCity_OceanicMuseum_2F_Movement_GruntDefeated waitmovement 0 - applymovement LOCALID_GRUNT_1, Common_Movement_WalkInPlaceFastestDown - applymovement LOCALID_GRUNT_2, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_GRUNT_1, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_GRUNT_2, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox SlateportCity_OceanicMuseum_2F_Text_MeddlingKid, MSGBOX_DEFAULT closemessage @@ -73,10 +68,10 @@ SlateportCity_OceanicMuseum_2F_EventScript_CaptStern:: fadescreen FADE_FROM_BLACK delay 30 setflag FLAG_HIDE_SLATEPORT_CITY_OCEANIC_MUSEUM_AQUA_GRUNTS - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox SlateportCity_OceanicMuseum_2F_Text_SternThankYouForSavingUs, MSGBOX_DEFAULT - setvar VAR_0x8004, ITEM_DEVON_GOODS + setvar VAR_0x8004, ITEM_DEVON_PARTS call Common_EventScript_PlayerHandedOverTheItem msgbox SlateportCity_OceanicMuseum_2F_Text_SternIveGotToGo, MSGBOX_DEFAULT closemessage @@ -86,8 +81,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_CaptStern:: special HealPlayerParty removeobject LOCALID_CAPT_STERN setflag FLAG_HIDE_ROUTE_110_TEAM_AQUA - compare VAR_REGISTER_BIRCH_STATE, 0 - call_if_eq SlateportCity_OceanicMuseum_2F_EventScript_ReadyRegisterBirch + call_if_eq VAR_REGISTER_BIRCH_STATE, 0, SlateportCity_OceanicMuseum_2F_EventScript_ReadyRegisterBirch setflag FLAG_DELIVERED_DEVON_GOODS clearflag FLAG_HIDE_ROUTE_116_DEVON_EMPLOYEE setflag FLAG_HIDE_RUSTBORO_CITY_DEVON_CORP_3F_EMPLOYEE @@ -101,12 +95,12 @@ SlateportCity_OceanicMuseum_2F_EventScript_ReadyRegisterBirch:: return SlateportCity_OceanicMuseum_2F_EventScript_PlayerFaceGrunts:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return SlateportCity_OceanicMuseum_2F_EventScript_SternFaceGrunts:: - applymovement LOCALID_CAPT_STERN, Common_Movement_WalkInPlaceFastestLeft + applymovement LOCALID_CAPT_STERN, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return @@ -123,7 +117,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_PlayerApproachGruntWest:: SlateportCity_OceanicMuseum_2F_Movement_PlayerApproachGruntSouth: walk_left walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end SlateportCity_OceanicMuseum_2F_Movement_PlayerApproachGruntWest: @@ -131,7 +125,7 @@ SlateportCity_OceanicMuseum_2F_Movement_PlayerApproachGruntWest: walk_left walk_left walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end SlateportCity_OceanicMuseum_2F_Movement_Unused: @@ -173,7 +167,7 @@ SlateportCity_OceanicMuseum_2F_Movement_GruntApproachToBattle: SlateportCity_OceanicMuseum_2F_Movement_FirstGruntEnter: walk_down walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end SlateportCity_OceanicMuseum_2F_Movement_FirstGruntApproach: @@ -217,7 +211,7 @@ SlateportCity_OceanicMuseum_2F_Movement_GruntMoveForArchie: delay_16 delay_8 walk_fast_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end SlateportCity_OceanicMuseum_2F_EventScript_WaterQualitySample1:: diff --git a/data/maps/SlateportCity_PokemonFanClub/scripts.inc b/data/maps/SlateportCity_PokemonFanClub/scripts.inc index 3bff728164..3b50428614 100644 --- a/data/maps/SlateportCity_PokemonFanClub/scripts.inc +++ b/data/maps/SlateportCity_PokemonFanClub/scripts.inc @@ -26,10 +26,8 @@ SlateportCity_PokemonFanClub_EventScript_ChairmanTryAssessPokemon:: call_if_set FLAG_RECEIVED_PINK_SCARF, SlateportCity_PokemonFanClub_EventScript_CountReceivedScarf call_if_set FLAG_RECEIVED_BLUE_SCARF, SlateportCity_PokemonFanClub_EventScript_CountReceivedScarf call_if_set FLAG_RECEIVED_RED_SCARF, SlateportCity_PokemonFanClub_EventScript_CountReceivedScarf - compare VAR_TEMP_2, CONTEST_CATEGORIES_COUNT - call_if_eq SlateportCity_PokemonFanClub_EventScript_ReceivedAllScarves - compare VAR_SLATEPORT_FAN_CLUB_STATE, 2 - goto_if_eq SlateportCity_PokemonFanClub_EventScript_NoMoreScarves + call_if_eq VAR_TEMP_2, CONTEST_CATEGORIES_COUNT, SlateportCity_PokemonFanClub_EventScript_ReceivedAllScarves + goto_if_eq VAR_SLATEPORT_FAN_CLUB_STATE, 2, SlateportCity_PokemonFanClub_EventScript_NoMoreScarves msgbox SlateportCity_PokemonFanClub_Text_HowIsYourPokemonGrowing, MSGBOX_DEFAULT goto SlateportCity_PokemonFanClub_EventScript_ChairmanAssessLeadMon end @@ -47,7 +45,7 @@ SlateportCity_PokemonFanClub_EventScript_ChairmanAssessLeadMon:: call_if_unset FLAG_RECEIVED_PINK_SCARF, SlateportCity_PokemonFanClub_EventScript_CheckMonCute call_if_unset FLAG_RECEIVED_BLUE_SCARF, SlateportCity_PokemonFanClub_EventScript_CheckMonBeauty call_if_unset FLAG_RECEIVED_RED_SCARF, SlateportCity_PokemonFanClub_EventScript_CheckMonCool - bufferleadmonspeciesname 0 + bufferleadmonspeciesname STR_VAR_1 switch VAR_TEMP_1 case 0, SlateportCity_PokemonFanClub_EventScript_NoHighConditions case 1, SlateportCity_PokemonFanClub_EventScript_GiveRedScarf @@ -72,9 +70,8 @@ SlateportCity_PokemonFanClub_EventScript_NoHighConditions:: end SlateportCity_PokemonFanClub_EventScript_GiveRedScarf:: - checkitemspace ITEM_RED_SCARF, 1 - compare VAR_RESULT, FALSE - goto_if_eq SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf + checkitemspace ITEM_RED_SCARF + goto_if_eq VAR_RESULT, FALSE, SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf msgbox SlateportCity_PokemonFanClub_Text_MonMostImpressiveGiveItThis, MSGBOX_DEFAULT setflag FLAG_RECEIVED_RED_SCARF giveitem ITEM_RED_SCARF @@ -83,9 +80,8 @@ SlateportCity_PokemonFanClub_EventScript_GiveRedScarf:: end SlateportCity_PokemonFanClub_EventScript_GiveBlueScarf:: - checkitemspace ITEM_BLUE_SCARF, 1 - compare VAR_RESULT, FALSE - goto_if_eq SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf + checkitemspace ITEM_BLUE_SCARF + goto_if_eq VAR_RESULT, FALSE, SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf msgbox SlateportCity_PokemonFanClub_Text_MonMostImpressiveGiveItThis, MSGBOX_DEFAULT setflag FLAG_RECEIVED_BLUE_SCARF giveitem ITEM_BLUE_SCARF @@ -94,9 +90,8 @@ SlateportCity_PokemonFanClub_EventScript_GiveBlueScarf:: end SlateportCity_PokemonFanClub_EventScript_GivePinkScarf:: - checkitemspace ITEM_PINK_SCARF, 1 - compare VAR_RESULT, FALSE - goto_if_eq SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf + checkitemspace ITEM_PINK_SCARF + goto_if_eq VAR_RESULT, FALSE, SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf msgbox SlateportCity_PokemonFanClub_Text_MonMostImpressiveGiveItThis, MSGBOX_DEFAULT setflag FLAG_RECEIVED_PINK_SCARF giveitem ITEM_PINK_SCARF @@ -105,9 +100,8 @@ SlateportCity_PokemonFanClub_EventScript_GivePinkScarf:: end SlateportCity_PokemonFanClub_EventScript_GiveGreenScarf:: - checkitemspace ITEM_GREEN_SCARF, 1 - compare VAR_RESULT, FALSE - goto_if_eq SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf + checkitemspace ITEM_GREEN_SCARF + goto_if_eq VAR_RESULT, FALSE, SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf msgbox SlateportCity_PokemonFanClub_Text_MonMostImpressiveGiveItThis, MSGBOX_DEFAULT setflag FLAG_RECEIVED_GREEN_SCARF giveitem ITEM_GREEN_SCARF @@ -116,9 +110,8 @@ SlateportCity_PokemonFanClub_EventScript_GiveGreenScarf:: end SlateportCity_PokemonFanClub_EventScript_GiveYellowScarf:: - checkitemspace ITEM_YELLOW_SCARF, 1 - compare VAR_RESULT, FALSE - goto_if_eq SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf + checkitemspace ITEM_YELLOW_SCARF + goto_if_eq VAR_RESULT, FALSE, SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf msgbox SlateportCity_PokemonFanClub_Text_MonMostImpressiveGiveItThis, MSGBOX_DEFAULT setflag FLAG_RECEIVED_YELLOW_SCARF giveitem ITEM_YELLOW_SCARF @@ -133,8 +126,7 @@ SlateportCity_PokemonFanClub_EventScript_NoRoomForScarf:: SlateportCity_PokemonFanClub_EventScript_CheckMonCool:: specialvar VAR_RESULT, CheckLeadMonCool - compare VAR_RESULT, TRUE - call_if_eq SlateportCity_PokemonFanClub_EventScript_SetMonCool + call_if_eq VAR_RESULT, TRUE, SlateportCity_PokemonFanClub_EventScript_SetMonCool return SlateportCity_PokemonFanClub_EventScript_SetMonCool:: @@ -143,8 +135,7 @@ SlateportCity_PokemonFanClub_EventScript_SetMonCool:: SlateportCity_PokemonFanClub_EventScript_CheckMonBeauty:: specialvar VAR_RESULT, CheckLeadMonBeauty - compare VAR_RESULT, TRUE - call_if_eq SlateportCity_PokemonFanClub_EventScript_SetMonBeauty + call_if_eq VAR_RESULT, TRUE, SlateportCity_PokemonFanClub_EventScript_SetMonBeauty return SlateportCity_PokemonFanClub_EventScript_SetMonBeauty:: @@ -153,8 +144,7 @@ SlateportCity_PokemonFanClub_EventScript_SetMonBeauty:: SlateportCity_PokemonFanClub_EventScript_CheckMonCute:: specialvar VAR_RESULT, CheckLeadMonCute - compare VAR_RESULT, TRUE - call_if_eq SlateportCity_PokemonFanClub_EventScript_SetMonCute + call_if_eq VAR_RESULT, TRUE, SlateportCity_PokemonFanClub_EventScript_SetMonCute return SlateportCity_PokemonFanClub_EventScript_SetMonCute:: @@ -163,8 +153,7 @@ SlateportCity_PokemonFanClub_EventScript_SetMonCute:: SlateportCity_PokemonFanClub_EventScript_CheckMonSmart:: specialvar VAR_RESULT, CheckLeadMonSmart - compare VAR_RESULT, TRUE - call_if_eq SlateportCity_PokemonFanClub_EventScript_SetMonSmart + call_if_eq VAR_RESULT, TRUE, SlateportCity_PokemonFanClub_EventScript_SetMonSmart return SlateportCity_PokemonFanClub_EventScript_SetMonSmart:: @@ -173,8 +162,7 @@ SlateportCity_PokemonFanClub_EventScript_SetMonSmart:: SlateportCity_PokemonFanClub_EventScript_CheckMonTough:: specialvar VAR_RESULT, CheckLeadMonTough - compare VAR_RESULT, TRUE - call_if_eq SlateportCity_PokemonFanClub_EventScript_SetMonTough + call_if_eq VAR_RESULT, TRUE, SlateportCity_PokemonFanClub_EventScript_SetMonTough return SlateportCity_PokemonFanClub_EventScript_SetMonTough:: @@ -204,8 +192,7 @@ SlateportCity_PokemonFanClub_EventScript_SootheBellWoman:: goto_if_set FLAG_RECEIVED_SOOTHE_BELL, SlateportCity_PokemonFanClub_EventScript_ReceivedSootheBell msgbox SlateportCity_PokemonFanClub_Text_ShowMePokemonThatLoveYou, MSGBOX_DEFAULT specialvar VAR_RESULT, GetLeadMonFriendshipScore - compare VAR_RESULT, 4 - goto_if_ge SlateportCity_PokemonFanClub_EventScript_GiveSootheBell + goto_if_ge VAR_RESULT, FRIENDSHIP_150_TO_199, SlateportCity_PokemonFanClub_EventScript_GiveSootheBell release end @@ -217,8 +204,7 @@ SlateportCity_PokemonFanClub_EventScript_GiveSootheBell:: waitmovement 0 msgbox SlateportCity_PokemonFanClub_Text_PokemonAdoresYou, MSGBOX_DEFAULT giveitem ITEM_SOOTHE_BELL - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_SOOTHE_BELL release end @@ -240,7 +226,7 @@ SlateportCity_PokemonFanClub_EventScript_Skitty:: lock faceplayer waitse - playmoncry SPECIES_SKITTY, 0 + playmoncry SPECIES_SKITTY, CRY_MODE_NORMAL msgbox SlateportCity_PokemonFanClub_Text_Skitty, MSGBOX_DEFAULT waitmoncry release @@ -250,7 +236,7 @@ SlateportCity_PokemonFanClub_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox SlateportCity_PokemonFanClub_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release @@ -260,7 +246,7 @@ SlateportCity_PokemonFanClub_EventScript_Azumarill:: lock faceplayer waitse - playmoncry SPECIES_AZUMARILL, 0 + playmoncry SPECIES_AZUMARILL, CRY_MODE_NORMAL msgbox SlateportCity_PokemonFanClub_Text_Azumarill, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/SootopolisCity/scripts.inc b/data/maps/SootopolisCity/scripts.inc index efeae33d1e..69f74880ec 100644 --- a/data/maps/SootopolisCity/scripts.inc +++ b/data/maps/SootopolisCity/scripts.inc @@ -34,49 +34,37 @@ SootopolisCity_EventScript_LegendariesNotArrived:: end SootopolisCity_EventScript_LockHouseDoors:: - setmetatile 9, 6, METATILE_Sootopolis_Door_Closed, 1 - setmetatile 9, 17, METATILE_Sootopolis_Door_Closed, 1 - setmetatile 9, 26, METATILE_Sootopolis_Door_Closed, 1 - setmetatile 44, 17, METATILE_Sootopolis_Door_Closed, 1 - setmetatile 8, 35, METATILE_Sootopolis_Door_Closed, 1 - setmetatile 53, 28, METATILE_Sootopolis_Door_Closed, 1 - setmetatile 45, 6, METATILE_Sootopolis_Door_Closed, 1 - setmetatile 48, 25, METATILE_Sootopolis_Door_Closed, 1 - setmetatile 51, 36, METATILE_Sootopolis_Door_Closed, 1 + setmetatile 9, 6, METATILE_Sootopolis_Door_Closed, TRUE + setmetatile 9, 17, METATILE_Sootopolis_Door_Closed, TRUE + setmetatile 9, 26, METATILE_Sootopolis_Door_Closed, TRUE + setmetatile 44, 17, METATILE_Sootopolis_Door_Closed, TRUE + setmetatile 8, 35, METATILE_Sootopolis_Door_Closed, TRUE + setmetatile 53, 28, METATILE_Sootopolis_Door_Closed, TRUE + setmetatile 45, 6, METATILE_Sootopolis_Door_Closed, TRUE + setmetatile 48, 25, METATILE_Sootopolis_Door_Closed, TRUE + setmetatile 51, 36, METATILE_Sootopolis_Door_Closed, TRUE return SootopolisCity_EventScript_LockGymDoor:: - setmetatile 31, 32, METATILE_Sootopolis_GymDoor_Closed, 1 + setmetatile 31, 32, METATILE_Sootopolis_GymDoor_Closed, TRUE return SootopolisCity_OnTransition: setflag FLAG_VISITED_SOOTOPOLIS_CITY - compare VAR_SOOTOPOLIS_CITY_STATE, 1 - call_if_eq SootopolisCity_EventScript_HideMapNamePopup - compare VAR_SKY_PILLAR_STATE, 1 - call_if_eq SootopolisCity_EventScript_HideMapNamePopup + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_HideMapNamePopup + call_if_eq VAR_SKY_PILLAR_STATE, 1, SootopolisCity_EventScript_HideMapNamePopup call SootopolisCity_EventScript_SetWeather call SootopolisCity_EventScript_SetLayout - compare VAR_SOOTOPOLIS_CITY_STATE, 1 - call_if_eq SootopolisCity_EventScript_SetBattleSpectators - compare VAR_SOOTOPOLIS_CITY_STATE, 2 - call_if_eq SootopolisCity_EventScript_SetBattleSpectators - compare VAR_SOOTOPOLIS_CITY_STATE, 3 - call_if_eq SootopolisCity_EventScript_SetBattleSpectators - compare VAR_SOOTOPOLIS_CITY_STATE, 4 - call_if_eq SootopolisCity_EventScript_SetBattleSpectators - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - call_if_eq SootopolisCity_EventScript_SetBattleSpectators - compare VAR_SOOTOPOLIS_CITY_STATE, 2 - call_if_eq SootopolisCity_EventScript_CheckSetEnterCaveOfOriginObjPos - compare VAR_SOOTOPOLIS_CITY_STATE, 3 - call_if_eq SootopolisCity_EventScript_CheckSetEnterCaveOfOriginObjPos - compare VAR_SOOTOPOLIS_CITY_STATE, 4 - call_if_eq SootopolisCity_EventScript_SetExitCaveOfOriginObjPos - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - call_if_eq SootopolisCity_EventScript_SetOutsideGymObjPos - compare VAR_SOOTOPOLIS_CITY_STATE, 6 - call_if_eq SootopolisCity_EventScript_SetExpertBlockCaveEntrance + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_SetBattleSpectators + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_SetBattleSpectators + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 3, SootopolisCity_EventScript_SetBattleSpectators + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_SetBattleSpectators + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_SetBattleSpectators + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_CheckSetEnterCaveOfOriginObjPos + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 3, SootopolisCity_EventScript_CheckSetEnterCaveOfOriginObjPos + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_SetExitCaveOfOriginObjPos + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_SetOutsideGymObjPos + call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_SetExpertBlockCaveEntrance end SootopolisCity_EventScript_HideMapNamePopup:: @@ -95,20 +83,13 @@ SootopolisCity_EventScript_SetBattleSpectators:: return SootopolisCity_EventScript_SetLayout:: - compare VAR_SOOTOPOLIS_CITY_STATE, 0 - goto_if_eq SootopolisCity_EventScript_SetNormalLayout - compare VAR_SOOTOPOLIS_CITY_STATE, 6 - goto_if_ge SootopolisCity_EventScript_SetNormalLayout - compare VAR_SOOTOPOLIS_CITY_STATE, 1 - goto_if_eq SootopolisCity_EventScript_SetLegendariesLayout - compare VAR_SOOTOPOLIS_CITY_STATE, 2 - goto_if_eq SootopolisCity_EventScript_SetLegendariesLayout - compare VAR_SOOTOPOLIS_CITY_STATE, 3 - goto_if_eq SootopolisCity_EventScript_SetLegendariesLayout - compare VAR_SOOTOPOLIS_CITY_STATE, 4 - goto_if_eq SootopolisCity_EventScript_SetLegendariesLayout - compare VAR_SKY_PILLAR_STATE, 1 - goto_if_le SootopolisCity_EventScript_SetLegendariesLayout + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 0, SootopolisCity_EventScript_SetNormalLayout + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_SetNormalLayout + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_SetLegendariesLayout + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_SetLegendariesLayout + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 3, SootopolisCity_EventScript_SetLegendariesLayout + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_SetLegendariesLayout + goto_if_le VAR_SKY_PILLAR_STATE, 1, SootopolisCity_EventScript_SetLegendariesLayout return SootopolisCity_EventScript_SetNormalLayout:: @@ -119,16 +100,11 @@ SootopolisCity_EventScript_SetLegendariesLayout:: return SootopolisCity_EventScript_SetWeather:: - compare VAR_SOOTOPOLIS_CITY_STATE, 0 - goto_if_eq SootopolisCity_EventScript_SetNormalWeather - compare VAR_SOOTOPOLIS_CITY_STATE, 6 - goto_if_ge SootopolisCity_EventScript_SetNormalWeather - compare VAR_SOOTOPOLIS_CITY_STATE, 1 - goto_if_eq SootopolisCity_EventScript_SetDownpour - compare VAR_SKY_PILLAR_STATE, 1 - goto_if_eq SootopolisCity_EventScript_SetDownpour - compare VAR_SKY_PILLAR_STATE, 1 - goto_if_le Common_EventScript_SetAbnormalWeather + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 0, SootopolisCity_EventScript_SetNormalWeather + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_SetNormalWeather + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_SetDownpour + goto_if_eq VAR_SKY_PILLAR_STATE, 1, SootopolisCity_EventScript_SetDownpour + goto_if_le VAR_SKY_PILLAR_STATE, 1, Common_EventScript_SetAbnormalWeather return SootopolisCity_EventScript_SetNormalWeather:: @@ -158,12 +134,9 @@ SootopolisCity_EventScript_SetOutsideGymObjPos:: setobjectxyperm LOCALID_STEVEN, 29, 33 setobjectxyperm LOCALID_MAXIE, 33, 35 setobjectxyperm LOCALID_ARCHIE, 34, 35 - compare VAR_SOOTOPOLIS_WALLACE_STATE, 0 - call_if_eq SootopolisCity_EventScript_SetWallaceMiddle - compare VAR_SOOTOPOLIS_WALLACE_STATE, 1 - call_if_eq SootopolisCity_EventScript_SetWallaceRight - compare VAR_SOOTOPOLIS_WALLACE_STATE, 2 - call_if_eq SootopolisCity_EventScript_SetWallaceLeft + call_if_eq VAR_SOOTOPOLIS_WALLACE_STATE, 0, SootopolisCity_EventScript_SetWallaceMiddle + call_if_eq VAR_SOOTOPOLIS_WALLACE_STATE, 1, SootopolisCity_EventScript_SetWallaceRight + call_if_eq VAR_SOOTOPOLIS_WALLACE_STATE, 2, SootopolisCity_EventScript_SetWallaceLeft return SootopolisCity_EventScript_SetWallaceMiddle:: @@ -190,10 +163,8 @@ SootopolisCity_OnWarp: .2byte 0 SootopolisCity_EventScript_PlayerFaceLegendaries:: - compare VAR_SKY_PILLAR_STATE, 1 - call_if_eq SootopolisCity_EventScript_PlayerFaceLegendaries1 - compare VAR_SKY_PILLAR_STATE, 2 - call_if_eq SootopolisCity_EventScript_PlayerFaceLegendaries2 + call_if_eq VAR_SKY_PILLAR_STATE, 1, SootopolisCity_EventScript_PlayerFaceLegendaries1 + call_if_eq VAR_SKY_PILLAR_STATE, 2, SootopolisCity_EventScript_PlayerFaceLegendaries2 end SootopolisCity_EventScript_PlayerFaceLegendaries1:: @@ -206,7 +177,7 @@ SootopolisCity_EventScript_PlayerFaceLegendaries2:: return SootopolisCity_OnResume: - setdivewarp MAP_UNDERWATER_SOOTOPOLIS_CITY, 255, 9, 6 + setdivewarp MAP_UNDERWATER_SOOTOPOLIS_CITY, 9, 6 end SootopolisCity_OnFrame: @@ -218,10 +189,8 @@ SootopolisCity_OnFrame: SootopolisCity_EventScript_StartLegendariesScene:: lockall special StorePlayerCoordsInVars - compare VAR_0x8004, 43 - goto_if_ne SootopolisCity_EventScript_LegendariesSceneFromDive - compare VAR_0x8005, 32 - goto_if_ne SootopolisCity_EventScript_LegendariesSceneFromDive + goto_if_ne VAR_0x8004, 43, SootopolisCity_EventScript_LegendariesSceneFromDive + goto_if_ne VAR_0x8005, 32, SootopolisCity_EventScript_LegendariesSceneFromDive goto SootopolisCity_EventScript_LegendariesSceneFromPokeCenter end @@ -238,12 +207,12 @@ SootopolisCity_EventScript_LegendariesSceneFromPokeCenter:: setvar VAR_0x8004, FALSE @ Just do Groudon/Kyogre fight scene special Script_DoRayquazaScene waitstate - applymovement LOCALID_KYOGRE, Common_Movement_WalkInPlaceFastestLeft - applymovement LOCALID_GROUDON, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_KYOGRE, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_GROUDON, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 60 waitse - playmoncry SPECIES_KYOGRE, 2 + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend waitmovement 0 @@ -257,7 +226,7 @@ SootopolisCity_EventScript_LegendariesSceneFromPokeCenter:: applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack waitmovement 0 waitse - playmoncry SPECIES_GROUDON, 2 + playmoncry SPECIES_GROUDON, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreDefend applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonAttack waitmovement 0 @@ -271,7 +240,7 @@ SootopolisCity_EventScript_LegendariesSceneFromPokeCenter:: applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack waitmovement 0 waitse - playmoncry SPECIES_KYOGRE, 2 + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend waitmovement 0 @@ -338,12 +307,12 @@ SootopolisCity_EventScript_LegendariesSceneFromDive:: setvar VAR_0x8004, FALSE @ Just do Groudon/Kyogre fight scene special Script_DoRayquazaScene waitstate - applymovement LOCALID_KYOGRE, Common_Movement_WalkInPlaceFastestLeft - applymovement LOCALID_GROUDON, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_KYOGRE, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_GROUDON, Common_Movement_WalkInPlaceFasterRight waitmovement 0 delay 60 waitse - playmoncry SPECIES_KYOGRE, 2 + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend waitmovement 0 @@ -357,7 +326,7 @@ SootopolisCity_EventScript_LegendariesSceneFromDive:: applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack waitmovement 0 waitse - playmoncry SPECIES_GROUDON, 2 + playmoncry SPECIES_GROUDON, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreDefend applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonAttack waitmovement 0 @@ -371,7 +340,7 @@ SootopolisCity_EventScript_LegendariesSceneFromDive:: applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack waitmovement 0 waitse - playmoncry SPECIES_KYOGRE, 2 + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend waitmovement 0 @@ -509,10 +478,8 @@ SootopolisCity_Movement_GroudonIdle: SootopolisCity_EventScript_StartRayquazaScene:: lockall special StorePlayerCoordsInVars - compare VAR_0x8004, 43 - goto_if_ne SootopolisCity_EventScript_RayquazaSceneFromDive - compare VAR_0x8005, 32 - goto_if_ne SootopolisCity_EventScript_RayquazaSceneFromDive + goto_if_ne VAR_0x8004, 43, SootopolisCity_EventScript_RayquazaSceneFromDive + goto_if_ne VAR_0x8005, 32, SootopolisCity_EventScript_RayquazaSceneFromDive goto SootopolisCity_EventScript_RayquazaSceneFromPokeCenter end @@ -536,7 +503,7 @@ SootopolisCity_EventScript_RayquazaSceneFromPokeCenter:: applymovement OBJ_EVENT_ID_CAMERA, SootopolisCity_Movement_PanUp waitmovement 0 waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 1 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes @@ -544,7 +511,7 @@ SootopolisCity_EventScript_RayquazaSceneFromPokeCenter:: special ShakeCamera waitstate waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 2 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes @@ -565,7 +532,7 @@ SootopolisCity_EventScript_RayquazaSceneFromPokeCenter:: fadenewbgm MUS_SOOTOPOLIS delay 120 clearflag FLAG_HIDE_MAP_NAME_POPUP - warpsootopolislegend MAP_SOOTOPOLIS_CITY, 255, 43, 32 + warpwhitefade MAP_SOOTOPOLIS_CITY, 43, 32 waitstate end @@ -589,7 +556,7 @@ SootopolisCity_EventScript_RayquazaSceneFromDive:: applymovement OBJ_EVENT_ID_PLAYER, SootopolisCity_Movement_PlayerApproachLegendaries waitmovement 0 waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 1 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes @@ -597,7 +564,7 @@ SootopolisCity_EventScript_RayquazaSceneFromDive:: special ShakeCamera waitstate waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 2 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes @@ -618,45 +585,45 @@ SootopolisCity_EventScript_RayquazaSceneFromDive:: fadenewbgm MUS_SURF delay 120 clearflag FLAG_HIDE_MAP_NAME_POPUP - warpsootopolislegend MAP_SOOTOPOLIS_CITY, 255, 29, 53 + warpwhitefade MAP_SOOTOPOLIS_CITY, 29, 53 waitstate end SootopolisCity_EventScript_SetRoughWater:: - setmetatile 27, 43, METATILE_Sootopolis_RoughWater, 0 - setmetatile 28, 43, METATILE_Sootopolis_RoughWater, 0 - setmetatile 29, 43, METATILE_Sootopolis_RoughWater, 0 - setmetatile 30, 43, METATILE_Sootopolis_RoughWater, 0 - setmetatile 27, 44, METATILE_Sootopolis_RoughWater, 0 - setmetatile 28, 44, METATILE_Sootopolis_RoughWater, 0 - setmetatile 29, 44, METATILE_Sootopolis_RoughWater, 0 - setmetatile 30, 44, METATILE_Sootopolis_RoughWater, 0 - setmetatile 27, 45, METATILE_Sootopolis_RoughWater, 0 - setmetatile 28, 45, METATILE_Sootopolis_RoughWater, 0 - setmetatile 29, 45, METATILE_Sootopolis_RoughWater, 0 - setmetatile 30, 45, METATILE_Sootopolis_RoughWater, 0 - setmetatile 32, 43, METATILE_Sootopolis_RoughWater, 0 - setmetatile 33, 43, METATILE_Sootopolis_RoughWater, 0 - setmetatile 34, 43, METATILE_Sootopolis_RoughWater, 0 - setmetatile 35, 43, METATILE_Sootopolis_RoughWater, 0 - setmetatile 32, 44, METATILE_Sootopolis_RoughWater, 0 - setmetatile 33, 44, METATILE_Sootopolis_RoughWater, 0 - setmetatile 34, 44, METATILE_Sootopolis_RoughWater, 0 - setmetatile 35, 44, METATILE_Sootopolis_RoughWater, 0 - setmetatile 32, 45, METATILE_Sootopolis_RoughWater, 0 - setmetatile 33, 45, METATILE_Sootopolis_RoughWater, 0 - setmetatile 34, 45, METATILE_Sootopolis_RoughWater, 0 - setmetatile 35, 45, METATILE_Sootopolis_RoughWater, 0 + setmetatile 27, 43, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 28, 43, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 29, 43, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 30, 43, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 27, 44, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 28, 44, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 29, 44, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 30, 44, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 27, 45, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 28, 45, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 29, 45, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 30, 45, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 32, 43, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 33, 43, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 34, 43, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 35, 43, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 32, 44, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 33, 44, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 34, 44, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 35, 44, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 32, 45, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 33, 45, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 34, 45, METATILE_Sootopolis_RoughWater, FALSE + setmetatile 35, 45, METATILE_Sootopolis_RoughWater, FALSE return SootopolisCity_Movement_RayquazaFlyOff: walk_fast_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up - walk_fastest_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up + walk_faster_up step_end SootopolisCity_Movement_PanUp: @@ -717,12 +684,9 @@ SootopolisCity_Movement_UnusedPanBack: SootopolisCity_EventScript_CaveOfOriginExpert:: lock faceplayer - compare VAR_SOOTOPOLIS_CITY_STATE, 6 - goto_if_ge SootopolisCity_EventScript_ExpertPostLegendaries - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_ExpertLegendaries - compare VAR_SOOTOPOLIS_CITY_STATE, 2 - goto_if_ge SootopolisCity_EventScript_ExpertLeadToCave + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_ExpertPostLegendaries + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_ExpertLegendaries + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_ExpertLeadToCave msgbox SootopolisCity_Text_CaveOfOriginPleaseLeave, MSGBOX_DEFAULT release end @@ -745,12 +709,9 @@ SootopolisCity_EventScript_ExpertLegendaries:: SootopolisCity_EventScript_Kiri:: lock faceplayer - compare VAR_SOOTOPOLIS_CITY_STATE, 1 - goto_if_le SootopolisCity_EventScript_KiriGiveBerry - compare VAR_SOOTOPOLIS_CITY_STATE, 6 - goto_if_ge SootopolisCity_EventScript_KiriGiveBerry - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_KiriRayquaza + goto_if_le VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_KiriGiveBerry + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_KiriGiveBerry + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_KiriRayquaza msgbox SootopolisCity_Text_BigPokemonFighting, MSGBOX_DEFAULT closemessage applymovement LOCALID_KIRI, Common_Movement_FaceOriginalDirection @@ -774,37 +735,31 @@ SootopolisCity_EventScript_KiriGiveBerry:: addvar VAR_RESULT, NUM_KIRI_BERRIES_SKIPPED addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem VAR_RESULT - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_DAILY_SOOTOPOLIS_RECEIVED_BERRY msgbox SootopolisCity_Text_GiveYouThisBerryToo, MSGBOX_DEFAULT random 2 - compare VAR_RESULT, 0 - goto_if_eq SootopolisCity_EventScript_GiveFigyBerry - compare VAR_RESULT, 1 - goto_if_eq SootopolisCity_EventScript_GiveIapapaBerry + goto_if_eq VAR_RESULT, 0, SootopolisCity_EventScript_GiveFigyBerry + goto_if_eq VAR_RESULT, 1, SootopolisCity_EventScript_GiveIapapaBerry end SootopolisCity_EventScript_GiveFigyBerry:: giveitem ITEM_FIGY_BERRY - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox SootopolisCity_Text_WhatKindOfWishInYourName, MSGBOX_DEFAULT release end SootopolisCity_EventScript_GiveIapapaBerry:: giveitem ITEM_IAPAPA_BERRY - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox SootopolisCity_Text_WhatKindOfWishInYourName, MSGBOX_DEFAULT release end SootopolisCity_EventScript_KiriReceivedBerry:: msgbox SootopolisCity_Text_LikeSeasonBornIn, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SootopolisCity_EventScript_KiriLikeSeasonBornIn + goto_if_eq VAR_RESULT, YES, SootopolisCity_EventScript_KiriLikeSeasonBornIn msgbox SootopolisCity_Text_OhDoesntMatter, MSGBOX_DEFAULT release end @@ -818,8 +773,7 @@ SootopolisCity_EventScript_Woman2:: lockall applymovement LOCALID_WOMAN_2, Common_Movement_FacePlayer waitmovement 0 - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_Woman2Rayquaza + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_Woman2Rayquaza msgbox SootopolisCity_Text_WeatherWentWild, MSGBOX_DEFAULT closemessage applymovement LOCALID_WOMAN_2, Common_Movement_FaceOriginalDirection @@ -835,8 +789,7 @@ SootopolisCity_EventScript_Woman2Rayquaza:: SootopolisCity_EventScript_Man:: lock faceplayer - compare VAR_SOOTOPOLIS_CITY_STATE, 6 - goto_if_ge SootopolisCity_EventScript_ManPostLegendaries + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_ManPostLegendaries msgbox SootopolisCity_Text_NoOrdinaryTourist, MSGBOX_DEFAULT release end @@ -849,12 +802,9 @@ SootopolisCity_EventScript_ManPostLegendaries:: SootopolisCity_EventScript_Woman1:: lock faceplayer - compare VAR_SOOTOPOLIS_CITY_STATE, 6 - goto_if_ge SootopolisCity_EventScript_Woman1PostLegendaries - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_Woman1Rayquaza - compare VAR_SOOTOPOLIS_CITY_STATE, 2 - goto_if_ge SootopolisCity_EventScript_Woman1Legendaries + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_Woman1PostLegendaries + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_Woman1Rayquaza + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_Woman1Legendaries msgbox SootopolisCity_Text_SootopolisSkyBeautiful, MSGBOX_DEFAULT release end @@ -881,12 +831,9 @@ SootopolisCity_EventScript_NinjaBoy:: lockall applymovement LOCALID_NINJA_BOY, Common_Movement_FacePlayer waitmovement 0 - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_NinjaBoyRayquaza - compare VAR_SOOTOPOLIS_CITY_STATE, 6 - goto_if_ge SootopolisCity_EventScript_NinjaBoyNormal - compare VAR_SOOTOPOLIS_CITY_STATE, 1 - goto_if_le SootopolisCity_EventScript_NinjaBoyNormal + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_NinjaBoyRayquaza + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_NinjaBoyNormal + goto_if_le VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_NinjaBoyNormal msgbox SootopolisCity_Text_ThisIsWicked, MSGBOX_DEFAULT closemessage applymovement LOCALID_NINJA_BOY, Common_Movement_FaceOriginalDirection @@ -908,13 +855,10 @@ SootopolisCity_EventScript_Boy1:: lockall applymovement LOCALID_BOY_1, Common_Movement_FacePlayer waitmovement 0 - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_Boy1Rayquaza + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_Boy1Rayquaza goto_if_set FLAG_SYS_GAME_CLEAR, SootopolisCity_EventScript_Boy1GameClear - compare VAR_SOOTOPOLIS_CITY_STATE, 6 - goto_if_ge SootopolisCity_EventScript_Boy1Normal - compare VAR_SOOTOPOLIS_CITY_STATE, 1 - goto_if_le SootopolisCity_EventScript_Boy1Normal + goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_Boy1Normal + goto_if_le VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_Boy1Normal msgbox SootopolisCity_Text_GiantPokemonSuddenlyAppeared, MSGBOX_DEFAULT closemessage applymovement LOCALID_BOY_1, Common_Movement_FaceOriginalDirection @@ -954,12 +898,9 @@ SootopolisCity_EventScript_Steven:: applymovement LOCALID_STEVEN, Common_Movement_FacePlayer waitmovement 0 call_if_unset FLAG_STEVEN_GUIDES_TO_CAVE_OF_ORIGIN, SootopolisCity_EventScript_StevenLeadPlayerCaveOfOrigin - compare VAR_SOOTOPOLIS_CITY_STATE, 2 - goto_if_eq SootopolisCity_EventScript_StevenHelpWallace - compare VAR_SOOTOPOLIS_CITY_STATE, 3 - goto_if_eq SootopolisCity_EventScript_StevenHelpedWallace - compare VAR_SOOTOPOLIS_CITY_STATE, 4 - goto_if_eq SootopolisCity_EventScript_StevenHelpedWallace + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_StevenHelpWallace + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 3, SootopolisCity_EventScript_StevenHelpedWallace + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_StevenHelpedWallace goto_if_set FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, SootopolisCity_EventScript_StevenMaxieArchieLeft msgbox SootopolisCity_Text_SoThatsRayquaza, MSGBOX_DEFAULT releaseall @@ -983,10 +924,8 @@ SootopolisCity_EventScript_StevenHelpedWallace:: SootopolisCity_EventScript_StevenLeadPlayerCaveOfOrigin:: msgbox SootopolisCity_Text_InvolvedWithCrisisComeWithMe, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_WEST - call_if_eq SootopolisCity_EventScript_StartWalkToCaveOfOriginWest - compare VAR_FACING, DIR_NORTH - call_if_eq SootopolisCity_EventScript_StartWalkToCaveOfOriginNorth + call_if_eq VAR_FACING, DIR_WEST, SootopolisCity_EventScript_StartWalkToCaveOfOriginWest + call_if_eq VAR_FACING, DIR_NORTH, SootopolisCity_EventScript_StartWalkToCaveOfOriginNorth msgbox SootopolisCity_Text_DoesThisMakeYourFearPokemon, MSGBOX_DEFAULT closemessage applymovement LOCALID_STEVEN, SootopolisCity_Movement_StevenWalkToCaveOfOrigin @@ -1003,7 +942,7 @@ SootopolisCity_EventScript_StevenLeadPlayerCaveOfOrigin:: setflag FLAG_STEVEN_GUIDES_TO_CAVE_OF_ORIGIN applymovement OBJ_EVENT_ID_PLAYER, SootopolisCity_Movement_PlayerEnterCaveOfOrigin waitmovement 0 - warp MAP_CAVE_OF_ORIGIN_ENTRANCE, 255, 9, 20 + warp MAP_CAVE_OF_ORIGIN_ENTRANCE, 9, 20 waitstate end @@ -1055,7 +994,7 @@ SootopolisCity_Movement_StevenStartWalkToCaveOfOrigin: walk_up walk_up walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end SootopolisCity_Movement_PlayerStartWalkToCaveOfOriginWest: @@ -1186,7 +1125,7 @@ SootopolisCity_Movement_StevenWalkToCaveOfOrigin: walk_right walk_right delay_4 - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 delay_16 walk_right @@ -1249,7 +1188,7 @@ SootopolisCity_Movement_PlayerWalkToCaveOfOrigin: SootopolisCity_Movement_ExpertMoveAside: walk_slow_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end SootopolisCity_Movement_StevenArriveCaveEntrance: @@ -1262,7 +1201,7 @@ SootopolisCity_Movement_StevenArriveCaveEntrance: walk_up walk_up walk_right - walk_in_place_fastest_left + walk_in_place_faster_left step_end SootopolisCity_Movement_PlayerArriveCaveEntrance: @@ -1275,7 +1214,7 @@ SootopolisCity_Movement_PlayerArriveCaveEntrance: walk_up walk_up walk_up - walk_in_place_fastest_right + walk_in_place_faster_right step_end SootopolisCity_Movement_PlayerEnterCaveOfOrigin: @@ -1287,8 +1226,7 @@ SootopolisCity_EventScript_Boy2:: lockall applymovement LOCALID_BOY_2, Common_Movement_FacePlayer waitmovement 0 - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_Boy2Rayquaza + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_Boy2Rayquaza msgbox SootopolisCity_Text_TwoPokemonArentAngry, MSGBOX_DEFAULT closemessage applymovement LOCALID_BOY_2, Common_Movement_FaceOriginalDirection @@ -1304,8 +1242,7 @@ SootopolisCity_EventScript_Boy2Rayquaza:: SootopolisCity_EventScript_BlackBelt:: lockall - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_BlackBeltRayquaza + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_BlackBeltRayquaza msgbox SootopolisCity_Text_GoRedAndBlueMon, MSGBOX_DEFAULT closemessage applymovement LOCALID_BLACK_BELT, Common_Movement_FacePlayer @@ -1328,8 +1265,7 @@ SootopolisCity_EventScript_Girl:: lockall applymovement LOCALID_GIRL, Common_Movement_FacePlayer waitmovement 0 - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_GirlRayquaza + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_GirlRayquaza msgbox SootopolisCity_Text_SootopolisWillBeWrecked, MSGBOX_DEFAULT closemessage applymovement LOCALID_GIRL, Common_Movement_FaceOriginalDirection @@ -1347,8 +1283,7 @@ SootopolisCity_EventScript_Maniac:: lockall applymovement LOCALID_MANIAC, Common_Movement_FacePlayer waitmovement 0 - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_ManiacRayquaza + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_ManiacRayquaza msgbox SootopolisCity_Text_SeeingLegendWithOwnEyes, MSGBOX_DEFAULT closemessage applymovement LOCALID_MANIAC, Common_Movement_FaceOriginalDirection @@ -1364,8 +1299,7 @@ SootopolisCity_EventScript_ManiacRayquaza:: SootopolisCity_EventScript_Wallace:: lock faceplayer - compare VAR_SOOTOPOLIS_CITY_STATE, 4 - goto_if_eq SootopolisCity_EventScript_GoToSkyPillar + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_GoToSkyPillar goto_if_set FLAG_RECEIVED_HM07, SootopolisCity_EventScript_GoToGym goto_if_set FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, SootopolisCity_EventScript_GiveWaterfall msgbox SootopolisCity_Text_AquaMagmaDidntMeanHarm, MSGBOX_DEFAULT @@ -1378,12 +1312,9 @@ SootopolisCity_EventScript_GiveWaterfall:: setflag FLAG_RECEIVED_HM07 msgbox SootopolisCity_Text_ExplainWaterfallGoToGym, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_NORTH - call_if_eq SootopolisCity_EventScript_WallaceMoveFromGym - compare VAR_FACING, DIR_EAST - call_if_eq SootopolisCity_EventScript_WallaceMoveFromGym - compare VAR_FACING, DIR_WEST - call_if_eq SootopolisCity_EventScript_WallaceMoveFromGymWest + call_if_eq VAR_FACING, DIR_NORTH, SootopolisCity_EventScript_WallaceMoveFromGym + call_if_eq VAR_FACING, DIR_EAST, SootopolisCity_EventScript_WallaceMoveFromGym + call_if_eq VAR_FACING, DIR_WEST, SootopolisCity_EventScript_WallaceMoveFromGymWest release end @@ -1413,18 +1344,17 @@ SootopolisCity_EventScript_GoToGym:: SootopolisCity_Movement_WallaceMoveFromGym: walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end SootopolisCity_Movement_WallaceMoveFromGymWest: walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end SootopolisCity_EventScript_Maxie:: lockall - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_MaxieRayquaza + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_MaxieRayquaza msgbox SootopolisCity_Text_GroudonPleaseStop, MSGBOX_DEFAULT closemessage releaseall @@ -1439,8 +1369,7 @@ SootopolisCity_EventScript_MaxieRayquaza:: SootopolisCity_EventScript_Archie:: lockall - compare VAR_SOOTOPOLIS_CITY_STATE, 5 - goto_if_eq SootopolisCity_EventScript_ArchieRayquaza + goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_ArchieRayquaza msgbox SootopolisCity_Text_KyogreCalmDown, MSGBOX_DEFAULT closemessage releaseall @@ -1460,7 +1389,7 @@ SootopolisCity_EventScript_MaxieArchieLeave:: clearflag FLAG_HIDE_MT_PYRE_SUMMIT_MAXIE clearflag FLAG_HIDE_MT_PYRE_SUMMIT_ARCHIE setvar VAR_MT_PYRE_STATE, 2 - warpsilent MAP_SOOTOPOLIS_CITY, 255, 31, 34 + warpsilent MAP_SOOTOPOLIS_CITY, 31, 34 waitstate releaseall end diff --git a/data/maps/SootopolisCity_Gym_1F/scripts.inc b/data/maps/SootopolisCity_Gym_1F/scripts.inc index b20cf78887..7f739935b1 100644 --- a/data/maps/SootopolisCity_Gym_1F/scripts.inc +++ b/data/maps/SootopolisCity_Gym_1F/scripts.inc @@ -19,20 +19,17 @@ SootopolisCity_Gym_1F_OnLoad: end SootopolisCity_Gym_1F_EventScript_CheckSetStairMetatiles:: - compare VAR_ICE_STEP_COUNT, 8 - goto_if_lt SootopolisCity_Gym_1F_EventScript_StopCheckingStairs @ All stairs ice - compare VAR_ICE_STEP_COUNT, 28 - goto_if_lt SootopolisCity_Gym_1F_EventScript_OpenFirstStairs - compare VAR_ICE_STEP_COUNT, 67 - goto_if_lt SootopolisCity_Gym_1F_EventScript_OpenFirstAndSecondStairs - setmetatile 8, 4, METATILE_SootopolisGym_Stairs, 0 - setmetatile 8, 5, METATILE_SootopolisGym_Stairs, 0 + goto_if_lt VAR_ICE_STEP_COUNT, 8, SootopolisCity_Gym_1F_EventScript_StopCheckingStairs @ All stairs ice + goto_if_lt VAR_ICE_STEP_COUNT, 28, SootopolisCity_Gym_1F_EventScript_OpenFirstStairs + goto_if_lt VAR_ICE_STEP_COUNT, 67, SootopolisCity_Gym_1F_EventScript_OpenFirstAndSecondStairs + setmetatile 8, 4, METATILE_SootopolisGym_Stairs, FALSE + setmetatile 8, 5, METATILE_SootopolisGym_Stairs, FALSE SootopolisCity_Gym_1F_EventScript_OpenFirstAndSecondStairs:: - setmetatile 8, 10, METATILE_SootopolisGym_Stairs, 0 - setmetatile 8, 11, METATILE_SootopolisGym_Stairs, 0 + setmetatile 8, 10, METATILE_SootopolisGym_Stairs, FALSE + setmetatile 8, 11, METATILE_SootopolisGym_Stairs, FALSE SootopolisCity_Gym_1F_EventScript_OpenFirstStairs:: - setmetatile 8, 15, METATILE_SootopolisGym_Stairs, 0 - setmetatile 8, 16, METATILE_SootopolisGym_Stairs, 0 + setmetatile 8, 15, METATILE_SootopolisGym_Stairs, FALSE + setmetatile 8, 16, METATILE_SootopolisGym_Stairs, FALSE SootopolisCity_Gym_1F_EventScript_StopCheckingStairs:: return @@ -85,8 +82,7 @@ SootopolisCity_Gym_1F_Movement_FallThroughIce: SootopolisCity_Gym_1F_EventScript_Juan:: trainerbattle_single TRAINER_JUAN_1, SootopolisCity_Gym_1F_Text_JuanIntro, SootopolisCity_Gym_1F_Text_JuanDefeat, SootopolisCity_Gym_1F_EventScript_JuanDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq SootopolisCity_Gym_1F_EventScript_JuanRematch + goto_if_eq VAR_RESULT, TRUE, SootopolisCity_Gym_1F_EventScript_JuanRematch goto_if_unset FLAG_RECEIVED_TM03, SootopolisCity_Gym_1F_EventScript_GiveWaterPulse2 goto_if_unset FLAG_BADGE06_GET, SootopolisCity_Gym_1F_EventScript_GoGetFortreeBadge msgbox SootopolisCity_Gym_1F_Text_JuanPostBattle, MSGBOX_DEFAULT @@ -121,16 +117,14 @@ SootopolisCity_Gym_1F_EventScript_JuanDefeated:: SootopolisCity_Gym_1F_EventScript_GiveWaterPulse:: giveitem ITEM_TM03 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_BagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox SootopolisCity_Gym_1F_Text_ExplainWaterPulse, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM03 return SootopolisCity_Gym_1F_EventScript_GiveWaterPulse2:: giveitem ITEM_TM03 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox SootopolisCity_Gym_1F_Text_ExplainWaterPulse, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM03 release diff --git a/data/maps/SootopolisCity_House1/scripts.inc b/data/maps/SootopolisCity_House1/scripts.inc index 1cedf7c579..40f22a9c1f 100644 --- a/data/maps/SootopolisCity_House1/scripts.inc +++ b/data/maps/SootopolisCity_House1/scripts.inc @@ -7,8 +7,7 @@ SootopolisCity_House1_EventScript_BrickBreakBlackBelt:: goto_if_set FLAG_RECEIVED_TM31, SootopolisCity_House1_EventScript_ReceivedBrickBreak msgbox SootopolisCity_House1_Text_DevelopedThisTM, MSGBOX_DEFAULT giveitem ITEM_TM31 - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM31 msgbox SootopolisCity_House1_Text_ExplainBrickBreak, MSGBOX_DEFAULT release @@ -23,7 +22,7 @@ SootopolisCity_House1_EventScript_Kecleon:: lock faceplayer waitse - playmoncry SPECIES_KECLEON, 0 + playmoncry SPECIES_KECLEON, CRY_MODE_NORMAL msgbox SootopolisCity_House1_Text_Kecleon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/SootopolisCity_House2/scripts.inc b/data/maps/SootopolisCity_House2/scripts.inc index a9c2ed255d..68cf96a906 100644 --- a/data/maps/SootopolisCity_House2/scripts.inc +++ b/data/maps/SootopolisCity_House2/scripts.inc @@ -5,10 +5,8 @@ SootopolisCity_House2_EventScript_ExpertF:: lock faceplayer msgbox SootopolisCity_House2_Text_DidYouKnowAboutMtPyreOrbs, MSGBOX_YESNO - compare VAR_RESULT, YES - call_if_eq SootopolisCity_House2_EventScript_KnowAboutOrbs - compare VAR_RESULT, NO - call_if_eq SootopolisCity_House2_EventScript_DontKnowAboutOrbs + call_if_eq VAR_RESULT, YES, SootopolisCity_House2_EventScript_KnowAboutOrbs + call_if_eq VAR_RESULT, NO, SootopolisCity_House2_EventScript_DontKnowAboutOrbs release end diff --git a/data/maps/SootopolisCity_House3/scripts.inc b/data/maps/SootopolisCity_House3/scripts.inc index 02546968b5..621738c4f1 100644 --- a/data/maps/SootopolisCity_House3/scripts.inc +++ b/data/maps/SootopolisCity_House3/scripts.inc @@ -5,8 +5,7 @@ SootopolisCity_House3_EventScript_Woman:: lock faceplayer msgbox SootopolisCity_House3_Text_JuanHasManyFansDoYou, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SootopolisCity_House3_EventScript_HaveFans + goto_if_eq VAR_RESULT, YES, SootopolisCity_House3_EventScript_HaveFans msgbox SootopolisCity_House3_Text_LonesomeTryWorkingHarder, MSGBOX_DEFAULT release end diff --git a/data/maps/SootopolisCity_House4/scripts.inc b/data/maps/SootopolisCity_House4/scripts.inc index a1102bdd9f..1bc2b62ea3 100644 --- a/data/maps/SootopolisCity_House4/scripts.inc +++ b/data/maps/SootopolisCity_House4/scripts.inc @@ -13,7 +13,7 @@ SootopolisCity_House4_EventScript_Azumarill:: lock faceplayer waitse - playmoncry SPECIES_AZUMARILL, 0 + playmoncry SPECIES_AZUMARILL, CRY_MODE_NORMAL msgbox SootopolisCity_House4_Text_Azumarill, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/SootopolisCity_House6/scripts.inc b/data/maps/SootopolisCity_House6/scripts.inc index be2dad11f2..35f7acc7b5 100644 --- a/data/maps/SootopolisCity_House6/scripts.inc +++ b/data/maps/SootopolisCity_House6/scripts.inc @@ -6,12 +6,10 @@ SootopolisCity_House6_EventScript_Woman:: faceplayer goto_if_set FLAG_RECEIVED_WAILMER_DOLL, SootopolisCity_House6_EventScript_ReceivedWailmerDoll msgbox SootopolisCity_House6_Text_FirstGuestInWhileTakeDoll, MSGBOX_YESNO - compare VAR_RESULT, NO - call_if_eq SootopolisCity_House6_EventScript_DeclineWailmerDoll + call_if_eq VAR_RESULT, NO, SootopolisCity_House6_EventScript_DeclineWailmerDoll msgbox SootopolisCity_House6_Text_TakeGoodCareOfIt, MSGBOX_DEFAULT givedecoration DECOR_WAILMER_DOLL - compare VAR_RESULT, FALSE - goto_if_eq SootopolisCity_House6_EventScript_NoRoomForWailmerDoll + goto_if_eq VAR_RESULT, FALSE, SootopolisCity_House6_EventScript_NoRoomForWailmerDoll setflag FLAG_RECEIVED_WAILMER_DOLL release end @@ -27,7 +25,7 @@ SootopolisCity_House6_EventScript_ReceivedWailmerDoll:: end SootopolisCity_House6_EventScript_NoRoomForWailmerDoll:: - bufferdecorationname 1, DECOR_WAILMER_DOLL + bufferdecorationname STR_VAR_2, DECOR_WAILMER_DOLL msgbox gText_NoRoomLeftForAnother, MSGBOX_DEFAULT msgbox SootopolisCity_House6_Text_IllHoldItForYou, MSGBOX_DEFAULT release diff --git a/data/maps/SootopolisCity_LotadAndSeedotHouse/scripts.inc b/data/maps/SootopolisCity_LotadAndSeedotHouse/scripts.inc index ab087696e8..52bdf3acee 100644 --- a/data/maps/SootopolisCity_LotadAndSeedotHouse/scripts.inc +++ b/data/maps/SootopolisCity_LotadAndSeedotHouse/scripts.inc @@ -9,15 +9,11 @@ SootopolisCity_LotadAndSeedotHouse_EventScript_SeedotBrother:: special ChoosePartyMon waitstate copyvar VAR_RESULT, VAR_0x8004 - compare VAR_RESULT, 255 - goto_if_eq SootopolisCity_LotadAndSeedotHouse_EventScript_CancelShowSeedot + goto_if_eq VAR_RESULT, PARTY_NOTHING_CHOSEN, SootopolisCity_LotadAndSeedotHouse_EventScript_CancelShowSeedot special CompareSeedotSize - compare VAR_RESULT, 1 - goto_if_eq SootopolisCity_LotadAndSeedotHouse_EventScript_NotSeedot - compare VAR_RESULT, 2 - goto_if_eq SootopolisCity_LotadAndSeedotHouse_EventScript_SmallSeedot - compare VAR_RESULT, 3 - goto_if_eq SootopolisCity_LotadAndSeedotHouse_EventScript_BigSeedot + goto_if_eq VAR_RESULT, 1, SootopolisCity_LotadAndSeedotHouse_EventScript_NotSeedot + goto_if_eq VAR_RESULT, 2, SootopolisCity_LotadAndSeedotHouse_EventScript_SmallSeedot + goto_if_eq VAR_RESULT, 3, SootopolisCity_LotadAndSeedotHouse_EventScript_BigSeedot release end @@ -39,8 +35,7 @@ SootopolisCity_LotadAndSeedotHouse_EventScript_SmallSeedot:: SootopolisCity_LotadAndSeedotHouse_EventScript_BigSeedot:: msgbox SootopolisCity_LotadAndSeedotHouse_Text_GoshMightBeBiggerThanLotad, MSGBOX_DEFAULT giveitem ITEM_ELIXIR - compare VAR_RESULT, FALSE - goto_if_eq SootopolisCity_LotadAndSeedotHouse_EventScript_NoRoomForElixir1 + goto_if_eq VAR_RESULT, FALSE, SootopolisCity_LotadAndSeedotHouse_EventScript_NoRoomForElixir1 closemessage release end @@ -58,15 +53,11 @@ SootopolisCity_LotadAndSeedotHouse_EventScript_LotadBrother:: special ChoosePartyMon waitstate copyvar VAR_RESULT, VAR_0x8004 - compare VAR_RESULT, 255 - goto_if_eq SootopolisCity_LotadAndSeedotHouse_EventScript_CancelShowLotad + goto_if_eq VAR_RESULT, PARTY_NOTHING_CHOSEN, SootopolisCity_LotadAndSeedotHouse_EventScript_CancelShowLotad special CompareLotadSize - compare VAR_RESULT, 1 - goto_if_eq SootopolisCity_LotadAndSeedotHouse_EventScript_NotLotad - compare VAR_RESULT, 2 - goto_if_eq SootopolisCity_LotadAndSeedotHouse_EventScript_SmallLotad - compare VAR_RESULT, 3 - goto_if_eq SootopolisCity_LotadAndSeedotHouse_EventScript_BigLotad + goto_if_eq VAR_RESULT, 1, SootopolisCity_LotadAndSeedotHouse_EventScript_NotLotad + goto_if_eq VAR_RESULT, 2, SootopolisCity_LotadAndSeedotHouse_EventScript_SmallLotad + goto_if_eq VAR_RESULT, 3, SootopolisCity_LotadAndSeedotHouse_EventScript_BigLotad release end @@ -88,8 +79,7 @@ SootopolisCity_LotadAndSeedotHouse_EventScript_SmallLotad:: SootopolisCity_LotadAndSeedotHouse_EventScript_BigLotad:: msgbox SootopolisCity_LotadAndSeedotHouse_Text_WowMightBeBiggerThanSeedot, MSGBOX_DEFAULT giveitem ITEM_ELIXIR - compare VAR_RESULT, FALSE - goto_if_eq SootopolisCity_LotadAndSeedotHouse_EventScript_NoRoomForElixir2 + goto_if_eq VAR_RESULT, FALSE, SootopolisCity_LotadAndSeedotHouse_EventScript_NoRoomForElixir2 closemessage release end diff --git a/data/maps/SootopolisCity_Mart/scripts.inc b/data/maps/SootopolisCity_Mart/scripts.inc index 0975abd2b0..618f78c524 100644 --- a/data/maps/SootopolisCity_Mart/scripts.inc +++ b/data/maps/SootopolisCity_Mart/scripts.inc @@ -20,7 +20,7 @@ SootopolisCity_Mart_Pokemart: .2byte ITEM_REVIVE .2byte ITEM_MAX_REPEL .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_SHADOW_MAIL .2byte ITEM_NONE release @@ -29,8 +29,7 @@ SootopolisCity_Mart_Pokemart: SootopolisCity_Mart_EventScript_FatMan:: lock faceplayer - compare VAR_SKY_PILLAR_STATE, 2 - goto_if_ge SootopolisCity_Mart_EventScript_FatManNoLegendaries + goto_if_ge VAR_SKY_PILLAR_STATE, 2, SootopolisCity_Mart_EventScript_FatManNoLegendaries goto_if_unset FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, SootopolisCity_Mart_EventScript_FatManNoLegendaries msgbox SootopolisCity_Mart_Text_TooScaryOutside, MSGBOX_DEFAULT release @@ -44,8 +43,7 @@ SootopolisCity_Mart_EventScript_FatManNoLegendaries:: SootopolisCity_Mart_EventScript_Gentleman:: lock faceplayer - compare VAR_SKY_PILLAR_STATE, 2 - goto_if_ge SootopolisCity_Mart_EventScript_GentlemanNoLegendaries + goto_if_ge VAR_SKY_PILLAR_STATE, 2, SootopolisCity_Mart_EventScript_GentlemanNoLegendaries goto_if_unset FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, SootopolisCity_Mart_EventScript_GentlemanNoLegendaries msgbox SootopolisCity_Mart_Text_DidSomethingAwaken, MSGBOX_DEFAULT release diff --git a/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc b/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc index 6b1bc0eb56..374adbfc66 100644 --- a/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc +++ b/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc @@ -7,10 +7,8 @@ SootopolisCity_MysteryEventsHouse_1F_MapScripts:: SootopolisCity_MysteryEventsHouse_1F_OnTransition: frontier_checkvisittrainer - compare VAR_RESULT, 0 - call_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_SetTrainerVisitingLayout - compare VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 0 - call_if_ne SootopolisCity_MysteryEventsHouse_1F_EventScript_MoveOldManToDoor + call_if_eq VAR_RESULT, 0, SootopolisCity_MysteryEventsHouse_1F_EventScript_SetTrainerVisitingLayout + call_if_ne VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 0, SootopolisCity_MysteryEventsHouse_1F_EventScript_MoveOldManToDoor end SootopolisCity_MysteryEventsHouse_1F_EventScript_SetTrainerVisitingLayout:: @@ -38,14 +36,11 @@ SootopolisCity_MysteryEventsHouse_1F_EventScript_OldManCommentOnBattle:: applymovement LOCALID_OLD_MAN, SootopolisCity_MysteryEventsHouse_1F_Movement_OldManWalkBehindPlayer waitmovement 0 copyobjectxytoperm LOCALID_OLD_MAN - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 - compare VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 1 - call_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_BattleWonComment - compare VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 2 - call_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_BattleLostComment - compare VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 3 - call_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_BattleTiedComment + call_if_eq VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 1, SootopolisCity_MysteryEventsHouse_1F_EventScript_BattleWonComment + call_if_eq VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 2, SootopolisCity_MysteryEventsHouse_1F_EventScript_BattleLostComment + call_if_eq VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 3, SootopolisCity_MysteryEventsHouse_1F_EventScript_BattleTiedComment special LoadPlayerParty setvar VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 0 releaseall @@ -69,17 +64,15 @@ SootopolisCity_MysteryEventsHouse_1F_Movement_PlayerExitStairs: SootopolisCity_MysteryEventsHouse_1F_Movement_OldManWalkBehindPlayer: walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end SootopolisCity_MysteryEventsHouse_1F_EventScript_OldMan:: lock faceplayer frontier_checkvisittrainer - compare VAR_RESULT, 1 - goto_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_InvalidVisitingTrainer - compare VAR_TEMP_1, 1 - goto_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_TrainerVisiting + goto_if_eq VAR_RESULT, 1, SootopolisCity_MysteryEventsHouse_1F_EventScript_InvalidVisitingTrainer + goto_if_eq VAR_TEMP_1, 1, SootopolisCity_MysteryEventsHouse_1F_EventScript_TrainerVisiting msgbox SootopolisCity_MysteryEventsHouse_1F_Text_OnlyAmusementWatchingBattles, MSGBOX_DEFAULT release end @@ -93,29 +86,22 @@ SootopolisCity_MysteryEventsHouse_1F_EventScript_TrainerVisiting:: special SavePlayerParty special BufferEReaderTrainerName msgbox SootopolisCity_MysteryEventsHouse_1F_Text_ChallengeVisitingTrainer, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_DeclineBattle + goto_if_eq VAR_RESULT, NO, SootopolisCity_MysteryEventsHouse_1F_EventScript_DeclineBattle call SootopolisCity_MysteryEventsHouse_1F_EventScript_ChooseParty - compare VAR_RESULT, 0 - goto_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_DeclineBattle + goto_if_eq VAR_RESULT, 0, SootopolisCity_MysteryEventsHouse_1F_EventScript_DeclineBattle msgbox SootopolisCity_MysteryEventsHouse_1F_Text_SaveProgressBeforeBattle, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_DeclineBattle + goto_if_eq VAR_RESULT, NO, SootopolisCity_MysteryEventsHouse_1F_EventScript_DeclineBattle special LoadPlayerParty call Common_EventScript_SaveGame - compare VAR_RESULT, FALSE - goto_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_DeclineBattle + goto_if_eq VAR_RESULT, FALSE, SootopolisCity_MysteryEventsHouse_1F_EventScript_DeclineBattle special SavePlayerParty special ReducePlayerPartyToSelectedMons msgbox SootopolisCity_MysteryEventsHouse_1F_Text_HopeToSeeGoodMatch, MSGBOX_DEFAULT closemessage - compare VAR_FACING, DIR_NORTH - call_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_EnterBasementNorth - compare VAR_FACING, DIR_EAST - call_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_EnterBasementEast - compare VAR_FACING, DIR_WEST - call_if_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_EnterBasementWest - warp MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F, 255, 3, 1 + call_if_eq VAR_FACING, DIR_NORTH, SootopolisCity_MysteryEventsHouse_1F_EventScript_EnterBasementNorth + call_if_eq VAR_FACING, DIR_EAST, SootopolisCity_MysteryEventsHouse_1F_EventScript_EnterBasementEast + call_if_eq VAR_FACING, DIR_WEST, SootopolisCity_MysteryEventsHouse_1F_EventScript_EnterBasementWest + warp MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F, 3, 1 waitstate release end @@ -171,12 +157,12 @@ SootopolisCity_MysteryEventsHouse_1F_Movement_PlayerEnterBasementWest: SootopolisCity_MysteryEventsHouse_1F_Movement_OldManMoveAsideLeft: walk_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end SootopolisCity_MysteryEventsHouse_1F_Movement_OldManMoveAsideRight: walk_right - walk_in_place_fastest_left + walk_in_place_faster_left step_end SootopolisCity_MysteryEventsHouse_1F_Text_OnlyAmusementWatchingBattles: diff --git a/data/maps/SootopolisCity_MysteryEventsHouse_B1F/scripts.inc b/data/maps/SootopolisCity_MysteryEventsHouse_B1F/scripts.inc index f0ebbf516f..533eb7cfa5 100644 --- a/data/maps/SootopolisCity_MysteryEventsHouse_B1F/scripts.inc +++ b/data/maps/SootopolisCity_MysteryEventsHouse_B1F/scripts.inc @@ -22,19 +22,16 @@ SootopolisCity_MysteryEventsHouse_B1F_EventScript_BattleVisitingTrainer:: setvar VAR_0x8005, 0 special DoSpecialTrainerBattle waitstate - compare VAR_RESULT, B_OUTCOME_DREW - call_if_eq SootopolisCity_MysteryEventsHouse_B1F_EventScript_BattleTie - compare VAR_RESULT, B_OUTCOME_WON - call_if_eq SootopolisCity_MysteryEventsHouse_B1F_EventScript_BattleWon - compare VAR_RESULT, B_OUTCOME_LOST - call_if_eq SootopolisCity_MysteryEventsHouse_B1F_EventScript_BattleLost + call_if_eq VAR_RESULT, B_OUTCOME_DREW, SootopolisCity_MysteryEventsHouse_B1F_EventScript_BattleTie + call_if_eq VAR_RESULT, B_OUTCOME_WON, SootopolisCity_MysteryEventsHouse_B1F_EventScript_BattleWon + call_if_eq VAR_RESULT, B_OUTCOME_LOST, SootopolisCity_MysteryEventsHouse_B1F_EventScript_BattleLost closemessage special HealPlayerParty applymovement OBJ_EVENT_ID_PLAYER, SootopolisCity_MysteryEventsHouse_B1F_Movement_PlayerExitBasement waitmovement 0 special LoadPlayerParty setvar VAR_TEMP_1, 1 - warp MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F, 255, 3, 1 + warp MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F, 3, 1 waitstate releaseall end diff --git a/data/maps/SootopolisCity_PokemonCenter_1F/scripts.inc b/data/maps/SootopolisCity_PokemonCenter_1F/scripts.inc index 9e017861b7..e1e13b35c8 100644 --- a/data/maps/SootopolisCity_PokemonCenter_1F/scripts.inc +++ b/data/maps/SootopolisCity_PokemonCenter_1F/scripts.inc @@ -20,8 +20,7 @@ SootopolisCity_PokemonCenter_1F_EventScript_Nurse:: SootopolisCity_PokemonCenter_1F_EventScript_Gentleman:: lock faceplayer - compare VAR_SKY_PILLAR_STATE, 2 - goto_if_ge SootopolisCity_PokemonCenter_1F_EventScript_GentlemanNoLegendaries + goto_if_ge VAR_SKY_PILLAR_STATE, 2, SootopolisCity_PokemonCenter_1F_EventScript_GentlemanNoLegendaries goto_if_unset FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, SootopolisCity_PokemonCenter_1F_EventScript_GentlemanNoLegendaries msgbox SootopolisCity_PokemonCenter_1F_Text_EveryoneTakenRefuge, MSGBOX_DEFAULT release @@ -35,8 +34,7 @@ SootopolisCity_PokemonCenter_1F_EventScript_GentlemanNoLegendaries:: SootopolisCity_PokemonCenter_1F_EventScript_Woman:: lock faceplayer - compare VAR_SKY_PILLAR_STATE, 2 - goto_if_ge SootopolisCity_PokemonCenter_1F_EventScript_WomanNoLegendaries + goto_if_ge VAR_SKY_PILLAR_STATE, 2, SootopolisCity_PokemonCenter_1F_EventScript_WomanNoLegendaries goto_if_unset FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, SootopolisCity_PokemonCenter_1F_EventScript_WomanNoLegendaries msgbox SootopolisCity_PokemonCenter_1F_Text_ArentPokemonOurFriends, MSGBOX_DEFAULT release diff --git a/data/maps/SouthernIsland_Exterior/scripts.inc b/data/maps/SouthernIsland_Exterior/scripts.inc index 3769f164ce..b393413fe3 100644 --- a/data/maps/SouthernIsland_Exterior/scripts.inc +++ b/data/maps/SouthernIsland_Exterior/scripts.inc @@ -13,17 +13,16 @@ SouthernIsland_Exterior_EventScript_Sailor:: lock faceplayer msgbox EventTicket_Text_SouthernIslandSailBack, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SouthernIsland_Exterior_EventScript_AsYouLike + goto_if_eq VAR_RESULT, NO, SouthernIsland_Exterior_EventScript_AsYouLike msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT closemessage - applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFastestDown + applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceFasterDown waitmovement 0 delay 30 hideobjectat LOCALID_SAILOR, MAP_SOUTHERN_ISLAND_EXTERIOR setvar VAR_0x8004, LOCALID_SS_TIDAL call Common_EventScript_FerryDepartIsland - warp MAP_LILYCOVE_CITY_HARBOR, 255, 8, 11 + warp MAP_LILYCOVE_CITY_HARBOR, 8, 11 waitstate release end @@ -49,7 +48,7 @@ Ferry_EventScript_DepartIslandBoardSouth: Ferry_EventScript_DepartIslandBoardWest: walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end SouthernIsland_Exterior_EventScript_Sign:: diff --git a/data/maps/SouthernIsland_Interior/scripts.inc b/data/maps/SouthernIsland_Interior/scripts.inc index 20ed1e58d5..8486739d93 100644 --- a/data/maps/SouthernIsland_Interior/scripts.inc +++ b/data/maps/SouthernIsland_Interior/scripts.inc @@ -11,16 +11,13 @@ SouthernIsland_Interior_OnResume: SouthernIsland_Interior_EventScript_TryRemoveLati:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject LOCALID_LATI return SouthernIsland_Interior_OnTransition: - compare VAR_ROAMER_POKEMON, 0 - call_if_eq SouthernIsland_Interior_EventScript_SetUpLatios - compare VAR_ROAMER_POKEMON, 0 - call_if_ne SouthernIsland_Interior_EventScript_SetUpLatias + call_if_eq VAR_ROAMER_POKEMON, 0, SouthernIsland_Interior_EventScript_SetUpLatios + call_if_ne VAR_ROAMER_POKEMON, 0, SouthernIsland_Interior_EventScript_SetUpLatias call SouthernIsland_Interior_EventScript_SetUpPlayerGfx end @@ -36,10 +33,8 @@ SouthernIsland_Interior_EventScript_SetUpLatias:: SouthernIsland_Interior_EventScript_SetUpPlayerGfx:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq SouthernIsland_Interior_EventScript_SetBrendanGfx - compare VAR_RESULT, FEMALE - goto_if_eq SouthernIsland_Interior_EventScript_SetMayGfx + goto_if_eq VAR_RESULT, MALE, SouthernIsland_Interior_EventScript_SetBrendanGfx + goto_if_eq VAR_RESULT, FEMALE, SouthernIsland_Interior_EventScript_SetMayGfx end SouthernIsland_Interior_EventScript_SetBrendanGfx:: @@ -52,7 +47,7 @@ SouthernIsland_Interior_EventScript_SetMayGfx:: SouthernIsland_Interior_EventScript_TryLatiEncounter:: lockall - setvar VAR_0x8008, 12 + setvar VAR_0x8008, 12 @ Player's Y coordinate. Not read goto SouthernIsland_Interior_EventScript_Lati end @@ -68,7 +63,7 @@ SouthernIsland_Interior_EventScript_Lati:: waitmovement 0 delay 50 waitse - playmoncry VAR_TEMP_4, 0 + playmoncry VAR_TEMP_4, CRY_MODE_NORMAL delay 30 waitmoncry addobject LOCALID_LATI @@ -79,21 +74,16 @@ SouthernIsland_Interior_EventScript_Lati:: delay 50 special RemoveCameraObject setvar VAR_LAST_TALKED, LOCALID_LATI - compare VAR_ROAMER_POKEMON, 0 - call_if_eq SouthernIsland_Interior_EventScript_SetLatiosBattleVars - compare VAR_ROAMER_POKEMON, 0 - call_if_ne SouthernIsland_Interior_EventScript_SetLatiasBattleVars + call_if_eq VAR_ROAMER_POKEMON, 0, SouthernIsland_Interior_EventScript_SetLatiosBattleVars + call_if_ne VAR_ROAMER_POKEMON, 0, SouthernIsland_Interior_EventScript_SetLatiasBattleVars setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLatiBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq SouthernIsland_Interior_EventScript_LatiDefeated - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq SouthernIsland_Interior_EventScript_RanFromLati - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq SouthernIsland_Interior_EventScript_RanFromLati + goto_if_eq VAR_RESULT, B_OUTCOME_WON, SouthernIsland_Interior_EventScript_LatiDefeated + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, SouthernIsland_Interior_EventScript_RanFromLati + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, SouthernIsland_Interior_EventScript_RanFromLati setflag FLAG_CAUGHT_LATIAS_OR_LATIOS releaseall end @@ -115,17 +105,11 @@ SouthernIsland_Interior_EventScript_Sign:: end SouthernIsland_Interior_EventScript_SetLatiosBattleVars:: - setvar VAR_0x8004, SPECIES_LATIOS - setvar VAR_0x8005, 50 @ level - setvar VAR_0x8006, ITEM_SOUL_DEW - special CreateEventLegalEnemyMon + seteventmon SPECIES_LATIOS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_EventScript_SetLatiasBattleVars:: - setvar VAR_0x8004, SPECIES_LATIAS - setvar VAR_0x8005, 50 @ level - setvar VAR_0x8006, ITEM_SOUL_DEW - special CreateEventLegalEnemyMon + seteventmon SPECIES_LATIAS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_Movement_CameraPanUp: @@ -145,7 +129,7 @@ SouthernIsland_Interior_Movement_CameraPanDown: walk_down walk_down walk_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end SouthernIsland_Interior_Movement_LatiApproach: diff --git a/data/maps/TerraCave_End/scripts.inc b/data/maps/TerraCave_End/scripts.inc index 2b35b3c513..8b2732d45e 100644 --- a/data/maps/TerraCave_End/scripts.inc +++ b/data/maps/TerraCave_End/scripts.inc @@ -11,8 +11,7 @@ TerraCave_End_OnResume: TerraCave_End_EventScript_TryRemoveGroudon:: specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_CAUGHT - goto_if_ne Common_EventScript_NopReturn + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn removeobject LOCALID_GROUDON return @@ -32,23 +31,20 @@ TerraCave_End_EventScript_Groudon:: applymovement LOCALID_GROUDON, TerraCave_End_Movement_GroudonApproach waitmovement 0 waitse - playmoncry SPECIES_GROUDON, 2 + playmoncry SPECIES_GROUDON, CRY_MODE_ENCOUNTER delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_GROUDON - setwildbattle SPECIES_GROUDON, 70, ITEM_NONE + setwildbattle SPECIES_GROUDON, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_CTRL_OBJ_DELETE setvar VAR_TEMP_1, 0 specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq TerraCave_End_EventScript_DefeatedGroudon - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq TerraCave_End_EventScript_RanFromGroudon - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq TerraCave_End_EventScript_RanFromGroudon + goto_if_eq VAR_RESULT, B_OUTCOME_WON, TerraCave_End_EventScript_DefeatedGroudon + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, TerraCave_End_EventScript_RanFromGroudon + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, TerraCave_End_EventScript_RanFromGroudon setvar VAR_SHOULD_END_ABNORMAL_WEATHER, 1 setflag FLAG_DEFEATED_GROUDON releaseall diff --git a/data/maps/TrainerHill_Elevator/scripts.inc b/data/maps/TrainerHill_Elevator/scripts.inc index f4ebc7ea91..bec1ffbff1 100644 --- a/data/maps/TrainerHill_Elevator/scripts.inc +++ b/data/maps/TrainerHill_Elevator/scripts.inc @@ -15,7 +15,7 @@ TrainerHill_Elevator_EventScript_ExitToRoof:: applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Elevator_Movement_PlayerExitElevatorToRoof waitmovement 0 releaseall - warp MAP_TRAINER_HILL_ROOF, 255, 15, 5 + warp MAP_TRAINER_HILL_ROOF, 15, 5 waitstate end @@ -26,8 +26,7 @@ TrainerHill_Elevator_EventScript_EnterElevator:: waitmovement 0 lockall msgbox TrainerHill_Elevator_Text_ReturnToReception, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq TrainerHill_Elevator_EventScript_ExitToRoof + goto_if_eq VAR_RESULT, NO, TrainerHill_Elevator_EventScript_ExitToRoof releaseall applymovement LOCALID_ATTENDANT, TrainerHill_Elevator_Movement_AttendantFaceDown waitmovement 0 @@ -37,7 +36,7 @@ TrainerHill_Elevator_EventScript_EnterElevator:: delay 25 applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Elevator_Movement_PlayerExitElevator waitmovement 0 - warp MAP_TRAINER_HILL_ENTRANCE, 255, 17, 8 + warp MAP_TRAINER_HILL_ENTRANCE, 17, 8 waitstate end diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc index af4a4c1235..f407ac839b 100644 --- a/data/maps/TrainerHill_Entrance/scripts.inc +++ b/data/maps/TrainerHill_Entrance/scripts.inc @@ -24,16 +24,14 @@ TrainerHill_Entrance_OnResume: trainerhill_resumetimer setvar VAR_TEMP_0, 0 trainerhill_getusingereader - compare VAR_RESULT, FALSE @ VAR_RESULT always FALSE here - goto_if_eq TrainerHill_Entrance_EventScript_TryFaceAttendant + goto_if_eq VAR_RESULT, FALSE, TrainerHill_Entrance_EventScript_TryFaceAttendant @ VAR_RESULT always FALSE here setobjectxy OBJ_EVENT_ID_PLAYER, 9, 6 applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant end TrainerHill_Entrance_EventScript_TryFaceAttendant:: trainerhill_getwon - compare VAR_RESULT, TRUE - goto_if_eq TrainerHill_Entrance_EventScript_PlayerDontFaceAttendant + goto_if_eq VAR_RESULT, TRUE, TrainerHill_Entrance_EventScript_PlayerDontFaceAttendant applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant end @@ -48,12 +46,11 @@ TrainerHill_Entrance_OnReturn: end TrainerHill_Entrance_OnLoad: - compare VAR_TEMP_D, 17 - call_if_eq TrainerHill_Entrance_EventScript_OpenCounterDoor + call_if_eq VAR_TEMP_D, 17, TrainerHill_Entrance_EventScript_OpenCounterDoor end TrainerHill_Entrance_EventScript_OpenCounterDoor:: - setmetatile 17, 10, METATILE_TrainerHill_GreenFloorTile, 0 + setmetatile 17, 10, METATILE_TrainerHill_GreenFloorTile, FALSE return TrainerHill_Entrance_OnFrame: @@ -67,7 +64,7 @@ TrainerHill_Entrance_EventScript_ExitElevator:: lockall applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerExitElevator waitmovement 0 - setmetatile 17, 10, METATILE_TrainerHill_CounterDoor, 1 + setmetatile 17, 10, METATILE_TrainerHill_CounterDoor, TRUE special DrawWholeMapView playse SE_CLICK waitse @@ -115,8 +112,7 @@ TrainerHill_Entrance_EventScript_Attendant:: lock faceplayer trainerhill_inchallenge - compare VAR_RESULT, FALSE - goto_if_eq TrainerHill_Entrance_EventScript_ThanksForPlaying + goto_if_eq VAR_RESULT, FALSE, TrainerHill_Entrance_EventScript_ThanksForPlaying msgbox TrainerHill_Entrance_Text_HopeYouGiveItYourBest, MSGBOX_DEFAULT goto TrainerHill_Entrance_EventScript_AttendantEnd @@ -132,11 +128,9 @@ TrainerHill_Entrance_EventScript_EntryTrigger:: goto_if_unset FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_Closed msgbox TrainerHill_Entrance_Text_WelcomeToTrainerHill, MSGBOX_DEFAULT trainerhill_getsaved - compare VAR_RESULT, FALSE - call_if_eq TrainerHill_Entrance_EventScript_SaveGame + call_if_eq VAR_RESULT, FALSE, TrainerHill_Entrance_EventScript_SaveGame trainerhill_allfloorsused - compare VAR_RESULT, TRUE - goto_if_eq TrainerHill_Entrance_EventScript_AllFloorsUsed + goto_if_eq VAR_RESULT, TRUE, TrainerHill_Entrance_EventScript_AllFloorsUsed msgbox TrainerHill_Entrance_Text_TrainersUpToFloorX, MSGBOX_DEFAULT goto TrainerHill_Entrance_EventScript_AskChallengeTrainers @@ -163,7 +157,7 @@ TrainerHill_Entrance_EventScript_ChooseChallenge:: switch VAR_RESULT case 4, TrainerHill_Entrance_EventScript_CancelEntry case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_CancelEntry - trainerhill_settag VAR_RESULT + trainerhill_setmode VAR_RESULT setvar VAR_TRAINER_HILL_IS_ACTIVE, 1 setvar VAR_TEMP_5, 0 special HealPlayerParty @@ -186,8 +180,7 @@ TrainerHill_Entrance_EventScript_SaveGame:: trainerhill_setsaved setvar VAR_TEMP_5, 1 call Common_EventScript_SaveGame - compare VAR_RESULT, FALSE - goto_if_eq TrainerHill_Entrance_EventScript_SaveFailed + goto_if_eq VAR_RESULT, FALSE, TrainerHill_Entrance_EventScript_SaveFailed trainerhill_setsaved return @@ -266,9 +259,9 @@ TrainerHill_Entrance_Pokemart_Basic: .2byte ITEM_PARALYZE_HEAL .2byte ITEM_AWAKENING .2byte ITEM_X_SPEED - .2byte ITEM_X_SPECIAL + .2byte ITEM_X_SP_ATK .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_DIRE_HIT .2byte ITEM_GUARD_SPEC .2byte ITEM_X_ACCURACY @@ -290,9 +283,9 @@ TrainerHill_Entrance_Pokemart_Expanded: .2byte ITEM_FULL_HEAL .2byte ITEM_REVIVE .2byte ITEM_X_SPEED - .2byte ITEM_X_SPECIAL + .2byte ITEM_X_SP_ATK .2byte ITEM_X_ATTACK - .2byte ITEM_X_DEFEND + .2byte ITEM_X_DEFENSE .2byte ITEM_DIRE_HIT .2byte ITEM_GUARD_SPEC .2byte ITEM_X_ACCURACY diff --git a/data/maps/Underwater_MarineCave/scripts.inc b/data/maps/Underwater_MarineCave/scripts.inc index cbd158e273..6c87628351 100644 --- a/data/maps/Underwater_MarineCave/scripts.inc +++ b/data/maps/Underwater_MarineCave/scripts.inc @@ -8,6 +8,6 @@ Underwater_MarineCave_OnTransition: end Underwater_MarineCave_OnResume: - setdivewarp MAP_MARINE_CAVE_ENTRANCE, 255, 10, 17 + setdivewarp MAP_MARINE_CAVE_ENTRANCE, 10, 17 end diff --git a/data/maps/Underwater_Route134/scripts.inc b/data/maps/Underwater_Route134/scripts.inc index 909b2f8b10..b5ab48e26a 100644 --- a/data/maps/Underwater_Route134/scripts.inc +++ b/data/maps/Underwater_Route134/scripts.inc @@ -3,6 +3,6 @@ Underwater_Route134_MapScripts:: .byte 0 Underwater_Route134_OnResume: - setdivewarp MAP_ROUTE134, 255, 60, 31 + setdivewarp MAP_ROUTE134, 60, 31 end diff --git a/data/maps/Underwater_SeafloorCavern/scripts.inc b/data/maps/Underwater_SeafloorCavern/scripts.inc index 2e0613c04c..7f1231feff 100644 --- a/data/maps/Underwater_SeafloorCavern/scripts.inc +++ b/data/maps/Underwater_SeafloorCavern/scripts.inc @@ -18,22 +18,22 @@ Underwater_SeafloorCavern_OnLoad: end Underwater_SeafloorCavern_EventScript_SetSubmarineGoneMetatiles:: - setmetatile 5, 3, METATILE_Underwater_RockWall, 1 - setmetatile 6, 3, METATILE_Underwater_RockWall, 1 - setmetatile 7, 3, METATILE_Underwater_RockWall, 1 - setmetatile 8, 3, METATILE_Underwater_RockWall, 1 - setmetatile 5, 4, METATILE_Underwater_FloorShadow, 0 - setmetatile 6, 4, METATILE_Underwater_FloorShadow, 0 - setmetatile 7, 4, METATILE_Underwater_FloorShadow, 0 - setmetatile 8, 4, METATILE_Underwater_FloorShadow, 0 - setmetatile 5, 5, METATILE_Underwater_FloorShadow, 0 - setmetatile 6, 5, METATILE_Underwater_FloorShadow, 0 - setmetatile 7, 5, METATILE_Underwater_FloorShadow, 0 - setmetatile 8, 5, METATILE_Underwater_FloorShadow, 0 + setmetatile 5, 3, METATILE_Underwater_RockWall, TRUE + setmetatile 6, 3, METATILE_Underwater_RockWall, TRUE + setmetatile 7, 3, METATILE_Underwater_RockWall, TRUE + setmetatile 8, 3, METATILE_Underwater_RockWall, TRUE + setmetatile 5, 4, METATILE_Underwater_FloorShadow, FALSE + setmetatile 6, 4, METATILE_Underwater_FloorShadow, FALSE + setmetatile 7, 4, METATILE_Underwater_FloorShadow, FALSE + setmetatile 8, 4, METATILE_Underwater_FloorShadow, FALSE + setmetatile 5, 5, METATILE_Underwater_FloorShadow, FALSE + setmetatile 6, 5, METATILE_Underwater_FloorShadow, FALSE + setmetatile 7, 5, METATILE_Underwater_FloorShadow, FALSE + setmetatile 8, 5, METATILE_Underwater_FloorShadow, FALSE return Underwater_SeafloorCavern_OnResume: - setdivewarp MAP_SEAFLOOR_CAVERN_ENTRANCE, 255, 10, 17 + setdivewarp MAP_SEAFLOOR_CAVERN_ENTRANCE, 10, 17 end Underwater_SeafloorCavern_EventScript_CheckStolenSub:: diff --git a/data/maps/Underwater_SealedChamber/scripts.inc b/data/maps/Underwater_SealedChamber/scripts.inc index 3d8aaf979f..f4f8d8ccb7 100644 --- a/data/maps/Underwater_SealedChamber/scripts.inc +++ b/data/maps/Underwater_SealedChamber/scripts.inc @@ -4,25 +4,21 @@ Underwater_SealedChamber_MapScripts:: Underwater_SealedChamber_OnDive: getplayerxy VAR_0x8004, VAR_0x8005 - compare VAR_0x8004, 12 - goto_if_ne Underwater_SealedChamber_EventScript_SurfaceRoute134 - compare VAR_0x8005, 44 - goto_if_ne Underwater_SealedChamber_EventScript_SurfaceRoute134 + goto_if_ne VAR_0x8004, 12, Underwater_SealedChamber_EventScript_SurfaceRoute134 + goto_if_ne VAR_0x8005, 44, Underwater_SealedChamber_EventScript_SurfaceRoute134 goto Underwater_SealedChamber_EventScript_SurfaceSealedChamber Underwater_SealedChamber_EventScript_SurfaceRoute134:: - setdivewarp MAP_ROUTE134, 255, 60, 31 + setdivewarp MAP_ROUTE134, 60, 31 end Underwater_SealedChamber_EventScript_SurfaceSealedChamber:: - setdivewarp MAP_SEALED_CHAMBER_OUTER_ROOM, 255, 10, 19 + setdivewarp MAP_SEALED_CHAMBER_OUTER_ROOM, 10, 19 end Underwater_SealedChamber_EventScript_Braille:: lockall - braillemessage Underwater_SealedChamber_Braille_GoUpHere - waitbuttonpress - closebraillemessage + braillemsgbox Underwater_SealedChamber_Braille_GoUpHere releaseall end diff --git a/data/maps/Underwater_SootopolisCity/scripts.inc b/data/maps/Underwater_SootopolisCity/scripts.inc index 4346c284fa..8bf30560ca 100644 --- a/data/maps/Underwater_SootopolisCity/scripts.inc +++ b/data/maps/Underwater_SootopolisCity/scripts.inc @@ -3,6 +3,6 @@ Underwater_SootopolisCity_MapScripts:: .byte 0 Underwater_SootopolisCity_OnResume: - setdivewarp MAP_SOOTOPOLIS_CITY, 255, 29, 53 + setdivewarp MAP_SOOTOPOLIS_CITY, 29, 53 end diff --git a/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc b/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc index 755e6d8be7..29008b7c0f 100644 --- a/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc +++ b/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc @@ -18,10 +18,8 @@ VerdanturfTown_BattleTentBattleRoom_OnTransition: VerdanturfTown_BattleTentBattleRoom_EventScript_SetPlayerGfx:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq VerdanturfTown_BattleTentBattleRoom_EventScript_SetPlayerGfxMale - compare VAR_RESULT, FEMALE - goto_if_eq VerdanturfTown_BattleTentBattleRoom_EventScript_SetPlayerGfxFemale + goto_if_eq VAR_RESULT, MALE, VerdanturfTown_BattleTentBattleRoom_EventScript_SetPlayerGfxMale + goto_if_eq VAR_RESULT, FEMALE, VerdanturfTown_BattleTentBattleRoom_EventScript_SetPlayerGfxFemale return VerdanturfTown_BattleTentBattleRoom_EventScript_SetPlayerGfxMale:: @@ -43,8 +41,7 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_EnterRoom:: applymovement LOCALID_PLAYER, VerdanturfTown_BattleTentBattleRoom_Movement_PlayerEnter waitmovement 0 frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 0 - goto_if_ne VerdanturfTown_BattleTentBattleRoom_EventScript_AskContinueChallenge + goto_if_ne VAR_RESULT, 0, VerdanturfTown_BattleTentBattleRoom_EventScript_AskContinueChallenge VerdanturfTown_BattleTentBattleRoom_EventScript_NextOpponentEnter:: tower_setopponent addobject LOCALID_OPPONENT @@ -59,7 +56,7 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_NextOpponentEnter:: VerdanturfTown_BattleTentBattleRoom_EventScript_WarpToLobbyLost:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST special LoadPlayerParty - warp MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY, 255, 6, 6 + warp MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY, 6, 6 waitstate VerdanturfTown_BattleTentBattleRoom_EventScript_DefeatedOpponent:: @@ -71,8 +68,8 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_DefeatedOpponent:: applymovement LOCALID_OPPONENT, VerdanturfTown_BattleTentBattleRoom_Movement_OpponentExit waitmovement 0 removeobject LOCALID_OPPONENT - applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFastestDown - applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox BattleFrontier_BattlePalaceBattleRoom_Text_LetMeRestoreYourMons, MSGBOX_DEFAULT special LoadPlayerParty @@ -84,10 +81,8 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_DefeatedOpponent:: VerdanturfTown_BattleTentBattleRoom_EventScript_AskContinueChallenge:: frontier_get FRONTIER_DATA_BATTLE_NUM - compare VAR_RESULT, 1 - call_if_eq VerdanturfTown_BattleTentBattleRoom_EventScript_ReadyFor2ndOpponent - compare VAR_RESULT, 2 - call_if_eq VerdanturfTown_BattleTentBattleRoom_EventScript_ReadyFor3rdOpponent + call_if_eq VAR_RESULT, 1, VerdanturfTown_BattleTentBattleRoom_EventScript_ReadyFor2ndOpponent + call_if_eq VAR_RESULT, 2, VerdanturfTown_BattleTentBattleRoom_EventScript_ReadyFor3rdOpponent multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, TRUE switch VAR_RESULT case 0, VerdanturfTown_BattleTentBattleRoom_EventScript_ContinueChallenge @@ -111,8 +106,8 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_AskRetireChallenge:: case MULTI_B_PRESSED, VerdanturfTown_BattleTentBattleRoom_EventScript_AskContinueChallenge VerdanturfTown_BattleTentBattleRoom_EventScript_ContinueChallenge:: - applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFastestRight - applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_ATTENDANT, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 closemessage goto VerdanturfTown_BattleTentBattleRoom_EventScript_NextOpponentEnter @@ -120,7 +115,7 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_ContinueChallenge:: VerdanturfTown_BattleTentBattleRoom_EventScript_WarpToLobbyWon:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_WON special LoadPlayerParty - warp MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY, 255, 6, 6 + warp MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY, 6, 6 waitstate VerdanturfTown_BattleTentBattleRoom_EventScript_PauseChallenge:: diff --git a/data/maps/VerdanturfTown_BattleTentCorridor/scripts.inc b/data/maps/VerdanturfTown_BattleTentCorridor/scripts.inc index c2e9dbd6a7..debf1b177f 100644 --- a/data/maps/VerdanturfTown_BattleTentCorridor/scripts.inc +++ b/data/maps/VerdanturfTown_BattleTentCorridor/scripts.inc @@ -22,7 +22,7 @@ VerdanturfTown_BattleTentCorridor_EventScript_EnterCorridor:: closedoor 2, 1 waitdooranim setvar VAR_0x8006, 0 - warp MAP_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM, 255, 6, 5 + warp MAP_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM, 6, 5 waitstate releaseall end diff --git a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc index dd8f0eaa45..a78a6a78ed 100644 --- a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc +++ b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc @@ -107,8 +107,7 @@ VerdanturfTown_BattleTentLobby_EventScript_Attendant:: lock faceplayer verdanturftent_getprize - compare VAR_RESULT, ITEM_NONE - goto_if_ne VerdanturfTown_BattleTentLobby_EventScript_PrizeWaiting + goto_if_ne VAR_RESULT, ITEM_NONE, VerdanturfTown_BattleTentLobby_EventScript_PrizeWaiting special SavePlayerParty msgbox VerdanturfTown_BattleTentLobby_Text_WelcomeToBattleTent, MSGBOX_DEFAULT VerdanturfTown_BattleTentLobby_EventScript_AskEnterChallenge:: @@ -126,8 +125,7 @@ VerdanturfTown_BattleTentLobby_EventScript_TryEnterChallenge:: setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES setvar VAR_RESULT, 2 frontier_checkineligible - compare VAR_0x8004, TRUE - goto_if_eq VerdanturfTown_BattleTentLobby_EventScript_NotEnoughValidMons + goto_if_eq VAR_0x8004, TRUE, VerdanturfTown_BattleTentLobby_EventScript_NotEnoughValidMons frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_TENT msgbox VerdanturfTown_BattleTentLobby_Text_SelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK @@ -135,8 +133,7 @@ VerdanturfTown_BattleTentLobby_EventScript_TryEnterChallenge:: setvar VAR_0x8005, FRONTIER_PARTY_SIZE special ChoosePartyForBattleFrontier waitstate - compare VAR_RESULT, 0 - goto_if_eq VerdanturfTown_BattleTentLobby_EventScript_LoadPartyCancelChallenge + goto_if_eq VAR_RESULT, 0, VerdanturfTown_BattleTentLobby_EventScript_LoadPartyCancelChallenge msgbox VerdanturfTown_BattleTentLobby_Text_SaveBeforeChallenge, MSGBOX_YESNO switch VAR_RESULT case NO, VerdanturfTown_BattleTentLobby_EventScript_LoadPartyCancelChallenge @@ -154,15 +151,14 @@ VerdanturfTown_BattleTentLobby_EventScript_SaveBeforeChallenge:: delay 2 call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 - compare VAR_RESULT, 0 - goto_if_eq VerdanturfTown_BattleTentLobby_EventScript_CancelChallengeSaveFailed + goto_if_eq VAR_RESULT, 0, VerdanturfTown_BattleTentLobby_EventScript_CancelChallengeSaveFailed VerdanturfTown_BattleTentLobby_EventScript_EnterChallenge:: special SavePlayerParty frontier_setpartyorder FRONTIER_PARTY_SIZE msgbox VerdanturfTown_BattleTentLobby_Text_NowFollowMe, MSGBOX_DEFAULT closemessage call VerdanturfTown_BattleTentLobby_EventScript_WalkToDoor - warp MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR, 255, 2, 7 + warp MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR, 2, 7 setvar VAR_TEMP_0, 0 waitstate end @@ -232,8 +228,7 @@ VerdanturfTown_BattleTentLobby_EventScript_AttractGiver:: goto_if_set FLAG_RECEIVED_TM45, VerdanturfTown_BattleTentLobby_EventScript_ReceivedAttract msgbox VerdanturfTown_BattleTentLobby_Text_AttractionRunsDeep, MSGBOX_DEFAULT giveitem ITEM_TM45 - compare VAR_RESULT, 0 - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_TM45 msgbox VerdanturfTown_BattleTentLobby_Text_AttractionMutual, MSGBOX_DEFAULT release diff --git a/data/maps/VerdanturfTown_FriendshipRatersHouse/scripts.inc b/data/maps/VerdanturfTown_FriendshipRatersHouse/scripts.inc index 9d0485a776..97e522471f 100644 --- a/data/maps/VerdanturfTown_FriendshipRatersHouse/scripts.inc +++ b/data/maps/VerdanturfTown_FriendshipRatersHouse/scripts.inc @@ -7,13 +7,13 @@ VerdanturfTown_FriendshipRatersHouse_EventScript_FriendshipRater:: msgbox VerdanturfTown_FriendshipRatersHouse_Text_SeeHowMuchPokemonLikesYou, MSGBOX_DEFAULT specialvar VAR_RESULT, GetLeadMonFriendshipScore switch VAR_RESULT - case 0, VerdanturfTown_FriendshipRatersHouse_EventScript_DetestsYou - case 1, VerdanturfTown_FriendshipRatersHouse_EventScript_VeryWary - case 2, VerdanturfTown_FriendshipRatersHouse_EventScript_NotUsedToYou - case 3, VerdanturfTown_FriendshipRatersHouse_EventScript_GettingUsedToYou - case 4, VerdanturfTown_FriendshipRatersHouse_EventScript_LikesYouQuiteALot - case 5, VerdanturfTown_FriendshipRatersHouse_EventScript_VeryHappy - case 6, VerdanturfTown_FriendshipRatersHouse_EventScript_AdoresYou + case FRIENDSHIP_NONE, VerdanturfTown_FriendshipRatersHouse_EventScript_DetestsYou + case FRIENDSHIP_1_TO_49, VerdanturfTown_FriendshipRatersHouse_EventScript_VeryWary + case FRIENDSHIP_50_TO_99, VerdanturfTown_FriendshipRatersHouse_EventScript_NotUsedToYou + case FRIENDSHIP_100_TO_149, VerdanturfTown_FriendshipRatersHouse_EventScript_GettingUsedToYou + case FRIENDSHIP_150_TO_199, VerdanturfTown_FriendshipRatersHouse_EventScript_LikesYouQuiteALot + case FRIENDSHIP_200_TO_254, VerdanturfTown_FriendshipRatersHouse_EventScript_VeryHappy + case FRIENDSHIP_MAX, VerdanturfTown_FriendshipRatersHouse_EventScript_AdoresYou release end @@ -56,7 +56,7 @@ VerdanturfTown_FriendshipRatersHouse_EventScript_Pikachu:: lock faceplayer waitse - playmoncry SPECIES_PIKACHU, 0 + playmoncry SPECIES_PIKACHU, CRY_MODE_NORMAL msgbox VerdanturfTown_FriendshipRatersHouse_Text_Pikachu, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/VerdanturfTown_Mart/scripts.inc b/data/maps/VerdanturfTown_Mart/scripts.inc index 7eb340df2a..c809d6703a 100644 --- a/data/maps/VerdanturfTown_Mart/scripts.inc +++ b/data/maps/VerdanturfTown_Mart/scripts.inc @@ -22,7 +22,7 @@ VerdanturfTown_Mart_Pokemart: .2byte ITEM_BURN_HEAL .2byte ITEM_ICE_HEAL .2byte ITEM_REPEL - .2byte ITEM_X_SPECIAL + .2byte ITEM_X_SP_ATK .2byte ITEM_FLUFFY_TAIL .2byte ITEM_NONE release diff --git a/data/maps/VictoryRoad_1F/scripts.inc b/data/maps/VictoryRoad_1F/scripts.inc index a194e61e0c..4bce6b4c1d 100644 --- a/data/maps/VictoryRoad_1F/scripts.inc +++ b/data/maps/VictoryRoad_1F/scripts.inc @@ -5,10 +5,8 @@ VictoryRoad_1F_MapScripts:: .byte 0 VictoryRoad_1F_OnTransition: - compare VAR_VICTORY_ROAD_1F_STATE, 1 - call_if_eq VictoryRoad_1F_EventScript_SetEntranceWallyPos1 - compare VAR_VICTORY_ROAD_1F_STATE, 2 - call_if_eq VictoryRoad_1F_EventScript_SetEntranceWallyPos2 + call_if_eq VAR_VICTORY_ROAD_1F_STATE, 1, VictoryRoad_1F_EventScript_SetEntranceWallyPos1 + call_if_eq VAR_VICTORY_ROAD_1F_STATE, 2, VictoryRoad_1F_EventScript_SetEntranceWallyPos2 end VictoryRoad_1F_EventScript_SetEntranceWallyPos1:: @@ -40,7 +38,7 @@ VictoryRoad_1F_EventScript_WallyBattleTrigger2:: end VictoryRoad_1F_EventScript_WallyEntranceBattle:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestDown + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown waitmovement 0 msgbox VictoryRoad_1F_Text_WallyNotGoingToLoseAnymore, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_WALLY_VR_1, VictoryRoad_1F_Text_WallyEntranceDefeat @@ -84,12 +82,11 @@ VictoryRoad_1F_EventScript_EntranceWally:: msgbox VictoryRoad_1F_Text_WallyPostEntranceBattle, MSGBOX_NPC end -@ This Wally appears and remains at the exit after the Hall of Fame is entered +@ This Wally appears and remains at the exit after the Hall of Fame is entered VictoryRoad_1F_EventScript_ExitWally:: trainerbattle_single TRAINER_WALLY_VR_2, VictoryRoad_1F_Text_WallyIntro, VictoryRoad_1F_Text_WallyDefeat specialvar VAR_RESULT, ShouldTryRematchBattle - compare VAR_RESULT, TRUE - goto_if_eq VictoryRoad_1F_EventScript_RematchWally + goto_if_eq VAR_RESULT, TRUE, VictoryRoad_1F_EventScript_RematchWally msgbox VictoryRoad_1F_Text_WallyPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/mb_berry_fix.gba b/data/mb_berry_fix.gba new file mode 100755 index 0000000000..0afff07f5d Binary files /dev/null and b/data/mb_berry_fix.gba differ diff --git a/data/pokemon_colosseum.mb b/data/mb_colosseum.gba similarity index 100% rename from data/pokemon_colosseum.mb rename to data/mb_colosseum.gba diff --git a/data/unknown_serial_data.bin b/data/mb_ereader.gba similarity index 100% rename from data/unknown_serial_data.bin rename to data/mb_ereader.gba diff --git a/data/multiboot_berry_glitch_fix.s b/data/multiboot_berry_glitch_fix.s index 7d65c0d4de..d0d54d5502 100644 --- a/data/multiboot_berry_glitch_fix.s +++ b/data/multiboot_berry_glitch_fix.s @@ -1,5 +1,5 @@ .section .rodata gMultiBootProgram_BerryGlitchFix_Start:: - .incbin "berry_fix/berry_fix.gba" + .incbin "data/mb_berry_fix.gba" gMultiBootProgram_BerryGlitchFix_End:: diff --git a/data/multiboot_ereader.s b/data/multiboot_ereader.s new file mode 100644 index 0000000000..ab97f72799 --- /dev/null +++ b/data/multiboot_ereader.s @@ -0,0 +1,6 @@ + .section .rodata + + .align 2 +gMultiBootProgram_EReader_Start:: + .incbin "data/mb_ereader.gba" +gMultiBootProgram_EReader_End:: diff --git a/data/multiboot_pokemon_colosseum.s b/data/multiboot_pokemon_colosseum.s index 179f8a0671..a5f894908a 100644 --- a/data/multiboot_pokemon_colosseum.s +++ b/data/multiboot_pokemon_colosseum.s @@ -1,5 +1,5 @@ .section .rodata gMultiBootProgram_PokemonColosseum_Start:: - .incbin "data/pokemon_colosseum.mb" + .incbin "data/mb_colosseum.gba" gMultiBootProgram_PokemonColosseum_End:: diff --git a/data/mystery_event.s b/data/mystery_event.s deleted file mode 100644 index d707731b62..0000000000 --- a/data/mystery_event.s +++ /dev/null @@ -1,25 +0,0 @@ -#include "constants/global.h" -#include "constants/flags.h" -#include "constants/items.h" -#include "constants/map_scripts.h" -#include "constants/mevent.h" -#include "constants/moves.h" -#include "constants/region_map_sections.h" -#include "constants/songs.h" -#include "constants/species.h" -#include "constants/vars.h" - .include "asm/macros.inc" - .include "asm/macros/event.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 - .include "data/scripts/mevent_stamp_card.inc" - .include "data/scripts/mevent_pichu.inc" - .include "data/scripts/mevent_trainer.inc" - .include "data/scripts/mevent_battle_card.inc" - .include "data/scripts/mevent_aurora_ticket.inc" - .include "data/scripts/mevent_mystic_ticket.inc" - .include "data/scripts/mevent_altering_cave.inc" - .include "data/scripts/mevent_old_sea_map.inc" diff --git a/data/mystery_gift.s b/data/mystery_gift.s new file mode 100644 index 0000000000..86202b95f7 --- /dev/null +++ b/data/mystery_gift.s @@ -0,0 +1,26 @@ +#include "constants/global.h" +#include "constants/flags.h" +#include "constants/items.h" +#include "constants/map_scripts.h" +#include "constants/mystery_gift.h" +#include "constants/moves.h" +#include "constants/region_map_sections.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "constants/vars.h" +#include "constants/wild_encounter.h" + .include "asm/macros.inc" + .include "asm/macros/event.inc" + .include "constants/constants.inc" + + .section .rodata + + .align 2 + .include "data/scripts/gift_stamp_card.inc" + .include "data/scripts/gift_pichu.inc" + .include "data/scripts/gift_trainer.inc" + .include "data/scripts/gift_battle_card.inc" + .include "data/scripts/gift_aurora_ticket.inc" + .include "data/scripts/gift_mystic_ticket.inc" + .include "data/scripts/gift_altering_cave.inc" + .include "data/scripts/gift_old_sea_map.inc" diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index dcc0da9f7f..51b7f966e4 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -13,12 +13,12 @@ gScriptCmdTable:: .4byte ScrCmd_gotostd_if @ 0x0a .4byte ScrCmd_callstd_if @ 0x0b .4byte ScrCmd_returnram @ 0x0c - .4byte ScrCmd_killscript @ 0x0d + .4byte ScrCmd_endram @ 0x0d .4byte ScrCmd_setmysteryeventstatus @ 0x0e .4byte ScrCmd_loadword @ 0x0f .4byte ScrCmd_loadbyte @ 0x10 - .4byte ScrCmd_writebytetoaddr @ 0x11 - .4byte ScrCmd_loadbytefromaddr @ 0x12 + .4byte ScrCmd_setptr @ 0x11 + .4byte ScrCmd_loadbytefromptr @ 0x12 .4byte ScrCmd_setptrbyte @ 0x13 .4byte ScrCmd_copylocal @ 0x14 .4byte ScrCmd_copybyte @ 0x15 @@ -29,10 +29,10 @@ gScriptCmdTable:: .4byte ScrCmd_setorcopyvar @ 0x1a .4byte ScrCmd_compare_local_to_local @ 0x1b .4byte ScrCmd_compare_local_to_value @ 0x1c - .4byte ScrCmd_compare_local_to_addr @ 0x1d - .4byte ScrCmd_compare_addr_to_local @ 0x1e - .4byte ScrCmd_compare_addr_to_value @ 0x1f - .4byte ScrCmd_compare_addr_to_addr @ 0x20 + .4byte ScrCmd_compare_local_to_ptr @ 0x1d + .4byte ScrCmd_compare_ptr_to_local @ 0x1e + .4byte ScrCmd_compare_ptr_to_value @ 0x1f + .4byte ScrCmd_compare_ptr_to_ptr @ 0x20 .4byte ScrCmd_compare_var_to_value @ 0x21 .4byte ScrCmd_compare_var_to_var @ 0x22 .4byte ScrCmd_callnative @ 0x23 @@ -80,16 +80,16 @@ gScriptCmdTable:: .4byte ScrCmd_checkdecor @ 0x4d .4byte ScrCmd_checkdecorspace @ 0x4e .4byte ScrCmd_applymovement @ 0x4f - .4byte ScrCmd_applymovement_at @ 0x50 + .4byte ScrCmd_applymovementat @ 0x50 .4byte ScrCmd_waitmovement @ 0x51 - .4byte ScrCmd_waitmovement_at @ 0x52 + .4byte ScrCmd_waitmovementat @ 0x52 .4byte ScrCmd_removeobject @ 0x53 - .4byte ScrCmd_removeobject_at @ 0x54 + .4byte ScrCmd_removeobjectat @ 0x54 .4byte ScrCmd_addobject @ 0x55 - .4byte ScrCmd_addobject_at @ 0x56 + .4byte ScrCmd_addobjectat @ 0x56 .4byte ScrCmd_setobjectxy @ 0x57 - .4byte ScrCmd_showobject_at @ 0x58 - .4byte ScrCmd_hideobject_at @ 0x59 + .4byte ScrCmd_showobjectat @ 0x58 + .4byte ScrCmd_hideobjectat @ 0x59 .4byte ScrCmd_faceplayer @ 0x5a .4byte ScrCmd_turnobject @ 0x5b .4byte ScrCmd_trainerbattle @ 0x5c @@ -150,14 +150,14 @@ gScriptCmdTable:: .4byte ScrCmd_showmoneybox @ 0x93 .4byte ScrCmd_hidemoneybox @ 0x94 .4byte ScrCmd_updatemoneybox @ 0x95 - .4byte ScrCmd_getpricereduction @ 0x96 + .4byte ScrCmd_getpokenewsactive @ 0x96 .4byte ScrCmd_fadescreen @ 0x97 .4byte ScrCmd_fadescreenspeed @ 0x98 - .4byte ScrCmd_setflashradius @ 0x99 + .4byte ScrCmd_setflashlevel @ 0x99 .4byte ScrCmd_animateflash @ 0x9a .4byte ScrCmd_messageautoscroll @ 0x9b .4byte ScrCmd_dofieldeffect @ 0x9c - .4byte ScrCmd_setfieldeffectarg @ 0x9d + .4byte ScrCmd_setfieldeffectargument @ 0x9d .4byte ScrCmd_waitfieldeffect @ 0x9e .4byte ScrCmd_setrespawn @ 0x9f .4byte ScrCmd_checkplayergender @ 0xa0 @@ -168,8 +168,8 @@ gScriptCmdTable:: .4byte ScrCmd_doweather @ 0xa5 .4byte ScrCmd_setstepcallback @ 0xa6 .4byte ScrCmd_setmaplayoutindex @ 0xa7 - .4byte ScrCmd_setobjectpriority @ 0xa8 - .4byte ScrCmd_resetobjectpriority @ 0xa9 + .4byte ScrCmd_setobjectsubpriority @ 0xa8 + .4byte ScrCmd_resetobjectsubpriority @ 0xa9 .4byte ScrCmd_createvobject @ 0xaa .4byte ScrCmd_turnvobject @ 0xab .4byte ScrCmd_opendoor @ 0xac @@ -190,7 +190,7 @@ gScriptCmdTable:: .4byte ScrCmd_vgoto_if @ 0xbb .4byte ScrCmd_vcall_if @ 0xbc .4byte ScrCmd_vmessage @ 0xbd - .4byte ScrCmd_vloadword @ 0xbe + .4byte ScrCmd_vbuffermessage @ 0xbe .4byte ScrCmd_vbufferstring @ 0xbf .4byte ScrCmd_showcoinsbox @ 0xc0 .4byte ScrCmd_hidecoinsbox @ 0xc1 @@ -207,7 +207,7 @@ gScriptCmdTable:: .4byte ScrCmd_nop1 @ 0xcc .4byte ScrCmd_setmoneventlegal @ 0xcd .4byte ScrCmd_checkmoneventlegal @ 0xce - .4byte ScrCmd_gotoram @ 0xcf + .4byte ScrCmd_trywondercardscript @ 0xcf .4byte ScrCmd_nop1 @ 0xd0 .4byte ScrCmd_warpspinenter @ 0xd1 .4byte ScrCmd_setmonmetlocation @ 0xd2 @@ -224,8 +224,8 @@ gScriptCmdTable:: .4byte ScrCmd_buffertrainerclassname @ 0xdd .4byte ScrCmd_buffertrainername @ 0xde .4byte ScrCmd_pokenavcall @ 0xdf - .4byte ScrCmd_warpsootopolislegend @ 0xe0 - .4byte ScrCmd_buffercontesttype @ 0xe1 + .4byte ScrCmd_warpwhitefade @ 0xe0 + .4byte ScrCmd_buffercontestname @ 0xe1 .4byte ScrCmd_bufferitemnameplural @ 0xe2 gScriptCmdTableEnd:: diff --git a/data/scripts/abnormal_weather.inc b/data/scripts/abnormal_weather.inc index 9af24c45d5..c5b03a9704 100644 --- a/data/scripts/abnormal_weather.inc +++ b/data/scripts/abnormal_weather.inc @@ -1,161 +1,161 @@ AbnormalWeather_EventScript_PlaceTilesRoute114North:: - setmetatile 7, 3, METATILE_Fallarbor_RedCaveEntrance_Top, 1 - setmetatile 7, 4, METATILE_Fallarbor_RedCaveEntrance_Bottom, 0 + setmetatile 7, 3, METATILE_Fallarbor_RedCaveEntrance_Top, TRUE + setmetatile 7, 4, METATILE_Fallarbor_RedCaveEntrance_Bottom, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute114South:: - setmetatile 6, 45, METATILE_Fallarbor_BrownCaveEntrance_Top, 1 - setmetatile 6, 46, METATILE_Fallarbor_BrownCaveEntrance_Bottom, 0 + setmetatile 6, 45, METATILE_Fallarbor_BrownCaveEntrance_Top, TRUE + setmetatile 6, 46, METATILE_Fallarbor_BrownCaveEntrance_Bottom, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute115West:: - setmetatile 21, 5, METATILE_Fallarbor_BrownCaveEntrance_Top, 1 - setmetatile 21, 6, METATILE_Fallarbor_BrownCaveEntrance_Bottom, 0 + setmetatile 21, 5, METATILE_Fallarbor_BrownCaveEntrance_Top, TRUE + setmetatile 21, 6, METATILE_Fallarbor_BrownCaveEntrance_Bottom, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute115East:: - setmetatile 36, 9, METATILE_Fallarbor_BrownCaveEntrance_Top, 1 - setmetatile 36, 10, METATILE_Fallarbor_BrownCaveEntrance_Bottom, 0 + setmetatile 36, 9, METATILE_Fallarbor_BrownCaveEntrance_Top, TRUE + setmetatile 36, 10, METATILE_Fallarbor_BrownCaveEntrance_Bottom, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute116North:: - setmetatile 59, 12, METATILE_General_CaveEntrance_Top, 1 - setmetatile 59, 13, METATILE_General_CaveEntrance_Bottom, 0 + setmetatile 59, 12, METATILE_General_CaveEntrance_Top, TRUE + setmetatile 59, 13, METATILE_General_CaveEntrance_Bottom, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute116South:: - setmetatile 79, 5, METATILE_General_CaveEntrance_Top, 1 - setmetatile 79, 6, METATILE_General_CaveEntrance_Bottom, 0 + setmetatile 79, 5, METATILE_General_CaveEntrance_Top, TRUE + setmetatile 79, 6, METATILE_General_CaveEntrance_Bottom, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute118East:: - setmetatile 42, 5, METATILE_General_CaveEntrance_Top, 1 - setmetatile 42, 6, METATILE_General_CaveEntrance_Bottom, 0 + setmetatile 42, 5, METATILE_General_CaveEntrance_Top, TRUE + setmetatile 42, 6, METATILE_General_CaveEntrance_Bottom, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute118West:: - setmetatile 9, 5, METATILE_General_CaveEntrance_Top, 1 - setmetatile 9, 6, METATILE_General_CaveEntrance_Bottom, 0 + setmetatile 9, 5, METATILE_General_CaveEntrance_Top, TRUE + setmetatile 9, 6, METATILE_General_CaveEntrance_Bottom, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute105North:: - setmetatile 10, 28, METATILE_General_RoughWater, 0 - setmetatile 11, 28, METATILE_General_RoughWater, 0 - setmetatile 9, 29, METATILE_General_RoughWater, 0 - setmetatile 10, 29, METATILE_General_RoughDeepWater, 0 - setmetatile 11, 29, METATILE_General_RoughDeepWater, 0 - setmetatile 12, 29, METATILE_General_RoughWater, 0 - setmetatile 9, 30, METATILE_General_RoughWater, 0 - setmetatile 10, 30, METATILE_General_RoughDeepWater, 0 - setmetatile 11, 30, METATILE_General_RoughDeepWater, 0 - setmetatile 12, 30, METATILE_General_RoughWater, 0 - setmetatile 10, 31, METATILE_General_RoughWater, 0 - setmetatile 11, 31, METATILE_General_RoughWater, 0 + setmetatile 10, 28, METATILE_General_RoughWater, FALSE + setmetatile 11, 28, METATILE_General_RoughWater, FALSE + setmetatile 9, 29, METATILE_General_RoughWater, FALSE + setmetatile 10, 29, METATILE_General_RoughDeepWater, FALSE + setmetatile 11, 29, METATILE_General_RoughDeepWater, FALSE + setmetatile 12, 29, METATILE_General_RoughWater, FALSE + setmetatile 9, 30, METATILE_General_RoughWater, FALSE + setmetatile 10, 30, METATILE_General_RoughDeepWater, FALSE + setmetatile 11, 30, METATILE_General_RoughDeepWater, FALSE + setmetatile 12, 30, METATILE_General_RoughWater, FALSE + setmetatile 10, 31, METATILE_General_RoughWater, FALSE + setmetatile 11, 31, METATILE_General_RoughWater, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute105South:: - setmetatile 20, 53, METATILE_General_RoughWater, 0 - setmetatile 21, 53, METATILE_General_RoughWater, 0 - setmetatile 19, 54, METATILE_General_RoughWater, 0 - setmetatile 20, 54, METATILE_General_RoughDeepWater, 0 - setmetatile 21, 54, METATILE_General_RoughDeepWater, 0 - setmetatile 22, 54, METATILE_General_RoughWater, 0 - setmetatile 19, 55, METATILE_General_RoughWater, 0 - setmetatile 20, 55, METATILE_General_RoughDeepWater, 0 - setmetatile 21, 55, METATILE_General_RoughDeepWater, 0 - setmetatile 22, 55, METATILE_General_RoughWater, 0 - setmetatile 20, 56, METATILE_General_RoughWater, 0 - setmetatile 21, 56, METATILE_General_RoughWater, 0 + setmetatile 20, 53, METATILE_General_RoughWater, FALSE + setmetatile 21, 53, METATILE_General_RoughWater, FALSE + setmetatile 19, 54, METATILE_General_RoughWater, FALSE + setmetatile 20, 54, METATILE_General_RoughDeepWater, FALSE + setmetatile 21, 54, METATILE_General_RoughDeepWater, FALSE + setmetatile 22, 54, METATILE_General_RoughWater, FALSE + setmetatile 19, 55, METATILE_General_RoughWater, FALSE + setmetatile 20, 55, METATILE_General_RoughDeepWater, FALSE + setmetatile 21, 55, METATILE_General_RoughDeepWater, FALSE + setmetatile 22, 55, METATILE_General_RoughWater, FALSE + setmetatile 20, 56, METATILE_General_RoughWater, FALSE + setmetatile 21, 56, METATILE_General_RoughWater, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute125West:: - setmetatile 8, 16, METATILE_General_RoughWater, 0 - setmetatile 9, 16, METATILE_General_RoughWater, 0 - setmetatile 7, 17, METATILE_General_RoughWater, 0 - setmetatile 8, 17, METATILE_General_RoughDeepWater, 0 - setmetatile 9, 17, METATILE_General_RoughDeepWater, 0 - setmetatile 10, 17, METATILE_General_RoughWater, 0 - setmetatile 7, 18, METATILE_General_RoughWater, 0 - setmetatile 8, 18, METATILE_General_RoughDeepWater, 0 - setmetatile 9, 18, METATILE_General_RoughDeepWater, 0 - setmetatile 10, 18, METATILE_General_RoughWater, 0 - setmetatile 8, 19, METATILE_General_RoughWater, 0 - setmetatile 9, 19, METATILE_General_RoughWater, 0 + setmetatile 8, 16, METATILE_General_RoughWater, FALSE + setmetatile 9, 16, METATILE_General_RoughWater, FALSE + setmetatile 7, 17, METATILE_General_RoughWater, FALSE + setmetatile 8, 17, METATILE_General_RoughDeepWater, FALSE + setmetatile 9, 17, METATILE_General_RoughDeepWater, FALSE + setmetatile 10, 17, METATILE_General_RoughWater, FALSE + setmetatile 7, 18, METATILE_General_RoughWater, FALSE + setmetatile 8, 18, METATILE_General_RoughDeepWater, FALSE + setmetatile 9, 18, METATILE_General_RoughDeepWater, FALSE + setmetatile 10, 18, METATILE_General_RoughWater, FALSE + setmetatile 8, 19, METATILE_General_RoughWater, FALSE + setmetatile 9, 19, METATILE_General_RoughWater, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute125East:: - setmetatile 53, 18, METATILE_General_RoughWater, 0 - setmetatile 54, 18, METATILE_General_RoughWater, 0 - setmetatile 52, 19, METATILE_General_RoughWater, 0 - setmetatile 53, 19, METATILE_General_RoughDeepWater, 0 - setmetatile 54, 19, METATILE_General_RoughDeepWater, 0 - setmetatile 55, 19, METATILE_General_RoughWater, 0 - setmetatile 52, 20, METATILE_General_RoughWater, 0 - setmetatile 53, 20, METATILE_General_RoughDeepWater, 0 - setmetatile 54, 20, METATILE_General_RoughDeepWater, 0 - setmetatile 55, 20, METATILE_General_RoughWater, 0 - setmetatile 53, 21, METATILE_General_RoughWater, 0 - setmetatile 54, 21, METATILE_General_RoughWater, 0 + setmetatile 53, 18, METATILE_General_RoughWater, FALSE + setmetatile 54, 18, METATILE_General_RoughWater, FALSE + setmetatile 52, 19, METATILE_General_RoughWater, FALSE + setmetatile 53, 19, METATILE_General_RoughDeepWater, FALSE + setmetatile 54, 19, METATILE_General_RoughDeepWater, FALSE + setmetatile 55, 19, METATILE_General_RoughWater, FALSE + setmetatile 52, 20, METATILE_General_RoughWater, FALSE + setmetatile 53, 20, METATILE_General_RoughDeepWater, FALSE + setmetatile 54, 20, METATILE_General_RoughDeepWater, FALSE + setmetatile 55, 20, METATILE_General_RoughWater, FALSE + setmetatile 53, 21, METATILE_General_RoughWater, FALSE + setmetatile 54, 21, METATILE_General_RoughWater, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute127North:: - setmetatile 57, 9, METATILE_General_RoughWater, 0 - setmetatile 58, 9, METATILE_General_RoughWater, 0 - setmetatile 56, 10, METATILE_General_RoughWater, 0 - setmetatile 57, 10, METATILE_General_RoughDeepWater, 0 - setmetatile 58, 10, METATILE_General_RoughDeepWater, 0 - setmetatile 59, 10, METATILE_General_RoughWater, 0 - setmetatile 56, 11, METATILE_General_RoughWater, 0 - setmetatile 57, 11, METATILE_General_RoughDeepWater, 0 - setmetatile 58, 11, METATILE_General_RoughDeepWater, 0 - setmetatile 59, 11, METATILE_General_RoughWater, 0 - setmetatile 57, 12, METATILE_General_RoughWater, 0 - setmetatile 58, 12, METATILE_General_RoughWater, 0 + setmetatile 57, 9, METATILE_General_RoughWater, FALSE + setmetatile 58, 9, METATILE_General_RoughWater, FALSE + setmetatile 56, 10, METATILE_General_RoughWater, FALSE + setmetatile 57, 10, METATILE_General_RoughDeepWater, FALSE + setmetatile 58, 10, METATILE_General_RoughDeepWater, FALSE + setmetatile 59, 10, METATILE_General_RoughWater, FALSE + setmetatile 56, 11, METATILE_General_RoughWater, FALSE + setmetatile 57, 11, METATILE_General_RoughDeepWater, FALSE + setmetatile 58, 11, METATILE_General_RoughDeepWater, FALSE + setmetatile 59, 11, METATILE_General_RoughWater, FALSE + setmetatile 57, 12, METATILE_General_RoughWater, FALSE + setmetatile 58, 12, METATILE_General_RoughWater, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute127South:: - setmetatile 61, 30, METATILE_General_RoughWater, 0 - setmetatile 62, 30, METATILE_General_RoughWater, 0 - setmetatile 60, 31, METATILE_General_RoughWater, 0 - setmetatile 61, 31, METATILE_General_RoughDeepWater, 0 - setmetatile 62, 31, METATILE_General_RoughDeepWater, 0 - setmetatile 63, 31, METATILE_General_RoughWater, 0 - setmetatile 60, 32, METATILE_General_RoughWater, 0 - setmetatile 61, 32, METATILE_General_RoughDeepWater, 0 - setmetatile 62, 32, METATILE_General_RoughDeepWater, 0 - setmetatile 63, 32, METATILE_General_RoughWater, 0 - setmetatile 61, 33, METATILE_General_RoughWater, 0 - setmetatile 62, 33, METATILE_General_RoughWater, 0 + setmetatile 61, 30, METATILE_General_RoughWater, FALSE + setmetatile 62, 30, METATILE_General_RoughWater, FALSE + setmetatile 60, 31, METATILE_General_RoughWater, FALSE + setmetatile 61, 31, METATILE_General_RoughDeepWater, FALSE + setmetatile 62, 31, METATILE_General_RoughDeepWater, FALSE + setmetatile 63, 31, METATILE_General_RoughWater, FALSE + setmetatile 60, 32, METATILE_General_RoughWater, FALSE + setmetatile 61, 32, METATILE_General_RoughDeepWater, FALSE + setmetatile 62, 32, METATILE_General_RoughDeepWater, FALSE + setmetatile 63, 32, METATILE_General_RoughWater, FALSE + setmetatile 61, 33, METATILE_General_RoughWater, FALSE + setmetatile 62, 33, METATILE_General_RoughWater, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute129West:: - setmetatile 16, 14, METATILE_General_RoughWater, 0 - setmetatile 17, 14, METATILE_General_RoughWater, 0 - setmetatile 15, 15, METATILE_General_RoughWater, 0 - setmetatile 16, 15, METATILE_General_RoughDeepWater, 0 - setmetatile 17, 15, METATILE_General_RoughDeepWater, 0 - setmetatile 18, 15, METATILE_General_RoughWater, 0 - setmetatile 15, 16, METATILE_General_RoughWater, 0 - setmetatile 16, 16, METATILE_General_RoughDeepWater, 0 - setmetatile 17, 16, METATILE_General_RoughDeepWater, 0 - setmetatile 18, 16, METATILE_General_RoughWater, 0 - setmetatile 16, 17, METATILE_General_RoughWater, 0 - setmetatile 17, 17, METATILE_General_RoughWater, 0 + setmetatile 16, 14, METATILE_General_RoughWater, FALSE + setmetatile 17, 14, METATILE_General_RoughWater, FALSE + setmetatile 15, 15, METATILE_General_RoughWater, FALSE + setmetatile 16, 15, METATILE_General_RoughDeepWater, FALSE + setmetatile 17, 15, METATILE_General_RoughDeepWater, FALSE + setmetatile 18, 15, METATILE_General_RoughWater, FALSE + setmetatile 15, 16, METATILE_General_RoughWater, FALSE + setmetatile 16, 16, METATILE_General_RoughDeepWater, FALSE + setmetatile 17, 16, METATILE_General_RoughDeepWater, FALSE + setmetatile 18, 16, METATILE_General_RoughWater, FALSE + setmetatile 16, 17, METATILE_General_RoughWater, FALSE + setmetatile 17, 17, METATILE_General_RoughWater, FALSE return AbnormalWeather_EventScript_PlaceTilesRoute129East:: - setmetatile 42, 19, METATILE_General_RoughWater, 0 - setmetatile 43, 19, METATILE_General_RoughWater, 0 - setmetatile 41, 20, METATILE_General_RoughWater, 0 - setmetatile 42, 20, METATILE_General_RoughDeepWater, 0 - setmetatile 43, 20, METATILE_General_RoughDeepWater, 0 - setmetatile 44, 20, METATILE_General_RoughWater, 0 - setmetatile 41, 21, METATILE_General_RoughWater, 0 - setmetatile 42, 21, METATILE_General_RoughDeepWater, 0 - setmetatile 43, 21, METATILE_General_RoughDeepWater, 0 - setmetatile 44, 21, METATILE_General_RoughWater, 0 - setmetatile 42, 22, METATILE_General_RoughWater, 0 - setmetatile 43, 22, METATILE_General_RoughWater, 0 + setmetatile 42, 19, METATILE_General_RoughWater, FALSE + setmetatile 43, 19, METATILE_General_RoughWater, FALSE + setmetatile 41, 20, METATILE_General_RoughWater, FALSE + setmetatile 42, 20, METATILE_General_RoughDeepWater, FALSE + setmetatile 43, 20, METATILE_General_RoughDeepWater, FALSE + setmetatile 44, 20, METATILE_General_RoughWater, FALSE + setmetatile 41, 21, METATILE_General_RoughWater, FALSE + setmetatile 42, 21, METATILE_General_RoughDeepWater, FALSE + setmetatile 43, 21, METATILE_General_RoughDeepWater, FALSE + setmetatile 44, 21, METATILE_General_RoughWater, FALSE + setmetatile 42, 22, METATILE_General_RoughWater, FALSE + setmetatile 43, 22, METATILE_General_RoughWater, FALSE return AbnormalWeather_EventScript_HideMapNamePopup:: @@ -172,8 +172,7 @@ AbnormalWeather_StartGroudonWeather:: AbnormalWeather_EventScript_EndEventAndCleanup_1:: lockall - compare VAR_ABNORMAL_WEATHER_LOCATION, MARINE_CAVE_LOCATIONS_START - goto_if_ge AbnormalWeather_EventScript_ShowRainEndedMessage + goto_if_ge VAR_ABNORMAL_WEATHER_LOCATION, MARINE_CAVE_LOCATIONS_START, AbnormalWeather_EventScript_ShowRainEndedMessage goto AbnormalWeather_EventScript_ShowSunEndedMessage end @@ -222,163 +221,163 @@ AbnormalWeather_EventScript_CleanupMapTiles:: return AbnormalWeather_EventScript_CleanupRoute114North:: - setmetatile 7, 3, METATILE_Fallarbor_RedRockWall, 1 - setmetatile 7, 4, METATILE_Fallarbor_RedRockWall, 1 + setmetatile 7, 3, METATILE_Fallarbor_RedRockWall, TRUE + setmetatile 7, 4, METATILE_Fallarbor_RedRockWall, TRUE return AbnormalWeather_EventScript_CleanupRoute114South:: - setmetatile 6, 45, METATILE_Fallarbor_BrownRockWall, 1 - setmetatile 6, 46, METATILE_Fallarbor_BrownRockWall, 1 + setmetatile 6, 45, METATILE_Fallarbor_BrownRockWall, TRUE + setmetatile 6, 46, METATILE_Fallarbor_BrownRockWall, TRUE return AbnormalWeather_EventScript_CleanupRoute115West:: - setmetatile 21, 5, METATILE_Fallarbor_BrownRockWall, 1 - setmetatile 21, 6, METATILE_Fallarbor_BrownRockWall, 1 + setmetatile 21, 5, METATILE_Fallarbor_BrownRockWall, TRUE + setmetatile 21, 6, METATILE_Fallarbor_BrownRockWall, TRUE return AbnormalWeather_EventScript_CleanupRoute115East:: - setmetatile 36, 9, METATILE_Fallarbor_BrownRockWall, 1 - setmetatile 36, 10, METATILE_Fallarbor_BrownRockWall, 1 + setmetatile 36, 9, METATILE_Fallarbor_BrownRockWall, TRUE + setmetatile 36, 10, METATILE_Fallarbor_BrownRockWall, TRUE return AbnormalWeather_EventScript_CleanupRoute116North:: - setmetatile 59, 12, METATILE_General_RockWall_RockBase, 1 - setmetatile 59, 13, METATILE_General_RockWall_RockBase, 1 + setmetatile 59, 12, METATILE_General_RockWall_RockBase, TRUE + setmetatile 59, 13, METATILE_General_RockWall_RockBase, TRUE return AbnormalWeather_EventScript_CleanupRoute116South:: - setmetatile 79, 5, METATILE_General_RockWall_RockBase, 1 - setmetatile 79, 6, METATILE_General_RockWall_RockBase, 1 + setmetatile 79, 5, METATILE_General_RockWall_RockBase, TRUE + setmetatile 79, 6, METATILE_General_RockWall_RockBase, TRUE return AbnormalWeather_EventScript_CleanupRoute118East:: - setmetatile 42, 5, METATILE_General_RockWall_RockBase, 1 - setmetatile 42, 6, METATILE_General_RockWall_GrassBase, 1 + setmetatile 42, 5, METATILE_General_RockWall_RockBase, TRUE + setmetatile 42, 6, METATILE_General_RockWall_GrassBase, TRUE return AbnormalWeather_EventScript_CleanupRoute118West:: - setmetatile 9, 5, METATILE_General_RockWall_RockBase, 1 - setmetatile 9, 6, METATILE_General_RockWall_GrassBase, 1 + setmetatile 9, 5, METATILE_General_RockWall_RockBase, TRUE + setmetatile 9, 6, METATILE_General_RockWall_GrassBase, TRUE return AbnormalWeather_EventScript_CleanupRoute105North:: - setmetatile 10, 28, METATILE_General_CalmWater, 0 - setmetatile 11, 28, METATILE_General_CalmWater, 0 - setmetatile 9, 29, METATILE_General_CalmWater, 0 - setmetatile 10, 29, METATILE_General_CalmWater, 0 - setmetatile 11, 29, METATILE_General_CalmWater, 0 - setmetatile 12, 29, METATILE_General_CalmWater, 0 - setmetatile 9, 30, METATILE_General_CalmWater, 0 - setmetatile 10, 30, METATILE_General_CalmWater, 0 - setmetatile 11, 30, METATILE_General_CalmWater, 0 - setmetatile 12, 30, METATILE_General_CalmWater, 0 - setmetatile 10, 31, METATILE_General_CalmWater, 0 - setmetatile 11, 31, METATILE_General_CalmWater, 0 + setmetatile 10, 28, METATILE_General_CalmWater, FALSE + setmetatile 11, 28, METATILE_General_CalmWater, FALSE + setmetatile 9, 29, METATILE_General_CalmWater, FALSE + setmetatile 10, 29, METATILE_General_CalmWater, FALSE + setmetatile 11, 29, METATILE_General_CalmWater, FALSE + setmetatile 12, 29, METATILE_General_CalmWater, FALSE + setmetatile 9, 30, METATILE_General_CalmWater, FALSE + setmetatile 10, 30, METATILE_General_CalmWater, FALSE + setmetatile 11, 30, METATILE_General_CalmWater, FALSE + setmetatile 12, 30, METATILE_General_CalmWater, FALSE + setmetatile 10, 31, METATILE_General_CalmWater, FALSE + setmetatile 11, 31, METATILE_General_CalmWater, FALSE return AbnormalWeather_EventScript_CleanupRoute105South:: - setmetatile 20, 53, METATILE_General_CalmWater, 0 - setmetatile 21, 53, METATILE_General_CalmWater, 0 - setmetatile 19, 54, METATILE_General_CalmWater, 0 - setmetatile 20, 54, METATILE_General_CalmWater, 0 - setmetatile 21, 54, METATILE_General_CalmWater, 0 - setmetatile 22, 54, METATILE_General_CalmWater, 0 - setmetatile 19, 55, METATILE_General_CalmWater, 0 - setmetatile 20, 55, METATILE_General_CalmWater, 0 - setmetatile 21, 55, METATILE_General_CalmWater, 0 - setmetatile 22, 55, METATILE_General_CalmWater, 0 - setmetatile 20, 56, METATILE_General_CalmWater, 0 - setmetatile 21, 56, METATILE_General_CalmWater, 0 + setmetatile 20, 53, METATILE_General_CalmWater, FALSE + setmetatile 21, 53, METATILE_General_CalmWater, FALSE + setmetatile 19, 54, METATILE_General_CalmWater, FALSE + setmetatile 20, 54, METATILE_General_CalmWater, FALSE + setmetatile 21, 54, METATILE_General_CalmWater, FALSE + setmetatile 22, 54, METATILE_General_CalmWater, FALSE + setmetatile 19, 55, METATILE_General_CalmWater, FALSE + setmetatile 20, 55, METATILE_General_CalmWater, FALSE + setmetatile 21, 55, METATILE_General_CalmWater, FALSE + setmetatile 22, 55, METATILE_General_CalmWater, FALSE + setmetatile 20, 56, METATILE_General_CalmWater, FALSE + setmetatile 21, 56, METATILE_General_CalmWater, FALSE return AbnormalWeather_EventScript_CleanupRoute125West:: - setmetatile 8, 16, METATILE_General_CalmWater, 0 - setmetatile 9, 16, METATILE_General_CalmWater, 0 - setmetatile 7, 17, METATILE_General_CalmWater, 0 - setmetatile 8, 17, METATILE_General_CalmWater, 0 - setmetatile 9, 17, METATILE_General_CalmWater, 0 - setmetatile 10, 17, METATILE_General_CalmWater, 0 - setmetatile 7, 18, METATILE_General_CalmWater, 0 - setmetatile 8, 18, METATILE_General_CalmWater, 0 - setmetatile 9, 18, METATILE_General_CalmWater, 0 - setmetatile 10, 18, METATILE_General_CalmWater, 0 - setmetatile 8, 19, METATILE_General_CalmWater, 0 - setmetatile 9, 19, METATILE_General_CalmWater, 0 + setmetatile 8, 16, METATILE_General_CalmWater, FALSE + setmetatile 9, 16, METATILE_General_CalmWater, FALSE + setmetatile 7, 17, METATILE_General_CalmWater, FALSE + setmetatile 8, 17, METATILE_General_CalmWater, FALSE + setmetatile 9, 17, METATILE_General_CalmWater, FALSE + setmetatile 10, 17, METATILE_General_CalmWater, FALSE + setmetatile 7, 18, METATILE_General_CalmWater, FALSE + setmetatile 8, 18, METATILE_General_CalmWater, FALSE + setmetatile 9, 18, METATILE_General_CalmWater, FALSE + setmetatile 10, 18, METATILE_General_CalmWater, FALSE + setmetatile 8, 19, METATILE_General_CalmWater, FALSE + setmetatile 9, 19, METATILE_General_CalmWater, FALSE return AbnormalWeather_EventScript_CleanupRoute125East:: - setmetatile 53, 18, METATILE_General_CalmWater, 0 - setmetatile 54, 18, METATILE_General_CalmWater, 0 - setmetatile 52, 19, METATILE_General_CalmWater, 0 - setmetatile 53, 19, METATILE_General_CalmWater, 0 - setmetatile 54, 19, METATILE_General_CalmWater, 0 - setmetatile 55, 19, METATILE_General_CalmWater, 0 - setmetatile 52, 20, METATILE_General_CalmWater, 0 - setmetatile 53, 20, METATILE_General_CalmWater, 0 - setmetatile 54, 20, METATILE_General_CalmWater, 0 - setmetatile 55, 20, METATILE_General_CalmWater, 0 - setmetatile 53, 21, METATILE_General_CalmWater, 0 - setmetatile 54, 21, METATILE_General_CalmWater, 0 + setmetatile 53, 18, METATILE_General_CalmWater, FALSE + setmetatile 54, 18, METATILE_General_CalmWater, FALSE + setmetatile 52, 19, METATILE_General_CalmWater, FALSE + setmetatile 53, 19, METATILE_General_CalmWater, FALSE + setmetatile 54, 19, METATILE_General_CalmWater, FALSE + setmetatile 55, 19, METATILE_General_CalmWater, FALSE + setmetatile 52, 20, METATILE_General_CalmWater, FALSE + setmetatile 53, 20, METATILE_General_CalmWater, FALSE + setmetatile 54, 20, METATILE_General_CalmWater, FALSE + setmetatile 55, 20, METATILE_General_CalmWater, FALSE + setmetatile 53, 21, METATILE_General_CalmWater, FALSE + setmetatile 54, 21, METATILE_General_CalmWater, FALSE return AbnormalWeather_EventScript_CleanupRoute127North:: - setmetatile 57, 9, METATILE_General_CalmWater, 0 - setmetatile 58, 9, METATILE_General_CalmWater, 0 - setmetatile 56, 10, METATILE_General_CalmWater, 0 - setmetatile 57, 10, METATILE_General_CalmWater, 0 - setmetatile 58, 10, METATILE_General_CalmWater, 0 - setmetatile 59, 10, METATILE_General_CalmWater, 0 - setmetatile 56, 11, METATILE_General_CalmWater, 0 - setmetatile 57, 11, METATILE_General_CalmWater, 0 - setmetatile 58, 11, METATILE_General_CalmWater, 0 - setmetatile 59, 11, METATILE_General_CalmWater, 0 - setmetatile 57, 12, METATILE_General_CalmWater, 0 - setmetatile 58, 12, METATILE_General_CalmWater, 0 + setmetatile 57, 9, METATILE_General_CalmWater, FALSE + setmetatile 58, 9, METATILE_General_CalmWater, FALSE + setmetatile 56, 10, METATILE_General_CalmWater, FALSE + setmetatile 57, 10, METATILE_General_CalmWater, FALSE + setmetatile 58, 10, METATILE_General_CalmWater, FALSE + setmetatile 59, 10, METATILE_General_CalmWater, FALSE + setmetatile 56, 11, METATILE_General_CalmWater, FALSE + setmetatile 57, 11, METATILE_General_CalmWater, FALSE + setmetatile 58, 11, METATILE_General_CalmWater, FALSE + setmetatile 59, 11, METATILE_General_CalmWater, FALSE + setmetatile 57, 12, METATILE_General_CalmWater, FALSE + setmetatile 58, 12, METATILE_General_CalmWater, FALSE return AbnormalWeather_EventScript_CleanupRoute127South:: - setmetatile 61, 30, METATILE_General_CalmWater, 0 - setmetatile 62, 30, METATILE_General_CalmWater, 0 - setmetatile 60, 31, METATILE_General_CalmWater, 0 - setmetatile 61, 31, METATILE_General_CalmWater, 0 - setmetatile 62, 31, METATILE_General_CalmWater, 0 - setmetatile 63, 31, METATILE_General_CalmWater, 0 - setmetatile 60, 32, METATILE_General_CalmWater, 0 - setmetatile 61, 32, METATILE_General_CalmWater, 0 - setmetatile 62, 32, METATILE_General_CalmWater, 0 - setmetatile 63, 32, METATILE_General_CalmWater, 0 - setmetatile 61, 33, METATILE_General_CalmWater, 0 - setmetatile 62, 33, METATILE_General_CalmWater, 0 + setmetatile 61, 30, METATILE_General_CalmWater, FALSE + setmetatile 62, 30, METATILE_General_CalmWater, FALSE + setmetatile 60, 31, METATILE_General_CalmWater, FALSE + setmetatile 61, 31, METATILE_General_CalmWater, FALSE + setmetatile 62, 31, METATILE_General_CalmWater, FALSE + setmetatile 63, 31, METATILE_General_CalmWater, FALSE + setmetatile 60, 32, METATILE_General_CalmWater, FALSE + setmetatile 61, 32, METATILE_General_CalmWater, FALSE + setmetatile 62, 32, METATILE_General_CalmWater, FALSE + setmetatile 63, 32, METATILE_General_CalmWater, FALSE + setmetatile 61, 33, METATILE_General_CalmWater, FALSE + setmetatile 62, 33, METATILE_General_CalmWater, FALSE return AbnormalWeather_EventScript_CleanupRoute129West:: - setmetatile 16, 14, METATILE_General_CalmWater, 0 - setmetatile 17, 14, METATILE_General_CalmWater, 0 - setmetatile 15, 15, METATILE_General_CalmWater, 0 - setmetatile 16, 15, METATILE_General_CalmWater, 0 - setmetatile 17, 15, METATILE_General_CalmWater, 0 - setmetatile 18, 15, METATILE_General_CalmWater, 0 - setmetatile 15, 16, METATILE_General_CalmWater, 0 - setmetatile 16, 16, METATILE_General_CalmWater, 0 - setmetatile 17, 16, METATILE_General_CalmWater, 0 - setmetatile 18, 16, METATILE_General_CalmWater, 0 - setmetatile 16, 17, METATILE_General_CalmWater, 0 - setmetatile 17, 17, METATILE_General_CalmWater, 0 + setmetatile 16, 14, METATILE_General_CalmWater, FALSE + setmetatile 17, 14, METATILE_General_CalmWater, FALSE + setmetatile 15, 15, METATILE_General_CalmWater, FALSE + setmetatile 16, 15, METATILE_General_CalmWater, FALSE + setmetatile 17, 15, METATILE_General_CalmWater, FALSE + setmetatile 18, 15, METATILE_General_CalmWater, FALSE + setmetatile 15, 16, METATILE_General_CalmWater, FALSE + setmetatile 16, 16, METATILE_General_CalmWater, FALSE + setmetatile 17, 16, METATILE_General_CalmWater, FALSE + setmetatile 18, 16, METATILE_General_CalmWater, FALSE + setmetatile 16, 17, METATILE_General_CalmWater, FALSE + setmetatile 17, 17, METATILE_General_CalmWater, FALSE return AbnormalWeather_EventScript_CleanupRoute129East:: - setmetatile 42, 19, METATILE_General_CalmWater, 0 - setmetatile 43, 19, METATILE_General_CalmWater, 0 - setmetatile 41, 20, METATILE_General_CalmWater, 0 - setmetatile 42, 20, METATILE_General_CalmWater, 0 - setmetatile 43, 20, METATILE_General_CalmWater, 0 - setmetatile 44, 20, METATILE_General_CalmWater, 0 - setmetatile 41, 21, METATILE_General_CalmWater, 0 - setmetatile 42, 21, METATILE_General_CalmWater, 0 - setmetatile 43, 21, METATILE_General_CalmWater, 0 - setmetatile 44, 21, METATILE_General_CalmWater, 0 - setmetatile 42, 22, METATILE_General_CalmWater, 0 - setmetatile 43, 22, METATILE_General_CalmWater, 0 + setmetatile 42, 19, METATILE_General_CalmWater, FALSE + setmetatile 43, 19, METATILE_General_CalmWater, FALSE + setmetatile 41, 20, METATILE_General_CalmWater, FALSE + setmetatile 42, 20, METATILE_General_CalmWater, FALSE + setmetatile 43, 20, METATILE_General_CalmWater, FALSE + setmetatile 44, 20, METATILE_General_CalmWater, FALSE + setmetatile 41, 21, METATILE_General_CalmWater, FALSE + setmetatile 42, 21, METATILE_General_CalmWater, FALSE + setmetatile 43, 21, METATILE_General_CalmWater, FALSE + setmetatile 44, 21, METATILE_General_CalmWater, FALSE + setmetatile 42, 22, METATILE_General_CalmWater, FALSE + setmetatile 43, 22, METATILE_General_CalmWater, FALSE return AbnormalWeather_Underwater_SetupEscapeWarp:: @@ -394,33 +393,33 @@ AbnormalWeather_Underwater_SetupEscapeWarp:: return AbnormalWeather_Underwater_SetupEscapeWarpRoute105North:: - setescapewarp MAP_ROUTE105, 255, 11, 29 + setescapewarp MAP_ROUTE105, 11, 29 return AbnormalWeather_Underwater_SetupEscapeWarpRoute105South:: - setescapewarp MAP_ROUTE105, 255, 21, 54 + setescapewarp MAP_ROUTE105, 21, 54 return AbnormalWeather_Underwater_SetupEscapeWarpRoute125West:: - setescapewarp MAP_ROUTE125, 255, 9, 17 + setescapewarp MAP_ROUTE125, 9, 17 return AbnormalWeather_Underwater_SetupEscapeWarpRoute125East:: - setescapewarp MAP_ROUTE125, 255, 54, 19 + setescapewarp MAP_ROUTE125, 54, 19 return AbnormalWeather_Underwater_SetupEscapeWarpRoute127North:: - setescapewarp MAP_ROUTE127, 255, 58, 10 + setescapewarp MAP_ROUTE127, 58, 10 return AbnormalWeather_Underwater_SetupEscapeWarpRoute127South:: - setescapewarp MAP_ROUTE127, 255, 62, 31 + setescapewarp MAP_ROUTE127, 62, 31 return AbnormalWeather_Underwater_SetupEscapeWarpRoute129West:: - setescapewarp MAP_ROUTE129, 255, 17, 15 + setescapewarp MAP_ROUTE129, 17, 15 return AbnormalWeather_Underwater_SetupEscapeWarpRoute129East:: - setescapewarp MAP_ROUTE129, 255, 43, 20 + setescapewarp MAP_ROUTE129, 43, 20 return diff --git a/data/scripts/apprentice.inc b/data/scripts/apprentice.inc index 2a6772a5dc..6b3a99e728 100644 --- a/data/scripts/apprentice.inc +++ b/data/scripts/apprentice.inc @@ -4,40 +4,32 @@ BattleFrontier_BattleTowerLobby_EventScript_Apprentice:: lock faceplayer apprentice_gavelvlmode - compare VAR_RESULT, FALSE - goto_if_eq Apprentice_EventScript_FirstMeeting + goto_if_eq VAR_RESULT, FALSE, Apprentice_EventScript_FirstMeeting apprentice_shouldcheckgone - compare VAR_0x8004, FALSE @ Always TRUE here - goto_if_eq Apprentice_EventScript_AskQuestion + goto_if_eq VAR_0x8004, FALSE, Apprentice_EventScript_AskQuestion @ VAR_0x8004 always TRUE here goto_if_set FLAG_DAILY_APPRENTICE_LEAVES, Apprentice_EventScript_Gone Apprentice_EventScript_AskQuestion: apprentice_getquestion - compare VAR_RESULT, APPRENTICE_QUESTION_WHICH_MON - goto_if_eq Apprentice_EventScript_UseWhichMon - compare VAR_RESULT, APPRENTICE_QUESTION_WHAT_ITEM - goto_if_eq Apprentice_EventScript_UseWhatHeldItem - compare VAR_RESULT, APPRENTICE_QUESTION_WHICH_MOVE - goto_if_eq Apprentice_EventScript_UseWhichMove - compare VAR_RESULT, APPRENTICE_QUESTION_WHICH_FIRST - goto_if_eq Apprentice_EventScript_PutWhichMonFirst - compare VAR_RESULT, APPRENTICE_QUESTION_WIN_SPEECH - goto_if_eq Apprentice_EventScript_PickWinSpeech + goto_if_eq VAR_RESULT, APPRENTICE_QUESTION_WHICH_MON, Apprentice_EventScript_UseWhichMon + goto_if_eq VAR_RESULT, APPRENTICE_QUESTION_WHAT_ITEM, Apprentice_EventScript_UseWhatHeldItem + goto_if_eq VAR_RESULT, APPRENTICE_QUESTION_WHICH_MOVE, Apprentice_EventScript_UseWhichMove + goto_if_eq VAR_RESULT, APPRENTICE_QUESTION_WHICH_FIRST, Apprentice_EventScript_PutWhichMonFirst + goto_if_eq VAR_RESULT, APPRENTICE_QUESTION_WIN_SPEECH, Apprentice_EventScript_PickWinSpeech release releaseall end Apprentice_EventScript_FirstMeeting: - apprentice_buff 0, APPRENTICE_BUFF_NAME + apprentice_buff STR_VAR_1, APPRENTICE_BUFF_NAME apprentice_msg FALSE, APPRENTICE_MSG_PLEASE_TEACH Apprentice_EventScript_WhichLvlMode: apprentice_menu APPRENTICE_ASK_YES_NO - compare VAR_RESULT, 1 - goto_if_eq Apprentice_EventScript_RejectTeach + goto_if_eq VAR_RESULT, 1, Apprentice_EventScript_RejectTeach apprentice_msg FALSE, APPRENTICE_MSG_WHICH_LVL_MODE apprentice_menu APPRENTICE_ASK_WHICH_LEVEL apprentice_setlvlmode VAR_RESULT apprentice_shufflespecies - apprentice_buff 0, APPRENTICE_BUFF_LEVEL + apprentice_buff STR_VAR_1, APPRENTICE_BUFF_LEVEL apprentice_msg TRUE, APPRENTICE_MSG_THANKS_LVL_MODE call Apprentice_EventScript_SetHideFlags release @@ -54,22 +46,19 @@ Apprentice_EventScript_RejectTeach: Apprentice_EventScript_UseWhichMon: apprentice_initquestion APPRENTICE_QUESTION_WHICH_MON - apprentice_buff 0, APPRENTICE_BUFF_SPECIES1 - apprentice_buff 1, APPRENTICE_BUFF_SPECIES2 + apprentice_buff STR_VAR_1, APPRENTICE_BUFF_SPECIES1 + apprentice_buff STR_VAR_2, APPRENTICE_BUFF_SPECIES2 apprentice_msg FALSE, APPRENTICE_MSG_WHICH_MON apprentice_menu APPRENTICE_ASK_2SPECIES copyvar VAR_0x8005, VAR_RESULT - compare VAR_0x8005, 0 - call_if_eq Apprentice_EventScript_ChoseFirstMon - compare VAR_0x8005, 1 - call_if_eq Apprentice_EventScript_ChoseSecondMon + call_if_eq VAR_0x8005, 0, Apprentice_EventScript_ChoseFirstMon + call_if_eq VAR_0x8005, 1, Apprentice_EventScript_ChoseSecondMon apprentice_getnumpartymons apprentice_setpartymon VAR_RESULT apprentice_answeredquestion apprentice_getnumpartymons - compare VAR_RESULT, MULTI_PARTY_SIZE - call_if_eq Apprentice_EventScript_LastMonSelected - apprentice_buff 0, VAR_0x8007 + call_if_eq VAR_RESULT, MULTI_PARTY_SIZE, Apprentice_EventScript_LastMonSelected + apprentice_buff STR_VAR_1, VAR_0x8007 apprentice_freequestion apprentice_msg TRUE, APPRENTICE_MSG_THANKS_MON call Apprentice_EventScript_SetHideFlags @@ -94,19 +83,17 @@ Apprentice_EventScript_LastMonSelected: Apprentice_EventScript_UseWhatHeldItem: apprentice_initquestion APPRENTICE_QUESTION_WHAT_ITEM - apprentice_buff 0, APPRENTICE_BUFF_SPECIES3 + apprentice_buff STR_VAR_1, APPRENTICE_BUFF_SPECIES3 apprentice_msg TRUE, APPRENTICE_MSG_WHAT_HELD_ITEM apprentice_freequestion Apprentice_EventScript_ChooseHoldItem: fadescreen FADE_TO_BLACK setvar VAR_RESULT, 0 apprentice_openbag - compare VAR_RESULT, FALSE - goto_if_eq Apprentice_EventScript_ConfirmHoldNothing + goto_if_eq VAR_RESULT, FALSE, Apprentice_EventScript_ConfirmHoldNothing apprentice_trysetitem - compare VAR_RESULT, FALSE - goto_if_eq Apprentice_EventScript_AlreadySuggestedItem - apprentice_buff 0, APPRENTICE_BUFF_ITEM + goto_if_eq VAR_RESULT, FALSE, Apprentice_EventScript_AlreadySuggestedItem + apprentice_buff STR_VAR_1, APPRENTICE_BUFF_ITEM apprentice_msg TRUE, APPRENTICE_MSG_THANKS_HELD_ITEM apprentice_answeredquestion call Apprentice_EventScript_SetHideFlags @@ -119,12 +106,11 @@ Apprentice_EventScript_ChooseHoldItem: Apprentice_EventScript_ConfirmHoldNothing: apprentice_initquestion APPRENTICE_QUESTION_WHAT_ITEM - apprentice_buff 0, APPRENTICE_BUFF_SPECIES3 + apprentice_buff STR_VAR_1, APPRENTICE_BUFF_SPECIES3 apprentice_msg FALSE, APPRENTICE_MSG_HOLD_NOTHING apprentice_menu APPRENTICE_ASK_GIVE apprentice_freequestion - compare VAR_RESULT, 0 - goto_if_eq Apprentice_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, 0, Apprentice_EventScript_ChooseHoldItem Apprentice_EventScript_HoldNothing: apprentice_msg TRUE, APPRENTICE_MSG_THANKS_NO_HELD_ITEM apprentice_answeredquestion @@ -140,31 +126,28 @@ Apprentice_EventScript_HoldNothing: @ different item if theyve already told the Apprentice to use it for another mon Apprentice_EventScript_AlreadySuggestedItem: apprentice_initquestion APPRENTICE_QUESTION_WHAT_ITEM - apprentice_buff 0, APPRENTICE_BUFF_ITEM - apprentice_buff 1, APPRENTICE_BUFF_SPECIES3 + apprentice_buff STR_VAR_1, APPRENTICE_BUFF_ITEM + apprentice_buff STR_VAR_2, APPRENTICE_BUFF_SPECIES3 apprentice_msg FALSE, APPRENTICE_MSG_ITEM_ALREADY_SUGGESTED apprentice_menu APPRENTICE_ASK_GIVE apprentice_freequestion - compare VAR_RESULT, 0 - goto_if_eq Apprentice_EventScript_ChooseHoldItem + goto_if_eq VAR_RESULT, 0, Apprentice_EventScript_ChooseHoldItem goto Apprentice_EventScript_HoldNothing end Apprentice_EventScript_UseWhichMove: apprentice_initquestion APPRENTICE_QUESTION_WHICH_MOVE - apprentice_buff 0, APPRENTICE_BUFF_SPECIES3 - apprentice_buff 1, APPRENTICE_BUFF_MOVE1 - apprentice_buff 2, APPRENTICE_BUFF_MOVE2 + apprentice_buff STR_VAR_1, APPRENTICE_BUFF_SPECIES3 + apprentice_buff STR_VAR_2, APPRENTICE_BUFF_MOVE1 + apprentice_buff STR_VAR_3, APPRENTICE_BUFF_MOVE2 apprentice_msg FALSE, APPRENTICE_MSG_WHICH_MOVE apprentice_menu APPRENTICE_ASK_MOVES copyvar VAR_0x8005, VAR_RESULT - compare VAR_0x8005, 0 - call_if_eq Apprentice_EventScript_ChoseMove1 - compare VAR_0x8005, 1 - call_if_eq Apprentice_EventScript_ChoseMove2 + call_if_eq VAR_0x8005, 0, Apprentice_EventScript_ChoseMove1 + call_if_eq VAR_0x8005, 1, Apprentice_EventScript_ChoseMove2 apprentice_setmove apprentice_answeredquestion - apprentice_buff 0, VAR_0x8007 + apprentice_buff STR_VAR_1, VAR_0x8007 apprentice_freequestion apprentice_msg TRUE, APPRENTICE_MSG_THANKS_MOVE call Apprentice_EventScript_SetHideFlags @@ -188,7 +171,7 @@ Apprentice_EventScript_PutWhichMonFirst: apprentice_menu APPRENTICE_ASK_3SPECIES apprentice_setleadmon VAR_RESULT apprentice_answeredquestion - apprentice_buff 0, APPRENTICE_BUFF_LEAD_MON_SPECIES + apprentice_buff STR_VAR_1, APPRENTICE_BUFF_LEAD_MON_SPECIES apprentice_msg TRUE, APPRENTICE_MSG_THANKS_MON_FIRST call Apprentice_EventScript_SetHideFlags release @@ -207,7 +190,7 @@ Apprentice_EventScript_PickWinSpeech: lock faceplayer apprentice_save - apprentice_buff 0, APPRENTICE_BUFF_WIN_SPEECH + apprentice_buff STR_VAR_1, APPRENTICE_BUFF_WIN_SPEECH apprentice_msg TRUE, APPRENTICE_MSG_THANKS_WIN_SPEECH apprentice_reset call Apprentice_EventScript_SetHideFlags @@ -225,16 +208,14 @@ Apprentice_EventScript_SetHideFlags: Apprentice_EventScript_LeaveNorth: apprentice_shouldleave - compare VAR_0x8004, FALSE @ Always TRUE here - goto_if_eq Apprentice_EventScript_DontMove + goto_if_eq VAR_0x8004, FALSE, Apprentice_EventScript_DontMove @ VAR_0x8004 always TRUE here applymovement LOCALID_APPRENTICE, Apprentice_Movement_LeaveNorth waitmovement 0 end Apprentice_EventScript_Leave: apprentice_shouldleave - compare VAR_0x8004, FALSE @ Always TRUE here - goto_if_eq Apprentice_EventScript_DontMove + goto_if_eq VAR_0x8004, FALSE, Apprentice_EventScript_DontMove @ VAR_0x8004 always TRUE here applymovement LOCALID_APPRENTICE, Apprentice_Movement_Leave waitmovement 0 end diff --git a/data/scripts/battle_pike.inc b/data/scripts/battle_pike.inc index 3260bcfd82..8ca7f5b1af 100644 --- a/data/scripts/battle_pike.inc +++ b/data/scripts/battle_pike.inc @@ -50,14 +50,10 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_InitRoomObjects:: setvar VAR_OBJ_GFX_ID_1, OBJ_EVENT_GFX_LINK_RECEPTIONIST setvar VAR_OBJ_GFX_ID_0, OBJ_EVENT_GFX_LINK_RECEPTIONIST pike_getroomtype - compare VAR_RESULT, PIKE_ROOM_STATUS - goto_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_InitTwoObjectRoom - compare VAR_RESULT, PIKE_ROOM_HARD_BATTLE - goto_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_InitTwoObjectRoom - compare VAR_RESULT, PIKE_ROOM_DOUBLE_BATTLE - goto_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_InitTwoObjectRoom - compare VAR_RESULT, PIKE_ROOM_BRAIN - goto_if_eq BattleFrontier_BattlePikeRoomNormal_EventScript_InitBrainRoomObjects + goto_if_eq VAR_RESULT, PIKE_ROOM_STATUS, BattleFrontier_BattlePikeRoomNormal_EventScript_InitTwoObjectRoom + goto_if_eq VAR_RESULT, PIKE_ROOM_HARD_BATTLE, BattleFrontier_BattlePikeRoomNormal_EventScript_InitTwoObjectRoom + goto_if_eq VAR_RESULT, PIKE_ROOM_DOUBLE_BATTLE, BattleFrontier_BattlePikeRoomNormal_EventScript_InitTwoObjectRoom + goto_if_eq VAR_RESULT, PIKE_ROOM_BRAIN, BattleFrontier_BattlePikeRoomNormal_EventScript_InitBrainRoomObjects hideobjectat LOCALID_OBJ_1, MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL setvar VAR_TEMP_4, 1 turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH @@ -114,7 +110,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_WarpNPCRoom:: applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePikeRoom_Movement_HidePlayer waitmovement 0 call BattleFrontier_BattlePike_EventScript_CloseCurtain - warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL, 255, 4, 7 + warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL, 4, 7 waitstate end @@ -122,7 +118,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_WarpWildMonRoom:: applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePikeRoom_Movement_HidePlayer waitmovement 0 call BattleFrontier_BattlePike_EventScript_CloseCurtain - warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS, 255, 4, 19 + warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS, 4, 19 waitstate end @@ -154,10 +150,8 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_NoTurningBack:: BattleFrontier_BattlePikeRoomNormal_EventScript_Exit:: pike_ispartyfullhealth - compare VAR_RESULT, TRUE - call_if_eq BattleFrontier_BattlePikeRoom_EventScript_DisableHealing - compare VAR_RESULT, TRUE - call_if_ne BattleFrontier_BattlePikeRoom_EventScript_EnableHealing + call_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePikeRoom_EventScript_DisableHealing + call_if_ne VAR_RESULT, TRUE, BattleFrontier_BattlePikeRoom_EventScript_EnableHealing pike_get PIKE_DATA_WIN_STREAK addvar VAR_RESULT, 1 pike_set PIKE_DATA_WIN_STREAK, VAR_RESULT @@ -165,10 +159,8 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_Exit:: addvar VAR_RESULT, 1 frontier_set FRONTIER_DATA_BATTLE_NUM, VAR_RESULT pike_isfinalroom - compare VAR_RESULT, TRUE - call_if_eq BattleFrontier_BattlePikeRoom_EventScript_WarpToFinalRoom - compare VAR_RESULT, FALSE - call_if_eq BattleFrontier_BattlePikeRoom_EventScript_WarpToThreePathRoom + call_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePikeRoom_EventScript_WarpToFinalRoom + call_if_eq VAR_RESULT, FALSE, BattleFrontier_BattlePikeRoom_EventScript_WarpToThreePathRoom waitstate end @@ -184,23 +176,21 @@ BattleFrontier_BattlePikeRoom_EventScript_WarpToFinalRoom:: applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePikeRoom_Movement_HidePlayer waitmovement 0 call BattleFrontier_BattlePike_EventScript_CloseCurtain - warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL, 255, 2, 7 + warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL, 2, 7 return BattleFrontier_BattlePikeRoom_EventScript_WarpToThreePathRoom:: applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePikeRoom_Movement_HidePlayer waitmovement 0 call BattleFrontier_BattlePike_EventScript_CloseCurtain - warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM, 255, 6, 10 + warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM, 6, 10 return BattleFrontier_BattlePikeRoomWildMons_EventScript_Exit:: pike_exitwildmonroom pike_ispartyfullhealth - compare VAR_RESULT, TRUE - call_if_eq BattleFrontier_BattlePikeRoom_EventScript_DisableHealing - compare VAR_RESULT, TRUE - call_if_ne BattleFrontier_BattlePikeRoom_EventScript_EnableHealing + call_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePikeRoom_EventScript_DisableHealing + call_if_ne VAR_RESULT, TRUE, BattleFrontier_BattlePikeRoom_EventScript_EnableHealing pike_get PIKE_DATA_WIN_STREAK addvar VAR_RESULT, 1 pike_set PIKE_DATA_WIN_STREAK, VAR_RESULT @@ -208,10 +198,8 @@ BattleFrontier_BattlePikeRoomWildMons_EventScript_Exit:: addvar VAR_RESULT, 1 frontier_set FRONTIER_DATA_BATTLE_NUM, VAR_RESULT pike_isfinalroom - compare VAR_RESULT, TRUE - call_if_eq BattleFrontier_BattlePikeRoom_EventScript_WarpToFinalRoom - compare VAR_RESULT, FALSE - call_if_eq BattleFrontier_BattlePikeRoom_EventScript_WarpToThreePathRoom + call_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePikeRoom_EventScript_WarpToFinalRoom + call_if_eq VAR_RESULT, FALSE, BattleFrontier_BattlePikeRoom_EventScript_WarpToThreePathRoom waitstate end @@ -230,17 +218,15 @@ BattleFrontier_BattlePikeRoomWildMons_EventScript_NoTurningBack:: BattleFrontier_BattlePike_EventScript_Retire:: frontier_set FRONTIER_DATA_CHALLENGE_STATUS CHALLENGE_STATUS_LOST - warp MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY, 255, 5, 6 + warp MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY, 5, 6 waitstate end BattleFrontier_BattlePikeRoom_OnResume: setorcopyvar VAR_0x8006, VAR_RESULT @ Save VAR_RESULT from being overwritten frontier_get FRONTIER_DATA_CHALLENGE_STATUS - compare VAR_RESULT, CHALLENGE_STATUS_PAUSED - goto_if_eq BattleFrontier_BattlePikeThreePathRoom_EventScript_EndOnResume - compare VAR_RESULT, CHALLENGE_STATUS_SAVING - goto_if_eq BattleFrontier_BattlePikeThreePathRoom_EventScript_EndOnResume + goto_if_eq VAR_RESULT, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePikeThreePathRoom_EventScript_EndOnResume + goto_if_eq VAR_RESULT, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePikeThreePathRoom_EventScript_EndOnResume call BattleFrontier_BattlePikeRoom_EventScript_ResetSketchedMoves BattleFrontier_BattlePikeThreePathRoom_EventScript_EndOnResume:: setorcopyvar VAR_RESULT, VAR_0x8006 diff --git a/data/scripts/berry_blender.inc b/data/scripts/berry_blender.inc index 921fa9582c..f860ef066c 100644 --- a/data/scripts/berry_blender.inc +++ b/data/scripts/berry_blender.inc @@ -249,8 +249,7 @@ BerryBlender_EventScript_BerryBlender1:: applymovement LOCALID_EXPERT_M, BerryBlender_Movement_BlendLeaderWalkInPlace waitmovement 0 msgbox BerryBlender_Text_WantToMakePokeblocks, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryBlender_EventScript_TryUseBerryBlender1 + goto_if_eq VAR_RESULT, YES, BerryBlender_EventScript_TryUseBerryBlender1 goto BerryBlender_EventScript_DeclineBlender1 end @@ -280,8 +279,7 @@ BerryBlender_EventScript_Blender1GiveSpareBerry: BerryBlender_EventScript_UseBerryBlender1: msgbox BerryBlender_Text_KnowHowToMakePokeblocks, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryBlender_EventScript_StartBlender1 + goto_if_eq VAR_RESULT, YES, BerryBlender_EventScript_StartBlender1 goto BerryBlender_EventScript_ExplainBlending1 end @@ -296,15 +294,12 @@ BerryBlender_EventScript_ExplainBlending1: end BerryBlender_EventScript_TryUseBerryBlender1: - checkitem ITEM_POKEBLOCK_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_Blender1NoCase + checkitem ITEM_POKEBLOCK_CASE + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_Blender1NoCase specialvar VAR_RESULT, GetFirstFreePokeblockSlot - compare VAR_RESULT, 65535 - goto_if_eq BerryBlender_EventScript_Blender1CaseFull + goto_if_eq VAR_RESULT, 65535, BerryBlender_EventScript_Blender1CaseFull specialvar VAR_RESULT, PlayerHasBerries - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_Blender1NoBerries + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_Blender1NoBerries msgbox BerryBlender_Text_Excellent, MSGBOX_DEFAULT goto BerryBlender_EventScript_UseBerryBlender1 end @@ -334,8 +329,7 @@ BerryBlender_EventScript_BerryBlender2:: applymovement LOCALID_MAN, BerryBlender_Movement_BlendLeaderWalkInPlace waitmovement 0 msgbox BerryBlender_Text_WantToBlendPokeblocksWithUs, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryBlender_EventScript_TryUseBerryBlender2 + goto_if_eq VAR_RESULT, YES, BerryBlender_EventScript_TryUseBerryBlender2 goto BerryBlender_EventScript_DeclineBlender2 end @@ -351,8 +345,7 @@ BerryBlender_EventScript_Blender2NoBerries: BerryBlender_EventScript_UseBerryBlender2: msgbox BerryBlender_Text_KnowHowToMakePokeblocks2, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryBlender_EventScript_StartBlender2 + goto_if_eq VAR_RESULT, YES, BerryBlender_EventScript_StartBlender2 goto BerryBlender_EventScript_ExplainBlending2 end @@ -368,17 +361,13 @@ BerryBlender_EventScript_ExplainBlending2: BerryBlender_EventScript_TryUseBerryBlender2: specialvar VAR_RESULT, PlayerHasBerries - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_Blender2NoBerries - checkitem ITEM_POKEBLOCK_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_Blender2NoCase + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_Blender2NoBerries + checkitem ITEM_POKEBLOCK_CASE + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_Blender2NoCase msgbox BerryBlender_Text_Okay, MSGBOX_DEFAULT specialvar VAR_RESULT, GetFirstFreePokeblockSlot - compare VAR_RESULT, 65535 - goto_if_ne BerryBlender_EventScript_UseBerryBlender2 - compare VAR_RESULT, 65535 - goto_if_eq BerryBlender_EventScript_Blender2CaseFull + goto_if_ne VAR_RESULT, 65535, BerryBlender_EventScript_UseBerryBlender2 + goto_if_eq VAR_RESULT, 65535, BerryBlender_EventScript_Blender2CaseFull end BerryBlender_EventScript_Blender2CaseFull: @@ -400,8 +389,7 @@ BerryBlender_EventScript_BerryBlender3:: applymovement VAR_0x8008, BerryBlender_Movement_BlendLeaderWalkInPlace waitmovement 0 msgbox BerryBlender_Text_LookGoodAtBlendingJoinUs, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryBlender_EventScript_TryUseBlender3 + goto_if_eq VAR_RESULT, YES, BerryBlender_EventScript_TryUseBlender3 goto BerryBlender_EventScript_DeclineBlender3 end @@ -417,8 +405,7 @@ BerryBlender_EventScript_Blender3NoBerries: BerryBlender_EventScript_UseBerryBlender3: msgbox BerryBlender_Text_KnowHowToMakePokeblocks3, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryBlender_EventScript_StartBlender3 + goto_if_eq VAR_RESULT, YES, BerryBlender_EventScript_StartBlender3 goto BerryBlender_EventScript_ExplainBlending3 end @@ -434,17 +421,13 @@ BerryBlender_EventScript_ExplainBlending3: BerryBlender_EventScript_TryUseBlender3: specialvar VAR_RESULT, PlayerHasBerries - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_Blender3NoBerries - checkitem ITEM_POKEBLOCK_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_Blender3NoCase + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_Blender3NoBerries + checkitem ITEM_POKEBLOCK_CASE + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_Blender3NoCase msgbox BerryBlender_Text_OhDear, MSGBOX_DEFAULT specialvar VAR_RESULT, GetFirstFreePokeblockSlot - compare VAR_RESULT, 65535 - goto_if_ne BerryBlender_EventScript_UseBerryBlender3 - compare VAR_RESULT, 65535 - goto_if_eq BerryBlender_EventScript_Blender3CaseFull + goto_if_ne VAR_RESULT, 65535, BerryBlender_EventScript_UseBerryBlender3 + goto_if_eq VAR_RESULT, 65535, BerryBlender_EventScript_Blender3CaseFull end BerryBlender_EventScript_Blender3CaseFull: @@ -461,8 +444,7 @@ BerryBlender_EventScript_BlendMasterPresent: lockall setvar NUM_OPPONENTS, 1 msgbox BerryBlender_Text_SeeMyMasteryInAction, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryBlender_EventScript_TryBlendWithBlendMaster + goto_if_eq VAR_RESULT, YES, BerryBlender_EventScript_TryBlendWithBlendMaster msgbox BerryBlender_Text_TooBusyNowIsee, MSGBOX_DEFAULT releaseall end @@ -473,23 +455,18 @@ BerryBlender_EventScript_BlendMasterNoBerries: end BerryBlender_EventScript_TryBlendWithBlendMaster: - checkitem ITEM_POKEBLOCK_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_BlendMasterNoCase + checkitem ITEM_POKEBLOCK_CASE + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_BlendMasterNoCase specialvar VAR_RESULT, PlayerHasBerries - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_BlendMasterNoBerries + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_BlendMasterNoBerries specialvar VAR_RESULT, GetFirstFreePokeblockSlot - compare VAR_RESULT, 65535 - goto_if_ne BerryBlender_EventScript_BlendWithBlendMaster - compare VAR_RESULT, 65535 - goto_if_eq BerryBlender_EventScript_BlendMasterCaseFull + goto_if_ne VAR_RESULT, 65535, BerryBlender_EventScript_BlendWithBlendMaster + goto_if_eq VAR_RESULT, 65535, BerryBlender_EventScript_BlendMasterCaseFull end BerryBlender_EventScript_BlendWithBlendMaster: msgbox BerryBlender_Text_BlendMasterKnowHowToMakePokeblocks, MSGBOX_YESNO - compare VAR_RESULT, NO - call_if_eq BerryBlender_EventScript_BlendMasterExplainBlending + call_if_eq VAR_RESULT, NO, BerryBlender_EventScript_BlendMasterExplainBlending msgbox BerryBlender_Text_BlendMasterLetsBerryBlender, MSGBOX_DEFAULT goto BerryBlender_EventScript_DoBerryBlending end @@ -530,10 +507,8 @@ BerryBlender_EventScript_ExpertMCheckGiveBerry: faceplayer msgbox BerryBlender_Text_LoveMakingPokeblocks, MSGBOX_DEFAULT specialvar VAR_RESULT, PlayerHasBerries - compare VAR_RESULT, TRUE - goto_if_eq BerryBlender_EventScript_ExpertMPlayerHasBerries - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_ExpertMNoBerries + goto_if_eq VAR_RESULT, TRUE, BerryBlender_EventScript_ExpertMPlayerHasBerries + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_ExpertMNoBerries end BerryBlender_EventScript_ExpertMPlayerHasBerries: @@ -542,12 +517,10 @@ BerryBlender_EventScript_ExpertMPlayerHasBerries: end BerryBlender_EventScript_ExpertMNoBerries: - checkitem ITEM_POKEBLOCK_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_ExpertMNoSpareBerries + checkitem ITEM_POKEBLOCK_CASE + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_ExpertMNoSpareBerries specialvar VAR_RESULT, GetFirstFreePokeblockSlot - compare VAR_RESULT, 65535 - goto_if_eq BerryBlender_EventScript_ExpertMNoSpareBerries + goto_if_eq VAR_RESULT, 65535, BerryBlender_EventScript_ExpertMNoSpareBerries dotimebasedevents goto_if_set FLAG_DAILY_CONTEST_LOBBY_RECEIVED_BERRY, BerryBlender_EventScript_ExpertMNoSpareBerries goto BerryBlender_EventScript_ExpertMGiveBerry @@ -567,30 +540,24 @@ BerryBlender_EventScript_ExpertMGiveBerry: end BerryBlender_Movement_BlendLeaderWalkInPlace: - walk_in_place_fastest_right + walk_in_place_faster_right step_end BerryBlender_EventScript_BerryBlenderLink:: lockall specialvar VAR_RESULT, PlayerHasBerries - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_LinkBlenderNoBerries - checkitem ITEM_POKEBLOCK_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_LinkBlenderNoCase + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_LinkBlenderNoBerries + checkitem ITEM_POKEBLOCK_CASE + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_LinkBlenderNoCase specialvar VAR_RESULT, GetFirstFreePokeblockSlot - compare VAR_RESULT, 65535 - goto_if_ne BerryBlender_EventScript_LinkBlenderSaveGame - compare VAR_RESULT, 65535 - goto_if_eq BerryBlender_EventScript_LinkBlenderCaseFull + goto_if_ne VAR_RESULT, 65535, BerryBlender_EventScript_LinkBlenderSaveGame + goto_if_eq VAR_RESULT, 65535, BerryBlender_EventScript_LinkBlenderCaseFull end BerryBlender_EventScript_LinkBlenderSaveGame: msgbox BerryBlender_Text_SaveGameBeforeBerryBlenderLink, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryBlender_EventScript_TryDoLinkBlender - compare VAR_RESULT, NO - goto_if_eq BerryBlender_EventScript_CancelLinkBlender + goto_if_eq VAR_RESULT, YES, BerryBlender_EventScript_TryDoLinkBlender + goto_if_eq VAR_RESULT, NO, BerryBlender_EventScript_CancelLinkBlender end BerryBlender_EventScript_LinkBlenderNoBerries: @@ -600,25 +567,18 @@ BerryBlender_EventScript_LinkBlenderNoBerries: BerryBlender_EventScript_TryDoLinkBlender: call Common_EventScript_SaveGame - compare VAR_RESULT, FALSE - goto_if_eq BerryBlender_EventScript_CancelLinkBlender + goto_if_eq VAR_RESULT, FALSE, BerryBlender_EventScript_CancelLinkBlender specialvar VAR_RESULT, IsWirelessAdapterConnected - compare VAR_RESULT, TRUE - goto_if_eq BerryBlender_EventScript_StartDecideLinkLeader + goto_if_eq VAR_RESULT, TRUE, BerryBlender_EventScript_StartDecideLinkLeader message BerryBlender_Text_SearchingForFriends waitmessage special TryBerryBlenderLinkup waitstate - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq BerryBlender_EventScript_SpawnLinkPartners - compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY - goto_if_eq BerryBlender_EventScript_CloseLinkNotReady - compare VAR_RESULT, LINKUP_DIFF_SELECTIONS - goto_if_eq BerryBlender_EventScript_CloseLinkDifferentSelections - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq BerryBlender_EventScript_CloseLink - compare VAR_RESULT, LINKUP_CONNECTION_ERROR - goto_if_eq BerryBlender_EventScript_LinkError + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, BerryBlender_EventScript_SpawnLinkPartners + goto_if_eq VAR_RESULT, LINKUP_SOMEONE_NOT_READY, BerryBlender_EventScript_CloseLinkNotReady + goto_if_eq VAR_RESULT, LINKUP_DIFF_SELECTIONS, BerryBlender_EventScript_CloseLinkDifferentSelections + goto_if_eq VAR_RESULT, LINKUP_FAILED, BerryBlender_EventScript_CloseLink + goto_if_eq VAR_RESULT, LINKUP_CONNECTION_ERROR, BerryBlender_EventScript_LinkError end BerryBlender_EventScript_TwoPlayerLink: @@ -641,7 +601,7 @@ BerryBlender_EventScript_DoLinkBerryBlending: fadescreen FADE_TO_BLACK removeobject 240 @ Unclear where these local IDs come from, removeobject 239 @ but presumably they'd be the 4 link players - removeobject 238 + removeobject 238 removeobject 237 special DoBerryBlending waitstate @@ -721,23 +681,17 @@ BerryBlender_EventScript_DecideLinkLeader: BerryBlender_EventScript_TryLeadGroup: call BerryBlender_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq BerryBlender_EventScript_LinkLeaderDecided - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq BerryBlender_EventScript_DecideLinkLeader - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq BerryBlender_EventScript_TryLeadGroup + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, BerryBlender_EventScript_LinkLeaderDecided + goto_if_eq VAR_RESULT, LINKUP_FAILED, BerryBlender_EventScript_DecideLinkLeader + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, BerryBlender_EventScript_TryLeadGroup release end BerryBlender_EventScript_TryJoinGroup: call BerryBlender_EventScript_TryJoinLinkGroup - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq BerryBlender_EventScript_LinkLeaderDecided - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq BerryBlender_EventScript_DecideLinkLeader - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq BerryBlender_EventScript_TryJoinGroup + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, BerryBlender_EventScript_LinkLeaderDecided + goto_if_eq VAR_RESULT, LINKUP_FAILED, BerryBlender_EventScript_DecideLinkLeader + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, BerryBlender_EventScript_TryJoinGroup release end diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index e415d0c657..8ad300df52 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -22,8 +22,7 @@ BerryTree_EventScript_CheckSoil:: lock faceplayer specialvar VAR_RESULT, PlayerHasBerries - compare VAR_RESULT, TRUE - goto_if_eq BerryTree_EventScript_WantToPlant + goto_if_eq VAR_RESULT, TRUE, BerryTree_EventScript_WantToPlant message BerryTree_Text_ItsSoftLoamySoil waitmessage waitbuttonpress @@ -32,10 +31,8 @@ BerryTree_EventScript_CheckSoil:: BerryTree_EventScript_WantToPlant:: msgbox BerryTree_Text_WantToPlant, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryTree_EventScript_ChooseBerryToPlant - compare VAR_RESULT, NO - goto_if_eq BerryTree_EventScript_CancelPlanting + goto_if_eq VAR_RESULT, YES, BerryTree_EventScript_ChooseBerryToPlant + goto_if_eq VAR_RESULT, NO, BerryTree_EventScript_CancelPlanting end BerryTree_EventScript_ChooseBerryToPlant:: @@ -43,8 +40,7 @@ BerryTree_EventScript_ChooseBerryToPlant:: closemessage special Bag_ChooseBerry waitstate - compare VAR_ITEM_ID, 0 - goto_if_eq BerryTree_EventScript_CancelPlanting + goto_if_eq VAR_ITEM_ID, 0, BerryTree_EventScript_CancelPlanting removeitem VAR_ITEM_ID call BerryTree_EventScript_PlantBerry @@ -88,37 +84,32 @@ BerryTree_EventScript_CheckBerryStage4:: @ VAR_0x8005 here is the number of times watered @ Buffered by ObjectEventInteractionGetBerryTreeData BerryTree_EventScript_GetCareAdverb:: - compare VAR_0x8005, 0 - goto_if_eq BerryTree_EventScript_SetAdverbPoor - compare VAR_0x8005, 4 - goto_if_eq BerryTree_EventScript_SetAdverbGreat - bufferstring 1, BerryTree_Text_CareAdverbGood + goto_if_eq VAR_0x8005, 0, BerryTree_EventScript_SetAdverbPoor + goto_if_eq VAR_0x8005, 4, BerryTree_EventScript_SetAdverbGreat + bufferstring STR_VAR_2, BerryTree_Text_CareAdverbGood return BerryTree_EventScript_SetAdverbGreat:: - bufferstring 1, BerryTree_Text_CareAdverbGreat + bufferstring STR_VAR_2, BerryTree_Text_CareAdverbGreat return BerryTree_EventScript_SetAdverbPoor:: - bufferstring 1, BerryTree_Text_CareAdverbPoor + bufferstring STR_VAR_2, BerryTree_Text_CareAdverbPoor return @ VAR_0x8006 here is the number of berries BerryTree_EventScript_CheckBerryFullyGrown:: - buffernumberstring 1, VAR_0x8006 + buffernumberstring STR_VAR_2, VAR_0x8006 lock faceplayer special ObjectEventInteractionGetBerryCountString msgbox BerryTree_Text_WantToPick, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryTree_EventScript_PickBerry - compare VAR_RESULT, NO - goto_if_eq BerryTree_EventScript_CancelPickingBerry + goto_if_eq VAR_RESULT, YES, BerryTree_EventScript_PickBerry + goto_if_eq VAR_RESULT, NO, BerryTree_EventScript_CancelPickingBerry BerryTree_EventScript_PickBerry:: special ObjectEventInteractionPickBerryTree - compare VAR_0x8004, 0 - goto_if_eq BerryTree_EventScript_BerryPocketFull + goto_if_eq VAR_0x8004, 0, BerryTree_EventScript_BerryPocketFull special IncrementDailyPickedBerries special ObjectEventInteractionRemoveBerryTree message BerryTree_Text_PickedTheBerry @@ -154,15 +145,12 @@ BerryTree_EventScript_ItemUsePlantBerry:: end BerryTree_EventScript_WantToWater:: - checkitem ITEM_WAILMER_PAIL, 1 - compare VAR_RESULT, 0 - goto_if_eq BerryTree_EventScript_DontWater + checkitem ITEM_WAILMER_PAIL + goto_if_eq VAR_RESULT, FALSE, BerryTree_EventScript_DontWater special ObjectEventInteractionGetBerryName msgbox BerryTree_Text_WantToWater, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BerryTree_EventScript_WaterBerry - compare VAR_RESULT, NO - goto_if_eq BerryTree_EventScript_DontWater + goto_if_eq VAR_RESULT, YES, BerryTree_EventScript_WaterBerry + goto_if_eq VAR_RESULT, NO, BerryTree_EventScript_DontWater BerryTree_EventScript_DontWater:: releaseall diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 5cecb60d81..0ab93c4037 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -4,11 +4,9 @@ CableClub_OnTransition: CableClub_EventScript_HideOrShowMysteryGiftMan:: specialvar VAR_RESULT, ShouldDistributeEonTicket - compare VAR_RESULT, TRUE - goto_if_eq CableClub_EventScript_ShowMysteryGiftMan - specialvar VAR_RESULT, ValidateReceivedWonderCard - compare VAR_RESULT, FALSE - goto_if_eq CableClub_EventScript_HideMysteryGiftMan + goto_if_eq VAR_RESULT, TRUE, CableClub_EventScript_ShowMysteryGiftMan + specialvar VAR_RESULT, ValidateSavedWonderCard + goto_if_eq VAR_RESULT, FALSE, CableClub_EventScript_HideMysteryGiftMan goto CableClub_EventScript_ShowMysteryGiftMan end @@ -22,29 +20,25 @@ CableClub_EventScript_HideMysteryGiftMan:: CableClub_EventScript_MysteryGiftMan:: specialvar VAR_RESULT, ShouldDistributeEonTicket - compare VAR_RESULT, TRUE - goto_if_eq CableClub_EventScript_DistributeEonTicket - goto CableClub_EventScript_AlreadyGotEonTicket + goto_if_eq VAR_RESULT, TRUE, CableClub_EventScript_DistributeEonTicket + goto CableClub_EventScript_TryWonderCardScript end -CableClub_EventScript_AlreadyGotEonTicket:: - gotoram - -@ Unused? +CableClub_EventScript_TryWonderCardScript:: + trywondercardscript CableClub_EventScript_MysteryGiftThankYou:: msgbox gText_ThankYouForAccessingMysteryGift, MSGBOX_NPC end CableClub_EventScript_DistributeEonTicket:: - checkitem ITEM_EON_TICKET, 1 - compare VAR_RESULT, TRUE - goto_if_eq CableClub_EventScript_AlreadyGotEonTicket - goto_if_set FLAG_ENABLE_SHIP_SOUTHERN_ISLAND, CableClub_EventScript_AlreadyGotEonTicket - msgbox Mevent_Text_TheresATicketForYou, MSGBOX_DEFAULT + checkitem ITEM_EON_TICKET + goto_if_eq VAR_RESULT, TRUE, CableClub_EventScript_TryWonderCardScript + goto_if_set FLAG_ENABLE_SHIP_SOUTHERN_ISLAND, CableClub_EventScript_TryWonderCardScript + msgbox MysteryGift_Text_TheresATicketForYou, MSGBOX_DEFAULT giveitem ITEM_EON_TICKET setflag FLAG_ENABLE_SHIP_SOUTHERN_ISLAND setvar VAR_DISTRIBUTE_EON_TICKET, 0 - msgbox Mevent_Text_TryUsingItAtLilycovePort, MSGBOX_DEFAULT + msgbox MysteryGift_Text_TryUsingItAtLilycovePort, MSGBOX_DEFAULT release end @@ -66,29 +60,20 @@ CableClub_OnWarp: .2byte 0 CableClub_EventScript_CheckTurnAttendant:: - compare VAR_0x8007, 0 - goto_if_eq CableClub_EventScript_DontTurnAttendant + goto_if_eq VAR_0x8007, 0, CableClub_EventScript_DontTurnAttendant turnobject VAR_0x8007, DIR_WEST CableClub_EventScript_DontTurnAttendant:: end CableClub_OnLoad: - compare VAR_CABLE_CLUB_STATE, USING_SINGLE_BATTLE - goto_if_eq CableClub_EventScript_OnLoadFromColosseum - compare VAR_CABLE_CLUB_STATE, USING_DOUBLE_BATTLE - goto_if_eq CableClub_EventScript_OnLoadFromColosseum - compare VAR_CABLE_CLUB_STATE, USING_MULTI_BATTLE - goto_if_eq CableClub_EventScript_OnLoadFromColosseum - compare VAR_CABLE_CLUB_STATE, USING_TRADE_CENTER - goto_if_eq CableClub_EventScript_OnLoadFromTradeCenter - compare VAR_CABLE_CLUB_STATE, USING_RECORD_CORNER - goto_if_eq CableClub_EventScript_OnLoadFromRecordCorner - compare VAR_CABLE_CLUB_STATE, USING_UNION_ROOM - goto_if_eq CableClub_EventScript_OnLoadFromUnionRoom - compare VAR_CABLE_CLUB_STATE, USING_BERRY_CRUSH - goto_if_eq CableClub_EventScript_OnLoadFromBerryCrush - compare VAR_CABLE_CLUB_STATE, USING_MINIGAME - goto_if_eq CableClub_EventScript_OnLoadFromGameCorner + goto_if_eq VAR_CABLE_CLUB_STATE, USING_SINGLE_BATTLE, CableClub_EventScript_OnLoadFromColosseum + goto_if_eq VAR_CABLE_CLUB_STATE, USING_DOUBLE_BATTLE, CableClub_EventScript_OnLoadFromColosseum + goto_if_eq VAR_CABLE_CLUB_STATE, USING_MULTI_BATTLE, CableClub_EventScript_OnLoadFromColosseum + goto_if_eq VAR_CABLE_CLUB_STATE, USING_TRADE_CENTER, CableClub_EventScript_OnLoadFromTradeCenter + goto_if_eq VAR_CABLE_CLUB_STATE, USING_RECORD_CORNER, CableClub_EventScript_OnLoadFromRecordCorner + goto_if_eq VAR_CABLE_CLUB_STATE, USING_UNION_ROOM, CableClub_EventScript_OnLoadFromUnionRoom + goto_if_eq VAR_CABLE_CLUB_STATE, USING_BERRY_CRUSH, CableClub_EventScript_OnLoadFromBerryCrush + goto_if_eq VAR_CABLE_CLUB_STATE, USING_MINIGAME, CableClub_EventScript_OnLoadFromGameCorner end CableClub_EventScript_OnLoadFromColosseum:: @@ -150,8 +135,7 @@ CableClub_EventScript_ExitMinigameRoom:: CableClub_EventScript_CloseLinkAndExitLinkRoom:: special CloseLink setvar VAR_CABLE_CLUB_STATE, 0 - compare VAR_0x8007, 0 - goto_if_eq CableClub_EventScript_PlayerExitLinkRoom + goto_if_eq VAR_0x8007, 0, CableClub_EventScript_PlayerExitLinkRoom applymovement VAR_0x8007, Movement_AttendantFaceLeft waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, Movement_PlayerExitLinkRoom @@ -173,8 +157,7 @@ CableClub_EventScript_ExitTradeCenter:: CableClub_EventScript_PlayerExitTradeCenter:: special CloseLink setvar VAR_CABLE_CLUB_STATE, 0 - compare VAR_0x8007, 0 - goto_if_eq CableClub_EventScript_PlayerExitLinkRoom + goto_if_eq VAR_0x8007, 0, CableClub_EventScript_PlayerExitLinkRoom applymovement OBJ_EVENT_ID_PLAYER, Movement_PlayerFaceAttendantRight waitmovement 0 applymovement VAR_0x8007, Movement_AttendantFaceLeft @@ -197,8 +180,7 @@ CableClub_EventScript_PlayerExitRecordCorner:: setvar VAR_CABLE_CLUB_STATE, 0 applymovement OBJ_EVENT_ID_PLAYER, Movement_PlayerExitLinkRoom waitmovement 0 - compare VAR_0x8007, 0 - goto_if_eq CableClub_EventScript_ExitRecordCornerRet + goto_if_eq VAR_0x8007, 0, CableClub_EventScript_ExitRecordCornerRet applymovement VAR_0x8007, Movement_AttendantFaceDown waitmovement 0 CableClub_EventScript_ExitRecordCornerRet:: @@ -216,8 +198,7 @@ CableClub_EventScript_ExitUnionRoom:: CableClub_EventScript_PlayerExitUnionRoom:: setvar VAR_CABLE_CLUB_STATE, 0 - compare VAR_0x8007, 0 - goto_if_eq CableClub_EventScript_PlayerExitLinkRoom + goto_if_eq VAR_0x8007, 0, CableClub_EventScript_PlayerExitLinkRoom applymovement OBJ_EVENT_ID_PLAYER, Movement_PlayerFaceAttendantRight waitmovement 0 applymovement VAR_0x8007, Movement_AttendantFaceLeft @@ -245,7 +226,7 @@ CableClub_EventScript_PlayerExitLinkRoom:: CableClub_EventScript_Tutorial:: lockall - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox CableClub_Text_FirstTimeRightThisWay, MSGBOX_DEFAULT closemessage @@ -325,8 +306,7 @@ CableClub_EventScript_SingleBattleMode:: CableClub_EventScript_DoubleBattleMode:: special HasEnoughMonsForDoubleBattle - compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS - goto_if_ne CableClub_EventScript_NeedTwoMonsForDoubleBattle + goto_if_ne VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS, CableClub_EventScript_NeedTwoMonsForDoubleBattle setvar VAR_0x8004, USING_DOUBLE_BATTLE goto CableClub_EventScript_TryEnterColosseum end @@ -343,24 +323,17 @@ CableClub_EventScript_MultiBattleMode:: CableClub_EventScript_TryEnterColosseum:: call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, 0, CableClub_EventScript_AbortLink message gText_PleaseWaitForLink waitmessage special TryBattleLinkup waitstate - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq CableClub_EventScript_EnterColosseum - compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY - goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady - compare VAR_RESULT, LINKUP_DIFF_SELECTIONS - goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections - compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS - goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfBattlers - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq CableClub_EventScript_AbortLink - compare VAR_RESULT, LINKUP_CONNECTION_ERROR - goto_if_eq CableClub_EventScript_AbortLinkConnectionError + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, CableClub_EventScript_EnterColosseum + goto_if_eq VAR_RESULT, LINKUP_SOMEONE_NOT_READY, CableClub_EventScript_AbortLinkSomeoneNotReady + goto_if_eq VAR_RESULT, LINKUP_DIFF_SELECTIONS, CableClub_EventScript_AbortLinkDifferentSelections + goto_if_eq VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS, CableClub_EventScript_AbortLinkIncorrectNumberOfBattlers + goto_if_eq VAR_RESULT, LINKUP_FAILED, CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, LINKUP_CONNECTION_ERROR, CableClub_EventScript_AbortLinkConnectionError end CableClub_EventScript_EnterColosseum:: @@ -387,10 +360,9 @@ CableClub_EventScript_EnterColosseum:: closedoor 9, 1 waitdooranim release - compare VAR_0x8004, USING_MULTI_BATTLE - goto_if_eq CableClub_EventScript_WarpTo4PColosseum + goto_if_eq VAR_0x8004, USING_MULTI_BATTLE, CableClub_EventScript_WarpTo4PColosseum special SetCableClubWarp - warp MAP_BATTLE_COLOSSEUM_2P, 255, 6, 8 + warp MAP_BATTLE_COLOSSEUM_2P, 6, 8 special DoCableClubWarp waitstate end @@ -403,7 +375,7 @@ CableClub_EventScript_PlayerApproachLinkRoomRight:: CableClub_EventScript_WarpTo4PColosseum:: special SetCableClubWarp - warp MAP_BATTLE_COLOSSEUM_4P, 255, 5, 8 + warp MAP_BATTLE_COLOSSEUM_4P, 5, 8 special DoCableClubWarp waitstate end @@ -443,31 +415,21 @@ CableClub_EventScript_ConfirmNumberAndRestart:: CableClub_EventScript_TradeCenter:: copyvar VAR_0x8007, VAR_LAST_TALKED call CableClub_EventScript_CheckPartyTradeRequirements - compare VAR_RESULT, 0 - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, 0, CableClub_EventScript_AbortLink call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, 0, CableClub_EventScript_AbortLink message gText_PleaseWaitForLink waitmessage special TryTradeLinkup waitstate - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq CableClub_EventScript_EnterTradeCenter - compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY - goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady - compare VAR_RESULT, LINKUP_DIFF_SELECTIONS - goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections - compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS - goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq CableClub_EventScript_AbortLink - compare VAR_RESULT, LINKUP_CONNECTION_ERROR - goto_if_eq CableClub_EventScript_AbortLinkConnectionError - compare VAR_RESULT, LINKUP_PLAYER_NOT_READY - goto_if_eq CableClub_EventScript_AbortLinkPlayerNotReady - compare VAR_RESULT, LINKUP_PARTNER_NOT_READY - goto_if_eq CableClub_EventScript_AbortLinkOtherTrainerNotReady + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, CableClub_EventScript_EnterTradeCenter + goto_if_eq VAR_RESULT, LINKUP_SOMEONE_NOT_READY, CableClub_EventScript_AbortLinkSomeoneNotReady + goto_if_eq VAR_RESULT, LINKUP_DIFF_SELECTIONS, CableClub_EventScript_AbortLinkDifferentSelections + goto_if_eq VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS, CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants + goto_if_eq VAR_RESULT, LINKUP_FAILED, CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, LINKUP_CONNECTION_ERROR, CableClub_EventScript_AbortLinkConnectionError + goto_if_eq VAR_RESULT, LINKUP_PLAYER_NOT_READY, CableClub_EventScript_AbortLinkPlayerNotReady + goto_if_eq VAR_RESULT, LINKUP_PARTNER_NOT_READY, CableClub_EventScript_AbortLinkOtherTrainerNotReady end CableClub_EventScript_EnterTradeCenter:: @@ -493,18 +455,16 @@ CableClub_EventScript_EnterTradeCenter:: waitdooranim release special SetCableClubWarp - setwarp MAP_TRADE_CENTER, 255, 5, 8 + setwarp MAP_TRADE_CENTER, 5, 8 special DoCableClubWarp waitstate end CableClub_EventScript_CheckPartyTradeRequirements:: specialvar VAR_RESULT, CalculatePlayerPartyCount - compare VAR_RESULT, 2 - goto_if_lt CableClub_EventScript_NeedTwoMonsToTrade + goto_if_lt VAR_RESULT, 2, CableClub_EventScript_NeedTwoMonsToTrade specialvar VAR_RESULT, DoesPartyHaveEnigmaBerry - compare VAR_RESULT, TRUE - goto_if_eq CableClub_EventScript_CantTradeEnigmaBerry + goto_if_eq VAR_RESULT, TRUE, CableClub_EventScript_CantTradeEnigmaBerry setvar VAR_RESULT, 1 return @@ -521,28 +481,20 @@ CableClub_EventScript_CantTradeEnigmaBerry:: CableClub_EventScript_RecordCorner:: copyvar VAR_0x8007, VAR_LAST_TALKED call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, 0, CableClub_EventScript_AbortLink message gText_PleaseWaitForLink waitmessage special TryRecordMixLinkup waitstate special ValidateMixingGameLanguage waitstate - compare VAR_RESULT, LINKUP_FOREIGN_GAME - goto_if_eq CableClub_EventScript_AbortLinkForeignGame - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq CableClub_EventScript_EnterRecordCorner - compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY - goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady - compare VAR_RESULT, LINKUP_DIFF_SELECTIONS - goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections - compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS - goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq CableClub_EventScript_AbortLink - compare VAR_RESULT, LINKUP_CONNECTION_ERROR - goto_if_eq CableClub_EventScript_AbortLinkConnectionError + goto_if_eq VAR_RESULT, LINKUP_FOREIGN_GAME, CableClub_EventScript_AbortLinkForeignGame + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, CableClub_EventScript_EnterRecordCorner + goto_if_eq VAR_RESULT, LINKUP_SOMEONE_NOT_READY, CableClub_EventScript_AbortLinkSomeoneNotReady + goto_if_eq VAR_RESULT, LINKUP_DIFF_SELECTIONS, CableClub_EventScript_AbortLinkDifferentSelections + goto_if_eq VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS, CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants + goto_if_eq VAR_RESULT, LINKUP_FAILED, CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, LINKUP_CONNECTION_ERROR, CableClub_EventScript_AbortLinkConnectionError end CableClub_EventScript_EnterRecordCorner:: @@ -568,7 +520,7 @@ CableClub_EventScript_EnterRecordCorner:: waitdooranim release special SetCableClubWarp - setwarp MAP_RECORD_CORNER, 255, 8, 9 + setwarp MAP_RECORD_CORNER, 8, 9 special DoCableClubWarp waitstate end @@ -726,8 +678,7 @@ EventScript_BattleColosseum_4P_PlayerSpot0:: fadescreen FADE_TO_BLACK special ChooseHalfPartyForBattle waitstate - compare VAR_RESULT, 0 - goto_if_eq EventScript_BattleColosseum_4P_CancelSpotTrigger + goto_if_eq VAR_RESULT, 0, EventScript_BattleColosseum_4P_CancelSpotTrigger setvar VAR_0x8005, 0 special ColosseumPlayerSpotTriggered waitstate @@ -737,8 +688,7 @@ EventScript_BattleColosseum_4P_PlayerSpot1:: fadescreen FADE_TO_BLACK special ChooseHalfPartyForBattle waitstate - compare VAR_RESULT, 0 - goto_if_eq EventScript_BattleColosseum_4P_CancelSpotTrigger + goto_if_eq VAR_RESULT, 0, EventScript_BattleColosseum_4P_CancelSpotTrigger setvar VAR_0x8005, 1 special ColosseumPlayerSpotTriggered waitstate @@ -748,8 +698,7 @@ EventScript_BattleColosseum_4P_PlayerSpot2:: fadescreen FADE_TO_BLACK special ChooseHalfPartyForBattle waitstate - compare VAR_RESULT, 0 - goto_if_eq EventScript_BattleColosseum_4P_CancelSpotTrigger + goto_if_eq VAR_RESULT, 0, EventScript_BattleColosseum_4P_CancelSpotTrigger setvar VAR_0x8005, 2 special ColosseumPlayerSpotTriggered waitstate @@ -759,8 +708,7 @@ EventScript_BattleColosseum_4P_PlayerSpot3:: fadescreen FADE_TO_BLACK special ChooseHalfPartyForBattle waitstate - compare VAR_RESULT, 0 - goto_if_eq EventScript_BattleColosseum_4P_CancelSpotTrigger + goto_if_eq VAR_RESULT, 0, EventScript_BattleColosseum_4P_CancelSpotTrigger setvar VAR_0x8005, 3 special ColosseumPlayerSpotTriggered waitstate @@ -800,36 +748,32 @@ EventScript_RecordCenter_Spot0:: setvar VAR_0x8005, 0 special RecordMixingPlayerSpotTriggered waitstate - compare VAR_TEMP_1, ITEM_NONE - goto_if_ne RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end EventScript_RecordCenter_Spot1:: setvar VAR_0x8005, 1 special RecordMixingPlayerSpotTriggered waitstate - compare VAR_TEMP_1, ITEM_NONE - goto_if_ne RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end EventScript_RecordCenter_Spot2:: setvar VAR_0x8005, 2 special RecordMixingPlayerSpotTriggered waitstate - compare VAR_TEMP_1, ITEM_NONE - goto_if_ne RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end EventScript_RecordCenter_Spot3:: setvar VAR_0x8005, 3 special RecordMixingPlayerSpotTriggered waitstate - compare VAR_TEMP_1, ITEM_NONE - goto_if_ne RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end RecordCorner_EventScript_ReceivedGiftItem:: - bufferitemname 1, VAR_TEMP_1 + bufferitemname STR_VAR_2, VAR_TEMP_1 message RecordCorner_Text_PlayerSentOverOneX waitmessage waitbuttonpress @@ -870,8 +814,7 @@ TradeCenter_EventScript_Attendant:: end RecordCorner_EventScript_Attendant:: - compare VAR_TEMP_0, 0 - goto_if_ne RecordCorner_EventScript_AlreadyMixed + goto_if_ne VAR_TEMP_0, 0, RecordCorner_EventScript_AlreadyMixed special Script_FacePlayer message RecordCorner_Text_TakeSeatAndWait waitmessage @@ -891,8 +834,7 @@ RecordCorner_EventScript_AlreadyMixed:: EventScript_ConfirmLeaveCableClubRoom:: msgbox Text_TerminateLinkConfirmation, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq EventScript_TerminateLink + goto_if_eq VAR_RESULT, YES, EventScript_TerminateLink erasebox 0, 0, 29, 19 releaseall end @@ -915,12 +857,10 @@ CableClub_EventScript_UnionRoomAttendant:: setvar VAR_FRONTIER_FACILITY, FACILITY_UNION_ROOM goto_if_unset FLAG_SYS_POKEDEX_GET, CableClub_EventScript_WirelessClubAdjustements specialvar VAR_RESULT, IsBadEggInParty - compare VAR_RESULT, TRUE - goto_if_eq CableClub_EventScript_AbortLinkPlayerHasBadEgg + goto_if_eq VAR_RESULT, TRUE, CableClub_EventScript_AbortLinkPlayerHasBadEgg copyvar VAR_0x8007, VAR_LAST_TALKED specialvar VAR_RESULT, IsWirelessAdapterConnected - compare VAR_RESULT, FALSE - goto_if_eq CableClub_EventScript_UnionRoomAdapterNotConnected + goto_if_eq VAR_RESULT, FALSE, CableClub_EventScript_UnionRoomAdapterNotConnected message CableClub_Text_WelcomeUnionRoomEnter waitmessage goto CableClub_EventScript_UnionRoomSelect @@ -943,11 +883,9 @@ CableClub_EventScript_UnionRoomInfo:: CableClub_EventScript_EnterUnionRoom:: call CableClub_EventScript_CheckPartyUnionRoomRequirements - compare VAR_RESULT, 0 - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, 0, CableClub_EventScript_AbortLink call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, 0, CableClub_EventScript_AbortLink msgbox CableClub_Text_EnjoyUnionRoom, MSGBOX_DEFAULT closemessage special HealPlayerParty @@ -970,7 +908,7 @@ CableClub_EventScript_EnterUnionRoom:: waitdooranim special Script_ResetUnionRoomTrade special SetCableClubWarp - warpteleport2 MAP_UNION_ROOM, 255, 7, 11 + warpspinenter MAP_UNION_ROOM, 7, 11 waitstate special RunUnionRoom waitstate @@ -978,11 +916,9 @@ CableClub_EventScript_EnterUnionRoom:: CableClub_EventScript_CheckPartyUnionRoomRequirements:: specialvar VAR_RESULT, CountPartyNonEggMons - compare VAR_RESULT, 2 - goto_if_lt CableClub_EventScript_NeedTwoMonsForUnionRoom + goto_if_lt VAR_RESULT, 2, CableClub_EventScript_NeedTwoMonsForUnionRoom specialvar VAR_RESULT, DoesPartyHaveEnigmaBerry - compare VAR_RESULT, TRUE - goto_if_eq CableClub_EventScript_NoEnigmaBerryInUnionRoom + goto_if_eq VAR_RESULT, TRUE, CableClub_EventScript_NoEnigmaBerryInUnionRoom setvar VAR_RESULT, 1 return @@ -1006,8 +942,7 @@ CableClub_EventScript_WirelessClubAttendant:: faceplayer goto_if_unset FLAG_SYS_POKEDEX_GET, CableClub_EventScript_WirelessClubAdjustements msgbox CableClub_Text_AskAboutLinking, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq CableClub_EventScript_DontAskAboutLinking + goto_if_eq VAR_RESULT, NO, CableClub_EventScript_DontAskAboutLinking msgbox CableClub_Text_ExplainWirelessClub, MSGBOX_DEFAULT release return @@ -1023,11 +958,9 @@ CableClub_EventScript_DirectCornerAttendant:: setvar VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER @ Set preemptively for multi battles, ignored otherwise goto_if_unset FLAG_SYS_POKEDEX_GET, CableClub_EventScript_WirelessClubAdjustements specialvar VAR_RESULT, IsBadEggInParty - compare VAR_RESULT, TRUE - goto_if_eq CableClub_EventScript_AbortLinkPlayerHasBadEgg + goto_if_eq VAR_RESULT, TRUE, CableClub_EventScript_AbortLinkPlayerHasBadEgg specialvar VAR_RESULT, IsWirelessAdapterConnected - compare VAR_RESULT, FALSE - goto_if_eq CableClub_EventScript_WelcomeToCableClub + goto_if_eq VAR_RESULT, FALSE, CableClub_EventScript_WelcomeToCableClub message CableClub_Text_WelcomeWhichDirectCornerRoom waitmessage delay 28 @@ -1035,9 +968,8 @@ CableClub_EventScript_DirectCornerAttendant:: end CableClub_EventScript_DirectCornerSelectService:: - checkitem ITEM_POWDER_JAR, 1 - compare VAR_RESULT, FALSE - goto_if_eq CableClub_EventScript_DirectCornerNoBerry + checkitem ITEM_POWDER_JAR + goto_if_eq VAR_RESULT, FALSE, CableClub_EventScript_DirectCornerNoBerry goto_if_set FLAG_VISITED_MAUVILLE_CITY, CableClub_EventScript_DirectCornerSelectAllServices multichoice 0, 0, MULTI_WIRELESS_NO_RECORD, FALSE switch VAR_RESULT @@ -1081,11 +1013,9 @@ CableClub_EventScript_DirectCornerHasRecordMix:: CableClub_EventScript_WirelessTrade:: msgbox CableClub_Text_TradePokemon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, NO, CableClub_EventScript_AbortLink call CableClub_EventScript_CheckPartyTradeRequirements - compare VAR_RESULT, 0 - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, 0, CableClub_EventScript_AbortLink setvar VAR_0x8004, LINK_GROUP_TRADE goto CableClub_EventScript_SaveAndChooseLinkLeader end @@ -1110,8 +1040,7 @@ CableClub_EventScript_WirelessSingleBattle:: CableClub_EventScript_WirelessDoubleBattle:: special HasEnoughMonsForDoubleBattle - compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS - goto_if_ne CableClub_EventScript_TwoMonsNeededForWirelessDoubleBattle + goto_if_ne VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS, CableClub_EventScript_TwoMonsNeededForWirelessDoubleBattle setvar VAR_0x8004, LINK_GROUP_DOUBLE_BATTLE goto CableClub_EventScript_SaveAndChooseLinkLeader end @@ -1133,19 +1062,16 @@ CableClub_EventScript_WirelessBattleInfo:: CableClub_EventScript_WirelessRecordMix:: msgbox CableClub_Text_AccessRecordCorner, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, NO, CableClub_EventScript_AbortLink setvar VAR_0x8004, LINK_GROUP_RECORD_CORNER goto CableClub_EventScript_SaveAndChooseLinkLeader end CableClub_EventScript_WirelessBerryCrush:: msgbox CableClub_Text_UseBerryCrush, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, NO, CableClub_EventScript_AbortLink special HasAtLeastOneBerry - compare VAR_RESULT, FALSE - goto_if_eq CableClub_EventScript_NeedBerryForBerryCrush + goto_if_eq VAR_RESULT, FALSE, CableClub_EventScript_NeedBerryForBerryCrush setvar VAR_0x8004, LINK_GROUP_BERRY_CRUSH goto CableClub_EventScript_SaveAndChooseLinkLeader end @@ -1157,8 +1083,7 @@ CableClub_EventScript_NeedBerryForBerryCrush:: CableClub_EventScript_SaveAndChooseLinkLeader:: call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq CableClub_EventScript_AbortLink + goto_if_eq VAR_RESULT, 0, CableClub_EventScript_AbortLink switch VAR_0x8004 case LINK_GROUP_TRADE, CableClub_EventScript_ChooseLinkLeaderFrom2 case LINK_GROUP_SINGLE_BATTLE, CableClub_EventScript_ChooseLinkLeaderFrom2 @@ -1181,23 +1106,17 @@ CableClub_EventScript_ChooseLinkLeaderFrom2:: CableClub_EventScript_TryLeadGroup2Players:: call CableClub_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2 - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq CableClub_EventScript_TryLeadGroup2Players + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, CableClub_EventScript_EnterWirelessLinkRoom + goto_if_eq VAR_RESULT, LINKUP_FAILED, CableClub_EventScript_ChooseLinkLeaderFrom2 + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, CableClub_EventScript_TryLeadGroup2Players release return CableClub_EventScript_TryJoinGroup2Players:: call CableClub_EventScript_TryJoinLinkGroup - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2 - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq CableClub_EventScript_TryJoinGroup2Players + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, CableClub_EventScript_EnterWirelessLinkRoom + goto_if_eq VAR_RESULT, LINKUP_FAILED, CableClub_EventScript_ChooseLinkLeaderFrom2 + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, CableClub_EventScript_TryJoinGroup2Players release return @@ -1214,23 +1133,17 @@ CableClub_EventScript_ChooseLinkLeaderFrom4:: CableClub_EventScript_TryLeadGroup4Players:: call CableClub_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4 - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq CableClub_EventScript_TryLeadGroup4Players + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, CableClub_EventScript_EnterWirelessLinkRoom + goto_if_eq VAR_RESULT, LINKUP_FAILED, CableClub_EventScript_ChooseLinkLeaderFrom4 + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, CableClub_EventScript_TryLeadGroup4Players release return CableClub_EventScript_TryJoinGroup4Players:: call CableClub_EventScript_TryJoinLinkGroup - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4 - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq CableClub_EventScript_TryJoinGroup4Players + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, CableClub_EventScript_EnterWirelessLinkRoom + goto_if_eq VAR_RESULT, LINKUP_FAILED, CableClub_EventScript_ChooseLinkLeaderFrom4 + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, CableClub_EventScript_TryJoinGroup4Players release return @@ -1247,23 +1160,17 @@ CableClub_EventScript_ChooseLinkLeader:: CableClub_EventScript_TryLeadGroupXPlayers:: call CableClub_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq CableClub_EventScript_ChooseLinkLeader - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq CableClub_EventScript_TryLeadGroupXPlayers + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, CableClub_EventScript_EnterWirelessLinkRoom + goto_if_eq VAR_RESULT, LINKUP_FAILED, CableClub_EventScript_ChooseLinkLeader + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, CableClub_EventScript_TryLeadGroupXPlayers release return CableClub_EventScript_TryJoinGroupXPlayers:: call CableClub_EventScript_TryJoinLinkGroup - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq CableClub_EventScript_ChooseLinkLeader - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq CableClub_EventScript_TryJoinGroupXPlayers + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, CableClub_EventScript_EnterWirelessLinkRoom + goto_if_eq VAR_RESULT, LINKUP_FAILED, CableClub_EventScript_ChooseLinkLeader + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, CableClub_EventScript_TryJoinGroupXPlayers release return @@ -1307,8 +1214,7 @@ EventScript_WirelessBoxResults:: lockall goto_if_unset FLAG_SYS_POKEDEX_GET, CableClub_EventScript_NotReadyYet specialvar VAR_RESULT, IsWirelessAdapterConnected - compare VAR_RESULT, FALSE - goto_if_eq CableClub_EventScript_AdapterNotConnected + goto_if_eq VAR_RESULT, FALSE, CableClub_EventScript_AdapterNotConnected fadescreen FADE_TO_BLACK special ShowWirelessCommunicationScreen waitstate @@ -1322,33 +1228,33 @@ CableClub_EventScript_AdapterNotConnected:: end CableClub_EventScript_OpenUnionRoomBarrier:: - setmetatile 5, 2, METATILE_PokemonCenter_Floor_ShadowTop_Alt, 0 - setmetatile 5, 3, METATILE_PokemonCenter_Floor_Plain_Alt, 0 + setmetatile 5, 2, METATILE_PokemonCenter_Floor_ShadowTop_Alt, FALSE + setmetatile 5, 3, METATILE_PokemonCenter_Floor_Plain_Alt, FALSE return CableClub_EventScript_CloseUnionRoomBarrier:: - setmetatile 5, 2, METATILE_PokemonCenter_Floor_ShadowTop, 1 - setmetatile 5, 3, METATILE_PokemonCenter_CounterBarrier, 1 + setmetatile 5, 2, METATILE_PokemonCenter_Floor_ShadowTop, TRUE + setmetatile 5, 3, METATILE_PokemonCenter_CounterBarrier, TRUE return CableClub_EventScript_OpenDirectCornerBarrier:: - setmetatile 9, 2, METATILE_PokemonCenter_Floor_ShadowTop_Alt, 0 - setmetatile 9, 3, METATILE_PokemonCenter_Floor_Plain_Alt, 0 + setmetatile 9, 2, METATILE_PokemonCenter_Floor_ShadowTop_Alt, FALSE + setmetatile 9, 3, METATILE_PokemonCenter_Floor_Plain_Alt, FALSE return CableClub_EventScript_CloseDirectCornerBarrier:: - setmetatile 9, 2, METATILE_PokemonCenter_Floor_ShadowTop, 1 - setmetatile 9, 3, METATILE_PokemonCenter_CounterBarrier, 1 + setmetatile 9, 2, METATILE_PokemonCenter_Floor_ShadowTop, TRUE + setmetatile 9, 3, METATILE_PokemonCenter_CounterBarrier, TRUE return EventScript_OpenMossdeepGameCornerBarrier:: - setmetatile 5, 2, METATILE_MossdeepGameCorner_CounterOpen_Top, 0 - setmetatile 5, 3, METATILE_MossdeepGameCorner_CounterOpen_Bottom, 0 + setmetatile 5, 2, METATILE_MossdeepGameCorner_CounterOpen_Top, FALSE + setmetatile 5, 3, METATILE_MossdeepGameCorner_CounterOpen_Bottom, FALSE return EventScript_CloseMossdeepGameCornerBarrier:: - setmetatile 5, 2, METATILE_MossdeepGameCorner_CounterClosed_Top, 1 - setmetatile 5, 3, METATILE_MossdeepGameCorner_CounterClosed_Bottom, 1 + setmetatile 5, 2, METATILE_MossdeepGameCorner_CounterClosed_Top, TRUE + setmetatile 5, 3, METATILE_MossdeepGameCorner_CounterClosed_Bottom, TRUE return CableClub_OnResume: @@ -1389,8 +1295,7 @@ MossdeepCity_GameCorner_1F_EventScript_OldMan2:: message MossdeepCity_GameCorner_1F_Text_WelcomeCanYouWait waitmessage specialvar VAR_RESULT, IsWirelessAdapterConnected - compare VAR_RESULT, FALSE - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_AdapterNotConnected + goto_if_eq VAR_RESULT, FALSE, MossdeepCity_GameCorner_1F_EventScript_AdapterNotConnected delay 60 message MossdeepCity_GameCorner_1F_Text_PlayWhichGame waitmessage @@ -1405,18 +1310,15 @@ MossdeepCity_GameCorner_1F_EventScript_OldMan2:: MossdeepCity_GameCorner_1F_EventScript_PlayPokemonJump:: setvar VAR_0x8005, 0 special IsPokemonJumpSpeciesInParty - compare VAR_RESULT, FALSE - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_DontHaveRequiredMon + goto_if_eq VAR_RESULT, FALSE, MossdeepCity_GameCorner_1F_EventScript_DontHaveRequiredMon msgbox MossdeepCity_GameCorner_1F_Text_EnterWhichPokemon, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK setvar VAR_0x8005, 0 special ChooseMonForWirelessMinigame waitstate - compare VAR_0x8004, PARTY_SIZE - goto_if_ge MossdeepCity_GameCorner_1F_EventScript_AbortMinigame + goto_if_ge VAR_0x8004, PARTY_SIZE, MossdeepCity_GameCorner_1F_EventScript_AbortMinigame call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_AbortMinigame + goto_if_eq VAR_RESULT, 0, MossdeepCity_GameCorner_1F_EventScript_AbortMinigame setvar VAR_0x8004, LINK_GROUP_POKEMON_JUMP goto MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader end @@ -1424,18 +1326,15 @@ MossdeepCity_GameCorner_1F_EventScript_PlayPokemonJump:: MossdeepCity_GameCorner_1F_EventScript_PlayDodrioBerryPicking:: setvar VAR_0x8005, 1 special IsDodrioInParty - compare VAR_RESULT, FALSE - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_DontHaveRequiredMon + goto_if_eq VAR_RESULT, FALSE, MossdeepCity_GameCorner_1F_EventScript_DontHaveRequiredMon msgbox MossdeepCity_GameCorner_1F_Text_EnterWhichPokemon, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK setvar VAR_0x8005, 1 special ChooseMonForWirelessMinigame waitstate - compare VAR_0x8004, PARTY_SIZE - goto_if_ge MossdeepCity_GameCorner_1F_EventScript_AbortMinigame + goto_if_ge VAR_0x8004, PARTY_SIZE, MossdeepCity_GameCorner_1F_EventScript_AbortMinigame call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_AbortMinigame + goto_if_eq VAR_RESULT, 0, MossdeepCity_GameCorner_1F_EventScript_AbortMinigame setvar VAR_0x8004, LINK_GROUP_BERRY_PICKING goto MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader end @@ -1453,23 +1352,17 @@ MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader:: MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader:: call CableClub_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom + goto_if_eq VAR_RESULT, LINKUP_FAILED, MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader release return MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup:: call CableClub_EventScript_TryJoinLinkGroup - compare VAR_RESULT, LINKUP_SUCCESS - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom - compare VAR_RESULT, LINKUP_FAILED - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader - compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup + goto_if_eq VAR_RESULT, LINKUP_SUCCESS, MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom + goto_if_eq VAR_RESULT, LINKUP_FAILED, MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader + goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup release return @@ -1501,12 +1394,9 @@ MossdeepCity_GameCorner_1F_EventScript_AdapterNotConnected:: MossdeepCity_GameCorner_1F_EventScript_DontHaveRequiredMon:: msgbox MossdeepCity_GameCorner_1F_Text_ExplainRequiredMon, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MossdeepCity_GameCorner_1F_EventScript_AbortMinigame - compare VAR_0x8005, 0 - call_if_eq MossdeepCity_GameCorner_1F_EventScript_ExplainPokemonJumpRequirements - compare VAR_0x8005, 1 - call_if_eq MossdeepCity_GameCorner_1F_EventScript_ExplainDodrioBerryPickingRequirements + goto_if_eq VAR_RESULT, NO, MossdeepCity_GameCorner_1F_EventScript_AbortMinigame + call_if_eq VAR_0x8005, 0, MossdeepCity_GameCorner_1F_EventScript_ExplainPokemonJumpRequirements + call_if_eq VAR_0x8005, 1, MossdeepCity_GameCorner_1F_EventScript_ExplainDodrioBerryPickingRequirements goto MossdeepCity_GameCorner_1F_EventScript_AbortMinigame end diff --git a/data/scripts/cave_of_origin.inc b/data/scripts/cave_of_origin.inc index abffd07ff1..6773c06624 100644 --- a/data/scripts/cave_of_origin.inc +++ b/data/scripts/cave_of_origin.inc @@ -2,7 +2,7 @@ CaveOfOrigin_EventScript_LegendaryCry:: lockall waitse - playmoncry SPECIES_KYOGRE, 2 @ SPECIES_GROUDON in Ruby + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER @ SPECIES_GROUDON in Ruby waitmoncry setvar VAR_TEMP_5, 1 releaseall diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 0d9e023371..04c62a6de3 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -18,8 +18,7 @@ LilycoveCity_ContestLobby_EventScript_SpeakToContestReceptionist:: lock faceplayer - compare VAR_CONTEST_PRIZE_PICKUP, 0 - goto_if_ne LilycoveCity_ContestLobby_EventScript_PickUpPrize + goto_if_ne VAR_CONTEST_PRIZE_PICKUP, 0, LilycoveCity_ContestLobby_EventScript_PickUpPrize call_if_set FLAG_RECEIVED_POKEBLOCK_CASE, LilycoveCity_ContestLobby_EventScript_ReceptionWelcome call_if_unset FLAG_RECEIVED_POKEBLOCK_CASE, LilycoveCity_ContestLobby_EventScript_GivePokeblockCase goto LilycoveCity_ContestLobby_EventScript_AskEnterContest @@ -44,8 +43,7 @@ LilycoveCity_ContestLobby_EventScript_PickUpPrize:: LilycoveCity_ContestLobby_EventScript_GiveLuxuryBallAtCounter:: giveitem ITEM_LUXURY_BALL - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_ContestLobby_EventScript_NoRoomForLuxuryBallAtCounter + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_ContestLobby_EventScript_NoRoomForLuxuryBallAtCounter setvar VAR_CONTEST_PRIZE_PICKUP, 0 closemessage release @@ -103,19 +101,13 @@ LilycoveCity_ContestLobby_EventScript_CancelEnterContest:: LilycoveCity_ContestLobby_EventScript_ChooseContestMon:: msgbox LilycoveCity_ContestLobby_Text_EnterWhichPokemon1, MSGBOX_DEFAULT choosecontestmon - compare VAR_0x8004, 255 - goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelEnterContest + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, LilycoveCity_ContestLobby_EventScript_CancelEnterContest special TryEnterContestMon - compare VAR_RESULT, CANT_ENTER_CONTEST - goto_if_eq LilycoveCity_ContestLobby_EventScript_CantEnterLowRank - compare VAR_RESULT, CAN_ENTER_CONTEST_EQUAL_RANK - goto_if_eq LilycoveCity_ContestLobby_EventScript_EnterMon - compare VAR_RESULT, CAN_ENTER_CONTEST_HIGH_RANK - goto_if_eq LilycoveCity_ContestLobby_EventScript_ConfirmEntryAlreadyWon - compare VAR_RESULT, CANT_ENTER_CONTEST_EGG - goto_if_eq LilycoveCity_ContestLobby_EventScript_CantEnterEgg - compare VAR_RESULT, CANT_ENTER_CONTEST_FAINTED - goto_if_eq LilycoveCity_ContestLobby_EventScript_CantEnterFainted + goto_if_eq VAR_RESULT, CANT_ENTER_CONTEST, LilycoveCity_ContestLobby_EventScript_CantEnterLowRank + goto_if_eq VAR_RESULT, CAN_ENTER_CONTEST_EQUAL_RANK, LilycoveCity_ContestLobby_EventScript_EnterMon + goto_if_eq VAR_RESULT, CAN_ENTER_CONTEST_HIGH_RANK, LilycoveCity_ContestLobby_EventScript_ConfirmEntryAlreadyWon + goto_if_eq VAR_RESULT, CANT_ENTER_CONTEST_EGG, LilycoveCity_ContestLobby_EventScript_CantEnterEgg + goto_if_eq VAR_RESULT, CANT_ENTER_CONTEST_FAINTED, LilycoveCity_ContestLobby_EventScript_CantEnterFainted end LilycoveCity_ContestLobby_EventScript_ChooseContestRank:: @@ -283,8 +275,8 @@ ContestHall_EventScript_GetCategoryTough:: return ContestHall_EventScript_ContestGettingStarted:: - buffercontesttypestring 1, VAR_0x8008 - bufferstdstring 2, VAR_0x8009 + buffercontestname STR_VAR_2, VAR_0x8008 + bufferstdstring STR_VAR_3, VAR_0x8009 call ContestHall_EventScript_GettingStarted lockall applymovement LOCALID_MC, ContestHall_Movement_MCBackUp @@ -293,8 +285,7 @@ ContestHall_EventScript_ContestGettingStarted:: return ContestHall_EventScript_GettingStarted:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_GettingStartedLink + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_GettingStartedLink lockall msgbox ContestHall_Text_GettingStartedParticipantsAsFollows, MSGBOX_DEFAULT releaseall @@ -302,8 +293,7 @@ ContestHall_EventScript_GettingStarted:: ContestHall_EventScript_GettingStartedLink:: specialvar VAR_RESULT, IsWirelessContest - compare VAR_RESULT, TRUE - goto_if_eq ContestHall_EventScript_GettingStartedWireless + goto_if_eq VAR_RESULT, TRUE, ContestHall_EventScript_GettingStartedWireless messageautoscroll ContestHall_Text_GettingStartedParticipantsAsFollowsLink waitmessage return @@ -326,16 +316,14 @@ ContestHall_EventScript_ShowContestMons:: call ContestHall_EventScript_TryWaitForLink call ContestHall_EventScript_TryWaitForLink addvar VAR_0x8006, 1 - compare VAR_0x8006, CONTESTANT_COUNT - goto_if_ne ContestHall_EventScript_ShowContestMons + goto_if_ne VAR_0x8006, CONTESTANT_COUNT, ContestHall_EventScript_ShowContestMons call ContestHall_EventScript_AudienceVote setvar VAR_TEMP_1, 6 return ContestHall_EventScript_TryWaitForLink:: specialvar VAR_RESULT, IsWirelessContest - compare VAR_RESULT, TRUE - goto_if_eq ContestHall_EventScript_WaitForLink + goto_if_eq VAR_RESULT, TRUE, ContestHall_EventScript_WaitForLink return ContestHall_EventScript_WaitForLink:: @@ -344,14 +332,10 @@ ContestHall_EventScript_WaitForLink:: return ContestHall_EventScript_ContestantWalkToCenter:: - compare VAR_0x8006, 0 - goto_if_eq ContestHall_EventScript_Player1WalkToCenter - compare VAR_0x8006, 1 - goto_if_eq ContestHall_EventScript_Player2WalkToCenter - compare VAR_0x8006, 2 - goto_if_eq ContestHall_EventScript_Player3WalkToCenter - compare VAR_0x8006, 3 - goto_if_eq ContestHall_EventScript_Player4WalkToCenter + goto_if_eq VAR_0x8006, 0, ContestHall_EventScript_Player1WalkToCenter + goto_if_eq VAR_0x8006, 1, ContestHall_EventScript_Player2WalkToCenter + goto_if_eq VAR_0x8006, 2, ContestHall_EventScript_Player3WalkToCenter + goto_if_eq VAR_0x8006, 3, ContestHall_EventScript_Player4WalkToCenter return ContestHall_EventScript_Player1WalkToCenter:: @@ -393,7 +377,7 @@ ContestHall_EventScript_Player4WalkToCenter:: ContestHall_EventScript_ShowContestMonPic:: special BufferContestTrainerAndMonNames addvar VAR_0x8006, 1 - buffernumberstring 1, VAR_0x8006 + buffernumberstring STR_VAR_2, VAR_0x8006 lockall applymovement VAR_0x800B, ContestHall_Movement_ContestantDelay32 waitmovement 0 @@ -413,8 +397,7 @@ ContestHall_EventScript_ShowContestMonPic:: return ContestHall_EventScript_EntryXTrainersMon:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_EntryXTrainersMonLink + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_EntryXTrainersMonLink message ContestHall_Text_EntryXTrainersMon waitmessage return @@ -441,15 +424,13 @@ ContestHall_EventScript_AudienceVote:: return ContestHall_EventScript_AudienceWillVote:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_AudienceWillVoteLink + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_AudienceWillVoteLink msgbox ContestHall_Text_SeenContestantsAudienceWillVote, MSGBOX_DEFAULT return ContestHall_EventScript_AudienceWillVoteLink:: specialvar VAR_RESULT, IsWirelessContest - compare VAR_RESULT, TRUE - goto_if_eq ContestHall_EventScript_AudienceWillVoteWireless + goto_if_eq VAR_RESULT, TRUE, ContestHall_EventScript_AudienceWillVoteWireless messageautoscroll ContestHall_Text_SeenContestantsAudienceWillVote waitmessage return @@ -467,8 +448,7 @@ ContestHall_EventScript_AudienceWillVoteWireless:: return ContestHall_EventScript_VotingUnderWay:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_VotingUnderWayLink + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_VotingUnderWayLink message ContestHall_Text_VotingUnderWay return @@ -510,16 +490,11 @@ ContestHall_EventScript_AudienceReactToContestant:: @ and are set to 9 if they havent displayed a heart yet, and 1 if they have ContestHall_EventScript_AudienceHeartEmotes:: special GetContestMonCondition - compare VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_NORMAL - call_if_eq ContestHall_EventScript_GetNumberOfHeartsNormal - compare VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_SUPER - call_if_eq ContestHall_EventScript_GetNumberOfHeartsSuper - compare VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_HYPER - call_if_eq ContestHall_EventScript_GetNumberOfHeartsHyper - compare VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_MASTER - call_if_eq ContestHall_EventScript_GetNumberOfHeartsMaster - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - call_if_eq ContestHall_EventScript_GetNumberOfHeartsLink + call_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_NORMAL, ContestHall_EventScript_GetNumberOfHeartsNormal + call_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_SUPER, ContestHall_EventScript_GetNumberOfHeartsSuper + call_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_HYPER, ContestHall_EventScript_GetNumberOfHeartsHyper + call_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_MASTER, ContestHall_EventScript_GetNumberOfHeartsMaster + call_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_GetNumberOfHeartsLink setvar VAR_TEMP_1, 9 setvar VAR_TEMP_2, 9 setvar VAR_TEMP_3, 9 @@ -528,8 +503,7 @@ ContestHall_EventScript_AudienceHeartEmotes:: setvar VAR_TEMP_6, 9 setvar VAR_TEMP_7, 9 setvar VAR_TEMP_8, 9 - compare VAR_TEMP_0, 0 - call_if_gt ContestHall_EventScript_DisplayHearts + call_if_gt VAR_TEMP_0, 0, ContestHall_EventScript_DisplayHearts setvar VAR_TEMP_1, 0 setvar VAR_TEMP_2, 0 setvar VAR_TEMP_3, 0 @@ -543,124 +517,75 @@ ContestHall_EventScript_AudienceHeartEmotes:: ContestHall_EventScript_DisplayHearts:: setvar VAR_RESULT, 8 special GenerateContestRand - compare VAR_RESULT, 0 - call_if_eq ContestHall_EventScript_TryDisplayHeartAudienceMember1 - compare VAR_RESULT, 1 - call_if_eq ContestHall_EventScript_TryDisplayHeartAudienceMember2 - compare VAR_RESULT, 2 - call_if_eq ContestHall_EventScript_TryDisplayHeartAudienceMember3 - compare VAR_RESULT, 3 - call_if_eq ContestHall_EventScript_TryDisplayHeartAudienceMember4 - compare VAR_RESULT, 4 - call_if_eq ContestHall_EventScript_TryDisplayHeartAudienceMember5 - compare VAR_RESULT, 5 - call_if_eq ContestHall_EventScript_TryDisplayHeartAudienceMember6 - compare VAR_RESULT, 6 - call_if_eq ContestHall_EventScript_TryDisplayHeartAudienceMember7 - compare VAR_RESULT, 7 - call_if_eq ContestHall_EventScript_TryDisplayHeartAudienceMember8 - compare VAR_TEMP_0, 0 @ Still more hearts to display - goto_if_gt ContestHall_EventScript_DisplayHearts + call_if_eq VAR_RESULT, 0, ContestHall_EventScript_TryDisplayHeartAudienceMember1 + call_if_eq VAR_RESULT, 1, ContestHall_EventScript_TryDisplayHeartAudienceMember2 + call_if_eq VAR_RESULT, 2, ContestHall_EventScript_TryDisplayHeartAudienceMember3 + call_if_eq VAR_RESULT, 3, ContestHall_EventScript_TryDisplayHeartAudienceMember4 + call_if_eq VAR_RESULT, 4, ContestHall_EventScript_TryDisplayHeartAudienceMember5 + call_if_eq VAR_RESULT, 5, ContestHall_EventScript_TryDisplayHeartAudienceMember6 + call_if_eq VAR_RESULT, 6, ContestHall_EventScript_TryDisplayHeartAudienceMember7 + call_if_eq VAR_RESULT, 7, ContestHall_EventScript_TryDisplayHeartAudienceMember8 + goto_if_gt VAR_TEMP_0, 0, ContestHall_EventScript_DisplayHearts @ Still more hearts to display waitmovement 0 return ContestHall_EventScript_GetNumberOfHeartsNormal:: - compare VAR_0x8004, 80 - goto_if_gt ContestHall_EventScript_Set8Hearts - compare VAR_0x8004, 70 - goto_if_gt ContestHall_EventScript_Set7Hearts - compare VAR_0x8004, 60 - goto_if_gt ContestHall_EventScript_Set6Hearts - compare VAR_0x8004, 50 - goto_if_gt ContestHall_EventScript_Set5Hearts - compare VAR_0x8004, 40 - goto_if_gt ContestHall_EventScript_Set4Hearts - compare VAR_0x8004, 30 - goto_if_gt ContestHall_EventScript_Set3Hearts - compare VAR_0x8004, 20 - goto_if_gt ContestHall_EventScript_Set2Hearts - compare VAR_0x8004, 10 - goto_if_gt ContestHall_EventScript_Set1Heart + goto_if_gt VAR_0x8004, 80, ContestHall_EventScript_Set8Hearts + goto_if_gt VAR_0x8004, 70, ContestHall_EventScript_Set7Hearts + goto_if_gt VAR_0x8004, 60, ContestHall_EventScript_Set6Hearts + goto_if_gt VAR_0x8004, 50, ContestHall_EventScript_Set5Hearts + goto_if_gt VAR_0x8004, 40, ContestHall_EventScript_Set4Hearts + goto_if_gt VAR_0x8004, 30, ContestHall_EventScript_Set3Hearts + goto_if_gt VAR_0x8004, 20, ContestHall_EventScript_Set2Hearts + goto_if_gt VAR_0x8004, 10, ContestHall_EventScript_Set1Heart setvar VAR_TEMP_0, 0 return ContestHall_EventScript_GetNumberOfHeartsSuper:: - compare VAR_0x8004, 230 - goto_if_gt ContestHall_EventScript_Set8Hearts - compare VAR_0x8004, 210 - goto_if_gt ContestHall_EventScript_Set7Hearts - compare VAR_0x8004, 190 - goto_if_gt ContestHall_EventScript_Set6Hearts - compare VAR_0x8004, 170 - goto_if_gt ContestHall_EventScript_Set5Hearts - compare VAR_0x8004, 150 - goto_if_gt ContestHall_EventScript_Set4Hearts - compare VAR_0x8004, 130 - goto_if_gt ContestHall_EventScript_Set3Hearts - compare VAR_0x8004, 110 - goto_if_gt ContestHall_EventScript_Set2Hearts - compare VAR_0x8004, 90 - goto_if_gt ContestHall_EventScript_Set1Heart + goto_if_gt VAR_0x8004, 230, ContestHall_EventScript_Set8Hearts + goto_if_gt VAR_0x8004, 210, ContestHall_EventScript_Set7Hearts + goto_if_gt VAR_0x8004, 190, ContestHall_EventScript_Set6Hearts + goto_if_gt VAR_0x8004, 170, ContestHall_EventScript_Set5Hearts + goto_if_gt VAR_0x8004, 150, ContestHall_EventScript_Set4Hearts + goto_if_gt VAR_0x8004, 130, ContestHall_EventScript_Set3Hearts + goto_if_gt VAR_0x8004, 110, ContestHall_EventScript_Set2Hearts + goto_if_gt VAR_0x8004, 90, ContestHall_EventScript_Set1Heart setvar VAR_TEMP_0, 0 return ContestHall_EventScript_GetNumberOfHeartsHyper:: - compare VAR_0x8004, 380 - goto_if_gt ContestHall_EventScript_Set8Hearts - compare VAR_0x8004, 350 - goto_if_gt ContestHall_EventScript_Set7Hearts - compare VAR_0x8004, 320 - goto_if_gt ContestHall_EventScript_Set6Hearts - compare VAR_0x8004, 290 - goto_if_gt ContestHall_EventScript_Set5Hearts - compare VAR_0x8004, 260 - goto_if_gt ContestHall_EventScript_Set4Hearts - compare VAR_0x8004, 230 - goto_if_gt ContestHall_EventScript_Set3Hearts - compare VAR_0x8004, 200 - goto_if_gt ContestHall_EventScript_Set2Hearts - compare VAR_0x8004, 170 - goto_if_gt ContestHall_EventScript_Set1Heart + goto_if_gt VAR_0x8004, 380, ContestHall_EventScript_Set8Hearts + goto_if_gt VAR_0x8004, 350, ContestHall_EventScript_Set7Hearts + goto_if_gt VAR_0x8004, 320, ContestHall_EventScript_Set6Hearts + goto_if_gt VAR_0x8004, 290, ContestHall_EventScript_Set5Hearts + goto_if_gt VAR_0x8004, 260, ContestHall_EventScript_Set4Hearts + goto_if_gt VAR_0x8004, 230, ContestHall_EventScript_Set3Hearts + goto_if_gt VAR_0x8004, 200, ContestHall_EventScript_Set2Hearts + goto_if_gt VAR_0x8004, 170, ContestHall_EventScript_Set1Heart setvar VAR_TEMP_0, 0 return ContestHall_EventScript_GetNumberOfHeartsMaster:: - compare VAR_0x8004, 600 - goto_if_gt ContestHall_EventScript_Set8Hearts - compare VAR_0x8004, 560 - goto_if_gt ContestHall_EventScript_Set7Hearts - compare VAR_0x8004, 520 - goto_if_gt ContestHall_EventScript_Set6Hearts - compare VAR_0x8004, 480 - goto_if_gt ContestHall_EventScript_Set5Hearts - compare VAR_0x8004, 440 - goto_if_gt ContestHall_EventScript_Set4Hearts - compare VAR_0x8004, 400 - goto_if_gt ContestHall_EventScript_Set3Hearts - compare VAR_0x8004, 360 - goto_if_gt ContestHall_EventScript_Set2Hearts - compare VAR_0x8004, 320 - goto_if_gt ContestHall_EventScript_Set1Heart + goto_if_gt VAR_0x8004, 600, ContestHall_EventScript_Set8Hearts + goto_if_gt VAR_0x8004, 560, ContestHall_EventScript_Set7Hearts + goto_if_gt VAR_0x8004, 520, ContestHall_EventScript_Set6Hearts + goto_if_gt VAR_0x8004, 480, ContestHall_EventScript_Set5Hearts + goto_if_gt VAR_0x8004, 440, ContestHall_EventScript_Set4Hearts + goto_if_gt VAR_0x8004, 400, ContestHall_EventScript_Set3Hearts + goto_if_gt VAR_0x8004, 360, ContestHall_EventScript_Set2Hearts + goto_if_gt VAR_0x8004, 320, ContestHall_EventScript_Set1Heart setvar VAR_TEMP_0, 0 return ContestHall_EventScript_GetNumberOfHeartsLink:: - compare VAR_0x8004, 600 - goto_if_gt ContestHall_EventScript_Set8Hearts - compare VAR_0x8004, 550 - goto_if_gt ContestHall_EventScript_Set7Hearts - compare VAR_0x8004, 500 - goto_if_gt ContestHall_EventScript_Set6Hearts - compare VAR_0x8004, 450 - goto_if_gt ContestHall_EventScript_Set5Hearts - compare VAR_0x8004, 400 - goto_if_gt ContestHall_EventScript_Set4Hearts - compare VAR_0x8004, 300 - goto_if_gt ContestHall_EventScript_Set3Hearts - compare VAR_0x8004, 200 - goto_if_gt ContestHall_EventScript_Set2Hearts - compare VAR_0x8004, 100 - goto_if_gt ContestHall_EventScript_Set1Heart + goto_if_gt VAR_0x8004, 600, ContestHall_EventScript_Set8Hearts + goto_if_gt VAR_0x8004, 550, ContestHall_EventScript_Set7Hearts + goto_if_gt VAR_0x8004, 500, ContestHall_EventScript_Set6Hearts + goto_if_gt VAR_0x8004, 450, ContestHall_EventScript_Set5Hearts + goto_if_gt VAR_0x8004, 400, ContestHall_EventScript_Set4Hearts + goto_if_gt VAR_0x8004, 300, ContestHall_EventScript_Set3Hearts + goto_if_gt VAR_0x8004, 200, ContestHall_EventScript_Set2Hearts + goto_if_gt VAR_0x8004, 100, ContestHall_EventScript_Set1Heart setvar VAR_TEMP_0, 0 return @@ -697,8 +622,7 @@ ContestHall_EventScript_Set8Hearts:: return ContestHall_EventScript_TryDisplayHeartAudienceMember1:: - compare VAR_TEMP_1, 1 - goto_if_eq ContestHall_EventScript_AudienceMember1AlreadyEmoted + goto_if_eq VAR_TEMP_1, 1, ContestHall_EventScript_AudienceMember1AlreadyEmoted applymovement LOCALID_AUDIENCE_1, ContestHall_Movement_Heart playse SE_PIN delay 14 @@ -710,8 +634,7 @@ ContestHall_EventScript_AudienceMember1AlreadyEmoted:: return ContestHall_EventScript_TryDisplayHeartAudienceMember2:: - compare VAR_TEMP_2, 1 - goto_if_eq ContestHall_EventScript_AudienceMember2AlreadyEmoted + goto_if_eq VAR_TEMP_2, 1, ContestHall_EventScript_AudienceMember2AlreadyEmoted applymovement LOCALID_AUDIENCE_2, ContestHall_Movement_Heart playse SE_PIN delay 14 @@ -723,8 +646,7 @@ ContestHall_EventScript_AudienceMember2AlreadyEmoted:: return ContestHall_EventScript_TryDisplayHeartAudienceMember3:: - compare VAR_TEMP_3, 1 - goto_if_eq ContestHall_EventScript_AudienceMember3AlreadyEmoted + goto_if_eq VAR_TEMP_3, 1, ContestHall_EventScript_AudienceMember3AlreadyEmoted applymovement LOCALID_AUDIENCE_3, ContestHall_Movement_Heart playse SE_PIN delay 14 @@ -736,8 +658,7 @@ ContestHall_EventScript_AudienceMember3AlreadyEmoted:: return ContestHall_EventScript_TryDisplayHeartAudienceMember4:: - compare VAR_TEMP_4, 1 - goto_if_eq ContestHall_EventScript_Audience4MemberAlreadyEmoted + goto_if_eq VAR_TEMP_4, 1, ContestHall_EventScript_Audience4MemberAlreadyEmoted applymovement LOCALID_AUDIENCE_4, ContestHall_Movement_Heart playse SE_PIN delay 14 @@ -749,8 +670,7 @@ ContestHall_EventScript_Audience4MemberAlreadyEmoted:: return ContestHall_EventScript_TryDisplayHeartAudienceMember5:: - compare VAR_TEMP_5, 1 - goto_if_eq ContestHall_EventScript_AudienceMember5AlreadyEmoted + goto_if_eq VAR_TEMP_5, 1, ContestHall_EventScript_AudienceMember5AlreadyEmoted applymovement LOCALID_AUDIENCE_5, ContestHall_Movement_Heart playse SE_PIN delay 14 @@ -762,8 +682,7 @@ ContestHall_EventScript_AudienceMember5AlreadyEmoted:: return ContestHall_EventScript_TryDisplayHeartAudienceMember6:: - compare VAR_TEMP_6, 1 - goto_if_eq ContestHall_EventScript_AudienceMember6AlreadyEmoted + goto_if_eq VAR_TEMP_6, 1, ContestHall_EventScript_AudienceMember6AlreadyEmoted applymovement LOCALID_AUDIENCE_6, ContestHall_Movement_Heart playse SE_PIN delay 14 @@ -775,8 +694,7 @@ ContestHall_EventScript_AudienceMember6AlreadyEmoted:: return ContestHall_EventScript_TryDisplayHeartAudienceMember7:: - compare VAR_TEMP_7, 1 - goto_if_eq ContestHall_EventScript_AudienceMember7AlreadyEmoted + goto_if_eq VAR_TEMP_7, 1, ContestHall_EventScript_AudienceMember7AlreadyEmoted applymovement LOCALID_AUDIENCE_7, ContestHall_Movement_Heart playse SE_PIN delay 14 @@ -788,8 +706,7 @@ ContestHall_EventScript_AudienceMember7AlreadyEmoted:: return ContestHall_EventScript_TryDisplayHeartAudienceMember8:: - compare VAR_TEMP_8, 1 - goto_if_eq ContestHall_EventScript_AudienceMember8AlreadyEmoted + goto_if_eq VAR_TEMP_8, 1, ContestHall_EventScript_AudienceMember8AlreadyEmoted applymovement LOCALID_ARTIST, ContestHall_Movement_Heart playse SE_PIN delay 14 @@ -870,15 +787,13 @@ ContestHall_EventScript_DoContestAppeals:: return ContestHall_EventScript_LetsAppeal:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_LetsAppealLink + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_LetsAppealLink msgbox ContestHall_Text_VotingCompleteLetsAppeal, MSGBOX_DEFAULT return ContestHall_EventScript_LetsAppealLink:: specialvar VAR_RESULT, IsWirelessContest - compare VAR_RESULT, TRUE - goto_if_eq ContestHall_EventScript_LetsAppealWireless + goto_if_eq VAR_RESULT, TRUE, ContestHall_EventScript_LetsAppealWireless messageautoscroll ContestHall_Text_VotingCompleteLetsAppeal waitmessage return @@ -920,8 +835,7 @@ ContestHall_EventScript_ContestResults:: return ContestHall_EventScript_ThatsItForJudging:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_ThatsItForJudgingLink + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_ThatsItForJudgingLink msgbox ContestHall_Text_ThatsItForJudging, MSGBOX_DEFAULT return @@ -933,8 +847,7 @@ ContestHall_EventScript_ThatsItForJudgingLink:: return ContestHall_EventScript_ThankYouForAppeals:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_ThankYouForAppealsLink + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_ThankYouForAppealsLink msgbox ContestHall_Text_ThankYouForAppeals, MSGBOX_DEFAULT return @@ -946,8 +859,7 @@ ContestHall_EventScript_ThankYouForAppealsLink:: return ContestHall_EventScript_JudgeLooksReady:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_JudgeLooksReadyLink + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_JudgeLooksReadyLink msgbox ContestHall_Text_JudgeLooksReady, MSGBOX_DEFAULT return @@ -959,8 +871,7 @@ ContestHall_EventScript_JudgeLooksReadyLink:: return ContestHall_EventScript_WeWillDeclareWinner:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_WeWillDeclareWinnerLink + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_WeWillDeclareWinnerLink msgbox ContestHall_Text_WeWillNowDeclareWinner, MSGBOX_DEFAULT return @@ -1000,7 +911,7 @@ ContestHall_EventScript_CongratulateWinner:: special BufferContestWinnerTrainerName special BufferContestWinnerMonName addvar VAR_0x8005, 1 - buffernumberstring 1, VAR_0x8005 + buffernumberstring STR_VAR_2, VAR_0x8005 addvar VAR_0x8005, -1 call ContestHall_EventScript_CongratsWinner applymovement VAR_TEMP_3, ContestHall_Movement_WinningPlayerWalkUp @@ -1010,8 +921,7 @@ ContestHall_EventScript_CongratulateWinner:: return ContestHall_EventScript_CongratsWinner:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_CongratsWinnerLink + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_CongratsWinnerLink msgbox ContestHall_Text_CongratsTrainerXandMon, MSGBOX_DEFAULT return @@ -1023,8 +933,7 @@ ContestHall_EventScript_CongratsWinnerLink:: ContestHall_EventScript_AudienceLookAround:: addvar VAR_TEMP_1, 1 lockall - compare VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_NORMAL - call_if_gt ContestHall_EventScript_VObjectAudienceLookAround + call_if_gt VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_NORMAL, ContestHall_EventScript_VObjectAudienceLookAround applymovement LOCALID_AUDIENCE_5, ContestHall_Movement_AudienceMemberLookRight applymovement LOCALID_AUDIENCE_2, ContestHall_Movement_AudienceMemberLookDown applymovement LOCALID_AUDIENCE_3, ContestHall_Movement_AudienceMemberLookRight @@ -1033,8 +942,7 @@ ContestHall_EventScript_AudienceLookAround:: applymovement LOCALID_AUDIENCE_7, ContestHall_Movement_AudienceMemberLookDown applymovement LOCALID_AUDIENCE_1, ContestHall_Movement_AudienceMemberLookUp applymovement LOCALID_AUDIENCE_4, ContestHall_Movement_AudienceMemberLookLeft - compare VAR_TEMP_1, 4 - goto_if_ne ContestHall_EventScript_AudienceLookAround + goto_if_ne VAR_TEMP_1, 4, ContestHall_EventScript_AudienceLookAround delay 30 return @@ -1108,8 +1016,7 @@ ContestHall_EventScript_VObjectAudienceLookAround:: return ContestHall_EventScript_GiveWinnerPrize:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_LINK - goto_if_eq ContestHall_EventScript_EndLinkContest + goto_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_LINK, ContestHall_EventScript_EndLinkContest call ContestHall_EventScript_CheckShouldSkipPrize goto_if_set FLAG_TEMP_2, ContestHall_EventScript_SkipPrize lockall @@ -1122,8 +1029,7 @@ ContestHall_EventScript_GiveWinnerPrize:: call ContestHall_EventScript_AudienceLookAround delay 30 special ShouldReadyContestArtist - compare VAR_0x8004, TRUE - goto_if_eq ContestHall_EventScript_SetReadyForContestArtist + goto_if_eq VAR_0x8004, TRUE, ContestHall_EventScript_SetReadyForContestArtist return ContestHall_EventScript_SkipPrize:: @@ -1132,25 +1038,21 @@ ContestHall_EventScript_SkipPrize:: releaseall delay 90 special ShouldReadyContestArtist - compare VAR_0x8004, TRUE - goto_if_eq ContestHall_EventScript_SetReadyForContestArtist + goto_if_eq VAR_0x8004, TRUE, ContestHall_EventScript_SetReadyForContestArtist return ContestHall_EventScript_CheckShouldSkipPrize:: specialvar VAR_RESULT, HasMonWonThisContestBefore - compare VAR_RESULT, TRUE - goto_if_eq ContestHall_EventScript_CheckPlayerWon + goto_if_eq VAR_RESULT, TRUE, ContestHall_EventScript_CheckPlayerWon return ContestHall_EventScript_CheckPlayerWon:: special GetContestWinnerId - compare VAR_0x8005, 3 - goto_if_eq ContestHall_EventScript_CheckRankIsMaster + goto_if_eq VAR_0x8005, 3, ContestHall_EventScript_CheckRankIsMaster return ContestHall_EventScript_CheckRankIsMaster:: - compare VAR_CONTEST_RANK, CONTEST_RANK_MASTER - goto_if_eq ContestHall_EventScript_DontSkipPrize + goto_if_eq VAR_CONTEST_RANK, CONTEST_RANK_MASTER, ContestHall_EventScript_DontSkipPrize setflag FLAG_TEMP_2 return @@ -1171,8 +1073,7 @@ ContestHall_EventScript_EndLinkContest:: special GetContestPlayerId special GetContestWinnerId special ShouldReadyContestArtist - compare VAR_0x8004, TRUE - goto_if_eq ContestHall_EventScript_SetReadyForLinkContestArtist + goto_if_eq VAR_0x8004, TRUE, ContestHall_EventScript_SetReadyForLinkContestArtist closemessage return @@ -1223,21 +1124,17 @@ ContestHall_EventScript_Player4ApproachForPrize:: @ In NPC Contests, the player is always entry 4 (id number 3) ContestHall_EventScript_GivePrizeIfWinner:: special GetContestWinnerId - compare VAR_0x8005, 3 - goto_if_eq ContestHall_EventScript_GiveContestPrizes + goto_if_eq VAR_0x8005, 3, ContestHall_EventScript_GiveContestPrizes lockall msgbox ContestHall_Text_CongratsPleaseCompeteAgain, MSGBOX_DEFAULT releaseall return ContestHall_EventScript_GiveContestPrizes:: - compare VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_SUPER - call_if_eq ContestHall_EventScript_SetSketchFlag + call_if_eq VAR_CONTEST_TYPE, CONTEST_TYPE_NPC_SUPER, ContestHall_EventScript_SetSketchFlag specialvar VAR_RESULT, HasMonWonThisContestBefore - compare VAR_RESULT, FALSE - goto_if_eq ContestHall_EventScript_ReceiveContestRibbon - compare VAR_CONTEST_RANK, CONTEST_RANK_MASTER - goto_if_eq ContestHall_EventScript_GiveLuxuryBall + goto_if_eq VAR_RESULT, FALSE, ContestHall_EventScript_ReceiveContestRibbon + goto_if_eq VAR_CONTEST_RANK, CONTEST_RANK_MASTER, ContestHall_EventScript_GiveLuxuryBall lockall msgbox ContestHall_Text_CongratsPleaseCompeteAgain, MSGBOX_DEFAULT releaseall @@ -1253,8 +1150,7 @@ ContestHall_EventScript_NoRoomForLuxuryBall:: ContestHall_EventScript_GiveLuxuryBall:: giveitem ITEM_LUXURY_BALL - compare VAR_RESULT, FALSE - goto_if_eq ContestHall_EventScript_NoRoomForLuxuryBall + goto_if_eq VAR_RESULT, FALSE, ContestHall_EventScript_NoRoomForLuxuryBall lockall msgbox ContestHall_Text_CongratsPleaseCompeteAgain, MSGBOX_DEFAULT releaseall @@ -1285,7 +1181,7 @@ ContestHall_Movement_MCBackUp: step_end ContestHall_Movement_MCFaceJudge: - walk_in_place_fastest_right + walk_in_place_faster_right step_end ContestHall_Movement_Heart: @@ -1293,24 +1189,24 @@ ContestHall_Movement_Heart: step_end ContestHall_Movement_FaceContestants: - walk_in_place_fastest_down + walk_in_place_faster_down step_end ContestHall_Movement_WalkStageLeft: walk_left walk_left - walk_in_place_fastest_down + walk_in_place_faster_down step_end ContestHall_Movement_WalkStageRight: walk_right walk_right - walk_in_place_fastest_down + walk_in_place_faster_down step_end ContestHall_Movement_WinningPlayerWalkUp: walk_up - walk_in_place_fastest_down + walk_in_place_faster_down step_end ContestHall_Movement_ContestantDelay32: @@ -1319,15 +1215,15 @@ ContestHall_Movement_ContestantDelay32: step_end ContestHall_Movement_MCFaceJudge2: - walk_in_place_fastest_right + walk_in_place_faster_right step_end ContestHall_Movement_JudgeFaceMC: - walk_in_place_fastest_left + walk_in_place_faster_left step_end ContestHall_Movement_FaceContestants2: - walk_in_place_fastest_down + walk_in_place_faster_down step_end ContestHall_Movement_Player3ApproachForPrize: @@ -1375,20 +1271,20 @@ ContestHall_Movement_Player4FaceUp: ContestHall_Movement_MCLookAtJudge: face_up delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right step_end ContestHall_Movement_JudgeLookAtMC: - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end ContestHall_Movement_MCWalkInPlaceDown: delay_16 delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end ContestHall_Movement_Player1WalkToCenter: @@ -1396,7 +1292,7 @@ ContestHall_Movement_Player1WalkToCenter: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end ContestHall_Movement_Player1WalkBack: @@ -1404,31 +1300,31 @@ ContestHall_Movement_Player1WalkBack: walk_fast_left walk_fast_left walk_fast_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end ContestHall_Movement_Player2WalkToCenter: walk_up walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end ContestHall_Movement_Player2WalkBack: walk_fast_left walk_fast_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end ContestHall_Movement_Player3WalkToCenter: walk_up walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end ContestHall_Movement_Player3WalkBack: walk_fast_right walk_fast_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end ContestHall_Movement_Player4WalkToCenter: @@ -1436,7 +1332,7 @@ ContestHall_Movement_Player4WalkToCenter: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end ContestHall_Movement_Player4WalkBack: @@ -1444,7 +1340,7 @@ ContestHall_Movement_Player4WalkBack: walk_fast_right walk_fast_right walk_fast_down - walk_in_place_fastest_up + walk_in_place_faster_up step_end ContestHall_Movement_Player1ApproachForPrize: @@ -1460,8 +1356,7 @@ ContestHall_Movement_Player2ApproachForPrize: @ IsContestWithRSPlayer has no side effect, so this is nop ContestHall_EventScript_CheckIfContestWithRSPlayer:: specialvar VAR_RESULT, IsContestWithRSPlayer - compare VAR_RESULT, TRUE - goto_if_eq ContestHall_EventScript_RetRSPlayer + goto_if_eq VAR_RESULT, TRUE, ContestHall_EventScript_RetRSPlayer return ContestHall_EventScript_RetRSPlayer:: @@ -1469,8 +1364,7 @@ ContestHall_EventScript_RetRSPlayer:: LilycoveCity_ContestLobby_EventScript_DelayIfContestWithRSPlayer:: specialvar VAR_RESULT, IsContestWithRSPlayer - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_ContestLobby_EventScript_DelayForRSPlayer + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_ContestLobby_EventScript_DelayForRSPlayer return LilycoveCity_ContestLobby_EventScript_DelayForRSPlayer:: diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index f5c023147b..cb053f2c40 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -5,23 +5,18 @@ Route117_EventScript_DaycareMan:: faceplayer special GetDaycareMonNicknames specialvar VAR_RESULT, GetDaycareState - compare VAR_RESULT, DAYCARE_EGG_WAITING - goto_if_eq Route117_EventScript_DaycareEggWaiting - compare VAR_RESULT, DAYCARE_ONE_MON - goto_if_eq Route117_EventScript_CheckOnOneMon - compare VAR_RESULT, DAYCARE_TWO_MONS - goto_if_eq Route117_EventScript_CheckOnTwoMons + goto_if_eq VAR_RESULT, DAYCARE_EGG_WAITING, Route117_EventScript_DaycareEggWaiting + goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, Route117_EventScript_CheckOnOneMon + goto_if_eq VAR_RESULT, DAYCARE_TWO_MONS, Route117_EventScript_CheckOnTwoMons msgbox Route117_Text_SeeWifeIfYoudLikeMeToRaiseMon, MSGBOX_DEFAULT release end Route117_EventScript_DaycareEggWaiting:: msgbox Route117_Text_DoYouWantEgg, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route117_EventScript_DaycareAcceptEgg + goto_if_eq VAR_RESULT, YES, Route117_EventScript_DaycareAcceptEgg msgbox Route117_Text_IWillKeepDoYouWantIt, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route117_EventScript_DaycareAcceptEgg + goto_if_eq VAR_RESULT, YES, Route117_EventScript_DaycareAcceptEgg msgbox Route117_Text_IllKeepIt, MSGBOX_DEFAULT clearflag FLAG_PENDING_DAYCARE_EGG special RejectEggFromDayCare @@ -30,8 +25,7 @@ Route117_EventScript_DaycareEggWaiting:: Route117_EventScript_DaycareAcceptEgg:: specialvar VAR_RESULT, CalculatePlayerPartyCount - compare VAR_RESULT, PARTY_SIZE - goto_if_ne Route117_EventScript_DaycareReceiveEgg + goto_if_ne VAR_RESULT, PARTY_SIZE, Route117_EventScript_DaycareReceiveEgg msgbox Route117_Text_YouHaveNoRoomForIt, MSGBOX_DEFAULT release end @@ -49,8 +43,7 @@ Route117_EventScript_DaycareReceiveEgg:: Route117_EventScript_CheckMonReceivedMail:: specialvar VAR_RESULT, CheckDaycareMonReceivedMail - compare VAR_RESULT, 1 - call_if_eq Route117_EventScript_MonReceivedMail + call_if_eq VAR_RESULT, 1, Route117_EventScript_MonReceivedMail return Route117_EventScript_MonReceivedMail:: @@ -83,45 +76,36 @@ Route117_PokemonDayCare_EventScript_DaycareWoman:: lock faceplayer specialvar VAR_RESULT, GetDaycareState - compare VAR_RESULT, DAYCARE_EGG_WAITING - goto_if_eq Route117_PokemonDayCare_EventScript_EggWaiting - compare VAR_RESULT, DAYCARE_ONE_MON - goto_if_eq Route117_PokemonDayCare_EventScript_OneMonInDaycare - compare VAR_RESULT, DAYCARE_TWO_MONS - goto_if_eq Route117_PokemonDayCare_EventScript_TwoMonsInDaycare + goto_if_eq VAR_RESULT, DAYCARE_EGG_WAITING, Route117_PokemonDayCare_EventScript_EggWaiting + goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, Route117_PokemonDayCare_EventScript_OneMonInDaycare + goto_if_eq VAR_RESULT, DAYCARE_TWO_MONS, Route117_PokemonDayCare_EventScript_TwoMonsInDaycare msgbox Route117_PokemonDayCare_Text_WouldYouLikeUsToRaiseAMon, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise + goto_if_eq VAR_RESULT, YES, Route117_PokemonDayCare_EventScript_GiveMonToRaise msgbox Route117_PokemonDayCare_Text_FineThenComeAgain, MSGBOX_DEFAULT release end Route117_PokemonDayCare_EventScript_GiveMonToRaise:: specialvar VAR_RESULT, CountPartyNonEggMons - compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_OnlyOneMon + goto_if_eq VAR_RESULT, 1, Route117_PokemonDayCare_EventScript_OnlyOneMon specialvar VAR_RESULT, CountPartyAliveNonEggMons - compare VAR_RESULT, 2 - goto_if_eq Route117_PokemonDayCare_EventScript_OnlyTwoAliveMons + goto_if_eq VAR_RESULT, 2, Route117_PokemonDayCare_EventScript_OnlyTwoAliveMons msgbox Route117_PokemonDayCare_Text_WhichMonShouldWeRaise, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK special ChooseSendDaycareMon waitstate - compare VAR_0x8004, 255 - goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain + goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, Route117_PokemonDayCare_EventScript_ComeAgain specialvar VAR_RESULT, CountPartyAliveNonEggMons_IgnoreVar0x8004Slot - compare VAR_RESULT, 0 - goto_if_eq Route117_PokemonDayCare_EventScript_OnlyOneAliveMon + goto_if_eq VAR_RESULT, 0, Route117_PokemonDayCare_EventScript_OnlyOneAliveMon specialvar VAR_0x8005, GetSelectedMonNicknameAndSpecies waitse - playmoncry VAR_0x8005, 0 + playmoncry VAR_0x8005, CRY_MODE_NORMAL msgbox Route117_PokemonDayCare_Text_WellRaiseYourMon, MSGBOX_DEFAULT waitmoncry special StoreSelectedPokemonInDaycare incrementgamestat GAME_STAT_USED_DAYCARE specialvar VAR_RESULT, GetDaycareState - compare VAR_RESULT, DAYCARE_ONE_MON - goto_if_eq Route117_PokemonDayCare_EventScript_CanRaiseOneMore + goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, Route117_PokemonDayCare_EventScript_CanRaiseOneMore release end @@ -132,8 +116,7 @@ Route117_PokemonDayCare_EventScript_ComeAgain:: Route117_PokemonDayCare_EventScript_CanRaiseOneMore:: msgbox Route117_PokemonDayCare_Text_WeCanRaiseOneMore, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise + goto_if_eq VAR_RESULT, YES, Route117_PokemonDayCare_EventScript_GiveMonToRaise goto Route117_PokemonDayCare_EventScript_ComeAgain end @@ -163,8 +146,7 @@ Route117_PokemonDayCare_EventScript_YourMonHasGrownXLevels:: Route117_PokemonDayCare_EventScript_DisplayLevelsGained:: specialvar VAR_RESULT, GetNumLevelsGainedFromDaycare - compare VAR_RESULT, 0 - call_if_ne Route117_PokemonDayCare_EventScript_YourMonHasGrownXLevels + call_if_ne VAR_RESULT, 0, Route117_PokemonDayCare_EventScript_YourMonHasGrownXLevels return Route117_PokemonDayCare_EventScript_OneMonInDaycare:: @@ -172,42 +154,35 @@ Route117_PokemonDayCare_EventScript_OneMonInDaycare:: setvar VAR_0x8004, 0 call Route117_PokemonDayCare_EventScript_DisplayLevelsGained msgbox Route117_PokemonDayCare_Text_WeCanRaiseOneMore, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise + goto_if_eq VAR_RESULT, YES, Route117_PokemonDayCare_EventScript_GiveMonToRaise msgbox Route117_PokemonDayCare_Text_TakeYourMonBack, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon + goto_if_eq VAR_RESULT, YES, Route117_PokemonDayCare_EventScript_TryRetrieveMon goto Route117_PokemonDayCare_EventScript_ComeAgain end Route117_PokemonDayCare_EventScript_TryRetrieveMon:: specialvar VAR_RESULT, CalculatePlayerPartyCount - compare VAR_RESULT, PARTY_SIZE - goto_if_eq Route117_PokemonDayCare_EventScript_NoRoom + goto_if_eq VAR_RESULT, PARTY_SIZE, Route117_PokemonDayCare_EventScript_NoRoom specialvar VAR_RESULT, GetDaycareState setvar VAR_0x8004, 0 - compare VAR_RESULT, DAYCARE_ONE_MON - goto_if_eq Route117_PokemonDayCare_EventScript_CostPrompt + goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, Route117_PokemonDayCare_EventScript_CostPrompt special ShowDaycareLevelMenu waitstate copyvar VAR_0x8004, VAR_RESULT - compare VAR_RESULT, DAYCARE_EXITED_LEVEL_MENU - goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain + goto_if_eq VAR_RESULT, DAYCARE_EXITED_LEVEL_MENU, Route117_PokemonDayCare_EventScript_ComeAgain goto Route117_PokemonDayCare_EventScript_CostPrompt end Route117_PokemonDayCare_EventScript_CostPrompt:: special GetDaycareCost msgbox Route117_PokemonDayCare_Text_ItWillCostX, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route117_PokemonDayCare_EventScript_CheckEnoughMoney + goto_if_eq VAR_RESULT, YES, Route117_PokemonDayCare_EventScript_CheckEnoughMoney goto Route117_PokemonDayCare_EventScript_ComeAgain end Route117_PokemonDayCare_EventScript_CheckEnoughMoney:: specialvar VAR_RESULT, IsEnoughForCostInVar0x8005 - compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_RetrieveMon + goto_if_eq VAR_RESULT, 1, Route117_PokemonDayCare_EventScript_RetrieveMon msgbox Route117_PokemonDayCare_Text_NotEnoughMoney, MSGBOX_DEFAULT release end @@ -220,19 +195,17 @@ Route117_PokemonDayCare_EventScript_RetrieveMon:: playse SE_SHOP msgbox Route117_PokemonDayCare_Text_HeresYourMon, MSGBOX_DEFAULT waitse - playmoncry VAR_RESULT, 0 + playmoncry VAR_RESULT, CRY_MODE_NORMAL msgbox Route117_PokemonDayCare_Text_TookBackMon, MSGBOX_DEFAULT waitmoncry specialvar VAR_RESULT, GetDaycareState - compare VAR_RESULT, DAYCARE_ONE_MON - goto_if_eq Route117_PokemonDayCare_EventScript_AskRetrieveOtherMon + goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, Route117_PokemonDayCare_EventScript_AskRetrieveOtherMon goto Route117_PokemonDayCare_EventScript_ComeAgain end Route117_PokemonDayCare_EventScript_AskRetrieveOtherMon:: msgbox Route117_PokemonDayCare_Text_TakeOtherOneBackToo, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon + goto_if_eq VAR_RESULT, YES, Route117_PokemonDayCare_EventScript_TryRetrieveMon goto Route117_PokemonDayCare_EventScript_ComeAgain end @@ -274,8 +247,7 @@ Route117_PokemonDayCare_EventScript_TwoMonsInDaycare:: setvar VAR_0x8004, 1 call Route117_PokemonDayCare_EventScript_DisplayLevelsGained msgbox Route117_PokemonDayCare_Text_TakeYourMonBack, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon + goto_if_eq VAR_RESULT, YES, Route117_PokemonDayCare_EventScript_TryRetrieveMon msgbox Route117_PokemonDayCare_Text_ComeAgain, MSGBOX_DEFAULT release end @@ -284,8 +256,7 @@ Route117_PokemonDayCare_EventScript_TwoMonsInDaycare:: Route117_PokemonDayCare_EventScript_UnusedRetrieveMon:: special ShowDaycareLevelMenu waitstate - compare VAR_RESULT, 2 - goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain + goto_if_eq VAR_RESULT, 2, Route117_PokemonDayCare_EventScript_ComeAgain copyvar VAR_0x8004, VAR_RESULT specialvar VAR_RESULT, TakePokemonFromDaycare msgbox Route117_PokemonDayCare_Text_HeresYourMon, MSGBOX_DEFAULT diff --git a/data/scripts/elite_four.inc b/data/scripts/elite_four.inc index 0ae319061a..97d7f41314 100644 --- a/data/scripts/elite_four.inc +++ b/data/scripts/elite_four.inc @@ -2,18 +2,18 @@ PokemonLeague_EliteFour_SetAdvanceToNextRoomMetatiles:: applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_Delay32 waitmovement 0 playse SE_DOOR - setmetatile 6, 1, METATILE_EliteFour_OpenDoor_Frame, 0 - setmetatile 6, 2, METATILE_EliteFour_OpenDoor_Opening, 0 - setmetatile 0, 2, METATILE_EliteFour_RightSpotlightOff, 1 - setmetatile 1, 2, METATILE_EliteFour_LeftSpotlightOff, 1 - setmetatile 2, 2, METATILE_EliteFour_RightSpotlightOff, 1 - setmetatile 3, 2, METATILE_EliteFour_LeftSpotlightOff, 1 - setmetatile 4, 2, METATILE_EliteFour_RightSpotlightOff, 1 - setmetatile 8, 2, METATILE_EliteFour_LeftSpotlightOff, 1 - setmetatile 9, 2, METATILE_EliteFour_RightSpotlightOff, 1 - setmetatile 10, 2, METATILE_EliteFour_LeftSpotlightOff, 1 - setmetatile 11, 2, METATILE_EliteFour_RightSpotlightOff, 1 - setmetatile 12, 2, METATILE_EliteFour_LeftSpotlightOff, 1 + setmetatile 6, 1, METATILE_EliteFour_OpenDoor_Frame, FALSE + setmetatile 6, 2, METATILE_EliteFour_OpenDoor_Opening, FALSE + setmetatile 0, 2, METATILE_EliteFour_RightSpotlightOff, TRUE + setmetatile 1, 2, METATILE_EliteFour_LeftSpotlightOff, TRUE + setmetatile 2, 2, METATILE_EliteFour_RightSpotlightOff, TRUE + setmetatile 3, 2, METATILE_EliteFour_LeftSpotlightOff, TRUE + setmetatile 4, 2, METATILE_EliteFour_RightSpotlightOff, TRUE + setmetatile 8, 2, METATILE_EliteFour_LeftSpotlightOff, TRUE + setmetatile 9, 2, METATILE_EliteFour_RightSpotlightOff, TRUE + setmetatile 10, 2, METATILE_EliteFour_LeftSpotlightOff, TRUE + setmetatile 11, 2, METATILE_EliteFour_RightSpotlightOff, TRUE + setmetatile 12, 2, METATILE_EliteFour_LeftSpotlightOff, TRUE special DrawWholeMapView return @@ -21,42 +21,42 @@ PokemonLeague_EliteFour_EventScript_WalkInCloseDoor:: applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkUp6 waitmovement 0 playse SE_TRUCK_DOOR - setmetatile 5, 12, METATILE_EliteFour_EntryDoor_ClosedTop, 1 - setmetatile 6, 12, METATILE_EliteFour_EntryDoor_ClosedTop, 1 - setmetatile 7, 12, METATILE_EliteFour_EntryDoor_ClosedTop, 1 - setmetatile 5, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, 1 - setmetatile 6, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, 1 - setmetatile 7, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, 1 + setmetatile 5, 12, METATILE_EliteFour_EntryDoor_ClosedTop, TRUE + setmetatile 6, 12, METATILE_EliteFour_EntryDoor_ClosedTop, TRUE + setmetatile 7, 12, METATILE_EliteFour_EntryDoor_ClosedTop, TRUE + setmetatile 5, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, TRUE + setmetatile 6, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, TRUE + setmetatile 7, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, TRUE special DrawWholeMapView return @ Essentially unused, only necessary when re-entering an Elite Four room after defeating the member, which isnt normally possible PokemonLeague_EliteFour_EventScript_ResetAdvanceToNextRoom:: - setmetatile 6, 1, METATILE_EliteFour_OpenDoor_Frame, 0 - setmetatile 6, 2, METATILE_EliteFour_OpenDoor_Opening, 0 - setmetatile 5, 12, METATILE_EliteFour_EntryDoor_ClosedTop, 1 - setmetatile 6, 12, METATILE_EliteFour_EntryDoor_ClosedTop, 1 - setmetatile 7, 12, METATILE_EliteFour_EntryDoor_ClosedTop, 1 - setmetatile 5, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, 1 - setmetatile 6, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, 1 - setmetatile 7, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, 1 - setmetatile 0, 2, METATILE_EliteFour_RightSpotlightOff, 1 - setmetatile 1, 2, METATILE_EliteFour_LeftSpotlightOff, 1 - setmetatile 2, 2, METATILE_EliteFour_RightSpotlightOff, 1 - setmetatile 3, 2, METATILE_EliteFour_LeftSpotlightOff, 1 - setmetatile 4, 2, METATILE_EliteFour_RightSpotlightOff, 1 - setmetatile 8, 2, METATILE_EliteFour_LeftSpotlightOff, 1 - setmetatile 9, 2, METATILE_EliteFour_RightSpotlightOff, 1 - setmetatile 10, 2, METATILE_EliteFour_LeftSpotlightOff, 1 - setmetatile 11, 2, METATILE_EliteFour_RightSpotlightOff, 1 - setmetatile 12, 2, METATILE_EliteFour_LeftSpotlightOff, 1 + setmetatile 6, 1, METATILE_EliteFour_OpenDoor_Frame, FALSE + setmetatile 6, 2, METATILE_EliteFour_OpenDoor_Opening, FALSE + setmetatile 5, 12, METATILE_EliteFour_EntryDoor_ClosedTop, TRUE + setmetatile 6, 12, METATILE_EliteFour_EntryDoor_ClosedTop, TRUE + setmetatile 7, 12, METATILE_EliteFour_EntryDoor_ClosedTop, TRUE + setmetatile 5, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, TRUE + setmetatile 6, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, TRUE + setmetatile 7, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, TRUE + setmetatile 0, 2, METATILE_EliteFour_RightSpotlightOff, TRUE + setmetatile 1, 2, METATILE_EliteFour_LeftSpotlightOff, TRUE + setmetatile 2, 2, METATILE_EliteFour_RightSpotlightOff, TRUE + setmetatile 3, 2, METATILE_EliteFour_LeftSpotlightOff, TRUE + setmetatile 4, 2, METATILE_EliteFour_RightSpotlightOff, TRUE + setmetatile 8, 2, METATILE_EliteFour_LeftSpotlightOff, TRUE + setmetatile 9, 2, METATILE_EliteFour_RightSpotlightOff, TRUE + setmetatile 10, 2, METATILE_EliteFour_LeftSpotlightOff, TRUE + setmetatile 11, 2, METATILE_EliteFour_RightSpotlightOff, TRUE + setmetatile 12, 2, METATILE_EliteFour_LeftSpotlightOff, TRUE return PokemonLeague_EliteFour_EventScript_CloseDoor:: - setmetatile 5, 12, METATILE_EliteFour_EntryDoor_ClosedTop, 1 - setmetatile 6, 12, METATILE_EliteFour_EntryDoor_ClosedTop, 1 - setmetatile 7, 12, METATILE_EliteFour_EntryDoor_ClosedTop, 1 - setmetatile 5, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, 1 - setmetatile 6, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, 1 - setmetatile 7, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, 1 + setmetatile 5, 12, METATILE_EliteFour_EntryDoor_ClosedTop, TRUE + setmetatile 6, 12, METATILE_EliteFour_EntryDoor_ClosedTop, TRUE + setmetatile 7, 12, METATILE_EliteFour_EntryDoor_ClosedTop, TRUE + setmetatile 5, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, TRUE + setmetatile 6, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, TRUE + setmetatile 7, 13, METATILE_EliteFour_EntryDoor_ClosedBottom, TRUE return diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index b81ca21dd1..3e99fc08e2 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -3,14 +3,12 @@ EventScript_CutTree:: lockall goto_if_unset FLAG_BADGE01_GET, EventScript_CheckTreeCantCut checkpartymove MOVE_CUT - compare VAR_RESULT, PARTY_SIZE - goto_if_eq EventScript_CheckTreeCantCut + goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CheckTreeCantCut setfieldeffectargument 0, VAR_RESULT - bufferpartymonnick 0, VAR_RESULT - buffermovename 1, MOVE_CUT + bufferpartymonnick STR_VAR_1, VAR_RESULT + buffermovename STR_VAR_2, MOVE_CUT msgbox Text_WantToCut, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq EventScript_CancelCut + goto_if_eq VAR_RESULT, NO, EventScript_CancelCut msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT closemessage dofieldeffect FLDEFF_USE_CUT_ON_TREE @@ -64,14 +62,12 @@ EventScript_RockSmash:: lockall goto_if_unset FLAG_BADGE03_GET, EventScript_CantSmashRock checkpartymove MOVE_ROCK_SMASH - compare VAR_RESULT, PARTY_SIZE - goto_if_eq EventScript_CantSmashRock + goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantSmashRock setfieldeffectargument 0, VAR_RESULT - bufferpartymonnick 0, VAR_RESULT - buffermovename 1, MOVE_ROCK_SMASH + bufferpartymonnick STR_VAR_1, VAR_RESULT + buffermovename STR_VAR_2, MOVE_ROCK_SMASH msgbox Text_WantToSmash, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq EventScript_CancelSmash + goto_if_eq VAR_RESULT, NO, EventScript_CancelSmash msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT closemessage dofieldeffect FLDEFF_USE_ROCK_SMASH @@ -92,11 +88,9 @@ EventScript_SmashRock:: waitmovement 0 removeobject VAR_LAST_TALKED specialvar VAR_RESULT, TryUpdateRusturfTunnelState - compare VAR_RESULT, TRUE - goto_if_eq EventScript_EndSmash + goto_if_eq VAR_RESULT, TRUE, EventScript_EndSmash special RockSmashWildEncounter - compare VAR_RESULT, FALSE - goto_if_eq EventScript_EndSmash + goto_if_eq VAR_RESULT, FALSE, EventScript_EndSmash waitstate releaseall end @@ -132,12 +126,10 @@ EventScript_StrengthBoulder:: goto_if_unset FLAG_BADGE04_GET, EventScript_CantStrength goto_if_set FLAG_SYS_USE_STRENGTH, EventScript_CheckActivatedBoulder checkpartymove MOVE_STRENGTH - compare VAR_RESULT, PARTY_SIZE - goto_if_eq EventScript_CantStrength + goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantStrength setfieldeffectargument 0, VAR_RESULT msgbox Text_WantToStrength, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq EventScript_CancelStrength + goto_if_eq VAR_RESULT, NO, EventScript_CancelStrength closemessage dofieldeffect FLDEFF_USE_STRENGTH waitstate @@ -193,13 +185,11 @@ Text_StrengthActivated: EventScript_UseWaterfall:: lockall checkpartymove MOVE_WATERFALL - compare VAR_RESULT, PARTY_SIZE - goto_if_eq EventScript_CantWaterfall - bufferpartymonnick 0, VAR_RESULT + goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantWaterfall + bufferpartymonnick STR_VAR_1, VAR_RESULT setfieldeffectargument 0, VAR_RESULT msgbox Text_WantToWaterfall, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq EventScript_EndWaterfall + goto_if_eq VAR_RESULT, NO, EventScript_EndWaterfall msgbox Text_MonUsedWaterfall, MSGBOX_DEFAULT dofieldeffect FLDEFF_USE_WATERFALL goto EventScript_EndWaterfall @@ -228,14 +218,12 @@ Text_MonUsedWaterfall: EventScript_UseDive:: lockall checkpartymove MOVE_DIVE - compare VAR_RESULT, PARTY_SIZE - goto_if_eq EventScript_CantDive - bufferpartymonnick 0, VAR_RESULT + goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantDive + bufferpartymonnick STR_VAR_1, VAR_RESULT setfieldeffectargument 0, VAR_RESULT setfieldeffectargument 1, 1 msgbox Text_WantToDive, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq EventScript_EndDive + goto_if_eq VAR_RESULT, NO, EventScript_EndDive msgbox Text_MonUsedDive, MSGBOX_DEFAULT dofieldeffect FLDEFF_USE_DIVE goto EventScript_EndDive @@ -253,14 +241,12 @@ EventScript_EndDive:: EventScript_UseDiveUnderwater:: lockall checkpartymove MOVE_DIVE - compare VAR_RESULT, PARTY_SIZE - goto_if_eq EventScript_CantSurface - bufferpartymonnick 0, VAR_RESULT + goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantSurface + bufferpartymonnick STR_VAR_1, VAR_RESULT setfieldeffectargument 0, VAR_RESULT setfieldeffectargument 1, 1 msgbox Text_WantToSurface, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq EventScript_EndSurface + goto_if_eq VAR_RESULT, NO, EventScript_EndSurface msgbox Text_MonUsedDive, MSGBOX_DEFAULT dofieldeffect FLDEFF_USE_DIVE goto EventScript_EndSurface diff --git a/data/scripts/field_poison.inc b/data/scripts/field_poison.inc index a4f9b90b6b..ddda34ebaa 100644 --- a/data/scripts/field_poison.inc +++ b/data/scripts/field_poison.inc @@ -2,10 +2,8 @@ EventScript_FieldPoison:: lockall special TryFieldPoisonWhiteOut waitstate - compare VAR_RESULT, FLDPSN_WHITEOUT - goto_if_eq EventScript_FieldWhiteOut - compare VAR_RESULT, FLDPSN_FRONTIER_WHITEOUT - goto_if_eq EventScript_FrontierFieldWhiteOut + goto_if_eq VAR_RESULT, FLDPSN_WHITEOUT, EventScript_FieldWhiteOut + goto_if_eq VAR_RESULT, FLDPSN_FRONTIER_WHITEOUT, EventScript_FrontierFieldWhiteOut releaseall end @@ -30,16 +28,12 @@ EventScript_FrontierFieldWhiteOut:: waitmessage waitbuttonpress pike_inchallenge - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattlePike_EventScript_Retire + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePike_EventScript_Retire pyramid_inchallenge - compare VAR_RESULT, 1 @ On Pyramid floor - goto_if_eq BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost - compare VAR_RESULT, 2 @ On Pyramid peak - goto_if_eq BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost @ On Pyramid floor + goto_if_eq VAR_RESULT, 2, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost @ On Pyramid peak trainerhill_inchallenge - compare VAR_RESULT, TRUE - goto_if_eq TrainerHill_1F_EventScript_Lost + goto_if_eq VAR_RESULT, TRUE, TrainerHill_1F_EventScript_Lost special Script_FadeOutMapMusic waitstate fadescreen FADE_TO_BLACK diff --git a/data/scripts/flash.inc b/data/scripts/flash.inc index a69975a165..dbfec2314d 100644 --- a/data/scripts/flash.inc +++ b/data/scripts/flash.inc @@ -1,4 +1,4 @@ EventScript_UseFlash:: animateflash 1 - setflashradius 1 + setflashlevel 1 end diff --git a/data/scripts/gabby_and_ty.inc b/data/scripts/gabby_and_ty.inc index baee6c96fd..e3dbdfd665 100644 --- a/data/scripts/gabby_and_ty.inc +++ b/data/scripts/gabby_and_ty.inc @@ -199,12 +199,9 @@ GabbyAndTy_EventScript_TyBattle6:: GabbyAndTy_EventScript_FirstInterview:: special GabbyAndTyBeforeInterview special GetGabbyAndTyLocalIds - compare VAR_FACING, DIR_NORTH - call_if_eq GabbyAndTy_EventScript_FacePlayerNorth - compare VAR_FACING, DIR_SOUTH - call_if_eq GabbyAndTy_EventScript_FacePlayerSouth - compare VAR_FACING, DIR_EAST - call_if_eq GabbyAndTy_EventScript_FacePlayerEast + call_if_eq VAR_FACING, DIR_NORTH, GabbyAndTy_EventScript_FacePlayerNorth + call_if_eq VAR_FACING, DIR_SOUTH, GabbyAndTy_EventScript_FacePlayerSouth + call_if_eq VAR_FACING, DIR_EAST, GabbyAndTy_EventScript_FacePlayerEast goto_if_set FLAG_TEMP_1, GabbyAndTy_EventScript_KeepingAnEyeOutForYou msgbox GabbyAndTy_Text_WhoAreYouInterview, MSGBOX_YESNO goto GabbyAndTy_EventScript_Interview @@ -217,29 +214,25 @@ GabbyAndTy_EventScript_FacePlayerNorth:: GabbyAndTy_EventScript_FacePlayerSouth:: applymovement VAR_0x8004, GabbyAndTy_Movement_WalkInPlaceUp - applymovement VAR_0x8005, Common_Movement_WalkInPlaceFastestUp + applymovement VAR_0x8005, Common_Movement_WalkInPlaceFasterUp waitmovement 0 return GabbyAndTy_EventScript_FacePlayerEast:: applymovement VAR_0x8004, GabbyAndTy_Movement_WalkInPlaceLeft - applymovement VAR_0x8005, Common_Movement_WalkInPlaceFastestLeft + applymovement VAR_0x8005, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return GabbyAndTy_EventScript_RequestInterview:: special GabbyAndTyBeforeInterview special GetGabbyAndTyLocalIds - compare VAR_FACING, DIR_NORTH - call_if_eq GabbyAndTy_EventScript_FacePlayerNorth - compare VAR_FACING, DIR_SOUTH - call_if_eq GabbyAndTy_EventScript_FacePlayerSouth - compare VAR_FACING, DIR_EAST - call_if_eq GabbyAndTy_EventScript_FacePlayerEast + call_if_eq VAR_FACING, DIR_NORTH, GabbyAndTy_EventScript_FacePlayerNorth + call_if_eq VAR_FACING, DIR_SOUTH, GabbyAndTy_EventScript_FacePlayerSouth + call_if_eq VAR_FACING, DIR_EAST, GabbyAndTy_EventScript_FacePlayerEast goto_if_set FLAG_TEMP_1, GabbyAndTy_EventScript_KeepingAnEyeOutForYou specialvar VAR_RESULT, GabbyAndTyGetLastQuote - compare VAR_RESULT, 0 - goto_if_eq GabbyAndTy_EventScript_DidntInterviewLastTime + goto_if_eq VAR_RESULT, 0, GabbyAndTy_EventScript_DidntInterviewLastTime msgbox GabbyAndTy_Text_QuoteFromLastInterview, MSGBOX_DEFAULT specialvar VAR_RESULT, GabbyAndTyGetLastBattleTrivia switch VAR_RESULT @@ -293,15 +286,13 @@ GabbyAndTy_EventScript_RequestInterviewLostAMon:: end GabbyAndTy_EventScript_Interview:: - compare VAR_RESULT, NO - goto_if_eq GabbyAndTy_EventScript_DontGiveUpKeepingEyeOut + goto_if_eq VAR_RESULT, NO, GabbyAndTy_EventScript_DontGiveUpKeepingEyeOut msgbox GabbyAndTy_Text_DescribeYourFeelings, MSGBOX_DEFAULT setvar VAR_0x8004, EASY_CHAT_TYPE_GABBY_AND_TY call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 0 - goto_if_eq GabbyAndTy_EventScript_DontGiveUpKeepingEyeOut + goto_if_eq VAR_RESULT, 0, GabbyAndTy_EventScript_DontGiveUpKeepingEyeOut msgbox GabbyAndTy_Text_PerfectWellBeSeeingYou, MSGBOX_DEFAULT special GabbyAndTyAfterInterview setflag FLAG_TEMP_1 diff --git a/data/scripts/mevent_altering_cave.inc b/data/scripts/gift_altering_cave.inc similarity index 67% rename from data/scripts/mevent_altering_cave.inc rename to data/scripts/gift_altering_cave.inc index 7e9b0a758e..0ea69aac02 100644 --- a/data/scripts/mevent_altering_cave.inc +++ b/data/scripts/gift_altering_cave.inc @@ -1,10 +1,9 @@ -MysteryEventScript_AlteringCave:: - setvaddress MysteryEventScript_AlteringCave +MysteryGiftScript_AlteringCave:: + setvaddress MysteryGiftScript_AlteringCave addvar VAR_ALTERING_CAVE_WILD_SET, 1 - compare VAR_ALTERING_CAVE_WILD_SET, 10 - vgoto_if_ne MysteryEventScript_AlteringCave_ + vgoto_if_ne VAR_ALTERING_CAVE_WILD_SET, (NUM_ALTERING_CAVE_TABLES + 1), MysteryGiftScript_AlteringCave_ setvar VAR_ALTERING_CAVE_WILD_SET, 0 -MysteryEventScript_AlteringCave_: +MysteryGiftScript_AlteringCave_: lock faceplayer vmessage sText_MysteryGiftAlteringCave @@ -13,7 +12,7 @@ MysteryEventScript_AlteringCave_: release end -sText_MysteryGiftAlteringCave:: +sText_MysteryGiftAlteringCave: .string "Thank you for using the MYSTERY\n" .string "GIFT System.\p" .string "There appears to be a rumor about\n" diff --git a/data/scripts/mevent_aurora_ticket.inc b/data/scripts/gift_aurora_ticket.inc similarity index 82% rename from data/scripts/mevent_aurora_ticket.inc rename to data/scripts/gift_aurora_ticket.inc index 9d73346381..0cadf804a7 100644 --- a/data/scripts/mevent_aurora_ticket.inc +++ b/data/scripts/gift_aurora_ticket.inc @@ -1,18 +1,16 @@ -MysteryEventScript_AuroraTicket:: - setvaddress MysteryEventScript_AuroraTicket +MysteryGiftScript_AuroraTicket:: + setvaddress MysteryGiftScript_AuroraTicket lock faceplayer vgoto_if_set FLAG_RECEIVED_AURORA_TICKET, AuroraTicket_Obtained vgoto_if_set FLAG_BATTLED_DEOXYS, AuroraTicket_Obtained - checkitem ITEM_AURORA_TICKET, 1 - compare VAR_RESULT, TRUE - vgoto_if_eq AuroraTicket_Obtained + checkitem ITEM_AURORA_TICKET + vgoto_if_eq VAR_RESULT, TRUE, AuroraTicket_Obtained vmessage sText_AuroraTicketForYou waitmessage waitbuttonpress - checkitemspace ITEM_AURORA_TICKET, 1 - compare VAR_RESULT, FALSE - vgoto_if_eq AuroraTicket_NoBagSpace + checkitemspace ITEM_AURORA_TICKET + vgoto_if_eq VAR_RESULT, FALSE, AuroraTicket_NoBagSpace giveitem ITEM_AURORA_TICKET setflag FLAG_ENABLE_SHIP_BIRTH_ISLAND setflag FLAG_RECEIVED_AURORA_TICKET diff --git a/data/scripts/mevent_battle_card.inc b/data/scripts/gift_battle_card.inc similarity index 74% rename from data/scripts/mevent_battle_card.inc rename to data/scripts/gift_battle_card.inc index 3a66297e13..95e55e1b95 100644 --- a/data/scripts/mevent_battle_card.inc +++ b/data/scripts/gift_battle_card.inc @@ -1,10 +1,9 @@ -MysteryEventScript_BattleCard:: - setvaddress MysteryEventScript_BattleCard - vgoto_if_set FLAG_MYSTERY_EVENT_DONE, MysteryEventScript_BattleCardInfo +MysteryGiftScript_BattleCard:: + setvaddress MysteryGiftScript_BattleCard + vgoto_if_set FLAG_MYSTERY_GIFT_DONE, MysteryGiftScript_BattleCardInfo setorcopyvar VAR_RESULT, GET_CARD_BATTLES_WON - specialvar VAR_0x8008, GetMysteryEventCardVal - compare VAR_0x8008, REQUIRED_CARD_BATTLES - vgoto_if_ne MysteryEventScript_BattleCardInfo + specialvar VAR_0x8008, GetMysteryGiftCardStat + vgoto_if_ne VAR_0x8008, REQUIRED_CARD_BATTLES, MysteryGiftScript_BattleCardInfo lock faceplayer vmessage sText_MysteryGiftBattleCountCard_WonPrize @@ -12,10 +11,10 @@ MysteryEventScript_BattleCard:: waitbuttonpress giveitem ITEM_POTION release - setflag FLAG_MYSTERY_EVENT_DONE + setflag FLAG_MYSTERY_GIFT_DONE end -MysteryEventScript_BattleCardInfo: +MysteryGiftScript_BattleCardInfo: lock faceplayer vmessage sText_MysteryGiftBattleCountCard diff --git a/data/scripts/mevent_mystic_ticket.inc b/data/scripts/gift_mystic_ticket.inc similarity index 82% rename from data/scripts/mevent_mystic_ticket.inc rename to data/scripts/gift_mystic_ticket.inc index e085c5a596..3ed8aa6bcf 100644 --- a/data/scripts/mevent_mystic_ticket.inc +++ b/data/scripts/gift_mystic_ticket.inc @@ -1,19 +1,17 @@ -MysteryEventScript_MysticTicket:: - setvaddress MysteryEventScript_MysticTicket +MysteryGiftScript_MysticTicket:: + setvaddress MysteryGiftScript_MysticTicket lock faceplayer vgoto_if_set FLAG_RECEIVED_MYSTIC_TICKET, MysticTicket_Obtained vgoto_if_set FLAG_CAUGHT_LUGIA, MysticTicket_Obtained vgoto_if_set FLAG_CAUGHT_HO_OH, MysticTicket_Obtained - checkitem ITEM_MYSTIC_TICKET, 1 - compare VAR_RESULT, TRUE - vgoto_if_eq MysticTicket_Obtained + checkitem ITEM_MYSTIC_TICKET + vgoto_if_eq VAR_RESULT, TRUE, MysticTicket_Obtained vmessage sText_MysticTicketForYou waitmessage waitbuttonpress - checkitemspace ITEM_MYSTIC_TICKET, 1 - compare VAR_RESULT, FALSE - vgoto_if_eq MysticTicket_NoBagSpace + checkitemspace ITEM_MYSTIC_TICKET + vgoto_if_eq VAR_RESULT, FALSE, MysticTicket_NoBagSpace giveitem ITEM_MYSTIC_TICKET setflag FLAG_ENABLE_SHIP_NAVEL_ROCK setflag FLAG_RECEIVED_MYSTIC_TICKET diff --git a/data/scripts/mevent_old_sea_map.inc b/data/scripts/gift_old_sea_map.inc similarity index 83% rename from data/scripts/mevent_old_sea_map.inc rename to data/scripts/gift_old_sea_map.inc index 68714117b3..06435492e4 100644 --- a/data/scripts/mevent_old_sea_map.inc +++ b/data/scripts/gift_old_sea_map.inc @@ -1,18 +1,16 @@ -MysteryEventScript_OldSeaMap:: - setvaddress MysteryEventScript_OldSeaMap +MysteryGiftScript_OldSeaMap:: + setvaddress MysteryGiftScript_OldSeaMap lock faceplayer vgoto_if_set FLAG_RECEIVED_OLD_SEA_MAP, OldSeaMap_Obtained vgoto_if_set FLAG_CAUGHT_MEW, OldSeaMap_Obtained - checkitem ITEM_OLD_SEA_MAP, 1 - compare VAR_RESULT, TRUE - vgoto_if_eq OldSeaMap_Obtained + checkitem ITEM_OLD_SEA_MAP + vgoto_if_eq VAR_RESULT, TRUE, OldSeaMap_Obtained vmessage sText_MysteryGiftOldSeaMapForYou waitmessage waitbuttonpress - checkitemspace ITEM_OLD_SEA_MAP, 1 - compare VAR_RESULT, FALSE - vgoto_if_eq OldSeaMap_NoBagSpace + checkitemspace ITEM_OLD_SEA_MAP + vgoto_if_eq VAR_RESULT, FALSE, OldSeaMap_NoBagSpace giveitem ITEM_OLD_SEA_MAP setflag FLAG_ENABLE_SHIP_FARAWAY_ISLAND setflag FLAG_RECEIVED_OLD_SEA_MAP diff --git a/data/scripts/mevent_pichu.inc b/data/scripts/gift_pichu.inc similarity index 58% rename from data/scripts/mevent_pichu.inc rename to data/scripts/gift_pichu.inc index 02b47b41f6..d2cd381b53 100644 --- a/data/scripts/mevent_pichu.inc +++ b/data/scripts/gift_pichu.inc @@ -1,13 +1,12 @@ -MysteryEventScript_SurfPichu:: - setvaddress MysteryEventScript_SurfPichu - vgoto_if_unset FLAG_MYSTERY_EVENT_DONE, SurfPichu_GiveIfPossible +MysteryGiftScript_SurfPichu:: + setvaddress MysteryGiftScript_SurfPichu + vgoto_if_unset FLAG_MYSTERY_GIFT_DONE, SurfPichu_GiveIfPossible returnram SurfPichu_GiveIfPossible: - specialvar VAR_EVENT_PICHU_SLOT, CalculatePlayerPartyCount - compare VAR_EVENT_PICHU_SLOT, PARTY_SIZE - vgoto_if_eq SurfPichu_FullParty - setflag FLAG_MYSTERY_EVENT_DONE + specialvar VAR_GIFT_PICHU_SLOT, CalculatePlayerPartyCount + vgoto_if_eq VAR_GIFT_PICHU_SLOT, PARTY_SIZE, SurfPichu_FullParty + setflag FLAG_MYSTERY_GIFT_DONE vcall SurfPichu_GiveEgg lock faceplayer @@ -30,18 +29,13 @@ SurfPichu_FullParty: SurfPichu_GiveEgg: giveegg SPECIES_PICHU - setmoneventlegal VAR_EVENT_PICHU_SLOT - setmonmetlocation VAR_EVENT_PICHU_SLOT, METLOC_FATEFUL_ENCOUNTER - compare VAR_EVENT_PICHU_SLOT, 1 - vgoto_if_eq SurfPichu_Slot1 - compare VAR_EVENT_PICHU_SLOT, 2 - vgoto_if_eq SurfPichu_Slot2 - compare VAR_EVENT_PICHU_SLOT, 3 - vgoto_if_eq SurfPichu_Slot3 - compare VAR_EVENT_PICHU_SLOT, 4 - vgoto_if_eq SurfPichu_Slot4 - compare VAR_EVENT_PICHU_SLOT, 5 - vgoto_if_eq SurfPichu_Slot5 + setmoneventlegal VAR_GIFT_PICHU_SLOT + setmonmetlocation VAR_GIFT_PICHU_SLOT, METLOC_FATEFUL_ENCOUNTER + vgoto_if_eq VAR_GIFT_PICHU_SLOT, 1, SurfPichu_Slot1 + vgoto_if_eq VAR_GIFT_PICHU_SLOT, 2, SurfPichu_Slot2 + vgoto_if_eq VAR_GIFT_PICHU_SLOT, 3, SurfPichu_Slot3 + vgoto_if_eq VAR_GIFT_PICHU_SLOT, 4, SurfPichu_Slot4 + vgoto_if_eq VAR_GIFT_PICHU_SLOT, 5, SurfPichu_Slot5 return SurfPichu_Slot1: diff --git a/data/scripts/mevent_stamp_card.inc b/data/scripts/gift_stamp_card.inc similarity index 65% rename from data/scripts/mevent_stamp_card.inc rename to data/scripts/gift_stamp_card.inc index eeb3618548..4ac399bec5 100644 --- a/data/scripts/mevent_stamp_card.inc +++ b/data/scripts/gift_stamp_card.inc @@ -1,11 +1,11 @@ -MysteryEventScript_StampCard:: - setvaddress MysteryEventScript_StampCard +MysteryGiftScript_StampCard:: + setvaddress MysteryGiftScript_StampCard setorcopyvar VAR_RESULT, GET_MAX_STAMPS - specialvar VAR_0x8008, GetMysteryEventCardVal + specialvar VAR_0x8008, GetMysteryGiftCardStat setorcopyvar VAR_RESULT, GET_NUM_STAMPS - specialvar VAR_0x8009, GetMysteryEventCardVal + specialvar VAR_0x8009, GetMysteryGiftCardStat subvar VAR_0x8008, VAR_0x8009 - buffernumberstring 0, VAR_0x8008 + buffernumberstring STR_VAR_1, VAR_0x8008 lock faceplayer vmessage sText_MysteryGiftStampCard diff --git a/data/scripts/mevent_trainer.inc b/data/scripts/gift_trainer.inc similarity index 85% rename from data/scripts/mevent_trainer.inc rename to data/scripts/gift_trainer.inc index f4318408d2..b927809058 100644 --- a/data/scripts/mevent_trainer.inc +++ b/data/scripts/gift_trainer.inc @@ -1,8 +1,7 @@ -MysteryEventScript_VisitingTrainer:: - setvaddress MysteryEventScript_VisitingTrainer +MysteryGiftScript_VisitingTrainer:: + setvaddress MysteryGiftScript_VisitingTrainer special ValidateEReaderTrainer - compare VAR_RESULT, 0 - vgoto_if_eq MysteryEventScript_VisitingTrainerArrived + vgoto_if_eq VAR_RESULT, 0, MysteryGiftScript_VisitingTrainerArrived lock faceplayer vmessage sText_MysteryGiftVisitingTrainerInstructions @@ -11,7 +10,7 @@ MysteryEventScript_VisitingTrainer:: release end -MysteryEventScript_VisitingTrainerArrived: +MysteryGiftScript_VisitingTrainerArrived: lock faceplayer vmessage sText_MysteryGiftVisitingTrainerArrived diff --git a/data/scripts/hall_of_fame.inc b/data/scripts/hall_of_fame.inc index 9b730de317..fc082870f7 100644 --- a/data/scripts/hall_of_fame.inc +++ b/data/scripts/hall_of_fame.inc @@ -2,8 +2,7 @@ EverGrandeCity_HallOfFame_EventScript_SetGameClearFlags:: special SetChampionSaveWarp setflag FLAG_IS_CHAMPION call EverGrandeCity_HallOfFame_EventScript_ResetDefeatedEventLegendaries - compare VAR_FOSSIL_MANIAC_STATE, 0 - call_if_eq EverGrandeCity_HallOfFame_EventScript_SetDesertUnderpassCommentReady + call_if_eq VAR_FOSSIL_MANIAC_STATE, 0, EverGrandeCity_HallOfFame_EventScript_SetDesertUnderpassCommentReady clearflag FLAG_HIDE_LILYCOVE_MOTEL_GAME_DESIGNERS call EverGrandeCity_HallOfFame_EventScript_ResetEliteFour setflag FLAG_HIDE_SLATEPORT_CITY_STERNS_SHIPYARD_MR_BRINEY @@ -22,8 +21,7 @@ EverGrandeCity_HallOfFame_EventScript_SetGameClearFlags:: call_if_unset FLAG_RECEIVED_BELDUM, EverGrandeCity_HallOfFame_EventScript_ShowStevensHouseBeldum setflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_BEDROOM setflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_BEDROOM - compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 0 - call_if_eq EverGrandeCity_HallOfFame_EventScript_ReadyDexUpgradeEvent + call_if_eq VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 0, EverGrandeCity_HallOfFame_EventScript_ReadyDexUpgradeEvent return EverGrandeCity_HallOfFame_EventScript_ResetDefeatedEventLegendaries:: diff --git a/data/scripts/interview.inc b/data/scripts/interview.inc index 90fceb9d18..e102bf889c 100644 --- a/data/scripts/interview.inc +++ b/data/scripts/interview.inc @@ -8,14 +8,11 @@ Interview_EventScript_EndInterview:: SlateportCity_PokemonFanClub_EventScript_ReporterNoNickname:: setvar VAR_0x8005, TVSHOW_FAN_CLUB_LETTER special InterviewBefore - compare VAR_RESULT, TRUE - goto_if_eq SlateportCity_PokemonFanClub_EventScript_AlreadyInterviewed2 + goto_if_eq VAR_RESULT, TRUE, SlateportCity_PokemonFanClub_EventScript_AlreadyInterviewed2 copyvar VAR_0x8009, VAR_0x8006 msgbox SlateportCity_PokemonFanClub_Text_InterviewRequest, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SlateportCity_PokemonFanClub_EventScript_AcceptInterview2 - compare VAR_RESULT, NO - goto_if_eq SlateportCity_PokemonFanClub_EventScript_DeclineInterview2 + goto_if_eq VAR_RESULT, YES, SlateportCity_PokemonFanClub_EventScript_AcceptInterview2 + goto_if_eq VAR_RESULT, NO, SlateportCity_PokemonFanClub_EventScript_DeclineInterview2 end SlateportCity_PokemonFanClub_EventScript_AcceptInterview2:: @@ -26,10 +23,8 @@ SlateportCity_PokemonFanClub_EventScript_AcceptInterview2:: call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 1 - goto_if_eq SlateportCity_PokemonFanClub_EventScript_SubmitResponse2 - compare VAR_RESULT, 0 - goto_if_eq SlateportCity_PokemonFanClub_EventScript_DeclineInterview2 + goto_if_eq VAR_RESULT, 1, SlateportCity_PokemonFanClub_EventScript_SubmitResponse2 + goto_if_eq VAR_RESULT, 0, SlateportCity_PokemonFanClub_EventScript_DeclineInterview2 end SlateportCity_PokemonFanClub_EventScript_DeclineInterview2:: @@ -53,24 +48,19 @@ SlateportCity_OceanicMuseum_1F_EventScript_Reporter:: faceplayer setvar VAR_0x8005, TVSHOW_RECENT_HAPPENINGS special InterviewBefore - compare VAR_RESULT, TRUE - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_AlreadyInterviewed + goto_if_eq VAR_RESULT, TRUE, SlateportCity_OceanicMuseum_1F_EventScript_AlreadyInterviewed copyvar VAR_0x8009, VAR_0x8006 goto_if_set FLAG_OCEANIC_MUSEUM_MET_REPORTER, SlateportCity_OceanicMuseum_1F_EventScript_RequestInterviewShort setflag FLAG_OCEANIC_MUSEUM_MET_REPORTER msgbox SlateportCity_OceanicMuseum_1F_Text_InterviewRequest, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_AcceptInterview - compare VAR_RESULT, NO - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_DeclineInterview + goto_if_eq VAR_RESULT, YES, SlateportCity_OceanicMuseum_1F_EventScript_AcceptInterview + goto_if_eq VAR_RESULT, NO, SlateportCity_OceanicMuseum_1F_EventScript_DeclineInterview end SlateportCity_OceanicMuseum_1F_EventScript_RequestInterviewShort:: msgbox SlateportCity_OceanicMuseum_1F_Text_InterviewRequestShort, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_AcceptInterview - compare VAR_RESULT, NO - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_DeclineInterview + goto_if_eq VAR_RESULT, YES, SlateportCity_OceanicMuseum_1F_EventScript_AcceptInterview + goto_if_eq VAR_RESULT, NO, SlateportCity_OceanicMuseum_1F_EventScript_DeclineInterview end SlateportCity_OceanicMuseum_1F_EventScript_AcceptInterview:: @@ -81,10 +71,8 @@ SlateportCity_OceanicMuseum_1F_EventScript_AcceptInterview:: call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 1 - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_SubmitResponse - compare VAR_RESULT, 0 - goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_DeclineInterview + goto_if_eq VAR_RESULT, 1, SlateportCity_OceanicMuseum_1F_EventScript_SubmitResponse + goto_if_eq VAR_RESULT, 0, SlateportCity_OceanicMuseum_1F_EventScript_DeclineInterview end SlateportCity_OceanicMuseum_1F_EventScript_DeclineInterview:: @@ -107,18 +95,14 @@ SlateportCity_PokemonFanClub_EventScript_Reporter:: lock faceplayer specialvar VAR_RESULT, IsLeadMonNicknamedOrNotEnglish - compare VAR_RESULT, FALSE - goto_if_eq SlateportCity_PokemonFanClub_EventScript_ReporterNoNickname + goto_if_eq VAR_RESULT, FALSE, SlateportCity_PokemonFanClub_EventScript_ReporterNoNickname setvar VAR_0x8005, TVSHOW_PKMN_FAN_CLUB_OPINIONS special InterviewBefore - compare VAR_RESULT, TRUE - goto_if_eq SlateportCity_PokemonFanClub_EventScript_AlreadyInterviewed + goto_if_eq VAR_RESULT, TRUE, SlateportCity_PokemonFanClub_EventScript_AlreadyInterviewed copyvar VAR_0x8009, VAR_0x8006 msgbox SlateportCity_PokemonFanClub_Text_InterviewRequestHasName, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SlateportCity_PokemonFanClub_EventScript_AcceptInterview - compare VAR_RESULT, NO - goto_if_eq SlateportCity_PokemonFanClub_EventScript_DeclineInterview + goto_if_eq VAR_RESULT, YES, SlateportCity_PokemonFanClub_EventScript_AcceptInterview + goto_if_eq VAR_RESULT, NO, SlateportCity_PokemonFanClub_EventScript_DeclineInterview end SlateportCity_PokemonFanClub_EventScript_AcceptInterview:: @@ -153,15 +137,13 @@ SlateportCity_PokemonFanClub_EventScript_ContinueInterview:: call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 0 - goto_if_eq SlateportCity_PokemonFanClub_EventScript_DeclineInterview + goto_if_eq VAR_RESULT, 0, SlateportCity_PokemonFanClub_EventScript_DeclineInterview msgbox SlateportCity_PokemonFanClub_Text_WhatDoPokemonMeanToYou, MSGBOX_DEFAULT setvar VAR_0x8006, 1 call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 0 - goto_if_eq SlateportCity_PokemonFanClub_EventScript_DeclineInterview + goto_if_eq VAR_RESULT, 0, SlateportCity_PokemonFanClub_EventScript_DeclineInterview msgbox SlateportCity_PokemonFanClub_Text_ThatsAllForInterview, MSGBOX_DEFAULT copyvar VAR_0x8007, VAR_0x800A setvar VAR_0x8005, TVSHOW_PKMN_FAN_CLUB_OPINIONS @@ -184,14 +166,11 @@ LilycoveCity_ContestLobby_EventScript_Reporter:: goto_if_set FLAG_TEMP_2, LilycoveCity_ContestLobby_EventScript_AlreadyInterviewed setvar VAR_0x8005, TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE special InterviewBefore - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_ContestLobby_EventScript_AlreadyInterviewed + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_ContestLobby_EventScript_AlreadyInterviewed copyvar VAR_0x8009, VAR_0x8006 msgbox LilycoveCity_ContestLobby_Text_InterviewRequest, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_ContestLobby_EventScript_AcceptInterview - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_ContestLobby_EventScript_DeclineInterview + goto_if_eq VAR_RESULT, YES, LilycoveCity_ContestLobby_EventScript_AcceptInterview + goto_if_eq VAR_RESULT, NO, LilycoveCity_ContestLobby_EventScript_DeclineInterview end LilycoveCity_ContestLobby_EventScript_AcceptInterview:: @@ -202,10 +181,8 @@ LilycoveCity_ContestLobby_EventScript_AcceptInterview:: call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_ContestLobby_EventScript_SubmitResponse - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_ContestLobby_EventScript_DeclineInterview + goto_if_eq VAR_RESULT, 1, LilycoveCity_ContestLobby_EventScript_SubmitResponse + goto_if_eq VAR_RESULT, 0, LilycoveCity_ContestLobby_EventScript_DeclineInterview end LilycoveCity_ContestLobby_EventScript_DeclineInterview:: @@ -223,8 +200,7 @@ LilycoveCity_ContestLobby_EventScript_SubmitResponse:: call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_ContestLobby_EventScript_DeclineInterview + goto_if_eq VAR_RESULT, 0, LilycoveCity_ContestLobby_EventScript_DeclineInterview msgbox LilycoveCity_ContestLobby_Text_ThatsAllForInterview, MSGBOX_DEFAULT setflag FLAG_TEMP_2 setvar VAR_0x8005, TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE @@ -237,12 +213,10 @@ LilycoveCity_ContestLobby_EventScript_AlreadyInterviewed:: end LilycoveCity_ContestLobby_EventScript_TryShowContestReporter:: - compare VAR_CONTEST_HALL_STATE, 2 - goto_if_ne LilycoveCity_ContestLobby_EventScript_DontShowContestReporter + goto_if_ne VAR_CONTEST_HALL_STATE, 2, LilycoveCity_ContestLobby_EventScript_DontShowContestReporter setvar VAR_0x8005, TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE special InterviewBefore - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_ContestLobby_EventScript_DontShowContestReporter + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_ContestLobby_EventScript_DontShowContestReporter switch VAR_CONTEST_TYPE case 0, LilycoveCity_ContestLobby_EventScript_DontShowContestReporter case 2, LilycoveCity_ContestLobby_EventScript_ShowContestReporter @@ -265,14 +239,11 @@ BattleFrontier_BattleTowerLobby_EventScript_Reporter:: goto_if_set FLAG_TEMP_2, BattleFrontier_BattleTowerLobby_EventScript_AlreadyInterviewed setvar VAR_0x8005, TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE special InterviewBefore - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AlreadyInterviewed + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_AlreadyInterviewed copyvar VAR_0x8009, VAR_0x8006 msgbox BattleFrontier_BattleTowerLobby_Text_InterviewRequest, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AcceptInterview - compare VAR_RESULT, NO - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_DeclineInterview + goto_if_eq VAR_RESULT, YES, BattleFrontier_BattleTowerLobby_EventScript_AcceptInterview + goto_if_eq VAR_RESULT, NO, BattleFrontier_BattleTowerLobby_EventScript_DeclineInterview end BattleFrontier_BattleTowerLobby_EventScript_AcceptInterview:: @@ -280,20 +251,16 @@ BattleFrontier_BattleTowerLobby_EventScript_AcceptInterview:: waitmessage multichoice 20, 8, MULTI_SATISFACTION, TRUE copyvar VAR_0x8008, VAR_RESULT - compare VAR_RESULT, 0 - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_Satisfied - compare VAR_RESULT, 1 - call_if_eq BattleFrontier_BattleTowerLobby_EventScript_Dissatisfied + call_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_Satisfied + call_if_eq VAR_RESULT, 1, BattleFrontier_BattleTowerLobby_EventScript_Dissatisfied msgbox BattleFrontier_BattleTowerLobby_Text_DescribeYourBattle, MSGBOX_DEFAULT setvar VAR_0x8004, EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW copyvar VAR_0x8005, VAR_0x8009 call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 1 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_SubmitResponse - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelInterview + goto_if_eq VAR_RESULT, 1, BattleFrontier_BattleTowerLobby_EventScript_SubmitResponse + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelInterview end BattleFrontier_BattleTowerLobby_EventScript_DeclineInterview:: @@ -310,8 +277,7 @@ BattleFrontier_BattleTowerLobby_EventScript_Dissatisfied:: return BattleFrontier_BattleTowerLobby_EventScript_SubmitResponse:: - compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelInterview + goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelInterview msgbox BattleFrontier_BattleTowerLobby_Text_ThatsGreatLine, MSGBOX_DEFAULT setflag FLAG_TEMP_2 copyvar VAR_0x8004, VAR_0x8008 @@ -330,12 +296,10 @@ BattleFrontier_BattleTowerLobby_EventScript_AlreadyInterviewed:: end BattleFrontier_BattleTowerLobby_EventScript_ShowOrHideReporter:: - compare VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, 0 - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_HideReporter + goto_if_eq VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, 0, BattleFrontier_BattleTowerLobby_EventScript_HideReporter setvar VAR_0x8005, TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE special InterviewBefore - compare VAR_RESULT, TRUE - goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_HideReporter + goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_HideReporter clearflag FLAG_HIDE_BATTLE_TOWER_REPORTER return @@ -347,8 +311,7 @@ BattleFrontier_BattleTowerLobby_EventScript_HideReporter:: EventScript_ContestLiveInterview:: setvar VAR_0x8005, TVSHOW_CONTEST_LIVE_UPDATES special InterviewBefore - compare VAR_RESULT, TRUE - goto_if_eq EventScript_ContestLiveInterviewEnd + goto_if_eq VAR_RESULT, TRUE, EventScript_ContestLiveInterviewEnd setvar VAR_0x8005, TVSHOW_CONTEST_LIVE_UPDATES special InterviewAfter return diff --git a/data/scripts/item_ball_scripts.inc b/data/scripts/item_ball_scripts.inc index 683c383df5..5ad4037cbe 100644 --- a/data/scripts/item_ball_scripts.inc +++ b/data/scripts/item_ball_scripts.inc @@ -127,7 +127,7 @@ Route115_EventScript_ItemPPUp:: end Route116_EventScript_ItemXSpecial:: - finditem ITEM_X_SPECIAL + finditem ITEM_X_SP_ATK end Route116_EventScript_ItemEther:: @@ -315,7 +315,7 @@ MauvilleCity_EventScript_ItemXSpeed:: end RustboroCity_EventScript_ItemXDefend:: - finditem ITEM_X_DEFEND + finditem ITEM_X_DEFENSE end LilycoveCity_EventScript_ItemMaxRepel:: diff --git a/data/scripts/kecleon.inc b/data/scripts/kecleon.inc index 4142174990..6345519026 100644 --- a/data/scripts/kecleon.inc +++ b/data/scripts/kecleon.inc @@ -48,17 +48,15 @@ Route119_EventScript_Kecleon2:: end EventScript_Kecleon:: - checkitem ITEM_DEVON_SCOPE, 1 - compare VAR_RESULT, 1 - goto_if_eq EventScript_AskUseDevonScope + checkitem ITEM_DEVON_SCOPE + goto_if_eq VAR_RESULT, TRUE, EventScript_AskUseDevonScope msgbox Kecleon_Text_SomethingUnseeable, MSGBOX_DEFAULT release end EventScript_AskUseDevonScope:: msgbox Kecleon_Text_WantToUseDevonScope, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq EventScript_BattleKecleon + goto_if_eq VAR_RESULT, YES, EventScript_BattleKecleon release end @@ -70,20 +68,17 @@ EventScript_BattleKecleon:: applymovement VAR_LAST_TALKED, Movement_KecleonAppears waitmovement 0 waitse - playmoncry SPECIES_KECLEON, 2 + playmoncry SPECIES_KECLEON, CRY_MODE_ENCOUNTER delay 40 waitmoncry - setwildbattle SPECIES_KECLEON, 30, ITEM_NONE + setwildbattle SPECIES_KECLEON, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE dowildbattle clearflag FLAG_SYS_CTRL_OBJ_DELETE specialvar VAR_RESULT, GetBattleOutcome - compare VAR_RESULT, B_OUTCOME_WON - goto_if_eq EventScript_RemoveKecleon - compare VAR_RESULT, B_OUTCOME_RAN - goto_if_eq EventScript_RemoveKecleon - compare VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED - goto_if_eq EventScript_RemoveKecleon + goto_if_eq VAR_RESULT, B_OUTCOME_WON, EventScript_RemoveKecleon + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, EventScript_RemoveKecleon + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, EventScript_RemoveKecleon release end diff --git a/data/scripts/lilycove_lady.inc b/data/scripts/lilycove_lady.inc index 137af87524..5519de9791 100644 --- a/data/scripts/lilycove_lady.inc +++ b/data/scripts/lilycove_lady.inc @@ -2,858 +2,789 @@ .set LOCALID_LADYS_MON, 5 LilycoveCity_PokemonCenter_1F_EventScript_LilycoveLady:: - special Script_GetLilycoveLadyId - switch VAR_RESULT - case LILYCOVE_LADY_QUIZ, LilycoveCity_PokemonCenter_1F_EventScript_QuizLady - case LILYCOVE_LADY_FAVOR, LilycoveCity_PokemonCenter_1F_EventScript_FavorLady - case LILYCOVE_LADY_CONTEST, LilycoveCity_PokemonCenter_1F_EventScript_ContestLady - end + special Script_GetLilycoveLadyId + switch VAR_RESULT + case LILYCOVE_LADY_QUIZ, LilycoveCity_PokemonCenter_1F_EventScript_QuizLady + case LILYCOVE_LADY_FAVOR, LilycoveCity_PokemonCenter_1F_EventScript_FavorLady + case LILYCOVE_LADY_CONTEST, LilycoveCity_PokemonCenter_1F_EventScript_ContestLady + end LilycoveCity_PokemonCenter_1F_EventScript_FavorLady:: - lock - faceplayer - msgbox LilycoveCity_PokemonCenter_1F_Text_ImTheFavorLady, MSGBOX_DEFAULT - specialvar VAR_RESULT, GetFavorLadyState - compare VAR_RESULT, LILYCOVE_LADY_STATE_READY - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyReady - compare VAR_RESULT, LILYCOVE_LADY_STATE_COMPLETED - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyCompleted - compare VAR_RESULT, LILYCOVE_LADY_STATE_PRIZE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyPrize - end + lock + faceplayer + msgbox LilycoveCity_PokemonCenter_1F_Text_ImTheFavorLady, MSGBOX_DEFAULT + specialvar VAR_RESULT, GetFavorLadyState + goto_if_eq VAR_RESULT, LILYCOVE_LADY_STATE_READY, LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyReady + goto_if_eq VAR_RESULT, LILYCOVE_LADY_STATE_COMPLETED, LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyCompleted + goto_if_eq VAR_RESULT, LILYCOVE_LADY_STATE_PRIZE, LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyPrize + end LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyCompleted:: - msgbox LilycoveCity_PokemonCenter_1F_Text_ThankYouForLastTime, MSGBOX_DEFAULT - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_ThankYouForLastTime, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyReady:: - special BufferFavorLadyRequest - msgbox LilycoveCity_PokemonCenter_1F_Text_ObsessedWithThing, MSGBOX_DEFAULT - specialvar VAR_RESULT, HasAnotherPlayerGivenFavorLadyItem - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_RequestItem - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_TellAboutPlayersItem - end + special BufferFavorLadyRequest + msgbox LilycoveCity_PokemonCenter_1F_Text_ObsessedWithThing, MSGBOX_DEFAULT + specialvar VAR_RESULT, HasAnotherPlayerGivenFavorLadyItem + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_RequestItem + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonCenter_1F_EventScript_TellAboutPlayersItem + end LilycoveCity_PokemonCenter_1F_EventScript_TellAboutPlayersItem:: - special BufferFavorLadyItemName - special BufferFavorLadyPlayerName - specialvar VAR_RESULT, DidFavorLadyLikeItem - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_PlayerGaveBadThing - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_PlayerGaveGreatThing - end + special BufferFavorLadyItemName + special BufferFavorLadyPlayerName + specialvar VAR_RESULT, DidFavorLadyLikeItem + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_PlayerGaveBadThing + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonCenter_1F_EventScript_PlayerGaveGreatThing + end LilycoveCity_PokemonCenter_1F_EventScript_PlayerGaveBadThing:: - msgbox LilycoveCity_PokemonCenter_1F_Text_PlayerGaveMeBadThing, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_RequestItem - end + msgbox LilycoveCity_PokemonCenter_1F_Text_PlayerGaveMeBadThing, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_RequestItem + end LilycoveCity_PokemonCenter_1F_EventScript_PlayerGaveGreatThing:: - msgbox LilycoveCity_PokemonCenter_1F_Text_PlayerGaveMeGreatThing, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_RequestItem - end + msgbox LilycoveCity_PokemonCenter_1F_Text_PlayerGaveMeGreatThing, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_RequestItem + end LilycoveCity_PokemonCenter_1F_EventScript_RequestItem:: - msgbox LilycoveCity_PokemonCenter_1F_Text_WillYouShareThing, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_DeclineFavor - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_AcceptFavor - end + msgbox LilycoveCity_PokemonCenter_1F_Text_WillYouShareThing, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonCenter_1F_EventScript_DeclineFavor + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonCenter_1F_EventScript_AcceptFavor + end LilycoveCity_PokemonCenter_1F_EventScript_DeclineFavor:: - msgbox LilycoveCity_PokemonCenter_1F_Text_IsThatSoGoodbye, MSGBOX_DEFAULT - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_IsThatSoGoodbye, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_AcceptFavor:: - msgbox LilycoveCity_PokemonCenter_1F_Text_WhatWillYouGiveMe, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_ChooseFavorItem - end + msgbox LilycoveCity_PokemonCenter_1F_Text_WhatWillYouGiveMe, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_ChooseFavorItem + end LilycoveCity_PokemonCenter_1F_EventScript_ChooseFavorItem:: - fadescreen FADE_TO_BLACK - setvar VAR_RESULT, 0 - special Script_FavorLadyOpenBagMenu - waitstate - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_AskQuitChooseFavorItem - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_GiveFavorItem - end + fadescreen FADE_TO_BLACK + setvar VAR_RESULT, 0 + special Script_FavorLadyOpenBagMenu + waitstate + goto_if_eq VAR_RESULT, 0, LilycoveCity_PokemonCenter_1F_EventScript_AskQuitChooseFavorItem + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonCenter_1F_EventScript_GiveFavorItem + end LilycoveCity_PokemonCenter_1F_EventScript_AskQuitChooseFavorItem:: - msgbox LilycoveCity_PokemonCenter_1F_Text_NotWillingToShare, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_DeclineFavor - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_ChooseFavorItem - end + msgbox LilycoveCity_PokemonCenter_1F_Text_NotWillingToShare, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonCenter_1F_EventScript_DeclineFavor + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonCenter_1F_EventScript_ChooseFavorItem + end LilycoveCity_PokemonCenter_1F_EventScript_GiveFavorItem:: - specialvar VAR_RESULT, Script_DoesFavorLadyLikeItem - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_DidntLikeFavorItem - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_CheckLovedItem - end + specialvar VAR_RESULT, Script_DoesFavorLadyLikeItem + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_DidntLikeFavorItem + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonCenter_1F_EventScript_CheckLovedItem + end LilycoveCity_PokemonCenter_1F_EventScript_DidntLikeFavorItem:: - special BufferFavorLadyRequest - msgbox LilycoveCity_PokemonCenter_1F_Text_IllTryToCherishIt, MSGBOX_DEFAULT - release - end + special BufferFavorLadyRequest + msgbox LilycoveCity_PokemonCenter_1F_Text_IllTryToCherishIt, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_CheckLovedItem:: - specialvar VAR_RESULT, IsFavorLadyThresholdMet - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_LikedFavorItem - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_LovedFavorItem - end + specialvar VAR_RESULT, IsFavorLadyThresholdMet + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_LikedFavorItem + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonCenter_1F_EventScript_LovedFavorItem + end LilycoveCity_PokemonCenter_1F_EventScript_LikedFavorItem:: - special BufferFavorLadyRequest - msgbox LilycoveCity_PokemonCenter_1F_Text_IWillCherishThis, MSGBOX_DEFAULT - release - end + special BufferFavorLadyRequest + msgbox LilycoveCity_PokemonCenter_1F_Text_IWillCherishThis, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_LovedFavorItem:: - special BufferFavorLadyRequest - msgbox LilycoveCity_PokemonCenter_1F_Text_IWillTreasureThis, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyPrize - end + special BufferFavorLadyRequest + msgbox LilycoveCity_PokemonCenter_1F_Text_IWillTreasureThis, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyPrize + end LilycoveCity_PokemonCenter_1F_EventScript_FavorLadyPrize:: - setvar VAR_0x8004, 0 - specialvar VAR_0x8004, FavorLadyGetPrize - msgbox LilycoveCity_PokemonCenter_1F_Text_IllGiveYouThisInReturn, MSGBOX_DEFAULT - giveitem VAR_0x8004 - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_NoRoomForFavorPrize - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_ReceivedFavorPrize - end + setvar VAR_0x8004, 0 + specialvar VAR_0x8004, FavorLadyGetPrize + msgbox LilycoveCity_PokemonCenter_1F_Text_IllGiveYouThisInReturn, MSGBOX_DEFAULT + giveitem VAR_0x8004 + goto_if_eq VAR_RESULT, 0, LilycoveCity_PokemonCenter_1F_EventScript_NoRoomForFavorPrize + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonCenter_1F_EventScript_ReceivedFavorPrize + end LilycoveCity_PokemonCenter_1F_EventScript_NoRoomForFavorPrize:: - msgbox LilycoveCity_PokemonCenter_1F_Text_YouDontHaveSpaceForIt, MSGBOX_DEFAULT - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_YouDontHaveSpaceForIt, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_ReceivedFavorPrize:: - special SetFavorLadyState_Complete - release - end + special SetFavorLadyState_Complete + release + end LilycoveCity_PokemonCenter_1F_EventScript_QuizLady:: - lock - faceplayer - msgbox LilycoveCity_PokemonCenter_1F_Text_ImTheQuizLady, MSGBOX_DEFAULT - specialvar VAR_RESULT, GetQuizLadyState - compare VAR_RESULT, LILYCOVE_LADY_STATE_READY - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_HasQuiz - compare VAR_RESULT, LILYCOVE_LADY_STATE_COMPLETED - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_CheckMadeQuiz - compare VAR_RESULT, LILYCOVE_LADY_STATE_PRIZE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_ReadyGivePrize - end + lock + faceplayer + msgbox LilycoveCity_PokemonCenter_1F_Text_ImTheQuizLady, MSGBOX_DEFAULT + specialvar VAR_RESULT, GetQuizLadyState + goto_if_eq VAR_RESULT, LILYCOVE_LADY_STATE_READY, LilycoveCity_PokemonCenter_1F_EventScript_HasQuiz + goto_if_eq VAR_RESULT, LILYCOVE_LADY_STATE_COMPLETED, LilycoveCity_PokemonCenter_1F_EventScript_CheckMadeQuiz + goto_if_eq VAR_RESULT, LILYCOVE_LADY_STATE_PRIZE, LilycoveCity_PokemonCenter_1F_EventScript_ReadyGivePrize + end LilycoveCity_PokemonCenter_1F_EventScript_HasQuiz:: - specialvar VAR_RESULT, GetQuizAuthor - compare VAR_RESULT, QUIZ_AUTHOR_PLAYER - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_WaitingToTakeYourQuiz - compare VAR_RESULT, QUIZ_AUTHOR_OTHER_PLAYER - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_PlayerQuizReady - compare VAR_RESULT, QUIZ_AUTHOR_LADY - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_LadyQuizReady - end + specialvar VAR_RESULT, GetQuizAuthor + goto_if_eq VAR_RESULT, QUIZ_AUTHOR_PLAYER, LilycoveCity_PokemonCenter_1F_EventScript_WaitingToTakeYourQuiz + goto_if_eq VAR_RESULT, QUIZ_AUTHOR_OTHER_PLAYER, LilycoveCity_PokemonCenter_1F_EventScript_PlayerQuizReady + goto_if_eq VAR_RESULT, QUIZ_AUTHOR_LADY, LilycoveCity_PokemonCenter_1F_EventScript_LadyQuizReady + end LilycoveCity_PokemonCenter_1F_EventScript_CheckMadeQuiz:: - specialvar VAR_RESULT, IsQuizLadyWaitingForChallenger - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_AskMakeQuiz - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_WaitingToTakeYourQuiz - end + specialvar VAR_RESULT, IsQuizLadyWaitingForChallenger + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_AskMakeQuiz + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonCenter_1F_EventScript_WaitingToTakeYourQuiz + end LilycoveCity_PokemonCenter_1F_EventScript_WaitingToTakeYourQuiz:: - msgbox LilycoveCity_PokemonCenter_1F_Text_WaitingToTakeYourQuiz, MSGBOX_DEFAULT - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_WaitingToTakeYourQuiz, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_PlayerQuizReady:: - msgbox LilycoveCity_PokemonCenter_1F_Text_WaitingForChallenger, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_AskTakeQuiz - end + msgbox LilycoveCity_PokemonCenter_1F_Text_WaitingForChallenger, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_AskTakeQuiz + end LilycoveCity_PokemonCenter_1F_EventScript_LadyQuizReady:: - msgbox LilycoveCity_PokemonCenter_1F_Text_WaitingForChallenger, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_AskTakeQuiz - end + msgbox LilycoveCity_PokemonCenter_1F_Text_WaitingForChallenger, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_AskTakeQuiz + end LilycoveCity_PokemonCenter_1F_EventScript_AskTakeQuiz:: - setvar VAR_0x8004, 0 - msgbox LilycoveCity_PokemonCenter_1F_Text_TakeQuizChallenge, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_TakeQuiz - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_DeclineQuiz - end + setvar VAR_0x8004, 0 + msgbox LilycoveCity_PokemonCenter_1F_Text_TakeQuizChallenge, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonCenter_1F_EventScript_TakeQuiz + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonCenter_1F_EventScript_DeclineQuiz + end LilycoveCity_PokemonCenter_1F_EventScript_DeclineQuiz:: - msgbox LilycoveCity_PokemonCenter_1F_Text_HowBoringBye, MSGBOX_DEFAULT - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_HowBoringBye, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_TakeQuiz:: - special ClearQuizLadyPlayerAnswer - compare VAR_0x8004, 0 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_ShowQuestion - compare VAR_0x8004, EASY_CHAT_TYPE_QUIZ_ANSWER - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_GetAnswer + special ClearQuizLadyPlayerAnswer + goto_if_eq VAR_0x8004, 0, LilycoveCity_PokemonCenter_1F_EventScript_ShowQuestion + goto_if_eq VAR_0x8004, EASY_CHAT_TYPE_QUIZ_ANSWER, LilycoveCity_PokemonCenter_1F_EventScript_GetAnswer LilycoveCity_PokemonCenter_1F_EventScript_CheckQuizTakingState:: - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_AskQuitQuiz - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_SubmitQuizResponse - end + goto_if_eq VAR_RESULT, 0, LilycoveCity_PokemonCenter_1F_EventScript_AskQuitQuiz + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonCenter_1F_EventScript_SubmitQuizResponse + end LilycoveCity_PokemonCenter_1F_EventScript_ShowQuestion:: - special QuizLadyShowQuizQuestion - waitstate - goto LilycoveCity_PokemonCenter_1F_EventScript_CheckQuizTakingState - end + special QuizLadyShowQuizQuestion + waitstate + goto LilycoveCity_PokemonCenter_1F_EventScript_CheckQuizTakingState + end LilycoveCity_PokemonCenter_1F_EventScript_GetAnswer:: - special QuizLadyGetPlayerAnswer - waitstate - goto LilycoveCity_PokemonCenter_1F_EventScript_CheckQuizTakingState - end + special QuizLadyGetPlayerAnswer + waitstate + goto LilycoveCity_PokemonCenter_1F_EventScript_CheckQuizTakingState + end LilycoveCity_PokemonCenter_1F_EventScript_AskQuitQuiz:: - msgbox LilycoveCity_PokemonCenter_1F_Text_YoureGoingToQuit, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_QuitTakingQuiz - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_TakeQuiz - end + msgbox LilycoveCity_PokemonCenter_1F_Text_YoureGoingToQuit, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonCenter_1F_EventScript_QuitTakingQuiz + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonCenter_1F_EventScript_TakeQuiz + end LilycoveCity_PokemonCenter_1F_EventScript_QuitTakingQuiz:: - msgbox LilycoveCity_PokemonCenter_1F_Text_TakeTheQuizAnotherTime, MSGBOX_DEFAULT - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_TakeTheQuizAnotherTime, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_SubmitQuizResponse:: - special SetQuizLadyState_Complete - msgbox LilycoveCity_PokemonCenter_1F_Text_WaitForAnswer, MSGBOX_DEFAULT - specialvar VAR_RESULT, IsQuizAnswerCorrect - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_IncorrectResponse - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_CorrectResponse - end + special SetQuizLadyState_Complete + msgbox LilycoveCity_PokemonCenter_1F_Text_WaitForAnswer, MSGBOX_DEFAULT + specialvar VAR_RESULT, IsQuizAnswerCorrect + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_IncorrectResponse + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonCenter_1F_EventScript_CorrectResponse + end LilycoveCity_PokemonCenter_1F_EventScript_CorrectResponse:: - playse SE_SUCCESS - delay 10 - playse SE_SUCCESS - msgbox LilycoveCity_PokemonCenter_1F_Text_YouGotItRight, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_ReadyGivePrize - end + playse SE_SUCCESS + delay 10 + playse SE_SUCCESS + msgbox LilycoveCity_PokemonCenter_1F_Text_YouGotItRight, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_ReadyGivePrize + end LilycoveCity_PokemonCenter_1F_EventScript_IncorrectResponse:: - special BufferQuizCorrectAnswer - special BufferQuizPrizeName - playse SE_FAILURE - delay 10 - playse SE_FAILURE - msgbox LilycoveCity_PokemonCenter_1F_Text_WrongTheCorrectAnswerIs, MSGBOX_DEFAULT - msgbox LilycoveCity_PokemonCenter_1F_Text_IGetToKeepPrize, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_AskMakeQuiz - end + special BufferQuizCorrectAnswer + special BufferQuizPrizeName + playse SE_FAILURE + delay 10 + playse SE_FAILURE + msgbox LilycoveCity_PokemonCenter_1F_Text_WrongTheCorrectAnswerIs, MSGBOX_DEFAULT + msgbox LilycoveCity_PokemonCenter_1F_Text_IGetToKeepPrize, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_AskMakeQuiz + end @ VAR_RESULT is essentially ignored, both jumps are identical LilycoveCity_PokemonCenter_1F_EventScript_ReadyGivePrize:: - specialvar VAR_RESULT, BufferQuizAuthorNameAndCheckIfLady - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_GivePrize1 - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_GivePrize0 - end + specialvar VAR_RESULT, BufferQuizAuthorNameAndCheckIfLady + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonCenter_1F_EventScript_GivePrize1 + goto_if_eq VAR_RESULT, 0, LilycoveCity_PokemonCenter_1F_EventScript_GivePrize0 + end LilycoveCity_PokemonCenter_1F_EventScript_GivePrize1:: - msgbox LilycoveCity_PokemonCenter_1F_Text_YouGotItRightYouveWonPersonsPrize, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_GivePrize - end + msgbox LilycoveCity_PokemonCenter_1F_Text_YouGotItRightYouveWonPersonsPrize, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_GivePrize + end LilycoveCity_PokemonCenter_1F_EventScript_GivePrize0:: - msgbox LilycoveCity_PokemonCenter_1F_Text_YouGotItRightYouveWonPersonsPrize, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_GivePrize - end + msgbox LilycoveCity_PokemonCenter_1F_Text_YouGotItRightYouveWonPersonsPrize, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_GivePrize + end LilycoveCity_PokemonCenter_1F_EventScript_GivePrize:: - setvar VAR_0x8005, 0 - special BufferQuizPrizeItem - special SetQuizLadyState_Complete - giveitem VAR_0x8005 - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_NoSpaceForQuizPrize - goto LilycoveCity_PokemonCenter_1F_EventScript_AskMakeQuiz - end + setvar VAR_0x8005, 0 + special BufferQuizPrizeItem + special SetQuizLadyState_Complete + giveitem VAR_0x8005 + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_NoSpaceForQuizPrize + goto LilycoveCity_PokemonCenter_1F_EventScript_AskMakeQuiz + end LilycoveCity_PokemonCenter_1F_EventScript_NoSpaceForQuizPrize:: - msgbox LilycoveCity_PokemonCenter_1F_Text_YourBagIsFilledUp, MSGBOX_DEFAULT - special SetQuizLadyState_GivePrize - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_YourBagIsFilledUp, MSGBOX_DEFAULT + special SetQuizLadyState_GivePrize + release + end LilycoveCity_PokemonCenter_1F_EventScript_AskMakeQuiz:: - msgbox LilycoveCity_PokemonCenter_1F_Text_MakeYourOwnQuiz, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_MakeQuiz - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_DeclineMakeQuiz - end + msgbox LilycoveCity_PokemonCenter_1F_Text_MakeYourOwnQuiz, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonCenter_1F_EventScript_MakeQuiz + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonCenter_1F_EventScript_DeclineMakeQuiz + end LilycoveCity_PokemonCenter_1F_EventScript_DeclineMakeQuiz:: - special QuizLadyPickNewQuestion - msgbox LilycoveCity_PokemonCenter_1F_Text_MaybeNextTime, MSGBOX_DEFAULT - release - end + special QuizLadyPickNewQuestion + msgbox LilycoveCity_PokemonCenter_1F_Text_MaybeNextTime, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_MakeQuiz:: - msgbox LilycoveCity_PokemonCenter_1F_Text_PickYourPrize, MSGBOX_DEFAULT + msgbox LilycoveCity_PokemonCenter_1F_Text_PickYourPrize, MSGBOX_DEFAULT LilycoveCity_PokemonCenter_1F_EventScript_PickPrize:: - fadescreen FADE_TO_BLACK - setvar VAR_RESULT, 0 - special Script_QuizLadyOpenBagMenu - waitstate - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_AskQuitChoosingPrize - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_WriteQuiz - end + fadescreen FADE_TO_BLACK + setvar VAR_RESULT, 0 + special Script_QuizLadyOpenBagMenu + waitstate + goto_if_eq VAR_RESULT, 0, LilycoveCity_PokemonCenter_1F_EventScript_AskQuitChoosingPrize + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonCenter_1F_EventScript_WriteQuiz + end LilycoveCity_PokemonCenter_1F_EventScript_AskQuitChoosingPrize:: - msgbox LilycoveCity_PokemonCenter_1F_Text_QuitChoosingPrize, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_DeclineMakeQuiz - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_PickPrize - end + msgbox LilycoveCity_PokemonCenter_1F_Text_QuitChoosingPrize, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonCenter_1F_EventScript_DeclineMakeQuiz + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonCenter_1F_EventScript_PickPrize + end LilycoveCity_PokemonCenter_1F_EventScript_WriteQuiz:: - msgbox LilycoveCity_PokemonCenter_1F_Text_WriteYourQuiz, MSGBOX_DEFAULT - special ClearQuizLadyQuestionAndAnswer - special ClearQuizLadyPlayerAnswer - setvar VAR_0x8004, EASY_CHAT_TYPE_QUIZ_QUESTION + msgbox LilycoveCity_PokemonCenter_1F_Text_WriteYourQuiz, MSGBOX_DEFAULT + special ClearQuizLadyQuestionAndAnswer + special ClearQuizLadyPlayerAnswer + setvar VAR_0x8004, EASY_CHAT_TYPE_QUIZ_QUESTION LilycoveCity_PokemonCenter_1F_EventScript_WriteQuizQuestion:: - fadescreen FADE_TO_BLACK - special QuizLadySetCustomQuestion - waitstate - compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_AskQuitWritingQuizQuestion - goto LilycoveCity_PokemonCenter_1F_EventScript_FinishMakingQuiz - end + fadescreen FADE_TO_BLACK + special QuizLadySetCustomQuestion + waitstate + goto_if_eq VAR_RESULT, 0, LilycoveCity_PokemonCenter_1F_EventScript_AskQuitWritingQuizQuestion + goto LilycoveCity_PokemonCenter_1F_EventScript_FinishMakingQuiz + end LilycoveCity_PokemonCenter_1F_EventScript_AskQuitWritingQuizQuestion:: - msgbox LilycoveCity_PokemonCenter_1F_Text_QuitWritingQuizQuestion, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_DeclineMakeQuiz - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_WriteQuizQuestion - end + msgbox LilycoveCity_PokemonCenter_1F_Text_QuitWritingQuizQuestion, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonCenter_1F_EventScript_DeclineMakeQuiz + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonCenter_1F_EventScript_WriteQuizQuestion + end LilycoveCity_PokemonCenter_1F_EventScript_FinishMakingQuiz:: - special QuizLadyTakePrizeForCustomQuiz - special QuizLadyRecordCustomQuizData - special QuizLadySetWaitingForChallenger - msgbox LilycoveCity_PokemonCenter_1F_Text_IllLookForAChallenger, MSGBOX_DEFAULT - release - end + special QuizLadyTakePrizeForCustomQuiz + special QuizLadyRecordCustomQuizData + special QuizLadySetWaitingForChallenger + msgbox LilycoveCity_PokemonCenter_1F_Text_IllLookForAChallenger, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_ContestLady:: - lock - faceplayer - msgbox LilycoveCity_PokemonCenter_1F_Text_ImTheContestLady, MSGBOX_DEFAULT - specialvar VAR_RESULT, HasPlayerGivenContestLadyPokeblock - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_NotGivenPokeblock - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_GivenPokeblock - end + lock + faceplayer + msgbox LilycoveCity_PokemonCenter_1F_Text_ImTheContestLady, MSGBOX_DEFAULT + specialvar VAR_RESULT, HasPlayerGivenContestLadyPokeblock + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_NotGivenPokeblock + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonCenter_1F_EventScript_GivenPokeblock + end @ Redundant with above script, VAR_RESULT will always be FALSE here LilycoveCity_PokemonCenter_1F_EventScript_NotGivenPokeblock:: - specialvar VAR_RESULT, ShouldContestLadyShowGoOnAir - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_AskForPokeblock - compare VAR_RESULT, TRUE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_GivenPokeblock - end + specialvar VAR_RESULT, ShouldContestLadyShowGoOnAir + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_AskForPokeblock + goto_if_eq VAR_RESULT, TRUE, LilycoveCity_PokemonCenter_1F_EventScript_GivenPokeblock + end LilycoveCity_PokemonCenter_1F_EventScript_GivenPokeblock:: - msgbox LilycoveCity_PokemonCenter_1F_Text_ThankForPokeblock, MSGBOX_DEFAULT - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_ThankForPokeblock, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_AskForPokeblock:: - special Script_BufferContestLadyCategoryAndMonName - msgbox LilycoveCity_PokemonCenter_1F_Text_MyFriendDisplaysQuality, MSGBOX_DEFAULT - checkitem ITEM_POKEBLOCK_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_NoPokeblockCase - msgbox LilycoveCity_PokemonCenter_1F_Text_AskingForOnePokeblock, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_DeclineGivePokeblock - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_ChoosePokeblock - end + special Script_BufferContestLadyCategoryAndMonName + msgbox LilycoveCity_PokemonCenter_1F_Text_MyFriendDisplaysQuality, MSGBOX_DEFAULT + checkitem ITEM_POKEBLOCK_CASE + goto_if_eq VAR_RESULT, FALSE, LilycoveCity_PokemonCenter_1F_EventScript_NoPokeblockCase + msgbox LilycoveCity_PokemonCenter_1F_Text_AskingForOnePokeblock, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonCenter_1F_EventScript_DeclineGivePokeblock + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonCenter_1F_EventScript_ChoosePokeblock + end LilycoveCity_PokemonCenter_1F_EventScript_DeclineGivePokeblock:: - msgbox LilycoveCity_PokemonCenter_1F_Text_WhatACheapskate, MSGBOX_DEFAULT - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_WhatACheapskate, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_EventScript_ChoosePokeblock:: - fadescreen FADE_TO_BLACK - special OpenPokeblockCaseForContestLady - waitstate - compare VAR_RESULT, 0xFFFF - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_AskQuitGivingPokeblock - compare VAR_RESULT, 0xFFFF - goto_if_ne LilycoveCity_PokemonCenter_1F_EventScript_GivePokeblock - end + fadescreen FADE_TO_BLACK + special OpenPokeblockCaseForContestLady + waitstate + goto_if_eq VAR_RESULT, 0xFFFF, LilycoveCity_PokemonCenter_1F_EventScript_AskQuitGivingPokeblock + goto_if_ne VAR_RESULT, 0xFFFF, LilycoveCity_PokemonCenter_1F_EventScript_GivePokeblock + end LilycoveCity_PokemonCenter_1F_EventScript_AskQuitGivingPokeblock:: - msgbox LilycoveCity_PokemonCenter_1F_Text_ICantHaveOnePokeblock, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_DeclineGivePokeblock - compare VAR_RESULT, NO - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_ChoosePokeblock - end + msgbox LilycoveCity_PokemonCenter_1F_Text_ICantHaveOnePokeblock, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, LilycoveCity_PokemonCenter_1F_EventScript_DeclineGivePokeblock + goto_if_eq VAR_RESULT, NO, LilycoveCity_PokemonCenter_1F_EventScript_ChoosePokeblock + end LilycoveCity_PokemonCenter_1F_EventScript_GivePokeblock:: - msgbox LilycoveCity_PokemonCenter_1F_Text_IllUseYourPokeblock, MSGBOX_DEFAULT - special SetContestLadyGivenPokeblock - special GetContestLadyMonSpecies - goto LilycoveCity_PokemonCenter_1F_EventScript_FeedPokeblock - end + msgbox LilycoveCity_PokemonCenter_1F_Text_IllUseYourPokeblock, MSGBOX_DEFAULT + special SetContestLadyGivenPokeblock + special GetContestLadyMonSpecies + goto LilycoveCity_PokemonCenter_1F_EventScript_FeedPokeblock + end @ VAR_0x8004 here is the return value from GivePokeblockToContestLady LilycoveCity_PokemonCenter_1F_EventScript_FeedPokeblock:: - applymovement LOCALID_LILYCOVE_LADY, LilycoveCity_PokemonCenter_1F_Movement_LadyFaceMon - waitmovement 0 - delay 60 - applymovement LOCALID_LADYS_MON, LilycoveCity_PokemonCenter_1F_Movement_MonFaceLady - waitmovement 0 - delay 60 - waitse - playmoncry VAR_0x8005, 0 - delay 120 - waitmoncry - compare VAR_0x8004, 1 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_MonEnjoyPokeblock - goto LilycoveCity_PokemonCenter_1F_EventScript_FinishFeedPokeblock - end + applymovement LOCALID_LILYCOVE_LADY, LilycoveCity_PokemonCenter_1F_Movement_LadyFaceMon + waitmovement 0 + delay 60 + applymovement LOCALID_LADYS_MON, LilycoveCity_PokemonCenter_1F_Movement_MonFaceLady + waitmovement 0 + delay 60 + waitse + playmoncry VAR_0x8005, CRY_MODE_NORMAL + delay 120 + waitmoncry + goto_if_eq VAR_0x8004, 1, LilycoveCity_PokemonCenter_1F_EventScript_MonEnjoyPokeblock + goto LilycoveCity_PokemonCenter_1F_EventScript_FinishFeedPokeblock + end @ VAR_0x8004 here is the return value from GivePokeblockToContestLady LilycoveCity_PokemonCenter_1F_EventScript_MonEnjoyPokeblock:: - applymovement LOCALID_LADYS_MON, LilycoveCity_PokemonCenter_1F_Movement_MonJump - waitmovement 0 - delay 60 + applymovement LOCALID_LADYS_MON, LilycoveCity_PokemonCenter_1F_Movement_MonJump + waitmovement 0 + delay 60 LilycoveCity_PokemonCenter_1F_EventScript_FinishFeedPokeblock:: - applymovement LOCALID_LILYCOVE_LADY, LilycoveCity_PokemonCenter_1F_Movement_LadyFacePlayer - waitmovement 0 - delay 60 - compare VAR_0x8004, 0 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_MonDislikedPokeblock - compare VAR_0x8004, 1 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_MonLikedPokeblock - end + applymovement LOCALID_LILYCOVE_LADY, LilycoveCity_PokemonCenter_1F_Movement_LadyFacePlayer + waitmovement 0 + delay 60 + goto_if_eq VAR_0x8004, 0, LilycoveCity_PokemonCenter_1F_EventScript_MonDislikedPokeblock + goto_if_eq VAR_0x8004, 1, LilycoveCity_PokemonCenter_1F_EventScript_MonLikedPokeblock + end LilycoveCity_PokemonCenter_1F_EventScript_MonDislikedPokeblock:: - msgbox LilycoveCity_PokemonCenter_1F_Text_NoChangeThanks, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_CheckAirContestLadyShow - end + msgbox LilycoveCity_PokemonCenter_1F_Text_NoChangeThanks, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_CheckAirContestLadyShow + end LilycoveCity_PokemonCenter_1F_EventScript_MonLikedPokeblock:: - special Script_BufferContestLadyCategoryAndMonName - msgbox LilycoveCity_PokemonCenter_1F_Text_ReallyImprovedThanks, MSGBOX_DEFAULT - goto LilycoveCity_PokemonCenter_1F_EventScript_CheckAirContestLadyShow - end + special Script_BufferContestLadyCategoryAndMonName + msgbox LilycoveCity_PokemonCenter_1F_Text_ReallyImprovedThanks, MSGBOX_DEFAULT + goto LilycoveCity_PokemonCenter_1F_EventScript_CheckAirContestLadyShow + end LilycoveCity_PokemonCenter_1F_EventScript_CheckAirContestLadyShow:: - specialvar VAR_RESULT, ShouldContestLadyShowGoOnAir - compare VAR_RESULT, 1 - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_AirContestLadyShow - release - end + specialvar VAR_RESULT, ShouldContestLadyShowGoOnAir + goto_if_eq VAR_RESULT, 1, LilycoveCity_PokemonCenter_1F_EventScript_AirContestLadyShow + release + end LilycoveCity_PokemonCenter_1F_EventScript_AirContestLadyShow:: - msgbox LilycoveCity_PokemonCenter_1F_Text_ReadyToEnterContests, MSGBOX_DEFAULT - special PutLilycoveContestLadyShowOnTheAir - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_ReadyToEnterContests, MSGBOX_DEFAULT + special PutLilycoveContestLadyShowOnTheAir + release + end LilycoveCity_PokemonCenter_1F_EventScript_NoPokeblockCase:: - msgbox LilycoveCity_PokemonCenter_1F_Text_DontHaveAPokeblockCase, MSGBOX_DEFAULT - release - end + msgbox LilycoveCity_PokemonCenter_1F_Text_DontHaveAPokeblockCase, MSGBOX_DEFAULT + release + end LilycoveCity_PokemonCenter_1F_Movement_LadyFaceMon: - face_right - delay_8 - step_end + face_right + delay_8 + step_end LilycoveCity_PokemonCenter_1F_Movement_MonFaceLady: - face_left - delay_8 - step_end + face_left + delay_8 + step_end @ Unused LilycoveCity_PokemonCenter_1F_Movement_MonFaceDown: - face_down - step_end + face_down + step_end LilycoveCity_PokemonCenter_1F_Movement_LadyFacePlayer: - face_player - step_end + face_player + step_end LilycoveCity_PokemonCenter_1F_Movement_MonJump: - disable_jump_landing_ground_effect - jump_in_place_left - disable_jump_landing_ground_effect - jump_in_place_left - step_end + disable_jump_landing_ground_effect + jump_in_place_left + disable_jump_landing_ground_effect + jump_in_place_left + step_end LilycoveCity_PokemonCenter_1F_EventScript_ContestLadyMon:: - specialvar VAR_RESULT, GetContestLadyCategory - special Script_BufferContestLadyCategoryAndMonName - special GetContestLadyMonSpecies - compare VAR_RESULT, CONTEST_CATEGORY_COOL - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_Zigzagoon - compare VAR_RESULT, CONTEST_CATEGORY_BEAUTY - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_Skitty - compare VAR_RESULT, CONTEST_CATEGORY_CUTE - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_Poochyena - compare VAR_RESULT, CONTEST_CATEGORY_SMART - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_Kecleon - compare VAR_RESULT, CONTEST_CATEGORY_TOUGH - goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_Pikachu - end + specialvar VAR_RESULT, GetContestLadyCategory + special Script_BufferContestLadyCategoryAndMonName + special GetContestLadyMonSpecies + goto_if_eq VAR_RESULT, CONTEST_CATEGORY_COOL, LilycoveCity_PokemonCenter_1F_EventScript_Zigzagoon + goto_if_eq VAR_RESULT, CONTEST_CATEGORY_BEAUTY, LilycoveCity_PokemonCenter_1F_EventScript_Skitty + goto_if_eq VAR_RESULT, CONTEST_CATEGORY_CUTE, LilycoveCity_PokemonCenter_1F_EventScript_Poochyena + goto_if_eq VAR_RESULT, CONTEST_CATEGORY_SMART, LilycoveCity_PokemonCenter_1F_EventScript_Kecleon + goto_if_eq VAR_RESULT, CONTEST_CATEGORY_TOUGH, LilycoveCity_PokemonCenter_1F_EventScript_Pikachu + end LilycoveCity_PokemonCenter_1F_EventScript_Zigzagoon:: - lock - faceplayer - waitse - playmoncry VAR_0x8005, 0 - msgbox LilycoveCity_PokemonCenter_1F_Text_Zigzagoon, MSGBOX_DEFAULT - waitmoncry - release - end + lock + faceplayer + waitse + playmoncry VAR_0x8005, CRY_MODE_NORMAL + msgbox LilycoveCity_PokemonCenter_1F_Text_Zigzagoon, MSGBOX_DEFAULT + waitmoncry + release + end LilycoveCity_PokemonCenter_1F_EventScript_Skitty:: - lock - faceplayer - waitse - playmoncry VAR_0x8005, 0 - msgbox LilycoveCity_PokemonCenter_1F_Text_Skitty, MSGBOX_DEFAULT - waitmoncry - release - end + lock + faceplayer + waitse + playmoncry VAR_0x8005, CRY_MODE_NORMAL + msgbox LilycoveCity_PokemonCenter_1F_Text_Skitty, MSGBOX_DEFAULT + waitmoncry + release + end LilycoveCity_PokemonCenter_1F_EventScript_Poochyena:: - lock - faceplayer - waitse - playmoncry VAR_0x8005, 0 - msgbox LilycoveCity_PokemonCenter_1F_Text_Poochyena, MSGBOX_DEFAULT - waitmoncry - release - end + lock + faceplayer + waitse + playmoncry VAR_0x8005, CRY_MODE_NORMAL + msgbox LilycoveCity_PokemonCenter_1F_Text_Poochyena, MSGBOX_DEFAULT + waitmoncry + release + end LilycoveCity_PokemonCenter_1F_EventScript_Kecleon:: - lock - faceplayer - waitse - playmoncry VAR_0x8005, 0 - msgbox LilycoveCity_PokemonCenter_1F_Text_Kecleon, MSGBOX_DEFAULT - waitmoncry - release - end + lock + faceplayer + waitse + playmoncry VAR_0x8005, CRY_MODE_NORMAL + msgbox LilycoveCity_PokemonCenter_1F_Text_Kecleon, MSGBOX_DEFAULT + waitmoncry + release + end LilycoveCity_PokemonCenter_1F_EventScript_Pikachu:: - lock - faceplayer - waitse - playmoncry VAR_0x8005, 0 - msgbox LilycoveCity_PokemonCenter_1F_Text_Pikachu, MSGBOX_DEFAULT - waitmoncry - release - end + lock + faceplayer + waitse + playmoncry VAR_0x8005, CRY_MODE_NORMAL + msgbox LilycoveCity_PokemonCenter_1F_Text_Pikachu, MSGBOX_DEFAULT + waitmoncry + release + end LilycoveCity_PokemonCenter_1F_Text_ImTheFavorLady: - .string "I'm the FAVOR LADY…$" + .string "I'm the FAVOR LADY…$" LilycoveCity_PokemonCenter_1F_Text_ObsessedWithThing: - .string "I've recently developed an obsession\n" - .string "for {STR_VAR_1} things…$" + .string "I've recently developed an obsession\n" + .string "for {STR_VAR_1} things…$" LilycoveCity_PokemonCenter_1F_Text_ThankYouForLastTime: - .string "Oh…\n" - .string "Thank you for last time…$" + .string "Oh…\n" + .string "Thank you for last time…$" LilycoveCity_PokemonCenter_1F_Text_PlayerGaveMeBadThing: - .string "Before, I think it was {STR_VAR_3}…\p" - .string "{STR_VAR_3} gave me one {STR_VAR_2},\n" - .string "saying it was {STR_VAR_1}.\p" - .string "But it wasn't {STR_VAR_1}.\n" - .string "Not in the least bit.$" + .string "Before, I think it was {STR_VAR_3}…\p" + .string "{STR_VAR_3} gave me one {STR_VAR_2},\n" + .string "saying it was {STR_VAR_1}.\p" + .string "But it wasn't {STR_VAR_1}.\n" + .string "Not in the least bit.$" LilycoveCity_PokemonCenter_1F_Text_PlayerGaveMeGreatThing: - .string "Before, {STR_VAR_3} gave me a very\n" - .string "{STR_VAR_1} {STR_VAR_2}.\p" - .string "I cherish it now.$" + .string "Before, {STR_VAR_3} gave me a very\n" + .string "{STR_VAR_1} {STR_VAR_2}.\p" + .string "I cherish it now.$" LilycoveCity_PokemonCenter_1F_Text_WillYouShareThing: - .string "Listen, if you have anything that\n" - .string "is {STR_VAR_1}, will you share it\l" - .string "with me?$" + .string "Listen, if you have anything that\n" + .string "is {STR_VAR_1}, will you share it\l" + .string "with me?$" LilycoveCity_PokemonCenter_1F_Text_WhatWillYouGiveMe: - .string "…Really?\n" - .string "What will you give me?$" + .string "…Really?\n" + .string "What will you give me?$" LilycoveCity_PokemonCenter_1F_Text_IsThatSoGoodbye: - .string "Is that so?\n" - .string "Then, it's good-bye…$" + .string "Is that so?\n" + .string "Then, it's good-bye…$" LilycoveCity_PokemonCenter_1F_Text_NotWillingToShare: - .string "Oh…\n" - .string "You're not willing to share?$" + .string "Oh…\n" + .string "You're not willing to share?$" LilycoveCity_PokemonCenter_1F_Text_IllTryToCherishIt: - .string "Oh?\n" - .string "That {STR_VAR_2} is {STR_VAR_1}?\p" - .string "…Oh, is that right?\p" - .string "Well, I owe you a thanks anyway.\n" - .string "I'll try to cherish it…$" + .string "Oh?\n" + .string "That {STR_VAR_2} is {STR_VAR_1}?\p" + .string "…Oh, is that right?\p" + .string "Well, I owe you a thanks anyway.\n" + .string "I'll try to cherish it…$" LilycoveCity_PokemonCenter_1F_Text_IWillCherishThis: - .string "Oh…\p" - .string "That's a quite {STR_VAR_1}\n" - .string "{STR_VAR_2}…\p" - .string "Isn't it nice?\n" - .string "It's so dreamy…\p" - .string "Thank you…\n" - .string "I will cherish this…$" + .string "Oh…\p" + .string "That's a quite {STR_VAR_1}\n" + .string "{STR_VAR_2}…\p" + .string "Isn't it nice?\n" + .string "It's so dreamy…\p" + .string "Thank you…\n" + .string "I will cherish this…$" LilycoveCity_PokemonCenter_1F_Text_IWillTreasureThis: - .string "…Oh, oh, oh…\p" - .string "This is amazing!\n" - .string "This really is {STR_VAR_1}!\p" - .string "I never knew that one {STR_VAR_2}\n" - .string "could be this {STR_VAR_1}!\p" - .string "Thank you!\p" - .string "I will treasure this for the rest\n" - .string "of my life!$" + .string "…Oh, oh, oh…\p" + .string "This is amazing!\n" + .string "This really is {STR_VAR_1}!\p" + .string "I never knew that one {STR_VAR_2}\n" + .string "could be this {STR_VAR_1}!\p" + .string "Thank you!\p" + .string "I will treasure this for the rest\n" + .string "of my life!$" LilycoveCity_PokemonCenter_1F_Text_IllGiveYouThisInReturn: - .string "I'll give you this wonderful item in\n" - .string "return for your fabulous gift.\p" - .string "I hope you will cherish it…$" + .string "I'll give you this wonderful item in\n" + .string "return for your fabulous gift.\p" + .string "I hope you will cherish it…$" LilycoveCity_PokemonCenter_1F_Text_YouDontHaveSpaceForIt: - .string "Oh, you can't have it if you don't have\n" - .string "the space for it.\p" - .string "Please come see me when you get\n" - .string "your BAG organized…$" + .string "Oh, you can't have it if you don't have\n" + .string "the space for it.\p" + .string "Please come see me when you get\n" + .string "your BAG organized…$" LilycoveCity_PokemonCenter_1F_Text_ImTheQuizLady: - .string "I'm the QUIZ LADY!\n" - .string "I love quizzes!$" + .string "I'm the QUIZ LADY!\n" + .string "I love quizzes!$" LilycoveCity_PokemonCenter_1F_Text_WaitingToTakeYourQuiz: - .string "Oh?\p" - .string "I'm waiting for a challenger to answer\n" - .string "the quiz you made.\p" - .string "We can chat another time, okay?$" + .string "Oh?\p" + .string "I'm waiting for a challenger to answer\n" + .string "the quiz you made.\p" + .string "We can chat another time, okay?$" LilycoveCity_PokemonCenter_1F_Text_WaitingForChallenger: - .string "I'm waiting for someone to challenge\n" - .string "a quiz this {STR_VAR_1} thought up!$" + .string "I'm waiting for someone to challenge\n" + .string "a quiz this {STR_VAR_1} thought up!$" LilycoveCity_PokemonCenter_1F_Text_TakeQuizChallenge: - .string "If you answer correctly, you can win\n" - .string "fabulous prizes!\p" - .string "Would you like to take the quiz\n" - .string "challenge?$" + .string "If you answer correctly, you can win\n" + .string "fabulous prizes!\p" + .string "Would you like to take the quiz\n" + .string "challenge?$" LilycoveCity_PokemonCenter_1F_Text_WaitForAnswer: - .string "… … … … … …\n" - .string "… … … … … …$" + .string "… … … … … …\n" + .string "… … … … … …$" LilycoveCity_PokemonCenter_1F_Text_HowBoringBye: - .string "Oh, how boring!\n" - .string "Bye-bye!$" + .string "Oh, how boring!\n" + .string "Bye-bye!$" LilycoveCity_PokemonCenter_1F_Text_YoureGoingToQuit: - .string "Awww!\n" - .string "You're going to quit?$" + .string "Awww!\n" + .string "You're going to quit?$" LilycoveCity_PokemonCenter_1F_Text_TakeTheQuizAnotherTime: - .string "Please take the quiz challenge\n" - .string "another time!$" + .string "Please take the quiz challenge\n" + .string "another time!$" LilycoveCity_PokemonCenter_1F_Text_YouGotItRight: - .string "You're amazing! You've got it right!\n" - .string "You're one sharp customer!$" + .string "You're amazing! You've got it right!\n" + .string "You're one sharp customer!$" LilycoveCity_PokemonCenter_1F_Text_YouGotItRightYouveWonPersonsPrize: - .string "Congratulations!\n" - .string "You've got the quiz right!\p" - .string "You've won a prize provided by\n" - .string "{STR_VAR_1}!$" + .string "Congratulations!\n" + .string "You've got the quiz right!\p" + .string "You've won a prize provided by\n" + .string "{STR_VAR_1}!$" @ Unused LilycoveCity_PokemonCenter_1F_Text_XReceivedOneY: - .string "{STR_VAR_1} received\n" - .string "one {STR_VAR_2}!$" + .string "{STR_VAR_1} received\n" + .string "one {STR_VAR_2}!$" LilycoveCity_PokemonCenter_1F_Text_YourBagIsFilledUp: - .string "Oh? Your BAG is filled up!\n" - .string "Come see me when you have room.$" + .string "Oh? Your BAG is filled up!\n" + .string "Come see me when you have room.$" LilycoveCity_PokemonCenter_1F_Text_WrongTheCorrectAnswerIs: - .string "Hmm… Wrong!\n" - .string "The correct answer is “{STR_VAR_3}”!$" + .string "Hmm… Wrong!\n" + .string "The correct answer is “{STR_VAR_3}”!$" LilycoveCity_PokemonCenter_1F_Text_IGetToKeepPrize: - .string "Too bad!\p" - .string "I get to keep the quiz prize\n" - .string "{STR_VAR_1} now!$" + .string "Too bad!\p" + .string "I get to keep the quiz prize\n" + .string "{STR_VAR_1} now!$" LilycoveCity_PokemonCenter_1F_Text_MakeYourOwnQuiz: - .string "Listen, listen!\n" - .string "Would you like to make your own quiz?$" + .string "Listen, listen!\n" + .string "Would you like to make your own quiz?$" LilycoveCity_PokemonCenter_1F_Text_MaybeNextTime: - .string "Oh, I see…\n" - .string "Well, maybe next time!$" + .string "Oh, I see…\n" + .string "Well, maybe next time!$" LilycoveCity_PokemonCenter_1F_Text_PickYourPrize: - .string "Okay, the first thing you have to do\n" - .string "is pick the prize for the person that\l" - .string "answers your quiz correctly.\p" - .string "But beware, if the person taking\n" - .string "the quiz can't get it right, I get to\l" - .string "keep the prize!$" + .string "Okay, the first thing you have to do\n" + .string "is pick the prize for the person that\l" + .string "answers your quiz correctly.\p" + .string "But beware, if the person taking\n" + .string "the quiz can't get it right, I get to\l" + .string "keep the prize!$" LilycoveCity_PokemonCenter_1F_Text_QuitChoosingPrize: - .string "If you don't choose a prize,\n" - .string "your quiz can't be made.\p" - .string "Are you going to quit making\n" - .string "your quiz?$" + .string "If you don't choose a prize,\n" + .string "your quiz can't be made.\p" + .string "Are you going to quit making\n" + .string "your quiz?$" LilycoveCity_PokemonCenter_1F_Text_WriteYourQuiz: - .string "Oh, how nice!\n" - .string "That's a wonderful prize!\p" - .string "Next, you need to write your quiz\n" - .string "question and its answer.$" + .string "Oh, how nice!\n" + .string "That's a wonderful prize!\p" + .string "Next, you need to write your quiz\n" + .string "question and its answer.$" LilycoveCity_PokemonCenter_1F_Text_QuitWritingQuizQuestion: - .string "Are you going to quit writing\n" - .string "your quiz question?$" + .string "Are you going to quit writing\n" + .string "your quiz question?$" @ Unused LilycoveCity_PokemonCenter_1F_Text_QuitWritingQuizAnswer: - .string "Are you going to quit choosing\n" - .string "your quiz answer?$" + .string "Are you going to quit choosing\n" + .string "your quiz answer?$" LilycoveCity_PokemonCenter_1F_Text_IllLookForAChallenger: - .string "Thank you!\n" - .string "You've put together a nice quiz.\p" - .string "I'll go look for someone who'll take\n" - .string "your quiz challenge right away.$" + .string "Thank you!\n" + .string "You've put together a nice quiz.\p" + .string "I'll go look for someone who'll take\n" + .string "your quiz challenge right away.$" LilycoveCity_PokemonCenter_1F_Text_ImTheContestLady: - .string "I'm the CONTEST LADY!\n" - .string "I sure do love CONTESTS!$" + .string "I'm the CONTEST LADY!\n" + .string "I sure do love CONTESTS!$" LilycoveCity_PokemonCenter_1F_Text_ThankForPokeblock: - .string "Thanks for your {POKEBLOCK} before!$" + .string "Thanks for your {POKEBLOCK} before!$" LilycoveCity_PokemonCenter_1F_Text_MyFriendDisplaysQuality: - .string "This is my friend {STR_VAR_1}!\n" - .string "It's the epitome of {STR_VAR_2}!\p" - .string "But I think that it will display\n" - .string "even more {STR_VAR_2}!$" + .string "This is my friend {STR_VAR_1}!\n" + .string "It's the epitome of {STR_VAR_2}!\p" + .string "But I think that it will display\n" + .string "even more {STR_VAR_2}!$" LilycoveCity_PokemonCenter_1F_Text_DontHaveAPokeblockCase: - .string "So, I need your help!\p" - .string "Please, may I have one {POKEBLOCK}?\n" - .string "All I'm asking for is one!\p" - .string "…Oh, but…\n" - .string "Don't you have a {POKEBLOCK} CASE?\l" - .string "That's no good. Next time, then!$" + .string "So, I need your help!\p" + .string "Please, may I have one {POKEBLOCK}?\n" + .string "All I'm asking for is one!\p" + .string "…Oh, but…\n" + .string "Don't you have a {POKEBLOCK} CASE?\l" + .string "That's no good. Next time, then!$" LilycoveCity_PokemonCenter_1F_Text_AskingForOnePokeblock: - .string "So, I need your help!\p" - .string "Please, may I have one {POKEBLOCK}?\n" - .string "All I'm asking for is one!$" + .string "So, I need your help!\p" + .string "Please, may I have one {POKEBLOCK}?\n" + .string "All I'm asking for is one!$" LilycoveCity_PokemonCenter_1F_Text_ICantHaveOnePokeblock: - .string "Awww!\n" - .string "I can't have one {POKEBLOCK}?!$" + .string "Awww!\n" + .string "I can't have one {POKEBLOCK}?!$" LilycoveCity_PokemonCenter_1F_Text_WhatACheapskate: - .string "Sheesh!\n" - .string "What a cheapskate!$" + .string "Sheesh!\n" + .string "What a cheapskate!$" LilycoveCity_PokemonCenter_1F_Text_IllUseYourPokeblock: - .string "Yay!\n" - .string "Thank you!\p" - .string "I'll feed my POKéMON your {POKEBLOCK}\n" - .string "right away.$" + .string "Yay!\n" + .string "Thank you!\p" + .string "I'll feed my POKéMON your {POKEBLOCK}\n" + .string "right away.$" LilycoveCity_PokemonCenter_1F_Text_NoChangeThanks: - .string "…It doesn't seem to have changed\n" - .string "in any way at all…\p" - .string "Hmm…\p" - .string "Oh, well!\n" - .string "Thank you very much!$" + .string "…It doesn't seem to have changed\n" + .string "in any way at all…\p" + .string "Hmm…\p" + .string "Oh, well!\n" + .string "Thank you very much!$" LilycoveCity_PokemonCenter_1F_Text_ReallyImprovedThanks: - .string "Oh, yay!\n" - .string "It's really delighted!\p" - .string "I think it really improved {STR_VAR_1}'s\n" - .string "{STR_VAR_2} quality, too.\p" - .string "Thank you so much!$" + .string "Oh, yay!\n" + .string "It's really delighted!\p" + .string "I think it really improved {STR_VAR_1}'s\n" + .string "{STR_VAR_2} quality, too.\p" + .string "Thank you so much!$" LilycoveCity_PokemonCenter_1F_Text_ReadyToEnterContests: - .string "Hmm…\p" - .string "I think we may be ready to enter\n" - .string "some CONTESTS.\p" - .string "If you see us in one somewhere,\n" - .string "I hope you'll cheer for us.$" + .string "Hmm…\p" + .string "I think we may be ready to enter\n" + .string "some CONTESTS.\p" + .string "If you see us in one somewhere,\n" + .string "I hope you'll cheer for us.$" LilycoveCity_PokemonCenter_1F_Text_Zigzagoon: - .string "{STR_VAR_1}: Guguuh!$" + .string "{STR_VAR_1}: Guguuh!$" LilycoveCity_PokemonCenter_1F_Text_Kecleon: - .string "{STR_VAR_1}: Igigigiiih!$" + .string "{STR_VAR_1}: Igigigiiih!$" LilycoveCity_PokemonCenter_1F_Text_Poochyena: - .string "{STR_VAR_1}: Baaarun…$" + .string "{STR_VAR_1}: Baaarun…$" LilycoveCity_PokemonCenter_1F_Text_Pikachu: - .string "{STR_VAR_1}: Pikka!$" + .string "{STR_VAR_1}: Pikka!$" LilycoveCity_PokemonCenter_1F_Text_Skitty: - .string "{STR_VAR_1}: Umyaaaan!$" + .string "{STR_VAR_1}: Umyaaaan!$" diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index a9c008e5ec..eda3505bf4 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -1,5 +1,5 @@ MauvilleCity_PokemonCenter_1F_EventScript_MauvilleOldMan:: - special ScrSpecial_GetCurrentMauvilleMan + special Script_GetCurrentMauvilleMan switch VAR_RESULT case MAUVILLE_MAN_BARD, MauvilleCity_PokemonCenter_1F_EventScript_Bard case MAUVILLE_MAN_HIPSTER, MauvilleCity_PokemonCenter_1F_EventScript_Hipster @@ -13,19 +13,16 @@ MauvilleCity_PokemonCenter_1F_EventScript_Bard:: lock faceplayer msgbox MauvilleCity_PokemonCenter_1F_Text_WouldYouLikeToHearMySong, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_PlaySong - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_DeclineSong + goto_if_eq VAR_RESULT, YES, MauvilleCity_PokemonCenter_1F_EventScript_PlaySong + goto_if_eq VAR_RESULT, NO, MauvilleCity_PokemonCenter_1F_EventScript_DeclineSong end MauvilleCity_PokemonCenter_1F_EventScript_PlaySong:: setvar VAR_0x8004, 0 - special ScrSpecial_PlayBardSong + special PlayBardSong delay 60 - special ScrSpecial_HasBardSongBeenChanged - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_AskToWriteLyrics + special HasBardSongBeenChanged + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_PokemonCenter_1F_EventScript_AskToWriteLyrics msgbox MauvilleCity_PokemonCenter_1F_Text_WishICouldPlaySongForOthers, MSGBOX_DEFAULT release end @@ -37,10 +34,8 @@ MauvilleCity_PokemonCenter_1F_EventScript_DeclineSong:: MauvilleCity_PokemonCenter_1F_EventScript_AskToWriteLyrics:: msgbox MauvilleCity_PokemonCenter_1F_Text_WouldYouLikeToWriteSomeLyrics, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_WriteLyrics - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_DeclineWritingLyrics + goto_if_eq VAR_RESULT, YES, MauvilleCity_PokemonCenter_1F_EventScript_WriteLyrics + goto_if_eq VAR_RESULT, NO, MauvilleCity_PokemonCenter_1F_EventScript_DeclineWritingLyrics end MauvilleCity_PokemonCenter_1F_EventScript_WriteLyrics:: @@ -48,16 +43,14 @@ MauvilleCity_PokemonCenter_1F_EventScript_WriteLyrics:: call Common_ShowEasyChatScreen lock faceplayer - compare VAR_RESULT, 0 - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_DeclineWritingLyrics + goto_if_eq VAR_RESULT, 0, MauvilleCity_PokemonCenter_1F_EventScript_DeclineWritingLyrics msgbox MauvilleCity_PokemonCenter_1F_Text_LetMeSingItForYou, MSGBOX_DEFAULT setvar VAR_0x8004, 1 - special ScrSpecial_PlayBardSong + special PlayBardSong delay 60 msgbox MauvilleCity_PokemonCenter_1F_Text_ThatHowYouWantedSongToGo, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_WriteLyrics - special ScrSpecial_SaveBardSongLyrics + goto_if_eq VAR_RESULT, NO, MauvilleCity_PokemonCenter_1F_EventScript_WriteLyrics + special SaveBardSongLyrics msgbox MauvilleCity_PokemonCenter_1F_Text_IllSingThisSongForAWhile, MSGBOX_DEFAULT release end @@ -73,24 +66,22 @@ MauvilleCity_PokemonCenter_1F_EventScript_Hipster:: faceplayer setflag FLAG_SYS_HIPSTER_MEET msgbox MauvilleCity_PokemonCenter_1F_Text_TeachWhatsHipAndHappening, MSGBOX_DEFAULT - special ScrSpecial_GetHipsterSpokenFlag - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_TryTeachWord + special GetHipsterSpokenFlag + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_PokemonCenter_1F_EventScript_TryTeachWord msgbox MauvilleCity_PokemonCenter_1F_Text_IAlreadyTaughtYou, MSGBOX_DEFAULT release end MauvilleCity_PokemonCenter_1F_EventScript_TryTeachWord:: - special ScrSpecial_HipsterTeachWord - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_TeachWord + special HipsterTryTeachWord + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_PokemonCenter_1F_EventScript_TeachWord msgbox MauvilleCity_PokemonCenter_1F_Text_IveGotNothingNewToTeach, MSGBOX_DEFAULT release end MauvilleCity_PokemonCenter_1F_EventScript_TeachWord:: msgbox MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfPhrase, MSGBOX_DEFAULT - special ScrSpecial_SetHipsterSpokenFlag + special SetHipsterSpokenFlag release end @@ -158,11 +149,9 @@ MauvilleCity_PokemonCenter_1F_EventScript_Trader:: lock faceplayer msgbox MauvilleCity_PokemonCenter_1F_Text_WantToTradeDecor, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_DeclineTrade - special ScrSpecial_GetTraderTradedFlag - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_AlreadyTraded + goto_if_eq VAR_RESULT, NO, MauvilleCity_PokemonCenter_1F_EventScript_DeclineTrade + special GetTraderTradedFlag + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_PokemonCenter_1F_EventScript_AlreadyTraded message MauvilleCity_PokemonCenter_1F_Text_PickADecorItem waitmessage goto MauvilleCity_PokemonCenter_1F_EventScript_PickDecorToReceive @@ -179,18 +168,14 @@ MauvilleCity_PokemonCenter_1F_EventScript_AlreadyTraded:: end MauvilleCity_PokemonCenter_1F_EventScript_PickDecorToReceive:: - special ScrSpecial_TraderMenuGetDecoration + special TraderMenuGetDecoration waitstate - compare VAR_0x8004, 0 - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_CancelPickDecor - compare VAR_0x8004, 0xFFFF - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_InvalidDecor + goto_if_eq VAR_0x8004, 0, MauvilleCity_PokemonCenter_1F_EventScript_CancelPickDecor + goto_if_eq VAR_0x8004, 0xFFFF, MauvilleCity_PokemonCenter_1F_EventScript_InvalidDecor msgbox MauvilleCity_PokemonCenter_1F_Text_OnceBelongedToPlayerDoYouWantIt, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_PickDifferentDecor - special ScrSpecial_DoesPlayerHaveNoDecorations - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_DontHaveAnyDecor + goto_if_eq VAR_RESULT, NO, MauvilleCity_PokemonCenter_1F_EventScript_PickDifferentDecor + special DoesPlayerHaveNoDecorations + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_PokemonCenter_1F_EventScript_DontHaveAnyDecor goto MauvilleCity_PokemonCenter_1F_EventScript_PickDecorToGive end @@ -218,19 +203,15 @@ MauvilleCity_PokemonCenter_1F_EventScript_DontHaveAnyDecor:: MauvilleCity_PokemonCenter_1F_EventScript_PickDecorToGive:: msgbox MauvilleCity_PokemonCenter_1F_Text_PickTheDecorToTrade, MSGBOX_DEFAULT - special ScrSpecial_TraderMenuGiveDecoration + special TraderShowDecorationMenu waitstate - compare VAR_0x8006, 0 - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_CancelGiveDecor - compare VAR_0x8006, 0xFFFF - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_DecorInUse - special ScrSpecial_IsDecorationFull - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_NoRoomForDecor + goto_if_eq VAR_0x8006, 0, MauvilleCity_PokemonCenter_1F_EventScript_CancelGiveDecor + goto_if_eq VAR_0x8006, 0xFFFF, MauvilleCity_PokemonCenter_1F_EventScript_DecorInUse + special IsDecorationCategoryFull + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_PokemonCenter_1F_EventScript_NoRoomForDecor msgbox MauvilleCity_PokemonCenter_1F_Text_SoWellTradeTheseDecor, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_PickDecorToGive - special ScrSpecial_TraderDoDecorationTrade + goto_if_eq VAR_RESULT, NO, MauvilleCity_PokemonCenter_1F_EventScript_PickDecorToGive + special TraderDoDecorationTrade msgbox MauvilleCity_PokemonCenter_1F_Text_SendDecorToYourPC, MSGBOX_DEFAULT release end @@ -334,7 +315,7 @@ MauvilleCity_PokemonCenter_1F_Text_TrendsStartedStory:: .string "the HOENN region!$" MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedTitle:: - .string "The BERRY-Planting TRAINER$" + .string "The BERRY-Planting TRAINER$" MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedAction:: .string "Planted BERRIES$" @@ -816,24 +797,20 @@ MauvilleCity_PokemonCenter_1F_EventScript_Storyteller:: setvar VAR_0x800A, 0 setvar VAR_0x800B, 0 msgbox MauvilleCity_PokemonCenter_1F_Text_WillYouHearMyTale, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_DeclineStoryteller - specialvar VAR_RESULT, ScrSpecial_StorytellerGetFreeStorySlot - compare VAR_RESULT, 0 - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_KnowNoTales + goto_if_eq VAR_RESULT, NO, MauvilleCity_PokemonCenter_1F_EventScript_DeclineStoryteller + specialvar VAR_RESULT, StorytellerGetFreeStorySlot + goto_if_eq VAR_RESULT, 0, MauvilleCity_PokemonCenter_1F_EventScript_KnowNoTales message MauvilleCity_PokemonCenter_1F_Text_WhichTaleToTell waitmessage - special ScrSpecial_StorytellerStoryListMenu + special StorytellerStoryListMenu waitstate - compare VAR_RESULT, 0 - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_CancelStorySelection + goto_if_eq VAR_RESULT, 0, MauvilleCity_PokemonCenter_1F_EventScript_CancelStorySelection setvar VAR_0x8008, 1 - special ScrSpecial_StorytellerDisplayStory + special Script_StorytellerDisplayStory waitmessage waitbuttonpress - specialvar VAR_RESULT, ScrSpecial_StorytellerUpdateStat - compare VAR_RESULT, 0 - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_AreThereOtherTales + specialvar VAR_RESULT, StorytellerUpdateStat + goto_if_eq VAR_RESULT, 0, MauvilleCity_PokemonCenter_1F_EventScript_AreThereOtherTales goto MauvilleCity_PokemonCenter_1F_EventScript_TellPlayersTale MauvilleCity_PokemonCenter_1F_EventScript_CancelStorySelection:: @@ -842,20 +819,17 @@ MauvilleCity_PokemonCenter_1F_EventScript_CancelStorySelection:: MauvilleCity_PokemonCenter_1F_EventScript_AreThereOtherTales:: msgbox MauvilleCity_PokemonCenter_1F_Text_CouldThereBeOtherLegends, MSGBOX_DEFAULT - specialvar VAR_RESULT, ScrSpecial_HasStorytellerAlreadyRecorded - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_StorytellerEnd + specialvar VAR_RESULT, HasStorytellerAlreadyRecorded + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_PokemonCenter_1F_EventScript_StorytellerEnd goto MauvilleCity_PokemonCenter_1F_EventScript_DoYouHaveAnyTales MauvilleCity_PokemonCenter_1F_EventScript_KnowNoTales:: msgbox MauvilleCity_PokemonCenter_1F_Text_IKnowNoTales, MSGBOX_DEFAULT MauvilleCity_PokemonCenter_1F_EventScript_DoYouHaveAnyTales:: msgbox MauvilleCity_PokemonCenter_1F_Text_HaveYouAnyLegendaryTales, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_DeclineStoryteller - specialvar VAR_RESULT, ScrSpecial_StorytellerInitializeRandomStat - compare VAR_RESULT, 1 - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_TellPlayersTale + goto_if_eq VAR_RESULT, NO, MauvilleCity_PokemonCenter_1F_EventScript_DeclineStoryteller + specialvar VAR_RESULT, Script_StorytellerInitializeRandomStat + goto_if_eq VAR_RESULT, 1, MauvilleCity_PokemonCenter_1F_EventScript_TellPlayersTale msgbox MauvilleCity_PokemonCenter_1F_Text_NotWorthyOfLegend, MSGBOX_DEFAULT release end @@ -902,26 +876,20 @@ MauvilleCity_PokemonCenter_1F_EventScript_Giddy:: lock faceplayer msgbox MauvilleCity_PokemonCenter_1F_Text_HearMyStory, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_TryTellTale - compare VAR_RESULT, NO - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_DeclineGiddy + goto_if_eq VAR_RESULT, YES, MauvilleCity_PokemonCenter_1F_EventScript_TryTellTale + goto_if_eq VAR_RESULT, NO, MauvilleCity_PokemonCenter_1F_EventScript_DeclineGiddy end MauvilleCity_PokemonCenter_1F_EventScript_TryTellTale:: - special ScrSpecial_GiddyShouldTellAnotherTale - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_GiddyTellTale - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_ToldEnoughTales + special GiddyShouldTellAnotherTale + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_PokemonCenter_1F_EventScript_GiddyTellTale + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_PokemonCenter_1F_EventScript_ToldEnoughTales end MauvilleCity_PokemonCenter_1F_EventScript_TryTellNewTale:: - special ScrSpecial_GiddyShouldTellAnotherTale - compare VAR_RESULT, TRUE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_GiddyStartNewTale - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_ToldEnoughTales + special GiddyShouldTellAnotherTale + goto_if_eq VAR_RESULT, TRUE, MauvilleCity_PokemonCenter_1F_EventScript_GiddyStartNewTale + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_PokemonCenter_1F_EventScript_ToldEnoughTales end MauvilleCity_PokemonCenter_1F_EventScript_GiddyStartNewTale:: @@ -929,16 +897,15 @@ MauvilleCity_PokemonCenter_1F_EventScript_GiddyStartNewTale:: goto MauvilleCity_PokemonCenter_1F_EventScript_GiddyTellTale end -@ Regardless of whether yes or no is selected below, Giddy will continue to tell stories until he's told 10 +@ Giddy will continue to tell stories regardless of whether yes or no is selected below. +@ Each story there is a 10% chance it will be his last. Otherwise he will stop at 10 stories. MauvilleCity_PokemonCenter_1F_EventScript_GiddyTellTale:: - special ScrSpecial_GenerateGiddyLine + special GenerateGiddyLine special ShowFieldMessageStringVar4 waitmessage yesnobox 20, 8 - compare VAR_RESULT, 1 - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_TryTellNewTale - compare VAR_RESULT, 0 - goto_if_eq MauvilleCity_PokemonCenter_1F_EventScript_TryTellNewTale + goto_if_eq VAR_RESULT, YES, MauvilleCity_PokemonCenter_1F_EventScript_TryTellNewTale + goto_if_eq VAR_RESULT, NO, MauvilleCity_PokemonCenter_1F_EventScript_TryTellNewTale end MauvilleCity_PokemonCenter_1F_EventScript_DeclineGiddy:: diff --git a/data/scripts/mevent.inc b/data/scripts/mevent.inc deleted file mode 100644 index b33a332700..0000000000 --- a/data/scripts/mevent.inc +++ /dev/null @@ -1,62 +0,0 @@ -EventScript_Questionnaire:: - lockall - msgbox Mevent_Text_FillOutQuestionnaire, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq Mevent_EventScript_Release - setvar VAR_0x8004, EASY_CHAT_TYPE_QUESTIONNAIRE - call Common_ShowEasyChatScreen - lock - faceplayer - specialvar VAR_0x8008, GetMartEmployeeObjectEventId - compare VAR_0x8004, 1 - goto_if_eq Mevent_EventScript_PlayerInputMysteryEventPhrase - compare VAR_0x8004, 2 - goto_if_eq Mevent_EventScript_PlayerInputMysteryGiftPhrase - compare VAR_RESULT, 0 - goto_if_eq Mevent_EventScript_Release - compare VAR_RESULT, 1 - goto_if_eq Mevent_EventScript_QuestionnaireThankYou - end - -Mevent_EventScript_PlayerInputMysteryEventPhrase:: - goto_if_unset FLAG_SYS_POKEDEX_GET, Mevent_EventScript_QuestionnaireThankYou - goto_if_set FLAG_SYS_MYSTERY_EVENT_ENABLE, Mevent_EventScript_QuestionnaireThankYou - applymovement VAR_0x8008, Common_Movement_FaceDown - waitmovement 0 - playse SE_PIN - applymovement VAR_0x8008, Common_Movement_ExclamationMark - waitmovement 0 - applymovement VAR_0x8008, Common_Movement_Delay48 - waitmovement 0 - msgbox Mevent_Text_YouKnowThoseWordsEvent, MSGBOX_DEFAULT - setflag FLAG_SYS_MYSTERY_EVENT_ENABLE - msgbox Mevent_Text_YouCanAccessMysteryEvent, MSGBOX_DEFAULT - releaseall - end - -Mevent_EventScript_PlayerInputMysteryGiftPhrase:: - goto_if_unset FLAG_SYS_POKEDEX_GET, Mevent_EventScript_QuestionnaireThankYou - goto_if_set FLAG_SYS_MYSTERY_GIFT_ENABLE, Mevent_EventScript_QuestionnaireThankYou - applymovement VAR_0x8008, Common_Movement_FaceDown - waitmovement 0 - playse SE_PIN - applymovement VAR_0x8008, Common_Movement_ExclamationMark - waitmovement 0 - applymovement VAR_0x8008, Common_Movement_Delay48 - waitmovement 0 - msgbox Mevent_Text_YouKnowThoseWordsGift, MSGBOX_DEFAULT - setflag FLAG_SYS_MYSTERY_GIFT_ENABLE - msgbox Mevent_Text_YouCanAccessMysteryGift, MSGBOX_DEFAULT - releaseall - end - -Mevent_EventScript_Release:: - releaseall - end - -Mevent_EventScript_QuestionnaireThankYou:: - applymovement VAR_0x8008, Common_Movement_FaceDown - waitmovement 0 - msgbox Mevent_Text_QuestionnaireThankYou, MSGBOX_DEFAULT - releaseall - end diff --git a/data/scripts/move_tutors.inc b/data/scripts/move_tutors.inc index cc952749d4..afb772bb10 100644 --- a/data/scripts/move_tutors.inc +++ b/data/scripts/move_tutors.inc @@ -3,16 +3,13 @@ SlateportCity_PokemonFanClub_EventScript_SwaggerTutor:: faceplayer goto_if_set FLAG_MOVE_TUTOR_TAUGHT_SWAGGER, MoveTutor_EventScript_SwaggerTaught msgbox MoveTutor_Text_SwaggerTeach, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_SwaggerDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_SwaggerDeclined call MoveTutor_EventScript_CanOnlyBeLearnedOnce - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_SwaggerDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_SwaggerDeclined msgbox MoveTutor_Text_SwaggerWhichMon, MSGBOX_DEFAULT - setvar VAR_0x8005, TUTOR_MOVE_SWAGGER + setvar VAR_0x8005, MOVE_SWAGGER call MoveTutor_EventScript_OpenPartyMenu - compare VAR_RESULT, 0 - goto_if_eq MoveTutor_EventScript_SwaggerDeclined + goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_SwaggerDeclined setflag FLAG_MOVE_TUTOR_TAUGHT_SWAGGER goto MoveTutor_EventScript_SwaggerTaught end @@ -32,16 +29,13 @@ MauvilleCity_EventScript_RolloutTutor:: faceplayer goto_if_set FLAG_MOVE_TUTOR_TAUGHT_ROLLOUT, MoveTutor_EventScript_RolloutTaught msgbox MoveTutor_Text_RolloutTeach, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_RolloutDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_RolloutDeclined call MoveTutor_EventScript_CanOnlyBeLearnedOnce - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_RolloutDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_RolloutDeclined msgbox MoveTutor_Text_RolloutWhichMon, MSGBOX_DEFAULT - setvar VAR_0x8005, TUTOR_MOVE_ROLLOUT + setvar VAR_0x8005, MOVE_ROLLOUT call MoveTutor_EventScript_OpenPartyMenu - compare VAR_RESULT, 0 - goto_if_eq MoveTutor_EventScript_RolloutDeclined + goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_RolloutDeclined setflag FLAG_MOVE_TUTOR_TAUGHT_ROLLOUT goto MoveTutor_EventScript_RolloutTaught end @@ -61,16 +55,13 @@ VerdanturfTown_PokemonCenter_1F_EventScript_FuryCutterTutor:: faceplayer goto_if_set FLAG_MOVE_TUTOR_TAUGHT_FURY_CUTTER, MoveTutor_EventScript_FuryCutterTaught msgbox MoveTutor_Text_FuryCutterTeach, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_FuryCutterDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_FuryCutterDeclined call MoveTutor_EventScript_CanOnlyBeLearnedOnce - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_FuryCutterDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_FuryCutterDeclined msgbox MoveTutor_Text_FuryCutterWhichMon, MSGBOX_DEFAULT - setvar VAR_0x8005, TUTOR_MOVE_FURY_CUTTER + setvar VAR_0x8005, MOVE_FURY_CUTTER call MoveTutor_EventScript_OpenPartyMenu - compare VAR_RESULT, 0 - goto_if_eq MoveTutor_EventScript_FuryCutterDeclined + goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_FuryCutterDeclined setflag FLAG_MOVE_TUTOR_TAUGHT_FURY_CUTTER goto MoveTutor_EventScript_FuryCutterTaught end @@ -90,16 +81,13 @@ LavaridgeTown_House_EventScript_MimicTutor:: faceplayer goto_if_set FLAG_MOVE_TUTOR_TAUGHT_MIMIC, MoveTutor_EventScript_MimicTaught msgbox MoveTutor_MimicTeach, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_MimicDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_MimicDeclined call MoveTutor_EventScript_CanOnlyBeLearnedOnce - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_MimicDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_MimicDeclined msgbox MoveTutor_Text_MimicWhichMon, MSGBOX_DEFAULT - setvar VAR_0x8005, TUTOR_MOVE_MIMIC + setvar VAR_0x8005, MOVE_MIMIC call MoveTutor_EventScript_OpenPartyMenu - compare VAR_RESULT, 0 - goto_if_eq MoveTutor_EventScript_MimicDeclined + goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_MimicDeclined setflag FLAG_MOVE_TUTOR_TAUGHT_MIMIC goto MoveTutor_EventScript_MimicTaught end @@ -119,16 +107,13 @@ FallarborTown_Mart_EventScript_MetronomeTutor:: faceplayer goto_if_set FLAG_MOVE_TUTOR_TAUGHT_METRONOME, MoveTutor_EventScript_MetronomeTaught msgbox MoveTutor_Text_MetronomeTeach, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_MetronomeDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_MetronomeDeclined call MoveTutor_EventScript_CanOnlyBeLearnedOnce - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_MetronomeDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_MetronomeDeclined msgbox MoveTutor_Text_MetronomeWhichMon, MSGBOX_DEFAULT - setvar VAR_0x8005, TUTOR_MOVE_METRONOME + setvar VAR_0x8005, MOVE_METRONOME call MoveTutor_EventScript_OpenPartyMenu - compare VAR_RESULT, 0 - goto_if_eq MoveTutor_EventScript_MetronomeDeclined + goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_MetronomeDeclined setflag FLAG_MOVE_TUTOR_TAUGHT_METRONOME goto MoveTutor_EventScript_MetronomeTaught end @@ -148,16 +133,13 @@ FortreeCity_House2_EventScript_SleepTalkTutor:: faceplayer goto_if_set FLAG_MOVE_TUTOR_TAUGHT_SLEEP_TALK, MoveTutor_EventScript_SleepTalkTaught msgbox MoveTutor_Text_SleepTalkTeach, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_SleepTalkDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_SleepTalkDeclined call MoveTutor_EventScript_CanOnlyBeLearnedOnce - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_SleepTalkDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_SleepTalkDeclined msgbox MoveTutor_Text_SleepTalkWhichMon, MSGBOX_DEFAULT - setvar VAR_0x8005, TUTOR_MOVE_SLEEP_TALK + setvar VAR_0x8005, MOVE_SLEEP_TALK call MoveTutor_EventScript_OpenPartyMenu - compare VAR_RESULT, 0 - goto_if_eq MoveTutor_EventScript_SleepTalkDeclined + goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_SleepTalkDeclined setflag FLAG_MOVE_TUTOR_TAUGHT_SLEEP_TALK goto MoveTutor_EventScript_SleepTalkTaught end @@ -177,16 +159,13 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_SubstituteTutor:: faceplayer goto_if_set FLAG_MOVE_TUTOR_TAUGHT_SUBSTITUTE, MoveTutor_EventScript_SubstituteTaught msgbox MoveTutor_Text_SubstituteTeach, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_SubstituteDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_SubstituteDeclined call MoveTutor_EventScript_CanOnlyBeLearnedOnce - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_SubstituteDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_SubstituteDeclined msgbox MoveTutor_Text_SubstituteWhichMon, MSGBOX_DEFAULT - setvar VAR_0x8005, TUTOR_MOVE_SUBSTITUTE + setvar VAR_0x8005, MOVE_SUBSTITUTE call MoveTutor_EventScript_OpenPartyMenu - compare VAR_RESULT, 0 - goto_if_eq MoveTutor_EventScript_SubstituteDeclined + goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_SubstituteDeclined setflag FLAG_MOVE_TUTOR_TAUGHT_SUBSTITUTE goto MoveTutor_EventScript_SubstituteTaught end @@ -206,16 +185,13 @@ MossdeepCity_EventScript_DynamicPunchTutor:: faceplayer goto_if_set FLAG_MOVE_TUTOR_TAUGHT_DYNAMICPUNCH, MoveTutor_EventScript_DynamicPunchTaught msgbox MoveTutor_Text_DynamicPunchTeach, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_DynamicPunchDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_DynamicPunchDeclined call MoveTutor_EventScript_CanOnlyBeLearnedOnce - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_DynamicPunchDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_DynamicPunchDeclined msgbox MoveTutor_Text_DynamicPunchWhichMon, MSGBOX_DEFAULT - setvar VAR_0x8005, TUTOR_MOVE_DYNAMIC_PUNCH + setvar VAR_0x8005, MOVE_DYNAMIC_PUNCH call MoveTutor_EventScript_OpenPartyMenu - compare VAR_RESULT, 0 - goto_if_eq MoveTutor_EventScript_DynamicPunchDeclined + goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_DynamicPunchDeclined setflag FLAG_MOVE_TUTOR_TAUGHT_DYNAMICPUNCH goto MoveTutor_EventScript_DynamicPunchTaught end @@ -235,16 +211,13 @@ SootopolisCity_PokemonCenter_1F_EventScript_DoubleEdgeTutor:: faceplayer goto_if_set FLAG_MOVE_TUTOR_TAUGHT_DOUBLE_EDGE, MoveTutor_EventScript_DoubleEdgeTaught msgbox MoveTutor_Text_DoubleEdgeTeach, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_DoubleEdgeDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_DoubleEdgeDeclined call MoveTutor_EventScript_CanOnlyBeLearnedOnce - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_DoubleEdgeDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_DoubleEdgeDeclined msgbox MoveTutor_Text_DoubleEdgeWhichMon, MSGBOX_DEFAULT - setvar VAR_0x8005, TUTOR_MOVE_DOUBLE_EDGE + setvar VAR_0x8005, MOVE_DOUBLE_EDGE call MoveTutor_EventScript_OpenPartyMenu - compare VAR_RESULT, 0 - goto_if_eq MoveTutor_EventScript_DoubleEdgeDeclined + goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_DoubleEdgeDeclined setflag FLAG_MOVE_TUTOR_TAUGHT_DOUBLE_EDGE goto MoveTutor_EventScript_DoubleEdgeTaught end @@ -264,16 +237,13 @@ PacifidlogTown_PokemonCenter_1F_EventScript_ExplosionTutor:: faceplayer goto_if_set FLAG_MOVE_TUTOR_TAUGHT_EXPLOSION, MoveTutor_EventScript_ExplosionTaught msgbox MoveTutor_Text_ExplosionTeach, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_ExplosionDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_ExplosionDeclined call MoveTutor_EventScript_CanOnlyBeLearnedOnce - compare VAR_RESULT, NO - goto_if_eq MoveTutor_EventScript_ExplosionDeclined + goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_ExplosionDeclined msgbox MoveTutor_Text_ExplosionWhichMon, MSGBOX_DEFAULT - setvar VAR_0x8005, TUTOR_MOVE_EXPLOSION + setvar VAR_0x8005, MOVE_EXPLOSION call MoveTutor_EventScript_OpenPartyMenu - compare VAR_RESULT, 0 - goto_if_eq MoveTutor_EventScript_ExplosionDeclined + goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_ExplosionDeclined setflag FLAG_MOVE_TUTOR_TAUGHT_EXPLOSION goto MoveTutor_EventScript_ExplosionTaught end diff --git a/data/scripts/movement.inc b/data/scripts/movement.inc index 3f75d30dd4..383c014130 100644 --- a/data/scripts/movement.inc +++ b/data/scripts/movement.inc @@ -24,20 +24,20 @@ Common_Movement_FaceOriginalDirection: face_original_direction step_end -Common_Movement_WalkInPlaceFastestLeft: - walk_in_place_fastest_left +Common_Movement_WalkInPlaceFasterLeft: + walk_in_place_faster_left step_end -Common_Movement_WalkInPlaceFastestUp: - walk_in_place_fastest_up +Common_Movement_WalkInPlaceFasterUp: + walk_in_place_faster_up step_end -Common_Movement_WalkInPlaceFastestRight: - walk_in_place_fastest_right +Common_Movement_WalkInPlaceFasterRight: + walk_in_place_faster_right step_end -Common_Movement_WalkInPlaceFastestDown: - walk_in_place_fastest_down +Common_Movement_WalkInPlaceFasterDown: + walk_in_place_faster_down step_end Common_Movement_FaceRight: diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc deleted file mode 100644 index f0cb559983..0000000000 --- a/data/scripts/mystery_event_club.inc +++ /dev/null @@ -1,170 +0,0 @@ -MysteryEventClub_EventScript_Man:: - lock - faceplayer - goto_if_set FLAG_SYS_CHAT_USED, MysteryEventClub_EventScript_GivenProfileBefore - msgbox MysteryEventClub_Text_CollectTrainerProfiles, MSGBOX_DEFAULT - goto MysteryEventClub_EventScript_AskToSeeProfile - end - -MysteryEventClub_EventScript_AskToSeeProfile:: - msgbox MysteryEventClub_Text_MayISeeYourProfile, MSGBOX_DEFAULT - multichoice 17, 6, MULTI_YESNOINFO_2, FALSE - switch VAR_RESULT - case 0, MysteryEventClub_EventScript_CreateProfile - case 1, MysteryEventClub_EventScript_DeclineShowProfile - case 2, MysteryEventClub_EventScript_Info - case MULTI_B_PRESSED, MysteryEventClub_EventScript_DeclineShowProfile - end - -MysteryEventClub_EventScript_Info:: - msgbox MysteryEventClub_Text_EasyChatExplanation, MSGBOX_DEFAULT - goto MysteryEventClub_EventScript_AskToSeeProfile - end - -MysteryEventClub_EventScript_CreateProfile:: - msgbox MysteryEventClub_Text_LetsSeeItThen, MSGBOX_DEFAULT - closemessage - setvar VAR_0x8004, EASY_CHAT_TYPE_PROFILE - call Common_ShowEasyChatScreen - lock - faceplayer - compare VAR_RESULT, 0 - goto_if_eq MysteryEventClub_EventScript_CancelShowProfile - compare VAR_RESULT, 1 - goto_if_eq MysteryEventClub_EventScript_ShowProfile - end - -MysteryEventClub_EventScript_CancelShowProfile:: - msgbox MysteryEventClub_Text_NotIntoItRightNow, MSGBOX_DEFAULT - release - end - -MysteryEventClub_EventScript_ShowProfile:: - setvar VAR_0x8004, 0 - special ShowEasyChatProfile - waitmessage - delay 80 - msgbox MysteryEventClub_Text_FantasticProfile, MSGBOX_DEFAULT - release - end - -MysteryEventClub_EventScript_DeclineShowProfile:: - msgbox MysteryEventClub_Text_ImagineYouWouldHaveWonderfulProfile, MSGBOX_DEFAULT - release - end - -MysteryEventClub_EventScript_GivenProfileBefore:: - msgbox MysteryEventClub_Text_YouHaveWonderfulSmile, MSGBOX_DEFAULT - goto MysteryEventClub_EventScript_AskToSeeNewProfile - end - -MysteryEventClub_EventScript_AskToSeeNewProfile:: - msgbox MysteryEventClub_Text_MayISeeYourNewProfile, MSGBOX_DEFAULT - multichoice 17, 6, MULTI_YESNOINFO_2, FALSE - switch VAR_RESULT - case 0, MysteryEventClub_EventScript_CreateNewProfile - case 1, MysteryEventClub_EventScript_DeclineNewProfile - case 2, MysteryEventClub_EventScript_InfoNewProfile - case MULTI_B_PRESSED, MysteryEventClub_EventScript_DeclineNewProfile - end - -MysteryEventClub_EventScript_InfoNewProfile:: - msgbox MysteryEventClub_Text_EasyChatExplanation, MSGBOX_DEFAULT - goto MysteryEventClub_EventScript_AskToSeeNewProfile - end - -MysteryEventClub_EventScript_CreateNewProfile:: - msgbox MysteryEventClub_Text_EvenBetterThanLastProfile, MSGBOX_DEFAULT - closemessage - setvar VAR_0x8004, EASY_CHAT_TYPE_PROFILE - call Common_ShowEasyChatScreen - lock - faceplayer - compare VAR_RESULT, 0 - goto_if_eq MysteryEventClub_EventScript_CancelShowProfile - compare VAR_RESULT, 1 - goto_if_eq MysteryEventClub_EventScript_ShowProfile - end - -MysteryEventClub_EventScript_DeclineNewProfile:: - msgbox MysteryEventClub_Text_LikeProfileWayItIs, MSGBOX_DEFAULT - release - end - -@ Unused -MysteryEventClub_EventScript_Ret:: - return - -MysteryEventClub_Text_CollectTrainerProfiles: - .string "Hello there, TRAINER!\n" - .string "You've got a wonderful smile, there.\p" - .string "I have a hobby--collecting the profiles\n" - .string "of POKéMON TRAINERS.$" - -MysteryEventClub_Text_MayISeeYourProfile: - .string "So, how about it?\n" - .string "May I see your profile?$" - -MysteryEventClub_Text_EasyChatExplanation: - .string "You make your own profile by putting\n" - .string "together four words or phrases.\p" - .string "Here, I'll show you an example of a\n" - .string "profile using four pieces of text.\p" - .string "You can switch those four pieces with\n" - .string "other text pieces any which way you\l" - .string "like to make your own profile.\p" - .string "There are a lot of text pieces that\n" - .string "you can use.\p" - .string "They are arranged in groups like\n" - .string "POKéMON, lifestyles, and hobbies so\l" - .string "it is easier to look them up.\p" - .string "So, first, choose the group of text\n" - .string "pieces to display a list of choices.\p" - .string "Then, pick the choice you want.\p" - .string "Repeat for the remaining text choices,\n" - .string "and you'll have your very own profile.$" - -MysteryEventClub_Text_LetsSeeItThen: - .string "Yes! Thank you!\n" - .string "So, let's see it, then.$" - -MysteryEventClub_Text_ImagineYouWouldHaveWonderfulProfile: - .string "Oh, no, really?\p" - .string "I imagine someone like you would have\n" - .string "a wonderful profile…$" - -MysteryEventClub_Text_NotIntoItRightNow: - .string "Oh? You're not into it right now?\p" - .string "Well, anytime is good by me!$" - -MysteryEventClub_Text_YouHaveWonderfulSmile: - .string "Hello there, TRAINER!\n" - .string "You've got a wonderful smile.$" - -MysteryEventClub_Text_MayISeeYourNewProfile: - .string "May I see your new profile?$" - -MysteryEventClub_Text_EvenBetterThanLastProfile: - .string "Yes! Thank you!\p" - .string "I hope it's even better than the profile\n" - .string "you showed me before.$" - -MysteryEventClub_Text_LikeProfileWayItIs: - .string "Oh, you like your profile the way it is.\p" - .string "I don't blame you--it's a wonderful\n" - .string "profile the way it is now.$" - -MysteryEventClub_Text_FantasticProfile: - .string "F-fantastic!\p" - .string "Your profile, it's wonderful!\n" - .string "It really says what you're about.\p" - .string "Why, anyone hearing this profile would\n" - .string "be captivated by you!\p" - .string "Thank you!$" - -@ Unused -MysteryEventClub_Text_YouKnowSecretSaying: - .string "Oh?\n" - .string "You know the secret saying!\p" - .string "That means you're now a fellow member\n" - .string "of the MYSTERY EVENT CLUB!$" diff --git a/data/scripts/obtain_item.inc b/data/scripts/obtain_item.inc index 382f5ce320..e982858e7b 100644 --- a/data/scripts/obtain_item.inc +++ b/data/scripts/obtain_item.inc @@ -1,67 +1,63 @@ +.set ITEMID, VAR_0x8000 +.set AMOUNT, VAR_0x8001 + Std_ObtainItem:: - additem VAR_0x8000, VAR_0x8001 + additem ITEMID, AMOUNT copyvar VAR_0x8007, VAR_RESULT call EventScript_ObtainItemMessage return EventScript_ObtainItemMessage:: - bufferitemnameplural 1, VAR_0x8000, VAR_0x8001 - checkitemtype VAR_0x8000 + bufferitemnameplural STR_VAR_2, ITEMID, AMOUNT + checkitemtype ITEMID call EventScript_BufferPocketNameAndTryFanfare - compare VAR_0x8007, 1 - call_if_eq EventScript_ObtainedItem - compare VAR_0x8007, 0 - call_if_eq EventScript_NoRoomForItem + call_if_eq VAR_0x8007, TRUE, EventScript_ObtainedItem + call_if_eq VAR_0x8007, FALSE, EventScript_NoRoomForItem return EventScript_BufferPocketNameAndTryFanfare:: switch VAR_RESULT - case POCKET_ITEMS, EventScript_BufferItemsPocket - case POCKET_KEY_ITEMS, EventScript_BufferKeyItemsPocket + case POCKET_ITEMS, EventScript_BufferItemsPocket + case POCKET_KEY_ITEMS, EventScript_BufferKeyItemsPocket case POCKET_POKE_BALLS, EventScript_BufferPokeballsPocket - case POCKET_TM_HM, EventScript_BufferTMHMsPocket - case POCKET_BERRIES, EventScript_BufferBerriesPocket + case POCKET_TM_HM, EventScript_BufferTMHMsPocket + case POCKET_BERRIES, EventScript_BufferBerriesPocket end EventScript_BufferItemsPocket:: - bufferstdstring 2, STDSTRING_ITEMS - compare VAR_0x8007, 1 - call_if_eq EventScript_PlayFanfareObtainedItem + bufferstdstring STR_VAR_3, STDSTRING_ITEMS + call_if_eq VAR_0x8007, TRUE, EventScript_PlayFanfareObtainedItem return EventScript_BufferKeyItemsPocket:: - bufferstdstring 2, STDSTRING_KEYITEMS - compare VAR_0x8007, 1 - call_if_eq EventScript_PlayFanfareObtainedItem + bufferstdstring STR_VAR_3, STDSTRING_KEYITEMS + call_if_eq VAR_0x8007, TRUE, EventScript_PlayFanfareObtainedItem return EventScript_BufferPokeballsPocket:: - bufferstdstring 2, STDSTRING_POKEBALLS - compare VAR_0x8007, 1 - call_if_eq EventScript_PlayFanfareObtainedItem + bufferstdstring STR_VAR_3, STDSTRING_POKEBALLS + call_if_eq VAR_0x8007, TRUE, EventScript_PlayFanfareObtainedItem return EventScript_BufferTMHMsPocket:: - bufferstdstring 2, STDSTRING_TMHMS - compare VAR_0x8007, 1 - call_if_eq EventScript_PlayFanfareObtainedTMHM + bufferstdstring STR_VAR_3, STDSTRING_TMHMS + call_if_eq VAR_0x8007, TRUE, EventScript_PlayFanfareObtainedTMHM return EventScript_BufferBerriesPocket:: - bufferstdstring 2, STDSTRING_BERRIES - compare VAR_0x8007, 1 - call_if_eq EventScript_PlayFanfareObtainedItem + bufferstdstring STR_VAR_3, STDSTRING_BERRIES + call_if_eq VAR_0x8007, TRUE, EventScript_PlayFanfareObtainedItem return EventScript_ObtainedItem:: message gText_ObtainedTheItem waitfanfare msgbox gText_PutItemInPocket, MSGBOX_DEFAULT - setvar VAR_RESULT, 1 + setvar VAR_RESULT, TRUE return EventScript_NoRoomForItem:: - setvar VAR_RESULT, 0 + setvar VAR_RESULT, FALSE return EventScript_PlayFanfareObtainedItem:: @@ -73,17 +69,15 @@ EventScript_PlayFanfareObtainedTMHM:: return Std_ObtainDecoration:: - adddecoration VAR_0x8000 + adddecoration ITEMID copyvar VAR_0x8007, VAR_RESULT call EventScript_ObtainDecorationMessage return EventScript_ObtainDecorationMessage:: - bufferdecorationname 1, VAR_0x8000 - compare VAR_0x8007, 1 - call_if_eq EventScript_ObtainedDecor - compare VAR_0x8007, 0 - call_if_eq EventScript_NoRoomForDecor + bufferdecorationname STR_VAR_2, ITEMID + call_if_eq VAR_0x8007, TRUE, EventScript_ObtainedDecor + call_if_eq VAR_0x8007, FALSE, EventScript_NoRoomForDecor return EventScript_ObtainedDecor:: @@ -91,28 +85,26 @@ EventScript_ObtainedDecor:: message gText_ObtainedTheDecor waitfanfare msgbox gText_TheDecorWasTransferredToThePC, MSGBOX_DEFAULT - setvar VAR_RESULT, 1 + setvar VAR_RESULT, TRUE return EventScript_NoRoomForDecor:: - setvar VAR_RESULT, 0 + setvar VAR_RESULT, FALSE return Std_FindItem:: lock faceplayer waitse - copyvar VAR_0x8004, VAR_0x8000 - copyvar VAR_0x8005, VAR_0x8001 - checkitemspace VAR_0x8000, VAR_0x8001 + copyvar VAR_0x8004, ITEMID + copyvar VAR_0x8005, AMOUNT + checkitemspace ITEMID, AMOUNT copyvar VAR_0x8007, VAR_RESULT - bufferitemnameplural 1, VAR_0x8000, VAR_0x8001 - checkitemtype VAR_0x8000 + bufferitemnameplural STR_VAR_2, ITEMID, AMOUNT + checkitemtype ITEMID call EventScript_BufferPocketNameAndTryFanfare - compare VAR_0x8007, 1 - call_if_eq EventScript_PickUpItem - compare VAR_0x8007, 0 - call_if_eq EventScript_NoRoomToPickUpItem + call_if_eq VAR_0x8007, TRUE, EventScript_PickUpItem + call_if_eq VAR_0x8007, FALSE, EventScript_NoRoomToPickUpItem release return @@ -121,16 +113,13 @@ EventScript_PickUpItem:: additem VAR_0x8004, VAR_0x8005 specialvar VAR_RESULT, BufferTMHMMoveName copyvar VAR_0x8008, VAR_RESULT - compare VAR_0x8008, 1 - call_if_eq EventScript_FoundTMHM - compare VAR_0x8008, 0 - call_if_eq EventScript_FoundItem + call_if_eq VAR_0x8008, TRUE, EventScript_FoundTMHM + call_if_eq VAR_0x8008, FALSE, EventScript_FoundItem waitfanfare waitmessage - bufferitemnameplural 1, VAR_0x8004, VAR_0x8005 + bufferitemnameplural STR_VAR_2, VAR_0x8004, VAR_0x8005 pyramid_inchallenge - compare VAR_RESULT, 1 - goto_if_eq EventScript_PutBattlePyramidItemInBag + goto_if_eq VAR_RESULT, TRUE, EventScript_PutBattlePyramidItemInBag msgbox gText_PutItemInPocket, MSGBOX_DEFAULT return @@ -139,7 +128,7 @@ EventScript_PutBattlePyramidItemInBag:: return EventScript_FoundTMHM:: - bufferitemnameplural 0, VAR_0x8004, VAR_0x8005 + bufferitemnameplural STR_VAR_1, VAR_0x8004, VAR_0x8005 message gText_PlayerFoundOneTMHM return @@ -150,7 +139,7 @@ EventScript_FoundItem:: EventScript_NoRoomToPickUpItem:: msgbox gText_ObtainedTheItem, MSGBOX_DEFAULT msgbox gText_TooBadBagIsFull, MSGBOX_DEFAULT - setvar VAR_RESULT, 0 + setvar VAR_RESULT, FALSE return EventScript_HiddenItemScript:: @@ -158,27 +147,23 @@ EventScript_HiddenItemScript:: waitse additem VAR_0x8005 copyvar VAR_0x8007, VAR_RESULT - bufferitemnameplural 1, VAR_0x8005, 1 + bufferitemnameplural STR_VAR_2, VAR_0x8005, 1 checkitemtype VAR_0x8005 call EventScript_BufferPocketNameAndTryFanfare - compare VAR_0x8007, 1 - goto_if_eq EventScript_PickUpHiddenItem - compare VAR_0x8007, 0 - goto_if_eq EventScript_NoRoomForHiddenItem + goto_if_eq VAR_0x8007, TRUE, EventScript_PickUpHiddenItem + goto_if_eq VAR_0x8007, FALSE, EventScript_NoRoomForHiddenItem end EventScript_PickUpHiddenItem:: copyvar VAR_0x8008, VAR_0x8004 copyvar VAR_0x8004, VAR_0x8005 specialvar VAR_RESULT, BufferTMHMMoveName - compare VAR_RESULT, 1 - goto_if_eq EventScript_FoundHiddenTMHM - compare VAR_RESULT, 0 - goto_if_eq EventScript_FoundHiddenItem + goto_if_eq VAR_RESULT, TRUE, EventScript_FoundHiddenTMHM + goto_if_eq VAR_RESULT, FALSE, EventScript_FoundHiddenItem end EventScript_FoundHiddenTMHM:: - bufferitemnameplural 0, VAR_0x8004, 1 + bufferitemnameplural STR_VAR_1, VAR_0x8004, 1 message gText_PlayerFoundOneTMHM goto EventScript_PutHiddenItemInPocket end @@ -191,7 +176,7 @@ EventScript_FoundHiddenItem:: EventScript_PutHiddenItemInPocket:: waitmessage waitfanfare - bufferitemnameplural 1, VAR_0x8004, 1 + bufferitemnameplural STR_VAR_2, VAR_0x8004, 1 copyvar VAR_0x8004, VAR_0x8008 msgbox gText_PutItemInPocket, MSGBOX_DEFAULT special TryPutTreasureInvestigatorsOnAir diff --git a/data/scripts/pc.inc b/data/scripts/pc.inc index 43c0bca0d7..1993aaf63f 100644 --- a/data/scripts/pc.inc +++ b/data/scripts/pc.inc @@ -1,6 +1,6 @@ EventScript_PC:: lockall - setvar VAR_0x8004, 0 + setvar VAR_0x8004, PC_LOCATION_OTHER special DoPCTurnOnEffect playse SE_PC_ON msgbox Text_BootUpPC, MSGBOX_DEFAULT @@ -51,7 +51,7 @@ EventScript_AccessLanettesPC:: return EventScript_TurnOffPC:: - setvar VAR_0x8004, 0 + setvar VAR_0x8004, PC_LOCATION_OTHER playse SE_PC_OFF special DoPCTurnOffEffect releaseall diff --git a/data/scripts/pc_transfer.inc b/data/scripts/pc_transfer.inc index 1fe575d551..1204bece36 100644 --- a/data/scripts/pc_transfer.inc +++ b/data/scripts/pc_transfer.inc @@ -14,35 +14,33 @@ Common_EventScript_NameReceivedBoxMon:: return Common_EventScript_TransferredToPC:: - bufferboxname 0, VAR_PC_BOX_TO_SEND_MON - bufferspeciesname 1, VAR_TEMP_1 + bufferboxname STR_VAR_1, VAR_PC_BOX_TO_SEND_MON + bufferspeciesname STR_VAR_2, VAR_TEMP_1 call_if_unset FLAG_SYS_PC_LANETTE, EventScript_TransferredSomeonesPC call_if_set FLAG_SYS_PC_LANETTE, EventScript_TransferredLanettesPC return EventScript_TransferredSomeonesPC:: specialvar VAR_RESULT, ShouldShowBoxWasFullMessage - compare VAR_RESULT, 1 - goto_if_eq EventScript_SomeonesPCBoxFull + goto_if_eq VAR_RESULT, TRUE, EventScript_SomeonesPCBoxFull msgbox gText_PkmnTransferredSomeonesPC, MSGBOX_DEFAULT return EventScript_SomeonesPCBoxFull:: specialvar VAR_RESULT, GetPCBoxToSendMon - bufferboxname 2, VAR_RESULT + bufferboxname STR_VAR_3, VAR_RESULT msgbox gText_PkmnTransferredSomeonesPCBoxFull, MSGBOX_DEFAULT return EventScript_TransferredLanettesPC:: specialvar VAR_RESULT, ShouldShowBoxWasFullMessage - compare VAR_RESULT, TRUE - goto_if_eq EventScript_LanettesPCBoxFull + goto_if_eq VAR_RESULT, TRUE, EventScript_LanettesPCBoxFull msgbox gText_PkmnTransferredLanettesPC, MSGBOX_DEFAULT return EventScript_LanettesPCBoxFull:: specialvar VAR_RESULT, GetPCBoxToSendMon - bufferboxname 2, VAR_RESULT + bufferboxname STR_VAR_3, VAR_RESULT msgbox gText_PkmnTransferredLanettesPCBoxFull, MSGBOX_DEFAULT return diff --git a/data/scripts/pkmn_center_nurse.inc b/data/scripts/pkmn_center_nurse.inc index 7797b30615..64ccdfa77e 100644 --- a/data/scripts/pkmn_center_nurse.inc +++ b/data/scripts/pkmn_center_nurse.inc @@ -1,135 +1,122 @@ Common_EventScript_PkmnCenterNurse:: - lock - faceplayer - setvar VAR_0x8004, 0 - specialvar VAR_RESULT, CountPlayerTrainerStars - compare VAR_RESULT, 4 - goto_if_eq EventScript_PkmnCenterNurse_GoldCard - msgbox gText_WouldYouLikeToRestYourPkmn, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq EventScript_PkmnCenterNurse_HealPkmn - compare VAR_RESULT, NO - goto_if_eq EventScript_PkmnCenterNurse_Goodbye - end + lock + faceplayer + setvar VAR_0x8004, 0 + specialvar VAR_RESULT, CountPlayerTrainerStars + goto_if_eq VAR_RESULT, 4, EventScript_PkmnCenterNurse_GoldCard + msgbox gText_WouldYouLikeToRestYourPkmn, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, EventScript_PkmnCenterNurse_HealPkmn + goto_if_eq VAR_RESULT, NO, EventScript_PkmnCenterNurse_Goodbye + end EventScript_PkmnCenterNurse_Goodbye:: - message gText_WeHopeToSeeYouAgain - return + message gText_WeHopeToSeeYouAgain + return @ VAR_0x8004 is 1 when player has Gold Card; jumps are identical EventScript_PkmnCenterNurse_HealPkmn:: - incrementgamestat GAME_STAT_USED_POKECENTER - compare VAR_0x8004, 0 - call_if_eq EventScript_PkmnCenterNurse_IllTakeYourPkmn - compare VAR_0x8004, 1 - call_if_eq EventScript_PkmnCenterNurse_IllTakeYourPkmn2 - waitmessage - call EventScript_PkmnCenterNurse_TakeAndHealPkmn - goto_if_unset FLAG_POKERUS_EXPLAINED, EventScript_PkmnCenterNurse_CheckPokerus - goto EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom - end + incrementgamestat GAME_STAT_USED_POKECENTER + call_if_eq VAR_0x8004, 0, EventScript_PkmnCenterNurse_IllTakeYourPkmn + call_if_eq VAR_0x8004, 1, EventScript_PkmnCenterNurse_IllTakeYourPkmn2 + waitmessage + call EventScript_PkmnCenterNurse_TakeAndHealPkmn + goto_if_unset FLAG_POKERUS_EXPLAINED, EventScript_PkmnCenterNurse_CheckPokerus + goto EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom + end EventScript_PkmnCenterNurse_IllTakeYourPkmn:: - message gText_IllTakeYourPkmn - return + message gText_IllTakeYourPkmn + return EventScript_PkmnCenterNurse_IllTakeYourPkmn2:: - message gText_IllTakeYourPkmn2 - return + message gText_IllTakeYourPkmn2 + return EventScript_PkmnCenterNurse_TakeAndHealPkmn:: - applymovement VAR_0x800B, Common_Movement_WalkInPlaceFastestLeft - waitmovement 0 - dofieldeffect FLDEFF_POKECENTER_HEAL - waitfieldeffect FLDEFF_POKECENTER_HEAL - applymovement VAR_0x800B, Common_Movement_WalkInPlaceFastestDown - waitmovement 0 - special HealPlayerParty - return + applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + dofieldeffect FLDEFF_POKECENTER_HEAL + waitfieldeffect FLDEFF_POKECENTER_HEAL + applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + special HealPlayerParty + return EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom:: - specialvar VAR_RESULT, PlayerNotAtTrainerHillEntrance - compare VAR_RESULT, 0 - goto_if_eq EventScript_PkmnCenterNurse_ReturnPkmn - specialvar VAR_RESULT, BufferUnionRoomPlayerName - copyvar VAR_0x8008, VAR_RESULT - compare VAR_0x8008, 0 - goto_if_eq EventScript_PkmnCenterNurse_ReturnPkmn - compare VAR_0x8008, 1 - goto_if_eq EventScript_PkmnCenterNurse_PlayerWaitingInUnionRoom - end + specialvar VAR_RESULT, PlayerNotAtTrainerHillEntrance + goto_if_eq VAR_RESULT, 0, EventScript_PkmnCenterNurse_ReturnPkmn + specialvar VAR_RESULT, BufferUnionRoomPlayerName + copyvar VAR_0x8008, VAR_RESULT + goto_if_eq VAR_0x8008, 0, EventScript_PkmnCenterNurse_ReturnPkmn + goto_if_eq VAR_0x8008, 1, EventScript_PkmnCenterNurse_PlayerWaitingInUnionRoom + end @ VAR_0x8004 is 1 when player has Gold Card EventScript_PkmnCenterNurse_ReturnPkmn:: - compare VAR_0x8004, 1 - goto_if_eq EventScript_PkmnCenterNurse_ReturnPkmn2 - message gText_RestoredPkmnToFullHealth - waitmessage - applymovement VAR_0x800B, Movement_PkmnCenterNurse_Bow - waitmovement 0 - message gText_WeHopeToSeeYouAgain - return + goto_if_eq VAR_0x8004, 1, EventScript_PkmnCenterNurse_ReturnPkmn2 + message gText_RestoredPkmnToFullHealth + waitmessage + applymovement VAR_0x800B, Movement_PkmnCenterNurse_Bow + waitmovement 0 + message gText_WeHopeToSeeYouAgain + return EventScript_PkmnCenterNurse_ReturnPkmn2:: - message gText_ThankYouForWaiting - waitmessage - applymovement VAR_0x800B, Movement_PkmnCenterNurse_Bow - waitmovement 0 - message gText_WeHopeToSeeYouAgain2 - return + message gText_ThankYouForWaiting + waitmessage + applymovement VAR_0x800B, Movement_PkmnCenterNurse_Bow + waitmovement 0 + message gText_WeHopeToSeeYouAgain2 + return EventScript_PkmnCenterNurse_PlayerWaitingInUnionRoom:: - goto_if_set FLAG_NURSE_UNION_ROOM_REMINDER, EventScript_PkmnCenterNurse_ReturnPkmn - msgbox gText_RestoredPkmnToFullHealth, MSGBOX_DEFAULT - setflag FLAG_NURSE_UNION_ROOM_REMINDER - message CableClub_Text_PlayerIsWaiting - waitmessage - applymovement VAR_0x800B, Movement_PkmnCenterNurse_Bow - waitmovement 0 - message gText_WeHopeToSeeYouAgain - return + goto_if_set FLAG_NURSE_UNION_ROOM_REMINDER, EventScript_PkmnCenterNurse_ReturnPkmn + msgbox gText_RestoredPkmnToFullHealth, MSGBOX_DEFAULT + setflag FLAG_NURSE_UNION_ROOM_REMINDER + message CableClub_Text_PlayerIsWaiting + waitmessage + applymovement VAR_0x800B, Movement_PkmnCenterNurse_Bow + waitmovement 0 + message gText_WeHopeToSeeYouAgain + return EventScript_PkmnCenterNurse_CheckPokerus:: - specialvar VAR_RESULT, IsPokerusInParty - compare VAR_RESULT, TRUE - goto_if_eq EventScript_PkmnCenterNurse_ExplainPokerus - compare VAR_RESULT, FALSE - goto_if_eq EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom - end + specialvar VAR_RESULT, IsPokerusInParty + goto_if_eq VAR_RESULT, TRUE, EventScript_PkmnCenterNurse_ExplainPokerus + goto_if_eq VAR_RESULT, FALSE, EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom + end EventScript_PkmnCenterNurse_ExplainPokerus:: - message gText_PokerusExplanation - setflag FLAG_POKERUS_EXPLAINED - return + message gText_PokerusExplanation + setflag FLAG_POKERUS_EXPLAINED + return EventScript_PkmnCenterNurse_GoldCard:: - goto_if_set FLAG_NURSE_MENTIONS_GOLD_CARD, EventScript_PkmnCenterNurse_AskForUsual - setflag FLAG_NURSE_MENTIONS_GOLD_CARD - msgbox gText_WelcomeCutShort, MSGBOX_DEFAULT - playse SE_PIN - applymovement VAR_0x800B, Common_Movement_ExclamationMark - waitmovement 0 - applymovement VAR_0x800B, Common_Movement_Delay48 - waitmovement 0 - msgbox gText_NoticesGoldCard, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq EventScript_PkmnCenterNurse_GoldCardHealPkmn - message gText_WeHopeToSeeYouAgain2 - return + goto_if_set FLAG_NURSE_MENTIONS_GOLD_CARD, EventScript_PkmnCenterNurse_AskForUsual + setflag FLAG_NURSE_MENTIONS_GOLD_CARD + msgbox gText_WelcomeCutShort, MSGBOX_DEFAULT + playse SE_PIN + applymovement VAR_0x800B, Common_Movement_ExclamationMark + waitmovement 0 + applymovement VAR_0x800B, Common_Movement_Delay48 + waitmovement 0 + msgbox gText_NoticesGoldCard, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, EventScript_PkmnCenterNurse_GoldCardHealPkmn + message gText_WeHopeToSeeYouAgain2 + return EventScript_PkmnCenterNurse_AskForUsual:: - msgbox gText_YouWantTheUsual, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq EventScript_PkmnCenterNurse_GoldCardHealPkmn - message gText_WeHopeToSeeYouAgain2 - return + msgbox gText_YouWantTheUsual, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, EventScript_PkmnCenterNurse_GoldCardHealPkmn + message gText_WeHopeToSeeYouAgain2 + return EventScript_PkmnCenterNurse_GoldCardHealPkmn:: - setvar VAR_0x8004, 1 - goto EventScript_PkmnCenterNurse_HealPkmn - end + setvar VAR_0x8004, 1 + goto EventScript_PkmnCenterNurse_HealPkmn + end Movement_PkmnCenterNurse_Bow: - nurse_joy_bow - delay_4 - step_end + nurse_joy_bow + delay_4 + step_end diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index e7e862039a..caa4e69551 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -11,26 +11,24 @@ PlayersHouse_1F_EventScript_EnterHouseMovingIn:: msgbox PlayersHouse_1F_Text_IsntItNiceInHere, MSGBOX_DEFAULT applymovement VAR_0x8004, Common_Movement_FacePlayer waitmovement 0 - compare VAR_0x8005, MALE - call_if_eq PlayersHouse_1F_EventScript_MomFacePlayerMovingInMale - compare VAR_0x8005, FEMALE - call_if_eq PlayersHouse_1F_EventScript_MomFacePlayerMovingInFemale + call_if_eq VAR_0x8005, MALE, PlayersHouse_1F_EventScript_MomFacePlayerMovingInMale + call_if_eq VAR_0x8005, FEMALE, PlayersHouse_1F_EventScript_MomFacePlayerMovingInFemale msgbox PlayersHouse_1F_Text_MoversPokemonGoSetClock, MSGBOX_DEFAULT closemessage setvar VAR_LITTLEROOT_INTRO_STATE, 4 applymovement OBJ_EVENT_ID_PLAYER, PlayersHouse_1F_Movement_PlayerWalkIn - applymovement VAR_0x8004, Common_Movement_WalkInPlaceFastestUp + applymovement VAR_0x8004, Common_Movement_WalkInPlaceFasterUp waitmovement 0 releaseall end PlayersHouse_1F_EventScript_MomFacePlayerMovingInMale:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return PlayersHouse_1F_EventScript_MomFacePlayerMovingInFemale:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return @@ -41,7 +39,7 @@ PlayersHouse_1F_Movement_PlayerWalkIn: PlayersHouse_1F_EventScript_MomGoSeeRoom:: msgbox PlayersHouse_1F_Text_ArentYouInterestedInRoom, MSGBOX_DEFAULT closemessage - applymovement VAR_0x8004, Common_Movement_WalkInPlaceFastestUp + applymovement VAR_0x8004, Common_Movement_WalkInPlaceFasterUp applymovement OBJ_EVENT_ID_PLAYER, PlayersHouse_1F_Movement_MovePlayerAwayFromDoor waitmovement 0 releaseall @@ -69,10 +67,8 @@ PlayersHouse_2F_EventScript_WallClock:: setflag FLAG_HIDE_LITTLEROOT_TOWN_PLAYERS_HOUSE_VIGOROTH_1 setflag FLAG_HIDE_LITTLEROOT_TOWN_PLAYERS_HOUSE_VIGOROTH_2 checkplayergender - compare VAR_RESULT, MALE - call_if_eq PlayersHouse_2F_EventScript_MomComesUpstairsMale - compare VAR_RESULT, FEMALE - call_if_eq PlayersHouse_2F_EventScript_MomComesUpstairsFemale + call_if_eq VAR_RESULT, MALE, PlayersHouse_2F_EventScript_MomComesUpstairsMale + call_if_eq VAR_RESULT, FEMALE, PlayersHouse_2F_EventScript_MomComesUpstairsFemale playse SE_EXIT removeobject VAR_0x8008 releaseall @@ -83,7 +79,7 @@ PlayersHouse_2F_EventScript_MomComesUpstairsMale:: addobject VAR_0x8008 applymovement VAR_0x8008, PlayersHouse_2F_Movement_MomEntersMale waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox PlayersHouse_2F_Text_HowDoYouLikeYourRoom, MSGBOX_DEFAULT closemessage @@ -96,7 +92,7 @@ PlayersHouse_2F_EventScript_MomComesUpstairsFemale:: addobject VAR_0x8008 applymovement VAR_0x8008, PlayersHouse_2F_Movement_MomEntersFemale waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox PlayersHouse_2F_Text_HowDoYouLikeYourRoom, MSGBOX_DEFAULT closemessage @@ -121,7 +117,7 @@ PlayersHouse_2F_EventScript_SetWallClock:: PlayersHouse_2F_Movement_MomEntersMale: delay_8 walk_down - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 delay_8 walk_left @@ -136,7 +132,7 @@ PlayersHouse_2F_Movement_MomExitsMale: PlayersHouse_2F_Movement_MomEntersFemale: delay_8 walk_down - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 delay_8 walk_right @@ -154,7 +150,7 @@ PlayersHouse_1F_EventScript_SetWatchedBroadcast:: end PlayersHouse_1F_EventScript_PetalburgGymReportMale:: - applymovement VAR_0x8005, Common_Movement_WalkInPlaceFastestRight + applymovement VAR_0x8005, Common_Movement_WalkInPlaceFasterRight waitmovement 0 call PlayersHouse_1F_EventScript_MomNoticeGymBroadcast applymovement OBJ_EVENT_ID_PLAYER, PlayersHouse_1F_Movement_PlayerApproachTVForGymMale @@ -167,7 +163,7 @@ PlayersHouse_1F_EventScript_PetalburgGymReportMale:: applymovement OBJ_EVENT_ID_PLAYER, PlayersHouse_1F_Movement_PlayerMoveToTVMale waitmovement 0 call PlayersHouse_1F_EventScript_WatchGymBroadcast - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 msgbox PlayersHouse_1F_Text_ItsOverWeMissedHim, MSGBOX_DEFAULT msgbox PlayersHouse_1F_Text_GoIntroduceYourselfNextDoor, MSGBOX_DEFAULT @@ -179,7 +175,7 @@ PlayersHouse_1F_EventScript_PetalburgGymReportMale:: end PlayersHouse_1F_EventScript_PetalburgGymReportFemale:: - applymovement VAR_0x8005, Common_Movement_WalkInPlaceFastestLeft + applymovement VAR_0x8005, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 call PlayersHouse_1F_EventScript_MomNoticeGymBroadcast applymovement OBJ_EVENT_ID_PLAYER, PlayersHouse_1F_Movement_PlayerApproachTVForGymFemale @@ -192,7 +188,7 @@ PlayersHouse_1F_EventScript_PetalburgGymReportFemale:: applymovement OBJ_EVENT_ID_PLAYER, PlayersHouse_1F_Movement_PlayerMoveToTVFemale waitmovement 0 call PlayersHouse_1F_EventScript_WatchGymBroadcast - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 msgbox PlayersHouse_1F_Text_ItsOverWeMissedHim, MSGBOX_DEFAULT msgbox PlayersHouse_1F_Text_GoIntroduceYourselfNextDoor, MSGBOX_DEFAULT @@ -214,7 +210,7 @@ PlayersHouse_1F_EventScript_MomNoticeGymBroadcast:: return PlayersHouse_1F_EventScript_WatchGymBroadcast:: - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestUp + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 msgbox PlayersHouse_1F_Text_ReportFromPetalburgGym, MSGBOX_DEFAULT fadedefaultbgm @@ -230,7 +226,7 @@ PlayersHouse_1F_Movement_MomApproachDadMale: walk_right walk_right walk_down - walk_in_place_fastest_right + walk_in_place_faster_right step_end PlayersHouse_1F_Movement_MomApproachDadFemale: @@ -240,7 +236,7 @@ PlayersHouse_1F_Movement_MomApproachDadFemale: walk_left walk_left walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end PlayersHouse_1F_Movement_MomApproachPlayerMale: @@ -252,23 +248,23 @@ PlayersHouse_1F_Movement_MomApproachPlayerFemale: step_end PlayersHouse_1F_Movement_MomNoticesLatiBroadcastMale: - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 delay_16 delay_16 delay_16 - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 delay_16 step_end PlayersHouse_1F_Movement_MomNoticesLatiBroadcastFemale: - walk_in_place_fastest_right + walk_in_place_faster_right delay_16 delay_16 delay_16 delay_16 - walk_in_place_fastest_left + walk_in_place_faster_left delay_16 delay_16 step_end @@ -287,39 +283,35 @@ PlayersHouse_1F_Movement_MomApproachPlayerAfterTVFemale: PlayersHouse_1F_Movement_MomMakeRoomToSeeTVMale: walk_left - walk_in_place_fastest_right + walk_in_place_faster_right step_end PlayersHouse_1F_Movement_MomMakeRoomToSeeTVFemale: walk_right - walk_in_place_fastest_left + walk_in_place_faster_left step_end PlayersHouse_1F_Movement_MomReturnToSeatMale: walk_left walk_down - walk_in_place_fastest_right + walk_in_place_faster_right step_end PlayersHouse_1F_Movement_MomReturnToSeatFemale: walk_right walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end PlayersHouse_1F_EventScript_Mom:: lock faceplayer - compare VAR_LITTLEROOT_HOUSES_STATE_MAY, 4 - goto_if_eq PlayersHouse_1F_EventScript_DontPushYourselfTooHard - compare VAR_LITTLEROOT_HOUSES_STATE_BRENDAN, 4 - goto_if_eq PlayersHouse_1F_EventScript_DontPushYourselfTooHard + goto_if_eq VAR_LITTLEROOT_HOUSES_STATE_MAY, 4, PlayersHouse_1F_EventScript_DontPushYourselfTooHard + goto_if_eq VAR_LITTLEROOT_HOUSES_STATE_BRENDAN, 4, PlayersHouse_1F_EventScript_DontPushYourselfTooHard goto_if_set FLAG_HAS_MATCH_CALL, PlayersHouse_1F_EventScript_TryRegisterMom goto_if_set FLAG_RESCUED_BIRCH, PlayersHouse_1F_EventScript_MomHealsParty - compare VAR_TEMP_1, 1 - goto_if_eq PlayersHouse_1F_EventScript_SeeYouHoney - compare VAR_LITTLEROOT_INTRO_STATE, 7 - goto_if_eq PlayersHouse_1F_EventScript_DidYouMeetProfBirch + goto_if_eq VAR_TEMP_1, 1, PlayersHouse_1F_EventScript_SeeYouHoney + goto_if_eq VAR_LITTLEROOT_INTRO_STATE, 7, PlayersHouse_1F_EventScript_DidYouMeetProfBirch msgbox PlayersHouse_1F_Text_IsntItNiceInHere, MSGBOX_DEFAULT release end @@ -351,8 +343,7 @@ PlayersHouse_1F_EventScript_TryGiveAmuletCoin:: goto_if_set FLAG_RECEIVED_AMULET_COIN, PlayersHouse_1F_EventScript_MomHealsParty msgbox PlayersHouse_1F_Text_GotDadsBadgeHeresSomethingFromMom, MSGBOX_DEFAULT giveitem ITEM_AMULET_COIN - compare VAR_RESULT, FALSE - goto_if_eq Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox PlayersHouse_1F_Text_DontPushYourselfTooHard, MSGBOX_DEFAULT setflag FLAG_RECEIVED_AMULET_COIN release @@ -385,7 +376,7 @@ PlayersHouse_1F_EventScript_Vigoroth1:: lock faceplayer waitse - playmoncry SPECIES_VIGOROTH, 0 + playmoncry SPECIES_VIGOROTH, CRY_MODE_NORMAL msgbox PlayersHouse_1F_Text_Vigoroth1, MSGBOX_DEFAULT waitmoncry release @@ -395,7 +386,7 @@ PlayersHouse_1F_EventScript_Vigoroth2:: lock faceplayer waitse - playmoncry SPECIES_VIGOROTH, 0 + playmoncry SPECIES_VIGOROTH, CRY_MODE_NORMAL msgbox PlayersHouse_1F_Text_Vigoroth2, MSGBOX_DEFAULT waitmoncry release @@ -432,14 +423,10 @@ PlayersHouse_1F_Movement_MovePlayerAwayFromDoor: PlayersHouse_1F_EventScript_GetSSTicketAndSeeLatiTV:: lockall checkplayergender - compare VAR_RESULT, MALE - call_if_eq PlayersHouse_1F_EventScript_SetUpObjectEventVarsMale - compare VAR_RESULT, FEMALE - call_if_eq PlayersHouse_1F_EventScript_SetUpObjectEventVarsFemale - compare VAR_0x8008, MALE - call_if_eq PlayersHouse_1F_EventScript_PlayerEnterRoomMale - compare VAR_0x8008, FEMALE - call_if_eq PlayersHouse_1F_EventScript_PlayerEnterRoomFemale + call_if_eq VAR_RESULT, MALE, PlayersHouse_1F_EventScript_SetUpObjectEventVarsMale + call_if_eq VAR_RESULT, FEMALE, PlayersHouse_1F_EventScript_SetUpObjectEventVarsFemale + call_if_eq VAR_0x8008, MALE, PlayersHouse_1F_EventScript_PlayerEnterRoomMale + call_if_eq VAR_0x8008, FEMALE, PlayersHouse_1F_EventScript_PlayerEnterRoomFemale applymovement VAR_0x8009, Common_Movement_FacePlayer waitmovement 0 playse SE_PIN @@ -448,58 +435,44 @@ PlayersHouse_1F_EventScript_GetSSTicketAndSeeLatiTV:: applymovement VAR_0x8009, Common_Movement_Delay48 waitmovement 0 delay 20 - compare VAR_0x8008, MALE - call_if_eq PlayersHouse_1F_EventScript_DadApproachPlayerMale - compare VAR_0x8008, FEMALE - call_if_eq PlayersHouse_1F_EventScript_DadApproachPlayerFemale + call_if_eq VAR_0x8008, MALE, PlayersHouse_1F_EventScript_DadApproachPlayerMale + call_if_eq VAR_0x8008, FEMALE, PlayersHouse_1F_EventScript_DadApproachPlayerFemale msgbox PlayersHouse_1F_Text_TicketFromBrineyCameForYou, MSGBOX_DEFAULT giveitem ITEM_SS_TICKET msgbox PlayersHouse_1F_Text_PortsInSlateportLilycove, MSGBOX_DEFAULT closemessage delay 20 - compare VAR_0x8008, MALE - call_if_eq PlayersHouse_1F_EventScript_MomApproachDadMale - compare VAR_0x8008, FEMALE - call_if_eq PlayersHouse_1F_EventScript_MomApproachDadFemale + call_if_eq VAR_0x8008, MALE, PlayersHouse_1F_EventScript_MomApproachDadMale + call_if_eq VAR_0x8008, FEMALE, PlayersHouse_1F_EventScript_MomApproachDadFemale msgbox PlayersHouse_1F_Text_BetterGetBackToGym, MSGBOX_DEFAULT closemessage - compare VAR_0x8008, MALE - call_if_eq PlayersHouse_1F_EventScript_DadExitsMale - compare VAR_0x8008, FEMALE - call_if_eq PlayersHouse_1F_EventScript_DadExitsFemale + call_if_eq VAR_0x8008, MALE, PlayersHouse_1F_EventScript_DadExitsMale + call_if_eq VAR_0x8008, FEMALE, PlayersHouse_1F_EventScript_DadExitsFemale playse SE_DOOR removeobject VAR_0x8009 setflag FLAG_RECEIVED_SS_TICKET delay 30 - compare VAR_0x8008, MALE - call_if_eq PlayersHouse_1F_EventScript_MomApproachPlayerMale - compare VAR_0x8008, FEMALE - call_if_eq PlayersHouse_1F_EventScript_MomApproachPlayerFemale + call_if_eq VAR_0x8008, MALE, PlayersHouse_1F_EventScript_MomApproachPlayerMale + call_if_eq VAR_0x8008, FEMALE, PlayersHouse_1F_EventScript_MomApproachPlayerFemale delay 20 msgbox PlayersHouse_1F_Text_DadShouldStayLonger, MSGBOX_DEFAULT closemessage setflag FLAG_SYS_TV_LATIAS_LATIOS special TurnOnTVScreen delay 60 - compare VAR_0x8008, MALE - call_if_eq PlayersHouse_1F_EventScript_MomNoticesLatiBroadcastMale - compare VAR_0x8008, FEMALE - call_if_eq PlayersHouse_1F_EventScript_MomNoticesLatiBroadcastFemale + call_if_eq VAR_0x8008, MALE, PlayersHouse_1F_EventScript_MomNoticesLatiBroadcastMale + call_if_eq VAR_0x8008, FEMALE, PlayersHouse_1F_EventScript_MomNoticesLatiBroadcastFemale msgbox PlayersHouse_1F_Text_IsThatABreakingStory, MSGBOX_DEFAULT closemessage - compare VAR_0x8008, MALE - call_if_eq PlayersHouse_1F_EventScript_PlayerApproachTVForLatiMale - compare VAR_0x8008, FEMALE - call_if_eq PlayersHouse_1F_EventScript_PlayerApproachTVForLatiFemale + call_if_eq VAR_0x8008, MALE, PlayersHouse_1F_EventScript_PlayerApproachTVForLatiMale + call_if_eq VAR_0x8008, FEMALE, PlayersHouse_1F_EventScript_PlayerApproachTVForLatiFemale msgbox PlayersHouse_1F_Text_LatiEmergencyNewsFlash, MSGBOX_DEFAULT closemessage clearflag FLAG_SYS_TV_LATIAS_LATIOS setflag FLAG_LATIOS_OR_LATIAS_ROAMING special TurnOffTVScreen - compare VAR_0x8008, MALE - call_if_eq PlayersHouse_1F_EventScript_MomApproachPlayerAfterTVMale - compare VAR_0x8008, FEMALE - call_if_eq PlayersHouse_1F_EventScript_MomApproachPlayerAfterTVFemale + call_if_eq VAR_0x8008, MALE, PlayersHouse_1F_EventScript_MomApproachPlayerAfterTVMale + call_if_eq VAR_0x8008, FEMALE, PlayersHouse_1F_EventScript_MomApproachPlayerAfterTVFemale msgbox PlayersHouse_1F_Text_WhatColorDidTheySay, MSGBOX_DEFAULT multichoice 22, 8, MULTI_TV_LATI, TRUE copyvar VAR_0x8004, VAR_RESULT @@ -580,28 +553,28 @@ PlayersHouse_1F_EventScript_PlayerEnterRoomFemale:: PlayersHouse_1F_EventScript_PlayerApproachTVForLatiMale:: applymovement OBJ_EVENT_ID_PLAYER, PlayersHouse_1F_Movement_PlayerApproachTVForLatiMale waitmovement 0 - applymovement VAR_0x800A, Common_Movement_WalkInPlaceFastestLeft + applymovement VAR_0x800A, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return PlayersHouse_1F_EventScript_PlayerApproachTVForLatiFemale:: applymovement OBJ_EVENT_ID_PLAYER, PlayersHouse_1F_Movement_PlayerApproachTVForLatiFemale waitmovement 0 - applymovement VAR_0x800A, Common_Movement_WalkInPlaceFastestRight + applymovement VAR_0x800A, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return PlayersHouse_1F_EventScript_MomApproachPlayerMale:: applymovement VAR_0x800A, PlayersHouse_1F_Movement_MomApproachPlayerMale waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return PlayersHouse_1F_EventScript_MomApproachPlayerFemale:: applymovement VAR_0x800A, PlayersHouse_1F_Movement_MomApproachPlayerFemale waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return @@ -618,14 +591,14 @@ PlayersHouse_1F_EventScript_MomNoticesLatiBroadcastFemale:: PlayersHouse_1F_EventScript_MomApproachPlayerAfterTVMale:: applymovement VAR_0x800A, PlayersHouse_1F_Movement_MomApproachPlayerAfterTVMale waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestRight + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight waitmovement 0 return PlayersHouse_1F_EventScript_MomApproachPlayerAfterTVFemale:: applymovement VAR_0x800A, PlayersHouse_1F_Movement_MomApproachPlayerAfterTVFemale waitmovement 0 - applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFastestLeft + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 return @@ -666,14 +639,14 @@ PlayersHouse_1F_Movement_PlayerEnterRoomMale: walk_down walk_down walk_down - walk_in_place_fastest_left + walk_in_place_faster_left step_end PlayersHouse_1F_Movement_MomAndPlayerWatchDadExit: delay_8 delay_16 delay_16 - walk_in_place_fastest_down + walk_in_place_faster_down step_end PlayersHouse_1F_Movement_PlayerEnterRoomFemale: @@ -681,7 +654,7 @@ PlayersHouse_1F_Movement_PlayerEnterRoomFemale: walk_down walk_down walk_down - walk_in_place_fastest_right + walk_in_place_faster_right step_end PlayersHouse_1F_Movement_PlayerApproachTVForLatiMale: @@ -690,7 +663,7 @@ PlayersHouse_1F_Movement_PlayerApproachTVForLatiMale: walk_left walk_left walk_left - walk_in_place_fastest_up + walk_in_place_faster_up step_end PlayersHouse_1F_Movement_PlayerApproachTVForLatiFemale: @@ -699,7 +672,7 @@ PlayersHouse_1F_Movement_PlayerApproachTVForLatiFemale: walk_right walk_right walk_right - walk_in_place_fastest_up + walk_in_place_faster_up step_end EventScript_RunningShoesManual:: diff --git a/data/scripts/prof_birch.inc b/data/scripts/prof_birch.inc index 7eb1730fcd..38a5dfec32 100644 --- a/data/scripts/prof_birch.inc +++ b/data/scripts/prof_birch.inc @@ -1,23 +1,14 @@ ProfBirch_EventScript_UpdateLocation:: - compare VAR_PETALBURG_GYM_STATE, 0 - goto_if_eq Common_EventScript_NopReturn + goto_if_eq VAR_PETALBURG_GYM_STATE, 0, Common_EventScript_NopReturn goto_if_set FLAG_SYS_GAME_CLEAR, ProfBirch_EventScript_MoveToLab - compare VAR_BIRCH_STATE, 0 - call_if_eq ProfBirch_EventScript_MoveToLab - compare VAR_BIRCH_STATE, 1 - call_if_eq ProfBirch_EventScript_MoveToLab - compare VAR_BIRCH_STATE, 2 - call_if_eq ProfBirch_EventScript_MoveToRoute101 - compare VAR_BIRCH_STATE, 3 - call_if_eq ProfBirch_EventScript_MoveToRoute101 - compare VAR_BIRCH_STATE, 4 - call_if_eq ProfBirch_EventScript_MoveToRoute103 - compare VAR_BIRCH_STATE, 5 - call_if_eq ProfBirch_EventScript_MoveToRoute103 - compare VAR_BIRCH_STATE, 6 - call_if_eq ProfBirch_EventScript_MoveToLab - compare VAR_BIRCH_STATE, 7 - call_if_eq ProfBirch_EventScript_MoveToLab + call_if_eq VAR_BIRCH_STATE, 0, ProfBirch_EventScript_MoveToLab + call_if_eq VAR_BIRCH_STATE, 1, ProfBirch_EventScript_MoveToLab + call_if_eq VAR_BIRCH_STATE, 2, ProfBirch_EventScript_MoveToRoute101 + call_if_eq VAR_BIRCH_STATE, 3, ProfBirch_EventScript_MoveToRoute101 + call_if_eq VAR_BIRCH_STATE, 4, ProfBirch_EventScript_MoveToRoute103 + call_if_eq VAR_BIRCH_STATE, 5, ProfBirch_EventScript_MoveToRoute103 + call_if_eq VAR_BIRCH_STATE, 6, ProfBirch_EventScript_MoveToLab + call_if_eq VAR_BIRCH_STATE, 7, ProfBirch_EventScript_MoveToLab return ProfBirch_EventScript_MoveToLab:: @@ -49,8 +40,7 @@ ProfBirch_EventScript_RatePokedexOrRegister:: ProfBirch_EventScript_AskRatePokedex:: msgbox gBirchDexRatingText_AreYouCurious, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq ProfBirch_EventScript_DeclineRating + goto_if_eq VAR_RESULT, NO, ProfBirch_EventScript_DeclineRating call ProfBirch_EventScript_RatePokedex release end @@ -73,17 +63,16 @@ ProfBirch_EventScript_RatePokedex:: copyvar VAR_0x8008, VAR_0x8005 copyvar VAR_0x8009, VAR_0x8006 copyvar VAR_0x800A, VAR_RESULT - buffernumberstring 0, VAR_0x8008 @ Num Hoenn seen - buffernumberstring 1, VAR_0x8009 @ Num Hoenn caught + buffernumberstring STR_VAR_1, VAR_0x8008 @ Num Hoenn seen + buffernumberstring STR_VAR_2, VAR_0x8009 @ Num Hoenn caught msgbox gBirchDexRatingText_SoYouveSeenAndCaught, MSGBOX_DEFAULT call ProfBirch_EventScript_ShowRatingMessage - compare VAR_0x800A, 0 - goto_if_eq Common_EventScript_NopReturn @ National dex not enabled + goto_if_eq VAR_0x800A, 0, Common_EventScript_NopReturn @ National dex not enabled setvar VAR_0x8004, 1 specialvar VAR_RESULT, ScriptGetPokedexInfo copyvar VAR_0x8008, VAR_0x8005 copyvar VAR_0x8009, VAR_0x8006 - buffernumberstring 0, VAR_0x8008 @ Num National seen - buffernumberstring 1, VAR_0x8009 @ Num National caught + buffernumberstring STR_VAR_1, VAR_0x8008 @ Num National seen + buffernumberstring STR_VAR_2, VAR_0x8009 @ Num National caught msgbox gBirchDexRatingText_OnANationwideBasis, MSGBOX_DEFAULT return diff --git a/data/scripts/profile_man.inc b/data/scripts/profile_man.inc new file mode 100644 index 0000000000..4acf049bd8 --- /dev/null +++ b/data/scripts/profile_man.inc @@ -0,0 +1,166 @@ +ProfileMan_EventScript_Man:: + lock + faceplayer + goto_if_set FLAG_SYS_CHAT_USED, ProfileMan_EventScript_GivenProfileBefore + msgbox ProfileMan_Text_CollectTrainerProfiles, MSGBOX_DEFAULT + goto ProfileMan_EventScript_AskToSeeProfile + end + +ProfileMan_EventScript_AskToSeeProfile:: + msgbox ProfileMan_Text_MayISeeYourProfile, MSGBOX_DEFAULT + multichoice 17, 6, MULTI_YESNOINFO_2, FALSE + switch VAR_RESULT + case 0, ProfileMan_EventScript_CreateProfile + case 1, ProfileMan_EventScript_DeclineShowProfile + case 2, ProfileMan_EventScript_Info + case MULTI_B_PRESSED, ProfileMan_EventScript_DeclineShowProfile + end + +ProfileMan_EventScript_Info:: + msgbox ProfileMan_Text_EasyChatExplanation, MSGBOX_DEFAULT + goto ProfileMan_EventScript_AskToSeeProfile + end + +ProfileMan_EventScript_CreateProfile:: + msgbox ProfileMan_Text_LetsSeeItThen, MSGBOX_DEFAULT + closemessage + setvar VAR_0x8004, EASY_CHAT_TYPE_PROFILE + call Common_ShowEasyChatScreen + lock + faceplayer + goto_if_eq VAR_RESULT, 0, ProfileMan_EventScript_CancelShowProfile + goto_if_eq VAR_RESULT, 1, ProfileMan_EventScript_ShowProfile + end + +ProfileMan_EventScript_CancelShowProfile:: + msgbox ProfileMan_Text_NotIntoItRightNow, MSGBOX_DEFAULT + release + end + +ProfileMan_EventScript_ShowProfile:: + setvar VAR_0x8004, 0 + special ShowEasyChatProfile + waitmessage + delay 80 + msgbox ProfileMan_Text_FantasticProfile, MSGBOX_DEFAULT + release + end + +ProfileMan_EventScript_DeclineShowProfile:: + msgbox ProfileMan_Text_ImagineYouWouldHaveWonderfulProfile, MSGBOX_DEFAULT + release + end + +ProfileMan_EventScript_GivenProfileBefore:: + msgbox ProfileMan_Text_YouHaveWonderfulSmile, MSGBOX_DEFAULT + goto ProfileMan_EventScript_AskToSeeNewProfile + end + +ProfileMan_EventScript_AskToSeeNewProfile:: + msgbox ProfileMan_Text_MayISeeYourNewProfile, MSGBOX_DEFAULT + multichoice 17, 6, MULTI_YESNOINFO_2, FALSE + switch VAR_RESULT + case 0, ProfileMan_EventScript_CreateNewProfile + case 1, ProfileMan_EventScript_DeclineNewProfile + case 2, ProfileMan_EventScript_InfoNewProfile + case MULTI_B_PRESSED, ProfileMan_EventScript_DeclineNewProfile + end + +ProfileMan_EventScript_InfoNewProfile:: + msgbox ProfileMan_Text_EasyChatExplanation, MSGBOX_DEFAULT + goto ProfileMan_EventScript_AskToSeeNewProfile + end + +ProfileMan_EventScript_CreateNewProfile:: + msgbox ProfileMan_Text_EvenBetterThanLastProfile, MSGBOX_DEFAULT + closemessage + setvar VAR_0x8004, EASY_CHAT_TYPE_PROFILE + call Common_ShowEasyChatScreen + lock + faceplayer + goto_if_eq VAR_RESULT, 0, ProfileMan_EventScript_CancelShowProfile + goto_if_eq VAR_RESULT, 1, ProfileMan_EventScript_ShowProfile + end + +ProfileMan_EventScript_DeclineNewProfile:: + msgbox ProfileMan_Text_LikeProfileWayItIs, MSGBOX_DEFAULT + release + end + +@ Unused +ProfileMan_EventScript_Ret:: + return + +ProfileMan_Text_CollectTrainerProfiles: + .string "Hello there, TRAINER!\n" + .string "You've got a wonderful smile, there.\p" + .string "I have a hobby--collecting the profiles\n" + .string "of POKéMON TRAINERS.$" + +ProfileMan_Text_MayISeeYourProfile: + .string "So, how about it?\n" + .string "May I see your profile?$" + +ProfileMan_Text_EasyChatExplanation: + .string "You make your own profile by putting\n" + .string "together four words or phrases.\p" + .string "Here, I'll show you an example of a\n" + .string "profile using four pieces of text.\p" + .string "You can switch those four pieces with\n" + .string "other text pieces any which way you\l" + .string "like to make your own profile.\p" + .string "There are a lot of text pieces that\n" + .string "you can use.\p" + .string "They are arranged in groups like\n" + .string "POKéMON, lifestyles, and hobbies so\l" + .string "it is easier to look them up.\p" + .string "So, first, choose the group of text\n" + .string "pieces to display a list of choices.\p" + .string "Then, pick the choice you want.\p" + .string "Repeat for the remaining text choices,\n" + .string "and you'll have your very own profile.$" + +ProfileMan_Text_LetsSeeItThen: + .string "Yes! Thank you!\n" + .string "So, let's see it, then.$" + +ProfileMan_Text_ImagineYouWouldHaveWonderfulProfile: + .string "Oh, no, really?\p" + .string "I imagine someone like you would have\n" + .string "a wonderful profile…$" + +ProfileMan_Text_NotIntoItRightNow: + .string "Oh? You're not into it right now?\p" + .string "Well, anytime is good by me!$" + +ProfileMan_Text_YouHaveWonderfulSmile: + .string "Hello there, TRAINER!\n" + .string "You've got a wonderful smile.$" + +ProfileMan_Text_MayISeeYourNewProfile: + .string "May I see your new profile?$" + +ProfileMan_Text_EvenBetterThanLastProfile: + .string "Yes! Thank you!\p" + .string "I hope it's even better than the profile\n" + .string "you showed me before.$" + +ProfileMan_Text_LikeProfileWayItIs: + .string "Oh, you like your profile the way it is.\p" + .string "I don't blame you--it's a wonderful\n" + .string "profile the way it is now.$" + +ProfileMan_Text_FantasticProfile: + .string "F-fantastic!\p" + .string "Your profile, it's wonderful!\n" + .string "It really says what you're about.\p" + .string "Why, anyone hearing this profile would\n" + .string "be captivated by you!\p" + .string "Thank you!$" + +@ Unused +ProfileMan_Text_YouKnowSecretSaying: + .string "Oh?\n" + .string "You know the secret saying!\p" + .string "That means you're now a fellow member\n" + .string "of the MYSTERY EVENT CLUB!$" diff --git a/data/scripts/questionnaire.inc b/data/scripts/questionnaire.inc new file mode 100644 index 0000000000..849b25a46a --- /dev/null +++ b/data/scripts/questionnaire.inc @@ -0,0 +1,57 @@ +EventScript_Questionnaire:: + lockall + msgbox Questionnaire_Text_FillOut, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Questionnaire_EventScript_Release + setvar VAR_0x8004, EASY_CHAT_TYPE_QUESTIONNAIRE + call Common_ShowEasyChatScreen + lock + faceplayer + specialvar VAR_0x8008, GetMartEmployeeObjectEventId + goto_if_eq VAR_0x8004, 1, Questionnaire_EventScript_PlayerInputMysteryEventPhrase + goto_if_eq VAR_0x8004, 2, Questionnaire_EventScript_PlayerInputMysteryGiftPhrase + goto_if_eq VAR_RESULT, 0, Questionnaire_EventScript_Release + goto_if_eq VAR_RESULT, 1, Questionnaire_EventScript_ThankYou + end + +Questionnaire_EventScript_PlayerInputMysteryEventPhrase:: + goto_if_unset FLAG_SYS_POKEDEX_GET, Questionnaire_EventScript_ThankYou + goto_if_set FLAG_SYS_MYSTERY_EVENT_ENABLE, Questionnaire_EventScript_ThankYou + applymovement VAR_0x8008, Common_Movement_FaceDown + waitmovement 0 + playse SE_PIN + applymovement VAR_0x8008, Common_Movement_ExclamationMark + waitmovement 0 + applymovement VAR_0x8008, Common_Movement_Delay48 + waitmovement 0 + msgbox Questionnaire_Text_YouKnowThoseWordsEvent, MSGBOX_DEFAULT + setflag FLAG_SYS_MYSTERY_EVENT_ENABLE + msgbox Questionnaire_Text_YouCanAccessMysteryEvent, MSGBOX_DEFAULT + releaseall + end + +Questionnaire_EventScript_PlayerInputMysteryGiftPhrase:: + goto_if_unset FLAG_SYS_POKEDEX_GET, Questionnaire_EventScript_ThankYou + goto_if_set FLAG_SYS_MYSTERY_GIFT_ENABLE, Questionnaire_EventScript_ThankYou + applymovement VAR_0x8008, Common_Movement_FaceDown + waitmovement 0 + playse SE_PIN + applymovement VAR_0x8008, Common_Movement_ExclamationMark + waitmovement 0 + applymovement VAR_0x8008, Common_Movement_Delay48 + waitmovement 0 + msgbox Questionnaire_Text_YouKnowThoseWordsGift, MSGBOX_DEFAULT + setflag FLAG_SYS_MYSTERY_GIFT_ENABLE + msgbox Questionnaire_Text_YouCanAccessMysteryGift, MSGBOX_DEFAULT + releaseall + end + +Questionnaire_EventScript_Release:: + releaseall + end + +Questionnaire_EventScript_ThankYou:: + applymovement VAR_0x8008, Common_Movement_FaceDown + waitmovement 0 + msgbox Questionnaire_Text_ThankYou, MSGBOX_DEFAULT + releaseall + end diff --git a/data/scripts/record_mix.inc b/data/scripts/record_mix.inc index d1ad84d3a7..109fde2a80 100644 --- a/data/scripts/record_mix.inc +++ b/data/scripts/record_mix.inc @@ -3,10 +3,8 @@ EventScript_MixRecordsPrompt:: lock faceplayer msgbox Text_WouldYouLikeToMixRecords, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq EventScript_MixRecords - compare VAR_RESULT, NO - goto_if_eq EventScript_EndMixRecords + goto_if_eq VAR_RESULT, YES, EventScript_MixRecords + goto_if_eq VAR_RESULT, NO, EventScript_EndMixRecords goto EventScript_EndMixRecords EventScript_MixRecords:: diff --git a/data/scripts/rival_graphics.inc b/data/scripts/rival_graphics.inc index a0fb15f0e4..26a5c8fbcf 100644 --- a/data/scripts/rival_graphics.inc +++ b/data/scripts/rival_graphics.inc @@ -1,9 +1,7 @@ Common_EventScript_SetupRivalGfxId:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq EventScript_SetupRivalGfxIdFemale - compare VAR_RESULT, FEMALE - goto_if_eq EventScript_SetupRivalGfxIdMale + goto_if_eq VAR_RESULT, MALE, EventScript_SetupRivalGfxIdFemale + goto_if_eq VAR_RESULT, FEMALE, EventScript_SetupRivalGfxIdMale end EventScript_SetupRivalGfxIdFemale:: @@ -16,10 +14,8 @@ EventScript_SetupRivalGfxIdMale:: Common_EventScript_SetupRivalOnBikeGfxId:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq EventScript_SetupRivalOnBikeGfxIdFemale - compare VAR_RESULT, FEMALE - goto_if_eq EventScript_SetupRivalOnBikeGfxIdMale + goto_if_eq VAR_RESULT, MALE, EventScript_SetupRivalOnBikeGfxIdFemale + goto_if_eq VAR_RESULT, FEMALE, EventScript_SetupRivalOnBikeGfxIdMale end EventScript_SetupRivalOnBikeGfxIdFemale:: @@ -33,10 +29,8 @@ EventScript_SetupRivalOnBikeGfxIdMale:: @ Unused Common_EventScript_SetupRivalGfxIdSameGender:: checkplayergender - compare VAR_RESULT, MALE - goto_if_eq EventScript_SetupRivalGfxIdMale2 - compare VAR_RESULT, FEMALE - goto_if_eq EventScript_SetupRivalGfxIdFemale2 + goto_if_eq VAR_RESULT, MALE, EventScript_SetupRivalGfxIdMale2 + goto_if_eq VAR_RESULT, FEMALE, EventScript_SetupRivalGfxIdFemale2 end EventScript_SetupRivalGfxIdMale2:: diff --git a/data/scripts/roulette.inc b/data/scripts/roulette.inc index 1167a765bd..7163a449aa 100644 --- a/data/scripts/roulette.inc +++ b/data/scripts/roulette.inc @@ -1,23 +1,19 @@ Roulette_EventScript_Table1:: - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 0 - getpricereduction POKENEWS_GAME_CORNER - compare VAR_RESULT, FALSE - goto_if_eq Roulette_EventScript_Play + getpokenewsactive POKENEWS_GAME_CORNER + goto_if_eq VAR_RESULT, FALSE, Roulette_EventScript_Play addvar VAR_0x8004, ROULETTE_SPECIAL_RATE goto Roulette_EventScript_Play end Roulette_EventScript_Table2:: - checkitem ITEM_COIN_CASE, 1 - compare VAR_RESULT, FALSE - goto_if_eq MauvilleCity_GameCorner_EventScript_NoCoinCase + checkitem ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoCoinCase setvar VAR_0x8004, 1 - getpricereduction POKENEWS_GAME_CORNER - compare VAR_RESULT, FALSE - goto_if_eq Roulette_EventScript_Play + getpokenewsactive POKENEWS_GAME_CORNER + goto_if_eq VAR_RESULT, FALSE, Roulette_EventScript_Play addvar VAR_0x8004, ROULETTE_SPECIAL_RATE goto Roulette_EventScript_Play end diff --git a/data/scripts/safari_zone.inc b/data/scripts/safari_zone.inc index 6dd0767f0c..eb6a90abdf 100644 --- a/data/scripts/safari_zone.inc +++ b/data/scripts/safari_zone.inc @@ -1,21 +1,20 @@ SafariZone_EventScript_OutOfBallsMidBattle:: setvar VAR_SAFARI_ZONE_STATE, 1 special ExitSafariMode - setwarp MAP_ROUTE121_SAFARI_ZONE_ENTRANCE, 255, 2, 5 + setwarp MAP_ROUTE121_SAFARI_ZONE_ENTRANCE, 2, 5 end SafariZone_EventScript_Exit:: setvar VAR_SAFARI_ZONE_STATE, 1 special ExitSafariMode - warp MAP_ROUTE121_SAFARI_ZONE_ENTRANCE, 255, 2, 5 + warp MAP_ROUTE121_SAFARI_ZONE_ENTRANCE, 2, 5 waitstate end SafariZone_EventScript_RetirePrompt:: lockall msgbox SafariZone_Text_WouldYouLikeToExit, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SafariZone_EventScript_Retire + goto_if_eq VAR_RESULT, YES, SafariZone_EventScript_Retire releaseall end @@ -43,11 +42,9 @@ SafariZone_EventScript_OutOfBalls:: EventScript_PokeBlockFeeder:: lockall special GetPokeblockFeederInFront - compare VAR_RESULT, 0xFFFF - goto_if_ne SafariZone_EventScript_PokeblockPresent + goto_if_ne VAR_RESULT, 0xFFFF, SafariZone_EventScript_PokeblockPresent msgbox SafariZone_Text_PlacePokeblockOnFeeder, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SafariZone_EventScript_ChoosePokeblock + goto_if_eq VAR_RESULT, YES, SafariZone_EventScript_ChoosePokeblock releaseall end @@ -55,8 +52,7 @@ SafariZone_EventScript_ChoosePokeblock:: fadescreen FADE_TO_BLACK special OpenPokeblockCaseOnFeeder waitstate - compare VAR_RESULT, 0xFFFF - goto_if_ne SafariZone_EventScript_PokeblockPlaced + goto_if_ne VAR_RESULT, 0xFFFF, SafariZone_EventScript_PokeblockPlaced end SafariZone_EventScript_PokeblockPlaced:: diff --git a/data/scripts/secret_base.inc b/data/scripts/secret_base.inc index ae802cdfd2..918a9d6301 100644 --- a/data/scripts/secret_base.inc +++ b/data/scripts/secret_base.inc @@ -27,33 +27,24 @@ SecretBase_Text_DiscoveredSmallEntrance: SecretBase_EventScript_CheckEntrance:: special GetSecretBaseTypeInFrontOfPlayer special CheckPlayerHasSecretBase - compare VAR_RESULT, TRUE - goto_if_eq SecretBase_EventScript_AlreadyHasSecretBase + goto_if_eq VAR_RESULT, TRUE, SecretBase_EventScript_AlreadyHasSecretBase checkpartymove MOVE_SECRET_POWER setfieldeffectargument 0, VAR_RESULT - buffermovename 1, MOVE_SECRET_POWER - compare VAR_0x8007, SECRET_BASE_RED_CAVE - goto_if_eq SecretBase_EventScript_Cave - compare VAR_0x8007, SECRET_BASE_BROWN_CAVE - goto_if_eq SecretBase_EventScript_Cave - compare VAR_0x8007, SECRET_BASE_BLUE_CAVE - goto_if_eq SecretBase_EventScript_Cave - compare VAR_0x8007, SECRET_BASE_YELLOW_CAVE - goto_if_eq SecretBase_EventScript_Cave - compare VAR_0x8007, SECRET_BASE_TREE - goto_if_eq SecretBase_EventScript_Tree - compare VAR_0x8007, SECRET_BASE_SHRUB - goto_if_eq SecretBase_EventScript_Shrub + buffermovename STR_VAR_2, MOVE_SECRET_POWER + goto_if_eq VAR_0x8007, SECRET_BASE_RED_CAVE, SecretBase_EventScript_Cave + goto_if_eq VAR_0x8007, SECRET_BASE_BROWN_CAVE, SecretBase_EventScript_Cave + goto_if_eq VAR_0x8007, SECRET_BASE_BLUE_CAVE, SecretBase_EventScript_Cave + goto_if_eq VAR_0x8007, SECRET_BASE_YELLOW_CAVE, SecretBase_EventScript_Cave + goto_if_eq VAR_0x8007, SECRET_BASE_TREE, SecretBase_EventScript_Tree + goto_if_eq VAR_0x8007, SECRET_BASE_SHRUB, SecretBase_EventScript_Shrub end SecretBase_EventScript_Cave:: lockall - compare VAR_RESULT, PARTY_SIZE - goto_if_eq SecretBase_EventScript_CaveNoSecretPower - bufferpartymonnick 0, VAR_RESULT + goto_if_eq VAR_RESULT, PARTY_SIZE, SecretBase_EventScript_CaveNoSecretPower + bufferpartymonnick STR_VAR_1, VAR_RESULT msgbox SecretBase_Text_IndentUseSecretPower, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_CancelOnEntrance + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_CancelOnEntrance msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT closemessage dofieldeffect FLDEFF_USE_SECRET_POWER_CAVE @@ -80,12 +71,10 @@ SecretBase_EventScript_CaveEnter:: SecretBase_EventScript_Tree:: lockall - compare VAR_RESULT, PARTY_SIZE - goto_if_eq SecretBase_EventScript_TreeNoSecretPower - bufferpartymonnick 0, VAR_RESULT + goto_if_eq VAR_RESULT, PARTY_SIZE, SecretBase_EventScript_TreeNoSecretPower + bufferpartymonnick STR_VAR_1, VAR_RESULT msgbox SecretBase_Text_TreeUseSecretPower, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_CancelOnEntrance + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_CancelOnEntrance msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT closemessage dofieldeffect FLDEFF_USE_SECRET_POWER_TREE @@ -112,12 +101,10 @@ SecretBase_EventScript_TreeEnter:: SecretBase_EventScript_Shrub:: lockall - compare VAR_RESULT, PARTY_SIZE - goto_if_eq SecretBase_EventScript_ShrubNoSecretPower - bufferpartymonnick 0, VAR_RESULT + goto_if_eq VAR_RESULT, PARTY_SIZE, SecretBase_EventScript_ShrubNoSecretPower + bufferpartymonnick STR_VAR_1, VAR_RESULT msgbox SecretBase_Text_ClumpUseSecretPower, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_CancelOnEntrance + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_CancelOnEntrance msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT closemessage dofieldeffect FLDEFF_USE_SECRET_POWER_SHRUB @@ -146,7 +133,7 @@ SecretBase_EventScript_InitSecretBase:: closemessage playse SE_EXIT setvar VAR_INIT_SECRET_BASE, 0 - setflag FLAG_DECORATION_0 + setflag FLAG_HIDE_SECRET_BASE_TRAINER special SetPlayerSecretBase special EnterSecretBase setvar VAR_0x8004, 0 @@ -161,8 +148,7 @@ SecretBase_EventScript_FirstEntrance:: waitmovement 0 setvar VAR_INIT_SECRET_BASE, 1 msgbox SecretBase_Text_WantToMakeYourSecretBaseHere, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq SecretBase_EventScript_SetAsBase + goto_if_eq VAR_RESULT, YES, SecretBase_EventScript_SetAsBase closemessage playse SE_EXIT special ClearAndLeaveSecretBase @@ -185,16 +171,15 @@ SecretBase_EventScript_Enter:: setvar VAR_INIT_SECRET_BASE, 1 playse SE_EXIT special IsCurSecretBaseOwnedByAnotherPlayer - compare VAR_RESULT, FALSE - goto_if_eq SecretBase_EventScript_EnterPlayersBase - clearflag FLAG_DECORATION_0 + goto_if_eq VAR_RESULT, FALSE, SecretBase_EventScript_EnterPlayersBase + clearflag FLAG_HIDE_SECRET_BASE_TRAINER special EnterSecretBase setvar VAR_SECRET_BASE_INITIALIZED, 0 waitstate end SecretBase_EventScript_EnterPlayersBase:: - setflag FLAG_DECORATION_0 + setflag FLAG_HIDE_SECRET_BASE_TRAINER special EnterSecretBase setvar VAR_SECRET_BASE_INITIALIZED, 0 waitstate @@ -202,59 +187,43 @@ SecretBase_EventScript_EnterPlayersBase:: SecretBase_EventScript_AlreadyHasSecretBase:: checkpartymove MOVE_SECRET_POWER - compare VAR_RESULT, PARTY_SIZE - goto_if_eq SecretBase_EventScript_NoSecretPower + goto_if_eq VAR_RESULT, PARTY_SIZE, SecretBase_EventScript_NoSecretPower setfieldeffectargument 0, VAR_RESULT setorcopyvar VAR_0x8004, VAR_RESULT lockall special GetSecretBaseNearbyMapName msgbox SecretBase_Text_WouldYouLikeToMoveBases, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_CancelOnEntrance + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_CancelOnEntrance msgbox SecretBase_Text_AllDecorationsWillBeReturned, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_CancelOnEntrance + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_CancelOnEntrance fadescreenswapbuffers FADE_TO_BLACK special MoveOutOfSecretBaseFromOutside closemessage fadescreenswapbuffers FADE_FROM_BLACK msgbox SecretBase_Text_MovingCompletedUseSecretPower, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_CancelOnEntrance - bufferpartymonnick 0, VAR_0x8004 - buffermovename 1, MOVE_SECRET_POWER + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_CancelOnEntrance + bufferpartymonnick STR_VAR_1, VAR_0x8004 + buffermovename STR_VAR_2, MOVE_SECRET_POWER msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT closemessage closemessage - compare VAR_0x8007, SECRET_BASE_RED_CAVE - goto_if_eq SecretBase_EventScript_CaveUseSecretPower - compare VAR_0x8007, SECRET_BASE_BROWN_CAVE - goto_if_eq SecretBase_EventScript_CaveUseSecretPower - compare VAR_0x8007, SECRET_BASE_BLUE_CAVE - goto_if_eq SecretBase_EventScript_CaveUseSecretPower - compare VAR_0x8007, SECRET_BASE_YELLOW_CAVE - goto_if_eq SecretBase_EventScript_CaveUseSecretPower - compare VAR_0x8007, SECRET_BASE_TREE - goto_if_eq SecretBase_EventScript_TreeUseSecretPower - compare VAR_0x8007, SECRET_BASE_SHRUB - goto_if_eq SecretBase_EventScript_ShrubUseSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_RED_CAVE, SecretBase_EventScript_CaveUseSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_BROWN_CAVE, SecretBase_EventScript_CaveUseSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_BLUE_CAVE, SecretBase_EventScript_CaveUseSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_YELLOW_CAVE, SecretBase_EventScript_CaveUseSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_TREE, SecretBase_EventScript_TreeUseSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_SHRUB, SecretBase_EventScript_ShrubUseSecretPower releaseall end SecretBase_EventScript_NoSecretPower:: lockall - compare VAR_0x8007, SECRET_BASE_RED_CAVE - goto_if_eq SecretBase_EventScript_CaveNoSecretPower - compare VAR_0x8007, SECRET_BASE_BROWN_CAVE - goto_if_eq SecretBase_EventScript_CaveNoSecretPower - compare VAR_0x8007, SECRET_BASE_BLUE_CAVE - goto_if_eq SecretBase_EventScript_CaveNoSecretPower - compare VAR_0x8007, SECRET_BASE_YELLOW_CAVE - goto_if_eq SecretBase_EventScript_CaveNoSecretPower - compare VAR_0x8007, SECRET_BASE_TREE - goto_if_eq SecretBase_EventScript_TreeNoSecretPower - compare VAR_0x8007, SECRET_BASE_SHRUB - goto_if_eq SecretBase_EventScript_ShrubNoSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_RED_CAVE, SecretBase_EventScript_CaveNoSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_BROWN_CAVE, SecretBase_EventScript_CaveNoSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_BLUE_CAVE, SecretBase_EventScript_CaveNoSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_YELLOW_CAVE, SecretBase_EventScript_CaveNoSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_TREE, SecretBase_EventScript_TreeNoSecretPower + goto_if_eq VAR_0x8007, SECRET_BASE_SHRUB, SecretBase_EventScript_ShrubNoSecretPower end SecretBase_EventScript_CancelOnEntrance:: @@ -302,11 +271,9 @@ SecretBase_EventScript_PutAwayDecoration:: SecretBase_EventScript_PutAwayDecorationLoop:: special PutAwayDecorationIteration - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_PutAwayDecorationEnd + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_PutAwayDecorationEnd addvar VAR_0x8004, 1 - compare VAR_0x8005, 0 - goto_if_eq SecretBase_EventScript_PutAwayDecorationLoop + goto_if_eq VAR_0x8005, 0, SecretBase_EventScript_PutAwayDecorationLoop removeobject VAR_0x8006 setflag VAR_0x8005 @ UB: VAR_0x8005 is set to a flag by PutAwayDecorationIteration, but ScrCmd_setflag doesn't use VarGet goto SecretBase_EventScript_PutAwayDecorationLoop @@ -317,26 +284,16 @@ SecretBase_EventScript_PutAwayDecorationEnd:: SecretBase_EventScript_RecordMixTrainer:: special GetSecretBaseOwnerAndState - compare VAR_0x8004, 0 - goto_if_eq SecretBase_EventScript_Trainer0 - compare VAR_0x8004, 1 - goto_if_eq SecretBase_EventScript_Trainer1 - compare VAR_0x8004, 2 - goto_if_eq SecretBase_EventScript_Trainer2 - compare VAR_0x8004, 3 - goto_if_eq SecretBase_EventScript_Trainer3 - compare VAR_0x8004, 4 - goto_if_eq SecretBase_EventScript_Trainer4 - compare VAR_0x8004, 5 - goto_if_eq SecretBase_EventScript_Trainer5 - compare VAR_0x8004, 6 - goto_if_eq SecretBase_EventScript_Trainer6 - compare VAR_0x8004, 7 - goto_if_eq SecretBase_EventScript_Trainer7 - compare VAR_0x8004, 8 - goto_if_eq SecretBase_EventScript_Trainer8 - compare VAR_0x8004, 9 - goto_if_eq SecretBase_EventScript_Trainer9 + goto_if_eq VAR_0x8004, 0, SecretBase_EventScript_Trainer0 + goto_if_eq VAR_0x8004, 1, SecretBase_EventScript_Trainer1 + goto_if_eq VAR_0x8004, 2, SecretBase_EventScript_Trainer2 + goto_if_eq VAR_0x8004, 3, SecretBase_EventScript_Trainer3 + goto_if_eq VAR_0x8004, 4, SecretBase_EventScript_Trainer4 + goto_if_eq VAR_0x8004, 5, SecretBase_EventScript_Trainer5 + goto_if_eq VAR_0x8004, 6, SecretBase_EventScript_Trainer6 + goto_if_eq VAR_0x8004, 7, SecretBase_EventScript_Trainer7 + goto_if_eq VAR_0x8004, 8, SecretBase_EventScript_Trainer8 + goto_if_eq VAR_0x8004, 9, SecretBase_EventScript_Trainer9 end @ VAR_RESULT is initially set by GetSecretBaseOwnerAndState @@ -344,16 +301,13 @@ SecretBase_EventScript_Trainer0:: lock faceplayer goto_if_unset FLAG_SYS_GAME_CLEAR, SecretBase_EventScript_Trainer0PreChampion - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_Trainer0PostBattle + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_Trainer0PostBattle msgbox SecretBase_Text_Trainer0Intro, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_Trainer0DeclineBattle + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_Trainer0DeclineBattle setvar VAR_RESULT, 1 special SetBattledOwnerFromResult call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_Trainer0DeclineBattle + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_Trainer0DeclineBattle msgbox SecretBase_Text_Trainer0AcceptBattle, MSGBOX_DEFAULT goto SecretBase_EventScript_BattleTrainer end @@ -381,16 +335,13 @@ SecretBase_EventScript_Trainer1:: lock faceplayer goto_if_unset FLAG_SYS_GAME_CLEAR, SecretBase_EventScript_Trainer1PreChampion - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_Trainer1PostBattle + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_Trainer1PostBattle msgbox SecretBase_Text_Trainer1Intro, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_Trainer1DeclineBattle + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_Trainer1DeclineBattle setvar VAR_RESULT, 1 special SetBattledOwnerFromResult call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_Trainer1DeclineBattle + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_Trainer1DeclineBattle msgbox SecretBase_Text_Trainer1AcceptBattle, MSGBOX_DEFAULT goto SecretBase_EventScript_BattleTrainer end @@ -418,16 +369,13 @@ SecretBase_EventScript_Trainer2:: lock faceplayer goto_if_unset FLAG_SYS_GAME_CLEAR, SecretBase_EventScript_Trainer2PreChampion - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_Trainer2PostBattle + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_Trainer2PostBattle msgbox SecretBase_Text_Trainer2Intro, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_Trainer2DeclineBattle + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_Trainer2DeclineBattle setvar VAR_RESULT, 1 special SetBattledOwnerFromResult call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_Trainer2DeclineBattle + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_Trainer2DeclineBattle msgbox SecretBase_Text_Trainer2AcceptBattle, MSGBOX_DEFAULT goto SecretBase_EventScript_BattleTrainer end @@ -455,16 +403,13 @@ SecretBase_EventScript_Trainer3:: lock faceplayer goto_if_unset FLAG_SYS_GAME_CLEAR, SecretBase_EventScript_Trainer3PreChampion - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_Trainer3PostBattle + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_Trainer3PostBattle msgbox SecretBase_Text_Trainer3Intro, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_Trainer3DeclineBattle + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_Trainer3DeclineBattle setvar VAR_RESULT, 1 special SetBattledOwnerFromResult call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_Trainer3DeclineBattle + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_Trainer3DeclineBattle msgbox SecretBase_Text_Trainer3AcceptBattle, MSGBOX_DEFAULT goto SecretBase_EventScript_BattleTrainer end @@ -492,16 +437,13 @@ SecretBase_EventScript_Trainer4:: lock faceplayer goto_if_unset FLAG_SYS_GAME_CLEAR, SecretBase_EventScript_Trainer4PreChampion - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_Trainer4PostBattle + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_Trainer4PostBattle msgbox SecretBase_Text_Trainer4Intro, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_Trainer4DeclineBattle + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_Trainer4DeclineBattle setvar VAR_RESULT, 1 special SetBattledOwnerFromResult call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_Trainer4DeclineBattle + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_Trainer4DeclineBattle msgbox SecretBase_Text_Trainer4AcceptBattle, MSGBOX_DEFAULT goto SecretBase_EventScript_BattleTrainer end @@ -529,16 +471,13 @@ SecretBase_EventScript_Trainer5:: lock faceplayer goto_if_unset FLAG_SYS_GAME_CLEAR, SecretBase_EventScript_Trainer5PreChampion - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_Trainer5PostBattle + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_Trainer5PostBattle msgbox SecretBase_Text_Trainer5Intro, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_Trainer5DeclineBattle + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_Trainer5DeclineBattle setvar VAR_RESULT, 1 special SetBattledOwnerFromResult call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_Trainer5DeclineBattle + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_Trainer5DeclineBattle msgbox SecretBase_Text_Trainer5AcceptBattle, MSGBOX_DEFAULT goto SecretBase_EventScript_BattleTrainer end @@ -566,16 +505,13 @@ SecretBase_EventScript_Trainer6:: lock faceplayer goto_if_unset FLAG_SYS_GAME_CLEAR, SecretBase_EventScript_Trainer6PreChampion - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_Trainer6PostBattle + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_Trainer6PostBattle msgbox SecretBase_Text_Trainer6Intro, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_Trainer6DeclineBattle + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_Trainer6DeclineBattle setvar VAR_RESULT, 1 special SetBattledOwnerFromResult call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_Trainer6DeclineBattle + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_Trainer6DeclineBattle msgbox SecretBase_Text_Trainer6AcceptBattle, MSGBOX_DEFAULT goto SecretBase_EventScript_BattleTrainer end @@ -603,16 +539,13 @@ SecretBase_EventScript_Trainer7:: lock faceplayer goto_if_unset FLAG_SYS_GAME_CLEAR, SecretBase_EventScript_Trainer7PreChampion - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_Trainer7PostBattle + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_Trainer7PostBattle msgbox SecretBase_Text_Trainer7Intro, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_Trainer7DeclineBattle + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_Trainer7DeclineBattle setvar VAR_RESULT, 1 special SetBattledOwnerFromResult call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_Trainer7DeclineBattle + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_Trainer7DeclineBattle msgbox SecretBase_Text_Trainer7AcceptBattle, MSGBOX_DEFAULT goto SecretBase_EventScript_BattleTrainer end @@ -640,16 +573,13 @@ SecretBase_EventScript_Trainer8:: lock faceplayer goto_if_unset FLAG_SYS_GAME_CLEAR, SecretBase_EventScript_Trainer8PreChampion - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_Trainer8PostBattle + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_Trainer8PostBattle msgbox SecretBase_Text_Trainer8Intro, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_Trainer8DeclineBattle + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_Trainer8DeclineBattle setvar VAR_RESULT, 1 special SetBattledOwnerFromResult call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_Trainer8DeclineBattle + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_Trainer8DeclineBattle msgbox SecretBase_Text_Trainer8AcceptBattle, MSGBOX_DEFAULT goto SecretBase_EventScript_BattleTrainer end @@ -677,16 +607,13 @@ SecretBase_EventScript_Trainer9:: lock faceplayer goto_if_unset FLAG_SYS_GAME_CLEAR, SecretBase_EventScript_Trainer9PreChampion - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_Trainer9PostBattle + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_Trainer9PostBattle msgbox SecretBase_Text_Trainer9Intro, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_Trainer9DeclineBattle + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_Trainer9DeclineBattle setvar VAR_RESULT, 1 special SetBattledOwnerFromResult call Common_EventScript_SaveGame - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_Trainer9DeclineBattle + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_Trainer9DeclineBattle msgbox SecretBase_Text_Trainer9AcceptBattle, MSGBOX_DEFAULT goto SecretBase_EventScript_BattleTrainer end @@ -715,12 +642,9 @@ SecretBase_EventScript_BattleTrainer:: setvar VAR_0x8005, 0 special DoSpecialTrainerBattle waitstate - compare VAR_RESULT, B_OUTCOME_DREW - call_if_eq SecretBase_EventScript_DrewSecretBaseBattle - compare VAR_RESULT, B_OUTCOME_WON - call_if_eq SecretBase_EventScript_WonSecretBaseBattle - compare VAR_RESULT, B_OUTCOME_LOST - call_if_eq SecretBase_EventScript_LostSecretBaseBattle + call_if_eq VAR_RESULT, B_OUTCOME_DREW, SecretBase_EventScript_DrewSecretBaseBattle + call_if_eq VAR_RESULT, B_OUTCOME_WON, SecretBase_EventScript_WonSecretBaseBattle + call_if_eq VAR_RESULT, B_OUTCOME_LOST, SecretBase_EventScript_LostSecretBaseBattle special HealPlayerParty release end diff --git a/data/scripts/secret_power_tm.inc b/data/scripts/secret_power_tm.inc index 41c21e1004..11a5d5b668 100644 --- a/data/scripts/secret_power_tm.inc +++ b/data/scripts/secret_power_tm.inc @@ -37,26 +37,21 @@ Route111_EventScript_SecretPowerMan:: lock faceplayer msgbox Route111_Text_MakingRoomUseTMToMakeYourOwn, MSGBOX_YESNO - compare VAR_RESULT, YES - goto_if_eq Route111_EventScript_GiveSecretPower + goto_if_eq VAR_RESULT, YES, Route111_EventScript_GiveSecretPower msgbox Route111_Text_DontWantThis, MSGBOX_DEFAULT release end Route111_EventScript_GiveSecretPower:: giveitem ITEM_TM43 - compare VAR_RESULT, FALSE - goto_if_eq Route111_EventScript_NoRoomForSecretPower + goto_if_eq VAR_RESULT, FALSE, Route111_EventScript_NoRoomForSecretPower msgbox Route111_Text_ExplainSecretPower, MSGBOX_DEFAULT closemessage setflag FLAG_RECEIVED_SECRET_POWER clearflag FLAG_HIDE_SLATEPORT_CITY_TM_SALESMAN - compare VAR_FACING, DIR_WEST - call_if_eq Route111_EventScript_SecretPowerManExit - compare VAR_FACING, DIR_EAST - call_if_eq Route111_EventScript_SecretPowerManExit - compare VAR_FACING, DIR_NORTH - call_if_eq Route111_EventScript_SecretPowerManExitNorth + call_if_eq VAR_FACING, DIR_WEST, Route111_EventScript_SecretPowerManExit + call_if_eq VAR_FACING, DIR_EAST, Route111_EventScript_SecretPowerManExit + call_if_eq VAR_FACING, DIR_NORTH, Route111_EventScript_SecretPowerManExitNorth removeobject VAR_LAST_TALKED release end diff --git a/data/scripts/shared_secret_base.inc b/data/scripts/shared_secret_base.inc index ef389d3fce..576e939211 100644 --- a/data/scripts/shared_secret_base.inc +++ b/data/scripts/shared_secret_base.inc @@ -1,224 +1,215 @@ SecretBase_MapScripts:: - map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, SecretBase_OnWarp - map_script MAP_SCRIPT_ON_TRANSITION, SecretBase_OnTransition - map_script MAP_SCRIPT_ON_FRAME_TABLE, SecretBase_OnFrame - map_script MAP_SCRIPT_ON_RESUME, SecretBase_OnResume - .byte 0 + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, SecretBase_OnWarp + map_script MAP_SCRIPT_ON_TRANSITION, SecretBase_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, SecretBase_OnFrame + map_script MAP_SCRIPT_ON_RESUME, SecretBase_OnResume + .byte 0 SecretBase_OnWarp: - map_script_2 VAR_SECRET_BASE_INITIALIZED, 0, SecretBase_EventScript_InitDecorations - .2byte 0 + map_script_2 VAR_SECRET_BASE_INITIALIZED, 0, SecretBase_EventScript_InitDecorations + .2byte 0 SecretBase_OnTransition: - call SecretBase_EventScript_SetDecorationFlags - special SetSecretBaseOwnerGfxId - special InitSecretBaseVars - end + call SecretBase_EventScript_SetDecorationFlags + special SetSecretBaseOwnerGfxId + special InitSecretBaseVars + end SecretBase_OnFrame: - map_script_2 VAR_INIT_SECRET_BASE, 0, SecretBase_EventScript_FirstEntrance - .2byte 0 + map_script_2 VAR_INIT_SECRET_BASE, 0, SecretBase_EventScript_FirstEntrance + .2byte 0 SecretBase_OnResume: - setstepcallback STEP_CB_SECRET_BASE - end + setstepcallback STEP_CB_SECRET_BASE + end SecretBase_EventScript_PC:: - lockall - playse SE_PC_LOGIN - message SecretBase_Text_BootUpPC - dofieldeffect FLDEFF_PCTURN_ON - waitstate - waitmessage - waitbuttonpress - playse SE_SELECT - goto SecretBase_EventScript_PCShowMainMenu - end + lockall + playse SE_PC_LOGIN + message SecretBase_Text_BootUpPC + dofieldeffect FLDEFF_PCTURN_ON + waitstate + waitmessage + waitbuttonpress + playse SE_SELECT + goto SecretBase_EventScript_PCShowMainMenu + end SecretBase_EventScript_PCShowMainMenu:: - message SecretBase_Text_WhatWouldYouLikeToDo - waitmessage - goto_if_set FLAG_SECRET_BASE_REGISTRY_ENABLED, SecretBase_EventScript_PCMainMenuWithRegister - goto SecretBase_EventScript_PCMainMenuWithoutRegister - end + message SecretBase_Text_WhatWouldYouLikeToDo + waitmessage + goto_if_set FLAG_SECRET_BASE_REGISTRY_ENABLED, SecretBase_EventScript_PCMainMenuWithRegister + goto SecretBase_EventScript_PCMainMenuWithoutRegister + end SecretBase_EventScript_PCCancel:: - lockall - goto SecretBase_EventScript_PCShowMainMenu - end + lockall + goto SecretBase_EventScript_PCShowMainMenu + end SecretBase_EventScript_PCMainMenuWithRegister:: - multichoice 0, 0, MULTI_BASE_PC_WITH_REGISTRY, FALSE - switch VAR_RESULT - case 0, SecretBase_EventScript_PCDecorationMenu - case 1, SecretBase_EventScript_PCPackUp - case 2, SecretBase_EventScript_PCRegistryMenu - case 3, SecretBase_EventScript_PCTurnOff - case MULTI_B_PRESSED, SecretBase_EventScript_PCTurnOff - end + multichoice 0, 0, MULTI_BASE_PC_WITH_REGISTRY, FALSE + switch VAR_RESULT + case 0, SecretBase_EventScript_PCDecorationMenu + case 1, SecretBase_EventScript_PCPackUp + case 2, SecretBase_EventScript_PCRegistryMenu + case 3, SecretBase_EventScript_PCTurnOff + case MULTI_B_PRESSED, SecretBase_EventScript_PCTurnOff + end SecretBase_EventScript_PCMainMenuWithoutRegister:: - multichoice 0, 0, MULTI_BASE_PC_NO_REGISTRY, FALSE - switch VAR_RESULT - case 0, SecretBase_EventScript_PCDecorationMenu - case 1, SecretBase_EventScript_PCPackUp - case 2, SecretBase_EventScript_PCTurnOff - case MULTI_B_PRESSED, SecretBase_EventScript_PCTurnOff - end + multichoice 0, 0, MULTI_BASE_PC_NO_REGISTRY, FALSE + switch VAR_RESULT + case 0, SecretBase_EventScript_PCDecorationMenu + case 1, SecretBase_EventScript_PCPackUp + case 2, SecretBase_EventScript_PCTurnOff + case MULTI_B_PRESSED, SecretBase_EventScript_PCTurnOff + end SecretBase_EventScript_PCPackUp:: - msgbox SecretBase_Text_AllDecorationsWillBeReturned, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_PCShowMainMenu - closemessage - special MoveOutOfSecretBase - releaseall - end + msgbox SecretBase_Text_AllDecorationsWillBeReturned, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_PCShowMainMenu + closemessage + special MoveOutOfSecretBase + releaseall + end SecretBase_EventScript_PCDecorationMenu:: - special ShowSecretBaseDecorationMenu - end + special ShowSecretBaseDecorationMenu + end SecretBase_EventScript_PCRegistryMenu:: - special ShowSecretBaseRegistryMenu - end + special ShowSecretBaseRegistryMenu + end SecretBase_EventScript_RecordMixingPC:: - lockall - message SecretBase_Text_BootUpPC - playse SE_PC_LOGIN - dofieldeffect FLDEFF_PCTURN_ON - waitstate - waitmessage - waitbuttonpress - playse SE_SELECT - goto SecretBase_EventScript_PCRegisterMenu - end + lockall + message SecretBase_Text_BootUpPC + playse SE_PC_LOGIN + dofieldeffect FLDEFF_PCTURN_ON + waitstate + waitmessage + waitbuttonpress + playse SE_SELECT + goto SecretBase_EventScript_PCRegisterMenu + end SecretBase_EventScript_PCRegisterMenu:: - message SecretBase_Text_WhatWouldYouLikeToDo - waitmessage - multichoice 0, 0, MULTI_REGISTER_MENU, FALSE - switch VAR_RESULT - case 0, SecretBase_EventScript_PCRegister - case 1, SecretBase_EventScript_PCRegistryMenu - case 2, SecretBase_EventScript_PCRegistryInfo - case 3, SecretBase_EventScript_PCTurnOff - case MULTI_B_PRESSED, SecretBase_EventScript_PCTurnOff - end + message SecretBase_Text_WhatWouldYouLikeToDo + waitmessage + multichoice 0, 0, MULTI_REGISTER_MENU, FALSE + switch VAR_RESULT + case 0, SecretBase_EventScript_PCRegister + case 1, SecretBase_EventScript_PCRegistryMenu + case 2, SecretBase_EventScript_PCRegistryInfo + case 3, SecretBase_EventScript_PCTurnOff + case MULTI_B_PRESSED, SecretBase_EventScript_PCTurnOff + end SecretBase_EventScript_ShowRegisterMenu:: - lockall - goto SecretBase_EventScript_PCRegisterMenu - end + lockall + goto SecretBase_EventScript_PCRegisterMenu + end SecretBase_EventScript_PCRegister:: - special GetCurSecretBaseRegistrationValidity - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_AlreadyRegistered - compare VAR_RESULT, 2 - goto_if_eq SecretBase_EventScript_CantRegisterTooManyBases - special CopyCurSecretBaseOwnerName_StrVar1 - msgbox SecretBase_Text_WantToRegisterSecretBase, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_PCRegisterMenu - msgbox SecretBase_Text_RegistrationCompleted, MSGBOX_SIGN - special ToggleCurSecretBaseRegistry - special DoSecretBasePCTurnOffEffect - releaseall - end + special GetCurSecretBaseRegistrationValidity + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_AlreadyRegistered + goto_if_eq VAR_RESULT, 2, SecretBase_EventScript_CantRegisterTooManyBases + special CopyCurSecretBaseOwnerName_StrVar1 + msgbox SecretBase_Text_WantToRegisterSecretBase, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_PCRegisterMenu + msgbox SecretBase_Text_RegistrationCompleted, MSGBOX_SIGN + special ToggleCurSecretBaseRegistry + special DoSecretBasePCTurnOffEffect + releaseall + end SecretBase_EventScript_AlreadyRegistered:: - msgbox SecretBase_Text_AlreadyRegisteredDelete, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq SecretBase_EventScript_PCRegisterMenu - msgbox SecretBase_Text_DataUnregistered, MSGBOX_SIGN - special ToggleCurSecretBaseRegistry - special DoSecretBasePCTurnOffEffect - releaseall - end + msgbox SecretBase_Text_AlreadyRegisteredDelete, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SecretBase_EventScript_PCRegisterMenu + msgbox SecretBase_Text_DataUnregistered, MSGBOX_SIGN + special ToggleCurSecretBaseRegistry + special DoSecretBasePCTurnOffEffect + releaseall + end SecretBase_EventScript_CantRegisterTooManyBases:: - msgbox SecretBase_Text_TooManyBasesDeleteSome, MSGBOX_SIGN - special DoSecretBasePCTurnOffEffect - closemessage - releaseall - end + msgbox SecretBase_Text_TooManyBasesDeleteSome, MSGBOX_SIGN + special DoSecretBasePCTurnOffEffect + closemessage + releaseall + end SecretBase_EventScript_PCRegistryInfo:: - msgbox SecretBase_Text_RegistryInfo, MSGBOX_DEFAULT - goto SecretBase_EventScript_PCRegisterMenu - end + msgbox SecretBase_Text_RegistryInfo, MSGBOX_DEFAULT + goto SecretBase_EventScript_PCRegisterMenu + end SecretBase_EventScript_PCTurnOff:: - special DoSecretBasePCTurnOffEffect - closemessage - releaseall - end + special DoSecretBasePCTurnOffEffect + closemessage + releaseall + end @ Unused SecretBase_EventScript_Poster:: - special CheckInteractedWithFriendsPosterDecor - end + special CheckInteractedWithFriendsPosterDecor + end @ Unused SecretBase_EventScript_FurnitureBottom:: - special CheckInteractedWithFriendsFurnitureBottom - end + special CheckInteractedWithFriendsFurnitureBottom + end @ Unused SecretBase_EventScript_FurnitureMiddle:: - special CheckInteractedWithFriendsFurnitureMiddle - end + special CheckInteractedWithFriendsFurnitureMiddle + end @ Unused SecretBase_EventScript_FurnitureTop:: - special CheckInteractedWithFriendsFurnitureTop - end + special CheckInteractedWithFriendsFurnitureTop + end SecretBase_EventScript_SandOrnament:: - special CheckInteractedWithFriendsSandOrnament - dofieldeffect FLDEFF_SAND_PILLAR - waitstate - end + special CheckInteractedWithFriendsSandOrnament + dofieldeffect FLDEFF_SAND_PILLAR + waitstate + end SecretBase_EventScript_ShieldOrToyTV:: - special InteractWithShieldOrTVDecoration - compare VAR_RESULT, 0 - goto_if_eq SecretBase_EventScript_BattleTowerShield - compare VAR_RESULT, 1 - goto_if_eq SecretBase_EventScript_ToyTV - compare VAR_RESULT, 2 - goto_if_eq SecretBase_EventScript_SeedotTV - compare VAR_RESULT, 3 - goto_if_eq SecretBase_EventScript_SkittyTV - end + special InteractWithShieldOrTVDecoration + goto_if_eq VAR_RESULT, 0, SecretBase_EventScript_BattleTowerShield + goto_if_eq VAR_RESULT, 1, SecretBase_EventScript_ToyTV + goto_if_eq VAR_RESULT, 2, SecretBase_EventScript_SeedotTV + goto_if_eq VAR_RESULT, 3, SecretBase_EventScript_SkittyTV + end SecretBase_EventScript_BattleTowerShield:: - msgbox SecretBase_Text_BattleTowerShield, MSGBOX_SIGN - end + msgbox SecretBase_Text_BattleTowerShield, MSGBOX_SIGN + end SecretBase_EventScript_ToyTV:: - msgbox SecretBase_Text_ToyTV, MSGBOX_SIGN - end + msgbox SecretBase_Text_ToyTV, MSGBOX_SIGN + end SecretBase_EventScript_SeedotTV:: - msgbox SecretBase_Text_SeedotTV, MSGBOX_SIGN - end + msgbox SecretBase_Text_SeedotTV, MSGBOX_SIGN + end SecretBase_EventScript_SkittyTV:: - msgbox SecretBase_Text_SkittyTV, MSGBOX_SIGN - end + msgbox SecretBase_Text_SkittyTV, MSGBOX_SIGN + end SecretBase_Text_SmallIndentInWall:: - .string "There's a small indent in the wall.$" + .string "There's a small indent in the wall.$" SecretBase_Text_IndentUseSecretPower:: - .string "There's a small indent in the wall.\p" - .string "Use the SECRET POWER?$" + .string "There's a small indent in the wall.\p" + .string "Use the SECRET POWER?$" SecretBase_Text_DiscoveredSmallCavern:: - .string "Discovered a small cavern!$" + .string "Discovered a small cavern!$" SecretBase_Text_WantToMakeYourSecretBaseHere: - .string "Want to make your SECRET BASE here?$" + .string "Want to make your SECRET BASE here?$" diff --git a/data/scripts/std_msgbox.inc b/data/scripts/std_msgbox.inc index 941cc0e961..c46da56cbf 100644 --- a/data/scripts/std_msgbox.inc +++ b/data/scripts/std_msgbox.inc @@ -1,7 +1,7 @@ Std_MsgboxNPC: lock faceplayer - message 0x0 + message NULL waitmessage waitbuttonpress release @@ -9,33 +9,34 @@ Std_MsgboxNPC: Std_MsgboxSign: lockall - message 0x0 + message NULL waitmessage waitbuttonpress releaseall return Std_MsgboxDefault: - message 0x0 + message NULL waitmessage waitbuttonpress return Std_MsgboxYesNo: - message 0x0 + message NULL waitmessage yesnobox 20, 8 return Std_MsgboxGetPoints: - message 0x0 + message NULL playfanfare MUS_OBTAIN_B_POINTS waitfanfare waitmessage return -Std_10: - pokenavcall 0x0 +@ Never used, pokenavcall is always used directly instead +Std_MsgboxPokenav: + pokenavcall NULL waitmessage return diff --git a/data/scripts/surf.inc b/data/scripts/surf.inc index 91580422e1..edb116f991 100644 --- a/data/scripts/surf.inc +++ b/data/scripts/surf.inc @@ -1,13 +1,11 @@ EventScript_UseSurf:: checkpartymove MOVE_SURF - compare VAR_RESULT, PARTY_SIZE - goto_if_eq EventScript_EndUseSurf - bufferpartymonnick 0, VAR_RESULT + goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_EndUseSurf + bufferpartymonnick STR_VAR_1, VAR_RESULT setfieldeffectargument 0, VAR_RESULT lockall msgbox gText_WantToUseSurf, MSGBOX_YESNO - compare VAR_RESULT, NO - goto_if_eq EventScript_ReleaseUseSurf + goto_if_eq VAR_RESULT, NO, EventScript_ReleaseUseSurf msgbox gText_PlayerUsedSurf, MSGBOX_DEFAULT dofieldeffect FLDEFF_USE_SURF EventScript_ReleaseUseSurf:: diff --git a/data/scripts/trainer_battle.inc b/data/scripts/trainer_battle.inc index a59b58a6f7..bbbcaf3ba3 100644 --- a/data/scripts/trainer_battle.inc +++ b/data/scripts/trainer_battle.inc @@ -13,8 +13,7 @@ EventScript_TryDoNormalTrainerBattle:: applymovement VAR_LAST_TALKED, Movement_RevealTrainer waitmovement 0 specialvar VAR_RESULT, GetTrainerFlag - compare VAR_RESULT, FALSE - goto_if_ne EventScript_NoNormalTrainerBattle + goto_if_ne VAR_RESULT, FALSE, EventScript_NoNormalTrainerBattle special PlayTrainerEncounterMusic special SetTrainerFacingDirection goto EventScript_ShowTrainerIntroMsg @@ -27,11 +26,9 @@ EventScript_TryDoDoubleTrainerBattle:: faceplayer call EventScript_RevealTrainer specialvar VAR_RESULT, GetTrainerFlag - compare VAR_RESULT, FALSE - goto_if_ne EventScript_NoDoubleTrainerBattle + goto_if_ne VAR_RESULT, FALSE, EventScript_NoDoubleTrainerBattle special HasEnoughMonsForDoubleBattle - compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS - goto_if_ne EventScript_NotEnoughMonsForDoubleBattle + goto_if_ne VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS, EventScript_NotEnoughMonsForDoubleBattle special PlayTrainerEncounterMusic special SetTrainerFacingDirection goto EventScript_ShowTrainerIntroMsg @@ -50,14 +47,13 @@ EventScript_DoNoIntroTrainerBattle:: applymovement VAR_LAST_TALKED, Movement_RevealTrainer waitmovement 0 special PlayTrainerEncounterMusic - trainerbattlebegin + dotrainerbattle gotopostbattlescript EventScript_TryDoRematchBattle:: call EventScript_RevealTrainer specialvar VAR_RESULT, IsTrainerReadyForRematch - compare VAR_RESULT, FALSE - goto_if_eq EventScript_NoRematchTrainerBattle + goto_if_eq VAR_RESULT, FALSE, EventScript_NoRematchTrainerBattle special PlayTrainerEncounterMusic special SetTrainerFacingDirection special ShowTrainerIntroSpeech @@ -73,11 +69,9 @@ EventScript_NoRematchTrainerBattle:: EventScript_TryDoDoubleRematchBattle:: specialvar VAR_RESULT, IsTrainerReadyForRematch - compare VAR_RESULT, FALSE - goto_if_eq EventScript_NoDoubleRematchTrainerBattle + goto_if_eq VAR_RESULT, FALSE, EventScript_NoDoubleRematchTrainerBattle special HasEnoughMonsForDoubleBattle - compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS - goto_if_ne EventScript_NotEnoughMonsForDoubleRematchBattle + goto_if_ne VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS, EventScript_NotEnoughMonsForDoubleRematchBattle special PlayTrainerEncounterMusic special SetTrainerFacingDirection special ShowTrainerIntroSpeech @@ -112,31 +106,25 @@ EventScript_ShowTrainerIntroMsg:: waitmessage waitbuttonpress special TryPrepareSecondApproachingTrainer - compare VAR_RESULT, TRUE - goto_if_eq EventScript_TrainerApproach + goto_if_eq VAR_RESULT, TRUE, EventScript_TrainerApproach goto EventScript_DoTrainerBattle EventScript_DoTrainerBattle:: - trainerbattlebegin + dotrainerbattle @ Below battle mode check only needed in FRLG specialvar VAR_RESULT, GetTrainerBattleMode - compare VAR_RESULT, TRAINER_BATTLE_SINGLE - goto_if_eq EventScript_EndTrainerBattle - compare VAR_RESULT, TRAINER_BATTLE_CONTINUE_SCRIPT - goto_if_eq EventScript_EndTrainerBattle - compare VAR_RESULT, TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC - goto_if_eq EventScript_EndTrainerBattle - compare VAR_RESULT, TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE - goto_if_eq EventScript_EndTrainerBattle - compare VAR_RESULT, TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC - goto_if_eq EventScript_EndTrainerBattle + goto_if_eq VAR_RESULT, TRAINER_BATTLE_SINGLE, EventScript_EndTrainerBattle + goto_if_eq VAR_RESULT, TRAINER_BATTLE_CONTINUE_SCRIPT, EventScript_EndTrainerBattle + goto_if_eq VAR_RESULT, TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC, EventScript_EndTrainerBattle + goto_if_eq VAR_RESULT, TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE, EventScript_EndTrainerBattle + goto_if_eq VAR_RESULT, TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC, EventScript_EndTrainerBattle EventScript_EndTrainerBattle:: gotobeatenscript releaseall end Std_MsgboxAutoclose:: - message 0x0 + message NULL waitmessage waitbuttonpress release diff --git a/data/scripts/trainer_hill.inc b/data/scripts/trainer_hill.inc index f3ba5f035a..b7f8153514 100644 --- a/data/scripts/trainer_hill.inc +++ b/data/scripts/trainer_hill.inc @@ -2,12 +2,9 @@ TrainerHill_OnResume: setvar VAR_TEMP_2, 0 trainerhill_resumetimer frontier_get FRONTIER_DATA_BATTLE_OUTCOME - compare VAR_RESULT, B_OUTCOME_LOST - goto_if_eq TrainerHill_1F_EventScript_Lost - compare VAR_RESULT, B_OUTCOME_DREW - goto_if_eq TrainerHill_1F_EventScript_Lost - compare VAR_RESULT, B_OUTCOME_FORFEITED - goto_if_eq TrainerHill_1F_EventScript_Lost + goto_if_eq VAR_RESULT, B_OUTCOME_LOST, TrainerHill_1F_EventScript_Lost + goto_if_eq VAR_RESULT, B_OUTCOME_DREW, TrainerHill_1F_EventScript_Lost + goto_if_eq VAR_RESULT, B_OUTCOME_FORFEITED, TrainerHill_1F_EventScript_Lost end TrainerHill_OnWarp: @@ -35,13 +32,12 @@ EventScript_TrainerHillTimer:: TrainerHill_1F_EventScript_DummyWarpToEntranceCounter:: setvar VAR_TEMP_2, 1 trainerhill_getusingereader - compare VAR_RESULT, TRUE @ VAR_RESULT always FALSE here - goto_if_eq TrainerHill_1F_EventScript_WarpSilentToEntranceCounter + goto_if_eq VAR_RESULT, TRUE, TrainerHill_1F_EventScript_WarpSilentToEntranceCounter @ VAR_RESULT always FALSE here end @ Never reached TrainerHill_1F_EventScript_WarpSilentToEntranceCounter:: - warpsilent MAP_TRAINER_HILL_ENTRANCE, 255, 9, 6 + warpsilent MAP_TRAINER_HILL_ENTRANCE, 9, 6 waitstate end @@ -53,7 +49,7 @@ TrainerHill_1F_EventScript_Lost:: TrainerHill_EventScript_WarpToEntranceCounter:: setvar VAR_TEMP_1, 0 - warp MAP_TRAINER_HILL_ENTRANCE, 255, 9, 6 + warp MAP_TRAINER_HILL_ENTRANCE, 9, 6 waitstate end diff --git a/data/scripts/trainer_script.inc b/data/scripts/trainer_script.inc index 2a2384c667..c0998aef8e 100644 --- a/data/scripts/trainer_script.inc +++ b/data/scripts/trainer_script.inc @@ -1,6 +1,6 @@ Std_RegisteredInMatchCall:: - buffertrainerclassname 0, VAR_0x8000 - buffertrainername 1, VAR_0x8000 + buffertrainerclassname STR_VAR_1, VAR_0x8000 + buffertrainername STR_VAR_2, VAR_0x8000 closemessage delay 30 playfanfare MUS_REGISTER_MATCH_CALL @@ -12,8 +12,7 @@ Std_RegisteredInMatchCall:: EventScript_TryGetTrainerScript:: special ShouldTryGetTrainerScript - compare VAR_RESULT, 1 - goto_if_eq EventScript_GotoTrainerScript + goto_if_eq VAR_RESULT, TRUE, EventScript_GotoTrainerScript releaseall end diff --git a/data/scripts/tv.inc b/data/scripts/tv.inc index 14f3ade48d..a5a093226f 100644 --- a/data/scripts/tv.inc +++ b/data/scripts/tv.inc @@ -3,29 +3,23 @@ EventScript_TV:: incrementgamestat GAME_STAT_WATCHED_TV special ResetTVShowState specialvar VAR_RESULT, CheckForPlayersHouseNews - compare VAR_RESULT, PLAYERS_HOUSE_TV_MOVIE - goto_if_eq EventScript_PlayersHouseMovie - compare VAR_RESULT, PLAYERS_HOUSE_TV_LATI - goto_if_eq EventScript_PlayersHouseLatiNewsFlash + goto_if_eq VAR_RESULT, PLAYERS_HOUSE_TV_MOVIE, EventScript_PlayersHouseMovie + goto_if_eq VAR_RESULT, PLAYERS_HOUSE_TV_LATI, EventScript_PlayersHouseLatiNewsFlash goto_if_unset FLAG_SYS_TV_START, EventScript_MomDadMightLikeThis1 goto_if_set FLAG_SYS_TV_WATCH, EventScript_MomDadMightLikeThis1 specialvar VAR_RESULT, IsGabbyAndTyShowOnTheAir - compare VAR_RESULT, TRUE - goto_if_eq EventScript_DoInSearchOfTrainers + goto_if_eq VAR_RESULT, TRUE, EventScript_DoInSearchOfTrainers goto EventScript_TryDoPokeNews end EventScript_TryDoTVShow:: specialvar VAR_0x8004, GetRandomActiveShowIdx - compare VAR_0x8004, 255 - goto_if_eq EventScript_MomDadMightLikeThis2 + goto_if_eq VAR_0x8004, 255, EventScript_MomDadMightLikeThis2 specialvar VAR_RESULT, GetNextActiveShowIfMassOutbreak - compare VAR_RESULT, 255 - goto_if_eq EventScript_MomDadMightLikeThis2 + goto_if_eq VAR_RESULT, 255, EventScript_MomDadMightLikeThis2 copyvar VAR_0x8004, VAR_RESULT specialvar VAR_RESULT, GetSelectedTVShow - compare VAR_RESULT, 0 - goto_if_ne EventScript_DoTVShow + goto_if_ne VAR_RESULT, 0, EventScript_DoTVShow end EventScript_MomDadMightLikeThis1:: @@ -52,12 +46,13 @@ EventScript_PlayersHouseLatiNewsFlash:: releaseall end +@ The following is a loop for the TV show messages +@ VAR_RESULT is set to TRUE when the show has printed its final message EventScript_DoTVShow:: special DoTVShow waitmessage waitbuttonpress - compare VAR_RESULT, 1 - goto_if_ne EventScript_DoTVShow + goto_if_ne VAR_RESULT, TRUE, EventScript_DoTVShow goto EventScript_TurnOffTV end @@ -75,8 +70,7 @@ EventScript_MomDadMightLikeThis2:: EventScript_TryDoPokeNews:: special DoPokeNews - compare VAR_RESULT, FALSE - goto_if_eq EventScript_TryDoTVShow + goto_if_eq VAR_RESULT, FALSE, EventScript_TryDoTVShow waitmessage waitbuttonpress goto EventScript_TurnOffTV @@ -86,7 +80,6 @@ EventScript_DoInSearchOfTrainers:: special DoTVShowInSearchOfTrainers waitmessage waitbuttonpress - compare VAR_RESULT, 0 - goto_if_eq EventScript_DoInSearchOfTrainers + goto_if_eq VAR_RESULT, 0, EventScript_DoInSearchOfTrainers goto EventScript_TurnOffTV end diff --git a/data/sound_data.s b/data/sound_data.s index cd33950e17..1bc2995808 100644 --- a/data/sound_data.s +++ b/data/sound_data.s @@ -2,7 +2,7 @@ .include "asm/macros/m4a.inc" .include "asm/macros/music_voice.inc" - + .include "include/constants/pokemon_config.h" .include "sound/voice_groups.inc" .include "sound/keysplit_tables.inc" .include "sound/programmable_wave_data.inc" diff --git a/data/specials.inc b/data/specials.inc index 30276f0532..a1b2fd2016 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -43,7 +43,7 @@ gSpecials:: def_special CloseLink def_special ColosseumPlayerSpotTriggered def_special PlayerEnteredTradeSeat - def_special nullsub_37 + def_special Script_StartWiredTrade def_special CableClubSaveGame def_special TryBerryBlenderLinkup def_special GetLinkPartnerNames @@ -108,28 +108,28 @@ gSpecials:: def_special DoWateringBerryTreeAnim def_special ShowEasyChatScreen def_special ShowEasyChatProfile - def_special ScrSpecial_GetCurrentMauvilleMan - def_special ScrSpecial_HasBardSongBeenChanged - def_special ScrSpecial_SaveBardSongLyrics - def_special ScrSpecial_GetHipsterSpokenFlag - def_special ScrSpecial_SetHipsterSpokenFlag - def_special ScrSpecial_HipsterTeachWord - def_special ScrSpecial_PlayBardSong - def_special ScrSpecial_SetMauvilleOldManObjEventGfx - def_special ScrSpecial_GenerateGiddyLine - def_special ScrSpecial_GiddyShouldTellAnotherTale - def_special ScrSpecial_StorytellerGetFreeStorySlot - def_special ScrSpecial_StorytellerDisplayStory - def_special ScrSpecial_StorytellerStoryListMenu - def_special ScrSpecial_StorytellerUpdateStat - def_special ScrSpecial_StorytellerInitializeRandomStat - def_special ScrSpecial_HasStorytellerAlreadyRecorded - def_special ScrSpecial_TraderMenuGetDecoration - def_special ScrSpecial_GetTraderTradedFlag - def_special ScrSpecial_DoesPlayerHaveNoDecorations - def_special ScrSpecial_IsDecorationFull - def_special ScrSpecial_TraderMenuGiveDecoration - def_special ScrSpecial_TraderDoDecorationTrade + def_special Script_GetCurrentMauvilleMan + def_special HasBardSongBeenChanged + def_special SaveBardSongLyrics + def_special GetHipsterSpokenFlag + def_special SetHipsterSpokenFlag + def_special HipsterTryTeachWord + def_special PlayBardSong + def_special SetMauvilleOldManObjEventGfx + def_special GenerateGiddyLine + def_special GiddyShouldTellAnotherTale + def_special StorytellerGetFreeStorySlot + def_special Script_StorytellerDisplayStory + def_special StorytellerStoryListMenu + def_special StorytellerUpdateStat + def_special Script_StorytellerInitializeRandomStat + def_special HasStorytellerAlreadyRecorded + def_special TraderMenuGetDecoration + def_special GetTraderTradedFlag + def_special DoesPlayerHaveNoDecorations + def_special IsDecorationCategoryFull + def_special TraderShowDecorationMenu + def_special TraderDoDecorationTrade def_special GetSeedotSizeRecordInfo def_special CompareSeedotSize def_special GetLotadSizeRecordInfo @@ -315,7 +315,7 @@ gSpecials:: def_special IsStarterInParty def_special CopyCurSecretBaseOwnerName_StrVar1 def_special ScriptCheckFreePokemonStorageSpace - def_special DoSealedChamberShakingEffect1 + def_special DoSealedChamberShakingEffect_Long def_special ShowDeptStoreElevatorFloorSelect def_special InteractWithShieldOrTVDecoration def_special IsPokerusInParty @@ -325,7 +325,7 @@ gSpecials:: def_special BattleSetup_StartLegendaryBattle def_special StartRegiBattle def_special SetTrainerFacingDirection - def_special DoSealedChamberShakingEffect2 + def_special DoSealedChamberShakingEffect_Short def_special FoundBlackGlasses def_special StartDroughtWeatherBlend def_special DoDiveWarp @@ -400,7 +400,7 @@ gSpecials:: def_special ClearQuizLadyQuestionAndAnswer def_special QuizLadySetCustomQuestion def_special QuizLadyTakePrizeForCustomQuiz - def_special GetMysteryEventCardVal + def_special GetMysteryGiftCardStat def_special QuizLadyRecordCustomQuizData def_special QuizLadySetWaitingForChallenger def_special BufferQuizCorrectAnswer @@ -430,11 +430,11 @@ gSpecials:: def_special ShowWirelessCommunicationScreen def_special InitUnionRoom def_special BufferUnionRoomPlayerName - def_special sub_801DC20 + def_special RetrieveWonderNewsVal def_special ChooseMonForWirelessMinigame def_special Script_ResetUnionRoomTrade def_special IsBadEggInParty - def_special ValidateReceivedWonderCard + def_special ValidateSavedWonderCard def_special HasAtLeastOneBerry def_special IsPokemonJumpSpeciesInParty def_special ShowPokemonJumpRecords @@ -455,7 +455,7 @@ gSpecials:: def_special ClearLinkContestFlags def_special TryContestEModeLinkup def_special ShowScrollableMultichoice - def_special sub_813A630 + def_special ScrollableMultichoice_TryReturnToList def_special BufferBattleTowerElevatorFloors def_special TryStoreHeldItemsInPyramidBag def_special ChooseItemsToTossFromPyramidBag @@ -484,10 +484,9 @@ gSpecials:: def_special CountPlayerTrainerStars def_special BufferBattleFrontierTutorMoveName def_special CloseBattleFrontierTutorWindow - def_special sub_813ADD4 + def_special ScrollableMultichoice_RedrawPersistentMenu def_special ChooseMonForMoveTutor - def_special GetBattleFrontierTutorMoveIndex - def_special sub_813AF48 + def_special ScrollableMultichoice_ClosePersistentMenu def_special DoDeoxysRockInteraction def_special SetDeoxysRockPalette def_special CreateEventLegalEnemyMon @@ -535,3 +534,5 @@ gSpecials:: def_special RemoveRecordsWindow def_special CloseDeptStoreElevatorWindow def_special TrySetBattleTowerLinkType + def_special SetTotemBoost + def_special TrySpecialOverworldEvo diff --git a/data/text/braille.inc b/data/text/braille.inc index 69f0a81e38..4518c5769d 100644 --- a/data/text/braille.inc +++ b/data/text/braille.inc @@ -1,3 +1,7 @@ +@ NOTE: The brailleformat macro in this file is leftover from RS. +@ The numbers are simply skipped over. If you'd like to omit +@ this macro you must also stop it from skipping over this +@ section by editing ScrCmd_braillemessage. Underwater_SealedChamber_Braille_GoUpHere: brailleformat 4, 6, 26, 13, 7, 9 .braille "GO UP HERE.$" diff --git a/data/text/contest_strings.inc b/data/text/contest_strings.inc index e57e76a528..948c19922d 100644 --- a/data/text/contest_strings.inc +++ b/data/text/contest_strings.inc @@ -4,145 +4,192 @@ gText_HighlyAppealingMove:: .string "A highly appealing move.$" gText_UserMoreEasilyStartled:: - .string "After this move, the user is\nmore easily startled.$" + .string "After this move, the user is\n" + .string "more easily startled.$" gText_GreatAppealButNoMoreToEnd:: - .string "Makes a great appeal, but\nallows no more to the end.$" + .string "Makes a great appeal, but\n" + .string "allows no more to the end.$" gText_UsedRepeatedlyWithoutBoringJudge:: - .string "Can be repeatedly used\nwithout boring the JUDGE.$" + .string "Can be repeatedly used\n" + .string "without boring the JUDGE.$" gText_AvoidStartledByOthersOnce:: - .string "Can avoid being startled\nby others once.$" + .string "Can avoid being startled\n" + .string "by others once.$" gText_AvoidStartledByOthers:: - .string "Can avoid being startled\nby others.$" + .string "Can avoid being startled\n" + .string "by others.$" gText_AvoidStartledByOthersLittle:: - .string "Can avoid being startled\nby others a little.$" + .string "Can avoid being startled\n" + .string "by others a little.$" gText_UserLessLikelyStartled:: - .string "After this move, the user is\nless likely to be startled.$" + .string "After this move, the user is\n" + .string "less likely to be startled.$" gText_SlightlyStartleFrontMon:: - .string "Slightly startles the\nPOKéMON in front.$" + .string "Slightly startles the\n" + .string "POKéMON in front.$" gText_SlightlyStartleAppealed:: - .string "Slightly startles those\nthat have made appeals.$" + .string "Slightly startles those\n" + .string "that have made appeals.$" gText_StartleAppealedBeforeUser:: - .string "Startles the POKéMON that\nappealed before the user.$" + .string "Startles the POKéMON that\n" + .string "appealed before the user.$" gText_StartleAllAppealed:: - .string "Startles all POKéMON that\nhave done their appeals.$" + .string "Startles all POKéMON that\n" + .string "have done their appeals.$" gText_BadlyStartleFrontMon:: - .string "Badly startles the\nPOKéMON in front.$" + .string "Badly startles the\n" + .string "POKéMON in front.$" gText_BadlyStartleAppealed:: - .string "Badly startles those that\nhave made appeals.$" + .string "Badly startles those that\n" + .string "have made appeals.$" gText_StartleAppealedBeforeUser2:: - .string "Startles the POKéMON that\nappealed before the user.$" + .string "Startles the POKéMON that\n" + .string "appealed before the user.$" gText_StartleAllAppealed2:: - .string "Startles all POKéMON that\nhave done their appeals.$" + .string "Startles all POKéMON that\n" + .string "have done their appeals.$" gText_ShiftJudgesAttentionFromOthers:: - .string "Shifts the JUDGE's\nattention from others.$" + .string "Shifts the JUDGE's\n" + .string "attention from others.$" gText_StartleMonHasJudgesAttention:: - .string "Startles the POKéMON that\nhas the JUDGE's attention.$" + .string "Startles the POKéMON that\n" + .string "has the JUDGE's attention.$" gText_JamOthersMissesTurn:: - .string "Jams the others, and misses\none turn of appeals.$" + .string "Jams the others, and misses\n" + .string "one turn of appeals.$" gText_StartleMonsMadeSameTypeAppeal:: - .string "Startles POKéMON that\nmade a same-type appeal.$" + .string "Startles POKéMON that\n" + .string "made a same-type appeal.$" gText_BadlyStartleCoolAppeals:: - .string "Badly startles POKéMON\nthat made COOL appeals.$" + .string "Badly startles POKéMON\n" + .string "that made COOL appeals.$" gText_BadlyStartleBeautyAppeals:: - .string "Badly startles POKéMON\nthat made BEAUTY appeals.$" + .string "Badly startles POKéMON\n" + .string "that made BEAUTY appeals.$" gText_BadlyStartleCuteAppeals:: - .string "Badly startles POKéMON\nthat made CUTE appeals.$" + .string "Badly startles POKéMON\n" + .string "that made CUTE appeals.$" gText_BadlyStartleSmartAppeals:: - .string "Badly startles POKéMON\nthat made SMART appeals.$" + .string "Badly startles POKéMON\n" + .string "that made SMART appeals.$" gText_BadlyStartleToughAppeals:: - .string "Badly startles POKéMON\nthat made TOUGH appeals.$" + .string "Badly startles POKéMON\n" + .string "that made TOUGH appeals.$" gText_MakeMonAfterUserNervous:: - .string "Makes one POKéMON after\nthe user nervous.$" + .string "Makes one POKéMON after\n" + .string "the user nervous.$" gText_MakeAllMonsAfterUserNervous:: - .string "Makes all POKéMON after\nthe user nervous.$" + .string "Makes all POKéMON after\n" + .string "the user nervous.$" gText_WorsenConditionOfThoseMadeAppeals:: - .string "Worsens the condition of\nthose that made appeals.$" + .string "Worsens the condition of\n" + .string "those that made appeals.$" gText_BadlyStartleMonsGoodCondition:: - .string "Badly startles POKéMON in\ngood condition.$" + .string "Badly startles POKéMON in\n" + .string "good condition.$" gText_AppealGreatIfPerformedFirst:: - .string "The appeal works great if\nperformed first.$" + .string "The appeal works great if\n" + .string "performed first.$" gText_AppealGreatIfPerformedLast:: - .string "The appeal works great if\nperformed last.$" + .string "The appeal works great if\n" + .string "performed last.$" gText_AppealAsGoodAsThoseBeforeIt:: - .string "Makes the appeal as good\nas those before it.$" + .string "Makes the appeal as good\n" + .string "as those before it.$" gText_AppealAsGoodAsOneBeforeIt:: - .string "Makes the appeal as good\nas the one before it.$" + .string "Makes the appeal as good\n" + .string "as the one before it.$" gText_AppealBetterLaterItsPerformed:: - .string "The appeal works better\nthe later it is performed.$" + .string "The appeal works better\n" + .string "the later it is performed.$" gText_AppealVariesDependingOnTiming:: - .string "The appeal's quality varies\ndepending on its timing.$" + .string "The appeal's quality varies\n" + .string "depending on its timing.$" gText_WorksWellIfSameTypeAsBefore:: - .string "Works well if it's the same\ntype as the one before.$" + .string "Works well if it's the same\n" + .string "type as the one before.$" gText_WorksWellIfDifferentTypeAsBefore:: - .string "Works well if different in\ntype than the one before.$" + .string "Works well if different in\n" + .string "type than the one before.$" gText_AffectedByAppealInFront:: - .string "Affected by how well the\nappeal in front goes.$" + .string "Affected by how well the\n" + .string "appeal in front goes.$" gText_UpsConditionHelpsPreventNervousness:: - .string "Ups the user's condition.\nHelps prevent nervousness.$" + .string "Ups the user's condition.\n" + .string "Helps prevent nervousness.$" gText_AppealWorksWellIfConditionGood:: - .string "The appeal works well if the\nuser's condition is good.$" + .string "The appeal works well if the\n" + .string "user's condition is good.$" gText_NextAppealMadeEarlier:: - .string "The next appeal can be\nmade earlier next turn.$" + .string "The next appeal can be\n" + .string "made earlier next turn.$" gText_NextAppealMadeLater:: - .string "The next appeal can be\nmade later next turn.$" + .string "The next appeal can be\n" + .string "made later next turn.$" gText_TurnOrderMoreEasilyScrambled:: - .string "Makes the next turn's order\nmore easily scrambled.$" + .string "Makes the next turn's order\n" + .string "more easily scrambled.$" gText_ScrambleOrderOfNextAppeals:: - .string "Scrambles the order of\nappeals on the next turn.$" + .string "Scrambles the order of\n" + .string "appeals on the next turn.$" gText_AppealExcitesAudienceInAnyContest:: - .string "An appeal that excites the\naudience in any CONTEST.$" + .string "An appeal that excites the\n" + .string "audience in any CONTEST.$" gText_BadlyStartlesMonsGoodAppeals:: - .string "Badly startles all POKéMON\nthat made good appeals.$" + .string "Badly startles all POKéMON\n" + .string "that made good appeals.$" gText_AppealBestMoreCrowdExcited:: - .string "The appeal works best the\nmore the crowd is excited.$" + .string "The appeal works best the\n" + .string "more the crowd is excited.$" gText_TemporarilyStopCrowdExcited:: - .string "Temporarily stops the\ncrowd from growing excited.$" + .string "Temporarily stops the\n" + .string "crowd from growing excited.$" @ Unused move names diff --git a/data/text/event_ticket_2.inc b/data/text/event_ticket_2.inc index 0165b5fde9..e5536eebf8 100644 --- a/data/text/event_ticket_2.inc +++ b/data/text/event_ticket_2.inc @@ -1,71 +1,71 @@ EventTicket_Text_OldSeaMapTooFar: - .string "What's up, youngster?\p" - .string "What, it's you who's supposed to have\n" - .string "a tattered old map?\p" - .string "Let's have a look.\n" - .string "… … … … … …\p" - .string "Boy, this is quite a ways away.\n" - .string "I'm afraid I can't help you…$" + .string "What's up, youngster?\p" + .string "What, it's you who's supposed to have\n" + .string "a tattered old map?\p" + .string "Let's have a look.\n" + .string "… … … … … …\p" + .string "Boy, this is quite a ways away.\n" + .string "I'm afraid I can't help you…$" EventTicket_Text_BrineyHoldOnASecond: - .string "BRINEY: Hold on a second!\p" - .string "What's the idea of turning down\n" - .string "someone that I owe so much to?$" + .string "BRINEY: Hold on a second!\p" + .string "What's the idea of turning down\n" + .string "someone that I owe so much to?$" EventTicket_Text_BrineyLetsSail: - .string "{PLAYER}{KUN}, I'm terribly sorry.\p" - .string "You came to me seeking my help,\n" - .string "and we almost turned you away.\p" - .string "Well, let me make things right.\p" - .string "We'll sail right away, of course!\p" - .string "Let's find this island on\n" - .string "this OLD SEA MAP!$" + .string "{PLAYER}{KUN}, I'm terribly sorry.\p" + .string "You came to me seeking my help,\n" + .string "and we almost turned you away.\p" + .string "Well, let me make things right.\p" + .string "We'll sail right away, of course!\p" + .string "Let's find this island on\n" + .string "this OLD SEA MAP!$" EventTicket_Text_OddTicketGetOnBoard: - .string "Is it you who brought that odd\n" - .string "ticket?\p" - .string "Where you're trying to go is an island\n" - .string "that's far, far away.\p" - .string "No one knows what awaits there…\p" - .string "The very thought excites my blood\n" - .string "as a sailing man!\p" - .string "Get on board, youngster!$" + .string "Is it you who brought that odd\n" + .string "ticket?\p" + .string "Where you're trying to go is an island\n" + .string "that's far, far away.\p" + .string "No one knows what awaits there…\p" + .string "The very thought excites my blood\n" + .string "as a sailing man!\p" + .string "Get on board, youngster!$" FarawayIsland_Entrance_Text_SailorReturn: - .string "CAPT. BRINEY can be so maddeningly\n" - .string "fickle…\p" - .string "Do you want to return to LILYCOVE?$" + .string "CAPT. BRINEY can be so maddeningly\n" + .string "fickle…\p" + .string "Do you want to return to LILYCOVE?$" BirthIsland_Harbor_Text_SailorReturn: - .string "What an oddly shaped island, eh?\n" - .string "Do you want to return to LILYCOVE?$" + .string "What an oddly shaped island, eh?\n" + .string "Do you want to return to LILYCOVE?$" EventTicket_Text_OddTicketsWhereTo: - .string "Is it you who brought those\n" - .string "odd tickets?\p" - .string "… … …Hm.\p" - .string "These tickets will get you to islands\n" - .string "that are far, far away.\p" - .string "No one knows what awaits there,\n" - .string "or what may happen there.\p" - .string "The very thought excites my blood\n" - .string "as a sailing man!\p" - .string "Get on board, youngster!\n" - .string "Where shall we sail first?$" + .string "Is it you who brought those\n" + .string "odd tickets?\p" + .string "… … …Hm.\p" + .string "These tickets will get you to islands\n" + .string "that are far, far away.\p" + .string "No one knows what awaits there,\n" + .string "or what may happen there.\p" + .string "The very thought excites my blood\n" + .string "as a sailing man!\p" + .string "Get on board, youngster!\n" + .string "Where shall we sail first?$" NavelRock_Harbor_Text_SailorReturn: - .string "Did… Did you hear that?\n" - .string "That low growling from deep in there.\p" - .string "Are you sure it's safe?\n" - .string "Do you think we should leave?$" + .string "Did… Did you hear that?\n" + .string "That low growling from deep in there.\p" + .string "Are you sure it's safe?\n" + .string "Do you think we should leave?$" FarawayIsland_Entrance_Text_Sign: - .string "The writing is fading as if it was\n" - .string "written a long time ago…\p" - .string "“…ber, 6th day\n" - .string "If any human…sets foot here…\l" - .string "again…et it be a kindhearted pers…\l" - .string "…ith that hope, I depar…”$" + .string "The writing is fading as if it was\n" + .string "written a long time ago…\p" + .string "“…ber, 6th day\n" + .string "If any human…sets foot here…\l" + .string "again…et it be a kindhearted pers…\l" + .string "…ith that hope, I depar…”$" FarawayIsland_Interior_Text_Mew: - .string "Myuu…$" + .string "Myuu…$" diff --git a/data/text/mauville_man.inc b/data/text/mauville_man.inc index 5d9954d9bc..5b7dfbb7b4 100644 --- a/data/text/mauville_man.inc +++ b/data/text/mauville_man.inc @@ -1,63 +1,63 @@ -@ Only contains a portion of the mauville_man text. The rest is in scripts/mauville_man.inc -gText_SoPretty:: +@ Only contains the text for the Mauville Man named Giddy. The rest is in scripts/mauville_man.inc +GiddyText_SoPretty:: .string " so pretty!$" -gText_SoDarling:: +GiddyText_SoDarling:: .string " so darling!$" -gText_SoRelaxed:: +GiddyText_SoRelaxed:: .string " so relaxed!$" -gText_SoSunny:: +GiddyText_SoSunny:: .string " so sunny!$" -gText_SoDesirable:: +GiddyText_SoDesirable:: .string " so desirable!$" -gText_SoExciting:: +GiddyText_SoExciting:: .string " so exciting!$" -gText_SoAmusing:: +GiddyText_SoAmusing:: .string " so amusing!$" -gText_SoMagical:: +GiddyText_SoMagical:: .string " so magical!$" -gOtherText_Is:: +GiddyText_Is:: .string " is$" -gOtherText_DontYouAgree:: +GiddyText_DontYouAgree:: .string "\n" .string "Don't you agree?$" -gMauvilleManText_ISoWantToGoOnAVacation:: +GiddyText_ISoWantToGoOnAVacation:: .string "I so want to go on a vacation.\n" .string "Would you happen to know a nice place?$" -gMauvilleManText_IBoughtCrayonsWith120Colors:: +GiddyText_IBoughtCrayonsWith120Colors:: .string "I bought crayons with 120 colors!\n" .string "Don't you think that's nice?$" -gMauvilleManText_WouldntItBeNiceIfWeCouldFloat:: +GiddyText_WouldntItBeNiceIfWeCouldFloat:: .string "Wouldn't it be nice if we could float\n" .string "away on a cloud of bubbles?$" -gMauvilleManText_WhenYouWriteOnASandyBeach:: +GiddyText_WhenYouWriteOnASandyBeach:: .string "When you write on a sandy beach,\n" .string "they wash away. It makes me sad.$" -gMauvilleManText_WhatsTheBottomOfTheSeaLike:: +GiddyText_WhatsTheBottomOfTheSeaLike:: .string "What's the bottom of the sea like?\n" .string "Just once I would so love to go!$" -gMauvilleManText_WhenYouSeeTheSettingSunDoesIt:: +GiddyText_WhenYouSeeTheSettingSunDoesIt:: .string "When you see the setting sun, does it\n" .string "make you want to go home?$" -gMauvilleManText_LyingBackInTheGreenGrass:: +GiddyText_LyingBackInTheGreenGrass:: .string "Lying back in the green grass…\n" .string "Oh, it's so, so nice!$" -gMauvilleManText_SecretBasesAreSoWonderful:: +GiddyText_SecretBasesAreSoWonderful:: .string "SECRET BASES are so wonderful!\n" .string "Can't you feel the excitement?$" diff --git a/data/text/pc_transfer.inc b/data/text/pc_transfer.inc index 53a82c8f1f..3fa255340b 100644 --- a/data/text/pc_transfer.inc +++ b/data/text/pc_transfer.inc @@ -5,7 +5,8 @@ gText_PkmnTransferredSomeonesPC:: .string "BOX “{STR_VAR_1}.”$" gText_PkmnTransferredLanettesPC:: - .string "{STR_VAR_2} was transferred to\nLANETTE'S PC.\p" + .string "{STR_VAR_2} was transferred to\n" + .string "LANETTE'S PC.\p" .string "It was placed in \n" .string "BOX “{STR_VAR_1}.”$" diff --git a/data/text/pkmn_center_nurse.inc b/data/text/pkmn_center_nurse.inc index 05a186f2fa..eb0a0dc46d 100644 --- a/data/text/pkmn_center_nurse.inc +++ b/data/text/pkmn_center_nurse.inc @@ -1,51 +1,51 @@ gText_WouldYouLikeToRestYourPkmn:: - .string "Hello, and welcome to\n" - .string "the POKéMON CENTER.\p" - .string "We restore your tired POKéMON\n" - .string "to full health.\p" - .string "Would you like to rest your POKéMON?$" + .string "Hello, and welcome to\n" + .string "the POKéMON CENTER.\p" + .string "We restore your tired POKéMON\n" + .string "to full health.\p" + .string "Would you like to rest your POKéMON?$" gText_IllTakeYourPkmn:: - .string "Okay, I'll take your POKéMON\n" - .string "for a few seconds.$" + .string "Okay, I'll take your POKéMON\n" + .string "for a few seconds.$" gText_RestoredPkmnToFullHealth:: - .string "Thank you for waiting.\p" - .string "We've restored your POKéMON\n" - .string "to full health.$" + .string "Thank you for waiting.\p" + .string "We've restored your POKéMON\n" + .string "to full health.$" gText_WeHopeToSeeYouAgain:: - .string "We hope to see you again!$" + .string "We hope to see you again!$" gText_WelcomeCutShort:: - .string "Hello, and welcome to\n" - .string "the POKéMON CENTER.\p" - .string "We restore your tired POKéMON\n" - .string "to full health.\p" - .string "Would you like to…$" + .string "Hello, and welcome to\n" + .string "the POKéMON CENTER.\p" + .string "We restore your tired POKéMON\n" + .string "to full health.\p" + .string "Would you like to…$" gText_NoticesGoldCard:: - .string "Th-that card…\n" - .string "Could it be… The GOLD CARD?!\p" - .string "Oh, the gold color is brilliant!\n" - .string "The four stars seem to sparkle!\p" - .string "I've seen several TRAINERS with\n" - .string "a SILVER CARD before, but, {PLAYER},\l" - .string "you're the first TRAINER I've ever\l" - .string "seen with a GOLD CARD!\p" - .string "Okay, {PLAYER}, please allow me\n" - .string "the honor of resting your POKéMON!$" + .string "Th-that card…\n" + .string "Could it be… The GOLD CARD?!\p" + .string "Oh, the gold color is brilliant!\n" + .string "The four stars seem to sparkle!\p" + .string "I've seen several TRAINERS with\n" + .string "a SILVER CARD before, but, {PLAYER},\l" + .string "you're the first TRAINER I've ever\l" + .string "seen with a GOLD CARD!\p" + .string "Okay, {PLAYER}, please allow me\n" + .string "the honor of resting your POKéMON!$" gText_YouWantTheUsual:: - .string "I'm delighted to see you, {PLAYER}!\n" - .string "You want the usual, am I right?$" + .string "I'm delighted to see you, {PLAYER}!\n" + .string "You want the usual, am I right?$" gText_IllTakeYourPkmn2:: - .string "Okay, I'll take your POKéMON\n" - .string "for a few seconds.$" + .string "Okay, I'll take your POKéMON\n" + .string "for a few seconds.$" gText_ThankYouForWaiting:: - .string "Thank you for waiting.$" + .string "Thank you for waiting.$" gText_WeHopeToSeeYouAgain2:: - .string "We hope to see you again!$" + .string "We hope to see you again!$" diff --git a/data/text/pokedex_rating.inc b/data/text/pokedex_rating.inc index fcb26bc7d3..175aaccc6b 100644 --- a/data/text/pokedex_rating.inc +++ b/data/text/pokedex_rating.inc @@ -3,7 +3,7 @@ gBirchDexRatingText_AreYouCurious:: .string "Are you curious about how your\n" .string "POKéDEX is coming along?$" -gBirchDexRatingText_Cancel: +gBirchDexRatingText_Cancel:: .string "Hm? Oh, you haven't caught enough\n" .string "POKéMON to make it worthwhile.$" diff --git a/data/text/mevent.inc b/data/text/questionnaire.inc similarity index 76% rename from data/text/mevent.inc rename to data/text/questionnaire.inc index 5fb00bc970..a7fd09486f 100644 --- a/data/text/mevent.inc +++ b/data/text/questionnaire.inc @@ -1,14 +1,14 @@ -Mevent_Text_FillOutQuestionnaire:: +Questionnaire_Text_FillOut:: .string "There is a questionnaire.\n" .string "Would you like to fill it out?$" -Mevent_Text_QuestionnaireThankYou:: +Questionnaire_Text_ThankYou:: .string "Thank you for taking the time to\n" .string "fill out our questionnaire.\p" .string "Your feedback will be used for\n" .string "future reference.$" -Mevent_Text_YouKnowThoseWordsGift:: +Questionnaire_Text_YouKnowThoseWordsGift:: .string "Oh, hello!\n" .string "You know those words?\p" .string "That means you must know about\n" @@ -16,27 +16,27 @@ Mevent_Text_YouKnowThoseWordsGift:: .string "From now on, you should be\n" .string "receiving MYSTERY GIFTS!$" -Mevent_Text_YouCanAccessMysteryGift:: +Questionnaire_Text_YouCanAccessMysteryGift:: .string "Once you save your game, you can\n" .string "access the MYSTERY GIFT.$" -Mevent_Text_YouKnowThoseWordsEvent:: +Questionnaire_Text_YouKnowThoseWordsEvent:: .string "Oh, hello!\n" .string "You know those words?\p" .string "That means you must know about\n" .string "the MYSTERY EVENT.$" -Mevent_Text_YouCanAccessMysteryEvent:: +Questionnaire_Text_YouCanAccessMysteryEvent:: .string "Once you save your game, you can\n" .string "access the MYSTERY EVENT.$" -Mevent_Text_TheresATicketForYou:: +MysteryGift_Text_TheresATicketForYou:: .string "Thank you for using the MYSTERY\n" .string "EVENT System.\p" .string "You must be {PLAYER}.\n" .string "There is a ticket here for you.$" -Mevent_Text_TryUsingItAtLilycovePort:: +MysteryGift_Text_TryUsingItAtLilycovePort:: .string "It appears to be for use at\n" .string "the LILYCOVE CITY port.\p" .string "Why not give it a try and see what\n" diff --git a/data/text/secret_base_trainers.inc b/data/text/secret_base_trainers.inc index f1881533ab..ef8ba4dca5 100644 --- a/data/text/secret_base_trainers.inc +++ b/data/text/secret_base_trainers.inc @@ -1,286 +1,286 @@ SecretBase_Text_Trainer0Intro: - .string "Have you made a SECRET BASE already?\p" - .string "I went here, there, everywhere before\n" - .string "choosing this place.\p" - .string "Since you're already here, how would\n" - .string "you like to battle?$" + .string "Have you made a SECRET BASE already?\p" + .string "I went here, there, everywhere before\n" + .string "choosing this place.\p" + .string "Since you're already here, how would\n" + .string "you like to battle?$" SecretBase_Text_Trainer0AcceptBattle: - .string "Okay!\n" - .string "Here we come!$" + .string "Okay!\n" + .string "Here we come!$" SecretBase_Text_Trainer0DeclineBattle: - .string "Hunh?\n" - .string "Oh, you can't now…$" + .string "Hunh?\n" + .string "Oh, you can't now…$" SecretBase_Text_Trainer0Defeated:: - .string "Waaargh! You're too strong!\n" - .string "About me losing… Please keep it secret!$" + .string "Waaargh! You're too strong!\n" + .string "About me losing… Please keep it secret!$" SecretBase_Text_Trainer0PostBattle: - .string "What do you think of my SECRET BASE?\n" - .string "Come visit me again tomorrow.$" + .string "What do you think of my SECRET BASE?\n" + .string "Come visit me again tomorrow.$" SecretBase_Text_Trainer0PreChampion: - .string "Have you made a SECRET BASE already?\p" - .string "I went here, there, everywhere before\n" - .string "choosing this place.\p" - .string "Feel free to hang out!$" + .string "Have you made a SECRET BASE already?\p" + .string "I went here, there, everywhere before\n" + .string "choosing this place.\p" + .string "Feel free to hang out!$" SecretBase_Text_Trainer5Intro: - .string "There're a lot of places where\n" - .string "you can make a SECRET BASE.\p" - .string "But I like this spot best.\n" - .string "Don't you think it's nice?\p" - .string "Oh, would you like to have a battle?$" + .string "There're a lot of places where\n" + .string "you can make a SECRET BASE.\p" + .string "But I like this spot best.\n" + .string "Don't you think it's nice?\p" + .string "Oh, would you like to have a battle?$" SecretBase_Text_Trainer5AcceptBattle: - .string "Okay, here goes!$" + .string "Okay, here goes!$" SecretBase_Text_Trainer5DeclineBattle: - .string "Oh…\n" - .string "You can't now, okay.$" + .string "Oh…\n" + .string "You can't now, okay.$" SecretBase_Text_Trainer5Defeated:: - .string "Hmmm… It's our loss…\n" - .string "But don't tell anyone!\l" - .string "It's a confidential secret!$" + .string "Hmmm… It's our loss…\n" + .string "But don't tell anyone!\l" + .string "It's a confidential secret!$" SecretBase_Text_Trainer5PostBattle: - .string "If you're in this area again,\n" - .string "I hope you'll visit me.$" + .string "If you're in this area again,\n" + .string "I hope you'll visit me.$" SecretBase_Text_Trainer5PreChampion: - .string "There're a lot of places where you can\n" - .string "make a SECRET BASE.\p" - .string "But I like this spot best.\n" - .string "Don't you think it's nice?$" + .string "There're a lot of places where you can\n" + .string "make a SECRET BASE.\p" + .string "But I like this spot best.\n" + .string "Don't you think it's nice?$" SecretBase_Text_Trainer1Intro: - .string "This is a popular spot.\n" - .string "It's always taken.\p" - .string "Oh! Were you thinking about\n" - .string "taking this spot, too?\p" - .string "I'll tell you what, you can have this\n" - .string "spot if you can beat me.$" + .string "This is a popular spot.\n" + .string "It's always taken.\p" + .string "Oh! Were you thinking about\n" + .string "taking this spot, too?\p" + .string "I'll tell you what, you can have this\n" + .string "spot if you can beat me.$" SecretBase_Text_Trainer1AcceptBattle: - .string "Okay!\n" - .string "I'm going to defend my SECRET BASE!$" + .string "Okay!\n" + .string "I'm going to defend my SECRET BASE!$" SecretBase_Text_Trainer1DeclineBattle: - .string "Hunh? Is that right?\n" - .string "You're not interested in this spot?$" + .string "Hunh? Is that right?\n" + .string "You're not interested in this spot?$" SecretBase_Text_Trainer1Defeated:: - .string "I can't keep going!\n" - .string "I surrender!$" + .string "I can't keep going!\n" + .string "I surrender!$" SecretBase_Text_Trainer1PostBattle: - .string "Okay, when I move one day,\n" - .string "this place will be yours!$" + .string "Okay, when I move one day,\n" + .string "this place will be yours!$" SecretBase_Text_Trainer1PreChampion: - .string "This is a popular spot.\n" - .string "It's always taken.\p" - .string "I waited a long time for it to open.\n" - .string "I finally got to use it!$" + .string "This is a popular spot.\n" + .string "It's always taken.\p" + .string "I waited a long time for it to open.\n" + .string "I finally got to use it!$" SecretBase_Text_Trainer6Intro: - .string "Welcome to my POKéMON LAB.\p" - .string "I carry out research on battling in\n" - .string "secrecy.\p" - .string "Would you like to see how strong I am?$" + .string "Welcome to my POKéMON LAB.\p" + .string "I carry out research on battling in\n" + .string "secrecy.\p" + .string "Would you like to see how strong I am?$" SecretBase_Text_Trainer6AcceptBattle: - .string "I'm going to go all out!$" + .string "I'm going to go all out!$" SecretBase_Text_Trainer6DeclineBattle: - .string "Oh.\n" - .string "Some other time, then!$" + .string "Oh.\n" + .string "Some other time, then!$" SecretBase_Text_Trainer6Defeated:: - .string "Hmm… I've still got lots to learn.\n" - .string "I have to study some more.$" + .string "Hmm… I've still got lots to learn.\n" + .string "I have to study some more.$" SecretBase_Text_Trainer6PostBattle: - .string "Thanks for battling with me.\n" - .string "Please come back again tomorrow.$" + .string "Thanks for battling with me.\n" + .string "Please come back again tomorrow.$" SecretBase_Text_Trainer6PreChampion: - .string "Welcome to my POKéMON LAB.\p" - .string "I carry out research on battling in\n" - .string "secrecy.$" + .string "Welcome to my POKéMON LAB.\p" + .string "I carry out research on battling in\n" + .string "secrecy.$" SecretBase_Text_Trainer2Intro: - .string "A big mansion is nice, but I like this\n" - .string "sort of place more.\p" - .string "I like it because all kinds of people\n" - .string "come visit me.\p" - .string "So, how would you like a battle?$" + .string "A big mansion is nice, but I like this\n" + .string "sort of place more.\p" + .string "I like it because all kinds of people\n" + .string "come visit me.\p" + .string "So, how would you like a battle?$" SecretBase_Text_Trainer2AcceptBattle: - .string "That's the way!$" + .string "That's the way!$" SecretBase_Text_Trainer2DeclineBattle: - .string "When you're ready, give me a shout!$" + .string "When you're ready, give me a shout!$" SecretBase_Text_Trainer2Defeated:: - .string "Aww! Done in!\n" - .string "But it's still fun to battle!$" + .string "Aww! Done in!\n" + .string "But it's still fun to battle!$" SecretBase_Text_Trainer2PostBattle: - .string "Well, anyway, I should go buy some\n" - .string "decorations and furniture.\p" - .string "I want my SECRET BASE to be a place\n" - .string "other people can enjoy.$" + .string "Well, anyway, I should go buy some\n" + .string "decorations and furniture.\p" + .string "I want my SECRET BASE to be a place\n" + .string "other people can enjoy.$" SecretBase_Text_Trainer2PreChampion: - .string "A big mansion is nice, but I like this\n" - .string "sort of place more.\p" - .string "I like it because all kinds of people\n" - .string "come visit me.$" + .string "A big mansion is nice, but I like this\n" + .string "sort of place more.\p" + .string "I like it because all kinds of people\n" + .string "come visit me.$" SecretBase_Text_Trainer7Intro: - .string "I simply adore shopping for decorations\n" - .string "and furniture.\p" - .string "I also love raising POKéMON just\n" - .string "as much.\p" - .string "If you would be so kind, will you battle\n" - .string "with my POKéMON?$" + .string "I simply adore shopping for decorations\n" + .string "and furniture.\p" + .string "I also love raising POKéMON just\n" + .string "as much.\p" + .string "If you would be so kind, will you battle\n" + .string "with my POKéMON?$" SecretBase_Text_Trainer7AcceptBattle: - .string "Thank you.\n" - .string "Shall we begin?$" + .string "Thank you.\n" + .string "Shall we begin?$" SecretBase_Text_Trainer7DeclineBattle: - .string "Oh.\n" - .string "How disappointing…$" + .string "Oh.\n" + .string "How disappointing…$" SecretBase_Text_Trainer7Defeated:: - .string "I concede…$" + .string "I concede…$" SecretBase_Text_Trainer7PostBattle: - .string "That was all in good fun!\n" - .string "I should go enjoy shopping now.$" + .string "That was all in good fun!\n" + .string "I should go enjoy shopping now.$" SecretBase_Text_Trainer7PreChampion: - .string "I simply adore shopping for decorations\n" - .string "and furniture.\p" - .string "I also love raising POKéMON just\n" - .string "as much.$" + .string "I simply adore shopping for decorations\n" + .string "and furniture.\p" + .string "I also love raising POKéMON just\n" + .string "as much.$" SecretBase_Text_Trainer3Intro: - .string "Some people make their SECRET BASES in\n" - .string "hard-to-find places.\l" - .string "Do they want to just lie low?\p" - .string "But since you found me, how about we\n" - .string "have a battle?$" + .string "Some people make their SECRET BASES in\n" + .string "hard-to-find places.\l" + .string "Do they want to just lie low?\p" + .string "But since you found me, how about we\n" + .string "have a battle?$" SecretBase_Text_Trainer3AcceptBattle: - .string "I'm not going down easily!$" + .string "I'm not going down easily!$" SecretBase_Text_Trainer3DeclineBattle: - .string "Oh… Are you maybe tired from searching\n" - .string "for this place?$" + .string "Oh… Are you maybe tired from searching\n" + .string "for this place?$" SecretBase_Text_Trainer3Defeated:: - .string "I went down…$" + .string "I went down…$" SecretBase_Text_Trainer3PostBattle: - .string "Where's your SECRET BASE?\n" - .string "I should go visit you there.$" + .string "Where's your SECRET BASE?\n" + .string "I should go visit you there.$" SecretBase_Text_Trainer3PreChampion: - .string "Some people make their SECRET BASES in\n" - .string "hard-to-find places.\l" - .string "Do they want to just lie low?$" + .string "Some people make their SECRET BASES in\n" + .string "hard-to-find places.\l" + .string "Do they want to just lie low?$" SecretBase_Text_Trainer8Intro: - .string "People have told me that you can get\n" - .string "decorations in several ways.\p" - .string "We should have a race to see who can\n" - .string "get nicer decorations and furniture!\p" - .string "In the meantime, want to battle?$" + .string "People have told me that you can get\n" + .string "decorations in several ways.\p" + .string "We should have a race to see who can\n" + .string "get nicer decorations and furniture!\p" + .string "In the meantime, want to battle?$" SecretBase_Text_Trainer8AcceptBattle: - .string "This is my SECRET BASE.\n" - .string "I can't lose!$" + .string "This is my SECRET BASE.\n" + .string "I can't lose!$" SecretBase_Text_Trainer8DeclineBattle: - .string "I'll battle with you anytime.$" + .string "I'll battle with you anytime.$" SecretBase_Text_Trainer8Defeated:: - .string "Huh?\n" - .string "Did I just lose?$" + .string "Huh?\n" + .string "Did I just lose?$" SecretBase_Text_Trainer8PostBattle: - .string "I won't lose at collecting decorations.\n" - .string "Come visit again!$" + .string "I won't lose at collecting decorations.\n" + .string "Come visit again!$" SecretBase_Text_Trainer8PreChampion: - .string "People have told me that you can get\n" - .string "decorations in several ways.\p" - .string "We should have a race to see who can\n" - .string "get nicer decorations and furniture!$" + .string "People have told me that you can get\n" + .string "decorations in several ways.\p" + .string "We should have a race to see who can\n" + .string "get nicer decorations and furniture!$" SecretBase_Text_Trainer4Intro: - .string "I found a spot I liked, and I did it up\n" - .string "with my favorite decorations.\p" - .string "I raise my favorite POKéMON and grow\n" - .string "stronger with it.\p" - .string "That's what I do.\n" - .string "Want to battle with me?$" + .string "I found a spot I liked, and I did it up\n" + .string "with my favorite decorations.\p" + .string "I raise my favorite POKéMON and grow\n" + .string "stronger with it.\p" + .string "That's what I do.\n" + .string "Want to battle with me?$" SecretBase_Text_Trainer4AcceptBattle: - .string "Show me what you're made of!$" + .string "Show me what you're made of!$" SecretBase_Text_Trainer4DeclineBattle: - .string "I guess there are times when you're not\n" - .string "into it.$" + .string "I guess there are times when you're not\n" + .string "into it.$" SecretBase_Text_Trainer4Defeated:: - .string "I know exactly what you're made of now.$" + .string "I know exactly what you're made of now.$" SecretBase_Text_Trainer4PostBattle: - .string "We can both become stronger.\n" - .string "Let's keep at it!$" + .string "We can both become stronger.\n" + .string "Let's keep at it!$" SecretBase_Text_Trainer4PreChampion: - .string "I found a spot I liked, and I did it up\n" - .string "with my favorite decorations.\p" - .string "I raise my favorite POKéMON and grow\n" - .string "stronger with it.\p" - .string "Every day is a great day.$" + .string "I found a spot I liked, and I did it up\n" + .string "with my favorite decorations.\p" + .string "I raise my favorite POKéMON and grow\n" + .string "stronger with it.\p" + .string "Every day is a great day.$" SecretBase_Text_Trainer9Intro: - .string "You can learn a lot about the taste\n" - .string "and sense of people by the kinds of\l" - .string "decorations they have, and how they\l" - .string "display them.\p" - .string "What do you think of my taste?\n" - .string "Are you speechless?\p" - .string "Want to see my taste in battling?$" + .string "You can learn a lot about the taste\n" + .string "and sense of people by the kinds of\l" + .string "decorations they have, and how they\l" + .string "display them.\p" + .string "What do you think of my taste?\n" + .string "Are you speechless?\p" + .string "Want to see my taste in battling?$" SecretBase_Text_Trainer9AcceptBattle: - .string "There's no holding back!$" + .string "There's no holding back!$" SecretBase_Text_Trainer9DeclineBattle: - .string "I'll be happy to demonstrate my style\n" - .string "anytime.$" + .string "I'll be happy to demonstrate my style\n" + .string "anytime.$" SecretBase_Text_Trainer9Defeated:: - .string "You're supremely talented!\n" - .string "Your power seems to be limitless…$" + .string "You're supremely talented!\n" + .string "Your power seems to be limitless…$" SecretBase_Text_Trainer9PostBattle: - .string "What did you think of my style?\n" - .string "I'll keep on polishing it!$" + .string "What did you think of my style?\n" + .string "I'll keep on polishing it!$" SecretBase_Text_Trainer9PreChampion: - .string "You can learn a lot about the taste\n" - .string "and sense of people by the kinds of\l" - .string "decorations they have, and how they\l" - .string "display them.\p" - .string "What do you think of my taste?\n" - .string "Are you speechless?$" + .string "You can learn a lot about the taste\n" + .string "and sense of people by the kinds of\l" + .string "decorations they have, and how they\l" + .string "display them.\p" + .string "What do you think of my taste?\n" + .string "Are you speechless?$" diff --git a/data/text/surf.inc b/data/text/surf.inc index 453a3d5b14..13854f7aa7 100644 --- a/data/text/surf.inc +++ b/data/text/surf.inc @@ -1,5 +1,6 @@ gText_WantToUseSurf:: - .string "The water is dyed a deep blue…\nWould you like to SURF?$" + .string "The water is dyed a deep blue…\n" + .string "Would you like to SURF?$" gText_PlayerUsedSurf:: .string "{STR_VAR_1} used SURF!$" diff --git a/data/text/tv.inc b/data/text/tv.inc index 68b8421584..6cfc289d2c 100644 --- a/data/text/tv.inc +++ b/data/text/tv.inc @@ -166,7 +166,7 @@ BattleFrontier_BattleTowerLobby_Text_LookingForwardToNextBattle:: .string "I'll be looking forward to your\n" .string "next battle!$" -gTVBravoTrainerBattleTowerText00:: +BravoTrainerBattleTower_Text_Intro:: .string "Yeah!\n" .string "It's BRAVO TRAINER time!\p" .string "Today, we're going to profile {STR_VAR_1},\n" @@ -174,12 +174,12 @@ gTVBravoTrainerBattleTowerText00:: .string "For the challenge, {STR_VAR_1} entered\n" .string "one wicked {STR_VAR_2}.$" -gTVBravoTrainerBattleTowerText01:: +BravoTrainerBattleTower_Text_NewRecord:: .string "The pair set a new record of {STR_VAR_2} wins\n" .string "in a row in {STR_VAR_1} competition!\l" .string "Bravo, TRAINER!$" -gTVBravoTrainerBattleTowerText02:: +BravoTrainerBattleTower_Text_Lost:: .string "The twosome finally succumbed to\n" .string "{STR_VAR_1} in match number {STR_VAR_2}.\l" .string "Nice try, TRAINER!\p" @@ -188,7 +188,7 @@ gTVBravoTrainerBattleTowerText02:: .string "We asked the TRAINER for impressions\n" .string "on the match with {STR_VAR_1}.$" -gTVBravoTrainerBattleTowerText03:: +BravoTrainerBattleTower_Text_Won:: .string "The twosome won it all by defeating\n" .string "{STR_VAR_1}'s {STR_VAR_2} thoroughly.\l" .string "Bravo, TRAINER!\p" @@ -197,7 +197,7 @@ gTVBravoTrainerBattleTowerText03:: .string "We asked the TRAINER for impressions\n" .string "on the moment of glory.$" -gTVBravoTrainerBattleTowerText04:: +BravoTrainerBattleTower_Text_LostFinal:: .string "After a string of wins, the pair finally\n" .string "succumbed to {STR_VAR_1}'s {STR_VAR_2},\l" .string "their final hurdle.\p" @@ -208,7 +208,7 @@ gTVBravoTrainerBattleTowerText04:: .string "We asked the TRAINER for impressions\n" .string "on battling the celebrity pair.$" -gTVBravoTrainerBattleTowerText05:: +BravoTrainerBattleTower_Text_Satisfied:: .string "This is what the TRAINER had to say:\n" .string "“I'm satisfied!”\p" .string "Now isn't that a refreshing reply?\n" @@ -218,7 +218,7 @@ gTVBravoTrainerBattleTowerText05:: .string "I found out exactly how satisfied\n" .string "when I heard the TRAINER say this:$" -gTVBravoTrainerBattleTowerText06:: +BravoTrainerBattleTower_Text_Unsatisfied:: .string "This is what the TRAINER had to say:\n" .string "“I'm not satisfied…”\p" .string "Our TRAINER was obviously a little down\n" @@ -228,22 +228,22 @@ gTVBravoTrainerBattleTowerText06:: .string "Anyway, I found out how dissatisfied\n" .string "our TRAINER was when I heard this:$" -gTVBravoTrainerBattleTowerText07:: +BravoTrainerBattleTower_Text_None1:: .string "None$" -gTVBravoTrainerBattleTowerText08:: +BravoTrainerBattleTower_Text_None2:: .string "None$" -gTVBravoTrainerBattleTowerText09:: +BravoTrainerBattleTower_Text_None3:: .string "None$" -gTVBravoTrainerBattleTowerText10:: +BravoTrainerBattleTower_Text_None4:: .string "None$" -gTVBravoTrainerBattleTowerText11:: +BravoTrainerBattleTower_Text_Response:: .string "“{STR_VAR_1}.”$" -gTVBravoTrainerBattleTowerText12:: +BravoTrainerBattleTower_Text_ResponseSatisfied:: .string "“{STR_VAR_1}.”\n" .string "Now isn't that great?\p" .string "It really expresses {STR_VAR_2}'s joy,\n" @@ -252,7 +252,7 @@ gTVBravoTrainerBattleTowerText12:: .string "end… It really was what you'd call\l" .string "“{STR_VAR_1}”!$" -gTVBravoTrainerBattleTowerText13:: +BravoTrainerBattleTower_Text_ResponseUnsatisfied:: .string "“{STR_VAR_1}.”\n" .string "Now isn't that fitting?\p" .string "That battle with {STR_VAR_3} at the\n" @@ -261,7 +261,7 @@ gTVBravoTrainerBattleTowerText13:: .string "{STR_VAR_2}'s disappointment comes across\n" .string "loud and clear, I'd say!$" -gTVBravoTrainerBattleTowerText14:: +BravoTrainerBattleTower_Text_Outro:: .string "Bravo, {STR_VAR_1}!\n" .string "Bravo, {STR_VAR_2}!\p" .string "I hope we can count on seeing\n" diff --git a/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/0.png b/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/0.png index b5621be76e..1de3fe7c3d 100644 Binary files a/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/0.png and b/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/0.png differ diff --git a/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/1.png b/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/1.png index 56a46ce92a..b9f80f08df 100644 Binary files a/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/1.png and b/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/1.png differ diff --git a/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/2.png b/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/2.png index e51f5b5312..a03c965a87 100644 Binary files a/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/2.png and b/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/2.png differ diff --git a/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/3.png b/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/3.png index 3ec6ff703c..5bdf19a359 100644 Binary files a/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/3.png and b/data/tilesets/secondary/battle_frontier_outside_east/anim/flag/3.png differ diff --git a/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/0.png b/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/0.png index b5621be76e..1de3fe7c3d 100644 Binary files a/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/0.png and b/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/0.png differ diff --git a/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/1.png b/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/1.png index 56a46ce92a..b9f80f08df 100644 Binary files a/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/1.png and b/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/1.png differ diff --git a/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/2.png b/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/2.png index e51f5b5312..a03c965a87 100644 Binary files a/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/2.png and b/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/2.png differ diff --git a/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/3.png b/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/3.png index 3ec6ff703c..5bdf19a359 100644 Binary files a/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/3.png and b/data/tilesets/secondary/battle_frontier_outside_west/anim/flag/3.png differ diff --git a/data/tilesets/secondary/ever_grande/anim/flowers/0.png b/data/tilesets/secondary/ever_grande/anim/flowers/0.png index 6493e2e821..ae91986451 100644 Binary files a/data/tilesets/secondary/ever_grande/anim/flowers/0.png and b/data/tilesets/secondary/ever_grande/anim/flowers/0.png differ diff --git a/data/tilesets/secondary/ever_grande/anim/flowers/1.png b/data/tilesets/secondary/ever_grande/anim/flowers/1.png index 6493e2e821..ae91986451 100644 Binary files a/data/tilesets/secondary/ever_grande/anim/flowers/1.png and b/data/tilesets/secondary/ever_grande/anim/flowers/1.png differ diff --git a/data/tilesets/secondary/ever_grande/anim/flowers/2.png b/data/tilesets/secondary/ever_grande/anim/flowers/2.png index 0b1f568cbf..05b9796370 100644 Binary files a/data/tilesets/secondary/ever_grande/anim/flowers/2.png and b/data/tilesets/secondary/ever_grande/anim/flowers/2.png differ diff --git a/data/tilesets/secondary/ever_grande/anim/flowers/3.png b/data/tilesets/secondary/ever_grande/anim/flowers/3.png index edc7220b8f..a4cea04e63 100644 Binary files a/data/tilesets/secondary/ever_grande/anim/flowers/3.png and b/data/tilesets/secondary/ever_grande/anim/flowers/3.png differ diff --git a/data/tilesets/secondary/ever_grande/anim/flowers/4.png b/data/tilesets/secondary/ever_grande/anim/flowers/4.png index 6493e2e821..ae91986451 100644 Binary files a/data/tilesets/secondary/ever_grande/anim/flowers/4.png and b/data/tilesets/secondary/ever_grande/anim/flowers/4.png differ diff --git a/data/tilesets/secondary/ever_grande/anim/flowers/5.png b/data/tilesets/secondary/ever_grande/anim/flowers/5.png index 6493e2e821..ae91986451 100644 Binary files a/data/tilesets/secondary/ever_grande/anim/flowers/5.png and b/data/tilesets/secondary/ever_grande/anim/flowers/5.png differ diff --git a/data/tilesets/secondary/ever_grande/anim/flowers/6.png b/data/tilesets/secondary/ever_grande/anim/flowers/6.png index 4d43dfd0a9..c45b6188cf 100644 Binary files a/data/tilesets/secondary/ever_grande/anim/flowers/6.png and b/data/tilesets/secondary/ever_grande/anim/flowers/6.png differ diff --git a/data/tilesets/secondary/ever_grande/anim/flowers/7.png b/data/tilesets/secondary/ever_grande/anim/flowers/7.png index 4d43dfd0a9..c45b6188cf 100644 Binary files a/data/tilesets/secondary/ever_grande/anim/flowers/7.png and b/data/tilesets/secondary/ever_grande/anim/flowers/7.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_1/0.png b/data/tilesets/secondary/mauville/anim/flower_1/0.png index 263dba0700..d17b8ca906 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_1/0.png and b/data/tilesets/secondary/mauville/anim/flower_1/0.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_1/1.png b/data/tilesets/secondary/mauville/anim/flower_1/1.png index 66179f13dd..2a30d57804 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_1/1.png and b/data/tilesets/secondary/mauville/anim/flower_1/1.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_1/2.png b/data/tilesets/secondary/mauville/anim/flower_1/2.png index 63250e7b03..69cacfda67 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_1/2.png and b/data/tilesets/secondary/mauville/anim/flower_1/2.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_1/3.png b/data/tilesets/secondary/mauville/anim/flower_1/3.png index b1015d370b..60cf30bb43 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_1/3.png and b/data/tilesets/secondary/mauville/anim/flower_1/3.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_1/4.png b/data/tilesets/secondary/mauville/anim/flower_1/4.png index 1e8cb84afe..01162ac5c4 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_1/4.png and b/data/tilesets/secondary/mauville/anim/flower_1/4.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_2/0.png b/data/tilesets/secondary/mauville/anim/flower_2/0.png index 263dba0700..be6b131cf3 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_2/0.png and b/data/tilesets/secondary/mauville/anim/flower_2/0.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_2/1.png b/data/tilesets/secondary/mauville/anim/flower_2/1.png index 66179f13dd..715205f649 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_2/1.png and b/data/tilesets/secondary/mauville/anim/flower_2/1.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_2/2.png b/data/tilesets/secondary/mauville/anim/flower_2/2.png index 63250e7b03..6a5ccf7309 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_2/2.png and b/data/tilesets/secondary/mauville/anim/flower_2/2.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_2/3.png b/data/tilesets/secondary/mauville/anim/flower_2/3.png index b1015d370b..26a621fe13 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_2/3.png and b/data/tilesets/secondary/mauville/anim/flower_2/3.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_2/4.png b/data/tilesets/secondary/mauville/anim/flower_2/4.png index 1e8cb84afe..03603068ec 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_2/4.png and b/data/tilesets/secondary/mauville/anim/flower_2/4.png differ diff --git a/data/unknown_serial_data.s b/data/unknown_serial_data.s deleted file mode 100644 index 2fb1ba42bb..0000000000 --- a/data/unknown_serial_data.s +++ /dev/null @@ -1,5 +0,0 @@ - .section .rodata - - .align 2 -gUnknown_089A3470:: - .incbin "data/unknown_serial_data.bin" diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md deleted file mode 100644 index ce06c14898..0000000000 --- a/docs/bugs_and_glitches.md +++ /dev/null @@ -1,51 +0,0 @@ - -# Bugs and Glitches - -These are known bugs and glitches in the original Pokémon Emerald game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash. Defining the `BUGFIX` and `UBFIX` preprocessor variables will fix some of these automatically. `UBFIX` will already be defined for MODERN builds. - -Fixes are written in the `diff` format. If you've used Git before, this should look familiar: - -```diff - this is some code --delete red - lines -+add green + lines -``` - -## Contents - -- [Scrolling through items in the bag causes the image to flicker](#scrolling-through-items-in-the-bag-causes-the-image-to-flicker) - - -## Scrolling through items in the bag causes the image to flicker - -**Fix:** Add the following function to [src/item_menu_icons.c](https://github.com/pret/pokeemerald/blob/master/src/item_menu_icons.c): -```diff -+void HideBagItemIconSprite(u8 id) -+{ -+ u8 *spriteId = &gBagMenu->spriteId[10]; -+ if (spriteId[id] != 0xFF) -+ { -+ gSprites[spriteId[id]].invisible = TRUE; -+ } -+} - -``` - -and its corresponding declaration in [include/item_menu_icons.h](https://github.com/pret/pokeemerald/blob/master/include/item_menu_icons.h): - -```diff -+void HideBagItemIconSprite(u8 id); - -``` - -Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/pret/pokeemerald/blob/master/src/item_menu.c): - -```diff - ... -{ -- RemoveBagItemIconSprite(1 ^ gBagMenu->itemIconSlot); -+ HideBagItemIconSprite(gBagMenu->itemIconSlot ^ 1); -+ RemoveBagItemIconSprite(gBagMenu->itemIconSlot); - if (itemIndex != LIST_CANCEL) - ... -``` diff --git a/gflib/bg.c b/gflib/bg.c index ec7c2113b1..f300e4609d 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -33,7 +33,7 @@ struct BgConfig2 u32 basePalette:4; u32 unk_3:18; - void* tilemap; + void *tilemap; s32 bg_x; s32 bg_y; }; @@ -42,10 +42,12 @@ static struct BgControl sGpuBgConfigs; static struct BgConfig2 sGpuBgConfigs2[NUM_BACKGROUNDS]; static u32 sDmaBusyBitfield[NUM_BACKGROUNDS]; -u32 gUnneededFireRedVariable; +u32 gWindowTileAutoAllocEnabled; static const struct BgConfig sZeroedBgControlStruct = { 0 }; +static u32 GetBgType(u8 bg); + void ResetBgs(void) { ResetBgControlStructs(); @@ -181,14 +183,14 @@ u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode) case 0x1: offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE; offset = destOffset + offset; - cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0); + cursor = RequestDma3Copy(src, (void *)(offset + BG_VRAM), size, 0); if (cursor == -1) return -1; break; case 0x2: offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE; offset = destOffset + offset; - cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0); + cursor = RequestDma3Copy(src, (void *)(offset + BG_VRAM), size, 0); if (cursor == -1) return -1; break; @@ -288,7 +290,8 @@ bool8 IsInvalidBg(u8 bg) return FALSE; } -int DummiedOutFireRedLeafGreenTileAllocFunc(int a1, int a2, int a3, int a4) +// From FRLG. Dummied out. +int BgTileAllocOp(int bg, int offset, int count, int mode) { return 0; } @@ -303,7 +306,7 @@ void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable) sDmaBusyBitfield[i] = 0; } - gUnneededFireRedVariable = leftoverFireRedLeafGreenVariable; + gWindowTileAutoAllocEnabled = leftoverFireRedLeafGreenVariable; } void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates) @@ -369,7 +372,7 @@ void SetBgMode(u8 bgMode) SetBgModeInternal(bgMode); } -u16 LoadBgTiles(u8 bg, const void* src, u16 size, u16 destOffset) +u16 LoadBgTiles(u8 bg, const void *src, u16 size, u16 destOffset) { u16 tileOffset; u8 cursor; @@ -392,10 +395,8 @@ u16 LoadBgTiles(u8 bg, const void* src, u16 size, u16 destOffset) sDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20)); - if (gUnneededFireRedVariable == 1) - { - DummiedOutFireRedLeafGreenTileAllocFunc(bg, tileOffset / 0x20, size / 0x20, 1); - } + if (gWindowTileAutoAllocEnabled == TRUE) + BgTileAllocOp(bg, tileOffset / 0x20, size / 0x20, 1); return cursor; } @@ -421,7 +422,7 @@ u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset) if (!IsInvalidBg32(bg)) { u16 paletteOffset = (sGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2); - cursor = RequestDma3Copy(src, (void*)(paletteOffset + BG_PLTT), size, 0); + cursor = RequestDma3Copy(src, (void *)(paletteOffset + BG_PLTT), size, 0); if (cursor == -1) { @@ -523,9 +524,9 @@ u16 GetBgAttribute(u8 bg, u8 attributeId) case BG_ATTR_METRIC: switch (GetBgType(bg)) { - case 0: + case BG_TYPE_NORMAL: return GetBgMetricTextMode(bg, 0) * 0x800; - case 1: + case BG_TYPE_AFFINE: return GetBgMetricAffineMode(bg, 0) * 0x100; default: return 0; @@ -552,14 +553,14 @@ s32 ChangeBgX(u8 bg, s32 value, u8 op) switch (op) { - case 0: + case BG_COORD_SET: default: sGpuBgConfigs2[bg].bg_x = value; break; - case 1: + case BG_COORD_ADD: sGpuBgConfigs2[bg].bg_x += value; break; - case 2: + case BG_COORD_SUB: sGpuBgConfigs2[bg].bg_x -= value; break; } @@ -632,14 +633,14 @@ s32 ChangeBgY(u8 bg, s32 value, u8 op) switch (op) { - case 0: + case BG_COORD_SET: default: sGpuBgConfigs2[bg].bg_y = value; break; - case 1: + case BG_COORD_ADD: sGpuBgConfigs2[bg].bg_y += value; break; - case 2: + case BG_COORD_SUB: sGpuBgConfigs2[bg].bg_y -= value; break; } @@ -702,14 +703,14 @@ s32 ChangeBgY_ScreenOff(u8 bg, s32 value, u8 op) switch (op) { - case 0: + case BG_COORD_SET: default: sGpuBgConfigs2[bg].bg_y = value; break; - case 1: + case BG_COORD_ADD: sGpuBgConfigs2[bg].bg_y += value; break; - case 2: + case BG_COORD_SUB: sGpuBgConfigs2[bg].bg_y -= value; break; } @@ -775,75 +776,75 @@ void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dis SetBgAffineInternal(bg, srcCenterX, srcCenterY, dispCenterX, dispCenterY, scaleX, scaleY, rotationAngle); } -u8 Unused_AdjustBgMosaic(u8 a1, u8 a2) +u8 Unused_AdjustBgMosaic(u8 val, u8 mode) { - u16 result = GetGpuReg(REG_OFFSET_MOSAIC); - s16 test1 = result & 0xF; - s16 test2 = (result >> 4) & 0xF; + u16 mosaic = GetGpuReg(REG_OFFSET_MOSAIC); + s16 bgH = mosaic & 0xF; + s16 bgV = (mosaic >> 4) & 0xF; - result &= 0xFF00; + mosaic &= 0xFF00; // clear background mosaic sizes - switch (a2) + switch (mode) { - case 0: + case BG_MOSAIC_SET_HV: default: - test1 = a1 & 0xF; - test2 = a1 >> 0x4; + bgH = val & 0xF; + bgV = val >> 0x4; break; - case 1: - test1 = a1 & 0xF; + case BG_MOSAIC_SET_H: + bgH = val & 0xF; break; - case 2: - if ((test1 + a1) > 0xF) + case BG_MOSAIC_ADD_H: + if ((bgH + val) > 0xF) { - test1 = 0xF; + bgH = 0xF; } else { - test1 += a1; + bgH += val; } break; - case 3: - if ((test1 - a1) < 0) + case BG_MOSAIC_SUB_H: + if ((bgH - val) < 0) { - test1 = 0x0; + bgH = 0x0; } else { - test1 -= a1; + bgH -= val; } break; - case 4: - test2 = a1 & 0xF; + case BG_MOSAIC_SET_V: + bgV = val & 0xF; break; - case 5: - if ((test2 + a1) > 0xF) + case BG_MOSAIC_ADD_V: + if ((bgV + val) > 0xF) { - test2 = 0xF; + bgV = 0xF; } else { - test2 += a1; + bgV += val; } break; - case 6: - if ((test2 - a1) < 0) + case BG_MOSAIC_SUB_V: + if ((bgV - val) < 0) { - test2 = 0x0; + bgV = 0x0; } else { - test2 -= a1; + bgV -= val; } break; } - result |= ((test2 << 0x4) & 0xF0); - result |= (test1 & 0xF); + mosaic |= ((bgV << 0x4) & 0xF0); + mosaic |= (bgH & 0xF); - SetGpuReg(REG_OFFSET_MOSAIC, result); + SetGpuReg(REG_OFFSET_MOSAIC, mosaic); - return result; + return mosaic; } void SetBgTilemapBuffer(u8 bg, void *tilemap) @@ -862,7 +863,7 @@ void UnsetBgTilemapBuffer(u8 bg) } } -void* GetBgTilemapBuffer(u8 bg) +void *GetBgTilemapBuffer(u8 bg) { if (IsInvalidBg32(bg)) return NULL; @@ -891,10 +892,10 @@ void CopyBgTilemapBufferToVram(u8 bg) { switch (GetBgType(bg)) { - case 0: + case BG_TYPE_NORMAL: sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800; break; - case 1: + case BG_TYPE_AFFINE: sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100; break; default: @@ -905,7 +906,7 @@ void CopyBgTilemapBufferToVram(u8 bg) } } -void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height) +void CopyToBgTilemapBufferRect(u8 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height) { u16 destX16; u16 destY16; @@ -915,27 +916,27 @@ void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 wi { switch (GetBgType(bg)) { - case 0: + case BG_TYPE_NORMAL: { const u16 * srcCopy = src; for (destY16 = destY; destY16 < (destY + height); destY16++) { for (destX16 = destX; destX16 < (destX + width); destX16++) { - ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; + ((u16 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; } } break; } - case 1: + case BG_TYPE_AFFINE: { - const u8 * srcCopy = src; + const u8 *srcCopy = src; mode = GetBgMetricAffineMode(bg, 0x1); for (destY16 = destY; destY16 < (destY + height); destY16++) { for (destX16 = destX; destX16 < (destX + width); destX16++) { - ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; + ((u8 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; } } break; @@ -949,7 +950,7 @@ void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u CopyRectToBgTilemapBufferRect(bg, src, 0, 0, rectWidth, rectHeight, destX, destY, rectWidth, rectHeight, palette, 0, 0); } -void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 unused, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, s16 palette1, s16 tileOffset) +void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, s16 tileOffset, s16 palette2) { u16 screenWidth, screenHeight, screenSize; u16 var; @@ -963,30 +964,30 @@ void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 screenHeight = GetBgMetricTextMode(bg, 0x2) * 0x20; switch (GetBgType(bg)) { - case 0: + case BG_TYPE_NORMAL: srcPtr = src + ((srcY * srcWidth) + srcX) * 2; - for (i = destX; i < (destX + rectWidth); i++) + for (i = destY; i < (destY + rectHeight); i++) { - for (j = srcHeight; j < (srcHeight + destY); j++) + for (j = destX; j < (destX + rectWidth); j++) { u16 index = GetTileMapIndexFromCoords(j, i, screenSize, screenWidth, screenHeight); - CopyTileMapEntry(srcPtr, sGpuBgConfigs2[bg].tilemap + (index * 2), rectHeight, palette1, tileOffset); + CopyTileMapEntry(srcPtr, sGpuBgConfigs2[bg].tilemap + (index * 2), palette1, tileOffset, palette2); srcPtr += 2; } - srcPtr += (srcWidth - destY) * 2; + srcPtr += (srcWidth - rectWidth) * 2; } break; - case 1: + case BG_TYPE_AFFINE: srcPtr = src + ((srcY * srcWidth) + srcX); var = GetBgMetricAffineMode(bg, 0x1); - for (i = destX; i < (destX + rectWidth); i++) + for (i = destY; i < (destY + rectHeight); i++) { - for (j = srcHeight; j < (srcHeight + destY); j++) + for (j = destX; j < (destX + rectWidth); j++) { - *(u8*)(sGpuBgConfigs2[bg].tilemap + ((var * i) + j)) = *(u8*)(srcPtr) + palette1; + *(u8 *)(sGpuBgConfigs2[bg].tilemap + ((var * i) + j)) = *(u8 *)(srcPtr) + tileOffset; srcPtr++; } - srcPtr += (srcWidth - destY); + srcPtr += (srcWidth - rectWidth); } break; } @@ -1003,22 +1004,22 @@ void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, { switch (GetBgType(bg)) { - case 0: + case BG_TYPE_NORMAL: for (y16 = y; y16 < (y + height); y16++) { for (x16 = x; x16 < (x + width); x16++) { - ((u16*)sGpuBgConfigs2[bg].tilemap)[((y16 * 0x20) + x16)] = tileNum; + ((u16 *)sGpuBgConfigs2[bg].tilemap)[((y16 * 0x20) + x16)] = tileNum; } } break; - case 1: + case BG_TYPE_AFFINE: mode = GetBgMetricAffineMode(bg, 0x1); for (y16 = y; y16 < (y + height); y16++) { for (x16 = x; x16 < (x + width); x16++) { - ((u8*)sGpuBgConfigs2[bg].tilemap)[((y16 * mode) + x16)] = tileNum; + ((u8 *)sGpuBgConfigs2[bg].tilemap)[((y16 * mode) + x16)] = tileNum; } } break; @@ -1046,24 +1047,24 @@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 widt mode2 = GetBgMetricTextMode(bg, 0x2) * 0x20; switch (GetBgType(bg)) { - case 0: + case BG_TYPE_NORMAL: for (y16 = y; y16 < (y + height); y16++) { for (x16 = x; x16 < (x + width); x16++) { - CopyTileMapEntry(&firstTileNum, &((u16*)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(x16, y16, attribute, mode, mode2)], paletteSlot, 0, 0); - firstTileNum = (firstTileNum & (METATILE_COLLISION_MASK | METATILE_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & METATILE_ID_MASK); + CopyTileMapEntry(&firstTileNum, &((u16 *)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(x16, y16, attribute, mode, mode2)], paletteSlot, 0, 0); + firstTileNum = (firstTileNum & (MAPGRID_COLLISION_MASK | MAPGRID_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & MAPGRID_METATILE_ID_MASK); } } break; - case 1: + case BG_TYPE_AFFINE: mode3 = GetBgMetricAffineMode(bg, 0x1); for (y16 = y; y16 < (y + height); y16++) { for (x16 = x; x16 < (x + width); x16++) { - ((u8*)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum; - firstTileNum = (firstTileNum & (METATILE_COLLISION_MASK | METATILE_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & METATILE_ID_MASK); + ((u8 *)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum; + firstTileNum = (firstTileNum & (MAPGRID_COLLISION_MASK | MAPGRID_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & MAPGRID_METATILE_ID_MASK); } } break; @@ -1190,7 +1191,7 @@ void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s *dest = var; } -u32 GetBgType(u8 bg) +static u32 GetBgType(u8 bg) { u8 mode = GetBgMode(); @@ -1202,31 +1203,31 @@ u32 GetBgType(u8 bg) { case 0: case 1: - return 0; + return BG_TYPE_NORMAL; } break; case 2: switch (mode) { case 0: - return 0; + return BG_TYPE_NORMAL; case 1: case 2: - return 1; + return BG_TYPE_AFFINE; } break; case 3: switch (mode) { case 0: - return 0; + return BG_TYPE_NORMAL; case 2: - return 1; + return BG_TYPE_AFFINE; } break; } - return 0xFFFF; + return BG_TYPE_NONE; } bool32 IsInvalidBg32(u8 bg) @@ -1239,7 +1240,7 @@ bool32 IsInvalidBg32(u8 bg) bool32 IsTileMapOutsideWram(u8 bg) { - if (sGpuBgConfigs2[bg].tilemap > (void*)IWRAM_END) + if (sGpuBgConfigs2[bg].tilemap > (void *)IWRAM_END) return TRUE; else if (sGpuBgConfigs2[bg].tilemap == NULL) return TRUE; diff --git a/gflib/bg.h b/gflib/bg.h index 58fd1282c0..9818339910 100644 --- a/gflib/bg.h +++ b/gflib/bg.h @@ -1,28 +1,42 @@ #ifndef GUARD_BG_H #define GUARD_BG_H -struct BGCntrlBitfield // for the I/O registers -{ - volatile u16 priority:2; - volatile u16 charBaseBlock:2; - volatile u16 field_0_2:4; - volatile u16 field_1_0:5; - volatile u16 areaOverflowMode:1; - volatile u16 screenSize:2; -}; - enum { - BG_ATTR_CHARBASEINDEX = 1, - BG_ATTR_MAPBASEINDEX, - BG_ATTR_SCREENSIZE, - BG_ATTR_PALETTEMODE, - BG_ATTR_MOSAIC, - BG_ATTR_WRAPAROUND, - BG_ATTR_PRIORITY, - BG_ATTR_METRIC, - BG_ATTR_TYPE, - BG_ATTR_BASETILE, + BG_ATTR_CHARBASEINDEX = 1, + BG_ATTR_MAPBASEINDEX, + BG_ATTR_SCREENSIZE, + BG_ATTR_PALETTEMODE, + BG_ATTR_MOSAIC, + BG_ATTR_WRAPAROUND, + BG_ATTR_PRIORITY, + BG_ATTR_METRIC, + BG_ATTR_TYPE, + BG_ATTR_BASETILE, +}; + +enum { + BG_TYPE_NORMAL, + BG_TYPE_AFFINE, + BG_TYPE_NONE = 0xFFFF +}; + +// Modes for ChangeBgX / ChangeBgY +enum { + BG_COORD_SET, + BG_COORD_ADD, + BG_COORD_SUB, +}; + +// Modes for Unused_AdjustBgMosaic +enum { + BG_MOSAIC_SET_HV, + BG_MOSAIC_SET_H, + BG_MOSAIC_ADD_H, + BG_MOSAIC_SUB_H, + BG_MOSAIC_SET_V, + BG_MOSAIC_ADD_V, + BG_MOSAIC_SUB_V, }; struct BgTemplate @@ -43,12 +57,12 @@ void Unused_ResetBgControlStruct(u8 bg); u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode); void SetTextModeAndHideBgs(void); bool8 IsInvalidBg(u8 bg); -int DummiedOutFireRedLeafGreenTileAllocFunc(int a1, int a2, int a3, int a4); +int BgTileAllocOp(int bg, int offset, int count, int mode); void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable); void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates); void InitBgFromTemplate(const struct BgTemplate *template); void SetBgMode(u8 bgMode); -u16 LoadBgTiles(u8 bg, const void* src, u16 size, u16 destOffset); +u16 LoadBgTiles(u8 bg, const void *src, u16 size, u16 destOffset); u16 LoadBgTilemap(u8 bg, const void *src, u16 size, u16 destOffset); u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset); bool8 IsDma3ManagerBusyWithBgCopy(void); @@ -62,15 +76,15 @@ s32 ChangeBgY(u8 bg, s32 value, u8 op); s32 ChangeBgY_ScreenOff(u8 bg, s32 value, u8 op); s32 GetBgY(u8 bg); void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle); -u8 Unused_AdjustBgMosaic(u8 a1, u8 a2); +u8 Unused_AdjustBgMosaic(u8 val, u8 mode); void SetBgTilemapBuffer(u8 bg, void *tilemap); void UnsetBgTilemapBuffer(u8 bg); -void* GetBgTilemapBuffer(u8 bg); +void *GetBgTilemapBuffer(u8 bg); void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset); void CopyBgTilemapBufferToVram(u8 bg); -void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height); +void CopyToBgTilemapBufferRect(u8 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height); void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette); -void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 unused, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, s16 palette1, s16 tileOffset); +void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, s16 tileOffset, s16 palette2); void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height); void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette); void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, s16 tileNumDelta); @@ -78,7 +92,6 @@ u16 GetBgMetricTextMode(u8 bg, u8 whichMetric); u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric); u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32 screenHeight); void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2); -u32 GetBgType(u8 bg); bool32 IsInvalidBg32(u8 bg); bool32 IsTileMapOutsideWram(u8 bg); diff --git a/gflib/characters.h b/gflib/characters.h new file mode 100644 index 0000000000..714904aa42 --- /dev/null +++ b/gflib/characters.h @@ -0,0 +1,339 @@ +#ifndef GUARD_CHARACTERS_H +#define GUARD_CHARACTERS_H + +#define CHAR_SPACE 0x00 +#define CHAR_A_GRAVE 0x01 +#define CHAR_A_ACUTE 0x02 +#define CHAR_A_CIRCUMFLEX 0x03 +#define CHAR_C_CEDILLA 0x04 +#define CHAR_E_GRAVE 0x05 +#define CHAR_E_ACUTE 0x06 +#define CHAR_E_CIRCUMFLEX 0x07 +#define CHAR_E_DIAERESIS 0x08 +#define CHAR_I_GRAVE 0x09 +//#define CHAR_I_ACUTE 0x0A // Is 0x5A instead +#define CHAR_I_CIRCUMFLEX 0x0B +#define CHAR_I_DIAERESIS 0x0C +#define CHAR_O_GRAVE 0x0D +#define CHAR_O_ACUTE 0x0E +#define CHAR_O_CIRCUMFLEX 0x0F +#define CHAR_OE 0x10 +#define CHAR_U_GRAVE 0x11 +#define CHAR_U_ACUTE 0x12 +#define CHAR_U_CIRCUMFLEX 0x13 +#define CHAR_N_TILDE 0x14 +#define CHAR_ESZETT 0x15 +#define CHAR_a_GRAVE 0x16 +#define CHAR_a_ACUTE 0x17 +//#define CHAR_a_CIRCUMFLEX 0x18 // Is 0x68 instead +#define CHAR_c_CEDILLA 0x19 +#define CHAR_e_GRAVE 0x1A +#define CHAR_e_ACUTE 0x1B +#define CHAR_e_CIRCUMFLEX 0x1C +#define CHAR_e_DIAERESIS 0x1D +#define CHAR_i_GRAVE 0x1E +//#define CHAR_i_ACUTE 0x1F // Is 0x6F instead +#define CHAR_i_CIRCUMFLEX 0x20 +#define CHAR_i_DIAERESIS 0x21 +#define CHAR_o_GRAVE 0x22 +#define CHAR_o_ACUTE 0x23 +#define CHAR_o_CIRCUMFLEX 0x24 +#define CHAR_oe 0x25 +#define CHAR_u_GRAVE 0x26 +#define CHAR_u_ACUTE 0x27 +#define CHAR_u_CIRCUMFLEX 0x28 +#define CHAR_n_TILDE 0x29 +#define CHAR_MASCULINE_ORDINAL 0x2A +#define CHAR_FEMININE_ORDINAL 0x2B +#define CHAR_SUPER_ER 0x2C +#define CHAR_AMPERSAND 0x2D +#define CHAR_PLUS 0x2E +// +#define CHAR_LV 0x34 +#define CHAR_EQUALS 0x35 +#define CHAR_SEMICOLON 0x36 +#define CHAR_BARD_WORD_DELIMIT 0x37 // Empty space to separate words in Bard's song +#define CHAR_INV_QUESTION_MARK 0x51 +#define CHAR_INV_EXCL_MARK 0x52 +#define CHAR_PK 0x53 +#define CHAR_MN 0x54 +#define CHAR_PO 0x55 +#define CHAR_KE 0x56 +#define CHAR_BLOCK_1 0x57 // Each of these 3 +#define CHAR_BLOCK_2 0x58 // chars contains 1/3 +#define CHAR_BLOCK_3 0x59 // of the word BLOCK +#define CHAR_I_ACUTE 0x5A +#define CHAR_PERCENT 0x5B +#define CHAR_LEFT_PAREN 0x5C +#define CHAR_RIGHT_PAREN 0x5D +// +#define CHAR_a_CIRCUMFLEX 0x68 +// +#define CHAR_i_ACUTE 0x6F +// +#define CHAR_SPACER 0x77 // Empty space +// +#define CHAR_UP_ARROW 0x79 +#define CHAR_DOWN_ARROW 0x7A +#define CHAR_LEFT_ARROW 0x7B +#define CHAR_RIGHT_ARROW 0x7C +// +#define CHAR_SUPER_E 0x84 +#define CHAR_LESS_THAN 0x85 +#define CHAR_GREATER_THAN 0x86 +// +#define CHAR_SUPER_RE 0xA0 +#define CHAR_0 0xA1 +#define CHAR_1 0xA2 +#define CHAR_2 0xA3 +#define CHAR_3 0xA4 +#define CHAR_4 0xA5 +#define CHAR_5 0xA6 +#define CHAR_6 0xA7 +#define CHAR_7 0xA8 +#define CHAR_8 0xA9 +#define CHAR_9 0xAA +#define CHAR_EXCL_MARK 0xAB +#define CHAR_QUESTION_MARK 0xAC +#define CHAR_PERIOD 0xAD +#define CHAR_HYPHEN 0xAE +#define CHAR_BULLET 0xAF +#define CHAR_ELLIPSIS 0xB0 +#define CHAR_DBL_QUOTE_LEFT 0xB1 +#define CHAR_DBL_QUOTE_RIGHT 0xB2 +#define CHAR_SGL_QUOTE_LEFT 0xB3 +#define CHAR_SGL_QUOTE_RIGHT 0xB4 +#define CHAR_MALE 0xB5 +#define CHAR_FEMALE 0xB6 +#define CHAR_CURRENCY 0xB7 +#define CHAR_COMMA 0xB8 +#define CHAR_MULT_SIGN 0xB9 +#define CHAR_SLASH 0xBA +#define CHAR_A 0xBB +#define CHAR_B 0xBC +#define CHAR_C 0xBD +#define CHAR_D 0xBE +#define CHAR_E 0xBF +#define CHAR_F 0xC0 +#define CHAR_G 0xC1 +#define CHAR_H 0xC2 +#define CHAR_I 0xC3 +#define CHAR_J 0xC4 +#define CHAR_K 0xC5 +#define CHAR_L 0xC6 +#define CHAR_M 0xC7 +#define CHAR_N 0xC8 +#define CHAR_O 0xC9 +#define CHAR_P 0xCA +#define CHAR_Q 0xCB +#define CHAR_R 0xCC +#define CHAR_S 0xCD +#define CHAR_T 0xCE +#define CHAR_U 0xCF +#define CHAR_V 0xD0 +#define CHAR_W 0xD1 +#define CHAR_X 0xD2 +#define CHAR_Y 0xD3 +#define CHAR_Z 0xD4 +#define CHAR_a 0xD5 +#define CHAR_b 0xD6 +#define CHAR_c 0xD7 +#define CHAR_d 0xD8 +#define CHAR_e 0xD9 +#define CHAR_f 0xDA +#define CHAR_g 0xDB +#define CHAR_h 0xDC +#define CHAR_i 0xDD +#define CHAR_j 0xDE +#define CHAR_k 0xDF +#define CHAR_l 0xE0 +#define CHAR_m 0xE1 +#define CHAR_n 0xE2 +#define CHAR_o 0xE3 +#define CHAR_p 0xE4 +#define CHAR_q 0xE5 +#define CHAR_r 0xE6 +#define CHAR_s 0xE7 +#define CHAR_t 0xE8 +#define CHAR_u 0xE9 +#define CHAR_v 0xEA +#define CHAR_w 0xEB +#define CHAR_x 0xEC +#define CHAR_y 0xED +#define CHAR_z 0xEE +#define CHAR_BLACK_TRIANGLE 0xEF +#define CHAR_COLON 0xF0 +#define CHAR_A_DIAERESIS 0xF1 +#define CHAR_O_DIAERESIS 0xF2 +#define CHAR_U_DIAERESIS 0xF3 +#define CHAR_a_DIAERESIS 0xF4 +#define CHAR_o_DIAERESIS 0xF5 +#define CHAR_u_DIAERESIS 0xF6 +#define CHAR_DYNAMIC 0xF7 +#define CHAR_KEYPAD_ICON 0xF8 +#define CHAR_EXTRA_SYMBOL 0xF9 +#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog +#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog +#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code +#define PLACEHOLDER_BEGIN 0xFD // string placeholder +#define CHAR_NEWLINE 0xFE +#define EOS 0xFF // end of string + +// CHAR_KEYPAD_ICON chars +#define CHAR_A_BUTTON 0x00 +#define CHAR_B_BUTTON 0x01 +#define CHAR_L_BUTTON 0x02 +#define CHAR_R_BUTTON 0x03 +#define CHAR_START_BUTTON 0x04 +#define CHAR_SELECT_BUTTON 0x05 +#define CHAR_DPAD_UP 0x06 +#define CHAR_DPAD_DOWN 0x07 +#define CHAR_DPAD_LEFT 0x08 +#define CHAR_DPAD_RIGHT 0x09 +#define CHAR_DPAD_UPDOWN 0x0A +#define CHAR_DPAD_LEFTRIGHT 0x0B +#define CHAR_DPAD_NONE 0x0C + +// CHAR_EXTRA_SYMBOL chars +#define CHAR_UP_ARROW_2 0x00 +#define CHAR_DOWN_ARROW_2 0x01 +#define CHAR_LEFT_ARROW_2 0x02 +#define CHAR_RIGHT_ARROW_2 0x03 +#define CHAR_PLUS_2 0x04 +#define CHAR_LV_2 0x05 +#define CHAR_PP 0x06 +#define CHAR_ID 0x07 +#define CHAR_NO 0x08 +#define CHAR_UNDERSCORE 0x09 + +#define EXT_CTRL_CODE_COLOR 0x01 +#define EXT_CTRL_CODE_HIGHLIGHT 0x02 +#define EXT_CTRL_CODE_SHADOW 0x03 +#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x04 +#define EXT_CTRL_CODE_PALETTE 0x05 +#define EXT_CTRL_CODE_FONT 0x06 +#define EXT_CTRL_CODE_RESET_SIZE 0x07 +#define EXT_CTRL_CODE_PAUSE 0x08 +#define EXT_CTRL_CODE_PAUSE_UNTIL_PRESS 0x09 +#define EXT_CTRL_CODE_WAIT_SE 0x0A +#define EXT_CTRL_CODE_PLAY_BGM 0x0B +#define EXT_CTRL_CODE_ESCAPE 0x0C +#define EXT_CTRL_CODE_SHIFT_TEXT 0x0D +#define EXT_CTRL_CODE_SHIFT_DOWN 0x0E +#define EXT_CTRL_CODE_FILL_WINDOW 0x0F +#define EXT_CTRL_CODE_PLAY_SE 0x10 +#define EXT_CTRL_CODE_CLEAR 0x11 +#define EXT_CTRL_CODE_SKIP 0x12 +#define EXT_CTRL_CODE_CLEAR_TO 0x13 +#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14 +#define EXT_CTRL_CODE_JPN 0x15 +#define EXT_CTRL_CODE_ENG 0x16 +#define EXT_CTRL_CODE_PAUSE_MUSIC 0x17 +#define EXT_CTRL_CODE_RESUME_MUSIC 0x18 + +#define TEXT_COLOR_TRANSPARENT 0x0 +#define TEXT_COLOR_WHITE 0x1 +#define TEXT_COLOR_DARK_GRAY 0x2 +#define TEXT_COLOR_LIGHT_GRAY 0x3 +#define TEXT_COLOR_RED 0x4 +#define TEXT_COLOR_LIGHT_RED 0x5 +#define TEXT_COLOR_GREEN 0x6 +#define TEXT_COLOR_LIGHT_GREEN 0x7 +#define TEXT_COLOR_BLUE 0x8 +#define TEXT_COLOR_LIGHT_BLUE 0x9 +#define TEXT_DYNAMIC_COLOR_1 0xA // Usually white +#define TEXT_DYNAMIC_COLOR_2 0xB // Usually white w/ tinge of green +#define TEXT_DYNAMIC_COLOR_3 0xC // Usually white +#define TEXT_DYNAMIC_COLOR_4 0xD // Usually aquamarine +#define TEXT_DYNAMIC_COLOR_5 0xE // Usually blue-green +#define TEXT_DYNAMIC_COLOR_6 0xF // Usually cerulean + +#define PLACEHOLDER_ID_UNKNOWN 0x0 +#define PLACEHOLDER_ID_PLAYER 0x1 +#define PLACEHOLDER_ID_STRING_VAR_1 0x2 +#define PLACEHOLDER_ID_STRING_VAR_2 0x3 +#define PLACEHOLDER_ID_STRING_VAR_3 0x4 +#define PLACEHOLDER_ID_KUN 0x5 +#define PLACEHOLDER_ID_RIVAL 0x6 +#define PLACEHOLDER_ID_VERSION 0x7 +#define PLACEHOLDER_ID_AQUA 0x8 +#define PLACEHOLDER_ID_MAGMA 0x9 +#define PLACEHOLDER_ID_ARCHIE 0xA +#define PLACEHOLDER_ID_MAXIE 0xB +#define PLACEHOLDER_ID_KYOGRE 0xC +#define PLACEHOLDER_ID_GROUDON 0xD + +// battle placeholders are located in battle_message.h + +// Hiragana from 0x1-0x50, Katakana from 0x51-0xA0. +// This excludes Japanese punctuation, which end at 0xB0 +#define JAPANESE_CHAR_END 0xA0 + +// Note that while all dot combinations are represented in +// the Braille font, they are not all meaningful characters. +// Only those that have direct single-character translations are listed. +#define BRAILLE_CHAR_SPACE 0x00 +#define BRAILLE_CHAR_A 0x01 +// +#define BRAILLE_CHAR_C 0x03 +#define BRAILLE_CHAR_COMMA 0x04 +#define BRAILLE_CHAR_B 0x05 +#define BRAILLE_CHAR_I 0x06 +#define BRAILLE_CHAR_F 0x07 +// +#define BRAILLE_CHAR_E 0x09 +// +#define BRAILLE_CHAR_D 0x0B +#define BRAILLE_CHAR_COLON 0x0C +#define BRAILLE_CHAR_H 0x0D +#define BRAILLE_CHAR_J 0x0E +#define BRAILLE_CHAR_G 0x0F +#define BRAILLE_CHAR_APOSTROPHE 0x10 +#define BRAILLE_CHAR_K 0x11 +#define BRAILLE_CHAR_SLASH 0x12 +#define BRAILLE_CHAR_M 0x13 +#define BRAILLE_CHAR_SEMICOLON 0x14 +#define BRAILLE_CHAR_L 0x15 +#define BRAILLE_CHAR_S 0x16 +#define BRAILLE_CHAR_P 0x17 +// +#define BRAILLE_CHAR_O 0x19 +// +#define BRAILLE_CHAR_N 0x1B +#define BRAILLE_CHAR_EXCL_MARK 0x1C +#define BRAILLE_CHAR_R 0x1D +#define BRAILLE_CHAR_T 0x1E +#define BRAILLE_CHAR_Q 0x1F +// +#define BRAILLE_CHAR_PERIOD 0x2C +// +#define BRAILLE_CHAR_W 0x2E +// +#define BRAILLE_CHAR_HYPHEN 0x30 +#define BRAILLE_CHAR_U 0x31 +// +#define BRAILLE_CHAR_X 0x33 +#define BRAILLE_CHAR_QUESTION_MARK 0x34 // Also double quote left +#define BRAILLE_CHAR_V 0x35 +// +#define BRAILLE_CHAR_DBL_QUOTE_RIGHT 0x38 +#define BRAILLE_CHAR_Z 0x39 +#define BRAILLE_CHAR_NUMBER 0x3A +#define BRAILLE_CHAR_Y 0x3B +#define BRAILLE_CHAR_PAREN 0x3C +// +#define NUM_BRAILLE_CHARS 0x40 + +// Digits must be preceded by BRAILLE_CHAR_NUMBER +#define BRAILLE_CHAR_1 BRAILLE_CHAR_A +#define BRAILLE_CHAR_2 BRAILLE_CHAR_B +#define BRAILLE_CHAR_3 BRAILLE_CHAR_C +#define BRAILLE_CHAR_4 BRAILLE_CHAR_D +#define BRAILLE_CHAR_5 BRAILLE_CHAR_E +#define BRAILLE_CHAR_6 BRAILLE_CHAR_F +#define BRAILLE_CHAR_7 BRAILLE_CHAR_G +#define BRAILLE_CHAR_8 BRAILLE_CHAR_H +#define BRAILLE_CHAR_9 BRAILLE_CHAR_I +#define BRAILLE_CHAR_0 BRAILLE_CHAR_J + +#endif // GUARD_CHARACTERS_H diff --git a/gflib/io_reg.c b/gflib/io_reg.c index 44364349d9..66b8dbe64c 100644 --- a/gflib/io_reg.c +++ b/gflib/io_reg.c @@ -17,8 +17,8 @@ static const u32 sUnused[] = { (1 << 26) | (1 << 4) | (1 << 2) | (1 << 1), (1 << 26) | (1 << 4) | (1 << 3) | (1 << 1), (1 << 26) | (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1), - (1 << 25) | (1 << 8), - (1 << 27) | (1 << 10), + (1 << 25) | (1 << 8), + (1 << 27) | (1 << 10), }; const u16 gOverworldBackgroundLayerFlags[] = { diff --git a/gflib/malloc.c b/gflib/malloc.c index 38fc8939e4..d0b9497635 100644 --- a/gflib/malloc.c +++ b/gflib/malloc.c @@ -2,7 +2,6 @@ static void *sHeapStart; static u32 sHeapSize; -static u32 sFiller; // needed to align dma3_manager.o(.bss) #define MALLOC_SYSTEM_ID 0xA3A3 diff --git a/gflib/sprite.c b/gflib/sprite.c index 408daf6f91..9fc597cc3b 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -7,6 +7,9 @@ #define OAM_MATRIX_COUNT 32 +#define sAnchorX data[6] +#define sAnchorY data[7] + #define SET_SPRITE_TILE_RANGE(index, start, count) \ { \ sSpriteTileRanges[index * 2] = start; \ @@ -91,7 +94,7 @@ static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameC static u8 IndexOfSpriteTileTag(u16 tag); static void AllocSpriteTileRange(u16 tag, u16 start, u16 count); static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset); -static void obj_update_pos2(struct Sprite* sprite, s32 a1, s32 a2); +static void UpdateSpriteMatrixAnchorPos(struct Sprite *, s32, s32); typedef void (*AnimFunc)(struct Sprite *); typedef void (*AnimCmdFunc)(struct Sprite *); @@ -99,13 +102,13 @@ typedef void (*AffineAnimCmdFunc)(u8 matrixNum, struct Sprite *); #define DUMMY_OAM_DATA \ { \ - .y = 160, \ + .y = DISPLAY_HEIGHT, \ .affineMode = 0, \ .objMode = 0, \ - .mosaic = 0, \ + .mosaic = FALSE, \ .bpp = 0, \ .shape = SPRITE_SHAPE(8x8), \ - .x = 304, \ + .x = DISPLAY_WIDTH + 64, \ .matrixNum = 0, \ .size = SPRITE_SIZE(8x8), \ .tileNum = 0, \ @@ -159,41 +162,11 @@ static const struct Sprite sDummySprite = { .oam = DUMMY_OAM_DATA, .anims = gDummySpriteAnimTable, - .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .template = &gDummySpriteTemplate, - .subspriteTables = NULL, .callback = SpriteCallbackDummy, - .x = 304, .y = 160, - .x2 = 0, .y2 = 0, - .centerToCornerVecX = 0, - .centerToCornerVecY = 0, - .animNum = 0, - .animCmdIndex = 0, - .animDelayCounter = 0, - .animPaused = 0, - .affineAnimPaused = 0, - .animLoopCounter = 0, - .data = {0, 0, 0, 0, 0, 0, 0}, - .inUse = 0, - .coordOffsetEnabled = 0, - .invisible = FALSE, - .flags_3 = 0, - .flags_4 = 0, - .flags_5 = 0, - .flags_6 = 0, - .flags_7 = 0, - .hFlip = 0, - .vFlip = 0, - .animBeginning = 0, - .affineAnimBeginning = 0, - .animEnded = 0, - .affineAnimEnded = 0, - .usingSheet = 0, - .flags_f = 0, - .sheetTileStart = 0, - .subspriteTableNum = 0, - .subspriteMode = 0, + .x = DISPLAY_WIDTH + 64, + .y = DISPLAY_HEIGHT, .subpriority = 0xFF }; @@ -210,7 +183,7 @@ const union AffineAnimCmd * const gDummySpriteAffineAnimTable[] = { &sDummyAffin const struct SpriteTemplate gDummySpriteTemplate = { .tileTag = 0, - .paletteTag = 0xFFFF, + .paletteTag = TAG_NONE, .oam = &gDummyOamData, .anims = gDummySpriteAnimTable, .images = NULL, @@ -248,7 +221,7 @@ static const AffineAnimCmdFunc sAffineAnimCmdFuncs[] = static const struct OamDimensions32 sOamDimensions32[3][4] = { - [ST_OAM_SQUARE] = + [ST_OAM_SQUARE] = { [SPRITE_SIZE(8x8)] = { 8, 8 }, [SPRITE_SIZE(16x16)] = { 16, 16 }, @@ -262,7 +235,7 @@ static const struct OamDimensions32 sOamDimensions32[3][4] = [SPRITE_SIZE(32x16)] = { 32, 16 }, [SPRITE_SIZE(64x32)] = { 64, 32 }, }, - [ST_OAM_V_RECTANGLE] = + [ST_OAM_V_RECTANGLE] = { [SPRITE_SIZE(8x16)] = { 8, 16 }, [SPRITE_SIZE(8x32)] = { 8, 32 }, @@ -273,7 +246,7 @@ static const struct OamDimensions32 sOamDimensions32[3][4] = static const struct OamDimensions sOamDimensions[3][4] = { - [ST_OAM_SQUARE] = + [ST_OAM_SQUARE] = { [SPRITE_SIZE(8x8)] = { 8, 8 }, [SPRITE_SIZE(16x16)] = { 16, 16 }, @@ -287,7 +260,7 @@ static const struct OamDimensions sOamDimensions[3][4] = [SPRITE_SIZE(32x16)] = { 32, 16 }, [SPRITE_SIZE(64x32)] = { 64, 32 }, }, - [ST_OAM_V_RECTANGLE] = + [ST_OAM_V_RECTANGLE] = { [SPRITE_SIZE(8x16)] = { 8, 16 }, [SPRITE_SIZE(8x32)] = { 8, 32 }, @@ -588,7 +561,7 @@ u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); - if (template->tileTag == 0xFFFF) + if (template->tileTag == TAG_NONE) { s16 tileNum; sprite->images = template->images; @@ -611,7 +584,7 @@ u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) InitSpriteAffineAnim(sprite); - if (template->paletteTag != 0xFFFF) + if (template->paletteTag != TAG_NONE) sprite->oam.paletteNum = IndexOfSpritePaletteTag(template->paletteTag); return index; @@ -659,14 +632,11 @@ void DestroySprite(struct Sprite *sprite) } } -void ResetOamRange(u8 a, u8 b) +void ResetOamRange(u8 start, u8 end) { u8 i; - - for (i = a; i < b; i++) - { + for (i = start; i < end; i++) gMain.oamBuffer[i] = *(struct OamData *)&gDummyOamData; - } } void LoadOam(void) @@ -890,16 +860,26 @@ void ResetAllSprites(void) ResetSprite(&gSprites[i]); } -// UB: template pointer may point to freed temporary storage void FreeSpriteTiles(struct Sprite *sprite) { - if (sprite->template->tileTag != 0xFFFF) +// UB: template pointer may point to freed temporary storage +#ifdef UBFIX + if (!sprite || !sprite->template) + return; +#endif + + if (sprite->template->tileTag != TAG_NONE) FreeSpriteTilesByTag(sprite->template->tileTag); } -// UB: template pointer may point to freed temporary storage void FreeSpritePalette(struct Sprite *sprite) { +// UB: template pointer may point to freed temporary storage +#ifdef UBFIX + if (!sprite || !sprite->template) + return; +#endif + FreeSpritePaletteByTag(sprite->template->paletteTag); } @@ -1098,8 +1078,8 @@ void BeginAffineAnim(struct Sprite *sprite) sprite->affineAnimEnded = FALSE; ApplyAffineAnimFrame(matrixNum, &frameCmd); sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration; - if (sprite->flags_f) - obj_update_pos2(sprite, sprite->data[6], sprite->data[7]); + if (sprite->anchored) + UpdateSpriteMatrixAnchorPos(sprite, sprite->sAnchorX, sprite->sAnchorY); } } @@ -1124,8 +1104,8 @@ void ContinueAffineAnim(struct Sprite *sprite) funcIndex = type - 32765; sAffineAnimCmdFuncs[funcIndex](matrixNum, sprite); } - if (sprite->flags_f) - obj_update_pos2(sprite, sprite->data[6], sprite->data[7]); + if (sprite->anchored) + UpdateSpriteMatrixAnchorPos(sprite, sprite->sAnchorX, sprite->sAnchorY); } } @@ -1219,14 +1199,16 @@ u8 GetSpriteMatrixNum(struct Sprite *sprite) return matrixNum; } -void sub_8007E18(struct Sprite* sprite, s16 a2, s16 a3) +// Used to shift a sprite's position as it scales. +// Only used by the minigame countdown, so that for instance the numbers don't slide up as they squish down before jumping. +void SetSpriteMatrixAnchor(struct Sprite *sprite, s16 x, s16 y) { - sprite->data[6] = a2; - sprite->data[7] = a3; - sprite->flags_f = 1; + sprite->sAnchorX = x; + sprite->sAnchorY = y; + sprite->anchored = TRUE; } -s32 sub_8007E28(s32 a0, s32 a1, s32 a2) +static s32 GetAnchorCoord(s32 a0, s32 a1, s32 coord) { s32 subResult, var1; @@ -1235,27 +1217,27 @@ s32 sub_8007E28(s32 a0, s32 a1, s32 a2) var1 = -(subResult) >> 9; else var1 = -(subResult >> 9); - return a2 - ((u32)(a2 * a1) / (u32)(a0) + var1); + return coord - ((u32)(coord * a1) / (u32)(a0) + var1); } -void obj_update_pos2(struct Sprite *sprite, s32 a1, s32 a2) +static void UpdateSpriteMatrixAnchorPos(struct Sprite *sprite, s32 x, s32 y) { - s32 var0, var1, var2; + s32 dimension, var1, var2; u32 matrixNum = sprite->oam.matrixNum; - if (a1 != 0x800) + if (x != NO_ANCHOR) { - var0 = sOamDimensions32[sprite->oam.shape][sprite->oam.size].width; - var1 = var0 << 8; - var2 = (var0 << 16) / gOamMatrices[matrixNum].a; - sprite->x2 = sub_8007E28(var1, var2, a1); + dimension = sOamDimensions32[sprite->oam.shape][sprite->oam.size].width; + var1 = dimension << 8; + var2 = (dimension << 16) / gOamMatrices[matrixNum].a; + sprite->x2 = GetAnchorCoord(var1, var2, x); } - if (a2 != 0x800) + if (y != NO_ANCHOR) { - var0 = sOamDimensions32[sprite->oam.shape][sprite->oam.size].height; - var1 = var0 << 8; - var2 = (var0 << 16) / gOamMatrices[matrixNum].d; - sprite->y2 = sub_8007E28(var1, var2, a2); + dimension = sOamDimensions32[sprite->oam.shape][sprite->oam.size].height; + var1 = dimension << 8; + var2 = (dimension << 16) / gOamMatrices[matrixNum].d; + sprite->y2 = GetAnchorCoord(var1, var2, y); } } @@ -1540,7 +1522,7 @@ void FreeSpriteTilesByTag(u16 tag) for (i = start; i < start + count; i++) FREE_SPRITE_TILE(i); - sSpriteTileRangeTags[index] = 0xFFFF; + sSpriteTileRangeTags[index] = TAG_NONE; } } @@ -1550,7 +1532,7 @@ void FreeSpriteTileRanges(void) for (i = 0; i < MAX_SPRITES; i++) { - sSpriteTileRangeTags[i] = 0xFFFF; + sSpriteTileRangeTags[i] = TAG_NONE; SET_SPRITE_TILE_RANGE(i, 0, 0); } } @@ -1580,16 +1562,16 @@ u16 GetSpriteTileTagByTileStart(u16 start) for (i = 0; i < MAX_SPRITES; i++) { - if (sSpriteTileRangeTags[i] != 0xFFFF && sSpriteTileRanges[i * 2] == start) + if (sSpriteTileRangeTags[i] != TAG_NONE && sSpriteTileRanges[i * 2] == start) return sSpriteTileRangeTags[i]; } - return 0xFFFF; + return TAG_NONE; } void AllocSpriteTileRange(u16 tag, u16 start, u16 count) { - u8 freeIndex = IndexOfSpriteTileTag(0xFFFF); + u8 freeIndex = IndexOfSpriteTileTag(TAG_NONE); sSpriteTileRangeTags[freeIndex] = tag; SET_SPRITE_TILE_RANGE(freeIndex, start, count); } @@ -1599,7 +1581,7 @@ void FreeAllSpritePalettes(void) u8 i; gReservedSpritePaletteCount = 0; for (i = 0; i < 16; i++) - sSpritePaletteTags[i] = 0xFFFF; + sSpritePaletteTags[i] = TAG_NONE; } u8 LoadSpritePalette(const struct SpritePalette *palette) @@ -1609,7 +1591,7 @@ u8 LoadSpritePalette(const struct SpritePalette *palette) if (index != 0xFF) return index; - index = IndexOfSpritePaletteTag(0xFFFF); + index = IndexOfSpritePaletteTag(TAG_NONE); if (index == 0xFF) { @@ -1638,7 +1620,7 @@ void DoLoadSpritePalette(const u16 *src, u16 paletteOffset) u8 AllocSpritePalette(u16 tag) { - u8 index = IndexOfSpritePaletteTag(0xFFFF); + u8 index = IndexOfSpritePaletteTag(TAG_NONE); if (index == 0xFF) { return 0xFF; @@ -1669,7 +1651,7 @@ void FreeSpritePaletteByTag(u16 tag) { u8 index = IndexOfSpritePaletteTag(tag); if (index != 0xFF) - sSpritePaletteTags[index] = 0xFFFF; + sSpritePaletteTags[index] = TAG_NONE; } void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables) diff --git a/gflib/sprite.h b/gflib/sprite.h index 02bc0748b4..86527bc4c0 100644 --- a/gflib/sprite.h +++ b/gflib/sprite.h @@ -3,7 +3,10 @@ #define MAX_SPRITES 64 #define SPRITE_NONE 0xFF -#define SPRITE_INVALID_TAG 0xFFFF +#define TAG_NONE 0xFFFF + +// Given to SetSpriteMatrixAnchor to skip anchoring one of the coords. +#define NO_ANCHOR 0x800 struct SpriteSheet { @@ -227,7 +230,7 @@ struct Sprite bool16 animEnded:1; //0x10 bool16 affineAnimEnded:1; //0x20 bool16 usingSheet:1; //0x40 - bool16 flags_f:1; //0x80 + bool16 anchored:1; //0x80 /*0x40*/ u16 sheetTileStart; @@ -267,7 +270,7 @@ u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 sub u8 CreateInvisibleSprite(void (*callback)(struct Sprite *)); u8 CreateSpriteAndAnimate(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority); void DestroySprite(struct Sprite *sprite); -void ResetOamRange(u8 a, u8 b); +void ResetOamRange(u8 start, u8 end); void LoadOam(void); void SetOamMatrix(u8 matrixNum, u16 a, u16 b, u16 c, u16 d); void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode); @@ -278,9 +281,8 @@ void FreeSpriteTiles(struct Sprite *sprite); void FreeSpritePalette(struct Sprite *sprite); void FreeSpriteOamMatrix(struct Sprite *sprite); void DestroySpriteAndFreeResources(struct Sprite *sprite); -void sub_800142C(u32 a1, u32 a2, u16 *a3, u16 a4, u32 a5); void AnimateSprite(struct Sprite *sprite); -void sub_8007E18(struct Sprite* sprite, s16 a2, s16 a3); +void SetSpriteMatrixAnchor(struct Sprite *sprite, s16 x, s16 y); void StartSpriteAnim(struct Sprite *sprite, u8 animNum); void StartSpriteAnimIfDifferent(struct Sprite *sprite, u8 animNum); void SeekSpriteAnim(struct Sprite *sprite, u8 animCmdIndex); diff --git a/gflib/string_util.c b/gflib/string_util.c index 92f8eea5af..4bf8d946db 100644 --- a/gflib/string_util.c +++ b/gflib/string_util.c @@ -25,10 +25,10 @@ static const s32 sPowersOfTen[] = 1000000000, }; -u8 *StringCopy10(u8 *dest, const u8 *src) +u8 *StringCopy_Nickname(u8 *dest, const u8 *src) { u8 i; - u32 limit = 10; + u32 limit = POKEMON_NAME_LENGTH; for (i = 0; i < limit; i++) { @@ -42,10 +42,10 @@ u8 *StringCopy10(u8 *dest, const u8 *src) return &dest[i]; } -u8 *StringGetEnd10(u8 *str) +u8 *StringGet_Nickname(u8 *str) { u8 i; - u32 limit = 10; + u32 limit = POKEMON_NAME_LENGTH; for (i = 0; i < limit; i++) if (str[i] == EOS) @@ -55,10 +55,10 @@ u8 *StringGetEnd10(u8 *str) return &str[i]; } -u8 *StringCopy7(u8 *dest, const u8 *src) +u8 *StringCopy_PlayerName(u8 *dest, const u8 *src) { s32 i; - s32 limit = 7; + s32 limit = PLAYER_NAME_LENGTH; for (i = 0; i < limit; i++) { @@ -206,7 +206,7 @@ u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode, } else if (state == WRITING_SPACES) { - *dest++ = 0x77; + *dest++ = CHAR_SPACER; } value = temp; @@ -262,7 +262,7 @@ u8 *ConvertUIntToDecimalStringN(u8 *dest, u32 value, enum StringConvertMode mode } else if (state == WRITING_SPACES) { - *dest++ = 0x77; + *dest++ = CHAR_SPACER; } value = temp; @@ -322,7 +322,7 @@ u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 } else if (state == WRITING_SPACES) { - *dest++ = 0x77; + *dest++ = CHAR_SPACER; } value = temp; @@ -384,18 +384,18 @@ u8 *StringExpandPlaceholders(u8 *dest, const u8 *src) u8 *StringBraille(u8 *dest, const u8 *src) { - const u8 setBrailleFont[] = { - EXT_CTRL_CODE_BEGIN, - EXT_CTRL_CODE_SIZE, - 6, - EOS + const u8 setBrailleFont[] = { + EXT_CTRL_CODE_BEGIN, + EXT_CTRL_CODE_FONT, + FONT_BRAILLE, + EOS }; - const u8 gotoLine2[] = { - CHAR_NEWLINE, - EXT_CTRL_CODE_BEGIN, - EXT_CTRL_CODE_SHIFT_DOWN, - 2, - EOS + const u8 gotoLine2[] = { + CHAR_NEWLINE, + EXT_CTRL_CODE_BEGIN, + EXT_CTRL_CODE_SHIFT_DOWN, + 2, + EOS }; dest = StringCopy(dest, setBrailleFont); @@ -414,7 +414,7 @@ u8 *StringBraille(u8 *dest, const u8 *src) break; default: *dest++ = c; - *dest++ = c + 0x40; + *dest++ = c + NUM_BRAILLE_CHARS; break; } } @@ -630,7 +630,7 @@ bool32 IsStringJapanese(u8 *str) { while (*str != EOS) { - if (*str < CHAR_0) + if (*str <= JAPANESE_CHAR_END) if (*str != CHAR_SPACE) return TRUE; str++; @@ -639,13 +639,13 @@ bool32 IsStringJapanese(u8 *str) return FALSE; } -bool32 sub_800924C(u8 *str, s32 n) +bool32 IsStringNJapanese(u8 *str, s32 n) { s32 i; for (i = 0; *str != EOS && i < n; i++) { - if (*str < CHAR_0) + if (*str <= JAPANESE_CHAR_END) if (*str != CHAR_SPACE) return TRUE; str++; @@ -664,7 +664,7 @@ u8 GetExtCtrlCodeLength(u8 code) [EXT_CTRL_CODE_SHADOW] = 2, [EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW] = 4, [EXT_CTRL_CODE_PALETTE] = 2, - [EXT_CTRL_CODE_SIZE] = 2, + [EXT_CTRL_CODE_FONT] = 2, [EXT_CTRL_CODE_RESET_SIZE] = 1, [EXT_CTRL_CODE_PAUSE] = 2, [EXT_CTRL_CODE_PAUSE_UNTIL_PRESS] = 1, diff --git a/gflib/string_util.h b/gflib/string_util.h index 229193d52d..0a8a99fb98 100644 --- a/gflib/string_util.h +++ b/gflib/string_util.h @@ -13,9 +13,9 @@ enum StringConvertMode STR_CONV_MODE_LEADING_ZEROS }; -u8 *StringCopy10(u8 *dest, const u8 *src); -u8 *StringGetEnd10(u8 *str); -u8 *StringCopy7(u8 *dest, const u8 *src); +u8 *StringCopy_Nickname(u8 *dest, const u8 *src); +u8 *StringGet_Nickname(u8 *str); +u8 *StringCopy_PlayerName(u8 *dest, const u8 *src); u8 *StringCopy(u8 *dest, const u8 *src); u8 *StringAppend(u8 *dest, const u8 *src); u8 *StringCopyN(u8 *dest, const u8 *src, u8 n); @@ -37,7 +37,7 @@ u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n); u32 StringLength_Multibyte(const u8 *str); u8 *WriteColorChangeControlCode(u8 *dest, u32 colorType, u8 color); bool32 IsStringJapanese(u8 *str); -bool32 sub_800924C(u8 *str, s32 n); +bool32 IsStringNJapanese(u8 *str, s32 n); u8 GetExtCtrlCodeLength(u8 code); s32 StringCompareWithoutExtCtrlCodes(const u8 *str1, const u8 *str2); void ConvertInternationalString(u8 *s, u8 language); diff --git a/gflib/text.c b/gflib/text.c index eb993c4214..c7efdccce3 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -11,21 +11,44 @@ #include "blit.h" #include "menu.h" #include "dynamic_placeholder_text_util.h" +#include "fonts.h" -EWRAM_DATA struct TextPrinter gTempTextPrinter = {0}; -EWRAM_DATA struct TextPrinter gTextPrinters[NUM_TEXT_PRINTERS] = {0}; +static u16 RenderText(struct TextPrinter *); +static u32 RenderFont(struct TextPrinter *); +static u16 FontFunc_Small(struct TextPrinter *); +static u16 FontFunc_Normal(struct TextPrinter *); +static u16 FontFunc_Short(struct TextPrinter *); +static u16 FontFunc_ShortCopy1(struct TextPrinter *); +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 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 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 u16 gFontHalfRowLookupTable[0x51]; -static u16 gLastTextBgColor; -static u16 gLastTextFgColor; -static u16 gLastTextShadowColor; +static EWRAM_DATA struct TextPrinter sTempTextPrinter = {0}; +static EWRAM_DATA struct TextPrinter sTextPrinters[NUM_TEXT_PRINTERS] = {0}; + +static u16 sFontHalfRowLookupTable[0x51]; +static u16 sLastTextBgColor; +static u16 sLastTextFgColor; +static u16 sLastTextShadowColor; const struct FontInfo *gFonts; -u8 gDisableTextPrinters; +bool8 gDisableTextPrinters; struct TextGlyph gCurGlyph; TextFlags gTextFlags; -const u8 gFontHalfRowOffsets[] = +static const u8 sFontHalfRowOffsets[] = { 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, 0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09, @@ -45,91 +68,175 @@ const u8 gFontHalfRowOffsets[] = 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00 }; -const u8 gDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow.4bpp"); -const u8 gDarkDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow_RS.4bpp"); -const u8 gUnusedFRLGBlankedDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_blanked_down_arrow.4bpp"); -const u8 gUnusedFRLGDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_down_arrow.4bpp"); -const u8 gDownArrowYCoords[] = { 0x0, 0x1, 0x2, 0x1 }; -const u8 gWindowVerticalScrollSpeeds[] = { 0x1, 0x2, 0x4, 0x0 }; - -const struct GlyphWidthFunc gGlyphWidthFuncs[] = -{ - { 0x0, GetGlyphWidthFont0 }, - { 0x1, GetGlyphWidthFont1 }, - { 0x2, GetGlyphWidthFont2 }, - { 0x3, GetGlyphWidthFont2 }, - { 0x4, GetGlyphWidthFont2 }, - { 0x5, GetGlyphWidthFont2 }, - { 0x6, GetGlyphWidthFont6 }, - { 0x7, GetGlyphWidthFont7 }, - { 0x8, GetGlyphWidthFont8 } +static const u8 sDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow.4bpp"); +static const u8 sDarkDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow_alt.4bpp"); +static const u8 sUnusedFRLGBlankedDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_blanked_down_arrow.4bpp"); +static const u8 sUnusedFRLGDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_down_arrow.4bpp"); +static const u8 sDownArrowYCoords[] = { 0, 1, 2, 1 }; +static const u8 sWindowVerticalScrollSpeeds[] = { + [OPTIONS_TEXT_SPEED_SLOW] = 1, + [OPTIONS_TEXT_SPEED_MID] = 2, + [OPTIONS_TEXT_SPEED_FAST] = 4, }; -const struct KeypadIcon gKeypadIcons[] = +static const struct GlyphWidthFunc sGlyphWidthFuncs[] = { - [CHAR_A_BUTTON] = { 0x0, 0x8, 0xC }, - [CHAR_B_BUTTON] = { 0x1, 0x8, 0xC }, - [CHAR_L_BUTTON] = { 0x2, 0x10, 0xC }, - [CHAR_R_BUTTON] = { 0x4, 0x10, 0xC }, - [CHAR_START_BUTTON] = { 0x6, 0x18, 0xC }, - [CHAR_SELECT_BUTTON] = { 0x9, 0x18, 0xC }, - [CHAR_DPAD_UP] = { 0xC, 0x8, 0xC }, - [CHAR_DPAD_DOWN] = { 0xD, 0x8, 0xC }, - [CHAR_DPAD_LEFT] = { 0xE, 0x8, 0xC }, - [CHAR_DPAD_RIGHT] = { 0xF, 0x8, 0xC }, - [CHAR_DPAD_UPDOWN] = { 0x20, 0x8, 0xC }, - [CHAR_DPAD_LEFTRIGHT] = { 0x21, 0x8, 0xC }, - [CHAR_DPAD_NONE] = { 0x22, 0x8, 0xC } + { 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 } }; -const u8 gKeypadIconTiles[] = INCBIN_U8("graphics/fonts/keypad_icons.4bpp"); - -const struct FontInfo gFontInfos[] = +struct { - { Font0Func, 0x5, 0xC, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font1Func, 0x6, 0x10, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font2Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font3Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font4Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font5Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font6Func, 0x8, 0x10, 0x0, 0x8, 0x0, 0x2, 0x1, 0x3 }, - { Font7Func, 0x5, 0x10, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font8Func, 0x5, 0x8, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { NULL, 0x8, 0x8, 0x0, 0x0, 0x0, 0x1, 0x2, 0xF } + u16 tileOffset; + u8 width; + u8 height; +} static const sKeypadIcons[] = +{ + [CHAR_A_BUTTON] = { 0x00, 8, 12 }, + [CHAR_B_BUTTON] = { 0x01, 8, 12 }, + [CHAR_L_BUTTON] = { 0x02, 16, 12 }, + [CHAR_R_BUTTON] = { 0x04, 16, 12 }, + [CHAR_START_BUTTON] = { 0x06, 24, 12 }, + [CHAR_SELECT_BUTTON] = { 0x09, 24, 12 }, + [CHAR_DPAD_UP] = { 0x0C, 8, 12 }, + [CHAR_DPAD_DOWN] = { 0x0D, 8, 12 }, + [CHAR_DPAD_LEFT] = { 0x0E, 8, 12 }, + [CHAR_DPAD_RIGHT] = { 0x0F, 8, 12 }, + [CHAR_DPAD_UPDOWN] = { 0x20, 8, 12 }, + [CHAR_DPAD_LEFTRIGHT] = { 0x21, 8, 12 }, + [CHAR_DPAD_NONE] = { 0x22, 8, 12 } }; -const u8 gMenuCursorDimensions[][2] = +static const u8 sKeypadIconTiles[] = INCBIN_U8("graphics/fonts/keypad_icons.4bpp"); + +static const struct FontInfo sFontInfos[] = { - { 0x8, 0xC }, - { 0x8, 0xF }, - { 0x8, 0xE }, - { 0x8, 0xE }, - { 0x8, 0xE }, - { 0x8, 0xE }, - { 0x8, 0x10 }, - { 0x8, 0xF }, - { 0x8, 0x8 }, - { 0x0, 0x0 } + [FONT_SMALL] = { + .fontFunction = FontFunc_Small, + .maxLetterWidth = 5, + .maxLetterHeight = 12, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, + }, + [FONT_NORMAL] = { + .fontFunction = FontFunc_Normal, + .maxLetterWidth = 6, + .maxLetterHeight = 16, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, + }, + [FONT_SHORT] = { + .fontFunction = FontFunc_Short, + .maxLetterWidth = 6, + .maxLetterHeight = 14, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, + }, + [FONT_SHORT_COPY_1] = { + .fontFunction = FontFunc_ShortCopy1, + .maxLetterWidth = 6, + .maxLetterHeight = 14, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, + }, + [FONT_SHORT_COPY_2] = { + .fontFunction = FontFunc_ShortCopy2, + .maxLetterWidth = 6, + .maxLetterHeight = 14, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, + }, + [FONT_SHORT_COPY_3] = { + .fontFunction = FontFunc_ShortCopy3, + .maxLetterWidth = 6, + .maxLetterHeight = 14, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, + }, + [FONT_BRAILLE] = { + .fontFunction = FontFunc_Braille, + .maxLetterWidth = 8, + .maxLetterHeight = 16, + .letterSpacing = 0, + .lineSpacing = 8, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, + }, + [FONT_NARROW] = { + .fontFunction = FontFunc_Narrow, + .maxLetterWidth = 5, + .maxLetterHeight = 16, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, + }, + [FONT_SMALL_NARROW] = { + .fontFunction = FontFunc_SmallNarrow, + .maxLetterWidth = 5, + .maxLetterHeight = 8, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, + }, + [FONT_BOLD] = { + .fontFunction = NULL, + .maxLetterWidth = 8, + .maxLetterHeight = 8, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 1, + .bgColor = 2, + .shadowColor = 15, + } }; -const u16 gFont9JapaneseGlyphs[] = INCBIN_U16("graphics/fonts/font9.hwjpnfont"); +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] = {} +}; -extern const u16 gFont8LatinGlyphs[]; -extern const u8 gFont8LatinGlyphWidths[]; -extern const u16 gFont0LatinGlyphs[]; -extern const u8 gFont0LatinGlyphWidths[]; -extern const u16 gFont7LatinGlyphs[]; -extern const u8 gFont7LatinGlyphWidths[]; -extern const u16 gFont2LatinGlyphs[]; -extern const u8 gFont2LatinGlyphWidths[]; -extern const u16 gFont1LatinGlyphs[]; -extern const u8 gFont1LatinGlyphWidths[]; -extern const u16 gFont0JapaneseGlyphs[]; -extern const u16 gFont1JapaneseGlyphs[]; -extern const u16 gFont2JapaneseGlyphs[]; -extern const u8 gFont2JapaneseGlyphWidths[]; +static const u16 sFontBoldJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/bold.hwjpnfont"); -void SetFontsPointer(const struct FontInfo *fonts) +static void SetFontsPointer(const struct FontInfo *fonts) { gFonts = fonts; } @@ -138,7 +245,7 @@ void DeactivateAllTextPrinters(void) { int printer; for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer) - gTextPrinters[printer].active = 0; + sTextPrinters[printer].active = FALSE; } u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) @@ -169,42 +276,43 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi if (!gFonts) return FALSE; - gTempTextPrinter.active = 1; - gTempTextPrinter.state = 0; - gTempTextPrinter.textSpeed = speed; - gTempTextPrinter.delayCounter = 0; - gTempTextPrinter.scrollDistance = 0; + sTempTextPrinter.active = TRUE; + sTempTextPrinter.state = RENDER_STATE_HANDLE_CHAR; + sTempTextPrinter.textSpeed = speed; + sTempTextPrinter.delayCounter = 0; + sTempTextPrinter.scrollDistance = 0; - for (i = 0; i < 7; i++) - { - gTempTextPrinter.subStructFields[i] = 0; - } + for (i = 0; i < (int)ARRAY_COUNT(sTempTextPrinter.subStructFields); i++) + sTempTextPrinter.subStructFields[i] = 0; - gTempTextPrinter.printerTemplate = *printerTemplate; - gTempTextPrinter.callback = callback; - gTempTextPrinter.minLetterSpacing = 0; - gTempTextPrinter.japanese = 0; + sTempTextPrinter.printerTemplate = *printerTemplate; + sTempTextPrinter.callback = callback; + sTempTextPrinter.minLetterSpacing = 0; + sTempTextPrinter.japanese = 0; GenerateFontHalfRowLookupTable(printerTemplate->fgColor, printerTemplate->bgColor, printerTemplate->shadowColor); - if (speed != TEXT_SPEED_FF && speed != 0) + if (speed != TEXT_SKIP_DRAW && speed != 0) { - --gTempTextPrinter.textSpeed; - gTextPrinters[printerTemplate->windowId] = gTempTextPrinter; + --sTempTextPrinter.textSpeed; + sTextPrinters[printerTemplate->windowId] = sTempTextPrinter; } else { - gTempTextPrinter.textSpeed = 0; + sTempTextPrinter.textSpeed = 0; + + // Render all text (up to limit) at once for (j = 0; j < 0x400; ++j) { - if (RenderFont(&gTempTextPrinter) == 1) + if (RenderFont(&sTempTextPrinter) == RENDER_FINISH) break; } - if (speed != TEXT_SPEED_FF) - CopyWindowToVram(gTempTextPrinter.printerTemplate.windowId, 2); - gTextPrinters[printerTemplate->windowId].active = 0; + // All the text is rendered to the window but don't draw it yet. + if (speed != TEXT_SKIP_DRAW) + CopyWindowToVram(sTempTextPrinter.printerTemplate.windowId, COPYWIN_GFX); + sTextPrinters[printerTemplate->windowId].active = FALSE; } - gDisableTextPrinters = 0; + gDisableTextPrinters = FALSE; return TRUE; } @@ -212,23 +320,23 @@ void RunTextPrinters(void) { int i; - if (gDisableTextPrinters == 0) + if (!gDisableTextPrinters) { for (i = 0; i < NUM_TEXT_PRINTERS; ++i) { - if (gTextPrinters[i].active) + if (sTextPrinters[i].active) { - u16 temp = RenderFont(&gTextPrinters[i]); - switch (temp) + u16 renderCmd = RenderFont(&sTextPrinters[i]); + switch (renderCmd) { - case 0: - CopyWindowToVram(gTextPrinters[i].printerTemplate.windowId, 2); - case 3: - if (gTextPrinters[i].callback != 0) - gTextPrinters[i].callback(&gTextPrinters[i].printerTemplate, temp); + case RENDER_PRINT: + CopyWindowToVram(sTextPrinters[i].printerTemplate.windowId, COPYWIN_GFX); + case RENDER_UPDATE: + if (sTextPrinters[i].callback != NULL) + sTextPrinters[i].callback(&sTextPrinters[i].printerTemplate, renderCmd); break; - case 1: - gTextPrinters[i].active = 0; + case RENDER_FINISH: + sTextPrinters[i].active = FALSE; break; } } @@ -238,16 +346,16 @@ void RunTextPrinters(void) bool16 IsTextPrinterActive(u8 id) { - return gTextPrinters[id].active; + return sTextPrinters[id].active; } -u32 RenderFont(struct TextPrinter *textPrinter) +static u32 RenderFont(struct TextPrinter *textPrinter) { u32 ret; while (TRUE) { ret = gFonts[textPrinter->printerTemplate.fontId].fontFunction(textPrinter); - if (ret != 2) + if (ret != RENDER_REPEAT) return ret; } } @@ -257,11 +365,11 @@ void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor) u32 fg12, bg12, shadow12; u32 temp; - u16 *current = gFontHalfRowLookupTable; + u16 *current = sFontHalfRowLookupTable; - gLastTextBgColor = bgColor; - gLastTextFgColor = fgColor; - gLastTextShadowColor = shadowColor; + sLastTextBgColor = bgColor; + sLastTextFgColor = fgColor; + sLastTextShadowColor = shadowColor; bg12 = bgColor << 12; fg12 = fgColor << 12; @@ -405,9 +513,9 @@ void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor) void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor) { - *bgColor = gLastTextBgColor; - *fgColor = gLastTextFgColor; - *shadowColor = gLastTextShadowColor; + *bgColor = sLastTextBgColor; + *fgColor = sLastTextFgColor; + *shadowColor = sLastTextShadowColor; } void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor) @@ -422,40 +530,41 @@ void DecompressGlyphTile(const void *src_, void *dest_) u32 *dest = dest_; temp = *(src++); - *(dest)++ = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest)++ = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); } -u8 GetLastTextColor(u8 colorType) +// Unused +static u8 GetLastTextColor(u8 colorType) { switch (colorType) { case 0: - return gLastTextFgColor; + return sLastTextFgColor; case 2: - return gLastTextBgColor; + return sLastTextBgColor; case 1: - return gLastTextShadowColor; + return sLastTextShadowColor; default: return 0; } @@ -543,9 +652,9 @@ void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) struct Window *window; struct Bitmap pixels_data; struct TextGlyph *glyph; - u8* glyphHeight; + u8 *glyphHeight; - if (gLastTextBgColor != 0) + if (sLastTextBgColor != TEXT_COLOR_TRANSPARENT) { window = &gWindows[textPrinter->printerTemplate.windowId]; pixels_data.pixels = window->tileData; @@ -561,102 +670,102 @@ void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) textPrinter->printerTemplate.currentY, width, *glyphHeight, - gLastTextBgColor); + sLastTextBgColor); } } -u16 Font0Func(struct TextPrinter *textPrinter) +static u16 FontFunc_Small(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (subStruct->hasFontIdBeenSet == FALSE) { - subStruct->glyphId = 0; - subStruct->hasGlyphIdBeenSet = TRUE; + subStruct->fontId = FONT_SMALL; + subStruct->hasFontIdBeenSet = TRUE; } return RenderText(textPrinter); } -u16 Font1Func(struct TextPrinter *textPrinter) +static u16 FontFunc_Normal(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (subStruct->hasFontIdBeenSet == FALSE) { - subStruct->glyphId = 1; - subStruct->hasGlyphIdBeenSet = TRUE; + subStruct->fontId = FONT_NORMAL; + subStruct->hasFontIdBeenSet = TRUE; } return RenderText(textPrinter); } -u16 Font2Func(struct TextPrinter *textPrinter) +static u16 FontFunc_Short(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (subStruct->hasFontIdBeenSet == FALSE) { - subStruct->glyphId = 2; - subStruct->hasGlyphIdBeenSet = TRUE; + subStruct->fontId = FONT_SHORT; + subStruct->hasFontIdBeenSet = TRUE; } return RenderText(textPrinter); } -u16 Font3Func(struct TextPrinter *textPrinter) +static u16 FontFunc_ShortCopy1(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (subStruct->hasFontIdBeenSet == FALSE) { - subStruct->glyphId = 3; - subStruct->hasGlyphIdBeenSet = TRUE; + subStruct->fontId = FONT_SHORT_COPY_1; + subStruct->hasFontIdBeenSet = TRUE; } return RenderText(textPrinter); } -u16 Font4Func(struct TextPrinter *textPrinter) +static u16 FontFunc_ShortCopy2(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (subStruct->hasFontIdBeenSet == FALSE) { - subStruct->glyphId = 4; - subStruct->hasGlyphIdBeenSet = TRUE; + subStruct->fontId = FONT_SHORT_COPY_2; + subStruct->hasFontIdBeenSet = TRUE; } return RenderText(textPrinter); } -u16 Font5Func(struct TextPrinter *textPrinter) +static u16 FontFunc_ShortCopy3(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (subStruct->hasFontIdBeenSet == FALSE) { - subStruct->glyphId = 5; - subStruct->hasGlyphIdBeenSet = TRUE; + subStruct->fontId = FONT_SHORT_COPY_3; + subStruct->hasFontIdBeenSet = TRUE; } return RenderText(textPrinter); } -u16 Font7Func(struct TextPrinter *textPrinter) +static u16 FontFunc_Narrow(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (subStruct->hasFontIdBeenSet == FALSE) { - subStruct->glyphId = 7; - subStruct->hasGlyphIdBeenSet = TRUE; + subStruct->fontId = FONT_NARROW; + subStruct->hasFontIdBeenSet = TRUE; } return RenderText(textPrinter); } -u16 Font8Func(struct TextPrinter *textPrinter) +static u16 FontFunc_SmallNarrow(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->hasGlyphIdBeenSet == FALSE) + if (subStruct->hasFontIdBeenSet == FALSE) { - subStruct->glyphId = 8; - subStruct->hasGlyphIdBeenSet = TRUE; + subStruct->fontId = FONT_SMALL_NARROW; + subStruct->hasFontIdBeenSet = TRUE; } return RenderText(textPrinter); } @@ -699,27 +808,27 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter) switch (gTextFlags.useAlternateDownArrow) { - case FALSE: - default: - arrowTiles = gDownArrowTiles; - break; - case TRUE: - arrowTiles = gDarkDownArrowTiles; - break; + case FALSE: + default: + arrowTiles = sDownArrowTiles; + break; + case TRUE: + arrowTiles = sDarkDownArrowTiles; + break; } BlitBitmapRectToWindow( textPrinter->printerTemplate.windowId, arrowTiles, 0, - gDownArrowYCoords[subStruct->downArrowYPosIdx], + sDownArrowYCoords[subStruct->downArrowYPosIdx], 8, 16, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, 8, 16); - CopyWindowToVram(textPrinter->printerTemplate.windowId, 2); + CopyWindowToVram(textPrinter->printerTemplate.windowId, COPYWIN_GFX); subStruct->downArrowDelay = 8; subStruct->downArrowYPosIdx++; @@ -736,7 +845,7 @@ void TextPrinterClearDownArrow(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentY, 8, 16); - CopyWindowToVram(textPrinter->printerTemplate.windowId, 2); + CopyWindowToVram(textPrinter->printerTemplate.windowId, COPYWIN_GFX); } bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) @@ -806,34 +915,24 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c { switch (gTextFlags.useAlternateDownArrow) { - case 0: - default: - arrowTiles = gDownArrowTiles; - break; - case 1: - arrowTiles = gDarkDownArrowTiles; - break; + case FALSE: + default: + arrowTiles = sDownArrowTiles; + break; + case TRUE: + arrowTiles = sDarkDownArrowTiles; + break; } - BlitBitmapRectToWindow( - windowId, - arrowTiles, - 0, - gDownArrowYCoords[*yCoordIndex & 3], - 0x8, - 0x10, - x, - y - 2, - 0x8, - 0x10); - CopyWindowToVram(windowId, 0x2); + BlitBitmapRectToWindow(windowId, arrowTiles, 0, sDownArrowYCoords[*yCoordIndex & 3], 8, 16, x, y - 2, 8, 16); + CopyWindowToVram(windowId, COPYWIN_GFX); *counter = 8; ++*yCoordIndex; } } } -u16 RenderText(struct TextPrinter *textPrinter) +static u16 RenderText(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); u16 currChar; @@ -842,8 +941,8 @@ u16 RenderText(struct TextPrinter *textPrinter) switch (textPrinter->state) { - case 0: - if ((JOY_HELD(A_BUTTON | B_BUTTON)) && subStruct->hasPrintBeenSpedUp) + case RENDER_STATE_HANDLE_CHAR: + if (JOY_HELD(A_BUTTON | B_BUTTON) && subStruct->hasPrintBeenSpedUp) textPrinter->delayCounter = 0; if (textPrinter->delayCounter && textPrinter->textSpeed) @@ -854,7 +953,7 @@ u16 RenderText(struct TextPrinter *textPrinter) subStruct->hasPrintBeenSpedUp = TRUE; textPrinter->delayCounter = 0; } - return 3; + return RENDER_UPDATE; } if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED) && gTextFlags.autoScroll) @@ -870,10 +969,10 @@ u16 RenderText(struct TextPrinter *textPrinter) case CHAR_NEWLINE: textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; textPrinter->printerTemplate.currentY += (gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing); - return 2; + return RENDER_REPEAT; case PLACEHOLDER_BEGIN: textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_BEGIN: currChar = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; @@ -883,17 +982,17 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_HIGHLIGHT: textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_SHADOW: textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; @@ -902,36 +1001,36 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_PALETTE: textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_SIZE: - subStruct->glyphId = *textPrinter->printerTemplate.currentChar; + return RENDER_REPEAT; + case EXT_CTRL_CODE_FONT: + subStruct->fontId = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_RESET_SIZE: - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_PAUSE: textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; - textPrinter->state = 6; - return 2; + textPrinter->state = RENDER_STATE_PAUSE; + return RENDER_REPEAT; case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: - textPrinter->state = 1; + textPrinter->state = RENDER_STATE_WAIT; if (gTextFlags.autoScroll) subStruct->autoScrollDelay = 0; - return 3; + return RENDER_UPDATE; case EXT_CTRL_CODE_WAIT_SE: - textPrinter->state = 5; - return 3; + textPrinter->state = RENDER_STATE_WAIT_SE; + return RENDER_UPDATE; case EXT_CTRL_CODE_PLAY_BGM: currChar = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; currChar |= *textPrinter->printerTemplate.currentChar << 8; textPrinter->printerTemplate.currentChar++; PlayBGM(currChar); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_ESCAPE: currChar = *textPrinter->printerTemplate.currentChar | 0x100; textPrinter->printerTemplate.currentChar++; @@ -942,26 +1041,26 @@ u16 RenderText(struct TextPrinter *textPrinter) currChar |= (*textPrinter->printerTemplate.currentChar << 8); textPrinter->printerTemplate.currentChar++; PlaySE(currChar); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_SHIFT_TEXT: textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_SHIFT_DOWN: textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_FILL_WINDOW: FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_PAUSE_MUSIC: m4aMPlayStop(&gMPlayInfo_BGM); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_RESUME_MUSIC: m4aMPlayContinue(&gMPlayInfo_BGM); - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_CLEAR: width = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; @@ -969,13 +1068,13 @@ u16 RenderText(struct TextPrinter *textPrinter) { ClearTextSpan(textPrinter, width); textPrinter->printerTemplate.currentX += width; - return 0; + return RENDER_PRINT; } - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_SKIP: textPrinter->printerTemplate.currentX = *textPrinter->printerTemplate.currentChar + textPrinter->printerTemplate.x; textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_CLEAR_TO: { widthHelper = *textPrinter->printerTemplate.currentChar; @@ -986,29 +1085,29 @@ u16 RenderText(struct TextPrinter *textPrinter) { ClearTextSpan(textPrinter, width); textPrinter->printerTemplate.currentX += width; - return 0; + return RENDER_PRINT; } } - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_MIN_LETTER_SPACING: textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++; - return 2; + return RENDER_REPEAT; case EXT_CTRL_CODE_JPN: - textPrinter->japanese = 1; - return 2; + textPrinter->japanese = TRUE; + return RENDER_REPEAT; case EXT_CTRL_CODE_ENG: - textPrinter->japanese = 0; - return 2; + textPrinter->japanese = FALSE; + return RENDER_REPEAT; } break; case CHAR_PROMPT_CLEAR: - textPrinter->state = 2; + textPrinter->state = RENDER_STATE_CLEAR; TextPrinterInitDownArrowCounters(textPrinter); - return 3; + return RENDER_UPDATE; case CHAR_PROMPT_SCROLL: - textPrinter->state = 3; + textPrinter->state = RENDER_STATE_SCROLL_START; TextPrinterInitDownArrowCounters(textPrinter); - return 3; + return RENDER_UPDATE; case CHAR_EXTRA_SYMBOL: currChar = *textPrinter->printerTemplate.currentChar | 0x100; textPrinter->printerTemplate.currentChar++; @@ -1017,32 +1116,32 @@ u16 RenderText(struct TextPrinter *textPrinter) currChar = *textPrinter->printerTemplate.currentChar++; gCurGlyph.width = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY); textPrinter->printerTemplate.currentX += gCurGlyph.width + textPrinter->printerTemplate.letterSpacing; - return 0; + return RENDER_PRINT; case EOS: - return 1; + return RENDER_FINISH; } - switch (subStruct->glyphId) + switch (subStruct->fontId) { - case 0: - DecompressGlyphFont0(currChar, textPrinter->japanese); + case FONT_SMALL: + DecompressGlyph_Small(currChar, textPrinter->japanese); break; - case 1: - DecompressGlyphFont1(currChar, textPrinter->japanese); + case FONT_NORMAL: + DecompressGlyph_Normal(currChar, textPrinter->japanese); break; - case 2: - case 3: - case 4: - case 5: - DecompressGlyphFont2(currChar, textPrinter->japanese); + case FONT_SHORT: + case FONT_SHORT_COPY_1: + case FONT_SHORT_COPY_2: + case FONT_SHORT_COPY_3: + DecompressGlyph_Short(currChar, textPrinter->japanese); break; - case 7: - DecompressGlyphFont7(currChar, textPrinter->japanese); + case FONT_NARROW: + DecompressGlyph_Narrow(currChar, textPrinter->japanese); break; - case 8: - DecompressGlyphFont8(currChar, textPrinter->japanese); + case FONT_SMALL_NARROW: + DecompressGlyph_SmallNarrow(currChar, textPrinter->japanese); break; - case 6: + case FONT_BRAILLE: break; } @@ -1065,34 +1164,34 @@ u16 RenderText(struct TextPrinter *textPrinter) else textPrinter->printerTemplate.currentX += gCurGlyph.width; } - return 0; - case 1: + return RENDER_PRINT; + case RENDER_STATE_WAIT: if (TextPrinterWait(textPrinter)) - textPrinter->state = 0; - return 3; - case 2: + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; + case RENDER_STATE_CLEAR: if (TextPrinterWaitWithDownArrow(textPrinter)) { FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y; - textPrinter->state = 0; + textPrinter->state = RENDER_STATE_HANDLE_CHAR; } - return 3; - case 3: + return RENDER_UPDATE; + case RENDER_STATE_SCROLL_START: if (TextPrinterWaitWithDownArrow(textPrinter)) { TextPrinterClearDownArrow(textPrinter); textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->state = 4; + textPrinter->state = RENDER_STATE_SCROLL; } - return 3; - case 4: + return RENDER_UPDATE; + case RENDER_STATE_SCROLL: if (textPrinter->scrollDistance) { int scrollSpeed = GetPlayerTextSpeed(); - int speed = gWindowVerticalScrollSpeeds[scrollSpeed]; + int speed = sWindowVerticalScrollSpeeds[scrollSpeed]; if (textPrinter->scrollDistance < speed) { ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); @@ -1103,29 +1202,30 @@ u16 RenderText(struct TextPrinter *textPrinter) ScrollWindow(textPrinter->printerTemplate.windowId, 0, speed, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); textPrinter->scrollDistance -= speed; } - CopyWindowToVram(textPrinter->printerTemplate.windowId, 2); + CopyWindowToVram(textPrinter->printerTemplate.windowId, COPYWIN_GFX); } else { - textPrinter->state = 0; + textPrinter->state = RENDER_STATE_HANDLE_CHAR; } - return 3; - case 5: + return RENDER_UPDATE; + case RENDER_STATE_WAIT_SE: if (!IsSEPlaying()) - textPrinter->state = 0; - return 3; - case 6: + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; + case RENDER_STATE_PAUSE: if (textPrinter->delayCounter != 0) textPrinter->delayCounter--; else - textPrinter->state = 0; - return 3; + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; } - return 1; + return RENDER_FINISH; } -u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) +// Unused +static u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) { int i; u8 width; @@ -1136,10 +1236,8 @@ u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) u8 lineWidths[8]; const u8 *strLocal; - for (i = 0; i < 8; i++) - { + for (i = 0; i < (int)ARRAY_COUNT(lineWidths); i++) lineWidths[i] = 0; - } width = 0; line = 0; @@ -1170,7 +1268,7 @@ u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) case EXT_CTRL_CODE_HIGHLIGHT: case EXT_CTRL_CODE_SHADOW: case EXT_CTRL_CODE_PALETTE: - case EXT_CTRL_CODE_SIZE: + case EXT_CTRL_CODE_FONT: case EXT_CTRL_CODE_PAUSE: case EXT_CTRL_CODE_ESCAPE: case EXT_CTRL_CODE_SHIFT_TEXT: @@ -1216,14 +1314,14 @@ u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) return (u8)(GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH) + letterSpacing) * width; } -u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32) +static u32 (*GetFontWidthFunc(u8 fontId))(u16, bool32) { u32 i; - for (i = 0; i < 9; ++i) + for (i = 0; i < ARRAY_COUNT(sGlyphWidthFuncs); ++i) { - if (glyphId == gGlyphWidthFuncs[i].fontId) - return gGlyphWidthFuncs[i].func; + if (fontId == sGlyphWidthFuncs[i].fontId) + return sGlyphWidthFuncs[i].func; } return NULL; @@ -1233,7 +1331,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) { bool8 isJapanese; int minGlyphWidth; - u32 (*func)(u16 glyphId, bool32 isJapanese); + u32 (*func)(u16 fontId, bool32 isJapanese); int localLetterSpacing; u32 lineWidth; const u8 *bufferPointer; @@ -1268,17 +1366,17 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) case PLACEHOLDER_BEGIN: switch (*++str) { - case PLACEHOLDER_ID_STRING_VAR_1: - bufferPointer = gStringVar1; - break; - case PLACEHOLDER_ID_STRING_VAR_2: - bufferPointer = gStringVar2; - break; - case PLACEHOLDER_ID_STRING_VAR_3: - bufferPointer = gStringVar3; - break; - default: - return 0; + case PLACEHOLDER_ID_STRING_VAR_1: + bufferPointer = gStringVar1; + break; + case PLACEHOLDER_ID_STRING_VAR_2: + bufferPointer = gStringVar2; + break; + case PLACEHOLDER_ID_STRING_VAR_3: + bufferPointer = gStringVar3; + break; + default: + return 0; } case CHAR_DYNAMIC: if (bufferPointer == NULL) @@ -1319,7 +1417,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) case EXT_CTRL_CODE_SHIFT_DOWN: ++str; break; - case EXT_CTRL_CODE_SIZE: + case EXT_CTRL_CODE_FONT: func = GetFontWidthFunc(*++str); if (func == NULL) return 0; @@ -1401,7 +1499,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) return width; } -u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) +u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str) { u8 shadowColor; u8 *strLocal; @@ -1449,7 +1547,7 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) shadowColor = strLocal[strPos++]; GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor); continue; - case EXT_CTRL_CODE_SIZE: + case EXT_CTRL_CODE_FONT: fontId = strLocal[strPos++]; break; case EXT_CTRL_CODE_PLAY_BGM: @@ -1490,12 +1588,12 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) default: switch (fontId) { - case 9: - DecompressGlyphFont9(temp); + case FONT_BOLD: + DecompressGlyph_Bold(temp); break; - case 1: + case FONT_NORMAL: default: - DecompressGlyphFont1(temp, 1); + DecompressGlyph_Normal(temp, TRUE); break; } CpuCopy32(gCurGlyph.gfxBufferTop, pixels, 0x20); @@ -1514,36 +1612,36 @@ u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y) { BlitBitmapRectToWindow( windowId, - gKeypadIconTiles + (gKeypadIcons[keypadIconId].tileOffset * 0x20), + sKeypadIconTiles + (sKeypadIcons[keypadIconId].tileOffset * 0x20), 0, 0, 0x80, 0x80, x, y, - gKeypadIcons[keypadIconId].width, - gKeypadIcons[keypadIconId].height); - return gKeypadIcons[keypadIconId].width; + sKeypadIcons[keypadIconId].width, + sKeypadIcons[keypadIconId].height); + return sKeypadIcons[keypadIconId].width; } u8 GetKeypadIconTileOffset(u8 keypadIconId) { - return gKeypadIcons[keypadIconId].tileOffset; + return sKeypadIcons[keypadIconId].tileOffset; } u8 GetKeypadIconWidth(u8 keypadIconId) { - return gKeypadIcons[keypadIconId].width; + return sKeypadIcons[keypadIconId].width; } u8 GetKeypadIconHeight(u8 keypadIconId) { - return gKeypadIcons[keypadIconId].height; + return sKeypadIcons[keypadIconId].height; } void SetDefaultFontsPointer(void) { - SetFontsPointer(&gFontInfos[0]); + SetFontsPointer(sFontInfos); } u8 GetFontAttribute(u8 fontId, u8 attributeId) @@ -1552,28 +1650,28 @@ u8 GetFontAttribute(u8 fontId, u8 attributeId) switch (attributeId) { case FONTATTR_MAX_LETTER_WIDTH: - result = gFontInfos[fontId].maxLetterWidth; + result = sFontInfos[fontId].maxLetterWidth; break; case FONTATTR_MAX_LETTER_HEIGHT: - result = gFontInfos[fontId].maxLetterHeight; + result = sFontInfos[fontId].maxLetterHeight; break; case FONTATTR_LETTER_SPACING: - result = gFontInfos[fontId].letterSpacing; + result = sFontInfos[fontId].letterSpacing; break; case FONTATTR_LINE_SPACING: - result = gFontInfos[fontId].lineSpacing; + result = sFontInfos[fontId].lineSpacing; break; case FONTATTR_UNKNOWN: - result = gFontInfos[fontId].unk; + result = sFontInfos[fontId].unk; break; case FONTATTR_COLOR_FOREGROUND: - result = gFontInfos[fontId].fgColor; + result = sFontInfos[fontId].fgColor; break; case FONTATTR_COLOR_BACKGROUND: - result = gFontInfos[fontId].bgColor; + result = sFontInfos[fontId].bgColor; break; case FONTATTR_COLOR_SHADOW: - result = gFontInfos[fontId].shadowColor; + result = sFontInfos[fontId].shadowColor; break; } return result; @@ -1581,16 +1679,16 @@ u8 GetFontAttribute(u8 fontId, u8 attributeId) u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension) { - return gMenuCursorDimensions[fontId][whichDimension]; + return sMenuCursorDimensions[fontId][whichDimension]; } -void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) +static void DecompressGlyph_Small(u16 glyphId, bool32 isJapanese) { - const u16* glyphs; + const u16 *glyphs; if (isJapanese == 1) { - glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); + glyphs = gFontSmallJapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); gCurGlyph.width = 8; @@ -1598,8 +1696,8 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) } else { - glyphs = gFont0LatinGlyphs + (0x20 * glyphId); - gCurGlyph.width = gFont0LatinGlyphWidths[glyphId]; + glyphs = gFontSmallLatinGlyphs + (0x20 * glyphId); + gCurGlyph.width = gFontSmallLatinGlyphWidths[glyphId]; if (gCurGlyph.width <= 8) { @@ -1618,21 +1716,21 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) } } -u32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese) +static u32 GetGlyphWidth_Small(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) return 8; else - return gFont0LatinGlyphWidths[glyphId]; + return gFontSmallLatinGlyphWidths[glyphId]; } -void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese) +static void DecompressGlyph_Narrow(u16 glyphId, bool32 isJapanese) { - const u16* glyphs; + const u16 *glyphs; if (isJapanese == TRUE) { - glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId % 0x10)); + glyphs = gFontNormalJapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId % 0x10)); DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); gCurGlyph.width = 8; @@ -1640,8 +1738,8 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese) } else { - glyphs = gFont7LatinGlyphs + (0x20 * glyphId); - gCurGlyph.width = gFont7LatinGlyphWidths[glyphId]; + glyphs = gFontNarrowLatinGlyphs + (0x20 * glyphId); + gCurGlyph.width = gFontNarrowLatinGlyphWidths[glyphId]; if (gCurGlyph.width <= 8) { @@ -1660,21 +1758,21 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese) } } -u32 GetGlyphWidthFont7(u16 glyphId, bool32 isJapanese) +static u32 GetGlyphWidth_Narrow(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) return 8; else - return gFont7LatinGlyphWidths[glyphId]; + return gFontNarrowLatinGlyphWidths[glyphId]; } -void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese) +static void DecompressGlyph_SmallNarrow(u16 glyphId, bool32 isJapanese) { - const u16* glyphs; + const u16 *glyphs; if (isJapanese == TRUE) { - glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); + glyphs = gFontSmallJapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); gCurGlyph.width = 8; @@ -1682,8 +1780,8 @@ void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese) } else { - glyphs = gFont8LatinGlyphs + (0x20 * glyphId); - gCurGlyph.width = gFont8LatinGlyphWidths[glyphId]; + glyphs = gFontSmallNarrowLatinGlyphs + (0x20 * glyphId); + gCurGlyph.width = gFontSmallNarrowLatinGlyphWidths[glyphId]; if (gCurGlyph.width <= 8) { @@ -1702,32 +1800,32 @@ void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese) } } -u32 GetGlyphWidthFont8(u16 glyphId, bool32 isJapanese) +static u32 GetGlyphWidth_SmallNarrow(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) return 8; else - return gFont8LatinGlyphWidths[glyphId]; + return gFontSmallNarrowLatinGlyphWidths[glyphId]; } -void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) +static void DecompressGlyph_Short(u16 glyphId, bool32 isJapanese) { - const u16* glyphs; + const u16 *glyphs; if (isJapanese == TRUE) { - glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); + 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 = gFont2JapaneseGlyphWidths[glyphId]; + gCurGlyph.width = gFontShortJapaneseGlyphWidths[glyphId]; gCurGlyph.height = 14; } else { - glyphs = gFont2LatinGlyphs + (0x20 * glyphId); - gCurGlyph.width = gFont2LatinGlyphWidths[glyphId]; + glyphs = gFontShortLatinGlyphs + (0x20 * glyphId); + gCurGlyph.width = gFontShortLatinGlyphWidths[glyphId]; if (gCurGlyph.width <= 8) { @@ -1746,21 +1844,21 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) } } -u32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese) +static u32 GetGlyphWidth_Short(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) - return gFont2JapaneseGlyphWidths[glyphId]; + return gFontShortJapaneseGlyphWidths[glyphId]; else - return gFont2LatinGlyphWidths[glyphId]; + return gFontShortLatinGlyphWidths[glyphId]; } -void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) +static void DecompressGlyph_Normal(u16 glyphId, bool32 isJapanese) { - const u16* glyphs; + const u16 *glyphs; if (isJapanese == TRUE) { - glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId % 0x10)); + glyphs = gFontNormalJapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId % 0x10)); DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); gCurGlyph.width = 8; @@ -1768,8 +1866,8 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) } else { - glyphs = gFont1LatinGlyphs + (0x20 * glyphId); - gCurGlyph.width = gFont1LatinGlyphWidths[glyphId]; + glyphs = gFontNormalLatinGlyphs + (0x20 * glyphId); + gCurGlyph.width = gFontNormalLatinGlyphWidths[glyphId]; if (gCurGlyph.width <= 8) { @@ -1788,19 +1886,19 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) } } -u32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese) +static u32 GetGlyphWidth_Normal(u16 glyphId, bool32 isJapanese) { if (isJapanese == TRUE) return 8; else - return gFont1LatinGlyphWidths[glyphId]; + return gFontNormalLatinGlyphWidths[glyphId]; } -void DecompressGlyphFont9(u16 glyphId) +static void DecompressGlyph_Bold(u16 glyphId) { - const u16* glyphs; + const u16 *glyphs; - glyphs = gFont9JapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF)); + glyphs = sFontBoldJapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); gCurGlyph.width = 8; diff --git a/gflib/text.h b/gflib/text.h index 3edd0fc624..c07817290d 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -1,276 +1,47 @@ #ifndef GUARD_TEXT_H #define GUARD_TEXT_H -#define CHAR_SPACE 0x00 -#define CHAR_A_GRAVE 0x01 -#define CHAR_A_ACUTE 0x02 -#define CHAR_A_CIRCUMFLEX 0x03 -#define CHAR_C_CEDILLA 0x04 -#define CHAR_E_GRAVE 0x05 -#define CHAR_E_ACUTE 0x06 -#define CHAR_E_CIRCUMFLEX 0x07 -#define CHAR_E_DIAERESIS 0x08 -#define CHAR_I_GRAVE 0x09 -//#define CHAR_I_ACUTE 0x0A // Is 0x5A instead -#define CHAR_I_CIRCUMFLEX 0x0B -#define CHAR_I_DIAERESIS 0x0C -#define CHAR_O_GRAVE 0x0D -#define CHAR_O_ACUTE 0x0E -#define CHAR_O_CIRCUMFLEX 0x0F -#define CHAR_OE 0x10 -#define CHAR_U_GRAVE 0x11 -#define CHAR_U_ACUTE 0x12 -#define CHAR_U_CIRCUMFLEX 0x13 -#define CHAR_N_TILDE 0x14 -#define CHAR_ESZETT 0x15 -#define CHAR_a_GRAVE 0x16 -#define CHAR_a_ACUTE 0x17 -//#define CHAR_a_CIRCUMFLEX 0x18 // Is 0x68 instead -#define CHAR_c_CEDILLA 0x19 -#define CHAR_e_GRAVE 0x1A -#define CHAR_e_ACUTE 0x1B -#define CHAR_e_CIRCUMFLEX 0x1C -#define CHAR_e_DIAERESIS 0x1D -#define CHAR_i_GRAVE 0x1E -//#define CHAR_i_ACUTE 0x1F // Is 0x6F instead -#define CHAR_i_CIRCUMFLEX 0x20 -#define CHAR_i_DIAERESIS 0x21 -#define CHAR_o_GRAVE 0x22 -#define CHAR_o_ACUTE 0x23 -#define CHAR_o_CIRCUMFLEX 0x24 -#define CHAR_oe 0x25 -#define CHAR_u_GRAVE 0x26 -#define CHAR_u_ACUTE 0x27 -#define CHAR_u_CIRCUMFLEX 0x28 -#define CHAR_n_TILDE 0x29 -#define CHAR_MASCULINE_ORDINAL 0x2A -#define CHAR_FEMININE_ORDINAL 0x2B -#define CHAR_SUPER_ER 0x2C -#define CHAR_AMPERSAND 0x2D -#define CHAR_PLUS 0x2E -// -#define CHAR_LV 0x34 -#define CHAR_EQUALS 0x35 -#define CHAR_SEMICOLON 0x36 -// -#define CHAR_INV_QUESTION_MARK 0x51 -#define CHAR_INV_EXCL_MARK 0x52 -#define CHAR_PK 0x53 -#define CHAR_MN 0x54 -#define CHAR_PO 0x55 -#define CHAR_KE 0x56 -#define CHAR_BLOCK_1 0x57 // Each of these 3 -#define CHAR_BLOCK_2 0x58 // chars contains 1/3 -#define CHAR_BLOCK_3 0x59 // of the word BLOCK -#define CHAR_I_ACUTE 0x5A -#define CHAR_PERCENT 0x5B -#define CHAR_LEFT_PAREN 0x5C -#define CHAR_RIGHT_PAREN 0x5D -// -#define CHAR_a_CIRCUMFLEX 0x68 -// -#define CHAR_i_ACUTE 0x6F -// -#define CHAR_GENDERLESS 0x77 // Empty space for lack of gender icon -// -#define CHAR_UP_ARROW 0x79 -#define CHAR_DOWN_ARROW 0x7A -#define CHAR_LEFT_ARROW 0x7B -#define CHAR_RIGHT_ARROW 0x7C -// -#define CHAR_SUPER_E 0x84 -#define CHAR_LESS_THAN 0x85 -#define CHAR_GREATER_THAN 0x86 -// -#define CHAR_SUPER_RE 0xA0 -#define CHAR_0 0xA1 -#define CHAR_1 0xA2 -#define CHAR_2 0xA3 -#define CHAR_3 0xA4 -#define CHAR_4 0xA5 -#define CHAR_5 0xA6 -#define CHAR_6 0xA7 -#define CHAR_7 0xA8 -#define CHAR_8 0xA9 -#define CHAR_9 0xAA -#define CHAR_EXCL_MARK 0xAB -#define CHAR_QUESTION_MARK 0xAC -#define CHAR_PERIOD 0xAD -#define CHAR_HYPHEN 0xAE -#define CHAR_BULLET 0xAF -#define CHAR_ELLIPSIS 0xB0 -#define CHAR_DBL_QUOT_LEFT 0xB1 -#define CHAR_DBL_QUOT_RIGHT 0xB2 -#define CHAR_SGL_QUOT_LEFT 0xB3 -#define CHAR_SGL_QUOT_RIGHT 0xB4 -#define CHAR_MALE 0xB5 -#define CHAR_FEMALE 0xB6 -#define CHAR_CURRENCY 0xB7 -#define CHAR_COMMA 0xB8 -#define CHAR_MULT_SIGN 0xB9 -#define CHAR_SLASH 0xBA -#define CHAR_A 0xBB -#define CHAR_B 0xBC -#define CHAR_C 0xBD -#define CHAR_D 0xBE -#define CHAR_E 0xBF -#define CHAR_F 0xC0 -#define CHAR_G 0xC1 -#define CHAR_H 0xC2 -#define CHAR_I 0xC3 -#define CHAR_J 0xC4 -#define CHAR_K 0xC5 -#define CHAR_L 0xC6 -#define CHAR_M 0xC7 -#define CHAR_N 0xC8 -#define CHAR_O 0xC9 -#define CHAR_P 0xCA -#define CHAR_Q 0xCB -#define CHAR_R 0xCC -#define CHAR_S 0xCD -#define CHAR_T 0xCE -#define CHAR_U 0xCF -#define CHAR_V 0xD0 -#define CHAR_W 0xD1 -#define CHAR_X 0xD2 -#define CHAR_Y 0xD3 -#define CHAR_Z 0xD4 -#define CHAR_a 0xD5 -#define CHAR_b 0xD6 -#define CHAR_c 0xD7 -#define CHAR_d 0xD8 -#define CHAR_e 0xD9 -#define CHAR_f 0xDA -#define CHAR_g 0xDB -#define CHAR_h 0xDC -#define CHAR_i 0xDD -#define CHAR_j 0xDE -#define CHAR_k 0xDF -#define CHAR_l 0xE0 -#define CHAR_m 0xE1 -#define CHAR_n 0xE2 -#define CHAR_o 0xE3 -#define CHAR_p 0xE4 -#define CHAR_q 0xE5 -#define CHAR_r 0xE6 -#define CHAR_s 0xE7 -#define CHAR_t 0xE8 -#define CHAR_u 0xE9 -#define CHAR_v 0xEA -#define CHAR_w 0xEB -#define CHAR_x 0xEC -#define CHAR_y 0xED -#define CHAR_z 0xEE -#define CHAR_BLACK_TRIANGLE 0xEF -#define CHAR_COLON 0xF0 -#define CHAR_A_DIAERESIS 0xF1 -#define CHAR_O_DIAERESIS 0xF2 -#define CHAR_U_DIAERESIS 0xF3 -#define CHAR_a_DIAERESIS 0xF4 -#define CHAR_o_DIAERESIS 0xF5 -#define CHAR_u_DIAERESIS 0xF6 -#define CHAR_DYNAMIC 0xF7 -#define CHAR_KEYPAD_ICON 0xF8 -#define CHAR_EXTRA_SYMBOL 0xF9 -#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog -#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog -#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code -#define PLACEHOLDER_BEGIN 0xFD // string placeholder -#define CHAR_NEWLINE 0xFE -#define EOS 0xFF // end of string - -// CHAR_KEYPAD_ICON chars -#define CHAR_A_BUTTON 0x00 -#define CHAR_B_BUTTON 0x01 -#define CHAR_L_BUTTON 0x02 -#define CHAR_R_BUTTON 0x03 -#define CHAR_START_BUTTON 0x04 -#define CHAR_SELECT_BUTTON 0x05 -#define CHAR_DPAD_UP 0x06 -#define CHAR_DPAD_DOWN 0x07 -#define CHAR_DPAD_LEFT 0x08 -#define CHAR_DPAD_RIGHT 0x09 -#define CHAR_DPAD_UPDOWN 0x0A -#define CHAR_DPAD_LEFTRIGHT 0x0B -#define CHAR_DPAD_NONE 0x0C - -// CHAR_EXTRA_SYMBOL chars -#define CHAR_UP_ARROW_2 0x00 -#define CHAR_DOWN_ARROW_2 0x01 -#define CHAR_LEFT_ARROW_2 0x02 -#define CHAR_RIGHT_ARROW_2 0x03 -#define CHAR_PLUS_2 0x04 -#define CHAR_LV_2 0x05 -#define CHAR_PP 0x06 -#define CHAR_ID 0x07 -#define CHAR_NO 0x08 -#define CHAR_UNDERSCORE 0x09 - -#define EXT_CTRL_CODE_COLOR 0x01 -#define EXT_CTRL_CODE_HIGHLIGHT 0x02 -#define EXT_CTRL_CODE_SHADOW 0x03 -#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x04 -#define EXT_CTRL_CODE_PALETTE 0x05 -#define EXT_CTRL_CODE_SIZE 0x06 -#define EXT_CTRL_CODE_RESET_SIZE 0x07 -#define EXT_CTRL_CODE_PAUSE 0x08 -#define EXT_CTRL_CODE_PAUSE_UNTIL_PRESS 0x09 -#define EXT_CTRL_CODE_WAIT_SE 0x0A -#define EXT_CTRL_CODE_PLAY_BGM 0x0B -#define EXT_CTRL_CODE_ESCAPE 0x0C -#define EXT_CTRL_CODE_SHIFT_TEXT 0x0D -#define EXT_CTRL_CODE_SHIFT_DOWN 0x0E -#define EXT_CTRL_CODE_FILL_WINDOW 0x0F -#define EXT_CTRL_CODE_PLAY_SE 0x10 -#define EXT_CTRL_CODE_CLEAR 0x11 -#define EXT_CTRL_CODE_SKIP 0x12 -#define EXT_CTRL_CODE_CLEAR_TO 0x13 -#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14 -#define EXT_CTRL_CODE_JPN 0x15 -#define EXT_CTRL_CODE_ENG 0x16 -#define EXT_CTRL_CODE_PAUSE_MUSIC 0x17 -#define EXT_CTRL_CODE_RESUME_MUSIC 0x18 - -#define TEXT_COLOR_TRANSPARENT 0x0 -#define TEXT_COLOR_WHITE 0x1 -#define TEXT_COLOR_DARK_GRAY 0x2 -#define TEXT_COLOR_LIGHT_GRAY 0x3 -#define TEXT_COLOR_RED 0x4 -#define TEXT_COLOR_LIGHT_RED 0x5 -#define TEXT_COLOR_GREEN 0x6 -#define TEXT_COLOR_LIGHT_GREEN 0x7 -#define TEXT_COLOR_BLUE 0x8 -#define TEXT_COLOR_LIGHT_BLUE 0x9 -#define TEXT_DYNAMIC_COLOR_1 0xA // Usually white -#define TEXT_DYNAMIC_COLOR_2 0xB // Usually white w/ tinge of green -#define TEXT_DYNAMIC_COLOR_3 0xC // Usually white -#define TEXT_DYNAMIC_COLOR_4 0xD // Usually aquamarine -#define TEXT_DYNAMIC_COLOR_5 0xE // Usually blue-green -#define TEXT_DYNAMIC_COLOR_6 0xF // Usually cerulean - -#define PLACEHOLDER_ID_UNKNOWN 0x0 -#define PLACEHOLDER_ID_PLAYER 0x1 -#define PLACEHOLDER_ID_STRING_VAR_1 0x2 -#define PLACEHOLDER_ID_STRING_VAR_2 0x3 -#define PLACEHOLDER_ID_STRING_VAR_3 0x4 -#define PLACEHOLDER_ID_KUN 0x5 -#define PLACEHOLDER_ID_RIVAL 0x6 -#define PLACEHOLDER_ID_VERSION 0x7 -#define PLACEHOLDER_ID_AQUA 0x8 -#define PLACEHOLDER_ID_MAGMA 0x9 -#define PLACEHOLDER_ID_ARCHIE 0xA -#define PLACEHOLDER_ID_MAXIE 0xB -#define PLACEHOLDER_ID_KYOGRE 0xC -#define PLACEHOLDER_ID_GROUDON 0xD - -// battle placeholders are located in battle_message.h +#include "characters.h" #define NUM_TEXT_PRINTERS 32 -#define TEXT_SPEED_FF 0xFF +// Given as a text speed when all the text should be +// loaded at once but not copied to vram yet. +#define TEXT_SKIP_DRAW 0xFF -enum -{ +enum { + FONT_SMALL, + FONT_NORMAL, + FONT_SHORT, + FONT_SHORT_COPY_1, + FONT_SHORT_COPY_2, + FONT_SHORT_COPY_3, + FONT_BRAILLE, + FONT_NARROW, + FONT_SMALL_NARROW, // Very similar to FONT_SMALL, some glyphs are narrower + FONT_BOLD, // JP glyph set only +}; + +// Return values for font functions +enum { + RENDER_PRINT, + RENDER_FINISH, + RENDER_REPEAT, // Run render function again, if e.g. a control code is encountered. + RENDER_UPDATE, +}; + +// Text printer states read by RenderText / FontFunc_Braille +enum { + RENDER_STATE_HANDLE_CHAR, + RENDER_STATE_WAIT, + RENDER_STATE_CLEAR, + RENDER_STATE_SCROLL_START, + RENDER_STATE_SCROLL, + RENDER_STATE_WAIT_SE, + RENDER_STATE_PAUSE, +}; + +enum { FONTATTR_MAX_LETTER_WIDTH, FONTATTR_MAX_LETTER_HEIGHT, FONTATTR_LETTER_SPACING, @@ -283,18 +54,18 @@ enum struct TextPrinterSubStruct { - u8 glyphId:4; // 0x14 + u8 fontId:4; // 0x14 bool8 hasPrintBeenSpedUp:1; u8 unk:3; u8 downArrowDelay:5; u8 downArrowYPosIdx:2; - bool8 hasGlyphIdBeenSet:1; + bool8 hasFontIdBeenSet:1; u8 autoScrollDelay; }; struct TextPrinterTemplate { - const u8* currentChar; + const u8 *currentChar; u8 windowId; u8 fontId; u8 x; @@ -346,13 +117,6 @@ struct GlyphWidthFunc u32 (*func)(u16 glyphId, bool32 isJapanese); }; -struct KeypadIcon -{ - u16 tileOffset; - u8 width; - u8 height; -}; - typedef struct { bool8 canABSpeedUpPrint:1; bool8 useAlternateDownArrow:1; @@ -373,31 +137,19 @@ extern TextFlags gTextFlags; extern u8 gDisableTextPrinters; extern struct TextGlyph gCurGlyph; -void SetFontsPointer(const struct FontInfo *fonts); void DeactivateAllTextPrinters(void); u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)); bool16 AddTextPrinter(struct TextPrinterTemplate *template, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)); void RunTextPrinters(void); bool16 IsTextPrinterActive(u8 id); -u32 RenderFont(struct TextPrinter *textPrinter); void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor); void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor); void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor); void DecompressGlyphTile(const void *src_, void *dest_); -u8 GetLastTextColor(u8 colorType); void CopyGlyphToWindow(struct TextPrinter *x); void ClearTextSpan(struct TextPrinter *textPrinter, u32 width); u8 GetMenuCursorDimensionByFont(u8, u8); -u16 Font0Func(struct TextPrinter *textPrinter); -u16 Font1Func(struct TextPrinter *textPrinter); -u16 Font2Func(struct TextPrinter *textPrinter); -u16 Font3Func(struct TextPrinter *textPrinter); -u16 Font4Func(struct TextPrinter *textPrinter); -u16 Font5Func(struct TextPrinter *textPrinter); -u16 Font7Func(struct TextPrinter *textPrinter); -u16 Font8Func(struct TextPrinter *textPrinter); - void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter); void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter); void TextPrinterClearDownArrow(struct TextPrinter *textPrinter); @@ -405,11 +157,8 @@ bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter); bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter); bool16 TextPrinterWait(struct TextPrinter *textPrinter); void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *counter, u8 *yCoordIndex); -u16 RenderText(struct TextPrinter *textPrinter); -u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing); -u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32); s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing); -u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str); +u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str); u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y); u8 GetKeypadIconTileOffset(u8 keypadIconId); u8 GetKeypadIconWidth(u8 keypadIconId); @@ -417,20 +166,9 @@ u8 GetKeypadIconHeight(u8 keypadIconId); void SetDefaultFontsPointer(void); u8 GetFontAttribute(u8 fontId, u8 attributeId); u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension); -void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese); -u32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese); -u32 GetGlyphWidthFont7(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese); -u32 GetGlyphWidthFont8(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese); -u32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese); -u32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese); -void DecompressGlyphFont9(u16 glyphId); -// unk_text_util_2.c -u16 Font6Func(struct TextPrinter *textPrinter); -u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese); +// braille.c +u16 FontFunc_Braille(struct TextPrinter *textPrinter); +u32 GetGlyphWidth_Braille(u16 glyphId, bool32 isJapanese); #endif // GUARD_TEXT_H diff --git a/gflib/window.c b/gflib/window.c index b03b513dac..ff9e8a6e01 100644 --- a/gflib/window.c +++ b/gflib/window.c @@ -10,7 +10,7 @@ u32 gUnusedWindowVar2; u8 gTransparentTileNumber; u32 gUnusedWindowVar3; void *gWindowBgTilemapBuffers[NUM_BACKGROUNDS]; -extern u32 gUnneededFireRedVariable; +extern u32 gWindowTileAutoAllocEnabled; #define WINDOWS_MAX 32 @@ -35,7 +35,7 @@ bool16 InitWindows(const struct WindowTemplate *templates) int j; u8 bgLayer; u16 attrib; - u8* allocatedTilemapBuffer; + u8 *allocatedTilemapBuffer; int allocatedBaseBlock; for (i = 0; i < NUM_BACKGROUNDS; ++i) @@ -55,9 +55,9 @@ bool16 InitWindows(const struct WindowTemplate *templates) for (i = 0, allocatedBaseBlock = 0, bgLayer = templates[i].bg; bgLayer != 0xFF && i < WINDOWS_MAX; ++i, bgLayer = templates[i].bg) { - if (gUnneededFireRedVariable == 1) + if (gWindowTileAutoAllocEnabled == TRUE) { - allocatedBaseBlock = DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, 0, templates[i].width * templates[i].height, 0); + allocatedBaseBlock = BgTileAllocOp(bgLayer, 0, templates[i].width * templates[i].height, 0); if (allocatedBaseBlock == -1) return FALSE; } @@ -100,10 +100,10 @@ bool16 InitWindows(const struct WindowTemplate *templates) gWindows[i].tileData = allocatedTilemapBuffer; gWindows[i].window = templates[i]; - if (gUnneededFireRedVariable == 1) + if (gWindowTileAutoAllocEnabled == TRUE) { gWindows[i].window.baseBlock = allocatedBaseBlock; - DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, allocatedBaseBlock, templates[i].width * templates[i].height, 1); + BgTileAllocOp(bgLayer, allocatedBaseBlock, templates[i].width * templates[i].height, 1); } } @@ -132,9 +132,9 @@ u16 AddWindow(const struct WindowTemplate *template) bgLayer = template->bg; allocatedBaseBlock = 0; - if (gUnneededFireRedVariable == 1) + if (gWindowTileAutoAllocEnabled == TRUE) { - allocatedBaseBlock = DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, 0, template->width * template->height, 0); + allocatedBaseBlock = BgTileAllocOp(bgLayer, 0, template->width * template->height, 0); if (allocatedBaseBlock == -1) return WINDOW_NONE; @@ -174,10 +174,10 @@ u16 AddWindow(const struct WindowTemplate *template) gWindows[win].tileData = allocatedTilemapBuffer; gWindows[win].window = *template; - if (gUnneededFireRedVariable == 1) + if (gWindowTileAutoAllocEnabled == TRUE) { gWindows[win].window.baseBlock = allocatedBaseBlock; - DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, allocatedBaseBlock, gWindows[win].window.width * gWindows[win].window.height, 1); + BgTileAllocOp(bgLayer, allocatedBaseBlock, gWindows[win].window.width * gWindows[win].window.height, 1); } return win; @@ -201,9 +201,9 @@ int AddWindowWithoutTileMap(const struct WindowTemplate *template) bgLayer = template->bg; allocatedBaseBlock = 0; - if (gUnneededFireRedVariable == 1) + if (gWindowTileAutoAllocEnabled == TRUE) { - allocatedBaseBlock = DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, 0, template->width * template->height, 0); + allocatedBaseBlock = BgTileAllocOp(bgLayer, 0, template->width * template->height, 0); if (allocatedBaseBlock == -1) return WINDOW_NONE; @@ -211,10 +211,10 @@ int AddWindowWithoutTileMap(const struct WindowTemplate *template) gWindows[win].window = *template; - if (gUnneededFireRedVariable == 1) + if (gWindowTileAutoAllocEnabled == TRUE) { gWindows[win].window.baseBlock = allocatedBaseBlock; - DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, allocatedBaseBlock, gWindows[win].window.width * gWindows[win].window.height, 1); + BgTileAllocOp(bgLayer, allocatedBaseBlock, gWindows[win].window.width * gWindows[win].window.height, 1); } return win; @@ -224,10 +224,8 @@ void RemoveWindow(u8 windowId) { u8 bgLayer = gWindows[windowId].window.bg; - if (gUnneededFireRedVariable == 1) - { - DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, gWindows[windowId].window.baseBlock, gWindows[windowId].window.width * gWindows[windowId].window.height, 2); - } + if (gWindowTileAutoAllocEnabled == TRUE) + BgTileAllocOp(bgLayer, gWindows[windowId].window.baseBlock, gWindows[windowId].window.width * gWindows[windowId].window.height, 2); gWindows[windowId].window = sDummyWindowTemplate; @@ -277,13 +275,13 @@ void CopyWindowToVram(u8 windowId, u8 mode) switch (mode) { - case 1: + case COPYWIN_MAP: CopyBgTilemapBufferToVram(windowLocal.window.bg); break; - case 2: + case COPYWIN_GFX: LoadBgTiles(windowLocal.window.bg, windowLocal.tileData, windowSize, windowLocal.window.baseBlock); break; - case 3: + case COPYWIN_FULL: LoadBgTiles(windowLocal.window.bg, windowLocal.tileData, windowSize, windowLocal.window.baseBlock); CopyBgTilemapBufferToVram(windowLocal.window.bg); break; @@ -309,13 +307,13 @@ void CopyWindowRectToVram(u32 windowId, u32 mode, u32 x, u32 y, u32 w, u32 h) switch (mode) { - case 1: + case COPYWIN_MAP: CopyBgTilemapBufferToVram(windowLocal.window.bg); break; - case 2: + case COPYWIN_GFX: LoadBgTiles(windowLocal.window.bg, windowLocal.tileData + (rectPos * 32), rectSize, windowLocal.window.baseBlock + rectPos); break; - case 3: + case COPYWIN_FULL: LoadBgTiles(windowLocal.window.bg, windowLocal.tileData + (rectPos * 32), rectSize, windowLocal.window.baseBlock + rectPos); CopyBgTilemapBufferToVram(windowLocal.window.bg); break; @@ -407,7 +405,7 @@ void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u struct Bitmap sourceRect; struct Bitmap destRect; - sourceRect.pixels = (u8*)pixels; + sourceRect.pixels = (u8 *)pixels; sourceRect.width = srcWidth; sourceRect.height = srcHeight; @@ -423,7 +421,7 @@ static void BlitBitmapRectToWindowWithColorKey(u8 windowId, const u8 *pixels, u1 struct Bitmap sourceRect; struct Bitmap destRect; - sourceRect.pixels = (u8*)pixels; + sourceRect.pixels = (u8 *)pixels; sourceRect.width = srcWidth; sourceRect.height = srcHeight; @@ -465,9 +463,9 @@ void FillWindowPixelBuffer(u8 windowId, u8 fillValue) destOffset = i + (a); \ srcOffset = i + (((width * (distanceLoop & ~7)) | (distanceLoop & 7)) * 4); \ if (srcOffset < size) \ - *(u32*)(tileData + destOffset) = *(u32*)(tileData + srcOffset); \ + *(u32 *)(tileData + destOffset) = *(u32 *)(tileData + srcOffset); \ else \ - *(u32*)(tileData + destOffset) = fillValue32; \ + *(u32 *)(tileData + destOffset) = fillValue32; \ distanceLoop++; \ } @@ -476,9 +474,9 @@ void FillWindowPixelBuffer(u8 windowId, u8 fillValue) destOffset = i + (a); \ srcOffset = i + (((width * (distanceLoop & ~7)) | (distanceLoop & 7)) * 4); \ if (srcOffset < size) \ - *(u32*)(tileData - destOffset) = *(u32*)(tileData - srcOffset); \ + *(u32 *)(tileData - destOffset) = *(u32 *)(tileData - srcOffset); \ else \ - *(u32*)(tileData - destOffset) = fillValue32; \ + *(u32 *)(tileData - destOffset) = fillValue32; \ distanceLoop++; \ } @@ -552,7 +550,7 @@ bool8 SetWindowAttribute(u8 windowId, u8 attributeId, u32 value) gWindows[windowId].window.baseBlock = value; return FALSE; case WINDOW_TILE_DATA: - gWindows[windowId].tileData = (u8*)(value); + gWindows[windowId].tileData = (u8 *)(value); return TRUE; case WINDOW_BG: case WINDOW_WIDTH: @@ -607,7 +605,7 @@ static void DummyWindowBgTilemap8Bit(void) u16 AddWindow8Bit(const struct WindowTemplate *template) { u16 windowId; - u8* memAddress; + u8 *memAddress; u8 bgLayer; for (windowId = 0; windowId < WINDOWS_MAX; windowId++) @@ -677,7 +675,7 @@ void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u struct Bitmap sourceRect; struct Bitmap destRect; - sourceRect.pixels = (u8*) pixels; + sourceRect.pixels = (u8 *) pixels; sourceRect.width = srcWidth; sourceRect.height = srcHeight; @@ -695,13 +693,13 @@ void CopyWindowToVram8Bit(u8 windowId, u8 mode) switch (mode) { - case 1: + case COPYWIN_MAP: CopyBgTilemapBufferToVram(sWindowPtr->window.bg); break; - case 2: + case COPYWIN_GFX: LoadBgTiles(sWindowPtr->window.bg, sWindowPtr->tileData, sWindowSize, sWindowPtr->window.baseBlock); break; - case 3: + case COPYWIN_FULL: LoadBgTiles(sWindowPtr->window.bg, sWindowPtr->tileData, sWindowSize, sWindowPtr->window.baseBlock); CopyBgTilemapBufferToVram(sWindowPtr->window.bg); break; diff --git a/gflib/window.h b/gflib/window.h index 3eac75a280..583e7e1673 100644 --- a/gflib/window.h +++ b/gflib/window.h @@ -3,8 +3,7 @@ #define PIXEL_FILL(num) ((num) | ((num) << 4)) -enum -{ +enum { WINDOW_BG, WINDOW_TILEMAP_LEFT, WINDOW_TILEMAP_TOP, @@ -15,6 +14,14 @@ enum WINDOW_TILE_DATA }; +// Mode for CopyWindowToVram, CopyWindowRectToVram and CopyWindowToVram8Bit +enum { + COPYWIN_NONE, + COPYWIN_MAP, + COPYWIN_GFX, + COPYWIN_FULL, +}; + struct WindowTemplate { u8 bg; @@ -28,13 +35,7 @@ struct WindowTemplate #define DUMMY_WIN_TEMPLATE \ { \ - 0xFF, \ - 0, \ - 0, \ - 0, \ - 0, \ - 0, \ - 0, \ + .bg = 0xFF, \ } #define WINDOW_NONE 0xFF @@ -72,7 +73,7 @@ void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u void CopyWindowToVram8Bit(u8 windowId, u8 mode); extern struct Window gWindows[]; -extern void* gWindowBgTilemapBuffers[]; +extern void *gWindowBgTilemapBuffers[]; extern u32 gUnusedWindowVar1; extern u32 gUnusedWindowVar2; extern u32 gUnusedWindowVar3; diff --git a/graphics/misc/bag.pal b/graphics/bag/bag.pal similarity index 100% rename from graphics/misc/bag.pal rename to graphics/bag/bag.pal diff --git a/graphics/misc/bag_female.png b/graphics/bag/bag_female.png similarity index 100% rename from graphics/misc/bag_female.png rename to graphics/bag/bag_female.png diff --git a/graphics/misc/bag_male.png b/graphics/bag/bag_male.png similarity index 100% rename from graphics/misc/bag_male.png rename to graphics/bag/bag_male.png diff --git a/graphics/interface/bag_pyramid.pal b/graphics/bag/bag_pyramid.pal similarity index 100% rename from graphics/interface/bag_pyramid.pal rename to graphics/bag/bag_pyramid.pal diff --git a/graphics/interface/bag_pyramid.png b/graphics/bag/bag_pyramid.png similarity index 100% rename from graphics/interface/bag_pyramid.png rename to graphics/bag/bag_pyramid.png diff --git a/graphics/interface/berry_tag.bin b/graphics/bag/berry_tag.bin similarity index 100% rename from graphics/interface/berry_tag.bin rename to graphics/bag/berry_tag.bin diff --git a/graphics/interface/berry_tag_screen.pal b/graphics/bag/berry_tag_screen.pal similarity index 100% rename from graphics/interface/berry_tag_screen.pal rename to graphics/bag/berry_tag_screen.pal diff --git a/graphics/interface/berry_tag_title.bin b/graphics/bag/berry_tag_title.bin similarity index 100% rename from graphics/interface/berry_tag_title.bin rename to graphics/bag/berry_tag_title.bin diff --git a/graphics/interface/check_berry.pal b/graphics/bag/check_berry.pal similarity index 100% rename from graphics/interface/check_berry.pal rename to graphics/bag/check_berry.pal diff --git a/graphics/interface/check_berry.png b/graphics/bag/check_berry.png similarity index 100% rename from graphics/interface/check_berry.png rename to graphics/bag/check_berry.png diff --git a/graphics/interface/check_berry_circle.png b/graphics/bag/check_berry_circle.png similarity index 100% rename from graphics/interface/check_berry_circle.png rename to graphics/bag/check_berry_circle.png diff --git a/graphics/interface/hm.png b/graphics/bag/hm.png similarity index 100% rename from graphics/interface/hm.png rename to graphics/bag/hm.png diff --git a/graphics/interface/bag_screen_tilemap.bin b/graphics/bag/menu.bin similarity index 100% rename from graphics/interface/bag_screen_tilemap.bin rename to graphics/bag/menu.bin diff --git a/graphics/interface/bag_screen.png b/graphics/bag/menu.png similarity index 100% rename from graphics/interface/bag_screen.png rename to graphics/bag/menu.png diff --git a/graphics/interface/bag_screen_female.pal b/graphics/bag/menu_female.pal similarity index 100% rename from graphics/interface/bag_screen_female.pal rename to graphics/bag/menu_female.pal diff --git a/graphics/interface/bag_screen_male.pal b/graphics/bag/menu_male.pal similarity index 100% rename from graphics/interface/bag_screen_male.pal rename to graphics/bag/menu_male.pal diff --git a/graphics/interface/bag_pyramid_tilemap.bin b/graphics/bag/menu_pyramid.bin similarity index 100% rename from graphics/interface/bag_pyramid_tilemap.bin rename to graphics/bag/menu_pyramid.bin diff --git a/graphics/unknown/unknown_D9AF44.pal b/graphics/bag/menu_pyramid.pal similarity index 100% rename from graphics/unknown/unknown_D9AF44.pal rename to graphics/bag/menu_pyramid.pal diff --git a/graphics/interface/bag_spinner.png b/graphics/bag/rotating_ball.png similarity index 100% rename from graphics/interface/bag_spinner.png rename to graphics/bag/rotating_ball.png diff --git a/graphics/interface/select_button.png b/graphics/bag/select_button.png similarity index 100% rename from graphics/interface/select_button.png rename to graphics/bag/select_button.png diff --git a/graphics/balls/beast.png b/graphics/balls/beast.png new file mode 100644 index 0000000000..56a10224c6 Binary files /dev/null and b/graphics/balls/beast.png differ diff --git a/graphics/balls/cherish.png b/graphics/balls/cherish.png new file mode 100644 index 0000000000..3016b65609 Binary files /dev/null and b/graphics/balls/cherish.png differ diff --git a/graphics/interface/ball/dive.png b/graphics/balls/dive.png similarity index 100% rename from graphics/interface/ball/dive.png rename to graphics/balls/dive.png diff --git a/graphics/balls/dream.png b/graphics/balls/dream.png new file mode 100644 index 0000000000..104ee282f5 Binary files /dev/null and b/graphics/balls/dream.png differ diff --git a/graphics/balls/dusk.png b/graphics/balls/dusk.png new file mode 100644 index 0000000000..2bb4d3d539 Binary files /dev/null and b/graphics/balls/dusk.png differ diff --git a/graphics/balls/fast.png b/graphics/balls/fast.png new file mode 100644 index 0000000000..d6b7e283da Binary files /dev/null and b/graphics/balls/fast.png differ diff --git a/graphics/balls/friend.png b/graphics/balls/friend.png new file mode 100644 index 0000000000..b016c0c631 Binary files /dev/null and b/graphics/balls/friend.png differ diff --git a/graphics/interface/ball/great.png b/graphics/balls/great.png similarity index 100% rename from graphics/interface/ball/great.png rename to graphics/balls/great.png diff --git a/graphics/balls/heal.png b/graphics/balls/heal.png new file mode 100644 index 0000000000..5f1604d785 Binary files /dev/null and b/graphics/balls/heal.png differ diff --git a/graphics/balls/heavy.png b/graphics/balls/heavy.png new file mode 100644 index 0000000000..d37db7238b Binary files /dev/null and b/graphics/balls/heavy.png differ diff --git a/graphics/balls/level.png b/graphics/balls/level.png new file mode 100644 index 0000000000..588bad393f Binary files /dev/null and b/graphics/balls/level.png differ diff --git a/graphics/balls/love.png b/graphics/balls/love.png new file mode 100644 index 0000000000..3bb20d2cc6 Binary files /dev/null and b/graphics/balls/love.png differ diff --git a/graphics/balls/lure.png b/graphics/balls/lure.png new file mode 100644 index 0000000000..9d10c25715 Binary files /dev/null and b/graphics/balls/lure.png differ diff --git a/graphics/interface/ball/luxury.png b/graphics/balls/luxury.png similarity index 100% rename from graphics/interface/ball/luxury.png rename to graphics/balls/luxury.png diff --git a/graphics/interface/ball/master.png b/graphics/balls/master.png similarity index 100% rename from graphics/interface/ball/master.png rename to graphics/balls/master.png diff --git a/graphics/balls/moon.png b/graphics/balls/moon.png new file mode 100644 index 0000000000..beb1016f4d Binary files /dev/null and b/graphics/balls/moon.png differ diff --git a/graphics/interface/ball/nest.png b/graphics/balls/nest.png similarity index 100% rename from graphics/interface/ball/nest.png rename to graphics/balls/nest.png diff --git a/graphics/interface/ball/net.png b/graphics/balls/net.png similarity index 100% rename from graphics/interface/ball/net.png rename to graphics/balls/net.png diff --git a/graphics/interface/ball_open.png b/graphics/balls/open.png similarity index 100% rename from graphics/interface/ball_open.png rename to graphics/balls/open.png diff --git a/graphics/balls/park.png b/graphics/balls/park.png new file mode 100644 index 0000000000..9b526f5245 Binary files /dev/null and b/graphics/balls/park.png differ diff --git a/graphics/interface/ball/poke.png b/graphics/balls/poke.png similarity index 100% rename from graphics/interface/ball/poke.png rename to graphics/balls/poke.png diff --git a/graphics/interface/ball/premier.png b/graphics/balls/premier.png similarity index 100% rename from graphics/interface/ball/premier.png rename to graphics/balls/premier.png diff --git a/graphics/balls/quick.png b/graphics/balls/quick.png new file mode 100644 index 0000000000..6c5dfccb9c Binary files /dev/null and b/graphics/balls/quick.png differ diff --git a/graphics/interface/ball/repeat.png b/graphics/balls/repeat.png similarity index 100% rename from graphics/interface/ball/repeat.png rename to graphics/balls/repeat.png diff --git a/graphics/interface/ball/safari.png b/graphics/balls/safari.png similarity index 100% rename from graphics/interface/ball/safari.png rename to graphics/balls/safari.png diff --git a/graphics/balls/sport.png b/graphics/balls/sport.png new file mode 100644 index 0000000000..93228579b5 Binary files /dev/null and b/graphics/balls/sport.png differ diff --git a/graphics/interface/ball/timer.png b/graphics/balls/timer.png similarity index 100% rename from graphics/interface/ball/timer.png rename to graphics/balls/timer.png diff --git a/graphics/interface/ball/ultra.png b/graphics/balls/ultra.png similarity index 100% rename from graphics/interface/ball/ultra.png rename to graphics/balls/ultra.png diff --git a/graphics/battle_anims/backgrounds/magma_storm.pal b/graphics/battle_anims/backgrounds/magma_storm.pal new file mode 100644 index 0000000000..944174076e --- /dev/null +++ b/graphics/battle_anims/backgrounds/magma_storm.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 214 0 +255 197 0 +255 173 0 +255 165 0 +148 90 222 +255 107 0 +255 132 0 +255 148 0 +255 156 41 +0 0 0 +0 90 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/aeroblast.pal b/graphics/battle_anims/backgrounds/new/aeroblast.pal new file mode 100644 index 0000000000..e0b1af5bfb --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/aeroblast.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +172 222 230 +164 213 230 +148 205 222 +131 205 222 +123 197 213 +115 189 205 +98 180 197 +90 180 197 +82 172 189 +74 164 180 +65 156 180 +57 131 156 +49 115 131 +41 82 106 +24 74 82 diff --git a/graphics/battle_anims/backgrounds/new/aeroblast_map.bin b/graphics/battle_anims/backgrounds/new/aeroblast_map.bin new file mode 100644 index 0000000000..369abe63ab Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/aeroblast_map.bin differ diff --git a/graphics/battle_anims/backgrounds/new/aeroblast_tiles.png b/graphics/battle_anims/backgrounds/new/aeroblast_tiles.png new file mode 100644 index 0000000000..33af8f4826 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/aeroblast_tiles.png differ diff --git a/graphics/battle_anims/backgrounds/new/aura_sphere.pal b/graphics/battle_anims/backgrounds/new/aura_sphere.pal new file mode 100644 index 0000000000..238493462b --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/aura_sphere.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 205 82 +238 205 74 +238 205 57 +246 222 123 +238 205 57 +238 197 49 +230 189 24 +246 213 82 +255 222 131 +255 213 115 +255 213 106 +255 213 90 +246 213 82 +255 230 156 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/blackhole_eclipse.bin b/graphics/battle_anims/backgrounds/new/blackhole_eclipse.bin new file mode 100644 index 0000000000..54c73addcf Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/blackhole_eclipse.bin differ diff --git a/graphics/battle_anims/backgrounds/new/blackhole_eclipse.png b/graphics/battle_anims/backgrounds/new/blackhole_eclipse.png new file mode 100644 index 0000000000..3cfd58625e Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/blackhole_eclipse.png differ diff --git a/graphics/battle_anims/backgrounds/new/bloom_doom.bin b/graphics/battle_anims/backgrounds/new/bloom_doom.bin new file mode 100644 index 0000000000..9ea250a340 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/bloom_doom.bin differ diff --git a/graphics/battle_anims/backgrounds/new/bloom_doom.pal b/graphics/battle_anims/backgrounds/new/bloom_doom.pal new file mode 100644 index 0000000000..834088c8fa --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/bloom_doom.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +131 230 255 +106 213 255 +98 205 255 +57 156 180 +8 115 123 +180 189 172 +156 180 164 +115 164 131 +74 131 106 +49 106 65 +0 106 74 +0 90 49 +0 82 24 +0 65 0 +0 32 0 diff --git a/graphics/battle_anims/backgrounds/new/bloom_doom.png b/graphics/battle_anims/backgrounds/new/bloom_doom.png new file mode 100644 index 0000000000..de5553ec6e Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/bloom_doom.png differ diff --git a/graphics/battle_anims/backgrounds/new/bolt_strike.bin b/graphics/battle_anims/backgrounds/new/bolt_strike.bin new file mode 100644 index 0000000000..32f51b6fe0 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/bolt_strike.bin differ diff --git a/graphics/battle_anims/backgrounds/new/bolt_strike.pal b/graphics/battle_anims/backgrounds/new/bolt_strike.pal new file mode 100644 index 0000000000..4c3d1dcf10 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/bolt_strike.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 8 8 +255 255 255 +222 246 246 +189 230 230 +156 213 213 +131 205 205 +115 189 189 +90 172 172 +65 156 156 +49 139 139 +32 123 123 +16 98 98 +0 74 74 +0 49 49 +0 32 32 +0 16 16 diff --git a/graphics/battle_anims/backgrounds/new/bolt_strike.png b/graphics/battle_anims/backgrounds/new/bolt_strike.png new file mode 100644 index 0000000000..4d5f8c6d99 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/bolt_strike.png differ diff --git a/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin new file mode 100644 index 0000000000..989fa4cab1 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin differ diff --git a/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.pal b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.pal new file mode 100644 index 0000000000..3470d8818f --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +246 189 49 +246 172 41 +238 156 32 +222 131 24 +205 115 8 +197 65 0 +180 57 0 +172 90 65 +156 74 49 +148 65 24 +139 74 49 +123 65 32 +98 49 32 +82 32 16 +74 24 8 diff --git a/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.png b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.png new file mode 100644 index 0000000000..abaf8576d8 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.png differ diff --git a/graphics/battle_anims/backgrounds/new/dark_void.bin b/graphics/battle_anims/backgrounds/new/dark_void.bin new file mode 100644 index 0000000000..274b971db6 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/dark_void.bin differ diff --git a/graphics/slot_machine/85A8524.pal b/graphics/battle_anims/backgrounds/new/dark_void.pal similarity index 69% rename from graphics/slot_machine/85A8524.pal rename to graphics/battle_anims/backgrounds/new/dark_void.pal index b93d15ddc3..6aa0b26a6d 100644 --- a/graphics/slot_machine/85A8524.pal +++ b/graphics/battle_anims/backgrounds/new/dark_void.pal @@ -2,10 +2,10 @@ JASC-PAL 0100 16 0 0 0 -255 255 255 -0 0 0 -65 65 65 -0 0 0 +48 48 48 +72 72 72 +88 88 88 +120 120 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/dynamax_cannon.pal b/graphics/battle_anims/backgrounds/new/dynamax_cannon.pal new file mode 100644 index 0000000000..64a2e4566b --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/dynamax_cannon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 164 255 +255 106 139 +255 131 222 +255 139 230 +255 164 238 +255 189 255 +255 205 255 +246 230 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 diff --git a/graphics/battle_anims/backgrounds/new/electric_terrain.bin b/graphics/battle_anims/backgrounds/new/electric_terrain.bin new file mode 100644 index 0000000000..4404121c7c Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/electric_terrain.bin differ diff --git a/graphics/battle_anims/backgrounds/new/electric_terrain.pal b/graphics/battle_anims/backgrounds/new/electric_terrain.pal new file mode 100644 index 0000000000..5a56667e40 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/electric_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +238 24 32 +255 246 205 +246 246 222 +246 238 189 +238 238 213 +238 238 205 +238 230 197 +230 230 180 +230 222 164 +230 222 172 +222 213 139 +213 205 123 +213 205 115 +205 197 106 +197 189 106 +57 49 65 diff --git a/graphics/battle_anims/backgrounds/new/electric_terrain.png b/graphics/battle_anims/backgrounds/new/electric_terrain.png new file mode 100644 index 0000000000..c84ecaccdf Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/electric_terrain.png differ diff --git a/graphics/battle_anims/backgrounds/new/fire1.bin b/graphics/battle_anims/backgrounds/new/fire1.bin new file mode 100644 index 0000000000..84e3c8feca Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/fire1.bin differ diff --git a/graphics/battle_anims/backgrounds/new/fire1.pal b/graphics/battle_anims/backgrounds/new/fire1.pal new file mode 100644 index 0000000000..505606066c --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/fire1.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 156 0 +255 98 0 +255 49 0 +246 57 16 +238 65 16 +180 65 24 +123 49 24 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/fire1.png b/graphics/battle_anims/backgrounds/new/fire1.png new file mode 100644 index 0000000000..5f29e792fa Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/fire1.png differ diff --git a/graphics/battle_anims/backgrounds/new/fire2.pal b/graphics/battle_anims/backgrounds/new/fire2.pal new file mode 100644 index 0000000000..36b1870d1a --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/fire2.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +104 168 168 +88 144 160 +72 112 160 +64 64 120 +56 80 152 +64 80 144 +72 64 104 +72 56 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/battle_anims/backgrounds/new/focus_blast.bin b/graphics/battle_anims/backgrounds/new/focus_blast.bin new file mode 100644 index 0000000000..25c569a146 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/focus_blast.bin differ diff --git a/graphics/battle_anims/backgrounds/new/focus_blast.pal b/graphics/battle_anims/backgrounds/new/focus_blast.pal new file mode 100644 index 0000000000..308f63fa25 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/focus_blast.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 98 74 +255 90 65 +255 82 57 +255 139 123 +255 74 49 +255 65 41 +255 57 32 +255 106 90 +255 148 139 +255 131 123 +255 123 115 +255 115 106 +255 106 98 +255 164 164 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/focus_blast.png b/graphics/battle_anims/backgrounds/new/focus_blast.png new file mode 100644 index 0000000000..7c8755f59a Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/focus_blast.png differ diff --git a/graphics/battle_anims/backgrounds/new/garbage_falls.pal b/graphics/battle_anims/backgrounds/new/garbage_falls.pal new file mode 100644 index 0000000000..16a76f920b --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/garbage_falls.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +180 172 148 +159 156 129 +137 140 110 +115 123 90 +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 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/giga_impact.pal b/graphics/battle_anims/backgrounds/new/giga_impact.pal new file mode 100644 index 0000000000..06f02604a6 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/giga_impact.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +240 136 184 +232 104 168 +136 8 40 +248 24 104 +216 32 96 +224 72 136 +160 0 48 +216 0 64 +200 40 88 +192 0 56 +176 32 128 +176 24 72 +152 16 56 +200 48 80 +216 56 160 diff --git a/graphics/battle_anims/backgrounds/new/giga_impact.png b/graphics/battle_anims/backgrounds/new/giga_impact.png new file mode 100644 index 0000000000..0d5d705fe3 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/giga_impact.png differ diff --git a/graphics/battle_anims/backgrounds/new/giga_impact_contest.bin b/graphics/battle_anims/backgrounds/new/giga_impact_contest.bin new file mode 100644 index 0000000000..03c709bb90 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/giga_impact_contest.bin differ diff --git a/graphics/battle_anims/backgrounds/new/giga_impact_opponent.bin b/graphics/battle_anims/backgrounds/new/giga_impact_opponent.bin new file mode 100644 index 0000000000..0cfa1f1ec6 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/giga_impact_opponent.bin differ diff --git a/graphics/battle_anims/backgrounds/new/giga_impact_player.bin b/graphics/battle_anims/backgrounds/new/giga_impact_player.bin new file mode 100644 index 0000000000..3b89218e0e Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/giga_impact_player.bin differ diff --git a/graphics/battle_anims/backgrounds/new/grassy_terrain.bin b/graphics/battle_anims/backgrounds/new/grassy_terrain.bin new file mode 100644 index 0000000000..e955c23199 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/grassy_terrain.bin differ diff --git a/graphics/battle_anims/backgrounds/new/grassy_terrain.pal b/graphics/battle_anims/backgrounds/new/grassy_terrain.pal new file mode 100644 index 0000000000..4ad8369ab5 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/grassy_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +238 24 32 +230 255 238 +172 255 205 +222 255 230 +205 255 222 +180 255 205 +172 255 197 +213 255 230 +197 255 213 +164 255 197 +189 255 213 +213 255 222 +156 246 189 +148 246 180 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/grassy_terrain.png b/graphics/battle_anims/backgrounds/new/grassy_terrain.png new file mode 100644 index 0000000000..7cdc534afc Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/grassy_terrain.png differ diff --git a/graphics/battle_anims/backgrounds/new/gunk_shot.pal b/graphics/battle_anims/backgrounds/new/gunk_shot.pal new file mode 100644 index 0000000000..256db53029 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/gunk_shot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +205 98 255 +197 90 255 +197 82 255 +213 148 255 +197 72 255 +197 64 255 +189 56 255 +205 106 255 +222 156 255 +205 139 255 +205 131 255 +205 123 255 +205 115 255 +230 180 255 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/hurricane.bin b/graphics/battle_anims/backgrounds/new/hurricane.bin new file mode 100644 index 0000000000..d5e97d7d0e Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hurricane.bin differ diff --git a/graphics/battle_anims/backgrounds/new/hurricane.pal b/graphics/battle_anims/backgrounds/new/hurricane.pal new file mode 100644 index 0000000000..00659f350a --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/hurricane.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +197 255 255 +139 222 246 +115 213 255 +106 205 255 +98 197 255 +90 180 246 +74 164 238 +65 156 238 +49 148 230 +41 139 230 +41 115 213 +32 131 222 +32 98 205 +32 90 197 +41 74 180 diff --git a/graphics/battle_anims/backgrounds/new/hurricane.png b/graphics/battle_anims/backgrounds/new/hurricane.png new file mode 100644 index 0000000000..4ada195710 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hurricane.png differ diff --git a/graphics/battle_anims/backgrounds/new/hydro_cannon.bin b/graphics/battle_anims/backgrounds/new/hydro_cannon.bin new file mode 100644 index 0000000000..dcfd454076 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hydro_cannon.bin differ diff --git a/graphics/interface/855C604.pal b/graphics/battle_anims/backgrounds/new/hydro_cannon.pal similarity index 55% rename from graphics/interface/855C604.pal rename to graphics/battle_anims/backgrounds/new/hydro_cannon.pal index e7d6c330ae..a543926c3d 100644 --- a/graphics/interface/855C604.pal +++ b/graphics/battle_anims/backgrounds/new/hydro_cannon.pal @@ -3,12 +3,12 @@ JASC-PAL 16 0 0 0 255 255 255 -255 180 82 -197 123 0 -255 139 131 -255 49 24 -74 74 74 -213 213 205 +197 230 255 +139 205 246 +82 172 238 +57 131 205 +32 82 164 +16 41 123 0 0 0 0 0 0 0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/hydro_cannon.png b/graphics/battle_anims/backgrounds/new/hydro_cannon.png new file mode 100644 index 0000000000..b2012c0a8a Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hydro_cannon.png differ diff --git a/graphics/battle_anims/backgrounds/new/hydro_pump.bin b/graphics/battle_anims/backgrounds/new/hydro_pump.bin new file mode 100644 index 0000000000..917b5c6c96 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hydro_pump.bin differ diff --git a/graphics/battle_anims/backgrounds/new/hydro_pump.pal b/graphics/battle_anims/backgrounds/new/hydro_pump.pal new file mode 100644 index 0000000000..8f759c28c3 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/hydro_pump.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +222 246 255 +189 230 255 +148 213 246 +123 205 255 +90 180 238 +65 164 230 +41 139 222 +24 123 213 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/hydro_pump.png b/graphics/battle_anims/backgrounds/new/hydro_pump.png new file mode 100644 index 0000000000..89a0f99f6d Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hydro_pump.png differ diff --git a/graphics/battle_anims/backgrounds/new/hyper_beam.pal b/graphics/battle_anims/backgrounds/new/hyper_beam.pal new file mode 100644 index 0000000000..e17c826a6c --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/hyper_beam.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 164 255 +255 255 255 +246 197 222 +230 148 180 +205 98 139 +156 82 106 +90 57 74 +41 32 41 +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/battle_anims/backgrounds/new/hyperspace_fury.pal b/graphics/battle_anims/backgrounds/new/hyperspace_fury.pal new file mode 100644 index 0000000000..4249177213 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/hyperspace_fury.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +197 0 65 +160 0 0 +80 0 0 +0 0 0 +189 139 0 +80 0 112 +120 0 168 +255 32 106 +0 164 90 +65 0 213 +49 0 123 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/inferno_overdrive.bin b/graphics/battle_anims/backgrounds/new/inferno_overdrive.bin new file mode 100644 index 0000000000..01cb561035 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/inferno_overdrive.bin differ diff --git a/graphics/battle_anims/backgrounds/new/inferno_overdrive.pal b/graphics/battle_anims/backgrounds/new/inferno_overdrive.pal new file mode 100644 index 0000000000..032fe053c0 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/inferno_overdrive.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +255 255 230 +255 255 172 +255 255 139 +255 255 106 +255 238 82 +255 230 65 +255 197 32 +255 172 16 +255 148 8 +238 115 0 +222 82 0 +197 49 0 +156 24 0 +98 8 0 +57 0 0 diff --git a/graphics/battle_anims/backgrounds/new/inferno_overdrive.png b/graphics/battle_anims/backgrounds/new/inferno_overdrive.png new file mode 100644 index 0000000000..9d4c57fcde Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/inferno_overdrive.png differ diff --git a/graphics/battle_anims/backgrounds/new/leaf_storm.bin b/graphics/battle_anims/backgrounds/new/leaf_storm.bin new file mode 100644 index 0000000000..81fa3d3beb Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/leaf_storm.bin differ diff --git a/graphics/battle_anims/backgrounds/new/leaf_storm.pal b/graphics/battle_anims/backgrounds/new/leaf_storm.pal new file mode 100644 index 0000000000..06e048750c --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/leaf_storm.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +238 246 230 +205 238 180 +213 238 189 +197 230 180 +197 230 172 +172 222 148 +189 222 164 +164 213 139 +156 205 131 +131 197 106 +139 197 115 +123 189 98 +98 180 65 +65 172 32 diff --git a/graphics/battle_anims/backgrounds/new/leaf_storm.png b/graphics/battle_anims/backgrounds/new/leaf_storm.png new file mode 100644 index 0000000000..6438ea6dca Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/leaf_storm.png differ diff --git a/graphics/battle_anims/backgrounds/new/magic_room.pal b/graphics/battle_anims/backgrounds/new/magic_room.pal new file mode 100644 index 0000000000..ad110acec2 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/magic_room.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +248 248 144 +224 224 120 +200 200 96 +176 176 72 +152 152 48 +120 120 16 +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/battle_anims/backgrounds/new/malicious_moonsault.bin b/graphics/battle_anims/backgrounds/new/malicious_moonsault.bin new file mode 100644 index 0000000000..03bdeabc7f Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/malicious_moonsault.bin differ diff --git a/graphics/battle_anims/backgrounds/new/malicious_moonsault.pal b/graphics/battle_anims/backgrounds/new/malicious_moonsault.pal new file mode 100644 index 0000000000..57fe14de30 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/malicious_moonsault.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 0 +255 74 74 +238 24 24 +222 65 65 +164 41 41 +164 16 16 +106 32 32 +106 8 8 +65 16 16 +32 24 222 +98 65 222 +24 16 131 +0 0 65 +32 8 8 +8 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/malicious_moonsault.png b/graphics/battle_anims/backgrounds/new/malicious_moonsault.png new file mode 100644 index 0000000000..34bc5ecc82 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/malicious_moonsault.png differ diff --git a/graphics/battle_anims/backgrounds/new/max_lightning.bin b/graphics/battle_anims/backgrounds/new/max_lightning.bin new file mode 100644 index 0000000000..af4c39c1c0 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/max_lightning.bin differ diff --git a/graphics/battle_anims/backgrounds/new/max_lightning.pal b/graphics/battle_anims/backgrounds/new/max_lightning.pal new file mode 100644 index 0000000000..679758e697 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/max_lightning.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +238 24 32 +115 115 139 +90 90 106 +74 74 98 +65 65 82 +57 57 74 +49 49 57 +41 41 49 +32 32 41 +24 24 32 +16 16 24 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/max_lightning.png b/graphics/battle_anims/backgrounds/new/max_lightning.png new file mode 100644 index 0000000000..57919d5617 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/max_lightning.png differ diff --git a/graphics/battle_anims/backgrounds/new/misty_terrain.bin b/graphics/battle_anims/backgrounds/new/misty_terrain.bin new file mode 100644 index 0000000000..26e3cfae3d Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/misty_terrain.bin differ diff --git a/graphics/battle_anims/backgrounds/new/misty_terrain.pal b/graphics/battle_anims/backgrounds/new/misty_terrain.pal new file mode 100644 index 0000000000..927973cbec --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/misty_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +238 24 32 +255 246 246 +255 238 238 +255 230 230 +255 222 230 +255 222 222 +255 213 222 +255 205 213 +255 205 205 +255 197 205 +255 197 197 +255 189 189 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/misty_terrain.png b/graphics/battle_anims/backgrounds/new/misty_terrain.png new file mode 100644 index 0000000000..1427c5cf02 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/misty_terrain.png differ diff --git a/graphics/battle_anims/backgrounds/new/neverending_nightmare.bin b/graphics/battle_anims/backgrounds/new/neverending_nightmare.bin new file mode 100644 index 0000000000..647896804c Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/neverending_nightmare.bin differ diff --git a/graphics/battle_anims/backgrounds/new/neverending_nightmare.pal b/graphics/battle_anims/backgrounds/new/neverending_nightmare.pal new file mode 100644 index 0000000000..0edeeac58a --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/neverending_nightmare.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 41 98 +0 41 90 +0 32 82 +0 32 74 +0 24 74 +0 24 65 +0 24 57 +0 16 57 +0 16 49 +0 8 41 +0 8 32 +0 0 24 +0 0 16 +0 0 8 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/neverending_nightmare.png b/graphics/battle_anims/backgrounds/new/neverending_nightmare.png new file mode 100644 index 0000000000..2b2ae414b6 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/neverending_nightmare.png differ diff --git a/graphics/battle_anims/backgrounds/new/nightmare.bin b/graphics/battle_anims/backgrounds/new/nightmare.bin new file mode 100644 index 0000000000..11e1bb939b Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/nightmare.bin differ diff --git a/graphics/battle_anims/backgrounds/new/nightmare.pal b/graphics/battle_anims/backgrounds/new/nightmare.pal new file mode 100644 index 0000000000..71c950736a --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/nightmare.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +98 49 74 +90 32 65 +82 32 65 +82 32 57 +74 24 57 +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/battle_anims/backgrounds/new/nightmare.png b/graphics/battle_anims/backgrounds/new/nightmare.png new file mode 100644 index 0000000000..e3aaab9a15 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/nightmare.png differ diff --git a/graphics/battle_anims/backgrounds/new/poison_falls.pal b/graphics/battle_anims/backgrounds/new/poison_falls.pal new file mode 100644 index 0000000000..cc7799696c --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/poison_falls.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +180 106 255 +180 82 246 +148 65 205 +115 24 205 +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 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/psychic.pal b/graphics/battle_anims/backgrounds/new/psychic.pal new file mode 100644 index 0000000000..1fef60a1a5 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/psychic.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +19 0 82 +38 0 98 +58 0 114 +78 0 131 +97 0 147 +117 0 164 +137 0 180 +156 0 196 +176 0 213 +196 0 229 +216 0 246 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/psychic_terrain.bin b/graphics/battle_anims/backgrounds/new/psychic_terrain.bin new file mode 100644 index 0000000000..0ef28b6deb Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/psychic_terrain.bin differ diff --git a/graphics/battle_anims/backgrounds/new/psychic_terrain.pal b/graphics/battle_anims/backgrounds/new/psychic_terrain.pal new file mode 100644 index 0000000000..09230dffe9 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/psychic_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +238 24 32 +246 222 255 +238 213 255 +238 205 246 +230 197 246 +230 180 246 +222 172 246 +222 164 246 +222 156 246 +213 148 246 +205 139 238 +197 115 238 +189 98 238 +189 90 230 +180 74 230 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/psychic_terrain.png b/graphics/battle_anims/backgrounds/new/psychic_terrain.png new file mode 100644 index 0000000000..359870e4c9 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/psychic_terrain.png differ diff --git a/graphics/battle_anims/backgrounds/new/rock_wrecker.pal b/graphics/battle_anims/backgrounds/new/rock_wrecker.pal new file mode 100644 index 0000000000..198e7f034f --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/rock_wrecker.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +96 192 24 +248 248 216 +248 248 176 +248 240 144 +248 232 120 +248 232 112 +248 216 96 +240 200 88 +232 192 72 +232 184 64 +232 176 56 +224 160 32 +216 152 32 +208 136 40 +192 120 40 +176 88 40 diff --git a/graphics/battle_anims/backgrounds/new/shattered_psyche.bin b/graphics/battle_anims/backgrounds/new/shattered_psyche.bin new file mode 100644 index 0000000000..233f54c104 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/shattered_psyche.bin differ diff --git a/graphics/battle_anims/backgrounds/new/shattered_psyche.pal b/graphics/battle_anims/backgrounds/new/shattered_psyche.pal new file mode 100644 index 0000000000..f121cd887a --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/shattered_psyche.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 164 255 +238 139 255 +213 139 255 +189 139 255 +213 115 255 +197 90 255 +189 115 246 +172 148 238 +180 90 230 +172 90 213 +156 131 213 +148 82 205 +123 139 197 +131 90 180 +115 123 172 diff --git a/graphics/battle_anims/backgrounds/new/shattered_psyche.png b/graphics/battle_anims/backgrounds/new/shattered_psyche.png new file mode 100644 index 0000000000..90b0cc4eef Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/shattered_psyche.png differ diff --git a/graphics/battle_anims/backgrounds/new/sky_afternoon.pal b/graphics/battle_anims/backgrounds/new/sky_afternoon.pal new file mode 100644 index 0000000000..c7c5805fa7 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/sky_afternoon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 230 180 +255 222 139 +255 230 123 +255 222 106 +255 213 98 +255 197 57 +255 180 32 +255 172 8 +255 156 8 +230 131 8 +222 123 8 +205 106 8 +205 90 8 +197 74 8 +189 57 8 diff --git a/graphics/battle_anims/backgrounds/new/sky_day.bin b/graphics/battle_anims/backgrounds/new/sky_day.bin new file mode 100644 index 0000000000..a09c865f08 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/sky_day.bin differ diff --git a/graphics/battle_anims/backgrounds/new/sky_day.pal b/graphics/battle_anims/backgrounds/new/sky_day.pal new file mode 100644 index 0000000000..c0ea00a0ae --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/sky_day.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +211 216 222 +198 208 221 +184 199 218 +170 191 215 +156 181 212 +142 172 207 +128 162 203 +117 154 198 +104 147 199 +101 141 189 +89 137 194 +82 127 179 +77 128 190 +63 117 184 +52 106 169 diff --git a/graphics/battle_anims/backgrounds/new/sky_day.png b/graphics/battle_anims/backgrounds/new/sky_day.png new file mode 100644 index 0000000000..c03ce283bb Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/sky_day.png differ diff --git a/graphics/battle_anims/backgrounds/new/sky_night.pal b/graphics/battle_anims/backgrounds/new/sky_night.pal new file mode 100644 index 0000000000..4c0622ac52 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/sky_night.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +139 90 222 +131 65 230 +106 41 230 +98 32 230 +98 16 255 +65 8 255 +49 8 205 +41 8 180 +24 0 172 +24 0 156 +32 0 148 +32 0 131 +32 0 115 +24 0 106 +24 0 98 diff --git a/graphics/battle_anims/backgrounds/new/sludge_wave.pal b/graphics/battle_anims/backgrounds/new/sludge_wave.pal new file mode 100644 index 0000000000..5cf1a102f6 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/sludge_wave.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +175 128 139 +167 70 255 +184 86 255 +208 111 255 +233 136 255 +249 160 255 +255 185 255 +255 210 255 +255 235 255 +167 70 255 +184 86 255 +255 177 255 +255 218 255 +255 235 255 +69 0 0 +69 0 0 diff --git a/graphics/battle_anims/backgrounds/new/snuggle_forever.bin b/graphics/battle_anims/backgrounds/new/snuggle_forever.bin new file mode 100644 index 0000000000..3abd443178 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/snuggle_forever.bin differ diff --git a/graphics/battle_anims/backgrounds/new/snuggle_forever.pal b/graphics/battle_anims/backgrounds/new/snuggle_forever.pal new file mode 100644 index 0000000000..21a4f95fea --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/snuggle_forever.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 0 +41 57 16 +115 106 74 +41 74 24 +24 24 24 +32 49 16 +57 57 16 +156 156 123 +74 74 32 +57 98 32 +139 131 98 +123 123 82 +74 115 41 +90 90 49 +90 131 41 +24 32 8 diff --git a/graphics/battle_anims/backgrounds/new/snuggle_forever.png b/graphics/battle_anims/backgrounds/new/snuggle_forever.png new file mode 100644 index 0000000000..364ee1e067 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/snuggle_forever.png differ diff --git a/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.bin b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.bin new file mode 100644 index 0000000000..9bbee7ab43 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.bin differ diff --git a/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.pal b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.pal new file mode 100644 index 0000000000..8d44d7916b --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +57 197 172 +49 180 164 +49 180 156 +41 180 148 +41 164 148 +41 164 139 +32 164 131 +41 156 139 +24 156 106 +32 148 131 +32 139 131 +24 131 98 +32 123 115 +24 115 98 +24 98 90 diff --git a/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.png b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.png new file mode 100644 index 0000000000..709860ae00 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.png differ diff --git a/graphics/battle_anims/backgrounds/new/spacial_rend.pal b/graphics/battle_anims/backgrounds/new/spacial_rend.pal new file mode 100644 index 0000000000..afc2b31fce --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/spacial_rend.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +208 112 200 +216 184 249 +216 160 232 +211 107 195 +208 104 192 +217 129 209 +216 135 215 +209 120 208 +218 153 226 +216 168 232 +217 176 241 +220 188 252 +203 115 203 +223 182 246 +216 192 248 diff --git a/graphics/battle_anims/backgrounds/new/spacial_rend.png b/graphics/battle_anims/backgrounds/new/spacial_rend.png new file mode 100644 index 0000000000..ea98198c4c Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/spacial_rend.png differ diff --git a/graphics/battle_anims/backgrounds/new/steel_beam_bg.pal b/graphics/battle_anims/backgrounds/new/steel_beam_bg.pal new file mode 100644 index 0000000000..428e564c22 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/steel_beam_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +184 192 224 +168 176 208 +144 152 192 +112 120 168 +96 104 160 +88 96 144 +80 88 136 +72 80 120 +64 72 112 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/tectonic_rage.bin b/graphics/battle_anims/backgrounds/new/tectonic_rage.bin new file mode 100644 index 0000000000..914a9deb9a Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/tectonic_rage.bin differ diff --git a/graphics/battle_anims/backgrounds/new/tectonic_rage.pal b/graphics/battle_anims/backgrounds/new/tectonic_rage.pal new file mode 100644 index 0000000000..bc3621477e --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/tectonic_rage.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +88 0 0 +184 168 0 +192 144 0 +208 120 0 +224 96 0 +240 72 0 +248 232 0 +248 232 0 +248 184 0 +248 152 0 +248 152 0 +248 112 0 +248 72 0 +248 40 0 +88 0 0 +88 0 0 diff --git a/graphics/battle_anims/backgrounds/new/trick_room.bin b/graphics/battle_anims/backgrounds/new/trick_room.bin new file mode 100644 index 0000000000..c58eed62a4 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/trick_room.bin differ diff --git a/graphics/battle_anims/backgrounds/new/trick_room.pal b/graphics/battle_anims/backgrounds/new/trick_room.pal new file mode 100644 index 0000000000..1861ef92a5 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/trick_room.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +152 184 248 +128 160 240 +104 136 216 +80 112 192 +56 88 168 +24 56 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 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/trick_room.png b/graphics/battle_anims/backgrounds/new/trick_room.png new file mode 100644 index 0000000000..8605eb0637 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/trick_room.png differ diff --git a/graphics/battle_anims/backgrounds/new/twinkle_tackle.bin b/graphics/battle_anims/backgrounds/new/twinkle_tackle.bin new file mode 100644 index 0000000000..fc81c0ea9f Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/twinkle_tackle.bin differ diff --git a/graphics/battle_anims/backgrounds/new/twinkle_tackle.pal b/graphics/battle_anims/backgrounds/new/twinkle_tackle.pal new file mode 100644 index 0000000000..9d86dfc8cc --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/twinkle_tackle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +230 139 255 +197 106 255 +197 131 255 +164 98 255 +148 90 255 +172 123 255 +131 82 255 +123 90 255 +115 90 255 +106 82 255 +98 82 255 +90 82 255 +90 90 255 +82 115 255 +82 139 255 diff --git a/graphics/battle_anims/backgrounds/new/twinkle_tackle.png b/graphics/battle_anims/backgrounds/new/twinkle_tackle.png new file mode 100644 index 0000000000..c689f90096 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/twinkle_tackle.png differ diff --git a/graphics/battle_anims/backgrounds/new/water_pulse.bin b/graphics/battle_anims/backgrounds/new/water_pulse.bin new file mode 100644 index 0000000000..f6cc14657f Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/water_pulse.bin differ diff --git a/graphics/battle_anims/backgrounds/new/water_pulse.pal b/graphics/battle_anims/backgrounds/new/water_pulse.pal new file mode 100644 index 0000000000..f27e22541f --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/water_pulse.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +49 57 131 +41 49 115 +32 41 106 +24 32 90 +24 24 82 +32 32 74 +32 24 65 +49 49 74 +49 49 65 +41 41 57 +41 41 49 +41 41 41 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/water_pulse.png b/graphics/battle_anims/backgrounds/new/water_pulse.png new file mode 100644 index 0000000000..0237efc286 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/water_pulse.png differ diff --git a/graphics/battle_anims/backgrounds/new/waterfall.bin b/graphics/battle_anims/backgrounds/new/waterfall.bin new file mode 100644 index 0000000000..eb2085cb29 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/waterfall.bin differ diff --git a/graphics/battle_anims/backgrounds/new/waterfall.pal b/graphics/battle_anims/backgrounds/new/waterfall.pal new file mode 100644 index 0000000000..69a25c589c --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/waterfall.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +128 200 232 +120 176 216 +112 152 200 +112 136 160 +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 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/waterfall.png b/graphics/battle_anims/backgrounds/new/waterfall.png new file mode 100644 index 0000000000..3ddb1a0a26 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/waterfall.png differ diff --git a/graphics/battle_anims/backgrounds/new/wonder_room.pal b/graphics/battle_anims/backgrounds/new/wonder_room.pal new file mode 100644 index 0000000000..89addaae0a --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/wonder_room.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +248 144 248 +224 120 224 +200 96 200 +176 72 176 +152 48 152 +120 16 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 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/zmove_activate.bin b/graphics/battle_anims/backgrounds/new/zmove_activate.bin new file mode 100644 index 0000000000..45bca27ec4 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/zmove_activate.bin differ diff --git a/graphics/battle_anims/backgrounds/new/zmove_activate.pal b/graphics/battle_anims/backgrounds/new/zmove_activate.pal new file mode 100644 index 0000000000..58d03f19f0 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/zmove_activate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +213 197 255 +189 189 255 +164 189 255 +139 172 246 +115 156 238 +139 222 255 +115 230 255 +90 213 238 +98 180 246 +82 172 222 +90 148 222 +65 148 205 +65 123 189 +41 98 172 +32 82 148 diff --git a/graphics/battle_anims/backgrounds/new/zmove_activate.png b/graphics/battle_anims/backgrounds/new/zmove_activate.png new file mode 100644 index 0000000000..6f5cb77e7a Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/zmove_activate.png differ diff --git a/graphics/battle_anims/backgrounds/new/zmove_mountain.bin b/graphics/battle_anims/backgrounds/new/zmove_mountain.bin new file mode 100644 index 0000000000..86ad39727b Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/zmove_mountain.bin differ diff --git a/graphics/battle_anims/backgrounds/new/zmove_mountain.pal b/graphics/battle_anims/backgrounds/new/zmove_mountain.pal new file mode 100644 index 0000000000..d351f72e76 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new/zmove_mountain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +74 24 0 +65 24 0 +65 32 8 +57 24 0 +57 24 8 +49 24 8 +49 24 0 +49 16 0 +41 16 0 +41 8 0 +32 8 0 +24 0 0 +16 0 0 +8 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/zmove_mountain.png b/graphics/battle_anims/backgrounds/new/zmove_mountain.png new file mode 100644 index 0000000000..83a9f22ff5 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/zmove_mountain.png differ diff --git a/graphics/unknown/unknown_E6BC04.bin b/graphics/battle_anims/backgrounds/solarbeam.bin similarity index 100% rename from graphics/unknown/unknown_E6BC04.bin rename to graphics/battle_anims/backgrounds/solarbeam.bin diff --git a/graphics/battle_anims/backgrounds/windstorm_brew.png b/graphics/battle_anims/backgrounds/windstorm_brew.png new file mode 100644 index 0000000000..2a28952662 Binary files /dev/null and b/graphics/battle_anims/backgrounds/windstorm_brew.png differ diff --git a/graphics/battle_anims/sprites/accupressure.png b/graphics/battle_anims/sprites/accupressure.png new file mode 100644 index 0000000000..0da836ff3f Binary files /dev/null and b/graphics/battle_anims/sprites/accupressure.png differ diff --git a/graphics/battle_anims/sprites/alpha_symbol.png b/graphics/battle_anims/sprites/alpha_symbol.png new file mode 100644 index 0000000000..34ff13de35 Binary files /dev/null and b/graphics/battle_anims/sprites/alpha_symbol.png differ diff --git a/graphics/battle_anims/sprites/attack_order.png b/graphics/battle_anims/sprites/attack_order.png new file mode 100644 index 0000000000..18531b8304 Binary files /dev/null and b/graphics/battle_anims/sprites/attack_order.png differ diff --git a/graphics/battle_anims/sprites/black_ball.bin b/graphics/battle_anims/sprites/black_ball.bin new file mode 100644 index 0000000000..4a6592a8ed Binary files /dev/null and b/graphics/battle_anims/sprites/black_ball.bin differ diff --git a/graphics/battle_anims/sprites/colored_orbs.png b/graphics/battle_anims/sprites/colored_orbs.png new file mode 100644 index 0000000000..3bd3a55dd3 Binary files /dev/null and b/graphics/battle_anims/sprites/colored_orbs.png differ diff --git a/graphics/battle_anims/sprites/dragon_pulse.png b/graphics/battle_anims/sprites/dragon_pulse.png new file mode 100644 index 0000000000..cc6e28bc32 Binary files /dev/null and b/graphics/battle_anims/sprites/dragon_pulse.png differ diff --git a/graphics/battle_anims/sprites/energy_ball.png b/graphics/battle_anims/sprites/energy_ball.png new file mode 100644 index 0000000000..b3b26d6068 Binary files /dev/null and b/graphics/battle_anims/sprites/energy_ball.png differ diff --git a/graphics/battle_anims/sprites/feint_punch.png b/graphics/battle_anims/sprites/feint_punch.png new file mode 100644 index 0000000000..5769415193 Binary files /dev/null and b/graphics/battle_anims/sprites/feint_punch.png differ diff --git a/graphics/battle_anims/sprites/flash_cannon_ball.png b/graphics/battle_anims/sprites/flash_cannon_ball.png new file mode 100644 index 0000000000..b08d1d39f4 Binary files /dev/null and b/graphics/battle_anims/sprites/flash_cannon_ball.png differ diff --git a/graphics/battle_anims/sprites/mega_particles.png b/graphics/battle_anims/sprites/mega_particles.png new file mode 100644 index 0000000000..6fdf09d96e Binary files /dev/null and b/graphics/battle_anims/sprites/mega_particles.png differ diff --git a/graphics/battle_anims/sprites/mega_stone.png b/graphics/battle_anims/sprites/mega_stone.png new file mode 100644 index 0000000000..e3350bbb54 Binary files /dev/null and b/graphics/battle_anims/sprites/mega_stone.png differ diff --git a/graphics/battle_anims/sprites/mega_symbol.png b/graphics/battle_anims/sprites/mega_symbol.png new file mode 100644 index 0000000000..7ca305a137 Binary files /dev/null and b/graphics/battle_anims/sprites/mega_symbol.png differ diff --git a/graphics/battle_anims/sprites/new/ability_pop_up.png b/graphics/battle_anims/sprites/new/ability_pop_up.png new file mode 100644 index 0000000000..12b976a49e Binary files /dev/null and b/graphics/battle_anims/sprites/new/ability_pop_up.png differ diff --git a/graphics/battle_anims/sprites/new/acupressure_finger.png b/graphics/battle_anims/sprites/new/acupressure_finger.png new file mode 100644 index 0000000000..50b1d92801 Binary files /dev/null and b/graphics/battle_anims/sprites/new/acupressure_finger.png differ diff --git a/graphics/battle_anims/sprites/new/alpha_stone.png b/graphics/battle_anims/sprites/new/alpha_stone.png new file mode 100644 index 0000000000..334aed6062 Binary files /dev/null and b/graphics/battle_anims/sprites/new/alpha_stone.png differ diff --git a/graphics/battle_anims/sprites/new/anchor.png b/graphics/battle_anims/sprites/new/anchor.png new file mode 100644 index 0000000000..71cc11b8b9 Binary files /dev/null and b/graphics/battle_anims/sprites/new/anchor.png differ diff --git a/graphics/battle_anims/sprites/new/apple.png b/graphics/battle_anims/sprites/new/apple.png new file mode 100644 index 0000000000..a9cd54d4d6 Binary files /dev/null and b/graphics/battle_anims/sprites/new/apple.png differ diff --git a/graphics/battle_anims/sprites/new/arrows.png b/graphics/battle_anims/sprites/new/arrows.png new file mode 100644 index 0000000000..a0f58a097e Binary files /dev/null and b/graphics/battle_anims/sprites/new/arrows.png differ diff --git a/graphics/battle_anims/sprites/new/assurance_hand.png b/graphics/battle_anims/sprites/new/assurance_hand.png new file mode 100644 index 0000000000..45dc9a626c Binary files /dev/null and b/graphics/battle_anims/sprites/new/assurance_hand.png differ diff --git a/graphics/battle_anims/sprites/new/aura_sphere.png b/graphics/battle_anims/sprites/new/aura_sphere.png new file mode 100644 index 0000000000..04c5030245 Binary files /dev/null and b/graphics/battle_anims/sprites/new/aura_sphere.png differ diff --git a/graphics/battle_anims/sprites/new/avalanche_rocks.pal b/graphics/battle_anims/sprites/new/avalanche_rocks.pal new file mode 100644 index 0000000000..246940cc27 --- /dev/null +++ b/graphics/battle_anims/sprites/new/avalanche_rocks.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 189 230 +106 180 180 +106 180 180 +115 213 213 +131 230 230 +131 230 230 +139 238 238 +148 246 246 +164 246 246 +189 255 255 +205 255 255 +222 255 255 +238 255 255 +238 255 255 +255 255 255 +255 255 255 diff --git a/graphics/battle_anims/sprites/new/baton_pass_ball.png b/graphics/battle_anims/sprites/new/baton_pass_ball.png new file mode 100644 index 0000000000..e32e595296 Binary files /dev/null and b/graphics/battle_anims/sprites/new/baton_pass_ball.png differ diff --git a/graphics/battle_anims/sprites/new/bee.png b/graphics/battle_anims/sprites/new/bee.png new file mode 100644 index 0000000000..448935c10a Binary files /dev/null and b/graphics/battle_anims/sprites/new/bee.png differ diff --git a/graphics/battle_anims/sprites/new/berry_eaten.png b/graphics/battle_anims/sprites/new/berry_eaten.png new file mode 100644 index 0000000000..2a49e6e0ec Binary files /dev/null and b/graphics/battle_anims/sprites/new/berry_eaten.png differ diff --git a/graphics/battle_anims/sprites/new/berry_normal.png b/graphics/battle_anims/sprites/new/berry_normal.png new file mode 100644 index 0000000000..53ed3361dc Binary files /dev/null and b/graphics/battle_anims/sprites/new/berry_normal.png differ diff --git a/graphics/battle_anims/sprites/new/big_rock.png b/graphics/battle_anims/sprites/new/big_rock.png new file mode 100644 index 0000000000..248fbc36e2 Binary files /dev/null and b/graphics/battle_anims/sprites/new/big_rock.png differ diff --git a/graphics/battle_anims/sprites/new/blacephalon_head.png b/graphics/battle_anims/sprites/new/blacephalon_head.png new file mode 100644 index 0000000000..4dae3ec968 Binary files /dev/null and b/graphics/battle_anims/sprites/new/blacephalon_head.png differ diff --git a/graphics/battle_anims/sprites/new/blue_flare.pal b/graphics/battle_anims/sprites/new/blue_flare.pal new file mode 100644 index 0000000000..3b224c3459 --- /dev/null +++ b/graphics/battle_anims/sprites/new/blue_flare.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +248 248 248 +205 248 255 +139 180 255 +106 230 255 +57 238 255 +24 238 255 +24 172 255 +57 156 255 +16 96 255 +8 48 255 +0 0 255 +0 0 156 +238 238 238 +189 189 189 +156 164 164 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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/battle_anims/sprites/new/branch.png b/graphics/battle_anims/sprites/new/branch.png new file mode 100644 index 0000000000..edd1a50e89 Binary files /dev/null and b/graphics/battle_anims/sprites/new/branch.png differ diff --git a/graphics/battle_anims/sprites/new/brine.png b/graphics/battle_anims/sprites/new/brine.png new file mode 100644 index 0000000000..b585513ca9 Binary files /dev/null and b/graphics/battle_anims/sprites/new/brine.png differ diff --git a/graphics/battle_anims/sprites/new/cacoon.png b/graphics/battle_anims/sprites/new/cacoon.png new file mode 100644 index 0000000000..55b17ce8ae Binary files /dev/null and b/graphics/battle_anims/sprites/new/cacoon.png differ diff --git a/graphics/battle_anims/sprites/new/chain_link.png b/graphics/battle_anims/sprites/new/chain_link.png new file mode 100644 index 0000000000..bf54b11cf2 Binary files /dev/null and b/graphics/battle_anims/sprites/new/chain_link.png differ diff --git a/graphics/battle_anims/sprites/new/chop.png b/graphics/battle_anims/sprites/new/chop.png new file mode 100644 index 0000000000..2afff2b3f2 Binary files /dev/null and b/graphics/battle_anims/sprites/new/chop.png differ diff --git a/graphics/battle_anims/sprites/new/confide.png b/graphics/battle_anims/sprites/new/confide.png new file mode 100644 index 0000000000..adb65b8052 Binary files /dev/null and b/graphics/battle_anims/sprites/new/confide.png differ diff --git a/graphics/battle_anims/sprites/new/crafty_shield.png b/graphics/battle_anims/sprites/new/crafty_shield.png new file mode 100644 index 0000000000..091047fd10 Binary files /dev/null and b/graphics/battle_anims/sprites/new/crafty_shield.png differ diff --git a/graphics/battle_anims/sprites/new/curse_nail.png b/graphics/battle_anims/sprites/new/curse_nail.png new file mode 100644 index 0000000000..0e0e6654e2 Binary files /dev/null and b/graphics/battle_anims/sprites/new/curse_nail.png differ diff --git a/graphics/battle_anims/sprites/new/draco_meteor.pal b/graphics/battle_anims/sprites/new/draco_meteor.pal new file mode 100644 index 0000000000..b2689acd4b --- /dev/null +++ b/graphics/battle_anims/sprites/new/draco_meteor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 0 189 +0 0 0 +18 18 18 +27 27 27 +35 35 35 +48 48 48 +53 53 53 +65 65 65 +74 74 74 +89 89 89 +98 98 98 +108 108 108 +119 119 119 +121 121 121 +137 137 137 +151 151 151 diff --git a/graphics/battle_anims/sprites/new/dragon_pulse_ring.png b/graphics/battle_anims/sprites/new/dragon_pulse_ring.png new file mode 100644 index 0000000000..44495f64b6 Binary files /dev/null and b/graphics/battle_anims/sprites/new/dragon_pulse_ring.png differ diff --git a/graphics/battle_anims/sprites/new/dreepy_missile.png b/graphics/battle_anims/sprites/new/dreepy_missile.png new file mode 100644 index 0000000000..73fe2d2f21 Binary files /dev/null and b/graphics/battle_anims/sprites/new/dreepy_missile.png differ diff --git a/graphics/battle_anims/sprites/new/drill.png b/graphics/battle_anims/sprites/new/drill.png new file mode 100644 index 0000000000..a97eeaaf50 Binary files /dev/null and b/graphics/battle_anims/sprites/new/drill.png differ diff --git a/graphics/battle_anims/sprites/new/embers.png b/graphics/battle_anims/sprites/new/embers.png new file mode 100644 index 0000000000..8bf2dd5aa6 Binary files /dev/null and b/graphics/battle_anims/sprites/new/embers.png differ diff --git a/graphics/battle_anims/sprites/new/energy_ball.png b/graphics/battle_anims/sprites/new/energy_ball.png new file mode 100644 index 0000000000..361d7ff71a Binary files /dev/null and b/graphics/battle_anims/sprites/new/energy_ball.png differ diff --git a/graphics/battle_anims/sprites/new/fairy_lock_chains.png b/graphics/battle_anims/sprites/new/fairy_lock_chains.png new file mode 100644 index 0000000000..8db2c26694 Binary files /dev/null and b/graphics/battle_anims/sprites/new/fairy_lock_chains.png differ diff --git a/graphics/battle_anims/sprites/new/fishies.png b/graphics/battle_anims/sprites/new/fishies.png new file mode 100644 index 0000000000..4abdbb9007 Binary files /dev/null and b/graphics/battle_anims/sprites/new/fishies.png differ diff --git a/graphics/battle_anims/sprites/new/flash_cannon_ball.png b/graphics/battle_anims/sprites/new/flash_cannon_ball.png new file mode 100644 index 0000000000..b08d1d39f4 Binary files /dev/null and b/graphics/battle_anims/sprites/new/flash_cannon_ball.png differ diff --git a/graphics/battle_anims/sprites/new/fly.png b/graphics/battle_anims/sprites/new/fly.png new file mode 100644 index 0000000000..dd1149de99 Binary files /dev/null and b/graphics/battle_anims/sprites/new/fly.png differ diff --git a/graphics/battle_anims/sprites/new/fusion_flare.pal b/graphics/battle_anims/sprites/new/fusion_flare.pal new file mode 100644 index 0000000000..7143d0fb4a --- /dev/null +++ b/graphics/battle_anims/sprites/new/fusion_flare.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +248 88 0 +248 0 16 +200 0 8 +144 0 0 +128 0 0 +112 0 0 +96 0 0 +80 0 0 +0 0 0 +0 0 0 +128 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/sprites/new/garbage_poison_column.pal b/graphics/battle_anims/sprites/new/garbage_poison_column.pal new file mode 100644 index 0000000000..e9ce028df0 --- /dev/null +++ b/graphics/battle_anims/sprites/new/garbage_poison_column.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +255 255 255 +236 239 234 +216 222 212 +197 206 191 +177 189 169 +157 173 147 +138 156 126 +118 140 104 +98 123 82 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/sprites/new/gear.png b/graphics/battle_anims/sprites/new/gear.png new file mode 100644 index 0000000000..30f670c80c Binary files /dev/null and b/graphics/battle_anims/sprites/new/gear.png differ diff --git a/graphics/battle_anims/sprites/new/gigavolt_havoc_spear.png b/graphics/battle_anims/sprites/new/gigavolt_havoc_spear.png new file mode 100644 index 0000000000..7abc0bab58 Binary files /dev/null and b/graphics/battle_anims/sprites/new/gigavolt_havoc_spear.png differ diff --git a/graphics/battle_anims/sprites/new/golden_apple.png b/graphics/battle_anims/sprites/new/golden_apple.png new file mode 100644 index 0000000000..0898d7c6a0 Binary files /dev/null and b/graphics/battle_anims/sprites/new/golden_apple.png differ diff --git a/graphics/battle_anims/sprites/new/green_drake.pal b/graphics/battle_anims/sprites/new/green_drake.pal new file mode 100644 index 0000000000..697da896bc --- /dev/null +++ b/graphics/battle_anims/sprites/new/green_drake.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +164 148 139 +0 205 0 +0 180 0 +0 156 0 +0 123 16 +0 106 16 +0 82 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/battle_anims/sprites/new/green_star.png b/graphics/battle_anims/sprites/new/green_star.png new file mode 100644 index 0000000000..21218ceb6d Binary files /dev/null and b/graphics/battle_anims/sprites/new/green_star.png differ diff --git a/graphics/battle_anims/sprites/new/heart_stamp.png b/graphics/battle_anims/sprites/new/heart_stamp.png new file mode 100644 index 0000000000..4938e7e9ee Binary files /dev/null and b/graphics/battle_anims/sprites/new/heart_stamp.png differ diff --git a/graphics/battle_anims/sprites/new/hexes.png b/graphics/battle_anims/sprites/new/hexes.png new file mode 100644 index 0000000000..7f00eeaf1d Binary files /dev/null and b/graphics/battle_anims/sprites/new/hexes.png differ diff --git a/graphics/battle_anims/sprites/new/hoopa_hand.png b/graphics/battle_anims/sprites/new/hoopa_hand.png new file mode 100644 index 0000000000..02aaccf13c Binary files /dev/null and b/graphics/battle_anims/sprites/new/hoopa_hand.png differ diff --git a/graphics/battle_anims/sprites/new/hoopa_ring.png b/graphics/battle_anims/sprites/new/hoopa_ring.png new file mode 100644 index 0000000000..bc49e1ce31 Binary files /dev/null and b/graphics/battle_anims/sprites/new/hoopa_ring.png differ diff --git a/graphics/battle_anims/sprites/new/horn.png b/graphics/battle_anims/sprites/new/horn.png new file mode 100644 index 0000000000..9bdf61d7d9 Binary files /dev/null and b/graphics/battle_anims/sprites/new/horn.png differ diff --git a/graphics/battle_anims/sprites/new/horn_leech.png b/graphics/battle_anims/sprites/new/horn_leech.png new file mode 100644 index 0000000000..572079ee69 Binary files /dev/null and b/graphics/battle_anims/sprites/new/horn_leech.png differ diff --git a/graphics/battle_anims/sprites/new/horseshoe_fist.png b/graphics/battle_anims/sprites/new/horseshoe_fist.png new file mode 100644 index 0000000000..b8010530e2 Binary files /dev/null and b/graphics/battle_anims/sprites/new/horseshoe_fist.png differ diff --git a/graphics/battle_anims/sprites/new/hydro_pump.png b/graphics/battle_anims/sprites/new/hydro_pump.png new file mode 100644 index 0000000000..79e5b9d9cb Binary files /dev/null and b/graphics/battle_anims/sprites/new/hydro_pump.png differ diff --git a/graphics/battle_anims/sprites/new/ice_rock.png b/graphics/battle_anims/sprites/new/ice_rock.png new file mode 100644 index 0000000000..d5ecc19d6d Binary files /dev/null and b/graphics/battle_anims/sprites/new/ice_rock.png differ diff --git a/graphics/battle_anims/sprites/new/impact.pal b/graphics/battle_anims/sprites/new/impact.pal new file mode 100644 index 0000000000..644d27307c --- /dev/null +++ b/graphics/battle_anims/sprites/new/impact.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 0 +255 99 0 +255 156 0 +255 197 0 +255 214 99 +255 239 197 +0 0 0 +214 214 214 +99 140 99 +197 197 197 +230 230 230 +132 132 132 +165 165 165 +206 206 206 +247 247 247 diff --git a/graphics/battle_anims/sprites/new/large_spike.png b/graphics/battle_anims/sprites/new/large_spike.png new file mode 100644 index 0000000000..6af8634c57 Binary files /dev/null and b/graphics/battle_anims/sprites/new/large_spike.png differ diff --git a/graphics/battle_anims/sprites/new/leaves.png b/graphics/battle_anims/sprites/new/leaves.png new file mode 100644 index 0000000000..4ced398dae Binary files /dev/null and b/graphics/battle_anims/sprites/new/leaves.png differ diff --git a/graphics/battle_anims/sprites/new/leech_seed.png b/graphics/battle_anims/sprites/new/leech_seed.png new file mode 100644 index 0000000000..a0246870f8 Binary files /dev/null and b/graphics/battle_anims/sprites/new/leech_seed.png differ diff --git a/graphics/battle_anims/sprites/new/lightning_rain.png b/graphics/battle_anims/sprites/new/lightning_rain.png new file mode 100644 index 0000000000..c2d81405d0 Binary files /dev/null and b/graphics/battle_anims/sprites/new/lightning_rain.png differ diff --git a/graphics/battle_anims/sprites/new/mean_look.png b/graphics/battle_anims/sprites/new/mean_look.png new file mode 100644 index 0000000000..30e6eb5eea Binary files /dev/null and b/graphics/battle_anims/sprites/new/mean_look.png differ diff --git a/graphics/battle_anims/sprites/new/metal_bits.png b/graphics/battle_anims/sprites/new/metal_bits.png new file mode 100644 index 0000000000..637149e5d6 Binary files /dev/null and b/graphics/battle_anims/sprites/new/metal_bits.png differ diff --git a/graphics/battle_anims/sprites/new/mud_bomb.png b/graphics/battle_anims/sprites/new/mud_bomb.png new file mode 100644 index 0000000000..ebb03dfe49 Binary files /dev/null and b/graphics/battle_anims/sprites/new/mud_bomb.png differ diff --git a/graphics/battle_anims/sprites/new/mushroom.png b/graphics/battle_anims/sprites/new/mushroom.png new file mode 100644 index 0000000000..413503c26c Binary files /dev/null and b/graphics/battle_anims/sprites/new/mushroom.png differ diff --git a/graphics/battle_anims/sprites/new/natural_gift_ring.pal b/graphics/battle_anims/sprites/new/natural_gift_ring.pal new file mode 100644 index 0000000000..10ac6cb7ec --- /dev/null +++ b/graphics/battle_anims/sprites/new/natural_gift_ring.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +214 255 181 +197 255 156 +189 255 132 +173 255 115 +173 255 107 +165 255 99 +156 255 82 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/sprites/new/necrozma_star.png b/graphics/battle_anims/sprites/new/necrozma_star.png new file mode 100644 index 0000000000..ffd7246600 Binary files /dev/null and b/graphics/battle_anims/sprites/new/necrozma_star.png differ diff --git a/graphics/battle_anims/sprites/new/obstruct.png b/graphics/battle_anims/sprites/new/obstruct.png new file mode 100644 index 0000000000..79400e6e15 Binary files /dev/null and b/graphics/battle_anims/sprites/new/obstruct.png differ diff --git a/graphics/battle_anims/sprites/new/omega_stone.png b/graphics/battle_anims/sprites/new/omega_stone.png new file mode 100644 index 0000000000..d9aa568bee Binary files /dev/null and b/graphics/battle_anims/sprites/new/omega_stone.png differ diff --git a/graphics/battle_anims/sprites/new/pink_diamond.png b/graphics/battle_anims/sprites/new/pink_diamond.png new file mode 100644 index 0000000000..120848fa16 Binary files /dev/null and b/graphics/battle_anims/sprites/new/pink_diamond.png differ diff --git a/graphics/battle_anims/sprites/new/poison_column.png b/graphics/battle_anims/sprites/new/poison_column.png new file mode 100644 index 0000000000..dfe0bb27ec Binary files /dev/null and b/graphics/battle_anims/sprites/new/poison_column.png differ diff --git a/graphics/battle_anims/sprites/new/poison_jab.png b/graphics/battle_anims/sprites/new/poison_jab.png new file mode 100644 index 0000000000..02bbf1b857 Binary files /dev/null and b/graphics/battle_anims/sprites/new/poison_jab.png differ diff --git a/graphics/battle_anims/sprites/new/poltergeist.pal b/graphics/battle_anims/sprites/new/poltergeist.pal new file mode 100644 index 0000000000..699ab1ffa7 --- /dev/null +++ b/graphics/battle_anims/sprites/new/poltergeist.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 246 +246 246 246 +213 197 230 +213 197 230 +180 148 213 +180 148 213 +180 148 213 +148 98 197 +115 65 164 +82 32 131 +82 32 131 +82 32 131 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/sprites/new/power_gem.png b/graphics/battle_anims/sprites/new/power_gem.png new file mode 100644 index 0000000000..5523bb8a75 Binary files /dev/null and b/graphics/battle_anims/sprites/new/power_gem.png differ diff --git a/graphics/battle_anims/sprites/new/power_trick.png b/graphics/battle_anims/sprites/new/power_trick.png new file mode 100644 index 0000000000..53f9927634 Binary files /dev/null and b/graphics/battle_anims/sprites/new/power_trick.png differ diff --git a/graphics/battle_anims/sprites/new/punishment.png b/graphics/battle_anims/sprites/new/punishment.png new file mode 100644 index 0000000000..9215b6ec07 Binary files /dev/null and b/graphics/battle_anims/sprites/new/punishment.png differ diff --git a/graphics/battle_anims/sprites/new/purple_drake.png b/graphics/battle_anims/sprites/new/purple_drake.png new file mode 100644 index 0000000000..372f9a3789 Binary files /dev/null and b/graphics/battle_anims/sprites/new/purple_drake.png differ diff --git a/graphics/battle_anims/sprites/new/quick_guard.png b/graphics/battle_anims/sprites/new/quick_guard.png new file mode 100644 index 0000000000..71d343eeb5 Binary files /dev/null and b/graphics/battle_anims/sprites/new/quick_guard.png differ diff --git a/graphics/battle_anims/sprites/new/razor_shell.png b/graphics/battle_anims/sprites/new/razor_shell.png new file mode 100644 index 0000000000..fa39b37fa6 Binary files /dev/null and b/graphics/battle_anims/sprites/new/razor_shell.png differ diff --git a/graphics/battle_anims/sprites/new/rock_small.png b/graphics/battle_anims/sprites/new/rock_small.png new file mode 100644 index 0000000000..1ec3be87a4 Binary files /dev/null and b/graphics/battle_anims/sprites/new/rock_small.png differ diff --git a/graphics/battle_anims/sprites/new/rocks.png b/graphics/battle_anims/sprites/new/rocks.png new file mode 100644 index 0000000000..4393817a77 Binary files /dev/null and b/graphics/battle_anims/sprites/new/rocks.png differ diff --git a/graphics/battle_anims/sprites/new/shell_left.png b/graphics/battle_anims/sprites/new/shell_left.png new file mode 100644 index 0000000000..fda9142ad0 Binary files /dev/null and b/graphics/battle_anims/sprites/new/shell_left.png differ diff --git a/graphics/battle_anims/sprites/new/shell_right.png b/graphics/battle_anims/sprites/new/shell_right.png new file mode 100644 index 0000000000..70f5235a77 Binary files /dev/null and b/graphics/battle_anims/sprites/new/shell_right.png differ diff --git a/graphics/battle_anims/sprites/new/spacial_rend_slices.pal b/graphics/battle_anims/sprites/new/spacial_rend_slices.pal new file mode 100644 index 0000000000..7a8b9dd554 --- /dev/null +++ b/graphics/battle_anims/sprites/new/spacial_rend_slices.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +99 41 255 +0 0 0 +206 115 206 +214 123 206 +222 181 247 +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 +0 0 0 diff --git a/graphics/battle_anims/sprites/new/spikes.png b/graphics/battle_anims/sprites/new/spikes.png new file mode 100644 index 0000000000..33080420ec Binary files /dev/null and b/graphics/battle_anims/sprites/new/spikes.png differ diff --git a/graphics/battle_anims/sprites/new/spirit_shackle_arrow.png b/graphics/battle_anims/sprites/new/spirit_shackle_arrow.png new file mode 100644 index 0000000000..ff86f33d21 Binary files /dev/null and b/graphics/battle_anims/sprites/new/spirit_shackle_arrow.png differ diff --git a/graphics/battle_anims/sprites/new/stealth_rock.png b/graphics/battle_anims/sprites/new/stealth_rock.png new file mode 100644 index 0000000000..6ade3bb879 Binary files /dev/null and b/graphics/battle_anims/sprites/new/stealth_rock.png differ diff --git a/graphics/battle_anims/sprites/new/steam_eruption.png b/graphics/battle_anims/sprites/new/steam_eruption.png new file mode 100644 index 0000000000..2eb8535654 Binary files /dev/null and b/graphics/battle_anims/sprites/new/steam_eruption.png differ diff --git a/graphics/battle_anims/sprites/new/steamroller.png b/graphics/battle_anims/sprites/new/steamroller.png new file mode 100644 index 0000000000..8abdef6692 Binary files /dev/null and b/graphics/battle_anims/sprites/new/steamroller.png differ diff --git a/graphics/battle_anims/sprites/new/steel_beam.pal b/graphics/battle_anims/sprites/new/steel_beam.pal new file mode 100644 index 0000000000..f9448fcdd4 --- /dev/null +++ b/graphics/battle_anims/sprites/new/steel_beam.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +112 120 208 +128 136 216 +144 152 224 +160 168 232 +176 184 240 +192 200 248 +208 216 248 +248 248 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +248 192 216 +248 248 168 +0 0 0 diff --git a/graphics/battle_anims/sprites/new/stone_edge.png b/graphics/battle_anims/sprites/new/stone_edge.png new file mode 100644 index 0000000000..8e27efb9a2 Binary files /dev/null and b/graphics/battle_anims/sprites/new/stone_edge.png differ diff --git a/graphics/battle_anims/sprites/new/stone_pillar.png b/graphics/battle_anims/sprites/new/stone_pillar.png new file mode 100644 index 0000000000..8ee5d4a2fa Binary files /dev/null and b/graphics/battle_anims/sprites/new/stone_pillar.png differ diff --git a/graphics/battle_anims/sprites/new/straight_beam.png b/graphics/battle_anims/sprites/new/straight_beam.png new file mode 100644 index 0000000000..c13ae95d0b Binary files /dev/null and b/graphics/battle_anims/sprites/new/straight_beam.png differ diff --git a/graphics/battle_anims/sprites/new/substitute_back.png b/graphics/battle_anims/sprites/new/substitute_back.png new file mode 100644 index 0000000000..fd31e1063c Binary files /dev/null and b/graphics/battle_anims/sprites/new/substitute_back.png differ diff --git a/graphics/battle_anims/sprites/new/substitute_front.png b/graphics/battle_anims/sprites/new/substitute_front.png new file mode 100644 index 0000000000..5d563900c0 Binary files /dev/null and b/graphics/battle_anims/sprites/new/substitute_front.png differ diff --git a/graphics/battle_anims/sprites/new/surf_new.pal b/graphics/battle_anims/sprites/new/surf_new.pal new file mode 100644 index 0000000000..c81c2ec9e8 --- /dev/null +++ b/graphics/battle_anims/sprites/new/surf_new.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +104 144 136 +65 164 213 +74 172 238 +82 180 255 +98 197 255 +123 189 230 +131 213 255 +156 230 255 +248 248 248 +65 164 213 +74 172 238 +131 205 246 +222 255 255 +248 248 248 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/sprites/new/sword.png b/graphics/battle_anims/sprites/new/sword.png new file mode 100644 index 0000000000..9d037b9a94 Binary files /dev/null and b/graphics/battle_anims/sprites/new/sword.png differ diff --git a/graphics/battle_anims/sprites/new/teeth.png b/graphics/battle_anims/sprites/new/teeth.png new file mode 100644 index 0000000000..53b3bce279 Binary files /dev/null and b/graphics/battle_anims/sprites/new/teeth.png differ diff --git a/graphics/battle_anims/sprites/new/thrash.png b/graphics/battle_anims/sprites/new/thrash.png new file mode 100644 index 0000000000..c225cac60c Binary files /dev/null and b/graphics/battle_anims/sprites/new/thrash.png differ diff --git a/graphics/battle_anims/sprites/new/tornado.png b/graphics/battle_anims/sprites/new/tornado.png new file mode 100644 index 0000000000..30372e33d0 Binary files /dev/null and b/graphics/battle_anims/sprites/new/tornado.png differ diff --git a/graphics/battle_anims/sprites/new/water_gun.png b/graphics/battle_anims/sprites/new/water_gun.png new file mode 100644 index 0000000000..4f30b2133d Binary files /dev/null and b/graphics/battle_anims/sprites/new/water_gun.png differ diff --git a/graphics/battle_anims/sprites/new/wood.png b/graphics/battle_anims/sprites/new/wood.png new file mode 100644 index 0000000000..1b64a647f5 Binary files /dev/null and b/graphics/battle_anims/sprites/new/wood.png differ diff --git a/graphics/battle_anims/sprites/new/z_move_symbol.png b/graphics/battle_anims/sprites/new/z_move_symbol.png new file mode 100644 index 0000000000..bcb3098754 Binary files /dev/null and b/graphics/battle_anims/sprites/new/z_move_symbol.png differ diff --git a/graphics/battle_anims/sprites/omega_symbol.png b/graphics/battle_anims/sprites/omega_symbol.png new file mode 100644 index 0000000000..a821d5e40a Binary files /dev/null and b/graphics/battle_anims/sprites/omega_symbol.png differ diff --git a/graphics/battle_anims/sprites/particles2.png b/graphics/battle_anims/sprites/particles2.png new file mode 100644 index 0000000000..9056c253cb Binary files /dev/null and b/graphics/battle_anims/sprites/particles2.png differ diff --git a/graphics/battle_anims/sprites/poison_jab.png b/graphics/battle_anims/sprites/poison_jab.png new file mode 100644 index 0000000000..e7871a2c9d Binary files /dev/null and b/graphics/battle_anims/sprites/poison_jab.png differ diff --git a/graphics/battle_anims/sprites/power_gem.png b/graphics/battle_anims/sprites/power_gem.png new file mode 100644 index 0000000000..8d9ad469e3 Binary files /dev/null and b/graphics/battle_anims/sprites/power_gem.png differ diff --git a/graphics/battle_anims/sprites/primal_particles.png b/graphics/battle_anims/sprites/primal_particles.png new file mode 100644 index 0000000000..6fdf09d96e Binary files /dev/null and b/graphics/battle_anims/sprites/primal_particles.png differ diff --git a/graphics/battle_anims/sprites/psycho_cut.png b/graphics/battle_anims/sprites/psycho_cut.png new file mode 100644 index 0000000000..3eb1de7d2a Binary files /dev/null and b/graphics/battle_anims/sprites/psycho_cut.png differ diff --git a/graphics/battle_anims/sprites/punishment.png b/graphics/battle_anims/sprites/punishment.png new file mode 100644 index 0000000000..9215b6ec07 Binary files /dev/null and b/graphics/battle_anims/sprites/punishment.png differ diff --git a/graphics/battle_anims/sprites/purple_jab.png b/graphics/battle_anims/sprites/purple_jab.png new file mode 100644 index 0000000000..2c15153b93 Binary files /dev/null and b/graphics/battle_anims/sprites/purple_jab.png differ diff --git a/graphics/battle_anims/sprites/quick_guard.png b/graphics/battle_anims/sprites/quick_guard.png new file mode 100644 index 0000000000..71d343eeb5 Binary files /dev/null and b/graphics/battle_anims/sprites/quick_guard.png differ diff --git a/graphics/battle_anims/sprites/seed_new.png b/graphics/battle_anims/sprites/seed_new.png new file mode 100644 index 0000000000..74f42d7aba Binary files /dev/null and b/graphics/battle_anims/sprites/seed_new.png differ diff --git a/graphics/battle_anims/sprites/small_cloud.png b/graphics/battle_anims/sprites/small_cloud.png new file mode 100644 index 0000000000..2733a71dca Binary files /dev/null and b/graphics/battle_anims/sprites/small_cloud.png differ diff --git a/graphics/battle_anims/sprites/stealth_rock.png b/graphics/battle_anims/sprites/stealth_rock.png new file mode 100644 index 0000000000..8b38ae1c17 Binary files /dev/null and b/graphics/battle_anims/sprites/stealth_rock.png differ diff --git a/graphics/battle_anims/sprites/stone_edge.png b/graphics/battle_anims/sprites/stone_edge.png new file mode 100644 index 0000000000..44f678d8db Binary files /dev/null and b/graphics/battle_anims/sprites/stone_edge.png differ diff --git a/graphics/battle_anims/sprites/toxic_spikes.png b/graphics/battle_anims/sprites/toxic_spikes.png new file mode 100644 index 0000000000..3102949fd5 Binary files /dev/null and b/graphics/battle_anims/sprites/toxic_spikes.png differ diff --git a/graphics/battle_anims/sprites/trump_card_particles.png b/graphics/battle_anims/sprites/trump_card_particles.png new file mode 100644 index 0000000000..cec1a463cd Binary files /dev/null and b/graphics/battle_anims/sprites/trump_card_particles.png differ diff --git a/graphics/battle_anims/sprites/trump_cards.png b/graphics/battle_anims/sprites/trump_cards.png new file mode 100644 index 0000000000..64c3b00167 Binary files /dev/null and b/graphics/battle_anims/sprites/trump_cards.png differ diff --git a/graphics/battle_anims/sprites/water_gun.png b/graphics/battle_anims/sprites/water_gun.png new file mode 100644 index 0000000000..4f30b2133d Binary files /dev/null and b/graphics/battle_anims/sprites/water_gun.png differ diff --git a/graphics/battle_anims/sprites/white_streak.png b/graphics/battle_anims/sprites/white_streak.png new file mode 100644 index 0000000000..7328ff1512 Binary files /dev/null and b/graphics/battle_anims/sprites/white_streak.png differ diff --git a/graphics/battle_anims/sprites/wood_hammer.png b/graphics/battle_anims/sprites/wood_hammer.png new file mode 100644 index 0000000000..5768605f80 Binary files /dev/null and b/graphics/battle_anims/sprites/wood_hammer.png differ diff --git a/graphics/battle_anims/sprites/worry_seed.png b/graphics/battle_anims/sprites/worry_seed.png new file mode 100644 index 0000000000..2f6d68b294 Binary files /dev/null and b/graphics/battle_anims/sprites/worry_seed.png differ diff --git a/graphics/battle_anims/sprites/wring_out.png b/graphics/battle_anims/sprites/wring_out.png new file mode 100644 index 0000000000..b96ffdbd2e Binary files /dev/null and b/graphics/battle_anims/sprites/wring_out.png differ diff --git a/graphics/unused/goosuto.bin b/graphics/battle_anims/unused/goosuto.bin similarity index 100% rename from graphics/unused/goosuto.bin rename to graphics/battle_anims/unused/goosuto.bin diff --git a/graphics/unused/goosuto.png b/graphics/battle_anims/unused/goosuto.png similarity index 100% rename from graphics/unused/goosuto.png rename to graphics/battle_anims/unused/goosuto.png diff --git a/graphics/unknown/unknown_D1C060.bin b/graphics/battle_anims/unused/lights.bin similarity index 100% rename from graphics/unknown/unknown_D1C060.bin rename to graphics/battle_anims/unused/lights.bin diff --git a/graphics/unknown/unknown_D1C060.png b/graphics/battle_anims/unused/lights.png similarity index 100% rename from graphics/unknown/unknown_D1C060.png rename to graphics/battle_anims/unused/lights.png diff --git a/graphics/unused/line_sketch.png b/graphics/battle_anims/unused/line_sketch.png similarity index 100% rename from graphics/unused/line_sketch.png rename to graphics/battle_anims/unused/line_sketch.png diff --git a/graphics/unused/line_sketch_2.bin b/graphics/battle_anims/unused/line_sketch_2.bin similarity index 100% rename from graphics/unused/line_sketch_2.bin rename to graphics/battle_anims/unused/line_sketch_2.bin diff --git a/graphics/unused/line_sketch_2.png b/graphics/battle_anims/unused/line_sketch_2.png similarity index 100% rename from graphics/unused/line_sketch_2.png rename to graphics/battle_anims/unused/line_sketch_2.png diff --git a/graphics/unknown/unknown_C0CAE0.bin b/graphics/battle_anims/unused/line_sketch_2_pal.bin similarity index 100% rename from graphics/unknown/unknown_C0CAE0.bin rename to graphics/battle_anims/unused/line_sketch_2_pal.bin diff --git a/graphics/unused/metronome_hand_small.png b/graphics/battle_anims/unused/metronome_hand_small.png similarity index 100% rename from graphics/unused/metronome_hand_small.png rename to graphics/battle_anims/unused/metronome_hand_small.png diff --git a/graphics/unused/battle_anim_023.pal b/graphics/battle_anims/unused/music_notes.pal similarity index 100% rename from graphics/unused/battle_anim_023.pal rename to graphics/battle_anims/unused/music_notes.pal diff --git a/graphics/unused/music_notes.png b/graphics/battle_anims/unused/music_notes.png similarity index 100% rename from graphics/unused/music_notes.png rename to graphics/battle_anims/unused/music_notes.png diff --git a/graphics/unused/old_beatup.png b/graphics/battle_anims/unused/old_beatup.png similarity index 100% rename from graphics/unused/old_beatup.png rename to graphics/battle_anims/unused/old_beatup.png diff --git a/graphics/unknown/unknown_C06D98.png b/graphics/battle_anims/unused/spinning_ball.png similarity index 100% rename from graphics/unknown/unknown_C06D98.png rename to graphics/battle_anims/unused/spinning_ball.png diff --git a/graphics/unknown/unknown_C06D98_2.pal b/graphics/battle_anims/unused/spinning_ball_2.pal similarity index 100% rename from graphics/unknown/unknown_C06D98_2.pal rename to graphics/battle_anims/unused/spinning_ball_2.pal diff --git a/graphics/battle_anims/unused.pal b/graphics/battle_anims/unused/unknown.pal similarity index 100% rename from graphics/battle_anims/unused.pal rename to graphics/battle_anims/unused/unknown.pal diff --git a/graphics/unknown/unknown_C0CA1C.bin b/graphics/battle_anims/unused/unknown_1.bin similarity index 100% rename from graphics/unknown/unknown_C0CA1C.bin rename to graphics/battle_anims/unused/unknown_1.bin diff --git a/graphics/unknown/unknown_C0CA40.bin b/graphics/battle_anims/unused/unknown_2.bin similarity index 100% rename from graphics/unknown/unknown_C0CA40.bin rename to graphics/battle_anims/unused/unknown_2.bin diff --git a/graphics/unknown/unknown_C2F9E0.pal b/graphics/battle_anims/unused/unknown_2.pal similarity index 100% rename from graphics/unknown/unknown_C2F9E0.pal rename to graphics/battle_anims/unused/unknown_2.pal diff --git a/graphics/unknown/unknown_C0CA64.bin b/graphics/battle_anims/unused/unknown_3.bin similarity index 100% rename from graphics/unknown/unknown_C0CA64.bin rename to graphics/battle_anims/unused/unknown_3.bin diff --git a/graphics/unknown/unknown_D0D2B4.bin b/graphics/battle_anims/unused/unknown_4.bin similarity index 100% rename from graphics/unknown/unknown_D0D2B4.bin rename to graphics/battle_anims/unused/unknown_4.bin diff --git a/graphics/unknown/unknown_593FFC.bin b/graphics/battle_anims/unused/water.bin similarity index 100% rename from graphics/unknown/unknown_593FFC.bin rename to graphics/battle_anims/unused/water.bin diff --git a/graphics/unknown/unknown_593C80.png b/graphics/battle_anims/unused/water_gfx.png similarity index 100% rename from graphics/unknown/unknown_593C80.png rename to graphics/battle_anims/unused/water_gfx.png diff --git a/graphics/unused/water_splash.bin b/graphics/battle_anims/unused/water_splash.bin similarity index 100% rename from graphics/unused/water_splash.bin rename to graphics/battle_anims/unused/water_splash.bin diff --git a/graphics/unused/water_splash.png b/graphics/battle_anims/unused/water_splash.png similarity index 100% rename from graphics/unused/water_splash.png rename to graphics/battle_anims/unused/water_splash.png diff --git a/graphics/battle_frontier/battle_tilemap1.bin b/graphics/battle_frontier/multi_battle_intro_bg_opponent.bin similarity index 100% rename from graphics/battle_frontier/battle_tilemap1.bin rename to graphics/battle_frontier/multi_battle_intro_bg_opponent.bin diff --git a/graphics/battle_frontier/battle_tilemap2.bin b/graphics/battle_frontier/multi_battle_intro_bg_player.bin similarity index 100% rename from graphics/battle_frontier/battle_tilemap2.bin rename to graphics/battle_frontier/multi_battle_intro_bg_player.bin diff --git a/graphics/battle_frontier/pyramid_light.pal b/graphics/battle_frontier/pyramid_floor.pal similarity index 100% rename from graphics/battle_frontier/pyramid_light.pal rename to graphics/battle_frontier/pyramid_floor.pal diff --git a/graphics/battle_frontier/tourney_line_mask_map.bin b/graphics/battle_frontier/tourney_tree.bin similarity index 100% rename from graphics/battle_frontier/tourney_line_mask_map.bin rename to graphics/battle_frontier/tourney_tree.bin diff --git a/graphics/battle_frontier/tourney_bg.png b/graphics/battle_frontier/tourney_tree.png similarity index 100% rename from graphics/battle_frontier/tourney_bg.png rename to graphics/battle_frontier/tourney_tree.png diff --git a/graphics/battle_interface/ability_pop_up.pal b/graphics/battle_interface/ability_pop_up.pal new file mode 100644 index 0000000000..19895d0bcf --- /dev/null +++ b/graphics/battle_interface/ability_pop_up.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +1 177 91 +143 129 149 +103 91 111 +79 65 85 +59 31 81 +103 89 109 +231 239 245 +249 253 255 +0 0 0 +0 0 0 +107 115 115 +74 66 82 +0 0 0 +214 214 206 +132 140 140 +0 0 0 diff --git a/graphics/battle_interface/ability_pop_up.png b/graphics/battle_interface/ability_pop_up.png new file mode 100644 index 0000000000..92971a7a51 Binary files /dev/null and b/graphics/battle_interface/ability_pop_up.png differ diff --git a/graphics/battle_interface/alpha_indicator.png b/graphics/battle_interface/alpha_indicator.png new file mode 100644 index 0000000000..0e302576b6 Binary files /dev/null and b/graphics/battle_interface/alpha_indicator.png differ diff --git a/graphics/battle_interface/healthbox_doubles_frameend.png b/graphics/battle_interface/healthbox_doubles_frameend.png new file mode 100644 index 0000000000..812a6c2c45 Binary files /dev/null and b/graphics/battle_interface/healthbox_doubles_frameend.png differ diff --git a/graphics/battle_interface/healthbox_doubles_frameend_bar.png b/graphics/battle_interface/healthbox_doubles_frameend_bar.png new file mode 100644 index 0000000000..7bb1f0d4c9 Binary files /dev/null and b/graphics/battle_interface/healthbox_doubles_frameend_bar.png differ diff --git a/graphics/interface/hpbar_anim.png b/graphics/battle_interface/hpbar_anim_unused.png similarity index 100% rename from graphics/interface/hpbar_anim.png rename to graphics/battle_interface/hpbar_anim_unused.png diff --git a/graphics/interface/party_menu_hpbar.png b/graphics/battle_interface/hpbar_unused.png similarity index 100% rename from graphics/interface/party_menu_hpbar.png rename to graphics/battle_interface/hpbar_unused.png diff --git a/graphics/battle_interface/last_used_ball_l.png b/graphics/battle_interface/last_used_ball_l.png new file mode 100644 index 0000000000..90fcef3739 Binary files /dev/null and b/graphics/battle_interface/last_used_ball_l.png differ diff --git a/graphics/battle_interface/last_used_ball_r.png b/graphics/battle_interface/last_used_ball_r.png new file mode 100644 index 0000000000..581569cf1b Binary files /dev/null and b/graphics/battle_interface/last_used_ball_r.png differ diff --git a/graphics/battle_interface/unk_battlebox.png b/graphics/battle_interface/level_up_banner.png similarity index 100% rename from graphics/battle_interface/unk_battlebox.png rename to graphics/battle_interface/level_up_banner.png diff --git a/graphics/battle_interface/mega_indicator.png b/graphics/battle_interface/mega_indicator.png new file mode 100644 index 0000000000..93e113ded4 Binary files /dev/null and b/graphics/battle_interface/mega_indicator.png differ diff --git a/graphics/battle_interface/mega_trigger.pal b/graphics/battle_interface/mega_trigger.pal new file mode 100644 index 0000000000..2672d1f10a --- /dev/null +++ b/graphics/battle_interface/mega_trigger.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +185 207 163 +77 105 97 +199 159 199 +221 177 207 +57 151 117 +139 221 253 +247 161 133 +255 255 255 +153 87 67 +233 233 125 +129 255 223 +149 147 247 +195 207 201 +123 151 135 +0 0 0 +0 0 0 diff --git a/graphics/battle_interface/mega_trigger.png b/graphics/battle_interface/mega_trigger.png new file mode 100644 index 0000000000..a269ee738c Binary files /dev/null and b/graphics/battle_interface/mega_trigger.png differ diff --git a/graphics/interface/numbers1.png b/graphics/battle_interface/numbers1.png similarity index 100% rename from graphics/interface/numbers1.png rename to graphics/battle_interface/numbers1.png diff --git a/graphics/interface/numbers2.png b/graphics/battle_interface/numbers2.png similarity index 100% rename from graphics/interface/numbers2.png rename to graphics/battle_interface/numbers2.png diff --git a/graphics/battle_interface/omega_indicator.png b/graphics/battle_interface/omega_indicator.png new file mode 100644 index 0000000000..c56d51c151 Binary files /dev/null and b/graphics/battle_interface/omega_indicator.png differ diff --git a/graphics/battle_frontier/text_pp.pal b/graphics/battle_interface/text_pp.pal similarity index 100% rename from graphics/battle_frontier/text_pp.pal rename to graphics/battle_interface/text_pp.pal diff --git a/graphics/battle_interface/unknown_32C2D4.png b/graphics/battle_interface/unused_status_summary.png similarity index 100% rename from graphics/battle_interface/unknown_32C2D4.png rename to graphics/battle_interface/unused_status_summary.png diff --git a/graphics/battle_interface/z_move_trigger.png b/graphics/battle_interface/z_move_trigger.png new file mode 100644 index 0000000000..5e27dbabbe Binary files /dev/null and b/graphics/battle_interface/z_move_trigger.png differ diff --git a/graphics/battle_transitions/rayquaza.png b/graphics/battle_transitions/rayquaza.png index 5c3a914749..00df7d7415 100644 Binary files a/graphics/battle_transitions/rayquaza.png and b/graphics/battle_transitions/rayquaza.png differ diff --git a/graphics/battle_transitions/regis.png b/graphics/battle_transitions/regis.png index a083107374..4926b165b7 100644 Binary files a/graphics/battle_transitions/regis.png and b/graphics/battle_transitions/regis.png differ diff --git a/graphics/battle_transitions/85BDB14.pal b/graphics/battle_transitions/unused.pal similarity index 100% rename from graphics/battle_transitions/85BDB14.pal rename to graphics/battle_transitions/unused.pal diff --git a/graphics/berries/babiri.png b/graphics/berries/babiri.png new file mode 100644 index 0000000000..056353bab9 Binary files /dev/null and b/graphics/berries/babiri.png differ diff --git a/graphics/berries/charti.png b/graphics/berries/charti.png new file mode 100644 index 0000000000..9f119ebac0 Binary files /dev/null and b/graphics/berries/charti.png differ diff --git a/graphics/berries/chilan.png b/graphics/berries/chilan.png new file mode 100644 index 0000000000..8f717bb82c Binary files /dev/null and b/graphics/berries/chilan.png differ diff --git a/graphics/berries/chople.png b/graphics/berries/chople.png new file mode 100644 index 0000000000..0b4b28014f Binary files /dev/null and b/graphics/berries/chople.png differ diff --git a/graphics/berries/coba.png b/graphics/berries/coba.png new file mode 100644 index 0000000000..18283bd79d Binary files /dev/null and b/graphics/berries/coba.png differ diff --git a/graphics/berries/colbur.png b/graphics/berries/colbur.png new file mode 100644 index 0000000000..d422a826e5 Binary files /dev/null and b/graphics/berries/colbur.png differ diff --git a/graphics/berries/custap.png b/graphics/berries/custap.png new file mode 100644 index 0000000000..a5b89427c7 Binary files /dev/null and b/graphics/berries/custap.png differ diff --git a/graphics/berries/haban.png b/graphics/berries/haban.png new file mode 100644 index 0000000000..87b27fb263 Binary files /dev/null and b/graphics/berries/haban.png differ diff --git a/graphics/berries/jaboca.png b/graphics/berries/jaboca.png new file mode 100644 index 0000000000..42815ea4a9 Binary files /dev/null and b/graphics/berries/jaboca.png differ diff --git a/graphics/berries/kasib.png b/graphics/berries/kasib.png new file mode 100644 index 0000000000..f1b09244b0 Binary files /dev/null and b/graphics/berries/kasib.png differ diff --git a/graphics/berries/kebia.png b/graphics/berries/kebia.png new file mode 100644 index 0000000000..e0dfefd672 Binary files /dev/null and b/graphics/berries/kebia.png differ diff --git a/graphics/berries/kee.png b/graphics/berries/kee.png new file mode 100644 index 0000000000..1c83b65b19 Binary files /dev/null and b/graphics/berries/kee.png differ diff --git a/graphics/berries/maranga.png b/graphics/berries/maranga.png new file mode 100644 index 0000000000..b103f24108 Binary files /dev/null and b/graphics/berries/maranga.png differ diff --git a/graphics/berries/micle.png b/graphics/berries/micle.png new file mode 100644 index 0000000000..bbe6011b44 Binary files /dev/null and b/graphics/berries/micle.png differ diff --git a/graphics/berries/occa.png b/graphics/berries/occa.png new file mode 100644 index 0000000000..1ad829e5f1 Binary files /dev/null and b/graphics/berries/occa.png differ diff --git a/graphics/berries/passho.png b/graphics/berries/passho.png new file mode 100644 index 0000000000..c541475450 Binary files /dev/null and b/graphics/berries/passho.png differ diff --git a/graphics/berries/payapa.png b/graphics/berries/payapa.png new file mode 100644 index 0000000000..aff30a75cc Binary files /dev/null and b/graphics/berries/payapa.png differ diff --git a/graphics/berries/rindo.png b/graphics/berries/rindo.png new file mode 100644 index 0000000000..91e895d043 Binary files /dev/null and b/graphics/berries/rindo.png differ diff --git a/graphics/berries/roseli.png b/graphics/berries/roseli.png new file mode 100644 index 0000000000..4eb675a447 Binary files /dev/null and b/graphics/berries/roseli.png differ diff --git a/graphics/berries/rowap.png b/graphics/berries/rowap.png new file mode 100644 index 0000000000..bbeee3f3b4 Binary files /dev/null and b/graphics/berries/rowap.png differ diff --git a/graphics/berries/shuca.png b/graphics/berries/shuca.png new file mode 100644 index 0000000000..618f3abace Binary files /dev/null and b/graphics/berries/shuca.png differ diff --git a/graphics/berries/tanga.png b/graphics/berries/tanga.png new file mode 100644 index 0000000000..702da676f3 Binary files /dev/null and b/graphics/berries/tanga.png differ diff --git a/graphics/berries/wacan.png b/graphics/berries/wacan.png new file mode 100644 index 0000000000..5d88c95bd2 Binary files /dev/null and b/graphics/berries/wacan.png differ diff --git a/graphics/berries/yache.png b/graphics/berries/yache.png new file mode 100644 index 0000000000..3f39782770 Binary files /dev/null and b/graphics/berries/yache.png differ diff --git a/graphics/berry_crush/crusher.bin b/graphics/berry_crush/text_windows.bin similarity index 100% rename from graphics/berry_crush/crusher.bin rename to graphics/berry_crush/text_windows.bin diff --git a/graphics/unused/intro_birch_beauty.png b/graphics/birch_speech/unused_beauty.png similarity index 100% rename from graphics/unused/intro_birch_beauty.png rename to graphics/birch_speech/unused_beauty.png diff --git a/graphics/misc/cave_transition_black.pal b/graphics/cave_transition/black.pal similarity index 100% rename from graphics/misc/cave_transition_black.pal rename to graphics/cave_transition/black.pal diff --git a/graphics/misc/cave_transition_enter.pal b/graphics/cave_transition/enter.pal similarity index 100% rename from graphics/misc/cave_transition_enter.pal rename to graphics/cave_transition/enter.pal diff --git a/graphics/misc/cave_transition_exit.pal b/graphics/cave_transition/exit.pal similarity index 100% rename from graphics/misc/cave_transition_exit.pal rename to graphics/cave_transition/exit.pal diff --git a/graphics/misc/cave_transition_map.bin b/graphics/cave_transition/tilemap.bin similarity index 100% rename from graphics/misc/cave_transition_map.bin rename to graphics/cave_transition/tilemap.bin diff --git a/graphics/misc/cave_transition.png b/graphics/cave_transition/tiles.png similarity index 100% rename from graphics/misc/cave_transition.png rename to graphics/cave_transition/tiles.png diff --git a/graphics/misc/cave_transition_white.pal b/graphics/cave_transition/white.pal similarity index 100% rename from graphics/misc/cave_transition_white.pal rename to graphics/cave_transition/white.pal diff --git a/graphics/unused/old_contest_2.bin b/graphics/contest/audience.bin similarity index 100% rename from graphics/unused/old_contest_2.bin rename to graphics/contest/audience.bin diff --git a/graphics/unknown/unknown_C17980.bin b/graphics/contest/curtain.bin similarity index 100% rename from graphics/unknown/unknown_C17980.bin rename to graphics/contest/curtain.bin diff --git a/graphics/unknown/unknown_C17170.bin b/graphics/contest/interface.bin similarity index 100% rename from graphics/unknown/unknown_C17170.bin rename to graphics/contest/interface.bin diff --git a/graphics/contest/misc.png b/graphics/contest/interface.png similarity index 100% rename from graphics/contest/misc.png rename to graphics/contest/interface.png diff --git a/graphics/unused/old_contest_2.pal b/graphics/contest/interface_audience.pal similarity index 100% rename from graphics/unused/old_contest_2.pal rename to graphics/contest/interface_audience.pal diff --git a/graphics/unknown/unknown_C1751C.bin b/graphics/contest/japanese/audience.bin similarity index 100% rename from graphics/unknown/unknown_C1751C.bin rename to graphics/contest/japanese/audience.bin diff --git a/graphics/unused/old_contest_2_2.png b/graphics/contest/japanese/audience.png similarity index 100% rename from graphics/unused/old_contest_2_2.png rename to graphics/contest/japanese/audience.png diff --git a/graphics/unused/old_contest.bin b/graphics/contest/japanese/bg.bin similarity index 100% rename from graphics/unused/old_contest.bin rename to graphics/contest/japanese/bg.bin diff --git a/graphics/unused/old_contest_floor.png b/graphics/contest/japanese/floor.png similarity index 100% rename from graphics/unused/old_contest_floor.png rename to graphics/contest/japanese/floor.png diff --git a/graphics/unused/old_contest_frame_1.png b/graphics/contest/japanese/frame_1.png similarity index 100% rename from graphics/unused/old_contest_frame_1.png rename to graphics/contest/japanese/frame_1.png diff --git a/graphics/unused/old_contest_frame_2.png b/graphics/contest/japanese/frame_2.png similarity index 100% rename from graphics/unused/old_contest_frame_2.png rename to graphics/contest/japanese/frame_2.png diff --git a/graphics/unknown/unknown_C17410.bin b/graphics/contest/japanese/interface.bin similarity index 100% rename from graphics/unknown/unknown_C17410.bin rename to graphics/contest/japanese/interface.bin diff --git a/graphics/unused/old_contest_2_1.png b/graphics/contest/japanese/interface.png similarity index 100% rename from graphics/unused/old_contest_2_1.png rename to graphics/contest/japanese/interface.png diff --git a/graphics/unused/old_contest_classes.png b/graphics/contest/japanese/letters.png similarity index 100% rename from graphics/unused/old_contest_classes.png rename to graphics/contest/japanese/letters.png diff --git a/graphics/unused/old_contest_meter.png b/graphics/contest/japanese/meter.png similarity index 100% rename from graphics/unused/old_contest_meter.png rename to graphics/contest/japanese/meter.png diff --git a/graphics/unused/old_contest_numbers.png b/graphics/contest/japanese/numbers.png similarity index 100% rename from graphics/unused/old_contest_numbers.png rename to graphics/contest/japanese/numbers.png diff --git a/graphics/unused/old_contest.pal b/graphics/contest/japanese/palette.pal similarity index 100% rename from graphics/unused/old_contest.pal rename to graphics/contest/japanese/palette.pal diff --git a/graphics/unused/old_contest_symbols.png b/graphics/contest/japanese/symbols.png similarity index 100% rename from graphics/unused/old_contest_symbols.png rename to graphics/contest/japanese/symbols.png diff --git a/graphics/unknown/unknown_C19470.png b/graphics/contest/japanese/voltage.png similarity index 100% rename from graphics/unknown/unknown_C19470.png rename to graphics/contest/japanese/voltage.png diff --git a/graphics/unknown/unknown_C15BC0.bin b/graphics/contest/japanese/windows.bin similarity index 100% rename from graphics/unknown/unknown_C15BC0.bin rename to graphics/contest/japanese/windows.bin diff --git a/graphics/misc/decoration_putting_away_cursor.png b/graphics/decorations/put_away_cursor.png similarity index 100% rename from graphics/misc/decoration_putting_away_cursor.png rename to graphics/decorations/put_away_cursor.png diff --git a/graphics/misc/diploma_hoenn.pal b/graphics/diploma/hoenn.pal similarity index 100% rename from graphics/misc/diploma_hoenn.pal rename to graphics/diploma/hoenn.pal diff --git a/graphics/misc/diploma_national.pal b/graphics/diploma/national.pal similarity index 100% rename from graphics/misc/diploma_national.pal rename to graphics/diploma/national.pal diff --git a/graphics/misc/diploma_map.bin b/graphics/diploma/tilemap.bin similarity index 100% rename from graphics/misc/diploma_map.bin rename to graphics/diploma/tilemap.bin diff --git a/graphics/misc/diploma.png b/graphics/diploma/tiles.png similarity index 100% rename from graphics/misc/diploma.png rename to graphics/diploma/tiles.png diff --git a/graphics/door_anims/abandoned_ship.png b/graphics/door_anims/abandoned_ship.png index e46aca9ba9..0030246b4e 100644 Binary files a/graphics/door_anims/abandoned_ship.png and b/graphics/door_anims/abandoned_ship.png differ diff --git a/graphics/door_anims/abandoned_ship_room.png b/graphics/door_anims/abandoned_ship_room.png index a5284af7e1..006922f5b6 100644 Binary files a/graphics/door_anims/abandoned_ship_room.png and b/graphics/door_anims/abandoned_ship_room.png differ diff --git a/graphics/door_anims/battle_arena.png b/graphics/door_anims/battle_arena.png index ef66528156..ad3350a595 100644 Binary files a/graphics/door_anims/battle_arena.png and b/graphics/door_anims/battle_arena.png differ diff --git a/graphics/door_anims/battle_arena_lobby.png b/graphics/door_anims/battle_arena_lobby.png index b9a2134e3f..78c344070c 100644 Binary files a/graphics/door_anims/battle_arena_lobby.png and b/graphics/door_anims/battle_arena_lobby.png differ diff --git a/graphics/door_anims/battle_dome.png b/graphics/door_anims/battle_dome.png index 729385b3fc..4bc9fab94b 100644 Binary files a/graphics/door_anims/battle_dome.png and b/graphics/door_anims/battle_dome.png differ diff --git a/graphics/door_anims/battle_dome_corridor.png b/graphics/door_anims/battle_dome_corridor.png index 198ad9acca..78e77869ea 100644 Binary files a/graphics/door_anims/battle_dome_corridor.png and b/graphics/door_anims/battle_dome_corridor.png differ diff --git a/graphics/door_anims/battle_dome_lobby.png b/graphics/door_anims/battle_dome_lobby.png index bd4e4e895b..631cdecced 100644 Binary files a/graphics/door_anims/battle_dome_lobby.png and b/graphics/door_anims/battle_dome_lobby.png differ diff --git a/graphics/door_anims/battle_factory.png b/graphics/door_anims/battle_factory.png index 7ed6c876b8..1d74d8b580 100644 Binary files a/graphics/door_anims/battle_factory.png and b/graphics/door_anims/battle_factory.png differ diff --git a/graphics/door_anims/battle_frontier.png b/graphics/door_anims/battle_frontier.png index bf758c03ed..c3dcd43245 100644 Binary files a/graphics/door_anims/battle_frontier.png and b/graphics/door_anims/battle_frontier.png differ diff --git a/graphics/door_anims/battle_frontier_sliding.png b/graphics/door_anims/battle_frontier_sliding.png index a43cf519dd..1359f4725b 100644 Binary files a/graphics/door_anims/battle_frontier_sliding.png and b/graphics/door_anims/battle_frontier_sliding.png differ diff --git a/graphics/door_anims/battle_palace_lobby.png b/graphics/door_anims/battle_palace_lobby.png index f106ae960d..a4aa998d46 100644 Binary files a/graphics/door_anims/battle_palace_lobby.png and b/graphics/door_anims/battle_palace_lobby.png differ diff --git a/graphics/door_anims/battle_tent.png b/graphics/door_anims/battle_tent.png index a0a88e4c5f..b278e33109 100644 Binary files a/graphics/door_anims/battle_tent.png and b/graphics/door_anims/battle_tent.png differ diff --git a/graphics/door_anims/battle_tent_interior.png b/graphics/door_anims/battle_tent_interior.png index f8edb5a1a3..036ec9d5aa 100644 Binary files a/graphics/door_anims/battle_tent_interior.png and b/graphics/door_anims/battle_tent_interior.png differ diff --git a/graphics/door_anims/battle_tower.png b/graphics/door_anims/battle_tower.png index 3b9fe547c1..3ec2b59bb6 100644 Binary files a/graphics/door_anims/battle_tower.png and b/graphics/door_anims/battle_tower.png differ diff --git a/graphics/door_anims/battle_tower_corridor.png b/graphics/door_anims/battle_tower_corridor.png deleted file mode 100644 index 06ad24c9fc..0000000000 Binary files a/graphics/door_anims/battle_tower_corridor.png and /dev/null differ diff --git a/graphics/door_anims/battle_tower_elevator.png b/graphics/door_anims/battle_tower_elevator.png index 1d95b5b6aa..fed07182e2 100644 Binary files a/graphics/door_anims/battle_tower_elevator.png and b/graphics/door_anims/battle_tower_elevator.png differ diff --git a/graphics/door_anims/battle_tower_multi_corridor.png b/graphics/door_anims/battle_tower_multi_corridor.png index 145dea7a50..cb32fbc70b 100644 Binary files a/graphics/door_anims/battle_tower_multi_corridor.png and b/graphics/door_anims/battle_tower_multi_corridor.png differ diff --git a/graphics/door_anims/battle_tower_old.png b/graphics/door_anims/battle_tower_old.png index 645c006138..326763f565 100644 Binary files a/graphics/door_anims/battle_tower_old.png and b/graphics/door_anims/battle_tower_old.png differ diff --git a/graphics/door_anims/birchs_lab.png b/graphics/door_anims/birchs_lab.png index 69bd93f890..0df0383c92 100644 Binary files a/graphics/door_anims/birchs_lab.png and b/graphics/door_anims/birchs_lab.png differ diff --git a/graphics/door_anims/cable_club.png b/graphics/door_anims/cable_club.png index a1dfd7bc27..3b45cb1010 100644 Binary files a/graphics/door_anims/cable_club.png and b/graphics/door_anims/cable_club.png differ diff --git a/graphics/door_anims/contest.png b/graphics/door_anims/contest.png index dc466be116..8719b23ad4 100644 Binary files a/graphics/door_anims/contest.png and b/graphics/door_anims/contest.png differ diff --git a/graphics/door_anims/cycling_road.png b/graphics/door_anims/cycling_road.png index 0c22c91823..cb1fb30343 100644 Binary files a/graphics/door_anims/cycling_road.png and b/graphics/door_anims/cycling_road.png differ diff --git a/graphics/door_anims/fallarbor_light_roof.png b/graphics/door_anims/fallarbor_light_roof.png index 4c81ba10e7..a4c959f883 100644 Binary files a/graphics/door_anims/fallarbor_light_roof.png and b/graphics/door_anims/fallarbor_light_roof.png differ diff --git a/graphics/door_anims/general.png b/graphics/door_anims/general.png index fdab84132b..7c9b7d64dc 100644 Binary files a/graphics/door_anims/general.png and b/graphics/door_anims/general.png differ diff --git a/graphics/door_anims/gym.png b/graphics/door_anims/gym.png index fce0007514..065181a9d9 100644 Binary files a/graphics/door_anims/gym.png and b/graphics/door_anims/gym.png differ diff --git a/graphics/door_anims/lilycove.png b/graphics/door_anims/lilycove.png index ad5e43cc35..17a120a325 100644 Binary files a/graphics/door_anims/lilycove.png and b/graphics/door_anims/lilycove.png differ diff --git a/graphics/door_anims/lilycove_dept_store.png b/graphics/door_anims/lilycove_dept_store.png index 4f036c51db..7c64ab6da8 100644 Binary files a/graphics/door_anims/lilycove_dept_store.png and b/graphics/door_anims/lilycove_dept_store.png differ diff --git a/graphics/door_anims/lilycove_wooden.png b/graphics/door_anims/lilycove_wooden.png index 99b94e72db..7c3680c289 100644 Binary files a/graphics/door_anims/lilycove_wooden.png and b/graphics/door_anims/lilycove_wooden.png differ diff --git a/graphics/door_anims/mauville.png b/graphics/door_anims/mauville.png index 63167408ad..fec5f344fb 100644 Binary files a/graphics/door_anims/mauville.png and b/graphics/door_anims/mauville.png differ diff --git a/graphics/door_anims/mossdeep_space_center.png b/graphics/door_anims/mossdeep_space_center.png index 4f2ccb6ffd..c778b17183 100644 Binary files a/graphics/door_anims/mossdeep_space_center.png and b/graphics/door_anims/mossdeep_space_center.png differ diff --git a/graphics/door_anims/pacifidlog.png b/graphics/door_anims/pacifidlog.png index 3e05288255..841c31658d 100644 Binary files a/graphics/door_anims/pacifidlog.png and b/graphics/door_anims/pacifidlog.png differ diff --git a/graphics/door_anims/petalburg_gym.png b/graphics/door_anims/petalburg_gym.png new file mode 100644 index 0000000000..42a1e1dfde Binary files /dev/null and b/graphics/door_anims/petalburg_gym.png differ diff --git a/graphics/door_anims/poke_center.png b/graphics/door_anims/poke_center.png index 8658107149..8bf5cb146d 100644 Binary files a/graphics/door_anims/poke_center.png and b/graphics/door_anims/poke_center.png differ diff --git a/graphics/door_anims/pokemon_league.png b/graphics/door_anims/pokemon_league.png index cac740f561..34419ac0ad 100644 Binary files a/graphics/door_anims/pokemon_league.png and b/graphics/door_anims/pokemon_league.png differ diff --git a/graphics/door_anims/rustboro_gray.png b/graphics/door_anims/rustboro_gray.png index 2cf62b6dac..99211c11a9 100644 Binary files a/graphics/door_anims/rustboro_gray.png and b/graphics/door_anims/rustboro_gray.png differ diff --git a/graphics/door_anims/rustboro_tan.png b/graphics/door_anims/rustboro_tan.png index d8a1b185e7..7a0ba149c6 100644 Binary files a/graphics/door_anims/rustboro_tan.png and b/graphics/door_anims/rustboro_tan.png differ diff --git a/graphics/door_anims/safari_zone.png b/graphics/door_anims/safari_zone.png index 89807f843f..eae6a0e3e5 100644 Binary files a/graphics/door_anims/safari_zone.png and b/graphics/door_anims/safari_zone.png differ diff --git a/graphics/door_anims/sootopolis.png b/graphics/door_anims/sootopolis.png index faac1f59db..3b3833daaa 100644 Binary files a/graphics/door_anims/sootopolis.png and b/graphics/door_anims/sootopolis.png differ diff --git a/graphics/door_anims/sootopolis_peaked_roof.png b/graphics/door_anims/sootopolis_peaked_roof.png index b4ccfb5f99..7d8ea1f33e 100644 Binary files a/graphics/door_anims/sootopolis_peaked_roof.png and b/graphics/door_anims/sootopolis_peaked_roof.png differ diff --git a/graphics/door_anims/trainer_hill_lobby_elevator.png b/graphics/door_anims/trainer_hill_lobby_elevator.png index aeb7eaf260..bdd1c3b271 100644 Binary files a/graphics/door_anims/trainer_hill_lobby_elevator.png and b/graphics/door_anims/trainer_hill_lobby_elevator.png differ diff --git a/graphics/door_anims/unknown.png b/graphics/door_anims/unused_battle_frontier.png similarity index 100% rename from graphics/door_anims/unknown.png rename to graphics/door_anims/unused_battle_frontier.png diff --git a/graphics/misc/deoxys1.pal b/graphics/field_effects/palettes/deoxys_rock_1.pal similarity index 100% rename from graphics/misc/deoxys1.pal rename to graphics/field_effects/palettes/deoxys_rock_1.pal diff --git a/graphics/misc/deoxys10.pal b/graphics/field_effects/palettes/deoxys_rock_10.pal similarity index 100% rename from graphics/misc/deoxys10.pal rename to graphics/field_effects/palettes/deoxys_rock_10.pal diff --git a/graphics/misc/deoxys11.pal b/graphics/field_effects/palettes/deoxys_rock_11.pal similarity index 100% rename from graphics/misc/deoxys11.pal rename to graphics/field_effects/palettes/deoxys_rock_11.pal diff --git a/graphics/misc/deoxys2.pal b/graphics/field_effects/palettes/deoxys_rock_2.pal similarity index 100% rename from graphics/misc/deoxys2.pal rename to graphics/field_effects/palettes/deoxys_rock_2.pal diff --git a/graphics/misc/deoxys3.pal b/graphics/field_effects/palettes/deoxys_rock_3.pal similarity index 100% rename from graphics/misc/deoxys3.pal rename to graphics/field_effects/palettes/deoxys_rock_3.pal diff --git a/graphics/misc/deoxys4.pal b/graphics/field_effects/palettes/deoxys_rock_4.pal similarity index 100% rename from graphics/misc/deoxys4.pal rename to graphics/field_effects/palettes/deoxys_rock_4.pal diff --git a/graphics/misc/deoxys5.pal b/graphics/field_effects/palettes/deoxys_rock_5.pal similarity index 100% rename from graphics/misc/deoxys5.pal rename to graphics/field_effects/palettes/deoxys_rock_5.pal diff --git a/graphics/misc/deoxys6.pal b/graphics/field_effects/palettes/deoxys_rock_6.pal similarity index 100% rename from graphics/misc/deoxys6.pal rename to graphics/field_effects/palettes/deoxys_rock_6.pal diff --git a/graphics/misc/deoxys7.pal b/graphics/field_effects/palettes/deoxys_rock_7.pal similarity index 100% rename from graphics/misc/deoxys7.pal rename to graphics/field_effects/palettes/deoxys_rock_7.pal diff --git a/graphics/misc/deoxys8.pal b/graphics/field_effects/palettes/deoxys_rock_8.pal similarity index 100% rename from graphics/misc/deoxys8.pal rename to graphics/field_effects/palettes/deoxys_rock_8.pal diff --git a/graphics/misc/deoxys9.pal b/graphics/field_effects/palettes/deoxys_rock_9.pal similarity index 100% rename from graphics/misc/deoxys9.pal rename to graphics/field_effects/palettes/deoxys_rock_9.pal diff --git a/graphics/field_effects/pics/deoxys_rock_fragment_bottom_left.png b/graphics/field_effects/pics/deoxys_rock_fragment_bottom_left.png new file mode 100644 index 0000000000..bc4f27a40d Binary files /dev/null and b/graphics/field_effects/pics/deoxys_rock_fragment_bottom_left.png differ diff --git a/graphics/field_effects/pics/deoxys_rock_fragment_bottom_right.png b/graphics/field_effects/pics/deoxys_rock_fragment_bottom_right.png new file mode 100644 index 0000000000..48cd43d973 Binary files /dev/null and b/graphics/field_effects/pics/deoxys_rock_fragment_bottom_right.png differ diff --git a/graphics/field_effects/pics/deoxys_rock_fragment_top_left.png b/graphics/field_effects/pics/deoxys_rock_fragment_top_left.png new file mode 100644 index 0000000000..f0eb9c0cb9 Binary files /dev/null and b/graphics/field_effects/pics/deoxys_rock_fragment_top_left.png differ diff --git a/graphics/field_effects/pics/deoxys_rock_fragment_top_right.png b/graphics/field_effects/pics/deoxys_rock_fragment_top_right.png new file mode 100644 index 0000000000..1fac486c90 Binary files /dev/null and b/graphics/field_effects/pics/deoxys_rock_fragment_top_right.png differ diff --git a/graphics/field_effects/pics/emotion_exclamation.png b/graphics/field_effects/pics/emotion_exclamation.png new file mode 100644 index 0000000000..798b830923 Binary files /dev/null and b/graphics/field_effects/pics/emotion_exclamation.png differ diff --git a/graphics/field_effects/pics/emotion_heart.png b/graphics/field_effects/pics/emotion_heart.png new file mode 100644 index 0000000000..783a1e3bd6 Binary files /dev/null and b/graphics/field_effects/pics/emotion_heart.png differ diff --git a/graphics/field_effects/pics/emotion_question.png b/graphics/field_effects/pics/emotion_question.png new file mode 100644 index 0000000000..4907f14b7f Binary files /dev/null and b/graphics/field_effects/pics/emotion_question.png differ diff --git a/graphics/misc/field_move_streaks_map.bin b/graphics/field_effects/pics/field_move_streaks.bin similarity index 100% rename from graphics/misc/field_move_streaks_map.bin rename to graphics/field_effects/pics/field_move_streaks.bin diff --git a/graphics/misc/field_move_streaks.png b/graphics/field_effects/pics/field_move_streaks.png similarity index 100% rename from graphics/misc/field_move_streaks.png rename to graphics/field_effects/pics/field_move_streaks.png diff --git a/graphics/misc/darkness_field_move_streaks_map.bin b/graphics/field_effects/pics/field_move_streaks_indoors.bin similarity index 100% rename from graphics/misc/darkness_field_move_streaks_map.bin rename to graphics/field_effects/pics/field_move_streaks_indoors.bin diff --git a/graphics/misc/darkness_field_move_streaks.png b/graphics/field_effects/pics/field_move_streaks_indoors.png similarity index 100% rename from graphics/misc/darkness_field_move_streaks.png rename to graphics/field_effects/pics/field_move_streaks_indoors.png diff --git a/graphics/field_effects/pics/hof_monitor_big.png b/graphics/field_effects/pics/hof_monitor_big.png new file mode 100644 index 0000000000..c70046ad71 Binary files /dev/null and b/graphics/field_effects/pics/hof_monitor_big.png differ diff --git a/graphics/field_effects/pics/hof_monitor_small.png b/graphics/field_effects/pics/hof_monitor_small.png new file mode 100644 index 0000000000..368bbfce42 Binary files /dev/null and b/graphics/field_effects/pics/hof_monitor_small.png differ diff --git a/graphics/field_effects/pics/unknown_16.png b/graphics/field_effects/pics/jump_long_grass.png similarity index 100% rename from graphics/field_effects/pics/unknown_16.png rename to graphics/field_effects/pics/jump_long_grass.png diff --git a/graphics/field_effects/pics/pokeball_glow.png b/graphics/field_effects/pics/pokeball_glow.png new file mode 100644 index 0000000000..6e074afc3f Binary files /dev/null and b/graphics/field_effects/pics/pokeball_glow.png differ diff --git a/graphics/misc/pokecenter_monitor/0.png b/graphics/field_effects/pics/pokecenter_monitor/0.png similarity index 100% rename from graphics/misc/pokecenter_monitor/0.png rename to graphics/field_effects/pics/pokecenter_monitor/0.png diff --git a/graphics/misc/pokecenter_monitor/1.png b/graphics/field_effects/pics/pokecenter_monitor/1.png similarity index 100% rename from graphics/misc/pokecenter_monitor/1.png rename to graphics/field_effects/pics/pokecenter_monitor/1.png diff --git a/graphics/misc/spotlight.png b/graphics/field_effects/pics/spotlight.png similarity index 100% rename from graphics/misc/spotlight.png rename to graphics/field_effects/pics/spotlight.png diff --git a/graphics/fonts/font6_braille.png b/graphics/fonts/braille.png similarity index 100% rename from graphics/fonts/font6_braille.png rename to graphics/fonts/braille.png diff --git a/graphics/fonts/down_arrow_RS.png b/graphics/fonts/down_arrow_alt.png similarity index 100% rename from graphics/fonts/down_arrow_RS.png rename to graphics/fonts/down_arrow_alt.png diff --git a/graphics/fonts/font0_latin_widths.inc b/graphics/fonts/font0_latin_widths.inc deleted file mode 100644 index 2392e97179..0000000000 --- a/graphics/fonts/font0_latin_widths.inc +++ /dev/null @@ -1,32 +0,0 @@ - .byte 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5 - .byte 5, 5, 5, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 4, 3 - .byte 4, 4, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 8, 7, 8, 3 - .byte 3, 3, 3, 3, 8, 8, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 5, 5, 5, 8, 8, 8, 8, 8, 8, 8, 4, 7, 5, 5, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 4 - .byte 3, 3, 3, 3, 3, 3, 3, 5, 3, 8, 8, 8, 8, 1, 2, 3 - .byte 4, 5, 6, 7, 5, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5 - .byte 5, 5, 5, 5, 5, 5, 5, 8, 5, 8, 5, 5, 5, 5, 5, 5 - .byte 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5 - .byte 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5 - .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8 - .byte 7, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3 diff --git a/graphics/fonts/font1_latin_widths.inc b/graphics/fonts/font1_latin_widths.inc deleted file mode 100644 index 5d62068cd5..0000000000 --- a/graphics/fonts/font1_latin_widths.inc +++ /dev/null @@ -1,32 +0,0 @@ - .byte 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6 - .byte 8, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 3 - .byte 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 9, 7, 6, 3 - .byte 3, 3, 3, 3, 10, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 6, 6, 4, 8, 8, 8, 7, 8, 8, 4, 6, 6, 4, 4, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, 3, 6 - .byte 3, 3, 3, 3, 3, 3, 3, 6, 3, 7, 7, 7, 7, 1, 2, 3 - .byte 4, 5, 6, 7, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 3, 6, 3 - .byte 6, 6, 6, 3, 3, 6, 6, 6, 3, 7, 6, 6, 6, 6, 6, 6 - .byte 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 - .byte 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 6 - .byte 4, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 8 - .byte 3, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 10, 10, 10, 10, 8, 10, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3 diff --git a/graphics/fonts/font2_japanese_widths.inc b/graphics/fonts/font2_japanese_widths.inc deleted file mode 100644 index 22cad52817..0000000000 --- a/graphics/fonts/font2_japanese_widths.inc +++ /dev/null @@ -1,32 +0,0 @@ - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9 - .byte 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9 - .byte 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 9, 10, 10, 10 - .byte 8, 10, 10, 10, 10, 8, 8, 8, 10, 10, 8, 6, 6, 6, 6, 6 - .byte 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 - .byte 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 2, 4, 6 - .byte 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 - .byte 5, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 diff --git a/graphics/fonts/font2_latin_widths.inc b/graphics/fonts/font2_latin_widths.inc deleted file mode 100644 index 79bf539bea..0000000000 --- a/graphics/fonts/font2_latin_widths.inc +++ /dev/null @@ -1,32 +0,0 @@ - .byte 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6 - .byte 8, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 3 - .byte 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 9, 8, 8, 3 - .byte 3, 3, 3, 3, 10, 8, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 6, 6, 6, 8, 8, 8, 8, 8, 8, 4, 6, 8, 5, 5, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, 3, 6 - .byte 3, 3, 3, 3, 3, 3, 3, 6, 3, 12, 12, 12, 12, 1, 2, 3 - .byte 4, 5, 6, 7, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 5 - .byte 6, 6, 6, 3, 3, 6, 6, 8, 5, 9, 6, 6, 6, 6, 6, 6 - .byte 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 - .byte 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 4, 6, 5 - .byte 5, 6, 5, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 6, 6, 8 - .byte 5, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 12, 12, 12, 12, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3 diff --git a/graphics/fonts/font7_latin_widths.inc b/graphics/fonts/font7_latin_widths.inc deleted file mode 100644 index b82b115403..0000000000 --- a/graphics/fonts/font7_latin_widths.inc +++ /dev/null @@ -1,32 +0,0 @@ - .byte 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5 - .byte 8, 5, 5, 5, 5, 6, 5, 5, 3, 5, 5, 5, 5, 5, 4, 3 - .byte 4, 4, 5, 5, 5, 8, 5, 5, 5, 5, 5, 6, 9, 6, 6, 3 - .byte 3, 3, 3, 3, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 5, 5, 4, 8, 8, 8, 7, 8, 8, 4, 4, 6, 4, 4, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 4 - .byte 3, 3, 3, 3, 3, 3, 3, 5, 3, 7, 7, 7, 7, 1, 2, 3 - .byte 4, 5, 6, 7, 5, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 3, 5, 3 - .byte 5, 5, 5, 3, 3, 5, 5, 6, 3, 6, 6, 5, 5, 5, 5, 5 - .byte 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 - .byte 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5 - .byte 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8 - .byte 3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3 diff --git a/graphics/fonts/font8_latin_widths.inc b/graphics/fonts/font8_latin_widths.inc deleted file mode 100644 index 2e2a8d7464..0000000000 --- a/graphics/fonts/font8_latin_widths.inc +++ /dev/null @@ -1,32 +0,0 @@ - .byte 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5 - .byte 5, 5, 5, 5, 5, 5, 5, 5, 3, 4, 5, 5, 5, 5, 4, 3 - .byte 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 5, 6, 3 - .byte 3, 3, 3, 3, 8, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 5, 5, 3, 8, 8, 8, 8, 8, 8, 8, 4, 5, 4, 4, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 4 - .byte 3, 3, 3, 3, 3, 3, 3, 5, 3, 8, 8, 8, 8, 1, 2, 3 - .byte 4, 5, 6, 7, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 3, 5, 5 - .byte 5, 5, 5, 3, 3, 5, 5, 5, 3, 5, 5, 5, 5, 5, 5, 5 - .byte 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5 - .byte 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 5 - .byte 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7 - .byte 3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - .byte 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3 diff --git a/graphics/fonts/font9_japanese.png b/graphics/fonts/japanese_bold.png similarity index 100% rename from graphics/fonts/font9_japanese.png rename to graphics/fonts/japanese_bold.png diff --git a/graphics/fonts/unused_japanese_frlg_female_font.png b/graphics/fonts/japanese_frlg_female_font.png similarity index 100% rename from graphics/fonts/unused_japanese_frlg_female_font.png rename to graphics/fonts/japanese_frlg_female_font.png diff --git a/graphics/fonts/unused_japanese_frlg_male_font.png b/graphics/fonts/japanese_frlg_male_font.png similarity index 100% rename from graphics/fonts/unused_japanese_frlg_male_font.png rename to graphics/fonts/japanese_frlg_male_font.png diff --git a/graphics/fonts/font1_japanese.png b/graphics/fonts/japanese_normal.png similarity index 100% rename from graphics/fonts/font1_japanese.png rename to graphics/fonts/japanese_normal.png diff --git a/graphics/fonts/font2_japanese.png b/graphics/fonts/japanese_short.png similarity index 100% rename from graphics/fonts/font2_japanese.png rename to graphics/fonts/japanese_short.png diff --git a/graphics/fonts/font0_japanese.png b/graphics/fonts/japanese_small.png similarity index 100% rename from graphics/fonts/font0_japanese.png rename to graphics/fonts/japanese_small.png diff --git a/graphics/fonts/font7_latin.png b/graphics/fonts/latin_narrow.png similarity index 100% rename from graphics/fonts/font7_latin.png rename to graphics/fonts/latin_narrow.png diff --git a/graphics/fonts/font1_latin.png b/graphics/fonts/latin_normal.png similarity index 100% rename from graphics/fonts/font1_latin.png rename to graphics/fonts/latin_normal.png diff --git a/graphics/fonts/font2_latin.png b/graphics/fonts/latin_short.png similarity index 100% rename from graphics/fonts/font2_latin.png rename to graphics/fonts/latin_short.png diff --git a/graphics/fonts/font0_latin.png b/graphics/fonts/latin_small.png similarity index 100% rename from graphics/fonts/font0_latin.png rename to graphics/fonts/latin_small.png diff --git a/graphics/fonts/font8_latin.png b/graphics/fonts/latin_small_narrow.png similarity index 100% rename from graphics/fonts/font8_latin.png rename to graphics/fonts/latin_small_narrow.png diff --git a/graphics/fonts/unused_japanese_frlg_female_font_widths.inc b/graphics/fonts/unused_japanese_frlg_female_font_widths.inc deleted file mode 100644 index 56bdecb280..0000000000 --- a/graphics/fonts/unused_japanese_frlg_female_font_widths.inc +++ /dev/null @@ -1,32 +0,0 @@ - .byte 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9 - .byte 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9 - .byte 9, 9, 9, 9, 9, 9, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 9, 10, 10, 10 - .byte 8, 10, 10, 10, 10, 8, 8, 8, 10, 10, 8, 6, 6, 6, 6, 6 - .byte 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 - .byte 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 2, 4, 6 - .byte 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 - .byte 5, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 diff --git a/graphics/fonts/unused_japanese_frlg_male_font_widths.inc b/graphics/fonts/unused_japanese_frlg_male_font_widths.inc deleted file mode 100644 index ad18d28849..0000000000 --- a/graphics/fonts/unused_japanese_frlg_male_font_widths.inc +++ /dev/null @@ -1,32 +0,0 @@ - .byte 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9 - .byte 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 9, 10, 10, 10 - .byte 8, 10, 10, 10, 10, 8, 8, 8, 10, 10, 8, 6, 6, 6, 6, 6 - .byte 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 - .byte 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 2, 4, 6 - .byte 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 - .byte 5, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 - .byte 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 diff --git a/graphics/frontier_pass/unused.bin b/graphics/frontier_pass/card_ball_filled.bin similarity index 100% rename from graphics/frontier_pass/unused.bin rename to graphics/frontier_pass/card_ball_filled.bin diff --git a/graphics/interface/855C624.bin b/graphics/interface/855C624.bin deleted file mode 100644 index 6f48b39f69..0000000000 Binary files a/graphics/interface/855C624.bin and /dev/null differ diff --git a/graphics/interface/860F0B0.pal b/graphics/interface/hof_pc_topbar.pal similarity index 100% rename from graphics/interface/860F0B0.pal rename to graphics/interface/hof_pc_topbar.pal diff --git a/graphics/misc/main_menu_bg.pal b/graphics/interface/main_menu_bg.pal similarity index 100% rename from graphics/misc/main_menu_bg.pal rename to graphics/interface/main_menu_bg.pal diff --git a/graphics/misc/main_menu_text.pal b/graphics/interface/main_menu_text.pal similarity index 100% rename from graphics/misc/main_menu_text.pal rename to graphics/interface/main_menu_text.pal diff --git a/graphics/interface_fr/menu.png b/graphics/interface/menu_info.png similarity index 100% rename from graphics/interface_fr/menu.png rename to graphics/interface/menu_info.png diff --git a/graphics/interface_fr/menu1.pal b/graphics/interface/menu_info1.pal similarity index 100% rename from graphics/interface_fr/menu1.pal rename to graphics/interface/menu_info1.pal diff --git a/graphics/interface_fr/menu2.pal b/graphics/interface/menu_info2.pal similarity index 100% rename from graphics/interface_fr/menu2.pal rename to graphics/interface/menu_info2.pal diff --git a/graphics/interface_fr/menu3.pal b/graphics/interface/menu_info3.pal similarity index 100% rename from graphics/interface_fr/menu3.pal rename to graphics/interface/menu_info3.pal diff --git a/graphics/misc/mon_markings.png b/graphics/interface/mon_markings.png similarity index 100% rename from graphics/misc/mon_markings.png rename to graphics/interface/mon_markings.png diff --git a/graphics/misc/mon_markings_menu.png b/graphics/interface/mon_markings_menu.png similarity index 100% rename from graphics/misc/mon_markings_menu.png rename to graphics/interface/mon_markings_menu.png diff --git a/graphics/interface/unk_textbox_border.png b/graphics/interface/mystery_gift_textbox_border.png similarity index 100% rename from graphics/interface/unk_textbox_border.png rename to graphics/interface/mystery_gift_textbox_border.png diff --git a/graphics/misc/option_menu_equals_sign.png b/graphics/interface/option_menu_equals_sign.png similarity index 100% rename from graphics/misc/option_menu_equals_sign.png rename to graphics/interface/option_menu_equals_sign.png diff --git a/graphics/misc/option_menu_text.pal b/graphics/interface/option_menu_text.pal similarity index 100% rename from graphics/misc/option_menu_text.pal rename to graphics/interface/option_menu_text.pal diff --git a/graphics/interface/split_icons.png b/graphics/interface/split_icons.png new file mode 100644 index 0000000000..1c7d63c9eb Binary files /dev/null and b/graphics/interface/split_icons.png differ diff --git a/graphics/interface/860F074.pal b/graphics/interface/std_menu.pal similarity index 100% rename from graphics/interface/860F074.pal rename to graphics/interface/std_menu.pal diff --git a/graphics/interface/bag_swap.png b/graphics/interface/swap_line.png similarity index 100% rename from graphics/interface/bag_swap.png rename to graphics/interface/swap_line.png diff --git a/graphics/items/icon_palettes/ability_capsule.pal b/graphics/items/icon_palettes/ability_capsule.pal new file mode 100755 index 0000000000..08bc90959b --- /dev/null +++ b/graphics/items/icon_palettes/ability_capsule.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +107 165 230 +123 123 156 +156 156 189 +206 206 255 +189 255 255 +132 214 255 +189 189 239 +222 222 255 +90 90 90 +222 132 255 +206 173 247 +140 140 247 +173 107 255 +230 206 255 diff --git a/graphics/items/icon_palettes/ability_patch.pal b/graphics/items/icon_palettes/ability_patch.pal new file mode 100644 index 0000000000..425bc27707 --- /dev/null +++ b/graphics/items/icon_palettes/ability_patch.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +144 0 152 +49 49 49 +88 68 16 +100 112 104 +80 160 176 +131 183 183 +184 186 180 +192 192 120 +115 211 211 +139 226 255 +240 218 64 +222 224 217 +168 242 248 +246 242 246 +240 252 176 +255 255 255 diff --git a/graphics/items/icon_palettes/abomasite.pal b/graphics/items/icon_palettes/abomasite.pal new file mode 100644 index 0000000000..173d17297b --- /dev/null +++ b/graphics/items/icon_palettes/abomasite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +136 160 232 +248 248 248 +48 136 120 +144 208 184 +200 216 208 +80 160 144 +144 208 176 +192 208 240 +104 168 192 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/absolite.pal b/graphics/items/icon_palettes/absolite.pal new file mode 100644 index 0000000000..5deff2aca3 --- /dev/null +++ b/graphics/items/icon_palettes/absolite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +88 104 160 +152 176 232 +248 248 248 +144 160 208 +200 216 240 +64 72 136 +128 144 192 +192 216 240 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/absorb_bulb.pal b/graphics/items/icon_palettes/absorb_bulb.pal new file mode 100755 index 0000000000..8551b917b1 --- /dev/null +++ b/graphics/items/icon_palettes/absorb_bulb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +222 222 115 +189 140 66 +156 99 41 +181 173 115 +132 74 33 +214 173 115 +90 66 41 +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/items/icon_palettes/acro_bike.pal b/graphics/items/icon_palettes/acro_bike.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/adamant_orb.pal b/graphics/items/icon_palettes/adamant_orb.pal new file mode 100644 index 0000000000..d5cb6a7ceb --- /dev/null +++ b/graphics/items/icon_palettes/adamant_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +93 93 93 +39 39 39 +247 247 247 +177 203 247 +220 247 247 +194 229 247 +159 194 247 +151 177 220 +117 159 212 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/adrenaline_orb.pal b/graphics/items/icon_palettes/adrenaline_orb.pal new file mode 100644 index 0000000000..f2b1e719e0 --- /dev/null +++ b/graphics/items/icon_palettes/adrenaline_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +49 49 49 +41 65 115 +90 172 222 +57 90 148 +106 197 238 +123 230 246 +82 148 189 +82 115 164 +57 106 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/aerodactylite.pal b/graphics/items/icon_palettes/aerodactylite.pal new file mode 100644 index 0000000000..a0f921cfb3 --- /dev/null +++ b/graphics/items/icon_palettes/aerodactylite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +176 160 208 +64 64 64 +144 64 216 +208 208 248 +88 64 128 +160 80 232 +208 184 232 +248 248 248 +120 112 136 +160 160 168 +168 128 240 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/aggronite.pal b/graphics/items/icon_palettes/aggronite.pal new file mode 100644 index 0000000000..1bba14f16d --- /dev/null +++ b/graphics/items/icon_palettes/aggronite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +160 160 160 +120 120 120 +88 88 88 +208 208 248 +208 208 208 +200 200 200 +152 152 168 +248 248 248 +152 152 152 +192 192 192 +232 232 232 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/aguav_berry.pal b/graphics/items/icon_palettes/aguav_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/air_balloon.pal b/graphics/items/icon_palettes/air_balloon.pal new file mode 100755 index 0000000000..3fb7948b9c --- /dev/null +++ b/graphics/items/icon_palettes/air_balloon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +66 66 66 +247 123 123 +239 74 74 +247 173 173 +49 49 49 +165 49 49 +206 206 156 +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/items/icon_palettes/alakazite.pal b/graphics/items/icon_palettes/alakazite.pal new file mode 100644 index 0000000000..0d215cb94e --- /dev/null +++ b/graphics/items/icon_palettes/alakazite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +240 184 88 +176 120 152 +144 88 168 +192 208 216 +216 208 200 +208 160 200 +168 152 192 +248 248 248 +232 176 40 +208 192 152 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/aloraichium_z.pal b/graphics/items/icon_palettes/aloraichium_z.pal new file mode 100644 index 0000000000..293e0c0955 --- /dev/null +++ b/graphics/items/icon_palettes/aloraichium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +255 189 65 +205 131 65 +255 255 222 +255 222 106 +255 255 197 +180 131 49 +139 90 49 +246 172 65 +180 156 74 +180 172 156 +164 90 65 +180 172 139 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/altarianite.pal b/graphics/items/icon_palettes/altarianite.pal new file mode 100644 index 0000000000..ecb5f59359 --- /dev/null +++ b/graphics/items/icon_palettes/altarianite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +232 168 216 +136 184 240 +104 208 248 +144 216 248 +184 224 240 +248 248 248 +224 224 224 +224 192 216 +224 184 216 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/amaze_mulch.pal b/graphics/items/icon_palettes/amaze_mulch.pal new file mode 100644 index 0000000000..72ef8b7a9e --- /dev/null +++ b/graphics/items/icon_palettes/amaze_mulch.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 56 48 +248 144 104 +240 232 168 +240 240 240 +216 216 216 +184 184 184 +144 136 128 +48 48 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/items/icon_palettes/ampharosite.pal b/graphics/items/icon_palettes/ampharosite.pal new file mode 100644 index 0000000000..d99ebd6361 --- /dev/null +++ b/graphics/items/icon_palettes/ampharosite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +232 200 56 +248 120 104 +232 64 80 +192 200 232 +248 224 152 +248 176 152 +216 136 160 +248 248 248 +240 200 0 +216 200 120 +216 216 216 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/amulet_coin.pal b/graphics/items/icon_palettes/amulet_coin.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/antidote.pal b/graphics/items/icon_palettes/antidote.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/apicot_berry.pal b/graphics/items/icon_palettes/apicot_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/armor_fossil.pal b/graphics/items/icon_palettes/armor_fossil.pal new file mode 100755 index 0000000000..4c4b3a4b89 --- /dev/null +++ b/graphics/items/icon_palettes/armor_fossil.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +248 192 160 +216 136 96 +192 112 80 +136 88 56 +208 136 104 +224 160 112 +80 56 40 +168 96 64 +112 80 56 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/armorite_ore.pal b/graphics/items/icon_palettes/armorite_ore.pal new file mode 100644 index 0000000000..e2b7be97a9 --- /dev/null +++ b/graphics/items/icon_palettes/armorite_ore.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 224 248 +248 184 248 +248 152 248 +224 120 248 +224 88 248 +176 88 200 +136 64 152 +48 48 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/items/icon_palettes/aspear_berry.pal b/graphics/items/icon_palettes/aspear_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/assault_vest.pal b/graphics/items/icon_palettes/assault_vest.pal new file mode 100644 index 0000000000..b68dfab9d6 --- /dev/null +++ b/graphics/items/icon_palettes/assault_vest.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +200 80 80 +144 48 56 +64 64 64 +96 72 80 +176 56 64 +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/items/icon_palettes/audinite.pal b/graphics/items/icon_palettes/audinite.pal new file mode 100644 index 0000000000..502636ab7e --- /dev/null +++ b/graphics/items/icon_palettes/audinite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +248 240 208 +184 104 120 +232 104 136 +248 216 224 +240 176 192 +240 192 200 +240 224 208 +248 248 248 +240 200 184 +232 200 192 +224 184 184 +224 160 160 +240 232 208 +0 0 0 diff --git a/graphics/items/icon_palettes/aurora_ticket.pal b/graphics/items/icon_palettes/aurora_ticket.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/awakening.pal b/graphics/items/icon_palettes/awakening.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/babiri_berry.pal b/graphics/items/icon_palettes/babiri_berry.pal new file mode 100755 index 0000000000..e867db13ab --- /dev/null +++ b/graphics/items/icon_palettes/babiri_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +104 168 48 +160 224 72 +200 240 152 +160 128 48 +232 208 120 +72 104 40 +88 120 56 +64 80 40 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/balm_mushroom.pal b/graphics/items/icon_palettes/balm_mushroom.pal new file mode 100644 index 0000000000..7802b4b8d5 --- /dev/null +++ b/graphics/items/icon_palettes/balm_mushroom.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 248 248 +208 232 208 +152 200 152 +248 248 80 +224 200 8 +248 200 96 +240 152 40 +48 48 48 +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/items/icon_palettes/banettite.pal b/graphics/items/icon_palettes/banettite.pal new file mode 100644 index 0000000000..a95929c2c6 --- /dev/null +++ b/graphics/items/icon_palettes/banettite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +80 80 80 +216 152 8 +248 200 24 +240 144 200 +255 255 255 +232 216 136 +248 176 112 +248 248 248 +64 64 64 +208 88 136 +184 184 208 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/bead_mail.pal b/graphics/items/icon_palettes/bead_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/beast_ball.pal b/graphics/items/icon_palettes/beast_ball.pal new file mode 100644 index 0000000000..371cd6904b --- /dev/null +++ b/graphics/items/icon_palettes/beast_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +90 57 246 +57 57 180 +90 90 255 +164 164 197 +57 98 255 +65 106 213 +65 172 255 +139 205 255 +74 82 82 +238 213 57 +189 156 98 +156 106 65 +0 0 0 +49 49 49 diff --git a/graphics/items/icon_palettes/beedrillite.pal b/graphics/items/icon_palettes/beedrillite.pal new file mode 100644 index 0000000000..2b25eaa3d5 --- /dev/null +++ b/graphics/items/icon_palettes/beedrillite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +192 184 224 +240 192 24 +56 56 56 +232 224 240 +200 160 8 +184 184 184 +128 104 32 +248 248 248 +216 192 128 +248 224 136 +144 120 40 +88 88 96 +120 120 136 +0 0 0 diff --git a/graphics/items/icon_palettes/belue_berry.pal b/graphics/items/icon_palettes/belue_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/berry_juice.pal b/graphics/items/icon_palettes/berry_juice.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/berry_pouch.pal b/graphics/items/icon_palettes/berry_pouch.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/berry_sweet.pal b/graphics/items/icon_palettes/berry_sweet.pal new file mode 100644 index 0000000000..3b2f149013 --- /dev/null +++ b/graphics/items/icon_palettes/berry_sweet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +144 200 224 +40 152 232 +0 104 184 +8 88 144 +0 72 128 +48 48 48 +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/items/icon_palettes/bicycle.pal b/graphics/items/icon_palettes/bicycle.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/big_malasada.pal b/graphics/items/icon_palettes/big_malasada.pal new file mode 100755 index 0000000000..60fca4191b --- /dev/null +++ b/graphics/items/icon_palettes/big_malasada.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +180 106 49 +205 131 41 +156 90 49 +213 156 65 +213 148 90 +139 82 41 +246 197 98 +222 172 74 +246 197 106 +246 222 74 +180 82 74 +238 98 90 +255 172 197 +246 123 123 diff --git a/graphics/items/icon_palettes/big_nugget.pal b/graphics/items/icon_palettes/big_nugget.pal new file mode 100644 index 0000000000..5349531891 --- /dev/null +++ b/graphics/items/icon_palettes/big_nugget.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 232 96 +248 208 72 +208 172 72 +200 152 56 +152 112 16 +248 248 232 +48 48 48 +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/items/icon_palettes/big_root.pal b/graphics/items/icon_palettes/big_root.pal new file mode 100644 index 0000000000..a93aa2ed77 --- /dev/null +++ b/graphics/items/icon_palettes/big_root.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +126 77 11 +168 117 46 +220 194 117 +203 151 77 +247 220 151 +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/items/icon_palettes/bike_voucher.pal b/graphics/items/icon_palettes/bike_voucher.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/binding_band.pal b/graphics/items/icon_palettes/binding_band.pal new file mode 100644 index 0000000000..ed678f3ef9 --- /dev/null +++ b/graphics/items/icon_palettes/binding_band.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +152 96 32 +184 128 40 +200 152 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 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/black_apricorn.pal b/graphics/items/icon_palettes/black_apricorn.pal new file mode 100755 index 0000000000..63d139493d --- /dev/null +++ b/graphics/items/icon_palettes/black_apricorn.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +247 189 123 +115 82 66 +173 107 49 +123 123 123 +74 74 74 +222 156 99 +189 189 189 +255 255 255 +99 99 99 +57 57 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/black_flute.pal b/graphics/items/icon_palettes/black_flute.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/black_sludge.pal b/graphics/items/icon_palettes/black_sludge.pal new file mode 100644 index 0000000000..0e8504e0ce --- /dev/null +++ b/graphics/items/icon_palettes/black_sludge.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +101 101 126 +126 126 159 +142 151 168 +61 61 77 +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/items/icon_palettes/black_type_enhancing_item.pal b/graphics/items/icon_palettes/black_type_enhancing_item.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/blastoisinite.pal b/graphics/items/icon_palettes/blastoisinite.pal new file mode 100644 index 0000000000..4d8882ef59 --- /dev/null +++ b/graphics/items/icon_palettes/blastoisinite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +96 152 240 +88 112 128 +120 88 48 +184 184 184 +176 200 232 +152 136 112 +248 248 248 +64 128 240 +136 168 216 +208 208 208 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/blazikenite.pal b/graphics/items/icon_palettes/blazikenite.pal new file mode 100644 index 0000000000..4530ddbfdf --- /dev/null +++ b/graphics/items/icon_palettes/blazikenite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +216 88 80 +128 56 56 +56 56 56 +216 200 184 +240 168 208 +192 168 168 +136 128 120 +248 248 248 +208 56 56 +208 168 136 +240 240 176 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/blue_apricorn.pal b/graphics/items/icon_palettes/blue_apricorn.pal new file mode 100755 index 0000000000..411abd8aef --- /dev/null +++ b/graphics/items/icon_palettes/blue_apricorn.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +231 181 140 +115 82 66 +165 99 41 +49 123 239 +33 82 165 +206 148 99 +132 181 255 +255 255 255 +41 107 206 +41 66 107 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/blue_flute.pal b/graphics/items/icon_palettes/blue_flute.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/blue_mint.pal b/graphics/items/icon_palettes/blue_mint.pal new file mode 100644 index 0000000000..6eb4f9b5b1 --- /dev/null +++ b/graphics/items/icon_palettes/blue_mint.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +168 176 248 +128 144 248 +96 120 248 +64 88 240 +40 56 176 +16 40 200 +40 40 40 +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/items/icon_palettes/blue_orb.pal b/graphics/items/icon_palettes/blue_orb.pal old mode 100644 new mode 100755 index 9f061a8000..1f07de0f26 --- a/graphics/items/icon_palettes/blue_orb.pal +++ b/graphics/items/icon_palettes/blue_orb.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -180 180 180 -49 49 49 -106 115 230 -156 156 222 -74 82 197 -57 65 148 -205 205 255 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +255 126 0 +48 48 48 +136 160 248 +104 128 248 +72 104 240 +240 240 248 +168 184 248 +128 208 248 +48 72 192 +248 248 248 +224 248 248 +232 248 248 +40 40 168 +184 248 248 +80 152 248 0 0 0 diff --git a/graphics/items/icon_palettes/blue_scarf.pal b/graphics/items/icon_palettes/blue_scarf.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/blue_shard.pal b/graphics/items/icon_palettes/blue_shard.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/bluk_berry.pal b/graphics/items/icon_palettes/bluk_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/blunder_policy.pal b/graphics/items/icon_palettes/blunder_policy.pal new file mode 100644 index 0000000000..9e29d88f54 --- /dev/null +++ b/graphics/items/icon_palettes/blunder_policy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 248 216 +216 216 104 +192 184 0 +232 152 152 +48 48 48 +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/items/icon_palettes/boost_mulch.pal b/graphics/items/icon_palettes/boost_mulch.pal new file mode 100644 index 0000000000..f116faf59d --- /dev/null +++ b/graphics/items/icon_palettes/boost_mulch.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +208 232 248 +160 160 248 +112 96 232 +232 200 152 +216 184 104 +180 136 72 +128 96 56 +48 48 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/items/icon_palettes/bottle_cap.pal b/graphics/items/icon_palettes/bottle_cap.pal new file mode 100644 index 0000000000..412b2967ba --- /dev/null +++ b/graphics/items/icon_palettes/bottle_cap.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +232 232 232 +216 216 224 +184 192 200 +144 152 176 +106 123 148 +88 96 120 +88 112 160 +72 88 120 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/bright_powder.pal b/graphics/items/icon_palettes/bright_powder.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/bug_gem.pal b/graphics/items/icon_palettes/bug_gem.pal new file mode 100644 index 0000000000..4e8af47265 --- /dev/null +++ b/graphics/items/icon_palettes/bug_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +184 216 104 +224 232 176 +152 184 32 +248 248 248 +136 160 16 +112 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 diff --git a/graphics/items/icon_palettes/bug_memory.pal b/graphics/items/icon_palettes/bug_memory.pal new file mode 100755 index 0000000000..c653b16984 --- /dev/null +++ b/graphics/items/icon_palettes/bug_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 248 +48 48 48 +172 236 128 +232 244 240 +248 252 248 +224 244 208 +184 236 152 +216 244 192 +208 244 176 +144 228 104 +120 120 144 +96 96 120 +160 236 104 +136 164 168 +112 128 136 +160 188 192 diff --git a/graphics/items/icon_palettes/bug_tm_hm.pal b/graphics/items/icon_palettes/bug_tm_hm.pal new file mode 100755 index 0000000000..927711cfa0 --- /dev/null +++ b/graphics/items/icon_palettes/bug_tm_hm.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +181 181 181 +49 49 49 +74 74 99 +224 240 208 +216 240 192 +208 240 176 +184 232 152 +176 232 136 +168 232 120 +160 232 104 +123 123 148 +123 123 123 +99 99 123 +255 255 255 +232 240 240 +82 82 82 diff --git a/graphics/items/icon_palettes/buginium_z.pal b/graphics/items/icon_palettes/buginium_z.pal new file mode 100644 index 0000000000..07fd9b4ec9 --- /dev/null +++ b/graphics/items/icon_palettes/buginium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +57 157 49 +173 181 165 +99 197 57 +149 173 115 +49 123 33 +91 189 57 +213 247 165 +65 173 49 +247 255 239 +49 49 49 +149 223 83 +65 139 41 +99 157 57 +57 131 33 +0 0 0 diff --git a/graphics/items/icon_palettes/burn_drive.pal b/graphics/items/icon_palettes/burn_drive.pal new file mode 100644 index 0000000000..316e9e718d --- /dev/null +++ b/graphics/items/icon_palettes/burn_drive.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +120 72 64 +248 152 136 +208 40 16 +216 88 64 +224 88 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 +0 0 0 diff --git a/graphics/items/icon_palettes/burn_heal.pal b/graphics/items/icon_palettes/burn_heal.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/calcium.pal b/graphics/items/icon_palettes/calcium.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/cameruptite.pal b/graphics/items/icon_palettes/cameruptite.pal new file mode 100644 index 0000000000..1cc3270ca3 --- /dev/null +++ b/graphics/items/icon_palettes/cameruptite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +184 168 152 +120 96 88 +232 112 80 +200 200 200 +240 176 160 +208 136 120 +248 248 248 +72 72 64 +152 88 72 +152 144 136 +224 224 224 +128 120 112 +200 88 64 +136 80 64 diff --git a/graphics/items/icon_palettes/carbos.pal b/graphics/items/icon_palettes/carbos.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/card_key.pal b/graphics/items/icon_palettes/card_key.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/casteliacone.pal b/graphics/items/icon_palettes/casteliacone.pal new file mode 100644 index 0000000000..438dff0441 --- /dev/null +++ b/graphics/items/icon_palettes/casteliacone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 248 248 +180 224 240 +96 192 224 +16 152 200 +248 208 72 +208 176 72 +184 112 0 +48 48 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/items/icon_palettes/catching_charm.pal b/graphics/items/icon_palettes/catching_charm.pal new file mode 100644 index 0000000000..0f0db7606d --- /dev/null +++ b/graphics/items/icon_palettes/catching_charm.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 248 128 +48 48 48 +232 232 248 +184 184 184 +104 176 248 +80 232 200 +60 172 150 +32 144 152 +40 112 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/items/icon_palettes/cell_battery.pal b/graphics/items/icon_palettes/cell_battery.pal new file mode 100755 index 0000000000..1e28e6a352 --- /dev/null +++ b/graphics/items/icon_palettes/cell_battery.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +140 140 148 +206 206 214 +255 255 255 +156 231 255 +41 198 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 diff --git a/graphics/items/icon_palettes/charcoal.pal b/graphics/items/icon_palettes/charcoal.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/charizardite_x.pal b/graphics/items/icon_palettes/charizardite_x.pal new file mode 100644 index 0000000000..7073c040fc --- /dev/null +++ b/graphics/items/icon_palettes/charizardite_x.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +56 64 64 +72 96 168 +72 128 248 +72 184 248 +160 152 160 +176 200 248 +72 160 248 +248 248 248 +64 128 152 +136 232 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/charizardite_y.pal b/graphics/items/icon_palettes/charizardite_y.pal new file mode 100644 index 0000000000..ddc55c87f1 --- /dev/null +++ b/graphics/items/icon_palettes/charizardite_y.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +216 40 16 +248 176 0 +248 208 0 +216 152 112 +232 200 192 +232 184 56 +248 248 248 +200 24 0 +216 96 64 +216 192 184 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/charti_berry.pal b/graphics/items/icon_palettes/charti_berry.pal new file mode 100755 index 0000000000..721b2bd154 --- /dev/null +++ b/graphics/items/icon_palettes/charti_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +168 152 48 +200 168 32 +208 184 8 +248 232 40 +248 248 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/items/icon_palettes/cheri_berry.pal b/graphics/items/icon_palettes/cheri_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/cherish_ball.pal b/graphics/items/icon_palettes/cherish_ball.pal new file mode 100644 index 0000000000..d0ef737479 --- /dev/null +++ b/graphics/items/icon_palettes/cherish_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +74 82 82 +205 57 32 +164 57 41 +222 65 49 +255 65 49 +255 115 106 +255 156 156 +255 255 255 +0 0 0 +49 49 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/chesto_berry.pal b/graphics/items/icon_palettes/chesto_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/chilan_berry.pal b/graphics/items/icon_palettes/chilan_berry.pal new file mode 100755 index 0000000000..72a54a9b9b --- /dev/null +++ b/graphics/items/icon_palettes/chilan_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +160 224 72 +168 136 64 +232 208 120 +208 168 64 +104 168 48 +88 120 56 +248 232 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/items/icon_palettes/chill_drive.pal b/graphics/items/icon_palettes/chill_drive.pal new file mode 100644 index 0000000000..d429ee0036 --- /dev/null +++ b/graphics/items/icon_palettes/chill_drive.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +32 136 144 +208 248 248 +8 184 200 +88 200 224 +96 224 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/items/icon_palettes/choice_band.pal b/graphics/items/icon_palettes/choice_band.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/choice_scarf.pal b/graphics/items/icon_palettes/choice_scarf.pal new file mode 100644 index 0000000000..19561700fb --- /dev/null +++ b/graphics/items/icon_palettes/choice_scarf.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +54 101 93 +61 69 77 +61 142 212 +69 159 238 +109 185 229 +39 101 142 +117 177 247 +85 168 212 +142 212 247 +39 39 39 +194 229 247 +46 126 177 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/choice_specs.pal b/graphics/items/icon_palettes/choice_specs.pal new file mode 100644 index 0000000000..95c5ebab30 --- /dev/null +++ b/graphics/items/icon_palettes/choice_specs.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +117 117 117 +39 39 39 +229 185 54 +212 117 18 +247 238 203 +159 93 11 +247 247 77 +247 126 54 +238 185 77 +238 18 18 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/chople_berry.pal b/graphics/items/icon_palettes/chople_berry.pal new file mode 100755 index 0000000000..404a16ff0b --- /dev/null +++ b/graphics/items/icon_palettes/chople_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +168 48 48 +216 64 64 +248 80 80 +248 136 120 +248 184 160 +232 168 56 +184 120 32 +240 216 80 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/cleanse_tag.pal b/graphics/items/icon_palettes/cleanse_tag.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/clever_feather.pal b/graphics/items/icon_palettes/clever_feather.pal new file mode 100644 index 0000000000..1ddaa990e7 --- /dev/null +++ b/graphics/items/icon_palettes/clever_feather.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +90 90 90 +206 239 255 +239 255 255 +49 49 49 +156 214 231 +156 99 156 +231 148 239 +214 99 214 +140 165 173 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/clover_sweet.pal b/graphics/items/icon_palettes/clover_sweet.pal new file mode 100644 index 0000000000..31392277f9 --- /dev/null +++ b/graphics/items/icon_palettes/clover_sweet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 248 0 +152 200 96 +112 152 72 +88 136 56 +72 104 56 +8 104 64 +8 72 48 +56 72 32 +48 48 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/items/icon_palettes/coba_berry.pal b/graphics/items/icon_palettes/coba_berry.pal new file mode 100755 index 0000000000..497d19db54 --- /dev/null +++ b/graphics/items/icon_palettes/coba_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +48 88 120 +48 112 168 +40 200 216 +128 240 248 +80 160 208 +112 184 232 +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/items/icon_palettes/coin_case.pal b/graphics/items/icon_palettes/coin_case.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/colbur_berry.pal b/graphics/items/icon_palettes/colbur_berry.pal new file mode 100755 index 0000000000..b218b1b5f9 --- /dev/null +++ b/graphics/items/icon_palettes/colbur_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +248 184 240 +240 104 224 +192 40 176 +248 144 232 +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/items/icon_palettes/comet_shard.pal b/graphics/items/icon_palettes/comet_shard.pal new file mode 100644 index 0000000000..fcd9d28040 --- /dev/null +++ b/graphics/items/icon_palettes/comet_shard.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +240 248 248 +200 224 232 +128 176 232 +96 144 224 +72 80 184 +64 56 120 +48 48 48 +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/items/icon_palettes/contest_pass.pal b/graphics/items/icon_palettes/contest_pass.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/cornn_berry.pal b/graphics/items/icon_palettes/cornn_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/cover_fossil.pal b/graphics/items/icon_palettes/cover_fossil.pal new file mode 100755 index 0000000000..17aca6ea29 --- /dev/null +++ b/graphics/items/icon_palettes/cover_fossil.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +123 123 165 +140 140 181 +115 115 165 +82 82 140 +99 99 156 +165 165 198 +66 66 115 +198 198 214 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/custap_berry.pal b/graphics/items/icon_palettes/custap_berry.pal new file mode 100755 index 0000000000..b237f92fce --- /dev/null +++ b/graphics/items/icon_palettes/custap_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +240 208 104 +160 128 48 +240 168 112 +232 80 64 +192 64 64 +248 192 160 +248 120 112 +248 216 200 +208 120 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/damp_mulch.pal b/graphics/items/icon_palettes/damp_mulch.pal new file mode 100644 index 0000000000..97d72c330e --- /dev/null +++ b/graphics/items/icon_palettes/damp_mulch.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +200 224 224 +144 184 192 +64 152 200 +232 200 152 +216 184 104 +180 136 72 +128 96 56 +48 48 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/items/icon_palettes/damp_rock.pal b/graphics/items/icon_palettes/damp_rock.pal new file mode 100644 index 0000000000..f50603adb5 --- /dev/null +++ b/graphics/items/icon_palettes/damp_rock.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +220 238 229 +159 220 203 +77 177 185 +54 151 159 +69 93 93 +101 142 142 +46 126 134 +77 117 117 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/dark_gem.pal b/graphics/items/icon_palettes/dark_gem.pal new file mode 100644 index 0000000000..1183d7db18 --- /dev/null +++ b/graphics/items/icon_palettes/dark_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +72 72 72 +120 120 120 +56 56 56 +160 160 160 +40 40 40 +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/items/icon_palettes/dark_memory.pal b/graphics/items/icon_palettes/dark_memory.pal new file mode 100755 index 0000000000..7850c59fb5 --- /dev/null +++ b/graphics/items/icon_palettes/dark_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 248 +48 48 48 +128 184 184 +184 212 208 +200 228 224 +232 244 240 +248 252 248 +160 204 200 +96 164 168 +116 116 144 +96 96 120 +80 156 160 +184 112 112 +136 88 88 +200 148 144 +88 88 112 diff --git a/graphics/items/icon_palettes/dark_tm_hm.pal b/graphics/items/icon_palettes/dark_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/darkinium_z.pal b/graphics/items/icon_palettes/darkinium_z.pal new file mode 100644 index 0000000000..a193975f94 --- /dev/null +++ b/graphics/items/icon_palettes/darkinium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +74 57 90 +98 74 98 +115 90 106 +213 197 189 +180 156 156 +65 49 65 +90 74 98 +82 65 74 +148 139 131 +65 49 82 +49 41 57 +90 65 90 +123 106 106 +0 0 0 diff --git a/graphics/items/icon_palettes/dawn_stone.pal b/graphics/items/icon_palettes/dawn_stone.pal new file mode 100755 index 0000000000..a5af707a7d --- /dev/null +++ b/graphics/items/icon_palettes/dawn_stone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +144 248 232 +24 248 216 +16 200 192 +8 216 176 +248 248 248 +24 176 160 +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/items/icon_palettes/decidium_z.pal b/graphics/items/icon_palettes/decidium_z.pal new file mode 100644 index 0000000000..3e9f620feb --- /dev/null +++ b/graphics/items/icon_palettes/decidium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +57 164 24 +49 131 49 +74 205 0 +238 255 213 +131 255 24 +41 115 16 +32 90 32 +49 148 0 +57 156 32 +164 180 148 +49 106 57 +90 180 16 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/deep_sea_scale.pal b/graphics/items/icon_palettes/deep_sea_scale.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/deep_sea_tooth.pal b/graphics/items/icon_palettes/deep_sea_tooth.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/destiny_knot.pal b/graphics/items/icon_palettes/destiny_knot.pal new file mode 100644 index 0000000000..080e8a7f04 --- /dev/null +++ b/graphics/items/icon_palettes/destiny_knot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +194 69 69 +247 101 101 +247 85 85 +185 61 61 +134 54 54 +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/items/icon_palettes/devon_goods.pal b/graphics/items/icon_palettes/devon_parts.pal old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icon_palettes/devon_goods.pal rename to graphics/items/icon_palettes/devon_parts.pal diff --git a/graphics/items/icon_palettes/devon_scope.pal b/graphics/items/icon_palettes/devon_scope.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/diancite.pal b/graphics/items/icon_palettes/diancite.pal new file mode 100644 index 0000000000..45e04c8914 --- /dev/null +++ b/graphics/items/icon_palettes/diancite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +240 224 224 +208 152 80 +248 232 160 +240 192 208 +240 192 128 +248 248 248 +224 136 168 +240 184 160 +232 176 192 +232 160 184 +224 176 104 +208 112 136 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/dire_hit.pal b/graphics/items/icon_palettes/dire_hit.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/dive_ball.pal b/graphics/items/icon_palettes/dive_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/dna_splicers.pal b/graphics/items/icon_palettes/dna_splicers.pal new file mode 100644 index 0000000000..3a6253c2df --- /dev/null +++ b/graphics/items/icon_palettes/dna_splicers.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +240 224 128 +168 152 72 +120 112 80 +248 248 248 +200 208 224 +176 184 208 +120 128 152 +88 96 112 +80 80 88 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/douse_drive.pal b/graphics/items/icon_palettes/douse_drive.pal new file mode 100644 index 0000000000..a3e4209f44 --- /dev/null +++ b/graphics/items/icon_palettes/douse_drive.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +48 104 152 +120 208 248 +48 128 200 +56 168 240 +80 184 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/items/icon_palettes/itemfinder.pal b/graphics/items/icon_palettes/dowsing_machine.pal old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icon_palettes/itemfinder.pal rename to graphics/items/icon_palettes/dowsing_machine.pal diff --git a/graphics/items/icon_palettes/draco_plate.pal b/graphics/items/icon_palettes/draco_plate.pal new file mode 100644 index 0000000000..27bfff4b28 --- /dev/null +++ b/graphics/items/icon_palettes/draco_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +173 63 63 +237 112 122 +246 138 138 +201 88 88 +130 56 63 +130 56 40 +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/items/icon_palettes/dragon_fang.pal b/graphics/items/icon_palettes/dragon_fang.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/dragon_gem.pal b/graphics/items/icon_palettes/dragon_gem.pal new file mode 100644 index 0000000000..10fed280fd --- /dev/null +++ b/graphics/items/icon_palettes/dragon_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +160 128 200 +168 184 232 +128 96 224 +216 248 216 +72 64 152 +96 56 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 diff --git a/graphics/items/icon_palettes/dragon_memory.pal b/graphics/items/icon_palettes/dragon_memory.pal new file mode 100755 index 0000000000..4b0a86416d --- /dev/null +++ b/graphics/items/icon_palettes/dragon_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +180 213 255 +230 246 255 +139 189 255 +156 197 255 +255 255 255 +172 180 213 +205 230 255 +213 180 172 +123 123 148 +98 98 123 +255 180 131 +172 139 123 +131 106 98 +197 164 156 diff --git a/graphics/items/icon_palettes/dragon_scale.pal b/graphics/items/icon_palettes/dragon_scale.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/dragon_tm_hm.pal b/graphics/items/icon_palettes/dragon_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/dragonium_z.pal b/graphics/items/icon_palettes/dragonium_z.pal new file mode 100644 index 0000000000..af04489b71 --- /dev/null +++ b/graphics/items/icon_palettes/dragonium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +0 148 172 +8 115 156 +246 246 246 +164 213 222 +32 164 180 +0 106 115 +24 115 131 +41 82 131 +0 139 164 +8 115 148 +172 172 172 +8 82 106 +115 148 148 +0 0 0 diff --git a/graphics/items/icon_palettes/dread_plate.pal b/graphics/items/icon_palettes/dread_plate.pal new file mode 100644 index 0000000000..dddd5e13a9 --- /dev/null +++ b/graphics/items/icon_palettes/dread_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +71 104 156 +130 165 201 +156 182 228 +104 138 173 +63 96 122 +56 71 88 +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/items/icon_palettes/dream_ball.pal b/graphics/items/icon_palettes/dream_ball.pal new file mode 100644 index 0000000000..5782ed7e4a --- /dev/null +++ b/graphics/items/icon_palettes/dream_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +255 98 164 +197 123 156 +230 156 189 +255 131 189 +255 180 213 +255 213 238 +106 82 139 +131 98 197 +123 123 131 +74 82 82 +0 0 0 +49 49 49 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/dream_mail.pal b/graphics/items/icon_palettes/dream_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/dubious_disc.pal b/graphics/items/icon_palettes/dubious_disc.pal new file mode 100755 index 0000000000..502d7af564 --- /dev/null +++ b/graphics/items/icon_palettes/dubious_disc.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +120 88 104 +248 176 248 +216 176 200 +184 0 176 +248 32 232 +192 176 192 +176 104 152 +144 88 120 +160 112 176 +168 152 184 +168 144 128 +192 128 168 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/durin_berry.pal b/graphics/items/icon_palettes/durin_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/dusk_ball.pal b/graphics/items/icon_palettes/dusk_ball.pal new file mode 100644 index 0000000000..7b6bf1de72 --- /dev/null +++ b/graphics/items/icon_palettes/dusk_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +41 139 41 +65 172 65 +82 139 82 +98 213 57 +148 255 82 +123 115 41 +255 106 8 +156 57 0 +222 74 0 +189 32 0 +115 41 24 +0 0 0 +82 82 82 +49 49 49 diff --git a/graphics/items/icon_palettes/dusk_stone.pal b/graphics/items/icon_palettes/dusk_stone.pal new file mode 100755 index 0000000000..a5be7f4804 --- /dev/null +++ b/graphics/items/icon_palettes/dusk_stone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +184 144 184 +168 120 168 +232 168 224 +136 88 144 +144 104 160 +112 80 120 +96 72 96 +80 64 80 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/dynamax_band.pal b/graphics/items/icon_palettes/dynamax_band.pal new file mode 100644 index 0000000000..ca35dc19e1 --- /dev/null +++ b/graphics/items/icon_palettes/dynamax_band.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 248 0 +248 248 224 +224 224 200 +192 192 168 +160 160 128 +96 104 96 +80 80 80 +172 224 248 +120 168 240 +48 96 176 +32 64 120 +248 96 96 +192 40 40 +40 40 40 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/dynamax_candy.pal b/graphics/items/icon_palettes/dynamax_candy.pal new file mode 100644 index 0000000000..743ea9e6d1 --- /dev/null +++ b/graphics/items/icon_palettes/dynamax_candy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 248 248 +248 216 224 +248 176 192 +240 88 128 +192 16 56 +128 16 40 +48 48 48 +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/items/icon_palettes/dynite_ore.pal b/graphics/items/icon_palettes/dynite_ore.pal new file mode 100644 index 0000000000..6bf3b35bca --- /dev/null +++ b/graphics/items/icon_palettes/dynite_ore.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 224 224 +248 192 232 +248 160 152 +248 120 144 +248 80 96 +200 96 104 +160 64 72 +128 40 56 +48 24 24 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/earth_plate.pal b/graphics/items/icon_palettes/earth_plate.pal new file mode 100644 index 0000000000..7b9e07525d --- /dev/null +++ b/graphics/items/icon_palettes/earth_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +156 104 71 +201 165 112 +209 182 138 +182 138 96 +138 96 63 +112 79 71 +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/items/icon_palettes/eevium_z.pal b/graphics/items/icon_palettes/eevium_z.pal new file mode 100644 index 0000000000..8b7671224d --- /dev/null +++ b/graphics/items/icon_palettes/eevium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +148 90 49 +180 123 49 +222 156 74 +255 255 246 +131 82 32 +246 222 205 +106 65 32 +180 172 172 +139 74 57 +172 106 49 +156 106 49 +172 156 139 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/eject_button.pal b/graphics/items/icon_palettes/eject_button.pal new file mode 100755 index 0000000000..363a27e605 --- /dev/null +++ b/graphics/items/icon_palettes/eject_button.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +255 222 24 +198 214 222 +140 140 140 +214 181 24 +255 115 33 +255 66 24 +107 132 148 +181 41 33 +140 165 181 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/eject_pack.pal b/graphics/items/icon_palettes/eject_pack.pal new file mode 100644 index 0000000000..36657d8642 --- /dev/null +++ b/graphics/items/icon_palettes/eject_pack.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +232 232 248 +200 216 216 +184 192 192 +128 136 136 +104 112 112 +80 80 80 +48 48 48 +224 144 144 +224 80 88 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/electirizer.pal b/graphics/items/icon_palettes/electirizer.pal new file mode 100755 index 0000000000..e750bb16ad --- /dev/null +++ b/graphics/items/icon_palettes/electirizer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +248 248 16 +120 120 120 +88 88 16 +248 248 208 +80 80 80 +160 152 0 +168 168 168 +224 216 184 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/electric_gem.pal b/graphics/items/icon_palettes/electric_gem.pal new file mode 100644 index 0000000000..88de6e42ae --- /dev/null +++ b/graphics/items/icon_palettes/electric_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +248 224 0 +248 248 160 +224 200 0 +248 248 248 +192 168 0 +184 160 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/items/icon_palettes/electric_memory.pal b/graphics/items/icon_palettes/electric_memory.pal new file mode 100755 index 0000000000..3567d9e8e6 --- /dev/null +++ b/graphics/items/icon_palettes/electric_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +255 205 57 +255 230 123 +255 255 222 +255 238 156 +255 255 255 +255 255 189 +255 222 90 +255 197 24 +123 123 148 +98 98 123 +255 197 0 +180 164 131 +139 131 115 +197 189 164 diff --git a/graphics/items/icon_palettes/electric_seed.pal b/graphics/items/icon_palettes/electric_seed.pal new file mode 100644 index 0000000000..5c264cdc94 --- /dev/null +++ b/graphics/items/icon_palettes/electric_seed.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +49 49 49 +213 148 65 +246 246 82 +246 222 74 +238 246 197 +156 106 16 +106 82 65 +205 139 24 +238 189 41 +106 90 74 +156 90 49 +246 222 123 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/electric_tm_hm.pal b/graphics/items/icon_palettes/electric_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/electrium_z.pal b/graphics/items/icon_palettes/electrium_z.pal new file mode 100644 index 0000000000..e23c147f76 --- /dev/null +++ b/graphics/items/icon_palettes/electrium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +246 172 0 +213 131 8 +255 213 8 +255 255 246 +255 246 139 +197 106 16 +238 164 0 +172 123 0 +180 180 172 +180 172 98 +180 148 8 +148 90 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/elixir.pal b/graphics/items/icon_palettes/elixir.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/energy_powder.pal b/graphics/items/icon_palettes/energy_powder.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/energy_root.pal b/graphics/items/icon_palettes/energy_root.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/enigma_berry.pal b/graphics/items/icon_palettes/enigma_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/eon_ticket.pal b/graphics/items/icon_palettes/eon_ticket.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/escape_rope.pal b/graphics/items/icon_palettes/escape_rope.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/ether.pal b/graphics/items/icon_palettes/ether.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/everstone.pal b/graphics/items/icon_palettes/everstone.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/eviolite.pal b/graphics/items/icon_palettes/eviolite.pal new file mode 100644 index 0000000000..28ba1a4fc3 --- /dev/null +++ b/graphics/items/icon_palettes/eviolite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +88 88 88 +248 200 240 +224 176 232 +48 48 48 +240 224 248 +200 144 224 +176 120 216 +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/items/icon_palettes/exp_candies.pal b/graphics/items/icon_palettes/exp_candies.pal new file mode 100644 index 0000000000..7e669d6f43 --- /dev/null +++ b/graphics/items/icon_palettes/exp_candies.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 128 248 +240 248 248 +192 240 248 +144 240 248 +96 192 208 +80 112 120 +8 144 156 +48 48 48 +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/items/icon_palettes/exp_charm.pal b/graphics/items/icon_palettes/exp_charm.pal new file mode 100644 index 0000000000..f12330d366 --- /dev/null +++ b/graphics/items/icon_palettes/exp_charm.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 248 192 +248 232 232 +248 160 160 +248 120 120 +136 216 248 +80 176 248 +104 136 160 +59 95 126 +48 48 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/items/icon_palettes/exp_share.pal b/graphics/items/icon_palettes/exp_share.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/expert_belt.pal b/graphics/items/icon_palettes/expert_belt.pal new file mode 100644 index 0000000000..cfb6c6a926 --- /dev/null +++ b/graphics/items/icon_palettes/expert_belt.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +61 54 61 +117 109 117 +85 77 85 +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 +0 0 0 diff --git a/graphics/items/icon_palettes/fab_mail.pal b/graphics/items/icon_palettes/fab_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/fairium_z.pal b/graphics/items/icon_palettes/fairium_z.pal new file mode 100644 index 0000000000..4b5cedf151 --- /dev/null +++ b/graphics/items/icon_palettes/fairium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +180 74 98 +255 123 156 +255 246 255 +255 238 246 +255 156 189 +255 115 156 +180 106 131 +172 82 106 +123 57 65 +230 106 131 +123 49 65 +180 172 172 +180 164 172 +0 0 0 diff --git a/graphics/items/icon_palettes/fairy_gem.pal b/graphics/items/icon_palettes/fairy_gem.pal new file mode 100644 index 0000000000..4bf316f572 --- /dev/null +++ b/graphics/items/icon_palettes/fairy_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +49 49 49 +215 149 192 +251 230 239 +210 120 173 +255 247 255 +193 77 151 +183 49 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/items/icon_palettes/fairy_memory.pal b/graphics/items/icon_palettes/fairy_memory.pal new file mode 100755 index 0000000000..229a7f8dce --- /dev/null +++ b/graphics/items/icon_palettes/fairy_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 128 64 +49 49 49 +205 148 255 +222 189 246 +255 255 255 +230 205 238 +213 172 246 +246 222 255 +189 131 255 +222 139 238 +123 123 148 +98 98 123 +246 148 213 +180 115 148 +139 98 123 +197 156 180 diff --git a/graphics/items/icon_palettes/fairy_tm_hm.pal b/graphics/items/icon_palettes/fairy_tm_hm.pal new file mode 100755 index 0000000000..fe903900e0 --- /dev/null +++ b/graphics/items/icon_palettes/fairy_tm_hm.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +181 181 181 +49 49 49 +74 74 99 +231 205 239 +222 189 247 +214 173 247 +206 148 254 +189 132 254 +222 141 239 +247 148 215 +123 123 148 +123 123 123 +99 99 123 +255 255 255 +246 221 255 +82 82 82 diff --git a/graphics/items/icon_palettes/fame_checker.pal b/graphics/items/icon_palettes/fame_checker.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/fast_ball.pal b/graphics/items/icon_palettes/fast_ball.pal new file mode 100644 index 0000000000..22b9e6212d --- /dev/null +++ b/graphics/items/icon_palettes/fast_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +222 205 246 +164 164 197 +123 123 131 +74 82 82 +148 131 65 +246 205 57 +213 172 49 +238 139 65 +205 106 41 +255 180 131 +0 0 0 +49 49 49 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/fighting_gem.pal b/graphics/items/icon_palettes/fighting_gem.pal new file mode 100644 index 0000000000..324a6870c6 --- /dev/null +++ b/graphics/items/icon_palettes/fighting_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +184 112 120 +224 152 136 +144 72 120 +248 216 208 +120 56 88 +96 40 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/items/icon_palettes/fighting_memory.pal b/graphics/items/icon_palettes/fighting_memory.pal new file mode 100755 index 0000000000..873621d21f --- /dev/null +++ b/graphics/items/icon_palettes/fighting_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +238 164 90 +238 197 156 +255 238 230 +246 213 189 +238 180 123 +255 255 255 +230 148 57 +230 131 24 +230 115 0 +123 123 148 +98 98 123 +189 139 123 +148 115 106 +205 172 156 diff --git a/graphics/items/icon_palettes/fighting_tm_hm.pal b/graphics/items/icon_palettes/fighting_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/fightinium_z.pal b/graphics/items/icon_palettes/fightinium_z.pal new file mode 100644 index 0000000000..ef0b707b16 --- /dev/null +++ b/graphics/items/icon_palettes/fightinium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +255 139 49 +230 98 32 +255 246 213 +255 148 49 +255 205 131 +180 98 32 +180 106 32 +156 74 24 +255 131 41 +189 65 24 +180 172 148 +180 139 90 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/figy_berry.pal b/graphics/items/icon_palettes/figy_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/fire_gem.pal b/graphics/items/icon_palettes/fire_gem.pal new file mode 100644 index 0000000000..f98f9e16ca --- /dev/null +++ b/graphics/items/icon_palettes/fire_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +248 144 72 +248 200 104 +240 64 48 +248 248 232 +224 72 32 +176 24 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/items/icon_palettes/fire_memory.pal b/graphics/items/icon_palettes/fire_memory.pal new file mode 100755 index 0000000000..a5a760f7c2 --- /dev/null +++ b/graphics/items/icon_palettes/fire_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +255 189 65 +255 238 222 +255 255 255 +255 230 189 +255 197 98 +238 172 32 +255 222 156 +255 180 41 +255 205 131 +123 123 148 +98 98 123 +180 131 131 +139 106 115 +197 164 164 diff --git a/graphics/items/icon_palettes/fire_stone.pal b/graphics/items/icon_palettes/fire_stone.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/fire_tm_hm.pal b/graphics/items/icon_palettes/fire_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/firium_z.pal b/graphics/items/icon_palettes/firium_z.pal new file mode 100644 index 0000000000..69b70151f0 --- /dev/null +++ b/graphics/items/icon_palettes/firium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +255 65 65 +197 32 32 +255 246 213 +255 106 98 +255 189 172 +139 24 24 +172 49 41 +180 74 65 +238 57 57 +164 16 16 +172 41 41 +180 131 123 +180 172 148 +0 0 0 diff --git a/graphics/items/icon_palettes/fist_plate.pal b/graphics/items/icon_palettes/fist_plate.pal new file mode 100644 index 0000000000..470a83c515 --- /dev/null +++ b/graphics/items/icon_palettes/fist_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +201 104 96 +246 156 138 +255 173 165 +228 130 96 +173 63 63 +130 56 40 +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/items/icon_palettes/flame_orb.pal b/graphics/items/icon_palettes/flame_orb.pal new file mode 100644 index 0000000000..f3ee47e397 --- /dev/null +++ b/graphics/items/icon_palettes/flame_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +247 126 126 +247 46 46 +238 185 177 +247 247 247 +247 126 85 +247 194 93 +247 247 93 +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/items/icon_palettes/flame_plate.pal b/graphics/items/icon_palettes/flame_plate.pal new file mode 100644 index 0000000000..8b68abf8f5 --- /dev/null +++ b/graphics/items/icon_palettes/flame_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +212 69 54 +247 117 117 +247 142 142 +247 77 77 +168 18 18 +151 5 5 +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/items/icon_palettes/float_stone.pal b/graphics/items/icon_palettes/float_stone.pal new file mode 100644 index 0000000000..420e4adc6f --- /dev/null +++ b/graphics/items/icon_palettes/float_stone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +64 64 64 +224 224 208 +200 200 184 +168 168 152 +152 144 136 +136 128 112 +48 48 48 +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/items/icon_palettes/flower_sweet.pal b/graphics/items/icon_palettes/flower_sweet.pal new file mode 100644 index 0000000000..983cbf3f1b --- /dev/null +++ b/graphics/items/icon_palettes/flower_sweet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 174 201 +248 248 176 +248 232 88 +248 208 0 +240 120 40 +208 96 24 +192 80 8 +112 40 0 +48 48 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/items/icon_palettes/fluffy_tail.pal b/graphics/items/icon_palettes/fluffy_tail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/flying_gem.pal b/graphics/items/icon_palettes/flying_gem.pal new file mode 100644 index 0000000000..16d9334346 --- /dev/null +++ b/graphics/items/icon_palettes/flying_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +184 200 248 +216 224 248 +152 168 240 +232 248 248 +104 128 192 +64 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 diff --git a/graphics/items/icon_palettes/flying_memory.pal b/graphics/items/icon_palettes/flying_memory.pal new file mode 100755 index 0000000000..1891eeeb83 --- /dev/null +++ b/graphics/items/icon_palettes/flying_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +189 238 255 +213 246 255 +246 246 255 +180 205 222 +172 222 238 +172 238 255 +255 255 255 +156 238 255 +197 197 197 +123 123 148 +98 98 123 +123 189 189 +106 148 139 +156 205 205 diff --git a/graphics/items/icon_palettes/flying_tm_hm.pal b/graphics/items/icon_palettes/flying_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/flyinium_z.pal b/graphics/items/icon_palettes/flyinium_z.pal new file mode 100644 index 0000000000..b2746e6643 --- /dev/null +++ b/graphics/items/icon_palettes/flyinium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +0 131 222 +8 90 197 +16 172 238 +213 255 255 +115 222 255 +0 90 148 +0 123 213 +8 123 164 +24 74 180 +148 172 180 +8 65 131 +82 156 180 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/focus_band.pal b/graphics/items/icon_palettes/focus_band.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/focus_sash.pal b/graphics/items/icon_palettes/focus_sash.pal new file mode 100644 index 0000000000..08b56485e0 --- /dev/null +++ b/graphics/items/icon_palettes/focus_sash.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +77 77 77 +212 101 61 +247 117 117 +247 151 69 +177 39 39 +229 69 69 +247 220 69 +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/items/icon_palettes/fossilized_bird.pal b/graphics/items/icon_palettes/fossilized_bird.pal new file mode 100644 index 0000000000..8472a03732 --- /dev/null +++ b/graphics/items/icon_palettes/fossilized_bird.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 217 234 +248 224 184 +232 192 112 +200 144 36 +168 112 0 +152 96 24 +181 135 83 +128 80 64 +216 160 56 +96 48 32 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/fossilized_dino.pal b/graphics/items/icon_palettes/fossilized_dino.pal new file mode 100644 index 0000000000..464586af96 --- /dev/null +++ b/graphics/items/icon_palettes/fossilized_dino.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +34 177 76 +216 216 248 +184 184 232 +144 144 232 +120 120 184 +80 80 152 +48 48 96 +96 88 144 +48 48 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/items/icon_palettes/fossilized_drake.pal b/graphics/items/icon_palettes/fossilized_drake.pal new file mode 100644 index 0000000000..1c1eb5b536 --- /dev/null +++ b/graphics/items/icon_palettes/fossilized_drake.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 128 192 +152 216 248 +96 184 224 +72 168 216 +48 144 200 +40 104 136 +16 72 96 +48 48 48 +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/items/icon_palettes/fossilized_fish.pal b/graphics/items/icon_palettes/fossilized_fish.pal new file mode 100644 index 0000000000..d36dcaf061 --- /dev/null +++ b/graphics/items/icon_palettes/fossilized_fish.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 192 248 +192 224 160 +144 184 120 +104 136 80 +80 112 64 +56 80 48 +48 48 48 +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/items/icon_palettes/fresh_water.pal b/graphics/items/icon_palettes/fresh_water.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/friend_ball.pal b/graphics/items/icon_palettes/friend_ball.pal new file mode 100644 index 0000000000..051f2e119e --- /dev/null +++ b/graphics/items/icon_palettes/friend_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +222 205 246 +164 164 197 +123 123 131 +90 106 123 +74 82 82 +139 197 57 +189 230 131 +123 164 57 +246 222 16 +172 148 65 +197 90 74 +230 139 131 +0 0 0 +49 49 49 diff --git a/graphics/items/icon_palettes/full_heal.pal b/graphics/items/icon_palettes/full_heal.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/full_incense.pal b/graphics/items/icon_palettes/full_incense.pal new file mode 100755 index 0000000000..7b4948f23f --- /dev/null +++ b/graphics/items/icon_palettes/full_incense.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +120 96 40 +248 184 184 +216 72 72 +248 248 104 +240 232 32 +248 248 168 +112 96 48 +216 208 0 +152 136 0 +176 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/full_restore.pal b/graphics/items/icon_palettes/full_restore.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/galarica_item.pal b/graphics/items/icon_palettes/galarica_item.pal new file mode 100644 index 0000000000..6f003b1f86 --- /dev/null +++ b/graphics/items/icon_palettes/galarica_item.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +182 139 54 +160 115 65 +116 91 61 +86 68 43 +54 46 27 +205 184 24 +115 167 18 +39 128 20 +20 90 18 +255 153 104 +252 122 46 +221 83 27 +151 54 13 +48 48 48 +0 0 0 diff --git a/graphics/items/icon_palettes/galladite.pal b/graphics/items/icon_palettes/galladite.pal new file mode 100644 index 0000000000..fdc71e0e27 --- /dev/null +++ b/graphics/items/icon_palettes/galladite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +104 176 160 +144 120 128 +216 96 112 +232 232 216 +208 224 224 +232 168 184 +240 200 208 +248 248 248 +88 160 144 +176 208 208 +120 176 168 +216 152 160 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/ganlon_berry.pal b/graphics/items/icon_palettes/ganlon_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/garchompite.pal b/graphics/items/icon_palettes/garchompite.pal new file mode 100644 index 0000000000..79e932ef5c --- /dev/null +++ b/graphics/items/icon_palettes/garchompite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +152 56 64 +240 160 48 +248 216 56 +72 80 136 +216 136 136 +160 152 96 +248 248 248 +248 216 152 +200 32 32 +104 80 136 +80 120 224 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/gardevoirite.pal b/graphics/items/icon_palettes/gardevoirite.pal new file mode 100644 index 0000000000..c71a12daf7 --- /dev/null +++ b/graphics/items/icon_palettes/gardevoirite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +88 192 120 +168 112 120 +192 48 104 +176 192 232 +160 224 192 +160 168 152 +184 120 168 +248 248 248 +80 184 112 +144 200 160 +208 208 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/gengarite.pal b/graphics/items/icon_palettes/gengarite.pal new file mode 100644 index 0000000000..307b1a3b1e --- /dev/null +++ b/graphics/items/icon_palettes/gengarite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +96 56 200 +152 56 144 +208 56 80 +184 144 224 +192 184 248 +200 96 152 +248 248 248 +72 32 208 +144 96 208 +192 192 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/genius_feather.pal b/graphics/items/icon_palettes/genius_feather.pal new file mode 100644 index 0000000000..dbfdb5e88f --- /dev/null +++ b/graphics/items/icon_palettes/genius_feather.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +90 90 90 +206 239 255 +239 255 255 +49 49 49 +156 214 231 +148 189 198 +140 247 255 +90 231 239 +140 165 173 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/ghost_gem.pal b/graphics/items/icon_palettes/ghost_gem.pal new file mode 100644 index 0000000000..6068c4d2b0 --- /dev/null +++ b/graphics/items/icon_palettes/ghost_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +104 80 184 +104 104 216 +80 64 152 +136 136 224 +56 48 112 +32 40 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/items/icon_palettes/ghost_memory.pal b/graphics/items/icon_palettes/ghost_memory.pal new file mode 100755 index 0000000000..aa10565da3 --- /dev/null +++ b/graphics/items/icon_palettes/ghost_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 128 64 +49 49 49 +222 172 246 +230 205 246 +255 238 255 +213 148 246 +230 189 246 +255 255 255 +197 123 238 +238 222 246 +180 98 222 +123 123 148 +98 98 123 +131 131 189 +106 115 148 +156 156 205 diff --git a/graphics/items/icon_palettes/ghost_tm_hm.pal b/graphics/items/icon_palettes/ghost_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/ghostium_z.pal b/graphics/items/icon_palettes/ghostium_z.pal new file mode 100644 index 0000000000..6eafff7118 --- /dev/null +++ b/graphics/items/icon_palettes/ghostium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +139 90 148 +172 106 164 +197 139 180 +255 246 246 +230 197 213 +164 106 164 +115 74 115 +131 90 123 +172 172 172 +156 98 156 +123 74 131 +98 57 98 +156 131 148 +82 49 90 diff --git a/graphics/items/icon_palettes/glalitite.pal b/graphics/items/icon_palettes/glalitite.pal new file mode 100644 index 0000000000..6cd95b0d82 --- /dev/null +++ b/graphics/items/icon_palettes/glalitite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +208 216 232 +104 112 112 +56 56 56 +152 200 216 +152 152 152 +128 136 144 +248 248 248 +64 152 184 +56 104 120 +136 184 208 +96 168 192 +56 96 112 +64 128 152 +0 0 0 diff --git a/graphics/items/icon_palettes/glitter_mail.pal b/graphics/items/icon_palettes/glitter_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/go_goggles.pal b/graphics/items/icon_palettes/go_goggles.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/gold_bottle_cap.pal b/graphics/items/icon_palettes/gold_bottle_cap.pal new file mode 100644 index 0000000000..2420b2d4c7 --- /dev/null +++ b/graphics/items/icon_palettes/gold_bottle_cap.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 240 176 +248 232 72 +220 192 80 +200 168 80 +184 128 72 +160 104 64 +168 120 72 +152 104 64 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/gold_teeth.pal b/graphics/items/icon_palettes/gold_teeth.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/good_rod.pal b/graphics/items/icon_palettes/good_rod.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/gooey_mulch.pal b/graphics/items/icon_palettes/gooey_mulch.pal new file mode 100644 index 0000000000..7750074477 --- /dev/null +++ b/graphics/items/icon_palettes/gooey_mulch.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +176 80 184 +200 152 200 +240 216 216 +232 200 152 +216 184 104 +180 136 72 +128 96 56 +48 48 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/items/icon_palettes/gracidea.pal b/graphics/items/icon_palettes/gracidea.pal new file mode 100755 index 0000000000..a1d740e73f --- /dev/null +++ b/graphics/items/icon_palettes/gracidea.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +247 107 132 +255 140 165 +82 148 16 +99 206 8 +255 173 189 +173 49 74 +255 214 222 +198 123 74 +247 239 90 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/grass_gem.pal b/graphics/items/icon_palettes/grass_gem.pal new file mode 100644 index 0000000000..02412f988e --- /dev/null +++ b/graphics/items/icon_palettes/grass_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +96 248 120 +184 248 176 +64 200 80 +232 248 224 +56 184 88 +0 144 48 +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/items/icon_palettes/grass_memory.pal b/graphics/items/icon_palettes/grass_memory.pal new file mode 100755 index 0000000000..07a5778f91 --- /dev/null +++ b/graphics/items/icon_palettes/grass_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +156 238 197 +197 246 213 +255 255 255 +139 238 180 +238 246 246 +213 246 230 +123 238 172 +180 246 205 +123 123 148 +98 98 123 +106 238 164 +131 180 180 +106 139 139 +164 197 197 diff --git a/graphics/items/icon_palettes/grass_tm_hm.pal b/graphics/items/icon_palettes/grass_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/grassium_z.pal b/graphics/items/icon_palettes/grassium_z.pal new file mode 100644 index 0000000000..24569efaec --- /dev/null +++ b/graphics/items/icon_palettes/grassium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +57 164 24 +49 131 49 +74 205 0 +238 255 213 +131 255 24 +41 115 16 +49 148 0 +164 180 148 +49 106 57 +57 156 32 +32 90 32 +90 180 16 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/grassy_seed.pal b/graphics/items/icon_palettes/grassy_seed.pal new file mode 100644 index 0000000000..2f1acee397 --- /dev/null +++ b/graphics/items/icon_palettes/grassy_seed.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +49 49 49 +139 172 82 +197 230 90 +172 197 90 +238 246 197 +156 106 16 +65 74 24 +205 139 24 +238 189 41 +106 90 74 +106 148 82 +246 222 123 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/great_ball.pal b/graphics/items/icon_palettes/great_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/green_apricorn.pal b/graphics/items/icon_palettes/green_apricorn.pal new file mode 100755 index 0000000000..2d89478446 --- /dev/null +++ b/graphics/items/icon_palettes/green_apricorn.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +231 181 140 +115 82 66 +165 99 41 +57 189 99 +24 132 57 +206 148 99 +132 239 165 +255 255 255 +41 156 74 +33 90 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/green_mint.pal b/graphics/items/icon_palettes/green_mint.pal new file mode 100644 index 0000000000..fe469885c3 --- /dev/null +++ b/graphics/items/icon_palettes/green_mint.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +180 240 144 +152 240 128 +104 200 96 +72 144 64 +56 112 56 +32 68 32 +40 40 40 +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/items/icon_palettes/green_scarf.pal b/graphics/items/icon_palettes/green_scarf.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/green_shard.pal b/graphics/items/icon_palettes/green_shard.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/grepa_berry.pal b/graphics/items/icon_palettes/grepa_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/grip_claw.pal b/graphics/items/icon_palettes/grip_claw.pal new file mode 100644 index 0000000000..ee28f992aa --- /dev/null +++ b/graphics/items/icon_palettes/grip_claw.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +77 77 77 +247 247 247 +177 212 212 +117 142 142 +61 85 69 +69 101 85 +134 159 159 +101 134 109 +126 151 134 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/griseous_orb.pal b/graphics/items/icon_palettes/griseous_orb.pal new file mode 100644 index 0000000000..29b8f77048 --- /dev/null +++ b/graphics/items/icon_palettes/griseous_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +49 49 49 +123 99 33 +255 255 255 +214 189 24 +255 247 206 +247 231 140 +222 198 57 +156 132 33 +206 181 41 +173 140 24 +189 156 41 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/ground_gem.pal b/graphics/items/icon_palettes/ground_gem.pal new file mode 100644 index 0000000000..cbdd4efd6d --- /dev/null +++ b/graphics/items/icon_palettes/ground_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +184 128 56 +200 160 80 +160 104 32 +224 192 128 +112 64 16 +104 56 16 +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/items/icon_palettes/ground_memory.pal b/graphics/items/icon_palettes/ground_memory.pal new file mode 100755 index 0000000000..b9272a0dc1 --- /dev/null +++ b/graphics/items/icon_palettes/ground_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +246 238 90 +255 255 156 +255 255 255 +230 213 82 +255 255 123 +255 255 222 +255 255 90 +255 255 189 +222 197 65 +123 123 148 +98 98 123 +164 148 131 +131 115 106 +180 164 156 diff --git a/graphics/items/icon_palettes/ground_tm_hm.pal b/graphics/items/icon_palettes/ground_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/groundium_z.pal b/graphics/items/icon_palettes/groundium_z.pal new file mode 100644 index 0000000000..2e8a65d0ee --- /dev/null +++ b/graphics/items/icon_palettes/groundium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +222 98 41 +180 74 49 +246 139 65 +255 222 180 +255 246 222 +156 57 57 +156 65 24 +213 90 41 +172 98 49 +180 172 156 +123 49 32 +180 156 123 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/growth_mulch.pal b/graphics/items/icon_palettes/growth_mulch.pal new file mode 100644 index 0000000000..f00cd93068 --- /dev/null +++ b/graphics/items/icon_palettes/growth_mulch.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 232 152 +168 216 120 +48 200 64 +232 200 152 +216 184 104 +180 136 72 +128 96 56 +48 48 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/items/icon_palettes/guard_spec.pal b/graphics/items/icon_palettes/guard_spec.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/gyaradosite.pal b/graphics/items/icon_palettes/gyaradosite.pal new file mode 100644 index 0000000000..f485d4ef3c --- /dev/null +++ b/graphics/items/icon_palettes/gyaradosite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +40 96 240 +152 56 112 +208 32 48 +192 144 0 +144 168 248 +248 168 168 +200 88 24 +248 248 248 +16 64 232 +120 120 120 +208 184 152 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/haban_berry.pal b/graphics/items/icon_palettes/haban_berry.pal new file mode 100755 index 0000000000..857889ed08 --- /dev/null +++ b/graphics/items/icon_palettes/haban_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +248 120 120 +248 152 152 +232 64 64 +208 32 32 +160 40 40 +96 48 48 +80 48 72 +104 56 96 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/harbor_mail.pal b/graphics/items/icon_palettes/harbor_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/hard_stone.pal b/graphics/items/icon_palettes/hard_stone.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/heal_ball.pal b/graphics/items/icon_palettes/heal_ball.pal new file mode 100644 index 0000000000..86f7876651 --- /dev/null +++ b/graphics/items/icon_palettes/heal_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +246 139 180 +255 180 230 +255 106 213 +238 82 197 +213 16 172 +106 98 197 +123 148 205 +139 172 222 +90 139 205 +255 246 213 +230 180 115 +255 205 172 +0 0 0 +49 49 49 diff --git a/graphics/items/icon_palettes/heal_powder.pal b/graphics/items/icon_palettes/heal_powder.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/health_feather.pal b/graphics/items/icon_palettes/health_feather.pal new file mode 100644 index 0000000000..357d6950ba --- /dev/null +++ b/graphics/items/icon_palettes/health_feather.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +90 90 90 +206 239 255 +239 255 255 +49 49 49 +156 214 231 +181 165 132 +255 231 132 +255 206 24 +140 165 173 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/heart_scale.pal b/graphics/items/icon_palettes/heart_scale.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/heat_rock.pal b/graphics/items/icon_palettes/heat_rock.pal new file mode 100644 index 0000000000..c5b91232df --- /dev/null +++ b/graphics/items/icon_palettes/heat_rock.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +247 203 212 +247 142 177 +212 85 117 +247 109 151 +142 109 93 +168 134 117 +220 194 185 +212 177 159 +185 61 85 +177 93 93 +101 77 69 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/heavy_ball.pal b/graphics/items/icon_palettes/heavy_ball.pal new file mode 100644 index 0000000000..3a02d3d7d4 --- /dev/null +++ b/graphics/items/icon_palettes/heavy_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +222 205 246 +164 164 197 +123 123 131 +82 123 222 +57 90 164 +131 172 238 +197 205 213 +90 106 123 +115 131 148 +148 164 180 +74 82 82 +0 0 0 +49 49 49 +0 0 0 diff --git a/graphics/items/icon_palettes/heavy_duty_boots.pal b/graphics/items/icon_palettes/heavy_duty_boots.pal new file mode 100644 index 0000000000..8ec7b2d4a5 --- /dev/null +++ b/graphics/items/icon_palettes/heavy_duty_boots.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 248 128 +216 216 216 +160 160 160 +128 128 128 +104 104 104 +96 96 96 +80 80 80 +64 64 64 +48 48 48 +232 176 176 +168 128 128 +136 96 96 +240 80 80 +176 80 80 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/heracronite.pal b/graphics/items/icon_palettes/heracronite.pal new file mode 100644 index 0000000000..6877ae795d --- /dev/null +++ b/graphics/items/icon_palettes/heracronite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +80 80 112 +208 64 8 +248 80 32 +248 216 56 +168 184 184 +248 152 128 +248 152 40 +248 248 248 +32 56 96 +208 160 0 +232 248 184 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/hoenn_fossil.pal b/graphics/items/icon_palettes/hoenn_fossil.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/hondew_berry.pal b/graphics/items/icon_palettes/hondew_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/honey.pal b/graphics/items/icon_palettes/honey.pal new file mode 100644 index 0000000000..062722fc51 --- /dev/null +++ b/graphics/items/icon_palettes/honey.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +163 73 164 +248 240 184 +248 184 72 +232 144 0 +200 112 0 +120 80 32 +216 248 248 +96 184 192 +80 152 152 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/houndoominite.pal b/graphics/items/icon_palettes/houndoominite.pal new file mode 100644 index 0000000000..25f151408a --- /dev/null +++ b/graphics/items/icon_palettes/houndoominite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +96 80 88 +184 40 48 +248 32 32 +136 104 112 +184 160 160 +248 144 144 +192 64 72 +248 248 248 +56 56 64 +120 88 96 +152 144 168 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/hp_up.pal b/graphics/items/icon_palettes/hp_up.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/hyper_potion.pal b/graphics/items/icon_palettes/hyper_potion.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/iapapa_berry.pal b/graphics/items/icon_palettes/iapapa_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/ice_gem.pal b/graphics/items/icon_palettes/ice_gem.pal new file mode 100644 index 0000000000..dda74d5894 --- /dev/null +++ b/graphics/items/icon_palettes/ice_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +104 232 232 +168 248 248 +48 208 248 +232 248 248 +24 176 248 +0 152 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/items/icon_palettes/ice_heal.pal b/graphics/items/icon_palettes/ice_heal.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/ice_memory.pal b/graphics/items/icon_palettes/ice_memory.pal new file mode 100755 index 0000000000..201520bd9e --- /dev/null +++ b/graphics/items/icon_palettes/ice_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +197 246 255 +255 255 255 +213 246 255 +172 238 255 +156 238 255 +230 246 255 +139 230 246 +131 213 238 +123 123 148 +98 98 123 +131 180 180 +106 139 139 +164 205 197 +0 0 0 diff --git a/graphics/items/icon_palettes/ice_stone.pal b/graphics/items/icon_palettes/ice_stone.pal new file mode 100755 index 0000000000..b922cbbabd --- /dev/null +++ b/graphics/items/icon_palettes/ice_stone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +189 238 246 +148 213 222 +222 246 255 +238 255 255 +246 255 255 +98 189 205 +57 156 180 +213 238 246 +24 106 148 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/ice_tm_hm.pal b/graphics/items/icon_palettes/ice_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/icicle_plate.pal b/graphics/items/icon_palettes/icicle_plate.pal new file mode 100644 index 0000000000..b1c45e523a --- /dev/null +++ b/graphics/items/icon_palettes/icicle_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +138 201 192 +209 246 255 +228 246 246 +173 237 237 +56 156 147 +63 122 104 +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/items/icon_palettes/icium_z.pal b/graphics/items/icon_palettes/icium_z.pal new file mode 100644 index 0000000000..98eb3ceef8 --- /dev/null +++ b/graphics/items/icon_palettes/icium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +98 172 246 +41 123 205 +139 213 255 +255 255 255 +172 246 238 +65 115 172 +32 82 148 +16 98 189 +82 148 230 +98 148 180 +180 180 180 +123 172 164 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/icy_rock.pal b/graphics/items/icon_palettes/icy_rock.pal new file mode 100644 index 0000000000..27f6fbc234 --- /dev/null +++ b/graphics/items/icon_palettes/icy_rock.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +185 247 247 +126 203 238 +229 247 247 +77 177 220 +54 142 185 +117 134 168 +185 126 93 +134 93 61 +151 101 69 +229 185 159 +142 159 194 +229 168 142 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/incinium_z.pal b/graphics/items/icon_palettes/incinium_z.pal new file mode 100644 index 0000000000..001f80973f --- /dev/null +++ b/graphics/items/icon_palettes/incinium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +255 65 65 +197 32 32 +255 106 98 +255 246 213 +139 24 24 +172 49 41 +255 189 172 +180 74 65 +180 172 148 +164 16 16 +238 57 57 +172 41 41 +180 131 123 +0 0 0 diff --git a/graphics/items/icon_palettes/insect_plate.pal b/graphics/items/icon_palettes/insect_plate.pal new file mode 100644 index 0000000000..65f65b4bfb --- /dev/null +++ b/graphics/items/icon_palettes/insect_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +173 218 104 +246 255 147 +246 246 173 +201 246 112 +130 173 26 +96 138 18 +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/items/icon_palettes/iron.pal b/graphics/items/icon_palettes/iron.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/iron_ball.pal b/graphics/items/icon_palettes/iron_ball.pal new file mode 100644 index 0000000000..4e3ff78911 --- /dev/null +++ b/graphics/items/icon_palettes/iron_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +46 77 69 +69 109 101 +54 93 85 +77 126 126 +77 177 151 +177 238 220 +247 247 247 +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/items/icon_palettes/iron_plate.pal b/graphics/items/icon_palettes/iron_plate.pal new file mode 100644 index 0000000000..4885bc46cf --- /dev/null +++ b/graphics/items/icon_palettes/iron_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +136 136 136 +208 208 208 +232 232 232 +176 176 176 +120 120 120 +104 104 104 +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/items/icon_palettes/jaboca_berry.pal b/graphics/items/icon_palettes/jaboca_berry.pal new file mode 100755 index 0000000000..7f937b28ee --- /dev/null +++ b/graphics/items/icon_palettes/jaboca_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +240 232 104 +160 128 48 +96 96 40 +120 120 48 +200 184 40 +248 248 208 +160 152 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/items/icon_palettes/jade_orb.pal b/graphics/items/icon_palettes/jade_orb.pal new file mode 100644 index 0000000000..6233744446 --- /dev/null +++ b/graphics/items/icon_palettes/jade_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 192 248 +232 248 232 +156 224 172 +104 192 128 +56 160 88 +24 120 64 +0 80 48 +48 48 48 +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/items/icon_palettes/jaw_fossil.pal b/graphics/items/icon_palettes/jaw_fossil.pal new file mode 100755 index 0000000000..d06360faf7 --- /dev/null +++ b/graphics/items/icon_palettes/jaw_fossil.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +132 140 181 +173 173 173 +115 115 156 +66 66 99 +90 90 132 +132 132 173 +198 189 189 +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/items/icon_palettes/kangaskhanite.pal b/graphics/items/icon_palettes/kangaskhanite.pal new file mode 100644 index 0000000000..dd50b3216f --- /dev/null +++ b/graphics/items/icon_palettes/kangaskhanite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +184 160 248 +160 128 168 +128 96 96 +248 216 120 +216 192 248 +200 168 192 +192 160 104 +248 248 248 +184 160 232 +216 192 184 +248 240 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/kanto_fossil.pal b/graphics/items/icon_palettes/kanto_fossil.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/kasib_berry.pal b/graphics/items/icon_palettes/kasib_berry.pal new file mode 100755 index 0000000000..81a6165aa7 --- /dev/null +++ b/graphics/items/icon_palettes/kasib_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +248 248 184 +168 120 48 +224 64 184 +248 104 200 +176 48 144 +248 160 224 +104 56 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/items/icon_palettes/kebia_berry.pal b/graphics/items/icon_palettes/kebia_berry.pal new file mode 100755 index 0000000000..b63d95d448 --- /dev/null +++ b/graphics/items/icon_palettes/kebia_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +40 152 40 +48 192 56 +80 232 96 +40 104 40 +128 168 48 +144 192 56 +176 240 152 +128 112 96 +104 88 80 +208 248 192 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/kee_berry.pal b/graphics/items/icon_palettes/kee_berry.pal new file mode 100755 index 0000000000..7d25b433ac --- /dev/null +++ b/graphics/items/icon_palettes/kee_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +156 222 115 +115 189 82 +82 156 49 +49 115 33 +230 140 90 +255 173 123 +189 132 107 +206 99 66 +148 123 99 +255 222 189 +230 189 165 +0 0 0 +189 156 132 +0 0 0 diff --git a/graphics/items/icon_palettes/kelpsy_berry.pal b/graphics/items/icon_palettes/kelpsy_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/key.pal b/graphics/items/icon_palettes/key.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/key_stone.pal b/graphics/items/icon_palettes/key_stone.pal new file mode 100644 index 0000000000..3d1bbddb92 --- /dev/null +++ b/graphics/items/icon_palettes/key_stone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +240 224 24 +80 208 16 +48 156 8 +16 104 0 +96 232 248 +56 184 216 +56 152 240 +16 128 172 +32 104 200 +8 56 152 +248 248 248 +248 216 248 +248 160 240 +80 64 152 +48 48 48 diff --git a/graphics/items/icon_palettes/kings_rock.pal b/graphics/items/icon_palettes/kings_rock.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/kommonium_z.pal b/graphics/items/icon_palettes/kommonium_z.pal new file mode 100644 index 0000000000..6b8212474c --- /dev/null +++ b/graphics/items/icon_palettes/kommonium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +32 32 32 +246 238 222 +205 197 139 +180 164 82 +156 131 24 +230 222 180 +131 123 74 +172 172 156 +115 106 32 +156 148 106 +148 123 8 +189 172 106 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/lagging_tail.pal b/graphics/items/icon_palettes/lagging_tail.pal new file mode 100644 index 0000000000..8e2a0b1d50 --- /dev/null +++ b/graphics/items/icon_palettes/lagging_tail.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +229 229 229 +203 203 203 +142 142 142 +101 101 101 +61 61 61 +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/items/icon_palettes/lansat_berry.pal b/graphics/items/icon_palettes/lansat_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/latiasite.pal b/graphics/items/icon_palettes/latiasite.pal new file mode 100644 index 0000000000..f93e6a5053 --- /dev/null +++ b/graphics/items/icon_palettes/latiasite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +144 128 216 +192 80 152 +248 48 56 +184 184 248 +216 120 152 +184 192 248 +248 248 248 +248 160 208 +136 96 208 +160 160 240 +240 232 240 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/latiosite.pal b/graphics/items/icon_palettes/latiosite.pal new file mode 100644 index 0000000000..16c3521ad5 --- /dev/null +++ b/graphics/items/icon_palettes/latiosite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +144 128 216 +88 112 224 +40 128 240 +184 184 248 +112 160 248 +184 192 248 +248 248 248 +128 184 232 +136 96 208 +160 160 240 +240 232 240 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/lava_cookie_and_letter.pal b/graphics/items/icon_palettes/lava_cookie_and_letter.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/lax_incense.pal b/graphics/items/icon_palettes/lax_incense.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/leaf_stone.pal b/graphics/items/icon_palettes/leaf_stone.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/stick.pal b/graphics/items/icon_palettes/leek.pal old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icon_palettes/stick.pal rename to graphics/items/icon_palettes/leek.pal diff --git a/graphics/items/icon_palettes/leftovers.pal b/graphics/items/icon_palettes/leftovers.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/lemonade.pal b/graphics/items/icon_palettes/lemonade.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/leppa_berry.pal b/graphics/items/icon_palettes/leppa_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/level_ball.pal b/graphics/items/icon_palettes/level_ball.pal new file mode 100644 index 0000000000..0b8a160820 --- /dev/null +++ b/graphics/items/icon_palettes/level_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +222 205 246 +164 164 197 +123 123 131 +74 82 82 +255 222 189 +238 189 148 +156 98 57 +222 148 90 +180 148 123 +123 106 98 +222 74 57 +255 139 131 +0 0 0 +49 49 49 diff --git a/graphics/items/icon_palettes/liechi_berry.pal b/graphics/items/icon_palettes/liechi_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/life_orb.pal b/graphics/items/icon_palettes/life_orb.pal new file mode 100644 index 0000000000..e670c6c2d4 --- /dev/null +++ b/graphics/items/icon_palettes/life_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +212 168 238 +220 54 220 +238 177 238 +247 247 247 +185 39 194 +247 101 101 +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/items/icon_palettes/light_ball.pal b/graphics/items/icon_palettes/light_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/light_blue_mint.pal b/graphics/items/icon_palettes/light_blue_mint.pal new file mode 100644 index 0000000000..61fd696664 --- /dev/null +++ b/graphics/items/icon_palettes/light_blue_mint.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +180 224 240 +136 208 232 +40 184 224 +0 168 224 +40 120 152 +0 64 104 +40 40 40 +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/items/icon_palettes/light_clay.pal b/graphics/items/icon_palettes/light_clay.pal new file mode 100644 index 0000000000..02a4a90fbd --- /dev/null +++ b/graphics/items/icon_palettes/light_clay.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +126 177 69 +177 220 109 +93 117 54 +212 238 185 +247 247 247 +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/items/icon_palettes/lopunnite.pal b/graphics/items/icon_palettes/lopunnite.pal new file mode 100644 index 0000000000..1815667bb4 --- /dev/null +++ b/graphics/items/icon_palettes/lopunnite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +248 240 184 +72 56 56 +160 96 80 +248 248 248 +104 64 56 +200 168 160 +160 152 120 +160 152 152 +128 72 56 +112 80 64 +176 128 104 +200 168 136 +128 104 88 +0 0 0 diff --git a/graphics/items/icon_palettes/love_ball.pal b/graphics/items/icon_palettes/love_ball.pal new file mode 100644 index 0000000000..7c8a8f3c92 --- /dev/null +++ b/graphics/items/icon_palettes/love_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +246 164 205 +222 131 180 +255 197 230 +189 90 156 +139 82 123 +222 205 246 +164 164 197 +123 123 131 +74 82 82 +0 0 0 +49 49 49 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/love_sweet.pal b/graphics/items/icon_palettes/love_sweet.pal new file mode 100644 index 0000000000..a00aa2de97 --- /dev/null +++ b/graphics/items/icon_palettes/love_sweet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 242 0 +248 216 224 +248 168 168 +248 136 136 +232 112 112 +216 88 88 +200 64 64 +48 48 48 +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/items/icon_palettes/lucarionite.pal b/graphics/items/icon_palettes/lucarionite.pal new file mode 100644 index 0000000000..22e0961a7b --- /dev/null +++ b/graphics/items/icon_palettes/lucarionite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +112 152 208 +120 88 120 +136 32 32 +248 176 96 +160 192 200 +176 120 128 +192 120 64 +248 248 248 +72 136 176 +184 192 176 +208 208 224 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/luck_incense.pal b/graphics/items/icon_palettes/luck_incense.pal new file mode 100755 index 0000000000..84abcd9497 --- /dev/null +++ b/graphics/items/icon_palettes/luck_incense.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +112 80 40 +160 232 248 +88 176 224 +240 200 64 +216 224 120 +240 240 192 +56 136 184 +216 160 64 +152 112 64 +248 248 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/lucky_egg.pal b/graphics/items/icon_palettes/lucky_egg.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/lucky_punch.pal b/graphics/items/icon_palettes/lucky_punch.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/lum_berry.pal b/graphics/items/icon_palettes/lum_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/luminous_moss.pal b/graphics/items/icon_palettes/luminous_moss.pal new file mode 100755 index 0000000000..51bad6ab71 --- /dev/null +++ b/graphics/items/icon_palettes/luminous_moss.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 128 64 +60 120 56 +216 252 160 +32 164 8 +112 228 56 +152 244 100 +248 252 248 +72 72 88 +40 196 8 +72 228 16 +52 48 48 +200 228 168 +144 140 152 +200 196 208 +112 112 152 +0 0 0 diff --git a/graphics/items/icon_palettes/lumiose_galette.pal b/graphics/items/icon_palettes/lumiose_galette.pal new file mode 100644 index 0000000000..512c889b0d --- /dev/null +++ b/graphics/items/icon_palettes/lumiose_galette.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +48 48 48 +208 144 64 +176 120 56 +128 96 40 +164 80 32 +144 64 24 +120 56 24 +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/items/icon_palettes/lunalium_z.pal b/graphics/items/icon_palettes/lunalium_z.pal new file mode 100644 index 0000000000..4e27ed3f26 --- /dev/null +++ b/graphics/items/icon_palettes/lunalium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +32 32 32 +222 213 213 +156 139 180 +98 65 139 +131 98 156 +189 172 197 +98 82 123 +156 156 156 +115 106 131 +82 57 106 +139 115 164 +82 49 123 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/lure.pal b/graphics/items/icon_palettes/lure.pal new file mode 100644 index 0000000000..2ab68a6b0c --- /dev/null +++ b/graphics/items/icon_palettes/lure.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 128 128 +248 248 248 +240 240 248 +232 232 232 +192 200 216 +136 164 172 +88 120 136 +56 96 104 +216 248 200 +144 232 144 +88 216 88 +56 176 80 +48 128 64 +48 48 48 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/lure_ball.pal b/graphics/items/icon_palettes/lure_ball.pal new file mode 100644 index 0000000000..f202c08888 --- /dev/null +++ b/graphics/items/icon_palettes/lure_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +222 90 106 +255 164 180 +156 131 180 +222 205 246 +164 164 197 +123 123 131 +74 115 139 +41 148 205 +74 180 222 +74 82 82 +255 197 82 +238 139 90 +0 0 0 +49 49 49 diff --git a/graphics/items/icon_palettes/lustrous_orb.pal b/graphics/items/icon_palettes/lustrous_orb.pal new file mode 100644 index 0000000000..28df1d804f --- /dev/null +++ b/graphics/items/icon_palettes/lustrous_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +69 69 69 +39 39 39 +117 212 220 +203 238 238 +247 247 247 +151 212 238 +168 203 229 +134 194 229 +168 194 229 +151 185 229 +220 185 238 +247 238 238 +247 212 229 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/luxury_ball.pal b/graphics/items/icon_palettes/luxury_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/lycanium_z.pal b/graphics/items/icon_palettes/lycanium_z.pal new file mode 100644 index 0000000000..79d540eb80 --- /dev/null +++ b/graphics/items/icon_palettes/lycanium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +32 32 32 +238 222 205 +189 156 139 +156 115 98 +131 82 65 +213 189 172 +172 156 156 +98 74 57 +115 90 82 +139 115 106 +115 65 49 +164 131 115 +123 98 90 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mach_bike.pal b/graphics/items/icon_palettes/mach_bike.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/macho_brace.pal b/graphics/items/icon_palettes/macho_brace.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/magma_emblem.pal b/graphics/items/icon_palettes/magma_emblem.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/magmarizer.pal b/graphics/items/icon_palettes/magmarizer.pal new file mode 100755 index 0000000000..4e0a0b196b --- /dev/null +++ b/graphics/items/icon_palettes/magmarizer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +232 104 104 +136 136 136 +104 48 48 +240 160 160 +96 96 96 +176 48 48 +120 96 96 +240 152 48 +248 248 80 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/magnet.pal b/graphics/items/icon_palettes/magnet.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/mago_berry.pal b/graphics/items/icon_palettes/mago_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/magost_berry.pal b/graphics/items/icon_palettes/magost_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/manectite.pal b/graphics/items/icon_palettes/manectite.pal new file mode 100644 index 0000000000..860c8d0a39 --- /dev/null +++ b/graphics/items/icon_palettes/manectite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +96 168 208 +136 104 120 +224 56 56 +248 248 128 +176 200 224 +248 152 128 +224 152 72 +248 248 248 +72 152 192 +192 200 136 +240 240 240 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/maranga_berry.pal b/graphics/items/icon_palettes/maranga_berry.pal new file mode 100755 index 0000000000..30c39e54ca --- /dev/null +++ b/graphics/items/icon_palettes/maranga_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +247 247 140 +148 140 49 +189 181 49 +189 181 123 +123 107 49 +99 82 41 +148 132 99 +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/items/icon_palettes/marshadium_z.pal b/graphics/items/icon_palettes/marshadium_z.pal new file mode 100644 index 0000000000..3bcd7bcee1 --- /dev/null +++ b/graphics/items/icon_palettes/marshadium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +57 172 139 +49 131 123 +82 230 180 +222 255 238 +255 255 255 +172 180 172 +57 156 123 +32 90 82 +41 123 98 +57 156 131 +41 98 115 +41 115 98 +156 180 164 +0 0 0 diff --git a/graphics/items/icon_palettes/master_ball.pal b/graphics/items/icon_palettes/master_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/mawilite.pal b/graphics/items/icon_palettes/mawilite.pal new file mode 100644 index 0000000000..688d41649f --- /dev/null +++ b/graphics/items/icon_palettes/mawilite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +112 96 112 +200 184 112 +200 120 168 +192 192 192 +248 248 96 +224 184 136 +248 248 248 +224 216 120 +64 64 80 +152 104 136 +176 176 208 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/max_elixir.pal b/graphics/items/icon_palettes/max_elixir.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/max_ether.pal b/graphics/items/icon_palettes/max_ether.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/max_honey.pal b/graphics/items/icon_palettes/max_honey.pal new file mode 100644 index 0000000000..e0847c632c --- /dev/null +++ b/graphics/items/icon_palettes/max_honey.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 200 216 +248 40 96 +184 56 80 +248 216 200 +248 96 96 +248 96 128 +180 48 80 +48 48 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/items/icon_palettes/max_lure.pal b/graphics/items/icon_palettes/max_lure.pal new file mode 100644 index 0000000000..fd954d5721 --- /dev/null +++ b/graphics/items/icon_palettes/max_lure.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 128 128 +248 248 248 +255 255 189 +255 230 65 +230 189 49 +197 139 41 +164 90 32 +139 57 24 +255 205 222 +238 139 172 +222 82 123 +205 57 57 +139 41 49 +48 48 48 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/max_mushrooms.pal b/graphics/items/icon_palettes/max_mushrooms.pal new file mode 100644 index 0000000000..143b1f12d2 --- /dev/null +++ b/graphics/items/icon_palettes/max_mushrooms.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 192 208 +248 184 200 +248 160 176 +232 112 152 +192 64 128 +48 48 48 +248 80 104 +248 48 56 +176 48 64 +176 24 24 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/max_potion.pal b/graphics/items/icon_palettes/max_potion.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/max_repel.pal b/graphics/items/icon_palettes/max_repel.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/meadow_plate.pal b/graphics/items/icon_palettes/meadow_plate.pal new file mode 100644 index 0000000000..2d97a86191 --- /dev/null +++ b/graphics/items/icon_palettes/meadow_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +56 192 63 +138 237 130 +173 255 147 +104 228 88 +63 138 63 +63 112 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/items/icon_palettes/mech_mail.pal b/graphics/items/icon_palettes/mech_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/medichamite.pal b/graphics/items/icon_palettes/medichamite.pal new file mode 100644 index 0000000000..f8b973bc3e --- /dev/null +++ b/graphics/items/icon_palettes/medichamite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +192 88 136 +224 96 80 +248 136 56 +120 176 208 +248 168 168 +184 160 136 +248 248 248 +192 32 104 +160 136 176 +176 200 192 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mega_bracelet.pal b/graphics/items/icon_palettes/mega_bracelet.pal new file mode 100644 index 0000000000..8f34e18a12 --- /dev/null +++ b/graphics/items/icon_palettes/mega_bracelet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +144 160 176 +88 112 128 +200 216 216 +64 80 96 +240 240 240 +176 72 152 +208 112 216 +32 112 24 +88 192 224 +96 200 80 +72 88 192 +184 200 80 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mega_ring.pal b/graphics/items/icon_palettes/mega_ring.pal new file mode 100644 index 0000000000..a45829d72d --- /dev/null +++ b/graphics/items/icon_palettes/mega_ring.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +157 187 97 +49 49 50 +131 137 137 +89 89 89 +65 65 66 +54 53 52 +113 113 121 +51 51 51 +89 89 105 +67 67 69 +57 55 53 +91 91 91 +67 67 67 +115 115 122 +91 91 107 +131 139 139 diff --git a/graphics/items/icon_palettes/mental_herb.pal b/graphics/items/icon_palettes/mental_herb.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/metagrossite.pal b/graphics/items/icon_palettes/metagrossite.pal new file mode 100644 index 0000000000..d7115db596 --- /dev/null +++ b/graphics/items/icon_palettes/metagrossite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +160 168 144 +152 192 216 +200 200 200 +232 200 168 +232 232 232 +160 192 208 +128 184 208 +248 248 248 +216 152 80 +216 184 136 +160 160 144 +208 216 232 +176 160 128 +176 176 184 diff --git a/graphics/items/icon_palettes/metal_coat.pal b/graphics/items/icon_palettes/metal_coat.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/metal_powder.pal b/graphics/items/icon_palettes/metal_powder.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/meteorite.pal b/graphics/items/icon_palettes/meteorite.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/metronome.pal b/graphics/items/icon_palettes/metronome.pal new file mode 100644 index 0000000000..0294d8b6cb --- /dev/null +++ b/graphics/items/icon_palettes/metronome.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +39 69 85 +159 203 229 +109 177 220 +77 142 168 +54 93 61 +77 126 93 +177 229 229 +247 247 247 +126 185 220 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mewnium_z.pal b/graphics/items/icon_palettes/mewnium_z.pal new file mode 100644 index 0000000000..a8129114e2 --- /dev/null +++ b/graphics/items/icon_palettes/mewnium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +255 180 197 +180 123 164 +255 205 213 +255 255 246 +255 230 230 +238 164 189 +131 82 139 +156 90 131 +213 139 148 +197 189 180 +205 156 164 +197 172 172 +213 131 148 +0 0 0 diff --git a/graphics/items/icon_palettes/mewtwonite_x.pal b/graphics/items/icon_palettes/mewtwonite_x.pal new file mode 100644 index 0000000000..f1db0ba0c4 --- /dev/null +++ b/graphics/items/icon_palettes/mewtwonite_x.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +152 80 128 +88 80 120 +48 112 136 +192 192 192 +216 176 216 +160 184 192 +120 152 168 +248 248 248 +128 56 104 +216 216 224 +192 160 184 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mewtwonite_y.pal b/graphics/items/icon_palettes/mewtwonite_y.pal new file mode 100644 index 0000000000..c693248837 --- /dev/null +++ b/graphics/items/icon_palettes/mewtwonite_y.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +152 80 128 +160 80 136 +184 112 168 +192 192 192 +216 176 216 +192 152 184 +248 248 248 +128 56 104 +216 216 224 +192 160 184 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/micle_berry.pal b/graphics/items/icon_palettes/micle_berry.pal new file mode 100755 index 0000000000..9bc9af2dae --- /dev/null +++ b/graphics/items/icon_palettes/micle_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +72 120 64 +56 168 56 +64 200 64 +136 232 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 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mimikium_z.pal b/graphics/items/icon_palettes/mimikium_z.pal new file mode 100644 index 0000000000..c608b57b8a --- /dev/null +++ b/graphics/items/icon_palettes/mimikium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +32 32 32 +255 255 238 +246 238 189 +205 189 123 +164 156 74 +255 255 222 +123 115 65 +180 180 172 +148 139 98 +172 172 139 +213 205 148 +156 139 57 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mind_plate.pal b/graphics/items/icon_palettes/mind_plate.pal new file mode 100644 index 0000000000..583a524b66 --- /dev/null +++ b/graphics/items/icon_palettes/mind_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +209 122 138 +246 209 209 +246 237 228 +255 173 165 +201 104 96 +201 88 88 +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/items/icon_palettes/miracle_seed.pal b/graphics/items/icon_palettes/miracle_seed.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/misty_seed.pal b/graphics/items/icon_palettes/misty_seed.pal new file mode 100644 index 0000000000..8957472cf4 --- /dev/null +++ b/graphics/items/icon_palettes/misty_seed.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +49 49 49 +98 123 189 +205 230 255 +139 189 255 +238 246 197 +156 106 16 +65 74 115 +205 139 24 +238 189 41 +106 90 74 +82 82 156 +246 222 123 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/moomoo_milk.pal b/graphics/items/icon_palettes/moomoo_milk.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/moon_ball.pal b/graphics/items/icon_palettes/moon_ball.pal new file mode 100644 index 0000000000..0f1f671786 --- /dev/null +++ b/graphics/items/icon_palettes/moon_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +222 205 246 +164 164 197 +123 123 131 +98 115 148 +123 139 156 +74 197 238 +65 148 172 +156 255 255 +74 82 82 +189 172 106 +246 205 65 +255 230 164 +0 0 0 +49 49 49 diff --git a/graphics/items/icon_palettes/moon_stone.pal b/graphics/items/icon_palettes/moon_stone.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/muscle_band.pal b/graphics/items/icon_palettes/muscle_band.pal new file mode 100644 index 0000000000..e93f6f6ddf --- /dev/null +++ b/graphics/items/icon_palettes/muscle_band.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +168 142 32 +247 247 151 +229 203 39 +126 109 61 +56 56 56 +247 109 109 +203 177 18 +203 93 18 +203 25 25 +238 54 54 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/muscle_feather.pal b/graphics/items/icon_palettes/muscle_feather.pal new file mode 100644 index 0000000000..e5fd0123c2 --- /dev/null +++ b/graphics/items/icon_palettes/muscle_feather.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +90 90 90 +206 239 255 +239 255 255 +49 49 49 +156 214 231 +173 140 148 +255 123 132 +247 57 66 +140 165 173 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mushroom.pal b/graphics/items/icon_palettes/mushroom.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/mystic_ticket.pal b/graphics/items/icon_palettes/mystic_ticket.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/mystic_water.pal b/graphics/items/icon_palettes/mystic_water.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/n_lunarizer.pal b/graphics/items/icon_palettes/n_lunarizer.pal new file mode 100644 index 0000000000..a8c12d9751 --- /dev/null +++ b/graphics/items/icon_palettes/n_lunarizer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +240 232 232 +176 176 184 +128 128 128 +88 88 88 +48 48 48 +32 176 240 +16 120 200 +240 104 64 +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/items/icon_palettes/n_solarizer.pal b/graphics/items/icon_palettes/n_solarizer.pal new file mode 100644 index 0000000000..b7e5ef7b48 --- /dev/null +++ b/graphics/items/icon_palettes/n_solarizer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +240 232 232 +176 176 184 +128 128 128 +88 88 88 +48 48 48 +240 152 64 +32 176 240 +184 96 40 +240 104 64 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/nanab_berry.pal b/graphics/items/icon_palettes/nanab_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/nest_ball.pal b/graphics/items/icon_palettes/nest_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/net_ball.pal b/graphics/items/icon_palettes/net_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/never_melt_ice.pal b/graphics/items/icon_palettes/never_melt_ice.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/nomel_berry.pal b/graphics/items/icon_palettes/nomel_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/normal_gem.pal b/graphics/items/icon_palettes/normal_gem.pal new file mode 100644 index 0000000000..8cd17447e6 --- /dev/null +++ b/graphics/items/icon_palettes/normal_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +224 184 184 +240 208 208 +192 176 176 +248 248 248 +168 160 160 +144 144 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 diff --git a/graphics/items/icon_palettes/normal_tm_hm.pal b/graphics/items/icon_palettes/normal_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/normalium_z.pal b/graphics/items/icon_palettes/normalium_z.pal new file mode 100644 index 0000000000..882991fe73 --- /dev/null +++ b/graphics/items/icon_palettes/normalium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +131 157 157 +189 223 231 +157 197 197 +83 115 123 +161 179 181 +115 139 149 +157 165 165 +255 255 255 +75 99 107 +49 49 49 +223 231 239 +173 205 213 +123 165 173 +107 123 131 +107 149 149 diff --git a/graphics/items/icon_palettes/nugget.pal b/graphics/items/icon_palettes/nugget.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/oaks_parcel.pal b/graphics/items/icon_palettes/oaks_parcel.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/occa_berry.pal b/graphics/items/icon_palettes/occa_berry.pal new file mode 100755 index 0000000000..c8f33e015a --- /dev/null +++ b/graphics/items/icon_palettes/occa_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +120 208 152 +48 104 72 +232 112 48 +248 144 96 +216 120 64 +184 96 32 +56 160 96 +248 184 144 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/odd_incense.pal b/graphics/items/icon_palettes/odd_incense.pal new file mode 100755 index 0000000000..f51f61c909 --- /dev/null +++ b/graphics/items/icon_palettes/odd_incense.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 128 64 +48 48 48 +136 48 152 +240 192 240 +248 128 248 +216 168 216 +112 96 48 +224 56 240 +160 96 200 +120 72 192 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/odd_keystone.pal b/graphics/items/icon_palettes/odd_keystone.pal new file mode 100755 index 0000000000..89db79825e --- /dev/null +++ b/graphics/items/icon_palettes/odd_keystone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +216 160 112 +192 144 104 +248 192 152 +128 104 80 +160 128 96 +248 208 184 +104 80 64 +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/items/icon_palettes/old_amber.pal b/graphics/items/icon_palettes/old_amber.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/old_gateau.pal b/graphics/items/icon_palettes/old_gateau.pal new file mode 100755 index 0000000000..6d819579bc --- /dev/null +++ b/graphics/items/icon_palettes/old_gateau.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +115 115 115 +173 107 156 +189 132 173 +165 82 140 +107 58 90 +132 66 115 +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/items/icon_palettes/old_key.pal b/graphics/items/icon_palettes/old_key.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/old_rod.pal b/graphics/items/icon_palettes/old_rod.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/old_sea_map.pal b/graphics/items/icon_palettes/old_sea_map.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/oran_berry.pal b/graphics/items/icon_palettes/oran_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/orange_mail.pal b/graphics/items/icon_palettes/orange_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/oval_charm.pal b/graphics/items/icon_palettes/oval_charm.pal new file mode 100644 index 0000000000..5f5afd15c5 --- /dev/null +++ b/graphics/items/icon_palettes/oval_charm.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +239 228 176 +48 48 48 +248 192 224 +128 80 216 +168 104 248 +128 208 192 +248 248 216 +216 136 160 +184 88 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/items/icon_palettes/oval_stone.pal b/graphics/items/icon_palettes/oval_stone.pal new file mode 100755 index 0000000000..f5681b9297 --- /dev/null +++ b/graphics/items/icon_palettes/oval_stone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +96 96 96 +200 208 216 +216 232 240 +144 160 168 +200 216 232 +248 248 248 +160 168 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/items/icon_palettes/pamtre_berry.pal b/graphics/items/icon_palettes/pamtre_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/paralyze_heal.pal b/graphics/items/icon_palettes/paralyze_heal.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/park_ball.pal b/graphics/items/icon_palettes/park_ball.pal new file mode 100644 index 0000000000..5817b9997f --- /dev/null +++ b/graphics/items/icon_palettes/park_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +123 115 131 +164 164 197 +123 123 131 +32 123 222 +115 131 123 +213 213 205 +246 213 82 +255 230 139 +222 156 41 +255 139 49 +0 0 0 +49 49 49 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/passho_berry.pal b/graphics/items/icon_palettes/passho_berry.pal new file mode 100755 index 0000000000..64ba104b53 --- /dev/null +++ b/graphics/items/icon_palettes/passho_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +48 96 160 +200 160 56 +232 224 104 +40 104 208 +64 128 232 +120 168 248 +128 112 64 +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/items/icon_palettes/payapa_berry.pal b/graphics/items/icon_palettes/payapa_berry.pal new file mode 100755 index 0000000000..190039e34a --- /dev/null +++ b/graphics/items/icon_palettes/payapa_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +176 232 104 +112 168 32 +72 96 40 +96 96 96 +120 56 104 +136 40 112 +192 40 152 +240 64 216 +248 128 224 +248 168 232 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/pearl.pal b/graphics/items/icon_palettes/pearl.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/pearl_string.pal b/graphics/items/icon_palettes/pearl_string.pal new file mode 100644 index 0000000000..b754262ce7 --- /dev/null +++ b/graphics/items/icon_palettes/pearl_string.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 248 0 +248 248 248 +232 232 232 +192 192 192 +168 168 168 +248 248 200 +176 232 224 +152 208 200 +120 144 144 +216 172 172 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/pecha_berry.pal b/graphics/items/icon_palettes/pecha_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/persim_berry.pal b/graphics/items/icon_palettes/persim_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/petaya_berry.pal b/graphics/items/icon_palettes/petaya_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/pewter_crunchies.pal b/graphics/items/icon_palettes/pewter_crunchies.pal new file mode 100644 index 0000000000..282a5cff3f --- /dev/null +++ b/graphics/items/icon_palettes/pewter_crunchies.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +192 248 248 +248 248 232 +248 240 192 +248 216 96 +216 164 48 +200 232 112 +144 216 40 +80 160 64 +72 104 72 +224 200 176 +192 176 144 +120 120 120 +176 144 72 +144 104 24 +72 48 0 +48 48 48 diff --git a/graphics/items/icon_palettes/pidgeotite.pal b/graphics/items/icon_palettes/pidgeotite.pal new file mode 100644 index 0000000000..5f81a5b2c4 --- /dev/null +++ b/graphics/items/icon_palettes/pidgeotite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +240 144 72 +192 120 152 +216 64 112 +240 192 128 +232 152 144 +224 104 88 +248 248 248 +240 232 120 +232 152 112 +240 192 96 +248 216 192 +240 168 80 +168 128 152 +240 184 88 diff --git a/graphics/items/icon_palettes/pikanium_z.pal b/graphics/items/icon_palettes/pikanium_z.pal new file mode 100644 index 0000000000..4c3c2a183d --- /dev/null +++ b/graphics/items/icon_palettes/pikanium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +213 131 8 +246 172 0 +255 255 246 +255 246 139 +255 213 8 +180 148 8 +172 123 0 +197 106 16 +238 164 0 +148 90 0 +180 180 172 +180 172 98 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/pikashunium_z.pal b/graphics/items/icon_palettes/pikashunium_z.pal new file mode 100644 index 0000000000..ff7d7bea5c --- /dev/null +++ b/graphics/items/icon_palettes/pikashunium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +255 230 49 +148 106 0 +255 205 8 +189 148 24 +230 180 8 +255 246 139 +255 246 189 +180 148 0 +180 156 24 +213 172 24 +180 172 106 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/pinap_berry.pal b/graphics/items/icon_palettes/pinap_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/pink_apricorn.pal b/graphics/items/icon_palettes/pink_apricorn.pal new file mode 100755 index 0000000000..485ed3f0b4 --- /dev/null +++ b/graphics/items/icon_palettes/pink_apricorn.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +231 181 140 +115 82 66 +165 99 41 +255 148 181 +222 99 140 +206 148 99 +255 198 222 +255 255 255 +239 123 165 +148 74 99 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/pink_mint.pal b/graphics/items/icon_palettes/pink_mint.pal new file mode 100644 index 0000000000..64cc312e07 --- /dev/null +++ b/graphics/items/icon_palettes/pink_mint.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +232 200 224 +248 168 208 +248 128 192 +232 80 168 +144 56 96 +120 40 80 +40 40 40 +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/items/icon_palettes/pink_nectar.pal b/graphics/items/icon_palettes/pink_nectar.pal new file mode 100755 index 0000000000..e6167ec00f --- /dev/null +++ b/graphics/items/icon_palettes/pink_nectar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +255 139 139 +255 205 205 +255 90 90 +255 246 246 +90 65 65 +123 90 82 +148 98 82 +189 148 156 +115 74 65 +123 74 74 +255 197 189 +255 123 115 +189 90 90 +0 0 0 diff --git a/graphics/items/icon_palettes/pink_scarf.pal b/graphics/items/icon_palettes/pink_scarf.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/pinsirite.pal b/graphics/items/icon_palettes/pinsirite.pal new file mode 100644 index 0000000000..0a0fb5fbef --- /dev/null +++ b/graphics/items/icon_palettes/pinsirite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +152 120 112 +192 104 56 +248 80 32 +248 208 56 +200 176 152 +248 144 40 +248 248 248 +248 192 152 +128 96 88 +200 168 80 +248 248 224 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/pixie_plate.pal b/graphics/items/icon_palettes/pixie_plate.pal new file mode 100644 index 0000000000..b7559b5751 --- /dev/null +++ b/graphics/items/icon_palettes/pixie_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +240 176 200 +248 208 248 +248 224 248 +248 192 224 +208 144 200 +192 112 160 +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/items/icon_palettes/plume_fossil.pal b/graphics/items/icon_palettes/plume_fossil.pal new file mode 100755 index 0000000000..0d9f2b825a --- /dev/null +++ b/graphics/items/icon_palettes/plume_fossil.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +123 123 165 +99 99 156 +115 115 165 +66 66 115 +82 82 140 +165 165 198 +140 140 181 +198 198 214 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/poison_barb.pal b/graphics/items/icon_palettes/poison_barb.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/poison_gem.pal b/graphics/items/icon_palettes/poison_gem.pal new file mode 100644 index 0000000000..da63d2f248 --- /dev/null +++ b/graphics/items/icon_palettes/poison_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +152 104 168 +192 176 200 +104 96 136 +232 248 224 +56 104 104 +40 72 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 diff --git a/graphics/items/icon_palettes/poison_memory.pal b/graphics/items/icon_palettes/poison_memory.pal new file mode 100755 index 0000000000..3d3b9e43d8 --- /dev/null +++ b/graphics/items/icon_palettes/poison_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 128 64 +49 49 49 +255 205 172 +255 238 230 +255 255 255 +255 222 197 +230 148 156 +255 189 148 +255 180 123 +205 123 189 +180 98 222 +123 123 148 +98 98 123 +172 123 189 +131 106 148 +189 156 205 diff --git a/graphics/items/icon_palettes/poison_tm_hm.pal b/graphics/items/icon_palettes/poison_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/poisonium_z.pal b/graphics/items/icon_palettes/poisonium_z.pal new file mode 100644 index 0000000000..5e044122fe --- /dev/null +++ b/graphics/items/icon_palettes/poisonium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +164 98 213 +131 74 180 +205 131 246 +246 222 246 +255 255 238 +115 65 148 +106 57 164 +148 82 197 +90 49 123 +148 90 172 +180 172 164 +172 156 172 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/poke_ball.pal b/graphics/items/icon_palettes/poke_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/poke_doll.pal b/graphics/items/icon_palettes/poke_doll.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/poke_flute.pal b/graphics/items/icon_palettes/poke_flute.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/poke_radar.pal b/graphics/items/icon_palettes/poke_radar.pal new file mode 100644 index 0000000000..0b64b89ffd --- /dev/null +++ b/graphics/items/icon_palettes/poke_radar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 126 0 +48 48 48 +112 232 120 +136 136 136 +80 80 80 +248 248 248 +168 168 168 +224 224 224 +64 64 64 +240 96 96 +240 128 128 +144 64 64 +40 136 232 +88 168 240 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/poke_toy.pal b/graphics/items/icon_palettes/poke_toy.pal new file mode 100644 index 0000000000..4ee38edd34 --- /dev/null +++ b/graphics/items/icon_palettes/poke_toy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 248 0 +248 248 248 +200 200 200 +168 168 168 +248 240 144 +248 208 104 +48 48 48 +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/items/icon_palettes/pokeblock_case.pal b/graphics/items/icon_palettes/pokeblock_case.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/pokemon_box_link.pal b/graphics/items/icon_palettes/pokemon_box_link.pal new file mode 100644 index 0000000000..39367b6da0 --- /dev/null +++ b/graphics/items/icon_palettes/pokemon_box_link.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 248 248 +232 232 232 +216 216 216 +184 184 184 +160 160 160 +144 144 144 +96 232 248 +128 216 224 +88 184 224 +240 192 208 +240 96 104 +48 48 48 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/pomeg_berry.pal b/graphics/items/icon_palettes/pomeg_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/pot.pal b/graphics/items/icon_palettes/pot.pal new file mode 100644 index 0000000000..1ea827fa3f --- /dev/null +++ b/graphics/items/icon_palettes/pot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +216 216 248 +176 184 184 +136 136 136 +80 80 80 +48 48 48 +80 208 200 +88 168 160 +248 216 120 +176 164 96 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/potion.pal b/graphics/items/icon_palettes/potion.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/powder_jar.pal b/graphics/items/icon_palettes/powder_jar.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/power_anklet.pal b/graphics/items/icon_palettes/power_anklet.pal new file mode 100755 index 0000000000..6c7c5b6431 --- /dev/null +++ b/graphics/items/icon_palettes/power_anklet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +96 96 96 +48 48 48 +32 168 216 +96 208 232 +136 232 240 +56 192 208 +48 120 168 +48 64 144 +32 144 192 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/power_band.pal b/graphics/items/icon_palettes/power_band.pal new file mode 100755 index 0000000000..160108bc9f --- /dev/null +++ b/graphics/items/icon_palettes/power_band.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +96 96 96 +48 48 48 +208 184 32 +232 224 96 +240 240 176 +224 208 64 +152 144 40 +104 96 40 +192 160 24 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/power_belt.pal b/graphics/items/icon_palettes/power_belt.pal new file mode 100755 index 0000000000..e4e8157965 --- /dev/null +++ b/graphics/items/icon_palettes/power_belt.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +96 96 96 +48 48 48 +200 136 64 +232 176 96 +240 208 152 +232 160 104 +136 104 48 +112 64 24 +176 112 56 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/power_bracer.pal b/graphics/items/icon_palettes/power_bracer.pal new file mode 100755 index 0000000000..c3cb52c47b --- /dev/null +++ b/graphics/items/icon_palettes/power_bracer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +96 96 96 +48 48 48 +216 88 88 +240 112 112 +248 144 144 +168 72 72 +112 56 56 +184 80 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/items/icon_palettes/power_herb.pal b/graphics/items/icon_palettes/power_herb.pal new file mode 100644 index 0000000000..09501f4812 --- /dev/null +++ b/graphics/items/icon_palettes/power_herb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +151 69 69 +39 39 39 +229 109 109 +229 46 46 +168 39 39 +212 61 61 +194 61 61 +177 77 77 +238 93 93 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/power_lens.pal b/graphics/items/icon_palettes/power_lens.pal new file mode 100755 index 0000000000..fe384576d6 --- /dev/null +++ b/graphics/items/icon_palettes/power_lens.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 128 64 +48 48 48 +240 80 240 +248 96 248 +240 176 248 +104 56 112 +144 64 152 +192 64 216 +160 64 184 +32 224 248 +56 144 248 +248 248 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/power_weight.pal b/graphics/items/icon_palettes/power_weight.pal new file mode 100755 index 0000000000..8224c5b9aa --- /dev/null +++ b/graphics/items/icon_palettes/power_weight.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +96 96 96 +48 48 48 +64 200 80 +96 232 120 +152 240 168 +72 152 88 +72 184 88 +56 104 64 +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/items/icon_palettes/pp_max.pal b/graphics/items/icon_palettes/pp_max.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/pp_up.pal b/graphics/items/icon_palettes/pp_up.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/pretty_feather.pal b/graphics/items/icon_palettes/pretty_feather.pal new file mode 100644 index 0000000000..e2e1b3ed78 --- /dev/null +++ b/graphics/items/icon_palettes/pretty_feather.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +90 90 90 +206 239 255 +239 255 255 +49 49 49 +156 214 231 +140 165 173 +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/items/icon_palettes/primarium_z.pal b/graphics/items/icon_palettes/primarium_z.pal new file mode 100644 index 0000000000..59a62fea3b --- /dev/null +++ b/graphics/items/icon_palettes/primarium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +41 156 230 +8 115 213 +230 255 255 +156 255 246 +98 197 255 +0 82 148 +65 139 180 +164 180 180 +0 90 197 +24 139 222 +32 106 164 +106 180 172 +24 106 164 +0 0 0 diff --git a/graphics/items/icon_palettes/prism_scale.pal b/graphics/items/icon_palettes/prism_scale.pal new file mode 100755 index 0000000000..15d3698bff --- /dev/null +++ b/graphics/items/icon_palettes/prism_scale.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +82 82 82 +189 239 255 +132 206 239 +173 173 222 +49 49 49 +206 140 206 +239 107 189 +255 156 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/items/icon_palettes/prison_bottle.pal b/graphics/items/icon_palettes/prison_bottle.pal new file mode 100644 index 0000000000..9845ade30e --- /dev/null +++ b/graphics/items/icon_palettes/prison_bottle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +208 232 248 +144 168 176 +56 96 104 +248 200 64 +176 128 64 +248 176 200 +216 96 144 +192 48 96 +144 24 64 +88 120 248 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/protective_pads.pal b/graphics/items/icon_palettes/protective_pads.pal new file mode 100644 index 0000000000..604b7b85a6 --- /dev/null +++ b/graphics/items/icon_palettes/protective_pads.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +49 49 49 +205 222 238 +172 189 213 +131 156 180 +98 106 164 +106 123 131 +148 156 164 +255 255 255 +213 213 205 +172 180 180 +74 82 90 +131 148 197 +74 90 148 +98 98 123 +156 172 205 diff --git a/graphics/items/icon_palettes/protector.pal b/graphics/items/icon_palettes/protector.pal new file mode 100755 index 0000000000..224b5495b2 --- /dev/null +++ b/graphics/items/icon_palettes/protector.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +224 112 56 +232 152 112 +216 88 32 +104 56 40 +168 96 56 +136 72 48 +80 48 40 +152 80 56 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/protein.pal b/graphics/items/icon_palettes/protein.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/psychic_gem.pal b/graphics/items/icon_palettes/psychic_gem.pal new file mode 100644 index 0000000000..c9f2839e65 --- /dev/null +++ b/graphics/items/icon_palettes/psychic_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +248 104 176 +248 160 192 +208 56 136 +248 216 208 +160 32 136 +112 0 104 +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/items/icon_palettes/psychic_memory.pal b/graphics/items/icon_palettes/psychic_memory.pal new file mode 100755 index 0000000000..af0dadf34e --- /dev/null +++ b/graphics/items/icon_palettes/psychic_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +255 172 164 +255 222 213 +255 255 255 +255 197 197 +255 189 180 +255 246 246 +255 230 230 +255 213 205 +255 180 172 +123 123 148 +98 98 123 +180 139 131 +139 115 115 +197 172 164 diff --git a/graphics/items/icon_palettes/psychic_seed.pal b/graphics/items/icon_palettes/psychic_seed.pal new file mode 100644 index 0000000000..0fd91e0da7 --- /dev/null +++ b/graphics/items/icon_palettes/psychic_seed.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +49 49 49 +172 98 189 +255 205 255 +197 139 197 +238 246 197 +156 106 16 +65 74 24 +205 139 24 +238 189 41 +106 90 74 +115 65 123 +246 222 123 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/psychic_tm_hm.pal b/graphics/items/icon_palettes/psychic_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/psychium_z.pal b/graphics/items/icon_palettes/psychium_z.pal new file mode 100644 index 0000000000..9f72d8d98d --- /dev/null +++ b/graphics/items/icon_palettes/psychium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +255 98 164 +238 65 139 +255 148 189 +255 246 246 +255 197 255 +180 65 115 +164 41 98 +255 82 156 +180 41 131 +172 98 131 +180 172 172 +180 131 180 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/pure_incense.pal b/graphics/items/icon_palettes/pure_incense.pal new file mode 100755 index 0000000000..83918a517f --- /dev/null +++ b/graphics/items/icon_palettes/pure_incense.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +104 104 104 +248 248 248 +208 112 112 +216 216 216 +232 232 232 +112 96 48 +200 200 200 +152 152 152 +248 240 80 +184 184 184 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/purple_nectar.pal b/graphics/items/icon_palettes/purple_nectar.pal new file mode 100755 index 0000000000..7b6def78c8 --- /dev/null +++ b/graphics/items/icon_palettes/purple_nectar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +213 139 255 +238 205 255 +197 90 255 +255 246 255 +90 65 65 +123 90 82 +148 98 82 +189 148 156 +115 74 65 +123 74 74 +255 197 189 +255 123 115 +189 90 90 +0 0 0 diff --git a/graphics/items/icon_palettes/qualot_berry.pal b/graphics/items/icon_palettes/qualot_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/question_mark.pal b/graphics/items/icon_palettes/question_mark.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/quick_ball.pal b/graphics/items/icon_palettes/quick_ball.pal new file mode 100644 index 0000000000..ca7754aa29 --- /dev/null +++ b/graphics/items/icon_palettes/quick_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +106 106 115 +115 189 255 +41 139 213 +41 106 123 +189 255 255 +74 82 82 +189 222 180 +255 255 0 +255 255 213 +156 148 41 +205 189 41 +255 255 255 +0 0 0 +49 49 49 diff --git a/graphics/items/icon_palettes/quick_claw.pal b/graphics/items/icon_palettes/quick_claw.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/quick_powder.pal b/graphics/items/icon_palettes/quick_powder.pal new file mode 100644 index 0000000000..39410ad529 --- /dev/null +++ b/graphics/items/icon_palettes/quick_powder.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +49 49 49 +156 156 156 +214 214 214 +255 255 255 +239 239 239 +90 90 90 +181 214 255 +123 189 239 +74 107 173 +115 156 206 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/rabuta_berry.pal b/graphics/items/icon_palettes/rabuta_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/rage_candy_bar.pal b/graphics/items/icon_palettes/rage_candy_bar.pal new file mode 100644 index 0000000000..985c80da69 --- /dev/null +++ b/graphics/items/icon_palettes/rage_candy_bar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 248 248 +176 208 144 +144 196 88 +104 152 64 +64 104 48 +176 112 80 +152 56 48 +168 144 80 +152 128 64 +224 232 208 +136 136 136 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/rainbow_pass.pal b/graphics/items/icon_palettes/rainbow_pass.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/rare_bone.pal b/graphics/items/icon_palettes/rare_bone.pal new file mode 100755 index 0000000000..2ba2fbbb18 --- /dev/null +++ b/graphics/items/icon_palettes/rare_bone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +224 232 200 +184 192 160 +128 128 96 +208 208 168 +152 152 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 +0 0 0 diff --git a/graphics/items/icon_palettes/rare_candy.pal b/graphics/items/icon_palettes/rare_candy.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/rawst_berry.pal b/graphics/items/icon_palettes/rawst_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/razor_claw.pal b/graphics/items/icon_palettes/razor_claw.pal new file mode 100755 index 0000000000..b4f8187463 --- /dev/null +++ b/graphics/items/icon_palettes/razor_claw.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +248 248 248 +128 136 144 +208 216 216 +152 160 168 +104 112 120 +176 192 200 +80 80 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/items/icon_palettes/razor_fang.pal b/graphics/items/icon_palettes/razor_fang.pal new file mode 100755 index 0000000000..ee390f2c6c --- /dev/null +++ b/graphics/items/icon_palettes/razor_fang.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +160 144 88 +208 192 128 +232 224 184 +104 112 120 +176 192 200 +152 160 168 +248 248 248 +128 136 144 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/razz_berry.pal b/graphics/items/icon_palettes/razz_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/reaper_cloth.pal b/graphics/items/icon_palettes/reaper_cloth.pal new file mode 100755 index 0000000000..8ab71423fc --- /dev/null +++ b/graphics/items/icon_palettes/reaper_cloth.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +80 72 88 +48 48 48 +144 128 168 +128 104 136 +168 152 184 +104 88 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 +0 0 0 diff --git a/graphics/items/icon_palettes/red_apricorn.pal b/graphics/items/icon_palettes/red_apricorn.pal new file mode 100755 index 0000000000..8025f6c43e --- /dev/null +++ b/graphics/items/icon_palettes/red_apricorn.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +231 181 140 +115 82 66 +165 99 41 +255 66 49 +189 33 24 +206 148 99 +255 148 148 +255 255 255 +222 49 33 +115 41 33 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/red_card.pal b/graphics/items/icon_palettes/red_card.pal new file mode 100755 index 0000000000..5309dc86c4 --- /dev/null +++ b/graphics/items/icon_palettes/red_card.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +66 66 66 +255 82 66 +49 49 49 +239 24 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 0 +0 0 0 diff --git a/graphics/items/icon_palettes/red_flute.pal b/graphics/items/icon_palettes/red_flute.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/red_mint.pal b/graphics/items/icon_palettes/red_mint.pal new file mode 100644 index 0000000000..db15bad4f7 --- /dev/null +++ b/graphics/items/icon_palettes/red_mint.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 160 152 +248 128 112 +248 72 64 +200 64 56 +144 56 56 +80 40 40 +40 40 40 +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/items/icon_palettes/red_nectar.pal b/graphics/items/icon_palettes/red_nectar.pal new file mode 100755 index 0000000000..5f1a8336dd --- /dev/null +++ b/graphics/items/icon_palettes/red_nectar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +255 90 90 +255 148 148 +255 49 49 +255 222 205 +90 65 65 +255 189 189 +123 90 82 +148 98 82 +189 148 156 +115 74 65 +123 74 74 +255 197 189 +255 123 115 +189 90 90 diff --git a/graphics/items/icon_palettes/red_orb.pal b/graphics/items/icon_palettes/red_orb.pal old mode 100644 new mode 100755 index dfbaa5cf37..486e32e8cc --- a/graphics/items/icon_palettes/red_orb.pal +++ b/graphics/items/icon_palettes/red_orb.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -180 180 180 -49 49 49 -230 115 106 -222 156 156 -197 82 74 -148 65 57 -255 205 205 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +255 126 0 +48 48 48 +248 248 248 +248 88 112 +248 128 128 +248 40 56 +248 216 216 +216 32 56 +176 32 56 +248 136 72 +248 224 96 +144 24 64 +248 200 96 0 0 0 0 0 0 0 0 0 diff --git a/graphics/items/icon_palettes/red_scarf.pal b/graphics/items/icon_palettes/red_scarf.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/red_shard.pal b/graphics/items/icon_palettes/red_shard.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/reins_of_unity.pal b/graphics/items/icon_palettes/reins_of_unity.pal new file mode 100644 index 0000000000..423943facd --- /dev/null +++ b/graphics/items/icon_palettes/reins_of_unity.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +64 144 248 +56 112 248 +48 96 224 +48 72 224 +48 40 224 +48 48 48 +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/items/icon_palettes/relic_copper.pal b/graphics/items/icon_palettes/relic_copper.pal new file mode 100644 index 0000000000..8b7c45fd8e --- /dev/null +++ b/graphics/items/icon_palettes/relic_copper.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +240 200 128 +224 152 56 +208 144 48 +192 128 40 +160 120 40 +48 48 48 +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/items/icon_palettes/relic_gold.pal b/graphics/items/icon_palettes/relic_gold.pal new file mode 100644 index 0000000000..2666ec5b88 --- /dev/null +++ b/graphics/items/icon_palettes/relic_gold.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 232 96 +248 208 72 +240 184 24 +216 152 24 +200 144 16 +48 48 48 +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/items/icon_palettes/relic_silver.pal b/graphics/items/icon_palettes/relic_silver.pal new file mode 100644 index 0000000000..80a16b120f --- /dev/null +++ b/graphics/items/icon_palettes/relic_silver.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 248 248 +232 240 248 +200 208 216 +168 176 176 +152 152 152 +48 48 48 +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/items/icon_palettes/relics.pal b/graphics/items/icon_palettes/relics.pal new file mode 100644 index 0000000000..b095aa950f --- /dev/null +++ b/graphics/items/icon_palettes/relics.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 248 0 +216 216 208 +200 200 192 +176 176 176 +144 152 152 +120 144 144 +88 120 120 +64 104 104 +56 96 96 +48 72 80 +72 72 72 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/repeat_ball.pal b/graphics/items/icon_palettes/repeat_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/repel.pal b/graphics/items/icon_palettes/repel.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/resist_feather.pal b/graphics/items/icon_palettes/resist_feather.pal new file mode 100644 index 0000000000..c29df37936 --- /dev/null +++ b/graphics/items/icon_palettes/resist_feather.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +90 90 90 +206 239 255 +239 255 255 +49 49 49 +156 214 231 +49 99 181 +123 165 247 +82 132 231 +140 165 173 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/retro_mail.pal b/graphics/items/icon_palettes/retro_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/return_to_field_arrow.pal b/graphics/items/icon_palettes/return_to_field_arrow.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/reveal_glass.pal b/graphics/items/icon_palettes/reveal_glass.pal new file mode 100644 index 0000000000..b7cbcf3f40 --- /dev/null +++ b/graphics/items/icon_palettes/reveal_glass.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 242 0 +208 216 224 +168 184 184 +224 224 216 +192 192 192 +160 160 160 +104 104 96 +88 144 96 +64 96 64 +184 128 112 +128 88 80 +96 144 176 +64 96 120 +72 72 72 +48 48 48 +0 0 0 diff --git a/graphics/items/icon_palettes/revival_herb.pal b/graphics/items/icon_palettes/revival_herb.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/revive.pal b/graphics/items/icon_palettes/revive.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/ribbon_sweet.pal b/graphics/items/icon_palettes/ribbon_sweet.pal new file mode 100644 index 0000000000..faea05e403 --- /dev/null +++ b/graphics/items/icon_palettes/ribbon_sweet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +240 208 248 +208 160 208 +176 136 176 +144 96 168 +112 72 136 +88 64 96 +48 48 48 +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/items/icon_palettes/rich_mulch.pal b/graphics/items/icon_palettes/rich_mulch.pal new file mode 100644 index 0000000000..95616b559a --- /dev/null +++ b/graphics/items/icon_palettes/rich_mulch.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +24 192 40 +120 216 120 +224 232 208 +232 200 152 +216 184 104 +180 136 72 +128 96 56 +48 48 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/items/icon_palettes/rindo_berry.pal b/graphics/items/icon_palettes/rindo_berry.pal new file mode 100755 index 0000000000..bdf699dcc0 --- /dev/null +++ b/graphics/items/icon_palettes/rindo_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +248 240 48 +80 216 96 +56 112 72 +208 200 16 +120 112 48 +32 168 48 +184 248 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/items/icon_palettes/ring_target.pal b/graphics/items/icon_palettes/ring_target.pal new file mode 100755 index 0000000000..4773d5912c --- /dev/null +++ b/graphics/items/icon_palettes/ring_target.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +66 66 66 +173 140 66 +148 115 49 +115 115 123 +206 206 214 +255 255 255 +123 99 49 +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/items/icon_palettes/rock_gem.pal b/graphics/items/icon_palettes/rock_gem.pal new file mode 100644 index 0000000000..3821017666 --- /dev/null +++ b/graphics/items/icon_palettes/rock_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +184 144 120 +216 200 176 +136 112 88 +232 224 200 +112 88 72 +80 64 48 +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/items/icon_palettes/rock_incense.pal b/graphics/items/icon_palettes/rock_incense.pal new file mode 100755 index 0000000000..d3e3fe3239 --- /dev/null +++ b/graphics/items/icon_palettes/rock_incense.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +96 72 32 +216 208 160 +192 160 104 +200 184 112 +112 96 48 +168 136 64 +136 104 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/items/icon_palettes/rock_memory.pal b/graphics/items/icon_palettes/rock_memory.pal new file mode 100755 index 0000000000..f11cde989b --- /dev/null +++ b/graphics/items/icon_palettes/rock_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +222 197 115 +246 238 222 +255 255 255 +222 189 90 +238 222 172 +238 230 197 +230 213 148 +213 180 65 +123 123 148 +98 98 123 +172 148 139 +139 115 115 +197 172 164 +0 0 0 diff --git a/graphics/items/icon_palettes/rock_tm_hm.pal b/graphics/items/icon_palettes/rock_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/rockium_z.pal b/graphics/items/icon_palettes/rockium_z.pal new file mode 100644 index 0000000000..c41636f8b8 --- /dev/null +++ b/graphics/items/icon_palettes/rockium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +156 123 98 +131 90 65 +255 246 222 +189 156 131 +238 222 197 +106 82 65 +90 57 49 +131 106 90 +148 106 90 +115 74 49 +164 156 131 +180 172 156 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/rocky_helmet.pal b/graphics/items/icon_palettes/rocky_helmet.pal new file mode 100755 index 0000000000..92bc3c24c5 --- /dev/null +++ b/graphics/items/icon_palettes/rocky_helmet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +198 198 198 +156 156 156 +82 82 82 +214 156 0 +255 198 0 +255 222 123 +57 156 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/items/icon_palettes/room_service.pal b/graphics/items/icon_palettes/room_service.pal new file mode 100644 index 0000000000..53345c1a7d --- /dev/null +++ b/graphics/items/icon_palettes/room_service.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 248 248 +224 248 248 +208 216 216 +168 184 184 +144 152 152 +192 224 224 +168 192 192 +152 200 200 +96 96 96 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/rose_incense.pal b/graphics/items/icon_palettes/rose_incense.pal new file mode 100755 index 0000000000..379551e9cd --- /dev/null +++ b/graphics/items/icon_palettes/rose_incense.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 128 64 +48 48 48 +120 120 48 +248 240 80 +240 248 152 +232 232 200 +248 248 248 +112 96 48 +208 200 112 +152 152 80 +232 120 232 +224 56 192 +176 48 160 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/roseli_berry.pal b/graphics/items/icon_palettes/roseli_berry.pal new file mode 100755 index 0000000000..94bf9414f6 --- /dev/null +++ b/graphics/items/icon_palettes/roseli_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +57 49 49 +49 49 49 +198 57 66 +140 41 66 +222 82 82 +239 156 132 +41 57 74 +99 123 181 +57 90 140 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/rotom_catalog.pal b/graphics/items/icon_palettes/rotom_catalog.pal new file mode 100644 index 0000000000..02313fedc3 --- /dev/null +++ b/graphics/items/icon_palettes/rotom_catalog.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 248 0 +232 248 248 +200 240 248 +160 216 240 +96 200 240 +48 152 208 +24 104 176 +224 176 144 +240 144 88 +232 120 72 +200 104 56 +184 184 184 +152 152 128 +48 48 48 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/rowap_berry.pal b/graphics/items/icon_palettes/rowap_berry.pal new file mode 100755 index 0000000000..3050dc608a --- /dev/null +++ b/graphics/items/icon_palettes/rowap_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +216 208 128 +200 152 56 +176 152 64 +40 168 176 +56 216 224 +152 120 48 +16 144 152 +48 112 120 +40 88 96 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/ruby.pal b/graphics/items/icon_palettes/ruby.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/rusted_weapons.pal b/graphics/items/icon_palettes/rusted_weapons.pal new file mode 100644 index 0000000000..7d8f33d7c9 --- /dev/null +++ b/graphics/items/icon_palettes/rusted_weapons.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 248 128 +136 128 128 +112 112 112 +88 88 88 +64 64 64 +48 48 48 +200 96 96 +152 72 72 +120 56 56 +80 40 40 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/sablenite.pal b/graphics/items/icon_palettes/sablenite.pal new file mode 100644 index 0000000000..e270a912a2 --- /dev/null +++ b/graphics/items/icon_palettes/sablenite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +224 40 88 +168 64 120 +120 88 152 +248 216 120 +184 168 200 +168 136 144 +240 144 168 +248 248 248 +240 144 104 +240 232 240 +232 104 96 +232 104 136 +192 80 152 +0 0 0 diff --git a/graphics/items/icon_palettes/sachet.pal b/graphics/items/icon_palettes/sachet.pal new file mode 100755 index 0000000000..7c59557a57 --- /dev/null +++ b/graphics/items/icon_palettes/sachet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 128 64 +49 49 49 +74 74 74 +189 115 198 +173 99 181 +99 66 123 +148 90 165 +247 214 115 +214 173 57 +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/items/icon_palettes/sacred_ash.pal b/graphics/items/icon_palettes/sacred_ash.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/safari_ball.pal b/graphics/items/icon_palettes/safari_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/safety_goggles.pal b/graphics/items/icon_palettes/safety_goggles.pal new file mode 100755 index 0000000000..a6fbaea026 --- /dev/null +++ b/graphics/items/icon_palettes/safety_goggles.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +74 74 74 +82 132 82 +90 165 90 +115 189 90 +206 107 115 +181 57 66 +222 173 173 +66 99 66 +255 214 214 +156 222 132 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/sail_fossil.pal b/graphics/items/icon_palettes/sail_fossil.pal new file mode 100755 index 0000000000..f845f7dd2c --- /dev/null +++ b/graphics/items/icon_palettes/sail_fossil.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +57 49 49 +49 49 49 +132 206 181 +90 156 132 +115 173 156 +57 90 74 +66 107 90 +90 140 123 +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/items/icon_palettes/salac_berry.pal b/graphics/items/icon_palettes/salac_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/salamencite.pal b/graphics/items/icon_palettes/salamencite.pal new file mode 100644 index 0000000000..315807ba5d --- /dev/null +++ b/graphics/items/icon_palettes/salamencite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +192 192 192 +16 112 152 +8 144 184 +240 168 168 +128 192 216 +96 168 192 +248 248 248 +224 88 88 +120 112 136 +200 168 168 +232 232 232 +208 136 136 +24 112 136 +176 72 72 diff --git a/graphics/items/icon_palettes/sapphire.pal b/graphics/items/icon_palettes/sapphire.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/scanner.pal b/graphics/items/icon_palettes/scanner.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/sceptilite.pal b/graphics/items/icon_palettes/sceptilite.pal new file mode 100644 index 0000000000..579e9c4198 --- /dev/null +++ b/graphics/items/icon_palettes/sceptilite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +80 96 80 +184 40 48 +248 32 32 +128 160 104 +168 192 160 +248 160 152 +192 96 64 +248 248 248 +64 64 64 +96 120 88 +192 208 120 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/scizorite.pal b/graphics/items/icon_palettes/scizorite.pal new file mode 100644 index 0000000000..abcba6719a --- /dev/null +++ b/graphics/items/icon_palettes/scizorite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +168 80 104 +104 32 24 +56 56 56 +168 216 224 +200 160 168 +144 144 144 +112 136 144 +248 248 248 +152 8 0 +168 144 168 +248 248 224 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/scope_lens.pal b/graphics/items/icon_palettes/scope_lens.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/sea_incense.pal b/graphics/items/icon_palettes/sea_incense.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/secret_key.pal b/graphics/items/icon_palettes/secret_key.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/shadow_mail.pal b/graphics/items/icon_palettes/shadow_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/shalour_sable.pal b/graphics/items/icon_palettes/shalour_sable.pal new file mode 100644 index 0000000000..ae6f368a81 --- /dev/null +++ b/graphics/items/icon_palettes/shalour_sable.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +232 208 152 +216 184 104 +200 160 80 +184 128 64 +168 112 48 +152 88 32 +48 48 48 +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/items/icon_palettes/sharp_beak.pal b/graphics/items/icon_palettes/sharp_beak.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/sharpedonite.pal b/graphics/items/icon_palettes/sharpedonite.pal new file mode 100644 index 0000000000..ac7dd92e89 --- /dev/null +++ b/graphics/items/icon_palettes/sharpedonite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +200 200 224 +208 168 72 +248 216 120 +160 192 216 +248 232 184 +224 208 176 +248 248 248 +32 112 168 +144 168 144 +144 168 208 +232 232 240 +112 160 200 +208 192 136 +136 168 200 diff --git a/graphics/items/icon_palettes/shed_shell.pal b/graphics/items/icon_palettes/shed_shell.pal new file mode 100644 index 0000000000..6fb36dd9d5 --- /dev/null +++ b/graphics/items/icon_palettes/shed_shell.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +229 238 101 +247 247 247 +220 194 109 +159 142 46 +185 168 69 +203 177 61 +117 117 85 +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/items/icon_palettes/shell.pal b/graphics/items/icon_palettes/shell.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/shiny_charm.pal b/graphics/items/icon_palettes/shiny_charm.pal new file mode 100644 index 0000000000..ab6e64a6e8 --- /dev/null +++ b/graphics/items/icon_palettes/shiny_charm.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +245 218 38 +82 123 230 +90 156 246 +156 255 106 +41 115 148 +156 246 246 +57 205 246 +132 214 255 +189 189 239 +222 222 255 +90 90 90 +32 32 32 +206 173 247 +140 140 247 +173 107 255 +230 206 255 diff --git a/graphics/items/icon_palettes/shiny_stone.pal b/graphics/items/icon_palettes/shiny_stone.pal new file mode 100755 index 0000000000..f297481899 --- /dev/null +++ b/graphics/items/icon_palettes/shiny_stone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +192 224 160 +248 248 136 +224 240 208 +248 248 248 +168 192 152 +152 176 120 +248 224 112 +248 216 8 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/shoal_salt.pal b/graphics/items/icon_palettes/shoal_salt.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/shock_drive.pal b/graphics/items/icon_palettes/shock_drive.pal new file mode 100644 index 0000000000..1d7d83eb55 --- /dev/null +++ b/graphics/items/icon_palettes/shock_drive.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +144 104 32 +248 216 0 +216 128 16 +248 144 16 +248 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 0 diff --git a/graphics/items/icon_palettes/shuca_berry.pal b/graphics/items/icon_palettes/shuca_berry.pal new file mode 100755 index 0000000000..61b071e34d --- /dev/null +++ b/graphics/items/icon_palettes/shuca_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +168 232 96 +216 240 176 +96 184 32 +40 96 40 +80 136 32 +216 192 24 +248 232 96 +160 136 32 +248 248 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/silk_scarf.pal b/graphics/items/icon_palettes/silk_scarf.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/silph_scope.pal b/graphics/items/icon_palettes/silph_scope.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/silver_powder.pal b/graphics/items/icon_palettes/silver_powder.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/sitrus_berry.pal b/graphics/items/icon_palettes/sitrus_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/skull_fossil.pal b/graphics/items/icon_palettes/skull_fossil.pal new file mode 100755 index 0000000000..5a8f9d1706 --- /dev/null +++ b/graphics/items/icon_palettes/skull_fossil.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +192 112 80 +224 160 112 +208 136 104 +248 192 160 +216 136 96 +136 88 56 +80 56 40 +168 96 64 +112 80 56 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/sky_plate.pal b/graphics/items/icon_palettes/sky_plate.pal new file mode 100644 index 0000000000..3c7b1e3f0e --- /dev/null +++ b/graphics/items/icon_palettes/sky_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +26 165 218 +88 209 237 +112 246 255 +63 192 255 +26 130 173 +33 104 156 +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/items/icon_palettes/slowbronite.pal b/graphics/items/icon_palettes/slowbronite.pal new file mode 100644 index 0000000000..41785ae70c --- /dev/null +++ b/graphics/items/icon_palettes/slowbronite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +184 200 184 +224 184 80 +240 232 128 +248 184 192 +240 240 184 +216 216 152 +248 248 248 +240 128 136 +240 176 128 +200 176 168 +224 232 232 +224 152 152 +216 192 128 +216 96 104 diff --git a/graphics/items/icon_palettes/smoke_ball.pal b/graphics/items/icon_palettes/smoke_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/smooth_rock.pal b/graphics/items/icon_palettes/smooth_rock.pal new file mode 100644 index 0000000000..ccb7076fae --- /dev/null +++ b/graphics/items/icon_palettes/smooth_rock.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +247 229 134 +247 247 220 +238 212 85 +203 142 54 +212 168 11 +185 126 93 +229 168 142 +142 93 69 +117 77 54 +229 185 159 +168 134 25 +212 151 46 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/snorlium_z.pal b/graphics/items/icon_palettes/snorlium_z.pal new file mode 100644 index 0000000000..e4ecfd6d67 --- /dev/null +++ b/graphics/items/icon_palettes/snorlium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +82 139 172 +65 106 148 +98 164 205 +246 255 246 +57 98 123 +213 230 238 +41 74 106 +65 115 139 +172 172 172 +57 90 139 +74 131 164 +148 164 164 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/snowball.pal b/graphics/items/icon_palettes/snowball.pal new file mode 100755 index 0000000000..900d872d7d --- /dev/null +++ b/graphics/items/icon_palettes/snowball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 123 165 +74 90 99 +247 255 255 +198 239 255 +132 173 206 +165 206 231 +8 0 0 +0 0 0 +8 8 0 +41 115 156 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/soda_pop.pal b/graphics/items/icon_palettes/soda_pop.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/soft_sand.pal b/graphics/items/icon_palettes/soft_sand.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/solganium_z.pal b/graphics/items/icon_palettes/solganium_z.pal new file mode 100644 index 0000000000..2c1517f5a8 --- /dev/null +++ b/graphics/items/icon_palettes/solganium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +32 32 32 +255 172 65 +255 246 205 +222 82 32 +255 131 16 +255 205 131 +180 172 148 +180 98 24 +255 148 16 +197 65 41 +156 65 32 +180 131 57 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/soot_sack.pal b/graphics/items/icon_palettes/soot_sack.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/soothe_bell.pal b/graphics/items/icon_palettes/soothe_bell.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/soul_dew.pal b/graphics/items/icon_palettes/soul_dew.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/spell_tag.pal b/graphics/items/icon_palettes/spell_tag.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/spelon_berry.pal b/graphics/items/icon_palettes/spelon_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/splash_plate.pal b/graphics/items/icon_palettes/splash_plate.pal new file mode 100644 index 0000000000..cc529d3455 --- /dev/null +++ b/graphics/items/icon_palettes/splash_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +56 96 201 +122 173 255 +147 192 255 +96 138 255 +33 63 138 +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/items/icon_palettes/spooky_plate.pal b/graphics/items/icon_palettes/spooky_plate.pal new file mode 100644 index 0000000000..fffede5bc1 --- /dev/null +++ b/graphics/items/icon_palettes/spooky_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +112 122 138 +165 173 182 +192 192 209 +138 130 165 +104 104 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 +0 0 0 diff --git a/graphics/items/icon_palettes/sport_ball.pal b/graphics/items/icon_palettes/sport_ball.pal new file mode 100644 index 0000000000..38c8fd8c84 --- /dev/null +++ b/graphics/items/icon_palettes/sport_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +222 205 246 +164 164 197 +123 123 131 +74 82 82 +255 213 57 +255 148 57 +222 90 57 +156 74 57 +0 0 0 +49 49 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/ss_ticket.pal b/graphics/items/icon_palettes/ss_ticket.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/stable_mulch.pal b/graphics/items/icon_palettes/stable_mulch.pal new file mode 100644 index 0000000000..a0a98aabcb --- /dev/null +++ b/graphics/items/icon_palettes/stable_mulch.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +240 248 208 +152 224 200 +48 184 192 +232 200 152 +216 184 104 +180 136 72 +128 96 56 +48 48 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/items/icon_palettes/star.pal b/graphics/items/icon_palettes/star.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/star_sweet.pal b/graphics/items/icon_palettes/star_sweet.pal new file mode 100644 index 0000000000..e94061aa97 --- /dev/null +++ b/graphics/items/icon_palettes/star_sweet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 128 248 +248 248 176 +248 232 0 +216 184 8 +168 143 8 +48 48 48 +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/items/icon_palettes/starf_berry.pal b/graphics/items/icon_palettes/starf_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/steel_gem.pal b/graphics/items/icon_palettes/steel_gem.pal new file mode 100644 index 0000000000..bd03865343 --- /dev/null +++ b/graphics/items/icon_palettes/steel_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +136 136 152 +184 184 200 +96 96 96 +232 232 248 +88 88 88 +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/items/icon_palettes/steel_memory.pal b/graphics/items/icon_palettes/steel_memory.pal new file mode 100755 index 0000000000..6dc939e719 --- /dev/null +++ b/graphics/items/icon_palettes/steel_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +148 172 180 +222 222 222 +238 246 246 +197 197 197 +213 213 213 +255 255 255 +115 164 172 +189 189 189 +82 156 164 +123 123 148 +98 98 123 +139 156 172 +115 131 131 +189 197 205 diff --git a/graphics/items/icon_palettes/steel_tm_hm.pal b/graphics/items/icon_palettes/steel_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/steelium_z.pal b/graphics/items/icon_palettes/steelium_z.pal new file mode 100644 index 0000000000..814d20a5ba --- /dev/null +++ b/graphics/items/icon_palettes/steelium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +131 131 172 +106 106 156 +156 156 189 +255 255 238 +238 230 230 +74 74 106 +90 90 115 +98 98 148 +123 123 164 +180 180 164 +106 106 131 +164 164 156 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/steelixite.pal b/graphics/items/icon_palettes/steelixite.pal new file mode 100644 index 0000000000..f0b9626fcd --- /dev/null +++ b/graphics/items/icon_palettes/steelixite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +144 152 176 +160 168 192 +200 232 240 +128 200 240 +176 192 208 +248 248 248 +8 152 224 +104 192 232 +112 152 192 +200 208 216 +72 152 200 +176 200 216 +152 192 216 +0 0 0 diff --git a/graphics/items/icon_palettes/sticky_barb.pal b/graphics/items/icon_palettes/sticky_barb.pal new file mode 100644 index 0000000000..a179f618f6 --- /dev/null +++ b/graphics/items/icon_palettes/sticky_barb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +185 229 229 +109 177 194 +77 126 142 +238 247 247 +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/items/icon_palettes/stone_plate.pal b/graphics/items/icon_palettes/stone_plate.pal new file mode 100644 index 0000000000..c67cde98d2 --- /dev/null +++ b/graphics/items/icon_palettes/stone_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +173 156 130 +228 218 173 +237 237 192 +209 182 138 +156 130 63 +138 96 63 +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/items/icon_palettes/strange_souvenir.pal b/graphics/items/icon_palettes/strange_souvenir.pal new file mode 100644 index 0000000000..16a1ddadb6 --- /dev/null +++ b/graphics/items/icon_palettes/strange_souvenir.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +240 232 176 +184 168 104 +152 128 64 +96 80 24 +72 56 48 +48 48 48 +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/items/icon_palettes/strawberry_sweet.pal b/graphics/items/icon_palettes/strawberry_sweet.pal new file mode 100644 index 0000000000..90dd56390c --- /dev/null +++ b/graphics/items/icon_palettes/strawberry_sweet.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 64 64 +48 48 48 +176 40 40 +248 160 160 +208 32 32 +240 104 104 +248 56 56 +248 192 200 +200 120 120 +248 96 96 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/sun_stone.pal b/graphics/items/icon_palettes/sun_stone.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/super_lure.pal b/graphics/items/icon_palettes/super_lure.pal new file mode 100644 index 0000000000..8064ffc4e2 --- /dev/null +++ b/graphics/items/icon_palettes/super_lure.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 128 128 +248 248 248 +230 246 255 +189 213 213 +148 189 205 +115 156 172 +98 115 139 +65 82 98 +205 238 255 +139 197 238 +82 164 222 +57 106 205 +41 74 139 +48 48 48 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/super_potion.pal b/graphics/items/icon_palettes/super_potion.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/super_repel.pal b/graphics/items/icon_palettes/super_repel.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/super_rod.pal b/graphics/items/icon_palettes/super_rod.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/surprise_mulch.pal b/graphics/items/icon_palettes/surprise_mulch.pal new file mode 100644 index 0000000000..a4c6db4eb7 --- /dev/null +++ b/graphics/items/icon_palettes/surprise_mulch.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 208 248 +248 160 216 +232 104 176 +232 200 152 +216 184 104 +180 136 72 +128 96 56 +48 48 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/items/icon_palettes/swampertite.pal b/graphics/items/icon_palettes/swampertite.pal new file mode 100644 index 0000000000..a35c06e7e0 --- /dev/null +++ b/graphics/items/icon_palettes/swampertite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +232 104 88 +96 128 144 +72 80 88 +112 176 216 +232 168 160 +176 208 224 +104 144 168 +248 248 248 +168 104 104 +176 144 152 +136 160 192 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/sweet_apple.pal b/graphics/items/icon_palettes/sweet_apple.pal new file mode 100644 index 0000000000..90465ef51d --- /dev/null +++ b/graphics/items/icon_palettes/sweet_apple.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 242 0 +246 120 121 +246 84 83 +239 43 41 +205 26 30 +155 25 26 +48 48 48 +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/items/icon_palettes/sweet_heart.pal b/graphics/items/icon_palettes/sweet_heart.pal new file mode 100755 index 0000000000..d572656987 --- /dev/null +++ b/graphics/items/icon_palettes/sweet_heart.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +82 82 82 +49 49 49 +165 123 41 +181 140 58 +197 148 74 +132 99 33 +90 66 25 +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/items/icon_palettes/swift_feather.pal b/graphics/items/icon_palettes/swift_feather.pal new file mode 100644 index 0000000000..359140d2cc --- /dev/null +++ b/graphics/items/icon_palettes/swift_feather.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +90 90 90 +206 239 255 +239 255 255 +49 49 49 +156 214 231 +82 156 66 +165 239 132 +82 198 66 +140 165 173 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/tamato_berry.pal b/graphics/items/icon_palettes/tamato_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/tanga_berry.pal b/graphics/items/icon_palettes/tanga_berry.pal new file mode 100755 index 0000000000..8950724c22 --- /dev/null +++ b/graphics/items/icon_palettes/tanga_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +240 232 56 +48 136 48 +56 168 56 +72 120 64 +192 176 40 +56 80 48 +64 200 64 +136 232 136 +168 160 32 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/tapunium_z.pal b/graphics/items/icon_palettes/tapunium_z.pal new file mode 100644 index 0000000000..cef51dd605 --- /dev/null +++ b/graphics/items/icon_palettes/tapunium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +222 205 57 +205 172 41 +255 255 156 +238 230 90 +255 255 230 +156 139 41 +164 156 65 +180 180 156 +139 123 24 +189 139 32 +222 197 49 +180 180 106 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/tart_apple.pal b/graphics/items/icon_palettes/tart_apple.pal new file mode 100644 index 0000000000..92c8604edc --- /dev/null +++ b/graphics/items/icon_palettes/tart_apple.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +192 248 248 +229 156 67 +244 121 39 +180 191 123 +123 175 69 +105 137 24 +248 87 80 +246 39 40 +200 34 31 +153 27 28 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/tea.pal b/graphics/items/icon_palettes/tea.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/teachy_tv.pal b/graphics/items/icon_palettes/teachy_tv.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/terrain_extender.pal b/graphics/items/icon_palettes/terrain_extender.pal new file mode 100644 index 0000000000..2ae8d133e8 --- /dev/null +++ b/graphics/items/icon_palettes/terrain_extender.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +49 49 49 +180 197 197 +123 139 139 +74 82 82 +255 255 255 +213 230 230 +49 106 106 +74 148 164 +131 213 213 +222 123 106 +222 65 41 +172 57 49 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/thick_club.pal b/graphics/items/icon_palettes/thick_club.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/throat_spray.pal b/graphics/items/icon_palettes/throat_spray.pal new file mode 100644 index 0000000000..2b78e54403 --- /dev/null +++ b/graphics/items/icon_palettes/throat_spray.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 192 248 +248 248 248 +192 232 216 +160 200 184 +128 168 152 +80 120 104 +48 48 48 +128 168 200 +96 120 168 +56 64 128 +128 144 152 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/thunder_stone.pal b/graphics/items/icon_palettes/thunder_stone.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/tm_case.pal b/graphics/items/icon_palettes/tm_case.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/town_map.pal b/graphics/items/icon_palettes/town_map.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/toxic_orb.pal b/graphics/items/icon_palettes/toxic_orb.pal new file mode 100644 index 0000000000..c4ddda687e --- /dev/null +++ b/graphics/items/icon_palettes/toxic_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +168 142 247 +185 85 229 +212 101 238 +159 69 212 +142 61 212 +229 177 238 +247 247 247 +117 54 212 +101 32 212 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/toxic_plate.pal b/graphics/items/icon_palettes/toxic_plate.pal new file mode 100644 index 0000000000..733aae9c7b --- /dev/null +++ b/graphics/items/icon_palettes/toxic_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +182 88 228 +209 156 237 +246 173 246 +192 122 255 +147 79 201 +112 56 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/items/icon_palettes/tri_pass.pal b/graphics/items/icon_palettes/tri_pass.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/tropic_mail.pal b/graphics/items/icon_palettes/tropic_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/twisted_spoon.pal b/graphics/items/icon_palettes/twisted_spoon.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/tyranitarite.pal b/graphics/items/icon_palettes/tyranitarite.pal new file mode 100644 index 0000000000..579e9c4198 --- /dev/null +++ b/graphics/items/icon_palettes/tyranitarite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +80 96 80 +184 40 48 +248 32 32 +128 160 104 +168 192 160 +248 160 152 +192 96 64 +248 248 248 +64 64 64 +96 120 88 +192 208 120 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/ultra_ball.pal b/graphics/items/icon_palettes/ultra_ball.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/ultranecrozium_z.pal b/graphics/items/icon_palettes/ultranecrozium_z.pal new file mode 100644 index 0000000000..366b1ba2d1 --- /dev/null +++ b/graphics/items/icon_palettes/ultranecrozium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +32 32 32 +255 246 205 +255 255 238 +180 156 98 +222 205 156 +255 255 230 +180 180 172 +156 148 115 +131 115 82 +230 222 172 +164 131 65 +180 180 148 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/up_grade.pal b/graphics/items/icon_palettes/upgrade.pal old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icon_palettes/up_grade.pal rename to graphics/items/icon_palettes/upgrade.pal diff --git a/graphics/items/icon_palettes/utility_umbrella.pal b/graphics/items/icon_palettes/utility_umbrella.pal new file mode 100644 index 0000000000..287da75374 --- /dev/null +++ b/graphics/items/icon_palettes/utility_umbrella.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +128 120 120 +104 104 104 +80 80 80 +64 64 64 +48 48 48 +208 208 208 +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/items/icon_palettes/venusaurite.pal b/graphics/items/icon_palettes/venusaurite.pal new file mode 100644 index 0000000000..3aadc10929 --- /dev/null +++ b/graphics/items/icon_palettes/venusaurite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +48 48 48 +24 128 128 +184 72 136 +248 80 192 +96 168 200 +152 192 168 +176 152 184 +176 128 200 +248 248 248 +16 104 72 +40 144 184 +120 216 216 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/vs_seeker.pal b/graphics/items/icon_palettes/vs_seeker.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/wacan_berry.pal b/graphics/items/icon_palettes/wacan_berry.pal new file mode 100755 index 0000000000..8569be7272 --- /dev/null +++ b/graphics/items/icon_palettes/wacan_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +248 240 48 +208 200 16 +144 240 136 +56 112 72 +80 216 120 +64 168 96 +248 248 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/items/icon_palettes/wailmer_pail.pal b/graphics/items/icon_palettes/wailmer_pail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/water_gem.pal b/graphics/items/icon_palettes/water_gem.pal new file mode 100644 index 0000000000..586db9a6e4 --- /dev/null +++ b/graphics/items/icon_palettes/water_gem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +32 32 32 +64 160 248 +120 200 248 +48 144 248 +208 248 248 +0 120 208 +0 80 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/items/icon_palettes/water_memory.pal b/graphics/items/icon_palettes/water_memory.pal new file mode 100755 index 0000000000..17979fd4c2 --- /dev/null +++ b/graphics/items/icon_palettes/water_memory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +115 180 238 +180 213 246 +238 246 246 +205 230 246 +139 197 238 +164 205 246 +255 255 255 +90 172 238 +74 164 238 +123 123 148 +98 98 123 +131 172 180 +106 139 139 +164 189 197 diff --git a/graphics/items/icon_palettes/water_stone.pal b/graphics/items/icon_palettes/water_stone.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/water_tm_hm.pal b/graphics/items/icon_palettes/water_tm_hm.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/waterium_z.pal b/graphics/items/icon_palettes/waterium_z.pal new file mode 100644 index 0000000000..748d08b5be --- /dev/null +++ b/graphics/items/icon_palettes/waterium_z.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +49 49 49 +41 156 230 +8 115 213 +98 197 255 +230 255 255 +156 255 246 +24 139 222 +0 90 197 +0 82 148 +32 106 164 +65 139 180 +164 180 180 +24 106 164 +106 180 172 +0 0 0 diff --git a/graphics/items/icon_palettes/watmel_berry.pal b/graphics/items/icon_palettes/watmel_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/wave_incense.pal b/graphics/items/icon_palettes/wave_incense.pal new file mode 100755 index 0000000000..86abf60769 --- /dev/null +++ b/graphics/items/icon_palettes/wave_incense.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +48 88 152 +40 200 240 +64 144 192 +72 240 248 +128 224 240 +176 240 248 +112 96 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/items/icon_palettes/wave_mail.pal b/graphics/items/icon_palettes/wave_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/weakness_policy.pal b/graphics/items/icon_palettes/weakness_policy.pal new file mode 100755 index 0000000000..46a59e35f9 --- /dev/null +++ b/graphics/items/icon_palettes/weakness_policy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +214 247 198 +132 140 247 +165 198 214 +189 214 206 +231 148 148 +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/items/icon_palettes/wepear_berry.pal b/graphics/items/icon_palettes/wepear_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/whipped_dream.pal b/graphics/items/icon_palettes/whipped_dream.pal new file mode 100755 index 0000000000..3b6440bbbd --- /dev/null +++ b/graphics/items/icon_palettes/whipped_dream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +214 90 132 +198 49 90 +140 41 74 +255 148 189 +239 206 198 +255 255 255 +189 132 132 +222 181 181 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/white_apricorn.pal b/graphics/items/icon_palettes/white_apricorn.pal new file mode 100755 index 0000000000..53472131bb --- /dev/null +++ b/graphics/items/icon_palettes/white_apricorn.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +231 181 140 +115 82 66 +165 99 41 +255 255 255 +181 198 214 +206 148 99 +214 222 231 +115 123 132 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/white_flute.pal b/graphics/items/icon_palettes/white_flute.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/white_herb.pal b/graphics/items/icon_palettes/white_herb.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/wide_lens.pal b/graphics/items/icon_palettes/wide_lens.pal new file mode 100644 index 0000000000..cedef34fa0 --- /dev/null +++ b/graphics/items/icon_palettes/wide_lens.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +220 151 101 +212 101 39 +117 39 18 +247 247 247 +85 85 85 +11 126 151 +18 194 247 +151 151 151 +168 54 25 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/wiki_berry.pal b/graphics/items/icon_palettes/wiki_berry.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/wise_glasses.pal b/graphics/items/icon_palettes/wise_glasses.pal new file mode 100644 index 0000000000..1d03864d74 --- /dev/null +++ b/graphics/items/icon_palettes/wise_glasses.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +61 54 61 +39 39 39 +85 77 85 +247 247 247 +85 134 134 +159 247 247 +126 194 194 +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/items/icon_palettes/wishing_piece.pal b/graphics/items/icon_palettes/wishing_piece.pal new file mode 100644 index 0000000000..898b8b36a0 --- /dev/null +++ b/graphics/items/icon_palettes/wishing_piece.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +104 104 176 +76 88 160 +56 64 136 +40 48 120 +40 48 96 +48 48 72 +32 32 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/items/icon_palettes/wood_mail.pal b/graphics/items/icon_palettes/wood_mail.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/x_accuracy.pal b/graphics/items/icon_palettes/x_accuracy.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/x_attack.pal b/graphics/items/icon_palettes/x_attack.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/x_defend.pal b/graphics/items/icon_palettes/x_defend.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/x_special.pal b/graphics/items/icon_palettes/x_special.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/x_special_defense.pal b/graphics/items/icon_palettes/x_special_defense.pal new file mode 100755 index 0000000000..548816d06b --- /dev/null +++ b/graphics/items/icon_palettes/x_special_defense.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +64 134 134 +42 42 42 +127 134 134 +184 198 198 +219 219 219 +191 219 219 +92 176 176 +78 141 141 +28 92 92 +148 198 198 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/x_speed.pal b/graphics/items/icon_palettes/x_speed.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/yache_berry.pal b/graphics/items/icon_palettes/yache_berry.pal new file mode 100755 index 0000000000..2b15404f47 --- /dev/null +++ b/graphics/items/icon_palettes/yache_berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +48 48 48 +32 216 80 +56 168 88 +40 88 48 +24 128 168 +32 160 192 +120 216 224 +64 192 216 +192 240 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/yellow_apricorn.pal b/graphics/items/icon_palettes/yellow_apricorn.pal new file mode 100755 index 0000000000..b6004717b8 --- /dev/null +++ b/graphics/items/icon_palettes/yellow_apricorn.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +231 181 140 +115 82 66 +165 99 41 +239 206 49 +198 132 8 +206 148 99 +255 231 132 +255 255 255 +222 173 24 +123 90 24 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/yellow_flute.pal b/graphics/items/icon_palettes/yellow_flute.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/yellow_mint.pal b/graphics/items/icon_palettes/yellow_mint.pal new file mode 100644 index 0000000000..c4692d9a3f --- /dev/null +++ b/graphics/items/icon_palettes/yellow_mint.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +248 248 232 +248 232 168 +224 208 136 +200 200 168 +136 120 80 +88 80 48 +40 40 40 +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/items/icon_palettes/yellow_nectar.pal b/graphics/items/icon_palettes/yellow_nectar.pal new file mode 100755 index 0000000000..bebf85a5ff --- /dev/null +++ b/graphics/items/icon_palettes/yellow_nectar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 255 +49 49 49 +230 172 0 +255 222 82 +197 139 0 +255 246 213 +90 65 65 +123 90 82 +148 98 82 +189 148 156 +115 74 65 +123 74 74 +255 197 189 +255 123 115 +189 90 90 +0 0 0 diff --git a/graphics/items/icon_palettes/yellow_scarf.pal b/graphics/items/icon_palettes/yellow_scarf.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/yellow_shard.pal b/graphics/items/icon_palettes/yellow_shard.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/z_power_ring.pal b/graphics/items/icon_palettes/z_power_ring.pal new file mode 100644 index 0000000000..2c3b5951af --- /dev/null +++ b/graphics/items/icon_palettes/z_power_ring.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +240 248 248 +176 176 176 +136 136 136 +128 128 128 +104 104 104 +96 96 96 +80 80 80 +64 64 64 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/z_ring.pal b/graphics/items/icon_palettes/z_ring.pal new file mode 100644 index 0000000000..8bb11edd5a --- /dev/null +++ b/graphics/items/icon_palettes/z_ring.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 191 231 +90 74 90 +131 131 139 +139 172 189 +49 49 49 +222 255 255 +197 222 213 +139 156 180 +255 255 255 +238 246 246 +106 98 106 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/zap_plate.pal b/graphics/items/icon_palettes/zap_plate.pal new file mode 100644 index 0000000000..074a89879d --- /dev/null +++ b/graphics/items/icon_palettes/zap_plate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +40 40 40 +237 156 63 +246 218 112 +246 228 130 +255 192 88 +173 112 40 +130 96 33 +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/items/icon_palettes/zinc.pal b/graphics/items/icon_palettes/zinc.pal old mode 100644 new mode 100755 diff --git a/graphics/items/icon_palettes/zoom_lens.pal b/graphics/items/icon_palettes/zoom_lens.pal new file mode 100644 index 0000000000..ff950851c0 --- /dev/null +++ b/graphics/items/icon_palettes/zoom_lens.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 128 +39 39 39 +238 220 126 +185 177 46 +85 85 46 +203 61 61 +134 32 32 +142 134 77 +101 185 247 +247 247 247 +229 126 126 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/zygarde_cube.pal b/graphics/items/icon_palettes/zygarde_cube.pal new file mode 100644 index 0000000000..3358a67c8c --- /dev/null +++ b/graphics/items/icon_palettes/zygarde_cube.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +232 248 232 +152 216 48 +128 152 32 +104 120 48 +152 144 144 +120 104 104 +88 80 80 +64 56 56 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icons/ability_capsule.png b/graphics/items/icons/ability_capsule.png new file mode 100755 index 0000000000..4cb366137f Binary files /dev/null and b/graphics/items/icons/ability_capsule.png differ diff --git a/graphics/items/icons/ability_patch.png b/graphics/items/icons/ability_patch.png new file mode 100644 index 0000000000..acbef74623 Binary files /dev/null and b/graphics/items/icons/ability_patch.png differ diff --git a/graphics/items/icons/abomasite.png b/graphics/items/icons/abomasite.png new file mode 100644 index 0000000000..4442f21029 Binary files /dev/null and b/graphics/items/icons/abomasite.png differ diff --git a/graphics/items/icons/absolite.png b/graphics/items/icons/absolite.png new file mode 100644 index 0000000000..786aab0732 Binary files /dev/null and b/graphics/items/icons/absolite.png differ diff --git a/graphics/items/icons/absorb_bulb.png b/graphics/items/icons/absorb_bulb.png new file mode 100755 index 0000000000..d958ab3684 Binary files /dev/null and b/graphics/items/icons/absorb_bulb.png differ diff --git a/graphics/items/icons/acro_bike.png b/graphics/items/icons/acro_bike.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/adamant_orb.png b/graphics/items/icons/adamant_orb.png new file mode 100644 index 0000000000..5e4f6b2995 Binary files /dev/null and b/graphics/items/icons/adamant_orb.png differ diff --git a/graphics/items/icons/adrenaline_orb.png b/graphics/items/icons/adrenaline_orb.png new file mode 100644 index 0000000000..913366e118 Binary files /dev/null and b/graphics/items/icons/adrenaline_orb.png differ diff --git a/graphics/items/icons/aerodactylite.png b/graphics/items/icons/aerodactylite.png new file mode 100644 index 0000000000..e94dee6706 Binary files /dev/null and b/graphics/items/icons/aerodactylite.png differ diff --git a/graphics/items/icons/aggronite.png b/graphics/items/icons/aggronite.png new file mode 100644 index 0000000000..db5dab16fb Binary files /dev/null and b/graphics/items/icons/aggronite.png differ diff --git a/graphics/items/icons/aguav_berry.png b/graphics/items/icons/aguav_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/air_balloon.png b/graphics/items/icons/air_balloon.png new file mode 100755 index 0000000000..6ed3a9ad21 Binary files /dev/null and b/graphics/items/icons/air_balloon.png differ diff --git a/graphics/items/icons/alakazite.png b/graphics/items/icons/alakazite.png new file mode 100644 index 0000000000..dfed4caf3a Binary files /dev/null and b/graphics/items/icons/alakazite.png differ diff --git a/graphics/items/icons/aloraichium_z.png b/graphics/items/icons/aloraichium_z.png new file mode 100644 index 0000000000..50b6a8dfa1 Binary files /dev/null and b/graphics/items/icons/aloraichium_z.png differ diff --git a/graphics/items/icons/altarianite.png b/graphics/items/icons/altarianite.png new file mode 100644 index 0000000000..ca88b00029 Binary files /dev/null and b/graphics/items/icons/altarianite.png differ diff --git a/graphics/items/icons/ampharosite.png b/graphics/items/icons/ampharosite.png new file mode 100644 index 0000000000..717f4169b5 Binary files /dev/null and b/graphics/items/icons/ampharosite.png differ diff --git a/graphics/items/icons/amulet_coin.png b/graphics/items/icons/amulet_coin.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/antidote.png b/graphics/items/icons/antidote.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/apicot_berry.png b/graphics/items/icons/apicot_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/armor_fossil.png b/graphics/items/icons/armor_fossil.png new file mode 100755 index 0000000000..a24d2ec4da Binary files /dev/null and b/graphics/items/icons/armor_fossil.png differ diff --git a/graphics/items/icons/armorite_ore.png b/graphics/items/icons/armorite_ore.png new file mode 100644 index 0000000000..c08372afc0 Binary files /dev/null and b/graphics/items/icons/armorite_ore.png differ diff --git a/graphics/items/icons/aspear_berry.png b/graphics/items/icons/aspear_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/assault_vest.png b/graphics/items/icons/assault_vest.png new file mode 100644 index 0000000000..c42928b8bf Binary files /dev/null and b/graphics/items/icons/assault_vest.png differ diff --git a/graphics/items/icons/audinite.png b/graphics/items/icons/audinite.png new file mode 100644 index 0000000000..71aaf06af6 Binary files /dev/null and b/graphics/items/icons/audinite.png differ diff --git a/graphics/items/icons/aurora_ticket.png b/graphics/items/icons/aurora_ticket.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/babiri_berry.png b/graphics/items/icons/babiri_berry.png new file mode 100755 index 0000000000..aeca14e70a Binary files /dev/null and b/graphics/items/icons/babiri_berry.png differ diff --git a/graphics/items/icons/balm_mushroom.png b/graphics/items/icons/balm_mushroom.png new file mode 100644 index 0000000000..ba4373faad Binary files /dev/null and b/graphics/items/icons/balm_mushroom.png differ diff --git a/graphics/items/icons/banettite.png b/graphics/items/icons/banettite.png new file mode 100644 index 0000000000..7b3565ba6b Binary files /dev/null and b/graphics/items/icons/banettite.png differ diff --git a/graphics/items/icons/basement_key.png b/graphics/items/icons/basement_key.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/battle_stat_item.png b/graphics/items/icons/battle_stat_item.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/bead_mail.png b/graphics/items/icons/bead_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/beast_ball.png b/graphics/items/icons/beast_ball.png new file mode 100644 index 0000000000..3d25009fc3 Binary files /dev/null and b/graphics/items/icons/beast_ball.png differ diff --git a/graphics/items/icons/beedrillite.png b/graphics/items/icons/beedrillite.png new file mode 100644 index 0000000000..260c5834cf Binary files /dev/null and b/graphics/items/icons/beedrillite.png differ diff --git a/graphics/items/icons/belue_berry.png b/graphics/items/icons/belue_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/berry_juice.png b/graphics/items/icons/berry_juice.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/berry_pouch.png b/graphics/items/icons/berry_pouch.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/berry_sweet.png b/graphics/items/icons/berry_sweet.png new file mode 100644 index 0000000000..0c0f11dabd Binary files /dev/null and b/graphics/items/icons/berry_sweet.png differ diff --git a/graphics/items/icons/bicycle.png b/graphics/items/icons/bicycle.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/big_malasada.png b/graphics/items/icons/big_malasada.png new file mode 100755 index 0000000000..d24cd9e00d Binary files /dev/null and b/graphics/items/icons/big_malasada.png differ diff --git a/graphics/items/icons/big_mushroom.png b/graphics/items/icons/big_mushroom.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/big_nugget.png b/graphics/items/icons/big_nugget.png new file mode 100644 index 0000000000..3b30d2a7de Binary files /dev/null and b/graphics/items/icons/big_nugget.png differ diff --git a/graphics/items/icons/big_pearl.png b/graphics/items/icons/big_pearl.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/big_root.png b/graphics/items/icons/big_root.png new file mode 100644 index 0000000000..e857cc5f30 Binary files /dev/null and b/graphics/items/icons/big_root.png differ diff --git a/graphics/items/icons/bike_voucher.png b/graphics/items/icons/bike_voucher.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/binding_band.png b/graphics/items/icons/binding_band.png new file mode 100644 index 0000000000..9930640ef1 Binary files /dev/null and b/graphics/items/icons/binding_band.png differ diff --git a/graphics/items/icons/black_apricorn.png b/graphics/items/icons/black_apricorn.png new file mode 100755 index 0000000000..c80707e067 Binary files /dev/null and b/graphics/items/icons/black_apricorn.png differ diff --git a/graphics/items/icons/black_belt.png b/graphics/items/icons/black_belt.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/black_glasses.png b/graphics/items/icons/black_glasses.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/black_sludge.png b/graphics/items/icons/black_sludge.png new file mode 100644 index 0000000000..2e1fac755f Binary files /dev/null and b/graphics/items/icons/black_sludge.png differ diff --git a/graphics/items/icons/blastoisinite.png b/graphics/items/icons/blastoisinite.png new file mode 100644 index 0000000000..34b8233d9d Binary files /dev/null and b/graphics/items/icons/blastoisinite.png differ diff --git a/graphics/items/icons/blazikenite.png b/graphics/items/icons/blazikenite.png new file mode 100644 index 0000000000..f387154de3 Binary files /dev/null and b/graphics/items/icons/blazikenite.png differ diff --git a/graphics/items/icons/blue_apricorn.png b/graphics/items/icons/blue_apricorn.png new file mode 100755 index 0000000000..35d0ed23b2 Binary files /dev/null and b/graphics/items/icons/blue_apricorn.png differ diff --git a/graphics/items/icons/blue_orb.png b/graphics/items/icons/blue_orb.png new file mode 100644 index 0000000000..14374bf1d6 Binary files /dev/null and b/graphics/items/icons/blue_orb.png differ diff --git a/graphics/items/icons/bluk_berry.png b/graphics/items/icons/bluk_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/blunder_policy.png b/graphics/items/icons/blunder_policy.png new file mode 100644 index 0000000000..5004ecbcf9 Binary files /dev/null and b/graphics/items/icons/blunder_policy.png differ diff --git a/graphics/items/icons/bottle_cap.png b/graphics/items/icons/bottle_cap.png new file mode 100644 index 0000000000..b3f52c4221 Binary files /dev/null and b/graphics/items/icons/bottle_cap.png differ diff --git a/graphics/items/icons/bright_powder.png b/graphics/items/icons/bright_powder.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/bug_gem.png b/graphics/items/icons/bug_gem.png new file mode 100644 index 0000000000..0561d24d06 Binary files /dev/null and b/graphics/items/icons/bug_gem.png differ diff --git a/graphics/items/icons/bug_memory.png b/graphics/items/icons/bug_memory.png new file mode 100755 index 0000000000..5c4c090988 Binary files /dev/null and b/graphics/items/icons/bug_memory.png differ diff --git a/graphics/items/icons/buginium_z.png b/graphics/items/icons/buginium_z.png new file mode 100644 index 0000000000..99df0ef3ff Binary files /dev/null and b/graphics/items/icons/buginium_z.png differ diff --git a/graphics/items/icons/burn_drive.png b/graphics/items/icons/burn_drive.png new file mode 100644 index 0000000000..c83fbd3358 Binary files /dev/null and b/graphics/items/icons/burn_drive.png differ diff --git a/graphics/items/icons/cameruptite.png b/graphics/items/icons/cameruptite.png new file mode 100644 index 0000000000..f064b6da2e Binary files /dev/null and b/graphics/items/icons/cameruptite.png differ diff --git a/graphics/items/icons/card_key.png b/graphics/items/icons/card_key.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/casteliacone.png b/graphics/items/icons/casteliacone.png new file mode 100644 index 0000000000..47691d6238 Binary files /dev/null and b/graphics/items/icons/casteliacone.png differ diff --git a/graphics/items/icons/catching_charm.png b/graphics/items/icons/catching_charm.png new file mode 100644 index 0000000000..fbdf64be35 Binary files /dev/null and b/graphics/items/icons/catching_charm.png differ diff --git a/graphics/items/icons/cell_battery.png b/graphics/items/icons/cell_battery.png new file mode 100755 index 0000000000..6183bdb085 Binary files /dev/null and b/graphics/items/icons/cell_battery.png differ diff --git a/graphics/items/icons/charcoal.png b/graphics/items/icons/charcoal.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/charizardite_x.png b/graphics/items/icons/charizardite_x.png new file mode 100644 index 0000000000..a2986c638f Binary files /dev/null and b/graphics/items/icons/charizardite_x.png differ diff --git a/graphics/items/icons/charizardite_y.png b/graphics/items/icons/charizardite_y.png new file mode 100644 index 0000000000..f193100ed6 Binary files /dev/null and b/graphics/items/icons/charizardite_y.png differ diff --git a/graphics/items/icons/charti_berry.png b/graphics/items/icons/charti_berry.png new file mode 100755 index 0000000000..8848e18d4f Binary files /dev/null and b/graphics/items/icons/charti_berry.png differ diff --git a/graphics/items/icons/cheri_berry.png b/graphics/items/icons/cheri_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/cherish_ball.png b/graphics/items/icons/cherish_ball.png new file mode 100644 index 0000000000..7efdf22dc5 Binary files /dev/null and b/graphics/items/icons/cherish_ball.png differ diff --git a/graphics/items/icons/chesto_berry.png b/graphics/items/icons/chesto_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/chilan_berry.png b/graphics/items/icons/chilan_berry.png new file mode 100755 index 0000000000..d1516f7323 Binary files /dev/null and b/graphics/items/icons/chilan_berry.png differ diff --git a/graphics/items/icons/chill_drive.png b/graphics/items/icons/chill_drive.png new file mode 100644 index 0000000000..a2c7e98a68 Binary files /dev/null and b/graphics/items/icons/chill_drive.png differ diff --git a/graphics/items/icons/chipped_pot.png b/graphics/items/icons/chipped_pot.png new file mode 100644 index 0000000000..c77c8b90b4 Binary files /dev/null and b/graphics/items/icons/chipped_pot.png differ diff --git a/graphics/items/icons/choice_band.png b/graphics/items/icons/choice_band.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/choice_scarf.png b/graphics/items/icons/choice_scarf.png new file mode 100644 index 0000000000..51157fcc22 Binary files /dev/null and b/graphics/items/icons/choice_scarf.png differ diff --git a/graphics/items/icons/choice_specs.png b/graphics/items/icons/choice_specs.png new file mode 100644 index 0000000000..6c64cb26e4 Binary files /dev/null and b/graphics/items/icons/choice_specs.png differ diff --git a/graphics/items/icons/chople_berry.png b/graphics/items/icons/chople_berry.png new file mode 100755 index 0000000000..3fa84f379a Binary files /dev/null and b/graphics/items/icons/chople_berry.png differ diff --git a/graphics/items/icons/claw_fossil.png b/graphics/items/icons/claw_fossil.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/cleanse_tag.png b/graphics/items/icons/cleanse_tag.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/clever_feather.png b/graphics/items/icons/clever_feather.png new file mode 100644 index 0000000000..3cc0a3d5f4 Binary files /dev/null and b/graphics/items/icons/clever_feather.png differ diff --git a/graphics/items/icons/clover_sweet.png b/graphics/items/icons/clover_sweet.png new file mode 100644 index 0000000000..7b9e7f463f Binary files /dev/null and b/graphics/items/icons/clover_sweet.png differ diff --git a/graphics/items/icons/coba_berry.png b/graphics/items/icons/coba_berry.png new file mode 100755 index 0000000000..5ac21683e0 Binary files /dev/null and b/graphics/items/icons/coba_berry.png differ diff --git a/graphics/items/icons/coin_case.png b/graphics/items/icons/coin_case.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/colbur_berry.png b/graphics/items/icons/colbur_berry.png new file mode 100755 index 0000000000..56d46a52a2 Binary files /dev/null and b/graphics/items/icons/colbur_berry.png differ diff --git a/graphics/items/icons/comet_shard.png b/graphics/items/icons/comet_shard.png new file mode 100644 index 0000000000..7d6788b614 Binary files /dev/null and b/graphics/items/icons/comet_shard.png differ diff --git a/graphics/items/icons/contest_pass.png b/graphics/items/icons/contest_pass.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/cornn_berry.png b/graphics/items/icons/cornn_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/cover_fossil.png b/graphics/items/icons/cover_fossil.png new file mode 100755 index 0000000000..bc8bbe69b5 Binary files /dev/null and b/graphics/items/icons/cover_fossil.png differ diff --git a/graphics/items/icons/cracked_pot.png b/graphics/items/icons/cracked_pot.png new file mode 100644 index 0000000000..ffe570ad5c Binary files /dev/null and b/graphics/items/icons/cracked_pot.png differ diff --git a/graphics/items/icons/custap_berry.png b/graphics/items/icons/custap_berry.png new file mode 100755 index 0000000000..3fa594667d Binary files /dev/null and b/graphics/items/icons/custap_berry.png differ diff --git a/graphics/items/icons/damp_rock.png b/graphics/items/icons/damp_rock.png new file mode 100644 index 0000000000..fe908739e5 Binary files /dev/null and b/graphics/items/icons/damp_rock.png differ diff --git a/graphics/items/icons/dark_gem.png b/graphics/items/icons/dark_gem.png new file mode 100644 index 0000000000..947f041674 Binary files /dev/null and b/graphics/items/icons/dark_gem.png differ diff --git a/graphics/items/icons/dark_memory.png b/graphics/items/icons/dark_memory.png new file mode 100755 index 0000000000..258bd309bf Binary files /dev/null and b/graphics/items/icons/dark_memory.png differ diff --git a/graphics/items/icons/darkinium_z.png b/graphics/items/icons/darkinium_z.png new file mode 100644 index 0000000000..b1a89e2092 Binary files /dev/null and b/graphics/items/icons/darkinium_z.png differ diff --git a/graphics/items/icons/dawn_stone.png b/graphics/items/icons/dawn_stone.png new file mode 100755 index 0000000000..0465d18bad Binary files /dev/null and b/graphics/items/icons/dawn_stone.png differ diff --git a/graphics/items/icons/decidium_z.png b/graphics/items/icons/decidium_z.png new file mode 100644 index 0000000000..8f5596df35 Binary files /dev/null and b/graphics/items/icons/decidium_z.png differ diff --git a/graphics/items/icons/deep_sea_scale.png b/graphics/items/icons/deep_sea_scale.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/deep_sea_tooth.png b/graphics/items/icons/deep_sea_tooth.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/destiny_knot.png b/graphics/items/icons/destiny_knot.png new file mode 100644 index 0000000000..ceeb38d5c7 Binary files /dev/null and b/graphics/items/icons/destiny_knot.png differ diff --git a/graphics/items/icons/devon_goods.png b/graphics/items/icons/devon_parts.png old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icons/devon_goods.png rename to graphics/items/icons/devon_parts.png diff --git a/graphics/items/icons/devon_scope.png b/graphics/items/icons/devon_scope.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/diancite.png b/graphics/items/icons/diancite.png new file mode 100644 index 0000000000..5bb89f3edd Binary files /dev/null and b/graphics/items/icons/diancite.png differ diff --git a/graphics/items/icons/dive_ball.png b/graphics/items/icons/dive_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/dna_splicers.png b/graphics/items/icons/dna_splicers.png new file mode 100644 index 0000000000..9fc055de33 Binary files /dev/null and b/graphics/items/icons/dna_splicers.png differ diff --git a/graphics/items/icons/dome_fossil.png b/graphics/items/icons/dome_fossil.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/douse_drive.png b/graphics/items/icons/douse_drive.png new file mode 100644 index 0000000000..eee5ae35f1 Binary files /dev/null and b/graphics/items/icons/douse_drive.png differ diff --git a/graphics/items/icons/itemfinder.png b/graphics/items/icons/dowsing_machine.png old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icons/itemfinder.png rename to graphics/items/icons/dowsing_machine.png diff --git a/graphics/items/icons/draco_plate.png b/graphics/items/icons/draco_plate.png new file mode 100644 index 0000000000..9b08c31c8d Binary files /dev/null and b/graphics/items/icons/draco_plate.png differ diff --git a/graphics/items/icons/dragon_fang.png b/graphics/items/icons/dragon_fang.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/dragon_gem.png b/graphics/items/icons/dragon_gem.png new file mode 100644 index 0000000000..2d41c858c1 Binary files /dev/null and b/graphics/items/icons/dragon_gem.png differ diff --git a/graphics/items/icons/dragon_memory.png b/graphics/items/icons/dragon_memory.png new file mode 100755 index 0000000000..d073dace31 Binary files /dev/null and b/graphics/items/icons/dragon_memory.png differ diff --git a/graphics/items/icons/dragon_scale.png b/graphics/items/icons/dragon_scale.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/dragonium_z.png b/graphics/items/icons/dragonium_z.png new file mode 100644 index 0000000000..2659b507cd Binary files /dev/null and b/graphics/items/icons/dragonium_z.png differ diff --git a/graphics/items/icons/dread_plate.png b/graphics/items/icons/dread_plate.png new file mode 100644 index 0000000000..f93493f97b Binary files /dev/null and b/graphics/items/icons/dread_plate.png differ diff --git a/graphics/items/icons/dream_ball.png b/graphics/items/icons/dream_ball.png new file mode 100644 index 0000000000..e429add9e0 Binary files /dev/null and b/graphics/items/icons/dream_ball.png differ diff --git a/graphics/items/icons/dream_mail.png b/graphics/items/icons/dream_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/dubious_disc.png b/graphics/items/icons/dubious_disc.png new file mode 100755 index 0000000000..bf2ab2fc0f Binary files /dev/null and b/graphics/items/icons/dubious_disc.png differ diff --git a/graphics/items/icons/durin_berry.png b/graphics/items/icons/durin_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/dusk_ball.png b/graphics/items/icons/dusk_ball.png new file mode 100644 index 0000000000..a723c095ba Binary files /dev/null and b/graphics/items/icons/dusk_ball.png differ diff --git a/graphics/items/icons/dusk_stone.png b/graphics/items/icons/dusk_stone.png new file mode 100755 index 0000000000..e928b25167 Binary files /dev/null and b/graphics/items/icons/dusk_stone.png differ diff --git a/graphics/items/icons/dynamax_band.png b/graphics/items/icons/dynamax_band.png new file mode 100644 index 0000000000..726fd069b1 Binary files /dev/null and b/graphics/items/icons/dynamax_band.png differ diff --git a/graphics/items/icons/dynamax_candy.png b/graphics/items/icons/dynamax_candy.png new file mode 100644 index 0000000000..8c3c3edf11 Binary files /dev/null and b/graphics/items/icons/dynamax_candy.png differ diff --git a/graphics/items/icons/dynite_ore.png b/graphics/items/icons/dynite_ore.png new file mode 100644 index 0000000000..3599f6a476 Binary files /dev/null and b/graphics/items/icons/dynite_ore.png differ diff --git a/graphics/items/icons/earth_plate.png b/graphics/items/icons/earth_plate.png new file mode 100644 index 0000000000..688b24be35 Binary files /dev/null and b/graphics/items/icons/earth_plate.png differ diff --git a/graphics/items/icons/eevium_z.png b/graphics/items/icons/eevium_z.png new file mode 100644 index 0000000000..1ea894c5fb Binary files /dev/null and b/graphics/items/icons/eevium_z.png differ diff --git a/graphics/items/icons/eject_button.png b/graphics/items/icons/eject_button.png new file mode 100755 index 0000000000..a0492ed6e0 Binary files /dev/null and b/graphics/items/icons/eject_button.png differ diff --git a/graphics/items/icons/eject_pack.png b/graphics/items/icons/eject_pack.png new file mode 100644 index 0000000000..54a590ed9c Binary files /dev/null and b/graphics/items/icons/eject_pack.png differ diff --git a/graphics/items/icons/electirizer.png b/graphics/items/icons/electirizer.png new file mode 100755 index 0000000000..73f6f8f26e Binary files /dev/null and b/graphics/items/icons/electirizer.png differ diff --git a/graphics/items/icons/electric_gem.png b/graphics/items/icons/electric_gem.png new file mode 100644 index 0000000000..88e604f182 Binary files /dev/null and b/graphics/items/icons/electric_gem.png differ diff --git a/graphics/items/icons/electric_memory.png b/graphics/items/icons/electric_memory.png new file mode 100755 index 0000000000..ce9a8f3624 Binary files /dev/null and b/graphics/items/icons/electric_memory.png differ diff --git a/graphics/items/icons/electric_seed.png b/graphics/items/icons/electric_seed.png new file mode 100644 index 0000000000..cdcac30ae3 Binary files /dev/null and b/graphics/items/icons/electric_seed.png differ diff --git a/graphics/items/icons/electrium_z.png b/graphics/items/icons/electrium_z.png new file mode 100644 index 0000000000..8ca1d826e4 Binary files /dev/null and b/graphics/items/icons/electrium_z.png differ diff --git a/graphics/items/icons/energy_root.png b/graphics/items/icons/energy_root.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/enigma_berry.png b/graphics/items/icons/enigma_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/eon_ticket.png b/graphics/items/icons/eon_ticket.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/escape_rope.png b/graphics/items/icons/escape_rope.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/ether.png b/graphics/items/icons/ether.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/everstone.png b/graphics/items/icons/everstone.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/eviolite.png b/graphics/items/icons/eviolite.png new file mode 100644 index 0000000000..c08cc59506 Binary files /dev/null and b/graphics/items/icons/eviolite.png differ diff --git a/graphics/items/icons/exp_candy_l.png b/graphics/items/icons/exp_candy_l.png new file mode 100644 index 0000000000..e63abfeaf3 Binary files /dev/null and b/graphics/items/icons/exp_candy_l.png differ diff --git a/graphics/items/icons/exp_candy_m.png b/graphics/items/icons/exp_candy_m.png new file mode 100644 index 0000000000..74cd8a0841 Binary files /dev/null and b/graphics/items/icons/exp_candy_m.png differ diff --git a/graphics/items/icons/exp_candy_s.png b/graphics/items/icons/exp_candy_s.png new file mode 100644 index 0000000000..ae37524f8e Binary files /dev/null and b/graphics/items/icons/exp_candy_s.png differ diff --git a/graphics/items/icons/exp_candy_xl.png b/graphics/items/icons/exp_candy_xl.png new file mode 100644 index 0000000000..abc1541ed3 Binary files /dev/null and b/graphics/items/icons/exp_candy_xl.png differ diff --git a/graphics/items/icons/exp_candy_xs.png b/graphics/items/icons/exp_candy_xs.png new file mode 100644 index 0000000000..6faac9fc00 Binary files /dev/null and b/graphics/items/icons/exp_candy_xs.png differ diff --git a/graphics/items/icons/exp_charm.png b/graphics/items/icons/exp_charm.png new file mode 100644 index 0000000000..2b014c25e2 Binary files /dev/null and b/graphics/items/icons/exp_charm.png differ diff --git a/graphics/items/icons/exp_share.png b/graphics/items/icons/exp_share.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/expert_belt.png b/graphics/items/icons/expert_belt.png new file mode 100644 index 0000000000..bc00454907 Binary files /dev/null and b/graphics/items/icons/expert_belt.png differ diff --git a/graphics/items/icons/fab_mail.png b/graphics/items/icons/fab_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/fairium_z.png b/graphics/items/icons/fairium_z.png new file mode 100644 index 0000000000..fab5197aa1 Binary files /dev/null and b/graphics/items/icons/fairium_z.png differ diff --git a/graphics/items/icons/fairy_gem.png b/graphics/items/icons/fairy_gem.png new file mode 100644 index 0000000000..871f74426d Binary files /dev/null and b/graphics/items/icons/fairy_gem.png differ diff --git a/graphics/items/icons/fairy_memory.png b/graphics/items/icons/fairy_memory.png new file mode 100755 index 0000000000..fba8691280 Binary files /dev/null and b/graphics/items/icons/fairy_memory.png differ diff --git a/graphics/items/icons/fame_checker.png b/graphics/items/icons/fame_checker.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/fast_ball.png b/graphics/items/icons/fast_ball.png new file mode 100644 index 0000000000..2eb8ddd02a Binary files /dev/null and b/graphics/items/icons/fast_ball.png differ diff --git a/graphics/items/icons/fighting_gem.png b/graphics/items/icons/fighting_gem.png new file mode 100644 index 0000000000..7f4fc8b97d Binary files /dev/null and b/graphics/items/icons/fighting_gem.png differ diff --git a/graphics/items/icons/fighting_memory.png b/graphics/items/icons/fighting_memory.png new file mode 100755 index 0000000000..ad21a2d078 Binary files /dev/null and b/graphics/items/icons/fighting_memory.png differ diff --git a/graphics/items/icons/fightinium_z.png b/graphics/items/icons/fightinium_z.png new file mode 100644 index 0000000000..588c493f82 Binary files /dev/null and b/graphics/items/icons/fightinium_z.png differ diff --git a/graphics/items/icons/figy_berry.png b/graphics/items/icons/figy_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/fire_gem.png b/graphics/items/icons/fire_gem.png new file mode 100644 index 0000000000..deb8979bd8 Binary files /dev/null and b/graphics/items/icons/fire_gem.png differ diff --git a/graphics/items/icons/fire_memory.png b/graphics/items/icons/fire_memory.png new file mode 100755 index 0000000000..33116aed12 Binary files /dev/null and b/graphics/items/icons/fire_memory.png differ diff --git a/graphics/items/icons/fire_stone.png b/graphics/items/icons/fire_stone.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/firium_z.png b/graphics/items/icons/firium_z.png new file mode 100644 index 0000000000..84fb8eefef Binary files /dev/null and b/graphics/items/icons/firium_z.png differ diff --git a/graphics/items/icons/fist_plate.png b/graphics/items/icons/fist_plate.png new file mode 100644 index 0000000000..0142938d51 Binary files /dev/null and b/graphics/items/icons/fist_plate.png differ diff --git a/graphics/items/icons/flame_orb.png b/graphics/items/icons/flame_orb.png new file mode 100644 index 0000000000..e5e576f8af Binary files /dev/null and b/graphics/items/icons/flame_orb.png differ diff --git a/graphics/items/icons/flame_plate.png b/graphics/items/icons/flame_plate.png new file mode 100644 index 0000000000..6f78e5d020 Binary files /dev/null and b/graphics/items/icons/flame_plate.png differ diff --git a/graphics/items/icons/float_stone.png b/graphics/items/icons/float_stone.png new file mode 100644 index 0000000000..61f096fc36 Binary files /dev/null and b/graphics/items/icons/float_stone.png differ diff --git a/graphics/items/icons/flower_sweet.png b/graphics/items/icons/flower_sweet.png new file mode 100644 index 0000000000..97f6c4e443 Binary files /dev/null and b/graphics/items/icons/flower_sweet.png differ diff --git a/graphics/items/icons/fluffy_tail.png b/graphics/items/icons/fluffy_tail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/flute.png b/graphics/items/icons/flute.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/flying_gem.png b/graphics/items/icons/flying_gem.png new file mode 100644 index 0000000000..563e80f3bf Binary files /dev/null and b/graphics/items/icons/flying_gem.png differ diff --git a/graphics/items/icons/flying_memory.png b/graphics/items/icons/flying_memory.png new file mode 100755 index 0000000000..da413ba1ff Binary files /dev/null and b/graphics/items/icons/flying_memory.png differ diff --git a/graphics/items/icons/flyinium_z.png b/graphics/items/icons/flyinium_z.png new file mode 100644 index 0000000000..aadaf07061 Binary files /dev/null and b/graphics/items/icons/flyinium_z.png differ diff --git a/graphics/items/icons/focus_band.png b/graphics/items/icons/focus_band.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/focus_sash.png b/graphics/items/icons/focus_sash.png new file mode 100644 index 0000000000..e0df9798ef Binary files /dev/null and b/graphics/items/icons/focus_sash.png differ diff --git a/graphics/items/icons/fossilized_bird.png b/graphics/items/icons/fossilized_bird.png new file mode 100644 index 0000000000..725b5f891f Binary files /dev/null and b/graphics/items/icons/fossilized_bird.png differ diff --git a/graphics/items/icons/fossilized_dino.png b/graphics/items/icons/fossilized_dino.png new file mode 100644 index 0000000000..61b1907fdc Binary files /dev/null and b/graphics/items/icons/fossilized_dino.png differ diff --git a/graphics/items/icons/fossilized_drake.png b/graphics/items/icons/fossilized_drake.png new file mode 100644 index 0000000000..63adc30d88 Binary files /dev/null and b/graphics/items/icons/fossilized_drake.png differ diff --git a/graphics/items/icons/fossilized_fish.png b/graphics/items/icons/fossilized_fish.png new file mode 100644 index 0000000000..c2de7c009a Binary files /dev/null and b/graphics/items/icons/fossilized_fish.png differ diff --git a/graphics/items/icons/fresh_water.png b/graphics/items/icons/fresh_water.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/friend_ball.png b/graphics/items/icons/friend_ball.png new file mode 100644 index 0000000000..7c2c8ce147 Binary files /dev/null and b/graphics/items/icons/friend_ball.png differ diff --git a/graphics/items/icons/full_heal.png b/graphics/items/icons/full_heal.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/full_incense.png b/graphics/items/icons/full_incense.png new file mode 100755 index 0000000000..230927e085 Binary files /dev/null and b/graphics/items/icons/full_incense.png differ diff --git a/graphics/items/icons/galarica_cuff.png b/graphics/items/icons/galarica_cuff.png new file mode 100644 index 0000000000..a99bedc6e2 Binary files /dev/null and b/graphics/items/icons/galarica_cuff.png differ diff --git a/graphics/items/icons/galarica_twig.png b/graphics/items/icons/galarica_twig.png new file mode 100644 index 0000000000..28fabf7be5 Binary files /dev/null and b/graphics/items/icons/galarica_twig.png differ diff --git a/graphics/items/icons/galarica_wreath.png b/graphics/items/icons/galarica_wreath.png new file mode 100644 index 0000000000..21c094d65b Binary files /dev/null and b/graphics/items/icons/galarica_wreath.png differ diff --git a/graphics/items/icons/galladite.png b/graphics/items/icons/galladite.png new file mode 100644 index 0000000000..827b616cc3 Binary files /dev/null and b/graphics/items/icons/galladite.png differ diff --git a/graphics/items/icons/ganlon_berry.png b/graphics/items/icons/ganlon_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/garchompite.png b/graphics/items/icons/garchompite.png new file mode 100644 index 0000000000..0be15d5add Binary files /dev/null and b/graphics/items/icons/garchompite.png differ diff --git a/graphics/items/icons/gardevoirite.png b/graphics/items/icons/gardevoirite.png new file mode 100644 index 0000000000..4bb3a9a502 Binary files /dev/null and b/graphics/items/icons/gardevoirite.png differ diff --git a/graphics/items/icons/gem.png b/graphics/items/icons/gem.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/gengarite.png b/graphics/items/icons/gengarite.png new file mode 100644 index 0000000000..22ac015b9a Binary files /dev/null and b/graphics/items/icons/gengarite.png differ diff --git a/graphics/items/icons/genius_feather.png b/graphics/items/icons/genius_feather.png new file mode 100644 index 0000000000..5b27a029e0 Binary files /dev/null and b/graphics/items/icons/genius_feather.png differ diff --git a/graphics/items/icons/ghost_gem.png b/graphics/items/icons/ghost_gem.png new file mode 100644 index 0000000000..96e320e219 Binary files /dev/null and b/graphics/items/icons/ghost_gem.png differ diff --git a/graphics/items/icons/ghost_memory.png b/graphics/items/icons/ghost_memory.png new file mode 100755 index 0000000000..3041643aaa Binary files /dev/null and b/graphics/items/icons/ghost_memory.png differ diff --git a/graphics/items/icons/ghostium_z.png b/graphics/items/icons/ghostium_z.png new file mode 100644 index 0000000000..b3b9a90898 Binary files /dev/null and b/graphics/items/icons/ghostium_z.png differ diff --git a/graphics/items/icons/glalitite.png b/graphics/items/icons/glalitite.png new file mode 100644 index 0000000000..cea93a2cb3 Binary files /dev/null and b/graphics/items/icons/glalitite.png differ diff --git a/graphics/items/icons/glitter_mail.png b/graphics/items/icons/glitter_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/go_goggles.png b/graphics/items/icons/go_goggles.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/gold_teeth.png b/graphics/items/icons/gold_teeth.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/good_rod.png b/graphics/items/icons/good_rod.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/gracidea.png b/graphics/items/icons/gracidea.png new file mode 100755 index 0000000000..31bac3846c Binary files /dev/null and b/graphics/items/icons/gracidea.png differ diff --git a/graphics/items/icons/grass_gem.png b/graphics/items/icons/grass_gem.png new file mode 100644 index 0000000000..df57119b27 Binary files /dev/null and b/graphics/items/icons/grass_gem.png differ diff --git a/graphics/items/icons/grass_memory.png b/graphics/items/icons/grass_memory.png new file mode 100755 index 0000000000..646568c412 Binary files /dev/null and b/graphics/items/icons/grass_memory.png differ diff --git a/graphics/items/icons/grassium_z.png b/graphics/items/icons/grassium_z.png new file mode 100644 index 0000000000..6c62989301 Binary files /dev/null and b/graphics/items/icons/grassium_z.png differ diff --git a/graphics/items/icons/grassy_seed.png b/graphics/items/icons/grassy_seed.png new file mode 100644 index 0000000000..31f30aeb59 Binary files /dev/null and b/graphics/items/icons/grassy_seed.png differ diff --git a/graphics/items/icons/great_ball.png b/graphics/items/icons/great_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/green_apricorn.png b/graphics/items/icons/green_apricorn.png new file mode 100755 index 0000000000..dc821541bc Binary files /dev/null and b/graphics/items/icons/green_apricorn.png differ diff --git a/graphics/items/icons/grepa_berry.png b/graphics/items/icons/grepa_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/grip_claw.png b/graphics/items/icons/grip_claw.png new file mode 100644 index 0000000000..d76c6b75c2 Binary files /dev/null and b/graphics/items/icons/grip_claw.png differ diff --git a/graphics/items/icons/griseous_orb.png b/graphics/items/icons/griseous_orb.png new file mode 100644 index 0000000000..5140ea3acd Binary files /dev/null and b/graphics/items/icons/griseous_orb.png differ diff --git a/graphics/items/icons/ground_gem.png b/graphics/items/icons/ground_gem.png new file mode 100644 index 0000000000..27a8bf69d5 Binary files /dev/null and b/graphics/items/icons/ground_gem.png differ diff --git a/graphics/items/icons/ground_memory.png b/graphics/items/icons/ground_memory.png new file mode 100755 index 0000000000..0f9f31734d Binary files /dev/null and b/graphics/items/icons/ground_memory.png differ diff --git a/graphics/items/icons/groundium_z.png b/graphics/items/icons/groundium_z.png new file mode 100644 index 0000000000..1d76c0fd0e Binary files /dev/null and b/graphics/items/icons/groundium_z.png differ diff --git a/graphics/items/icons/gyaradosite.png b/graphics/items/icons/gyaradosite.png new file mode 100644 index 0000000000..5a6278df27 Binary files /dev/null and b/graphics/items/icons/gyaradosite.png differ diff --git a/graphics/items/icons/haban_berry.png b/graphics/items/icons/haban_berry.png new file mode 100755 index 0000000000..f413ea9e14 Binary files /dev/null and b/graphics/items/icons/haban_berry.png differ diff --git a/graphics/items/icons/harbor_mail.png b/graphics/items/icons/harbor_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/hard_stone.png b/graphics/items/icons/hard_stone.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/heal_ball.png b/graphics/items/icons/heal_ball.png new file mode 100644 index 0000000000..765c7326c0 Binary files /dev/null and b/graphics/items/icons/heal_ball.png differ diff --git a/graphics/items/icons/health_feather.png b/graphics/items/icons/health_feather.png new file mode 100644 index 0000000000..584cc4f134 Binary files /dev/null and b/graphics/items/icons/health_feather.png differ diff --git a/graphics/items/icons/heart_scale.png b/graphics/items/icons/heart_scale.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/heat_rock.png b/graphics/items/icons/heat_rock.png new file mode 100644 index 0000000000..60eae81696 Binary files /dev/null and b/graphics/items/icons/heat_rock.png differ diff --git a/graphics/items/icons/heavy_ball.png b/graphics/items/icons/heavy_ball.png new file mode 100644 index 0000000000..c66678ebb8 Binary files /dev/null and b/graphics/items/icons/heavy_ball.png differ diff --git a/graphics/items/icons/heavy_duty_boots.png b/graphics/items/icons/heavy_duty_boots.png new file mode 100644 index 0000000000..a42596c458 Binary files /dev/null and b/graphics/items/icons/heavy_duty_boots.png differ diff --git a/graphics/items/icons/helix_fossil.png b/graphics/items/icons/helix_fossil.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/heracronite.png b/graphics/items/icons/heracronite.png new file mode 100644 index 0000000000..400a876847 Binary files /dev/null and b/graphics/items/icons/heracronite.png differ diff --git a/graphics/items/icons/hm.png b/graphics/items/icons/hm.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/hondew_berry.png b/graphics/items/icons/hondew_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/honey.png b/graphics/items/icons/honey.png new file mode 100644 index 0000000000..386b520950 Binary files /dev/null and b/graphics/items/icons/honey.png differ diff --git a/graphics/items/icons/houndoominite.png b/graphics/items/icons/houndoominite.png new file mode 100644 index 0000000000..bca28d336c Binary files /dev/null and b/graphics/items/icons/houndoominite.png differ diff --git a/graphics/items/icons/hp_up.png b/graphics/items/icons/hp_up.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/iapapa_berry.png b/graphics/items/icons/iapapa_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/ice_gem.png b/graphics/items/icons/ice_gem.png new file mode 100644 index 0000000000..db87018fea Binary files /dev/null and b/graphics/items/icons/ice_gem.png differ diff --git a/graphics/items/icons/ice_memory.png b/graphics/items/icons/ice_memory.png new file mode 100755 index 0000000000..c0f7cd76e8 Binary files /dev/null and b/graphics/items/icons/ice_memory.png differ diff --git a/graphics/items/icons/ice_stone.png b/graphics/items/icons/ice_stone.png new file mode 100755 index 0000000000..ee5309544e Binary files /dev/null and b/graphics/items/icons/ice_stone.png differ diff --git a/graphics/items/icons/icicle_plate.png b/graphics/items/icons/icicle_plate.png new file mode 100644 index 0000000000..2d3e27bbba Binary files /dev/null and b/graphics/items/icons/icicle_plate.png differ diff --git a/graphics/items/icons/icium_z.png b/graphics/items/icons/icium_z.png new file mode 100644 index 0000000000..7cffbf32c8 Binary files /dev/null and b/graphics/items/icons/icium_z.png differ diff --git a/graphics/items/icons/icy_rock.png b/graphics/items/icons/icy_rock.png new file mode 100644 index 0000000000..800b12ec87 Binary files /dev/null and b/graphics/items/icons/icy_rock.png differ diff --git a/graphics/items/icons/in_battle_herb.png b/graphics/items/icons/in_battle_herb.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/incinium_z.png b/graphics/items/icons/incinium_z.png new file mode 100644 index 0000000000..62dd7c6922 Binary files /dev/null and b/graphics/items/icons/incinium_z.png differ diff --git a/graphics/items/icons/insect_plate.png b/graphics/items/icons/insect_plate.png new file mode 100644 index 0000000000..993e420da1 Binary files /dev/null and b/graphics/items/icons/insect_plate.png differ diff --git a/graphics/items/icons/iron_ball.png b/graphics/items/icons/iron_ball.png new file mode 100644 index 0000000000..e1f82bde1d Binary files /dev/null and b/graphics/items/icons/iron_ball.png differ diff --git a/graphics/items/icons/iron_plate.png b/graphics/items/icons/iron_plate.png new file mode 100644 index 0000000000..08a3cb8b99 Binary files /dev/null and b/graphics/items/icons/iron_plate.png differ diff --git a/graphics/items/icons/jaboca_berry.png b/graphics/items/icons/jaboca_berry.png new file mode 100755 index 0000000000..da6d029b08 Binary files /dev/null and b/graphics/items/icons/jaboca_berry.png differ diff --git a/graphics/items/icons/jade_orb.png b/graphics/items/icons/jade_orb.png new file mode 100644 index 0000000000..cc8468834d Binary files /dev/null and b/graphics/items/icons/jade_orb.png differ diff --git a/graphics/items/icons/jaw_fossil.png b/graphics/items/icons/jaw_fossil.png new file mode 100755 index 0000000000..a52a7579fd Binary files /dev/null and b/graphics/items/icons/jaw_fossil.png differ diff --git a/graphics/items/icons/kangaskhanite.png b/graphics/items/icons/kangaskhanite.png new file mode 100644 index 0000000000..2b614703e3 Binary files /dev/null and b/graphics/items/icons/kangaskhanite.png differ diff --git a/graphics/items/icons/kasib_berry.png b/graphics/items/icons/kasib_berry.png new file mode 100755 index 0000000000..c09fa20dec Binary files /dev/null and b/graphics/items/icons/kasib_berry.png differ diff --git a/graphics/items/icons/kebia_berry.png b/graphics/items/icons/kebia_berry.png new file mode 100755 index 0000000000..a4b5a43939 Binary files /dev/null and b/graphics/items/icons/kebia_berry.png differ diff --git a/graphics/items/icons/kee_berry.png b/graphics/items/icons/kee_berry.png new file mode 100755 index 0000000000..83749d1b83 Binary files /dev/null and b/graphics/items/icons/kee_berry.png differ diff --git a/graphics/items/icons/kelpsy_berry.png b/graphics/items/icons/kelpsy_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/key_stone.png b/graphics/items/icons/key_stone.png new file mode 100644 index 0000000000..efb07d80ee Binary files /dev/null and b/graphics/items/icons/key_stone.png differ diff --git a/graphics/items/icons/room1_key.png b/graphics/items/icons/key_to_room_1.png old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icons/room1_key.png rename to graphics/items/icons/key_to_room_1.png diff --git a/graphics/items/icons/room2_key.png b/graphics/items/icons/key_to_room_2.png old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icons/room2_key.png rename to graphics/items/icons/key_to_room_2.png diff --git a/graphics/items/icons/room4_key.png b/graphics/items/icons/key_to_room_4.png old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icons/room4_key.png rename to graphics/items/icons/key_to_room_4.png diff --git a/graphics/items/icons/room6_key.png b/graphics/items/icons/key_to_room_6.png old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icons/room6_key.png rename to graphics/items/icons/key_to_room_6.png diff --git a/graphics/items/icons/kings_rock.png b/graphics/items/icons/kings_rock.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/kommonium_z.png b/graphics/items/icons/kommonium_z.png new file mode 100644 index 0000000000..3883dfd5fe Binary files /dev/null and b/graphics/items/icons/kommonium_z.png differ diff --git a/graphics/items/icons/lagging_tail.png b/graphics/items/icons/lagging_tail.png new file mode 100644 index 0000000000..3299515b6c Binary files /dev/null and b/graphics/items/icons/lagging_tail.png differ diff --git a/graphics/items/icons/lansat_berry.png b/graphics/items/icons/lansat_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/large_potion.png b/graphics/items/icons/large_potion.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/latiasite.png b/graphics/items/icons/latiasite.png new file mode 100644 index 0000000000..af1d357ee5 Binary files /dev/null and b/graphics/items/icons/latiasite.png differ diff --git a/graphics/items/icons/latiosite.png b/graphics/items/icons/latiosite.png new file mode 100644 index 0000000000..f6d4e7d237 Binary files /dev/null and b/graphics/items/icons/latiosite.png differ diff --git a/graphics/items/icons/lava_cookie.png b/graphics/items/icons/lava_cookie.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/lax_incense.png b/graphics/items/icons/lax_incense.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/leaf_stone.png b/graphics/items/icons/leaf_stone.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/stick.png b/graphics/items/icons/leek.png old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icons/stick.png rename to graphics/items/icons/leek.png diff --git a/graphics/items/icons/leftovers.png b/graphics/items/icons/leftovers.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/lemonade.png b/graphics/items/icons/lemonade.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/leppa_berry.png b/graphics/items/icons/leppa_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/letter.png b/graphics/items/icons/letter.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/level_ball.png b/graphics/items/icons/level_ball.png new file mode 100644 index 0000000000..7943f8e858 Binary files /dev/null and b/graphics/items/icons/level_ball.png differ diff --git a/graphics/items/icons/liechi_berry.png b/graphics/items/icons/liechi_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/life_orb.png b/graphics/items/icons/life_orb.png new file mode 100644 index 0000000000..9a9ed7c682 Binary files /dev/null and b/graphics/items/icons/life_orb.png differ diff --git a/graphics/items/icons/lift_key.png b/graphics/items/icons/lift_key.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/light_ball.png b/graphics/items/icons/light_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/light_clay.png b/graphics/items/icons/light_clay.png new file mode 100644 index 0000000000..7cc3e63801 Binary files /dev/null and b/graphics/items/icons/light_clay.png differ diff --git a/graphics/items/icons/lopunnite.png b/graphics/items/icons/lopunnite.png new file mode 100644 index 0000000000..dcd8d95746 Binary files /dev/null and b/graphics/items/icons/lopunnite.png differ diff --git a/graphics/items/icons/love_ball.png b/graphics/items/icons/love_ball.png new file mode 100644 index 0000000000..0040eb0de4 Binary files /dev/null and b/graphics/items/icons/love_ball.png differ diff --git a/graphics/items/icons/love_sweet.png b/graphics/items/icons/love_sweet.png new file mode 100644 index 0000000000..d2dba09da6 Binary files /dev/null and b/graphics/items/icons/love_sweet.png differ diff --git a/graphics/items/icons/lucarionite.png b/graphics/items/icons/lucarionite.png new file mode 100644 index 0000000000..ea4955c8a0 Binary files /dev/null and b/graphics/items/icons/lucarionite.png differ diff --git a/graphics/items/icons/luck_incense.png b/graphics/items/icons/luck_incense.png new file mode 100755 index 0000000000..396ab2f613 Binary files /dev/null and b/graphics/items/icons/luck_incense.png differ diff --git a/graphics/items/icons/lucky_egg.png b/graphics/items/icons/lucky_egg.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/lucky_punch.png b/graphics/items/icons/lucky_punch.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/lum_berry.png b/graphics/items/icons/lum_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/luminous_moss.png b/graphics/items/icons/luminous_moss.png new file mode 100755 index 0000000000..6ee31c5e1b Binary files /dev/null and b/graphics/items/icons/luminous_moss.png differ diff --git a/graphics/items/icons/lumiose_galette.png b/graphics/items/icons/lumiose_galette.png new file mode 100644 index 0000000000..fd3868ad5b Binary files /dev/null and b/graphics/items/icons/lumiose_galette.png differ diff --git a/graphics/items/icons/lunalium_z.png b/graphics/items/icons/lunalium_z.png new file mode 100644 index 0000000000..d65973d388 Binary files /dev/null and b/graphics/items/icons/lunalium_z.png differ diff --git a/graphics/items/icons/lure.png b/graphics/items/icons/lure.png new file mode 100644 index 0000000000..8cc742d63a Binary files /dev/null and b/graphics/items/icons/lure.png differ diff --git a/graphics/items/icons/lure_ball.png b/graphics/items/icons/lure_ball.png new file mode 100644 index 0000000000..765049c75d Binary files /dev/null and b/graphics/items/icons/lure_ball.png differ diff --git a/graphics/items/icons/lustrous_orb.png b/graphics/items/icons/lustrous_orb.png new file mode 100644 index 0000000000..08b452aba9 Binary files /dev/null and b/graphics/items/icons/lustrous_orb.png differ diff --git a/graphics/items/icons/luxury_ball.png b/graphics/items/icons/luxury_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/lycanium_z.png b/graphics/items/icons/lycanium_z.png new file mode 100644 index 0000000000..f9e894a389 Binary files /dev/null and b/graphics/items/icons/lycanium_z.png differ diff --git a/graphics/items/icons/mach_bike.png b/graphics/items/icons/mach_bike.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/macho_brace.png b/graphics/items/icons/macho_brace.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/magma_emblem.png b/graphics/items/icons/magma_emblem.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/magmarizer.png b/graphics/items/icons/magmarizer.png new file mode 100755 index 0000000000..fcaf04b446 Binary files /dev/null and b/graphics/items/icons/magmarizer.png differ diff --git a/graphics/items/icons/magnet.png b/graphics/items/icons/magnet.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/mago_berry.png b/graphics/items/icons/mago_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/magost_berry.png b/graphics/items/icons/magost_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/manectite.png b/graphics/items/icons/manectite.png new file mode 100644 index 0000000000..af70ce0ae1 Binary files /dev/null and b/graphics/items/icons/manectite.png differ diff --git a/graphics/items/icons/maranga_berry.png b/graphics/items/icons/maranga_berry.png new file mode 100755 index 0000000000..2551c0167b Binary files /dev/null and b/graphics/items/icons/maranga_berry.png differ diff --git a/graphics/items/icons/marshadium_z.png b/graphics/items/icons/marshadium_z.png new file mode 100644 index 0000000000..fd34d2aa3c Binary files /dev/null and b/graphics/items/icons/marshadium_z.png differ diff --git a/graphics/items/icons/master_ball.png b/graphics/items/icons/master_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/mawilite.png b/graphics/items/icons/mawilite.png new file mode 100644 index 0000000000..8505274fdf Binary files /dev/null and b/graphics/items/icons/mawilite.png differ diff --git a/graphics/items/icons/max_honey.png b/graphics/items/icons/max_honey.png new file mode 100644 index 0000000000..aed9cc0d88 Binary files /dev/null and b/graphics/items/icons/max_honey.png differ diff --git a/graphics/items/icons/max_mushrooms.png b/graphics/items/icons/max_mushrooms.png new file mode 100644 index 0000000000..a5ebac8358 Binary files /dev/null and b/graphics/items/icons/max_mushrooms.png differ diff --git a/graphics/items/icons/max_revive.png b/graphics/items/icons/max_revive.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/meadow_plate.png b/graphics/items/icons/meadow_plate.png new file mode 100644 index 0000000000..5cec7fc167 Binary files /dev/null and b/graphics/items/icons/meadow_plate.png differ diff --git a/graphics/items/icons/mech_mail.png b/graphics/items/icons/mech_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/medichamite.png b/graphics/items/icons/medichamite.png new file mode 100644 index 0000000000..e494b4c03d Binary files /dev/null and b/graphics/items/icons/medichamite.png differ diff --git a/graphics/items/icons/mega_bracelet.png b/graphics/items/icons/mega_bracelet.png new file mode 100644 index 0000000000..5a09894748 Binary files /dev/null and b/graphics/items/icons/mega_bracelet.png differ diff --git a/graphics/items/icons/mega_ring.png b/graphics/items/icons/mega_ring.png new file mode 100644 index 0000000000..ea253ccac9 Binary files /dev/null and b/graphics/items/icons/mega_ring.png differ diff --git a/graphics/items/icons/metagrossite.png b/graphics/items/icons/metagrossite.png new file mode 100644 index 0000000000..9a936f4cf0 Binary files /dev/null and b/graphics/items/icons/metagrossite.png differ diff --git a/graphics/items/icons/metal_coat.png b/graphics/items/icons/metal_coat.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/metal_powder.png b/graphics/items/icons/metal_powder.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/meteorite.png b/graphics/items/icons/meteorite.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/metronome.png b/graphics/items/icons/metronome.png new file mode 100644 index 0000000000..4aa57f95e0 Binary files /dev/null and b/graphics/items/icons/metronome.png differ diff --git a/graphics/items/icons/mewnium_z.png b/graphics/items/icons/mewnium_z.png new file mode 100644 index 0000000000..34b332b397 Binary files /dev/null and b/graphics/items/icons/mewnium_z.png differ diff --git a/graphics/items/icons/mewtwonite_x.png b/graphics/items/icons/mewtwonite_x.png new file mode 100644 index 0000000000..5085bf2213 Binary files /dev/null and b/graphics/items/icons/mewtwonite_x.png differ diff --git a/graphics/items/icons/mewtwonite_y.png b/graphics/items/icons/mewtwonite_y.png new file mode 100644 index 0000000000..25209bb393 Binary files /dev/null and b/graphics/items/icons/mewtwonite_y.png differ diff --git a/graphics/items/icons/micle_berry.png b/graphics/items/icons/micle_berry.png new file mode 100755 index 0000000000..74e011d0e8 Binary files /dev/null and b/graphics/items/icons/micle_berry.png differ diff --git a/graphics/items/icons/mimikium_z.png b/graphics/items/icons/mimikium_z.png new file mode 100644 index 0000000000..f2c78d7e3b Binary files /dev/null and b/graphics/items/icons/mimikium_z.png differ diff --git a/graphics/items/icons/mind_plate.png b/graphics/items/icons/mind_plate.png new file mode 100644 index 0000000000..dfe89ddbb5 Binary files /dev/null and b/graphics/items/icons/mind_plate.png differ diff --git a/graphics/items/icons/mint.png b/graphics/items/icons/mint.png new file mode 100644 index 0000000000..d879eab8b5 Binary files /dev/null and b/graphics/items/icons/mint.png differ diff --git a/graphics/items/icons/miracle_seed.png b/graphics/items/icons/miracle_seed.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/misty_seed.png b/graphics/items/icons/misty_seed.png new file mode 100644 index 0000000000..58764aca50 Binary files /dev/null and b/graphics/items/icons/misty_seed.png differ diff --git a/graphics/items/icons/moomoo_milk.png b/graphics/items/icons/moomoo_milk.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/moon_ball.png b/graphics/items/icons/moon_ball.png new file mode 100644 index 0000000000..cc67522d46 Binary files /dev/null and b/graphics/items/icons/moon_ball.png differ diff --git a/graphics/items/icons/moon_stone.png b/graphics/items/icons/moon_stone.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/mulch.png b/graphics/items/icons/mulch.png new file mode 100644 index 0000000000..6e470a1086 Binary files /dev/null and b/graphics/items/icons/mulch.png differ diff --git a/graphics/items/icons/muscle_band.png b/graphics/items/icons/muscle_band.png new file mode 100644 index 0000000000..b374760a71 Binary files /dev/null and b/graphics/items/icons/muscle_band.png differ diff --git a/graphics/items/icons/muscle_feather.png b/graphics/items/icons/muscle_feather.png new file mode 100644 index 0000000000..5ebf263b25 Binary files /dev/null and b/graphics/items/icons/muscle_feather.png differ diff --git a/graphics/items/icons/mystic_ticket.png b/graphics/items/icons/mystic_ticket.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/mystic_water.png b/graphics/items/icons/mystic_water.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/nanab_berry.png b/graphics/items/icons/nanab_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/necrozma_fuser.png b/graphics/items/icons/necrozma_fuser.png new file mode 100644 index 0000000000..3218fd20e3 Binary files /dev/null and b/graphics/items/icons/necrozma_fuser.png differ diff --git a/graphics/items/icons/nest_ball.png b/graphics/items/icons/nest_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/net_ball.png b/graphics/items/icons/net_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/never_melt_ice.png b/graphics/items/icons/never_melt_ice.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/nomel_berry.png b/graphics/items/icons/nomel_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/normal_gem.png b/graphics/items/icons/normal_gem.png new file mode 100644 index 0000000000..c57142c324 Binary files /dev/null and b/graphics/items/icons/normal_gem.png differ diff --git a/graphics/items/icons/normalium_z.png b/graphics/items/icons/normalium_z.png new file mode 100644 index 0000000000..8cee1de05b Binary files /dev/null and b/graphics/items/icons/normalium_z.png differ diff --git a/graphics/items/icons/nugget.png b/graphics/items/icons/nugget.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/oaks_parcel.png b/graphics/items/icons/oaks_parcel.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/occa_berry.png b/graphics/items/icons/occa_berry.png new file mode 100755 index 0000000000..05d9860fb5 Binary files /dev/null and b/graphics/items/icons/occa_berry.png differ diff --git a/graphics/items/icons/odd_incense.png b/graphics/items/icons/odd_incense.png new file mode 100755 index 0000000000..11c7d24f7d Binary files /dev/null and b/graphics/items/icons/odd_incense.png differ diff --git a/graphics/items/icons/odd_keystone.png b/graphics/items/icons/odd_keystone.png new file mode 100755 index 0000000000..8ef2d3cdb5 Binary files /dev/null and b/graphics/items/icons/odd_keystone.png differ diff --git a/graphics/items/icons/old_amber.png b/graphics/items/icons/old_amber.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/old_gateau.png b/graphics/items/icons/old_gateau.png new file mode 100755 index 0000000000..064c997a53 Binary files /dev/null and b/graphics/items/icons/old_gateau.png differ diff --git a/graphics/items/icons/old_rod.png b/graphics/items/icons/old_rod.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/old_sea_map.png b/graphics/items/icons/old_sea_map.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/oran_berry.png b/graphics/items/icons/oran_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/orange_mail.png b/graphics/items/icons/orange_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/orb.png b/graphics/items/icons/orb.png deleted file mode 100644 index 0a3e182923..0000000000 Binary files a/graphics/items/icons/orb.png and /dev/null differ diff --git a/graphics/items/icons/oval_charm.png b/graphics/items/icons/oval_charm.png new file mode 100644 index 0000000000..25809907a5 Binary files /dev/null and b/graphics/items/icons/oval_charm.png differ diff --git a/graphics/items/icons/oval_stone.png b/graphics/items/icons/oval_stone.png new file mode 100755 index 0000000000..27e0a7ccf2 Binary files /dev/null and b/graphics/items/icons/oval_stone.png differ diff --git a/graphics/items/icons/pamtre_berry.png b/graphics/items/icons/pamtre_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/park_ball.png b/graphics/items/icons/park_ball.png new file mode 100644 index 0000000000..c527ac1cc8 Binary files /dev/null and b/graphics/items/icons/park_ball.png differ diff --git a/graphics/items/icons/passho_berry.png b/graphics/items/icons/passho_berry.png new file mode 100755 index 0000000000..cdf3756078 Binary files /dev/null and b/graphics/items/icons/passho_berry.png differ diff --git a/graphics/items/icons/payapa_berry.png b/graphics/items/icons/payapa_berry.png new file mode 100755 index 0000000000..fe021c473e Binary files /dev/null and b/graphics/items/icons/payapa_berry.png differ diff --git a/graphics/items/icons/pearl.png b/graphics/items/icons/pearl.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/pearl_string.png b/graphics/items/icons/pearl_string.png new file mode 100644 index 0000000000..a61a9aa66b Binary files /dev/null and b/graphics/items/icons/pearl_string.png differ diff --git a/graphics/items/icons/pecha_berry.png b/graphics/items/icons/pecha_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/persim_berry.png b/graphics/items/icons/persim_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/petaya_berry.png b/graphics/items/icons/petaya_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/pewter_crunchies.png b/graphics/items/icons/pewter_crunchies.png new file mode 100644 index 0000000000..d88acd95ec Binary files /dev/null and b/graphics/items/icons/pewter_crunchies.png differ diff --git a/graphics/items/icons/pidgeotite.png b/graphics/items/icons/pidgeotite.png new file mode 100644 index 0000000000..8cc9ab6b17 Binary files /dev/null and b/graphics/items/icons/pidgeotite.png differ diff --git a/graphics/items/icons/pikanium_z.png b/graphics/items/icons/pikanium_z.png new file mode 100644 index 0000000000..c2d8fe1c59 Binary files /dev/null and b/graphics/items/icons/pikanium_z.png differ diff --git a/graphics/items/icons/pikashunium_z.png b/graphics/items/icons/pikashunium_z.png new file mode 100644 index 0000000000..89d94e3fa0 Binary files /dev/null and b/graphics/items/icons/pikashunium_z.png differ diff --git a/graphics/items/icons/pinap_berry.png b/graphics/items/icons/pinap_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/pink_apricorn.png b/graphics/items/icons/pink_apricorn.png new file mode 100755 index 0000000000..abcedcba49 Binary files /dev/null and b/graphics/items/icons/pink_apricorn.png differ diff --git a/graphics/items/icons/pink_nectar.png b/graphics/items/icons/pink_nectar.png new file mode 100755 index 0000000000..21e88d3023 Binary files /dev/null and b/graphics/items/icons/pink_nectar.png differ diff --git a/graphics/items/icons/pinsirite.png b/graphics/items/icons/pinsirite.png new file mode 100644 index 0000000000..a201c320c0 Binary files /dev/null and b/graphics/items/icons/pinsirite.png differ diff --git a/graphics/items/icons/pixie_plate.png b/graphics/items/icons/pixie_plate.png new file mode 100644 index 0000000000..4c34f22aba Binary files /dev/null and b/graphics/items/icons/pixie_plate.png differ diff --git a/graphics/items/icons/plume_fossil.png b/graphics/items/icons/plume_fossil.png new file mode 100755 index 0000000000..cf98166b31 Binary files /dev/null and b/graphics/items/icons/plume_fossil.png differ diff --git a/graphics/items/icons/poison_barb.png b/graphics/items/icons/poison_barb.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/poison_gem.png b/graphics/items/icons/poison_gem.png new file mode 100644 index 0000000000..ab339eb718 Binary files /dev/null and b/graphics/items/icons/poison_gem.png differ diff --git a/graphics/items/icons/poison_memory.png b/graphics/items/icons/poison_memory.png new file mode 100755 index 0000000000..e665d81762 Binary files /dev/null and b/graphics/items/icons/poison_memory.png differ diff --git a/graphics/items/icons/poisonium_z.png b/graphics/items/icons/poisonium_z.png new file mode 100644 index 0000000000..3b39e4b55b Binary files /dev/null and b/graphics/items/icons/poisonium_z.png differ diff --git a/graphics/items/icons/poke_ball.png b/graphics/items/icons/poke_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/poke_doll.png b/graphics/items/icons/poke_doll.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/poke_flute.png b/graphics/items/icons/poke_flute.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/poke_radar.png b/graphics/items/icons/poke_radar.png new file mode 100644 index 0000000000..f0de8796ac Binary files /dev/null and b/graphics/items/icons/poke_radar.png differ diff --git a/graphics/items/icons/poke_toy.png b/graphics/items/icons/poke_toy.png new file mode 100644 index 0000000000..be6091d3f5 Binary files /dev/null and b/graphics/items/icons/poke_toy.png differ diff --git a/graphics/items/icons/pokeblock_case.png b/graphics/items/icons/pokeblock_case.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/pokemon_box_link.png b/graphics/items/icons/pokemon_box_link.png new file mode 100644 index 0000000000..8022e833ab Binary files /dev/null and b/graphics/items/icons/pokemon_box_link.png differ diff --git a/graphics/items/icons/pomeg_berry.png b/graphics/items/icons/pomeg_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/potion.png b/graphics/items/icons/potion.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/powder.png b/graphics/items/icons/powder.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/powder_jar.png b/graphics/items/icons/powder_jar.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/power_anklet.png b/graphics/items/icons/power_anklet.png new file mode 100755 index 0000000000..3a2091c8ee Binary files /dev/null and b/graphics/items/icons/power_anklet.png differ diff --git a/graphics/items/icons/power_band.png b/graphics/items/icons/power_band.png new file mode 100755 index 0000000000..a88e5391b1 Binary files /dev/null and b/graphics/items/icons/power_band.png differ diff --git a/graphics/items/icons/power_belt.png b/graphics/items/icons/power_belt.png new file mode 100755 index 0000000000..e4273f85c6 Binary files /dev/null and b/graphics/items/icons/power_belt.png differ diff --git a/graphics/items/icons/power_bracer.png b/graphics/items/icons/power_bracer.png new file mode 100755 index 0000000000..54aa34844b Binary files /dev/null and b/graphics/items/icons/power_bracer.png differ diff --git a/graphics/items/icons/power_herb.png b/graphics/items/icons/power_herb.png new file mode 100644 index 0000000000..947996c4cd Binary files /dev/null and b/graphics/items/icons/power_herb.png differ diff --git a/graphics/items/icons/power_lens.png b/graphics/items/icons/power_lens.png new file mode 100755 index 0000000000..b18d911860 Binary files /dev/null and b/graphics/items/icons/power_lens.png differ diff --git a/graphics/items/icons/power_weight.png b/graphics/items/icons/power_weight.png new file mode 100755 index 0000000000..149679c387 Binary files /dev/null and b/graphics/items/icons/power_weight.png differ diff --git a/graphics/items/icons/pp_max.png b/graphics/items/icons/pp_max.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/pp_up.png b/graphics/items/icons/pp_up.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/premier_ball.png b/graphics/items/icons/premier_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/pretty_feather.png b/graphics/items/icons/pretty_feather.png new file mode 100644 index 0000000000..69c66306d2 Binary files /dev/null and b/graphics/items/icons/pretty_feather.png differ diff --git a/graphics/items/icons/primarium_z.png b/graphics/items/icons/primarium_z.png new file mode 100644 index 0000000000..84f04c2213 Binary files /dev/null and b/graphics/items/icons/primarium_z.png differ diff --git a/graphics/items/icons/prism_scale.png b/graphics/items/icons/prism_scale.png new file mode 100755 index 0000000000..335816ddbc Binary files /dev/null and b/graphics/items/icons/prism_scale.png differ diff --git a/graphics/items/icons/prison_bottle.png b/graphics/items/icons/prison_bottle.png new file mode 100644 index 0000000000..3c20e771a3 Binary files /dev/null and b/graphics/items/icons/prison_bottle.png differ diff --git a/graphics/items/icons/protective_pads.png b/graphics/items/icons/protective_pads.png new file mode 100644 index 0000000000..3676fd311a Binary files /dev/null and b/graphics/items/icons/protective_pads.png differ diff --git a/graphics/items/icons/protector.png b/graphics/items/icons/protector.png new file mode 100755 index 0000000000..fa88ae1556 Binary files /dev/null and b/graphics/items/icons/protector.png differ diff --git a/graphics/items/icons/psychic_gem.png b/graphics/items/icons/psychic_gem.png new file mode 100644 index 0000000000..6b84f38dab Binary files /dev/null and b/graphics/items/icons/psychic_gem.png differ diff --git a/graphics/items/icons/psychic_memory.png b/graphics/items/icons/psychic_memory.png new file mode 100755 index 0000000000..beda2c22df Binary files /dev/null and b/graphics/items/icons/psychic_memory.png differ diff --git a/graphics/items/icons/psychic_seed.png b/graphics/items/icons/psychic_seed.png new file mode 100644 index 0000000000..4c90afb9c9 Binary files /dev/null and b/graphics/items/icons/psychic_seed.png differ diff --git a/graphics/items/icons/psychium_z.png b/graphics/items/icons/psychium_z.png new file mode 100644 index 0000000000..b1ab78d66a Binary files /dev/null and b/graphics/items/icons/psychium_z.png differ diff --git a/graphics/items/icons/pure_incense.png b/graphics/items/icons/pure_incense.png new file mode 100755 index 0000000000..8657683b18 Binary files /dev/null and b/graphics/items/icons/pure_incense.png differ diff --git a/graphics/items/icons/purple_nectar.png b/graphics/items/icons/purple_nectar.png new file mode 100755 index 0000000000..59111f1e4e Binary files /dev/null and b/graphics/items/icons/purple_nectar.png differ diff --git a/graphics/items/icons/qualot_berry.png b/graphics/items/icons/qualot_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/question_mark.png b/graphics/items/icons/question_mark.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/quick_ball.png b/graphics/items/icons/quick_ball.png new file mode 100644 index 0000000000..6f39b934f4 Binary files /dev/null and b/graphics/items/icons/quick_ball.png differ diff --git a/graphics/items/icons/quick_claw.png b/graphics/items/icons/quick_claw.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/quick_powder.png b/graphics/items/icons/quick_powder.png new file mode 100644 index 0000000000..d83b0b5062 Binary files /dev/null and b/graphics/items/icons/quick_powder.png differ diff --git a/graphics/items/icons/rabuta_berry.png b/graphics/items/icons/rabuta_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/rage_candy_bar.png b/graphics/items/icons/rage_candy_bar.png new file mode 100644 index 0000000000..feb5b82cce Binary files /dev/null and b/graphics/items/icons/rage_candy_bar.png differ diff --git a/graphics/items/icons/rainbow_pass.png b/graphics/items/icons/rainbow_pass.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/rare_bone.png b/graphics/items/icons/rare_bone.png new file mode 100755 index 0000000000..80b4af9d58 Binary files /dev/null and b/graphics/items/icons/rare_bone.png differ diff --git a/graphics/items/icons/rare_candy.png b/graphics/items/icons/rare_candy.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/rawst_berry.png b/graphics/items/icons/rawst_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/razor_claw.png b/graphics/items/icons/razor_claw.png new file mode 100755 index 0000000000..59c27fc809 Binary files /dev/null and b/graphics/items/icons/razor_claw.png differ diff --git a/graphics/items/icons/razor_fang.png b/graphics/items/icons/razor_fang.png new file mode 100755 index 0000000000..dd54b98e79 Binary files /dev/null and b/graphics/items/icons/razor_fang.png differ diff --git a/graphics/items/icons/razz_berry.png b/graphics/items/icons/razz_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/reaper_cloth.png b/graphics/items/icons/reaper_cloth.png new file mode 100755 index 0000000000..73f0874426 Binary files /dev/null and b/graphics/items/icons/reaper_cloth.png differ diff --git a/graphics/items/icons/red_apricorn.png b/graphics/items/icons/red_apricorn.png new file mode 100755 index 0000000000..52d219c073 Binary files /dev/null and b/graphics/items/icons/red_apricorn.png differ diff --git a/graphics/items/icons/red_card.png b/graphics/items/icons/red_card.png new file mode 100755 index 0000000000..1d07d827fa Binary files /dev/null and b/graphics/items/icons/red_card.png differ diff --git a/graphics/items/icons/red_nectar.png b/graphics/items/icons/red_nectar.png new file mode 100755 index 0000000000..1d2058dca1 Binary files /dev/null and b/graphics/items/icons/red_nectar.png differ diff --git a/graphics/items/icons/red_orb.png b/graphics/items/icons/red_orb.png new file mode 100644 index 0000000000..ca132f46a0 Binary files /dev/null and b/graphics/items/icons/red_orb.png differ diff --git a/graphics/items/icons/reins_of_unity.png b/graphics/items/icons/reins_of_unity.png new file mode 100644 index 0000000000..123cda9b92 Binary files /dev/null and b/graphics/items/icons/reins_of_unity.png differ diff --git a/graphics/items/icons/relic_band.png b/graphics/items/icons/relic_band.png new file mode 100644 index 0000000000..902e04f7cc Binary files /dev/null and b/graphics/items/icons/relic_band.png differ diff --git a/graphics/items/icons/relic_coin.png b/graphics/items/icons/relic_coin.png new file mode 100644 index 0000000000..b94e3eaa6e Binary files /dev/null and b/graphics/items/icons/relic_coin.png differ diff --git a/graphics/items/icons/relic_crown.png b/graphics/items/icons/relic_crown.png new file mode 100644 index 0000000000..7511a2e081 Binary files /dev/null and b/graphics/items/icons/relic_crown.png differ diff --git a/graphics/items/icons/relic_statue.png b/graphics/items/icons/relic_statue.png new file mode 100644 index 0000000000..927aa4b8b8 Binary files /dev/null and b/graphics/items/icons/relic_statue.png differ diff --git a/graphics/items/icons/relic_vase.png b/graphics/items/icons/relic_vase.png new file mode 100644 index 0000000000..aa8698c1a2 Binary files /dev/null and b/graphics/items/icons/relic_vase.png differ diff --git a/graphics/items/icons/repeat_ball.png b/graphics/items/icons/repeat_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/repel.png b/graphics/items/icons/repel.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/resist_feather.png b/graphics/items/icons/resist_feather.png new file mode 100644 index 0000000000..d717151621 Binary files /dev/null and b/graphics/items/icons/resist_feather.png differ diff --git a/graphics/items/icons/retro_mail.png b/graphics/items/icons/retro_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/return_to_field_arrow.png b/graphics/items/icons/return_to_field_arrow.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/reveal_glass.png b/graphics/items/icons/reveal_glass.png new file mode 100644 index 0000000000..dbb6b856c1 Binary files /dev/null and b/graphics/items/icons/reveal_glass.png differ diff --git a/graphics/items/icons/revival_herb.png b/graphics/items/icons/revival_herb.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/revive.png b/graphics/items/icons/revive.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/ribbon_sweet.png b/graphics/items/icons/ribbon_sweet.png new file mode 100644 index 0000000000..19711ae8cc Binary files /dev/null and b/graphics/items/icons/ribbon_sweet.png differ diff --git a/graphics/items/icons/rindo_berry.png b/graphics/items/icons/rindo_berry.png new file mode 100755 index 0000000000..4729e188c0 Binary files /dev/null and b/graphics/items/icons/rindo_berry.png differ diff --git a/graphics/items/icons/ring_target.png b/graphics/items/icons/ring_target.png new file mode 100755 index 0000000000..fae2b944be Binary files /dev/null and b/graphics/items/icons/ring_target.png differ diff --git a/graphics/items/icons/rock_gem.png b/graphics/items/icons/rock_gem.png new file mode 100644 index 0000000000..6d6070b516 Binary files /dev/null and b/graphics/items/icons/rock_gem.png differ diff --git a/graphics/items/icons/rock_incense.png b/graphics/items/icons/rock_incense.png new file mode 100755 index 0000000000..04a3d1b5c2 Binary files /dev/null and b/graphics/items/icons/rock_incense.png differ diff --git a/graphics/items/icons/rock_memory.png b/graphics/items/icons/rock_memory.png new file mode 100755 index 0000000000..32d46fea49 Binary files /dev/null and b/graphics/items/icons/rock_memory.png differ diff --git a/graphics/items/icons/rockium_z.png b/graphics/items/icons/rockium_z.png new file mode 100644 index 0000000000..b43a2f26dd Binary files /dev/null and b/graphics/items/icons/rockium_z.png differ diff --git a/graphics/items/icons/rocky_helmet.png b/graphics/items/icons/rocky_helmet.png new file mode 100755 index 0000000000..006a9f8aa4 Binary files /dev/null and b/graphics/items/icons/rocky_helmet.png differ diff --git a/graphics/items/icons/room_service.png b/graphics/items/icons/room_service.png new file mode 100644 index 0000000000..e776b4e8a7 Binary files /dev/null and b/graphics/items/icons/room_service.png differ diff --git a/graphics/items/icons/root_fossil.png b/graphics/items/icons/root_fossil.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/rose_incense.png b/graphics/items/icons/rose_incense.png new file mode 100755 index 0000000000..c6b6abcc36 Binary files /dev/null and b/graphics/items/icons/rose_incense.png differ diff --git a/graphics/items/icons/roseli_berry.png b/graphics/items/icons/roseli_berry.png new file mode 100755 index 0000000000..7487cb2a4c Binary files /dev/null and b/graphics/items/icons/roseli_berry.png differ diff --git a/graphics/items/icons/rotom_catalog.png b/graphics/items/icons/rotom_catalog.png new file mode 100644 index 0000000000..ceea8e968a Binary files /dev/null and b/graphics/items/icons/rotom_catalog.png differ diff --git a/graphics/items/icons/rowap_berry.png b/graphics/items/icons/rowap_berry.png new file mode 100755 index 0000000000..a25d39838f Binary files /dev/null and b/graphics/items/icons/rowap_berry.png differ diff --git a/graphics/items/icons/rusted_shield.png b/graphics/items/icons/rusted_shield.png new file mode 100644 index 0000000000..a7d3de46d6 Binary files /dev/null and b/graphics/items/icons/rusted_shield.png differ diff --git a/graphics/items/icons/rusted_sword.png b/graphics/items/icons/rusted_sword.png new file mode 100644 index 0000000000..a05bac98be Binary files /dev/null and b/graphics/items/icons/rusted_sword.png differ diff --git a/graphics/items/icons/sablenite.png b/graphics/items/icons/sablenite.png new file mode 100644 index 0000000000..ad348b4352 Binary files /dev/null and b/graphics/items/icons/sablenite.png differ diff --git a/graphics/items/icons/sachet.png b/graphics/items/icons/sachet.png new file mode 100755 index 0000000000..32c566a91d Binary files /dev/null and b/graphics/items/icons/sachet.png differ diff --git a/graphics/items/icons/sacred_ash.png b/graphics/items/icons/sacred_ash.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/safari_ball.png b/graphics/items/icons/safari_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/safety_goggles.png b/graphics/items/icons/safety_goggles.png new file mode 100644 index 0000000000..7a1efab67a Binary files /dev/null and b/graphics/items/icons/safety_goggles.png differ diff --git a/graphics/items/icons/sail_fossil.png b/graphics/items/icons/sail_fossil.png new file mode 100755 index 0000000000..4c6514820e Binary files /dev/null and b/graphics/items/icons/sail_fossil.png differ diff --git a/graphics/items/icons/salac_berry.png b/graphics/items/icons/salac_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/salamencite.png b/graphics/items/icons/salamencite.png new file mode 100644 index 0000000000..557cc29d7d Binary files /dev/null and b/graphics/items/icons/salamencite.png differ diff --git a/graphics/items/icons/scanner.png b/graphics/items/icons/scanner.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/scarf.png b/graphics/items/icons/scarf.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/sceptilite.png b/graphics/items/icons/sceptilite.png new file mode 100644 index 0000000000..ba61c74aac Binary files /dev/null and b/graphics/items/icons/sceptilite.png differ diff --git a/graphics/items/icons/scizorite.png b/graphics/items/icons/scizorite.png new file mode 100644 index 0000000000..8b2d81335a Binary files /dev/null and b/graphics/items/icons/scizorite.png differ diff --git a/graphics/items/icons/scope_lens.png b/graphics/items/icons/scope_lens.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/sea_incense.png b/graphics/items/icons/sea_incense.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/secret_key.png b/graphics/items/icons/secret_key.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/shadow_mail.png b/graphics/items/icons/shadow_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/shalour_sable.png b/graphics/items/icons/shalour_sable.png new file mode 100644 index 0000000000..88982fb475 Binary files /dev/null and b/graphics/items/icons/shalour_sable.png differ diff --git a/graphics/items/icons/shard.png b/graphics/items/icons/shard.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/sharp_beak.png b/graphics/items/icons/sharp_beak.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/sharpedonite.png b/graphics/items/icons/sharpedonite.png new file mode 100644 index 0000000000..20c8642b2c Binary files /dev/null and b/graphics/items/icons/sharpedonite.png differ diff --git a/graphics/items/icons/shed_shell.png b/graphics/items/icons/shed_shell.png new file mode 100644 index 0000000000..6e02ff4a3a Binary files /dev/null and b/graphics/items/icons/shed_shell.png differ diff --git a/graphics/items/icons/shell_bell.png b/graphics/items/icons/shell_bell.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/shiny_charm.png b/graphics/items/icons/shiny_charm.png new file mode 100644 index 0000000000..3829154cd5 Binary files /dev/null and b/graphics/items/icons/shiny_charm.png differ diff --git a/graphics/items/icons/shiny_stone.png b/graphics/items/icons/shiny_stone.png new file mode 100755 index 0000000000..d48db4d86a Binary files /dev/null and b/graphics/items/icons/shiny_stone.png differ diff --git a/graphics/items/icons/shoal_shell.png b/graphics/items/icons/shoal_shell.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/shock_drive.png b/graphics/items/icons/shock_drive.png new file mode 100644 index 0000000000..2ac62f6cee Binary files /dev/null and b/graphics/items/icons/shock_drive.png differ diff --git a/graphics/items/icons/shuca_berry.png b/graphics/items/icons/shuca_berry.png new file mode 100755 index 0000000000..cc99671876 Binary files /dev/null and b/graphics/items/icons/shuca_berry.png differ diff --git a/graphics/items/icons/silk_scarf.png b/graphics/items/icons/silk_scarf.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/silph_scope.png b/graphics/items/icons/silph_scope.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/silver_powder.png b/graphics/items/icons/silver_powder.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/sitrus_berry.png b/graphics/items/icons/sitrus_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/skull_fossil.png b/graphics/items/icons/skull_fossil.png new file mode 100755 index 0000000000..1868983468 Binary files /dev/null and b/graphics/items/icons/skull_fossil.png differ diff --git a/graphics/items/icons/sky_plate.png b/graphics/items/icons/sky_plate.png new file mode 100644 index 0000000000..f64b14aff6 Binary files /dev/null and b/graphics/items/icons/sky_plate.png differ diff --git a/graphics/items/icons/slowbronite.png b/graphics/items/icons/slowbronite.png new file mode 100644 index 0000000000..89bb8bf487 Binary files /dev/null and b/graphics/items/icons/slowbronite.png differ diff --git a/graphics/items/icons/smoke_ball.png b/graphics/items/icons/smoke_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/smooth_rock.png b/graphics/items/icons/smooth_rock.png new file mode 100644 index 0000000000..8db8ef11f5 Binary files /dev/null and b/graphics/items/icons/smooth_rock.png differ diff --git a/graphics/items/icons/snorlium_z.png b/graphics/items/icons/snorlium_z.png new file mode 100644 index 0000000000..a91ecf8432 Binary files /dev/null and b/graphics/items/icons/snorlium_z.png differ diff --git a/graphics/items/icons/snowball.png b/graphics/items/icons/snowball.png new file mode 100755 index 0000000000..3ba834ae34 Binary files /dev/null and b/graphics/items/icons/snowball.png differ diff --git a/graphics/items/icons/soda_pop.png b/graphics/items/icons/soda_pop.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/soft_sand.png b/graphics/items/icons/soft_sand.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/solganium_z.png b/graphics/items/icons/solganium_z.png new file mode 100644 index 0000000000..c8d8c671eb Binary files /dev/null and b/graphics/items/icons/solganium_z.png differ diff --git a/graphics/items/icons/soot_sack.png b/graphics/items/icons/soot_sack.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/soothe_bell.png b/graphics/items/icons/soothe_bell.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/soul_dew.png b/graphics/items/icons/soul_dew.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/spell_tag.png b/graphics/items/icons/spell_tag.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/spelon_berry.png b/graphics/items/icons/spelon_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/splash_plate.png b/graphics/items/icons/splash_plate.png new file mode 100644 index 0000000000..b290e81001 Binary files /dev/null and b/graphics/items/icons/splash_plate.png differ diff --git a/graphics/items/icons/spooky_plate.png b/graphics/items/icons/spooky_plate.png new file mode 100644 index 0000000000..215657bcc6 Binary files /dev/null and b/graphics/items/icons/spooky_plate.png differ diff --git a/graphics/items/icons/sport_ball.png b/graphics/items/icons/sport_ball.png new file mode 100644 index 0000000000..20549f7d34 Binary files /dev/null and b/graphics/items/icons/sport_ball.png differ diff --git a/graphics/items/icons/ss_ticket.png b/graphics/items/icons/ss_ticket.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/stable_mulch.png b/graphics/items/icons/stable_mulch.png new file mode 100644 index 0000000000..be4369d07c Binary files /dev/null and b/graphics/items/icons/stable_mulch.png differ diff --git a/graphics/items/icons/star_piece.png b/graphics/items/icons/star_piece.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/star_sweet.png b/graphics/items/icons/star_sweet.png new file mode 100644 index 0000000000..23bffe9cf7 Binary files /dev/null and b/graphics/items/icons/star_sweet.png differ diff --git a/graphics/items/icons/stardust.png b/graphics/items/icons/stardust.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/starf_berry.png b/graphics/items/icons/starf_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/status_heal.png b/graphics/items/icons/status_heal.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/steel_gem.png b/graphics/items/icons/steel_gem.png new file mode 100644 index 0000000000..252dc2d47e Binary files /dev/null and b/graphics/items/icons/steel_gem.png differ diff --git a/graphics/items/icons/steel_memory.png b/graphics/items/icons/steel_memory.png new file mode 100755 index 0000000000..b9329e2d02 Binary files /dev/null and b/graphics/items/icons/steel_memory.png differ diff --git a/graphics/items/icons/steelium_z.png b/graphics/items/icons/steelium_z.png new file mode 100644 index 0000000000..d0dad6f94e Binary files /dev/null and b/graphics/items/icons/steelium_z.png differ diff --git a/graphics/items/icons/steelixite.png b/graphics/items/icons/steelixite.png new file mode 100644 index 0000000000..fa2a8209e6 Binary files /dev/null and b/graphics/items/icons/steelixite.png differ diff --git a/graphics/items/icons/sticky_barb.png b/graphics/items/icons/sticky_barb.png new file mode 100644 index 0000000000..735d3a051f Binary files /dev/null and b/graphics/items/icons/sticky_barb.png differ diff --git a/graphics/items/icons/stone_plate.png b/graphics/items/icons/stone_plate.png new file mode 100644 index 0000000000..8af90a8a65 Binary files /dev/null and b/graphics/items/icons/stone_plate.png differ diff --git a/graphics/items/icons/storage_key.png b/graphics/items/icons/storage_key.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/strange_souvenir.png b/graphics/items/icons/strange_souvenir.png new file mode 100644 index 0000000000..5cbc6e164c Binary files /dev/null and b/graphics/items/icons/strange_souvenir.png differ diff --git a/graphics/items/icons/strawberry_sweet.png b/graphics/items/icons/strawberry_sweet.png new file mode 100644 index 0000000000..40f6c7700a Binary files /dev/null and b/graphics/items/icons/strawberry_sweet.png differ diff --git a/graphics/items/icons/sun_stone.png b/graphics/items/icons/sun_stone.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/super_rod.png b/graphics/items/icons/super_rod.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/swampertite.png b/graphics/items/icons/swampertite.png new file mode 100644 index 0000000000..f2d386a3d4 Binary files /dev/null and b/graphics/items/icons/swampertite.png differ diff --git a/graphics/items/icons/sweet_apple.png b/graphics/items/icons/sweet_apple.png new file mode 100644 index 0000000000..35e47e0768 Binary files /dev/null and b/graphics/items/icons/sweet_apple.png differ diff --git a/graphics/items/icons/sweet_heart.png b/graphics/items/icons/sweet_heart.png new file mode 100755 index 0000000000..06b592022f Binary files /dev/null and b/graphics/items/icons/sweet_heart.png differ diff --git a/graphics/items/icons/swift_feather.png b/graphics/items/icons/swift_feather.png new file mode 100644 index 0000000000..75af06017c Binary files /dev/null and b/graphics/items/icons/swift_feather.png differ diff --git a/graphics/items/icons/tamato_berry.png b/graphics/items/icons/tamato_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/tanga_berry.png b/graphics/items/icons/tanga_berry.png new file mode 100755 index 0000000000..37f8e24656 Binary files /dev/null and b/graphics/items/icons/tanga_berry.png differ diff --git a/graphics/items/icons/tapunium_z.png b/graphics/items/icons/tapunium_z.png new file mode 100644 index 0000000000..160b7f5d92 Binary files /dev/null and b/graphics/items/icons/tapunium_z.png differ diff --git a/graphics/items/icons/tart_apple.png b/graphics/items/icons/tart_apple.png new file mode 100644 index 0000000000..b26b595da5 Binary files /dev/null and b/graphics/items/icons/tart_apple.png differ diff --git a/graphics/items/icons/tea.png b/graphics/items/icons/tea.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/teachy_tv.png b/graphics/items/icons/teachy_tv.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/terrain_extender.png b/graphics/items/icons/terrain_extender.png new file mode 100644 index 0000000000..7735dd8900 Binary files /dev/null and b/graphics/items/icons/terrain_extender.png differ diff --git a/graphics/items/icons/thick_club.png b/graphics/items/icons/thick_club.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/throat_spray.png b/graphics/items/icons/throat_spray.png new file mode 100644 index 0000000000..2d75c4aad5 Binary files /dev/null and b/graphics/items/icons/throat_spray.png differ diff --git a/graphics/items/icons/thunder_stone.png b/graphics/items/icons/thunder_stone.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/timer_ball.png b/graphics/items/icons/timer_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/tiny_mushroom.png b/graphics/items/icons/tiny_mushroom.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/tm.png b/graphics/items/icons/tm.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/tm_case.png b/graphics/items/icons/tm_case.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/town_map.png b/graphics/items/icons/town_map.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/toxic_orb.png b/graphics/items/icons/toxic_orb.png new file mode 100644 index 0000000000..d63ad4fa3a Binary files /dev/null and b/graphics/items/icons/toxic_orb.png differ diff --git a/graphics/items/icons/toxic_plate.png b/graphics/items/icons/toxic_plate.png new file mode 100644 index 0000000000..de64d6c201 Binary files /dev/null and b/graphics/items/icons/toxic_plate.png differ diff --git a/graphics/items/icons/tri_pass.png b/graphics/items/icons/tri_pass.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/tropic_mail.png b/graphics/items/icons/tropic_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/twisted_spoon.png b/graphics/items/icons/twisted_spoon.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/tyranitarite.png b/graphics/items/icons/tyranitarite.png new file mode 100644 index 0000000000..ba61c74aac Binary files /dev/null and b/graphics/items/icons/tyranitarite.png differ diff --git a/graphics/items/icons/ultra_ball.png b/graphics/items/icons/ultra_ball.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/ultranecrozium_z.png b/graphics/items/icons/ultranecrozium_z.png new file mode 100644 index 0000000000..52e984598e Binary files /dev/null and b/graphics/items/icons/ultranecrozium_z.png differ diff --git a/graphics/items/icons/up_grade.png b/graphics/items/icons/upgrade.png old mode 100644 new mode 100755 similarity index 100% rename from graphics/items/icons/up_grade.png rename to graphics/items/icons/upgrade.png diff --git a/graphics/items/icons/utility_umbrella.png b/graphics/items/icons/utility_umbrella.png new file mode 100644 index 0000000000..a7dbb4e041 Binary files /dev/null and b/graphics/items/icons/utility_umbrella.png differ diff --git a/graphics/items/icons/venusaurite.png b/graphics/items/icons/venusaurite.png new file mode 100644 index 0000000000..e4a8acbf90 Binary files /dev/null and b/graphics/items/icons/venusaurite.png differ diff --git a/graphics/items/icons/vitamin.png b/graphics/items/icons/vitamin.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/vs_seeker.png b/graphics/items/icons/vs_seeker.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/wacan_berry.png b/graphics/items/icons/wacan_berry.png new file mode 100755 index 0000000000..af113c9b58 Binary files /dev/null and b/graphics/items/icons/wacan_berry.png differ diff --git a/graphics/items/icons/wailmer_pail.png b/graphics/items/icons/wailmer_pail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/water_gem.png b/graphics/items/icons/water_gem.png new file mode 100644 index 0000000000..79e0ca07f3 Binary files /dev/null and b/graphics/items/icons/water_gem.png differ diff --git a/graphics/items/icons/water_memory.png b/graphics/items/icons/water_memory.png new file mode 100755 index 0000000000..d7096f57cc Binary files /dev/null and b/graphics/items/icons/water_memory.png differ diff --git a/graphics/items/icons/water_stone.png b/graphics/items/icons/water_stone.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/waterium_z.png b/graphics/items/icons/waterium_z.png new file mode 100644 index 0000000000..b5453261e4 Binary files /dev/null and b/graphics/items/icons/waterium_z.png differ diff --git a/graphics/items/icons/watmel_berry.png b/graphics/items/icons/watmel_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/wave_incense.png b/graphics/items/icons/wave_incense.png new file mode 100755 index 0000000000..aec3fd05ef Binary files /dev/null and b/graphics/items/icons/wave_incense.png differ diff --git a/graphics/items/icons/wave_mail.png b/graphics/items/icons/wave_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/weakness_policy.png b/graphics/items/icons/weakness_policy.png new file mode 100755 index 0000000000..d8f0b45531 Binary files /dev/null and b/graphics/items/icons/weakness_policy.png differ diff --git a/graphics/items/icons/wepear_berry.png b/graphics/items/icons/wepear_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/whipped_dream.png b/graphics/items/icons/whipped_dream.png new file mode 100755 index 0000000000..9cf9c959a7 Binary files /dev/null and b/graphics/items/icons/whipped_dream.png differ diff --git a/graphics/items/icons/white_apricorn.png b/graphics/items/icons/white_apricorn.png new file mode 100755 index 0000000000..c2ea561742 Binary files /dev/null and b/graphics/items/icons/white_apricorn.png differ diff --git a/graphics/items/icons/wide_lens.png b/graphics/items/icons/wide_lens.png new file mode 100644 index 0000000000..ea432dc8de Binary files /dev/null and b/graphics/items/icons/wide_lens.png differ diff --git a/graphics/items/icons/wiki_berry.png b/graphics/items/icons/wiki_berry.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/wise_glasses.png b/graphics/items/icons/wise_glasses.png new file mode 100644 index 0000000000..a3982f1816 Binary files /dev/null and b/graphics/items/icons/wise_glasses.png differ diff --git a/graphics/items/icons/wishing_piece.png b/graphics/items/icons/wishing_piece.png new file mode 100644 index 0000000000..324a0a646e Binary files /dev/null and b/graphics/items/icons/wishing_piece.png differ diff --git a/graphics/items/icons/wood_mail.png b/graphics/items/icons/wood_mail.png old mode 100644 new mode 100755 diff --git a/graphics/items/icons/x_special_defense.png b/graphics/items/icons/x_special_defense.png new file mode 100755 index 0000000000..54a3e00fdf Binary files /dev/null and b/graphics/items/icons/x_special_defense.png differ diff --git a/graphics/items/icons/yache_berry.png b/graphics/items/icons/yache_berry.png new file mode 100755 index 0000000000..08bb40fcfb Binary files /dev/null and b/graphics/items/icons/yache_berry.png differ diff --git a/graphics/items/icons/yellow_apricorn.png b/graphics/items/icons/yellow_apricorn.png new file mode 100755 index 0000000000..4dd12c5eb6 Binary files /dev/null and b/graphics/items/icons/yellow_apricorn.png differ diff --git a/graphics/items/icons/yellow_nectar.png b/graphics/items/icons/yellow_nectar.png new file mode 100755 index 0000000000..fff8ae6977 Binary files /dev/null and b/graphics/items/icons/yellow_nectar.png differ diff --git a/graphics/items/icons/z_power_ring.png b/graphics/items/icons/z_power_ring.png new file mode 100644 index 0000000000..addf901e15 Binary files /dev/null and b/graphics/items/icons/z_power_ring.png differ diff --git a/graphics/items/icons/z_ring.png b/graphics/items/icons/z_ring.png new file mode 100644 index 0000000000..b5ad6bf945 Binary files /dev/null and b/graphics/items/icons/z_ring.png differ diff --git a/graphics/items/icons/zap_plate.png b/graphics/items/icons/zap_plate.png new file mode 100644 index 0000000000..80fed9a1e5 Binary files /dev/null and b/graphics/items/icons/zap_plate.png differ diff --git a/graphics/items/icons/zoom_lens.png b/graphics/items/icons/zoom_lens.png new file mode 100644 index 0000000000..167619aa64 Binary files /dev/null and b/graphics/items/icons/zoom_lens.png differ diff --git a/graphics/items/icons/zygarde_cube.png b/graphics/items/icons/zygarde_cube.png new file mode 100644 index 0000000000..b577dcecd8 Binary files /dev/null and b/graphics/items/icons/zygarde_cube.png differ diff --git a/graphics/minigame_countdown/321start.png b/graphics/link/321start.png similarity index 100% rename from graphics/minigame_countdown/321start.png rename to graphics/link/321start.png diff --git a/graphics/minigame_countdown/321start_static.png b/graphics/link/321start_static.png similarity index 100% rename from graphics/minigame_countdown/321start_static.png rename to graphics/link/321start_static.png diff --git a/graphics/interface/comm_error_bg.png b/graphics/link/comm_error_bg.png similarity index 100% rename from graphics/interface/comm_error_bg.png rename to graphics/link/comm_error_bg.png diff --git a/graphics/interface/link_test_digits.png b/graphics/link/test_digits.png similarity index 100% rename from graphics/interface/link_test_digits.png rename to graphics/link/test_digits.png diff --git a/graphics/interface/wireless_link_display.bin b/graphics/link/wireless_display.bin similarity index 100% rename from graphics/interface/wireless_link_display.bin rename to graphics/link/wireless_display.bin diff --git a/graphics/interface/wireless_link_display.png b/graphics/link/wireless_display.png similarity index 100% rename from graphics/interface/wireless_link_display.png rename to graphics/link/wireless_display.png diff --git a/graphics/interface/wireless_link_icon.png b/graphics/link/wireless_icon.png similarity index 100% rename from graphics/interface/wireless_link_icon.png rename to graphics/link/wireless_icon.png diff --git a/graphics/interface/wireless_info_screen.bin b/graphics/link/wireless_info_screen.bin similarity index 100% rename from graphics/interface/wireless_info_screen.bin rename to graphics/link/wireless_info_screen.bin diff --git a/graphics/interface/wireless_info_screen.pal b/graphics/link/wireless_info_screen.pal similarity index 100% rename from graphics/interface/wireless_info_screen.pal rename to graphics/link/wireless_info_screen.pal diff --git a/graphics/interface/wireless_info_screen.png b/graphics/link/wireless_info_screen.png similarity index 100% rename from graphics/interface/wireless_info_screen.png rename to graphics/link/wireless_info_screen.png diff --git a/graphics/interface/map_popup/brick.png b/graphics/map_popup/brick.png similarity index 100% rename from graphics/interface/map_popup/brick.png rename to graphics/map_popup/brick.png diff --git a/graphics/interface/map_popup/brick_outline.png b/graphics/map_popup/brick_outline.png similarity index 100% rename from graphics/interface/map_popup/brick_outline.png rename to graphics/map_popup/brick_outline.png diff --git a/graphics/interface/map_popup/marble.png b/graphics/map_popup/marble.png similarity index 100% rename from graphics/interface/map_popup/marble.png rename to graphics/map_popup/marble.png diff --git a/graphics/interface/map_popup/marble_outline.png b/graphics/map_popup/marble_outline.png similarity index 100% rename from graphics/interface/map_popup/marble_outline.png rename to graphics/map_popup/marble_outline.png diff --git a/graphics/interface/map_popup/stone.png b/graphics/map_popup/stone.png similarity index 100% rename from graphics/interface/map_popup/stone.png rename to graphics/map_popup/stone.png diff --git a/graphics/interface/map_popup/stone2.png b/graphics/map_popup/stone2.png similarity index 100% rename from graphics/interface/map_popup/stone2.png rename to graphics/map_popup/stone2.png diff --git a/graphics/interface/map_popup/stone2_outline.png b/graphics/map_popup/stone2_outline.png similarity index 100% rename from graphics/interface/map_popup/stone2_outline.png rename to graphics/map_popup/stone2_outline.png diff --git a/graphics/interface/map_popup/stone_outline.png b/graphics/map_popup/stone_outline.png similarity index 100% rename from graphics/interface/map_popup/stone_outline.png rename to graphics/map_popup/stone_outline.png diff --git a/graphics/interface/map_popup/underwater.pal b/graphics/map_popup/underwater.pal similarity index 100% rename from graphics/interface/map_popup/underwater.pal rename to graphics/map_popup/underwater.pal diff --git a/graphics/interface/map_popup/underwater.png b/graphics/map_popup/underwater.png similarity index 100% rename from graphics/interface/map_popup/underwater.png rename to graphics/map_popup/underwater.png diff --git a/graphics/interface/map_popup/underwater_outline.png b/graphics/map_popup/underwater_outline.png similarity index 100% rename from graphics/interface/map_popup/underwater_outline.png rename to graphics/map_popup/underwater_outline.png diff --git a/graphics/interface/map_popup/wood.png b/graphics/map_popup/wood.png similarity index 100% rename from graphics/interface/map_popup/wood.png rename to graphics/map_popup/wood.png diff --git a/graphics/interface/map_popup/wood_outline.png b/graphics/map_popup/wood_outline.png similarity index 100% rename from graphics/interface/map_popup/wood_outline.png rename to graphics/map_popup/wood_outline.png diff --git a/graphics/misc/deoxys_rock_fragment_bottom_left.png b/graphics/misc/deoxys_rock_fragment_bottom_left.png deleted file mode 100644 index 3f5b8d5c39..0000000000 Binary files a/graphics/misc/deoxys_rock_fragment_bottom_left.png and /dev/null differ diff --git a/graphics/misc/deoxys_rock_fragment_bottom_right.png b/graphics/misc/deoxys_rock_fragment_bottom_right.png deleted file mode 100644 index 7684451e49..0000000000 Binary files a/graphics/misc/deoxys_rock_fragment_bottom_right.png and /dev/null differ diff --git a/graphics/misc/deoxys_rock_fragment_top_left.png b/graphics/misc/deoxys_rock_fragment_top_left.png deleted file mode 100644 index d601cb6e54..0000000000 Binary files a/graphics/misc/deoxys_rock_fragment_top_left.png and /dev/null differ diff --git a/graphics/misc/deoxys_rock_fragment_top_right.png b/graphics/misc/deoxys_rock_fragment_top_right.png deleted file mode 100644 index 01f10cd07b..0000000000 Binary files a/graphics/misc/deoxys_rock_fragment_top_right.png and /dev/null differ diff --git a/graphics/misc/emotion_exclamation.png b/graphics/misc/emotion_exclamation.png deleted file mode 100644 index 595566d2fe..0000000000 Binary files a/graphics/misc/emotion_exclamation.png and /dev/null differ diff --git a/graphics/misc/emotion_heart.png b/graphics/misc/emotion_heart.png deleted file mode 100644 index 9995984b4c..0000000000 Binary files a/graphics/misc/emotion_heart.png and /dev/null differ diff --git a/graphics/misc/emotion_question.png b/graphics/misc/emotion_question.png deleted file mode 100644 index 7376fd058e..0000000000 Binary files a/graphics/misc/emotion_question.png and /dev/null differ diff --git a/graphics/misc/hof_monitor_big.png b/graphics/misc/hof_monitor_big.png deleted file mode 100644 index 510e6a232d..0000000000 Binary files a/graphics/misc/hof_monitor_big.png and /dev/null differ diff --git a/graphics/misc/hof_monitor_small.png b/graphics/misc/hof_monitor_small.png deleted file mode 100644 index dcff330952..0000000000 Binary files a/graphics/misc/hof_monitor_small.png and /dev/null differ diff --git a/graphics/misc/pokeball_glow.png b/graphics/misc/pokeball_glow.png deleted file mode 100644 index 1c1133b769..0000000000 Binary files a/graphics/misc/pokeball_glow.png and /dev/null differ diff --git a/graphics/naming_screen/back_button.png b/graphics/naming_screen/back_button.png new file mode 100644 index 0000000000..bf7730024d Binary files /dev/null and b/graphics/naming_screen/back_button.png differ diff --git a/graphics/naming_screen/buttons.pal b/graphics/naming_screen/buttons.pal new file mode 100644 index 0000000000..fdf80bdb06 --- /dev/null +++ b/graphics/naming_screen/buttons.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +106 156 213 +255 255 255 +57 57 57 +139 139 131 +197 189 180 +230 222 213 +74 115 139 +123 172 197 +172 115 74 +213 156 115 +98 156 57 +148 189 106 +189 164 32 +230 222 90 +57 57 57 +57 57 57 diff --git a/graphics/naming_screen/cursor.pal b/graphics/naming_screen/cursor.pal new file mode 100644 index 0000000000..8950f9b34b --- /dev/null +++ b/graphics/naming_screen/cursor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +106 156 213 +255 8 8 +222 57 74 +180 65 82 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +230 222 213 +0 0 0 +230 222 213 +0 0 0 diff --git a/graphics/naming_screen/cursor.png b/graphics/naming_screen/cursor.png index 3d92ef6f49..e0f5022bed 100644 Binary files a/graphics/naming_screen/cursor.png and b/graphics/naming_screen/cursor.png differ diff --git a/graphics/naming_screen/cursor_filled.png b/graphics/naming_screen/cursor_filled.png new file mode 100644 index 0000000000..efb5e11015 Binary files /dev/null and b/graphics/naming_screen/cursor_filled.png differ diff --git a/graphics/naming_screen/cursor_squished.png b/graphics/naming_screen/cursor_squished.png new file mode 100644 index 0000000000..5126fcccae Binary files /dev/null and b/graphics/naming_screen/cursor_squished.png differ diff --git a/graphics/naming_screen/input_arrow.png b/graphics/naming_screen/input_arrow.png index e07b9e5a80..0a50726733 100644 Binary files a/graphics/naming_screen/input_arrow.png and b/graphics/naming_screen/input_arrow.png differ diff --git a/graphics/naming_screen/menu.pal b/graphics/naming_screen/menu.pal index 0da3b93f2f..2f5c86a568 100644 --- a/graphics/naming_screen/menu.pal +++ b/graphics/naming_screen/menu.pal @@ -1,6 +1,6 @@ JASC-PAL 0100 -96 +16 106 156 213 255 255 255 115 115 115 @@ -17,83 +17,3 @@ JASC-PAL 230 222 90 238 230 139 246 238 197 -106 156 213 -255 255 255 -57 57 57 -115 115 115 -0 0 0 -0 0 0 -0 0 0 -0 0 255 -0 0 255 -0 0 255 -0 0 255 -74 115 139 -98 139 164 -123 172 197 -156 205 230 -180 222 246 -106 156 213 -255 255 255 -57 57 57 -115 115 115 -0 0 0 -0 0 0 -0 0 0 -0 0 255 -0 0 255 -0 0 255 -0 0 255 -172 115 74 -189 131 90 -213 156 115 -246 205 164 -255 230 197 -106 156 213 -255 255 255 -57 57 57 -115 115 115 -0 0 0 -0 0 0 -0 0 0 -0 0 255 -0 0 255 -0 0 255 -0 0 255 -98 156 57 -123 172 82 -148 189 106 -197 230 156 -213 238 189 -106 156 213 -255 255 255 -57 57 57 -139 139 131 -197 189 180 -230 222 213 -74 115 139 -123 172 197 -172 115 74 -213 156 115 -98 156 57 -148 189 106 -189 164 32 -230 222 90 -57 57 57 -57 57 57 -106 156 213 -255 8 8 -222 57 74 -180 65 82 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -230 222 213 -0 0 0 -230 222 213 -0 0 0 diff --git a/graphics/naming_screen/ok_button.png b/graphics/naming_screen/ok_button.png new file mode 100644 index 0000000000..3850f462a4 Binary files /dev/null and b/graphics/naming_screen/ok_button.png differ diff --git a/graphics/naming_screen/page_button.png b/graphics/naming_screen/page_button.png deleted file mode 100644 index e5a0048941..0000000000 Binary files a/graphics/naming_screen/page_button.png and /dev/null differ diff --git a/graphics/naming_screen/page_swap_button.png b/graphics/naming_screen/page_swap_button.png new file mode 100644 index 0000000000..2e5cabed0f Binary files /dev/null and b/graphics/naming_screen/page_swap_button.png differ diff --git a/graphics/naming_screen/page_swap_frame.png b/graphics/naming_screen/page_swap_frame.png new file mode 100644 index 0000000000..bc3ff122b2 Binary files /dev/null and b/graphics/naming_screen/page_swap_frame.png differ diff --git a/graphics/naming_screen/page_swap_lower.pal b/graphics/naming_screen/page_swap_lower.pal new file mode 100644 index 0000000000..0fac7e3752 --- /dev/null +++ b/graphics/naming_screen/page_swap_lower.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +106 156 213 +255 255 255 +57 57 57 +115 115 115 +0 0 0 +0 0 0 +0 0 0 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +172 115 74 +189 131 90 +213 156 115 +246 205 164 +255 230 197 diff --git a/graphics/naming_screen/page_swap_lower.png b/graphics/naming_screen/page_swap_lower.png new file mode 100644 index 0000000000..5747c6265d Binary files /dev/null and b/graphics/naming_screen/page_swap_lower.png differ diff --git a/graphics/naming_screen/page_swap_others.pal b/graphics/naming_screen/page_swap_others.pal new file mode 100644 index 0000000000..0bb9d4f719 --- /dev/null +++ b/graphics/naming_screen/page_swap_others.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +106 156 213 +255 255 255 +57 57 57 +115 115 115 +0 0 0 +0 0 0 +0 0 0 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +98 156 57 +123 172 82 +148 189 106 +197 230 156 +213 238 189 diff --git a/graphics/naming_screen/page_swap_others.png b/graphics/naming_screen/page_swap_others.png new file mode 100644 index 0000000000..1c878a7532 Binary files /dev/null and b/graphics/naming_screen/page_swap_others.png differ diff --git a/graphics/naming_screen/page_swap_upper.pal b/graphics/naming_screen/page_swap_upper.pal new file mode 100644 index 0000000000..af5c2d1a52 --- /dev/null +++ b/graphics/naming_screen/page_swap_upper.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +106 156 213 +255 255 255 +57 57 57 +115 115 115 +0 0 0 +0 0 0 +0 0 0 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +74 115 139 +98 139 164 +123 172 197 +156 205 230 +180 222 246 diff --git a/graphics/naming_screen/page_swap_upper.png b/graphics/naming_screen/page_swap_upper.png new file mode 100644 index 0000000000..922f0b93f5 Binary files /dev/null and b/graphics/naming_screen/page_swap_upper.png differ diff --git a/graphics/naming_screen/pc_icon/off.png b/graphics/naming_screen/pc_icon_off.png similarity index 100% rename from graphics/naming_screen/pc_icon/off.png rename to graphics/naming_screen/pc_icon_off.png diff --git a/graphics/naming_screen/pc_icon/on.png b/graphics/naming_screen/pc_icon_on.png similarity index 100% rename from graphics/naming_screen/pc_icon/on.png rename to graphics/naming_screen/pc_icon_on.png diff --git a/graphics/naming_screen/unused.pal b/graphics/naming_screen/rival.pal similarity index 100% rename from graphics/naming_screen/unused.pal rename to graphics/naming_screen/rival.pal diff --git a/graphics/naming_screen/roptions.png b/graphics/naming_screen/roptions.png deleted file mode 100644 index dfb7e01059..0000000000 Binary files a/graphics/naming_screen/roptions.png and /dev/null differ diff --git a/graphics/naming_screen/rwindow.png b/graphics/naming_screen/rwindow.png deleted file mode 100644 index 9571abb805..0000000000 Binary files a/graphics/naming_screen/rwindow.png and /dev/null differ diff --git a/graphics/naming_screen/underscore.png b/graphics/naming_screen/underscore.png index 409ca82ed6..58d78ce086 100644 Binary files a/graphics/naming_screen/underscore.png and b/graphics/naming_screen/underscore.png differ diff --git a/graphics/object_events/pics/berry_trees/chople.png b/graphics/object_events/pics/berry_trees/chople.png new file mode 100644 index 0000000000..fc70a9af59 Binary files /dev/null and b/graphics/object_events/pics/berry_trees/chople.png differ diff --git a/graphics/object_events/pics/berry_trees/colbur.png b/graphics/object_events/pics/berry_trees/colbur.png new file mode 100644 index 0000000000..241507aafd Binary files /dev/null and b/graphics/object_events/pics/berry_trees/colbur.png differ diff --git a/graphics/object_events/pics/berry_trees/custap.png b/graphics/object_events/pics/berry_trees/custap.png new file mode 100644 index 0000000000..3cb5ccfb10 Binary files /dev/null and b/graphics/object_events/pics/berry_trees/custap.png differ diff --git a/graphics/object_events/pics/berry_trees/haban.png b/graphics/object_events/pics/berry_trees/haban.png new file mode 100644 index 0000000000..ba4839c80b Binary files /dev/null and b/graphics/object_events/pics/berry_trees/haban.png differ diff --git a/graphics/object_events/pics/berry_trees/jaboca.png b/graphics/object_events/pics/berry_trees/jaboca.png new file mode 100644 index 0000000000..36e51eb015 Binary files /dev/null and b/graphics/object_events/pics/berry_trees/jaboca.png differ diff --git a/graphics/object_events/pics/berry_trees/kasib.png b/graphics/object_events/pics/berry_trees/kasib.png new file mode 100644 index 0000000000..b8a8401e8d Binary files /dev/null and b/graphics/object_events/pics/berry_trees/kasib.png differ diff --git a/graphics/object_events/pics/berry_trees/kebia.png b/graphics/object_events/pics/berry_trees/kebia.png new file mode 100644 index 0000000000..03efc73c1f Binary files /dev/null and b/graphics/object_events/pics/berry_trees/kebia.png differ diff --git a/graphics/object_events/pics/berry_trees/micle.png b/graphics/object_events/pics/berry_trees/micle.png new file mode 100644 index 0000000000..365ff43b21 Binary files /dev/null and b/graphics/object_events/pics/berry_trees/micle.png differ diff --git a/graphics/object_events/pics/berry_trees/occa.png b/graphics/object_events/pics/berry_trees/occa.png new file mode 100644 index 0000000000..8685264f9b Binary files /dev/null and b/graphics/object_events/pics/berry_trees/occa.png differ diff --git a/graphics/object_events/pics/berry_trees/payapa.png b/graphics/object_events/pics/berry_trees/payapa.png new file mode 100644 index 0000000000..14aed0c235 Binary files /dev/null and b/graphics/object_events/pics/berry_trees/payapa.png differ diff --git a/graphics/object_events/pics/berry_trees/roseli.png b/graphics/object_events/pics/berry_trees/roseli.png new file mode 100644 index 0000000000..f59bf93a2d Binary files /dev/null and b/graphics/object_events/pics/berry_trees/roseli.png differ diff --git a/graphics/object_events/pics/berry_trees/rowap.png b/graphics/object_events/pics/berry_trees/rowap.png new file mode 100644 index 0000000000..a0814bfa2e Binary files /dev/null and b/graphics/object_events/pics/berry_trees/rowap.png differ diff --git a/graphics/object_events/pics/berry_trees/shuca.png b/graphics/object_events/pics/berry_trees/shuca.png new file mode 100644 index 0000000000..4e95bb4f6a Binary files /dev/null and b/graphics/object_events/pics/berry_trees/shuca.png differ diff --git a/graphics/object_events/pics/berry_trees/tanga.png b/graphics/object_events/pics/berry_trees/tanga.png new file mode 100644 index 0000000000..28e86f6f4d Binary files /dev/null and b/graphics/object_events/pics/berry_trees/tanga.png differ diff --git a/graphics/object_events/pics/berry_trees/yache.png b/graphics/object_events/pics/berry_trees/yache.png new file mode 100644 index 0000000000..bde4393548 Binary files /dev/null and b/graphics/object_events/pics/berry_trees/yache.png differ diff --git a/graphics/interface/party_menu_bg.bin b/graphics/party_menu/bg.bin similarity index 100% rename from graphics/interface/party_menu_bg.bin rename to graphics/party_menu/bg.bin diff --git a/graphics/interface/party_menu_bg.pal b/graphics/party_menu/bg.pal similarity index 100% rename from graphics/interface/party_menu_bg.pal rename to graphics/party_menu/bg.pal diff --git a/graphics/interface/party_menu_bg.png b/graphics/party_menu/bg.png similarity index 100% rename from graphics/interface/party_menu_bg.png rename to graphics/party_menu/bg.png diff --git a/graphics/interface/party_menu_cancel_button.bin b/graphics/party_menu/cancel_button.bin similarity index 100% rename from graphics/interface/party_menu_cancel_button.bin rename to graphics/party_menu/cancel_button.bin diff --git a/graphics/interface/party_menu_confirm_button.bin b/graphics/party_menu/confirm_button.bin similarity index 100% rename from graphics/interface/party_menu_confirm_button.bin rename to graphics/party_menu/confirm_button.bin diff --git a/graphics/interface/hold_icons.png b/graphics/party_menu/hold_icons.png similarity index 100% rename from graphics/interface/hold_icons.png rename to graphics/party_menu/hold_icons.png diff --git a/graphics/interface/party_menu_pokeball.png b/graphics/party_menu/pokeball.png similarity index 100% rename from graphics/interface/party_menu_pokeball.png rename to graphics/party_menu/pokeball.png diff --git a/graphics/interface/party_menu_pokeball_small.png b/graphics/party_menu/pokeball_small.png similarity index 100% rename from graphics/interface/party_menu_pokeball_small.png rename to graphics/party_menu/pokeball_small.png diff --git a/graphics/party_menu/slot_main.bin b/graphics/party_menu/slot_main.bin new file mode 100755 index 0000000000..2f3e729f6d Binary files /dev/null and b/graphics/party_menu/slot_main.bin differ diff --git a/graphics/party_menu/slot_main_no_hp.bin b/graphics/party_menu/slot_main_no_hp.bin new file mode 100755 index 0000000000..653ad1a64b Binary files /dev/null and b/graphics/party_menu/slot_main_no_hp.bin differ diff --git a/graphics/party_menu/slot_wide.bin b/graphics/party_menu/slot_wide.bin new file mode 100755 index 0000000000..c88b73bf78 Binary files /dev/null and b/graphics/party_menu/slot_wide.bin differ diff --git a/graphics/party_menu/slot_wide_empty.bin b/graphics/party_menu/slot_wide_empty.bin new file mode 100755 index 0000000000..3592178b3f Binary files /dev/null and b/graphics/party_menu/slot_wide_empty.bin differ diff --git a/graphics/party_menu/slot_wide_no_hp.bin b/graphics/party_menu/slot_wide_no_hp.bin new file mode 100755 index 0000000000..8f662da0ae Binary files /dev/null and b/graphics/party_menu/slot_wide_no_hp.bin differ diff --git a/graphics/picture_frame/lobby.png b/graphics/picture_frame/lobby.png index 1b7da4a1a6..2f04105ff0 100644 Binary files a/graphics/picture_frame/lobby.png and b/graphics/picture_frame/lobby.png differ diff --git a/graphics/interface/pokeblock_device.png b/graphics/pokeblock/device.png similarity index 100% rename from graphics/interface/pokeblock_device.png rename to graphics/pokeblock/device.png diff --git a/graphics/interface/pokeblock_feeding_bg_map.bin b/graphics/pokeblock/feeding_bg.bin similarity index 100% rename from graphics/interface/pokeblock_feeding_bg_map.bin rename to graphics/pokeblock/feeding_bg.bin diff --git a/graphics/interface/pokeblock.bin b/graphics/pokeblock/menu.bin similarity index 100% rename from graphics/interface/pokeblock.bin rename to graphics/pokeblock/menu.bin diff --git a/graphics/interface/pokeblock_case_frame.pal b/graphics/pokeblock/menu.pal similarity index 100% rename from graphics/interface/pokeblock_case_frame.pal rename to graphics/pokeblock/menu.pal diff --git a/graphics/interface/pokeblock_case_frame.png b/graphics/pokeblock/menu.png similarity index 100% rename from graphics/interface/pokeblock_case_frame.png rename to graphics/pokeblock/menu.png diff --git a/graphics/interface/region_map.bin b/graphics/pokedex/region_map.bin similarity index 100% rename from graphics/interface/region_map.bin rename to graphics/pokedex/region_map.bin diff --git a/graphics/interface/region_map.pal b/graphics/pokedex/region_map.pal similarity index 100% rename from graphics/interface/region_map.pal rename to graphics/pokedex/region_map.pal diff --git a/graphics/interface/region_map.png b/graphics/pokedex/region_map.png similarity index 100% rename from graphics/interface/region_map.png rename to graphics/pokedex/region_map.png diff --git a/graphics/interface/region_map_affine.bin b/graphics/pokedex/region_map_affine.bin similarity index 100% rename from graphics/interface/region_map_affine.bin rename to graphics/pokedex/region_map_affine.bin diff --git a/graphics/interface/region_map_affine.png b/graphics/pokedex/region_map_affine.png similarity index 100% rename from graphics/interface/region_map_affine.png rename to graphics/pokedex/region_map_affine.png diff --git a/graphics/pokemon/mega_abomasnow/back.png b/graphics/pokemon/abomasnow/mega/back.png similarity index 100% rename from graphics/pokemon/mega_abomasnow/back.png rename to graphics/pokemon/abomasnow/mega/back.png diff --git a/graphics/pokemon/mega_abomasnow/front.png b/graphics/pokemon/abomasnow/mega/front.png similarity index 100% rename from graphics/pokemon/mega_abomasnow/front.png rename to graphics/pokemon/abomasnow/mega/front.png diff --git a/graphics/pokemon/mega_abomasnow/icon.png b/graphics/pokemon/abomasnow/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_abomasnow/icon.png rename to graphics/pokemon/abomasnow/mega/icon.png diff --git a/graphics/pokemon/mega_abomasnow/normal.pal b/graphics/pokemon/abomasnow/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_abomasnow/normal.pal rename to graphics/pokemon/abomasnow/mega/normal.pal diff --git a/graphics/pokemon/mega_abomasnow/shiny.pal b/graphics/pokemon/abomasnow/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_abomasnow/shiny.pal rename to graphics/pokemon/abomasnow/mega/shiny.pal diff --git a/graphics/pokemon/mega_absol/back.png b/graphics/pokemon/absol/mega/back.png similarity index 100% rename from graphics/pokemon/mega_absol/back.png rename to graphics/pokemon/absol/mega/back.png diff --git a/graphics/pokemon/mega_absol/front.png b/graphics/pokemon/absol/mega/front.png similarity index 100% rename from graphics/pokemon/mega_absol/front.png rename to graphics/pokemon/absol/mega/front.png diff --git a/graphics/pokemon/mega_absol/icon.png b/graphics/pokemon/absol/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_absol/icon.png rename to graphics/pokemon/absol/mega/icon.png diff --git a/graphics/pokemon/mega_absol/normal.pal b/graphics/pokemon/absol/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_absol/normal.pal rename to graphics/pokemon/absol/mega/normal.pal diff --git a/graphics/pokemon/mega_absol/shiny.pal b/graphics/pokemon/absol/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_absol/shiny.pal rename to graphics/pokemon/absol/mega/shiny.pal diff --git a/graphics/pokemon/mega_aerodactyl/back.png b/graphics/pokemon/aerodactyl/mega/back.png similarity index 100% rename from graphics/pokemon/mega_aerodactyl/back.png rename to graphics/pokemon/aerodactyl/mega/back.png diff --git a/graphics/pokemon/mega_aerodactyl/front.png b/graphics/pokemon/aerodactyl/mega/front.png similarity index 100% rename from graphics/pokemon/mega_aerodactyl/front.png rename to graphics/pokemon/aerodactyl/mega/front.png diff --git a/graphics/pokemon/mega_aerodactyl/icon.png b/graphics/pokemon/aerodactyl/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_aerodactyl/icon.png rename to graphics/pokemon/aerodactyl/mega/icon.png diff --git a/graphics/pokemon/mega_aerodactyl/normal.pal b/graphics/pokemon/aerodactyl/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_aerodactyl/normal.pal rename to graphics/pokemon/aerodactyl/mega/normal.pal diff --git a/graphics/pokemon/mega_aerodactyl/shiny.pal b/graphics/pokemon/aerodactyl/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_aerodactyl/shiny.pal rename to graphics/pokemon/aerodactyl/mega/shiny.pal diff --git a/graphics/pokemon/mega_aggron/back.png b/graphics/pokemon/aggron/mega/back.png similarity index 100% rename from graphics/pokemon/mega_aggron/back.png rename to graphics/pokemon/aggron/mega/back.png diff --git a/graphics/pokemon/mega_aggron/front.png b/graphics/pokemon/aggron/mega/front.png similarity index 100% rename from graphics/pokemon/mega_aggron/front.png rename to graphics/pokemon/aggron/mega/front.png diff --git a/graphics/pokemon/mega_aggron/icon.png b/graphics/pokemon/aggron/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_aggron/icon.png rename to graphics/pokemon/aggron/mega/icon.png diff --git a/graphics/pokemon/mega_aggron/normal.pal b/graphics/pokemon/aggron/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_aggron/normal.pal rename to graphics/pokemon/aggron/mega/normal.pal diff --git a/graphics/pokemon/mega_aggron/shiny.pal b/graphics/pokemon/aggron/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_aggron/shiny.pal rename to graphics/pokemon/aggron/mega/shiny.pal diff --git a/graphics/pokemon/mega_alakazam/back.png b/graphics/pokemon/alakazam/mega/back.png similarity index 100% rename from graphics/pokemon/mega_alakazam/back.png rename to graphics/pokemon/alakazam/mega/back.png diff --git a/graphics/pokemon/mega_alakazam/front.png b/graphics/pokemon/alakazam/mega/front.png similarity index 100% rename from graphics/pokemon/mega_alakazam/front.png rename to graphics/pokemon/alakazam/mega/front.png diff --git a/graphics/pokemon/mega_alakazam/icon.png b/graphics/pokemon/alakazam/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_alakazam/icon.png rename to graphics/pokemon/alakazam/mega/icon.png diff --git a/graphics/pokemon/mega_alakazam/normal.pal b/graphics/pokemon/alakazam/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_alakazam/normal.pal rename to graphics/pokemon/alakazam/mega/normal.pal diff --git a/graphics/pokemon/mega_alakazam/shiny.pal b/graphics/pokemon/alakazam/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_alakazam/shiny.pal rename to graphics/pokemon/alakazam/mega/shiny.pal diff --git a/graphics/pokemon/alcremie/footprint.png b/graphics/pokemon/alcremie/footprint.png new file mode 100644 index 0000000000..aeea2e966e Binary files /dev/null and b/graphics/pokemon/alcremie/footprint.png differ diff --git a/graphics/pokemon/mega_altaria/back.png b/graphics/pokemon/altaria/mega/back.png similarity index 100% rename from graphics/pokemon/mega_altaria/back.png rename to graphics/pokemon/altaria/mega/back.png diff --git a/graphics/pokemon/mega_altaria/front.png b/graphics/pokemon/altaria/mega/front.png similarity index 100% rename from graphics/pokemon/mega_altaria/front.png rename to graphics/pokemon/altaria/mega/front.png diff --git a/graphics/pokemon/mega_altaria/icon.png b/graphics/pokemon/altaria/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_altaria/icon.png rename to graphics/pokemon/altaria/mega/icon.png diff --git a/graphics/pokemon/mega_altaria/normal.pal b/graphics/pokemon/altaria/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_altaria/normal.pal rename to graphics/pokemon/altaria/mega/normal.pal diff --git a/graphics/pokemon/mega_altaria/shiny.pal b/graphics/pokemon/altaria/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_altaria/shiny.pal rename to graphics/pokemon/altaria/mega/shiny.pal diff --git a/graphics/pokemon/mega_ampharos/back.png b/graphics/pokemon/ampharos/mega/back.png similarity index 100% rename from graphics/pokemon/mega_ampharos/back.png rename to graphics/pokemon/ampharos/mega/back.png diff --git a/graphics/pokemon/mega_ampharos/front.png b/graphics/pokemon/ampharos/mega/front.png similarity index 100% rename from graphics/pokemon/mega_ampharos/front.png rename to graphics/pokemon/ampharos/mega/front.png diff --git a/graphics/pokemon/mega_ampharos/icon.png b/graphics/pokemon/ampharos/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_ampharos/icon.png rename to graphics/pokemon/ampharos/mega/icon.png diff --git a/graphics/pokemon/mega_ampharos/normal.pal b/graphics/pokemon/ampharos/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_ampharos/normal.pal rename to graphics/pokemon/ampharos/mega/normal.pal diff --git a/graphics/pokemon/mega_ampharos/shiny.pal b/graphics/pokemon/ampharos/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_ampharos/shiny.pal rename to graphics/pokemon/ampharos/mega/shiny.pal diff --git a/graphics/pokemon/appletun/footprint.png b/graphics/pokemon/appletun/footprint.png new file mode 100644 index 0000000000..f39865658a Binary files /dev/null and b/graphics/pokemon/appletun/footprint.png differ diff --git a/graphics/pokemon/appletun/icon.png b/graphics/pokemon/appletun/icon.png index 66de1521a9..3b474c0f08 100644 Binary files a/graphics/pokemon/appletun/icon.png and b/graphics/pokemon/appletun/icon.png differ diff --git a/graphics/pokemon/applin/footprint.png b/graphics/pokemon/applin/footprint.png new file mode 100644 index 0000000000..915b2fc2ae Binary files /dev/null and b/graphics/pokemon/applin/footprint.png differ diff --git a/graphics/pokemon/applin/icon.png b/graphics/pokemon/applin/icon.png index c518f91a04..ce9fee4a9a 100644 Binary files a/graphics/pokemon/applin/icon.png and b/graphics/pokemon/applin/icon.png differ diff --git a/graphics/pokemon/araquanid/footprint.png b/graphics/pokemon/araquanid/footprint.png new file mode 100644 index 0000000000..4740af4274 Binary files /dev/null and b/graphics/pokemon/araquanid/footprint.png differ diff --git a/graphics/pokemon/arcanine/hisuian/back.png b/graphics/pokemon/arcanine/hisuian/back.png new file mode 100644 index 0000000000..a6fdca501a Binary files /dev/null and b/graphics/pokemon/arcanine/hisuian/back.png differ diff --git a/graphics/pokemon/arcanine/hisuian/front.png b/graphics/pokemon/arcanine/hisuian/front.png new file mode 100644 index 0000000000..6adc0d93ac Binary files /dev/null and b/graphics/pokemon/arcanine/hisuian/front.png differ diff --git a/graphics/pokemon/arcanine/hisuian/icon.png b/graphics/pokemon/arcanine/hisuian/icon.png new file mode 100644 index 0000000000..9fe9007929 Binary files /dev/null and b/graphics/pokemon/arcanine/hisuian/icon.png differ diff --git a/graphics/pokemon/arcanine/hisuian/normal.pal b/graphics/pokemon/arcanine/hisuian/normal.pal new file mode 100644 index 0000000000..7502c6a4cc --- /dev/null +++ b/graphics/pokemon/arcanine/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +48 40 32 +0 0 0 +136 136 128 +96 96 80 +232 72 56 +176 48 32 +216 216 208 +248 248 240 +72 64 56 +40 40 40 +208 88 64 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/arcanine/hisuian/shiny.pal b/graphics/pokemon/arcanine/hisuian/shiny.pal new file mode 100644 index 0000000000..c786e1990f --- /dev/null +++ b/graphics/pokemon/arcanine/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +48 40 32 +0 0 0 +136 136 128 +96 96 80 +224 208 40 +176 152 0 +216 216 208 +248 248 240 +72 64 56 +40 40 40 +224 208 40 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/arctovish/footprint.png b/graphics/pokemon/arctovish/footprint.png new file mode 100644 index 0000000000..0ba63e7231 Binary files /dev/null and b/graphics/pokemon/arctovish/footprint.png differ diff --git a/graphics/pokemon/arctozolt/footprint.png b/graphics/pokemon/arctozolt/footprint.png new file mode 100644 index 0000000000..2ed399586c Binary files /dev/null and b/graphics/pokemon/arctozolt/footprint.png differ diff --git a/graphics/pokemon/arrokuda/footprint.png b/graphics/pokemon/arrokuda/footprint.png new file mode 100644 index 0000000000..62b788fddc Binary files /dev/null and b/graphics/pokemon/arrokuda/footprint.png differ diff --git a/graphics/pokemon/articuno/galarian/icon.png b/graphics/pokemon/articuno/galarian/icon.png index ce061cbc0d..556bd42b45 100644 Binary files a/graphics/pokemon/articuno/galarian/icon.png and b/graphics/pokemon/articuno/galarian/icon.png differ diff --git a/graphics/pokemon/mega_audino/back.png b/graphics/pokemon/audino/mega/back.png similarity index 100% rename from graphics/pokemon/mega_audino/back.png rename to graphics/pokemon/audino/mega/back.png diff --git a/graphics/pokemon/mega_audino/front.png b/graphics/pokemon/audino/mega/front.png similarity index 100% rename from graphics/pokemon/mega_audino/front.png rename to graphics/pokemon/audino/mega/front.png diff --git a/graphics/pokemon/mega_audino/icon.png b/graphics/pokemon/audino/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_audino/icon.png rename to graphics/pokemon/audino/mega/icon.png diff --git a/graphics/pokemon/mega_audino/normal.pal b/graphics/pokemon/audino/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_audino/normal.pal rename to graphics/pokemon/audino/mega/normal.pal diff --git a/graphics/pokemon/mega_audino/shiny.pal b/graphics/pokemon/audino/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_audino/shiny.pal rename to graphics/pokemon/audino/mega/shiny.pal diff --git a/graphics/pokemon/avalugg/hisuian/back.png b/graphics/pokemon/avalugg/hisuian/back.png new file mode 100644 index 0000000000..885fd4c13a Binary files /dev/null and b/graphics/pokemon/avalugg/hisuian/back.png differ diff --git a/graphics/pokemon/avalugg/hisuian/front.png b/graphics/pokemon/avalugg/hisuian/front.png new file mode 100644 index 0000000000..b120608e1f Binary files /dev/null and b/graphics/pokemon/avalugg/hisuian/front.png differ diff --git a/graphics/pokemon/avalugg/hisuian/icon.png b/graphics/pokemon/avalugg/hisuian/icon.png new file mode 100644 index 0000000000..5b2b3f3477 Binary files /dev/null and b/graphics/pokemon/avalugg/hisuian/icon.png differ diff --git a/graphics/pokemon/avalugg/hisuian/normal.pal b/graphics/pokemon/avalugg/hisuian/normal.pal new file mode 100644 index 0000000000..8055ef92ab --- /dev/null +++ b/graphics/pokemon/avalugg/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +88 168 208 +80 112 144 +184 240 248 +104 80 64 +128 208 240 +248 248 248 +80 40 24 +8 8 8 +144 120 96 +144 64 32 +200 200 216 +144 152 168 +248 192 0 +88 56 56 +0 0 0 diff --git a/graphics/pokemon/avalugg/hisuian/shiny.pal b/graphics/pokemon/avalugg/hisuian/shiny.pal new file mode 100644 index 0000000000..9e547358cc --- /dev/null +++ b/graphics/pokemon/avalugg/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +112 152 208 +80 96 168 +184 232 248 +200 160 144 +128 192 240 +248 248 248 +112 80 72 +8 8 8 +232 192 176 +248 176 24 +248 176 120 +248 136 88 +248 176 24 +160 128 120 +0 0 0 diff --git a/graphics/pokemon/mega_banette/back.png b/graphics/pokemon/banette/mega/back.png similarity index 100% rename from graphics/pokemon/mega_banette/back.png rename to graphics/pokemon/banette/mega/back.png diff --git a/graphics/pokemon/mega_banette/front.png b/graphics/pokemon/banette/mega/front.png similarity index 100% rename from graphics/pokemon/mega_banette/front.png rename to graphics/pokemon/banette/mega/front.png diff --git a/graphics/pokemon/mega_banette/icon.png b/graphics/pokemon/banette/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_banette/icon.png rename to graphics/pokemon/banette/mega/icon.png diff --git a/graphics/pokemon/mega_banette/normal.pal b/graphics/pokemon/banette/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_banette/normal.pal rename to graphics/pokemon/banette/mega/normal.pal diff --git a/graphics/pokemon/mega_banette/shiny.pal b/graphics/pokemon/banette/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_banette/shiny.pal rename to graphics/pokemon/banette/mega/shiny.pal diff --git a/graphics/pokemon/barraskewda/footprint.png b/graphics/pokemon/barraskewda/footprint.png new file mode 100644 index 0000000000..795e7e445c Binary files /dev/null and b/graphics/pokemon/barraskewda/footprint.png differ diff --git a/graphics/pokemon/basculegion/icon.png b/graphics/pokemon/basculegion/icon.png new file mode 100644 index 0000000000..579a83d550 Binary files /dev/null and b/graphics/pokemon/basculegion/icon.png differ diff --git a/graphics/pokemon/basculegion/iconf.png b/graphics/pokemon/basculegion/iconf.png new file mode 100644 index 0000000000..fb85ca6c0c Binary files /dev/null and b/graphics/pokemon/basculegion/iconf.png differ diff --git a/graphics/pokemon/basculin/white_striped/back.png b/graphics/pokemon/basculin/white_striped/back.png new file mode 100644 index 0000000000..d8faa1575d Binary files /dev/null and b/graphics/pokemon/basculin/white_striped/back.png differ diff --git a/graphics/pokemon/basculin/white_striped/front.png b/graphics/pokemon/basculin/white_striped/front.png new file mode 100644 index 0000000000..f16202e149 Binary files /dev/null and b/graphics/pokemon/basculin/white_striped/front.png differ diff --git a/graphics/pokemon/basculin/white_striped/icon.png b/graphics/pokemon/basculin/white_striped/icon.png new file mode 100644 index 0000000000..a69c4e51a8 Binary files /dev/null and b/graphics/pokemon/basculin/white_striped/icon.png differ diff --git a/graphics/pokemon/basculin/white_striped/normal.pal b/graphics/pokemon/basculin/white_striped/normal.pal new file mode 100644 index 0000000000..5e82d654d3 --- /dev/null +++ b/graphics/pokemon/basculin/white_striped/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +72 80 80 +8 8 8 +224 224 224 +160 160 160 +32 48 56 +16 16 16 +64 80 80 +120 168 168 +168 216 224 +64 160 80 +0 64 32 +40 112 48 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/basculin/white_striped/shiny.pal b/graphics/pokemon/basculin/white_striped/shiny.pal new file mode 100644 index 0000000000..766d07db7e --- /dev/null +++ b/graphics/pokemon/basculin/white_striped/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +72 80 80 +8 8 8 +224 224 224 +160 160 160 +32 48 56 +16 16 16 +64 80 80 +120 168 168 +168 216 224 +120 168 56 +40 64 0 +80 112 40 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/mega_beedrill/back.png b/graphics/pokemon/beedrill/mega/back.png similarity index 100% rename from graphics/pokemon/mega_beedrill/back.png rename to graphics/pokemon/beedrill/mega/back.png diff --git a/graphics/pokemon/mega_beedrill/front.png b/graphics/pokemon/beedrill/mega/front.png similarity index 100% rename from graphics/pokemon/mega_beedrill/front.png rename to graphics/pokemon/beedrill/mega/front.png diff --git a/graphics/pokemon/beedrill/mega/icon.png b/graphics/pokemon/beedrill/mega/icon.png new file mode 100644 index 0000000000..9a1788b7e1 Binary files /dev/null and b/graphics/pokemon/beedrill/mega/icon.png differ diff --git a/graphics/pokemon/mega_beedrill/normal.pal b/graphics/pokemon/beedrill/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_beedrill/normal.pal rename to graphics/pokemon/beedrill/mega/normal.pal diff --git a/graphics/pokemon/mega_beedrill/shiny.pal b/graphics/pokemon/beedrill/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_beedrill/shiny.pal rename to graphics/pokemon/beedrill/mega/shiny.pal diff --git a/graphics/pokemon/bewear/footprint.png b/graphics/pokemon/bewear/footprint.png new file mode 100644 index 0000000000..f754f203c9 Binary files /dev/null and b/graphics/pokemon/bewear/footprint.png differ diff --git a/graphics/pokemon/bidoof/anim_frontf.png b/graphics/pokemon/bidoof/anim_frontf.png new file mode 100644 index 0000000000..9585a6015c Binary files /dev/null and b/graphics/pokemon/bidoof/anim_frontf.png differ diff --git a/graphics/pokemon/bidoof/backf.png b/graphics/pokemon/bidoof/backf.png new file mode 100644 index 0000000000..5f6bc7e8bc Binary files /dev/null and b/graphics/pokemon/bidoof/backf.png differ diff --git a/graphics/pokemon/blacephalon/footprint.png b/graphics/pokemon/blacephalon/footprint.png new file mode 100644 index 0000000000..7ae084ee5f Binary files /dev/null and b/graphics/pokemon/blacephalon/footprint.png differ diff --git a/graphics/pokemon/mega_blastoise/back.png b/graphics/pokemon/blastoise/mega/back.png similarity index 100% rename from graphics/pokemon/mega_blastoise/back.png rename to graphics/pokemon/blastoise/mega/back.png diff --git a/graphics/pokemon/mega_blastoise/front.png b/graphics/pokemon/blastoise/mega/front.png similarity index 100% rename from graphics/pokemon/mega_blastoise/front.png rename to graphics/pokemon/blastoise/mega/front.png diff --git a/graphics/pokemon/mega_blastoise/icon.png b/graphics/pokemon/blastoise/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_blastoise/icon.png rename to graphics/pokemon/blastoise/mega/icon.png diff --git a/graphics/pokemon/mega_blastoise/normal.pal b/graphics/pokemon/blastoise/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_blastoise/normal.pal rename to graphics/pokemon/blastoise/mega/normal.pal diff --git a/graphics/pokemon/mega_blastoise/shiny.pal b/graphics/pokemon/blastoise/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_blastoise/shiny.pal rename to graphics/pokemon/blastoise/mega/shiny.pal diff --git a/graphics/pokemon/mega_blaziken/back.png b/graphics/pokemon/blaziken/mega/back.png similarity index 100% rename from graphics/pokemon/mega_blaziken/back.png rename to graphics/pokemon/blaziken/mega/back.png diff --git a/graphics/pokemon/mega_blaziken/front.png b/graphics/pokemon/blaziken/mega/front.png similarity index 100% rename from graphics/pokemon/mega_blaziken/front.png rename to graphics/pokemon/blaziken/mega/front.png diff --git a/graphics/pokemon/mega_blaziken/icon.png b/graphics/pokemon/blaziken/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_blaziken/icon.png rename to graphics/pokemon/blaziken/mega/icon.png diff --git a/graphics/pokemon/mega_blaziken/normal.pal b/graphics/pokemon/blaziken/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_blaziken/normal.pal rename to graphics/pokemon/blaziken/mega/normal.pal diff --git a/graphics/pokemon/mega_blaziken/shiny.pal b/graphics/pokemon/blaziken/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_blaziken/shiny.pal rename to graphics/pokemon/blaziken/mega/shiny.pal diff --git a/graphics/pokemon/blipbug/footprint.png b/graphics/pokemon/blipbug/footprint.png new file mode 100644 index 0000000000..762f0b03a0 Binary files /dev/null and b/graphics/pokemon/blipbug/footprint.png differ diff --git a/graphics/pokemon/blipbug/icon.png b/graphics/pokemon/blipbug/icon.png index e4ce3a937b..b3cf1cf792 100644 Binary files a/graphics/pokemon/blipbug/icon.png and b/graphics/pokemon/blipbug/icon.png differ diff --git a/graphics/pokemon/boltund/footprint.png b/graphics/pokemon/boltund/footprint.png new file mode 100644 index 0000000000..91e1defe9a Binary files /dev/null and b/graphics/pokemon/boltund/footprint.png differ diff --git a/graphics/pokemon/bounsweet/footprint.png b/graphics/pokemon/bounsweet/footprint.png new file mode 100644 index 0000000000..0ad5a272ed Binary files /dev/null and b/graphics/pokemon/bounsweet/footprint.png differ diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png new file mode 100644 index 0000000000..e314179b2b Binary files /dev/null and b/graphics/pokemon/braviary/hisuian/back.png differ diff --git a/graphics/pokemon/braviary/hisuian/front.png b/graphics/pokemon/braviary/hisuian/front.png new file mode 100644 index 0000000000..63fe93214d Binary files /dev/null and b/graphics/pokemon/braviary/hisuian/front.png differ diff --git a/graphics/pokemon/braviary/hisuian/icon.png b/graphics/pokemon/braviary/hisuian/icon.png new file mode 100644 index 0000000000..c2aa449d95 Binary files /dev/null and b/graphics/pokemon/braviary/hisuian/icon.png differ diff --git a/graphics/pokemon/braviary/hisuian/normal.pal b/graphics/pokemon/braviary/hisuian/normal.pal new file mode 100644 index 0000000000..b792f9ab7e --- /dev/null +++ b/graphics/pokemon/braviary/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +104 88 80 +8 8 8 +232 232 224 +184 176 168 +56 56 64 +80 88 88 +152 64 168 +168 96 184 +32 40 40 +144 152 184 +80 184 160 +168 24 24 +240 248 248 +224 192 72 +184 128 56 diff --git a/graphics/pokemon/braviary/hisuian/shiny.pal b/graphics/pokemon/braviary/hisuian/shiny.pal new file mode 100644 index 0000000000..fea7024017 --- /dev/null +++ b/graphics/pokemon/braviary/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +24 24 24 +8 8 8 +64 64 56 +40 40 32 +56 56 64 +80 88 88 +48 176 216 +120 232 240 +32 40 40 +168 248 248 +232 248 248 +96 56 144 +240 248 248 +224 192 72 +184 128 56 diff --git a/graphics/pokemon/brionne/footprint.png b/graphics/pokemon/brionne/footprint.png new file mode 100644 index 0000000000..7536a62509 Binary files /dev/null and b/graphics/pokemon/brionne/footprint.png differ diff --git a/graphics/pokemon/bruxish/footprint.png b/graphics/pokemon/bruxish/footprint.png new file mode 100644 index 0000000000..9f97b57e6e Binary files /dev/null and b/graphics/pokemon/bruxish/footprint.png differ diff --git a/graphics/pokemon/buzzwole/footprint.png b/graphics/pokemon/buzzwole/footprint.png new file mode 100644 index 0000000000..1e3f7c6775 Binary files /dev/null and b/graphics/pokemon/buzzwole/footprint.png differ diff --git a/graphics/pokemon/calyrex/footprint.png b/graphics/pokemon/calyrex/footprint.png new file mode 100644 index 0000000000..9b96a7a1eb Binary files /dev/null and b/graphics/pokemon/calyrex/footprint.png differ diff --git a/graphics/pokemon/calyrex/ice_rider/icon.png b/graphics/pokemon/calyrex/ice_rider/icon.png new file mode 100644 index 0000000000..33a9879200 Binary files /dev/null and b/graphics/pokemon/calyrex/ice_rider/icon.png differ diff --git a/graphics/pokemon/calyrex/icon.png b/graphics/pokemon/calyrex/icon.png new file mode 100644 index 0000000000..d0a835fe09 Binary files /dev/null and b/graphics/pokemon/calyrex/icon.png differ diff --git a/graphics/pokemon/calyrex/shadow_rider/icon.png b/graphics/pokemon/calyrex/shadow_rider/icon.png new file mode 100644 index 0000000000..e1747ccc62 Binary files /dev/null and b/graphics/pokemon/calyrex/shadow_rider/icon.png differ diff --git a/graphics/pokemon/mega_camerupt/back.png b/graphics/pokemon/camerupt/mega/back.png similarity index 100% rename from graphics/pokemon/mega_camerupt/back.png rename to graphics/pokemon/camerupt/mega/back.png diff --git a/graphics/pokemon/mega_camerupt/front.png b/graphics/pokemon/camerupt/mega/front.png similarity index 100% rename from graphics/pokemon/mega_camerupt/front.png rename to graphics/pokemon/camerupt/mega/front.png diff --git a/graphics/pokemon/mega_camerupt/icon.png b/graphics/pokemon/camerupt/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_camerupt/icon.png rename to graphics/pokemon/camerupt/mega/icon.png diff --git a/graphics/pokemon/mega_camerupt/normal.pal b/graphics/pokemon/camerupt/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_camerupt/normal.pal rename to graphics/pokemon/camerupt/mega/normal.pal diff --git a/graphics/pokemon/mega_camerupt/shiny.pal b/graphics/pokemon/camerupt/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_camerupt/shiny.pal rename to graphics/pokemon/camerupt/mega/shiny.pal diff --git a/graphics/pokemon/carkol/footprint.png b/graphics/pokemon/carkol/footprint.png new file mode 100644 index 0000000000..628e18259b Binary files /dev/null and b/graphics/pokemon/carkol/footprint.png differ diff --git a/graphics/pokemon/castform/anim_front.png b/graphics/pokemon/castform/normal/anim_front.png similarity index 100% rename from graphics/pokemon/castform/anim_front.png rename to graphics/pokemon/castform/normal/anim_front.png diff --git a/graphics/pokemon/castform/back.png b/graphics/pokemon/castform/normal/back.png similarity index 100% rename from graphics/pokemon/castform/back.png rename to graphics/pokemon/castform/normal/back.png diff --git a/graphics/pokemon/castform/front.png b/graphics/pokemon/castform/normal/front.png similarity index 100% rename from graphics/pokemon/castform/front.png rename to graphics/pokemon/castform/normal/front.png diff --git a/graphics/pokemon/castform/normal.pal b/graphics/pokemon/castform/normal/normal.pal similarity index 100% rename from graphics/pokemon/castform/normal.pal rename to graphics/pokemon/castform/normal/normal.pal diff --git a/graphics/pokemon/castform/shiny.pal b/graphics/pokemon/castform/normal/shiny.pal similarity index 100% rename from graphics/pokemon/castform/shiny.pal rename to graphics/pokemon/castform/normal/shiny.pal diff --git a/graphics/pokemon/celesteela/footprint.png b/graphics/pokemon/celesteela/footprint.png new file mode 100644 index 0000000000..190f28d207 Binary files /dev/null and b/graphics/pokemon/celesteela/footprint.png differ diff --git a/graphics/pokemon/centiskorch/footprint.png b/graphics/pokemon/centiskorch/footprint.png new file mode 100644 index 0000000000..084c77fda8 Binary files /dev/null and b/graphics/pokemon/centiskorch/footprint.png differ diff --git a/graphics/pokemon/mega_charizard_x/back.png b/graphics/pokemon/charizard/mega_x/back.png similarity index 100% rename from graphics/pokemon/mega_charizard_x/back.png rename to graphics/pokemon/charizard/mega_x/back.png diff --git a/graphics/pokemon/mega_charizard_x/front.png b/graphics/pokemon/charizard/mega_x/front.png similarity index 100% rename from graphics/pokemon/mega_charizard_x/front.png rename to graphics/pokemon/charizard/mega_x/front.png diff --git a/graphics/pokemon/mega_charizard_x/icon.png b/graphics/pokemon/charizard/mega_x/icon.png similarity index 100% rename from graphics/pokemon/mega_charizard_x/icon.png rename to graphics/pokemon/charizard/mega_x/icon.png diff --git a/graphics/pokemon/mega_charizard_x/normal.pal b/graphics/pokemon/charizard/mega_x/normal.pal similarity index 100% rename from graphics/pokemon/mega_charizard_x/normal.pal rename to graphics/pokemon/charizard/mega_x/normal.pal diff --git a/graphics/pokemon/mega_charizard_x/shiny.pal b/graphics/pokemon/charizard/mega_x/shiny.pal similarity index 100% rename from graphics/pokemon/mega_charizard_x/shiny.pal rename to graphics/pokemon/charizard/mega_x/shiny.pal diff --git a/graphics/pokemon/mega_charizard_y/back.png b/graphics/pokemon/charizard/mega_y/back.png similarity index 100% rename from graphics/pokemon/mega_charizard_y/back.png rename to graphics/pokemon/charizard/mega_y/back.png diff --git a/graphics/pokemon/mega_charizard_y/front.png b/graphics/pokemon/charizard/mega_y/front.png similarity index 100% rename from graphics/pokemon/mega_charizard_y/front.png rename to graphics/pokemon/charizard/mega_y/front.png diff --git a/graphics/pokemon/mega_charizard_y/icon.png b/graphics/pokemon/charizard/mega_y/icon.png similarity index 100% rename from graphics/pokemon/mega_charizard_y/icon.png rename to graphics/pokemon/charizard/mega_y/icon.png diff --git a/graphics/pokemon/mega_charizard_y/normal.pal b/graphics/pokemon/charizard/mega_y/normal.pal similarity index 100% rename from graphics/pokemon/mega_charizard_y/normal.pal rename to graphics/pokemon/charizard/mega_y/normal.pal diff --git a/graphics/pokemon/mega_charizard_y/shiny.pal b/graphics/pokemon/charizard/mega_y/shiny.pal similarity index 100% rename from graphics/pokemon/mega_charizard_y/shiny.pal rename to graphics/pokemon/charizard/mega_y/shiny.pal diff --git a/graphics/pokemon/charjabug/footprint.png b/graphics/pokemon/charjabug/footprint.png new file mode 100644 index 0000000000..8dea358a43 Binary files /dev/null and b/graphics/pokemon/charjabug/footprint.png differ diff --git a/graphics/pokemon/cherrim/anim_front.png b/graphics/pokemon/cherrim/anim_front.png deleted file mode 100644 index 8f6fb3d30f..0000000000 Binary files a/graphics/pokemon/cherrim/anim_front.png and /dev/null differ diff --git a/graphics/pokemon/cherrim/front.png b/graphics/pokemon/cherrim/normal/anim_front.png similarity index 100% rename from graphics/pokemon/cherrim/front.png rename to graphics/pokemon/cherrim/normal/anim_front.png diff --git a/graphics/pokemon/cherrim/back.png b/graphics/pokemon/cherrim/normal/back.png similarity index 100% rename from graphics/pokemon/cherrim/back.png rename to graphics/pokemon/cherrim/normal/back.png diff --git a/graphics/pokemon/cherrim/normal/front.png b/graphics/pokemon/cherrim/normal/front.png new file mode 100644 index 0000000000..5b10c48d1d Binary files /dev/null and b/graphics/pokemon/cherrim/normal/front.png differ diff --git a/graphics/pokemon/cherrim/normal.pal b/graphics/pokemon/cherrim/normal/normal.pal similarity index 100% rename from graphics/pokemon/cherrim/normal.pal rename to graphics/pokemon/cherrim/normal/normal.pal diff --git a/graphics/pokemon/cherrim/shiny.pal b/graphics/pokemon/cherrim/normal/shiny.pal similarity index 100% rename from graphics/pokemon/cherrim/shiny.pal rename to graphics/pokemon/cherrim/normal/shiny.pal diff --git a/graphics/pokemon/cherrim/sunshine/anim_front.png b/graphics/pokemon/cherrim/sunshine/anim_front.png new file mode 100644 index 0000000000..42c7893893 Binary files /dev/null and b/graphics/pokemon/cherrim/sunshine/anim_front.png differ diff --git a/graphics/pokemon/chewtle/footprint.png b/graphics/pokemon/chewtle/footprint.png new file mode 100644 index 0000000000..d7d12db043 Binary files /dev/null and b/graphics/pokemon/chewtle/footprint.png differ diff --git a/graphics/pokemon/cinderace/footprint.png b/graphics/pokemon/cinderace/footprint.png new file mode 100644 index 0000000000..18c62da8bd Binary files /dev/null and b/graphics/pokemon/cinderace/footprint.png differ diff --git a/graphics/pokemon/clobbopus/footprint.png b/graphics/pokemon/clobbopus/footprint.png new file mode 100644 index 0000000000..755d308494 Binary files /dev/null and b/graphics/pokemon/clobbopus/footprint.png differ diff --git a/graphics/pokemon/coalossal/footprint.png b/graphics/pokemon/coalossal/footprint.png new file mode 100644 index 0000000000..7e2a55cf10 Binary files /dev/null and b/graphics/pokemon/coalossal/footprint.png differ diff --git a/graphics/pokemon/comfey/footprint.png b/graphics/pokemon/comfey/footprint.png new file mode 100644 index 0000000000..96f7256ab9 Binary files /dev/null and b/graphics/pokemon/comfey/footprint.png differ diff --git a/graphics/pokemon/copperajah/footprint.png b/graphics/pokemon/copperajah/footprint.png new file mode 100644 index 0000000000..2436de1087 Binary files /dev/null and b/graphics/pokemon/copperajah/footprint.png differ diff --git a/graphics/pokemon/corviknight/footprint.png b/graphics/pokemon/corviknight/footprint.png new file mode 100644 index 0000000000..3042a0e458 Binary files /dev/null and b/graphics/pokemon/corviknight/footprint.png differ diff --git a/graphics/pokemon/corvisquire/footprint.png b/graphics/pokemon/corvisquire/footprint.png new file mode 100644 index 0000000000..328be429b3 Binary files /dev/null and b/graphics/pokemon/corvisquire/footprint.png differ diff --git a/graphics/pokemon/cosmoem/footprint.png b/graphics/pokemon/cosmoem/footprint.png new file mode 100644 index 0000000000..31cecc3ac5 Binary files /dev/null and b/graphics/pokemon/cosmoem/footprint.png differ diff --git a/graphics/pokemon/cosmog/footprint.png b/graphics/pokemon/cosmog/footprint.png new file mode 100644 index 0000000000..a2fe0b64c4 Binary files /dev/null and b/graphics/pokemon/cosmog/footprint.png differ diff --git a/graphics/pokemon/crabominable/footprint.png b/graphics/pokemon/crabominable/footprint.png new file mode 100644 index 0000000000..d67ceceeea Binary files /dev/null and b/graphics/pokemon/crabominable/footprint.png differ diff --git a/graphics/pokemon/crabrawler/footprint.png b/graphics/pokemon/crabrawler/footprint.png new file mode 100644 index 0000000000..665b3e97b7 Binary files /dev/null and b/graphics/pokemon/crabrawler/footprint.png differ diff --git a/graphics/pokemon/cramorant/footprint.png b/graphics/pokemon/cramorant/footprint.png new file mode 100644 index 0000000000..9c9bffb0c9 Binary files /dev/null and b/graphics/pokemon/cramorant/footprint.png differ diff --git a/graphics/pokemon/cufant/footprint.png b/graphics/pokemon/cufant/footprint.png new file mode 100644 index 0000000000..1f455d9d8a Binary files /dev/null and b/graphics/pokemon/cufant/footprint.png differ diff --git a/graphics/pokemon/cursola/footprint.png b/graphics/pokemon/cursola/footprint.png new file mode 100644 index 0000000000..2a8e9ff356 Binary files /dev/null and b/graphics/pokemon/cursola/footprint.png differ diff --git a/graphics/pokemon/cutiefly/footprint.png b/graphics/pokemon/cutiefly/footprint.png new file mode 100644 index 0000000000..b7587ca277 Binary files /dev/null and b/graphics/pokemon/cutiefly/footprint.png differ diff --git a/graphics/pokemon/dartrix/footprint.png b/graphics/pokemon/dartrix/footprint.png new file mode 100644 index 0000000000..8a7eb236dc Binary files /dev/null and b/graphics/pokemon/dartrix/footprint.png differ diff --git a/graphics/pokemon/decidueye/footprint.png b/graphics/pokemon/decidueye/footprint.png new file mode 100644 index 0000000000..8061657a74 Binary files /dev/null and b/graphics/pokemon/decidueye/footprint.png differ diff --git a/graphics/pokemon/decidueye/hisuian/icon.png b/graphics/pokemon/decidueye/hisuian/icon.png new file mode 100644 index 0000000000..997071396f Binary files /dev/null and b/graphics/pokemon/decidueye/hisuian/icon.png differ diff --git a/graphics/unused/deoxys_speed_icon_wide.png b/graphics/pokemon/deoxys/icon_speed_wide.png similarity index 100% rename from graphics/unused/deoxys_speed_icon_wide.png rename to graphics/pokemon/deoxys/icon_speed_wide.png diff --git a/graphics/pokemon/dewpider/footprint.png b/graphics/pokemon/dewpider/footprint.png new file mode 100644 index 0000000000..87f972b028 Binary files /dev/null and b/graphics/pokemon/dewpider/footprint.png differ diff --git a/graphics/pokemon/dhelmise/footprint.png b/graphics/pokemon/dhelmise/footprint.png new file mode 100644 index 0000000000..933d21b5ac Binary files /dev/null and b/graphics/pokemon/dhelmise/footprint.png differ diff --git a/graphics/pokemon/dialga/origin/back.png b/graphics/pokemon/dialga/origin/back.png new file mode 100644 index 0000000000..a9867f0bd8 Binary files /dev/null and b/graphics/pokemon/dialga/origin/back.png differ diff --git a/graphics/pokemon/dialga/origin/front.png b/graphics/pokemon/dialga/origin/front.png new file mode 100644 index 0000000000..7e7c7aabb7 Binary files /dev/null and b/graphics/pokemon/dialga/origin/front.png differ diff --git a/graphics/pokemon/dialga/origin/icon.png b/graphics/pokemon/dialga/origin/icon.png new file mode 100644 index 0000000000..aa6c0c3afb Binary files /dev/null and b/graphics/pokemon/dialga/origin/icon.png differ diff --git a/graphics/pokemon/dialga/origin/normal.pal b/graphics/pokemon/dialga/origin/normal.pal new file mode 100644 index 0000000000..e7f93264bb --- /dev/null +++ b/graphics/pokemon/dialga/origin/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +96 160 192 +24 64 104 +152 208 240 +8 8 8 +24 88 144 +56 120 176 +64 72 80 +112 136 160 +88 128 168 +240 80 64 +64 128 248 +56 88 120 +64 112 152 +96 112 128 +0 0 0 diff --git a/graphics/pokemon/dialga/origin/shiny.pal b/graphics/pokemon/dialga/origin/shiny.pal new file mode 100644 index 0000000000..274c103f5a --- /dev/null +++ b/graphics/pokemon/dialga/origin/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +112 184 152 +8 104 120 +152 240 144 +8 8 8 +8 144 152 +24 200 200 +112 112 72 +184 200 168 +128 200 176 +240 80 64 +64 128 248 +80 136 112 +96 176 160 +152 168 112 +0 0 0 diff --git a/graphics/pokemon/mega_diancie/back.png b/graphics/pokemon/diancie/mega/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/mega_diancie/back.png rename to graphics/pokemon/diancie/mega/back.png diff --git a/graphics/pokemon/mega_diancie/front.png b/graphics/pokemon/diancie/mega/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/mega_diancie/front.png rename to graphics/pokemon/diancie/mega/front.png diff --git a/graphics/pokemon/mega_diancie/icon.png b/graphics/pokemon/diancie/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_diancie/icon.png rename to graphics/pokemon/diancie/mega/icon.png diff --git a/graphics/pokemon/mega_diancie/normal.pal b/graphics/pokemon/diancie/mega/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/mega_diancie/normal.pal rename to graphics/pokemon/diancie/mega/normal.pal diff --git a/graphics/pokemon/mega_diancie/shiny.pal b/graphics/pokemon/diancie/mega/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/mega_diancie/shiny.pal rename to graphics/pokemon/diancie/mega/shiny.pal diff --git a/graphics/pokemon/alolan_diglett/back.png b/graphics/pokemon/diglett/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_diglett/back.png rename to graphics/pokemon/diglett/alolan/back.png diff --git a/graphics/pokemon/alolan_diglett/front.png b/graphics/pokemon/diglett/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_diglett/front.png rename to graphics/pokemon/diglett/alolan/front.png diff --git a/graphics/pokemon/alolan_diglett/icon.png b/graphics/pokemon/diglett/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_diglett/icon.png rename to graphics/pokemon/diglett/alolan/icon.png diff --git a/graphics/pokemon/alolan_diglett/normal.pal b/graphics/pokemon/diglett/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_diglett/normal.pal rename to graphics/pokemon/diglett/alolan/normal.pal diff --git a/graphics/pokemon/alolan_diglett/shiny.pal b/graphics/pokemon/diglett/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_diglett/shiny.pal rename to graphics/pokemon/diglett/alolan/shiny.pal diff --git a/graphics/pokemon/dottler/footprint.png b/graphics/pokemon/dottler/footprint.png new file mode 100644 index 0000000000..d1c72ca9c3 Binary files /dev/null and b/graphics/pokemon/dottler/footprint.png differ diff --git a/graphics/pokemon/dracovish/footprint.png b/graphics/pokemon/dracovish/footprint.png new file mode 100644 index 0000000000..393a49c9e3 Binary files /dev/null and b/graphics/pokemon/dracovish/footprint.png differ diff --git a/graphics/pokemon/dracozolt/footprint.png b/graphics/pokemon/dracozolt/footprint.png new file mode 100644 index 0000000000..61e4db3013 Binary files /dev/null and b/graphics/pokemon/dracozolt/footprint.png differ diff --git a/graphics/pokemon/dragapult/footprint.png b/graphics/pokemon/dragapult/footprint.png new file mode 100644 index 0000000000..74f6dcf3cf Binary files /dev/null and b/graphics/pokemon/dragapult/footprint.png differ diff --git a/graphics/pokemon/drakloak/footprint.png b/graphics/pokemon/drakloak/footprint.png new file mode 100644 index 0000000000..a73855356a Binary files /dev/null and b/graphics/pokemon/drakloak/footprint.png differ diff --git a/graphics/pokemon/drampa/footprint.png b/graphics/pokemon/drampa/footprint.png new file mode 100644 index 0000000000..63bc4a257c Binary files /dev/null and b/graphics/pokemon/drampa/footprint.png differ diff --git a/graphics/pokemon/drednaw/footprint.png b/graphics/pokemon/drednaw/footprint.png new file mode 100644 index 0000000000..f6da8b76b2 Binary files /dev/null and b/graphics/pokemon/drednaw/footprint.png differ diff --git a/graphics/pokemon/dreepy/footprint.png b/graphics/pokemon/dreepy/footprint.png new file mode 100644 index 0000000000..ff7379baa9 Binary files /dev/null and b/graphics/pokemon/dreepy/footprint.png differ diff --git a/graphics/pokemon/drizzile/footprint.png b/graphics/pokemon/drizzile/footprint.png new file mode 100644 index 0000000000..bda00c2132 Binary files /dev/null and b/graphics/pokemon/drizzile/footprint.png differ diff --git a/graphics/pokemon/dubwool/footprint.png b/graphics/pokemon/dubwool/footprint.png new file mode 100644 index 0000000000..c302e113bc Binary files /dev/null and b/graphics/pokemon/dubwool/footprint.png differ diff --git a/graphics/pokemon/alolan_dugtrio/back.png b/graphics/pokemon/dugtrio/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_dugtrio/back.png rename to graphics/pokemon/dugtrio/alolan/back.png diff --git a/graphics/pokemon/alolan_dugtrio/front.png b/graphics/pokemon/dugtrio/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_dugtrio/front.png rename to graphics/pokemon/dugtrio/alolan/front.png diff --git a/graphics/pokemon/alolan_dugtrio/icon.png b/graphics/pokemon/dugtrio/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_dugtrio/icon.png rename to graphics/pokemon/dugtrio/alolan/icon.png diff --git a/graphics/pokemon/alolan_dugtrio/normal.pal b/graphics/pokemon/dugtrio/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_dugtrio/normal.pal rename to graphics/pokemon/dugtrio/alolan/normal.pal diff --git a/graphics/pokemon/alolan_dugtrio/shiny.pal b/graphics/pokemon/dugtrio/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_dugtrio/shiny.pal rename to graphics/pokemon/dugtrio/alolan/shiny.pal diff --git a/graphics/pokemon/duraludon/footprint.png b/graphics/pokemon/duraludon/footprint.png new file mode 100644 index 0000000000..e723bbd398 Binary files /dev/null and b/graphics/pokemon/duraludon/footprint.png differ diff --git a/graphics/misc/egg_hatch.png b/graphics/pokemon/egg/hatch.png similarity index 100% rename from graphics/misc/egg_hatch.png rename to graphics/pokemon/egg/hatch.png diff --git a/graphics/misc/egg_shard.png b/graphics/pokemon/egg/shard.png similarity index 100% rename from graphics/misc/egg_shard.png rename to graphics/pokemon/egg/shard.png diff --git a/graphics/pokemon/eiscue/footprint.png b/graphics/pokemon/eiscue/footprint.png new file mode 100644 index 0000000000..c57938799e Binary files /dev/null and b/graphics/pokemon/eiscue/footprint.png differ diff --git a/graphics/pokemon/eldegoss/footprint.png b/graphics/pokemon/eldegoss/footprint.png new file mode 100644 index 0000000000..78c5766d5e Binary files /dev/null and b/graphics/pokemon/eldegoss/footprint.png differ diff --git a/graphics/pokemon/electrode/hisuian/back.png b/graphics/pokemon/electrode/hisuian/back.png new file mode 100644 index 0000000000..51e6686d29 Binary files /dev/null and b/graphics/pokemon/electrode/hisuian/back.png differ diff --git a/graphics/pokemon/electrode/hisuian/front.png b/graphics/pokemon/electrode/hisuian/front.png new file mode 100644 index 0000000000..1e568d3764 Binary files /dev/null and b/graphics/pokemon/electrode/hisuian/front.png differ diff --git a/graphics/pokemon/electrode/hisuian/icon.png b/graphics/pokemon/electrode/hisuian/icon.png new file mode 100644 index 0000000000..d624e246cb Binary files /dev/null and b/graphics/pokemon/electrode/hisuian/icon.png differ diff --git a/graphics/pokemon/electrode/hisuian/normal.pal b/graphics/pokemon/electrode/hisuian/normal.pal new file mode 100644 index 0000000000..e414980448 --- /dev/null +++ b/graphics/pokemon/electrode/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +104 72 32 +152 104 32 +240 216 136 +184 136 40 +232 176 80 +248 240 192 +16 16 16 +184 48 24 +248 80 32 +88 0 0 +184 168 168 +232 232 232 +80 72 64 +128 16 16 +240 216 136 diff --git a/graphics/pokemon/electrode/hisuian/shiny.pal b/graphics/pokemon/electrode/hisuian/shiny.pal new file mode 100644 index 0000000000..fb741c2d56 --- /dev/null +++ b/graphics/pokemon/electrode/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +120 104 72 +152 144 80 +232 224 184 +152 128 80 +184 168 120 +240 232 208 +16 16 16 +40 40 40 +80 80 80 +16 8 8 +184 168 168 +232 232 232 +80 72 64 +16 8 8 +224 200 136 diff --git a/graphics/pokemon/enamorus/icon.png b/graphics/pokemon/enamorus/icon.png new file mode 100644 index 0000000000..c127c07345 Binary files /dev/null and b/graphics/pokemon/enamorus/icon.png differ diff --git a/graphics/pokemon/enamorus/therian/icon.png b/graphics/pokemon/enamorus/therian/icon.png new file mode 100644 index 0000000000..dfca5087fe Binary files /dev/null and b/graphics/pokemon/enamorus/therian/icon.png differ diff --git a/graphics/pokemon/eternatus/footprint.png b/graphics/pokemon/eternatus/footprint.png new file mode 100644 index 0000000000..7bc9c3e37a Binary files /dev/null and b/graphics/pokemon/eternatus/footprint.png differ diff --git a/graphics/pokemon/alolan_exeggutor/back.png b/graphics/pokemon/exeggutor/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_exeggutor/back.png rename to graphics/pokemon/exeggutor/alolan/back.png diff --git a/graphics/pokemon/alolan_exeggutor/front.png b/graphics/pokemon/exeggutor/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_exeggutor/front.png rename to graphics/pokemon/exeggutor/alolan/front.png diff --git a/graphics/pokemon/alolan_exeggutor/icon.png b/graphics/pokemon/exeggutor/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_exeggutor/icon.png rename to graphics/pokemon/exeggutor/alolan/icon.png diff --git a/graphics/pokemon/alolan_exeggutor/normal.pal b/graphics/pokemon/exeggutor/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_exeggutor/normal.pal rename to graphics/pokemon/exeggutor/alolan/normal.pal diff --git a/graphics/pokemon/alolan_exeggutor/shiny.pal b/graphics/pokemon/exeggutor/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_exeggutor/shiny.pal rename to graphics/pokemon/exeggutor/alolan/shiny.pal diff --git a/graphics/pokemon/falinks/footprint.png b/graphics/pokemon/falinks/footprint.png new file mode 100644 index 0000000000..b8befed87c Binary files /dev/null and b/graphics/pokemon/falinks/footprint.png differ diff --git a/graphics/pokemon/flapple/footprint.png b/graphics/pokemon/flapple/footprint.png new file mode 100644 index 0000000000..c17ef139ae Binary files /dev/null and b/graphics/pokemon/flapple/footprint.png differ diff --git a/graphics/pokemon/fomantis/footprint.png b/graphics/pokemon/fomantis/footprint.png new file mode 100644 index 0000000000..91b583cfd7 Binary files /dev/null and b/graphics/pokemon/fomantis/footprint.png differ diff --git a/graphics/pokemon/frosmoth/footprint.png b/graphics/pokemon/frosmoth/footprint.png new file mode 100644 index 0000000000..4b1ebb9b77 Binary files /dev/null and b/graphics/pokemon/frosmoth/footprint.png differ diff --git a/graphics/pokemon/furfrou/dandy_trim/back.png b/graphics/pokemon/furfrou/dandy_trim/back.png index f89400e9b9..7feb3479dc 100644 Binary files a/graphics/pokemon/furfrou/dandy_trim/back.png and b/graphics/pokemon/furfrou/dandy_trim/back.png differ diff --git a/graphics/pokemon/furfrou/debutante_trim/back.png b/graphics/pokemon/furfrou/debutante_trim/back.png index 0cfd3da436..ec2567514a 100644 Binary files a/graphics/pokemon/furfrou/debutante_trim/back.png and b/graphics/pokemon/furfrou/debutante_trim/back.png differ diff --git a/graphics/pokemon/furfrou/diamond_trim/back.png b/graphics/pokemon/furfrou/diamond_trim/back.png index b992d2bcf3..f3f8ae713e 100644 Binary files a/graphics/pokemon/furfrou/diamond_trim/back.png and b/graphics/pokemon/furfrou/diamond_trim/back.png differ diff --git a/graphics/pokemon/furfrou/heart_trim/back.png b/graphics/pokemon/furfrou/heart_trim/back.png index a570bdb69d..de6a039026 100644 Binary files a/graphics/pokemon/furfrou/heart_trim/back.png and b/graphics/pokemon/furfrou/heart_trim/back.png differ diff --git a/graphics/pokemon/furfrou/kabuki_trim/back.png b/graphics/pokemon/furfrou/kabuki_trim/back.png index 2525d4f2b1..5904d6e419 100644 Binary files a/graphics/pokemon/furfrou/kabuki_trim/back.png and b/graphics/pokemon/furfrou/kabuki_trim/back.png differ diff --git a/graphics/pokemon/furfrou/la_reine_trim/back.png b/graphics/pokemon/furfrou/la_reine_trim/back.png index 83d3937b92..66c9703460 100644 Binary files a/graphics/pokemon/furfrou/la_reine_trim/back.png and b/graphics/pokemon/furfrou/la_reine_trim/back.png differ diff --git a/graphics/pokemon/furfrou/matron_trim/back.png b/graphics/pokemon/furfrou/matron_trim/back.png index 802ec5e81e..c4d7eb1175 100644 Binary files a/graphics/pokemon/furfrou/matron_trim/back.png and b/graphics/pokemon/furfrou/matron_trim/back.png differ diff --git a/graphics/pokemon/furfrou/pharaoh_trim/back.png b/graphics/pokemon/furfrou/pharaoh_trim/back.png index 1050cbf27e..f0bfdcce39 100644 Binary files a/graphics/pokemon/furfrou/pharaoh_trim/back.png and b/graphics/pokemon/furfrou/pharaoh_trim/back.png differ diff --git a/graphics/pokemon/furfrou/star_trim/back.png b/graphics/pokemon/furfrou/star_trim/back.png index 191b1c8eb5..1e4dd296f5 100644 Binary files a/graphics/pokemon/furfrou/star_trim/back.png and b/graphics/pokemon/furfrou/star_trim/back.png differ diff --git a/graphics/pokemon/mega_gallade/back.png b/graphics/pokemon/gallade/mega/back.png similarity index 100% rename from graphics/pokemon/mega_gallade/back.png rename to graphics/pokemon/gallade/mega/back.png diff --git a/graphics/pokemon/mega_gallade/front.png b/graphics/pokemon/gallade/mega/front.png similarity index 100% rename from graphics/pokemon/mega_gallade/front.png rename to graphics/pokemon/gallade/mega/front.png diff --git a/graphics/pokemon/mega_gallade/icon.png b/graphics/pokemon/gallade/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_gallade/icon.png rename to graphics/pokemon/gallade/mega/icon.png diff --git a/graphics/pokemon/mega_gallade/normal.pal b/graphics/pokemon/gallade/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_gallade/normal.pal rename to graphics/pokemon/gallade/mega/normal.pal diff --git a/graphics/pokemon/mega_gallade/shiny.pal b/graphics/pokemon/gallade/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_gallade/shiny.pal rename to graphics/pokemon/gallade/mega/shiny.pal diff --git a/graphics/pokemon/mega_garchomp/back.png b/graphics/pokemon/garchomp/mega/back.png similarity index 100% rename from graphics/pokemon/mega_garchomp/back.png rename to graphics/pokemon/garchomp/mega/back.png diff --git a/graphics/pokemon/mega_garchomp/front.png b/graphics/pokemon/garchomp/mega/front.png similarity index 100% rename from graphics/pokemon/mega_garchomp/front.png rename to graphics/pokemon/garchomp/mega/front.png diff --git a/graphics/pokemon/garchomp/mega/icon.png b/graphics/pokemon/garchomp/mega/icon.png new file mode 100644 index 0000000000..4e37e08138 Binary files /dev/null and b/graphics/pokemon/garchomp/mega/icon.png differ diff --git a/graphics/pokemon/mega_garchomp/normal.pal b/graphics/pokemon/garchomp/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_garchomp/normal.pal rename to graphics/pokemon/garchomp/mega/normal.pal diff --git a/graphics/pokemon/mega_garchomp/shiny.pal b/graphics/pokemon/garchomp/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_garchomp/shiny.pal rename to graphics/pokemon/garchomp/mega/shiny.pal diff --git a/graphics/pokemon/mega_gardevoir/back.png b/graphics/pokemon/gardevoir/mega/back.png similarity index 100% rename from graphics/pokemon/mega_gardevoir/back.png rename to graphics/pokemon/gardevoir/mega/back.png diff --git a/graphics/pokemon/mega_gardevoir/front.png b/graphics/pokemon/gardevoir/mega/front.png similarity index 100% rename from graphics/pokemon/mega_gardevoir/front.png rename to graphics/pokemon/gardevoir/mega/front.png diff --git a/graphics/pokemon/mega_gardevoir/icon.png b/graphics/pokemon/gardevoir/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_gardevoir/icon.png rename to graphics/pokemon/gardevoir/mega/icon.png diff --git a/graphics/pokemon/mega_gardevoir/normal.pal b/graphics/pokemon/gardevoir/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_gardevoir/normal.pal rename to graphics/pokemon/gardevoir/mega/normal.pal diff --git a/graphics/pokemon/mega_gardevoir/shiny.pal b/graphics/pokemon/gardevoir/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_gardevoir/shiny.pal rename to graphics/pokemon/gardevoir/mega/shiny.pal diff --git a/graphics/pokemon/mega_gengar/back.png b/graphics/pokemon/gengar/mega/back.png similarity index 100% rename from graphics/pokemon/mega_gengar/back.png rename to graphics/pokemon/gengar/mega/back.png diff --git a/graphics/pokemon/mega_gengar/front.png b/graphics/pokemon/gengar/mega/front.png similarity index 100% rename from graphics/pokemon/mega_gengar/front.png rename to graphics/pokemon/gengar/mega/front.png diff --git a/graphics/pokemon/mega_gengar/icon.png b/graphics/pokemon/gengar/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_gengar/icon.png rename to graphics/pokemon/gengar/mega/icon.png diff --git a/graphics/pokemon/mega_gengar/normal.pal b/graphics/pokemon/gengar/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_gengar/normal.pal rename to graphics/pokemon/gengar/mega/normal.pal diff --git a/graphics/pokemon/mega_gengar/shiny.pal b/graphics/pokemon/gengar/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_gengar/shiny.pal rename to graphics/pokemon/gengar/mega/shiny.pal diff --git a/graphics/pokemon/alolan_geodude/back.png b/graphics/pokemon/geodude/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_geodude/back.png rename to graphics/pokemon/geodude/alolan/back.png diff --git a/graphics/pokemon/alolan_geodude/front.png b/graphics/pokemon/geodude/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_geodude/front.png rename to graphics/pokemon/geodude/alolan/front.png diff --git a/graphics/pokemon/alolan_geodude/icon.png b/graphics/pokemon/geodude/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_geodude/icon.png rename to graphics/pokemon/geodude/alolan/icon.png diff --git a/graphics/pokemon/alolan_geodude/normal.pal b/graphics/pokemon/geodude/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_geodude/normal.pal rename to graphics/pokemon/geodude/alolan/normal.pal diff --git a/graphics/pokemon/alolan_geodude/shiny.pal b/graphics/pokemon/geodude/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_geodude/shiny.pal rename to graphics/pokemon/geodude/alolan/shiny.pal diff --git a/graphics/pokemon/mega_glalie/back.png b/graphics/pokemon/glalie/mega/back.png similarity index 100% rename from graphics/pokemon/mega_glalie/back.png rename to graphics/pokemon/glalie/mega/back.png diff --git a/graphics/pokemon/mega_glalie/front.png b/graphics/pokemon/glalie/mega/front.png similarity index 100% rename from graphics/pokemon/mega_glalie/front.png rename to graphics/pokemon/glalie/mega/front.png diff --git a/graphics/pokemon/glalie/mega/icon.png b/graphics/pokemon/glalie/mega/icon.png new file mode 100644 index 0000000000..d563426c4f Binary files /dev/null and b/graphics/pokemon/glalie/mega/icon.png differ diff --git a/graphics/pokemon/mega_glalie/normal.pal b/graphics/pokemon/glalie/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_glalie/normal.pal rename to graphics/pokemon/glalie/mega/normal.pal diff --git a/graphics/pokemon/mega_glalie/shiny.pal b/graphics/pokemon/glalie/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_glalie/shiny.pal rename to graphics/pokemon/glalie/mega/shiny.pal diff --git a/graphics/pokemon/glastrier/footprint.png b/graphics/pokemon/glastrier/footprint.png new file mode 100644 index 0000000000..cf32331ce6 Binary files /dev/null and b/graphics/pokemon/glastrier/footprint.png differ diff --git a/graphics/pokemon/alolan_golem/back.png b/graphics/pokemon/golem/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_golem/back.png rename to graphics/pokemon/golem/alolan/back.png diff --git a/graphics/pokemon/alolan_golem/front.png b/graphics/pokemon/golem/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_golem/front.png rename to graphics/pokemon/golem/alolan/front.png diff --git a/graphics/pokemon/alolan_golem/icon.png b/graphics/pokemon/golem/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_golem/icon.png rename to graphics/pokemon/golem/alolan/icon.png diff --git a/graphics/pokemon/alolan_golem/normal.pal b/graphics/pokemon/golem/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_golem/normal.pal rename to graphics/pokemon/golem/alolan/normal.pal diff --git a/graphics/pokemon/alolan_golem/shiny.pal b/graphics/pokemon/golem/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_golem/shiny.pal rename to graphics/pokemon/golem/alolan/shiny.pal diff --git a/graphics/pokemon/golisopod/footprint.png b/graphics/pokemon/golisopod/footprint.png new file mode 100644 index 0000000000..7da39e2aa1 Binary files /dev/null and b/graphics/pokemon/golisopod/footprint.png differ diff --git a/graphics/pokemon/goodra/hisuian/back.png b/graphics/pokemon/goodra/hisuian/back.png new file mode 100644 index 0000000000..a454fcde65 Binary files /dev/null and b/graphics/pokemon/goodra/hisuian/back.png differ diff --git a/graphics/pokemon/goodra/hisuian/front.png b/graphics/pokemon/goodra/hisuian/front.png new file mode 100644 index 0000000000..edd5e3c3ab Binary files /dev/null and b/graphics/pokemon/goodra/hisuian/front.png differ diff --git a/graphics/pokemon/goodra/hisuian/icon.png b/graphics/pokemon/goodra/hisuian/icon.png new file mode 100644 index 0000000000..3216854349 Binary files /dev/null and b/graphics/pokemon/goodra/hisuian/icon.png differ diff --git a/graphics/pokemon/goodra/hisuian/normal.pal b/graphics/pokemon/goodra/hisuian/normal.pal new file mode 100644 index 0000000000..28da385cb0 --- /dev/null +++ b/graphics/pokemon/goodra/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 176 232 +128 96 112 +216 192 208 +136 136 136 +8 8 8 +240 240 240 +200 200 200 +168 152 168 +64 64 64 +176 176 176 +96 96 104 +136 104 168 +64 56 88 +168 152 192 +232 208 232 +16 16 16 diff --git a/graphics/pokemon/goodra/hisuian/shiny.pal b/graphics/pokemon/goodra/hisuian/shiny.pal new file mode 100644 index 0000000000..73fd87e714 --- /dev/null +++ b/graphics/pokemon/goodra/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +128 96 112 +216 192 208 +120 104 56 +8 8 8 +240 240 240 +200 176 88 +168 152 168 +56 40 32 +160 136 72 +80 64 40 +136 104 168 +64 56 88 +168 152 192 +232 208 232 +16 16 16 diff --git a/graphics/pokemon/gossifleur/footprint.png b/graphics/pokemon/gossifleur/footprint.png new file mode 100644 index 0000000000..0efe7646a4 Binary files /dev/null and b/graphics/pokemon/gossifleur/footprint.png differ diff --git a/graphics/pokemon/grapploct/footprint.png b/graphics/pokemon/grapploct/footprint.png new file mode 100644 index 0000000000..ea3c59c40e Binary files /dev/null and b/graphics/pokemon/grapploct/footprint.png differ diff --git a/graphics/pokemon/alolan_graveler/back.png b/graphics/pokemon/graveler/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_graveler/back.png rename to graphics/pokemon/graveler/alolan/back.png diff --git a/graphics/pokemon/alolan_graveler/front.png b/graphics/pokemon/graveler/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_graveler/front.png rename to graphics/pokemon/graveler/alolan/front.png diff --git a/graphics/pokemon/alolan_graveler/icon.png b/graphics/pokemon/graveler/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_graveler/icon.png rename to graphics/pokemon/graveler/alolan/icon.png diff --git a/graphics/pokemon/alolan_graveler/normal.pal b/graphics/pokemon/graveler/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_graveler/normal.pal rename to graphics/pokemon/graveler/alolan/normal.pal diff --git a/graphics/pokemon/alolan_graveler/shiny.pal b/graphics/pokemon/graveler/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_graveler/shiny.pal rename to graphics/pokemon/graveler/alolan/shiny.pal diff --git a/graphics/pokemon/greedent/footprint.png b/graphics/pokemon/greedent/footprint.png new file mode 100644 index 0000000000..d2e45203a0 Binary files /dev/null and b/graphics/pokemon/greedent/footprint.png differ diff --git a/graphics/pokemon/alolan_grimer/back.png b/graphics/pokemon/grimer/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_grimer/back.png rename to graphics/pokemon/grimer/alolan/back.png diff --git a/graphics/pokemon/alolan_grimer/front.png b/graphics/pokemon/grimer/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_grimer/front.png rename to graphics/pokemon/grimer/alolan/front.png diff --git a/graphics/pokemon/alolan_grimer/icon.png b/graphics/pokemon/grimer/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_grimer/icon.png rename to graphics/pokemon/grimer/alolan/icon.png diff --git a/graphics/pokemon/alolan_grimer/normal.pal b/graphics/pokemon/grimer/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_grimer/normal.pal rename to graphics/pokemon/grimer/alolan/normal.pal diff --git a/graphics/pokemon/alolan_grimer/shiny.pal b/graphics/pokemon/grimer/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_grimer/shiny.pal rename to graphics/pokemon/grimer/alolan/shiny.pal diff --git a/graphics/pokemon/grimmsnarl/footprint.png b/graphics/pokemon/grimmsnarl/footprint.png new file mode 100644 index 0000000000..a3776b2382 Binary files /dev/null and b/graphics/pokemon/grimmsnarl/footprint.png differ diff --git a/graphics/pokemon/grookey/footprint.png b/graphics/pokemon/grookey/footprint.png new file mode 100644 index 0000000000..836738bc0e Binary files /dev/null and b/graphics/pokemon/grookey/footprint.png differ diff --git a/graphics/pokemon/primal_groudon/back.png b/graphics/pokemon/groudon/primal/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/primal_groudon/back.png rename to graphics/pokemon/groudon/primal/back.png diff --git a/graphics/pokemon/primal_groudon/front.png b/graphics/pokemon/groudon/primal/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/primal_groudon/front.png rename to graphics/pokemon/groudon/primal/front.png diff --git a/graphics/pokemon/primal_groudon/icon.png b/graphics/pokemon/groudon/primal/icon.png similarity index 100% rename from graphics/pokemon/primal_groudon/icon.png rename to graphics/pokemon/groudon/primal/icon.png diff --git a/graphics/pokemon/primal_groudon/normal.pal b/graphics/pokemon/groudon/primal/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/primal_groudon/normal.pal rename to graphics/pokemon/groudon/primal/normal.pal diff --git a/graphics/pokemon/primal_groudon/shiny.pal b/graphics/pokemon/groudon/primal/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/primal_groudon/shiny.pal rename to graphics/pokemon/groudon/primal/shiny.pal diff --git a/graphics/pokemon/growlithe/hisuian/back.png b/graphics/pokemon/growlithe/hisuian/back.png new file mode 100644 index 0000000000..0ed279c6a5 Binary files /dev/null and b/graphics/pokemon/growlithe/hisuian/back.png differ diff --git a/graphics/pokemon/growlithe/hisuian/front.png b/graphics/pokemon/growlithe/hisuian/front.png new file mode 100644 index 0000000000..c0d6232a95 Binary files /dev/null and b/graphics/pokemon/growlithe/hisuian/front.png differ diff --git a/graphics/pokemon/growlithe/hisuian/icon.png b/graphics/pokemon/growlithe/hisuian/icon.png new file mode 100644 index 0000000000..b2b03733f0 Binary files /dev/null and b/graphics/pokemon/growlithe/hisuian/icon.png differ diff --git a/graphics/pokemon/growlithe/hisuian/normal.pal b/graphics/pokemon/growlithe/hisuian/normal.pal new file mode 100644 index 0000000000..e6d97462b5 --- /dev/null +++ b/graphics/pokemon/growlithe/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +88 72 88 +200 192 184 +16 16 16 +120 104 128 +104 16 8 +248 80 48 +184 32 32 +160 144 160 +112 96 32 +208 128 112 +184 152 120 +224 200 160 +72 72 72 +0 0 0 +16 0 0 diff --git a/graphics/pokemon/growlithe/hisuian/shiny.pal b/graphics/pokemon/growlithe/hisuian/shiny.pal new file mode 100644 index 0000000000..3406fee673 --- /dev/null +++ b/graphics/pokemon/growlithe/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +112 104 96 +232 232 232 +16 16 16 +160 152 144 +88 72 40 +232 184 128 +168 136 48 +208 200 192 +112 96 32 +208 128 112 +184 152 120 +224 200 160 +72 72 72 +0 0 0 +16 0 0 diff --git a/graphics/pokemon/grubbin/footprint.png b/graphics/pokemon/grubbin/footprint.png new file mode 100644 index 0000000000..aeac35bc59 Binary files /dev/null and b/graphics/pokemon/grubbin/footprint.png differ diff --git a/graphics/pokemon/gumshoos/footprint.png b/graphics/pokemon/gumshoos/footprint.png new file mode 100644 index 0000000000..abc07274b5 Binary files /dev/null and b/graphics/pokemon/gumshoos/footprint.png differ diff --git a/graphics/pokemon/guzzlord/footprint.png b/graphics/pokemon/guzzlord/footprint.png new file mode 100644 index 0000000000..9184adb9b9 Binary files /dev/null and b/graphics/pokemon/guzzlord/footprint.png differ diff --git a/graphics/pokemon/mega_gyarados/back.png b/graphics/pokemon/gyarados/mega/back.png similarity index 100% rename from graphics/pokemon/mega_gyarados/back.png rename to graphics/pokemon/gyarados/mega/back.png diff --git a/graphics/pokemon/mega_gyarados/front.png b/graphics/pokemon/gyarados/mega/front.png similarity index 100% rename from graphics/pokemon/mega_gyarados/front.png rename to graphics/pokemon/gyarados/mega/front.png diff --git a/graphics/pokemon/mega_gyarados/icon.png b/graphics/pokemon/gyarados/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_gyarados/icon.png rename to graphics/pokemon/gyarados/mega/icon.png diff --git a/graphics/pokemon/mega_gyarados/normal.pal b/graphics/pokemon/gyarados/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_gyarados/normal.pal rename to graphics/pokemon/gyarados/mega/normal.pal diff --git a/graphics/pokemon/mega_gyarados/shiny.pal b/graphics/pokemon/gyarados/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_gyarados/shiny.pal rename to graphics/pokemon/gyarados/mega/shiny.pal diff --git a/graphics/pokemon/hakamo_o/footprint.png b/graphics/pokemon/hakamo_o/footprint.png new file mode 100644 index 0000000000..137c8c5d7c Binary files /dev/null and b/graphics/pokemon/hakamo_o/footprint.png differ diff --git a/graphics/pokemon/hatenna/footprint.png b/graphics/pokemon/hatenna/footprint.png new file mode 100644 index 0000000000..c133d134ba Binary files /dev/null and b/graphics/pokemon/hatenna/footprint.png differ diff --git a/graphics/pokemon/hatterene/footprint.png b/graphics/pokemon/hatterene/footprint.png new file mode 100644 index 0000000000..bfb754ec34 Binary files /dev/null and b/graphics/pokemon/hatterene/footprint.png differ diff --git a/graphics/pokemon/hattrem/footprint.png b/graphics/pokemon/hattrem/footprint.png new file mode 100644 index 0000000000..83360f4732 Binary files /dev/null and b/graphics/pokemon/hattrem/footprint.png differ diff --git a/graphics/pokemon/mega_heracross/back.png b/graphics/pokemon/heracross/mega/back.png similarity index 100% rename from graphics/pokemon/mega_heracross/back.png rename to graphics/pokemon/heracross/mega/back.png diff --git a/graphics/pokemon/mega_heracross/front.png b/graphics/pokemon/heracross/mega/front.png similarity index 100% rename from graphics/pokemon/mega_heracross/front.png rename to graphics/pokemon/heracross/mega/front.png diff --git a/graphics/pokemon/mega_heracross/icon.png b/graphics/pokemon/heracross/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_heracross/icon.png rename to graphics/pokemon/heracross/mega/icon.png diff --git a/graphics/pokemon/mega_heracross/normal.pal b/graphics/pokemon/heracross/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_heracross/normal.pal rename to graphics/pokemon/heracross/mega/normal.pal diff --git a/graphics/pokemon/mega_heracross/shiny.pal b/graphics/pokemon/heracross/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_heracross/shiny.pal rename to graphics/pokemon/heracross/mega/shiny.pal diff --git a/graphics/pokemon/hoopa/back.png b/graphics/pokemon/hoopa/back.png index 1134e86c2c..a3d76883c7 100644 Binary files a/graphics/pokemon/hoopa/back.png and b/graphics/pokemon/hoopa/back.png differ diff --git a/graphics/pokemon/mega_houndoom/back.png b/graphics/pokemon/houndoom/mega/back.png similarity index 100% rename from graphics/pokemon/mega_houndoom/back.png rename to graphics/pokemon/houndoom/mega/back.png diff --git a/graphics/pokemon/mega_houndoom/front.png b/graphics/pokemon/houndoom/mega/front.png similarity index 100% rename from graphics/pokemon/mega_houndoom/front.png rename to graphics/pokemon/houndoom/mega/front.png diff --git a/graphics/pokemon/mega_houndoom/icon.png b/graphics/pokemon/houndoom/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_houndoom/icon.png rename to graphics/pokemon/houndoom/mega/icon.png diff --git a/graphics/pokemon/mega_houndoom/normal.pal b/graphics/pokemon/houndoom/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_houndoom/normal.pal rename to graphics/pokemon/houndoom/mega/normal.pal diff --git a/graphics/pokemon/mega_houndoom/shiny.pal b/graphics/pokemon/houndoom/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_houndoom/shiny.pal rename to graphics/pokemon/houndoom/mega/shiny.pal diff --git a/graphics/pokemon/impidimp/footprint.png b/graphics/pokemon/impidimp/footprint.png new file mode 100644 index 0000000000..8ff5f9113d Binary files /dev/null and b/graphics/pokemon/impidimp/footprint.png differ diff --git a/graphics/pokemon/incineroar/footprint.png b/graphics/pokemon/incineroar/footprint.png new file mode 100644 index 0000000000..269a337d65 Binary files /dev/null and b/graphics/pokemon/incineroar/footprint.png differ diff --git a/graphics/pokemon/indeedee/footprint.png b/graphics/pokemon/indeedee/footprint.png new file mode 100644 index 0000000000..d406d05d92 Binary files /dev/null and b/graphics/pokemon/indeedee/footprint.png differ diff --git a/graphics/pokemon/inteleon/footprint.png b/graphics/pokemon/inteleon/footprint.png new file mode 100644 index 0000000000..7ea7d445f8 Binary files /dev/null and b/graphics/pokemon/inteleon/footprint.png differ diff --git a/graphics/pokemon/jangmo_o/footprint.png b/graphics/pokemon/jangmo_o/footprint.png new file mode 100644 index 0000000000..87c5900ebc Binary files /dev/null and b/graphics/pokemon/jangmo_o/footprint.png differ diff --git a/graphics/pokemon/mega_kangaskhan/back.png b/graphics/pokemon/kangaskhan/mega/back.png similarity index 100% rename from graphics/pokemon/mega_kangaskhan/back.png rename to graphics/pokemon/kangaskhan/mega/back.png diff --git a/graphics/pokemon/mega_kangaskhan/front.png b/graphics/pokemon/kangaskhan/mega/front.png similarity index 100% rename from graphics/pokemon/mega_kangaskhan/front.png rename to graphics/pokemon/kangaskhan/mega/front.png diff --git a/graphics/pokemon/mega_kangaskhan/icon.png b/graphics/pokemon/kangaskhan/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_kangaskhan/icon.png rename to graphics/pokemon/kangaskhan/mega/icon.png diff --git a/graphics/pokemon/mega_kangaskhan/normal.pal b/graphics/pokemon/kangaskhan/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_kangaskhan/normal.pal rename to graphics/pokemon/kangaskhan/mega/normal.pal diff --git a/graphics/pokemon/mega_kangaskhan/shiny.pal b/graphics/pokemon/kangaskhan/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_kangaskhan/shiny.pal rename to graphics/pokemon/kangaskhan/mega/shiny.pal diff --git a/graphics/pokemon/kartana/footprint.png b/graphics/pokemon/kartana/footprint.png new file mode 100644 index 0000000000..9910a09ec6 Binary files /dev/null and b/graphics/pokemon/kartana/footprint.png differ diff --git a/graphics/pokemon/kleavor/back.png b/graphics/pokemon/kleavor/back.png new file mode 100644 index 0000000000..4300b2afbc Binary files /dev/null and b/graphics/pokemon/kleavor/back.png differ diff --git a/graphics/pokemon/kleavor/front.png b/graphics/pokemon/kleavor/front.png new file mode 100644 index 0000000000..cd2341c2a7 Binary files /dev/null and b/graphics/pokemon/kleavor/front.png differ diff --git a/graphics/pokemon/kleavor/icon.png b/graphics/pokemon/kleavor/icon.png new file mode 100644 index 0000000000..4443cc1433 Binary files /dev/null and b/graphics/pokemon/kleavor/icon.png differ diff --git a/graphics/pokemon/kleavor/normal.pal b/graphics/pokemon/kleavor/normal.pal new file mode 100644 index 0000000000..fd47f8a2d2 --- /dev/null +++ b/graphics/pokemon/kleavor/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +48 32 32 +144 112 112 +16 16 16 +88 64 64 +128 80 40 +224 192 128 +248 248 248 +200 200 168 +192 136 80 +240 224 184 +200 184 144 +160 144 104 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/kleavor/shiny.pal b/graphics/pokemon/kleavor/shiny.pal new file mode 100644 index 0000000000..5634b4c703 --- /dev/null +++ b/graphics/pokemon/kleavor/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +32 32 32 +104 104 104 +16 16 16 +56 56 56 +72 80 48 +144 168 104 +248 248 248 +200 200 168 +104 128 56 +216 184 104 +184 128 56 +136 80 24 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/komala/footprint.png b/graphics/pokemon/komala/footprint.png new file mode 100644 index 0000000000..6c8921c31c Binary files /dev/null and b/graphics/pokemon/komala/footprint.png differ diff --git a/graphics/pokemon/kommo_o/footprint.png b/graphics/pokemon/kommo_o/footprint.png new file mode 100644 index 0000000000..4f14bd4825 Binary files /dev/null and b/graphics/pokemon/kommo_o/footprint.png differ diff --git a/graphics/pokemon/kricketot/anim_frontf.png b/graphics/pokemon/kricketot/anim_frontf.png new file mode 100644 index 0000000000..86b2f773a5 Binary files /dev/null and b/graphics/pokemon/kricketot/anim_frontf.png differ diff --git a/graphics/pokemon/kricketot/backf.png b/graphics/pokemon/kricketot/backf.png new file mode 100644 index 0000000000..9bafab8796 Binary files /dev/null and b/graphics/pokemon/kricketot/backf.png differ diff --git a/graphics/pokemon/kricketune/anim_frontf.png b/graphics/pokemon/kricketune/anim_frontf.png new file mode 100644 index 0000000000..b05954ee68 Binary files /dev/null and b/graphics/pokemon/kricketune/anim_frontf.png differ diff --git a/graphics/pokemon/kricketune/backf.png b/graphics/pokemon/kricketune/backf.png new file mode 100644 index 0000000000..fb9e5ca855 Binary files /dev/null and b/graphics/pokemon/kricketune/backf.png differ diff --git a/graphics/pokemon/kubfu/footprint.png b/graphics/pokemon/kubfu/footprint.png new file mode 100644 index 0000000000..cb372f7d20 Binary files /dev/null and b/graphics/pokemon/kubfu/footprint.png differ diff --git a/graphics/pokemon/primal_kyogre/back.png b/graphics/pokemon/kyogre/primal/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/primal_kyogre/back.png rename to graphics/pokemon/kyogre/primal/back.png diff --git a/graphics/pokemon/primal_kyogre/front.png b/graphics/pokemon/kyogre/primal/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/primal_kyogre/front.png rename to graphics/pokemon/kyogre/primal/front.png diff --git a/graphics/pokemon/primal_kyogre/icon.png b/graphics/pokemon/kyogre/primal/icon.png similarity index 100% rename from graphics/pokemon/primal_kyogre/icon.png rename to graphics/pokemon/kyogre/primal/icon.png diff --git a/graphics/pokemon/primal_kyogre/normal.pal b/graphics/pokemon/kyogre/primal/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/primal_kyogre/normal.pal rename to graphics/pokemon/kyogre/primal/normal.pal diff --git a/graphics/pokemon/primal_kyogre/shiny.pal b/graphics/pokemon/kyogre/primal/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/primal_kyogre/shiny.pal rename to graphics/pokemon/kyogre/primal/shiny.pal diff --git a/graphics/pokemon/mega_latias/back.png b/graphics/pokemon/latias/mega/back.png similarity index 100% rename from graphics/pokemon/mega_latias/back.png rename to graphics/pokemon/latias/mega/back.png diff --git a/graphics/pokemon/mega_latias/front.png b/graphics/pokemon/latias/mega/front.png similarity index 100% rename from graphics/pokemon/mega_latias/front.png rename to graphics/pokemon/latias/mega/front.png diff --git a/graphics/pokemon/latias/mega/icon.png b/graphics/pokemon/latias/mega/icon.png new file mode 100644 index 0000000000..0d022d8027 Binary files /dev/null and b/graphics/pokemon/latias/mega/icon.png differ diff --git a/graphics/pokemon/mega_latias/normal.pal b/graphics/pokemon/latias/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_latias/normal.pal rename to graphics/pokemon/latias/mega/normal.pal diff --git a/graphics/pokemon/mega_latias/shiny.pal b/graphics/pokemon/latias/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_latias/shiny.pal rename to graphics/pokemon/latias/mega/shiny.pal diff --git a/graphics/pokemon/mega_latios/back.png b/graphics/pokemon/latios/mega/back.png similarity index 100% rename from graphics/pokemon/mega_latios/back.png rename to graphics/pokemon/latios/mega/back.png diff --git a/graphics/pokemon/mega_latios/front.png b/graphics/pokemon/latios/mega/front.png similarity index 100% rename from graphics/pokemon/mega_latios/front.png rename to graphics/pokemon/latios/mega/front.png diff --git a/graphics/pokemon/latios/mega/icon.png b/graphics/pokemon/latios/mega/icon.png new file mode 100644 index 0000000000..8d594c2fa7 Binary files /dev/null and b/graphics/pokemon/latios/mega/icon.png differ diff --git a/graphics/pokemon/mega_latios/normal.pal b/graphics/pokemon/latios/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_latios/normal.pal rename to graphics/pokemon/latios/mega/normal.pal diff --git a/graphics/pokemon/mega_latios/shiny.pal b/graphics/pokemon/latios/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_latios/shiny.pal rename to graphics/pokemon/latios/mega/shiny.pal diff --git a/graphics/pokemon/lilligant/hisuian/back.png b/graphics/pokemon/lilligant/hisuian/back.png new file mode 100644 index 0000000000..aefd8b022a Binary files /dev/null and b/graphics/pokemon/lilligant/hisuian/back.png differ diff --git a/graphics/pokemon/lilligant/hisuian/front.png b/graphics/pokemon/lilligant/hisuian/front.png new file mode 100644 index 0000000000..6699ad47f3 Binary files /dev/null and b/graphics/pokemon/lilligant/hisuian/front.png differ diff --git a/graphics/pokemon/lilligant/hisuian/icon.png b/graphics/pokemon/lilligant/hisuian/icon.png new file mode 100644 index 0000000000..c8149843fc Binary files /dev/null and b/graphics/pokemon/lilligant/hisuian/icon.png differ diff --git a/graphics/pokemon/lilligant/hisuian/normal.pal b/graphics/pokemon/lilligant/hisuian/normal.pal new file mode 100644 index 0000000000..4160f1ed62 --- /dev/null +++ b/graphics/pokemon/lilligant/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +184 160 80 +96 64 64 +248 128 184 +184 88 152 +248 216 64 +16 16 16 +80 96 40 +48 88 48 +248 248 248 +72 176 64 +200 192 184 +72 128 72 +120 168 48 +136 232 40 +184 88 152 diff --git a/graphics/pokemon/lilligant/hisuian/shiny.pal b/graphics/pokemon/lilligant/hisuian/shiny.pal new file mode 100644 index 0000000000..0f934d2ee3 --- /dev/null +++ b/graphics/pokemon/lilligant/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +184 160 80 +112 64 32 +248 104 56 +184 96 56 +248 216 64 +16 16 16 +96 96 40 +48 64 88 +248 248 248 +56 176 112 +200 192 184 +32 128 128 +112 168 64 +144 224 80 +184 88 152 diff --git a/graphics/pokemon/litten/footprint.png b/graphics/pokemon/litten/footprint.png new file mode 100644 index 0000000000..8c7c5b0671 Binary files /dev/null and b/graphics/pokemon/litten/footprint.png differ diff --git a/graphics/pokemon/mega_lopunny/back.png b/graphics/pokemon/lopunny/mega/back.png similarity index 100% rename from graphics/pokemon/mega_lopunny/back.png rename to graphics/pokemon/lopunny/mega/back.png diff --git a/graphics/pokemon/mega_lopunny/front.png b/graphics/pokemon/lopunny/mega/front.png similarity index 100% rename from graphics/pokemon/mega_lopunny/front.png rename to graphics/pokemon/lopunny/mega/front.png diff --git a/graphics/pokemon/mega_lopunny/icon.png b/graphics/pokemon/lopunny/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_lopunny/icon.png rename to graphics/pokemon/lopunny/mega/icon.png diff --git a/graphics/pokemon/mega_lopunny/normal.pal b/graphics/pokemon/lopunny/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_lopunny/normal.pal rename to graphics/pokemon/lopunny/mega/normal.pal diff --git a/graphics/pokemon/mega_lopunny/shiny.pal b/graphics/pokemon/lopunny/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_lopunny/shiny.pal rename to graphics/pokemon/lopunny/mega/shiny.pal diff --git a/graphics/pokemon/mega_lucario/back.png b/graphics/pokemon/lucario/mega/back.png similarity index 100% rename from graphics/pokemon/mega_lucario/back.png rename to graphics/pokemon/lucario/mega/back.png diff --git a/graphics/pokemon/mega_lucario/front.png b/graphics/pokemon/lucario/mega/front.png similarity index 100% rename from graphics/pokemon/mega_lucario/front.png rename to graphics/pokemon/lucario/mega/front.png diff --git a/graphics/pokemon/mega_lucario/icon.png b/graphics/pokemon/lucario/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_lucario/icon.png rename to graphics/pokemon/lucario/mega/icon.png diff --git a/graphics/pokemon/mega_lucario/normal.pal b/graphics/pokemon/lucario/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_lucario/normal.pal rename to graphics/pokemon/lucario/mega/normal.pal diff --git a/graphics/pokemon/mega_lucario/shiny.pal b/graphics/pokemon/lucario/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_lucario/shiny.pal rename to graphics/pokemon/lucario/mega/shiny.pal diff --git a/graphics/pokemon/lunala/footprint.png b/graphics/pokemon/lunala/footprint.png new file mode 100644 index 0000000000..d9a4ff1d4d Binary files /dev/null and b/graphics/pokemon/lunala/footprint.png differ diff --git a/graphics/pokemon/lurantis/footprint.png b/graphics/pokemon/lurantis/footprint.png new file mode 100644 index 0000000000..c6733b6122 Binary files /dev/null and b/graphics/pokemon/lurantis/footprint.png differ diff --git a/graphics/pokemon/lycanroc/footprint.png b/graphics/pokemon/lycanroc/footprint.png new file mode 100644 index 0000000000..7e69bd83eb Binary files /dev/null and b/graphics/pokemon/lycanroc/footprint.png differ diff --git a/graphics/pokemon/magearna/footprint.png b/graphics/pokemon/magearna/footprint.png new file mode 100644 index 0000000000..0f2f2d308c Binary files /dev/null and b/graphics/pokemon/magearna/footprint.png differ diff --git a/graphics/pokemon/mega_manectric/back.png b/graphics/pokemon/manectric/mega/back.png similarity index 100% rename from graphics/pokemon/mega_manectric/back.png rename to graphics/pokemon/manectric/mega/back.png diff --git a/graphics/pokemon/mega_manectric/front.png b/graphics/pokemon/manectric/mega/front.png similarity index 100% rename from graphics/pokemon/mega_manectric/front.png rename to graphics/pokemon/manectric/mega/front.png diff --git a/graphics/pokemon/mega_manectric/icon.png b/graphics/pokemon/manectric/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_manectric/icon.png rename to graphics/pokemon/manectric/mega/icon.png diff --git a/graphics/pokemon/mega_manectric/normal.pal b/graphics/pokemon/manectric/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_manectric/normal.pal rename to graphics/pokemon/manectric/mega/normal.pal diff --git a/graphics/pokemon/mega_manectric/shiny.pal b/graphics/pokemon/manectric/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_manectric/shiny.pal rename to graphics/pokemon/manectric/mega/shiny.pal diff --git a/graphics/pokemon/mareanie/footprint.png b/graphics/pokemon/mareanie/footprint.png new file mode 100644 index 0000000000..b851ca0ca0 Binary files /dev/null and b/graphics/pokemon/mareanie/footprint.png differ diff --git a/graphics/pokemon/alolan_marowak/back.png b/graphics/pokemon/marowak/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_marowak/back.png rename to graphics/pokemon/marowak/alolan/back.png diff --git a/graphics/pokemon/alolan_marowak/front.png b/graphics/pokemon/marowak/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_marowak/front.png rename to graphics/pokemon/marowak/alolan/front.png diff --git a/graphics/pokemon/alolan_marowak/icon.png b/graphics/pokemon/marowak/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_marowak/icon.png rename to graphics/pokemon/marowak/alolan/icon.png diff --git a/graphics/pokemon/alolan_marowak/normal.pal b/graphics/pokemon/marowak/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_marowak/normal.pal rename to graphics/pokemon/marowak/alolan/normal.pal diff --git a/graphics/pokemon/alolan_marowak/shiny.pal b/graphics/pokemon/marowak/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_marowak/shiny.pal rename to graphics/pokemon/marowak/alolan/shiny.pal diff --git a/graphics/pokemon/marshadow/anim_front.png b/graphics/pokemon/marshadow/anim_front.png new file mode 100644 index 0000000000..866348de4b Binary files /dev/null and b/graphics/pokemon/marshadow/anim_front.png differ diff --git a/graphics/pokemon/marshadow/footprint.png b/graphics/pokemon/marshadow/footprint.png new file mode 100644 index 0000000000..6d82d60bbe Binary files /dev/null and b/graphics/pokemon/marshadow/footprint.png differ diff --git a/graphics/pokemon/marshadow/front.png b/graphics/pokemon/marshadow/front.png index 866348de4b..14a1503bda 100644 Binary files a/graphics/pokemon/marshadow/front.png and b/graphics/pokemon/marshadow/front.png differ diff --git a/graphics/pokemon/mega_mawile/back.png b/graphics/pokemon/mawile/mega/back.png similarity index 100% rename from graphics/pokemon/mega_mawile/back.png rename to graphics/pokemon/mawile/mega/back.png diff --git a/graphics/pokemon/mega_mawile/front.png b/graphics/pokemon/mawile/mega/front.png similarity index 100% rename from graphics/pokemon/mega_mawile/front.png rename to graphics/pokemon/mawile/mega/front.png diff --git a/graphics/pokemon/mawile/mega/icon.png b/graphics/pokemon/mawile/mega/icon.png new file mode 100644 index 0000000000..6fdec15ccf Binary files /dev/null and b/graphics/pokemon/mawile/mega/icon.png differ diff --git a/graphics/pokemon/mega_mawile/normal.pal b/graphics/pokemon/mawile/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_mawile/normal.pal rename to graphics/pokemon/mawile/mega/normal.pal diff --git a/graphics/pokemon/mega_mawile/shiny.pal b/graphics/pokemon/mawile/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_mawile/shiny.pal rename to graphics/pokemon/mawile/mega/shiny.pal diff --git a/graphics/pokemon/mega_medicham/back.png b/graphics/pokemon/medicham/mega/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/mega_medicham/back.png rename to graphics/pokemon/medicham/mega/back.png diff --git a/graphics/pokemon/mega_medicham/front.png b/graphics/pokemon/medicham/mega/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/mega_medicham/front.png rename to graphics/pokemon/medicham/mega/front.png diff --git a/graphics/pokemon/mega_medicham/icon.png b/graphics/pokemon/medicham/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_medicham/icon.png rename to graphics/pokemon/medicham/mega/icon.png diff --git a/graphics/pokemon/mega_medicham/normal.pal b/graphics/pokemon/medicham/mega/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/mega_medicham/normal.pal rename to graphics/pokemon/medicham/mega/normal.pal diff --git a/graphics/pokemon/mega_medicham/shiny.pal b/graphics/pokemon/medicham/mega/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/mega_medicham/shiny.pal rename to graphics/pokemon/medicham/mega/shiny.pal diff --git a/graphics/pokemon/mega_beedrill/icon.png b/graphics/pokemon/mega_beedrill/icon.png deleted file mode 100644 index 4c5b8fe46f..0000000000 Binary files a/graphics/pokemon/mega_beedrill/icon.png and /dev/null differ diff --git a/graphics/pokemon/mega_garchomp/icon.png b/graphics/pokemon/mega_garchomp/icon.png deleted file mode 100644 index 1686382434..0000000000 Binary files a/graphics/pokemon/mega_garchomp/icon.png and /dev/null differ diff --git a/graphics/pokemon/mega_glalie/icon.png b/graphics/pokemon/mega_glalie/icon.png deleted file mode 100644 index 02596508e7..0000000000 Binary files a/graphics/pokemon/mega_glalie/icon.png and /dev/null differ diff --git a/graphics/pokemon/mega_latias/icon.png b/graphics/pokemon/mega_latias/icon.png deleted file mode 100644 index 9c4c1c20f9..0000000000 Binary files a/graphics/pokemon/mega_latias/icon.png and /dev/null differ diff --git a/graphics/pokemon/mega_latios/icon.png b/graphics/pokemon/mega_latios/icon.png deleted file mode 100644 index 011c2d8f6d..0000000000 Binary files a/graphics/pokemon/mega_latios/icon.png and /dev/null differ diff --git a/graphics/pokemon/mega_mawile/icon.png b/graphics/pokemon/mega_mawile/icon.png deleted file mode 100644 index 81e49c8972..0000000000 Binary files a/graphics/pokemon/mega_mawile/icon.png and /dev/null differ diff --git a/graphics/pokemon/mega_pidgeot/icon.png b/graphics/pokemon/mega_pidgeot/icon.png deleted file mode 100644 index 255fffe589..0000000000 Binary files a/graphics/pokemon/mega_pidgeot/icon.png and /dev/null differ diff --git a/graphics/pokemon/mega_scizor/icon.png b/graphics/pokemon/mega_scizor/icon.png deleted file mode 100644 index e6a4eb0652..0000000000 Binary files a/graphics/pokemon/mega_scizor/icon.png and /dev/null differ diff --git a/graphics/pokemon/mega_slowbro/icon.png b/graphics/pokemon/mega_slowbro/icon.png deleted file mode 100644 index 621fe41840..0000000000 Binary files a/graphics/pokemon/mega_slowbro/icon.png and /dev/null differ diff --git a/graphics/pokemon/melmetal/footprint.png b/graphics/pokemon/melmetal/footprint.png new file mode 100644 index 0000000000..982753a19c Binary files /dev/null and b/graphics/pokemon/melmetal/footprint.png differ diff --git a/graphics/pokemon/meltan/footprint.png b/graphics/pokemon/meltan/footprint.png new file mode 100644 index 0000000000..37b4e1d3ec Binary files /dev/null and b/graphics/pokemon/meltan/footprint.png differ diff --git a/graphics/pokemon/alolan_meowth/back.png b/graphics/pokemon/meowth/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_meowth/back.png rename to graphics/pokemon/meowth/alolan/back.png diff --git a/graphics/pokemon/alolan_meowth/front.png b/graphics/pokemon/meowth/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_meowth/front.png rename to graphics/pokemon/meowth/alolan/front.png diff --git a/graphics/pokemon/alolan_meowth/icon.png b/graphics/pokemon/meowth/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_meowth/icon.png rename to graphics/pokemon/meowth/alolan/icon.png diff --git a/graphics/pokemon/alolan_meowth/normal.pal b/graphics/pokemon/meowth/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_meowth/normal.pal rename to graphics/pokemon/meowth/alolan/normal.pal diff --git a/graphics/pokemon/alolan_meowth/shiny.pal b/graphics/pokemon/meowth/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_meowth/shiny.pal rename to graphics/pokemon/meowth/alolan/shiny.pal diff --git a/graphics/pokemon/mega_metagross/back.png b/graphics/pokemon/metagross/mega/back.png similarity index 100% rename from graphics/pokemon/mega_metagross/back.png rename to graphics/pokemon/metagross/mega/back.png diff --git a/graphics/pokemon/mega_metagross/front.png b/graphics/pokemon/metagross/mega/front.png similarity index 100% rename from graphics/pokemon/mega_metagross/front.png rename to graphics/pokemon/metagross/mega/front.png diff --git a/graphics/pokemon/mega_metagross/icon.png b/graphics/pokemon/metagross/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_metagross/icon.png rename to graphics/pokemon/metagross/mega/icon.png diff --git a/graphics/pokemon/mega_metagross/normal.pal b/graphics/pokemon/metagross/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_metagross/normal.pal rename to graphics/pokemon/metagross/mega/normal.pal diff --git a/graphics/pokemon/mega_metagross/shiny.pal b/graphics/pokemon/metagross/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_metagross/shiny.pal rename to graphics/pokemon/metagross/mega/shiny.pal diff --git a/graphics/pokemon/mega_mewtwo_x/back.png b/graphics/pokemon/mewtwo/mega_x/back.png similarity index 100% rename from graphics/pokemon/mega_mewtwo_x/back.png rename to graphics/pokemon/mewtwo/mega_x/back.png diff --git a/graphics/pokemon/mega_mewtwo_x/front.png b/graphics/pokemon/mewtwo/mega_x/front.png similarity index 100% rename from graphics/pokemon/mega_mewtwo_x/front.png rename to graphics/pokemon/mewtwo/mega_x/front.png diff --git a/graphics/pokemon/mega_mewtwo_x/icon.png b/graphics/pokemon/mewtwo/mega_x/icon.png similarity index 100% rename from graphics/pokemon/mega_mewtwo_x/icon.png rename to graphics/pokemon/mewtwo/mega_x/icon.png diff --git a/graphics/pokemon/mega_mewtwo_x/normal.pal b/graphics/pokemon/mewtwo/mega_x/normal.pal similarity index 100% rename from graphics/pokemon/mega_mewtwo_x/normal.pal rename to graphics/pokemon/mewtwo/mega_x/normal.pal diff --git a/graphics/pokemon/mega_mewtwo_x/shiny.pal b/graphics/pokemon/mewtwo/mega_x/shiny.pal similarity index 100% rename from graphics/pokemon/mega_mewtwo_x/shiny.pal rename to graphics/pokemon/mewtwo/mega_x/shiny.pal diff --git a/graphics/pokemon/mega_mewtwo_y/back.png b/graphics/pokemon/mewtwo/mega_y/back.png similarity index 100% rename from graphics/pokemon/mega_mewtwo_y/back.png rename to graphics/pokemon/mewtwo/mega_y/back.png diff --git a/graphics/pokemon/mega_mewtwo_y/front.png b/graphics/pokemon/mewtwo/mega_y/front.png similarity index 100% rename from graphics/pokemon/mega_mewtwo_y/front.png rename to graphics/pokemon/mewtwo/mega_y/front.png diff --git a/graphics/pokemon/mega_mewtwo_y/icon.png b/graphics/pokemon/mewtwo/mega_y/icon.png similarity index 100% rename from graphics/pokemon/mega_mewtwo_y/icon.png rename to graphics/pokemon/mewtwo/mega_y/icon.png diff --git a/graphics/pokemon/mega_mewtwo_y/normal.pal b/graphics/pokemon/mewtwo/mega_y/normal.pal similarity index 100% rename from graphics/pokemon/mega_mewtwo_y/normal.pal rename to graphics/pokemon/mewtwo/mega_y/normal.pal diff --git a/graphics/pokemon/mega_mewtwo_y/shiny.pal b/graphics/pokemon/mewtwo/mega_y/shiny.pal similarity index 100% rename from graphics/pokemon/mega_mewtwo_y/shiny.pal rename to graphics/pokemon/mewtwo/mega_y/shiny.pal diff --git a/graphics/pokemon/milcery/footprint.png b/graphics/pokemon/milcery/footprint.png new file mode 100644 index 0000000000..fd3ee498d6 Binary files /dev/null and b/graphics/pokemon/milcery/footprint.png differ diff --git a/graphics/pokemon/mimikyu/footprint.png b/graphics/pokemon/mimikyu/footprint.png new file mode 100644 index 0000000000..00eff81a99 Binary files /dev/null and b/graphics/pokemon/mimikyu/footprint.png differ diff --git a/graphics/pokemon/minior/footprint.png b/graphics/pokemon/minior/footprint.png new file mode 100644 index 0000000000..2e1ee79941 Binary files /dev/null and b/graphics/pokemon/minior/footprint.png differ diff --git a/graphics/pokemon/moltres/galarian/icon.png b/graphics/pokemon/moltres/galarian/icon.png index 90edae5219..0f469cbf5a 100644 Binary files a/graphics/pokemon/moltres/galarian/icon.png and b/graphics/pokemon/moltres/galarian/icon.png differ diff --git a/graphics/pokemon/morelull/footprint.png b/graphics/pokemon/morelull/footprint.png new file mode 100644 index 0000000000..a5658a3197 Binary files /dev/null and b/graphics/pokemon/morelull/footprint.png differ diff --git a/graphics/pokemon/morgrem/footprint.png b/graphics/pokemon/morgrem/footprint.png new file mode 100644 index 0000000000..241717eade Binary files /dev/null and b/graphics/pokemon/morgrem/footprint.png differ diff --git a/graphics/pokemon/morpeko/footprint.png b/graphics/pokemon/morpeko/footprint.png new file mode 100644 index 0000000000..398d437f0c Binary files /dev/null and b/graphics/pokemon/morpeko/footprint.png differ diff --git a/graphics/pokemon/mr_rime/footprint.png b/graphics/pokemon/mr_rime/footprint.png new file mode 100644 index 0000000000..5b8cc5c939 Binary files /dev/null and b/graphics/pokemon/mr_rime/footprint.png differ diff --git a/graphics/pokemon/mudbray/footprint.png b/graphics/pokemon/mudbray/footprint.png new file mode 100644 index 0000000000..c334a7facd Binary files /dev/null and b/graphics/pokemon/mudbray/footprint.png differ diff --git a/graphics/pokemon/mudsdale/footprint.png b/graphics/pokemon/mudsdale/footprint.png new file mode 100644 index 0000000000..16a9b40aef Binary files /dev/null and b/graphics/pokemon/mudsdale/footprint.png differ diff --git a/graphics/pokemon/alolan_muk/back.png b/graphics/pokemon/muk/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_muk/back.png rename to graphics/pokemon/muk/alolan/back.png diff --git a/graphics/pokemon/alolan_muk/front.png b/graphics/pokemon/muk/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_muk/front.png rename to graphics/pokemon/muk/alolan/front.png diff --git a/graphics/pokemon/alolan_muk/icon.png b/graphics/pokemon/muk/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_muk/icon.png rename to graphics/pokemon/muk/alolan/icon.png diff --git a/graphics/pokemon/alolan_muk/normal.pal b/graphics/pokemon/muk/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_muk/normal.pal rename to graphics/pokemon/muk/alolan/normal.pal diff --git a/graphics/pokemon/alolan_muk/shiny.pal b/graphics/pokemon/muk/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_muk/shiny.pal rename to graphics/pokemon/muk/alolan/shiny.pal diff --git a/graphics/pokemon/naganadel/footprint.png b/graphics/pokemon/naganadel/footprint.png new file mode 100644 index 0000000000..78250a3d52 Binary files /dev/null and b/graphics/pokemon/naganadel/footprint.png differ diff --git a/graphics/pokemon/necrozma/footprint.png b/graphics/pokemon/necrozma/footprint.png new file mode 100644 index 0000000000..baad92198e Binary files /dev/null and b/graphics/pokemon/necrozma/footprint.png differ diff --git a/graphics/pokemon/nickit/footprint.png b/graphics/pokemon/nickit/footprint.png new file mode 100644 index 0000000000..480c8f2674 Binary files /dev/null and b/graphics/pokemon/nickit/footprint.png differ diff --git a/graphics/pokemon/nihilego/footprint.png b/graphics/pokemon/nihilego/footprint.png new file mode 100644 index 0000000000..09c582c425 Binary files /dev/null and b/graphics/pokemon/nihilego/footprint.png differ diff --git a/graphics/pokemon/alolan_ninetales/back.png b/graphics/pokemon/ninetales/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_ninetales/back.png rename to graphics/pokemon/ninetales/alolan/back.png diff --git a/graphics/pokemon/alolan_ninetales/front.png b/graphics/pokemon/ninetales/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_ninetales/front.png rename to graphics/pokemon/ninetales/alolan/front.png diff --git a/graphics/pokemon/alolan_ninetales/icon.png b/graphics/pokemon/ninetales/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_ninetales/icon.png rename to graphics/pokemon/ninetales/alolan/icon.png diff --git a/graphics/pokemon/alolan_ninetales/normal.pal b/graphics/pokemon/ninetales/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_ninetales/normal.pal rename to graphics/pokemon/ninetales/alolan/normal.pal diff --git a/graphics/pokemon/alolan_ninetales/shiny.pal b/graphics/pokemon/ninetales/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_ninetales/shiny.pal rename to graphics/pokemon/ninetales/alolan/shiny.pal diff --git a/graphics/pokemon/obstagoon/footprint.png b/graphics/pokemon/obstagoon/footprint.png new file mode 100644 index 0000000000..dbfcda463a Binary files /dev/null and b/graphics/pokemon/obstagoon/footprint.png differ diff --git a/graphics/pokemon/oranguru/footprint.png b/graphics/pokemon/oranguru/footprint.png new file mode 100644 index 0000000000..294a56389b Binary files /dev/null and b/graphics/pokemon/oranguru/footprint.png differ diff --git a/graphics/pokemon/orbeetle/footprint.png b/graphics/pokemon/orbeetle/footprint.png new file mode 100644 index 0000000000..57dc260a97 Binary files /dev/null and b/graphics/pokemon/orbeetle/footprint.png differ diff --git a/graphics/pokemon/oricorio/footprint.png b/graphics/pokemon/oricorio/footprint.png new file mode 100644 index 0000000000..bb9cc0114e Binary files /dev/null and b/graphics/pokemon/oricorio/footprint.png differ diff --git a/graphics/pokemon/overqwil/back.png b/graphics/pokemon/overqwil/back.png new file mode 100644 index 0000000000..79670b0601 Binary files /dev/null and b/graphics/pokemon/overqwil/back.png differ diff --git a/graphics/pokemon/overqwil/front.png b/graphics/pokemon/overqwil/front.png new file mode 100644 index 0000000000..fa6f3121ab Binary files /dev/null and b/graphics/pokemon/overqwil/front.png differ diff --git a/graphics/pokemon/overqwil/icon.png b/graphics/pokemon/overqwil/icon.png new file mode 100644 index 0000000000..661013b728 Binary files /dev/null and b/graphics/pokemon/overqwil/icon.png differ diff --git a/graphics/pokemon/overqwil/normal.pal b/graphics/pokemon/overqwil/normal.pal new file mode 100644 index 0000000000..edf871d9a7 --- /dev/null +++ b/graphics/pokemon/overqwil/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +120 32 96 +240 72 208 +16 16 16 +160 72 200 +96 96 104 +184 56 152 +40 40 48 +64 64 72 +128 128 128 +88 80 56 +208 200 176 +176 168 120 +136 120 88 +248 248 248 +0 0 0 diff --git a/graphics/pokemon/overqwil/shiny.pal b/graphics/pokemon/overqwil/shiny.pal new file mode 100644 index 0000000000..d791dac4eb --- /dev/null +++ b/graphics/pokemon/overqwil/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +40 48 128 +80 96 224 +16 16 16 +96 136 216 +168 184 208 +64 64 200 +80 80 96 +136 136 152 +208 224 240 +64 64 48 +200 192 184 +168 160 136 +112 112 96 +248 248 248 +0 0 0 diff --git a/graphics/pokemon/palkia/origin/back.png b/graphics/pokemon/palkia/origin/back.png new file mode 100644 index 0000000000..1c3bbd210c Binary files /dev/null and b/graphics/pokemon/palkia/origin/back.png differ diff --git a/graphics/pokemon/palkia/origin/front.png b/graphics/pokemon/palkia/origin/front.png new file mode 100644 index 0000000000..3147470d64 Binary files /dev/null and b/graphics/pokemon/palkia/origin/front.png differ diff --git a/graphics/pokemon/palkia/origin/icon.png b/graphics/pokemon/palkia/origin/icon.png new file mode 100644 index 0000000000..772e8c864a Binary files /dev/null and b/graphics/pokemon/palkia/origin/icon.png differ diff --git a/graphics/pokemon/palkia/origin/normal.pal b/graphics/pokemon/palkia/origin/normal.pal new file mode 100644 index 0000000000..428dc93d33 --- /dev/null +++ b/graphics/pokemon/palkia/origin/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +96 80 120 +96 120 144 +200 176 208 +152 184 200 +232 216 240 +152 128 176 +192 216 224 +8 8 8 +104 56 112 +216 104 80 +152 88 160 +184 104 208 +240 160 152 +224 192 184 +224 208 200 diff --git a/graphics/pokemon/palkia/origin/shiny.pal b/graphics/pokemon/palkia/origin/shiny.pal new file mode 100644 index 0000000000..f520c1e3b7 --- /dev/null +++ b/graphics/pokemon/palkia/origin/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +128 32 56 +128 112 192 +224 176 176 +176 168 216 +248 216 232 +200 104 112 +216 216 248 +8 8 8 +128 32 80 +216 104 80 +168 48 80 +208 96 136 +240 160 152 +224 192 184 +224 208 200 diff --git a/graphics/pokemon/palossand/footprint.png b/graphics/pokemon/palossand/footprint.png new file mode 100644 index 0000000000..f0c03ad35c Binary files /dev/null and b/graphics/pokemon/palossand/footprint.png differ diff --git a/graphics/pokemon/passimian/footprint.png b/graphics/pokemon/passimian/footprint.png new file mode 100644 index 0000000000..efd96aa102 Binary files /dev/null and b/graphics/pokemon/passimian/footprint.png differ diff --git a/graphics/pokemon/perrserker/footprint.png b/graphics/pokemon/perrserker/footprint.png new file mode 100644 index 0000000000..c2bce6fde5 Binary files /dev/null and b/graphics/pokemon/perrserker/footprint.png differ diff --git a/graphics/pokemon/alolan_persian/back.png b/graphics/pokemon/persian/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_persian/back.png rename to graphics/pokemon/persian/alolan/back.png diff --git a/graphics/pokemon/alolan_persian/front.png b/graphics/pokemon/persian/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_persian/front.png rename to graphics/pokemon/persian/alolan/front.png diff --git a/graphics/pokemon/alolan_persian/icon.png b/graphics/pokemon/persian/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_persian/icon.png rename to graphics/pokemon/persian/alolan/icon.png diff --git a/graphics/pokemon/alolan_persian/normal.pal b/graphics/pokemon/persian/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_persian/normal.pal rename to graphics/pokemon/persian/alolan/normal.pal diff --git a/graphics/pokemon/alolan_persian/shiny.pal b/graphics/pokemon/persian/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_persian/shiny.pal rename to graphics/pokemon/persian/alolan/shiny.pal diff --git a/graphics/pokemon/pheromosa/footprint.png b/graphics/pokemon/pheromosa/footprint.png new file mode 100644 index 0000000000..b1a57f94e8 Binary files /dev/null and b/graphics/pokemon/pheromosa/footprint.png differ diff --git a/graphics/pokemon/pichu/spiky_eared/back.png b/graphics/pokemon/pichu/spiky_eared/back.png index 72693a1026..4198a751e3 100644 Binary files a/graphics/pokemon/pichu/spiky_eared/back.png and b/graphics/pokemon/pichu/spiky_eared/back.png differ diff --git a/graphics/pokemon/pichu/spiky_eared/front.png b/graphics/pokemon/pichu/spiky_eared/front.png index c9f6152d3f..3eeb371a06 100644 Binary files a/graphics/pokemon/pichu/spiky_eared/front.png and b/graphics/pokemon/pichu/spiky_eared/front.png differ diff --git a/graphics/pokemon/pichu/spiky_eared/normal.pal b/graphics/pokemon/pichu/spiky_eared/normal.pal index eee034dbc9..e837eb8c32 100644 --- a/graphics/pokemon/pichu/spiky_eared/normal.pal +++ b/graphics/pokemon/pichu/spiky_eared/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 211 165 -32 32 49 -65 65 82 -164 123 8 -197 172 16 -246 230 82 -131 90 41 -246 238 148 -98 74 16 +152 208 160 16 16 16 -148 139 123 -238 230 205 -230 123 148 -139 32 32 -189 41 41 +0 56 96 +144 120 64 +192 176 88 +248 232 112 +120 72 32 +248 232 168 +96 80 40 +144 136 120 +232 224 200 +224 136 136 +136 72 72 +200 96 96 +0 0 0 0 0 0 diff --git a/graphics/pokemon/pichu/spiky_eared/shiny.pal b/graphics/pokemon/pichu/spiky_eared/shiny.pal index a2523e2719..65504fdf95 100644 --- a/graphics/pokemon/pichu/spiky_eared/shiny.pal +++ b/graphics/pokemon/pichu/spiky_eared/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 211 165 -32 32 49 -82 65 65 -189 123 0 -222 156 57 -255 213 0 -139 74 0 -255 238 106 -90 32 0 +152 208 160 16 16 16 -148 139 123 -238 230 205 -255 49 65 -139 32 32 -189 41 41 +88 64 64 +184 120 0 +216 152 56 +248 216 24 +112 72 40 +248 232 104 +88 40 16 +144 136 120 +232 224 200 +248 48 64 +136 32 32 +184 40 40 +0 0 0 0 0 0 diff --git a/graphics/pokemon/mega_pidgeot/back.png b/graphics/pokemon/pidgeot/mega/back.png similarity index 100% rename from graphics/pokemon/mega_pidgeot/back.png rename to graphics/pokemon/pidgeot/mega/back.png diff --git a/graphics/pokemon/mega_pidgeot/front.png b/graphics/pokemon/pidgeot/mega/front.png similarity index 100% rename from graphics/pokemon/mega_pidgeot/front.png rename to graphics/pokemon/pidgeot/mega/front.png diff --git a/graphics/pokemon/pidgeot/mega/icon.png b/graphics/pokemon/pidgeot/mega/icon.png new file mode 100644 index 0000000000..32cb6e1f11 Binary files /dev/null and b/graphics/pokemon/pidgeot/mega/icon.png differ diff --git a/graphics/pokemon/mega_pidgeot/normal.pal b/graphics/pokemon/pidgeot/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_pidgeot/normal.pal rename to graphics/pokemon/pidgeot/mega/normal.pal diff --git a/graphics/pokemon/mega_pidgeot/shiny.pal b/graphics/pokemon/pidgeot/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_pidgeot/shiny.pal rename to graphics/pokemon/pidgeot/mega/shiny.pal diff --git a/graphics/pokemon/pikachu/partner_cap/back.png b/graphics/pokemon/pikachu/partner_cap/back.png index a06e273efa..961611d28a 100644 Binary files a/graphics/pokemon/pikachu/partner_cap/back.png and b/graphics/pokemon/pikachu/partner_cap/back.png differ diff --git a/graphics/pokemon/pikachu/partner_cap/front.png b/graphics/pokemon/pikachu/partner_cap/front.png index 10a4b11584..6965900761 100644 Binary files a/graphics/pokemon/pikachu/partner_cap/front.png and b/graphics/pokemon/pikachu/partner_cap/front.png differ diff --git a/graphics/pokemon/pikipek/footprint.png b/graphics/pokemon/pikipek/footprint.png new file mode 100644 index 0000000000..88ac9663c0 Binary files /dev/null and b/graphics/pokemon/pikipek/footprint.png differ diff --git a/graphics/pokemon/pincurchin/footprint.png b/graphics/pokemon/pincurchin/footprint.png new file mode 100644 index 0000000000..7a29a3a01f Binary files /dev/null and b/graphics/pokemon/pincurchin/footprint.png differ diff --git a/graphics/pokemon/mega_pinsir/back.png b/graphics/pokemon/pinsir/mega/back.png similarity index 100% rename from graphics/pokemon/mega_pinsir/back.png rename to graphics/pokemon/pinsir/mega/back.png diff --git a/graphics/pokemon/mega_pinsir/front.png b/graphics/pokemon/pinsir/mega/front.png similarity index 100% rename from graphics/pokemon/mega_pinsir/front.png rename to graphics/pokemon/pinsir/mega/front.png diff --git a/graphics/pokemon/mega_pinsir/icon.png b/graphics/pokemon/pinsir/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_pinsir/icon.png rename to graphics/pokemon/pinsir/mega/icon.png diff --git a/graphics/pokemon/mega_pinsir/normal.pal b/graphics/pokemon/pinsir/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_pinsir/normal.pal rename to graphics/pokemon/pinsir/mega/normal.pal diff --git a/graphics/pokemon/mega_pinsir/shiny.pal b/graphics/pokemon/pinsir/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_pinsir/shiny.pal rename to graphics/pokemon/pinsir/mega/shiny.pal diff --git a/graphics/pokemon/poipole/footprint.png b/graphics/pokemon/poipole/footprint.png new file mode 100644 index 0000000000..249c47e088 Binary files /dev/null and b/graphics/pokemon/poipole/footprint.png differ diff --git a/graphics/pokemon/polteageist/footprint.png b/graphics/pokemon/polteageist/footprint.png new file mode 100644 index 0000000000..619fab9877 Binary files /dev/null and b/graphics/pokemon/polteageist/footprint.png differ diff --git a/graphics/pokemon/popplio/footprint.png b/graphics/pokemon/popplio/footprint.png new file mode 100644 index 0000000000..3f26669326 Binary files /dev/null and b/graphics/pokemon/popplio/footprint.png differ diff --git a/graphics/pokemon/primarina/footprint.png b/graphics/pokemon/primarina/footprint.png new file mode 100644 index 0000000000..53b9f28d45 Binary files /dev/null and b/graphics/pokemon/primarina/footprint.png differ diff --git a/graphics/pokemon/pyukumuku/footprint.png b/graphics/pokemon/pyukumuku/footprint.png new file mode 100644 index 0000000000..fa1ffd4ac6 Binary files /dev/null and b/graphics/pokemon/pyukumuku/footprint.png differ diff --git a/graphics/pokemon/qwilfish/hisuian/back.png b/graphics/pokemon/qwilfish/hisuian/back.png new file mode 100644 index 0000000000..48a01e06f2 Binary files /dev/null and b/graphics/pokemon/qwilfish/hisuian/back.png differ diff --git a/graphics/pokemon/qwilfish/hisuian/front.png b/graphics/pokemon/qwilfish/hisuian/front.png new file mode 100644 index 0000000000..a32988cf7d Binary files /dev/null and b/graphics/pokemon/qwilfish/hisuian/front.png differ diff --git a/graphics/pokemon/qwilfish/hisuian/icon.png b/graphics/pokemon/qwilfish/hisuian/icon.png new file mode 100644 index 0000000000..6936dfe88d Binary files /dev/null and b/graphics/pokemon/qwilfish/hisuian/icon.png differ diff --git a/graphics/pokemon/qwilfish/hisuian/normal.pal b/graphics/pokemon/qwilfish/hisuian/normal.pal new file mode 100644 index 0000000000..b1a2bcd32b --- /dev/null +++ b/graphics/pokemon/qwilfish/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +120 32 96 +240 64 208 +16 16 16 +184 48 152 +128 128 128 +64 64 72 +40 40 48 +88 88 96 +152 136 80 +176 160 120 +184 192 192 +88 80 40 +248 248 248 +184 176 144 +0 0 0 diff --git a/graphics/pokemon/qwilfish/hisuian/shiny.pal b/graphics/pokemon/qwilfish/hisuian/shiny.pal new file mode 100644 index 0000000000..79d490248c --- /dev/null +++ b/graphics/pokemon/qwilfish/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +40 48 128 +120 112 208 +16 16 16 +96 88 184 +208 224 240 +136 136 152 +80 80 96 +168 184 208 +168 160 136 +184 184 168 +184 192 192 +96 96 80 +248 248 248 +200 192 184 +0 0 0 diff --git a/graphics/pokemon/raboot/footprint.png b/graphics/pokemon/raboot/footprint.png new file mode 100644 index 0000000000..e8e0f26b65 Binary files /dev/null and b/graphics/pokemon/raboot/footprint.png differ diff --git a/graphics/pokemon/alolan_raichu/back.png b/graphics/pokemon/raichu/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_raichu/back.png rename to graphics/pokemon/raichu/alolan/back.png diff --git a/graphics/pokemon/alolan_raichu/front.png b/graphics/pokemon/raichu/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_raichu/front.png rename to graphics/pokemon/raichu/alolan/front.png diff --git a/graphics/pokemon/alolan_raichu/icon.png b/graphics/pokemon/raichu/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_raichu/icon.png rename to graphics/pokemon/raichu/alolan/icon.png diff --git a/graphics/pokemon/alolan_raichu/normal.pal b/graphics/pokemon/raichu/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_raichu/normal.pal rename to graphics/pokemon/raichu/alolan/normal.pal diff --git a/graphics/pokemon/alolan_raichu/shiny.pal b/graphics/pokemon/raichu/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_raichu/shiny.pal rename to graphics/pokemon/raichu/alolan/shiny.pal diff --git a/graphics/pokemon/alolan_raticate/back.png b/graphics/pokemon/raticate/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_raticate/back.png rename to graphics/pokemon/raticate/alolan/back.png diff --git a/graphics/pokemon/alolan_raticate/front.png b/graphics/pokemon/raticate/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_raticate/front.png rename to graphics/pokemon/raticate/alolan/front.png diff --git a/graphics/pokemon/alolan_raticate/icon.png b/graphics/pokemon/raticate/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_raticate/icon.png rename to graphics/pokemon/raticate/alolan/icon.png diff --git a/graphics/pokemon/alolan_raticate/normal.pal b/graphics/pokemon/raticate/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_raticate/normal.pal rename to graphics/pokemon/raticate/alolan/normal.pal diff --git a/graphics/pokemon/alolan_raticate/shiny.pal b/graphics/pokemon/raticate/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_raticate/shiny.pal rename to graphics/pokemon/raticate/alolan/shiny.pal diff --git a/graphics/pokemon/alolan_rattata/back.png b/graphics/pokemon/rattata/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_rattata/back.png rename to graphics/pokemon/rattata/alolan/back.png diff --git a/graphics/pokemon/alolan_rattata/front.png b/graphics/pokemon/rattata/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_rattata/front.png rename to graphics/pokemon/rattata/alolan/front.png diff --git a/graphics/pokemon/alolan_rattata/icon.png b/graphics/pokemon/rattata/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_rattata/icon.png rename to graphics/pokemon/rattata/alolan/icon.png diff --git a/graphics/pokemon/alolan_rattata/normal.pal b/graphics/pokemon/rattata/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_rattata/normal.pal rename to graphics/pokemon/rattata/alolan/normal.pal diff --git a/graphics/pokemon/alolan_rattata/shiny.pal b/graphics/pokemon/rattata/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_rattata/shiny.pal rename to graphics/pokemon/rattata/alolan/shiny.pal diff --git a/graphics/pokemon/mega_rayquaza/back.png b/graphics/pokemon/rayquaza/mega/back.png similarity index 100% rename from graphics/pokemon/mega_rayquaza/back.png rename to graphics/pokemon/rayquaza/mega/back.png diff --git a/graphics/pokemon/mega_rayquaza/front.png b/graphics/pokemon/rayquaza/mega/front.png similarity index 100% rename from graphics/pokemon/mega_rayquaza/front.png rename to graphics/pokemon/rayquaza/mega/front.png diff --git a/graphics/pokemon/mega_rayquaza/icon.png b/graphics/pokemon/rayquaza/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_rayquaza/icon.png rename to graphics/pokemon/rayquaza/mega/icon.png diff --git a/graphics/pokemon/mega_rayquaza/normal.pal b/graphics/pokemon/rayquaza/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_rayquaza/normal.pal rename to graphics/pokemon/rayquaza/mega/normal.pal diff --git a/graphics/pokemon/mega_rayquaza/shiny.pal b/graphics/pokemon/rayquaza/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_rayquaza/shiny.pal rename to graphics/pokemon/rayquaza/mega/shiny.pal diff --git a/graphics/pokemon/regidrago/footprint.png b/graphics/pokemon/regidrago/footprint.png new file mode 100644 index 0000000000..616bef0ded Binary files /dev/null and b/graphics/pokemon/regidrago/footprint.png differ diff --git a/graphics/pokemon/regidrago/icon.png b/graphics/pokemon/regidrago/icon.png index b6cfa5d9d8..3b994684b4 100644 Binary files a/graphics/pokemon/regidrago/icon.png and b/graphics/pokemon/regidrago/icon.png differ diff --git a/graphics/pokemon/regieleki/footprint.png b/graphics/pokemon/regieleki/footprint.png new file mode 100644 index 0000000000..f64e6d1b96 Binary files /dev/null and b/graphics/pokemon/regieleki/footprint.png differ diff --git a/graphics/pokemon/regieleki/icon.png b/graphics/pokemon/regieleki/icon.png index 268208caf9..bf3b3f3a89 100644 Binary files a/graphics/pokemon/regieleki/icon.png and b/graphics/pokemon/regieleki/icon.png differ diff --git a/graphics/pokemon/ribombee/footprint.png b/graphics/pokemon/ribombee/footprint.png new file mode 100644 index 0000000000..5f908e9745 Binary files /dev/null and b/graphics/pokemon/ribombee/footprint.png differ diff --git a/graphics/pokemon/rillaboom/footprint.png b/graphics/pokemon/rillaboom/footprint.png new file mode 100644 index 0000000000..2711be60ca Binary files /dev/null and b/graphics/pokemon/rillaboom/footprint.png differ diff --git a/graphics/pokemon/rockruff/footprint.png b/graphics/pokemon/rockruff/footprint.png new file mode 100644 index 0000000000..486ec06239 Binary files /dev/null and b/graphics/pokemon/rockruff/footprint.png differ diff --git a/graphics/pokemon/rolycoly/footprint.png b/graphics/pokemon/rolycoly/footprint.png new file mode 100644 index 0000000000..d33007c580 Binary files /dev/null and b/graphics/pokemon/rolycoly/footprint.png differ diff --git a/graphics/pokemon/rookidee/footprint.png b/graphics/pokemon/rookidee/footprint.png new file mode 100644 index 0000000000..82cf54523d Binary files /dev/null and b/graphics/pokemon/rookidee/footprint.png differ diff --git a/graphics/pokemon/rowlet/footprint.png b/graphics/pokemon/rowlet/footprint.png new file mode 100644 index 0000000000..a67af910f4 Binary files /dev/null and b/graphics/pokemon/rowlet/footprint.png differ diff --git a/graphics/pokemon/runerigus/footprint.png b/graphics/pokemon/runerigus/footprint.png new file mode 100644 index 0000000000..4c2de92225 Binary files /dev/null and b/graphics/pokemon/runerigus/footprint.png differ diff --git a/graphics/pokemon/mega_sableye/back.png b/graphics/pokemon/sableye/mega/back.png similarity index 100% rename from graphics/pokemon/mega_sableye/back.png rename to graphics/pokemon/sableye/mega/back.png diff --git a/graphics/pokemon/mega_sableye/front.png b/graphics/pokemon/sableye/mega/front.png similarity index 100% rename from graphics/pokemon/mega_sableye/front.png rename to graphics/pokemon/sableye/mega/front.png diff --git a/graphics/pokemon/mega_sableye/icon.png b/graphics/pokemon/sableye/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_sableye/icon.png rename to graphics/pokemon/sableye/mega/icon.png diff --git a/graphics/pokemon/mega_sableye/normal.pal b/graphics/pokemon/sableye/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_sableye/normal.pal rename to graphics/pokemon/sableye/mega/normal.pal diff --git a/graphics/pokemon/mega_sableye/shiny.pal b/graphics/pokemon/sableye/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_sableye/shiny.pal rename to graphics/pokemon/sableye/mega/shiny.pal diff --git a/graphics/pokemon/mega_salamence/back.png b/graphics/pokemon/salamence/mega/back.png similarity index 100% rename from graphics/pokemon/mega_salamence/back.png rename to graphics/pokemon/salamence/mega/back.png diff --git a/graphics/pokemon/mega_salamence/front.png b/graphics/pokemon/salamence/mega/front.png similarity index 100% rename from graphics/pokemon/mega_salamence/front.png rename to graphics/pokemon/salamence/mega/front.png diff --git a/graphics/pokemon/mega_salamence/icon.png b/graphics/pokemon/salamence/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_salamence/icon.png rename to graphics/pokemon/salamence/mega/icon.png diff --git a/graphics/pokemon/mega_salamence/normal.pal b/graphics/pokemon/salamence/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_salamence/normal.pal rename to graphics/pokemon/salamence/mega/normal.pal diff --git a/graphics/pokemon/mega_salamence/shiny.pal b/graphics/pokemon/salamence/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_salamence/shiny.pal rename to graphics/pokemon/salamence/mega/shiny.pal diff --git a/graphics/pokemon/salandit/footprint.png b/graphics/pokemon/salandit/footprint.png new file mode 100644 index 0000000000..3490ad7685 Binary files /dev/null and b/graphics/pokemon/salandit/footprint.png differ diff --git a/graphics/pokemon/salazzle/footprint.png b/graphics/pokemon/salazzle/footprint.png new file mode 100644 index 0000000000..c8eb90af92 Binary files /dev/null and b/graphics/pokemon/salazzle/footprint.png differ diff --git a/graphics/pokemon/samurott/hisuian/icon.png b/graphics/pokemon/samurott/hisuian/icon.png new file mode 100644 index 0000000000..fdcbe6718f Binary files /dev/null and b/graphics/pokemon/samurott/hisuian/icon.png differ diff --git a/graphics/pokemon/sandaconda/footprint.png b/graphics/pokemon/sandaconda/footprint.png new file mode 100644 index 0000000000..9de2872263 Binary files /dev/null and b/graphics/pokemon/sandaconda/footprint.png differ diff --git a/graphics/pokemon/alolan_sandshrew/back.png b/graphics/pokemon/sandshrew/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_sandshrew/back.png rename to graphics/pokemon/sandshrew/alolan/back.png diff --git a/graphics/pokemon/alolan_sandshrew/front.png b/graphics/pokemon/sandshrew/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_sandshrew/front.png rename to graphics/pokemon/sandshrew/alolan/front.png diff --git a/graphics/pokemon/alolan_sandshrew/icon.png b/graphics/pokemon/sandshrew/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_sandshrew/icon.png rename to graphics/pokemon/sandshrew/alolan/icon.png diff --git a/graphics/pokemon/alolan_sandshrew/normal.pal b/graphics/pokemon/sandshrew/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_sandshrew/normal.pal rename to graphics/pokemon/sandshrew/alolan/normal.pal diff --git a/graphics/pokemon/alolan_sandshrew/shiny.pal b/graphics/pokemon/sandshrew/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_sandshrew/shiny.pal rename to graphics/pokemon/sandshrew/alolan/shiny.pal diff --git a/graphics/pokemon/alolan_sandslash/back.png b/graphics/pokemon/sandslash/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_sandslash/back.png rename to graphics/pokemon/sandslash/alolan/back.png diff --git a/graphics/pokemon/alolan_sandslash/front.png b/graphics/pokemon/sandslash/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_sandslash/front.png rename to graphics/pokemon/sandslash/alolan/front.png diff --git a/graphics/pokemon/alolan_sandslash/icon.png b/graphics/pokemon/sandslash/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_sandslash/icon.png rename to graphics/pokemon/sandslash/alolan/icon.png diff --git a/graphics/pokemon/alolan_sandslash/normal.pal b/graphics/pokemon/sandslash/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_sandslash/normal.pal rename to graphics/pokemon/sandslash/alolan/normal.pal diff --git a/graphics/pokemon/alolan_sandslash/shiny.pal b/graphics/pokemon/sandslash/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_sandslash/shiny.pal rename to graphics/pokemon/sandslash/alolan/shiny.pal diff --git a/graphics/pokemon/sandygast/footprint.png b/graphics/pokemon/sandygast/footprint.png new file mode 100644 index 0000000000..87078a7b46 Binary files /dev/null and b/graphics/pokemon/sandygast/footprint.png differ diff --git a/graphics/pokemon/mega_sceptile/back.png b/graphics/pokemon/sceptile/mega/back.png similarity index 100% rename from graphics/pokemon/mega_sceptile/back.png rename to graphics/pokemon/sceptile/mega/back.png diff --git a/graphics/pokemon/mega_sceptile/front.png b/graphics/pokemon/sceptile/mega/front.png similarity index 100% rename from graphics/pokemon/mega_sceptile/front.png rename to graphics/pokemon/sceptile/mega/front.png diff --git a/graphics/pokemon/mega_sceptile/icon.png b/graphics/pokemon/sceptile/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_sceptile/icon.png rename to graphics/pokemon/sceptile/mega/icon.png diff --git a/graphics/pokemon/mega_sceptile/normal.pal b/graphics/pokemon/sceptile/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_sceptile/normal.pal rename to graphics/pokemon/sceptile/mega/normal.pal diff --git a/graphics/pokemon/mega_sceptile/shiny.pal b/graphics/pokemon/sceptile/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_sceptile/shiny.pal rename to graphics/pokemon/sceptile/mega/shiny.pal diff --git a/graphics/pokemon/mega_scizor/back.png b/graphics/pokemon/scizor/mega/back.png similarity index 100% rename from graphics/pokemon/mega_scizor/back.png rename to graphics/pokemon/scizor/mega/back.png diff --git a/graphics/pokemon/mega_scizor/front.png b/graphics/pokemon/scizor/mega/front.png similarity index 100% rename from graphics/pokemon/mega_scizor/front.png rename to graphics/pokemon/scizor/mega/front.png diff --git a/graphics/pokemon/scizor/mega/icon.png b/graphics/pokemon/scizor/mega/icon.png new file mode 100644 index 0000000000..2ba3e82439 Binary files /dev/null and b/graphics/pokemon/scizor/mega/icon.png differ diff --git a/graphics/pokemon/mega_scizor/normal.pal b/graphics/pokemon/scizor/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_scizor/normal.pal rename to graphics/pokemon/scizor/mega/normal.pal diff --git a/graphics/pokemon/mega_scizor/shiny.pal b/graphics/pokemon/scizor/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_scizor/shiny.pal rename to graphics/pokemon/scizor/mega/shiny.pal diff --git a/graphics/pokemon/scorbunny/footprint.png b/graphics/pokemon/scorbunny/footprint.png new file mode 100644 index 0000000000..03b76efa17 Binary files /dev/null and b/graphics/pokemon/scorbunny/footprint.png differ diff --git a/graphics/pokemon/scorbunny/icon.png b/graphics/pokemon/scorbunny/icon.png index 84c83b3010..9009f3e1d6 100644 Binary files a/graphics/pokemon/scorbunny/icon.png and b/graphics/pokemon/scorbunny/icon.png differ diff --git a/graphics/pokemon/scyther/anim_front.png b/graphics/pokemon/scyther/anim_front.png index 60828d6f70..673dc2d221 100644 Binary files a/graphics/pokemon/scyther/anim_front.png and b/graphics/pokemon/scyther/anim_front.png differ diff --git a/graphics/pokemon/scyther/front.png b/graphics/pokemon/scyther/front.png index 1251395775..abf81a0632 100644 Binary files a/graphics/pokemon/scyther/front.png and b/graphics/pokemon/scyther/front.png differ diff --git a/graphics/pokemon/mega_sharpedo/back.png b/graphics/pokemon/sharpedo/mega/back.png similarity index 100% rename from graphics/pokemon/mega_sharpedo/back.png rename to graphics/pokemon/sharpedo/mega/back.png diff --git a/graphics/pokemon/mega_sharpedo/front.png b/graphics/pokemon/sharpedo/mega/front.png similarity index 100% rename from graphics/pokemon/mega_sharpedo/front.png rename to graphics/pokemon/sharpedo/mega/front.png diff --git a/graphics/pokemon/mega_sharpedo/icon.png b/graphics/pokemon/sharpedo/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_sharpedo/icon.png rename to graphics/pokemon/sharpedo/mega/icon.png diff --git a/graphics/pokemon/mega_sharpedo/normal.pal b/graphics/pokemon/sharpedo/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_sharpedo/normal.pal rename to graphics/pokemon/sharpedo/mega/normal.pal diff --git a/graphics/pokemon/mega_sharpedo/shiny.pal b/graphics/pokemon/sharpedo/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_sharpedo/shiny.pal rename to graphics/pokemon/sharpedo/mega/shiny.pal diff --git a/graphics/pokemon/shiinotic/footprint.png b/graphics/pokemon/shiinotic/footprint.png new file mode 100644 index 0000000000..b2db8ea721 Binary files /dev/null and b/graphics/pokemon/shiinotic/footprint.png differ diff --git a/graphics/pokemon/shinx/anim_front.png b/graphics/pokemon/shinx/anim_front.png index 33a28bf20f..16221a2a21 100644 Binary files a/graphics/pokemon/shinx/anim_front.png and b/graphics/pokemon/shinx/anim_front.png differ diff --git a/graphics/pokemon/shinx/anim_frontf.png b/graphics/pokemon/shinx/anim_frontf.png new file mode 100644 index 0000000000..226c6f3bda Binary files /dev/null and b/graphics/pokemon/shinx/anim_frontf.png differ diff --git a/graphics/pokemon/shinx/back.png b/graphics/pokemon/shinx/back.png index 24108fbf30..5d693fca8a 100644 Binary files a/graphics/pokemon/shinx/back.png and b/graphics/pokemon/shinx/back.png differ diff --git a/graphics/pokemon/shinx/backf.png b/graphics/pokemon/shinx/backf.png new file mode 100644 index 0000000000..24108fbf30 Binary files /dev/null and b/graphics/pokemon/shinx/backf.png differ diff --git a/graphics/pokemon/silicobra/footprint.png b/graphics/pokemon/silicobra/footprint.png new file mode 100644 index 0000000000..f167262559 Binary files /dev/null and b/graphics/pokemon/silicobra/footprint.png differ diff --git a/graphics/pokemon/silvally/footprint.png b/graphics/pokemon/silvally/footprint.png new file mode 100644 index 0000000000..b5542742f2 Binary files /dev/null and b/graphics/pokemon/silvally/footprint.png differ diff --git a/graphics/pokemon/sinistea/footprint.png b/graphics/pokemon/sinistea/footprint.png new file mode 100644 index 0000000000..dcea8100bd Binary files /dev/null and b/graphics/pokemon/sinistea/footprint.png differ diff --git a/graphics/pokemon/sirfetchd/footprint.png b/graphics/pokemon/sirfetchd/footprint.png new file mode 100644 index 0000000000..78a8ecb4f7 Binary files /dev/null and b/graphics/pokemon/sirfetchd/footprint.png differ diff --git a/graphics/pokemon/sizzlipede/footprint.png b/graphics/pokemon/sizzlipede/footprint.png new file mode 100644 index 0000000000..44b5823d23 Binary files /dev/null and b/graphics/pokemon/sizzlipede/footprint.png differ diff --git a/graphics/pokemon/skwovet/footprint.png b/graphics/pokemon/skwovet/footprint.png new file mode 100644 index 0000000000..d60ef0d6b6 Binary files /dev/null and b/graphics/pokemon/skwovet/footprint.png differ diff --git a/graphics/pokemon/sliggoo/hisuian/back.png b/graphics/pokemon/sliggoo/hisuian/back.png new file mode 100644 index 0000000000..ad4289b1b2 Binary files /dev/null and b/graphics/pokemon/sliggoo/hisuian/back.png differ diff --git a/graphics/pokemon/sliggoo/hisuian/front.png b/graphics/pokemon/sliggoo/hisuian/front.png new file mode 100644 index 0000000000..81322c4856 Binary files /dev/null and b/graphics/pokemon/sliggoo/hisuian/front.png differ diff --git a/graphics/pokemon/sliggoo/hisuian/icon.png b/graphics/pokemon/sliggoo/hisuian/icon.png new file mode 100644 index 0000000000..c66baae5a9 Binary files /dev/null and b/graphics/pokemon/sliggoo/hisuian/icon.png differ diff --git a/graphics/pokemon/sliggoo/hisuian/normal.pal b/graphics/pokemon/sliggoo/hisuian/normal.pal new file mode 100644 index 0000000000..5f3e5ae0cd --- /dev/null +++ b/graphics/pokemon/sliggoo/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +232 224 176 +128 96 112 +240 240 240 +216 192 208 +168 152 168 +8 8 8 +136 136 136 +72 152 80 +200 200 200 +64 64 64 +88 200 80 +176 176 176 +168 152 192 +64 56 88 +136 104 168 +104 96 104 diff --git a/graphics/pokemon/sliggoo/hisuian/shiny.pal b/graphics/pokemon/sliggoo/hisuian/shiny.pal new file mode 100644 index 0000000000..9cccd5d391 --- /dev/null +++ b/graphics/pokemon/sliggoo/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +232 224 176 +128 96 112 +240 240 240 +216 192 208 +168 152 168 +8 8 8 +120 104 56 +72 152 80 +200 176 88 +56 40 32 +88 200 80 +160 136 72 +168 152 192 +64 56 88 +136 104 168 +104 96 104 diff --git a/graphics/pokemon/mega_slowbro/back.png b/graphics/pokemon/slowbro/mega/back.png similarity index 100% rename from graphics/pokemon/mega_slowbro/back.png rename to graphics/pokemon/slowbro/mega/back.png diff --git a/graphics/pokemon/mega_slowbro/front.png b/graphics/pokemon/slowbro/mega/front.png similarity index 100% rename from graphics/pokemon/mega_slowbro/front.png rename to graphics/pokemon/slowbro/mega/front.png diff --git a/graphics/pokemon/slowbro/mega/icon.png b/graphics/pokemon/slowbro/mega/icon.png new file mode 100644 index 0000000000..826f0bccec Binary files /dev/null and b/graphics/pokemon/slowbro/mega/icon.png differ diff --git a/graphics/pokemon/mega_slowbro/normal.pal b/graphics/pokemon/slowbro/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_slowbro/normal.pal rename to graphics/pokemon/slowbro/mega/normal.pal diff --git a/graphics/pokemon/mega_slowbro/shiny.pal b/graphics/pokemon/slowbro/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_slowbro/shiny.pal rename to graphics/pokemon/slowbro/mega/shiny.pal diff --git a/graphics/pokemon/sneasel/hisuian/back.png b/graphics/pokemon/sneasel/hisuian/back.png new file mode 100644 index 0000000000..ea1be20c85 Binary files /dev/null and b/graphics/pokemon/sneasel/hisuian/back.png differ diff --git a/graphics/pokemon/sneasel/hisuian/front.png b/graphics/pokemon/sneasel/hisuian/front.png new file mode 100644 index 0000000000..75e3872b15 Binary files /dev/null and b/graphics/pokemon/sneasel/hisuian/front.png differ diff --git a/graphics/pokemon/sneasel/hisuian/icon.png b/graphics/pokemon/sneasel/hisuian/icon.png new file mode 100644 index 0000000000..bd9cae88b9 Binary files /dev/null and b/graphics/pokemon/sneasel/hisuian/icon.png differ diff --git a/graphics/pokemon/sneasel/hisuian/normal.pal b/graphics/pokemon/sneasel/hisuian/normal.pal new file mode 100644 index 0000000000..2e28acaaca --- /dev/null +++ b/graphics/pokemon/sneasel/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +120 88 176 +80 48 104 +160 120 216 +56 40 64 +152 152 160 +16 16 16 +216 216 224 +184 184 192 +128 96 160 +160 120 56 +232 192 48 +88 56 120 +240 240 248 +120 120 120 +232 56 64 diff --git a/graphics/pokemon/sneasel/hisuian/shiny.pal b/graphics/pokemon/sneasel/hisuian/shiny.pal new file mode 100644 index 0000000000..b57227c930 --- /dev/null +++ b/graphics/pokemon/sneasel/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 144 40 +168 72 16 +248 200 80 +32 24 32 +64 88 80 +16 16 16 +112 160 120 +88 128 104 +80 72 88 +64 112 224 +136 160 240 +48 40 48 +240 240 248 +120 120 120 +72 176 96 diff --git a/graphics/pokemon/sneasler/icon.png b/graphics/pokemon/sneasler/icon.png new file mode 100644 index 0000000000..4238b0e6a3 Binary files /dev/null and b/graphics/pokemon/sneasler/icon.png differ diff --git a/graphics/pokemon/snom/footprint.png b/graphics/pokemon/snom/footprint.png new file mode 100644 index 0000000000..077d667734 Binary files /dev/null and b/graphics/pokemon/snom/footprint.png differ diff --git a/graphics/pokemon/sobble/footprint.png b/graphics/pokemon/sobble/footprint.png new file mode 100644 index 0000000000..7cca4a4c55 Binary files /dev/null and b/graphics/pokemon/sobble/footprint.png differ diff --git a/graphics/pokemon/solgaleo/footprint.png b/graphics/pokemon/solgaleo/footprint.png new file mode 100644 index 0000000000..4ad6b85518 Binary files /dev/null and b/graphics/pokemon/solgaleo/footprint.png differ diff --git a/graphics/pokemon/spectrier/footprint.png b/graphics/pokemon/spectrier/footprint.png new file mode 100644 index 0000000000..9383b36a75 Binary files /dev/null and b/graphics/pokemon/spectrier/footprint.png differ diff --git a/graphics/pokemon/stakataka/footprint.png b/graphics/pokemon/stakataka/footprint.png new file mode 100644 index 0000000000..70757fc3f0 Binary files /dev/null and b/graphics/pokemon/stakataka/footprint.png differ diff --git a/graphics/pokemon/staraptor/anim_frontf.png b/graphics/pokemon/staraptor/anim_frontf.png new file mode 100644 index 0000000000..9bfd99e807 Binary files /dev/null and b/graphics/pokemon/staraptor/anim_frontf.png differ diff --git a/graphics/pokemon/staravia/anim_frontf.png b/graphics/pokemon/staravia/anim_frontf.png new file mode 100644 index 0000000000..1d4359a4d2 Binary files /dev/null and b/graphics/pokemon/staravia/anim_frontf.png differ diff --git a/graphics/pokemon/staravia/backf.png b/graphics/pokemon/staravia/backf.png new file mode 100644 index 0000000000..eab9fd834b Binary files /dev/null and b/graphics/pokemon/staravia/backf.png differ diff --git a/graphics/pokemon/starly/anim_frontf.png b/graphics/pokemon/starly/anim_frontf.png new file mode 100644 index 0000000000..f604a83871 Binary files /dev/null and b/graphics/pokemon/starly/anim_frontf.png differ diff --git a/graphics/pokemon/starly/backf.png b/graphics/pokemon/starly/backf.png new file mode 100644 index 0000000000..c65bf27b0e Binary files /dev/null and b/graphics/pokemon/starly/backf.png differ diff --git a/graphics/pokemon/mega_steelix/back.png b/graphics/pokemon/steelix/mega/back.png similarity index 100% rename from graphics/pokemon/mega_steelix/back.png rename to graphics/pokemon/steelix/mega/back.png diff --git a/graphics/pokemon/mega_steelix/front.png b/graphics/pokemon/steelix/mega/front.png similarity index 100% rename from graphics/pokemon/mega_steelix/front.png rename to graphics/pokemon/steelix/mega/front.png diff --git a/graphics/pokemon/mega_steelix/icon.png b/graphics/pokemon/steelix/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_steelix/icon.png rename to graphics/pokemon/steelix/mega/icon.png diff --git a/graphics/pokemon/mega_steelix/normal.pal b/graphics/pokemon/steelix/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_steelix/normal.pal rename to graphics/pokemon/steelix/mega/normal.pal diff --git a/graphics/pokemon/mega_steelix/shiny.pal b/graphics/pokemon/steelix/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_steelix/shiny.pal rename to graphics/pokemon/steelix/mega/shiny.pal diff --git a/graphics/pokemon/steenee/footprint.png b/graphics/pokemon/steenee/footprint.png new file mode 100644 index 0000000000..a699802b1d Binary files /dev/null and b/graphics/pokemon/steenee/footprint.png differ diff --git a/graphics/pokemon/stonjourner/footprint.png b/graphics/pokemon/stonjourner/footprint.png new file mode 100644 index 0000000000..15adc25514 Binary files /dev/null and b/graphics/pokemon/stonjourner/footprint.png differ diff --git a/graphics/pokemon/stufful/footprint.png b/graphics/pokemon/stufful/footprint.png new file mode 100644 index 0000000000..1e41dad790 Binary files /dev/null and b/graphics/pokemon/stufful/footprint.png differ diff --git a/graphics/pokemon/mega_swampert/back.png b/graphics/pokemon/swampert/mega/back.png similarity index 100% rename from graphics/pokemon/mega_swampert/back.png rename to graphics/pokemon/swampert/mega/back.png diff --git a/graphics/pokemon/mega_swampert/front.png b/graphics/pokemon/swampert/mega/front.png similarity index 100% rename from graphics/pokemon/mega_swampert/front.png rename to graphics/pokemon/swampert/mega/front.png diff --git a/graphics/pokemon/mega_swampert/icon.png b/graphics/pokemon/swampert/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_swampert/icon.png rename to graphics/pokemon/swampert/mega/icon.png diff --git a/graphics/pokemon/mega_swampert/normal.pal b/graphics/pokemon/swampert/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_swampert/normal.pal rename to graphics/pokemon/swampert/mega/normal.pal diff --git a/graphics/pokemon/mega_swampert/shiny.pal b/graphics/pokemon/swampert/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_swampert/shiny.pal rename to graphics/pokemon/swampert/mega/shiny.pal diff --git a/graphics/pokemon/tapu_bulu/anim_front.png b/graphics/pokemon/tapu_bulu/anim_front.png new file mode 100644 index 0000000000..e5f6355bbc Binary files /dev/null and b/graphics/pokemon/tapu_bulu/anim_front.png differ diff --git a/graphics/pokemon/tapu_bulu/footprint.png b/graphics/pokemon/tapu_bulu/footprint.png new file mode 100644 index 0000000000..73d94c7e58 Binary files /dev/null and b/graphics/pokemon/tapu_bulu/footprint.png differ diff --git a/graphics/pokemon/tapu_bulu/front.png b/graphics/pokemon/tapu_bulu/front.png index e5f6355bbc..ef0eb3357c 100644 Binary files a/graphics/pokemon/tapu_bulu/front.png and b/graphics/pokemon/tapu_bulu/front.png differ diff --git a/graphics/pokemon/tapu_fini/anim_front.png b/graphics/pokemon/tapu_fini/anim_front.png new file mode 100644 index 0000000000..ca583faab6 Binary files /dev/null and b/graphics/pokemon/tapu_fini/anim_front.png differ diff --git a/graphics/pokemon/tapu_fini/footprint.png b/graphics/pokemon/tapu_fini/footprint.png new file mode 100644 index 0000000000..5c9f78a241 Binary files /dev/null and b/graphics/pokemon/tapu_fini/footprint.png differ diff --git a/graphics/pokemon/tapu_fini/front.png b/graphics/pokemon/tapu_fini/front.png index ca583faab6..ccf8d39e9f 100644 Binary files a/graphics/pokemon/tapu_fini/front.png and b/graphics/pokemon/tapu_fini/front.png differ diff --git a/graphics/pokemon/tapu_koko/anim_front.png b/graphics/pokemon/tapu_koko/anim_front.png new file mode 100644 index 0000000000..f98c83b471 Binary files /dev/null and b/graphics/pokemon/tapu_koko/anim_front.png differ diff --git a/graphics/pokemon/tapu_koko/footprint.png b/graphics/pokemon/tapu_koko/footprint.png new file mode 100644 index 0000000000..a3357255cf Binary files /dev/null and b/graphics/pokemon/tapu_koko/footprint.png differ diff --git a/graphics/pokemon/tapu_koko/front.png b/graphics/pokemon/tapu_koko/front.png index f98c83b471..d6a5fd655a 100644 Binary files a/graphics/pokemon/tapu_koko/front.png and b/graphics/pokemon/tapu_koko/front.png differ diff --git a/graphics/pokemon/tapu_lele/anim_front.png b/graphics/pokemon/tapu_lele/anim_front.png new file mode 100644 index 0000000000..93a7038799 Binary files /dev/null and b/graphics/pokemon/tapu_lele/anim_front.png differ diff --git a/graphics/pokemon/tapu_lele/footprint.png b/graphics/pokemon/tapu_lele/footprint.png new file mode 100644 index 0000000000..e6058f4c0b Binary files /dev/null and b/graphics/pokemon/tapu_lele/footprint.png differ diff --git a/graphics/pokemon/tapu_lele/front.png b/graphics/pokemon/tapu_lele/front.png index 93a7038799..31f5d1c1ae 100644 Binary files a/graphics/pokemon/tapu_lele/front.png and b/graphics/pokemon/tapu_lele/front.png differ diff --git a/graphics/pokemon/thievul/footprint.png b/graphics/pokemon/thievul/footprint.png new file mode 100644 index 0000000000..530e57b35e Binary files /dev/null and b/graphics/pokemon/thievul/footprint.png differ diff --git a/graphics/pokemon/thwackey/footprint.png b/graphics/pokemon/thwackey/footprint.png new file mode 100644 index 0000000000..a39e31bcf5 Binary files /dev/null and b/graphics/pokemon/thwackey/footprint.png differ diff --git a/graphics/pokemon/togedemaru/footprint.png b/graphics/pokemon/togedemaru/footprint.png new file mode 100644 index 0000000000..980843406f Binary files /dev/null and b/graphics/pokemon/togedemaru/footprint.png differ diff --git a/graphics/pokemon/torracat/footprint.png b/graphics/pokemon/torracat/footprint.png new file mode 100644 index 0000000000..0849f9a91e Binary files /dev/null and b/graphics/pokemon/torracat/footprint.png differ diff --git a/graphics/pokemon/toucannon/footprint.png b/graphics/pokemon/toucannon/footprint.png new file mode 100644 index 0000000000..d85988dbc1 Binary files /dev/null and b/graphics/pokemon/toucannon/footprint.png differ diff --git a/graphics/pokemon/toxapex/footprint.png b/graphics/pokemon/toxapex/footprint.png new file mode 100644 index 0000000000..211e447c1b Binary files /dev/null and b/graphics/pokemon/toxapex/footprint.png differ diff --git a/graphics/pokemon/toxel/footprint.png b/graphics/pokemon/toxel/footprint.png new file mode 100644 index 0000000000..e89659880a Binary files /dev/null and b/graphics/pokemon/toxel/footprint.png differ diff --git a/graphics/pokemon/toxtricity/footprint.png b/graphics/pokemon/toxtricity/footprint.png new file mode 100644 index 0000000000..f9824a0885 Binary files /dev/null and b/graphics/pokemon/toxtricity/footprint.png differ diff --git a/graphics/pokemon/trumbeak/footprint.png b/graphics/pokemon/trumbeak/footprint.png new file mode 100644 index 0000000000..d31c0fc031 Binary files /dev/null and b/graphics/pokemon/trumbeak/footprint.png differ diff --git a/graphics/pokemon/tsareena/footprint.png b/graphics/pokemon/tsareena/footprint.png new file mode 100644 index 0000000000..4a26182627 Binary files /dev/null and b/graphics/pokemon/tsareena/footprint.png differ diff --git a/graphics/pokemon/turtonator/footprint.png b/graphics/pokemon/turtonator/footprint.png new file mode 100644 index 0000000000..ee747e804e Binary files /dev/null and b/graphics/pokemon/turtonator/footprint.png differ diff --git a/graphics/pokemon/type_null/footprint.png b/graphics/pokemon/type_null/footprint.png new file mode 100644 index 0000000000..45cac97c90 Binary files /dev/null and b/graphics/pokemon/type_null/footprint.png differ diff --git a/graphics/pokemon/typhlosion/hisuian/back.png b/graphics/pokemon/typhlosion/hisuian/back.png new file mode 100644 index 0000000000..be0255b326 Binary files /dev/null and b/graphics/pokemon/typhlosion/hisuian/back.png differ diff --git a/graphics/pokemon/typhlosion/hisuian/front.png b/graphics/pokemon/typhlosion/hisuian/front.png new file mode 100644 index 0000000000..58c7f9e417 Binary files /dev/null and b/graphics/pokemon/typhlosion/hisuian/front.png differ diff --git a/graphics/pokemon/typhlosion/hisuian/icon.png b/graphics/pokemon/typhlosion/hisuian/icon.png new file mode 100644 index 0000000000..c3e0474968 Binary files /dev/null and b/graphics/pokemon/typhlosion/hisuian/icon.png differ diff --git a/graphics/pokemon/typhlosion/hisuian/normal.pal b/graphics/pokemon/typhlosion/hisuian/normal.pal new file mode 100644 index 0000000000..cb03a42bce --- /dev/null +++ b/graphics/pokemon/typhlosion/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +240 88 160 +232 96 224 +176 56 152 +240 72 104 +56 48 96 +88 72 152 +16 16 80 +96 80 176 +136 128 80 +216 216 168 +16 16 16 +232 136 0 +248 248 248 +176 176 120 +80 64 48 diff --git a/graphics/pokemon/typhlosion/hisuian/shiny.pal b/graphics/pokemon/typhlosion/hisuian/shiny.pal new file mode 100644 index 0000000000..c4892102fb --- /dev/null +++ b/graphics/pokemon/typhlosion/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +240 88 160 +232 96 224 +176 56 152 +240 72 104 +40 64 96 +64 88 136 +8 32 88 +64 120 152 +136 128 80 +216 216 168 +16 16 16 +232 136 0 +248 248 248 +176 176 120 +80 64 48 diff --git a/graphics/pokemon/mega_tyranitar/back.png b/graphics/pokemon/tyranitar/mega/back.png similarity index 100% rename from graphics/pokemon/mega_tyranitar/back.png rename to graphics/pokemon/tyranitar/mega/back.png diff --git a/graphics/pokemon/mega_tyranitar/front.png b/graphics/pokemon/tyranitar/mega/front.png similarity index 100% rename from graphics/pokemon/mega_tyranitar/front.png rename to graphics/pokemon/tyranitar/mega/front.png diff --git a/graphics/pokemon/mega_tyranitar/icon.png b/graphics/pokemon/tyranitar/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_tyranitar/icon.png rename to graphics/pokemon/tyranitar/mega/icon.png diff --git a/graphics/pokemon/mega_tyranitar/normal.pal b/graphics/pokemon/tyranitar/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_tyranitar/normal.pal rename to graphics/pokemon/tyranitar/mega/normal.pal diff --git a/graphics/pokemon/mega_tyranitar/shiny.pal b/graphics/pokemon/tyranitar/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_tyranitar/shiny.pal rename to graphics/pokemon/tyranitar/mega/shiny.pal diff --git a/graphics/unknown/unknown_D437F8.bin b/graphics/pokemon/unused_garbage.bin similarity index 100% rename from graphics/unknown/unknown_D437F8.bin rename to graphics/pokemon/unused_garbage.bin diff --git a/graphics/pokemon/ursaluna/back.png b/graphics/pokemon/ursaluna/back.png new file mode 100644 index 0000000000..e221d873ef Binary files /dev/null and b/graphics/pokemon/ursaluna/back.png differ diff --git a/graphics/pokemon/ursaluna/front.png b/graphics/pokemon/ursaluna/front.png new file mode 100644 index 0000000000..954e6b8020 Binary files /dev/null and b/graphics/pokemon/ursaluna/front.png differ diff --git a/graphics/pokemon/ursaluna/icon.png b/graphics/pokemon/ursaluna/icon.png new file mode 100644 index 0000000000..8a84704072 Binary files /dev/null and b/graphics/pokemon/ursaluna/icon.png differ diff --git a/graphics/pokemon/ursaluna/normal.pal b/graphics/pokemon/ursaluna/normal.pal new file mode 100644 index 0000000000..91b0d2bb09 --- /dev/null +++ b/graphics/pokemon/ursaluna/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +56 32 32 +32 24 24 +96 64 56 +80 40 40 +72 64 48 +112 96 88 +152 136 128 +88 88 80 +176 176 176 +8 8 8 +184 144 40 +248 192 64 +248 248 248 +144 144 136 +0 0 0 diff --git a/graphics/pokemon/ursaluna/shiny.pal b/graphics/pokemon/ursaluna/shiny.pal new file mode 100644 index 0000000000..e22b15d0e9 --- /dev/null +++ b/graphics/pokemon/ursaluna/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +88 16 16 +48 8 0 +152 64 56 +120 32 32 +104 80 72 +160 128 112 +192 176 168 +56 48 48 +112 104 96 +8 8 8 +192 152 88 +248 248 200 +248 248 248 +80 72 72 +0 0 0 diff --git a/graphics/pokemon/urshifu/footprint.png b/graphics/pokemon/urshifu/footprint.png new file mode 100644 index 0000000000..bf4c5a6f6c Binary files /dev/null and b/graphics/pokemon/urshifu/footprint.png differ diff --git a/graphics/pokemon/mega_venusaur/back.png b/graphics/pokemon/venusaur/mega/back.png similarity index 100% rename from graphics/pokemon/mega_venusaur/back.png rename to graphics/pokemon/venusaur/mega/back.png diff --git a/graphics/pokemon/mega_venusaur/front.png b/graphics/pokemon/venusaur/mega/front.png similarity index 100% rename from graphics/pokemon/mega_venusaur/front.png rename to graphics/pokemon/venusaur/mega/front.png diff --git a/graphics/pokemon/mega_venusaur/icon.png b/graphics/pokemon/venusaur/mega/icon.png similarity index 100% rename from graphics/pokemon/mega_venusaur/icon.png rename to graphics/pokemon/venusaur/mega/icon.png diff --git a/graphics/pokemon/mega_venusaur/normal.pal b/graphics/pokemon/venusaur/mega/normal.pal similarity index 100% rename from graphics/pokemon/mega_venusaur/normal.pal rename to graphics/pokemon/venusaur/mega/normal.pal diff --git a/graphics/pokemon/mega_venusaur/shiny.pal b/graphics/pokemon/venusaur/mega/shiny.pal similarity index 100% rename from graphics/pokemon/mega_venusaur/shiny.pal rename to graphics/pokemon/venusaur/mega/shiny.pal diff --git a/graphics/pokemon/vikavolt/footprint.png b/graphics/pokemon/vikavolt/footprint.png new file mode 100644 index 0000000000..bc9bf41684 Binary files /dev/null and b/graphics/pokemon/vikavolt/footprint.png differ diff --git a/graphics/pokemon/voltorb/hisuian/back.png b/graphics/pokemon/voltorb/hisuian/back.png new file mode 100644 index 0000000000..74016e36f5 Binary files /dev/null and b/graphics/pokemon/voltorb/hisuian/back.png differ diff --git a/graphics/pokemon/voltorb/hisuian/front.png b/graphics/pokemon/voltorb/hisuian/front.png new file mode 100644 index 0000000000..12052e98d6 Binary files /dev/null and b/graphics/pokemon/voltorb/hisuian/front.png differ diff --git a/graphics/pokemon/voltorb/hisuian/icon.png b/graphics/pokemon/voltorb/hisuian/icon.png new file mode 100644 index 0000000000..2a35e4ec33 Binary files /dev/null and b/graphics/pokemon/voltorb/hisuian/icon.png differ diff --git a/graphics/pokemon/voltorb/hisuian/normal.pal b/graphics/pokemon/voltorb/hisuian/normal.pal new file mode 100644 index 0000000000..55a3a16027 --- /dev/null +++ b/graphics/pokemon/voltorb/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +120 32 0 +192 72 24 +232 104 0 +216 88 0 +248 144 56 +248 176 120 +216 200 200 +216 168 96 +248 248 248 +104 96 88 +184 112 40 +240 208 128 +104 96 88 +0 0 0 diff --git a/graphics/pokemon/voltorb/hisuian/shiny.pal b/graphics/pokemon/voltorb/hisuian/shiny.pal new file mode 100644 index 0000000000..6b912371e8 --- /dev/null +++ b/graphics/pokemon/voltorb/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +32 32 32 +64 56 56 +88 88 88 +72 72 72 +120 112 120 +160 152 160 +200 200 208 +208 168 80 +248 248 248 +96 96 104 +160 120 48 +232 208 136 +104 96 88 +0 0 0 diff --git a/graphics/pokemon/alolan_vulpix/back.png b/graphics/pokemon/vulpix/alolan/back.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_vulpix/back.png rename to graphics/pokemon/vulpix/alolan/back.png diff --git a/graphics/pokemon/alolan_vulpix/front.png b/graphics/pokemon/vulpix/alolan/front.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_vulpix/front.png rename to graphics/pokemon/vulpix/alolan/front.png diff --git a/graphics/pokemon/alolan_vulpix/icon.png b/graphics/pokemon/vulpix/alolan/icon.png old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_vulpix/icon.png rename to graphics/pokemon/vulpix/alolan/icon.png diff --git a/graphics/pokemon/alolan_vulpix/normal.pal b/graphics/pokemon/vulpix/alolan/normal.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_vulpix/normal.pal rename to graphics/pokemon/vulpix/alolan/normal.pal diff --git a/graphics/pokemon/alolan_vulpix/shiny.pal b/graphics/pokemon/vulpix/alolan/shiny.pal old mode 100755 new mode 100644 similarity index 100% rename from graphics/pokemon/alolan_vulpix/shiny.pal rename to graphics/pokemon/vulpix/alolan/shiny.pal diff --git a/graphics/pokemon/wimpod/footprint.png b/graphics/pokemon/wimpod/footprint.png new file mode 100644 index 0000000000..9e61a65303 Binary files /dev/null and b/graphics/pokemon/wimpod/footprint.png differ diff --git a/graphics/pokemon/wishiwashi/footprint.png b/graphics/pokemon/wishiwashi/footprint.png new file mode 100644 index 0000000000..2d3e0d1340 Binary files /dev/null and b/graphics/pokemon/wishiwashi/footprint.png differ diff --git a/graphics/pokemon/wooloo/footprint.png b/graphics/pokemon/wooloo/footprint.png new file mode 100644 index 0000000000..7c44b00b02 Binary files /dev/null and b/graphics/pokemon/wooloo/footprint.png differ diff --git a/graphics/pokemon/wormadam/icon.png b/graphics/pokemon/wormadam/icon.png index 7aa1d61d8b..eb622fca23 100644 Binary files a/graphics/pokemon/wormadam/icon.png and b/graphics/pokemon/wormadam/icon.png differ diff --git a/graphics/pokemon/wyrdeer/icon.png b/graphics/pokemon/wyrdeer/icon.png new file mode 100644 index 0000000000..905dfe083c Binary files /dev/null and b/graphics/pokemon/wyrdeer/icon.png differ diff --git a/graphics/pokemon/xurkitree/footprint.png b/graphics/pokemon/xurkitree/footprint.png new file mode 100644 index 0000000000..09228b878d Binary files /dev/null and b/graphics/pokemon/xurkitree/footprint.png differ diff --git a/graphics/pokemon/yamper/footprint.png b/graphics/pokemon/yamper/footprint.png new file mode 100644 index 0000000000..4324de5e4f Binary files /dev/null and b/graphics/pokemon/yamper/footprint.png differ diff --git a/graphics/pokemon/yungoos/footprint.png b/graphics/pokemon/yungoos/footprint.png new file mode 100644 index 0000000000..bf93269ca9 Binary files /dev/null and b/graphics/pokemon/yungoos/footprint.png differ diff --git a/graphics/pokemon/zacian/footprint.png b/graphics/pokemon/zacian/footprint.png new file mode 100644 index 0000000000..eeb3f0ca68 Binary files /dev/null and b/graphics/pokemon/zacian/footprint.png differ diff --git a/graphics/pokemon/zamazenta/footprint.png b/graphics/pokemon/zamazenta/footprint.png new file mode 100644 index 0000000000..242a33ad68 Binary files /dev/null and b/graphics/pokemon/zamazenta/footprint.png differ diff --git a/graphics/pokemon/zapdos/galarian/icon.png b/graphics/pokemon/zapdos/galarian/icon.png index df9bb29b5c..2d9f031ffd 100644 Binary files a/graphics/pokemon/zapdos/galarian/icon.png and b/graphics/pokemon/zapdos/galarian/icon.png differ diff --git a/graphics/pokemon/zarude/footprint.png b/graphics/pokemon/zarude/footprint.png new file mode 100644 index 0000000000..3e1c2c2fdf Binary files /dev/null and b/graphics/pokemon/zarude/footprint.png differ diff --git a/graphics/pokemon/zeraora/footprint.png b/graphics/pokemon/zeraora/footprint.png new file mode 100644 index 0000000000..3d73d15e40 Binary files /dev/null and b/graphics/pokemon/zeraora/footprint.png differ diff --git a/graphics/pokemon/zoroark/hisuian/back.png b/graphics/pokemon/zoroark/hisuian/back.png new file mode 100644 index 0000000000..8a252b3056 Binary files /dev/null and b/graphics/pokemon/zoroark/hisuian/back.png differ diff --git a/graphics/pokemon/zoroark/hisuian/front.png b/graphics/pokemon/zoroark/hisuian/front.png new file mode 100644 index 0000000000..bf4e40c15f Binary files /dev/null and b/graphics/pokemon/zoroark/hisuian/front.png differ diff --git a/graphics/pokemon/zoroark/hisuian/icon.png b/graphics/pokemon/zoroark/hisuian/icon.png new file mode 100644 index 0000000000..6c4f6faf1b Binary files /dev/null and b/graphics/pokemon/zoroark/hisuian/icon.png differ diff --git a/graphics/pokemon/zoroark/hisuian/normal.pal b/graphics/pokemon/zoroark/hisuian/normal.pal new file mode 100644 index 0000000000..16e1aed003 --- /dev/null +++ b/graphics/pokemon/zoroark/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +144 24 32 +96 88 96 +216 88 80 +248 248 248 +224 144 144 +16 16 16 +192 56 80 +144 136 144 +192 176 184 +56 56 56 +208 208 208 +88 64 88 +176 112 112 +184 192 184 +240 232 32 diff --git a/graphics/pokemon/zoroark/hisuian/shiny.pal b/graphics/pokemon/zoroark/hisuian/shiny.pal new file mode 100644 index 0000000000..5b3e2797a5 --- /dev/null +++ b/graphics/pokemon/zoroark/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +96 48 120 +96 88 96 +176 112 208 +248 248 248 +208 144 224 +16 16 16 +144 80 168 +144 136 144 +192 176 184 +56 48 56 +208 208 208 +88 64 88 +176 104 184 +136 128 136 +240 232 32 diff --git a/graphics/pokemon/zorua/hisuian/back.png b/graphics/pokemon/zorua/hisuian/back.png new file mode 100644 index 0000000000..1268b09e0b Binary files /dev/null and b/graphics/pokemon/zorua/hisuian/back.png differ diff --git a/graphics/pokemon/zorua/hisuian/front.png b/graphics/pokemon/zorua/hisuian/front.png new file mode 100644 index 0000000000..68e861aff8 Binary files /dev/null and b/graphics/pokemon/zorua/hisuian/front.png differ diff --git a/graphics/pokemon/zorua/hisuian/icon.png b/graphics/pokemon/zorua/hisuian/icon.png new file mode 100644 index 0000000000..17f9229a2f Binary files /dev/null and b/graphics/pokemon/zorua/hisuian/icon.png differ diff --git a/graphics/pokemon/zorua/hisuian/normal.pal b/graphics/pokemon/zorua/hisuian/normal.pal new file mode 100644 index 0000000000..98c4a92283 --- /dev/null +++ b/graphics/pokemon/zorua/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +112 144 184 +144 24 32 +216 88 80 +224 144 144 +96 88 96 +248 248 248 +16 16 16 +192 176 184 +56 56 56 +184 192 184 +88 64 88 +144 136 144 +192 56 80 +248 168 24 +216 120 0 +144 136 144 diff --git a/graphics/pokemon/zorua/hisuian/shiny.pal b/graphics/pokemon/zorua/hisuian/shiny.pal new file mode 100644 index 0000000000..b88eac1a80 --- /dev/null +++ b/graphics/pokemon/zorua/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +112 144 184 +24 80 120 +64 152 224 +144 216 224 +96 88 96 +248 248 248 +16 16 16 +192 176 184 +56 48 56 +136 128 136 +88 64 88 +104 96 104 +48 120 168 +248 168 24 +216 120 0 +144 136 144 diff --git a/graphics/pokemon_storage/close_box_button.bin b/graphics/pokemon_storage/close_box_button.bin new file mode 100755 index 0000000000..8b130a4818 Binary files /dev/null and b/graphics/pokemon_storage/close_box_button.bin differ diff --git a/graphics/pokemon_storage/party_slot_empty.bin b/graphics/pokemon_storage/party_slot_empty.bin new file mode 100755 index 0000000000..991c232f73 Binary files /dev/null and b/graphics/pokemon_storage/party_slot_empty.bin differ diff --git a/graphics/pokemon_storage/party_slot_filled.bin b/graphics/pokemon_storage/party_slot_filled.bin new file mode 100755 index 0000000000..c0b93bf145 Binary files /dev/null and b/graphics/pokemon_storage/party_slot_filled.bin differ diff --git a/graphics/pokemon_storage/pkmn_data.bin b/graphics/pokemon_storage/pkmn_data.bin new file mode 100755 index 0000000000..3336797aac Binary files /dev/null and b/graphics/pokemon_storage/pkmn_data.bin differ diff --git a/graphics/pokemon_storage/unknown.pal b/graphics/pokemon_storage/text_windows.pal similarity index 100% rename from graphics/pokemon_storage/unknown.pal rename to graphics/pokemon_storage/text_windows.pal diff --git a/graphics/pokenav/862323C.bin b/graphics/pokenav/condition/graph_data.bin similarity index 100% rename from graphics/pokenav/862323C.bin rename to graphics/pokenav/condition/graph_data.bin diff --git a/graphics/pokenav/8623228.png b/graphics/pokenav/condition/graph_data.png similarity index 100% rename from graphics/pokenav/8623228.png rename to graphics/pokenav/condition/graph_data.png diff --git a/graphics/pokenav/8623338.pal b/graphics/pokenav/condition/mon_markings.pal similarity index 100% rename from graphics/pokenav/8623338.pal rename to graphics/pokenav/condition/mon_markings.pal diff --git a/graphics/pokenav/condition_search2.bin b/graphics/pokenav/condition/search_results.bin similarity index 100% rename from graphics/pokenav/condition_search2.bin rename to graphics/pokenav/condition/search_results.bin diff --git a/graphics/pokenav/condition_search2.png b/graphics/pokenav/condition/search_results.png similarity index 100% rename from graphics/pokenav/condition_search2.png rename to graphics/pokenav/condition/search_results.png diff --git a/graphics/pokenav/8623570.pal b/graphics/pokenav/condition/search_results_list.pal similarity index 100% rename from graphics/pokenav/8623570.pal rename to graphics/pokenav/condition/search_results_list.pal diff --git a/graphics/pokenav/icon2_unused.png b/graphics/pokenav/icon2_unused.png deleted file mode 100644 index c32a9b9be9..0000000000 Binary files a/graphics/pokenav/icon2_unused.png and /dev/null differ diff --git a/graphics/pokenav/arrows_matchcall.png b/graphics/pokenav/list_arrows.png similarity index 100% rename from graphics/pokenav/arrows_matchcall.png rename to graphics/pokenav/list_arrows.png diff --git a/graphics/pokenav/86226E0.pal b/graphics/pokenav/match_call/call_window.pal similarity index 100% rename from graphics/pokenav/86226E0.pal rename to graphics/pokenav/match_call/call_window.pal diff --git a/graphics/pokenav/8622700.pal b/graphics/pokenav/match_call/list_window.pal similarity index 100% rename from graphics/pokenav/8622700.pal rename to graphics/pokenav/match_call/list_window.pal diff --git a/graphics/pokenav/icon.png b/graphics/pokenav/match_call/nav_icon.png similarity index 100% rename from graphics/pokenav/icon.png rename to graphics/pokenav/match_call/nav_icon.png diff --git a/graphics/pokenav/arrow2.png b/graphics/pokenav/match_call/options_cursor.png similarity index 100% rename from graphics/pokenav/arrow2.png rename to graphics/pokenav/match_call/options_cursor.png diff --git a/graphics/pokenav/8622720.pal b/graphics/pokenav/match_call/pokeball.pal similarity index 100% rename from graphics/pokenav/8622720.pal rename to graphics/pokenav/match_call/pokeball.pal diff --git a/graphics/pokenav/pokeball_matchcall.png b/graphics/pokenav/match_call/pokeball.png similarity index 100% rename from graphics/pokenav/pokeball_matchcall.png rename to graphics/pokenav/match_call/pokeball.png diff --git a/graphics/pokenav/ui_matchcall.bin b/graphics/pokenav/match_call/ui.bin similarity index 100% rename from graphics/pokenav/ui_matchcall.bin rename to graphics/pokenav/match_call/ui.bin diff --git a/graphics/pokenav/ui_matchcall.png b/graphics/pokenav/match_call/ui.png similarity index 100% rename from graphics/pokenav/ui_matchcall.png rename to graphics/pokenav/match_call/ui.png diff --git a/graphics/pokenav/match_call_window.png b/graphics/pokenav/match_call/window.png similarity index 100% rename from graphics/pokenav/match_call_window.png rename to graphics/pokenav/match_call/window.png diff --git a/graphics/pokenav/icon2.png b/graphics/pokenav/nav_icon.png similarity index 100% rename from graphics/pokenav/icon2.png rename to graphics/pokenav/nav_icon.png diff --git a/graphics/pokenav/pokeball_matchcall.pal b/graphics/pokenav/pokeball_matchcall.pal deleted file mode 100644 index 25baec5176..0000000000 --- a/graphics/pokenav/pokeball_matchcall.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -0 197 0 -246 197 123 -255 255 255 -106 115 123 -0 0 0 -189 106 65 -49 65 74 -255 222 156 -180 131 82 -189 139 106 -197 197 197 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -255 74 16 -0 197 0 -246 197 123 -255 255 255 -106 115 123 -0 0 0 -189 106 65 -49 65 74 -255 222 156 -180 131 82 -189 139 106 -197 197 197 -197 197 197 -0 0 0 -0 0 0 -0 0 0 -189 106 65 diff --git a/graphics/pokenav/brendan_icon.png b/graphics/pokenav/region_map/brendan_icon.png similarity index 100% rename from graphics/pokenav/brendan_icon.png rename to graphics/pokenav/region_map/brendan_icon.png diff --git a/graphics/pokenav/cursor.pal b/graphics/pokenav/region_map/cursor.pal similarity index 100% rename from graphics/pokenav/cursor.pal rename to graphics/pokenav/region_map/cursor.pal diff --git a/graphics/pokenav/cursor_large.png b/graphics/pokenav/region_map/cursor_large.png similarity index 100% rename from graphics/pokenav/cursor_large.png rename to graphics/pokenav/region_map/cursor_large.png diff --git a/graphics/pokenav/cursor_small.png b/graphics/pokenav/region_map/cursor_small.png similarity index 100% rename from graphics/pokenav/cursor_small.png rename to graphics/pokenav/region_map/cursor_small.png diff --git a/graphics/pokenav/fly_target_icons.png b/graphics/pokenav/region_map/fly_target_icons.png similarity index 100% rename from graphics/pokenav/fly_target_icons.png rename to graphics/pokenav/region_map/fly_target_icons.png diff --git a/graphics/pokenav/map_frame.bin b/graphics/pokenav/region_map/frame.bin similarity index 100% rename from graphics/pokenav/map_frame.bin rename to graphics/pokenav/region_map/frame.bin diff --git a/graphics/pokenav/map_frame.png b/graphics/pokenav/region_map/frame.png similarity index 100% rename from graphics/pokenav/map_frame.png rename to graphics/pokenav/region_map/frame.png diff --git a/graphics/pokenav/region_map_info_window.pal b/graphics/pokenav/region_map/info_window.pal similarity index 100% rename from graphics/pokenav/region_map_info_window.pal rename to graphics/pokenav/region_map/info_window.pal diff --git a/graphics/pokenav/may_icon.png b/graphics/pokenav/region_map/may_icon.png similarity index 100% rename from graphics/pokenav/may_icon.png rename to graphics/pokenav/region_map/may_icon.png diff --git a/graphics/misc/rotating_gate_1.png b/graphics/rotating_gates/l1.png similarity index 100% rename from graphics/misc/rotating_gate_1.png rename to graphics/rotating_gates/l1.png diff --git a/graphics/misc/rotating_gate_2.png b/graphics/rotating_gates/l2.png similarity index 100% rename from graphics/misc/rotating_gate_2.png rename to graphics/rotating_gates/l2.png diff --git a/graphics/misc/rotating_gate_3.png b/graphics/rotating_gates/l3.png similarity index 100% rename from graphics/misc/rotating_gate_3.png rename to graphics/rotating_gates/l3.png diff --git a/graphics/misc/rotating_gate_4.png b/graphics/rotating_gates/l4.png similarity index 100% rename from graphics/misc/rotating_gate_4.png rename to graphics/rotating_gates/l4.png diff --git a/graphics/misc/rotating_gate_5.png b/graphics/rotating_gates/t1.png similarity index 100% rename from graphics/misc/rotating_gate_5.png rename to graphics/rotating_gates/t1.png diff --git a/graphics/misc/rotating_gate_6.png b/graphics/rotating_gates/t2.png similarity index 100% rename from graphics/misc/rotating_gate_6.png rename to graphics/rotating_gates/t2.png diff --git a/graphics/misc/rotating_gate_7.png b/graphics/rotating_gates/t3.png similarity index 100% rename from graphics/misc/rotating_gate_7.png rename to graphics/rotating_gates/t3.png diff --git a/graphics/misc/rotating_gate_8.png b/graphics/rotating_gates/t4.png similarity index 100% rename from graphics/misc/rotating_gate_8.png rename to graphics/rotating_gates/t4.png diff --git a/graphics/interface/mart_frame.bin b/graphics/shop/menu.bin similarity index 100% rename from graphics/interface/mart_frame.bin rename to graphics/shop/menu.bin diff --git a/graphics/interface/mart_frame.png b/graphics/shop/menu.png similarity index 100% rename from graphics/interface/mart_frame.png rename to graphics/shop/menu.png diff --git a/graphics/interface/money.png b/graphics/shop/money.png similarity index 100% rename from graphics/interface/money.png rename to graphics/shop/money.png diff --git a/graphics/slot_machine/85A8524.bin b/graphics/slot_machine/85A8524.bin deleted file mode 100644 index 0325642780..0000000000 Binary files a/graphics/slot_machine/85A8524.bin and /dev/null differ diff --git a/graphics/misc/birch_bag_map.bin b/graphics/starter_choose/birch_bag.bin similarity index 100% rename from graphics/misc/birch_bag_map.bin rename to graphics/starter_choose/birch_bag.bin diff --git a/graphics/misc/birch_bag.png b/graphics/starter_choose/birch_bag.png similarity index 100% rename from graphics/misc/birch_bag.png rename to graphics/starter_choose/birch_bag.png diff --git a/graphics/misc/birch_grass_map.bin b/graphics/starter_choose/birch_grass.bin similarity index 100% rename from graphics/misc/birch_grass_map.bin rename to graphics/starter_choose/birch_grass.bin diff --git a/graphics/misc/birch_grass.png b/graphics/starter_choose/birch_grass.png similarity index 100% rename from graphics/misc/birch_grass.png rename to graphics/starter_choose/birch_grass.png diff --git a/graphics/misc/pokeball_selection.png b/graphics/starter_choose/pokeball_selection.png similarity index 100% rename from graphics/misc/pokeball_selection.png rename to graphics/starter_choose/pokeball_selection.png diff --git a/graphics/misc/starter_circle.png b/graphics/starter_choose/starter_circle.png similarity index 100% rename from graphics/misc/starter_circle.png rename to graphics/starter_choose/starter_circle.png diff --git a/graphics/interface/summary_a_button.png b/graphics/summary_screen/a_button.png similarity index 100% rename from graphics/interface/summary_a_button.png rename to graphics/summary_screen/a_button.png diff --git a/graphics/interface/summary_b_button.png b/graphics/summary_screen/b_button.png similarity index 100% rename from graphics/interface/summary_b_button.png rename to graphics/summary_screen/b_button.png diff --git a/graphics/interface/powacc_tilemap.bin b/graphics/summary_screen/effect_battle.bin similarity index 100% rename from graphics/interface/powacc_tilemap.bin rename to graphics/summary_screen/effect_battle.bin diff --git a/graphics/interface/summary.bin b/graphics/summary_screen/effect_cancel.bin similarity index 100% rename from graphics/interface/summary.bin rename to graphics/summary_screen/effect_cancel.bin diff --git a/graphics/interface/appealjam_tilemap.bin b/graphics/summary_screen/effect_contest.bin similarity index 100% rename from graphics/interface/appealjam_tilemap.bin rename to graphics/summary_screen/effect_contest.bin diff --git a/graphics/interface/summary_markings.pal b/graphics/summary_screen/markings.pal similarity index 100% rename from graphics/interface/summary_markings.pal rename to graphics/summary_screen/markings.pal diff --git a/graphics/interface/summary_frames.png b/graphics/summary_screen/move_select.png similarity index 100% rename from graphics/interface/summary_frames.png rename to graphics/summary_screen/move_select.png diff --git a/graphics/interface/status_tilemap2.bin b/graphics/summary_screen/page_battle_moves.bin similarity index 100% rename from graphics/interface/status_tilemap2.bin rename to graphics/summary_screen/page_battle_moves.bin diff --git a/graphics/interface/status_tilemap3.bin b/graphics/summary_screen/page_contest_moves.bin similarity index 100% rename from graphics/interface/status_tilemap3.bin rename to graphics/summary_screen/page_contest_moves.bin diff --git a/graphics/interface/status_screen.bin b/graphics/summary_screen/page_info.bin similarity index 100% rename from graphics/interface/status_screen.bin rename to graphics/summary_screen/page_info.bin diff --git a/graphics/interface/status_tilemap0.bin b/graphics/summary_screen/page_info_egg.bin similarity index 100% rename from graphics/interface/status_tilemap0.bin rename to graphics/summary_screen/page_info_egg.bin diff --git a/graphics/interface/status_tilemap1.bin b/graphics/summary_screen/page_skills.bin similarity index 100% rename from graphics/interface/status_tilemap1.bin rename to graphics/summary_screen/page_skills.bin diff --git a/graphics/interface/status_tilemap.bin b/graphics/summary_screen/status_tilemap.bin similarity index 100% rename from graphics/interface/status_tilemap.bin rename to graphics/summary_screen/status_tilemap.bin diff --git a/graphics/interface/status_screen.pal b/graphics/summary_screen/tiles.pal similarity index 100% rename from graphics/interface/status_screen.pal rename to graphics/summary_screen/tiles.pal diff --git a/graphics/interface/status_screen.png b/graphics/summary_screen/tiles.png similarity index 100% rename from graphics/interface/status_screen.png rename to graphics/summary_screen/tiles.png diff --git a/graphics/title_screen/title_screen1.bin b/graphics/title_screen/clouds.bin similarity index 100% rename from graphics/title_screen/title_screen1.bin rename to graphics/title_screen/clouds.bin diff --git a/graphics/title_screen/title_screen2.bin b/graphics/title_screen/pokemon_logo.bin similarity index 100% rename from graphics/title_screen/title_screen2.bin rename to graphics/title_screen/pokemon_logo.bin diff --git a/graphics/title_screen/unk_853EF78.pal b/graphics/title_screen/unused.pal similarity index 100% rename from graphics/title_screen/unk_853EF78.pal rename to graphics/title_screen/unused.pal diff --git a/graphics/link/gba.png b/graphics/trade/gba.png similarity index 100% rename from graphics/link/gba.png rename to graphics/trade/gba.png diff --git a/graphics/link/gba_pal2.pal b/graphics/trade/gba_pal2.pal similarity index 100% rename from graphics/link/gba_pal2.pal rename to graphics/trade/gba_pal2.pal diff --git a/graphics/trade/unknown_DDCF04.bin b/graphics/trade/menu.bin similarity index 100% rename from graphics/trade/unknown_DDCF04.bin rename to graphics/trade/menu.bin diff --git a/graphics/unused/unused_DDCEE4.bin b/graphics/trade/unused.bin similarity index 100% rename from graphics/unused/unused_DDCEE4.bin rename to graphics/trade/unused.bin diff --git a/graphics/misc/trainer_hill_ereader.pal b/graphics/trainer_hill/ereader.pal similarity index 100% rename from graphics/misc/trainer_hill_ereader.pal rename to graphics/trainer_hill/ereader.pal diff --git a/graphics/trainer_hill/maps_expert/floor_0/collision.bin b/graphics/trainer_hill/maps_expert/floor_0/collision.bin new file mode 100755 index 0000000000..ca6e4ca28b Binary files /dev/null and b/graphics/trainer_hill/maps_expert/floor_0/collision.bin differ diff --git a/graphics/trainer_hill/maps_expert/floor_0/metatiles.bin b/graphics/trainer_hill/maps_expert/floor_0/metatiles.bin new file mode 100755 index 0000000000..c7a43d4c6a Binary files /dev/null and b/graphics/trainer_hill/maps_expert/floor_0/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_expert/floor_1/collision.bin b/graphics/trainer_hill/maps_expert/floor_1/collision.bin new file mode 100755 index 0000000000..ef58515000 Binary files /dev/null and b/graphics/trainer_hill/maps_expert/floor_1/collision.bin differ diff --git a/graphics/trainer_hill/maps_expert/floor_1/metatiles.bin b/graphics/trainer_hill/maps_expert/floor_1/metatiles.bin new file mode 100755 index 0000000000..a89a14c69e Binary files /dev/null and b/graphics/trainer_hill/maps_expert/floor_1/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_expert/floor_2/collision.bin b/graphics/trainer_hill/maps_expert/floor_2/collision.bin new file mode 100755 index 0000000000..891a7f2c1d Binary files /dev/null and b/graphics/trainer_hill/maps_expert/floor_2/collision.bin differ diff --git a/graphics/trainer_hill/maps_expert/floor_2/metatiles.bin b/graphics/trainer_hill/maps_expert/floor_2/metatiles.bin new file mode 100755 index 0000000000..7164f059d1 Binary files /dev/null and b/graphics/trainer_hill/maps_expert/floor_2/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_expert/floor_3/collision.bin b/graphics/trainer_hill/maps_expert/floor_3/collision.bin new file mode 100755 index 0000000000..3d25428f15 Binary files /dev/null and b/graphics/trainer_hill/maps_expert/floor_3/collision.bin differ diff --git a/graphics/trainer_hill/maps_expert/floor_3/metatiles.bin b/graphics/trainer_hill/maps_expert/floor_3/metatiles.bin new file mode 100755 index 0000000000..f2200b7135 Binary files /dev/null and b/graphics/trainer_hill/maps_expert/floor_3/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_jp/floor_0/collision.bin b/graphics/trainer_hill/maps_jp/floor_0/collision.bin new file mode 100755 index 0000000000..817f4f54ca Binary files /dev/null and b/graphics/trainer_hill/maps_jp/floor_0/collision.bin differ diff --git a/graphics/trainer_hill/maps_jp/floor_0/metatiles.bin b/graphics/trainer_hill/maps_jp/floor_0/metatiles.bin new file mode 100755 index 0000000000..8d1787efdf Binary files /dev/null and b/graphics/trainer_hill/maps_jp/floor_0/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_jp/floor_1/collision.bin b/graphics/trainer_hill/maps_jp/floor_1/collision.bin new file mode 100755 index 0000000000..58f80b49bb Binary files /dev/null and b/graphics/trainer_hill/maps_jp/floor_1/collision.bin differ diff --git a/graphics/trainer_hill/maps_jp/floor_1/metatiles.bin b/graphics/trainer_hill/maps_jp/floor_1/metatiles.bin new file mode 100755 index 0000000000..9517237925 Binary files /dev/null and b/graphics/trainer_hill/maps_jp/floor_1/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_normal/floor_0/collision.bin b/graphics/trainer_hill/maps_normal/floor_0/collision.bin new file mode 100755 index 0000000000..80213aaaeb Binary files /dev/null and b/graphics/trainer_hill/maps_normal/floor_0/collision.bin differ diff --git a/graphics/trainer_hill/maps_normal/floor_0/metatiles.bin b/graphics/trainer_hill/maps_normal/floor_0/metatiles.bin new file mode 100755 index 0000000000..658a5ace61 Binary files /dev/null and b/graphics/trainer_hill/maps_normal/floor_0/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_normal/floor_1/collision.bin b/graphics/trainer_hill/maps_normal/floor_1/collision.bin new file mode 100755 index 0000000000..fb3f6aec00 Binary files /dev/null and b/graphics/trainer_hill/maps_normal/floor_1/collision.bin differ diff --git a/graphics/trainer_hill/maps_normal/floor_1/metatiles.bin b/graphics/trainer_hill/maps_normal/floor_1/metatiles.bin new file mode 100755 index 0000000000..52af9cfdcb Binary files /dev/null and b/graphics/trainer_hill/maps_normal/floor_1/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_normal/floor_2/collision.bin b/graphics/trainer_hill/maps_normal/floor_2/collision.bin new file mode 100755 index 0000000000..b3ccacdd4c Binary files /dev/null and b/graphics/trainer_hill/maps_normal/floor_2/collision.bin differ diff --git a/graphics/trainer_hill/maps_normal/floor_2/metatiles.bin b/graphics/trainer_hill/maps_normal/floor_2/metatiles.bin new file mode 100755 index 0000000000..bf2b52c32d Binary files /dev/null and b/graphics/trainer_hill/maps_normal/floor_2/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_normal/floor_3/collision.bin b/graphics/trainer_hill/maps_normal/floor_3/collision.bin new file mode 100755 index 0000000000..f4c47254c5 Binary files /dev/null and b/graphics/trainer_hill/maps_normal/floor_3/collision.bin differ diff --git a/graphics/trainer_hill/maps_normal/floor_3/metatiles.bin b/graphics/trainer_hill/maps_normal/floor_3/metatiles.bin new file mode 100755 index 0000000000..f81c9ef4ec Binary files /dev/null and b/graphics/trainer_hill/maps_normal/floor_3/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_unique/floor_0/collision.bin b/graphics/trainer_hill/maps_unique/floor_0/collision.bin new file mode 100755 index 0000000000..e4a3b5a15e Binary files /dev/null and b/graphics/trainer_hill/maps_unique/floor_0/collision.bin differ diff --git a/graphics/trainer_hill/maps_unique/floor_0/metatiles.bin b/graphics/trainer_hill/maps_unique/floor_0/metatiles.bin new file mode 100755 index 0000000000..ab592413fe Binary files /dev/null and b/graphics/trainer_hill/maps_unique/floor_0/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_unique/floor_1/collision.bin b/graphics/trainer_hill/maps_unique/floor_1/collision.bin new file mode 100755 index 0000000000..00c559422f Binary files /dev/null and b/graphics/trainer_hill/maps_unique/floor_1/collision.bin differ diff --git a/graphics/trainer_hill/maps_unique/floor_1/metatiles.bin b/graphics/trainer_hill/maps_unique/floor_1/metatiles.bin new file mode 100755 index 0000000000..43e94bb094 Binary files /dev/null and b/graphics/trainer_hill/maps_unique/floor_1/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_unique/floor_2/collision.bin b/graphics/trainer_hill/maps_unique/floor_2/collision.bin new file mode 100755 index 0000000000..ada48a189d Binary files /dev/null and b/graphics/trainer_hill/maps_unique/floor_2/collision.bin differ diff --git a/graphics/trainer_hill/maps_unique/floor_2/metatiles.bin b/graphics/trainer_hill/maps_unique/floor_2/metatiles.bin new file mode 100755 index 0000000000..9b9057e150 Binary files /dev/null and b/graphics/trainer_hill/maps_unique/floor_2/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_unique/floor_3/collision.bin b/graphics/trainer_hill/maps_unique/floor_3/collision.bin new file mode 100755 index 0000000000..e234fbe0c6 Binary files /dev/null and b/graphics/trainer_hill/maps_unique/floor_3/collision.bin differ diff --git a/graphics/trainer_hill/maps_unique/floor_3/metatiles.bin b/graphics/trainer_hill/maps_unique/floor_3/metatiles.bin new file mode 100755 index 0000000000..66840137c3 Binary files /dev/null and b/graphics/trainer_hill/maps_unique/floor_3/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_variety/floor_0/collision.bin b/graphics/trainer_hill/maps_variety/floor_0/collision.bin new file mode 100755 index 0000000000..24fc2ea1e6 Binary files /dev/null and b/graphics/trainer_hill/maps_variety/floor_0/collision.bin differ diff --git a/graphics/trainer_hill/maps_variety/floor_0/metatiles.bin b/graphics/trainer_hill/maps_variety/floor_0/metatiles.bin new file mode 100755 index 0000000000..af741b7eb5 Binary files /dev/null and b/graphics/trainer_hill/maps_variety/floor_0/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_variety/floor_1/collision.bin b/graphics/trainer_hill/maps_variety/floor_1/collision.bin new file mode 100755 index 0000000000..27f945b286 Binary files /dev/null and b/graphics/trainer_hill/maps_variety/floor_1/collision.bin differ diff --git a/graphics/trainer_hill/maps_variety/floor_1/metatiles.bin b/graphics/trainer_hill/maps_variety/floor_1/metatiles.bin new file mode 100755 index 0000000000..c5a9aa5d4e Binary files /dev/null and b/graphics/trainer_hill/maps_variety/floor_1/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_variety/floor_2/collision.bin b/graphics/trainer_hill/maps_variety/floor_2/collision.bin new file mode 100755 index 0000000000..606249b2a0 Binary files /dev/null and b/graphics/trainer_hill/maps_variety/floor_2/collision.bin differ diff --git a/graphics/trainer_hill/maps_variety/floor_2/metatiles.bin b/graphics/trainer_hill/maps_variety/floor_2/metatiles.bin new file mode 100755 index 0000000000..fcb1d4f613 Binary files /dev/null and b/graphics/trainer_hill/maps_variety/floor_2/metatiles.bin differ diff --git a/graphics/trainer_hill/maps_variety/floor_3/collision.bin b/graphics/trainer_hill/maps_variety/floor_3/collision.bin new file mode 100755 index 0000000000..153a26637b Binary files /dev/null and b/graphics/trainer_hill/maps_variety/floor_3/collision.bin differ diff --git a/graphics/trainer_hill/maps_variety/floor_3/metatiles.bin b/graphics/trainer_hill/maps_variety/floor_3/metatiles.bin new file mode 100755 index 0000000000..b1b32f5208 Binary files /dev/null and b/graphics/trainer_hill/maps_variety/floor_3/metatiles.bin differ diff --git a/graphics/unknown/unknown_5B3564.bin b/graphics/trainer_hill/records_window.bin similarity index 100% rename from graphics/unknown/unknown_5B3564.bin rename to graphics/trainer_hill/records_window.bin diff --git a/graphics/unknown/unknown_5B3484.png b/graphics/trainer_hill/records_window.png similarity index 100% rename from graphics/unknown/unknown_5B3484.png rename to graphics/trainer_hill/records_window.png diff --git a/graphics/types/fairy.png b/graphics/types/fairy.png index d8170f64f5..498386c203 100644 Binary files a/graphics/types/fairy.png and b/graphics/types/fairy.png differ diff --git a/graphics/unknown/unknown_C035B8.png b/graphics/unknown/unknown_C035B8.png deleted file mode 100644 index 0b2ae80f99..0000000000 Binary files a/graphics/unknown/unknown_C035B8.png and /dev/null differ diff --git a/graphics/unknown/unknown_D12FEC.png b/graphics/unknown/unknown_D12FEC.png deleted file mode 100644 index 96c49a9921..0000000000 Binary files a/graphics/unknown/unknown_D12FEC.png and /dev/null differ diff --git a/graphics/unknown/unknown_D1300C.png b/graphics/unknown/unknown_D1300C.png deleted file mode 100644 index 0c077dd0b6..0000000000 Binary files a/graphics/unknown/unknown_D1300C.png and /dev/null differ diff --git a/graphics/wonder_transfers/wonder_card_1.bin b/graphics/wonder_card/bg1.bin similarity index 100% rename from graphics/wonder_transfers/wonder_card_1.bin rename to graphics/wonder_card/bg1.bin diff --git a/graphics/wonder_transfers/wonder_card_1.png b/graphics/wonder_card/bg1.png similarity index 100% rename from graphics/wonder_transfers/wonder_card_1.png rename to graphics/wonder_card/bg1.png diff --git a/graphics/wonder_transfers/wonder_card_2.bin b/graphics/wonder_card/bg2.bin similarity index 100% rename from graphics/wonder_transfers/wonder_card_2.bin rename to graphics/wonder_card/bg2.bin diff --git a/graphics/wonder_transfers/wonder_card_2.png b/graphics/wonder_card/bg2.png similarity index 100% rename from graphics/wonder_transfers/wonder_card_2.png rename to graphics/wonder_card/bg2.png diff --git a/graphics/wonder_transfers/wonder_card_3.bin b/graphics/wonder_card/bg3.bin similarity index 100% rename from graphics/wonder_transfers/wonder_card_3.bin rename to graphics/wonder_card/bg3.bin diff --git a/graphics/wonder_transfers/wonder_card_3.png b/graphics/wonder_card/bg3.png similarity index 100% rename from graphics/wonder_transfers/wonder_card_3.png rename to graphics/wonder_card/bg3.png diff --git a/graphics/wonder_transfers/wonder_card_4.png b/graphics/wonder_card/bg4.png similarity index 100% rename from graphics/wonder_transfers/wonder_card_4.png rename to graphics/wonder_card/bg4.png diff --git a/graphics/wonder_transfers/wonder_card_5.png b/graphics/wonder_card/bg5.png similarity index 100% rename from graphics/wonder_transfers/wonder_card_5.png rename to graphics/wonder_card/bg5.png diff --git a/graphics/wonder_transfers/wonder_card_6.png b/graphics/wonder_card/bg6.png similarity index 100% rename from graphics/wonder_transfers/wonder_card_6.png rename to graphics/wonder_card/bg6.png diff --git a/graphics/wonder_transfers/wonder_card_7.bin b/graphics/wonder_card/bg7.bin similarity index 100% rename from graphics/wonder_transfers/wonder_card_7.bin rename to graphics/wonder_card/bg7.bin diff --git a/graphics/wonder_transfers/wonder_card_7.png b/graphics/wonder_card/bg7.png similarity index 100% rename from graphics/wonder_transfers/wonder_card_7.png rename to graphics/wonder_card/bg7.png diff --git a/graphics/wonder_transfers/wonder_card_8.bin b/graphics/wonder_card/bg8.bin similarity index 100% rename from graphics/wonder_transfers/wonder_card_8.bin rename to graphics/wonder_card/bg8.bin diff --git a/graphics/wonder_transfers/wonder_card_8.png b/graphics/wonder_card/bg8.png similarity index 100% rename from graphics/wonder_transfers/wonder_card_8.png rename to graphics/wonder_card/bg8.png diff --git a/graphics/wonder_transfers/wonder_card_shadow.png b/graphics/wonder_card/stamp_shadow.png similarity index 100% rename from graphics/wonder_transfers/wonder_card_shadow.png rename to graphics/wonder_card/stamp_shadow.png diff --git a/graphics/wonder_transfers/wonder_card_shadow_1.pal b/graphics/wonder_card/stamp_shadow_1.pal similarity index 100% rename from graphics/wonder_transfers/wonder_card_shadow_1.pal rename to graphics/wonder_card/stamp_shadow_1.pal diff --git a/graphics/wonder_transfers/wonder_card_shadow_2.pal b/graphics/wonder_card/stamp_shadow_2.pal similarity index 100% rename from graphics/wonder_transfers/wonder_card_shadow_2.pal rename to graphics/wonder_card/stamp_shadow_2.pal diff --git a/graphics/wonder_transfers/wonder_card_shadow_3.pal b/graphics/wonder_card/stamp_shadow_3.pal similarity index 100% rename from graphics/wonder_transfers/wonder_card_shadow_3.pal rename to graphics/wonder_card/stamp_shadow_3.pal diff --git a/graphics/wonder_transfers/wonder_card_shadow_4.pal b/graphics/wonder_card/stamp_shadow_4.pal similarity index 100% rename from graphics/wonder_transfers/wonder_card_shadow_4.pal rename to graphics/wonder_card/stamp_shadow_4.pal diff --git a/graphics/wonder_transfers/wonder_card_shadow_5.pal b/graphics/wonder_card/stamp_shadow_5.pal similarity index 100% rename from graphics/wonder_transfers/wonder_card_shadow_5.pal rename to graphics/wonder_card/stamp_shadow_5.pal diff --git a/graphics/wonder_transfers/wonder_card_shadow_6.pal b/graphics/wonder_card/stamp_shadow_6.pal similarity index 100% rename from graphics/wonder_transfers/wonder_card_shadow_6.pal rename to graphics/wonder_card/stamp_shadow_6.pal diff --git a/graphics/wonder_transfers/wonder_card_shadow_7.pal b/graphics/wonder_card/stamp_shadow_7.pal similarity index 100% rename from graphics/wonder_transfers/wonder_card_shadow_7.pal rename to graphics/wonder_card/stamp_shadow_7.pal diff --git a/graphics/wonder_transfers/wonder_card_shadow_8.pal b/graphics/wonder_card/stamp_shadow_8.pal similarity index 100% rename from graphics/wonder_transfers/wonder_card_shadow_8.pal rename to graphics/wonder_card/stamp_shadow_8.pal diff --git a/graphics/wonder_transfers/wonder_news_1.bin b/graphics/wonder_news/bg1.bin similarity index 100% rename from graphics/wonder_transfers/wonder_news_1.bin rename to graphics/wonder_news/bg1.bin diff --git a/graphics/wonder_transfers/wonder_news_1.png b/graphics/wonder_news/bg1.png similarity index 100% rename from graphics/wonder_transfers/wonder_news_1.png rename to graphics/wonder_news/bg1.png diff --git a/graphics/wonder_transfers/wonder_news_2.bin b/graphics/wonder_news/bg2.bin similarity index 100% rename from graphics/wonder_transfers/wonder_news_2.bin rename to graphics/wonder_news/bg2.bin diff --git a/graphics/wonder_transfers/wonder_news_2.png b/graphics/wonder_news/bg2.png similarity index 100% rename from graphics/wonder_transfers/wonder_news_2.png rename to graphics/wonder_news/bg2.png diff --git a/graphics/wonder_transfers/wonder_news_3.bin b/graphics/wonder_news/bg3.bin similarity index 100% rename from graphics/wonder_transfers/wonder_news_3.bin rename to graphics/wonder_news/bg3.bin diff --git a/graphics/wonder_transfers/wonder_news_3.png b/graphics/wonder_news/bg3.png similarity index 100% rename from graphics/wonder_transfers/wonder_news_3.png rename to graphics/wonder_news/bg3.png diff --git a/graphics/wonder_transfers/wonder_news_7.bin b/graphics/wonder_news/bg7.bin similarity index 100% rename from graphics/wonder_transfers/wonder_news_7.bin rename to graphics/wonder_news/bg7.bin diff --git a/graphics/wonder_transfers/wonder_news_7.png b/graphics/wonder_news/bg7.png similarity index 100% rename from graphics/wonder_transfers/wonder_news_7.png rename to graphics/wonder_news/bg7.png diff --git a/graphics/wonder_transfers/wonder_news_8.bin b/graphics/wonder_news/bg8.bin similarity index 100% rename from graphics/wonder_transfers/wonder_news_8.bin rename to graphics/wonder_news/bg8.bin diff --git a/graphics/wonder_transfers/wonder_news_8.png b/graphics/wonder_news/bg8.png similarity index 100% rename from graphics/wonder_transfers/wonder_news_8.png rename to graphics/wonder_news/bg8.png diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 198212a27f..c275c37601 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -18,40 +18,96 @@ PKNAVOPTIONSGFXDIR := graphics/pokenav/options WALLPAPERGFXDIR := graphics/pokemon_storage/wallpapers OBJEVENTGFXDIR := graphics/object_events MISCGFXDIR := graphics/misc +JPCONTESTGFXDIR := graphics/contest/japanese +POKEDEXGFXDIR := graphics/pokedex +STARTERGFXDIR := graphics/starter_choose +NAMINGGFXDIR := graphics/naming_screen types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy contest_types := cool beauty cute smart tough +### Cherrim ### +$(CHERRIMGFXDIR)/front.4bpp: $(CHERRIMGFXDIR)/normal/front.4bpp \ + $(CHERRIMGFXDIR)/sunshine/front.4bpp + @cat $^ >$@ + +$(CHERRIMGFXDIR)/back.4bpp: $(CHERRIMGFXDIR)/normal/back.4bpp \ + $(CHERRIMGFXDIR)/sunshine/back.4bpp + @cat $^ >$@ + +$(CHERRIMGFXDIR)/anim_front.4bpp: $(CHERRIMGFXDIR)/normal/anim_front.4bpp \ + $(CHERRIMGFXDIR)/sunshine/anim_front.4bpp + @cat $^ >$@ + +$(CHERRIMGFXDIR)/normal.gbapal: $(CHERRIMGFXDIR)/normal/normal.gbapal \ + $(CHERRIMGFXDIR)/sunshine/normal.gbapal + @cat $^ >$@ + +$(CHERRIMGFXDIR)/shiny.gbapal: $(CHERRIMGFXDIR)/normal/shiny.gbapal \ + $(CHERRIMGFXDIR)/sunshine/shiny.gbapal + @cat $^ >$@ + +### Castform ### + +$(CASTFORMGFXDIR)/front.4bpp: $(CASTFORMGFXDIR)/normal/front.4bpp \ + $(CASTFORMGFXDIR)/sunny/front.4bpp \ + $(CASTFORMGFXDIR)/rainy/front.4bpp \ + $(CASTFORMGFXDIR)/snowy/front.4bpp + @cat $^ >$@ + +$(CASTFORMGFXDIR)/back.4bpp: $(CASTFORMGFXDIR)/normal/back.4bpp \ + $(CASTFORMGFXDIR)/sunny/back.4bpp \ + $(CASTFORMGFXDIR)/rainy/back.4bpp \ + $(CASTFORMGFXDIR)/snowy/back.4bpp + @cat $^ >$@ + +$(CASTFORMGFXDIR)/anim_front.4bpp: $(CASTFORMGFXDIR)/normal/anim_front.4bpp \ + $(CASTFORMGFXDIR)/sunny/anim_front.4bpp \ + $(CASTFORMGFXDIR)/rainy/anim_front.4bpp \ + $(CASTFORMGFXDIR)/snowy/anim_front.4bpp + @cat $^ >$@ + +$(CASTFORMGFXDIR)/normal.gbapal: $(CASTFORMGFXDIR)/normal/normal.gbapal \ + $(CASTFORMGFXDIR)/sunny/normal.gbapal \ + $(CASTFORMGFXDIR)/rainy/normal.gbapal \ + $(CASTFORMGFXDIR)/snowy/normal.gbapal + @cat $^ >$@ + +$(CASTFORMGFXDIR)/shiny.gbapal: $(CASTFORMGFXDIR)/normal/shiny.gbapal \ + $(CASTFORMGFXDIR)/sunny/shiny.gbapal \ + $(CASTFORMGFXDIR)/rainy/shiny.gbapal \ + $(CASTFORMGFXDIR)/snowy/shiny.gbapal + @cat $^ >$@ ### Tilesets ### $(TILESETGFXDIR)/secondary/petalburg/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 159 + $(GFX) $< $@ -num_tiles 159 -Wnum_tiles $(TILESETGFXDIR)/secondary/rustboro/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 498 + $(GFX) $< $@ -num_tiles 498 -Wnum_tiles $(TILESETGFXDIR)/secondary/dewford/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 503 + $(GFX) $< $@ -num_tiles 503 -Wnum_tiles $(TILESETGFXDIR)/secondary/slateport/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 504 + $(GFX) $< $@ -num_tiles 504 -Wnum_tiles $(TILESETGFXDIR)/secondary/mauville/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 503 + $(GFX) $< $@ -num_tiles 503 -Wnum_tiles $(TILESETGFXDIR)/secondary/lavaridge/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 450 + $(GFX) $< $@ -num_tiles 450 -Wnum_tiles $(TILESETGFXDIR)/secondary/fortree/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 493 + $(GFX) $< $@ -num_tiles 493 -Wnum_tiles $(TILESETGFXDIR)/secondary/pacifidlog/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 504 + $(GFX) $< $@ -num_tiles 504 -Wnum_tiles $(TILESETGFXDIR)/secondary/sootopolis/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 328 + $(GFX) $< $@ -num_tiles 328 -Wnum_tiles SOOTOPOLISANIMDIR := $(TILESETGFXDIR)/secondary/sootopolis/anim @@ -88,273 +144,257 @@ $(SOOTOPOLISANIMDIR)/stormy_water/7.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/7_ky @cat $^ >$@ $(TILESETGFXDIR)/secondary/battle_frontier_outside_west/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 508 + $(GFX) $< $@ -num_tiles 508 -Wnum_tiles $(TILESETGFXDIR)/secondary/battle_frontier_outside_east/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 508 + $(GFX) $< $@ -num_tiles 508 -Wnum_tiles $(TILESETGFXDIR)/primary/building/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 502 + $(GFX) $< $@ -num_tiles 502 -Wnum_tiles $(TILESETGFXDIR)/secondary/shop/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 502 + $(GFX) $< $@ -num_tiles 502 -Wnum_tiles $(TILESETGFXDIR)/secondary/pokemon_center/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 478 + $(GFX) $< $@ -num_tiles 478 -Wnum_tiles $(TILESETGFXDIR)/secondary/cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 425 + $(GFX) $< $@ -num_tiles 425 -Wnum_tiles $(TILESETGFXDIR)/secondary/pokemon_school/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 278 + $(GFX) $< $@ -num_tiles 278 -Wnum_tiles $(TILESETGFXDIR)/secondary/pokemon_fan_club/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 319 + $(GFX) $< $@ -num_tiles 319 -Wnum_tiles $(TILESETGFXDIR)/secondary/unused_1/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 17 + $(GFX) $< $@ -num_tiles 17 -Wnum_tiles $(TILESETGFXDIR)/secondary/meteor_falls/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 460 + $(GFX) $< $@ -num_tiles 460 -Wnum_tiles $(TILESETGFXDIR)/secondary/oceanic_museum/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 319 + $(GFX) $< $@ -num_tiles 319 -Wnum_tiles $(TILESETGFXDIR)/secondary/cable_club/unknown_tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 120 + $(GFX) $< $@ -num_tiles 120 -Wnum_tiles $(TILESETGFXDIR)/secondary/seashore_house/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 312 + $(GFX) $< $@ -num_tiles 312 -Wnum_tiles $(TILESETGFXDIR)/secondary/pretty_petal_flower_shop/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 345 + $(GFX) $< $@ -num_tiles 345 -Wnum_tiles $(TILESETGFXDIR)/secondary/pokemon_day_care/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 355 + $(GFX) $< $@ -num_tiles 355 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/brown_cave/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/brown_cave/tiles.png - $(GFX) $< $@ -num_tiles 82 + $(GFX) $< $@ -num_tiles 82 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/tree/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/tree/tiles.png - $(GFX) $< $@ -num_tiles 82 + $(GFX) $< $@ -num_tiles 82 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/shrub/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/shrub/tiles.png - $(GFX) $< $@ -num_tiles 82 + $(GFX) $< $@ -num_tiles 82 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/blue_cave/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/blue_cave/tiles.png - $(GFX) $< $@ -num_tiles 82 + $(GFX) $< $@ -num_tiles 82 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/yellow_cave/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/yellow_cave/tiles.png - $(GFX) $< $@ -num_tiles 82 + $(GFX) $< $@ -num_tiles 82 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/red_cave/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/red_cave/tiles.png - $(GFX) $< $@ -num_tiles 82 + $(GFX) $< $@ -num_tiles 82 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/brown_cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 83 + $(GFX) $< $@ -num_tiles 83 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/tree/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 83 + $(GFX) $< $@ -num_tiles 83 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/shrub/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 83 + $(GFX) $< $@ -num_tiles 83 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/blue_cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 83 + $(GFX) $< $@ -num_tiles 83 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/yellow_cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 83 + $(GFX) $< $@ -num_tiles 83 -Wnum_tiles $(TILESETGFXDIR)/secondary/secret_base/red_cave/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 83 + $(GFX) $< $@ -num_tiles 83 -Wnum_tiles $(TILESETGFXDIR)/secondary/inside_of_truck/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 62 + $(GFX) $< $@ -num_tiles 62 -Wnum_tiles $(TILESETGFXDIR)/secondary/contest/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 430 + $(GFX) $< $@ -num_tiles 430 -Wnum_tiles $(TILESETGFXDIR)/secondary/lilycove_museum/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 431 + $(GFX) $< $@ -num_tiles 431 -Wnum_tiles $(TILESETGFXDIR)/secondary/lab/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 500 + $(GFX) $< $@ -num_tiles 500 -Wnum_tiles $(TILESETGFXDIR)/secondary/underwater/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 500 + $(GFX) $< $@ -num_tiles 500 -Wnum_tiles $(TILESETGFXDIR)/secondary/generic_building/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 509 + $(GFX) $< $@ -num_tiles 509 -Wnum_tiles $(TILESETGFXDIR)/secondary/mauville_game_corner/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 469 + $(GFX) $< $@ -num_tiles 469 -Wnum_tiles $(TILESETGFXDIR)/secondary/unused_2/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 150 + $(GFX) $< $@ -num_tiles 150 -Wnum_tiles $(TILESETGFXDIR)/secondary/rustboro_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 60 + $(GFX) $< $@ -num_tiles 60 -Wnum_tiles $(TILESETGFXDIR)/secondary/dewford_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 61 + $(GFX) $< $@ -num_tiles 61 -Wnum_tiles $(TILESETGFXDIR)/secondary/lavaridge_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 54 + $(GFX) $< $@ -num_tiles 54 -Wnum_tiles $(TILESETGFXDIR)/secondary/petalburg_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 148 + $(GFX) $< $@ -num_tiles 148 -Wnum_tiles $(TILESETGFXDIR)/secondary/fortree_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 61 + $(GFX) $< $@ -num_tiles 61 -Wnum_tiles $(TILESETGFXDIR)/secondary/mossdeep_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 82 + $(GFX) $< $@ -num_tiles 82 -Wnum_tiles $(TILESETGFXDIR)/secondary/sootopolis_gym/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 484 + $(GFX) $< $@ -num_tiles 484 -Wnum_tiles $(TILESETGFXDIR)/secondary/trick_house_puzzle/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 294 + $(GFX) $< $@ -num_tiles 294 -Wnum_tiles $(TILESETGFXDIR)/secondary/inside_ship/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 342 + $(GFX) $< $@ -num_tiles 342 -Wnum_tiles $(TILESETGFXDIR)/secondary/elite_four/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 505 + $(GFX) $< $@ -num_tiles 505 -Wnum_tiles $(TILESETGFXDIR)/secondary/battle_frontier/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 310 + $(GFX) $< $@ -num_tiles 310 -Wnum_tiles $(TILESETGFXDIR)/secondary/battle_factory/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 424 + $(GFX) $< $@ -num_tiles 424 -Wnum_tiles $(TILESETGFXDIR)/secondary/battle_pike/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 382 + $(GFX) $< $@ -num_tiles 382 -Wnum_tiles $(TILESETGFXDIR)/secondary/mirage_tower/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 420 + $(GFX) $< $@ -num_tiles 420 -Wnum_tiles $(TILESETGFXDIR)/secondary/mossdeep_game_corner/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 95 + $(GFX) $< $@ -num_tiles 95 -Wnum_tiles $(TILESETGFXDIR)/secondary/island_harbor/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 503 + $(GFX) $< $@ -num_tiles 503 -Wnum_tiles $(TILESETGFXDIR)/secondary/trainer_hill/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 374 + $(GFX) $< $@ -num_tiles 374 -Wnum_tiles $(TILESETGFXDIR)/secondary/navel_rock/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 420 + $(GFX) $< $@ -num_tiles 420 -Wnum_tiles $(TILESETGFXDIR)/secondary/battle_frontier_ranking_hall/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 136 + $(GFX) $< $@ -num_tiles 136 -Wnum_tiles $(TILESETGFXDIR)/secondary/mystery_events_house/tiles.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 509 + $(GFX) $< $@ -num_tiles 509 -Wnum_tiles ### Fonts ### -$(FONTGFXDIR)/font0.latfont: $(FONTGFXDIR)/font0_latin.png +$(FONTGFXDIR)/small.latfont: $(FONTGFXDIR)/latin_small.png $(GFX) $< $@ -$(FONTGFXDIR)/font1.latfont: $(FONTGFXDIR)/font1_latin.png +$(FONTGFXDIR)/normal.latfont: $(FONTGFXDIR)/latin_normal.png $(GFX) $< $@ -$(FONTGFXDIR)/font2.latfont: $(FONTGFXDIR)/font2_latin.png +$(FONTGFXDIR)/short.latfont: $(FONTGFXDIR)/latin_short.png $(GFX) $< $@ -$(FONTGFXDIR)/font7.latfont: $(FONTGFXDIR)/font7_latin.png +$(FONTGFXDIR)/narrow.latfont: $(FONTGFXDIR)/latin_narrow.png $(GFX) $< $@ -$(FONTGFXDIR)/font8.latfont: $(FONTGFXDIR)/font8_latin.png +$(FONTGFXDIR)/small_narrow.latfont: $(FONTGFXDIR)/latin_small_narrow.png $(GFX) $< $@ -$(FONTGFXDIR)/font0.hwjpnfont: $(FONTGFXDIR)/font0_japanese.png +$(FONTGFXDIR)/small.hwjpnfont: $(FONTGFXDIR)/japanese_small.png $(GFX) $< $@ -$(FONTGFXDIR)/font1.hwjpnfont: $(FONTGFXDIR)/font1_japanese.png +$(FONTGFXDIR)/normal.hwjpnfont: $(FONTGFXDIR)/japanese_normal.png $(GFX) $< $@ -$(FONTGFXDIR)/font9.hwjpnfont: $(FONTGFXDIR)/font9_japanese.png +$(FONTGFXDIR)/bold.hwjpnfont: $(FONTGFXDIR)/japanese_bold.png $(GFX) $< $@ -$(FONTGFXDIR)/font2.fwjpnfont: $(FONTGFXDIR)/font2_japanese.png +$(FONTGFXDIR)/short.fwjpnfont: $(FONTGFXDIR)/japanese_short.png $(GFX) $< $@ -$(FONTGFXDIR)/font6.fwjpnfont: $(FONTGFXDIR)/font6_braille.png +$(FONTGFXDIR)/braille.fwjpnfont: $(FONTGFXDIR)/braille.png $(GFX) $< $@ -$(FONTGFXDIR)/unused_frlg_male.fwjpnfont: $(FONTGFXDIR)/unused_japanese_frlg_male_font.png +$(FONTGFXDIR)/frlg_male.fwjpnfont: $(FONTGFXDIR)/japanese_frlg_male_font.png $(GFX) $< $@ -$(FONTGFXDIR)/unused_frlg_female.fwjpnfont: $(FONTGFXDIR)/unused_japanese_frlg_female_font.png +$(FONTGFXDIR)/frlg_female.fwjpnfont: $(FONTGFXDIR)/japanese_frlg_female_font.png $(GFX) $< $@ -$(FONTGFXDIR)/down_arrow.4bpp: %.4bpp: %.png - $(GFX) $< $@ - -$(FONTGFXDIR)/down_arrow_rs.4bpp: %.4bpp: %.png - $(GFX) $< $@ - -$(FONTGFXDIR)/unused_frlg_blanked_down_arrow.4bpp: %.4bpp: %.png - $(GFX) $< $@ - -$(FONTGFXDIR)/unused_frlg_down_arrow.4bpp: %.4bpp: %.png - $(GFX) $< $@ - -$(FONTGFXDIR)/keypad_icons.4bpp: %.4bpp: %.png - $(GFX) $< $@ - - ### Miscellaneous ### graphics/title_screen/pokemon_logo.gbapal: %.gbapal: %.pal $(GFX) $< $@ -num_colors 224 graphics/pokemon_jump/bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 63 + $(GFX) $< $@ -num_tiles 63 -Wnum_tiles graphics/pokenav/region_map.8bpp: %.8bpp: %.png - $(GFX) $< $@ -num_tiles 233 + $(GFX) $< $@ -num_tiles 233 -Wnum_tiles $(MISCGFXDIR)/japanese_hof.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 29 + $(GFX) $< $@ -num_tiles 29 -Wnum_tiles $(BATINTGFXDIR)/textbox.gbapal: $(BATINTGFXDIR)/textbox_0.gbapal \ - $(BATINTGFXDIR)/textbox_1.gbapal + $(BATINTGFXDIR)/textbox_1.gbapal @cat $^ >$@ $(BTLANMSPRGFXDIR)/ice_cube.4bpp: $(BTLANMSPRGFXDIR)/ice_cube_0.4bpp \ - $(BTLANMSPRGFXDIR)/ice_cube_1.4bpp \ - $(BTLANMSPRGFXDIR)/ice_cube_2.4bpp \ - $(BTLANMSPRGFXDIR)/ice_cube_3.4bpp + $(BTLANMSPRGFXDIR)/ice_cube_1.4bpp \ + $(BTLANMSPRGFXDIR)/ice_cube_2.4bpp \ + $(BTLANMSPRGFXDIR)/ice_cube_3.4bpp @cat $^ >$@ $(UNUSEDGFXDIR)/obi_palpak1.gbapal: $(UNUSEDGFXDIR)/old_pal1.gbapal \ - $(UNUSEDGFXDIR)/old_pal2.gbapal \ - $(UNUSEDGFXDIR)/old_pal3.gbapal + $(UNUSEDGFXDIR)/old_pal2.gbapal \ + $(UNUSEDGFXDIR)/old_pal3.gbapal @cat $^ >$@ $(UNUSEDGFXDIR)/obi_palpak3.gbapal: $(UNUSEDGFXDIR)/old_pal5.gbapal \ - $(UNUSEDGFXDIR)/old_pal6.gbapal \ - $(UNUSEDGFXDIR)/old_pal7.gbapal + $(UNUSEDGFXDIR)/old_pal6.gbapal \ + $(UNUSEDGFXDIR)/old_pal7.gbapal @cat $^ >$@ $(UNUSEDGFXDIR)/obi1.4bpp: $(UNUSEDGFXDIR)/old_bulbasaur.4bpp \ - $(UNUSEDGFXDIR)/old_charizard.4bpp + $(UNUSEDGFXDIR)/old_charizard.4bpp @cat $^ >$@ $(UNUSEDGFXDIR)/obi2.4bpp: $(UNUSEDGFXDIR)/old_bulbasaur2.4bpp \ - $(UNUSEDGFXDIR)/old_battle_interface_1.4bpp \ - $(UNUSEDGFXDIR)/old_battle_interface_2.4bpp \ - $(UNUSEDGFXDIR)/old_battle_interface_3.4bpp + $(UNUSEDGFXDIR)/old_battle_interface_1.4bpp \ + $(UNUSEDGFXDIR)/old_battle_interface_2.4bpp \ + $(UNUSEDGFXDIR)/old_battle_interface_3.4bpp @cat $^ >$@ -$(INTERFACEGFXDIR)/hp_numbers.4bpp: $(INTERFACEGFXDIR)/hpbar_anim.4bpp \ - $(INTERFACEGFXDIR)/numbers1.4bpp \ - $(INTERFACEGFXDIR)/numbers2.4bpp +$(BATINTGFXDIR)/battle_bar.4bpp: $(BATINTGFXDIR)/hpbar_anim_unused.4bpp \ + $(BATINTGFXDIR)/numbers1.4bpp \ + $(BATINTGFXDIR)/numbers2.4bpp @cat $^ >$@ $(UNUSEDGFXDIR)/redyellowgreen_frame.bin: $(UNUSEDGFXDIR)/red_frame.bin \ @@ -364,139 +404,139 @@ $(UNUSEDGFXDIR)/redyellowgreen_frame.bin: $(UNUSEDGFXDIR)/red_frame.bin \ @cat $^ >$@ $(UNUSEDGFXDIR)/color_frames.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 353 + $(GFX) $< $@ -num_tiles 353 -Wnum_tiles $(BATINTGFXDIR)/unused_window2bar.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 5 + $(GFX) $< $@ -num_tiles 5 -Wnum_tiles -$(UNUSEDGFXDIR)/old_contest.4bpp: $(UNUSEDGFXDIR)/old_contest_frame_1.4bpp \ - $(UNUSEDGFXDIR)/old_contest_floor.4bpp \ - $(UNUSEDGFXDIR)/old_contest_frame_2.4bpp \ - $(UNUSEDGFXDIR)/old_contest_symbols.4bpp \ - $(UNUSEDGFXDIR)/old_contest_meter.4bpp \ - $(UNUSEDGFXDIR)/old_contest_classes.4bpp \ - $(UNUSEDGFXDIR)/old_contest_numbers.4bpp +$(JPCONTESTGFXDIR)/composite_1.4bpp: $(JPCONTESTGFXDIR)/frame_1.4bpp \ + $(JPCONTESTGFXDIR)/floor.4bpp \ + $(JPCONTESTGFXDIR)/frame_2.4bpp \ + $(JPCONTESTGFXDIR)/symbols.4bpp \ + $(JPCONTESTGFXDIR)/meter.4bpp \ + $(JPCONTESTGFXDIR)/letters.4bpp \ + $(JPCONTESTGFXDIR)/numbers.4bpp @cat $^ >$@ -$(UNUSEDGFXDIR)/old_contest_2.4bpp: $(UNUSEDGFXDIR)/old_contest_2_1.4bpp \ - $(UNUSEDGFXDIR)/old_contest_2_2.4bpp +$(JPCONTESTGFXDIR)/composite_2.4bpp: $(JPCONTESTGFXDIR)/interface.4bpp \ + $(JPCONTESTGFXDIR)/audience.4bpp @cat $^ >$@ -$(UNKNOWNGFXDIR)/unknown_C19470.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 36 +$(JPCONTESTGFXDIR)/voltage.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 36 -Wnum_tiles $(BTLANMSPRGFXDIR)/ice_crystals.4bpp: $(BTLANMSPRGFXDIR)/ice_crystals_0.4bpp \ - $(BTLANMSPRGFXDIR)/ice_crystals_1.4bpp \ - $(BTLANMSPRGFXDIR)/ice_crystals_2.4bpp \ - $(BTLANMSPRGFXDIR)/ice_crystals_3.4bpp \ - $(BTLANMSPRGFXDIR)/ice_crystals_4.4bpp + $(BTLANMSPRGFXDIR)/ice_crystals_1.4bpp \ + $(BTLANMSPRGFXDIR)/ice_crystals_2.4bpp \ + $(BTLANMSPRGFXDIR)/ice_crystals_3.4bpp \ + $(BTLANMSPRGFXDIR)/ice_crystals_4.4bpp @cat $^ >$@ $(BTLANMSPRGFXDIR)/mud_sand.4bpp: $(BTLANMSPRGFXDIR)/mud_sand_0.4bpp \ - $(BTLANMSPRGFXDIR)/mud_sand_1.4bpp + $(BTLANMSPRGFXDIR)/mud_sand_1.4bpp @cat $^ >$@ $(BTLANMSPRGFXDIR)/flower.4bpp: $(BTLANMSPRGFXDIR)/flower_0.4bpp \ - $(BTLANMSPRGFXDIR)/flower_1.4bpp + $(BTLANMSPRGFXDIR)/flower_1.4bpp @cat $^ >$@ $(BTLANMSPRGFXDIR)/spark.4bpp: $(BTLANMSPRGFXDIR)/spark_0.4bpp \ - $(BTLANMSPRGFXDIR)/spark_1.4bpp + $(BTLANMSPRGFXDIR)/spark_1.4bpp @cat $^ >$@ $(MASKSGFXDIR)/unused_level_up.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 14 + $(GFX) $< $@ -num_tiles 14 -Wnum_tiles $(BATTRANSGFXDIR)/vs_frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 16 + $(GFX) $< $@ -num_tiles 16 -Wnum_tiles -$(INTERFACEGFXDIR)/party_menu_bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 62 +graphics/party_menu/bg.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 62 -Wnum_tiles $(TYPESGFXDIR)/move_types.4bpp: $(types:%=$(TYPESGFXDIR)/%.4bpp) $(contest_types:%=$(TYPESGFXDIR)/contest_%.4bpp) @cat $^ >$@ $(TYPESGFXDIR)/move_types.gbapal: $(TYPESGFXDIR)/move_types_1.gbapal \ - $(TYPESGFXDIR)/move_types_2.gbapal \ - $(TYPESGFXDIR)/move_types_3.gbapal + $(TYPESGFXDIR)/move_types_2.gbapal \ + $(TYPESGFXDIR)/move_types_3.gbapal @cat $^ >$@ -$(INTERFACEGFXDIR)/bag_screen.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 +graphics/bag/menu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 53 -Wnum_tiles $(RAYQUAZAGFXDIR)/scene_2/rayquaza.8bpp: %.8bpp: %.png - $(GFX) $< $@ -num_tiles 227 + $(GFX) $< $@ -num_tiles 227 -Wnum_tiles $(RAYQUAZAGFXDIR)/scene_2/bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 313 + $(GFX) $< $@ -num_tiles 313 -Wnum_tiles $(RAYQUAZAGFXDIR)/scene_3/rayquaza.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 124 + $(GFX) $< $@ -num_tiles 124 -Wnum_tiles $(RAYQUAZAGFXDIR)/scene_3/rayquaza_tail_fix.4bpp: $(RAYQUAZAGFXDIR)/scene_3/rayquaza_tail.4bpp cp $< $@ head -c 12 /dev/zero >> $@ $(RAYQUAZAGFXDIR)/scene_4/streaks.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 19 + $(GFX) $< $@ -num_tiles 19 -Wnum_tiles $(RAYQUAZAGFXDIR)/scene_4/rayquaza.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 155 + $(GFX) $< $@ -num_tiles 155 -Wnum_tiles graphics/picture_frame/lobby.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 86 + $(GFX) $< $@ -num_tiles 86 -Wnum_tiles $(ROULETTEGFXDIR)/roulette_tilt.4bpp: $(ROULETTEGFXDIR)/shroomish.4bpp \ - $(ROULETTEGFXDIR)/tailow.4bpp + $(ROULETTEGFXDIR)/tailow.4bpp @cat $^ >$@ $(ROULETTEGFXDIR)/wheel_icons.4bpp: $(ROULETTEGFXDIR)/wynaut.4bpp \ - $(ROULETTEGFXDIR)/azurill.4bpp \ - $(ROULETTEGFXDIR)/skitty.4bpp \ - $(ROULETTEGFXDIR)/makuhita.4bpp + $(ROULETTEGFXDIR)/azurill.4bpp \ + $(ROULETTEGFXDIR)/skitty.4bpp \ + $(ROULETTEGFXDIR)/makuhita.4bpp @cat $^ >$@ $(BATTRANSGFXDIR)/regis.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 + $(GFX) $< $@ -num_tiles 53 -Wnum_tiles $(BATTRANSGFXDIR)/rayquaza.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 938 + $(GFX) $< $@ -num_tiles 938 -Wnum_tiles $(BATTRANSGFXDIR)/frontier_square_1.4bpp: $(BATTRANSGFXDIR)/frontier_squares_blanktiles.4bpp \ - $(BATTRANSGFXDIR)/frontier_squares_1.4bpp + $(BATTRANSGFXDIR)/frontier_squares_1.4bpp @cat $^ >$@ $(BATTRANSGFXDIR)/frontier_square_2.4bpp: $(BATTRANSGFXDIR)/frontier_squares_blanktiles.4bpp \ - $(BATTRANSGFXDIR)/frontier_squares_2.4bpp + $(BATTRANSGFXDIR)/frontier_squares_2.4bpp @cat $^ >$@ $(BATTRANSGFXDIR)/frontier_square_3.4bpp: $(BATTRANSGFXDIR)/frontier_squares_blanktiles.4bpp \ - $(BATTRANSGFXDIR)/frontier_squares_3.4bpp + $(BATTRANSGFXDIR)/frontier_squares_3.4bpp @cat $^ >$@ $(BATTRANSGFXDIR)/frontier_square_4.4bpp: $(BATTRANSGFXDIR)/frontier_squares_blanktiles.4bpp \ - $(BATTRANSGFXDIR)/frontier_squares_4.4bpp + $(BATTRANSGFXDIR)/frontier_squares_4.4bpp @cat $^ >$@ $(SLOTMACHINEGFXDIR)/reel_time_gfx.4bpp: $(SLOTMACHINEGFXDIR)/reel_time_pikachu.4bpp \ - $(SLOTMACHINEGFXDIR)/reel_time_machine.4bpp + $(SLOTMACHINEGFXDIR)/reel_time_machine.4bpp @cat $^ >$@ -$(UNUSEDGFXDIR)/intro_birch_beauty.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 822 +graphics/birch_speech/unused_beauty.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 822 -Wnum_tiles ### Pokémon Storage System ### $(WALLPAPERGFXDIR)/forest/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 55 + $(GFX) $< $@ -num_tiles 55 -Wnum_tiles $(WALLPAPERGFXDIR)/forest/tiles.4bpp: $(WALLPAPERGFXDIR)/forest/frame.4bpp $(WALLPAPERGFXDIR)/forest/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/city/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 52 + $(GFX) $< $@ -num_tiles 52 -Wnum_tiles $(WALLPAPERGFXDIR)/city/tiles.4bpp: $(WALLPAPERGFXDIR)/city/frame.4bpp $(WALLPAPERGFXDIR)/city/bg.4bpp @cat $^ >$@ @@ -505,97 +545,97 @@ $(WALLPAPERGFXDIR)/desert/tiles.4bpp: $(WALLPAPERGFXDIR)/desert/frame.4bpp $(WAL @cat $^ >$@ $(WALLPAPERGFXDIR)/savanna/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 45 + $(GFX) $< $@ -num_tiles 45 -Wnum_tiles $(WALLPAPERGFXDIR)/savanna/bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 23 + $(GFX) $< $@ -num_tiles 23 -Wnum_tiles $(WALLPAPERGFXDIR)/savanna/tiles.4bpp: $(WALLPAPERGFXDIR)/savanna/frame.4bpp $(WALLPAPERGFXDIR)/savanna/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/crag/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 49 + $(GFX) $< $@ -num_tiles 49 -Wnum_tiles $(WALLPAPERGFXDIR)/crag/tiles.4bpp: $(WALLPAPERGFXDIR)/crag/frame.4bpp $(WALLPAPERGFXDIR)/crag/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/volcano/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 56 + $(GFX) $< $@ -num_tiles 56 -Wnum_tiles $(WALLPAPERGFXDIR)/volcano/tiles.4bpp: $(WALLPAPERGFXDIR)/volcano/frame.4bpp $(WALLPAPERGFXDIR)/volcano/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/snow/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 57 + $(GFX) $< $@ -num_tiles 57 -Wnum_tiles $(WALLPAPERGFXDIR)/snow/tiles.4bpp: $(WALLPAPERGFXDIR)/snow/frame.4bpp $(WALLPAPERGFXDIR)/snow/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/cave/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 55 + $(GFX) $< $@ -num_tiles 55 -Wnum_tiles $(WALLPAPERGFXDIR)/cave/tiles.4bpp: $(WALLPAPERGFXDIR)/cave/frame.4bpp $(WALLPAPERGFXDIR)/cave/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/beach/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 46 + $(GFX) $< $@ -num_tiles 46 -Wnum_tiles $(WALLPAPERGFXDIR)/beach/bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 23 + $(GFX) $< $@ -num_tiles 23 -Wnum_tiles $(WALLPAPERGFXDIR)/beach/tiles.4bpp: $(WALLPAPERGFXDIR)/beach/frame.4bpp $(WALLPAPERGFXDIR)/beach/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/seafloor/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 54 + $(GFX) $< $@ -num_tiles 54 -Wnum_tiles $(WALLPAPERGFXDIR)/seafloor/tiles.4bpp: $(WALLPAPERGFXDIR)/seafloor/frame.4bpp $(WALLPAPERGFXDIR)/seafloor/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/river/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 51 + $(GFX) $< $@ -num_tiles 51 -Wnum_tiles $(WALLPAPERGFXDIR)/river/bg.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 11 + $(GFX) $< $@ -num_tiles 11 -Wnum_tiles $(WALLPAPERGFXDIR)/river/tiles.4bpp: $(WALLPAPERGFXDIR)/river/frame.4bpp $(WALLPAPERGFXDIR)/river/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/sky/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 45 + $(GFX) $< $@ -num_tiles 45 -Wnum_tiles $(WALLPAPERGFXDIR)/sky/tiles.4bpp: $(WALLPAPERGFXDIR)/sky/frame.4bpp $(WALLPAPERGFXDIR)/sky/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/polkadot/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 54 + $(GFX) $< $@ -num_tiles 54 -Wnum_tiles $(WALLPAPERGFXDIR)/polkadot/tiles.4bpp: $(WALLPAPERGFXDIR)/polkadot/frame.4bpp $(WALLPAPERGFXDIR)/polkadot/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/pokecenter/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 35 + $(GFX) $< $@ -num_tiles 35 -Wnum_tiles $(WALLPAPERGFXDIR)/pokecenter/tiles.4bpp: $(WALLPAPERGFXDIR)/pokecenter/frame.4bpp $(WALLPAPERGFXDIR)/pokecenter/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/machine/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 33 + $(GFX) $< $@ -num_tiles 33 -Wnum_tiles $(WALLPAPERGFXDIR)/machine/tiles.4bpp: $(WALLPAPERGFXDIR)/machine/frame.4bpp $(WALLPAPERGFXDIR)/machine/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/plain/frame.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 18 + $(GFX) $< $@ -num_tiles 18 -Wnum_tiles $(WALLPAPERGFXDIR)/plain/tiles.4bpp: $(WALLPAPERGFXDIR)/plain/frame.4bpp $(WALLPAPERGFXDIR)/plain/bg.4bpp @cat $^ >$@ $(WALLPAPERGFXDIR)/friends_frame1.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 57 + $(GFX) $< $@ -num_tiles 57 -Wnum_tiles $(WALLPAPERGFXDIR)/friends_frame2.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 57 + $(GFX) $< $@ -num_tiles 57 -Wnum_tiles $(WALLPAPERGFXDIR)/zigzagoon/tiles.4bpp: $(WALLPAPERGFXDIR)/friends_frame1.4bpp $(WALLPAPERGFXDIR)/zigzagoon/bg.4bpp @cat $^ >$@ @@ -646,47 +686,56 @@ $(WALLPAPERGFXDIR)/whiscash/tiles.4bpp: $(WALLPAPERGFXDIR)/friends_frame2.4bpp $ @cat $^ >$@ $(OBJEVENTGFXDIR)/pics/effects/unknown_4F6D38/0.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 11 + $(GFX) $< $@ -num_tiles 11 -Wnum_tiles $(INTERFACEGFXDIR)/selector_outline.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 8 + $(GFX) $< $@ -num_tiles 8 -Wnum_tiles $(BATTRANSGFXDIR)/frontier_logo_center.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 43 + $(GFX) $< $@ -num_tiles 43 -Wnum_tiles ### Pokenav ### $(PKNAVOPTIONSGFXDIR)/options.4bpp: $(PKNAVOPTIONSGFXDIR)/hoenn_map.4bpp \ - $(PKNAVOPTIONSGFXDIR)/condition.4bpp \ - $(PKNAVOPTIONSGFXDIR)/match_call.4bpp \ - $(PKNAVOPTIONSGFXDIR)/ribbons.4bpp \ - $(PKNAVOPTIONSGFXDIR)/switch_off.4bpp \ - $(PKNAVOPTIONSGFXDIR)/party.4bpp \ - $(PKNAVOPTIONSGFXDIR)/search.4bpp \ - $(PKNAVOPTIONSGFXDIR)/cool.4bpp \ - $(PKNAVOPTIONSGFXDIR)/beauty.4bpp \ - $(PKNAVOPTIONSGFXDIR)/cute.4bpp \ - $(PKNAVOPTIONSGFXDIR)/smart.4bpp \ - $(PKNAVOPTIONSGFXDIR)/tough.4bpp \ - $(PKNAVOPTIONSGFXDIR)/cancel.4bpp + $(PKNAVOPTIONSGFXDIR)/condition.4bpp \ + $(PKNAVOPTIONSGFXDIR)/match_call.4bpp \ + $(PKNAVOPTIONSGFXDIR)/ribbons.4bpp \ + $(PKNAVOPTIONSGFXDIR)/switch_off.4bpp \ + $(PKNAVOPTIONSGFXDIR)/party.4bpp \ + $(PKNAVOPTIONSGFXDIR)/search.4bpp \ + $(PKNAVOPTIONSGFXDIR)/cool.4bpp \ + $(PKNAVOPTIONSGFXDIR)/beauty.4bpp \ + $(PKNAVOPTIONSGFXDIR)/cute.4bpp \ + $(PKNAVOPTIONSGFXDIR)/smart.4bpp \ + $(PKNAVOPTIONSGFXDIR)/tough.4bpp \ + $(PKNAVOPTIONSGFXDIR)/cancel.4bpp @cat $^ >$@ $(PKNAVGFXDIR)/header.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 + $(GFX) $< $@ -num_tiles 53 -Wnum_tiles $(PKNAVGFXDIR)/device_outline.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 53 + $(GFX) $< $@ -num_tiles 53 -Wnum_tiles -$(PKNAVGFXDIR)/ui_matchcall.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 13 +$(PKNAVGFXDIR)/match_call/ui.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 13 -Wnum_tiles -$(INTERFACEGFXDIR)/region_map.8bpp: %.8bpp: %.png - $(GFX) $< $@ -num_tiles 232 +$(POKEDEXGFXDIR)/region_map.8bpp: %.8bpp: %.png + $(GFX) $< $@ -num_tiles 232 -Wnum_tiles -$(INTERFACEGFXDIR)/region_map_affine.8bpp: %.8bpp: %.png - $(GFX) $< $@ -num_tiles 233 +$(POKEDEXGFXDIR)/region_map_affine.8bpp: %.8bpp: %.png + $(GFX) $< $@ -num_tiles 233 -Wnum_tiles -$(MISCGFXDIR)/birch_help.4bpp: $(MISCGFXDIR)/birch_bag.4bpp $(MISCGFXDIR)/birch_grass.4bpp +$(STARTERGFXDIR)/birch_help.4bpp: $(STARTERGFXDIR)/birch_bag.4bpp $(STARTERGFXDIR)/birch_grass.4bpp @cat $^ >$@ + +$(NAMINGGFXDIR)/cursor.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 5 -Wnum_tiles + +$(NAMINGGFXDIR)/cursor_squished.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 5 -Wnum_tiles + +$(NAMINGGFXDIR)/cursor_filled.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 5 -Wnum_tiles diff --git a/include/AgbRfu_LinkManager.h b/include/AgbRfu_LinkManager.h index d4ef13183e..3b38b85fc9 100644 --- a/include/AgbRfu_LinkManager.h +++ b/include/AgbRfu_LinkManager.h @@ -120,10 +120,10 @@ typedef struct InitializeParametersTag { // rfu_REQ_configSystem argument u8 maxMFrame; // Maximum number of times to re-transmit of RFU level u8 MC_TimerCount; // MC_Timer count (x16.7ms) - u16 availSlot_flag; // Use RFU-API constant "AVAIL_SLOT1-4" to specify the maximum number of child devices (1 - 4) that can be connected to a parent device. + u16 availSlot_flag; // Use RFU-API constant "AVAIL_SLOT1-4" to specify the maximum number of child devices (1 - 4) that can be connected to a parent device. // rfu_REQB_configGameData argument - u8 mboot_flag; // Multiplayer boot flag + u8 mboot_flag; // Multiplayer boot flag u16 serialNo; // Game serial number u8 *gameName; // Game name u8 *userName; // User name @@ -132,8 +132,8 @@ typedef struct InitializeParametersTag { u8 fastSearchParent_flag; // Flag indicating whether parent fast search operation to be performed by child. // Link recovery settings - u8 linkRecovery_enable; // Determines whether or not to execute the link recovery process when a link cut occurs - u16 linkRecovery_period; // Time to spend on the link recovery process (x 16.7 ms) Note: Runs for unlimited time when specifying 0. + u8 linkRecovery_enable; // Determines whether or not to execute the link recovery process when a link cut occurs + u16 linkRecovery_period; // Time to spend on the link recovery process (x 16.7 ms) Note: Runs for unlimited time when specifying 0. // Setting for NI-type data transmit/receive period u16 NI_failCounter_limit; // Limit for failCounter during NI type data transmit/receive (x 16.7 ms) Note: Runs for unlimited time when specifying 0. @@ -142,44 +142,49 @@ typedef struct InitializeParametersTag { // Timer that counts with the V-Blank cycle typedef struct VblankTimerTag { - u8 active; // Timer ON/OFF (bits 0 - 3 indicate ON/OFF for each connected slot) - u16 count_max; // Maximum count value (x16.7ms) + u8 active; // Timer ON/OFF (bits 0 - 3 indicate ON/OFF for each connected slot) + u16 count_max; // Maximum count value (x16.7ms) u16 count[RFU_CHILD_MAX]; // Current count value (x 16.7 ms) for each connected slot }VBL_TIMER; typedef struct linkManagerTag { - /* 0x000 */ u8 acceptSlot_flag; - /* 0x001 */ u8 acceptCount; - /* 0x002 */ vu8 childClockSlave_flag; - /* 0x003 */ vu8 parentAck_flag; - /* 0x004 */ u8 state; - /* 0x005 */ u8 next_state; - /* 0x006 */ u8 parent_child; - /* 0x007 */ u8 pcswitch_flag; - /* 0x008 */ u8 RFU_powerOn_flag; - /* 0x009 */ u8 linkRecovery_enable; - /* 0x00a */ u8 linkRecovery_start_flag; - /* 0x00b */ u8 fastSearchParent_flag; - /* 0x00c */ u8 connectSlot_flag_old; - /* 0x00d */ u8 reserveDisconnectSlot_flag; - /* 0x00e */ u8 active; - /* 0x00f */ u8 msc_exe_flag; - /* 0x010 */ u8 child_slot; - /* 0x011 */ u8 state_bak[2]; - /* 0x014 */ u16 param[2]; - /* 0x018 */ u16 NI_failCounter_limit; - /* 0x01a */ u16 connect_period; - /* 0x01c */ u16 pcswitch_period_bak; - /* 0x01e */ u16 work; - /* 0x020 */ u16 *acceptable_serialNo_list; - /* 0x024 */ VBL_TIMER nameAcceptTimer; - /* 0x030 */ VBL_TIMER linkRecoveryTimer; - /* 0x03c */ INIT_PARAM *init_param; - /* 0x040 */ void (*LMAN_callback)(u8, u8); - /* 0x044 */ void (*MSC_callback)(u16); + u8 acceptSlot_flag; // Connection slot of child for which Link Manager accepted connection, expressed in bits. (This bit is not dropped for a broken link but is dropped with complete disconnection.) + u8 acceptCount; // Number of child devices for which connections accepted by Link Manager. + vu8 childClockSlave_flag; // Flag indicating whether AGB clock slave state is currently being maintained by child. + vu8 parentAck_flag; // Flag indicating the child devices for which the parent received ACK by UNI commmunication. + u8 state; // Current link manager state + u8 next_state; // State that the link manager transitions to when it is next called. + u8 parent_child; // Shows whether operating on a parent or child. + u8 pcswitch_flag; // Flag for parent-child switching search. + u8 RFU_powerOn_flag; // Flag indicating whether RFU has been powered down. + u8 linkRecovery_enable; // ON/OFF flag for the link recovery process. + u8 linkRecovery_start_flag; // Link recovery start flag + u8 fastSearchParent_flag; // ON/OFF flag for parent fast search by child. + u8 connectSlot_flag_old; // Value of rfuLinkStatus->connectSlot_flag (internally used by the API) when the link manager was called previously. + u8 reserveDisconnectSlot_flag; // Bit indication of the child slot that was reject by child connection authentication and is waiting for disconnect. + u8 active; // Link manager operating flag (internally used by the API) + u8 msc_exe_flag; // MSC callback executing flag (internally used by the API) + u8 child_slot; // Slot number where child device connected (internally used by the API) + u8 state_bak[2]; // Backup of link manager state (internally used by the API) + u16 param[2]; // Region where parameters returned when LMAN callback occurs are stored. + u16 NI_failCounter_limit; // Period of failCounter during NI type data transmit/receive (x 16.7 ms) Note: Runs for unlimited time when specifying 0 + u16 connect_period; // Count for the period to execute a connection process (x 16.7 ms). Note: Runs for unlimited time when specifying 0. + u16 pcswitch_period_bak; // Backup for No. 3 SC period during parent-child switching search. + u16 work; // Work region used by the link manager. + u16 *acceptable_serialNo_list; // List of game serial numbers that can accept connections. (See Note below) + VBL_TIMER nameAcceptTimer; // Timer for period to receive game names from child device. + VBL_TIMER linkRecoveryTimer; // Timer for the link recovery process period for both parent and child. Note: Runs for unlimited time when specifying 0. + INIT_PARAM *init_param; // Pointer to parameter when executing initial setting process. + void (*LMAN_callback)(u8 msg,u8 param_count); // Pointer to user-defined LMAN callback routine generated by link manager operation. + void (*MSC_callback)(u16 REQ_commandID); // User-defined MSC callback function. (When defining the link manager, defines the MSC callback using rfu_LMAN_initializeManager or rfu_LMAN_setMSCCallback without using rfu_setMSCCallback.) } LINK_MANAGER; +/* Note: The acceptable_serialNo_list uses the following format to specify a list of game serial numbers that the parent device can accept connections from and terminates with 0xffff. (maximum 16 devices) + + u16 acceptable_serialNo_list[]={0x0001, 0x0002, 0x0003, 0xffff}; +*/ + extern struct linkManagerTag lman; u32 rfu_LMAN_REQBN_softReset_and_checkID(void); diff --git a/include/apprentice.h b/include/apprentice.h index 27ce0371e0..582d41435e 100644 --- a/include/apprentice.h +++ b/include/apprentice.h @@ -16,7 +16,7 @@ struct ApprenticeTrainer extern const struct ApprenticeTrainer gApprentices[]; void BufferApprenticeChallengeText(u8 saveApprenticeId); -void Apprentice_EnableBothScriptContexts(void); +void Apprentice_ScriptContext_Enable(void); void ResetApprenticeStruct(struct Apprentice *apprentice); void ResetAllApprenticeData(void); void CallApprenticeFunction(void); diff --git a/include/battle.h b/include/battle.h index 14ecfbdd34..a51e9c631a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -12,11 +12,17 @@ #include "battle_util2.h" #include "battle_bg.h" #include "pokeball.h" +#include "battle_debug.h" #define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler]) #define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE) #define GET_BATTLER_SIDE2(battler) (GET_BATTLER_POSITION(battler) & BIT_SIDE) +// Used to exclude moves learned temporarily by Transform or Mimic +#define MOVE_IS_PERMANENT(battler, moveSlot) \ + (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) \ + && !(gDisableStructs[battler].mimickedMoves & gBitTable[moveSlot])) + // Battle Actions // These determine what each battler will do in a turn #define B_ACTION_USE_MOVE 0 @@ -32,43 +38,26 @@ #define B_ACTION_EXEC_SCRIPT 10 #define B_ACTION_TRY_FINISH 11 #define B_ACTION_FINISHED 12 - #define B_ACTION_CANCEL_PARTNER 12 // when choosing an action #define B_ACTION_NOTHING_FAINTED 13 // when choosing an action +#define B_ACTION_DEBUG 20 +#define B_ACTION_THROW_BALL 21 // R to throw last used ball #define B_ACTION_NONE 0xFF -#define MAX_TRAINER_ITEMS 4 - -// array entries for battle communication -#define MULTIUSE_STATE 0 -#define CURSOR_POSITION 1 -#define TASK_ID 1 // task Id and cursor position share the same field -#define SPRITES_INIT_STATE1 1 // shares the Id as well -#define SPRITES_INIT_STATE2 2 -#define MOVE_EFFECT_BYTE 3 -#define ACTIONS_CONFIRMED_COUNT 4 -#define MULTISTRING_CHOOSER 5 -#define MISS_TYPE 6 -#define MSG_DISPLAY 7 -#define BATTLE_COMMUNICATION_ENTRIES_COUNT 8 - -#define MOVE_TARGET_SELECTED 0x0 -#define MOVE_TARGET_DEPENDS 0x1 -#define MOVE_TARGET_USER_OR_SELECTED 0x2 -#define MOVE_TARGET_RANDOM 0x4 -#define MOVE_TARGET_BOTH 0x8 -#define MOVE_TARGET_USER 0x10 -#define MOVE_TARGET_FOES_AND_ALLY 0x20 -#define MOVE_TARGET_OPPONENTS_FIELD 0x40 - #define BATTLE_BUFFER_LINK_SIZE 0x1000 struct ResourceFlags { - u32 flags[4]; + u32 flags[MAX_BATTLERS_COUNT]; }; -#define RESOURCE_FLAG_FLASH_FIRE 1 +#define RESOURCE_FLAG_FLASH_FIRE 0x1 +#define RESOURCE_FLAG_ROOST 0x2 +#define RESOURCE_FLAG_UNBURDEN 0x4 +#define RESOURCE_FLAG_INTIMIDATED 0x8 +#define RESOURCE_FLAG_TRACED 0x10 +#define RESOURCE_FLAG_EMERGENCY_EXIT 0x20 +#define RESOURCE_FLAG_NEUTRALIZING_GAS 0x40 struct DisableStruct { @@ -77,11 +66,14 @@ struct DisableStruct u16 encoredMove; u8 protectUses; u8 stockpileCounter; + s8 stockpileDef; + s8 stockpileSpDef; + s8 stockpileBeforeDef; + s8 stockpileBeforeSpDef; u8 substituteHP; u8 disableTimer:4; u8 disableTimerStartValue:4; u8 encoredMovePos; - u8 filler_D; // Unused field. u8 encoreTimer:4; u8 encoreTimerStartValue:4; u8 perishSongTimer:4; @@ -96,28 +88,42 @@ struct DisableStruct u8 battlerPreventingEscape; u8 battlerWithSureHit; u8 isFirstTurn; - u8 filler_17; // Unused field. u8 truantCounter:1; u8 truantSwitchInHack:1; - u8 filler_18_2:2; // Unused field. u8 mimickedMoves:4; u8 rechargeTimer; + u8 autotomizeCount; + u8 slowStartTimer; + u8 embargoTimer; + u8 magnetRiseTimer; + u8 telekinesisTimer; + u8 healBlockTimer; + u8 laserFocusTimer; + u8 throatChopTimer; + u8 usedMoves:4; + u8 wrapTurns; + u8 noRetreat:1; + u8 tarShot:1; + u8 octolock:1; }; struct ProtectStruct { u32 protected:1; + u32 spikyShielded:1; + u32 kingsShielded:1; + u32 banefulBunkered:1; + u32 obstructed:1; u32 endured:1; u32 noValidMoves:1; u32 helpingHand:1; u32 bounceMove:1; u32 stealMove:1; - u32 flag0Unknown:1; // Only set to 0 once. u32 prlzImmobility:1; u32 confusionSelfDmg:1; - u32 targetNotAffected:1; + u32 targetAffected:1; u32 chargingTurn:1; - u32 fleeFlag:2; // For RunAway and Smoke Ball. + u32 fleeType:2; // 0: Normal, 1: FLEE_ITEM, 2: FLEE_ABILITY u32 usedImprisonedMove:1; u32 loveImmobility:1; u32 usedDisabledMove:1; @@ -126,6 +132,22 @@ struct ProtectStruct u32 flinchImmobility:1; u32 notFirstStrike:1; u32 palaceUnableToUseMove:1; + u32 usesBouncedMove:1; + u32 usedHealBlockedMove:1; + u32 usedGravityPreventedMove:1; + u32 powderSelfDmg:1; + u32 usedThroatChopPreventedMove:1; + u32 statRaised:1; + u32 usedMicleBerry:1; + u32 usedCustapBerry:1; // also quick claw + u32 touchedProtectLike:1; + // End of 32-bit bitfield + u16 disableEjectPack:1; + u16 statFell:1; + u16 pranksterElevated:1; + u16 quickDraw:1; + u16 beakBlastCharge:1; + u16 quash:1; u32 physicalDmg; u32 specialDmg; u8 physicalBattlerId; @@ -134,19 +156,36 @@ struct ProtectStruct struct SpecialStatus { - u32 statLowered:1; - u32 lightningRodRedirected:1; - u32 restoredBattlerSprite: 1; - u32 intimidatedMon:1; - u32 traced:1; - u32 ppNotAffectedByPressure:1; - u32 flag40:1; - u32 focusBanded:1; + u8 statLowered:1; + u8 lightningRodRedirected:1; + u8 restoredBattlerSprite: 1; + u8 intimidatedMon:1; + u8 traced:1; + u8 ppNotAffectedByPressure:1; + u8 faintedHasReplacement:1; + u8 focusBanded:1; + u8 focusSashed:1; + u8 sturdied:1; + u8 stormDrainRedirected:1; + u8 switchInAbilityDone:1; + u8 switchInItemDone:1; + u8 instructedChosenTarget:3; + u8 berryReduced:1; + u8 gemBoost:1; + u8 rototillerAffected:1; // to be affected by rototiller + u8 gemParam; + u8 damagedMons:4; // Mons that have been damaged directly by using a move, includes substitute. + u8 dancerUsedMove:1; + u8 dancerOriginalTarget:3; + u8 announceNeutralizingGas:1; // See Cmd_switchineffects + u8 neutralizingGasRemoved:1; // See VARIOUS_TRY_END_NEUTRALIZING_GAS + u8 affectionEndured:1; s32 dmg; s32 physicalDmg; s32 specialDmg; u8 physicalBattlerId; u8 specialBattlerId; + u8 changedStatsBattlerId; // Battler that was responsible for the latest stat change. Can be self. }; struct SideTimer @@ -159,23 +198,69 @@ struct SideTimer u8 mistBattlerId; u8 safeguardTimer; u8 safeguardBattlerId; - u8 followmeTimer; - u8 followmeTarget; u8 spikesAmount; + u8 toxicSpikesAmount; + u8 stealthRockAmount; + u8 stickyWebAmount; + u8 stickyWebBattlerSide; // Used for Court Change + u8 auroraVeilTimer; + u8 auroraVeilBattlerId; + u8 tailwindTimer; + u8 tailwindBattlerId; + u8 luckyChantTimer; + u8 luckyChantBattlerId; + // Timers below this point are not swapped by Court Change + u8 followmeTimer; + u8 followmeTarget:3; + u8 followmePowder:1; // Rage powder, does not affect grass type pokemon. + u8 retaliateTimer; +}; + +struct FieldTimer +{ + u8 mudSportTimer; + u8 waterSportTimer; + u8 wonderRoomTimer; + u8 magicRoomTimer; + u8 trickRoomTimer; + u8 terrainTimer; + u8 gravityTimer; + u8 fairyLockTimer; }; struct WishFutureKnock { u8 futureSightCounter[MAX_BATTLERS_COUNT]; u8 futureSightAttacker[MAX_BATTLERS_COUNT]; - s32 futureSightDmg[MAX_BATTLERS_COUNT]; u16 futureSightMove[MAX_BATTLERS_COUNT]; u8 wishCounter[MAX_BATTLERS_COUNT]; - u8 wishMonId[MAX_BATTLERS_COUNT]; + u8 wishPartyId[MAX_BATTLERS_COUNT]; u8 weatherDuration; u8 knockedOffMons[2]; // Each battler is represented by a bit. The array entry is dependent on the battler's side. }; +struct AI_SavedBattleMon +{ + u16 ability; + u16 moves[MAX_MON_MOVES]; + u16 heldItem; + u16 species; +}; + +struct AiLogicData +{ + u16 abilities[MAX_BATTLERS_COUNT]; + u16 items[MAX_BATTLERS_COUNT]; + u16 holdEffects[MAX_BATTLERS_COUNT]; + u8 holdEffectParams[MAX_BATTLERS_COUNT]; + u16 predictedMoves[MAX_BATTLERS_COUNT]; + u8 hpPercents[MAX_BATTLERS_COUNT]; + u16 partnerMove; + s32 simulatedDmg[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex + u8 effectiveness[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex + u8 moveLimitations[MAX_BATTLERS_COUNT]; +}; + struct AI_ThinkingStruct { u8 aiState; @@ -186,23 +271,22 @@ struct AI_ThinkingStruct u32 aiFlags; u8 aiAction; u8 aiLogicId; - u8 filler12[6]; - u8 simulatedRNG[MAX_MON_MOVES]; + struct AI_SavedBattleMon saved[4]; + bool8 switchMon; // Because all available moves have no/little effect. }; -struct UsedMoves -{ - u16 moves[MAX_MON_MOVES]; - u16 unknown[MAX_MON_MOVES]; -}; +#define AI_MOVE_HISTORY_COUNT 3 struct BattleHistory { - struct UsedMoves usedMoves[MAX_BATTLERS_COUNT]; - u8 abilities[MAX_BATTLERS_COUNT]; + u16 abilities[MAX_BATTLERS_COUNT]; u8 itemEffects[MAX_BATTLERS_COUNT]; + u16 usedMoves[MAX_BATTLERS_COUNT][MAX_MON_MOVES]; + u16 moveHistory[MAX_BATTLERS_COUNT][AI_MOVE_HISTORY_COUNT]; // 3 last used moves for each battler + u8 moveHistoryIndex[MAX_BATTLERS_COUNT]; u16 trainerItems[MAX_BATTLERS_COUNT]; u8 itemsNo; + u16 heldItems[MAX_BATTLERS_COUNT]; }; struct BattleScriptsStack @@ -230,10 +314,16 @@ struct BattleResources struct BattleCallbacksStack* battleCallbackStack; struct StatsArray* beforeLvlUp; struct AI_ThinkingStruct *ai; + struct AiLogicData *aiData; struct BattleHistory *battleHistory; - struct BattleScriptsStack *AI_ScriptsStack; + u8 bufferA[MAX_BATTLERS_COUNT][0x200]; + u8 bufferB[MAX_BATTLERS_COUNT][0x200]; }; +#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gBattleResources->ai)) +#define AI_DATA ((struct AiLogicData *)(gBattleResources->aiData)) +#define BATTLE_HISTORY ((struct BattleHistory *)(gBattleResources->battleHistory)) + struct BattleResults { u8 playerFaintCounter; // 0x0 @@ -242,7 +332,6 @@ struct BattleResults u8 numHealingItemsUsed; // 0x3 u8 numRevivesUsed; // 0x4 u8 playerMonWasDamaged:1; // 0x5 - u8 usedMasterBall:1; // 0x5 u8 caughtMonBall:4; // 0x5 u8 shinyWildMon:1; // 0x5 u16 playerMon1Species; // 0x6 @@ -257,7 +346,7 @@ struct BattleResults u16 caughtMonSpecies; // 0x28 u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A u8 filler35; // 0x35 - u8 catchAttempts[POKEBALL_COUNT - 1]; // 0x36 Doesn't include Master ball + u8 catchAttempts[POKEBALL_COUNT]; // 0x36 }; struct BattleTv_Side @@ -354,37 +443,86 @@ struct LinkBattlerHeader struct BattleEnigmaBerry battleEnigmaBerry; }; +struct MegaEvolutionData +{ + u8 toEvolve; // As flags using gBitTable. + u8 evolvedPartyIds[2]; // As flags using gBitTable; + bool8 alreadyEvolved[4]; // Array id is used for mon position. + u16 evolvedSpecies[MAX_BATTLERS_COUNT]; + u16 playerEvolvedSpecies; + u8 primalRevertedPartyIds[2]; // As flags using gBitTable; + u16 primalRevertedSpecies[MAX_BATTLERS_COUNT]; + u16 playerPrimalRevertedSpecies; + u8 battlerId; + bool8 playerSelect; + u8 triggerSpriteId; + bool8 isWishMegaEvo; +}; + +struct Illusion +{ + u8 on; + u8 set; + u8 broken; + u8 partyId; + struct Pokemon *mon; +}; + +struct ZMoveData +{ + 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 activeSplit:2; // active z move split + u8 zUnused:1; + u8 triggerSpriteId; + 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 splits[MAX_BATTLERS_COUNT]; +}; + +struct StolenItem +{ + u16 originalItem:15; + u16 stolen:1; +}; + struct BattleStruct { u8 turnEffectsTracker; u8 turnEffectsBattlerId; - u8 unused_0; u8 turnCountersTracker; - u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access. - u8 moveTarget[MAX_BATTLERS_COUNT]; + u16 wrappedMove[MAX_BATTLERS_COUNT]; + u16 moveTarget[MAX_BATTLERS_COUNT]; u8 expGetterMonId; - u8 unused_1; u8 wildVictorySong; u8 dynamicMoveType; u8 wrappedBy[MAX_BATTLERS_COUNT]; u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // Each of mons can know max 4 moves. u8 focusPunchBattlerId; u8 battlerPreventingSwitchout; - u8 moneyMultiplier; + u8 moneyMultiplier:6; + u8 moneyMultiplierItem:1; + u8 moneyMultiplierMove:1; u8 savedTurnActionNumber; u8 switchInAbilitiesCounter; u8 faintedActionsState; u8 faintedActionsBattlerId; - u16 expValue; + u32 expValue; u8 field_52; u8 sentInPokes; bool8 selectionScriptFinished[MAX_BATTLERS_COUNT]; - u8 field_58[4]; + u8 battlerPartyIndexes[MAX_BATTLERS_COUNT]; u8 monToSwitchIntoId[MAX_BATTLERS_COUNT]; - u8 field_60[4][3]; + u8 battlerPartyOrders[MAX_BATTLERS_COUNT][PARTY_SIZE / 2]; u8 runTries; u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; - u8 unused_2; u8 safariGoNearCounter; u8 safariPkblThrowCounter; u8 safariEscapeFactor; @@ -394,29 +532,26 @@ struct BattleStruct u8 formToChangeInto; u8 chosenMovePositions[MAX_BATTLERS_COUNT]; u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT]; - u8 unused_3[3]; u8 prevSelectedPartySlot; - u8 unused_4[2]; u8 stringMoveType; u8 expGetterBattlerId; - u8 unused_5; - u8 field_91; // related to gAbsentBattlerFlags, possibly absent flags turn ago? + u8 absentBattlerFlags; u8 palaceFlags; // First 4 bits are "is < 50% HP and not asleep" for each battler, last 4 bits are selected moves to pass to AI u8 field_93; // related to choosing pokemon? u8 wallyBattleState; u8 wallyMovesState; u8 wallyWaitFrames; u8 wallyMoveFrames; - u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // Last move that a battler was hit with. This field seems to erroneously take 16 bytes instead of 8. + u16 lastTakenMove[MAX_BATTLERS_COUNT]; // Last move that a battler was hit with. u16 hpOnSwitchout[2]; u32 savedBattleTypeFlags; - u8 abilityPreventingSwitchout; + u16 abilityPreventingSwitchout; u8 hpScale; - u8 synchronizeMoveEffect; + u16 synchronizeMoveEffect; bool8 anyMonHasTransformed; void (*savedCallback)(void); - u16 usedHeldItems[MAX_BATTLERS_COUNT]; - u8 chosenItem[MAX_BATTLERS_COUNT]; // why is this an u8? + u16 usedHeldItems[PARTY_SIZE][2]; // For each party member and side. For harvest, recycle + u16 chosenItem[MAX_BATTLERS_COUNT]; u8 AI_itemType[2]; u8 AI_itemFlags[2]; u16 choicedMove[MAX_BATTLERS_COUNT]; @@ -425,10 +560,9 @@ struct BattleStruct u8 switchInItemsCounter; u8 arenaTurnCounter; u8 turnSideTracker; - u8 unused_6[3]; u8 givenExpMons; // Bits for enemy party's pokemon that gave exp to player's party. - u8 lastTakenMoveFrom[MAX_BATTLERS_COUNT * MAX_BATTLERS_COUNT * 2]; // a 3-D array [target][attacker][byte] - u16 castformPalette[MAX_BATTLERS_COUNT][16]; + u16 lastTakenMoveFrom[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; // a 2-D array [target][attacker] + u16 castformPalette[NUM_CASTFORM_FORMS][16]; union { struct LinkBattlerHeader linkBattlerHeader; u32 battleVideo[2]; @@ -436,10 +570,10 @@ struct BattleStruct u8 wishPerishSongState; u8 wishPerishSongBattlerId; bool8 overworldWeatherDone; + bool8 terrainDone; u8 atkCancellerTracker; struct BattleTvMovePoints tvMovePoints; struct BattleTv tv; - u8 unused_7[0x28]; u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT]; s8 arenaMindPoints[2]; s8 arenaSkillPoints[2]; @@ -447,50 +581,114 @@ struct BattleStruct u8 arenaLostPlayerMons; // Bits for party member, lost as in referee's decision, not by fainting. u8 arenaLostOpponentMons; u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed pokemon. + u8 debugBattler; + u8 magnitudeBasePower; + u8 presentBasePower; + u8 roostTypes[MAX_BATTLERS_COUNT][3]; + u8 savedBattlerTarget; + 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 ZMoveData zmove; + const u8 *trainerSlideMsg; + bool8 trainerSlideLowHpMsgDone; + u8 introState; + u8 ateBerry[2]; // array id determined by side, each party pokemon as bit + u8 stolenStats[NUM_BATTLE_STATS]; // hp byte is used for which stats to raise, other inform about by how many stages + u8 lastMoveFailed; // as bits for each battler, for the sake of Stomping Tantrum + u8 lastMoveTarget[MAX_BATTLERS_COUNT]; // The last target on which each mon used a move, for the sake of Instruct + u8 debugHoldEffects[MAX_BATTLERS_COUNT]; // These override actual items' hold effects. + u16 tracedAbility[MAX_BATTLERS_COUNT]; + u16 hpBefore[MAX_BATTLERS_COUNT]; // Hp of battlers before using a move. For Berserk + bool8 spriteIgnore0Hp; + struct Illusion illusion[MAX_BATTLERS_COUNT]; + s8 aiFinalScore[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // AI, target, moves to make debugging easier + u8 aiMoveOrAction[MAX_BATTLERS_COUNT]; + u8 aiChosenTarget[MAX_BATTLERS_COUNT]; + u8 soulheartBattlerId; + u8 friskedBattler; // Frisk needs to identify 2 battlers in double battles. + bool8 friskedAbility; // If identifies two mons, show the ability pop-up only once. + u8 sameMoveTurns[MAX_BATTLERS_COUNT]; // For Metronome, number of times the same moves has been SUCCESFULLY used. + u16 moveEffect2; // For Knock Off + u16 changedSpecies[PARTY_SIZE]; // For Zygarde or future forms when multiple mons can change into the same pokemon. + u8 quickClawBattlerId; + struct StolenItem itemStolen[PARTY_SIZE]; // Player's team that had items stolen (two bytes per party member) + u8 blunderPolicy:1; // should blunder policy activate + u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky + u8 ballSpriteIds[2]; // item gfx, window gfx + u8 stickyWebUser; + 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. + // When using a move which hits multiple opponents which is then bounced by a target, we need to make sure, the move hits both opponents, the one with bounce, and the one without. + u8 attackerBeforeBounce:2; + u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit. }; -#define GET_MOVE_TYPE(move, typeArg) \ -{ \ - if (gBattleStruct->dynamicMoveType) \ - typeArg = gBattleStruct->dynamicMoveType & 0x3F; \ - else \ - typeArg = gBattleMoves[move].type; \ +#define F_DYNAMIC_TYPE_1 (1 << 6) +#define F_DYNAMIC_TYPE_2 (1 << 7) +#define DYNAMIC_TYPE_MASK (F_DYNAMIC_TYPE_1 - 1) + +#define GET_MOVE_TYPE(move, typeArg) \ +{ \ + if (gBattleStruct->dynamicMoveType) \ + typeArg = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; \ + else \ + typeArg = gBattleMoves[move].type; \ } -#define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY) -#define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY) +#define IS_MOVE_PHYSICAL(move)(GetBattleMoveSplit(move) == SPLIT_PHYSICAL) +#define IS_MOVE_SPECIAL(move)(GetBattleMoveSplit(move) == SPLIT_SPECIAL) +#define IS_MOVE_STATUS(move)(gBattleMoves[move].split == SPLIT_STATUS) +#define BATTLER_MAX_HP(battlerId)(gBattleMons[battlerId].hp == gBattleMons[battlerId].maxHP) #define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0)) +#define BATTLER_DAMAGED(battlerId) ((gSpecialStatuses[battlerId].physicalDmg != 0 || gSpecialStatuses[battlerId].specialDmg != 0)) -#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type)) -#define SET_BATTLER_TYPE(battlerId, type) \ -{ \ - gBattleMons[battlerId].type1 = type; \ - gBattleMons[battlerId].type2 = type; \ +#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type || (gBattleMons[battlerId].type3 != TYPE_MYSTERY && gBattleMons[battlerId].type3 == type))) +#define SET_BATTLER_TYPE(battlerId, type) \ +{ \ + gBattleMons[battlerId].type1 = type; \ + gBattleMons[battlerId].type2 = type; \ + gBattleMons[battlerId].type3 = TYPE_MYSTERY; \ } -#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8 -#define GET_STAT_BUFF_VALUE2(n)((n & 0xF0)) -#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40 +#define IS_BATTLER_PROTECTED(battlerId)(gProtectStructs[battlerId].protected \ + || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD \ + || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_QUICK_GUARD \ + || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_CRAFTY_SHIELD \ + || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_MAT_BLOCK \ + || gProtectStructs[battlerId].spikyShielded \ + || gProtectStructs[battlerId].kingsShielded \ + || gProtectStructs[battlerId].banefulBunkered \ + || gProtectStructs[battlerId].obstructed) \ + +#define GET_STAT_BUFF_ID(n)((n & 7)) // first three bits 0x1, 0x2, 0x4 +#define GET_STAT_BUFF_VALUE_WITH_SIGN(n)((n & 0xF8)) +#define GET_STAT_BUFF_VALUE(n)(((n >> 3) & 0xF)) // 0x8, 0x10, 0x20, 0x40 #define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit -#define SET_STAT_BUFF_VALUE(n)((((n) << 4) & 0xF0)) +#define SET_STAT_BUFF_VALUE(n)((((n) << 3) & 0xF8)) -#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7)) +#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + ((stage) << 3) + (goesDown << 7)) +#define SET_STATCHANGER2(dst, statId, stage, goesDown)(dst = (statId) + ((stage) << 3) + (goesDown << 7)) +// NOTE: The members of this struct have hard-coded offsets +// in include/constants/battle_script_commands.h struct BattleScripting { s32 painSplitHp; s32 bideDmg; u8 multihitString[6]; - u8 dmgMultiplier; + bool8 expOnCatch; u8 twoTurnsMoveStringId; u8 animArg1; u8 animArg2; u16 tripleKickPower; u8 moveendState; - u8 battlerWithAbility; - u8 multihitMoveEffect; + u8 savedStatChanger; // For further use, if attempting to change stat two times(ex. Moody) + u8 shiftSwitched; // When the game tells you the next enemy's pokemon and you switch. Option for noobs but oh well. u8 battler; u8 animTurn; u8 animTargetsHit; @@ -500,18 +698,26 @@ struct BattleScripting u8 battleStyle; u8 drawlvlupboxState; u8 learnMoveState; - u8 field_20; + u8 savedBattler; u8 reshowMainState; u8 reshowHelperState; u8 levelUpHP; - u8 windowsType; // 0 - normal, 1 - battle arena + u8 windowsType; // B_WIN_TYPE_* u8 multiplayerId; u8 specialTrainerBattleType; + bool8 monCaught; + s32 savedDmg; + u16 savedMoveEffect; // For moves hitting multiple targets. + u16 moveEffect; + u16 multihitMoveEffect; + u8 illusionNickHack; // To properly display nick in STRINGID_ENEMYABOUTTOSWITCHPKMN. + bool8 fixedPopup; // Force ability popup to stick until manually called back + u16 abilityPopupOverwrite; + u8 switchCase; // Special switching conditions, eg. red card + u8 overrideBerryRequirements; + u8 stickyWebStatDrop; // To prevent Defiant activating on a Court Change'd Sticky Web }; -// rom_80A5C6C - - struct BattleSpriteInfo { u16 invisible:1; // 0x1 @@ -531,7 +737,9 @@ struct BattleAnimationInfo u8 field_5; u8 field_6; u8 field_7; - u8 ballThrowCaseId; + u8 ballThrowCaseId:6; + u8 isCriticalCapture:1; + u8 criticalCaptureSuccess:1; u8 introAnimActive:1; u8 wildMonInvisible:1; u8 field_9_x1C:3; @@ -593,20 +801,25 @@ struct BattleSpriteData struct MonSpritesGfx { - void* firstDecompressed; // ptr to the decompressed sprite of the first pokemon - union - { - void* ptr[4]; - u8* byte[4]; + void *firstDecompressed; // ptr to the decompressed sprite of the first pokemon + union { + void *ptr[MAX_BATTLERS_COUNT]; + u8 *byte[MAX_BATTLERS_COUNT]; } sprites; - struct SpriteTemplate templates[4]; - struct SpriteFrameImage field_74[4][4]; - u8 field_F4[0x80]; + struct SpriteTemplate templates[MAX_BATTLERS_COUNT]; + struct SpriteFrameImage frameImages[MAX_BATTLERS_COUNT][4]; + u8 unusedArr[0x80]; u8 *barFontGfx; - void *field_178; + void *unusedPtr; u16 *buffer; }; +struct TotemBoost +{ + u8 stats; // bitfield for each battle stat that is set if the stat changes + s8 statChanges[NUM_BATTLE_STATS - 1]; // highest bit being set decreases the stat +}; /* size = 8 */ + // All battle variables are declared in battle_main.c extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; @@ -620,17 +833,15 @@ extern u16 gBattle_WIN0H; extern u16 gBattle_WIN0V; extern u16 gBattle_WIN1H; extern u16 gBattle_WIN1V; -extern u8 gDisplayedStringBattle[300]; +extern u8 gDisplayedStringBattle[400]; extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT]; extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT]; -extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT]; +extern u8 gBattleTextBuff3[30]; //to handle stupidly large z move names extern u32 gBattleTypeFlags; extern u8 gBattleTerrain; extern u32 gUnusedFirstBattleVar1; -extern u8 *gUnknown_0202305C; -extern u8 *gUnknown_02023060; -extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200]; -extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200]; +extern u8 *gBattleAnimBgTileBuffer; +extern u8 *gBattleAnimBgTilemapBuffer; extern u8 gActiveBattler; extern u32 gBattleControllerExecFlags; extern u8 gBattlersCount; @@ -651,17 +862,16 @@ extern s32 gBattleMoveDamage; extern s32 gHpDealt; extern s32 gTakenDmg[MAX_BATTLERS_COUNT]; extern u16 gLastUsedItem; -extern u8 gLastUsedAbility; +extern u16 gLastUsedAbility; extern u8 gBattlerAttacker; extern u8 gBattlerTarget; extern u8 gBattlerFainted; extern u8 gEffectBattler; extern u8 gPotentialItemEffectBattler; extern u8 gAbsentBattlerFlags; -extern u8 gCritMultiplier; +extern u8 gIsCriticalHit; extern u8 gMultiHitCounter; extern const u8 *gBattlescriptCurrInstr; -extern u32 gUnusedBattleMainVar; extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT]; extern const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT]; extern const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT]; @@ -671,15 +881,17 @@ extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT]; extern u16 gLastHitByType[MAX_BATTLERS_COUNT]; extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT]; extern u16 gLockedMoves[MAX_BATTLERS_COUNT]; +extern u16 gLastUsedMove; extern u8 gLastHitBy[MAX_BATTLERS_COUNT]; extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT]; -extern u8 gMoveResultFlags; +extern u16 gMoveResultFlags; extern u32 gHitMarker; extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT]; extern u8 gUnusedFirstBattleVar2; -extern u16 gSideStatuses[2]; +extern u32 gSideStatuses[2]; extern struct SideTimer gSideTimers[2]; extern u32 gStatuses3[MAX_BATTLERS_COUNT]; +extern u32 gStatuses4[MAX_BATTLERS_COUNT]; extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT]; extern u16 gPauseCounterBattle; extern u16 gPaydayMoney; @@ -692,7 +904,6 @@ extern u16 gBattleWeather; extern struct WishFutureKnock gWishFutureKnock; extern u16 gIntroSlideFlags; extern u8 gSentPokesToOpponent[2]; -extern u16 gDynamicBasePower; extern u16 gExpShareExp; extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT]; extern struct BattleScripting gBattleScripting; @@ -714,6 +925,11 @@ extern struct BattleHealthboxInfo *gBattleControllerOpponentFlankHealthboxData; extern u16 gBattleMovePower; extern u16 gMoveToLearn; extern u8 gBattleMonForms[MAX_BATTLERS_COUNT]; +extern u32 gFieldStatuses; +extern struct FieldTimer gFieldTimers; +extern u8 gBattlerAbility; +extern u16 gPartnerSpriteId; +extern struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT]; extern void (*gPreBattleCallback1)(void); extern void (*gBattleMainFunc)(void); @@ -724,5 +940,9 @@ extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; extern u8 gMultiUsePlayerCursor; extern u8 gNumberOfMovesToChoose; extern u8 gBattleControllerData[MAX_BATTLERS_COUNT]; +extern bool8 gHasFetchedBall; +extern u8 gLastUsedBall; +extern u16 gLastThrownBall; +extern u8 gPartyCriticalHits[PARTY_SIZE]; #endif // GUARD_BATTLE_H diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h new file mode 100644 index 0000000000..fcb31a9b2b --- /dev/null +++ b/include/battle_ai_main.h @@ -0,0 +1,31 @@ +#ifndef GUARD_BATTLE_AI_MAIN_H +#define GUARD_BATTLE_AI_MAIN_H + +// return values for BattleAI_ChooseMoveOrAction +// 0 - 3 are move idx +#define AI_CHOICE_FLEE 4 +#define AI_CHOICE_WATCH 5 +#define AI_CHOICE_SWITCH 7 + +#define RETURN_SCORE_PLUS(val) \ +{ \ + score += val; \ + return score; \ +} + +#define RETURN_SCORE_MINUS(val) \ +{ \ + score -= val; \ + return score; \ +} + +u8 ComputeBattleAiScores(u8 battler); +void BattleAI_SetupItems(void); +void BattleAI_SetupFlags(void); +void BattleAI_SetupAIData(u8 defaultScoreMoves); +u8 BattleAI_ChooseMoveOrAction(void); +void GetAiLogicData(void); + +extern u8 sBattler_AI; + +#endif // GUARD_BATTLE_AI_MAIN_H diff --git a/include/battle_ai_script_commands.h b/include/battle_ai_script_commands.h deleted file mode 100644 index d23ad048a5..0000000000 --- a/include/battle_ai_script_commands.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef GUARD_BATTLE_AI_SCRIPT_COMMANDS_H -#define GUARD_BATTLE_AI_SCRIPT_COMMANDS_H - -// return values for BattleAI_ChooseMoveOrAction -// 0 - 3 are move idx -#define AI_CHOICE_FLEE 4 -#define AI_CHOICE_WATCH 5 - -void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves); -void BattleAI_SetupAIData(u8 defaultScoreMoves); -u8 BattleAI_ChooseMoveOrAction(void); -void ClearBattlerMoveHistory(u8 battlerId); -void RecordAbilityBattle(u8 battlerId, u8 abilityId); -void ClearBattlerAbilityHistory(u8 battlerId); -void RecordItemEffectBattle(u8 battlerId, u8 itemEffect); -void ClearBattlerItemEffectHistory(u8 battlerId); - -#endif // GUARD_BATTLE_AI_SCRIPT_COMMANDS_H diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index a0b6fe62c3..70dc41b34b 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -31,7 +31,9 @@ enum { AI_DIRE_HIT, }; +void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId); void AI_TrySwitchOrUseItem(void); u8 GetMostSuitableMonToSwitchInto(void); +bool32 ShouldSwitch(void); #endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h new file mode 100644 index 0000000000..5e66577e30 --- /dev/null +++ b/include/battle_ai_util.h @@ -0,0 +1,177 @@ +#ifndef GUARD_BATTLE_AI_UTIL_H +#define GUARD_BATTLE_AI_UTIL_H + +// for AI_WhoStrikesFirst +#define AI_IS_FASTER 0 +#define AI_IS_SLOWER 1 + +#define FOE(battler) ((battler ^ BIT_SIDE) & BIT_SIDE) + +bool32 AI_RandLessThan(u8 val); +void RecordLastUsedMoveByTarget(void); +bool32 IsBattlerAIControlled(u32 battlerId); +void ClearBattlerMoveHistory(u8 battlerId); +void RecordLastUsedMoveBy(u32 battlerId, u32 move); +void RecordKnownMove(u8 battlerId, u32 move); +void RecordAbilityBattle(u8 battlerId, u16 abilityId); +void ClearBattlerAbilityHistory(u8 battlerId); +void RecordItemEffectBattle(u8 battlerId, u8 itemEffect); +void ClearBattlerItemEffectHistory(u8 battlerId); +void SaveBattlerData(u8 battlerId); +void SetBattlerData(u8 battlerId); +void RestoreBattlerData(u8 battlerId); +u16 GetAIChosenMove(u8 battlerId); + +bool32 WillAIStrikeFirst(void); +u32 GetTotalBaseStat(u32 species); +bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler); +bool32 AtMaxHp(u8 battler); +u32 GetHealthPercentage(u8 battler); +bool32 IsBattlerTrapped(u8 battler, bool8 switching); +u8 AI_WhoStrikesFirst(u8 battlerAI, u8 battler2, u16 consideredMove); +bool32 CanTargetFaintAi(u8 battlerDef, u8 battlerAtk); +bool32 CanMoveFaintBattler(u16 move, u8 battlerDef, u8 battlerAtk, u8 nHits); +bool32 CanTargetFaintAiWithMod(u8 battlerDef, u8 battlerAtk, s32 hpMod, s32 dmgMod); +s32 AI_GetAbility(u32 battlerId); +u16 AI_GetHoldEffect(u32 battlerId); +u32 AI_GetMoveAccuracy(u8 battlerAtk, u8 battlerDef, u16 move); +bool32 DoesBattlerIgnoreAbilityChecks(u16 atkAbility, u16 move); +bool32 AI_WeatherHasEffect(void); +bool32 CanAIFaintTarget(u8 battlerAtk, u8 battlerDef, u8 numHits); +bool32 CanIndexMoveFaintTarget(u8 battlerAtk, u8 battlerDef, u8 index, u8 numHits); +bool32 AI_IsTerrainAffected(u8 battlerId, u32 flags); +bool32 AI_IsBattlerGrounded(u8 battlerId); +bool32 HasDamagingMove(u8 battlerId); +bool32 HasDamagingMoveOfType(u8 battlerId, u8 type); +u32 GetBattlerSecondaryDamage(u8 battlerId); +bool32 BattlerWillFaintFromWeather(u8 battler, u16 ability); +bool32 BattlerWillFaintFromSecondaryDamage(u8 battler, u16 ability); +bool32 ShouldTryOHKO(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move); +bool32 ShouldUseRecoilMove(u8 battlerAtk, u8 battlerDef, u32 recoilDmg, u8 moveIndex); +u16 GetBattlerSideSpeedAverage(u8 battler); +bool32 ShouldAbsorb(u8 battlerAtk, u8 battlerDef, u16 move, s32 damage); +bool32 ShouldRecover(u8 battlerAtk, u8 battlerDef, u16 move, u8 healPercent); +bool32 ShouldSetScreen(u8 battlerAtk, u8 battlerDef, u16 moveEffect); +bool32 ShouldPivot(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u8 moveIndex); +bool32 IsRecycleEncouragedItem(u16 item); +bool32 ShouldRestoreHpBerry(u8 battlerAtk, u16 item); +bool32 IsStatBoostingBerry(u16 item); +bool32 CanKnockOffItem(u8 battler, u16 item); +bool32 IsAbilityOfRating(u16 ability, s8 rating); +s8 GetAbilityRating(u16 ability); +bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability); +bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u16 move); +u32 AI_GetBattlerMoveTargetType(u8 battlerId, u16 move); +bool32 ShouldUseZMove(u8 activeId, u8 targetId, u16 chosenMove); + +// stat stage checks +bool32 AnyStatIsRaised(u8 battlerId); +bool32 ShouldLowerStat(u8 battler, u16 battlerAbility, u8 stat); +bool32 BattlerStatCanRise(u8 battler, u16 battlerAbility, u8 stat); +bool32 AreBattlersStatsMaxed(u8 battler); +bool32 BattlerHasAnyStatRaised(u8 battlerId); +u32 CountPositiveStatStages(u8 battlerId); +u32 CountNegativeStatStages(u8 battlerId); +bool32 ShouldLowerAttack(u8 battlerAtk, u8 battlerDef, u16 defAbility); +bool32 ShouldLowerDefense(u8 battlerAtk, u8 battlerDef, u16 defAbility); +bool32 ShouldLowerSpeed(u8 battlerAtk, u8 battlerDef, u16 defAbility); +bool32 ShouldLowerSpAtk(u8 battlerAtk, u8 battlerDef, u16 defAbility); +bool32 ShouldLowerSpDef(u8 battlerAtk, u8 battlerDef, u16 defAbility); +bool32 ShouldLowerAccuracy(u8 battlerAtk, u8 battlerDef, u16 defAbility); +bool32 ShouldLowerEvasion(u8 battlerAtk, u8 battlerDef, u16 defAbility); + +// move checks +bool32 IsAffectedByPowder(u8 battler, u16 ability, u16 holdEffect); +bool32 MovesWithSplitUnusable(u32 attacker, u32 target, u32 split); +s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *effectiveness, bool32 considerZPower); +u8 GetMoveDamageResult(u16 move); +u32 GetCurrDamageHpPercent(u8 battlerAtk, u8 battlerDef); +u16 AI_GetTypeEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef); +u32 AI_GetMoveEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef); +u16 *GetMovesArray(u32 battler); +bool32 IsConfusionMoveEffect(u16 moveEffect); +bool32 HasMove(u32 battlerId, u32 move); +bool32 HasOnlyMovesWithSplit(u32 battlerId, u32 split, bool32 onlyOffensive); +bool32 HasMoveWithSplit(u32 battler, u32 split); +bool32 HasMoveWithType(u32 battler, u8 type); +bool32 HasMoveWithTypeAndSplit(u32 battler, u8 type, u8 split); +bool32 HasMoveEffect(u32 battlerId, u16 moveEffect); +bool32 HasMoveWithLowAccuracy(u8, u8, u8, bool32, u16, u16, u16, u16); +bool32 TestMoveFlagsInMoveset(u8 battler, u32 flags); +bool32 IsAromaVeilProtectedMove(u16 move); +bool32 IsNonVolatileStatusMoveEffect(u16 moveEffect); +bool32 IsStatLoweringMoveEffect(u16 moveEffect); +bool32 IsMoveRedirectionPrevented(u16 move, u16 atkAbility); +bool32 IsMoveEncouragedToHit(u8 battlerAtk, u8 battlerDef, u16 move); +bool32 IsHazardMoveEffect(u16 moveEffect); +bool32 MoveCallsOtherMove(u16 move); +bool32 MoveRequiresRecharging(u16 move); +bool32 IsInstructBannedMove(u16 move); +bool32 IsEncoreEncouragedEffect(u16 moveEffect); +void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s16 *score); +bool32 ShouldSetSandstorm(u8 battler, u16 ability, u16 holdEffect); +bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect); +bool32 ShouldSetRain(u8 battlerAtk, u16 ability, u16 holdEffect); +bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect); +bool32 HasSleepMoveWithLowAccuracy(u8 battlerAtk, u8 battlerDef); +bool32 IsHealingMoveEffect(u16 effect); +bool32 HasHealingEffect(u32 battler); +bool32 IsTrappingMoveEffect(u16 effect); +bool32 HasTrappingMoveEffect(u8 battler); +bool32 ShouldFakeOut(u8 battlerAtk, u8 battlerDef, u16 move); +bool32 HasThawingMove(u8 battlerId); +bool32 IsStatRaisingEffect(u16 effect); +bool32 IsStatLoweringEffect(u16 effect); +bool32 IsStatRaisingEffect(u16 effect); +bool32 IsAttackBoostMoveEffect(u16 effect); +bool32 IsUngroundingEffect(u16 effect); +bool32 IsSemiInvulnerable(u8 battlerDef, u16 move); + +// status checks +bool32 AI_CanBeBurned(u8 battler, u16 ability); +bool32 AI_CanBeConfused(u8 battler, u16 ability); +bool32 AI_CanSleep(u8 battler, u16 ability); +bool32 IsBattlerIncapacitated(u8 battler, u16 ability); +bool32 AI_CanPutToSleep(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove); +bool32 ShouldPoisonSelf(u8 battler, u16 ability); +bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove); +bool32 AI_CanParalyze(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove); +bool32 AI_CanConfuse(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove); +bool32 ShouldBurnSelf(u8 battler, u16 ability); +bool32 AI_CanBurn(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove); +bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGender, u8 defGender); +bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof); +u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move); +bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move); +bool32 IsWakeupTurn(u8 battler); + +// partner logic +u16 GetAllyChosenMove(u8 battlerId); +bool32 IsValidDoubleBattle(u8 battlerAtk); +bool32 IsTargetingPartner(u8 battlerAtk, u8 battlerDef); +bool32 DoesPartnerHaveSameMoveEffect(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove); +bool32 PartnerHasSameMoveEffectWithoutTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove); +bool32 PartnerMoveEffectIsStatusSameTarget(u8 battlerAtkPartner, u8 battlerDef, u16 partnerMove); +bool32 PartnerMoveEffectIsWeather(u8 battlerAtkPartner, u16 partnerMove); +bool32 PartnerMoveEffectIsTerrain(u8 battlerAtkPartner, u16 partnerMove); +bool32 PartnerMoveIs(u8 battlerAtkPartner, u16 partnerMove, u16 moveCheck); +bool32 PartnerMoveIsSameAsAttacker(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove); +bool32 PartnerMoveIsSameNoTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove); +bool32 ShouldUseWishAromatherapy(u8 battlerAtk, u8 battlerDef, u16 move); + +// party logic +s32 AI_CalcPartyMonDamage(u16 move, u8 battlerAtk, u8 battlerDef, struct Pokemon *mon); +s32 CountUsablePartyMons(u8 battlerId); +bool32 IsPartyFullyHealedExceptBattler(u8 battler); +bool32 PartyHasMoveSplit(u8 battlerId, u8 split); +bool32 SideHasMoveSplit(u8 battlerId, u8 split); + +// score increases +void IncreaseStatUpScore(u8 battlerAtk, u8 battlerDef, u8 statId, s16 *score); +void IncreasePoisonScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score); +void IncreaseBurnScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score); +void IncreaseParalyzeScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); +void IncreaseSleepScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); +void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); + +#endif //GUARD_BATTLE_AI_UTIL_H \ No newline at end of file diff --git a/include/battle_anim.h b/include/battle_anim.h index f97d2d9982..883934f14f 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -50,6 +50,7 @@ extern u8 gBattleAnimAttacker; extern u8 gBattleAnimTarget; extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT]; extern u8 gAnimCustomPanning; +extern u16 gAnimMoveIndex; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -57,24 +58,26 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo void DestroyAnimSprite(struct Sprite *sprite); void DestroyAnimVisualTask(u8 taskId); void DestroyAnimSoundTask(u8 taskId); +u8 GetAnimBattlerId(u8 wantedBattler); bool8 IsBattlerSpriteVisible(u8 battlerId); void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible); bool8 IsContest(void); s8 BattleAnimAdjustPanning(s8 pan); s8 BattleAnimAdjustPanning2(s8 pan); -s16 KeepPanInRange(s16 a, int oldPan); +s16 KeepPanInRange(s16 panArg, int oldPan); s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan); -void sub_80A4720(u16 a, u16 *b, u32 c, u8 d); +void RelocateBattleBgPal(u16 paletteNum, u16 *dest, u32 offset, bool8 largeScreen); void ResetBattleAnimBg(bool8); +void LoadMoveBg(u16 bgId); // battle_intro.c void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value); -void sub_8118FBC(int bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 arg7); +void DrawBattlerOnBg(int bgId, u8 x, u8 y, u8 battlerPosition, u8 paletteId, u8 *tiles, u16 *tilemap, u16 tilesOffset); void HandleIntroSlide(u8 terrainId); int GetAnimBgAttribute(u8 bgId, u8 attributeId); // battle_anim_mons.c -void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite); +void TranslateSpriteInEllipse(struct Sprite *sprite); void AnimTranslateLinearAndFlicker(struct Sprite *sprite); void AnimTranslateLinearAndFlicker_Flipped(struct Sprite *sprite); void AnimWeatherBallUp(struct Sprite *sprite); @@ -85,70 +88,69 @@ void DestroySpriteAndMatrix(struct Sprite *sprite); void TranslateSpriteLinearFixedPoint(struct Sprite *sprite); void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets); void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 respectMonPicOffsets); +bool32 InitSpritePosToAnimBattler(u32 animBattlerId, struct Sprite *sprite, bool8 respectMonPicOffsets); void StartAnimLinearTranslation(struct Sprite *sprite); void InitAnimArcTranslation(struct Sprite *sprite); bool8 AnimTranslateLinear(struct Sprite *sprite); void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite); u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId); void InitAnimLinearTranslationWithSpeed(struct Sprite *sprite); -u16 ArcTan2Neg(s16 a, s16 b); -void TrySetSpriteRotScale(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation); +u16 ArcTan2Neg(s16 x, s16 y); +void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation); void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite); void TranslateSpriteLinearAndFlicker(struct Sprite *sprite); void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite); void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite); -void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 a2); -s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 a2); +void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 xOffset); +s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr); u8 GetBattlerYCoordWithElevation(u8 battlerId); void WaitAnimForDuration(struct Sprite *sprite); void AnimTravelDiagonally(struct Sprite *sprite); void InitAnimLinearTranslation(struct Sprite *sprite); -void AnimTranslateLinear_WaitEnd(struct Sprite *sprite); +void AnimTranslateLinear_WithFollowup(struct Sprite *sprite); u8 GetBattlerSpriteBGPriority(u8 battlerId); void *LoadPointerFromVars(s16 bottom, s16 top); void StorePointerInVars(s16 *bottom, s16 *top, const void *ptr); -void sub_80A8278(void); -void GetBattleAnimBg1Data(struct BattleAnimBgData*); -void GetBattleAnimBgData(struct BattleAnimBgData*, u32 arg1); +void InitPrioritiesForVisibleBattlers(void); +void GetBattleAnimBg1Data(struct BattleAnimBgData *); +void GetBattleAnimBgData(struct BattleAnimBgData *, u32 bgId); u8 GetBattlerSpriteSubpriority(u8 battlerId); bool8 TranslateAnimHorizontalArc(struct Sprite *sprite); -void sub_80A6630(struct Sprite *sprite); -void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite); +void TranslateSpriteLinearByIdFixedPoint(struct Sprite *sprite); void ResetSpriteRotScale(u8 spriteId); void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation); void InitSpriteDataForLinearTranslation(struct Sprite *sprite); void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode); void SetBattlerSpriteYOffsetFromRotation(u8 spriteId); -u32 GetBattleBgPalettesMask(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7); +u32 GetBattlePalettesMask(bool8 battleBackground, bool8 attacker, bool8 target, bool8 attackerPartner, bool8 targetPartner, bool8 anim1, bool8 anim2); u32 GetBattleMonSpritePalettesMask(u8 playerLeft, u8 playerRight, u8 opponentLeft, u8 opponentRight); -u8 AnimDummyReturnArg(u8 battler); +u8 GetSpritePalIdxByBattler(u8 battler); s16 CloneBattlerSpriteWithBlend(u8); -void obj_delete_but_dont_free_vram(struct Sprite*); +void DestroySpriteWithActiveSheet(struct Sprite *); u8 CreateInvisibleSpriteCopy(int, u8, int); -void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData*, const void*, u32); -void AnimLoadCompressedBgGfx(u32, const u32*, u32); +void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData *, const void *, bool32); +void AnimLoadCompressedBgGfx(u32, const u32 *, u32); void UpdateAnimBg3ScreenSize(bool8); -void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *); -void sub_80A653C(struct Sprite *); +void TranslateSpriteInGrowingCircle(struct Sprite *); void SetBattlerSpriteYOffsetFromYScale(u8 spriteId); -void PrepareEruptAnimTaskData(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7); +void PrepareEruptAnimTaskData(struct Task *task, u8 spriteId, s16 xScaleStart, s16 yScaleStart, s16 xScaleEnd, s16 yScaleEnd, u16 duration); u8 UpdateEruptAnimTask(struct Task *task); void DestroyAnimSpriteAndDisableBlend(struct Sprite *); void AnimLoadCompressedBgTilemap(u32 bgId, const void *src); void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite); bool8 AnimFastTranslateLinear(struct Sprite *sprite); void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite); -void TranslateMonSpriteLinear(struct Sprite *sprite); +void TranslateSpriteLinearById(struct Sprite *sprite); void TranslateSpriteLinear(struct Sprite *sprite); void AnimSpriteOnMonPos(struct Sprite *sprite); void InitAnimLinearTranslationWithSpeedAndPos(struct Sprite *sprite); -void TranslateSpriteInCircleOverDuration(struct Sprite *sprite); +void TranslateSpriteInCircle(struct Sprite *sprite); void SetGrayscaleOrOriginalPalette(u16 palNum, bool8 restoreOriginal); void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds); bool8 RunAffineAnimFromTaskData(struct Task *task); void AnimThrowProjectile(struct Sprite *sprite); -void sub_80A6BFC(struct BattleAnimBgData *unk, u8 unused); -u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId); +void GetBgDataForTransform(struct BattleAnimBgData *dest, u8 battlerId); +u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId); void ResetSpriteRotScale_PreserveAffine(struct Sprite *sprite); void TradeMenuBouncePartySprites(struct Sprite *sprite); void DestroyAnimVisualTaskAndDisableBlend(u8 taskId); @@ -157,7 +159,7 @@ void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId); u8 GetBattlerSide(u8 battler); u8 GetBattlerPosition(u8 battler); u8 GetBattlerAtPosition(u8 position); -void sub_80A64EC(struct Sprite *sprite); +void ConvertPosDataToTranslateLinearData(struct Sprite *sprite); void InitAnimFastLinearTranslationWithSpeedAndPos(struct Sprite *sprite); enum @@ -183,12 +185,12 @@ enum u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId); bool8 IsBattlerSpritePresent(u8 battlerId); -void ClearBattleAnimBg(u32 arg0); +void ClearBattleAnimBg(u32 bgId); u8 GetAnimBattlerSpriteId(u8 wantedBattler); bool8 IsDoubleBattle(void); u8 GetBattleBgPaletteNum(void); u8 GetBattlerSpriteBGPriorityRank(u8 battlerId); -void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*)); +void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite *)); void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite); u8 GetBattlerSpriteDefault_Y(u8 battlerId); u8 GetSubstituteSpriteDefault_Y(u8 battlerId); @@ -203,35 +205,155 @@ u8 GetSubstituteSpriteDefault_Y(u8 battlerId); #define STAT_ANIM_MULTIPLE_MINUS1 57 #define STAT_ANIM_MULTIPLE_MINUS2 58 void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId); +extern const union AnimCmd *const sAnims_SpinningSparkle[]; // battle_anim_ground.c void AnimTask_HorizontalShake(u8 taskId); +void AnimMudSportDirt(struct Sprite *sprite); +void AnimDirtScatter(struct Sprite *sprite); +void AnimMudSportDirtRising(struct Sprite *sprite); +void AnimDirtPlumeParticle(struct Sprite *); +extern const union AffineAnimCmd *const gAffineAnims_SpinningBone[]; // battle_anim_throw.c void TryShinyAnimation(u8 battler, struct Pokemon *mon); u8 ItemIdToBallId(u16 itemId); u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId); -u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 selectedPalettes, u8 ballId); +u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 spritePalNum, u32 selectedPalettes, u8 ballId); +bool32 IsCriticalCapture(void); // battle_anim_utility_funcs.c void InitStatsChangeAnimation(u8); -void StartMonScrollingBgMask(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *arg8, const u32 *arg9, const u32 *palette); +void StartMonScrollingBgMask(u8 taskId, int unused, u16 scrollSpeed, u8 battler, bool8 includePartner, u8 numFadeSteps, u8 fadeStepDelay, u8 duration, const u32 *gfx, const u32 *tilemap, const u32 *palette); // battle_anim_effects_1.c -void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite); -void AnimMoveTwisterParticle(struct Sprite* sprite); +void SetSpriteNextToMonHead(u8 battler, struct Sprite *sprite); +void AnimMoveTwisterParticle(struct Sprite *sprite); void AnimParticleBurst(struct Sprite *); +void AnimPowerAbsorptionOrb(struct Sprite *sprite); +void AnimNeedleArmSpike(struct Sprite *); +void AnimTask_CompressTargetHorizontally(u8 taskId); +void AnimSporeParticle(struct Sprite *sprite); +void AnimAbsorptionOrb(struct Sprite *sprite); +void AnimPetalDanceSmallFlower(struct Sprite *sprite); +void AnimPetalDanceBigFlower(struct Sprite *sprite); +void AnimEndureEnergy(struct Sprite *sprite); +void AnimMimicOrb(struct Sprite *sprite); +void AnimSolarBeamBigOrb(struct Sprite *sprite); +void AnimHyperBeamOrb(struct Sprite *sprite); +void AnimNeedleArmSpike_Step(struct Sprite *sprite); +void AnimMovePowderParticle(struct Sprite *sprite); +void AnimMetronomeFinger(struct Sprite *sprite); +void AnimConversion(struct Sprite *sprite); +void AnimCuttingSlice(struct Sprite *sprite); +void AnimThoughtBubble(struct Sprite *sprite); +void AnimTranslateLinearSingleSineWave(struct Sprite *sprite); +void AnimGrantingStars(struct Sprite *sprite); +void AnimFollowMeFinger(struct Sprite *sprite); +extern const union AnimCmd *const gRazorLeafParticleAnimTable[]; +extern const union AnimCmd *const gPowerAbsorptionOrbAnimTable[]; +extern const union AffineAnimCmd *const gPowerAbsorptionOrbAffineAnimTable[]; +extern const union AnimCmd *const gMusicNotesAnimTable[]; +extern const union AffineAnimCmd *const gMimicOrbAffineAnimTable[]; +extern const union AnimCmd *const gSolarBeamBigOrbAnimTable[]; +extern const union AnimCmd *const gPowderParticlesAnimTable[]; +extern const union AffineAnimCmd *const gMetronomeFingerAffineAnimTable[]; +extern const union AnimCmd *const gPetalDanceBigFlowerAnimTable[]; +extern const union AnimCmd *const gOctazookaAnimTable[]; +extern const union AffineAnimCmd *const gAbsorptionOrbAffineAnimTable[]; +extern const union AnimCmd *const gGrantingStarsAnimTable[]; +extern const union AnimCmd *const gSporeParticleAnimTable[]; +extern const union AnimCmd *const gHealingBlueStarAnimTable[]; +extern const union AnimCmd *const gMoonlightSparkleAnimTable[]; +extern const union AnimCmd *const gEndureEnergyAnimTable[]; +extern const union AnimCmd *const gPetalDanceSmallFlowerAnimTable[]; +extern const union AnimCmd *const gConversionAnimTable[]; +extern const union AffineAnimCmd *const gConversionAffineAnimTable[]; +extern const union AnimCmd *const gCuttingSliceAnimTable[]; +extern const union AnimCmd *const gScratchAnimTable[]; +extern const union AnimCmd *const gIngrainRootAnimTable[]; +extern const union AffineAnimCmd *const gSwiftStarAffineAnimTable[]; +extern const union AnimCmd *const gMetronomeThroughtBubbleAnimTable[]; +extern const union AffineAnimCmd *const gStockpileAbsorptionOrbAffineAnimTable[]; + +// battle_anim_effects_2.c +void AnimUproarRing(struct Sprite *sprite); +void AnimSonicBoomProjectile(struct Sprite *sprite); +void AnimOrbitFast(struct Sprite *sprite); +void AnimOrbitScatter(struct Sprite *sprite); +void AnimAngerMark(struct Sprite *sprite); +void AnimHyperVoiceRing(struct Sprite *sprite); +void AnimMagentaHeart(struct Sprite *); +extern const union AffineAnimCmd *const gThinRingShrinkingAffineAnimTable[]; +extern const union AffineAnimCmd *const gThinRingExpandingAffineAnimTable[]; +extern const union AnimCmd *const gExplosionAnimTable[]; +extern const union AffineAnimCmd *const gGuardRingAffineAnimTable[]; +extern const union AffineAnimCmd *const gAngerMarkAffineAnimTable[]; +extern const union AffineAnimCmd *const gWaterPulseRingAffineAnimTable[]; +extern const union AffineAnimCmd *const gHyperVoiceRingAffineAnimTable[]; +extern const union AnimCmd *const gCoinAnimTable[]; +extern const union AffineAnimCmd *const gHiddenPowerOrbAffineAnimTable[]; + +// battle_anim_effects_3.c +void AnimBlackSmoke(struct Sprite *sprite); +void AnimSweetScentPetal(struct Sprite *sprite); +void AnimTealAlert(struct Sprite *sprite); +void AnimBlockX(struct Sprite *sprite); +void AnimFlatterSpotlight_Step(struct Sprite *); +void AnimAssistPawprint(struct Sprite *); +void AnimReversalOrb(struct Sprite *); +void AnimFlatterSpotlight_Step(struct Sprite *sprite); +extern const union AnimCmd *const gOpeningEyeAnimTable[]; +extern const union AnimCmd *const gEclipsingOrbAnimTable[]; +extern const union AffineAnimCmd *const gSpotlightAffineAnimTable[]; // battle_anim_water.c void AnimWaterPulseRing(struct Sprite *sprite); +void AnimSmallBubblePair(struct Sprite *sprite); +void AnimWaterPulseBubble(struct Sprite *sprite); +extern const union AnimCmd *const gAnims_WaterBubbleProjectile[]; +extern const union AnimCmd *const gAnims_FlamethrowerFlame[]; +extern const union AnimCmd *const gAnims_WaterPulseBubble[]; // battle_anim_flying.c void DestroyAnimSpriteAfterTimer(struct Sprite *sprite); +void sub_810E2C8(struct Sprite *sprite); +void AnimAirWaveCrescent(struct Sprite *sprite); +void AnimFlyBallUp(struct Sprite *sprite); +void AnimFlyBallAttack(struct Sprite *sprite); +void AnimFlyBallAttack_Step(struct Sprite *sprite); +void AnimFlyBallUp_Step(struct Sprite *sprite); +void AnimBounceBallLand(struct Sprite *); +void AnimEllipticalGust(struct Sprite *); +extern const union AnimCmd *const gAffineAnims_AirWaveCrescent[]; +extern const union AffineAnimCmd *const gAffineAnims_FlyBallUp[]; +extern const union AffineAnimCmd *const gAffineAnims_FlyBallAttack[]; +extern const union AffineAnimCmd *const gAffineAnims_BounceBallLand[]; + +// battle_anim_poison.c +void AnimSludgeBombHitParticle(struct Sprite *); +void AnimAcidPoisonBubble_Step(struct Sprite *sprite); +void AnimBubbleEffect(struct Sprite *); +extern const union AffineAnimCmd *const gAffineAnims_PoisonProjectile[]; +extern const union AnimCmd *const gAnims_PoisonProjectile[]; +extern const union AnimCmd *const gAnims_AcidPoisonDroplet[]; +extern const union AffineAnimCmd *const gAffineAnims_Bubble[]; + +// battle_anim_ghost.c +void AnimGhostStatusSprite(struct Sprite *sprite); +void AnimShadowBall(struct Sprite *sprite); +void AnimTask_GrudgeFlames_Step(u8 taskId); +extern const union AffineAnimCmd *const gAffineAnims_ShadowBall[]; + +// battle_anim_psychic.c +extern const union AffineAnimCmd *const gAffineAnims_PsychoBoostOrb[]; +extern const union AffineAnimCmd *const gAffineAnims_LusterPurgeCircle[]; +void AnimPsychoBoost(struct Sprite *sprite); // battle_anim_smokescreen.c -u8 SmokescreenImpact(s16 x, s16 y, u8 a3); +u8 SmokescreenImpact(s16 x, s16 y, bool8 persist); -u32 UnpackSelectedBattleBgPalettes(s16); +u32 UnpackSelectedBattlePalettes(s16); u8 GetBattlerSpriteFinal_Y(u8, u16, u8); @@ -279,6 +401,7 @@ extern const struct OamData gOamData_AffineDouble_ObjNormal_32x16; extern const struct OamData gOamData_AffineOff_ObjNormal_64x32; extern const struct OamData gOamData_AffineOff_ObjBlend_64x32; extern const struct OamData gOamData_AffineOff_ObjBlend_16x32; +extern const struct OamData gOamData_AffineDouble_ObjBlend_32x8; extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; @@ -293,4 +416,105 @@ extern const union AnimCmd *const gAnims_SmallBubblePair[]; extern const union AnimCmd *const gAnims_WaterBubble[]; extern const union AffineAnimCmd *const gAffineAnims_Bite[]; +// battle_anim_normal.c +extern const union AffineAnimCmd *const gAffineAnims_HitSplat[]; +void AnimHitSplatBasic(struct Sprite *sprite); +void AnimFlashingHitSplat(struct Sprite *sprite); +void AnimFlashingHitSplat_Step(struct Sprite *sprite); +void AnimHitSplatRandom(struct Sprite *sprite); +void AnimCrossImpact(struct Sprite *sprite); +void AnimHitSplatOnMonEdge(struct Sprite *sprite); + +// battle_anim_electric.c +void AnimThunderWave(struct Sprite *sprite); +void AnimGrowingChargeOrb(struct Sprite *sprite); +void AnimZapCannonSpark(struct Sprite *sprite); +void AnimSparkElectricity(struct Sprite *sprite); +void AnimElectricPuff(struct Sprite *sprite); +void AnimSparkElectricityFlashing(struct Sprite *sprite); +void AnimGrowingShockWaveOrb(struct Sprite *sprite); +void AnimElectricity(struct Sprite *); +extern const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb[]; +extern const union AffineAnimCmd *const gAffineAnims_FlashingSpark[]; +extern const union AnimCmd *const gAnims_ThunderboltOrb[]; +extern const union AnimCmd *const gAnims_ElectricPuff[]; +extern const union AnimCmd *const gAnims_ElectricChargingParticles[]; + +// battle_anim_fight.c +void AnimStompFoot(struct Sprite *sprite); +void AnimSpinningKickOrPunch(struct Sprite *sprite); +void AnimBrickBreakWall_Step(struct Sprite *sprite); +void AnimJumpKick(struct Sprite *sprite); +void AnimBasicFistOrFoot(struct Sprite *sprite); +void AnimSpinningKickOrPunchFinish(struct Sprite *sprite); +void AnimRevengeScratch(struct Sprite *sprite); +void AnimDizzyPunchDuck(struct Sprite *sprite); +void AnimSuperpowerFireball(struct Sprite *); +extern const union AnimCmd *const gAnims_HandsAndFeet[]; +extern const union AffineAnimCmd *const gAffineAnims_MegaPunchKick[]; +extern const union AffineAnimCmd *const gAffineAnims_SpinningHandOrFoot[]; +extern const union AnimCmd *const gAnims_RevengeBigScratch[]; + +// battle_anim_rock.c +extern const union AnimCmd *const gAnims_FlyingRock[]; +extern const union AffineAnimCmd *const gAffineAnims_Whirlpool[]; +extern const union AffineAnimCmd *const gAffineAnims_BasicRock[]; +extern const union AnimCmd *const gAnims_FlyingRock[]; +void AnimParticleInVortex(struct Sprite *sprite); +void AnimFallingRock(struct Sprite *sprite); +void AnimRaiseSprite(struct Sprite *sprite); +void AnimFallingRock_Step(struct Sprite *sprite); +void AnimFlyingSandCrescent(struct Sprite *sprite); +void AnimRockFragment(struct Sprite *); + +// battle_anim_dark.c +void AnimClawSlash(struct Sprite *sprite); +void AnimTearDrop(struct Sprite *sprite); +void AnimBite(struct Sprite *sprite); +extern const union AnimCmd *const gAnims_ClawSlash[]; +extern const union AffineAnimCmd *const gAffineAnims_TearDrop[]; + +// battle_anim_bug.c +void AnimStringWrap_Step(struct Sprite *sprite); +void AnimMissileArc(struct Sprite *sprite); +void AnimSpiderWeb(struct Sprite *sprite); +void AnimMissileArc_Step(struct Sprite *sprite); + +// battle_anim_ice.c +void AnimThrowMistBall(struct Sprite *sprite); +void AnimMoveParticleBeyondTarget(struct Sprite *sprite); +void AnimIceEffectParticle(struct Sprite *sprite); +void AnimSwirlingSnowball_Step1(struct Sprite *sprite); +extern const union AnimCmd *const gAnims_Snowball[]; +extern const union AffineAnimCmd *const gAffineAnims_IceCrystalHit[]; +extern const union AnimCmd *const gAnims_IceCrystalLarge[]; +extern const union AnimCmd *const gAnims_IceBallChunk[]; +extern const union AnimCmd *const gAnims_BlizzardIceCrystal[]; + +// battle_anim_fire.c +void AnimFireSpread(struct Sprite *sprite); +void AnimFireSpiralOutward(struct Sprite *sprite); +void AnimWillOWispOrb(struct Sprite *); +void AnimEruptionFallingRock(struct Sprite *); +void AnimFireCross(struct Sprite *); +void AnimFirePlume(struct Sprite *); +extern const union AnimCmd *const gAnims_FireBlastCross[]; +extern const union AnimCmd *const gAnims_WillOWispOrb[]; +extern const union AnimCmd *const gAnims_FirePlume[]; + +// battle_anim_dragon.c +extern const union AnimCmd *const gAnims_DragonBreathFire[]; +extern const union AnimCmd *const gAnims_DragonRageFirePlume[]; +extern const union AffineAnimCmd *const gAffineAnims_DragonRageFire[]; +extern const union AnimCmd *const gAnims_DragonRageFire[]; +extern const union AffineAnimCmd *const gAffineAnims_DragonBreathFire[]; +void AnimDragonRageFirePlume(struct Sprite *sprite); +void AnimDragonFireToTarget(struct Sprite *sprite); +void AnimDragonDanceOrb(struct Sprite *sprite); +void AnimOverheatFlame(struct Sprite *sprite); + +// battle_anim_new.c +void CoreEnforcerLoadBeamTarget(struct Sprite *sprite); +void SpriteCB_RandomCentredHits(struct Sprite *sprite); + #endif // GUARD_BATTLE_ANIM_H diff --git a/include/battle_arena.h b/include/battle_arena.h index c3bdd4ea79..469c096129 100644 --- a/include/battle_arena.h +++ b/include/battle_arena.h @@ -1,14 +1,15 @@ #ifndef GUARD_BATTLE_ARENA_H #define GUARD_BATTLE_ARENA_H +#include "constants/battle_arena.h" + void CallBattleArenaFunction(void); u8 BattleArena_ShowJudgmentWindow(u8 *state); void BattleArena_InitPoints(void); void BattleArena_AddMindPoints(u8 battler); void BattleArena_AddSkillPoints(u8 battler); -void BattleArena_DeductMindPoints(u8 battler, u16 stringId); -void sub_81A586C(u8 battler); +void BattleArena_DeductSkillPoints(u8 battler, u16 stringId); void DrawArenaRefereeTextBox(void); -void RemoveArenaRefereeTextBox(void); +void EraseArenaRefereeTextBox(void); #endif //GUARD_BATTLE_ARENA_H diff --git a/include/battle_bg.h b/include/battle_bg.h index 167ea5cf74..d0110efa2a 100644 --- a/include/battle_bg.h +++ b/include/battle_bg.h @@ -1,6 +1,17 @@ #ifndef GUARD_BATTLE_BG_H #define GUARD_BATTLE_BG_H +#if P_ENABLE_DEBUG == TRUE +struct BattleBackground +{ + const void *tileset; + const void *tilemap; + const void *entryTileset; + const void *entryTilemap; + const void *palette; +}; +#endif + void BattleInitBgsAndWindows(void); void InitBattleBgsVideo(void); void LoadBattleMenuWindowGfx(void); @@ -9,5 +20,6 @@ void LoadBattleTextboxAndBackground(void); void InitLinkBattleVsScreen(u8 taskId); void DrawBattleEntryBackground(void); bool8 LoadChosenBattleElement(u8 caseId); +void DrawTerrainTypeBattleBackground(void); #endif // GUARD_BATTLE_BG_H diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 34e916b0f2..769dccbd69 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -1,8 +1,7 @@ #ifndef GUARD_BATTLE_CONTROLLERS_H #define GUARD_BATTLE_CONTROLLERS_H -enum -{ +enum { REQUEST_ALL_BATTLE, REQUEST_SPECIES_BATTLE, REQUEST_HELDITEM_BATTLE, @@ -67,21 +66,39 @@ enum // Special arguments for Battle Controller functions. -#define RESET_ACTION_MOVE_SELECTION 0 -#define RESET_ACTION_SELECTION 1 -#define RESET_MOVE_SELECTION 2 +enum { // Values given to the emit functions to choose gBattleBufferA or gBattleBufferB + BUFFER_A, + BUFFER_B +}; -#define BALL_NO_SHAKES 0 -#define BALL_1_SHAKE 1 -#define BALL_2_SHAKES 2 -#define BALL_3_SHAKES_FAIL 3 -#define BALL_3_SHAKES_SUCCESS 4 -#define BALL_TRAINER_BLOCK 5 +enum { + RESET_ACTION_MOVE_SELECTION, + RESET_ACTION_SELECTION, + RESET_MOVE_SELECTION, +}; -#define INSTANT_HP_BAR_DROP 32767 +enum { + BALL_NO_SHAKES, + BALL_1_SHAKE, + BALL_2_SHAKES, + BALL_3_SHAKES_FAIL, + BALL_3_SHAKES_SUCCESS, + BALL_TRAINER_BLOCK, +}; + +enum { + LINK_STANDBY_MSG_STOP_BOUNCE, + LINK_STANDBY_STOP_BOUNCE_ONLY, + LINK_STANDBY_MSG_ONLY, +}; + +#define INSTANT_HP_BAR_DROP 0x7FFF + +#define PARTY_SUMM_SKIP_DRAW_DELAY (1 << 7) // Special return values in gBattleBufferB from Battle Controller functions. #define RET_VALUE_LEVELED_UP 11 +#define RET_MEGA_EVOLUTION 0x80 struct UnusedControllerStruct { @@ -110,6 +127,9 @@ struct ChooseMoveStruct u16 species; u8 monType1; u8 monType2; + u8 monType3; + struct MegaEvolutionData mega; + struct ZMoveData zmove; }; enum @@ -170,6 +190,7 @@ enum CONTROLLER_LINKSTANDBYMSG, CONTROLLER_RESETACTIONMOVESELECTION, CONTROLLER_ENDLINKBATTLE, + CONTROLLER_DEBUGMENU, /*new controllers should go here*/ CONTROLLER_TERMINATOR_NOP, CONTROLLER_CMDS_COUNT @@ -181,6 +202,7 @@ extern struct UnusedControllerStruct gUnusedControllerStruct; void HandleLinkBattleSetup(void); void SetUpBattleVarsAndBirchZigzagoon(void); void InitBattleControllers(void); +bool32 IsValidForBattle(struct Pokemon *mon); void TryReceiveLinkBattleData(void); void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data); @@ -191,7 +213,7 @@ void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 b void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data); // unused void BtlController_EmitLoadMonSprite(u8 bufferId); void BtlController_EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit); -void BtlController_EmitReturnMonToBall(u8 bufferId, u8 arg1); +void BtlController_EmitReturnMonToBall(u8 bufferId, bool8 skipAnim); void BtlController_EmitDrawTrainerPic(u8 bufferId); void BtlController_EmitTrainerSlide(u8 bufferId); void BtlController_EmitTrainerSlideBack(u8 bufferId); @@ -203,25 +225,25 @@ void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data); // unused void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr, u8 multihit); void BtlController_EmitPrintString(u8 bufferId, u16 stringId); void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId); -void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2); +void BtlController_EmitChooseAction(u8 bufferId, u8 action, u16 itemId); void BtlController_EmitYesNoBox(u8 bufferId); void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData); -void BtlController_EmitChooseItem(u8 bufferId, u8* arg1); -void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4); +void BtlController_EmitChooseItem(u8 bufferId, u8 *battlePartyOrder); +void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u16 abilityId, u8 *data); void BtlController_EmitCmd23(u8 bufferId); // unused void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue); -void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints); +void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, s32 expPoints); void BtlController_EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2); void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status); void BtlController_EmitStatusXor(u8 bufferId, u8 b); // unused void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data); void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data); // unused -void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter); // unused -void BtlController_EmitCmd32(u8 bufferId, u16 size, void *c); // unused -void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2); -void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c); -void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1); -void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b); +void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *data); // unused +void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data); // unused +void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u32 ret32); +void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battlePartyOrder); +void BtlController_EmitOneReturnValue(u8 bufferId, u16 ret); +void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 ret); void BtlController_EmitClearUnkVar(u8 bufferId); // unused void BtlController_EmitSetUnkVar(u8 bufferId, u8 b); // unused void BtlController_EmitClearUnkFlag(u8 bufferId); // unused @@ -233,14 +255,15 @@ void BtlController_EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM); void BtlController_EmitFaintingCry(u8 bufferId); void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId); void BtlController_EmitIntroTrainerBallThrow(u8 bufferId); -void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2); +void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 flags); void BtlController_EmitHidePartyStatusSummary(u8 bufferId); void BtlController_EmitEndBounceEffect(u8 bufferId); void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible); void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument); -void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 record); +void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 mode, bool32 record); void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId); void BtlController_EmitEndLinkBattle(u8 bufferId, u8 battleOutcome); +void BtlController_EmitDebugMenu(u8 bufferId); // player controller void SetControllerToPlayer(void); @@ -254,6 +277,8 @@ void Task_PlayerController_RestoreBgmAfterCry(u8 taskId); void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused); void ActionSelectionDestroyCursorAt(u8 cursorPos); void InitMoveSelectionsVarsAndStrings(void); +void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1); +void MoveSelectionDestroyCursorAt(u8 cursorPosition); // recorded player controller void SetControllerToRecordedPlayer(void); diff --git a/include/battle_debug.h b/include/battle_debug.h new file mode 100644 index 0000000000..db2c92296e --- /dev/null +++ b/include/battle_debug.h @@ -0,0 +1,6 @@ +#ifndef GUARD_BATTLE_DEBUG_H +#define GUARD_BATTLE_DEBUG_H + +void CB2_BattleDebugMenu(void); + +#endif // GUARD_BATTLE_DEBUG_H diff --git a/include/battle_factory.h b/include/battle_factory.h index 5606d60d1e..d414bdb3b1 100644 --- a/include/battle_factory.h +++ b/include/battle_factory.h @@ -3,7 +3,7 @@ void CallBattleFactoryFunction(void); bool8 InBattleFactory(void); -u8 GetFactoryMonFixedIV(u8 arg0, u8 arg1); +u8 GetFactoryMonFixedIV(u8 challengeNum, bool8 isLastBattle); void FillFactoryBrainParty(void); u8 GetNumPastRentalsRank(u8 battleMode, u8 lvlMode); u32 GetAiScriptsInBattleFactory(void); diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h index 3288204d12..3e940995dc 100644 --- a/include/battle_gfx_sfx_util.h +++ b/include/battle_gfx_sfx_util.h @@ -9,7 +9,6 @@ void SpriteCB_TrainerSlideIn(struct Sprite *sprite); void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status); bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument); void InitAndLaunchSpecialAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId); -bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn); bool8 IsBattleSEPlaying(u8 battlerId); void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId); void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId); @@ -18,14 +17,13 @@ void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId); void DecompressTrainerBackPic(u16 backPicId, u8 battlerId); void BattleGfxSfxDummy3(u8 gender); void FreeTrainerFrontPicPalette(u16 frontPicId); -void sub_805DFFC(void); bool8 BattleLoadAllHealthBoxesGfx(u8 state); -void LoadBattleBarGfx(u8 arg0); +void LoadBattleBarGfx(u8 unused); bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId); void ClearSpritesHealthboxAnimData(void); void CopyAllBattleSpritesInvisibilities(void); void CopyBattleSpriteInvisibility(u8 battlerId); -void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 notTransform); +void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 notTransform, bool32 megaEvo); void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite); void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId); void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move); @@ -39,7 +37,7 @@ void LoadAndCreateEnemyShadowSprites(void); void SpriteCB_SetInvisible(struct Sprite *sprite); void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species); void HideBattlerShadowSprite(u8 battlerId); -void sub_805EF14(void); +void FillAroundBattleWindows(void); void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute); void AllocateMonSpritesGfx(void); void FreeMonSpritesGfx(void); diff --git a/include/battle_interface.h b/include/battle_interface.h index 3145939d0c..c82f2acc2e 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -6,7 +6,8 @@ enum { HP_CURRENT, - HP_MAX + HP_MAX, + HP_BOTH }; enum @@ -34,16 +35,31 @@ enum #define TAG_HEALTHBAR_PLAYER2_TILE 0xD706 #define TAG_HEALTHBAR_OPPONENT2_TILE 0xD707 +#define TAG_HEALTHBOX_PALS_1 0xD709 +#define TAG_HEALTHBOX_PALS_2 0xD70A #define TAG_HEALTHBOX_SAFARI_TILE 0xD70B - #define TAG_STATUS_SUMMARY_BAR_TILE 0xD70C -#define TAG_STATUS_SUMMARY_BALLS_TILE 0xD714 -#define TAG_HEALTHBOX_PAL 0xD6FF -#define TAG_HEALTHBAR_PAL 0xD704 #define TAG_STATUS_SUMMARY_BAR_PAL 0xD710 #define TAG_STATUS_SUMMARY_BALLS_PAL 0xD712 +#define TAG_STATUS_SUMMARY_BALLS_TILE 0xD714 + +#define TAG_HEALTHBAR_PAL TAG_HEALTHBAR_PLAYER1_TILE +#define TAG_HEALTHBOX_PAL TAG_HEALTHBOX_PLAYER1_TILE + +#define TAG_MEGA_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_MEGA_TRIGGER_PAL 0xD777 +#define TAG_MEGA_INDICATOR_PAL 0xD778 +#define TAG_ALPHA_INDICATOR_PAL 0xD779 +#define TAG_OMEGA_INDICATOR_PAL 0xD77A +#define TAG_ZMOVE_TRIGGER_PAL 0xD77B + enum { HEALTHBOX_ALL, @@ -60,6 +76,8 @@ enum HEALTHBOX_SAFARI_BALLS_TEXT }; +u32 WhichBattleCoords(u32 battlerId); +u8 GetMegaIndicatorSpriteId(u32 healthboxSpriteId); u8 CreateBattlerHealthboxSprites(u8 battler); u8 CreateSafariPlayerHealthboxSprites(void); void SetBattleBarStruct(u8 battler, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue); @@ -67,15 +85,30 @@ void SetHealthboxSpriteInvisible(u8 healthboxSpriteId); void SetHealthboxSpriteVisible(u8 healthboxSpriteId); void DestoryHealthboxSprite(u8 healthboxSpriteId); void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly); -void UpdateOamPriorityInAllHealthboxes(u8 priority); +void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHpBoxes); void InitBattlerHealthboxCoords(u8 battler); -void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); +void UpdateHpTextInHealthbox(u32 healthboxSpriteId, u32 maxOrCurrent, s16 currHp, s16 maxHp); void SwapHpBarsWithHpText(void); -u8 CreatePartyStatusSummarySprites(u8 battler, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart); +void ChangeMegaTriggerSprite(u8 spriteId, u8 animId); +void CreateMegaTriggerSprite(u8 battlerId, u8 palId); +bool32 IsMegaTriggerSpriteActive(void); +void HideMegaTriggerSprite(void); +void DestroyMegaTriggerSprite(void); +u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which); +void DestroyMegaIndicatorSprite(u32 healthboxSpriteId); +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); -s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 arg3); +s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 unused); 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); +void TryAddLastUsedBallItemSprites(void); +void UpdateAbilityPopup(u8 battlerId); #endif // GUARD_BATTLE_INTERFACE_H diff --git a/include/battle_main.h b/include/battle_main.h index 78cf353dfc..df59dcae34 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -7,7 +7,8 @@ struct TrainerMoney u8 value; }; -struct UnknownPokemonStruct4 +// For displaying a multi battle partner's Pokémon in the party menu +struct MultiPartnerMenuPokemon { /*0x00*/ u16 species; /*0x02*/ u16 heldItem; @@ -21,24 +22,6 @@ struct UnknownPokemonStruct4 /*0x1D*/ u8 language; }; -#define TYPE_NAME_LENGTH 6 -#define ABILITY_NAME_LENGTH 12 - -// defines for the u8 array gTypeEffectiveness -#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0])) -#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1])) -#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2])) - -// defines for the gTypeEffectiveness multipliers -#define TYPE_MUL_NO_EFFECT 0 -#define TYPE_MUL_NOT_EFFECTIVE 5 -#define TYPE_MUL_NORMAL 10 -#define TYPE_MUL_SUPER_EFFECTIVE 20 - -// special type table Ids -#define TYPE_FORESIGHT 0xFE -#define TYPE_ENDTABLE 0xFF - // defines for the 'DoBounceEffect' function #define BOUNCE_MON 0x0 #define BOUNCE_HEALTHBOX 0x1 @@ -46,28 +29,25 @@ struct UnknownPokemonStruct4 void CB2_InitBattle(void); void BattleMainCB2(void); void CB2_QuitRecordedBattle(void); -void sub_8038528(struct Sprite* sprite); -void sub_8038A04(void); // unused void VBlankCB_Battle(void); void SpriteCB_VsLetterDummy(struct Sprite *sprite); void SpriteCB_VsLetterInit(struct Sprite *sprite); void CB2_InitEndLinkBattle(void); u32 GetBattleBgTemplateData(u8 arrayId, u8 caseId); u32 GetBattleWindowTemplatePixelWidth(u32 setId, u32 tableId); -void SpriteCb_WildMon(struct Sprite *sprite); +void SpriteCB_WildMon(struct Sprite *sprite); void SpriteCallbackDummy_2(struct Sprite *sprite); void SpriteCB_FaintOpponentMon(struct Sprite *sprite); -void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite); -void SpriteCb_HideAsMoveTarget(struct Sprite *sprite); -void SpriteCb_OpponentMonFromBall(struct Sprite *sprite); +void SpriteCB_ShowAsMoveTarget(struct Sprite *sprite); +void SpriteCB_HideAsMoveTarget(struct Sprite *sprite); +void SpriteCB_OpponentMonFromBall(struct Sprite *sprite); void SpriteCB_BattleSpriteStartSlideLeft(struct Sprite *sprite); void SpriteCB_FaintSlideAnim(struct Sprite *sprite); -void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d); -void EndBounceEffect(u8 battlerId, bool8 b); -void SpriteCb_PlayerMonFromBall(struct Sprite *sprite); -void sub_8039E60(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_TrainerThrowObject(struct Sprite *sprite); -void sub_8039E9C(struct Sprite *sprite); +void AnimSetCenterToCornerVecX(struct Sprite *sprite); void BeginBattleIntroDummy(void); void BeginBattleIntro(void); void SwitchInClearSetData(void); @@ -76,18 +56,22 @@ void BattleTurnPassed(void); u8 IsRunningFromBattleImpossible(void); void SwitchPartyOrder(u8 battlerId); void SwapTurnOrder(u8 id1, u8 id2); +u32 GetBattlerTotalSpeedStat(u8 battlerId); +s8 GetChosenMovePriority(u32 battlerId); +s8 GetMovePriority(u32 battlerId, u16 move); u8 GetWhoStrikesFirst(u8 battlerId1, u8 battlerId2, bool8 ignoreChosenMoves); void RunBattleScriptCommands_PopCallbacksStack(void); void RunBattleScriptCommands(void); bool8 TryRunFromBattle(u8 battlerId); void SpecialStatusesClear(void); +void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk); +bool32 IsWildMonSmart(void); -extern struct UnknownPokemonStruct4 gMultiPartnerParty[MULTI_PARTY_SIZE]; +extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE]; -extern const struct SpriteTemplate gUnknown_0831AC88; +extern const struct SpriteTemplate gUnusedBattleInitSprite; extern const struct OamData gOamData_BattleSpriteOpponentSide; extern const struct OamData gOamData_BattleSpritePlayerSide; -extern const u8 gTypeEffectiveness[336]; extern const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1]; extern const struct TrainerMoney gTrainerMoneyTable[]; extern const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1]; diff --git a/include/battle_message.h b/include/battle_message.h index da3009d63f..4102bb5c9a 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,7 +1,13 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H -#define TEXT_BUFF_ARRAY_COUNT 16 +#include "constants/battle_config.h" + +#if B_EXPANDED_ABILITY_NAMES == TRUE + #define TEXT_BUFF_ARRAY_COUNT 17 +#else + #define TEXT_BUFF_ARRAY_COUNT 16 +#endif // for 0xFD #define B_TXT_BUFF1 0x0 @@ -57,6 +63,15 @@ #define B_TXT_PARTNER_CLASS 0x32 #define B_TXT_PARTNER_NAME 0x33 #define B_TXT_BUFF3 0x34 +#define B_TXT_ATK_TRAINER_NAME 0x35 +#define B_TXT_ATK_TRAINER_CLASS 0x36 +#define B_TXT_ATK_TEAM1 0x37 // Your/The opposing +#define B_TXT_ATK_TEAM2 0x38 // your/the opposing +#define B_TXT_DEF_NAME 0x39 +#define B_TXT_DEF_TEAM1 0x3A // Your/The opposing +#define B_TXT_DEF_TEAM2 0x3B // your/the opposing +#define B_TXT_ACTIVE_NAME 0x3C +#define B_TXT_ACTIVE_NAME2 0x3D // no Illusion check // for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3 @@ -96,7 +111,8 @@ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ textVar[1] = B_BUFF_ABILITY; \ textVar[2] = abilityId; \ - textVar[3] = B_BUFF_EOS; \ + textVar[3] = (abilityId & 0xFF00) >> 8; \ + textVar[4] = B_BUFF_EOS; \ } #define PREPARE_TYPE_BUFFER(textVar, typeId) \ @@ -145,7 +161,7 @@ { \ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ textVar[1] = B_BUFF_STRING; \ - textVar[2] = stringId; \ + textVar[2] = stringId & 0xFF; \ textVar[3] = (stringId & 0xFF00) >> 8; \ textVar[4] = B_BUFF_EOS; \ } @@ -200,29 +216,38 @@ struct BattleMsgData u16 currentMove; u16 originallyUsedMove; u16 lastItem; - u8 lastAbility; + u16 lastAbility; u8 scrActive; u8 unk1605E; u8 hpScale; u8 itemEffectBattler; u8 moveType; - u8 abilities[MAX_BATTLERS_COUNT]; + u16 abilities[MAX_BATTLERS_COUNT]; u8 textBuffs[3][TEXT_BUFF_ARRAY_COUNT]; }; +enum +{ + TRAINER_SLIDE_LAST_SWITCHIN, + TRAINER_SLIDE_LAST_LOW_HP, + TRAINER_SLIDE_FIRST_DOWN, +}; + void BufferStringBattle(u16 stringID); -u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src); -u32 BattleStringExpandPlaceholders(const u8* src, u8* dst); -void BattlePutTextOnWindow(const u8* text, u8 windowId); +u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src); +u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst); +void BattlePutTextOnWindow(const u8 *text, u8 windowId); void SetPpNumbersPaletteInMoveSelection(void); u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp); +bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which); +void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst); extern struct BattleMsgData *gBattleMsgDataPtr; -extern const u8* const gBattleStringsTable[]; -extern const u8* const gStatNamesTable[]; -extern const u8* const gPokeblockWasTooXStringTable[]; -extern const u8* const gRefereeStringsTable[]; +extern const u8 *const gBattleStringsTable[]; +extern const u8 *const gStatNamesTable[]; +extern const u8 *const gPokeblockWasTooXStringTable[]; +extern const u8 *const gRefereeStringsTable[]; extern const u8 *const gRoundsStringTable[]; extern const u8 gText_PkmnIsEvolving[]; @@ -267,6 +292,7 @@ extern const u8 gText_BattleWallyName[]; extern const u8 gText_Win[]; extern const u8 gText_Loss[]; extern const u8 gText_Draw[]; +extern const u8 gText_StatSharply[]; extern const u8 gText_StatRose[]; extern const u8 gText_DefendersStatRose[]; extern const u8 gText_PkmnGettingPumped[]; @@ -290,6 +316,6 @@ extern const u8 gText_BattleRecordedOnPass[]; extern const u8 gText_BattleTourney[]; extern const u16 gMissStringIds[]; -extern const u16 gTrappingMoves[]; +extern const u16 gStatUpStringIds[]; #endif // GUARD_BATTLE_MESSAGE_H diff --git a/include/battle_pyramid.h b/include/battle_pyramid.h index c4a72095f0..62320358b6 100644 --- a/include/battle_pyramid.h +++ b/include/battle_pyramid.h @@ -14,7 +14,7 @@ void SoftResetInBattlePyramid(void); void CopyPyramidTrainerSpeechBefore(u16 trainerId); void CopyPyramidTrainerWinSpeech(u16 trainerId); void CopyPyramidTrainerLoseSpeech(u16 trainerId); -u8 GetBattlePyramindTrainerEncounterMusicId(u16 trainerId); +u8 GetTrainerEncounterMusicIdInBattlePyramid(u16 trainerId); void GenerateBattlePyramidFloorLayout(u16 *mapArg, bool8 setPlayerPosition); void LoadBattlePyramidObjectEventTemplates(void); void LoadBattlePyramidFloorObjectEventScripts(void); diff --git a/include/battle_pyramid_bag.h b/include/battle_pyramid_bag.h index b8b3eb20fb..258ca56b21 100644 --- a/include/battle_pyramid_bag.h +++ b/include/battle_pyramid_bag.h @@ -63,7 +63,6 @@ void CB2_PyramidBagMenuFromStartMenu(void); void CB2_ReturnToPyramidBagMenu(void); void UpdatePyramidBagList(void); void UpdatePyramidBagCursorPos(void); -void sub_81C4EFC(void); void GoToBattlePyramidBagMenu(u8 location, void (*exitCallback)(void)); void Task_CloseBattlePyramidBagMessage(u8 taskId); void TryStoreHeldItemsInPyramidBag(void); diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index ee36764630..44185a11a3 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -1,23 +1,51 @@ #ifndef GUARD_BATTLE_SCRIPT_COMMANDS_H #define GUARD_BATTLE_SCRIPT_COMMANDS_H -#include "constants/pokemon.h" +#include "constants/battle_script_commands.h" -#define WINDOW_CLEAR 0x1 -#define WINDOW_x80 0x80 +// Arguments for 'flags' in HandleBattleWindow +#define WINDOW_CLEAR (1 << 0) +#define WINDOW_BG1 (1 << 7) -void AI_CalcDmg(u8 battlerIdAtk, u8 battlerIdDef); -u8 TypeCalc(u16 move, u8 battlerIdAtk, u8 battlerIdDef); -u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility); +// Arguments for 'xStart, yStart, xEnd, yEnd' in HandleBattleWindow +#define YESNOBOX_X_Y 24, 8, 29, 13 + +struct StatFractions +{ + u8 dividend; + u8 divisor; +}; + +s32 CalcCritChanceStage(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recordAbility); +s8 GetInverseCritChance(u8 battlerAtk, u8 battlerDef, u32 move); +u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); u8 GetBattlerTurnOrderNum(u8 battlerId); -void SetMoveEffect(bool8 primary, u8 certain); +bool32 NoAliveMonsForEitherParty(void); +void SetMoveEffect(bool32 primary, u32 certain); +bool32 CanBattlerSwitch(u32 battlerId); void BattleDestroyYesNoCursorAt(u8 cursorPosition); void BattleCreateYesNoCursorAt(u8 cursorPosition); void BufferMoveToLearnIntoBattleTextBuff2(void); void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags); bool8 UproarWakeUpCheck(u8 battlerId); +bool32 DoesSubstituteBlockMove(u8 battlerAtk, u8 battlerDef, u32 move); +bool32 DoesDisguiseBlockMove(u8 battlerAtk, u8 battlerDef, u32 move); +bool32 CanPoisonType(u8 battlerAttacker, u8 battlerTarget); +bool32 CanParalyzeType(u8 battlerAttacker, u8 battlerTarget); +bool32 CanUseLastResort(u8 battlerId); +u32 IsFlowerVeilProtected(u32 battler); +u32 IsLeafGuardProtected(u32 battler); +bool32 IsShieldsDownProtected(u32 battler); +u32 IsAbilityStatusProtected(u32 battler); +bool32 TryResetBattlerStatChanges(u8 battler); +bool32 CanCamouflage(u8 battlerId); +u16 GetNaturePowerMove(void); +u16 GetSecretPowerMoveEffect(void); +void StealTargetItem(u8 battlerStealer, u8 battlerItem); +u8 GetCatchingBattler(void); 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 cf39de3c4b..7e2e9a01e6 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -1,12 +1,14 @@ #ifndef GUARD_BATTLE_SCRIPTS_H #define GUARD_BATTLE_SCRIPTS_H +extern const u8 BattleScript_NotAffected[]; extern const u8 BattleScript_HitFromCritCalc[]; extern const u8 BattleScript_MoveEnd[]; extern const u8 BattleScript_MakeMoveMissed[]; extern const u8 BattleScript_PrintMoveMissed[]; extern const u8 BattleScript_MoveMissedPause[]; extern const u8 BattleScript_MoveMissed[]; +extern const u8 BattleScript_ButItFailedAtkStringPpReduce[]; extern const u8 BattleScript_ButItFailed[]; extern const u8 BattleScript_StatUp[]; extern const u8 BattleScript_StatDown[]; @@ -46,6 +48,7 @@ extern const u8 BattleScript_SandStormHailEnds[]; extern const u8 BattleScript_SunlightContinues[]; extern const u8 BattleScript_SunlightFaded[]; extern const u8 BattleScript_OverworldWeatherStarts[]; +extern const u8 BattleScript_OverworldTerrain[]; extern const u8 BattleScript_SideStatusWoreOff[]; extern const u8 BattleScript_SafeguardProtected[]; extern const u8 BattleScript_SafeguardEnds[]; @@ -53,7 +56,8 @@ extern const u8 BattleScript_LeechSeedTurnDrain[]; extern const u8 BattleScript_BideStoringEnergy[]; extern const u8 BattleScript_BideAttack[]; extern const u8 BattleScript_BideNoEnergyToAttack[]; -extern const u8 BattleScript_SuccessForceOut[]; +extern const u8 BattleScript_RoarSuccessSwitch[]; +extern const u8 BattleScript_RoarSuccessEndBattle[]; extern const u8 BattleScript_MistProtected[]; extern const u8 BattleScript_RageIsBuilding[]; extern const u8 BattleScript_MoveUsedIsDisabled[]; @@ -63,9 +67,9 @@ extern const u8 BattleScript_SelectingDisabledMoveInPalace[]; extern const u8 BattleScript_SelectingUnusableMoveInPalace[]; extern const u8 BattleScript_EncoredNoMore[]; extern const u8 BattleScript_DestinyBondTakesLife[]; -extern const u8 BattleScript_SpikesOnAttacker[]; -extern const u8 BattleScript_SpikesOnTarget[]; -extern const u8 BattleScript_SpikesOnFaintedBattler[]; +extern const u8 BattleScript_DmgHazardsOnAttacker[]; +extern const u8 BattleScript_DmgHazardsOnTarget[]; +extern const u8 BattleScript_DmgHazardsOnFaintedBattler[]; extern const u8 BattleScript_PerishSongTakesLife[]; extern const u8 BattleScript_PerishSongCountGoesDown[]; extern const u8 BattleScript_AllStatsUp[]; @@ -86,12 +90,14 @@ extern const u8 BattleScript_SelectingNotAllowedMoveTauntInPalace[]; extern const u8 BattleScript_WishComesTrue[]; extern const u8 BattleScript_IngrainTurnHeal[]; extern const u8 BattleScript_AtkDefDown[]; +extern const u8 BattleScript_DefSpDefDown[]; extern const u8 BattleScript_KnockedOff[]; extern const u8 BattleScript_MoveUsedIsImprisoned[]; extern const u8 BattleScript_SelectingImprisonedMove[]; extern const u8 BattleScript_SelectingImprisonedMoveInPalace[]; extern const u8 BattleScript_GrudgeTakesPp[]; extern const u8 BattleScript_MagicCoatBounce[]; +extern const u8 BattleScript_MagicCoatBouncePrankster[]; extern const u8 BattleScript_SnatchedMove[]; extern const u8 BattleScript_EnduredMsg[]; extern const u8 BattleScript_OneHitKOMsg[]; @@ -119,6 +125,8 @@ extern const u8 BattleScript_MoveUsedIsInLoveCantAttack[]; extern const u8 BattleScript_NightmareTurnDmg[]; extern const u8 BattleScript_CurseTurnDmg[]; extern const u8 BattleScript_TargetPRLZHeal[]; +extern const u8 BattleScript_TargetWokeUp[]; +extern const u8 BattleScript_TargetBurnHeal[]; extern const u8 BattleScript_MoveEffectSleep[]; extern const u8 BattleScript_YawnMakesAsleep[]; extern const u8 BattleScript_MoveEffectPoison[]; @@ -137,6 +145,7 @@ extern const u8 BattleScript_ItemSteal[]; extern const u8 BattleScript_DrizzleActivates[]; extern const u8 BattleScript_SpeedBoostActivates[]; extern const u8 BattleScript_TraceActivates[]; +extern const u8 BattleScript_TraceActivatesEnd3[]; extern const u8 BattleScript_RainDishActivates[]; extern const u8 BattleScript_SandstreamActivates[]; extern const u8 BattleScript_ShedSkinActivates[]; @@ -168,13 +177,14 @@ extern const u8 BattleScript_StickyHoldActivates[]; extern const u8 BattleScript_ColorChangeActivates[]; extern const u8 BattleScript_RoughSkinActivates[]; extern const u8 BattleScript_CuteCharmActivates[]; -extern const u8 BattleScript_ApplySecondaryEffect[]; +extern const u8 BattleScript_AbilityStatusEffect[]; extern const u8 BattleScript_SynchronizeActivates[]; extern const u8 BattleScript_NoItemSteal[]; extern const u8 BattleScript_AbilityCuredStatus[]; extern const u8 BattleScript_IgnoresWhileAsleep[]; extern const u8 BattleScript_IgnoresAndUsesRandomMove[]; extern const u8 BattleScript_MoveUsedLoafingAround[]; +extern const u8 BattleScript_TruantLoafingAround[]; extern const u8 BattleScript_IgnoresAndFallsAsleep[]; extern const u8 BattleScript_IgnoresAndHitsItself[]; extern const u8 BattleScript_SubstituteFade[]; @@ -194,14 +204,18 @@ extern const u8 BattleScript_BerryCureChosenStatusEnd2[]; extern const u8 BattleScript_BerryCureChosenStatusRet[]; extern const u8 BattleScript_WhiteHerbEnd2[]; extern const u8 BattleScript_WhiteHerbRet[]; -extern const u8 BattleScript_ItemHealHP_RemoveItem[]; +extern const u8 BattleScript_ItemHealHP_RemoveItemRet[]; +extern const u8 BattleScript_ItemHealHP_RemoveItemEnd2[]; extern const u8 BattleScript_BerryPPHealEnd2[]; extern const u8 BattleScript_ItemHealHP_End2[]; extern const u8 BattleScript_ItemHealHP_Ret[]; extern const u8 BattleScript_SelectingNotAllowedMoveChoiceItem[]; -extern const u8 BattleScript_FocusBandActivates[]; +extern const u8 BattleScript_SelectingNotAllowedMoveChoiceItemInPalace[]; +extern const u8 BattleScript_HangedOnMsg[]; extern const u8 BattleScript_BerryConfuseHealEnd2[]; +extern const u8 BattleScript_BerryConfuseHealRet[]; extern const u8 BattleScript_BerryStatRaiseEnd2[]; +extern const u8 BattleScript_BerryStatRaiseRet[]; extern const u8 BattleScript_BerryFocusEnergyEnd2[]; extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[]; extern const u8 BattleScript_ArenaTurnBeginning[]; @@ -222,5 +236,206 @@ extern const u8 BattleScript_RunByUsingItem[]; extern const u8 BattleScript_ActionWatchesCarefully[]; extern const u8 BattleScript_ActionGetNear[]; extern const u8 BattleScript_ActionThrowPokeblock[]; +extern const u8 BattleScript_EmbargoEndTurn[]; +extern const u8 BattleScript_TelekinesisEndTurn[]; +extern const u8 BattleScript_BufferEndTurn[]; +extern const u8 BattleScript_AquaRingHeal[]; +extern const u8 BattleScript_AuroraVeilEnds[]; +extern const u8 BattleScript_LuckyChantEnds[]; +extern const u8 BattleScript_TailwindEnds[]; +extern const u8 BattleScript_TrickRoomEnds[]; +extern const u8 BattleScript_WonderRoomEnds[]; +extern const u8 BattleScript_MagicRoomEnds[]; +extern const u8 BattleScript_ElectricTerrainEnds[]; +extern const u8 BattleScript_MistyTerrainEnds[]; +extern const u8 BattleScript_GrassyTerrainEnds[]; +extern const u8 BattleScript_PsychicTerrainEnds[]; +extern const u8 BattleScript_MudSportEnds[]; +extern const u8 BattleScript_WaterSportEnds[]; +extern const u8 BattleScript_SturdiedMsg[]; +extern const u8 BattleScript_GravityEnds[]; +extern const u8 BattleScript_MoveStatDrain[]; +extern const u8 BattleScript_MoveStatDrain_PPLoss[]; +extern const u8 BattleScript_TargetAbilityStatRaiseOnMoveEnd[]; +extern const u8 BattleScript_TargetsStatWasMaxedOut[]; +extern const u8 BattleScript_AttackerAbilityStatRaise[]; +extern const u8 BattleScript_AttackerAbilityStatRaiseEnd3[]; +extern const u8 BattleScript_PoisonHealActivates[]; +extern const u8 BattleScript_BadDreamsActivates[]; +extern const u8 BattleScript_SwitchInAbilityMsg[]; +extern const u8 BattleScript_SwitchInAbilityMsgRet[]; +extern const u8 BattleScript_ToxicSpikesPoisoned[]; +extern const u8 BattleScript_ToxicSpikesAbsorbed[]; +extern const u8 BattleScript_StickyWebOnSwitchIn[]; +extern const u8 BattleScript_SolarPowerActivates[]; +extern const u8 BattleScript_CursedBodyActivates[]; +extern const u8 BattleScript_MummyActivates[]; +extern const u8 BattleScript_WeakArmorActivates[]; +extern const u8 BattleScript_FellStingerRaisesStat[]; +extern const u8 BattleScript_SnowWarningActivates[]; +extern const u8 BattleScript_HarvestActivates[]; +extern const u8 BattleScript_ImposterActivates[]; +extern const u8 BattleScript_SelectingNotAllowedMoveAssaultVest[]; +extern const u8 BattleScript_SelectingNotAllowedMoveAssaultVestInPalace[]; +extern const u8 BattleScript_SelectingNotAllowedPlaceholder[]; +extern const u8 BattleScript_SelectingNotAllowedPlaceholderInPalace[]; +extern const u8 BattleScript_SelectingNotAllowedMoveGravity[]; +extern const u8 BattleScript_MoveUsedGravityPrevents[]; +extern const u8 BattleScript_SelectingNotAllowedMoveGravityInPalace[]; +extern const u8 BattleScript_SelectingNotAllowedMoveHealBlock[]; +extern const u8 BattleScript_MoveUsedHealBlockPrevents[]; +extern const u8 BattleScript_SelectingNotAllowedMoveHealBlockInPalace[]; +extern const u8 BattleScript_ToxicSpikesFree[]; +extern const u8 BattleScript_StickyWebFree[]; +extern const u8 BattleScript_StealthRockFree[]; +extern const u8 BattleScript_MegaEvolution[]; +extern const u8 BattleScript_WishMegaEvolution[]; +extern const u8 BattleScript_MoveEffectRecoilWithStatus[]; +extern const u8 BattleScript_EffectWithChance[]; +extern const u8 BattleScript_MoveEffectClearSmog[]; +extern const u8 BattleScript_ForceRandomSwitch[]; +extern const u8 BattleScript_SideStatusWoreOffReturn[]; +extern const u8 BattleScript_MoveEffectSmackDown[]; +extern const u8 BattleScript_MoveEffectFlameBurst[]; +extern const u8 BattleScript_TrainerSlideMsgRet[]; +extern const u8 BattleScript_TrainerSlideMsgEnd2[]; +extern const u8 BattleScript_MoveEffectFeint[]; +extern const u8 BattleScript_ProteanActivates[]; +extern const u8 BattleScript_DazzlingProtected[]; +extern const u8 BattleScript_MoveUsedPsychicTerrainPrevents[]; +extern const u8 BattleScript_MoveUsedPowder[]; +extern const u8 BattleScript_SelectingNotAllowedStuffCheeks[]; +extern const u8 BattleScript_SelectingNotAllowedStuffCheeksInPalace[]; +extern const u8 BattleScript_SelectingNotAllowedBelch[]; +extern const u8 BattleScript_SelectingNotAllowedBelchInPalace[]; +extern const u8 BattleScript_PsychicSurgeActivates[]; +extern const u8 BattleScript_GrassySurgeActivates[]; +extern const u8 BattleScript_MistySurgeActivates[]; +extern const u8 BattleScript_ElectricSurgeActivates[]; +extern const u8 BattleScript_SpectralThiefSteal[]; +extern const u8 BattleScript_StatUpMsg[]; +extern const u8 BattleScript_AbilityRaisesDefenderStat[]; +extern const u8 BattleScript_PowderMoveNoEffect[]; +extern const u8 BattleScript_GrassyTerrainHeals[]; +extern const u8 BattleScript_VCreateStatLoss[]; +extern const u8 BattleScript_SpikyShieldEffect[]; +extern const u8 BattleScript_KingsShieldEffect[]; +extern const u8 BattleScript_BanefulBunkerEffect[]; +extern const u8 BattleScript_FlowerVeilProtectsRet[]; +extern const u8 BattleScript_SweetVeilProtectsRet[]; +extern const u8 BattleScript_MoveEffectCoreEnforcer[]; +extern const u8 BattleScript_SelectingNotAllowedMoveThroatChop[]; +extern const u8 BattleScript_MoveUsedIsThroatChopPrevented[]; +extern const u8 BattleScript_SelectingNotAllowedMoveThroatChopInPalace[]; +extern const u8 BattleScript_ThroatChopEndTurn[]; +extern const u8 BattleScript_GemActivates[]; +extern const u8 BattleScript_BerryReduceDmg[]; +extern const u8 BattleScript_PrintBerryReduceString[]; +extern const u8 BattleScript_WeaknessPolicy[]; +extern const u8 BattleScript_TargetItemStatRaise[]; +extern const u8 BattleScript_RockyHelmetActivates[]; +extern const u8 BattleScript_ItemHurtEnd2[]; +extern const u8 BattleScript_AirBaloonMsgIn[]; +extern const u8 BattleScript_AirBaloonMsgPop[]; +extern const u8 BattleScript_ItemHurtRet[]; +extern const u8 BattleScript_ToxicOrb[]; +extern const u8 BattleScript_FlameOrb[]; +extern const u8 BattleScript_MoveEffectIncinerate[]; +extern const u8 BattleScript_MoveEffectBugBite[]; +extern const u8 BattleScript_IllusionOff[]; +extern const u8 BattleScript_DancerActivates[]; +extern const u8 BattleScript_AftermathDmg[]; +extern const u8 BattleScript_AttackerFormChange[]; +extern const u8 BattleScript_AttackerFormChangeEnd3[]; +extern const u8 BattleScript_TargetFormChange[]; +extern const u8 BattleScript_AnticipationActivates[]; +extern const u8 BattleScript_SlowStartEnds[]; +extern const u8 BattleScript_HealerActivates[]; +extern const u8 BattleScript_ScriptingAbilityStatRaise[]; +extern const u8 BattleScript_ReceiverActivates[]; +extern const u8 BattleScript_FriskActivates[]; +extern const u8 BattleScript_FriskMsg[]; +extern const u8 BattleScript_FriskMsgWithPopup[]; +extern const u8 BattleScript_MoodyActivates[]; +extern const u8 BattleScript_EmergencyExit[]; +extern const u8 BattleScript_EmergencyExitNoPopUp[]; +extern const u8 BattleScript_EmergencyExitWild[]; +extern const u8 BattleScript_EmergencyExitWildNoPopUp[]; +extern const u8 BattleScript_CheekPouchActivates[]; +extern const u8 BattleScript_TotemVar[]; +extern const u8 BattleScript_TotemFlaredToLife[]; +extern const u8 BattleScript_AnnounceAirLockCloudNine[]; +extern const u8 BattleScript_BattlerAbilityStatRaiseOnSwitchIn[]; +extern const u8 BattleScript_CottonDownActivates[]; +extern const u8 BattleScript_BallFetch[]; +extern const u8 BattleScript_SandSpitActivates[]; +extern const u8 BattleScript_PerishBodyActivates[]; +extern const u8 BattleScript_ActivateAsOne[]; +extern const u8 BattleScript_RaiseStatOnFaintingTarget[]; +extern const u8 BattleScript_QuickClawActivation[]; +extern const u8 BattleScript_QuickDrawActivation[]; +extern const u8 BattleScript_CustapBerryActivation[]; +extern const u8 BattleScript_MicleBerryActivateEnd2[]; +extern const u8 BattleScript_MicleBerryActivateRet[]; +extern const u8 BattleScript_JabocaRowapBerryActivates[]; +extern const u8 BattleScript_NotAffectedAbilityPopUp[]; +extern const u8 BattleScript_BattlerShookOffTaunt[]; +extern const u8 BattleScript_BattlerGotOverItsInfatuation[]; +extern const u8 BattleScript_Pickpocket[]; +extern const u8 BattleScript_StickyBarbTransfer[]; +extern const u8 BattleScript_AttackerItemStatRaise[]; +extern const u8 BattleScript_RedCardActivates[]; +extern const u8 BattleScript_EjectButtonActivates[]; +extern const u8 BattleScript_EjectPackActivate_Ret[]; +extern const u8 BattleScript_EjectPackActivate_End2[]; +extern const u8 BattleScript_EjectPackActivates[]; +extern const u8 BattleScript_MentalHerbCureRet[]; +extern const u8 BattleScript_MentalHerbCureEnd2[]; +extern const u8 BattleScript_TerrainPreventsEnd2[]; +extern const u8 BattleScript_MistyTerrainPrevents[]; +extern const u8 BattleScript_ElectricTerrainPrevents[]; +extern const u8 BattleScript_DarkTypePreventsPrankster[]; +extern const u8 BattleScript_GulpMissileGorging[]; +extern const u8 BattleScript_GulpMissileGulping[]; +extern const u8 BattleScript_BattleBondActivatesOnMoveEndAttacker[]; +extern const u8 BattleScript_DesolateLandActivates[]; +extern const u8 BattleScript_DesolateLandEvaporatesWaterTypeMoves[]; +extern const u8 BattleScript_PrimordialSeaActivates[]; +extern const u8 BattleScript_PrimordialSeaFizzlesOutFireTypeMoves[]; +extern const u8 BattleScript_DeltaStreamActivates[]; +extern const u8 BattleScript_MysteriousAirCurrentBlowsOn[]; +extern const u8 BattleScript_AttackWeakenedByStrongWinds[]; +extern const u8 BattleScript_BlockedByPrimalWeatherEnd3[]; +extern const u8 BattleScript_BlockedByPrimalWeatherRet[]; +extern const u8 BattleScript_PrimalReversion[]; +extern const u8 BattleScript_HyperspaceFuryRemoveProtect[]; +extern const u8 BattleScript_SelectingNotAllowedMoveGorillaTactics[]; +extern const u8 BattleScript_SelectingNotAllowedMoveGorillaTacticsInPalace[]; +extern const u8 BattleScript_WanderingSpiritActivates[]; +extern const u8 BattleScript_MirrorArmorReflect[]; +extern const u8 BattleScript_GooeyActivates[]; +extern const u8 BattleScript_PastelVeilActivates[]; +extern const u8 BattleScript_MimicryActivatesEnd3[]; +extern const u8 BattleScript_ApplyMimicry[]; +extern const u8 BattleScript_AttackerFormChangeEnd3NoPopup[]; +extern const u8 BattleScript_AttackerFormChangeMoveEffect[]; +extern const u8 BattleScript_BothCanNoLongerEscape[]; +extern const u8 BattleScript_OctolockEndTurn[]; +extern const u8 BattleScript_NeutralizingGasExits[]; +extern const u8 BattleScript_MagicianActivates[]; +extern const u8 BattleScript_BeakBlastSetUp[]; +extern const u8 BattleScript_BeakBlastBurn[]; +extern const u8 BattleScript_DefDownSpeedUp[]; +extern const u8 BattleScript_AffectionBasedStatusHeal[]; +extern const u8 BattleScript_AffectionBasedEndurance[]; + +// zmoves +extern const u8 BattleScript_ZMoveActivateDamaging[]; +extern const u8 BattleScript_ZMoveActivateStatus[]; +extern const u8 BattleScript_ZEffectPrintString[]; +extern const u8 BattleScript_RecoverHPZMove[]; +extern const u8 BattleScript_StatUpZMove[]; +extern const u8 BattleScript_HealReplacementZMove[]; +extern const u8 BattleScript_EffectExtremeEvoboost[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/battle_setup.h b/include/battle_setup.h index 8f78bba3cd..e29b3155fe 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -19,16 +19,20 @@ extern u16 gTrainerBattleOpponent_B; extern u16 gPartnerTrainerId; void BattleSetup_StartWildBattle(void); +void BattleSetup_StartDoubleWildBattle(void); void BattleSetup_StartBattlePikeWildBattle(void); void BattleSetup_StartRoamerBattle(void); void StartWallyTutorialBattle(void); void BattleSetup_StartScriptedWildBattle(void); +void BattleSetup_StartScriptedDoubleWildBattle(void); void BattleSetup_StartLatiBattle(void); void BattleSetup_StartLegendaryBattle(void); void StartGroudonKyogreBattle(void); void StartRegiBattle(void); u8 BattleSetup_GetTerrainId(void); -u8 GetSpecialBattleTransition(s32 arg0); +u8 GetWildBattleTransition(void); +u8 GetTrainerBattleTransition(void); +u8 GetSpecialBattleTransition(s32 id); void ChooseStarter(void); void ResetTrainerOpponentIds(void); void SetMapVarsToTrainer(void); diff --git a/include/battle_transition.h b/include/battle_transition.h index a33032fb43..1e7339fa2f 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -1,18 +1,16 @@ #ifndef GUARD_BATTLE_TRANSITION_H #define GUARD_BATTLE_TRANSITION_H -void TestBattleTransition(u8 transitionId); void BattleTransition_StartOnField(u8 transitionId); void BattleTransition_Start(u8 transitionId); bool8 IsBattleTransitionDone(void); -bool8 FldEff_Pokeball(void); -void TransitionPhase1_Task_RunFuncs(u8 taskId); +bool8 FldEff_PokeballTrail(void); +void Task_BattleTransition_Intro(u8 taskId); void GetBg0TilesDst(u16 **tilemap, u16 **tileset); extern const struct SpritePalette gSpritePalette_Pokeball; -enum // TRANSITION_MUGSHOT -{ +enum { MUGSHOT_SIDNEY, MUGSHOT_PHOEBE, MUGSHOT_GLACIA, @@ -21,52 +19,64 @@ enum // TRANSITION_MUGSHOT MUGSHOTS_COUNT }; -// credits for the names go to Dyskinesia, Tetrable and Farore -// names are naturally subject to change +enum { + B_TRANSITION_BLUR, + B_TRANSITION_SWIRL, + B_TRANSITION_SHUFFLE, + B_TRANSITION_BIG_POKEBALL, + B_TRANSITION_POKEBALLS_TRAIL, + B_TRANSITION_CLOCKWISE_WIPE, + B_TRANSITION_RIPPLE, + B_TRANSITION_WAVE, + B_TRANSITION_SLICE, + B_TRANSITION_WHITE_BARS_FADE, + B_TRANSITION_GRID_SQUARES, + B_TRANSITION_ANGLED_WIPES, + B_TRANSITION_SIDNEY, + B_TRANSITION_PHOEBE, + B_TRANSITION_GLACIA, + B_TRANSITION_DRAKE, + B_TRANSITION_CHAMPION, + B_TRANSITION_AQUA, // Here below added in Emerald + B_TRANSITION_MAGMA, + B_TRANSITION_REGICE, + B_TRANSITION_REGISTEEL, + B_TRANSITION_REGIROCK, + B_TRANSITION_KYOGRE, + B_TRANSITION_GROUDON, + B_TRANSITION_RAYQUAZA, + B_TRANSITION_SHRED_SPLIT, + B_TRANSITION_BLACKHOLE, + B_TRANSITION_BLACKHOLE_PULSATE, + B_TRANSITION_RECTANGULAR_SPIRAL, + B_TRANSITION_FRONTIER_LOGO_WIGGLE, + B_TRANSITION_FRONTIER_LOGO_WAVE, + B_TRANSITION_FRONTIER_SQUARES, + B_TRANSITION_FRONTIER_SQUARES_SCROLL, + B_TRANSITION_FRONTIER_SQUARES_SPIRAL, + B_TRANSITION_FRONTIER_CIRCLES_MEET, + B_TRANSITION_FRONTIER_CIRCLES_CROSS, + B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL, + B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL, + B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ, + B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ, + B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ, + B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ, + B_TRANSITION_COUNT +}; -#define B_TRANSITION_BLUR 0 -#define B_TRANSITION_SWIRL 1 -#define B_TRANSITION_SHUFFLE 2 -#define B_TRANSITION_BIG_POKEBALL 3 -#define B_TRANSITION_POKEBALLS_TRAIL 4 -#define B_TRANSITION_CLOCKWISE_BLACKFADE 5 -#define B_TRANSITION_RIPPLE 6 -#define B_TRANSITION_WAVE 7 -#define B_TRANSITION_SLICE 8 -#define B_TRANSITION_WHITEFADE 9 -#define B_TRANSITION_GRID_SQUARES 10 -#define B_TRANSITION_SHARDS 11 -#define B_TRANSITION_SIDNEY 12 -#define B_TRANSITION_PHOEBE 13 -#define B_TRANSITION_GLACIA 14 -#define B_TRANSITION_DRAKE 15 -#define B_TRANSITION_CHAMPION 16 -// added in Emerald -#define B_TRANSITION_AQUA 17 -#define B_TRANSITION_MAGMA 18 -#define B_TRANSITION_REGICE 19 -#define B_TRANSITION_REGISTEEL 20 -#define B_TRANSITION_REGIROCK 21 -#define B_TRANSITION_KYOGRE 22 -#define B_TRANSITION_GROUDON 23 -#define B_TRANSITION_RAYQUAZA 24 -#define B_TRANSITION_SHRED_SPLIT 25 -#define B_TRANSITION_BLACKHOLE1 26 -#define B_TRANSITION_BLACKHOLE2 27 -#define B_TRANSITION_RECTANGULAR_SPIRAL 28 -#define B_TRANSITION_FRONTIER_LOGO_WIGGLE 29 -#define B_TRANSITION_FRONTIER_LOGO_WAVE 30 -#define B_TRANSITION_FRONTIER_SQUARES 31 -#define B_TRANSITION_FRONTIER_SQUARES_SCROLL 32 -#define B_TRANSITION_FRONTIER_SQUARES_SPIRAL 33 -#define B_TRANSITION_FRONTIER_CIRCLES_MEET 34 -#define B_TRANSITION_FRONTIER_CIRCLES_CROSS 35 -#define B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL 36 -#define B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL 37 -#define B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ 38 -#define B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ 39 -#define B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ 40 -#define B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ 41 -#define B_TRANSITION_COUNT 42 +// IDs for GetSpecialBattleTransition +enum { + B_TRANSITION_GROUP_B_TOWER, + B_TRANSITION_GROUP_B_DOME = 3, + B_TRANSITION_GROUP_B_PALACE, + B_TRANSITION_GROUP_B_ARENA, + B_TRANSITION_GROUP_B_FACTORY, + B_TRANSITION_GROUP_B_PIKE, + B_TRANSITION_GROUP_B_PYRAMID = 10, + B_TRANSITION_GROUP_TRAINER_HILL, + B_TRANSITION_GROUP_SECRET_BASE, + B_TRANSITION_GROUP_E_READER, +}; #endif // GUARD_BATTLE_TRANSITION_H diff --git a/include/battle_transition_frontier.h b/include/battle_transition_frontier.h index 8813fe81e0..22d674923e 100644 --- a/include/battle_transition_frontier.h +++ b/include/battle_transition_frontier.h @@ -1,13 +1,13 @@ #ifndef GUARD_BATTLE_TRANSITION_FRONTIER_H #define GUARD_BATTLE_TRANSITION_FRONTIER_H -void Phase2Task_FrontierCirclesMeet(u8 taskId); -void Phase2Task_FrontierCirclesCross(u8 taskId); -void Phase2Task_FrontierCirclesAsymmetricSpiral(u8 taskId); -void Phase2Task_FrontierCirclesSymmetricSpiral(u8 taskId); -void Phase2Task_FrontierCirclesMeetInSeq(u8 taskId); -void Phase2Task_FrontierCirclesCrossInSeq(u8 taskId); -void Phase2Task_FrontierCirclesAsymmetricSpiralInSeq(u8 taskId); -void Phase2Task_FrontierCirclesSymmetricSpiralInSeq(u8 taskId); +void Task_FrontierCirclesMeet(u8 taskId); +void Task_FrontierCirclesCross(u8 taskId); +void Task_FrontierCirclesAsymmetricSpiral(u8 taskId); +void Task_FrontierCirclesSymmetricSpiral(u8 taskId); +void Task_FrontierCirclesMeetInSeq(u8 taskId); +void Task_FrontierCirclesCrossInSeq(u8 taskId); +void Task_FrontierCirclesAsymmetricSpiralInSeq(u8 taskId); +void Task_FrontierCirclesSymmetricSpiralInSeq(u8 taskId); #endif // GUARD_BATTLE_TRANSITION_FRONTIER_H diff --git a/include/battle_util.h b/include/battle_util.h index e4ef99e0bd..5dbefd7e7e 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -6,41 +6,69 @@ #define MOVE_LIMITATION_DISABLED (1 << 2) #define MOVE_LIMITATION_TORMENTED (1 << 3) #define MOVE_LIMITATION_TAUNT (1 << 4) -#define MOVE_LIMITATION_IMPRISON (1 << 5) +#define MOVE_LIMITATION_IMPRISON (1 << 5) +#define MOVE_LIMITATION_ENCORE (1 << 6) +#define MOVE_LIMITATION_CHOICE_ITEM (1 << 7) +#define MOVE_LIMITATION_ASSAULT_VEST (1 << 8) +#define MOVE_LIMITATION_GRAVITY (1 << 9) +#define MOVE_LIMITATION_HEAL_BLOCK (1 << 10) +#define MOVE_LIMITATION_BELCH (1 << 11) +#define MOVE_LIMITATION_THROAT_CHOP (1 << 12) +#define MOVE_LIMITATION_STUFF_CHEEKS (1 << 13) -#define ABILITYEFFECT_ON_SWITCHIN 0x0 -#define ABILITYEFFECT_ENDTURN 0x1 -#define ABILITYEFFECT_MOVES_BLOCK 0x2 -#define ABILITYEFFECT_ABSORBING 0x3 -#define ABILITYEFFECT_ON_DAMAGE 0x4 -#define ABILITYEFFECT_IMMUNITY 0x5 -#define ABILITYEFFECT_FORECAST 0x6 -#define ABILITYEFFECT_SYNCHRONIZE 0x7 -#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8 -#define ABILITYEFFECT_INTIMIDATE1 0x9 -#define ABILITYEFFECT_INTIMIDATE2 0xA -#define ABILITYEFFECT_TRACE 0xB -#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC -#define ABILITYEFFECT_CHECK_BATTLER_SIDE 0xD -#define ABILITYEFFECT_FIELD_SPORT 0xE -#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER 0xF -#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10 -#define ABILITYEFFECT_COUNT_BATTLER_SIDE 0x11 -#define ABILITYEFFECT_COUNT_ON_FIELD 0x12 -#define ABILITYEFFECT_CHECK_ON_FIELD 0x13 -#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF +#define MOVE_LIMITATION_PLACEHOLDER (1 << 15) +#define MOVE_LIMITATIONS_ALL 0xFFFF -#define ABILITY_ON_OPPOSING_FIELD(battlerId, abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, battlerId, abilityId, 0, 0)) -#define ABILITY_ON_FIELD(abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, abilityId, 0, 0)) -#define ABILITY_ON_FIELD2(abilityId)(AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, abilityId, 0, 0)) +#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_FORECAST 7 +#define ABILITYEFFECT_SYNCHRONIZE 8 +#define ABILITYEFFECT_ATK_SYNCHRONIZE 9 +#define ABILITYEFFECT_INTIMIDATE1 10 +#define ABILITYEFFECT_INTIMIDATE2 11 +#define ABILITYEFFECT_TRACE1 12 +#define ABILITYEFFECT_TRACE2 13 +#define ABILITYEFFECT_MOVE_END_OTHER 14 +#define ABILITYEFFECT_NEUTRALIZINGGAS 15 +#define ABILITYEFFECT_FIELD_SPORT 16 // Only used if B_SPORT_TURNS < GEN_6 +// Special cases +#define ABILITYEFFECT_MUD_SPORT 252 // Only used if B_SPORT_TURNS < GEN_6 +#define ABILITYEFFECT_WATER_SPORT 253 // Only used if B_SPORT_TURNS < GEN_6 +#define ABILITYEFFECT_SWITCH_IN_TERRAIN 254 +#define ABILITYEFFECT_SWITCH_IN_WEATHER 255 -#define ITEMEFFECT_ON_SWITCH_IN 0x0 -#define ITEMEFFECT_MOVE_END 0x3 -#define ITEMEFFECT_KINGSROCK_SHELLBELL 0x4 +// For the first argument of ItemBattleEffects, to deteremine which block of item effects to try +#define ITEMEFFECT_ON_SWITCH_IN 0 +#define ITEMEFFECT_NORMAL 1 +#define ITEMEFFECT_DUMMY 2 // Unused, empty +#define ITEMEFFECT_MOVE_END 3 +#define ITEMEFFECT_KINGSROCK 4 +#define ITEMEFFECT_TARGET 5 +#define ITEMEFFECT_ORBS 6 +#define ITEMEFFECT_LIFEORB_SHELLBELL 7 +#define ITEMEFFECT_BATTLER_MOVE_END 8 // move end effects for just the battler, not whole field -#define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK))) -#define WEATHER_HAS_EFFECT2 ((!ABILITY_ON_FIELD2(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD2(ABILITY_AIR_LOCK))) +#define WEATHER_HAS_EFFECT ((!IsAbilityOnField(ABILITY_CLOUD_NINE) && !IsAbilityOnField(ABILITY_AIR_LOCK))) +#define IS_WHOLE_SIDE_ALIVE(battler)((IsBattlerAlive(battler) && IsBattlerAlive(BATTLE_PARTNER(battler)))) + +// for Natural Gift and Fling +struct TypePower +{ + u8 type; + u8 power; + u16 effect; +}; + +extern const struct TypePower gNaturalGiftTable[]; + +void HandleAction_ThrowBall(void); +bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move); void HandleAction_UseMove(void); void HandleAction_Switch(void); void HandleAction_UseItem(void); @@ -58,37 +86,121 @@ u8 GetBattlerForBattleScript(u8 caseId); void PressurePPLose(u8 target, u8 attacker, u16 move); void PressurePPLoseOnUsingPerishSong(u8 attacker); void PressurePPLoseOnUsingImprison(u8 attacker); -void MarkAllBattlersForControllerExec(void); // unused +bool32 IsBattlerMarkedForControllerExec(u8 battlerId); void MarkBattlerForControllerExec(u8 battlerId); -void MarkBattlerReceivedLinkData(u8 arg0); +void MarkBattlerReceivedLinkData(u8 battlerId); void CancelMultiTurnMoves(u8 battlerId); bool8 WasUnableToUseMove(u8 battlerId); void PrepareStringBattle(u16 stringId, u8 battlerId); void ResetSentPokesToOpponentValue(void); void OpponentSwitchInResetSentPokesToOpponentValue(u8 battlerId); void UpdateSentPokesToOpponentValue(u8 battlerId); -void BattleScriptPush(const u8* bsPtr); +void BattleScriptPush(const u8 *bsPtr); void BattleScriptPushCursor(void); void BattleScriptPop(void); u8 TrySetCantSelectMoveBattleScript(void); -u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check); +u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u16 check); bool8 AreAllMovesUnusable(void); u8 GetImprisonedMovesCount(u8 battlerId, u16 move); u8 DoFieldEndTurnEffects(void); +s32 GetDrainedBigRootHp(u32 battler, s32 hp); u8 DoBattlerEndTurnEffects(void); bool8 HandleWishPerishSongOnTurnEnd(void); bool8 HandleFaintedMonActions(void); -void TryClearRageStatuses(void); +void TryClearRageAndFuryCutter(void); u8 AtkCanceller_UnableToUseMove(void); +u8 AtkCanceller_UnableToUseMove2(void); bool8 HasNoMonsToSwitch(u8 battlerId, u8 r1, u8 r2); -u8 CastformDataTypeChange(u8 battlerId); -u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg); -void BattleScriptExecute(const u8* BS_ptr); -void BattleScriptPushCursorAndCallback(const u8* BS_ptr); +u8 TryWeatherFormChange(u8 battlerId); +bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility); +u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u16 ability, u8 special, u16 moveArg); +u32 GetBattlerAbility(u8 battlerId); +u32 IsAbilityOnSide(u32 battlerId, u32 ability); +u32 IsAbilityOnOpposingSide(u32 battlerId, u32 ability); +u32 IsAbilityOnField(u32 ability); +u32 IsAbilityOnFieldExcept(u32 battlerId, u32 ability); +u32 IsAbilityPreventingEscape(u32 battlerId); +bool32 IsBattlerProtected(u8 battlerId, u16 move); +bool32 CanBattlerEscape(u32 battlerId); // no ability check +void BattleScriptExecute(const u8 *BS_ptr); +void BattleScriptPushCursorAndCallback(const u8 *BS_ptr); u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn); void ClearFuryCutterDestinyBondGrudge(u8 battlerId); void HandleAction_RunBattleScript(void); -u8 GetMoveTarget(u16 move, u8 setTarget); +u32 SetRandomTarget(u32 battlerId); +u32 GetMoveTarget(u16 move, u8 setTarget); u8 IsMonDisobedient(void); +u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating); +u32 GetBattlerHoldEffectParam(u8 battlerId); +bool32 IsMoveMakingContact(u16 move, u8 battlerAtk); +bool32 IsBattlerGrounded(u8 battlerId); +bool32 IsBattlerAlive(u8 battlerId); +u8 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u16 move); +u32 GetBattlerWeight(u8 battlerId); +s32 CalculateMoveDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags); +s32 CalculateMoveDamageAndEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, u16 *typeEffectivenessModifier); +u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities); +u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef); +u16 GetTypeModifier(u8 atkType, u8 defType); +s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId); +u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId); +u16 GetPrimalReversionSpecies(u16 preEvoSpecies, u16 heldItemId); +u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4); +bool32 CanMegaEvolve(u8 battlerId); +void UndoMegaEvolution(u32 monId); +void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut); +bool32 DoBattlersShareType(u32 battler1, u32 battler2); +bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId); +struct Pokemon *GetIllusionMonPtr(u32 battlerId); +void ClearIllusionMon(u32 battlerId); +bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId); +bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId); +u8 GetBattleMoveSplit(u32 moveId); +bool32 TestMoveFlags(u16 move, u32 flag); +struct Pokemon *GetBattlerPartyData(u8 battlerId); +bool32 CanFling(u8 battlerId); +bool32 IsTelekinesisBannedSpecies(u16 species); +bool32 IsHealBlockPreventingMove(u32 battler, u32 move); +bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId); +bool32 IsPartnerMonFromSameTrainer(u8 battlerId); +u8 GetSplitBasedOnStats(u8 battlerId); +void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast); +bool32 TestSheerForceFlag(u8 battler, u16 move); +void TryRestoreStolenItems(void); +bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item); +void TrySaveExchangedItem(u8 battlerId, u16 stolenItem); +bool32 IsPartnerMonFromSameTrainer(u8 battlerId); +u8 TryHandleSeed(u8 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute); +bool32 IsBattlerAffectedByHazards(u8 battlerId, bool32 toxicSpikes); +void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast); +bool32 CompareStat(u8 battlerId, u8 statId, u8 cmpTo, u8 cmpKind); +bool32 TryRoomService(u8 battlerId); +void BufferStatChange(u8 battlerId, u8 statId, u8 stringId); +void DoBurmyFormChange(u32 monId); +bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget); +u16 GetUsedHeldItem(u8 battler); +bool32 IsBattlerWeatherAffected(u8 battlerId, u32 weatherFlags); +void TryToApplyMimicry(u8 battlerId, bool8 various); +void TryToRevertMimicry(void); +void RestoreBattlerOriginalTypes(u8 battlerId); +u32 GetBattlerMoveTargetType(u8 battlerId, u16 move); +bool32 CanTargetBattler(u8 battlerAtk, u8 battlerDef, u16 move); +// Ability checks +bool32 IsRolePlayBannedAbilityAtk(u16 ability); +bool32 IsRolePlayBannedAbility(u16 ability); +bool32 IsSkillSwapBannedAbility(u16 ability); +bool32 IsWorrySeedBannedAbility(u16 ability); +bool32 IsGastroAcidBannedAbility(u16 ability); +bool32 IsEntrainmentBannedAbilityAttacker(u16 ability); +bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability); + +bool32 CanSleep(u8 battlerId); +bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget); +bool32 CanBeBurned(u8 battlerId); +bool32 CanBeParalyzed(u8 battlerId); +bool32 CanBeFrozen(u8 battlerId); +bool32 CanBeConfused(u8 battlerId); +bool32 IsBattlerTerrainAffected(u8 battlerId, u32 terrainFlag); +u32 GetMonFriendshipScore(struct Pokemon *pokemon); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/battle_util2.h b/include/battle_util2.h index fe767ea4bf..51c9c03630 100644 --- a/include/battle_util2.h +++ b/include/battle_util2.h @@ -5,6 +5,6 @@ void AllocateBattleResources(void); void FreeBattleResources(void); void AdjustFriendshipOnBattleFaint(u8 battler); void SwitchPartyOrderInGameMulti(u8 battler, u8 arg1); -u32 sub_805725C(u8 battler); +u32 BattlePalace_TryEscapeStatus(u8 battler); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/battle_z_move.h b/include/battle_z_move.h new file mode 100644 index 0000000000..94a9c3568c --- /dev/null +++ b/include/battle_z_move.h @@ -0,0 +1,30 @@ +#ifndef GUARD_BATTLE_Z_MOVE_H +#define GUARD_BATTLE_Z_MOVE_H + +#include "constants/z_move_effects.h" + +#define MOVE_Z_STATUS 0xFFFF + +struct SignatureZMove +{ + u16 species; + u16 item; + u16 move; + u16 zmove; +}; + +bool8 IsZMove(u16 move); +void QueueZMove(u8 battlerId, u16 baseMove); +bool32 IsViableZMove(u8 battlerId, u16 move); +bool32 TryChangeZIndicator(u8 battlerId, u8 moveIndex); +void CreateZMoveTriggerSprite(u8, bool8); +void HideZMoveTriggerSprite(void); +bool32 IsZMoveTriggerSpriteActive(void); +void DestroyZMoveTriggerSprite(void); +bool32 MoveSelectionDisplayZMove(u16 zmove); +const u8 *GetZMoveName(u16 move); +void SetZEffect(void); +bool32 IsZMoveUsable(u8 battlerId, u16 moveIndex); +void GetUsableZMoves(u8 battlerId, u16 *moves); + +#endif // GUARD_BATTLE_Z_MOVE_H \ No newline at end of file diff --git a/include/bike.h b/include/bike.h index 893b0b19e4..00f11aefe3 100644 --- a/include/bike.h +++ b/include/bike.h @@ -17,11 +17,11 @@ struct BikeHistoryInputInfo // Player speeds enum { - SPEED_STANDING, - SPEED_NORMAL, - SPEED_FAST, - SPEED_FASTER, - SPEED_FASTEST, + PLAYER_SPEED_STANDING, + PLAYER_SPEED_NORMAL, + PLAYER_SPEED_FAST, + PLAYER_SPEED_FASTER, + PLAYER_SPEED_FASTEST, }; // mach bike transitions enum diff --git a/include/config.h b/include/config.h index 4c231a84de..d4a71c0766 100644 --- a/include/config.h +++ b/include/config.h @@ -19,12 +19,14 @@ #ifdef ENGLISH #define UNITS_IMPERIAL +#define CHAR_DEC_SEPARATOR CHAR_PERIOD // Period is used as a decimal separator only in the UK and the US. #else #define UNITS_METRIC +#define CHAR_DEC_SEPARATOR CHAR_COMMA #endif // Uncomment to fix some identified minor bugs -//#define BUGFIX +#define BUGFIX // Various undefined behavior bugs may or may not prevent compilation with // newer compilers. So always fix them when using a modern compiler. @@ -34,4 +36,12 @@ #endif #endif +// Compatibility definition for other projects to detect pokeemerald-expansion +#define RHH_EXPANSION + +// Legacy branch-based defines included for backwards compatibility +#define BATTLE_ENGINE +#define POKEMON_EXPANSION +#define ITEM_EXPANSION + #endif // GUARD_CONFIG_H diff --git a/include/constants/abilities.h b/include/constants/abilities.h index 4ad54c86fa..23b9fe2b72 100644 --- a/include/constants/abilities.h +++ b/include/constants/abilities.h @@ -77,9 +77,221 @@ #define ABILITY_WHITE_SMOKE 73 #define ABILITY_PURE_POWER 74 #define ABILITY_SHELL_ARMOR 75 -#define ABILITY_CACOPHONY 76 -#define ABILITY_AIR_LOCK 77 +#define ABILITY_AIR_LOCK 76 -#define ABILITIES_COUNT 78 +#define ABILITIES_COUNT_GEN3 77 + +// Gen 4 +#define ABILITY_TANGLED_FEET 77 +#define ABILITY_MOTOR_DRIVE 78 +#define ABILITY_RIVALRY 79 +#define ABILITY_STEADFAST 80 +#define ABILITY_SNOW_CLOAK 81 +#define ABILITY_GLUTTONY 82 +#define ABILITY_ANGER_POINT 83 +#define ABILITY_UNBURDEN 84 +#define ABILITY_HEATPROOF 85 +#define ABILITY_SIMPLE 86 +#define ABILITY_DRY_SKIN 87 +#define ABILITY_DOWNLOAD 88 +#define ABILITY_IRON_FIST 89 +#define ABILITY_POISON_HEAL 90 +#define ABILITY_ADAPTABILITY 91 +#define ABILITY_SKILL_LINK 92 +#define ABILITY_HYDRATION 93 +#define ABILITY_SOLAR_POWER 94 +#define ABILITY_QUICK_FEET 95 +#define ABILITY_NORMALIZE 96 +#define ABILITY_SNIPER 97 +#define ABILITY_MAGIC_GUARD 98 +#define ABILITY_NO_GUARD 99 +#define ABILITY_STALL 100 +#define ABILITY_TECHNICIAN 101 +#define ABILITY_LEAF_GUARD 102 +#define ABILITY_KLUTZ 103 +#define ABILITY_MOLD_BREAKER 104 +#define ABILITY_SUPER_LUCK 105 +#define ABILITY_AFTERMATH 106 +#define ABILITY_ANTICIPATION 107 +#define ABILITY_FOREWARN 108 +#define ABILITY_UNAWARE 109 +#define ABILITY_TINTED_LENS 110 +#define ABILITY_FILTER 111 +#define ABILITY_SLOW_START 112 +#define ABILITY_SCRAPPY 113 +#define ABILITY_STORM_DRAIN 114 +#define ABILITY_ICE_BODY 115 +#define ABILITY_SOLID_ROCK 116 +#define ABILITY_SNOW_WARNING 117 +#define ABILITY_HONEY_GATHER 118 +#define ABILITY_FRISK 119 +#define ABILITY_RECKLESS 120 +#define ABILITY_MULTITYPE 121 +#define ABILITY_FLOWER_GIFT 122 +#define ABILITY_BAD_DREAMS 123 + +#define ABILITIES_COUNT_GEN4 124 + +// Gen 5 +#define ABILITY_PICKPOCKET 124 +#define ABILITY_SHEER_FORCE 125 +#define ABILITY_CONTRARY 126 +#define ABILITY_UNNERVE 127 +#define ABILITY_DEFIANT 128 +#define ABILITY_DEFEATIST 129 +#define ABILITY_CURSED_BODY 130 +#define ABILITY_HEALER 131 +#define ABILITY_FRIEND_GUARD 132 +#define ABILITY_WEAK_ARMOR 133 +#define ABILITY_HEAVY_METAL 134 +#define ABILITY_LIGHT_METAL 135 +#define ABILITY_MULTISCALE 136 +#define ABILITY_TOXIC_BOOST 137 +#define ABILITY_FLARE_BOOST 138 +#define ABILITY_HARVEST 139 +#define ABILITY_TELEPATHY 140 +#define ABILITY_MOODY 141 +#define ABILITY_OVERCOAT 142 +#define ABILITY_POISON_TOUCH 143 +#define ABILITY_REGENERATOR 144 +#define ABILITY_BIG_PECKS 145 +#define ABILITY_SAND_RUSH 146 +#define ABILITY_WONDER_SKIN 147 +#define ABILITY_ANALYTIC 148 +#define ABILITY_ILLUSION 149 +#define ABILITY_IMPOSTER 150 +#define ABILITY_INFILTRATOR 151 +#define ABILITY_MUMMY 152 +#define ABILITY_MOXIE 153 +#define ABILITY_JUSTIFIED 154 +#define ABILITY_RATTLED 155 +#define ABILITY_MAGIC_BOUNCE 156 +#define ABILITY_SAP_SIPPER 157 +#define ABILITY_PRANKSTER 158 +#define ABILITY_SAND_FORCE 159 +#define ABILITY_IRON_BARBS 160 +#define ABILITY_ZEN_MODE 161 +#define ABILITY_VICTORY_STAR 162 +#define ABILITY_TURBOBLAZE 163 +#define ABILITY_TERAVOLT 164 + +#define ABILITIES_COUNT_GEN5 165 + +// Gen 6 +#define ABILITY_AROMA_VEIL 165 +#define ABILITY_FLOWER_VEIL 166 +#define ABILITY_CHEEK_POUCH 167 +#define ABILITY_PROTEAN 168 +#define ABILITY_FUR_COAT 169 +#define ABILITY_MAGICIAN 170 +#define ABILITY_BULLETPROOF 171 +#define ABILITY_COMPETITIVE 172 +#define ABILITY_STRONG_JAW 173 +#define ABILITY_REFRIGERATE 174 +#define ABILITY_SWEET_VEIL 175 +#define ABILITY_STANCE_CHANGE 176 +#define ABILITY_GALE_WINGS 177 +#define ABILITY_MEGA_LAUNCHER 178 +#define ABILITY_GRASS_PELT 179 +#define ABILITY_SYMBIOSIS 180 +#define ABILITY_TOUGH_CLAWS 181 +#define ABILITY_PIXILATE 182 +#define ABILITY_GOOEY 183 +#define ABILITY_AERILATE 184 +#define ABILITY_PARENTAL_BOND 185 +#define ABILITY_DARK_AURA 186 +#define ABILITY_FAIRY_AURA 187 +#define ABILITY_AURA_BREAK 188 +#define ABILITY_PRIMORDIAL_SEA 189 +#define ABILITY_DESOLATE_LAND 190 +#define ABILITY_DELTA_STREAM 191 + +#define ABILITIES_COUNT_GEN6 192 + +// Gen 7 +#define ABILITY_STAMINA 192 +#define ABILITY_WIMP_OUT 193 +#define ABILITY_EMERGENCY_EXIT 194 +#define ABILITY_WATER_COMPACTION 195 +#define ABILITY_MERCILESS 196 +#define ABILITY_SHIELDS_DOWN 197 +#define ABILITY_STAKEOUT 198 +#define ABILITY_WATER_BUBBLE 199 +#define ABILITY_STEELWORKER 200 +#define ABILITY_BERSERK 201 +#define ABILITY_SLUSH_RUSH 202 +#define ABILITY_LONG_REACH 203 +#define ABILITY_LIQUID_VOICE 204 +#define ABILITY_TRIAGE 205 +#define ABILITY_GALVANIZE 206 +#define ABILITY_SURGE_SURFER 207 +#define ABILITY_SCHOOLING 208 +#define ABILITY_DISGUISE 209 +#define ABILITY_BATTLE_BOND 210 +#define ABILITY_POWER_CONSTRUCT 211 +#define ABILITY_CORROSION 212 +#define ABILITY_COMATOSE 213 +#define ABILITY_QUEENLY_MAJESTY 214 +#define ABILITY_INNARDS_OUT 215 +#define ABILITY_DANCER 216 +#define ABILITY_BATTERY 217 +#define ABILITY_FLUFFY 218 +#define ABILITY_DAZZLING 219 +#define ABILITY_SOUL_HEART 220 +#define ABILITY_TANGLING_HAIR 221 +#define ABILITY_RECEIVER 222 +#define ABILITY_POWER_OF_ALCHEMY 223 +#define ABILITY_BEAST_BOOST 224 +#define ABILITY_RKS_SYSTEM 225 +#define ABILITY_ELECTRIC_SURGE 226 +#define ABILITY_PSYCHIC_SURGE 227 +#define ABILITY_MISTY_SURGE 228 +#define ABILITY_GRASSY_SURGE 229 +#define ABILITY_FULL_METAL_BODY 230 +#define ABILITY_SHADOW_SHIELD 231 +#define ABILITY_PRISM_ARMOR 232 +#define ABILITY_NEUROFORCE 233 + +#define ABILITIES_COUNT_GEN7 234 + +// Gen 8 +#define ABILITY_INTREPID_SWORD 234 +#define ABILITY_DAUNTLESS_SHIELD 235 +#define ABILITY_LIBERO 236 +#define ABILITY_BALL_FETCH 237 +#define ABILITY_COTTON_DOWN 238 +#define ABILITY_PROPELLER_TAIL 239 +#define ABILITY_MIRROR_ARMOR 240 +#define ABILITY_GULP_MISSILE 241 +#define ABILITY_STALWART 242 +#define ABILITY_STEAM_ENGINE 243 +#define ABILITY_PUNK_ROCK 244 +#define ABILITY_SAND_SPIT 245 +#define ABILITY_ICE_SCALES 246 +#define ABILITY_RIPEN 247 +#define ABILITY_ICE_FACE 248 +#define ABILITY_POWER_SPOT 249 +#define ABILITY_MIMICRY 250 +#define ABILITY_SCREEN_CLEANER 251 +#define ABILITY_STEELY_SPIRIT 252 +#define ABILITY_PERISH_BODY 253 +#define ABILITY_WANDERING_SPIRIT 254 +#define ABILITY_GORILLA_TACTICS 255 +#define ABILITY_NEUTRALIZING_GAS 256 +#define ABILITY_PASTEL_VEIL 257 +#define ABILITY_HUNGER_SWITCH 258 +#define ABILITY_QUICK_DRAW 259 +#define ABILITY_UNSEEN_FIST 260 +#define ABILITY_CURIOUS_MEDICINE 261 +#define ABILITY_TRANSISTOR 262 +#define ABILITY_DRAGONS_MAW 263 +#define ABILITY_CHILLING_NEIGH 264 +#define ABILITY_GRIM_NEIGH 265 +#define ABILITY_AS_ONE_ICE_RIDER 266 +#define ABILITY_AS_ONE_SHADOW_RIDER 267 + +#define ABILITIES_COUNT_GEN8 268 + +#define ABILITIES_COUNT ABILITIES_COUNT_GEN8 #endif // GUARD_CONSTANTS_ABILITIES_H diff --git a/include/constants/battle.h b/include/constants/battle.h index 3dbd832559..5cffb74ab3 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -53,17 +53,17 @@ #define BATTLE_TYPE_MULTI (1 << 6) #define BATTLE_TYPE_SAFARI (1 << 7) #define BATTLE_TYPE_BATTLE_TOWER (1 << 8) -#define BATTLE_TYPE_WALLY_TUTORIAL (1 << 9) +#define BATTLE_TYPE_WALLY_TUTORIAL (1 << 9) // Used in pokefirered as BATTLE_TYPE_OLD_MAN_TUTORIAL. #define BATTLE_TYPE_ROAMER (1 << 10) #define BATTLE_TYPE_EREADER_TRAINER (1 << 11) #define BATTLE_TYPE_KYOGRE_GROUDON (1 << 12) #define BATTLE_TYPE_LEGENDARY (1 << 13) #define BATTLE_TYPE_REGI (1 << 14) -#define BATTLE_TYPE_TWO_OPPONENTS (1 << 15) -#define BATTLE_TYPE_DOME (1 << 16) -#define BATTLE_TYPE_PALACE (1 << 17) -#define BATTLE_TYPE_ARENA (1 << 18) -#define BATTLE_TYPE_FACTORY (1 << 19) +#define BATTLE_TYPE_TWO_OPPONENTS (1 << 15) // Used in pokefirered as BATTLE_TYPE_GHOST. +#define BATTLE_TYPE_DOME (1 << 16) // Used in pokefirered as BATTLE_TYPE_POKEDUDE. +#define BATTLE_TYPE_PALACE (1 << 17) // Used in pokefirered as BATTLE_TYPE_WILD_SCRIPTED. +#define BATTLE_TYPE_ARENA (1 << 18) // Used in pokefirered as BATTLE_TYPE_LEGENDARY_FRLG. +#define BATTLE_TYPE_FACTORY (1 << 19) // Used in pokefirered as BATTLE_TYPE_TRAINER_TOWER. #define BATTLE_TYPE_PIKE (1 << 20) #define BATTLE_TYPE_PYRAMID (1 << 21) #define BATTLE_TYPE_INGAME_PARTNER (1 << 22) @@ -79,6 +79,11 @@ #define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID) #define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE) +#define WILD_DOUBLE_BATTLE ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER)))) +#define BATTLE_TWO_VS_ONE_OPPONENT ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gTrainerBattleOpponent_B == 0xFFFF)) +#define BATTLE_TYPE_HAS_AI (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER | BATTLE_TYPE_INGAME_PARTNER) + + // Battle Outcome defines #define B_OUTCOME_WON 1 #define B_OUTCOME_LOST 2 @@ -120,8 +125,8 @@ #define STATUS2_LOCK_CONFUSE (1 << 10 | 1 << 11) // e.g. Thrash #define STATUS2_LOCK_CONFUSE_TURN(num)((num) << 10) #define STATUS2_MULTIPLETURNS (1 << 12) -#define STATUS2_WRAPPED (1 << 13 | 1 << 14 | 1 << 15) -#define STATUS2_WRAPPED_TURN(num) ((num) << 13) +#define STATUS2_WRAPPED (1 << 13) +#define STATUS2_POWDER (1 << 14) #define STATUS2_INFATUATION (1 << 16 | 1 << 17 | 1 << 18 | 1 << 19) // 4 bits, one for every battler #define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16) #define STATUS2_FOCUS_ENERGY (1 << 20) @@ -137,7 +142,6 @@ #define STATUS2_DEFENSE_CURL (1 << 30) #define STATUS2_TORMENT (1 << 31) -// Seems like per-battler statuses. Not quite sure how to categorize these #define STATUS3_LEECHSEED_BATTLER (1 << 0 | 1 << 1) // The battler to receive HP from Leech Seed #define STATUS3_LEECHSEED (1 << 2) #define STATUS3_ALWAYS_HITS (1 << 3 | 1 << 4) @@ -153,16 +157,31 @@ #define STATUS3_IMPRISONED_OTHERS (1 << 13) #define STATUS3_GRUDGE (1 << 14) #define STATUS3_CANT_SCORE_A_CRIT (1 << 15) -#define STATUS3_MUDSPORT (1 << 16) -#define STATUS3_WATERSPORT (1 << 17) +#define STATUS3_GASTRO_ACID (1 << 16) +#define STATUS3_EMBARGO (1 << 17) #define STATUS3_UNDERWATER (1 << 18) #define STATUS3_INTIMIDATE_POKES (1 << 19) #define STATUS3_TRACE (1 << 20) -#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER) +#define STATUS3_SMACKED_DOWN (1 << 21) +#define STATUS3_ME_FIRST (1 << 22) +#define STATUS3_TELEKINESIS (1 << 23) +#define STATUS3_PHANTOM_FORCE (1 << 24) +#define STATUS3_MIRACLE_EYED (1 << 25) +#define STATUS3_MAGNET_RISE (1 << 26) +#define STATUS3_HEAL_BLOCK (1 << 27) +#define STATUS3_AQUA_RING (1 << 28) +#define STATUS3_LASER_FOCUS (1 << 29) +#define STATUS3_POWER_TRICK (1 << 30) +#define STATUS3_SKY_DROPPED (1 << 31) // Target of Sky Drop +#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER | STATUS3_PHANTOM_FORCE) -// Not really sure what a "hitmarker" is. -#define HITMARKER_x10 (1 << 4) -#define HITMARKER_x20 (1 << 5) +#define STATUS4_ELECTRIFIED (1 << 0) +#define STATUS4_PLASMA_FISTS (1 << 1) +#define STATUS4_MUD_SPORT (1 << 2) // Only used if B_SPORT_TURNS < GEN_6 +#define STATUS4_WATER_SPORT (1 << 3) // Only used if B_SPORT_TURNS < GEN_6 + +#define HITMARKER_WAKE_UP_CLEAR (1 << 4) // Cleared when waking up. Never set or checked. +#define HITMARKER_SKIP_DMG_TRACK (1 << 5) #define HITMARKER_DESTINYBOND (1 << 6) #define HITMARKER_NO_ANIMATIONS (1 << 7) #define HITMARKER_IGNORE_SUBSTITUTE (1 << 8) @@ -173,137 +192,295 @@ #define HITMARKER_IGNORE_SAFEGUARD (1 << 13) #define HITMARKER_SYNCHRONISE_EFFECT (1 << 14) #define HITMARKER_RUN (1 << 15) -#define HITMARKER_IGNORE_ON_AIR (1 << 16) -#define HITMARKER_IGNORE_UNDERGROUND (1 << 17) -#define HITMARKER_IGNORE_UNDERWATER (1 << 18) +#define HITMARKER_IGNORE_DISGUISE (1 << 16) +// 3 free spots because of change in handling of UNDERGROUND/UNDERWATER/ON AIR #define HITMARKER_UNABLE_TO_USE_MOVE (1 << 19) -#define HITMARKER_x100000 (1 << 20) -#define HITMARKER_x200000 (1 << 21) -#define HITMARKER_x400000 (1 << 22) -#define HITMARKER_x800000 (1 << 23) +#define HITMARKER_PASSIVE_DAMAGE (1 << 20) +#define HITMARKER_DISOBEDIENT_MOVE (1 << 21) +#define HITMARKER_PLAYER_FAINTED (1 << 22) +#define HITMARKER_ALLOW_NO_PP (1 << 23) #define HITMARKER_GRUDGE (1 << 24) #define HITMARKER_OBEYS (1 << 25) -#define HITMARKER_x4000000 (1 << 26) +#define HITMARKER_NEVER_SET (1 << 26) // Cleared as part of a large group. Never set or checked #define HITMARKER_CHARGING (1 << 27) #define HITMARKER_FAINTED(battler) (gBitTable[battler] << 28) #define HITMARKER_FAINTED2(battler) ((1 << 28) << battler) +#define HITMARKER_STRING_PRINTED (1 << 29) // Per-side statuses that affect an entire party -#define SIDE_STATUS_REFLECT (1 << 0) -#define SIDE_STATUS_LIGHTSCREEN (1 << 1) -#define SIDE_STATUS_X4 (1 << 2) -#define SIDE_STATUS_SPIKES (1 << 4) -#define SIDE_STATUS_SAFEGUARD (1 << 5) -#define SIDE_STATUS_FUTUREATTACK (1 << 6) -#define SIDE_STATUS_MIST (1 << 8) -#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9) +#define SIDE_STATUS_REFLECT (1 << 0) +#define SIDE_STATUS_LIGHTSCREEN (1 << 1) +#define SIDE_STATUS_STICKY_WEB (1 << 2) +#define SIDE_STATUS_SPIKES (1 << 4) +#define SIDE_STATUS_SAFEGUARD (1 << 5) +#define SIDE_STATUS_FUTUREATTACK (1 << 6) +#define SIDE_STATUS_MIST (1 << 8) +#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9) +#define SIDE_STATUS_TAILWIND (1 << 10) +#define SIDE_STATUS_AURORA_VEIL (1 << 11) +#define SIDE_STATUS_LUCKY_CHANT (1 << 12) +#define SIDE_STATUS_TOXIC_SPIKES (1 << 13) +#define SIDE_STATUS_STEALTH_ROCK (1 << 14) +#define SIDE_STATUS_STEALTH_ROCK_DAMAGED (1 << 15) +#define SIDE_STATUS_TOXIC_SPIKES_DAMAGED (1 << 16) +#define SIDE_STATUS_STICKY_WEB_DAMAGED (1 << 17) +#define SIDE_STATUS_QUICK_GUARD (1 << 18) +#define SIDE_STATUS_WIDE_GUARD (1 << 19) +#define SIDE_STATUS_CRAFTY_SHIELD (1 << 20) +#define SIDE_STATUS_MAT_BLOCK (1 << 21) + +#define SIDE_STATUS_HAZARDS_ANY (SIDE_STATUS_SPIKES | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_STEALTH_ROCK) +#define SIDE_STATUS_SCREEN_ANY (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL) + +// Field affecting statuses. +#define STATUS_FIELD_MAGIC_ROOM (1 << 0) +#define STATUS_FIELD_TRICK_ROOM (1 << 1) +#define STATUS_FIELD_WONDER_ROOM (1 << 2) +#define STATUS_FIELD_MUDSPORT (1 << 3) +#define STATUS_FIELD_WATERSPORT (1 << 4) +#define STATUS_FIELD_GRAVITY (1 << 5) +#define STATUS_FIELD_GRASSY_TERRAIN (1 << 6) +#define STATUS_FIELD_MISTY_TERRAIN (1 << 7) +#define STATUS_FIELD_ELECTRIC_TERRAIN (1 << 8) +#define STATUS_FIELD_PSYCHIC_TERRAIN (1 << 9) +#define STATUS_FIELD_ION_DELUGE (1 << 10) +#define STATUS_FIELD_FAIRY_LOCK (1 << 11) +#define STATUS_FIELD_TERRAIN_PERMANENT (1 << 12) // Overworld thunderstorm generates electric terrain + +#define STATUS_FIELD_TERRAIN_ANY (STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN) // Flags describing move's result -#define MOVE_RESULT_MISSED (1 << 0) -#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1) -#define MOVE_RESULT_NOT_VERY_EFFECTIVE (1 << 2) -#define MOVE_RESULT_DOESNT_AFFECT_FOE (1 << 3) -#define MOVE_RESULT_ONE_HIT_KO (1 << 4) -#define MOVE_RESULT_FAILED (1 << 5) -#define MOVE_RESULT_FOE_ENDURED (1 << 6) -#define MOVE_RESULT_FOE_HUNG_ON (1 << 7) -#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED) +#define MOVE_RESULT_MISSED (1 << 0) +#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1) +#define MOVE_RESULT_NOT_VERY_EFFECTIVE (1 << 2) +#define MOVE_RESULT_DOESNT_AFFECT_FOE (1 << 3) +#define MOVE_RESULT_ONE_HIT_KO (1 << 4) +#define MOVE_RESULT_FAILED (1 << 5) +#define MOVE_RESULT_FOE_ENDURED (1 << 6) +#define MOVE_RESULT_FOE_HUNG_ON (1 << 7) +#define MOVE_RESULT_STURDIED (1 << 8) +#define MOVE_RESULT_FOE_ENDURED_AFFECTION (1 << 9) +#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED) // Battle Weather flags -#define WEATHER_RAIN_TEMPORARY (1 << 0) -#define WEATHER_RAIN_DOWNPOUR (1 << 1) // unused -#define WEATHER_RAIN_PERMANENT (1 << 2) -#define WEATHER_RAIN_ANY (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT) -#define WEATHER_SANDSTORM_TEMPORARY (1 << 3) -#define WEATHER_SANDSTORM_PERMANENT (1 << 4) -#define WEATHER_SANDSTORM_ANY (WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT) -#define WEATHER_SUN_TEMPORARY (1 << 5) -#define WEATHER_SUN_PERMANENT (1 << 6) -#define WEATHER_SUN_ANY (WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT) -#define WEATHER_HAIL (1 << 7) -#define WEATHER_HAIL_ANY (WEATHER_HAIL) -#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY) +#define B_WEATHER_RAIN_TEMPORARY (1 << 0) +#define B_WEATHER_RAIN_DOWNPOUR (1 << 1) // unused +#define B_WEATHER_RAIN_PERMANENT (1 << 2) +#define B_WEATHER_RAIN_PRIMAL (1 << 3) +#define B_WEATHER_RAIN (B_WEATHER_RAIN_TEMPORARY | B_WEATHER_RAIN_DOWNPOUR | B_WEATHER_RAIN_PERMANENT | B_WEATHER_RAIN_PRIMAL) +#define B_WEATHER_SANDSTORM_TEMPORARY (1 << 4) +#define B_WEATHER_SANDSTORM_PERMANENT (1 << 5) +#define B_WEATHER_SANDSTORM (B_WEATHER_SANDSTORM_TEMPORARY | B_WEATHER_SANDSTORM_PERMANENT) +#define B_WEATHER_SUN_TEMPORARY (1 << 6) +#define B_WEATHER_SUN_PERMANENT (1 << 7) +#define B_WEATHER_SUN_PRIMAL (1 << 8) +#define B_WEATHER_SUN (B_WEATHER_SUN_TEMPORARY | B_WEATHER_SUN_PERMANENT | B_WEATHER_SUN_PRIMAL) +#define B_WEATHER_HAIL_TEMPORARY (1 << 9) +#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) +#define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS) + +// Battle Weather as enum +#define ENUM_WEATHER_NONE 0 +#define ENUM_WEATHER_RAIN 1 +#define ENUM_WEATHER_SUN 2 +#define ENUM_WEATHER_SANDSTORM 3 +#define ENUM_WEATHER_HAIL 4 +#define ENUM_WEATHER_SUN_PRIMAL 5 +#define ENUM_WEATHER_RAIN_PRIMAL 6 +#define ENUM_WEATHER_STRONG_WINDS 7 // Move Effects -#define MOVE_EFFECT_SLEEP 1 -#define MOVE_EFFECT_POISON 2 -#define MOVE_EFFECT_BURN 3 -#define MOVE_EFFECT_FREEZE 4 -#define MOVE_EFFECT_PARALYSIS 5 -#define MOVE_EFFECT_TOXIC 6 +#define MOVE_EFFECT_SLEEP 0x1 +#define MOVE_EFFECT_POISON 0x2 +#define MOVE_EFFECT_BURN 0x3 +#define MOVE_EFFECT_FREEZE 0x4 +#define MOVE_EFFECT_PARALYSIS 0x5 +#define MOVE_EFFECT_TOXIC 0x6 #define PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_TOXIC // All above move effects apply primary status -#define MOVE_EFFECT_CONFUSION 7 -#define MOVE_EFFECT_FLINCH 8 -#define MOVE_EFFECT_TRI_ATTACK 9 -#define MOVE_EFFECT_UPROAR 10 -#define MOVE_EFFECT_PAYDAY 11 -#define MOVE_EFFECT_CHARGING 12 -#define MOVE_EFFECT_WRAP 13 -#define MOVE_EFFECT_RECOIL_25 14 -#define MOVE_EFFECT_ATK_PLUS_1 15 -#define MOVE_EFFECT_DEF_PLUS_1 16 -#define MOVE_EFFECT_SPD_PLUS_1 17 -#define MOVE_EFFECT_SP_ATK_PLUS_1 18 -#define MOVE_EFFECT_SP_DEF_PLUS_1 19 -#define MOVE_EFFECT_ACC_PLUS_1 20 -#define MOVE_EFFECT_EVS_PLUS_1 21 -#define MOVE_EFFECT_ATK_MINUS_1 22 -#define MOVE_EFFECT_DEF_MINUS_1 23 -#define MOVE_EFFECT_SPD_MINUS_1 24 -#define MOVE_EFFECT_SP_ATK_MINUS_1 25 -#define MOVE_EFFECT_SP_DEF_MINUS_1 26 -#define MOVE_EFFECT_ACC_MINUS_1 27 -#define MOVE_EFFECT_EVS_MINUS_1 28 -#define MOVE_EFFECT_RECHARGE 29 -#define MOVE_EFFECT_RAGE 30 -#define MOVE_EFFECT_STEAL_ITEM 31 -#define MOVE_EFFECT_PREVENT_ESCAPE 32 -#define MOVE_EFFECT_NIGHTMARE 33 -#define MOVE_EFFECT_ALL_STATS_UP 34 -#define MOVE_EFFECT_RAPIDSPIN 35 -#define MOVE_EFFECT_REMOVE_PARALYSIS 36 -#define MOVE_EFFECT_ATK_DEF_DOWN 37 -#define MOVE_EFFECT_RECOIL_33 38 -#define MOVE_EFFECT_ATK_PLUS_2 39 -#define MOVE_EFFECT_DEF_PLUS_2 40 -#define MOVE_EFFECT_SPD_PLUS_2 41 -#define MOVE_EFFECT_SP_ATK_PLUS_2 42 -#define MOVE_EFFECT_SP_DEF_PLUS_2 43 -#define MOVE_EFFECT_ACC_PLUS_2 44 -#define MOVE_EFFECT_EVS_PLUS_2 45 -#define MOVE_EFFECT_ATK_MINUS_2 46 -#define MOVE_EFFECT_DEF_MINUS_2 47 -#define MOVE_EFFECT_SPD_MINUS_2 48 -#define MOVE_EFFECT_SP_ATK_MINUS_2 49 -#define MOVE_EFFECT_SP_DEF_MINUS_2 50 -#define MOVE_EFFECT_ACC_MINUS_2 51 -#define MOVE_EFFECT_EVS_MINUS_2 52 -#define MOVE_EFFECT_THRASH 53 -#define MOVE_EFFECT_KNOCK_OFF 54 -#define MOVE_EFFECT_NOTHING_37 55 -#define MOVE_EFFECT_NOTHING_38 56 -#define MOVE_EFFECT_NOTHING_39 57 -#define MOVE_EFFECT_NOTHING_3A 58 -#define MOVE_EFFECT_SP_ATK_TWO_DOWN 59 -#define NUM_MOVE_EFFECTS 60 +#define MOVE_EFFECT_CONFUSION 0x7 +#define MOVE_EFFECT_FLINCH 0x8 +#define MOVE_EFFECT_TRI_ATTACK 0x9 +#define MOVE_EFFECT_UPROAR 0xA +#define MOVE_EFFECT_PAYDAY 0xB +#define MOVE_EFFECT_CHARGING 0xC +#define MOVE_EFFECT_WRAP 0xD +#define MOVE_EFFECT_RECOIL_25 0xE +#define MOVE_EFFECT_ATK_PLUS_1 0xF +#define MOVE_EFFECT_DEF_PLUS_1 0x10 +#define MOVE_EFFECT_SPD_PLUS_1 0x11 +#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12 +#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13 +#define MOVE_EFFECT_ACC_PLUS_1 0x14 +#define MOVE_EFFECT_EVS_PLUS_1 0x15 +#define MOVE_EFFECT_ATK_MINUS_1 0x16 +#define MOVE_EFFECT_DEF_MINUS_1 0x17 +#define MOVE_EFFECT_SPD_MINUS_1 0x18 +#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19 +#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A +#define MOVE_EFFECT_ACC_MINUS_1 0x1B +#define MOVE_EFFECT_EVS_MINUS_1 0x1C +#define MOVE_EFFECT_RECHARGE 0x1D +#define MOVE_EFFECT_RAGE 0x1E +#define MOVE_EFFECT_STEAL_ITEM 0x1F +#define MOVE_EFFECT_PREVENT_ESCAPE 0x20 +#define MOVE_EFFECT_NIGHTMARE 0x21 +#define MOVE_EFFECT_ALL_STATS_UP 0x22 +#define MOVE_EFFECT_RAPIDSPIN 0x23 +#define MOVE_EFFECT_REMOVE_STATUS 0x24 +#define MOVE_EFFECT_ATK_DEF_DOWN 0x25 +#define MOVE_EFFECT_RECOIL_33 0x26 +#define MOVE_EFFECT_ATK_PLUS_2 0x27 +#define MOVE_EFFECT_DEF_PLUS_2 0x28 +#define MOVE_EFFECT_SPD_PLUS_2 0x29 +#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A +#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B +#define MOVE_EFFECT_ACC_PLUS_2 0x2C +#define MOVE_EFFECT_EVS_PLUS_2 0x2D +#define MOVE_EFFECT_ATK_MINUS_2 0x2E +#define MOVE_EFFECT_DEF_MINUS_2 0x2F +#define MOVE_EFFECT_SPD_MINUS_2 0x30 +#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31 +#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32 +#define MOVE_EFFECT_ACC_MINUS_2 0x33 +#define MOVE_EFFECT_EVS_MINUS_2 0x34 +#define MOVE_EFFECT_THRASH 0x35 +#define MOVE_EFFECT_KNOCK_OFF 0x36 +#define MOVE_EFFECT_DEF_SPDEF_DOWN 0x37 +#define MOVE_EFFECT_RECOIL_33_STATUS 0x38 +#define MOVE_EFFECT_RECOIL_50 0x39 +#define MOVE_EFFECT_CLEAR_SMOG 0x3A +#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B +#define MOVE_EFFECT_SMACK_DOWN 0x3C +#define MOVE_EFFECT_FLAME_BURST 0x3D +#define MOVE_EFFECT_FEINT 0x3E +#define MOVE_EFFECT_SPECTRAL_THIEF 0x3F +#define MOVE_EFFECT_V_CREATE 0x40 +#define MOVE_EFFECT_HAPPY_HOUR 0x41 +#define MOVE_EFFECT_CORE_ENFORCER 0x42 +#define MOVE_EFFECT_THROAT_CHOP 0x43 +#define MOVE_EFFECT_INCINERATE 0x44 +#define MOVE_EFFECT_BUG_BITE 0x45 +#define MOVE_EFFECT_RECOIL_HP_25 0x46 +#define MOVE_EFFECT_RELIC_SONG 0x47 +#define MOVE_EFFECT_TRAP_BOTH 0x48 +#define MOVE_EFFECT_SKY_DROP 0x49 +#define MOVE_EFFECT_SCALE_SHOT 0x4A -#define MOVE_EFFECT_AFFECTS_USER (1 << 6) // 64 -#define MOVE_EFFECT_CERTAIN (1 << 7) // 128 +#define NUM_MOVE_EFFECTS 0x4B + +#define MOVE_EFFECT_AFFECTS_USER 0x4000 +#define MOVE_EFFECT_CERTAIN 0x8000 // Battle terrain defines for gBattleTerrain. -#define BATTLE_TERRAIN_GRASS 0 -#define BATTLE_TERRAIN_LONG_GRASS 1 -#define BATTLE_TERRAIN_SAND 2 -#define BATTLE_TERRAIN_UNDERWATER 3 -#define BATTLE_TERRAIN_WATER 4 -#define BATTLE_TERRAIN_POND 5 -#define BATTLE_TERRAIN_MOUNTAIN 6 -#define BATTLE_TERRAIN_CAVE 7 -#define BATTLE_TERRAIN_BUILDING 8 -#define BATTLE_TERRAIN_PLAIN 9 +#define BATTLE_TERRAIN_GRASS 0 +#define BATTLE_TERRAIN_LONG_GRASS 1 +#define BATTLE_TERRAIN_SAND 2 +#define BATTLE_TERRAIN_UNDERWATER 3 +#define BATTLE_TERRAIN_WATER 4 +#define BATTLE_TERRAIN_POND 5 +#define BATTLE_TERRAIN_MOUNTAIN 6 +#define BATTLE_TERRAIN_CAVE 7 +#define BATTLE_TERRAIN_BUILDING 8 +#define BATTLE_TERRAIN_PLAIN 9 +// New battle terrains are used for Secret Power but not fully implemented. +#define BATTLE_TERRAIN_SOARING 10 +#define BATTLE_TERRAIN_SKY_PILLAR 11 +#define BATTLE_TERRAIN_BURIAL_GROUND 12 +#define BATTLE_TERRAIN_PUDDLE 13 +#define BATTLE_TERRAIN_MARSH 14 +#define BATTLE_TERRAIN_SWAMP 15 +#define BATTLE_TERRAIN_SNOW 16 +#define BATTLE_TERRAIN_ICE 17 +#define BATTLE_TERRAIN_VOLCANO 18 +#define BATTLE_TERRAIN_DISTORTION_WORLD 19 +#define BATTLE_TERRAIN_SPACE 20 +#define BATTLE_TERRAIN_ULTRA_SPACE 21 -#define B_WAIT_TIME_LONG 64 -#define B_WAIT_TIME_MED 48 -#define B_WAIT_TIME_SHORT 32 +#define BATTLE_TERRAIN_COUNT 22 + +#define B_WAIT_TIME_LONG 64 +#define B_WAIT_TIME_MED 48 +#define B_WAIT_TIME_SHORT 32 +#define B_WAIT_TIME_SHORTEST 16 + +#define CHERRIM_OVERCAST 0 +#define CHERRIM_SUNSHINE 1 + +#define CASTFORM_NORMAL 0 +#define CASTFORM_FIRE 1 +#define CASTFORM_WATER 2 +#define CASTFORM_ICE 3 +#define NUM_CASTFORM_FORMS 4 +#define CASTFORM_SUBSTITUTE (1 << 7) + +#define FLEE_ITEM 1 +#define FLEE_ABILITY 2 + +// Return value for IsRunningFromBattleImpossible. +#define BATTLE_RUN_SUCCESS 0 +#define BATTLE_RUN_FORBIDDEN 1 +#define BATTLE_RUN_FAILURE 2 + +#define B_WIN_TYPE_NORMAL 0 +#define B_WIN_TYPE_ARENA 1 + +// Window Ids for sStandardBattleWindowTemplates / sBattleArenaWindowTemplates +#define B_WIN_MSG 0 +#define B_WIN_ACTION_PROMPT 1 // "What will {x} do?" +#define B_WIN_ACTION_MENU 2 // "Fight/Pokémon/Bag/Run" menu +#define B_WIN_MOVE_NAME_1 3 // Top left +#define B_WIN_MOVE_NAME_2 4 // Top right +#define B_WIN_MOVE_NAME_3 5 // Bottom left +#define B_WIN_MOVE_NAME_4 6 // Bottom right +#define B_WIN_PP 7 +#define B_WIN_DUMMY 8 +#define B_WIN_PP_REMAINING 9 +#define B_WIN_MOVE_TYPE 10 +#define B_WIN_SWITCH_PROMPT 11 // "Switch which?" +#define B_WIN_YESNO 12 +#define B_WIN_LEVEL_UP_BOX 13 +#define B_WIN_LEVEL_UP_BANNER 14 +#define B_WIN_VS_PLAYER 15 +#define B_WIN_VS_OPPONENT 16 +#define B_WIN_VS_MULTI_PLAYER_1 17 +#define B_WIN_VS_MULTI_PLAYER_2 18 +#define B_WIN_VS_MULTI_PLAYER_3 19 +#define B_WIN_VS_MULTI_PLAYER_4 20 +#define B_WIN_VS_OUTCOME_DRAW 21 +#define B_WIN_VS_OUTCOME_LEFT 22 +#define B_WIN_VS_OUTCOME_RIGHT 23 + +// The following are duplicate id values for windows that Battle Arena uses differently. +#define ARENA_WIN_PLAYER_NAME 15 +#define ARENA_WIN_VS 16 +#define ARENA_WIN_OPPONENT_NAME 17 +#define ARENA_WIN_MIND 18 +#define ARENA_WIN_SKILL 19 +#define ARENA_WIN_BODY 20 +#define ARENA_WIN_JUDGEMENT_TITLE 21 +#define ARENA_WIN_JUDGEMENT_TEXT 22 + +// Flag for BattlePutTextOnWindow. Never set +#define B_WIN_COPYTOVRAM (1 << 7) + +// Indicator for the party summary bar to display an empty slot. +#define HP_EMPTY_SLOT 0xFFFF + +#define MOVE_TARGET_SELECTED 0 +#define MOVE_TARGET_DEPENDS (1 << 0) +#define MOVE_TARGET_USER_OR_SELECTED (1 << 1) +#define MOVE_TARGET_RANDOM (1 << 2) +#define MOVE_TARGET_BOTH (1 << 3) +#define MOVE_TARGET_USER (1 << 4) +#define MOVE_TARGET_FOES_AND_ALLY (1 << 5) +#define MOVE_TARGET_OPPONENTS_FIELD (1 << 6) +#define MOVE_TARGET_ALLY (1 << 7) +#define MOVE_TARGET_ALL_BATTLERS ((1 << 8) | MOVE_TARGET_USER) + +// For the second argument of GetMoveTarget, when no target override is needed +#define NO_TARGET_OVERRIDE 0 #endif // GUARD_CONSTANTS_BATTLE_H diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 5ade58d509..d48827683a 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -15,38 +15,51 @@ #define AI_TYPE_MOVE 4 // type effectiveness -#define AI_EFFECTIVENESS_x4 160 -#define AI_EFFECTIVENESS_x2 80 -#define AI_EFFECTIVENESS_x1 40 -#define AI_EFFECTIVENESS_x0_5 20 -#define AI_EFFECTIVENESS_x0_25 10 +#define AI_EFFECTIVENESS_x8 7 +#define AI_EFFECTIVENESS_x4 6 +#define AI_EFFECTIVENESS_x2 5 +#define AI_EFFECTIVENESS_x1 4 +#define AI_EFFECTIVENESS_x0_5 3 +#define AI_EFFECTIVENESS_x0_25 2 +#define AI_EFFECTIVENESS_x0_125 1 #define AI_EFFECTIVENESS_x0 0 // ai weather -#define AI_WEATHER_SUN 0 -#define AI_WEATHER_RAIN 1 -#define AI_WEATHER_SANDSTORM 2 -#define AI_WEATHER_HAIL 3 +#define AI_WEATHER_NONE 0 +#define AI_WEATHER_SUN 1 +#define AI_WEATHER_RAIN 2 +#define AI_WEATHER_SANDSTORM 3 +#define AI_WEATHER_HAIL 4 // get_how_powerful_move_is -#define MOVE_POWER_OTHER 0 -#define MOVE_NOT_MOST_POWERFUL 1 -#define MOVE_MOST_POWERFUL 2 +#define MOVE_POWER_OTHER 0 +#define MOVE_POWER_BEST 1 +#define MOVE_POWER_GOOD 2 // Similar dmg range with best. +#define MOVE_POWER_WEAK 3 // Significantly lower than best and good. -// script's table id to bit -#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0) -#define AI_SCRIPT_TRY_TO_FAINT (1 << 1) -#define AI_SCRIPT_CHECK_VIABILITY (1 << 2) -#define AI_SCRIPT_SETUP_FIRST_TURN (1 << 3) -#define AI_SCRIPT_RISKY (1 << 4) -#define AI_SCRIPT_PREFER_POWER_EXTREMES (1 << 5) -#define AI_SCRIPT_PREFER_BATON_PASS (1 << 6) -#define AI_SCRIPT_DOUBLE_BATTLE (1 << 7) -#define AI_SCRIPT_HP_AWARE (1 << 8) -#define AI_SCRIPT_TRY_SUNNY_DAY_START (1 << 9) -// 10 - 28 are not used -#define AI_SCRIPT_ROAMING (1 << 29) -#define AI_SCRIPT_SAFARI (1 << 30) -#define AI_SCRIPT_FIRST_BATTLE (1 << 31) +// AI Flags. Most run specific functions to update score, new flags are used for internal logic in other scripts +#define AI_FLAG_CHECK_BAD_MOVE (1 << 0) +#define AI_FLAG_TRY_TO_FAINT (1 << 1) +#define AI_FLAG_CHECK_VIABILITY (1 << 2) +#define AI_FLAG_SETUP_FIRST_TURN (1 << 3) +#define AI_FLAG_RISKY (1 << 4) +#define AI_FLAG_PREFER_STRONGEST_MOVE (1 << 5) +#define AI_FLAG_PREFER_BATON_PASS (1 << 6) +#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // removed, split between AI_FLAG_CHECK_BAD_MOVE & AI_FLAG_CHECK_GOOD_MOVE +#define AI_FLAG_HP_AWARE (1 << 8) +// New, Trainer Handicap Flags +#define AI_FLAG_NEGATE_UNAWARE (1 << 9) // AI is NOT aware of negating effects like wonder room, mold breaker, etc +#define AI_FLAG_WILL_SUICIDE (1 << 10) // AI will use explosion / self destruct / final gambit / etc +// New, Trainer Strategy Flags +#define AI_FLAG_HELP_PARTNER (1 << 11) // AI can try to help partner. If not set, will tend not to target partner +#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_SCREENER (1 << 14) // AI prefers screening effects like reflect, mist, etc. TODO unfinished +#define AI_FLAG_SMART_SWITCHING (1 << 15) // AI includes a lot more switching checks + +// 'other' ai logic flags +#define AI_FLAG_ROAMING (1 << 29) +#define AI_FLAG_SAFARI (1 << 30) +#define AI_FLAG_FIRST_BATTLE (1 << 31) #endif // GUARD_CONSTANTS_BATTLE_AI_H diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 4622876cc0..28bcb283d4 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -296,6 +296,106 @@ #define ANIM_TAG_SLASH_2 (ANIM_SPRITES_START + 286) #define ANIM_TAG_WHIP_HIT (ANIM_SPRITES_START + 287) #define ANIM_TAG_BLUE_RING_2 (ANIM_SPRITES_START + 288) +//new particles +#define ANIM_TAG_WHITE_STREAK (ANIM_SPRITES_START + 289) +#define ANIM_TAG_PURPLE_JAB (ANIM_SPRITES_START + 290) +#define ANIM_TAG_TOXIC_SPIKES (ANIM_SPRITES_START + 291) +#define ANIM_TAG_ENERGY_BALL (ANIM_SPRITES_START + 292) +#define ANIM_TAG_SEED_BROWN (ANIM_SPRITES_START + 293) +#define ANIM_TAG_FEINT (ANIM_SPRITES_START + 294) +#define ANIM_TAG_MEGA_STONE (ANIM_SPRITES_START + 295) +#define ANIM_TAG_MEGA_SYMBOL (ANIM_SPRITES_START + 296) +#define ANIM_TAG_MEGA_PARTICLES (ANIM_SPRITES_START + 297) +#define ANIM_TAG_TRUMP_CARD (ANIM_SPRITES_START + 298) +#define ANIM_TAG_TRUMP_CARD_PARTICLES (ANIM_SPRITES_START + 299) +#define ANIM_TAG_ACCUPRESSURE (ANIM_SPRITES_START + 300) +#define ANIM_TAG_WRING_OUT (ANIM_SPRITES_START + 301) +#define ANIM_TAG_COLORED_ORBS (ANIM_SPRITES_START + 302) +#define ANIM_TAG_WORRY_SEED (ANIM_SPRITES_START + 303) +#define ANIM_TAG_SMALL_CLOUD (ANIM_SPRITES_START + 304) +#define ANIM_TAG_ATTACK_ORDER (ANIM_SPRITES_START + 305) +#define ANIM_TAG_DRAGON_PULSE (ANIM_SPRITES_START + 306) +#define ANIM_TAG_WOOD_HAMMER (ANIM_SPRITES_START + 307) +#define ANIM_TAG_PSYCHO_CUT (ANIM_SPRITES_START + 308) +#define ANIM_TAG_POWER_GEM (ANIM_SPRITES_START + 309) +#define ANIM_TAG_STONE_EDGE (ANIM_SPRITES_START + 310) +#define ANIM_TAG_STEALTH_ROCK (ANIM_SPRITES_START + 311) +#define ANIM_TAG_POISON_JAB (ANIM_SPRITES_START + 312) +#define ANIM_TAG_GREEN_POISON_BUBBLE (ANIM_SPRITES_START + 313) +#define ANIM_TAG_FLASH_CANNON_BALL (ANIM_SPRITES_START + 314) +#define ANIM_TAG_WATER_GUN (ANIM_SPRITES_START + 315) +#define ANIM_TAG_PUNISHMENT_BLADES (ANIM_SPRITES_START + 316) +#define ANIM_TAG_QUICK_GUARD_HAND (ANIM_SPRITES_START + 317) + +#define ANIM_TAG_SHELL_RIGHT (ANIM_SPRITES_START + 318) +#define ANIM_TAG_SHELL_LEFT (ANIM_SPRITES_START + 319) +#define ANIM_TAG_RAZOR_SHELL (ANIM_SPRITES_START + 320) +#define ANIM_TAG_HYDRO_PUMP (ANIM_SPRITES_START + 321) +#define ANIM_TAG_BRINE (ANIM_SPRITES_START + 322) +#define ANIM_TAG_GEAR (ANIM_SPRITES_START + 323) +#define ANIM_TAG_ASSURANCE_HAND (ANIM_SPRITES_START + 324) +#define ANIM_TAG_ACUPRESSURE_FINGER (ANIM_SPRITES_START + 325) +#define ANIM_TAG_WISHIWASHI_FISH (ANIM_SPRITES_START + 326) +#define ANIM_TAG_ZYGARDE_HEXES (ANIM_SPRITES_START + 327) +#define ANIM_TAG_AURA_SPHERE (ANIM_SPRITES_START + 328) +#define ANIM_TAG_OMEGA_STONE (ANIM_SPRITES_START + 329) +#define ANIM_TAG_ALPHA_STONE (ANIM_SPRITES_START + 330) +#define ANIM_TAG_BERRY_NORMAL (ANIM_SPRITES_START + 331) +#define ANIM_TAG_BERRY_EATEN (ANIM_SPRITES_START + 332) +#define ANIM_TAG_DRAGON_ASCENT (ANIM_SPRITES_START + 333) +#define ANIM_TAG_PINK_DIAMOND (ANIM_SPRITES_START + 334) +#define ANIM_TAG_STEAM_ERUPTION (ANIM_SPRITES_START + 335) +#define ANIM_TAG_CONFIDE (ANIM_SPRITES_START + 336) +#define ANIM_TAG_VERTICAL_HEX (ANIM_SPRITES_START + 337) +#define ANIM_TAG_UNAVAILABLE_1 (ANIM_SPRITES_START + 338) //0x2862.. supposedly used elsewhere? +#define ANIM_TAG_UNAVAILABLE_2 (ANIM_SPRITES_START + 339) +#define ANIM_TAG_POWER_TRICK (ANIM_SPRITES_START + 340) +#define ANIM_TAG_CHAIN_LINK (ANIM_SPRITES_START + 341) +#define ANIM_TAG_ANCHOR (ANIM_SPRITES_START + 342) +#define ANIM_TAG_HORSESHOE_SIDE_FIST (ANIM_SPRITES_START + 343) +#define ANIM_TAG_DRAGON_ASCENT_FOE (ANIM_SPRITES_START + 344) +#define ANIM_TAG_CRAFTY_SHIELD (ANIM_SPRITES_START + 345) +#define ANIM_TAG_BLACEPHALON_HEAD (ANIM_SPRITES_START + 346) +#define ANIM_TAG_FAIRY_LOCK_CHAINS (ANIM_SPRITES_START + 347) +#define ANIM_TAG_IONS (ANIM_SPRITES_START + 348) +#define ANIM_TAG_CHOP (ANIM_SPRITES_START + 349) +#define ANIM_TAG_HEART_STAMP (ANIM_SPRITES_START + 350) +#define ANIM_TAG_HORN_LEECH (ANIM_SPRITES_START + 351) +#define ANIM_TAG_STEAMROLLER (ANIM_SPRITES_START + 352) +#define ANIM_TAG_HOOPA_HAND (ANIM_SPRITES_START + 353) +#define ANIM_TAG_HOOPA_RING (ANIM_SPRITES_START + 354) +#define ANIM_TAG_METAL_BITS (ANIM_SPRITES_START + 355) +#define ANIM_TAG_SMALL_ROCK (ANIM_SPRITES_START + 356) +#define ANIM_TAG_SPIRIT_ARROW (ANIM_SPRITES_START + 357) +#define ANIM_TAG_ULTRA_BURST_SYMBOL (ANIM_SPRITES_START + 358) +#define ANIM_TAG_Z_MOVE_SYMBOL (ANIM_SPRITES_START + 359) +#define ANIM_TAG_REALLY_BIG_ROCK (ANIM_SPRITES_START + 360) +#define ANIM_TAG_COCOON (ANIM_SPRITES_START + 361) +#define ANIM_TAG_CORKSCREW (ANIM_SPRITES_START + 362) +#define ANIM_TAG_HAVOC_SPEAR (ANIM_SPRITES_START + 363) +#define ANIM_TAG_PURPLE_DRAKE (ANIM_SPRITES_START + 364) +#define ANIM_TAG_MUD_BOMB (ANIM_SPRITES_START + 365) +#define ANIM_TAG_BRANCH (ANIM_SPRITES_START + 366) +#define ANIM_TAG_APPLE (ANIM_SPRITES_START + 367) +#define ANIM_TAG_OBSTRUCT_CROSS (ANIM_SPRITES_START + 368) +#define ANIM_TAG_POISON_COLUMN (ANIM_SPRITES_START + 369) +#define ANIM_TAG_GARBAGE_COLUMN (ANIM_SPRITES_START + 370) +#define ANIM_TAG_LARGE_SPIKE (ANIM_SPRITES_START + 371) +#define ANIM_TAG_DRAGON_PULSE_RING (ANIM_SPRITES_START + 372) +#define ANIM_TAG_STONE_PILLAR (ANIM_SPRITES_START + 373) +#define ANIM_TAG_MUSHROOM (ANIM_SPRITES_START + 374) +#define ANIM_TAG_GOLDEN_APPLE (ANIM_SPRITES_START + 375) +#define ANIM_TAG_ICE_ROCK (ANIM_SPRITES_START + 376) +#define ANIM_TAG_TORNADO (ANIM_SPRITES_START + 377) +#define ANIM_TAG_STRAIGHT_BEAM (ANIM_SPRITES_START + 378) +#define ANIM_TAG_DREEPY (ANIM_SPRITES_START + 379) +#define ANIM_TAG_ICE_ROCK_SINGLE (ANIM_SPRITES_START + 380) +#define ANIM_TAG_STONE_PILLAR_MULTI (ANIM_SPRITES_START + 381) +#define ANIM_TAG_ALPHA_SYMBOL (ANIM_SPRITES_START + 382) +#define ANIM_TAG_OMEGA_SYMBOL (ANIM_SPRITES_START + 383) +#define ANIM_TAG_PRIMAL_PARTICLES (ANIM_SPRITES_START + 384) +#define ANIM_TAG_STEEL_BEAM (ANIM_SPRITES_START + 385) +#define ANIM_TAG_POLTERGEIST (ANIM_SPRITES_START + 386) // battlers #define ANIM_ATTACKER 0 @@ -318,7 +418,7 @@ #define SOUND_PAN_TARGET 63 // move background ids -#define BG_DARK_ 0 // the same as BG_DARK but is unused +#define BG_NONE 0 // the same as BG_DARK but is unused #define BG_DARK 1 #define BG_GHOST 2 #define BG_PSYCHIC 3 @@ -342,9 +442,62 @@ #define BG_FISSURE 21 #define BG_BUG_OPPONENT 22 #define BG_BUG_PLAYER 23 -#define BG_SOLARBEAM_OPPONENT 24 -#define BG_SOLARBEAM_PLAYER 25 -#define BG_SOLARBEAM_CONTESTS 26 +#define BG_SOLAR_BEAM_OPPONENT 24 +#define BG_SOLAR_BEAM_PLAYER 25 +#define BG_SOLAR_BEAM_CONTESTS 26 +#define BG_MAGMA_STORM 27 +#define BG_GIGA_IMPACT_OPPONENT 28 +#define BG_GIGA_IMPACT_PLAYER 29 +#define BG_GIGA_IMPACT_CONTEST 30 +#define BG_TRICK_ROOM 31 +#define BG_ROCK_WRECKER 32 +#define BG_SPACIAL_REND_ON_OPPONENT 33 +#define BG_SPACIAL_REND_ON_PLAYER 34 +#define BG_DARK_VOID 35 +#define BG_WATER 36 +#define BG_NIGHTMARE 37 +#define BG_LEAF_STORM 38 +#define BG_FIRE 39 +#define BG_FIRE_2 40 +#define BG_WATER_2 41 +#define BG_POISON 42 +#define BG_AEROBLAST 43 +#define BG_HURRICANE 44 +#define BG_ELECTRIC_TERRAIN 45 +#define BG_GRASSY_TERRAIN 46 +#define BG_MISTY_TERRAIN 47 +#define BG_PSYCHIC_TERRAIN 48 +#define BG_FOCUS_BLAST 49 +#define BG_GUNK_SHOT 50 +#define BG_HYDRO_CANNON 51 +#define BG_WONDER_ROOM 52 +#define BG_MAGIC_ROOM 53 +#define BG_HYPERSPACE_FURY 54 +#define BG_BOLT_STRIKE 55 +#define BG_ZMOVE_ACTIVATE 56 +#define BG_TECTONIC_RAGE 57 +#define BG_BLUE_SKY_DAY 58 +#define BG_BLUE_SKY_AFTERNOON 59 +#define BG_BLUE_SKY_NIGHT 60 +#define BG_ZMOVE_MOUNTAIN 61 +#define BG_NEVERENDING_NIGHTMARE 62 +#define BG_WATER_PULSE 63 +#define BG_INFERNO_OVERDRIVE 64 +#define BG_BLOOM_DOOM 65 +#define BG_SHATTERED_PSYCHE 66 +#define BG_TWINKLE_TACKLE 67 +#define BG_BLACKHOLE_ECLIPSE 68 +#define BG_SOULSTEALING_7STAR_STRIKE 69 +#define BG_MALICIOUS_MOONSAULT 70 +#define BG_CLANGOROUS_SOULBLAZE 71 +#define BG_SNUGGLE_FOREVER 72 +#define BG_MAX_LIGHTNING 73 +#define BG_GARBAGE_FALLS 74 +#define BG_HYPER_BEAM 75 +#define BG_DYNAMAX_CANNON 76 +#define BG_AURA_SPHERE 77 +#define BG_STEEL_BEAM_OPPONENT 78 +#define BG_STEEL_BEAM_PLAYER 79 // table ids for general animations (gBattleAnims_General) #define B_ANIM_CASTFORM_CHANGE 0 @@ -356,7 +509,7 @@ #define B_ANIM_TURN_TRAP 6 #define B_ANIM_HELD_ITEM_EFFECT 7 #define B_ANIM_SMOKEBALL_ESCAPE 8 -#define B_ANIM_FOCUS_BAND 9 +#define B_ANIM_HANGED_ON 9 #define B_ANIM_RAIN_CONTINUES 10 #define B_ANIM_SUN_CONTINUES 11 #define B_ANIM_SANDSTORM_CONTINUES 12 @@ -370,6 +523,20 @@ #define B_ANIM_FOCUS_PUNCH_SETUP 20 #define B_ANIM_INGRAIN_HEAL 21 #define B_ANIM_WISH_HEAL 22 +#define B_ANIM_MEGA_EVOLUTION 23 +#define B_ANIM_ILLUSION_OFF 24 +#define B_ANIM_FORM_CHANGE 25 +#define B_ANIM_SLIDE_OFFSCREEN 26 // for Emergency Exit +#define B_ANIM_RESTORE_BG 27 // for Terrain Endings +#define B_ANIM_TOTEM_FLARE 28 // Totem boosts aura flare +#define B_ANIM_GULP_MISSILE 29 +#define B_ANIM_STRONG_WINDS 30 +#define B_ANIM_PRIMAL_REVERSION 31 +#define B_ANIM_AQUA_RING_HEAL 32 +#define B_ANIM_BEAK_BLAST_SETUP 33 +#define B_ANIM_SHELL_TRAP_SETUP 34 +#define B_ANIM_ZMOVE_ACTIVATE 35 // Using Z Moves +#define B_ANIM_AFFECTION_HANGED_ON 36 // special animations table (gBattleAnims_Special) #define B_ANIM_LVL_UP 0 @@ -379,6 +546,7 @@ #define B_ANIM_BALL_THROW_WITH_TRAINER 4 #define B_ANIM_SUBSTITUTE_TO_MON 5 #define B_ANIM_MON_TO_SUBSTITUTE 6 +#define B_ANIM_CRITICAL_CAPTURE_THROW 7 // status animation table (gBattleAnims_StatusConditions) #define B_ANIM_STATUS_PSN 0 @@ -395,6 +563,9 @@ // Tasks with return values often assign them to gBattleAnimArgs[7]. #define ARG_RET_ID 7 +// For createsprite macro to use internally +#define ANIMSPRITE_IS_TARGET (1 << 7) + // Trapping Wrap-like moves end turn animation. #define TRAP_ANIM_BIND 0 #define TRAP_ANIM_WRAP 0 @@ -402,6 +573,9 @@ #define TRAP_ANIM_WHIRLPOOL 2 #define TRAP_ANIM_CLAMP 3 #define TRAP_ANIM_SAND_TOMB 4 +#define TRAP_ANIM_MAGMA_STORM 5 +#define TRAP_ANIM_INFESTATION 6 +#define TRAP_ANIM_SNAP_TRAP 7 // Weather defines for battle animation scripts. #define ANIM_WEATHER_NONE 0 @@ -410,4 +584,51 @@ #define ANIM_WEATHER_SANDSTORM 3 #define ANIM_WEATHER_HAIL 4 +// mon pal blend +#define ANIM_PAL_BG 0x1 +#define ANIM_PAL_ATK 0x2 +#define ANIM_PAL_DEF 0x4 +#define ANIM_PAL_ATK_PARTNER 0x8 +#define ANIM_PAL_DEF_PARTNER 0x10 +#define ANIM_PAL_ALL 0x1f +#define ANIM_PAL_BG_4 0x20 +#define ANIM_PAL_BG_5 0x40 +#define ANIM_PAL_ALL_BATTLERS 0x780 +#define ANIM_PAL_PLAYER1 0x80 +#define ANIM_PAL_PLAYER2 0x100 +#define ANIM_PAL_OPPONENT1 0x200 +#define ANIM_PAL_OPPONENT2 0x400 + +// horseshoe/fist frames +#define ANIM_RIGHT_FIST 0 +#define ANIM_LEFT_FIST 2 + +// fist/chop frames +#define ANIM_FIST_1 0 +#define ANIM_FOOT_1 1 +#define ANIM_FOOT_2 2 +#define ANIM_CHOP 3 + +// surf wave palettes +#define ANIM_SURF_PAL_SURF 0 +#define ANIM_SURF_PAL_MUDDY_WATER 1 +#define ANIM_SURF_PAL_SLUDGE_WAVE 2 + +// Flags given to various functions to indicate which palettes to consider. +// Handled by UnpackSelectedBattlePalettes +#define F_PAL_BG (1 << 0) +#define F_PAL_ATTACKER (1 << 1) +#define F_PAL_TARGET (1 << 2) +#define F_PAL_ATK_PARTNER (1 << 3) +#define F_PAL_DEF_PARTNER (1 << 4) +#define F_PAL_ANIM_1 (1 << 5) // Palette set for GetBattleAnimBg1Data/GetBgDataForTransform. Only used (ineffectually?) by Aromatherapy. +#define F_PAL_ANIM_2 (1 << 6) // Palette set for GetBattleAnimBgData/GetBgDataForTransform. Unused. +#define F_PAL_ATK_SIDE (F_PAL_ATTACKER | F_PAL_ATK_PARTNER) +#define F_PAL_DEF_SIDE (F_PAL_TARGET | F_PAL_DEF_PARTNER) +#define F_PAL_BATTLERS (F_PAL_ATK_SIDE | F_PAL_DEF_SIDE) +// The below are only used by AnimTask_BlendBattleAnimPal to get battler sprite palettes by position rather than by role. +// It's redundant with F_PAL_BATTLERS, because they're only ever used together to refer to all the battlers at once. +#define F_PAL_BATTLERS_2 (1 << 7 | 1 << 8 | 1 << 9 | 1 << 10) + + #endif // GUARD_CONSTANTS_BATTLE_ANIM_H diff --git a/include/constants/battle_arena.h b/include/constants/battle_arena.h index e04211115d..d4288d04fc 100644 --- a/include/constants/battle_arena.h +++ b/include/constants/battle_arena.h @@ -17,4 +17,10 @@ #define ARENA_CATEGORY_SKILL 1 #define ARENA_CATEGORY_BODY 2 +#define ARENA_RESULT_RUNNING 0 // For intermediate steps, when BattleArena_ShowJudgmentWindow should be called again immediately +#define ARENA_RESULT_STEP_DONE 1 // A step has been completed, the script may advance to the next instruction +#define ARENA_RESULT_PLAYER_WON 2 +#define ARENA_RESULT_PLAYER_LOST 3 +#define ARENA_RESULT_TIE 4 + #endif //GUARD_CONSTANTS_BATTLE_ARENA_H diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h new file mode 100644 index 0000000000..89134daf91 --- /dev/null +++ b/include/constants/battle_config.h @@ -0,0 +1,199 @@ +#ifndef GUARD_CONSTANTS_BATTLE_CONFIG_H +#define GUARD_CONSTANTS_BATTLE_CONFIG_H + +#ifndef GEN_3 + #define GEN_3 0 + #define GEN_4 1 + #define GEN_5 2 + #define GEN_6 3 + #define GEN_7 4 + #define GEN_8 5 +#endif + +// Calculation settings +#define B_CRIT_CHANCE GEN_7 // Chances of a critical hit landing. See CalcCritChanceStage. Gen6+ chances guarantee that Farfetch'd and Sirfetch'd always get critical hits while holding a Leek and using high-crit ratio moves. +#define B_CRIT_MULTIPLIER GEN_7 // In Gen6+, critical hits multiply damage by 1.5 instead of 2. +#define B_PARALYSIS_SPEED GEN_7 // In Gen7+, Speed is decreased by 50% instead of 75%. +#define B_CONFUSION_SELF_DMG_CHANCE GEN_7 // In Gen7+, confusion has a 33.3% of self-damage, instead of 50%. +#define B_MULTI_HIT_CHANCE GEN_7 // In Gen5+, multi-hit moves have different %. See Cmd_setmultihitcounter for values. +#define B_WHITEOUT_MONEY GEN_7 // In Gen4+, the amount of money lost by losing a battle is determined by the amount of badges earned. Previously, it would cut the current money by half. (While this change was also in FRLG, for the sake of simplicity, setting this to GEN_3 will result in RSE behavior.) + +// Exp and stat settings +#define B_EXP_CATCH GEN_7 // In Gen6+, Pokémon get experience from catching. +#define B_TRAINER_EXP_MULTIPLIER GEN_7 // In Gen7+, trainer battles no longer give a 1.5 multiplier to EXP gain. +#define B_SPLIT_EXP GEN_7 // In Gen6+, all participating mon get full experience. +#define B_SCALED_EXP GEN_7 // In Gen5 and Gen7+, experience is weighted by level difference. +#define B_BADGE_BOOST GEN_7 // In Gen4+, Gym Badges no longer boost a Pokémon's stats. +#define B_MAX_LEVEL_EV_GAINS GEN_7 // In Gen5+, Lv100 Pokémon can obtain Effort Values normally. +#define B_RECALCULATE_STATS GEN_7 // In Gen5+, the stats of the Pokémon who participate in battle are recalculated at the end of each battle. + +// Damage settings +#define B_BURN_DAMAGE GEN_7 // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th. +#define B_BURN_FACADE_DMG GEN_7 // In Gen6+, burn's effect of lowering the Attack stat no longer applies to Facade. +#define B_BINDING_DAMAGE GEN_7 // 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_7 // Psywave's damage formula. See Cmd_psywavedamageeffect. +#define B_PAYBACK_SWITCH_BOOST GEN_7 // In Gen5+, if the opponent switches out, Payback's damage will no longer be doubled. +#define B_HIDDEN_POWER_DMG GEN_7 // In Gen6+, Hidden Power's base power was set to always be 60. Before, it was determined by the mon's IVs. +#define B_ROUGH_SKIN_DMG GEN_7 // In Gen4+, Rough Skin contact damage is 1/8th of max HP instead of 1/16th. This will also affect Iron Barbs. +#define B_KNOCK_OFF_DMG GEN_8 // In Gen6+, Knock Off deals 50% more damage when knocking off an item. +#define B_SPORT_DMG_REDUCTION GEN_7 // In Gen5+, Water/Mud Sport reduce Fire/Electric Damage by 67% instead of 50%. +#define B_EXPLOSION_DEFENSE GEN_7 // In Gen5+, Self-Destruct and Explosion don't halve the targets' defense. + +// Type settings +#define B_GHOSTS_ESCAPE GEN_7 // 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_7 // In Gen6+, Electric-type Pokémon can't be paralyzed. +#define B_POWDER_GRASS GEN_7 // In Gen6+, Grass-type Pokémon are immune to powder and spore moves. +#define B_STEEL_RESISTANCES GEN_7 // In Gen6+, Steel-type Pokémon are no longer resistant to Dark-type and Ghost-type moves. +#define B_PRANKSTER_DARK_TYPES GEN_7 // In Gen7+, Prankster-elevated status moves do not affect Dark type Pokémon. +#define B_SHEER_COLD_IMMUNITY GEN_7 // In Gen7+, Ice-types are immune to Sheer Cold + +// Turn settings +#define B_BINDING_TURNS GEN_7 // In Gen5+, binding moves last for 4-5 turns instead of 2-5 turns. (With Grip Claw, 7 and 5 turns respectively.) +#define B_UPROAR_TURNS GEN_7 // In Gen5+, Uproar lasts for 3 turns instead of 2-5 turns. +#define B_DISABLE_TURNS GEN_7 // Disable's turns. See Cmd_disablelastusedattack. +#define B_TAILWIND_TURNS GEN_7 // In Gen5+, Tailwind lasts 4 turns instead of 3. +#define B_SLEEP_TURNS GEN_7 // In Gen5+, sleep lasts for 1-3 turns instead of 2-5 turns. +#define B_TAUNT_TURNS GEN_7 // In Gen5+, Taunt lasts 3 turns if the user acts before the target, or 4 turns if the target acted before the user. In Gen3, taunt lasts 2 turns and in Gen 4, 3-5 turns. +#define B_SPORT_TURNS GEN_7 // In Gen6+, Water/Mud Sport last 5 turns, even if the user switches out. +#define B_MEGA_EVO_TURN_ORDER GEN_7 // In Gen7, a Pokémon's Speed after Mega Evolution is used to determine turn order, not its Speed before. +#define B_RECALC_TURN_AFTER_ACTIONS GEN_8 // In Gen8, switching/using a move affects the current turn's order of actions. +#define B_FAINT_SWITCH_IN GEN_7 // In Gen4+, sending out a new Pokémon after the previous one fainted happens at the end of the turn. Before, it would happen after each action. + +// Move data settings +#define B_UPDATED_MOVE_DATA GEN_8 // Updates move data in gBattleMoves, including Power, Accuracy, PP, stat changes, targets, chances of secondary effects, etc. +#define B_PHYSICAL_SPECIAL_SPLIT GEN_7 // In Gen3, the move's type determines if it will do physical or special damage. The split icon in the summary will reflect this. +#define B_RECOIL_IF_MISS_DMG GEN_7 // In Gen5+, Jump Kick and High Jump Kick will always do half of the user's max HP when missing. +#define B_KLUTZ_FLING_INTERACTION GEN_7 // In Gen5+, Pokémon with the Klutz ability can't use Fling. +#define B_UPDATED_CONVERSION GEN_7 // In Gen6+, Conversion changes the user's type to match their first move's. Before, it would choose a move at random. +#define B_PP_REDUCED_BY_SPITE GEN_7 // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5. + +// Move accuracy settings +#define B_TOXIC_NEVER_MISS GEN_7 // In Gen6+, if Toxic is used by a Poison-type Pokémon, it will never miss. +#define B_MINIMIZE_DMG_ACC GEN_7 // In Gen6+, moves that causes double damage to minimized Pokémon will also skip accuracy checks. +#define B_BLIZZARD_HAIL GEN_7 // In Gen4+, Blizzard bypasses accuracy checks if it's hailing. +#define B_SHEER_COLD_ACC GEN_7 // In Gen7+, Sheer Cold's base chance of hitting is reduced to 20% if the user isn't Ice-typed. + +// Move stat change settings +#define B_FELL_STINGER_STAT_RAISE GEN_7 // In Gen7+, it raises Atk by 3 stages instead of 2 if it causes the target to faint. +#define B_KINGS_SHIELD_LOWER_ATK GEN_7 // In Gen7+, it lowers Atk by 1 stage instead of 2 of oponents that hit it. +#define B_SPEED_BUFFING_RAPID_SPIN GEN_8 // In Gen8, Rapid Spin raises the user's Speed by 1 stage. +#define B_CHARGE_SPDEF_RAISE GEN_7 // In Gen5+, Charge raises the user's Special Defense by 1 stage. +#define B_MINIMIZE_EVASION GEN_7 // In Gen5+, Minimize raises evasion by 2 stages instead of 1. +#define B_GROWTH_STAT_RAISE GEN_7 // In Gen5+, Growth raises Attack in addition to Special Attack by 1 stage each. Under the effects of the sun, it raises them by 2 stages each instead. + +// Other move settings +#define B_SOUND_SUBSTITUTE GEN_7 // In Gen6+, sound moves bypass Substitute. +#define B_INCINERATE_GEMS GEN_7 // In Gen6+, Incinerate can destroy Gems. +#define B_CAN_SPITE_FAIL GEN_7 // In Gen4+, Spite can no longer fail if the foe's last move only has 1 remaining PP. +#define B_CRASH_IF_TARGET_IMMUNE GEN_7 // In Gen4+, The user of Jump Kick or High Jump Kick will "keep going and crash" if it attacks a target that is immune to the move. +#define B_MEMENTO_FAIL GEN_7 // In Gen4+, Memento fails if there is no target or if the target is protected or behind substitute. But not if Atk/Sp. Atk are at -6. +#define B_GLARE_GHOST GEN_7 // In Gen4+, Glare can hit Ghost-type Pokémon normally. +#define B_SKILL_SWAP GEN_7 // In Gen4+, Skill Swap triggers switch-in abilities after use. +#define B_BRICK_BREAK GEN_7 // In Gen4+, you can destroy your own side's screens. In Gen 5+, screens are not removed if the target is immune. +#define B_WISH_HP_SOURCE GEN_7 // In Gen5+, Wish heals half of the user's max HP instead of the target's. +#define B_RAMPAGE_CANCELLING GEN_7 // In Gen5+, a failed Thrash, etc, will cancel except on its last turn. +#define B_HEAL_BLOCKING GEN_7 // In Gen5+, Heal Block prevents healing by Black Sludge, Leftovers, Shell Bell. Affected Pokémon will not consume held HP-restoring Berries or Berry Juice. + // Draining abilities will not heal but will prevent damage. In Gen6+, Heal Block prevents the use of most HP-draining moves. +#define B_ROOTED_GROUNDING GEN_7 // In Gen4+, Ingrain causes the affected Pokémon to become grounded. + +// Ability settings +#define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. +#define B_ABILITY_WEATHER GEN_7 // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability. +#define B_GALE_WINGS GEN_7 // In Gen7+ requires full HP to trigger. +#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't. +#define B_SHADOW_TAG_ESCAPE GEN_7 // In Gen4+, if both sides have a Pokémon with Shadow Tag, all battlers can escape. Before, neither side could escape this situation. +#define B_MOODY_ACC_EVASION GEN_8 // In Gen8, Moody CANNOT raise Accuracy and Evasion anymore. +#define B_FLASH_FIRE_FROZEN GEN_7 // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before. +#define B_SYNCHRONIZE_NATURE GEN_8 // In Gen8, if a Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same ability, as opposed to 50% previously. +#define B_SYNCHRONIZE_TOXIC GEN_8 // In Gen5+, if a Pokémon with Synchronize is badly poisoned, the opponent will also become badly poisoned. Previously, the opponent would become regular poisoned. +#define B_UPDATED_INTIMIDATE GEN_8 // In Gen8, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities. It also activates Rattled. +#define B_OBLIVIOUS_TAUNT GEN_7 // In Gen6+, Pokémon with Oblivious can't be taunted. +#define B_STURDY GEN_7 // In Gen5+, Sturdy causes the Pokémon to have 1 HP remaining if another Pokémon's attack or confusion damage would have brought it from full health to 0 HP. +#define B_PLUS_MINUS_INTERACTION GEN_7 // In Gen5+, Plus and Minus can be activated with themselves and the opposite ability. Before, only the opposing ability could activate it. + +// Item settings +#define B_HP_BERRIES GEN_7 // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. +#define B_BERRIES_INSTANT GEN_7 // In Gen4+, most berries activate on battle start/switch-in if applicable. In Gen3, they only activate either at the move end or turn end. +#define B_CONFUSE_BERRIES_HEAL GEN_8 // Before Gen7, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP. + // Requires using Item Expansion or manually editing the holdEffectParam of Figy, Wiki, Mago, Aguav and Iapapa berries. +#define B_X_ITEMS_BUFF GEN_7 // In Gen7+, the X Items raise a stat by 2 stages instead of 1. +#define B_MENTAL_HERB GEN_5 // In Gen5+, the Mental Herb cures Infatuation, Taunt, Encore, Torment, Heal Block, and Disable +#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_SOUL_DEW_BOOST GEN_7 // In Gens3-6, Soul Dew boosts Lati@s' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead. +#define B_NET_BALL_MODIFIER GEN_7 // In Gen7+, Net Ball's catch multiplier is x5 instead of x3. +#define B_DIVE_BALL_MODIFIER GEN_7 // In Gen4+, Dive Ball's effectiveness increases by when Surfing or Fishing. +#define B_NEST_BALL_MODIFIER GEN_7 // Nest Ball's formula varies depending on the Gen. See Cmd_handleballthrow. +#define B_REPEAT_BALL_MODIFIER GEN_7 // In Gen7+, Repeat Ball's catch multiplier is x3.5 instead of x3. +#define B_TIMER_BALL_MODIFIER GEN_7 // In Gen5+, Timer Ball's effectiveness increases by x0.3 per turn instead of x0.1 +#define B_DUSK_BALL_MODIFIER GEN_7 // In Gen7+, Dusk Ball's catch multiplier is x3 instead of x3.5. +#define B_QUICK_BALL_MODIFIER GEN_7 // In Gen5+, Quick Ball's catch multiplier is x5 instead of x4. +#define B_LURE_BALL_MODIFIER GEN_7 // In Gen7+, Lure Ball's catch multiplier is x5 instead of x3. +#define B_HEAVY_BALL_MODIFIER GEN_7 // In Gen7+, Heavy Ball's ranges change. See Cmd_handleballthrow. +#define B_DREAM_BALL_MODIFIER GEN_8 // In Gen8, Dream Ball's catch multiplier is x4 when the target is asleep or has the ability Comatose. +#define B_SERENE_GRACE_BOOST GEN_7 // In Gen5+, Serene Grace boosts the added flinch chance of King's Rock and Razor Fang. + +// Flag settings +// 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 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 0 // If not 0, you can set this flag in a script to enable smart wild pokemon + +// Var Settings +// To use the following features in scripting, replace the 0s with the var ID you're assigning it to. +// Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature. +#define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active +#define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) + +// 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_TERRAIN_TYPE_BOOST GEN_8 // In Gen8, damage is boosted by 30% instead of 50%. +#define B_SECRET_POWER_EFFECT GEN_7 // Secret Power's effects change depending on terrain and generation. See GetSecretPowerMoveEffect. +#define B_SECRET_POWER_ANIMATION GEN_7 // Secret Power's animations change depending on terrain and generation. +#define B_NATURE_POWER_MOVES GEN_8 // Nature Power calls different moves depending on terrain and generation. See sNaturePowerMoves. +#define B_CAMOUFLAGE_TYPES GEN_7 // Camouflage changes the user to different types depending on terrain and generation. See sTerrainToType. + +// 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_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_SPLIT_ICON TRUE // If set to TRUE, it will show an icon in the summary showing the move's category split. +#define B_HIDE_HEALTHBOX_IN_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations. +#define B_EXPANDED_MOVE_NAMES FALSE // If set to TRUE, move names are increased from 12 characters to 16 characters. + +// Catching settings +#define B_SEMI_INVULNERABLE_CATCH GEN_7 // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc) +#define B_CATCHING_CHARM_BOOST 20 // % boost in Critical Capture odds if player has the Catching Charm. +#define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled. +#define B_LAST_USED_BALL TRUE // If TRUE, the "last used ball" feature from Gen 7 will be implemented +#define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball. + +// Other settings +#define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. +#define B_MULTI_BATTLE_WHITEOUT GEN_8 // 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_6 // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. +#define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) +#define B_AFFECTION_MECHANICS FALSE // In Gen6+, there's a stat called affection that can trigger different effects in battle. From LGPE onwards, those effects use friendship instead. + +// Animation Settings +#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_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. + +#define B_ENABLE_DEBUG TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button. + +#endif // GUARD_CONSTANTS_BATTLE_CONFIG_H diff --git a/include/constants/battle_dome.h b/include/constants/battle_dome.h index ea7310e559..adac0a938d 100644 --- a/include/constants/battle_dome.h +++ b/include/constants/battle_dome.h @@ -118,7 +118,7 @@ #define MOVE_POINTS_ACCURATE 9 #define MOVE_POINTS_POWERFUL 10 // Most of the moves that are >= 100 power #define MOVE_POINTS_POPULAR 11 // Group seems arbitrary. All using it are TM/HMs, but its only 11/58 -#define MOVE_POINTS_LUCK 12 +#define MOVE_POINTS_LUCK 12 #define MOVE_POINTS_STRONG 13 // Most of the moves that are >= 90 power #define MOVE_POINTS_LOW_PP 14 #define MOVE_POINTS_EFFECT 15 // Moves with additional effects diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h index 68c5a42ef3..85c1df085e 100644 --- a/include/constants/battle_frontier.h +++ b/include/constants/battle_frontier.h @@ -1,6 +1,8 @@ #ifndef GUARD_CONSTANTS_BATTLE_FRONTIER_H #define GUARD_CONSTANTS_BATTLE_FRONTIER_H +#include "constants/pokemon.h" + #define FRONTIER_CHALLENGE(facility, mode) ((facility << 8) + mode) // Battle Frontier facility ids. @@ -17,11 +19,6 @@ #define FACILITY_UNION_ROOM 8 #define FACILITY_MULTI_OR_EREADER 9 // Direct Corner multi battles, multi battle with Steven, and e-Reader battles -// Battle Frontier lvl modes. -#define FRONTIER_LVL_50 0 -#define FRONTIER_LVL_OPEN 1 -#define FRONTIER_LVL_TENT 2 - // Battle Frontier battle modes. #define FRONTIER_MODE_SINGLES 0 #define FRONTIER_MODE_DOUBLES 1 @@ -47,34 +44,43 @@ #define SPECIAL_BATTLE_STEVEN 8 #define SPECIAL_BATTLE_PIKE_DOUBLE 9 #define SPECIAL_BATTLE_PYRAMID 10 +#define SPECIAL_BATTLE_MULTI 11 #define MAX_BATTLE_FRONTIER_POINTS 9999 #define MAX_STREAK 9999 +#define FRONTIER_MAX_LEVEL_50 50 +#define FRONTIER_MIN_LEVEL_OPEN 60 +#define FRONTIER_MAX_LEVEL_OPEN MAX_LEVEL + +// This is the default number of battles (or floors, in Battle Pyramid) per challenge. +// There are 2 facilities that differ: Battle Dome (DOME_ROUNDS_COUNT) and Battle Pike (NUM_PIKE_ROOMS). +#define FRONTIER_STAGES_PER_CHALLENGE 7 + // These sets of facility ids would be redundant if the order was consistent // The order is important for this set so that all the non-link records can be continuous -#define RANKING_HALL_BATTLE_TOWER_SINGLES 0 -#define RANKING_HALL_BATTLE_TOWER_DOUBLES 1 -#define RANKING_HALL_BATTLE_TOWER_MULTIS 2 -#define RANKING_HALL_BATTLE_DOME 3 -#define RANKING_HALL_BATTLE_PALACE 4 -#define RANKING_HALL_BATTLE_ARENA 5 -#define RANKING_HALL_BATTLE_FACTORY 6 -#define RANKING_HALL_BATTLE_PIKE 7 -#define RANKING_HALL_BATTLE_PYRAMID 8 -#define RANKING_HALL_BATTLE_TOWER_LINK 9 +#define RANKING_HALL_TOWER_SINGLES 0 +#define RANKING_HALL_TOWER_DOUBLES 1 +#define RANKING_HALL_TOWER_MULTIS 2 +#define RANKING_HALL_DOME 3 +#define RANKING_HALL_PALACE 4 +#define RANKING_HALL_ARENA 5 +#define RANKING_HALL_FACTORY 6 +#define RANKING_HALL_PIKE 7 +#define RANKING_HALL_PYRAMID 8 +#define RANKING_HALL_TOWER_LINK 9 -#define FRONTIER_MANIAC_BATTLE_TOWER_SINGLES 0 -#define FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES 1 -#define FRONTIER_MANIAC_BATTLE_TOWER_MULTIS 2 -#define FRONTIER_MANIAC_BATTLE_TOWER_LINK 3 -#define FRONTIER_MANIAC_BATTLE_DOME 4 -#define FRONTIER_MANIAC_BATTLE_FACTORY 5 -#define FRONTIER_MANIAC_BATTLE_PALACE 6 -#define FRONTIER_MANIAC_BATTLE_ARENA 7 -#define FRONTIER_MANIAC_BATTLE_PIKE 8 -#define FRONTIER_MANIAC_BATTLE_PYRAMID 9 -#define FRONTIER_MANIAC_FACILITY_COUNT 10 +#define FRONTIER_MANIAC_TOWER_SINGLES 0 +#define FRONTIER_MANIAC_TOWER_DOUBLES 1 +#define FRONTIER_MANIAC_TOWER_MULTIS 2 +#define FRONTIER_MANIAC_TOWER_LINK 3 +#define FRONTIER_MANIAC_DOME 4 +#define FRONTIER_MANIAC_FACTORY 5 +#define FRONTIER_MANIAC_PALACE 6 +#define FRONTIER_MANIAC_ARENA 7 +#define FRONTIER_MANIAC_PIKE 8 +#define FRONTIER_MANIAC_PYRAMID 9 +#define FRONTIER_MANIAC_FACILITY_COUNT 10 #define FRONTIER_MANIAC_MESSAGE_COUNT 3 @@ -171,7 +177,7 @@ #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_STICK 53 +#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 diff --git a/include/constants/battle_frontier_trainers.h b/include/constants/battle_frontier_trainers.h index 2914b153fa..af530a7597 100644 --- a/include/constants/battle_frontier_trainers.h +++ b/include/constants/battle_frontier_trainers.h @@ -2,7 +2,7 @@ #define GUARD_CONSTANTS_BATTLE_FRONTIER_TRAINERS_H #define FRONTIER_TRAINER_BRADY 0 -#define FRONTIER_TRAINER_CONNER 1 +#define FRONTIER_TRAINER_CONNER 1 #define FRONTIER_TRAINER_BRADLEY 2 #define FRONTIER_TRAINER_CYBIL 3 #define FRONTIER_TRAINER_RODETTE 4 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index cc62208fa1..f217ecd33a 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -18,12 +18,12 @@ #define EFFECT_SPECIAL_DEFENSE_UP 14 #define EFFECT_ACCURACY_UP 15 #define EFFECT_EVASION_UP 16 -#define EFFECT_ALWAYS_HIT 17 +#define EFFECT_SPECIAL_ATTACK_UP_3 17 #define EFFECT_ATTACK_DOWN 18 #define EFFECT_DEFENSE_DOWN 19 #define EFFECT_SPEED_DOWN 20 -#define EFFECT_SPECIAL_ATTACK_DOWN 21 // unused -#define EFFECT_SPECIAL_DEFENSE_DOWN 22 // unused +#define EFFECT_SPECIAL_ATTACK_DOWN 21 +#define EFFECT_SPECIAL_DEFENSE_DOWN 22 #define EFFECT_ACCURACY_DOWN 23 #define EFFECT_EVASION_DOWN 24 #define EFFECT_HAZE 25 @@ -40,16 +40,16 @@ #define EFFECT_TRI_ATTACK 36 #define EFFECT_REST 37 #define EFFECT_OHKO 38 -#define EFFECT_RAZOR_WIND 39 +#define EFFECT_FUSION_COMBO 39 #define EFFECT_SUPER_FANG 40 #define EFFECT_DRAGON_RAGE 41 #define EFFECT_TRAP 42 -#define EFFECT_HIGH_CRITICAL 43 +#define EFFECT_HEAL_BLOCK 43 #define EFFECT_DOUBLE_HIT 44 #define EFFECT_RECOIL_IF_MISS 45 #define EFFECT_MIST 46 #define EFFECT_FOCUS_ENERGY 47 -#define EFFECT_RECOIL 48 +#define EFFECT_RECOIL_25 48 #define EFFECT_CONFUSE 49 #define EFFECT_ATTACK_UP_2 50 #define EFFECT_DEFENSE_UP_2 51 @@ -76,7 +76,7 @@ #define EFFECT_SPECIAL_DEFENSE_DOWN_HIT 72 #define EFFECT_ACCURACY_DOWN_HIT 73 #define EFFECT_EVASION_DOWN_HIT 74 -#define EFFECT_SKY_ATTACK 75 +#define EFFECT_TWO_TURNS_ATTACK 75 #define EFFECT_CONFUSE_HIT 76 #define EFFECT_TWINEEDLE 77 #define EFFECT_VITAL_THROW 78 @@ -86,7 +86,7 @@ #define EFFECT_MIMIC 82 #define EFFECT_METRONOME 83 #define EFFECT_LEECH_SEED 84 -#define EFFECT_SPLASH 85 +#define EFFECT_DO_NOTHING 85 #define EFFECT_DISABLE 86 #define EFFECT_LEVEL_DAMAGE 87 #define EFFECT_PSYWAVE 88 @@ -97,21 +97,21 @@ #define EFFECT_CONVERSION_2 93 #define EFFECT_LOCK_ON 94 #define EFFECT_SKETCH 95 -#define EFFECT_UNUSED_60 96 // thaw +#define EFFECT_HAMMER_ARM 96 #define EFFECT_SLEEP_TALK 97 #define EFFECT_DESTINY_BOND 98 #define EFFECT_FLAIL 99 #define EFFECT_SPITE 100 #define EFFECT_FALSE_SWIPE 101 #define EFFECT_HEAL_BELL 102 -#define EFFECT_QUICK_ATTACK 103 +#define EFFECT_ALWAYS_CRIT 103 #define EFFECT_TRIPLE_KICK 104 #define EFFECT_THIEF 105 #define EFFECT_MEAN_LOOK 106 #define EFFECT_NIGHTMARE 107 #define EFFECT_MINIMIZE 108 #define EFFECT_CURSE 109 -#define EFFECT_UNUSED_6E 110 +#define EFFECT_HEALING_WISH 110 #define EFFECT_PROTECT 111 #define EFFECT_SPIKES 112 #define EFFECT_FORESIGHT 113 @@ -126,13 +126,13 @@ #define EFFECT_PRESENT 122 #define EFFECT_FRUSTRATION 123 #define EFFECT_SAFEGUARD 124 -#define EFFECT_THAW_HIT 125 +#define EFFECT_UNUSED_125 125 #define EFFECT_MAGNITUDE 126 #define EFFECT_BATON_PASS 127 #define EFFECT_PURSUIT 128 #define EFFECT_RAPID_SPIN 129 #define EFFECT_SONICBOOM 130 -#define EFFECT_UNUSED_83 131 +#define EFFECT_CAPTIVATE 131 #define EFFECT_MORNING_SUN 132 #define EFFECT_SYNTHESIS 133 #define EFFECT_MOONLIGHT 134 @@ -142,7 +142,7 @@ #define EFFECT_DEFENSE_UP_HIT 138 #define EFFECT_ATTACK_UP_HIT 139 #define EFFECT_ALL_STATS_UP_HIT 140 -#define EFFECT_UNUSED_8D 141 // incomplete fake out in gen 2 +#define EFFECT_FELL_STINGER 141 #define EFFECT_BELLY_DRUM 142 #define EFFECT_PSYCH_UP 143 #define EFFECT_MIRROR_COAT 144 @@ -151,8 +151,8 @@ #define EFFECT_EARTHQUAKE 147 #define EFFECT_FUTURE_SIGHT 148 #define EFFECT_GUST 149 -#define EFFECT_FLINCH_MINIMIZE_HIT 150 // STOMP ASTONISH EXTRASENSORY NEEDLE_ARM -#define EFFECT_SOLARBEAM 151 +#define EFFECT_FLINCH_MINIMIZE_HIT 150 +#define EFFECT_SOLAR_BEAM 151 #define EFFECT_THUNDER 152 #define EFFECT_TELEPORT 153 #define EFFECT_BEAT_UP 154 @@ -164,7 +164,7 @@ #define EFFECT_STOCKPILE 160 #define EFFECT_SPIT_UP 161 #define EFFECT_SWALLOW 162 -#define EFFECT_UNUSED_A3 163 +#define EFFECT_WORRY_SEED 163 #define EFFECT_HAIL 164 #define EFFECT_TORMENT 165 #define EFFECT_FLATTER 166 @@ -199,9 +199,9 @@ #define EFFECT_SNATCH 195 #define EFFECT_LOW_KICK 196 #define EFFECT_SECRET_POWER 197 -#define EFFECT_DOUBLE_EDGE 198 +#define EFFECT_RECOIL_33 198 #define EFFECT_TEETER_DANCE 199 -#define EFFECT_BLAZE_KICK 200 +#define EFFECT_HIT_ESCAPE 200 #define EFFECT_MUD_SPORT 201 #define EFFECT_POISON_FANG 202 #define EFFECT_WEATHER_BALL 203 @@ -210,12 +210,193 @@ #define EFFECT_COSMIC_POWER 206 #define EFFECT_SKY_UPPERCUT 207 #define EFFECT_BULK_UP 208 -#define EFFECT_POISON_TAIL 209 +#define EFFECT_PLACEHOLDER 209 #define EFFECT_WATER_SPORT 210 #define EFFECT_CALM_MIND 211 #define EFFECT_DRAGON_DANCE 212 #define EFFECT_CAMOUFLAGE 213 -#define NUM_BATTLE_MOVE_EFFECTS 214 +// New move effects +#define EFFECT_PLEDGE 214 +#define EFFECT_FLING 215 +#define EFFECT_NATURAL_GIFT 216 +#define EFFECT_WAKE_UP_SLAP 217 +#define EFFECT_WRING_OUT 218 +#define EFFECT_HEX 219 +#define EFFECT_ASSURANCE 220 +#define EFFECT_TRUMP_CARD 221 +#define EFFECT_ACROBATICS 222 +#define EFFECT_HEAT_CRASH 223 +#define EFFECT_PUNISHMENT 224 +#define EFFECT_STORED_POWER 225 +#define EFFECT_ELECTRO_BALL 226 +#define EFFECT_GYRO_BALL 227 +#define EFFECT_ECHOED_VOICE 228 +#define EFFECT_PAYBACK 229 +#define EFFECT_ROUND 230 +#define EFFECT_BRINE 231 +#define EFFECT_VENOSHOCK 232 +#define EFFECT_RETALIATE 233 +#define EFFECT_BULLDOZE 234 +#define EFFECT_FOUL_PLAY 235 +#define EFFECT_PSYSHOCK 236 +#define EFFECT_ROOST 237 +#define EFFECT_GRAVITY 238 +#define EFFECT_MIRACLE_EYE 239 +#define EFFECT_TAILWIND 240 +#define EFFECT_EMBARGO 241 +#define EFFECT_AQUA_RING 242 +#define EFFECT_TRICK_ROOM 243 +#define EFFECT_WONDER_ROOM 244 +#define EFFECT_MAGIC_ROOM 245 +#define EFFECT_MAGNET_RISE 246 +#define EFFECT_TOXIC_SPIKES 247 +#define EFFECT_GASTRO_ACID 248 +#define EFFECT_STEALTH_ROCK 249 +#define EFFECT_TELEKINESIS 250 +#define EFFECT_POWER_SWAP 251 +#define EFFECT_GUARD_SWAP 252 +#define EFFECT_HEART_SWAP 253 +#define EFFECT_POWER_SPLIT 254 +#define EFFECT_GUARD_SPLIT 255 +#define EFFECT_STICKY_WEB 256 +#define EFFECT_METAL_BURST 257 +#define EFFECT_LUCKY_CHANT 258 +#define EFFECT_SUCKER_PUNCH 259 +#define EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2 260 +#define EFFECT_SIMPLE_BEAM 261 +#define EFFECT_ENTRAINMENT 262 +#define EFFECT_HEAL_PULSE 263 +#define EFFECT_QUASH 264 +#define EFFECT_ION_DELUGE 265 +#define EFFECT_FREEZE_DRY 266 +#define EFFECT_TOPSY_TURVY 267 +#define EFFECT_MISTY_TERRAIN 268 +#define EFFECT_GRASSY_TERRAIN 269 +#define EFFECT_ELECTRIC_TERRAIN 270 +#define EFFECT_PSYCHIC_TERRAIN 271 +#define EFFECT_ATTACK_ACCURACY_UP 272 +#define EFFECT_ATTACK_SPATK_UP 273 +#define EFFECT_HURRICANE 274 +#define EFFECT_TWO_TYPED_MOVE 275 +#define EFFECT_ME_FIRST 276 +#define EFFECT_SPEED_UP_HIT 277 +#define EFFECT_QUIVER_DANCE 278 +#define EFFECT_COIL 279 +#define EFFECT_ELECTRIFY 280 +#define EFFECT_SCALD 281 +#define EFFECT_REFLECT_TYPE 282 +#define EFFECT_SOAK 283 +#define EFFECT_GROWTH 284 +#define EFFECT_CLOSE_COMBAT 285 +#define EFFECT_LAST_RESORT 286 +#define EFFECT_RECOIL_33_STATUS 287 +#define EFFECT_FLINCH_STATUS 288 +#define EFFECT_RECOIL_50 289 +#define EFFECT_SHELL_SMASH 290 +#define EFFECT_SHIFT_GEAR 291 +#define EFFECT_DEFENSE_UP_3 292 +#define EFFECT_NOBLE_ROAR 293 +#define EFFECT_VENOM_DRENCH 294 +#define EFFECT_TOXIC_THREAD 295 +#define EFFECT_CLEAR_SMOG 296 +#define EFFECT_HIT_SWITCH_TARGET 297 +#define EFFECT_FINAL_GAMBIT 298 +#define EFFECT_CHANGE_TYPE_ON_ITEM 299 +#define EFFECT_AUTOTOMIZE 300 +#define EFFECT_COPYCAT 301 +#define EFFECT_DEFOG 302 +#define EFFECT_HIT_ENEMY_HEAL_ALLY 303 +#define EFFECT_SMACK_DOWN 304 +#define EFFECT_SYNCHRONOISE 305 +#define EFFECT_PSYCHO_SHIFT 306 +#define EFFECT_POWER_TRICK 307 +#define EFFECT_FLAME_BURST 308 +#define EFFECT_AFTER_YOU 309 +#define EFFECT_BESTOW 310 +#define EFFECT_ROTOTILLER 311 +#define EFFECT_FLOWER_SHIELD 312 +#define EFFECT_HIT_PREVENT_ESCAPE 313 +#define EFFECT_SPEED_SWAP 314 +#define EFFECT_DEFENSE_UP2_HIT 315 +#define EFFECT_REVELATION_DANCE 316 +#define EFFECT_AURORA_VEIL 317 +#define EFFECT_THIRD_TYPE 318 +#define EFFECT_FEINT 319 +#define EFFECT_SPARKLING_ARIA 320 +#define EFFECT_ACUPRESSURE 321 +#define EFFECT_AROMATIC_MIST 322 +#define EFFECT_POWDER 323 +#define EFFECT_SP_ATTACK_UP_HIT 324 +#define EFFECT_BELCH 325 +#define EFFECT_PARTING_SHOT 326 +#define EFFECT_SPECTRAL_THIEF 327 +#define EFFECT_V_CREATE 328 +#define EFFECT_MAT_BLOCK 329 +#define EFFECT_STOMPING_TANTRUM 330 +#define EFFECT_CORE_ENFORCER 331 +#define EFFECT_INSTRUCT 332 +#define EFFECT_THROAT_CHOP 333 +#define EFFECT_LASER_FOCUS 334 +#define EFFECT_MAGNETIC_FLUX 335 +#define EFFECT_GEAR_UP 336 +#define EFFECT_INCINERATE 337 +#define EFFECT_BUG_BITE 338 +#define EFFECT_STRENGTH_SAP 339 +#define EFFECT_MIND_BLOWN 340 +#define EFFECT_PURIFY 341 +#define EFFECT_BURN_UP 342 +#define EFFECT_SHORE_UP 343 +#define EFFECT_GEOMANCY 344 +#define EFFECT_FAIRY_LOCK 345 +#define EFFECT_ALLY_SWITCH 346 +#define EFFECT_RELIC_SONG 347 +#define EFFECT_ATTACKER_DEFENSE_DOWN_HIT 348 +#define EFFECT_BODY_PRESS 349 +#define EFFECT_EERIE_SPELL 350 +#define EFFECT_JUNGLE_HEALING 351 +#define EFFECT_COACHING 352 +#define EFFECT_LASH_OUT 353 +#define EFFECT_GRASSY_GLIDE 354 +#define EFFECT_REMOVE_TERRAIN 355 +#define EFFECT_DYNAMAX_DOUBLE_DMG 356 +#define EFFECT_DECORATE 357 +#define EFFECT_SNIPE_SHOT 358 +#define EFFECT_TRIPLE_HIT 359 +#define EFFECT_RECOIL_HP_25 360 +#define EFFECT_STUFF_CHEEKS 361 +#define EFFECT_GRAV_APPLE 362 +#define EFFECT_EVASION_UP_HIT 363 +#define EFFECT_DOUBLE_IRON_BASH 364 +#define EFFECT_GLITZY_GLOW 365 +#define EFFECT_BADDY_BAD 366 +#define EFFECT_SAPPY_SEED 367 +#define EFFECT_FREEZY_FROST 368 +#define EFFECT_SPARKLY_SWIRL 369 +#define EFFECT_PLASMA_FISTS 370 +#define EFFECT_HYPERSPACE_FURY 371 +#define EFFECT_AURA_WHEEL 372 +#define EFFECT_PHOTON_GEYSER 373 +#define EFFECT_SHELL_SIDE_ARM 374 +#define EFFECT_TERRAIN_PULSE 375 +#define EFFECT_JAW_LOCK 376 +#define EFFECT_NO_RETREAT 377 +#define EFFECT_TAR_SHOT 378 +#define EFFECT_POLTERGEIST 379 +#define EFFECT_OCTOLOCK 380 +#define EFFECT_CLANGOROUS_SOUL 381 +#define EFFECT_BOLT_BEAK 382 +#define EFFECT_SKY_DROP 383 +#define EFFECT_EXPANDING_FORCE 384 +#define EFFECT_SCALE_SHOT 385 +#define EFFECT_METEOR_BEAM 386 +#define EFFECT_RISING_VOLTAGE 387 +#define EFFECT_BEAK_BLAST 388 +#define EFFECT_COURT_CHANGE 389 +#define EFFECT_STEEL_BEAM 390 +#define EFFECT_EXTREME_EVOBOOST 391 +#define EFFECT_DAMAGE_SET_TERRAIN 392 // genesis supernova + +#define NUM_BATTLE_MOVE_EFFECTS 393 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_pike.h b/include/constants/battle_pike.h index 76309436e1..eebfd741a6 100644 --- a/include/constants/battle_pike.h +++ b/include/constants/battle_pike.h @@ -1,6 +1,8 @@ #ifndef GUARD_CONSTANTS_BATTLE_PIKE_H #define GUARD_CONSTANTS_BATTLE_PIKE_H +#define NUM_PIKE_ROOMS 14 + #define PIKE_ROOM_SINGLE_BATTLE 0 #define PIKE_ROOM_HEAL_FULL 1 #define PIKE_ROOM_NPC 2 diff --git a/include/constants/battle_pyramid.h b/include/constants/battle_pyramid.h index 004df71552..297f3b1fff 100644 --- a/include/constants/battle_pyramid.h +++ b/include/constants/battle_pyramid.h @@ -4,9 +4,6 @@ #define TOTAL_ROUNDS 20 #define PICKUP_ITEMS_PER_ROUND 10 -#define FLOOR_WALKABLE_METATILE 0x28D -#define FLOOR_EXIT_METATILE 0x28E - #define HINT_EXIT_DIRECTION 0 #define HINT_REMAINING_ITEMS 1 #define HINT_REMAINING_TRAINERS 2 @@ -17,13 +14,20 @@ #define HINT_EXIT_FAR_REMAINING_TRAINERS 7 #define HINT_EXIT_FAR_REMAINING_ITEMS 8 +#define MAX_PYRAMID_TRAINERS 8 + +// Each floor of the Battle Pyramid is 32x32 metatiles, subdivided into a 4x4 grid of 8x8 metatile squares +#define PYRAMID_FLOOR_SQUARES_WIDE 4 +#define PYRAMID_FLOOR_SQUARES_HIGH 4 +#define NUM_PYRAMID_FLOOR_SQUARES (PYRAMID_FLOOR_SQUARES_WIDE * PYRAMID_FLOOR_SQUARES_HIGH) + #define OBJ_TRAINERS 0 #define OBJ_ITEMS 1 #define OBJ_POSITIONS_UNIFORM 0 #define OBJ_POSITIONS_IN_AND_NEAR_ENTRANCE 1 #define OBJ_POSITIONS_IN_AND_NEAR_EXIT 2 -#define OBJ_POSITIONS_NEAR_ENTRANCE 3 +#define OBJ_POSITIONS_NEAR_ENTRANCE 3 #define OBJ_POSITIONS_NEAR_EXIT 4 // Functions IDs for sBattlePyramidFunctions / CallBattlePyramidFunction diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 9794589af2..077cba1eb2 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -1,38 +1,61 @@ #ifndef GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H #define GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H -// Battle Scripting and BattleCommunication addresses -#define sPAINSPLIT_HP gBattleScripting -#define sBIDE_DMG gBattleScripting + 4 -#define sMULTIHIT_STRING gBattleScripting + 8 -#define sDMG_MULTIPLIER gBattleScripting + 0xE -#define sTWOTURN_STRINGID gBattleScripting + 0xF -#define sB_ANIM_ARG1 gBattleScripting + 0x10 -#define sB_ANIM_ARG2 gBattleScripting + 0x11 -#define sTRIPLE_KICK_POWER gBattleScripting + 0x12 -#define sMOVEEND_STATE gBattleScripting + 0x14 -#define sBATTLER_WITH_ABILITY gBattleScripting + 0x15 -#define sMULTIHIT_EFFECT gBattleScripting + 0x16 -#define sBATTLER gBattleScripting + 0x17 -#define sB_ANIM_TURN gBattleScripting + 0x18 -#define sB_ANIM_TARGETS_HIT gBattleScripting + 0x19 -#define sSTATCHANGER gBattleScripting + 0x1A -#define sSTAT_ANIM_PLAYED gBattleScripting + 0x1B -#define sGIVEEXP_STATE gBattleScripting + 0x1C -#define sBATTLE_STYLE gBattleScripting + 0x1D -#define sLVLBOX_STATE gBattleScripting + 0x1E -#define sLEARNMOVE_STATE gBattleScripting + 0x1F -#define sFIELD_20 gBattleScripting + 0x20 -#define sRESHOW_MAIN_STATE gBattleScripting + 0x21 -#define sRESHOW_HELPER_STATE gBattleScripting + 0x22 -#define sFIELD_23 gBattleScripting + 0x23 -#define sWINDOWS_TYPE gBattleScripting + 0x24 -#define sMULTIPLAYER_ID gBattleScripting + 0x25 -#define sSPECIAL_TRAINER_BATTLE_TYPE gBattleScripting + 0x26 +// The following correspond to the struct members of BattleScripting by adding their offset +#define sPAINSPLIT_HP (gBattleScripting + 0x00) // painSplitHp +#define sBIDE_DMG (gBattleScripting + 0x04) // bideDmg +#define sMULTIHIT_STRING (gBattleScripting + 0x08) // multihitString +#define sEXP_CATCH (gBattleScripting + 0x0E) // expOnCatch +#define sTWOTURN_STRINGID (gBattleScripting + 0x0F) // twoTurnsMoveStringId +#define sB_ANIM_ARG1 (gBattleScripting + 0x10) // animArg1 +#define sB_ANIM_ARG2 (gBattleScripting + 0x11) // animArg2 +#define sTRIPLE_KICK_POWER (gBattleScripting + 0x12) // tripleKickPower +#define sMOVEEND_STATE (gBattleScripting + 0x14) // moveendState +#define sSAVED_STAT_CHANGER (gBattleScripting + 0x15) // savedStatChanger +#define sSHIFT_SWITCHED (gBattleScripting + 0x16) // shiftSwitched +#define sBATTLER (gBattleScripting + 0x17) // battler +#define sB_ANIM_TURN (gBattleScripting + 0x18) // animTurn +#define sB_ANIM_TARGETS_HIT (gBattleScripting + 0x19) // animTargetsHit +#define sSTATCHANGER (gBattleScripting + 0x1A) // statChanger +#define sSTAT_ANIM_PLAYED (gBattleScripting + 0x1B) // statAnimPlayed +#define sGIVEEXP_STATE (gBattleScripting + 0x1C) // getexpState +#define sBATTLE_STYLE (gBattleScripting + 0x1D) // battleStyle +#define sLVLBOX_STATE (gBattleScripting + 0x1E) // drawlvlupboxState +#define sLEARNMOVE_STATE (gBattleScripting + 0x1F) // learnMoveState +#define sSAVED_BATTLER (gBattleScripting + 0x20) // savedBattler +#define sRESHOW_MAIN_STATE (gBattleScripting + 0x21) // reshowMainState +#define sRESHOW_HELPER_STATE (gBattleScripting + 0x22) // reshowHelperState +#define sLVLUP_HP (gBattleScripting + 0x23) // levelUpHP +#define sWINDOWS_TYPE (gBattleScripting + 0x24) // windowsType +#define sMULTIPLAYER_ID (gBattleScripting + 0x25) // multiplayerId +#define sSPECIAL_TRAINER_BATTLE_TYPE (gBattleScripting + 0x26) // specialTrainerBattleType +#define sMON_CAUGHT (gBattleScripting + 0x27) // monCaught +#define sSAVED_DMG (gBattleScripting + 0x28) // savedDmg +#define sSAVED_MOVE_EFFECT (gBattleScripting + 0x2C) // savedMoveEffect +#define sMOVE_EFFECT (gBattleScripting + 0x2E) // moveEffect +#define sMULTIHIT_EFFECT (gBattleScripting + 0x30) // multihitMoveEffect +#define sILLUSION_NICK_HACK (gBattleScripting + 0x32) // illusionNickHack +#define sFIXED_ABILITY_POPUP (gBattleScripting + 0x33) // fixedPopup +#define sABILITY_OVERWRITE (gBattleScripting + 0x34) // abilityPopupOverwrite +#define sSWITCH_CASE (gBattleScripting + 0x36) // switchCase +#define sBERRY_OVERRIDE (gBattleScripting + 0x37) // overrideBerryRequirements +#define sSTICKY_WEB_STAT_DROP (gBattleScripting + 0x38) // stickyWebStatDrop -#define cEFFECT_CHOOSER gBattleCommunication + 3 -#define cMULTISTRING_CHOOSER gBattleCommunication + 5 -#define cMISS_TYPE gBattleCommunication + 6 +// Array entries for battle communication +#define MULTIUSE_STATE 0 +#define CURSOR_POSITION 1 +#define TASK_ID 1 // task Id and cursor position share the same field +#define SPRITES_INIT_STATE1 1 // shares the Id as well +#define SPRITES_INIT_STATE2 2 +#define MOVE_EFFECT_BYTE 3 +#define ACTIONS_CONFIRMED_COUNT 4 +#define MULTISTRING_CHOOSER 5 +#define MISS_TYPE 6 +#define MSG_DISPLAY 7 +#define BATTLE_COMMUNICATION_ENTRIES_COUNT 8 + +#define cMULTISTRING_CHOOSER (gBattleCommunication + MULTISTRING_CHOOSER) +#define cMISS_TYPE (gBattleCommunication + MISS_TYPE) // Battle Script defines for getting the wanted battler #define BS_TARGET 0 @@ -40,19 +63,19 @@ #define BS_EFFECT_BATTLER 2 #define BS_FAINTED 3 #define BS_ATTACKER_WITH_PARTNER 4 // for Cmd_updatestatusicon -#define BS_UNK_5 5 -#define BS_UNK_6 6 +#define BS_FAINTED_LINK_MULTIPLE_1 5 // for openpartyscreen +#define BS_FAINTED_LINK_MULTIPLE_2 6 // for openpartyscreen #define BS_BATTLER_0 7 #define BS_ATTACKER_SIDE 8 // for Cmd_jumpifability -#define BS_NOT_ATTACKER_SIDE 9 // for Cmd_jumpifability +#define BS_TARGET_SIDE 9 // for Cmd_jumpifability #define BS_SCRIPTING 10 #define BS_PLAYER1 11 #define BS_OPPONENT1 12 -#define BS_PLAYER2 13 +#define BS_PLAYER2 13 // for Cmd_updatestatusicon #define BS_OPPONENT2 14 +#define BS_ABILITY_BATTLER 15 // Cmd_accuracycheck -#define NO_ACC_CALC 0xFFFE #define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF #define ACC_CURR_MOVE 0 @@ -65,41 +88,179 @@ #define CMP_NO_COMMON_BITS 5 // Cmd_various -#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0 -#define VARIOUS_SET_MAGIC_COAT_TARGET 1 -#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2 -#define VARIOUS_GET_MOVE_TARGET 3 -#define VARIOUS_GET_BATTLER_FAINTED 4 -#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5 -#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6 -#define VARIOUS_PALACE_FLAVOR_TEXT 8 -#define VARIOUS_ARENA_JUDGMENT_WINDOW 9 -#define VARIOUS_ARENA_OPPONENT_MON_LOST 10 -#define VARIOUS_ARENA_PLAYER_MON_LOST 11 -#define VARIOUS_ARENA_BOTH_MONS_LOST 12 -#define VARIOUS_EMIT_YESNOBOX 13 -#define VARIOUS_ARENA_JUDGMENT_STRING 16 -#define VARIOUS_ARENA_WAIT_STRING 17 -#define VARIOUS_WAIT_CRY 18 -#define VARIOUS_RETURN_OPPONENT_MON1 19 -#define VARIOUS_RETURN_OPPONENT_MON2 20 -#define VARIOUS_VOLUME_DOWN 21 -#define VARIOUS_VOLUME_UP 22 -#define VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT 23 -#define VARIOUS_SET_TELEPORT_OUTCOME 25 -#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26 +#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0 +#define VARIOUS_SET_MAGIC_COAT_TARGET 1 +#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2 +#define VARIOUS_GET_MOVE_TARGET 3 +#define VARIOUS_GET_BATTLER_FAINTED 4 +#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5 +#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6 +#define VARIOUS_RESET_PLAYER_FAINTED 7 +#define VARIOUS_PALACE_FLAVOR_TEXT 8 +#define VARIOUS_ARENA_JUDGMENT_WINDOW 9 +#define VARIOUS_ARENA_OPPONENT_MON_LOST 10 +#define VARIOUS_ARENA_PLAYER_MON_LOST 11 +#define VARIOUS_ARENA_BOTH_MONS_LOST 12 +#define VARIOUS_EMIT_YESNOBOX 13 +#define VARIOUS_DRAW_ARENA_REF_TEXT_BOX 14 +#define VARIOUS_ERASE_ARENA_REF_TEXT_BOX 15 +#define VARIOUS_ARENA_JUDGMENT_STRING 16 +#define VARIOUS_ARENA_WAIT_STRING 17 +#define VARIOUS_WAIT_CRY 18 +#define VARIOUS_RETURN_OPPONENT_MON1 19 +#define VARIOUS_RETURN_OPPONENT_MON2 20 +#define VARIOUS_VOLUME_DOWN 21 +#define VARIOUS_VOLUME_UP 22 +#define VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT 23 +#define VARIOUS_PALACE_TRY_ESCAPE_STATUS 24 +#define VARIOUS_SET_TELEPORT_OUTCOME 25 +#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_TRY_HEAL_PULSE 42 +#define VARIOUS_TRY_QUASH 43 +#define VARIOUS_INVERT_STAT_STAGES 44 +#define VARIOUS_SET_TERRAIN 45 +#define VARIOUS_TRY_ME_FIRST 46 +#define VARIOUS_JUMP_IF_BATTLE_END 47 +#define VARIOUS_TRY_ELECTRIFY 48 +#define VARIOUS_TRY_REFLECT_TYPE 49 +#define VARIOUS_TRY_SOAK 50 +#define VARIOUS_HANDLE_MEGA_EVO 51 +#define VARIOUS_TRY_LAST_RESORT 52 +#define VARIOUS_ARGUMENT_STATUS_EFFECT 53 +#define VARIOUS_TRY_HIT_SWITCH_TARGET 54 +#define VARIOUS_TRY_AUTOTOMIZE 55 +#define VARIOUS_TRY_COPYCAT 56 +#define VARIOUS_ABILITY_POPUP 57 +#define VARIOUS_DEFOG 58 +#define VARIOUS_JUMP_IF_TARGET_ALLY 59 +#define VARIOUS_TRY_SYNCHRONOISE 60 +#define VARIOUS_PSYCHO_SHIFT 61 +#define VARIOUS_CURE_STATUS 62 +#define VARIOUS_POWER_TRICK 63 +#define VARIOUS_AFTER_YOU 64 +#define VARIOUS_BESTOW 65 +#define VARIOUS_ARGUMENT_TO_MOVE_EFFECT 66 +#define VARIOUS_JUMP_IF_NOT_GROUNDED 67 +#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 68 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 69 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 70 +#define VARIOUS_SET_AURORA_VEIL 71 +#define VARIOUS_TRY_THIRD_TYPE 72 +#define VARIOUS_ACUPRESSURE 73 +#define VARIOUS_SET_POWDER 74 +#define VARIOUS_SPECTRAL_THIEF 75 +#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 76 +#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 77 +#define VARIOUS_JUMP_IF_ROAR_FAILS 78 +#define VARIOUS_TRY_INSTRUCT 79 +#define VARIOUS_JUMP_IF_NOT_BERRY 80 +#define VARIOUS_TRACE_ABILITY 81 +#define VARIOUS_UPDATE_NICK 82 +#define VARIOUS_TRY_ILLUSION_OFF 83 +#define VARIOUS_SET_SPRITEIGNORE0HP 84 +#define VARIOUS_HANDLE_FORM_CHANGE 85 +#define VARIOUS_GET_STAT_VALUE 86 +#define VARIOUS_JUMP_IF_FULL_HP 87 +#define VARIOUS_LOSE_TYPE 88 +#define VARIOUS_TRY_ACTIVATE_SOULHEART 89 +#define VARIOUS_TRY_ACTIVATE_RECEIVER 90 +#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 91 +#define VARIOUS_TRY_FRISK 92 +#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 93 +#define VARIOUS_TRY_FAIRY_LOCK 94 +#define VARIOUS_JUMP_IF_NO_ALLY 95 +#define VARIOUS_POISON_TYPE_IMMUNITY 96 +#define VARIOUS_JUMP_IF_NO_HOLD_EFFECT 97 +#define VARIOUS_INFATUATE_WITH_BATTLER 98 +#define VARIOUS_SET_LAST_USED_ITEM 99 +#define VARIOUS_PARALYZE_TYPE_IMMUNITY 100 +#define VARIOUS_JUMP_IF_ABSENT 101 +#define VARIOUS_DESTROY_ABILITY_POPUP 102 +#define VARIOUS_TOTEM_BOOST 103 +#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 104 +#define VARIOUS_MOVEEND_ITEM_EFFECTS 105 +#define VARIOUS_TERRAIN_SEED 106 +#define VARIOUS_MAKE_INVISIBLE 107 +#define VARIOUS_ROOM_SERVICE 108 +#define VARIOUS_JUMP_IF_TERRAIN_AFFECTED 109 +#define VARIOUS_EERIE_SPELL_PP_REDUCE 110 +#define VARIOUS_JUMP_IF_TEAM_HEALTHY 111 +#define VARIOUS_TRY_HEAL_QUARTER_HP 112 +#define VARIOUS_REMOVE_TERRAIN 113 +#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 114 +#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 115 +#define VARIOUS_GET_ROTOTILLER_TARGETS 116 +#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 117 +#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 118 +#define VARIOUS_CONSUME_BERRY 119 +#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 120 +#define VARIOUS_HANDLE_PRIMAL_REVERSION 121 +#define VARIOUS_APPLY_PLASMA_FISTS 122 +#define VARIOUS_JUMP_IF_SPECIES 123 +#define VARIOUS_UPDATE_ABILITY_POPUP 124 +#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 125 +#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 126 +#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 127 +#define VARIOUS_TRY_TO_APPLY_MIMICRY 128 +#define VARIOUS_PHOTON_GEYSER_CHECK 129 +#define VARIOUS_SHELL_SIDE_ARM_CHECK 130 +#define VARIOUS_TRY_NO_RETREAT 131 +#define VARIOUS_TRY_TAR_SHOT 132 +#define VARIOUS_CAN_TAR_SHOT_WORK 133 +#define VARIOUS_CHECK_POLTERGEIST 134 +#define VARIOUS_SET_OCTOLOCK 135 +#define VARIOUS_CUT_1_3_HP_RAISE_STATS 136 +#define VARIOUS_TRY_END_NEUTRALIZING_GAS 137 +#define VARIOUS_JUMP_IF_UNDER_200 138 +#define VARIOUS_SET_SKY_DROP 139 +#define VARIOUS_CLEAR_SKY_DROP 140 +#define VARIOUS_SKY_DROP_YAWN 141 +#define VARIOUS_JUMP_IF_CANT_FLING 142 +#define VARIOUS_JUMP_IF_HOLD_EFFECT 143 +#define VARIOUS_CURE_CERTAIN_STATUSES 144 +#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 145 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 146 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 147 +#define VARIOUS_SAVE_BATTLER_ITEM 148 +#define VARIOUS_RESTORE_BATTLER_ITEM 149 +#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 150 +#define VARIOUS_SET_BEAK_BLAST 151 +#define VARIOUS_SWAP_SIDE_STATUSES 152 +#define VARIOUS_SET_Z_EFFECT 153 -// Cmd_manipulatedmg +// Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 #define DMG_RECOIL_FROM_MISS 1 #define DMG_DOUBLED 2 +#define DMG_1_8_TARGET_HP 3 +#define DMG_FULL_ATTACKER_HP 4 +#define DMG_CURR_ATTACKER_HP 5 +#define DMG_BIG_ROOT 6 +#define DMG_1_2_ATTACKER_HP 7 +#define DMG_RECOIL_FROM_IMMUNE 8 // Used to calculate recoil for the Gen 4 version of Jump Kick // Cmd_jumpifcantswitch #define SWITCH_IGNORE_ESCAPE_PREVENTION (1 << 7) // Cmd_statbuffchange -#define STAT_BUFF_ALLOW_PTR (1 << 0) // If set, allow use of jumpptr. Set in every use of statbuffchange -#define STAT_BUFF_NOT_PROTECT_AFFECTED (1 << 5) +#define STAT_CHANGE_ALLOW_PTR (1 << 0) // If set, allow use of jumpptr. Set in every use of statbuffchange +#define STAT_CHANGE_NOT_PROTECT_AFFECTED (1 << 5) +#define STAT_CHANGE_UPDATE_MOVE_EFFECT (1 << 6) // stat change flags for Cmd_playstatchangeanimation #define STAT_CHANGE_NEGATIVE (1 << 0) @@ -120,23 +281,42 @@ #define PARTY_SCREEN_OPTIONAL (1 << 7) // Flag for first argument to openpartyscreen // cases for Cmd_moveend -#define MOVEEND_RAGE 0 -#define MOVEEND_DEFROST 1 -#define MOVEEND_SYNCHRONIZE_TARGET 2 -#define MOVEEND_ON_DAMAGE_ABILITIES 3 -#define MOVEEND_IMMUNITY_ABILITIES 4 -#define MOVEEND_SYNCHRONIZE_ATTACKER 5 -#define MOVEEND_CHOICE_MOVE 6 -#define MOVEEND_CHANGED_ITEMS 7 -#define MOVEEND_ATTACKER_INVISIBLE 8 -#define MOVEEND_ATTACKER_VISIBLE 9 -#define MOVEEND_TARGET_VISIBLE 10 -#define MOVEEND_ITEM_EFFECTS_ALL 11 -#define MOVEEND_KINGSROCK_SHELLBELL 12 -#define MOVEEND_SUBSTITUTE 13 -#define MOVEEND_UPDATE_LAST_MOVES 14 -#define MOVEEND_MIRROR_MOVE 15 -#define MOVEEND_NEXT_TARGET 16 -#define MOVEEND_COUNT 17 +#define MOVEEND_PROTECT_LIKE_EFFECT 0 +#define MOVEEND_RAGE 1 +#define MOVEEND_DEFROST 2 +#define MOVEEND_SYNCHRONIZE_TARGET 3 +#define MOVEEND_ABILITIES 4 +#define MOVEEND_ABILITIES_ATTACKER 5 +#define MOVEEND_STATUS_IMMUNITY_ABILITIES 6 +#define MOVEEND_SYNCHRONIZE_ATTACKER 7 +#define MOVEEND_CHOICE_MOVE 8 +#define MOVEEND_CHANGED_ITEMS 9 +#define MOVEEND_ATTACKER_INVISIBLE 10 +#define MOVEEND_ATTACKER_VISIBLE 11 +#define MOVEEND_TARGET_VISIBLE 12 +#define MOVEEND_ITEM_EFFECTS_TARGET 13 +#define MOVEEND_MOVE_EFFECTS2 14 +#define MOVEEND_ITEM_EFFECTS_ALL 15 +#define MOVEEND_KINGSROCK 16 // These item effects will occur each strike of a multi-hit move +#define MOVEEND_SUBSTITUTE 17 +#define MOVEEND_SKY_DROP_CONFUSE 18 +#define MOVEEND_UPDATE_LAST_MOVES 19 +#define MOVEEND_MIRROR_MOVE 20 +#define MOVEEND_NEXT_TARGET 21 // Everything up until here is handled for each strike of a multi-hit move +#define MOVEEND_MAGICIAN 22 // Occurs after final multi-hit strike, and after other items/abilities would activate +#define MOVEEND_EJECT_BUTTON 23 +#define MOVEEND_RED_CARD 24 +#define MOVEEND_EJECT_PACK 25 +#define MOVEEND_LIFEORB_SHELLBELL 26 // Includes shell bell, throat spray, etc +#define MOVEEND_PICKPOCKET 27 +#define MOVEEND_DANCER 28 +#define MOVEEND_EMERGENCY_EXIT 29 +#define MOVEEND_CLEAR_BITS 30 +#define MOVEEND_COUNT 31 + +// switch cases +#define B_SWITCH_NORMAL 0 +#define B_SWITCH_HIT 1 // dragon tail, circle throw +#define B_SWITCH_RED_CARD 2 #endif // GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index c8d37aac61..4ef2a3a82d 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -1,388 +1,642 @@ #ifndef GUARD_CONSTANTS_BATTLE_STRING_IDS_H #define GUARD_CONSTANTS_BATTLE_STRING_IDS_H -#define BATTLESTRINGS_COUNT 369 - -#define BATTLESTRINGS_ID_ADDER 12 // all battlestrings have its ID + 12, because first 5 are reserved - #define STRINGID_INTROMSG 0 #define STRINGID_INTROSENDOUT 1 #define STRINGID_RETURNMON 2 #define STRINGID_SWITCHINMON 3 #define STRINGID_USEDMOVE 4 #define STRINGID_BATTLEEND 5 +#define STRINGID_TRAINERSLIDE 6 // todo: make some of those names less vague: attacker/target vs pkmn, etc. -#define STRINGID_TRAINER1LOSETEXT 12 -#define STRINGID_PKMNGAINEDEXP 13 -#define STRINGID_PKMNGREWTOLV 14 -#define STRINGID_PKMNLEARNEDMOVE 15 -#define STRINGID_TRYTOLEARNMOVE1 16 -#define STRINGID_TRYTOLEARNMOVE2 17 -#define STRINGID_TRYTOLEARNMOVE3 18 -#define STRINGID_PKMNFORGOTMOVE 19 -#define STRINGID_STOPLEARNINGMOVE 20 -#define STRINGID_DIDNOTLEARNMOVE 21 -#define STRINGID_PKMNLEARNEDMOVE2 22 -#define STRINGID_ATTACKMISSED 23 -#define STRINGID_PKMNPROTECTEDITSELF 24 -#define STRINGID_STATSWONTINCREASE2 25 -#define STRINGID_AVOIDEDDAMAGE 26 -#define STRINGID_ITDOESNTAFFECT 27 -#define STRINGID_ATTACKERFAINTED 28 -#define STRINGID_TARGETFAINTED 29 -#define STRINGID_PLAYERGOTMONEY 30 -#define STRINGID_PLAYERWHITEOUT 31 -#define STRINGID_PLAYERWHITEOUT2 32 -#define STRINGID_PREVENTSESCAPE 33 -#define STRINGID_HITXTIMES 34 -#define STRINGID_PKMNFELLASLEEP 35 -#define STRINGID_PKMNMADESLEEP 36 -#define STRINGID_PKMNALREADYASLEEP 37 -#define STRINGID_PKMNALREADYASLEEP2 38 -#define STRINGID_PKMNWASNTAFFECTED 39 -#define STRINGID_PKMNWASPOISONED 40 -#define STRINGID_PKMNPOISONEDBY 41 -#define STRINGID_PKMNHURTBYPOISON 42 -#define STRINGID_PKMNALREADYPOISONED 43 -#define STRINGID_PKMNBADLYPOISONED 44 -#define STRINGID_PKMNENERGYDRAINED 45 -#define STRINGID_PKMNWASBURNED 46 -#define STRINGID_PKMNBURNEDBY 47 -#define STRINGID_PKMNHURTBYBURN 48 -#define STRINGID_PKMNWASFROZEN 49 -#define STRINGID_PKMNFROZENBY 50 -#define STRINGID_PKMNISFROZEN 51 -#define STRINGID_PKMNWASDEFROSTED 52 -#define STRINGID_PKMNWASDEFROSTED2 53 -#define STRINGID_PKMNWASDEFROSTEDBY 54 -#define STRINGID_PKMNWASPARALYZED 55 -#define STRINGID_PKMNWASPARALYZEDBY 56 -#define STRINGID_PKMNISPARALYZED 57 -#define STRINGID_PKMNISALREADYPARALYZED 58 -#define STRINGID_PKMNHEALEDPARALYSIS 59 -#define STRINGID_PKMNDREAMEATEN 60 -#define STRINGID_STATSWONTINCREASE 61 -#define STRINGID_STATSWONTDECREASE 62 -#define STRINGID_TEAMSTOPPEDWORKING 63 -#define STRINGID_FOESTOPPEDWORKING 64 -#define STRINGID_PKMNISCONFUSED 65 -#define STRINGID_PKMNHEALEDCONFUSION 66 -#define STRINGID_PKMNWASCONFUSED 67 -#define STRINGID_PKMNALREADYCONFUSED 68 -#define STRINGID_PKMNFELLINLOVE 69 -#define STRINGID_PKMNINLOVE 70 -#define STRINGID_PKMNIMMOBILIZEDBYLOVE 71 -#define STRINGID_PKMNBLOWNAWAY 72 -#define STRINGID_PKMNCHANGEDTYPE 73 -#define STRINGID_PKMNFLINCHED 74 -#define STRINGID_PKMNREGAINEDHEALTH 75 -#define STRINGID_PKMNHPFULL 76 -#define STRINGID_PKMNRAISEDSPDEF 77 -#define STRINGID_PKMNRAISEDDEF 78 -#define STRINGID_PKMNCOVEREDBYVEIL 79 -#define STRINGID_PKMNUSEDSAFEGUARD 80 -#define STRINGID_PKMNSAFEGUARDEXPIRED 81 -#define STRINGID_PKMNWENTTOSLEEP 82 -#define STRINGID_PKMNSLEPTHEALTHY 83 -#define STRINGID_PKMNWHIPPEDWHIRLWIND 84 -#define STRINGID_PKMNTOOKSUNLIGHT 85 -#define STRINGID_PKMNLOWEREDHEAD 86 -#define STRINGID_PKMNISGLOWING 87 -#define STRINGID_PKMNFLEWHIGH 88 -#define STRINGID_PKMNDUGHOLE 89 -#define STRINGID_PKMNSQUEEZEDBYBIND 90 -#define STRINGID_PKMNTRAPPEDINVORTEX 91 -#define STRINGID_PKMNWRAPPEDBY 92 -#define STRINGID_PKMNCLAMPED 93 -#define STRINGID_PKMNHURTBY 94 -#define STRINGID_PKMNFREEDFROM 95 -#define STRINGID_PKMNCRASHED 96 -#define STRINGID_PKMNSHROUDEDINMIST 97 -#define STRINGID_PKMNPROTECTEDBYMIST 98 -#define STRINGID_PKMNGETTINGPUMPED 99 -#define STRINGID_PKMNHITWITHRECOIL 100 -#define STRINGID_PKMNPROTECTEDITSELF2 101 -#define STRINGID_PKMNBUFFETEDBYSANDSTORM 102 -#define STRINGID_PKMNPELTEDBYHAIL 103 -#define STRINGID_PKMNSEEDED 104 -#define STRINGID_PKMNEVADEDATTACK 105 -#define STRINGID_PKMNSAPPEDBYLEECHSEED 106 -#define STRINGID_PKMNFASTASLEEP 107 -#define STRINGID_PKMNWOKEUP 108 -#define STRINGID_PKMNUPROARKEPTAWAKE 109 -#define STRINGID_PKMNWOKEUPINUPROAR 110 -#define STRINGID_PKMNCAUSEDUPROAR 111 -#define STRINGID_PKMNMAKINGUPROAR 112 -#define STRINGID_PKMNCALMEDDOWN 113 -#define STRINGID_PKMNCANTSLEEPINUPROAR 114 -#define STRINGID_PKMNSTOCKPILED 115 -#define STRINGID_PKMNCANTSTOCKPILE 116 -#define STRINGID_PKMNCANTSLEEPINUPROAR2 117 -#define STRINGID_UPROARKEPTPKMNAWAKE 118 -#define STRINGID_PKMNSTAYEDAWAKEUSING 119 -#define STRINGID_PKMNSTORINGENERGY 120 -#define STRINGID_PKMNUNLEASHEDENERGY 121 -#define STRINGID_PKMNFATIGUECONFUSION 122 -#define STRINGID_PLAYERPICKEDUPMONEY 123 -#define STRINGID_PKMNUNAFFECTED 124 -#define STRINGID_PKMNTRANSFORMEDINTO 125 -#define STRINGID_PKMNMADESUBSTITUTE 126 -#define STRINGID_PKMNHASSUBSTITUTE 127 -#define STRINGID_SUBSTITUTEDAMAGED 128 -#define STRINGID_PKMNSUBSTITUTEFADED 129 -#define STRINGID_PKMNMUSTRECHARGE 130 -#define STRINGID_PKMNRAGEBUILDING 131 -#define STRINGID_PKMNMOVEWASDISABLED 132 -#define STRINGID_PKMNMOVEISDISABLED 133 -#define STRINGID_PKMNMOVEDISABLEDNOMORE 134 -#define STRINGID_PKMNGOTENCORE 135 -#define STRINGID_PKMNENCOREENDED 136 -#define STRINGID_PKMNTOOKAIM 137 -#define STRINGID_PKMNSKETCHEDMOVE 138 -#define STRINGID_PKMNTRYINGTOTAKEFOE 139 -#define STRINGID_PKMNTOOKFOE 140 -#define STRINGID_PKMNREDUCEDPP 141 -#define STRINGID_PKMNSTOLEITEM 142 -#define STRINGID_TARGETCANTESCAPENOW 143 -#define STRINGID_PKMNFELLINTONIGHTMARE 144 -#define STRINGID_PKMNLOCKEDINNIGHTMARE 145 -#define STRINGID_PKMNLAIDCURSE 146 -#define STRINGID_PKMNAFFLICTEDBYCURSE 147 -#define STRINGID_SPIKESSCATTERED 148 -#define STRINGID_PKMNHURTBYSPIKES 149 -#define STRINGID_PKMNIDENTIFIED 150 -#define STRINGID_PKMNPERISHCOUNTFELL 151 -#define STRINGID_PKMNBRACEDITSELF 152 -#define STRINGID_PKMNENDUREDHIT 153 -#define STRINGID_MAGNITUDESTRENGTH 154 -#define STRINGID_PKMNCUTHPMAXEDATTACK 155 -#define STRINGID_PKMNCOPIEDSTATCHANGES 156 -#define STRINGID_PKMNGOTFREE 157 -#define STRINGID_PKMNSHEDLEECHSEED 158 -#define STRINGID_PKMNBLEWAWAYSPIKES 159 -#define STRINGID_PKMNFLEDFROMBATTLE 160 -#define STRINGID_PKMNFORESAWATTACK 161 -#define STRINGID_PKMNTOOKATTACK 162 -#define STRINGID_PKMNATTACK 163 -#define STRINGID_PKMNCENTERATTENTION 164 -#define STRINGID_PKMNCHARGINGPOWER 165 -#define STRINGID_NATUREPOWERTURNEDINTO 166 -#define STRINGID_PKMNSTATUSNORMAL 167 -#define STRINGID_PKMNHASNOMOVESLEFT 168 -#define STRINGID_PKMNSUBJECTEDTOTORMENT 169 -#define STRINGID_PKMNCANTUSEMOVETORMENT 170 -#define STRINGID_PKMNTIGHTENINGFOCUS 171 -#define STRINGID_PKMNFELLFORTAUNT 172 -#define STRINGID_PKMNCANTUSEMOVETAUNT 173 -#define STRINGID_PKMNREADYTOHELP 174 -#define STRINGID_PKMNSWITCHEDITEMS 175 -#define STRINGID_PKMNCOPIEDFOE 176 -#define STRINGID_PKMNMADEWISH 177 -#define STRINGID_PKMNWISHCAMETRUE 178 -#define STRINGID_PKMNPLANTEDROOTS 179 -#define STRINGID_PKMNABSORBEDNUTRIENTS 180 -#define STRINGID_PKMNANCHOREDITSELF 181 -#define STRINGID_PKMNWASMADEDROWSY 182 -#define STRINGID_PKMNKNOCKEDOFF 183 -#define STRINGID_PKMNSWAPPEDABILITIES 184 -#define STRINGID_PKMNSEALEDOPPONENTMOVE 185 -#define STRINGID_PKMNCANTUSEMOVESEALED 186 -#define STRINGID_PKMNWANTSGRUDGE 187 -#define STRINGID_PKMNLOSTPPGRUDGE 188 -#define STRINGID_PKMNSHROUDEDITSELF 189 -#define STRINGID_PKMNMOVEBOUNCED 190 -#define STRINGID_PKMNWAITSFORTARGET 191 -#define STRINGID_PKMNSNATCHEDMOVE 192 -#define STRINGID_PKMNMADEITRAIN 193 -#define STRINGID_PKMNRAISEDSPEED 194 -#define STRINGID_PKMNPROTECTEDBY 195 -#define STRINGID_PKMNPREVENTSUSAGE 196 -#define STRINGID_PKMNRESTOREDHPUSING 197 -#define STRINGID_PKMNCHANGEDTYPEWITH 198 -#define STRINGID_PKMNPREVENTSPARALYSISWITH 199 -#define STRINGID_PKMNPREVENTSROMANCEWITH 200 -#define STRINGID_PKMNPREVENTSPOISONINGWITH 201 -#define STRINGID_PKMNPREVENTSCONFUSIONWITH 202 -#define STRINGID_PKMNRAISEDFIREPOWERWITH 203 -#define STRINGID_PKMNANCHORSITSELFWITH 204 -#define STRINGID_PKMNCUTSATTACKWITH 205 -#define STRINGID_PKMNPREVENTSSTATLOSSWITH 206 -#define STRINGID_PKMNHURTSWITH 207 -#define STRINGID_PKMNTRACED 208 -#define STRINGID_STATSHARPLY 209 -#define STRINGID_STATROSE 210 -#define STRINGID_STATHARSHLY 211 -#define STRINGID_STATFELL 212 -#define STRINGID_ATTACKERSSTATROSE 213 -#define STRINGID_DEFENDERSSTATROSE 214 -#define STRINGID_ATTACKERSSTATFELL 215 -#define STRINGID_DEFENDERSSTATFELL 216 -#define STRINGID_CRITICALHIT 217 -#define STRINGID_ONEHITKO 218 -#define STRINGID_123POOF 219 -#define STRINGID_ANDELLIPSIS 220 -#define STRINGID_NOTVERYEFFECTIVE 221 -#define STRINGID_SUPEREFFECTIVE 222 -#define STRINGID_GOTAWAYSAFELY 223 -#define STRINGID_WILDPKMNFLED 224 -#define STRINGID_NORUNNINGFROMTRAINERS 225 -#define STRINGID_CANTESCAPE 226 -#define STRINGID_DONTLEAVEBIRCH 227 -#define STRINGID_BUTNOTHINGHAPPENED 228 -#define STRINGID_BUTITFAILED 229 -#define STRINGID_ITHURTCONFUSION 230 -#define STRINGID_MIRRORMOVEFAILED 231 -#define STRINGID_STARTEDTORAIN 232 -#define STRINGID_DOWNPOURSTARTED 233 -#define STRINGID_RAINCONTINUES 234 -#define STRINGID_DOWNPOURCONTINUES 235 -#define STRINGID_RAINSTOPPED 236 -#define STRINGID_SANDSTORMBREWED 237 -#define STRINGID_SANDSTORMRAGES 238 -#define STRINGID_SANDSTORMSUBSIDED 239 -#define STRINGID_SUNLIGHTGOTBRIGHT 240 -#define STRINGID_SUNLIGHTSTRONG 241 -#define STRINGID_SUNLIGHTFADED 242 -#define STRINGID_STARTEDHAIL 243 -#define STRINGID_HAILCONTINUES 244 -#define STRINGID_HAILSTOPPED 245 -#define STRINGID_FAILEDTOSPITUP 246 -#define STRINGID_FAILEDTOSWALLOW 247 -#define STRINGID_WINDBECAMEHEATWAVE 248 -#define STRINGID_STATCHANGESGONE 249 -#define STRINGID_COINSSCATTERED 250 -#define STRINGID_TOOWEAKFORSUBSTITUTE 251 -#define STRINGID_SHAREDPAIN 252 -#define STRINGID_BELLCHIMED 253 -#define STRINGID_FAINTINTHREE 254 -#define STRINGID_NOPPLEFT 255 -#define STRINGID_BUTNOPPLEFT 256 -#define STRINGID_PLAYERUSEDITEM 257 -#define STRINGID_WALLYUSEDITEM 258 -#define STRINGID_TRAINERBLOCKEDBALL 259 -#define STRINGID_DONTBEATHIEF 260 -#define STRINGID_ITDODGEDBALL 261 -#define STRINGID_YOUMISSEDPKMN 262 -#define STRINGID_PKMNBROKEFREE 263 -#define STRINGID_ITAPPEAREDCAUGHT 264 -#define STRINGID_AARGHALMOSTHADIT 265 -#define STRINGID_SHOOTSOCLOSE 266 -#define STRINGID_GOTCHAPKMNCAUGHT 267 -#define STRINGID_GOTCHAPKMNCAUGHT2 268 -#define STRINGID_GIVENICKNAMECAPTURED 269 -#define STRINGID_PKMNSENTTOPC 270 -#define STRINGID_PKMNDATAADDEDTODEX 271 -#define STRINGID_ITISRAINING 272 -#define STRINGID_SANDSTORMISRAGING 273 -#define STRINGID_CANTESCAPE2 274 -#define STRINGID_PKMNIGNORESASLEEP 275 -#define STRINGID_PKMNIGNOREDORDERS 276 -#define STRINGID_PKMNBEGANTONAP 277 -#define STRINGID_PKMNLOAFING 278 -#define STRINGID_PKMNWONTOBEY 279 -#define STRINGID_PKMNTURNEDAWAY 280 -#define STRINGID_PKMNPRETENDNOTNOTICE 281 -#define STRINGID_ENEMYABOUTTOSWITCHPKMN 282 -#define STRINGID_CREPTCLOSER 283 -#define STRINGID_CANTGETCLOSER 284 -#define STRINGID_PKMNWATCHINGCAREFULLY 285 -#define STRINGID_PKMNCURIOUSABOUTX 286 -#define STRINGID_PKMNENTHRALLEDBYX 287 -#define STRINGID_PKMNIGNOREDX 288 -#define STRINGID_THREWPOKEBLOCKATPKMN 289 -#define STRINGID_OUTOFSAFARIBALLS 290 -#define STRINGID_PKMNSITEMCUREDPARALYSIS 291 -#define STRINGID_PKMNSITEMCUREDPOISON 292 -#define STRINGID_PKMNSITEMHEALEDBURN 293 -#define STRINGID_PKMNSITEMDEFROSTEDIT 294 -#define STRINGID_PKMNSITEMWOKEIT 295 -#define STRINGID_PKMNSITEMSNAPPEDOUT 296 -#define STRINGID_PKMNSITEMCUREDPROBLEM 297 -#define STRINGID_PKMNSITEMRESTOREDHEALTH 298 -#define STRINGID_PKMNSITEMRESTOREDPP 299 -#define STRINGID_PKMNSITEMRESTOREDSTATUS 300 -#define STRINGID_PKMNSITEMRESTOREDHPALITTLE 301 -#define STRINGID_ITEMALLOWSONLYYMOVE 302 -#define STRINGID_PKMNHUNGONWITHX 303 -#define STRINGID_EMPTYSTRING3 304 -#define STRINGID_PKMNSXPREVENTSBURNS 305 -#define STRINGID_PKMNSXBLOCKSY 306 -#define STRINGID_PKMNSXRESTOREDHPALITTLE2 307 -#define STRINGID_PKMNSXWHIPPEDUPSANDSTORM 308 -#define STRINGID_PKMNSXPREVENTSYLOSS 309 -#define STRINGID_PKMNSXINFATUATEDY 310 -#define STRINGID_PKMNSXMADEYINEFFECTIVE 311 -#define STRINGID_PKMNSXCUREDYPROBLEM 312 -#define STRINGID_ITSUCKEDLIQUIDOOZE 313 -#define STRINGID_PKMNTRANSFORMED 314 -#define STRINGID_ELECTRICITYWEAKENED 315 -#define STRINGID_FIREWEAKENED 316 -#define STRINGID_PKMNHIDUNDERWATER 317 -#define STRINGID_PKMNSPRANGUP 318 -#define STRINGID_HMMOVESCANTBEFORGOTTEN 319 -#define STRINGID_XFOUNDONEY 320 -#define STRINGID_PLAYERDEFEATEDTRAINER1 321 -#define STRINGID_SOOTHINGAROMA 322 -#define STRINGID_ITEMSCANTBEUSEDNOW 323 -#define STRINGID_FORXCOMMAYZ 324 -#define STRINGID_USINGITEMSTATOFPKMNROSE 325 -#define STRINGID_PKMNUSEDXTOGETPUMPED 326 -#define STRINGID_PKMNSXMADEYUSELESS 327 -#define STRINGID_PKMNTRAPPEDBYSANDTOMB 328 -#define STRINGID_EMPTYSTRING4 329 -#define STRINGID_ABOOSTED 330 -#define STRINGID_PKMNSXINTENSIFIEDSUN 331 -#define STRINGID_PKMNMAKESGROUNDMISS 332 -#define STRINGID_YOUTHROWABALLNOWRIGHT 333 -#define STRINGID_PKMNSXTOOKATTACK 334 -#define STRINGID_PKMNCHOSEXASDESTINY 335 -#define STRINGID_PKMNLOSTFOCUS 336 -#define STRINGID_USENEXTPKMN 337 -#define STRINGID_PKMNFLEDUSINGITS 338 -#define STRINGID_PKMNFLEDUSING 339 -#define STRINGID_PKMNWASDRAGGEDOUT 340 -#define STRINGID_PREVENTEDFROMWORKING 341 -#define STRINGID_PKMNSITEMNORMALIZEDSTATUS 342 -#define STRINGID_TRAINER1USEDITEM 343 -#define STRINGID_BOXISFULL 344 -#define STRINGID_PKMNAVOIDEDATTACK 345 -#define STRINGID_PKMNSXMADEITINEFFECTIVE 346 -#define STRINGID_PKMNSXPREVENTSFLINCHING 347 -#define STRINGID_PKMNALREADYHASBURN 348 -#define STRINGID_STATSWONTDECREASE2 349 -#define STRINGID_PKMNSXBLOCKSY2 350 -#define STRINGID_PKMNSXWOREOFF 351 -#define STRINGID_PKMNRAISEDDEFALITTLE 352 -#define STRINGID_PKMNRAISEDSPDEFALITTLE 353 -#define STRINGID_THEWALLSHATTERED 354 -#define STRINGID_PKMNSXPREVENTSYSZ 355 -#define STRINGID_PKMNSXCUREDITSYPROBLEM 356 -#define STRINGID_ATTACKERCANTESCAPE 357 -#define STRINGID_PKMNOBTAINEDX 358 -#define STRINGID_PKMNOBTAINEDX2 359 -#define STRINGID_PKMNOBTAINEDXYOBTAINEDZ 360 -#define STRINGID_BUTNOEFFECT 361 -#define STRINGID_PKMNSXHADNOEFFECTONY 362 -#define STRINGID_TWOENEMIESDEFEATED 363 -#define STRINGID_TRAINER2LOSETEXT 364 -#define STRINGID_PKMNINCAPABLEOFPOWER 365 -#define STRINGID_GLINTAPPEARSINEYE 366 -#define STRINGID_PKMNGETTINGINTOPOSITION 367 -#define STRINGID_PKMNBEGANGROWLINGDEEPLY 368 -#define STRINGID_PKMNEAGERFORMORE 369 -#define STRINGID_DEFEATEDOPPONENTBYREFEREE 370 -#define STRINGID_LOSTTOOPPONENTBYREFEREE 371 -#define STRINGID_TIEDOPPONENTBYREFEREE 372 -#define STRINGID_QUESTIONFORFEITMATCH 373 -#define STRINGID_FORFEITEDMATCH 374 -#define STRINGID_PKMNTRANSFERREDSOMEONESPC 375 -#define STRINGID_PKMNTRANSFERREDLANETTESPC 376 -#define STRINGID_PKMNBOXSOMEONESPCFULL 377 -#define STRINGID_PKMNBOXLANETTESPCFULL 378 -#define STRINGID_TRAINER1WINTEXT 379 -#define STRINGID_TRAINER2WINTEXT 380 +#define STRINGID_TRAINER1LOSETEXT 12 +#define STRINGID_PKMNGAINEDEXP 13 +#define STRINGID_PKMNGREWTOLV 14 +#define STRINGID_PKMNLEARNEDMOVE 15 +#define STRINGID_TRYTOLEARNMOVE1 16 +#define STRINGID_TRYTOLEARNMOVE2 17 +#define STRINGID_TRYTOLEARNMOVE3 18 +#define STRINGID_PKMNFORGOTMOVE 19 +#define STRINGID_STOPLEARNINGMOVE 20 +#define STRINGID_DIDNOTLEARNMOVE 21 +#define STRINGID_PKMNLEARNEDMOVE2 22 +#define STRINGID_ATTACKMISSED 23 +#define STRINGID_PKMNPROTECTEDITSELF 24 +#define STRINGID_STATSWONTINCREASE2 25 +#define STRINGID_AVOIDEDDAMAGE 26 +#define STRINGID_ITDOESNTAFFECT 27 +#define STRINGID_ATTACKERFAINTED 28 +#define STRINGID_TARGETFAINTED 29 +#define STRINGID_PLAYERGOTMONEY 30 +#define STRINGID_PLAYERWHITEOUT 31 +#define STRINGID_PLAYERWHITEOUT2 32 +#define STRINGID_PREVENTSESCAPE 33 +#define STRINGID_HITXTIMES 34 +#define STRINGID_PKMNFELLASLEEP 35 +#define STRINGID_PKMNMADESLEEP 36 +#define STRINGID_PKMNALREADYASLEEP 37 +#define STRINGID_PKMNALREADYASLEEP2 38 +#define STRINGID_PKMNWASNTAFFECTED 39 +#define STRINGID_PKMNWASPOISONED 40 +#define STRINGID_PKMNPOISONEDBY 41 +#define STRINGID_PKMNHURTBYPOISON 42 +#define STRINGID_PKMNALREADYPOISONED 43 +#define STRINGID_PKMNBADLYPOISONED 44 +#define STRINGID_PKMNENERGYDRAINED 45 +#define STRINGID_PKMNWASBURNED 46 +#define STRINGID_PKMNBURNEDBY 47 +#define STRINGID_PKMNHURTBYBURN 48 +#define STRINGID_PKMNWASFROZEN 49 +#define STRINGID_PKMNFROZENBY 50 +#define STRINGID_PKMNISFROZEN 51 +#define STRINGID_PKMNWASDEFROSTED 52 +#define STRINGID_PKMNWASDEFROSTED2 53 +#define STRINGID_PKMNWASDEFROSTEDBY 54 +#define STRINGID_PKMNWASPARALYZED 55 +#define STRINGID_PKMNWASPARALYZEDBY 56 +#define STRINGID_PKMNISPARALYZED 57 +#define STRINGID_PKMNISALREADYPARALYZED 58 +#define STRINGID_PKMNHEALEDPARALYSIS 59 +#define STRINGID_PKMNDREAMEATEN 60 +#define STRINGID_STATSWONTINCREASE 61 +#define STRINGID_STATSWONTDECREASE 62 +#define STRINGID_TEAMSTOPPEDWORKING 63 +#define STRINGID_FOESTOPPEDWORKING 64 +#define STRINGID_PKMNISCONFUSED 65 +#define STRINGID_PKMNHEALEDCONFUSION 66 +#define STRINGID_PKMNWASCONFUSED 67 +#define STRINGID_PKMNALREADYCONFUSED 68 +#define STRINGID_PKMNFELLINLOVE 69 +#define STRINGID_PKMNINLOVE 70 +#define STRINGID_PKMNIMMOBILIZEDBYLOVE 71 +#define STRINGID_PKMNBLOWNAWAY 72 +#define STRINGID_PKMNCHANGEDTYPE 73 +#define STRINGID_PKMNFLINCHED 74 +#define STRINGID_PKMNREGAINEDHEALTH 75 +#define STRINGID_PKMNHPFULL 76 +#define STRINGID_PKMNRAISEDSPDEF 77 +#define STRINGID_PKMNRAISEDDEF 78 +#define STRINGID_PKMNCOVEREDBYVEIL 79 +#define STRINGID_PKMNUSEDSAFEGUARD 80 +#define STRINGID_PKMNSAFEGUARDEXPIRED 81 +#define STRINGID_PKMNWENTTOSLEEP 82 +#define STRINGID_PKMNSLEPTHEALTHY 83 +#define STRINGID_PKMNWHIPPEDWHIRLWIND 84 +#define STRINGID_PKMNTOOKSUNLIGHT 85 +#define STRINGID_PKMNLOWEREDHEAD 86 +#define STRINGID_PKMNISGLOWING 87 +#define STRINGID_PKMNFLEWHIGH 88 +#define STRINGID_PKMNDUGHOLE 89 +#define STRINGID_PKMNSQUEEZEDBYBIND 90 +#define STRINGID_PKMNTRAPPEDINVORTEX 91 +#define STRINGID_PKMNWRAPPEDBY 92 +#define STRINGID_PKMNCLAMPED 93 +#define STRINGID_PKMNHURTBY 94 +#define STRINGID_PKMNFREEDFROM 95 +#define STRINGID_PKMNCRASHED 96 +#define STRINGID_PKMNSHROUDEDINMIST 97 +#define STRINGID_PKMNPROTECTEDBYMIST 98 +#define STRINGID_PKMNGETTINGPUMPED 99 +#define STRINGID_PKMNHITWITHRECOIL 100 +#define STRINGID_PKMNPROTECTEDITSELF2 101 +#define STRINGID_PKMNBUFFETEDBYSANDSTORM 102 +#define STRINGID_PKMNPELTEDBYHAIL 103 +#define STRINGID_PKMNSEEDED 104 +#define STRINGID_PKMNEVADEDATTACK 105 +#define STRINGID_PKMNSAPPEDBYLEECHSEED 106 +#define STRINGID_PKMNFASTASLEEP 107 +#define STRINGID_PKMNWOKEUP 108 +#define STRINGID_PKMNUPROARKEPTAWAKE 109 +#define STRINGID_PKMNWOKEUPINUPROAR 110 +#define STRINGID_PKMNCAUSEDUPROAR 111 +#define STRINGID_PKMNMAKINGUPROAR 112 +#define STRINGID_PKMNCALMEDDOWN 113 +#define STRINGID_PKMNCANTSLEEPINUPROAR 114 +#define STRINGID_PKMNSTOCKPILED 115 +#define STRINGID_PKMNCANTSTOCKPILE 116 +#define STRINGID_PKMNCANTSLEEPINUPROAR2 117 +#define STRINGID_UPROARKEPTPKMNAWAKE 118 +#define STRINGID_PKMNSTAYEDAWAKEUSING 119 +#define STRINGID_PKMNSTORINGENERGY 120 +#define STRINGID_PKMNUNLEASHEDENERGY 121 +#define STRINGID_PKMNFATIGUECONFUSION 122 +#define STRINGID_PLAYERPICKEDUPMONEY 123 +#define STRINGID_PKMNUNAFFECTED 124 +#define STRINGID_PKMNTRANSFORMEDINTO 125 +#define STRINGID_PKMNMADESUBSTITUTE 126 +#define STRINGID_PKMNHASSUBSTITUTE 127 +#define STRINGID_SUBSTITUTEDAMAGED 128 +#define STRINGID_PKMNSUBSTITUTEFADED 129 +#define STRINGID_PKMNMUSTRECHARGE 130 +#define STRINGID_PKMNRAGEBUILDING 131 +#define STRINGID_PKMNMOVEWASDISABLED 132 +#define STRINGID_PKMNMOVEISDISABLED 133 +#define STRINGID_PKMNMOVEDISABLEDNOMORE 134 +#define STRINGID_PKMNGOTENCORE 135 +#define STRINGID_PKMNENCOREENDED 136 +#define STRINGID_PKMNTOOKAIM 137 +#define STRINGID_PKMNSKETCHEDMOVE 138 +#define STRINGID_PKMNTRYINGTOTAKEFOE 139 +#define STRINGID_PKMNTOOKFOE 140 +#define STRINGID_PKMNREDUCEDPP 141 +#define STRINGID_PKMNSTOLEITEM 142 +#define STRINGID_TARGETCANTESCAPENOW 143 +#define STRINGID_PKMNFELLINTONIGHTMARE 144 +#define STRINGID_PKMNLOCKEDINNIGHTMARE 145 +#define STRINGID_PKMNLAIDCURSE 146 +#define STRINGID_PKMNAFFLICTEDBYCURSE 147 +#define STRINGID_SPIKESSCATTERED 148 +#define STRINGID_PKMNHURTBYSPIKES 149 +#define STRINGID_PKMNIDENTIFIED 150 +#define STRINGID_PKMNPERISHCOUNTFELL 151 +#define STRINGID_PKMNBRACEDITSELF 152 +#define STRINGID_PKMNENDUREDHIT 153 +#define STRINGID_MAGNITUDESTRENGTH 154 +#define STRINGID_PKMNCUTHPMAXEDATTACK 155 +#define STRINGID_PKMNCOPIEDSTATCHANGES 156 +#define STRINGID_PKMNGOTFREE 157 +#define STRINGID_PKMNSHEDLEECHSEED 158 +#define STRINGID_PKMNBLEWAWAYSPIKES 159 +#define STRINGID_PKMNFLEDFROMBATTLE 160 +#define STRINGID_PKMNFORESAWATTACK 161 +#define STRINGID_PKMNTOOKATTACK 162 +#define STRINGID_PKMNATTACK 163 +#define STRINGID_PKMNCENTERATTENTION 164 +#define STRINGID_PKMNCHARGINGPOWER 165 +#define STRINGID_NATUREPOWERTURNEDINTO 166 +#define STRINGID_PKMNSTATUSNORMAL 167 +#define STRINGID_PKMNHASNOMOVESLEFT 168 +#define STRINGID_PKMNSUBJECTEDTOTORMENT 169 +#define STRINGID_PKMNCANTUSEMOVETORMENT 170 +#define STRINGID_PKMNTIGHTENINGFOCUS 171 +#define STRINGID_PKMNFELLFORTAUNT 172 +#define STRINGID_PKMNCANTUSEMOVETAUNT 173 +#define STRINGID_PKMNREADYTOHELP 174 +#define STRINGID_PKMNSWITCHEDITEMS 175 +#define STRINGID_PKMNCOPIEDFOE 176 +#define STRINGID_PKMNMADEWISH 177 +#define STRINGID_PKMNWISHCAMETRUE 178 +#define STRINGID_PKMNPLANTEDROOTS 179 +#define STRINGID_PKMNABSORBEDNUTRIENTS 180 +#define STRINGID_PKMNANCHOREDITSELF 181 +#define STRINGID_PKMNWASMADEDROWSY 182 +#define STRINGID_PKMNKNOCKEDOFF 183 +#define STRINGID_PKMNSWAPPEDABILITIES 184 +#define STRINGID_PKMNSEALEDOPPONENTMOVE 185 +#define STRINGID_PKMNCANTUSEMOVESEALED 186 +#define STRINGID_PKMNWANTSGRUDGE 187 +#define STRINGID_PKMNLOSTPPGRUDGE 188 +#define STRINGID_PKMNSHROUDEDITSELF 189 +#define STRINGID_PKMNMOVEBOUNCED 190 +#define STRINGID_PKMNWAITSFORTARGET 191 +#define STRINGID_PKMNSNATCHEDMOVE 192 +#define STRINGID_PKMNMADEITRAIN 193 +#define STRINGID_PKMNRAISEDSPEED 194 +#define STRINGID_PKMNPROTECTEDBY 195 +#define STRINGID_PKMNPREVENTSUSAGE 196 +#define STRINGID_PKMNRESTOREDHPUSING 197 +#define STRINGID_PKMNCHANGEDTYPEWITH 198 +#define STRINGID_PKMNPREVENTSPARALYSISWITH 199 +#define STRINGID_PKMNPREVENTSROMANCEWITH 200 +#define STRINGID_PKMNPREVENTSPOISONINGWITH 201 +#define STRINGID_PKMNPREVENTSCONFUSIONWITH 202 +#define STRINGID_PKMNRAISEDFIREPOWERWITH 203 +#define STRINGID_PKMNANCHORSITSELFWITH 204 +#define STRINGID_PKMNCUTSATTACKWITH 205 +#define STRINGID_PKMNPREVENTSSTATLOSSWITH 206 +#define STRINGID_PKMNHURTSWITH 207 +#define STRINGID_PKMNTRACED 208 +#define STRINGID_STATSHARPLY 209 +#define STRINGID_STATROSE 210 +#define STRINGID_STATHARSHLY 211 +#define STRINGID_STATFELL 212 +#define STRINGID_ATTACKERSSTATROSE 213 +#define STRINGID_DEFENDERSSTATROSE 214 +#define STRINGID_ATTACKERSSTATFELL 215 +#define STRINGID_DEFENDERSSTATFELL 216 +#define STRINGID_CRITICALHIT 217 +#define STRINGID_ONEHITKO 218 +#define STRINGID_123POOF 219 +#define STRINGID_ANDELLIPSIS 220 +#define STRINGID_NOTVERYEFFECTIVE 221 +#define STRINGID_SUPEREFFECTIVE 222 +#define STRINGID_GOTAWAYSAFELY 223 +#define STRINGID_WILDPKMNFLED 224 +#define STRINGID_NORUNNINGFROMTRAINERS 225 +#define STRINGID_CANTESCAPE 226 +#define STRINGID_DONTLEAVEBIRCH 227 +#define STRINGID_BUTNOTHINGHAPPENED 228 +#define STRINGID_BUTITFAILED 229 +#define STRINGID_ITHURTCONFUSION 230 +#define STRINGID_MIRRORMOVEFAILED 231 +#define STRINGID_STARTEDTORAIN 232 +#define STRINGID_DOWNPOURSTARTED 233 +#define STRINGID_RAINCONTINUES 234 +#define STRINGID_DOWNPOURCONTINUES 235 +#define STRINGID_RAINSTOPPED 236 +#define STRINGID_SANDSTORMBREWED 237 +#define STRINGID_SANDSTORMRAGES 238 +#define STRINGID_SANDSTORMSUBSIDED 239 +#define STRINGID_SUNLIGHTGOTBRIGHT 240 +#define STRINGID_SUNLIGHTSTRONG 241 +#define STRINGID_SUNLIGHTFADED 242 +#define STRINGID_STARTEDHAIL 243 +#define STRINGID_HAILCONTINUES 244 +#define STRINGID_HAILSTOPPED 245 +#define STRINGID_FAILEDTOSPITUP 246 +#define STRINGID_FAILEDTOSWALLOW 247 +#define STRINGID_WINDBECAMEHEATWAVE 248 +#define STRINGID_STATCHANGESGONE 249 +#define STRINGID_COINSSCATTERED 250 +#define STRINGID_TOOWEAKFORSUBSTITUTE 251 +#define STRINGID_SHAREDPAIN 252 +#define STRINGID_BELLCHIMED 253 +#define STRINGID_FAINTINTHREE 254 +#define STRINGID_NOPPLEFT 255 +#define STRINGID_BUTNOPPLEFT 256 +#define STRINGID_PLAYERUSEDITEM 257 +#define STRINGID_WALLYUSEDITEM 258 +#define STRINGID_TRAINERBLOCKEDBALL 259 +#define STRINGID_DONTBEATHIEF 260 +#define STRINGID_ITDODGEDBALL 261 +#define STRINGID_YOUMISSEDPKMN 262 +#define STRINGID_PKMNBROKEFREE 263 +#define STRINGID_ITAPPEAREDCAUGHT 264 +#define STRINGID_AARGHALMOSTHADIT 265 +#define STRINGID_SHOOTSOCLOSE 266 +#define STRINGID_GOTCHAPKMNCAUGHT 267 +#define STRINGID_GOTCHAPKMNCAUGHT2 268 +#define STRINGID_GIVENICKNAMECAPTURED 269 +#define STRINGID_PKMNSENTTOPC 270 +#define STRINGID_PKMNDATAADDEDTODEX 271 +#define STRINGID_ITISRAINING 272 +#define STRINGID_SANDSTORMISRAGING 273 +#define STRINGID_CANTESCAPE2 274 +#define STRINGID_PKMNIGNORESASLEEP 275 +#define STRINGID_PKMNIGNOREDORDERS 276 +#define STRINGID_PKMNBEGANTONAP 277 +#define STRINGID_PKMNLOAFING 278 +#define STRINGID_PKMNWONTOBEY 279 +#define STRINGID_PKMNTURNEDAWAY 280 +#define STRINGID_PKMNPRETENDNOTNOTICE 281 +#define STRINGID_ENEMYABOUTTOSWITCHPKMN 282 +#define STRINGID_CREPTCLOSER 283 +#define STRINGID_CANTGETCLOSER 284 +#define STRINGID_PKMNWATCHINGCAREFULLY 285 +#define STRINGID_PKMNCURIOUSABOUTX 286 +#define STRINGID_PKMNENTHRALLEDBYX 287 +#define STRINGID_PKMNIGNOREDX 288 +#define STRINGID_THREWPOKEBLOCKATPKMN 289 +#define STRINGID_OUTOFSAFARIBALLS 290 +#define STRINGID_PKMNSITEMCUREDPARALYSIS 291 +#define STRINGID_PKMNSITEMCUREDPOISON 292 +#define STRINGID_PKMNSITEMHEALEDBURN 293 +#define STRINGID_PKMNSITEMDEFROSTEDIT 294 +#define STRINGID_PKMNSITEMWOKEIT 295 +#define STRINGID_PKMNSITEMSNAPPEDOUT 296 +#define STRINGID_PKMNSITEMCUREDPROBLEM 297 +#define STRINGID_PKMNSITEMRESTOREDHEALTH 298 +#define STRINGID_PKMNSITEMRESTOREDPP 299 +#define STRINGID_PKMNSITEMRESTOREDSTATUS 300 +#define STRINGID_PKMNSITEMRESTOREDHPALITTLE 301 +#define STRINGID_ITEMALLOWSONLYYMOVE 302 +#define STRINGID_PKMNHUNGONWITHX 303 +#define STRINGID_EMPTYSTRING3 304 +#define STRINGID_PKMNSXPREVENTSBURNS 305 +#define STRINGID_PKMNSXBLOCKSY 306 +#define STRINGID_PKMNSXRESTOREDHPALITTLE2 307 +#define STRINGID_PKMNSXWHIPPEDUPSANDSTORM 308 +#define STRINGID_PKMNSXPREVENTSYLOSS 309 +#define STRINGID_PKMNSXINFATUATEDY 310 +#define STRINGID_PKMNSXMADEYINEFFECTIVE 311 +#define STRINGID_PKMNSXCUREDYPROBLEM 312 +#define STRINGID_ITSUCKEDLIQUIDOOZE 313 +#define STRINGID_PKMNTRANSFORMED 314 +#define STRINGID_ELECTRICITYWEAKENED 315 +#define STRINGID_FIREWEAKENED 316 +#define STRINGID_PKMNHIDUNDERWATER 317 +#define STRINGID_PKMNSPRANGUP 318 +#define STRINGID_HMMOVESCANTBEFORGOTTEN 319 +#define STRINGID_XFOUNDONEY 320 +#define STRINGID_PLAYERDEFEATEDTRAINER1 321 +#define STRINGID_SOOTHINGAROMA 322 +#define STRINGID_ITEMSCANTBEUSEDNOW 323 +#define STRINGID_FORXCOMMAYZ 324 +#define STRINGID_USINGITEMSTATOFPKMNROSE 325 +#define STRINGID_PKMNUSEDXTOGETPUMPED 326 +#define STRINGID_PKMNSXMADEYUSELESS 327 +#define STRINGID_PKMNTRAPPEDBYSANDTOMB 328 +#define STRINGID_EMPTYSTRING4 329 +#define STRINGID_ABOOSTED 330 +#define STRINGID_PKMNSXINTENSIFIEDSUN 331 +#define STRINGID_PKMNMAKESGROUNDMISS 332 +#define STRINGID_YOUTHROWABALLNOWRIGHT 333 +#define STRINGID_PKMNSXTOOKATTACK 334 +#define STRINGID_PKMNCHOSEXASDESTINY 335 +#define STRINGID_PKMNLOSTFOCUS 336 +#define STRINGID_USENEXTPKMN 337 +#define STRINGID_PKMNFLEDUSINGITS 338 +#define STRINGID_PKMNFLEDUSING 339 +#define STRINGID_PKMNWASDRAGGEDOUT 340 +#define STRINGID_PREVENTEDFROMWORKING 341 +#define STRINGID_PKMNSITEMNORMALIZEDSTATUS 342 +#define STRINGID_TRAINER1USEDITEM 343 +#define STRINGID_BOXISFULL 344 +#define STRINGID_PKMNAVOIDEDATTACK 345 +#define STRINGID_PKMNSXMADEITINEFFECTIVE 346 +#define STRINGID_PKMNSXPREVENTSFLINCHING 347 +#define STRINGID_PKMNALREADYHASBURN 348 +#define STRINGID_STATSWONTDECREASE2 349 +#define STRINGID_PKMNSXBLOCKSY2 350 +#define STRINGID_PKMNSXWOREOFF 351 +#define STRINGID_PKMNRAISEDDEFALITTLE 352 +#define STRINGID_PKMNRAISEDSPDEFALITTLE 353 +#define STRINGID_THEWALLSHATTERED 354 +#define STRINGID_PKMNSXPREVENTSYSZ 355 +#define STRINGID_PKMNSXCUREDITSYPROBLEM 356 +#define STRINGID_ATTACKERCANTESCAPE 357 +#define STRINGID_PKMNOBTAINEDX 358 +#define STRINGID_PKMNOBTAINEDX2 359 +#define STRINGID_PKMNOBTAINEDXYOBTAINEDZ 360 +#define STRINGID_BUTNOEFFECT 361 +#define STRINGID_PKMNSXHADNOEFFECTONY 362 +#define STRINGID_TWOENEMIESDEFEATED 363 +#define STRINGID_TRAINER2LOSETEXT 364 +#define STRINGID_PKMNINCAPABLEOFPOWER 365 +#define STRINGID_GLINTAPPEARSINEYE 366 +#define STRINGID_PKMNGETTINGINTOPOSITION 367 +#define STRINGID_PKMNBEGANGROWLINGDEEPLY 368 +#define STRINGID_PKMNEAGERFORMORE 369 +#define STRINGID_DEFEATEDOPPONENTBYREFEREE 370 +#define STRINGID_LOSTTOOPPONENTBYREFEREE 371 +#define STRINGID_TIEDOPPONENTBYREFEREE 372 +#define STRINGID_QUESTIONFORFEITMATCH 373 +#define STRINGID_FORFEITEDMATCH 374 +#define STRINGID_PKMNTRANSFERREDSOMEONESPC 375 +#define STRINGID_PKMNTRANSFERREDLANETTESPC 376 +#define STRINGID_PKMNBOXSOMEONESPCFULL 377 +#define STRINGID_PKMNBOXLANETTESPCFULL 378 +#define STRINGID_TRAINER1WINTEXT 379 +#define STRINGID_TRAINER2WINTEXT 380 + +#define STRINGID_ENDUREDSTURDY 381 +#define STRINGID_POWERHERB 382 +#define STRINGID_HURTBYITEM 383 +#define STRINGID_PSNBYITEM 384 +#define STRINGID_BRNBYITEM 385 +#define STRINGID_DEFABILITYIN 386 +#define STRINGID_GRAVITYINTENSIFIED 387 +#define STRINGID_TARGETIDENTIFIED 388 +#define STRINGID_TARGETWOKEUP 389 +#define STRINGID_PKMNSTOLEANDATEITEM 390 +#define STRINGID_TAILWINDBLEW 391 +#define STRINGID_PKMNWENTBACK 392 +#define STRINGID_PKMNCANTUSEITEMSANYMORE 393 +#define STRINGID_PKMNFLUNG 394 +#define STRINGID_PKMNPREVENTEDFROMHEALING 395 +#define STRINGID_PKMNSWITCHEDATKANDDEF 396 +#define STRINGID_PKMNSABILITYSUPPRESSED 397 +#define STRINGID_SHIELDEDFROMCRITICALHITS 398 +#define STRINGID_SWITCHEDATKANDSPATK 399 +#define STRINGID_SWITCHEDDEFANDSPDEF 400 +#define STRINGID_PKMNACQUIREDABILITY 401 +#define STRINGID_POISONSPIKESSCATTERED 402 +#define STRINGID_PKMNSWITCHEDSTATCHANGES 403 +#define STRINGID_PKMNSURROUNDEDWITHVEILOFWATER 404 +#define STRINGID_PKMNLEVITATEDONELECTROMAGNETISM 405 +#define STRINGID_PKMNTWISTEDDIMENSIONS 406 +#define STRINGID_POINTEDSTONESFLOAT 407 +#define STRINGID_CLOAKEDINMYSTICALMOONLIGHT 408 +#define STRINGID_TRAPPEDBYSWIRLINGMAGMA 409 +#define STRINGID_VANISHEDINSTANTLY 410 +#define STRINGID_PROTECTEDTEAM 411 +#define STRINGID_SHAREDITSGUARD 412 +#define STRINGID_SHAREDITSPOWER 413 +#define STRINGID_SWAPSDEFANDSPDEFOFALLPOKEMON 414 +#define STRINGID_BECAMENIMBLE 415 +#define STRINGID_HURLEDINTOTHEAIR 416 +#define STRINGID_HELDITEMSLOSEEFFECTS 417 +#define STRINGID_FELLSTRAIGHTDOWN 418 +#define STRINGID_TARGETCHANGEDTYPE 419 +#define STRINGID_PKMNACQUIREDSIMPLE 420 +#define STRINGID_EMPTYSTRING5 421 +#define STRINGID_KINDOFFER 422 +#define STRINGID_RESETSTARGETSSTATLEVELS 423 +#define STRINGID_EMPTYSTRING6 424 +#define STRINGID_ALLYSWITCHPOSITION 425 +#define STRINGID_RESTORETARGETSHEALTH 426 +#define STRINGID_TOOKPJMNINTOTHESKY 427 +#define STRINGID_FREEDFROMSKYDROP 428 +#define STRINGID_POSTPONETARGETMOVE 429 +#define STRINGID_REFLECTTARGETSTYPE 430 +#define STRINGID_TRANSFERHELDITEM 431 +#define STRINGID_EMBARGOENDS 432 +#define STRINGID_ELECTROMAGNETISM 433 +#define STRINGID_BUFFERENDS 434 +#define STRINGID_TELEKINESISENDS 435 +#define STRINGID_TAILWINDENDS 436 +#define STRINGID_LUCKYCHANTENDS 437 +#define STRINGID_TRICKROOMENDS 438 +#define STRINGID_WONDERROOMENDS 439 +#define STRINGID_MAGICROOMENDS 440 +#define STRINGID_MUDSPORTENDS 441 +#define STRINGID_WATERSPORTENDS 442 +#define STRINGID_GRAVITYENDS 443 +#define STRINGID_AQUARINGHEAL 444 +#define STRINGID_AURORAVEILENDS 445 +#define STRINGID_ELECTRICTERRAINENDS 446 +#define STRINGID_MISTYTERRAINENDS 447 +#define STRINGID_PSYCHICTERRAINENDS 448 +#define STRINGID_GRASSYTERRAINENDS 449 +#define STRINGID_TARGETABILITYSTATRAISE 450 +#define STRINGID_TARGETSSTATWASMAXEDOUT 451 +#define STRINGID_ATTACKERABILITYSTATRAISE 452 +#define STRINGID_POISONHEALHPUP 453 +#define STRINGID_BADDREAMSDMG 454 +#define STRINGID_MOLDBREAKERENTERS 455 +#define STRINGID_TERAVOLTENTERS 456 +#define STRINGID_TURBOBLAZEENTERS 457 +#define STRINGID_SLOWSTARTENTERS 458 +#define STRINGID_SLOWSTARTEND 459 +#define STRINGID_SOLARPOWERHPDROP 460 +#define STRINGID_AFTERMATHDMG 461 +#define STRINGID_ANTICIPATIONACTIVATES 462 +#define STRINGID_FOREWARNACTIVATES 463 +#define STRINGID_ICEBODYHPGAIN 464 +#define STRINGID_SNOWWARNINGHAIL 465 +#define STRINGID_FRISKACTIVATES 466 +#define STRINGID_UNNERVEENTERS 467 +#define STRINGID_HARVESTBERRY 468 +#define STRINGID_LASTABILITYRAISEDSTAT 469 +#define STRINGID_MAGICBOUNCEACTIVATES 470 +#define STRINGID_PROTEANTYPECHANGE 471 +#define STRINGID_SYMBIOSISITEMPASS 472 +#define STRINGID_STEALTHROCKDMG 473 +#define STRINGID_TOXICSPIKESABSORBED 474 +#define STRINGID_TOXICSPIKESPOISONED 475 +#define STRINGID_STICKYWEBSWITCHIN 476 +#define STRINGID_HEALINGWISHCAMETRUE 477 +#define STRINGID_HEALINGWISHHEALED 478 +#define STRINGID_LUNARDANCECAMETRUE 479 +#define STRINGID_CUSEDBODYDISABLED 480 +#define STRINGID_ATTACKERACQUIREDABILITY 481 +#define STRINGID_TARGETABILITYSTATLOWER 482 +#define STRINGID_TARGETSTATWONTGOHIGHER 483 +#define STRINGID_PKMNMOVEBOUNCEDABILITY 484 +#define STRINGID_IMPOSTERTRANSFORM 485 +#define STRINGID_ASSAULTVESTDOESNTALLOW 486 +#define STRINGID_GRAVITYPREVENTSUSAGE 487 +#define STRINGID_HEALBLOCKPREVENTSUSAGE 488 +#define STRINGID_NOTDONEYET 489 +#define STRINGID_STICKYWEBUSED 490 +#define STRINGID_QUASHSUCCESS 491 +#define STRINGID_PKMNBLEWAWAYTOXICSPIKES 492 +#define STRINGID_PKMNBLEWAWAYSTICKYWEB 493 +#define STRINGID_PKMNBLEWAWAYSTEALTHROCK 494 +#define STRINGID_IONDELUGEON 495 +#define STRINGID_TOPSYTURVYSWITCHEDSTATS 496 +#define STRINGID_TERRAINBECOMESMISTY 497 +#define STRINGID_TERRAINBECOMESGRASSY 498 +#define STRINGID_TERRAINBECOMESELECTRIC 499 +#define STRINGID_TERRAINBECOMESPSYCHIC 500 +#define STRINGID_TARGETELECTRIFIED 501 +#define STRINGID_MEGAEVOREACTING 502 +#define STRINGID_MEGAEVOEVOLVED 503 +#define STRINGID_DRASTICALLY 504 +#define STRINGID_SEVERELY 505 +#define STRINGID_INFESTATION 506 +#define STRINGID_NOEFFECTONTARGET 507 +#define STRINGID_BURSTINGFLAMESHIT 508 +#define STRINGID_BESTOWITEMGIVING 509 +#define STRINGID_THIRDTYPEADDED 510 +#define STRINGID_FELLFORFEINT 511 +#define STRINGID_POKEMONCANNOTUSEMOVE 512 +#define STRINGID_COVEREDINPOWDER 513 +#define STRINGID_POWDEREXPLODES 514 +#define STRINGID_BELCHCANTSELECT 515 +#define STRINGID_SPECTRALTHIEFSTEAL 516 +#define STRINGID_GRAVITYGROUNDING 517 +#define STRINGID_MISTYTERRAINPREVENTS 518 +#define STRINGID_GRASSYTERRAINHEALS 519 +#define STRINGID_ELECTRICTERRAINPREVENTS 520 +#define STRINGID_PSYCHICTERRAINPREVENTS 521 +#define STRINGID_SAFETYGOGGLESPROTECTED 522 +#define STRINGID_FLOWERVEILPROTECTED 523 +#define STRINGID_SWEETVEILPROTECTED 524 +#define STRINGID_AROMAVEILPROTECTED 525 +#define STRINGID_CELEBRATEMESSAGE 526 +#define STRINGID_USEDINSTRUCTEDMOVE 527 +#define STRINGID_THROATCHOPENDS 528 +#define STRINGID_PKMNCANTUSEMOVETHROATCHOP 529 +#define STRINGID_LASERFOCUS 530 +#define STRINGID_GEMACTIVATES 531 +#define STRINGID_BERRYDMGREDUCES 532 +#define STRINGID_TARGETATEITEM 533 +#define STRINGID_AIRBALLOONFLOAT 534 +#define STRINGID_AIRBALLOONPOP 535 +#define STRINGID_INCINERATEBURN 536 +#define STRINGID_BUGBITE 537 +#define STRINGID_ILLUSIONWOREOFF 538 +#define STRINGID_ATTACKERCUREDTARGETSTATUS 539 +#define STRINGID_ATTACKERLOSTFIRETYPE 540 +#define STRINGID_HEALERCURE 541 +#define STRINGID_SCRIPTINGABILITYSTATRAISE 542 +#define STRINGID_RECEIVERABILITYTAKEOVER 543 +#define STRINGID_PKNMABSORBINGPOWER 544 +#define STRINGID_NOONEWILLBEABLETORUNAWAY 545 +#define STRINGID_DESTINYKNOTACTIVATES 546 +#define STRINGID_CLOAKEDINAFREEZINGLIGHT 547 +#define STRINGID_STATWASNOTLOWERED 548 +#define STRINGID_FERVENTWISHREACHED 549 +#define STRINGID_AIRLOCKACTIVATES 550 +#define STRINGID_PRESSUREENTERS 551 +#define STRINGID_DARKAURAENTERS 552 +#define STRINGID_FAIRYAURAENTERS 553 +#define STRINGID_AURABREAKENTERS 554 +#define STRINGID_COMATOSEENTERS 555 +#define STRINGID_SCREENCLEANERENTERS 556 +#define STRINGID_FETCHEDPOKEBALL 557 +#define STRINGID_BATTLERABILITYRAISEDSTAT 558 +#define STRINGID_ASANDSTORMKICKEDUP 559 +#define STRINGID_PKMNSWILLPERISHIN3TURNS 560 +#define STRINGID_ABILITYRAISEDSTATDRASTICALLY 561 +#define STRINGID_AURAFLAREDTOLIFE 562 +#define STRINGID_ASONEENTERS 563 +#define STRINGID_CURIOUSMEDICINEENTERS 564 +#define STRINGID_CANACTFASTERTHANKSTO 565 +#define STRINGID_MICLEBERRYACTIVATES 566 +#define STRINGID_PKMNSHOOKOFFTHETAUNT 567 +#define STRINGID_PKMNGOTOVERITSINFATUATION 568 +#define STRINGID_ITEMCANNOTBEREMOVED 569 +#define STRINGID_STICKYBARBTRANSFER 570 +#define STRINGID_PKMNBURNHEALED 571 +#define STRINGID_REDCARDACTIVATE 572 +#define STRINGID_EJECTBUTTONACTIVATE 573 +#define STRINGID_ATKGOTOVERINFATUATION 574 +#define STRINGID_TORMENTEDNOMORE 575 +#define STRINGID_HEALBLOCKEDNOMORE 576 +#define STRINGID_ATTACKERBECAMEFULLYCHARGED 577 +#define STRINGID_ATTACKERBECAMEASHSPECIES 578 +#define STRINGID_EXTREMELYHARSHSUNLIGHT 579 +#define STRINGID_EXTREMESUNLIGHTFADED 580 +#define STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT 581 +#define STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED 582 +#define STRINGID_HEAVYRAIN 583 +#define STRINGID_HEAVYRAINLIFTED 584 +#define STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN 585 +#define STRINGID_NORELIEFROMHEAVYRAIN 586 +#define STRINGID_MYSTERIOUSAIRCURRENT 587 +#define STRINGID_STRONGWINDSDISSIPATED 588 +#define STRINGID_MYSTERIOUSAIRCURRENTBLOWSON 589 +#define STRINGID_ATTACKWEAKENEDBSTRONGWINDS 590 +#define STRINGID_STUFFCHEEKSCANTSELECT 591 +#define STRINGID_PKMNREVERTEDTOPRIMAL 592 +#define STRINGID_BUTPOKEMONCANTUSETHEMOVE 593 +#define STRINGID_BUTHOOPACANTUSEIT 594 +#define STRINGID_BROKETHROUGHPROTECTION 595 +#define STRINGID_ABILITYALLOWSONLYMOVE 596 +#define STRINGID_SWAPPEDABILITIES 597 +#define STRINGID_PASTELVEILPROTECTED 598 +#define STRINGID_PASTELVEILENTERS 599 +#define STRINGID_BATTLERTYPECHANGEDTO 600 +#define STRINGID_BOTHCANNOLONGERESCAPE 601 +#define STRINGID_CANTESCAPEDUETOUSEDMOVE 602 +#define STRINGID_PKMNBECAMEWEAKERTOFIRE 603 +#define STRINGID_ABOUTTOUSEPOLTERGEIST 604 +#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 605 +#define STRINGID_NEUTRALIZINGGASENTERS 606 +#define STRINGID_NEUTRALIZINGGASOVER 607 +#define STRINGID_TARGETTOOHEAVY 608 +#define STRINGID_PKMNTOOKTARGETHIGH 609 +#define STRINGID_PKMNINSNAPTRAP 610 +#define STRINGID_METEORBEAMCHARGING 611 +#define STRINGID_HEATUPBEAK 612 +#define STRINGID_COURTCHANGE 613 +#define STRINGID_PLAYERLOSTTOENEMYTRAINER 614 +#define STRINGID_PLAYERPAIDPRIZEMONEY 615 +#define STRINGID_ZPOWERSURROUNDS 616 +#define STRINGID_ZMOVEUNLEASHED 617 +#define STRINGID_ZMOVERESETSSTATS 618 +#define STRINGID_ZMOVEALLSTATSUP 619 +#define STRINGID_ZMOVEZBOOSTCRIT 620 +#define STRINGID_ZMOVERESTOREHP 621 +#define STRINGID_ZMOVESTATUP 622 +#define STRINGID_ZMOVEHPTRAP 623 +#define STRINGID_TERRAINREMOVED 624 +#define STRINGID_ATTACKEREXPELLEDTHEPOISON 625 +#define STRINGID_ATTACKERSHOOKITSELFAWAKE 626 +#define STRINGID_ATTACKERBROKETHROUGHPARALYSIS 627 +#define STRINGID_ATTACKERHEALEDITSBURN 628 +#define STRINGID_ATTACKERMELTEDTHEICE 629 +#define STRINGID_TARGETTOUGHEDITOUT 630 +#define BATTLESTRINGS_COUNT 631 + +// This is the string id that gBattleStringsTable starts with. +// String ids before this (e.g. STRINGID_INTROMSG) are not in the table, +// and are instead handled explicitly by BufferStringBattle. +#define BATTLESTRINGS_TABLE_START STRINGID_TRAINER1LOSETEXT // The below IDs are all indexes into battle message tables, // used to determine which of a set of messages to print. @@ -422,14 +676,19 @@ #define B_MSG_LEECH_SEED_OOZE 4 // gFirstTurnOfTwoStringIds -#define B_MSG_TURN1_RAZOR_WIND 0 -#define B_MSG_TURN1_SOLAR_BEAM 1 -#define B_MSG_TURN1_SKULL_BASH 2 -#define B_MSG_TURN1_SKY_ATTACK 3 -#define B_MSG_TURN1_FLY 4 -#define B_MSG_TURN1_DIG 5 -#define B_MSG_TURN1_DIVE 6 -#define B_MSG_TURN1_BOUNCE 7 +#define B_MSG_TURN1_RAZOR_WIND 0 +#define B_MSG_TURN1_SOLAR_BEAM 1 +#define B_MSG_TURN1_SKULL_BASH 2 +#define B_MSG_TURN1_SKY_ATTACK 3 +#define B_MSG_TURN1_FLY 4 +#define B_MSG_TURN1_DIG 5 +#define B_MSG_TURN1_DIVE 6 +#define B_MSG_TURN1_BOUNCE 7 +#define B_MSG_TURN1_PHANTOM_FORCE 8 +#define B_MSG_TURN1_GEOMANCY 9 +#define B_MSG_TURN1_FREEZE_SHOCK 10 +#define B_MSG_TURN1_SKY_DROP 11 +#define B_MSG_TURN1_METEOR_BEAM 12 // gMoveWeatherChangeStringIds #define B_MSG_STARTED_RAIN 0 @@ -460,6 +719,7 @@ #define B_MSG_PROTECTED_ITSELF 0 #define B_MSG_BRACED_ITSELF 1 #define B_MSG_PROTECT_FAILED 2 +#define B_MSG_PROTECTED_TEAM 3 // gRestUsedStringIds #define B_MSG_REST 0 @@ -597,4 +857,57 @@ #define B_MSG_REF_DRAW 7 #define B_MSG_REF_COMMENCE_BATTLE 8 +// gSwitchInAbilityStringIds +#define B_MSG_SWITCHIN_MOLDBREAKER 0 +#define B_MSG_SWITCHIN_TERAVOLT 1 +#define B_MSG_SWITCHIN_TURBOBLAZE 2 +#define B_MSG_SWITCHIN_SLOWSTART 3 +#define B_MSG_SWITCHIN_UNNERVE 4 +#define B_MSG_SWITCHIN_ANTICIPATION 5 +#define B_MSG_SWITCHIN_FOREWARN 6 +#define B_MSG_SWITCHIN_PRESSURE 7 +#define B_MSG_SWITCHIN_DARKAURA 8 +#define B_MSG_SWITCHIN_FAIRYAURA 9 +#define B_MSG_SWITCHIN_AURABREAK 10 +#define B_MSG_SWITCHIN_COMATOSE 11 +#define B_MSG_SWITCHIN_SCREENCLEANER 12 +#define B_MSG_SWITCHIN_ASONE 13 +#define B_MSG_SWITCHIN_CURIOUS_MEDICINE 14 +#define B_MSG_SWITCHIN_PASTEL_VEIL 15 +#define B_MSG_SWITCHIN_NEUTRALIZING_GAS 16 + +// gMentalHerbCureStringIds +#define B_MSG_MENTALHERBCURE_INFATUATION 0 +#define B_MSG_MENTALHERBCURE_TAUNT 1 +#define B_MSG_MENTALHERBCURE_ENCORE 2 +#define B_MSG_MENTALHERBCURE_TORMENT 3 +#define B_MSG_MENTALHERBCURE_HEALBLOCK 4 +#define B_MSG_MENTALHERBCURE_DISABLE 5 + +// gTerrainPreventsStringIds +#define B_MSG_TERRAINPREVENTS_MISTY 0 +#define B_MSG_TERRAINPREVENTS_ELECTRIC 1 +#define B_MSG_TERRAINPREVENTS_PSYCHIC 2 + +// gWrappedStringIds +#define B_MSG_WRAPPED_BIND 0 +#define B_MSG_WRAPPED_WRAP 1 +#define B_MSG_WRAPPED_FIRE_SPIN 2 +#define B_MSG_WRAPPED_CLAMP 3 +#define B_MSG_WRAPPED_WHIRLPOOL 4 +#define B_MSG_WRAPPED_SAND_TOMB 5 +#define B_MSG_WRAPPED_MAGMA_STORM 6 +#define B_MSG_WRAPPED_INFESTATION 7 +#define B_MSG_WRAPPED_SNAP_TRAP 8 +#define NUM_TRAPPING_MOVES 9 + +// z effects +#define B_MSG_Z_RESET_STATS 0 +#define B_MSG_Z_ALL_STATS_UP 1 +#define B_MSG_Z_BOOST_CRITS 2 +#define B_MSG_Z_FOLLOW_ME 3 +#define B_MSG_Z_RECOVER_HP 4 +#define B_MSG_Z_STAT_UP 5 +#define B_MSG_Z_HP_TRAP 6 + #endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H diff --git a/include/constants/battle_tent.h b/include/constants/battle_tent.h index 666ada6bd9..6f9989b7ad 100644 --- a/include/constants/battle_tent.h +++ b/include/constants/battle_tent.h @@ -1,6 +1,12 @@ #ifndef GUARD_CONSTANTS_BATTLE_TENT_H #define GUARD_CONSTANTS_BATTLE_TENT_H +#define TENT_MIN_LEVEL 30 + +// The number of battles in each Battle Tent challenge. +// Battle Tent equivalent of FRONTIER_STAGES_PER_CHALLENGE. +#define TENT_STAGES_PER_CHALLENGE 3 + #define VERDANTURF_TENT_FUNC_INIT 0 #define VERDANTURF_TENT_FUNC_GET_PRIZE 1 #define VERDANTURF_TENT_FUNC_SET_PRIZE 2 diff --git a/include/constants/battle_tower.h b/include/constants/battle_tower.h index 002422d850..47858e807c 100644 --- a/include/constants/battle_tower.h +++ b/include/constants/battle_tower.h @@ -38,4 +38,10 @@ #define BATTLE_TOWER_LINKSTAT_MEMBER_RETIRE 2 #define BATTLE_TOWER_LINKSTAT_LEADER_RETIRE 3 +// Ids for special multi battle types +#define MULTI_BATTLE_2_VS_2 0 +#define MULTI_BATTLE_2_VS_WILD 1 +#define MULTI_BATTLE_2_VS_1 2 +#define MULTI_BATTLE_CHOOSE_MONS 0x80 + #endif //GUARD_CONSTANTS_BATTLE_TOWER_H diff --git a/include/constants/contest.h b/include/constants/contest.h index 775dcbe62b..f7b858c4a3 100644 --- a/include/constants/contest.h +++ b/include/constants/contest.h @@ -154,67 +154,93 @@ #define CONTEST_EFFECT_TYPE_SPECIAL_APPEAL 5 #define CONTEST_EFFECT_TYPE_TURN_ORDER 6 -#define COMBO_STARTER_RAIN_DANCE 1 -#define COMBO_STARTER_RAGE 2 -#define COMBO_STARTER_FOCUS_ENERGY 3 -#define COMBO_STARTER_HYPNOSIS 4 -#define COMBO_STARTER_ENDURE 5 -#define COMBO_STARTER_HORN_ATTACK 6 -#define COMBO_STARTER_SWORDS_DANCE 7 -#define COMBO_STARTER_STOCKPILE 8 -#define COMBO_STARTER_SUNNY_DAY 9 -#define COMBO_STARTER_REST 10 -#define COMBO_STARTER_VICE_GRIP 11 -#define COMBO_STARTER_DEFENSE_CURL 12 -#define COMBO_STARTER_CHARGE 13 -#define COMBO_STARTER_ROCK_THROW 14 -#define COMBO_STARTER_YAWN 15 -#define COMBO_STARTER_SCARY_FACE 16 -#define COMBO_STARTER_POWDER_SNOW 17 -#define COMBO_STARTER_LOCK_ON 18 -#define COMBO_STARTER_SOFT_BOILED 19 -#define COMBO_STARTER_MEAN_LOOK 20 -#define COMBO_STARTER_SCRATCH 21 -#define COMBO_STARTER_GROWTH 22 -#define COMBO_STARTER_HAIL 23 -#define COMBO_STARTER_SANDSTORM 24 -#define COMBO_STARTER_BELLY_DRUM 25 -#define COMBO_STARTER_MIND_READER 26 -#define COMBO_STARTER_DRAGON_BREATH 27 -#define COMBO_STARTER_DRAGON_RAGE 28 -#define COMBO_STARTER_DRAGON_DANCE 29 -#define COMBO_STARTER_SURF 30 -#define COMBO_STARTER_DIVE 31 -#define COMBO_STARTER_STRING_SHOT 32 -#define COMBO_STARTER_LEER 33 -#define COMBO_STARTER_TAUNT 34 -#define COMBO_STARTER_CHARM 35 -#define COMBO_STARTER_HARDEN 36 -#define COMBO_STARTER_SING 37 -#define COMBO_STARTER_EARTHQUAKE 38 -#define COMBO_STARTER_DOUBLE_TEAM 39 -#define COMBO_STARTER_CURSE 40 -#define COMBO_STARTER_SWEET_SCENT 41 -#define COMBO_STARTER_SLUDGE 42 -#define COMBO_STARTER_SLUDGE_BOMB 43 -#define COMBO_STARTER_THUNDER_PUNCH 44 -#define COMBO_STARTER_FIRE_PUNCH 45 -#define COMBO_STARTER_ICE_PUNCH 46 -#define COMBO_STARTER_PECK 47 -#define COMBO_STARTER_METAL_SOUND 48 -#define COMBO_STARTER_MUD_SPORT 49 -#define COMBO_STARTER_WATER_SPORT 50 -#define COMBO_STARTER_BONE_CLUB 51 -#define COMBO_STARTER_BONEMERANG 52 -#define COMBO_STARTER_BONE_RUSH 53 -#define COMBO_STARTER_SAND_ATTACK 54 -#define COMBO_STARTER_MUD_SLAP 55 -#define COMBO_STARTER_FAKE_OUT 56 -#define COMBO_STARTER_PSYCHIC 57 -#define COMBO_STARTER_KINESIS 58 -#define COMBO_STARTER_CONFUSION 59 -#define COMBO_STARTER_POUND 60 -#define COMBO_STARTER_SMOG 61 -#define COMBO_STARTER_CALM_MIND 62 +#define COMBO_STARTER_POUND 1 +#define COMBO_STARTER_FIRE_PUNCH 2 +#define COMBO_STARTER_ICE_PUNCH 3 +#define COMBO_STARTER_THUNDER_PUNCH 4 +#define COMBO_STARTER_SCRATCH 5 +#define COMBO_STARTER_VICE_GRIP 6 +#define COMBO_STARTER_SWORDS_DANCE 7 +#define COMBO_STARTER_SAND_ATTACK 8 +#define COMBO_STARTER_HORN_ATTACK 9 +#define COMBO_STARTER_LEER 10 +#define COMBO_STARTER_SING 11 +#define COMBO_STARTER_SURF 12 +#define COMBO_STARTER_PECK 13 +#define COMBO_STARTER_LEECH_SEED 14 +#define COMBO_STARTER_GROWTH 15 +#define COMBO_STARTER_STRING_SHOT 16 +#define COMBO_STARTER_DRAGON_RAGE 17 +#define COMBO_STARTER_ROCK_THROW 18 +#define COMBO_STARTER_EARTHQUAKE 19 +#define COMBO_STARTER_TOXIC 20 +#define COMBO_STARTER_CONFUSION 21 +#define COMBO_STARTER_PSYCHIC 22 +#define COMBO_STARTER_HYPNOSIS 23 +#define COMBO_STARTER_RAGE 24 +#define COMBO_STARTER_DOUBLE_TEAM 25 +#define COMBO_STARTER_HARDEN 26 +#define COMBO_STARTER_DEFENSE_CURL 27 +#define COMBO_STARTER_FOCUS_ENERGY 28 +#define COMBO_STARTER_SMOG 29 +#define COMBO_STARTER_SLUDGE 30 +#define COMBO_STARTER_BONE_CLUB 31 +#define COMBO_STARTER_KINESIS 32 +#define COMBO_STARTER_SOFT_BOILED 33 +#define COMBO_STARTER_BONEMERANG 34 +#define COMBO_STARTER_REST 35 +#define COMBO_STARTER_MIND_READER 36 +#define COMBO_STARTER_CURSE 37 +#define COMBO_STARTER_POWDER_SNOW 38 +#define COMBO_STARTER_SCARY_FACE 39 +#define COMBO_STARTER_BELLY_DRUM 40 +#define COMBO_STARTER_SLUDGE_BOMB 41 +#define COMBO_STARTER_MUD_SLAP 42 +#define COMBO_STARTER_BONE_RUSH 43 +#define COMBO_STARTER_LOCK_ON 44 +#define COMBO_STARTER_SANDSTORM 45 +#define COMBO_STARTER_ENDURE 46 +#define COMBO_STARTER_CHARM 47 +#define COMBO_STARTER_MEAN_LOOK 48 +#define COMBO_STARTER_HEAL_BELL 49 +#define COMBO_STARTER_DRAGON_BREATH 50 +#define COMBO_STARTER_SWEET_SCENT 51 +#define COMBO_STARTER_RAIN_DANCE 52 +#define COMBO_STARTER_SUNNY_DAY 53 +#define COMBO_STARTER_FAKE_OUT 54 +#define COMBO_STARTER_STOCKPILE 55 +#define COMBO_STARTER_HAIL 56 +#define COMBO_STARTER_CHARGE 57 +#define COMBO_STARTER_TAUNT 58 +#define COMBO_STARTER_REVENGE 59 +#define COMBO_STARTER_YAWN 60 +#define COMBO_STARTER_DIVE 61 +#define COMBO_STARTER_MUD_SPORT 62 +#define COMBO_STARTER_METAL_SOUND 63 +#define COMBO_STARTER_WATER_SPORT 64 +#define COMBO_STARTER_CALM_MIND 65 +#define COMBO_STARTER_DRAGON_DANCE 66 +#define COMBO_STARTER_PAYBACK 67 +#define COMBO_STARTER_LUCKY_CHANT 68 +#define COMBO_STARTER_WORRY_SEED 69 +#define COMBO_STARTER_DRAGON_RUSH 70 +#define COMBO_STARTER_BRAVE_BIRD 71 +#define COMBO_STARTER_THUNDER_FANG 72 +#define COMBO_STARTER_ICE_FANG 73 +#define COMBO_STARTER_FIRE_FANG 74 +#define COMBO_STARTER_ATTACK_ORDER 75 +#define COMBO_STARTER_DEFEND_ORDER 76 +#define COMBO_STARTER_HEAL_ORDER 77 +#define COMBO_STARTER_SCALD 78 +#define COMBO_STARTER_DRAGON_TAIL 79 +#define COMBO_STARTER_HYPERSPACE_HOLE 80 +#define COMBO_STARTER_THOUSAND_ARROWS 81 +#define COMBO_STARTER_THOUSAND_WAVES 82 +#define COMBO_STARTER_HYPERSPACE_FURY 83 +#define COMBO_STARTER_SHADOW_BONE 84 +#define COMBO_STARTER_ELECTRIC_TERRAIN 85 +#define COMBO_STARTER_MISTY_TERRAIN 86 +#define COMBO_STARTER_GRASSY_TERRAIN 87 +#define COMBO_STARTER_PSYCHIC_TERRAIN 88 #endif // GUARD_CONSTANTS_CONTEST_H diff --git a/include/constants/daycare.h b/include/constants/daycare.h index e412d2ab77..9af7e6f79c 100644 --- a/include/constants/daycare.h +++ b/include/constants/daycare.h @@ -21,7 +21,7 @@ #define DAYCARE_EXITED_LEVEL_MENU 2 // would be redundant with above if GF had used the same value // Array buffers -#define EGG_MOVES_ARRAY_COUNT 10 +#define EGG_MOVES_ARRAY_COUNT 19 #define EGG_LVL_UP_MOVES_ARRAY_COUNT (MAX_LEVEL_UP_MOVES > 50 ? MAX_LEVEL_UP_MOVES : 50) #endif //GUARD_DAYCARE_CONSTANTS_H diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index 13e91c4157..af5af53403 100755 --- a/include/constants/event_object_movement.h +++ b/include/constants/event_object_movement.h @@ -82,6 +82,7 @@ #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_ACTION_FACE_DOWN 0x0 #define MOVEMENT_ACTION_FACE_UP 0x1 @@ -120,18 +121,18 @@ #define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP 0x22 #define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT 0x23 #define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT 0x24 -#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN 0x25 -#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP 0x26 -#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT 0x27 -#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT 0x28 +#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_DOWN 0x25 +#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_UP 0x26 +#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_LEFT 0x27 +#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_RIGHT 0x28 #define MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN 0x29 #define MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP 0x2A #define MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT 0x2B #define MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT 0x2C -#define MOVEMENT_ACTION_WALK_FASTEST_DOWN 0x2D -#define MOVEMENT_ACTION_WALK_FASTEST_UP 0x2E -#define MOVEMENT_ACTION_WALK_FASTEST_LEFT 0x2F -#define MOVEMENT_ACTION_WALK_FASTEST_RIGHT 0x30 +#define MOVEMENT_ACTION_WALK_FASTER_DOWN 0x2D +#define MOVEMENT_ACTION_WALK_FASTER_UP 0x2E +#define MOVEMENT_ACTION_WALK_FASTER_LEFT 0x2F +#define MOVEMENT_ACTION_WALK_FASTER_RIGHT 0x30 #define MOVEMENT_ACTION_SLIDE_DOWN 0x31 #define MOVEMENT_ACTION_SLIDE_UP 0x32 #define MOVEMENT_ACTION_SLIDE_LEFT 0x33 @@ -231,8 +232,8 @@ #define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT 0x91 #define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT 0x92 #define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT 0x93 -#define MOVEMENT_ACTION_STORE_AND_LOCK_ANIM 0x94 -#define MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM 0x95 +#define MOVEMENT_ACTION_LOCK_ANIM 0x94 +#define MOVEMENT_ACTION_UNLOCK_ANIM 0x95 #define MOVEMENT_ACTION_WALK_LEFT_AFFINE 0x96 #define MOVEMENT_ACTION_WALK_RIGHT_AFFINE 0x97 #define MOVEMENT_ACTION_LEVITATE 0x98 @@ -245,4 +246,91 @@ #define MOVEMENT_ACTION_STEP_END 0xFE #define MOVEMENT_ACTION_NONE 0xFF +#define ANIM_STD_FACE_SOUTH 0 +#define ANIM_STD_FACE_NORTH 1 +#define ANIM_STD_FACE_WEST 2 +#define ANIM_STD_FACE_EAST 3 +#define ANIM_STD_GO_SOUTH 4 +#define ANIM_STD_GO_NORTH 5 +#define ANIM_STD_GO_WEST 6 +#define ANIM_STD_GO_EAST 7 +#define ANIM_STD_GO_FAST_SOUTH 8 +#define ANIM_STD_GO_FAST_NORTH 9 +#define ANIM_STD_GO_FAST_WEST 10 +#define ANIM_STD_GO_FAST_EAST 11 +#define ANIM_STD_GO_FASTER_SOUTH 12 +#define ANIM_STD_GO_FASTER_NORTH 13 +#define ANIM_STD_GO_FASTER_WEST 14 +#define ANIM_STD_GO_FASTER_EAST 15 +#define ANIM_STD_GO_FASTEST_SOUTH 16 +#define ANIM_STD_GO_FASTEST_NORTH 17 +#define ANIM_STD_GO_FASTEST_WEST 18 +#define ANIM_STD_GO_FASTEST_EAST 19 +#define ANIM_STD_COUNT 20 + +#define ANIM_RUN_SOUTH (ANIM_STD_COUNT + 0) +#define ANIM_RUN_NORTH (ANIM_STD_COUNT + 1) +#define ANIM_RUN_WEST (ANIM_STD_COUNT + 2) +#define ANIM_RUN_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) +#define ANIM_BUNNY_HOP_BACK_WHEEL_EAST (ANIM_STD_COUNT + 3) +#define ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH (ANIM_STD_COUNT + 4) +#define ANIM_BUNNY_HOP_FRONT_WHEEL_NORTH (ANIM_STD_COUNT + 5) +#define ANIM_BUNNY_HOP_FRONT_WHEEL_WEST (ANIM_STD_COUNT + 6) +#define ANIM_BUNNY_HOP_FRONT_WHEEL_EAST (ANIM_STD_COUNT + 7) +#define ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH (ANIM_STD_COUNT + 8) +#define ANIM_STANDING_WHEELIE_BACK_WHEEL_NORTH (ANIM_STD_COUNT + 9) +#define ANIM_STANDING_WHEELIE_BACK_WHEEL_WEST (ANIM_STD_COUNT + 10) +#define ANIM_STANDING_WHEELIE_BACK_WHEEL_EAST (ANIM_STD_COUNT + 11) +#define ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH (ANIM_STD_COUNT + 12) +#define ANIM_STANDING_WHEELIE_FRONT_WHEEL_NORTH (ANIM_STD_COUNT + 13) +#define ANIM_STANDING_WHEELIE_FRONT_WHEEL_WEST (ANIM_STD_COUNT + 14) +#define ANIM_STANDING_WHEELIE_FRONT_WHEEL_EAST (ANIM_STD_COUNT + 15) +#define ANIM_MOVING_WHEELIE_SOUTH (ANIM_STD_COUNT + 16) +#define ANIM_MOVING_WHEELIE_NORTH (ANIM_STD_COUNT + 17) +#define ANIM_MOVING_WHEELIE_WEST (ANIM_STD_COUNT + 18) +#define ANIM_MOVING_WHEELIE_EAST (ANIM_STD_COUNT + 19) + +#define ANIM_GET_ON_OFF_POKEMON_SOUTH (ANIM_STD_COUNT + 0) +#define ANIM_GET_ON_OFF_POKEMON_NORTH (ANIM_STD_COUNT + 1) +#define ANIM_GET_ON_OFF_POKEMON_WEST (ANIM_STD_COUNT + 2) +#define ANIM_GET_ON_OFF_POKEMON_EAST (ANIM_STD_COUNT + 3) + +#define ANIM_NURSE_BOW (ANIM_STD_COUNT + 0) + +#define ANIM_FIELD_MOVE 0 + +#define ANIM_STAY_STILL 0 +#define ANIM_REMOVE_OBSTACLE 1 + +#define ANIM_TAKE_OUT_ROD_SOUTH 0 +#define ANIM_TAKE_OUT_ROD_NORTH 1 +#define ANIM_TAKE_OUT_ROD_WEST 2 +#define ANIM_TAKE_OUT_ROD_EAST 3 +#define ANIM_PUT_AWAY_ROD_SOUTH 4 +#define ANIM_PUT_AWAY_ROD_NORTH 5 +#define ANIM_PUT_AWAY_ROD_WEST 6 +#define ANIM_PUT_AWAY_ROD_EAST 7 +#define ANIM_HOOKED_POKEMON_SOUTH 8 +#define ANIM_HOOKED_POKEMON_NORTH 9 +#define ANIM_HOOKED_POKEMON_WEST 10 +#define ANIM_HOOKED_POKEMON_EAST 11 + +// IDs for how NPCs that copy player movement should respond. +// Most go unused. +#define COPY_MOVE_NONE 0 +#define COPY_MOVE_FACE 1 +#define COPY_MOVE_WALK 2 +#define COPY_MOVE_WALK_FAST 3 +#define COPY_MOVE_WALK_FASTER 4 +#define COPY_MOVE_SLIDE 5 +#define COPY_MOVE_JUMP_IN_PLACE 6 +#define COPY_MOVE_JUMP 7 +#define COPY_MOVE_JUMP2 8 +#define COPY_MOVE_EMPTY_1 9 +#define COPY_MOVE_EMPTY_2 10 + #endif // GUARD_CONSTANTS_EVENT_OBJECT_MOVEMENT_H diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index 1958c792e1..8278c6a66b 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -241,6 +241,15 @@ #define OBJ_EVENT_GFX_LUGIA 237 #define OBJ_EVENT_GFX_HOOH 238 +// 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 @@ -311,5 +320,6 @@ #define LOCALID_MOSSDEEP_MART_CLERK 1 #define LOCALID_SOOTOPOLIS_MART_CLERK 1 #define LOCALID_BATTLE_FRONTIER_MART_CLERK 1 +#define LOCALID_SLATEPORT_ENERGY_GURU 25 #endif // GUARD_CONSTANTS_EVENT_OBJECTS_H diff --git a/include/constants/expansion_branches.h b/include/constants/expansion_branches.h deleted file mode 100644 index a2ee2d61fb..0000000000 --- a/include/constants/expansion_branches.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef GUARD_CONSTANTS_EXPANSION_BRANCHES_H -#define GUARD_CONSTANTS_EXPANSION_BRANCHES_H - -// Branch defines: Used by other branches to detect each other. -// Each define must be here for each of RHH's branch you have pulled. -// e.g. If you have both the battle_engine and pokemon_expansion branch, -// then both BATTLE_ENGINE and POKEMON_EXPANSION must be defined here. -#define POKEMON_EXPANSION - -#endif diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index dc1085f7ca..a620409479 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -1,7 +1,7 @@ #ifndef GUARD_FIELD_EFFECT_CONSTANTS_H #define GUARD_FIELD_EFFECT_CONSTANTS_H -#define FLDEFF_EXCLAMATION_MARK_ICON 0 +#define FLDEFF_EXCLAMATION_MARK_ICON 0 #define FLDEFF_USE_CUT_ON_GRASS 1 #define FLDEFF_USE_CUT_ON_TREE 2 #define FLDEFF_SHADOW 3 @@ -46,7 +46,7 @@ #define FLDEFF_HOT_SPRINGS_WATER 42 #define FLDEFF_USE_WATERFALL 43 #define FLDEFF_USE_DIVE 44 -#define FLDEFF_POKEBALL 45 +#define FLDEFF_POKEBALL_TRAIL 45 #define FLDEFF_HEART_ICON 46 #define FLDEFF_NOP_47 47 #define FLDEFF_NOP_48 48 @@ -113,7 +113,7 @@ #define FLDEFF_PAL_TAG_GENERAL_1 0x1005 #define FLDEFF_PAL_TAG_POKEBALL_GLOW 0x1007 #define FLDEFF_PAL_TAG_SECRET_POWER_PLANT 0x1008 -#define FLDEFF_PAL_TAG_POKEBALL 0x1009 +#define FLDEFF_PAL_TAG_POKEBALL_TRAIL 0x1009 #define FLDEFF_PAL_TAG_ASH 0x100D #define FLDEFF_PAL_TAG_SAND_PILLAR 0x100E #define FLDEFF_PAL_TAG_SMALL_SPARKLE 0x100F diff --git a/include/constants/flags.h b/include/constants/flags.h index 6702fa5eec..8fbc246300 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -190,7 +190,7 @@ #define FLAG_RECEIVED_TM40 0xAA #define FLAG_RECEIVED_TM04 0xAB #define FLAG_RECEIVED_TM03 0xAC -#define FLAG_DECORATION_0 0xAD +#define FLAG_HIDE_SECRET_BASE_TRAINER 0xAD #define FLAG_DECORATION_1 0xAE #define FLAG_DECORATION_2 0xAF #define FLAG_DECORATION_3 0xB0 @@ -337,24 +337,25 @@ #define FLAG_BEAT_MAGMA_GRUNT_JAGGED_PASS 0x139 #define FLAG_RECEIVED_AURORA_TICKET 0x13A #define FLAG_RECEIVED_MYSTIC_TICKET 0x13B -#define FLAG_RECEIVED_OLD_SEA_MAP 0x13C -#define FLAG_UNUSED_MYSTERY_GIFT_0x13D 0x13D -#define FLAG_UNUSED_MYSTERY_GIFT_0x13E 0x13E -#define FLAG_UNUSED_MYSTERY_GIFT_0x13F 0x13F -#define FLAG_UNUSED_MYSTERY_GIFT_0x140 0x140 -#define FLAG_UNUSED_MYSTERY_GIFT_0x141 0x141 -#define FLAG_UNUSED_MYSTERY_GIFT_0x142 0x142 -#define FLAG_UNUSED_MYSTERY_GIFT_0x143 0x143 -#define FLAG_UNUSED_MYSTERY_GIFT_0x144 0x144 -#define FLAG_UNUSED_MYSTERY_GIFT_0x145 0x145 -#define FLAG_UNUSED_MYSTERY_GIFT_0x146 0x146 -#define FLAG_UNUSED_MYSTERY_GIFT_0x147 0x147 -#define FLAG_UNUSED_MYSTERY_GIFT_0x148 0x148 -#define FLAG_UNUSED_MYSTERY_GIFT_0x149 0x149 -#define FLAG_UNUSED_MYSTERY_GIFT_0x14A 0x14A -#define FLAG_UNUSED_MYSTERY_GIFT_0x14B 0x14B -#define FLAG_UNUSED_MYSTERY_GIFT_0x14C 0x14C -#define FLAG_UNUSED_MYSTERY_GIFT_0x14D 0x14D +#define FLAG_RECEIVED_OLD_SEA_MAP 0x13C +#define FLAG_WONDER_CARD_UNUSED_1 0x13D // These Wonder Card flags are referenced but never set +#define FLAG_WONDER_CARD_UNUSED_2 0x13E +#define FLAG_WONDER_CARD_UNUSED_3 0x13F +#define FLAG_WONDER_CARD_UNUSED_4 0x140 +#define FLAG_WONDER_CARD_UNUSED_5 0x141 +#define FLAG_WONDER_CARD_UNUSED_6 0x142 +#define FLAG_WONDER_CARD_UNUSED_7 0x143 +#define FLAG_WONDER_CARD_UNUSED_8 0x144 +#define FLAG_WONDER_CARD_UNUSED_9 0x145 +#define FLAG_WONDER_CARD_UNUSED_10 0x146 +#define FLAG_WONDER_CARD_UNUSED_11 0x147 +#define FLAG_WONDER_CARD_UNUSED_12 0x148 +#define FLAG_WONDER_CARD_UNUSED_13 0x149 +#define FLAG_WONDER_CARD_UNUSED_14 0x14A +#define FLAG_WONDER_CARD_UNUSED_15 0x14B +#define FLAG_WONDER_CARD_UNUSED_16 0x14C +#define FLAG_WONDER_CARD_UNUSED_17 0x14D +#define NUM_WONDER_CARD_FLAGS (1 + FLAG_WONDER_CARD_UNUSED_17 - FLAG_RECEIVED_AURORA_TICKET) #define FLAG_MIRAGE_TOWER_VISIBLE 0x14E #define FLAG_CHOSE_ROOT_FOSSIL 0x14F @@ -518,22 +519,22 @@ #define FLAG_UNUSED_0x1E3 0x1E3 // Unused Flag // Mystery Gift Flags (Unknown) -#define FLAG_MYSTERY_EVENT_DONE 0x1E4 -#define FLAG_MYSTERY_EVENT_1 0x1E5 -#define FLAG_MYSTERY_EVENT_2 0x1E6 -#define FLAG_MYSTERY_EVENT_3 0x1E7 -#define FLAG_MYSTERY_EVENT_4 0x1E8 -#define FLAG_MYSTERY_EVENT_5 0x1E9 -#define FLAG_MYSTERY_EVENT_6 0x1EA -#define FLAG_MYSTERY_EVENT_7 0x1EB -#define FLAG_MYSTERY_EVENT_8 0x1EC -#define FLAG_MYSTERY_EVENT_9 0x1ED -#define FLAG_MYSTERY_EVENT_10 0x1EE -#define FLAG_MYSTERY_EVENT_11 0x1EF -#define FLAG_MYSTERY_EVENT_12 0x1F0 -#define FLAG_MYSTERY_EVENT_13 0x1F1 -#define FLAG_MYSTERY_EVENT_14 0x1F2 -#define FLAG_MYSTERY_EVENT_15 0x1F3 +#define FLAG_MYSTERY_GIFT_DONE 0x1E4 +#define FLAG_MYSTERY_GIFT_1 0x1E5 +#define FLAG_MYSTERY_GIFT_2 0x1E6 +#define FLAG_MYSTERY_GIFT_3 0x1E7 +#define FLAG_MYSTERY_GIFT_4 0x1E8 +#define FLAG_MYSTERY_GIFT_5 0x1E9 +#define FLAG_MYSTERY_GIFT_6 0x1EA +#define FLAG_MYSTERY_GIFT_7 0x1EB +#define FLAG_MYSTERY_GIFT_8 0x1EC +#define FLAG_MYSTERY_GIFT_9 0x1ED +#define FLAG_MYSTERY_GIFT_10 0x1EE +#define FLAG_MYSTERY_GIFT_11 0x1EF +#define FLAG_MYSTERY_GIFT_12 0x1F0 +#define FLAG_MYSTERY_GIFT_13 0x1F1 +#define FLAG_MYSTERY_GIFT_14 0x1F2 +#define FLAG_MYSTERY_GIFT_15 0x1F3 // Hidden Items #define FLAG_HIDDEN_ITEMS_START 0x1F4 @@ -1135,18 +1136,18 @@ #define FLAG_ITEM_VICTORY_ROAD_B2F_FULL_HEAL 0x440 #define FLAG_ITEM_MT_PYRE_6F_TM_30 0x441 #define FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM_26 0x442 -#define FLAG_ITEM_FIERY_PATH_TM06 0x443 -#define FLAG_ITEM_ROUTE_124_RED_SHARD 0x444 -#define FLAG_ITEM_ROUTE_124_BLUE_SHARD 0x445 -#define FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM_22 0x446 -#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL 0x447 -#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE 0x448 -#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL 0x449 -#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM_13 0x44A -#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE 0x44B -#define FLAG_ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY 0x44C -#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE 0x44D -#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM_18 0x44E +#define FLAG_ITEM_FIERY_PATH_TM06 0x443 +#define FLAG_ITEM_ROUTE_124_RED_SHARD 0x444 +#define FLAG_ITEM_ROUTE_124_BLUE_SHARD 0x445 +#define FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM_22 0x446 +#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL 0x447 +#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE 0x448 +#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL 0x449 +#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM_13 0x44A +#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE 0x44B +#define FLAG_ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY 0x44C +#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE 0x44D +#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM_18 0x44E #define FLAG_ITEM_ROUTE_121_CARBOS 0x44F #define FLAG_ITEM_ROUTE_123_ULTRA_BALL 0x450 #define FLAG_ITEM_ROUTE_126_GREEN_SHARD 0x451 @@ -1633,7 +1634,7 @@ #define FLAGS_COUNT (DAILY_FLAGS_END + 1) -// Special Flags (Stored in EWRAM (gSpecialFlags), not in the SaveBlock) +// Special Flags (Stored in EWRAM (sSpecialFlags), not in the SaveBlock) #define SPECIAL_FLAGS_START 0x4000 #define FLAG_HIDE_MAP_NAME_POPUP (SPECIAL_FLAGS_START + 0x0) #define FLAG_DONT_TRANSITION_MUSIC (SPECIAL_FLAGS_START + 0x1) diff --git a/include/constants/global.h b/include/constants/global.h index 9b0c46ce40..2a773dbb95 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -1,5 +1,8 @@ #ifndef GUARD_CONSTANTS_GLOBAL_H #define GUARD_CONSTANTS_GLOBAL_H + +#include "constants/battle_config.h" + // Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen. // In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen. // In Gen 4 only, migrated Pokemon with Diamond, Pearl, or Platinum's ID show as "----------". @@ -29,11 +32,20 @@ #define GAME_VERSION (VERSION_EMERALD) #define GAME_LANGUAGE (LANGUAGE_ENGLISH) +// party sizes +#define PARTY_SIZE 6 +#define MULTI_PARTY_SIZE (PARTY_SIZE / 2) +#define FRONTIER_PARTY_SIZE 3 +#define FRONTIER_DOUBLES_PARTY_SIZE 4 +#define FRONTIER_MULTI_PARTY_SIZE 2 +#define MAX_FRONTIER_PARTY_SIZE FRONTIER_DOUBLES_PARTY_SIZE +#define UNION_ROOM_PARTY_SIZE 2 + // capacities of various saveblock objects #define DAYCARE_MON_COUNT 2 #define POKEBLOCKS_COUNT 40 #define OBJECT_EVENTS_COUNT 16 -#define MAIL_COUNT 16 +#define MAIL_COUNT (10 + PARTY_SIZE) #define SECRET_BASES_COUNT 20 #define TV_SHOWS_COUNT 25 #define POKE_NEWS_COUNT 16 @@ -53,13 +65,23 @@ #define UNION_ROOM_KB_ROW_COUNT 10 #define GIFT_RIBBONS_COUNT 11 #define SAVED_TRENDS_COUNT 5 - #define PYRAMID_BAG_ITEMS_COUNT 10 -#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode. + +// Number of facilities for Ranking Hall. +// 7 facilities for single mode + tower double mode + tower multi mode. +// Excludes link modes. See RANKING_HALL_* in include/constants/battle_frontier.h +#define HALL_FACILITIES_COUNT 9 +// Received via record mixing, 1 for each player other than yourself +#define HALL_RECORDS_COUNT 3 + +// Battle Frontier level modes. +#define FRONTIER_LVL_50 0 +#define FRONTIER_LVL_OPEN 1 +#define FRONTIER_LVL_MODE_COUNT 2 +#define FRONTIER_LVL_TENT FRONTIER_LVL_MODE_COUNT // Special usage for indicating Battle Tent #define TRAINER_ID_LENGTH 4 #define MAX_MON_MOVES 4 -#define NUM_STATS 6 #define CONTESTANT_COUNT 4 #define CONTEST_CATEGORY_COOL 0 @@ -69,23 +91,32 @@ #define CONTEST_CATEGORY_TOUGH 4 #define CONTEST_CATEGORIES_COUNT 5 -// party sizes -#define PARTY_SIZE 6 -#define MULTI_PARTY_SIZE (PARTY_SIZE / 2) -#define FRONTIER_PARTY_SIZE 3 -#define FRONTIER_DOUBLES_PARTY_SIZE 4 -#define FRONTIER_MULTI_PARTY_SIZE 2 -#define MAX_FRONTIER_PARTY_SIZE FRONTIER_DOUBLES_PARTY_SIZE -#define UNION_ROOM_PARTY_SIZE 2 - // string lengths #define ITEM_NAME_LENGTH 14 #define POKEMON_NAME_LENGTH 10 #define PLAYER_NAME_LENGTH 7 #define MAIL_WORDS_COUNT 9 #define EASY_CHAT_BATTLE_WORDS_COUNT 6 +#if B_EXPANDED_MOVE_NAMES == TRUE +#define MOVE_NAME_LENGTH 16 +#else #define MOVE_NAME_LENGTH 12 +#endif #define NUM_QUESTIONNAIRE_WORDS 4 +#define QUIZ_QUESTION_LEN 9 +#define WONDER_CARD_TEXT_LENGTH 40 +#define WONDER_NEWS_TEXT_LENGTH 40 +#define WONDER_CARD_BODY_TEXT_LINES 4 +#define WONDER_NEWS_BODY_TEXT_LINES 10 +#define TYPE_NAME_LENGTH 6 +#if B_EXPANDED_ABILITY_NAMES == TRUE +#define ABILITY_NAME_LENGTH 16 +#else +#define ABILITY_NAME_LENGTH 12 +#endif +#define TRAINER_NAME_LENGTH 10 + +#define MAX_STAMP_CARD_STAMPS 7 #define MALE 0 #define FEMALE 1 @@ -94,6 +125,8 @@ #define BARD_SONG_LENGTH 6 #define NUM_STORYTELLER_TALES 4 #define NUM_TRADER_ITEMS 4 +#define GIDDY_MAX_TALES 10 +#define GIDDY_MAX_QUESTIONS 8 #define OPTIONS_BUTTON_MODE_NORMAL 0 #define OPTIONS_BUTTON_MODE_LR 1 @@ -119,4 +152,13 @@ #define DIR_NORTHWEST 7 #define DIR_NORTHEAST 8 +#define CONNECTION_INVALID -1 +#define CONNECTION_NONE 0 +#define CONNECTION_SOUTH 1 +#define CONNECTION_NORTH 2 +#define CONNECTION_WEST 3 +#define CONNECTION_EAST 4 +#define CONNECTION_DIVE 5 +#define CONNECTION_EMERGE 6 + #endif // GUARD_CONSTANTS_GLOBAL_H diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index 5853f17086..e0361795d7 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -29,7 +29,7 @@ #define HOLD_EFFECT_EXP_SHARE 25 #define HOLD_EFFECT_QUICK_CLAW 26 #define HOLD_EFFECT_FRIENDSHIP_UP 27 -#define HOLD_EFFECT_CURE_ATTRACT 28 +#define HOLD_EFFECT_MENTAL_HERB 28 #define HOLD_EFFECT_CHOICE_BAND 29 #define HOLD_EFFECT_FLINCH 30 #define HOLD_EFFECT_BUG_POWER 31 @@ -62,11 +62,102 @@ #define HOLD_EFFECT_FIRE_POWER 58 #define HOLD_EFFECT_DRAGON_POWER 59 #define HOLD_EFFECT_NORMAL_POWER 60 -#define HOLD_EFFECT_UP_GRADE 61 +#define HOLD_EFFECT_UPGRADE 61 #define HOLD_EFFECT_SHELL_BELL 62 #define HOLD_EFFECT_LUCKY_PUNCH 63 #define HOLD_EFFECT_METAL_POWDER 64 #define HOLD_EFFECT_THICK_CLUB 65 -#define HOLD_EFFECT_STICK 66 +#define HOLD_EFFECT_LEEK 66 + +// Gen4 hold effects. +#define HOLD_EFFECT_CHOICE_SCARF 67 +#define HOLD_EFFECT_CHOICE_SPECS 68 +#define HOLD_EFFECT_DAMP_ROCK 69 +#define HOLD_EFFECT_GRIP_CLAW 70 +#define HOLD_EFFECT_HEAT_ROCK 71 +#define HOLD_EFFECT_ICY_ROCK 72 +#define HOLD_EFFECT_LIGHT_CLAY 73 +#define HOLD_EFFECT_SMOOTH_ROCK 74 +#define HOLD_EFFECT_POWER_HERB 75 +#define HOLD_EFFECT_BIG_ROOT 76 +#define HOLD_EFFECT_EXPERT_BELT 77 +#define HOLD_EFFECT_LIFE_ORB 78 +#define HOLD_EFFECT_METRONOME 79 +#define HOLD_EFFECT_MUSCLE_BAND 80 +#define HOLD_EFFECT_WIDE_LENS 81 +#define HOLD_EFFECT_WISE_GLASSES 82 +#define HOLD_EFFECT_ZOOM_LENS 83 +#define HOLD_EFFECT_LAGGING_TAIL 84 +#define HOLD_EFFECT_FOCUS_SASH 85 +#define HOLD_EFFECT_FLAME_ORB 86 +#define HOLD_EFFECT_TOXIC_ORB 87 +#define HOLD_EFFECT_STICKY_BARB 88 +#define HOLD_EFFECT_IRON_BALL 89 +#define HOLD_EFFECT_BLACK_SLUDGE 90 +#define HOLD_EFFECT_DESTINY_KNOT 91 +#define HOLD_EFFECT_SHED_SHELL 92 +#define HOLD_EFFECT_QUICK_POWDER 93 +#define HOLD_EFFECT_ADAMANT_ORB 94 +#define HOLD_EFFECT_LUSTROUS_ORB 95 +#define HOLD_EFFECT_GRISEOUS_ORB 96 +#define HOLD_EFFECT_ENIGMA_BERRY 97 +#define HOLD_EFFECT_RESIST_BERRY 98 +#define HOLD_EFFECT_POWER_ITEM 99 +#define HOLD_EFFECT_RESTORE_PCT_HP 100 +#define HOLD_EFFECT_MICLE_BERRY 101 +#define HOLD_EFFECT_CUSTAP_BERRY 102 +#define HOLD_EFFECT_JABOCA_BERRY 103 +#define HOLD_EFFECT_ROWAP_BERRY 104 +#define HOLD_EFFECT_KEE_BERRY 105 +#define HOLD_EFFECT_MARANGA_BERRY 106 +#define HOLD_EFFECT_PLATE 107 + +// Gen5 hold effects +#define HOLD_EFFECT_FLOAT_STONE 117 +#define HOLD_EFFECT_EVIOLITE 118 +#define HOLD_EFFECT_ASSAULT_VEST 119 +#define HOLD_EFFECT_DRIVE 120 +#define HOLD_EFFECT_GEMS 121 +#define HOLD_EFFECT_ROCKY_HELMET 122 +#define HOLD_EFFECT_AIR_BALLOON 123 +#define HOLD_EFFECT_RED_CARD 124 +#define HOLD_EFFECT_RING_TARGET 125 +#define HOLD_EFFECT_BINDING_BAND 126 +#define HOLD_EFFECT_EJECT_BUTTON 127 +#define HOLD_EFFECT_ABSORB_BULB 128 +#define HOLD_EFFECT_CELL_BATTERY 129 + +// Gen6 hold effects +#define HOLD_EFFECT_FAIRY_POWER 139 +#define HOLD_EFFECT_MEGA_STONE 140 +#define HOLD_EFFECT_SAFETY_GOGGLES 141 +#define HOLD_EFFECT_LUMINOUS_MOSS 142 +#define HOLD_EFFECT_SNOWBALL 143 +#define HOLD_EFFECT_WEAKNESS_POLICY 144 +#define HOLD_EFFECT_PRIMAL_ORB 145 + +// Gen7 hold effects +#define HOLD_EFFECT_PROTECTIVE_PADS 154 +#define HOLD_EFFECT_TERRAIN_EXTENDER 155 +#define HOLD_EFFECT_SEEDS 156 +#define HOLD_EFFECT_ADRENALINE_ORB 157 +#define HOLD_EFFECT_MEMORY 158 +#define HOLD_EFFECT_Z_CRYSTAL 159 + +// Gen8 hold effects +#define HOLD_EFFECT_UTILITY_UMBRELLA 169 +#define HOLD_EFFECT_EJECT_PACK 170 +#define HOLD_EFFECT_ROOM_SERVICE 171 +#define HOLD_EFFECT_BLUNDER_POLICY 172 +#define HOLD_EFFECT_HEAVY_DUTY_BOOTS 173 +#define HOLD_EFFECT_THROAT_SPRAY 174 + +#define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS)) + +// Terrain seed params +#define HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN 0 +#define HOLD_EFFECT_PARAM_GRASSY_TERRAIN 1 +#define HOLD_EFFECT_PARAM_MISTY_TERRAIN 2 +#define HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN 3 #endif // GUARD_HOLD_EFFECTS_H diff --git a/include/constants/item_config.h b/include/constants/item_config.h new file mode 100644 index 0000000000..70b4440c84 --- /dev/null +++ b/include/constants/item_config.h @@ -0,0 +1,21 @@ +#ifndef GUARD_CONSTANTS_ITEM_CONFIG_H +#define GUARD_CONSTANTS_ITEM_CONFIG_H + +#ifndef GEN_3 +#define GEN_3 0 +#define GEN_4 1 +#define GEN_5 2 +#define GEN_6 3 +#define GEN_7 4 +#define GEN_8 5 +#endif + +// Item config +#define I_SHINY_CHARM_REROLLS 3 // Amount of re-rolls if the player has the Shiny Charm. Set to 0 to disable Shiny Charm's effects. +#define I_KEY_FOSSILS GEN_7 // In Gen4+, all Gen 3 fossils became regular items. +#define I_KEY_ESCAPE_ROPE GEN_7 // In Gen8, Escape Rope became a Key Item. Keep in mind, this will make it free to buy in marts. +#define I_HEALTH_RECOVERY GEN_7 // In Gen7+, certain healing items recover a different amount of HP than they used to. +#define I_SITRUS_BERRY_HEAL GEN_7 // In Gen4+, Sitrus Berry was changed from healing 30 HP to healing 25% of Max HP. +#define I_VITAMIN_EV_CAP GEN_8 // In Gen8, the Vitamins no longer have a cap of 100 EV per stat. + +#endif // GUARD_CONSTANTS_ITEM_CONFIG_H diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index 9a6bcd05ec..c3970b9c1b 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -2,18 +2,17 @@ #define GUARD_CONSTANTS_ITEM_EFFECTS_H // field 0 masks -#define ITEM0_X_ATTACK 0x0F #define ITEM0_DIRE_HIT 0x30 // Works the same way as the move Focus Energy. #define ITEM0_SACRED_ASH 0x40 #define ITEM0_INFATUATION 0x80 -// field 1 masks -#define ITEM1_X_SPEED 0x0F -#define ITEM1_X_DEFEND 0xF0 - -// field 2 masks -#define ITEM2_X_SPATK 0x0F -#define ITEM2_X_ACCURACY 0xF0 +// new field 1 masks +#define ITEM1_X_ATTACK 0x1 +#define ITEM1_X_DEFENSE 0x2 +#define ITEM1_X_SPEED 0x4 +#define ITEM1_X_SPATK 0x8 +#define ITEM1_X_SPDEF 0x10 +#define ITEM1_X_ACCURACY 0x20 // field 3 masks #define ITEM3_CONFUSION 0x1 @@ -23,7 +22,7 @@ #define ITEM3_POISON 0x10 #define ITEM3_SLEEP 0x20 #define ITEM3_LEVEL_UP 0x40 -#define ITEM3_GUARD_SPEC 0x80 // Works the same way as the move Mist. +#define ITEM3_GUARD_SPEC 0x80 // Works the same way as the move Mist. #define ITEM3_STATUS_ALL (ITEM3_CONFUSION | ITEM3_PARALYSIS | ITEM3_FREEZE | ITEM3_BURN | ITEM3_POISON | ITEM3_SLEEP) @@ -49,13 +48,16 @@ #define ITEM5_FRIENDSHIP_ALL (ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID | ITEM5_FRIENDSHIP_HIGH) -// fields 6 and onwards are item-specific arguments +#define ITEM10_IS_VITAMIN 0x1 + +// fields 6 and onwards (except field 10) are item-specific arguments #define ITEM_EFFECT_ARG_START 6 // Special HP recovery amounts for ITEM4_HEAL_HP -#define ITEM6_HEAL_HP_FULL ((u8) -1) -#define ITEM6_HEAL_HP_HALF ((u8) -2) -#define ITEM6_HEAL_HP_LVL_UP ((u8) -3) +#define ITEM6_HEAL_HP_FULL ((u8) -1) +#define ITEM6_HEAL_HP_HALF ((u8) -2) +#define ITEM6_HEAL_HP_LVL_UP ((u8) -3) +#define ITEM6_HEAL_HP_QUARTER ((u8) -4) // Special PP recovery amounts for ITEM4_HEAL_PP #define ITEM6_HEAL_PP_FULL 0x7F @@ -63,6 +65,7 @@ // Amount of EV modified by ITEM4_EV_HP, ITEM4_EV_ATK, ITEM5_EV_DEF, ITEM5_EV_SPEED, ITEM5_EV_SPDEF and ITEM5_EV_SPATK #define ITEM6_ADD_EV 10 #define ITEM6_SUBTRACT_EV -10 +#define ITEM6_ADD_ONE_EV 1 // Used for GetItemEffectType. #define ITEM_EFFECT_X_ITEM 0 diff --git a/include/constants/items.h b/include/constants/items.h index c596dd3b8d..1448bf5914 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -3,383 +3,792 @@ #define ITEM_NONE 0 -// Balls -#define ITEM_MASTER_BALL 1 -#define ITEM_ULTRA_BALL 2 -#define ITEM_GREAT_BALL 3 -#define ITEM_POKE_BALL 4 -#define ITEM_SAFARI_BALL 5 -#define ITEM_NET_BALL 6 -#define ITEM_DIVE_BALL 7 +// Poké Balls +#define ITEM_POKE_BALL 1 +#define ITEM_GREAT_BALL 2 +#define ITEM_ULTRA_BALL 3 +#define ITEM_MASTER_BALL 4 +#define ITEM_PREMIER_BALL 5 +#define ITEM_HEAL_BALL 6 +#define ITEM_NET_BALL 7 #define ITEM_NEST_BALL 8 -#define ITEM_REPEAT_BALL 9 -#define ITEM_TIMER_BALL 10 -#define ITEM_LUXURY_BALL 11 -#define ITEM_PREMIER_BALL 12 +#define ITEM_DIVE_BALL 9 +#define ITEM_DUSK_BALL 10 +#define ITEM_TIMER_BALL 11 +#define ITEM_QUICK_BALL 12 +#define ITEM_REPEAT_BALL 13 +#define ITEM_LUXURY_BALL 14 +#define ITEM_LEVEL_BALL 15 +#define ITEM_LURE_BALL 16 +#define ITEM_MOON_BALL 17 +#define ITEM_FRIEND_BALL 18 +#define ITEM_LOVE_BALL 19 +#define ITEM_FAST_BALL 20 +#define ITEM_HEAVY_BALL 21 +#define ITEM_DREAM_BALL 22 +#define ITEM_SAFARI_BALL 23 +#define ITEM_SPORT_BALL 24 +#define ITEM_PARK_BALL 25 +#define ITEM_BEAST_BALL 26 +#define ITEM_CHERISH_BALL 27 // Note: If moving ball IDs around, updating FIRST_BALL/LAST_BALL is not sufficient -// Several places expect the ball IDs to be first and contiguous (e.g. gBattlescriptsForBallThrow and MON_DATA_POKEBALL) +// Several places expect the ball IDs to be first and contiguous (e.g. MON_DATA_POKEBALL) // If adding new balls, it's easiest to insert them after the last ball and increment the below IDs (and removing ITEM_034 for example) -#define FIRST_BALL ITEM_MASTER_BALL -#define LAST_BALL ITEM_PREMIER_BALL +#define FIRST_BALL ITEM_POKE_BALL +#define LAST_BALL ITEM_CHERISH_BALL -// Pokemon Items -#define ITEM_POTION 13 -#define ITEM_ANTIDOTE 14 -#define ITEM_BURN_HEAL 15 -#define ITEM_ICE_HEAL 16 -#define ITEM_AWAKENING 17 -#define ITEM_PARALYZE_HEAL 18 -#define ITEM_FULL_RESTORE 19 -#define ITEM_MAX_POTION 20 -#define ITEM_HYPER_POTION 21 -#define ITEM_SUPER_POTION 22 -#define ITEM_FULL_HEAL 23 -#define ITEM_REVIVE 24 -#define ITEM_MAX_REVIVE 25 -#define ITEM_FRESH_WATER 26 -#define ITEM_SODA_POP 27 -#define ITEM_LEMONADE 28 -#define ITEM_MOOMOO_MILK 29 -#define ITEM_ENERGY_POWDER 30 -#define ITEM_ENERGY_ROOT 31 -#define ITEM_HEAL_POWDER 32 -#define ITEM_REVIVAL_HERB 33 -#define ITEM_ETHER 34 -#define ITEM_MAX_ETHER 35 -#define ITEM_ELIXIR 36 -#define ITEM_MAX_ELIXIR 37 -#define ITEM_LAVA_COOKIE 38 -#define ITEM_BLUE_FLUTE 39 -#define ITEM_YELLOW_FLUTE 40 -#define ITEM_RED_FLUTE 41 -#define ITEM_BLACK_FLUTE 42 -#define ITEM_WHITE_FLUTE 43 -#define ITEM_BERRY_JUICE 44 -#define ITEM_SACRED_ASH 45 -#define ITEM_SHOAL_SALT 46 -#define ITEM_SHOAL_SHELL 47 -#define ITEM_RED_SHARD 48 -#define ITEM_BLUE_SHARD 49 -#define ITEM_YELLOW_SHARD 50 -#define ITEM_GREEN_SHARD 51 -#define ITEM_034 52 -#define ITEM_035 53 -#define ITEM_036 54 -#define ITEM_037 55 -#define ITEM_038 56 -#define ITEM_039 57 -#define ITEM_03A 58 -#define ITEM_03B 59 -#define ITEM_03C 60 -#define ITEM_03D 61 -#define ITEM_03E 62 -#define ITEM_HP_UP 63 -#define ITEM_PROTEIN 64 -#define ITEM_IRON 65 -#define ITEM_CARBOS 66 -#define ITEM_CALCIUM 67 -#define ITEM_RARE_CANDY 68 -#define ITEM_PP_UP 69 -#define ITEM_ZINC 70 -#define ITEM_PP_MAX 71 -#define ITEM_048 72 -#define ITEM_GUARD_SPEC 73 -#define ITEM_DIRE_HIT 74 -#define ITEM_X_ATTACK 75 -#define ITEM_X_DEFEND 76 -#define ITEM_X_SPEED 77 -#define ITEM_X_ACCURACY 78 -#define ITEM_X_SPECIAL 79 -#define ITEM_POKE_DOLL 80 -#define ITEM_FLUFFY_TAIL 81 -#define ITEM_052 82 -#define ITEM_SUPER_REPEL 83 -#define ITEM_MAX_REPEL 84 -#define ITEM_ESCAPE_ROPE 85 -#define ITEM_REPEL 86 -#define ITEM_057 87 -#define ITEM_058 88 -#define ITEM_059 89 -#define ITEM_05A 90 -#define ITEM_05B 91 -#define ITEM_05C 92 -#define ITEM_SUN_STONE 93 -#define ITEM_MOON_STONE 94 -#define ITEM_FIRE_STONE 95 -#define ITEM_THUNDER_STONE 96 -#define ITEM_WATER_STONE 97 -#define ITEM_LEAF_STONE 98 -#define ITEM_063 99 -#define ITEM_064 100 -#define ITEM_065 101 -#define ITEM_066 102 +// Medicine +#define ITEM_POTION 28 +#define ITEM_SUPER_POTION 29 +#define ITEM_HYPER_POTION 30 +#define ITEM_MAX_POTION 31 +#define ITEM_FULL_RESTORE 32 +#define ITEM_REVIVE 33 +#define ITEM_MAX_REVIVE 34 +#define ITEM_FRESH_WATER 35 +#define ITEM_SODA_POP 36 +#define ITEM_LEMONADE 37 +#define ITEM_MOOMOO_MILK 38 +#define ITEM_ENERGY_POWDER 39 +#define ITEM_ENERGY_ROOT 40 +#define ITEM_HEAL_POWDER 41 +#define ITEM_REVIVAL_HERB 42 +#define ITEM_ANTIDOTE 43 +#define ITEM_PARALYZE_HEAL 44 +#define ITEM_BURN_HEAL 45 +#define ITEM_ICE_HEAL 46 +#define ITEM_AWAKENING 47 +#define ITEM_FULL_HEAL 48 +#define ITEM_ETHER 49 +#define ITEM_MAX_ETHER 50 +#define ITEM_ELIXIR 51 +#define ITEM_MAX_ELIXIR 52 +#define ITEM_BERRY_JUICE 53 +#define ITEM_SACRED_ASH 54 +#define ITEM_SWEET_HEART 55 +#define ITEM_MAX_HONEY 56 -// Unusable -#define ITEM_TINY_MUSHROOM 103 -#define ITEM_BIG_MUSHROOM 104 -#define ITEM_069 105 -#define ITEM_PEARL 106 -#define ITEM_BIG_PEARL 107 -#define ITEM_STARDUST 108 -#define ITEM_STAR_PIECE 109 -#define ITEM_NUGGET 110 -#define ITEM_HEART_SCALE 111 -#define ITEM_070 112 -#define ITEM_071 113 -#define ITEM_072 114 -#define ITEM_073 115 -#define ITEM_074 116 -#define ITEM_075 117 -#define ITEM_076 118 -#define ITEM_077 119 -#define ITEM_078 120 +// Regional Specialties +#define ITEM_PEWTER_CRUNCHIES 57 +#define ITEM_RAGE_CANDY_BAR 58 +#define ITEM_LAVA_COOKIE 59 +#define ITEM_OLD_GATEAU 60 +#define ITEM_CASTELIACONE 61 +#define ITEM_LUMIOSE_GALETTE 62 +#define ITEM_SHALOUR_SABLE 63 +#define ITEM_BIG_MALASADA 64 -// Mails -#define ITEM_ORANGE_MAIL 121 -#define ITEM_HARBOR_MAIL 122 -#define ITEM_GLITTER_MAIL 123 -#define ITEM_MECH_MAIL 124 -#define ITEM_WOOD_MAIL 125 -#define ITEM_WAVE_MAIL 126 -#define ITEM_BEAD_MAIL 127 -#define ITEM_SHADOW_MAIL 128 -#define ITEM_TROPIC_MAIL 129 -#define ITEM_DREAM_MAIL 130 -#define ITEM_FAB_MAIL 131 -#define ITEM_RETRO_MAIL 132 +// Vitamins +#define ITEM_HP_UP 65 +#define ITEM_PROTEIN 66 +#define ITEM_IRON 67 +#define ITEM_CALCIUM 68 +#define ITEM_ZINC 69 +#define ITEM_CARBOS 70 +#define ITEM_PP_UP 71 +#define ITEM_PP_MAX 72 + +// EV Feathers +#define ITEM_HEALTH_FEATHER 73 +#define ITEM_MUSCLE_FEATHER 74 +#define ITEM_RESIST_FEATHER 75 +#define ITEM_GENIUS_FEATHER 76 +#define ITEM_CLEVER_FEATHER 77 +#define ITEM_SWIFT_FEATHER 78 + +// Ability Modifiers +#define ITEM_ABILITY_CAPSULE 79 +#define ITEM_ABILITY_PATCH 80 + +// Mints +#define ITEM_LONELY_MINT 81 +#define ITEM_ADAMANT_MINT 82 +#define ITEM_NAUGHTY_MINT 83 +#define ITEM_BRAVE_MINT 84 +#define ITEM_BOLD_MINT 85 +#define ITEM_IMPISH_MINT 86 +#define ITEM_LAX_MINT 87 +#define ITEM_RELAXED_MINT 88 +#define ITEM_MODEST_MINT 89 +#define ITEM_MILD_MINT 90 +#define ITEM_RASH_MINT 91 +#define ITEM_QUIET_MINT 92 +#define ITEM_CALM_MINT 93 +#define ITEM_GENTLE_MINT 94 +#define ITEM_CAREFUL_MINT 95 +#define ITEM_SASSY_MINT 96 +#define ITEM_TIMID_MINT 97 +#define ITEM_HASTY_MINT 98 +#define ITEM_JOLLY_MINT 99 +#define ITEM_NAIVE_MINT 100 +#define ITEM_SERIOUS_MINT 101 + +// Candy +#define ITEM_RARE_CANDY 102 +#define ITEM_EXP_CANDY_XS 103 +#define ITEM_EXP_CANDY_S 104 +#define ITEM_EXP_CANDY_M 105 +#define ITEM_EXP_CANDY_L 106 +#define ITEM_EXP_CANDY_XL 107 +#define ITEM_DYNAMAX_CANDY 108 + +// Medicinal Flutes +#define ITEM_BLUE_FLUTE 109 +#define ITEM_YELLOW_FLUTE 110 +#define ITEM_RED_FLUTE 111 + +// Encounter-modifying Flutes +#define ITEM_BLACK_FLUTE 112 +#define ITEM_WHITE_FLUTE 113 + +// Encounter Modifiers +#define ITEM_REPEL 114 +#define ITEM_SUPER_REPEL 115 +#define ITEM_MAX_REPEL 116 +#define ITEM_LURE 117 +#define ITEM_SUPER_LURE 118 +#define ITEM_MAX_LURE 119 + +#define ITEM_ESCAPE_ROPE 120 + +// X Items +#define ITEM_X_ATTACK 121 +#define ITEM_X_DEFENSE 122 +#define ITEM_X_SP_ATK 123 +#define ITEM_X_SP_DEF 124 +#define ITEM_X_SPEED 125 +#define ITEM_X_ACCURACY 126 + +#define ITEM_DIRE_HIT 127 +#define ITEM_GUARD_SPEC 128 + +// Escape Items +#define ITEM_POKE_DOLL 129 +#define ITEM_FLUFFY_TAIL 130 +#define ITEM_POKE_TOY 131 + +#define ITEM_MAX_MUSHROOMS 132 + +// Treasures +#define ITEM_BOTTLE_CAP 133 +#define ITEM_GOLD_BOTTLE_CAP 134 +#define ITEM_NUGGET 135 +#define ITEM_BIG_NUGGET 136 +#define ITEM_TINY_MUSHROOM 137 +#define ITEM_BIG_MUSHROOM 138 +#define ITEM_BALM_MUSHROOM 139 +#define ITEM_PEARL 140 +#define ITEM_BIG_PEARL 141 +#define ITEM_PEARL_STRING 142 +#define ITEM_STARDUST 143 +#define ITEM_STAR_PIECE 144 +#define ITEM_COMET_SHARD 145 +#define ITEM_SHOAL_SALT 146 +#define ITEM_SHOAL_SHELL 147 +#define ITEM_RED_SHARD 148 +#define ITEM_BLUE_SHARD 149 +#define ITEM_YELLOW_SHARD 150 +#define ITEM_GREEN_SHARD 151 +#define ITEM_HEART_SCALE 152 +#define ITEM_HONEY 153 +#define ITEM_RARE_BONE 154 +#define ITEM_ODD_KEYSTONE 155 +#define ITEM_PRETTY_FEATHER 156 +#define ITEM_RELIC_COPPER 157 +#define ITEM_RELIC_SILVER 158 +#define ITEM_RELIC_GOLD 159 +#define ITEM_RELIC_VASE 160 +#define ITEM_RELIC_BAND 161 +#define ITEM_RELIC_STATUE 162 +#define ITEM_RELIC_CROWN 163 +#define ITEM_STRANGE_SOUVENIR 164 + +// Fossils +#define ITEM_HELIX_FOSSIL 165 +#define ITEM_DOME_FOSSIL 166 +#define ITEM_OLD_AMBER 167 +#define ITEM_ROOT_FOSSIL 168 +#define ITEM_CLAW_FOSSIL 169 +#define ITEM_ARMOR_FOSSIL 170 +#define ITEM_SKULL_FOSSIL 171 +#define ITEM_COVER_FOSSIL 172 +#define ITEM_PLUME_FOSSIL 173 +#define ITEM_JAW_FOSSIL 174 +#define ITEM_SAIL_FOSSIL 175 +#define ITEM_FOSSILIZED_BIRD 176 +#define ITEM_FOSSILIZED_FISH 177 +#define ITEM_FOSSILIZED_DRAKE 178 +#define ITEM_FOSSILIZED_DINO 179 + +// Mulch +#define ITEM_GROWTH_MULCH 180 +#define ITEM_DAMP_MULCH 181 +#define ITEM_STABLE_MULCH 182 +#define ITEM_GOOEY_MULCH 183 +#define ITEM_RICH_MULCH 184 +#define ITEM_SURPRISE_MULCH 185 +#define ITEM_BOOST_MULCH 186 +#define ITEM_AMAZE_MULCH 187 + +// Apricorns +#define ITEM_RED_APRICORN 188 +#define ITEM_BLUE_APRICORN 189 +#define ITEM_YELLOW_APRICORN 190 +#define ITEM_GREEN_APRICORN 191 +#define ITEM_PINK_APRICORN 192 +#define ITEM_WHITE_APRICORN 193 +#define ITEM_BLACK_APRICORN 194 + +#define ITEM_WISHING_PIECE 195 +#define ITEM_GALARICA_TWIG 196 +#define ITEM_ARMORITE_ORE 197 +#define ITEM_DYNITE_ORE 198 + +// Mail +#define ITEM_ORANGE_MAIL 199 +#define ITEM_HARBOR_MAIL 200 +#define ITEM_GLITTER_MAIL 201 +#define ITEM_MECH_MAIL 202 +#define ITEM_WOOD_MAIL 203 +#define ITEM_WAVE_MAIL 204 +#define ITEM_BEAD_MAIL 205 +#define ITEM_SHADOW_MAIL 206 +#define ITEM_TROPIC_MAIL 207 +#define ITEM_DREAM_MAIL 208 +#define ITEM_FAB_MAIL 209 +#define ITEM_RETRO_MAIL 210 #define FIRST_MAIL_INDEX ITEM_ORANGE_MAIL +// Evolution Items +#define ITEM_FIRE_STONE 211 +#define ITEM_WATER_STONE 212 +#define ITEM_THUNDER_STONE 213 +#define ITEM_LEAF_STONE 214 +#define ITEM_ICE_STONE 215 +#define ITEM_SUN_STONE 216 +#define ITEM_MOON_STONE 217 +#define ITEM_SHINY_STONE 218 +#define ITEM_DUSK_STONE 219 +#define ITEM_DAWN_STONE 220 +#define ITEM_SWEET_APPLE 221 +#define ITEM_TART_APPLE 222 +#define ITEM_CRACKED_POT 223 +#define ITEM_CHIPPED_POT 224 +#define ITEM_GALARICA_CUFF 225 +#define ITEM_GALARICA_WREATH 226 +#define ITEM_DRAGON_SCALE 227 +#define ITEM_UPGRADE 228 +#define ITEM_PROTECTOR 229 +#define ITEM_ELECTIRIZER 230 +#define ITEM_MAGMARIZER 231 +#define ITEM_DUBIOUS_DISC 232 +#define ITEM_REAPER_CLOTH 233 +#define ITEM_PRISM_SCALE 234 +#define ITEM_WHIPPED_DREAM 235 +#define ITEM_SACHET 236 +#define ITEM_OVAL_STONE 237 +#define ITEM_STRAWBERRY_SWEET 238 +#define ITEM_LOVE_SWEET 239 +#define ITEM_BERRY_SWEET 240 +#define ITEM_CLOVER_SWEET 241 +#define ITEM_FLOWER_SWEET 242 +#define ITEM_STAR_SWEET 243 +#define ITEM_RIBBON_SWEET 244 + +#define ITEM_EVERSTONE 245 + +// Nectars +#define ITEM_RED_NECTAR 246 +#define ITEM_YELLOW_NECTAR 247 +#define ITEM_PINK_NECTAR 248 +#define ITEM_PURPLE_NECTAR 249 + +// Plates +#define ITEM_FLAME_PLATE 250 +#define ITEM_SPLASH_PLATE 251 +#define ITEM_ZAP_PLATE 252 +#define ITEM_MEADOW_PLATE 253 +#define ITEM_ICICLE_PLATE 254 +#define ITEM_FIST_PLATE 255 +#define ITEM_TOXIC_PLATE 256 +#define ITEM_EARTH_PLATE 257 +#define ITEM_SKY_PLATE 258 +#define ITEM_MIND_PLATE 259 +#define ITEM_INSECT_PLATE 260 +#define ITEM_STONE_PLATE 261 +#define ITEM_SPOOKY_PLATE 262 +#define ITEM_DRACO_PLATE 263 +#define ITEM_DREAD_PLATE 264 +#define ITEM_IRON_PLATE 265 +#define ITEM_PIXIE_PLATE 266 + +// Drives +#define ITEM_DOUSE_DRIVE 267 +#define ITEM_SHOCK_DRIVE 268 +#define ITEM_BURN_DRIVE 269 +#define ITEM_CHILL_DRIVE 270 + +// Memories +#define ITEM_FIRE_MEMORY 271 +#define ITEM_WATER_MEMORY 272 +#define ITEM_ELECTRIC_MEMORY 273 +#define ITEM_GRASS_MEMORY 274 +#define ITEM_ICE_MEMORY 275 +#define ITEM_FIGHTING_MEMORY 276 +#define ITEM_POISON_MEMORY 277 +#define ITEM_GROUND_MEMORY 278 +#define ITEM_FLYING_MEMORY 279 +#define ITEM_PSYCHIC_MEMORY 280 +#define ITEM_BUG_MEMORY 281 +#define ITEM_ROCK_MEMORY 282 +#define ITEM_GHOST_MEMORY 283 +#define ITEM_DRAGON_MEMORY 284 +#define ITEM_DARK_MEMORY 285 +#define ITEM_STEEL_MEMORY 286 +#define ITEM_FAIRY_MEMORY 287 + +#define ITEM_RUSTED_SWORD 288 +#define ITEM_RUSTED_SHIELD 289 + +// Colored Orbs +#define ITEM_RED_ORB 290 +#define ITEM_BLUE_ORB 291 + +// Mega Stones +#define ITEM_VENUSAURITE 292 +#define ITEM_CHARIZARDITE_X 293 +#define ITEM_CHARIZARDITE_Y 294 +#define ITEM_BLASTOISINITE 295 +#define ITEM_BEEDRILLITE 296 +#define ITEM_PIDGEOTITE 297 +#define ITEM_ALAKAZITE 298 +#define ITEM_SLOWBRONITE 299 +#define ITEM_GENGARITE 300 +#define ITEM_KANGASKHANITE 301 +#define ITEM_PINSIRITE 302 +#define ITEM_GYARADOSITE 303 +#define ITEM_AERODACTYLITE 304 +#define ITEM_MEWTWONITE_X 305 +#define ITEM_MEWTWONITE_Y 306 +#define ITEM_AMPHAROSITE 307 +#define ITEM_STEELIXITE 308 +#define ITEM_SCIZORITE 309 +#define ITEM_HERACRONITE 310 +#define ITEM_HOUNDOOMINITE 311 +#define ITEM_TYRANITARITE 312 +#define ITEM_SCEPTILITE 313 +#define ITEM_BLAZIKENITE 314 +#define ITEM_SWAMPERTITE 315 +#define ITEM_GARDEVOIRITE 316 +#define ITEM_SABLENITE 317 +#define ITEM_MAWILITE 318 +#define ITEM_AGGRONITE 319 +#define ITEM_MEDICHAMITE 320 +#define ITEM_MANECTITE 321 +#define ITEM_SHARPEDONITE 322 +#define ITEM_CAMERUPTITE 323 +#define ITEM_ALTARIANITE 324 +#define ITEM_BANETTITE 325 +#define ITEM_ABSOLITE 326 +#define ITEM_GLALITITE 327 +#define ITEM_SALAMENCITE 328 +#define ITEM_METAGROSSITE 329 +#define ITEM_LATIASITE 330 +#define ITEM_LATIOSITE 331 +#define ITEM_LOPUNNITE 332 +#define ITEM_GARCHOMPITE 333 +#define ITEM_LUCARIONITE 334 +#define ITEM_ABOMASITE 335 +#define ITEM_GALLADITE 336 +#define ITEM_AUDINITE 337 +#define ITEM_DIANCITE 338 + +// Gems +#define ITEM_NORMAL_GEM 339 +#define ITEM_FIRE_GEM 340 +#define ITEM_WATER_GEM 341 +#define ITEM_ELECTRIC_GEM 342 +#define ITEM_GRASS_GEM 343 +#define ITEM_ICE_GEM 344 +#define ITEM_FIGHTING_GEM 345 +#define ITEM_POISON_GEM 346 +#define ITEM_GROUND_GEM 347 +#define ITEM_FLYING_GEM 348 +#define ITEM_PSYCHIC_GEM 349 +#define ITEM_BUG_GEM 350 +#define ITEM_ROCK_GEM 351 +#define ITEM_GHOST_GEM 352 +#define ITEM_DRAGON_GEM 353 +#define ITEM_DARK_GEM 354 +#define ITEM_STEEL_GEM 355 +#define ITEM_FAIRY_GEM 356 + +// Z-Crystals +#define ITEM_NORMALIUM_Z 357 +#define ITEM_FIRIUM_Z 358 +#define ITEM_WATERIUM_Z 359 +#define ITEM_ELECTRIUM_Z 360 +#define ITEM_GRASSIUM_Z 361 +#define ITEM_ICIUM_Z 362 +#define ITEM_FIGHTINIUM_Z 363 +#define ITEM_POISONIUM_Z 364 +#define ITEM_GROUNDIUM_Z 365 +#define ITEM_FLYINIUM_Z 366 +#define ITEM_PSYCHIUM_Z 367 +#define ITEM_BUGINIUM_Z 368 +#define ITEM_ROCKIUM_Z 369 +#define ITEM_GHOSTIUM_Z 370 +#define ITEM_DRAGONIUM_Z 371 +#define ITEM_DARKINIUM_Z 372 +#define ITEM_STEELIUM_Z 373 +#define ITEM_FAIRIUM_Z 374 +#define ITEM_PIKANIUM_Z 375 +#define ITEM_EEVIUM_Z 376 +#define ITEM_SNORLIUM_Z 377 +#define ITEM_MEWNIUM_Z 378 +#define ITEM_DECIDIUM_Z 379 +#define ITEM_INCINIUM_Z 380 +#define ITEM_PRIMARIUM_Z 381 +#define ITEM_LYCANIUM_Z 382 +#define ITEM_MIMIKIUM_Z 383 +#define ITEM_KOMMONIUM_Z 384 +#define ITEM_TAPUNIUM_Z 385 +#define ITEM_SOLGANIUM_Z 386 +#define ITEM_LUNALIUM_Z 387 +#define ITEM_MARSHADIUM_Z 388 +#define ITEM_ALORAICHIUM_Z 389 +#define ITEM_PIKASHUNIUM_Z 390 +#define ITEM_ULTRANECROZIUM_Z 391 + +// Species-specific Held Items +#define ITEM_LIGHT_BALL 392 +#define ITEM_LEEK 393 +#define ITEM_THICK_CLUB 394 +#define ITEM_LUCKY_PUNCH 395 +#define ITEM_METAL_POWDER 396 +#define ITEM_QUICK_POWDER 397 +#define ITEM_DEEP_SEA_SCALE 398 +#define ITEM_DEEP_SEA_TOOTH 399 +#define ITEM_SOUL_DEW 400 +#define ITEM_ADAMANT_ORB 401 +#define ITEM_LUSTROUS_ORB 402 +#define ITEM_GRISEOUS_ORB 403 + +// Incenses +#define ITEM_SEA_INCENSE 404 +#define ITEM_LAX_INCENSE 405 +#define ITEM_ODD_INCENSE 406 +#define ITEM_ROCK_INCENSE 407 +#define ITEM_FULL_INCENSE 408 +#define ITEM_WAVE_INCENSE 409 +#define ITEM_ROSE_INCENSE 410 +#define ITEM_LUCK_INCENSE 411 +#define ITEM_PURE_INCENSE 412 + +// Contest Scarves +#define ITEM_RED_SCARF 413 +#define ITEM_BLUE_SCARF 414 +#define ITEM_PINK_SCARF 415 +#define ITEM_GREEN_SCARF 416 +#define ITEM_YELLOW_SCARF 417 + +// EV Gain Modifiers +#define ITEM_MACHO_BRACE 418 +#define ITEM_POWER_WEIGHT 419 +#define ITEM_POWER_BRACER 420 +#define ITEM_POWER_BELT 421 +#define ITEM_POWER_LENS 422 +#define ITEM_POWER_BAND 423 +#define ITEM_POWER_ANKLET 424 + +// Type-boosting Held Items +#define ITEM_SILK_SCARF 425 +#define ITEM_CHARCOAL 426 +#define ITEM_MYSTIC_WATER 427 +#define ITEM_MAGNET 428 +#define ITEM_MIRACLE_SEED 429 +#define ITEM_NEVER_MELT_ICE 430 +#define ITEM_BLACK_BELT 431 +#define ITEM_POISON_BARB 432 +#define ITEM_SOFT_SAND 433 +#define ITEM_SHARP_BEAK 434 +#define ITEM_TWISTED_SPOON 435 +#define ITEM_SILVER_POWDER 436 +#define ITEM_HARD_STONE 437 +#define ITEM_SPELL_TAG 438 +#define ITEM_DRAGON_FANG 439 +#define ITEM_BLACK_GLASSES 440 +#define ITEM_METAL_COAT 441 + +// Choice Items +#define ITEM_CHOICE_BAND 442 +#define ITEM_CHOICE_SPECS 443 +#define ITEM_CHOICE_SCARF 444 + +// Status Orbs +#define ITEM_FLAME_ORB 445 +#define ITEM_TOXIC_ORB 446 + +// Weather Rocks +#define ITEM_DAMP_ROCK 447 +#define ITEM_HEAT_ROCK 448 +#define ITEM_SMOOTH_ROCK 449 +#define ITEM_ICY_ROCK 450 + +// Terrain Seeds +#define ITEM_ELECTRIC_SEED 451 +#define ITEM_PSYCHIC_SEED 452 +#define ITEM_MISTY_SEED 453 +#define ITEM_GRASSY_SEED 454 + +// Type-activated Stat Modifiers +#define ITEM_ABSORB_BULB 455 +#define ITEM_CELL_BATTERY 456 +#define ITEM_LUMINOUS_MOSS 457 +#define ITEM_SNOWBALL 458 + +// Misc. Held Items +#define ITEM_BRIGHT_POWDER 459 +#define ITEM_WHITE_HERB 460 +#define ITEM_EXP_SHARE 461 +#define ITEM_QUICK_CLAW 462 +#define ITEM_SOOTHE_BELL 463 +#define ITEM_MENTAL_HERB 464 +#define ITEM_KINGS_ROCK 465 +#define ITEM_AMULET_COIN 466 +#define ITEM_CLEANSE_TAG 467 +#define ITEM_SMOKE_BALL 468 +#define ITEM_FOCUS_BAND 469 +#define ITEM_LUCKY_EGG 470 +#define ITEM_SCOPE_LENS 471 +#define ITEM_LEFTOVERS 472 +#define ITEM_SHELL_BELL 473 +#define ITEM_WIDE_LENS 474 +#define ITEM_MUSCLE_BAND 475 +#define ITEM_WISE_GLASSES 476 +#define ITEM_EXPERT_BELT 477 +#define ITEM_LIGHT_CLAY 478 +#define ITEM_LIFE_ORB 479 +#define ITEM_POWER_HERB 480 +#define ITEM_FOCUS_SASH 481 +#define ITEM_ZOOM_LENS 482 +#define ITEM_METRONOME 483 +#define ITEM_IRON_BALL 484 +#define ITEM_LAGGING_TAIL 485 +#define ITEM_DESTINY_KNOT 486 +#define ITEM_BLACK_SLUDGE 487 +#define ITEM_GRIP_CLAW 488 +#define ITEM_STICKY_BARB 489 +#define ITEM_SHED_SHELL 490 +#define ITEM_BIG_ROOT 491 +#define ITEM_RAZOR_CLAW 492 +#define ITEM_RAZOR_FANG 493 +#define ITEM_EVIOLITE 494 +#define ITEM_FLOAT_STONE 495 +#define ITEM_ROCKY_HELMET 496 +#define ITEM_AIR_BALLOON 497 +#define ITEM_RED_CARD 498 +#define ITEM_RING_TARGET 499 +#define ITEM_BINDING_BAND 500 +#define ITEM_EJECT_BUTTON 501 +#define ITEM_WEAKNESS_POLICY 502 +#define ITEM_ASSAULT_VEST 503 +#define ITEM_SAFETY_GOGGLES 504 +#define ITEM_ADRENALINE_ORB 505 +#define ITEM_TERRAIN_EXTENDER 506 +#define ITEM_PROTECTIVE_PADS 507 +#define ITEM_THROAT_SPRAY 508 +#define ITEM_EJECT_PACK 509 +#define ITEM_HEAVY_DUTY_BOOTS 510 +#define ITEM_BLUNDER_POLICY 511 +#define ITEM_ROOM_SERVICE 512 +#define ITEM_UTILITY_UMBRELLA 513 + // Berries -#define ITEM_CHERI_BERRY 133 -#define ITEM_CHESTO_BERRY 134 -#define ITEM_PECHA_BERRY 135 -#define ITEM_RAWST_BERRY 136 -#define ITEM_ASPEAR_BERRY 137 -#define ITEM_LEPPA_BERRY 138 -#define ITEM_ORAN_BERRY 139 -#define ITEM_PERSIM_BERRY 140 -#define ITEM_LUM_BERRY 141 -#define ITEM_SITRUS_BERRY 142 -#define ITEM_FIGY_BERRY 143 -#define ITEM_WIKI_BERRY 144 -#define ITEM_MAGO_BERRY 145 -#define ITEM_AGUAV_BERRY 146 -#define ITEM_IAPAPA_BERRY 147 -#define ITEM_RAZZ_BERRY 148 -#define ITEM_BLUK_BERRY 149 -#define ITEM_NANAB_BERRY 150 -#define ITEM_WEPEAR_BERRY 151 -#define ITEM_PINAP_BERRY 152 -#define ITEM_POMEG_BERRY 153 -#define ITEM_KELPSY_BERRY 154 -#define ITEM_QUALOT_BERRY 155 -#define ITEM_HONDEW_BERRY 156 -#define ITEM_GREPA_BERRY 157 -#define ITEM_TAMATO_BERRY 158 -#define ITEM_CORNN_BERRY 159 -#define ITEM_MAGOST_BERRY 160 -#define ITEM_RABUTA_BERRY 161 -#define ITEM_NOMEL_BERRY 162 -#define ITEM_SPELON_BERRY 163 -#define ITEM_PAMTRE_BERRY 164 -#define ITEM_WATMEL_BERRY 165 -#define ITEM_DURIN_BERRY 166 -#define ITEM_BELUE_BERRY 167 -#define ITEM_LIECHI_BERRY 168 -#define ITEM_GANLON_BERRY 169 -#define ITEM_SALAC_BERRY 170 -#define ITEM_PETAYA_BERRY 171 -#define ITEM_APICOT_BERRY 172 -#define ITEM_LANSAT_BERRY 173 -#define ITEM_STARF_BERRY 174 -#define ITEM_ENIGMA_BERRY 175 +#define ITEM_CHERI_BERRY 514 +#define ITEM_CHESTO_BERRY 515 +#define ITEM_PECHA_BERRY 516 +#define ITEM_RAWST_BERRY 517 +#define ITEM_ASPEAR_BERRY 518 +#define ITEM_LEPPA_BERRY 519 +#define ITEM_ORAN_BERRY 520 +#define ITEM_PERSIM_BERRY 521 +#define ITEM_LUM_BERRY 522 +#define ITEM_SITRUS_BERRY 523 +#define ITEM_FIGY_BERRY 524 +#define ITEM_WIKI_BERRY 525 +#define ITEM_MAGO_BERRY 526 +#define ITEM_AGUAV_BERRY 527 +#define ITEM_IAPAPA_BERRY 528 +#define ITEM_RAZZ_BERRY 529 +#define ITEM_BLUK_BERRY 530 +#define ITEM_NANAB_BERRY 531 +#define ITEM_WEPEAR_BERRY 532 +#define ITEM_PINAP_BERRY 533 +#define ITEM_POMEG_BERRY 534 +#define ITEM_KELPSY_BERRY 535 +#define ITEM_QUALOT_BERRY 536 +#define ITEM_HONDEW_BERRY 537 +#define ITEM_GREPA_BERRY 538 +#define ITEM_TAMATO_BERRY 539 +#define ITEM_CORNN_BERRY 540 +#define ITEM_MAGOST_BERRY 541 +#define ITEM_RABUTA_BERRY 542 +#define ITEM_NOMEL_BERRY 543 +#define ITEM_SPELON_BERRY 544 +#define ITEM_PAMTRE_BERRY 545 +#define ITEM_WATMEL_BERRY 546 +#define ITEM_DURIN_BERRY 547 +#define ITEM_BELUE_BERRY 548 +#define ITEM_CHILAN_BERRY 549 +#define ITEM_OCCA_BERRY 550 +#define ITEM_PASSHO_BERRY 551 +#define ITEM_WACAN_BERRY 552 +#define ITEM_RINDO_BERRY 553 +#define ITEM_YACHE_BERRY 554 +#define ITEM_CHOPLE_BERRY 555 +#define ITEM_KEBIA_BERRY 556 +#define ITEM_SHUCA_BERRY 557 +#define ITEM_COBA_BERRY 558 +#define ITEM_PAYAPA_BERRY 559 +#define ITEM_TANGA_BERRY 560 +#define ITEM_CHARTI_BERRY 561 +#define ITEM_KASIB_BERRY 562 +#define ITEM_HABAN_BERRY 563 +#define ITEM_COLBUR_BERRY 564 +#define ITEM_BABIRI_BERRY 565 +#define ITEM_ROSELI_BERRY 566 +#define ITEM_LIECHI_BERRY 567 +#define ITEM_GANLON_BERRY 568 +#define ITEM_SALAC_BERRY 569 +#define ITEM_PETAYA_BERRY 570 +#define ITEM_APICOT_BERRY 571 +#define ITEM_LANSAT_BERRY 572 +#define ITEM_STARF_BERRY 573 +#define ITEM_ENIGMA_BERRY 574 +#define ITEM_MICLE_BERRY 575 +#define ITEM_CUSTAP_BERRY 576 +#define ITEM_JABOCA_BERRY 577 +#define ITEM_ROWAP_BERRY 578 +#define ITEM_KEE_BERRY 579 +#define ITEM_MARANGA_BERRY 580 +#define ITEM_ENIGMA_BERRY_E_READER 581 #define FIRST_BERRY_INDEX ITEM_CHERI_BERRY -#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY - -#define ITEM_UNUSED_BERRY_1 176 -#define ITEM_UNUSED_BERRY_2 177 -#define ITEM_UNUSED_BERRY_3 178 - -#define MAX_BERRY_INDEX ITEM_UNUSED_BERRY_3 - -// Battle Held items -#define ITEM_BRIGHT_POWDER 179 -#define ITEM_WHITE_HERB 180 -#define ITEM_MACHO_BRACE 181 -#define ITEM_EXP_SHARE 182 -#define ITEM_QUICK_CLAW 183 -#define ITEM_SOOTHE_BELL 184 -#define ITEM_MENTAL_HERB 185 -#define ITEM_CHOICE_BAND 186 -#define ITEM_KINGS_ROCK 187 -#define ITEM_SILVER_POWDER 188 -#define ITEM_AMULET_COIN 189 -#define ITEM_CLEANSE_TAG 190 -#define ITEM_SOUL_DEW 191 -#define ITEM_DEEP_SEA_TOOTH 192 -#define ITEM_DEEP_SEA_SCALE 193 -#define ITEM_SMOKE_BALL 194 -#define ITEM_EVERSTONE 195 -#define ITEM_FOCUS_BAND 196 -#define ITEM_LUCKY_EGG 197 -#define ITEM_SCOPE_LENS 198 -#define ITEM_METAL_COAT 199 -#define ITEM_LEFTOVERS 200 -#define ITEM_DRAGON_SCALE 201 -#define ITEM_LIGHT_BALL 202 -#define ITEM_SOFT_SAND 203 -#define ITEM_HARD_STONE 204 -#define ITEM_MIRACLE_SEED 205 -#define ITEM_BLACK_GLASSES 206 -#define ITEM_BLACK_BELT 207 -#define ITEM_MAGNET 208 -#define ITEM_MYSTIC_WATER 209 -#define ITEM_SHARP_BEAK 210 -#define ITEM_POISON_BARB 211 -#define ITEM_NEVER_MELT_ICE 212 -#define ITEM_SPELL_TAG 213 -#define ITEM_TWISTED_SPOON 214 -#define ITEM_CHARCOAL 215 -#define ITEM_DRAGON_FANG 216 -#define ITEM_SILK_SCARF 217 -#define ITEM_UP_GRADE 218 -#define ITEM_SHELL_BELL 219 -#define ITEM_SEA_INCENSE 220 -#define ITEM_LAX_INCENSE 221 -#define ITEM_LUCKY_PUNCH 222 -#define ITEM_METAL_POWDER 223 -#define ITEM_THICK_CLUB 224 -#define ITEM_STICK 225 -#define ITEM_0E2 226 -#define ITEM_0E3 227 -#define ITEM_0E4 228 -#define ITEM_0E5 229 -#define ITEM_0E6 230 -#define ITEM_0E7 231 -#define ITEM_0E8 232 -#define ITEM_0E9 233 -#define ITEM_0EA 234 -#define ITEM_0EB 235 -#define ITEM_0EC 236 -#define ITEM_0ED 237 -#define ITEM_0EE 238 -#define ITEM_0EF 239 -#define ITEM_0F0 240 -#define ITEM_0F1 241 -#define ITEM_0F2 242 -#define ITEM_0F3 243 -#define ITEM_0F4 244 -#define ITEM_0F5 245 -#define ITEM_0F6 246 -#define ITEM_0F7 247 -#define ITEM_0F8 248 -#define ITEM_0F9 249 -#define ITEM_0FA 250 -#define ITEM_0FB 251 -#define ITEM_0FC 252 -#define ITEM_0FD 253 - -// Contest held items -#define ITEM_RED_SCARF 254 -#define ITEM_BLUE_SCARF 255 -#define ITEM_PINK_SCARF 256 -#define ITEM_GREEN_SCARF 257 -#define ITEM_YELLOW_SCARF 258 - -// Key Items -#define ITEM_MACH_BIKE 259 -#define ITEM_COIN_CASE 260 -#define ITEM_ITEMFINDER 261 -#define ITEM_OLD_ROD 262 -#define ITEM_GOOD_ROD 263 -#define ITEM_SUPER_ROD 264 -#define ITEM_SS_TICKET 265 -#define ITEM_CONTEST_PASS 266 -#define ITEM_10B 267 -#define ITEM_WAILMER_PAIL 268 -#define ITEM_DEVON_GOODS 269 -#define ITEM_SOOT_SACK 270 -#define ITEM_BASEMENT_KEY 271 -#define ITEM_ACRO_BIKE 272 -#define ITEM_POKEBLOCK_CASE 273 -#define ITEM_LETTER 274 -#define ITEM_EON_TICKET 275 -#define ITEM_RED_ORB 276 -#define ITEM_BLUE_ORB 277 -#define ITEM_SCANNER 278 -#define ITEM_GO_GOGGLES 279 -#define ITEM_METEORITE 280 -#define ITEM_ROOM_1_KEY 281 -#define ITEM_ROOM_2_KEY 282 -#define ITEM_ROOM_4_KEY 283 -#define ITEM_ROOM_6_KEY 284 -#define ITEM_STORAGE_KEY 285 -#define ITEM_ROOT_FOSSIL 286 -#define ITEM_CLAW_FOSSIL 287 -#define ITEM_DEVON_SCOPE 288 +#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY_E_READER // TMs/HMs -#define ITEM_TM01 289 -#define ITEM_TM02 290 -#define ITEM_TM03 291 -#define ITEM_TM04 292 -#define ITEM_TM05 293 -#define ITEM_TM06 294 -#define ITEM_TM07 295 -#define ITEM_TM08 296 -#define ITEM_TM09 297 -#define ITEM_TM10 298 -#define ITEM_TM11 299 -#define ITEM_TM12 300 -#define ITEM_TM13 301 -#define ITEM_TM14 302 -#define ITEM_TM15 303 -#define ITEM_TM16 304 -#define ITEM_TM17 305 -#define ITEM_TM18 306 -#define ITEM_TM19 307 -#define ITEM_TM20 308 -#define ITEM_TM21 309 -#define ITEM_TM22 310 -#define ITEM_TM23 311 -#define ITEM_TM24 312 -#define ITEM_TM25 313 -#define ITEM_TM26 314 -#define ITEM_TM27 315 -#define ITEM_TM28 316 -#define ITEM_TM29 317 -#define ITEM_TM30 318 -#define ITEM_TM31 319 -#define ITEM_TM32 320 -#define ITEM_TM33 321 -#define ITEM_TM34 322 -#define ITEM_TM35 323 -#define ITEM_TM36 324 -#define ITEM_TM37 325 -#define ITEM_TM38 326 -#define ITEM_TM39 327 -#define ITEM_TM40 328 -#define ITEM_TM41 329 -#define ITEM_TM42 330 -#define ITEM_TM43 331 -#define ITEM_TM44 332 -#define ITEM_TM45 333 -#define ITEM_TM46 334 -#define ITEM_TM47 335 -#define ITEM_TM48 336 -#define ITEM_TM49 337 -#define ITEM_TM50 338 -#define ITEM_HM01 339 -#define ITEM_HM02 340 -#define ITEM_HM03 341 -#define ITEM_HM04 342 -#define ITEM_HM05 343 -#define ITEM_HM06 344 -#define ITEM_HM07 345 -#define ITEM_HM08 346 +#define ITEM_TM01 582 +#define ITEM_TM02 583 +#define ITEM_TM03 584 +#define ITEM_TM04 585 +#define ITEM_TM05 586 +#define ITEM_TM06 587 +#define ITEM_TM07 588 +#define ITEM_TM08 589 +#define ITEM_TM09 590 +#define ITEM_TM10 591 +#define ITEM_TM11 592 +#define ITEM_TM12 593 +#define ITEM_TM13 594 +#define ITEM_TM14 595 +#define ITEM_TM15 596 +#define ITEM_TM16 597 +#define ITEM_TM17 598 +#define ITEM_TM18 599 +#define ITEM_TM19 600 +#define ITEM_TM20 601 +#define ITEM_TM21 602 +#define ITEM_TM22 603 +#define ITEM_TM23 604 +#define ITEM_TM24 605 +#define ITEM_TM25 606 +#define ITEM_TM26 607 +#define ITEM_TM27 608 +#define ITEM_TM28 609 +#define ITEM_TM29 610 +#define ITEM_TM30 611 +#define ITEM_TM31 612 +#define ITEM_TM32 613 +#define ITEM_TM33 614 +#define ITEM_TM34 615 +#define ITEM_TM35 616 +#define ITEM_TM36 617 +#define ITEM_TM37 618 +#define ITEM_TM38 619 +#define ITEM_TM39 620 +#define ITEM_TM40 621 +#define ITEM_TM41 622 +#define ITEM_TM42 623 +#define ITEM_TM43 624 +#define ITEM_TM44 625 +#define ITEM_TM45 626 +#define ITEM_TM46 627 +#define ITEM_TM47 628 +#define ITEM_TM48 629 +#define ITEM_TM49 630 +#define ITEM_TM50 631 +#define ITEM_TM51 632 +#define ITEM_TM52 633 +#define ITEM_TM53 634 +#define ITEM_TM54 635 +#define ITEM_TM55 636 +#define ITEM_TM56 637 +#define ITEM_TM57 638 +#define ITEM_TM58 639 +#define ITEM_TM59 640 +#define ITEM_TM60 641 +#define ITEM_TM61 642 +#define ITEM_TM62 643 +#define ITEM_TM63 644 +#define ITEM_TM64 645 +#define ITEM_TM65 646 +#define ITEM_TM66 647 +#define ITEM_TM67 648 +#define ITEM_TM68 649 +#define ITEM_TM69 650 +#define ITEM_TM70 651 +#define ITEM_TM71 652 +#define ITEM_TM72 653 +#define ITEM_TM73 654 +#define ITEM_TM74 655 +#define ITEM_TM75 656 +#define ITEM_TM76 657 +#define ITEM_TM77 658 +#define ITEM_TM78 659 +#define ITEM_TM79 660 +#define ITEM_TM80 661 +#define ITEM_TM81 662 +#define ITEM_TM82 663 +#define ITEM_TM83 664 +#define ITEM_TM84 665 +#define ITEM_TM85 666 +#define ITEM_TM86 667 +#define ITEM_TM87 668 +#define ITEM_TM88 669 +#define ITEM_TM89 670 +#define ITEM_TM90 671 +#define ITEM_TM91 672 +#define ITEM_TM92 673 +#define ITEM_TM93 674 +#define ITEM_TM94 675 +#define ITEM_TM95 676 +#define ITEM_TM96 677 +#define ITEM_TM97 678 +#define ITEM_TM98 679 +#define ITEM_TM99 680 +#define ITEM_TM100 681 + +#define ITEM_HM01 682 +#define ITEM_HM02 683 +#define ITEM_HM03 684 +#define ITEM_HM04 685 +#define ITEM_HM05 686 +#define ITEM_HM06 687 +#define ITEM_HM07 688 +#define ITEM_HM08 689 #define ITEM_TM01_FOCUS_PUNCH ITEM_TM01 #define ITEM_TM02_DRAGON_CLAW ITEM_TM02 @@ -402,7 +811,7 @@ #define ITEM_TM19_GIGA_DRAIN ITEM_TM19 #define ITEM_TM20_SAFEGUARD ITEM_TM20 #define ITEM_TM21_FRUSTRATION ITEM_TM21 -#define ITEM_TM22_SOLARBEAM ITEM_TM22 +#define ITEM_TM22_SOLAR_BEAM ITEM_TM22 #define ITEM_TM23_IRON_TAIL ITEM_TM23 #define ITEM_TM24_THUNDERBOLT ITEM_TM24 #define ITEM_TM25_THUNDER ITEM_TM25 @@ -431,6 +840,7 @@ #define ITEM_TM48_SKILL_SWAP ITEM_TM48 #define ITEM_TM49_SNATCH ITEM_TM49 #define ITEM_TM50_OVERHEAT ITEM_TM50 + #define ITEM_HM01_CUT ITEM_HM01 #define ITEM_HM02_FLY ITEM_HM02 #define ITEM_HM03_SURF ITEM_HM03 @@ -440,43 +850,85 @@ #define ITEM_HM07_WATERFALL ITEM_HM07 #define ITEM_HM08_DIVE ITEM_HM08 -// Unknown -#define ITEM_15B 347 -#define ITEM_15C 348 +// Charms +#define ITEM_OVAL_CHARM 690 +#define ITEM_SHINY_CHARM 691 +#define ITEM_CATCHING_CHARM 692 +#define ITEM_EXP_CHARM 693 -// FireRed/LeafGreen -#define ITEM_OAKS_PARCEL 349 -#define ITEM_POKE_FLUTE 350 -#define ITEM_SECRET_KEY 351 -#define ITEM_BIKE_VOUCHER 352 -#define ITEM_GOLD_TEETH 353 -#define ITEM_OLD_AMBER 354 -#define ITEM_CARD_KEY 355 -#define ITEM_LIFT_KEY 356 -#define ITEM_HELIX_FOSSIL 357 -#define ITEM_DOME_FOSSIL 358 -#define ITEM_SILPH_SCOPE 359 -#define ITEM_BICYCLE 360 -#define ITEM_TOWN_MAP 361 -#define ITEM_VS_SEEKER 362 -#define ITEM_FAME_CHECKER 363 -#define ITEM_TM_CASE 364 -#define ITEM_BERRY_POUCH 365 -#define ITEM_TEACHY_TV 366 -#define ITEM_TRI_PASS 367 -#define ITEM_RAINBOW_PASS 368 -#define ITEM_TEA 369 -#define ITEM_MYSTIC_TICKET 370 -#define ITEM_AURORA_TICKET 371 -#define ITEM_POWDER_JAR 372 -#define ITEM_RUBY 373 -#define ITEM_SAPPHIRE 374 +// Form-changing Key Items +#define ITEM_ROTOM_CATALOG 694 +#define ITEM_GRACIDEA 695 +#define ITEM_REVEAL_GLASS 696 +#define ITEM_DNA_SPLICERS 697 +#define ITEM_ZYGARDE_CUBE 698 +#define ITEM_PRISON_BOTTLE 699 +#define ITEM_N_SOLARIZER 700 +#define ITEM_N_LUNARIZER 701 +#define ITEM_REINS_OF_UNITY 702 -// Emerald -#define ITEM_MAGMA_EMBLEM 375 -#define ITEM_OLD_SEA_MAP 376 +// Battle Mechanic Key Items +#define ITEM_MEGA_RING 703 +#define ITEM_Z_POWER_RING 704 +#define ITEM_DYNAMAX_BAND 705 -#define ITEMS_COUNT 377 +// Misc. Key Items +#define ITEM_BICYCLE 706 +#define ITEM_MACH_BIKE 707 +#define ITEM_ACRO_BIKE 708 +#define ITEM_OLD_ROD 709 +#define ITEM_GOOD_ROD 710 +#define ITEM_SUPER_ROD 711 +#define ITEM_DOWSING_MACHINE 712 +#define ITEM_TOWN_MAP 713 +#define ITEM_VS_SEEKER 714 +#define ITEM_TM_CASE 715 +#define ITEM_BERRY_POUCH 716 +#define ITEM_POKEMON_BOX_LINK 717 +#define ITEM_COIN_CASE 718 +#define ITEM_POWDER_JAR 719 +#define ITEM_WAILMER_PAIL 720 +#define ITEM_POKE_RADAR 721 +#define ITEM_POKEBLOCK_CASE 722 +#define ITEM_SOOT_SACK 723 +#define ITEM_POKE_FLUTE 724 +#define ITEM_FAME_CHECKER 725 +#define ITEM_TEACHY_TV 726 + +// Story Key Items +#define ITEM_SS_TICKET 727 +#define ITEM_EON_TICKET 728 +#define ITEM_MYSTIC_TICKET 729 +#define ITEM_AURORA_TICKET 730 +#define ITEM_OLD_SEA_MAP 731 +#define ITEM_LETTER 732 +#define ITEM_DEVON_PARTS 733 +#define ITEM_GO_GOGGLES 734 +#define ITEM_DEVON_SCOPE 735 +#define ITEM_BASEMENT_KEY 736 +#define ITEM_SCANNER 737 +#define ITEM_STORAGE_KEY 738 +#define ITEM_KEY_TO_ROOM_1 739 +#define ITEM_KEY_TO_ROOM_2 740 +#define ITEM_KEY_TO_ROOM_4 741 +#define ITEM_KEY_TO_ROOM_6 742 +#define ITEM_METEORITE 743 +#define ITEM_MAGMA_EMBLEM 744 +#define ITEM_CONTEST_PASS 745 +#define ITEM_OAKS_PARCEL 746 +#define ITEM_SECRET_KEY 747 +#define ITEM_BIKE_VOUCHER 748 +#define ITEM_GOLD_TEETH 749 +#define ITEM_CARD_KEY 750 +#define ITEM_LIFT_KEY 751 +#define ITEM_SILPH_SCOPE 752 +#define ITEM_TRI_PASS 753 +#define ITEM_RAINBOW_PASS 754 +#define ITEM_TEA 755 +#define ITEM_RUBY 756 +#define ITEM_SAPPHIRE 757 + +#define ITEMS_COUNT 758 #define ITEM_FIELD_ARROW ITEMS_COUNT // Range of berries given out by various NPCS @@ -501,8 +953,8 @@ #define ITEM_TO_MAIL(itemId)((itemId) - FIRST_MAIL_INDEX) #define MAIL_NONE 0xFF -#define NUM_TECHNICAL_MACHINES 50 -#define NUM_HIDDEN_MACHINES 8 +#define NUM_TECHNICAL_MACHINES 100 +#define NUM_HIDDEN_MACHINES 8 #define MAX_BAG_ITEM_CAPACITY 99 #define MAX_PC_ITEM_CAPACITY 999 @@ -521,6 +973,13 @@ #define MACH_BIKE 0 #define ACRO_BIKE 1 +// Item parameters for EXP Candies +#define EXP_100 1 +#define EXP_800 2 +#define EXP_3000 3 +#define EXP_10000 4 +#define EXP_30000 5 + // Item type IDs (used to determine the exit callback) #define ITEM_USE_MAIL 0 #define ITEM_USE_PARTY_MENU 1 @@ -533,6 +992,6 @@ #define ITEM_B_USE_OTHER 2 // Check if the item is one that can be used on a Pokemon. -#define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= MAX_BERRY_INDEX) +#define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= LAST_BERRY_INDEX) #endif // GUARD_CONSTANTS_ITEMS_H diff --git a/include/constants/lilycove_lady.h b/include/constants/lilycove_lady.h index 11b9b31e93..5b1e7d7b4f 100644 --- a/include/constants/lilycove_lady.h +++ b/include/constants/lilycove_lady.h @@ -10,7 +10,7 @@ #define LILYCOVE_LADY_STATE_COMPLETED 1 #define LILYCOVE_LADY_STATE_PRIZE 2 -#define LILYCOVE_LADY_GIFT_THRESHOLD 5 +#define LILYCOVE_LADY_GIFT_THRESHOLD 5 #define QUIZ_AUTHOR_PLAYER 0 #define QUIZ_AUTHOR_OTHER_PLAYER 1 @@ -20,8 +20,6 @@ #define QUIZ_AUTHOR_NAME_LADY 0 #define QUIZ_AUTHOR_NAME_PLAYER 1 #define QUIZ_AUTHOR_NAME_OTHER_PLAYER 2 - -#define QUIZ_QUESTION_LEN 9 // Constants for how many good Pokéblocks the Contest Lady was given // This determines how her performance is described when her TV show comes on diff --git a/include/constants/map_scripts.h b/include/constants/map_scripts.h index 68d3609551..c89df39482 100644 --- a/include/constants/map_scripts.h +++ b/include/constants/map_scripts.h @@ -9,18 +9,18 @@ They are numbered in the order that they will be called when entering a map (from a warp or camera transition). NOTE: These descriptions are just of what they generally do, not what they always or have to do - 3. ON_LOAD: Run after the layout is loaded (but not drawn yet). + 3. ON_LOAD: Run after the layout is loaded (but not drawn yet). Almost exclusively used to set metatiles on the map before it's first drawn 6. ON_FRAME_TABLE: Run every frame after the map has faded in, before player input is processed. - This is a table of scripts that each run if their condition is satisfied. + This is a table of scripts; only the first script whose condition is satisfied is run. Used to trigger an event, such as the player exiting the cable car or the SS Tidal sailor announcing progress 2. ON_TRANSITION: Run during the transition to the map Used to set map-specific flags/vars, update object positions/movement types, set weather, etc 5. ON_WARP_INTO_MAP_TABLE: Run after the map's objects are loaded. - This is a table of scripts that each run if their condition is satisfied. + This is a table of scripts; only the first script whose condition is satisfied is run. Used to add objects to the scene or update something about the player as they warp in (e.g. their facing dir or visibility) Note that ON_TRANSITION may also handle object visibility, but would do so by modifying a flag or var diff --git a/include/constants/maps.h b/include/constants/maps.h index b849749a95..2ad4ea8df5 100644 --- a/include/constants/maps.h +++ b/include/constants/maps.h @@ -9,10 +9,16 @@ #define MAP_GROUP(map) (MAP_##map >> 8) #define MAP_NUM(map) (MAP_##map & 0xFF) -// These groups are used by pokedex_area_screen.c to find wild -// pokemon locations. -#define MAP_GROUP_OVERWORLD_MONS MAP_GROUP(PETALBURG_CITY) -#define MAP_GROUP_SPECIAL_MONS_1 MAP_GROUP(METEOR_FALLS_1F_1R) -#define MAP_GROUP_SPECIAL_MONS_2 MAP_GROUP(SAFARI_ZONE_NORTHWEST) +// IDs for dynamic warps. Both are used in the dest_warp_id field for warp events, but they +// are never read in practice. A dest_map of MAP_NONE is used to indicate that a +// dynamic warp should be used, at which point the warp id is ignored. It can be passed to +// SetDynamicWarp/SetDynamicWarpWithCoords as the first argument, but this argument is unused. +// As only one dynamic warp is saved at a time there's no need to distinguish between them. +#define WARP_ID_SECRET_BASE 0x7E +#define WARP_ID_DYNAMIC 0x7F + +// Used to indicate an invalid warp id, for dummy warps or when a warp should +// use the given coordinates rather than the coordinates of a target warp. +#define WARP_ID_NONE (-1) #endif // GUARD_CONSTANTS_MAPS_H diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 1d1557256d..86f35ce50d 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -9,7 +9,7 @@ #define MB_UNUSED_05 0x05 #define MB_DEEP_SAND 0x06 #define MB_SHORT_GRASS 0x07 -#define MB_UNUSED_CAVE 0x08 +#define MB_CAVE 0x08 #define MB_LONG_GRASS_SOUTH_EDGE 0x09 #define MB_NO_RUNNING 0x0A #define MB_INDOOR_ENCOUNTER 0x0B @@ -113,22 +113,22 @@ #define MB_WATER_SOUTH_ARROW_WARP 0x6D #define MB_DEEP_SOUTH_WARP 0x6E #define MB_UNUSED_6F 0x6F -#define MB_WARP_OR_BRIDGE 0x70 -#define MB_UNUSED_71 0x71 -#define MB_ROUTE120_NORTH_BRIDGE_1 0x72 -#define MB_ROUTE120_NORTH_BRIDGE_2 0x73 -#define MB_PACIFIDLOG_VERTICAL_LOG_1 0x74 -#define MB_PACIFIDLOG_VERTICAL_LOG_2 0x75 -#define MB_PACIFIDLOG_HORIZONTAL_LOG_1 0x76 -#define MB_PACIFIDLOG_HORIZONTAL_LOG_2 0x77 +#define MB_BRIDGE_OVER_OCEAN 0x70 +#define MB_BRIDGE_OVER_POND_LOW 0x71 +#define MB_BRIDGE_OVER_POND_MED 0x72 +#define MB_BRIDGE_OVER_POND_HIGH 0x73 +#define MB_PACIFIDLOG_VERTICAL_LOG_TOP 0x74 +#define MB_PACIFIDLOG_VERTICAL_LOG_BOTTOM 0x75 +#define MB_PACIFIDLOG_HORIZONTAL_LOG_LEFT 0x76 +#define MB_PACIFIDLOG_HORIZONTAL_LOG_RIGHT 0x77 #define MB_FORTREE_BRIDGE 0x78 #define MB_UNUSED_79 0x79 -#define MB_ROUTE120_SOUTH_BRIDGE_1 0x7A -#define MB_ROUTE120_SOUTH_BRIDGE_2 0x7B -#define MB_ROUTE120_NORTH_BRIDGE_3 0x7C -#define MB_ROUTE120_NORTH_BRIDGE_4 0x7D -#define MB_UNUSED_7E 0x7E -#define MB_ROUTE110_BRIDGE 0x7F +#define MB_BRIDGE_OVER_POND_MED_EDGE_1 0x7A +#define MB_BRIDGE_OVER_POND_MED_EDGE_2 0x7B +#define MB_BRIDGE_OVER_POND_HIGH_EDGE_1 0x7C +#define MB_BRIDGE_OVER_POND_HIGH_EDGE_2 0x7D +#define MB_UNUSED_BRIDGE 0x7E +#define MB_BIKE_BRIDGE_OVER_BARRIER 0x7F #define MB_COUNTER 0x80 #define MB_UNUSED_81 0x81 #define MB_UNUSED_82 0x82 @@ -179,8 +179,8 @@ #define MB_UNUSED_AF 0xAF #define MB_SECRET_BASE_PC 0xB0 #define MB_SECRET_BASE_REGISTER_PC 0xB1 -#define MB_SECRET_BASE_UNUSED 0xB2 -#define MB_BLOCK_DECORATION 0xB3 +#define MB_SECRET_BASE_SCENERY 0xB2 +#define MB_SECRET_BASE_TRAINER_SPOT 0xB3 #define MB_SECRET_BASE_DECORATION 0xB4 #define MB_HOLDS_SMALL_DECORATION 0xB5 #define MB_UNUSED_B6 0xB6 @@ -199,7 +199,7 @@ #define MB_HOLDS_LARGE_DECORATION 0xC3 #define MB_SECRET_BASE_TV_SHIELD 0xC4 #define MB_PLAYER_ROOM_PC_ON 0xC5 -#define MB_C6 0xC6 +#define MB_SECRET_BASE_DECORATION_BASE 0xC6 #define MB_SECRET_BASE_POSTER 0xC7 #define MB_UNUSED_C8 0xC8 #define MB_UNUSED_C9 0xC9 @@ -241,6 +241,9 @@ #define MB_UNUSED_ED 0xED #define MB_UNUSED_EE 0xEE #define MB_UNUSED_EF 0xEF + +#define NUM_METATILE_BEHAVIORS 0xF0 + #define MB_INVALID 0xFF #endif // GUARD_METATILE_BEHAVIORS_H diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index b5ef690469..ff10f52ee1 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -16,7 +16,7 @@ #define METATILE_General_MuddySlope_Frame2 0x0EA #define METATILE_General_MuddySlope_Frame3 0x0EB #define METATILE_General_SandPit_Center 0x121 -#define METATILE_General_Door 0x021 +#define METATILE_General_Door 0x021 #define METATILE_General_Door_PokeMart 0x041 #define METATILE_General_Door_PokeCenter 0x061 #define METATILE_General_Door_Gym 0x1CD @@ -35,7 +35,7 @@ #define METATILE_General_SecretBase_VineLeft 0x036 #define METATILE_General_SecretBase_VineRight 0x037 #define METATILE_General_RedCaveIndent 0x1A0 -#define METATILE_General_RedCaveOpen 0x1A1 +#define METATILE_General_RedCaveOpen 0x1A1 #define METATILE_General_YellowCaveIndent 0x1A8 #define METATILE_General_YellowCaveOpen 0x1A9 #define METATILE_General_BlueCaveIndent 0x1B0 @@ -99,6 +99,7 @@ #define METATILE_PetalburgGym_SlidingDoor_Frame2 0x21A #define METATILE_PetalburgGym_SlidingDoor_Frame3 0x21B #define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C +#define METATILE_PetalburgGym_Door 0x224 // gTileset_MossdeepGym from R/S #define METATILE_RS_MossdeepGym_RedArrow_Right 0x204 @@ -128,7 +129,6 @@ // gTileset_BattleFrontier #define METATILE_BattleFrontier_Door_Elevator 0x20E -#define METATILE_BattleFrontier_Door_Corridor 0x224 #define METATILE_BattleFrontier_Door_MultiCorridor 0x2AD #define METATILE_BattleFrontier_CorridorOpenDoor_Top 0x207 #define METATILE_BattleFrontier_CorridorOpenDoor_Bottom 0x20F @@ -182,22 +182,22 @@ #define METATILE_Cave_ShoalCave_BlueStone_Small 0x35B // gTileset_Pacifidlog -#define METATILE_Pacifidlog_Door 0x21A -#define METATILE_Pacifidlog_FloatingLogs_Horizontal0 0x250 -#define METATILE_Pacifidlog_FloatingLogs_Horizontal1 0x251 -#define METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0 0x252 -#define METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1 0x253 -#define METATILE_Pacifidlog_SubmergedLogs_Horizontal0 0x254 -#define METATILE_Pacifidlog_SubmergedLogs_Horizontal1 0x255 -#define METATILE_Pacifidlog_FloatingLogs_Vertical0 0x258 -#define METATILE_Pacifidlog_FloatingLogs_Vertical1 0x260 -#define METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0 0x259 -#define METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1 0x261 -#define METATILE_Pacifidlog_SubmergedLogs_Vertical0 0x25A -#define METATILE_Pacifidlog_SubmergedLogs_Vertical1 0x262 -#define METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole 0x237 -#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Top 0x2AA -#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom 0x2B2 +#define METATILE_Pacifidlog_Door 0x21A +#define METATILE_Pacifidlog_FloatingLogs_HorizontalLeft 0x250 +#define METATILE_Pacifidlog_FloatingLogs_HorizontalRight 0x251 +#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft 0x252 +#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight 0x253 +#define METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft 0x254 +#define METATILE_Pacifidlog_SubmergedLogs_HorizontalRight 0x255 +#define METATILE_Pacifidlog_FloatingLogs_VerticalTop 0x258 +#define METATILE_Pacifidlog_FloatingLogs_VerticalBottom 0x260 +#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop 0x259 +#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom 0x261 +#define METATILE_Pacifidlog_SubmergedLogs_VerticalTop 0x25A +#define METATILE_Pacifidlog_SubmergedLogs_VerticalBottom 0x262 +#define METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole 0x237 +#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Top 0x2AA +#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom 0x2B2 // gTileset_Fortree #define METATILE_Fortree_LongGrass_Root 0x208 @@ -352,6 +352,7 @@ #define METATILE_InsideShip_IntactDoor_Bottom_Interior 0x297 // gTileset_BattlePike +#define METATILE_BattlePike_CurtainFrames_Start 0x201 #define METATILE_BattlePike_Curtain_Stage0_Tile0 0x24A #define METATILE_BattlePike_Curtain_Stage0_Tile1 0x251 #define METATILE_BattlePike_Curtain_Stage0_Tile2 0x252 @@ -788,4 +789,8 @@ #define METATILE_SecretBase_SpikesMat_BottomMid 0x32A #define METATILE_SecretBase_SpikesMat_BottomRight 0x32B +// gTileset_BattlePyramid +#define METATILE_BattlePyramid_Floor 0x28D +#define METATILE_BattlePyramid_Exit 0x28E + #endif // GUARD_METATILE_LABELS_H diff --git a/include/constants/mevent.h b/include/constants/mevent.h deleted file mode 100644 index 25bbcdf368..0000000000 --- a/include/constants/mevent.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef GUARD_CONSTANTS_MEVENT_H -#define GUARD_CONSTANTS_MEVENT_H - -// mevent2.c -#define GET_NUM_STAMPS 0 -#define GET_MAX_STAMPS 1 -#define GET_CARD_BATTLES_WON 2 - -#define GET_NUM_STAMPS_INTERNAL 3 -#define GET_MAX_STAMPS_INTERNAL 4 -#define GET_CARD_BATTLES_WON_INTERNAL 0 - -#define REQUIRED_CARD_BATTLES 3 - -#endif //GUARD_MEVENT_H diff --git a/include/constants/moves.h b/include/constants/moves.h index dcec99da1c..75691de76a 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -781,9 +781,80 @@ #define MOVE_GLACIAL_LANCE 752 #define MOVE_ASTRAL_BARRAGE 753 #define MOVE_EERIE_SPELL 754 +// Legends: Arceus Moves +#define MOVE_DIRE_CLAW 755 +#define MOVE_PSYSHIELD_BASH 756 +#define MOVE_POWER_SHIFT 757 +#define MOVE_STONE_AXE 758 +#define MOVE_SPRINGTIDE_STORM 759 +#define MOVE_MYSTICAL_POWER 760 +#define MOVE_RAGING_FURY 761 +#define MOVE_WAVE_CRASH 762 +#define MOVE_CHLOROBLAST 763 +#define MOVE_MOUNTAIN_GALE 764 +#define MOVE_VICTORY_DANCE 765 +#define MOVE_HEADLONG_RUSH 766 +#define MOVE_BARB_BARRAGE 767 +#define MOVE_ESPER_WING 768 +#define MOVE_BITTER_MALICE 769 +#define MOVE_SHELTER 770 +#define MOVE_TRIPLE_ARROWS 771 +#define MOVE_INFERNAL_PARADE 772 +#define MOVE_CEASELESS_EDGE 773 +#define MOVE_BLEAKWIND_STORM 774 +#define MOVE_WILDBOLT_STORM 775 +#define MOVE_SANDSEAR_STORM 776 +#define MOVE_LUNAR_BLESSING 777 +#define MOVE_TAKE_HEART 778 -#define MOVES_COUNT_GEN8 755 +#define MOVES_COUNT_GEN8 779 -#define MOVES_COUNT MOVES_COUNT_GEN8 +#define MOVES_COUNT MOVES_COUNT_GEN8 + +// Z Moves +#define MOVE_BREAKNECK_BLITZ (MOVES_COUNT + 0) +#define MOVE_ALL_OUT_PUMMELING (MOVES_COUNT + 1) +#define MOVE_SUPERSONIC_SKYSTRIKE (MOVES_COUNT + 2) +#define MOVE_ACID_DOWNPOUR (MOVES_COUNT + 3) +#define MOVE_TECTONIC_RAGE (MOVES_COUNT + 4) +#define MOVE_CONTINENTAL_CRUSH (MOVES_COUNT + 5) +#define MOVE_SAVAGE_SPIN_OUT (MOVES_COUNT + 6) +#define MOVE_NEVER_ENDING_NIGHTMARE (MOVES_COUNT + 7) +#define MOVE_CORKSCREW_CRASH (MOVES_COUNT + 8) +#define MOVE_INFERNO_OVERDRIVE (MOVES_COUNT + 9) +#define MOVE_HYDRO_VORTEX (MOVES_COUNT + 10) +#define MOVE_BLOOM_DOOM (MOVES_COUNT + 11) +#define MOVE_GIGAVOLT_HAVOC (MOVES_COUNT + 12) +#define MOVE_SHATTERED_PSYCHE (MOVES_COUNT + 13) +#define MOVE_SUBZERO_SLAMMER (MOVES_COUNT + 14) +#define MOVE_DEVASTATING_DRAKE (MOVES_COUNT + 15) +#define MOVE_BLACK_HOLE_ECLIPSE (MOVES_COUNT + 16) +#define MOVE_TWINKLE_TACKLE (MOVES_COUNT + 17) +// Signature Z Moves +#define MOVE_CATASTROPIKA (MOVES_COUNT + 18) +#define MOVE_10000000_VOLT_THUNDERBOLT (MOVES_COUNT + 19) +#define MOVE_STOKED_SPARKSURFER (MOVES_COUNT + 20) +#define MOVE_EXTREME_EVOBOOST (MOVES_COUNT + 21) +#define MOVE_PULVERIZING_PANCAKE (MOVES_COUNT + 22) +#define MOVE_GENESIS_SUPERNOVA (MOVES_COUNT + 23) +#define MOVE_SINISTER_ARROW_RAID (MOVES_COUNT + 24) +#define MOVE_MALICIOUS_MOONSAULT (MOVES_COUNT + 25) +#define MOVE_OCEANIC_OPERETTA (MOVES_COUNT + 26) +#define MOVE_SPLINTERED_STORMSHARDS (MOVES_COUNT + 27) +#define MOVE_LETS_SNUGGLE_FOREVER (MOVES_COUNT + 28) +#define MOVE_CLANGOROUS_SOULBLAZE (MOVES_COUNT + 29) +#define MOVE_GUARDIAN_OF_ALOLA (MOVES_COUNT + 30) +#define MOVE_SEARING_SUNRAZE_SMASH (MOVES_COUNT + 31) +#define MOVE_MENACING_MOONRAZE_MAELSTROM (MOVES_COUNT + 32) +#define MOVE_LIGHT_THAT_BURNS_THE_SKY (MOVES_COUNT + 33) +#define MOVE_SOUL_STEALING_7_STAR_STRIKE (MOVES_COUNT + 34) + +#define FIRST_Z_MOVE MOVE_BREAKNECK_BLITZ +#define LAST_Z_MOVE MOVE_SOUL_STEALING_7_STAR_STRIKE + +#define MOVES_COUNT_Z (LAST_Z_MOVE + 1) + +// Used for checks for moves affected by Disable, Mimic, etc. +#define MOVE_UNAVAILABLE 0xFFFF #endif // GUARD_CONSTANTS_MOVES_H diff --git a/include/constants/mystery_gift.h b/include/constants/mystery_gift.h new file mode 100644 index 0000000000..8ff71c3aa1 --- /dev/null +++ b/include/constants/mystery_gift.h @@ -0,0 +1,47 @@ +#ifndef GUARD_CONSTANTS_MYSTERY_GIFT_H +#define GUARD_CONSTANTS_MYSTERY_GIFT_H + +#define GET_NUM_STAMPS 0 +#define GET_MAX_STAMPS 1 +#define GET_CARD_BATTLES_WON 2 +#define GET_CARD_BATTLES_LOST 3 +#define GET_CARD_NUM_TRADES 4 + +#define CARD_STAT_BATTLES_WON 0 +#define CARD_STAT_BATTLES_LOST 1 +#define CARD_STAT_NUM_TRADES 2 +#define CARD_STAT_NUM_STAMPS 3 +#define CARD_STAT_MAX_STAMPS 4 + +// Values for the type field of Wonder Card +#define CARD_TYPE_GIFT 0 // Normal "Wonder Card" +#define CARD_TYPE_STAMP 1 // "Stamp Card" +#define CARD_TYPE_LINK_STAT 2 // Referred to as the "Battle Card", shows battle and trade stats +#define CARD_TYPE_COUNT 3 + +// Values for the sendType field of Wonder Card/News +#define SEND_TYPE_DISALLOWED 0 +#define SEND_TYPE_ALLOWED 1 +#define SEND_TYPE_ALLOWED_ALWAYS 2 + +// Return values for MysteryGift_CompareCardFlags, handled by gMysteryGiftServerScript_SendWonderCard +#define HAS_NO_CARD 0 +#define HAS_SAME_CARD 1 +#define HAS_DIFF_CARD 2 + +// The number of battles needed to be recorded on a Battle Card to win a prize +#define REQUIRED_CARD_BATTLES 3 + +// Stamps are 32 bits. The first 16 bits are the species +// and the second 16 bits are a number (presumably an ID of some kind) +#define STAMP_SPECIES 0 +#define STAMP_ID 1 + +// Number of different types/colors of Wonder Card and News backgrounds +#define NUM_WONDER_BGS 8 + +#define MAX_WONDER_CARD_STAT 999 + +#define WONDER_CARD_FLAG_OFFSET 1000 + +#endif //GUARD_CONSTANTS_MYSTERY_GIFT_H diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h index 7953967ed7..2c632d30cf 100644 --- a/include/constants/party_menu.h +++ b/include/constants/party_menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_CONSTANTS_PARTY_MENU_H #define GUARD_CONSTANTS_PARTY_MENU_H +#define PARTY_NOTHING_CHOSEN 0xFF + #define AILMENT_NONE 0 #define AILMENT_PSN 1 #define AILMENT_PRZ 2 @@ -10,38 +12,6 @@ #define AILMENT_PKRS 6 #define AILMENT_FNT 7 -#define TUTOR_MOVE_MEGA_PUNCH 0 -#define TUTOR_MOVE_SWORDS_DANCE 1 -#define TUTOR_MOVE_MEGA_KICK 2 -#define TUTOR_MOVE_BODY_SLAM 3 -#define TUTOR_MOVE_DOUBLE_EDGE 4 -#define TUTOR_MOVE_COUNTER 5 -#define TUTOR_MOVE_SEISMIC_TOSS 6 -#define TUTOR_MOVE_MIMIC 7 -#define TUTOR_MOVE_METRONOME 8 -#define TUTOR_MOVE_SOFT_BOILED 9 -#define TUTOR_MOVE_DREAM_EATER 10 -#define TUTOR_MOVE_THUNDER_WAVE 11 -#define TUTOR_MOVE_EXPLOSION 12 -#define TUTOR_MOVE_ROCK_SLIDE 13 -#define TUTOR_MOVE_SUBSTITUTE 14 -#define TUTOR_MOVE_DYNAMIC_PUNCH 15 -#define TUTOR_MOVE_ROLLOUT 16 -#define TUTOR_MOVE_PSYCH_UP 17 -#define TUTOR_MOVE_SNORE 18 -#define TUTOR_MOVE_ICY_WIND 19 -#define TUTOR_MOVE_ENDURE 20 -#define TUTOR_MOVE_MUD_SLAP 21 -#define TUTOR_MOVE_ICE_PUNCH 22 -#define TUTOR_MOVE_SWAGGER 23 -#define TUTOR_MOVE_SLEEP_TALK 24 -#define TUTOR_MOVE_SWIFT 25 -#define TUTOR_MOVE_DEFENSE_CURL 26 -#define TUTOR_MOVE_THUNDER_PUNCH 27 -#define TUTOR_MOVE_FIRE_PUNCH 28 -#define TUTOR_MOVE_FURY_CUTTER 29 -#define TUTOR_MOVE_COUNT 30 - #define PARTY_LAYOUT_SINGLE 0 #define PARTY_LAYOUT_DOUBLE 1 #define PARTY_LAYOUT_MULTI 2 @@ -49,14 +19,14 @@ #define PARTY_LAYOUT_COUNT 4 #define KEEP_PARTY_LAYOUT 0xFF -#define PARTY_MENU_TYPE_FIELD 0 -#define PARTY_MENU_TYPE_IN_BATTLE 1 -#define PARTY_MENU_TYPE_CONTEST 2 -#define PARTY_MENU_TYPE_CHOOSE_MON 3 +#define PARTY_MENU_TYPE_FIELD 0 +#define PARTY_MENU_TYPE_IN_BATTLE 1 +#define PARTY_MENU_TYPE_CONTEST 2 +#define PARTY_MENU_TYPE_CHOOSE_MON 3 #define PARTY_MENU_TYPE_CHOOSE_HALF 4 // multi battles, eReader battles, and some battle facilities #define PARTY_MENU_TYPE_MULTI_SHOWCASE 5 -#define PARTY_MENU_TYPE_DAYCARE 6 -#define PARTY_MENU_TYPE_MOVE_RELEARNER 7 +#define PARTY_MENU_TYPE_DAYCARE 6 +#define PARTY_MENU_TYPE_MOVE_RELEARNER 7 #define PARTY_MENU_TYPE_UNION_ROOM_REGISTER 8 // trading board #define PARTY_MENU_TYPE_UNION_ROOM_TRADE 9 // trading board #define PARTY_MENU_TYPE_SPIN_TRADE 10 // Unused beta for Gen IV's Spin Trade @@ -68,7 +38,7 @@ #define PARTY_ACTION_CANT_SWITCH 2 #define PARTY_ACTION_USE_ITEM 3 #define PARTY_ACTION_ABILITY_PREVENTS 4 -#define PARTY_ACTION_GIVE_ITEM 5 +#define PARTY_ACTION_GIVE_ITEM 5 #define PARTY_ACTION_GIVE_PC_ITEM 6 // Unused. Not possible to give non-mail items directly from PC #define PARTY_ACTION_GIVE_MAILBOX_MAIL 7 #define PARTY_ACTION_SWITCH 8 @@ -83,7 +53,7 @@ #define PARTY_MSG_CHOOSE_MON 0 #define PARTY_MSG_CHOOSE_MON_OR_CANCEL 1 #define PARTY_MSG_CHOOSE_MON_AND_CONFIRM 2 -#define PARTY_MSG_MOVE_TO_WHERE 3 +#define PARTY_MSG_MOVE_TO_WHERE 3 #define PARTY_MSG_TEACH_WHICH_MON 4 #define PARTY_MSG_USE_ON_WHICH_MON 5 #define PARTY_MSG_GIVE_TO_WHICH_MON 6 diff --git a/include/constants/pokedex.h b/include/constants/pokedex.h new file mode 100644 index 0000000000..6b6582af09 --- /dev/null +++ b/include/constants/pokedex.h @@ -0,0 +1,1169 @@ +#ifndef GUARD_CONSTANTS_POKEDEX_H +#define GUARD_CONSTANTS_POKEDEX_H + +#include "constants/pokemon_config.h" +// National Pokedex order. Gen 4+ mons and forms are not disabled by P_NEW_POKEMON to keep pokedex_orders.h clean. +enum { + NATIONAL_DEX_NONE, + // Kanto + NATIONAL_DEX_BULBASAUR, + NATIONAL_DEX_IVYSAUR, + NATIONAL_DEX_VENUSAUR, + NATIONAL_DEX_CHARMANDER, + NATIONAL_DEX_CHARMELEON, + NATIONAL_DEX_CHARIZARD, + NATIONAL_DEX_SQUIRTLE, + NATIONAL_DEX_WARTORTLE, + NATIONAL_DEX_BLASTOISE, + NATIONAL_DEX_CATERPIE, + NATIONAL_DEX_METAPOD, + NATIONAL_DEX_BUTTERFREE, + NATIONAL_DEX_WEEDLE, + NATIONAL_DEX_KAKUNA, + NATIONAL_DEX_BEEDRILL, + NATIONAL_DEX_PIDGEY, + NATIONAL_DEX_PIDGEOTTO, + NATIONAL_DEX_PIDGEOT, + NATIONAL_DEX_RATTATA, + NATIONAL_DEX_RATICATE, + NATIONAL_DEX_SPEAROW, + NATIONAL_DEX_FEAROW, + NATIONAL_DEX_EKANS, + NATIONAL_DEX_ARBOK, + NATIONAL_DEX_PIKACHU, + NATIONAL_DEX_RAICHU, + NATIONAL_DEX_SANDSHREW, + NATIONAL_DEX_SANDSLASH, + NATIONAL_DEX_NIDORAN_F, + NATIONAL_DEX_NIDORINA, + NATIONAL_DEX_NIDOQUEEN, + NATIONAL_DEX_NIDORAN_M, + NATIONAL_DEX_NIDORINO, + NATIONAL_DEX_NIDOKING, + NATIONAL_DEX_CLEFAIRY, + NATIONAL_DEX_CLEFABLE, + NATIONAL_DEX_VULPIX, + NATIONAL_DEX_NINETALES, + NATIONAL_DEX_JIGGLYPUFF, + NATIONAL_DEX_WIGGLYTUFF, + NATIONAL_DEX_ZUBAT, + NATIONAL_DEX_GOLBAT, + NATIONAL_DEX_ODDISH, + NATIONAL_DEX_GLOOM, + NATIONAL_DEX_VILEPLUME, + NATIONAL_DEX_PARAS, + NATIONAL_DEX_PARASECT, + NATIONAL_DEX_VENONAT, + NATIONAL_DEX_VENOMOTH, + NATIONAL_DEX_DIGLETT, + NATIONAL_DEX_DUGTRIO, + NATIONAL_DEX_MEOWTH, + NATIONAL_DEX_PERSIAN, + NATIONAL_DEX_PSYDUCK, + NATIONAL_DEX_GOLDUCK, + NATIONAL_DEX_MANKEY, + NATIONAL_DEX_PRIMEAPE, + NATIONAL_DEX_GROWLITHE, + NATIONAL_DEX_ARCANINE, + NATIONAL_DEX_POLIWAG, + NATIONAL_DEX_POLIWHIRL, + NATIONAL_DEX_POLIWRATH, + NATIONAL_DEX_ABRA, + NATIONAL_DEX_KADABRA, + NATIONAL_DEX_ALAKAZAM, + NATIONAL_DEX_MACHOP, + NATIONAL_DEX_MACHOKE, + NATIONAL_DEX_MACHAMP, + NATIONAL_DEX_BELLSPROUT, + NATIONAL_DEX_WEEPINBELL, + NATIONAL_DEX_VICTREEBEL, + NATIONAL_DEX_TENTACOOL, + NATIONAL_DEX_TENTACRUEL, + NATIONAL_DEX_GEODUDE, + NATIONAL_DEX_GRAVELER, + NATIONAL_DEX_GOLEM, + NATIONAL_DEX_PONYTA, + NATIONAL_DEX_RAPIDASH, + NATIONAL_DEX_SLOWPOKE, + NATIONAL_DEX_SLOWBRO, + NATIONAL_DEX_MAGNEMITE, + NATIONAL_DEX_MAGNETON, + NATIONAL_DEX_FARFETCHD, + NATIONAL_DEX_DODUO, + NATIONAL_DEX_DODRIO, + NATIONAL_DEX_SEEL, + NATIONAL_DEX_DEWGONG, + NATIONAL_DEX_GRIMER, + NATIONAL_DEX_MUK, + NATIONAL_DEX_SHELLDER, + NATIONAL_DEX_CLOYSTER, + NATIONAL_DEX_GASTLY, + NATIONAL_DEX_HAUNTER, + NATIONAL_DEX_GENGAR, + NATIONAL_DEX_ONIX, + NATIONAL_DEX_DROWZEE, + NATIONAL_DEX_HYPNO, + NATIONAL_DEX_KRABBY, + NATIONAL_DEX_KINGLER, + NATIONAL_DEX_VOLTORB, + NATIONAL_DEX_ELECTRODE, + NATIONAL_DEX_EXEGGCUTE, + NATIONAL_DEX_EXEGGUTOR, + NATIONAL_DEX_CUBONE, + NATIONAL_DEX_MAROWAK, + NATIONAL_DEX_HITMONLEE, + NATIONAL_DEX_HITMONCHAN, + NATIONAL_DEX_LICKITUNG, + NATIONAL_DEX_KOFFING, + NATIONAL_DEX_WEEZING, + NATIONAL_DEX_RHYHORN, + NATIONAL_DEX_RHYDON, + NATIONAL_DEX_CHANSEY, + NATIONAL_DEX_TANGELA, + NATIONAL_DEX_KANGASKHAN, + NATIONAL_DEX_HORSEA, + NATIONAL_DEX_SEADRA, + NATIONAL_DEX_GOLDEEN, + NATIONAL_DEX_SEAKING, + NATIONAL_DEX_STARYU, + NATIONAL_DEX_STARMIE, + NATIONAL_DEX_MR_MIME, + NATIONAL_DEX_SCYTHER, + NATIONAL_DEX_JYNX, + NATIONAL_DEX_ELECTABUZZ, + NATIONAL_DEX_MAGMAR, + NATIONAL_DEX_PINSIR, + NATIONAL_DEX_TAUROS, + NATIONAL_DEX_MAGIKARP, + NATIONAL_DEX_GYARADOS, + NATIONAL_DEX_LAPRAS, + NATIONAL_DEX_DITTO, + NATIONAL_DEX_EEVEE, + NATIONAL_DEX_VAPOREON, + NATIONAL_DEX_JOLTEON, + NATIONAL_DEX_FLAREON, + NATIONAL_DEX_PORYGON, + NATIONAL_DEX_OMANYTE, + NATIONAL_DEX_OMASTAR, + NATIONAL_DEX_KABUTO, + NATIONAL_DEX_KABUTOPS, + NATIONAL_DEX_AERODACTYL, + NATIONAL_DEX_SNORLAX, + NATIONAL_DEX_ARTICUNO, + NATIONAL_DEX_ZAPDOS, + NATIONAL_DEX_MOLTRES, + NATIONAL_DEX_DRATINI, + NATIONAL_DEX_DRAGONAIR, + NATIONAL_DEX_DRAGONITE, + NATIONAL_DEX_MEWTWO, + NATIONAL_DEX_MEW, + // Johto + NATIONAL_DEX_CHIKORITA, + NATIONAL_DEX_BAYLEEF, + NATIONAL_DEX_MEGANIUM, + NATIONAL_DEX_CYNDAQUIL, + NATIONAL_DEX_QUILAVA, + NATIONAL_DEX_TYPHLOSION, + NATIONAL_DEX_TOTODILE, + NATIONAL_DEX_CROCONAW, + NATIONAL_DEX_FERALIGATR, + NATIONAL_DEX_SENTRET, + NATIONAL_DEX_FURRET, + NATIONAL_DEX_HOOTHOOT, + NATIONAL_DEX_NOCTOWL, + NATIONAL_DEX_LEDYBA, + NATIONAL_DEX_LEDIAN, + NATIONAL_DEX_SPINARAK, + NATIONAL_DEX_ARIADOS, + NATIONAL_DEX_CROBAT, + NATIONAL_DEX_CHINCHOU, + NATIONAL_DEX_LANTURN, + NATIONAL_DEX_PICHU, + NATIONAL_DEX_CLEFFA, + NATIONAL_DEX_IGGLYBUFF, + NATIONAL_DEX_TOGEPI, + NATIONAL_DEX_TOGETIC, + NATIONAL_DEX_NATU, + NATIONAL_DEX_XATU, + NATIONAL_DEX_MAREEP, + NATIONAL_DEX_FLAAFFY, + NATIONAL_DEX_AMPHAROS, + NATIONAL_DEX_BELLOSSOM, + NATIONAL_DEX_MARILL, + NATIONAL_DEX_AZUMARILL, + NATIONAL_DEX_SUDOWOODO, + NATIONAL_DEX_POLITOED, + NATIONAL_DEX_HOPPIP, + NATIONAL_DEX_SKIPLOOM, + NATIONAL_DEX_JUMPLUFF, + NATIONAL_DEX_AIPOM, + NATIONAL_DEX_SUNKERN, + NATIONAL_DEX_SUNFLORA, + NATIONAL_DEX_YANMA, + NATIONAL_DEX_WOOPER, + NATIONAL_DEX_QUAGSIRE, + NATIONAL_DEX_ESPEON, + NATIONAL_DEX_UMBREON, + NATIONAL_DEX_MURKROW, + NATIONAL_DEX_SLOWKING, + NATIONAL_DEX_MISDREAVUS, + NATIONAL_DEX_UNOWN, + NATIONAL_DEX_WOBBUFFET, + NATIONAL_DEX_GIRAFARIG, + NATIONAL_DEX_PINECO, + NATIONAL_DEX_FORRETRESS, + NATIONAL_DEX_DUNSPARCE, + NATIONAL_DEX_GLIGAR, + NATIONAL_DEX_STEELIX, + NATIONAL_DEX_SNUBBULL, + NATIONAL_DEX_GRANBULL, + NATIONAL_DEX_QWILFISH, + NATIONAL_DEX_SCIZOR, + NATIONAL_DEX_SHUCKLE, + NATIONAL_DEX_HERACROSS, + NATIONAL_DEX_SNEASEL, + NATIONAL_DEX_TEDDIURSA, + NATIONAL_DEX_URSARING, + NATIONAL_DEX_SLUGMA, + NATIONAL_DEX_MAGCARGO, + NATIONAL_DEX_SWINUB, + NATIONAL_DEX_PILOSWINE, + NATIONAL_DEX_CORSOLA, + NATIONAL_DEX_REMORAID, + NATIONAL_DEX_OCTILLERY, + NATIONAL_DEX_DELIBIRD, + NATIONAL_DEX_MANTINE, + NATIONAL_DEX_SKARMORY, + NATIONAL_DEX_HOUNDOUR, + NATIONAL_DEX_HOUNDOOM, + NATIONAL_DEX_KINGDRA, + NATIONAL_DEX_PHANPY, + NATIONAL_DEX_DONPHAN, + NATIONAL_DEX_PORYGON2, + NATIONAL_DEX_STANTLER, + NATIONAL_DEX_SMEARGLE, + NATIONAL_DEX_TYROGUE, + NATIONAL_DEX_HITMONTOP, + NATIONAL_DEX_SMOOCHUM, + NATIONAL_DEX_ELEKID, + NATIONAL_DEX_MAGBY, + NATIONAL_DEX_MILTANK, + NATIONAL_DEX_BLISSEY, + NATIONAL_DEX_RAIKOU, + NATIONAL_DEX_ENTEI, + NATIONAL_DEX_SUICUNE, + NATIONAL_DEX_LARVITAR, + NATIONAL_DEX_PUPITAR, + NATIONAL_DEX_TYRANITAR, + NATIONAL_DEX_LUGIA, + NATIONAL_DEX_HO_OH, + NATIONAL_DEX_CELEBI, + // Hoenn + NATIONAL_DEX_TREECKO, + NATIONAL_DEX_GROVYLE, + NATIONAL_DEX_SCEPTILE, + NATIONAL_DEX_TORCHIC, + NATIONAL_DEX_COMBUSKEN, + NATIONAL_DEX_BLAZIKEN, + NATIONAL_DEX_MUDKIP, + NATIONAL_DEX_MARSHTOMP, + NATIONAL_DEX_SWAMPERT, + NATIONAL_DEX_POOCHYENA, + NATIONAL_DEX_MIGHTYENA, + NATIONAL_DEX_ZIGZAGOON, + NATIONAL_DEX_LINOONE, + NATIONAL_DEX_WURMPLE, + NATIONAL_DEX_SILCOON, + NATIONAL_DEX_BEAUTIFLY, + NATIONAL_DEX_CASCOON, + NATIONAL_DEX_DUSTOX, + NATIONAL_DEX_LOTAD, + NATIONAL_DEX_LOMBRE, + NATIONAL_DEX_LUDICOLO, + NATIONAL_DEX_SEEDOT, + NATIONAL_DEX_NUZLEAF, + NATIONAL_DEX_SHIFTRY, + NATIONAL_DEX_TAILLOW, + NATIONAL_DEX_SWELLOW, + NATIONAL_DEX_WINGULL, + NATIONAL_DEX_PELIPPER, + NATIONAL_DEX_RALTS, + NATIONAL_DEX_KIRLIA, + NATIONAL_DEX_GARDEVOIR, + NATIONAL_DEX_SURSKIT, + NATIONAL_DEX_MASQUERAIN, + NATIONAL_DEX_SHROOMISH, + NATIONAL_DEX_BRELOOM, + NATIONAL_DEX_SLAKOTH, + NATIONAL_DEX_VIGOROTH, + NATIONAL_DEX_SLAKING, + NATIONAL_DEX_NINCADA, + NATIONAL_DEX_NINJASK, + NATIONAL_DEX_SHEDINJA, + NATIONAL_DEX_WHISMUR, + NATIONAL_DEX_LOUDRED, + NATIONAL_DEX_EXPLOUD, + NATIONAL_DEX_MAKUHITA, + NATIONAL_DEX_HARIYAMA, + NATIONAL_DEX_AZURILL, + NATIONAL_DEX_NOSEPASS, + NATIONAL_DEX_SKITTY, + NATIONAL_DEX_DELCATTY, + NATIONAL_DEX_SABLEYE, + NATIONAL_DEX_MAWILE, + NATIONAL_DEX_ARON, + NATIONAL_DEX_LAIRON, + NATIONAL_DEX_AGGRON, + NATIONAL_DEX_MEDITITE, + NATIONAL_DEX_MEDICHAM, + NATIONAL_DEX_ELECTRIKE, + NATIONAL_DEX_MANECTRIC, + NATIONAL_DEX_PLUSLE, + NATIONAL_DEX_MINUN, + NATIONAL_DEX_VOLBEAT, + NATIONAL_DEX_ILLUMISE, + NATIONAL_DEX_ROSELIA, + NATIONAL_DEX_GULPIN, + NATIONAL_DEX_SWALOT, + NATIONAL_DEX_CARVANHA, + NATIONAL_DEX_SHARPEDO, + NATIONAL_DEX_WAILMER, + NATIONAL_DEX_WAILORD, + NATIONAL_DEX_NUMEL, + NATIONAL_DEX_CAMERUPT, + NATIONAL_DEX_TORKOAL, + NATIONAL_DEX_SPOINK, + NATIONAL_DEX_GRUMPIG, + NATIONAL_DEX_SPINDA, + NATIONAL_DEX_TRAPINCH, + NATIONAL_DEX_VIBRAVA, + NATIONAL_DEX_FLYGON, + NATIONAL_DEX_CACNEA, + NATIONAL_DEX_CACTURNE, + NATIONAL_DEX_SWABLU, + NATIONAL_DEX_ALTARIA, + NATIONAL_DEX_ZANGOOSE, + NATIONAL_DEX_SEVIPER, + NATIONAL_DEX_LUNATONE, + NATIONAL_DEX_SOLROCK, + NATIONAL_DEX_BARBOACH, + NATIONAL_DEX_WHISCASH, + NATIONAL_DEX_CORPHISH, + NATIONAL_DEX_CRAWDAUNT, + NATIONAL_DEX_BALTOY, + NATIONAL_DEX_CLAYDOL, + NATIONAL_DEX_LILEEP, + NATIONAL_DEX_CRADILY, + NATIONAL_DEX_ANORITH, + NATIONAL_DEX_ARMALDO, + NATIONAL_DEX_FEEBAS, + NATIONAL_DEX_MILOTIC, + NATIONAL_DEX_CASTFORM, + NATIONAL_DEX_KECLEON, + NATIONAL_DEX_SHUPPET, + NATIONAL_DEX_BANETTE, + NATIONAL_DEX_DUSKULL, + NATIONAL_DEX_DUSCLOPS, + NATIONAL_DEX_TROPIUS, + NATIONAL_DEX_CHIMECHO, + NATIONAL_DEX_ABSOL, + NATIONAL_DEX_WYNAUT, + NATIONAL_DEX_SNORUNT, + NATIONAL_DEX_GLALIE, + NATIONAL_DEX_SPHEAL, + NATIONAL_DEX_SEALEO, + NATIONAL_DEX_WALREIN, + NATIONAL_DEX_CLAMPERL, + NATIONAL_DEX_HUNTAIL, + NATIONAL_DEX_GOREBYSS, + NATIONAL_DEX_RELICANTH, + NATIONAL_DEX_LUVDISC, + NATIONAL_DEX_BAGON, + NATIONAL_DEX_SHELGON, + NATIONAL_DEX_SALAMENCE, + NATIONAL_DEX_BELDUM, + NATIONAL_DEX_METANG, + NATIONAL_DEX_METAGROSS, + NATIONAL_DEX_REGIROCK, + NATIONAL_DEX_REGICE, + NATIONAL_DEX_REGISTEEL, + NATIONAL_DEX_LATIAS, + NATIONAL_DEX_LATIOS, + NATIONAL_DEX_KYOGRE, + NATIONAL_DEX_GROUDON, + NATIONAL_DEX_RAYQUAZA, + NATIONAL_DEX_JIRACHI, + NATIONAL_DEX_DEOXYS, + // Sinnoh + NATIONAL_DEX_TURTWIG, + NATIONAL_DEX_GROTLE, + NATIONAL_DEX_TORTERRA, + NATIONAL_DEX_CHIMCHAR, + NATIONAL_DEX_MONFERNO, + NATIONAL_DEX_INFERNAPE, + NATIONAL_DEX_PIPLUP, + NATIONAL_DEX_PRINPLUP, + NATIONAL_DEX_EMPOLEON, + NATIONAL_DEX_STARLY, + NATIONAL_DEX_STARAVIA, + NATIONAL_DEX_STARAPTOR, + NATIONAL_DEX_BIDOOF, + NATIONAL_DEX_BIBAREL, + NATIONAL_DEX_KRICKETOT, + NATIONAL_DEX_KRICKETUNE, + NATIONAL_DEX_SHINX, + NATIONAL_DEX_LUXIO, + NATIONAL_DEX_LUXRAY, + NATIONAL_DEX_BUDEW, + NATIONAL_DEX_ROSERADE, + NATIONAL_DEX_CRANIDOS, + NATIONAL_DEX_RAMPARDOS, + NATIONAL_DEX_SHIELDON, + NATIONAL_DEX_BASTIODON, + NATIONAL_DEX_BURMY, + NATIONAL_DEX_WORMADAM, + NATIONAL_DEX_MOTHIM, + NATIONAL_DEX_COMBEE, + NATIONAL_DEX_VESPIQUEN, + NATIONAL_DEX_PACHIRISU, + NATIONAL_DEX_BUIZEL, + NATIONAL_DEX_FLOATZEL, + NATIONAL_DEX_CHERUBI, + NATIONAL_DEX_CHERRIM, + NATIONAL_DEX_SHELLOS, + NATIONAL_DEX_GASTRODON, + NATIONAL_DEX_AMBIPOM, + NATIONAL_DEX_DRIFLOON, + NATIONAL_DEX_DRIFBLIM, + NATIONAL_DEX_BUNEARY, + NATIONAL_DEX_LOPUNNY, + NATIONAL_DEX_MISMAGIUS, + NATIONAL_DEX_HONCHKROW, + NATIONAL_DEX_GLAMEOW, + NATIONAL_DEX_PURUGLY, + NATIONAL_DEX_CHINGLING, + NATIONAL_DEX_STUNKY, + NATIONAL_DEX_SKUNTANK, + NATIONAL_DEX_BRONZOR, + NATIONAL_DEX_BRONZONG, + NATIONAL_DEX_BONSLY, + NATIONAL_DEX_MIME_JR, + NATIONAL_DEX_HAPPINY, + NATIONAL_DEX_CHATOT, + NATIONAL_DEX_SPIRITOMB, + NATIONAL_DEX_GIBLE, + NATIONAL_DEX_GABITE, + NATIONAL_DEX_GARCHOMP, + NATIONAL_DEX_MUNCHLAX, + NATIONAL_DEX_RIOLU, + NATIONAL_DEX_LUCARIO, + NATIONAL_DEX_HIPPOPOTAS, + NATIONAL_DEX_HIPPOWDON, + NATIONAL_DEX_SKORUPI, + NATIONAL_DEX_DRAPION, + NATIONAL_DEX_CROAGUNK, + NATIONAL_DEX_TOXICROAK, + NATIONAL_DEX_CARNIVINE, + NATIONAL_DEX_FINNEON, + NATIONAL_DEX_LUMINEON, + NATIONAL_DEX_MANTYKE, + NATIONAL_DEX_SNOVER, + NATIONAL_DEX_ABOMASNOW, + NATIONAL_DEX_WEAVILE, + NATIONAL_DEX_MAGNEZONE, + NATIONAL_DEX_LICKILICKY, + NATIONAL_DEX_RHYPERIOR, + NATIONAL_DEX_TANGROWTH, + NATIONAL_DEX_ELECTIVIRE, + NATIONAL_DEX_MAGMORTAR, + NATIONAL_DEX_TOGEKISS, + NATIONAL_DEX_YANMEGA, + NATIONAL_DEX_LEAFEON, + NATIONAL_DEX_GLACEON, + NATIONAL_DEX_GLISCOR, + NATIONAL_DEX_MAMOSWINE, + NATIONAL_DEX_PORYGON_Z, + NATIONAL_DEX_GALLADE, + NATIONAL_DEX_PROBOPASS, + NATIONAL_DEX_DUSKNOIR, + NATIONAL_DEX_FROSLASS, + NATIONAL_DEX_ROTOM, + NATIONAL_DEX_UXIE, + NATIONAL_DEX_MESPRIT, + NATIONAL_DEX_AZELF, + NATIONAL_DEX_DIALGA, + NATIONAL_DEX_PALKIA, + NATIONAL_DEX_HEATRAN, + NATIONAL_DEX_REGIGIGAS, + NATIONAL_DEX_GIRATINA, + NATIONAL_DEX_CRESSELIA, + NATIONAL_DEX_PHIONE, + NATIONAL_DEX_MANAPHY, + NATIONAL_DEX_DARKRAI, + NATIONAL_DEX_SHAYMIN, + NATIONAL_DEX_ARCEUS, + // Unova + NATIONAL_DEX_VICTINI, + NATIONAL_DEX_SNIVY, + NATIONAL_DEX_SERVINE, + NATIONAL_DEX_SERPERIOR, + NATIONAL_DEX_TEPIG, + NATIONAL_DEX_PIGNITE, + NATIONAL_DEX_EMBOAR, + NATIONAL_DEX_OSHAWOTT, + NATIONAL_DEX_DEWOTT, + NATIONAL_DEX_SAMUROTT, + NATIONAL_DEX_PATRAT, + NATIONAL_DEX_WATCHOG, + NATIONAL_DEX_LILLIPUP, + NATIONAL_DEX_HERDIER, + NATIONAL_DEX_STOUTLAND, + NATIONAL_DEX_PURRLOIN, + NATIONAL_DEX_LIEPARD, + NATIONAL_DEX_PANSAGE, + NATIONAL_DEX_SIMISAGE, + NATIONAL_DEX_PANSEAR, + NATIONAL_DEX_SIMISEAR, + NATIONAL_DEX_PANPOUR, + NATIONAL_DEX_SIMIPOUR, + NATIONAL_DEX_MUNNA, + NATIONAL_DEX_MUSHARNA, + NATIONAL_DEX_PIDOVE, + NATIONAL_DEX_TRANQUILL, + NATIONAL_DEX_UNFEZANT, + NATIONAL_DEX_BLITZLE, + NATIONAL_DEX_ZEBSTRIKA, + NATIONAL_DEX_ROGGENROLA, + NATIONAL_DEX_BOLDORE, + NATIONAL_DEX_GIGALITH, + NATIONAL_DEX_WOOBAT, + NATIONAL_DEX_SWOOBAT, + NATIONAL_DEX_DRILBUR, + NATIONAL_DEX_EXCADRILL, + NATIONAL_DEX_AUDINO, + NATIONAL_DEX_TIMBURR, + NATIONAL_DEX_GURDURR, + NATIONAL_DEX_CONKELDURR, + NATIONAL_DEX_TYMPOLE, + NATIONAL_DEX_PALPITOAD, + NATIONAL_DEX_SEISMITOAD, + NATIONAL_DEX_THROH, + NATIONAL_DEX_SAWK, + NATIONAL_DEX_SEWADDLE, + NATIONAL_DEX_SWADLOON, + NATIONAL_DEX_LEAVANNY, + NATIONAL_DEX_VENIPEDE, + NATIONAL_DEX_WHIRLIPEDE, + NATIONAL_DEX_SCOLIPEDE, + NATIONAL_DEX_COTTONEE, + NATIONAL_DEX_WHIMSICOTT, + NATIONAL_DEX_PETILIL, + NATIONAL_DEX_LILLIGANT, + NATIONAL_DEX_BASCULIN, + NATIONAL_DEX_SANDILE, + NATIONAL_DEX_KROKOROK, + NATIONAL_DEX_KROOKODILE, + NATIONAL_DEX_DARUMAKA, + NATIONAL_DEX_DARMANITAN, + NATIONAL_DEX_MARACTUS, + NATIONAL_DEX_DWEBBLE, + NATIONAL_DEX_CRUSTLE, + NATIONAL_DEX_SCRAGGY, + NATIONAL_DEX_SCRAFTY, + NATIONAL_DEX_SIGILYPH, + NATIONAL_DEX_YAMASK, + NATIONAL_DEX_COFAGRIGUS, + NATIONAL_DEX_TIRTOUGA, + NATIONAL_DEX_CARRACOSTA, + NATIONAL_DEX_ARCHEN, + NATIONAL_DEX_ARCHEOPS, + NATIONAL_DEX_TRUBBISH, + NATIONAL_DEX_GARBODOR, + NATIONAL_DEX_ZORUA, + NATIONAL_DEX_ZOROARK, + NATIONAL_DEX_MINCCINO, + NATIONAL_DEX_CINCCINO, + NATIONAL_DEX_GOTHITA, + NATIONAL_DEX_GOTHORITA, + NATIONAL_DEX_GOTHITELLE, + NATIONAL_DEX_SOLOSIS, + NATIONAL_DEX_DUOSION, + NATIONAL_DEX_REUNICLUS, + NATIONAL_DEX_DUCKLETT, + NATIONAL_DEX_SWANNA, + NATIONAL_DEX_VANILLITE, + NATIONAL_DEX_VANILLISH, + NATIONAL_DEX_VANILLUXE, + NATIONAL_DEX_DEERLING, + NATIONAL_DEX_SAWSBUCK, + NATIONAL_DEX_EMOLGA, + NATIONAL_DEX_KARRABLAST, + NATIONAL_DEX_ESCAVALIER, + NATIONAL_DEX_FOONGUS, + NATIONAL_DEX_AMOONGUSS, + NATIONAL_DEX_FRILLISH, + NATIONAL_DEX_JELLICENT, + NATIONAL_DEX_ALOMOMOLA, + NATIONAL_DEX_JOLTIK, + NATIONAL_DEX_GALVANTULA, + NATIONAL_DEX_FERROSEED, + NATIONAL_DEX_FERROTHORN, + NATIONAL_DEX_KLINK, + NATIONAL_DEX_KLANG, + NATIONAL_DEX_KLINKLANG, + NATIONAL_DEX_TYNAMO, + NATIONAL_DEX_EELEKTRIK, + NATIONAL_DEX_EELEKTROSS, + NATIONAL_DEX_ELGYEM, + NATIONAL_DEX_BEHEEYEM, + NATIONAL_DEX_LITWICK, + NATIONAL_DEX_LAMPENT, + NATIONAL_DEX_CHANDELURE, + NATIONAL_DEX_AXEW, + NATIONAL_DEX_FRAXURE, + NATIONAL_DEX_HAXORUS, + NATIONAL_DEX_CUBCHOO, + NATIONAL_DEX_BEARTIC, + NATIONAL_DEX_CRYOGONAL, + NATIONAL_DEX_SHELMET, + NATIONAL_DEX_ACCELGOR, + NATIONAL_DEX_STUNFISK, + NATIONAL_DEX_MIENFOO, + NATIONAL_DEX_MIENSHAO, + NATIONAL_DEX_DRUDDIGON, + NATIONAL_DEX_GOLETT, + NATIONAL_DEX_GOLURK, + NATIONAL_DEX_PAWNIARD, + NATIONAL_DEX_BISHARP, + NATIONAL_DEX_BOUFFALANT, + NATIONAL_DEX_RUFFLET, + NATIONAL_DEX_BRAVIARY, + NATIONAL_DEX_VULLABY, + NATIONAL_DEX_MANDIBUZZ, + NATIONAL_DEX_HEATMOR, + NATIONAL_DEX_DURANT, + NATIONAL_DEX_DEINO, + NATIONAL_DEX_ZWEILOUS, + NATIONAL_DEX_HYDREIGON, + NATIONAL_DEX_LARVESTA, + NATIONAL_DEX_VOLCARONA, + NATIONAL_DEX_COBALION, + NATIONAL_DEX_TERRAKION, + NATIONAL_DEX_VIRIZION, + NATIONAL_DEX_TORNADUS, + NATIONAL_DEX_THUNDURUS, + NATIONAL_DEX_RESHIRAM, + NATIONAL_DEX_ZEKROM, + NATIONAL_DEX_LANDORUS, + NATIONAL_DEX_KYUREM, + NATIONAL_DEX_KELDEO, + NATIONAL_DEX_MELOETTA, + NATIONAL_DEX_GENESECT, + // Kalos + NATIONAL_DEX_CHESPIN, + NATIONAL_DEX_QUILLADIN, + NATIONAL_DEX_CHESNAUGHT, + NATIONAL_DEX_FENNEKIN, + NATIONAL_DEX_BRAIXEN, + NATIONAL_DEX_DELPHOX, + NATIONAL_DEX_FROAKIE, + NATIONAL_DEX_FROGADIER, + NATIONAL_DEX_GRENINJA, + NATIONAL_DEX_BUNNELBY, + NATIONAL_DEX_DIGGERSBY, + NATIONAL_DEX_FLETCHLING, + NATIONAL_DEX_FLETCHINDER, + NATIONAL_DEX_TALONFLAME, + NATIONAL_DEX_SCATTERBUG, + NATIONAL_DEX_SPEWPA, + NATIONAL_DEX_VIVILLON, + NATIONAL_DEX_LITLEO, + NATIONAL_DEX_PYROAR, + NATIONAL_DEX_FLABEBE, + NATIONAL_DEX_FLOETTE, + NATIONAL_DEX_FLORGES, + NATIONAL_DEX_SKIDDO, + NATIONAL_DEX_GOGOAT, + NATIONAL_DEX_PANCHAM, + NATIONAL_DEX_PANGORO, + NATIONAL_DEX_FURFROU, + NATIONAL_DEX_ESPURR, + NATIONAL_DEX_MEOWSTIC, + NATIONAL_DEX_HONEDGE, + NATIONAL_DEX_DOUBLADE, + NATIONAL_DEX_AEGISLASH, + NATIONAL_DEX_SPRITZEE, + NATIONAL_DEX_AROMATISSE, + NATIONAL_DEX_SWIRLIX, + NATIONAL_DEX_SLURPUFF, + NATIONAL_DEX_INKAY, + NATIONAL_DEX_MALAMAR, + NATIONAL_DEX_BINACLE, + NATIONAL_DEX_BARBARACLE, + NATIONAL_DEX_SKRELP, + NATIONAL_DEX_DRAGALGE, + NATIONAL_DEX_CLAUNCHER, + NATIONAL_DEX_CLAWITZER, + NATIONAL_DEX_HELIOPTILE, + NATIONAL_DEX_HELIOLISK, + NATIONAL_DEX_TYRUNT, + NATIONAL_DEX_TYRANTRUM, + NATIONAL_DEX_AMAURA, + NATIONAL_DEX_AURORUS, + NATIONAL_DEX_SYLVEON, + NATIONAL_DEX_HAWLUCHA, + NATIONAL_DEX_DEDENNE, + NATIONAL_DEX_CARBINK, + NATIONAL_DEX_GOOMY, + NATIONAL_DEX_SLIGGOO, + NATIONAL_DEX_GOODRA, + NATIONAL_DEX_KLEFKI, + NATIONAL_DEX_PHANTUMP, + NATIONAL_DEX_TREVENANT, + NATIONAL_DEX_PUMPKABOO, + NATIONAL_DEX_GOURGEIST, + NATIONAL_DEX_BERGMITE, + NATIONAL_DEX_AVALUGG, + NATIONAL_DEX_NOIBAT, + NATIONAL_DEX_NOIVERN, + NATIONAL_DEX_XERNEAS, + NATIONAL_DEX_YVELTAL, + NATIONAL_DEX_ZYGARDE, + NATIONAL_DEX_DIANCIE, + NATIONAL_DEX_HOOPA, + NATIONAL_DEX_VOLCANION, + // Alola + NATIONAL_DEX_ROWLET, + NATIONAL_DEX_DARTRIX, + NATIONAL_DEX_DECIDUEYE, + NATIONAL_DEX_LITTEN, + NATIONAL_DEX_TORRACAT, + NATIONAL_DEX_INCINEROAR, + NATIONAL_DEX_POPPLIO, + NATIONAL_DEX_BRIONNE, + NATIONAL_DEX_PRIMARINA, + NATIONAL_DEX_PIKIPEK, + NATIONAL_DEX_TRUMBEAK, + NATIONAL_DEX_TOUCANNON, + NATIONAL_DEX_YUNGOOS, + NATIONAL_DEX_GUMSHOOS, + NATIONAL_DEX_GRUBBIN, + NATIONAL_DEX_CHARJABUG, + NATIONAL_DEX_VIKAVOLT, + NATIONAL_DEX_CRABRAWLER, + NATIONAL_DEX_CRABOMINABLE, + NATIONAL_DEX_ORICORIO, + NATIONAL_DEX_CUTIEFLY, + NATIONAL_DEX_RIBOMBEE, + NATIONAL_DEX_ROCKRUFF, + NATIONAL_DEX_LYCANROC, + NATIONAL_DEX_WISHIWASHI, + NATIONAL_DEX_MAREANIE, + NATIONAL_DEX_TOXAPEX, + NATIONAL_DEX_MUDBRAY, + NATIONAL_DEX_MUDSDALE, + NATIONAL_DEX_DEWPIDER, + NATIONAL_DEX_ARAQUANID, + NATIONAL_DEX_FOMANTIS, + NATIONAL_DEX_LURANTIS, + NATIONAL_DEX_MORELULL, + NATIONAL_DEX_SHIINOTIC, + NATIONAL_DEX_SALANDIT, + NATIONAL_DEX_SALAZZLE, + NATIONAL_DEX_STUFFUL, + NATIONAL_DEX_BEWEAR, + NATIONAL_DEX_BOUNSWEET, + NATIONAL_DEX_STEENEE, + NATIONAL_DEX_TSAREENA, + NATIONAL_DEX_COMFEY, + NATIONAL_DEX_ORANGURU, + NATIONAL_DEX_PASSIMIAN, + NATIONAL_DEX_WIMPOD, + NATIONAL_DEX_GOLISOPOD, + NATIONAL_DEX_SANDYGAST, + NATIONAL_DEX_PALOSSAND, + NATIONAL_DEX_PYUKUMUKU, + NATIONAL_DEX_TYPE_NULL, + NATIONAL_DEX_SILVALLY, + NATIONAL_DEX_MINIOR, + NATIONAL_DEX_KOMALA, + NATIONAL_DEX_TURTONATOR, + NATIONAL_DEX_TOGEDEMARU, + NATIONAL_DEX_MIMIKYU, + NATIONAL_DEX_BRUXISH, + NATIONAL_DEX_DRAMPA, + NATIONAL_DEX_DHELMISE, + NATIONAL_DEX_JANGMO_O, + NATIONAL_DEX_HAKAMO_O, + NATIONAL_DEX_KOMMO_O, + NATIONAL_DEX_TAPU_KOKO, + NATIONAL_DEX_TAPU_LELE, + NATIONAL_DEX_TAPU_BULU, + NATIONAL_DEX_TAPU_FINI, + NATIONAL_DEX_COSMOG, + NATIONAL_DEX_COSMOEM, + NATIONAL_DEX_SOLGALEO, + NATIONAL_DEX_LUNALA, + NATIONAL_DEX_NIHILEGO, + NATIONAL_DEX_BUZZWOLE, + NATIONAL_DEX_PHEROMOSA, + NATIONAL_DEX_XURKITREE, + NATIONAL_DEX_CELESTEELA, + NATIONAL_DEX_KARTANA, + NATIONAL_DEX_GUZZLORD, + NATIONAL_DEX_NECROZMA, + NATIONAL_DEX_MAGEARNA, + NATIONAL_DEX_MARSHADOW, + NATIONAL_DEX_POIPOLE, + NATIONAL_DEX_NAGANADEL, + NATIONAL_DEX_STAKATAKA, + NATIONAL_DEX_BLACEPHALON, + NATIONAL_DEX_ZERAORA, + // Unknown + NATIONAL_DEX_MELTAN, + NATIONAL_DEX_MELMETAL, + // Galar + NATIONAL_DEX_GROOKEY, + NATIONAL_DEX_THWACKEY, + NATIONAL_DEX_RILLABOOM, + NATIONAL_DEX_SCORBUNNY, + NATIONAL_DEX_RABOOT, + NATIONAL_DEX_CINDERACE, + NATIONAL_DEX_SOBBLE, + NATIONAL_DEX_DRIZZILE, + NATIONAL_DEX_INTELEON, + NATIONAL_DEX_SKWOVET, + NATIONAL_DEX_GREEDENT, + NATIONAL_DEX_ROOKIDEE, + NATIONAL_DEX_CORVISQUIRE, + NATIONAL_DEX_CORVIKNIGHT, + NATIONAL_DEX_BLIPBUG, + NATIONAL_DEX_DOTTLER, + NATIONAL_DEX_ORBEETLE, + NATIONAL_DEX_NICKIT, + NATIONAL_DEX_THIEVUL, + NATIONAL_DEX_GOSSIFLEUR, + NATIONAL_DEX_ELDEGOSS, + NATIONAL_DEX_WOOLOO, + NATIONAL_DEX_DUBWOOL, + NATIONAL_DEX_CHEWTLE, + NATIONAL_DEX_DREDNAW, + NATIONAL_DEX_YAMPER, + NATIONAL_DEX_BOLTUND, + NATIONAL_DEX_ROLYCOLY, + NATIONAL_DEX_CARKOL, + NATIONAL_DEX_COALOSSAL, + NATIONAL_DEX_APPLIN, + NATIONAL_DEX_FLAPPLE, + NATIONAL_DEX_APPLETUN, + NATIONAL_DEX_SILICOBRA, + NATIONAL_DEX_SANDACONDA, + NATIONAL_DEX_CRAMORANT, + NATIONAL_DEX_ARROKUDA, + NATIONAL_DEX_BARRASKEWDA, + NATIONAL_DEX_TOXEL, + NATIONAL_DEX_TOXTRICITY, + NATIONAL_DEX_SIZZLIPEDE, + NATIONAL_DEX_CENTISKORCH, + NATIONAL_DEX_CLOBBOPUS, + NATIONAL_DEX_GRAPPLOCT, + NATIONAL_DEX_SINISTEA, + NATIONAL_DEX_POLTEAGEIST, + NATIONAL_DEX_HATENNA, + NATIONAL_DEX_HATTREM, + NATIONAL_DEX_HATTERENE, + NATIONAL_DEX_IMPIDIMP, + NATIONAL_DEX_MORGREM, + NATIONAL_DEX_GRIMMSNARL, + NATIONAL_DEX_OBSTAGOON, + NATIONAL_DEX_PERRSERKER, + NATIONAL_DEX_CURSOLA, + NATIONAL_DEX_SIRFETCHD, + NATIONAL_DEX_MR_RIME, + NATIONAL_DEX_RUNERIGUS, + NATIONAL_DEX_MILCERY, + NATIONAL_DEX_ALCREMIE, + NATIONAL_DEX_FALINKS, + NATIONAL_DEX_PINCURCHIN, + NATIONAL_DEX_SNOM, + NATIONAL_DEX_FROSMOTH, + NATIONAL_DEX_STONJOURNER, + NATIONAL_DEX_EISCUE, + NATIONAL_DEX_INDEEDEE, + NATIONAL_DEX_MORPEKO, + NATIONAL_DEX_CUFANT, + NATIONAL_DEX_COPPERAJAH, + NATIONAL_DEX_DRACOZOLT, + NATIONAL_DEX_ARCTOZOLT, + NATIONAL_DEX_DRACOVISH, + NATIONAL_DEX_ARCTOVISH, + NATIONAL_DEX_DURALUDON, + NATIONAL_DEX_DREEPY, + NATIONAL_DEX_DRAKLOAK, + NATIONAL_DEX_DRAGAPULT, + NATIONAL_DEX_ZACIAN, + NATIONAL_DEX_ZAMAZENTA, + NATIONAL_DEX_ETERNATUS, + NATIONAL_DEX_KUBFU, + NATIONAL_DEX_URSHIFU, + NATIONAL_DEX_ZARUDE, + NATIONAL_DEX_REGIELEKI, + NATIONAL_DEX_REGIDRAGO, + NATIONAL_DEX_GLASTRIER, + NATIONAL_DEX_SPECTRIER, + NATIONAL_DEX_CALYREX, + NATIONAL_DEX_WYRDEER, + NATIONAL_DEX_KLEAVOR, + NATIONAL_DEX_URSALUNA, + NATIONAL_DEX_BASCULEGION, + NATIONAL_DEX_SNEASLER, + NATIONAL_DEX_OVERQWIL, + NATIONAL_DEX_ENAMORUS, +}; + +#define KANTO_DEX_COUNT NATIONAL_DEX_MEW +#define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI +#if P_NEW_POKEMON == TRUE +#define NATIONAL_DEX_COUNT NATIONAL_DEX_ENAMORUS +#else +#define NATIONAL_DEX_COUNT NATIONAL_DEX_DEOXYS +#endif +#define POKEMON_SLOTS_NUMBER (NATIONAL_DEX_COUNT + 1) + +// Hoenn Pokedex order +enum { + HOENN_DEX_NONE, + HOENN_DEX_TREECKO, + HOENN_DEX_GROVYLE, + HOENN_DEX_SCEPTILE, + HOENN_DEX_TORCHIC, + HOENN_DEX_COMBUSKEN, + HOENN_DEX_BLAZIKEN, + HOENN_DEX_MUDKIP, + HOENN_DEX_MARSHTOMP, + HOENN_DEX_SWAMPERT, + HOENN_DEX_POOCHYENA, + HOENN_DEX_MIGHTYENA, + HOENN_DEX_ZIGZAGOON, + HOENN_DEX_LINOONE, + HOENN_DEX_WURMPLE, + HOENN_DEX_SILCOON, + HOENN_DEX_BEAUTIFLY, + HOENN_DEX_CASCOON, + HOENN_DEX_DUSTOX, + HOENN_DEX_LOTAD, + HOENN_DEX_LOMBRE, + HOENN_DEX_LUDICOLO, + HOENN_DEX_SEEDOT, + HOENN_DEX_NUZLEAF, + HOENN_DEX_SHIFTRY, + HOENN_DEX_TAILLOW, + HOENN_DEX_SWELLOW, + HOENN_DEX_WINGULL, + HOENN_DEX_PELIPPER, + HOENN_DEX_RALTS, + HOENN_DEX_KIRLIA, + HOENN_DEX_GARDEVOIR, +#if P_NEW_POKEMON == TRUE + HOENN_DEX_GALLADE, +#endif + HOENN_DEX_SURSKIT, + HOENN_DEX_MASQUERAIN, + HOENN_DEX_SHROOMISH, + HOENN_DEX_BRELOOM, + HOENN_DEX_SLAKOTH, + HOENN_DEX_VIGOROTH, + HOENN_DEX_SLAKING, + HOENN_DEX_ABRA, + HOENN_DEX_KADABRA, + HOENN_DEX_ALAKAZAM, + HOENN_DEX_NINCADA, + HOENN_DEX_NINJASK, + HOENN_DEX_SHEDINJA, + HOENN_DEX_WHISMUR, + HOENN_DEX_LOUDRED, + HOENN_DEX_EXPLOUD, + HOENN_DEX_MAKUHITA, + HOENN_DEX_HARIYAMA, + HOENN_DEX_GOLDEEN, + HOENN_DEX_SEAKING, + HOENN_DEX_MAGIKARP, + HOENN_DEX_GYARADOS, + HOENN_DEX_AZURILL, + HOENN_DEX_MARILL, + HOENN_DEX_AZUMARILL, + HOENN_DEX_GEODUDE, + HOENN_DEX_GRAVELER, + HOENN_DEX_GOLEM, + HOENN_DEX_NOSEPASS, +#if P_NEW_POKEMON == TRUE + HOENN_DEX_PROBOPASS, +#endif + HOENN_DEX_SKITTY, + HOENN_DEX_DELCATTY, + HOENN_DEX_ZUBAT, + HOENN_DEX_GOLBAT, + HOENN_DEX_CROBAT, + HOENN_DEX_TENTACOOL, + HOENN_DEX_TENTACRUEL, + HOENN_DEX_SABLEYE, + HOENN_DEX_MAWILE, + HOENN_DEX_ARON, + HOENN_DEX_LAIRON, + HOENN_DEX_AGGRON, + HOENN_DEX_MACHOP, + HOENN_DEX_MACHOKE, + HOENN_DEX_MACHAMP, + HOENN_DEX_MEDITITE, + HOENN_DEX_MEDICHAM, + HOENN_DEX_ELECTRIKE, + HOENN_DEX_MANECTRIC, + HOENN_DEX_PLUSLE, + HOENN_DEX_MINUN, + HOENN_DEX_MAGNEMITE, + HOENN_DEX_MAGNETON, +#if P_NEW_POKEMON == TRUE + HOENN_DEX_MAGNEZONE, +#endif + HOENN_DEX_VOLTORB, + HOENN_DEX_ELECTRODE, + HOENN_DEX_VOLBEAT, + HOENN_DEX_ILLUMISE, + HOENN_DEX_ODDISH, + HOENN_DEX_GLOOM, + HOENN_DEX_VILEPLUME, + HOENN_DEX_BELLOSSOM, + HOENN_DEX_DODUO, + HOENN_DEX_DODRIO, +#if P_NEW_POKEMON == TRUE + HOENN_DEX_BUDEW, + HOENN_DEX_ROSELIA, + HOENN_DEX_ROSERADE, +#else + HOENN_DEX_ROSELIA, +#endif + HOENN_DEX_GULPIN, + HOENN_DEX_SWALOT, + HOENN_DEX_CARVANHA, + HOENN_DEX_SHARPEDO, + HOENN_DEX_WAILMER, + HOENN_DEX_WAILORD, + HOENN_DEX_NUMEL, + HOENN_DEX_CAMERUPT, + HOENN_DEX_SLUGMA, + HOENN_DEX_MAGCARGO, + HOENN_DEX_TORKOAL, + HOENN_DEX_GRIMER, + HOENN_DEX_MUK, + HOENN_DEX_KOFFING, + HOENN_DEX_WEEZING, + HOENN_DEX_SPOINK, + HOENN_DEX_GRUMPIG, + HOENN_DEX_SANDSHREW, + HOENN_DEX_SANDSLASH, + HOENN_DEX_SPINDA, + HOENN_DEX_SKARMORY, + HOENN_DEX_TRAPINCH, + HOENN_DEX_VIBRAVA, + HOENN_DEX_FLYGON, + HOENN_DEX_CACNEA, + HOENN_DEX_CACTURNE, + HOENN_DEX_SWABLU, + HOENN_DEX_ALTARIA, + HOENN_DEX_ZANGOOSE, + HOENN_DEX_SEVIPER, + HOENN_DEX_LUNATONE, + HOENN_DEX_SOLROCK, + HOENN_DEX_BARBOACH, + HOENN_DEX_WHISCASH, + HOENN_DEX_CORPHISH, + HOENN_DEX_CRAWDAUNT, + HOENN_DEX_BALTOY, + HOENN_DEX_CLAYDOL, + HOENN_DEX_LILEEP, + HOENN_DEX_CRADILY, + HOENN_DEX_ANORITH, + HOENN_DEX_ARMALDO, + HOENN_DEX_IGGLYBUFF, + HOENN_DEX_JIGGLYPUFF, + HOENN_DEX_WIGGLYTUFF, + HOENN_DEX_FEEBAS, + HOENN_DEX_MILOTIC, + HOENN_DEX_CASTFORM, + HOENN_DEX_STARYU, + HOENN_DEX_STARMIE, + HOENN_DEX_KECLEON, + HOENN_DEX_SHUPPET, + HOENN_DEX_BANETTE, + HOENN_DEX_DUSKULL, + HOENN_DEX_DUSCLOPS, +#if P_NEW_POKEMON == TRUE + HOENN_DEX_DUSKNOIR, + HOENN_DEX_TROPIUS, + HOENN_DEX_CHINGLING, +#else + HOENN_DEX_TROPIUS, +#endif + HOENN_DEX_CHIMECHO, + HOENN_DEX_ABSOL, + HOENN_DEX_VULPIX, + HOENN_DEX_NINETALES, + HOENN_DEX_PICHU, + HOENN_DEX_PIKACHU, + HOENN_DEX_RAICHU, + HOENN_DEX_PSYDUCK, + HOENN_DEX_GOLDUCK, + HOENN_DEX_WYNAUT, + HOENN_DEX_WOBBUFFET, + HOENN_DEX_NATU, + HOENN_DEX_XATU, + HOENN_DEX_GIRAFARIG, + HOENN_DEX_PHANPY, + HOENN_DEX_DONPHAN, + HOENN_DEX_PINSIR, + HOENN_DEX_HERACROSS, + HOENN_DEX_RHYHORN, + HOENN_DEX_RHYDON, +#if P_NEW_POKEMON == TRUE + HOENN_DEX_RHYPERIOR, +#endif + HOENN_DEX_SNORUNT, + HOENN_DEX_GLALIE, +#if P_NEW_POKEMON == TRUE + HOENN_DEX_FROSLASS, +#endif + HOENN_DEX_SPHEAL, + HOENN_DEX_SEALEO, + HOENN_DEX_WALREIN, + HOENN_DEX_CLAMPERL, + HOENN_DEX_HUNTAIL, + HOENN_DEX_GOREBYSS, + HOENN_DEX_RELICANTH, + HOENN_DEX_CORSOLA, + HOENN_DEX_CHINCHOU, + HOENN_DEX_LANTURN, + HOENN_DEX_LUVDISC, + HOENN_DEX_HORSEA, + HOENN_DEX_SEADRA, + HOENN_DEX_KINGDRA, + HOENN_DEX_BAGON, + HOENN_DEX_SHELGON, + HOENN_DEX_SALAMENCE, + HOENN_DEX_BELDUM, + HOENN_DEX_METANG, + HOENN_DEX_METAGROSS, + HOENN_DEX_REGIROCK, + HOENN_DEX_REGICE, + HOENN_DEX_REGISTEEL, + HOENN_DEX_LATIAS, + HOENN_DEX_LATIOS, + HOENN_DEX_KYOGRE, + HOENN_DEX_GROUDON, + HOENN_DEX_RAYQUAZA, + HOENN_DEX_JIRACHI, + HOENN_DEX_DEOXYS, +}; + +#define HOENN_DEX_COUNT (HOENN_DEX_DEOXYS + 1) + +#endif // GUARD_CONSTANTS_POKEDEX_H diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 9572745175..f5d0e9509e 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -79,11 +79,13 @@ #define STAT_SPEED 3 #define STAT_SPATK 4 #define STAT_SPDEF 5 +#define NUM_STATS 6 + #define STAT_ACC 6 // Only in battles. #define STAT_EVASION 7 // Only in battles. -#define NUM_NATURE_STATS NUM_STATS - 1 // excludes HP -#define NUM_BATTLE_STATS NUM_STATS + 2 // includes Accuracy and Evasion +#define NUM_NATURE_STATS (NUM_STATS - 1) // excludes HP +#define NUM_BATTLE_STATS (NUM_STATS + 2) // includes Accuracy and Evasion #define MIN_STAT_STAGE 0 #define DEFAULT_STAT_STAGE 6 @@ -92,97 +94,6 @@ // Shiny odds #define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536 -// Flags for Get(Box)MonData / Set(Box)MonData -#define MON_DATA_PERSONALITY 0 -#define MON_DATA_OT_ID 1 -#define MON_DATA_NICKNAME 2 -#define MON_DATA_LANGUAGE 3 -#define MON_DATA_SANITY_IS_BAD_EGG 4 -#define MON_DATA_SANITY_HAS_SPECIES 5 -#define MON_DATA_SANITY_IS_EGG 6 -#define MON_DATA_OT_NAME 7 -#define MON_DATA_MARKINGS 8 -#define MON_DATA_CHECKSUM 9 -#define MON_DATA_ENCRYPT_SEPARATOR 10 -#define MON_DATA_SPECIES 11 -#define MON_DATA_HELD_ITEM 12 -#define MON_DATA_MOVE1 13 -#define MON_DATA_MOVE2 14 -#define MON_DATA_MOVE3 15 -#define MON_DATA_MOVE4 16 -#define MON_DATA_PP1 17 -#define MON_DATA_PP2 18 -#define MON_DATA_PP3 19 -#define MON_DATA_PP4 20 -#define MON_DATA_PP_BONUSES 21 -#define MON_DATA_COOL 22 -#define MON_DATA_BEAUTY 23 -#define MON_DATA_CUTE 24 -#define MON_DATA_EXP 25 -#define MON_DATA_HP_EV 26 -#define MON_DATA_ATK_EV 27 -#define MON_DATA_DEF_EV 28 -#define MON_DATA_SPEED_EV 29 -#define MON_DATA_SPATK_EV 30 -#define MON_DATA_SPDEF_EV 31 -#define MON_DATA_FRIENDSHIP 32 -#define MON_DATA_SMART 33 -#define MON_DATA_POKERUS 34 -#define MON_DATA_MET_LOCATION 35 -#define MON_DATA_MET_LEVEL 36 -#define MON_DATA_MET_GAME 37 -#define MON_DATA_POKEBALL 38 -#define MON_DATA_HP_IV 39 -#define MON_DATA_ATK_IV 40 -#define MON_DATA_DEF_IV 41 -#define MON_DATA_SPEED_IV 42 -#define MON_DATA_SPATK_IV 43 -#define MON_DATA_SPDEF_IV 44 -#define MON_DATA_IS_EGG 45 -#define MON_DATA_ABILITY_NUM 46 -#define MON_DATA_TOUGH 47 -#define MON_DATA_SHEEN 48 -#define MON_DATA_OT_GENDER 49 -#define MON_DATA_COOL_RIBBON 50 -#define MON_DATA_BEAUTY_RIBBON 51 -#define MON_DATA_CUTE_RIBBON 52 -#define MON_DATA_SMART_RIBBON 53 -#define MON_DATA_TOUGH_RIBBON 54 -#define MON_DATA_STATUS 55 -#define MON_DATA_LEVEL 56 -#define MON_DATA_HP 57 -#define MON_DATA_MAX_HP 58 -#define MON_DATA_ATK 59 -#define MON_DATA_DEF 60 -#define MON_DATA_SPEED 61 -#define MON_DATA_SPATK 62 -#define MON_DATA_SPDEF 63 -#define MON_DATA_MAIL 64 -#define MON_DATA_SPECIES2 65 -#define MON_DATA_IVS 66 -#define MON_DATA_CHAMPION_RIBBON 67 -#define MON_DATA_WINNING_RIBBON 68 -#define MON_DATA_VICTORY_RIBBON 69 -#define MON_DATA_ARTIST_RIBBON 70 -#define MON_DATA_EFFORT_RIBBON 71 -#define MON_DATA_MARINE_RIBBON 72 -#define MON_DATA_LAND_RIBBON 73 -#define MON_DATA_SKY_RIBBON 74 -#define MON_DATA_COUNTRY_RIBBON 75 -#define MON_DATA_NATIONAL_RIBBON 76 -#define MON_DATA_EARTH_RIBBON 77 -#define MON_DATA_WORLD_RIBBON 78 -#define MON_DATA_UNUSED_RIBBONS 79 -#define MON_DATA_EVENT_LEGAL 80 -#define MON_DATA_KNOWN_MOVES 81 -#define MON_DATA_RIBBON_COUNT 82 -#define MON_DATA_RIBBONS 83 -#define MON_DATA_ATK2 84 -#define MON_DATA_DEF2 85 -#define MON_DATA_SPEED2 86 -#define MON_DATA_SPATK2 87 -#define MON_DATA_SPDEF2 88 - // Ribbon IDs used by TV and Pokénav #define CHAMPION_RIBBON 0 #define COOL_RIBBON_NORMAL 1 @@ -226,7 +137,7 @@ // 1 bit each in the Pokémon struct. Gen 4 hard-codes // each of these to the given name. In Gen 3 they're // used to get an index into giftRibbons in the save block, -// which can have a value 0-64 (0 is 'no ribbon') that +// which can have a value 0-64 (0 is 'no ribbon') that // corresponds to one of the special ribbons listed // in gGiftRibbonDescriptionPointers. Most of these were // never distributed @@ -271,22 +182,64 @@ #define FRIENDSHIP_EVENT_FAINT_FIELD_PSN 7 #define FRIENDSHIP_EVENT_FAINT_LARGE 8 // If opponent was >= 30 levels higher. See AdjustFriendshipOnBattleFaint -#define MAX_FRIENDSHIP 0xFF +// Constants for GetLeadMonFriendshipScore +#define FRIENDSHIP_NONE 0 +#define FRIENDSHIP_1_TO_49 1 +#define FRIENDSHIP_50_TO_99 2 +#define FRIENDSHIP_100_TO_149 3 +#define FRIENDSHIP_150_TO_199 4 +#define FRIENDSHIP_200_TO_254 5 +#define FRIENDSHIP_MAX 6 + +#define MAX_FRIENDSHIP 255 +#define MAX_SHEEN 255 +#define MAX_CONDITION 255 #define MAX_PER_STAT_IVS 31 #define MAX_IV_MASK 31 #define USE_RANDOM_IVS (MAX_PER_STAT_IVS + 1) #define MAX_PER_STAT_EVS 255 #define MAX_TOTAL_EVS 510 +#if I_VITAMIN_EV_CAP >= GEN_8 +#define EV_ITEM_RAISE_LIMIT MAX_PER_STAT_EVS +#else #define EV_ITEM_RAISE_LIMIT 100 +#endif // Battle move flags -#define FLAG_MAKES_CONTACT (1 << 0) -#define FLAG_PROTECT_AFFECTED (1 << 1) -#define FLAG_MAGIC_COAT_AFFECTED (1 << 2) -#define FLAG_SNATCH_AFFECTED (1 << 3) -#define FLAG_MIRROR_MOVE_AFFECTED (1 << 4) -#define FLAG_KINGS_ROCK_AFFECTED (1 << 5) +#define FLAG_MAKES_CONTACT (1 << 0) +#define FLAG_PROTECT_AFFECTED (1 << 1) +#define FLAG_MAGIC_COAT_AFFECTED (1 << 2) +#define FLAG_SNATCH_AFFECTED (1 << 3) +#define FLAG_MIRROR_MOVE_AFFECTED (1 << 4) +#define FLAG_KINGS_ROCK_AFFECTED (1 << 5) +#define FLAG_HIGH_CRIT (1 << 6) +#define FLAG_RECKLESS_BOOST (1 << 7) +#define FLAG_IRON_FIST_BOOST (1 << 8) +#define FLAG_SHEER_FORCE_BOOST (1 << 9) +#define FLAG_STRONG_JAW_BOOST (1 << 10) +#define FLAG_MEGA_LAUNCHER_BOOST (1 << 11) +#define FLAG_STAT_STAGES_IGNORED (1 << 12) +#define FLAG_DMG_MINIMIZE (1 << 13) +#define FLAG_DMG_UNDERGROUND (1 << 14) +#define FLAG_DMG_UNDERWATER (1 << 15) +#define FLAG_SOUND (1 << 16) +#define FLAG_BALLISTIC (1 << 17) +#define FLAG_PROTECTION_MOVE (1 << 18) +#define FLAG_POWDER (1 << 19) +#define FLAG_TARGET_ABILITY_IGNORED (1 << 20) +#define FLAG_DANCE (1 << 21) +#define FLAG_DMG_2X_IN_AIR (1 << 22) // If target is in the air, can hit and deal double damage. +#define FLAG_DMG_IN_AIR (1 << 23) // If target is in the air, can hit. +#define FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING (1 << 24) // Makes a Ground type move do 1x damage to flying and levitating targets +#define FLAG_THAW_USER (1 << 25) +#define FLAG_HIT_IN_SUBSTITUTE (1 << 26) // Hyperspace Fury +#define FLAG_TWO_STRIKES (1 << 27) // A move with this flag will strike twice, and may apply its effect on each hit + +// Split defines. +#define SPLIT_PHYSICAL 0x0 +#define SPLIT_SPECIAL 0x1 +#define SPLIT_STATUS 0x2 // Growth rates #define GROWTH_MEDIUM_FAST 0 @@ -346,14 +299,22 @@ #define EVO_LEVEL_DARK_TYPE_MON_IN_PARTY 30 // Pokémon reaches the specified level with a Dark Type Pokémon in party #define EVO_TRADE_SPECIFIC_MON 31 // Pokémon is traded for a specified Pokémon #define EVO_SPECIFIC_MAP 32 // Pokémon levels up on specified map +#define EVO_LEVEL_NATURE_AMPED 33 // Pokémon reaches the specified level, it has a Hardy, Brave, Adamant, Naughty, Docile, Impish, Lax, Hasty, Jolly, Naive, Rash, Sassy, or Quirky nature. +#define EVO_LEVEL_NATURE_LOW_KEY 34 // Pokémon reaches the specified level, it has a Lonely, Bold, Relaxed, Timid, Serious, Modest, Mild, Quiet, Bashful, Calm, Gentle, or Careful nature. +#define EVO_CRITICAL_HITS 35 // Pokémon performs specified number of critical hits in one battle +#define EVO_SCRIPT_TRIGGER_DMG 36 // Pokémon has specified HP below max, then player interacts trigger +#define EVO_DARK_SCROLL 37 // interacts with Scroll of Darkness +#define EVO_WATER_SCROLL 38 // interacts with Scroll of Waters #define EVOS_PER_MON 10 // 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_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 // Form change types #define FORM_CHANGE_END 0 @@ -367,8 +328,29 @@ #define NUM_MALE_LINK_FACILITY_CLASSES 8 #define NUM_FEMALE_LINK_FACILITY_CLASSES 8 -#define MON_PIC_SIZE (64 * 64 / 2) +#define MON_PIC_WIDTH 64 +#define MON_PIC_HEIGHT 64 +#define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2) -#define NUM_ABILITY_SLOTS 3 +#define BATTLE_ALIVE_EXCEPT_ACTIVE 0 +#define BATTLE_ALIVE_ATK_SIDE 1 +#define BATTLE_ALIVE_DEF_SIDE 2 + +#define SKIP_FRONT_ANIM (1 << 7) + +#define NUM_ABILITY_SLOTS (NUM_NORMAL_ABILITY_SLOTS + NUM_HIDDEN_ABILITY_SLOTS) +#define NUM_NORMAL_ABILITY_SLOTS 2 +#define NUM_HIDDEN_ABILITY_SLOTS 1 + +// Species Flags +#define FLAG_LEGENDARY (1 << 0) +#define FLAG_MYTHICAL (1 << 1) +#define FLAG_ULTRA_BEAST (1 << 2) +#define FLAG_ALOLAN_FORM (1 << 3) +#define FLAG_GALARIAN_FORM (1 << 4) +#define FLAG_HISUIAN_FORM (1 << 5) +#define FLAG_GENDER_DIFFERENCE (1 << 6) + +#define LEGENDARY_PERFECT_IV_COUNT 3 #endif // GUARD_CONSTANTS_POKEMON_H diff --git a/include/constants/pokemon_config.h b/include/constants/pokemon_config.h index 6d45eb9be8..879b755641 100644 --- a/include/constants/pokemon_config.h +++ b/include/constants/pokemon_config.h @@ -1,8 +1,6 @@ #ifndef GUARD_CONSTANTS_POKEMON_CONFIG_H #define GUARD_CONSTANTS_POKEMON_CONFIG_H -#include "constants/expansion_branches.h" - #ifndef GEN_3 #define GEN_3 0 #define GEN_4 1 @@ -12,162 +10,17 @@ #define GEN_8 5 #endif -#define P_UPDATED_TYPES GEN_8 // In Gen6+, several Pokémon were changed to be partially or fully Fairy type. +#define P_UPDATED_TYPES GEN_8 // Since Gen 6, several Pokémon were changed to be partially or fully Fairy type. #define P_UPDATED_STATS GEN_8 // Since Gen 6, Pokémon stats are updated with each passing generation. -#define P_UPDATED_ABILITIES GEN_8 // Since Gen 6, certain Pokémon have their abilities changed. Requires BATTLE_ENGINE for Gen4+ abilities. +#define P_UPDATED_ABILITIES GEN_8 // Since Gen 6, certain Pokémon have their abilities changed. #define P_UPDATED_EGG_GROUPS GEN_8 // Since Gen 8, certain Pokémon have gained new egg groups. #define P_SHEDINJA_BALL GEN_8 // Since Gen 4, Shedinja requires a Poké Ball for its evolution. In Gen 3, Shedinja inherits Nincada's Ball. +#define P_LEGENDARY_PERFECT_IVS GEN_8 // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs. +#define P_KADABRA_EVERSTONE GEN_8 // Since Gen 4, Kadabra can evolve even when holding an Everstone. +#define P_NIDORAN_M_DITTO_BREED GEN_8 // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat. -#ifndef ITEM_EXPANSION -//Item Definitions for gEvolutionTable +#define P_NEW_POKEMON TRUE // Turning this to FALSE will remove all newly added Pokémon and Forms. Only Unown, Castform and Deoxys forms will remain. -//EVO_MEGA_EVOLUTION -#define ITEM_VENUSAURITE ITEM_NONE -#define ITEM_CHARIZARDITE_X ITEM_NONE -#define ITEM_CHARIZARDITE_Y ITEM_NONE -#define ITEM_BLASTOISINITE ITEM_NONE -#define ITEM_BEEDRILLITE ITEM_NONE -#define ITEM_PIDGEOTITE ITEM_NONE -#define ITEM_ALAKAZITE ITEM_NONE -#define ITEM_SLOWBRONITE ITEM_NONE -#define ITEM_GENGARITE ITEM_NONE -#define ITEM_KANGASKHANITE ITEM_NONE -#define ITEM_PINSIRITE ITEM_NONE -#define ITEM_GYARADOSITE ITEM_NONE -#define ITEM_AERODACTYLITE ITEM_NONE -#define ITEM_MEWTWONITE_X ITEM_NONE -#define ITEM_MEWTWONITE_Y ITEM_NONE -#define ITEM_AMPHAROSITE ITEM_NONE -#define ITEM_STEELIXITE ITEM_NONE -#define ITEM_SCIZORITE ITEM_NONE -#define ITEM_HERACRONITE ITEM_NONE -#define ITEM_HOUNDOOMINITE ITEM_NONE -#define ITEM_TYRANITARITE ITEM_NONE -#define ITEM_SCEPTILITE ITEM_NONE -#define ITEM_BLAZIKENITE ITEM_NONE -#define ITEM_SWAMPERTITE ITEM_NONE -#define ITEM_SABLENITE ITEM_NONE -#define ITEM_SHARPEDONITE ITEM_NONE -#define ITEM_MANECTITE ITEM_NONE -#define ITEM_CAMERUPTITE ITEM_NONE -#define ITEM_GLALITITE ITEM_NONE -#define ITEM_MAWILITE ITEM_NONE -#define ITEM_MEDICHAMITE ITEM_NONE -#define ITEM_ALTARIANITE ITEM_NONE -#define ITEM_ABSOLITE ITEM_NONE -#define ITEM_BANETTITE ITEM_NONE -#define ITEM_AGGRONITE ITEM_NONE -#define ITEM_GARDEVOIRITE ITEM_NONE -#define ITEM_SALAMENCITE ITEM_NONE -#define ITEM_METAGROSSITE ITEM_NONE -#define ITEM_LATIASITE ITEM_NONE -#define ITEM_LATIOSITE ITEM_NONE -#define ITEM_LOPUNNITE ITEM_NONE -#define ITEM_GARCHOMPITE ITEM_NONE -#define ITEM_LUCARIONITE ITEM_NONE -#define ITEM_ABOMASITE ITEM_NONE -#define ITEM_GALLADITE ITEM_NONE -#define ITEM_AUDINITE ITEM_NONE -#define ITEM_DIANCITE ITEM_NONE - -//EVO_TRADE_ITEM -#define ITEM_PROTECTOR ITEM_NONE -#define ITEM_ELECTIRIZER ITEM_NONE -#define ITEM_MAGMARIZER ITEM_NONE -#define ITEM_DUBIOUS_DISC ITEM_NONE -#define ITEM_PRISM_SCALE ITEM_NONE -#define ITEM_REAPER_CLOTH ITEM_NONE -#define ITEM_SACHET ITEM_NONE -#define ITEM_WHIPPED_DREAM ITEM_NONE - -//EVO_ITEM -#define ITEM_ICE_STONE ITEM_NONE -#define ITEM_SHINY_STONE ITEM_NONE -#define ITEM_DUSK_STONE ITEM_NONE -#define ITEM_DAWN_STONE ITEM_NONE -#define ITEM_TART_APPLE ITEM_NONE -#define ITEM_SWEET_APPLE ITEM_NONE -#define ITEM_CRACKED_POT ITEM_NONE -#define ITEM_GALARICA_CUFF ITEM_NONE -#define ITEM_GALARICA_WREATH ITEM_NONE -#define ITEM_CHIPPED_POT ITEM_NONE - -//EVO_ITEM_HOLD -#define ITEM_RAZOR_FANG ITEM_NONE -#define ITEM_RAZOR_CLAW ITEM_NONE -#define ITEM_OVAL_STONE ITEM_NONE - -//FORM_ITEM_HOLD -#define ITEM_GRISEOUS_ORB ITEM_NONE -#define ITEM_DRACO_PLATE ITEM_NONE -#define ITEM_DREAD_PLATE ITEM_NONE -#define ITEM_EARTH_PLATE ITEM_NONE -#define ITEM_FIST_PLATE ITEM_NONE -#define ITEM_FLAME_PLATE ITEM_NONE -#define ITEM_ICICLE_PLATE ITEM_NONE -#define ITEM_INSECT_PLATE ITEM_NONE -#define ITEM_IRON_PLATE ITEM_NONE -#define ITEM_MEADOW_PLATE ITEM_NONE -#define ITEM_MIND_PLATE ITEM_NONE -#define ITEM_PIXIE_PLATE ITEM_NONE -#define ITEM_SKY_PLATE ITEM_NONE -#define ITEM_SPLASH_PLATE ITEM_NONE -#define ITEM_SPOOKY_PLATE ITEM_NONE -#define ITEM_STONE_PLATE ITEM_NONE -#define ITEM_TOXIC_PLATE ITEM_NONE -#define ITEM_ZAP_PLATE ITEM_NONE -#define ITEM_FIGHTINIUM_Z ITEM_NONE -#define ITEM_FLYINIUM_Z ITEM_NONE -#define ITEM_POISONIUM_Z ITEM_NONE -#define ITEM_GROUNDIUM_Z ITEM_NONE -#define ITEM_ROCKIUM_Z ITEM_NONE -#define ITEM_BUGINIUM_Z ITEM_NONE -#define ITEM_GHOSTIUM_Z ITEM_NONE -#define ITEM_STEELIUM_Z ITEM_NONE -#define ITEM_FIRIUM_Z ITEM_NONE -#define ITEM_WATERIUM_Z ITEM_NONE -#define ITEM_GRASSIUM_Z ITEM_NONE -#define ITEM_ELECTRIUM_Z ITEM_NONE -#define ITEM_PSYCHIUM_Z ITEM_NONE -#define ITEM_ICIUM_Z ITEM_NONE -#define ITEM_DRAGONIUM_Z ITEM_NONE -#define ITEM_DARKINIUM_Z ITEM_NONE -#define ITEM_FAIRIUM_Z ITEM_NONE -#define ITEM_DOUSE_DRIVE ITEM_NONE -#define ITEM_SHOCK_DRIVE ITEM_NONE -#define ITEM_BURN_DRIVE ITEM_NONE -#define ITEM_CHILL_DRIVE ITEM_NONE -#define ITEM_BUG_MEMORY ITEM_NONE -#define ITEM_DARK_MEMORY ITEM_NONE -#define ITEM_DRAGON_MEMORY ITEM_NONE -#define ITEM_ELECTRIC_MEMORY ITEM_NONE -#define ITEM_FAIRY_MEMORY ITEM_NONE -#define ITEM_FIGHTING_MEMORY ITEM_NONE -#define ITEM_FIRE_MEMORY ITEM_NONE -#define ITEM_FLYING_MEMORY ITEM_NONE -#define ITEM_GHOST_MEMORY ITEM_NONE -#define ITEM_GRASS_MEMORY ITEM_NONE -#define ITEM_GROUND_MEMORY ITEM_NONE -#define ITEM_ICE_MEMORY ITEM_NONE -#define ITEM_POISON_MEMORY ITEM_NONE -#define ITEM_PSYCHIC_MEMORY ITEM_NONE -#define ITEM_ROCK_MEMORY ITEM_NONE -#define ITEM_STEEL_MEMORY ITEM_NONE -#define ITEM_WATER_MEMORY ITEM_NONE - -//FORM_ITEM_USE -#define ITEM_GRACIDEA ITEM_NONE -// #define ITEM_REVEAL_GLASS ITEM_NONE -// #define ITEM_PRISON_BOTTLE ITEM_NONE -#define ITEM_RED_NECTAR ITEM_NONE -#define ITEM_YELLOW_NECTAR ITEM_NONE -#define ITEM_PINK_NECTAR ITEM_NONE -#define ITEM_PURPLE_NECTAR ITEM_NONE -#endif // ITEM_EXPANSION - -#ifndef BATTLE_ENGINE -#define ABILITY_MULTITYPE ABILITY_NONE -#define ABILITY_RKS_SYSTEM ABILITY_NONE -#endif // BATTLE_ENGINE +#define P_ENABLE_DEBUG TRUE // Enables a debug menu for pokemon sprites and icons, accessed by pressing SELECT in the summary screen. #endif // GUARD_CONSTANTS_POKEMON_CONFIG_H diff --git a/include/constants/pokemon_debug.h b/include/constants/pokemon_debug.h new file mode 100644 index 0000000000..c75392bf22 --- /dev/null +++ b/include/constants/pokemon_debug.h @@ -0,0 +1,53 @@ +#ifndef GUARD_CONSTANTS_POKEMON_DEBUG_H +#define GUARD_CONSTANTS_POKEMON_DEBUG_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 MODIFY_DIGITS_MAX 4 +#define MODIFY_DIGITS_ARROW_X 129 +#define MODIFY_DIGITS_ARROW1_Y 94 +#define MODIFY_DIGITS_ARROW2_Y 113 + +#define OPTIONS_ARROW_1_X 4 +#define OPTIONS_ARROW_2_X 236 +#define OPTIONS_ARROW_Y 119 + +#define GENDER_MALE 0 +#define GENDER_FEMALE 1 +#define MON_PIC_BACK 0 +#define MON_PIC_FRONT 1 + +//Sprite offset +#define MAX_Y_OFFSET 20 + +//Windows +#define WIN_NAME_NUMBERS 0 +#define WIN_INSTRUCTIONS 1 +#define WIN_BOTTOM_LEFT 2 +#define WIN_BOTTOM_RIGHT 3 +#define WIN_FOOTPRINT 4 +#define WIN_END 5 + +//Battle backgrounds +#define MAP_BATTLE_SCENE_NORMAL 0 +#define MAP_BATTLE_SCENE_GYM 1 +#define MAP_BATTLE_SCENE_MAGMA 2 +#define MAP_BATTLE_SCENE_AQUA 3 +#define MAP_BATTLE_SCENE_SIDNEY 4 +#define MAP_BATTLE_SCENE_PHOEBE 5 +#define MAP_BATTLE_SCENE_GLACIA 6 +#define MAP_BATTLE_SCENE_DRAKE 7 +#define MAP_BATTLE_SCENE_FRONTIER 8 +#define MAP_BATTLE_SCENE_LEADER 9 +#define MAP_BATTLE_SCENE_WALLACE 10 +#define MAP_BATTLE_SCENE_GROUDON 11 +#define MAP_BATTLE_SCENE_KYOGRE 12 +#define MAP_BATTLE_SCENE_RAYQUAZA 13 + +#endif // GUARD_CONSTANTS_POKEMON_DEBUG_H \ No newline at end of file diff --git a/include/constants/region_map_sections.h b/include/constants/region_map_sections.h index 65aa3e1ca8..5b8029acf5 100644 --- a/include/constants/region_map_sections.h +++ b/include/constants/region_map_sections.h @@ -100,8 +100,8 @@ #define MAPSEC_CINNABAR_ISLAND 0x60 #define MAPSEC_INDIGO_PLATEAU 0x61 #define MAPSEC_SAFFRON_CITY 0x62 -#define MAPSEC_ROUTE_4_FLYDUP 0x63 -#define MAPSEC_ROUTE_10_FLYDUP 0x64 +#define MAPSEC_ROUTE_4_POKECENTER 0x63 +#define MAPSEC_ROUTE_10_POKECENTER 0x64 #define MAPSEC_ROUTE_1 0x65 #define MAPSEC_ROUTE_2 0x66 #define MAPSEC_ROUTE_3 0x67 diff --git a/include/constants/script_menu.h b/include/constants/script_menu.h index 928ca00e06..c58df7335f 100644 --- a/include/constants/script_menu.h +++ b/include/constants/script_menu.h @@ -65,7 +65,7 @@ #define MULTI_RIGHTLEFT 54 #define MULTI_GAME_CORNER_TMS 55 #define MULTI_SSTIDAL_SLATEPORT_NO_BF 56 -#define MULTI_FLOORS 57 +#define MULTI_FLOORS 57 #define MULTI_SHARDS_R 58 #define MULTI_SHARDS_Y 59 #define MULTI_SHARDS_RY 60 @@ -82,9 +82,9 @@ #define MULTI_SHARDS_YBG 71 #define MULTI_SHARDS_RYBG 72 #define MULTI_TOURNEY_WITH_RECORD 73 -#define MULTI_CABLE_CLUB_NO_RECORD_MIX 74 +#define MULTI_CABLE_CLUB_NO_RECORD_MIX 74 #define MULTI_WIRELESS_NO_RECORD_BERRY 75 -#define MULTI_CABLE_CLUB_WITH_RECORD_MIX 76 +#define MULTI_CABLE_CLUB_WITH_RECORD_MIX 76 #define MULTI_WIRELESS_NO_BERRY 77 #define MULTI_WIRELESS_NO_RECORD 78 #define MULTI_WIRELESS_ALL_SERVICES 79 diff --git a/include/constants/slot_machine.h b/include/constants/slot_machine.h index 81848f2084..865d7e5d0b 100644 --- a/include/constants/slot_machine.h +++ b/include/constants/slot_machine.h @@ -3,4 +3,13 @@ #define SLOT_MACHINE_COUNT 12 +// Slot machine IDs +#define SLOT_MACHINE_UNLUCKIEST 0 +#define SLOT_MACHINE_UNLUCKIER 1 +#define SLOT_MACHINE_UNLUCKY 2 +#define SLOT_MACHINE_LUCKY 3 +#define SLOT_MACHINE_LUCKIER 4 +#define SLOT_MACHINE_LUCKIEST 5 +#define NUM_SLOT_MACHINE_IDS 6 + #endif // GUARD_CONSTANTS_SLOT_MACHINE_H diff --git a/include/constants/songs.h b/include/constants/songs.h index a78ee6fafe..d6a4184959 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -267,7 +267,7 @@ #define SE_RG_HELP_ERROR 259 // SE_RG_HELP_NG #define SE_RG_DEOXYS_MOVE 260 // SE_RG_DEOMOV #define SE_RG_POKE_JUMP_SUCCESS 261 // SE_RG_EXCELLENT -#define SE_RG_POKE_JUMP_FAILURE 262 // SE_RG_NAWAMISS +#define SE_RG_POKE_JUMP_FAILURE 262 // SE_RG_NAWAMISS // New Emerald SFX #define SE_POKENAV_CALL 263 // SE_TOREEYE #define SE_POKENAV_HANG_UP 264 // SE_TOREOFF diff --git a/include/constants/sound.h b/include/constants/sound.h new file mode 100644 index 0000000000..dc434bcf8a --- /dev/null +++ b/include/constants/sound.h @@ -0,0 +1,48 @@ +#ifndef GUARD_CONSTANTS_SOUND_H +#define GUARD_CONSTANTS_SOUND_H + +#define FANFARE_LEVEL_UP 0 +#define FANFARE_OBTAIN_ITEM 1 +#define FANFARE_EVOLVED 2 +#define FANFARE_OBTAIN_TMHM 3 +#define FANFARE_HEAL 4 +#define FANFARE_OBTAIN_BADGE 5 +#define FANFARE_MOVE_DELETED 6 +#define FANFARE_OBTAIN_BERRY 7 +#define FANFARE_AWAKEN_LEGEND 8 +#define FANFARE_SLOTS_JACKPOT 9 +#define FANFARE_SLOTS_WIN 10 +#define FANFARE_TOO_BAD 11 +#define FANFARE_RG_POKE_FLUTE 12 +#define FANFARE_RG_OBTAIN_KEY_ITEM 13 +#define FANFARE_RG_DEX_RATING 14 +#define FANFARE_OBTAIN_B_POINTS 15 +#define FANFARE_OBTAIN_SYMBOL 16 +#define FANFARE_REGISTER_MATCH_CALL 17 + +#define CRY_MODE_NORMAL 0 // Default +#define CRY_MODE_DOUBLES 1 // Shortened cry for double battles +#define CRY_MODE_ENCOUNTER 2 // Used when starting a static encounter, or when a Pokémon is "aggressive" +#define CRY_MODE_HIGH_PITCH 3 // Highest pitch mode, used exclusively by the move Howl +#define CRY_MODE_ECHO_START 4 // For 1st half of cry used by the move Hyper Voice. Played in reverse +#define CRY_MODE_FAINT 5 // Used when a Pokémon faints +#define CRY_MODE_ECHO_END 6 // For 2nd half of cry used by the move Hyper Voice +#define CRY_MODE_ROAR_1 7 // For 1st cry used by the move Roar +#define CRY_MODE_ROAR_2 8 // For 2nd cry used by the move Roar +#define CRY_MODE_GROWL_1 9 // For 1st cry used by the move Growl. Played in reverse +#define CRY_MODE_GROWL_2 10 // For 2nd cry used by the move Growl +#define CRY_MODE_WEAK 11 // Used when a Pokémon is unhealthy +#define CRY_MODE_WEAK_DOUBLES 12 // Equivalent to CRY_MODE_DOUBLES for CRY_MODE_WEAK + +// Given to SoundTask_PlayDoubleCry to determine which cry mode to use. Values are arbitrary +#define DOUBLE_CRY_ROAR 2 +#define DOUBLE_CRY_GROWL 255 + +#define CRY_PRIORITY_NORMAL 10 +#define CRY_PRIORITY_AMBIENT 1 + +// Cry volume was changed from 125 in R/S to 120 for FRLG/Em, but was (accidentally?) not updated outside of sound.c +#define CRY_VOLUME 120 +#define CRY_VOLUME_RS 125 + +#endif // GUARD_CONSTANTS_SOUND_H diff --git a/include/constants/species.h b/include/constants/species.h index 5a410aa5b0..976b303028 100644 --- a/include/constants/species.h +++ b/include/constants/species.h @@ -1,6 +1,8 @@ #ifndef GUARD_CONSTANTS_SPECIES_H #define GUARD_CONSTANTS_SPECIES_H +#include "constants/pokemon_config.h" + #define SPECIES_NONE 0 #define SPECIES_BULBASAUR 1 #define SPECIES_IVYSAUR 2 @@ -900,8 +902,13 @@ #define SPECIES_GLASTRIER 896 #define SPECIES_SPECTRIER 897 #define SPECIES_CALYREX 898 - -#define FORMS_START SPECIES_CALYREX +#define SPECIES_WYRDEER 899 +#define SPECIES_KLEAVOR 900 +#define SPECIES_URSALUNA 901 +#define SPECIES_BASCULEGION 902 +#define SPECIES_SNEASLER 903 +#define SPECIES_OVERQWIL 904 +#define SPECIES_ENAMORUS 905 // Megas #define SPECIES_VENUSAUR_MEGA FORMS_START + 1 @@ -998,1482 +1005,421 @@ #define SPECIES_YAMASK_GALARIAN FORMS_START + 86 #define SPECIES_STUNFISK_GALARIAN FORMS_START + 87 +//Hisuian Forms +#define SPECIES_GROWLITHE_HISUIAN FORMS_START + 88 +#define SPECIES_ARCANINE_HISUIAN FORMS_START + 89 +#define SPECIES_VOLTORB_HISUIAN FORMS_START + 90 +#define SPECIES_ELECTRODE_HISUIAN FORMS_START + 91 +#define SPECIES_TYPHLOSION_HISUIAN FORMS_START + 92 +#define SPECIES_QWILFISH_HISUIAN FORMS_START + 93 +#define SPECIES_SNEASEL_HISUIAN FORMS_START + 94 +#define SPECIES_SAMUROTT_HISUIAN FORMS_START + 95 +#define SPECIES_LILLIGANT_HISUIAN FORMS_START + 96 +#define SPECIES_ZORUA_HISUIAN FORMS_START + 97 +#define SPECIES_ZOROARK_HISUIAN FORMS_START + 98 +#define SPECIES_BRAVIARY_HISUIAN FORMS_START + 99 +#define SPECIES_SLIGGOO_HISUIAN FORMS_START + 100 +#define SPECIES_GOODRA_HISUIAN FORMS_START + 101 +#define SPECIES_AVALUGG_HISUIAN FORMS_START + 102 +#define SPECIES_DECIDUEYE_HISUIAN FORMS_START + 103 + // Misc Forms // Cosplay Pikachu -#define SPECIES_PIKACHU_COSPLAY FORMS_START + 88 -#define SPECIES_PIKACHU_ROCK_STAR FORMS_START + 89 -#define SPECIES_PIKACHU_BELLE FORMS_START + 90 -#define SPECIES_PIKACHU_POP_STAR FORMS_START + 91 -#define SPECIES_PIKACHU_PH_D FORMS_START + 92 -#define SPECIES_PIKACHU_LIBRE FORMS_START + 93 +#define SPECIES_PIKACHU_COSPLAY FORMS_START + 104 +#define SPECIES_PIKACHU_ROCK_STAR FORMS_START + 105 +#define SPECIES_PIKACHU_BELLE FORMS_START + 106 +#define SPECIES_PIKACHU_POP_STAR FORMS_START + 107 +#define SPECIES_PIKACHU_PH_D FORMS_START + 108 +#define SPECIES_PIKACHU_LIBRE FORMS_START + 109 // Cap Pikachu -#define SPECIES_PIKACHU_ORIGINAL_CAP FORMS_START + 94 -#define SPECIES_PIKACHU_HOENN_CAP FORMS_START + 95 -#define SPECIES_PIKACHU_SINNOH_CAP FORMS_START + 96 -#define SPECIES_PIKACHU_UNOVA_CAP FORMS_START + 97 -#define SPECIES_PIKACHU_KALOS_CAP FORMS_START + 98 -#define SPECIES_PIKACHU_ALOLA_CAP FORMS_START + 99 -#define SPECIES_PIKACHU_PARTNER_CAP FORMS_START + 100 -#define SPECIES_PIKACHU_WORLD_CAP FORMS_START + 101 +#define SPECIES_PIKACHU_ORIGINAL_CAP FORMS_START + 110 +#define SPECIES_PIKACHU_HOENN_CAP FORMS_START + 111 +#define SPECIES_PIKACHU_SINNOH_CAP FORMS_START + 112 +#define SPECIES_PIKACHU_UNOVA_CAP FORMS_START + 113 +#define SPECIES_PIKACHU_KALOS_CAP FORMS_START + 114 +#define SPECIES_PIKACHU_ALOLA_CAP FORMS_START + 115 +#define SPECIES_PIKACHU_PARTNER_CAP FORMS_START + 116 +#define SPECIES_PIKACHU_WORLD_CAP FORMS_START + 117 // Pichu -#define SPECIES_PICHU_SPIKY_EARED FORMS_START + 102 +#define SPECIES_PICHU_SPIKY_EARED FORMS_START + 118 +#if P_NEW_POKEMON == TRUE // Unown -#define SPECIES_UNOWN_B FORMS_START + 103 -#define SPECIES_UNOWN_C FORMS_START + 104 -#define SPECIES_UNOWN_D FORMS_START + 105 -#define SPECIES_UNOWN_E FORMS_START + 106 -#define SPECIES_UNOWN_F FORMS_START + 107 -#define SPECIES_UNOWN_G FORMS_START + 108 -#define SPECIES_UNOWN_H FORMS_START + 109 -#define SPECIES_UNOWN_I FORMS_START + 110 -#define SPECIES_UNOWN_J FORMS_START + 111 -#define SPECIES_UNOWN_K FORMS_START + 112 -#define SPECIES_UNOWN_L FORMS_START + 113 -#define SPECIES_UNOWN_M FORMS_START + 114 -#define SPECIES_UNOWN_N FORMS_START + 115 -#define SPECIES_UNOWN_O FORMS_START + 116 -#define SPECIES_UNOWN_P FORMS_START + 117 -#define SPECIES_UNOWN_Q FORMS_START + 118 -#define SPECIES_UNOWN_R FORMS_START + 119 -#define SPECIES_UNOWN_S FORMS_START + 120 -#define SPECIES_UNOWN_T FORMS_START + 121 -#define SPECIES_UNOWN_U FORMS_START + 122 -#define SPECIES_UNOWN_V FORMS_START + 123 -#define SPECIES_UNOWN_W FORMS_START + 124 -#define SPECIES_UNOWN_X FORMS_START + 125 -#define SPECIES_UNOWN_Y FORMS_START + 126 -#define SPECIES_UNOWN_Z FORMS_START + 127 -#define SPECIES_UNOWN_EMARK FORMS_START + 128 -#define SPECIES_UNOWN_QMARK FORMS_START + 129 +#define SPECIES_UNOWN_B FORMS_START + 119 +#define SPECIES_UNOWN_C FORMS_START + 120 +#define SPECIES_UNOWN_D FORMS_START + 121 +#define SPECIES_UNOWN_E FORMS_START + 122 +#define SPECIES_UNOWN_F FORMS_START + 123 +#define SPECIES_UNOWN_G FORMS_START + 124 +#define SPECIES_UNOWN_H FORMS_START + 125 +#define SPECIES_UNOWN_I FORMS_START + 126 +#define SPECIES_UNOWN_J FORMS_START + 127 +#define SPECIES_UNOWN_K FORMS_START + 128 +#define SPECIES_UNOWN_L FORMS_START + 129 +#define SPECIES_UNOWN_M FORMS_START + 130 +#define SPECIES_UNOWN_N FORMS_START + 131 +#define SPECIES_UNOWN_O FORMS_START + 132 +#define SPECIES_UNOWN_P FORMS_START + 133 +#define SPECIES_UNOWN_Q FORMS_START + 134 +#define SPECIES_UNOWN_R FORMS_START + 135 +#define SPECIES_UNOWN_S FORMS_START + 136 +#define SPECIES_UNOWN_T FORMS_START + 137 +#define SPECIES_UNOWN_U FORMS_START + 138 +#define SPECIES_UNOWN_V FORMS_START + 139 +#define SPECIES_UNOWN_W FORMS_START + 140 +#define SPECIES_UNOWN_X FORMS_START + 141 +#define SPECIES_UNOWN_Y FORMS_START + 142 +#define SPECIES_UNOWN_Z FORMS_START + 143 +#define SPECIES_UNOWN_EMARK FORMS_START + 144 +#define SPECIES_UNOWN_QMARK FORMS_START + 145 // Castform -#define SPECIES_CASTFORM_SUNNY FORMS_START + 130 -#define SPECIES_CASTFORM_RAINY FORMS_START + 131 -#define SPECIES_CASTFORM_SNOWY FORMS_START + 132 +#define SPECIES_CASTFORM_SUNNY FORMS_START + 146 +#define SPECIES_CASTFORM_RAINY FORMS_START + 147 +#define SPECIES_CASTFORM_SNOWY FORMS_START + 148 // Deoxys -#define SPECIES_DEOXYS_ATTACK FORMS_START + 133 -#define SPECIES_DEOXYS_DEFENSE FORMS_START + 134 -#define SPECIES_DEOXYS_SPEED FORMS_START + 135 +#define SPECIES_DEOXYS_ATTACK FORMS_START + 149 +#define SPECIES_DEOXYS_DEFENSE FORMS_START + 150 +#define SPECIES_DEOXYS_SPEED FORMS_START + 151 + +#else +// Unown +#define SPECIES_UNOWN_B FORMS_START + 1 +#define SPECIES_UNOWN_C FORMS_START + 2 +#define SPECIES_UNOWN_D FORMS_START + 3 +#define SPECIES_UNOWN_E FORMS_START + 4 +#define SPECIES_UNOWN_F FORMS_START + 5 +#define SPECIES_UNOWN_G FORMS_START + 6 +#define SPECIES_UNOWN_H FORMS_START + 7 +#define SPECIES_UNOWN_I FORMS_START + 8 +#define SPECIES_UNOWN_J FORMS_START + 9 +#define SPECIES_UNOWN_K FORMS_START + 10 +#define SPECIES_UNOWN_L FORMS_START + 11 +#define SPECIES_UNOWN_M FORMS_START + 12 +#define SPECIES_UNOWN_N FORMS_START + 13 +#define SPECIES_UNOWN_O FORMS_START + 14 +#define SPECIES_UNOWN_P FORMS_START + 15 +#define SPECIES_UNOWN_Q FORMS_START + 16 +#define SPECIES_UNOWN_R FORMS_START + 17 +#define SPECIES_UNOWN_S FORMS_START + 18 +#define SPECIES_UNOWN_T FORMS_START + 19 +#define SPECIES_UNOWN_U FORMS_START + 20 +#define SPECIES_UNOWN_V FORMS_START + 21 +#define SPECIES_UNOWN_W FORMS_START + 22 +#define SPECIES_UNOWN_X FORMS_START + 23 +#define SPECIES_UNOWN_Y FORMS_START + 24 +#define SPECIES_UNOWN_Z FORMS_START + 25 +#define SPECIES_UNOWN_EMARK FORMS_START + 26 +#define SPECIES_UNOWN_QMARK FORMS_START + 27 + +// Castform +#define SPECIES_CASTFORM_SUNNY FORMS_START + 28 +#define SPECIES_CASTFORM_RAINY FORMS_START + 29 +#define SPECIES_CASTFORM_SNOWY FORMS_START + 30 + +// Deoxys +#define SPECIES_DEOXYS_ATTACK FORMS_START + 31 +#define SPECIES_DEOXYS_DEFENSE FORMS_START + 32 +#define SPECIES_DEOXYS_SPEED FORMS_START + 33 +#endif // Burmy -#define SPECIES_BURMY_SANDY_CLOAK FORMS_START + 136 -#define SPECIES_BURMY_TRASH_CLOAK FORMS_START + 137 +#define SPECIES_BURMY_SANDY_CLOAK FORMS_START + 152 +#define SPECIES_BURMY_TRASH_CLOAK FORMS_START + 153 // Wormadam -#define SPECIES_WORMADAM_SANDY_CLOAK FORMS_START + 138 -#define SPECIES_WORMADAM_TRASH_CLOAK FORMS_START + 139 +#define SPECIES_WORMADAM_SANDY_CLOAK FORMS_START + 154 +#define SPECIES_WORMADAM_TRASH_CLOAK FORMS_START + 155 // Cherrim -#define SPECIES_CHERRIM_SUNSHINE FORMS_START + 140 +#define SPECIES_CHERRIM_SUNSHINE FORMS_START + 156 // Shellos -#define SPECIES_SHELLOS_EAST_SEA FORMS_START + 141 +#define SPECIES_SHELLOS_EAST_SEA FORMS_START + 157 // Gastrodon -#define SPECIES_GASTRODON_EAST_SEA FORMS_START + 142 +#define SPECIES_GASTRODON_EAST_SEA FORMS_START + 158 // Rotom -#define SPECIES_ROTOM_HEAT FORMS_START + 143 -#define SPECIES_ROTOM_WASH FORMS_START + 144 -#define SPECIES_ROTOM_FROST FORMS_START + 145 -#define SPECIES_ROTOM_FAN FORMS_START + 146 -#define SPECIES_ROTOM_MOW FORMS_START + 147 +#define SPECIES_ROTOM_HEAT FORMS_START + 159 +#define SPECIES_ROTOM_WASH FORMS_START + 160 +#define SPECIES_ROTOM_FROST FORMS_START + 161 +#define SPECIES_ROTOM_FAN FORMS_START + 162 +#define SPECIES_ROTOM_MOW FORMS_START + 163 -// Giratina -#define SPECIES_GIRATINA_ORIGIN FORMS_START + 148 +// Origin Forme +#define SPECIES_DIALGA_ORIGIN FORMS_START + 164 +#define SPECIES_PALKIA_ORIGIN FORMS_START + 165 +#define SPECIES_GIRATINA_ORIGIN FORMS_START + 166 // Shaymin -#define SPECIES_SHAYMIN_SKY FORMS_START + 149 +#define SPECIES_SHAYMIN_SKY FORMS_START + 167 // Arceus -#define SPECIES_ARCEUS_FIGHTING FORMS_START + 150 -#define SPECIES_ARCEUS_FLYING FORMS_START + 151 -#define SPECIES_ARCEUS_POISON FORMS_START + 152 -#define SPECIES_ARCEUS_GROUND FORMS_START + 153 -#define SPECIES_ARCEUS_ROCK FORMS_START + 154 -#define SPECIES_ARCEUS_BUG FORMS_START + 155 -#define SPECIES_ARCEUS_GHOST FORMS_START + 156 -#define SPECIES_ARCEUS_STEEL FORMS_START + 157 -#define SPECIES_ARCEUS_FIRE FORMS_START + 158 -#define SPECIES_ARCEUS_WATER FORMS_START + 159 -#define SPECIES_ARCEUS_GRASS FORMS_START + 160 -#define SPECIES_ARCEUS_ELECTRIC FORMS_START + 161 -#define SPECIES_ARCEUS_PSYCHIC FORMS_START + 162 -#define SPECIES_ARCEUS_ICE FORMS_START + 163 -#define SPECIES_ARCEUS_DRAGON FORMS_START + 164 -#define SPECIES_ARCEUS_DARK FORMS_START + 165 -#define SPECIES_ARCEUS_FAIRY FORMS_START + 166 +#define SPECIES_ARCEUS_FIGHTING FORMS_START + 168 +#define SPECIES_ARCEUS_FLYING FORMS_START + 169 +#define SPECIES_ARCEUS_POISON FORMS_START + 170 +#define SPECIES_ARCEUS_GROUND FORMS_START + 171 +#define SPECIES_ARCEUS_ROCK FORMS_START + 172 +#define SPECIES_ARCEUS_BUG FORMS_START + 173 +#define SPECIES_ARCEUS_GHOST FORMS_START + 174 +#define SPECIES_ARCEUS_STEEL FORMS_START + 175 +#define SPECIES_ARCEUS_FIRE FORMS_START + 176 +#define SPECIES_ARCEUS_WATER FORMS_START + 177 +#define SPECIES_ARCEUS_GRASS FORMS_START + 178 +#define SPECIES_ARCEUS_ELECTRIC FORMS_START + 179 +#define SPECIES_ARCEUS_PSYCHIC FORMS_START + 180 +#define SPECIES_ARCEUS_ICE FORMS_START + 181 +#define SPECIES_ARCEUS_DRAGON FORMS_START + 182 +#define SPECIES_ARCEUS_DARK FORMS_START + 183 +#define SPECIES_ARCEUS_FAIRY FORMS_START + 184 // Basculin -#define SPECIES_BASCULIN_BLUE_STRIPED FORMS_START + 167 +#define SPECIES_BASCULIN_BLUE_STRIPED FORMS_START + 185 +#define SPECIES_BASCULIN_WHITE_STRIPED FORMS_START + 186 // Darmanitan -#define SPECIES_DARMANITAN_ZEN_MODE FORMS_START + 168 -#define SPECIES_DARMANITAN_ZEN_MODE_GALARIAN FORMS_START + 169 +#define SPECIES_DARMANITAN_ZEN_MODE FORMS_START + 187 +#define SPECIES_DARMANITAN_ZEN_MODE_GALARIAN FORMS_START + 188 // Deerling -#define SPECIES_DEERLING_SUMMER FORMS_START + 170 -#define SPECIES_DEERLING_AUTUMN FORMS_START + 171 -#define SPECIES_DEERLING_WINTER FORMS_START + 172 +#define SPECIES_DEERLING_SUMMER FORMS_START + 189 +#define SPECIES_DEERLING_AUTUMN FORMS_START + 190 +#define SPECIES_DEERLING_WINTER FORMS_START + 191 // Sawsbuck -#define SPECIES_SAWSBUCK_SUMMER FORMS_START + 173 -#define SPECIES_SAWSBUCK_AUTUMN FORMS_START + 174 -#define SPECIES_SAWSBUCK_WINTER FORMS_START + 175 +#define SPECIES_SAWSBUCK_SUMMER FORMS_START + 192 +#define SPECIES_SAWSBUCK_AUTUMN FORMS_START + 193 +#define SPECIES_SAWSBUCK_WINTER FORMS_START + 194 // Therian Forms -#define SPECIES_TORNADUS_THERIAN FORMS_START + 176 -#define SPECIES_THUNDURUS_THERIAN FORMS_START + 177 -#define SPECIES_LANDORUS_THERIAN FORMS_START + 178 +#define SPECIES_TORNADUS_THERIAN FORMS_START + 195 +#define SPECIES_THUNDURUS_THERIAN FORMS_START + 196 +#define SPECIES_LANDORUS_THERIAN FORMS_START + 197 +#define SPECIES_ENAMORUS_THERIAN FORMS_START + 198 // Kyurem -#define SPECIES_KYUREM_WHITE FORMS_START + 179 -#define SPECIES_KYUREM_BLACK FORMS_START + 180 +#define SPECIES_KYUREM_WHITE FORMS_START + 199 +#define SPECIES_KYUREM_BLACK FORMS_START + 200 // Keldeo -#define SPECIES_KELDEO_RESOLUTE FORMS_START + 181 +#define SPECIES_KELDEO_RESOLUTE FORMS_START + 201 // Meloetta -#define SPECIES_MELOETTA_PIROUETTE FORMS_START + 182 +#define SPECIES_MELOETTA_PIROUETTE FORMS_START + 202 // Genesect -#define SPECIES_GENESECT_DOUSE_DRIVE FORMS_START + 183 -#define SPECIES_GENESECT_SHOCK_DRIVE FORMS_START + 184 -#define SPECIES_GENESECT_BURN_DRIVE FORMS_START + 185 -#define SPECIES_GENESECT_CHILL_DRIVE FORMS_START + 186 +#define SPECIES_GENESECT_DOUSE_DRIVE FORMS_START + 203 +#define SPECIES_GENESECT_SHOCK_DRIVE FORMS_START + 204 +#define SPECIES_GENESECT_BURN_DRIVE FORMS_START + 205 +#define SPECIES_GENESECT_CHILL_DRIVE FORMS_START + 206 // Greninja -#define SPECIES_GRENINJA_BATTLE_BOND FORMS_START + 187 -#define SPECIES_GRENINJA_ASH FORMS_START + 188 +#define SPECIES_GRENINJA_BATTLE_BOND FORMS_START + 207 +#define SPECIES_GRENINJA_ASH FORMS_START + 208 // Vivillon -#define SPECIES_VIVILLON_POLAR FORMS_START + 189 -#define SPECIES_VIVILLON_TUNDRA FORMS_START + 190 -#define SPECIES_VIVILLON_CONTINENTAL FORMS_START + 191 -#define SPECIES_VIVILLON_GARDEN FORMS_START + 192 -#define SPECIES_VIVILLON_ELEGANT FORMS_START + 193 -#define SPECIES_VIVILLON_MEADOW FORMS_START + 194 -#define SPECIES_VIVILLON_MODERN FORMS_START + 195 -#define SPECIES_VIVILLON_MARINE FORMS_START + 196 -#define SPECIES_VIVILLON_ARCHIPELAGO FORMS_START + 197 -#define SPECIES_VIVILLON_HIGH_PLAINS FORMS_START + 198 -#define SPECIES_VIVILLON_SANDSTORM FORMS_START + 199 -#define SPECIES_VIVILLON_RIVER FORMS_START + 200 -#define SPECIES_VIVILLON_MONSOON FORMS_START + 201 -#define SPECIES_VIVILLON_SAVANNA FORMS_START + 202 -#define SPECIES_VIVILLON_SUN FORMS_START + 203 -#define SPECIES_VIVILLON_OCEAN FORMS_START + 204 -#define SPECIES_VIVILLON_JUNGLE FORMS_START + 205 -#define SPECIES_VIVILLON_FANCY FORMS_START + 206 -#define SPECIES_VIVILLON_POKE_BALL FORMS_START + 207 +#define SPECIES_VIVILLON_POLAR FORMS_START + 209 +#define SPECIES_VIVILLON_TUNDRA FORMS_START + 210 +#define SPECIES_VIVILLON_CONTINENTAL FORMS_START + 211 +#define SPECIES_VIVILLON_GARDEN FORMS_START + 212 +#define SPECIES_VIVILLON_ELEGANT FORMS_START + 213 +#define SPECIES_VIVILLON_MEADOW FORMS_START + 214 +#define SPECIES_VIVILLON_MODERN FORMS_START + 215 +#define SPECIES_VIVILLON_MARINE FORMS_START + 216 +#define SPECIES_VIVILLON_ARCHIPELAGO FORMS_START + 217 +#define SPECIES_VIVILLON_HIGH_PLAINS FORMS_START + 218 +#define SPECIES_VIVILLON_SANDSTORM FORMS_START + 219 +#define SPECIES_VIVILLON_RIVER FORMS_START + 220 +#define SPECIES_VIVILLON_MONSOON FORMS_START + 221 +#define SPECIES_VIVILLON_SAVANNA FORMS_START + 222 +#define SPECIES_VIVILLON_SUN FORMS_START + 223 +#define SPECIES_VIVILLON_OCEAN FORMS_START + 224 +#define SPECIES_VIVILLON_JUNGLE FORMS_START + 225 +#define SPECIES_VIVILLON_FANCY FORMS_START + 226 +#define SPECIES_VIVILLON_POKE_BALL FORMS_START + 227 // Flabébé -#define SPECIES_FLABEBE_YELLOW_FLOWER FORMS_START + 208 -#define SPECIES_FLABEBE_ORANGE_FLOWER FORMS_START + 209 -#define SPECIES_FLABEBE_BLUE_FLOWER FORMS_START + 210 -#define SPECIES_FLABEBE_WHITE_FLOWER FORMS_START + 211 +#define SPECIES_FLABEBE_YELLOW_FLOWER FORMS_START + 228 +#define SPECIES_FLABEBE_ORANGE_FLOWER FORMS_START + 229 +#define SPECIES_FLABEBE_BLUE_FLOWER FORMS_START + 230 +#define SPECIES_FLABEBE_WHITE_FLOWER FORMS_START + 231 // Floette -#define SPECIES_FLOETTE_YELLOW_FLOWER FORMS_START + 212 -#define SPECIES_FLOETTE_ORANGE_FLOWER FORMS_START + 213 -#define SPECIES_FLOETTE_BLUE_FLOWER FORMS_START + 214 -#define SPECIES_FLOETTE_WHITE_FLOWER FORMS_START + 215 -#define SPECIES_FLOETTE_ETERNAL_FLOWER FORMS_START + 216 +#define SPECIES_FLOETTE_YELLOW_FLOWER FORMS_START + 232 +#define SPECIES_FLOETTE_ORANGE_FLOWER FORMS_START + 233 +#define SPECIES_FLOETTE_BLUE_FLOWER FORMS_START + 234 +#define SPECIES_FLOETTE_WHITE_FLOWER FORMS_START + 235 +#define SPECIES_FLOETTE_ETERNAL_FLOWER FORMS_START + 236 // Florges -#define SPECIES_FLORGES_YELLOW_FLOWER FORMS_START + 217 -#define SPECIES_FLORGES_ORANGE_FLOWER FORMS_START + 218 -#define SPECIES_FLORGES_BLUE_FLOWER FORMS_START + 219 -#define SPECIES_FLORGES_WHITE_FLOWER FORMS_START + 220 +#define SPECIES_FLORGES_YELLOW_FLOWER FORMS_START + 237 +#define SPECIES_FLORGES_ORANGE_FLOWER FORMS_START + 238 +#define SPECIES_FLORGES_BLUE_FLOWER FORMS_START + 239 +#define SPECIES_FLORGES_WHITE_FLOWER FORMS_START + 240 // Furfrou -#define SPECIES_FURFROU_HEART_TRIM FORMS_START + 221 -#define SPECIES_FURFROU_STAR_TRIM FORMS_START + 222 -#define SPECIES_FURFROU_DIAMOND_TRIM FORMS_START + 223 -#define SPECIES_FURFROU_DEBUTANTE_TRIM FORMS_START + 224 -#define SPECIES_FURFROU_MATRON_TRIM FORMS_START + 225 -#define SPECIES_FURFROU_DANDY_TRIM FORMS_START + 226 -#define SPECIES_FURFROU_LA_REINE_TRIM FORMS_START + 227 -#define SPECIES_FURFROU_KABUKI_TRIM FORMS_START + 228 -#define SPECIES_FURFROU_PHARAOH_TRIM FORMS_START + 229 +#define SPECIES_FURFROU_HEART_TRIM FORMS_START + 241 +#define SPECIES_FURFROU_STAR_TRIM FORMS_START + 242 +#define SPECIES_FURFROU_DIAMOND_TRIM FORMS_START + 243 +#define SPECIES_FURFROU_DEBUTANTE_TRIM FORMS_START + 244 +#define SPECIES_FURFROU_MATRON_TRIM FORMS_START + 245 +#define SPECIES_FURFROU_DANDY_TRIM FORMS_START + 246 +#define SPECIES_FURFROU_LA_REINE_TRIM FORMS_START + 247 +#define SPECIES_FURFROU_KABUKI_TRIM FORMS_START + 248 +#define SPECIES_FURFROU_PHARAOH_TRIM FORMS_START + 249 // Meowstic -#define SPECIES_MEOWSTIC_FEMALE FORMS_START + 230 +#define SPECIES_MEOWSTIC_FEMALE FORMS_START + 250 // Aegislash -#define SPECIES_AEGISLASH_BLADE FORMS_START + 231 +#define SPECIES_AEGISLASH_BLADE FORMS_START + 251 // Pumpkaboo -#define SPECIES_PUMPKABOO_SMALL FORMS_START + 232 -#define SPECIES_PUMPKABOO_LARGE FORMS_START + 233 -#define SPECIES_PUMPKABOO_SUPER FORMS_START + 234 +#define SPECIES_PUMPKABOO_SMALL FORMS_START + 252 +#define SPECIES_PUMPKABOO_LARGE FORMS_START + 253 +#define SPECIES_PUMPKABOO_SUPER FORMS_START + 254 // Gourgeist -#define SPECIES_GOURGEIST_SMALL FORMS_START + 235 -#define SPECIES_GOURGEIST_LARGE FORMS_START + 236 -#define SPECIES_GOURGEIST_SUPER FORMS_START + 237 +#define SPECIES_GOURGEIST_SMALL FORMS_START + 255 +#define SPECIES_GOURGEIST_LARGE FORMS_START + 256 +#define SPECIES_GOURGEIST_SUPER FORMS_START + 257 // Xerneas -#define SPECIES_XERNEAS_ACTIVE FORMS_START + 238 +#define SPECIES_XERNEAS_ACTIVE FORMS_START + 258 // Zygarde -#define SPECIES_ZYGARDE_10 FORMS_START + 239 -#define SPECIES_ZYGARDE_10_POWER_CONSTRUCT FORMS_START + 240 -#define SPECIES_ZYGARDE_50_POWER_CONSTRUCT FORMS_START + 241 -#define SPECIES_ZYGARDE_COMPLETE FORMS_START + 242 +#define SPECIES_ZYGARDE_10 FORMS_START + 259 +#define SPECIES_ZYGARDE_10_POWER_CONSTRUCT FORMS_START + 260 +#define SPECIES_ZYGARDE_50_POWER_CONSTRUCT FORMS_START + 261 +#define SPECIES_ZYGARDE_COMPLETE FORMS_START + 262 // Hoopa -#define SPECIES_HOOPA_UNBOUND FORMS_START + 243 +#define SPECIES_HOOPA_UNBOUND FORMS_START + 263 // Oricorio -#define SPECIES_ORICORIO_POM_POM FORMS_START + 244 -#define SPECIES_ORICORIO_PAU FORMS_START + 245 -#define SPECIES_ORICORIO_SENSU FORMS_START + 246 +#define SPECIES_ORICORIO_POM_POM FORMS_START + 264 +#define SPECIES_ORICORIO_PAU FORMS_START + 265 +#define SPECIES_ORICORIO_SENSU FORMS_START + 266 // Rockruff -#define SPECIES_ROCKRUFF_OWN_TEMPO FORMS_START + 247 +#define SPECIES_ROCKRUFF_OWN_TEMPO FORMS_START + 267 // Lycanroc -#define SPECIES_LYCANROC_MIDNIGHT FORMS_START + 248 -#define SPECIES_LYCANROC_DUSK FORMS_START + 249 +#define SPECIES_LYCANROC_MIDNIGHT FORMS_START + 268 +#define SPECIES_LYCANROC_DUSK FORMS_START + 269 // Wishiwashi -#define SPECIES_WISHIWASHI_SCHOOL FORMS_START + 250 +#define SPECIES_WISHIWASHI_SCHOOL FORMS_START + 270 // Silvally -#define SPECIES_SILVALLY_FIGHTING FORMS_START + 251 -#define SPECIES_SILVALLY_FLYING FORMS_START + 252 -#define SPECIES_SILVALLY_POISON FORMS_START + 253 -#define SPECIES_SILVALLY_GROUND FORMS_START + 254 -#define SPECIES_SILVALLY_ROCK FORMS_START + 255 -#define SPECIES_SILVALLY_BUG FORMS_START + 256 -#define SPECIES_SILVALLY_GHOST FORMS_START + 257 -#define SPECIES_SILVALLY_STEEL FORMS_START + 258 -#define SPECIES_SILVALLY_FIRE FORMS_START + 259 -#define SPECIES_SILVALLY_WATER FORMS_START + 260 -#define SPECIES_SILVALLY_GRASS FORMS_START + 261 -#define SPECIES_SILVALLY_ELECTRIC FORMS_START + 262 -#define SPECIES_SILVALLY_PSYCHIC FORMS_START + 263 -#define SPECIES_SILVALLY_ICE FORMS_START + 264 -#define SPECIES_SILVALLY_DRAGON FORMS_START + 265 -#define SPECIES_SILVALLY_DARK FORMS_START + 266 -#define SPECIES_SILVALLY_FAIRY FORMS_START + 267 +#define SPECIES_SILVALLY_FIGHTING FORMS_START + 271 +#define SPECIES_SILVALLY_FLYING FORMS_START + 272 +#define SPECIES_SILVALLY_POISON FORMS_START + 273 +#define SPECIES_SILVALLY_GROUND FORMS_START + 274 +#define SPECIES_SILVALLY_ROCK FORMS_START + 275 +#define SPECIES_SILVALLY_BUG FORMS_START + 276 +#define SPECIES_SILVALLY_GHOST FORMS_START + 277 +#define SPECIES_SILVALLY_STEEL FORMS_START + 278 +#define SPECIES_SILVALLY_FIRE FORMS_START + 279 +#define SPECIES_SILVALLY_WATER FORMS_START + 280 +#define SPECIES_SILVALLY_GRASS FORMS_START + 281 +#define SPECIES_SILVALLY_ELECTRIC FORMS_START + 282 +#define SPECIES_SILVALLY_PSYCHIC FORMS_START + 283 +#define SPECIES_SILVALLY_ICE FORMS_START + 284 +#define SPECIES_SILVALLY_DRAGON FORMS_START + 285 +#define SPECIES_SILVALLY_DARK FORMS_START + 286 +#define SPECIES_SILVALLY_FAIRY FORMS_START + 287 // Minior -#define SPECIES_MINIOR_METEOR_ORANGE FORMS_START + 268 -#define SPECIES_MINIOR_METEOR_YELLOW FORMS_START + 269 -#define SPECIES_MINIOR_METEOR_GREEN FORMS_START + 270 -#define SPECIES_MINIOR_METEOR_BLUE FORMS_START + 271 -#define SPECIES_MINIOR_METEOR_INDIGO FORMS_START + 272 -#define SPECIES_MINIOR_METEOR_VIOLET FORMS_START + 273 -#define SPECIES_MINIOR_CORE_RED FORMS_START + 274 -#define SPECIES_MINIOR_CORE_ORANGE FORMS_START + 275 -#define SPECIES_MINIOR_CORE_YELLOW FORMS_START + 276 -#define SPECIES_MINIOR_CORE_GREEN FORMS_START + 277 -#define SPECIES_MINIOR_CORE_BLUE FORMS_START + 278 -#define SPECIES_MINIOR_CORE_INDIGO FORMS_START + 279 -#define SPECIES_MINIOR_CORE_VIOLET FORMS_START + 280 +#define SPECIES_MINIOR_METEOR_ORANGE FORMS_START + 288 +#define SPECIES_MINIOR_METEOR_YELLOW FORMS_START + 289 +#define SPECIES_MINIOR_METEOR_GREEN FORMS_START + 290 +#define SPECIES_MINIOR_METEOR_BLUE FORMS_START + 291 +#define SPECIES_MINIOR_METEOR_INDIGO FORMS_START + 292 +#define SPECIES_MINIOR_METEOR_VIOLET FORMS_START + 293 +#define SPECIES_MINIOR_CORE_RED FORMS_START + 294 +#define SPECIES_MINIOR_CORE_ORANGE FORMS_START + 295 +#define SPECIES_MINIOR_CORE_YELLOW FORMS_START + 296 +#define SPECIES_MINIOR_CORE_GREEN FORMS_START + 297 +#define SPECIES_MINIOR_CORE_BLUE FORMS_START + 298 +#define SPECIES_MINIOR_CORE_INDIGO FORMS_START + 299 +#define SPECIES_MINIOR_CORE_VIOLET FORMS_START + 300 // Mimikyu -#define SPECIES_MIMIKYU_BUSTED FORMS_START + 281 +#define SPECIES_MIMIKYU_BUSTED FORMS_START + 301 // Necrozma -#define SPECIES_NECROZMA_DUSK_MANE FORMS_START + 282 -#define SPECIES_NECROZMA_DAWN_WINGS FORMS_START + 283 -#define SPECIES_NECROZMA_ULTRA FORMS_START + 284 +#define SPECIES_NECROZMA_DUSK_MANE FORMS_START + 302 +#define SPECIES_NECROZMA_DAWN_WINGS FORMS_START + 303 +#define SPECIES_NECROZMA_ULTRA FORMS_START + 304 // Magearna -#define SPECIES_MAGEARNA_ORIGINAL_COLOR FORMS_START + 285 +#define SPECIES_MAGEARNA_ORIGINAL_COLOR FORMS_START + 305 // Cramorant -#define SPECIES_CRAMORANT_GULPING FORMS_START + 286 -#define SPECIES_CRAMORANT_GORGING FORMS_START + 287 +#define SPECIES_CRAMORANT_GULPING FORMS_START + 306 +#define SPECIES_CRAMORANT_GORGING FORMS_START + 307 // Toxtricity -#define SPECIES_TOXTRICITY_LOW_KEY FORMS_START + 288 +#define SPECIES_TOXTRICITY_LOW_KEY FORMS_START + 308 // Sinistea -#define SPECIES_SINISTEA_ANTIQUE FORMS_START + 289 +#define SPECIES_SINISTEA_ANTIQUE FORMS_START + 309 // Polteageist -#define SPECIES_POLTEAGEIST_ANTIQUE FORMS_START + 290 +#define SPECIES_POLTEAGEIST_ANTIQUE FORMS_START + 310 // Alcremie -#define SPECIES_ALCREMIE_RUBY_CREAM FORMS_START + 291 -#define SPECIES_ALCREMIE_MATCHA_CREAM FORMS_START + 292 -#define SPECIES_ALCREMIE_MINT_CREAM FORMS_START + 293 -#define SPECIES_ALCREMIE_LEMON_CREAM FORMS_START + 294 -#define SPECIES_ALCREMIE_SALTED_CREAM FORMS_START + 295 -#define SPECIES_ALCREMIE_RUBY_SWIRL FORMS_START + 296 -#define SPECIES_ALCREMIE_CARAMEL_SWIRL FORMS_START + 297 -#define SPECIES_ALCREMIE_RAINBOW_SWIRL FORMS_START + 298 +#define SPECIES_ALCREMIE_RUBY_CREAM FORMS_START + 311 +#define SPECIES_ALCREMIE_MATCHA_CREAM FORMS_START + 312 +#define SPECIES_ALCREMIE_MINT_CREAM FORMS_START + 313 +#define SPECIES_ALCREMIE_LEMON_CREAM FORMS_START + 314 +#define SPECIES_ALCREMIE_SALTED_CREAM FORMS_START + 315 +#define SPECIES_ALCREMIE_RUBY_SWIRL FORMS_START + 316 +#define SPECIES_ALCREMIE_CARAMEL_SWIRL FORMS_START + 317 +#define SPECIES_ALCREMIE_RAINBOW_SWIRL FORMS_START + 318 // Eiscue -#define SPECIES_EISCUE_NOICE_FACE FORMS_START + 299 +#define SPECIES_EISCUE_NOICE_FACE FORMS_START + 319 // Indeedee -#define SPECIES_INDEEDEE_FEMALE FORMS_START + 300 +#define SPECIES_INDEEDEE_FEMALE FORMS_START + 320 // Morpeko -#define SPECIES_MORPEKO_HANGRY FORMS_START + 301 +#define SPECIES_MORPEKO_HANGRY FORMS_START + 321 // Zacian -#define SPECIES_ZACIAN_CROWNED_SWORD FORMS_START + 302 +#define SPECIES_ZACIAN_CROWNED_SWORD FORMS_START + 322 // Zamazenta -#define SPECIES_ZAMAZENTA_CROWNED_SHIELD FORMS_START + 303 +#define SPECIES_ZAMAZENTA_CROWNED_SHIELD FORMS_START + 323 // Eternatus -#define SPECIES_ETERNATUS_ETERNAMAX FORMS_START + 304 +#define SPECIES_ETERNATUS_ETERNAMAX FORMS_START + 324 // Urshifu -#define SPECIES_URSHIFU_RAPID_STRIKE_STYLE FORMS_START + 305 +#define SPECIES_URSHIFU_RAPID_STRIKE_STYLE FORMS_START + 325 // Zarude -#define SPECIES_ZARUDE_DADA FORMS_START + 306 +#define SPECIES_ZARUDE_DADA FORMS_START + 326 // Calyrex -#define SPECIES_CALYREX_ICE_RIDER FORMS_START + 307 -#define SPECIES_CALYREX_SHADOW_RIDER FORMS_START + 308 +#define SPECIES_CALYREX_ICE_RIDER FORMS_START + 327 +#define SPECIES_CALYREX_SHADOW_RIDER FORMS_START + 328 +#if P_NEW_POKEMON == TRUE +#define FORMS_START SPECIES_ENAMORUS #define SPECIES_EGG SPECIES_CALYREX_SHADOW_RIDER + 1 +#else +#define FORMS_START SPECIES_DEOXYS +#define SPECIES_EGG SPECIES_DEOXYS_SPEED + 1 +#endif + #define NUM_SPECIES SPECIES_EGG -// National Dex Index Defines - -#define NATIONAL_DEX_NONE 0 -#define NATIONAL_DEX_BULBASAUR 1 -#define NATIONAL_DEX_IVYSAUR 2 -#define NATIONAL_DEX_VENUSAUR 3 -#define NATIONAL_DEX_CHARMANDER 4 -#define NATIONAL_DEX_CHARMELEON 5 -#define NATIONAL_DEX_CHARIZARD 6 -#define NATIONAL_DEX_SQUIRTLE 7 -#define NATIONAL_DEX_WARTORTLE 8 -#define NATIONAL_DEX_BLASTOISE 9 -#define NATIONAL_DEX_CATERPIE 10 -#define NATIONAL_DEX_METAPOD 11 -#define NATIONAL_DEX_BUTTERFREE 12 -#define NATIONAL_DEX_WEEDLE 13 -#define NATIONAL_DEX_KAKUNA 14 -#define NATIONAL_DEX_BEEDRILL 15 -#define NATIONAL_DEX_PIDGEY 16 -#define NATIONAL_DEX_PIDGEOTTO 17 -#define NATIONAL_DEX_PIDGEOT 18 -#define NATIONAL_DEX_RATTATA 19 -#define NATIONAL_DEX_RATICATE 20 -#define NATIONAL_DEX_SPEAROW 21 -#define NATIONAL_DEX_FEAROW 22 -#define NATIONAL_DEX_EKANS 23 -#define NATIONAL_DEX_ARBOK 24 -#define NATIONAL_DEX_PIKACHU 25 -#define NATIONAL_DEX_RAICHU 26 -#define NATIONAL_DEX_SANDSHREW 27 -#define NATIONAL_DEX_SANDSLASH 28 -#define NATIONAL_DEX_NIDORAN_F 29 -#define NATIONAL_DEX_NIDORINA 30 -#define NATIONAL_DEX_NIDOQUEEN 31 -#define NATIONAL_DEX_NIDORAN_M 32 -#define NATIONAL_DEX_NIDORINO 33 -#define NATIONAL_DEX_NIDOKING 34 -#define NATIONAL_DEX_CLEFAIRY 35 -#define NATIONAL_DEX_CLEFABLE 36 -#define NATIONAL_DEX_VULPIX 37 -#define NATIONAL_DEX_NINETALES 38 -#define NATIONAL_DEX_JIGGLYPUFF 39 -#define NATIONAL_DEX_WIGGLYTUFF 40 -#define NATIONAL_DEX_ZUBAT 41 -#define NATIONAL_DEX_GOLBAT 42 -#define NATIONAL_DEX_ODDISH 43 -#define NATIONAL_DEX_GLOOM 44 -#define NATIONAL_DEX_VILEPLUME 45 -#define NATIONAL_DEX_PARAS 46 -#define NATIONAL_DEX_PARASECT 47 -#define NATIONAL_DEX_VENONAT 48 -#define NATIONAL_DEX_VENOMOTH 49 -#define NATIONAL_DEX_DIGLETT 50 -#define NATIONAL_DEX_DUGTRIO 51 -#define NATIONAL_DEX_MEOWTH 52 -#define NATIONAL_DEX_PERSIAN 53 -#define NATIONAL_DEX_PSYDUCK 54 -#define NATIONAL_DEX_GOLDUCK 55 -#define NATIONAL_DEX_MANKEY 56 -#define NATIONAL_DEX_PRIMEAPE 57 -#define NATIONAL_DEX_GROWLITHE 58 -#define NATIONAL_DEX_ARCANINE 59 -#define NATIONAL_DEX_POLIWAG 60 -#define NATIONAL_DEX_POLIWHIRL 61 -#define NATIONAL_DEX_POLIWRATH 62 -#define NATIONAL_DEX_ABRA 63 -#define NATIONAL_DEX_KADABRA 64 -#define NATIONAL_DEX_ALAKAZAM 65 -#define NATIONAL_DEX_MACHOP 66 -#define NATIONAL_DEX_MACHOKE 67 -#define NATIONAL_DEX_MACHAMP 68 -#define NATIONAL_DEX_BELLSPROUT 69 -#define NATIONAL_DEX_WEEPINBELL 70 -#define NATIONAL_DEX_VICTREEBEL 71 -#define NATIONAL_DEX_TENTACOOL 72 -#define NATIONAL_DEX_TENTACRUEL 73 -#define NATIONAL_DEX_GEODUDE 74 -#define NATIONAL_DEX_GRAVELER 75 -#define NATIONAL_DEX_GOLEM 76 -#define NATIONAL_DEX_PONYTA 77 -#define NATIONAL_DEX_RAPIDASH 78 -#define NATIONAL_DEX_SLOWPOKE 79 -#define NATIONAL_DEX_SLOWBRO 80 -#define NATIONAL_DEX_MAGNEMITE 81 -#define NATIONAL_DEX_MAGNETON 82 -#define NATIONAL_DEX_FARFETCHD 83 -#define NATIONAL_DEX_DODUO 84 -#define NATIONAL_DEX_DODRIO 85 -#define NATIONAL_DEX_SEEL 86 -#define NATIONAL_DEX_DEWGONG 87 -#define NATIONAL_DEX_GRIMER 88 -#define NATIONAL_DEX_MUK 89 -#define NATIONAL_DEX_SHELLDER 90 -#define NATIONAL_DEX_CLOYSTER 91 -#define NATIONAL_DEX_GASTLY 92 -#define NATIONAL_DEX_HAUNTER 93 -#define NATIONAL_DEX_GENGAR 94 -#define NATIONAL_DEX_ONIX 95 -#define NATIONAL_DEX_DROWZEE 96 -#define NATIONAL_DEX_HYPNO 97 -#define NATIONAL_DEX_KRABBY 98 -#define NATIONAL_DEX_KINGLER 99 -#define NATIONAL_DEX_VOLTORB 100 -#define NATIONAL_DEX_ELECTRODE 101 -#define NATIONAL_DEX_EXEGGCUTE 102 -#define NATIONAL_DEX_EXEGGUTOR 103 -#define NATIONAL_DEX_CUBONE 104 -#define NATIONAL_DEX_MAROWAK 105 -#define NATIONAL_DEX_HITMONLEE 106 -#define NATIONAL_DEX_HITMONCHAN 107 -#define NATIONAL_DEX_LICKITUNG 108 -#define NATIONAL_DEX_KOFFING 109 -#define NATIONAL_DEX_WEEZING 110 -#define NATIONAL_DEX_RHYHORN 111 -#define NATIONAL_DEX_RHYDON 112 -#define NATIONAL_DEX_CHANSEY 113 -#define NATIONAL_DEX_TANGELA 114 -#define NATIONAL_DEX_KANGASKHAN 115 -#define NATIONAL_DEX_HORSEA 116 -#define NATIONAL_DEX_SEADRA 117 -#define NATIONAL_DEX_GOLDEEN 118 -#define NATIONAL_DEX_SEAKING 119 -#define NATIONAL_DEX_STARYU 120 -#define NATIONAL_DEX_STARMIE 121 -#define NATIONAL_DEX_MR_MIME 122 -#define NATIONAL_DEX_SCYTHER 123 -#define NATIONAL_DEX_JYNX 124 -#define NATIONAL_DEX_ELECTABUZZ 125 -#define NATIONAL_DEX_MAGMAR 126 -#define NATIONAL_DEX_PINSIR 127 -#define NATIONAL_DEX_TAUROS 128 -#define NATIONAL_DEX_MAGIKARP 129 -#define NATIONAL_DEX_GYARADOS 130 -#define NATIONAL_DEX_LAPRAS 131 -#define NATIONAL_DEX_DITTO 132 -#define NATIONAL_DEX_EEVEE 133 -#define NATIONAL_DEX_VAPOREON 134 -#define NATIONAL_DEX_JOLTEON 135 -#define NATIONAL_DEX_FLAREON 136 -#define NATIONAL_DEX_PORYGON 137 -#define NATIONAL_DEX_OMANYTE 138 -#define NATIONAL_DEX_OMASTAR 139 -#define NATIONAL_DEX_KABUTO 140 -#define NATIONAL_DEX_KABUTOPS 141 -#define NATIONAL_DEX_AERODACTYL 142 -#define NATIONAL_DEX_SNORLAX 143 -#define NATIONAL_DEX_ARTICUNO 144 -#define NATIONAL_DEX_ZAPDOS 145 -#define NATIONAL_DEX_MOLTRES 146 -#define NATIONAL_DEX_DRATINI 147 -#define NATIONAL_DEX_DRAGONAIR 148 -#define NATIONAL_DEX_DRAGONITE 149 -#define NATIONAL_DEX_MEWTWO 150 -#define NATIONAL_DEX_MEW 151 - -#define KANTO_DEX_COUNT NATIONAL_DEX_MEW - -#define NATIONAL_DEX_CHIKORITA 152 -#define NATIONAL_DEX_BAYLEEF 153 -#define NATIONAL_DEX_MEGANIUM 154 -#define NATIONAL_DEX_CYNDAQUIL 155 -#define NATIONAL_DEX_QUILAVA 156 -#define NATIONAL_DEX_TYPHLOSION 157 -#define NATIONAL_DEX_TOTODILE 158 -#define NATIONAL_DEX_CROCONAW 159 -#define NATIONAL_DEX_FERALIGATR 160 -#define NATIONAL_DEX_SENTRET 161 -#define NATIONAL_DEX_FURRET 162 -#define NATIONAL_DEX_HOOTHOOT 163 -#define NATIONAL_DEX_NOCTOWL 164 -#define NATIONAL_DEX_LEDYBA 165 -#define NATIONAL_DEX_LEDIAN 166 -#define NATIONAL_DEX_SPINARAK 167 -#define NATIONAL_DEX_ARIADOS 168 -#define NATIONAL_DEX_CROBAT 169 -#define NATIONAL_DEX_CHINCHOU 170 -#define NATIONAL_DEX_LANTURN 171 -#define NATIONAL_DEX_PICHU 172 -#define NATIONAL_DEX_CLEFFA 173 -#define NATIONAL_DEX_IGGLYBUFF 174 -#define NATIONAL_DEX_TOGEPI 175 -#define NATIONAL_DEX_TOGETIC 176 -#define NATIONAL_DEX_NATU 177 -#define NATIONAL_DEX_XATU 178 -#define NATIONAL_DEX_MAREEP 179 -#define NATIONAL_DEX_FLAAFFY 180 -#define NATIONAL_DEX_AMPHAROS 181 -#define NATIONAL_DEX_BELLOSSOM 182 -#define NATIONAL_DEX_MARILL 183 -#define NATIONAL_DEX_AZUMARILL 184 -#define NATIONAL_DEX_SUDOWOODO 185 -#define NATIONAL_DEX_POLITOED 186 -#define NATIONAL_DEX_HOPPIP 187 -#define NATIONAL_DEX_SKIPLOOM 188 -#define NATIONAL_DEX_JUMPLUFF 189 -#define NATIONAL_DEX_AIPOM 190 -#define NATIONAL_DEX_SUNKERN 191 -#define NATIONAL_DEX_SUNFLORA 192 -#define NATIONAL_DEX_YANMA 193 -#define NATIONAL_DEX_WOOPER 194 -#define NATIONAL_DEX_QUAGSIRE 195 -#define NATIONAL_DEX_ESPEON 196 -#define NATIONAL_DEX_UMBREON 197 -#define NATIONAL_DEX_MURKROW 198 -#define NATIONAL_DEX_SLOWKING 199 -#define NATIONAL_DEX_MISDREAVUS 200 -#define NATIONAL_DEX_UNOWN 201 -#define NATIONAL_DEX_WOBBUFFET 202 -#define NATIONAL_DEX_GIRAFARIG 203 -#define NATIONAL_DEX_PINECO 204 -#define NATIONAL_DEX_FORRETRESS 205 -#define NATIONAL_DEX_DUNSPARCE 206 -#define NATIONAL_DEX_GLIGAR 207 -#define NATIONAL_DEX_STEELIX 208 -#define NATIONAL_DEX_SNUBBULL 209 -#define NATIONAL_DEX_GRANBULL 210 -#define NATIONAL_DEX_QWILFISH 211 -#define NATIONAL_DEX_SCIZOR 212 -#define NATIONAL_DEX_SHUCKLE 213 -#define NATIONAL_DEX_HERACROSS 214 -#define NATIONAL_DEX_SNEASEL 215 -#define NATIONAL_DEX_TEDDIURSA 216 -#define NATIONAL_DEX_URSARING 217 -#define NATIONAL_DEX_SLUGMA 218 -#define NATIONAL_DEX_MAGCARGO 219 -#define NATIONAL_DEX_SWINUB 220 -#define NATIONAL_DEX_PILOSWINE 221 -#define NATIONAL_DEX_CORSOLA 222 -#define NATIONAL_DEX_REMORAID 223 -#define NATIONAL_DEX_OCTILLERY 224 -#define NATIONAL_DEX_DELIBIRD 225 -#define NATIONAL_DEX_MANTINE 226 -#define NATIONAL_DEX_SKARMORY 227 -#define NATIONAL_DEX_HOUNDOUR 228 -#define NATIONAL_DEX_HOUNDOOM 229 -#define NATIONAL_DEX_KINGDRA 230 -#define NATIONAL_DEX_PHANPY 231 -#define NATIONAL_DEX_DONPHAN 232 -#define NATIONAL_DEX_PORYGON2 233 -#define NATIONAL_DEX_STANTLER 234 -#define NATIONAL_DEX_SMEARGLE 235 -#define NATIONAL_DEX_TYROGUE 236 -#define NATIONAL_DEX_HITMONTOP 237 -#define NATIONAL_DEX_SMOOCHUM 238 -#define NATIONAL_DEX_ELEKID 239 -#define NATIONAL_DEX_MAGBY 240 -#define NATIONAL_DEX_MILTANK 241 -#define NATIONAL_DEX_BLISSEY 242 -#define NATIONAL_DEX_RAIKOU 243 -#define NATIONAL_DEX_ENTEI 244 -#define NATIONAL_DEX_SUICUNE 245 -#define NATIONAL_DEX_LARVITAR 246 -#define NATIONAL_DEX_PUPITAR 247 -#define NATIONAL_DEX_TYRANITAR 248 -#define NATIONAL_DEX_LUGIA 249 -#define NATIONAL_DEX_HO_OH 250 -#define NATIONAL_DEX_CELEBI 251 - -#define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI - -#define NATIONAL_DEX_TREECKO 252 -#define NATIONAL_DEX_GROVYLE 253 -#define NATIONAL_DEX_SCEPTILE 254 -#define NATIONAL_DEX_TORCHIC 255 -#define NATIONAL_DEX_COMBUSKEN 256 -#define NATIONAL_DEX_BLAZIKEN 257 -#define NATIONAL_DEX_MUDKIP 258 -#define NATIONAL_DEX_MARSHTOMP 259 -#define NATIONAL_DEX_SWAMPERT 260 -#define NATIONAL_DEX_POOCHYENA 261 -#define NATIONAL_DEX_MIGHTYENA 262 -#define NATIONAL_DEX_ZIGZAGOON 263 -#define NATIONAL_DEX_LINOONE 264 -#define NATIONAL_DEX_WURMPLE 265 -#define NATIONAL_DEX_SILCOON 266 -#define NATIONAL_DEX_BEAUTIFLY 267 -#define NATIONAL_DEX_CASCOON 268 -#define NATIONAL_DEX_DUSTOX 269 -#define NATIONAL_DEX_LOTAD 270 -#define NATIONAL_DEX_LOMBRE 271 -#define NATIONAL_DEX_LUDICOLO 272 -#define NATIONAL_DEX_SEEDOT 273 -#define NATIONAL_DEX_NUZLEAF 274 -#define NATIONAL_DEX_SHIFTRY 275 -#define NATIONAL_DEX_TAILLOW 276 -#define NATIONAL_DEX_SWELLOW 277 -#define NATIONAL_DEX_WINGULL 278 -#define NATIONAL_DEX_PELIPPER 279 -#define NATIONAL_DEX_RALTS 280 -#define NATIONAL_DEX_KIRLIA 281 -#define NATIONAL_DEX_GARDEVOIR 282 -#define NATIONAL_DEX_SURSKIT 283 -#define NATIONAL_DEX_MASQUERAIN 284 -#define NATIONAL_DEX_SHROOMISH 285 -#define NATIONAL_DEX_BRELOOM 286 -#define NATIONAL_DEX_SLAKOTH 287 -#define NATIONAL_DEX_VIGOROTH 288 -#define NATIONAL_DEX_SLAKING 289 -#define NATIONAL_DEX_NINCADA 290 -#define NATIONAL_DEX_NINJASK 291 -#define NATIONAL_DEX_SHEDINJA 292 -#define NATIONAL_DEX_WHISMUR 293 -#define NATIONAL_DEX_LOUDRED 294 -#define NATIONAL_DEX_EXPLOUD 295 -#define NATIONAL_DEX_MAKUHITA 296 -#define NATIONAL_DEX_HARIYAMA 297 -#define NATIONAL_DEX_AZURILL 298 -#define NATIONAL_DEX_NOSEPASS 299 -#define NATIONAL_DEX_SKITTY 300 -#define NATIONAL_DEX_DELCATTY 301 -#define NATIONAL_DEX_SABLEYE 302 -#define NATIONAL_DEX_MAWILE 303 -#define NATIONAL_DEX_ARON 304 -#define NATIONAL_DEX_LAIRON 305 -#define NATIONAL_DEX_AGGRON 306 -#define NATIONAL_DEX_MEDITITE 307 -#define NATIONAL_DEX_MEDICHAM 308 -#define NATIONAL_DEX_ELECTRIKE 309 -#define NATIONAL_DEX_MANECTRIC 310 -#define NATIONAL_DEX_PLUSLE 311 -#define NATIONAL_DEX_MINUN 312 -#define NATIONAL_DEX_VOLBEAT 313 -#define NATIONAL_DEX_ILLUMISE 314 -#define NATIONAL_DEX_ROSELIA 315 -#define NATIONAL_DEX_GULPIN 316 -#define NATIONAL_DEX_SWALOT 317 -#define NATIONAL_DEX_CARVANHA 318 -#define NATIONAL_DEX_SHARPEDO 319 -#define NATIONAL_DEX_WAILMER 320 -#define NATIONAL_DEX_WAILORD 321 -#define NATIONAL_DEX_NUMEL 322 -#define NATIONAL_DEX_CAMERUPT 323 -#define NATIONAL_DEX_TORKOAL 324 -#define NATIONAL_DEX_SPOINK 325 -#define NATIONAL_DEX_GRUMPIG 326 -#define NATIONAL_DEX_SPINDA 327 -#define NATIONAL_DEX_TRAPINCH 328 -#define NATIONAL_DEX_VIBRAVA 329 -#define NATIONAL_DEX_FLYGON 330 -#define NATIONAL_DEX_CACNEA 331 -#define NATIONAL_DEX_CACTURNE 332 -#define NATIONAL_DEX_SWABLU 333 -#define NATIONAL_DEX_ALTARIA 334 -#define NATIONAL_DEX_ZANGOOSE 335 -#define NATIONAL_DEX_SEVIPER 336 -#define NATIONAL_DEX_LUNATONE 337 -#define NATIONAL_DEX_SOLROCK 338 -#define NATIONAL_DEX_BARBOACH 339 -#define NATIONAL_DEX_WHISCASH 340 -#define NATIONAL_DEX_CORPHISH 341 -#define NATIONAL_DEX_CRAWDAUNT 342 -#define NATIONAL_DEX_BALTOY 343 -#define NATIONAL_DEX_CLAYDOL 344 -#define NATIONAL_DEX_LILEEP 345 -#define NATIONAL_DEX_CRADILY 346 -#define NATIONAL_DEX_ANORITH 347 -#define NATIONAL_DEX_ARMALDO 348 -#define NATIONAL_DEX_FEEBAS 349 -#define NATIONAL_DEX_MILOTIC 350 -#define NATIONAL_DEX_CASTFORM 351 -#define NATIONAL_DEX_KECLEON 352 -#define NATIONAL_DEX_SHUPPET 353 -#define NATIONAL_DEX_BANETTE 354 -#define NATIONAL_DEX_DUSKULL 355 -#define NATIONAL_DEX_DUSCLOPS 356 -#define NATIONAL_DEX_TROPIUS 357 -#define NATIONAL_DEX_CHIMECHO 358 -#define NATIONAL_DEX_ABSOL 359 -#define NATIONAL_DEX_WYNAUT 360 -#define NATIONAL_DEX_SNORUNT 361 -#define NATIONAL_DEX_GLALIE 362 -#define NATIONAL_DEX_SPHEAL 363 -#define NATIONAL_DEX_SEALEO 364 -#define NATIONAL_DEX_WALREIN 365 -#define NATIONAL_DEX_CLAMPERL 366 -#define NATIONAL_DEX_HUNTAIL 367 -#define NATIONAL_DEX_GOREBYSS 368 -#define NATIONAL_DEX_RELICANTH 369 -#define NATIONAL_DEX_LUVDISC 370 -#define NATIONAL_DEX_BAGON 371 -#define NATIONAL_DEX_SHELGON 372 -#define NATIONAL_DEX_SALAMENCE 373 -#define NATIONAL_DEX_BELDUM 374 -#define NATIONAL_DEX_METANG 375 -#define NATIONAL_DEX_METAGROSS 376 -#define NATIONAL_DEX_REGIROCK 377 -#define NATIONAL_DEX_REGICE 378 -#define NATIONAL_DEX_REGISTEEL 379 -#define NATIONAL_DEX_LATIAS 380 -#define NATIONAL_DEX_LATIOS 381 -#define NATIONAL_DEX_KYOGRE 382 -#define NATIONAL_DEX_GROUDON 383 -#define NATIONAL_DEX_RAYQUAZA 384 -#define NATIONAL_DEX_JIRACHI 385 -#define NATIONAL_DEX_DEOXYS 386 -#define NATIONAL_DEX_TURTWIG 387 -#define NATIONAL_DEX_GROTLE 388 -#define NATIONAL_DEX_TORTERRA 389 -#define NATIONAL_DEX_CHIMCHAR 390 -#define NATIONAL_DEX_MONFERNO 391 -#define NATIONAL_DEX_INFERNAPE 392 -#define NATIONAL_DEX_PIPLUP 393 -#define NATIONAL_DEX_PRINPLUP 394 -#define NATIONAL_DEX_EMPOLEON 395 -#define NATIONAL_DEX_STARLY 396 -#define NATIONAL_DEX_STARAVIA 397 -#define NATIONAL_DEX_STARAPTOR 398 -#define NATIONAL_DEX_BIDOOF 399 -#define NATIONAL_DEX_BIBAREL 400 -#define NATIONAL_DEX_KRICKETOT 401 -#define NATIONAL_DEX_KRICKETUNE 402 -#define NATIONAL_DEX_SHINX 403 -#define NATIONAL_DEX_LUXIO 404 -#define NATIONAL_DEX_LUXRAY 405 -#define NATIONAL_DEX_BUDEW 406 -#define NATIONAL_DEX_ROSERADE 407 -#define NATIONAL_DEX_CRANIDOS 408 -#define NATIONAL_DEX_RAMPARDOS 409 -#define NATIONAL_DEX_SHIELDON 410 -#define NATIONAL_DEX_BASTIODON 411 -#define NATIONAL_DEX_BURMY 412 -#define NATIONAL_DEX_WORMADAM 413 -#define NATIONAL_DEX_MOTHIM 414 -#define NATIONAL_DEX_COMBEE 415 -#define NATIONAL_DEX_VESPIQUEN 416 -#define NATIONAL_DEX_PACHIRISU 417 -#define NATIONAL_DEX_BUIZEL 418 -#define NATIONAL_DEX_FLOATZEL 419 -#define NATIONAL_DEX_CHERUBI 420 -#define NATIONAL_DEX_CHERRIM 421 -#define NATIONAL_DEX_SHELLOS 422 -#define NATIONAL_DEX_GASTRODON 423 -#define NATIONAL_DEX_AMBIPOM 424 -#define NATIONAL_DEX_DRIFLOON 425 -#define NATIONAL_DEX_DRIFBLIM 426 -#define NATIONAL_DEX_BUNEARY 427 -#define NATIONAL_DEX_LOPUNNY 428 -#define NATIONAL_DEX_MISMAGIUS 429 -#define NATIONAL_DEX_HONCHKROW 430 -#define NATIONAL_DEX_GLAMEOW 431 -#define NATIONAL_DEX_PURUGLY 432 -#define NATIONAL_DEX_CHINGLING 433 -#define NATIONAL_DEX_STUNKY 434 -#define NATIONAL_DEX_SKUNTANK 435 -#define NATIONAL_DEX_BRONZOR 436 -#define NATIONAL_DEX_BRONZONG 437 -#define NATIONAL_DEX_BONSLY 438 -#define NATIONAL_DEX_MIME_JR 439 -#define NATIONAL_DEX_HAPPINY 440 -#define NATIONAL_DEX_CHATOT 441 -#define NATIONAL_DEX_SPIRITOMB 442 -#define NATIONAL_DEX_GIBLE 443 -#define NATIONAL_DEX_GABITE 444 -#define NATIONAL_DEX_GARCHOMP 445 -#define NATIONAL_DEX_MUNCHLAX 446 -#define NATIONAL_DEX_RIOLU 447 -#define NATIONAL_DEX_LUCARIO 448 -#define NATIONAL_DEX_HIPPOPOTAS 449 -#define NATIONAL_DEX_HIPPOWDON 450 -#define NATIONAL_DEX_SKORUPI 451 -#define NATIONAL_DEX_DRAPION 452 -#define NATIONAL_DEX_CROAGUNK 453 -#define NATIONAL_DEX_TOXICROAK 454 -#define NATIONAL_DEX_CARNIVINE 455 -#define NATIONAL_DEX_FINNEON 456 -#define NATIONAL_DEX_LUMINEON 457 -#define NATIONAL_DEX_MANTYKE 458 -#define NATIONAL_DEX_SNOVER 459 -#define NATIONAL_DEX_ABOMASNOW 460 -#define NATIONAL_DEX_WEAVILE 461 -#define NATIONAL_DEX_MAGNEZONE 462 -#define NATIONAL_DEX_LICKILICKY 463 -#define NATIONAL_DEX_RHYPERIOR 464 -#define NATIONAL_DEX_TANGROWTH 465 -#define NATIONAL_DEX_ELECTIVIRE 466 -#define NATIONAL_DEX_MAGMORTAR 467 -#define NATIONAL_DEX_TOGEKISS 468 -#define NATIONAL_DEX_YANMEGA 469 -#define NATIONAL_DEX_LEAFEON 470 -#define NATIONAL_DEX_GLACEON 471 -#define NATIONAL_DEX_GLISCOR 472 -#define NATIONAL_DEX_MAMOSWINE 473 -#define NATIONAL_DEX_PORYGON_Z 474 -#define NATIONAL_DEX_GALLADE 475 -#define NATIONAL_DEX_PROBOPASS 476 -#define NATIONAL_DEX_DUSKNOIR 477 -#define NATIONAL_DEX_FROSLASS 478 -#define NATIONAL_DEX_ROTOM 479 -#define NATIONAL_DEX_UXIE 480 -#define NATIONAL_DEX_MESPRIT 481 -#define NATIONAL_DEX_AZELF 482 -#define NATIONAL_DEX_DIALGA 483 -#define NATIONAL_DEX_PALKIA 484 -#define NATIONAL_DEX_HEATRAN 485 -#define NATIONAL_DEX_REGIGIGAS 486 -#define NATIONAL_DEX_GIRATINA 487 -#define NATIONAL_DEX_CRESSELIA 488 -#define NATIONAL_DEX_PHIONE 489 -#define NATIONAL_DEX_MANAPHY 490 -#define NATIONAL_DEX_DARKRAI 491 -#define NATIONAL_DEX_SHAYMIN 492 -#define NATIONAL_DEX_ARCEUS 493 -#define NATIONAL_DEX_VICTINI 494 -#define NATIONAL_DEX_SNIVY 495 -#define NATIONAL_DEX_SERVINE 496 -#define NATIONAL_DEX_SERPERIOR 497 -#define NATIONAL_DEX_TEPIG 498 -#define NATIONAL_DEX_PIGNITE 499 -#define NATIONAL_DEX_EMBOAR 500 -#define NATIONAL_DEX_OSHAWOTT 501 -#define NATIONAL_DEX_DEWOTT 502 -#define NATIONAL_DEX_SAMUROTT 503 -#define NATIONAL_DEX_PATRAT 504 -#define NATIONAL_DEX_WATCHOG 505 -#define NATIONAL_DEX_LILLIPUP 506 -#define NATIONAL_DEX_HERDIER 507 -#define NATIONAL_DEX_STOUTLAND 508 -#define NATIONAL_DEX_PURRLOIN 509 -#define NATIONAL_DEX_LIEPARD 510 -#define NATIONAL_DEX_PANSAGE 511 -#define NATIONAL_DEX_SIMISAGE 512 -#define NATIONAL_DEX_PANSEAR 513 -#define NATIONAL_DEX_SIMISEAR 514 -#define NATIONAL_DEX_PANPOUR 515 -#define NATIONAL_DEX_SIMIPOUR 516 -#define NATIONAL_DEX_MUNNA 517 -#define NATIONAL_DEX_MUSHARNA 518 -#define NATIONAL_DEX_PIDOVE 519 -#define NATIONAL_DEX_TRANQUILL 520 -#define NATIONAL_DEX_UNFEZANT 521 -#define NATIONAL_DEX_BLITZLE 522 -#define NATIONAL_DEX_ZEBSTRIKA 523 -#define NATIONAL_DEX_ROGGENROLA 524 -#define NATIONAL_DEX_BOLDORE 525 -#define NATIONAL_DEX_GIGALITH 526 -#define NATIONAL_DEX_WOOBAT 527 -#define NATIONAL_DEX_SWOOBAT 528 -#define NATIONAL_DEX_DRILBUR 529 -#define NATIONAL_DEX_EXCADRILL 530 -#define NATIONAL_DEX_AUDINO 531 -#define NATIONAL_DEX_TIMBURR 532 -#define NATIONAL_DEX_GURDURR 533 -#define NATIONAL_DEX_CONKELDURR 534 -#define NATIONAL_DEX_TYMPOLE 535 -#define NATIONAL_DEX_PALPITOAD 536 -#define NATIONAL_DEX_SEISMITOAD 537 -#define NATIONAL_DEX_THROH 538 -#define NATIONAL_DEX_SAWK 539 -#define NATIONAL_DEX_SEWADDLE 540 -#define NATIONAL_DEX_SWADLOON 541 -#define NATIONAL_DEX_LEAVANNY 542 -#define NATIONAL_DEX_VENIPEDE 543 -#define NATIONAL_DEX_WHIRLIPEDE 544 -#define NATIONAL_DEX_SCOLIPEDE 545 -#define NATIONAL_DEX_COTTONEE 546 -#define NATIONAL_DEX_WHIMSICOTT 547 -#define NATIONAL_DEX_PETILIL 548 -#define NATIONAL_DEX_LILLIGANT 549 -#define NATIONAL_DEX_BASCULIN 550 -#define NATIONAL_DEX_SANDILE 551 -#define NATIONAL_DEX_KROKOROK 552 -#define NATIONAL_DEX_KROOKODILE 553 -#define NATIONAL_DEX_DARUMAKA 554 -#define NATIONAL_DEX_DARMANITAN 555 -#define NATIONAL_DEX_MARACTUS 556 -#define NATIONAL_DEX_DWEBBLE 557 -#define NATIONAL_DEX_CRUSTLE 558 -#define NATIONAL_DEX_SCRAGGY 559 -#define NATIONAL_DEX_SCRAFTY 560 -#define NATIONAL_DEX_SIGILYPH 561 -#define NATIONAL_DEX_YAMASK 562 -#define NATIONAL_DEX_COFAGRIGUS 563 -#define NATIONAL_DEX_TIRTOUGA 564 -#define NATIONAL_DEX_CARRACOSTA 565 -#define NATIONAL_DEX_ARCHEN 566 -#define NATIONAL_DEX_ARCHEOPS 567 -#define NATIONAL_DEX_TRUBBISH 568 -#define NATIONAL_DEX_GARBODOR 569 -#define NATIONAL_DEX_ZORUA 570 -#define NATIONAL_DEX_ZOROARK 571 -#define NATIONAL_DEX_MINCCINO 572 -#define NATIONAL_DEX_CINCCINO 573 -#define NATIONAL_DEX_GOTHITA 574 -#define NATIONAL_DEX_GOTHORITA 575 -#define NATIONAL_DEX_GOTHITELLE 576 -#define NATIONAL_DEX_SOLOSIS 577 -#define NATIONAL_DEX_DUOSION 578 -#define NATIONAL_DEX_REUNICLUS 579 -#define NATIONAL_DEX_DUCKLETT 580 -#define NATIONAL_DEX_SWANNA 581 -#define NATIONAL_DEX_VANILLITE 582 -#define NATIONAL_DEX_VANILLISH 583 -#define NATIONAL_DEX_VANILLUXE 584 -#define NATIONAL_DEX_DEERLING 585 -#define NATIONAL_DEX_SAWSBUCK 586 -#define NATIONAL_DEX_EMOLGA 587 -#define NATIONAL_DEX_KARRABLAST 588 -#define NATIONAL_DEX_ESCAVALIER 589 -#define NATIONAL_DEX_FOONGUS 590 -#define NATIONAL_DEX_AMOONGUSS 591 -#define NATIONAL_DEX_FRILLISH 592 -#define NATIONAL_DEX_JELLICENT 593 -#define NATIONAL_DEX_ALOMOMOLA 594 -#define NATIONAL_DEX_JOLTIK 595 -#define NATIONAL_DEX_GALVANTULA 596 -#define NATIONAL_DEX_FERROSEED 597 -#define NATIONAL_DEX_FERROTHORN 598 -#define NATIONAL_DEX_KLINK 599 -#define NATIONAL_DEX_KLANG 600 -#define NATIONAL_DEX_KLINKLANG 601 -#define NATIONAL_DEX_TYNAMO 602 -#define NATIONAL_DEX_EELEKTRIK 603 -#define NATIONAL_DEX_EELEKTROSS 604 -#define NATIONAL_DEX_ELGYEM 605 -#define NATIONAL_DEX_BEHEEYEM 606 -#define NATIONAL_DEX_LITWICK 607 -#define NATIONAL_DEX_LAMPENT 608 -#define NATIONAL_DEX_CHANDELURE 609 -#define NATIONAL_DEX_AXEW 610 -#define NATIONAL_DEX_FRAXURE 611 -#define NATIONAL_DEX_HAXORUS 612 -#define NATIONAL_DEX_CUBCHOO 613 -#define NATIONAL_DEX_BEARTIC 614 -#define NATIONAL_DEX_CRYOGONAL 615 -#define NATIONAL_DEX_SHELMET 616 -#define NATIONAL_DEX_ACCELGOR 617 -#define NATIONAL_DEX_STUNFISK 618 -#define NATIONAL_DEX_MIENFOO 619 -#define NATIONAL_DEX_MIENSHAO 620 -#define NATIONAL_DEX_DRUDDIGON 621 -#define NATIONAL_DEX_GOLETT 622 -#define NATIONAL_DEX_GOLURK 623 -#define NATIONAL_DEX_PAWNIARD 624 -#define NATIONAL_DEX_BISHARP 625 -#define NATIONAL_DEX_BOUFFALANT 626 -#define NATIONAL_DEX_RUFFLET 627 -#define NATIONAL_DEX_BRAVIARY 628 -#define NATIONAL_DEX_VULLABY 629 -#define NATIONAL_DEX_MANDIBUZZ 630 -#define NATIONAL_DEX_HEATMOR 631 -#define NATIONAL_DEX_DURANT 632 -#define NATIONAL_DEX_DEINO 633 -#define NATIONAL_DEX_ZWEILOUS 634 -#define NATIONAL_DEX_HYDREIGON 635 -#define NATIONAL_DEX_LARVESTA 636 -#define NATIONAL_DEX_VOLCARONA 637 -#define NATIONAL_DEX_COBALION 638 -#define NATIONAL_DEX_TERRAKION 639 -#define NATIONAL_DEX_VIRIZION 640 -#define NATIONAL_DEX_TORNADUS 641 -#define NATIONAL_DEX_THUNDURUS 642 -#define NATIONAL_DEX_RESHIRAM 643 -#define NATIONAL_DEX_ZEKROM 644 -#define NATIONAL_DEX_LANDORUS 645 -#define NATIONAL_DEX_KYUREM 646 -#define NATIONAL_DEX_KELDEO 647 -#define NATIONAL_DEX_MELOETTA 648 -#define NATIONAL_DEX_GENESECT 649 -#define NATIONAL_DEX_CHESPIN 650 -#define NATIONAL_DEX_QUILLADIN 651 -#define NATIONAL_DEX_CHESNAUGHT 652 -#define NATIONAL_DEX_FENNEKIN 653 -#define NATIONAL_DEX_BRAIXEN 654 -#define NATIONAL_DEX_DELPHOX 655 -#define NATIONAL_DEX_FROAKIE 656 -#define NATIONAL_DEX_FROGADIER 657 -#define NATIONAL_DEX_GRENINJA 658 -#define NATIONAL_DEX_BUNNELBY 659 -#define NATIONAL_DEX_DIGGERSBY 660 -#define NATIONAL_DEX_FLETCHLING 661 -#define NATIONAL_DEX_FLETCHINDER 662 -#define NATIONAL_DEX_TALONFLAME 663 -#define NATIONAL_DEX_SCATTERBUG 664 -#define NATIONAL_DEX_SPEWPA 665 -#define NATIONAL_DEX_VIVILLON 666 -#define NATIONAL_DEX_LITLEO 667 -#define NATIONAL_DEX_PYROAR 668 -#define NATIONAL_DEX_FLABEBE 669 -#define NATIONAL_DEX_FLOETTE 670 -#define NATIONAL_DEX_FLORGES 671 -#define NATIONAL_DEX_SKIDDO 672 -#define NATIONAL_DEX_GOGOAT 673 -#define NATIONAL_DEX_PANCHAM 674 -#define NATIONAL_DEX_PANGORO 675 -#define NATIONAL_DEX_FURFROU 676 -#define NATIONAL_DEX_ESPURR 677 -#define NATIONAL_DEX_MEOWSTIC 678 -#define NATIONAL_DEX_HONEDGE 679 -#define NATIONAL_DEX_DOUBLADE 680 -#define NATIONAL_DEX_AEGISLASH 681 -#define NATIONAL_DEX_SPRITZEE 682 -#define NATIONAL_DEX_AROMATISSE 683 -#define NATIONAL_DEX_SWIRLIX 684 -#define NATIONAL_DEX_SLURPUFF 685 -#define NATIONAL_DEX_INKAY 686 -#define NATIONAL_DEX_MALAMAR 687 -#define NATIONAL_DEX_BINACLE 688 -#define NATIONAL_DEX_BARBARACLE 689 -#define NATIONAL_DEX_SKRELP 690 -#define NATIONAL_DEX_DRAGALGE 691 -#define NATIONAL_DEX_CLAUNCHER 692 -#define NATIONAL_DEX_CLAWITZER 693 -#define NATIONAL_DEX_HELIOPTILE 694 -#define NATIONAL_DEX_HELIOLISK 695 -#define NATIONAL_DEX_TYRUNT 696 -#define NATIONAL_DEX_TYRANTRUM 697 -#define NATIONAL_DEX_AMAURA 698 -#define NATIONAL_DEX_AURORUS 699 -#define NATIONAL_DEX_SYLVEON 700 -#define NATIONAL_DEX_HAWLUCHA 701 -#define NATIONAL_DEX_DEDENNE 702 -#define NATIONAL_DEX_CARBINK 703 -#define NATIONAL_DEX_GOOMY 704 -#define NATIONAL_DEX_SLIGGOO 705 -#define NATIONAL_DEX_GOODRA 706 -#define NATIONAL_DEX_KLEFKI 707 -#define NATIONAL_DEX_PHANTUMP 708 -#define NATIONAL_DEX_TREVENANT 709 -#define NATIONAL_DEX_PUMPKABOO 710 -#define NATIONAL_DEX_GOURGEIST 711 -#define NATIONAL_DEX_BERGMITE 712 -#define NATIONAL_DEX_AVALUGG 713 -#define NATIONAL_DEX_NOIBAT 714 -#define NATIONAL_DEX_NOIVERN 715 -#define NATIONAL_DEX_XERNEAS 716 -#define NATIONAL_DEX_YVELTAL 717 -#define NATIONAL_DEX_ZYGARDE 718 -#define NATIONAL_DEX_DIANCIE 719 -#define NATIONAL_DEX_HOOPA 720 -#define NATIONAL_DEX_VOLCANION 721 -#define NATIONAL_DEX_ROWLET 722 -#define NATIONAL_DEX_DARTRIX 723 -#define NATIONAL_DEX_DECIDUEYE 724 -#define NATIONAL_DEX_LITTEN 725 -#define NATIONAL_DEX_TORRACAT 726 -#define NATIONAL_DEX_INCINEROAR 727 -#define NATIONAL_DEX_POPPLIO 728 -#define NATIONAL_DEX_BRIONNE 729 -#define NATIONAL_DEX_PRIMARINA 730 -#define NATIONAL_DEX_PIKIPEK 731 -#define NATIONAL_DEX_TRUMBEAK 732 -#define NATIONAL_DEX_TOUCANNON 733 -#define NATIONAL_DEX_YUNGOOS 734 -#define NATIONAL_DEX_GUMSHOOS 735 -#define NATIONAL_DEX_GRUBBIN 736 -#define NATIONAL_DEX_CHARJABUG 737 -#define NATIONAL_DEX_VIKAVOLT 738 -#define NATIONAL_DEX_CRABRAWLER 739 -#define NATIONAL_DEX_CRABOMINABLE 740 -#define NATIONAL_DEX_ORICORIO 741 -#define NATIONAL_DEX_CUTIEFLY 742 -#define NATIONAL_DEX_RIBOMBEE 743 -#define NATIONAL_DEX_ROCKRUFF 744 -#define NATIONAL_DEX_LYCANROC 745 -#define NATIONAL_DEX_WISHIWASHI 746 -#define NATIONAL_DEX_MAREANIE 747 -#define NATIONAL_DEX_TOXAPEX 748 -#define NATIONAL_DEX_MUDBRAY 749 -#define NATIONAL_DEX_MUDSDALE 750 -#define NATIONAL_DEX_DEWPIDER 751 -#define NATIONAL_DEX_ARAQUANID 752 -#define NATIONAL_DEX_FOMANTIS 753 -#define NATIONAL_DEX_LURANTIS 754 -#define NATIONAL_DEX_MORELULL 755 -#define NATIONAL_DEX_SHIINOTIC 756 -#define NATIONAL_DEX_SALANDIT 757 -#define NATIONAL_DEX_SALAZZLE 758 -#define NATIONAL_DEX_STUFFUL 759 -#define NATIONAL_DEX_BEWEAR 760 -#define NATIONAL_DEX_BOUNSWEET 761 -#define NATIONAL_DEX_STEENEE 762 -#define NATIONAL_DEX_TSAREENA 763 -#define NATIONAL_DEX_COMFEY 764 -#define NATIONAL_DEX_ORANGURU 765 -#define NATIONAL_DEX_PASSIMIAN 766 -#define NATIONAL_DEX_WIMPOD 767 -#define NATIONAL_DEX_GOLISOPOD 768 -#define NATIONAL_DEX_SANDYGAST 769 -#define NATIONAL_DEX_PALOSSAND 770 -#define NATIONAL_DEX_PYUKUMUKU 771 -#define NATIONAL_DEX_TYPE_NULL 772 -#define NATIONAL_DEX_SILVALLY 773 -#define NATIONAL_DEX_MINIOR 774 -#define NATIONAL_DEX_KOMALA 775 -#define NATIONAL_DEX_TURTONATOR 776 -#define NATIONAL_DEX_TOGEDEMARU 777 -#define NATIONAL_DEX_MIMIKYU 778 -#define NATIONAL_DEX_BRUXISH 779 -#define NATIONAL_DEX_DRAMPA 780 -#define NATIONAL_DEX_DHELMISE 781 -#define NATIONAL_DEX_JANGMO_O 782 -#define NATIONAL_DEX_HAKAMO_O 783 -#define NATIONAL_DEX_KOMMO_O 784 -#define NATIONAL_DEX_TAPU_KOKO 785 -#define NATIONAL_DEX_TAPU_LELE 786 -#define NATIONAL_DEX_TAPU_BULU 787 -#define NATIONAL_DEX_TAPU_FINI 788 -#define NATIONAL_DEX_COSMOG 789 -#define NATIONAL_DEX_COSMOEM 790 -#define NATIONAL_DEX_SOLGALEO 791 -#define NATIONAL_DEX_LUNALA 792 -#define NATIONAL_DEX_NIHILEGO 793 -#define NATIONAL_DEX_BUZZWOLE 794 -#define NATIONAL_DEX_PHEROMOSA 795 -#define NATIONAL_DEX_XURKITREE 796 -#define NATIONAL_DEX_CELESTEELA 797 -#define NATIONAL_DEX_KARTANA 798 -#define NATIONAL_DEX_GUZZLORD 799 -#define NATIONAL_DEX_NECROZMA 800 -#define NATIONAL_DEX_MAGEARNA 801 -#define NATIONAL_DEX_MARSHADOW 802 -#define NATIONAL_DEX_POIPOLE 803 -#define NATIONAL_DEX_NAGANADEL 804 -#define NATIONAL_DEX_STAKATAKA 805 -#define NATIONAL_DEX_BLACEPHALON 806 -#define NATIONAL_DEX_ZERAORA 807 -#define NATIONAL_DEX_MELTAN 808 -#define NATIONAL_DEX_MELMETAL 809 -#define NATIONAL_DEX_GROOKEY 810 -#define NATIONAL_DEX_THWACKEY 811 -#define NATIONAL_DEX_RILLABOOM 812 -#define NATIONAL_DEX_SCORBUNNY 813 -#define NATIONAL_DEX_RABOOT 814 -#define NATIONAL_DEX_CINDERACE 815 -#define NATIONAL_DEX_SOBBLE 816 -#define NATIONAL_DEX_DRIZZILE 817 -#define NATIONAL_DEX_INTELEON 818 -#define NATIONAL_DEX_SKWOVET 819 -#define NATIONAL_DEX_GREEDENT 820 -#define NATIONAL_DEX_ROOKIDEE 821 -#define NATIONAL_DEX_CORVISQUIRE 822 -#define NATIONAL_DEX_CORVIKNIGHT 823 -#define NATIONAL_DEX_BLIPBUG 824 -#define NATIONAL_DEX_DOTTLER 825 -#define NATIONAL_DEX_ORBEETLE 826 -#define NATIONAL_DEX_NICKIT 827 -#define NATIONAL_DEX_THIEVUL 828 -#define NATIONAL_DEX_GOSSIFLEUR 829 -#define NATIONAL_DEX_ELDEGOSS 830 -#define NATIONAL_DEX_WOOLOO 831 -#define NATIONAL_DEX_DUBWOOL 832 -#define NATIONAL_DEX_CHEWTLE 833 -#define NATIONAL_DEX_DREDNAW 834 -#define NATIONAL_DEX_YAMPER 835 -#define NATIONAL_DEX_BOLTUND 836 -#define NATIONAL_DEX_ROLYCOLY 837 -#define NATIONAL_DEX_CARKOL 838 -#define NATIONAL_DEX_COALOSSAL 839 -#define NATIONAL_DEX_APPLIN 840 -#define NATIONAL_DEX_FLAPPLE 841 -#define NATIONAL_DEX_APPLETUN 842 -#define NATIONAL_DEX_SILICOBRA 843 -#define NATIONAL_DEX_SANDACONDA 844 -#define NATIONAL_DEX_CRAMORANT 845 -#define NATIONAL_DEX_ARROKUDA 846 -#define NATIONAL_DEX_BARRASKEWDA 847 -#define NATIONAL_DEX_TOXEL 848 -#define NATIONAL_DEX_TOXTRICITY 849 -#define NATIONAL_DEX_SIZZLIPEDE 850 -#define NATIONAL_DEX_CENTISKORCH 851 -#define NATIONAL_DEX_CLOBBOPUS 852 -#define NATIONAL_DEX_GRAPPLOCT 853 -#define NATIONAL_DEX_SINISTEA 854 -#define NATIONAL_DEX_POLTEAGEIST 855 -#define NATIONAL_DEX_HATENNA 856 -#define NATIONAL_DEX_HATTREM 857 -#define NATIONAL_DEX_HATTERENE 858 -#define NATIONAL_DEX_IMPIDIMP 859 -#define NATIONAL_DEX_MORGREM 860 -#define NATIONAL_DEX_GRIMMSNARL 861 -#define NATIONAL_DEX_OBSTAGOON 862 -#define NATIONAL_DEX_PERRSERKER 863 -#define NATIONAL_DEX_CURSOLA 864 -#define NATIONAL_DEX_SIRFETCHD 865 -#define NATIONAL_DEX_MR_RIME 866 -#define NATIONAL_DEX_RUNERIGUS 867 -#define NATIONAL_DEX_MILCERY 868 -#define NATIONAL_DEX_ALCREMIE 869 -#define NATIONAL_DEX_FALINKS 870 -#define NATIONAL_DEX_PINCURCHIN 871 -#define NATIONAL_DEX_SNOM 872 -#define NATIONAL_DEX_FROSMOTH 873 -#define NATIONAL_DEX_STONJOURNER 874 -#define NATIONAL_DEX_EISCUE 875 -#define NATIONAL_DEX_INDEEDEE 876 -#define NATIONAL_DEX_MORPEKO 877 -#define NATIONAL_DEX_CUFANT 878 -#define NATIONAL_DEX_COPPERAJAH 879 -#define NATIONAL_DEX_DRACOZOLT 880 -#define NATIONAL_DEX_ARCTOZOLT 881 -#define NATIONAL_DEX_DRACOVISH 882 -#define NATIONAL_DEX_ARCTOVISH 883 -#define NATIONAL_DEX_DURALUDON 884 -#define NATIONAL_DEX_DREEPY 885 -#define NATIONAL_DEX_DRAKLOAK 886 -#define NATIONAL_DEX_DRAGAPULT 887 -#define NATIONAL_DEX_ZACIAN 888 -#define NATIONAL_DEX_ZAMAZENTA 889 -#define NATIONAL_DEX_ETERNATUS 890 -#define NATIONAL_DEX_KUBFU 891 -#define NATIONAL_DEX_URSHIFU 892 -#define NATIONAL_DEX_ZARUDE 893 -#define NATIONAL_DEX_REGIELEKI 894 -#define NATIONAL_DEX_REGIDRAGO 895 -#define NATIONAL_DEX_GLASTRIER 896 -#define NATIONAL_DEX_SPECTRIER 897 -#define NATIONAL_DEX_CALYREX 898 - -#define NATIONAL_DEX_COUNT NATIONAL_DEX_CALYREX -#define POKEMON_SLOTS_NUMBER (NATIONAL_DEX_COUNT + 1) - -// Hoenn Dex(ORAS) Index Defines -#define HOENN_DEX_NONE 0 -#define HOENN_DEX_TREECKO 1 -#define HOENN_DEX_GROVYLE 2 -#define HOENN_DEX_SCEPTILE 3 -#define HOENN_DEX_TORCHIC 4 -#define HOENN_DEX_COMBUSKEN 5 -#define HOENN_DEX_BLAZIKEN 6 -#define HOENN_DEX_MUDKIP 7 -#define HOENN_DEX_MARSHTOMP 8 -#define HOENN_DEX_SWAMPERT 9 -#define HOENN_DEX_POOCHYENA 10 -#define HOENN_DEX_MIGHTYENA 11 -#define HOENN_DEX_ZIGZAGOON 12 -#define HOENN_DEX_LINOONE 13 -#define HOENN_DEX_WURMPLE 14 -#define HOENN_DEX_SILCOON 15 -#define HOENN_DEX_BEAUTIFLY 16 -#define HOENN_DEX_CASCOON 17 -#define HOENN_DEX_DUSTOX 18 -#define HOENN_DEX_LOTAD 19 -#define HOENN_DEX_LOMBRE 20 -#define HOENN_DEX_LUDICOLO 21 -#define HOENN_DEX_SEEDOT 22 -#define HOENN_DEX_NUZLEAF 23 -#define HOENN_DEX_SHIFTRY 24 -#define HOENN_DEX_TAILLOW 25 -#define HOENN_DEX_SWELLOW 26 -#define HOENN_DEX_WINGULL 27 -#define HOENN_DEX_PELIPPER 28 -#define HOENN_DEX_RALTS 29 -#define HOENN_DEX_KIRLIA 30 -#define HOENN_DEX_GARDEVOIR 31 -#define HOENN_DEX_GALLADE 32 -#define HOENN_DEX_SURSKIT 33 -#define HOENN_DEX_MASQUERAIN 34 -#define HOENN_DEX_SHROOMISH 35 -#define HOENN_DEX_BRELOOM 36 -#define HOENN_DEX_SLAKOTH 37 -#define HOENN_DEX_VIGOROTH 38 -#define HOENN_DEX_SLAKING 39 -#define HOENN_DEX_ABRA 40 -#define HOENN_DEX_KADABRA 41 -#define HOENN_DEX_ALAKAZAM 42 -#define HOENN_DEX_NINCADA 43 -#define HOENN_DEX_NINJASK 44 -#define HOENN_DEX_SHEDINJA 45 -#define HOENN_DEX_WHISMUR 46 -#define HOENN_DEX_LOUDRED 47 -#define HOENN_DEX_EXPLOUD 48 -#define HOENN_DEX_MAKUHITA 49 -#define HOENN_DEX_HARIYAMA 50 -#define HOENN_DEX_GOLDEEN 51 -#define HOENN_DEX_SEAKING 52 -#define HOENN_DEX_MAGIKARP 53 -#define HOENN_DEX_GYARADOS 54 -#define HOENN_DEX_AZURILL 55 -#define HOENN_DEX_MARILL 56 -#define HOENN_DEX_AZUMARILL 57 -#define HOENN_DEX_GEODUDE 58 -#define HOENN_DEX_GRAVELER 59 -#define HOENN_DEX_GOLEM 60 -#define HOENN_DEX_NOSEPASS 61 -#define HOENN_DEX_PROBOPASS 62 -#define HOENN_DEX_SKITTY 63 -#define HOENN_DEX_DELCATTY 64 -#define HOENN_DEX_ZUBAT 65 -#define HOENN_DEX_GOLBAT 66 -#define HOENN_DEX_CROBAT 67 -#define HOENN_DEX_TENTACOOL 68 -#define HOENN_DEX_TENTACRUEL 69 -#define HOENN_DEX_SABLEYE 70 -#define HOENN_DEX_MAWILE 71 -#define HOENN_DEX_ARON 72 -#define HOENN_DEX_LAIRON 73 -#define HOENN_DEX_AGGRON 74 -#define HOENN_DEX_MACHOP 75 -#define HOENN_DEX_MACHOKE 76 -#define HOENN_DEX_MACHAMP 77 -#define HOENN_DEX_MEDITITE 78 -#define HOENN_DEX_MEDICHAM 79 -#define HOENN_DEX_ELECTRIKE 80 -#define HOENN_DEX_MANECTRIC 81 -#define HOENN_DEX_PLUSLE 82 -#define HOENN_DEX_MINUN 83 -#define HOENN_DEX_MAGNEMITE 84 -#define HOENN_DEX_MAGNETON 85 -#define HOENN_DEX_MAGNEZONE 86 -#define HOENN_DEX_VOLTORB 87 -#define HOENN_DEX_ELECTRODE 88 -#define HOENN_DEX_VOLBEAT 89 -#define HOENN_DEX_ILLUMISE 90 -#define HOENN_DEX_ODDISH 91 -#define HOENN_DEX_GLOOM 92 -#define HOENN_DEX_VILEPLUME 93 -#define HOENN_DEX_BELLOSSOM 94 -#define HOENN_DEX_DODUO 95 -#define HOENN_DEX_DODRIO 96 -#define HOENN_DEX_BUDEW 97 -#define HOENN_DEX_ROSELIA 98 -#define HOENN_DEX_ROSERADE 99 -#define HOENN_DEX_GULPIN 100 -#define HOENN_DEX_SWALOT 101 -#define HOENN_DEX_CARVANHA 102 -#define HOENN_DEX_SHARPEDO 103 -#define HOENN_DEX_WAILMER 104 -#define HOENN_DEX_WAILORD 105 -#define HOENN_DEX_NUMEL 106 -#define HOENN_DEX_CAMERUPT 107 -#define HOENN_DEX_SLUGMA 108 -#define HOENN_DEX_MAGCARGO 109 -#define HOENN_DEX_TORKOAL 110 -#define HOENN_DEX_GRIMER 111 -#define HOENN_DEX_MUK 112 -#define HOENN_DEX_KOFFING 113 -#define HOENN_DEX_WEEZING 114 -#define HOENN_DEX_SPOINK 115 -#define HOENN_DEX_GRUMPIG 116 -#define HOENN_DEX_SANDSHREW 117 -#define HOENN_DEX_SANDSLASH 118 -#define HOENN_DEX_SPINDA 119 -#define HOENN_DEX_SKARMORY 120 -#define HOENN_DEX_TRAPINCH 121 -#define HOENN_DEX_VIBRAVA 122 -#define HOENN_DEX_FLYGON 123 -#define HOENN_DEX_CACNEA 124 -#define HOENN_DEX_CACTURNE 125 -#define HOENN_DEX_SWABLU 126 -#define HOENN_DEX_ALTARIA 127 -#define HOENN_DEX_ZANGOOSE 128 -#define HOENN_DEX_SEVIPER 129 -#define HOENN_DEX_LUNATONE 130 -#define HOENN_DEX_SOLROCK 131 -#define HOENN_DEX_BARBOACH 132 -#define HOENN_DEX_WHISCASH 133 -#define HOENN_DEX_CORPHISH 134 -#define HOENN_DEX_CRAWDAUNT 135 -#define HOENN_DEX_BALTOY 136 -#define HOENN_DEX_CLAYDOL 137 -#define HOENN_DEX_LILEEP 138 -#define HOENN_DEX_CRADILY 139 -#define HOENN_DEX_ANORITH 140 -#define HOENN_DEX_ARMALDO 141 -#define HOENN_DEX_IGGLYBUFF 142 -#define HOENN_DEX_JIGGLYPUFF 143 -#define HOENN_DEX_WIGGLYTUFF 144 -#define HOENN_DEX_FEEBAS 145 -#define HOENN_DEX_MILOTIC 146 -#define HOENN_DEX_CASTFORM 147 -#define HOENN_DEX_STARYU 148 -#define HOENN_DEX_STARMIE 149 -#define HOENN_DEX_KECLEON 150 -#define HOENN_DEX_SHUPPET 151 -#define HOENN_DEX_BANETTE 152 -#define HOENN_DEX_DUSKULL 153 -#define HOENN_DEX_DUSCLOPS 154 -#define HOENN_DEX_DUSKNOIR 155 -#define HOENN_DEX_TROPIUS 156 -#define HOENN_DEX_CHINGLING 157 -#define HOENN_DEX_CHIMECHO 158 -#define HOENN_DEX_ABSOL 159 -#define HOENN_DEX_VULPIX 160 -#define HOENN_DEX_NINETALES 161 -#define HOENN_DEX_PICHU 162 -#define HOENN_DEX_PIKACHU 163 -#define HOENN_DEX_RAICHU 164 -#define HOENN_DEX_PSYDUCK 165 -#define HOENN_DEX_GOLDUCK 166 -#define HOENN_DEX_WYNAUT 167 -#define HOENN_DEX_WOBBUFFET 168 -#define HOENN_DEX_NATU 169 -#define HOENN_DEX_XATU 170 -#define HOENN_DEX_GIRAFARIG 171 -#define HOENN_DEX_PHANPY 172 -#define HOENN_DEX_DONPHAN 173 -#define HOENN_DEX_PINSIR 174 -#define HOENN_DEX_HERACROSS 175 -#define HOENN_DEX_RHYHORN 176 -#define HOENN_DEX_RHYDON 177 -#define HOENN_DEX_RHYPERIOR 178 -#define HOENN_DEX_SNORUNT 179 -#define HOENN_DEX_GLALIE 180 -#define HOENN_DEX_FROSLASS 181 -#define HOENN_DEX_SPHEAL 182 -#define HOENN_DEX_SEALEO 183 -#define HOENN_DEX_WALREIN 184 -#define HOENN_DEX_CLAMPERL 185 -#define HOENN_DEX_HUNTAIL 186 -#define HOENN_DEX_GOREBYSS 187 -#define HOENN_DEX_RELICANTH 188 -#define HOENN_DEX_CORSOLA 189 -#define HOENN_DEX_CHINCHOU 190 -#define HOENN_DEX_LANTURN 191 -#define HOENN_DEX_LUVDISC 192 -#define HOENN_DEX_HORSEA 193 -#define HOENN_DEX_SEADRA 194 -#define HOENN_DEX_KINGDRA 195 -#define HOENN_DEX_BAGON 196 -#define HOENN_DEX_SHELGON 197 -#define HOENN_DEX_SALAMENCE 198 -#define HOENN_DEX_BELDUM 199 -#define HOENN_DEX_METANG 200 -#define HOENN_DEX_METAGROSS 201 -#define HOENN_DEX_REGIROCK 202 -#define HOENN_DEX_REGICE 203 -#define HOENN_DEX_REGISTEEL 204 -#define HOENN_DEX_LATIAS 205 -#define HOENN_DEX_LATIOS 206 -#define HOENN_DEX_KYOGRE 207 -#define HOENN_DEX_GROUDON 208 -#define HOENN_DEX_RAYQUAZA 209 -#define HOENN_DEX_JIRACHI 210 -#define HOENN_DEX_DEOXYS 211 - -#define HOENN_DEX_COUNT 212 - -// species flags -#define F_ULTRA_BEAST (1 << 0) -#define F_ALOLAN_FORM (1 << 1) -#define F_GALARIAN_FORM (1 << 2) - #endif // GUARD_CONSTANTS_SPECIES_H diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h index 0e802bba80..e0f660b6f0 100644 --- a/include/constants/trainer_hill.h +++ b/include/constants/trainer_hill.h @@ -8,6 +8,12 @@ #define TRAINER_HILL_ROOF 5 #define TRAINER_HILL_ENTRANCE 6 +#define HILL_MODE_NORMAL 0 +#define HILL_MODE_VARIETY 1 +#define HILL_MODE_UNIQUE 2 +#define HILL_MODE_EXPERT 3 +#define NUM_TRAINER_HILL_MODES 4 + #define NUM_TRAINER_HILL_FLOORS 4 #define NUM_TRAINER_HILL_FLOORS_JP 2 @@ -30,20 +36,31 @@ #define TRAINER_HILL_FUNC_SET_GAME_SAVED 14 #define TRAINER_HILL_FUNC_CLEAR_GAME_SAVED 15 #define TRAINER_HILL_FUNC_GET_WON 16 -#define TRAINER_HILL_FUNC_SET_TAG 17 +#define TRAINER_HILL_FUNC_SET_MODE 17 #define TRAINER_HILL_TEXT_INTRO 2 #define TRAINER_HILL_TEXT_PLAYER_LOST 3 #define TRAINER_HILL_TEXT_PLAYER_WON 4 #define TRAINER_HILL_TEXT_AFTER 5 -#define TRAINER_HILL_TRAINERS_PER_FLOOR 2 -#define NUM_TRAINER_HILL_TRAINERS (NUM_TRAINER_HILL_FLOORS * TRAINER_HILL_TRAINERS_PER_FLOOR) -#define NUM_TRAINER_HILL_TRAINERS_JP (NUM_TRAINER_HILL_FLOORS_JP * TRAINER_HILL_TRAINERS_PER_FLOOR) +#define HILL_TRAINERS_PER_FLOOR 2 +#define NUM_TRAINER_HILL_TRAINERS (NUM_TRAINER_HILL_FLOORS * HILL_TRAINERS_PER_FLOOR) +#define NUM_TRAINER_HILL_TRAINERS_JP (NUM_TRAINER_HILL_FLOORS_JP * HILL_TRAINERS_PER_FLOOR) // Values returned by TrainerHillGetChallengeStatus #define TRAINER_HILL_PLAYER_STATUS_LOST 0 #define TRAINER_HILL_PLAYER_STATUS_ECARD_SCANNED 1 #define TRAINER_HILL_PLAYER_STATUS_NORMAL 2 +#define TRAINER_HILL_OTID 0x10000000 + +// The full map of each Trainer Hill floor is 16x21. +// The first 5x21 at the top is the entrance/exit area, +// and the remaining 16x16 is the randomized portion of +// the room where the trainers are. +#define HILL_FLOOR_WIDTH 16 +#define HILL_FLOOR_HEIGHT_MAIN 16 +#define HILL_FLOOR_HEIGHT_MARGIN 5 +#define HILL_FLOOR_HEIGHT (HILL_FLOOR_HEIGHT_MAIN + HILL_FLOOR_HEIGHT_MARGIN) + #endif diff --git a/include/constants/trainers.h b/include/constants/trainers.h index 3f22c7cef5..09ae720111 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -15,6 +15,7 @@ #define TRAINER_LINK_OPPONENT 2048 #define TRAINER_UNION_ROOM 3072 #define TRAINER_STEVEN_PARTNER 3075 +#define TRAINER_CUSTOM_PARTNER 3076 #define TRAINER_PIC_HIKER 0 #define TRAINER_PIC_AQUA_GRUNT_M 1 @@ -110,6 +111,7 @@ #define TRAINER_PIC_RS_BRENDAN 91 #define TRAINER_PIC_RS_MAY 92 +// The player back pics are assumed to alternate according to the gender values (MALE/FEMALE) #define TRAINER_BACK_PIC_BRENDAN 0 #define TRAINER_BACK_PIC_MAY 1 #define TRAINER_BACK_PIC_RED 2 @@ -334,7 +336,7 @@ #define TRAINER_CLASS_SAILOR 0x2f #define TRAINER_CLASS_COOLTRAINER_2 0x30 // Used for only one trainer. #define TRAINER_CLASS_MAGMA_ADMIN 0x31 -#define TRAINER_CLASS_PKMN_TRAINER_3 0x32 +#define TRAINER_CLASS_RIVAL 0x32 #define TRAINER_CLASS_BUG_CATCHER 0x33 #define TRAINER_CLASS_PKMN_RANGER 0x34 #define TRAINER_CLASS_MAGMA_LEADER 0x35 diff --git a/include/constants/tv.h b/include/constants/tv.h index 095a6ddca7..87748a31de 100644 --- a/include/constants/tv.h +++ b/include/constants/tv.h @@ -8,6 +8,14 @@ #define POKENEWS_BLENDMASTER 4 #define NUM_POKENEWS_TYPES 4 // Excludes NONE +#define POKENEWS_STATE_INACTIVE 0 +#define POKENEWS_STATE_UPCOMING 1 +#define POKENEWS_STATE_ACTIVE 2 + +// Number of days to count down until the news event occurs. +// Nothing is aired on TV the first day +#define POKENEWS_COUNTDOWN 4 + // TV shows are categorized as being in one of 3 groups // - TVGROUP_NORMAL, TV shows that can appear without Record Mixing // - TVGROUP_RECORD_MIX, TV shows that can only appear via Record Mixing @@ -35,7 +43,7 @@ // TVGROUP_RECORD_MIX #define TVGROUP_RECORD_MIX_START 21 -#define TVSHOW_POKEMON_TODAY_CAUGHT 21 +#define TVSHOW_POKEMON_TODAY_CAUGHT 21 #define TVSHOW_SMART_SHOPPER 22 #define TVSHOW_POKEMON_TODAY_FAILED 23 #define TVSHOW_FISHING_ADVICE 24 @@ -266,4 +274,21 @@ #define SMARTSHOPPER_NUM_ITEMS 3 +// TV Show states for Bravo Trainer's Battle Tower interview +#define BRAVOTOWER_STATE_INTRO 0 +#define BRAVOTOWER_STATE_NEW_RECORD 1 +#define BRAVOTOWER_STATE_LOST 2 +#define BRAVOTOWER_STATE_WON 3 +#define BRAVOTOWER_STATE_LOST_FINAL 4 +#define BRAVOTOWER_STATE_SATISFIED 5 +#define BRAVOTOWER_STATE_UNSATISFIED 6 +#define BRAVOTOWER_STATE_UNUSED_1 7 +#define BRAVOTOWER_STATE_UNUSED_2 8 +#define BRAVOTOWER_STATE_UNUSED_3 9 +#define BRAVOTOWER_STATE_UNUSED_4 10 +#define BRAVOTOWER_STATE_RESPONSE 11 +#define BRAVOTOWER_STATE_RESPONSE_SATISFIED 12 +#define BRAVOTOWER_STATE_RESPONSE_UNSATISFIED 13 +#define BRAVOTOWER_STATE_OUTRO 14 + #endif //GUARD_CONSTANTS_TV_H diff --git a/include/constants/union_room.h b/include/constants/union_room.h index d867fb3400..f47a8723ff 100644 --- a/include/constants/union_room.h +++ b/include/constants/union_room.h @@ -1,20 +1,26 @@ #ifndef GUARD_CONSTANTS_UNION_ROOM_H #define GUARD_CONSTANTS_UNION_ROOM_H -#define MAX_UNION_ROOM_PLAYERS 8 +// The number of possible group leaders visible in the Union Room. +// Note that this is different than the number of people actively +// connected as children via the Wireless Adapter, which cannot +// exceed RFU_CHILD_MAX (4), for a total of 5 including the player. +#define MAX_UNION_ROOM_LEADERS 8 #define UNION_ROOM_SPAWN_NONE 0 #define UNION_ROOM_SPAWN_IN 1 #define UNION_ROOM_SPAWN_OUT 2 +#define UNION_ROOM_MAX_LEVEL 30 + #define ACTIVITY_NONE 0 #define ACTIVITY_BATTLE_SINGLE 1 #define ACTIVITY_BATTLE_DOUBLE 2 #define ACTIVITY_BATTLE_MULTI 3 #define ACTIVITY_TRADE 4 #define ACTIVITY_CHAT 5 -#define ACTIVITY_WONDER_CARD 6 -#define ACTIVITY_WONDER_NEWS 7 +#define ACTIVITY_WONDER_CARD_DUP 6 // Duplicates of later WONDER constants +#define ACTIVITY_WONDER_NEWS_DUP 7 // #define ACTIVITY_CARD 8 #define ACTIVITY_POKEMON_JUMP 9 #define ACTIVITY_BERRY_CRUSH 10 @@ -32,9 +38,8 @@ #define ACTIVITY_NPCTALK 19 #define ACTIVITY_PLYRTALK 20 -// Duplicate IDs? -#define ACTIVITY_WONDER_CARD2 21 -#define ACTIVITY_WONDER_NEWS2 22 +#define ACTIVITY_WONDER_CARD 21 +#define ACTIVITY_WONDER_NEWS 22 #define ACTIVITY_CONTEST_COOL 23 #define ACTIVITY_CONTEST_BEAUTY 24 @@ -46,15 +51,6 @@ #define IN_UNION_ROOM (1 << 6) -// Used in UR_AddTextPrinterParameterized -#define UR_COLOR_DKE_WHT_LTE 0 -#define UR_COLOR_RED_WHT_LTR 1 -#define UR_COLOR_GRN_WHT_LTG 2 -#define UR_COLOR_WHT_WHT_LTE 3 -#define UR_COLOR_WHT_DKE_LTE 4 -#define UR_COLOR_GRN_DN6_LTB 5 -#define UR_COLOR_DN5_DN6_LTB 6 - #define LINK_GROUP_SINGLE_BATTLE 0 #define LINK_GROUP_DOUBLE_BATTLE 1 #define LINK_GROUP_MULTI_BATTLE 2 diff --git a/include/constants/vars.h b/include/constants/vars.h index d3d1aba87d..8128b6f321 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -60,7 +60,7 @@ #define VAR_POISON_STEP_COUNTER 0x402B #define VAR_RESET_RTC_ENABLE 0x402C #define VAR_ENIGMA_BERRY_AVAILABLE 0x402D -#define VAR_0x402E 0x402E +#define VAR_WONDER_NEWS_COUNTER 0x402E #define VAR_FRONTIER_MANIAC_FACILITY 0x402F #define VAR_FRONTIER_GAMBLER_CHALLENGE 0x4030 @@ -149,7 +149,7 @@ #define VAR_LITTLEROOT_HOUSES_STATE_MAY 0x4082 #define VAR_UNUSED_0x4083 0x4083 // Unused Var #define VAR_BIRCH_LAB_STATE 0x4084 -#define VAR_PETALBURG_GYM_STATE 0x4085 // 0-1: Wally tutorial, 2-6: 0-4 badges, 7: Defeated Norman, 8: Rematch Norman +#define VAR_PETALBURG_GYM_STATE 0x4085 // 0-1: Wally tutorial, 2-6: 0-4 badges, 7: Defeated Norman, 8: Rematch Norman #define VAR_CONTEST_HALL_STATE 0x4086 #define VAR_CABLE_CLUB_STATE 0x4087 #define VAR_CONTEST_TYPE 0x4088 @@ -237,14 +237,14 @@ #define VAR_REGISTER_BIRCH_STATE 0x40DA #define VAR_UNUSED_0x40DB 0x40DB // Unused Var #define VAR_UNUSED_0x40DC 0x40DC // Unused Var -#define VAR_EVENT_PICHU_SLOT 0x40DD -#define VAR_NEVER_READ_0x40DE 0x40DE // Var is written to, but never read -#define VAR_NEVER_READ_0x40DF 0x40DF // Var is written to, but never read -#define VAR_NEVER_READ_0x40E0 0x40E0 // Var is written to, but never read -#define VAR_NEVER_READ_0x40E1 0x40E1 // Var is written to, but never read -#define VAR_NEVER_READ_0x40E2 0x40E2 // Var is written to, but never read -#define VAR_NEVER_READ_0x40E3 0x40E3 // Var is written to, but never read -#define VAR_NEVER_READ_0x40E4 0x40E4 // var is written to, but never read +#define VAR_GIFT_PICHU_SLOT 0x40DD +#define VAR_GIFT_UNUSED_1 0x40DE // Var is written to, but never read +#define VAR_GIFT_UNUSED_2 0x40DF // Var is written to, but never read +#define VAR_GIFT_UNUSED_3 0x40E0 // Var is written to, but never read +#define VAR_GIFT_UNUSED_4 0x40E1 // Var is written to, but never read +#define VAR_GIFT_UNUSED_5 0x40E2 // Var is written to, but never read +#define VAR_GIFT_UNUSED_6 0x40E3 // Var is written to, but never read +#define VAR_GIFT_UNUSED_7 0x40E4 // var is written to, but never read #define VAR_UNUSED_0x40E5 0x40E5 // Unused Var #define VAR_DAILY_SLOTS 0x40E6 #define VAR_DAILY_WILDS 0x40E7 diff --git a/include/constants/weather.h b/include/constants/weather.h index becbdda877..c4a23a18bc 100644 --- a/include/constants/weather.h +++ b/include/constants/weather.h @@ -16,7 +16,7 @@ #define WEATHER_DROUGHT 12 #define WEATHER_DOWNPOUR 13 #define WEATHER_UNDERWATER_BUBBLES 14 -#define WEATHER_ABNORMAL 15 // The alternating weather during Groudon/Kyogre conflict +#define WEATHER_ABNORMAL 15 // The alternating weather during Groudon/Kyogre conflict #define WEATHER_ROUTE119_CYCLE 20 #define WEATHER_ROUTE123_CYCLE 21 diff --git a/include/constants/wild_encounter.h b/include/constants/wild_encounter.h new file mode 100644 index 0000000000..a78cd126f3 --- /dev/null +++ b/include/constants/wild_encounter.h @@ -0,0 +1,11 @@ +#ifndef GUARD_CONSTANTS_WILD_ENCOUNTER_H +#define GUARD_CONSTANTS_WILD_ENCOUNTER_H + +#define LAND_WILD_COUNT 12 +#define WATER_WILD_COUNT 5 +#define ROCK_WILD_COUNT 5 +#define FISH_WILD_COUNT 10 + +#define NUM_ALTERING_CAVE_TABLES 9 + +#endif // GUARD_CONSTANTS_WILD_ENCOUNTER_H diff --git a/include/constants/z_move_effects.h b/include/constants/z_move_effects.h new file mode 100644 index 0000000000..ce4d5c4adc --- /dev/null +++ b/include/constants/z_move_effects.h @@ -0,0 +1,38 @@ +#ifndef GUARD_Z_MOVE_EFFECTS_H +#define GUARD_Z_MOVE_EFFECTS_H + +#define Z_EFFECT_NONE 0 +#define Z_EFFECT_RESET_STATS 1 +#define Z_EFFECT_ALL_STATS_UP_1 2 +#define Z_EFFECT_BOOST_CRITS 3 +#define Z_EFFECT_FOLLOW_ME 4 +#define Z_EFFECT_CURSE 5 +#define Z_EFFECT_RECOVER_HP 6 +#define Z_EFFECT_RESTORE_REPLACEMENT_HP 7 + +#define Z_EFFECT_ATK_UP_1 8 +#define Z_EFFECT_DEF_UP_1 9 +#define Z_EFFECT_SPD_UP_1 10 +#define Z_EFFECT_SPATK_UP_1 11 +#define Z_EFFECT_SPDEF_UP_1 12 +#define Z_EFFECT_ACC_UP_1 13 +#define Z_EFFECT_EVSN_UP_1 14 + +#define Z_EFFECT_ATK_UP_2 15 +#define Z_EFFECT_DEF_UP_2 16 +#define Z_EFFECT_SPD_UP_2 17 +#define Z_EFFECT_SPATK_UP_2 18 +#define Z_EFFECT_SPDEF_UP_2 19 +#define Z_EFFECT_ACC_UP_2 20 +#define Z_EFFECT_EVSN_UP_2 21 + +#define Z_EFFECT_ATK_UP_3 22 +#define Z_EFFECT_DEF_UP_3 23 +#define Z_EFFECT_SPD_UP_3 24 +#define Z_EFFECT_SPATK_UP_3 25 +#define Z_EFFECT_SPDEF_UP_3 26 +#define Z_EFFECT_ACC_UP_3 27 +#define Z_EFFECT_EVSN_UP_3 28 + + +#endif // GUARD_Z_MOVE_EFFECTS_H diff --git a/include/contest.h b/include/contest.h index 9bac63eda5..21e2530c21 100644 --- a/include/contest.h +++ b/include/contest.h @@ -291,10 +291,10 @@ struct ContestResources struct ContestMoveAnimData *moveAnim; struct ContestTV *tv; struct ContestUnused * unused; - u8 * contestBgTilemaps[CONTESTANT_COUNT]; + u8 *contestBgTilemaps[CONTESTANT_COUNT]; void * boxBlinkTiles1; void * boxBlinkTiles2; - void * field_3c; + void * animBgTileBuffer; }; #define eContest (*gContestResources->contest) @@ -324,7 +324,6 @@ extern u16 gSpecialVar_ContestRank; extern u8 gNumLinkContestPlayers; extern u8 gHighestRibbonRank; extern struct ContestResources *gContestResources; -extern u8 sContestBgCopyFlags; extern struct ContestWinner gCurContestWinner; extern u8 gCurContestWinnerIsForArtist; extern u8 gCurContestWinnerSaveIdx; @@ -340,11 +339,11 @@ void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame); u8 GetContestEntryEligibility(struct Pokemon *pkmn); void CalculateRound1Points(u8 contestCategory); bool8 IsSpeciesNotUnown(u16 species); -bool8 Contest_IsMonsTurnDisabled(u8 a); +bool8 Contest_IsMonsTurnDisabled(u8 contestant); void SaveLinkContestResults(void); -void SortContestants(bool8 a); -void SetContestantEffectStringID(u8 a, u8 b); -void SetContestantEffectStringID2(u8 a, u8 b); +void SortContestants(bool8 useRanking); +void SetContestantEffectStringID(u8 contestant, u8 effectStringId); +void SetContestantEffectStringID2(u8 contestant, u8 effectStringId); void SetStartledString(u8 contestant, u8 jam); void MakeContestantNervous(u8 p); s8 Contest_GetMoveExcitement(u16 move); diff --git a/include/contest_effect.h b/include/contest_effect.h index 0474cb38cc..9089207acd 100644 --- a/include/contest_effect.h +++ b/include/contest_effect.h @@ -1,12 +1,13 @@ #ifndef GUARD_CONTEST_EFFECT_H #define GUARD_CONTEST_EFFECT_H +#define MAX_COMBO_MOVES 5 struct ContestMove { u8 effect; u8 contestCategory:3; u8 comboStarterId; - u8 comboMoves[4]; + u8 comboMoves[MAX_COMBO_MOVES]; }; struct ContestEffect diff --git a/include/crt0.h b/include/crt0.h index 3121eeaedb..a4a5c7f79b 100644 --- a/include/crt0.h +++ b/include/crt0.h @@ -1,11 +1,6 @@ #ifndef GUARD_CRT0_H #define GUARD_CRT0_H -// Exported type declarations - -// Exported RAM declarations - -// Exported ROM declarations extern u32 IntrMain[]; #endif //GUARD_CRT0_H diff --git a/include/data.h b/include/data.h index 217e7e532d..b018da3f3b 100644 --- a/include/data.h +++ b/include/data.h @@ -5,6 +5,8 @@ #define SPECIES_SHINY_TAG 5000 +#define MAX_TRAINER_ITEMS 4 + enum { BATTLER_AFFINE_NORMAL, BATTLER_AFFINE_EMERGE, @@ -19,6 +21,10 @@ struct MonCoords u8 y_offset; }; +#define MON_COORDS_SIZE(width, height)(DIV_ROUND_UP(width, 8) << 4 | DIV_ROUND_UP(height, 8)) +#define GET_MON_COORDS_WIDTH(size)((size >> 4) * 8) +#define GET_MON_COORDS_HEIGHT(size)((size & 0xF) * 8) + struct TrainerMonNoItemDefaultMoves { u16 iv; @@ -51,6 +57,11 @@ struct TrainerMonItemCustomMoves u16 moves[MAX_MON_MOVES]; }; +#define NO_ITEM_DEFAULT_MOVES(party) { .NoItemDefaultMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = 0 +#define NO_ITEM_CUSTOM_MOVES(party) { .NoItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET +#define ITEM_DEFAULT_MOVES(party) { .ItemDefaultMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_HELD_ITEM +#define ITEM_CUSTOM_MOVES(party) { .ItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM + union TrainerMonPtr { const struct TrainerMonNoItemDefaultMoves *NoItemDefaultMoves; @@ -65,8 +76,8 @@ struct Trainer /*0x01*/ u8 trainerClass; /*0x02*/ u8 encounterMusic_gender; // last bit is gender /*0x03*/ u8 trainerPic; - /*0x04*/ u8 trainerName[12]; - /*0x10*/ u16 items[4]; + /*0x04*/ u8 trainerName[TRAINER_NAME_LENGTH + 1]; + /*0x10*/ u16 items[MAX_TRAINER_ITEMS]; /*0x18*/ bool8 doubleBattle; /*0x1C*/ u32 aiFlags; /*0x20*/ u8 partySize; @@ -118,11 +129,11 @@ extern const u8 gEnemyMonElevation[NUM_SPECIES]; extern const union AnimCmd *const *const gMonFrontAnimsPtrTable[]; extern const struct CompressedSpriteSheet gMonFrontPicTable[]; extern const struct CompressedSpriteSheet gMonFrontPicTableFemale[]; -extern const bool8 SpeciesHasGenderDifference[NUM_SPECIES]; extern const struct Trainer gTrainers[]; extern const u8 gTrainerClassNames[][13]; extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; extern const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1]; +extern const u8 *const gZMoveNames[]; #endif // GUARD_DATA_H diff --git a/include/daycare.h b/include/daycare.h index d6c0d42017..62a7918ff3 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -3,10 +3,17 @@ #include "constants/daycare.h" +struct RecordMixingDaycareMail +{ + struct DaycareMail mail[DAYCARE_MON_COUNT]; + u32 numDaycareMons; + bool16 cantHoldItem[DAYCARE_MON_COUNT]; +}; + u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest); u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest); u8 CountPokemonInDaycare(struct DayCare *daycare); -void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDaycareMail *daycareMail); +void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDaycareMail *mixMail); void StoreSelectedPokemonInDaycare(void); u16 TakePokemonFromDaycare(void); void GetDaycareCost(void); diff --git a/include/decompress.h b/include/decompress.h index 81f1425010..ef2ec43b0f 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -10,19 +10,18 @@ void LZDecompressVram(const u32 *src, void *dest); u16 LoadCompressedSpriteSheet(const struct CompressedSpriteSheet *src); void LoadCompressedSpriteSheetOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer); -bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet* src); +bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet *src); void LoadCompressedSpritePalette(const struct CompressedSpritePalette *src); -void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer); +void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *src, void *buffer); bool8 LoadCompressedSpritePaletteUsingHeap(const struct CompressedSpritePalette *src); -void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species); - +void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void *buffer, s32 species); void DecompressPicFromTableGender(void* buffer, s32 species, u32 personality); -void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); +void HandleLoadSpecialPokePic(bool32 isFrontPic, void *dest, s32 species, u32 personality); -void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic); +void LoadSpecialPokePic(void *dest, s32 species, u32 personality, bool8 isFrontPic); u32 GetDecompressedDataSize(const u32 *ptr); diff --git a/include/digit_obj_util.h b/include/digit_obj_util.h index aca97e2c7c..4442fb0ec9 100644 --- a/include/digit_obj_util.h +++ b/include/digit_obj_util.h @@ -18,9 +18,9 @@ struct DigitObjUtilTemplate bool32 DigitObjUtil_Init(u32 count); void DigitObjUtil_Free(void); bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemplate *template); -void DigitObjUtil_PrintNumOn(u32 id, s32 arg1); +void DigitObjUtil_PrintNumOn(u32 id, s32 num); void DigitObjUtil_DeletePrinter(u32 id); -void DigitObjUtil_HideOrShow(u32 id, bool32 arg1); +void DigitObjUtil_HideOrShow(u32 id, bool32 hide); u8 GetTilesPerImage(u32 shape, u32 size); #endif // GUARD_DIGIT_OBJ_UTIL_H diff --git a/include/easy_chat.h b/include/easy_chat.h index 4d2bc7c983..d84af93fc8 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -2,7 +2,6 @@ #define GUARD_EASYCHAT_H #include "main.h" -#include "constants/easy_chat.h" struct EasyChatScreenTemplate { @@ -123,7 +122,7 @@ struct EasyChatWordsByLetter void InitEasyChatPhrases(void); void ShowEasyChatScreen(void); -u8 * CopyEasyChatWord(u8 *dest, u16 word); +u8 *CopyEasyChatWord(u8 *dest, u16 word); bool32 IsEasyChatAnswerUnlocked(int word); void InitializeEasyChatWordArray(u16 *words, u16 length); u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows); diff --git a/include/ereader_helpers.h b/include/ereader_helpers.h index 064b61ed7f..29386bcb22 100755 --- a/include/ereader_helpers.h +++ b/include/ereader_helpers.h @@ -3,11 +3,39 @@ #include "trainer_hill.h" +enum { + EREADER_XFR_STATE_INIT = 0, + EREADER_XFR_STATE_HANDSHAKE, + EREADER_XFR_STATE_START, + EREADER_XFR_STATE_TRANSFER, + EREADER_XFR_STATE_TRANSFER_DONE, + EREADER_XFR_STATE_CHECKSUM, + EREADER_XFR_STATE_DONE +}; + +#define EREADER_XFER_EXE 1 +#define EREADER_XFER_CHK 2 +#define EREADER_XFER_SHIFT 0 +#define EREADER_XFER_MASK ((EREADER_XFER_EXE | EREADER_XFER_CHK) << EREADER_XFER_SHIFT) + +#define EREADER_CANCEL_TIMEOUT 1 +#define EREADER_CANCEL_KEY 2 +#define EREADER_CANCEL_SHIFT 2 +#define EREADER_CANCEL_TIMEOUT_MASK (EREADER_CANCEL_TIMEOUT << EREADER_CANCEL_SHIFT) +#define EREADER_CANCEL_KEY_MASK (EREADER_CANCEL_KEY << EREADER_CANCEL_SHIFT) +#define EREADER_CANCEL_MASK ((EREADER_CANCEL_TIMEOUT | EREADER_CANCEL_KEY) << EREADER_CANCEL_SHIFT) + +#define EREADER_CHECKSUM_OK 1 +#define EREADER_CHECKSUM_ERR 2 +#define EREADER_CHECKSUM_SHIFT 4 +#define EREADER_CHECKSUM_OK_MASK (EREADER_CHECKSUM_OK << EREADER_CHECKSUM_SHIFT) +#define EREADER_CHECKSUM_MASK ((EREADER_CHECKSUM_OK | EREADER_CHECKSUM_ERR) << EREADER_CHECKSUM_SHIFT) + struct EReaderTrainerHillTrainer { u8 trainerNum; struct TrainerHillTrainer trainer; - struct TrHillDisplay display; + struct TrainerHillFloorMap map; u32 checksum; }; // size=0x274 diff --git a/include/ereader_screen.h b/include/ereader_screen.h index 1daea4be0d..a6ac65b17f 100755 --- a/include/ereader_screen.h +++ b/include/ereader_screen.h @@ -1,6 +1,6 @@ #ifndef GUARD_EREADER_SCREEN_H #define GUARD_EREADER_SCREEN_H -void task_add_00_ereader(void); +void CreateEReaderTask(void); #endif // GUARD_EREADER_SCREEN_H diff --git a/include/event_data.h b/include/event_data.h index 8b4510e39b..b1fa694601 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -13,8 +13,8 @@ bool32 IsMysteryEventEnabled(void); void DisableMysteryGift(void); void EnableMysteryGift(void); bool32 IsMysteryGiftEnabled(void); -void ClearMysteryEventFlags(void); -void ClearMysteryEventVars(void); +void ClearMysteryGiftFlags(void); +void ClearMysteryGiftVars(void); void DisableResetRTC(void); void EnableResetRTC(void); bool32 CanResetRTC(void); diff --git a/include/event_object_movement.h b/include/event_object_movement.h index a935502e64..22cef49219 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -1,6 +1,8 @@ #ifndef GUARD_EVENT_OBJECT_MOVEMENT_H #define GUARD_EVENT_OBJECT_MOVEMENT_H +#include "constants/event_object_movement.h" + enum SpinnerRunnerFollowPatterns { RUNFOLLOW_ANY, @@ -61,7 +63,7 @@ struct PairedPalettes struct LockedAnimObjectEvents { - u8 objectEventIds[OBJECT_EVENTS_COUNT]; + u8 localIds[OBJECT_EVENTS_COUNT]; u8 count; }; @@ -94,10 +96,9 @@ void SetSpritePosToOffsetMapCoords(s16 *, s16 *, s16, s16); void ObjectEventClearHeldMovement(struct ObjectEvent *); void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *); void TrySpawnObjectEvents(s16, s16); -u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction); -u8 AddPseudoObjectEvent(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority); +u8 CreateObjectGraphicsSprite(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority); u8 TrySpawnObjectEvent(u8, u8, u8); -u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z); +u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation); u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *); void SetSpritePosToMapCoords(s16, s16, s16 *, s16 *); void CameraObjectReset1(void); @@ -108,8 +109,8 @@ const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId); void SetObjectInvisibility(u8, u8, u8, bool8); void FreeAndReserveObjectSpritePalettes(void); void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); -void ResetObjectPriority(u8, u8, u8); -void SetObjectPriority(u8, u8, u8, u8); +void ResetObjectSubpriority(u8, u8, u8); +void SetObjectSubpriority(u8, u8, u8, u8); void AllowObjectAtPosTriggerGroundEffects(s16, s16); void ObjectEventGetLocalIdAndMap(struct ObjectEvent *objectEvent, void *localId, void *mapNum, void *mapGroup); void ShiftObjectEventCoords(struct ObjectEvent *, s16, s16); @@ -119,7 +120,7 @@ void InitObjectEventPalettes(u8 palSlot); void UpdateObjectEventCurrentMovement(struct ObjectEvent *, struct Sprite *, bool8(struct ObjectEvent *, struct Sprite *)); u8 ObjectEventFaceOppositeDirection(struct ObjectEvent *, u8); u8 GetOppositeDirection(u8); -u8 GetWalkInPlaceFastestMovementAction(u32); +u8 GetWalkInPlaceFasterMovementAction(u32); u8 GetWalkInPlaceFastMovementAction(u32); u8 GetWalkInPlaceNormalMovementAction(u32); u8 GetWalkInPlaceSlowMovementAction(u32); @@ -127,7 +128,7 @@ u8 GetCollisionAtCoords(struct ObjectEvent *, s16, s16, u32); void MoveCoords(u8, s16 *, s16 *); bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *); u8 ObjectEventClearHeldMovementIfFinished(struct ObjectEvent *); -u8 GetObjectEventIdByXYZ(u16 x, u16 y, u8 z); +u8 GetObjectEventIdByPosition(u16 x, u16 y, u8 elevation); void SetTrainerMovementType(struct ObjectEvent *objectEvent, u8 movementType); u8 GetTrainerFacingDirectionMovementType(u8 direction); const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId); @@ -136,7 +137,7 @@ u8 GetFaceDirectionMovementAction(u32); u8 GetWalkNormalMovementAction(u32); u8 GetWalkFastMovementAction(u32); u8 GetRideWaterCurrentMovementAction(u32); -u8 GetWalkFastestMovementAction(u32); +u8 GetWalkFasterMovementAction(u32); u8 GetPlayerRunMovementAction(u32); u8 GetJumpInPlaceMovementAction(u32); u8 GetAcroWheelieFaceDirectionMovementAction(u32); @@ -161,24 +162,21 @@ u8 ObjectEventCheckHeldMovementStatus(struct ObjectEvent *objectEvent); u8 ObjectEventGetHeldMovementActionId(struct ObjectEvent *objectEvent); void TryOverrideTemplateCoordsForObjectEvent(const struct ObjectEvent *objectEvent, u8 movementType); void OverrideTemplateCoordsForObjectEvent(const struct ObjectEvent *objectEvent); -void ShiftStillObjectEventCoords(struct ObjectEvent *pObject); -void ObjectEventMoveDestCoords(struct ObjectEvent *pObject, u32 unk_19, s16 *pInt, s16 *pInt1); +void ShiftStillObjectEventCoords(struct ObjectEvent *objEvent); +void ObjectEventMoveDestCoords(struct ObjectEvent *objEvent, u32 direction, s16 *x, s16 *y); u8 AddCameraObject(u8 linkedSpriteId); void UpdateObjectEventsForCameraUpdate(s16 x, s16 y); u8 GetWalkSlowMovementAction(u32); u8 GetJumpMovementAction(u32); -bool8 AreZCoordsCompatible(u8, u8); -u8 ZCoordToPriority(u8); -void ObjectEventUpdateZCoord(struct ObjectEvent *pObject); -void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8); -bool8 IsZCoordMismatchAt(u8, s16, s16); +u8 ElevationToPriority(u8); +void ObjectEventUpdateElevation(struct ObjectEvent *objEvent); +void SetObjectSubpriorityByElevation(u8, struct Sprite *, u8); void UnfreezeObjectEvent(struct ObjectEvent *); u8 FindLockedObjectEventIndex(struct ObjectEvent *); void SetAndStartSpriteAnim(struct Sprite *, u8, u8); bool8 SpriteAnimEnded(struct Sprite *); void UnfreezeObjectEvents(void); void FreezeObjectEventsExceptOne(u8 objectEventId); -void TurnObjectEventSprite(u8, u8); void FreezeObjectEventsExceptTwo(u8 objectEventId1, u8 objectEventId2); void FreezeObjectEvents(void); bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent); @@ -395,13 +393,13 @@ u8 MovementType_CopyPlayer_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementType_CopyPlayer_Step2(struct ObjectEvent *, struct Sprite *); bool8 CopyablePlayerMovement_None(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); bool8 CopyablePlayerMovement_FaceDirection(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); -bool8 CopyablePlayerMovement_GoSpeed0(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); -bool8 CopyablePlayerMovement_GoSpeed1(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); -bool8 CopyablePlayerMovement_GoSpeed2(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 CopyablePlayerMovement_WalkNormal(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 CopyablePlayerMovement_WalkFast(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 CopyablePlayerMovement_WalkFaster(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); bool8 CopyablePlayerMovement_Slide(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); -bool8 cph_IM_DIFFERENT(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); -bool8 CopyablePlayerMovement_GoSpeed4(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)); +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 *); u8 MovementType_WalkInPlace_Step0(struct ObjectEvent *, struct Sprite *); @@ -412,10 +410,13 @@ u8 MovementType_RunInPlace_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *); -void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible); -bool32 IsObjectEventSpriteInvisible(u8 objectEventId); -void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId); -void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum); -bool32 IsObjectEventSpriteAnimating(u8 objectEventId); + +u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevation, u8 direction); +void TurnVirtualObject(u8 virtualObjId, u8 direction); +void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId); +void SetVirtualObjectInvisibility(u8 virtualObjId, bool32 invisible); +bool32 IsVirtualObjectInvisible(u8 virtualObjId); +void SetVirtualObjectSpriteAnim(u8 virtualObjId, u8 animNum); +bool32 IsVirtualObjectAnimating(u8 virtualObjId); #endif //GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/event_scripts.h b/include/event_scripts.h index c478f41f83..4e0a88f82a 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -21,21 +21,21 @@ extern const u8 gTVBravoTrainerText05[]; extern const u8 gTVBravoTrainerText06[]; extern const u8 gTVBravoTrainerText07[]; extern const u8 gTVBravoTrainerText08[]; -extern const u8 gTVBravoTrainerBattleTowerText00[]; -extern const u8 gTVBravoTrainerBattleTowerText01[]; -extern const u8 gTVBravoTrainerBattleTowerText02[]; -extern const u8 gTVBravoTrainerBattleTowerText03[]; -extern const u8 gTVBravoTrainerBattleTowerText04[]; -extern const u8 gTVBravoTrainerBattleTowerText05[]; -extern const u8 gTVBravoTrainerBattleTowerText06[]; -extern const u8 gTVBravoTrainerBattleTowerText07[]; -extern const u8 gTVBravoTrainerBattleTowerText08[]; -extern const u8 gTVBravoTrainerBattleTowerText09[]; -extern const u8 gTVBravoTrainerBattleTowerText10[]; -extern const u8 gTVBravoTrainerBattleTowerText11[]; -extern const u8 gTVBravoTrainerBattleTowerText12[]; -extern const u8 gTVBravoTrainerBattleTowerText13[]; -extern const u8 gTVBravoTrainerBattleTowerText14[]; +extern const u8 BravoTrainerBattleTower_Text_Intro[]; +extern const u8 BravoTrainerBattleTower_Text_NewRecord[]; +extern const u8 BravoTrainerBattleTower_Text_Lost[]; +extern const u8 BravoTrainerBattleTower_Text_Won[]; +extern const u8 BravoTrainerBattleTower_Text_LostFinal[]; +extern const u8 BravoTrainerBattleTower_Text_Satisfied[]; +extern const u8 BravoTrainerBattleTower_Text_Unsatisfied[]; +extern const u8 BravoTrainerBattleTower_Text_None1[]; +extern const u8 BravoTrainerBattleTower_Text_None2[]; +extern const u8 BravoTrainerBattleTower_Text_None3[]; +extern const u8 BravoTrainerBattleTower_Text_None4[]; +extern const u8 BravoTrainerBattleTower_Text_Response[]; +extern const u8 BravoTrainerBattleTower_Text_ResponseSatisfied[]; +extern const u8 BravoTrainerBattleTower_Text_ResponseUnsatisfied[]; +extern const u8 BravoTrainerBattleTower_Text_Outro[]; extern const u8 gTVFanClubOpinionsText00[]; extern const u8 gTVFanClubOpinionsText01[]; extern const u8 gTVFanClubOpinionsText02[]; @@ -240,48 +240,48 @@ extern const u8 gTVWhatsNo1InHoennTodayText05[]; extern const u8 gTVWhatsNo1InHoennTodayText06[]; extern const u8 gTVWhatsNo1InHoennTodayText07[]; extern const u8 gTVWhatsNo1InHoennTodayText08[]; -extern const u8 TVSecretBaseSecrets_Text_Intro[]; +extern const u8 TVSecretBaseSecrets_Text_Intro[]; extern const u8 TVSecretBaseSecrets_Text_WhatWillPlayerDoNext1[]; extern const u8 TVSecretBaseSecrets_Text_WhatWillPlayerDoNext2[]; extern const u8 TVSecretBaseSecrets_Text_TookXStepsBeforeLeaving[]; -extern const u8 TVSecretBaseSecrets_Text_BaseFailedToInterestPlayer[]; -extern const u8 TVSecretBaseSecrets_Text_PlayerEnjoyedBase[]; +extern const u8 TVSecretBaseSecrets_Text_BaseFailedToInterestPlayer[]; +extern const u8 TVSecretBaseSecrets_Text_PlayerEnjoyedBase[]; extern const u8 TVSecretBaseSecrets_Text_PlayerHugeFanOfBase[]; -extern const u8 TVSecretBaseSecrets_Text_Outro[]; -extern const u8 TVSecretBaseSecrets_Text_StoppedMoving1[]; -extern const u8 TVSecretBaseSecrets_Text_StoppedMoving2[]; -extern const u8 TVSecretBaseSecrets_Text_UsedChair[]; -extern const u8 TVSecretBaseSecrets_Text_UsedBalloon[]; -extern const u8 TVSecretBaseSecrets_Text_UsedTent[]; -extern const u8 TVSecretBaseSecrets_Text_UsedPlant[]; -extern const u8 TVSecretBaseSecrets_Text_UsedGoldShield[]; -extern const u8 TVSecretBaseSecrets_Text_UsedSilverShield[]; -extern const u8 TVSecretBaseSecrets_Text_UsedGlassOrnament[]; -extern const u8 TVSecretBaseSecrets_Text_UsedTV[]; -extern const u8 TVSecretBaseSecrets_Text_UsedMudBall[]; -extern const u8 TVSecretBaseSecrets_Text_UsedBag[]; -extern const u8 TVSecretBaseSecrets_Text_UsedCushion[]; -extern const u8 TVSecretBaseSecrets_Text_HitCushion[]; -extern const u8 TVSecretBaseSecrets_Text_HuggedCushion[]; -extern const u8 TVSecretBaseSecrets_Text_BattledWon[]; -extern const u8 TVSecretBaseSecrets_Text_BattledLost[]; -extern const u8 TVSecretBaseSecrets_Text_DeclinedBattle[]; -extern const u8 TVSecretBaseSecrets_Text_UsedPoster[]; -extern const u8 TVSecretBaseSecrets_Text_UsedNoteMat[]; -extern const u8 TVSecretBaseSecrets_Text_BattledDraw[]; -extern const u8 TVSecretBaseSecrets_Text_UsedSpinMat[]; -extern const u8 TVSecretBaseSecrets_Text_UsedSandOrnament[]; -extern const u8 TVSecretBaseSecrets_Text_UsedDesk[]; -extern const u8 TVSecretBaseSecrets_Text_UsedBrick[]; -extern const u8 TVSecretBaseSecrets_Text_UsedSolidBoard[]; -extern const u8 TVSecretBaseSecrets_Text_UsedFence[]; -extern const u8 TVSecretBaseSecrets_Text_UsedGlitterMat[]; -extern const u8 TVSecretBaseSecrets_Text_UsedTire[]; -extern const u8 TVSecretBaseSecrets_Text_UsedStand[]; +extern const u8 TVSecretBaseSecrets_Text_Outro[]; +extern const u8 TVSecretBaseSecrets_Text_StoppedMoving1[]; +extern const u8 TVSecretBaseSecrets_Text_StoppedMoving2[]; +extern const u8 TVSecretBaseSecrets_Text_UsedChair[]; +extern const u8 TVSecretBaseSecrets_Text_UsedBalloon[]; +extern const u8 TVSecretBaseSecrets_Text_UsedTent[]; +extern const u8 TVSecretBaseSecrets_Text_UsedPlant[]; +extern const u8 TVSecretBaseSecrets_Text_UsedGoldShield[]; +extern const u8 TVSecretBaseSecrets_Text_UsedSilverShield[]; +extern const u8 TVSecretBaseSecrets_Text_UsedGlassOrnament[]; +extern const u8 TVSecretBaseSecrets_Text_UsedTV[]; +extern const u8 TVSecretBaseSecrets_Text_UsedMudBall[]; +extern const u8 TVSecretBaseSecrets_Text_UsedBag[]; +extern const u8 TVSecretBaseSecrets_Text_UsedCushion[]; +extern const u8 TVSecretBaseSecrets_Text_HitCushion[]; +extern const u8 TVSecretBaseSecrets_Text_HuggedCushion[]; +extern const u8 TVSecretBaseSecrets_Text_BattledWon[]; +extern const u8 TVSecretBaseSecrets_Text_BattledLost[]; +extern const u8 TVSecretBaseSecrets_Text_DeclinedBattle[]; +extern const u8 TVSecretBaseSecrets_Text_UsedPoster[]; +extern const u8 TVSecretBaseSecrets_Text_UsedNoteMat[]; +extern const u8 TVSecretBaseSecrets_Text_BattledDraw[]; +extern const u8 TVSecretBaseSecrets_Text_UsedSpinMat[]; +extern const u8 TVSecretBaseSecrets_Text_UsedSandOrnament[]; +extern const u8 TVSecretBaseSecrets_Text_UsedDesk[]; +extern const u8 TVSecretBaseSecrets_Text_UsedBrick[]; +extern const u8 TVSecretBaseSecrets_Text_UsedSolidBoard[]; +extern const u8 TVSecretBaseSecrets_Text_UsedFence[]; +extern const u8 TVSecretBaseSecrets_Text_UsedGlitterMat[]; +extern const u8 TVSecretBaseSecrets_Text_UsedTire[]; +extern const u8 TVSecretBaseSecrets_Text_UsedStand[]; extern const u8 TVSecretBaseSecrets_Text_BrokeDoor[]; -extern const u8 TVSecretBaseSecrets_Text_UsedDoll[]; -extern const u8 TVSecretBaseSecrets_Text_UsedSlide[]; -extern const u8 TVSecretBaseSecrets_Text_UsedSlideButDidntGoDown[]; +extern const u8 TVSecretBaseSecrets_Text_UsedDoll[]; +extern const u8 TVSecretBaseSecrets_Text_UsedSlide[]; +extern const u8 TVSecretBaseSecrets_Text_UsedSlideButDidntGoDown[]; extern const u8 TVSecretBaseSecrets_Text_UsedJumpMat[]; extern const u8 gTVSafariFanClubText00[]; extern const u8 gTVSafariFanClubText01[]; @@ -382,27 +382,27 @@ extern const u8 EventScript_UseRockSmash[]; extern const u8 LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC[]; extern const u8 LittlerootTown_MaysHouse_2F_EventScript_TurnOffPlayerPC[]; -//mauville_old_man -extern const u8 gOtherText_Is[]; -extern const u8 gOtherText_DontYouAgree[]; -extern const u8 gText_SoPretty[]; -extern const u8 gText_SoDarling[]; -extern const u8 gText_SoRelaxed[]; -extern const u8 gText_SoSunny[]; -extern const u8 gText_SoDesirable[]; -extern const u8 gText_SoExciting[]; -extern const u8 gText_SoAmusing[]; -extern const u8 gText_SoMagical[]; -extern const u8 gMauvilleManText_ISoWantToGoOnAVacation[]; -extern const u8 gMauvilleManText_IBoughtCrayonsWith120Colors[]; -extern const u8 gMauvilleManText_WouldntItBeNiceIfWeCouldFloat[]; -extern const u8 gMauvilleManText_WhenYouWriteOnASandyBeach[]; -extern const u8 gMauvilleManText_WhatsTheBottomOfTheSeaLike[]; -extern const u8 gMauvilleManText_WhenYouSeeTheSettingSunDoesIt[]; -extern const u8 gMauvilleManText_LyingBackInTheGreenGrass[]; -extern const u8 gMauvilleManText_SecretBasesAreSoWonderful[]; +// Mauville Old Man (Giddy) +extern const u8 GiddyText_Is[]; +extern const u8 GiddyText_DontYouAgree[]; +extern const u8 GiddyText_SoPretty[]; +extern const u8 GiddyText_SoDarling[]; +extern const u8 GiddyText_SoRelaxed[]; +extern const u8 GiddyText_SoSunny[]; +extern const u8 GiddyText_SoDesirable[]; +extern const u8 GiddyText_SoExciting[]; +extern const u8 GiddyText_SoAmusing[]; +extern const u8 GiddyText_SoMagical[]; +extern const u8 GiddyText_ISoWantToGoOnAVacation[]; +extern const u8 GiddyText_IBoughtCrayonsWith120Colors[]; +extern const u8 GiddyText_WouldntItBeNiceIfWeCouldFloat[]; +extern const u8 GiddyText_WhenYouWriteOnASandyBeach[]; +extern const u8 GiddyText_WhatsTheBottomOfTheSeaLike[]; +extern const u8 GiddyText_WhenYouSeeTheSettingSunDoesIt[]; +extern const u8 GiddyText_LyingBackInTheGreenGrass[]; +extern const u8 GiddyText_SecretBasesAreSoWonderful[]; -// mauville old man storyteller +// Mauville Old Man (storyteller) extern const u8 MauvilleCity_PokemonCenter_1F_Text_SavedGameTitle[]; extern const u8 MauvilleCity_PokemonCenter_1F_Text_SavedGameAction[]; extern const u8 MauvilleCity_PokemonCenter_1F_Text_SavedGameStory[]; diff --git a/include/evolution_graphics.h b/include/evolution_graphics.h index 61051c69a9..eab5c6eb70 100644 --- a/include/evolution_graphics.h +++ b/include/evolution_graphics.h @@ -3,7 +3,7 @@ void LoadEvoSparkleSpriteAndPal(void); -u8 EvolutionSparkles_SpiralUpward(u16 arg0); +u8 EvolutionSparkles_SpiralUpward(u16 palNum); u8 EvolutionSparkles_ArcDown(void); u8 EvolutionSparkles_CircleInward(void); u8 EvolutionSparkles_SprayAndFlash(u16 species); diff --git a/include/evolution_scene.h b/include/evolution_scene.h index 5f8c534b93..25d34eddfb 100644 --- a/include/evolution_scene.h +++ b/include/evolution_scene.h @@ -1,9 +1,9 @@ #ifndef GUARD_EVOLUTION_SCENE_H #define GUARD_EVOLUTION_SCENE_H -void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); -void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); -void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID); +void BeginEvolutionScene(struct Pokemon *mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); +void EvolutionScene(struct Pokemon *mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); +void TradeEvolutionScene(struct Pokemon *mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID); extern void (*gCB2_AfterEvolution)(void); diff --git a/include/faraway_island.h b/include/faraway_island.h index a5243c6a70..9fd2a69fc4 100755 --- a/include/faraway_island.h +++ b/include/faraway_island.h @@ -2,7 +2,7 @@ #define GUARD_FARAWAY_ISLAND_H u32 GetMewMoveDirection(void); -bool8 ShouldMewShakeGrass(struct ObjectEvent*); +bool8 ShouldMewShakeGrass(struct ObjectEvent *); void UpdateFarawayIslandStepCounter(void); bool8 ObjectEventIsFarawayIslandMew(struct ObjectEvent *); bool8 IsMewPlayingHideAndSeek(void); diff --git a/include/field_camera.h b/include/field_camera.h index b245fca842..6e8af1a539 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -17,14 +17,14 @@ extern u16 gTotalCameraPixelOffsetY; void DrawWholeMapView(void); void CurrentMapDrawMetatileAt(int x, int y); -void GetCameraOffsetWithPan(s16 *a0, s16 *a1); +void GetCameraOffsetWithPan(s16 *x, s16 *y); void DrawDoorMetatileAt(int x, int y, u16 *arr); void ResetFieldCamera(void); void ResetCameraUpdateInfo(void); -u32 InitCameraUpdateCallback(u8 a); +u32 InitCameraUpdateCallback(u8 trackedSpriteId); void CameraUpdate(void); -void SetCameraPanningCallback(void (*a)(void)); -void SetCameraPanning(s16 a, s16 b); +void SetCameraPanningCallback(void (*callback)(void)); +void SetCameraPanning(s16 horizontal, s16 vertical); void InstallCameraPanAheadCallback(void); void UpdateCameraPanning(void); void FieldUpdateBgTilemapScroll(void); diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index 17e5afb63e..e02fcd5afe 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -25,15 +25,9 @@ struct FieldInput void FieldClearPlayerInput(struct FieldInput *pStruct); void FieldGetPlayerInput(struct FieldInput *pStruct, u16 keys, u16 heldKeys); int ProcessPlayerFieldInput(struct FieldInput *pStruct); -u8 *sub_80682A8(struct MapPosition *, u8, u8); void overworld_poison_timer_set(void); void RestartWildEncounterImmunitySteps(void); -u8 *sub_8068E24(struct MapPosition *); const u8 *GetObjectEventScriptPointerPlayerFacing(void); -bool8 sub_8068870(u16 a); -bool8 sub_8068894(void); -bool8 sub_8068A64(struct MapPosition *, u16); -u8 sub_8068F18(void); bool8 TryDoDiveWarp(struct MapPosition *position, u16 b); int SetCableClubWarp(void); u8 TrySetDiveWarp(void); diff --git a/include/field_effect.h b/include/field_effect.h index 731fb9c59f..b35a8c8694 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -39,8 +39,8 @@ void StartEscalatorWarp(u8 metatileBehavior, u8 priority); void StartLavaridgeGymB1FWarp(u8 priority); void StartLavaridgeGym1FWarp(u8 priority); -void SpriteCB_AshPuff(struct Sprite*); -void SpriteCB_AshLaunch(struct Sprite*); +void SpriteCB_AshPuff(struct Sprite *); +void SpriteCB_AshLaunch(struct Sprite *); void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b); void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId); diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 528492d814..2ae5d79f75 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -20,25 +20,25 @@ void SetSurfBlob_PlayerOffset(u8 spriteId, bool8 hasOffset, s16 offset); bool8 UpdateRevealDisguise(struct ObjectEvent *); void StartRevealDisguise(struct ObjectEvent *); void StartAshFieldEffect(s16, s16, u16, s16); -void SetUpReflection(struct ObjectEvent*, struct Sprite*, u8); -u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*); +void SetUpReflection(struct ObjectEvent *, struct Sprite *, u8); +u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent *); u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); -void UpdateRayquazaSpotlightEffect(struct Sprite*); -void UpdateShadowFieldEffect(struct Sprite*); -void UpdateTallGrassFieldEffect(struct Sprite*); -void WaitFieldEffectSpriteAnim(struct Sprite*); -void UpdateAshFieldEffect(struct Sprite*); -void UpdateSurfBlobFieldEffect(struct Sprite*); -void UpdateJumpImpactEffect(struct Sprite*); -void UpdateFootprintsTireTracksFieldEffect(struct Sprite*); -void UpdateSplashFieldEffect(struct Sprite*); -void UpdateLongGrassFieldEffect(struct Sprite*); -void UpdateSandPileFieldEffect(struct Sprite*); -void UpdateDisguiseFieldEffect(struct Sprite*); -void UpdateShortGrassFieldEffect(struct Sprite*); -void UpdateHotSpringsWaterFieldEffect(struct Sprite*); -void UpdateBubblesFieldEffect(struct Sprite*); -void UpdateSparkleFieldEffect(struct Sprite*); +void UpdateRayquazaSpotlightEffect(struct Sprite *); +void UpdateShadowFieldEffect(struct Sprite *); +void UpdateTallGrassFieldEffect(struct Sprite *); +void WaitFieldEffectSpriteAnim(struct Sprite *); +void UpdateAshFieldEffect(struct Sprite *); +void UpdateSurfBlobFieldEffect(struct Sprite *); +void UpdateJumpImpactEffect(struct Sprite *); +void UpdateFootprintsTireTracksFieldEffect(struct Sprite *); +void UpdateSplashFieldEffect(struct Sprite *); +void UpdateLongGrassFieldEffect(struct Sprite *); +void UpdateSandPileFieldEffect(struct Sprite *); +void UpdateDisguiseFieldEffect(struct Sprite *); +void UpdateShortGrassFieldEffect(struct Sprite *); +void UpdateHotSpringsWaterFieldEffect(struct Sprite *); +void UpdateBubblesFieldEffect(struct Sprite *); +void UpdateSparkleFieldEffect(struct Sprite *); void SetSpriteInvisible(u8 spriteId); void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y); diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 903fe6ef1b..2bf2df2697 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -11,38 +11,38 @@ void PlayerGetDestCoords(s16 *, s16 *); u8 GetPlayerFacingDirection(void); u8 GetPlayerMovementDirection(void); u8 PlayerGetCopyableMovement(void); -void PlayerGoSpeed1(u8); -void PlayerGoSpeed2(u8); -void PlayerRideWaterCurrent(u8); -void PlayerGoSpeed4(u8); -void PlayerOnBikeCollide(u8); -void PlayerFaceDirection(u8 a); -void PlayerTurnInPlace(u8 a); -void PlayerJumpLedge(u8 a); -void PlayerIdleWheelie(u8 a); -void PlayerStartWheelie(u8 a); -void PlayerEndWheelie(u8 a); -void PlayerStandingHoppingWheelie(u8 a); -void PlayerMovingHoppingWheelie(u8 a); -void PlayerLedgeHoppingWheelie(u8 a); -void PlayerAcroTurnJump(u8 a); -void PlayerSetAnimId(u8 a, u8 b); +void PlayerWalkNormal(u8 direction); +void PlayerWalkFast(u8 direction); +void PlayerRideWaterCurrent(u8 direction); +void PlayerWalkFaster(u8 direction); +void PlayerOnBikeCollide(u8 direction); +void PlayerFaceDirection(u8 direction); +void PlayerTurnInPlace(u8 direction); +void PlayerJumpLedge(u8 direction); +void PlayerIdleWheelie(u8 direction); +void PlayerStartWheelie(u8 direction); +void PlayerEndWheelie(u8 direction); +void PlayerStandingHoppingWheelie(u8 direction); +void PlayerMovingHoppingWheelie(u8 direction); +void PlayerLedgeHoppingWheelie(u8 direction); +void PlayerAcroTurnJump(u8 direction); +void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement); bool8 IsPlayerCollidingWithFarawayIslandMew(u8 direction); void PlayerOnBikeCollideWithFarawayIslandMew(u8 direction); -u8 CheckForObjectEventCollision(struct ObjectEvent *a, s16 b, s16 c, u8 d, u8 e); -u8 PlayerGetZCoord(void); -void SetPlayerAvatarTransitionFlags(u16 a); -void sub_808BCE8(void); -void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d); +u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior); +u8 PlayerGetElevation(void); +void SetPlayerAvatarTransitionFlags(u16 transitionFlags); +void CancelPlayerForcedMovement(void); +void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender); void PlayerFreeze(void); -void sub_808BCF4(void); +void StopPlayerAvatar(void); void SetSpinStartFacingDir(u8); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8); void SetPlayerAvatarFieldMove(void); u8 GetPlayerAvatarGraphicsIdByCurrentState(void); -void SetPlayerAvatarStateMask(u8 a); -u8 GetPlayerAvatarGraphicsIdByStateId(u8 a); +void SetPlayerAvatarStateMask(u8 flags); +u8 GetPlayerAvatarGraphicsIdByStateId(u8 state); u8 GetJumpSpecialMovementAction(u32); bool8 PartyHasMonWithSurf(void); bool8 IsPlayerFacingSurfableFishableWater(void); diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index 4e4725041a..6dc9b077d2 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -22,7 +22,7 @@ void FieldCB_ReturnToFieldNoScript(void); void FieldCB_ReturnToFieldNoScriptCheckMusic(void); void DoWarp(void); void DoDiveWarp(void); -void DoSootopolisLegendWarp(void); +void DoWhiteFadeWarp(void); void DoDoorWarp(void); void DoFallWarp(void); void DoEscalatorWarp(u8 metatileBehavior); @@ -33,13 +33,12 @@ void DoMossdeepGymWarp(void); void DoPortholeWarp(void); void DoCableClubWarp(void); void DoContestHallWarp(void); -void AnimateFlash(u8 flashLevel); +void AnimateFlash(u8 newFlashLevel); void WriteBattlePyramidViewScanlineEffectBuffer(void); void DoSpinEnterWarp(void); void DoSpinExitWarp(void); void DoOrbEffect(void); void FadeOutOrbEffect(void); -void sub_80B05B4(void); void WriteFlashScanlineEffectBuffer(u8 flashLevel); bool8 IsPlayerStandingStill(void); diff --git a/include/field_special_scene.h b/include/field_special_scene.h index a54b344d9b..111723c836 100644 --- a/include/field_special_scene.h +++ b/include/field_special_scene.h @@ -1,15 +1,8 @@ #ifndef GUARD_FIELD_SPECIAL_SCENE_H #define GUARD_FIELD_SPECIAL_SCENE_H -s16 GetTruckCameraBobbingY(int a1); -s16 GetTruckBoxMovement(int a1); -void Task_Truck1(u8 taskId); -void Task_Truck2(u8 taskId); -void Task_Truck3(u8 taskId); -void Task_HandleTruckSequence(u8 taskId); void ExecuteTruckSequence(void); -void EndTruckSequence(u8); -void sub_80C791C(void); +void EndTruckSequence(u8 taskId); void FieldCB_ShowPortholeView(void); #endif // GUARD_FIELD_SPECIAL_SCENE_H diff --git a/include/field_weather.h b/include/field_weather.h index 9c6a4ab7ad..1d8cfe4220 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -147,7 +147,7 @@ void SetNextWeather(u8 weather); void SetCurrentAndNextWeather(u8 weather); void SetCurrentAndNextWeatherNoDelay(u8 weather); void ApplyWeatherGammaShiftIfIdle(s8 gammaIndex); -void sub_80ABC7C(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay); +void ApplyWeatherGammaShiftIfIdle_Gradual(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay); void FadeScreen(u8 mode, s8 delay); bool8 IsWeatherNotFadingIn(void); void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex); @@ -221,9 +221,9 @@ void Bubbles_Main(void); void Bubbles_InitAll(void); bool8 Bubbles_Finish(void); -u8 GetSav1Weather(void); -void SetSav1Weather(u32 weather); -void SetSav1WeatherFromCurrMapHeader(void); +u8 GetSavedWeather(void); +void SetSavedWeather(u32 weather); +void SetSavedWeatherFromCurrMapHeader(void); void SetWeather(u32 weather); void DoCurrentWeather(void); void UpdateWeatherPerDay(u16 increment); diff --git a/include/fieldmap.h b/include/fieldmap.h index 5bcbe20ea6..7caadfcaaa 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -7,7 +7,15 @@ #define NUM_METATILES_TOTAL 1024 #define NUM_PALS_IN_PRIMARY 6 #define NUM_PALS_TOTAL 13 -#define MAX_MAP_DATA_SIZE 0x2800 +#define MAX_MAP_DATA_SIZE 10240 + +// Map coordinates are offset by 7 when using the map +// buffer because it needs to load sufficient border +// metatiles to fill the player's view (the player has +// 7 metatiles of view horizontally in either direction). +#define MAP_OFFSET 7 +#define MAP_OFFSET_W (MAP_OFFSET * 2 + 1) +#define MAP_OFFSET_H (MAP_OFFSET * 2) #include "main.h" @@ -17,14 +25,14 @@ u32 MapGridGetMetatileIdAt(int, int); u32 MapGridGetMetatileBehaviorAt(int, int); void MapGridSetMetatileIdAt(int, int, u16); void MapGridSetMetatileEntryAt(int, int, u16); -void GetCameraCoords(u16*, u16*); -bool8 MapGridIsImpassableAt(int, int); +void GetCameraCoords(u16 *, u16 *); +u8 MapGridGetCollisionAt(int, int); int GetMapBorderIdAt(int x, int y); bool32 CanCameraMoveInDirection(int direction); -u16 GetBehaviorByMetatileId(u16 metatileId); +u16 GetMetatileAttributesById(u16 metatileId); void GetCameraFocusCoords(u16 *x, u16 *y); u8 MapGridGetMetatileLayerTypeAt(int x, int y); -u8 MapGridGetZCoordAt(int x, int y); +u8 MapGridGetElevationAt(int x, int y); bool8 CameraMove(int deltaX, int deltaY); void SaveMapView(void); void SetCameraFocusCoords(u16 x, u16 y); diff --git a/include/fldeff.h b/include/fldeff.h index 597ce6f475..0ad0e3d606 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -25,8 +25,8 @@ void ChooseMonForSoftboiled(u8 taskId); // flash bool8 SetUpFieldMove_Flash(void); void CB2_DoChangeMap(void); -bool8 GetMapPairFadeToType(u8 a1, u8 a2); -bool8 GetMapPairFadeFromType(u8 a1, u8 a2); +bool8 GetMapPairFadeToType(u8 _fromType, u8 _toType); +bool8 GetMapPairFadeFromType(u8 _fromType, u8 _toType); // strength bool8 SetUpFieldMove_Strength(void); diff --git a/include/fldeff_misc.h b/include/fldeff_misc.h index 4acca79448..61078466db 100644 --- a/include/fldeff_misc.h +++ b/include/fldeff_misc.h @@ -1,8 +1,8 @@ #ifndef GUARD_FLDEFF_MISC_H #define GUARD_FLDEFF_MISC_H -void ComputerScreenOpenEffect(u16 a0, u16 a1, u8 a2); -void ComputerScreenCloseEffect(u16 a0, u16 a1, u8 a2); +void ComputerScreenOpenEffect(u16 increment, u16 unused, u8 priority); +void ComputerScreenCloseEffect(u16 increment, u16 unused, u8 priority); bool8 IsComputerScreenOpenEffectActive(void); bool8 IsComputerScreenCloseEffectActive(void); bool8 SetUpFieldMove_SecretPower(void); @@ -22,7 +22,7 @@ void PlaySecretBaseMusicNoteMatSound(s16 metatileId); void DoSecretBaseGlitterMatSparkle(void); bool8 FldEff_SandPillar(void); void InteractWithShieldOrTVDecoration(void); -bool8 IsLargeBreakableDecoration(u16 arg0, u8 arg1); +bool8 IsLargeBreakableDecoration(u16 metatileId, bool8 checkBase); void FldEffPoison_Start(void); bool32 FldEffPoison_IsActive(void); void DoWateringBerryTreeAnim(void); diff --git a/include/fonts.h b/include/fonts.h new file mode 100644 index 0000000000..c21c75942d --- /dev/null +++ b/include/fonts.h @@ -0,0 +1,19 @@ +#ifndef GUARD_FONTS_H +#define GUARD_FONTS_H + +extern const u16 gFontNormalLatinGlyphs[]; +extern const u8 gFontNormalLatinGlyphWidths[]; +extern const u16 gFontNormalJapaneseGlyphs[]; +extern const u16 gFontSmallLatinGlyphs[]; +extern const u8 gFontSmallLatinGlyphWidths[]; +extern const u16 gFontSmallJapaneseGlyphs[]; +extern const u16 gFontShortLatinGlyphs[]; +extern const u8 gFontShortLatinGlyphWidths[]; +extern const u16 gFontShortJapaneseGlyphs[]; +extern const u8 gFontShortJapaneseGlyphWidths[]; +extern const u16 gFontNarrowLatinGlyphs[]; +extern const u8 gFontNarrowLatinGlyphWidths[]; +extern const u16 gFontSmallNarrowLatinGlyphs[]; +extern const u8 gFontSmallNarrowLatinGlyphWidths[]; + +#endif // GUARD_FONTS_H diff --git a/include/gba/defines.h b/include/gba/defines.h index ad06aaad2d..c52d7ef4f9 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -6,7 +6,6 @@ #define TRUE 1 #define FALSE 0 -#define BSS_DATA __attribute__((section(".bss"))) #define IWRAM_DATA __attribute__((section("iwram_data"))) #define EWRAM_DATA __attribute__((section("ewram_data"))) #define UNUSED __attribute__((unused)) diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 1daa99e1d7..148ce31db4 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -482,6 +482,7 @@ #define REG_SIODATA32 (*(vu32 *)REG_ADDR_SIODATA32) #define REG_SIOMLT_SEND (*(vu16 *)REG_ADDR_SIOMLT_SEND) #define REG_SIOMLT_RECV (*(vu64 *)REG_ADDR_SIOMLT_RECV) +#define REG_SIOMULTI(n) (*(vu16 *)(REG_ADDR_SIOMULTI0 + (n) * 2)) #define REG_SIOMULTI0 (*(vu16 *)REG_ADDR_SIOMULTI0) #define REG_SIOMULTI1 (*(vu16 *)REG_ADDR_SIOMULTI1) #define REG_SIOMULTI2 (*(vu16 *)REG_ADDR_SIOMULTI2) diff --git a/include/gba/isagbprint.h b/include/gba/isagbprint.h index 1be3852e3b..13687825ef 100644 --- a/include/gba/isagbprint.h +++ b/include/gba/isagbprint.h @@ -23,14 +23,14 @@ void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopP #ifdef NDEBUG #define AGB_ASSERT(exp) #else -#define AGB_ASSERT(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 1); +#define AGB_ASSERT(exp) (exp) ? ((void *)0) : AGBAssert(__FILE__, __LINE__, #exp, 1); #endif #undef AGB_WARNING #ifdef NDEBUG #define AGB_WARNING(exp) #else -#define AGB_WARNING(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 0); +#define AGB_WARNING(exp) (exp) ? ((void *)0) : AGBAssert(__FILE__, __LINE__, #exp, 0); #endif // for matching purposes @@ -38,13 +38,13 @@ void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopP #ifdef NDEBUG #define AGB_ASSERT_EX(exp, file, line) #else -#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 1); +#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void *)0) : AGBAssert(file, line, #exp, 1); #endif #ifdef NDEBUG #define AGB_WARNING_EX(exp, file, line) #else -#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 0); +#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void *)0) : AGBAssert(file, line, #exp, 0); #endif #endif // GUARD_GBA_ISAGBPRINT_H diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index 2ccbb18f5b..40a25ba059 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -313,6 +313,8 @@ struct MusicPlayerTrack #define MAX_MUSICPLAYER_TRACKS 16 +#define TRACKS_ALL 0xFFFF + #define TEMPORARY_FADE 0x0001 #define FADE_IN 0x0002 #define FADE_VOL_MAX 64 @@ -347,7 +349,7 @@ struct MusicPlayer { struct MusicPlayerInfo *info; struct MusicPlayerTrack *track; - u8 unk_8; + u8 numTracks; u16 unk_A; }; @@ -421,7 +423,7 @@ void Clear64byte(void *addr); void SoundInit(struct SoundInfo *soundInfo); void MPlayExtender(struct CgbChannel *cgbChans); void m4aSoundMode(u32 mode); -void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track, u8 a3); +void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount); void CgbSound(void); void CgbOscOff(u8); void CgbModVol(struct CgbChannel *chan); diff --git a/include/gba/types.h b/include/gba/types.h index 35d02e2639..2e92bbe86e 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -35,7 +35,7 @@ struct BgCnt { u16 priority:2; u16 charBaseBlock:2; - u16 dummy:2; + u16 dsCharBaseBlock:2; u16 mosaic:1; u16 palettes:1; u16 screenBaseBlock:5; diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 6bafa97479..974fa3382b 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -1,27 +1,37 @@ #ifndef GUARD_GLOBAL_FIELDMAP_H #define GUARD_GLOBAL_FIELDMAP_H -#define METATILE_BEHAVIOR_MASK 0x00FF -#define METATILE_COLLISION_MASK 0x0C00 -#define METATILE_ID_MASK 0x03FF -#define METATILE_ID_UNDEFINED 0x03FF -#define METATILE_ELEVATION_SHIFT 12 -#define METATILE_COLLISION_SHIFT 10 -#define METATILE_ELEVATION_MASK 0xF000 +// Masks/shifts for blocks in the map grid +// Map grid blocks consist of a 10 bit metatile id, a 2 bit collision value, and a 4 bit elevation value +// This is the data stored in each data/layouts/*/map.bin file +#define MAPGRID_METATILE_ID_MASK 0x03FF // Bits 1-10 +#define MAPGRID_COLLISION_MASK 0x0C00 // Bits 11-12 +#define MAPGRID_ELEVATION_MASK 0xF000 // Bits 13-16 +#define MAPGRID_COLLISION_SHIFT 10 +#define MAPGRID_ELEVATION_SHIFT 12 + +// An undefined map grid block has all metatile id bits set and nothing else +#define MAPGRID_UNDEFINED MAPGRID_METATILE_ID_MASK + +// Masks/shifts for metatile attributes +// Metatile attributes consist of an 8 bit behavior value, 4 unused bits, and a 4 bit layer type value +// This is the data stored in each data/tilesets/*/*/metatile_attributes.bin file +#define METATILE_ATTR_BEHAVIOR_MASK 0x00FF // Bits 1-8 +#define METATILE_ATTR_LAYER_MASK 0xF000 // Bits 13-16 +#define METATILE_ATTR_LAYER_SHIFT 12 + +enum { + METATILE_LAYER_TYPE_NORMAL, // Metatile uses middle and top bg layers + METATILE_LAYER_TYPE_COVERED, // Metatile uses bottom and middle bg layers + METATILE_LAYER_TYPE_SPLIT, // Metatile uses bottom and top bg layers +}; #define METATILE_ID(tileset, name) (METATILE_##tileset##_##name) -enum -{ - CONNECTION_INVALID = -1, - CONNECTION_NONE, - CONNECTION_SOUTH, - CONNECTION_NORTH, - CONNECTION_WEST, - CONNECTION_EAST, - CONNECTION_DIVE, - CONNECTION_EMERGE -}; +// Rows of metatiles do not actually have a strict width. +// This constant is used for calculations for finding the next row of metatiles +// for constructing large tiles, such as the Battle Pike's curtain tile. +#define METATILE_ROW_WIDTH 8 typedef void (*TilesetCB)(void); @@ -146,7 +156,7 @@ struct MapHeader /* 0x1A */ bool8 allowCycling:1; bool8 allowEscaping:1; // Escape Rope and Dig bool8 allowRunning:1; - bool8 showMapName:5; // the last 4 bits are unused + bool8 showMapName:5; // the last 4 bits are unused // but the 5 bit sized bitfield is required to match /* 0x1B */ u8 battleType; }; @@ -206,7 +216,7 @@ struct ObjectEvent /*0x1F*/ u8 previousMetatileBehavior; /*0x20*/ u8 previousMovementDirection; /*0x21*/ u8 directionSequenceIndex; - /*0x22*/ u8 playerCopyableMovement; + /*0x22*/ u8 playerCopyableMovement; // COPY_MOVE_* /*size = 0x24*/ }; @@ -241,14 +251,14 @@ enum { PLAYER_AVATAR_STATE_WATERING, }; -#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0) -#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1) -#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2) -#define PLAYER_AVATAR_FLAG_SURFING (1 << 3) -#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4) -#define PLAYER_AVATAR_FLAG_5 (1 << 5) -#define PLAYER_AVATAR_FLAG_FORCED_MOVE (1 << 6) -#define PLAYER_AVATAR_FLAG_DASH (1 << 7) +#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0) +#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1) +#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2) +#define PLAYER_AVATAR_FLAG_SURFING (1 << 3) +#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4) +#define PLAYER_AVATAR_FLAG_CONTROLLABLE (1 << 5) +#define PLAYER_AVATAR_FLAG_FORCED_MOVE (1 << 6) +#define PLAYER_AVATAR_FLAG_DASH (1 << 7) enum { diff --git a/include/global.h b/include/global.h index a3b8cfd42d..b27c1e91c0 100644 --- a/include/global.h +++ b/include/global.h @@ -9,8 +9,12 @@ #include "constants/flags.h" #include "constants/vars.h" #include "constants/species.h" +#include "constants/pokedex.h" #include "constants/berry.h" -#include "constants/expansion_branches.h" +#include "constants/maps.h" +#include "constants/pokemon.h" +#include "constants/easy_chat.h" +#include "constants/trainer_hill.h" // Prevent cross-jump optimization. #define BLOCK_CROSS_JUMP asm(""); @@ -20,19 +24,18 @@ #define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided") #define NAKED __attribute__((naked)) -// IDE support -#if defined (__APPLE__) || defined (__CYGWIN__) || defined (_MSC_VER) -#define _(x) x -#define __(x) x - -// Fool CLion IDE -#define INCBIN(x) {0} -#define INCBIN_U8 INCBIN -#define INCBIN_U16 INCBIN -#define INCBIN_U32 INCBIN -#define INCBIN_S8 INCBIN -#define INCBIN_S16 INCBIN -#define INCBIN_S32 INCBIN +/// IDE support +#if defined(__APPLE__) || defined(__CYGWIN__) || defined(__INTELLISENSE__) +// We define these when using certain IDEs to fool preproc +#define _(x) (x) +#define __(x) (x) +#define INCBIN(...) {0} +#define INCBIN_U8 INCBIN +#define INCBIN_U16 INCBIN +#define INCBIN_U32 INCBIN +#define INCBIN_S8 INCBIN +#define INCBIN_S16 INCBIN +#define INCBIN_S32 INCBIN #endif // IDE support #define ARRAY_COUNT(array) (size_t)(sizeof(array) / sizeof((array)[0])) @@ -55,6 +58,7 @@ // Converts a number to Q4.12 fixed-point format #define Q_4_12(n) ((s16)((n) * 4096)) +#define UQ_4_12(n) ((u16)((n) * 4096)) // Converts a number to Q24.8 fixed-point format #define Q_24_8(n) ((s32)((n) << 8)) @@ -64,10 +68,15 @@ // Converts a Q4.12 fixed-point format number to a regular integer #define Q_4_12_TO_INT(n) ((int)((n) / 4096)) +#define UQ_4_12_TO_INT(n) ((int)((n) / 4096)) // Converts a Q24.8 fixed-point format number to a regular integer #define Q_24_8_TO_INT(n) ((int)((n) >> 8)) +// Rounding value for Q4.12 fixed-point format +#define Q_4_12_ROUND ((1) << (12 - 1)) +#define UQ_4_12_ROUND ((1) << (12 - 1)) + #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) @@ -99,13 +108,13 @@ #define T1_READ_8(ptr) ((ptr)[0]) #define T1_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) #define T1_READ_32(ptr) ((ptr)[0] | ((ptr)[1] << 8) | ((ptr)[2] << 16) | ((ptr)[3] << 24)) -#define T1_READ_PTR(ptr) (u8*) T1_READ_32(ptr) +#define T1_READ_PTR(ptr) (u8 *) T1_READ_32(ptr) // T2_READ_8 is a duplicate to remain consistent with each group. #define T2_READ_8(ptr) ((ptr)[0]) #define T2_READ_16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) #define T2_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) -#define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr) +#define T2_READ_PTR(ptr) (void *) T2_READ_32(ptr) // Macros for checking the joypad #define TEST_BUTTON(field, button) ((field) & (button)) @@ -122,10 +131,17 @@ f; \ }) -#define ROUND_BITS_TO_BYTES(numBits)(((numBits) / 8) + (((numBits) % 8) ? 1 : 0)) +#define DIV_ROUND_UP(val, roundBy)(((val) / (roundBy)) + (((val) % (roundBy)) ? 1 : 0)) -#define DEX_FLAGS_NO (ROUND_BITS_TO_BYTES(POKEMON_SLOTS_NUMBER)) -#define NUM_FLAG_BYTES (ROUND_BITS_TO_BYTES(FLAGS_COUNT)) +#define ROUND_BITS_TO_BYTES(numBits) DIV_ROUND_UP(numBits, 8) + +#define NUM_DEX_FLAG_BYTES ROUND_BITS_TO_BYTES(POKEMON_SLOTS_NUMBER) +#define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT) +#define NUM_ADDITIONAL_PHRASE_BYTES ROUND_BITS_TO_BYTES(NUM_ADDITIONAL_PHRASES) + +// This produces an error at compile-time if expr is zero. +// It looks like file.c:line: size of array `id' is negative +#define STATIC_ASSERT(expr, id) typedef char id[(expr) ? 1 : -1]; struct Coords8 { @@ -208,11 +224,10 @@ struct BerryPickingResults u8 field_F; }; -// two arrays for lvl50 and open level struct PyramidBag { - u16 itemId[2][PYRAMID_BAG_ITEMS_COUNT]; - u8 quantity[2][PYRAMID_BAG_ITEMS_COUNT]; + u16 itemId[FRONTIER_LVL_MODE_COUNT][PYRAMID_BAG_ITEMS_COUNT]; + u8 quantity[FRONTIER_LVL_MODE_COUNT][PYRAMID_BAG_ITEMS_COUNT]; }; struct BerryCrush @@ -272,8 +287,6 @@ struct BattleTowerPokemon u8 friendship; }; -#define NULL_BATTLE_TOWER_POKEMON { .nickname = __("$$$$$$$$$$$") } - struct EmeraldBattleTowerRecord { /*0x00*/ u8 lvlMode; // 0 = level 50, 1 = level 100 @@ -353,8 +366,8 @@ struct BattleFrontier /*0xCB2*/ u16 curChallengeBattleNum; // Battle number / room number (Pike) / floor number (Pyramid) /*0xCB4*/ u16 trainerIds[20]; /*0xCDC*/ u32 winStreakActiveFlags; - /*0xCE0*/ u16 towerWinStreaks[4][2]; - /*0xCF0*/ u16 towerRecordWinStreaks[4][2]; + /*0xCE0*/ u16 towerWinStreaks[4][FRONTIER_LVL_MODE_COUNT]; + /*0xCF0*/ u16 towerRecordWinStreaks[4][FRONTIER_LVL_MODE_COUNT]; /*0xD00*/ u16 battledBrainFlags; /*0xD02*/ u16 towerSinglesStreak; // Never read /*0xD04*/ u16 towerNumWins; // Increments to MAX_STREAK but never read otherwise @@ -371,35 +384,35 @@ struct BattleFrontier /*0xD09*/ u8 domeUnused; /*0xD0A*/ u8 domeLvlMode; /*0xD0B*/ u8 domeBattleMode; - /*0xD0C*/ u16 domeWinStreaks[2][2]; - /*0xD14*/ u16 domeRecordWinStreaks[2][2]; - /*0xD1C*/ u16 domeTotalChampionships[2][2]; + /*0xD0C*/ u16 domeWinStreaks[2][FRONTIER_LVL_MODE_COUNT]; + /*0xD14*/ u16 domeRecordWinStreaks[2][FRONTIER_LVL_MODE_COUNT]; + /*0xD1C*/ u16 domeTotalChampionships[2][FRONTIER_LVL_MODE_COUNT]; /*0xD24*/ struct BattleDomeTrainer domeTrainers[DOME_TOURNAMENT_TRAINERS_COUNT]; /*0xD64*/ u16 domeMonIds[DOME_TOURNAMENT_TRAINERS_COUNT][FRONTIER_PARTY_SIZE]; /*0xDC4*/ u16 unused_DC4; /*0xDC6*/ u16 palacePrize; - /*0xDC8*/ u16 palaceWinStreaks[2][2]; - /*0xDD0*/ u16 palaceRecordWinStreaks[2][2]; + /*0xDC8*/ u16 palaceWinStreaks[2][FRONTIER_LVL_MODE_COUNT]; + /*0xDD0*/ u16 palaceRecordWinStreaks[2][FRONTIER_LVL_MODE_COUNT]; /*0xDD8*/ u16 arenaPrize; - /*0xDDA*/ u16 arenaWinStreaks[2]; - /*0xDDE*/ u16 arenaRecordStreaks[2]; - /*0xDE2*/ u16 factoryWinStreaks[2][2]; - /*0xDEA*/ u16 factoryRecordWinStreaks[2][2]; - /*0xDF6*/ u16 factoryRentsCount[2][2]; - /*0xDFA*/ u16 factoryRecordRentsCount[2][2]; + /*0xDDA*/ u16 arenaWinStreaks[FRONTIER_LVL_MODE_COUNT]; + /*0xDDE*/ u16 arenaRecordStreaks[FRONTIER_LVL_MODE_COUNT]; + /*0xDE2*/ u16 factoryWinStreaks[2][FRONTIER_LVL_MODE_COUNT]; + /*0xDEA*/ u16 factoryRecordWinStreaks[2][FRONTIER_LVL_MODE_COUNT]; + /*0xDF6*/ u16 factoryRentsCount[2][FRONTIER_LVL_MODE_COUNT]; + /*0xDFA*/ u16 factoryRecordRentsCount[2][FRONTIER_LVL_MODE_COUNT]; /*0xE02*/ u16 pikePrize; - /*0xE04*/ u16 pikeWinStreaks[2]; - /*0xE08*/ u16 pikeRecordStreaks[2]; - /*0xE0C*/ u16 pikeTotalStreaks[2]; + /*0xE04*/ u16 pikeWinStreaks[FRONTIER_LVL_MODE_COUNT]; + /*0xE08*/ u16 pikeRecordStreaks[FRONTIER_LVL_MODE_COUNT]; + /*0xE0C*/ u16 pikeTotalStreaks[FRONTIER_LVL_MODE_COUNT]; /*0xE10*/ u8 pikeHintedRoomIndex:3; /*0xE10*/ u8 pikeHintedRoomType:4; /*0xE10*/ u8 pikeHealingRoomsDisabled:1; /*0xE12*/ u16 pikeHeldItemsBackup[FRONTIER_PARTY_SIZE]; /*0xE18*/ u16 pyramidPrize; - /*0xE1A*/ u16 pyramidWinStreaks[2]; - /*0xE1E*/ u16 pyramidRecordStreaks[2]; + /*0xE1A*/ u16 pyramidWinStreaks[FRONTIER_LVL_MODE_COUNT]; + /*0xE1E*/ u16 pyramidRecordStreaks[FRONTIER_LVL_MODE_COUNT]; /*0xE22*/ u16 pyramidRandoms[4]; - /*0xE2A*/ u8 pyramidTrainerFlags; + /*0xE2A*/ u8 pyramidTrainerFlags; // 1 bit for each trainer (MAX_PYRAMID_TRAINERS) /*0xE2C*/ struct PyramidBag pyramidBag; /*0xE68*/ u8 pyramidLightRadius; /*0xE6A*/ u16 verdanturfTentPrize; @@ -411,8 +424,8 @@ struct BattleFrontier /*0xEBC*/ u32 battlesCount; /*0xEC0*/ u16 domeWinningMoves[DOME_TOURNAMENT_TRAINERS_COUNT]; /*0xEE0*/ u8 trainerFlags; - /*0xEE1*/ u8 opponentNames[2][PLAYER_NAME_LENGTH + 1]; - /*0xEF1*/ u8 opponentTrainerIds[2][TRAINER_ID_LENGTH]; + /*0xEE1*/ u8 opponentNames[FRONTIER_LVL_MODE_COUNT][PLAYER_NAME_LENGTH + 1]; + /*0xEF1*/ u8 opponentTrainerIds[FRONTIER_LVL_MODE_COUNT][TRAINER_ID_LENGTH]; /*0xEF9*/ u8 unk_EF9:7; // Never read /*0xEF9*/ u8 savedGame:1; /*0xEFA*/ u8 unused_EFA; @@ -488,8 +501,8 @@ struct SaveBlock2 /*0x1EC*/ struct BerryCrush berryCrush; /*0x1FC*/ struct PokemonJumpRecords pokeJump; /*0x20C*/ struct BerryPickingResults berryPick; - /*0x21C*/ struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][2][3]; // From record mixing. - /*0x57C*/ struct RankingHall2P hallRecords2P[2][3]; // From record mixing. + /*0x21C*/ struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][FRONTIER_LVL_MODE_COUNT][HALL_RECORDS_COUNT]; // From record mixing. + /*0x57C*/ struct RankingHall2P hallRecords2P[FRONTIER_LVL_MODE_COUNT][HALL_RECORDS_COUNT]; // From record mixing. /*0x624*/ u16 contestLinkResults[CONTEST_CATEGORIES_COUNT][CONTESTANT_COUNT]; /*0x64C*/ struct BattleFrontier frontier; }; // sizeof=0xF2C @@ -597,15 +610,6 @@ struct DewfordTrend u16 words[2]; }; /*size = 0x8*/ -struct MailStruct -{ - /*0x00*/ u16 words[MAIL_WORDS_COUNT]; - /*0x12*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x1A*/ u8 trainerId[TRAINER_ID_LENGTH]; - /*0x1E*/ u16 species; - /*0x20*/ u16 itemId; -}; - struct MauvilleManCommon { u8 id; @@ -639,8 +643,8 @@ struct MauvilleManGiddy /*0x00*/ u8 id; /*0x01*/ u8 taleCounter; /*0x02*/ u8 questionNum; - /*0x04*/ u16 randomWords[10]; - /*0x18*/ u8 questionList[8]; + /*0x04*/ u16 randomWords[GIDDY_MAX_TALES]; + /*0x18*/ u8 questionList[GIDDY_MAX_QUESTIONS]; /*0x20*/ u8 language; }; /*size = 0x2C*/ @@ -671,20 +675,6 @@ typedef union OldMan u8 filler[0x40]; } OldMan; -struct RecordMixing_UnknownStructSub -{ - u32 unk0; - u8 data[0x34]; - //u8 data[0x38]; -}; - -struct RecordMixing_UnknownStruct -{ - struct RecordMixing_UnknownStructSub data[2]; - u32 unk70; - u16 unk74[0x2]; -}; - #define LINK_B_RECORDS_COUNT 5 struct LinkBattleRecord @@ -727,10 +717,19 @@ struct ContestWinner u8 contestRank; }; +struct Mail +{ + /*0x00*/ u16 words[MAIL_WORDS_COUNT]; + /*0x12*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1A*/ u8 trainerId[TRAINER_ID_LENGTH]; + /*0x1E*/ u16 species; + /*0x20*/ u16 itemId; +}; + struct DaycareMail { - struct MailStruct message; - u8 OT_name[PLAYER_NAME_LENGTH + 1]; + struct Mail message; + u8 otName[PLAYER_NAME_LENGTH + 1]; u8 monName[POKEMON_NAME_LENGTH + 1]; u8 gameLanguage:4; u8 monLanguage:4; @@ -750,18 +749,11 @@ struct DayCare u8 stepCounter; }; -struct RecordMixingDaycareMail -{ - struct DaycareMail mail[DAYCARE_MON_COUNT]; - u32 numDaycareMons; - bool16 holdsItem[DAYCARE_MON_COUNT]; -}; - struct LilycoveLadyQuiz { /*0x000*/ u8 id; /*0x001*/ u8 state; - /*0x002*/ u16 question[9]; + /*0x002*/ u16 question[QUIZ_QUESTION_LEN]; /*0x014*/ u16 correctAnswer; /*0x016*/ u16 playerAnswer; /*0x018*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; @@ -822,7 +814,7 @@ struct TrainerNameRecord u8 trainerName[PLAYER_NAME_LENGTH + 1]; }; -struct SaveTrainerHill +struct TrainerHillSave { /*0x3D64*/ u32 timer; /*0x3D68*/ u32 bestTime; @@ -834,77 +826,62 @@ struct SaveTrainerHill /*0x3D6E*/ u16 hasLost:1; /*0x3D6E*/ u16 maybeECardScanDuringChallenge:1; /*0x3D6E*/ u16 field_3D6E_0f:1; - /*0x3D6E*/ u16 tag:2; + /*0x3D6E*/ u16 mode:2; // HILL_MODE_* }; -struct MysteryEventStruct +struct WonderNewsMetadata { - u8 unk_0_0:2; - u8 unk_0_2:3; - u8 unk_0_5:3; - u8 unk_1; + u8 newsType:2; + u8 sentCounter:3; + u8 getCounter:3; + u8 rand; }; - struct WonderNews +struct WonderNews { - u16 unk_00; - u8 unk_02; - u8 unk_03; - u8 unk_04[40]; - u8 unk_2C[10][40]; + u16 id; + u8 sendType; // SEND_TYPE_* + u8 bgType; + u8 titleText[WONDER_NEWS_TEXT_LENGTH]; + u8 bodyText[WONDER_NEWS_BODY_TEXT_LINES][WONDER_NEWS_TEXT_LENGTH]; }; - struct WonderNewsSaveStruct +struct WonderCard { - u32 crc; - struct WonderNews data; + u16 flagId; // Event flag (sReceivedGiftFlags) + WONDER_CARD_FLAG_OFFSET + u16 iconSpecies; + u32 idNumber; + u8 type:2; // CARD_TYPE_* + u8 bgType:4; + u8 sendType:2; // SEND_TYPE_* + u8 maxStamps; + u8 titleText[WONDER_CARD_TEXT_LENGTH]; + u8 subtitleText[WONDER_CARD_TEXT_LENGTH]; + u8 bodyText[WONDER_CARD_BODY_TEXT_LINES][WONDER_CARD_TEXT_LENGTH]; + u8 footerLine1Text[WONDER_CARD_TEXT_LENGTH]; + u8 footerLine2Text[WONDER_CARD_TEXT_LENGTH]; }; - struct WonderCard +struct WonderCardMetadata { - u16 unk_00; - u16 unk_02; - u32 unk_04; - u8 unk_08_0:2; - u8 unk_08_2:4; - u8 unk_08_6:2; - u8 unk_09; - u8 unk_0A[40]; - u8 unk_32[40]; - u8 unk_5A[4][40]; - u8 unk_FA[40]; - u8 unk_122[40]; + u16 battlesWon; + u16 battlesLost; + u16 numTrades; + u16 iconSpecies; + u16 stampData[2][MAX_STAMP_CARD_STAMPS]; // First element is STAMP_SPECIES, second is STAMP_ID }; - struct WonderCardSaveStruct +struct MysteryGiftSave { - u32 crc; - struct WonderCard data; -}; - - struct MEventBuffer_3430_Sub -{ - u16 unk_00; - u16 unk_02; - u16 unk_04; - u16 unk_06; - u16 unk_08[2][7]; -}; - - struct MEventBuffer_3430 -{ - u32 crc; - struct MEventBuffer_3430_Sub data; -}; - - struct MEventBuffers -{ - /*0x000 0x322C*/ struct WonderNewsSaveStruct wonderNews; - /*0x1c0 0x33EC*/ struct WonderCardSaveStruct wonderCard; - /*0x310 0x353C*/ struct MEventBuffer_3430 buffer_310; - /*0x338 0x3564*/ u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS]; - /*0x340 0x356C*/ struct MysteryEventStruct unk_340; - /*0x344 0x3570*/ u32 unk_344[2][5]; + u32 newsCrc; + struct WonderNews news; + u32 cardCrc; + struct WonderCard card; + u32 cardMetadataCrc; + struct WonderCardMetadata cardMetadata; + u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS]; + struct WonderNewsMetadata newsMetadata; + u32 trainerIds[2][5]; // Saved ids for 10 trainers, 5 each for battles and trades }; // 0x36C 0x3598 // For external event data storage. The majority of these may have never been used. @@ -981,7 +958,7 @@ struct SaveBlock1 /*0x848*/ struct Pokeblock pokeblocks[POKEBLOCKS_COUNT]; /*0x988*/ u8 filler1[0x34]; // Previously Dex Flags, feel free to remove. /*0x9BC*/ u16 berryBlenderRecords[3]; - /*0x9C2*/ u8 field_9C2[6]; + /*0x9C2*/ u8 unused_9C2[6]; /*0x9C8*/ u16 trainerRematchStepCounter; /*0x9CA*/ u8 trainerRematches[MAX_REMATCH_ENTRIES]; /*0xA30*/ struct ObjectEvent objectEvents[OBJECT_EVENTS_COUNT]; @@ -1001,17 +978,16 @@ struct SaveBlock1 /*0x278E*/ u8 decorationPosters[10]; /*0x2798*/ u8 decorationDolls[40]; /*0x27C0*/ u8 decorationCushions[10]; - /*0x27CA*/ u8 padding_27CA[2]; /*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT]; /*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT]; /*0x2B90*/ u16 outbreakPokemonSpecies; /*0x2B92*/ u8 outbreakLocationMapNum; /*0x2B93*/ u8 outbreakLocationMapGroup; /*0x2B94*/ u8 outbreakPokemonLevel; - /*0x2B95*/ u8 outbreakUnk1; - /*0x2B96*/ u16 outbreakUnk2; + /*0x2B95*/ u8 outbreakUnused1; + /*0x2B96*/ u16 outbreakUnused2; /*0x2B98*/ u16 outbreakPokemonMoves[MAX_MON_MOVES]; - /*0x2BA0*/ u8 outbreakUnk4; + /*0x2BA0*/ u8 outbreakUnused3; /*0x2BA1*/ u8 outbreakPokemonProbability; /*0x2BA2*/ u16 outbreakDaysLeft; /*0x2BA4*/ struct GabbyAndTyData gabbyAndTyData; @@ -1019,8 +995,8 @@ struct SaveBlock1 /*0x2BBC*/ u16 easyChatBattleStart[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x2BC8*/ u16 easyChatBattleWon[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x2BD4*/ u16 easyChatBattleLost[EASY_CHAT_BATTLE_WORDS_COUNT]; - /*0x2BE0*/ struct MailStruct mail[MAIL_COUNT]; - /*0x2E20*/ u8 additionalPhrases[8]; // bitfield for 33 additional phrases in easy chat system + /*0x2BE0*/ struct Mail mail[MAIL_COUNT]; + /*0x2E20*/ u8 additionalPhrases[NUM_ADDITIONAL_PHRASE_BYTES]; // bitfield for 33 additional phrases in easy chat system /*0x2E28*/ OldMan oldMan; /*0x2e64*/ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT]; /*0x2e90*/ struct ContestWinner contestWinners[NUM_CONTEST_WINNERS]; // see CONTEST_WINNER_* @@ -1031,16 +1007,16 @@ struct SaveBlock1 /*0x31C7*/ struct ExternalEventFlags externalEventFlags; /*0x31DC*/ struct Roamer roamer; /*0x31F8*/ struct EnigmaBerry enigmaBerry; - /*0x322C*/ struct MEventBuffers unk_322C; - /*0x3???*/ u8 dexSeen[DEX_FLAGS_NO]; - /*0x3???*/ u8 dexCaught[DEX_FLAGS_NO]; - /*0x3???*/ u32 trainerHillTimes[4]; + /*0x322C*/ struct MysteryGiftSave mysteryGift; + /*0x3???*/ u8 dexSeen[NUM_DEX_FLAG_BYTES]; + /*0x3???*/ u8 dexCaught[NUM_DEX_FLAG_BYTES]; + /*0x3???*/ u32 trainerHillTimes[NUM_TRAINER_HILL_MODES]; /*0x3???*/ struct RamScript ramScript; /*0x3???*/ struct RecordMixingGift recordMixingGift; /*0x3???*/ LilycoveLady lilycoveLady; /*0x3???*/ struct TrainerNameRecord trainerNameRecords[20]; /*0x3???*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21]; - /*0x3???*/ struct SaveTrainerHill trainerHill; + /*0x3???*/ struct TrainerHillSave trainerHill; /*0x3???*/ struct WaldaPhrase waldaPhrase; // sizeof: 0x3??? }; @@ -1051,7 +1027,7 @@ struct MapPosition { s16 x; s16 y; - s8 height; + s8 elevation; }; #endif // GUARD_GLOBAL_H diff --git a/include/global.tv.h b/include/global.tv.h index 2bc7dda998..1fb1b8a333 100644 --- a/include/global.tv.h +++ b/include/global.tv.h @@ -61,7 +61,7 @@ typedef union // size = 0x24 /*0x0F*/ u8 filler_0F[1]; /*0x10*/ u8 nickname[PLAYER_NAME_LENGTH + 1]; /*0x18*/ u16 words18[2]; - /*0x1C*/ u16 words[4]; + /*0x1C*/ u16 words[2]; } fanclubOpinions; // TVSHOW_DUMMY @@ -81,7 +81,8 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u16 species; /*0x04*/ u8 pokemonName[POKEMON_NAME_LENGTH + 1]; - /*0x0F*/ u8 trainerName[11]; + /*0x0F*/ u8 trainerName[PLAYER_NAME_LENGTH + 1]; + /*0x17*/ u8 unused[3]; /*0x1A*/ u8 random; /*0x1B*/ u8 random2; /*0x1C*/ u16 randomSpecies; @@ -334,7 +335,7 @@ typedef union // size = 0x24 /*0x00*/ u8 kind; /*0x01*/ bool8 active; /*0x02*/ u8 avgLevel; - /*0x03*/ u8 nDecorations; + /*0x03*/ u8 numDecorations; /*0x04*/ u8 decorations[4]; /*0x08*/ u16 species; /*0x0a*/ u16 move; @@ -437,8 +438,8 @@ typedef union // size = 0x24 struct { /*0x00*/ u8 kind; /*0x01*/ bool8 active; - /*0x02*/ u8 nMonsCaught; - /*0x03*/ u8 nPkblkUsed; + /*0x02*/ u8 monsCaught; + /*0x03*/ u8 pokeblocksUsed; /*0x04*/ u8 language; /*0x05*/ u8 filler_05[14]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; @@ -449,27 +450,27 @@ typedef union // size = 0x24 struct { /*0x00*/ u8 kind; /*0x01*/ bool8 active; - /*0x02*/ u8 var02; - /*0x03*/ u8 var03; + /*0x02*/ u8 unused1; + /*0x03*/ u8 unused3; /*0x04*/ u16 moves[MAX_MON_MOVES]; /*0x0C*/ u16 species; - /*0x0E*/ u16 var0E; + /*0x0E*/ u16 unused2; /*0x10*/ u8 locationMapNum; /*0x11*/ u8 locationMapGroup; - /*0x12*/ u8 var12; + /*0x12*/ u8 unused4; /*0x13*/ u8 probability; /*0x14*/ u8 level; - /*0x15*/ u8 var15; + /*0x15*/ u8 unused5; /*0x16*/ u16 daysLeft; /*0x18*/ u8 language; } massOutbreak; } TVShow; -typedef struct // 2b50 +typedef struct { u8 kind; u8 state; - u16 days; + u16 dayCountdown; } PokeNews; struct GabbyAndTyData diff --git a/include/graphics.h b/include/graphics.h index 8d28bef550..65857e5e31 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -5,31 +5,61 @@ extern const u32 gMessageBox_Gfx[]; extern const u16 gMessageBox_Pal[]; -// interface pokeballs -extern const u32 gInterfaceGfx_PokeBall[]; -extern const u32 gInterfacePal_PokeBall[]; -extern const u32 gInterfaceGfx_GreatBall[]; -extern const u32 gInterfacePal_GreatBall[]; -extern const u32 gInterfaceGfx_SafariBall[]; -extern const u32 gInterfacePal_SafariBall[]; -extern const u32 gInterfaceGfx_UltraBall[]; -extern const u32 gInterfacePal_UltraBall[]; -extern const u32 gInterfaceGfx_MasterBall[]; -extern const u32 gInterfacePal_MasterBall[]; -extern const u32 gInterfaceGfx_NetBall[]; -extern const u32 gInterfacePal_NetBall[]; -extern const u32 gInterfaceGfx_DiveBall[]; -extern const u32 gInterfacePal_DiveBall[]; -extern const u32 gInterfaceGfx_NestBall[]; -extern const u32 gInterfacePal_NestBall[]; -extern const u32 gInterfaceGfx_RepeatBall[]; -extern const u32 gInterfacePal_RepeatBall[]; -extern const u32 gInterfaceGfx_TimerBall[]; -extern const u32 gInterfacePal_TimerBall[]; -extern const u32 gInterfaceGfx_LuxuryBall[]; -extern const u32 gInterfacePal_LuxuryBall[]; -extern const u32 gInterfaceGfx_PremierBall[]; -extern const u32 gInterfacePal_PremierBall[]; +// pokeballs +extern const u32 gBallGfx_Poke[]; +extern const u32 gBallPal_Poke[]; +extern const u32 gBallGfx_Great[]; +extern const u32 gBallPal_Great[]; +extern const u32 gBallGfx_Ultra[]; +extern const u32 gBallPal_Ultra[]; +extern const u32 gBallGfx_Master[]; +extern const u32 gBallPal_Master[]; +extern const u32 gBallGfx_Premier[]; +extern const u32 gBallPal_Premier[]; +extern const u32 gBallGfx_Heal[]; +extern const u32 gBallPal_Heal[]; +extern const u32 gBallGfx_Net[]; +extern const u32 gBallPal_Net[]; +extern const u32 gBallGfx_Nest[]; +extern const u32 gBallPal_Nest[]; +extern const u32 gBallGfx_Dive[]; +extern const u32 gBallPal_Dive[]; +extern const u32 gBallGfx_Dusk[]; +extern const u32 gBallPal_Dusk[]; +extern const u32 gBallGfx_Timer[]; +extern const u32 gBallPal_Timer[]; +extern const u32 gBallGfx_Quick[]; +extern const u32 gBallPal_Quick[]; +extern const u32 gBallGfx_Repeat[]; +extern const u32 gBallPal_Repeat[]; +extern const u32 gBallGfx_Luxury[]; +extern const u32 gBallPal_Luxury[]; +extern const u32 gBallGfx_Level[]; +extern const u32 gBallPal_Level[]; +extern const u32 gBallGfx_Lure[]; +extern const u32 gBallPal_Lure[]; +extern const u32 gBallGfx_Moon[]; +extern const u32 gBallPal_Moon[]; +extern const u32 gBallGfx_Friend[]; +extern const u32 gBallPal_Friend[]; +extern const u32 gBallGfx_Love[]; +extern const u32 gBallPal_Love[]; +extern const u32 gBallGfx_Fast[]; +extern const u32 gBallPal_Fast[]; +extern const u32 gBallGfx_Heavy[]; +extern const u32 gBallPal_Heavy[]; +extern const u32 gBallGfx_Dream[]; +extern const u32 gBallPal_Dream[]; +extern const u32 gBallGfx_Safari[]; +extern const u32 gBallPal_Safari[]; +extern const u32 gBallGfx_Sport[]; +extern const u32 gBallPal_Sport[]; +extern const u32 gBallGfx_Park[]; +extern const u32 gBallPal_Park[]; +extern const u32 gBallGfx_Beast[]; +extern const u32 gBallPal_Beast[]; +extern const u32 gBallGfx_Cherish[]; +extern const u32 gBallPal_Cherish[]; extern const u32 gOpenPokeballGfx[]; // pokemon gfx @@ -424,6 +454,7 @@ extern const u32 gMonFrontPic_Groudon[]; extern const u32 gMonFrontPic_Rayquaza[]; extern const u32 gMonFrontPic_Jirachi[]; extern const u32 gMonFrontPic_Deoxys[]; +#if P_NEW_POKEMON == TRUE extern const u32 gMonFrontPic_Turtwig[]; extern const u32 gMonFrontPic_Grotle[]; extern const u32 gMonFrontPic_Torterra[]; @@ -434,13 +465,20 @@ extern const u32 gMonFrontPic_Piplup[]; extern const u32 gMonFrontPic_Prinplup[]; extern const u32 gMonFrontPic_Empoleon[]; extern const u32 gMonFrontPic_Starly[]; +extern const u32 gMonFrontPic_StarlyF[]; extern const u32 gMonFrontPic_Staravia[]; +extern const u32 gMonFrontPic_StaraviaF[]; extern const u32 gMonFrontPic_Staraptor[]; +extern const u32 gMonFrontPic_StaraptorF[]; extern const u32 gMonFrontPic_Bidoof[]; +extern const u32 gMonFrontPic_BidoofF[]; extern const u32 gMonFrontPic_Bibarel[]; extern const u32 gMonFrontPic_Kricketot[]; +extern const u32 gMonFrontPic_KricketotF[]; extern const u32 gMonFrontPic_Kricketune[]; +extern const u32 gMonFrontPic_KricketuneF[]; extern const u32 gMonFrontPic_Shinx[]; +extern const u32 gMonFrontPic_ShinxF[]; extern const u32 gMonFrontPic_Luxio[]; extern const u32 gMonFrontPic_Luxray[]; extern const u32 gMonFrontPic_Budew[]; @@ -942,6 +980,14 @@ extern const u32 gMonFrontPic_Regidrago[]; extern const u32 gMonFrontPic_Glastrier[]; extern const u32 gMonFrontPic_Spectrier[]; extern const u32 gMonFrontPic_Calyrex[]; +//extern const u32 gMonFrontPic_Wyrdeer[]; +extern const u32 gMonFrontPic_Kleavor[]; +extern const u32 gMonFrontPic_Ursaluna[]; +//extern const u32 gMonFrontPic_Basculegion[]; +//extern const u32 gMonFrontPic_BasculegionF[]; +//extern const u32 gMonFrontPic_Sneasler[]; +extern const u32 gMonFrontPic_Overqwil[]; +//extern const u32 gMonFrontPic_Enamorus[]; extern const u32 gMonFrontPic_VenusaurMega[]; extern const u32 gMonFrontPic_CharizardMegaX[]; extern const u32 gMonFrontPic_CharizardMegaY[]; @@ -1029,6 +1075,22 @@ extern const u32 gMonFrontPic_DarumakaGalarian[]; extern const u32 gMonFrontPic_DarmanitanGalarian[]; extern const u32 gMonFrontPic_YamaskGalarian[]; extern const u32 gMonFrontPic_StunfiskGalarian[]; +extern const u32 gMonFrontPic_GrowlitheHisuian[]; +extern const u32 gMonFrontPic_ArcanineHisuian[]; +extern const u32 gMonFrontPic_VoltorbHisuian[]; +extern const u32 gMonFrontPic_ElectrodeHisuian[]; +extern const u32 gMonFrontPic_TyphlosionHisuian[]; +extern const u32 gMonFrontPic_QwilfishHisuian[]; +extern const u32 gMonFrontPic_SneaselHisuian[]; +//extern const u32 gMonFrontPic_SamurottHisuian[]; +extern const u32 gMonFrontPic_LilligantHisuian[]; +extern const u32 gMonFrontPic_ZoruaHisuian[]; +extern const u32 gMonFrontPic_ZoroarkHisuian[]; +extern const u32 gMonFrontPic_BraviaryHisuian[]; +extern const u32 gMonFrontPic_SliggooHisuian[]; +extern const u32 gMonFrontPic_GoodraHisuian[]; +extern const u32 gMonFrontPic_AvaluggHisuian[]; +//extern const u32 gMonFrontPic_DecidueyeHisuian[]; extern const u32 gMonFrontPic_PikachuCosplay[]; extern const u32 gMonFrontPic_PikachuRockStar[]; extern const u32 gMonFrontPic_PikachuBelle[]; @@ -1044,6 +1106,7 @@ extern const u32 gMonFrontPic_PikachuAlolaCap[]; extern const u32 gMonFrontPic_PikachuPartnerCap[]; extern const u32 gMonFrontPic_PikachuWorldCap[]; extern const u32 gMonFrontPic_PichuSpikyEared[]; +#endif extern const u32 gMonFrontPic_UnownB[]; extern const u32 gMonFrontPic_UnownC[]; extern const u32 gMonFrontPic_UnownD[]; @@ -1077,6 +1140,7 @@ extern const u32 gMonFrontPic_CastformSnowy[]; extern const u32 gMonFrontPic_DeoxysAttack[]; extern const u32 gMonFrontPic_DeoxysDefense[]; extern const u32 gMonFrontPic_DeoxysSpeed[]; +#if P_NEW_POKEMON == TRUE extern const u32 gMonFrontPic_BurmySandyCloak[]; extern const u32 gMonFrontPic_BurmyTrashCloak[]; extern const u32 gMonFrontPic_WormadamSandyCloak[]; @@ -1089,9 +1153,12 @@ extern const u32 gMonFrontPic_RotomWash[]; extern const u32 gMonFrontPic_RotomFrost[]; extern const u32 gMonFrontPic_RotomFan[]; extern const u32 gMonFrontPic_RotomMow[]; +extern const u32 gMonFrontPic_DialgaOrigin[]; +extern const u32 gMonFrontPic_PalkiaOrigin[]; extern const u32 gMonFrontPic_GiratinaOrigin[]; extern const u32 gMonFrontPic_ShayminSky[]; extern const u32 gMonFrontPic_BasculinBlueStriped[]; +extern const u32 gMonFrontPic_BasculinWhiteStriped[]; extern const u32 gMonFrontPic_DarmanitanZenMode[]; extern const u32 gMonFrontPic_DarmanitanZenModeGalarian[]; extern const u32 gMonFrontPic_SawsbuckSummer[]; @@ -1100,6 +1167,7 @@ extern const u32 gMonFrontPic_SawsbuckWinter[]; extern const u32 gMonFrontPic_TornadusTherian[]; extern const u32 gMonFrontPic_ThundurusTherian[]; extern const u32 gMonFrontPic_LandorusTherian[]; +//extern const u32 gMonFrontPic_EnamorusTherian[]; extern const u32 gMonFrontPic_KyuremWhite[]; extern const u32 gMonFrontPic_KyuremBlack[]; extern const u32 gMonFrontPic_KeldeoResolute[]; @@ -1179,6 +1247,7 @@ extern const u32 gMonFrontPic_UrshifuRapidStrikeStyle[]; extern const u32 gMonFrontPic_ZarudeDada[]; extern const u32 gMonFrontPic_CalyrexIceRider[]; extern const u32 gMonFrontPic_CalyrexShadowRider[]; +#endif extern const u32 gMonFrontPic_Egg[]; extern const u32 gMonBackPic_CircledQuestionMark[]; @@ -1570,6 +1639,7 @@ extern const u32 gMonBackPic_Groudon[]; extern const u32 gMonBackPic_Rayquaza[]; extern const u32 gMonBackPic_Jirachi[]; extern const u32 gMonBackPic_Deoxys[]; +#if P_NEW_POKEMON == TRUE extern const u32 gMonBackPic_Turtwig[]; extern const u32 gMonBackPic_Grotle[]; extern const u32 gMonBackPic_Torterra[]; @@ -1580,13 +1650,19 @@ extern const u32 gMonBackPic_Piplup[]; extern const u32 gMonBackPic_Prinplup[]; extern const u32 gMonBackPic_Empoleon[]; extern const u32 gMonBackPic_Starly[]; +extern const u32 gMonBackPic_StarlyF[]; extern const u32 gMonBackPic_Staravia[]; +extern const u32 gMonBackPic_StaraviaF[]; extern const u32 gMonBackPic_Staraptor[]; extern const u32 gMonBackPic_Bidoof[]; +extern const u32 gMonBackPic_BidoofF[]; extern const u32 gMonBackPic_Bibarel[]; extern const u32 gMonBackPic_Kricketot[]; +extern const u32 gMonBackPic_KricketotF[]; extern const u32 gMonBackPic_Kricketune[]; +extern const u32 gMonBackPic_KricketuneF[]; extern const u32 gMonBackPic_Shinx[]; +extern const u32 gMonBackPic_ShinxF[]; extern const u32 gMonBackPic_Luxio[]; extern const u32 gMonBackPic_Luxray[]; extern const u32 gMonBackPic_Budew[]; @@ -2088,6 +2164,14 @@ extern const u32 gMonBackPic_Regidrago[]; extern const u32 gMonBackPic_Glastrier[]; extern const u32 gMonBackPic_Spectrier[]; extern const u32 gMonBackPic_Calyrex[]; +//extern const u32 gMonBackPic_Wyrdeer[]; +extern const u32 gMonBackPic_Kleavor[]; +extern const u32 gMonBackPic_Ursaluna[]; +//extern const u32 gMonBackPic_Basculegion[]; +//extern const u32 gMonBackPic_BasculegionF[]; +//extern const u32 gMonBackPic_Sneasler[]; +extern const u32 gMonBackPic_Overqwil[]; +//extern const u32 gMonBackPic_Enamorus[]; extern const u32 gMonBackPic_VenusaurMega[]; extern const u32 gMonBackPic_CharizardMegaX[]; extern const u32 gMonBackPic_CharizardMegaY[]; @@ -2175,6 +2259,22 @@ extern const u32 gMonBackPic_DarumakaGalarian[]; extern const u32 gMonBackPic_DarmanitanGalarian[]; extern const u32 gMonBackPic_YamaskGalarian[]; extern const u32 gMonBackPic_StunfiskGalarian[]; +extern const u32 gMonBackPic_GrowlitheHisuian[]; +extern const u32 gMonBackPic_ArcanineHisuian[]; +extern const u32 gMonBackPic_VoltorbHisuian[]; +extern const u32 gMonBackPic_ElectrodeHisuian[]; +extern const u32 gMonBackPic_TyphlosionHisuian[]; +extern const u32 gMonBackPic_QwilfishHisuian[]; +extern const u32 gMonBackPic_SneaselHisuian[]; +//extern const u32 gMonBackPic_SamurottHisuian[]; +extern const u32 gMonBackPic_LilligantHisuian[]; +extern const u32 gMonBackPic_ZoruaHisuian[]; +extern const u32 gMonBackPic_ZoroarkHisuian[]; +extern const u32 gMonBackPic_BraviaryHisuian[]; +extern const u32 gMonBackPic_SliggooHisuian[]; +extern const u32 gMonBackPic_GoodraHisuian[]; +extern const u32 gMonBackPic_AvaluggHisuian[]; +//extern const u32 gMonBackPic_DecidueyeHisuian[]; extern const u32 gMonBackPic_PikachuCosplay[]; extern const u32 gMonBackPic_PikachuRockStar[]; extern const u32 gMonBackPic_PikachuBelle[]; @@ -2190,6 +2290,7 @@ extern const u32 gMonBackPic_PikachuAlolaCap[]; extern const u32 gMonBackPic_PikachuPartnerCap[]; extern const u32 gMonBackPic_PikachuWorldCap[]; extern const u32 gMonBackPic_PichuSpikyEared[]; +#endif extern const u32 gMonBackPic_UnownB[]; extern const u32 gMonBackPic_UnownC[]; extern const u32 gMonBackPic_UnownD[]; @@ -2223,6 +2324,7 @@ extern const u32 gMonBackPic_CastformSnowy[]; extern const u32 gMonBackPic_DeoxysAttack[]; extern const u32 gMonBackPic_DeoxysDefense[]; extern const u32 gMonBackPic_DeoxysSpeed[]; +#if P_NEW_POKEMON == TRUE extern const u32 gMonBackPic_BurmySandyCloak[]; extern const u32 gMonBackPic_BurmyTrashCloak[]; extern const u32 gMonBackPic_WormadamSandyCloak[]; @@ -2235,9 +2337,12 @@ extern const u32 gMonBackPic_RotomWash[]; extern const u32 gMonBackPic_RotomFrost[]; extern const u32 gMonBackPic_RotomFan[]; extern const u32 gMonBackPic_RotomMow[]; +extern const u32 gMonBackPic_DialgaOrigin[]; +extern const u32 gMonBackPic_PalkiaOrigin[]; extern const u32 gMonBackPic_GiratinaOrigin[]; extern const u32 gMonBackPic_ShayminSky[]; extern const u32 gMonBackPic_BasculinBlueStriped[]; +extern const u32 gMonBackPic_BasculinWhiteStriped[]; extern const u32 gMonBackPic_DarmanitanZenMode[]; extern const u32 gMonBackPic_DarmanitanZenModeGalarian[]; extern const u32 gMonBackPic_SawsbuckSummer[]; @@ -2246,6 +2351,7 @@ extern const u32 gMonBackPic_SawsbuckWinter[]; extern const u32 gMonBackPic_TornadusTherian[]; extern const u32 gMonBackPic_ThundurusTherian[]; extern const u32 gMonBackPic_LandorusTherian[]; +//extern const u32 gMonBackPic_EnamorusTherian[]; extern const u32 gMonBackPic_KyuremWhite[]; extern const u32 gMonBackPic_KyuremBlack[]; extern const u32 gMonBackPic_KeldeoResolute[]; @@ -2325,6 +2431,7 @@ extern const u32 gMonBackPic_UrshifuRapidStrikeStyle[]; extern const u32 gMonBackPic_ZarudeDada[]; extern const u32 gMonBackPic_CalyrexIceRider[]; extern const u32 gMonBackPic_CalyrexShadowRider[]; +#endif extern const u32 gMonPalette_CircledQuestionMark[]; extern const u32 gMonPalette_DoubleQuestionMark[]; @@ -2714,6 +2821,7 @@ extern const u32 gMonPalette_Groudon[]; extern const u32 gMonPalette_Rayquaza[]; extern const u32 gMonPalette_Jirachi[]; extern const u32 gMonPalette_Deoxys[]; +#if P_NEW_POKEMON == TRUE extern const u32 gMonPalette_Turtwig[]; extern const u32 gMonPalette_Grotle[]; extern const u32 gMonPalette_Torterra[]; @@ -3232,6 +3340,14 @@ extern const u32 gMonPalette_Regidrago[]; extern const u32 gMonPalette_Glastrier[]; extern const u32 gMonPalette_Spectrier[]; extern const u32 gMonPalette_Calyrex[]; +//extern const u32 gMonPalette_Wyrdeer[]; +extern const u32 gMonPalette_Kleavor[]; +extern const u32 gMonPalette_Ursaluna[]; +//extern const u32 gMonPalette_Basculegion[]; +//extern const u32 gMonPalette_BasculegionF[]; +//extern const u32 gMonPalette_Sneasler[]; +extern const u32 gMonPalette_Overqwil[]; +//extern const u32 gMonPalette_Enamorus[]; extern const u32 gMonPalette_VenusaurMega[]; extern const u32 gMonPalette_CharizardMegaX[]; extern const u32 gMonPalette_CharizardMegaY[]; @@ -3319,6 +3435,22 @@ extern const u32 gMonPalette_DarumakaGalarian[]; extern const u32 gMonPalette_DarmanitanGalarian[]; extern const u32 gMonPalette_YamaskGalarian[]; extern const u32 gMonPalette_StunfiskGalarian[]; +extern const u32 gMonPalette_GrowlitheHisuian[]; +extern const u32 gMonPalette_ArcanineHisuian[]; +extern const u32 gMonPalette_VoltorbHisuian[]; +extern const u32 gMonPalette_ElectrodeHisuian[]; +extern const u32 gMonPalette_TyphlosionHisuian[]; +extern const u32 gMonPalette_QwilfishHisuian[]; +extern const u32 gMonPalette_SneaselHisuian[]; +//extern const u32 gMonPalette_SamurottHisuian[]; +extern const u32 gMonPalette_LilligantHisuian[]; +extern const u32 gMonPalette_ZoruaHisuian[]; +extern const u32 gMonPalette_ZoroarkHisuian[]; +extern const u32 gMonPalette_BraviaryHisuian[]; +extern const u32 gMonPalette_SliggooHisuian[]; +extern const u32 gMonPalette_GoodraHisuian[]; +extern const u32 gMonPalette_AvaluggHisuian[]; +//extern const u32 gMonPalette_DecidueyeHisuian[]; extern const u32 gMonPalette_PikachuCosplay[]; extern const u32 gMonPalette_PikachuRockStar[]; extern const u32 gMonPalette_PikachuBelle[]; @@ -3334,12 +3466,14 @@ extern const u32 gMonPalette_PikachuAlolaCap[]; extern const u32 gMonPalette_PikachuPartnerCap[]; extern const u32 gMonPalette_PikachuWorldCap[]; extern const u32 gMonPalette_PichuSpikyEared[]; +#endif extern const u32 gMonPalette_CastformSunny[]; extern const u32 gMonPalette_CastformRainy[]; extern const u32 gMonPalette_CastformSnowy[]; extern const u32 gMonPalette_DeoxysAttack[]; extern const u32 gMonPalette_DeoxysDefense[]; extern const u32 gMonPalette_DeoxysSpeed[]; +#if P_NEW_POKEMON == TRUE extern const u32 gMonPalette_BurmySandyCloak[]; extern const u32 gMonPalette_BurmyTrashCloak[]; extern const u32 gMonPalette_WormadamSandyCloak[]; @@ -3352,6 +3486,8 @@ extern const u32 gMonPalette_RotomWash[]; extern const u32 gMonPalette_RotomFrost[]; extern const u32 gMonPalette_RotomFan[]; extern const u32 gMonPalette_RotomMow[]; +extern const u32 gMonPalette_DialgaOrigin[]; +extern const u32 gMonPalette_PalkiaOrigin[]; extern const u32 gMonPalette_GiratinaOrigin[]; extern const u32 gMonPalette_ShayminSky[]; extern const u32 gMonPalette_ArceusFighting[]; @@ -3372,6 +3508,7 @@ extern const u32 gMonPalette_ArceusDragon[]; extern const u32 gMonPalette_ArceusDark[]; extern const u32 gMonPalette_ArceusFairy[]; extern const u32 gMonPalette_BasculinBlueStriped[]; +extern const u32 gMonPalette_BasculinWhiteStriped[]; extern const u32 gMonPalette_DarmanitanZenMode[]; extern const u32 gMonPalette_DarmanitanZenModeGalarian[]; extern const u32 gMonPalette_DeerlingSummer[]; @@ -3383,6 +3520,7 @@ extern const u32 gMonPalette_SawsbuckWinter[]; extern const u32 gMonPalette_TornadusTherian[]; extern const u32 gMonPalette_ThundurusTherian[]; extern const u32 gMonPalette_LandorusTherian[]; +//extern const u32 gMonPalette_EnamorusTherian[]; extern const u32 gMonPalette_KyuremWhite[]; extern const u32 gMonPalette_KyuremBlack[]; extern const u32 gMonPalette_KeldeoResolute[]; @@ -3495,6 +3633,7 @@ extern const u32 gMonPalette_UrshifuRapidStrikeStyle[]; extern const u32 gMonPalette_ZarudeDada[]; extern const u32 gMonPalette_CalyrexIceRider[]; extern const u32 gMonPalette_CalyrexShadowRider[]; +#endif extern const u32 gMonPalette_Egg[]; extern const u32 gMonShinyPalette_CircledQuestionMark[]; @@ -3885,6 +4024,7 @@ extern const u32 gMonShinyPalette_Groudon[]; extern const u32 gMonShinyPalette_Rayquaza[]; extern const u32 gMonShinyPalette_Jirachi[]; extern const u32 gMonShinyPalette_Deoxys[]; +#if P_NEW_POKEMON == TRUE extern const u32 gMonShinyPalette_Turtwig[]; extern const u32 gMonShinyPalette_Grotle[]; extern const u32 gMonShinyPalette_Torterra[]; @@ -4404,6 +4544,14 @@ extern const u32 gMonShinyPalette_Regidrago[]; extern const u32 gMonShinyPalette_Glastrier[]; extern const u32 gMonShinyPalette_Spectrier[]; extern const u32 gMonShinyPalette_Calyrex[]; +//extern const u32 gMonShinyPalette_Wyrdeer[]; +extern const u32 gMonShinyPalette_Kleavor[]; +extern const u32 gMonShinyPalette_Ursaluna[]; +//extern const u32 gMonShinyPalette_Basculegion[]; +//extern const u32 gMonShinyPalette_BasculegionF[]; +//extern const u32 gMonShinyPalette_Sneasler[]; +extern const u32 gMonShinyPalette_Overqwil[]; +//extern const u32 gMonShinyPalette_Enamorus[]; extern const u32 gMonShinyPalette_VenusaurMega[]; extern const u32 gMonShinyPalette_CharizardMegaX[]; extern const u32 gMonShinyPalette_CharizardMegaY[]; @@ -4491,6 +4639,22 @@ extern const u32 gMonShinyPalette_DarumakaGalarian[]; extern const u32 gMonShinyPalette_DarmanitanGalarian[]; extern const u32 gMonShinyPalette_YamaskGalarian[]; extern const u32 gMonShinyPalette_StunfiskGalarian[]; +extern const u32 gMonShinyPalette_GrowlitheHisuian[]; +extern const u32 gMonShinyPalette_ArcanineHisuian[]; +extern const u32 gMonShinyPalette_VoltorbHisuian[]; +extern const u32 gMonShinyPalette_ElectrodeHisuian[]; +extern const u32 gMonShinyPalette_TyphlosionHisuian[]; +extern const u32 gMonShinyPalette_QwilfishHisuian[]; +extern const u32 gMonShinyPalette_SneaselHisuian[]; +//extern const u32 gMonShinyPalette_SamurottHisuian[]; +extern const u32 gMonShinyPalette_LilligantHisuian[]; +extern const u32 gMonShinyPalette_ZoruaHisuian[]; +extern const u32 gMonShinyPalette_ZoroarkHisuian[]; +extern const u32 gMonShinyPalette_BraviaryHisuian[]; +extern const u32 gMonShinyPalette_SliggooHisuian[]; +extern const u32 gMonShinyPalette_GoodraHisuian[]; +extern const u32 gMonShinyPalette_AvaluggHisuian[]; +//extern const u32 gMonShinyPalette_DecidueyeHisuian[]; extern const u32 gMonShinyPalette_PikachuCosplay[]; extern const u32 gMonShinyPalette_PikachuRockStar[]; extern const u32 gMonShinyPalette_PikachuBelle[]; @@ -4506,12 +4670,14 @@ extern const u32 gMonShinyPalette_PikachuAlolaCap[]; extern const u32 gMonShinyPalette_PikachuPartnerCap[]; extern const u32 gMonShinyPalette_PikachuWorldCap[]; extern const u32 gMonShinyPalette_PichuSpikyEared[]; +#endif extern const u32 gMonShinyPalette_CastformSunny[]; extern const u32 gMonShinyPalette_CastformRainy[]; extern const u32 gMonShinyPalette_CastformSnowy[]; extern const u32 gMonShinyPalette_DeoxysAttack[]; extern const u32 gMonShinyPalette_DeoxysDefense[]; extern const u32 gMonShinyPalette_DeoxysSpeed[]; +#if P_NEW_POKEMON == TRUE extern const u32 gMonShinyPalette_BurmySandyCloak[]; extern const u32 gMonShinyPalette_BurmyTrashCloak[]; extern const u32 gMonShinyPalette_WormadamSandyCloak[]; @@ -4524,6 +4690,8 @@ extern const u32 gMonShinyPalette_RotomWash[]; extern const u32 gMonShinyPalette_RotomFrost[]; extern const u32 gMonShinyPalette_RotomFan[]; extern const u32 gMonShinyPalette_RotomMow[]; +extern const u32 gMonShinyPalette_DialgaOrigin[]; +extern const u32 gMonShinyPalette_PalkiaOrigin[]; extern const u32 gMonShinyPalette_GiratinaOrigin[]; extern const u32 gMonShinyPalette_ShayminSky[]; extern const u32 gMonShinyPalette_ArceusFighting[]; @@ -4544,6 +4712,7 @@ extern const u32 gMonShinyPalette_ArceusDragon[]; extern const u32 gMonShinyPalette_ArceusDark[]; extern const u32 gMonShinyPalette_ArceusFairy[]; extern const u32 gMonShinyPalette_BasculinBlueStriped[]; +extern const u32 gMonShinyPalette_BasculinWhiteStriped[]; extern const u32 gMonShinyPalette_DarmanitanZenMode[]; extern const u32 gMonShinyPalette_DarmanitanZenModeGalarian[]; extern const u32 gMonShinyPalette_DeerlingSummer[]; @@ -4555,6 +4724,7 @@ extern const u32 gMonShinyPalette_SawsbuckWinter[]; extern const u32 gMonShinyPalette_TornadusTherian[]; extern const u32 gMonShinyPalette_ThundurusTherian[]; extern const u32 gMonShinyPalette_LandorusTherian[]; +//extern const u32 gMonShinyPalette_EnamorusTherian[]; extern const u32 gMonShinyPalette_KyuremWhite[]; extern const u32 gMonShinyPalette_KyuremBlack[]; extern const u32 gMonShinyPalette_KeldeoResolute[]; @@ -4661,6 +4831,7 @@ extern const u32 gMonShinyPalette_UrshifuRapidStrikeStyle[]; extern const u32 gMonShinyPalette_ZarudeDada[]; extern const u32 gMonShinyPalette_CalyrexIceRider[]; extern const u32 gMonShinyPalette_CalyrexShadowRider[]; +#endif extern const u8 gMonIcon_QuestionMark[]; extern const u8 gMonIcon_Bulbasaur[]; @@ -5049,6 +5220,7 @@ extern const u8 gMonIcon_Groudon[]; extern const u8 gMonIcon_Rayquaza[]; extern const u8 gMonIcon_Jirachi[]; extern const u8 gMonIcon_Deoxys[]; +#if P_NEW_POKEMON == TRUE extern const u8 gMonIcon_Turtwig[]; extern const u8 gMonIcon_Grotle[]; extern const u8 gMonIcon_Torterra[]; @@ -5564,7 +5736,15 @@ extern const u8 gMonIcon_Regieleki[]; extern const u8 gMonIcon_Regidrago[]; extern const u8 gMonIcon_Glastrier[]; extern const u8 gMonIcon_Spectrier[]; -//extern const u8 gMonIcon_Calyrex[]; +extern const u8 gMonIcon_Calyrex[]; +extern const u8 gMonIcon_Wyrdeer[]; +extern const u8 gMonIcon_Kleavor[]; +extern const u8 gMonIcon_Ursaluna[]; +extern const u8 gMonIcon_Basculegion[]; +extern const u8 gMonIcon_BasculegionF[]; +extern const u8 gMonIcon_Sneasler[]; +extern const u8 gMonIcon_Overqwil[]; +extern const u8 gMonIcon_Enamorus[]; extern const u8 gMonIcon_VenusaurMega[]; extern const u8 gMonIcon_CharizardMegaX[]; extern const u8 gMonIcon_CharizardMegaY[]; @@ -5652,6 +5832,22 @@ extern const u8 gMonIcon_DarumakaGalarian[]; extern const u8 gMonIcon_DarmanitanGalarian[]; extern const u8 gMonIcon_YamaskGalarian[]; extern const u8 gMonIcon_StunfiskGalarian[]; +extern const u8 gMonIcon_GrowlitheHisuian[]; +extern const u8 gMonIcon_ArcanineHisuian[]; +extern const u8 gMonIcon_VoltorbHisuian[]; +extern const u8 gMonIcon_ElectrodeHisuian[]; +extern const u8 gMonIcon_TyphlosionHisuian[]; +extern const u8 gMonIcon_QwilfishHisuian[]; +extern const u8 gMonIcon_SneaselHisuian[]; +extern const u8 gMonIcon_SamurottHisuian[]; +extern const u8 gMonIcon_LilligantHisuian[]; +extern const u8 gMonIcon_ZoruaHisuian[]; +extern const u8 gMonIcon_ZoroarkHisuian[]; +extern const u8 gMonIcon_BraviaryHisuian[]; +extern const u8 gMonIcon_SliggooHisuian[]; +extern const u8 gMonIcon_GoodraHisuian[]; +extern const u8 gMonIcon_AvaluggHisuian[]; +extern const u8 gMonIcon_DecidueyeHisuian[]; extern const u8 gMonIcon_PikachuCosplay[]; extern const u8 gMonIcon_PikachuRockStar[]; extern const u8 gMonIcon_PikachuBelle[]; @@ -5666,6 +5862,7 @@ extern const u8 gMonIcon_PikachuKalosCap[]; extern const u8 gMonIcon_PikachuAlolaCap[]; extern const u8 gMonIcon_PikachuPartnerCap[]; extern const u8 gMonIcon_PichuSpikyEared[]; +#endif extern const u8 gMonIcon_UnownB[]; extern const u8 gMonIcon_UnownC[]; extern const u8 gMonIcon_UnownD[]; @@ -5699,6 +5896,7 @@ extern const u8 gMonIcon_CastformSnowy[]; extern const u8 gMonIcon_DeoxysAttack[]; extern const u8 gMonIcon_DeoxysDefense[]; extern const u8 gMonIcon_DeoxysSpeed[]; +#if P_NEW_POKEMON == TRUE extern const u8 gMonIcon_BurmySandyCloak[]; extern const u8 gMonIcon_BurmyTrashCloak[]; extern const u8 gMonIcon_WormadamSandyCloak[]; @@ -5711,9 +5909,12 @@ extern const u8 gMonIcon_RotomWash[]; extern const u8 gMonIcon_RotomFrost[]; extern const u8 gMonIcon_RotomFan[]; extern const u8 gMonIcon_RotomMow[]; +extern const u8 gMonIcon_DialgaOrigin[]; +extern const u8 gMonIcon_PalkiaOrigin[]; extern const u8 gMonIcon_GiratinaOrigin[]; extern const u8 gMonIcon_ShayminSky[]; extern const u8 gMonIcon_BasculinBlueStriped[]; +extern const u8 gMonIcon_BasculinWhiteStriped[]; extern const u8 gMonIcon_DarmanitanZenMode[]; extern const u8 gMonIcon_DarmanitanZenModeGalarian[]; extern const u8 gMonIcon_DeerlingSummer[]; @@ -5725,6 +5926,7 @@ extern const u8 gMonIcon_SawsbuckWinter[]; extern const u8 gMonIcon_TornadusTherian[]; extern const u8 gMonIcon_ThundurusTherian[]; extern const u8 gMonIcon_LandorusTherian[]; +extern const u8 gMonIcon_EnamorusTherian[]; extern const u8 gMonIcon_KyuremWhite[]; extern const u8 gMonIcon_KyuremBlack[]; extern const u8 gMonIcon_KeldeoResolute[]; @@ -5813,8 +6015,9 @@ extern const u8 gMonIcon_ZacianCrownedSword[]; extern const u8 gMonIcon_ZamazentaCrownedShield[]; extern const u8 gMonIcon_EternatusEternamax[]; extern const u8 gMonIcon_ZarudeDada[]; -//extern const u8 gMonIcon_CalyrexIceRider[]; -//extern const u8 gMonIcon_CalyrexShadowRider[]; +extern const u8 gMonIcon_CalyrexIceRider[]; +extern const u8 gMonIcon_CalyrexShadowRider[]; +#endif extern const u8 gMonIcon_Egg[]; extern const u8 gMonFootprint_QuestionMark[]; @@ -6204,6 +6407,7 @@ extern const u8 gMonFootprint_Latios[]; extern const u8 gMonFootprint_Jirachi[]; extern const u8 gMonFootprint_Deoxys[]; extern const u8 gMonFootprint_Chimecho[]; +#if P_NEW_POKEMON == TRUE extern const u8 gMonFootprint_Turtwig[]; extern const u8 gMonFootprint_Grotle[]; extern const u8 gMonFootprint_Torterra[]; @@ -6539,6 +6743,191 @@ extern const u8 gMonFootprint_Zygarde[]; extern const u8 gMonFootprint_Diancie[]; extern const u8 gMonFootprint_Hoopa[]; extern const u8 gMonFootprint_Volcanion[]; +extern const u8 gMonFootprint_Rowlet[]; +extern const u8 gMonFootprint_Dartrix[]; +extern const u8 gMonFootprint_Decidueye[]; +extern const u8 gMonFootprint_Litten[]; +extern const u8 gMonFootprint_Torracat[]; +extern const u8 gMonFootprint_Incineroar[]; +extern const u8 gMonFootprint_Popplio[]; +extern const u8 gMonFootprint_Brionne[]; +extern const u8 gMonFootprint_Primarina[]; +extern const u8 gMonFootprint_Pikipek[]; +extern const u8 gMonFootprint_Trumbeak[]; +extern const u8 gMonFootprint_Toucannon[]; +extern const u8 gMonFootprint_Yungoos[]; +extern const u8 gMonFootprint_Gumshoos[]; +extern const u8 gMonFootprint_Grubbin[]; +extern const u8 gMonFootprint_Charjabug[]; +extern const u8 gMonFootprint_Vikavolt[]; +extern const u8 gMonFootprint_Crabrawler[]; +extern const u8 gMonFootprint_Crabominable[]; +extern const u8 gMonFootprint_Oricorio[]; +extern const u8 gMonFootprint_Cutiefly[]; +extern const u8 gMonFootprint_Ribombee[]; +extern const u8 gMonFootprint_Rockruff[]; +extern const u8 gMonFootprint_Lycanroc[]; +extern const u8 gMonFootprint_Wishiwashi[]; +extern const u8 gMonFootprint_Mareanie[]; +extern const u8 gMonFootprint_Toxapex[]; +extern const u8 gMonFootprint_Mudbray[]; +extern const u8 gMonFootprint_Mudsdale[]; +extern const u8 gMonFootprint_Dewpider[]; +extern const u8 gMonFootprint_Araquanid[]; +extern const u8 gMonFootprint_Fomantis[]; +extern const u8 gMonFootprint_Lurantis[]; +extern const u8 gMonFootprint_Morelull[]; +extern const u8 gMonFootprint_Shiinotic[]; +extern const u8 gMonFootprint_Salandit[]; +extern const u8 gMonFootprint_Salazzle[]; +extern const u8 gMonFootprint_Stufful[]; +extern const u8 gMonFootprint_Bewear[]; +extern const u8 gMonFootprint_Bounsweet[]; +extern const u8 gMonFootprint_Steenee[]; +extern const u8 gMonFootprint_Tsareena[]; +extern const u8 gMonFootprint_Comfey[]; +extern const u8 gMonFootprint_Oranguru[]; +extern const u8 gMonFootprint_Passimian[]; +extern const u8 gMonFootprint_Wimpod[]; +extern const u8 gMonFootprint_Golisopod[]; +extern const u8 gMonFootprint_Sandygast[]; +extern const u8 gMonFootprint_Palossand[]; +extern const u8 gMonFootprint_Pyukumuku[]; +extern const u8 gMonFootprint_Type_Null[]; +extern const u8 gMonFootprint_Silvally[]; +extern const u8 gMonFootprint_Minior[]; +extern const u8 gMonFootprint_Komala[]; +extern const u8 gMonFootprint_Turtonator[]; +extern const u8 gMonFootprint_Togedemaru[]; +extern const u8 gMonFootprint_Mimikyu[]; +extern const u8 gMonFootprint_Bruxish[]; +extern const u8 gMonFootprint_Drampa[]; +extern const u8 gMonFootprint_Dhelmise[]; +extern const u8 gMonFootprint_Jangmo_o[]; +extern const u8 gMonFootprint_Hakamo_o[]; +extern const u8 gMonFootprint_Kommo_o[]; +extern const u8 gMonFootprint_Tapu_Koko[]; +extern const u8 gMonFootprint_Tapu_Lele[]; +extern const u8 gMonFootprint_Tapu_Bulu[]; +extern const u8 gMonFootprint_Tapu_Fini[]; +extern const u8 gMonFootprint_Cosmog[]; +extern const u8 gMonFootprint_Cosmoem[]; +extern const u8 gMonFootprint_Solgaleo[]; +extern const u8 gMonFootprint_Lunala[]; +extern const u8 gMonFootprint_Nihilego[]; +extern const u8 gMonFootprint_Buzzwole[]; +extern const u8 gMonFootprint_Pheromosa[]; +extern const u8 gMonFootprint_Xurkitree[]; +extern const u8 gMonFootprint_Celesteela[]; +extern const u8 gMonFootprint_Kartana[]; +extern const u8 gMonFootprint_Guzzlord[]; +extern const u8 gMonFootprint_Necrozma[]; +extern const u8 gMonFootprint_Magearna[]; +extern const u8 gMonFootprint_Marshadow[]; +extern const u8 gMonFootprint_Poipole[]; +extern const u8 gMonFootprint_Naganadel[]; +extern const u8 gMonFootprint_Stakataka[]; +extern const u8 gMonFootprint_Blacephalon[]; +extern const u8 gMonFootprint_Zeraora[]; +extern const u8 gMonFootprint_Meltan[]; +extern const u8 gMonFootprint_Melmetal[]; +extern const u8 gMonFootprint_Grookey[]; +extern const u8 gMonFootprint_Thwackey[]; +extern const u8 gMonFootprint_Rillaboom[]; +extern const u8 gMonFootprint_Scorbunny[]; +extern const u8 gMonFootprint_Raboot[]; +extern const u8 gMonFootprint_Cinderace[]; +extern const u8 gMonFootprint_Sobble[]; +extern const u8 gMonFootprint_Drizzile[]; +extern const u8 gMonFootprint_Inteleon[]; +extern const u8 gMonFootprint_Skwovet[]; +extern const u8 gMonFootprint_Greedent[]; +extern const u8 gMonFootprint_Rookidee[]; +extern const u8 gMonFootprint_Corvisquire[]; +extern const u8 gMonFootprint_Corviknight[]; +extern const u8 gMonFootprint_Blipbug[]; +extern const u8 gMonFootprint_Dottler[]; +extern const u8 gMonFootprint_Orbeetle[]; +extern const u8 gMonFootprint_Nickit[]; +extern const u8 gMonFootprint_Thievul[]; +extern const u8 gMonFootprint_Gossifleur[]; +extern const u8 gMonFootprint_Eldegoss[]; +extern const u8 gMonFootprint_Wooloo[]; +extern const u8 gMonFootprint_Dubwool[]; +extern const u8 gMonFootprint_Chewtle[]; +extern const u8 gMonFootprint_Drednaw[]; +extern const u8 gMonFootprint_Yamper[]; +extern const u8 gMonFootprint_Boltund[]; +extern const u8 gMonFootprint_Rolycoly[]; +extern const u8 gMonFootprint_Carkol[]; +extern const u8 gMonFootprint_Coalossal[]; +extern const u8 gMonFootprint_Applin[]; +extern const u8 gMonFootprint_Flapple[]; +extern const u8 gMonFootprint_Appletun[]; +extern const u8 gMonFootprint_Silicobra[]; +extern const u8 gMonFootprint_Sandaconda[]; +extern const u8 gMonFootprint_Cramorant[]; +extern const u8 gMonFootprint_Arrokuda[]; +extern const u8 gMonFootprint_Barraskewda[]; +extern const u8 gMonFootprint_Toxel[]; +extern const u8 gMonFootprint_Toxtricity[]; +extern const u8 gMonFootprint_Sizzlipede[]; +extern const u8 gMonFootprint_Centiskorch[]; +extern const u8 gMonFootprint_Clobbopus[]; +extern const u8 gMonFootprint_Grapploct[]; +extern const u8 gMonFootprint_Sinistea[]; +extern const u8 gMonFootprint_Polteageist[]; +extern const u8 gMonFootprint_Hatenna[]; +extern const u8 gMonFootprint_Hattrem[]; +extern const u8 gMonFootprint_Hatterene[]; +extern const u8 gMonFootprint_Impidimp[]; +extern const u8 gMonFootprint_Morgrem[]; +extern const u8 gMonFootprint_Grimmsnarl[]; +extern const u8 gMonFootprint_Obstagoon[]; +extern const u8 gMonFootprint_Perrserker[]; +extern const u8 gMonFootprint_Cursola[]; +extern const u8 gMonFootprint_Sirfetchd[]; +extern const u8 gMonFootprint_Mr_Rime[]; +extern const u8 gMonFootprint_Runerigus[]; +extern const u8 gMonFootprint_Milcery[]; +extern const u8 gMonFootprint_Alcremie[]; +extern const u8 gMonFootprint_Falinks[]; +extern const u8 gMonFootprint_Pincurchin[]; +extern const u8 gMonFootprint_Snom[]; +extern const u8 gMonFootprint_Frosmoth[]; +extern const u8 gMonFootprint_Stonjourner[]; +extern const u8 gMonFootprint_Eiscue[]; +extern const u8 gMonFootprint_Indeedee[]; +extern const u8 gMonFootprint_Morpeko[]; +extern const u8 gMonFootprint_Cufant[]; +extern const u8 gMonFootprint_Copperajah[]; +extern const u8 gMonFootprint_Dracozolt[]; +extern const u8 gMonFootprint_Arctozolt[]; +extern const u8 gMonFootprint_Dracovish[]; +extern const u8 gMonFootprint_Arctovish[]; +extern const u8 gMonFootprint_Duraludon[]; +extern const u8 gMonFootprint_Dreepy[]; +extern const u8 gMonFootprint_Drakloak[]; +extern const u8 gMonFootprint_Dragapult[]; +extern const u8 gMonFootprint_Zacian[]; +extern const u8 gMonFootprint_Zamazenta[]; +extern const u8 gMonFootprint_Eternatus[]; +extern const u8 gMonFootprint_Kubfu[]; +extern const u8 gMonFootprint_Urshifu[]; +extern const u8 gMonFootprint_Zarude[]; +extern const u8 gMonFootprint_Regieleki[]; +extern const u8 gMonFootprint_Regidrago[]; +extern const u8 gMonFootprint_Glastrier[]; +extern const u8 gMonFootprint_Spectrier[]; +extern const u8 gMonFootprint_Calyrex[]; +//extern const u8 gMonFootprint_Wyrdeer[]; +//extern const u8 gMonFootprint_Kleavor[]; +//extern const u8 gMonFootprint_Ursaluna[]; +//extern const u8 gMonFootprint_Basculegion[]; +//extern const u8 gMonFootprint_Sneasler[]; +//extern const u8 gMonFootprint_Overqwil[]; +//extern const u8 gMonFootprint_Enamorus[]; +#endif // trainer sprites extern const u32 gTrainerFrontPic_Hiker[]; @@ -6880,12 +7269,12 @@ extern const u16 gBerryFixWindow_Pal[]; extern const u32 gBattleTextboxTiles[]; extern const u32 gBattleTextboxTilemap[]; extern const u32 gBattleTextboxPalette[]; -extern const u32 gUnknown_08D778F0[]; extern const u32 gVsLettersGfx[]; -extern const u32 gUnknown_08D77AE4[]; -extern const u32 gUnknown_08D779D8[]; -extern const u32 gUnknown_08D857A8[]; -extern const u32 gUnknown_08D85A1C[]; +extern const u32 gBattleVSFrame_Gfx[]; +extern const u32 gBattleVSFrame_Pal[]; +extern const u32 gBattleVSFrame_Tilemap[]; +extern const u32 gMultiBattleIntroBg_Opponent_Tilemap[]; +extern const u32 gMultiBattleIntroBg_Player_Tilemap[]; // battle terrains extern const u32 gBattleTerrainTiles_TallGrass[]; @@ -7034,46 +7423,67 @@ extern const u32 gRaySceneChasesAway_Bg_Pal[]; extern const u32 gRaySceneChasesAway_Light_Gfx[]; extern const u32 gRaySceneChasesAway_Ring_Gfx[]; -// Pokeballs -extern const u32 gItemIcon_MasterBall[]; -extern const u32 gItemIconPalette_MasterBall[]; -extern const u32 gItemIcon_UltraBall[]; -extern const u32 gItemIconPalette_UltraBall[]; -extern const u32 gItemIcon_GreatBall[]; -extern const u32 gItemIconPalette_GreatBall[]; +// Poké Balls extern const u32 gItemIcon_PokeBall[]; extern const u32 gItemIconPalette_PokeBall[]; -extern const u32 gItemIcon_SafariBall[]; -extern const u32 gItemIconPalette_SafariBall[]; +extern const u32 gItemIcon_GreatBall[]; +extern const u32 gItemIconPalette_GreatBall[]; +extern const u32 gItemIcon_UltraBall[]; +extern const u32 gItemIconPalette_UltraBall[]; +extern const u32 gItemIcon_MasterBall[]; +extern const u32 gItemIconPalette_MasterBall[]; +extern const u32 gItemIcon_PremierBall[]; +extern const u32 gItemIcon_HealBall[]; +extern const u32 gItemIconPalette_HealBall[]; extern const u32 gItemIcon_NetBall[]; extern const u32 gItemIconPalette_NetBall[]; -extern const u32 gItemIcon_DiveBall[]; -extern const u32 gItemIconPalette_DiveBall[]; extern const u32 gItemIcon_NestBall[]; extern const u32 gItemIconPalette_NestBall[]; +extern const u32 gItemIcon_DiveBall[]; +extern const u32 gItemIconPalette_DiveBall[]; +extern const u32 gItemIcon_DuskBall[]; +extern const u32 gItemIconPalette_DuskBall[]; +extern const u32 gItemIcon_TimerBall[]; +extern const u32 gItemIcon_QuickBall[]; +extern const u32 gItemIconPalette_QuickBall[]; extern const u32 gItemIcon_RepeatBall[]; extern const u32 gItemIconPalette_RepeatBall[]; -extern const u32 gItemIcon_TimerBall[]; extern const u32 gItemIcon_LuxuryBall[]; extern const u32 gItemIconPalette_LuxuryBall[]; -extern const u32 gItemIcon_PremierBall[]; +extern const u32 gItemIcon_LevelBall[]; +extern const u32 gItemIconPalette_LevelBall[]; +extern const u32 gItemIcon_LureBall[]; +extern const u32 gItemIconPalette_LureBall[]; +extern const u32 gItemIcon_MoonBall[]; +extern const u32 gItemIconPalette_MoonBall[]; +extern const u32 gItemIcon_FriendBall[]; +extern const u32 gItemIconPalette_FriendBall[]; +extern const u32 gItemIcon_LoveBall[]; +extern const u32 gItemIconPalette_LoveBall[]; +extern const u32 gItemIcon_FastBall[]; +extern const u32 gItemIconPalette_FastBall[]; +extern const u32 gItemIcon_HeavyBall[]; +extern const u32 gItemIconPalette_HeavyBall[]; +extern const u32 gItemIcon_DreamBall[]; +extern const u32 gItemIconPalette_DreamBall[]; +extern const u32 gItemIcon_SafariBall[]; +extern const u32 gItemIconPalette_SafariBall[]; +extern const u32 gItemIcon_SportBall[]; +extern const u32 gItemIconPalette_SportBall[]; +extern const u32 gItemIcon_ParkBall[]; +extern const u32 gItemIconPalette_ParkBall[]; +extern const u32 gItemIcon_BeastBall[]; +extern const u32 gItemIconPalette_BeastBall[]; +extern const u32 gItemIcon_CherishBall[]; +extern const u32 gItemIconPalette_CherishBall[]; // Medicine extern const u32 gItemIcon_Potion[]; extern const u32 gItemIconPalette_Potion[]; -extern const u32 gItemIcon_Antidote[]; -extern const u32 gItemIconPalette_Antidote[]; -extern const u32 gItemIcon_StatusHeal[]; -extern const u32 gItemIconPalette_BurnHeal[]; -extern const u32 gItemIconPalette_IceHeal[]; -extern const u32 gItemIconPalette_Awakening[]; -extern const u32 gItemIconPalette_ParalyzeHeal[]; -extern const u32 gItemIcon_LargePotion[]; -extern const u32 gItemIconPalette_FullRestore[]; -extern const u32 gItemIconPalette_MaxPotion[]; -extern const u32 gItemIconPalette_HyperPotion[]; extern const u32 gItemIconPalette_SuperPotion[]; -extern const u32 gItemIcon_FullHeal[]; -extern const u32 gItemIconPalette_FullHeal[]; +extern const u32 gItemIconPalette_HyperPotion[]; +extern const u32 gItemIcon_LargePotion[]; +extern const u32 gItemIconPalette_MaxPotion[]; +extern const u32 gItemIconPalette_FullRestore[]; extern const u32 gItemIcon_Revive[]; extern const u32 gItemIconPalette_Revive[]; extern const u32 gItemIcon_MaxRevive[]; @@ -7092,24 +7502,157 @@ extern const u32 gItemIconPalette_EnergyRoot[]; extern const u32 gItemIconPalette_HealPowder[]; extern const u32 gItemIcon_RevivalHerb[]; extern const u32 gItemIconPalette_RevivalHerb[]; +extern const u32 gItemIcon_Antidote[]; +extern const u32 gItemIconPalette_Antidote[]; +extern const u32 gItemIcon_StatusHeal[]; +extern const u32 gItemIconPalette_ParalyzeHeal[]; +extern const u32 gItemIconPalette_BurnHeal[]; +extern const u32 gItemIconPalette_IceHeal[]; +extern const u32 gItemIconPalette_Awakening[]; +extern const u32 gItemIcon_FullHeal[]; +extern const u32 gItemIconPalette_FullHeal[]; extern const u32 gItemIcon_Ether[]; extern const u32 gItemIconPalette_Ether[]; extern const u32 gItemIconPalette_MaxEther[]; extern const u32 gItemIconPalette_Elixir[]; extern const u32 gItemIconPalette_MaxElixir[]; -extern const u32 gItemIcon_LavaCookie[]; -extern const u32 gItemIconPalette_LavaCookieAndLetter[]; -extern const u32 gItemIcon_Flute[]; -extern const u32 gItemIconPalette_BlueFlute[]; -extern const u32 gItemIconPalette_YellowFlute[]; -extern const u32 gItemIconPalette_RedFlute[]; -extern const u32 gItemIconPalette_BlackFlute[]; -extern const u32 gItemIconPalette_WhiteFlute[]; extern const u32 gItemIcon_BerryJuice[]; extern const u32 gItemIconPalette_BerryJuice[]; extern const u32 gItemIcon_SacredAsh[]; extern const u32 gItemIconPalette_SacredAsh[]; -// Collectibles +extern const u32 gItemIcon_SweetHeart[]; +extern const u32 gItemIconPalette_SweetHeart[]; +extern const u32 gItemIcon_MaxHoney[]; +extern const u32 gItemIconPalette_MaxHoney[]; +// Regional Specialties +extern const u32 gItemIcon_PewterCrunchies[]; +extern const u32 gItemIconPalette_PewterCrunchies[]; +extern const u32 gItemIcon_RageCandyBar[]; +extern const u32 gItemIconPalette_RageCandyBar[]; +extern const u32 gItemIcon_LavaCookie[]; +extern const u32 gItemIconPalette_LavaCookieAndLetter[]; +extern const u32 gItemIcon_OldGateau[]; +extern const u32 gItemIconPalette_OldGateau[]; +extern const u32 gItemIcon_Casteliacone[]; +extern const u32 gItemIconPalette_Casteliacone[]; +extern const u32 gItemIcon_LumioseGalette[]; +extern const u32 gItemIconPalette_LumioseGalette[]; +extern const u32 gItemIcon_ShalourSable[]; +extern const u32 gItemIconPalette_ShalourSable[]; +extern const u32 gItemIcon_BigMalasada[]; +extern const u32 gItemIconPalette_BigMalasada[]; +// Vitamins +extern const u32 gItemIcon_HPUp[]; +extern const u32 gItemIconPalette_HPUp[]; +extern const u32 gItemIcon_Vitamin[]; +extern const u32 gItemIconPalette_Protein[]; +extern const u32 gItemIconPalette_Iron[]; +extern const u32 gItemIconPalette_Calcium[]; +extern const u32 gItemIconPalette_Zinc[]; +extern const u32 gItemIconPalette_Carbos[]; +extern const u32 gItemIcon_PPUp[]; +extern const u32 gItemIconPalette_PPUp[]; +extern const u32 gItemIcon_PPMax[]; +extern const u32 gItemIconPalette_PPMax[]; +// EV Feathers +extern const u32 gItemIcon_HealthFeather[]; +extern const u32 gItemIconPalette_HealthFeather[]; +extern const u32 gItemIcon_MuscleFeather[]; +extern const u32 gItemIconPalette_MuscleFeather[]; +extern const u32 gItemIcon_ResistFeather[]; +extern const u32 gItemIconPalette_ResistFeather[]; +extern const u32 gItemIcon_GeniusFeather[]; +extern const u32 gItemIconPalette_GeniusFeather[]; +extern const u32 gItemIcon_CleverFeather[]; +extern const u32 gItemIconPalette_CleverFeather[]; +extern const u32 gItemIcon_SwiftFeather[]; +extern const u32 gItemIconPalette_SwiftFeather[]; +// Ability Modifiers +extern const u32 gItemIcon_AbilityCapsule[]; +extern const u32 gItemIconPalette_AbilityCapsule[]; +extern const u32 gItemIcon_AbilityPatch[]; +extern const u32 gItemIconPalette_AbilityPatch[]; +// Mints +extern const u32 gItemIcon_Mint[]; +extern const u32 gItemIconPalette_RedMint[]; +extern const u32 gItemIconPalette_BlueMint[]; +extern const u32 gItemIconPalette_LightBlueMint[]; +extern const u32 gItemIconPalette_PinkMint[]; +extern const u32 gItemIconPalette_GreenMint[]; +extern const u32 gItemIconPalette_YellowMint[]; +// Candy +extern const u32 gItemIcon_RareCandy[]; +extern const u32 gItemIconPalette_RareCandy[]; +extern const u32 gItemIcon_ExpCandyXS[]; +extern const u32 gItemIcon_ExpCandyS[]; +extern const u32 gItemIcon_ExpCandyM[]; +extern const u32 gItemIcon_ExpCandyL[]; +extern const u32 gItemIcon_ExpCandyXL[]; +extern const u32 gItemIconPalette_ExpCandies[]; +extern const u32 gItemIcon_DynamaxCandy[]; +extern const u32 gItemIconPalette_DynamaxCandy[]; +// Medicinal Flutes +extern const u32 gItemIcon_Flute[]; +extern const u32 gItemIconPalette_BlueFlute[]; +extern const u32 gItemIconPalette_YellowFlute[]; +extern const u32 gItemIconPalette_RedFlute[]; +// Encounter-modifying Flutes +extern const u32 gItemIconPalette_BlackFlute[]; +extern const u32 gItemIconPalette_WhiteFlute[]; +// Encounter Modifiers +extern const u32 gItemIcon_Repel[]; +extern const u32 gItemIconPalette_Repel[]; +extern const u32 gItemIconPalette_SuperRepel[]; +extern const u32 gItemIconPalette_MaxRepel[]; +extern const u32 gItemIcon_Lure[]; +extern const u32 gItemIconPalette_Lure[]; +extern const u32 gItemIconPalette_SuperLure[]; +extern const u32 gItemIconPalette_MaxLure[]; +extern const u32 gItemIcon_EscapeRope[]; +extern const u32 gItemIconPalette_EscapeRope[]; +// X Items +extern const u32 gItemIcon_BattleStatItem[]; +extern const u32 gItemIconPalette_XAttack[]; +extern const u32 gItemIconPalette_XDefend[]; +extern const u32 gItemIconPalette_XSpecial[]; +extern const u32 gItemIcon_XSpecialDefense[]; +extern const u32 gItemIconPalette_XSpecialDefense[]; +extern const u32 gItemIconPalette_XSpeed[]; +extern const u32 gItemIconPalette_XAccuracy[]; +extern const u32 gItemIconPalette_DireHit[]; +extern const u32 gItemIconPalette_GuardSpec[]; +// Escape Items +extern const u32 gItemIcon_PokeDoll[]; +extern const u32 gItemIconPalette_PokeDoll[]; +extern const u32 gItemIcon_FluffyTail[]; +extern const u32 gItemIconPalette_FluffyTail[]; +extern const u32 gItemIcon_PokeToy[]; +extern const u32 gItemIconPalette_PokeToy[]; +extern const u32 gItemIcon_MaxMushrooms[]; +extern const u32 gItemIconPalette_MaxMushrooms[]; +// Treasures +extern const u32 gItemIcon_BottleCap[]; +extern const u32 gItemIconPalette_BottleCap[]; +extern const u32 gItemIconPalette_GoldBottleCap[]; +extern const u32 gItemIcon_Nugget[]; +extern const u32 gItemIconPalette_Nugget[]; +extern const u32 gItemIcon_BigNugget[]; +extern const u32 gItemIconPalette_BigNugget[]; +extern const u32 gItemIcon_TinyMushroom[]; +extern const u32 gItemIconPalette_Mushroom[]; +extern const u32 gItemIcon_BigMushroom[]; +extern const u32 gItemIcon_BalmMushroom[]; +extern const u32 gItemIconPalette_BalmMushroom[]; +extern const u32 gItemIcon_Pearl[]; +extern const u32 gItemIconPalette_Pearl[]; +extern const u32 gItemIcon_BigPearl[]; +extern const u32 gItemIcon_PearlString[]; +extern const u32 gItemIconPalette_PearlString[]; +extern const u32 gItemIcon_Stardust[]; +extern const u32 gItemIconPalette_Star[]; +extern const u32 gItemIcon_StarPiece[]; +extern const u32 gItemIcon_CometShard[]; +extern const u32 gItemIconPalette_CometShard[]; extern const u32 gItemIconPalette_ShoalSalt[]; extern const u32 gItemIcon_ShoalShell[]; extern const u32 gItemIconPalette_Shell[]; @@ -7118,69 +7661,90 @@ extern const u32 gItemIconPalette_RedShard[]; extern const u32 gItemIconPalette_BlueShard[]; extern const u32 gItemIconPalette_YellowShard[]; extern const u32 gItemIconPalette_GreenShard[]; -// Vitamins -extern const u32 gItemIcon_HPUp[]; -extern const u32 gItemIconPalette_HPUp[]; -extern const u32 gItemIcon_Vitamin[]; -extern const u32 gItemIconPalette_Protein[]; -extern const u32 gItemIconPalette_Iron[]; -extern const u32 gItemIconPalette_Carbos[]; -extern const u32 gItemIconPalette_Calcium[]; -extern const u32 gItemIcon_RareCandy[]; -extern const u32 gItemIconPalette_RareCandy[]; -extern const u32 gItemIcon_PPUp[]; -extern const u32 gItemIconPalette_PPUp[]; -extern const u32 gItemIconPalette_Zinc[]; -extern const u32 gItemIcon_PPMax[]; -extern const u32 gItemIconPalette_PPMax[]; -// Battle items -extern const u32 gItemIcon_BattleStatItem[]; -extern const u32 gItemIconPalette_GuardSpec[]; -extern const u32 gItemIconPalette_DireHit[]; -extern const u32 gItemIconPalette_XAttack[]; -extern const u32 gItemIconPalette_XDefend[]; -extern const u32 gItemIconPalette_XSpeed[]; -extern const u32 gItemIconPalette_XAccuracy[]; -extern const u32 gItemIconPalette_XSpecial[]; -extern const u32 gItemIcon_PokeDoll[]; -extern const u32 gItemIconPalette_PokeDoll[]; -extern const u32 gItemIcon_FluffyTail[]; -extern const u32 gItemIconPalette_FluffyTail[]; -// Field items -extern const u32 gItemIcon_Repel[]; -extern const u32 gItemIconPalette_SuperRepel[]; -extern const u32 gItemIconPalette_MaxRepel[]; -extern const u32 gItemIcon_EscapeRope[]; -extern const u32 gItemIconPalette_EscapeRope[]; -extern const u32 gItemIcon_Repel[]; -extern const u32 gItemIconPalette_Repel[]; -// Evolution stones -extern const u32 gItemIcon_SunStone[]; -extern const u32 gItemIconPalette_SunStone[]; -extern const u32 gItemIcon_MoonStone[]; -extern const u32 gItemIconPalette_MoonStone[]; -extern const u32 gItemIcon_FireStone[]; -extern const u32 gItemIconPalette_FireStone[]; -extern const u32 gItemIcon_ThunderStone[]; -extern const u32 gItemIconPalette_ThunderStone[]; -extern const u32 gItemIcon_WaterStone[]; -extern const u32 gItemIconPalette_WaterStone[]; -extern const u32 gItemIcon_LeafStone[]; -extern const u32 gItemIconPalette_LeafStone[]; -// Valuables -extern const u32 gItemIcon_TinyMushroom[]; -extern const u32 gItemIconPalette_Mushroom[]; -extern const u32 gItemIcon_BigMushroom[]; -extern const u32 gItemIcon_Pearl[]; -extern const u32 gItemIconPalette_Pearl[]; -extern const u32 gItemIcon_BigPearl[]; -extern const u32 gItemIcon_Stardust[]; -extern const u32 gItemIconPalette_Star[]; -extern const u32 gItemIcon_StarPiece[]; -extern const u32 gItemIcon_Nugget[]; -extern const u32 gItemIconPalette_Nugget[]; extern const u32 gItemIcon_HeartScale[]; extern const u32 gItemIconPalette_HeartScale[]; +extern const u32 gItemIcon_Honey[]; +extern const u32 gItemIconPalette_Honey[]; +extern const u32 gItemIcon_RareBone[]; +extern const u32 gItemIconPalette_RareBone[]; +extern const u32 gItemIcon_OddKeystone[]; +extern const u32 gItemIconPalette_OddKeystone[]; +extern const u32 gItemIcon_PrettyFeather[]; +extern const u32 gItemIconPalette_PrettyFeather[]; +extern const u32 gItemIcon_RelicCoin[]; +extern const u32 gItemIconPalette_RelicCopper[]; +extern const u32 gItemIconPalette_RelicSilver[]; +extern const u32 gItemIconPalette_RelicGold[]; +extern const u32 gItemIcon_RelicVase[]; +extern const u32 gItemIconPalette_Relics[]; +extern const u32 gItemIcon_RelicBand[]; +extern const u32 gItemIcon_RelicStatue[]; +extern const u32 gItemIcon_RelicCrown[]; +extern const u32 gItemIcon_StrangeSouvenir[]; +extern const u32 gItemIconPalette_StrangeSouvenir[]; +// Fossils +extern const u32 gItemIcon_HelixFossil[]; +extern const u32 gItemIconPalette_KantoFossil[]; +extern const u32 gItemIcon_DomeFossil[]; +extern const u32 gItemIcon_OldAmber[]; +extern const u32 gItemIconPalette_OldAmber[]; +extern const u32 gItemIcon_RootFossil[]; +extern const u32 gItemIconPalette_HoennFossil[]; +extern const u32 gItemIcon_ClawFossil[]; +extern const u32 gItemIcon_ArmorFossil[]; +extern const u32 gItemIconPalette_ArmorFossil[]; +extern const u32 gItemIcon_SkullFossil[]; +extern const u32 gItemIconPalette_SkullFossil[]; +extern const u32 gItemIcon_CoverFossil[]; +extern const u32 gItemIconPalette_CoverFossil[]; +extern const u32 gItemIcon_PlumeFossil[]; +extern const u32 gItemIconPalette_PlumeFossil[]; +extern const u32 gItemIcon_JawFossil[]; +extern const u32 gItemIconPalette_JawFossil[]; +extern const u32 gItemIcon_SailFossil[]; +extern const u32 gItemIconPalette_SailFossil[]; +extern const u32 gItemIcon_FossilizedBird[]; +extern const u32 gItemIconPalette_FossilizedBird[]; +extern const u32 gItemIcon_FossilizedFish[]; +extern const u32 gItemIconPalette_FossilizedFish[]; +extern const u32 gItemIcon_FossilizedDrake[]; +extern const u32 gItemIconPalette_FossilizedDrake[]; +extern const u32 gItemIcon_FossilizedDino[]; +extern const u32 gItemIconPalette_FossilizedDino[]; +// Mulch +extern const u32 gItemIcon_Mulch[]; +extern const u32 gItemIconPalette_GrowthMulch[]; +extern const u32 gItemIconPalette_DampMulch[]; +extern const u32 gItemIcon_StableMulch[]; +extern const u32 gItemIconPalette_StableMulch[]; +extern const u32 gItemIconPalette_GooeyMulch[]; +extern const u32 gItemIconPalette_RichMulch[]; +extern const u32 gItemIconPalette_SurpriseMulch[]; +extern const u32 gItemIconPalette_BoostMulch[]; +extern const u32 gItemIconPalette_AmazeMulch[]; +// Apricorns +extern const u32 gItemIcon_RedApricorn[]; +extern const u32 gItemIconPalette_RedApricorn[]; +extern const u32 gItemIcon_BlueApricorn[]; +extern const u32 gItemIconPalette_BlueApricorn[]; +extern const u32 gItemIcon_YellowApricorn[]; +extern const u32 gItemIconPalette_YellowApricorn[]; +extern const u32 gItemIcon_GreenApricorn[]; +extern const u32 gItemIconPalette_GreenApricorn[]; +extern const u32 gItemIcon_PinkApricorn[]; +extern const u32 gItemIconPalette_PinkApricorn[]; +extern const u32 gItemIcon_WhiteApricorn[]; +extern const u32 gItemIconPalette_WhiteApricorn[]; +extern const u32 gItemIcon_BlackApricorn[]; +extern const u32 gItemIconPalette_BlackApricorn[]; +extern const u32 gItemIcon_WishingPiece[]; +extern const u32 gItemIconPalette_WishingPiece[]; +extern const u32 gItemIcon_GalaricaTwig[]; +extern const u32 gItemIconPalette_GalaricaItem[]; +extern const u32 gItemIcon_ArmoriteOre[]; +extern const u32 gItemIconPalette_ArmoriteOre[]; +extern const u32 gItemIcon_DyniteOre[]; +extern const u32 gItemIconPalette_DyniteOre[]; // Mail extern const u32 gItemIcon_OrangeMail[]; extern const u32 gItemIconPalette_OrangeMail[]; @@ -7206,6 +7770,621 @@ extern const u32 gItemIcon_FabMail[]; extern const u32 gItemIconPalette_FabMail[]; extern const u32 gItemIcon_RetroMail[]; extern const u32 gItemIconPalette_RetroMail[]; +// Evolution Items +extern const u32 gItemIcon_FireStone[]; +extern const u32 gItemIconPalette_FireStone[]; +extern const u32 gItemIcon_WaterStone[]; +extern const u32 gItemIconPalette_WaterStone[]; +extern const u32 gItemIcon_ThunderStone[]; +extern const u32 gItemIconPalette_ThunderStone[]; +extern const u32 gItemIcon_LeafStone[]; +extern const u32 gItemIconPalette_LeafStone[]; +extern const u32 gItemIcon_IceStone[]; +extern const u32 gItemIconPalette_IceStone[]; +extern const u32 gItemIcon_SunStone[]; +extern const u32 gItemIconPalette_SunStone[]; +extern const u32 gItemIcon_MoonStone[]; +extern const u32 gItemIconPalette_MoonStone[]; +extern const u32 gItemIcon_ShinyStone[]; +extern const u32 gItemIconPalette_ShinyStone[]; +extern const u32 gItemIcon_DuskStone[]; +extern const u32 gItemIconPalette_DuskStone[]; +extern const u32 gItemIcon_DawnStone[]; +extern const u32 gItemIconPalette_DawnStone[]; +extern const u32 gItemIcon_SweetApple[]; +extern const u32 gItemIconPalette_SweetApple[]; +extern const u32 gItemIcon_TartApple[]; +extern const u32 gItemIconPalette_TartApple[]; +extern const u32 gItemIcon_CrackedPot[]; +extern const u32 gItemIcon_ChippedPot[]; +extern const u32 gItemIconPalette_Pot[]; +extern const u32 gItemIcon_GalaricaCuff[]; +extern const u32 gItemIcon_GalaricaWreath[]; +extern const u32 gItemIcon_DragonScale[]; +extern const u32 gItemIconPalette_DragonScale[]; +extern const u32 gItemIcon_Upgrade[]; +extern const u32 gItemIconPalette_Upgrade[]; +extern const u32 gItemIcon_Protector[]; +extern const u32 gItemIconPalette_Protector[]; +extern const u32 gItemIcon_Electirizer[]; +extern const u32 gItemIconPalette_Electirizer[]; +extern const u32 gItemIcon_Magmarizer[]; +extern const u32 gItemIconPalette_Magmarizer[]; +extern const u32 gItemIcon_DubiousDisc[]; +extern const u32 gItemIconPalette_DubiousDisc[]; +extern const u32 gItemIcon_ReaperCloth[]; +extern const u32 gItemIconPalette_ReaperCloth[]; +extern const u32 gItemIcon_PrismScale[]; +extern const u32 gItemIconPalette_PrismScale[]; +extern const u32 gItemIcon_WhippedDream[]; +extern const u32 gItemIconPalette_WhippedDream[]; +extern const u32 gItemIcon_Sachet[]; +extern const u32 gItemIconPalette_Sachet[]; +extern const u32 gItemIcon_OvalStone[]; +extern const u32 gItemIconPalette_OvalStone[]; +extern const u32 gItemIcon_StrawberrySweet[]; +extern const u32 gItemIconPalette_StrawberrySweet[]; +extern const u32 gItemIcon_LoveSweet[]; +extern const u32 gItemIconPalette_LoveSweet[]; +extern const u32 gItemIcon_BerrySweet[]; +extern const u32 gItemIconPalette_BerrySweet[]; +extern const u32 gItemIcon_CloverSweet[]; +extern const u32 gItemIconPalette_CloverSweet[]; +extern const u32 gItemIcon_FlowerSweet[]; +extern const u32 gItemIconPalette_FlowerSweet[]; +extern const u32 gItemIcon_StarSweet[]; +extern const u32 gItemIconPalette_StarSweet[]; +extern const u32 gItemIcon_RibbonSweet[]; +extern const u32 gItemIconPalette_RibbonSweet[]; +extern const u32 gItemIcon_Everstone[]; +extern const u32 gItemIconPalette_Everstone[]; +// Nectars +extern const u32 gItemIcon_RedNectar[]; +extern const u32 gItemIconPalette_RedNectar[]; +extern const u32 gItemIcon_YellowNectar[]; +extern const u32 gItemIconPalette_YellowNectar[]; +extern const u32 gItemIcon_PinkNectar[]; +extern const u32 gItemIconPalette_PinkNectar[]; +extern const u32 gItemIcon_PurpleNectar[]; +extern const u32 gItemIconPalette_PurpleNectar[]; +// Plates +extern const u32 gItemIcon_FlamePlate[]; +extern const u32 gItemIconPalette_FlamePlate[]; +extern const u32 gItemIcon_SplashPlate[]; +extern const u32 gItemIconPalette_SplashPlate[]; +extern const u32 gItemIcon_ZapPlate[]; +extern const u32 gItemIconPalette_ZapPlate[]; +extern const u32 gItemIcon_MeadowPlate[]; +extern const u32 gItemIconPalette_MeadowPlate[]; +extern const u32 gItemIcon_IciclePlate[]; +extern const u32 gItemIconPalette_IciclePlate[]; +extern const u32 gItemIcon_FistPlate[]; +extern const u32 gItemIconPalette_FistPlate[]; +extern const u32 gItemIcon_ToxicPlate[]; +extern const u32 gItemIconPalette_ToxicPlate[]; +extern const u32 gItemIcon_EarthPlate[]; +extern const u32 gItemIconPalette_EarthPlate[]; +extern const u32 gItemIcon_SkyPlate[]; +extern const u32 gItemIconPalette_SkyPlate[]; +extern const u32 gItemIcon_MindPlate[]; +extern const u32 gItemIconPalette_MindPlate[]; +extern const u32 gItemIcon_InsectPlate[]; +extern const u32 gItemIconPalette_InsectPlate[]; +extern const u32 gItemIcon_StonePlate[]; +extern const u32 gItemIconPalette_StonePlate[]; +extern const u32 gItemIcon_SpookyPlate[]; +extern const u32 gItemIconPalette_SpookyPlate[]; +extern const u32 gItemIcon_DracoPlate[]; +extern const u32 gItemIconPalette_DracoPlate[]; +extern const u32 gItemIcon_DreadPlate[]; +extern const u32 gItemIconPalette_DreadPlate[]; +extern const u32 gItemIcon_IronPlate[]; +extern const u32 gItemIconPalette_IronPlate[]; +extern const u32 gItemIcon_PixiePlate[]; +extern const u32 gItemIconPalette_PixiePlate[]; +// Drives +extern const u32 gItemIcon_DouseDrive[]; +extern const u32 gItemIconPalette_DouseDrive[]; +extern const u32 gItemIcon_ShockDrive[]; +extern const u32 gItemIconPalette_ShockDrive[]; +extern const u32 gItemIcon_BurnDrive[]; +extern const u32 gItemIconPalette_BurnDrive[]; +extern const u32 gItemIcon_ChillDrive[]; +extern const u32 gItemIconPalette_ChillDrive[]; +// Memories +extern const u32 gItemIcon_FireMemory[]; +extern const u32 gItemIconPalette_FireMemory[]; +extern const u32 gItemIcon_WaterMemory[]; +extern const u32 gItemIconPalette_WaterMemory[]; +extern const u32 gItemIcon_ElectricMemory[]; +extern const u32 gItemIconPalette_ElectricMemory[]; +extern const u32 gItemIcon_GrassMemory[]; +extern const u32 gItemIconPalette_GrassMemory[]; +extern const u32 gItemIcon_IceMemory[]; +extern const u32 gItemIconPalette_IceMemory[]; +extern const u32 gItemIcon_FightingMemory[]; +extern const u32 gItemIconPalette_FightingMemory[]; +extern const u32 gItemIcon_PoisonMemory[]; +extern const u32 gItemIconPalette_PoisonMemory[]; +extern const u32 gItemIcon_GroundMemory[]; +extern const u32 gItemIconPalette_GroundMemory[]; +extern const u32 gItemIcon_FlyingMemory[]; +extern const u32 gItemIconPalette_FlyingMemory[]; +extern const u32 gItemIcon_PsychicMemory[]; +extern const u32 gItemIconPalette_PsychicMemory[]; +extern const u32 gItemIcon_BugMemory[]; +extern const u32 gItemIconPalette_BugMemory[]; +extern const u32 gItemIcon_RockMemory[]; +extern const u32 gItemIconPalette_RockMemory[]; +extern const u32 gItemIcon_GhostMemory[]; +extern const u32 gItemIconPalette_GhostMemory[]; +extern const u32 gItemIcon_DragonMemory[]; +extern const u32 gItemIconPalette_DragonMemory[]; +extern const u32 gItemIcon_DarkMemory[]; +extern const u32 gItemIconPalette_DarkMemory[]; +extern const u32 gItemIcon_SteelMemory[]; +extern const u32 gItemIconPalette_SteelMemory[]; +extern const u32 gItemIcon_FairyMemory[]; +extern const u32 gItemIconPalette_FairyMemory[]; +extern const u32 gItemIcon_RustedSword[]; +extern const u32 gItemIcon_RustedShield[]; +extern const u32 gItemIconPalette_RustedWeapons[]; +// Colored Orbs +extern const u32 gItemIcon_RedOrb[]; +extern const u32 gItemIconPalette_RedOrb[]; +extern const u32 gItemIcon_BlueOrb[]; +extern const u32 gItemIconPalette_BlueOrb[]; +// Mega Stones +extern const u32 gItemIcon_Venusaurite[]; +extern const u32 gItemIconPalette_Venusaurite[]; +extern const u32 gItemIcon_CharizarditeX[]; +extern const u32 gItemIconPalette_CharizarditeX[]; +extern const u32 gItemIcon_CharizarditeY[]; +extern const u32 gItemIconPalette_CharizarditeY[]; +extern const u32 gItemIcon_Blastoisinite[]; +extern const u32 gItemIconPalette_Blastoisinite[]; +extern const u32 gItemIcon_Beedrillite[]; +extern const u32 gItemIconPalette_Beedrillite[]; +extern const u32 gItemIcon_Pidgeotite[]; +extern const u32 gItemIconPalette_Pidgeotite[]; +extern const u32 gItemIcon_Alakazite[]; +extern const u32 gItemIconPalette_Alakazite[]; +extern const u32 gItemIcon_Slowbronite[]; +extern const u32 gItemIconPalette_Slowbronite[]; +extern const u32 gItemIcon_Gengarite[]; +extern const u32 gItemIconPalette_Gengarite[]; +extern const u32 gItemIcon_Kangaskhanite[]; +extern const u32 gItemIconPalette_Kangaskhanite[]; +extern const u32 gItemIcon_Pinsirite[]; +extern const u32 gItemIconPalette_Pinsirite[]; +extern const u32 gItemIcon_Gyaradosite[]; +extern const u32 gItemIconPalette_Gyaradosite[]; +extern const u32 gItemIcon_Aerodactylite[]; +extern const u32 gItemIconPalette_Aerodactylite[]; +extern const u32 gItemIcon_MewtwoniteX[]; +extern const u32 gItemIconPalette_MewtwoniteX[]; +extern const u32 gItemIcon_MewtwoniteY[]; +extern const u32 gItemIconPalette_MewtwoniteY[]; +extern const u32 gItemIcon_Ampharosite[]; +extern const u32 gItemIconPalette_Ampharosite[]; +extern const u32 gItemIcon_Steelixite[]; +extern const u32 gItemIconPalette_Steelixite[]; +extern const u32 gItemIcon_Scizorite[]; +extern const u32 gItemIconPalette_Scizorite[]; +extern const u32 gItemIcon_Heracronite[]; +extern const u32 gItemIconPalette_Heracronite[]; +extern const u32 gItemIcon_Houndoominite[]; +extern const u32 gItemIconPalette_Houndoominite[]; +extern const u32 gItemIcon_Tyranitarite[]; +extern const u32 gItemIconPalette_Tyranitarite[]; +extern const u32 gItemIcon_Sceptilite[]; +extern const u32 gItemIconPalette_Sceptilite[]; +extern const u32 gItemIcon_Blazikenite[]; +extern const u32 gItemIconPalette_Blazikenite[]; +extern const u32 gItemIcon_Swampertite[]; +extern const u32 gItemIconPalette_Swampertite[]; +extern const u32 gItemIcon_Gardevoirite[]; +extern const u32 gItemIconPalette_Gardevoirite[]; +extern const u32 gItemIcon_Sablenite[]; +extern const u32 gItemIconPalette_Sablenite[]; +extern const u32 gItemIcon_Mawilite[]; +extern const u32 gItemIconPalette_Mawilite[]; +extern const u32 gItemIcon_Aggronite[]; +extern const u32 gItemIconPalette_Aggronite[]; +extern const u32 gItemIcon_Medichamite[]; +extern const u32 gItemIconPalette_Medichamite[]; +extern const u32 gItemIcon_Manectite[]; +extern const u32 gItemIconPalette_Manectite[]; +extern const u32 gItemIcon_Sharpedonite[]; +extern const u32 gItemIconPalette_Sharpedonite[]; +extern const u32 gItemIcon_Cameruptite[]; +extern const u32 gItemIconPalette_Cameruptite[]; +extern const u32 gItemIcon_Altarianite[]; +extern const u32 gItemIconPalette_Altarianite[]; +extern const u32 gItemIcon_Banettite[]; +extern const u32 gItemIconPalette_Banettite[]; +extern const u32 gItemIcon_Absolite[]; +extern const u32 gItemIconPalette_Absolite[]; +extern const u32 gItemIcon_Glalitite[]; +extern const u32 gItemIconPalette_Glalitite[]; +extern const u32 gItemIcon_Salamencite[]; +extern const u32 gItemIconPalette_Salamencite[]; +extern const u32 gItemIcon_Metagrossite[]; +extern const u32 gItemIconPalette_Metagrossite[]; +extern const u32 gItemIcon_Latiasite[]; +extern const u32 gItemIconPalette_Latiasite[]; +extern const u32 gItemIcon_Latiosite[]; +extern const u32 gItemIconPalette_Latiosite[]; +extern const u32 gItemIcon_Lopunnite[]; +extern const u32 gItemIconPalette_Lopunnite[]; +extern const u32 gItemIcon_Garchompite[]; +extern const u32 gItemIconPalette_Garchompite[]; +extern const u32 gItemIcon_Lucarionite[]; +extern const u32 gItemIconPalette_Lucarionite[]; +extern const u32 gItemIcon_Abomasite[]; +extern const u32 gItemIconPalette_Abomasite[]; +extern const u32 gItemIcon_Galladite[]; +extern const u32 gItemIconPalette_Galladite[]; +extern const u32 gItemIcon_Audinite[]; +extern const u32 gItemIconPalette_Audinite[]; +extern const u32 gItemIcon_Diancite[]; +extern const u32 gItemIconPalette_Diancite[]; +// Gems +extern const u32 gItemIcon_NormalGem[]; +extern const u32 gItemIconPalette_NormalGem[]; +extern const u32 gItemIcon_FireGem[]; +extern const u32 gItemIconPalette_FireGem[]; +extern const u32 gItemIcon_WaterGem[]; +extern const u32 gItemIconPalette_WaterGem[]; +extern const u32 gItemIcon_ElectricGem[]; +extern const u32 gItemIconPalette_ElectricGem[]; +extern const u32 gItemIcon_GrassGem[]; +extern const u32 gItemIconPalette_GrassGem[]; +extern const u32 gItemIcon_IceGem[]; +extern const u32 gItemIconPalette_IceGem[]; +extern const u32 gItemIcon_FightingGem[]; +extern const u32 gItemIconPalette_FightingGem[]; +extern const u32 gItemIcon_PoisonGem[]; +extern const u32 gItemIconPalette_PoisonGem[]; +extern const u32 gItemIcon_GroundGem[]; +extern const u32 gItemIconPalette_GroundGem[]; +extern const u32 gItemIcon_FlyingGem[]; +extern const u32 gItemIconPalette_FlyingGem[]; +extern const u32 gItemIcon_PsychicGem[]; +extern const u32 gItemIconPalette_PsychicGem[]; +extern const u32 gItemIcon_BugGem[]; +extern const u32 gItemIconPalette_BugGem[]; +extern const u32 gItemIcon_RockGem[]; +extern const u32 gItemIconPalette_RockGem[]; +extern const u32 gItemIcon_GhostGem[]; +extern const u32 gItemIconPalette_GhostGem[]; +extern const u32 gItemIcon_DragonGem[]; +extern const u32 gItemIconPalette_DragonGem[]; +extern const u32 gItemIcon_DarkGem[]; +extern const u32 gItemIconPalette_DarkGem[]; +extern const u32 gItemIcon_SteelGem[]; +extern const u32 gItemIconPalette_SteelGem[]; +extern const u32 gItemIcon_FairyGem[]; +extern const u32 gItemIconPalette_FairyGem[]; +// Z-Crystals +extern const u32 gItemIcon_NormaliumZ[]; +extern const u32 gItemIconPalette_NormaliumZ[]; +extern const u32 gItemIcon_FiriumZ[]; +extern const u32 gItemIconPalette_FiriumZ[]; +extern const u32 gItemIcon_WateriumZ[]; +extern const u32 gItemIconPalette_WateriumZ[]; +extern const u32 gItemIcon_ElectriumZ[]; +extern const u32 gItemIconPalette_ElectriumZ[]; +extern const u32 gItemIcon_GrassiumZ[]; +extern const u32 gItemIconPalette_GrassiumZ[]; +extern const u32 gItemIcon_IciumZ[]; +extern const u32 gItemIconPalette_IciumZ[]; +extern const u32 gItemIcon_FightiniumZ[]; +extern const u32 gItemIconPalette_FightiniumZ[]; +extern const u32 gItemIcon_PoisoniumZ[]; +extern const u32 gItemIconPalette_PoisoniumZ[]; +extern const u32 gItemIcon_GroundiumZ[]; +extern const u32 gItemIconPalette_GroundiumZ[]; +extern const u32 gItemIcon_FlyiniumZ[]; +extern const u32 gItemIconPalette_FlyiniumZ[]; +extern const u32 gItemIcon_PsychiumZ[]; +extern const u32 gItemIconPalette_PsychiumZ[]; +extern const u32 gItemIcon_BuginiumZ[]; +extern const u32 gItemIconPalette_BuginiumZ[]; +extern const u32 gItemIcon_RockiumZ[]; +extern const u32 gItemIconPalette_RockiumZ[]; +extern const u32 gItemIcon_GhostiumZ[]; +extern const u32 gItemIconPalette_GhostiumZ[]; +extern const u32 gItemIcon_DragoniumZ[]; +extern const u32 gItemIconPalette_DragoniumZ[]; +extern const u32 gItemIcon_DarkiniumZ[]; +extern const u32 gItemIconPalette_DarkiniumZ[]; +extern const u32 gItemIcon_SteeliumZ[]; +extern const u32 gItemIconPalette_SteeliumZ[]; +extern const u32 gItemIcon_FairiumZ[]; +extern const u32 gItemIconPalette_FairiumZ[]; +extern const u32 gItemIcon_PikaniumZ[]; +extern const u32 gItemIconPalette_PikaniumZ[]; +extern const u32 gItemIcon_EeviumZ[]; +extern const u32 gItemIconPalette_EeviumZ[]; +extern const u32 gItemIcon_SnorliumZ[]; +extern const u32 gItemIconPalette_SnorliumZ[]; +extern const u32 gItemIcon_MewniumZ[]; +extern const u32 gItemIconPalette_MewniumZ[]; +extern const u32 gItemIcon_DecidiumZ[]; +extern const u32 gItemIconPalette_DecidiumZ[]; +extern const u32 gItemIcon_InciniumZ[]; +extern const u32 gItemIconPalette_InciniumZ[]; +extern const u32 gItemIcon_PrimariumZ[]; +extern const u32 gItemIconPalette_PrimariumZ[]; +extern const u32 gItemIcon_LycaniumZ[]; +extern const u32 gItemIconPalette_LycaniumZ[]; +extern const u32 gItemIcon_MimikiumZ[]; +extern const u32 gItemIconPalette_MimikiumZ[]; +extern const u32 gItemIcon_KommoniumZ[]; +extern const u32 gItemIconPalette_KommoniumZ[]; +extern const u32 gItemIcon_TapuniumZ[]; +extern const u32 gItemIconPalette_TapuniumZ[]; +extern const u32 gItemIcon_SolganiumZ[]; +extern const u32 gItemIconPalette_SolganiumZ[]; +extern const u32 gItemIcon_LunaliumZ[]; +extern const u32 gItemIconPalette_LunaliumZ[]; +extern const u32 gItemIcon_MarshadiumZ[]; +extern const u32 gItemIconPalette_MarshadiumZ[]; +extern const u32 gItemIcon_AloraichiumZ[]; +extern const u32 gItemIconPalette_AloraichiumZ[]; +extern const u32 gItemIcon_PikashuniumZ[]; +extern const u32 gItemIconPalette_PikashuniumZ[]; +extern const u32 gItemIcon_UltranecroziumZ[]; +extern const u32 gItemIconPalette_UltranecroziumZ[]; +// Species-specific Held Items +extern const u32 gItemIcon_LightBall[]; +extern const u32 gItemIconPalette_LightBall[]; +extern const u32 gItemIcon_Leek[]; +extern const u32 gItemIconPalette_Leek[]; +extern const u32 gItemIcon_ThickClub[]; +extern const u32 gItemIconPalette_ThickClub[]; +extern const u32 gItemIcon_LuckyPunch[]; +extern const u32 gItemIconPalette_LuckyPunch[]; +extern const u32 gItemIcon_MetalPowder[]; +extern const u32 gItemIconPalette_MetalPowder[]; +extern const u32 gItemIcon_QuickPowder[]; +extern const u32 gItemIconPalette_QuickPowder[]; +extern const u32 gItemIcon_DeepSeaScale[]; +extern const u32 gItemIconPalette_DeepSeaScale[]; +extern const u32 gItemIcon_DeepSeaTooth[]; +extern const u32 gItemIconPalette_DeepSeaTooth[]; +extern const u32 gItemIcon_SoulDew[]; +extern const u32 gItemIconPalette_SoulDew[]; +extern const u32 gItemIcon_AdamantOrb[]; +extern const u32 gItemIconPalette_AdamantOrb[]; +extern const u32 gItemIcon_LustrousOrb[]; +extern const u32 gItemIconPalette_LustrousOrb[]; +extern const u32 gItemIcon_GriseousOrb[]; +extern const u32 gItemIconPalette_GriseousOrb[]; +// Incenses +extern const u32 gItemIcon_SeaIncense[]; +extern const u32 gItemIconPalette_SeaIncense[]; +extern const u32 gItemIcon_LaxIncense[]; +extern const u32 gItemIconPalette_LaxIncense[]; +extern const u32 gItemIcon_OddIncense[]; +extern const u32 gItemIconPalette_OddIncense[]; +extern const u32 gItemIcon_RockIncense[]; +extern const u32 gItemIconPalette_RockIncense[]; +extern const u32 gItemIcon_FullIncense[]; +extern const u32 gItemIconPalette_FullIncense[]; +extern const u32 gItemIcon_WaveIncense[]; +extern const u32 gItemIconPalette_WaveIncense[]; +extern const u32 gItemIcon_RoseIncense[]; +extern const u32 gItemIconPalette_RoseIncense[]; +extern const u32 gItemIcon_LuckIncense[]; +extern const u32 gItemIconPalette_LuckIncense[]; +extern const u32 gItemIcon_PureIncense[]; +extern const u32 gItemIconPalette_PureIncense[]; +// Contest Scarves +extern const u32 gItemIcon_Scarf[]; +extern const u32 gItemIconPalette_RedScarf[]; +extern const u32 gItemIconPalette_BlueScarf[]; +extern const u32 gItemIconPalette_PinkScarf[]; +extern const u32 gItemIconPalette_GreenScarf[]; +extern const u32 gItemIconPalette_YellowScarf[]; +// EV Gain Modifiers +extern const u32 gItemIcon_MachoBrace[]; +extern const u32 gItemIconPalette_MachoBrace[]; +extern const u32 gItemIcon_PowerWeight[]; +extern const u32 gItemIconPalette_PowerWeight[]; +extern const u32 gItemIcon_PowerBracer[]; +extern const u32 gItemIconPalette_PowerBracer[]; +extern const u32 gItemIcon_PowerBelt[]; +extern const u32 gItemIconPalette_PowerBelt[]; +extern const u32 gItemIcon_PowerLens[]; +extern const u32 gItemIconPalette_PowerLens[]; +extern const u32 gItemIcon_PowerBand[]; +extern const u32 gItemIconPalette_PowerBand[]; +extern const u32 gItemIcon_PowerAnklet[]; +extern const u32 gItemIconPalette_PowerAnklet[]; +// Type-boosting Held Items +extern const u32 gItemIcon_SilkScarf[]; +extern const u32 gItemIconPalette_SilkScarf[]; +extern const u32 gItemIcon_Charcoal[]; +extern const u32 gItemIconPalette_Charcoal[]; +extern const u32 gItemIcon_MysticWater[]; +extern const u32 gItemIconPalette_MysticWater[]; +extern const u32 gItemIcon_Magnet[]; +extern const u32 gItemIconPalette_Magnet[]; +extern const u32 gItemIcon_MiracleSeed[]; +extern const u32 gItemIconPalette_MiracleSeed[]; +extern const u32 gItemIcon_NeverMeltIce[]; +extern const u32 gItemIconPalette_NeverMeltIce[]; +extern const u32 gItemIcon_BlackBelt[]; +extern const u32 gItemIconPalette_BlackTypeEnhancingItem[]; +extern const u32 gItemIcon_PoisonBarb[]; +extern const u32 gItemIconPalette_PoisonBarb[]; +extern const u32 gItemIcon_SoftSand[]; +extern const u32 gItemIconPalette_SoftSand[]; +extern const u32 gItemIcon_SharpBeak[]; +extern const u32 gItemIconPalette_SharpBeak[]; +extern const u32 gItemIcon_TwistedSpoon[]; +extern const u32 gItemIconPalette_TwistedSpoon[]; +extern const u32 gItemIcon_SilverPowder[]; +extern const u32 gItemIconPalette_SilverPowder[]; +extern const u32 gItemIcon_HardStone[]; +extern const u32 gItemIconPalette_HardStone[]; +extern const u32 gItemIcon_SpellTag[]; +extern const u32 gItemIconPalette_SpellTag[]; +extern const u32 gItemIcon_DragonFang[]; +extern const u32 gItemIconPalette_DragonFang[]; +extern const u32 gItemIcon_BlackGlasses[]; +extern const u32 gItemIcon_MetalCoat[]; +extern const u32 gItemIconPalette_MetalCoat[]; +// Choice Items +extern const u32 gItemIcon_ChoiceBand[]; +extern const u32 gItemIconPalette_ChoiceBand[]; +extern const u32 gItemIcon_ChoiceSpecs[]; +extern const u32 gItemIconPalette_ChoiceSpecs[]; +extern const u32 gItemIcon_ChoiceScarf[]; +extern const u32 gItemIconPalette_ChoiceScarf[]; +// Status Orbs +extern const u32 gItemIcon_FlameOrb[]; +extern const u32 gItemIconPalette_FlameOrb[]; +extern const u32 gItemIcon_ToxicOrb[]; +extern const u32 gItemIconPalette_ToxicOrb[]; +// Weather Rocks +extern const u32 gItemIcon_DampRock[]; +extern const u32 gItemIconPalette_DampRock[]; +extern const u32 gItemIcon_HeatRock[]; +extern const u32 gItemIconPalette_HeatRock[]; +extern const u32 gItemIcon_SmoothRock[]; +extern const u32 gItemIconPalette_SmoothRock[]; +extern const u32 gItemIcon_IcyRock[]; +extern const u32 gItemIconPalette_IcyRock[]; +// Terrain Seeds +extern const u32 gItemIcon_ElectricSeed[]; +extern const u32 gItemIconPalette_ElectricSeed[]; +extern const u32 gItemIcon_PsychicSeed[]; +extern const u32 gItemIconPalette_PsychicSeed[]; +extern const u32 gItemIcon_MistySeed[]; +extern const u32 gItemIconPalette_MistySeed[]; +extern const u32 gItemIcon_GrassySeed[]; +extern const u32 gItemIconPalette_GrassySeed[]; +// Type-activated Stat Modifiers +extern const u32 gItemIcon_AbsorbBulb[]; +extern const u32 gItemIconPalette_AbsorbBulb[]; +extern const u32 gItemIcon_CellBattery[]; +extern const u32 gItemIconPalette_CellBattery[]; +extern const u32 gItemIcon_LuminousMoss[]; +extern const u32 gItemIconPalette_LuminousMoss[]; +extern const u32 gItemIcon_Snowball[]; +extern const u32 gItemIconPalette_Snowball[]; +// Misc. Held Items +extern const u32 gItemIcon_BrightPowder[]; +extern const u32 gItemIconPalette_BrightPowder[]; +extern const u32 gItemIcon_InBattleHerb[]; +extern const u32 gItemIconPalette_WhiteHerb[]; +extern const u32 gItemIcon_ExpShare[]; +extern const u32 gItemIconPalette_ExpShare[]; +extern const u32 gItemIcon_QuickClaw[]; +extern const u32 gItemIconPalette_QuickClaw[]; +extern const u32 gItemIcon_SootheBell[]; +extern const u32 gItemIconPalette_SootheBell[]; +extern const u32 gItemIconPalette_MentalHerb[]; +extern const u32 gItemIcon_KingsRock[]; +extern const u32 gItemIconPalette_KingsRock[]; +extern const u32 gItemIcon_AmuletCoin[]; +extern const u32 gItemIconPalette_AmuletCoin[]; +extern const u32 gItemIcon_CleanseTag[]; +extern const u32 gItemIconPalette_CleanseTag[]; +extern const u32 gItemIcon_SmokeBall[]; +extern const u32 gItemIconPalette_SmokeBall[]; +extern const u32 gItemIcon_FocusBand[]; +extern const u32 gItemIconPalette_FocusBand[]; +extern const u32 gItemIcon_LuckyEgg[]; +extern const u32 gItemIconPalette_LuckyEgg[]; +extern const u32 gItemIcon_ScopeLens[]; +extern const u32 gItemIconPalette_ScopeLens[]; +extern const u32 gItemIcon_Leftovers[]; +extern const u32 gItemIconPalette_Leftovers[]; +extern const u32 gItemIcon_ShellBell[]; +extern const u32 gItemIcon_WideLens[]; +extern const u32 gItemIconPalette_WideLens[]; +extern const u32 gItemIcon_MuscleBand[]; +extern const u32 gItemIconPalette_MuscleBand[]; +extern const u32 gItemIcon_WiseGlasses[]; +extern const u32 gItemIconPalette_WiseGlasses[]; +extern const u32 gItemIcon_ExpertBelt[]; +extern const u32 gItemIconPalette_ExpertBelt[]; +extern const u32 gItemIcon_LightClay[]; +extern const u32 gItemIconPalette_LightClay[]; +extern const u32 gItemIcon_LifeOrb[]; +extern const u32 gItemIconPalette_LifeOrb[]; +extern const u32 gItemIcon_PowerHerb[]; +extern const u32 gItemIconPalette_PowerHerb[]; +extern const u32 gItemIcon_FocusSash[]; +extern const u32 gItemIconPalette_FocusSash[]; +extern const u32 gItemIcon_ZoomLens[]; +extern const u32 gItemIconPalette_ZoomLens[]; +extern const u32 gItemIcon_Metronome[]; +extern const u32 gItemIconPalette_Metronome[]; +extern const u32 gItemIcon_IronBall[]; +extern const u32 gItemIconPalette_IronBall[]; +extern const u32 gItemIcon_LaggingTail[]; +extern const u32 gItemIconPalette_LaggingTail[]; +extern const u32 gItemIcon_DestinyKnot[]; +extern const u32 gItemIconPalette_DestinyKnot[]; +extern const u32 gItemIcon_BlackSludge[]; +extern const u32 gItemIconPalette_BlackSludge[]; +extern const u32 gItemIcon_GripClaw[]; +extern const u32 gItemIconPalette_GripClaw[]; +extern const u32 gItemIcon_StickyBarb[]; +extern const u32 gItemIconPalette_StickyBarb[]; +extern const u32 gItemIcon_ShedShell[]; +extern const u32 gItemIconPalette_ShedShell[]; +extern const u32 gItemIcon_BigRoot[]; +extern const u32 gItemIconPalette_BigRoot[]; +extern const u32 gItemIcon_RazorClaw[]; +extern const u32 gItemIconPalette_RazorClaw[]; +extern const u32 gItemIcon_RazorFang[]; +extern const u32 gItemIconPalette_RazorFang[]; +extern const u32 gItemIcon_Eviolite[]; +extern const u32 gItemIconPalette_Eviolite[]; +extern const u32 gItemIcon_FloatStone[]; +extern const u32 gItemIconPalette_FloatStone[]; +extern const u32 gItemIcon_RockyHelmet[]; +extern const u32 gItemIconPalette_RockyHelmet[]; +extern const u32 gItemIcon_AirBalloon[]; +extern const u32 gItemIconPalette_AirBalloon[]; +extern const u32 gItemIcon_RedCard[]; +extern const u32 gItemIconPalette_RedCard[]; +extern const u32 gItemIcon_RingTarget[]; +extern const u32 gItemIconPalette_RingTarget[]; +extern const u32 gItemIcon_BindingBand[]; +extern const u32 gItemIconPalette_BindingBand[]; +extern const u32 gItemIcon_EjectButton[]; +extern const u32 gItemIconPalette_EjectButton[]; +extern const u32 gItemIcon_WeaknessPolicy[]; +extern const u32 gItemIconPalette_WeaknessPolicy[]; +extern const u32 gItemIcon_AssaultVest[]; +extern const u32 gItemIconPalette_AssaultVest[]; +extern const u32 gItemIcon_SafetyGoggles[]; +extern const u32 gItemIconPalette_SafetyGoggles[]; +extern const u32 gItemIcon_AdrenalineOrb[]; +extern const u32 gItemIconPalette_AdrenalineOrb[]; +extern const u32 gItemIcon_TerrainExtender[]; +extern const u32 gItemIconPalette_TerrainExtender[]; +extern const u32 gItemIcon_ProtectivePads[]; +extern const u32 gItemIconPalette_ProtectivePads[]; +extern const u32 gItemIcon_ThroatSpray[]; +extern const u32 gItemIconPalette_ThroatSpray[]; +extern const u32 gItemIcon_EjectPack[]; +extern const u32 gItemIconPalette_EjectPack[]; +extern const u32 gItemIcon_HeavyDutyBoots[]; +extern const u32 gItemIconPalette_HeavyDutyBoots[]; +extern const u32 gItemIcon_BlunderPolicy[]; +extern const u32 gItemIconPalette_BlunderPolicy[]; +extern const u32 gItemIcon_RoomService[]; +extern const u32 gItemIconPalette_RoomService[]; +extern const u32 gItemIcon_UtilityUmbrella[]; +extern const u32 gItemIconPalette_UtilityUmbrella[]; // Berries extern const u32 gItemIcon_CheriBerry[]; extern const u32 gItemIconPalette_CheriBerry[]; @@ -7277,6 +8456,42 @@ extern const u32 gItemIcon_DurinBerry[]; extern const u32 gItemIconPalette_DurinBerry[]; extern const u32 gItemIcon_BelueBerry[]; extern const u32 gItemIconPalette_BelueBerry[]; +extern const u32 gItemIcon_ChilanBerry[]; +extern const u32 gItemIconPalette_ChilanBerry[]; +extern const u32 gItemIcon_OccaBerry[]; +extern const u32 gItemIconPalette_OccaBerry[]; +extern const u32 gItemIcon_PasshoBerry[]; +extern const u32 gItemIconPalette_PasshoBerry[]; +extern const u32 gItemIcon_WacanBerry[]; +extern const u32 gItemIconPalette_WacanBerry[]; +extern const u32 gItemIcon_RindoBerry[]; +extern const u32 gItemIconPalette_RindoBerry[]; +extern const u32 gItemIcon_YacheBerry[]; +extern const u32 gItemIconPalette_YacheBerry[]; +extern const u32 gItemIcon_ChopleBerry[]; +extern const u32 gItemIconPalette_ChopleBerry[]; +extern const u32 gItemIcon_KebiaBerry[]; +extern const u32 gItemIconPalette_KebiaBerry[]; +extern const u32 gItemIcon_ShucaBerry[]; +extern const u32 gItemIconPalette_ShucaBerry[]; +extern const u32 gItemIcon_CobaBerry[]; +extern const u32 gItemIconPalette_CobaBerry[]; +extern const u32 gItemIcon_PayapaBerry[]; +extern const u32 gItemIconPalette_PayapaBerry[]; +extern const u32 gItemIcon_TangaBerry[]; +extern const u32 gItemIconPalette_TangaBerry[]; +extern const u32 gItemIcon_ChartiBerry[]; +extern const u32 gItemIconPalette_ChartiBerry[]; +extern const u32 gItemIcon_KasibBerry[]; +extern const u32 gItemIconPalette_KasibBerry[]; +extern const u32 gItemIcon_HabanBerry[]; +extern const u32 gItemIconPalette_HabanBerry[]; +extern const u32 gItemIcon_ColburBerry[]; +extern const u32 gItemIconPalette_ColburBerry[]; +extern const u32 gItemIcon_BabiriBerry[]; +extern const u32 gItemIconPalette_BabiriBerry[]; +extern const u32 gItemIcon_RoseliBerry[]; +extern const u32 gItemIconPalette_RoseliBerry[]; extern const u32 gItemIcon_LiechiBerry[]; extern const u32 gItemIconPalette_LiechiBerry[]; extern const u32 gItemIcon_GanlonBerry[]; @@ -7293,244 +8508,181 @@ extern const u32 gItemIcon_StarfBerry[]; extern const u32 gItemIconPalette_StarfBerry[]; extern const u32 gItemIcon_EnigmaBerry[]; extern const u32 gItemIconPalette_EnigmaBerry[]; -// Hold items -extern const u32 gItemIcon_BrightPowder[]; -extern const u32 gItemIconPalette_BrightPowder[]; -extern const u32 gItemIcon_InBattleHerb[]; -extern const u32 gItemIconPalette_WhiteHerb[]; -extern const u32 gItemIcon_MachoBrace[]; -extern const u32 gItemIconPalette_MachoBrace[]; -extern const u32 gItemIcon_ExpShare[]; -extern const u32 gItemIconPalette_ExpShare[]; -extern const u32 gItemIcon_QuickClaw[]; -extern const u32 gItemIconPalette_QuickClaw[]; -extern const u32 gItemIcon_SootheBell[]; -extern const u32 gItemIconPalette_SootheBell[]; -extern const u32 gItemIcon_InBattleHerb[]; -extern const u32 gItemIconPalette_MentalHerb[]; -extern const u32 gItemIcon_ChoiceBand[]; -extern const u32 gItemIconPalette_ChoiceBand[]; -extern const u32 gItemIcon_KingsRock[]; -extern const u32 gItemIconPalette_KingsRock[]; -extern const u32 gItemIcon_SilverPowder[]; -extern const u32 gItemIconPalette_SilverPowder[]; -extern const u32 gItemIcon_AmuletCoin[]; -extern const u32 gItemIconPalette_AmuletCoin[]; -extern const u32 gItemIcon_CleanseTag[]; -extern const u32 gItemIconPalette_CleanseTag[]; -extern const u32 gItemIcon_SoulDew[]; -extern const u32 gItemIconPalette_SoulDew[]; -extern const u32 gItemIcon_DeepSeaTooth[]; -extern const u32 gItemIconPalette_DeepSeaTooth[]; -extern const u32 gItemIcon_DeepSeaScale[]; -extern const u32 gItemIconPalette_DeepSeaScale[]; -extern const u32 gItemIcon_SmokeBall[]; -extern const u32 gItemIconPalette_SmokeBall[]; -extern const u32 gItemIcon_Everstone[]; -extern const u32 gItemIconPalette_Everstone[]; -extern const u32 gItemIcon_FocusBand[]; -extern const u32 gItemIconPalette_FocusBand[]; -extern const u32 gItemIcon_LuckyEgg[]; -extern const u32 gItemIconPalette_LuckyEgg[]; -extern const u32 gItemIcon_ScopeLens[]; -extern const u32 gItemIconPalette_ScopeLens[]; -extern const u32 gItemIcon_MetalCoat[]; -extern const u32 gItemIconPalette_MetalCoat[]; -extern const u32 gItemIcon_Leftovers[]; -extern const u32 gItemIconPalette_Leftovers[]; -extern const u32 gItemIcon_DragonScale[]; -extern const u32 gItemIconPalette_DragonScale[]; -extern const u32 gItemIcon_LightBall[]; -extern const u32 gItemIconPalette_LightBall[]; -extern const u32 gItemIcon_SoftSand[]; -extern const u32 gItemIconPalette_SoftSand[]; -extern const u32 gItemIcon_HardStone[]; -extern const u32 gItemIconPalette_HardStone[]; -extern const u32 gItemIcon_MiracleSeed[]; -extern const u32 gItemIconPalette_MiracleSeed[]; -extern const u32 gItemIcon_BlackGlasses[]; -extern const u32 gItemIconPalette_BlackTypeEnhancingItem[]; -extern const u32 gItemIcon_BlackBelt[]; -extern const u32 gItemIconPalette_BlackTypeEnhancingItem[]; -extern const u32 gItemIcon_Magnet[]; -extern const u32 gItemIconPalette_Magnet[]; -extern const u32 gItemIcon_MysticWater[]; -extern const u32 gItemIconPalette_MysticWater[]; -extern const u32 gItemIcon_SharpBeak[]; -extern const u32 gItemIconPalette_SharpBeak[]; -extern const u32 gItemIcon_PoisonBarb[]; -extern const u32 gItemIconPalette_PoisonBarb[]; -extern const u32 gItemIcon_NeverMeltIce[]; -extern const u32 gItemIconPalette_NeverMeltIce[]; -extern const u32 gItemIcon_SpellTag[]; -extern const u32 gItemIconPalette_SpellTag[]; -extern const u32 gItemIcon_TwistedSpoon[]; -extern const u32 gItemIconPalette_TwistedSpoon[]; -extern const u32 gItemIcon_Charcoal[]; -extern const u32 gItemIconPalette_Charcoal[]; -extern const u32 gItemIcon_DragonFang[]; -extern const u32 gItemIconPalette_DragonFang[]; -extern const u32 gItemIcon_SilkScarf[]; -extern const u32 gItemIconPalette_SilkScarf[]; -extern const u32 gItemIcon_UpGrade[]; -extern const u32 gItemIconPalette_UpGrade[]; -extern const u32 gItemIcon_ShellBell[]; -extern const u32 gItemIconPalette_Shell[]; -extern const u32 gItemIcon_SeaIncense[]; -extern const u32 gItemIconPalette_SeaIncense[]; -extern const u32 gItemIcon_LaxIncense[]; -extern const u32 gItemIconPalette_LaxIncense[]; -extern const u32 gItemIcon_LuckyPunch[]; -extern const u32 gItemIconPalette_LuckyPunch[]; -extern const u32 gItemIcon_MetalPowder[]; -extern const u32 gItemIconPalette_MetalPowder[]; -extern const u32 gItemIcon_ThickClub[]; -extern const u32 gItemIconPalette_ThickClub[]; -extern const u32 gItemIcon_Stick[]; -extern const u32 gItemIconPalette_Stick[]; -// Contest hold items -extern const u32 gItemIcon_Scarf[]; -extern const u32 gItemIconPalette_RedScarf[]; -extern const u32 gItemIconPalette_BlueScarf[]; -extern const u32 gItemIconPalette_PinkScarf[]; -extern const u32 gItemIconPalette_GreenScarf[]; -extern const u32 gItemIconPalette_YellowScarf[]; -// Key items +extern const u32 gItemIcon_MicleBerry[]; +extern const u32 gItemIconPalette_MicleBerry[]; +extern const u32 gItemIcon_CustapBerry[]; +extern const u32 gItemIconPalette_CustapBerry[]; +extern const u32 gItemIcon_JabocaBerry[]; +extern const u32 gItemIconPalette_JabocaBerry[]; +extern const u32 gItemIcon_RowapBerry[]; +extern const u32 gItemIconPalette_RowapBerry[]; +extern const u32 gItemIcon_KeeBerry[]; +extern const u32 gItemIconPalette_KeeBerry[]; +extern const u32 gItemIcon_MarangaBerry[]; +extern const u32 gItemIconPalette_MarangaBerry[]; +// TMs/HMs +extern const u32 gItemIcon_TM[]; +extern const u32 gItemIcon_HM[]; +extern const u32 gItemIconPalette_NormalTMHM[]; +extern const u32 gItemIconPalette_FireTMHM[]; +extern const u32 gItemIconPalette_WaterTMHM[]; +extern const u32 gItemIconPalette_ElectricTMHM[]; +extern const u32 gItemIconPalette_GrassTMHM[]; +extern const u32 gItemIconPalette_IceTMHM[]; +extern const u32 gItemIconPalette_FightingTMHM[]; +extern const u32 gItemIconPalette_PoisonTMHM[]; +extern const u32 gItemIconPalette_GroundTMHM[]; +extern const u32 gItemIconPalette_FlyingTMHM[]; +extern const u32 gItemIconPalette_PsychicTMHM[]; +extern const u32 gItemIconPalette_BugTMHM[]; +extern const u32 gItemIconPalette_RockTMHM[]; +extern const u32 gItemIconPalette_GhostTMHM[]; +extern const u32 gItemIconPalette_DragonTMHM[]; +extern const u32 gItemIconPalette_DarkTMHM[]; +extern const u32 gItemIconPalette_SteelTMHM[]; +extern const u32 gItemIconPalette_FairyTMHM[]; +// Charms +extern const u32 gItemIcon_OvalCharm[]; +extern const u32 gItemIconPalette_OvalCharm[]; +extern const u32 gItemIcon_ShinyCharm[]; +extern const u32 gItemIconPalette_ShinyCharm[]; +extern const u32 gItemIcon_CatchingCharm[]; +extern const u32 gItemIconPalette_CatchingCharm[]; +extern const u32 gItemIcon_ExpCharm[]; +extern const u32 gItemIconPalette_ExpCharm[]; +// Form-changing Key Items +extern const u32 gItemIcon_RotomCatalog[]; +extern const u32 gItemIconPalette_RotomCatalog[]; +extern const u32 gItemIcon_Gracidea[]; +extern const u32 gItemIconPalette_Gracidea[]; +extern const u32 gItemIcon_RevealGlass[]; +extern const u32 gItemIconPalette_RevealGlass[]; +extern const u32 gItemIcon_DNASplicers[]; +extern const u32 gItemIconPalette_DNASplicers[]; +extern const u32 gItemIcon_ZygardeCube[]; +extern const u32 gItemIconPalette_ZygardeCube[]; +extern const u32 gItemIcon_PrisonBottle[]; +extern const u32 gItemIconPalette_PrisonBottle[]; +extern const u32 gItemIcon_NecrozmaFuser[]; +extern const u32 gItemIconPalette_NSolarizer[]; +extern const u32 gItemIconPalette_NLunarizer[]; +extern const u32 gItemIcon_ReinsOfUnity[]; +extern const u32 gItemIconPalette_ReinsOfUnity[]; +// Battle Mechanic Key Items +extern const u32 gItemIcon_MegaRing[]; +extern const u32 gItemIconPalette_MegaRing[]; +extern const u32 gItemIcon_ZPowerRing[]; +extern const u32 gItemIconPalette_ZPowerRing[]; +extern const u32 gItemIcon_DynamaxBand[]; +extern const u32 gItemIconPalette_DynamaxBand[]; +// Misc. Key Items +extern const u32 gItemIcon_Bicycle[]; +extern const u32 gItemIconPalette_Bicycle[]; extern const u32 gItemIcon_MachBike[]; extern const u32 gItemIconPalette_MachBike[]; -extern const u32 gItemIcon_CoinCase[]; -extern const u32 gItemIconPalette_CoinCase[]; -extern const u32 gItemIcon_Itemfinder[]; -extern const u32 gItemIconPalette_Itemfinder[]; +extern const u32 gItemIcon_AcroBike[]; +extern const u32 gItemIconPalette_AcroBike[]; extern const u32 gItemIcon_OldRod[]; extern const u32 gItemIconPalette_OldRod[]; extern const u32 gItemIcon_GoodRod[]; extern const u32 gItemIconPalette_GoodRod[]; extern const u32 gItemIcon_SuperRod[]; extern const u32 gItemIconPalette_SuperRod[]; -extern const u32 gItemIcon_SSTicket[]; -extern const u32 gItemIconPalette_SSTicket[]; -extern const u32 gItemIcon_ContestPass[]; -extern const u32 gItemIconPalette_ContestPass[]; +extern const u32 gItemIcon_DowsingMachine[]; +extern const u32 gItemIconPalette_DowsingMachine[]; +extern const u32 gItemIcon_TownMap[]; +extern const u32 gItemIconPalette_TownMap[]; +extern const u32 gItemIcon_VsSeeker[]; +extern const u32 gItemIconPalette_VsSeeker[]; +extern const u32 gItemIcon_TMCase[]; +extern const u32 gItemIconPalette_TMCase[]; +extern const u32 gItemIcon_BerryPouch[]; +extern const u32 gItemIconPalette_BerryPouch[]; +extern const u32 gItemIcon_PokemonBoxLink[]; +extern const u32 gItemIconPalette_PokemonBoxLink[]; +extern const u32 gItemIcon_CoinCase[]; +extern const u32 gItemIconPalette_CoinCase[]; +extern const u32 gItemIcon_PowderJar[]; +extern const u32 gItemIconPalette_PowderJar[]; extern const u32 gItemIcon_WailmerPail[]; extern const u32 gItemIconPalette_WailmerPail[]; -extern const u32 gItemIcon_DevonGoods[]; -extern const u32 gItemIconPalette_DevonGoods[]; -extern const u32 gItemIcon_SootSack[]; -extern const u32 gItemIconPalette_SootSack[]; -extern const u32 gItemIcon_BasementKey[]; -extern const u32 gItemIconPalette_OldKey[]; -extern const u32 gItemIcon_AcroBike[]; -extern const u32 gItemIconPalette_AcroBike[]; +extern const u32 gItemIcon_PokeRadar[]; +extern const u32 gItemIconPalette_PokeRadar[]; extern const u32 gItemIcon_PokeblockCase[]; extern const u32 gItemIconPalette_PokeblockCase[]; -extern const u32 gItemIcon_Letter[]; -extern const u32 gItemIcon_EonTicket[]; -extern const u32 gItemIconPalette_EonTicket[]; -extern const u32 gItemIcon_Orb[]; -extern const u32 gItemIconPalette_RedOrb[]; -extern const u32 gItemIconPalette_BlueOrb[]; -extern const u32 gItemIcon_Scanner[]; -extern const u32 gItemIconPalette_Scanner[]; -extern const u32 gItemIcon_GoGoggles[]; -extern const u32 gItemIconPalette_GoGoggles[]; -extern const u32 gItemIcon_Meteorite[]; -extern const u32 gItemIconPalette_Meteorite[]; -extern const u32 gItemIcon_Room1Key[]; -extern const u32 gItemIconPalette_Key[]; -extern const u32 gItemIcon_Room2Key[]; -extern const u32 gItemIcon_Room4Key[]; -extern const u32 gItemIcon_Room6Key[]; -extern const u32 gItemIcon_StorageKey[]; -extern const u32 gItemIcon_RootFossil[]; -extern const u32 gItemIconPalette_HoennFossil[]; -extern const u32 gItemIcon_ClawFossil[]; -extern const u32 gItemIcon_DevonScope[]; -extern const u32 gItemIconPalette_DevonScope[]; -// TMs/HMs -extern const u32 gItemIcon_TM[]; -extern const u32 gItemIconPalette_FightingTMHM[]; -extern const u32 gItemIconPalette_DragonTMHM[]; -extern const u32 gItemIconPalette_WaterTMHM[]; -extern const u32 gItemIconPalette_PsychicTMHM[]; -extern const u32 gItemIconPalette_NormalTMHM[]; -extern const u32 gItemIconPalette_PoisonTMHM[]; -extern const u32 gItemIconPalette_IceTMHM[]; -extern const u32 gItemIconPalette_GrassTMHM[]; -extern const u32 gItemIconPalette_FireTMHM[]; -extern const u32 gItemIconPalette_DarkTMHM[]; -extern const u32 gItemIconPalette_SteelTMHM[]; -extern const u32 gItemIconPalette_ElectricTMHM[]; -extern const u32 gItemIconPalette_GroundTMHM[]; -extern const u32 gItemIconPalette_GhostTMHM[]; -extern const u32 gItemIconPalette_RockTMHM[]; -extern const u32 gItemIconPalette_FlyingTMHM[]; -extern const u32 gItemIcon_HM[]; -// FireRed/LeafGreen key items -extern const u32 gItemIcon_OaksParcel[]; -extern const u32 gItemIconPalette_OaksParcel[]; +extern const u32 gItemIcon_SootSack[]; +extern const u32 gItemIconPalette_SootSack[]; extern const u32 gItemIcon_PokeFlute[]; extern const u32 gItemIconPalette_PokeFlute[]; +extern const u32 gItemIcon_FameChecker[]; +extern const u32 gItemIconPalette_FameChecker[]; +extern const u32 gItemIcon_TeachyTV[]; +extern const u32 gItemIconPalette_TeachyTV[]; +// Story Key Items +extern const u32 gItemIcon_SSTicket[]; +extern const u32 gItemIconPalette_SSTicket[]; +extern const u32 gItemIcon_EonTicket[]; +extern const u32 gItemIconPalette_EonTicket[]; +extern const u32 gItemIcon_MysticTicket[]; +extern const u32 gItemIconPalette_MysticTicket[]; +extern const u32 gItemIcon_AuroraTicket[]; +extern const u32 gItemIconPalette_AuroraTicket[]; +extern const u32 gItemIcon_OldSeaMap[]; +extern const u32 gItemIconPalette_OldSeaMap[]; +extern const u32 gItemIcon_Letter[]; +extern const u32 gItemIcon_DevonParts[]; +extern const u32 gItemIconPalette_DevonParts[]; +extern const u32 gItemIcon_GoGoggles[]; +extern const u32 gItemIconPalette_GoGoggles[]; +extern const u32 gItemIcon_DevonScope[]; +extern const u32 gItemIconPalette_DevonScope[]; +extern const u32 gItemIcon_BasementKey[]; +extern const u32 gItemIconPalette_OldKey[]; +extern const u32 gItemIcon_Scanner[]; +extern const u32 gItemIconPalette_Scanner[]; +extern const u32 gItemIcon_StorageKey[]; +extern const u32 gItemIcon_KeyToRoom1[]; +extern const u32 gItemIconPalette_Key[]; +extern const u32 gItemIcon_KeyToRoom2[]; +extern const u32 gItemIcon_KeyToRoom4[]; +extern const u32 gItemIcon_KeyToRoom6[]; +extern const u32 gItemIcon_Meteorite[]; +extern const u32 gItemIconPalette_Meteorite[]; +extern const u32 gItemIcon_MagmaEmblem[]; +extern const u32 gItemIconPalette_MagmaEmblem[]; +extern const u32 gItemIcon_ContestPass[]; +extern const u32 gItemIconPalette_ContestPass[]; +extern const u32 gItemIcon_OaksParcel[]; +extern const u32 gItemIconPalette_OaksParcel[]; extern const u32 gItemIcon_SecretKey[]; extern const u32 gItemIconPalette_SecretKey[]; extern const u32 gItemIcon_BikeVoucher[]; extern const u32 gItemIconPalette_BikeVoucher[]; extern const u32 gItemIcon_GoldTeeth[]; extern const u32 gItemIconPalette_GoldTeeth[]; -extern const u32 gItemIcon_OldAmber[]; -extern const u32 gItemIconPalette_OldAmber[]; extern const u32 gItemIcon_CardKey[]; extern const u32 gItemIconPalette_CardKey[]; extern const u32 gItemIcon_LiftKey[]; -extern const u32 gItemIconPalette_Key[]; -extern const u32 gItemIcon_HelixFossil[]; -extern const u32 gItemIconPalette_KantoFossil[]; -extern const u32 gItemIcon_DomeFossil[]; extern const u32 gItemIcon_SilphScope[]; extern const u32 gItemIconPalette_SilphScope[]; -extern const u32 gItemIcon_Bicycle[]; -extern const u32 gItemIconPalette_Bicycle[]; -extern const u32 gItemIcon_TownMap[]; -extern const u32 gItemIconPalette_TownMap[]; -extern const u32 gItemIcon_VSSeeker[]; -extern const u32 gItemIconPalette_VSSeeker[]; -extern const u32 gItemIcon_FameChecker[]; -extern const u32 gItemIconPalette_FameChecker[]; -extern const u32 gItemIcon_TMCase[]; -extern const u32 gItemIconPalette_TMCase[]; -extern const u32 gItemIcon_BerryPouch[]; -extern const u32 gItemIconPalette_BerryPouch[]; -extern const u32 gItemIcon_TeachyTV[]; -extern const u32 gItemIconPalette_TeachyTV[]; extern const u32 gItemIcon_TriPass[]; extern const u32 gItemIconPalette_TriPass[]; extern const u32 gItemIcon_RainbowPass[]; extern const u32 gItemIconPalette_RainbowPass[]; extern const u32 gItemIcon_Tea[]; extern const u32 gItemIconPalette_Tea[]; -extern const u32 gItemIcon_MysticTicket[]; -extern const u32 gItemIconPalette_MysticTicket[]; -extern const u32 gItemIcon_AuroraTicket[]; -extern const u32 gItemIconPalette_AuroraTicket[]; -extern const u32 gItemIcon_PowderJar[]; -extern const u32 gItemIconPalette_PowderJar[]; extern const u32 gItemIcon_Gem[]; extern const u32 gItemIconPalette_Ruby[]; extern const u32 gItemIconPalette_Sapphire[]; -// Emerald-only key items -extern const u32 gItemIcon_MagmaEmblem[]; -extern const u32 gItemIconPalette_MagmaEmblem[]; -extern const u32 gItemIcon_OldSeaMap[]; -extern const u32 gItemIconPalette_OldSeaMap[]; extern const u32 gItemIcon_ReturnToFieldArrow[]; extern const u32 gItemIconPalette_ReturnToFieldArrow[]; //menu graphics -extern const u16 gFireRedMenuElements1_Pal[16]; -extern const u16 gFireRedMenuElements2_Pal[16]; -extern const u16 gFireRedMenuElements3_Pal[16]; -extern const u8 gFireRedMenuElements_Gfx[]; +extern const u16 gMenuInfoElements1_Pal[16]; +extern const u16 gMenuInfoElements2_Pal[16]; +extern const u16 gMenuInfoElements3_Pal[16]; +extern const u8 gMenuInfoElements_Gfx[]; // item menu graphics extern const u32 gBagScreen_Gfx[]; @@ -7591,91 +8743,139 @@ extern const u32 gPartyMenuBg_Pal[]; // berry pics extern const u32 gBerryPic_Cheri[]; -extern const u32 gBerryPalette_Cheri[]; extern const u32 gBerryPic_Chesto[]; -extern const u32 gBerryPalette_Chesto[]; extern const u32 gBerryPic_Pecha[]; -extern const u32 gBerryPalette_Pecha[]; extern const u32 gBerryPic_Rawst[]; -extern const u32 gBerryPalette_Rawst[]; extern const u32 gBerryPic_Aspear[]; -extern const u32 gBerryPalette_Aspear[]; extern const u32 gBerryPic_Leppa[]; -extern const u32 gBerryPalette_Leppa[]; extern const u32 gBerryPic_Oran[]; -extern const u32 gBerryPalette_Oran[]; extern const u32 gBerryPic_Persim[]; -extern const u32 gBerryPalette_Persim[]; extern const u32 gBerryPic_Lum[]; -extern const u32 gBerryPalette_Lum[]; extern const u32 gBerryPic_Sitrus[]; -extern const u32 gBerryPalette_Sitrus[]; extern const u32 gBerryPic_Figy[]; -extern const u32 gBerryPalette_Figy[]; extern const u32 gBerryPic_Wiki[]; -extern const u32 gBerryPalette_Wiki[]; extern const u32 gBerryPic_Mago[]; -extern const u32 gBerryPalette_Mago[]; extern const u32 gBerryPic_Aguav[]; -extern const u32 gBerryPalette_Aguav[]; extern const u32 gBerryPic_Iapapa[]; -extern const u32 gBerryPalette_Iapapa[]; extern const u32 gBerryPic_Razz[]; -extern const u32 gBerryPalette_Razz[]; extern const u32 gBerryPic_Bluk[]; -extern const u32 gBerryPalette_Bluk[]; extern const u32 gBerryPic_Nanab[]; -extern const u32 gBerryPalette_Nanab[]; extern const u32 gBerryPic_Wepear[]; -extern const u32 gBerryPalette_Wepear[]; extern const u32 gBerryPic_Pinap[]; -extern const u32 gBerryPalette_Pinap[]; extern const u32 gBerryPic_Pomeg[]; -extern const u32 gBerryPalette_Pomeg[]; extern const u32 gBerryPic_Kelpsy[]; -extern const u32 gBerryPalette_Kelpsy[]; extern const u32 gBerryPic_Qualot[]; -extern const u32 gBerryPalette_Qualot[]; extern const u32 gBerryPic_Hondew[]; -extern const u32 gBerryPalette_Hondew[]; extern const u32 gBerryPic_Grepa[]; -extern const u32 gBerryPalette_Grepa[]; extern const u32 gBerryPic_Tamato[]; -extern const u32 gBerryPalette_Tamato[]; extern const u32 gBerryPic_Cornn[]; -extern const u32 gBerryPalette_Cornn[]; extern const u32 gBerryPic_Magost[]; -extern const u32 gBerryPalette_Magost[]; extern const u32 gBerryPic_Rabuta[]; -extern const u32 gBerryPalette_Rabuta[]; extern const u32 gBerryPic_Nomel[]; -extern const u32 gBerryPalette_Nomel[]; extern const u32 gBerryPic_Spelon[]; -extern const u32 gBerryPalette_Spelon[]; extern const u32 gBerryPic_Pamtre[]; -extern const u32 gBerryPalette_Pamtre[]; extern const u32 gBerryPic_Watmel[]; -extern const u32 gBerryPalette_Watmel[]; extern const u32 gBerryPic_Durin[]; -extern const u32 gBerryPalette_Durin[]; extern const u32 gBerryPic_Belue[]; -extern const u32 gBerryPalette_Belue[]; +extern const u32 gBerryPic_Chilan[]; +extern const u32 gBerryPic_Occa[]; +extern const u32 gBerryPic_Passho[]; +extern const u32 gBerryPic_Wacan[]; +extern const u32 gBerryPic_Rindo[]; +extern const u32 gBerryPic_Yache[]; +extern const u32 gBerryPic_Chople[]; +extern const u32 gBerryPic_Kebia[]; +extern const u32 gBerryPic_Shuca[]; +extern const u32 gBerryPic_Coba[]; +extern const u32 gBerryPic_Payapa[]; +extern const u32 gBerryPic_Tanga[]; +extern const u32 gBerryPic_Charti[]; +extern const u32 gBerryPic_Kasib[]; +extern const u32 gBerryPic_Haban[]; +extern const u32 gBerryPic_Colbur[]; +extern const u32 gBerryPic_Babiri[]; +extern const u32 gBerryPic_Roseli[]; extern const u32 gBerryPic_Liechi[]; -extern const u32 gBerryPalette_Liechi[]; extern const u32 gBerryPic_Ganlon[]; -extern const u32 gBerryPalette_Ganlon[]; extern const u32 gBerryPic_Salac[]; -extern const u32 gBerryPalette_Salac[]; extern const u32 gBerryPic_Petaya[]; -extern const u32 gBerryPalette_Petaya[]; extern const u32 gBerryPic_Apicot[]; -extern const u32 gBerryPalette_Apicot[]; extern const u32 gBerryPic_Lansat[]; -extern const u32 gBerryPalette_Lansat[]; extern const u32 gBerryPic_Starf[]; -extern const u32 gBerryPalette_Starf[]; extern const u32 gBerryPic_Enigma[]; +extern const u32 gBerryPic_Micle[]; +extern const u32 gBerryPic_Custap[]; +extern const u32 gBerryPic_Jaboca[]; +extern const u32 gBerryPic_Rowap[]; +extern const u32 gBerryPic_Kee[]; +extern const u32 gBerryPic_Maranga[]; +extern const u32 gBerryPalette_Cheri[]; +extern const u32 gBerryPalette_Chesto[]; +extern const u32 gBerryPalette_Pecha[]; +extern const u32 gBerryPalette_Rawst[]; +extern const u32 gBerryPalette_Aspear[]; +extern const u32 gBerryPalette_Leppa[]; +extern const u32 gBerryPalette_Oran[]; +extern const u32 gBerryPalette_Persim[]; +extern const u32 gBerryPalette_Lum[]; +extern const u32 gBerryPalette_Sitrus[]; +extern const u32 gBerryPalette_Figy[]; +extern const u32 gBerryPalette_Wiki[]; +extern const u32 gBerryPalette_Mago[]; +extern const u32 gBerryPalette_Aguav[]; +extern const u32 gBerryPalette_Iapapa[]; +extern const u32 gBerryPalette_Razz[]; +extern const u32 gBerryPalette_Bluk[]; +extern const u32 gBerryPalette_Nanab[]; +extern const u32 gBerryPalette_Wepear[]; +extern const u32 gBerryPalette_Pinap[]; +extern const u32 gBerryPalette_Pomeg[]; +extern const u32 gBerryPalette_Kelpsy[]; +extern const u32 gBerryPalette_Qualot[]; +extern const u32 gBerryPalette_Hondew[]; +extern const u32 gBerryPalette_Grepa[]; +extern const u32 gBerryPalette_Tamato[]; +extern const u32 gBerryPalette_Cornn[]; +extern const u32 gBerryPalette_Magost[]; +extern const u32 gBerryPalette_Rabuta[]; +extern const u32 gBerryPalette_Nomel[]; +extern const u32 gBerryPalette_Spelon[]; +extern const u32 gBerryPalette_Pamtre[]; +extern const u32 gBerryPalette_Watmel[]; +extern const u32 gBerryPalette_Durin[]; +extern const u32 gBerryPalette_Belue[]; +extern const u32 gBerryPalette_Chilan[]; +extern const u32 gBerryPalette_Occa[]; +extern const u32 gBerryPalette_Passho[]; +extern const u32 gBerryPalette_Wacan[]; +extern const u32 gBerryPalette_Rindo[]; +extern const u32 gBerryPalette_Yache[]; +extern const u32 gBerryPalette_Chople[]; +extern const u32 gBerryPalette_Kebia[]; +extern const u32 gBerryPalette_Shuca[]; +extern const u32 gBerryPalette_Coba[]; +extern const u32 gBerryPalette_Payapa[]; +extern const u32 gBerryPalette_Tanga[]; +extern const u32 gBerryPalette_Charti[]; +extern const u32 gBerryPalette_Kasib[]; +extern const u32 gBerryPalette_Haban[]; +extern const u32 gBerryPalette_Colbur[]; +extern const u32 gBerryPalette_Babiri[]; +extern const u32 gBerryPalette_Roseli[]; +extern const u32 gBerryPalette_Liechi[]; +extern const u32 gBerryPalette_Ganlon[]; +extern const u32 gBerryPalette_Salac[]; +extern const u32 gBerryPalette_Petaya[]; +extern const u32 gBerryPalette_Apicot[]; +extern const u32 gBerryPalette_Lansat[]; +extern const u32 gBerryPalette_Starf[]; extern const u32 gBerryPalette_Enigma[]; +extern const u32 gBerryPalette_Micle[]; +extern const u32 gBerryPalette_Custap[]; +extern const u32 gBerryPalette_Jaboca[]; +extern const u32 gBerryPalette_Rowap[]; +extern const u32 gBerryPalette_Kee[]; +extern const u32 gBerryPalette_Maranga[]; //pokenav extern const u16 gPokenavCondition_Pal[]; @@ -7704,19 +8904,19 @@ extern const u16 gPokenavRibbonsSummaryBg_Pal[]; extern const u32 gPokenavRibbonsSummaryBg_Gfx[]; extern const u32 gPokenavRibbonsSummaryBg_Tilemap[]; -extern const u32 gPageInfoTilemap[]; -extern const u32 gUnknown_08D98CC8[]; -extern const u32 gPageSkillsTilemap[]; -extern const u32 gPageBattleMovesTilemap[]; -extern const u32 gPageContestMovesTilemap[]; -extern const u32 gStatusScreenPalette[]; -extern const u16 gUnknown_08D85620[]; -extern const u16 gSummaryScreenWindow_Tilemap[]; +extern const u32 gSummaryScreen_Gfx[]; +extern const u32 gSummaryScreen_Pal[]; +extern const u32 gSummaryPage_Info_Tilemap[]; +extern const u32 gSummaryPage_InfoEgg_Tilemap[]; +extern const u32 gSummaryPage_Skills_Tilemap[]; +extern const u32 gSummaryPage_BattleMoves_Tilemap[]; +extern const u32 gSummaryPage_ContestMoves_Tilemap[]; +extern const u16 gPPTextPalette[]; extern const u32 gMoveTypes_Pal[]; -extern const u32 gStatusScreenBitmap[]; -extern const u16 gSummaryScreenPowAcc_Tilemap[]; -extern const u16 gSummaryScreenAppealJam_Tilemap[]; +extern const u16 gSummaryScreen_MoveEffect_Battle_Tilemap[]; +extern const u16 gSummaryScreen_MoveEffect_Contest_Tilemap[]; +extern const u16 gSummaryScreen_MoveEffect_Cancel_Tilemap[]; extern const u32 gMoveTypes_Gfx[]; extern const u32 gSummaryMoveSelect_Gfx[]; @@ -7724,10 +8924,10 @@ extern const u32 gSummaryMoveSelect_Pal[]; extern const u32 gStatusGfx_Icons[]; extern const u32 gStatusPal_Icons[]; -extern const u32 gBuyMenuFrame_Gfx[]; -extern const u32 gBuyMenuFrame_Tilemap[]; -extern const u32 gMenuMoneyGfx[]; -extern const u32 gMenuMoneyPal[]; +extern const u32 gShopMenu_Gfx[]; +extern const u32 gShopMenu_Tilemap[]; +extern const u32 gShopMenu_Pal[]; +extern const u32 gShopMenuMoney_Gfx[]; extern const u32 gBattleInterface_BallStatusBarGfx[]; extern const u8 gBattleInterface_BallDisplayGfx[]; @@ -7735,25 +8935,31 @@ extern const u16 gBattleInterface_BallStatusBarPal[]; extern const u16 gBattleInterface_BallDisplayPal[]; extern const u8 gHealthboxElementsGfxTable[][32]; -extern const u16 gNamingScreenMenu_Pal[]; +extern const u16 gNamingScreenMenu_Pal[6][16]; extern const u32 gNamingScreenMenu_Gfx[]; extern const u32 gNamingScreenBackground_Tilemap[]; extern const u8 gNamingScreenKeyboardUpper_Tilemap[]; extern const u8 gNamingScreenKeyboardLower_Tilemap[]; extern const u8 gNamingScreenKeyboardSymbols_Tilemap[]; -extern const u8 gNamingScreenRWindow_Gfx[]; -extern const u8 gNamingScreenPageButton_Gfx[]; -extern const u8 gNamingScreenROptions_Gfx[]; -extern const u8 gNamingScreenCursor_Gfx[]; -extern const u8 gNamingScreenInputArrow_Gfx[]; -extern const u8 gNamingScreenUnderscore_Gfx[]; +extern const u32 gNamingScreenPageSwapFrame_Gfx[]; +extern const u32 gNamingScreenBackButton_Gfx[]; +extern const u32 gNamingScreenOKButton_Gfx[]; +extern const u32 gNamingScreenPageSwapButton_Gfx[]; +extern const u32 gNamingScreenPageSwapUpper_Gfx[]; +extern const u32 gNamingScreenPageSwapLower_Gfx[]; +extern const u32 gNamingScreenPageSwapOthers_Gfx[]; +extern const u32 gNamingScreenCursor_Gfx[]; +extern const u32 gNamingScreenCursorSquished_Gfx[]; +extern const u32 gNamingScreenCursorFilled_Gfx[]; +extern const u32 gNamingScreenInputArrow_Gfx[]; +extern const u32 gNamingScreenUnderscore_Gfx[]; extern const u32 gPokeblockFeedBg_Tilemap[]; extern const u32 gConfetti_Gfx[]; extern const u32 gConfetti_Pal[]; -extern const u32 gUnknown_08C093F0[]; +extern const u32 gBattleInterfaceGfx_BattleBar[]; extern const u32 gSubstituteDollBackGfx[]; extern const u32 gSubstituteDollFrontGfx[]; extern const u32 gSubstituteDollPal[]; @@ -7766,20 +8972,22 @@ extern const u32 gBlankGfxCompressed[]; extern const u16 gBattleInterface_BallStatusBarPal[]; extern const u16 gBattleInterface_BallDisplayPal[]; -extern const u32 gBagSwapLineGfx[]; -extern const u32 gBagSwapLinePal[]; +extern const u32 gSwapLineGfx[]; +extern const u32 gSwapLinePal[]; -extern const u32 gBattleFrontierGfx_PyramidBag[]; -extern const u32 gBattleFrontierGfx_PyramidBag_Pal[]; -extern const u32 gBattleFrontierGfx_PyramidBagTileMap[]; -extern const u32 gUnknown_08D9AF44[]; -extern const u16 gUnknown_0860F074[]; +extern const u32 gBattlePyramidBag_Gfx[]; +extern const u32 gBattlePyramidBag_Pal[]; +extern const u32 gBattlePyramidBagTilemap[]; +extern const u32 gBattlePyramidBagInterface_Pal[]; +extern const u16 gBattlePyramidFloor_Pal[][16]; + +extern const u16 gStandardMenuPalette[]; extern const u32 gTitleScreenEmeraldVersionGfx[]; extern const u32 gTitleScreenPressStartGfx[]; extern const u32 gTitleScreenPokemonLogoGfx[]; -extern const u32 gUnknown_08DE0644[]; -extern const u32 gUnknown_08DDE458[]; +extern const u32 gTitleScreenPokemonLogoTilemap[]; +extern const u32 gTitleScreenCloudsTilemap[]; extern const u16 gTitleScreenBgPalettes[]; extern const u16 gTitleScreenPressStartPal[]; extern const u16 gTitleScreenEmeraldVersionPal[]; @@ -7791,11 +8999,11 @@ extern const u32 gDomeTourneyInfoCardBg_Tilemap[]; extern const u32 gDomeTourneyTree_Pal[]; extern const u32 gDomeTourneyTreeButtons_Pal[]; extern const u32 gDomeTourneyMatchCardBg_Pal[]; -extern const u32 gDomeTourneyBg_Gfx[]; +extern const u32 gDomeTourneyTree_Gfx[]; extern const u32 gDomeTourneyLine_Gfx[]; extern const u32 gDomeTourneyLineDown_Tilemap[]; extern const u32 gDomeTourneyLineUp_Tilemap[]; -extern const u32 gDomeTourneyLineMask_Tilemap[]; +extern const u32 gDomeTourneyTree_Tilemap[]; extern const u32 gDomeTourneyTreeButtons_Gfx[]; extern const u16 gTilesetAnims_BattleDomePals0_0[]; extern const u16 gTilesetAnims_BattleDomePals0_1[]; @@ -7819,6 +9027,8 @@ extern const u32 gBattleAnimSpriteGfx_AirWave[]; extern const u32 gBattleAnimSpriteGfx_Orb[]; extern const u32 gBattleAnimSpriteGfx_Sword[]; extern const u32 gBattleAnimSpriteGfx_Seed[]; +extern const u32 gBattleAnimSpriteGfx_SeedBrown[]; +extern const u32 gBattleAnimSpriteGfx_Feint[]; extern const u32 gBattleAnimSpriteGfx_Explosion6[]; extern const u32 gBattleAnimSpriteGfx_PinkOrb[]; extern const u32 gBattleAnimSpriteGfx_Gust[]; @@ -7948,6 +9158,7 @@ extern const u32 gBattleAnimSpriteGfx_Smoke[]; extern const u32 gBattleAnimSpriteGfx_Smoke2[]; extern const u32 gBattleAnimSpriteGfx_Impact[]; extern const u32 gBattleAnimSpriteGfx_Particles[]; +extern const u32 gBattleAnimSpriteGfx_Particles2[]; extern const u32 gBattleAnimSpriteGfx_CircleImpact[]; extern const u32 gBattleAnimSpriteGfx_Scratch[]; extern const u32 gBattleAnimSpriteGfx_Cut[]; @@ -8091,6 +9302,21 @@ extern const u32 gBattleAnimBgTilemap_ScaryFaceOpponent[]; extern const u32 gBattleAnimBgTilemap_ScaryFaceContest[]; extern const u32 gBattleAnimSpriteGfx_Bird[]; extern const u32 gBattleAnimSpriteGfx_CrossImpact[]; +extern const u32 gBattleAnimSpriteGfx_TrumpCard[]; +extern const u32 gBattleAnimSpriteGfx_TrumpCardParticles[]; +extern const u32 gBattleAnimSpriteGfx_Accupressure[]; +extern const u32 gBattleAnimSpriteGfx_WringOut[]; +extern const u32 gBattleAnimSpriteGfx_ColoredOrbs[]; +extern const u32 gBattleAnimSpriteGfx_WorrySeed[]; +extern const u32 gBattleAnimSpriteGfx_SmallCloud[]; +extern const u32 gBattleAnimSpriteGfx_AttackOrder[]; +extern const u32 gBattleAnimSpriteGfx_DragonPulse[]; +extern const u32 gBattleAnimSpriteGfx_WoodHammer[]; +extern const u32 gBattleAnimSpriteGfx_PsychoCut[]; +extern const u32 gBattleAnimSpriteGfx_PowerGem[]; +extern const u32 gBattleAnimSpriteGfx_StoneEdge[]; +extern const u32 gBattleAnimSpriteGfx_StealthRock[]; +extern const u32 gBattleAnimSpriteGfx_PoisonJab[]; extern const u32 gBattleAnimSpritePal_Bone[]; extern const u32 gBattleAnimSpritePal_Spark[]; @@ -8099,6 +9325,8 @@ extern const u32 gBattleAnimSpritePal_AirWave[]; extern const u32 gBattleAnimSpritePal_Orb[]; extern const u32 gBattleAnimSpritePal_Sword[]; extern const u32 gBattleAnimSpritePal_Seed[]; +extern const u32 gBattleAnimSpritePal_SeedBrown[]; +extern const u32 gBattleAnimSpritePal_Feint[]; extern const u32 gBattleAnimSpritePal_Explosion6[]; extern const u32 gBattleAnimSpritePal_PinkOrb[]; extern const u32 gBattleAnimSpritePal_Gust[]; @@ -8228,6 +9456,7 @@ extern const u32 gBattleAnimSpritePal_Tongue[]; extern const u32 gBattleAnimSpritePal_Smoke[]; extern const u32 gBattleAnimSpritePal_Smoke[]; extern const u32 gBattleAnimSpritePal_Impact[]; +extern const u32 gBattleAnimSpritePal_Particles2[]; extern const u32 gBattleAnimSpritePal_CircleImpact[]; extern const u32 gBattleAnimSpritePal_Impact[]; extern const u32 gBattleAnimSpritePal_Impact[]; @@ -8307,9 +9536,9 @@ extern const u32 gBattleAnimSpritePal_RedHeart[]; extern const u32 gBattleAnimSpritePal_RedOrb[]; extern const u32 gBattleAnimSpritePal_EyeSparkle[]; extern const u32 gBattleAnimSpritePal_PinkHeart[]; -extern const u32 gBattleAnimBgImage_Attract; -extern const u32 gBattleAnimBgPalette_Attract; -extern const u32 gBattleAnimBgTilemap_Attract; +extern const u32 gBattleAnimBgImage_Attract[]; +extern const u32 gBattleAnimBgPalette_Attract[]; +extern const u32 gBattleAnimBgTilemap_Attract[]; extern const u32 gBattleAnimSpritePal_Angel[]; extern const u32 gBattleAnimSpritePal_Devil[]; extern const u32 gBattleAnimSpritePal_Swipe[]; @@ -8350,6 +9579,7 @@ extern const u32 gBattleAnimSpritePal_MagnifyingGlass[]; extern const u32 gBattleAnimSpritePal_BrownOrb[]; extern const u32 gBattleAnimSpritePal_MetalSoundWaves[]; extern const u32 gBattleAnimSpritePal_FlyingDirt[]; +extern const u32 gBattleAnimSpritePal_Windstorm[]; extern const u32 gBattleAnimSpritePal_IcicleSpear[]; extern const u32 gBattleAnimSpritePal_Hail[]; extern const u32 gBattleAnimSpritePal_GlowyRedOrb[]; @@ -8374,6 +9604,203 @@ extern const u32 gBattleAnimSpritePal_CrossImpact[]; extern const u32 gBattleAnimSpritePal_Slash2[]; extern const u32 gBattleAnimSpritePal_WhipHit[]; extern const u32 gBattleAnimSpritePal_BlueRing2[]; +extern const u32 gBattleAnimSpritePal_TrumpCard[]; +extern const u32 gBattleAnimSpritePal_TrumpCardParticles[]; +extern const u32 gBattleAnimSpritePal_Accupressure[]; +extern const u32 gBattleAnimSpritePal_WringOut[]; +extern const u32 gBattleAnimSpritePal_ColoredOrbs[]; +extern const u32 gBattleAnimSpritePal_WorrySeed[]; +extern const u32 gBattleAnimSpritePal_SmallCloud[]; +extern const u32 gBattleAnimSpritePal_AttackOrder[]; +extern const u32 gBattleAnimSpritePal_DragonPulse[]; +extern const u32 gBattleAnimSpritePal_WoodHammer[]; +extern const u32 gBattleAnimSpritePal_PsychoCut[]; +extern const u32 gBattleAnimSpritePal_PowerGem[]; +extern const u32 gBattleAnimSpritePal_StoneEdge[]; +extern const u32 gBattleAnimSpritePal_StealthRock[]; +extern const u32 gBattleAnimSpritePal_PoisonJab[]; +// New Battle Anim Particles +extern const u32 gBattleAnimSpriteGfx_WhiteStreak[]; +extern const u32 gBattleAnimSpritePal_WhiteStreak[]; +extern const u32 gBattleAnimSpriteGfx_PurpleJab[]; +extern const u32 gBattleAnimSpritePal_PurpleJab[]; +extern const u32 gBattleAnimSpritePal_ToxicSpikes[]; +extern const u32 gBattleAnimSpriteGfx_EnergyBall[]; +extern const u32 gBattleAnimSpritePal_EnergyBall[]; +extern const u32 gBattleAnimSpriteGfx_MegaStone[]; +extern const u32 gBattleAnimSpritePal_MegaStone[]; +extern const u32 gBattleAnimSpriteGfx_MegaParticles[]; +extern const u32 gBattleAnimSpritePal_MegaParticles[]; +extern const u32 gBattleAnimSpriteGfx_PrimalParticles[]; +extern const u32 gBattleAnimSpritePal_PrimalParticles[]; +extern const u32 gBattleAnimSpriteGfx_MegaSymbol[]; +extern const u32 gBattleAnimSpritePal_MegaSymbol[]; +extern const u32 gBattleAnimSpriteGfx_FlashCannonBall[]; +extern const u32 gBattleAnimSpritePal_FlashCannonBall[]; +extern const u32 gBattleAnimSpriteGfx_WaterGun[]; +extern const u32 gBattleAnimSpritePal_WaterGun[]; +extern const u32 gBattleAnimSpriteGfx_Punishment[]; +extern const u32 gBattleAnimSpritePal_Punishment[]; +extern const u32 gBattleAnimSpriteGfx_QuickGuard[]; +extern const u32 gBattleAnimSpritePal_QuickGuard[]; + +// New Battle Anim Particles +extern const u32 gBattleAnimSpriteGfx_AcupressureFinger[]; +extern const u32 gBattleAnimSpritePal_AcupressureFinger[]; +extern const u32 gBattleAnimSpriteGfx_AlphaStone[]; +extern const u32 gBattleAnimSpritePal_AlphaStone[]; +extern const u32 gBattleAnimSpriteGfx_AlphaSymbol[]; +extern const u32 gBattleAnimSpritePal_AlphaSymbol[]; +extern const u32 gBattleAnimSpriteGfx_Anchor[]; +extern const u32 gBattleAnimSpriteGfx_Apple[]; +extern const u32 gBattleAnimSpritePal_Apple[]; +extern const u32 gBattleAnimSpriteGfx_Arrows[]; +extern const u32 gBattleAnimSpriteGfx_AssuranceHand[]; +extern const u32 gBattleAnimSpritePal_AssuranceHand[]; +extern const u32 gBattleAnimSpriteGfx_AuraSphere[]; +extern const u32 gBattleAnimSpritePal_AuraSphere[]; +extern const u32 gBattleAnimSpritePal_AvalancheRocks[]; +extern const u32 gBattleAnimSpriteGfx_NewPokeball[]; +extern const u32 gBattleAnimSpritePal_NewPokeball[]; +extern const u32 gBattleAnimSpriteGfx_BerryEaten[]; +extern const u32 gBattleAnimSpritePal_BerryEaten[]; +extern const u32 gBattleAnimSpriteGfx_BerryNormal[]; +extern const u32 gBattleAnimSpritePal_BerryNormal[]; +extern const u32 gBattleAnimSpriteGfx_BigRock[]; +extern const u32 gBattleAnimSpritePal_BigRock[]; +extern const u32 gBattleAnimSpriteGfx_BlacephalonHead[]; +extern const u32 gBattleAnimSpritePal_BlacephalonHead[]; +extern const u32 gBattleAnimSpritePal_BlueFlare[]; +extern const u32 gBattleAnimSpriteGfx_Branch[]; +extern const u32 gBattleAnimSpritePal_Branch[]; +extern const u32 gBattleAnimSpriteGfx_Brine[]; +extern const u32 gBattleAnimSpritePal_Brine[]; +extern const u32 gBattleAnimSpriteGfx_ChainLink[]; +extern const u32 gBattleAnimSpritePal_ChainLink[]; +extern const u32 gBattleAnimSpriteGfx_Chop[]; +extern const u32 gBattleAnimSpritePal_Chop[]; +extern const u32 gBattleAnimSpriteGfx_Cacoon[]; +extern const u32 gBattleAnimSpritePal_Cacoon[]; +extern const u32 gBattleAnimSpriteGfx_Confide[]; +extern const u32 gBattleAnimSpritePal_Confide[]; +extern const u32 gBattleAnimSpriteGfx_CraftyShield[]; +extern const u32 gBattleAnimSpritePal_CraftyShield[]; +extern const u32 gBattleAnimSpriteGfx_NewNail[]; +extern const u32 gBattleAnimSpritePal_NewNail[]; +extern const u32 gBattleAnimSpritePal_DracoMeteor[]; +extern const u32 gBattleAnimSpriteGfx_DragonPulseRing[]; +extern const u32 gBattleAnimSpritePal_DragonPulseRing[]; +extern const u32 gBattleAnimSpriteGfx_DreepyMissile[]; +extern const u32 gBattleAnimSpritePal_DreepyMissile[]; +extern const u32 gBattleAnimSpriteGfx_Drill[]; +extern const u32 gBattleAnimSpritePal_Drill[]; +extern const u32 gBattleAnimSpriteGfx_NewEmbers[]; +extern const u32 gBattleAnimSpritePal_NewEmbers[]; +extern const u32 gBattleAnimSpriteGfx_FairyLockChains[]; +extern const u32 gBattleAnimSpriteGfx_Fishies[]; +extern const u32 gBattleAnimSpritePal_Fishies[]; +extern const u32 gBattleAnimSpriteGfx_NewFly[]; +extern const u32 gBattleAnimSpritePal_NewFly[]; +extern const u32 gBattleAnimSpritePal_FusionFlare[]; +extern const u32 gBattleAnimSpritePal_GarbagePoisonPillar[]; +extern const u32 gBattleAnimSpriteGfx_Gear[]; +extern const u32 gBattleAnimSpritePal_Gear[]; +extern const u32 gBattleAnimSpriteGfx_GigavoltHavocSpear[]; +extern const u32 gBattleAnimSpritePal_GigavoltHavocSpear[]; +extern const u32 gBattleAnimSpriteGfx_GoldenApple[]; +extern const u32 gBattleAnimSpritePal_GoldenApple[]; +extern const u32 gBattleAnimSpritePal_GreenDrake[]; +extern const u32 gBattleAnimSpriteGfx_NewGreenStar[]; +extern const u32 gBattleAnimSpritePal_NewGreenStar[]; +extern const u32 gBattleAnimSpriteGfx_HeartStamp[]; +extern const u32 gBattleAnimSpritePal_HeartStamp[]; +extern const u32 gBattleAnimSpriteGfx_ZygardeHexes[]; +extern const u32 gBattleAnimSpritePal_ZygardeHexes[]; +extern const u32 gBattleAnimSpriteGfx_HoopaHand[]; +extern const u32 gBattleAnimSpritePal_HoopaHand[]; +extern const u32 gBattleAnimSpriteGfx_HoopaRing[]; +extern const u32 gBattleAnimSpritePal_HoopaRing[]; +extern const u32 gBattleAnimSpriteGfx_NewHornHit[]; +extern const u32 gBattleAnimSpritePal_NewHornHit[]; +extern const u32 gBattleAnimSpriteGfx_HornLeech[]; +extern const u32 gBattleAnimSpritePal_HornLeech[]; +extern const u32 gBattleAnimSpriteGfx_HorseshoeFist[]; +extern const u32 gBattleAnimSpritePal_HorseshoeFist[]; +extern const u32 gBattleAnimSpriteGfx_HydroPump[]; +extern const u32 gBattleAnimSpritePal_HydroPump[]; +extern const u32 gBattleAnimSpriteGfx_IceRock[]; +extern const u32 gBattleAnimSpritePal_IceRock[]; +extern const u32 gBattleAnimSpriteGfx_LargeSpike[]; +extern const u32 gBattleAnimSpritePal_LargeSpike[]; +extern const u32 gBattleAnimSpriteGfx_NewLeaf[]; +extern const u32 gBattleAnimSpritePal_NewLeaf[]; +extern const u32 gBattleAnimSpriteGfx_NewLeechSeed[]; +extern const u32 gBattleAnimSpritePal_NewLeechSeed[]; +extern const u32 gBattleAnimSpriteGfx_LightningRain[]; +extern const u32 gBattleAnimSpritePal_LightningRain[]; +extern const u32 gBattleAnimSpriteGfx_NewEye[]; +extern const u32 gBattleAnimSpritePal_NewEye[]; +extern const u32 gBattleAnimSpriteGfx_MetalBits[]; +extern const u32 gBattleAnimSpriteGfx_MudBomb[]; +extern const u32 gBattleAnimSpritePal_MudBomb[]; +extern const u32 gBattleAnimSpriteGfx_Mushroom[]; +extern const u32 gBattleAnimSpritePal_Mushroom[]; +extern const u32 gBattleAnimSpritePal_NaturalGiftRing[]; +extern const u32 gBattleAnimSpriteGfx_NecrozmaStar[]; +extern const u32 gBattleAnimSpritePal_NecrozmaStar[]; +extern const u32 gBattleAnimSpritePal_NewImpact[]; +extern const u32 gBattleAnimSpriteGfx_Obstruct[]; +extern const u32 gBattleAnimSpritePal_Obstruct[]; +extern const u32 gBattleAnimSpriteGfx_OmegaStone[]; +extern const u32 gBattleAnimSpritePal_OmegaStone[]; +extern const u32 gBattleAnimSpriteGfx_OmegaSymbol[]; +extern const u32 gBattleAnimSpritePal_OmegaSymbol[]; +extern const u32 gBattleAnimSpriteGfx_PinkDiamond[]; +extern const u32 gBattleAnimSpritePal_PinkDiamond[]; +extern const u32 gBattleAnimSpriteGfx_PoisonColumn[]; +extern const u32 gBattleAnimSpritePal_PoisonColumn[]; +extern const u32 gBattleAnimSpriteGfx_PowerTrick[]; +extern const u32 gBattleAnimSpritePal_PowerTrick[]; +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_RocksSmall[]; +extern const u32 gBattleAnimSpriteGfx_NewRocks[]; +extern const u32 gBattleAnimSpritePal_NewRocks[]; +extern const u32 gBattleAnimSpriteGfx_ShellLeft[]; +extern const u32 gBattleAnimSpritePal_ShellLeft[]; +extern const u32 gBattleAnimSpriteGfx_ShellRight[]; +extern const u32 gBattleAnimSpritePal_SpacialRendSlices[]; +extern const u32 gBattleAnimSpriteGfx_NewSpikes[]; +extern const u32 gBattleAnimSpritePal_NewSpikes[]; +extern const u32 gBattleAnimSpriteGfx_SpiritShackleArrow[]; +extern const u32 gBattleAnimSpritePal_SpiritShackleArrow[]; +extern const u32 gBattleAnimSpriteGfx_SteamEruption[]; +extern const u32 gBattleAnimSpritePal_SteamEruption[]; +extern const u32 gBattleAnimSpriteGfx_Steamroller[]; +extern const u32 gBattleAnimSpritePal_Steamroller[]; +extern const u32 gBattleAnimSpriteGfx_StonePillar[]; +extern const u32 gBattleAnimSpritePal_StonePillar[]; +extern const u32 gBattleAnimSpriteGfx_StraightBeam[]; +extern const u32 gBattleAnimSpritePal_StraightBeam[]; +extern const u32 gBattleAnimSpritePal_Poltergeist[]; +extern const u32 gBattleAnimSpriteGfx_SubstituteBack[]; +extern const u32 gBattleAnimSpriteGfx_SubstituteFront[]; +extern const u32 gBattleAnimSpritePal_SubstituteFront[]; +extern const u32 gBattleAnimSpritePal_NewSurf[]; +extern const u32 gBattleAnimSpriteGfx_NewSword[]; +extern const u32 gBattleAnimSpritePal_NewSword[]; +extern const u32 gBattleAnimSpriteGfx_NewTeeth[]; +extern const u32 gBattleAnimSpritePal_NewTeeth[]; +extern const u32 gBattleAnimSpriteGfx_NewHandsAndFeet[]; +extern const u32 gBattleAnimSpritePal_NewHandsAndFeet[]; +extern const u32 gBattleAnimSpriteGfx_Tornado[]; +extern const u32 gBattleAnimSpritePal_Tornado[]; +extern const u32 gBattleAnimSpriteGfx_ZMoveSymbol[]; +extern const u32 gBattleAnimSpritePal_ZMoveSymbol[]; extern const u32 gBattleAnimBgImage_Dark[]; extern const u32 gBattleAnimBgImage_Ghost[]; @@ -8388,6 +9815,20 @@ extern const u32 gBattleAnimBgImage_Cosmic[]; extern const u32 gBattleAnimBgImage_InAir[]; extern const u32 gBattleAnimBgImage_Aurora[]; extern const u32 gBattleAnimBgImage_Fissure[]; +extern const u32 gBattleAnimBgImage_TrickRoom[]; +extern const u32 gBattleAnimBgImage_Hurricane[]; +extern const u32 gBattleAnimBgPalette_Hurricane[]; +extern const u32 gBattleAnimBgTilemap_Hurricane[]; +extern const u32 gBattleAnimBgPalette_RockWrecker[]; +extern const u32 gBattleAnimBgTilemap_GigaImpactPlayer[]; +extern const u32 gBattleAnimBgTilemap_GigaImpactOpponent[]; +extern const u32 gBattleAnimBgTilemap_GigaImpactContest[]; +extern const u32 gBattleAnimBgImage_GigaImpact[]; +extern const u32 gBattleAnimBgPalette_GigaImpact[]; +extern const u32 gBattleAnimBgImage_SpacialRend[]; +extern const u32 gBattleAnimBgPalette_SpacialRend[]; +extern const u32 gBattleAnimBgPalette_DarkVoid[]; +extern const u32 gBattleAnimBgTilemap_DarkVoid[]; extern const u32 gBattleAnimBgPalette_Dark[]; extern const u32 gBattleAnimBgPalette_Ghost[]; extern const u32 gBattleAnimBgPalette_Psychic[]; @@ -8403,7 +9844,9 @@ extern const u32 gBattleAnimBgPalette_Sky[]; extern const u32 gBattleAnimBgPalette_Aurora[]; extern const u32 gBattleAnimBgPalette_Fissure[]; extern const u32 gBattleAnimBgPalette_Bug[]; -extern const u32 gBattleAnimBgPalette_Solarbeam[]; +extern const u32 gBattleAnimBgPalette_SolarBeam[]; +extern const u32 gBattleAnimBgPalette_MagmaStorm[]; +extern const u32 gBattleAnimBgPalette_TrickRoom[]; extern const u32 gBattleAnimBgTilemap_Dark[]; extern const u32 gBattleAnimBgTilemap_Ghost[]; extern const u32 gBattleAnimBgTilemap_Psychic[]; @@ -8414,6 +9857,7 @@ extern const u32 gBattleAnimBgTilemap_Drill[]; extern const u32 gBattleAnimBgTilemap_DrillContests[]; extern const u32 gBattleAnimBgTilemap_HighspeedOpponent[]; extern const u32 gBattleAnimBgTilemap_HighspeedPlayer[]; +extern const u32 gBattleAnimBgTilemap_TrickRoom[]; extern const u32 gBattleAnimMaskImage_LightBeam[]; extern const u32 gBattleAnimMaskPalette_LightBeam[]; extern const u32 gBattleAnimMaskTilemap_LightBeam[]; @@ -8426,6 +9870,107 @@ extern const u32 gBattleAnimBgTilemap_Cosmic[]; extern const u32 gBattleAnimBgTilemap_InAir[]; extern const u32 gBattleAnimBgTilemap_Aurora[]; extern const u32 gBattleAnimBgTilemap_Fissure[]; +extern const u32 gBattleAnimBgPalette_SludgeWave[]; +extern const u32 gBattleAnimBgImage_Aeroblast[]; +extern const u32 gBattleAnimBgPalette_Aeroblast[]; +extern const u32 gBattleAnimBgTilemap_Aeroblast[]; +extern const u32 gBattleAnimBgPalette_AuraSphere[]; +extern const u32 gBattleAnimBgImage_BlackholeEclipse[]; +extern const u32 gBattleAnimBgPalette_BlackholeEclipse[]; +extern const u32 gBattleAnimBgTilemap_BlackholeEclipse[]; +extern const u32 gBattleAnimBgImage_BloomDoom[]; +extern const u32 gBattleAnimBgPalette_BloomDoom[]; +extern const u32 gBattleAnimBgTilemap_BloomDoom[]; +extern const u32 gBattleAnimBgImage_BoltStrike[]; +extern const u32 gBattleAnimBgPalette_BoltStrike[]; +extern const u32 gBattleAnimBgTilemap_BoltStrike[]; +extern const u32 gBattleAnimBgImage_ClangorousSoulblaze[]; +extern const u32 gBattleAnimBgPalette_ClangorousSoulblaze[]; +extern const u32 gBattleAnimBgTilemap_ClangorousSoulblaze[]; +extern const u32 gBattleAnimBgPalette_DynamaxCannon[]; +extern const u32 gBattleAnimBgImage_ElectricTerrain[]; +extern const u32 gBattleAnimBgPalette_ElectricTerrain[]; +extern const u32 gBattleAnimBgTilemap_ElectricTerrain[]; +extern const u32 gBattleAnimBgImage_Fire1[]; +extern const u32 gBattleAnimBgPalette_Fire1[]; +extern const u32 gBattleAnimBgTilemap_Fire1[]; +extern const u32 gBattleAnimBgPalette_Fire2[]; +extern const u32 gBattleAnimBgImage_FocusBlast[]; +extern const u32 gBattleAnimBgPalette_FocusBlast[]; +extern const u32 gBattleAnimBgTilemap_FocusBlast[]; +extern const u32 gBattleAnimBgPalette_GarbageFalls[]; +extern const u32 gBattleAnimBgImage_GrassyTerrain[]; +extern const u32 gBattleAnimBgPalette_GrassyTerrain[]; +extern const u32 gBattleAnimBgTilemap_GrassyTerrain[]; +extern const u32 gBattleAnimBgPalette_GunkShot[]; +extern const u32 gBattleAnimBgImage_HydroCannon[]; +extern const u32 gBattleAnimBgPalette_HydroCannon[]; +extern const u32 gBattleAnimBgTilemap_HydroCannon[]; +extern const u32 gBattleAnimBgImage_HydroPump[]; +extern const u32 gBattleAnimBgPalette_HydroPump[]; +extern const u32 gBattleAnimBgTilemap_HydroPump[]; +extern const u32 gBattleAnimBgPalette_HyperBeam[]; +extern const u32 gBattleAnimBgPalette_HyperspaceFury[]; +extern const u32 gBattleAnimBgImage_InfernoOverdrive[]; +extern const u32 gBattleAnimBgPalette_InfernoOverdrive[]; +extern const u32 gBattleAnimBgTilemap_InfernoOverdrive[]; +extern const u32 gBattleAnimBgImage_LeafStorm[]; +extern const u32 gBattleAnimBgPalette_LeafStorm[]; +extern const u32 gBattleAnimBgTilemap_LeafStorm[]; +extern const u32 gBattleAnimBgPalette_MagicRoom[]; +extern const u32 gBattleAnimBgImage_MaliciousMoonsault[]; +extern const u32 gBattleAnimBgPalette_MaliciousMoonsault[]; +extern const u32 gBattleAnimBgTilemap_MaliciousMoonsault[]; +extern const u32 gBattleAnimBgImage_MaxLightning[]; +extern const u32 gBattleAnimBgPalette_MaxLightning[]; +extern const u32 gBattleAnimBgTilemap_MaxLightning[]; +extern const u32 gBattleAnimBgImage_MistyTerrain[]; +extern const u32 gBattleAnimBgPalette_MistyTerrain[]; +extern const u32 gBattleAnimBgTilemap_MistyTerrain[]; +extern const u32 gBattleAnimBgImage_NeverendingNightmare[]; +extern const u32 gBattleAnimBgPalette_NeverendingNightmare[]; +extern const u32 gBattleAnimBgTilemap_NeverendingNightmare[]; +extern const u32 gBattleAnimBgImage_Nightmare[]; +extern const u32 gBattleAnimBgPalette_Nightmare[]; +extern const u32 gBattleAnimBgTilemap_Nightmare[]; +extern const u32 gBattleAnimBgPalette_PoisonFalls[]; +extern const u32 gBattleAnimBgPalette_PsychicNew[]; +extern const u32 gBattleAnimBgImage_PsychicTerrain[]; +extern const u32 gBattleAnimBgPalette_PsychicTerrain[]; +extern const u32 gBattleAnimBgTilemap_PsychicTerrain[]; +extern const u32 gBattleAnimBgImage_ShatteredPsyche[]; +extern const u32 gBattleAnimBgPalette_ShatteredPsyche[]; +extern const u32 gBattleAnimBgTilemap_ShatteredPsyche[]; +extern const u32 gBattleAnimBgImage_SkyDay[]; +extern const u32 gBattleAnimBgPalette_SkyDay[]; +extern const u32 gBattleAnimBgTilemap_SkyDay[]; +extern const u32 gBattleAnimBgPalette_SkyAfternoon[]; +extern const u32 gBattleAnimBgPalette_SkyNight[]; +extern const u32 gBattleAnimBgImage_SnuggleForever[]; +extern const u32 gBattleAnimBgPalette_SnuggleForever[]; +extern const u32 gBattleAnimBgTilemap_SnuggleForever[]; +extern const u32 gBattleAnimBgImage_SoulStealing7StarStrike[]; +extern const u32 gBattleAnimBgPalette_SoulStealing7StarStrike[]; +extern const u32 gBattleAnimBgTilemap_SoulStealing7StarStrike[]; +extern const u32 gBattleAnimBgPalette_TectonicRage[]; +extern const u32 gBattleAnimBgImage_TwinkleTackle[]; +extern const u32 gBattleAnimBgPalette_TwinkleTackle[]; +extern const u32 gBattleAnimBgTilemap_TwinkleTackle[]; +extern const u32 gBattleAnimBgImage_WaterPulse[]; +extern const u32 gBattleAnimBgPalette_WaterPulse[]; +extern const u32 gBattleAnimBgTilemap_WaterPulse[]; +extern const u32 gBattleAnimBgImage_Waterfall[]; +extern const u32 gBattleAnimBgPalette_Waterfall[]; +extern const u32 gBattleAnimBgTilemap_Waterfall[]; +extern const u32 gBattleAnimBgPalette_WonderRoom[]; +extern const u32 gBattleAnimBgImage_ZMoveActivate[]; +extern const u32 gBattleAnimBgPalette_ZMoveActivate[]; +extern const u32 gBattleAnimBgTilemap_ZMoveActivate[]; +extern const u32 gBattleAnimBgImage_ZMoveMountain[]; +extern const u32 gBattleAnimBgPalette_ZMoveMountain[]; +extern const u32 gBattleAnimBgTilemap_ZMoveMountain[]; +extern const u32 gBattleAnimSpritePal_SteelBeam[]; +extern const u32 gBattleAnimBgPalette_SteelBeam[]; extern const u32 gMetalShineGfx[]; extern const u32 gMetalShinePalette[]; @@ -8445,15 +9990,15 @@ extern const u32 gBattleStatMask6_Pal[]; extern const u32 gBattleStatMask7_Pal[]; extern const u32 gBattleStatMask8_Pal[]; -extern const u32 gContestMiscGfx[]; +extern const u32 gContestInterfaceGfx[]; extern const u32 gContestAudienceGfx[]; extern const u8 gContestApplauseMeterGfx[]; extern const u8 gContestNextTurnNumbersGfx[]; extern const u8 gContestNextTurnRandomGfx[]; -extern const u32 gOldContestGfx[]; -extern const u32 gOldContestPalette[]; -extern const u32 gUnknown_08C17170[]; -extern const u32 gUnknown_08C17980[]; +extern const u32 gContestAudienceTilemap[]; +extern const u32 gContestInterfaceAudiencePalette[]; +extern const u32 gContestInterfaceTilemap[]; +extern const u32 gContestCurtainTilemap[]; extern const u32 gContestSliderHeart_Gfx[]; extern const u32 gContestNextTurnGfx[]; extern const u16 gContestPal[]; @@ -8461,7 +10006,7 @@ extern const u32 gContestFaces_Gfx[]; extern const u32 gContestApplauseGfx[]; extern const u32 gContestJudgeGfx[]; extern const u32 gContestJudgeSymbolsGfx[]; -extern const u32 gContest3Pal[]; +extern const u32 gContestJudgeSymbolsPal[]; extern const u32 gBattleAnimBgTilemap_SurfOpponent[]; extern const u32 gBattleAnimBgTilemap_SurfPlayer[]; @@ -8542,6 +10087,9 @@ extern const u16 gSlotMachineReelTimePikachu_Pal[]; extern const u32 gBattleAnimBgTilemap_Sandstorm[]; extern const u32 gBattleAnimBgImage_Sandstorm[]; +extern const u32 gBattleAnimBgTilemap_Windstorm[]; +extern const u32 gBattleAnimBgImage_Windstorm[]; + // Pokedex Area Screen extern const u32 gPokedexAreaScreenAreaUnknown_Gfx[]; extern const u16 gPokedexAreaScreenAreaUnknown_Pal[]; @@ -8571,7 +10119,7 @@ extern const u16 gCableCar_Pal[]; // Trade extern const u16 gTradeMenu_Pal[]; extern const u8 gTradeMenu_Gfx[]; -extern const u16 gUnknown_08DDCF04[]; +extern const u16 gTradeMenu_Tilemap[]; extern const u16 gTradeGba2_Pal[]; extern const u8 gTradeGba_Gfx[]; extern const u16 gTradeMenuMonBox_Tilemap[]; @@ -8672,7 +10220,7 @@ extern const u16 gUsePokeblockCondition_Pal[]; // Berry Crush extern const u32 gBerryCrush_Crusher_Gfx[]; extern const u16 gBerryCrush_Crusher_Pal[]; -extern const u32 gBerryCrush_Crusher_Tilemap[]; +extern const u32 gBerryCrush_TextWindows_Tilemap[]; // Pokenav extern const u32 gPokenavMessageBox_Gfx[]; diff --git a/include/gym_leader_rematch.h b/include/gym_leader_rematch.h index dd9ead8b7a..b31fb5e228 100644 --- a/include/gym_leader_rematch.h +++ b/include/gym_leader_rematch.h @@ -66,7 +66,7 @@ enum { REMATCH_TRENT, REMATCH_SAWYER, REMATCH_KIRA_AND_DAN, - REMATCH_WALLY_3, // Entries above WALLY are considered normal trainers, from Wally below are special trainers + REMATCH_WALLY_VR, // Entries above WALLY are considered normal trainers, from Wally below are special trainers REMATCH_ROXANNE, REMATCH_BRAWLY, REMATCH_WATTSON, @@ -75,7 +75,7 @@ enum { REMATCH_WINONA, REMATCH_TATE_AND_LIZA, REMATCH_JUAN, - REMATCH_SIDNEY, // Entries below SIDNEY are considered part of REMATCH_ELITE_FOUR_ENTRIES. + REMATCH_SIDNEY, // Entries from SIDNEY below are considered part of REMATCH_ELITE_FOUR_ENTRIES. REMATCH_PHOEBE, REMATCH_GLACIA, REMATCH_DRAKE, @@ -83,7 +83,7 @@ enum { REMATCH_TABLE_ENTRIES // The total number of rematch entries. Must be last in enum }; -#define REMATCH_SPECIAL_TRAINER_START REMATCH_WALLY_3 +#define REMATCH_SPECIAL_TRAINER_START REMATCH_WALLY_VR #define REMATCH_ELITE_FOUR_ENTRIES REMATCH_SIDNEY void UpdateGymLeaderRematch(void); diff --git a/include/international_string_util.h b/include/international_string_util.h index fe7e85b41f..b0ac8afb6b 100644 --- a/include/international_string_util.h +++ b/include/international_string_util.h @@ -10,15 +10,15 @@ int GetStringCenterAlignXOffset(int fontId, const u8 *str, int totalWidth); int GetStringRightAlignXOffset(int fontId, const u8 *str, int totalWidth); int GetStringCenterAlignXOffsetWithLetterSpacing(int fontId, const u8 *str, int totalWidth, int letterSpacing); int GetStringWidthDifference(int fontId, const u8 *str, int totalWidth, int letterSpacing); -int GetMaxWidthInMenuTable(const struct MenuAction *str, int arg1); -int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2); +int GetMaxWidthInMenuTable(const struct MenuAction *actions, int numActions); +int GetMaxWidthInSubsetOfMenuTable(const struct MenuAction *actions, const u8 *actionIds, int numActions); int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu); void CopyMonCategoryText(int dexNum, u8 *dest); -u8 *sub_81DB494(u8 *str, int fontId, const u8 *str2, int totalStringWidth); +u8 *GetStringClearToWidth(u8 *dest, int fontId, const u8 *str, int totalStringWidth); void PadNameString(u8 *dest, u8 padChar); void ConvertInternationalPlayerNameStripChar(u8 *, u8); void ConvertInternationalContestantName(u8 *); -int sub_81DB604(u8 *); -void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows); +int GetNicknameLanguage(u8 *); +void FillWindowTilesByRow(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows); #endif // GUARD_INTERNATIONAL_STRING_UTIL_H diff --git a/include/intro.h b/include/intro.h index 198ae26696..8ba030a287 100644 --- a/include/intro.h +++ b/include/intro.h @@ -7,7 +7,6 @@ // Exported ROM declarations void CB2_InitCopyrightScreenAfterBootup(void); -void CB2_InitCopyrightScreenAfterBootup(void); void CB2_InitCopyrightScreenAfterTitleScreen(void); void PanFadeAndZoomScreen(u16, u16, u16, u16); diff --git a/include/intro_credits_graphics.h b/include/intro_credits_graphics.h index bed30ffe82..c6f4a73c55 100644 --- a/include/intro_credits_graphics.h +++ b/include/intro_credits_graphics.h @@ -33,11 +33,11 @@ extern const struct CompressedSpriteSheet gSpriteSheet_CreditsRivalBrendan[]; extern const struct CompressedSpriteSheet gSpriteSheet_CreditsRivalMay[]; extern const struct SpritePalette gSpritePalettes_Credits[]; -void LoadIntroPart2Graphics(u8 scene); -void SetIntroPart2BgCnt(u8 a); +void LoadIntroPart2Graphics(u8 scenery); +void SetIntroPart2BgCnt(u8 scenery); void LoadCreditsSceneGraphics(u8); void SetCreditsSceneBgCnt(u8); -u8 CreateBicycleBgAnimationTask(u8 a, u16 b, u16 c, u16 d); +u8 CreateBicycleBgAnimationTask(u8 mode, u16 bg1Speed, u16 bg2Speed, u16 bg3Speed); void CycleSceneryPalette(u8); u8 CreateIntroBrendanSprite(s16 x, s16 y); u8 CreateIntroMaySprite(s16 x, s16 y); diff --git a/include/item.h b/include/item.h index 87ff57bc79..0aaa678a16 100644 --- a/include/item.h +++ b/include/item.h @@ -2,6 +2,7 @@ #define GUARD_ITEM_H #include "constants/item.h" +#include "constants/item_config.h" typedef void (*ItemUseFunc)(u8); @@ -14,13 +15,14 @@ struct Item u8 holdEffectParam; const u8 *description; u8 importance; - u8 unk19; + bool8 registrability; // unused u8 pocket; u8 type; ItemUseFunc fieldUseFunc; u8 battleUsage; ItemUseFunc battleUseFunc; u8 secondaryId; + u8 flingPower; }; struct BagPocket @@ -29,6 +31,7 @@ struct BagPocket u8 capacity; }; +extern const struct Item gItems[]; extern struct BagPocket gBagPockets[]; void ApplyNewEncryptionKeyToBagItems(u32 newKey); @@ -67,12 +70,13 @@ u8 ItemId_GetHoldEffect(u16 itemId); u8 ItemId_GetHoldEffectParam(u16 itemId); const u8 *ItemId_GetDescription(u16 itemId); u8 ItemId_GetImportance(u16 itemId); -u8 ItemId_GetUnknownValue(u16 itemId); +u8 ItemId_GetRegistrability(u16 itemId); u8 ItemId_GetPocket(u16 itemId); u8 ItemId_GetType(u16 itemId); ItemUseFunc ItemId_GetFieldFunc(u16 itemId); u8 ItemId_GetBattleUsage(u16 itemId); ItemUseFunc ItemId_GetBattleFunc(u16 itemId); u8 ItemId_GetSecondaryId(u16 itemId); +u8 ItemId_GetFlingPower(u16 itemId); #endif // GUARD_ITEM_H diff --git a/include/item_menu.h b/include/item_menu.h index fd576c3b5a..ce03cdacb8 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -71,7 +71,7 @@ struct BagMenu u8 unused1[2]; u8 pocketScrollArrowsTask; u8 pocketSwitchArrowsTask; - const u8* contextMenuItemsPtr; + const u8 *contextMenuItemsPtr; u8 contextMenuItemsBuffer[4]; u8 contextMenuNumItems; u8 numItemStacks[POCKETS_COUNT]; diff --git a/include/item_use.h b/include/item_use.h index 3bc3c2226b..036a541012 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -11,6 +11,8 @@ void ItemUseOutOfBattle_PowderJar(u8); void ItemUseOutOfBattle_SSTicket(u8); void ItemUseOutOfBattle_WailmerPail(u8); void ItemUseOutOfBattle_Medicine(u8); +void ItemUseOutOfBattle_AbilityCapsule(u8); +void ItemUseOutOfBattle_AbilityPatch(u8); void ItemUseOutOfBattle_ReduceEV(u8); void ItemUseOutOfBattle_SacredAsh(u8); void ItemUseOutOfBattle_PPRecovery(u8); @@ -36,4 +38,13 @@ void Task_UseDigEscapeRopeOnField(u8 taskId); u8 CanUseDigOrEscapeRopeOnCurMap(void); u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId); +enum { + BALL_THROW_UNABLE_TWO_MONS, + BALL_THROW_UNABLE_NO_ROOM, + BALL_THROW_UNABLE_SEMI_INVULNERABLE, + BALL_THROW_ABLE, +}; + +bool32 CanThrowBall(void); + #endif // GUARD_ITEM_USE_H diff --git a/include/librfu.h b/include/librfu.h index 69c6961729..0026adecea 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -30,12 +30,12 @@ Calculate the number of the transferable DMA count based on this 42 cycles and the access cycles of the destination and source. For example, if both the CPU internal RAM --> VRAM have a one cycle access, then a 21 count DMA can occur. - - If RFU is used outside of these restrictions, problems, such as the loss of data caused by the failure of the AGB, as a clock slave, + + If RFU is used outside of these restrictions, problems, such as the loss of data caused by the failure of the AGB, as a clock slave, to notify that data has been received from the RFU, will occur. When this problem occurs, the REQ callback will send a REQ_commandID=ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ notification. (When using Link Manager, the LMAN call back will send a LMAN_msg=LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA notification.) - + */ // REQ-COMMAND (STWI) ID CODE LIST @@ -137,7 +137,7 @@ // Definition Data Returned by Return Values for Library Functions // ******************************************************* -// The function doesn't have return value. +// The function doesn't have return value. // Value of u8 *status for rfu_REQ_pollConnectParent (Connection Trial Status) // #define CP_STATUS_DONE 0x00 // Connection successful // #define CP_STATUS_IN_PROCESS 0x01 // Connecting @@ -145,7 +145,7 @@ // #define CP_STATUS_DISCONNECTED 0x03 // Disconnected by parent device while connecting // #define CP_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error -// The function doesn't exist. +// The function doesn't exist. // Value of u8 *status argument for rfu_REQ_pollRecoveryConnect (Link Restore Status) // #define RC_STATUS_DONE 0x00 // Connection restore successful // #define RC_STATUS_FAILED 0x01 // Connection restore failure (meaningless to try anymore) @@ -324,7 +324,7 @@ struct STWIStatus vu8 sending; }; -// This struct is used as u8 array in SDK. +// This struct is used as u8 array in SDK. struct RfuIntrStruct { union RfuPacket rxPacketAlloc; @@ -475,7 +475,7 @@ extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX]; // librfu_sio32id s32 AgbRFU_checkID(u8 maxTries); -// Arguments with "bm..." specify slots of the form (0x01 << slot number) that are the object of a function operation. +// Arguments with "bm..." specify slots of the form (0x01 << slot number) that are the object of a function operation. // librfu_rfu // API Initialization and Initial Settings diff --git a/include/link.h b/include/link.h index 407dbabb9c..120c25784e 100644 --- a/include/link.h +++ b/include/link.h @@ -5,6 +5,7 @@ #define MAX_RFU_PLAYERS 5 #define CMD_LENGTH 8 #define QUEUE_CAPACITY 50 +#define OVERWORLD_RECV_QUEUE_MAX 3 #define BLOCK_BUFFER_SIZE 0x100 #define LINK_SLAVE 0 @@ -75,7 +76,7 @@ #define LINKCMD_SEND_BLOCK_REQ 0xCCCC #define LINKCMD_START_TRADE 0xCCDD #define LINKCMD_CONFIRM_FINISH_TRADE 0xDCBA -#define LINKCMD_SET_MONS_TO_TRADE 0xDDDD +#define LINKCMD_SET_MONS_TO_TRADE 0xDDDD #define LINKCMD_PLAYER_CANCEL_TRADE 0xDDEE #define LINKCMD_REQUEST_CANCEL 0xEEAA #define LINKCMD_BOTH_CANCEL_TRADE 0xEEBB @@ -92,7 +93,7 @@ #define LINKTYPE_DOUBLE_BATTLE 0x2244 #define LINKTYPE_MULTI_BATTLE 0x2255 #define LINKTYPE_BATTLE_TOWER_50 0x2266 -#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277 +#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277 #define LINKTYPE_BATTLE_TOWER 0x2288 #define LINKTYPE_RECORD_MIX_BEFORE 0x3311 #define LINKTYPE_RECORD_MIX_AFTER 0x3322 @@ -104,6 +105,14 @@ #define LINKTYPE_CONTEST_GMODE 0x6601 #define LINKTYPE_CONTEST_EMODE 0x6602 +enum { + BLOCK_REQ_SIZE_NONE, // Identical to 200 + BLOCK_REQ_SIZE_200, + BLOCK_REQ_SIZE_100, + BLOCK_REQ_SIZE_220, + BLOCK_REQ_SIZE_40, +}; + struct LinkStatus { u32 localId:2; @@ -116,8 +125,9 @@ struct LinkStatus u32 errors:7; }; -#define MASTER_HANDSHAKE 0x8FFF -#define SLAVE_HANDSHAKE 0xB9A0 +#define MASTER_HANDSHAKE 0x8FFF +#define SLAVE_HANDSHAKE 0xB9A0 +#define EREADER_HANDSHAKE 0xCCD0 #define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT) @@ -200,7 +210,7 @@ struct Link /* 0x001 */ u8 state; /* 0x002 */ u8 localId; // local multi-player ID /* 0x003 */ u8 playerCount; - /* 0x004 */ u16 tempRecvBuffer[4]; + /* 0x004 */ u16 handshakeBuffer[MAX_LINK_PLAYERS]; /* 0x00c */ bool8 receivedNothing; /* 0x00d */ s8 serialIntrCounter; /* 0x00e */ bool8 handshakeAsMaster; @@ -227,8 +237,6 @@ struct BlockRequest u32 size; }; -extern const struct BlockRequest sBlockRequestLookupTable[5]; - extern struct Link gLink; extern u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE]; @@ -236,8 +244,7 @@ extern u16 gLinkType; extern u32 gLinkStatus; extern u16 gBlockRecvBuffer[MAX_RFU_PLAYERS][BLOCK_BUFFER_SIZE / 2]; extern u16 gSendCmd[CMD_LENGTH]; -extern struct LinkPlayer gLinkPlayers[5]; -extern u16 word_3002910[]; +extern struct LinkPlayer gLinkPlayers[MAX_RFU_PLAYERS]; extern bool8 gReceivedRemoteLinkPlayers; extern u32 gBerryBlenderKeySendAttempts; extern bool8 gLinkVSyncDisabled; @@ -249,8 +256,6 @@ void Task_DestroySelf(u8 taskId); void OpenLink(void); void CloseLink(void); u16 LinkMain2(const u16 *); -void sub_8007B14(void); -bool32 sub_8007B24(void); void ClearLinkCallback(void); void ClearLinkCallback_2(void); u8 GetLinkPlayerCount(void); @@ -259,10 +264,8 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper); bool8 IsLinkPlayerDataExchangeComplete(void); u32 GetLinkPlayerTrainerId(u8); void ResetLinkPlayers(void); -void sub_8007E24(void); -void sub_8007E4C(void); u8 GetMultiplayerId(void); -u8 bitmask_all_link_players_but_self(void); +u8 BitmaskAllOtherLinkPlayers(void); bool8 SendBlock(u8, const void *, u16); u8 GetBlockReceivedStatus(void); void ResetBlockReceivedFlags(void); @@ -270,7 +273,7 @@ void ResetBlockReceivedFlag(u8); u8 GetLinkPlayerCount_2(void); bool8 IsLinkMaster(void); void CB2_LinkError(void); -u8 GetSioMultiSI(void); +bool8 GetSioMultiSI(void); bool8 IsLinkConnectionEstablished(void); bool8 HasLinkErrorOccurred(void); void ResetSerial(void); @@ -285,23 +288,21 @@ void CreateWirelessStatusIndicatorSprite(u8, u8); void SetLinkStandbyCallback(void); void SetWirelessCommType1(void); void CheckShouldAdvanceLinkState(void); -u8 IsLinkMaster(void); void SetCloseLinkCallback(void); bool8 HandleLinkConnection(void); void SetLinkDebugValues(u32 seed, u32 flags); void SetBerryBlenderLinkCallback(void); void SetSuppressLinkErrorMessage(bool8 flag); void ConvertLinkPlayerName(struct LinkPlayer *linkPlayer); -u8 GetSioMultiSI(void); void ClearSavedLinkPlayers(void); -void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, bool8 disconnected); +void SetLinkErrorBuffer(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, bool8 disconnected); void LocalLinkPlayerToBlock(void); void LinkPlayerFromBlock(u32 who); bool32 Link_AnyPartnersPlayingFRLG_JP(void); void ResetLinkPlayerCount(void); -void SaveLinkPlayers(u8 a0); +void SaveLinkPlayers(u8 playerCount); void SetWirelessCommType0(void); -bool32 IsLinkRecvQueueLengthAtLeast3(void); +bool32 IsLinkRecvQueueAtOverworldMax(void); extern u16 gLinkPartnersHeldKeys[6]; extern u32 gLinkDebugSeed; @@ -312,8 +313,6 @@ extern bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS]; extern u8 gBlockReceivedStatus[MAX_LINK_PLAYERS]; extern u16 gLinkHeldKeys; extern u32 gLinkStatus; -extern u8 gUnknown_030030E4; -extern u8 gUnknown_030030E8; extern bool8 gReadyToExitStandby[MAX_LINK_PLAYERS]; extern bool8 gReadyToCloseLink[MAX_LINK_PLAYERS]; extern u16 gReadyCloseLinkType; @@ -329,23 +328,14 @@ extern u8 gBlockRequestType; extern u8 gLastSendQueueCount; extern u8 gLastRecvQueueCount; extern u16 gLinkSavedIme; -extern u32 gFiller_03003074; -extern u32 gFiller_03003154; -extern u32 gFiller_03003158; -extern u32 gFiller_0300315c; -extern u32 gFiller_03004138; -extern u32 gFiller_0300413C; -extern u32 gFiller_03003080; extern struct LinkPlayer gLocalLinkPlayer; bool32 Link_AnyPartnersPlayingRubyOrSapphire(void); bool32 LinkDummy_Return2(void); void SetLocalLinkPlayerId(u8); u8 GetSavedPlayerCount(void); -void sub_8009FAC(void); bool8 SendBlockRequest(u8 type); u8 GetLinkPlayerCountAsBitFlags(void); -u8 sub_800A0C8(s32, s32); u8 GetSavedLinkPlayerCountAsBitFlags(void); void SetCloseLinkCallbackHandleJP(void); void CheckLinkPlayersMatchSaved(void); diff --git a/include/link_rfu.h b/include/link_rfu.h index 79d01afbc7..a8f8362cb3 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -5,29 +5,30 @@ #include "link.h" #include "AgbRfu_LinkManager.h" +#define RFUCMD_MASK 0xFF00 + #define RFUCMD_SEND_PACKET 0x2F00 #define RFUCMD_BLENDER_SEND_KEYS 0x4400 #define RFUCMD_READY_CLOSE_LINK 0x5F00 #define RFUCMD_READY_EXIT_STANDBY 0x6600 -#define RFUCMD_0x7700 0x7700 -#define RFUCMD_0x7800 0x7800 -#define RFUCMD_0x8800 0x8800 -#define RFUCMD_0x8900 0x8900 +#define RFUCMD_SEND_PLAYER_IDS 0x7700 +#define RFUCMD_SEND_PLAYER_IDS_NEW 0x7800 +#define RFUCMD_SEND_BLOCK_INIT 0x8800 +#define RFUCMD_SEND_BLOCK 0x8900 #define RFUCMD_SEND_BLOCK_REQ 0xA100 #define RFUCMD_SEND_HELD_KEYS 0xBE00 -#define RFUCMD_0xED00 0xED00 -#define RFUCMD_0xEE00 0xEE00 +#define RFUCMD_DISCONNECT 0xED00 +#define RFUCMD_DISCONNECT_PARENT 0xEE00 -#define RFU_SERIAL_7F7D 0x7F7D +#define RFU_SERIAL_GAME 0x0002 // Serial number for Pokémon game (FRLG or Emerald) +#define RFU_SERIAL_WONDER_DISTRIBUTOR 0x7F7D // Serial number for distributing Wonder Cards / News +#define RFU_SERIAL_UNKNOWN 0x0000 // Unreferenced acceptable serial number. Gamecube? +#define RFU_SERIAL_END 0xFFFF +#define COMM_SLOT_LENGTH 14 #define RECV_QUEUE_NUM_SLOTS 32 -#define RECV_QUEUE_SLOT_LENGTH (14 * MAX_RFU_PLAYERS) - #define SEND_QUEUE_NUM_SLOTS 40 -#define SEND_QUEUE_SLOT_LENGTH 14 - #define BACKUP_QUEUE_NUM_SLOTS 2 -#define BACKUP_QUEUE_SLOT_LENGTH 14 #define RFU_PACKET_SIZE 6 @@ -41,12 +42,42 @@ #define RFU_STATUS_WAIT_ACK_JOIN_GROUP 7 #define RFU_STATUS_LEAVE_GROUP_NOTICE 8 #define RFU_STATUS_LEAVE_GROUP 9 -#define RFU_STATUS_10 10 -#define RFU_STATUS_11 11 +#define RFU_STATUS_CHILD_LEAVE_READY 10 +#define RFU_STATUS_CHILD_LEAVE 11 #define RFU_STATUS_ACK_JOIN_GROUP 12 -// RfuTgtData.gname is read as these structs. -struct GFtgtGnameSub +// Values for disconnectMode +enum { + RFU_DISCONNECT_NONE, + RFU_DISCONNECT_ERROR, + RFU_DISCONNECT_NORMAL, +}; + +// Values for errorState +enum { + RFU_ERROR_STATE_NONE, + RFU_ERROR_STATE_OCCURRED, + RFU_ERROR_STATE_PROCESSED, + RFU_ERROR_STATE_DISCONNECTING, + RFU_ERROR_STATE_IGNORE, +}; + +// These error flags are set in errorInfo, and given as +// the uppermost 16 bits of 'status' for sLinkErrorBuffer. +// The first 8 bits are reserved for the link manager msg +// when the error occurred, and the last 8 bits are this +// sequence of presumably meaningful error flags, but +// ultimately sLinkErrorBuffer's status is never read. +#define F_RFU_ERROR_1 (1 << 8) +#define F_RFU_ERROR_2 (1 << 9) // Never set +#define F_RFU_ERROR_3 (1 << 10) // Never set +#define F_RFU_ERROR_4 (1 << 11) // Never set +#define F_RFU_ERROR_5 (1 << 12) +#define F_RFU_ERROR_6 (1 << 13) +#define F_RFU_ERROR_7 (1 << 14) +#define F_RFU_ERROR_8 (1 << 15) + +struct RfuGameCompatibilityData { u16 language:4; u16 hasNews:1; @@ -56,24 +87,41 @@ struct GFtgtGnameSub u16 hasNationalDex:1; u16 gameClear:1; u16 version:4; + u16 unused:2; u8 playerTrainerId[2]; }; -struct __attribute__((packed, aligned(2))) GFtgtGname +// This struct is sent via the Wireless Adapter as the game name or "gname" data. +// Gname is only applicable during Wireless Single Game Pak Multiplay, when the +// adapter needs this data for connection. Per the RFU manual, during "normal" +// wireless play (the kind the Pokémon games use) the gname data can be used for +// anything the developers want. This struct is what GF decided to use it for. +// It can be up to 13 bytes in size (RFU_GAME_NAME_LENGTH). +// The player's name is sent separately as the username ("uname"), and does not +// use a struct (gHostRfuUsername). +struct __attribute__((packed, aligned(2))) RfuGameData { - struct GFtgtGnameSub unk_00; - u8 child_sprite_gender[RFU_CHILD_MAX]; // u8 sprite_idx:3; - // u8 gender:1; - // u8 unk_4:3 - // u8 active:1 - u16 species; + struct RfuGameCompatibilityData compatibility; + u8 partnerInfo[RFU_CHILD_MAX]; + u16 tradeSpecies; u8 activity:7; - u8 started:1; + u8 startedActivity:1; u8 playerGender:1; - u8 level:7; - u8 type:6; + u8 tradeLevel:7; + u8 tradeType:6; u8 padding:2; -}; // size: RFU_GNAME_SIZE +}; + +// Constants for getting/setting information in 'partnerInfo' of RfuGameData. +// This data is used to determine what the link partners look like from +// the host's perspective. +// Bits 0-2 are a shortened trainerId +// Bit 3 is the player's gender +// Bits 4-6 are unknown/unused +// Bit 7 is an 'active' flag +#define PINFO_TID_MASK 0x7 +#define PINFO_GENDER_SHIFT 3 +#define PINFO_ACTIVE_FLAG (1 << 7) struct RfuBlockSend { @@ -89,7 +137,7 @@ struct RfuBlockSend struct RfuRecvQueue { - /* 0x000 */ u8 slots[RECV_QUEUE_NUM_SLOTS][RECV_QUEUE_SLOT_LENGTH]; + /* 0x000 */ u8 slots[RECV_QUEUE_NUM_SLOTS][COMM_SLOT_LENGTH * MAX_RFU_PLAYERS]; /* 0x8c0 */ vu8 recvSlot; /* 0x8c1 */ vu8 sendSlot; /* 0x8c2 */ vu8 count; @@ -98,7 +146,7 @@ struct RfuRecvQueue struct RfuSendQueue { - /* 0x000 */ u8 slots[SEND_QUEUE_NUM_SLOTS][SEND_QUEUE_SLOT_LENGTH]; + /* 0x000 */ u8 slots[SEND_QUEUE_NUM_SLOTS][COMM_SLOT_LENGTH]; /* 0x230 */ vu8 recvSlot; /* 0x231 */ vu8 sendSlot; /* 0x232 */ vu8 count; @@ -107,33 +155,34 @@ struct RfuSendQueue struct RfuBackupQueue { - /* 0x00 */ u8 slots[BACKUP_QUEUE_NUM_SLOTS][BACKUP_QUEUE_SLOT_LENGTH]; + /* 0x00 */ u8 slots[BACKUP_QUEUE_NUM_SLOTS][COMM_SLOT_LENGTH]; /* 0x1c */ vu8 recvSlot; /* 0x1d */ vu8 sendSlot; /* 0x1e */ vu8 count; }; -struct GFRfuManager +// Stores data needed for the RFU on GF's end +struct RfuManager { /* 0x000 */ void (*callback)(void); /* 0x004 */ u16 state; - /* 0x006 */ u8 filler_06[4]; - /* 0x00a */ u16 linkmanMsg; + /* 0x006 */ u8 unused1[4]; + /* 0x00a */ u16 errorInfo; /* 0x00c */ u8 parentChild; /* 0x00d */ u8 playerCount; - /* 0x00e */ bool8 unk_0e; - /* 0x00f */ u8 unk_0f; - /* 0x010 */ u16 unk_10; - /* 0x012 */ u16 unk_12; - /* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14]; - /* 0x04c */ u8 unk_4c[14]; + /* 0x00e */ bool8 runParentMain2; + /* 0x00f */ u8 unused2; + /* 0x010 */ u16 errorParam0; + /* 0x012 */ u16 errorParam1; + /* 0x014 */ u8 childRecvBuffer[RFU_CHILD_MAX][COMM_SLOT_LENGTH]; + /* 0x04c */ u8 childSendBuffer[COMM_SLOT_LENGTH]; /* 0x05a */ u8 blockRequestType; - /* 0x05b */ u8 unk_5b; + /* 0x05b */ u8 blockSendAttempts; /* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS]; /* 0x061 */ bool8 numBlocksReceived[MAX_RFU_PLAYERS]; /* 0x066 */ u8 idleTaskId; /* 0x067 */ u8 searchTaskId; - /* 0x068 */ u8 filler_68[4]; + /* 0x068 */ u8 unused3[4]; /* 0x06c */ struct RfuBlockSend sendBlock; /* 0x080 */ struct RfuBlockSend recvBlock[MAX_RFU_PLAYERS]; /* 0x0e4 */ bool8 readyCloseLink[MAX_RFU_PLAYERS]; @@ -144,59 +193,56 @@ struct GFRfuManager /* 0x0f1 */ u8 status; /* 0x0f2 */ u16 packet[RFU_PACKET_SIZE]; /* 0x0fe */ u16 resendExitStandbyTimer; - /* 0x100 */ u16 unk_100; - /* 0x102 */ u8 unk_102; - /* 0x103 */ u8 filler_103[0x10A - 0x103]; - /* 0x10A */ struct GFtgtGname unk_10A; + /* 0x100 */ u16 allReadyNum; + /* 0x102 */ u8 childSendCmdId; + /* 0x103 */ u8 unused4[7]; + /* 0x10A */ struct RfuGameData parent; u8 filler_; - u8 playerName[PLAYER_NAME_LENGTH + 1]; + u8 parentName[RFU_USER_NAME_LENGTH]; /* 0x124 */ struct RfuRecvQueue recvQueue; /* 0x9e8 */ struct RfuSendQueue sendQueue; /* 0xc1c */ struct RfuBackupQueue backupQueue; /* 0xc3c */ vu8 linkRecovered; - /* 0xc3d */ u8 unk_c3d; + /* 0xc3d */ u8 reconnectParentId; /* 0xc3e */ vu8 childSlot; - /* 0xc3f */ u8 unk_c3f[70]; - /* 0xc85 */ u8 unk_c85; - /* 0xc86 */ u8 recvStatus; - /* 0xc87 */ u8 recvCmds[5][7][2]; + /* 0xc3f */ u8 childRecvQueue[COMM_SLOT_LENGTH * MAX_RFU_PLAYERS]; + /* 0xc85 */ u8 leaveGroupStatus; + /* 0xc86 */ u8 childRecvStatus; + /* 0xc87 */ u8 recvCmds[MAX_RFU_PLAYERS][CMD_LENGTH - 1][2]; /* 0xccd */ u8 parentId; /* 0xcce */ u8 multiplayerId; - /* 0xccf */ u8 unk_ccf; - /* 0xcd0 */ vu8 unk_cd0; + /* 0xccf */ u8 connectParentFailures; + /* 0xcd0 */ vu8 childSendCount; /* 0xcd1 */ u8 partnerSendStatuses[RFU_CHILD_MAX]; /* 0xcd5 */ u8 partnerRecvStatuses[RFU_CHILD_MAX]; - /* 0xcd9 */ u8 unk_cd9; - /* 0xcda */ u8 unk_cda; - /* 0xcdb */ vbool8 unk_cdb; - /* 0xcdc */ vbool8 unk_cdc; - /* 0xcdd */ u8 unk_cdd; + /* 0xcd9 */ bool8 stopNewConnections; + /* 0xcda */ u8 parentSendSlot; + /* 0xcdb */ vbool8 parentFinished; + /* 0xcdc */ vbool8 parentMain2Failed; + /* 0xcdd */ u8 unused5; /* 0xcde */ u8 linkPlayerIdx[RFU_CHILD_MAX]; - /* 0xce2 */ u8 unk_ce2; - /* 0xce2 */ u8 unk_ce3; - /* 0xce4 */ u8 unk_ce4; - /* 0xce5 */ u8 unk_ce5; - /* 0xce5 */ u8 unk_ce6; + /* 0xce2 */ u8 parentSlots; + /* 0xce2 */ u8 disconnectSlots; + /* 0xce4 */ u8 disconnectMode; + /* 0xce5 */ u8 nextChildBits; + /* 0xce5 */ u8 newChildQueue; /* 0xce7 */ u8 acceptSlot_flag; - /* 0xce8 */ u8 unk_ce8; - /* 0xce9 */ u8 unk_ce9; - /* 0xcea */ u8 unk_cea[4]; - /* 0xcee */ u8 unk_cee[4]; + /* 0xce8 */ bool8 playerExchangeActive; + /* 0xce9 */ u8 incomingChild; + /* 0xcea */ u8 numChildRecvErrors[RFU_CHILD_MAX]; + /* 0xcee */ u8 childRecvIds[RFU_CHILD_MAX]; }; // size = 0xcf4 -// Exported RAM declarations - -extern struct GFtgtGname gHostRFUtgtGnameBuffer; -extern u8 gHostRFUtgtUnameBuffer[]; -extern struct GFRfuManager Rfu; +extern struct RfuGameData gHostRfuGameData; +extern u8 gHostRfuUsername[]; +extern struct RfuManager gRfu; extern u8 gWirelessStatusIndicatorSpriteId; -// Exported ROM declarations void WipeTrainerNameRecords(void); void InitRFUAPI(void); void LinkRfu_Shutdown(void); -void Rfu_SetBlockReceivedFlag(u8 who); -void Rfu_ResetBlockReceivedFlag(u8 who); +void Rfu_SetBlockReceivedFlag(u8 linkPlayerId); +void Rfu_ResetBlockReceivedFlag(u8 linkPlayerId); bool32 IsSendingKeysToRfu(void); void StartSendingKeysToRfu(void); void Rfu_SetBerryBlenderLinkCallback(void); @@ -213,61 +259,61 @@ void Rfu_SetLinkStandbyCallback(void); void ResetLinkRfuGFLayer(void); void UpdateWirelessStatusIndicatorSprite(void); void InitRFU(void); -bool32 sub_8010EC0(void); -bool32 sub_8010F1C(void); +bool32 RfuMain1(void); +bool32 RfuMain2(void); bool32 RfuHasErrored(void); bool32 IsRfuRecvQueueEmpty(void); u32 GetRfuRecvQueueLength(void); void RfuVSync(void); -void sub_80111B0(bool32 a0); +void RfuSetIgnoreError(bool32 enable); u8 RfuGetStatus(void); -struct GFtgtGname *GetHostRFUtgtGname(void); -void UpdateGameData_GroupLockedIn(u8 a0); -void GetLinkmanErrorParams(u32 a0); -void RfuSetStatus(u8 a0, u16 a1); -u8 sub_801048C(bool32 a0); -void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *buff1, u8 *buff2); -void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, bool32 started); -void InitializeRfuLinkManager_LinkLeader(u32 a0); -bool32 sub_8012240(void); +struct RfuGameData *GetHostRfuGameData(void); +void UpdateGameData_GroupLockedIn(u8 startedActivity); +void RfuSetErrorParams(u32 errorInfo); +void RfuSetStatus(u8 status, u16 errorInfo); +u8 Rfu_SetLinkRecovery(bool32 enable); +void CopyHostRfuGameDataAndUsername(struct RfuGameData *gameData, u8 *username); +void SetHostRfuGameData(u8 activity, u32 partnerInfo, bool32 startedActivity); +void InitializeRfuLinkManager_LinkLeader(u32 groupMax); +bool32 IsRfuCommunicatingWithAllChildren(void); void LinkRfu_StopManagerAndFinalizeSlots(void); -bool32 sub_80105EC(void); +bool32 RfuTryDisconnectLeavingChildren(void); bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name); void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name); u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name); -void RequestDisconnectSlotByTrainerNameAndId(const u8 *a0, u16 a1); +void RequestDisconnectSlotByTrainerNameAndId(const u8 *name, u16 id); bool8 LmanAcceptSlotFlagIsNotZero(void); -bool32 WaitRfuState(bool32 a0); -void sub_801103C(void); +bool32 WaitRfuState(bool32 force); +void GetOtherPlayersInfoFlags(void); void InitializeRfuLinkManager_JoinGroup(void); void SendLeaveGroupNotice(void); -void RecordMixTrainerNames(void); +void SaveLinkTrainerNames(void); void LinkRfu_CreateConnectionAsParent(void); void LinkRfu_StopManagerBeforeEnteringChat(void); -void UpdateGameData_SetActivity(u8 activity, u32 flags, bool32 started); -void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId); -void SetGnameBufferWonderFlags(bool32 a0, bool32 a1); -void ClearAndInitHostRFUtgtGname(void); +void UpdateGameData_SetActivity(u8 activity, u32 partnerInfo, bool32 startedActivity); +void CreateTask_RfuReconnectWithParent(const u8 *name, u16 trainerId); +void SetHostRfuWonderFlags(bool32 hasNews, bool32 hasCard); +void ResetHostRfuGameData(void); void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level); void InitializeRfuLinkManager_EnterUnionRoom(void); -void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 a2); +void TryConnectToUnionRoomParent(const u8 *name, struct RfuGameData *parent, u8 activity); bool32 IsUnionRoomListenTaskActive(void); void Rfu_SendPacket(void *data); bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name); -void sub_8011DE0(u32 arg0); -u8 sub_801100C(s32 a0); -void sub_800EF7C(void); -bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *buff1, u8 *buff2, u8 idx); -bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *buff1, u8 *buff2, u8 idx); -s32 sub_800E87C(u8 idx); +void Rfu_DisconnectPlayerById(u32 playerIdx); +u8 GetLinkPlayerInfoFlags(s32 playerId); +void StopUnionRoomLinkManager(void); +bool8 Rfu_GetCompatiblePlayerData(struct RfuGameData *gameData, u8 *username, u8 idx); +bool8 Rfu_GetWonderDistributorPlayerData(struct RfuGameData *gameData, u8 *username, u8 idx); +s32 Rfu_GetIndexOfNewestChild(u8 bits); void CreateTask_RfuIdle(void); void DestroyTask_RfuIdle(void); void ClearRecvCommands(void); void LinkRfu_FatalError(void); -bool32 sub_8011A9C(void); -void sub_80104B0(void); -void sub_8011A50(void); -void sub_80110B8(u32 a0); +bool32 Rfu_IsPlayerExchangeActive(void); +void Rfu_StopPartnerSearch(void); +void RfuSetNormalDisconnectMode(void); +void SetUnionRoomChatPlayerData(u32 numPlayers); bool32 IsRfuSerialNumberValid(u32 serialNo); bool8 IsRfuRecoveringFromLinkLoss(void); void RfuRecvQueue_Reset(struct RfuRecvQueue *queue); @@ -276,9 +322,9 @@ void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *data); void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *data); bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest); bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *dest); -void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *q2); -bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *q2); -void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders); +void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *data); +bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *src); +void InitHostRfuGameData(struct RfuGameData *data, u8 activity, bool32 startedActivity, s32 partnerInfo); void CreateWirelessStatusIndicatorSprite(u8 x, u8 y); void DestroyWirelessStatusIndicatorSprite(void); void LoadWirelessStatusIndicatorSpriteGfx(void); diff --git a/include/list_menu.h b/include/list_menu.h index 1c18f3dff0..e70a92bab1 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -98,9 +98,9 @@ struct CursorStruct extern struct ScrollArrowsTemplate gTempScrollArrowTemplate; extern struct ListMenuTemplate gMultiuseListMenuTemplate; -s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 drawMode, u16 tileNum, u16 palNum); u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); -u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *arg1, u16 scrollOffset, u16 selectedRow); +u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 scrollOffset, u16 selectedRow); s32 ListMenu_ProcessInput(u8 listTaskId); void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow); void RedrawListMenu(u8 listTaskId); @@ -111,10 +111,10 @@ void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId); void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow); u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId); void ListMenuOverrideSetColors(u8 cursorPal, u8 fillValue, u8 cursorShadowPal); -void ListMenuDefaultCursorMoveFunc(s32 arg0, u8 arg1, struct ListMenu *list); +void ListMenuDefaultCursorMoveFunc(s32 itemIndex, u8 onInit, struct ListMenu *list); s32 ListMenuGetUnkIndicatorsStructFields(u8 taskId, u8 field); void ListMenuSetUnkIndicatorsStructField(u8 taskId, u8 field, s32 value); -u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16 *arg1); +u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16 *scrollOffset); u8 AddScrollIndicatorArrowPairParameterized(u32 arrowType, s32 commonPos, s32 firstPos, s32 secondPos, s32 fullyDownThreshold, s32 tileTag, s32 palTag, u16 *currItemPtr); void RemoveScrollIndicatorArrowPair(u8 taskId); void Task_ScrollIndicatorArrowPairOnMainMenu(u8 taskId); diff --git a/include/load_save.h b/include/load_save.h index 2f4a9ace6b..309e62e2b4 100644 --- a/include/load_save.h +++ b/include/load_save.h @@ -1,9 +1,33 @@ #ifndef GUARD_LOAD_SAVE_H #define GUARD_LOAD_SAVE_H -extern struct SaveBlock1 gSaveblock1; -extern struct SaveBlock2 gSaveblock2; -extern struct PokemonStorage gPokemonStorage; +#include "pokemon_storage_system.h" + +#define SAVEBLOCK_MOVE_RANGE 128 + +/** + * These structs are to prevent them from being reordered on newer or modern + * toolchains. If this is not done, the ClearSav functions will end up erasing + * the wrong memory leading to various glitches. + */ +struct SaveBlock2DMA { + struct SaveBlock2 block; + u8 dma[SAVEBLOCK_MOVE_RANGE]; +}; + +struct SaveBlock1DMA { + struct SaveBlock1 block; + u8 dma[SAVEBLOCK_MOVE_RANGE]; +}; + +struct PokemonStorageDMA { + struct PokemonStorage block; + u8 dma[SAVEBLOCK_MOVE_RANGE]; +}; + +extern struct SaveBlock1DMA gSaveblock1; +extern struct SaveBlock2DMA gSaveblock2; +extern struct PokemonStorageDMA gPokemonStorage; extern bool32 gFlashMemoryPresent; extern struct SaveBlock1 *gSaveBlock1Ptr; @@ -24,8 +48,8 @@ void SavePlayerParty(void); void LoadPlayerParty(void); void SaveObjectEvents(void); void LoadObjectEvents(void); -void SaveSerializedGame(void); -void LoadSerializedGame(void); +void CopyPartyAndObjectsToSave(void); +void CopyPartyAndObjectsFromSave(void); void LoadPlayerBag(void); void SavePlayerBag(void); void ApplyNewEncryptionKeyToHword(u16 *hWord, u32 newKey); diff --git a/include/mail.h b/include/mail.h index 0425866539..f4590a70ec 100644 --- a/include/mail.h +++ b/include/mail.h @@ -15,19 +15,19 @@ || itemId == ITEM_RETRO_MAIL)) // mail.h -void ReadMail(struct MailStruct *mail, void (*callback)(void), bool8 flag); +void ReadMail(struct Mail *mail, void (*exitCallback)(void), bool8 hasText); // mail_data.h -void ClearMailData(void); -void ClearMailStruct(struct MailStruct *mail); +void ClearAllMail(void); +void ClearMail(struct Mail *mail); bool8 MonHasMail(struct Pokemon *mon); -u8 GiveMailToMon(struct Pokemon *mon, u16 itemId); +u8 GiveMailToMonByItemId(struct Pokemon *mon, u16 itemId); u16 SpeciesToMailSpecies(u16 species, u32 personality); u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer); -u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail); +u8 GiveMailToMon(struct Pokemon *mon, struct Mail *mail); void TakeMailFromMon(struct Pokemon *mon); void ClearMailItemId(u8 mailId); -u8 TakeMailFromMon2(struct Pokemon *mon); +u8 TakeMailFromMonAndSave(struct Pokemon *mon); bool8 ItemIsMail(u16 itemId); #endif // GUARD_MAIL_H diff --git a/include/main.h b/include/main.h index cad5c0ef9c..5ccb20df88 100644 --- a/include/main.h +++ b/include/main.h @@ -40,9 +40,10 @@ struct Main /*0x439*/ u8 anyLinkBattlerHasFrontierPass:1; }; +#define GAME_CODE_LENGTH 4 extern const u8 gGameVersion; extern const u8 gGameLanguage; -extern const u8 RomHeaderGameCode[4]; +extern const u8 RomHeaderGameCode[GAME_CODE_LENGTH]; extern const u8 RomHeaderSoftwareVersion; extern u16 gKeyRepeatStartDelay; @@ -71,6 +72,5 @@ void RestoreSerialTimer3IntrHandlers(void); void StartTimer1(void); void SeedRngAndSetTrainerId(void); u16 GetGeneratedTrainerIdLower(void); -void sub_819789C(void); #endif // GUARD_MAIN_H diff --git a/include/main_menu.h b/include/main_menu.h index 1944f4ecc5..5f92719d5e 100644 --- a/include/main_menu.h +++ b/include/main_menu.h @@ -2,6 +2,6 @@ #define GUARD_MAIN_MENU_H void CB2_InitMainMenu(void); -void CreateYesNoMenuParameterized(u8 a, u8 b, u16 c, u16 d, u8 e, u8 f); +void CreateYesNoMenuParameterized(u8 x, u8 y, u16 baseTileNum, u16 baseBlock, u8 yesNoPalNum, u8 winPalNum); #endif // GUARD_MAIN_MENU_H diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h index 603d585dad..9e5986ee81 100644 --- a/include/mauville_old_man.h +++ b/include/mauville_old_man.h @@ -5,12 +5,10 @@ extern struct BardSong gBardSong; void SetMauvilleOldMan(void); u8 GetCurrentMauvilleOldMan(void); -void ScrSpecial_SetMauvilleOldManObjEventGfx(void); -u8 sub_81201C8(void); +void SetMauvilleOldManObjEventGfx(void); void SanitizeMauvilleOldManForRuby(OldMan *dest); -void sub_8120670(void); -void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 r1, u32 r6); -void SanitizeReceivedEmeraldOldMan(union OldMan * oldMan, u32 unused, u32 a2); +void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language); +void SanitizeReceivedEmeraldOldMan(union OldMan * oldMan, u32 version, u32 language); void ResetMauvilleOldManFlag(void); #endif // GUARD_MAUVILLE_OLD_MAN_H diff --git a/include/menu.h b/include/menu.h index 07e00eb730..43b564da28 100644 --- a/include/menu.h +++ b/include/menu.h @@ -4,7 +4,6 @@ #include "task.h" #include "text.h" #include "window.h" -#include "constants/pokemon.h" #define MENU_NOTHING_CHOSEN -2 #define MENU_B_PRESSED -1 @@ -41,7 +40,7 @@ struct MenuAction } func; }; -extern const u16 gUnknown_0860F074[]; +extern const u16 gStandardMenuPalette[]; void FreeAllOverworldWindowBuffers(void); void InitStandardTextBoxWindows(void); @@ -51,26 +50,26 @@ void LoadMessageBoxAndBorderGfx(void); void DrawDialogueFrame(u8 windowId, bool8 copyToVram); void ClearStdWindowAndFrame(u8 windowId, bool8 copyToVram); u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 fgColor, u8 bgColor, u8 shadowColor); -void PrintPlayerNameOnWindow(u8, const u8*, u16, u16); +void PrintPlayerNameOnWindow(u8, const u8 *, u16, u16); void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram); void SetStandardWindowBorderStyle(u8 windowId, bool8 copyToVram); void DisplayYesNoMenuDefaultYes(void); u32 GetPlayerTextSpeed(void); u8 GetPlayerTextSpeedDelay(void); -void Menu_LoadStdPalAt(u16 arg0); -void AddTextPrinterWithCallbackForMessage(bool8 a1, void (*callback)(struct TextPrinterTemplate *, u16)); -void sub_8199DF0(u32 bg, u8 a1, int a2, int a3); +void Menu_LoadStdPalAt(u16 offset); +void AddTextPrinterWithCallbackForMessage(bool8 canSpeedUp, void (*callback)(struct TextPrinterTemplate *, u16)); +void BgDmaFill(u32 bg, u8 value, int offset, int size); void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const u8 *color, s8 speed, const u8 *str); void ClearStdWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram); -void SetWindowTemplateFields(struct WindowTemplate* template, u8 priority, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 palNum, u16 baseBlock); +void SetWindowTemplateFields(struct WindowTemplate *template, u8 priority, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 palNum, u16 baseBlock); void DrawStdFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 tileStart, u8 palette); void ScheduleBgCopyTilemapToVram(u8 bgNum); void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *strs); -u8 InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 windowId, u8 numItems, u8 initialCursorPos); +u8 InitMenuInUpperLeftCornerNormal(u8 windowId, u8 numItems, u8 initialCursorPos); u8 Menu_GetCursorPos(void); s8 Menu_ProcessInput(void); s8 Menu_ProcessInputNoWrap(void); -void BlitMenuInfoIcon(u8 winId, u8 a2, u16 x, u16 y); +void BlitMenuInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y); void ResetTempTileDataBuffers(void); void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); bool8 FreeTempTileDataBuffersIfPossible(void); @@ -82,25 +81,24 @@ s8 ProcessMenuInput_other(void); void DoScheduledBgTilemapCopiesToVram(void); void ClearScheduledBgCopiesToVram(void); void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const u8 *color, s8 speed, const u8 *str); -void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 a2, u8 a3); -void sub_81995E4(u8 windowId, u8 optionsNo, const struct MenuAction *actions, const u8 *actionIds); +void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 tileNum, u8 paletteNum); +void PrintMenuActionTextsInUpperLeftCorner(u8 windowId, u8 optionsNo, const struct MenuAction *actions, const u8 *actionIds); void ClearDialogWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram); -u16 sub_8198AA4(u8, u8, u8, u8, u8, u8, u16); void *malloc_and_decompress(const void *src, u32 *sizeOut); u16 copy_decompressed_tile_data_to_vram(u8 bgId, const void *src, u16 size, u16 offset, u8 mode); void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress); -void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8); -void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u8 itemCount2, const struct MenuAction *strs, const u8 *a8); +void PrintMenuActionTexts(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds); +void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, u8 horizontalCount, u8 verticalCount, const struct MenuAction *menuActions, const u8 *actionIds); u8 InitMenuActionGrid(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos); -u8 ChangeListMenuCursorPosition(s8 deltaX, s8 deltaY); +u8 ChangeMenuGridCursorPosition(s8 deltaX, s8 deltaY); u8 GetStartMenuWindowId(void); void ListMenuLoadStdPalAt(u8, u8); u8 Menu_MoveCursor(s8 cursorDelta); u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta); void DrawStdWindowFrame(u8 windowId, bool8 CopyToVram); -u8 sub_81979C4(u8 a1); -u8 sub_81983AC(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos); -void sub_819786C(u8 windowId, bool8 copyToVram); +u8 AddStartMenuWindow(u8 numActions); +u8 InitMenuNormal(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos); +void LoadMessageBoxAndFrameGfx(u8 windowId, bool8 copyToVram); void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress); void RemoveStartMenuWindow(void); void DisplayYesNoMenuWithDefault(u8 initialCursorPos); @@ -110,20 +108,21 @@ u8 GetMapNamePopUpWindowId(void); u8 AddMapNamePopUpWindow(void); void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 letterSpacing, u8 lineSpacing); void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette); -void sub_8199D3C(void *ptr, int delta, int width, int height, bool32 is8BPP); -void sub_8198204(const u8 *string, const u8 *string2, u8 a3, u8 a4, bool8 copyToVram); -void sub_8197AE8(bool8 copyToVram); +void AddValToTilemapBuffer(void *ptr, int delta, int width, int height, bool32 is8BPP); +void EraseFieldMessageBox(bool8 copyToVram); void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const struct MenuAction *strs); -s8 Menu_ProcessInputGridLayout(void); +s8 Menu_ProcessGridInput(void); u8 InitMenuInUpperLeftCorner(u8 windowId, u8 itemCount, u8 initialCursorPos, bool8 APressMuted); s8 Menu_ProcessInputNoWrapAround_other(void); void CopyToBufferFromBgTilemap(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height); -u8 sub_81980F0(u8 bg, u8 xPos, u8 yPos, u8 palette, u16 baseTile); -void sub_8198314(void); -void sub_8198180(const u8 *string, u8 a2, bool8 copyToVram); +u8 HofPCTopBar_AddWindow(u8 bg, u8 xPos, u8 yPos, u8 palette, u16 baseTile); +void HofPCTopBar_RemoveWindow(void); +void HofPCTopBar_Print(const u8 *string, u8 left, bool8 copyToVram); +void HofPCTopBar_PrintPair(const u8 *string, const u8 *string2, bool8 noBg, u8 left, bool8 copyToVram); void ResetBgPositions(void); void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonPress, u8 speed); -void sub_8198C78(void); -void PrintTextArray(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs); +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); #endif // GUARD_MENU_H diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 1434efcf3d..f9a418a938 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -7,7 +7,7 @@ #define MENU_L_PRESSED 1 #define MENU_R_PRESSED 2 -// Exported type declarations +#define SWAP_LINE_HAS_MARGIN (1 << 7) struct YesNoFuncTable { @@ -15,23 +15,20 @@ struct YesNoFuncTable TaskFunc noFunc; }; -// Exported RAM declarations - -// Exported ROM declarations void ResetVramOamAndBgCntRegs(void); void ResetAllBgsCoordinates(void); void SetVBlankHBlankCallbacksToNull(void); -void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 arg2, u8 arg3, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc); +void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 paletteNum, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc); bool16 RunTextPrintersRetIsActive(u8 textPrinterId); void DoYesNoFuncWithChoice(u8 taskId, const struct YesNoFuncTable *data); -void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo); -bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1); +void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 unused1, u8 unused2, u8 unused3, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo); +bool8 AdjustQuantityAccordingToDPadInput(s16 *quantity, u16 max); u8 GetLRKeysPressed(void); u8 GetLRKeysPressedAndHeld(void); bool8 IsHoldingItemAllowed(u16 itemId); bool8 IsWritingMailAllowed(u16 itemId); -bool8 MenuHelpers_LinkSomething(void); -bool8 MenuHelpers_CallLinkSomething(void); +bool8 MenuHelpers_IsLinkActive(void); +bool8 MenuHelpers_ShouldWaitForLinkRecv(void); void SetItemListPerPageCount(struct ItemSlot *slots, u8 slotsCount, u8 *pageItems, u8 *totalItems, u8 maxPerPage); void SetCursorWithinListBounds(u16 *scrollOffset, u16 *cursorPos, u8 maxShownItems, u8 totalItems); void SetCursorScrollWithinListBounds(u16 *scrollOffset, u16 *cursorPos, u8 shownItems, u8 totalItems, u8 maxShownItems); diff --git a/include/menu_specialized.h b/include/menu_specialized.h index c29110662b..10a2110464 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -7,14 +7,6 @@ #include "pokemon.h" #include "constants/berry.h" -#define TAG_CONDITION_MON 100 -#define TAG_CONDITION_BALL 101 -#define TAG_CONDITION_CANCEL 102 -#define TAG_CONDITION_BALL_PLACEHOLDER 103 -#define TAG_CONDITION_SPARKLE 104 - -#define MAX_CONDITION_SPARKLES 10 - // Window IDs for the Player PC Mailbox enum { MAILBOXWIN_TITLE, @@ -23,61 +15,115 @@ enum { MAILBOXWIN_COUNT }; -struct UnknownSubStruct_81D1ED4 -{ - u16 unk0; - u16 unk2; +enum { + TAG_CONDITION_MON = 100, + TAG_CONDITION_BALL, + TAG_CONDITION_CANCEL, + TAG_CONDITION_BALL_PLACEHOLDER, + TAG_CONDITION_SPARKLE, + TAG_CONDITION_MON_MARKINGS, + TAG_CONDITION_MARKINGS_MENU, + TAG_CONDITION_MARKINGS_MENU_2, // Used implicitly by CreateMonMarkingsMenuSprites +}; + +enum { + CONDITION_ICON_SELECTED, + CONDITION_ICON_UNSELECTED, +}; + +#define MAX_CONDITION_SPARKLES 10 + +// The number of extra sparkles shown on a Pokémon's condition screen. +// All Pokémon start with 1, so the max here is MAX_CONDITION_SPARKLES - 1 +#define GET_NUM_CONDITION_SPARKLES(sheen)((sheen) != MAX_SHEEN) ? (sheen) / ((u32)MAX_SHEEN / (MAX_CONDITION_SPARKLES - 1) + 1) : MAX_CONDITION_SPARKLES - 1; + +#define CONDITION_GRAPH_TOP_Y 56 +#define CONDITION_GRAPH_BOTTOM_Y 121 +#define CONDITION_GRAPH_HEIGHT (CONDITION_GRAPH_BOTTOM_Y - CONDITION_GRAPH_TOP_Y + 1) +#define CONDITION_GRAPH_CENTER_X 155 +#define CONDITION_GRAPH_CENTER_Y ((CONDITION_GRAPH_BOTTOM_Y + CONDITION_GRAPH_TOP_Y) / 2 + 3) +#define CONDITION_GRAPH_UPDATE_STEPS 10 +#define CONDITION_GRAPH_LOAD_MAX 4 + +// Equivalent to flavor and contest values, but in a different order. +enum { + CONDITION_COOL, + CONDITION_TOUGH, + CONDITION_SMART, + CONDITION_CUTE, + CONDITION_BEAUTY, + CONDITION_COUNT +}; + +// Yet another order. This one is the same (by coincidence) as the contest categories +enum { + GRAPH_COOL, + GRAPH_BEAUTY, + GRAPH_CUTE, + GRAPH_SMART, + GRAPH_TOUGH, }; struct ConditionGraph { - /*0x000*/ u8 stat[4][FLAVOR_COUNT]; - /*0x014*/ struct UnknownSubStruct_81D1ED4 unk14[4][FLAVOR_COUNT]; - /*0x064*/ struct UnknownSubStruct_81D1ED4 unk64[10][FLAVOR_COUNT]; - /*0x12C*/ struct UnknownSubStruct_81D1ED4 unk12C[FLAVOR_COUNT]; - /*0x140*/ u16 unk140[66][2]; - /*0x248*/ u16 unk248[66][2]; - /*0x350*/ u16 unk350; - /*0x352*/ u16 unk352; - /*0x354*/ u8 unk354; - /*0x355*/ u8 state; + /*0x000*/ u8 conditions[CONDITION_GRAPH_LOAD_MAX][CONDITION_COUNT]; + /*0x014*/ struct UCoords16 savedPositions[CONDITION_GRAPH_LOAD_MAX][CONDITION_COUNT]; + /*0x064*/ struct UCoords16 newPositions[CONDITION_GRAPH_UPDATE_STEPS][CONDITION_COUNT]; + /*0x12C*/ struct UCoords16 curPositions[CONDITION_COUNT]; + /*0x140*/ u16 scanlineRight[CONDITION_GRAPH_HEIGHT][2]; + /*0x248*/ u16 scanlineLeft[CONDITION_GRAPH_HEIGHT][2]; + /*0x350*/ u16 bottom; + /*0x352*/ u16 updateCounter; + /*0x354*/ bool8 needsDraw; + /*0x355*/ u8 scanlineResetState; }; +// Mailbox menu bool8 MailboxMenu_Alloc(u8 count); u8 MailboxMenu_AddWindow(u8 windowIdx); u8 MailboxMenu_CreateList(struct PlayerPCItemPageStruct *page); void MailboxMenu_AddScrollArrows(struct PlayerPCItemPageStruct *page); void MailboxMenu_Free(void); void MailboxMenu_RemoveWindow(u8 windowIdx); -void InitConditionGraphData(struct ConditionGraph *graph); -void sub_81D2108(struct ConditionGraph *graph); -void SetConditionGraphIOWindows(u8 bg); -void InitConditionGraphState(struct ConditionGraph *graph); -void sub_81D2230(struct ConditionGraph *graph); -bool8 SetupConditionGraphScanlineParams(struct ConditionGraph *graph); -bool32 TransitionConditionGraph(struct ConditionGraph *graph); -void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1); -void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2); -void MoveRelearnerPrintText(u8 *str); -bool16 MoveRelearnerRunTextPrinters(void); -void MoveRelearnerCreateYesNoMenu(void); -u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices); -void InitMoveRelearnerWindows(bool8 useContextWindow); -s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst); + +// Condition graph +void ConditionGraph_Init(struct ConditionGraph *graph); +void ConditionGraph_InitWindow(u8 bg); +void ConditionGraph_InitResetScanline(struct ConditionGraph *graph); +bool8 ConditionGraph_ResetScanline(struct ConditionGraph *graph); +void ConditionGraph_Draw(struct ConditionGraph *graph); +bool8 ConditionGraph_TryUpdate(struct ConditionGraph *graph); +void ConditionGraph_Update(struct ConditionGraph *graph); +void ConditionGraph_CalcPositions(u8 *conditions, struct UCoords16 *positions); +void ConditionGraph_SetNewPositions(struct ConditionGraph *graph, struct UCoords16 *old, struct UCoords16 *new); + +// Condition menu +bool8 ConditionMenu_UpdateMonEnter(struct ConditionGraph *graph, s16 *x); +bool8 ConditionMenu_UpdateMonExit(struct ConditionGraph *graph, s16 *x); +bool8 MoveConditionMonOnscreen(s16 *x); +bool8 MoveConditionMonOffscreen(s16 *x); void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel); void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel); void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel); -bool8 MoveConditionMonOnscreen(s16 *x); -bool8 MoveConditionMonOffscreen(s16 *x); -bool8 TryUpdateConditionMonTransitionOn(struct ConditionGraph *graph, s16 *x); -bool8 TryUpdateConditionMonTransitionOff(struct ConditionGraph *graph, s16 *x); void LoadConditionMonPicTemplate(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal); void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals); +s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst); + +// Condition sparkles void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal); void ResetConditionSparkleSprites(struct Sprite **sprites); void CreateConditionSparkleSprites(struct Sprite **sprites, u8 monSpriteId, u8 count); void DestroyConditionSparkleSprites(struct Sprite **sprites); void FreeConditionSparkles(struct Sprite **sprites); + +// Move relearner +void MoveRelearnerPrintText(u8 *str); +bool16 MoveRelearnerRunTextPrinters(void); +void MoveRelearnerCreateYesNoMenu(void); +u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices); +void InitMoveRelearnerWindows(bool8 useContextWindow); + +// Level up window void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr); void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats); diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 584b3e546e..c2d0d23ee3 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -1,6 +1,14 @@ #ifndef GUARD_METATILE_BEHAVIOR_H #define GUARD_METATILE_BEHAVIOR_H +// Return values for MetatileBehavior_GetBridgeType +enum { + BRIDGE_TYPE_OCEAN, // For log bridges over 'ocean' style water (Routes 110/119 use this). + BRIDGE_TYPE_POND_LOW, + BRIDGE_TYPE_POND_MED, + BRIDGE_TYPE_POND_HIGH, +}; + bool8 MetatileBehavior_IsATile(u8); bool8 MetatileBehavior_IsEncounterTile(u8); bool8 MetatileBehavior_IsJumpEast(u8); @@ -15,7 +23,6 @@ bool8 MetatileBehavior_IsIce(u8); bool8 MetatileBehavior_IsWarpDoor(u8); bool8 MetatileBehavior_IsDoor(u8); bool8 MetatileBehavior_IsEscalator(u8); -bool8 MetatileBehavior_IsMB_04(u8); bool8 MetatileBehavior_IsLadder(u8); bool8 MetatileBehavior_IsNonAnimDoor(u8); bool8 MetatileBehavior_IsDeepSouthWarp(u8); @@ -28,7 +35,6 @@ bool8 MetatileBehavior_IsArrowWarp(u8); bool8 MetatileBehavior_IsForcedMovementTile(u8); bool8 MetatileBehavior_IsIce_2(u8); bool8 MetatileBehavior_IsTrickHouseSlipperyFloor(u8); -bool8 MetatileBehavior_IsMB_05(u8); bool8 MetatileBehavior_IsWalkNorth(u8); bool8 MetatileBehavior_IsWalkSouth(u8); bool8 MetatileBehavior_IsWalkWest(u8); @@ -51,14 +57,12 @@ bool8 MetatileBehavior_IsSecretBaseTree(u8); bool8 MetatileBehavior_IsSecretBaseShrub(u8); bool8 MetatileBehavior_IsSecretBasePC(u8); bool8 MetatileBehavior_IsRecordMixingSecretBasePC(u8); -bool8 MetatileBehavior_IsMB_B2(u8); -bool8 MetatileBehavior_IsBlockDecoration(u8); +bool8 MetatileBehavior_IsSecretBaseTrainerSpot(u8); bool8 MetatileBehavior_IsSecretBaseImpassable(u8); -bool8 MetatileBehavior_IsMB_C6(u8); +bool8 MetatileBehavior_IsSecretBaseDecorationBase(u8); bool8 MetatileBehavior_IsSecretBasePoster(u8); bool8 MetatileBehavior_IsNormal(u8); bool8 MetatileBehavior_IsSecretBaseNorthWall(u8); -bool8 MetatileBehavior_IsMB_B2_Duplicate(u8); bool8 MetatileBehavior_HoldsSmallDecoration(u8); bool8 MetatileBehavior_HoldsLargeDecoration(u8); bool8 MetatileBehavior_IsSecretBaseHole(u8); @@ -76,9 +80,9 @@ bool8 MetatileBehavior_IsLongGrass(u8); bool8 MetatileBehavior_IsBerryTreeSoil(u8); bool8 MetatileBehavior_IsAshGrass(u8); bool8 MetatileBehavior_IsFootprints(u8); -bool8 MetatileBehavior_IsBridge(u8); +bool8 MetatileBehavior_IsBridgeOverWater(u8); u8 MetatileBehavior_GetBridgeType(u8); -u8 MetatileBehavior_8089510(u8); +bool8 MetatileBehavior_IsBridgeOverWaterNoEdge(u8); bool8 MetatileBehavior_IsLandWildEncounter(u8); bool8 MetatileBehavior_IsWaterWildEncounter(u8); bool8 MetatileBehavior_IsIndoorEncounter(u8); @@ -89,7 +93,6 @@ bool8 MetatileBehavior_IsShallowFlowingWater(u8); bool8 MetatileBehavior_IsThinIce(u8); bool8 MetatileBehavior_IsCrackedIce(u8); bool8 MetatileBehavior_IsDeepOrOceanWater(u8); -bool8 MetatileBehavior_IsMB_18_OrMB_1A(u8); bool8 MetatileBehavior_IsSurfableAndNotWaterfall(u8); bool8 MetatileBehavior_IsEastBlocked(u8); bool8 MetatileBehavior_IsWestBlocked(u8); @@ -99,10 +102,10 @@ bool8 MetatileBehavior_IsShortGrass(u8); bool8 MetatileBehavior_IsHotSprings(u8); bool8 MetatileBehavior_IsWaterfall(u8); bool8 MetatileBehavior_IsFortreeBridge(u8); -bool8 MetatileBehavior_IsPacifidlogVerticalLog1(u8); -bool8 MetatileBehavior_IsPacifidlogVerticalLog2(u8); -bool8 MetatileBehavior_IsPacifidlogHorizontalLog1(u8); -bool8 MetatileBehavior_IsPacifidlogHorizontalLog2(u8); +bool8 MetatileBehavior_IsPacifidlogVerticalLogTop(u8); +bool8 MetatileBehavior_IsPacifidlogVerticalLogBottom(u8); +bool8 MetatileBehavior_IsPacifidlogHorizontalLogLeft(u8); +bool8 MetatileBehavior_IsPacifidlogHorizontalLogRight(u8); bool8 MetatileBehavior_IsPacifidlogLog(u8); bool8 MetatileBehavior_IsTrickHousePuzzleDoor(u8); bool8 MetatileBehavior_IsRegionMap(u8); @@ -115,7 +118,7 @@ bool8 MetatileBehavior_IsSecretBaseSpinMat(u8); bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8); bool8 MetatileBehavior_IsLavaridge1FWarp(u8); bool8 MetatileBehavior_IsAquaHideoutWarp(u8); -bool8 MetatileBehavior_IsWarpOrBridge(u8); +bool8 MetatileBehavior_IsUnionRoomWarp(u8); bool8 MetatileBehavior_IsMossdeepGymWarp(u8); bool8 MetatileBehavior_IsSurfableFishableWater(u8); bool8 MetatileBehavior_IsMtPyreHole(u8); diff --git a/include/mevent.h b/include/mevent.h deleted file mode 100755 index 4b7d39b0c3..0000000000 --- a/include/mevent.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef GUARD_MEVENT_H -#define GUARD_MEVENT_H - -struct MEvent_Str_1 -{ - u16 unk_000; - size_t unk_004; - const void * unk_008; -}; - -struct MEvent_Str_2 -{ - u8 fill_00[0x40]; -}; - -struct MEventStruct_Unk1442CC -{ - u32 unk_00; - u16 unk_04; - u32 unk_08; - u16 unk_0C; - u32 unk_10; - u16 unk_14; - u16 unk_16[NUM_QUESTIONNAIRE_WORDS]; - struct MEventBuffer_3430_Sub unk_20; - u8 unk_44; - u8 unk_45[7]; - u8 unk_4C[4]; - u16 unk_50[6]; - u8 unk_5C[4]; - u8 unk_60; -}; - -void sub_801AFD8(void); -struct WonderNews *GetSavedWonderNews(void); -struct WonderCard *GetSavedWonderCard(void); -struct MEventBuffer_3430_Sub *sav1_get_mevent_buffer_2(void); -struct MysteryEventStruct *sub_801B044(void); -u16 *GetQuestionnaireWordsPtr(void); -void DestroyWonderNews(void); -bool32 sub_801B078(const struct WonderNews *src); -bool32 ValidateReceivedWonderNews(void); -bool32 WonderNews_Test_Unk_02(void); -bool32 sub_801B1A4(const u8 *src); -void DestroyWonderCard(void); -bool32 sub_801B21C(const struct WonderCard *data); -bool32 ValidateReceivedWonderCard(void); -bool32 WonderCard_Test_Unk_08_6(void); -u16 GetWonderCardFlagID(void); -void WonderCard_ResetInternalReceivedFlag(struct WonderCard *buffer); -bool32 CheckReceivedGiftFromWonderCard(void); -bool32 sub_801B508(const u16 *data); -void sub_801B580(struct MEventStruct_Unk1442CC *data, bool32 a1); -bool32 sub_801B6A0(const struct MEventStruct_Unk1442CC *data, bool32 a1); -u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused); -u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused); -bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1); -u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command); -u16 mevent_081445C0(u32 command); -void ResetReceivedWonderCardFlag(void); -bool32 MEventHandleReceivedWonderCard(u16 a0); - -#endif //GUARD_MEVENT_H diff --git a/include/mevent2.h b/include/mevent2.h deleted file mode 100644 index 316a9e6dea..0000000000 --- a/include/mevent2.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef GUARD_MEVENT2_H -#define GUARD_MEVENT2_H - -void RecordIdOfWonderCardSenderByEventType(u32, u32); - -#endif //GUARD_MEVENT2_H diff --git a/include/mevent_801BAAC.h b/include/mevent_801BAAC.h deleted file mode 100644 index d76bc92c21..0000000000 --- a/include/mevent_801BAAC.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef GUARD_MEVENT_801BAAC_H -#define GUARD_MEVENT_801BAAC_H - -bool32 InitWonderCardResources(struct WonderCard * r5, struct MEventBuffer_3430_Sub * r6); -bool32 InitWonderNewsResources(const struct WonderNews * a0); -s32 FadeToWonderCardMenu(void); -s32 FadeToWonderNewsMenu(void); -s32 FadeOutFromWonderCard(bool32 flag); -void DestroyWonderCardResources(void); -s32 FadeOutFromWonderNews(bool32 flag); -void DestroyWonderNewsResources(void); -u32 MENews_GetInput(u16 input); -void MENews_AddScrollIndicatorArrowPair(void); -void MENews_RemoveScrollIndicatorArrowPair(void); - -#endif //GUARD_MEVENT_801BAAC_H diff --git a/include/mevent_client.h b/include/mevent_client.h deleted file mode 100644 index c32d14d7aa..0000000000 --- a/include/mevent_client.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef GUARD_MEVENT_CLIENT_H -#define GUARD_MEVENT_CLIENT_H - -#include "mevent_server_helpers.h" - -struct mevent_client_cmd -{ - u32 instr; - u32 parameter; -}; - -struct mevent_client -{ - u32 unk_00; - u32 param; - u32 mainseqno; - u32 flag; - u32 cmdidx; - void * sendBuffer; - void * recvBuffer; - struct mevent_client_cmd * cmdBuffer; - void * buffer; - struct mevent_srv_sub manager; - u32 unk_4C; -}; - -void mevent_client_do_init(u32 arg); -u32 mevent_client_do_exec(u16 * a0); -void mevent_client_inc_flag(void); -void * mevent_client_get_buffer(void); -void mevent_client_set_param(u32 a0); - -#endif //GUARD_MEVENT_CLIENT_H diff --git a/include/mevent_news.h b/include/mevent_news.h deleted file mode 100755 index 5fa0094995..0000000000 --- a/include/mevent_news.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef GUARD_MEVENT_NEWS_H -#define GUARD_MEVENT_NEWS_H - -void sub_801DBC0(void); -void GenerateRandomNews(u32 a0); - -#endif //GUARD_MEVENT_NEWS_H diff --git a/include/mevent_server.h b/include/mevent_server.h deleted file mode 100644 index e74337cf6f..0000000000 --- a/include/mevent_server.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef GUARD_MEVENT_SERVER_H -#define GUARD_MEVENT_SERVER_H - -#include "mevent_server_helpers.h" - -struct mevent_cmd -{ - u32 instr; - bool32 flag; - const void * parameter; -}; - -struct mevent_srv_common -{ - u32 unk_00; - u32 param; - u32 mainseqno; - u32 cmdidx; - const struct mevent_cmd * cmdBuffer; - void * recvBuffer; - struct WonderCard * wonder_card; - struct WonderNews * wonder_news; - struct MEventStruct_Unk1442CC * mevent_unk1442cc; - const void * sendBuffer1; - u32 sendBuffer1Size; - const void * sendBuffer2; - u32 sendBuffer2Size; - u32 sendWord; - struct mevent_srv_sub manager; -}; - -void mevent_srv_new_wcard(); -void mevent_srv_init_wnews(); -u32 mevent_srv_common_do_exec(u16 * a0); - -#endif //GUARD_MEVENT_SERVER_H diff --git a/include/mevent_server_helpers.h b/include/mevent_server_helpers.h deleted file mode 100644 index e4e409862a..0000000000 --- a/include/mevent_server_helpers.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef GUARD_MEVENT_SERVER_HELPERS_H -#define GUARD_MEVENT_SERVER_HELPERS_H - -#define ME_SEND_BUF_SIZE 0x400 - -struct mevent_srv_sub -{ - s32 seqno; - u8 sendPlayerNo; - u8 recvPlayerNo; - u16 recvIdent; - u16 recvCounter; - u16 recvCRC; - u16 recvSize; - u16 sendIdent; - u16 sendCounter; - u16 sendCRC; - u16 sendSize; - void * recvBfr; - const void * sendBfr; - u32 (*recvFunc)(struct mevent_srv_sub *); - u32 (*sendFunc)(struct mevent_srv_sub *); -}; - -struct send_recv_header -{ - u16 ident; - u16 crc; - u16 size; -}; - -void mevent_srv_sub_init(struct mevent_srv_sub *, u32, u32); -void mevent_srv_sub_init_send(struct mevent_srv_sub * manager, u32 ident, const void * src, u32 size); -bool32 mevent_srv_sub_recv(struct mevent_srv_sub * manager); -bool32 mevent_srv_sub_send(struct mevent_srv_sub * manager); -void mevent_srv_sub_init_recv(struct mevent_srv_sub *, u32, void *); - -#endif //GUARD_MEVENT_SERVER_HELPERS_H diff --git a/include/money.h b/include/money.h index 5c7c1c9842..e7a8379787 100644 --- a/include/money.h +++ b/include/money.h @@ -1,11 +1,11 @@ #ifndef GUARD_MONEY_H #define GUARD_MONEY_H -u32 GetMoney(u32* moneyPtr); -void SetMoney(u32* moneyPtr, u32 newValue); -bool8 IsEnoughMoney(u32* moneyPtr, u32 cost); -void AddMoney(u32* moneyPtr, u32 toAdd); -void RemoveMoney(u32* moneyPtr, u32 toSub); +u32 GetMoney(u32 *moneyPtr); +void SetMoney(u32 *moneyPtr, u32 newValue); +bool8 IsEnoughMoney(u32 *moneyPtr, u32 cost); +void AddMoney(u32 *moneyPtr, u32 toAdd); +void RemoveMoney(u32 *moneyPtr, u32 toSub); bool8 IsEnoughForCostInVar0x8005(void); void SubtractMoneyFromVar0x8005(void); void PrintMoneyAmountInMoneyBox(u8 windowId, int amount, u8 speed); diff --git a/include/mystery_event_msg.h b/include/mystery_event_msg.h index 465b60ccb6..1844960237 100644 --- a/include/mystery_event_msg.h +++ b/include/mystery_event_msg.h @@ -1,16 +1,16 @@ #ifndef GUARD_MYSTERY_EVENT_MSG_H #define GUARD_MYSTERY_EVENT_MSG_H -extern const u8 gText_MysteryGiftBerry[]; -extern const u8 gText_MysteryGiftBerryTransform[]; -extern const u8 gText_MysteryGiftBerryObtained[]; -extern const u8 gText_MysteryGiftSpecialRibbon[]; -extern const u8 gText_MysteryGiftNationalDex[]; -extern const u8 gText_MysteryGiftRareWord[]; -extern const u8 gText_MysteryGiftSentOver[]; -extern const u8 gText_MysteryGiftFullParty[]; -extern const u8 gText_MysteryGiftNewTrainer[]; -extern const u8 gText_MysteryGiftNewAdversaryInBattleTower[]; -extern const u8 gText_MysteryGiftCantBeUsed[]; +extern const u8 gText_MysteryEventBerry[]; +extern const u8 gText_MysteryEventBerryTransform[]; +extern const u8 gText_MysteryEventBerryObtained[]; +extern const u8 gText_MysteryEventSpecialRibbon[]; +extern const u8 gText_MysteryEventNationalDex[]; +extern const u8 gText_MysteryEventRareWord[]; +extern const u8 gText_MysteryEventSentOver[]; +extern const u8 gText_MysteryEventFullParty[]; +extern const u8 gText_MysteryEventNewTrainer[]; +extern const u8 gText_MysteryEventNewAdversaryInBattleTower[]; +extern const u8 gText_MysteryEventCantBeUsed[]; #endif // GUARD_MYSTERY_EVENT_MSG_H diff --git a/include/mystery_event_script.h b/include/mystery_event_script.h index 991cab53a4..198a07e857 100644 --- a/include/mystery_event_script.h +++ b/include/mystery_event_script.h @@ -1,8 +1,16 @@ #ifndef GUARD_MYSTERY_EVENT_SCRIPT_H #define GUARD_MYSTERY_EVENT_SCRIPT_H -void sub_8153870(u8 *script); -bool32 sub_8153884(u32 *a0); +enum { + MEVENT_STATUS_LOAD_OK, + MEVENT_STATUS_LOAD_ERROR, + MEVENT_STATUS_SUCCESS, + MEVENT_STATUS_FAILURE, + MEVENT_STATUS_FF = 0xFF +}; + +void InitMysteryEventScriptContext(u8 *script); +bool32 RunMysteryEventScriptContextCommand(u32 *status); u32 RunMysteryEventScript(u8 *script); void SetMysteryEventScriptStatus(u32 val); u16 GetRecordMixingGift(void); diff --git a/include/mystery_gift.h b/include/mystery_gift.h old mode 100644 new mode 100755 index fb0414ee06..3b27b3f2dc --- a/include/mystery_gift.h +++ b/include/mystery_gift.h @@ -1,18 +1,57 @@ #ifndef GUARD_MYSTERY_GIFT_H #define GUARD_MYSTERY_GIFT_H -extern bool8 gGiftIsFromEReader; +#include "main.h" +#include "constants/mystery_gift.h" -u16 GetMysteryGiftBaseBlock(void); -void c2_mystery_gift_e_reader_run(void); -void PrintMysteryGiftOrEReaderTopMenu(bool8 isJapanese, bool32 usePickOkCancel); -void MG_DrawCheckerboardPattern(u32 bg); -void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void); -bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str); -void AddTextPrinterToWindow1(const u8 *src); -void c2_ereader(void); -void c2_mystery_gift(void); -void MG_DrawTextBorder(u8 windowId); -s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u16 *windowId, bool8 yesNoBoxPlacement, const u8 *str); +struct MysteryGiftLinkGameData +{ + // It's possible these first 5 fields had some other meaningful purpose, + // but they are only ever set when creating this data and read to validate it. + u32 validationVar; + u16 validationFlag1; + u32 validationFlag2; + u16 validationGiftType1; + u32 validationGiftType2; + u16 flagId; + u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS]; + struct WonderCardMetadata cardMetadata; + u8 maxStamps; + u8 playerName[PLAYER_NAME_LENGTH]; + u8 playerTrainerId[TRAINER_ID_LENGTH]; + u16 easyChatProfile[EASY_CHAT_BATTLE_WORDS_COUNT]; + u8 romHeaderGameCode[GAME_CODE_LENGTH]; + u8 romHeaderSoftwareVersion; +}; + +void ClearMysteryGift(void); +struct WonderNews *GetSavedWonderNews(void); +struct WonderCard *GetSavedWonderCard(void); +struct WonderCardMetadata *GetSavedWonderCardMetadata(void); +struct WonderNewsMetadata *GetSavedWonderNewsMetadata(void); +u16 *GetQuestionnaireWordsPtr(void); +void ClearSavedWonderNewsAndRelated(void); +void ClearSavedWonderCardAndRelated(void); +bool32 SaveWonderNews(const struct WonderNews *news); +bool32 SaveWonderCard(const struct WonderCard *card); +bool32 ValidateSavedWonderNews(void); +bool32 ValidateSavedWonderCard(void); +bool32 IsWonderNewsSameAsSaved(const u8 *news); +bool32 IsSendingSavedWonderNewsAllowed(void); +bool32 IsSendingSavedWonderCardAllowed(void); +u16 GetWonderCardFlagID(void); +void DisableWonderCardSending(struct WonderCard *card); +bool32 IsSavedWonderCardGiftNotReceived(void); +bool32 MysteryGift_TrySaveStamp(const u16 *stamp); +void MysteryGift_LoadLinkGameData(struct MysteryGiftLinkGameData *data, bool32 isWonderNews); +bool32 MysteryGift_ValidateLinkGameData(const struct MysteryGiftLinkGameData *data, bool32 isWonderNews); +u32 MysteryGift_CompareCardFlags(const u16 *flagId, const struct MysteryGiftLinkGameData *data, const void *unused); +u32 MysteryGift_CheckStamps(const u16 *stamp, const struct MysteryGiftLinkGameData *data, const void *unused); +bool32 MysteryGift_DoesQuestionnaireMatch(const struct MysteryGiftLinkGameData *data, const u16 *words); +u16 MysteryGift_GetCardStatFromLinkData(const struct MysteryGiftLinkGameData *data, u32 stat); +u16 MysteryGift_GetCardStat(u32 stat); +void MysteryGift_DisableStats(void); +bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId); +void MysteryGift_TryIncrementStat(u32 stat, u32 trainerId); #endif //GUARD_MYSTERY_GIFT_H diff --git a/include/mystery_gift_client.h b/include/mystery_gift_client.h new file mode 100644 index 0000000000..8214d69eff --- /dev/null +++ b/include/mystery_gift_client.h @@ -0,0 +1,92 @@ +#ifndef GUARD_MYSTERY_GIFT_CLIENT_H +#define GUARD_MYSTERY_GIFT_CLIENT_H + +#include "mystery_gift_link.h" + +// Return values for client functions called by MysteryGiftClient_Run +enum { + CLI_RET_INIT, + CLI_RET_ACTIVE, + CLI_RET_YES_NO, + CLI_RET_PRINT_MSG, + CLI_RET_ASK_TOSS, + CLI_RET_COPY_MSG, + CLI_RET_END, +}; + +// IDs for client script instructions +enum { + CLI_NONE, + CLI_RETURN, + CLI_RECV, + CLI_SEND_LOADED, + CLI_COPY_RECV, + CLI_YES_NO, + CLI_COPY_RECV_IF_N, + CLI_COPY_RECV_IF, + CLI_LOAD_GAME_DATA, + CLI_SAVE_NEWS, + CLI_SAVE_CARD, + CLI_PRINT_MSG, + CLI_COPY_MSG, + CLI_ASK_TOSS, + CLI_LOAD_TOSS_RESPONSE, + CLI_RUN_MEVENT_SCRIPT, + CLI_SAVE_STAMP, + CLI_SAVE_RAM_SCRIPT, + CLI_RECV_EREADER_TRAINER, + CLI_SEND_STAT, + CLI_SEND_READY_END, + CLI_RUN_BUFFER_SCRIPT, +}; + +// IDs for client messages when ending a script. +// Given as the parameter to CLI_RETURN, and resolved to text in GetClientResultMessage +enum { + CLI_MSG_NOTHING_SENT, + CLI_MSG_RECORD_UPLOADED, + CLI_MSG_CARD_RECEIVED, + CLI_MSG_NEWS_RECEIVED, + CLI_MSG_STAMP_RECEIVED, + CLI_MSG_HAD_CARD, + CLI_MSG_HAD_STAMP, + CLI_MSG_HAD_NEWS, + CLI_MSG_NO_ROOM_STAMPS, + CLI_MSG_COMM_CANCELED, + CLI_MSG_CANT_ACCEPT, + CLI_MSG_COMM_ERROR, + CLI_MSG_TRAINER_RECEIVED, + CLI_MSG_BUFFER_SUCCESS, + CLI_MSG_BUFFER_FAILURE, +}; + +#define CLIENT_MAX_MSG_SIZE 64 + +struct MysteryGiftClientCmd +{ + u32 instr; + u32 parameter; +}; + +struct MysteryGiftClient +{ + u32 unused; + u32 param; + u32 funcId; + u32 funcState; + u32 cmdidx; + void * sendBuffer; + void * recvBuffer; + struct MysteryGiftClientCmd * script; + void * msg; + struct MysteryGiftLink link; + bool32 isWonderNews; +}; + +void MysteryGiftClient_Create(bool32 isWonderNews); +u32 MysteryGiftClient_Run(u16 * endVal); +void MysteryGiftClient_AdvanceState(void); +void * MysteryGiftClient_GetMsg(void); +void MysteryGiftClient_SetParam(u32 value); + +#endif //GUARD_MYSTERY_GIFT_CLIENT_H diff --git a/include/mystery_gift_link.h b/include/mystery_gift_link.h new file mode 100644 index 0000000000..32100db5f1 --- /dev/null +++ b/include/mystery_gift_link.h @@ -0,0 +1,49 @@ +#ifndef GUARD_MYSTERY_GIFT_LINK_H +#define GUARD_MYSTERY_GIFT_LINK_H + +#define MG_LINK_BUFFER_SIZE 0x400 + +// Send/receive ids for the Client/Server to make sure +// they're sending/receiving the same thing +enum { + MG_LINKID_CLIENT_SCRIPT = 16, + MG_LINKID_GAME_DATA, + MG_LINKID_GAME_STAT, + MG_LINKID_RESPONSE, + MG_LINKID_READY_END, + MG_LINKID_DYNAMIC_MSG, + MG_LINKID_CARD, + MG_LINKID_NEWS, + MG_LINKID_STAMP, + MG_LINKID_RAM_SCRIPT, + MG_LINKID_EREADER_TRAINER, + MG_LINKID_UNK_1, + MG_LINKID_UNK_2, +}; + +struct MysteryGiftLink +{ + s32 state; + u8 sendPlayerId; + u8 recvPlayerId; + u16 recvIdent; + u16 recvCounter; + u16 recvCRC; + u16 recvSize; + u16 sendIdent; + u16 sendCounter; + u16 sendCRC; + u16 sendSize; + void * recvBuffer; + const void * sendBuffer; + u32 (*recvFunc)(struct MysteryGiftLink *); + u32 (*sendFunc)(struct MysteryGiftLink *); +}; + +void MysteryGiftLink_Init(struct MysteryGiftLink * link, u32 sendPlayerId, u32 recvPlayerId); +void MysteryGiftLink_InitSend(struct MysteryGiftLink * link, u32 ident, const void * src, u32 size); +bool32 MysteryGiftLink_Recv(struct MysteryGiftLink * link); +bool32 MysteryGiftLink_Send(struct MysteryGiftLink * link); +void MysteryGiftLink_InitRecv(struct MysteryGiftLink * link, u32 ident, void * dest); + +#endif //GUARD_MYSTERY_GIFT_LINK_H diff --git a/include/mystery_gift_menu.h b/include/mystery_gift_menu.h new file mode 100644 index 0000000000..dc30d30519 --- /dev/null +++ b/include/mystery_gift_menu.h @@ -0,0 +1,18 @@ +#ifndef GUARD_MYSTERY_GIFT_MENU_H +#define GUARD_MYSTERY_GIFT_MENU_H + +extern bool8 gGiftIsFromEReader; + +u16 GetMysteryGiftBaseBlock(void); +void CB2_MysteryGiftEReader(void); +void PrintMysteryGiftOrEReaderTopMenu(bool8 isJapanese, bool32 usePickOkCancel); +void MG_DrawCheckerboardPattern(u32 bg); +void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void); +bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str); +void AddTextPrinterToWindow1(const u8 *src); +void CB2_InitEReader(void); +void CB2_InitMysteryGift(void); +void MG_DrawTextBorder(u8 windowId); +s8 DoMysteryGiftYesNo(u8 *textState, u16 *windowId, bool8 yesNoBoxPlacement, const u8 *str); + +#endif //GUARD_MYSTERY_GIFT_MENU_H diff --git a/include/mystery_gift_server.h b/include/mystery_gift_server.h new file mode 100644 index 0000000000..8e3842f73c --- /dev/null +++ b/include/mystery_gift_server.h @@ -0,0 +1,100 @@ +#ifndef GUARD_MYSTERY_GIFT_SERVER_H +#define GUARD_MYSTERY_GIFT_SERVER_H + +#include "mystery_gift_link.h" + +// Return values for Server_* functions. +// Other than SVR_RET_END, effectively useless (not checked for). +enum { + SVR_RET_INIT, + SVR_RET_ACTIVE, + SVR_RET_UNUSED, + SVR_RET_END +}; + +// IDs for server script instructions +enum { + SVR_RETURN, + SVR_SEND, + SVR_RECV, + SVR_GOTO, + SVR_GOTO_IF_EQ, + SVR_COPY_GAME_DATA, + SVR_CHECK_GAME_DATA_CARD, + SVR_CHECK_EXISTING_CARD, + SVR_READ_RESPONSE, + SVR_CHECK_EXISTING_STAMPS, + SVR_GET_CARD_STAT, + SVR_CHECK_QUESTIONNAIRE, + SVR_COMPARE, + SVR_LOAD_CARD, + SVR_LOAD_NEWS, + SVR_LOAD_RAM_SCRIPT, + SVR_LOAD_STAMP, + SVR_LOAD_UNK_2, + SVR_LOAD_CLIENT_SCRIPT, + SVR_LOAD_EREADER_TRAINER, + SVR_LOAD_MSG, + SVR_COPY_STAMP, + SVR_COPY_CARD, + SVR_COPY_NEWS, + SVR_SET_RAM_SCRIPT, + SVR_SET_CLIENT_SCRIPT, + SVR_COPY_SAVED_CARD, + SVR_COPY_SAVED_NEWS, + SVR_COPY_SAVED_RAM_SCRIPT, + SVR_LOAD_UNK_1, + SVR_CHECK_GAME_DATA_NEWS, +}; + +// IDs for server messages when ending a script. +// Given as the parameter to SVR_RETURN, and resolved to text in GetServerResultMessage +enum { + SVR_MSG_NOTHING_SENT, + SVR_MSG_RECORD_UPLOADED, + SVR_MSG_CARD_SENT, + SVR_MSG_NEWS_SENT, + SVR_MSG_STAMP_SENT, + SVR_MSG_HAS_CARD, + SVR_MSG_HAS_STAMP, + SVR_MSG_HAS_NEWS, + SVR_MSG_NO_ROOM_STAMPS, + SVR_MSG_CLIENT_CANCELED, + SVR_MSG_CANT_SEND_GIFT_1, + SVR_MSG_COMM_ERROR, + SVR_MSG_GIFT_SENT_1, + SVR_MSG_GIFT_SENT_2, + SVR_MSG_CANT_SEND_GIFT_2, +}; + +struct MysteryGiftServerCmd +{ + u32 instr; + u32 parameter; + const void * ptr; +}; + +struct MysteryGiftServer +{ + u32 unused; + u32 param; + u32 funcId; + u32 cmdidx; + const struct MysteryGiftServerCmd * script; + void * recvBuffer; + struct WonderCard * card; + struct WonderNews * news; + struct MysteryGiftLinkGameData * linkGameData; + const void * ramScript; + u32 ramScriptSize; + const void * clientScript; + u32 clientScriptSize; + u32 stamp; + struct MysteryGiftLink link; +}; + +void MysterGiftServer_CreateForCard(); +void MysterGiftServer_CreateForNews(); +u32 MysterGiftServer_Run(u16 * endVal); + +#endif //GUARD_MYSTERY_GIFT_SERVER_H diff --git a/include/mystery_gift_view.h b/include/mystery_gift_view.h new file mode 100644 index 0000000000..038093c7a1 --- /dev/null +++ b/include/mystery_gift_view.h @@ -0,0 +1,24 @@ +#ifndef GUARD_MYSTERY_GIFT_VIEW_H +#define GUARD_MYSTERY_GIFT_VIEW_H + +enum { + NEWS_INPUT_A, + NEWS_INPUT_B, + NEWS_INPUT_SCROLL_UP, + NEWS_INPUT_SCROLL_DOWN, + NEWS_INPUT_NONE = 0xFF +}; + +bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata); +bool32 WonderNews_Init(const struct WonderNews * news); +s32 WonderCard_Enter(void); +s32 WonderNews_Enter(void); +s32 WonderCard_Exit(bool32 flag); +s32 WonderNews_Exit(bool32 flag); +void WonderCard_Destroy(void); +void WonderNews_Destroy(void); +u32 WonderNews_GetInput(u16 input); +void WonderNews_AddScrollIndicatorArrowPair(void); +void WonderNews_RemoveScrollIndicatorArrowPair(void); + +#endif //GUARD_MYSTERY_GIFT_VIEW_H diff --git a/include/overworld.h b/include/overworld.h index 16c75861cf..adaa6aad04 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -15,7 +15,7 @@ // These two are a hack to stop user input until link stuff can be // resolved. -#define LINK_KEY_CODE_HANDLE_RECV_QUEUE 0x1B +#define LINK_KEY_CODE_HANDLE_RECV_QUEUE 0x1B #define LINK_KEY_CODE_HANDLE_SEND_QUEUE 0x1C #define LINK_KEY_CODE_EXIT_SEAT 0x1D #define LINK_KEY_CODE_UNK_8 0x1E @@ -40,20 +40,18 @@ struct LinkPlayerObjectEvent u8 movementMode; }; -// Exported RAM declarations extern struct WarpData gLastUsedWarp; extern struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4]; -extern u16 *gBGTilemapBuffers1; -extern u16 *gBGTilemapBuffers2; -extern u16 *gBGTilemapBuffers3; +extern u16 *gOverworldTilemapBuffer_Bg2; +extern u16 *gOverworldTilemapBuffer_Bg1; +extern u16 *gOverworldTilemapBuffer_Bg3; extern u16 gHeldKeyCodeToSend; extern void (*gFieldCallback)(void); extern bool8 (*gFieldCallback2)(void); extern u8 gLocalLinkPlayerId; extern u8 gFieldLinkPlayerCount; -// Exported ROM declarations extern const struct UCoords32 gDirectionToVectors[]; void DoWhiteOut(void); @@ -67,8 +65,8 @@ void SetGameStat(u8 index, u32 value); void ApplyNewEncryptionKeyToGameStats(u32 newKey); void LoadObjEventTemplatesFromHeader(void); void LoadSaveblockObjEventScripts(void); -void Overworld_SetObjEventTemplateCoords(u8 localId, s16 x, s16 y); -void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType); +void SetObjEventTemplateCoords(u8 localId, s16 x, s16 y); +void SetObjEventTemplateMovementType(u8 localId, u8 movementType); const struct MapLayout *GetMapLayout(void); void ApplyCurrentWarp(void); struct MapHeader const *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum); @@ -79,7 +77,7 @@ void SetWarpDestinationToMapWarp(s8 mapGroup, s8 mapNum, s8 warpId); void SetDynamicWarp(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId); void SetDynamicWarpWithCoords(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void SetWarpDestinationToDynamicWarp(u8 unused); -void SetWarpDestinationToHealLocation(u8 a1); +void SetWarpDestinationToHealLocation(u8 healLocationId); void SetWarpDestinationToLastHealLocation(void); void SetLastHealLocationWarp(u8 healLocationId); void UpdateEscapeWarp(s16 x, s16 y); @@ -88,7 +86,7 @@ void SetWarpDestinationToEscapeWarp(void); void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y); -void SetContinueGameWarpToHealLocation(u8 a1); +void SetContinueGameWarpToHealLocation(u8 healLocationId); void SetContinueGameWarpToDynamicWarp(int unused); const struct MapConnection *GetMapConnection(u8 dir); bool8 SetDiveWarpEmerge(u16 x, u16 y); @@ -98,8 +96,8 @@ void ResetInitialPlayerAvatarState(void); void StoreInitialPlayerAvatarState(void); bool32 Overworld_IsBikingAllowed(void); void SetDefaultFlashLevel(void); -void Overworld_SetFlashLevel(s32 flashLevel); -u8 Overworld_GetFlashLevel(void); +void SetFlashLevel(s32 flashLevel); +u8 GetFlashLevel(void); void SetCurrentMapLayout(u16 mapLayoutId); void SetObjectEventLoadFlag(u8 var); u16 GetLocationMusic(struct WarpData *warp); @@ -127,12 +125,12 @@ u8 GetSavedWarpRegionMapSectionId(void); u8 GetCurrentRegionMapSectionId(void); u8 GetCurrentMapBattleScene(void); void CleanupOverworldWindowsAndTilemaps(void); -bool32 IsUpdateLinkStateCBActive(void); +bool32 IsOverworldLinkActive(void); void CB1_Overworld(void); void CB2_OverworldBasic(void); void CB2_Overworld(void); void SetMainCallback1(void (*cb)(void)); -void SetUnusedCallback(void *a0); +void SetUnusedCallback(void *func); void CB2_NewGame(void); void CB2_WhiteOut(void); void CB2_LoadMap(void); @@ -151,7 +149,7 @@ u16 SetInCableClubSeat(void); u16 SetLinkWaitingForScript(void); u16 QueueExitLinkRoomKey(void); u16 SetStartedCableClubActivity(void); -bool32 Overworld_LinkRecvQueueLengthMoreThan2(void); +bool32 Overworld_IsRecvQueueAtMax(void); bool32 Overworld_RecvKeysFromLinkIsRunning(void); bool32 Overworld_SendKeysToLinkIsRunning(void); bool32 IsSendingKeysOverCable(void); diff --git a/include/palette.h b/include/palette.h index 072edef563..81a1e1caec 100644 --- a/include/palette.h +++ b/include/palette.h @@ -49,8 +49,8 @@ struct PaletteFadeControl extern struct PaletteFadeControl gPaletteFade; extern u32 gPlttBufferTransferPending; extern u8 gPaletteDecompressionBuffer[]; -extern u16 gPlttBufferUnfaded[]; -extern u16 gPlttBufferFaded[]; +extern u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; +extern u16 gPlttBufferFaded[PLTT_BUFFER_SIZE]; void LoadCompressedPalette(const u32 *, u16, u16); void LoadPalette(const void *, u16, u16); @@ -58,15 +58,9 @@ void FillPalette(u16, u16, u16); void TransferPlttBuffer(void); u8 UpdatePaletteFade(void); void ResetPaletteFade(void); -void ReadPlttIntoBuffers(void); bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16); -bool8 unref_sub_8073D3C(u32, u8, u8, u8, u16); -void unref_sub_8073D84(u8, u32 *); -void ResetPaletteStructByUid(u16); -void ResetPaletteStruct(u8); +void PaletteStruct_ResetById(u16); void ResetPaletteFadeControl(void); -void unref_sub_8074168(u16); -void unref_sub_8074194(u16); void InvertPlttBuffer(u32); void TintPlttBuffer(u32, s8, s8, s8); void UnfadePlttBuffer(u32); diff --git a/include/palette_util.h b/include/palette_util.h index 46468c0a6a..12ffc145e4 100644 --- a/include/palette_util.h +++ b/include/palette_util.h @@ -72,7 +72,7 @@ void MarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); void UnloadUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); void UnmarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); void UpdatePulseBlend(struct PulseBlend *); -void ClearTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height); +void FillTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height); void SetTilemapRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height); void RouletteFlash_Run(struct RouletteFlashUtil *r0); void RouletteFlash_Reset(struct RouletteFlashUtil *r0); diff --git a/include/party_menu.h b/include/party_menu.h index 75fe7b9583..b00fd73240 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -29,15 +29,13 @@ extern u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2]; extern void (*gItemUseCB)(u8, TaskFunc); -extern const u16 gTutorMoves[]; - void AnimatePartySlot(u8 slot, u8 animNum); bool8 IsMultiBattle(void); u8 GetCursorSelectionMonId(void); u8 GetPartyMenuType(void); void Task_HandleChooseMonInput(u8 taskId); -u8* GetMonNickname(struct Pokemon *mon, u8 *dest); -u8 DisplayPartyMenuMessage(const u8* str, bool8 keepOpen); +u8 *GetMonNickname(struct Pokemon *mon, u8 *dest); +u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen); bool8 IsPartyMenuTextPrinterActive(void); void PartyMenuModifyHP(u8 taskId, u8 slot, s8 hpIncrement, s16 HPDifference, TaskFunc task); u8 GetAilmentFromStatus(u32 status); @@ -49,12 +47,15 @@ void LoadHeldItemIcons(void); void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty); void CB2_ShowPartyMenuForItemUse(void); void ItemUseCB_Medicine(u8 taskId, TaskFunc task); +void ItemUseCB_AbilityCapsule(u8 taskId, TaskFunc task); +void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task); void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task); void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task); void ItemUseCB_PPUp(u8 taskId, TaskFunc task); u16 ItemIdToBattleMoveId(u16 item); bool8 IsMoveHm(u16 move); bool8 MonKnowsMove(struct Pokemon *mon, u16 move); +bool8 BoxMonKnowsMove(struct BoxPokemon *mon, u16 move); void ItemUseCB_TMHM(u8 taskId, TaskFunc task); void ItemUseCB_RareCandy(u8 taskId, TaskFunc task); void ItemUseCB_SacredAsh(u8 taskId, TaskFunc task); diff --git a/include/pokeball.h b/include/pokeball.h index 8ea675ce4a..815221c89f 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -5,35 +5,52 @@ enum { BALL_POKE, BALL_GREAT, - BALL_SAFARI, BALL_ULTRA, BALL_MASTER, - BALL_NET, - BALL_DIVE, - BALL_NEST, - BALL_REPEAT, - BALL_TIMER, - BALL_LUXURY, BALL_PREMIER, + BALL_HEAL, + BALL_NET, + BALL_NEST, + BALL_DIVE, + BALL_DUSK, + BALL_TIMER, + BALL_QUICK, + BALL_REPEAT, + BALL_LUXURY, + BALL_LEVEL, + BALL_LURE, + BALL_MOON, + BALL_FRIEND, + BALL_LOVE, + BALL_FAST, + BALL_HEAVY, + BALL_DREAM, + BALL_SAFARI, + BALL_SPORT, + BALL_PARK, + BALL_BEAST, + BALL_CHERISH, POKEBALL_COUNT }; enum { BALL_AFFINE_ANIM_0, BALL_ROTATE_RIGHT, - BALL_ROTATE_LEFT, + BALL_ROTATE_LEFT, BALL_AFFINE_ANIM_3, BALL_AFFINE_ANIM_4 }; +extern const struct CompressedSpriteSheet gBallSpriteSheets[]; +extern const struct CompressedSpritePalette gBallSpritePalettes[]; extern const struct SpriteTemplate gBallSpriteTemplates[]; #define POKEBALL_PLAYER_SENDOUT 0xFF #define POKEBALL_OPPONENT_SENDOUT 0xFE u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow); -void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battler, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species); -u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h); +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes, u16 species); +u8 CreateTradePokeballSprite(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 delay, u32 fadePalettes); void StartHealthboxSlideIn(u8 battler); void DoHitAnimHealthboxEffect(u8 battler); void LoadBallGfx(u8 ballId); diff --git a/include/pokeblock.h b/include/pokeblock.h index 9e01614951..24e6ea8569 100644 --- a/include/pokeblock.h +++ b/include/pokeblock.h @@ -1,9 +1,6 @@ #ifndef GUARD_POKEBLOCK_H #define GUARD_POKEBLOCK_H -#include "constants/berry.h" -#include "constants/pokemon.h" - #define TAG_POKEBLOCK 14818 enum diff --git a/include/pokedex.h b/include/pokedex.h index 49063f6b13..703b9ab8df 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -4,6 +4,10 @@ extern u8 gUnusedPokedexU8; extern void (*gPokedexVBlankCB)(void); +#if P_ENABLE_DEBUG == TRUE +extern const u8 *const gMonFootprintTable[]; +#endif + enum { DEX_MODE_HOENN, diff --git a/include/pokedex_area_region_map.h b/include/pokedex_area_region_map.h index 175f60c743..6526d7b458 100755 --- a/include/pokedex_area_region_map.h +++ b/include/pokedex_area_region_map.h @@ -10,7 +10,7 @@ struct PokedexAreaMapTemplate }; void LoadPokedexAreaMapGfx(const struct PokedexAreaMapTemplate *); -bool32 sub_81C4E90(void); +bool32 TryShowPokedexAreaMap(void); void PokedexAreaMapChangeBgY(u32); void FreePokedexAreaMapBgNum(void); diff --git a/include/pokedex_area_screen.h b/include/pokedex_area_screen.h index 027d3e4a78..86dfaa6c5b 100755 --- a/include/pokedex_area_screen.h +++ b/include/pokedex_area_screen.h @@ -1,6 +1,6 @@ #ifndef GUARD_POKEDEX_AREA_SCREEN_H #define GUARD_POKEDEX_AREA_SCREEN_H -void ShowPokedexAreaScreen(u16, u8*); +void ShowPokedexAreaScreen(u16, u8 *); #endif // GUARD_POKEDEX_AREA_SCREEN_H diff --git a/include/pokedex_cry_screen.h b/include/pokedex_cry_screen.h index 4d2043292d..3401db22da 100755 --- a/include/pokedex_cry_screen.h +++ b/include/pokedex_cry_screen.h @@ -12,10 +12,10 @@ struct CryScreenWindow extern u8 gDexCryScreenState; -bool8 LoadCryWaveformWindow(struct CryScreenWindow*, u8); +bool8 LoadCryWaveformWindow(struct CryScreenWindow *, u8); void UpdateCryWaveformWindow(u8); void CryScreenPlayButton(u16); -bool8 LoadCryMeter(struct CryScreenWindow*, u8); +bool8 LoadCryMeter(struct CryScreenWindow *, u8); void FreeCryScreen(void); #endif diff --git a/include/pokemon.h b/include/pokemon.h index 6a13f7432d..94fdff91d2 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -1,45 +1,139 @@ #ifndef GUARD_POKEMON_H #define GUARD_POKEMON_H -#include "constants/pokemon.h" #include "sprite.h" #include "constants/region_map_sections.h" #include "constants/pokemon_config.h" #include "constants/map_groups.h" #define GET_BASE_SPECIES_ID(speciesId) (GetFormSpeciesId(speciesId, 0)) +#define FORM_SPECIES_END (0xffff) + +// Property labels for Get(Box)MonData / Set(Box)MonData +enum { + MON_DATA_PERSONALITY, + MON_DATA_OT_ID, + MON_DATA_NICKNAME, + MON_DATA_LANGUAGE, + MON_DATA_SANITY_IS_BAD_EGG, + MON_DATA_SANITY_HAS_SPECIES, + MON_DATA_SANITY_IS_EGG, + MON_DATA_OT_NAME, + MON_DATA_MARKINGS, + MON_DATA_CHECKSUM, + MON_DATA_ENCRYPT_SEPARATOR, + MON_DATA_SPECIES, + MON_DATA_HELD_ITEM, + MON_DATA_MOVE1, + MON_DATA_MOVE2, + MON_DATA_MOVE3, + MON_DATA_MOVE4, + MON_DATA_PP1, + MON_DATA_PP2, + MON_DATA_PP3, + MON_DATA_PP4, + MON_DATA_PP_BONUSES, + MON_DATA_COOL, + MON_DATA_BEAUTY, + MON_DATA_CUTE, + MON_DATA_EXP, + MON_DATA_HP_EV, + MON_DATA_ATK_EV, + MON_DATA_DEF_EV, + MON_DATA_SPEED_EV, + MON_DATA_SPATK_EV, + MON_DATA_SPDEF_EV, + MON_DATA_FRIENDSHIP, + MON_DATA_SMART, + MON_DATA_POKERUS, + MON_DATA_MET_LOCATION, + MON_DATA_MET_LEVEL, + MON_DATA_MET_GAME, + MON_DATA_POKEBALL, + MON_DATA_HP_IV, + MON_DATA_ATK_IV, + MON_DATA_DEF_IV, + MON_DATA_SPEED_IV, + MON_DATA_SPATK_IV, + MON_DATA_SPDEF_IV, + MON_DATA_IS_EGG, + MON_DATA_ABILITY_NUM, + MON_DATA_TOUGH, + MON_DATA_SHEEN, + MON_DATA_OT_GENDER, + MON_DATA_COOL_RIBBON, + MON_DATA_BEAUTY_RIBBON, + MON_DATA_CUTE_RIBBON, + MON_DATA_SMART_RIBBON, + MON_DATA_TOUGH_RIBBON, + MON_DATA_STATUS, + MON_DATA_LEVEL, + MON_DATA_HP, + MON_DATA_MAX_HP, + MON_DATA_ATK, + MON_DATA_DEF, + MON_DATA_SPEED, + MON_DATA_SPATK, + MON_DATA_SPDEF, + MON_DATA_MAIL, + MON_DATA_SPECIES2, + MON_DATA_IVS, + MON_DATA_CHAMPION_RIBBON, + MON_DATA_WINNING_RIBBON, + MON_DATA_VICTORY_RIBBON, + MON_DATA_ARTIST_RIBBON, + MON_DATA_EFFORT_RIBBON, + MON_DATA_MARINE_RIBBON, + MON_DATA_LAND_RIBBON, + MON_DATA_SKY_RIBBON, + MON_DATA_COUNTRY_RIBBON, + MON_DATA_NATIONAL_RIBBON, + MON_DATA_EARTH_RIBBON, + MON_DATA_WORLD_RIBBON, + MON_DATA_UNUSED_RIBBONS, + MON_DATA_EVENT_LEGAL, + MON_DATA_KNOWN_MOVES, + MON_DATA_RIBBON_COUNT, + MON_DATA_RIBBONS, + MON_DATA_ATK2, + MON_DATA_DEF2, + MON_DATA_SPEED2, + MON_DATA_SPATK2, + MON_DATA_SPDEF2, +}; struct PokemonSubstruct0 { - u16 species; - u16 heldItem; - u32 experience; - u8 ppBonuses; - u8 friendship; - u16 filler; -}; + /*0x00*/ u16 species; + /*0x02*/ u16 heldItem; + /*0x04*/ u32 experience; + /*0x08*/ u8 ppBonuses; + /*0x09*/ u8 friendship; + /*0x0A*/ u16 pokeball:5; //31 balls + u16 filler:11; +}; /* size = 12 */ struct PokemonSubstruct1 { - u16 moves[MAX_MON_MOVES]; - u8 pp[MAX_MON_MOVES]; -}; + /*0x00*/ u16 moves[MAX_MON_MOVES]; + /*0x08*/ u8 pp[MAX_MON_MOVES]; +}; /* size = 12 */ struct PokemonSubstruct2 { - u8 hpEV; - u8 attackEV; - u8 defenseEV; - u8 speedEV; - u8 spAttackEV; - u8 spDefenseEV; - u8 cool; - u8 beauty; - u8 cute; - u8 smart; - u8 tough; - u8 sheen; -}; + /*0x00*/ u8 hpEV; + /*0x01*/ u8 attackEV; + /*0x02*/ u8 defenseEV; + /*0x03*/ u8 speedEV; + /*0x04*/ u8 spAttackEV; + /*0x05*/ u8 spDefenseEV; + /*0x06*/ u8 cool; + /*0x07*/ u8 beauty; + /*0x08*/ u8 cute; + /*0x09*/ u8 smart; + /*0x0A*/ u8 tough; + /*0x0B*/ u8 sheen; +}; /* size = 12 */ struct PokemonSubstruct3 { @@ -48,7 +142,7 @@ struct PokemonSubstruct3 /* 0x02 */ u16 metLevel:7; /* 0x02 */ u16 metGame:4; - /* 0x03 */ u16 pokeball:4; + /* 0x03 */ u16 unused3_3:4; /* 0x03 */ u16 otGender:1; /* 0x04 */ u32 hpIV:5; @@ -79,7 +173,16 @@ struct PokemonSubstruct3 /* 0x0B */ u32 unusedRibbons:2; // discarded in Gen 4 /* 0x0B */ u32 abilityNum:2; /* 0x0B */ u32 eventLegal:1; // controls Mew & Deoxys obedience; if set, Pokémon is a fateful encounter in Gen 4+; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness. -}; +}; /* size = 12 */ + +// Number of bytes in the largest Pokémon substruct. +// They are assumed to be the same size, and will be padded to +// the largest size by the union. +// By default they are all 12 bytes. +#define NUM_SUBSTRUCT_BYTES (max(sizeof(struct PokemonSubstruct0), \ + max(sizeof(struct PokemonSubstruct1), \ + max(sizeof(struct PokemonSubstruct2), \ + sizeof(struct PokemonSubstruct3))))) union PokemonSubstruct { @@ -87,7 +190,7 @@ union PokemonSubstruct struct PokemonSubstruct1 type1; struct PokemonSubstruct2 type2; struct PokemonSubstruct3 type3; - u16 raw[6]; + u16 raw[NUM_SUBSTRUCT_BYTES / 2]; // /2 because it's u16, not u8 }; struct BoxPokemon @@ -107,7 +210,7 @@ struct BoxPokemon union { - u32 raw[12]; + u32 raw[(NUM_SUBSTRUCT_BYTES * 4) / 4]; // *4 because there are 4 substructs, /4 because it's u32, not u8 union PokemonSubstruct substructs[4]; } secure; }; @@ -127,20 +230,32 @@ struct Pokemon u16 spDefense; }; -struct Unknown_806F160_Struct +struct MonSpritesGfxManager { - u32 field_0_0:4; - u32 field_0_1:4; - u32 field_1:8; - u16 magic:8; - u32 field_3_0:4; - u32 field_3_1:4; - void *bytes; - u8 **byteArrays; + u32 numSprites:4; + u32 numSprites2:4; // Never read + u32 numFrames:8; + u32 active:8; + u32 dataSize:4; + u32 mode:4; // MON_SPR_GFX_MODE_* + void *spriteBuffer; + u8 **spritePointers; struct SpriteTemplate *templates; struct SpriteFrameImage *frameImages; }; +enum { + MON_SPR_GFX_MODE_NORMAL, + MON_SPR_GFX_MODE_BATTLE, + MON_SPR_GFX_MODE_FULL_PARTY, +}; + +enum { + MON_SPR_GFX_MANAGER_A, + MON_SPR_GFX_MANAGER_B, // Nothing ever sets up this manager. + MON_SPR_GFX_MANAGERS_COUNT +}; + struct BattlePokemon { /*0x00*/ u16 species; @@ -158,24 +273,24 @@ struct BattlePokemon /*0x17*/ u32 spDefenseIV:5; /*0x17*/ u32 abilityNum:2; /*0x18*/ s8 statStages[NUM_BATTLE_STATS]; - /*0x20*/ u8 ability; - /*0x21*/ u8 type1; - /*0x22*/ u8 type2; - /*0x23*/ u8 unknown; - /*0x24*/ u8 pp[MAX_MON_MOVES]; - /*0x28*/ u16 hp; - /*0x2A*/ u8 level; - /*0x2B*/ u8 friendship; - /*0x2C*/ u16 maxHP; - /*0x2E*/ u16 item; - /*0x30*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; - /*0x3B*/ u8 ppBonuses; - /*0x3C*/ u8 otName[PLAYER_NAME_LENGTH + 1]; - /*0x44*/ u32 experience; - /*0x48*/ u32 personality; - /*0x4C*/ u32 status1; - /*0x50*/ u32 status2; - /*0x54*/ u32 otId; + /*0x20*/ u16 ability; + /*0x22*/ u8 type1; + /*0x23*/ u8 type2; + /*0x24*/ u8 type3; + /*0x25*/ u8 pp[MAX_MON_MOVES]; + /*0x29*/ u16 hp; + /*0x2B*/ u8 level; + /*0x2C*/ u8 friendship; + /*0x2D*/ u16 maxHP; + /*0x2F*/ u16 item; + /*0x31*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x3C*/ u8 ppBonuses; + /*0x3D*/ u8 otName[PLAYER_NAME_LENGTH + 1]; + /*0x45*/ u32 experience; + /*0x49*/ u32 personality; + /*0x4D*/ u32 status1; + /*0x51*/ u32 status2; + /*0x55*/ u32 otId; }; struct BaseStats @@ -196,38 +311,46 @@ struct BaseStats /* 0x0A */ u16 evYield_Speed:2; /* 0x0B */ u16 evYield_SpAttack:2; /* 0x0B */ u16 evYield_SpDefense:2; - /* 0x0C */ u16 item1; - /* 0x0E */ u16 item2; + /* 0x0C */ u16 itemCommon; + /* 0x0E */ u16 itemRare; /* 0x10 */ u8 genderRatio; /* 0x11 */ u8 eggCycles; /* 0x12 */ u8 friendship; /* 0x13 */ u8 growthRate; /* 0x14 */ u8 eggGroup1; /* 0x15 */ u8 eggGroup2; - /* 0x16 */ u8 abilities[NUM_ABILITY_SLOTS]; + /* 0x16 */ u16 abilities[NUM_ABILITY_SLOTS]; u8 safariZoneFleeRate; u8 bodyColor : 7; u8 noFlip : 1; u8 flags; }; +#include "constants/battle_config.h" struct BattleMove { - u8 effect; - u8 power; + u16 effect; + u16 power; //higher than 255 for z moves u8 type; u8 accuracy; u8 pp; u8 secondaryEffectChance; - u8 target; + u16 target; s8 priority; - u8 flags; + u32 flags; + u8 split; + u8 argument; + u8 zMovePower; + u8 zMoveEffect; }; +#define SPINDA_SPOT_WIDTH 16 +#define SPINDA_SPOT_HEIGHT 16 + struct SpindaSpot { u8 x, y; - u16 image[16]; + u16 image[SPINDA_SPOT_HEIGHT]; }; struct LevelUpMove @@ -259,6 +382,8 @@ struct FormChange { | (((personality) & 0x00000003) >> 0) \ ) % NUM_UNOWN_FORMS) +#define GET_SHINY_VALUE(otId, personality)HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality) + extern u8 gPlayerPartyCount; extern struct Pokemon gPlayerParty[PARTY_SIZE]; extern u8 gEnemyPartyCount; @@ -272,13 +397,15 @@ extern const struct BaseStats gBaseStats[]; extern const u8 *const gItemEffectTable[]; extern const u32 gExperienceTables[][MAX_LEVEL + 1]; extern const struct LevelUpMove *const gLevelUpLearnsets[]; +extern const u16 *const gTeachableLearnsets[]; extern const u8 gPPUpGetMask[]; -extern const u8 gPPUpSetMask[]; -extern const u8 gPPUpAddMask[]; +extern const u8 gPPUpClearMask[]; +extern const u8 gPPUpAddValues[]; extern const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2]; extern const u16 gLinkPlayerFacilityClasses[]; extern const struct SpriteTemplate gBattlerSpriteTemplates[]; extern const s8 gNatureStatTable[][5]; +extern const u16 *const gFormSpeciesIdTables[NUM_SPECIES]; void ZeroBoxMonData(struct BoxPokemon *boxMon); void ZeroMonData(struct Pokemon *mon); @@ -293,7 +420,7 @@ void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId); void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread); void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src); -void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50); +void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50); void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); @@ -315,13 +442,7 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon); u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove); void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move); void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); -s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef); - u8 CountAliveMonsInBattle(u8 caseId); -#define BATTLE_ALIVE_EXCEPT_ACTIVE 0 -#define BATTLE_ALIVE_ATK_SIDE 1 -#define BATTLE_ALIVE_DEF_SIDE 2 - u8 GetDefaultMoveTarget(u8 battlerId); u8 GetMonGender(struct Pokemon *mon); u8 GetBoxMonGender(struct BoxPokemon *boxMon); @@ -329,7 +450,7 @@ u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality); u32 GetUnownSpeciesId(u32 personality); void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition); void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosition); -void SetMultiuseSpriteTemplateToTrainerFront(u16 arg0, u8 battlerPosition); +void SetMultiuseSpriteTemplateToTrainerFront(u16 trainerPicId, u8 battlerPosition); // These are full type signatures for GetMonData() and GetBoxMonData(), // but they are not used since some code erroneously omits the third arg. @@ -342,13 +463,12 @@ void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg); void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg); void CopyMon(void *dest, void *src, size_t size); u8 GiveMonToPlayer(struct Pokemon *mon); -u8 SendMonToPC(struct Pokemon* mon); u8 CalculatePlayerPartyCount(void); u8 CalculateEnemyPartyCount(void); u8 GetMonsStateToDoubles(void); u8 GetMonsStateToDoubles_2(void); -u8 GetAbilityBySpecies(u16 species, u8 abilityNum); -u8 GetMonAbility(struct Pokemon *mon); +u16 GetAbilityBySpecies(u16 species, u8 abilityNum); +u16 GetMonAbility(struct Pokemon *mon); void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord); u8 GetSecretBaseTrainerPicIndex(void); u8 GetSecretBaseTrainerClass(void); @@ -358,6 +478,7 @@ void GetSpeciesName(u8 *name, u16 species); u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex); void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex); void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex); +void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst); void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex); bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex); bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e); @@ -366,19 +487,18 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit); u8 *UseStatIncreaseItem(u16 itemId); u8 GetNature(struct Pokemon *mon); u8 GetNatureFromPersonality(u32 personality); -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem, u16 tradePartnerSpecies); +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem, struct Pokemon *tradePartner); u16 HoennPokedexNumToSpecies(u16 hoennNum); u16 NationalPokedexNumToSpecies(u16 nationalNum); u16 NationalToHoennOrder(u16 nationalNum); u16 SpeciesToNationalPokedexNum(u16 species); u16 SpeciesToHoennPokedexNum(u16 species); u16 HoennToNationalOrder(u16 hoennNum); -void sub_806D544(u16 species, u32 personality, u8 *dest); -void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4); +void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, bool8 isFrontPic); void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); u8 GetPlayerFlankId(void); u16 GetLinkTrainerFlankId(u8 id); -s32 GetBattlerMultiplayerId(u16 a1); +s32 GetBattlerMultiplayerId(u16 id); u8 GetTrainerEncounterMusicId(u16 trainerOpponentId); u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex); void AdjustFriendship(struct Pokemon *mon, u8 event); @@ -390,8 +510,7 @@ u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection); void UpdatePartyPokerusTime(u16 days); void PartySpreadPokerus(struct Pokemon *party); bool8 TryIncrementMonLevel(struct Pokemon *mon); -u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm); -u32 CanSpeciesLearnTMHM(u16 species, u8 tm); +u8 CanLearnTeachableMove(u16 species, u16 move); u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves); u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves); u8 GetNumberOfRelearnableMoves(struct Pokemon *mon); @@ -419,24 +538,26 @@ void SetWildMonHeldItem(void); bool8 IsMonShiny(struct Pokemon *mon); bool8 IsShinyOtIdPersonality(u32 otId, u32 personality); const u8 *GetTrainerPartnerName(void); -void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3); -void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3); -void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneFrame); +void BattleAnimateFrontSprite(struct Sprite *sprite, u16 species, bool8 noCry, u8 panMode); +void DoMonFrontSpriteAnimation(struct Sprite *sprite, u16 species, bool8 noCry, u8 panModeAnimFlag); +void PokemonSummaryDoMonAnimation(struct Sprite *sprite, u16 species, bool8 oneFrame); void StopPokemonAnimationDelayTask(void); -void BattleAnimateBackSprite(struct Sprite* sprite, u16 species); -u8 sub_806EF08(u8 arg0); -u8 sub_806EF84(u8 arg0, u8 arg1); -u16 sub_806EFF0(u16 arg0); +void BattleAnimateBackSprite(struct Sprite *sprite, u16 species); +u8 GetOpposingLinkMultiBattlerId(bool8 rightSide, u8 multiplayerId); u16 FacilityClassToPicIndex(u16 facilityClass); u16 PlayerGenderToFrontTrainerPicId(u8 playerGender); void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality); const u8 *GetTrainerClassNameFromId(u16 trainerId); const u8 *GetTrainerNameFromId(u16 trainerId); bool8 HasTwoFramesAnimation(u16 species); -struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1); -void sub_806F47C(u8 id); -u8 *sub_806F4F8(u8 id, u8 arg1); +struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode); +void DestroyMonSpritesGfxManager(u8 managerId); +u8 *MonSpritesGfxManager_GetSpritePtr(u8 managerId, u8 spriteNum); u16 GetFormSpeciesId(u16 speciesId, u8 formId); u8 GetFormIdFromFormSpeciesId(u16 formSpeciesId); u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg); +u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg); +u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove); +bool32 ShouldShowFemaleDifferences(u16 species, u32 personality); + #endif // GUARD_POKEMON_H diff --git a/include/pokemon_debug.h b/include/pokemon_debug.h new file mode 100644 index 0000000000..e69b4a7c6b --- /dev/null +++ b/include/pokemon_debug.h @@ -0,0 +1,73 @@ +#ifndef GUARD_POKEMON_DEBUG_H +#define GUARD_POKEMON_DEBUG_H + +#include "constants/pokemon_debug.h" + +//Structs +struct PokemonDebugModifyArrows +{ + u8 arrowSpriteId[2]; + u16 minValue; + u16 maxValue; + int currValue; + u8 currentDigit; + u8 maxDigits; + u8 charDigits[MODIFY_DIGITS_MAX]; + void *modifiedValPtr; + u8 typeOfVal; +}; + +struct PokemonDebugOptionArrows +{ + u8 arrowSpriteId[1]; + u8 currentDigit; +}; + +struct PokemonDebugYPosModifiyArrows +{ + u8 arrowSpriteId[1]; + u8 currentDigit; +}; + +struct PokemonSpriteConstValues +{ + u8 backPicCoords; + u8 frontPicCoords; + u8 frontElevation; +}; + +struct PokemonSpriteOffsets +{ + s8 offset_back_picCoords; + s8 offset_front_picCoords; + s8 offset_front_elevation; +}; + +struct PokemonDebugMenu +{ + u16 currentmonId; + u8 currentmonWindowId; + u8 InstructionsWindowId; + u8 frontspriteId; + u8 backspriteId; + u8 iconspriteId; + u8 frontShadowSpriteId; + bool8 isShiny; + bool8 isFemale; + struct PokemonDebugModifyArrows modifyArrows; + struct PokemonDebugOptionArrows optionArrows; + struct PokemonDebugYPosModifiyArrows yPosModifyArrows; + struct PokemonSpriteConstValues constSpriteValues; + struct PokemonSpriteOffsets offsetsSpriteValues; + u8 animIdBack; + u8 animIdFront; + u8 battleBgType; + u8 battleTerrain; + u8 currentSubmenu; + u8 submenuYpos[3]; +}; + +void CB2_Debug_Pokemon(void); + + +#endif // GUARD_POKEMON_DEBUG_H \ No newline at end of file diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index 3ca9b741f0..fba6a6740a 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -3,9 +3,11 @@ extern const u8 gMonIconPaletteIndices[]; extern const u8 gMonIconPaletteIndicesFemale[]; +extern const u8 *const gMonIconTable[]; +extern const struct SpritePalette gMonIconPaletteTable[]; const u8 *GetMonIconTiles(u16 species, u32 personality); -void sub_80D304C(u16 offset); +void TryLoadAllMonIconPalettesAtOffset(u16 offset); u8 GetValidMonIconPalIndex(u16 species); const u8 *GetMonIconPtr(u16 speciesId, u32 personality); const u16 *GetValidMonIconPalettePtr(u16 speciesId); @@ -21,7 +23,6 @@ void FreeAndDestroyMonIconSprite(struct Sprite *sprite); u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality); u8 UpdateMonIconFrame(struct Sprite *sprite); void LoadMonIconPalette(u16 species); -void sub_80D328C(struct Sprite *sprite); void SpriteCB_MonIcon(struct Sprite *sprite); void SetPartyHPBarSprite(struct Sprite *sprite, u8 animNum); u8 GetMonIconPaletteIndexFromSpecies(u16 species); diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 73a7833ee4..eb25c0ff27 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -5,9 +5,10 @@ #define IN_BOX_ROWS 5 // Number of rows, 6 Pokémon per row #define IN_BOX_COLUMNS 6 // Number of columns, 5 Pokémon per column #define IN_BOX_COUNT (IN_BOX_ROWS * IN_BOX_COLUMNS) +#define BOX_NAME_LENGTH 8 -/* - COLUMNS +/* + COLUMNS ROWS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @@ -19,13 +20,13 @@ struct PokemonStorage { /*0x0000*/ u8 currentBox; /*0x0001*/ struct BoxPokemon boxes[TOTAL_BOXES_COUNT][IN_BOX_COUNT]; - /*0x8344*/ u8 boxNames[TOTAL_BOXES_COUNT][9]; + /*0x8344*/ u8 boxNames[TOTAL_BOXES_COUNT][BOX_NAME_LENGTH + 1]; /*0x83C2*/ u8 boxWallpapers[TOTAL_BOXES_COUNT]; }; extern struct PokemonStorage *gPokemonStoragePtr; -void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 arg2, u8 arg3, s32 bytesToBuffer); +void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, s32 bytesToBuffer); u8 CountMonsInBox(u8 boxId); s16 GetFirstFreeBoxSpot(u8 boxId); u8 CountPartyAliveNonEggMonsExcept(u8 slotToIgnore); @@ -51,7 +52,7 @@ void ZeroBoxMonAt(u8 boxId, u8 boxPosition); void BoxMonAtToMon(u8 boxId, u8 boxPosition, struct Pokemon *dst); struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 boxPosition); u8 *GetBoxNamePtr(u8 boxId); -s16 AdvanceStorageMonIndex(struct BoxPokemon *boxMons, u8 currIndex, u8 maxIndex, u8 arg3); +s16 AdvanceStorageMonIndex(struct BoxPokemon *boxMons, u8 currIndex, u8 maxIndex, u8 mode); bool8 CheckFreePokemonStorageSpace(void); bool32 CheckBoxMonSanityAt(u32 boxId, u32 boxPosition); u32 CountStorageNonEggMons(void); diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 3996c8e15f..4e9e62284d 100755 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -6,6 +6,7 @@ extern u8 gLastViewedMonIndex; extern const u8 *const gMoveDescriptionPointers[]; +extern const u8 gNotDoneYetDescription[]; extern const u8 *const gNatureNamePointers[]; void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); diff --git a/include/pokenav.h b/include/pokenav.h index 3fc01ede3d..959998383f 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -7,47 +7,51 @@ typedef u32 (*LoopedTask)(s32 state); -struct PokenavMonList +struct PokenavMonListItem { u8 boxId; u8 monId; u16 data; }; -struct PokenavMatchCallEntries +struct PokenavMatchCallEntry { bool8 isSpecialTrainer; u8 mapSec; u16 headerId; }; -struct PokenavListTemplate +struct PokenavListItem { union { - struct PokenavMonList *monList; - struct PokenavMatchCallEntries *matchCallEntries; - } list; + struct PokenavMonListItem mon; + struct PokenavMatchCallEntry call; + } item; +}; + +typedef void (*PokenavListBufferItemFunc)(struct PokenavListItem *, u8 *); + +struct PokenavListTemplate +{ + struct PokenavListItem * list; u16 count; - u16 unk6; - u8 unk8; + u16 startIndex; + u8 itemSize; u8 item_X; u8 windowWidth; u8 listTop; u8 maxShowed; u8 fillValue; u8 fontId; - union { - void (*printMonFunc)(struct PokenavMonList *item, u8 *dest); - void (*unk10_2)(struct PokenavMatchCallEntries *, u8 *a1); - } listFunc; - void (*unk14)(u16 a0, u32 a1, u32 a2); + PokenavListBufferItemFunc bufferItemFunc; + void (*iconDrawFunc)(u16 windowId, u32 listItemId, u32 baseTile); }; -struct PokenavSub18 +struct PokenavMonList { u16 listCount; u16 currIndex; - struct PokenavMonList monData[TOTAL_BOXES_COUNT * IN_BOX_COUNT + PARTY_SIZE]; + struct PokenavMonListItem monData[TOTAL_BOXES_COUNT * IN_BOX_COUNT + PARTY_SIZE]; }; // Return values of LoopedTask functions. @@ -65,27 +69,26 @@ enum POKENAV_MODE_FORCE_CALL_EXIT, // Pokenav tutorial after calling Mr. Stone }; -// TODO - refine these names -enum Substructures +enum { POKENAV_SUBSTRUCT_MAIN_MENU, POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, - POKENAV_SUBSTRUCT_MENU_ICONS, + POKENAV_SUBSTRUCT_MENU_GFX, POKENAV_SUBSTRUCT_REGION_MAP_STATE, POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, POKENAV_SUBSTRUCT_MATCH_CALL_OPEN, POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, - POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, + POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX, POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, - POKENAV_SUBSTRUCT_CONDITION_GRAPH, - POKENAV_SUBSTRUCT_MON_MARK_MENU, + POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU, + POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX, POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, - POKENAV_SUBSTRUCT_15, //unused + POKENAV_SUBSTRUCT_UNUSED, POKENAV_SUBSTRUCT_REGION_MAP, - POKENAV_SUBSTRUCT_MATCH_CALL_LIST, + POKENAV_SUBSTRUCT_LIST, POKENAV_SUBSTRUCT_MON_LIST, POKENAV_SUBSTRUCT_COUNT, }; @@ -113,21 +116,21 @@ enum #define POKENAV_MENU_IDS_START 100000 enum { - POKENAV_MAIN_MENU = POKENAV_MENU_IDS_START, - POKENAV_MAIN_MENU_CURSOR_ON_MAP, - POKENAV_CONDITION_MENU, - POKENAV_CONDITION_SEARCH_MENU, - POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL, - POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS, - POKENAV_REGION_MAP, - POKENAV_CONDITION_PARTY, - POKENAV_CONDITION_SEARCH_RESULTS, - POKENAV_CONDITION_GRAPH_FROM_SEARCH, // opening condition graph from search list - POKENAV_RETURN_CONDITION_SEARCH, //return to search list from condition graph - POKENAV_MATCH_CALL, - POKENAV_RIBBONS_MON_LIST, - POKENAV_RIBBONS_SUMMARY_SCREEN, - POKENAV_RIBBONS_RETURN_TO_MON_LIST, + POKENAV_MAIN_MENU = POKENAV_MENU_IDS_START, // The main menu where the player selects Hoenn Map/Condition/Match Call/Ribbons + POKENAV_MAIN_MENU_CURSOR_ON_MAP, + POKENAV_CONDITION_MENU, // The first Condition screen where the player selects Party or Search + POKENAV_CONDITION_SEARCH_MENU, // The Condition search menu where the player selects a search parameter + POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL, + POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS, + POKENAV_REGION_MAP, + POKENAV_CONDITION_GRAPH_PARTY, // The Condition graph screen when Party has been selected + POKENAV_CONDITION_SEARCH_RESULTS, // The list of results from a Condition search + POKENAV_CONDITION_GRAPH_SEARCH, // The Condition graph screen when a search result has been selected + POKENAV_RETURN_CONDITION_SEARCH, // Exited the graph screen back to the list of Condition search results + POKENAV_MATCH_CALL, + POKENAV_RIBBONS_MON_LIST, // The list of Pokémon with ribbons + POKENAV_RIBBONS_SUMMARY_SCREEN, // The ribbon summary screen shown when a Pokémon has been selected + POKENAV_RIBBONS_RETURN_TO_MON_LIST, // Exited the summary screen back to the ribbon list }; enum @@ -182,28 +185,28 @@ enum enum { - MC_HEADER_MR_STONE, - MC_HEADER_PROF_BIRCH, - MC_HEADER_BRENDAN, - MC_HEADER_MAY, - MC_HEADER_WALLY, - MC_HEADER_NORMAN, - MC_HEADER_MOM, - MC_HEADER_STEVEN, - MC_HEADER_SCOTT, - MC_HEADER_ROXANNE, - MC_HEADER_BRAWLY, - MC_HEADER_WATTSON, - MC_HEADER_FLANNERY, - MC_HEADER_WINONA, - MC_HEADER_TATE_LIZA, - MC_HEADER_JUAN, - MC_HEADER_SIDNEY, - MC_HEADER_PHOEBE, - MC_HEADER_GLACIA, - MC_HEADER_DRAKE, - MC_HEADER_WALLACE, - MC_HEADER_COUNT + MC_HEADER_MR_STONE, + MC_HEADER_PROF_BIRCH, + MC_HEADER_BRENDAN, + MC_HEADER_MAY, + MC_HEADER_WALLY, + MC_HEADER_NORMAN, + MC_HEADER_MOM, + MC_HEADER_STEVEN, + MC_HEADER_SCOTT, + MC_HEADER_ROXANNE, + MC_HEADER_BRAWLY, + MC_HEADER_WATTSON, + MC_HEADER_FLANNERY, + MC_HEADER_WINONA, + MC_HEADER_TATE_LIZA, + MC_HEADER_JUAN, + MC_HEADER_SIDNEY, + MC_HEADER_PHOEBE, + MC_HEADER_GLACIA, + MC_HEADER_DRAKE, + MC_HEADER_WALLACE, + MC_HEADER_COUNT }; enum @@ -245,15 +248,22 @@ enum RegionMapFuncIds POKENAV_MENU_FUNC_OPEN_FEATURE, }; -enum PartyConditionFuncIds +enum { - PARTY_CONDITION_FUNC_NONE, - PARTY_CONDITION_FUNC_SLIDE_MON_IN, - PARTY_CONDITION_FUNC_RETURN, - PARTY_CONDITION_FUNC_NO_TRANSITION, - PARTY_CONDITION_FUNC_SLIDE_MON_OUT, - PARTY_CONDITION_FUNC_ADD_MARKINGS, - PARTY_CONDITION_FUNC_CLOSE_MARKINGS, + CONDITION_FUNC_NONE, + CONDITION_FUNC_SLIDE_MON_IN, + CONDITION_FUNC_RETURN, + CONDITION_FUNC_NO_TRANSITION, + CONDITION_FUNC_SLIDE_MON_OUT, + CONDITION_FUNC_ADD_MARKINGS, + CONDITION_FUNC_CLOSE_MARKINGS, +}; + +enum +{ + CONDITION_LOAD_MON_INFO, + CONDITION_LOAD_GRAPH, + CONDITION_LOAD_MON_PIC, }; #define POKENAV_MENU_FUNC_EXIT -1 @@ -270,7 +280,7 @@ enum POKENAV_MC_FUNC_CANCEL, POKENAV_MC_FUNC_CALL_MSG, POKENAV_MC_FUNC_NEARBY_MSG, - POKENAV_MC_FUNC_10, + POKENAV_MC_FUNC_EXIT_CALL, POKENAV_MC_FUNC_SHOW_CHECK_PAGE, POKENAV_MC_FUNC_CHECK_PAGE_UP, POKENAV_MC_FUNC_CHECK_PAGE_DOWN, @@ -287,6 +297,14 @@ enum POKENAV_MAP_FUNC_EXIT, }; +// Modes for PokenavFadeScreen +enum { + POKENAV_FADE_TO_BLACK, + POKENAV_FADE_FROM_BLACK, + POKENAV_FADE_TO_BLACK_ALL, + POKENAV_FADE_FROM_BLACK_ALL, +}; + // pokenav.c void SetSelectedConditionSearch(u32); u32 GetSelectedConditionSearch(void); @@ -305,23 +323,23 @@ bool32 CanViewRibbonsMenu(void); void SetPokenavVBlankCallback(void); void SetVBlankCallback_(IntrCallback callback); -// pokenav_match_call_ui.c -u32 GetSelectedPokenavListIndex(void); -bool32 sub_81C8224(void); -int MatchCall_MoveCursorUp(void); -int MatchCall_MoveCursorDown(void); -int MatchCall_PageDown(void); -int MatchCall_PageUp(void); -bool32 IsMonListLoopedTaskActive(void); -void ToggleMatchCallVerticalArrows(bool32 shouldHide); -void sub_81C8838(void); -void sub_81C877C(void); -bool32 IsMatchCallListTaskActive(void); -void PrintCheckPageInfo(s16 a0); -u32 GetMatchCallListTopIndex(void); -void sub_81C87F0(void); -bool32 sub_81C81D4(const struct BgTemplate *arg0, struct PokenavListTemplate *arg1, s32 arg2); -void sub_81C8234(void); +// pokenav_list.c +bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset); +bool32 IsCreatePokenavListTaskActive(void); +void DestroyPokenavList(void); +u32 PokenavList_GetSelectedIndex(void); +int PokenavList_MoveCursorUp(void); +int PokenavList_MoveCursorDown(void); +int PokenavList_PageDown(void); +int PokenavList_PageUp(void); +bool32 PokenavList_IsMoveWindowTaskActive(void); +void PokenavList_ToggleVerticalArrows(bool32 shouldHide); +void PokenavList_DrawCurrentItemIcon(void); +void PokenavList_EraseListForCheckPage(void); +bool32 PokenavList_IsTaskActive(void); +void PrintCheckPageInfo(s16 delta); +u32 PokenavList_GetTopIndex(void); +void PokenavList_ReshowListFromCheckPage(void); // pokenav_match_call_data.c bool32 MatchCall_HasCheckPage(u32 idx); @@ -338,10 +356,10 @@ void MatchCall_GetNameAndDesc(u32 idx, const u8 **desc, const u8 **name); // pokenav_main_menu.c bool32 InitPokenavMainMenu(void); void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size); -void RunMainMenuLoopedTask(u32 a0); +void RunMainMenuLoopedTask(u32 state); u32 IsActiveMenuLoopTaskActive(void); -void LoadLeftHeaderGfxForIndex(u32 arg0); -void ShowLeftHeaderGfx(u32 menugfxId, bool32 arg1, bool32 isOnRightSide); +void LoadLeftHeaderGfxForIndex(u32 menuGfxId); +void ShowLeftHeaderGfx(u32 menugfxId, bool32 isMain, bool32 isOnRightSide); void PokenavFadeScreen(s32 fadeType); bool32 AreLeftHeaderSpritesMoving(void); void InitBgTemplates(const struct BgTemplate *templates, int count); @@ -352,10 +370,10 @@ void SlideMenuHeaderDown(void); bool32 MainMenuLoopedTaskIsBusy(void); void SetLeftHeaderSpritesInvisibility(void); void PokenavCopyPalette(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette); -void sub_81C7B40(void); -struct Sprite *PauseSpinningPokenavSprite(void); -void ResumeSpinningPokenavSprite(void); -void UpdateRegionMapRightHeaderTiles(u32 arg0); +void FadeToBlackExceptPrimary(void); +struct Sprite *GetSpinningPokenavSprite(void); +void HideSpinningPokenavSprite(void); +void UpdateRegionMapRightHeaderTiles(u32 menuGfxId); void HideMainOrSubMenuLeftHeader(u32 id, bool32 onRightSide); void SlideMenuHeaderUp(void); void PokenavFillPalette(u32 palIndex, u16 fillValue); @@ -364,7 +382,7 @@ bool32 WaitForPokenavShutdownFade(void); void SetActiveMenuLoopTasks(void *func1, void *func2); void ShutdownPokenav(void); -// pokenav_menu_handler_1.c +// pokenav_menu_handler.c bool32 PokenavCallback_Init_MainMenuCursorOnMap(void); bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void); bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void); @@ -377,7 +395,7 @@ int GetPokenavCursorPos(void); int GetCurrentMenuItemId(void); u16 GetHelpBarTextId(void); -// pokenav_menu_handler_2.c +// pokenav_menu_handler_gfx.c bool32 OpenPokenavMenuInitial(void); bool32 OpenPokenavMenuNotInitial(void); void CreateMenuHandlerLoopedTask(s32 ltIdx); @@ -385,29 +403,28 @@ bool32 IsMenuHandlerLoopedTaskActive(void); void FreeMenuHandlerSubstruct2(void); void ResetBldCnt_(void); -// pokenav_match_call_1.c +// pokenav_match_call_list.c bool32 PokenavCallback_Init_MatchCall(void); u32 GetMatchCallCallback(void); void FreeMatchCallSubstruct1(void); -int sub_81CAE28(void); +int IsMatchCallListInitFinished(void); int GetNumberRegistered(void); -int sub_81CAE48(void); -struct PokenavMatchCallEntries *sub_81CAE94(void); +struct PokenavMatchCallEntry *GetMatchCallList(void); u16 GetMatchCallMapSec(int); bool32 ShouldDrawRematchPokeballIcon(int index); -void ClearRematchPokeballIcon(u16 windowId, u32 a1); +void ClearRematchPokeballIcon(u16 windowId, u32 tileOffset); int GetMatchCallTrainerPic(int index); const u8 *GetMatchCallFlavorText(int index, int textType); -const u8 *GetMatchCallMessageText(int index, u8 *arg1); +const u8 *GetMatchCallMessageText(int index, bool8 *newRematchRequest); u16 GetMatchCallOptionCursorPos(void); -u16 GetMatchCallOptionId(int arg0); -void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntries * arg0, u8 *str); +u16 GetMatchCallOptionId(int optionId); +void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntry *matchCallEntry, u8 *str); u8 GetMatchTableMapSectionId(int rematchIndex); int GetIndexDeltaOfNextCheckPageDown(int index); int GetIndexDeltaOfNextCheckPageUp(int index); bool32 IsRematchEntryRegistered(int index); -// pokenav_match_call_2.c +// pokenav_match_call_gfx.c bool32 OpenMatchCall(void); void CreateMatchCallLoopedTask(s32 index); bool32 IsMatchCallLoopedTaskActive(void); @@ -422,33 +439,33 @@ bool32 IsRegionMapLoopedTaskActive(void); void FreeRegionMapSubstruct1(void); void FreeRegionMapSubstruct2(void); -// pokenav_conditions_1.c -u32 PokenavCallback_Init_PartyCondition(void); -u32 PokenavCallback_Init_ConditionGraphFromSearch(void); -u32 GetPartyConditionCallback(void); -void FreePartyConditionSubstruct1(void); -bool32 LoadPartyConditionMenuGfx(void); +// pokenav_conditions.c +u32 PokenavCallback_Init_ConditionGraph_Party(void); +u32 PokenavCallback_Init_ConditionGraph_Search(void); +u32 GetConditionGraphMenuCallback(void); +void FreeConditionGraphMenuSubstruct1(void); +bool32 LoadConditionGraphMenuGfx(void); bool32 IsConditionMenuSearchMode(void); -struct ConditionGraph *GetConditionGraphDataPtr(void); -u16 GetConditionGraphCurrentMonIndex(void); +struct ConditionGraph *GetConditionGraphPtr(void); +u16 GetConditionGraphCurrentListIndex(void); u16 GetMonListCount(void); -u8 GetMonSheen(void); -bool32 SetConditionGraphData(u8 arg0); +u8 GetNumConditionMonSparkles(void); +bool32 LoadNextConditionMenuMonData(u8 mode); u8 TryGetMonMarkId(void); -u8 *GetConditionMonNameBuffer(u8 id); -u8 *GetConditionMonLocationBuffer(u8 id); +u8 *GetConditionMonNameText(u8 id); +u8 *GetConditionMonLocationText(u8 id); u16 GetConditionMonDataBuffer(void); void *GetConditionMonPicGfx(u8 id); void *GetConditionMonPal(u8 id); -// pokenav_conditions_2.c -bool32 OpenPartyConditionMenu(void); -void CreatePartyConditionLoopedTask(s32); -u32 IsPartyConditionLoopedTaskActive(void); -void FreePartyConditionSubstruct2(void); +// pokenav_conditions_gfx.c +bool32 OpenConditionGraphMenu(void); +void CreateConditionGraphMenuLoopedTask(s32); +u32 IsConditionGraphMenuLoopedTaskActive(void); +void FreeConditionGraphMenuSubstruct2(void); u8 GetMonMarkingsData(void); -// pokenav_conditions_3.c +// pokenav_conditions_search_results.c u32 PokenavCallback_Init_ConditionSearch(void); u32 PokenavCallback_Init_ReturnToMonSearchList(void); u32 GetConditionSearchResultsCallback(void); @@ -459,18 +476,18 @@ void CreateSearchResultsLoopedTask(s32); u32 IsSearchResultLoopedTaskActive(void); void FreeSearchResultSubstruct2(void); -// pokenav_ribbons_1.c +// pokenav_ribbons_list.c u32 PokenavCallback_Init_MonRibbonList(void); u32 PokenavCallback_Init_RibbonsMonListFromSummary(void); u32 GetRibbonsMonListCallback(void); -void FreeRibbonsMonList1(void); +void FreeRibbonsMonList(void); bool32 OpenRibbonsMonList(void); bool32 OpenRibbonsMonListFromRibbonsSummary(void); void CreateRibbonsMonListLoopedTask(s32); u32 IsRibbonsMonListLoopedTaskActive(void); -void FreeRibbonsMonList2(void); +void FreeRibbonsMonMenu(void); -// pokenav_ribbons_2.c +// pokenav_ribbons_summary.c u32 PokenavCallback_Init_RibbonsSummaryMenu(void); u32 GetRibbonsSummaryMenuCallback(void); void FreeRibbonsSummaryScreen1(void); diff --git a/include/record_mixing.h b/include/record_mixing.h index 4cd231e8a5..fec4952b8e 100644 --- a/include/record_mixing.h +++ b/include/record_mixing.h @@ -3,8 +3,8 @@ struct PlayerHallRecords { - struct RankingHall1P onePlayer[9][2]; - struct RankingHall2P twoPlayers[2]; + struct RankingHall1P onePlayer[HALL_FACILITIES_COUNT][FRONTIER_LVL_MODE_COUNT]; + struct RankingHall2P twoPlayers[FRONTIER_LVL_MODE_COUNT]; }; void RecordMixingPlayerSpotTriggered(void); diff --git a/include/recorded_battle.h b/include/recorded_battle.h index 5ae4ac12d5..9b89394038 100644 --- a/include/recorded_battle.h +++ b/include/recorded_battle.h @@ -8,8 +8,8 @@ extern u8 gRecordedBattleMultiplayerId; #define B_RECORD_MODE_RECORDING 1 #define B_RECORD_MODE_PLAYBACK 2 -void RecordedBattle_Init(u8 arg0); -void sub_8184E58(void); +void RecordedBattle_Init(u8 mode); +void RecordedBattle_SetTrainerInfo(void); void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action); void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear); u8 RecordedBattle_GetBattlerAction(u8 battlerId); @@ -23,15 +23,15 @@ u8 GetRecordedBattleFronterBrainSymbol(void); void RecordedBattle_SaveParties(void); u8 GetActiveBattlerLinkPlayerGender(void); void RecordedBattle_ClearFrontierPassFlag(void); -void RecordedBattle_SetFrontierPassFlagFromHword(u16 arg0); +void RecordedBattle_SetFrontierPassFlagFromHword(u16 flags); u8 RecordedBattle_GetFrontierPassFlag(void); u8 GetBattleSceneInRecordedBattle(void); u8 GetTextSpeedInRecordedBattle(void); void RecordedBattle_CopyBattlerMoves(void); -void sub_818603C(u8 arg0); +void RecordedBattle_CheckMovesetChanges(u8 mode); u32 GetAiScriptsInRecordedBattle(void); -void sub_8186444(void); -bool8 sub_8186450(void); +void RecordedBattle_SetPlaybackFinished(void); +bool8 RecordedBattle_CanStopPlayback(void); void GetRecordedBattleRecordMixFriendName(u8 *dst); u8 GetRecordedBattleRecordMixFriendClass(void); u8 GetRecordedBattleApprenticeId(void); diff --git a/include/region_map.h b/include/region_map.h index 02d711afa5..85793badcb 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -99,7 +99,7 @@ u8 DoRegionMapInputCallback(void); bool8 UpdateRegionMapZoom(void); void FreeRegionMapIconResources(void); u16 GetRegionMapSecIdAt(u16 x, u16 y); -void CreateRegionMapPlayerIcon(u16 x, u16 y); +void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag); void CreateRegionMapCursor(u16 tileTag, u16 paletteTag); bool32 IsEventIslandMapSecId(u8 mapSecId); u8 *GetMapName(u8 *, u16, u16); diff --git a/include/reload_save.h b/include/reload_save.h new file mode 100644 index 0000000000..2ce05e53b8 --- /dev/null +++ b/include/reload_save.h @@ -0,0 +1,6 @@ +#ifndef GUARD_RELOAD_SAVE_H +#define GUARD_RELOAD_SAVE_H + +void ReloadSave(void); + +#endif // GUARD_RELOAD_SAVE_H diff --git a/include/reset_rtc_screen.h b/include/reset_rtc_screen.h index 5807dec992..5896164005 100644 --- a/include/reset_rtc_screen.h +++ b/include/reset_rtc_screen.h @@ -1,6 +1,9 @@ #ifndef GUARD_RESET_RTC_SCREEN_H #define GUARD_RESET_RTC_SCREEN_H +extern const struct SpritePalette gSpritePalette_Arrow; +extern const struct SpriteTemplate gSpriteTemplate_Arrow; + void CB2_InitResetRtcScreen(void); #endif // GUARD_RESET_RTC_SCREEN_H diff --git a/include/reset_save_heap.h b/include/reset_save_heap.h deleted file mode 100644 index 12fd186ec9..0000000000 --- a/include/reset_save_heap.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef GUARD_RESET_SAVE_HEAP_H -#define GUARD_RESET_SAVE_HEAP_H - -// Exported type declarations - -// Exported RAM declarations - -// Exported ROM declarations - -void sub_81700F8(void); - -#endif //GUARD_RESET_SAVE_HEAP_H diff --git a/include/save.h b/include/save.h index 948530406e..41913d1df4 100644 --- a/include/save.h +++ b/include/save.h @@ -1,44 +1,43 @@ #ifndef GUARD_SAVE_H #define GUARD_SAVE_H -struct SaveSectionLocation -{ - void *data; - u16 size; -}; - -struct SaveSection -{ - u8 data[0xFF4]; - u16 id; - u16 checksum; - u32 security; - u32 counter; -}; // size is 0x1000 - -// headless save section? -struct UnkSaveSection -{ - u8 data[0xFF4]; - u32 security; -}; // size is 0xFF8 - -struct SaveSectionOffsets -{ - u16 toAdd; - u16 size; -}; - -// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer +// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer. +// Only 12 bytes of the footer are used. #define SECTOR_DATA_SIZE 3968 #define SECTOR_FOOTER_SIZE 128 #define SECTOR_SIZE (SECTOR_DATA_SIZE + SECTOR_FOOTER_SIZE) -// Emerald changes this definition to be the sectors per slot. -#define NUM_SECTORS_PER_SLOT 16 +#define NUM_SAVE_SLOTS 2 -#define UNKNOWN_CHECK_VALUE 0x8012025 -#define SPECIAL_SECTION_SENTINEL 0xB39D +// If the sector's signature field is not this value then the sector is either invalid or empty. +#define SECTOR_SIGNATURE 0x8012025 + +#define SPECIAL_SECTOR_SENTINEL 0xB39D + +#define SECTOR_ID_SAVEBLOCK2 0 +#define SECTOR_ID_SAVEBLOCK1_START 1 +#define SECTOR_ID_SAVEBLOCK1_END 4 +#define SECTOR_ID_PKMN_STORAGE_START 5 +#define SECTOR_ID_PKMN_STORAGE_END 13 +#define NUM_SECTORS_PER_SLOT 14 +// Save Slot 1: 0-13; Save Slot 2: 14-27 +#define SECTOR_ID_HOF_1 28 +#define SECTOR_ID_HOF_2 29 +#define SECTOR_ID_TRAINER_HILL 30 +#define SECTOR_ID_RECORDED_BATTLE 31 +#define SECTORS_COUNT 32 + +#define NUM_HOF_SECTORS 2 + +#define SAVE_STATUS_EMPTY 0 +#define SAVE_STATUS_OK 1 +#define SAVE_STATUS_CORRUPT 2 +#define SAVE_STATUS_NO_FLASH 4 +#define SAVE_STATUS_ERROR 0xFF + +// Special sector id value for certain save functions to +// indicate that no specific sector should be used. +#define FULL_SAVE_SLOT 0xFFFF // SetDamagedSectorBits states enum @@ -52,62 +51,62 @@ enum enum { SAVE_NORMAL, - SAVE_LINK, - //EREADER_SAVE, // deprecated in Emerald - SAVE_LINK2, // unknown 2nd link save + SAVE_LINK, // Link / Battle Frontier + SAVE_EREADER, // deprecated in Emerald SAVE_HALL_OF_FAME, SAVE_OVERWRITE_DIFFERENT_FILE, SAVE_HALL_OF_FAME_ERASE_BEFORE // unused }; -#define SECTOR_ID_SAVEBLOCK2 0 -#define SECTOR_ID_SAVEBLOCK1_START 1 -#define SECTOR_ID_SAVEBLOCK1_END 4 -#define SECTOR_ID_PKMN_STORAGE_START 5 -#define SECTOR_ID_PKMN_STORAGE_END 13 -#define SECTOR_SAVE_SLOT_LENGTH 14 -// Save Slot 1: 0-13; Save Slot 2: 14-27 -#define SECTOR_ID_HOF_1 28 -#define SECTOR_ID_HOF_2 29 -#define SECTOR_ID_TRAINER_HILL 30 -#define SECTOR_ID_RECORDED_BATTLE 31 -#define SECTORS_COUNT 32 +// A save sector location holds a pointer to the data for a particular sector +// and the size of that data. Size cannot be greater than SECTOR_DATA_SIZE. +struct SaveSectorLocation +{ + void *data; + u16 size; +}; -#define SAVE_STATUS_EMPTY 0 -#define SAVE_STATUS_OK 1 -#define SAVE_STATUS_CORRUPT 2 -#define SAVE_STATUS_NO_FLASH 4 -#define SAVE_STATUS_ERROR 0xFF +struct SaveSector +{ + u8 data[SECTOR_DATA_SIZE]; + u8 unused[SECTOR_FOOTER_SIZE - 12]; // Unused portion of the footer + u16 id; + u16 checksum; + u32 signature; + u32 counter; +}; // size is SECTOR_SIZE (0x1000) + +#define SECTOR_SIGNATURE_OFFSET offsetof(struct SaveSector, signature) +#define SECTOR_COUNTER_OFFSET offsetof(struct SaveSector, counter) extern u16 gLastWrittenSector; extern u32 gLastSaveCounter; extern u16 gLastKnownGoodSector; extern u32 gDamagedSaveSectors; extern u32 gSaveCounter; -extern struct SaveSection *gFastSaveSection; -extern u16 gUnknown_03006208; +extern struct SaveSector *gFastSaveSector; +extern u16 gIncrementalSectorId; extern u16 gSaveFileStatus; extern void (*gGameContinueCallback)(void); -extern struct SaveSectionLocation gRamSaveSectionLocations[]; -extern u16 gUnknown_03006294; +extern struct SaveSectorLocation gRamSaveSectorLocations[]; -extern struct SaveSection gSaveDataBuffer; +extern struct SaveSector gSaveDataBuffer; void ClearSaveData(void); void Save_ResetSaveCounters(void); u8 HandleSavingData(u8 saveType); u8 TrySavingData(u8 saveType); -bool8 sub_8153380(void); -bool8 sub_81533AC(void); -bool8 sub_81533E0(void); -bool8 sub_8153408(void); -bool8 FullSaveGame(void); -bool8 CheckSaveFile(void); -u8 Save_LoadGameData(u8 saveType); -u16 sub_815355C(void); -u32 TryReadSpecialSaveSection(u8 sector, u8* dst); -u32 TryWriteSpecialSaveSection(u8 sector, u8* src); -void Task_LinkSave(u8 taskId); +bool8 LinkFullSave_Init(void); +bool8 LinkFullSave_WriteSector(void); +bool8 LinkFullSave_ReplaceLastSector(void); +bool8 LinkFullSave_SetLastSectorSignature(void); +bool8 WriteSaveBlock2(void); +bool8 WriteSaveBlock1Sector(void); +u8 LoadGameSave(u8 saveType); +u16 GetSaveBlocksPointersBaseOffset(void); +u32 TryReadSpecialSaveSector(u8 sector, u8 *dst); +u32 TryWriteSpecialSaveSector(u8 sector, u8 *src); +void Task_LinkFullSave(u8 taskId); // save_failed_screen.c void DoSaveFailedScreen(u8 saveType); diff --git a/include/scanline_effect.h b/include/scanline_effect.h index 5bd8b55468..ae534d9699 100644 --- a/include/scanline_effect.h +++ b/include/scanline_effect.h @@ -43,6 +43,6 @@ void ScanlineEffect_Stop(void); void ScanlineEffect_Clear(void); void ScanlineEffect_SetParams(struct ScanlineEffectParams); void ScanlineEffect_InitHBlankDmaTransfer(void); -u8 ScanlineEffect_InitWave(u8 startLine, u8 endLine, u8 frequency, u8 amplitude, u8 delayInterval, u8 regOffset, bool8 a7); +u8 ScanlineEffect_InitWave(u8 startLine, u8 endLine, u8 frequency, u8 amplitude, u8 delayInterval, u8 regOffset, bool8 applyBattleBgOffsets); #endif // GUARD_SCANLINE_EFFECT_H diff --git a/include/script.h b/include/script.h index 63f6f5aef9..7c180e961b 100644 --- a/include/script.h +++ b/include/script.h @@ -31,16 +31,16 @@ void ScriptCall(struct ScriptContext *ctx, const u8 *ptr); void ScriptReturn(struct ScriptContext *ctx); u16 ScriptReadHalfword(struct ScriptContext *ctx); u32 ScriptReadWord(struct ScriptContext *ctx); -void ScriptContext2_Enable(void); -void ScriptContext2_Disable(void); -bool8 ScriptContext2_IsEnabled(void); -void ScriptContext1_Init(void); -bool8 ScriptContext1_IsScriptSetUp(void); -bool8 ScriptContext2_RunScript(void); -void ScriptContext1_SetupScript(const u8 *ptr); -void ScriptContext1_Stop(void); -void EnableBothScriptContexts(void); -void ScriptContext2_RunNewScript(const u8 *ptr); +void LockPlayerFieldControls(void); +void UnlockPlayerFieldControls(void); +bool8 ArePlayerFieldControlsLocked(void); +void ScriptContext_Init(void); +bool8 ScriptContext_IsEnabled(void); +bool8 ScriptContext_RunScript(void); +void ScriptContext_SetupScript(const u8 *ptr); +void ScriptContext_Stop(void); +void ScriptContext_Enable(void); +void RunScriptImmediately(const u8 *ptr); u8 *MapHeaderGetScriptTable(u8 tag); void MapHeaderRunScriptType(u8 tag); u8 *MapHeaderCheckScriptTable(u8 tag); diff --git a/include/script_menu.h b/include/script_menu.h index 086ad147f0..36b66bf987 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -8,11 +8,11 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, bool8 bool8 ScriptMenu_YesNo(u8 left, u8 top); bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 columnCount); bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y); -bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void); +bool8 (*ScriptMenu_HidePokemonPic(void))(void); int ConvertPixelWidthToTileWidth(int width); u8 CreateWindowFromRect(u8 x, u8 y, u8 width, u8 height); void ClearToTransparentAndRemoveWindow(u8 windowId); -int DisplayTextAndGetWidth(const u8* str, int width); +int DisplayTextAndGetWidth(const u8 *str, int width); int ScriptMenu_AdjustLeftCoordFromWidth(int left, int width); bool16 ScriptMenu_CreatePCMultichoice(void); void ScriptMenu_DisplayPCStartupPrompt(void); diff --git a/include/script_pokemon_util.h b/include/script_pokemon_util.h index cae16e40a6..a2e6915609 100644 --- a/include/script_pokemon_util.h +++ b/include/script_pokemon_util.h @@ -4,6 +4,7 @@ u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); u8 ScriptGiveEgg(u16); void CreateScriptedWildMon(u16, u8, u16); +void CreateScriptedDoubleWildMon(u16, u8, u16, u16, u8, u16); void ScriptSetMonMoveSlot(u8, u16, u8); void ReducePlayerPartyToSelectedMons(void); void HealPlayerParty(void); diff --git a/include/secret_base.h b/include/secret_base.h index b7d36a8ee9..cb3b95ee78 100644 --- a/include/secret_base.h +++ b/include/secret_base.h @@ -24,7 +24,7 @@ void SetCurSecretBaseIdFromPosition(const struct MapPosition *position, const st void TrySetCurSecretBaseIndex(void); void CheckPlayerHasSecretBase(void); void ToggleSecretBaseEntranceMetatile(void); -void EnableBothScriptContexts(void); +void ScriptContext_Enable(void); void ReceiveSecretBasesData(void *records, size_t recordSize, u8 linkIdx); #endif //GUARD_SECRET_BASE_H diff --git a/include/sound.h b/include/sound.h index 25ffa2d6e4..b39a7306a6 100644 --- a/include/sound.h +++ b/include/sound.h @@ -1,26 +1,7 @@ #ifndef GUARD_SOUND_H #define GUARD_SOUND_H -enum { - FANFARE_LEVEL_UP, - FANFARE_OBTAIN_ITEM, - FANFARE_EVOLVED, - FANFARE_OBTAIN_TMHM, - FANFARE_HEAL, - FANFARE_OBTAIN_BADGE, - FANFARE_MOVE_DELETED, - FANFARE_OBTAIN_BERRY, - FANFARE_AWAKEN_LEGEND, - FANFARE_SLOTS_JACKPOT, - FANFARE_SLOTS_WIN, - FANFARE_TOO_BAD, - FANFARE_RG_POKE_FLUTE, - FANFARE_RG_OBTAIN_KEY_ITEM, - FANFARE_RG_DEX_RATING, - FANFARE_OBTAIN_B_POINTS, - FANFARE_OBTAIN_SYMBOL, - FANFARE_REGISTER_MATCH_CALL, -}; +#include "constants/sound.h" void InitMapMusic(void); void MapMusicMain(void); @@ -31,7 +12,6 @@ void StopMapMusic(void); void FadeOutMapMusic(u8 speed); void FadeOutAndPlayNewMapMusic(u16 songNum, u8 speed); void FadeOutAndFadeInNewMapMusic(u16 songNum, u8 fadeOutSpeed, u8 fadeInSpeed); -void FadeInNewMapMusic(u16 songNum, u8 speed); bool8 IsNotWaitingForBGMStop(void); void PlayFanfareByFanfareNum(u8 fanfareNum); bool8 WaitFanfare(bool8 stop); @@ -44,12 +24,12 @@ bool8 IsBGMPausedOrStopped(void); void FadeInBGM(u8 speed); void FadeOutBGM(u8 speed); bool8 IsBGMStopped(void); -void PlayCry1(u16 species, s8 pan); -void PlayCry2(u16 species, s8 pan, s8 volume, u8 priority); -void PlayCry3(u16 species, s8 pan, u8 mode); -void PlayCry4(u16 species, s8 pan, u8 mode); -void PlayCry5(u16 species, u8 mode); -void PlayCry6(u16 species, s8 pan, u8 mode); +void PlayCry_Normal(u16 species, s8 pan); +void PlayCry_NormalNoDucking(u16 species, s8 pan, s8 volume, u8 priority); +void PlayCry_ByMode(u16 species, s8 pan, u8 mode); +void PlayCry_ReleaseDouble(u16 species, s8 pan, u8 mode); +void PlayCry_Script(u16 species, u8 mode); +void PlayCry_DuckNoRestore(u16 species, s8 pan, u8 mode); void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode); bool8 IsCryFinished(void); void StopCryAndClearCrySongs(void); diff --git a/include/start_menu.h b/include/start_menu.h index 1ddd82066d..94d0f9d5b6 100644 --- a/include/start_menu.h +++ b/include/start_menu.h @@ -11,6 +11,6 @@ void SaveGame(void); void CB2_SetUpSaveAfterLinkBattle(void); void SaveForBattleTowerLink(void); void HideStartMenu(void); -void AppendToList(u8* list, u8* pos, u8 newEntry); +void AppendToList(u8 *list, u8 *pos, u8 newEntry); #endif // GUARD_START_MENU_H diff --git a/include/strings.h b/include/strings.h index a343131825..25a96eef08 100644 --- a/include/strings.h +++ b/include/strings.h @@ -179,7 +179,7 @@ extern const u8 gText_EmptyString2[]; extern const u8 gText_Confirm3[]; extern const u8 gText_Cancel4[]; extern const u8 gText_IsThisTheCorrectTime[]; -extern const u8 gText_PkmnFainted3[]; +extern const u8 gText_PkmnFainted_FldPsn[]; extern const u8 gText_Coins[]; extern const u8 gText_Silver[]; extern const u8 gText_Gold[]; @@ -499,6 +499,7 @@ extern const u8 gText_12PoofForgotMove[]; extern const u8 gText_StopLearningMove2[]; extern const u8 gText_MoveNotLearned[]; extern const u8 gText_PkmnElevatedToLvVar2[]; +extern const u8 gText_PkmnGainedExp[]; extern const u8 gText_RemoveMailBeforeItem[]; extern const u8 gText_PkmnHoldingItemCantHoldMail[]; extern const u8 gText_MailTransferredFromMailbox[]; @@ -612,6 +613,10 @@ extern const u8 gText_PlayersBattleResults[]; extern const u8 gText_WinLoseDraw[]; extern const u8 gText_ColorTransparent[]; extern const u8 gText_Slash[]; +extern const u8 gText_HealthboxNickname[]; +extern const u8 gText_HealthboxGender_None[]; +extern const u8 gText_HealthboxGender_Male[]; +extern const u8 gText_HealthboxGender_Female[]; extern const u8 gText_99TimesPlus[]; extern const u8 gText_1MinutePlus[]; @@ -1608,10 +1613,10 @@ extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BirdKeeperMon1[] extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BirdKeeperMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BirdKeeperAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BirdKeeperReject[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_NinjaBoyIntro[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_NinjaBoyIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_NinjaBoyMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_NinjaBoyMon2Ask[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_NinjaBoyAccept[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_NinjaBoyAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_NinjaBoyReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_ParasolLadyIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_ParasolLadyMon1[]; @@ -1621,8 +1626,8 @@ extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_ParasolLadyRejec extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BugManiacIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BugManiacMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BugManiacMon2Ask[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BugManiacAccept[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BugManiacReject[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BugManiacAccept[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_BugManiacReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SailorIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SailorMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SailorMon2Ask[]; @@ -1635,13 +1640,13 @@ extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CollectorAccept[ extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CollectorReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerMIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerMMon1[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerMMon2Ask[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerMMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerMAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerMReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerFIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerFMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerFMon2Ask[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerFAccept[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerFAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnRangerFReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_AromaLadyIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_AromaLadyMon1[]; @@ -1650,20 +1655,20 @@ extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_AromaLadyAccept[ extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_AromaLadyReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_RuinManiacIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_RuinManiacMon1[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_RuinManiacMon2Ask[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_RuinManiacMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_RuinManiacAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_RuinManiacReject[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerMIntro[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerMIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerMMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerMMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerMAccept[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerMReject[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerFIntro[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerFMon1[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerMReject[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerFIntro[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerFMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerFMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerFAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CoolTrainerFReject[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokemaniacIntro[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokemaniacIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokemaniacMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokemaniacMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokemaniacAccept[]; @@ -1674,28 +1679,28 @@ extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_KindlerMon2Ask[] extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_KindlerAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_KindlerReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CamperIntro[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CamperMon1[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CamperMon2Ask[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CamperAccept[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CamperReject[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PicnickerIntro[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PicnickerMon1[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CamperMon1[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CamperMon2Ask[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CamperAccept[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_CamperReject[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PicnickerIntro[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PicnickerMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PicnickerMon2Ask[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PicnickerAccept[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PicnickerAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PicnickerReject[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicMIntro[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicMIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicMMon1[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicMMon2Ask[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicMMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicMAccept[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicMReject[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicFIntro[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicFMon1[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicMReject[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicFIntro[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicFMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicFMon2Ask[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicFAccept[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicFAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PsychicFReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SchoolKidFIntro[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SchoolKidFMon1[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SchoolKidFMon2Ask[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SchoolKidFMon1[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SchoolKidFMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SchoolKidFAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SchoolKidFReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PkmnBreederFIntro[]; @@ -1707,27 +1712,27 @@ extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokefanFIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokefanFMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokefanFMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokefanFAccept[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokefanFReject[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_PokefanFReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerFIntro[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerFMon1[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerFMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerFMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerFAccept[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerFReject[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteMIntro[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerFReject[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteMIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteMMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteMMon2Ask[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteMAccept[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteMAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteMReject[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteFIntro[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteFMon1[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteFIntro[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteFMon1[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteFMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteFAccept[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmingTriathleteFReject[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerMIntro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerMMon1[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerMMon2Ask[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerMMon2Ask[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerMAccept[]; -extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerMReject[]; +extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerMReject[]; // Battle Dome. extern const u8 BattleDome_Text_Potential1[]; @@ -2975,8 +2980,8 @@ extern const u8 gText_FindToughPokemon[]; extern const u8 gText_ReturnToConditionMenu[]; extern const u8 gText_NoRibbonWinners[]; -// Pokenav Ribbons -extern const u8 gText_NumberF700[]; +// Pokenav +extern const u8 gText_NumberIndex[]; extern const u8 gText_RibbonsF700[]; // use_pokeblock @@ -3018,4 +3023,11 @@ extern const u8 gText_PkmnForSwap[]; extern const u8 gText_SamePkmnInPartyAlready[]; extern const u8 gText_Cancel3[]; +// Naming Screen +extern const u8 gText_MoveOkBack[]; +extern const u8 gText_YourName[]; +extern const u8 gText_BoxName[]; +extern const u8 gText_PkmnsNickname[]; +extern const u8 gText_TellHimTheWords[]; + #endif // GUARD_STRINGS_H diff --git a/include/text_window.h b/include/text_window.h index 7bdcacd17c..aa7798c358 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -14,14 +14,14 @@ extern const u16 gTextWindowFrame1_Pal[]; const struct TilesPal *GetWindowFrameTilesPal(u8 id); void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset); -void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset); void LoadWindowGfx(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset); +void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset); void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset); +void LoadUserWindowBorderGfxOnBg(u8 bg, u16 destOffset, u8 palOffset); void DrawTextBorderOuter(u8 windowId, u16 tileNum, u8 palNum); void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum); void rbox_fill_rectangle(u8 windowId); const u16 *GetTextWindowPalette(u8 id); const u16 *GetOverworldTextboxPalettePtr(void); -void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset); #endif // GUARD_TEXT_WINDOW_H diff --git a/include/trade.h b/include/trade.h index bd8ef8f63e..d63749653a 100644 --- a/include/trade.h +++ b/include/trade.h @@ -4,24 +4,20 @@ #include "link_rfu.h" #include "constants/trade.h" -// Exported type declarations - -// Exported RAM declarations -extern struct MailStruct gTradeMail[PARTY_SIZE]; +extern struct Mail gTradeMail[PARTY_SIZE]; extern u8 gSelectedTradeMonPositions[2]; -// Exported ROM declarations extern const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate; s32 GetGameProgressForLinkTrade(void); void CB2_StartCreateTradeMenu(void); void CB2_LinkTrade(void); -int CanRegisterMonForTradingBoard(struct GFtgtGnameSub a0, u16, u16, u8); -int GetUnionRoomTradeMessageId(struct GFtgtGnameSub a0, struct GFtgtGnameSub a1, u16 a2, u16 a3, u8 a4, u16 a5, u8 a6); -int CanSpinTradeMon(struct Pokemon*, u16); +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isEventLegal); +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal); +int CanSpinTradeMon(struct Pokemon *, u16); void InitTradeSequenceBgGpuRegs(void); void LinkTradeDrawWindow(void); -void InitTradeBg(void); +void LoadTradeAnimGfx(void); void DrawTextOnTradeWindow(u8, const u8 *, u8); #endif //GUARD_TRADE_H diff --git a/include/trainer_card.h b/include/trainer_card.h index 685d1cdcab..f14335ae89 100644 --- a/include/trainer_card.h +++ b/include/trainer_card.h @@ -44,8 +44,11 @@ struct TrainerCard /*0x28*/ u16 easyChatProfile[TRAINER_CARD_PROFILE_LENGTH]; /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x38*/ u8 version; - /*0x3A*/ bool16 hasAllFrontierSymbols; - /*0x3C*/ u32 berryCrushPoints; + /*0x3A*/ bool16 linkHasAllFrontierSymbols; + /*0x3C*/ union { + u32 berryCrush; + u32 frontier; + } linkPoints; // This field is used differently by FRLG vs Emerald /*0x40*/ u32 unionRoomNum; /*0x44*/ u8 filler[8]; /*0x4C*/ bool8 shouldDrawStickers; // FRLG only @@ -54,7 +57,9 @@ struct TrainerCard /*0x4F*/ u8 facilityClass; /*0x50*/ u8 stickers[TRAINER_CARD_STICKER_TYPES]; // FRLG only /*0x54*/ u16 monSpecies[PARTY_SIZE]; // FRLG only - /*0x60*/ bool16 hasAllSymbols; + // Note: Link players use linkHasAllFrontierSymbols, not the field below, + // which they use for a Wonder Card flag id instead (see CreateTrainerCardInBuffer) + /*0x60*/ bool16 hasAllFrontierSymbols; /*0x62*/ u16 frontierBP; }; @@ -62,9 +67,9 @@ extern struct TrainerCard gTrainerCards[4]; u32 CountPlayerTrainerStars(void); u8 GetTrainerCardStars(u8 cardId); -void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion); +void CopyTrainerCardData(struct TrainerCard *dst, struct TrainerCard *src, u8 gameVersion); void ShowPlayerTrainerCard(void (*callback)(void)); -void ShowTrainerCardInLink(u8 arg0, void (*callback)(void)); -void TrainerCard_GenerateCardForPlayer(struct TrainerCard *); +void ShowTrainerCardInLink(u8 cardId, void (*callback)(void)); +void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *); #endif // GUARD_TRAINER_CARD_H diff --git a/include/trainer_hill.h b/include/trainer_hill.h index acf8faccaa..6e2ec0ba0a 100644 --- a/include/trainer_hill.h +++ b/include/trainer_hill.h @@ -1,13 +1,13 @@ #ifndef GUARD_TRAINER_HILL_H #define GUARD_TRAINER_HILL_H -#define HILL_TRAINER_NAME_LENGTH 11 +#define DUMMY_HILL_MON { .nickname = __("$$$$$$$$$$$") } struct TrainerHillTrainer { - u8 name[HILL_TRAINER_NAME_LENGTH]; + u8 name[TRAINER_NAME_LENGTH + 1]; u8 facilityClass; - u32 unused; + bool32 unused; // Set to TRUE on JP trainers u16 speechBefore[EASY_CHAT_BATTLE_WORDS_COUNT]; u16 speechWin[EASY_CHAT_BATTLE_WORDS_COUNT]; u16 speechLose[EASY_CHAT_BATTLE_WORDS_COUNT]; @@ -15,44 +15,30 @@ struct TrainerHillTrainer struct BattleTowerPokemon mons[PARTY_SIZE]; }; -struct TrHillRoomTrainers +struct TrainerHillFloorMap { - u8 name[2][HILL_TRAINER_NAME_LENGTH]; - u8 facilityClass[2]; + u8 metatileData[HILL_FLOOR_WIDTH * HILL_FLOOR_HEIGHT_MAIN]; // Add NUM_METATILES_IN_PRIMARY to the values in this array to get metatile ids. + u16 collisionData[HILL_FLOOR_WIDTH]; // One bit for each tile in column-major order, so every array entry is one row. 1 = impassable, 0 = passable + u8 trainerCoords[HILL_TRAINERS_PER_FLOOR]; // Starting at (0,6). Format is 0bYYYYXXXX. + u8 trainerDirections; // DIR_* - 1, 4 bits per trainer + u8 trainerRanges; // 4 bits per trainer }; -struct TrHillDisplay -{ - // Metatile data. Add 0x200 to the values in this array to get metatiles. - // This data then overwrites the metatiles in the map starting at (0,5) - u8 metatileData[0x100]; - // Collision data. One bit for each tile in column-major order, - // so every array entry is one row. 1 = impassable, 0 = passable - u16 collisionData[16]; - // Trainer coordinates, starting at (0,6). Format is 0bYYYYXXXX. - u8 coords[2]; - // Trainer facing directions. Same as (DIR_* - 1). - // Effectively an array of nibbles, one for each trainer. - u8 direction; - // Trainer sight ranges. Effectively an array of nibbles, one for each trainer. - u8 range; -}; - -struct TrHillFloor +struct TrainerHillFloor { u8 trainerNum1; u8 trainerNum2; - struct TrainerHillTrainer trainers[2]; - struct TrHillDisplay display; + struct TrainerHillTrainer trainers[HILL_TRAINERS_PER_FLOOR]; + struct TrainerHillFloorMap map; }; -struct TrHillTag +struct TrainerHillChallenge { u8 numTrainers; u8 unused1; u8 numFloors; - u32 checksum; - struct TrHillFloor floors[0]; + u32 checksum; // A byte array sum of the floor data + struct TrainerHillFloor floors[0]; // Floor data is assumed to follow, so this will be intentionally read out of bounds }; extern u32 *gTrainerHillVBlankCounter; diff --git a/include/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h index 8387fde95e..e56ed0ffa5 100644 --- a/include/trainer_pokemon_sprites.h +++ b/include/trainer_pokemon_sprites.h @@ -1,8 +1,14 @@ #ifndef GUARD_TRAINER_POKEMON_SPRITES_H #define GUARD_TRAINER_POKEMON_SPRITES_H +// For the flags argument of CreateMonPicSprite_Affine +#define MON_PIC_AFFINE_BACK 0 +#define MON_PIC_AFFINE_FRONT 1 +#define MON_PIC_AFFINE_NONE 3 +#define F_MON_PIC_NO_AFFINE (1 << 7) + bool16 ResetAllPicSprites(void); -u16 CreatePicSprite2(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); +u16 CreateMonPicSprite_Affine(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); u16 CreateMonPicSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); u16 FreeAndDestroyMonPicSprite(u16 spriteId); u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); diff --git a/include/tv.h b/include/tv.h index 30cd133265..31c8fcc50f 100644 --- a/include/tv.h +++ b/include/tv.h @@ -19,7 +19,7 @@ void HideBattleTowerReporter(void); void ReceiveTvShowsData(void *src, u32 size, u8 masterIdx); void TryPutSpotTheCutiesOnAir(struct Pokemon *pokemon, u8 ribbonMonDataIdx); u32 GetPlayerIDAsU32(void); -bool8 GetPriceReduction(u8 newsKind); +bool8 IsPokeNewsActive(u8 newsKind); void SanitizeTVShowLocationsForRuby(TVShow *shows); size_t CountDigits(int value); u8 GetRibbonCount(struct Pokemon *pokemon); diff --git a/include/union_room.h b/include/union_room.h index 563a048d32..acff4b5929 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -5,50 +5,58 @@ #include "link.h" #include "constants/union_room.h" -// Exported type declarations +// In the Union Room the player is only ever connected to ≤ 4 other players. +// However, there can be up to MAX_UNION_ROOM_LEADERS (8) object events to +// represent leaders of recently discovered link groups, and each of those groups +// may have up to MAX_RFU_PLAYERS (5) players in it including the leader. +// These players are represented on-screen by NPC sprites drawn around the leader. +// Thus there can be 40 sprites of other players on-screen, in 8 groups of 5. +#define NUM_UNION_ROOM_SPRITES (MAX_UNION_ROOM_LEADERS * MAX_RFU_PLAYERS) -struct WirelessGnameUnamePair +// The maximum number of recently connected players that can be tracked. +// Note that this is significantly less than NUM_UNION_ROOM_SPRITES, i.e. not +// every player that can be shown in the Union Room can be tracked at once. +// Information such as a group member's gender can instead be read from partnerInfo +// of the leader's RfuGameData by tracking at least all of the group leaders. +#define MAX_RFU_PLAYER_LIST_SIZE 16 + +struct RfuPlayerData { - struct GFtgtGname gname; - u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1]; + struct RfuGameData data; + u8 ALIGNED(4) name[RFU_USER_NAME_LENGTH]; }; -struct UnkStruct_x1C +struct RfuPlayer { - struct WirelessGnameUnamePair gname_uname; - u8 active:1; -}; - -struct UnkStruct_x20 -{ - struct WirelessGnameUnamePair gname_uname; + struct RfuPlayerData rfu; u16 timeoutCounter; u8 groupScheduledAnim:2; bool8 useRedText:1; // Never set - u8 field_1B; - u8 filler[3]; + u8 newPlayerCountdown; + u8 unused; }; -struct UnkStruct_Main0 +struct RfuPlayerList { - struct UnkStruct_x20 arr[MAX_UNION_ROOM_PLAYERS]; + struct RfuPlayer players[MAX_RFU_PLAYER_LIST_SIZE]; }; -struct UnkStruct_Main4 +struct RfuIncomingPlayer { - struct UnkStruct_x1C arr[MAX_RFU_PLAYERS]; + struct RfuPlayerData rfu; + bool8 active:1; }; -struct UnkStruct_Main8 +struct RfuIncomingPlayerList { - struct UnkStruct_x20 arr[MAX_RFU_PLAYERS]; + struct RfuIncomingPlayer players[MAX_RFU_PLAYERS]; }; struct WirelessLink_Leader { - struct UnkStruct_Main0 *field_0; - struct UnkStruct_Main4 *field_4; - struct UnkStruct_Main8 *field_8; + struct RfuPlayerList *playerList; + struct RfuIncomingPlayerList *incomingPlayerList; + struct RfuPlayerList *playerListBackup; u8 state; u8 textState; u8 delayTimerAfterOk; @@ -57,8 +65,8 @@ struct WirelessLink_Leader u8 nPlayerModeWindowId; u8 listTaskId; u8 playerCount; - u16 field_14; - u8 field_16; + u16 yesNoWindowId; + u8 unused; u8 listenTaskId; u8 activity; u8 joinRequestAnswer; @@ -67,20 +75,20 @@ struct WirelessLink_Leader struct WirelessLink_Group { - struct UnkStruct_Main0 *field_0; - struct UnkStruct_Main4 *field_4; + struct RfuPlayerList *playerList; + struct RfuIncomingPlayerList *incomingPlayerList; u8 state; u8 textState; - u8 field_A; + u8 delayTimerAfterOk; // Unused u8 listWindowId; u8 bButtonCancelWindowId; u8 playerNameAndIdWindowId; u8 listTaskId; u8 leaderId; - u8 field_10; + u8 unused; u8 listenTaskId; - u8 isWonderNews; - u8 field_13; + bool8 isWonderNews; + bool8 showListMenu; // Never set u8 refreshTimer; u8 delayBeforePrint; }; @@ -95,73 +103,59 @@ struct UnionRoomObject struct WirelessLink_URoom { - struct UnkStruct_Main0 *field_0; - struct UnkStruct_Main4 *field_4; - struct UnkStruct_Main0 *field_8; - struct UnkStruct_Main4 *field_C; + struct RfuPlayerList *playerList; + struct RfuIncomingPlayerList *incomingChildList; + struct RfuPlayerList *spawnPlayer; + struct RfuIncomingPlayerList *incomingParentList; u16 unknown; // Never read - u16 field_12; + u16 unreadPlayerId; u8 state; u8 stateAfterPrint; u8 textState; u8 filler[4]; u8 topListMenuWindowId; u8 topListMenuId; - u8 tradeBoardSelectWindowId; - u8 tradeBoardDetailsWindowId; + u8 tradeBoardMainWindowId; + u8 tradeBoardHeaderWindowId; u8 unused1; u8 searchTaskId; - u8 spriteIds[40]; + u8 spriteIds[NUM_UNION_ROOM_SPRITES]; u8 unused2; u8 tradeBoardListMenuId; u16 playerSendBuffer[6]; u8 activityRequestStrbufs[4][16]; u16 partnerYesNoResponse; u16 recvActivityRequest[3]; - struct UnionRoomObject objects[MAX_UNION_ROOM_PLAYERS]; + struct UnionRoomObject objects[MAX_UNION_ROOM_LEADERS]; u8 trainerCardStrBuffer[12][15]; u8 trainerCardColorStrBuffer[48]; u8 trainerCardMsgStrBuffer[200]; }; -union WirelessLink_Main -{ - struct WirelessLink_Leader *leader; - struct WirelessLink_Group *group; - struct WirelessLink_URoom *uRoom; -}; - struct UnionRoomTrade { u16 state; u16 type; u32 playerPersonality; u8 offerPlayerId; - u8 filler1; u16 playerSpecies; u16 playerLevel; u16 species; u16 level; - u16 filler2; u32 personality; }; -// Exported RAM declarations - extern u8 gPlayerCurrActivity; -extern union WirelessLink_Main gUnknown_02022C30; -extern struct GFtgtGnameSub gPartnerTgtGnameSub; +extern struct RfuGameCompatibilityData gRfuPartnerCompatibilityData; extern u16 gUnionRoomOfferedSpecies; extern u8 gUnionRoomRequestedMonType; -// Exported ROM declarations - u8 CreateTask_CreateTradeMenu(void); void SetUsingUnionRoomStartMenu(void); -void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0); -void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0); -void MEvent_CreateTask_Leader(u32 arg0); +void CreateTask_LinkMysteryGiftWithFriend(u32 activity); +void CreateTask_LinkMysteryGiftOverWireless(u32 activity); +void CreateTask_SendMysteryGift(u32 activity); u8 CreateTask_ListenToWireless(void); void StartUnionRoomBattle(u16 battleFlags); diff --git a/include/union_room_player_avatar.h b/include/union_room_player_avatar.h index c7add758a0..508545a0eb 100644 --- a/include/union_room_player_avatar.h +++ b/include/union_room_player_avatar.h @@ -3,12 +3,12 @@ u8 InitUnionRoomPlayerObjects(struct UnionRoomObject *players); void DestroyUnionRoomPlayerObjects(void); -void CreateGroupMemberSpritesInvisible(u8 *spriteIds, s32 playerIdx); -void DestroyGroupMemberSprites(u8 *spriteIds); +void CreateUnionRoomPlayerSprites(u8 *spriteIds, s32 leaderId); +void DestroyUnionRoomPlayerSprites(u8 *spriteIds); void SetTilesAroundUnionRoomPlayersPassable(void); void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom); void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom); -bool32 TryInteractWithUnionRoomMember(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds); -void UpdateUnionRoomMemberFacing(u32 currDirection, u32 playerIdx, struct UnkStruct_Main0 *main0); +bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *list, s16 *memberIdPtr, s16 *leaderIdPtr, u8 *spriteIds); +void UpdateUnionRoomMemberFacing(u32 memberId, u32 leaderId, struct RfuPlayerList *list); #endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H diff --git a/include/util.h b/include/util.h index 77062de96e..8f2079a0ba 100644 --- a/include/util.h +++ b/include/util.h @@ -12,7 +12,7 @@ void LoadWordFromTwoHalfwords(u16 *, u32 *); int CountTrailingZeroBits(u32 value); u16 CalcCRC16(const u8 *data, s32 length); u16 CalcCRC16WithTable(const u8 *data, u32 length); -u32 CalcByteArraySum(const u8* data, u32 length); +u32 CalcByteArraySum(const u8 *data, u32 length); void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor); void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha); void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output); diff --git a/include/walda_phrase.h b/include/walda_phrase.h index 3d77011235..1cfd8af48a 100644 --- a/include/walda_phrase.h +++ b/include/walda_phrase.h @@ -1,6 +1,8 @@ #ifndef GUARD_WALDA_PHRASE_H #define GUARD_WALDA_PHRASE_H +#define WALDA_PHRASE_LENGTH 15 + u16 TryBufferWaldaPhrase(void); void DoWaldaNamingScreen(void); u16 TryGetWallpaperWithWaldaPhrase(void); diff --git a/include/wild_encounter.h b/include/wild_encounter.h index 55bbaa7dde..e853efbadc 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -1,10 +1,7 @@ #ifndef GUARD_WILD_ENCOUNTER_H #define GUARD_WILD_ENCOUNTER_H -#define LAND_WILD_COUNT 12 -#define WATER_WILD_COUNT 5 -#define ROCK_WILD_COUNT 5 -#define FISH_WILD_COUNT 10 +#include "constants/wild_encounter.h" struct WildPokemon { @@ -30,15 +27,17 @@ struct WildPokemonHeader }; extern const struct WildPokemonHeader gWildMonHeaders[]; +extern bool8 gIsFishingEncounter; +extern bool8 gIsSurfingEncounter; void DisableWildEncounters(bool8 disabled); bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavior); -void ScrSpecial_RockSmashWildEncounter(void); bool8 SweetScentWildEncounter(void); bool8 DoesCurrentMapHaveFishingMons(void); void FishingWildEncounter(u8 rod); u16 GetLocalWildMon(bool8 *isWaterMon); u16 GetLocalWaterMon(void); bool8 UpdateRepelCounter(void); +bool8 TryDoDoubleWildBattle(void); #endif // GUARD_WILD_ENCOUNTER_H diff --git a/include/wonder_news.h b/include/wonder_news.h new file mode 100755 index 0000000000..68fd59e4ce --- /dev/null +++ b/include/wonder_news.h @@ -0,0 +1,15 @@ +#ifndef GUARD_WONDER_NEWS_H +#define GUARD_WONDER_NEWS_H + +enum { + WONDER_NEWS_NONE, + WONDER_NEWS_RECV_FRIEND, + WONDER_NEWS_RECV_WIRELESS, + WONDER_NEWS_SENT, +}; + + +void InitSavedWonderNews(void); +void GenerateRandomWonderNews(u32 newsType); + +#endif //GUARD_WONDER_NEWS_H diff --git a/ld_script.txt b/ld_script.txt index 886bd8f0ff..da0eb682d3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -14,7 +14,12 @@ SECTIONS { . = 0x1C000; INCLUDE "sym_ewram.ld" + src/*.o(.ewram_data); + gflib/*.o(.ewram_data); + *libc.a:impure.o(.data); + *libc.a:locale.o(.data); + *libc.a:mallocr.o(.data); . = 0x40000; } @@ -25,6 +30,9 @@ SECTIONS { { /* .bss starts at 0x3000000 */ INCLUDE "sym_bss.ld" + src/*.o(.bss); + gflib/*.o(.bss); + data/*.o(.bss); /* .bss.code starts at 0x3001AA8 */ src/m4a.o(.bss.code); @@ -41,6 +49,8 @@ SECTIONS { .text : ALIGN(4) { + src/rom_header.o(.text); + src/rom_header_gf.o(.text.*); src/crt0.o(.text); src/main.o(.text); gflib/malloc.o(.text); @@ -57,16 +67,16 @@ SECTIONS { src/link_rfu_3.o(.text); src/link_rfu_2.o(.text); src/union_room.o(.text); - src/mystery_gift.o(.text); + src/mystery_gift_menu.o(.text); src/union_room_player_avatar.o(.text); src/wireless_communication_status_screen.o(.text); src/union_room_battle.o(.text); - src/mevent2.o(.text); - src/mevent_801BAAC.o(.text); - src/mevent_server.o(.text); - src/mevent_client.o(.text); - src/mevent_server_helpers.o(.text); - src/mevent_news.o(.text); + src/mystery_gift.o(.text); + src/mystery_gift_view.o(.text); + src/mystery_gift_server.o(.text); + src/mystery_gift_client.o(.text); + src/mystery_gift_link.o(.text); + src/wonder_news.o(.text); src/union_room_chat.o(.text); src/berry_crush.o(.text); src/berry_powder.o(.text); @@ -81,6 +91,7 @@ SECTIONS { src/battle_bg.o(.text); src/battle_main.o(.text); src/battle_util.o(.text); + src/battle_z_move.o(.text); src/battle_script_commands.o(.text); src/battle_util2.o(.text); src/battle_controller_player.o(.text); @@ -88,6 +99,7 @@ SECTIONS { src/battle_controller_opponent.o(.text); src/battle_ai_switch_items.o(.text); src/battle_controller_link_opponent.o(.text); + src/battle_debug.o(.text); src/pokemon.o(.text); src/trig.o(.text); src/random.o(.text); @@ -191,6 +203,7 @@ SECTIONS { src/battle_anim_ground.o(.text); src/battle_anim_normal.o(.text); src/battle_anim_utility_funcs.o(.text); + src/battle_anim_new.o(.text); src/battle_intro.o(.text); src/bike.o(.text); src/easy_chat.o(.text); @@ -205,7 +218,8 @@ SECTIONS { src/decoration.o(.text); src/slot_machine.o(.text); src/contest_painting.o(.text); - src/battle_ai_script_commands.o(.text); + src/battle_ai_main.o(.text); + src/battle_ai_util.o(.text); src/trader.o(.text); src/starter_choose.o(.text); src/wallclock.o(.text); @@ -250,7 +264,7 @@ SECTIONS { src/battle_controller_wally.o(.text); src/player_pc.o(.text); src/intro.o(.text); - src/reset_save_heap.o(.text); + src/reload_save.o(.text); src/field_region_map.o(.text); src/battle_anim_throw.o(.text); src/hall_of_fame.o(.text); @@ -293,7 +307,7 @@ SECTIONS { src/item_icon.o(.text); src/party_menu.o(.text); src/battle_tent.o(.text); - src/unk_text_util_2.o(.text); + src/braille.o(.text); src/multiboot.o(.text); src/berry_fix_graphics.o(.text); src/battle_controller_player_partner.o(.text); @@ -304,17 +318,17 @@ SECTIONS { src/battle_pyramid_bag.o(.text); src/pokenav.o(.text); src/pokenav_main_menu.o(.text); - src/pokenav_match_call_ui.o(.text); - src/pokenav_menu_handler_1.o(.text); - src/pokenav_menu_handler_2.o(.text); - src/pokenav_match_call_1.o(.text); - src/pokenav_match_call_2.o(.text); + src/pokenav_list.o(.text); + src/pokenav_menu_handler.o(.text); + src/pokenav_menu_handler_gfx.o(.text); + src/pokenav_match_call_list.o(.text); + src/pokenav_match_call_gfx.o(.text); src/pokenav_region_map.o(.text); - src/pokenav_conditions_1.o(.text); - src/pokenav_conditions_2.o(.text); - src/pokenav_conditions_3.o(.text); - src/pokenav_ribbons_1.o(.text); - src/pokenav_ribbons_2.o(.text); + src/pokenav_conditions.o(.text); + src/pokenav_conditions_gfx.o(.text); + src/pokenav_conditions_search_results.o(.text); + src/pokenav_ribbons_list.o(.text); + src/pokenav_ribbons_summary.o(.text); src/pokenav_match_call_data.o(.text); src/menu_specialized.o(.text); src/ereader_helpers.o(.text); @@ -327,6 +341,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); } =0 script_data : @@ -337,7 +352,6 @@ SECTIONS { data/battle_scripts_1.o(script_data); data/field_effect_scripts.o(script_data); data/battle_scripts_2.o(script_data); - data/battle_ai_scripts.o(script_data); data/contest_ai_scripts.o(script_data); data/mystery_event_script_cmd_table.o(script_data); } =0 @@ -429,6 +443,8 @@ SECTIONS { .rodata : ALIGN(4) { + src/rom_header.o(.rodata); + src/rom_header_gf.o(.rodata); src/main.o(.rodata); gflib/bg.o(.rodata); gflib/window.o(.rodata); @@ -443,15 +459,16 @@ SECTIONS { src/link_rfu_2.o(.rodata); src/link_rfu_2.o(.rodata.str1.4); src/union_room.o(.rodata); - src/mystery_gift.o(.rodata); + src/mystery_gift_menu.o(.rodata); src/union_room_player_avatar.o(.rodata); src/wireless_communication_status_screen.o(.rodata); src/union_room_battle.o(.rodata); - src/mevent2.o(.rodata); - src/mevent_801BAAC.o(.rodata); - src/mevent_server.o(.rodata); - src/mevent_client.o(.rodata); - src/mevent_scripts.o(.rodata); + src/mystery_gift.o(.rodata); + src/mystery_gift_view.o(.rodata); + src/mystery_gift_server.o(.rodata); + src/mystery_gift_client.o(.rodata); + src/mystery_gift_scripts.o(.rodata); + src/wonder_news.o(.rodata); src/union_room_chat.o(.rodata); src/berry_crush.o(.rodata); src/berry_powder.o(.rodata); @@ -466,12 +483,14 @@ SECTIONS { src/battle_bg.o(.rodata); src/battle_main.o(.rodata); src/battle_util.o(.rodata); + src/battle_z_move.o(.rodata); src/battle_script_commands.o(.rodata); src/battle_controller_player.o(.rodata); src/battle_anim_smokescreen.o(.rodata); src/battle_controller_opponent.o(.rodata); src/battle_ai_switch_items.o(.rodata); src/battle_controller_link_opponent.o(.rodata); + src/battle_debug.o(.rodata); src/pokemon.o(.rodata); src/trig.o(.rodata); src/util.o(.rodata); @@ -564,6 +583,7 @@ SECTIONS { src/battle_anim_ground.o(.rodata); src/battle_anim_normal.o(.rodata); src/battle_anim_utility_funcs.o(.rodata); + src/battle_anim_new.o(.rodata); src/battle_intro.o(.rodata); src/bike.o(.rodata); src/easy_chat.o(.rodata); @@ -577,7 +597,8 @@ SECTIONS { src/decoration.o(.rodata); src/slot_machine.o(.rodata); src/contest_painting.o(.rodata); - src/battle_ai_script_commands.o(.rodata); + src/battle_ai_main.o(.rodata); + src/battle_ai_util.o(.rodata); src/trader.o(.rodata); src/starter_choose.o(.rodata); src/wallclock.o(.rodata); @@ -648,7 +669,7 @@ SECTIONS { src/item_icon.o(.rodata); src/party_menu.o(.rodata); src/battle_tent.o(.rodata); - src/unk_text_util_2.o(.rodata); + src/braille.o(.rodata); src/multiboot.o(.rodata); src/berry_fix_graphics.o(.rodata); src/battle_controller_player_partner.o(.rodata); @@ -659,16 +680,16 @@ SECTIONS { src/battle_pyramid_bag.o(.rodata); src/pokenav.o(.rodata); src/pokenav_main_menu.o(.rodata); - src/pokenav_match_call_ui.o(.rodata); - src/pokenav_menu_handler_1.o(.rodata); - src/pokenav_menu_handler_2.o(.rodata); - src/pokenav_match_call_1.o(.rodata); - src/pokenav_match_call_2.o(.rodata); + src/pokenav_list.o(.rodata); + src/pokenav_menu_handler.o(.rodata); + src/pokenav_menu_handler_gfx.o(.rodata); + src/pokenav_match_call_list.o(.rodata); + src/pokenav_match_call_gfx.o(.rodata); src/pokenav_region_map.o(.rodata); - src/pokenav_conditions_2.o(.rodata); - src/pokenav_conditions_3.o(.rodata); - src/pokenav_ribbons_1.o(.rodata); - src/pokenav_ribbons_2.o(.rodata); + src/pokenav_conditions_gfx.o(.rodata); + src/pokenav_conditions_search_results.o(.rodata); + src/pokenav_ribbons_list.o(.rodata); + src/pokenav_ribbons_summary.o(.rodata); src/pokenav_match_call_data.o(.rodata); src/menu_specialized.o(.rodata); src/ereader_helpers.o(.rodata); @@ -680,11 +701,13 @@ SECTIONS { src/gym_leader_rematch.o(.rodata); src/battle_transition_frontier.o(.rodata); src/text_input_strings.o(.rodata); - data/fonts.o(.rodata); + src/fonts.o(.rodata); + src/international_string_util.o(.rodata); src/mystery_event_msg.o(.rodata); - data/mystery_event.o(.rodata); + data/mystery_gift.o(.rodata); src/m4a_tables.o(.rodata); data/sound_data.o(.rodata); + src/pokemon_debug.o(.rodata); } =0 song_data : @@ -1235,16 +1258,50 @@ SECTIONS { src/librfu_sio32id.o(.rodata); *libgcc.a:_divdi3.o(.rodata); *libgcc.a:_udivdi3.o(.rodata); - *libc.a(.rodata); - *libc.a(.data); + *libc.a:memcpy.o(.rodata); + *libc.a:memset.o(.rodata); + *libc.a:strcmp.o(.rodata); + *libc.a:strcpy.o(.rodata); + *libc.a:impure.o(.rodata); + *libc.a:vsprintf.o(.rodata); + *libc.a:vfprintf.o(.rodata); + *libc.a:wsetup.o(.rodata); + *libc.a:dtoa.o(.rodata); + *libc.a:fflush.o(.rodata); + *libc.a:findfp.o(.rodata); + *libc.a:freer.o(.rodata); + *libc.a:mtrim.o(.rodata); + *libc.a:fvwrite.o(.rodata); + *libc.a:fwalk.o(.rodata); + *libc.a:locale.o(.rodata); + *libc.a:makebuf.o(.rodata); + *libc.a:mallocr.o(.rodata); + *libc.a:mbtowc_r.o(.rodata); + *libc.a:memchr.o(.rodata); + *libc.a:memmove.o(.rodata); + *libc.a:mlock.o(.rodata); + *libc.a:mprec.o(.rodata); + *libc.a:s_isinf.o(.rodata); + *libc.a:s_isnan.o(.rodata); + *libc.a:sbrkr.o(.rodata); + *libc.a:stdio.o(.rodata); + *libc.a:strlen.o(.rodata); *libc.a:syscalls.o(.rodata); + *libc.a:writer.o(.rodata); + *libc.a:callocr.o(.rodata); + *libc.a:closer.o(.rodata); + *libc.a:errno.o(.rodata); + *libc.a:fstatr.o(.rodata); + *libc.a:libcfunc.o(.rodata); + *libc.a:lseekr.o(.rodata); + *libc.a:readr.o(.rodata); src/libisagbprn.o(.rodata); } =0 - other_data : + multiboot_data : ALIGN(4) { - data/unknown_serial_data.o(.rodata); + data/multiboot_ereader.o(.rodata); data/multiboot_berry_glitch_fix.o(.rodata); data/multiboot_pokemon_colosseum.o(.rodata); } =0 @@ -1255,6 +1312,16 @@ SECTIONS { src/graphics.o(.rodata); } =0 + extra : + ALIGN(4) + { + src/*.o(.text); + gflib/*.o(.text); + src/*.o(.rodata); + gflib/*.o(.rodata); + data/*.o(.rodata); + } = 0 + /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ diff --git a/ld_script_modern.txt b/ld_script_modern.txt index 02e6014a37..b60a22171a 100644 --- a/ld_script_modern.txt +++ b/ld_script_modern.txt @@ -27,6 +27,7 @@ SECTIONS { /* .bss starts at 0x3000000 */ src/*.o(.bss); gflib/*.o(.bss); + data/*.o(.bss); *libc.a:*.o(.bss*); *libnosys.a:*.o(.bss*); @@ -47,7 +48,7 @@ SECTIONS { .text : ALIGN(4) { - src/crt0.o(.text*); + src/rom_header.o(.text*); src/*.o(.text*); gflib/*.o(.text*); asm/*.o(.text*); @@ -111,10 +112,10 @@ SECTIONS { src/libisagbprn.o(.rodata); } =0 - other_data : + multiboot_data : ALIGN(4) { - data/unknown_serial_data.o(.rodata); + data/multiboot_ereader.o(.rodata); data/multiboot_berry_glitch_fix.o(.rodata); data/multiboot_pokemon_colosseum.o(.rodata); } =0 diff --git a/sound/MPlayDef.s b/sound/MPlayDef.s index f5dd6484d9..95a788e85e 100644 --- a/sound/MPlayDef.s +++ b/sound/MPlayDef.s @@ -333,7 +333,7 @@ .equ v066, 66 @ .equ v067, 67 @ .equ v068, 68 @ - .equ v069, 79 @ + .equ v069, 69 @ .equ v070, 70 @ .equ v071, 71 @ .equ v072, 72 @ diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index 76e1d4c3ce..30eef3327c 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -386,6 +386,7 @@ gCryTable:: cry Cry_Rayquaza cry Cry_Jirachi cry Cry_Deoxys +.if P_NEW_POKEMON == TRUE cry Cry_Turtwig cry Cry_Grotle cry Cry_Torterra @@ -649,307 +650,314 @@ gCryTable:: cry Cry_Keldeo cry Cry_Meloetta cry Cry_Genesect - cry_uncomp Cry_Chespin - cry_uncomp Cry_Quilladin - cry_uncomp Cry_Chesnaught - cry_uncomp Cry_Fennekin - cry_uncomp Cry_Braixen - cry_uncomp Cry_Delphox - cry_uncomp Cry_Froakie - cry_uncomp Cry_Frogadier - cry_uncomp Cry_Greninja - cry_uncomp Cry_Bunnelby - cry_uncomp Cry_Diggersby - cry_uncomp Cry_Fletchling - cry_uncomp Cry_Fletchinder - cry_uncomp Cry_Talonflame - cry_uncomp Cry_Scatterbug - cry_uncomp Cry_Spewpa - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Litleo - cry_uncomp Cry_Pyroar - cry_uncomp Cry_Flabebe - cry_uncomp Cry_Floette - cry_uncomp Cry_Florges - cry_uncomp Cry_Skiddo - cry_uncomp Cry_Gogoat - cry_uncomp Cry_Pancham - cry_uncomp Cry_Pangoro - cry_uncomp Cry_Furfrou - cry_uncomp Cry_Espurr - cry_uncomp Cry_Meowstic - cry_uncomp Cry_Honedge - cry_uncomp Cry_Doublade - cry_uncomp Cry_Aegislash - cry_uncomp Cry_Spritzee - cry_uncomp Cry_Aromatisse - cry_uncomp Cry_Swirlix - cry_uncomp Cry_Slurpuff - cry_uncomp Cry_Inkay - cry_uncomp Cry_Malamar - cry_uncomp Cry_Binacle - cry_uncomp Cry_Barbaracle - cry_uncomp Cry_Skrelp - cry_uncomp Cry_Dragalge - cry_uncomp Cry_Clauncher - cry_uncomp Cry_Clawitzer - cry_uncomp Cry_Helioptile - cry_uncomp Cry_Heliolisk - cry_uncomp Cry_Tyrunt - cry_uncomp Cry_Tyrantrum - cry_uncomp Cry_Amaura - cry_uncomp Cry_Aurorus - cry_uncomp Cry_Sylveon - cry_uncomp Cry_Hawlucha - cry_uncomp Cry_Dedenne - cry_uncomp Cry_Carbink - cry_uncomp Cry_Goomy - cry_uncomp Cry_Sliggoo - cry_uncomp Cry_Goodra + cry Cry_Chespin + cry Cry_Quilladin + cry Cry_Chesnaught + cry Cry_Fennekin + cry Cry_Braixen + cry Cry_Delphox + cry Cry_Froakie + cry Cry_Frogadier + cry Cry_Greninja + cry Cry_Bunnelby + cry Cry_Diggersby + cry Cry_Fletchling + cry Cry_Fletchinder + cry Cry_Talonflame + cry Cry_Scatterbug + cry Cry_Spewpa + cry Cry_Vivillon + cry Cry_Litleo + cry Cry_Pyroar + cry Cry_Flabebe + cry Cry_Floette + cry Cry_Florges + cry Cry_Skiddo + cry Cry_Gogoat + cry Cry_Pancham + cry Cry_Pangoro + cry Cry_Furfrou + cry Cry_Espurr + cry Cry_Meowstic + cry Cry_Honedge + cry Cry_Doublade + cry Cry_Aegislash + cry Cry_Spritzee + cry Cry_Aromatisse + cry Cry_Swirlix + cry Cry_Slurpuff + cry Cry_Inkay + cry Cry_Malamar + cry Cry_Binacle + cry Cry_Barbaracle + cry Cry_Skrelp + cry Cry_Dragalge + cry Cry_Clauncher + cry Cry_Clawitzer + cry Cry_Helioptile + cry Cry_Heliolisk + cry Cry_Tyrunt + cry Cry_Tyrantrum + cry Cry_Amaura + cry Cry_Aurorus + cry Cry_Sylveon + cry Cry_Hawlucha + cry Cry_Dedenne + cry Cry_Carbink + cry Cry_Goomy + cry Cry_Sliggoo + cry Cry_Goodra cry_uncomp Cry_Klefki - cry_uncomp Cry_Phantump - cry_uncomp Cry_Trevenant - cry_uncomp Cry_Pumpkaboo - cry_uncomp Cry_Gourgeist - cry_uncomp Cry_Bergmite - cry_uncomp Cry_Avalugg - cry_uncomp Cry_Noibat - cry_uncomp Cry_Noivern - cry_uncomp Cry_Xerneas - cry_uncomp Cry_Yveltal - cry_uncomp Cry_Zygarde - cry_uncomp Cry_Diancie - cry_uncomp Cry_Hoopa - cry_uncomp Cry_Volcanion - cry_uncomp Cry_Rowlet - cry_uncomp Cry_Dartrix - cry_uncomp Cry_Decidueye - cry_uncomp Cry_Litten - cry_uncomp Cry_Torracat - cry_uncomp Cry_Incineroar - cry_uncomp Cry_Popplio - cry_uncomp Cry_Brionne - cry_uncomp Cry_Primarina - cry_uncomp Cry_Pikipek - cry_uncomp Cry_Trumbeak - cry_uncomp Cry_Toucannon - cry_uncomp Cry_Yungoos - cry_uncomp Cry_Gumshoos - cry_uncomp Cry_Grubbin - cry_uncomp Cry_Charjabug - cry_uncomp Cry_Vikavolt - cry_uncomp Cry_Crabrawler - cry_uncomp Cry_Crabominable - cry_uncomp Cry_Oricorio - cry_uncomp Cry_Cutiefly - cry_uncomp Cry_Ribombee - cry_uncomp Cry_Rockruff - cry_uncomp Cry_Lycanroc - cry_uncomp Cry_Wishiwashi - cry_uncomp Cry_Mareanie - cry_uncomp Cry_Toxapex - cry_uncomp Cry_Mudbray - cry_uncomp Cry_Mudsdale - cry_uncomp Cry_Dewpider - cry_uncomp Cry_Araquanid - cry_uncomp Cry_Fomantis - cry_uncomp Cry_Lurantis - cry_uncomp Cry_Morelull - cry_uncomp Cry_Shiinotic - cry_uncomp Cry_Salandit - cry_uncomp Cry_Salazzle - cry_uncomp Cry_Stufful - cry_uncomp Cry_Bewear - cry_uncomp Cry_Bounsweet - cry_uncomp Cry_Steenee - cry_uncomp Cry_Tsareena - cry_uncomp Cry_Comfey - cry_uncomp Cry_Oranguru - cry_uncomp Cry_Passimian - cry_uncomp Cry_Wimpod - cry_uncomp Cry_Golisopod - cry_uncomp Cry_Sandygast - cry_uncomp Cry_Palossand - cry_uncomp Cry_Pyukumuku - cry_uncomp Cry_TypeNull - cry_uncomp Cry_Silvally - cry_uncomp Cry_Minior - cry_uncomp Cry_Komala - cry_uncomp Cry_Turtonator - cry_uncomp Cry_Togedemaru - cry_uncomp Cry_Mimikyu - cry_uncomp Cry_Bruxish - cry_uncomp Cry_Drampa - cry_uncomp Cry_Dhelmise - cry_uncomp Cry_Jangmoo - cry_uncomp Cry_Hakamoo - cry_uncomp Cry_Kommoo - cry_uncomp Cry_TapuKoko - cry_uncomp Cry_TapuLele - cry_uncomp Cry_TapuBulu - cry_uncomp Cry_TapuFini - cry_uncomp Cry_Cosmog - cry_uncomp Cry_Cosmoem - cry_uncomp Cry_Solgaleo - cry_uncomp Cry_Lunala - cry_uncomp Cry_Nihilego - cry_uncomp Cry_Buzzwole - cry_uncomp Cry_Pheromosa - cry_uncomp Cry_Xurkitree - cry_uncomp Cry_Celesteela - cry_uncomp Cry_Kartana - cry_uncomp Cry_Guzzlord - cry_uncomp Cry_Necrozma - cry_uncomp Cry_Magearna - cry_uncomp Cry_Marshadow - cry_uncomp Cry_Poipole - cry_uncomp Cry_Naganadel - cry_uncomp Cry_Stakataka - cry_uncomp Cry_Blacephalon - cry_uncomp Cry_Zeraora - cry_uncomp Cry_Meltan - cry_uncomp Cry_Melmetal - cry_uncomp Cry_Grookey - cry_uncomp Cry_Thwackey - cry_uncomp Cry_Rillaboom - cry_uncomp Cry_Scorbunny - cry_uncomp Cry_Raboot - cry_uncomp Cry_Cinderace - cry_uncomp Cry_Sobble - cry_uncomp Cry_Drizzile - cry_uncomp Cry_Inteleon - cry_uncomp Cry_Skwovet - cry_uncomp Cry_Greedent - cry_uncomp Cry_Rookidee - cry_uncomp Cry_Corvisquire - cry_uncomp Cry_Corviknight - cry_uncomp Cry_Blipbug - cry_uncomp Cry_Dottler - cry_uncomp Cry_Orbeetle - cry_uncomp Cry_Nickit - cry_uncomp Cry_Thievul - cry_uncomp Cry_Gossifleur - cry_uncomp Cry_Eldegoss - cry_uncomp Cry_Wooloo - cry_uncomp Cry_Dubwool - cry_uncomp Cry_Chewtle - cry_uncomp Cry_Drednaw - cry_uncomp Cry_Yamper - cry_uncomp Cry_Boltund - cry_uncomp Cry_Rolycoly - cry_uncomp Cry_Carkol - cry_uncomp Cry_Coalossal - cry_uncomp Cry_Applin - cry_uncomp Cry_Flapple - cry_uncomp Cry_Appletun - cry_uncomp Cry_Silicobra - cry_uncomp Cry_Sandaconda - cry_uncomp Cry_Cramorant - cry_uncomp Cry_Arrokuda - cry_uncomp Cry_Barraskewda - cry_uncomp Cry_Toxel - cry_uncomp Cry_Toxtricity - cry_uncomp Cry_Sizzlipede - cry_uncomp Cry_Centiskorch - cry_uncomp Cry_Clobbopus - cry_uncomp Cry_Grapploct - cry_uncomp Cry_Sinistea - cry_uncomp Cry_Polteageist - cry_uncomp Cry_Hatenna - cry_uncomp Cry_Hattrem - cry_uncomp Cry_Hatterene - cry_uncomp Cry_Impidimp - cry_uncomp Cry_Morgrem - cry_uncomp Cry_Grimmsnarl - cry_uncomp Cry_Obstagoon - cry_uncomp Cry_Perrserker - cry_uncomp Cry_Cursola - cry_uncomp Cry_Sirfetchd - cry_uncomp Cry_MrRime - cry_uncomp Cry_Runerigus - cry_uncomp Cry_Milcery - cry_uncomp Cry_Alcremie - cry_uncomp Cry_Falinks - cry_uncomp Cry_Pincurchin - cry_uncomp Cry_Snom - cry_uncomp Cry_Frosmoth - cry_uncomp Cry_Stonjourner - cry_uncomp Cry_Eiscue - cry_uncomp Cry_Indeedee - cry_uncomp Cry_Morpeko - cry_uncomp Cry_Cufant - cry_uncomp Cry_Copperajah - cry_uncomp Cry_Dracozolt - cry_uncomp Cry_Arctozolt - cry_uncomp Cry_Dracovish - cry_uncomp Cry_Arctovish - cry_uncomp Cry_Duraludon - cry_uncomp Cry_Dreepy - cry_uncomp Cry_Drakloak - cry_uncomp Cry_Dragapult - cry_uncomp Cry_Zacian - cry_uncomp Cry_Zamazenta - cry_uncomp Cry_Eternatus - cry_uncomp Cry_Kubfu - cry_uncomp Cry_Urshifu - cry_uncomp Cry_Zarude - cry_uncomp Cry_Regieleki - cry_uncomp Cry_Regidrago - cry_uncomp Cry_Glastrier - cry_uncomp Cry_Spectrier - cry_uncomp Cry_Calyrex + cry Cry_Phantump + cry Cry_Trevenant + cry Cry_Pumpkaboo + cry Cry_Gourgeist + cry Cry_Bergmite + cry Cry_Avalugg + cry Cry_Noibat + cry Cry_Noivern + cry Cry_Xerneas + cry Cry_Yveltal + cry Cry_Zygarde + cry Cry_Diancie + cry Cry_Hoopa + cry Cry_Volcanion + cry Cry_Rowlet + cry Cry_Dartrix + cry Cry_Decidueye + cry Cry_Litten + cry Cry_Torracat + cry Cry_Incineroar + cry Cry_Popplio + cry Cry_Brionne + cry Cry_Primarina + cry Cry_Pikipek + cry Cry_Trumbeak + cry Cry_Toucannon + cry Cry_Yungoos + cry Cry_Gumshoos + cry Cry_Grubbin + cry Cry_Charjabug + cry Cry_Vikavolt + cry Cry_Crabrawler + cry Cry_Crabominable + cry Cry_Oricorio + cry Cry_Cutiefly + cry Cry_Ribombee + cry Cry_Rockruff + cry Cry_Lycanroc + cry Cry_Wishiwashi + cry Cry_Mareanie + cry Cry_Toxapex + cry Cry_Mudbray + cry Cry_Mudsdale + cry Cry_Dewpider + cry Cry_Araquanid + cry Cry_Fomantis + cry Cry_Lurantis + cry Cry_Morelull + cry Cry_Shiinotic + cry Cry_Salandit + cry Cry_Salazzle + cry Cry_Stufful + cry Cry_Bewear + cry Cry_Bounsweet + cry Cry_Steenee + cry Cry_Tsareena + cry Cry_Comfey + cry Cry_Oranguru + cry Cry_Passimian + cry Cry_Wimpod + cry Cry_Golisopod + cry Cry_Sandygast + cry Cry_Palossand + cry Cry_Pyukumuku + cry Cry_TypeNull + cry Cry_Silvally + cry Cry_Minior + cry Cry_Komala + cry Cry_Turtonator + cry Cry_Togedemaru + cry Cry_Mimikyu + cry Cry_Bruxish + cry Cry_Drampa + cry Cry_Dhelmise + cry Cry_Jangmoo + cry Cry_Hakamoo + cry Cry_Kommoo + cry Cry_TapuKoko + cry Cry_TapuLele + cry Cry_TapuBulu + cry Cry_TapuFini + cry Cry_Cosmog + cry Cry_Cosmoem + cry Cry_Solgaleo + cry Cry_Lunala + cry Cry_Nihilego + cry Cry_Buzzwole + cry Cry_Pheromosa + cry Cry_Xurkitree + cry Cry_Celesteela + cry Cry_Kartana + cry Cry_Guzzlord + cry Cry_Necrozma + cry Cry_Magearna + cry Cry_Marshadow + cry Cry_Poipole + cry Cry_Naganadel + cry Cry_Stakataka + cry Cry_Blacephalon + cry Cry_Zeraora + cry Cry_Meltan + cry Cry_Melmetal + cry Cry_Grookey + cry Cry_Thwackey + cry Cry_Rillaboom + cry Cry_Scorbunny + cry Cry_Raboot + cry Cry_Cinderace + cry Cry_Sobble + cry Cry_Drizzile + cry Cry_Inteleon + cry Cry_Skwovet + cry Cry_Greedent + cry Cry_Rookidee + cry Cry_Corvisquire + cry Cry_Corviknight + cry Cry_Blipbug + cry Cry_Dottler + cry Cry_Orbeetle + cry Cry_Nickit + cry Cry_Thievul + cry Cry_Gossifleur + cry Cry_Eldegoss + cry Cry_Wooloo + cry Cry_Dubwool + cry Cry_Chewtle + cry Cry_Drednaw + cry Cry_Yamper + cry Cry_Boltund + cry Cry_Rolycoly + cry Cry_Carkol + cry Cry_Coalossal + cry Cry_Applin + cry Cry_Flapple + cry Cry_Appletun + cry Cry_Silicobra + cry Cry_Sandaconda + cry Cry_Cramorant + cry Cry_Arrokuda + cry Cry_Barraskewda + cry Cry_Toxel + cry Cry_Toxtricity + cry Cry_Sizzlipede + cry Cry_Centiskorch + cry Cry_Clobbopus + cry Cry_Grapploct + cry Cry_Sinistea + cry Cry_Polteageist + cry Cry_Hatenna + cry Cry_Hattrem + cry Cry_Hatterene + cry Cry_Impidimp + cry Cry_Morgrem + cry Cry_Grimmsnarl + cry Cry_Obstagoon + cry Cry_Perrserker + cry Cry_Cursola + cry Cry_Sirfetchd + cry Cry_MrRime + cry Cry_Runerigus + cry Cry_Milcery + cry Cry_Alcremie + cry Cry_Falinks + cry Cry_Pincurchin + cry Cry_Snom + cry Cry_Frosmoth + cry Cry_Stonjourner + cry Cry_Eiscue + cry Cry_Indeedee + cry Cry_Morpeko + cry Cry_Cufant + cry Cry_Copperajah + cry Cry_Dracozolt + cry Cry_Arctozolt + cry Cry_Dracovish + cry Cry_Arctovish + cry Cry_Duraludon + cry Cry_Dreepy + cry Cry_Drakloak + cry Cry_Dragapult + cry Cry_Zacian + cry Cry_Zamazenta + cry Cry_Eternatus + cry Cry_Kubfu + cry Cry_Urshifu + cry Cry_Zarude + cry Cry_Regieleki + cry Cry_Regidrago + cry Cry_Glastrier + cry Cry_Spectrier + cry Cry_Calyrex + cry Cry_Bulbasaur //Cry_Wyrdeer + cry Cry_Bulbasaur //Cry_Kleavor + cry Cry_Bulbasaur //Cry_Ursaluna + cry Cry_Bulbasaur //Cry_Basculegion + cry Cry_Bulbasaur //Cry_Sneasler + cry Cry_Bulbasaur //Cry_Overqwil + cry Cry_Bulbasaur //Cry_Enamorus @ Megas - cry_uncomp Cry_VenusaurMega - cry_uncomp Cry_CharizardMegaX - cry_uncomp Cry_CharizardMegaY - cry_uncomp Cry_BlastoiseMega - cry_uncomp Cry_BeedrillMega - cry_uncomp Cry_PidgeotMega - cry_uncomp Cry_AlakazamMega - cry_uncomp Cry_SlowbroMega - cry_uncomp Cry_GengarMega - cry_uncomp Cry_KangaskhanMega - cry_uncomp Cry_PinsirMega - cry_uncomp Cry_GyaradosMega - cry_uncomp Cry_AerodactylMega - cry_uncomp Cry_MewtwoMegaX - cry_uncomp Cry_MewtwoMegaY - cry_uncomp Cry_AmpharosMega - cry_uncomp Cry_SteelixMega - cry_uncomp Cry_ScizorMega - cry_uncomp Cry_HeracrossMega - cry_uncomp Cry_HoundoomMega - cry_uncomp Cry_TyranitarMega - cry_uncomp Cry_SceptileMega - cry_uncomp Cry_BlazikenMega - cry_uncomp Cry_SwampertMega - cry_uncomp Cry_GardevoirMega - cry_uncomp Cry_SableyeMega - cry_uncomp Cry_MawileMega - cry_uncomp Cry_AggronMega - cry_uncomp Cry_MedichamMega - cry_uncomp Cry_ManectricMega - cry_uncomp Cry_SharpedoMega - cry_uncomp Cry_CameruptMega - cry_uncomp Cry_AltariaMega - cry_uncomp Cry_BanetteMega - cry_uncomp Cry_AbsolMega - cry_uncomp Cry_GlalieMega - cry_uncomp Cry_SalamenceMega - cry_uncomp Cry_MetagrossMega - cry_uncomp Cry_LatiasMega - cry_uncomp Cry_LatiosMega - cry_uncomp Cry_LopunnyMega - cry_uncomp Cry_GarchompMega - cry_uncomp Cry_LucarioMega - cry_uncomp Cry_AbomasnowMega - cry_uncomp Cry_GalladeMega - cry_uncomp Cry_AudinoMega - cry_uncomp Cry_DiancieMega + cry Cry_VenusaurMega + cry Cry_CharizardMegaX + cry Cry_CharizardMegaY + cry Cry_BlastoiseMega + cry Cry_BeedrillMega + cry Cry_PidgeotMega + cry Cry_AlakazamMega + cry Cry_SlowbroMega + cry Cry_GengarMega + cry Cry_KangaskhanMega + cry Cry_PinsirMega + cry Cry_GyaradosMega + cry Cry_AerodactylMega + cry Cry_MewtwoMegaX + cry Cry_MewtwoMegaY + cry Cry_AmpharosMega + cry Cry_SteelixMega + cry Cry_ScizorMega + cry Cry_HeracrossMega + cry Cry_HoundoomMega + cry Cry_TyranitarMega + cry Cry_SceptileMega + cry Cry_BlazikenMega + cry Cry_SwampertMega + cry Cry_GardevoirMega + cry Cry_SableyeMega + cry Cry_MawileMega + cry Cry_AggronMega + cry Cry_MedichamMega + cry Cry_ManectricMega + cry Cry_SharpedoMega + cry Cry_CameruptMega + cry Cry_AltariaMega + cry Cry_BanetteMega + cry Cry_AbsolMega + cry Cry_GlalieMega + cry Cry_SalamenceMega + cry Cry_MetagrossMega + cry Cry_LatiasMega + cry Cry_LatiosMega + cry Cry_LopunnyMega + cry Cry_GarchompMega + cry Cry_LucarioMega + cry Cry_AbomasnowMega + cry Cry_GalladeMega + cry Cry_AudinoMega + cry Cry_DiancieMega @ Special Mega + Primals - cry_uncomp Cry_RayquazaMega - cry_uncomp Cry_KyogrePrimal - cry_uncomp Cry_GroudonPrimal + cry Cry_RayquazaMega + cry Cry_KyogrePrimal + cry Cry_GroudonPrimal @ Alolan Forms cry Cry_Rattata cry Cry_Raticate @@ -973,7 +981,7 @@ gCryTable:: cry Cry_Meowth cry Cry_Ponyta cry Cry_Rapidash - cry_uncomp Cry_SlowpokeGalarian + cry Cry_SlowpokeGalarian cry Cry_Slowbro cry Cry_Farfetchd cry Cry_Weezing @@ -989,6 +997,23 @@ gCryTable:: cry Cry_Darmanitan cry Cry_Yamask cry Cry_Stunfisk + @ Hisuian Forms + cry Cry_Growlithe + cry Cry_Arcanine + cry Cry_Voltorb + cry Cry_Electrode + cry Cry_Typhlosion + cry Cry_Qwilfish + cry Cry_Sneasel + cry Cry_Samurott + cry Cry_Lilligant + cry Cry_Zorua + cry Cry_Zoroark + cry Cry_Braviary + cry Cry_Sliggoo + cry Cry_Goodra + cry Cry_Avalugg + cry Cry_Decidueye @ Misc Forms @ Cosplay Pikachu cry Cry_Pikachu @@ -1062,7 +1087,9 @@ gCryTable:: cry Cry_Rotom cry Cry_Rotom cry Cry_Rotom - @ Giratina + @ Origin Forme + cry Cry_Dialga + cry Cry_Palkia cry Cry_Giratina @ Shaymin cry Cry_ShayminSky @@ -1086,6 +1113,7 @@ gCryTable:: cry Cry_Arceus @ Basculin cry Cry_Basculin + cry Cry_Basculin @ Darmanitan cry Cry_Darmanitan cry Cry_Darmanitan @@ -1114,1434 +1142,1539 @@ gCryTable:: cry Cry_Genesect cry Cry_Genesect @ Greninja - cry_uncomp Cry_Greninja - cry_uncomp Cry_Greninja + cry Cry_Greninja + cry Cry_Greninja @ Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon - cry_uncomp Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon + cry Cry_Vivillon @ Flabébé - cry_uncomp Cry_Flabebe - cry_uncomp Cry_Flabebe - cry_uncomp Cry_Flabebe - cry_uncomp Cry_Flabebe + cry Cry_Flabebe + cry Cry_Flabebe + cry Cry_Flabebe + cry Cry_Flabebe @ Floette - cry_uncomp Cry_Floette - cry_uncomp Cry_Floette - cry_uncomp Cry_Floette - cry_uncomp Cry_Floette - cry_uncomp Cry_FloetteEternalFlower + cry Cry_Floette + cry Cry_Floette + cry Cry_Floette + cry Cry_Floette + cry Cry_FloetteEternalFlower @ Florges - cry_uncomp Cry_Florges - cry_uncomp Cry_Florges - cry_uncomp Cry_Florges - cry_uncomp Cry_Florges + cry Cry_Florges + cry Cry_Florges + cry Cry_Florges + cry Cry_Florges @ Furfrou - cry_uncomp Cry_Furfrou - cry_uncomp Cry_Furfrou - cry_uncomp Cry_Furfrou - cry_uncomp Cry_Furfrou - cry_uncomp Cry_Furfrou - cry_uncomp Cry_Furfrou - cry_uncomp Cry_Furfrou - cry_uncomp Cry_Furfrou - cry_uncomp Cry_Furfrou + cry Cry_Furfrou + cry Cry_Furfrou + cry Cry_Furfrou + cry Cry_Furfrou + cry Cry_Furfrou + cry Cry_Furfrou + cry Cry_Furfrou + cry Cry_Furfrou + cry Cry_Furfrou @ Meowstic - cry_uncomp Cry_Meowstic + cry Cry_Meowstic @ Aegislash - cry_uncomp Cry_Aegislash + cry Cry_Aegislash @ Pumpkaboo - cry_uncomp Cry_Pumpkaboo - cry_uncomp Cry_Pumpkaboo - cry_uncomp Cry_PumpkabooSuper + cry Cry_Pumpkaboo + cry Cry_Pumpkaboo + cry Cry_PumpkabooSuper @ Gourgeist - cry_uncomp Cry_Gourgeist - cry_uncomp Cry_Gourgeist - cry_uncomp Cry_GourgeistSuper + cry Cry_Gourgeist + cry Cry_Gourgeist + cry Cry_GourgeistSuper @ Xerneas - cry_uncomp Cry_Xerneas + cry Cry_Xerneas @ Zygarde - cry_uncomp Cry_Zygarde10 - cry_uncomp Cry_Zygarde10 - cry_uncomp Cry_Zygarde - cry_uncomp Cry_ZygardeComplete + cry Cry_Zygarde10 + cry Cry_Zygarde10 + cry Cry_Zygarde + cry Cry_ZygardeComplete @ Hoopa - cry_uncomp Cry_HoopaUnbound + cry Cry_HoopaUnbound @ Oricorio - cry_uncomp Cry_OricorioPomPom - cry_uncomp Cry_OricorioPau - cry_uncomp Cry_OricorioSensu + cry Cry_OricorioPomPom + cry Cry_OricorioPau + cry Cry_OricorioSensu @ Rockruff - cry_uncomp Cry_Rockruff + cry Cry_Rockruff @ Lycanroc - cry_uncomp Cry_LycanrocMidnight - cry_uncomp Cry_LycanrocDusk + cry Cry_LycanrocMidnight + cry Cry_LycanrocDusk @ Wishiwashi - cry_uncomp Cry_WishiwashiSchool + cry Cry_WishiwashiSchool @ Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally - cry_uncomp Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally + cry Cry_Silvally @ Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior - cry_uncomp Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior + cry Cry_Minior @ Mimikyu - cry_uncomp Cry_Mimikyu + cry Cry_Mimikyu @ Necrozma - cry_uncomp Cry_NecrozmaDuskMane - cry_uncomp Cry_NecrozmaDawnWings - cry_uncomp Cry_NecrozmaUltra + cry Cry_NecrozmaDuskMane + cry Cry_NecrozmaDawnWings + cry Cry_NecrozmaUltra @ Magearna - cry_uncomp Cry_Magearna + cry Cry_Magearna @ Cramorant - cry_uncomp Cry_Cramorant - cry_uncomp Cry_Cramorant + cry Cry_Cramorant + cry Cry_Cramorant @ Toxtricity - cry_uncomp Cry_ToxtricityLowKey + cry Cry_ToxtricityLowKey @ Sinistea - cry_uncomp Cry_Sinistea + cry Cry_Sinistea @ Polteageist - cry_uncomp Cry_Polteageist + cry Cry_Polteageist @ Alcremie - cry_uncomp Cry_Alcremie - cry_uncomp Cry_Alcremie - cry_uncomp Cry_Alcremie - cry_uncomp Cry_Alcremie - cry_uncomp Cry_Alcremie - cry_uncomp Cry_Alcremie - cry_uncomp Cry_Alcremie - cry_uncomp Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie @ Eiscue - cry_uncomp Cry_EiscueNoiceFace + cry Cry_EiscueNoiceFace @ Indeedee - cry_uncomp Cry_IndeedeeFemale + cry Cry_IndeedeeFemale @ Morpeko - cry_uncomp Cry_MorpekoHangry + cry Cry_MorpekoHangry @ Zacian - cry_uncomp Cry_ZacianCrownedSword + cry Cry_ZacianCrownedSword @ Zamazenta - cry_uncomp Cry_ZamazentaCrownedShield + cry Cry_ZamazentaCrownedShield @ Eternatus - cry_uncomp Cry_EternatusEternamax + cry Cry_EternatusEternamax @ Urshifu - cry_uncomp Cry_UrshifuRapidStrikeStyle + cry Cry_UrshifuRapidStrikeStyle @ Zarude - cry_uncomp Cry_Zarude + cry Cry_Zarude @ Calyrex - cry_uncomp Cry_CalyrexIceRider - cry_uncomp Cry_CalyrexShadowRider + cry Cry_CalyrexIceRider + cry Cry_CalyrexShadowRider +.else + @ Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + @ Castform + cry Cry_Castform + cry Cry_Castform + cry Cry_Castform + @ Deoxys + cry Cry_Deoxys + cry Cry_Deoxys + cry Cry_Deoxys +.endif .align 2 -gCryTable2:: - cry2 Cry_Bulbasaur - cry2 Cry_Ivysaur - cry2 Cry_Venusaur - cry2 Cry_Charmander - cry2 Cry_Charmeleon - cry2 Cry_Charizard - cry2 Cry_Squirtle - cry2 Cry_Wartortle - cry2 Cry_Blastoise - cry2 Cry_Caterpie - cry2 Cry_Metapod - cry2 Cry_Butterfree - cry2 Cry_Weedle - cry2 Cry_Kakuna - cry2 Cry_Beedrill - cry2 Cry_Pidgey - cry2 Cry_Pidgeotto - cry2 Cry_Pidgeot - cry2 Cry_Rattata - cry2 Cry_Raticate - cry2 Cry_Spearow - cry2 Cry_Fearow - cry2 Cry_Ekans - cry2 Cry_Arbok - cry2 Cry_Pikachu - cry2 Cry_Raichu - cry2 Cry_Sandshrew - cry2 Cry_Sandslash - cry2 Cry_NidoranF - cry2 Cry_Nidorina - cry2 Cry_Nidoqueen - cry2 Cry_NidoranM - cry2 Cry_Nidorino - cry2 Cry_Nidoking - cry2 Cry_Clefairy - cry2 Cry_Clefable - cry2 Cry_Vulpix - cry2 Cry_Ninetales - cry2 Cry_Jigglypuff - cry2 Cry_Wigglytuff - cry2 Cry_Zubat - cry2 Cry_Golbat - cry2 Cry_Oddish - cry2 Cry_Gloom - cry2 Cry_Vileplume - cry2 Cry_Paras - cry2 Cry_Parasect - cry2 Cry_Venonat - cry2 Cry_Venomoth - cry2 Cry_Diglett - cry2 Cry_Dugtrio - cry2 Cry_Meowth - cry2 Cry_Persian - cry2 Cry_Psyduck - cry2 Cry_Golduck - cry2 Cry_Mankey - cry2 Cry_Primeape - cry2 Cry_Growlithe - cry2 Cry_Arcanine - cry2 Cry_Poliwag - cry2 Cry_Poliwhirl - cry2 Cry_Poliwrath - cry2 Cry_Abra - cry2 Cry_Kadabra - cry2 Cry_Alakazam - cry2 Cry_Machop - cry2 Cry_Machoke - cry2 Cry_Machamp - cry2 Cry_Bellsprout - cry2 Cry_Weepinbell - cry2 Cry_Victreebel - cry2 Cry_Tentacool - cry2 Cry_Tentacruel - cry2 Cry_Geodude - cry2 Cry_Graveler - cry2 Cry_Golem - cry2 Cry_Ponyta - cry2 Cry_Rapidash - cry2 Cry_Slowpoke - cry2 Cry_Slowbro - cry2 Cry_Magnemite - cry2 Cry_Magneton - cry2 Cry_Farfetchd - cry2 Cry_Doduo - cry2 Cry_Dodrio - cry2 Cry_Seel - cry2 Cry_Dewgong - cry2 Cry_Grimer - cry2 Cry_Muk - cry2 Cry_Shellder - cry2 Cry_Cloyster - cry2 Cry_Gastly - cry2 Cry_Haunter - cry2 Cry_Gengar - cry2 Cry_Onix - cry2 Cry_Drowzee - cry2 Cry_Hypno - cry2 Cry_Krabby - cry2 Cry_Kingler - cry2 Cry_Voltorb - cry2 Cry_Electrode - cry2 Cry_Exeggcute - cry2 Cry_Exeggutor - cry2 Cry_Cubone - cry2 Cry_Marowak - cry2 Cry_Hitmonlee - cry2 Cry_Hitmonchan - cry2 Cry_Lickitung - cry2 Cry_Koffing - cry2 Cry_Weezing - cry2 Cry_Rhyhorn - cry2 Cry_Rhydon - cry2 Cry_Chansey - cry2 Cry_Tangela - cry2 Cry_Kangaskhan - cry2 Cry_Horsea - cry2 Cry_Seadra - cry2 Cry_Goldeen - cry2 Cry_Seaking - cry2 Cry_Staryu - cry2 Cry_Starmie - cry2 Cry_MrMime - cry2 Cry_Scyther - cry2 Cry_Jynx - cry2 Cry_Electabuzz - cry2 Cry_Magmar - cry2 Cry_Pinsir - cry2 Cry_Tauros - cry2 Cry_Magikarp - cry2 Cry_Gyarados - cry2 Cry_Lapras - cry2 Cry_Ditto - cry2 Cry_Eevee - cry2 Cry_Vaporeon - cry2 Cry_Jolteon - cry2 Cry_Flareon - cry2 Cry_Porygon - cry2 Cry_Omanyte - cry2 Cry_Omastar - cry2 Cry_Kabuto - cry2 Cry_Kabutops - cry2 Cry_Aerodactyl - cry2 Cry_Snorlax - cry2 Cry_Articuno - cry2 Cry_Zapdos - cry2 Cry_Moltres - cry2 Cry_Dratini - cry2 Cry_Dragonair - cry2 Cry_Dragonite - cry2 Cry_Mewtwo - cry2 Cry_Mew - cry2 Cry_Chikorita - cry2 Cry_Bayleef - cry2 Cry_Meganium - cry2 Cry_Cyndaquil - cry2 Cry_Quilava - cry2 Cry_Typhlosion - cry2 Cry_Totodile - cry2 Cry_Croconaw - cry2 Cry_Feraligatr - cry2 Cry_Sentret - cry2 Cry_Furret - cry2 Cry_Hoothoot - cry2 Cry_Noctowl - cry2 Cry_Ledyba - cry2 Cry_Ledian - cry2 Cry_Spinarak - cry2 Cry_Ariados - cry2 Cry_Crobat - cry2 Cry_Chinchou - cry2 Cry_Lanturn - cry2 Cry_Pichu - cry2 Cry_Cleffa - cry2 Cry_Igglybuff - cry2 Cry_Togepi - cry2 Cry_Togetic - cry2 Cry_Natu - cry2 Cry_Xatu - cry2 Cry_Mareep - cry2 Cry_Flaaffy - cry2 Cry_Ampharos - cry2 Cry_Bellossom - cry2 Cry_Marill - cry2 Cry_Azumarill - cry2 Cry_Sudowoodo - cry2 Cry_Politoed - cry2 Cry_Hoppip - cry2 Cry_Skiploom - cry2 Cry_Jumpluff - cry2 Cry_Aipom - cry2 Cry_Sunkern - cry2 Cry_Sunflora - cry2 Cry_Yanma - cry2 Cry_Wooper - cry2 Cry_Quagsire - cry2 Cry_Espeon - cry2 Cry_Umbreon - cry2 Cry_Murkrow - cry2 Cry_Slowking - cry2 Cry_Misdreavus - cry2 Cry_Unown - cry2 Cry_Wobbuffet - cry2 Cry_Girafarig - cry2 Cry_Pineco - cry2 Cry_Forretress - cry2 Cry_Dunsparce - cry2 Cry_Gligar - cry2 Cry_Steelix - cry2 Cry_Snubbull - cry2 Cry_Granbull - cry2 Cry_Qwilfish - cry2 Cry_Scizor - cry2 Cry_Shuckle - cry2 Cry_Heracross - cry2 Cry_Sneasel - cry2 Cry_Teddiursa - cry2 Cry_Ursaring - cry2 Cry_Slugma - cry2 Cry_Magcargo - cry2 Cry_Swinub - cry2 Cry_Piloswine - cry2 Cry_Corsola - cry2 Cry_Remoraid - cry2 Cry_Octillery - cry2 Cry_Delibird - cry2 Cry_Mantine - cry2 Cry_Skarmory - cry2 Cry_Houndour - cry2 Cry_Houndoom - cry2 Cry_Kingdra - cry2 Cry_Phanpy - cry2 Cry_Donphan - cry2 Cry_Porygon2 - cry2 Cry_Stantler - cry2 Cry_Smeargle - cry2 Cry_Tyrogue - cry2 Cry_Hitmontop - cry2 Cry_Smoochum - cry2 Cry_Elekid - cry2 Cry_Magby - cry2 Cry_Miltank - cry2 Cry_Blissey - cry2 Cry_Raikou - cry2 Cry_Entei - cry2 Cry_Suicune - cry2 Cry_Larvitar - cry2 Cry_Pupitar - cry2 Cry_Tyranitar - cry2 Cry_Lugia - cry2 Cry_HoOh - cry2 Cry_Celebi - cry2 Cry_Treecko - cry2 Cry_Grovyle - cry2 Cry_Sceptile - cry2 Cry_Torchic - cry2 Cry_Combusken - cry2 Cry_Blaziken - cry2 Cry_Mudkip - cry2 Cry_Marshtomp - cry2 Cry_Swampert - cry2 Cry_Poochyena - cry2 Cry_Mightyena - cry2 Cry_Zigzagoon - cry2 Cry_Linoone - cry2 Cry_Wurmple - cry2 Cry_Silcoon - cry2 Cry_Beautifly - cry2 Cry_Cascoon - cry2 Cry_Dustox - cry2 Cry_Lotad - cry2 Cry_Lombre - cry2 Cry_Ludicolo - cry2 Cry_Seedot - cry2 Cry_Nuzleaf - cry2 Cry_Shiftry - cry2 Cry_Taillow - cry2 Cry_Swellow - cry2 Cry_Wingull - cry2 Cry_Pelipper - cry2 Cry_Ralts - cry2 Cry_Kirlia - cry2 Cry_Gardevoir - cry2 Cry_Surskit - cry2 Cry_Masquerain - cry2 Cry_Shroomish - cry2 Cry_Breloom - cry2 Cry_Slakoth - cry2 Cry_Vigoroth - cry2 Cry_Slaking - cry2 Cry_Nincada - cry2 Cry_Ninjask - cry2 Cry_Shedinja - cry2 Cry_Whismur - cry2 Cry_Loudred - cry2 Cry_Exploud - cry2 Cry_Makuhita - cry2 Cry_Hariyama - cry2 Cry_Azurill - cry2 Cry_Nosepass - cry2 Cry_Skitty - cry2 Cry_Delcatty - cry2 Cry_Sableye - cry2 Cry_Mawile - cry2 Cry_Aron - cry2 Cry_Lairon - cry2 Cry_Aggron - cry2 Cry_Meditite - cry2 Cry_Medicham - cry2 Cry_Electrike - cry2 Cry_Manectric - cry2 Cry_Plusle - cry2 Cry_Minun - cry2 Cry_Volbeat - cry2 Cry_Illumise - cry2 Cry_Roselia - cry2 Cry_Gulpin - cry2 Cry_Swalot - cry2 Cry_Carvanha - cry2 Cry_Sharpedo - cry2 Cry_Wailmer - cry2 Cry_Wailord - cry2 Cry_Numel - cry2 Cry_Camerupt - cry2 Cry_Torkoal - cry2 Cry_Spoink - cry2 Cry_Grumpig - cry2 Cry_Spinda - cry2 Cry_Trapinch - cry2 Cry_Vibrava - cry2 Cry_Flygon - cry2 Cry_Cacnea - cry2 Cry_Cacturne - cry2 Cry_Swablu - cry2 Cry_Altaria - cry2 Cry_Zangoose - cry2 Cry_Seviper - cry2 Cry_Lunatone - cry2 Cry_Solrock - cry2 Cry_Barboach - cry2 Cry_Whiscash - cry2 Cry_Corphish - cry2 Cry_Crawdaunt - cry2 Cry_Baltoy - cry2 Cry_Claydol - cry2 Cry_Lileep - cry2 Cry_Cradily - cry2 Cry_Anorith - cry2 Cry_Armaldo - cry2 Cry_Feebas - cry2 Cry_Milotic - cry2 Cry_Castform - cry2 Cry_Kecleon - cry2 Cry_Shuppet - cry2 Cry_Banette - cry2 Cry_Duskull - cry2 Cry_Dusclops - cry2 Cry_Tropius - cry2 Cry_Chimecho - cry2 Cry_Absol - cry2 Cry_Wynaut - cry2 Cry_Snorunt - cry2 Cry_Glalie - cry2 Cry_Spheal - cry2 Cry_Sealeo - cry2 Cry_Walrein - cry2 Cry_Clamperl - cry2 Cry_Huntail - cry2 Cry_Gorebyss - cry2 Cry_Relicanth - cry2 Cry_Luvdisc - cry2 Cry_Bagon - cry2 Cry_Shelgon - cry2 Cry_Salamence - cry2 Cry_Beldum - cry2 Cry_Metang - cry2 Cry_Metagross - cry2 Cry_Regirock - cry2 Cry_Regice - cry2 Cry_Registeel - cry2 Cry_Latias - cry2 Cry_Latios - cry2 Cry_Kyogre - cry2 Cry_Groudon - cry2 Cry_Rayquaza - cry2 Cry_Jirachi - cry2 Cry_Deoxys - cry2 Cry_Turtwig - cry2 Cry_Grotle - cry2 Cry_Torterra - cry2 Cry_Chimchar - cry2 Cry_Monferno - cry2 Cry_Infernape - cry2 Cry_Piplup - cry2 Cry_Prinplup - cry2 Cry_Empoleon - cry2 Cry_Starly - cry2 Cry_Staravia - cry2 Cry_Staraptor - cry2 Cry_Bidoof - cry2 Cry_Bibarel - cry2 Cry_Kricketot - cry2 Cry_Kricketune - cry2 Cry_Shinx - cry2 Cry_Luxio - cry2 Cry_Luxray - cry2 Cry_Budew - cry2 Cry_Roserade - cry2 Cry_Cranidos - cry2 Cry_Rampardos - cry2 Cry_Shieldon - cry2 Cry_Bastiodon - cry2 Cry_Burmy - cry2 Cry_Wormadam - cry2 Cry_Mothim - cry2 Cry_Combee - cry2 Cry_Vespiquen - cry2 Cry_Pachirisu - cry2 Cry_Buizel - cry2 Cry_Floatzel - cry2 Cry_Cherubi - cry2 Cry_Cherrim - cry2 Cry_Shellos - cry2 Cry_Gastrodon - cry2 Cry_Ambipom - cry2 Cry_Drifloon - cry2 Cry_Drifblim - cry2 Cry_Buneary - cry2 Cry_Lopunny - cry2 Cry_Mismagius - cry2 Cry_Honchkrow - cry2 Cry_Glameow - cry2 Cry_Purugly - cry2 Cry_Chingling - cry2 Cry_Stunky - cry2 Cry_Skuntank - cry2 Cry_Bronzor - cry2 Cry_Bronzong - cry2 Cry_Bonsly - cry2 Cry_MimeJr - cry2 Cry_Happiny - cry2 Cry_Chatot - cry2 Cry_Spiritomb - cry2 Cry_Gible - cry2 Cry_Gabite - cry2 Cry_Garchomp - cry2 Cry_Munchlax - cry2 Cry_Riolu - cry2 Cry_Lucario - cry2 Cry_Hippopotas - cry2 Cry_Hippowdon - cry2 Cry_Skorupi - cry2 Cry_Drapion - cry2 Cry_Croagunk - cry2 Cry_Toxicroak - cry2 Cry_Carnivine - cry2 Cry_Finneon - cry2 Cry_Lumineon - cry2 Cry_Mantyke - cry2 Cry_Snover - cry2 Cry_Abomasnow - cry2 Cry_Weavile - cry2 Cry_Magnezone - cry2 Cry_Lickilicky - cry2 Cry_Rhyperior - cry2 Cry_Tangrowth - cry2 Cry_Electivire - cry2 Cry_Magmortar - cry2 Cry_Togekiss - cry2 Cry_Yanmega - cry2 Cry_Leafeon - cry2 Cry_Glaceon - cry2 Cry_Gliscor - cry2 Cry_Mamoswine - cry2 Cry_PorygonZ - cry2 Cry_Gallade - cry2 Cry_Probopass - cry2 Cry_Dusknoir - cry2 Cry_Froslass - cry2 Cry_Rotom - cry2 Cry_Uxie - cry2 Cry_Mesprit - cry2 Cry_Azelf - cry2 Cry_Dialga - cry2 Cry_Palkia - cry2 Cry_Heatran - cry2 Cry_Regigigas - cry2 Cry_Giratina - cry2 Cry_Cresselia - cry2 Cry_Phione - cry2 Cry_Manaphy - cry2 Cry_Darkrai - cry2 Cry_Shaymin - cry2 Cry_Arceus - cry2 Cry_Victini - cry2 Cry_Snivy - cry2 Cry_Servine - cry2 Cry_Serperior - cry2 Cry_Tepig - cry2 Cry_Pignite - cry2 Cry_Emboar - cry2 Cry_Oshawott - cry2 Cry_Dewott - cry2 Cry_Samurott - cry2 Cry_Patrat - cry2 Cry_Watchog - cry2 Cry_Lillipup - cry2 Cry_Herdier - cry2 Cry_Stoutland - cry2 Cry_Purrloin - cry2 Cry_Liepard - cry2 Cry_Pansage - cry2 Cry_Simisage - cry2 Cry_Pansear - cry2 Cry_Simisear - cry2 Cry_Panpour - cry2 Cry_Simipour - cry2 Cry_Munna - cry2 Cry_Musharna - cry2 Cry_Pidove - cry2 Cry_Tranquill - cry2 Cry_Unfezant - cry2 Cry_Blitzle - cry2 Cry_Zebstrika - cry2 Cry_Roggenrola - cry2 Cry_Boldore - cry2 Cry_Gigalith - cry2 Cry_Woobat - cry2 Cry_Swoobat - cry2 Cry_Drilbur - cry2 Cry_Excadrill - cry2 Cry_Audino - cry2 Cry_Timburr - cry2 Cry_Gurdurr - cry2 Cry_Conkeldurr - cry2 Cry_Tympole - cry2 Cry_Palpitoad - cry2 Cry_Seismitoad - cry2 Cry_Throh - cry2 Cry_Sawk - cry2 Cry_Sewaddle - cry2 Cry_Swadloon - cry2 Cry_Leavanny - cry2 Cry_Venipede - cry2 Cry_Whirlipede - cry2 Cry_Scolipede - cry2 Cry_Cottonee - cry2 Cry_Whimsicott - cry2 Cry_Petilil - cry2 Cry_Lilligant - cry2 Cry_Basculin - cry2 Cry_Sandile - cry2 Cry_Krokorok - cry2 Cry_Krookodile - cry2 Cry_Darumaka - cry2 Cry_Darmanitan - cry2 Cry_Maractus - cry2 Cry_Dwebble - cry2 Cry_Crustle - cry2 Cry_Scraggy - cry2 Cry_Scrafty - cry2 Cry_Sigilyph - cry2 Cry_Yamask - cry2 Cry_Cofagrigus - cry2 Cry_Tirtouga - cry2 Cry_Carracosta - cry2 Cry_Archen - cry2 Cry_Archeops - cry2 Cry_Trubbish - cry2 Cry_Garbodor - cry2 Cry_Zorua - cry2 Cry_Zoroark - cry2 Cry_Minccino - cry2 Cry_Cinccino - cry2 Cry_Gothita - cry2 Cry_Gothorita - cry2 Cry_Gothitelle - cry2 Cry_Solosis - cry2 Cry_Duosion - cry2 Cry_Reuniclus - cry2 Cry_Ducklett - cry2 Cry_Swanna - cry2 Cry_Vanillite - cry2 Cry_Vanillish - cry2 Cry_Vanilluxe - cry2 Cry_Deerling - cry2 Cry_Sawsbuck - cry2 Cry_Emolga - cry2 Cry_Karrablast - cry2 Cry_Escavalier - cry2 Cry_Foongus - cry2 Cry_Amoonguss - cry2 Cry_Frillish - cry2 Cry_Jellicent - cry2 Cry_Alomomola - cry2 Cry_Joltik - cry2 Cry_Galvantula - cry2 Cry_Ferroseed - cry2 Cry_Ferrothorn - cry2 Cry_Klink - cry2 Cry_Klang - cry2 Cry_Klinklang - cry2 Cry_Tynamo - cry2 Cry_Eelektrik - cry2 Cry_Eelektross - cry2 Cry_Elgyem - cry2 Cry_Beheeyem - cry2 Cry_Litwick - cry2 Cry_Lampent - cry2 Cry_Chandelure - cry2 Cry_Axew - cry2 Cry_Fraxure - cry2 Cry_Haxorus - cry2 Cry_Cubchoo - cry2 Cry_Beartic - cry2 Cry_Cryogonal - cry2 Cry_Shelmet - cry2 Cry_Accelgor - cry2 Cry_Stunfisk - cry2 Cry_Mienfoo - cry2 Cry_Mienshao - cry2 Cry_Druddigon - cry2 Cry_Golett - cry2 Cry_Golurk - cry2 Cry_Pawniard - cry2 Cry_Bisharp - cry2 Cry_Bouffalant - cry2 Cry_Rufflet - cry2 Cry_Braviary - cry2 Cry_Vullaby - cry2 Cry_Mandibuzz - cry2 Cry_Heatmor - cry2 Cry_Durant - cry2 Cry_Deino - cry2 Cry_Zweilous - cry2 Cry_Hydreigon - cry2 Cry_Larvesta - cry2 Cry_Volcarona - cry2 Cry_Cobalion - cry2 Cry_Terrakion - cry2 Cry_Virizion - cry2 Cry_Tornadus - cry2 Cry_Thundurus - cry2 Cry_Reshiram - cry2 Cry_Zekrom - cry2 Cry_Landorus - cry2 Cry_Kyurem - cry2 Cry_Keldeo - cry2 Cry_Meloetta - cry2 Cry_Genesect - cry2_uncomp Cry_Chespin - cry2_uncomp Cry_Quilladin - cry2_uncomp Cry_Chesnaught - cry2_uncomp Cry_Fennekin - cry2_uncomp Cry_Braixen - cry2_uncomp Cry_Delphox - cry2_uncomp Cry_Froakie - cry2_uncomp Cry_Frogadier - cry2_uncomp Cry_Greninja - cry2_uncomp Cry_Bunnelby - cry2_uncomp Cry_Diggersby - cry2_uncomp Cry_Fletchling - cry2_uncomp Cry_Fletchinder - cry2_uncomp Cry_Talonflame - cry2_uncomp Cry_Scatterbug - cry2_uncomp Cry_Spewpa - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Litleo - cry2_uncomp Cry_Pyroar - cry2_uncomp Cry_Flabebe - cry2_uncomp Cry_Floette - cry2_uncomp Cry_Florges - cry2_uncomp Cry_Skiddo - cry2_uncomp Cry_Gogoat - cry2_uncomp Cry_Pancham - cry2_uncomp Cry_Pangoro - cry2_uncomp Cry_Furfrou - cry2_uncomp Cry_Espurr - cry2_uncomp Cry_Meowstic - cry2_uncomp Cry_Honedge - cry2_uncomp Cry_Doublade - cry2_uncomp Cry_Aegislash - cry2_uncomp Cry_Spritzee - cry2_uncomp Cry_Aromatisse - cry2_uncomp Cry_Swirlix - cry2_uncomp Cry_Slurpuff - cry2_uncomp Cry_Inkay - cry2_uncomp Cry_Malamar - cry2_uncomp Cry_Binacle - cry2_uncomp Cry_Barbaracle - cry2_uncomp Cry_Skrelp - cry2_uncomp Cry_Dragalge - cry2_uncomp Cry_Clauncher - cry2_uncomp Cry_Clawitzer - cry2_uncomp Cry_Helioptile - cry2_uncomp Cry_Heliolisk - cry2_uncomp Cry_Tyrunt - cry2_uncomp Cry_Tyrantrum - cry2_uncomp Cry_Amaura - cry2_uncomp Cry_Aurorus - cry2_uncomp Cry_Sylveon - cry2_uncomp Cry_Hawlucha - cry2_uncomp Cry_Dedenne - cry2_uncomp Cry_Carbink - cry2_uncomp Cry_Goomy - cry2_uncomp Cry_Sliggoo - cry2_uncomp Cry_Goodra - cry2_uncomp Cry_Klefki - cry2_uncomp Cry_Phantump - cry2_uncomp Cry_Trevenant - cry2_uncomp Cry_Pumpkaboo - cry2_uncomp Cry_Gourgeist - cry2_uncomp Cry_Bergmite - cry2_uncomp Cry_Avalugg - cry2_uncomp Cry_Noibat - cry2_uncomp Cry_Noivern - cry2_uncomp Cry_Xerneas - cry2_uncomp Cry_Yveltal - cry2_uncomp Cry_Zygarde - cry2_uncomp Cry_Diancie - cry2_uncomp Cry_Hoopa - cry2_uncomp Cry_Volcanion - cry2_uncomp Cry_Rowlet - cry2_uncomp Cry_Dartrix - cry2_uncomp Cry_Decidueye - cry2_uncomp Cry_Litten - cry2_uncomp Cry_Torracat - cry2_uncomp Cry_Incineroar - cry2_uncomp Cry_Popplio - cry2_uncomp Cry_Brionne - cry2_uncomp Cry_Primarina - cry2_uncomp Cry_Pikipek - cry2_uncomp Cry_Trumbeak - cry2_uncomp Cry_Toucannon - cry2_uncomp Cry_Yungoos - cry2_uncomp Cry_Gumshoos - cry2_uncomp Cry_Grubbin - cry2_uncomp Cry_Charjabug - cry2_uncomp Cry_Vikavolt - cry2_uncomp Cry_Crabrawler - cry2_uncomp Cry_Crabominable - cry2_uncomp Cry_Oricorio - cry2_uncomp Cry_Cutiefly - cry2_uncomp Cry_Ribombee - cry2_uncomp Cry_Rockruff - cry2_uncomp Cry_Lycanroc - cry2_uncomp Cry_Wishiwashi - cry2_uncomp Cry_Mareanie - cry2_uncomp Cry_Toxapex - cry2_uncomp Cry_Mudbray - cry2_uncomp Cry_Mudsdale - cry2_uncomp Cry_Dewpider - cry2_uncomp Cry_Araquanid - cry2_uncomp Cry_Fomantis - cry2_uncomp Cry_Lurantis - cry2_uncomp Cry_Morelull - cry2_uncomp Cry_Shiinotic - cry2_uncomp Cry_Salandit - cry2_uncomp Cry_Salazzle - cry2_uncomp Cry_Stufful - cry2_uncomp Cry_Bewear - cry2_uncomp Cry_Bounsweet - cry2_uncomp Cry_Steenee - cry2_uncomp Cry_Tsareena - cry2_uncomp Cry_Comfey - cry2_uncomp Cry_Oranguru - cry2_uncomp Cry_Passimian - cry2_uncomp Cry_Wimpod - cry2_uncomp Cry_Golisopod - cry2_uncomp Cry_Sandygast - cry2_uncomp Cry_Palossand - cry2_uncomp Cry_Pyukumuku - cry2_uncomp Cry_TypeNull - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Komala - cry2_uncomp Cry_Turtonator - cry2_uncomp Cry_Togedemaru - cry2_uncomp Cry_Mimikyu - cry2_uncomp Cry_Bruxish - cry2_uncomp Cry_Drampa - cry2_uncomp Cry_Dhelmise - cry2_uncomp Cry_Jangmoo - cry2_uncomp Cry_Hakamoo - cry2_uncomp Cry_Kommoo - cry2_uncomp Cry_TapuKoko - cry2_uncomp Cry_TapuLele - cry2_uncomp Cry_TapuBulu - cry2_uncomp Cry_TapuFini - cry2_uncomp Cry_Cosmog - cry2_uncomp Cry_Cosmoem - cry2_uncomp Cry_Solgaleo - cry2_uncomp Cry_Lunala - cry2_uncomp Cry_Nihilego - cry2_uncomp Cry_Buzzwole - cry2_uncomp Cry_Pheromosa - cry2_uncomp Cry_Xurkitree - cry2_uncomp Cry_Celesteela - cry2_uncomp Cry_Kartana - cry2_uncomp Cry_Guzzlord - cry2_uncomp Cry_Necrozma - cry2_uncomp Cry_Magearna - cry2_uncomp Cry_Marshadow - cry2_uncomp Cry_Poipole - cry2_uncomp Cry_Naganadel - cry2_uncomp Cry_Stakataka - cry2_uncomp Cry_Blacephalon - cry2_uncomp Cry_Zeraora - cry2_uncomp Cry_Meltan - cry2_uncomp Cry_Melmetal - cry2_uncomp Cry_Grookey - cry2_uncomp Cry_Thwackey - cry2_uncomp Cry_Rillaboom - cry2_uncomp Cry_Scorbunny - cry2_uncomp Cry_Raboot - cry2_uncomp Cry_Cinderace - cry2_uncomp Cry_Sobble - cry2_uncomp Cry_Drizzile - cry2_uncomp Cry_Inteleon - cry2_uncomp Cry_Skwovet - cry2_uncomp Cry_Greedent - cry2_uncomp Cry_Rookidee - cry2_uncomp Cry_Corvisquire - cry2_uncomp Cry_Corviknight - cry2_uncomp Cry_Blipbug - cry2_uncomp Cry_Dottler - cry2_uncomp Cry_Orbeetle - cry2_uncomp Cry_Nickit - cry2_uncomp Cry_Thievul - cry2_uncomp Cry_Gossifleur - cry2_uncomp Cry_Eldegoss - cry2_uncomp Cry_Wooloo - cry2_uncomp Cry_Dubwool - cry2_uncomp Cry_Chewtle - cry2_uncomp Cry_Drednaw - cry2_uncomp Cry_Yamper - cry2_uncomp Cry_Boltund - cry2_uncomp Cry_Rolycoly - cry2_uncomp Cry_Carkol - cry2_uncomp Cry_Coalossal - cry2_uncomp Cry_Applin - cry2_uncomp Cry_Flapple - cry2_uncomp Cry_Appletun - cry2_uncomp Cry_Silicobra - cry2_uncomp Cry_Sandaconda - cry2_uncomp Cry_Cramorant - cry2_uncomp Cry_Arrokuda - cry2_uncomp Cry_Barraskewda - cry2_uncomp Cry_Toxel - cry2_uncomp Cry_Toxtricity - cry2_uncomp Cry_Sizzlipede - cry2_uncomp Cry_Centiskorch - cry2_uncomp Cry_Clobbopus - cry2_uncomp Cry_Grapploct - cry2_uncomp Cry_Sinistea - cry2_uncomp Cry_Polteageist - cry2_uncomp Cry_Hatenna - cry2_uncomp Cry_Hattrem - cry2_uncomp Cry_Hatterene - cry2_uncomp Cry_Impidimp - cry2_uncomp Cry_Morgrem - cry2_uncomp Cry_Grimmsnarl - cry2_uncomp Cry_Obstagoon - cry2_uncomp Cry_Perrserker - cry2_uncomp Cry_Cursola - cry2_uncomp Cry_Sirfetchd - cry2_uncomp Cry_MrRime - cry2_uncomp Cry_Runerigus - cry2_uncomp Cry_Milcery - cry2_uncomp Cry_Alcremie - cry2_uncomp Cry_Falinks - cry2_uncomp Cry_Pincurchin - cry2_uncomp Cry_Snom - cry2_uncomp Cry_Frosmoth - cry2_uncomp Cry_Stonjourner - cry2_uncomp Cry_Eiscue - cry2_uncomp Cry_Indeedee - cry2_uncomp Cry_Morpeko - cry2_uncomp Cry_Cufant - cry2_uncomp Cry_Copperajah - cry2_uncomp Cry_Dracozolt - cry2_uncomp Cry_Arctozolt - cry2_uncomp Cry_Dracovish - cry2_uncomp Cry_Arctovish - cry2_uncomp Cry_Duraludon - cry2_uncomp Cry_Dreepy - cry2_uncomp Cry_Drakloak - cry2_uncomp Cry_Dragapult - cry2_uncomp Cry_Zacian - cry2_uncomp Cry_Zamazenta - cry2_uncomp Cry_Eternatus - cry2_uncomp Cry_Kubfu - cry2_uncomp Cry_Urshifu - cry2_uncomp Cry_Zarude - cry2_uncomp Cry_Regieleki - cry2_uncomp Cry_Regidrago - cry2_uncomp Cry_Glastrier - cry2_uncomp Cry_Spectrier - cry2_uncomp Cry_Calyrex +gCryTable_Reverse:: + cry_reverse Cry_Bulbasaur + cry_reverse Cry_Ivysaur + cry_reverse Cry_Venusaur + cry_reverse Cry_Charmander + cry_reverse Cry_Charmeleon + cry_reverse Cry_Charizard + cry_reverse Cry_Squirtle + cry_reverse Cry_Wartortle + cry_reverse Cry_Blastoise + cry_reverse Cry_Caterpie + cry_reverse Cry_Metapod + cry_reverse Cry_Butterfree + cry_reverse Cry_Weedle + cry_reverse Cry_Kakuna + cry_reverse Cry_Beedrill + cry_reverse Cry_Pidgey + cry_reverse Cry_Pidgeotto + cry_reverse Cry_Pidgeot + cry_reverse Cry_Rattata + cry_reverse Cry_Raticate + cry_reverse Cry_Spearow + cry_reverse Cry_Fearow + cry_reverse Cry_Ekans + cry_reverse Cry_Arbok + cry_reverse Cry_Pikachu + cry_reverse Cry_Raichu + cry_reverse Cry_Sandshrew + cry_reverse Cry_Sandslash + cry_reverse Cry_NidoranF + cry_reverse Cry_Nidorina + cry_reverse Cry_Nidoqueen + cry_reverse Cry_NidoranM + cry_reverse Cry_Nidorino + cry_reverse Cry_Nidoking + cry_reverse Cry_Clefairy + cry_reverse Cry_Clefable + cry_reverse Cry_Vulpix + cry_reverse Cry_Ninetales + cry_reverse Cry_Jigglypuff + cry_reverse Cry_Wigglytuff + cry_reverse Cry_Zubat + cry_reverse Cry_Golbat + cry_reverse Cry_Oddish + cry_reverse Cry_Gloom + cry_reverse Cry_Vileplume + cry_reverse Cry_Paras + cry_reverse Cry_Parasect + cry_reverse Cry_Venonat + cry_reverse Cry_Venomoth + cry_reverse Cry_Diglett + cry_reverse Cry_Dugtrio + cry_reverse Cry_Meowth + cry_reverse Cry_Persian + cry_reverse Cry_Psyduck + cry_reverse Cry_Golduck + cry_reverse Cry_Mankey + cry_reverse Cry_Primeape + cry_reverse Cry_Growlithe + cry_reverse Cry_Arcanine + cry_reverse Cry_Poliwag + cry_reverse Cry_Poliwhirl + cry_reverse Cry_Poliwrath + cry_reverse Cry_Abra + cry_reverse Cry_Kadabra + cry_reverse Cry_Alakazam + cry_reverse Cry_Machop + cry_reverse Cry_Machoke + cry_reverse Cry_Machamp + cry_reverse Cry_Bellsprout + cry_reverse Cry_Weepinbell + cry_reverse Cry_Victreebel + cry_reverse Cry_Tentacool + cry_reverse Cry_Tentacruel + cry_reverse Cry_Geodude + cry_reverse Cry_Graveler + cry_reverse Cry_Golem + cry_reverse Cry_Ponyta + cry_reverse Cry_Rapidash + cry_reverse Cry_Slowpoke + cry_reverse Cry_Slowbro + cry_reverse Cry_Magnemite + cry_reverse Cry_Magneton + cry_reverse Cry_Farfetchd + cry_reverse Cry_Doduo + cry_reverse Cry_Dodrio + cry_reverse Cry_Seel + cry_reverse Cry_Dewgong + cry_reverse Cry_Grimer + cry_reverse Cry_Muk + cry_reverse Cry_Shellder + cry_reverse Cry_Cloyster + cry_reverse Cry_Gastly + cry_reverse Cry_Haunter + cry_reverse Cry_Gengar + cry_reverse Cry_Onix + cry_reverse Cry_Drowzee + cry_reverse Cry_Hypno + cry_reverse Cry_Krabby + cry_reverse Cry_Kingler + cry_reverse Cry_Voltorb + cry_reverse Cry_Electrode + cry_reverse Cry_Exeggcute + cry_reverse Cry_Exeggutor + cry_reverse Cry_Cubone + cry_reverse Cry_Marowak + cry_reverse Cry_Hitmonlee + cry_reverse Cry_Hitmonchan + cry_reverse Cry_Lickitung + cry_reverse Cry_Koffing + cry_reverse Cry_Weezing + cry_reverse Cry_Rhyhorn + cry_reverse Cry_Rhydon + cry_reverse Cry_Chansey + cry_reverse Cry_Tangela + cry_reverse Cry_Kangaskhan + cry_reverse Cry_Horsea + cry_reverse Cry_Seadra + cry_reverse Cry_Goldeen + cry_reverse Cry_Seaking + cry_reverse Cry_Staryu + cry_reverse Cry_Starmie + cry_reverse Cry_MrMime + cry_reverse Cry_Scyther + cry_reverse Cry_Jynx + cry_reverse Cry_Electabuzz + cry_reverse Cry_Magmar + cry_reverse Cry_Pinsir + cry_reverse Cry_Tauros + cry_reverse Cry_Magikarp + cry_reverse Cry_Gyarados + cry_reverse Cry_Lapras + cry_reverse Cry_Ditto + cry_reverse Cry_Eevee + cry_reverse Cry_Vaporeon + cry_reverse Cry_Jolteon + cry_reverse Cry_Flareon + cry_reverse Cry_Porygon + cry_reverse Cry_Omanyte + cry_reverse Cry_Omastar + cry_reverse Cry_Kabuto + cry_reverse Cry_Kabutops + cry_reverse Cry_Aerodactyl + cry_reverse Cry_Snorlax + cry_reverse Cry_Articuno + cry_reverse Cry_Zapdos + cry_reverse Cry_Moltres + cry_reverse Cry_Dratini + cry_reverse Cry_Dragonair + cry_reverse Cry_Dragonite + cry_reverse Cry_Mewtwo + cry_reverse Cry_Mew + cry_reverse Cry_Chikorita + cry_reverse Cry_Bayleef + cry_reverse Cry_Meganium + cry_reverse Cry_Cyndaquil + cry_reverse Cry_Quilava + cry_reverse Cry_Typhlosion + cry_reverse Cry_Totodile + cry_reverse Cry_Croconaw + cry_reverse Cry_Feraligatr + cry_reverse Cry_Sentret + cry_reverse Cry_Furret + cry_reverse Cry_Hoothoot + cry_reverse Cry_Noctowl + cry_reverse Cry_Ledyba + cry_reverse Cry_Ledian + cry_reverse Cry_Spinarak + cry_reverse Cry_Ariados + cry_reverse Cry_Crobat + cry_reverse Cry_Chinchou + cry_reverse Cry_Lanturn + cry_reverse Cry_Pichu + cry_reverse Cry_Cleffa + cry_reverse Cry_Igglybuff + cry_reverse Cry_Togepi + cry_reverse Cry_Togetic + cry_reverse Cry_Natu + cry_reverse Cry_Xatu + cry_reverse Cry_Mareep + cry_reverse Cry_Flaaffy + cry_reverse Cry_Ampharos + cry_reverse Cry_Bellossom + cry_reverse Cry_Marill + cry_reverse Cry_Azumarill + cry_reverse Cry_Sudowoodo + cry_reverse Cry_Politoed + cry_reverse Cry_Hoppip + cry_reverse Cry_Skiploom + cry_reverse Cry_Jumpluff + cry_reverse Cry_Aipom + cry_reverse Cry_Sunkern + cry_reverse Cry_Sunflora + cry_reverse Cry_Yanma + cry_reverse Cry_Wooper + cry_reverse Cry_Quagsire + cry_reverse Cry_Espeon + cry_reverse Cry_Umbreon + cry_reverse Cry_Murkrow + cry_reverse Cry_Slowking + cry_reverse Cry_Misdreavus + cry_reverse Cry_Unown + cry_reverse Cry_Wobbuffet + cry_reverse Cry_Girafarig + cry_reverse Cry_Pineco + cry_reverse Cry_Forretress + cry_reverse Cry_Dunsparce + cry_reverse Cry_Gligar + cry_reverse Cry_Steelix + cry_reverse Cry_Snubbull + cry_reverse Cry_Granbull + cry_reverse Cry_Qwilfish + cry_reverse Cry_Scizor + cry_reverse Cry_Shuckle + cry_reverse Cry_Heracross + cry_reverse Cry_Sneasel + cry_reverse Cry_Teddiursa + cry_reverse Cry_Ursaring + cry_reverse Cry_Slugma + cry_reverse Cry_Magcargo + cry_reverse Cry_Swinub + cry_reverse Cry_Piloswine + cry_reverse Cry_Corsola + cry_reverse Cry_Remoraid + cry_reverse Cry_Octillery + cry_reverse Cry_Delibird + cry_reverse Cry_Mantine + cry_reverse Cry_Skarmory + cry_reverse Cry_Houndour + cry_reverse Cry_Houndoom + cry_reverse Cry_Kingdra + cry_reverse Cry_Phanpy + cry_reverse Cry_Donphan + cry_reverse Cry_Porygon2 + cry_reverse Cry_Stantler + cry_reverse Cry_Smeargle + cry_reverse Cry_Tyrogue + cry_reverse Cry_Hitmontop + cry_reverse Cry_Smoochum + cry_reverse Cry_Elekid + cry_reverse Cry_Magby + cry_reverse Cry_Miltank + cry_reverse Cry_Blissey + cry_reverse Cry_Raikou + cry_reverse Cry_Entei + cry_reverse Cry_Suicune + cry_reverse Cry_Larvitar + cry_reverse Cry_Pupitar + cry_reverse Cry_Tyranitar + cry_reverse Cry_Lugia + cry_reverse Cry_HoOh + cry_reverse Cry_Celebi + cry_reverse Cry_Treecko + cry_reverse Cry_Grovyle + cry_reverse Cry_Sceptile + cry_reverse Cry_Torchic + cry_reverse Cry_Combusken + cry_reverse Cry_Blaziken + cry_reverse Cry_Mudkip + cry_reverse Cry_Marshtomp + cry_reverse Cry_Swampert + cry_reverse Cry_Poochyena + cry_reverse Cry_Mightyena + cry_reverse Cry_Zigzagoon + cry_reverse Cry_Linoone + cry_reverse Cry_Wurmple + cry_reverse Cry_Silcoon + cry_reverse Cry_Beautifly + cry_reverse Cry_Cascoon + cry_reverse Cry_Dustox + cry_reverse Cry_Lotad + cry_reverse Cry_Lombre + cry_reverse Cry_Ludicolo + cry_reverse Cry_Seedot + cry_reverse Cry_Nuzleaf + cry_reverse Cry_Shiftry + cry_reverse Cry_Taillow + cry_reverse Cry_Swellow + cry_reverse Cry_Wingull + cry_reverse Cry_Pelipper + cry_reverse Cry_Ralts + cry_reverse Cry_Kirlia + cry_reverse Cry_Gardevoir + cry_reverse Cry_Surskit + cry_reverse Cry_Masquerain + cry_reverse Cry_Shroomish + cry_reverse Cry_Breloom + cry_reverse Cry_Slakoth + cry_reverse Cry_Vigoroth + cry_reverse Cry_Slaking + cry_reverse Cry_Nincada + cry_reverse Cry_Ninjask + cry_reverse Cry_Shedinja + cry_reverse Cry_Whismur + cry_reverse Cry_Loudred + cry_reverse Cry_Exploud + cry_reverse Cry_Makuhita + cry_reverse Cry_Hariyama + cry_reverse Cry_Azurill + cry_reverse Cry_Nosepass + cry_reverse Cry_Skitty + cry_reverse Cry_Delcatty + cry_reverse Cry_Sableye + cry_reverse Cry_Mawile + cry_reverse Cry_Aron + cry_reverse Cry_Lairon + cry_reverse Cry_Aggron + cry_reverse Cry_Meditite + cry_reverse Cry_Medicham + cry_reverse Cry_Electrike + cry_reverse Cry_Manectric + cry_reverse Cry_Plusle + cry_reverse Cry_Minun + cry_reverse Cry_Volbeat + cry_reverse Cry_Illumise + cry_reverse Cry_Roselia + cry_reverse Cry_Gulpin + cry_reverse Cry_Swalot + cry_reverse Cry_Carvanha + cry_reverse Cry_Sharpedo + cry_reverse Cry_Wailmer + cry_reverse Cry_Wailord + cry_reverse Cry_Numel + cry_reverse Cry_Camerupt + cry_reverse Cry_Torkoal + cry_reverse Cry_Spoink + cry_reverse Cry_Grumpig + cry_reverse Cry_Spinda + cry_reverse Cry_Trapinch + cry_reverse Cry_Vibrava + cry_reverse Cry_Flygon + cry_reverse Cry_Cacnea + cry_reverse Cry_Cacturne + cry_reverse Cry_Swablu + cry_reverse Cry_Altaria + cry_reverse Cry_Zangoose + cry_reverse Cry_Seviper + cry_reverse Cry_Lunatone + cry_reverse Cry_Solrock + cry_reverse Cry_Barboach + cry_reverse Cry_Whiscash + cry_reverse Cry_Corphish + cry_reverse Cry_Crawdaunt + cry_reverse Cry_Baltoy + cry_reverse Cry_Claydol + cry_reverse Cry_Lileep + cry_reverse Cry_Cradily + cry_reverse Cry_Anorith + cry_reverse Cry_Armaldo + cry_reverse Cry_Feebas + cry_reverse Cry_Milotic + cry_reverse Cry_Castform + cry_reverse Cry_Kecleon + cry_reverse Cry_Shuppet + cry_reverse Cry_Banette + cry_reverse Cry_Duskull + cry_reverse Cry_Dusclops + cry_reverse Cry_Tropius + cry_reverse Cry_Chimecho + cry_reverse Cry_Absol + cry_reverse Cry_Wynaut + cry_reverse Cry_Snorunt + cry_reverse Cry_Glalie + cry_reverse Cry_Spheal + cry_reverse Cry_Sealeo + cry_reverse Cry_Walrein + cry_reverse Cry_Clamperl + cry_reverse Cry_Huntail + cry_reverse Cry_Gorebyss + cry_reverse Cry_Relicanth + cry_reverse Cry_Luvdisc + cry_reverse Cry_Bagon + cry_reverse Cry_Shelgon + cry_reverse Cry_Salamence + cry_reverse Cry_Beldum + cry_reverse Cry_Metang + cry_reverse Cry_Metagross + cry_reverse Cry_Regirock + cry_reverse Cry_Regice + cry_reverse Cry_Registeel + cry_reverse Cry_Latias + cry_reverse Cry_Latios + cry_reverse Cry_Kyogre + cry_reverse Cry_Groudon + cry_reverse Cry_Rayquaza + cry_reverse Cry_Jirachi + cry_reverse Cry_Deoxys +.if P_NEW_POKEMON == TRUE + cry_reverse Cry_Turtwig + cry_reverse Cry_Grotle + cry_reverse Cry_Torterra + cry_reverse Cry_Chimchar + cry_reverse Cry_Monferno + cry_reverse Cry_Infernape + cry_reverse Cry_Piplup + cry_reverse Cry_Prinplup + cry_reverse Cry_Empoleon + cry_reverse Cry_Starly + cry_reverse Cry_Staravia + cry_reverse Cry_Staraptor + cry_reverse Cry_Bidoof + cry_reverse Cry_Bibarel + cry_reverse Cry_Kricketot + cry_reverse Cry_Kricketune + cry_reverse Cry_Shinx + cry_reverse Cry_Luxio + cry_reverse Cry_Luxray + cry_reverse Cry_Budew + cry_reverse Cry_Roserade + cry_reverse Cry_Cranidos + cry_reverse Cry_Rampardos + cry_reverse Cry_Shieldon + cry_reverse Cry_Bastiodon + cry_reverse Cry_Burmy + cry_reverse Cry_Wormadam + cry_reverse Cry_Mothim + cry_reverse Cry_Combee + cry_reverse Cry_Vespiquen + cry_reverse Cry_Pachirisu + cry_reverse Cry_Buizel + cry_reverse Cry_Floatzel + cry_reverse Cry_Cherubi + cry_reverse Cry_Cherrim + cry_reverse Cry_Shellos + cry_reverse Cry_Gastrodon + cry_reverse Cry_Ambipom + cry_reverse Cry_Drifloon + cry_reverse Cry_Drifblim + cry_reverse Cry_Buneary + cry_reverse Cry_Lopunny + cry_reverse Cry_Mismagius + cry_reverse Cry_Honchkrow + cry_reverse Cry_Glameow + cry_reverse Cry_Purugly + cry_reverse Cry_Chingling + cry_reverse Cry_Stunky + cry_reverse Cry_Skuntank + cry_reverse Cry_Bronzor + cry_reverse Cry_Bronzong + cry_reverse Cry_Bonsly + cry_reverse Cry_MimeJr + cry_reverse Cry_Happiny + cry_reverse Cry_Chatot + cry_reverse Cry_Spiritomb + cry_reverse Cry_Gible + cry_reverse Cry_Gabite + cry_reverse Cry_Garchomp + cry_reverse Cry_Munchlax + cry_reverse Cry_Riolu + cry_reverse Cry_Lucario + cry_reverse Cry_Hippopotas + cry_reverse Cry_Hippowdon + cry_reverse Cry_Skorupi + cry_reverse Cry_Drapion + cry_reverse Cry_Croagunk + cry_reverse Cry_Toxicroak + cry_reverse Cry_Carnivine + cry_reverse Cry_Finneon + cry_reverse Cry_Lumineon + cry_reverse Cry_Mantyke + cry_reverse Cry_Snover + cry_reverse Cry_Abomasnow + cry_reverse Cry_Weavile + cry_reverse Cry_Magnezone + cry_reverse Cry_Lickilicky + cry_reverse Cry_Rhyperior + cry_reverse Cry_Tangrowth + cry_reverse Cry_Electivire + cry_reverse Cry_Magmortar + cry_reverse Cry_Togekiss + cry_reverse Cry_Yanmega + cry_reverse Cry_Leafeon + cry_reverse Cry_Glaceon + cry_reverse Cry_Gliscor + cry_reverse Cry_Mamoswine + cry_reverse Cry_PorygonZ + cry_reverse Cry_Gallade + cry_reverse Cry_Probopass + cry_reverse Cry_Dusknoir + cry_reverse Cry_Froslass + cry_reverse Cry_Rotom + cry_reverse Cry_Uxie + cry_reverse Cry_Mesprit + cry_reverse Cry_Azelf + cry_reverse Cry_Dialga + cry_reverse Cry_Palkia + cry_reverse Cry_Heatran + cry_reverse Cry_Regigigas + cry_reverse Cry_Giratina + cry_reverse Cry_Cresselia + cry_reverse Cry_Phione + cry_reverse Cry_Manaphy + cry_reverse Cry_Darkrai + cry_reverse Cry_Shaymin + cry_reverse Cry_Arceus + cry_reverse Cry_Victini + cry_reverse Cry_Snivy + cry_reverse Cry_Servine + cry_reverse Cry_Serperior + cry_reverse Cry_Tepig + cry_reverse Cry_Pignite + cry_reverse Cry_Emboar + cry_reverse Cry_Oshawott + cry_reverse Cry_Dewott + cry_reverse Cry_Samurott + cry_reverse Cry_Patrat + cry_reverse Cry_Watchog + cry_reverse Cry_Lillipup + cry_reverse Cry_Herdier + cry_reverse Cry_Stoutland + cry_reverse Cry_Purrloin + cry_reverse Cry_Liepard + cry_reverse Cry_Pansage + cry_reverse Cry_Simisage + cry_reverse Cry_Pansear + cry_reverse Cry_Simisear + cry_reverse Cry_Panpour + cry_reverse Cry_Simipour + cry_reverse Cry_Munna + cry_reverse Cry_Musharna + cry_reverse Cry_Pidove + cry_reverse Cry_Tranquill + cry_reverse Cry_Unfezant + cry_reverse Cry_Blitzle + cry_reverse Cry_Zebstrika + cry_reverse Cry_Roggenrola + cry_reverse Cry_Boldore + cry_reverse Cry_Gigalith + cry_reverse Cry_Woobat + cry_reverse Cry_Swoobat + cry_reverse Cry_Drilbur + cry_reverse Cry_Excadrill + cry_reverse Cry_Audino + cry_reverse Cry_Timburr + cry_reverse Cry_Gurdurr + cry_reverse Cry_Conkeldurr + cry_reverse Cry_Tympole + cry_reverse Cry_Palpitoad + cry_reverse Cry_Seismitoad + cry_reverse Cry_Throh + cry_reverse Cry_Sawk + cry_reverse Cry_Sewaddle + cry_reverse Cry_Swadloon + cry_reverse Cry_Leavanny + cry_reverse Cry_Venipede + cry_reverse Cry_Whirlipede + cry_reverse Cry_Scolipede + cry_reverse Cry_Cottonee + cry_reverse Cry_Whimsicott + cry_reverse Cry_Petilil + cry_reverse Cry_Lilligant + cry_reverse Cry_Basculin + cry_reverse Cry_Sandile + cry_reverse Cry_Krokorok + cry_reverse Cry_Krookodile + cry_reverse Cry_Darumaka + cry_reverse Cry_Darmanitan + cry_reverse Cry_Maractus + cry_reverse Cry_Dwebble + cry_reverse Cry_Crustle + cry_reverse Cry_Scraggy + cry_reverse Cry_Scrafty + cry_reverse Cry_Sigilyph + cry_reverse Cry_Yamask + cry_reverse Cry_Cofagrigus + cry_reverse Cry_Tirtouga + cry_reverse Cry_Carracosta + cry_reverse Cry_Archen + cry_reverse Cry_Archeops + cry_reverse Cry_Trubbish + cry_reverse Cry_Garbodor + cry_reverse Cry_Zorua + cry_reverse Cry_Zoroark + cry_reverse Cry_Minccino + cry_reverse Cry_Cinccino + cry_reverse Cry_Gothita + cry_reverse Cry_Gothorita + cry_reverse Cry_Gothitelle + cry_reverse Cry_Solosis + cry_reverse Cry_Duosion + cry_reverse Cry_Reuniclus + cry_reverse Cry_Ducklett + cry_reverse Cry_Swanna + cry_reverse Cry_Vanillite + cry_reverse Cry_Vanillish + cry_reverse Cry_Vanilluxe + cry_reverse Cry_Deerling + cry_reverse Cry_Sawsbuck + cry_reverse Cry_Emolga + cry_reverse Cry_Karrablast + cry_reverse Cry_Escavalier + cry_reverse Cry_Foongus + cry_reverse Cry_Amoonguss + cry_reverse Cry_Frillish + cry_reverse Cry_Jellicent + cry_reverse Cry_Alomomola + cry_reverse Cry_Joltik + cry_reverse Cry_Galvantula + cry_reverse Cry_Ferroseed + cry_reverse Cry_Ferrothorn + cry_reverse Cry_Klink + cry_reverse Cry_Klang + cry_reverse Cry_Klinklang + cry_reverse Cry_Tynamo + cry_reverse Cry_Eelektrik + cry_reverse Cry_Eelektross + cry_reverse Cry_Elgyem + cry_reverse Cry_Beheeyem + cry_reverse Cry_Litwick + cry_reverse Cry_Lampent + cry_reverse Cry_Chandelure + cry_reverse Cry_Axew + cry_reverse Cry_Fraxure + cry_reverse Cry_Haxorus + cry_reverse Cry_Cubchoo + cry_reverse Cry_Beartic + cry_reverse Cry_Cryogonal + cry_reverse Cry_Shelmet + cry_reverse Cry_Accelgor + cry_reverse Cry_Stunfisk + cry_reverse Cry_Mienfoo + cry_reverse Cry_Mienshao + cry_reverse Cry_Druddigon + cry_reverse Cry_Golett + cry_reverse Cry_Golurk + cry_reverse Cry_Pawniard + cry_reverse Cry_Bisharp + cry_reverse Cry_Bouffalant + cry_reverse Cry_Rufflet + cry_reverse Cry_Braviary + cry_reverse Cry_Vullaby + cry_reverse Cry_Mandibuzz + cry_reverse Cry_Heatmor + cry_reverse Cry_Durant + cry_reverse Cry_Deino + cry_reverse Cry_Zweilous + cry_reverse Cry_Hydreigon + cry_reverse Cry_Larvesta + cry_reverse Cry_Volcarona + cry_reverse Cry_Cobalion + cry_reverse Cry_Terrakion + cry_reverse Cry_Virizion + cry_reverse Cry_Tornadus + cry_reverse Cry_Thundurus + cry_reverse Cry_Reshiram + cry_reverse Cry_Zekrom + cry_reverse Cry_Landorus + cry_reverse Cry_Kyurem + cry_reverse Cry_Keldeo + cry_reverse Cry_Meloetta + cry_reverse Cry_Genesect + cry_reverse Cry_Chespin + cry_reverse Cry_Quilladin + cry_reverse Cry_Chesnaught + cry_reverse Cry_Fennekin + cry_reverse Cry_Braixen + cry_reverse Cry_Delphox + cry_reverse Cry_Froakie + cry_reverse Cry_Frogadier + cry_reverse Cry_Greninja + cry_reverse Cry_Bunnelby + cry_reverse Cry_Diggersby + cry_reverse Cry_Fletchling + cry_reverse Cry_Fletchinder + cry_reverse Cry_Talonflame + cry_reverse Cry_Scatterbug + cry_reverse Cry_Spewpa + cry_reverse Cry_Vivillon + cry_reverse Cry_Litleo + cry_reverse Cry_Pyroar + cry_reverse Cry_Flabebe + cry_reverse Cry_Floette + cry_reverse Cry_Florges + cry_reverse Cry_Skiddo + cry_reverse Cry_Gogoat + cry_reverse Cry_Pancham + cry_reverse Cry_Pangoro + cry_reverse Cry_Furfrou + cry_reverse Cry_Espurr + cry_reverse Cry_Meowstic + cry_reverse Cry_Honedge + cry_reverse Cry_Doublade + cry_reverse Cry_Aegislash + cry_reverse Cry_Spritzee + cry_reverse Cry_Aromatisse + cry_reverse Cry_Swirlix + cry_reverse Cry_Slurpuff + cry_reverse Cry_Inkay + cry_reverse Cry_Malamar + cry_reverse Cry_Binacle + cry_reverse Cry_Barbaracle + cry_reverse Cry_Skrelp + cry_reverse Cry_Dragalge + cry_reverse Cry_Clauncher + cry_reverse Cry_Clawitzer + cry_reverse Cry_Helioptile + cry_reverse Cry_Heliolisk + cry_reverse Cry_Tyrunt + cry_reverse Cry_Tyrantrum + cry_reverse Cry_Amaura + cry_reverse Cry_Aurorus + cry_reverse Cry_Sylveon + cry_reverse Cry_Hawlucha + cry_reverse Cry_Dedenne + cry_reverse Cry_Carbink + cry_reverse Cry_Goomy + cry_reverse Cry_Sliggoo + cry_reverse Cry_Goodra + cry_reverse_uncomp Cry_Klefki + cry_reverse Cry_Phantump + cry_reverse Cry_Trevenant + cry_reverse Cry_Pumpkaboo + cry_reverse Cry_Gourgeist + cry_reverse Cry_Bergmite + cry_reverse Cry_Avalugg + cry_reverse Cry_Noibat + cry_reverse Cry_Noivern + cry_reverse Cry_Xerneas + cry_reverse Cry_Yveltal + cry_reverse Cry_Zygarde + cry_reverse Cry_Diancie + cry_reverse Cry_Hoopa + cry_reverse Cry_Volcanion + cry_reverse Cry_Rowlet + cry_reverse Cry_Dartrix + cry_reverse Cry_Decidueye + cry_reverse Cry_Litten + cry_reverse Cry_Torracat + cry_reverse Cry_Incineroar + cry_reverse Cry_Popplio + cry_reverse Cry_Brionne + cry_reverse Cry_Primarina + cry_reverse Cry_Pikipek + cry_reverse Cry_Trumbeak + cry_reverse Cry_Toucannon + cry_reverse Cry_Yungoos + cry_reverse Cry_Gumshoos + cry_reverse Cry_Grubbin + cry_reverse Cry_Charjabug + cry_reverse Cry_Vikavolt + cry_reverse Cry_Crabrawler + cry_reverse Cry_Crabominable + cry_reverse Cry_Oricorio + cry_reverse Cry_Cutiefly + cry_reverse Cry_Ribombee + cry_reverse Cry_Rockruff + cry_reverse Cry_Lycanroc + cry_reverse Cry_Wishiwashi + cry_reverse Cry_Mareanie + cry_reverse Cry_Toxapex + cry_reverse Cry_Mudbray + cry_reverse Cry_Mudsdale + cry_reverse Cry_Dewpider + cry_reverse Cry_Araquanid + cry_reverse Cry_Fomantis + cry_reverse Cry_Lurantis + cry_reverse Cry_Morelull + cry_reverse Cry_Shiinotic + cry_reverse Cry_Salandit + cry_reverse Cry_Salazzle + cry_reverse Cry_Stufful + cry_reverse Cry_Bewear + cry_reverse Cry_Bounsweet + cry_reverse Cry_Steenee + cry_reverse Cry_Tsareena + cry_reverse Cry_Comfey + cry_reverse Cry_Oranguru + cry_reverse Cry_Passimian + cry_reverse Cry_Wimpod + cry_reverse Cry_Golisopod + cry_reverse Cry_Sandygast + cry_reverse Cry_Palossand + cry_reverse Cry_Pyukumuku + cry_reverse Cry_TypeNull + cry_reverse Cry_Silvally + cry_reverse Cry_Minior + cry_reverse Cry_Komala + cry_reverse Cry_Turtonator + cry_reverse Cry_Togedemaru + cry_reverse Cry_Mimikyu + cry_reverse Cry_Bruxish + cry_reverse Cry_Drampa + cry_reverse Cry_Dhelmise + cry_reverse Cry_Jangmoo + cry_reverse Cry_Hakamoo + cry_reverse Cry_Kommoo + cry_reverse Cry_TapuKoko + cry_reverse Cry_TapuLele + cry_reverse Cry_TapuBulu + cry_reverse Cry_TapuFini + cry_reverse Cry_Cosmog + cry_reverse Cry_Cosmoem + cry_reverse Cry_Solgaleo + cry_reverse Cry_Lunala + cry_reverse Cry_Nihilego + cry_reverse Cry_Buzzwole + cry_reverse Cry_Pheromosa + cry_reverse Cry_Xurkitree + cry_reverse Cry_Celesteela + cry_reverse Cry_Kartana + cry_reverse Cry_Guzzlord + cry_reverse Cry_Necrozma + cry_reverse Cry_Magearna + cry_reverse Cry_Marshadow + cry_reverse Cry_Poipole + cry_reverse Cry_Naganadel + cry_reverse Cry_Stakataka + cry_reverse Cry_Blacephalon + cry_reverse Cry_Zeraora + cry_reverse Cry_Meltan + cry_reverse Cry_Melmetal + cry_reverse Cry_Grookey + cry_reverse Cry_Thwackey + cry_reverse Cry_Rillaboom + cry_reverse Cry_Scorbunny + cry_reverse Cry_Raboot + cry_reverse Cry_Cinderace + cry_reverse Cry_Sobble + cry_reverse Cry_Drizzile + cry_reverse Cry_Inteleon + cry_reverse Cry_Skwovet + cry_reverse Cry_Greedent + cry_reverse Cry_Rookidee + cry_reverse Cry_Corvisquire + cry_reverse Cry_Corviknight + cry_reverse Cry_Blipbug + cry_reverse Cry_Dottler + cry_reverse Cry_Orbeetle + cry_reverse Cry_Nickit + cry_reverse Cry_Thievul + cry_reverse Cry_Gossifleur + cry_reverse Cry_Eldegoss + cry_reverse Cry_Wooloo + cry_reverse Cry_Dubwool + cry_reverse Cry_Chewtle + cry_reverse Cry_Drednaw + cry_reverse Cry_Yamper + cry_reverse Cry_Boltund + cry_reverse Cry_Rolycoly + cry_reverse Cry_Carkol + cry_reverse Cry_Coalossal + cry_reverse Cry_Applin + cry_reverse Cry_Flapple + cry_reverse Cry_Appletun + cry_reverse Cry_Silicobra + cry_reverse Cry_Sandaconda + cry_reverse Cry_Cramorant + cry_reverse Cry_Arrokuda + cry_reverse Cry_Barraskewda + cry_reverse Cry_Toxel + cry_reverse Cry_Toxtricity + cry_reverse Cry_Sizzlipede + cry_reverse Cry_Centiskorch + cry_reverse Cry_Clobbopus + cry_reverse Cry_Grapploct + cry_reverse Cry_Sinistea + cry_reverse Cry_Polteageist + cry_reverse Cry_Hatenna + cry_reverse Cry_Hattrem + cry_reverse Cry_Hatterene + cry_reverse Cry_Impidimp + cry_reverse Cry_Morgrem + cry_reverse Cry_Grimmsnarl + cry_reverse Cry_Obstagoon + cry_reverse Cry_Perrserker + cry_reverse Cry_Cursola + cry_reverse Cry_Sirfetchd + cry_reverse Cry_MrRime + cry_reverse Cry_Runerigus + cry_reverse Cry_Milcery + cry_reverse Cry_Alcremie + cry_reverse Cry_Falinks + cry_reverse Cry_Pincurchin + cry_reverse Cry_Snom + cry_reverse Cry_Frosmoth + cry_reverse Cry_Stonjourner + cry_reverse Cry_Eiscue + cry_reverse Cry_Indeedee + cry_reverse Cry_Morpeko + cry_reverse Cry_Cufant + cry_reverse Cry_Copperajah + cry_reverse Cry_Dracozolt + cry_reverse Cry_Arctozolt + cry_reverse Cry_Dracovish + cry_reverse Cry_Arctovish + cry_reverse Cry_Duraludon + cry_reverse Cry_Dreepy + cry_reverse Cry_Drakloak + cry_reverse Cry_Dragapult + cry_reverse Cry_Zacian + cry_reverse Cry_Zamazenta + cry_reverse Cry_Eternatus + cry_reverse Cry_Kubfu + cry_reverse Cry_Urshifu + cry_reverse Cry_Zarude + cry_reverse Cry_Regieleki + cry_reverse Cry_Regidrago + cry_reverse Cry_Glastrier + cry_reverse Cry_Spectrier + cry_reverse Cry_Calyrex + cry_reverse Cry_Bulbasaur //Cry_Wyrdeer + cry_reverse Cry_Bulbasaur //Cry_Kleavor + cry_reverse Cry_Bulbasaur //Cry_Ursaluna + cry_reverse Cry_Bulbasaur //Cry_Basculegion + cry_reverse Cry_Bulbasaur //Cry_Sneasler + cry_reverse Cry_Bulbasaur //Cry_Overqwil + cry_reverse Cry_Bulbasaur //Cry_Enamorus @ Megas - cry2_uncomp Cry_VenusaurMega - cry2_uncomp Cry_CharizardMegaX - cry2_uncomp Cry_CharizardMegaY - cry2_uncomp Cry_BlastoiseMega - cry2_uncomp Cry_BeedrillMega - cry2_uncomp Cry_PidgeotMega - cry2_uncomp Cry_AlakazamMega - cry2_uncomp Cry_SlowbroMega - cry2_uncomp Cry_GengarMega - cry2_uncomp Cry_KangaskhanMega - cry2_uncomp Cry_PinsirMega - cry2_uncomp Cry_GyaradosMega - cry2_uncomp Cry_AerodactylMega - cry2_uncomp Cry_MewtwoMegaX - cry2_uncomp Cry_MewtwoMegaY - cry2_uncomp Cry_AmpharosMega - cry2_uncomp Cry_SteelixMega - cry2_uncomp Cry_ScizorMega - cry2_uncomp Cry_HeracrossMega - cry2_uncomp Cry_HoundoomMega - cry2_uncomp Cry_TyranitarMega - cry2_uncomp Cry_SceptileMega - cry2_uncomp Cry_BlazikenMega - cry2_uncomp Cry_SwampertMega - cry2_uncomp Cry_GardevoirMega - cry2_uncomp Cry_SableyeMega - cry2_uncomp Cry_MawileMega - cry2_uncomp Cry_AggronMega - cry2_uncomp Cry_MedichamMega - cry2_uncomp Cry_ManectricMega - cry2_uncomp Cry_SharpedoMega - cry2_uncomp Cry_CameruptMega - cry2_uncomp Cry_AltariaMega - cry2_uncomp Cry_BanetteMega - cry2_uncomp Cry_AbsolMega - cry2_uncomp Cry_GlalieMega - cry2_uncomp Cry_SalamenceMega - cry2_uncomp Cry_MetagrossMega - cry2_uncomp Cry_LatiasMega - cry2_uncomp Cry_LatiosMega - cry2_uncomp Cry_LopunnyMega - cry2_uncomp Cry_GarchompMega - cry2_uncomp Cry_LucarioMega - cry2_uncomp Cry_AbomasnowMega - cry2_uncomp Cry_GalladeMega - cry2_uncomp Cry_AudinoMega - cry2_uncomp Cry_DiancieMega + cry_reverse Cry_VenusaurMega + cry_reverse Cry_CharizardMegaX + cry_reverse Cry_CharizardMegaY + cry_reverse Cry_BlastoiseMega + cry_reverse Cry_BeedrillMega + cry_reverse Cry_PidgeotMega + cry_reverse Cry_AlakazamMega + cry_reverse Cry_SlowbroMega + cry_reverse Cry_GengarMega + cry_reverse Cry_KangaskhanMega + cry_reverse Cry_PinsirMega + cry_reverse Cry_GyaradosMega + cry_reverse Cry_AerodactylMega + cry_reverse Cry_MewtwoMegaX + cry_reverse Cry_MewtwoMegaY + cry_reverse Cry_AmpharosMega + cry_reverse Cry_SteelixMega + cry_reverse Cry_ScizorMega + cry_reverse Cry_HeracrossMega + cry_reverse Cry_HoundoomMega + cry_reverse Cry_TyranitarMega + cry_reverse Cry_SceptileMega + cry_reverse Cry_BlazikenMega + cry_reverse Cry_SwampertMega + cry_reverse Cry_GardevoirMega + cry_reverse Cry_SableyeMega + cry_reverse Cry_MawileMega + cry_reverse Cry_AggronMega + cry_reverse Cry_MedichamMega + cry_reverse Cry_ManectricMega + cry_reverse Cry_SharpedoMega + cry_reverse Cry_CameruptMega + cry_reverse Cry_AltariaMega + cry_reverse Cry_BanetteMega + cry_reverse Cry_AbsolMega + cry_reverse Cry_GlalieMega + cry_reverse Cry_SalamenceMega + cry_reverse Cry_MetagrossMega + cry_reverse Cry_LatiasMega + cry_reverse Cry_LatiosMega + cry_reverse Cry_LopunnyMega + cry_reverse Cry_GarchompMega + cry_reverse Cry_LucarioMega + cry_reverse Cry_AbomasnowMega + cry_reverse Cry_GalladeMega + cry_reverse Cry_AudinoMega + cry_reverse Cry_DiancieMega @ Special Mega + Primals - cry2_uncomp Cry_RayquazaMega - cry2_uncomp Cry_KyogrePrimal - cry2_uncomp Cry_GroudonPrimal + cry_reverse Cry_RayquazaMega + cry_reverse Cry_KyogrePrimal + cry_reverse Cry_GroudonPrimal @ Alolan Forms - cry2 Cry_Rattata - cry2 Cry_Raticate - cry2 Cry_Raichu - cry2 Cry_Sandshrew - cry2 Cry_Sandslash - cry2 Cry_Vulpix - cry2 Cry_Ninetales - cry2 Cry_Diglett - cry2 Cry_Dugtrio - cry2 Cry_Meowth - cry2 Cry_Persian - cry2 Cry_Geodude - cry2 Cry_Graveler - cry2 Cry_Golem - cry2 Cry_Grimer - cry2 Cry_Muk - cry2 Cry_Exeggutor - cry2 Cry_Marowak + cry_reverse Cry_Rattata + cry_reverse Cry_Raticate + cry_reverse Cry_Raichu + cry_reverse Cry_Sandshrew + cry_reverse Cry_Sandslash + cry_reverse Cry_Vulpix + cry_reverse Cry_Ninetales + cry_reverse Cry_Diglett + cry_reverse Cry_Dugtrio + cry_reverse Cry_Meowth + cry_reverse Cry_Persian + cry_reverse Cry_Geodude + cry_reverse Cry_Graveler + cry_reverse Cry_Golem + cry_reverse Cry_Grimer + cry_reverse Cry_Muk + cry_reverse Cry_Exeggutor + cry_reverse Cry_Marowak @ Galarian Forms - cry2 Cry_Meowth - cry2 Cry_Ponyta - cry2 Cry_Rapidash - cry2_uncomp Cry_SlowpokeGalarian - cry2 Cry_Slowbro - cry2 Cry_Farfetchd - cry2 Cry_Weezing - cry2 Cry_MrMime - cry2 Cry_Articuno - cry2 Cry_Zapdos - cry2 Cry_Moltres - cry2 Cry_Slowking - cry2 Cry_Corsola - cry2 Cry_Zigzagoon - cry2 Cry_Linoone - cry2 Cry_Darumaka - cry2 Cry_Darmanitan - cry2 Cry_Yamask - cry2 Cry_Stunfisk + cry_reverse Cry_Meowth + cry_reverse Cry_Ponyta + cry_reverse Cry_Rapidash + cry_reverse Cry_SlowpokeGalarian + cry_reverse Cry_Slowbro + cry_reverse Cry_Farfetchd + cry_reverse Cry_Weezing + cry_reverse Cry_MrMime + cry_reverse Cry_Articuno + cry_reverse Cry_Zapdos + cry_reverse Cry_Moltres + cry_reverse Cry_Slowking + cry_reverse Cry_Corsola + cry_reverse Cry_Zigzagoon + cry_reverse Cry_Linoone + cry_reverse Cry_Darumaka + cry_reverse Cry_Darmanitan + cry_reverse Cry_Yamask + cry_reverse Cry_Stunfisk + @ Hisuian Forms + cry_reverse Cry_Growlithe + cry_reverse Cry_Arcanine + cry_reverse Cry_Voltorb + cry_reverse Cry_Electrode + cry_reverse Cry_Typhlosion + cry_reverse Cry_Qwilfish + cry_reverse Cry_Sneasel + cry_reverse Cry_Samurott + cry_reverse Cry_Lilligant + cry_reverse Cry_Zorua + cry_reverse Cry_Zoroark + cry_reverse Cry_Braviary + cry_reverse Cry_Sliggoo + cry_reverse Cry_Goodra + cry_reverse Cry_Avalugg + cry_reverse Cry_Decidueye @ Misc Forms @ Cosplay Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu @ Cap Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu - cry2 Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu + cry_reverse Cry_Pikachu @ Pichu - cry2 Cry_Pichu + cry_reverse Cry_Pichu @ Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown - cry2 Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown @ Castform - cry2 Cry_Castform - cry2 Cry_Castform - cry2 Cry_Castform + cry_reverse Cry_Castform + cry_reverse Cry_Castform + cry_reverse Cry_Castform @ Deoxys - cry2 Cry_Deoxys - cry2 Cry_Deoxys - cry2 Cry_Deoxys + cry_reverse Cry_Deoxys + cry_reverse Cry_Deoxys + cry_reverse Cry_Deoxys @ Burmy - cry2 Cry_Burmy - cry2 Cry_Burmy + cry_reverse Cry_Burmy + cry_reverse Cry_Burmy @ Wormadam - cry2 Cry_Wormadam - cry2 Cry_Wormadam + cry_reverse Cry_Wormadam + cry_reverse Cry_Wormadam @ Cherrim - cry2 Cry_Cherrim + cry_reverse Cry_Cherrim @ Shellos - cry2 Cry_Shellos + cry_reverse Cry_Shellos @ Gastrodon - cry2 Cry_Gastrodon + cry_reverse Cry_Gastrodon @ Rotom - cry2 Cry_Rotom - cry2 Cry_Rotom - cry2 Cry_Rotom - cry2 Cry_Rotom - cry2 Cry_Rotom - @ Giratina - cry2 Cry_Giratina + cry_reverse Cry_Rotom + cry_reverse Cry_Rotom + cry_reverse Cry_Rotom + cry_reverse Cry_Rotom + cry_reverse Cry_Rotom + @ Origin Forme + cry_reverse Cry_Dialga + cry_reverse Cry_Palkia + cry_reverse Cry_Giratina @ Shaymin - cry2 Cry_ShayminSky + cry_reverse Cry_ShayminSky @ Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus - cry2 Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus + cry_reverse Cry_Arceus @ Basculin - cry2 Cry_Basculin + cry_reverse Cry_Basculin + cry_reverse Cry_Basculin @ Darmanitan - cry2 Cry_Darmanitan - cry2 Cry_Darmanitan + cry_reverse Cry_Darmanitan + cry_reverse Cry_Darmanitan @ Deerling - cry2 Cry_Deerling - cry2 Cry_Deerling - cry2 Cry_Deerling + cry_reverse Cry_Deerling + cry_reverse Cry_Deerling + cry_reverse Cry_Deerling @ Sawsbuck - cry2 Cry_Sawsbuck - cry2 Cry_Sawsbuck - cry2 Cry_Sawsbuck + cry_reverse Cry_Sawsbuck + cry_reverse Cry_Sawsbuck + cry_reverse Cry_Sawsbuck @ Therian Forms - cry2 Cry_TornadusTherian - cry2 Cry_ThundurusTherian - cry2 Cry_LandorusTherian + cry_reverse Cry_TornadusTherian + cry_reverse Cry_ThundurusTherian + cry_reverse Cry_LandorusTherian + cry_reverse Cry_Bulbasaur //Cry_EnamorusTherian @ Kyurem - cry2 Cry_KyuremWhite - cry2 Cry_KyuremBlack + cry_reverse Cry_KyuremWhite + cry_reverse Cry_KyuremBlack @ Keldeo - cry2 Cry_Keldeo + cry_reverse Cry_Keldeo @ Meloetta - cry2 Cry_Meloetta + cry_reverse Cry_Meloetta @ Genesect - cry2 Cry_Genesect - cry2 Cry_Genesect - cry2 Cry_Genesect - cry2 Cry_Genesect + cry_reverse Cry_Genesect + cry_reverse Cry_Genesect + cry_reverse Cry_Genesect + cry_reverse Cry_Genesect @ Greninja - cry2_uncomp Cry_Greninja - cry2_uncomp Cry_Greninja + cry_reverse Cry_Greninja + cry_reverse Cry_Greninja @ Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon - cry2_uncomp Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon + cry_reverse Cry_Vivillon @ Flabébé - cry2_uncomp Cry_Flabebe - cry2_uncomp Cry_Flabebe - cry2_uncomp Cry_Flabebe - cry2_uncomp Cry_Flabebe + cry_reverse Cry_Flabebe + cry_reverse Cry_Flabebe + cry_reverse Cry_Flabebe + cry_reverse Cry_Flabebe @ Floette - cry2_uncomp Cry_Floette - cry2_uncomp Cry_Floette - cry2_uncomp Cry_Floette - cry2_uncomp Cry_Floette - cry2_uncomp Cry_FloetteEternalFlower + cry_reverse Cry_Floette + cry_reverse Cry_Floette + cry_reverse Cry_Floette + cry_reverse Cry_Floette + cry_reverse Cry_FloetteEternalFlower @ Florges - cry2_uncomp Cry_Florges - cry2_uncomp Cry_Florges - cry2_uncomp Cry_Florges - cry2_uncomp Cry_Florges + cry_reverse Cry_Florges + cry_reverse Cry_Florges + cry_reverse Cry_Florges + cry_reverse Cry_Florges @ Furfrou - cry2_uncomp Cry_Furfrou - cry2_uncomp Cry_Furfrou - cry2_uncomp Cry_Furfrou - cry2_uncomp Cry_Furfrou - cry2_uncomp Cry_Furfrou - cry2_uncomp Cry_Furfrou - cry2_uncomp Cry_Furfrou - cry2_uncomp Cry_Furfrou - cry2_uncomp Cry_Furfrou + cry_reverse Cry_Furfrou + cry_reverse Cry_Furfrou + cry_reverse Cry_Furfrou + cry_reverse Cry_Furfrou + cry_reverse Cry_Furfrou + cry_reverse Cry_Furfrou + cry_reverse Cry_Furfrou + cry_reverse Cry_Furfrou + cry_reverse Cry_Furfrou @ Meowstic - cry2_uncomp Cry_Meowstic + cry_reverse Cry_Meowstic @ Aegislash - cry2_uncomp Cry_Aegislash + cry_reverse Cry_Aegislash @ Pumpkaboo - cry2_uncomp Cry_Pumpkaboo - cry2_uncomp Cry_Pumpkaboo - cry2_uncomp Cry_PumpkabooSuper + cry_reverse Cry_Pumpkaboo + cry_reverse Cry_Pumpkaboo + cry_reverse Cry_PumpkabooSuper @ Gourgeist - cry2_uncomp Cry_Gourgeist - cry2_uncomp Cry_Gourgeist - cry2_uncomp Cry_GourgeistSuper + cry_reverse Cry_Gourgeist + cry_reverse Cry_Gourgeist + cry_reverse Cry_GourgeistSuper @ Xerneas - cry2_uncomp Cry_Xerneas + cry_reverse Cry_Xerneas @ Zygarde - cry2_uncomp Cry_Zygarde10 - cry2_uncomp Cry_Zygarde10 - cry2_uncomp Cry_Zygarde - cry2_uncomp Cry_ZygardeComplete + cry_reverse Cry_Zygarde10 + cry_reverse Cry_Zygarde10 + cry_reverse Cry_Zygarde + cry_reverse Cry_ZygardeComplete @ Hoopa - cry2_uncomp Cry_HoopaUnbound + cry_reverse Cry_HoopaUnbound @ Oricorio - cry2_uncomp Cry_OricorioPomPom - cry2_uncomp Cry_OricorioPau - cry2_uncomp Cry_OricorioSensu + cry_reverse Cry_OricorioPomPom + cry_reverse Cry_OricorioPau + cry_reverse Cry_OricorioSensu @ Rockruff - cry2_uncomp Cry_Rockruff + cry_reverse Cry_Rockruff @ Lycanroc - cry2_uncomp Cry_LycanrocMidnight - cry2_uncomp Cry_LycanrocDusk + cry_reverse Cry_LycanrocMidnight + cry_reverse Cry_LycanrocDusk @ Wishiwashi - cry2_uncomp Cry_WishiwashiSchool + cry_reverse Cry_WishiwashiSchool @ Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally - cry2_uncomp Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally + cry_reverse Cry_Silvally @ Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior - cry2_uncomp Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior + cry_reverse Cry_Minior @ Mimikyu - cry2_uncomp Cry_Mimikyu + cry_reverse Cry_Mimikyu @ Necrozma - cry2_uncomp Cry_NecrozmaDuskMane - cry2_uncomp Cry_NecrozmaDawnWings - cry2_uncomp Cry_NecrozmaUltra + cry_reverse Cry_NecrozmaDuskMane + cry_reverse Cry_NecrozmaDawnWings + cry_reverse Cry_NecrozmaUltra @ Magearna - cry2_uncomp Cry_Magearna - @ Cramorant - cry2_uncomp Cry_Cramorant - cry2_uncomp Cry_Cramorant + cry_reverse Cry_Magearna + @ Cramorant + cry_reverse Cry_Cramorant + cry_reverse Cry_Cramorant @ Toxtricity - cry2_uncomp Cry_ToxtricityLowKey + cry_reverse Cry_ToxtricityLowKey @ Sinistea - cry2_uncomp Cry_Sinistea + cry_reverse Cry_Sinistea @ Polteageist - cry2_uncomp Cry_Polteageist + cry_reverse Cry_Polteageist @ Alcremie - cry2_uncomp Cry_Alcremie - cry2_uncomp Cry_Alcremie - cry2_uncomp Cry_Alcremie - cry2_uncomp Cry_Alcremie - cry2_uncomp Cry_Alcremie - cry2_uncomp Cry_Alcremie - cry2_uncomp Cry_Alcremie - cry2_uncomp Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie @ Eiscue - cry2_uncomp Cry_EiscueNoiceFace + cry_reverse Cry_EiscueNoiceFace @ Indeedee - cry2_uncomp Cry_IndeedeeFemale + cry_reverse Cry_IndeedeeFemale @ Morpeko - cry2_uncomp Cry_MorpekoHangry + cry_reverse Cry_MorpekoHangry @ Zacian - cry2_uncomp Cry_ZacianCrownedSword + cry_reverse Cry_ZacianCrownedSword @ Zamazenta - cry2_uncomp Cry_ZamazentaCrownedShield + cry_reverse Cry_ZamazentaCrownedShield @ Eternatus - cry2_uncomp Cry_EternatusEternamax + cry_reverse Cry_EternatusEternamax @ Urshifu - cry2_uncomp Cry_UrshifuRapidStrikeStyle + cry_reverse Cry_UrshifuRapidStrikeStyle @ Zarude - cry2_uncomp Cry_Zarude + cry_reverse Cry_Zarude @ Calyrex - cry2_uncomp Cry_CalyrexIceRider - cry2_uncomp Cry_CalyrexShadowRider + cry_reverse Cry_CalyrexIceRider + cry_reverse Cry_CalyrexShadowRider +.else + @ Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + @ Castform + cry_reverse Cry_Castform + cry_reverse Cry_Castform + cry_reverse Cry_Castform + @ Deoxys + cry_reverse Cry_Deoxys + cry_reverse Cry_Deoxys + cry_reverse Cry_Deoxys +.endif diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index ec4d9744a0..4ce03dbedd 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -283,24 +283,24 @@ DirectSoundWaveData_bicycle_bell:: .incbin "sound/direct_sound_samples/bicycle_bell.bin" .align 2 -DirectSoundWaveData_8725A2C:: - .incbin "sound/direct_sound_samples/8725A2C.bin" +DirectSoundWaveData_unknown_1:: + .incbin "sound/direct_sound_samples/unknown_01.bin" .align 2 DirectSoundWaveData_sc88pro_pizzicato_strings:: .incbin "sound/direct_sound_samples/sc88pro_pizzicato_strings.bin" .align 2 -DirectSoundWaveData_872762C:: - .incbin "sound/direct_sound_samples/872762C.bin" +DirectSoundWaveData_unknown_2:: + .incbin "sound/direct_sound_samples/unknown_02.bin" .align 2 -DirectSoundWaveData_872921C:: - .incbin "sound/direct_sound_samples/872921C.bin" +DirectSoundWaveData_unknown_3:: + .incbin "sound/direct_sound_samples/unknown_03.bin" .align 2 -DirectSoundWaveData_872A5D0:: - .incbin "sound/direct_sound_samples/872A5D0.bin" +DirectSoundWaveData_unknown_4:: + .incbin "sound/direct_sound_samples/unknown_04.bin" .align 2 DirectSoundWaveData_sc88pro_wind:: @@ -311,32 +311,32 @@ DirectSoundWaveData_sc88pro_bubbles:: .incbin "sound/direct_sound_samples/sc88pro_bubbles.bin" .align 2 -DirectSoundWaveData_872EEA8:: - .incbin "sound/direct_sound_samples/872EEA8.bin" +DirectSoundWaveData_unknown_5:: + .incbin "sound/direct_sound_samples/unknown_05.bin" .align 2 -DirectSoundWaveData_87301B0:: - .incbin "sound/direct_sound_samples/87301B0.bin" +DirectSoundWaveData_unknown_6:: + .incbin "sound/direct_sound_samples/unknown_06.bin" .align 2 DirectSoundWaveData_trinity_30303_mega_bass:: .incbin "sound/direct_sound_samples/trinity_30303_mega_bass.bin" .align 2 -DirectSoundWaveData_8734298:: - .incbin "sound/direct_sound_samples/8734298.bin" +DirectSoundWaveData_unknown_7:: + .incbin "sound/direct_sound_samples/unknown_07.bin" .align 2 -DirectSoundWaveData_87364A8:: - .incbin "sound/direct_sound_samples/87364A8.bin" +DirectSoundWaveData_unknown_8:: + .incbin "sound/direct_sound_samples/unknown_08.bin" .align 2 DirectSoundWaveData_sc88pro_tubular_bell:: .incbin "sound/direct_sound_samples/sc88pro_tubular_bell.bin" .align 2 -DirectSoundWaveData_87385E4:: - .incbin "sound/direct_sound_samples/87385E4.bin" +DirectSoundWaveData_unknown_9:: + .incbin "sound/direct_sound_samples/unknown_09.bin" .align 2 DirectSoundWaveData_trinity_big_boned:: @@ -351,40 +351,40 @@ DirectSoundWaveData_sc88pro_xylophone:: .incbin "sound/direct_sound_samples/sc88pro_xylophone.bin" .align 2 -DirectSoundWaveData_873ECD8:: - .incbin "sound/direct_sound_samples/873ECD8.bin" +DirectSoundWaveData_unknown_10:: + .incbin "sound/direct_sound_samples/unknown_10.bin" .align 2 -DirectSoundWaveData_8740818:: - .incbin "sound/direct_sound_samples/8740818.bin" +DirectSoundWaveData_unknown_11:: + .incbin "sound/direct_sound_samples/unknown_11.bin" .align 2 DirectSoundWaveData_sc88pro_accordion:: .incbin "sound/direct_sound_samples/sc88pro_accordion.bin" .align 2 -DirectSoundWaveData_87424B0:: - .incbin "sound/direct_sound_samples/87424B0.bin" +DirectSoundWaveData_unknown_12:: + .incbin "sound/direct_sound_samples/unknown_12.bin" .align 2 -DirectSoundWaveData_87430C0:: - .incbin "sound/direct_sound_samples/87430C0.bin" +DirectSoundWaveData_unknown_13:: + .incbin "sound/direct_sound_samples/unknown_13.bin" .align 2 -DirectSoundWaveData_8743C50:: - .incbin "sound/direct_sound_samples/8743C50.bin" +DirectSoundWaveData_unknown_14:: + .incbin "sound/direct_sound_samples/unknown_14.bin" .align 2 -DirectSoundWaveData_87446EC:: - .incbin "sound/direct_sound_samples/87446EC.bin" +DirectSoundWaveData_unknown_15:: + .incbin "sound/direct_sound_samples/unknown_15.bin" .align 2 -DirectSoundWaveData_8745034:: - .incbin "sound/direct_sound_samples/8745034.bin" +DirectSoundWaveData_unknown_16:: + .incbin "sound/direct_sound_samples/unknown_16.bin" .align 2 -DirectSoundWaveData_8745A7C:: - .incbin "sound/direct_sound_samples/8745A7C.bin" +DirectSoundWaveData_unknown_17:: + .incbin "sound/direct_sound_samples/unknown_17.bin" .align 2 Cry_Bulbasaur:: @@ -1930,6 +1930,7 @@ Cry_Jirachi:: Cry_Deoxys:: .incbin "sound/direct_sound_samples/cries/deoxys.bin" +.if P_NEW_POKEMON == TRUE .align 2 Cry_Turtwig:: .incbin "sound/direct_sound_samples/cries/turtwig.bin" @@ -2984,231 +2985,231 @@ Cry_Genesect:: .align 2 Cry_Chespin:: - .incbin "sound/direct_sound_samples/cries/uncomp_chespin.bin" + .incbin "sound/direct_sound_samples/cries/chespin.bin" .align 2 Cry_Quilladin:: - .incbin "sound/direct_sound_samples/cries/uncomp_quilladin.bin" + .incbin "sound/direct_sound_samples/cries/quilladin.bin" .align 2 Cry_Chesnaught:: - .incbin "sound/direct_sound_samples/cries/uncomp_chesnaught.bin" + .incbin "sound/direct_sound_samples/cries/chesnaught.bin" .align 2 Cry_Fennekin:: - .incbin "sound/direct_sound_samples/cries/uncomp_fennekin.bin" + .incbin "sound/direct_sound_samples/cries/fennekin.bin" .align 2 Cry_Braixen:: - .incbin "sound/direct_sound_samples/cries/uncomp_braixen.bin" + .incbin "sound/direct_sound_samples/cries/braixen.bin" .align 2 Cry_Delphox:: - .incbin "sound/direct_sound_samples/cries/uncomp_delphox.bin" + .incbin "sound/direct_sound_samples/cries/delphox.bin" .align 2 Cry_Froakie:: - .incbin "sound/direct_sound_samples/cries/uncomp_froakie.bin" + .incbin "sound/direct_sound_samples/cries/froakie.bin" .align 2 Cry_Frogadier:: - .incbin "sound/direct_sound_samples/cries/uncomp_frogadier.bin" + .incbin "sound/direct_sound_samples/cries/frogadier.bin" .align 2 Cry_Greninja:: - .incbin "sound/direct_sound_samples/cries/uncomp_greninja.bin" + .incbin "sound/direct_sound_samples/cries/greninja.bin" .align 2 Cry_Bunnelby:: - .incbin "sound/direct_sound_samples/cries/uncomp_bunnelby.bin" + .incbin "sound/direct_sound_samples/cries/bunnelby.bin" .align 2 Cry_Diggersby:: - .incbin "sound/direct_sound_samples/cries/uncomp_diggersby.bin" + .incbin "sound/direct_sound_samples/cries/diggersby.bin" .align 2 Cry_Fletchling:: - .incbin "sound/direct_sound_samples/cries/uncomp_fletchling.bin" + .incbin "sound/direct_sound_samples/cries/fletchling.bin" .align 2 Cry_Fletchinder:: - .incbin "sound/direct_sound_samples/cries/uncomp_fletchinder.bin" + .incbin "sound/direct_sound_samples/cries/fletchinder.bin" .align 2 Cry_Talonflame:: - .incbin "sound/direct_sound_samples/cries/uncomp_talonflame.bin" + .incbin "sound/direct_sound_samples/cries/talonflame.bin" .align 2 Cry_Scatterbug:: - .incbin "sound/direct_sound_samples/cries/uncomp_scatterbug.bin" + .incbin "sound/direct_sound_samples/cries/scatterbug.bin" .align 2 Cry_Spewpa:: - .incbin "sound/direct_sound_samples/cries/uncomp_spewpa.bin" + .incbin "sound/direct_sound_samples/cries/spewpa.bin" .align 2 Cry_Vivillon:: - .incbin "sound/direct_sound_samples/cries/uncomp_vivillon.bin" + .incbin "sound/direct_sound_samples/cries/vivillon.bin" .align 2 Cry_Litleo:: - .incbin "sound/direct_sound_samples/cries/uncomp_litleo.bin" + .incbin "sound/direct_sound_samples/cries/litleo.bin" .align 2 Cry_Pyroar:: - .incbin "sound/direct_sound_samples/cries/uncomp_pyroar.bin" + .incbin "sound/direct_sound_samples/cries/pyroar.bin" .align 2 Cry_Flabebe:: - .incbin "sound/direct_sound_samples/cries/uncomp_flabebe.bin" + .incbin "sound/direct_sound_samples/cries/flabebe.bin" .align 2 Cry_Floette:: - .incbin "sound/direct_sound_samples/cries/uncomp_floette.bin" + .incbin "sound/direct_sound_samples/cries/floette.bin" .align 2 Cry_Florges:: - .incbin "sound/direct_sound_samples/cries/uncomp_florges.bin" + .incbin "sound/direct_sound_samples/cries/florges.bin" .align 2 Cry_Skiddo:: - .incbin "sound/direct_sound_samples/cries/uncomp_skiddo.bin" + .incbin "sound/direct_sound_samples/cries/skiddo.bin" .align 2 Cry_Gogoat:: - .incbin "sound/direct_sound_samples/cries/uncomp_gogoat.bin" + .incbin "sound/direct_sound_samples/cries/gogoat.bin" .align 2 Cry_Pancham:: - .incbin "sound/direct_sound_samples/cries/uncomp_pancham.bin" + .incbin "sound/direct_sound_samples/cries/pancham.bin" .align 2 Cry_Pangoro:: - .incbin "sound/direct_sound_samples/cries/uncomp_pangoro.bin" + .incbin "sound/direct_sound_samples/cries/pangoro.bin" .align 2 Cry_Furfrou:: - .incbin "sound/direct_sound_samples/cries/uncomp_furfrou.bin" + .incbin "sound/direct_sound_samples/cries/furfrou.bin" .align 2 Cry_Espurr:: - .incbin "sound/direct_sound_samples/cries/uncomp_espurr.bin" + .incbin "sound/direct_sound_samples/cries/espurr.bin" .align 2 Cry_Meowstic:: - .incbin "sound/direct_sound_samples/cries/uncomp_meowstic.bin" + .incbin "sound/direct_sound_samples/cries/meowstic.bin" .align 2 Cry_Honedge:: - .incbin "sound/direct_sound_samples/cries/uncomp_honedge.bin" + .incbin "sound/direct_sound_samples/cries/honedge.bin" .align 2 Cry_Doublade:: - .incbin "sound/direct_sound_samples/cries/uncomp_doublade.bin" + .incbin "sound/direct_sound_samples/cries/doublade.bin" .align 2 Cry_Aegislash:: - .incbin "sound/direct_sound_samples/cries/uncomp_aegislash.bin" + .incbin "sound/direct_sound_samples/cries/aegislash.bin" .align 2 Cry_Spritzee:: - .incbin "sound/direct_sound_samples/cries/uncomp_spritzee.bin" + .incbin "sound/direct_sound_samples/cries/spritzee.bin" .align 2 Cry_Aromatisse:: - .incbin "sound/direct_sound_samples/cries/uncomp_aromatisse.bin" + .incbin "sound/direct_sound_samples/cries/aromatisse.bin" .align 2 Cry_Swirlix:: - .incbin "sound/direct_sound_samples/cries/uncomp_swirlix.bin" + .incbin "sound/direct_sound_samples/cries/swirlix.bin" .align 2 Cry_Slurpuff:: - .incbin "sound/direct_sound_samples/cries/uncomp_slurpuff.bin" + .incbin "sound/direct_sound_samples/cries/slurpuff.bin" .align 2 Cry_Inkay:: - .incbin "sound/direct_sound_samples/cries/uncomp_inkay.bin" + .incbin "sound/direct_sound_samples/cries/inkay.bin" .align 2 Cry_Malamar:: - .incbin "sound/direct_sound_samples/cries/uncomp_malamar.bin" + .incbin "sound/direct_sound_samples/cries/malamar.bin" .align 2 Cry_Binacle:: - .incbin "sound/direct_sound_samples/cries/uncomp_binacle.bin" + .incbin "sound/direct_sound_samples/cries/binacle.bin" .align 2 Cry_Barbaracle:: - .incbin "sound/direct_sound_samples/cries/uncomp_barbaracle.bin" + .incbin "sound/direct_sound_samples/cries/barbaracle.bin" .align 2 Cry_Skrelp:: - .incbin "sound/direct_sound_samples/cries/uncomp_skrelp.bin" + .incbin "sound/direct_sound_samples/cries/skrelp.bin" .align 2 Cry_Dragalge:: - .incbin "sound/direct_sound_samples/cries/uncomp_dragalge.bin" + .incbin "sound/direct_sound_samples/cries/dragalge.bin" .align 2 Cry_Clauncher:: - .incbin "sound/direct_sound_samples/cries/uncomp_clauncher.bin" + .incbin "sound/direct_sound_samples/cries/clauncher.bin" .align 2 Cry_Clawitzer:: - .incbin "sound/direct_sound_samples/cries/uncomp_clawitzer.bin" + .incbin "sound/direct_sound_samples/cries/clawitzer.bin" .align 2 Cry_Helioptile:: - .incbin "sound/direct_sound_samples/cries/uncomp_helioptile.bin" + .incbin "sound/direct_sound_samples/cries/helioptile.bin" .align 2 Cry_Heliolisk:: - .incbin "sound/direct_sound_samples/cries/uncomp_heliolisk.bin" + .incbin "sound/direct_sound_samples/cries/heliolisk.bin" .align 2 Cry_Tyrunt:: - .incbin "sound/direct_sound_samples/cries/uncomp_tyrunt.bin" + .incbin "sound/direct_sound_samples/cries/tyrunt.bin" .align 2 Cry_Tyrantrum:: - .incbin "sound/direct_sound_samples/cries/uncomp_tyrantrum.bin" + .incbin "sound/direct_sound_samples/cries/tyrantrum.bin" .align 2 Cry_Amaura:: - .incbin "sound/direct_sound_samples/cries/uncomp_amaura.bin" + .incbin "sound/direct_sound_samples/cries/amaura.bin" .align 2 Cry_Aurorus:: - .incbin "sound/direct_sound_samples/cries/uncomp_aurorus.bin" + .incbin "sound/direct_sound_samples/cries/aurorus.bin" .align 2 Cry_Sylveon:: - .incbin "sound/direct_sound_samples/cries/uncomp_sylveon.bin" + .incbin "sound/direct_sound_samples/cries/sylveon.bin" .align 2 Cry_Hawlucha:: - .incbin "sound/direct_sound_samples/cries/uncomp_hawlucha.bin" + .incbin "sound/direct_sound_samples/cries/hawlucha.bin" .align 2 Cry_Dedenne:: - .incbin "sound/direct_sound_samples/cries/uncomp_dedenne.bin" + .incbin "sound/direct_sound_samples/cries/dedenne.bin" .align 2 Cry_Carbink:: - .incbin "sound/direct_sound_samples/cries/uncomp_carbink.bin" + .incbin "sound/direct_sound_samples/cries/carbink.bin" .align 2 Cry_Goomy:: - .incbin "sound/direct_sound_samples/cries/uncomp_goomy.bin" + .incbin "sound/direct_sound_samples/cries/goomy.bin" .align 2 Cry_Sliggoo:: - .incbin "sound/direct_sound_samples/cries/uncomp_sliggoo.bin" + .incbin "sound/direct_sound_samples/cries/sliggoo.bin" .align 2 Cry_Goodra:: - .incbin "sound/direct_sound_samples/cries/uncomp_goodra.bin" + .incbin "sound/direct_sound_samples/cries/goodra.bin" .align 2 Cry_Klefki:: @@ -3216,971 +3217,1000 @@ Cry_Klefki:: .align 2 Cry_Phantump:: - .incbin "sound/direct_sound_samples/cries/uncomp_phantump.bin" + .incbin "sound/direct_sound_samples/cries/phantump.bin" .align 2 Cry_Trevenant:: - .incbin "sound/direct_sound_samples/cries/uncomp_trevenant.bin" + .incbin "sound/direct_sound_samples/cries/trevenant.bin" .align 2 Cry_Pumpkaboo:: - .incbin "sound/direct_sound_samples/cries/uncomp_pumpkaboo.bin" + .incbin "sound/direct_sound_samples/cries/pumpkaboo.bin" .align 2 Cry_Gourgeist:: - .incbin "sound/direct_sound_samples/cries/uncomp_gourgeist.bin" + .incbin "sound/direct_sound_samples/cries/gourgeist.bin" .align 2 Cry_Bergmite:: - .incbin "sound/direct_sound_samples/cries/uncomp_bergmite.bin" + .incbin "sound/direct_sound_samples/cries/bergmite.bin" .align 2 Cry_Avalugg:: - .incbin "sound/direct_sound_samples/cries/uncomp_avalugg.bin" + .incbin "sound/direct_sound_samples/cries/avalugg.bin" .align 2 Cry_Noibat:: - .incbin "sound/direct_sound_samples/cries/uncomp_noibat.bin" + .incbin "sound/direct_sound_samples/cries/noibat.bin" .align 2 Cry_Noivern:: - .incbin "sound/direct_sound_samples/cries/uncomp_noivern.bin" + .incbin "sound/direct_sound_samples/cries/noivern.bin" .align 2 Cry_Xerneas:: - .incbin "sound/direct_sound_samples/cries/uncomp_xerneas.bin" + .incbin "sound/direct_sound_samples/cries/xerneas.bin" .align 2 Cry_Yveltal:: - .incbin "sound/direct_sound_samples/cries/uncomp_yveltal.bin" + .incbin "sound/direct_sound_samples/cries/yveltal.bin" .align 2 Cry_Zygarde:: - .incbin "sound/direct_sound_samples/cries/uncomp_zygarde.bin" + .incbin "sound/direct_sound_samples/cries/zygarde.bin" .align 2 Cry_Diancie:: - .incbin "sound/direct_sound_samples/cries/uncomp_diancie.bin" + .incbin "sound/direct_sound_samples/cries/diancie.bin" .align 2 Cry_Hoopa:: - .incbin "sound/direct_sound_samples/cries/uncomp_hoopa.bin" + .incbin "sound/direct_sound_samples/cries/hoopa.bin" .align 2 Cry_Volcanion:: - .incbin "sound/direct_sound_samples/cries/uncomp_volcanion.bin" + .incbin "sound/direct_sound_samples/cries/volcanion.bin" .align 2 Cry_Rowlet:: - .incbin "sound/direct_sound_samples/cries/uncomp_rowlet.bin" + .incbin "sound/direct_sound_samples/cries/rowlet.bin" .align 2 Cry_Dartrix:: - .incbin "sound/direct_sound_samples/cries/uncomp_dartrix.bin" + .incbin "sound/direct_sound_samples/cries/dartrix.bin" .align 2 Cry_Decidueye:: - .incbin "sound/direct_sound_samples/cries/uncomp_decidueye.bin" + .incbin "sound/direct_sound_samples/cries/decidueye.bin" .align 2 Cry_Litten:: - .incbin "sound/direct_sound_samples/cries/uncomp_litten.bin" + .incbin "sound/direct_sound_samples/cries/litten.bin" .align 2 Cry_Torracat:: - .incbin "sound/direct_sound_samples/cries/uncomp_torracat.bin" + .incbin "sound/direct_sound_samples/cries/torracat.bin" .align 2 Cry_Incineroar:: - .incbin "sound/direct_sound_samples/cries/uncomp_incineroar.bin" + .incbin "sound/direct_sound_samples/cries/incineroar.bin" .align 2 Cry_Popplio:: - .incbin "sound/direct_sound_samples/cries/uncomp_popplio.bin" + .incbin "sound/direct_sound_samples/cries/popplio.bin" .align 2 Cry_Brionne:: - .incbin "sound/direct_sound_samples/cries/uncomp_brionne.bin" + .incbin "sound/direct_sound_samples/cries/brionne.bin" .align 2 Cry_Primarina:: - .incbin "sound/direct_sound_samples/cries/uncomp_primarina.bin" + .incbin "sound/direct_sound_samples/cries/primarina.bin" .align 2 Cry_Pikipek:: - .incbin "sound/direct_sound_samples/cries/uncomp_pikipek.bin" + .incbin "sound/direct_sound_samples/cries/pikipek.bin" .align 2 Cry_Trumbeak:: - .incbin "sound/direct_sound_samples/cries/uncomp_trumbeak.bin" + .incbin "sound/direct_sound_samples/cries/trumbeak.bin" .align 2 Cry_Toucannon:: - .incbin "sound/direct_sound_samples/cries/uncomp_toucannon.bin" + .incbin "sound/direct_sound_samples/cries/toucannon.bin" .align 2 Cry_Yungoos:: - .incbin "sound/direct_sound_samples/cries/uncomp_yungoos.bin" + .incbin "sound/direct_sound_samples/cries/yungoos.bin" .align 2 Cry_Gumshoos:: - .incbin "sound/direct_sound_samples/cries/uncomp_gumshoos.bin" + .incbin "sound/direct_sound_samples/cries/gumshoos.bin" .align 2 Cry_Grubbin:: - .incbin "sound/direct_sound_samples/cries/uncomp_grubbin.bin" + .incbin "sound/direct_sound_samples/cries/grubbin.bin" .align 2 Cry_Charjabug:: - .incbin "sound/direct_sound_samples/cries/uncomp_charjabug.bin" + .incbin "sound/direct_sound_samples/cries/charjabug.bin" .align 2 Cry_Vikavolt:: - .incbin "sound/direct_sound_samples/cries/uncomp_vikavolt.bin" + .incbin "sound/direct_sound_samples/cries/vikavolt.bin" .align 2 Cry_Crabrawler:: - .incbin "sound/direct_sound_samples/cries/uncomp_crabrawler.bin" + .incbin "sound/direct_sound_samples/cries/crabrawler.bin" .align 2 Cry_Crabominable:: - .incbin "sound/direct_sound_samples/cries/uncomp_crabominable.bin" + .incbin "sound/direct_sound_samples/cries/crabominable.bin" .align 2 Cry_Oricorio:: - .incbin "sound/direct_sound_samples/cries/uncomp_oricorio.bin" + .incbin "sound/direct_sound_samples/cries/oricorio.bin" .align 2 Cry_Cutiefly:: - .incbin "sound/direct_sound_samples/cries/uncomp_cutiefly.bin" + .incbin "sound/direct_sound_samples/cries/cutiefly.bin" .align 2 Cry_Ribombee:: - .incbin "sound/direct_sound_samples/cries/uncomp_ribombee.bin" + .incbin "sound/direct_sound_samples/cries/ribombee.bin" .align 2 Cry_Rockruff:: - .incbin "sound/direct_sound_samples/cries/uncomp_rockruff.bin" + .incbin "sound/direct_sound_samples/cries/rockruff.bin" .align 2 Cry_Lycanroc:: - .incbin "sound/direct_sound_samples/cries/uncomp_lycanroc.bin" + .incbin "sound/direct_sound_samples/cries/lycanroc.bin" .align 2 Cry_Wishiwashi:: - .incbin "sound/direct_sound_samples/cries/uncomp_wishiwashi.bin" + .incbin "sound/direct_sound_samples/cries/wishiwashi.bin" .align 2 Cry_Mareanie:: - .incbin "sound/direct_sound_samples/cries/uncomp_mareanie.bin" + .incbin "sound/direct_sound_samples/cries/mareanie.bin" .align 2 Cry_Toxapex:: - .incbin "sound/direct_sound_samples/cries/uncomp_toxapex.bin" + .incbin "sound/direct_sound_samples/cries/toxapex.bin" .align 2 Cry_Mudbray:: - .incbin "sound/direct_sound_samples/cries/uncomp_mudbray.bin" + .incbin "sound/direct_sound_samples/cries/mudbray.bin" .align 2 Cry_Mudsdale:: - .incbin "sound/direct_sound_samples/cries/uncomp_mudsdale.bin" + .incbin "sound/direct_sound_samples/cries/mudsdale.bin" .align 2 Cry_Dewpider:: - .incbin "sound/direct_sound_samples/cries/uncomp_dewpider.bin" + .incbin "sound/direct_sound_samples/cries/dewpider.bin" .align 2 Cry_Araquanid:: - .incbin "sound/direct_sound_samples/cries/uncomp_araquanid.bin" + .incbin "sound/direct_sound_samples/cries/araquanid.bin" .align 2 Cry_Fomantis:: - .incbin "sound/direct_sound_samples/cries/uncomp_fomantis.bin" + .incbin "sound/direct_sound_samples/cries/fomantis.bin" .align 2 Cry_Lurantis:: - .incbin "sound/direct_sound_samples/cries/uncomp_lurantis.bin" + .incbin "sound/direct_sound_samples/cries/lurantis.bin" .align 2 Cry_Morelull:: - .incbin "sound/direct_sound_samples/cries/uncomp_morelull.bin" + .incbin "sound/direct_sound_samples/cries/morelull.bin" .align 2 Cry_Shiinotic:: - .incbin "sound/direct_sound_samples/cries/uncomp_shiinotic.bin" + .incbin "sound/direct_sound_samples/cries/shiinotic.bin" .align 2 Cry_Salandit:: - .incbin "sound/direct_sound_samples/cries/uncomp_salandit.bin" + .incbin "sound/direct_sound_samples/cries/salandit.bin" .align 2 Cry_Salazzle:: - .incbin "sound/direct_sound_samples/cries/uncomp_salazzle.bin" + .incbin "sound/direct_sound_samples/cries/salazzle.bin" .align 2 Cry_Stufful:: - .incbin "sound/direct_sound_samples/cries/uncomp_stufful.bin" + .incbin "sound/direct_sound_samples/cries/stufful.bin" .align 2 Cry_Bewear:: - .incbin "sound/direct_sound_samples/cries/uncomp_bewear.bin" + .incbin "sound/direct_sound_samples/cries/bewear.bin" .align 2 Cry_Bounsweet:: - .incbin "sound/direct_sound_samples/cries/uncomp_bounsweet.bin" + .incbin "sound/direct_sound_samples/cries/bounsweet.bin" .align 2 Cry_Steenee:: - .incbin "sound/direct_sound_samples/cries/uncomp_steenee.bin" + .incbin "sound/direct_sound_samples/cries/steenee.bin" .align 2 Cry_Tsareena:: - .incbin "sound/direct_sound_samples/cries/uncomp_tsareena.bin" + .incbin "sound/direct_sound_samples/cries/tsareena.bin" .align 2 Cry_Comfey:: - .incbin "sound/direct_sound_samples/cries/uncomp_comfey.bin" + .incbin "sound/direct_sound_samples/cries/comfey.bin" .align 2 Cry_Oranguru:: - .incbin "sound/direct_sound_samples/cries/uncomp_oranguru.bin" + .incbin "sound/direct_sound_samples/cries/oranguru.bin" .align 2 Cry_Passimian:: - .incbin "sound/direct_sound_samples/cries/uncomp_passimian.bin" + .incbin "sound/direct_sound_samples/cries/passimian.bin" .align 2 Cry_Wimpod:: - .incbin "sound/direct_sound_samples/cries/uncomp_wimpod.bin" + .incbin "sound/direct_sound_samples/cries/wimpod.bin" .align 2 Cry_Golisopod:: - .incbin "sound/direct_sound_samples/cries/uncomp_golisopod.bin" + .incbin "sound/direct_sound_samples/cries/golisopod.bin" .align 2 Cry_Sandygast:: - .incbin "sound/direct_sound_samples/cries/uncomp_sandygast.bin" + .incbin "sound/direct_sound_samples/cries/sandygast.bin" .align 2 Cry_Palossand:: - .incbin "sound/direct_sound_samples/cries/uncomp_palossand.bin" + .incbin "sound/direct_sound_samples/cries/palossand.bin" .align 2 Cry_Pyukumuku:: - .incbin "sound/direct_sound_samples/cries/uncomp_pyukumuku.bin" + .incbin "sound/direct_sound_samples/cries/pyukumuku.bin" .align 2 Cry_TypeNull:: - .incbin "sound/direct_sound_samples/cries/uncomp_type_null.bin" + .incbin "sound/direct_sound_samples/cries/type_null.bin" .align 2 Cry_Silvally:: - .incbin "sound/direct_sound_samples/cries/uncomp_silvally.bin" + .incbin "sound/direct_sound_samples/cries/silvally.bin" .align 2 Cry_Minior:: - .incbin "sound/direct_sound_samples/cries/uncomp_minior.bin" + .incbin "sound/direct_sound_samples/cries/minior.bin" .align 2 Cry_Komala:: - .incbin "sound/direct_sound_samples/cries/uncomp_komala.bin" + .incbin "sound/direct_sound_samples/cries/komala.bin" .align 2 Cry_Turtonator:: - .incbin "sound/direct_sound_samples/cries/uncomp_turtonator.bin" + .incbin "sound/direct_sound_samples/cries/turtonator.bin" .align 2 Cry_Togedemaru:: - .incbin "sound/direct_sound_samples/cries/uncomp_togedemaru.bin" + .incbin "sound/direct_sound_samples/cries/togedemaru.bin" .align 2 Cry_Mimikyu:: - .incbin "sound/direct_sound_samples/cries/uncomp_mimikyu.bin" + .incbin "sound/direct_sound_samples/cries/mimikyu.bin" .align 2 Cry_Bruxish:: - .incbin "sound/direct_sound_samples/cries/uncomp_bruxish.bin" + .incbin "sound/direct_sound_samples/cries/bruxish.bin" .align 2 Cry_Drampa:: - .incbin "sound/direct_sound_samples/cries/uncomp_drampa.bin" + .incbin "sound/direct_sound_samples/cries/drampa.bin" .align 2 Cry_Dhelmise:: - .incbin "sound/direct_sound_samples/cries/uncomp_dhelmise.bin" + .incbin "sound/direct_sound_samples/cries/dhelmise.bin" .align 2 Cry_Jangmoo:: - .incbin "sound/direct_sound_samples/cries/uncomp_jangmo_o.bin" + .incbin "sound/direct_sound_samples/cries/jangmo_o.bin" .align 2 Cry_Hakamoo:: - .incbin "sound/direct_sound_samples/cries/uncomp_hakamo_o.bin" + .incbin "sound/direct_sound_samples/cries/hakamo_o.bin" .align 2 Cry_Kommoo:: - .incbin "sound/direct_sound_samples/cries/uncomp_kommo_o.bin" + .incbin "sound/direct_sound_samples/cries/kommo_o.bin" .align 2 Cry_TapuKoko:: - .incbin "sound/direct_sound_samples/cries/uncomp_tapu_koko.bin" + .incbin "sound/direct_sound_samples/cries/tapu_koko.bin" .align 2 Cry_TapuLele:: - .incbin "sound/direct_sound_samples/cries/uncomp_tapu_lele.bin" + .incbin "sound/direct_sound_samples/cries/tapu_lele.bin" .align 2 Cry_TapuBulu:: - .incbin "sound/direct_sound_samples/cries/uncomp_tapu_bulu.bin" + .incbin "sound/direct_sound_samples/cries/tapu_bulu.bin" .align 2 Cry_TapuFini:: - .incbin "sound/direct_sound_samples/cries/uncomp_tapu_fini.bin" + .incbin "sound/direct_sound_samples/cries/tapu_fini.bin" .align 2 Cry_Cosmog:: - .incbin "sound/direct_sound_samples/cries/uncomp_cosmog.bin" + .incbin "sound/direct_sound_samples/cries/cosmog.bin" .align 2 Cry_Cosmoem:: - .incbin "sound/direct_sound_samples/cries/uncomp_cosmoem.bin" + .incbin "sound/direct_sound_samples/cries/cosmoem.bin" .align 2 Cry_Solgaleo:: - .incbin "sound/direct_sound_samples/cries/uncomp_solgaleo.bin" + .incbin "sound/direct_sound_samples/cries/solgaleo.bin" .align 2 Cry_Lunala:: - .incbin "sound/direct_sound_samples/cries/uncomp_lunala.bin" + .incbin "sound/direct_sound_samples/cries/lunala.bin" .align 2 Cry_Nihilego:: - .incbin "sound/direct_sound_samples/cries/uncomp_nihilego.bin" + .incbin "sound/direct_sound_samples/cries/nihilego.bin" .align 2 Cry_Buzzwole:: - .incbin "sound/direct_sound_samples/cries/uncomp_buzzwole.bin" + .incbin "sound/direct_sound_samples/cries/buzzwole.bin" .align 2 Cry_Pheromosa:: - .incbin "sound/direct_sound_samples/cries/uncomp_pheromosa.bin" + .incbin "sound/direct_sound_samples/cries/pheromosa.bin" .align 2 Cry_Xurkitree:: - .incbin "sound/direct_sound_samples/cries/uncomp_xurkitree.bin" + .incbin "sound/direct_sound_samples/cries/xurkitree.bin" .align 2 Cry_Celesteela:: - .incbin "sound/direct_sound_samples/cries/uncomp_celesteela.bin" + .incbin "sound/direct_sound_samples/cries/celesteela.bin" .align 2 Cry_Kartana:: - .incbin "sound/direct_sound_samples/cries/uncomp_kartana.bin" + .incbin "sound/direct_sound_samples/cries/kartana.bin" .align 2 Cry_Guzzlord:: - .incbin "sound/direct_sound_samples/cries/uncomp_guzzlord.bin" + .incbin "sound/direct_sound_samples/cries/guzzlord.bin" .align 2 Cry_Necrozma:: - .incbin "sound/direct_sound_samples/cries/uncomp_necrozma.bin" + .incbin "sound/direct_sound_samples/cries/necrozma.bin" .align 2 Cry_Magearna:: - .incbin "sound/direct_sound_samples/cries/uncomp_magearna.bin" + .incbin "sound/direct_sound_samples/cries/magearna.bin" .align 2 Cry_Marshadow:: - .incbin "sound/direct_sound_samples/cries/uncomp_marshadow.bin" + .incbin "sound/direct_sound_samples/cries/marshadow.bin" .align 2 Cry_Poipole:: - .incbin "sound/direct_sound_samples/cries/uncomp_poipole.bin" + .incbin "sound/direct_sound_samples/cries/poipole.bin" .align 2 Cry_Naganadel:: - .incbin "sound/direct_sound_samples/cries/uncomp_naganadel.bin" + .incbin "sound/direct_sound_samples/cries/naganadel.bin" .align 2 Cry_Stakataka:: - .incbin "sound/direct_sound_samples/cries/uncomp_stakataka.bin" + .incbin "sound/direct_sound_samples/cries/stakataka.bin" .align 2 Cry_Blacephalon:: - .incbin "sound/direct_sound_samples/cries/uncomp_blacephalon.bin" + .incbin "sound/direct_sound_samples/cries/blacephalon.bin" .align 2 Cry_Zeraora:: - .incbin "sound/direct_sound_samples/cries/uncomp_zeraora.bin" + .incbin "sound/direct_sound_samples/cries/zeraora.bin" .align 2 Cry_Meltan:: - .incbin "sound/direct_sound_samples/cries/uncomp_meltan.bin" + .incbin "sound/direct_sound_samples/cries/meltan.bin" .align 2 Cry_Melmetal:: - .incbin "sound/direct_sound_samples/cries/uncomp_melmetal.bin" + .incbin "sound/direct_sound_samples/cries/melmetal.bin" .align 2 Cry_Grookey:: - .incbin "sound/direct_sound_samples/cries/uncomp_grookey.bin" + .incbin "sound/direct_sound_samples/cries/grookey.bin" .align 2 Cry_Thwackey:: - .incbin "sound/direct_sound_samples/cries/uncomp_thwackey.bin" + .incbin "sound/direct_sound_samples/cries/thwackey.bin" .align 2 Cry_Rillaboom:: - .incbin "sound/direct_sound_samples/cries/uncomp_rillaboom.bin" + .incbin "sound/direct_sound_samples/cries/rillaboom.bin" .align 2 Cry_Scorbunny:: - .incbin "sound/direct_sound_samples/cries/uncomp_scorbunny.bin" + .incbin "sound/direct_sound_samples/cries/scorbunny.bin" .align 2 Cry_Raboot:: - .incbin "sound/direct_sound_samples/cries/uncomp_raboot.bin" + .incbin "sound/direct_sound_samples/cries/raboot.bin" .align 2 Cry_Cinderace:: - .incbin "sound/direct_sound_samples/cries/uncomp_cinderace.bin" + .incbin "sound/direct_sound_samples/cries/cinderace.bin" .align 2 Cry_Sobble:: - .incbin "sound/direct_sound_samples/cries/uncomp_sobble.bin" + .incbin "sound/direct_sound_samples/cries/sobble.bin" .align 2 Cry_Drizzile:: - .incbin "sound/direct_sound_samples/cries/uncomp_drizzile.bin" + .incbin "sound/direct_sound_samples/cries/drizzile.bin" .align 2 Cry_Inteleon:: - .incbin "sound/direct_sound_samples/cries/uncomp_inteleon.bin" + .incbin "sound/direct_sound_samples/cries/inteleon.bin" .align 2 Cry_Skwovet:: - .incbin "sound/direct_sound_samples/cries/uncomp_skwovet.bin" + .incbin "sound/direct_sound_samples/cries/skwovet.bin" .align 2 Cry_Greedent:: - .incbin "sound/direct_sound_samples/cries/uncomp_greedent.bin" + .incbin "sound/direct_sound_samples/cries/greedent.bin" .align 2 Cry_Rookidee:: - .incbin "sound/direct_sound_samples/cries/uncomp_rookidee.bin" + .incbin "sound/direct_sound_samples/cries/rookidee.bin" .align 2 Cry_Corvisquire:: - .incbin "sound/direct_sound_samples/cries/uncomp_corvisquire.bin" + .incbin "sound/direct_sound_samples/cries/corvisquire.bin" .align 2 Cry_Corviknight:: - .incbin "sound/direct_sound_samples/cries/uncomp_corviknight.bin" + .incbin "sound/direct_sound_samples/cries/corviknight.bin" .align 2 Cry_Blipbug:: - .incbin "sound/direct_sound_samples/cries/uncomp_blipbug.bin" + .incbin "sound/direct_sound_samples/cries/blipbug.bin" .align 2 Cry_Dottler:: - .incbin "sound/direct_sound_samples/cries/uncomp_dottler.bin" + .incbin "sound/direct_sound_samples/cries/dottler.bin" .align 2 Cry_Orbeetle:: - .incbin "sound/direct_sound_samples/cries/uncomp_orbeetle.bin" + .incbin "sound/direct_sound_samples/cries/orbeetle.bin" .align 2 Cry_Nickit:: - .incbin "sound/direct_sound_samples/cries/uncomp_nickit.bin" + .incbin "sound/direct_sound_samples/cries/nickit.bin" .align 2 Cry_Thievul:: - .incbin "sound/direct_sound_samples/cries/uncomp_thievul.bin" + .incbin "sound/direct_sound_samples/cries/thievul.bin" .align 2 Cry_Gossifleur:: - .incbin "sound/direct_sound_samples/cries/uncomp_gossifleur.bin" + .incbin "sound/direct_sound_samples/cries/gossifleur.bin" .align 2 Cry_Eldegoss:: - .incbin "sound/direct_sound_samples/cries/uncomp_eldegoss.bin" + .incbin "sound/direct_sound_samples/cries/eldegoss.bin" .align 2 Cry_Wooloo:: - .incbin "sound/direct_sound_samples/cries/uncomp_wooloo.bin" + .incbin "sound/direct_sound_samples/cries/wooloo.bin" .align 2 Cry_Dubwool:: - .incbin "sound/direct_sound_samples/cries/uncomp_dubwool.bin" + .incbin "sound/direct_sound_samples/cries/dubwool.bin" .align 2 Cry_Chewtle:: - .incbin "sound/direct_sound_samples/cries/uncomp_chewtle.bin" + .incbin "sound/direct_sound_samples/cries/chewtle.bin" .align 2 Cry_Drednaw:: - .incbin "sound/direct_sound_samples/cries/uncomp_drednaw.bin" + .incbin "sound/direct_sound_samples/cries/drednaw.bin" .align 2 Cry_Yamper:: - .incbin "sound/direct_sound_samples/cries/uncomp_yamper.bin" + .incbin "sound/direct_sound_samples/cries/yamper.bin" .align 2 Cry_Boltund:: - .incbin "sound/direct_sound_samples/cries/uncomp_boltund.bin" + .incbin "sound/direct_sound_samples/cries/boltund.bin" .align 2 Cry_Rolycoly:: - .incbin "sound/direct_sound_samples/cries/uncomp_rolycoly.bin" + .incbin "sound/direct_sound_samples/cries/rolycoly.bin" .align 2 Cry_Carkol:: - .incbin "sound/direct_sound_samples/cries/uncomp_carkol.bin" + .incbin "sound/direct_sound_samples/cries/carkol.bin" .align 2 Cry_Coalossal:: - .incbin "sound/direct_sound_samples/cries/uncomp_coalossal.bin" + .incbin "sound/direct_sound_samples/cries/coalossal.bin" .align 2 Cry_Applin:: - .incbin "sound/direct_sound_samples/cries/uncomp_applin.bin" + .incbin "sound/direct_sound_samples/cries/applin.bin" .align 2 Cry_Flapple:: - .incbin "sound/direct_sound_samples/cries/uncomp_flapple.bin" + .incbin "sound/direct_sound_samples/cries/flapple.bin" .align 2 Cry_Appletun:: - .incbin "sound/direct_sound_samples/cries/uncomp_appletun.bin" + .incbin "sound/direct_sound_samples/cries/appletun.bin" .align 2 Cry_Silicobra:: - .incbin "sound/direct_sound_samples/cries/uncomp_silicobra.bin" + .incbin "sound/direct_sound_samples/cries/silicobra.bin" .align 2 Cry_Sandaconda:: - .incbin "sound/direct_sound_samples/cries/uncomp_sandaconda.bin" + .incbin "sound/direct_sound_samples/cries/sandaconda.bin" .align 2 Cry_Cramorant:: - .incbin "sound/direct_sound_samples/cries/uncomp_cramorant.bin" + .incbin "sound/direct_sound_samples/cries/cramorant.bin" .align 2 Cry_Arrokuda:: - .incbin "sound/direct_sound_samples/cries/uncomp_arrokuda.bin" + .incbin "sound/direct_sound_samples/cries/arrokuda.bin" .align 2 Cry_Barraskewda:: - .incbin "sound/direct_sound_samples/cries/uncomp_barraskewda.bin" + .incbin "sound/direct_sound_samples/cries/barraskewda.bin" .align 2 Cry_Toxel:: - .incbin "sound/direct_sound_samples/cries/uncomp_toxel.bin" + .incbin "sound/direct_sound_samples/cries/toxel.bin" .align 2 Cry_Toxtricity:: - .incbin "sound/direct_sound_samples/cries/uncomp_toxtricity.bin" + .incbin "sound/direct_sound_samples/cries/toxtricity.bin" .align 2 Cry_Sizzlipede:: - .incbin "sound/direct_sound_samples/cries/uncomp_sizzlipede.bin" + .incbin "sound/direct_sound_samples/cries/sizzlipede.bin" .align 2 Cry_Centiskorch:: - .incbin "sound/direct_sound_samples/cries/uncomp_centiskorch.bin" + .incbin "sound/direct_sound_samples/cries/centiskorch.bin" .align 2 Cry_Clobbopus:: - .incbin "sound/direct_sound_samples/cries/uncomp_clobbopus.bin" + .incbin "sound/direct_sound_samples/cries/clobbopus.bin" .align 2 Cry_Grapploct:: - .incbin "sound/direct_sound_samples/cries/uncomp_grapploct.bin" + .incbin "sound/direct_sound_samples/cries/grapploct.bin" .align 2 Cry_Sinistea:: - .incbin "sound/direct_sound_samples/cries/uncomp_sinistea.bin" + .incbin "sound/direct_sound_samples/cries/sinistea.bin" .align 2 Cry_Polteageist:: - .incbin "sound/direct_sound_samples/cries/uncomp_polteageist.bin" + .incbin "sound/direct_sound_samples/cries/polteageist.bin" .align 2 Cry_Hatenna:: - .incbin "sound/direct_sound_samples/cries/uncomp_hatenna.bin" + .incbin "sound/direct_sound_samples/cries/hatenna.bin" .align 2 Cry_Hattrem:: - .incbin "sound/direct_sound_samples/cries/uncomp_hattrem.bin" + .incbin "sound/direct_sound_samples/cries/hattrem.bin" .align 2 Cry_Hatterene:: - .incbin "sound/direct_sound_samples/cries/uncomp_hatterene.bin" + .incbin "sound/direct_sound_samples/cries/hatterene.bin" .align 2 Cry_Impidimp:: - .incbin "sound/direct_sound_samples/cries/uncomp_impidimp.bin" + .incbin "sound/direct_sound_samples/cries/impidimp.bin" .align 2 Cry_Morgrem:: - .incbin "sound/direct_sound_samples/cries/uncomp_morgrem.bin" + .incbin "sound/direct_sound_samples/cries/morgrem.bin" .align 2 Cry_Grimmsnarl:: - .incbin "sound/direct_sound_samples/cries/uncomp_grimmsnarl.bin" + .incbin "sound/direct_sound_samples/cries/grimmsnarl.bin" .align 2 Cry_Obstagoon:: - .incbin "sound/direct_sound_samples/cries/uncomp_obstagoon.bin" + .incbin "sound/direct_sound_samples/cries/obstagoon.bin" .align 2 Cry_Perrserker:: - .incbin "sound/direct_sound_samples/cries/uncomp_perrserker.bin" + .incbin "sound/direct_sound_samples/cries/perrserker.bin" .align 2 Cry_Cursola:: - .incbin "sound/direct_sound_samples/cries/uncomp_cursola.bin" + .incbin "sound/direct_sound_samples/cries/cursola.bin" .align 2 Cry_Sirfetchd:: - .incbin "sound/direct_sound_samples/cries/uncomp_sirfetchd.bin" + .incbin "sound/direct_sound_samples/cries/sirfetchd.bin" .align 2 Cry_MrRime:: - .incbin "sound/direct_sound_samples/cries/uncomp_mr_rime.bin" + .incbin "sound/direct_sound_samples/cries/mr_rime.bin" .align 2 Cry_Runerigus:: - .incbin "sound/direct_sound_samples/cries/uncomp_runerigus.bin" + .incbin "sound/direct_sound_samples/cries/runerigus.bin" .align 2 Cry_Milcery:: - .incbin "sound/direct_sound_samples/cries/uncomp_milcery.bin" + .incbin "sound/direct_sound_samples/cries/milcery.bin" .align 2 Cry_Alcremie:: - .incbin "sound/direct_sound_samples/cries/uncomp_alcremie.bin" + .incbin "sound/direct_sound_samples/cries/alcremie.bin" .align 2 Cry_Falinks:: - .incbin "sound/direct_sound_samples/cries/uncomp_falinks.bin" + .incbin "sound/direct_sound_samples/cries/falinks.bin" .align 2 Cry_Pincurchin:: - .incbin "sound/direct_sound_samples/cries/uncomp_pincurchin.bin" + .incbin "sound/direct_sound_samples/cries/pincurchin.bin" .align 2 Cry_Snom:: - .incbin "sound/direct_sound_samples/cries/uncomp_snom.bin" + .incbin "sound/direct_sound_samples/cries/snom.bin" .align 2 Cry_Frosmoth:: - .incbin "sound/direct_sound_samples/cries/uncomp_frosmoth.bin" + .incbin "sound/direct_sound_samples/cries/frosmoth.bin" .align 2 Cry_Stonjourner:: - .incbin "sound/direct_sound_samples/cries/uncomp_stonjourner.bin" + .incbin "sound/direct_sound_samples/cries/stonjourner.bin" .align 2 Cry_Eiscue:: - .incbin "sound/direct_sound_samples/cries/uncomp_eiscue.bin" + .incbin "sound/direct_sound_samples/cries/eiscue.bin" .align 2 Cry_Indeedee:: - .incbin "sound/direct_sound_samples/cries/uncomp_indeedee.bin" + .incbin "sound/direct_sound_samples/cries/indeedee.bin" .align 2 Cry_Morpeko:: - .incbin "sound/direct_sound_samples/cries/uncomp_morpeko.bin" + .incbin "sound/direct_sound_samples/cries/morpeko.bin" .align 2 Cry_Cufant:: - .incbin "sound/direct_sound_samples/cries/uncomp_cufant.bin" + .incbin "sound/direct_sound_samples/cries/cufant.bin" .align 2 Cry_Copperajah:: - .incbin "sound/direct_sound_samples/cries/uncomp_copperajah.bin" + .incbin "sound/direct_sound_samples/cries/copperajah.bin" .align 2 Cry_Dracozolt:: - .incbin "sound/direct_sound_samples/cries/uncomp_dracozolt.bin" + .incbin "sound/direct_sound_samples/cries/dracozolt.bin" .align 2 Cry_Arctozolt:: - .incbin "sound/direct_sound_samples/cries/uncomp_arctozolt.bin" + .incbin "sound/direct_sound_samples/cries/arctozolt.bin" .align 2 Cry_Dracovish:: - .incbin "sound/direct_sound_samples/cries/uncomp_dracovish.bin" + .incbin "sound/direct_sound_samples/cries/dracovish.bin" .align 2 Cry_Arctovish:: - .incbin "sound/direct_sound_samples/cries/uncomp_arctovish.bin" + .incbin "sound/direct_sound_samples/cries/arctovish.bin" .align 2 Cry_Duraludon:: - .incbin "sound/direct_sound_samples/cries/uncomp_duraludon.bin" + .incbin "sound/direct_sound_samples/cries/duraludon.bin" .align 2 Cry_Dreepy:: - .incbin "sound/direct_sound_samples/cries/uncomp_dreepy.bin" + .incbin "sound/direct_sound_samples/cries/dreepy.bin" .align 2 Cry_Drakloak:: - .incbin "sound/direct_sound_samples/cries/uncomp_drakloak.bin" + .incbin "sound/direct_sound_samples/cries/drakloak.bin" .align 2 Cry_Dragapult:: - .incbin "sound/direct_sound_samples/cries/uncomp_dragapult.bin" + .incbin "sound/direct_sound_samples/cries/dragapult.bin" .align 2 Cry_Zacian:: - .incbin "sound/direct_sound_samples/cries/uncomp_zacian.bin" + .incbin "sound/direct_sound_samples/cries/zacian.bin" .align 2 Cry_Zamazenta:: - .incbin "sound/direct_sound_samples/cries/uncomp_zamazenta.bin" + .incbin "sound/direct_sound_samples/cries/zamazenta.bin" .align 2 Cry_Eternatus:: - .incbin "sound/direct_sound_samples/cries/uncomp_eternatus.bin" + .incbin "sound/direct_sound_samples/cries/eternatus.bin" .align 2 Cry_Kubfu:: - .incbin "sound/direct_sound_samples/cries/uncomp_kubfu.bin" + .incbin "sound/direct_sound_samples/cries/kubfu.bin" .align 2 Cry_Urshifu:: - .incbin "sound/direct_sound_samples/cries/uncomp_urshifu.bin" + .incbin "sound/direct_sound_samples/cries/urshifu.bin" .align 2 Cry_Zarude:: - .incbin "sound/direct_sound_samples/cries/uncomp_zarude.bin" + .incbin "sound/direct_sound_samples/cries/zarude.bin" .align 2 Cry_Regieleki:: - .incbin "sound/direct_sound_samples/cries/uncomp_regieleki.bin" + .incbin "sound/direct_sound_samples/cries/regieleki.bin" .align 2 Cry_Regidrago:: - .incbin "sound/direct_sound_samples/cries/uncomp_regidrago.bin" + .incbin "sound/direct_sound_samples/cries/regidrago.bin" .align 2 Cry_Glastrier:: - .incbin "sound/direct_sound_samples/cries/uncomp_glastrier.bin" + .incbin "sound/direct_sound_samples/cries/glastrier.bin" .align 2 Cry_Spectrier:: - .incbin "sound/direct_sound_samples/cries/uncomp_spectrier.bin" + .incbin "sound/direct_sound_samples/cries/spectrier.bin" .align 2 Cry_Calyrex:: - .incbin "sound/direct_sound_samples/cries/uncomp_calyrex.bin" + .incbin "sound/direct_sound_samples/cries/calyrex.bin" +/* + .align 2 +Cry_Wyrdeer:: + .incbin "sound/direct_sound_samples/cries/wyrdeer.bin" + + .align 2 +Cry_Kleavor:: + .incbin "sound/direct_sound_samples/cries/kleavor.bin" + + .align 2 +Cry_Ursaluna:: + .incbin "sound/direct_sound_samples/cries/ursaluna.bin" + + .align 2 +Cry_Basculegion:: + .incbin "sound/direct_sound_samples/cries/basculegion.bin" + + .align 2 +Cry_Sneasler:: + .incbin "sound/direct_sound_samples/cries/sneasler.bin" + + .align 2 +Cry_Overqwil:: + .incbin "sound/direct_sound_samples/cries/overqwil.bin" + + .align 2 +Cry_Enamorus:: + .incbin "sound/direct_sound_samples/cries/enamorus.bin" +*/ .align 2 Cry_VenusaurMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_venusaur.bin" + .incbin "sound/direct_sound_samples/cries/mega_venusaur.bin" .align 2 Cry_CharizardMegaX:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_charizard_x.bin" + .incbin "sound/direct_sound_samples/cries/mega_charizard_x.bin" .align 2 Cry_CharizardMegaY:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_charizard_y.bin" + .incbin "sound/direct_sound_samples/cries/mega_charizard_y.bin" .align 2 Cry_BlastoiseMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_blastoise.bin" + .incbin "sound/direct_sound_samples/cries/mega_blastoise.bin" .align 2 Cry_BeedrillMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_beedrill.bin" + .incbin "sound/direct_sound_samples/cries/mega_beedrill.bin" .align 2 Cry_PidgeotMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_pidgeot.bin" + .incbin "sound/direct_sound_samples/cries/mega_pidgeot.bin" .align 2 Cry_AlakazamMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_alakazam.bin" + .incbin "sound/direct_sound_samples/cries/mega_alakazam.bin" .align 2 Cry_SlowbroMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_slowbro.bin" + .incbin "sound/direct_sound_samples/cries/mega_slowbro.bin" .align 2 Cry_GengarMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_gengar.bin" + .incbin "sound/direct_sound_samples/cries/mega_gengar.bin" .align 2 Cry_KangaskhanMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_kangaskhan.bin" + .incbin "sound/direct_sound_samples/cries/mega_kangaskhan.bin" .align 2 Cry_PinsirMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_pinsir.bin" + .incbin "sound/direct_sound_samples/cries/mega_pinsir.bin" .align 2 Cry_GyaradosMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_gyarados.bin" + .incbin "sound/direct_sound_samples/cries/mega_gyarados.bin" .align 2 Cry_AerodactylMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_aerodactyl.bin" + .incbin "sound/direct_sound_samples/cries/mega_aerodactyl.bin" .align 2 Cry_MewtwoMegaX:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_mewtwo_x.bin" + .incbin "sound/direct_sound_samples/cries/mega_mewtwo_x.bin" .align 2 Cry_MewtwoMegaY:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_mewtwo_y.bin" + .incbin "sound/direct_sound_samples/cries/mega_mewtwo_y.bin" .align 2 Cry_AmpharosMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_ampharos.bin" + .incbin "sound/direct_sound_samples/cries/mega_ampharos.bin" .align 2 Cry_SteelixMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_steelix.bin" + .incbin "sound/direct_sound_samples/cries/mega_steelix.bin" .align 2 Cry_ScizorMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_scizor.bin" + .incbin "sound/direct_sound_samples/cries/mega_scizor.bin" .align 2 Cry_HeracrossMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_heracross.bin" + .incbin "sound/direct_sound_samples/cries/mega_heracross.bin" .align 2 Cry_HoundoomMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_houndoom.bin" + .incbin "sound/direct_sound_samples/cries/mega_houndoom.bin" .align 2 Cry_TyranitarMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_tyranitar.bin" + .incbin "sound/direct_sound_samples/cries/mega_tyranitar.bin" .align 2 Cry_SceptileMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_sceptile.bin" + .incbin "sound/direct_sound_samples/cries/mega_sceptile.bin" .align 2 Cry_BlazikenMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_blaziken.bin" + .incbin "sound/direct_sound_samples/cries/mega_blaziken.bin" .align 2 Cry_SwampertMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_swampert.bin" + .incbin "sound/direct_sound_samples/cries/mega_swampert.bin" .align 2 Cry_GardevoirMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_gardevoir.bin" + .incbin "sound/direct_sound_samples/cries/mega_gardevoir.bin" .align 2 Cry_SableyeMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_sableye.bin" + .incbin "sound/direct_sound_samples/cries/mega_sableye.bin" .align 2 Cry_MawileMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_mawile.bin" + .incbin "sound/direct_sound_samples/cries/mega_mawile.bin" .align 2 Cry_AggronMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_aggron.bin" + .incbin "sound/direct_sound_samples/cries/mega_aggron.bin" .align 2 Cry_MedichamMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_medicham.bin" + .incbin "sound/direct_sound_samples/cries/mega_medicham.bin" .align 2 Cry_ManectricMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_manectric.bin" + .incbin "sound/direct_sound_samples/cries/mega_manectric.bin" .align 2 Cry_SharpedoMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_sharpedo.bin" + .incbin "sound/direct_sound_samples/cries/mega_sharpedo.bin" .align 2 Cry_CameruptMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_camerupt.bin" + .incbin "sound/direct_sound_samples/cries/mega_camerupt.bin" .align 2 Cry_AltariaMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_altaria.bin" + .incbin "sound/direct_sound_samples/cries/mega_altaria.bin" .align 2 Cry_BanetteMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_banette.bin" + .incbin "sound/direct_sound_samples/cries/mega_banette.bin" .align 2 Cry_AbsolMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_absol.bin" + .incbin "sound/direct_sound_samples/cries/mega_absol.bin" .align 2 Cry_GlalieMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_glalie.bin" + .incbin "sound/direct_sound_samples/cries/mega_glalie.bin" .align 2 Cry_SalamenceMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_salamence.bin" + .incbin "sound/direct_sound_samples/cries/mega_salamence.bin" .align 2 Cry_MetagrossMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_metagross.bin" + .incbin "sound/direct_sound_samples/cries/mega_metagross.bin" .align 2 Cry_LatiasMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_latias.bin" + .incbin "sound/direct_sound_samples/cries/mega_latias.bin" .align 2 Cry_LatiosMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_latios.bin" + .incbin "sound/direct_sound_samples/cries/mega_latios.bin" .align 2 Cry_LopunnyMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_lopunny.bin" + .incbin "sound/direct_sound_samples/cries/mega_lopunny.bin" .align 2 Cry_GarchompMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_garchomp.bin" + .incbin "sound/direct_sound_samples/cries/mega_garchomp.bin" .align 2 Cry_LucarioMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_lucario.bin" + .incbin "sound/direct_sound_samples/cries/mega_lucario.bin" .align 2 Cry_AbomasnowMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_abomasnow.bin" + .incbin "sound/direct_sound_samples/cries/mega_abomasnow.bin" .align 2 Cry_GalladeMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_gallade.bin" + .incbin "sound/direct_sound_samples/cries/mega_gallade.bin" .align 2 Cry_AudinoMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_audino.bin" + .incbin "sound/direct_sound_samples/cries/mega_audino.bin" .align 2 Cry_DiancieMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_diancie.bin" + .incbin "sound/direct_sound_samples/cries/mega_diancie.bin" .align 2 Cry_RayquazaMega:: - .incbin "sound/direct_sound_samples/cries/uncomp_mega_rayquaza.bin" + .incbin "sound/direct_sound_samples/cries/mega_rayquaza.bin" .align 2 Cry_KyogrePrimal:: - .incbin "sound/direct_sound_samples/cries/uncomp_primal_kyogre.bin" + .incbin "sound/direct_sound_samples/cries/primal_kyogre.bin" .align 2 Cry_GroudonPrimal:: - .incbin "sound/direct_sound_samples/cries/uncomp_primal_groudon.bin" + .incbin "sound/direct_sound_samples/cries/primal_groudon.bin" .align 2 Cry_SlowpokeGalarian:: - .incbin "sound/direct_sound_samples/cries/uncomp_slowpoke_galarian.bin" + .incbin "sound/direct_sound_samples/cries/slowpoke_galarian.bin" .align 2 Cry_ShayminSky:: @@ -4197,6 +4227,11 @@ Cry_ThundurusTherian:: .align 2 Cry_LandorusTherian:: .incbin "sound/direct_sound_samples/cries/landorus_therian.bin" +/* + .align 2 +Cry_EnamorusTherian:: + .incbin "sound/direct_sound_samples/cries/enamorus_therian.bin" +*/ .align 2 Cry_KyuremWhite:: @@ -4208,111 +4243,112 @@ Cry_KyuremBlack:: .align 2 Cry_FloetteEternalFlower:: - .incbin "sound/direct_sound_samples/cries/uncomp_floette_eternal_flower.bin" + .incbin "sound/direct_sound_samples/cries/floette_eternal_flower.bin" .align 2 Cry_PumpkabooSuper:: - .incbin "sound/direct_sound_samples/cries/uncomp_pumpkaboo_super.bin" + .incbin "sound/direct_sound_samples/cries/pumpkaboo_super.bin" .align 2 Cry_GourgeistSuper:: - .incbin "sound/direct_sound_samples/cries/uncomp_gourgeist_super.bin" + .incbin "sound/direct_sound_samples/cries/gourgeist_super.bin" .align 2 Cry_Zygarde10:: - .incbin "sound/direct_sound_samples/cries/uncomp_zygarde_10.bin" + .incbin "sound/direct_sound_samples/cries/zygarde_10.bin" .align 2 Cry_ZygardeComplete:: - .incbin "sound/direct_sound_samples/cries/uncomp_zygarde_complete.bin" + .incbin "sound/direct_sound_samples/cries/zygarde_complete.bin" .align 2 Cry_HoopaUnbound:: - .incbin "sound/direct_sound_samples/cries/uncomp_hoopa_unbound.bin" + .incbin "sound/direct_sound_samples/cries/hoopa_unbound.bin" .align 2 Cry_OricorioPomPom:: - .incbin "sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.bin" + .incbin "sound/direct_sound_samples/cries/oricorio_pom_pom.bin" .align 2 Cry_OricorioPau:: - .incbin "sound/direct_sound_samples/cries/uncomp_oricorio_pau.bin" + .incbin "sound/direct_sound_samples/cries/oricorio_pau.bin" .align 2 Cry_OricorioSensu:: - .incbin "sound/direct_sound_samples/cries/uncomp_oricorio_sensu.bin" + .incbin "sound/direct_sound_samples/cries/oricorio_sensu.bin" .align 2 Cry_LycanrocMidnight:: - .incbin "sound/direct_sound_samples/cries/uncomp_lycanroc_midnight.bin" + .incbin "sound/direct_sound_samples/cries/lycanroc_midnight.bin" .align 2 Cry_LycanrocDusk:: - .incbin "sound/direct_sound_samples/cries/uncomp_lycanroc_dusk.bin" + .incbin "sound/direct_sound_samples/cries/lycanroc_dusk.bin" .align 2 Cry_WishiwashiSchool:: - .incbin "sound/direct_sound_samples/cries/uncomp_wishiwashi_school.bin" + .incbin "sound/direct_sound_samples/cries/wishiwashi_school.bin" .align 2 Cry_NecrozmaDuskMane:: - .incbin "sound/direct_sound_samples/cries/uncomp_necrozma_dusk_mane.bin" + .incbin "sound/direct_sound_samples/cries/necrozma_dusk_mane.bin" .align 2 Cry_NecrozmaDawnWings:: - .incbin "sound/direct_sound_samples/cries/uncomp_necrozma_dawn_wings.bin" + .incbin "sound/direct_sound_samples/cries/necrozma_dawn_wings.bin" .align 2 Cry_NecrozmaUltra:: - .incbin "sound/direct_sound_samples/cries/uncomp_necrozma_ultra.bin" + .incbin "sound/direct_sound_samples/cries/necrozma_ultra.bin" .align 2 Cry_ToxtricityLowKey:: - .incbin "sound/direct_sound_samples/cries/uncomp_toxtricity_low_key.bin" + .incbin "sound/direct_sound_samples/cries/toxtricity_low_key.bin" .align 2 Cry_EiscueNoiceFace:: - .incbin "sound/direct_sound_samples/cries/uncomp_eiscue_noice_face.bin" + .incbin "sound/direct_sound_samples/cries/eiscue_noice_face.bin" .align 2 Cry_IndeedeeFemale:: - .incbin "sound/direct_sound_samples/cries/uncomp_indeedee_female.bin" + .incbin "sound/direct_sound_samples/cries/indeedee_female.bin" .align 2 Cry_MorpekoHangry:: - .incbin "sound/direct_sound_samples/cries/uncomp_morpeko_hangry.bin" + .incbin "sound/direct_sound_samples/cries/morpeko_hangry.bin" .align 2 Cry_ZacianCrownedSword:: - .incbin "sound/direct_sound_samples/cries/uncomp_zacian_crowned_sword.bin" + .incbin "sound/direct_sound_samples/cries/zacian_crowned_sword.bin" .align 2 Cry_ZamazentaCrownedShield:: - .incbin "sound/direct_sound_samples/cries/uncomp_zamazenta_crowned_shield.bin" + .incbin "sound/direct_sound_samples/cries/zamazenta_crowned_shield.bin" .align 2 Cry_EternatusEternamax:: - .incbin "sound/direct_sound_samples/cries/uncomp_eternatus_eternamax.bin" + .incbin "sound/direct_sound_samples/cries/eternatus_eternamax.bin" .align 2 Cry_UrshifuRapidStrikeStyle:: - .incbin "sound/direct_sound_samples/cries/uncomp_urshifu_rapid_strike_style.bin" + .incbin "sound/direct_sound_samples/cries/urshifu_rapid_strike_style.bin" .align 2 Cry_CalyrexIceRider:: - .incbin "sound/direct_sound_samples/cries/uncomp_calyrex_ice_rider.bin" + .incbin "sound/direct_sound_samples/cries/calyrex_ice_rider.bin" .align 2 Cry_CalyrexShadowRider:: - .incbin "sound/direct_sound_samples/cries/uncomp_calyrex_shadow_rider.bin" + .incbin "sound/direct_sound_samples/cries/calyrex_shadow_rider.bin" +.endif .align 2 DirectSoundWaveData_register_noise:: .incbin "sound/direct_sound_samples/register_noise.bin" .align 2 -DirectSoundWaveData_88D6978:: - .incbin "sound/direct_sound_samples/88D6978.bin" +DirectSoundWaveData_unknown_18:: + .incbin "sound/direct_sound_samples/unknown_18.bin" .align 2 DirectSoundWaveData_sc88pro_nylon_str_guitar:: @@ -4323,208 +4359,208 @@ DirectSoundWaveData_sd90_special_scream_drive:: .incbin "sound/direct_sound_samples/sd90_special_scream_drive.bin" .align 2 -DirectSoundWaveData_88DBBC0:: - .incbin "sound/direct_sound_samples/88DBBC0.bin" +DirectSoundWaveData_Phoneme_1:: + .incbin "sound/direct_sound_samples/phonemes/01.bin" .align 2 -DirectSoundWaveData_88DC220:: - .incbin "sound/direct_sound_samples/88DC220.bin" +DirectSoundWaveData_Phoneme_2:: + .incbin "sound/direct_sound_samples/phonemes/02.bin" .align 2 -DirectSoundWaveData_88DC704:: - .incbin "sound/direct_sound_samples/88DC704.bin" +DirectSoundWaveData_Phoneme_3:: + .incbin "sound/direct_sound_samples/phonemes/03.bin" .align 2 -DirectSoundWaveData_88DD054:: - .incbin "sound/direct_sound_samples/88DD054.bin" +DirectSoundWaveData_Phoneme_4:: + .incbin "sound/direct_sound_samples/phonemes/04.bin" .align 2 -DirectSoundWaveData_88DDAC4:: - .incbin "sound/direct_sound_samples/88DDAC4.bin" +DirectSoundWaveData_Phoneme_5:: + .incbin "sound/direct_sound_samples/phonemes/05.bin" .align 2 -DirectSoundWaveData_88DDDE4:: - .incbin "sound/direct_sound_samples/88DDDE4.bin" +DirectSoundWaveData_Phoneme_6:: + .incbin "sound/direct_sound_samples/phonemes/06.bin" .align 2 -DirectSoundWaveData_88DEA6C:: - .incbin "sound/direct_sound_samples/88DEA6C.bin" +DirectSoundWaveData_Phoneme_7:: + .incbin "sound/direct_sound_samples/phonemes/07.bin" .align 2 -DirectSoundWaveData_88DF08C:: - .incbin "sound/direct_sound_samples/88DF08C.bin" +DirectSoundWaveData_Phoneme_8:: + .incbin "sound/direct_sound_samples/phonemes/08.bin" .align 2 -DirectSoundWaveData_88DF414:: - .incbin "sound/direct_sound_samples/88DF414.bin" +DirectSoundWaveData_Phoneme_9:: + .incbin "sound/direct_sound_samples/phonemes/09.bin" .align 2 -DirectSoundWaveData_88E01F8:: - .incbin "sound/direct_sound_samples/88E01F8.bin" +DirectSoundWaveData_Phoneme_10:: + .incbin "sound/direct_sound_samples/phonemes/10.bin" .align 2 -DirectSoundWaveData_88E0B68:: - .incbin "sound/direct_sound_samples/88E0B68.bin" +DirectSoundWaveData_Phoneme_11:: + .incbin "sound/direct_sound_samples/phonemes/11.bin" .align 2 -DirectSoundWaveData_88E0F04:: - .incbin "sound/direct_sound_samples/88E0F04.bin" +DirectSoundWaveData_Phoneme_12:: + .incbin "sound/direct_sound_samples/phonemes/12.bin" .align 2 -DirectSoundWaveData_88E16B8:: - .incbin "sound/direct_sound_samples/88E16B8.bin" +DirectSoundWaveData_Phoneme_13:: + .incbin "sound/direct_sound_samples/phonemes/13.bin" .align 2 -DirectSoundWaveData_88E2414:: - .incbin "sound/direct_sound_samples/88E2414.bin" +DirectSoundWaveData_Phoneme_14:: + .incbin "sound/direct_sound_samples/phonemes/14.bin" .align 2 -DirectSoundWaveData_88E2658:: - .incbin "sound/direct_sound_samples/88E2658.bin" +DirectSoundWaveData_Phoneme_15:: + .incbin "sound/direct_sound_samples/phonemes/15.bin" .align 2 -DirectSoundWaveData_88E3498:: - .incbin "sound/direct_sound_samples/88E3498.bin" +DirectSoundWaveData_Phoneme_16:: + .incbin "sound/direct_sound_samples/phonemes/16.bin" .align 2 -DirectSoundWaveData_88E3DEC:: - .incbin "sound/direct_sound_samples/88E3DEC.bin" +DirectSoundWaveData_Phoneme_17:: + .incbin "sound/direct_sound_samples/phonemes/17.bin" .align 2 -DirectSoundWaveData_88E4140:: - .incbin "sound/direct_sound_samples/88E4140.bin" +DirectSoundWaveData_Phoneme_18:: + .incbin "sound/direct_sound_samples/phonemes/18.bin" .align 2 -DirectSoundWaveData_88E4774:: - .incbin "sound/direct_sound_samples/88E4774.bin" +DirectSoundWaveData_Phoneme_19:: + .incbin "sound/direct_sound_samples/phonemes/19.bin" .align 2 -DirectSoundWaveData_88E53E0:: - .incbin "sound/direct_sound_samples/88E53E0.bin" +DirectSoundWaveData_Phoneme_20:: + .incbin "sound/direct_sound_samples/phonemes/20.bin" .align 2 -DirectSoundWaveData_88E5978:: - .incbin "sound/direct_sound_samples/88E5978.bin" +DirectSoundWaveData_Phoneme_21:: + .incbin "sound/direct_sound_samples/phonemes/21.bin" .align 2 -DirectSoundWaveData_88E647C:: - .incbin "sound/direct_sound_samples/88E647C.bin" +DirectSoundWaveData_Phoneme_22:: + .incbin "sound/direct_sound_samples/phonemes/22.bin" .align 2 -DirectSoundWaveData_88E6A80:: - .incbin "sound/direct_sound_samples/88E6A80.bin" +DirectSoundWaveData_Phoneme_23:: + .incbin "sound/direct_sound_samples/phonemes/23.bin" .align 2 -DirectSoundWaveData_88E6C78:: - .incbin "sound/direct_sound_samples/88E6C78.bin" +DirectSoundWaveData_Phoneme_24:: + .incbin "sound/direct_sound_samples/phonemes/24.bin" .align 2 -DirectSoundWaveData_88E75DC:: - .incbin "sound/direct_sound_samples/88E75DC.bin" +DirectSoundWaveData_Phoneme_25:: + .incbin "sound/direct_sound_samples/phonemes/25.bin" .align 2 -DirectSoundWaveData_88E8568:: - .incbin "sound/direct_sound_samples/88E8568.bin" +DirectSoundWaveData_Phoneme_26:: + .incbin "sound/direct_sound_samples/phonemes/26.bin" .align 2 -DirectSoundWaveData_88E8BA0:: - .incbin "sound/direct_sound_samples/88E8BA0.bin" +DirectSoundWaveData_Phoneme_27:: + .incbin "sound/direct_sound_samples/phonemes/27.bin" .align 2 -DirectSoundWaveData_88E9674:: - .incbin "sound/direct_sound_samples/88E9674.bin" +DirectSoundWaveData_Phoneme_28:: + .incbin "sound/direct_sound_samples/phonemes/28.bin" .align 2 -DirectSoundWaveData_88EA5B8:: - .incbin "sound/direct_sound_samples/88EA5B8.bin" +DirectSoundWaveData_Phoneme_29:: + .incbin "sound/direct_sound_samples/phonemes/29.bin" .align 2 -DirectSoundWaveData_88EAB30:: - .incbin "sound/direct_sound_samples/88EAB30.bin" +DirectSoundWaveData_Phoneme_30:: + .incbin "sound/direct_sound_samples/phonemes/30.bin" .align 2 -DirectSoundWaveData_88EB97C:: - .incbin "sound/direct_sound_samples/88EB97C.bin" +DirectSoundWaveData_Phoneme_31:: + .incbin "sound/direct_sound_samples/phonemes/31.bin" .align 2 -DirectSoundWaveData_88EC884:: - .incbin "sound/direct_sound_samples/88EC884.bin" +DirectSoundWaveData_Phoneme_32:: + .incbin "sound/direct_sound_samples/phonemes/32.bin" .align 2 -DirectSoundWaveData_88ED358:: - .incbin "sound/direct_sound_samples/88ED358.bin" +DirectSoundWaveData_Phoneme_33:: + .incbin "sound/direct_sound_samples/phonemes/33.bin" .align 2 -DirectSoundWaveData_88EDEEC:: - .incbin "sound/direct_sound_samples/88EDEEC.bin" +DirectSoundWaveData_Phoneme_34:: + .incbin "sound/direct_sound_samples/phonemes/34.bin" .align 2 -DirectSoundWaveData_88EE8C4:: - .incbin "sound/direct_sound_samples/88EE8C4.bin" +DirectSoundWaveData_Phoneme_35:: + .incbin "sound/direct_sound_samples/phonemes/35.bin" .align 2 -DirectSoundWaveData_88EEF04:: - .incbin "sound/direct_sound_samples/88EEF04.bin" +DirectSoundWaveData_Phoneme_36:: + .incbin "sound/direct_sound_samples/phonemes/36.bin" .align 2 -DirectSoundWaveData_88EF9E4:: - .incbin "sound/direct_sound_samples/88EF9E4.bin" +DirectSoundWaveData_Phoneme_37:: + .incbin "sound/direct_sound_samples/phonemes/37.bin" .align 2 -DirectSoundWaveData_88F0020:: - .incbin "sound/direct_sound_samples/88F0020.bin" +DirectSoundWaveData_Phoneme_38:: + .incbin "sound/direct_sound_samples/phonemes/38.bin" .align 2 -DirectSoundWaveData_88F0738:: - .incbin "sound/direct_sound_samples/88F0738.bin" +DirectSoundWaveData_Phoneme_39:: + .incbin "sound/direct_sound_samples/phonemes/39.bin" .align 2 -DirectSoundWaveData_88F1074:: - .incbin "sound/direct_sound_samples/88F1074.bin" +DirectSoundWaveData_Phoneme_40:: + .incbin "sound/direct_sound_samples/phonemes/40.bin" .align 2 -DirectSoundWaveData_88F1830:: - .incbin "sound/direct_sound_samples/88F1830.bin" +DirectSoundWaveData_Phoneme_41:: + .incbin "sound/direct_sound_samples/phonemes/41.bin" .align 2 -DirectSoundWaveData_88F1D94:: - .incbin "sound/direct_sound_samples/88F1D94.bin" +DirectSoundWaveData_Phoneme_42:: + .incbin "sound/direct_sound_samples/phonemes/42.bin" .align 2 -DirectSoundWaveData_88F2B08:: - .incbin "sound/direct_sound_samples/88F2B08.bin" +DirectSoundWaveData_Phoneme_43:: + .incbin "sound/direct_sound_samples/phonemes/43.bin" .align 2 -DirectSoundWaveData_88F2F84:: - .incbin "sound/direct_sound_samples/88F2F84.bin" +DirectSoundWaveData_Phoneme_44:: + .incbin "sound/direct_sound_samples/phonemes/44.bin" .align 2 -DirectSoundWaveData_88F3470:: - .incbin "sound/direct_sound_samples/88F3470.bin" +DirectSoundWaveData_Phoneme_45:: + .incbin "sound/direct_sound_samples/phonemes/45.bin" .align 2 -DirectSoundWaveData_88F3C38:: - .incbin "sound/direct_sound_samples/88F3C38.bin" +DirectSoundWaveData_Phoneme_46:: + .incbin "sound/direct_sound_samples/phonemes/46.bin" .align 2 -DirectSoundWaveData_88F4834:: - .incbin "sound/direct_sound_samples/88F4834.bin" +DirectSoundWaveData_Phoneme_47:: + .incbin "sound/direct_sound_samples/phonemes/47.bin" .align 2 -DirectSoundWaveData_88F4BAC:: - .incbin "sound/direct_sound_samples/88F4BAC.bin" +DirectSoundWaveData_Phoneme_48:: + .incbin "sound/direct_sound_samples/phonemes/48.bin" .align 2 -DirectSoundWaveData_88F5368:: - .incbin "sound/direct_sound_samples/88F5368.bin" +DirectSoundWaveData_Phoneme_49:: + .incbin "sound/direct_sound_samples/phonemes/49.bin" .align 2 -DirectSoundWaveData_88F5FCC:: - .incbin "sound/direct_sound_samples/88F5FCC.bin" +DirectSoundWaveData_Phoneme_50:: + .incbin "sound/direct_sound_samples/phonemes/50.bin" .align 2 -DirectSoundWaveData_88F6498:: - .incbin "sound/direct_sound_samples/88F6498.bin" +DirectSoundWaveData_Phoneme_51:: + .incbin "sound/direct_sound_samples/phonemes/51.bin" .align 2 DirectSoundWaveData_sc88pro_accordion_duplicate:: diff --git a/sound/direct_sound_samples/cries/uncomp_aegislash.aif b/sound/direct_sound_samples/cries/aegislash.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_aegislash.aif rename to sound/direct_sound_samples/cries/aegislash.aif diff --git a/sound/direct_sound_samples/cries/uncomp_alcremie.aif b/sound/direct_sound_samples/cries/alcremie.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_alcremie.aif rename to sound/direct_sound_samples/cries/alcremie.aif diff --git a/sound/direct_sound_samples/cries/uncomp_amaura.aif b/sound/direct_sound_samples/cries/amaura.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_amaura.aif rename to sound/direct_sound_samples/cries/amaura.aif diff --git a/sound/direct_sound_samples/cries/uncomp_appletun.aif b/sound/direct_sound_samples/cries/appletun.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_appletun.aif rename to sound/direct_sound_samples/cries/appletun.aif diff --git a/sound/direct_sound_samples/cries/uncomp_applin.aif b/sound/direct_sound_samples/cries/applin.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_applin.aif rename to sound/direct_sound_samples/cries/applin.aif diff --git a/sound/direct_sound_samples/cries/uncomp_araquanid.aif b/sound/direct_sound_samples/cries/araquanid.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_araquanid.aif rename to sound/direct_sound_samples/cries/araquanid.aif diff --git a/sound/direct_sound_samples/cries/uncomp_arctovish.aif b/sound/direct_sound_samples/cries/arctovish.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_arctovish.aif rename to sound/direct_sound_samples/cries/arctovish.aif diff --git a/sound/direct_sound_samples/cries/uncomp_arctozolt.aif b/sound/direct_sound_samples/cries/arctozolt.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_arctozolt.aif rename to sound/direct_sound_samples/cries/arctozolt.aif diff --git a/sound/direct_sound_samples/cries/uncomp_aromatisse.aif b/sound/direct_sound_samples/cries/aromatisse.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_aromatisse.aif rename to sound/direct_sound_samples/cries/aromatisse.aif diff --git a/sound/direct_sound_samples/cries/uncomp_arrokuda.aif b/sound/direct_sound_samples/cries/arrokuda.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_arrokuda.aif rename to sound/direct_sound_samples/cries/arrokuda.aif diff --git a/sound/direct_sound_samples/cries/uncomp_aurorus.aif b/sound/direct_sound_samples/cries/aurorus.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_aurorus.aif rename to sound/direct_sound_samples/cries/aurorus.aif diff --git a/sound/direct_sound_samples/cries/uncomp_avalugg.aif b/sound/direct_sound_samples/cries/avalugg.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_avalugg.aif rename to sound/direct_sound_samples/cries/avalugg.aif diff --git a/sound/direct_sound_samples/cries/uncomp_barbaracle.aif b/sound/direct_sound_samples/cries/barbaracle.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_barbaracle.aif rename to sound/direct_sound_samples/cries/barbaracle.aif diff --git a/sound/direct_sound_samples/cries/uncomp_barraskewda.aif b/sound/direct_sound_samples/cries/barraskewda.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_barraskewda.aif rename to sound/direct_sound_samples/cries/barraskewda.aif diff --git a/sound/direct_sound_samples/cries/uncomp_bergmite.aif b/sound/direct_sound_samples/cries/bergmite.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_bergmite.aif rename to sound/direct_sound_samples/cries/bergmite.aif diff --git a/sound/direct_sound_samples/cries/uncomp_bewear.aif b/sound/direct_sound_samples/cries/bewear.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_bewear.aif rename to sound/direct_sound_samples/cries/bewear.aif diff --git a/sound/direct_sound_samples/cries/uncomp_binacle.aif b/sound/direct_sound_samples/cries/binacle.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_binacle.aif rename to sound/direct_sound_samples/cries/binacle.aif diff --git a/sound/direct_sound_samples/cries/uncomp_blacephalon.aif b/sound/direct_sound_samples/cries/blacephalon.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_blacephalon.aif rename to sound/direct_sound_samples/cries/blacephalon.aif diff --git a/sound/direct_sound_samples/cries/uncomp_blipbug.aif b/sound/direct_sound_samples/cries/blipbug.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_blipbug.aif rename to sound/direct_sound_samples/cries/blipbug.aif diff --git a/sound/direct_sound_samples/cries/uncomp_boltund.aif b/sound/direct_sound_samples/cries/boltund.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_boltund.aif rename to sound/direct_sound_samples/cries/boltund.aif diff --git a/sound/direct_sound_samples/cries/uncomp_bounsweet.aif b/sound/direct_sound_samples/cries/bounsweet.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_bounsweet.aif rename to sound/direct_sound_samples/cries/bounsweet.aif diff --git a/sound/direct_sound_samples/cries/uncomp_braixen.aif b/sound/direct_sound_samples/cries/braixen.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_braixen.aif rename to sound/direct_sound_samples/cries/braixen.aif diff --git a/sound/direct_sound_samples/cries/uncomp_brionne.aif b/sound/direct_sound_samples/cries/brionne.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_brionne.aif rename to sound/direct_sound_samples/cries/brionne.aif diff --git a/sound/direct_sound_samples/cries/uncomp_bruxish.aif b/sound/direct_sound_samples/cries/bruxish.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_bruxish.aif rename to sound/direct_sound_samples/cries/bruxish.aif diff --git a/sound/direct_sound_samples/cries/uncomp_bunnelby.aif b/sound/direct_sound_samples/cries/bunnelby.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_bunnelby.aif rename to sound/direct_sound_samples/cries/bunnelby.aif diff --git a/sound/direct_sound_samples/cries/uncomp_buzzwole.aif b/sound/direct_sound_samples/cries/buzzwole.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_buzzwole.aif rename to sound/direct_sound_samples/cries/buzzwole.aif diff --git a/sound/direct_sound_samples/cries/uncomp_calyrex.aif b/sound/direct_sound_samples/cries/calyrex.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_calyrex.aif rename to sound/direct_sound_samples/cries/calyrex.aif diff --git a/sound/direct_sound_samples/cries/uncomp_calyrex_ice_rider.aif b/sound/direct_sound_samples/cries/calyrex_ice_rider.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_calyrex_ice_rider.aif rename to sound/direct_sound_samples/cries/calyrex_ice_rider.aif diff --git a/sound/direct_sound_samples/cries/uncomp_calyrex_shadow_rider.aif b/sound/direct_sound_samples/cries/calyrex_shadow_rider.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_calyrex_shadow_rider.aif rename to sound/direct_sound_samples/cries/calyrex_shadow_rider.aif diff --git a/sound/direct_sound_samples/cries/uncomp_carbink.aif b/sound/direct_sound_samples/cries/carbink.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_carbink.aif rename to sound/direct_sound_samples/cries/carbink.aif diff --git a/sound/direct_sound_samples/cries/uncomp_carkol.aif b/sound/direct_sound_samples/cries/carkol.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_carkol.aif rename to sound/direct_sound_samples/cries/carkol.aif diff --git a/sound/direct_sound_samples/cries/uncomp_celesteela.aif b/sound/direct_sound_samples/cries/celesteela.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_celesteela.aif rename to sound/direct_sound_samples/cries/celesteela.aif diff --git a/sound/direct_sound_samples/cries/uncomp_centiskorch.aif b/sound/direct_sound_samples/cries/centiskorch.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_centiskorch.aif rename to sound/direct_sound_samples/cries/centiskorch.aif diff --git a/sound/direct_sound_samples/cries/uncomp_charjabug.aif b/sound/direct_sound_samples/cries/charjabug.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_charjabug.aif rename to sound/direct_sound_samples/cries/charjabug.aif diff --git a/sound/direct_sound_samples/cries/uncomp_chesnaught.aif b/sound/direct_sound_samples/cries/chesnaught.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_chesnaught.aif rename to sound/direct_sound_samples/cries/chesnaught.aif diff --git a/sound/direct_sound_samples/cries/uncomp_chespin.aif b/sound/direct_sound_samples/cries/chespin.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_chespin.aif rename to sound/direct_sound_samples/cries/chespin.aif diff --git a/sound/direct_sound_samples/cries/uncomp_chewtle.aif b/sound/direct_sound_samples/cries/chewtle.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_chewtle.aif rename to sound/direct_sound_samples/cries/chewtle.aif diff --git a/sound/direct_sound_samples/cries/uncomp_cinderace.aif b/sound/direct_sound_samples/cries/cinderace.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_cinderace.aif rename to sound/direct_sound_samples/cries/cinderace.aif diff --git a/sound/direct_sound_samples/cries/uncomp_clauncher.aif b/sound/direct_sound_samples/cries/clauncher.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_clauncher.aif rename to sound/direct_sound_samples/cries/clauncher.aif diff --git a/sound/direct_sound_samples/cries/uncomp_clawitzer.aif b/sound/direct_sound_samples/cries/clawitzer.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_clawitzer.aif rename to sound/direct_sound_samples/cries/clawitzer.aif diff --git a/sound/direct_sound_samples/cries/uncomp_clobbopus.aif b/sound/direct_sound_samples/cries/clobbopus.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_clobbopus.aif rename to sound/direct_sound_samples/cries/clobbopus.aif diff --git a/sound/direct_sound_samples/cries/uncomp_coalossal.aif b/sound/direct_sound_samples/cries/coalossal.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_coalossal.aif rename to sound/direct_sound_samples/cries/coalossal.aif diff --git a/sound/direct_sound_samples/cries/uncomp_comfey.aif b/sound/direct_sound_samples/cries/comfey.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_comfey.aif rename to sound/direct_sound_samples/cries/comfey.aif diff --git a/sound/direct_sound_samples/cries/uncomp_copperajah.aif b/sound/direct_sound_samples/cries/copperajah.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_copperajah.aif rename to sound/direct_sound_samples/cries/copperajah.aif diff --git a/sound/direct_sound_samples/cries/uncomp_corviknight.aif b/sound/direct_sound_samples/cries/corviknight.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_corviknight.aif rename to sound/direct_sound_samples/cries/corviknight.aif diff --git a/sound/direct_sound_samples/cries/uncomp_corvisquire.aif b/sound/direct_sound_samples/cries/corvisquire.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_corvisquire.aif rename to sound/direct_sound_samples/cries/corvisquire.aif diff --git a/sound/direct_sound_samples/cries/uncomp_cosmoem.aif b/sound/direct_sound_samples/cries/cosmoem.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_cosmoem.aif rename to sound/direct_sound_samples/cries/cosmoem.aif diff --git a/sound/direct_sound_samples/cries/uncomp_cosmog.aif b/sound/direct_sound_samples/cries/cosmog.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_cosmog.aif rename to sound/direct_sound_samples/cries/cosmog.aif diff --git a/sound/direct_sound_samples/cries/cottonee.aif b/sound/direct_sound_samples/cries/cottonee.aif index 526dc5f79a..a459a62f72 100644 Binary files a/sound/direct_sound_samples/cries/cottonee.aif and b/sound/direct_sound_samples/cries/cottonee.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_crabominable.aif b/sound/direct_sound_samples/cries/crabominable.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_crabominable.aif rename to sound/direct_sound_samples/cries/crabominable.aif diff --git a/sound/direct_sound_samples/cries/uncomp_crabrawler.aif b/sound/direct_sound_samples/cries/crabrawler.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_crabrawler.aif rename to sound/direct_sound_samples/cries/crabrawler.aif diff --git a/sound/direct_sound_samples/cries/uncomp_cramorant.aif b/sound/direct_sound_samples/cries/cramorant.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_cramorant.aif rename to sound/direct_sound_samples/cries/cramorant.aif diff --git a/sound/direct_sound_samples/cries/uncomp_cufant.aif b/sound/direct_sound_samples/cries/cufant.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_cufant.aif rename to sound/direct_sound_samples/cries/cufant.aif diff --git a/sound/direct_sound_samples/cries/uncomp_cursola.aif b/sound/direct_sound_samples/cries/cursola.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_cursola.aif rename to sound/direct_sound_samples/cries/cursola.aif diff --git a/sound/direct_sound_samples/cries/uncomp_cutiefly.aif b/sound/direct_sound_samples/cries/cutiefly.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_cutiefly.aif rename to sound/direct_sound_samples/cries/cutiefly.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dartrix.aif b/sound/direct_sound_samples/cries/dartrix.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dartrix.aif rename to sound/direct_sound_samples/cries/dartrix.aif diff --git a/sound/direct_sound_samples/cries/uncomp_decidueye.aif b/sound/direct_sound_samples/cries/decidueye.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_decidueye.aif rename to sound/direct_sound_samples/cries/decidueye.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dedenne.aif b/sound/direct_sound_samples/cries/dedenne.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dedenne.aif rename to sound/direct_sound_samples/cries/dedenne.aif diff --git a/sound/direct_sound_samples/cries/uncomp_delphox.aif b/sound/direct_sound_samples/cries/delphox.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_delphox.aif rename to sound/direct_sound_samples/cries/delphox.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dewpider.aif b/sound/direct_sound_samples/cries/dewpider.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dewpider.aif rename to sound/direct_sound_samples/cries/dewpider.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dhelmise.aif b/sound/direct_sound_samples/cries/dhelmise.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dhelmise.aif rename to sound/direct_sound_samples/cries/dhelmise.aif diff --git a/sound/direct_sound_samples/cries/uncomp_diancie.aif b/sound/direct_sound_samples/cries/diancie.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_diancie.aif rename to sound/direct_sound_samples/cries/diancie.aif diff --git a/sound/direct_sound_samples/cries/uncomp_diggersby.aif b/sound/direct_sound_samples/cries/diggersby.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_diggersby.aif rename to sound/direct_sound_samples/cries/diggersby.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dottler.aif b/sound/direct_sound_samples/cries/dottler.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dottler.aif rename to sound/direct_sound_samples/cries/dottler.aif diff --git a/sound/direct_sound_samples/cries/uncomp_doublade.aif b/sound/direct_sound_samples/cries/doublade.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_doublade.aif rename to sound/direct_sound_samples/cries/doublade.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dracovish.aif b/sound/direct_sound_samples/cries/dracovish.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dracovish.aif rename to sound/direct_sound_samples/cries/dracovish.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dracozolt.aif b/sound/direct_sound_samples/cries/dracozolt.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dracozolt.aif rename to sound/direct_sound_samples/cries/dracozolt.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dragalge.aif b/sound/direct_sound_samples/cries/dragalge.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dragalge.aif rename to sound/direct_sound_samples/cries/dragalge.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dragapult.aif b/sound/direct_sound_samples/cries/dragapult.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dragapult.aif rename to sound/direct_sound_samples/cries/dragapult.aif diff --git a/sound/direct_sound_samples/cries/uncomp_drakloak.aif b/sound/direct_sound_samples/cries/drakloak.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_drakloak.aif rename to sound/direct_sound_samples/cries/drakloak.aif diff --git a/sound/direct_sound_samples/cries/uncomp_drampa.aif b/sound/direct_sound_samples/cries/drampa.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_drampa.aif rename to sound/direct_sound_samples/cries/drampa.aif diff --git a/sound/direct_sound_samples/cries/uncomp_drednaw.aif b/sound/direct_sound_samples/cries/drednaw.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_drednaw.aif rename to sound/direct_sound_samples/cries/drednaw.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dreepy.aif b/sound/direct_sound_samples/cries/dreepy.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dreepy.aif rename to sound/direct_sound_samples/cries/dreepy.aif diff --git a/sound/direct_sound_samples/cries/uncomp_drizzile.aif b/sound/direct_sound_samples/cries/drizzile.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_drizzile.aif rename to sound/direct_sound_samples/cries/drizzile.aif diff --git a/sound/direct_sound_samples/cries/uncomp_dubwool.aif b/sound/direct_sound_samples/cries/dubwool.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_dubwool.aif rename to sound/direct_sound_samples/cries/dubwool.aif diff --git a/sound/direct_sound_samples/cries/uncomp_duraludon.aif b/sound/direct_sound_samples/cries/duraludon.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_duraludon.aif rename to sound/direct_sound_samples/cries/duraludon.aif diff --git a/sound/direct_sound_samples/cries/uncomp_eiscue.aif b/sound/direct_sound_samples/cries/eiscue.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_eiscue.aif rename to sound/direct_sound_samples/cries/eiscue.aif diff --git a/sound/direct_sound_samples/cries/uncomp_eiscue_noice_face.aif b/sound/direct_sound_samples/cries/eiscue_noice_face.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_eiscue_noice_face.aif rename to sound/direct_sound_samples/cries/eiscue_noice_face.aif diff --git a/sound/direct_sound_samples/cries/uncomp_eldegoss.aif b/sound/direct_sound_samples/cries/eldegoss.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_eldegoss.aif rename to sound/direct_sound_samples/cries/eldegoss.aif diff --git a/sound/direct_sound_samples/cries/elgyem.aif b/sound/direct_sound_samples/cries/elgyem.aif index 4a7ae4e42b..f1e94c1364 100644 Binary files a/sound/direct_sound_samples/cries/elgyem.aif and b/sound/direct_sound_samples/cries/elgyem.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_espurr.aif b/sound/direct_sound_samples/cries/espurr.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_espurr.aif rename to sound/direct_sound_samples/cries/espurr.aif diff --git a/sound/direct_sound_samples/cries/uncomp_eternatus.aif b/sound/direct_sound_samples/cries/eternatus.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_eternatus.aif rename to sound/direct_sound_samples/cries/eternatus.aif diff --git a/sound/direct_sound_samples/cries/uncomp_eternatus_eternamax.aif b/sound/direct_sound_samples/cries/eternatus_eternamax.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_eternatus_eternamax.aif rename to sound/direct_sound_samples/cries/eternatus_eternamax.aif diff --git a/sound/direct_sound_samples/cries/uncomp_falinks.aif b/sound/direct_sound_samples/cries/falinks.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_falinks.aif rename to sound/direct_sound_samples/cries/falinks.aif diff --git a/sound/direct_sound_samples/cries/uncomp_fennekin.aif b/sound/direct_sound_samples/cries/fennekin.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_fennekin.aif rename to sound/direct_sound_samples/cries/fennekin.aif diff --git a/sound/direct_sound_samples/cries/uncomp_flabebe.aif b/sound/direct_sound_samples/cries/flabebe.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_flabebe.aif rename to sound/direct_sound_samples/cries/flabebe.aif diff --git a/sound/direct_sound_samples/cries/uncomp_flapple.aif b/sound/direct_sound_samples/cries/flapple.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_flapple.aif rename to sound/direct_sound_samples/cries/flapple.aif diff --git a/sound/direct_sound_samples/cries/uncomp_fletchinder.aif b/sound/direct_sound_samples/cries/fletchinder.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_fletchinder.aif rename to sound/direct_sound_samples/cries/fletchinder.aif diff --git a/sound/direct_sound_samples/cries/uncomp_fletchling.aif b/sound/direct_sound_samples/cries/fletchling.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_fletchling.aif rename to sound/direct_sound_samples/cries/fletchling.aif diff --git a/sound/direct_sound_samples/cries/uncomp_floette.aif b/sound/direct_sound_samples/cries/floette.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_floette.aif rename to sound/direct_sound_samples/cries/floette.aif diff --git a/sound/direct_sound_samples/cries/uncomp_floette_eternal_flower.aif b/sound/direct_sound_samples/cries/floette_eternal_flower.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_floette_eternal_flower.aif rename to sound/direct_sound_samples/cries/floette_eternal_flower.aif diff --git a/sound/direct_sound_samples/cries/uncomp_florges.aif b/sound/direct_sound_samples/cries/florges.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_florges.aif rename to sound/direct_sound_samples/cries/florges.aif diff --git a/sound/direct_sound_samples/cries/uncomp_fomantis.aif b/sound/direct_sound_samples/cries/fomantis.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_fomantis.aif rename to sound/direct_sound_samples/cries/fomantis.aif diff --git a/sound/direct_sound_samples/cries/foongus.aif b/sound/direct_sound_samples/cries/foongus.aif index 7d32598b53..dbd6f9c5cd 100644 Binary files a/sound/direct_sound_samples/cries/foongus.aif and b/sound/direct_sound_samples/cries/foongus.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_froakie.aif b/sound/direct_sound_samples/cries/froakie.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_froakie.aif rename to sound/direct_sound_samples/cries/froakie.aif diff --git a/sound/direct_sound_samples/cries/uncomp_frogadier.aif b/sound/direct_sound_samples/cries/frogadier.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_frogadier.aif rename to sound/direct_sound_samples/cries/frogadier.aif diff --git a/sound/direct_sound_samples/cries/uncomp_frosmoth.aif b/sound/direct_sound_samples/cries/frosmoth.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_frosmoth.aif rename to sound/direct_sound_samples/cries/frosmoth.aif diff --git a/sound/direct_sound_samples/cries/uncomp_furfrou.aif b/sound/direct_sound_samples/cries/furfrou.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_furfrou.aif rename to sound/direct_sound_samples/cries/furfrou.aif diff --git a/sound/direct_sound_samples/cries/uncomp_glastrier.aif b/sound/direct_sound_samples/cries/glastrier.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_glastrier.aif rename to sound/direct_sound_samples/cries/glastrier.aif diff --git a/sound/direct_sound_samples/cries/uncomp_gogoat.aif b/sound/direct_sound_samples/cries/gogoat.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_gogoat.aif rename to sound/direct_sound_samples/cries/gogoat.aif diff --git a/sound/direct_sound_samples/cries/uncomp_golisopod.aif b/sound/direct_sound_samples/cries/golisopod.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_golisopod.aif rename to sound/direct_sound_samples/cries/golisopod.aif diff --git a/sound/direct_sound_samples/cries/uncomp_goodra.aif b/sound/direct_sound_samples/cries/goodra.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_goodra.aif rename to sound/direct_sound_samples/cries/goodra.aif diff --git a/sound/direct_sound_samples/cries/uncomp_goomy.aif b/sound/direct_sound_samples/cries/goomy.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_goomy.aif rename to sound/direct_sound_samples/cries/goomy.aif diff --git a/sound/direct_sound_samples/cries/uncomp_gossifleur.aif b/sound/direct_sound_samples/cries/gossifleur.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_gossifleur.aif rename to sound/direct_sound_samples/cries/gossifleur.aif diff --git a/sound/direct_sound_samples/cries/uncomp_gourgeist.aif b/sound/direct_sound_samples/cries/gourgeist.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_gourgeist.aif rename to sound/direct_sound_samples/cries/gourgeist.aif diff --git a/sound/direct_sound_samples/cries/uncomp_gourgeist_super.aif b/sound/direct_sound_samples/cries/gourgeist_super.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_gourgeist_super.aif rename to sound/direct_sound_samples/cries/gourgeist_super.aif diff --git a/sound/direct_sound_samples/cries/uncomp_grapploct.aif b/sound/direct_sound_samples/cries/grapploct.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_grapploct.aif rename to sound/direct_sound_samples/cries/grapploct.aif diff --git a/sound/direct_sound_samples/cries/uncomp_greedent.aif b/sound/direct_sound_samples/cries/greedent.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_greedent.aif rename to sound/direct_sound_samples/cries/greedent.aif diff --git a/sound/direct_sound_samples/cries/uncomp_greninja.aif b/sound/direct_sound_samples/cries/greninja.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_greninja.aif rename to sound/direct_sound_samples/cries/greninja.aif diff --git a/sound/direct_sound_samples/cries/uncomp_grimmsnarl.aif b/sound/direct_sound_samples/cries/grimmsnarl.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_grimmsnarl.aif rename to sound/direct_sound_samples/cries/grimmsnarl.aif diff --git a/sound/direct_sound_samples/cries/uncomp_grookey.aif b/sound/direct_sound_samples/cries/grookey.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_grookey.aif rename to sound/direct_sound_samples/cries/grookey.aif diff --git a/sound/direct_sound_samples/cries/uncomp_grubbin.aif b/sound/direct_sound_samples/cries/grubbin.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_grubbin.aif rename to sound/direct_sound_samples/cries/grubbin.aif diff --git a/sound/direct_sound_samples/cries/uncomp_gumshoos.aif b/sound/direct_sound_samples/cries/gumshoos.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_gumshoos.aif rename to sound/direct_sound_samples/cries/gumshoos.aif diff --git a/sound/direct_sound_samples/cries/uncomp_guzzlord.aif b/sound/direct_sound_samples/cries/guzzlord.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_guzzlord.aif rename to sound/direct_sound_samples/cries/guzzlord.aif diff --git a/sound/direct_sound_samples/cries/uncomp_hakamo_o.aif b/sound/direct_sound_samples/cries/hakamo_o.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_hakamo_o.aif rename to sound/direct_sound_samples/cries/hakamo_o.aif diff --git a/sound/direct_sound_samples/cries/uncomp_hatenna.aif b/sound/direct_sound_samples/cries/hatenna.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_hatenna.aif rename to sound/direct_sound_samples/cries/hatenna.aif diff --git a/sound/direct_sound_samples/cries/uncomp_hatterene.aif b/sound/direct_sound_samples/cries/hatterene.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_hatterene.aif rename to sound/direct_sound_samples/cries/hatterene.aif diff --git a/sound/direct_sound_samples/cries/uncomp_hattrem.aif b/sound/direct_sound_samples/cries/hattrem.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_hattrem.aif rename to sound/direct_sound_samples/cries/hattrem.aif diff --git a/sound/direct_sound_samples/cries/uncomp_hawlucha.aif b/sound/direct_sound_samples/cries/hawlucha.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_hawlucha.aif rename to sound/direct_sound_samples/cries/hawlucha.aif diff --git a/sound/direct_sound_samples/cries/uncomp_heliolisk.aif b/sound/direct_sound_samples/cries/heliolisk.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_heliolisk.aif rename to sound/direct_sound_samples/cries/heliolisk.aif diff --git a/sound/direct_sound_samples/cries/uncomp_helioptile.aif b/sound/direct_sound_samples/cries/helioptile.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_helioptile.aif rename to sound/direct_sound_samples/cries/helioptile.aif diff --git a/sound/direct_sound_samples/cries/uncomp_honedge.aif b/sound/direct_sound_samples/cries/honedge.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_honedge.aif rename to sound/direct_sound_samples/cries/honedge.aif diff --git a/sound/direct_sound_samples/cries/uncomp_hoopa.aif b/sound/direct_sound_samples/cries/hoopa.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_hoopa.aif rename to sound/direct_sound_samples/cries/hoopa.aif diff --git a/sound/direct_sound_samples/cries/uncomp_hoopa_unbound.aif b/sound/direct_sound_samples/cries/hoopa_unbound.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_hoopa_unbound.aif rename to sound/direct_sound_samples/cries/hoopa_unbound.aif diff --git a/sound/direct_sound_samples/cries/uncomp_impidimp.aif b/sound/direct_sound_samples/cries/impidimp.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_impidimp.aif rename to sound/direct_sound_samples/cries/impidimp.aif diff --git a/sound/direct_sound_samples/cries/uncomp_incineroar.aif b/sound/direct_sound_samples/cries/incineroar.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_incineroar.aif rename to sound/direct_sound_samples/cries/incineroar.aif diff --git a/sound/direct_sound_samples/cries/uncomp_indeedee.aif b/sound/direct_sound_samples/cries/indeedee.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_indeedee.aif rename to sound/direct_sound_samples/cries/indeedee.aif diff --git a/sound/direct_sound_samples/cries/uncomp_indeedee_female.aif b/sound/direct_sound_samples/cries/indeedee_female.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_indeedee_female.aif rename to sound/direct_sound_samples/cries/indeedee_female.aif diff --git a/sound/direct_sound_samples/cries/uncomp_inkay.aif b/sound/direct_sound_samples/cries/inkay.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_inkay.aif rename to sound/direct_sound_samples/cries/inkay.aif diff --git a/sound/direct_sound_samples/cries/uncomp_inteleon.aif b/sound/direct_sound_samples/cries/inteleon.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_inteleon.aif rename to sound/direct_sound_samples/cries/inteleon.aif diff --git a/sound/direct_sound_samples/cries/uncomp_jangmo_o.aif b/sound/direct_sound_samples/cries/jangmo_o.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_jangmo_o.aif rename to sound/direct_sound_samples/cries/jangmo_o.aif diff --git a/sound/direct_sound_samples/cries/uncomp_kartana.aif b/sound/direct_sound_samples/cries/kartana.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_kartana.aif rename to sound/direct_sound_samples/cries/kartana.aif diff --git a/sound/direct_sound_samples/cries/keldeo.aif b/sound/direct_sound_samples/cries/keldeo.aif index 1a4d63fc8b..4f73fc22da 100644 Binary files a/sound/direct_sound_samples/cries/keldeo.aif and b/sound/direct_sound_samples/cries/keldeo.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_komala.aif b/sound/direct_sound_samples/cries/komala.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_komala.aif rename to sound/direct_sound_samples/cries/komala.aif diff --git a/sound/direct_sound_samples/cries/uncomp_kommo_o.aif b/sound/direct_sound_samples/cries/kommo_o.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_kommo_o.aif rename to sound/direct_sound_samples/cries/kommo_o.aif diff --git a/sound/direct_sound_samples/cries/uncomp_kubfu.aif b/sound/direct_sound_samples/cries/kubfu.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_kubfu.aif rename to sound/direct_sound_samples/cries/kubfu.aif diff --git a/sound/direct_sound_samples/cries/uncomp_litleo.aif b/sound/direct_sound_samples/cries/litleo.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_litleo.aif rename to sound/direct_sound_samples/cries/litleo.aif diff --git a/sound/direct_sound_samples/cries/uncomp_litten.aif b/sound/direct_sound_samples/cries/litten.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_litten.aif rename to sound/direct_sound_samples/cries/litten.aif diff --git a/sound/direct_sound_samples/cries/uncomp_lunala.aif b/sound/direct_sound_samples/cries/lunala.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_lunala.aif rename to sound/direct_sound_samples/cries/lunala.aif diff --git a/sound/direct_sound_samples/cries/uncomp_lurantis.aif b/sound/direct_sound_samples/cries/lurantis.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_lurantis.aif rename to sound/direct_sound_samples/cries/lurantis.aif diff --git a/sound/direct_sound_samples/cries/uncomp_lycanroc.aif b/sound/direct_sound_samples/cries/lycanroc.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_lycanroc.aif rename to sound/direct_sound_samples/cries/lycanroc.aif diff --git a/sound/direct_sound_samples/cries/uncomp_lycanroc_dusk.aif b/sound/direct_sound_samples/cries/lycanroc_dusk.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_lycanroc_dusk.aif rename to sound/direct_sound_samples/cries/lycanroc_dusk.aif diff --git a/sound/direct_sound_samples/cries/uncomp_lycanroc_midnight.aif b/sound/direct_sound_samples/cries/lycanroc_midnight.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_lycanroc_midnight.aif rename to sound/direct_sound_samples/cries/lycanroc_midnight.aif diff --git a/sound/direct_sound_samples/cries/uncomp_magearna.aif b/sound/direct_sound_samples/cries/magearna.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_magearna.aif rename to sound/direct_sound_samples/cries/magearna.aif diff --git a/sound/direct_sound_samples/cries/uncomp_malamar.aif b/sound/direct_sound_samples/cries/malamar.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_malamar.aif rename to sound/direct_sound_samples/cries/malamar.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mareanie.aif b/sound/direct_sound_samples/cries/mareanie.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mareanie.aif rename to sound/direct_sound_samples/cries/mareanie.aif diff --git a/sound/direct_sound_samples/cries/uncomp_marshadow.aif b/sound/direct_sound_samples/cries/marshadow.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_marshadow.aif rename to sound/direct_sound_samples/cries/marshadow.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_abomasnow.aif b/sound/direct_sound_samples/cries/mega_abomasnow.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_abomasnow.aif rename to sound/direct_sound_samples/cries/mega_abomasnow.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_absol.aif b/sound/direct_sound_samples/cries/mega_absol.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_absol.aif rename to sound/direct_sound_samples/cries/mega_absol.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_aerodactyl.aif b/sound/direct_sound_samples/cries/mega_aerodactyl.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_aerodactyl.aif rename to sound/direct_sound_samples/cries/mega_aerodactyl.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_aggron.aif b/sound/direct_sound_samples/cries/mega_aggron.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_aggron.aif rename to sound/direct_sound_samples/cries/mega_aggron.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_alakazam.aif b/sound/direct_sound_samples/cries/mega_alakazam.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_alakazam.aif rename to sound/direct_sound_samples/cries/mega_alakazam.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_altaria.aif b/sound/direct_sound_samples/cries/mega_altaria.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_altaria.aif rename to sound/direct_sound_samples/cries/mega_altaria.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_ampharos.aif b/sound/direct_sound_samples/cries/mega_ampharos.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_ampharos.aif rename to sound/direct_sound_samples/cries/mega_ampharos.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_audino.aif b/sound/direct_sound_samples/cries/mega_audino.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_audino.aif rename to sound/direct_sound_samples/cries/mega_audino.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_banette.aif b/sound/direct_sound_samples/cries/mega_banette.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_banette.aif rename to sound/direct_sound_samples/cries/mega_banette.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_beedrill.aif b/sound/direct_sound_samples/cries/mega_beedrill.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_beedrill.aif rename to sound/direct_sound_samples/cries/mega_beedrill.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_blastoise.aif b/sound/direct_sound_samples/cries/mega_blastoise.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_blastoise.aif rename to sound/direct_sound_samples/cries/mega_blastoise.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_blaziken.aif b/sound/direct_sound_samples/cries/mega_blaziken.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_blaziken.aif rename to sound/direct_sound_samples/cries/mega_blaziken.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_camerupt.aif b/sound/direct_sound_samples/cries/mega_camerupt.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_camerupt.aif rename to sound/direct_sound_samples/cries/mega_camerupt.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_charizard_x.aif b/sound/direct_sound_samples/cries/mega_charizard_x.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_charizard_x.aif rename to sound/direct_sound_samples/cries/mega_charizard_x.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_charizard_y.aif b/sound/direct_sound_samples/cries/mega_charizard_y.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_charizard_y.aif rename to sound/direct_sound_samples/cries/mega_charizard_y.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_diancie.aif b/sound/direct_sound_samples/cries/mega_diancie.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_diancie.aif rename to sound/direct_sound_samples/cries/mega_diancie.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_gallade.aif b/sound/direct_sound_samples/cries/mega_gallade.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_gallade.aif rename to sound/direct_sound_samples/cries/mega_gallade.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_garchomp.aif b/sound/direct_sound_samples/cries/mega_garchomp.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_garchomp.aif rename to sound/direct_sound_samples/cries/mega_garchomp.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_gardevoir.aif b/sound/direct_sound_samples/cries/mega_gardevoir.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_gardevoir.aif rename to sound/direct_sound_samples/cries/mega_gardevoir.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_gengar.aif b/sound/direct_sound_samples/cries/mega_gengar.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_gengar.aif rename to sound/direct_sound_samples/cries/mega_gengar.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_glalie.aif b/sound/direct_sound_samples/cries/mega_glalie.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_glalie.aif rename to sound/direct_sound_samples/cries/mega_glalie.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_gyarados.aif b/sound/direct_sound_samples/cries/mega_gyarados.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_gyarados.aif rename to sound/direct_sound_samples/cries/mega_gyarados.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_heracross.aif b/sound/direct_sound_samples/cries/mega_heracross.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_heracross.aif rename to sound/direct_sound_samples/cries/mega_heracross.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_houndoom.aif b/sound/direct_sound_samples/cries/mega_houndoom.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_houndoom.aif rename to sound/direct_sound_samples/cries/mega_houndoom.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_kangaskhan.aif b/sound/direct_sound_samples/cries/mega_kangaskhan.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_kangaskhan.aif rename to sound/direct_sound_samples/cries/mega_kangaskhan.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_latias.aif b/sound/direct_sound_samples/cries/mega_latias.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_latias.aif rename to sound/direct_sound_samples/cries/mega_latias.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_latios.aif b/sound/direct_sound_samples/cries/mega_latios.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_latios.aif rename to sound/direct_sound_samples/cries/mega_latios.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_lopunny.aif b/sound/direct_sound_samples/cries/mega_lopunny.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_lopunny.aif rename to sound/direct_sound_samples/cries/mega_lopunny.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_lucario.aif b/sound/direct_sound_samples/cries/mega_lucario.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_lucario.aif rename to sound/direct_sound_samples/cries/mega_lucario.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_manectric.aif b/sound/direct_sound_samples/cries/mega_manectric.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_manectric.aif rename to sound/direct_sound_samples/cries/mega_manectric.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_mawile.aif b/sound/direct_sound_samples/cries/mega_mawile.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_mawile.aif rename to sound/direct_sound_samples/cries/mega_mawile.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_medicham.aif b/sound/direct_sound_samples/cries/mega_medicham.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_medicham.aif rename to sound/direct_sound_samples/cries/mega_medicham.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_metagross.aif b/sound/direct_sound_samples/cries/mega_metagross.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_metagross.aif rename to sound/direct_sound_samples/cries/mega_metagross.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_mewtwo_x.aif b/sound/direct_sound_samples/cries/mega_mewtwo_x.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_mewtwo_x.aif rename to sound/direct_sound_samples/cries/mega_mewtwo_x.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_mewtwo_y.aif b/sound/direct_sound_samples/cries/mega_mewtwo_y.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_mewtwo_y.aif rename to sound/direct_sound_samples/cries/mega_mewtwo_y.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_pidgeot.aif b/sound/direct_sound_samples/cries/mega_pidgeot.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_pidgeot.aif rename to sound/direct_sound_samples/cries/mega_pidgeot.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_pinsir.aif b/sound/direct_sound_samples/cries/mega_pinsir.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_pinsir.aif rename to sound/direct_sound_samples/cries/mega_pinsir.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_rayquaza.aif b/sound/direct_sound_samples/cries/mega_rayquaza.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_rayquaza.aif rename to sound/direct_sound_samples/cries/mega_rayquaza.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_sableye.aif b/sound/direct_sound_samples/cries/mega_sableye.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_sableye.aif rename to sound/direct_sound_samples/cries/mega_sableye.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_salamence.aif b/sound/direct_sound_samples/cries/mega_salamence.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_salamence.aif rename to sound/direct_sound_samples/cries/mega_salamence.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_sceptile.aif b/sound/direct_sound_samples/cries/mega_sceptile.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_sceptile.aif rename to sound/direct_sound_samples/cries/mega_sceptile.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_scizor.aif b/sound/direct_sound_samples/cries/mega_scizor.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_scizor.aif rename to sound/direct_sound_samples/cries/mega_scizor.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_sharpedo.aif b/sound/direct_sound_samples/cries/mega_sharpedo.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_sharpedo.aif rename to sound/direct_sound_samples/cries/mega_sharpedo.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_slowbro.aif b/sound/direct_sound_samples/cries/mega_slowbro.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_slowbro.aif rename to sound/direct_sound_samples/cries/mega_slowbro.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_steelix.aif b/sound/direct_sound_samples/cries/mega_steelix.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_steelix.aif rename to sound/direct_sound_samples/cries/mega_steelix.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_swampert.aif b/sound/direct_sound_samples/cries/mega_swampert.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_swampert.aif rename to sound/direct_sound_samples/cries/mega_swampert.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_tyranitar.aif b/sound/direct_sound_samples/cries/mega_tyranitar.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_tyranitar.aif rename to sound/direct_sound_samples/cries/mega_tyranitar.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mega_venusaur.aif b/sound/direct_sound_samples/cries/mega_venusaur.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mega_venusaur.aif rename to sound/direct_sound_samples/cries/mega_venusaur.aif diff --git a/sound/direct_sound_samples/cries/uncomp_melmetal.aif b/sound/direct_sound_samples/cries/melmetal.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_melmetal.aif rename to sound/direct_sound_samples/cries/melmetal.aif diff --git a/sound/direct_sound_samples/cries/uncomp_meltan.aif b/sound/direct_sound_samples/cries/meltan.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_meltan.aif rename to sound/direct_sound_samples/cries/meltan.aif diff --git a/sound/direct_sound_samples/cries/uncomp_meowstic.aif b/sound/direct_sound_samples/cries/meowstic.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_meowstic.aif rename to sound/direct_sound_samples/cries/meowstic.aif diff --git a/sound/direct_sound_samples/cries/uncomp_milcery.aif b/sound/direct_sound_samples/cries/milcery.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_milcery.aif rename to sound/direct_sound_samples/cries/milcery.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mimikyu.aif b/sound/direct_sound_samples/cries/mimikyu.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mimikyu.aif rename to sound/direct_sound_samples/cries/mimikyu.aif diff --git a/sound/direct_sound_samples/cries/uncomp_minior.aif b/sound/direct_sound_samples/cries/minior.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_minior.aif rename to sound/direct_sound_samples/cries/minior.aif diff --git a/sound/direct_sound_samples/cries/uncomp_morelull.aif b/sound/direct_sound_samples/cries/morelull.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_morelull.aif rename to sound/direct_sound_samples/cries/morelull.aif diff --git a/sound/direct_sound_samples/cries/uncomp_morgrem.aif b/sound/direct_sound_samples/cries/morgrem.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_morgrem.aif rename to sound/direct_sound_samples/cries/morgrem.aif diff --git a/sound/direct_sound_samples/cries/uncomp_morpeko.aif b/sound/direct_sound_samples/cries/morpeko.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_morpeko.aif rename to sound/direct_sound_samples/cries/morpeko.aif diff --git a/sound/direct_sound_samples/cries/uncomp_morpeko_hangry.aif b/sound/direct_sound_samples/cries/morpeko_hangry.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_morpeko_hangry.aif rename to sound/direct_sound_samples/cries/morpeko_hangry.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mr_rime.aif b/sound/direct_sound_samples/cries/mr_rime.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mr_rime.aif rename to sound/direct_sound_samples/cries/mr_rime.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mudbray.aif b/sound/direct_sound_samples/cries/mudbray.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mudbray.aif rename to sound/direct_sound_samples/cries/mudbray.aif diff --git a/sound/direct_sound_samples/cries/uncomp_mudsdale.aif b/sound/direct_sound_samples/cries/mudsdale.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_mudsdale.aif rename to sound/direct_sound_samples/cries/mudsdale.aif diff --git a/sound/direct_sound_samples/cries/uncomp_naganadel.aif b/sound/direct_sound_samples/cries/naganadel.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_naganadel.aif rename to sound/direct_sound_samples/cries/naganadel.aif diff --git a/sound/direct_sound_samples/cries/uncomp_necrozma.aif b/sound/direct_sound_samples/cries/necrozma.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_necrozma.aif rename to sound/direct_sound_samples/cries/necrozma.aif diff --git a/sound/direct_sound_samples/cries/uncomp_necrozma_dawn_wings.aif b/sound/direct_sound_samples/cries/necrozma_dawn_wings.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_necrozma_dawn_wings.aif rename to sound/direct_sound_samples/cries/necrozma_dawn_wings.aif diff --git a/sound/direct_sound_samples/cries/uncomp_necrozma_dusk_mane.aif b/sound/direct_sound_samples/cries/necrozma_dusk_mane.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_necrozma_dusk_mane.aif rename to sound/direct_sound_samples/cries/necrozma_dusk_mane.aif diff --git a/sound/direct_sound_samples/cries/uncomp_necrozma_ultra.aif b/sound/direct_sound_samples/cries/necrozma_ultra.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_necrozma_ultra.aif rename to sound/direct_sound_samples/cries/necrozma_ultra.aif diff --git a/sound/direct_sound_samples/cries/uncomp_nickit.aif b/sound/direct_sound_samples/cries/nickit.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_nickit.aif rename to sound/direct_sound_samples/cries/nickit.aif diff --git a/sound/direct_sound_samples/cries/uncomp_nihilego.aif b/sound/direct_sound_samples/cries/nihilego.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_nihilego.aif rename to sound/direct_sound_samples/cries/nihilego.aif diff --git a/sound/direct_sound_samples/cries/noibat.aif b/sound/direct_sound_samples/cries/noibat.aif new file mode 100644 index 0000000000..c77342cc1c Binary files /dev/null and b/sound/direct_sound_samples/cries/noibat.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_noivern.aif b/sound/direct_sound_samples/cries/noivern.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_noivern.aif rename to sound/direct_sound_samples/cries/noivern.aif diff --git a/sound/direct_sound_samples/cries/uncomp_obstagoon.aif b/sound/direct_sound_samples/cries/obstagoon.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_obstagoon.aif rename to sound/direct_sound_samples/cries/obstagoon.aif diff --git a/sound/direct_sound_samples/cries/uncomp_oranguru.aif b/sound/direct_sound_samples/cries/oranguru.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_oranguru.aif rename to sound/direct_sound_samples/cries/oranguru.aif diff --git a/sound/direct_sound_samples/cries/uncomp_orbeetle.aif b/sound/direct_sound_samples/cries/orbeetle.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_orbeetle.aif rename to sound/direct_sound_samples/cries/orbeetle.aif diff --git a/sound/direct_sound_samples/cries/uncomp_oricorio.aif b/sound/direct_sound_samples/cries/oricorio.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_oricorio.aif rename to sound/direct_sound_samples/cries/oricorio.aif diff --git a/sound/direct_sound_samples/cries/uncomp_oricorio_pau.aif b/sound/direct_sound_samples/cries/oricorio_pau.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_oricorio_pau.aif rename to sound/direct_sound_samples/cries/oricorio_pau.aif diff --git a/sound/direct_sound_samples/cries/oricorio_pom_pom.aif b/sound/direct_sound_samples/cries/oricorio_pom_pom.aif new file mode 100644 index 0000000000..bb4c1f27a0 Binary files /dev/null and b/sound/direct_sound_samples/cries/oricorio_pom_pom.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_oricorio_sensu.aif b/sound/direct_sound_samples/cries/oricorio_sensu.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_oricorio_sensu.aif rename to sound/direct_sound_samples/cries/oricorio_sensu.aif diff --git a/sound/direct_sound_samples/cries/uncomp_palossand.aif b/sound/direct_sound_samples/cries/palossand.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_palossand.aif rename to sound/direct_sound_samples/cries/palossand.aif diff --git a/sound/direct_sound_samples/cries/uncomp_pancham.aif b/sound/direct_sound_samples/cries/pancham.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_pancham.aif rename to sound/direct_sound_samples/cries/pancham.aif diff --git a/sound/direct_sound_samples/cries/uncomp_pangoro.aif b/sound/direct_sound_samples/cries/pangoro.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_pangoro.aif rename to sound/direct_sound_samples/cries/pangoro.aif diff --git a/sound/direct_sound_samples/cries/uncomp_passimian.aif b/sound/direct_sound_samples/cries/passimian.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_passimian.aif rename to sound/direct_sound_samples/cries/passimian.aif diff --git a/sound/direct_sound_samples/cries/uncomp_perrserker.aif b/sound/direct_sound_samples/cries/perrserker.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_perrserker.aif rename to sound/direct_sound_samples/cries/perrserker.aif diff --git a/sound/direct_sound_samples/cries/uncomp_phantump.aif b/sound/direct_sound_samples/cries/phantump.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_phantump.aif rename to sound/direct_sound_samples/cries/phantump.aif diff --git a/sound/direct_sound_samples/cries/uncomp_pheromosa.aif b/sound/direct_sound_samples/cries/pheromosa.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_pheromosa.aif rename to sound/direct_sound_samples/cries/pheromosa.aif diff --git a/sound/direct_sound_samples/cries/uncomp_pikipek.aif b/sound/direct_sound_samples/cries/pikipek.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_pikipek.aif rename to sound/direct_sound_samples/cries/pikipek.aif diff --git a/sound/direct_sound_samples/cries/uncomp_pincurchin.aif b/sound/direct_sound_samples/cries/pincurchin.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_pincurchin.aif rename to sound/direct_sound_samples/cries/pincurchin.aif diff --git a/sound/direct_sound_samples/cries/uncomp_poipole.aif b/sound/direct_sound_samples/cries/poipole.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_poipole.aif rename to sound/direct_sound_samples/cries/poipole.aif diff --git a/sound/direct_sound_samples/cries/uncomp_polteageist.aif b/sound/direct_sound_samples/cries/polteageist.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_polteageist.aif rename to sound/direct_sound_samples/cries/polteageist.aif diff --git a/sound/direct_sound_samples/cries/uncomp_popplio.aif b/sound/direct_sound_samples/cries/popplio.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_popplio.aif rename to sound/direct_sound_samples/cries/popplio.aif diff --git a/sound/direct_sound_samples/cries/uncomp_primal_groudon.aif b/sound/direct_sound_samples/cries/primal_groudon.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_primal_groudon.aif rename to sound/direct_sound_samples/cries/primal_groudon.aif diff --git a/sound/direct_sound_samples/cries/uncomp_primal_kyogre.aif b/sound/direct_sound_samples/cries/primal_kyogre.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_primal_kyogre.aif rename to sound/direct_sound_samples/cries/primal_kyogre.aif diff --git a/sound/direct_sound_samples/cries/uncomp_primarina.aif b/sound/direct_sound_samples/cries/primarina.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_primarina.aif rename to sound/direct_sound_samples/cries/primarina.aif diff --git a/sound/direct_sound_samples/cries/uncomp_pumpkaboo.aif b/sound/direct_sound_samples/cries/pumpkaboo.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_pumpkaboo.aif rename to sound/direct_sound_samples/cries/pumpkaboo.aif diff --git a/sound/direct_sound_samples/cries/uncomp_pumpkaboo_super.aif b/sound/direct_sound_samples/cries/pumpkaboo_super.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_pumpkaboo_super.aif rename to sound/direct_sound_samples/cries/pumpkaboo_super.aif diff --git a/sound/direct_sound_samples/cries/uncomp_pyroar.aif b/sound/direct_sound_samples/cries/pyroar.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_pyroar.aif rename to sound/direct_sound_samples/cries/pyroar.aif diff --git a/sound/direct_sound_samples/cries/uncomp_pyukumuku.aif b/sound/direct_sound_samples/cries/pyukumuku.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_pyukumuku.aif rename to sound/direct_sound_samples/cries/pyukumuku.aif diff --git a/sound/direct_sound_samples/cries/uncomp_quilladin.aif b/sound/direct_sound_samples/cries/quilladin.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_quilladin.aif rename to sound/direct_sound_samples/cries/quilladin.aif diff --git a/sound/direct_sound_samples/cries/uncomp_raboot.aif b/sound/direct_sound_samples/cries/raboot.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_raboot.aif rename to sound/direct_sound_samples/cries/raboot.aif diff --git a/sound/direct_sound_samples/cries/uncomp_regidrago.aif b/sound/direct_sound_samples/cries/regidrago.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_regidrago.aif rename to sound/direct_sound_samples/cries/regidrago.aif diff --git a/sound/direct_sound_samples/cries/uncomp_regieleki.aif b/sound/direct_sound_samples/cries/regieleki.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_regieleki.aif rename to sound/direct_sound_samples/cries/regieleki.aif diff --git a/sound/direct_sound_samples/cries/uncomp_ribombee.aif b/sound/direct_sound_samples/cries/ribombee.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_ribombee.aif rename to sound/direct_sound_samples/cries/ribombee.aif diff --git a/sound/direct_sound_samples/cries/uncomp_rillaboom.aif b/sound/direct_sound_samples/cries/rillaboom.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_rillaboom.aif rename to sound/direct_sound_samples/cries/rillaboom.aif diff --git a/sound/direct_sound_samples/cries/uncomp_rockruff.aif b/sound/direct_sound_samples/cries/rockruff.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_rockruff.aif rename to sound/direct_sound_samples/cries/rockruff.aif diff --git a/sound/direct_sound_samples/cries/uncomp_rolycoly.aif b/sound/direct_sound_samples/cries/rolycoly.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_rolycoly.aif rename to sound/direct_sound_samples/cries/rolycoly.aif diff --git a/sound/direct_sound_samples/cries/uncomp_rookidee.aif b/sound/direct_sound_samples/cries/rookidee.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_rookidee.aif rename to sound/direct_sound_samples/cries/rookidee.aif diff --git a/sound/direct_sound_samples/cries/uncomp_rowlet.aif b/sound/direct_sound_samples/cries/rowlet.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_rowlet.aif rename to sound/direct_sound_samples/cries/rowlet.aif diff --git a/sound/direct_sound_samples/cries/uncomp_runerigus.aif b/sound/direct_sound_samples/cries/runerigus.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_runerigus.aif rename to sound/direct_sound_samples/cries/runerigus.aif diff --git a/sound/direct_sound_samples/cries/uncomp_salandit.aif b/sound/direct_sound_samples/cries/salandit.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_salandit.aif rename to sound/direct_sound_samples/cries/salandit.aif diff --git a/sound/direct_sound_samples/cries/uncomp_salazzle.aif b/sound/direct_sound_samples/cries/salazzle.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_salazzle.aif rename to sound/direct_sound_samples/cries/salazzle.aif diff --git a/sound/direct_sound_samples/cries/uncomp_sandaconda.aif b/sound/direct_sound_samples/cries/sandaconda.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_sandaconda.aif rename to sound/direct_sound_samples/cries/sandaconda.aif diff --git a/sound/direct_sound_samples/cries/uncomp_sandygast.aif b/sound/direct_sound_samples/cries/sandygast.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_sandygast.aif rename to sound/direct_sound_samples/cries/sandygast.aif diff --git a/sound/direct_sound_samples/cries/uncomp_scatterbug.aif b/sound/direct_sound_samples/cries/scatterbug.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_scatterbug.aif rename to sound/direct_sound_samples/cries/scatterbug.aif diff --git a/sound/direct_sound_samples/cries/uncomp_scorbunny.aif b/sound/direct_sound_samples/cries/scorbunny.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_scorbunny.aif rename to sound/direct_sound_samples/cries/scorbunny.aif diff --git a/sound/direct_sound_samples/cries/shelmet.aif b/sound/direct_sound_samples/cries/shelmet.aif index 13bf69e3ea..b65d435f53 100644 Binary files a/sound/direct_sound_samples/cries/shelmet.aif and b/sound/direct_sound_samples/cries/shelmet.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_shiinotic.aif b/sound/direct_sound_samples/cries/shiinotic.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_shiinotic.aif rename to sound/direct_sound_samples/cries/shiinotic.aif diff --git a/sound/direct_sound_samples/cries/uncomp_silicobra.aif b/sound/direct_sound_samples/cries/silicobra.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_silicobra.aif rename to sound/direct_sound_samples/cries/silicobra.aif diff --git a/sound/direct_sound_samples/cries/uncomp_silvally.aif b/sound/direct_sound_samples/cries/silvally.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_silvally.aif rename to sound/direct_sound_samples/cries/silvally.aif diff --git a/sound/direct_sound_samples/cries/uncomp_sinistea.aif b/sound/direct_sound_samples/cries/sinistea.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_sinistea.aif rename to sound/direct_sound_samples/cries/sinistea.aif diff --git a/sound/direct_sound_samples/cries/uncomp_sirfetchd.aif b/sound/direct_sound_samples/cries/sirfetchd.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_sirfetchd.aif rename to sound/direct_sound_samples/cries/sirfetchd.aif diff --git a/sound/direct_sound_samples/cries/uncomp_sizzlipede.aif b/sound/direct_sound_samples/cries/sizzlipede.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_sizzlipede.aif rename to sound/direct_sound_samples/cries/sizzlipede.aif diff --git a/sound/direct_sound_samples/cries/uncomp_skiddo.aif b/sound/direct_sound_samples/cries/skiddo.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_skiddo.aif rename to sound/direct_sound_samples/cries/skiddo.aif diff --git a/sound/direct_sound_samples/cries/uncomp_skrelp.aif b/sound/direct_sound_samples/cries/skrelp.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_skrelp.aif rename to sound/direct_sound_samples/cries/skrelp.aif diff --git a/sound/direct_sound_samples/cries/uncomp_skwovet.aif b/sound/direct_sound_samples/cries/skwovet.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_skwovet.aif rename to sound/direct_sound_samples/cries/skwovet.aif diff --git a/sound/direct_sound_samples/cries/uncomp_sliggoo.aif b/sound/direct_sound_samples/cries/sliggoo.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_sliggoo.aif rename to sound/direct_sound_samples/cries/sliggoo.aif diff --git a/sound/direct_sound_samples/cries/uncomp_slowpoke_galarian.aif b/sound/direct_sound_samples/cries/slowpoke_galarian.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_slowpoke_galarian.aif rename to sound/direct_sound_samples/cries/slowpoke_galarian.aif diff --git a/sound/direct_sound_samples/cries/uncomp_slurpuff.aif b/sound/direct_sound_samples/cries/slurpuff.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_slurpuff.aif rename to sound/direct_sound_samples/cries/slurpuff.aif diff --git a/sound/direct_sound_samples/cries/uncomp_snom.aif b/sound/direct_sound_samples/cries/snom.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_snom.aif rename to sound/direct_sound_samples/cries/snom.aif diff --git a/sound/direct_sound_samples/cries/uncomp_sobble.aif b/sound/direct_sound_samples/cries/sobble.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_sobble.aif rename to sound/direct_sound_samples/cries/sobble.aif diff --git a/sound/direct_sound_samples/cries/uncomp_solgaleo.aif b/sound/direct_sound_samples/cries/solgaleo.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_solgaleo.aif rename to sound/direct_sound_samples/cries/solgaleo.aif diff --git a/sound/direct_sound_samples/cries/uncomp_spectrier.aif b/sound/direct_sound_samples/cries/spectrier.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_spectrier.aif rename to sound/direct_sound_samples/cries/spectrier.aif diff --git a/sound/direct_sound_samples/cries/uncomp_spewpa.aif b/sound/direct_sound_samples/cries/spewpa.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_spewpa.aif rename to sound/direct_sound_samples/cries/spewpa.aif diff --git a/sound/direct_sound_samples/cries/uncomp_spritzee.aif b/sound/direct_sound_samples/cries/spritzee.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_spritzee.aif rename to sound/direct_sound_samples/cries/spritzee.aif diff --git a/sound/direct_sound_samples/cries/uncomp_stakataka.aif b/sound/direct_sound_samples/cries/stakataka.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_stakataka.aif rename to sound/direct_sound_samples/cries/stakataka.aif diff --git a/sound/direct_sound_samples/cries/uncomp_steenee.aif b/sound/direct_sound_samples/cries/steenee.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_steenee.aif rename to sound/direct_sound_samples/cries/steenee.aif diff --git a/sound/direct_sound_samples/cries/uncomp_stonjourner.aif b/sound/direct_sound_samples/cries/stonjourner.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_stonjourner.aif rename to sound/direct_sound_samples/cries/stonjourner.aif diff --git a/sound/direct_sound_samples/cries/uncomp_stufful.aif b/sound/direct_sound_samples/cries/stufful.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_stufful.aif rename to sound/direct_sound_samples/cries/stufful.aif diff --git a/sound/direct_sound_samples/cries/uncomp_swirlix.aif b/sound/direct_sound_samples/cries/swirlix.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_swirlix.aif rename to sound/direct_sound_samples/cries/swirlix.aif diff --git a/sound/direct_sound_samples/cries/swoobat.aif b/sound/direct_sound_samples/cries/swoobat.aif index 4b15334b5a..c5b530b714 100644 Binary files a/sound/direct_sound_samples/cries/swoobat.aif and b/sound/direct_sound_samples/cries/swoobat.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_sylveon.aif b/sound/direct_sound_samples/cries/sylveon.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_sylveon.aif rename to sound/direct_sound_samples/cries/sylveon.aif diff --git a/sound/direct_sound_samples/cries/uncomp_talonflame.aif b/sound/direct_sound_samples/cries/talonflame.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_talonflame.aif rename to sound/direct_sound_samples/cries/talonflame.aif diff --git a/sound/direct_sound_samples/cries/uncomp_tapu_bulu.aif b/sound/direct_sound_samples/cries/tapu_bulu.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_tapu_bulu.aif rename to sound/direct_sound_samples/cries/tapu_bulu.aif diff --git a/sound/direct_sound_samples/cries/uncomp_tapu_fini.aif b/sound/direct_sound_samples/cries/tapu_fini.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_tapu_fini.aif rename to sound/direct_sound_samples/cries/tapu_fini.aif diff --git a/sound/direct_sound_samples/cries/uncomp_tapu_koko.aif b/sound/direct_sound_samples/cries/tapu_koko.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_tapu_koko.aif rename to sound/direct_sound_samples/cries/tapu_koko.aif diff --git a/sound/direct_sound_samples/cries/uncomp_tapu_lele.aif b/sound/direct_sound_samples/cries/tapu_lele.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_tapu_lele.aif rename to sound/direct_sound_samples/cries/tapu_lele.aif diff --git a/sound/direct_sound_samples/cries/uncomp_thievul.aif b/sound/direct_sound_samples/cries/thievul.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_thievul.aif rename to sound/direct_sound_samples/cries/thievul.aif diff --git a/sound/direct_sound_samples/cries/uncomp_thwackey.aif b/sound/direct_sound_samples/cries/thwackey.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_thwackey.aif rename to sound/direct_sound_samples/cries/thwackey.aif diff --git a/sound/direct_sound_samples/cries/uncomp_togedemaru.aif b/sound/direct_sound_samples/cries/togedemaru.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_togedemaru.aif rename to sound/direct_sound_samples/cries/togedemaru.aif diff --git a/sound/direct_sound_samples/cries/uncomp_torracat.aif b/sound/direct_sound_samples/cries/torracat.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_torracat.aif rename to sound/direct_sound_samples/cries/torracat.aif diff --git a/sound/direct_sound_samples/cries/uncomp_toucannon.aif b/sound/direct_sound_samples/cries/toucannon.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_toucannon.aif rename to sound/direct_sound_samples/cries/toucannon.aif diff --git a/sound/direct_sound_samples/cries/uncomp_toxapex.aif b/sound/direct_sound_samples/cries/toxapex.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_toxapex.aif rename to sound/direct_sound_samples/cries/toxapex.aif diff --git a/sound/direct_sound_samples/cries/uncomp_toxel.aif b/sound/direct_sound_samples/cries/toxel.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_toxel.aif rename to sound/direct_sound_samples/cries/toxel.aif diff --git a/sound/direct_sound_samples/cries/uncomp_toxtricity.aif b/sound/direct_sound_samples/cries/toxtricity.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_toxtricity.aif rename to sound/direct_sound_samples/cries/toxtricity.aif diff --git a/sound/direct_sound_samples/cries/uncomp_toxtricity_low_key.aif b/sound/direct_sound_samples/cries/toxtricity_low_key.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_toxtricity_low_key.aif rename to sound/direct_sound_samples/cries/toxtricity_low_key.aif diff --git a/sound/direct_sound_samples/cries/uncomp_trevenant.aif b/sound/direct_sound_samples/cries/trevenant.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_trevenant.aif rename to sound/direct_sound_samples/cries/trevenant.aif diff --git a/sound/direct_sound_samples/cries/uncomp_trumbeak.aif b/sound/direct_sound_samples/cries/trumbeak.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_trumbeak.aif rename to sound/direct_sound_samples/cries/trumbeak.aif diff --git a/sound/direct_sound_samples/cries/uncomp_tsareena.aif b/sound/direct_sound_samples/cries/tsareena.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_tsareena.aif rename to sound/direct_sound_samples/cries/tsareena.aif diff --git a/sound/direct_sound_samples/cries/uncomp_turtonator.aif b/sound/direct_sound_samples/cries/turtonator.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_turtonator.aif rename to sound/direct_sound_samples/cries/turtonator.aif diff --git a/sound/direct_sound_samples/cries/uncomp_type_null.aif b/sound/direct_sound_samples/cries/type_null.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_type_null.aif rename to sound/direct_sound_samples/cries/type_null.aif diff --git a/sound/direct_sound_samples/cries/uncomp_tyrantrum.aif b/sound/direct_sound_samples/cries/tyrantrum.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_tyrantrum.aif rename to sound/direct_sound_samples/cries/tyrantrum.aif diff --git a/sound/direct_sound_samples/cries/uncomp_tyrunt.aif b/sound/direct_sound_samples/cries/tyrunt.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_tyrunt.aif rename to sound/direct_sound_samples/cries/tyrunt.aif diff --git a/sound/direct_sound_samples/cries/uncomp_cottonee.aif b/sound/direct_sound_samples/cries/uncomp_cottonee.aif deleted file mode 100644 index a459a62f72..0000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_cottonee.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_elgyem.aif b/sound/direct_sound_samples/cries/uncomp_elgyem.aif deleted file mode 100644 index f1e94c1364..0000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_elgyem.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_foongus.aif b/sound/direct_sound_samples/cries/uncomp_foongus.aif deleted file mode 100644 index dbd6f9c5cd..0000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_foongus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_keldeo.aif b/sound/direct_sound_samples/cries/uncomp_keldeo.aif deleted file mode 100644 index 4f73fc22da..0000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_keldeo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_klefki.aif b/sound/direct_sound_samples/cries/uncomp_klefki.aif index f07f78dd9a..4ffa19b575 100644 Binary files a/sound/direct_sound_samples/cries/uncomp_klefki.aif and b/sound/direct_sound_samples/cries/uncomp_klefki.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_noibat.aif b/sound/direct_sound_samples/cries/uncomp_noibat.aif deleted file mode 100644 index 38c008fd7d..0000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_noibat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.aif b/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.aif deleted file mode 100644 index e4685dc530..0000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_shelmet.aif b/sound/direct_sound_samples/cries/uncomp_shelmet.aif deleted file mode 100644 index b65d435f53..0000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_shelmet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_swoobat.aif b/sound/direct_sound_samples/cries/uncomp_swoobat.aif deleted file mode 100644 index c5b530b714..0000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_swoobat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_yamask.aif b/sound/direct_sound_samples/cries/uncomp_yamask.aif deleted file mode 100644 index 8d44817f7b..0000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_yamask.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_urshifu.aif b/sound/direct_sound_samples/cries/urshifu.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_urshifu.aif rename to sound/direct_sound_samples/cries/urshifu.aif diff --git a/sound/direct_sound_samples/cries/uncomp_urshifu_rapid_strike_style.aif b/sound/direct_sound_samples/cries/urshifu_rapid_strike_style.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_urshifu_rapid_strike_style.aif rename to sound/direct_sound_samples/cries/urshifu_rapid_strike_style.aif diff --git a/sound/direct_sound_samples/cries/uncomp_vikavolt.aif b/sound/direct_sound_samples/cries/vikavolt.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_vikavolt.aif rename to sound/direct_sound_samples/cries/vikavolt.aif diff --git a/sound/direct_sound_samples/cries/uncomp_vivillon.aif b/sound/direct_sound_samples/cries/vivillon.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_vivillon.aif rename to sound/direct_sound_samples/cries/vivillon.aif diff --git a/sound/direct_sound_samples/cries/uncomp_volcanion.aif b/sound/direct_sound_samples/cries/volcanion.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_volcanion.aif rename to sound/direct_sound_samples/cries/volcanion.aif diff --git a/sound/direct_sound_samples/cries/uncomp_wimpod.aif b/sound/direct_sound_samples/cries/wimpod.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_wimpod.aif rename to sound/direct_sound_samples/cries/wimpod.aif diff --git a/sound/direct_sound_samples/cries/uncomp_wishiwashi.aif b/sound/direct_sound_samples/cries/wishiwashi.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_wishiwashi.aif rename to sound/direct_sound_samples/cries/wishiwashi.aif diff --git a/sound/direct_sound_samples/cries/uncomp_wishiwashi_school.aif b/sound/direct_sound_samples/cries/wishiwashi_school.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_wishiwashi_school.aif rename to sound/direct_sound_samples/cries/wishiwashi_school.aif diff --git a/sound/direct_sound_samples/cries/uncomp_wooloo.aif b/sound/direct_sound_samples/cries/wooloo.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_wooloo.aif rename to sound/direct_sound_samples/cries/wooloo.aif diff --git a/sound/direct_sound_samples/cries/uncomp_xerneas.aif b/sound/direct_sound_samples/cries/xerneas.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_xerneas.aif rename to sound/direct_sound_samples/cries/xerneas.aif diff --git a/sound/direct_sound_samples/cries/uncomp_xurkitree.aif b/sound/direct_sound_samples/cries/xurkitree.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_xurkitree.aif rename to sound/direct_sound_samples/cries/xurkitree.aif diff --git a/sound/direct_sound_samples/cries/yamask.aif b/sound/direct_sound_samples/cries/yamask.aif index 519952d076..8d44817f7b 100644 Binary files a/sound/direct_sound_samples/cries/yamask.aif and b/sound/direct_sound_samples/cries/yamask.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_yamper.aif b/sound/direct_sound_samples/cries/yamper.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_yamper.aif rename to sound/direct_sound_samples/cries/yamper.aif diff --git a/sound/direct_sound_samples/cries/uncomp_yungoos.aif b/sound/direct_sound_samples/cries/yungoos.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_yungoos.aif rename to sound/direct_sound_samples/cries/yungoos.aif diff --git a/sound/direct_sound_samples/cries/uncomp_yveltal.aif b/sound/direct_sound_samples/cries/yveltal.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_yveltal.aif rename to sound/direct_sound_samples/cries/yveltal.aif diff --git a/sound/direct_sound_samples/cries/uncomp_zacian.aif b/sound/direct_sound_samples/cries/zacian.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_zacian.aif rename to sound/direct_sound_samples/cries/zacian.aif diff --git a/sound/direct_sound_samples/cries/uncomp_zacian_crowned_sword.aif b/sound/direct_sound_samples/cries/zacian_crowned_sword.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_zacian_crowned_sword.aif rename to sound/direct_sound_samples/cries/zacian_crowned_sword.aif diff --git a/sound/direct_sound_samples/cries/uncomp_zamazenta.aif b/sound/direct_sound_samples/cries/zamazenta.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_zamazenta.aif rename to sound/direct_sound_samples/cries/zamazenta.aif diff --git a/sound/direct_sound_samples/cries/uncomp_zamazenta_crowned_shield.aif b/sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_zamazenta_crowned_shield.aif rename to sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif diff --git a/sound/direct_sound_samples/cries/uncomp_zarude.aif b/sound/direct_sound_samples/cries/zarude.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_zarude.aif rename to sound/direct_sound_samples/cries/zarude.aif diff --git a/sound/direct_sound_samples/cries/uncomp_zeraora.aif b/sound/direct_sound_samples/cries/zeraora.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_zeraora.aif rename to sound/direct_sound_samples/cries/zeraora.aif diff --git a/sound/direct_sound_samples/cries/uncomp_zygarde.aif b/sound/direct_sound_samples/cries/zygarde.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_zygarde.aif rename to sound/direct_sound_samples/cries/zygarde.aif diff --git a/sound/direct_sound_samples/cries/uncomp_zygarde_10.aif b/sound/direct_sound_samples/cries/zygarde_10.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_zygarde_10.aif rename to sound/direct_sound_samples/cries/zygarde_10.aif diff --git a/sound/direct_sound_samples/cries/uncomp_zygarde_complete.aif b/sound/direct_sound_samples/cries/zygarde_complete.aif similarity index 100% rename from sound/direct_sound_samples/cries/uncomp_zygarde_complete.aif rename to sound/direct_sound_samples/cries/zygarde_complete.aif diff --git a/sound/direct_sound_samples/88DBBC0.aif b/sound/direct_sound_samples/phonemes/01.aif similarity index 100% rename from sound/direct_sound_samples/88DBBC0.aif rename to sound/direct_sound_samples/phonemes/01.aif diff --git a/sound/direct_sound_samples/88DC220.aif b/sound/direct_sound_samples/phonemes/02.aif similarity index 100% rename from sound/direct_sound_samples/88DC220.aif rename to sound/direct_sound_samples/phonemes/02.aif diff --git a/sound/direct_sound_samples/88DC704.aif b/sound/direct_sound_samples/phonemes/03.aif similarity index 100% rename from sound/direct_sound_samples/88DC704.aif rename to sound/direct_sound_samples/phonemes/03.aif diff --git a/sound/direct_sound_samples/88DD054.aif b/sound/direct_sound_samples/phonemes/04.aif similarity index 100% rename from sound/direct_sound_samples/88DD054.aif rename to sound/direct_sound_samples/phonemes/04.aif diff --git a/sound/direct_sound_samples/88DDAC4.aif b/sound/direct_sound_samples/phonemes/05.aif similarity index 100% rename from sound/direct_sound_samples/88DDAC4.aif rename to sound/direct_sound_samples/phonemes/05.aif diff --git a/sound/direct_sound_samples/88DDDE4.aif b/sound/direct_sound_samples/phonemes/06.aif similarity index 100% rename from sound/direct_sound_samples/88DDDE4.aif rename to sound/direct_sound_samples/phonemes/06.aif diff --git a/sound/direct_sound_samples/88DEA6C.aif b/sound/direct_sound_samples/phonemes/07.aif similarity index 100% rename from sound/direct_sound_samples/88DEA6C.aif rename to sound/direct_sound_samples/phonemes/07.aif diff --git a/sound/direct_sound_samples/88DF08C.aif b/sound/direct_sound_samples/phonemes/08.aif similarity index 100% rename from sound/direct_sound_samples/88DF08C.aif rename to sound/direct_sound_samples/phonemes/08.aif diff --git a/sound/direct_sound_samples/88DF414.aif b/sound/direct_sound_samples/phonemes/09.aif similarity index 100% rename from sound/direct_sound_samples/88DF414.aif rename to sound/direct_sound_samples/phonemes/09.aif diff --git a/sound/direct_sound_samples/88E01F8.aif b/sound/direct_sound_samples/phonemes/10.aif similarity index 100% rename from sound/direct_sound_samples/88E01F8.aif rename to sound/direct_sound_samples/phonemes/10.aif diff --git a/sound/direct_sound_samples/88E0B68.aif b/sound/direct_sound_samples/phonemes/11.aif similarity index 100% rename from sound/direct_sound_samples/88E0B68.aif rename to sound/direct_sound_samples/phonemes/11.aif diff --git a/sound/direct_sound_samples/88E0F04.aif b/sound/direct_sound_samples/phonemes/12.aif similarity index 100% rename from sound/direct_sound_samples/88E0F04.aif rename to sound/direct_sound_samples/phonemes/12.aif diff --git a/sound/direct_sound_samples/88E16B8.aif b/sound/direct_sound_samples/phonemes/13.aif similarity index 100% rename from sound/direct_sound_samples/88E16B8.aif rename to sound/direct_sound_samples/phonemes/13.aif diff --git a/sound/direct_sound_samples/88E2414.aif b/sound/direct_sound_samples/phonemes/14.aif similarity index 100% rename from sound/direct_sound_samples/88E2414.aif rename to sound/direct_sound_samples/phonemes/14.aif diff --git a/sound/direct_sound_samples/88E2658.aif b/sound/direct_sound_samples/phonemes/15.aif similarity index 100% rename from sound/direct_sound_samples/88E2658.aif rename to sound/direct_sound_samples/phonemes/15.aif diff --git a/sound/direct_sound_samples/88E3498.aif b/sound/direct_sound_samples/phonemes/16.aif similarity index 100% rename from sound/direct_sound_samples/88E3498.aif rename to sound/direct_sound_samples/phonemes/16.aif diff --git a/sound/direct_sound_samples/88E3DEC.aif b/sound/direct_sound_samples/phonemes/17.aif similarity index 100% rename from sound/direct_sound_samples/88E3DEC.aif rename to sound/direct_sound_samples/phonemes/17.aif diff --git a/sound/direct_sound_samples/88E4140.aif b/sound/direct_sound_samples/phonemes/18.aif similarity index 100% rename from sound/direct_sound_samples/88E4140.aif rename to sound/direct_sound_samples/phonemes/18.aif diff --git a/sound/direct_sound_samples/88E4774.aif b/sound/direct_sound_samples/phonemes/19.aif similarity index 100% rename from sound/direct_sound_samples/88E4774.aif rename to sound/direct_sound_samples/phonemes/19.aif diff --git a/sound/direct_sound_samples/88E53E0.aif b/sound/direct_sound_samples/phonemes/20.aif similarity index 100% rename from sound/direct_sound_samples/88E53E0.aif rename to sound/direct_sound_samples/phonemes/20.aif diff --git a/sound/direct_sound_samples/88E5978.aif b/sound/direct_sound_samples/phonemes/21.aif similarity index 100% rename from sound/direct_sound_samples/88E5978.aif rename to sound/direct_sound_samples/phonemes/21.aif diff --git a/sound/direct_sound_samples/88E647C.aif b/sound/direct_sound_samples/phonemes/22.aif similarity index 100% rename from sound/direct_sound_samples/88E647C.aif rename to sound/direct_sound_samples/phonemes/22.aif diff --git a/sound/direct_sound_samples/88E6A80.aif b/sound/direct_sound_samples/phonemes/23.aif similarity index 100% rename from sound/direct_sound_samples/88E6A80.aif rename to sound/direct_sound_samples/phonemes/23.aif diff --git a/sound/direct_sound_samples/88E6C78.aif b/sound/direct_sound_samples/phonemes/24.aif similarity index 100% rename from sound/direct_sound_samples/88E6C78.aif rename to sound/direct_sound_samples/phonemes/24.aif diff --git a/sound/direct_sound_samples/88E75DC.aif b/sound/direct_sound_samples/phonemes/25.aif similarity index 100% rename from sound/direct_sound_samples/88E75DC.aif rename to sound/direct_sound_samples/phonemes/25.aif diff --git a/sound/direct_sound_samples/88E8568.aif b/sound/direct_sound_samples/phonemes/26.aif similarity index 100% rename from sound/direct_sound_samples/88E8568.aif rename to sound/direct_sound_samples/phonemes/26.aif diff --git a/sound/direct_sound_samples/88E8BA0.aif b/sound/direct_sound_samples/phonemes/27.aif similarity index 100% rename from sound/direct_sound_samples/88E8BA0.aif rename to sound/direct_sound_samples/phonemes/27.aif diff --git a/sound/direct_sound_samples/88E9674.aif b/sound/direct_sound_samples/phonemes/28.aif similarity index 100% rename from sound/direct_sound_samples/88E9674.aif rename to sound/direct_sound_samples/phonemes/28.aif diff --git a/sound/direct_sound_samples/88EA5B8.aif b/sound/direct_sound_samples/phonemes/29.aif similarity index 100% rename from sound/direct_sound_samples/88EA5B8.aif rename to sound/direct_sound_samples/phonemes/29.aif diff --git a/sound/direct_sound_samples/88EAB30.aif b/sound/direct_sound_samples/phonemes/30.aif similarity index 100% rename from sound/direct_sound_samples/88EAB30.aif rename to sound/direct_sound_samples/phonemes/30.aif diff --git a/sound/direct_sound_samples/88EB97C.aif b/sound/direct_sound_samples/phonemes/31.aif similarity index 100% rename from sound/direct_sound_samples/88EB97C.aif rename to sound/direct_sound_samples/phonemes/31.aif diff --git a/sound/direct_sound_samples/88EC884.aif b/sound/direct_sound_samples/phonemes/32.aif similarity index 100% rename from sound/direct_sound_samples/88EC884.aif rename to sound/direct_sound_samples/phonemes/32.aif diff --git a/sound/direct_sound_samples/88ED358.aif b/sound/direct_sound_samples/phonemes/33.aif similarity index 100% rename from sound/direct_sound_samples/88ED358.aif rename to sound/direct_sound_samples/phonemes/33.aif diff --git a/sound/direct_sound_samples/88EDEEC.aif b/sound/direct_sound_samples/phonemes/34.aif similarity index 100% rename from sound/direct_sound_samples/88EDEEC.aif rename to sound/direct_sound_samples/phonemes/34.aif diff --git a/sound/direct_sound_samples/88EE8C4.aif b/sound/direct_sound_samples/phonemes/35.aif similarity index 100% rename from sound/direct_sound_samples/88EE8C4.aif rename to sound/direct_sound_samples/phonemes/35.aif diff --git a/sound/direct_sound_samples/88EEF04.aif b/sound/direct_sound_samples/phonemes/36.aif similarity index 100% rename from sound/direct_sound_samples/88EEF04.aif rename to sound/direct_sound_samples/phonemes/36.aif diff --git a/sound/direct_sound_samples/88EF9E4.aif b/sound/direct_sound_samples/phonemes/37.aif similarity index 100% rename from sound/direct_sound_samples/88EF9E4.aif rename to sound/direct_sound_samples/phonemes/37.aif diff --git a/sound/direct_sound_samples/88F0020.aif b/sound/direct_sound_samples/phonemes/38.aif similarity index 100% rename from sound/direct_sound_samples/88F0020.aif rename to sound/direct_sound_samples/phonemes/38.aif diff --git a/sound/direct_sound_samples/88F0738.aif b/sound/direct_sound_samples/phonemes/39.aif similarity index 100% rename from sound/direct_sound_samples/88F0738.aif rename to sound/direct_sound_samples/phonemes/39.aif diff --git a/sound/direct_sound_samples/88F1074.aif b/sound/direct_sound_samples/phonemes/40.aif similarity index 100% rename from sound/direct_sound_samples/88F1074.aif rename to sound/direct_sound_samples/phonemes/40.aif diff --git a/sound/direct_sound_samples/88F1830.aif b/sound/direct_sound_samples/phonemes/41.aif similarity index 100% rename from sound/direct_sound_samples/88F1830.aif rename to sound/direct_sound_samples/phonemes/41.aif diff --git a/sound/direct_sound_samples/88F1D94.aif b/sound/direct_sound_samples/phonemes/42.aif similarity index 100% rename from sound/direct_sound_samples/88F1D94.aif rename to sound/direct_sound_samples/phonemes/42.aif diff --git a/sound/direct_sound_samples/88F2B08.aif b/sound/direct_sound_samples/phonemes/43.aif similarity index 100% rename from sound/direct_sound_samples/88F2B08.aif rename to sound/direct_sound_samples/phonemes/43.aif diff --git a/sound/direct_sound_samples/88F2F84.aif b/sound/direct_sound_samples/phonemes/44.aif similarity index 100% rename from sound/direct_sound_samples/88F2F84.aif rename to sound/direct_sound_samples/phonemes/44.aif diff --git a/sound/direct_sound_samples/88F3470.aif b/sound/direct_sound_samples/phonemes/45.aif similarity index 100% rename from sound/direct_sound_samples/88F3470.aif rename to sound/direct_sound_samples/phonemes/45.aif diff --git a/sound/direct_sound_samples/88F3C38.aif b/sound/direct_sound_samples/phonemes/46.aif similarity index 100% rename from sound/direct_sound_samples/88F3C38.aif rename to sound/direct_sound_samples/phonemes/46.aif diff --git a/sound/direct_sound_samples/88F4834.aif b/sound/direct_sound_samples/phonemes/47.aif similarity index 100% rename from sound/direct_sound_samples/88F4834.aif rename to sound/direct_sound_samples/phonemes/47.aif diff --git a/sound/direct_sound_samples/88F4BAC.aif b/sound/direct_sound_samples/phonemes/48.aif similarity index 100% rename from sound/direct_sound_samples/88F4BAC.aif rename to sound/direct_sound_samples/phonemes/48.aif diff --git a/sound/direct_sound_samples/88F5368.aif b/sound/direct_sound_samples/phonemes/49.aif similarity index 100% rename from sound/direct_sound_samples/88F5368.aif rename to sound/direct_sound_samples/phonemes/49.aif diff --git a/sound/direct_sound_samples/88F5FCC.aif b/sound/direct_sound_samples/phonemes/50.aif similarity index 100% rename from sound/direct_sound_samples/88F5FCC.aif rename to sound/direct_sound_samples/phonemes/50.aif diff --git a/sound/direct_sound_samples/88F6498.aif b/sound/direct_sound_samples/phonemes/51.aif similarity index 100% rename from sound/direct_sound_samples/88F6498.aif rename to sound/direct_sound_samples/phonemes/51.aif diff --git a/sound/direct_sound_samples/8725A2C.aif b/sound/direct_sound_samples/unknown_01.aif similarity index 100% rename from sound/direct_sound_samples/8725A2C.aif rename to sound/direct_sound_samples/unknown_01.aif diff --git a/sound/direct_sound_samples/872762C.aif b/sound/direct_sound_samples/unknown_02.aif similarity index 100% rename from sound/direct_sound_samples/872762C.aif rename to sound/direct_sound_samples/unknown_02.aif diff --git a/sound/direct_sound_samples/872921C.aif b/sound/direct_sound_samples/unknown_03.aif similarity index 100% rename from sound/direct_sound_samples/872921C.aif rename to sound/direct_sound_samples/unknown_03.aif diff --git a/sound/direct_sound_samples/872A5D0.aif b/sound/direct_sound_samples/unknown_04.aif similarity index 100% rename from sound/direct_sound_samples/872A5D0.aif rename to sound/direct_sound_samples/unknown_04.aif diff --git a/sound/direct_sound_samples/872EEA8.aif b/sound/direct_sound_samples/unknown_05.aif similarity index 100% rename from sound/direct_sound_samples/872EEA8.aif rename to sound/direct_sound_samples/unknown_05.aif diff --git a/sound/direct_sound_samples/87301B0.aif b/sound/direct_sound_samples/unknown_06.aif similarity index 100% rename from sound/direct_sound_samples/87301B0.aif rename to sound/direct_sound_samples/unknown_06.aif diff --git a/sound/direct_sound_samples/8734298.aif b/sound/direct_sound_samples/unknown_07.aif similarity index 100% rename from sound/direct_sound_samples/8734298.aif rename to sound/direct_sound_samples/unknown_07.aif diff --git a/sound/direct_sound_samples/87364A8.aif b/sound/direct_sound_samples/unknown_08.aif similarity index 100% rename from sound/direct_sound_samples/87364A8.aif rename to sound/direct_sound_samples/unknown_08.aif diff --git a/sound/direct_sound_samples/87385E4.aif b/sound/direct_sound_samples/unknown_09.aif similarity index 100% rename from sound/direct_sound_samples/87385E4.aif rename to sound/direct_sound_samples/unknown_09.aif diff --git a/sound/direct_sound_samples/873ECD8.aif b/sound/direct_sound_samples/unknown_10.aif similarity index 100% rename from sound/direct_sound_samples/873ECD8.aif rename to sound/direct_sound_samples/unknown_10.aif diff --git a/sound/direct_sound_samples/8740818.aif b/sound/direct_sound_samples/unknown_11.aif similarity index 100% rename from sound/direct_sound_samples/8740818.aif rename to sound/direct_sound_samples/unknown_11.aif diff --git a/sound/direct_sound_samples/87424B0.aif b/sound/direct_sound_samples/unknown_12.aif similarity index 100% rename from sound/direct_sound_samples/87424B0.aif rename to sound/direct_sound_samples/unknown_12.aif diff --git a/sound/direct_sound_samples/87430C0.aif b/sound/direct_sound_samples/unknown_13.aif similarity index 100% rename from sound/direct_sound_samples/87430C0.aif rename to sound/direct_sound_samples/unknown_13.aif diff --git a/sound/direct_sound_samples/8743C50.aif b/sound/direct_sound_samples/unknown_14.aif similarity index 100% rename from sound/direct_sound_samples/8743C50.aif rename to sound/direct_sound_samples/unknown_14.aif diff --git a/sound/direct_sound_samples/87446EC.aif b/sound/direct_sound_samples/unknown_15.aif similarity index 100% rename from sound/direct_sound_samples/87446EC.aif rename to sound/direct_sound_samples/unknown_15.aif diff --git a/sound/direct_sound_samples/8745034.aif b/sound/direct_sound_samples/unknown_16.aif similarity index 100% rename from sound/direct_sound_samples/8745034.aif rename to sound/direct_sound_samples/unknown_16.aif diff --git a/sound/direct_sound_samples/8745A7C.aif b/sound/direct_sound_samples/unknown_17.aif similarity index 100% rename from sound/direct_sound_samples/8745A7C.aif rename to sound/direct_sound_samples/unknown_17.aif diff --git a/sound/direct_sound_samples/88D6978.aif b/sound/direct_sound_samples/unknown_18.aif similarity index 100% rename from sound/direct_sound_samples/88D6978.aif rename to sound/direct_sound_samples/unknown_18.aif diff --git a/sound/music_player_table.inc b/sound/music_player_table.inc index 6c74a13528..5981a4d037 100644 --- a/sound/music_player_table.inc +++ b/sound/music_player_table.inc @@ -1,6 +1,32 @@ + .equiv TRACK_SIZE, 0x50 + .equiv NUM_TRACKS_BGM, 10 + .equiv NUM_TRACKS_SE1, 3 + .equiv NUM_TRACKS_SE2, 9 + .equiv NUM_TRACKS_SE3, 1 + + .bss + +gMPlayTrack_BGM:: + .space TRACK_SIZE * NUM_TRACKS_BGM + .size gMPlayTrack_BGM, .-gMPlayTrack_BGM + +gMPlayTrack_SE1:: + .space TRACK_SIZE * NUM_TRACKS_SE1 + .size gMPlayTrack_SE1, .-gMPlayTrack_SE1 + +gMPlayTrack_SE2:: + .space TRACK_SIZE * NUM_TRACKS_SE2 + .size gMPlayTrack_SE2, .-gMPlayTrack_SE2 + +gMPlayTrack_SE3:: + .space TRACK_SIZE * NUM_TRACKS_SE3 + .size gMPlayTrack_SE3, .-gMPlayTrack_SE3 + + .section .rodata + .align 2 gMPlayTable:: - music_player gMPlayInfo_BGM, gMPlayTrack_BGM, 10, 0 - music_player gMPlayInfo_SE1, gMPlayTrack_SE1, 3, 1 - music_player gMPlayInfo_SE2, gMPlayTrack_SE2, 9, 1 - music_player gMPlayInfo_SE3, gMPlayTrack_SE3, 1, 0 + music_player gMPlayInfo_BGM, gMPlayTrack_BGM, NUM_TRACKS_BGM, 0 + music_player gMPlayInfo_SE1, gMPlayTrack_SE1, NUM_TRACKS_SE1, 1 + music_player gMPlayInfo_SE2, gMPlayTrack_SE2, NUM_TRACKS_SE2, 1 + music_player gMPlayInfo_SE3, gMPlayTrack_SE3, NUM_TRACKS_SE3, 0 diff --git a/sound/programmable_wave_data.inc b/sound/programmable_wave_data.inc index 45da43b001..3e354d88a5 100644 --- a/sound/programmable_wave_data.inc +++ b/sound/programmable_wave_data.inc @@ -1,74 +1,78 @@ -ProgrammableWaveData_86B4830:: - .incbin "sound/programmable_wave_samples/86B4830.pcm" +ProgrammableWaveData_1:: + .incbin "sound/programmable_wave_samples/01.pcm" -ProgrammableWaveData_86B4840:: - .incbin "sound/programmable_wave_samples/86B4840.pcm" +ProgrammableWaveData_2:: + .incbin "sound/programmable_wave_samples/02.pcm" -ProgrammableWaveData_86B4850:: - .incbin "sound/programmable_wave_samples/86B4850.pcm" +ProgrammableWaveData_3:: + .incbin "sound/programmable_wave_samples/03.pcm" -ProgrammableWaveData_86B4860:: - .incbin "sound/programmable_wave_samples/86B4860.pcm" +ProgrammableWaveData_4:: + .incbin "sound/programmable_wave_samples/04.pcm" -ProgrammableWaveData_86B4870:: - .incbin "sound/programmable_wave_samples/86B4870.pcm" +ProgrammableWaveData_5:: + .incbin "sound/programmable_wave_samples/05.pcm" -ProgrammableWaveData_86B4880:: - .incbin "sound/programmable_wave_samples/86B4880.pcm" +ProgrammableWaveData_6:: + .incbin "sound/programmable_wave_samples/06.pcm" -ProgrammableWaveData_86B4890:: - .incbin "sound/programmable_wave_samples/86B4890.pcm" +ProgrammableWaveData_7:: + .incbin "sound/programmable_wave_samples/07.pcm" -ProgrammableWaveData_86B48A0:: - .incbin "sound/programmable_wave_samples/86B48A0.pcm" +ProgrammableWaveData_8:: + .incbin "sound/programmable_wave_samples/08.pcm" -ProgrammableWaveData_86B48B0:: - .incbin "sound/programmable_wave_samples/86B48B0.pcm" +ProgrammableWaveData_9:: + .incbin "sound/programmable_wave_samples/09.pcm" -ProgrammableWaveData_86B48C0:: - .incbin "sound/programmable_wave_samples/86B48C0.pcm" +ProgrammableWaveData_10:: + .incbin "sound/programmable_wave_samples/10.pcm" -ProgrammableWaveData_86B48D0:: - .incbin "sound/programmable_wave_samples/86B48D0.pcm" +ProgrammableWaveData_11:: + .incbin "sound/programmable_wave_samples/11.pcm" -ProgrammableWaveData_86B48E0:: - .incbin "sound/programmable_wave_samples/86B48E0.pcm" +ProgrammableWaveData_12:: + .incbin "sound/programmable_wave_samples/12.pcm" -ProgrammableWaveData_86B48F0:: - .incbin "sound/programmable_wave_samples/86B48F0.pcm" +ProgrammableWaveData_13:: + .incbin "sound/programmable_wave_samples/13.pcm" -ProgrammableWaveData_86B4900:: - .incbin "sound/programmable_wave_samples/86B4900.pcm" +ProgrammableWaveData_14:: + .incbin "sound/programmable_wave_samples/14.pcm" -ProgrammableWaveData_86B4910:: - .incbin "sound/programmable_wave_samples/86B4910.pcm" +ProgrammableWaveData_15:: + .incbin "sound/programmable_wave_samples/15.pcm" -ProgrammableWaveData_86B4920:: - .incbin "sound/programmable_wave_samples/86B4920.pcm" +ProgrammableWaveData_16:: + .incbin "sound/programmable_wave_samples/16.pcm" -ProgrammableWaveData_Unused_86B4930:: - .incbin "sound/programmable_wave_samples/unused_86B4930.pcm" +@ Unused +ProgrammableWaveData_17:: + .incbin "sound/programmable_wave_samples/17.pcm" -ProgrammableWaveData_Unused_86B4940:: - .incbin "sound/programmable_wave_samples/unused_86B4940.pcm" +@ Unused +ProgrammableWaveData_18:: + .incbin "sound/programmable_wave_samples/18.pcm" -ProgrammableWaveData_Unused_86B4950:: - .incbin "sound/programmable_wave_samples/unused_86B4950.pcm" +@ Unused +ProgrammableWaveData_19:: + .incbin "sound/programmable_wave_samples/19.pcm" -ProgrammableWaveData_Unused_86B4960:: - .incbin "sound/programmable_wave_samples/unused_86B4960.pcm" +@ Unused +ProgrammableWaveData_20:: + .incbin "sound/programmable_wave_samples/20.pcm" -ProgrammableWaveData_86B4970:: - .incbin "sound/programmable_wave_samples/86B4970.pcm" +ProgrammableWaveData_21:: + .incbin "sound/programmable_wave_samples/21.pcm" -ProgrammableWaveData_86B4980:: - .incbin "sound/programmable_wave_samples/86B4980.pcm" +ProgrammableWaveData_22:: + .incbin "sound/programmable_wave_samples/22.pcm" -ProgrammableWaveData_86B4990:: - .incbin "sound/programmable_wave_samples/86B4990.pcm" +ProgrammableWaveData_23:: + .incbin "sound/programmable_wave_samples/23.pcm" -ProgrammableWaveData_86B49A0:: - .incbin "sound/programmable_wave_samples/86B49A0.pcm" +ProgrammableWaveData_24:: + .incbin "sound/programmable_wave_samples/24.pcm" -ProgrammableWaveData_86B49B0:: - .incbin "sound/programmable_wave_samples/86B49B0.pcm" +ProgrammableWaveData_25:: + .incbin "sound/programmable_wave_samples/25.pcm" diff --git a/sound/programmable_wave_samples/86B4830.pcm b/sound/programmable_wave_samples/01.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4830.pcm rename to sound/programmable_wave_samples/01.pcm diff --git a/sound/programmable_wave_samples/86B4840.pcm b/sound/programmable_wave_samples/02.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4840.pcm rename to sound/programmable_wave_samples/02.pcm diff --git a/sound/programmable_wave_samples/86B4850.pcm b/sound/programmable_wave_samples/03.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4850.pcm rename to sound/programmable_wave_samples/03.pcm diff --git a/sound/programmable_wave_samples/86B4860.pcm b/sound/programmable_wave_samples/04.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4860.pcm rename to sound/programmable_wave_samples/04.pcm diff --git a/sound/programmable_wave_samples/86B4870.pcm b/sound/programmable_wave_samples/05.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4870.pcm rename to sound/programmable_wave_samples/05.pcm diff --git a/sound/programmable_wave_samples/86B4880.pcm b/sound/programmable_wave_samples/06.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4880.pcm rename to sound/programmable_wave_samples/06.pcm diff --git a/sound/programmable_wave_samples/86B4890.pcm b/sound/programmable_wave_samples/07.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4890.pcm rename to sound/programmable_wave_samples/07.pcm diff --git a/sound/programmable_wave_samples/86B48A0.pcm b/sound/programmable_wave_samples/08.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48A0.pcm rename to sound/programmable_wave_samples/08.pcm diff --git a/sound/programmable_wave_samples/86B48B0.pcm b/sound/programmable_wave_samples/09.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48B0.pcm rename to sound/programmable_wave_samples/09.pcm diff --git a/sound/programmable_wave_samples/86B48C0.pcm b/sound/programmable_wave_samples/10.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48C0.pcm rename to sound/programmable_wave_samples/10.pcm diff --git a/sound/programmable_wave_samples/86B48D0.pcm b/sound/programmable_wave_samples/11.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48D0.pcm rename to sound/programmable_wave_samples/11.pcm diff --git a/sound/programmable_wave_samples/86B48E0.pcm b/sound/programmable_wave_samples/12.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48E0.pcm rename to sound/programmable_wave_samples/12.pcm diff --git a/sound/programmable_wave_samples/86B48F0.pcm b/sound/programmable_wave_samples/13.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48F0.pcm rename to sound/programmable_wave_samples/13.pcm diff --git a/sound/programmable_wave_samples/86B4900.pcm b/sound/programmable_wave_samples/14.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4900.pcm rename to sound/programmable_wave_samples/14.pcm diff --git a/sound/programmable_wave_samples/86B4910.pcm b/sound/programmable_wave_samples/15.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4910.pcm rename to sound/programmable_wave_samples/15.pcm diff --git a/sound/programmable_wave_samples/86B4920.pcm b/sound/programmable_wave_samples/16.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4920.pcm rename to sound/programmable_wave_samples/16.pcm diff --git a/sound/programmable_wave_samples/unused_86B4930.pcm b/sound/programmable_wave_samples/17.pcm similarity index 100% rename from sound/programmable_wave_samples/unused_86B4930.pcm rename to sound/programmable_wave_samples/17.pcm diff --git a/sound/programmable_wave_samples/unused_86B4940.pcm b/sound/programmable_wave_samples/18.pcm similarity index 100% rename from sound/programmable_wave_samples/unused_86B4940.pcm rename to sound/programmable_wave_samples/18.pcm diff --git a/sound/programmable_wave_samples/unused_86B4950.pcm b/sound/programmable_wave_samples/19.pcm similarity index 100% rename from sound/programmable_wave_samples/unused_86B4950.pcm rename to sound/programmable_wave_samples/19.pcm diff --git a/sound/programmable_wave_samples/unused_86B4960.pcm b/sound/programmable_wave_samples/20.pcm similarity index 100% rename from sound/programmable_wave_samples/unused_86B4960.pcm rename to sound/programmable_wave_samples/20.pcm diff --git a/sound/programmable_wave_samples/86B4970.pcm b/sound/programmable_wave_samples/21.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4970.pcm rename to sound/programmable_wave_samples/21.pcm diff --git a/sound/programmable_wave_samples/86B4980.pcm b/sound/programmable_wave_samples/22.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4980.pcm rename to sound/programmable_wave_samples/22.pcm diff --git a/sound/programmable_wave_samples/86B4990.pcm b/sound/programmable_wave_samples/23.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4990.pcm rename to sound/programmable_wave_samples/23.pcm diff --git a/sound/programmable_wave_samples/86B49A0.pcm b/sound/programmable_wave_samples/24.pcm similarity index 100% rename from sound/programmable_wave_samples/86B49A0.pcm rename to sound/programmable_wave_samples/24.pcm diff --git a/sound/programmable_wave_samples/86B49B0.pcm b/sound/programmable_wave_samples/25.pcm similarity index 100% rename from sound/programmable_wave_samples/86B49B0.pcm rename to sound/programmable_wave_samples/25.pcm diff --git a/sound/songs/se_m_absorb.s b/sound/songs/se_m_absorb.s index 35213fdaa9..6cd6223664 100644 --- a/sound/songs/se_m_absorb.s +++ b/sound/songs/se_m_absorb.s @@ -29,7 +29,7 @@ se_m_absorb_1: .byte W01 .byte VOICE , 38 .byte VOL , 58*se_m_absorb_mvl/mxv - .byte N08 , Gn4 + .byte N08 , Gn4 .byte W01 .byte VOL , 68*se_m_absorb_mvl/mxv .byte PAN , c_v+8 diff --git a/sound/songs/se_m_absorb_2.s b/sound/songs/se_m_absorb_2.s index 3f9df6dc40..6192013338 100644 --- a/sound/songs/se_m_absorb_2.s +++ b/sound/songs/se_m_absorb_2.s @@ -26,15 +26,15 @@ se_m_absorb_2_1: .byte W01 .byte N02 , Dn6 , v112 .byte W02 - .byte Cs6 + .byte Cs6 .byte W03 .byte PAN , c_v+8 - .byte N02 , An5 + .byte N02 , An5 .byte W02 - .byte Fs5 + .byte Fs5 .byte W01 .byte W01 - .byte Dn5 + .byte Dn5 .byte W02 .byte PAN , c_v-7 .byte W01 @@ -52,7 +52,7 @@ se_m_absorb_2_1: .byte W02 .byte PAN , c_v+15 .byte W01 - .byte N02 , Dn6 + .byte N02 , Dn6 .byte W02 .byte Cs6 , v084 .byte W03 @@ -89,17 +89,17 @@ se_m_absorb_2_2: .byte BEND , c_v+15 .byte N02 , An6 , v112 .byte W02 - .byte Fs6 + .byte Fs6 .byte W01 .byte W01 - .byte Dn6 + .byte Dn6 .byte W02 .byte W01 - .byte Cs6 + .byte Cs6 .byte W02 - .byte An5 + .byte An5 .byte W03 - .byte N02 + .byte N02 .byte W02 .byte Fs5 , v104 .byte W01 diff --git a/sound/songs/se_m_acid_armor.s b/sound/songs/se_m_acid_armor.s index c7f350a9b5..346c766047 100644 --- a/sound/songs/se_m_acid_armor.s +++ b/sound/songs/se_m_acid_armor.s @@ -35,15 +35,15 @@ se_m_acid_armor_1: .byte W02 .byte VOICE , 23 .byte PAN , c_v+11 - .byte N01 , Cn1 + .byte N01 , Cn1 .byte W01 .byte PAN , c_v-10 - .byte N01 , Cn2 + .byte N01 , Cn2 .byte W01 .byte VOICE , 31 .byte PAN , c_v+6 .byte BEND , c_v-37 - .byte N06 , Dn1 + .byte N06 , Dn1 .byte W01 .byte BEND , c_v-16 .byte W01 @@ -55,15 +55,15 @@ se_m_acid_armor_1: .byte W01 .byte VOICE , 23 .byte PAN , c_v-1 - .byte N01 , Fn1 + .byte N01 , Fn1 .byte W01 .byte PAN , c_v-10 - .byte N01 , Fn2 + .byte N01 , Fn2 .byte W01 .byte VOICE , 31 .byte PAN , c_v+0 .byte BEND , c_v-37 - .byte N02 , Gn0 + .byte N02 , Gn0 .byte W02 .byte BEND , c_v-16 .byte W01 @@ -71,21 +71,21 @@ se_m_acid_armor_1: .byte W01 .byte PAN , c_v+5 .byte BEND , c_v+27 - .byte N02 + .byte N02 .byte W01 .byte BEND , c_v+46 .byte W01 .byte VOICE , 23 .byte PAN , c_v+10 - .byte N01 , Cn1 + .byte N01 , Cn1 .byte W02 .byte PAN , c_v-9 - .byte N01 , Cn2 + .byte N01 , Cn2 .byte W01 .byte VOICE , 31 .byte PAN , c_v+0 .byte BEND , c_v-37 - .byte N06 , Dn1 + .byte N06 , Dn1 .byte W01 .byte BEND , c_v-16 .byte W01 @@ -97,10 +97,10 @@ se_m_acid_armor_1: .byte W01 .byte VOICE , 23 .byte PAN , c_v+5 - .byte N01 , Cn1 + .byte N01 , Cn1 .byte W01 .byte PAN , c_v-8 - .byte N01 , Cn2 + .byte N01 , Cn2 .byte W01 .byte VOICE , 31 .byte PAN , c_v+0 @@ -125,7 +125,7 @@ se_m_acid_armor_1: .byte VOICE , 31 .byte PAN , c_v+6 .byte BEND , c_v-37 - .byte N06 , Dn1 + .byte N06 , Dn1 .byte W01 .byte BEND , c_v-16 .byte W01 @@ -140,7 +140,7 @@ se_m_acid_armor_1: .byte N01 , Fn1 , v084 .byte W01 .byte PAN , c_v-10 - .byte N01 , Fn2 + .byte N01 , Fn2 .byte W01 .byte VOICE , 31 .byte PAN , c_v+0 @@ -162,7 +162,7 @@ se_m_acid_armor_1: .byte N01 , Cn1 , v068 .byte W01 .byte PAN , c_v-9 - .byte N01 , Cn2 + .byte N01 , Cn2 .byte W01 .byte VOICE , 31 .byte PAN , c_v+0 diff --git a/sound/songs/se_m_attract2.s b/sound/songs/se_m_attract2.s index 7d3d6f3c55..9b846f13e4 100644 --- a/sound/songs/se_m_attract2.s +++ b/sound/songs/se_m_attract2.s @@ -34,7 +34,7 @@ se_m_attract2_1: .byte W12 .byte c_v+0 .byte W06 - .byte N54 , Cn4 + .byte N54 , Cn4 .byte W06 .byte PAN , c_v+6 .byte W12 @@ -45,7 +45,7 @@ se_m_attract2_1: .byte c_v+0 .byte W12 .byte c_v-4 - .byte N54 , Dn4 + .byte N54 , Dn4 .byte W12 .byte PAN , c_v-10 .byte W12 @@ -55,7 +55,7 @@ se_m_attract2_1: .byte W12 .byte c_v+6 .byte W06 - .byte N54 , Cn4 + .byte N54 , Cn4 .byte W06 .byte PAN , c_v+9 .byte W12 diff --git a/sound/songs/se_m_bite.s b/sound/songs/se_m_bite.s index 3c51a8f2ff..15d690e2e8 100644 --- a/sound/songs/se_m_bite.s +++ b/sound/songs/se_m_bite.s @@ -25,11 +25,11 @@ se_m_bite_1: .byte BEND , c_v+0 .byte N02 , Gn3 , v112 .byte W02 - .byte Gs3 + .byte Gs3 .byte W01 .byte PAN , c_v-7 .byte W01 - .byte N02 , An3 + .byte N02 , An3 .byte W02 .byte PAN , c_v+7 .byte W02 @@ -79,7 +79,7 @@ se_m_bite_2: .byte W10 .byte N01 , Gn2 , v040 .byte W08 - .byte N01 + .byte N01 .byte W06 .byte FINE diff --git a/sound/songs/se_m_bonemerang.s b/sound/songs/se_m_bonemerang.s index 11f035347e..9339809364 100644 --- a/sound/songs/se_m_bonemerang.s +++ b/sound/songs/se_m_bonemerang.s @@ -26,18 +26,18 @@ se_m_bonemerang_1: .byte N01 , Cn5 , v127 .byte W01 .byte PAN , c_v+10 - .byte N01 , Cn6 + .byte N01 , Cn6 .byte W01 .byte PAN , c_v+0 - .byte N01 , Cn5 + .byte N01 , Cn5 .byte W04 - .byte N01 + .byte N01 .byte W01 .byte PAN , c_v-11 - .byte N01 , Cn6 + .byte N01 , Cn6 .byte W01 .byte PAN , c_v+0 - .byte N01 , Cn5 + .byte N01 , Cn5 .byte W04 .byte FINE diff --git a/sound/songs/se_m_brick_break.s b/sound/songs/se_m_brick_break.s index 08058089f0..ce13218d24 100644 --- a/sound/songs/se_m_brick_break.s +++ b/sound/songs/se_m_brick_break.s @@ -23,7 +23,7 @@ se_m_brick_break_1: .byte PAN , c_v+0 .byte N01 , Cn4 , v127 .byte W01 - .byte N03 , Cn5 + .byte N03 , Cn5 .byte W01 .byte PAN , c_v+5 .byte W01 @@ -63,23 +63,23 @@ se_m_brick_break_2: .byte PAN , c_v+0 .byte N01 , Cn3 , v064 .byte W01 - .byte N03 , Gn3 + .byte N03 , Gn3 .byte W05 .byte W01 .byte N02 , En4 , v040 .byte W05 - .byte Gn3 + .byte Gn3 .byte W04 .byte En4 , v032 .byte W02 .byte W03 - .byte Gn3 + .byte Gn3 .byte W03 .byte W02 .byte En4 , v020 .byte W04 .byte W01 - .byte Gn3 + .byte Gn3 .byte W05 .byte FINE diff --git a/sound/songs/se_m_bubble.s b/sound/songs/se_m_bubble.s index ee31a176b1..4e1b988d59 100644 --- a/sound/songs/se_m_bubble.s +++ b/sound/songs/se_m_bubble.s @@ -37,7 +37,7 @@ se_m_bubble_1: .byte W02 .byte PAN , c_v+0 .byte BEND , c_v-1 - .byte N03 , En3 + .byte N03 , En3 .byte W15 .byte FINE diff --git a/sound/songs/se_m_bubble3.s b/sound/songs/se_m_bubble3.s index c14badb5a9..d9a7f1e82b 100644 --- a/sound/songs/se_m_bubble3.s +++ b/sound/songs/se_m_bubble3.s @@ -38,7 +38,7 @@ se_m_bubble3_1: .byte PAN , c_v+0 .byte BEND , c_v-1 .byte W03 - .byte N06 + .byte N06 .byte W03 .byte BEND , c_v+6 .byte W01 diff --git a/sound/songs/se_m_charm.s b/sound/songs/se_m_charm.s index ef10cb3e3f..2bb2e0ef37 100644 --- a/sound/songs/se_m_charm.s +++ b/sound/songs/se_m_charm.s @@ -32,7 +32,7 @@ se_m_charm_1: .byte VOL , 62*se_m_charm_mvl/mxv .byte PAN , c_v-4 .byte BEND , c_v+0 - .byte N15 + .byte N15 .byte W01 .byte VOL , 77*se_m_charm_mvl/mxv .byte PAN , c_v+0 diff --git a/sound/songs/se_m_confuse_ray.s b/sound/songs/se_m_confuse_ray.s index 12aea8ab8d..78407b8c11 100644 --- a/sound/songs/se_m_confuse_ray.s +++ b/sound/songs/se_m_confuse_ray.s @@ -56,7 +56,7 @@ se_m_confuse_ray_1: .byte c_v-17 .byte W01 .byte c_v-1 - .byte N12 , As2 + .byte N12 , As2 .byte W02 .byte PAN , c_v+4 .byte BEND , c_v+8 @@ -82,7 +82,7 @@ se_m_confuse_ray_1: .byte c_v-16 .byte W01 .byte c_v-1 - .byte N12 , As2 + .byte N12 , As2 .byte W03 .byte PAN , c_v+4 .byte BEND , c_v+8 diff --git a/sound/songs/se_m_cosmic_power.s b/sound/songs/se_m_cosmic_power.s index 76812478b3..3e3f53c5ec 100644 --- a/sound/songs/se_m_cosmic_power.s +++ b/sound/songs/se_m_cosmic_power.s @@ -27,24 +27,24 @@ se_m_cosmic_power_1: .byte W06 .byte W03 .byte PAN , c_v-5 - .byte N08 , Cn5 + .byte N08 , Cn5 .byte W03 .byte W06 .byte PAN , c_v-9 - .byte N10 , Gn5 + .byte N10 , Gn5 .byte W06 .byte W04 .byte PAN , c_v-5 - .byte N09 , Fn6 + .byte N09 , Fn6 .byte W02 .byte W06 .byte W02 .byte PAN , c_v+0 - .byte N09 , An5 + .byte N09 , An5 .byte W04 .byte W06 .byte PAN , c_v+4 - .byte N09 , As5 + .byte N09 , As5 .byte W06 .byte W03 .byte PAN , c_v+9 @@ -129,19 +129,19 @@ se_m_cosmic_power_2: .byte W02 .byte W06 .byte W01 - .byte N10 , Ds5 + .byte N10 , Ds5 .byte W05 .byte W06 - .byte N09 , As6 + .byte N09 , As6 .byte W06 .byte W03 - .byte Cn6 + .byte Cn6 .byte W03 .byte W06 - .byte N10 , Fn5 + .byte N10 , Fn5 .byte W06 .byte W04 - .byte N08 + .byte N08 .byte W02 .byte W06 .byte W01 diff --git a/sound/songs/se_m_detect.s b/sound/songs/se_m_detect.s index 181fb4079a..f06802802a 100644 --- a/sound/songs/se_m_detect.s +++ b/sound/songs/se_m_detect.s @@ -31,7 +31,7 @@ se_m_detect_1: .byte c_v+4 .byte W01 .byte c_v+1 - .byte N06 , Bn5 + .byte N06 , Bn5 .byte W01 .byte PAN , c_v+0 .byte W02 @@ -45,7 +45,7 @@ se_m_detect_1: .byte c_v+4 .byte W01 .byte c_v+1 - .byte N06 , Bn5 + .byte N06 , Bn5 .byte W01 .byte PAN , c_v+0 .byte W04 @@ -59,7 +59,7 @@ se_m_detect_1: .byte c_v+4 .byte W01 .byte c_v+1 - .byte N06 , Bn5 + .byte N06 , Bn5 .byte W02 .byte PAN , c_v+0 .byte W04 @@ -72,7 +72,7 @@ se_m_detect_1: .byte c_v+4 .byte W01 .byte c_v+1 - .byte N06 , Bn5 + .byte N06 , Bn5 .byte W01 .byte PAN , c_v+0 .byte W03 diff --git a/sound/songs/se_m_dig.s b/sound/songs/se_m_dig.s index 42fed8ab56..f8d3597d95 100644 --- a/sound/songs/se_m_dig.s +++ b/sound/songs/se_m_dig.s @@ -32,7 +32,7 @@ se_m_dig_1: .byte BEND , c_v+4 .byte W01 .byte c_v+16 - .byte N03 + .byte N03 .byte W01 .byte PAN , c_v-8 .byte BEND , c_v+28 diff --git a/sound/songs/se_m_dive.s b/sound/songs/se_m_dive.s index 2313667fcb..83cc423564 100644 --- a/sound/songs/se_m_dive.s +++ b/sound/songs/se_m_dive.s @@ -30,7 +30,7 @@ se_m_dive_1: .byte W04 .byte PAN , c_v+6 .byte BEND , c_v-14 - .byte N04 + .byte N04 .byte W03 .byte PAN , c_v+3 .byte BEND , c_v-11 @@ -90,7 +90,7 @@ se_m_dive_2: .byte VOL , 105*se_m_dive_mvl/mxv .byte N06 , An2 , v040 .byte W06 - .byte Gn2 + .byte Gn2 .byte W06 .byte Gs3 , v044 .byte W07 diff --git a/sound/songs/se_m_dizzy_punch.s b/sound/songs/se_m_dizzy_punch.s index 886a4bc4e4..31ab74a77f 100644 --- a/sound/songs/se_m_dizzy_punch.s +++ b/sound/songs/se_m_dizzy_punch.s @@ -46,7 +46,7 @@ se_m_dizzy_punch_1: .byte W01 .byte PAN , c_v-13 .byte BEND , c_v+0 - .byte N04 , Cn6 + .byte N04 , Cn6 .byte W01 .byte VOL , 66*se_m_dizzy_punch_mvl/mxv .byte PAN , c_v+0 diff --git a/sound/songs/se_m_dragon_rage.s b/sound/songs/se_m_dragon_rage.s index e9eaefca0b..608d926115 100644 --- a/sound/songs/se_m_dragon_rage.s +++ b/sound/songs/se_m_dragon_rage.s @@ -39,7 +39,7 @@ se_m_dragon_rage_1: .byte W01 .byte VOL , 21*se_m_dragon_rage_mvl/mxv .byte BEND , c_v+10 - .byte N10 , Bn2 + .byte N10 , Bn2 .byte W02 .byte PAN , c_v+5 .byte W01 @@ -54,7 +54,7 @@ se_m_dragon_rage_1: .byte PAN , c_v-2 .byte VOL , 21*se_m_dragon_rage_mvl/mxv .byte BEND , c_v+18 - .byte N10 , Cs3 + .byte N10 , Cs3 .byte W03 .byte PAN , c_v+5 .byte VOL , 47*se_m_dragon_rage_mvl/mxv @@ -69,7 +69,7 @@ se_m_dragon_rage_1: .byte W02 .byte VOL , 20*se_m_dragon_rage_mvl/mxv .byte BEND , c_v+29 - .byte N10 , Dn3 + .byte N10 , Dn3 .byte W01 .byte PAN , c_v+0 .byte W01 @@ -86,7 +86,7 @@ se_m_dragon_rage_1: .byte W01 .byte VOL , 21*se_m_dragon_rage_mvl/mxv .byte BEND , c_v+37 - .byte N10 , En3 + .byte N10 , En3 .byte W02 .byte PAN , c_v-2 .byte VOL , 46*se_m_dragon_rage_mvl/mxv @@ -101,7 +101,7 @@ se_m_dragon_rage_1: .byte c_v-5 .byte VOL , 20*se_m_dragon_rage_mvl/mxv .byte BEND , c_v+42 - .byte N20 , Fs3 + .byte N20 , Fs3 .byte W02 .byte VOL , 47*se_m_dragon_rage_mvl/mxv .byte W01 diff --git a/sound/songs/se_m_earthquake.s b/sound/songs/se_m_earthquake.s index 104eb1befa..928ddfacd8 100644 --- a/sound/songs/se_m_earthquake.s +++ b/sound/songs/se_m_earthquake.s @@ -209,9 +209,9 @@ se_m_earthquake_2: .byte VOL , 110*se_m_earthquake_mvl/mxv .byte N02 , Fn2 , v072 .byte W02 - .byte N01 + .byte N01 .byte W01 - .byte N02 , Gn2 + .byte N02 , Gn2 .byte W03 .byte N01 , Gs2 , v060 .byte W06 @@ -223,87 +223,87 @@ se_m_earthquake_2_000: .byte N06 , Bn1 , v080 .byte W06 .byte PEND - .byte N06 + .byte N06 .byte W06 - .byte N06 + .byte N06 .byte W06 .byte PATT .word se_m_earthquake_2_000 .byte N06 , Bn1 , v080 .byte W06 - .byte N06 + .byte N06 .byte W06 .byte PATT .word se_m_earthquake_2_000 .byte N06 , Bn1 , v080 .byte W06 - .byte N06 + .byte N06 .byte W06 .byte PATT .word se_m_earthquake_2_000 .byte N06 , Bn1 , v080 .byte W06 - .byte N06 + .byte N06 .byte W06 .byte PATT .word se_m_earthquake_2_000 .byte N06 , Bn1 , v080 .byte W06 - .byte N06 + .byte N06 .byte W06 .byte PATT .word se_m_earthquake_2_000 .byte N06 , Bn1 , v080 .byte W06 - .byte N06 + .byte N06 .byte W06 .byte PATT .word se_m_earthquake_2_000 .byte N06 , Bn1 , v080 .byte W06 - .byte N06 + .byte N06 .byte W06 .byte PATT .word se_m_earthquake_2_000 .byte N06 , Bn1 , v080 .byte W06 - .byte N06 + .byte N06 .byte W06 .byte VOL , 106*se_m_earthquake_mvl/mxv .byte PAN , c_v+0 - .byte N06 + .byte N06 .byte W03 .byte VOL , 103*se_m_earthquake_mvl/mxv .byte W03 - .byte N06 + .byte N06 .byte W01 .byte VOL , 97*se_m_earthquake_mvl/mxv .byte W03 .byte 89*se_m_earthquake_mvl/mxv .byte W02 - .byte N06 + .byte N06 .byte W02 .byte VOL , 85*se_m_earthquake_mvl/mxv .byte W04 .byte 78*se_m_earthquake_mvl/mxv .byte PAN , c_v+0 - .byte N06 + .byte N06 .byte W03 .byte VOL , 72*se_m_earthquake_mvl/mxv .byte W03 - .byte N06 + .byte N06 .byte W01 .byte VOL , 66*se_m_earthquake_mvl/mxv .byte W03 .byte 58*se_m_earthquake_mvl/mxv .byte W02 - .byte N06 + .byte N06 .byte W02 .byte VOL , 46*se_m_earthquake_mvl/mxv .byte W04 .byte 30*se_m_earthquake_mvl/mxv .byte PAN , c_v+0 - .byte N06 + .byte N06 .byte W03 .byte VOL , 12*se_m_earthquake_mvl/mxv .byte W03 diff --git a/sound/songs/se_m_encore2.s b/sound/songs/se_m_encore2.s index 9c53cdfe3c..61e522acac 100644 --- a/sound/songs/se_m_encore2.s +++ b/sound/songs/se_m_encore2.s @@ -154,7 +154,7 @@ se_m_encore2_1_000: .byte 12*se_m_encore2_mvl/mxv .byte PAN , c_v-2 .byte W02 - .byte EOT , Cn3 + .byte EOT , Cn3 .byte FINE @******************************************************@ diff --git a/sound/songs/se_m_explosion.s b/sound/songs/se_m_explosion.s index c93f485b88..039c563f78 100644 --- a/sound/songs/se_m_explosion.s +++ b/sound/songs/se_m_explosion.s @@ -25,19 +25,19 @@ se_m_explosion_1: .byte BEND , c_v+0 .byte N01 , Ds3 , v127 .byte W01 - .byte As2 + .byte As2 .byte W02 .byte PAN , c_v-8 - .byte N02 , Gn3 + .byte N02 , Gn3 .byte W01 .byte PAN , c_v+7 .byte W03 .byte c_v+0 - .byte N01 , Ds3 + .byte N01 , Ds3 .byte W01 - .byte As2 + .byte As2 .byte W02 - .byte N54 , Fn3 + .byte N54 , Fn3 .byte W11 .byte BEND , c_v+3 .byte W03 @@ -93,7 +93,7 @@ se_m_explosion_2: .byte VOL , 74*se_m_explosion_mvl/mxv .byte W06 .byte 125*se_m_explosion_mvl/mxv - .byte N02 + .byte N02 .byte W01 .byte VOL , 74*se_m_explosion_mvl/mxv .byte W16 diff --git a/sound/songs/se_m_flamethrower.s b/sound/songs/se_m_flamethrower.s index 29438337ff..4c0c892c1e 100644 --- a/sound/songs/se_m_flamethrower.s +++ b/sound/songs/se_m_flamethrower.s @@ -129,7 +129,7 @@ se_m_flamethrower_1_000: .byte W03 .byte c_v+0 .byte W03 - .byte EOT , Cn3 + .byte EOT , Cn3 .byte FINE @********************** Track 2 **********************@ diff --git a/sound/songs/se_m_flatter.s b/sound/songs/se_m_flatter.s index e3746c990a..799fdba912 100644 --- a/sound/songs/se_m_flatter.s +++ b/sound/songs/se_m_flatter.s @@ -25,9 +25,9 @@ se_m_flatter_1: .byte BEND , c_v+0 .byte N01 , Dn5 , v127 .byte W01 - .byte Gn4 + .byte Gn4 .byte W01 - .byte N09 , En5 + .byte N09 , En5 .byte W02 .byte PAN , c_v+6 .byte W02 diff --git a/sound/songs/se_m_grasswhistle.s b/sound/songs/se_m_grasswhistle.s index 111bc2166d..10c7447873 100644 --- a/sound/songs/se_m_grasswhistle.s +++ b/sound/songs/se_m_grasswhistle.s @@ -35,12 +35,12 @@ se_m_grasswhistle_1: .byte W09 .byte 0 .byte W03 - .byte N09 , An5 + .byte N09 , An5 .byte W12 - .byte En5 + .byte En5 .byte W12 .byte BEND , c_v-14 - .byte N66 , Gn5 + .byte N66 , Gn5 .byte W06 .byte BEND , c_v-8 .byte W06 @@ -85,14 +85,14 @@ se_m_grasswhistle_2: .byte 0 .byte W03 .byte PAN , c_v-12 - .byte N09 , An5 + .byte N09 , An5 .byte W12 .byte PAN , c_v+14 - .byte N09 , En5 + .byte N09 , En5 .byte W12 .byte PAN , c_v-15 .byte BEND , c_v-14 - .byte N66 , Gn5 + .byte N66 , Gn5 .byte W06 .byte BEND , c_v-8 .byte W06 diff --git a/sound/songs/se_m_hail.s b/sound/songs/se_m_hail.s index 0c04af2125..7f1d1c67da 100644 --- a/sound/songs/se_m_hail.s +++ b/sound/songs/se_m_hail.s @@ -31,7 +31,7 @@ se_m_hail_1: .byte N01 , Gn4 , v112 .byte W01 .byte PAN , c_v+0 - .byte N01 , Ds5 + .byte N01 , Ds5 .byte W03 .byte W01 .byte PAN , c_v+6 @@ -41,7 +41,7 @@ se_m_hail_1: .byte N01 , Gn4 , v064 .byte W02 .byte PAN , c_v+0 - .byte N01 , Ds5 + .byte N01 , Ds5 .byte W03 .byte PAN , c_v+11 .byte N02 , Ds5 , v020 @@ -51,7 +51,7 @@ se_m_hail_1: .byte N01 , Gn4 , v064 .byte W01 .byte PAN , c_v+0 - .byte N01 , Ds5 + .byte N01 , Ds5 .byte W04 .byte FINE @@ -64,20 +64,20 @@ se_m_hail_2: .byte PAN , c_v+0 .byte N01 , Dn4 , v040 .byte W04 - .byte Bn3 + .byte Bn3 .byte W02 .byte W03 - .byte Dn4 + .byte Dn4 .byte W03 .byte W01 .byte Bn3 , v032 .byte W05 - .byte Dn4 + .byte Dn4 .byte W03 .byte Bn3 , v012 .byte W03 .byte W02 - .byte Dn4 + .byte Dn4 .byte W04 .byte FINE diff --git a/sound/songs/se_m_haze.s b/sound/songs/se_m_haze.s index 4bf61faa69..11497c8465 100644 --- a/sound/songs/se_m_haze.s +++ b/sound/songs/se_m_haze.s @@ -175,7 +175,7 @@ se_m_haze_1: .byte W03 .byte 6*se_m_haze_mvl/mxv .byte W02 - .byte EOT + .byte EOT .byte FINE @********************** Track 2 **********************@ @@ -192,42 +192,42 @@ se_m_haze_2: .byte W06 .byte W06 .byte W06 - .byte Fs4 + .byte Fs4 .byte W06 .byte W06 .byte W06 .byte W06 - .byte Gn4 + .byte Gn4 .byte W06 .byte W06 .byte W06 .byte W06 - .byte Gs4 + .byte Gs4 .byte W06 .byte W06 .byte W06 .byte W06 - .byte Gn4 + .byte Gn4 .byte W06 .byte W06 .byte W06 .byte W06 - .byte Fs4 + .byte Fs4 .byte W06 .byte W06 .byte W06 .byte W06 - .byte Fn4 + .byte Fn4 .byte W06 .byte W06 .byte W06 .byte W06 - .byte En4 + .byte En4 .byte W06 .byte W06 .byte W06 .byte W06 - .byte N18 , Ds4 + .byte N18 , Ds4 .byte W06 .byte W06 .byte W06 diff --git a/sound/songs/se_m_heal_bell.s b/sound/songs/se_m_heal_bell.s index b2b17f7d84..fbe315c878 100644 --- a/sound/songs/se_m_heal_bell.s +++ b/sound/songs/se_m_heal_bell.s @@ -30,10 +30,10 @@ se_m_heal_bell_1: .byte c_v+11 .byte W01 .byte c_v+1 - .byte N01 , An5 + .byte N01 , An5 .byte W01 .byte MOD , 7 - .byte N18 , Bn5 + .byte N18 , Bn5 .byte W02 .byte PAN , c_v+11 .byte W01 diff --git a/sound/songs/se_m_heat_wave.s b/sound/songs/se_m_heat_wave.s index a4b5cc8962..da5842f8f8 100644 --- a/sound/songs/se_m_heat_wave.s +++ b/sound/songs/se_m_heat_wave.s @@ -145,7 +145,7 @@ se_m_heat_wave_1: .byte W02 .byte VOL , 17*se_m_heat_wave_mvl/mxv .byte W03 - .byte EOT + .byte EOT .byte FINE @********************** Track 2 **********************@ diff --git a/sound/songs/se_m_hydro_pump.s b/sound/songs/se_m_hydro_pump.s index 050f6281be..c214985e47 100644 --- a/sound/songs/se_m_hydro_pump.s +++ b/sound/songs/se_m_hydro_pump.s @@ -76,7 +76,7 @@ se_m_hydro_pump_1: .byte W01 .byte VOL , 6*se_m_hydro_pump_mvl/mxv .byte W05 - .byte EOT + .byte EOT .byte FINE @********************** Track 2 **********************@ diff --git a/sound/songs/se_m_hyper_beam.s b/sound/songs/se_m_hyper_beam.s index bce85a21a2..b6ffcfc2f7 100644 --- a/sound/songs/se_m_hyper_beam.s +++ b/sound/songs/se_m_hyper_beam.s @@ -25,21 +25,21 @@ se_m_hyper_beam_1: .byte BEND , c_v+0 .byte N02 , En3 , v127 .byte W03 - .byte N01 , As3 + .byte N01 , As3 .byte W03 - .byte N02 , Gn3 + .byte N02 , Gn3 .byte W03 - .byte N01 , Cs4 + .byte N01 , Cs4 .byte W03 .byte PAN , c_v+7 .byte N02 , En3 , v072 .byte W03 - .byte N01 , As3 + .byte N01 , As3 .byte W03 .byte PAN , c_v-7 .byte N02 , Gn3 , v040 .byte W03 - .byte N01 , Cs4 + .byte N01 , Cs4 .byte W03 .byte FINE @@ -51,16 +51,16 @@ se_m_hyper_beam_2: .byte VOL , 110*se_m_hyper_beam_mvl/mxv .byte N01 , Cn3 , v040 .byte W02 - .byte N01 + .byte N01 .byte W04 - .byte N01 + .byte N01 .byte W02 - .byte N01 + .byte N01 .byte W04 se_m_hyper_beam_2_000: .byte N01 , Cn3 , v020 .byte W02 - .byte N01 + .byte N01 .byte W04 .byte PEND .byte PATT diff --git a/sound/songs/se_m_hyper_beam2.s b/sound/songs/se_m_hyper_beam2.s index 304fa7b3f2..fb21834222 100644 --- a/sound/songs/se_m_hyper_beam2.s +++ b/sound/songs/se_m_hyper_beam2.s @@ -30,19 +30,19 @@ se_m_hyper_beam2_1: .byte c_v+28 .byte W01 .byte c_v+0 - .byte N02 , Cs4 + .byte N02 , Cs4 .byte W01 .byte BEND , c_v+30 .byte W02 .byte c_v+0 - .byte N03 , As3 + .byte N03 , As3 .byte W01 .byte BEND , c_v+11 .byte W01 .byte c_v+28 .byte W01 .byte c_v+0 - .byte N02 , En4 + .byte N02 , En4 .byte W01 .byte BEND , c_v+30 .byte W02 @@ -55,7 +55,7 @@ se_m_hyper_beam2_1: .byte c_v+28 .byte W01 .byte c_v+0 - .byte N02 , Cs4 + .byte N02 , Cs4 .byte W01 .byte BEND , c_v+30 .byte W02 @@ -68,7 +68,7 @@ se_m_hyper_beam2_1: .byte c_v+28 .byte W01 .byte c_v+0 - .byte N02 , En4 + .byte N02 , En4 .byte W01 .byte BEND , c_v+30 .byte W02 @@ -82,16 +82,16 @@ se_m_hyper_beam2_2: .byte VOL , 110*se_m_hyper_beam2_mvl/mxv .byte N01 , Cn3 , v032 .byte W02 - .byte N01 + .byte N01 .byte W04 - .byte N01 + .byte N01 .byte W02 - .byte N01 + .byte N01 .byte W04 se_m_hyper_beam2_2_000: .byte N01 , Cn3 , v020 .byte W02 - .byte N01 + .byte N01 .byte W04 .byte PEND .byte PATT diff --git a/sound/songs/se_m_icy_wind.s b/sound/songs/se_m_icy_wind.s index d15350525e..b7e83e0321 100644 --- a/sound/songs/se_m_icy_wind.s +++ b/sound/songs/se_m_icy_wind.s @@ -30,7 +30,7 @@ se_m_icy_wind_1: .byte N01 , Ds4 , v112 .byte W01 .byte PAN , c_v+0 - .byte N01 , Bn4 + .byte N01 , Bn4 .byte W03 .byte FINE @@ -43,13 +43,13 @@ se_m_icy_wind_2: .byte PAN , c_v+0 .byte N01 , Dn4 , v040 .byte W04 - .byte Bn3 + .byte Bn3 .byte W02 .byte PAN , c_v-7 .byte W02 .byte c_v+9 .byte W01 - .byte N01 , Dn4 + .byte N01 , Dn4 .byte W01 .byte PAN , c_v-7 .byte W02 diff --git a/sound/songs/se_m_lock_on.s b/sound/songs/se_m_lock_on.s index d8e1de5b0f..9c9576d97c 100644 --- a/sound/songs/se_m_lock_on.s +++ b/sound/songs/se_m_lock_on.s @@ -37,7 +37,7 @@ se_m_lock_on_1: .byte W02 .byte PAN , c_v+6 .byte BEND , c_v+6 - .byte N01 , Cn4 + .byte N01 , Cn4 .byte W01 .byte Gn3 , v064 .byte W02 diff --git a/sound/songs/se_m_milk_drink.s b/sound/songs/se_m_milk_drink.s index 30a051540c..57e3a581d6 100644 --- a/sound/songs/se_m_milk_drink.s +++ b/sound/songs/se_m_milk_drink.s @@ -103,7 +103,7 @@ se_m_milk_drink_2: .byte N06 , Fs6 , v040 .byte W04 .byte W04 - .byte N06 + .byte N06 .byte W02 .byte W06 .byte W01 diff --git a/sound/songs/se_m_minimize.s b/sound/songs/se_m_minimize.s index 565450b2b4..778e0ec7c9 100644 --- a/sound/songs/se_m_minimize.s +++ b/sound/songs/se_m_minimize.s @@ -68,7 +68,7 @@ se_m_minimize_1: .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+28 - .byte N06 , An3 + .byte N06 , An3 .byte W01 .byte BEND , c_v+20 .byte W01 diff --git a/sound/songs/se_m_moonlight.s b/sound/songs/se_m_moonlight.s index bd4410b323..f76181a874 100644 --- a/sound/songs/se_m_moonlight.s +++ b/sound/songs/se_m_moonlight.s @@ -26,18 +26,18 @@ se_m_moonlight_1: .byte BEND , c_v+3 .byte N01 , Ds6 , v092 .byte W01 - .byte Dn6 + .byte Dn6 .byte W01 - .byte Gn5 + .byte Gn5 .byte W01 .byte N20 , Gn6 , v100 .byte W21 se_m_moonlight_1_000: .byte N01 , Ds6 , v056 .byte W01 - .byte Dn6 + .byte Dn6 .byte W01 - .byte Gn5 + .byte Gn5 .byte W01 .byte N20 , Gn6 , v064 .byte W03 @@ -54,9 +54,9 @@ se_m_moonlight_1_001: .byte PAN , c_v+0 .byte N01 , Gs5 , v092 .byte W01 - .byte Gn5 + .byte Gn5 .byte W01 - .byte Cn5 + .byte Cn5 .byte W01 .byte N20 , Cn6 , v100 .byte W21 @@ -65,9 +65,9 @@ se_m_moonlight_1_002: .byte PAN , c_v+16 .byte N01 , Gs5 , v056 .byte W01 - .byte Gn5 + .byte Gn5 .byte W01 - .byte Cn5 + .byte Cn5 .byte W01 .byte N20 , Cn6 , v064 .byte W21 @@ -76,31 +76,31 @@ se_m_moonlight_1_003: .byte PAN , c_v-16 .byte N01 , Gs5 , v040 .byte W01 - .byte Gn5 + .byte Gn5 .byte W01 - .byte Cn5 + .byte Cn5 .byte W01 - .byte N20 , Cn6 + .byte N20 , Cn6 .byte W21 .byte PEND se_m_moonlight_1_004: .byte PAN , c_v+32 .byte N01 , Gs5 , v020 .byte W01 - .byte Gn5 + .byte Gn5 .byte W01 - .byte Cn5 + .byte Cn5 .byte W01 .byte PAN , c_v-32 - .byte N20 , Cn6 + .byte N20 , Cn6 .byte W21 .byte PEND .byte PAN , c_v+0 .byte N01 , Ds6 , v092 .byte W01 - .byte Dn6 + .byte Dn6 .byte W01 - .byte Gn5 + .byte Gn5 .byte W01 .byte N20 , Gn6 , v100 .byte W21 @@ -127,11 +127,11 @@ se_m_moonlight_2: .byte W10 .byte N01 , Ds6 , v112 .byte W02 - .byte Dn6 + .byte Dn6 .byte W01 - .byte Gn5 + .byte Gn5 .byte W01 - .byte N04 , Gn6 + .byte N04 , Gn6 .byte W05 .byte Gn6 , v096 .byte W05 @@ -154,11 +154,11 @@ se_m_moonlight_2_001: .byte W10 .byte N01 , Gs5 , v112 .byte W02 - .byte Gn5 + .byte Gn5 .byte W01 - .byte Cn5 + .byte Cn5 .byte W01 - .byte N04 , Cn6 + .byte N04 , Cn6 .byte W05 .byte Cn6 , v096 .byte W05 @@ -183,11 +183,11 @@ se_m_moonlight_2_002: .byte W10 .byte N01 , Ds6 , v112 .byte W02 - .byte Dn6 + .byte Dn6 .byte W01 - .byte Gn5 + .byte Gn5 .byte W01 - .byte N04 , Gn6 + .byte N04 , Gn6 .byte W05 .byte Gn6 , v096 .byte W05 diff --git a/sound/songs/se_m_morning_sun.s b/sound/songs/se_m_morning_sun.s index ac7667246f..227098da1f 100644 --- a/sound/songs/se_m_morning_sun.s +++ b/sound/songs/se_m_morning_sun.s @@ -82,7 +82,7 @@ se_m_morning_sun_2: .byte N06 , Gs6 , v108 .byte W03 .byte W03 - .byte Bn5 + .byte Bn5 .byte W03 .byte W03 .byte Gs6 , v100 diff --git a/sound/songs/se_m_nightmare.s b/sound/songs/se_m_nightmare.s index 825bfaea20..f995d13103 100644 --- a/sound/songs/se_m_nightmare.s +++ b/sound/songs/se_m_nightmare.s @@ -37,10 +37,10 @@ se_m_nightmare_1: .byte N03 , Fs3 , v088 .byte W06 .byte PAN , c_v+0 - .byte N03 , Ds3 + .byte N03 , Ds3 .byte W06 .byte PAN , c_v-16 - .byte N03 + .byte N03 .byte W09 .byte PAN , c_v-1 .byte N03 , An2 , v096 @@ -56,10 +56,10 @@ se_m_nightmare_1: .byte W03 .byte W03 .byte PAN , c_v-1 - .byte N03 , Fn3 + .byte N03 , Fn3 .byte W06 .byte PAN , c_v+16 - .byte N03 + .byte N03 .byte W15 .byte FINE @@ -77,55 +77,55 @@ se_m_nightmare_2: .byte W06 .byte PAN , c_v+6 .byte BEND , c_v+36 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v-7 .byte BEND , c_v+17 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v+6 .byte BEND , c_v+2 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v-7 .byte BEND , c_v-8 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v+6 .byte BEND , c_v+12 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v-7 .byte BEND , c_v+6 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v+6 .byte BEND , c_v+0 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v-7 .byte BEND , c_v-6 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v+6 .byte BEND , c_v-19 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v-7 .byte BEND , c_v-31 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v+6 .byte BEND , c_v-44 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v-7 .byte BEND , c_v-55 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v+6 .byte BEND , c_v-64 - .byte N03 + .byte N03 .byte W18 .byte FINE diff --git a/sound/songs/se_m_petal_dance.s b/sound/songs/se_m_petal_dance.s index c8ad2810d9..df5752e4bd 100644 --- a/sound/songs/se_m_petal_dance.s +++ b/sound/songs/se_m_petal_dance.s @@ -33,7 +33,7 @@ se_m_petal_dance_1: .byte Dn6 , v100 .byte W03 .byte W03 - .byte An5 + .byte An5 .byte W03 .byte W03 .byte PAN , c_v-4 @@ -61,7 +61,7 @@ se_m_petal_dance_1: .byte W03 .byte W03 .byte PAN , c_v+4 - .byte N06 , Dn6 + .byte N06 , Dn6 .byte W03 .byte W03 .byte PAN , c_v+0 @@ -137,7 +137,7 @@ se_m_petal_dance_2: .byte Bn5 , v088 .byte W03 .byte W03 - .byte En6 + .byte En6 .byte W03 .byte W03 .byte Bn5 , v084 @@ -158,7 +158,7 @@ se_m_petal_dance_2: .byte En6 , v064 .byte W03 .byte W03 - .byte Bn5 + .byte Bn5 .byte W03 .byte W03 .byte En6 , v060 diff --git a/sound/songs/se_m_rain_dance.s b/sound/songs/se_m_rain_dance.s index 810be06633..bba4dc2b05 100644 --- a/sound/songs/se_m_rain_dance.s +++ b/sound/songs/se_m_rain_dance.s @@ -97,7 +97,7 @@ se_m_rain_dance_1: .byte 1*se_m_rain_dance_mvl/mxv .byte PAN , c_v+4 .byte W06 - .byte EOT + .byte EOT .byte FINE @******************************************************@ diff --git a/sound/songs/se_m_reversal.s b/sound/songs/se_m_reversal.s index 609c399f50..5b62d7156e 100644 --- a/sound/songs/se_m_reversal.s +++ b/sound/songs/se_m_reversal.s @@ -232,35 +232,35 @@ se_m_reversal_2: .byte W02 .byte W01 .byte c_v+31 - .byte N03 , Cs5 + .byte N03 , Cs5 .byte W01 .byte BEND , c_v+0 .byte W01 .byte c_v-33 .byte W03 .byte c_v+31 - .byte N03 , Dn5 + .byte N03 , Dn5 .byte W01 .byte BEND , c_v+0 .byte W01 .byte c_v-33 .byte W02 .byte c_v+31 - .byte N03 , Ds5 + .byte N03 , Ds5 .byte W02 .byte BEND , c_v+0 .byte W01 .byte c_v-33 .byte W02 .byte c_v+31 - .byte N03 , En5 + .byte N03 , En5 .byte W01 .byte BEND , c_v+0 .byte W02 .byte c_v-33 .byte W02 .byte c_v+31 - .byte N03 , Fn5 + .byte N03 , Fn5 .byte W01 .byte BEND , c_v+0 .byte W01 @@ -268,35 +268,35 @@ se_m_reversal_2: .byte W02 .byte W01 .byte c_v+31 - .byte N03 , Fs5 + .byte N03 , Fs5 .byte W01 .byte BEND , c_v+0 .byte W01 .byte c_v-33 .byte W03 .byte c_v+31 - .byte N03 , Gn5 + .byte N03 , Gn5 .byte W01 .byte BEND , c_v+0 .byte W01 .byte c_v-33 .byte W02 .byte c_v+31 - .byte N03 , Gs5 + .byte N03 , Gs5 .byte W02 .byte BEND , c_v+0 .byte W01 .byte c_v-33 .byte W02 .byte c_v+31 - .byte N03 , An5 + .byte N03 , An5 .byte W01 .byte BEND , c_v+0 .byte W02 .byte c_v-33 .byte W02 .byte c_v+31 - .byte N03 , As5 + .byte N03 , As5 .byte W01 .byte BEND , c_v+0 .byte W01 @@ -304,7 +304,7 @@ se_m_reversal_2: .byte W02 .byte W01 .byte c_v+31 - .byte N03 , Bn5 + .byte N03 , Bn5 .byte W01 .byte BEND , c_v+0 .byte W01 diff --git a/sound/songs/se_m_sacred_fire.s b/sound/songs/se_m_sacred_fire.s index 5e6c864e20..0fda9c757a 100644 --- a/sound/songs/se_m_sacred_fire.s +++ b/sound/songs/se_m_sacred_fire.s @@ -27,7 +27,7 @@ se_m_sacred_fire_1: .byte W03 .byte PAN , c_v+0 .byte W01 - .byte N18 , Gn4 + .byte N18 , Gn4 .byte W02 .byte PAN , c_v-5 .byte W01 @@ -70,9 +70,9 @@ se_m_sacred_fire_2: .byte VOL , 110*se_m_sacred_fire_mvl/mxv .byte N01 , Gn2 , v032 .byte W02 - .byte N01 + .byte N01 .byte W02 - .byte N18 + .byte N18 .byte W03 .byte VOL , 98*se_m_sacred_fire_mvl/mxv .byte W03 diff --git a/sound/songs/se_m_sand_tomb.s b/sound/songs/se_m_sand_tomb.s index 8edf0abf88..4c14aabcc4 100644 --- a/sound/songs/se_m_sand_tomb.s +++ b/sound/songs/se_m_sand_tomb.s @@ -126,45 +126,45 @@ se_m_sand_tomb_2: .byte W03 .byte En3 , v080 .byte W04 - .byte Dn3 + .byte Dn3 .byte W03 .byte Cn3 , v100 .byte W04 .byte En3 , v080 .byte W04 - .byte Dn3 + .byte Dn3 .byte W03 .byte Cn3 , v100 .byte W03 .byte W01 .byte En3 , v080 .byte W03 - .byte Dn3 + .byte Dn3 .byte W04 .byte Cn3 , v100 .byte W04 .byte En3 , v080 .byte W03 - .byte Dn3 + .byte Dn3 .byte W04 .byte Cn3 , v100 .byte W03 .byte En3 , v080 .byte W02 .byte W02 - .byte Dn3 + .byte Dn3 .byte W04 .byte Cn3 , v100 .byte W03 .byte En3 , v080 .byte W04 - .byte Dn3 + .byte Dn3 .byte W03 .byte Cn3 , v100 .byte W04 .byte En3 , v080 .byte W04 - .byte Dn3 + .byte Dn3 .byte W03 .byte Cn3 , v092 .byte W04 diff --git a/sound/songs/se_m_sandstorm.s b/sound/songs/se_m_sandstorm.s index 9674cd043f..4cb12a3892 100644 --- a/sound/songs/se_m_sandstorm.s +++ b/sound/songs/se_m_sandstorm.s @@ -161,7 +161,7 @@ se_m_sandstorm_1: .byte 13*se_m_sandstorm_mvl/mxv .byte BEND , c_v-6 .byte W03 - .byte EOT + .byte EOT .byte FINE @********************** Track 2 **********************@ @@ -175,13 +175,13 @@ se_m_sandstorm_2: .byte W03 .byte En3 , v080 .byte W04 - .byte Dn3 + .byte Dn3 .byte W03 .byte Cn3 , v100 .byte W04 .byte En3 , v080 .byte W04 - .byte Dn3 + .byte Dn3 .byte W03 .byte Cn3 , v100 .byte W03 @@ -189,13 +189,13 @@ se_m_sandstorm_2_000: .byte W01 .byte N03 , En3 , v080 .byte W03 - .byte Dn3 + .byte Dn3 .byte W04 .byte Cn3 , v100 .byte W04 .byte En3 , v080 .byte W03 - .byte Dn3 + .byte Dn3 .byte W04 .byte Cn3 , v100 .byte W03 @@ -203,13 +203,13 @@ se_m_sandstorm_2_000: .byte W02 .byte PEND .byte W02 - .byte Dn3 + .byte Dn3 .byte W04 .byte Cn3 , v100 .byte W03 .byte En3 , v080 .byte W04 - .byte Dn3 + .byte Dn3 .byte W03 .byte Cn3 , v100 .byte W04 @@ -219,13 +219,13 @@ se_m_sandstorm_2_000: .byte W03 .byte En3 , v080 .byte W04 - .byte Dn3 + .byte Dn3 .byte W03 .byte Cn3 , v100 .byte W04 .byte En3 , v080 .byte W04 - .byte Dn3 + .byte Dn3 .byte W03 .byte Cn3 , v100 .byte W03 @@ -254,7 +254,7 @@ se_m_sandstorm_2_000: .byte W04 .byte En3 , v032 .byte W04 - .byte Dn3 + .byte Dn3 .byte W03 .byte Cn3 , v048 .byte W03 diff --git a/sound/songs/se_m_self_destruct.s b/sound/songs/se_m_self_destruct.s index f2ab617ca8..645085e1e5 100644 --- a/sound/songs/se_m_self_destruct.s +++ b/sound/songs/se_m_self_destruct.s @@ -25,9 +25,9 @@ se_m_self_destruct_1: .byte BEND , c_v+0 .byte N01 , Gn3 , v127 .byte W01 - .byte Cn3 + .byte Cn3 .byte W01 - .byte N24 , An3 + .byte N24 , An3 .byte W06 .byte PAN , c_v+6 .byte W04 diff --git a/sound/songs/se_m_sing.s b/sound/songs/se_m_sing.s index f12509f56e..8c48c82247 100644 --- a/sound/songs/se_m_sing.s +++ b/sound/songs/se_m_sing.s @@ -46,7 +46,7 @@ se_m_sing_1: .byte MOD , 0 .byte W03 .byte VOL , 95*se_m_sing_mvl/mxv - .byte N21 , Fn5 + .byte N21 , Fn5 .byte W06 .byte W06 se_m_sing_1_000: @@ -128,7 +128,7 @@ se_m_sing_2: .byte W03 .byte VOL , 95*se_m_sing_mvl/mxv .byte PAN , c_v-12 - .byte N21 , Fn5 + .byte N21 , Fn5 .byte W06 .byte W06 se_m_sing_2_000: diff --git a/sound/songs/se_m_sketch.s b/sound/songs/se_m_sketch.s index 3657d20092..c17c4056f2 100644 --- a/sound/songs/se_m_sketch.s +++ b/sound/songs/se_m_sketch.s @@ -31,7 +31,7 @@ se_m_sketch_1: .byte VOICE , 31 .byte VOL , 40*se_m_sketch_mvl/mxv .byte BEND , c_v-1 - .byte N03 , Cs5 + .byte N03 , Cs5 .byte W01 .byte VOL , 64*se_m_sketch_mvl/mxv .byte PAN , c_v-6 @@ -44,7 +44,7 @@ se_m_sketch_1: .byte VOL , 110*se_m_sketch_mvl/mxv .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N02 , As5 + .byte N02 , As5 .byte W01 .byte BEND , c_v+12 .byte W01 diff --git a/sound/songs/se_m_sky_uppercut.s b/sound/songs/se_m_sky_uppercut.s index 66a791f96c..bed6c19c5f 100644 --- a/sound/songs/se_m_sky_uppercut.s +++ b/sound/songs/se_m_sky_uppercut.s @@ -29,7 +29,7 @@ se_m_sky_uppercut_1: .byte W03 .byte 93*se_m_sky_uppercut_mvl/mxv .byte PAN , c_v-6 - .byte N02 , Cn5 + .byte N02 , Cn5 .byte W03 .byte VOL , 110*se_m_sky_uppercut_mvl/mxv .byte W01 @@ -74,9 +74,9 @@ se_m_sky_uppercut_2: .byte VOL , 110*se_m_sky_uppercut_mvl/mxv .byte N02 , Cn3 , v060 .byte W03 - .byte Gn2 + .byte Gn2 .byte W03 - .byte Gs4 + .byte Gs4 .byte W04 .byte Gs4 , v020 .byte W02 diff --git a/sound/songs/se_m_snore.s b/sound/songs/se_m_snore.s index aff9ef5e37..13e2f6f52b 100644 --- a/sound/songs/se_m_snore.s +++ b/sound/songs/se_m_snore.s @@ -63,28 +63,28 @@ se_m_snore_2: .byte VOICE , 27 .byte N01 , En2 , v052 .byte W02 - .byte Dn2 + .byte Dn2 .byte W02 - .byte En2 + .byte En2 .byte W02 .byte W01 - .byte Dn2 + .byte Dn2 .byte W02 - .byte En2 + .byte En2 .byte W03 .byte W01 .byte En2 , v064 .byte W02 - .byte Gs2 + .byte Gs2 .byte W03 - .byte Dn3 + .byte Dn3 .byte W02 - .byte En2 + .byte En2 .byte W02 - .byte Gs2 + .byte Gs2 .byte W02 .byte W01 - .byte Dn3 + .byte Dn3 .byte W05 .byte FINE diff --git a/sound/songs/se_m_solar_beam.s b/sound/songs/se_m_solar_beam.s index c260c332ab..6a12b4a10e 100644 --- a/sound/songs/se_m_solar_beam.s +++ b/sound/songs/se_m_solar_beam.s @@ -145,7 +145,7 @@ se_m_solar_beam_1: .byte W02 .byte VOL , 5*se_m_solar_beam_mvl/mxv .byte W04 - .byte EOT + .byte EOT .byte FINE @******************************************************@ diff --git a/sound/songs/se_m_spit_up.s b/sound/songs/se_m_spit_up.s index 5d96c7b869..1073ad01fc 100644 --- a/sound/songs/se_m_spit_up.s +++ b/sound/songs/se_m_spit_up.s @@ -34,7 +34,7 @@ se_m_spit_up_1: .byte W01 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N03 , Gn4 + .byte N03 , Gn4 .byte W02 .byte PAN , c_v-7 .byte BEND , c_v+15 @@ -63,7 +63,7 @@ se_m_spit_up_2: .byte N03 , En3 , v052 .byte W03 .byte W01 - .byte N03 + .byte N03 .byte W02 .byte W03 .byte En3 , v032 diff --git a/sound/songs/se_m_stat_decrease.s b/sound/songs/se_m_stat_decrease.s index 5cdf8ac36d..51218db1e7 100644 --- a/sound/songs/se_m_stat_decrease.s +++ b/sound/songs/se_m_stat_decrease.s @@ -30,13 +30,13 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v+6 .byte BEND , c_v+16 - .byte N02 , Cs5 + .byte N02 , Cs5 .byte W01 .byte BEND , c_v+12 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+8 - .byte N02 , Fs5 + .byte N02 , Fs5 .byte W01 .byte BEND , c_v+5 .byte W01 @@ -44,11 +44,11 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v-6 .byte BEND , c_v+0 - .byte N02 , Fs4 + .byte N02 , Fs4 .byte W03 .byte PAN , c_v+0 .byte BEND , c_v+42 - .byte N02 , Cn6 + .byte N02 , Cn6 .byte W01 .byte BEND , c_v+31 .byte W01 @@ -56,13 +56,13 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v+6 .byte BEND , c_v+16 - .byte N02 , Cn5 + .byte N02 , Cn5 .byte W01 .byte BEND , c_v+12 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+8 - .byte N02 , Fn5 + .byte N02 , Fn5 .byte W01 .byte BEND , c_v+5 .byte W01 @@ -70,11 +70,11 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v-6 .byte BEND , c_v+0 - .byte N02 , Fn4 + .byte N02 , Fn4 .byte W03 .byte PAN , c_v+0 .byte BEND , c_v+42 - .byte N02 , Bn5 + .byte N02 , Bn5 .byte W01 .byte BEND , c_v+31 .byte W01 @@ -82,13 +82,13 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v+6 .byte BEND , c_v+16 - .byte N02 , Bn4 + .byte N02 , Bn4 .byte W01 .byte BEND , c_v+12 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+8 - .byte N02 , En5 + .byte N02 , En5 .byte W01 .byte BEND , c_v+5 .byte W01 @@ -96,11 +96,11 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v-6 .byte BEND , c_v+0 - .byte N02 , En4 + .byte N02 , En4 .byte W03 .byte PAN , c_v+0 .byte BEND , c_v+42 - .byte N02 , As5 + .byte N02 , As5 .byte W01 .byte BEND , c_v+31 .byte W01 @@ -108,13 +108,13 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v+6 .byte BEND , c_v+16 - .byte N02 , As4 + .byte N02 , As4 .byte W01 .byte BEND , c_v+12 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+8 - .byte N02 , Ds5 + .byte N02 , Ds5 .byte W01 .byte BEND , c_v+5 .byte W01 @@ -122,11 +122,11 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v-6 .byte BEND , c_v+0 - .byte N02 , Ds4 + .byte N02 , Ds4 .byte W03 .byte PAN , c_v+0 .byte BEND , c_v+42 - .byte N02 , An5 + .byte N02 , An5 .byte W01 .byte BEND , c_v+31 .byte W01 @@ -134,7 +134,7 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v+6 .byte BEND , c_v+16 - .byte N02 , An4 + .byte N02 , An4 .byte W01 .byte BEND , c_v+12 .byte W02 @@ -148,11 +148,11 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v-12 .byte BEND , c_v+0 - .byte N02 , Cs4 + .byte N02 , Cs4 .byte W03 .byte PAN , c_v+0 .byte BEND , c_v+42 - .byte N02 , An5 + .byte N02 , An5 .byte W01 .byte BEND , c_v+31 .byte W01 @@ -160,7 +160,7 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v+12 .byte BEND , c_v+16 - .byte N02 , An4 + .byte N02 , An4 .byte W01 .byte BEND , c_v+12 .byte W02 @@ -174,11 +174,11 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v-16 .byte BEND , c_v+0 - .byte N02 , Cs4 + .byte N02 , Cs4 .byte W03 .byte PAN , c_v+0 .byte BEND , c_v+42 - .byte N02 , An5 + .byte N02 , An5 .byte W01 .byte BEND , c_v+31 .byte W01 @@ -186,7 +186,7 @@ se_m_stat_decrease_1: .byte W01 .byte PAN , c_v+16 .byte BEND , c_v+16 - .byte N02 , An4 + .byte N02 , An4 .byte W01 .byte BEND , c_v+12 .byte W02 @@ -202,55 +202,55 @@ se_m_stat_decrease_2: .byte VOL , 70*se_m_stat_decrease_mvl/mxv .byte N02 , As3 , v052 .byte W03 - .byte N02 + .byte N02 .byte W03 .byte W01 - .byte An3 + .byte An3 .byte W03 - .byte N02 + .byte N02 .byte W02 .byte W02 - .byte Gs3 + .byte Gs3 .byte W04 - .byte N02 + .byte N02 .byte W03 - .byte Gn3 + .byte Gn3 .byte W03 .byte W01 - .byte N02 + .byte N02 .byte W03 - .byte Fs3 + .byte Fs3 .byte W02 .byte W02 - .byte N02 + .byte N02 .byte W04 - .byte Fn3 + .byte Fn3 .byte W03 - .byte N02 + .byte N02 .byte W03 .byte W01 - .byte En3 + .byte En3 .byte W03 - .byte N02 + .byte N02 .byte W02 .byte W02 - .byte Ds3 + .byte Ds3 .byte W04 .byte Ds3 , v032 .byte W03 - .byte Dn3 + .byte Dn3 .byte W03 .byte W01 - .byte N02 + .byte N02 .byte W03 .byte Cs3 , v020 .byte W02 .byte W02 - .byte N02 + .byte N02 .byte W04 .byte Cn3 , v012 .byte W03 - .byte N02 + .byte N02 .byte W03 .byte FINE diff --git a/sound/songs/se_m_stat_increase.s b/sound/songs/se_m_stat_increase.s index e9eea563a0..2556b6afa7 100644 --- a/sound/songs/se_m_stat_increase.s +++ b/sound/songs/se_m_stat_increase.s @@ -30,13 +30,13 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v+6 .byte BEND , c_v+5 - .byte N02 , An4 + .byte N02 , An4 .byte W01 .byte BEND , c_v+8 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+12 - .byte N02 , Dn5 + .byte N02 , Dn5 .byte W01 .byte BEND , c_v+16 .byte W01 @@ -44,13 +44,13 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v-6 .byte BEND , c_v+32 - .byte N02 , Dn4 + .byte N02 , Dn4 .byte W01 .byte BEND , c_v+42 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N02 , As5 + .byte N02 , As5 .byte W01 .byte BEND , c_v+0 .byte W01 @@ -58,13 +58,13 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v+6 .byte BEND , c_v+5 - .byte N02 , As4 + .byte N02 , As4 .byte W01 .byte BEND , c_v+8 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+12 - .byte N02 , Ds5 + .byte N02 , Ds5 .byte W01 .byte BEND , c_v+16 .byte W01 @@ -72,13 +72,13 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v-6 .byte BEND , c_v+32 - .byte N02 , Ds4 + .byte N02 , Ds4 .byte W01 .byte BEND , c_v+42 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N02 , Bn5 + .byte N02 , Bn5 .byte W01 .byte BEND , c_v+0 .byte W01 @@ -86,13 +86,13 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v+6 .byte BEND , c_v+5 - .byte N02 , Bn4 + .byte N02 , Bn4 .byte W01 .byte BEND , c_v+8 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+12 - .byte N02 , En5 + .byte N02 , En5 .byte W01 .byte BEND , c_v+16 .byte W01 @@ -100,13 +100,13 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v-6 .byte BEND , c_v+32 - .byte N02 , En4 + .byte N02 , En4 .byte W01 .byte BEND , c_v+42 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N02 , Cn6 + .byte N02 , Cn6 .byte W01 .byte BEND , c_v+0 .byte W01 @@ -114,13 +114,13 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v+6 .byte BEND , c_v+5 - .byte N02 , Cn5 + .byte N02 , Cn5 .byte W01 .byte BEND , c_v+8 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+12 - .byte N02 , Fn5 + .byte N02 , Fn5 .byte W01 .byte BEND , c_v+16 .byte W01 @@ -128,13 +128,13 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v-6 .byte BEND , c_v+32 - .byte N02 , Fn4 + .byte N02 , Fn4 .byte W01 .byte BEND , c_v+42 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N02 , Cs6 + .byte N02 , Cs6 .byte W01 .byte BEND , c_v+0 .byte W01 @@ -142,7 +142,7 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v+6 .byte BEND , c_v+5 - .byte N02 , Cs5 + .byte N02 , Cs5 .byte W01 .byte BEND , c_v+8 .byte W02 @@ -156,13 +156,13 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v-12 .byte BEND , c_v+32 - .byte N02 , Fn4 + .byte N02 , Fn4 .byte W01 .byte BEND , c_v+42 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N02 , Cs6 + .byte N02 , Cs6 .byte W01 .byte BEND , c_v+0 .byte W01 @@ -170,7 +170,7 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v+12 .byte BEND , c_v+5 - .byte N02 , Cs5 + .byte N02 , Cs5 .byte W01 .byte BEND , c_v+8 .byte W02 @@ -184,13 +184,13 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v-16 .byte BEND , c_v+32 - .byte N02 , Fn4 + .byte N02 , Fn4 .byte W01 .byte BEND , c_v+42 .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N02 , Cs6 + .byte N02 , Cs6 .byte W01 .byte BEND , c_v+0 .byte W01 @@ -198,7 +198,7 @@ se_m_stat_increase_1: .byte W01 .byte PAN , c_v+16 .byte BEND , c_v+5 - .byte N02 , Cs5 + .byte N02 , Cs5 .byte W01 .byte BEND , c_v+8 .byte W02 @@ -214,55 +214,55 @@ se_m_stat_increase_2: .byte VOL , 70*se_m_stat_increase_mvl/mxv .byte N02 , Cn3 , v052 .byte W03 - .byte N02 + .byte N02 .byte W03 .byte W01 - .byte Cs3 + .byte Cs3 .byte W03 - .byte N02 + .byte N02 .byte W02 .byte W02 - .byte Dn3 + .byte Dn3 .byte W04 - .byte N02 + .byte N02 .byte W03 - .byte Ds3 + .byte Ds3 .byte W03 .byte W01 - .byte N02 + .byte N02 .byte W03 - .byte En3 + .byte En3 .byte W02 .byte W02 - .byte N02 + .byte N02 .byte W04 - .byte Fn3 + .byte Fn3 .byte W03 - .byte N02 + .byte N02 .byte W03 .byte W01 - .byte Fs3 + .byte Fs3 .byte W03 - .byte N02 + .byte N02 .byte W02 .byte W02 - .byte Gn3 + .byte Gn3 .byte W04 .byte Gn3 , v032 .byte W03 - .byte Gs3 + .byte Gs3 .byte W03 .byte W01 - .byte N02 + .byte N02 .byte W03 .byte An3 , v020 .byte W02 .byte W02 - .byte N02 + .byte N02 .byte W04 .byte As3 , v012 .byte W03 - .byte N02 + .byte N02 .byte W03 .byte FINE diff --git a/sound/songs/se_m_strength.s b/sound/songs/se_m_strength.s index 0fca48906f..bda5fc61e5 100644 --- a/sound/songs/se_m_strength.s +++ b/sound/songs/se_m_strength.s @@ -51,9 +51,9 @@ se_m_strength_2: .byte VOL , 110*se_m_strength_mvl/mxv .byte N02 , Fn2 , v072 .byte W02 - .byte N01 + .byte N01 .byte W01 - .byte N02 , Gn2 + .byte N02 , Gn2 .byte W03 .byte N01 , Gs2 , v060 .byte W01 diff --git a/sound/songs/se_m_string_shot2.s b/sound/songs/se_m_string_shot2.s index 7bd0a74275..b885a7d1a8 100644 --- a/sound/songs/se_m_string_shot2.s +++ b/sound/songs/se_m_string_shot2.s @@ -32,7 +32,7 @@ se_m_string_shot2_1: .byte c_v+8 .byte W01 .byte PAN , c_v+16 - .byte N09 , Gn4 + .byte N09 , Gn4 .byte W03 .byte BEND , c_v-8 .byte W03 @@ -40,7 +40,7 @@ se_m_string_shot2_1: .byte W06 .byte PAN , c_v+0 .byte BEND , c_v-11 - .byte N09 , En4 + .byte N09 , En4 .byte W03 .byte BEND , c_v-5 .byte W03 @@ -49,7 +49,7 @@ se_m_string_shot2_1: .byte c_v-3 .byte W01 .byte PAN , c_v-16 - .byte N09 , Gn4 + .byte N09 , Gn4 .byte W03 .byte BEND , c_v-19 .byte W03 @@ -57,7 +57,7 @@ se_m_string_shot2_1: .byte W06 .byte PAN , c_v+0 .byte BEND , c_v-19 - .byte N09 , En4 + .byte N09 , En4 .byte W03 .byte BEND , c_v-13 .byte W03 @@ -101,14 +101,14 @@ se_m_string_shot2_2: .byte N09 , Cn3 , v052 .byte W12 .byte PAN , c_v-7 - .byte N09 , Gn2 + .byte N09 , Gn2 .byte W12 se_m_string_shot2_2_000: .byte PAN , c_v+9 .byte N09 , Cn3 , v052 .byte W12 .byte PAN , c_v-6 - .byte N09 , Gn2 + .byte N09 , Gn2 .byte W12 .byte PEND .byte PATT diff --git a/sound/songs/se_m_supersonic.s b/sound/songs/se_m_supersonic.s index f791c9b15c..c975dad4b6 100644 --- a/sound/songs/se_m_supersonic.s +++ b/sound/songs/se_m_supersonic.s @@ -44,7 +44,7 @@ se_m_supersonic_1: .byte VOL , 0*se_m_supersonic_mvl/mxv .byte PAN , c_v+0 .byte BEND , c_v-4 - .byte N32 + .byte N32 .byte W01 .byte PAN , c_v+6 .byte BEND , c_v-1 diff --git a/sound/songs/se_m_sweet_scent.s b/sound/songs/se_m_sweet_scent.s index 0abf858d27..3b9bd527c8 100644 --- a/sound/songs/se_m_sweet_scent.s +++ b/sound/songs/se_m_sweet_scent.s @@ -33,7 +33,7 @@ se_m_sweet_scent_1: .byte W12 .byte PAN , c_v-4 .byte BEND , c_v+5 - .byte N36 , Fn3 + .byte N36 , Fn3 .byte W12 .byte PAN , c_v+0 .byte BEND , c_v+6 @@ -172,7 +172,7 @@ se_m_sweet_scent_2: .byte W02 .byte VOL , 12*se_m_sweet_scent_mvl/mxv .byte W03 - .byte EOT + .byte EOT .byte FINE @******************************************************@ diff --git a/sound/songs/se_m_swift.s b/sound/songs/se_m_swift.s index 10649a80e5..c87cbea419 100644 --- a/sound/songs/se_m_swift.s +++ b/sound/songs/se_m_swift.s @@ -41,7 +41,7 @@ se_m_swift_1: .byte W02 .byte VOL , 100*se_m_swift_mvl/mxv .byte BEND , c_v+0 - .byte N06 + .byte N06 .byte W01 .byte PAN , c_v+5 .byte BEND , c_v-11 diff --git a/sound/songs/se_m_teleport.s b/sound/songs/se_m_teleport.s index 2c4ad40e8a..60f7945d7b 100644 --- a/sound/songs/se_m_teleport.s +++ b/sound/songs/se_m_teleport.s @@ -68,7 +68,7 @@ se_m_teleport_1: .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+6 - .byte N06 , Fn3 + .byte N06 , Fn3 .byte W01 .byte BEND , c_v+11 .byte W01 diff --git a/sound/songs/se_m_thunder_wave.s b/sound/songs/se_m_thunder_wave.s index c265355006..a0b06cb5de 100644 --- a/sound/songs/se_m_thunder_wave.s +++ b/sound/songs/se_m_thunder_wave.s @@ -31,7 +31,7 @@ se_m_thunder_wave_1: .byte W03 .byte PAN , c_v+0 .byte BEND , c_v+32 - .byte N04 , Cn3 + .byte N04 , Cn3 .byte W02 .byte PAN , c_v+9 .byte W01 @@ -39,11 +39,11 @@ se_m_thunder_wave_1: .byte W03 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N01 , Gn3 + .byte N01 , Gn3 .byte W02 - .byte Bn2 + .byte Bn2 .byte W02 - .byte N13 , Gn3 + .byte N13 , Gn3 .byte W02 .byte VOL , 96*se_m_thunder_wave_mvl/mxv .byte W01 diff --git a/sound/songs/se_m_toxic.s b/sound/songs/se_m_toxic.s index 0e3ebe2204..ae460ad773 100644 --- a/sound/songs/se_m_toxic.s +++ b/sound/songs/se_m_toxic.s @@ -36,7 +36,7 @@ se_m_toxic_1: .byte W01 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N02 , Cn2 + .byte N02 , Cn2 .byte W02 .byte PAN , c_v-7 .byte BEND , c_v+16 @@ -44,18 +44,18 @@ se_m_toxic_1: .byte PAN , c_v+0 .byte BEND , c_v+0 .byte W01 - .byte N01 + .byte N01 .byte W01 .byte PAN , c_v+8 - .byte N01 , Cn3 + .byte N01 , Cn3 .byte W01 .byte VOICE , 31 .byte PAN , c_v-16 - .byte N01 , Dn2 + .byte N01 , Dn2 .byte W02 .byte VOICE , 23 .byte PAN , c_v+0 - .byte N01 , Cn2 + .byte N01 , Cn2 .byte W01 .byte VOICE , 31 .byte PAN , c_v+16 @@ -64,10 +64,10 @@ se_m_toxic_1: .byte VOICE , 23 .byte PAN , c_v-8 .byte BEND , c_v+16 - .byte N01 , Cn3 + .byte N01 , Cn3 .byte W02 .byte PAN , c_v+8 - .byte N01 , Cn2 + .byte N01 , Cn2 .byte W08 .byte FINE diff --git a/sound/songs/se_m_tri_attack.s b/sound/songs/se_m_tri_attack.s index 448998e779..13947e6f1a 100644 --- a/sound/songs/se_m_tri_attack.s +++ b/sound/songs/se_m_tri_attack.s @@ -68,17 +68,17 @@ se_m_tri_attack_2: .byte VOL , 110*se_m_tri_attack_mvl/mxv .byte N02 , Gs3 , v032 .byte W02 - .byte Gn3 + .byte Gn3 .byte W02 - .byte Fn3 + .byte Fn3 .byte W03 - .byte En3 + .byte En3 .byte W02 - .byte Dn3 + .byte Dn3 .byte W03 - .byte Cn3 + .byte Cn3 .byte W02 - .byte Gs2 + .byte Gs2 .byte W10 .byte FINE diff --git a/sound/songs/se_m_tri_attack2.s b/sound/songs/se_m_tri_attack2.s index 0afade13c6..61f11c3967 100644 --- a/sound/songs/se_m_tri_attack2.s +++ b/sound/songs/se_m_tri_attack2.s @@ -100,7 +100,7 @@ se_m_tri_attack2_2: .byte VOL , 110*se_m_tri_attack2_mvl/mxv .byte N06 , Cn3 , v060 .byte W09 - .byte N15 + .byte N15 .byte W15 .byte W24 .byte W24 diff --git a/sound/songs/se_m_twister.s b/sound/songs/se_m_twister.s index e95e9b3224..bbb4f1ec03 100644 --- a/sound/songs/se_m_twister.s +++ b/sound/songs/se_m_twister.s @@ -147,7 +147,7 @@ se_m_twister_1: .byte W02 .byte PAN , c_v-11 .byte W03 - .byte EOT + .byte EOT .byte FINE @********************** Track 2 **********************@ @@ -190,7 +190,7 @@ se_m_twister_2: .byte W05 .byte 18*se_m_twister_mvl/mxv .byte W05 - .byte EOT + .byte EOT .byte FINE @******************************************************@ diff --git a/sound/songs/se_m_vital_throw.s b/sound/songs/se_m_vital_throw.s index c89d003b6e..3e04b43e5b 100644 --- a/sound/songs/se_m_vital_throw.s +++ b/sound/songs/se_m_vital_throw.s @@ -36,10 +36,10 @@ se_m_vital_throw_1: .byte VOICE , 21 .byte VOL , 110*se_m_vital_throw_mvl/mxv .byte BEND , c_v+0 - .byte N03 , Gn4 + .byte N03 , Gn4 .byte W06 .byte PAN , c_v+16 - .byte N03 , Cn5 + .byte N03 , Cn5 .byte W09 .byte FINE @@ -54,7 +54,7 @@ se_m_vital_throw_2: .byte N03 , Cn3 , v052 .byte W06 .byte PAN , c_v-7 - .byte N03 + .byte N03 .byte W09 .byte FINE diff --git a/sound/songs/se_m_vital_throw2.s b/sound/songs/se_m_vital_throw2.s index 3bffdeb258..0d1e64ecb5 100644 --- a/sound/songs/se_m_vital_throw2.s +++ b/sound/songs/se_m_vital_throw2.s @@ -36,7 +36,7 @@ se_m_vital_throw2_1: .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N06 , En3 + .byte N06 , En3 .byte W01 .byte BEND , c_v-9 .byte W01 @@ -49,7 +49,7 @@ se_m_vital_throw2_1: .byte W02 .byte PAN , c_v+0 .byte BEND , c_v+0 - .byte N09 , An2 + .byte N09 , An2 .byte W01 .byte BEND , c_v-9 .byte W01 @@ -84,10 +84,10 @@ se_m_vital_throw2_2: .byte N03 , Gs2 , v052 .byte W06 .byte PAN , c_v-7 - .byte N03 + .byte N03 .byte W06 .byte PAN , c_v+0 - .byte N03 + .byte N03 .byte W12 .byte FINE diff --git a/sound/songs/se_m_waterfall.s b/sound/songs/se_m_waterfall.s index a07e7e9713..9e16b9ee76 100644 --- a/sound/songs/se_m_waterfall.s +++ b/sound/songs/se_m_waterfall.s @@ -100,23 +100,23 @@ se_m_waterfall_2: .byte VOL , 115*se_m_waterfall_mvl/mxv .byte N06 , Cn3 , v040 .byte W06 - .byte Gn2 + .byte Gn2 .byte W06 se_m_waterfall_2_000: .byte N06 , Cn3 , v040 .byte W06 - .byte Gn2 + .byte Gn2 .byte W06 .byte PEND .byte PATT .word se_m_waterfall_2_000 .byte N06 , Cn3 , v032 .byte W06 - .byte Gn2 + .byte Gn2 .byte W06 .byte Cn3 , v012 .byte W06 - .byte Gn2 + .byte Gn2 .byte W06 .byte FINE diff --git a/sound/songs/se_m_whirlpool.s b/sound/songs/se_m_whirlpool.s index bac3fa5bcf..bf0b9cc722 100644 --- a/sound/songs/se_m_whirlpool.s +++ b/sound/songs/se_m_whirlpool.s @@ -106,7 +106,7 @@ se_m_whirlpool_1: .byte W01 .byte BEND , c_v-28 .byte W04 - .byte EOT + .byte EOT .byte FINE @******************************************************@ diff --git a/sound/songs/se_win_open.s b/sound/songs/se_win_open.s index 74656e9c0f..b5d582a8d9 100644 --- a/sound/songs/se_win_open.s +++ b/sound/songs/se_win_open.s @@ -22,7 +22,7 @@ se_win_open_1: .byte VOL , 110*se_win_open_mvl/mxv .byte N03 , Ds3 , v127 .byte W03 - .byte N15 , Gn4 + .byte N15 , Gn4 .byte W21 .byte FINE diff --git a/sound/voicegroups/voicegroup000.inc b/sound/voicegroups/voicegroup000.inc index 275b64993d..7a2c5772f9 100644 --- a/sound/voicegroups/voicegroup000.inc +++ b/sound/voicegroups/voicegroup000.inc @@ -1,65 +1,65 @@ .align 2 voicegroup000:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 0, 9, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 0, 9, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup001.inc b/sound/voicegroups/voicegroup001.inc index a22c5b6c52..20a2795dc1 100644 --- a/sound/voicegroups/voicegroup001.inc +++ b/sound/voicegroups/voicegroup001.inc @@ -1,32 +1,32 @@ .align 2 voicegroup001:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 6, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 - voice_square_2 60, 0, 3, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 0, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 6, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 + voice_square_2 60, 0, 3, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 0, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 diff --git a/sound/voicegroups/voicegroup002.inc b/sound/voicegroups/voicegroup002.inc index 3f5d846d4b..bd6f080aa4 100644 --- a/sound/voicegroups/voicegroup002.inc +++ b/sound/voicegroups/voicegroup002.inc @@ -1,57 +1,57 @@ .align 2 voicegroup002:: - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 255, 165, 154, 127 - voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 255, 165, 154, 127 - voice_directsound 60, 0, DirectSoundWaveData_unused_guitar_separates_power_chord, 255, 165, 206, 127 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 206, 127 - voice_directsound 60, 0, DirectSoundWaveData_unknown_snare, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 48, 44, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 - voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 - voice_directsound 51, 54, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 54, 64, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 - voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_open_hihat, 255, 242, 141, 0 - voice_directsound 57, 69, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 - voice_directsound 60, 79, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 62, 84, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 70, 49, DirectSoundWaveData_unknown_bell, 255, 165, 103, 231 - voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 60, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 235, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - voice_directsound_no_resample 30, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 104, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 94, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 84, 104, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 255, 165, 154, 127 + voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 255, 165, 154, 127 + voice_directsound 60, 0, DirectSoundWaveData_unused_guitar_separates_power_chord, 255, 165, 206, 127 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 206, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_snare, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 48, 44, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 + voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 + voice_directsound 51, 54, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 54, 64, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 + voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_open_hihat, 255, 242, 141, 0 + voice_directsound 57, 69, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 + voice_directsound 60, 79, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 62, 84, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 70, 49, DirectSoundWaveData_unknown_bell, 255, 165, 103, 231 + voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 60, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 235, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_directsound_no_resample 30, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 104, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 94, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 84, 104, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 diff --git a/sound/voicegroups/voicegroup003.inc b/sound/voicegroups/voicegroup003.inc index 6c6193e7d5..d77150fc12 100644 --- a/sound/voicegroups/voicegroup003.inc +++ b/sound/voicegroups/voicegroup003.inc @@ -1,57 +1,57 @@ .align 2 voicegroup003:: - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound_no_resample 64, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound_no_resample 64, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 diff --git a/sound/voicegroups/voicegroup004.inc b/sound/voicegroups/voicegroup004.inc index 786010cb02..6aa28d6a9f 100644 --- a/sound/voicegroups/voicegroup004.inc +++ b/sound/voicegroups/voicegroup004.inc @@ -1,93 +1,93 @@ .align 2 voicegroup004:: - voice_directsound_no_resample 66, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound_no_resample 64, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 61, 84, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 62, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound 65, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 56, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 - voice_directsound_no_resample 66, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound 60, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 58, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 62, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 61, 84, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 - voice_directsound 64, 64, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound_no_resample 66, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound_no_resample 64, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 61, 84, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound 62, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound 65, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 56, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound_no_resample 66, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound 60, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 58, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 62, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 61, 84, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 + voice_directsound 64, 64, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 diff --git a/sound/voicegroups/voicegroup005.inc b/sound/voicegroups/voicegroup005.inc index efeab963b5..584451a62f 100644 --- a/sound/voicegroups/voicegroup005.inc +++ b/sound/voicegroups/voicegroup005.inc @@ -1,7 +1,7 @@ .align 2 voicegroup005:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_48, 255, 252, 0, 239 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_60, 255, 250, 0, 221 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_72, 255, 250, 0, 221 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_84, 255, 247, 0, 221 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_48, 255, 252, 0, 239 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_60, 255, 250, 0, 221 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_72, 255, 250, 0, 221 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_84, 255, 247, 0, 221 diff --git a/sound/voicegroups/voicegroup006.inc b/sound/voicegroups/voicegroup006.inc index 156caa6b5d..52b2b335f2 100644 --- a/sound/voicegroups/voicegroup006.inc +++ b/sound/voicegroups/voicegroup006.inc @@ -1,6 +1,6 @@ .align 2 voicegroup006:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_60, 255, 0, 255, 196 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_72, 255, 0, 255, 196 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_84, 255, 0, 255, 196 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_60, 255, 0, 255, 196 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_72, 255, 0, 255, 196 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_84, 255, 0, 255, 196 diff --git a/sound/voicegroups/voicegroup007.inc b/sound/voicegroups/voicegroup007.inc index be49a69410..66bcd3fa6c 100644 --- a/sound/voicegroups/voicegroup007.inc +++ b/sound/voicegroups/voicegroup007.inc @@ -1,134 +1,134 @@ .align 2 voicegroup007:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_60, 255, 0, 193, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_72, 255, 0, 193, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_84, 255, 0, 193, 127 - voice_square_1_alt 60, 0, 38, 2, 1, 0, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 36, 2, 0, 1, 4, 2 - voice_square_1_alt 60, 0, 21, 2, 0, 0, 15, 2 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_60, 255, 0, 193, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_72, 255, 0, 193, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_84, 255, 0, 193, 127 + voice_square_1_alt 60, 0, 38, 2, 1, 0, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 36, 2, 0, 1, 4, 2 + voice_square_1_alt 60, 0, 21, 2, 0, 0, 15, 2 diff --git a/sound/voicegroups/voicegroup008.inc b/sound/voicegroups/voicegroup008.inc index ba9ba6b27c..7fc874e87a 100644 --- a/sound/voicegroups/voicegroup008.inc +++ b/sound/voicegroups/voicegroup008.inc @@ -1,5 +1,5 @@ .align 2 voicegroup008:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tuba_39, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tuba_51, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tuba_39, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tuba_51, 255, 0, 255, 165 diff --git a/sound/voicegroups/voicegroup009.inc b/sound/voicegroups/voicegroup009.inc index afa7a0f6ca..4a51a02ca3 100644 --- a/sound/voicegroups/voicegroup009.inc +++ b/sound/voicegroups/voicegroup009.inc @@ -1,5 +1,5 @@ .align 2 voicegroup009:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_60, 255, 0, 224, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_72, 255, 0, 218, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_60, 255, 0, 224, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_72, 255, 0, 218, 165 diff --git a/sound/voicegroups/voicegroup010.inc b/sound/voicegroups/voicegroup010.inc index c92a030f2d..8d0f7a56dd 100644 --- a/sound/voicegroups/voicegroup010.inc +++ b/sound/voicegroups/voicegroup010.inc @@ -1,87 +1,87 @@ .align 2 voicegroup010:: - voice_keysplit_all voicegroup031 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 4, 0, 1 - voice_square_1 60, 0, 0, 3, 0, 4, 0, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 + voice_keysplit_all voicegroup031 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 4, 0, 1 + voice_square_1 60, 0, 0, 3, 0, 4, 0, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup011.inc b/sound/voicegroups/voicegroup011.inc index 8c9b120c90..5527cc3698 100644 --- a/sound/voicegroups/voicegroup011.inc +++ b/sound/voicegroups/voicegroup011.inc @@ -1,131 +1,131 @@ .align 2 voicegroup011:: - voice_keysplit_all voicegroup022 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 2, 0, 3, 0, 0 - voice_square_2_alt 60, 0, 2, 0, 3, 0, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 3, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 1, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup022 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 2, 0, 3, 0, 0 + voice_square_2_alt 60, 0, 2, 0, 3, 0, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 3, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 1, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup012.inc b/sound/voicegroups/voicegroup012.inc index 4f94f1b1d3..2fe7cf8180 100644 --- a/sound/voicegroups/voicegroup012.inc +++ b/sound/voicegroups/voicegroup012.inc @@ -1,105 +1,105 @@ .align 2 voicegroup012:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 178, 180, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 29, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 22, 2, 0, 2, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 178, 180, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 29, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 22, 2, 0, 2, 0, 0 diff --git a/sound/voicegroups/voicegroup013.inc b/sound/voicegroups/voicegroup013.inc index 4625bd9d82..f99c6f3cdc 100644 --- a/sound/voicegroups/voicegroup013.inc +++ b/sound/voicegroups/voicegroup013.inc @@ -1,93 +1,93 @@ .align 2 voicegroup013:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup014.inc b/sound/voicegroups/voicegroup014.inc index d9cb8b079e..6ce0897d10 100644 --- a/sound/voicegroups/voicegroup014.inc +++ b/sound/voicegroups/voicegroup014.inc @@ -1,88 +1,88 @@ .align 2 voicegroup014:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 diff --git a/sound/voicegroups/voicegroup015.inc b/sound/voicegroups/voicegroup015.inc index 530e017cd0..a528476356 100644 --- a/sound/voicegroups/voicegroup015.inc +++ b/sound/voicegroups/voicegroup015.inc @@ -1,95 +1,95 @@ .align 2 voicegroup015:: - voice_keysplit_all voicegroup016 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 3, 0, 2, 0, 0 - voice_square_2 60, 0, 3, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 3, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit_all voicegroup016 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 3, 0, 2, 0, 0 + voice_square_2 60, 0, 3, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 3, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup016.inc b/sound/voicegroups/voicegroup016.inc index 2013f88828..1b17ac49c7 100644 --- a/sound/voicegroups/voicegroup016.inc +++ b/sound/voicegroups/voicegroup016.inc @@ -1,68 +1,68 @@ .align 2 voicegroup016:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 0, 2 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 32, 74, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 66, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 62, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 0, 2 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 32, 74, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 66, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 62, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 diff --git a/sound/voicegroups/voicegroup017.inc b/sound/voicegroups/voicegroup017.inc index ac3768c10d..06738d297b 100644 --- a/sound/voicegroups/voicegroup017.inc +++ b/sound/voicegroups/voicegroup017.inc @@ -1,94 +1,94 @@ .align 2 voicegroup017:: - voice_keysplit_all voicegroup001 - voice_square_2_alt 60, 0, 2, 0, 3, 3, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 3, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 2 - voice_square_2_alt 60, 0, 2, 1, 1, 0, 0 - voice_square_1_alt 60, 0, 0, 2, 1, 1, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 1, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 - voice_square_1_alt 60, 0, 0, 2, 1, 1, 7, 2 - voice_square_2_alt 60, 0, 3, 1, 1, 7, 2 - voice_square_1_alt 60, 0, 0, 3, 1, 1, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 3 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 2 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 2 - voice_square_2_alt 60, 0, 1, 1, 2, 6, 2 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 6, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 2 + voice_keysplit_all voicegroup001 + voice_square_2_alt 60, 0, 2, 0, 3, 3, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 3, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 2 + voice_square_2_alt 60, 0, 2, 1, 1, 0, 0 + voice_square_1_alt 60, 0, 0, 2, 1, 1, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 1, 7, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_square_1_alt 60, 0, 0, 2, 1, 1, 7, 2 + voice_square_2_alt 60, 0, 3, 1, 1, 7, 2 + voice_square_1_alt 60, 0, 0, 3, 1, 1, 7, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 2 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 2 + voice_square_2_alt 60, 0, 1, 1, 2, 6, 2 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 6, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 2 diff --git a/sound/voicegroups/voicegroup018.inc b/sound/voicegroups/voicegroup018.inc index 466f423856..30b63bb26e 100644 --- a/sound/voicegroups/voicegroup018.inc +++ b/sound/voicegroups/voicegroup018.inc @@ -1,131 +1,131 @@ .align 2 voicegroup018:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 1, 0, 1, 0, 3 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 1, 0, 1, 0, 3 diff --git a/sound/voicegroups/voicegroup019.inc b/sound/voicegroups/voicegroup019.inc index 5d18c1e692..a983659c39 100644 --- a/sound/voicegroups/voicegroup019.inc +++ b/sound/voicegroups/voicegroup019.inc @@ -1,88 +1,88 @@ .align 2 voicegroup019:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup020.inc b/sound/voicegroups/voicegroup020.inc index 2c5494c791..8449fbdd60 100644 --- a/sound/voicegroups/voicegroup020.inc +++ b/sound/voicegroups/voicegroup020.inc @@ -1,90 +1,90 @@ .align 2 voicegroup020:: - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 6, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 6, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 7, 1 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 6, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 6, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup021.inc b/sound/voicegroups/voicegroup021.inc index 70698a668e..43aa9150ee 100644 --- a/sound/voicegroups/voicegroup021.inc +++ b/sound/voicegroups/voicegroup021.inc @@ -1,54 +1,54 @@ .align 2 voicegroup021:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup022.inc b/sound/voicegroups/voicegroup022.inc index bd64fd856c..877f57d6ce 100644 --- a/sound/voicegroups/voicegroup022.inc +++ b/sound/voicegroups/voicegroup022.inc @@ -1,68 +1,68 @@ .align 2 voicegroup022:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 67, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 61, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 67, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 61, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 diff --git a/sound/voicegroups/voicegroup023.inc b/sound/voicegroups/voicegroup023.inc index 059999c8b8..eede8dc019 100644 --- a/sound/voicegroups/voicegroup023.inc +++ b/sound/voicegroups/voicegroup023.inc @@ -1,92 +1,92 @@ .align 2 voicegroup023:: - voice_keysplit voicegroup005, KeySplitTable1 - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 + voice_keysplit voicegroup005, KeySplitTable1 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 diff --git a/sound/voicegroups/voicegroup024.inc b/sound/voicegroups/voicegroup024.inc index ca05a59165..3806b462d6 100644 --- a/sound/voicegroups/voicegroup024.inc +++ b/sound/voicegroups/voicegroup024.inc @@ -1,94 +1,94 @@ .align 2 voicegroup024:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 diff --git a/sound/voicegroups/voicegroup025.inc b/sound/voicegroups/voicegroup025.inc index 01716b47d9..3449629469 100644 --- a/sound/voicegroups/voicegroup025.inc +++ b/sound/voicegroups/voicegroup025.inc @@ -1,87 +1,87 @@ .align 2 voicegroup025:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup026.inc b/sound/voicegroups/voicegroup026.inc index 7911f04099..d18047d582 100644 --- a/sound/voicegroups/voicegroup026.inc +++ b/sound/voicegroups/voicegroup026.inc @@ -1,88 +1,88 @@ .align 2 voicegroup026:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 9, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 9, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 9, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 9, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 diff --git a/sound/voicegroups/voicegroup027.inc b/sound/voicegroups/voicegroup027.inc index c350886569..517ee87d43 100644 --- a/sound/voicegroups/voicegroup027.inc +++ b/sound/voicegroups/voicegroup027.inc @@ -1,131 +1,131 @@ .align 2 voicegroup027:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 1, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 1, 0, 2, 0, 0 - voice_square_2 60, 0, 1, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 1, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 4, 1, 4 - voice_noise_alt 60, 0, 0, 0, 1, 0, 2 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 1, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 1, 0, 2, 0, 0 + voice_square_2 60, 0, 1, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 1, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 4, 1, 4 + voice_noise_alt 60, 0, 0, 0, 1, 0, 2 diff --git a/sound/voicegroups/voicegroup028.inc b/sound/voicegroups/voicegroup028.inc index 73413c99e9..9af19f1879 100644 --- a/sound/voicegroups/voicegroup028.inc +++ b/sound/voicegroups/voicegroup028.inc @@ -1,86 +1,86 @@ .align 2 voicegroup028:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 3, 0, 1, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 0, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 0, 0, 2, 0, 0 - voice_square_2 60, 0, 0, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 0, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 2, 0, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_2 60, 0, 3, 0, 4, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 3, 0, 1, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 0, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 0, 0, 2, 0, 0 + voice_square_2 60, 0, 0, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 0, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 2, 0, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_2 60, 0, 3, 0, 4, 0, 0 diff --git a/sound/voicegroups/voicegroup029.inc b/sound/voicegroups/voicegroup029.inc index 4b7704be04..7c801afcb3 100644 --- a/sound/voicegroups/voicegroup029.inc +++ b/sound/voicegroups/voicegroup029.inc @@ -1,91 +1,91 @@ .align 2 voicegroup029:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 0, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 0, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 diff --git a/sound/voicegroups/voicegroup030.inc b/sound/voicegroups/voicegroup030.inc index 11856b6a6a..1e1b5088dd 100644 --- a/sound/voicegroups/voicegroup030.inc +++ b/sound/voicegroups/voicegroup030.inc @@ -1,58 +1,58 @@ .align 2 voicegroup030:: - voice_keysplit_all voicegroup031 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 4, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 37, 165, 180, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit_all voicegroup031 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 4, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 37, 165, 180, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup031.inc b/sound/voicegroups/voicegroup031.inc index f65481a9d1..178d7ec63d 100644 --- a/sound/voicegroups/voicegroup031.inc +++ b/sound/voicegroups/voicegroup031.inc @@ -1,68 +1,68 @@ .align 2 voicegroup031:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 165, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 32, 49, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 79, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 74, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 165, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 32, 49, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 79, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 74, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 diff --git a/sound/voicegroups/voicegroup032.inc b/sound/voicegroups/voicegroup032.inc index 22919a9a0c..dc60bbdf3b 100644 --- a/sound/voicegroups/voicegroup032.inc +++ b/sound/voicegroups/voicegroup032.inc @@ -1,131 +1,131 @@ .align 2 voicegroup032:: - voice_keysplit_all voicegroup016 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 3, 4, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 3, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 250, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - voice_noise_alt 60, 0, 0, 0, 4, 1, 4 - voice_noise_alt 60, 0, 0, 0, 1, 0, 2 + voice_keysplit_all voicegroup016 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 3, 4, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 3, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 250, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_noise_alt 60, 0, 0, 0, 4, 1, 4 + voice_noise_alt 60, 0, 0, 0, 1, 0, 2 diff --git a/sound/voicegroups/voicegroup033.inc b/sound/voicegroups/voicegroup033.inc index d414fa0bcb..34e7e43b71 100644 --- a/sound/voicegroups/voicegroup033.inc +++ b/sound/voicegroups/voicegroup033.inc @@ -1,86 +1,86 @@ .align 2 voicegroup033:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 diff --git a/sound/voicegroups/voicegroup034.inc b/sound/voicegroups/voicegroup034.inc index 43b2e67a99..fe973b84c3 100644 --- a/sound/voicegroups/voicegroup034.inc +++ b/sound/voicegroups/voicegroup034.inc @@ -1,87 +1,87 @@ .align 2 voicegroup034:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 2 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_16, 0, 7, 15, 2 diff --git a/sound/voicegroups/voicegroup035.inc b/sound/voicegroups/voicegroup035.inc index 4afb126c39..2c3ac4bddd 100644 --- a/sound/voicegroups/voicegroup035.inc +++ b/sound/voicegroups/voicegroup035.inc @@ -1,88 +1,88 @@ .align 2 voicegroup035:: - voice_keysplit_all voicegroup031 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 1 + voice_keysplit_all voicegroup031 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 1 diff --git a/sound/voicegroups/voicegroup036.inc b/sound/voicegroups/voicegroup036.inc index 2161259d7e..c3d2df146c 100644 --- a/sound/voicegroups/voicegroup036.inc +++ b/sound/voicegroups/voicegroup036.inc @@ -1,131 +1,131 @@ .align 2 voicegroup036:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 4, 1, 4 - voice_noise_alt 60, 0, 0, 0, 1, 0, 2 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 4, 1, 4 + voice_noise_alt 60, 0, 0, 0, 1, 0, 2 diff --git a/sound/voicegroups/voicegroup037.inc b/sound/voicegroups/voicegroup037.inc index 29f33cbe7c..057891c01b 100644 --- a/sound/voicegroups/voicegroup037.inc +++ b/sound/voicegroups/voicegroup037.inc @@ -1,92 +1,92 @@ .align 2 voicegroup037:: - voice_keysplit_all voicegroup031 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 + voice_keysplit_all voicegroup031 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 diff --git a/sound/voicegroups/voicegroup038.inc b/sound/voicegroups/voicegroup038.inc index 42c63281d5..bcb211d6f5 100644 --- a/sound/voicegroups/voicegroup038.inc +++ b/sound/voicegroups/voicegroup038.inc @@ -1,85 +1,85 @@ .align 2 voicegroup038:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup039.inc b/sound/voicegroups/voicegroup039.inc index c8597bb479..9e8d16df0b 100644 --- a/sound/voicegroups/voicegroup039.inc +++ b/sound/voicegroups/voicegroup039.inc @@ -1,131 +1,131 @@ .align 2 voicegroup039:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup040.inc b/sound/voicegroups/voicegroup040.inc index 4ee10e72fe..f390cb3d85 100644 --- a/sound/voicegroups/voicegroup040.inc +++ b/sound/voicegroups/voicegroup040.inc @@ -1,131 +1,131 @@ .align 2 voicegroup040:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup041.inc b/sound/voicegroups/voicegroup041.inc index dc23fd7ad8..def4e46b00 100644 --- a/sound/voicegroups/voicegroup041.inc +++ b/sound/voicegroups/voicegroup041.inc @@ -1,131 +1,131 @@ .align 2 voicegroup041:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup042.inc b/sound/voicegroups/voicegroup042.inc index 0166ef9e3c..1298ddbd52 100644 --- a/sound/voicegroups/voicegroup042.inc +++ b/sound/voicegroups/voicegroup042.inc @@ -1,131 +1,131 @@ .align 2 voicegroup042:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup043.inc b/sound/voicegroups/voicegroup043.inc index d2ca0101b2..d6bd30bcba 100644 --- a/sound/voicegroups/voicegroup043.inc +++ b/sound/voicegroups/voicegroup043.inc @@ -1,84 +1,84 @@ .align 2 voicegroup043:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 diff --git a/sound/voicegroups/voicegroup044.inc b/sound/voicegroups/voicegroup044.inc index 4717b4273f..9a057754b3 100644 --- a/sound/voicegroups/voicegroup044.inc +++ b/sound/voicegroups/voicegroup044.inc @@ -1,84 +1,84 @@ .align 2 voicegroup044:: - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 5, 1, 7 - voice_square_2_alt 60, 0, 3, 0, 4, 3, 6 - voice_square_2_alt 60, 0, 2, 1, 1, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 224 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 5, 1, 7 + voice_square_2_alt 60, 0, 3, 0, 4, 3, 6 + voice_square_2_alt 60, 0, 2, 1, 1, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 224 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 diff --git a/sound/voicegroups/voicegroup045.inc b/sound/voicegroups/voicegroup045.inc index f0bc78c58b..2e2016e439 100644 --- a/sound/voicegroups/voicegroup045.inc +++ b/sound/voicegroups/voicegroup045.inc @@ -1,131 +1,131 @@ .align 2 voicegroup045:: - voice_keysplit_all voicegroup001 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 0, 1 - voice_square_1_alt 60, 0, 0, 3, 1, 2, 6, 0 - voice_square_2_alt 60, 0, 3, 1, 2, 6, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 0, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4860, 1, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 0, 1 + voice_square_1_alt 60, 0, 0, 3, 1, 2, 6, 0 + voice_square_2_alt 60, 0, 3, 1, 2, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 0, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 1, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup046.inc b/sound/voicegroups/voicegroup046.inc index e2ecb76104..f653241e35 100644 --- a/sound/voicegroups/voicegroup046.inc +++ b/sound/voicegroups/voicegroup046.inc @@ -1,131 +1,131 @@ .align 2 voicegroup046:: - voice_keysplit voicegroup005, KeySplitTable1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4900, 0, 1, 12, 0 - voice_square_1_alt 60, 0, 0, 0, 1, 1, 9, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 1 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 - voice_square_2_alt 60, 0, 1, 0, 2, 6, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit voicegroup005, KeySplitTable1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 1, 12, 0 + voice_square_1_alt 60, 0, 0, 0, 1, 1, 9, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 + voice_square_2_alt 60, 0, 1, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup047.inc b/sound/voicegroups/voicegroup047.inc index 403d53d423..84fa9335a8 100644 --- a/sound/voicegroups/voicegroup047.inc +++ b/sound/voicegroups/voicegroup047.inc @@ -1,131 +1,131 @@ .align 2 voicegroup047:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 1, 7, 15, 2 - voice_square_2_alt 60, 0, 1, 1, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 1, 7, 15, 2 + voice_square_2_alt 60, 0, 1, 1, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup048.inc b/sound/voicegroups/voicegroup048.inc index b819395a6a..eeb5b682a3 100644 --- a/sound/voicegroups/voicegroup048.inc +++ b/sound/voicegroups/voicegroup048.inc @@ -1,91 +1,91 @@ .align 2 voicegroup048:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 7, 3, 3 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 204, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 4, 4, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 3, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 3, 3, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 12, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 2, 4, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 7, 3, 3 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 204, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 239 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 4, 4, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 3, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 3, 3, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 12, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 2, 4, 0 diff --git a/sound/voicegroups/voicegroup049.inc b/sound/voicegroups/voicegroup049.inc index ed830a1a9c..b6b0774cf3 100644 --- a/sound/voicegroups/voicegroup049.inc +++ b/sound/voicegroups/voicegroup049.inc @@ -1,131 +1,131 @@ .align 2 voicegroup049:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 1, 1, 3, 4, 2 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 1, 7, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 2 - voice_square_2_alt 60, 0, 1, 1, 3, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 1, 4, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 1, 1, 3, 4, 2 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 1, 7, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 2 + voice_square_2_alt 60, 0, 1, 1, 3, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 1, 4, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup050.inc b/sound/voicegroups/voicegroup050.inc index ed5f1ba71d..6b45664eb0 100644 --- a/sound/voicegroups/voicegroup050.inc +++ b/sound/voicegroups/voicegroup050.inc @@ -1,131 +1,131 @@ .align 2 voicegroup050:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup051.inc b/sound/voicegroups/voicegroup051.inc index 31b69cd879..d3a144622a 100644 --- a/sound/voicegroups/voicegroup051.inc +++ b/sound/voicegroups/voicegroup051.inc @@ -1,77 +1,77 @@ .align 2 voicegroup051:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 4, 4, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 3, 4, 1 - voice_square_2_alt 60, 0, 2, 1, 3, 4, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 3, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 4, 4, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 3, 4, 1 + voice_square_2_alt 60, 0, 2, 1, 3, 4, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 3, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 diff --git a/sound/voicegroups/voicegroup052.inc b/sound/voicegroups/voicegroup052.inc index b7020362df..438e2d5f17 100644 --- a/sound/voicegroups/voicegroup052.inc +++ b/sound/voicegroups/voicegroup052.inc @@ -1,131 +1,131 @@ .align 2 voicegroup052:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 3, 1, 2, 6, 0 - voice_square_2 60, 0, 3, 1, 2, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4860, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 7, 6, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 4 - voice_noise_alt 60, 0, 0, 3, 1, 10, 0 - voice_noise_alt 60, 0, 0, 0, 2, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 3, 1, 2, 6, 0 + voice_square_2 60, 0, 3, 1, 2, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 7, 6, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 4 + voice_noise_alt 60, 0, 0, 3, 1, 10, 0 + voice_noise_alt 60, 0, 0, 0, 2, 0, 0 diff --git a/sound/voicegroups/voicegroup053.inc b/sound/voicegroups/voicegroup053.inc index 3d3312b1d2..e5f1a4d7e8 100644 --- a/sound/voicegroups/voicegroup053.inc +++ b/sound/voicegroups/voicegroup053.inc @@ -1,131 +1,131 @@ .align 2 voicegroup053:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup054.inc b/sound/voicegroups/voicegroup054.inc index 9d762c5616..ddd17ed995 100644 --- a/sound/voicegroups/voicegroup054.inc +++ b/sound/voicegroups/voicegroup054.inc @@ -1,131 +1,131 @@ .align 2 voicegroup054:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 5, 2 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 5, 2 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup055.inc b/sound/voicegroups/voicegroup055.inc index 90f10a26c8..9157030e83 100644 --- a/sound/voicegroups/voicegroup055.inc +++ b/sound/voicegroups/voicegroup055.inc @@ -1,131 +1,131 @@ .align 2 voicegroup055:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4860, 0, 7, 15, 2 - voice_square_2_alt 60, 0, 1, 1, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 2 + voice_square_2_alt 60, 0, 1, 1, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup056.inc b/sound/voicegroups/voicegroup056.inc index 5d945f3663..ec543b9b33 100644 --- a/sound/voicegroups/voicegroup056.inc +++ b/sound/voicegroups/voicegroup056.inc @@ -1,131 +1,131 @@ .align 2 voicegroup056:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup057.inc b/sound/voicegroups/voicegroup057.inc index dbdb059cee..391b7cf8bc 100644 --- a/sound/voicegroups/voicegroup057.inc +++ b/sound/voicegroups/voicegroup057.inc @@ -1,131 +1,131 @@ .align 2 voicegroup057:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 188, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 128, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_bubbles, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 1, 4, 10, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 5, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 188, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 128, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_bubbles, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 1, 4, 10, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 5, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup058.inc b/sound/voicegroups/voicegroup058.inc index 0af41d7890..56dff5f5bb 100644 --- a/sound/voicegroups/voicegroup058.inc +++ b/sound/voicegroups/voicegroup058.inc @@ -1,131 +1,131 @@ .align 2 voicegroup058:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup059.inc b/sound/voicegroups/voicegroup059.inc index 4a9fccbc5d..5a45d437d3 100644 --- a/sound/voicegroups/voicegroup059.inc +++ b/sound/voicegroups/voicegroup059.inc @@ -1,92 +1,92 @@ .align 2 voicegroup059:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 2 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 2 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 diff --git a/sound/voicegroups/voicegroup060.inc b/sound/voicegroups/voicegroup060.inc index e63327194d..448841e625 100644 --- a/sound/voicegroups/voicegroup060.inc +++ b/sound/voicegroups/voicegroup060.inc @@ -1,131 +1,131 @@ .align 2 voicegroup060:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 128, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 1, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 4, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 7, 3, 3 - voice_square_1_alt 60, 0, 0, 2, 0, 7, 3, 3 - voice_square_1_alt 60, 0, 0, 3, 2, 2, 7, 0 - voice_square_2_alt 60, 0, 1, 1, 2, 3, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 128, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 1, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 4, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 7, 3, 3 + voice_square_1_alt 60, 0, 0, 2, 0, 7, 3, 3 + voice_square_1_alt 60, 0, 0, 3, 2, 2, 7, 0 + voice_square_2_alt 60, 0, 1, 1, 2, 3, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup061.inc b/sound/voicegroups/voicegroup061.inc index 2775a7c2c5..d73730ecbc 100644 --- a/sound/voicegroups/voicegroup061.inc +++ b/sound/voicegroups/voicegroup061.inc @@ -1,131 +1,131 @@ .align 2 voicegroup061:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup062.inc b/sound/voicegroups/voicegroup062.inc index 1687aa535a..ad2e6cad7f 100644 --- a/sound/voicegroups/voicegroup062.inc +++ b/sound/voicegroups/voicegroup062.inc @@ -1,131 +1,131 @@ .align 2 voicegroup062:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup063.inc b/sound/voicegroups/voicegroup063.inc index 6461b3aa21..966ae20809 100644 --- a/sound/voicegroups/voicegroup063.inc +++ b/sound/voicegroups/voicegroup063.inc @@ -1,131 +1,131 @@ .align 2 voicegroup063:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup064.inc b/sound/voicegroups/voicegroup064.inc index 9199434001..fa56af03ea 100644 --- a/sound/voicegroups/voicegroup064.inc +++ b/sound/voicegroups/voicegroup064.inc @@ -1,131 +1,131 @@ .align 2 voicegroup064:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup065.inc b/sound/voicegroups/voicegroup065.inc index 3ec97c6b63..163bce0c7e 100644 --- a/sound/voicegroups/voicegroup065.inc +++ b/sound/voicegroups/voicegroup065.inc @@ -1,131 +1,131 @@ .align 2 voicegroup065:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup066.inc b/sound/voicegroups/voicegroup066.inc index fff4e5a672..af4a7f8410 100644 --- a/sound/voicegroups/voicegroup066.inc +++ b/sound/voicegroups/voicegroup066.inc @@ -1,131 +1,131 @@ .align 2 voicegroup066:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 3 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup067.inc b/sound/voicegroups/voicegroup067.inc index 6484d44790..ed8ccef4f8 100644 --- a/sound/voicegroups/voicegroup067.inc +++ b/sound/voicegroups/voicegroup067.inc @@ -1,131 +1,131 @@ .align 2 voicegroup067:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup068.inc b/sound/voicegroups/voicegroup068.inc index 3a7b4b034f..787ce997b7 100644 --- a/sound/voicegroups/voicegroup068.inc +++ b/sound/voicegroups/voicegroup068.inc @@ -1,131 +1,131 @@ .align 2 voicegroup068:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup069.inc b/sound/voicegroups/voicegroup069.inc index d2372c0cd7..26ea294051 100644 --- a/sound/voicegroups/voicegroup069.inc +++ b/sound/voicegroups/voicegroup069.inc @@ -1,131 +1,131 @@ .align 2 voicegroup069:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup070.inc b/sound/voicegroups/voicegroup070.inc index 965cf73a88..59a43180df 100644 --- a/sound/voicegroups/voicegroup070.inc +++ b/sound/voicegroups/voicegroup070.inc @@ -1,131 +1,131 @@ .align 2 voicegroup070:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup071.inc b/sound/voicegroups/voicegroup071.inc index 0d247bb5e5..a4cb9c721f 100644 --- a/sound/voicegroups/voicegroup071.inc +++ b/sound/voicegroups/voicegroup071.inc @@ -1,131 +1,131 @@ .align 2 voicegroup071:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup072.inc b/sound/voicegroups/voicegroup072.inc index 6c4c840ad2..50fa4e4cfa 100644 --- a/sound/voicegroups/voicegroup072.inc +++ b/sound/voicegroups/voicegroup072.inc @@ -1,131 +1,131 @@ .align 2 voicegroup072:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup073.inc b/sound/voicegroups/voicegroup073.inc index bc859f0e75..b10ab81d1a 100644 --- a/sound/voicegroups/voicegroup073.inc +++ b/sound/voicegroups/voicegroup073.inc @@ -1,131 +1,131 @@ .align 2 voicegroup073:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup074.inc b/sound/voicegroups/voicegroup074.inc index da9bbb03ce..1c3c67f8dc 100644 --- a/sound/voicegroups/voicegroup074.inc +++ b/sound/voicegroups/voicegroup074.inc @@ -1,131 +1,131 @@ .align 2 voicegroup074:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup075.inc b/sound/voicegroups/voicegroup075.inc index 908ca57074..86af71af4b 100644 --- a/sound/voicegroups/voicegroup075.inc +++ b/sound/voicegroups/voicegroup075.inc @@ -1,131 +1,131 @@ .align 2 voicegroup075:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 3, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 3, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup076.inc b/sound/voicegroups/voicegroup076.inc index c8faabe75c..378a8ff669 100644 --- a/sound/voicegroups/voicegroup076.inc +++ b/sound/voicegroups/voicegroup076.inc @@ -1,131 +1,131 @@ .align 2 voicegroup076:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup077.inc b/sound/voicegroups/voicegroup077.inc index 3bf100be53..994d9f411d 100644 --- a/sound/voicegroups/voicegroup077.inc +++ b/sound/voicegroups/voicegroup077.inc @@ -1,131 +1,131 @@ .align 2 voicegroup077:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 196 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 196 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup078.inc b/sound/voicegroups/voicegroup078.inc index 721b804309..e3ef10feb7 100644 --- a/sound/voicegroups/voicegroup078.inc +++ b/sound/voicegroups/voicegroup078.inc @@ -1,131 +1,131 @@ .align 2 voicegroup078:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 196 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 2, 0, 2 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 196 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 2, 0, 2 diff --git a/sound/voicegroups/voicegroup079.inc b/sound/voicegroups/voicegroup079.inc index 7923d4d32d..42b51faea4 100644 --- a/sound/voicegroups/voicegroup079.inc +++ b/sound/voicegroups/voicegroup079.inc @@ -1,131 +1,131 @@ .align 2 voicegroup079:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 4, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 4, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup080.inc b/sound/voicegroups/voicegroup080.inc index 4db39381d4..6d627ad92e 100644 --- a/sound/voicegroups/voicegroup080.inc +++ b/sound/voicegroups/voicegroup080.inc @@ -1,131 +1,131 @@ .align 2 voicegroup080:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup081.inc b/sound/voicegroups/voicegroup081.inc index f47f89a8d4..e9c2011e40 100644 --- a/sound/voicegroups/voicegroup081.inc +++ b/sound/voicegroups/voicegroup081.inc @@ -1,5 +1,5 @@ .align 2 voicegroup081:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup005, KeySplitTable1 diff --git a/sound/voicegroups/voicegroup082.inc b/sound/voicegroups/voicegroup082.inc index 676900e7f7..b6b5506f1a 100644 --- a/sound/voicegroups/voicegroup082.inc +++ b/sound/voicegroups/voicegroup082.inc @@ -1,131 +1,131 @@ .align 2 voicegroup082:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 4, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 4, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup083.inc b/sound/voicegroups/voicegroup083.inc index 7a345fdb1b..4f2fcd809f 100644 --- a/sound/voicegroups/voicegroup083.inc +++ b/sound/voicegroups/voicegroup083.inc @@ -1,87 +1,87 @@ .align 2 voicegroup083:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 6, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 2, 6, 1 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 6, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 6, 1 diff --git a/sound/voicegroups/voicegroup084.inc b/sound/voicegroups/voicegroup084.inc index 8b30d81255..510b37c23a 100644 --- a/sound/voicegroups/voicegroup084.inc +++ b/sound/voicegroups/voicegroup084.inc @@ -1,131 +1,131 @@ .align 2 voicegroup084:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup085.inc b/sound/voicegroups/voicegroup085.inc index 0cd2dcc2f7..6260fb198a 100644 --- a/sound/voicegroups/voicegroup085.inc +++ b/sound/voicegroups/voicegroup085.inc @@ -1,131 +1,131 @@ .align 2 voicegroup085:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 1, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 13, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 1, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 13, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup086.inc b/sound/voicegroups/voicegroup086.inc index 57069bf8af..d5298f9b03 100644 --- a/sound/voicegroups/voicegroup086.inc +++ b/sound/voicegroups/voicegroup086.inc @@ -1,131 +1,131 @@ .align 2 voicegroup086:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup087.inc b/sound/voicegroups/voicegroup087.inc index 59e24b7cce..1ccb69ea55 100644 --- a/sound/voicegroups/voicegroup087.inc +++ b/sound/voicegroups/voicegroup087.inc @@ -1,131 +1,131 @@ .align 2 voicegroup087:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup088.inc b/sound/voicegroups/voicegroup088.inc index 77fe56d2d8..8f6f216884 100644 --- a/sound/voicegroups/voicegroup088.inc +++ b/sound/voicegroups/voicegroup088.inc @@ -1,131 +1,131 @@ .align 2 voicegroup088:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 6, 2 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 6, 2 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup089.inc b/sound/voicegroups/voicegroup089.inc index 531e5f543a..4b5e7d57bd 100644 --- a/sound/voicegroups/voicegroup089.inc +++ b/sound/voicegroups/voicegroup089.inc @@ -1,131 +1,131 @@ .align 2 voicegroup089:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 3 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 3 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup090.inc b/sound/voicegroups/voicegroup090.inc index dd3301845f..4039ad8d14 100644 --- a/sound/voicegroups/voicegroup090.inc +++ b/sound/voicegroups/voicegroup090.inc @@ -1,131 +1,131 @@ .align 2 voicegroup090:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 2, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 2, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup091.inc b/sound/voicegroups/voicegroup091.inc index 59230282e5..28a64ab488 100644 --- a/sound/voicegroups/voicegroup091.inc +++ b/sound/voicegroups/voicegroup091.inc @@ -1,131 +1,131 @@ .align 2 voicegroup091:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 5, 2 - voice_square_2_alt 60, 0, 2, 0, 1, 5, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 2, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 5, 2 + voice_square_2_alt 60, 0, 2, 0, 1, 5, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup092.inc b/sound/voicegroups/voicegroup092.inc index 0fff2f1214..90e2858175 100644 --- a/sound/voicegroups/voicegroup092.inc +++ b/sound/voicegroups/voicegroup092.inc @@ -1,131 +1,131 @@ .align 2 voicegroup092:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup093.inc b/sound/voicegroups/voicegroup093.inc index 2d1b721daf..8cea357335 100644 --- a/sound/voicegroups/voicegroup093.inc +++ b/sound/voicegroups/voicegroup093.inc @@ -1,131 +1,131 @@ .align 2 voicegroup093:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup094.inc b/sound/voicegroups/voicegroup094.inc index 72bc1098c4..b52e958926 100644 --- a/sound/voicegroups/voicegroup094.inc +++ b/sound/voicegroups/voicegroup094.inc @@ -1,131 +1,131 @@ .align 2 voicegroup094:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup095.inc b/sound/voicegroups/voicegroup095.inc index 83afb58b13..96b531f8ed 100644 --- a/sound/voicegroups/voicegroup095.inc +++ b/sound/voicegroups/voicegroup095.inc @@ -1,131 +1,131 @@ .align 2 voicegroup095:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 3 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup096.inc b/sound/voicegroups/voicegroup096.inc index bf0bd6badb..b0cb653caf 100644 --- a/sound/voicegroups/voicegroup096.inc +++ b/sound/voicegroups/voicegroup096.inc @@ -1,131 +1,131 @@ .align 2 voicegroup096:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup097.inc b/sound/voicegroups/voicegroup097.inc index 8c4cea3b7b..fb0542dac6 100644 --- a/sound/voicegroups/voicegroup097.inc +++ b/sound/voicegroups/voicegroup097.inc @@ -1,131 +1,131 @@ .align 2 voicegroup097:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 249 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 249 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup098.inc b/sound/voicegroups/voicegroup098.inc index e49d32b427..3a927368bc 100644 --- a/sound/voicegroups/voicegroup098.inc +++ b/sound/voicegroups/voicegroup098.inc @@ -1,131 +1,131 @@ .align 2 voicegroup098:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_873ECD8, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_10, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup099.inc b/sound/voicegroups/voicegroup099.inc index 60b93f6156..e750f95831 100644 --- a/sound/voicegroups/voicegroup099.inc +++ b/sound/voicegroups/voicegroup099.inc @@ -1,131 +1,131 @@ .align 2 voicegroup099:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 7, 0 - voice_square_1_alt 60, 0, 0, 1, 2, 1, 5, 0 - voice_square_2_alt 60, 0, 1, 2, 1, 5, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 + voice_square_1_alt 60, 0, 0, 1, 2, 1, 5, 0 + voice_square_2_alt 60, 0, 1, 2, 1, 5, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup100.inc b/sound/voicegroups/voicegroup100.inc index f096a9d8a4..577d05c354 100644 --- a/sound/voicegroups/voicegroup100.inc +++ b/sound/voicegroups/voicegroup100.inc @@ -1,131 +1,131 @@ .align 2 voicegroup100:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 2, 1, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 1, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 2, 1, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 1, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup101.inc b/sound/voicegroups/voicegroup101.inc index 53f34ae295..768c18dea2 100644 --- a/sound/voicegroups/voicegroup101.inc +++ b/sound/voicegroups/voicegroup101.inc @@ -1,113 +1,113 @@ .align 2 voicegroup101:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 5, 2, 4 - voice_square_2_alt 60, 0, 1, 1, 5, 2, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 1, 1, 6, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 4, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 1, 4, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 1, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 1, 1, 6, 1 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 5, 2, 4 + voice_square_2_alt 60, 0, 1, 1, 5, 2, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 1, 1, 6, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 4, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 1, 4, 6, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 1, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 1, 1, 6, 1 diff --git a/sound/voicegroups/voicegroup102.inc b/sound/voicegroups/voicegroup102.inc index 2f1fbb6671..197ed891be 100644 --- a/sound/voicegroups/voicegroup102.inc +++ b/sound/voicegroups/voicegroup102.inc @@ -1,85 +1,85 @@ .align 2 voicegroup102:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 248 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 6, 0, 6 - voice_square_2_alt 60, 0, 2, 0, 6, 0, 6 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 248 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 6, 0, 6 + voice_square_2_alt 60, 0, 2, 0, 6, 0, 6 diff --git a/sound/voicegroups/voicegroup103.inc b/sound/voicegroups/voicegroup103.inc index 784b39ee22..cc743edb22 100644 --- a/sound/voicegroups/voicegroup103.inc +++ b/sound/voicegroups/voicegroup103.inc @@ -1,131 +1,131 @@ .align 2 voicegroup103:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 0, 10, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 0, 10, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 1 diff --git a/sound/voicegroups/voicegroup104.inc b/sound/voicegroups/voicegroup104.inc index bd59914635..c1b623918b 100644 --- a/sound/voicegroups/voicegroup104.inc +++ b/sound/voicegroups/voicegroup104.inc @@ -1,111 +1,111 @@ .align 2 voicegroup104:: - voice_keysplit_all voicegroup003 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unknown_koto_high, 255, 0, 206, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_shakuhachi, 255, 0, 255, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 2, 0, 12, 5 - voice_square_2_alt 60, 0, 0, 0, 0, 10, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 2, 0, 12, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unknown_koto_low, 255, 0, 206, 242 + voice_keysplit_all voicegroup003 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_koto_high, 255, 0, 206, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_shakuhachi, 255, 0, 255, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 2, 0, 12, 5 + voice_square_2_alt 60, 0, 0, 0, 0, 10, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 2, 0, 12, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_koto_low, 255, 0, 206, 242 diff --git a/sound/voicegroups/voicegroup105.inc b/sound/voicegroups/voicegroup105.inc index 3355294178..a1a1bc2d61 100644 --- a/sound/voicegroups/voicegroup105.inc +++ b/sound/voicegroups/voicegroup105.inc @@ -1,86 +1,86 @@ .align 2 voicegroup105:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 4 - voice_square_2_alt 60, 0, 2, 0, 2, 9, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 4 + voice_square_2_alt 60, 0, 2, 0, 2, 9, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 diff --git a/sound/voicegroups/voicegroup106.inc b/sound/voicegroups/voicegroup106.inc index b20862853f..1a1125be8a 100644 --- a/sound/voicegroups/voicegroup106.inc +++ b/sound/voicegroups/voicegroup106.inc @@ -1,131 +1,131 @@ .align 2 voicegroup106:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 38, 128, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 38, 128, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup107.inc b/sound/voicegroups/voicegroup107.inc index 45f1cfdc9f..c43a518ec7 100644 --- a/sound/voicegroups/voicegroup107.inc +++ b/sound/voicegroups/voicegroup107.inc @@ -1,131 +1,131 @@ .align 2 voicegroup107:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup108.inc b/sound/voicegroups/voicegroup108.inc index 1821dd6a1e..a92ee43c6a 100644 --- a/sound/voicegroups/voicegroup108.inc +++ b/sound/voicegroups/voicegroup108.inc @@ -1,131 +1,131 @@ .align 2 voicegroup108:: - voice_keysplit_all voicegroup004 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_heart_of_asia_gamelan, 255, 188, 139, 239 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 13, 4 - voice_square_2_alt 60, 0, 0, 0, 0, 9, 2 - voice_square_2_alt 60, 0, 1, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4860, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup004 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_heart_of_asia_gamelan, 255, 188, 139, 239 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 13, 4 + voice_square_2_alt 60, 0, 0, 0, 0, 9, 2 + voice_square_2_alt 60, 0, 1, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup109.inc b/sound/voicegroups/voicegroup109.inc index 984367a4e9..a999143737 100644 --- a/sound/voicegroups/voicegroup109.inc +++ b/sound/voicegroups/voicegroup109.inc @@ -1,86 +1,86 @@ .align 2 voicegroup109:: - voice_keysplit_all voicegroup004 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_church_organ3_low, 255, 76, 154, 188 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_church_organ3_high, 255, 76, 154, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 13, 1 - voice_square_2_alt 60, 0, 0, 0, 0, 12, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 + voice_keysplit_all voicegroup004 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_church_organ3_low, 255, 76, 154, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_church_organ3_high, 255, 76, 154, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 13, 1 + voice_square_2_alt 60, 0, 0, 0, 0, 12, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup110.inc b/sound/voicegroups/voicegroup110.inc index dcd51d9eb1..25b6fdaae0 100644 --- a/sound/voicegroups/voicegroup110.inc +++ b/sound/voicegroups/voicegroup110.inc @@ -1,131 +1,131 @@ .align 2 voicegroup110:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 0, 10, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 0, 10, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 1 diff --git a/sound/voicegroups/voicegroup111.inc b/sound/voicegroups/voicegroup111.inc index f05cda8069..27b418f462 100644 --- a/sound/voicegroups/voicegroup111.inc +++ b/sound/voicegroups/voicegroup111.inc @@ -1,131 +1,131 @@ .align 2 voicegroup111:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 226 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 195 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 195 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 195 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 2, 6, 1 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 226 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 195 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 195 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 195 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 2, 6, 1 diff --git a/sound/voicegroups/voicegroup112.inc b/sound/voicegroups/voicegroup112.inc index bd58c332d7..9cb2f415a9 100644 --- a/sound/voicegroups/voicegroup112.inc +++ b/sound/voicegroups/voicegroup112.inc @@ -1,131 +1,131 @@ .align 2 voicegroup112:: - voice_keysplit_all voicegroup003 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4970, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 128, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 128, 165, 128, 188 - voice_directsound 60, 0, DirectSoundWaveData_unknown_female_voice, 128, 165, 128, 204 - voice_directsound 60, 0, DirectSoundWaveData_unused_unknown_male_voice, 128, 165, 128, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 0 - voice_square_2_alt 60, 0, 1, 0, 0, 6, 0 - voice_square_2_alt 60, 0, 3, 0, 0, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 7, 10, 1 - voice_noise_alt 60, 0, 0, 0, 2, 6, 1 + voice_keysplit_all voicegroup003 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 128, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 128, 165, 128, 188 + voice_directsound 60, 0, DirectSoundWaveData_unknown_female_voice, 128, 165, 128, 204 + voice_directsound 60, 0, DirectSoundWaveData_unused_unknown_male_voice, 128, 165, 128, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 0 + voice_square_2_alt 60, 0, 1, 0, 0, 6, 0 + voice_square_2_alt 60, 0, 3, 0, 0, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 7, 10, 1 + voice_noise_alt 60, 0, 0, 0, 2, 6, 1 diff --git a/sound/voicegroups/voicegroup113.inc b/sound/voicegroups/voicegroup113.inc index 309f1f39eb..0fa279c8a6 100644 --- a/sound/voicegroups/voicegroup113.inc +++ b/sound/voicegroups/voicegroup113.inc @@ -1,131 +1,131 @@ .align 2 voicegroup113:: - voice_keysplit_all voicegroup002 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4990, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B49B0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B49A0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4970, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4980, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48B0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48C0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48D0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48E0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48F0, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 195 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 7, 7, 0 - voice_square_2_alt 60, 0, 2, 0, 7, 7, 0 - voice_square_2_alt 60, 0, 1, 0, 7, 7, 0 - voice_square_2_alt 60, 0, 0, 0, 7, 7, 0 - voice_square_2_alt 60, 0, 3, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 7, 7, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 7, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 2, 6, 1 + voice_keysplit_all voicegroup002 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_23, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_25, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_24, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_22, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_9, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_10, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_11, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_12, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_13, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 195 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 7, 7, 0 + voice_square_2_alt 60, 0, 2, 0, 7, 7, 0 + voice_square_2_alt 60, 0, 1, 0, 7, 7, 0 + voice_square_2_alt 60, 0, 0, 0, 7, 7, 0 + voice_square_2_alt 60, 0, 3, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 7, 7, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 7, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 2, 6, 1 diff --git a/sound/voicegroups/voicegroup114.inc b/sound/voicegroups/voicegroup114.inc index 03ac0cdcfe..cb078d24c3 100644 --- a/sound/voicegroups/voicegroup114.inc +++ b/sound/voicegroups/voicegroup114.inc @@ -1,131 +1,131 @@ .align 2 voicegroup114:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 diff --git a/sound/voicegroups/voicegroup115.inc b/sound/voicegroups/voicegroup115.inc index bb9c4f4ba9..eb4f52b878 100644 --- a/sound/voicegroups/voicegroup115.inc +++ b/sound/voicegroups/voicegroup115.inc @@ -1,131 +1,131 @@ .align 2 voicegroup115:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 128, 249, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 188, 103, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 165, 154, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 198 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 146 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 165, 180, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 6, 0 - voice_square_2_alt 60, 0, 3, 0, 3, 6, 2 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4970, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 1, 9, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 2 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 128, 249, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 188, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 165, 154, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 198 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 146 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 165, 180, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 6, 0 + voice_square_2_alt 60, 0, 3, 0, 3, 6, 2 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 1, 9, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 2 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup116.inc b/sound/voicegroups/voicegroup116.inc index 028bbc32bd..a86a87f5d1 100644 --- a/sound/voicegroups/voicegroup116.inc +++ b/sound/voicegroups/voicegroup116.inc @@ -1,131 +1,131 @@ .align 2 voicegroup116:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 190, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 - voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4970, 0, 3, 6, 5 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4970, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 190, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 + voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 3, 6, 5 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 diff --git a/sound/voicegroups/voicegroup117.inc b/sound/voicegroups/voicegroup117.inc index a149f727fa..3a86ec4f58 100644 --- a/sound/voicegroups/voicegroup117.inc +++ b/sound/voicegroups/voicegroup117.inc @@ -1,85 +1,85 @@ .align 2 voicegroup117:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 1, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 1, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 1, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 1, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 diff --git a/sound/voicegroups/voicegroup118.inc b/sound/voicegroups/voicegroup118.inc index a4d6263309..89e66b21d2 100644 --- a/sound/voicegroups/voicegroup118.inc +++ b/sound/voicegroups/voicegroup118.inc @@ -1,94 +1,94 @@ .align 2 voicegroup118:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 0, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 0, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 250, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 0, 255, 127 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 0, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 0, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 250, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 0, 255, 127 diff --git a/sound/voicegroups/voicegroup119.inc b/sound/voicegroups/voicegroup119.inc index 91051a6729..8b7fe24c79 100644 --- a/sound/voicegroups/voicegroup119.inc +++ b/sound/voicegroups/voicegroup119.inc @@ -1,94 +1,94 @@ .align 2 voicegroup119:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 0, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 0, 0, 2, 4, 1 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 0, DirectSoundWaveData_sc88pro_timpani_with_snare, 255, 246, 0, 226 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_2 60, 0, 1, 0, 1, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 0, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 0, 0, 2, 4, 1 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 0, DirectSoundWaveData_sc88pro_timpani_with_snare, 255, 246, 0, 226 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_2 60, 0, 1, 0, 1, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 diff --git a/sound/voicegroups/voicegroup120.inc b/sound/voicegroups/voicegroup120.inc index 5c65be3382..2c104fb10b 100644 --- a/sound/voicegroups/voicegroup120.inc +++ b/sound/voicegroups/voicegroup120.inc @@ -1,94 +1,94 @@ .align 2 voicegroup120:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 2, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 2, 6, 1 - voice_square_2 60, 0, 3, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 3, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 7, 1 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 2, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 2, 6, 1 + voice_square_2 60, 0, 3, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 3, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 7, 1 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 diff --git a/sound/voicegroups/voicegroup121.inc b/sound/voicegroups/voicegroup121.inc index d50d9eea3d..f09ddd7741 100644 --- a/sound/voicegroups/voicegroup121.inc +++ b/sound/voicegroups/voicegroup121.inc @@ -1,89 +1,89 @@ .align 2 voicegroup121:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_2 60, 0, 0, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 0, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 0, 0, 0, 7, 1 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_2 60, 0, 0, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 0, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 0, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup122.inc b/sound/voicegroups/voicegroup122.inc index a2241b6d21..65356a3d17 100644 --- a/sound/voicegroups/voicegroup122.inc +++ b/sound/voicegroups/voicegroup122.inc @@ -1,87 +1,87 @@ .align 2 voicegroup122:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 1, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 1, 0, 1, 6, 1 - voice_square_2 60, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 165, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 3, 0, 1, 9, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 9, 1 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 1, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 1, 0, 1, 6, 1 + voice_square_2 60, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 165, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 3, 0, 1, 9, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 9, 1 diff --git a/sound/voicegroups/voicegroup123.inc b/sound/voicegroups/voicegroup123.inc index cb2e39045c..6178994cca 100644 --- a/sound/voicegroups/voicegroup123.inc +++ b/sound/voicegroups/voicegroup123.inc @@ -1,131 +1,131 @@ .align 2 voicegroup123:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 diff --git a/sound/voicegroups/voicegroup124.inc b/sound/voicegroups/voicegroup124.inc index c7f9c475a3..274d76dcd1 100644 --- a/sound/voicegroups/voicegroup124.inc +++ b/sound/voicegroups/voicegroup124.inc @@ -1,90 +1,90 @@ .align 2 voicegroup124:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_2 60, 0, 3, 0, 2, 7, 1 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_2 60, 0, 3, 0, 2, 7, 1 diff --git a/sound/voicegroups/voicegroup125.inc b/sound/voicegroups/voicegroup125.inc index e5f2ddf3eb..644002abf7 100644 --- a/sound/voicegroups/voicegroup125.inc +++ b/sound/voicegroups/voicegroup125.inc @@ -1,87 +1,87 @@ .align 2 voicegroup125:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup126.inc b/sound/voicegroups/voicegroup126.inc index 53ff6eb193..51959b4f1e 100644 --- a/sound/voicegroups/voicegroup126.inc +++ b/sound/voicegroups/voicegroup126.inc @@ -1,131 +1,131 @@ .align 2 voicegroup126:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 0, 1, 1, 7, 1 - voice_square_1 60, 0, 0, 0, 1, 1, 7, 1 - voice_square_1 60, 0, 0, 0, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 1, 1, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 3, 1, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 216 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 0, 1, 1, 7, 1 + voice_square_1 60, 0, 0, 0, 1, 1, 7, 1 + voice_square_1 60, 0, 0, 0, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 1, 1, 6, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 3, 1, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 216 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 diff --git a/sound/voicegroups/voicegroup127.inc b/sound/voicegroups/voicegroup127.inc index c812157da4..476d3f48f6 100644 --- a/sound/voicegroups/voicegroup127.inc +++ b/sound/voicegroups/voicegroup127.inc @@ -1,131 +1,131 @@ .align 2 voicegroup127:: - voice_directsound 60, 0, DirectSoundWaveData_unknown_synth_snare, 255, 249, 103, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 0, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 4, 0, 1 - voice_square_1_alt 60, 0, 44, 2, 0, 4, 0, 0 - voice_square_1_alt 60, 0, 38, 0, 0, 4, 0, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 7, 0, 0 - voice_square_1_alt 60, 0, 0, 2, 2, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 2, 0, 15, 0 - voice_square_1_alt 60, 0, 23, 1, 0, 1, 9, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 165 - voice_square_1_alt 60, 0, 0, 2, 0, 6, 0, 1 - voice_square_1_alt 60, 0, 36, 0, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 0, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 0, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 46, 2, 0, 4, 0, 0 - voice_square_1_alt 60, 0, 38, 2, 0, 4, 0, 0 - voice_square_1_alt 60, 0, 119, 2, 0, 0, 15, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 1 - voice_square_1_alt 60, 0, 106, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 23, 2, 0, 1, 9, 0 - voice_square_1_alt 60, 0, 21, 2, 0, 1, 9, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 15, 1 - voice_square_1_alt 60, 0, 47, 2, 0, 2, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise 60, 0, 0, 0, 7, 15, 0 - voice_noise 60, 0, 0, 2, 7, 15, 0 - voice_noise_alt 60, 0, 0, 2, 0, 15, 0 - voice_noise_alt 60, 0, 1, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 3, 0, 0 - voice_noise_alt 60, 0, 0, 0, 2, 0, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + voice_directsound 60, 0, DirectSoundWaveData_unknown_synth_snare, 255, 249, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 0, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 4, 0, 1 + voice_square_1_alt 60, 0, 44, 2, 0, 4, 0, 0 + voice_square_1_alt 60, 0, 38, 0, 0, 4, 0, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 7, 0, 0 + voice_square_1_alt 60, 0, 0, 2, 2, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 2, 0, 15, 0 + voice_square_1_alt 60, 0, 23, 1, 0, 1, 9, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 165 + voice_square_1_alt 60, 0, 0, 2, 0, 6, 0, 1 + voice_square_1_alt 60, 0, 36, 0, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 0, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 0, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 46, 2, 0, 4, 0, 0 + voice_square_1_alt 60, 0, 38, 2, 0, 4, 0, 0 + voice_square_1_alt 60, 0, 119, 2, 0, 0, 15, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 1 + voice_square_1_alt 60, 0, 106, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 23, 2, 0, 1, 9, 0 + voice_square_1_alt 60, 0, 21, 2, 0, 1, 9, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 15, 1 + voice_square_1_alt 60, 0, 47, 2, 0, 2, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise 60, 0, 0, 0, 7, 15, 0 + voice_noise 60, 0, 0, 2, 7, 15, 0 + voice_noise_alt 60, 0, 0, 2, 0, 15, 0 + voice_noise_alt 60, 0, 1, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 3, 0, 0 + voice_noise_alt 60, 0, 0, 0, 2, 0, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 diff --git a/sound/voicegroups/voicegroup128.inc b/sound/voicegroups/voicegroup128.inc index 78e0bf43af..69b52d29d6 100644 --- a/sound/voicegroups/voicegroup128.inc +++ b/sound/voicegroups/voicegroup128.inc @@ -1,131 +1,131 @@ .align 2 voicegroup128:: - voice_directsound_no_resample 60, 0, DirectSoundWaveData_bicycle_bell, 255, 249, 0, 165 - voice_directsound_alt 60, 0, DirectSoundWaveData_bicycle_bell, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_unknown_synth_snare, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 242, 0, 127 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 - voice_noise_alt 60, 0, 1, 0, 1, 0, 1 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 255, 165 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 1 - voice_directsound 60, 0, DirectSoundWaveData_8725A2C, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_872762C, 255, 0, 255, 127 - voice_noise_alt 60, 0, 1, 0, 2, 0, 0 - voice_square_1 60, 0, 103, 3, 2, 7, 0, 0 - voice_square_2 60, 0, 3, 2, 7, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 127 - voice_directsound 60, 0, DirectSoundWaveData_872921C, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 204, 0, 127 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 1 - voice_directsound 60, 0, DirectSoundWaveData_872A5D0, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 - voice_square_1 60, 0, 103, 0, 0, 7, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_wind, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_bubbles, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 127 - voice_noise_alt 60, 0, 0, 0, 7, 15, 1 - voice_directsound 60, 0, DirectSoundWaveData_872EEA8, 255, 0, 255, 127 - voice_noise_alt 60, 0, 1, 0, 7, 15, 1 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 246, 0, 127 - voice_directsound 60, 0, DirectSoundWaveData_87301B0, 255, 0, 255, 127 - voice_square_1_alt 60, 0, 19, 2, 0, 2, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 0, 255, 127 - voice_square_1 60, 0, 103, 0, 0, 0, 15, 0 - voice_directsound_alt 60, 0, DirectSoundWaveData_87301B0, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_8734298, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 242, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_87364A8, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_directsound 60, 0, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_87385E4, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 0, 4, 6, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 13, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 13, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 252, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 0, 4, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 188, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 226, 0, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 26, 0, 255, 127 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 252, 0, 127 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 127, 0, 127 - voice_noise_alt 60, 0, 0, 1, 6, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_873ECD8, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_72, 11, 242, 0, 127 - voice_square_1_alt 60, 0, 0, 2, 4, 6, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_8740818, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc55_tom, 255, 0, 255, 165 - voice_noise_alt 60, 0, 0, 5, 7, 15, 1 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 128, 242, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_72, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 0, 1, 5, 0, 0 - voice_noise_alt 60, 0, 0, 6, 6, 0, 1 - voice_noise_alt 60, 0, 0, 3, 6, 0, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 15, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_87424B0, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_87430C0, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_8743C50, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_87446EC, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_8745034, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_8745A7C, 255, 0, 255, 165 - + voice_directsound_no_resample 60, 0, DirectSoundWaveData_bicycle_bell, 255, 249, 0, 165 + voice_directsound_alt 60, 0, DirectSoundWaveData_bicycle_bell, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_synth_snare, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 242, 0, 127 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + voice_noise_alt 60, 0, 1, 0, 1, 0, 1 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 255, 165 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 1 + voice_directsound 60, 0, DirectSoundWaveData_unknown_1, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_2, 255, 0, 255, 127 + voice_noise_alt 60, 0, 1, 0, 2, 0, 0 + voice_square_1 60, 0, 103, 3, 2, 7, 0, 0 + voice_square_2 60, 0, 3, 2, 7, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_3, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 204, 0, 127 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 1 + voice_directsound 60, 0, DirectSoundWaveData_unknown_4, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 + voice_square_1 60, 0, 103, 0, 0, 7, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_wind, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_bubbles, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 127 + voice_noise_alt 60, 0, 0, 0, 7, 15, 1 + voice_directsound 60, 0, DirectSoundWaveData_unknown_5, 255, 0, 255, 127 + voice_noise_alt 60, 0, 1, 0, 7, 15, 1 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 246, 0, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_6, 255, 0, 255, 127 + voice_square_1_alt 60, 0, 19, 2, 0, 2, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 0, 255, 127 + voice_square_1 60, 0, 103, 0, 0, 0, 15, 0 + voice_directsound_alt 60, 0, DirectSoundWaveData_unknown_6, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_7, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 242, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_8, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_directsound 60, 0, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_unknown_9, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 0, 4, 6, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 13, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 13, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 252, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 0, 4, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 188, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 226, 0, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 26, 0, 255, 127 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 252, 0, 127 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 127, 0, 127 + voice_noise_alt 60, 0, 0, 1, 6, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_10, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_72, 11, 242, 0, 127 + voice_square_1_alt 60, 0, 0, 2, 4, 6, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_11, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc55_tom, 255, 0, 255, 165 + voice_noise_alt 60, 0, 0, 5, 7, 15, 1 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 128, 242, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_72, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 0, 1, 5, 0, 0 + voice_noise_alt 60, 0, 0, 6, 6, 0, 1 + voice_noise_alt 60, 0, 0, 3, 6, 0, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 15, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_12, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_13, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_14, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_15, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_16, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_17, 255, 0, 255, 165 + diff --git a/sound/voicegroups/voicegroup129.inc b/sound/voicegroups/voicegroup129.inc index 89ba4a59b7..8e136bdf48 100644 --- a/sound/voicegroups/voicegroup129.inc +++ b/sound/voicegroups/voicegroup129.inc @@ -1,131 +1,131 @@ .align 2 voicegroup129:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 226, 25, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_8725A2C, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 - voice_directsound 60, 0, DirectSoundWaveData_sd90_open_triangle, 255, 204, 128, 249 - voice_directsound 60, 0, DirectSoundWaveData_register_noise, 255, 0, 255, 76 - voice_directsound 60, 0, DirectSoundWaveData_88D6978, 255, 0, 206, 204 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 206, 38 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 206, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 252, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 204, 0, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 4 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 10, 3 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 15, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 6 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 29, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 22, 2, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 2 - voice_noise_alt 60, 0, 0, 0, 4, 3, 1 - voice_noise_alt 60, 0, 0, 0, 1, 12, 0 - voice_noise_alt 60, 0, 1, 0, 1, 9, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 226, 25, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_1, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound 60, 0, DirectSoundWaveData_sd90_open_triangle, 255, 204, 128, 249 + voice_directsound 60, 0, DirectSoundWaveData_register_noise, 255, 0, 255, 76 + voice_directsound 60, 0, DirectSoundWaveData_unknown_18, 255, 0, 206, 204 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 206, 38 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 206, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 252, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 204, 0, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 4 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 10, 3 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 15, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 6 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 29, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 22, 2, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 2 + voice_noise_alt 60, 0, 0, 0, 4, 3, 1 + voice_noise_alt 60, 0, 0, 0, 1, 12, 0 + voice_noise_alt 60, 0, 1, 0, 1, 9, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 diff --git a/sound/voicegroups/voicegroup130.inc b/sound/voicegroups/voicegroup130.inc index 63e42a489f..7044bb38e4 100644 --- a/sound/voicegroups/voicegroup130.inc +++ b/sound/voicegroups/voicegroup130.inc @@ -1,182 +1,182 @@ .align 2 voicegroup130:: - voice_directsound 60, 0, DirectSoundWaveData_88DBBC0, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DC220, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DC704, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DD054, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DDAC4, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DDDE4, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DEA6C, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DF08C, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DF414, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E01F8, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E0B68, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E0F04, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E16B8, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E2414, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E2658, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E3498, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E3DEC, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E4140, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E4774, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E53E0, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E5978, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E647C, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E6A80, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E6C78, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E75DC, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E8568, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E8BA0, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E9674, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EA5B8, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EAB30, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EB97C, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EC884, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88ED358, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EDEEC, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EE8C4, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EEF04, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EF9E4, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F0020, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F0738, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F1074, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F1830, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F1D94, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F2B08, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F2F84, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F3470, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F3C38, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F4834, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F4BAC, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F5368, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F5FCC, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F6498, 255, 0, 255, 0 - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion_duplicate, 255, 249, 25, 248 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_1, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_2, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_3, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_4, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_5, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_6, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_7, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_8, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_9, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_10, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_11, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_12, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_13, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_14, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_15, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_16, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_17, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_18, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_19, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_20, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_21, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_22, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_23, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_24, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_25, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_26, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_27, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_28, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_29, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_30, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_31, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_32, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_33, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_34, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_35, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_36, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_37, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_38, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_39, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_40, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_41, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_42, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_43, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_44, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_45, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_46, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_47, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_48, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_49, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_50, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_51, 255, 0, 255, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion_duplicate, 255, 249, 25, 248 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 diff --git a/sound/voicegroups/voicegroup131.inc b/sound/voicegroups/voicegroup131.inc index 3b0377b5e7..029afa5be5 100644 --- a/sound/voicegroups/voicegroup131.inc +++ b/sound/voicegroups/voicegroup131.inc @@ -1,131 +1,131 @@ .align 2 voicegroup131:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 128, 204, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 5 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 128, 204, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 5 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 diff --git a/sound/voicegroups/voicegroup132.inc b/sound/voicegroups/voicegroup132.inc index 92e565468e..2806916bca 100644 --- a/sound/voicegroups/voicegroup132.inc +++ b/sound/voicegroups/voicegroup132.inc @@ -1,131 +1,131 @@ .align 2 voicegroup132:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 118, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 2 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 4, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 4, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 4, 2, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 8, 1 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 118, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 235 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 2 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 4, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 4, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 4, 2, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 8, 1 diff --git a/sound/voicegroups/voicegroup133.inc b/sound/voicegroups/voicegroup133.inc index ff98e8ff2c..be70f6ae33 100644 --- a/sound/voicegroups/voicegroup133.inc +++ b/sound/voicegroups/voicegroup133.inc @@ -1,131 +1,131 @@ .align 2 voicegroup133:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 9, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 8, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 9, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 8, 1 diff --git a/sound/voicegroups/voicegroup134.inc b/sound/voicegroups/voicegroup134.inc index 470a6613a3..1bc01fed07 100644 --- a/sound/voicegroups/voicegroup134.inc +++ b/sound/voicegroups/voicegroup134.inc @@ -1,93 +1,93 @@ .align 2 voicegroup134:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup135.inc b/sound/voicegroups/voicegroup135.inc index 48ed76c036..2ea22bf969 100644 --- a/sound/voicegroups/voicegroup135.inc +++ b/sound/voicegroups/voicegroup135.inc @@ -1,86 +1,86 @@ .align 2 voicegroup135:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 85, 137, 180, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 9, 0 - voice_square_2_alt 60, 0, 2, 0, 0, 9, 0 - voice_square_1_alt 60, 0, 0, 0, 1, 2, 6, 0 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 85, 137, 180, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 9, 0 + voice_square_2_alt 60, 0, 2, 0, 0, 9, 0 + voice_square_1_alt 60, 0, 0, 0, 1, 2, 6, 0 diff --git a/sound/voicegroups/voicegroup136.inc b/sound/voicegroups/voicegroup136.inc index 3b053ce2d9..0428c8c004 100644 --- a/sound/voicegroups/voicegroup136.inc +++ b/sound/voicegroups/voicegroup136.inc @@ -1,131 +1,131 @@ .align 2 voicegroup136:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 5, 0, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 5, 0, 0 - voice_square_1_alt 60, 0, 0, 2, 2, 4, 10, 0 - voice_square_2_alt 60, 0, 0, 0, 5, 0, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 5, 0, 0 - voice_square_2_alt 60, 0, 3, 2, 4, 10, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 1, 5, 0, 3 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 1, 5, 0, 3 - voice_square_2_alt 60, 0, 1, 0, 1, 10, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 10, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 5, 0, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 5, 0, 0 + voice_square_1_alt 60, 0, 0, 2, 2, 4, 10, 0 + voice_square_2_alt 60, 0, 0, 0, 5, 0, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 5, 0, 0 + voice_square_2_alt 60, 0, 3, 2, 4, 10, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 1, 5, 0, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 1, 5, 0, 3 + voice_square_2_alt 60, 0, 1, 0, 1, 10, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 10, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup137.inc b/sound/voicegroups/voicegroup137.inc index 8eb7910397..cf7422cd23 100644 --- a/sound/voicegroups/voicegroup137.inc +++ b/sound/voicegroups/voicegroup137.inc @@ -1,131 +1,131 @@ .align 2 voicegroup137:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 165, 180, 165 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 137, 154, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 204, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 - voice_square_2_alt 60, 0, 1, 1, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 2, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 165, 180, 165 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 137, 154, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 204, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 + voice_square_2_alt 60, 0, 1, 1, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 2, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 diff --git a/sound/voicegroups/voicegroup138.inc b/sound/voicegroups/voicegroup138.inc index 0439e92f5f..227538f5dc 100644 --- a/sound/voicegroups/voicegroup138.inc +++ b/sound/voicegroups/voicegroup138.inc @@ -1,131 +1,131 @@ .align 2 voicegroup138:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 3 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 3 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup139.inc b/sound/voicegroups/voicegroup139.inc index 5d22231360..e8969de570 100644 --- a/sound/voicegroups/voicegroup139.inc +++ b/sound/voicegroups/voicegroup139.inc @@ -1,131 +1,131 @@ .align 2 voicegroup139:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 127, 103, 201 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 37, 127, 77, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 127, 103, 201 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 37, 127, 77, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 diff --git a/sound/voicegroups/voicegroup140.inc b/sound/voicegroups/voicegroup140.inc index 7dfc37f745..8206cca1d2 100644 --- a/sound/voicegroups/voicegroup140.inc +++ b/sound/voicegroups/voicegroup140.inc @@ -1,7 +1,7 @@ .align 2 voicegroup140:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup141.inc b/sound/voicegroups/voicegroup141.inc index 7a866f991e..1e556a21b6 100644 --- a/sound/voicegroups/voicegroup141.inc +++ b/sound/voicegroups/voicegroup141.inc @@ -1,131 +1,131 @@ .align 2 voicegroup141:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 2, 7, 3 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 1, 7, 0, 6 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 2, 9, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 2, 7, 3 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 1, 7, 0, 6 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 2, 9, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup142.inc b/sound/voicegroups/voicegroup142.inc index aa7e8b2043..af5b809bf8 100644 --- a/sound/voicegroups/voicegroup142.inc +++ b/sound/voicegroups/voicegroup142.inc @@ -1,87 +1,87 @@ .align 2 voicegroup142:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 188, 128, 201 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 195, 103, 220 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 195, 72, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 85, 188, 103, 160 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 128, 188, 77, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 175, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 4 - voice_square_2_alt 60, 0, 2, 0, 2, 5, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4900, 0, 7, 15, 0 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 188, 128, 201 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 195, 103, 220 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 195, 72, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 85, 188, 103, 160 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 128, 188, 77, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 175, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 4 + voice_square_2_alt 60, 0, 2, 0, 2, 5, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup143.inc b/sound/voicegroups/voicegroup143.inc index d668337f87..9cb286ac13 100644 --- a/sound/voicegroups/voicegroup143.inc +++ b/sound/voicegroups/voicegroup143.inc @@ -1,131 +1,131 @@ .align 2 voicegroup143:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 160, 123, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 3, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 160, 123, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 3, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 diff --git a/sound/voicegroups/voicegroup144.inc b/sound/voicegroups/voicegroup144.inc index 43ed4dbab2..87830a387b 100644 --- a/sound/voicegroups/voicegroup144.inc +++ b/sound/voicegroups/voicegroup144.inc @@ -1,131 +1,131 @@ .align 2 voicegroup144:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 85, 188, 92, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 85, 127, 180, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 4, 2 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 85, 188, 92, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 85, 127, 180, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 4, 2 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup145.inc b/sound/voicegroups/voicegroup145.inc index a14803a12c..96cda70e48 100644 --- a/sound/voicegroups/voicegroup145.inc +++ b/sound/voicegroups/voicegroup145.inc @@ -1,131 +1,131 @@ .align 2 voicegroup145:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 0, 9, 0 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 0, 9, 0 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup146.inc b/sound/voicegroups/voicegroup146.inc index d78b991e33..b0f1b92d6f 100644 --- a/sound/voicegroups/voicegroup146.inc +++ b/sound/voicegroups/voicegroup146.inc @@ -1,131 +1,131 @@ .align 2 voicegroup146:: - voice_keysplit_all voicegroup002 - voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 43, 76, 103, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 4 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 2 + voice_keysplit_all voicegroup002 + voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 43, 76, 103, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 4 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 2 diff --git a/sound/voicegroups/voicegroup147.inc b/sound/voicegroups/voicegroup147.inc index 35fb9dc5b3..4767815824 100644 --- a/sound/voicegroups/voicegroup147.inc +++ b/sound/voicegroups/voicegroup147.inc @@ -1,87 +1,87 @@ .align 2 voicegroup147:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 249, 25, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 6, 1 - voice_square_2_alt 60, 0, 2, 0, 0, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 2, 4, 2 + voice_keysplit_all voicegroup001 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 249, 25, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 6, 1 + voice_square_2_alt 60, 0, 2, 0, 0, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 4, 2 diff --git a/sound/voicegroups/voicegroup148.inc b/sound/voicegroups/voicegroup148.inc index 1ada1b89c6..4fc324df88 100644 --- a/sound/voicegroups/voicegroup148.inc +++ b/sound/voicegroups/voicegroup148.inc @@ -1,131 +1,131 @@ .align 2 voicegroup148:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 12, 0 - voice_square_2_alt 60, 0, 2, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 3, 5, 2 - voice_noise_alt 60, 0, 0, 0, 1, 6, 5 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 12, 0 + voice_square_2_alt 60, 0, 2, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 3, 5, 2 + voice_noise_alt 60, 0, 0, 0, 1, 6, 5 diff --git a/sound/voicegroups/voicegroup149.inc b/sound/voicegroups/voicegroup149.inc index 78c29fb840..c0239fef95 100644 --- a/sound/voicegroups/voicegroup149.inc +++ b/sound/voicegroups/voicegroup149.inc @@ -1,96 +1,96 @@ .align 2 voicegroup149:: - voice_keysplit_all voicegroup190 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 153 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 43, 188, 103, 165 - voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 43, 165, 103, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_keysplit_all voicegroup190 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 153 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 43, 188, 103, 165 + voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 43, 165, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup150.inc b/sound/voicegroups/voicegroup150.inc index 233981ebdf..c51150d782 100644 --- a/sound/voicegroups/voicegroup150.inc +++ b/sound/voicegroups/voicegroup150.inc @@ -1,131 +1,131 @@ .align 2 voicegroup150:: - voice_keysplit_all voicegroup002 - voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 85, 204, 77, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 6 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup002 + voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 85, 204, 77, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 6 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup151.inc b/sound/voicegroups/voicegroup151.inc index 3688a2541d..29571169d6 100644 --- a/sound/voicegroups/voicegroup151.inc +++ b/sound/voicegroups/voicegroup151.inc @@ -1,91 +1,91 @@ .align 2 voicegroup151:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 127 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 127 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup152.inc b/sound/voicegroups/voicegroup152.inc index bf07b260ca..06ccc3ae9d 100644 --- a/sound/voicegroups/voicegroup152.inc +++ b/sound/voicegroups/voicegroup152.inc @@ -1,131 +1,131 @@ .align 2 voicegroup152:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 160, 175, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 5, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 4, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 4, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 160, 175, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 5, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 4, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 4, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 diff --git a/sound/voicegroups/voicegroup153.inc b/sound/voicegroups/voicegroup153.inc index 90840698e4..7206c7ba3d 100644 --- a/sound/voicegroups/voicegroup153.inc +++ b/sound/voicegroups/voicegroup153.inc @@ -1,131 +1,131 @@ .align 2 voicegroup153:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 3, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 3, 4, 2 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48A0, 0, 1, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 2 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 3, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 3, 4, 2 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_8, 0, 1, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 2 diff --git a/sound/voicegroups/voicegroup154.inc b/sound/voicegroups/voicegroup154.inc index 14cfd2dd9d..ce70e65d57 100644 --- a/sound/voicegroups/voicegroup154.inc +++ b/sound/voicegroups/voicegroup154.inc @@ -1,96 +1,96 @@ .align 2 voicegroup154:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 10, 0 - voice_square_2_alt 60, 0, 1, 0, 0, 10, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4860, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 0, 12, 0 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 10, 0 + voice_square_2_alt 60, 0, 1, 0, 0, 10, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 0, 12, 0 diff --git a/sound/voicegroups/voicegroup155.inc b/sound/voicegroups/voicegroup155.inc index 7fcfdcfe66..8150754aab 100644 --- a/sound/voicegroups/voicegroup155.inc +++ b/sound/voicegroups/voicegroup155.inc @@ -1,131 +1,131 @@ .align 2 voicegroup155:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 188, 103, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 165, 154, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 165, 180, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 - voice_square_2_alt 60, 0, 3, 0, 3, 6, 2 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 3, 6, 5 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 1, 9, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 2 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 188, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 165, 154, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 165, 180, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 + voice_square_2_alt 60, 0, 3, 0, 3, 6, 2 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 3, 6, 5 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 1, 9, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 2 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup156.inc b/sound/voicegroups/voicegroup156.inc index 0d8ec69d9f..374464fff9 100644 --- a/sound/voicegroups/voicegroup156.inc +++ b/sound/voicegroups/voicegroup156.inc @@ -1,131 +1,131 @@ .align 2 voicegroup156:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 4, 4, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 5 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 4, 4, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 5 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup157.inc b/sound/voicegroups/voicegroup157.inc index 102702545e..7dd93abd0a 100644 --- a/sound/voicegroups/voicegroup157.inc +++ b/sound/voicegroups/voicegroup157.inc @@ -1,131 +1,131 @@ .align 2 voicegroup157:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 190, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 - voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 3, 6, 5 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 190, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 + voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 3, 6, 5 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 diff --git a/sound/voicegroups/voicegroup158.inc b/sound/voicegroups/voicegroup158.inc index 798a6f4d10..50fa566068 100644 --- a/sound/voicegroups/voicegroup158.inc +++ b/sound/voicegroups/voicegroup158.inc @@ -1,131 +1,131 @@ .align 2 voicegroup158:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 236, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 9, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 10, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 8, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 236, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 9, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 10, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 8, 1 diff --git a/sound/voicegroups/voicegroup159.inc b/sound/voicegroups/voicegroup159.inc index ce05bc70e2..f1d2046560 100644 --- a/sound/voicegroups/voicegroup159.inc +++ b/sound/voicegroups/voicegroup159.inc @@ -1,131 +1,131 @@ .align 2 voicegroup159:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 64, 249, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 51, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 7, 0, 6 - voice_square_2_alt 60, 0, 1, 1, 5, 1, 6 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 1, 7, 0, 6 - voice_square_1_alt 60, 0, 0, 0, 1, 4, 3, 6 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 64, 249, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 51, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 7, 0, 6 + voice_square_2_alt 60, 0, 1, 1, 5, 1, 6 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 1, 7, 0, 6 + voice_square_1_alt 60, 0, 0, 0, 1, 4, 3, 6 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup160.inc b/sound/voicegroups/voicegroup160.inc index 9198c7f127..160d0cad8f 100644 --- a/sound/voicegroups/voicegroup160.inc +++ b/sound/voicegroups/voicegroup160.inc @@ -1,91 +1,91 @@ .align 2 voicegroup160:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup161.inc b/sound/voicegroups/voicegroup161.inc index 8165b38e8d..c334fa2647 100644 --- a/sound/voicegroups/voicegroup161.inc +++ b/sound/voicegroups/voicegroup161.inc @@ -1,131 +1,131 @@ .align 2 voicegroup161:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 4 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 4 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup162.inc b/sound/voicegroups/voicegroup162.inc index cf6d4294c6..3a532b23ee 100644 --- a/sound/voicegroups/voicegroup162.inc +++ b/sound/voicegroups/voicegroup162.inc @@ -1,96 +1,96 @@ .align 2 voicegroup162:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 64, 188, 108, 244 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 195, 92, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 64, 204, 113, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 0 - voice_square_2_alt 60, 0, 1, 0, 0, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 64, 188, 108, 244 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 195, 92, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 64, 204, 113, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 0 + voice_square_2_alt 60, 0, 1, 0, 0, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup163.inc b/sound/voicegroups/voicegroup163.inc index 6c6fc38033..cd7c6ebef2 100644 --- a/sound/voicegroups/voicegroup163.inc +++ b/sound/voicegroups/voicegroup163.inc @@ -1,131 +1,131 @@ .align 2 voicegroup163:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_88D6978, 255, 0, 206, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 3, 4, 2 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4900, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_18, 255, 0, 206, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 3, 4, 2 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup164.inc b/sound/voicegroups/voicegroup164.inc index b7f742114b..d64cfd33ad 100644 --- a/sound/voicegroups/voicegroup164.inc +++ b/sound/voicegroups/voicegroup164.inc @@ -1,131 +1,131 @@ .align 2 voicegroup164:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 128, 180, 108, 209 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 85, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 6 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 128, 180, 108, 209 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 85, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 6 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup165.inc b/sound/voicegroups/voicegroup165.inc index 4e48069568..c3262766cb 100644 --- a/sound/voicegroups/voicegroup165.inc +++ b/sound/voicegroups/voicegroup165.inc @@ -1,131 +1,131 @@ .align 2 voicegroup165:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 37, 165, 103, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 204, 92, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 10, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 6 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_enhanced_delay_shaku, 255, 191, 97, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 37, 165, 103, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 204, 92, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 10, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 6 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_enhanced_delay_shaku, 255, 191, 97, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 diff --git a/sound/voicegroups/voicegroup166.inc b/sound/voicegroups/voicegroup166.inc index 7c23ebb014..edd94624c0 100644 --- a/sound/voicegroups/voicegroup166.inc +++ b/sound/voicegroups/voicegroup166.inc @@ -1,131 +1,131 @@ .align 2 voicegroup166:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 236, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 9, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 8, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 236, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 9, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 8, 1 diff --git a/sound/voicegroups/voicegroup167.inc b/sound/voicegroups/voicegroup167.inc index d4cf5a9f4d..0213b7aec0 100644 --- a/sound/voicegroups/voicegroup167.inc +++ b/sound/voicegroups/voicegroup167.inc @@ -1,131 +1,131 @@ .align 2 voicegroup167:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 10, 4 - voice_square_2_alt 60, 0, 3, 0, 2, 8, 3 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 0, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 10, 4 + voice_square_2_alt 60, 0, 3, 0, 2, 8, 3 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 0, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup168.inc b/sound/voicegroups/voicegroup168.inc index 2bb2c3b214..ea6b59d2ef 100644 --- a/sound/voicegroups/voicegroup168.inc +++ b/sound/voicegroups/voicegroup168.inc @@ -1,131 +1,131 @@ .align 2 voicegroup168:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 2 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 4 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4900, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 2 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 4 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup169.inc b/sound/voicegroups/voicegroup169.inc index bac059cff4..77ee6ffee4 100644 --- a/sound/voicegroups/voicegroup169.inc +++ b/sound/voicegroups/voicegroup169.inc @@ -1,131 +1,131 @@ .align 2 voicegroup169:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup170.inc b/sound/voicegroups/voicegroup170.inc index 01a3388743..43c8ae6df7 100644 --- a/sound/voicegroups/voicegroup170.inc +++ b/sound/voicegroups/voicegroup170.inc @@ -1,87 +1,87 @@ .align 2 voicegroup170:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup171.inc b/sound/voicegroups/voicegroup171.inc index 2fc106983d..f4ae315ce5 100644 --- a/sound/voicegroups/voicegroup171.inc +++ b/sound/voicegroups/voicegroup171.inc @@ -1,94 +1,94 @@ .align 2 voicegroup171:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_keysplit_all voicegroup001 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 diff --git a/sound/voicegroups/voicegroup172.inc b/sound/voicegroups/voicegroup172.inc index af9c09334f..ffd981c830 100644 --- a/sound/voicegroups/voicegroup172.inc +++ b/sound/voicegroups/voicegroup172.inc @@ -1,131 +1,131 @@ .align 2 voicegroup172:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 3 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4900, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 3 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 diff --git a/sound/voicegroups/voicegroup173.inc b/sound/voicegroups/voicegroup173.inc index 98a024ad29..46979c6258 100644 --- a/sound/voicegroups/voicegroup173.inc +++ b/sound/voicegroups/voicegroup173.inc @@ -1,131 +1,131 @@ .align 2 voicegroup173:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 4 - voice_square_2_alt 60, 0, 3, 0, 3, 3, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 3, 2 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 4 + voice_square_2_alt 60, 0, 3, 0, 3, 3, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 3, 2 diff --git a/sound/voicegroups/voicegroup174.inc b/sound/voicegroups/voicegroup174.inc index 0a65666114..ab7d43fc72 100644 --- a/sound/voicegroups/voicegroup174.inc +++ b/sound/voicegroups/voicegroup174.inc @@ -1,160 +1,160 @@ .align 2 voicegroup174:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 - voice_square_2_alt 60, 0, 3, 0, 2, 3, 4 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 3, 1 - voice_keysplit_all voicegroup177 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 154, 127 - voice_keysplit_all voicegroup002 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 + voice_square_2_alt 60, 0, 3, 0, 2, 3, 4 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 3, 1 + voice_keysplit_all voicegroup177 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 154, 127 + voice_keysplit_all voicegroup002 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup175.inc b/sound/voicegroups/voicegroup175.inc index 6ba9fec3b4..a074f216dd 100644 --- a/sound/voicegroups/voicegroup175.inc +++ b/sound/voicegroups/voicegroup175.inc @@ -1,55 +1,55 @@ .align 2 voicegroup175:: - voice_keysplit_all voicegroup177 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 165, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit_all voicegroup177 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 165, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup176.inc b/sound/voicegroups/voicegroup176.inc index 8b4c687b5b..ee3c97e493 100644 --- a/sound/voicegroups/voicegroup176.inc +++ b/sound/voicegroups/voicegroup176.inc @@ -1,51 +1,51 @@ .align 2 voicegroup176:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup177.inc b/sound/voicegroups/voicegroup177.inc index 12d57b389b..bd0e738fd4 100644 --- a/sound/voicegroups/voicegroup177.inc +++ b/sound/voicegroups/voicegroup177.inc @@ -1,93 +1,93 @@ .align 2 voicegroup177:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 - voice_directsound_no_resample 67, 71, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 - voice_directsound_no_resample 65, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 68, 29, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 72, 64, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 76, 39, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 80, 89, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 33, 10, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 84, 104, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound_no_resample 64, 118, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 50, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 64, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 + voice_directsound_no_resample 67, 71, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 + voice_directsound_no_resample 65, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 68, 29, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 72, 64, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 76, 39, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 80, 89, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 33, 10, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 84, 104, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound_no_resample 64, 118, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 50, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound 64, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 diff --git a/sound/voicegroups/voicegroup178.inc b/sound/voicegroups/voicegroup178.inc index 0062455af8..026d7bb3d8 100644 --- a/sound/voicegroups/voicegroup178.inc +++ b/sound/voicegroups/voicegroup178.inc @@ -1,91 +1,91 @@ .align 2 voicegroup178:: - voice_keysplit_all voicegroup177 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 204, 103, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 154, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 0, 15, 1 + voice_keysplit_all voicegroup177 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 204, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 154, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 0, 15, 1 diff --git a/sound/voicegroups/voicegroup179.inc b/sound/voicegroups/voicegroup179.inc index f777dcb3a4..e69cace5b8 100644 --- a/sound/voicegroups/voicegroup179.inc +++ b/sound/voicegroups/voicegroup179.inc @@ -1,91 +1,91 @@ .align 2 voicegroup179:: - voice_keysplit_all voicegroup177 - voice_keysplit_all voicegroup176 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 165, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 10, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 9, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 9, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_keysplit_all voicegroup177 + voice_keysplit_all voicegroup176 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 165, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 10, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 9, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 9, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup180.inc b/sound/voicegroups/voicegroup180.inc index 1754c35de4..ea182d38e5 100644 --- a/sound/voicegroups/voicegroup180.inc +++ b/sound/voicegroups/voicegroup180.inc @@ -1,131 +1,131 @@ .align 2 voicegroup180:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 64, 249, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 64, 249, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup181.inc b/sound/voicegroups/voicegroup181.inc index 0b7e24583c..92df8710a8 100644 --- a/sound/voicegroups/voicegroup181.inc +++ b/sound/voicegroups/voicegroup181.inc @@ -1,50 +1,50 @@ .align 2 voicegroup181:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 diff --git a/sound/voicegroups/voicegroup182.inc b/sound/voicegroups/voicegroup182.inc index a773b680a5..ec39554958 100644 --- a/sound/voicegroups/voicegroup182.inc +++ b/sound/voicegroups/voicegroup182.inc @@ -1,91 +1,91 @@ .align 2 voicegroup182:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 76 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 - voice_square_2_alt 60, 0, 1, 0, 2, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 76 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 + voice_square_2_alt 60, 0, 1, 0, 2, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup183.inc b/sound/voicegroups/voicegroup183.inc index f930e480a1..ff49e3763b 100644 --- a/sound/voicegroups/voicegroup183.inc +++ b/sound/voicegroups/voicegroup183.inc @@ -1,131 +1,131 @@ .align 2 voicegroup183:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 3, 1 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 3, 1 diff --git a/sound/voicegroups/voicegroup184.inc b/sound/voicegroups/voicegroup184.inc index d12cb031d1..86f392e65c 100644 --- a/sound/voicegroups/voicegroup184.inc +++ b/sound/voicegroups/voicegroup184.inc @@ -1,89 +1,89 @@ .align 2 voicegroup184:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 diff --git a/sound/voicegroups/voicegroup185.inc b/sound/voicegroups/voicegroup185.inc index 7b76f7ac7b..879a4e8883 100644 --- a/sound/voicegroups/voicegroup185.inc +++ b/sound/voicegroups/voicegroup185.inc @@ -1,131 +1,131 @@ .align 2 voicegroup185:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 85, 0, 154, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + voice_keysplit_all voicegroup002 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 85, 0, 154, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 diff --git a/sound/voicegroups/voicegroup186.inc b/sound/voicegroups/voicegroup186.inc index 64f1460c75..18dc71d70d 100644 --- a/sound/voicegroups/voicegroup186.inc +++ b/sound/voicegroups/voicegroup186.inc @@ -1,131 +1,131 @@ .align 2 voicegroup186:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 diff --git a/sound/voicegroups/voicegroup187.inc b/sound/voicegroups/voicegroup187.inc index c4b1af710a..640912505a 100644 --- a/sound/voicegroups/voicegroup187.inc +++ b/sound/voicegroups/voicegroup187.inc @@ -1,131 +1,131 @@ .align 2 voicegroup187:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 diff --git a/sound/voicegroups/voicegroup188.inc b/sound/voicegroups/voicegroup188.inc index 0f071fca51..8556bcd4d2 100644 --- a/sound/voicegroups/voicegroup188.inc +++ b/sound/voicegroups/voicegroup188.inc @@ -1,131 +1,131 @@ .align 2 voicegroup188:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 - voice_square_2_alt 60, 0, 3, 0, 3, 3, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 7, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 1 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 + voice_square_2_alt 60, 0, 3, 0, 3, 3, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 7, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 1 diff --git a/sound/voicegroups/voicegroup189.inc b/sound/voicegroups/voicegroup189.inc index 462948118d..6c04cd8320 100644 --- a/sound/voicegroups/voicegroup189.inc +++ b/sound/voicegroups/voicegroup189.inc @@ -1,95 +1,95 @@ .align 2 voicegroup189:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 3 - voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 3 + voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup190.inc b/sound/voicegroups/voicegroup190.inc index f8dacda624..25a84e84ed 100644 --- a/sound/voicegroups/voicegroup190.inc +++ b/sound/voicegroups/voicegroup190.inc @@ -1,90 +1,90 @@ .align 2 voicegroup190:: - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 7, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 1 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 52, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 33, 104, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 7, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 1 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 52, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 33, 104, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index ae79719602..c89d6e81cd 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -563,6 +563,50 @@ $(OBJEVENTGFXDIR)/berry_trees/wepear.4bpp: %.4bpp: %.png $(OBJEVENTGFXDIR)/berry_trees/wiki.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 +$(OBJEVENTGFXDIR)/berry_trees/occa.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/yache.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/chople.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/kebia.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/shuca.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/payapa.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/tanga.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/kasib.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/haban.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/colbur.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/roseli.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/custap.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/jaboca.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/rowap.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(OBJEVENTGFXDIR)/berry_trees/micle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 $(OBJEVENTGFXDIR)/misc/breakable_rock.4bpp: %.4bpp: %.png @@ -636,7 +680,7 @@ $(FLDEFFGFXDIR)/tall_grass.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/tree_disguise.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 -$(FLDEFFGFXDIR)/unknown_16.4bpp: %.4bpp: %.png +$(FLDEFFGFXDIR)/jump_long_grass.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 $(FLDEFFGFXDIR)/unknown_17.4bpp: %.4bpp: %.png @@ -674,3 +718,6 @@ $(FLDEFFGFXDIR)/secret_power_tree.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/record_mix_lights.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 1 + +graphics/door_anims/battle_tower_multi_corridor.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c index f6ebcc7265..747a6c7849 100644 --- a/src/AgbRfu_LinkManager.c +++ b/src/AgbRfu_LinkManager.c @@ -49,7 +49,7 @@ u32 rfu_LMAN_REQBN_softReset_and_checkID(void) return id; } -void rfu_LMAN_REQ_sendData(u8 clockChangeFlag) +void rfu_LMAN_REQ_sendData(bool8 clockChangeFlag) { if (gRfuLinkStatus->parentChild == MODE_CHILD) { diff --git a/src/agb_flash_1m.c b/src/agb_flash_1m.c index e249fab9a3..6fc4f3d600 100644 --- a/src/agb_flash_1m.c +++ b/src/agb_flash_1m.c @@ -3,7 +3,7 @@ static const char AgbLibFlashVersion[] = "FLASH1M_V103"; -const struct FlashSetupInfo * const sSetupInfos[] = +static const struct FlashSetupInfo * const sSetupInfos[] = { &MX29L010, &LE26FV10N1TS, diff --git a/src/apprentice.c b/src/apprentice.c index e686dabbed..ad7568a76f 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -23,9 +23,7 @@ #include "task.h" #include "text.h" #include "constants/battle_frontier.h" -#include "constants/easy_chat.h" #include "constants/items.h" -#include "constants/pokemon.h" #include "constants/songs.h" #include "constants/trainers.h" #include "constants/moves.h" @@ -127,16 +125,16 @@ void BufferApprenticeChallengeText(u8 saveApprenticeId) for (i = 0; num != 0 && i < APPRENTICE_COUNT; num /= 10, i++) ; - StringCopy7(gStringVar1, gSaveBlock2Ptr->apprentices[saveApprenticeId].playerName); + StringCopy_PlayerName(gStringVar1, gSaveBlock2Ptr->apprentices[saveApprenticeId].playerName); ConvertInternationalString(gStringVar1, gSaveBlock2Ptr->apprentices[saveApprenticeId].language); ConvertIntToDecimalStringN(gStringVar2, gSaveBlock2Ptr->apprentices[saveApprenticeId].number, STR_CONV_MODE_RIGHT_ALIGN, i); challengeText = sApprenticeChallengeTexts[gSaveBlock2Ptr->apprentices[saveApprenticeId].id]; StringExpandPlaceholders(gStringVar4, challengeText); } -void Apprentice_EnableBothScriptContexts(void) +void Apprentice_ScriptContext_Enable(void) { - EnableBothScriptContexts(); + ScriptContext_Enable(); } void ResetApprenticeStruct(struct Apprentice *apprentice) @@ -378,7 +376,7 @@ static u16 GetRandomAlternateMove(u8 monId) do { id = Random() % (NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES); - shouldUseMove = CanSpeciesLearnTMHM(species, id); + shouldUseMove = CanLearnTeachableMove(species, ItemIdToBattleMoveId(ITEM_TM01 + id)); } while (!shouldUseMove); @@ -632,7 +630,7 @@ static void CreateApprenticeMenu(u8 menu) pixelWidth = 0; for (i = 0; i < count; i++) { - s32 width = GetStringWidth(1, strings[i], 0); + s32 width = GetStringWidth(FONT_NORMAL, strings[i], 0); if (width > pixelWidth) pixelWidth = width; } @@ -640,12 +638,12 @@ static void CreateApprenticeMenu(u8 menu) width = ConvertPixelWidthToTileWidth(pixelWidth); left = ScriptMenu_AdjustLeftCoordFromWidth(left, width); windowId = CreateAndShowWindow(left, top, width, count * 2); - SetStandardWindowBorderStyle(windowId, 0); + SetStandardWindowBorderStyle(windowId, FALSE); for (i = 0; i < count; i++) - AddTextPrinterParameterized(windowId, 1, strings[i], 8, (i * 16) + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, strings[i], 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, 0); + InitMenuInUpperLeftCornerNormal(windowId, count, 0); CreateChooseAnswerTask(TRUE, count, windowId); } @@ -681,7 +679,7 @@ static void Task_ChooseAnswer(u8 taskId) RemoveAndHideWindow(tWindowId); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height) @@ -691,7 +689,7 @@ static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height) windowId = AddWindow(&winTemplate); PutWindowTilemap(windowId); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); return windowId; } @@ -817,9 +815,9 @@ static void Task_WaitForPrintingMessage(u8 taskId) { DestroyTask(taskId); if (gSpecialVar_0x8005) - ExecuteFuncAfterButtonPress(EnableBothScriptContexts); + ExecuteFuncAfterButtonPress(ScriptContext_Enable); else - EnableBothScriptContexts(); + ScriptContext_Enable(); } } @@ -897,7 +895,7 @@ static void PrintApprenticeMessage(void) } else { - EnableBothScriptContexts(); + ScriptContext_Enable(); return; } @@ -908,11 +906,11 @@ static void PrintApprenticeMessage(void) static void Script_PrintApprenticeMessage(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); PlayerFreeze(); - sub_808BCF4(); - DrawDialogueFrame(0, 1); + StopPlayerAvatar(); + DrawDialogueFrame(0, TRUE); PrintApprenticeMessage(); } @@ -1107,7 +1105,7 @@ static void TrySetApprenticeHeldItem(void) if (PLAYER_APPRENTICE.questionsAnswered < NUM_WHICH_MON_QUESTIONS) return; - + count = 0; for (j = 0; j < APPRENTICE_MAX_QUESTIONS; j++) { @@ -1291,7 +1289,7 @@ static void Task_ExecuteFuncAfterButtonPress(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { - gApprenticeFunc = (void*)(u32)(((u16)gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 16))); + gApprenticeFunc = (void *)(u32)(((u16)gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 16))); gApprenticeFunc(); DestroyTask(taskId); } diff --git a/src/bard_music.c b/src/bard_music.c index 114f1cf42f..dd986371d3 100644 --- a/src/bard_music.c +++ b/src/bard_music.c @@ -1,6 +1,5 @@ #include "global.h" #include "bard_music.h" -#include "constants/easy_chat.h" #include "easy_chat.h" #include "data/bard_music/bard_sounds.h" @@ -8,9 +7,9 @@ #include "data/bard_music/default_sound.h" #include "data/bard_music/length_table.h" -static s16 CalcWordPitch(int arg0, int songPos) +static s16 CalcWordPitch(int pitchIdx, int songPos) { - return sBardSoundPitchTables[arg0][songPos]; + return sBardSoundPitchTables[pitchIdx][songPos]; } const struct BardSound *GetWordSounds(u16 word) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c new file mode 100644 index 0000000000..f496b90e81 --- /dev/null +++ b/src/battle_ai_main.c @@ -0,0 +1,5134 @@ +#include "global.h" +#include "malloc.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_ai_util.h" +#include "battle_ai_main.h" +#include "battle_factory.h" +#include "battle_setup.h" +#include "battle_z_move.h" +#include "data.h" +#include "event_data.h" +#include "item.h" +#include "pokemon.h" +#include "random.h" +#include "recorded_battle.h" +#include "util.h" +#include "constants/abilities.h" +#include "constants/battle_ai.h" +#include "constants/battle_move_effects.h" +#include "constants/hold_effects.h" +#include "constants/moves.h" +#include "constants/items.h" + +#define AI_ACTION_DONE 0x0001 +#define AI_ACTION_FLEE 0x0002 +#define AI_ACTION_WATCH 0x0004 +#define AI_ACTION_DO_NOT_ATTACK 0x0008 +#define AI_ACTION_UNK5 0x0010 +#define AI_ACTION_UNK6 0x0020 +#define AI_ACTION_UNK7 0x0040 +#define AI_ACTION_UNK8 0x0080 + +// AI states +enum +{ + AIState_SettingUp, + AIState_Processing, + AIState_FinishedProcessing, + AIState_DoNotProcess +}; + +static u8 ChooseMoveOrAction_Singles(void); +static u8 ChooseMoveOrAction_Doubles(void); +static void BattleAI_DoAIProcessing(void); +static bool32 IsPinchBerryItemEffect(u16 holdEffect); + +// ewram +EWRAM_DATA const u8 *gAIScriptPtr = NULL; // Still used in contests +EWRAM_DATA u8 sBattler_AI = 0; + +// const rom data +static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_TryToFaint(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_Risky(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_PreferStrongestMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_PreferBatonPass(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_HPAware(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_Roaming(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_Safari(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_FirstBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); +static s16 AI_DoubleBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score); + +static s16 (*const sBattleAiFuncTable[])(u8, u8, u16, s16) = +{ + [0] = AI_CheckBadMove, // AI_FLAG_CHECK_BAD_MOVE + [1] = AI_TryToFaint, // AI_FLAG_TRY_TO_FAINT + [2] = AI_CheckViability, // AI_FLAG_CHECK_VIABILITY + [3] = AI_SetupFirstTurn, // AI_FLAG_SETUP_FIRST_TURN + [4] = AI_Risky, // AI_FLAG_RISKY + [5] = AI_PreferStrongestMove, // AI_FLAG_PREFER_STRONGEST_MOVE + [6] = AI_PreferBatonPass, // AI_FLAG_PREFER_BATON_PASS + [7] = AI_DoubleBattle, // AI_FLAG_DOUBLE_BATTLE + [8] = AI_HPAware, // AI_FLAG_HP_AWARE + [9] = NULL, // AI_FLAG_NEGATE_UNAWARE + [10] = NULL, // AI_FLAG_WILL_SUICIDE + [11] = NULL, // AI_FLAG_HELP_PARTNER + [12] = NULL, // Unused + [13] = NULL, // Unused + [14] = NULL, // Unused + [15] = NULL, // Unused + [16] = NULL, // Unused + [17] = NULL, // Unused + [18] = NULL, // Unused + [19] = NULL, // Unused + [20] = NULL, // Unused + [21] = NULL, // Unused + [22] = NULL, // Unused + [23] = NULL, // Unused + [24] = NULL, // Unused + [25] = NULL, // Unused + [26] = NULL, // Unused + [27] = NULL, // Unused + [28] = NULL, // Unused + [29] = AI_Roaming, // AI_FLAG_ROAMING + [30] = AI_Safari, // AI_FLAG_SAFARI + [31] = AI_FirstBattle, // AI_FLAG_FIRST_BATTLE +}; + +// Functions +void BattleAI_SetupItems(void) +{ + s32 i; + u8 *data = (u8 *)BATTLE_HISTORY; + + for (i = 0; i < sizeof(struct BattleHistory); i++) + data[i] = 0; + + // Items are allowed to use in ONLY trainer battles. + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER + | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_SECRET_BASE | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_RECORDED_LINK) + ) + ) + { + for (i = 0; i < MAX_TRAINER_ITEMS; i++) + { + if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0) + { + BATTLE_HISTORY->trainerItems[BATTLE_HISTORY->itemsNo] = gTrainers[gTrainerBattleOpponent_A].items[i]; + BATTLE_HISTORY->itemsNo++; + } + } + } +} + +static u32 GetWildAiFlags(void) +{ + u8 avgLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + u32 flags; + + if (IsDoubleBattle()) + avgLevel = (GetMonData(&gEnemyParty[0], MON_DATA_LEVEL) + GetMonData(&gEnemyParty[1], MON_DATA_LEVEL)) / 2; + + flags |= AI_FLAG_CHECK_BAD_MOVE; + if (avgLevel >= 20) + flags |= AI_FLAG_CHECK_VIABILITY; + if (avgLevel >= 60) + flags |= AI_FLAG_PREFER_STRONGEST_MOVE; + if (avgLevel >= 80) + flags |= AI_FLAG_HP_AWARE; + + if (B_VAR_WILD_AI_FLAGS != 0 && VarGet(B_VAR_WILD_AI_FLAGS) != 0) + flags |= VarGet(B_VAR_WILD_AI_FLAGS); + + return flags; +} + +void BattleAI_SetupFlags(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + AI_THINKING_STRUCT->aiFlags = GetAiScriptsInRecordedBattle(); + else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + AI_THINKING_STRUCT->aiFlags = AI_FLAG_SAFARI; + else if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) + AI_THINKING_STRUCT->aiFlags = AI_FLAG_ROAMING; + else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) + AI_THINKING_STRUCT->aiFlags = AI_FLAG_FIRST_BATTLE; + else if (gBattleTypeFlags & BATTLE_TYPE_FACTORY) + AI_THINKING_STRUCT->aiFlags = GetAiScriptsInBattleFactory(); + else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE)) + AI_THINKING_STRUCT->aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT; + else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags | gTrainers[gTrainerBattleOpponent_B].aiFlags; + else + AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags; + + // check smart wild AI + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER)) && IsWildMonSmart()) + AI_THINKING_STRUCT->aiFlags |= GetWildAiFlags(); + + if (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS) || gTrainers[gTrainerBattleOpponent_A].doubleBattle) + AI_THINKING_STRUCT->aiFlags |= AI_FLAG_DOUBLE_BATTLE; // Act smart in doubles and don't attack your partner. +} + +// sBattler_AI set in ComputeBattleAiScores +void BattleAI_SetupAIData(u8 defaultScoreMoves) +{ + s32 i, move, dmg; + u8 moveLimitations; + + // Clear AI data but preserve the flags. + u32 flags = AI_THINKING_STRUCT->aiFlags; + memset(AI_THINKING_STRUCT, 0, sizeof(struct AI_ThinkingStruct)); + AI_THINKING_STRUCT->aiFlags = flags; + + // Conditional score reset, unlike Ruby. + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (defaultScoreMoves & 1) + AI_THINKING_STRUCT->score[i] = 100; + else + AI_THINKING_STRUCT->score[i] = 0; + + defaultScoreMoves >>= 1; + } + + moveLimitations = AI_DATA->moveLimitations[gActiveBattler]; + + // Ignore moves that aren't possible to use. + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBitTable[i] & moveLimitations) + AI_THINKING_STRUCT->score[i] = 0; + } + + //sBattler_AI = gActiveBattler; + gBattlerTarget = SetRandomTarget(sBattler_AI); + gBattleStruct->aiChosenTarget[sBattler_AI] = gBattlerTarget; +} + +u8 BattleAI_ChooseMoveOrAction(void) +{ + u32 savedCurrentMove = gCurrentMove; + u8 ret; + + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + ret = ChooseMoveOrAction_Singles(); + else + ret = ChooseMoveOrAction_Doubles(); + + // Clear protect structures, some flags may be set during AI calcs + // e.g. pranksterElevated from GetMovePriority + memset(&gProtectStructs, 0, MAX_BATTLERS_COUNT * sizeof(struct ProtectStruct)); + + gCurrentMove = savedCurrentMove; + return ret; +} + +// damages/other info computed in GetAIDataAndCalcDmg +u8 ComputeBattleAiScores(u8 battler) +{ + sBattler_AI = battler; + BattleAI_SetupAIData(0xF); + return BattleAI_ChooseMoveOrAction(); +} + +static void SetBattlerAiData(u8 battlerId) +{ + AI_DATA->abilities[battlerId] = AI_GetAbility(battlerId); + AI_DATA->items[battlerId] = gBattleMons[battlerId].item; + AI_DATA->holdEffects[battlerId] = AI_GetHoldEffect(battlerId); + AI_DATA->holdEffectParams[battlerId] = GetBattlerHoldEffectParam(battlerId); + AI_DATA->predictedMoves[battlerId] = gLastMoves[battlerId]; + AI_DATA->hpPercents[battlerId] = GetHealthPercentage(battlerId); + AI_DATA->moveLimitations[battlerId] = CheckMoveLimitations(battlerId, 0, MOVE_LIMITATIONS_ALL); +} + +void GetAiLogicData(void) +{ + u32 battlerAtk, battlerDef, i, move; + u8 effectiveness; + s32 dmg; + + memset(AI_DATA, 0, sizeof(struct AiLogicData)); + + if (!(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER)) + && !IsWildMonSmart()) + return; + + // get/assume all battler data + for (i = 0; i < gBattlersCount; i++) + { + if (IsBattlerAlive(i)) { + SetBattlerAiData(i); + } + } + + // simulate AI damage + for (battlerAtk = 0; battlerAtk < gBattlersCount; battlerAtk++) + { + if (!IsBattlerAlive(battlerAtk) + || !IsBattlerAIControlled(battlerAtk)) { + continue; + } + + for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + { + if (battlerAtk == battlerDef) + continue; + + RecordKnownMove(battlerDef, gLastMoves[battlerDef]); + for (i = 0; i < MAX_MON_MOVES; i++) + { + dmg = 0; + effectiveness = AI_EFFECTIVENESS_x0; + move = gBattleMons[battlerAtk].moves[i]; + + if (move != 0 + && move != 0xFFFF + //&& gBattleMoves[move].power != 0 /* we want to get effectiveness of status moves */ + && !(AI_DATA->moveLimitations[battlerAtk] & gBitTable[i])) { + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE); + } + + AI_DATA->simulatedDmg[battlerAtk][battlerDef][i] = dmg; + AI_DATA->effectiveness[battlerAtk][battlerDef][i] = effectiveness; + } + } + } +} + +static u8 ChooseMoveOrAction_Singles(void) +{ + u8 currentMoveArray[MAX_MON_MOVES]; + u8 consideredMoveArray[MAX_MON_MOVES]; + u32 numOfBestMoves; + s32 i, id; + u32 flags = AI_THINKING_STRUCT->aiFlags; + + AI_DATA->partnerMove = 0; // no ally + while (flags != 0) + { + if (flags & 1) + { + AI_THINKING_STRUCT->aiState = AIState_SettingUp; + BattleAI_DoAIProcessing(); + } + flags >>= 1; + AI_THINKING_STRUCT->aiLogicId++; + AI_THINKING_STRUCT->movesetIndex = 0; + } + + for (i = 0; i < MAX_MON_MOVES; i++) { + gBattleStruct->aiFinalScore[sBattler_AI][gBattlerTarget][i] = AI_THINKING_STRUCT->score[i]; + } + + // Check special AI actions. + if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE) + return AI_CHOICE_FLEE; + if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH) + return AI_CHOICE_WATCH; + + gActiveBattler = sBattler_AI; + + // If can switch. + if (CountUsablePartyMons(sBattler_AI) > 0 + && !IsAbilityPreventingEscape(sBattler_AI) + && !(gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + && !(gStatuses3[gActiveBattler] & STATUS3_ROOTED) + && !(gBattleTypeFlags & (BATTLE_TYPE_ARENA | BATTLE_TYPE_PALACE)) + && AI_THINKING_STRUCT->aiFlags & (AI_FLAG_CHECK_VIABILITY | AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_PREFER_BATON_PASS)) + { + // Consider switching if all moves are worthless to use. + if (GetTotalBaseStat(gBattleMons[sBattler_AI].species) >= 310 // Mon is not weak. + && gBattleMons[sBattler_AI].hp >= gBattleMons[sBattler_AI].maxHP / 2) + { + s32 cap = AI_THINKING_STRUCT->aiFlags & (AI_FLAG_CHECK_VIABILITY) ? 95 : 93; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (AI_THINKING_STRUCT->score[i] > cap) + break; + } + + if (i == MAX_MON_MOVES && GetMostSuitableMonToSwitchInto() != PARTY_SIZE) + { + AI_THINKING_STRUCT->switchMon = TRUE; + return AI_CHOICE_SWITCH; + } + } + + // 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(sBattler_AI) == ABILITY_TRUANT + && IsTruantMonVulnerable(sBattler_AI, gBattlerTarget) + && gDisableStructs[sBattler_AI].truantCounter + && gBattleMons[sBattler_AI].hp >= gBattleMons[sBattler_AI].maxHP / 2) + { + if (GetMostSuitableMonToSwitchInto() != PARTY_SIZE) + { + AI_THINKING_STRUCT->switchMon = TRUE; + return AI_CHOICE_SWITCH; + } + } + } + + numOfBestMoves = 1; + currentMoveArray[0] = AI_THINKING_STRUCT->score[0]; + consideredMoveArray[0] = 0; + + for (i = 1; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[sBattler_AI].moves[i] != MOVE_NONE) + { + // In ruby, the order of these if statements is reversed. + if (currentMoveArray[0] == AI_THINKING_STRUCT->score[i]) + { + currentMoveArray[numOfBestMoves] = AI_THINKING_STRUCT->score[i]; + consideredMoveArray[numOfBestMoves++] = i; + } + if (currentMoveArray[0] < AI_THINKING_STRUCT->score[i]) + { + numOfBestMoves = 1; + currentMoveArray[0] = AI_THINKING_STRUCT->score[i]; + consideredMoveArray[0] = i; + } + } + } + return consideredMoveArray[Random() % numOfBestMoves]; +} + +static u8 ChooseMoveOrAction_Doubles(void) +{ + s32 i, j; + u32 flags; + s16 bestMovePointsForTarget[MAX_BATTLERS_COUNT]; + s8 mostViableTargetsArray[MAX_BATTLERS_COUNT]; + u8 actionOrMoveIndex[MAX_BATTLERS_COUNT]; + u8 mostViableMovesScores[MAX_MON_MOVES]; + u8 mostViableMovesIndices[MAX_MON_MOVES]; + s32 mostViableTargetsNo; + s32 mostViableMovesNo; + s16 mostMovePoints; + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (i == sBattler_AI || gBattleMons[i].hp == 0) + { + actionOrMoveIndex[i] = 0xFF; + bestMovePointsForTarget[i] = -1; + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) + BattleAI_SetupAIData(gBattleStruct->palaceFlags >> 4); + else + BattleAI_SetupAIData(0xF); + + gBattlerTarget = i; + if ((i & BIT_SIDE) != (sBattler_AI & BIT_SIDE)) + RecordLastUsedMoveByTarget(); + + AI_DATA->partnerMove = GetAllyChosenMove(i); + AI_THINKING_STRUCT->aiLogicId = 0; + AI_THINKING_STRUCT->movesetIndex = 0; + flags = AI_THINKING_STRUCT->aiFlags; + while (flags != 0) + { + if (flags & 1) + { + AI_THINKING_STRUCT->aiState = AIState_SettingUp; + BattleAI_DoAIProcessing(); + } + flags >>= 1; + AI_THINKING_STRUCT->aiLogicId++; + AI_THINKING_STRUCT->movesetIndex = 0; + } + + if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE) + { + actionOrMoveIndex[i] = AI_CHOICE_FLEE; + } + else if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH) + { + actionOrMoveIndex[i] = AI_CHOICE_WATCH; + } + else + { + mostViableMovesScores[0] = AI_THINKING_STRUCT->score[0]; + mostViableMovesIndices[0] = 0; + mostViableMovesNo = 1; + for (j = 1; j < MAX_MON_MOVES; j++) + { + if (gBattleMons[sBattler_AI].moves[j] != 0) + { + if (!CanTargetBattler(sBattler_AI, i, gBattleMons[sBattler_AI].moves[j])) + continue; + + if (mostViableMovesScores[0] == AI_THINKING_STRUCT->score[j]) + { + mostViableMovesScores[mostViableMovesNo] = AI_THINKING_STRUCT->score[j]; + mostViableMovesIndices[mostViableMovesNo] = j; + mostViableMovesNo++; + } + if (mostViableMovesScores[0] < AI_THINKING_STRUCT->score[j]) + { + mostViableMovesScores[0] = AI_THINKING_STRUCT->score[j]; + mostViableMovesIndices[0] = j; + mostViableMovesNo = 1; + } + } + } + actionOrMoveIndex[i] = mostViableMovesIndices[Random() % mostViableMovesNo]; + bestMovePointsForTarget[i] = mostViableMovesScores[0]; + + // Don't use a move against ally if it has less than 100 points. + if (i == (sBattler_AI ^ BIT_FLANK) && bestMovePointsForTarget[i] < 100) + { + bestMovePointsForTarget[i] = -1; + mostViableMovesScores[0] = mostViableMovesScores[0]; // Needed to match. + } + } + + for (j = 0; j < MAX_MON_MOVES; j++) { + gBattleStruct->aiFinalScore[sBattler_AI][gBattlerTarget][j] = AI_THINKING_STRUCT->score[j]; + } + } + } + + mostMovePoints = bestMovePointsForTarget[0]; + mostViableTargetsArray[0] = 0; + mostViableTargetsNo = 1; + + for (i = 1; i < MAX_BATTLERS_COUNT; i++) + { + if (mostMovePoints == bestMovePointsForTarget[i]) + { + mostViableTargetsArray[mostViableTargetsNo] = i; + mostViableTargetsNo++; + } + if (mostMovePoints < bestMovePointsForTarget[i]) + { + mostMovePoints = bestMovePointsForTarget[i]; + mostViableTargetsArray[0] = i; + mostViableTargetsNo = 1; + } + } + + gBattlerTarget = mostViableTargetsArray[Random() % mostViableTargetsNo]; + gBattleStruct->aiChosenTarget[sBattler_AI] = gBattlerTarget; + return actionOrMoveIndex[gBattlerTarget]; +} + +static void BattleAI_DoAIProcessing(void) +{ + while (AI_THINKING_STRUCT->aiState != AIState_FinishedProcessing) + { + switch (AI_THINKING_STRUCT->aiState) + { + case AIState_DoNotProcess: // Needed to match. + break; + case AIState_SettingUp: + if (gBattleMons[sBattler_AI].pp[AI_THINKING_STRUCT->movesetIndex] == 0) + { + AI_THINKING_STRUCT->moveConsidered = 0; + } + else + { + AI_THINKING_STRUCT->moveConsidered = gBattleMons[sBattler_AI].moves[AI_THINKING_STRUCT->movesetIndex]; + } + AI_THINKING_STRUCT->aiState++; + break; + case AIState_Processing: + if (AI_THINKING_STRUCT->moveConsidered != MOVE_NONE + && AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] > 0) + { + if (AI_THINKING_STRUCT->aiLogicId < ARRAY_COUNT(sBattleAiFuncTable) + && sBattleAiFuncTable[AI_THINKING_STRUCT->aiLogicId] != NULL) + { + // Call AI function + AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = + sBattleAiFuncTable[AI_THINKING_STRUCT->aiLogicId](sBattler_AI, + gBattlerTarget, + AI_THINKING_STRUCT->moveConsidered, + AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex]); + } + } + else + { + AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; + } + + AI_THINKING_STRUCT->movesetIndex++; + if (AI_THINKING_STRUCT->movesetIndex < MAX_MON_MOVES && !(AI_THINKING_STRUCT->aiAction & AI_ACTION_DO_NOT_ATTACK)) + AI_THINKING_STRUCT->aiState = AIState_SettingUp; + else + AI_THINKING_STRUCT->aiState++; + break; + } + } +} + +// AI Score Functions +// AI_FLAG_CHECK_BAD_MOVE - decreases move scores +static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + // move data + u8 atkPriority = GetMovePriority(battlerAtk, move); + u16 moveEffect = gBattleMoves[move].effect; + s32 moveType; + u16 moveTarget = AI_GetBattlerMoveTargetType(battlerAtk, move); + u16 accuracy = AI_GetMoveAccuracy(battlerAtk, battlerDef, move); + u32 effectiveness = AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; + bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); + u32 i; + u16 predictedMove = AI_DATA->predictedMoves[battlerDef]; + + SetTypeBeforeUsingMove(move, battlerAtk); + GET_MOVE_TYPE(move, moveType); + + if (IsTargetingPartner(battlerAtk, battlerDef)) + return score; + + GET_MOVE_TYPE(move, moveType); + + // check non-user target + if (!(moveTarget & MOVE_TARGET_USER)) + { + // handle negative checks on non-user target + // check powder moves + if (TestMoveFlags(move, FLAG_POWDER) && !IsAffectedByPowder(battlerDef, AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerDef])) + { + RETURN_SCORE_MINUS(20); + } + + // check ground immunities + if (moveType == TYPE_GROUND + && !IsBattlerGrounded(battlerDef) + && ((AI_DATA->abilities[battlerDef] == ABILITY_LEVITATE + && DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move)) + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_AIR_BALLOON + || (gStatuses3[battlerDef] & (STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS))) + && move != MOVE_THOUSAND_ARROWS) + { + RETURN_SCORE_MINUS(20); + } + + // check off screen + if (IsSemiInvulnerable(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + RETURN_SCORE_MINUS(20); // if target off screen and we go first, don't use move + + // check if negates type + switch (effectiveness) + { + case AI_EFFECTIVENESS_x0: + RETURN_SCORE_MINUS(20); + break; + case AI_EFFECTIVENESS_x0_125: + case AI_EFFECTIVENESS_x0_25: + RETURN_SCORE_MINUS(10); + break; + } + + // target ability checks + if (!DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move)) + { + switch (AI_DATA->abilities[battlerDef]) + { + case ABILITY_MAGIC_GUARD: + switch (moveEffect) + { + case EFFECT_POISON: + case EFFECT_WILL_O_WISP: + case EFFECT_TOXIC: + case EFFECT_LEECH_SEED: + score -= 5; + break; + case EFFECT_CURSE: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) // Don't use Curse if you're a ghost type vs a Magic Guard user, they'll take no damage. + score -= 5; + break; + } + break; + case ABILITY_VOLT_ABSORB: + case ABILITY_MOTOR_DRIVE: + case ABILITY_LIGHTNING_ROD: + if (moveType == TYPE_ELECTRIC) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_WATER_ABSORB: + case ABILITY_DRY_SKIN: + case ABILITY_STORM_DRAIN: + if (moveType == TYPE_WATER) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_FLASH_FIRE: + if (moveType == TYPE_FIRE) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_WONDER_GUARD: + if (effectiveness < AI_EFFECTIVENESS_x2) + return 0; + break; + case ABILITY_SAP_SIPPER: + if (moveType == TYPE_GRASS) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_JUSTIFIED: + if (moveType == TYPE_DARK && !IS_MOVE_STATUS(move)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_RATTLED: + if (!IS_MOVE_STATUS(move) + && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_SOUNDPROOF: + if (TestMoveFlags(move, FLAG_SOUND)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_BULLETPROOF: + if (TestMoveFlags(move, FLAG_BALLISTIC)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_DAZZLING: + case ABILITY_QUEENLY_MAJESTY: + if (atkPriority > 0) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_AROMA_VEIL: + if (IsAromaVeilProtectedMove(move)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_SWEET_VEIL: + if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_FLOWER_VEIL: + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringMoveEffect(moveEffect))) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_MAGIC_BOUNCE: + if (TestMoveFlags(move, FLAG_MAGIC_COAT_AFFECTED)) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_CONTRARY: + if (IsStatLoweringMoveEffect(moveEffect)) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_CLEAR_BODY: + case ABILITY_FULL_METAL_BODY: + case ABILITY_WHITE_SMOKE: + if (IsStatLoweringMoveEffect(moveEffect)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_HYPER_CUTTER: + if ((moveEffect == EFFECT_ATTACK_DOWN || moveEffect == EFFECT_ATTACK_DOWN_2) + && move != MOVE_PLAY_NICE && move != MOVE_NOBLE_ROAR && move != MOVE_TEARFUL_LOOK && move != MOVE_VENOM_DRENCH) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_KEEN_EYE: + if (moveEffect == EFFECT_ACCURACY_DOWN || moveEffect == EFFECT_ACCURACY_DOWN_2) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_BIG_PECKS: + if (moveEffect == EFFECT_DEFENSE_DOWN || moveEffect == EFFECT_DEFENSE_DOWN_2) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_DEFIANT: + case ABILITY_COMPETITIVE: + if (IsStatLoweringMoveEffect(moveEffect) && !IsTargetingPartner(battlerAtk, battlerDef)) + RETURN_SCORE_MINUS(8); + break; + case ABILITY_COMATOSE: + if (IsNonVolatileStatusMoveEffect(moveEffect)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_SHIELDS_DOWN: + if (IsShieldsDownProtected(battlerAtk) && IsNonVolatileStatusMoveEffect(moveEffect)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_LEAF_GUARD: + if (AI_WeatherHasEffect() && (gBattleWeather & B_WEATHER_SUN) + && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_UTILITY_UMBRELLA + && IsNonVolatileStatusMoveEffect(moveEffect)) + RETURN_SCORE_MINUS(10); + break; + } // def ability checks + + // target partner ability checks & not attacking partner + if (isDoubleBattle) + { + switch (AI_DATA->abilities[BATTLE_PARTNER(battlerDef)]) + { + case ABILITY_LIGHTNING_ROD: + if (moveType == TYPE_ELECTRIC && !IsMoveRedirectionPrevented(move, AI_DATA->abilities[battlerAtk])) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_STORM_DRAIN: + if (moveType == TYPE_WATER && !IsMoveRedirectionPrevented(move, AI_DATA->abilities[battlerAtk])) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_MAGIC_BOUNCE: + if (TestMoveFlags(move, FLAG_MAGIC_COAT_AFFECTED) && moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD)) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_SWEET_VEIL: + if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_FLOWER_VEIL: + if ((IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringMoveEffect(moveEffect))) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_AROMA_VEIL: + if (IsAromaVeilProtectedMove(move)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_DAZZLING: + case ABILITY_QUEENLY_MAJESTY: + if (atkPriority > 0) + RETURN_SCORE_MINUS(10); + break; + } + } // def partner ability checks + } // ignore def ability check + + // gen7+ dark type mons immune to priority->elevated moves from prankster + #if B_PRANKSTER_DARK_TYPES >= GEN_7 + if (AI_DATA->abilities[battlerAtk] == ABILITY_PRANKSTER && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) && IS_MOVE_STATUS(move) + && !(moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER))) + RETURN_SCORE_MINUS(10); + #endif + + // terrain & effect checks + if (AI_IsTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) + { + if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) + RETURN_SCORE_MINUS(20); + } + + if (AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) + { + if (IsNonVolatileStatusMoveEffect(moveEffect) || IsConfusionMoveEffect(moveEffect)) + RETURN_SCORE_MINUS(20); + } + + if (AI_IsTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && atkPriority > 0) + { + RETURN_SCORE_MINUS(20); + } + } // end check MOVE_TARGET_USER + +// the following checks apply to any target (including user) + + // throat chop check + if (gDisableStructs[battlerAtk].throatChopTimer && TestMoveFlags(move, FLAG_SOUND)) + return 0; // Can't even select move at all + // heal block check + if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(battlerAtk, move)) + return 0; // Can't even select heal blocked move + // primal weather check + if (WEATHER_HAS_EFFECT) + { + if (gBattleWeather & B_WEATHER_PRIMAL_ANY) + { + switch (move) + { + case MOVE_SUNNY_DAY: + case MOVE_RAIN_DANCE: + case MOVE_HAIL: + case MOVE_SANDSTORM: + RETURN_SCORE_MINUS(30); + } + } + + if (!IS_MOVE_STATUS(move)) + { + if (gBattleWeather & B_WEATHER_SUN_PRIMAL) + { + if (moveType == TYPE_WATER) + RETURN_SCORE_MINUS(30); + } + else if (gBattleWeather & B_WEATHER_RAIN_PRIMAL) + { + if (moveType == TYPE_FIRE) + RETURN_SCORE_MINUS(30); + } + } + } + + // check move effects + switch (moveEffect) + { + case EFFECT_HIT: + default: + break; // check move damage + case EFFECT_SLEEP: + if (!AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_EXPLOSION: + if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_WILL_SUICIDE)) + score -= 2; + + if (effectiveness == AI_EFFECTIVENESS_x0) + { + score -= 10; + } + else if (IsAbilityOnField(ABILITY_DAMP) && !DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move)) + { + score -= 10; + } + else if (CountUsablePartyMons(battlerAtk) == 0) + { + if (CountUsablePartyMons(battlerDef) != 0) + score -= 10; + else + score--; + } + break; + case EFFECT_DREAM_EATER: + if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE) + score -= 8; + else if (effectiveness == AI_EFFECTIVENESS_x0) + score -= 10; + break; + // stat raising effects + case EFFECT_ATTACK_UP: + case EFFECT_ATTACK_UP_2: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 10; + break; + case EFFECT_STUFF_CHEEKS: + if (ItemId_GetPocket(gBattleMons[battlerAtk].item) != POCKET_BERRIES) + return 0; // cannot even select + //fallthrough + case EFFECT_DEFENSE_UP: + case EFFECT_DEFENSE_UP_2: + case EFFECT_DEFENSE_UP_3: + case EFFECT_DEFENSE_CURL: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF)) + score -= 10; + break; + case EFFECT_SPECIAL_ATTACK_UP: + case EFFECT_SPECIAL_ATTACK_UP_2: + case EFFECT_SPECIAL_ATTACK_UP_3: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + score -= 10; + break; + case EFFECT_SPECIAL_DEFENSE_UP: + case EFFECT_SPECIAL_DEFENSE_UP_2: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF)) + score -= 10; + break; + case EFFECT_ACCURACY_UP: + case EFFECT_ACCURACY_UP_2: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ACC)) + score -= 10; + break; + case EFFECT_EVASION_UP: + case EFFECT_EVASION_UP_2: + case EFFECT_MINIMIZE: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_EVASION)) + score -= 10; + break; + case EFFECT_COSMIC_POWER: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF)) + score -= 8; + break; + case EFFECT_BULK_UP: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF)) + score -= 8; + break; + case EFFECT_CALM_MIND: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF)) + score -= 8; + break; + case EFFECT_DRAGON_DANCE: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPEED)) + score -= 8; + break; + case EFFECT_COIL: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ACC)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 8; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF)) + score -= 6; + break; + case EFFECT_ATTACK_ACCURACY_UP: //hone claws + if (AI_DATA->abilities[battlerAtk] != ABILITY_CONTRARY) + { + if (gBattleMons[battlerAtk].statStages[STAT_ATK] >= MAX_STAT_STAGE + && (gBattleMons[battlerAtk].statStages[STAT_ACC] >= MAX_STAT_STAGE || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))) + score -= 10; + break; + } + else + { + score -= 10; + } + break; + case EFFECT_CHARGE: + if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP) + score -= 20; + else if (!HasMoveWithType(battlerAtk, TYPE_ELECTRIC)) + score -= 10; + #if B_CHARGE_SPDEF_RAISE >= GEN_5 + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF)) + score -= 5; + #endif + break; + case EFFECT_QUIVER_DANCE: + case EFFECT_GEOMANCY: + if (gBattleMons[battlerAtk].statStages[STAT_SPATK] >= MAX_STAT_STAGE || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPEED)) + score -= 8; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF)) + score -= 6; + break; + case EFFECT_SHIFT_GEAR: + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPEED)) + score -= 8; + break; + case EFFECT_SHELL_SMASH: + if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) + { + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF)) + score -= 8; + } + else + { + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + score -= 8; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPEED)) + score -= 6; + } + break; + case EFFECT_GROWTH: + case EFFECT_ATTACK_SPATK_UP: // work up + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + score -= 8; + break; + case EFFECT_ROTOTILLER: + if (isDoubleBattle) + { + if (!(IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) + && AI_IsBattlerGrounded(battlerAtk) + && (BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK))) + && !(IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS) + && AI_IsBattlerGrounded(BATTLE_PARTNER(battlerAtk)) + && AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] != ABILITY_CONTRARY + && (BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_ATK) + || BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPATK)))) + { + score -= 10; + } + } + else if (!(IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) + && AI_IsBattlerGrounded(battlerAtk) + && (BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK)))) + { + score -= 10; + } + break; + case EFFECT_GEAR_UP: + if (AI_DATA->abilities[battlerAtk] == ABILITY_PLUS || AI_DATA->abilities[battlerAtk] == ABILITY_MINUS) + { + // same as growth, work up + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + score -= 8; + break; + } + else if (!isDoubleBattle) + { + score -= 10; // no partner and our stats wont rise, so don't use + } + + if (isDoubleBattle) + { + if (AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_PLUS || AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_MINUS) + { + if ((!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + && (!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))) + score -= 10; + } + else if (AI_DATA->abilities[battlerAtk] != ABILITY_PLUS && AI_DATA->abilities[battlerAtk] != ABILITY_MINUS) + { + score -= 10; // nor our or our partner's ability is plus/minus + } + } + break; + case EFFECT_ACUPRESSURE: + if (DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || AreBattlersStatsMaxed(battlerDef)) + score -= 10; + break; + case EFFECT_MAGNETIC_FLUX: + if (AI_DATA->abilities[battlerAtk] == ABILITY_PLUS || AI_DATA->abilities[battlerAtk] == ABILITY_MINUS) + { + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF)) + score -= 8; + } + else if (!isDoubleBattle) + { + score -= 10; // our stats wont rise from this move + } + + if (isDoubleBattle) + { + if (AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_PLUS || AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_MINUS) + { + if (!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_DEF)) + score -= 10; + else if (!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPDEF)) + score -= 8; + } + else if (AI_DATA->abilities[battlerAtk] != ABILITY_PLUS && AI_DATA->abilities[battlerAtk] != ABILITY_MINUS) + { + score -= 10; // nor our or our partner's ability is plus/minus + } + } + break; + // stat lowering effects + case EFFECT_ATTACK_DOWN: + case EFFECT_ATTACK_DOWN_2: + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ATK)) //|| !HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)) + score -= 10; + else if (AI_DATA->abilities[battlerDef] == ABILITY_HYPER_CUTTER) + score -= 10; + break; + case EFFECT_DEFENSE_DOWN: + case EFFECT_DEFENSE_DOWN_2: + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_DEF)) + score -= 10; + break; + case EFFECT_SPEED_DOWN: + case EFFECT_SPEED_DOWN_2: + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPEED)) + score -= 10; + else if (AI_DATA->abilities[battlerDef] == ABILITY_SPEED_BOOST) + score -= 10; + break; + case EFFECT_SPECIAL_ATTACK_DOWN: + case EFFECT_SPECIAL_ATTACK_DOWN_2: + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPATK)) //|| !HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)) + score -= 10; + break; + case EFFECT_SPECIAL_DEFENSE_DOWN: + case EFFECT_SPECIAL_DEFENSE_DOWN_2: + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPDEF)) + score -= 10; + break; + case EFFECT_ACCURACY_DOWN: + case EFFECT_ACCURACY_DOWN_2: + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ACC)) + score -= 10; + else if (AI_DATA->abilities[battlerDef] == ABILITY_KEEN_EYE) + score -= 8; + break; + case EFFECT_EVASION_DOWN: + case EFFECT_EVASION_DOWN_2: + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_EVASION)) + score -= 10; + break; + case EFFECT_TICKLE: + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ATK)) + score -= 10; + else if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_DEF)) + score -= 8; + break; + case EFFECT_VENOM_DRENCH: + if (!(gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)) + { + score -= 10; + } + else + { + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPEED)) + score -= 10; + else if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPATK)) + score -= 8; + else if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ATK)) + score -= 6; + } + break; + case EFFECT_NOBLE_ROAR: + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPATK)) + score -= 10; + else if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ATK)) + score -= 8; + break; + case EFFECT_CAPTIVATE: + { + u8 atkGender = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality); + u8 defGender = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality); + if (atkGender == MON_GENDERLESS || defGender == MON_GENDERLESS || atkGender == defGender) + score -= 10; + } + break; + // other + case EFFECT_HAZE: + if (PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + { + score -= 10; // partner already using haze + } + else + { + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerAtk].statStages[i] > DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerAtk)].statStages[i] > DEFAULT_STAT_STAGE) + score -= 10; // Don't want to reset our boosted stats + } + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerDef].statStages[i] < DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerDef)].statStages[i] < DEFAULT_STAT_STAGE) + score -= 10; //Don't want to reset enemy lowered stats + } + } + break; + //case EFFECT_BIDE: + //case EFFECT_SUPER_FANG: + //case EFFECT_RECHARGE: + case EFFECT_LEVEL_DAMAGE: + case EFFECT_PSYWAVE: + //case EFFECT_COUNTER: + //case EFFECT_FLAIL: + case EFFECT_RETURN: + case EFFECT_PRESENT: + case EFFECT_FRUSTRATION: + case EFFECT_SONICBOOM: + //case EFFECT_MIRROR_COAT: + case EFFECT_SKULL_BASH: + case EFFECT_FOCUS_PUNCH: + case EFFECT_SUPERPOWER: + //case EFFECT_ENDEAVOR: + case EFFECT_LOW_KICK: + // AI_CBM_HighRiskForDamage + if (AI_DATA->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < AI_EFFECTIVENESS_x2) + score -= 10; + break; + case EFFECT_COUNTER: + case EFFECT_MIRROR_COAT: + if (IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]) || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)) + score--; + if (predictedMove == MOVE_NONE || GetBattleMoveSplit(predictedMove) == SPLIT_STATUS + || DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), predictedMove)) + score -= 10; + break; + + case EFFECT_ROAR: + if (CountUsablePartyMons(battlerDef) == 0) + score -= 10; + else if (AI_DATA->abilities[battlerDef] == ABILITY_SUCTION_CUPS) + score -= 10; + break; + case EFFECT_TOXIC_THREAD: + if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPEED)) + score--; // may still want to just poison + //fallthrough + case EFFECT_POISON: + case EFFECT_TOXIC: + if (!AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_LIGHT_SCREEN: + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_LIGHTSCREEN + || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_REFLECT: + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_REFLECT + || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_AURORA_VEIL: + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_AURORA_VEIL + || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) + || !(gBattleWeather & B_WEATHER_HAIL)) + score -= 10; + break; + case EFFECT_OHKO: + if (B_SHEER_COLD_IMMUNITY >= GEN_7 + && move == MOVE_SHEER_COLD + && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) + return 0; + if (!ShouldTryOHKO(battlerAtk, battlerDef, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], move)) + score -= 10; + break; + case EFFECT_MIST: + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_MIST + || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_FOCUS_ENERGY: + if (gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY) + score -= 10; + break; + case EFFECT_CONFUSE: + case EFFECT_SWAGGER: + case EFFECT_FLATTER: + if (!AI_CanConfuse(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_PARALYZE: + if (!AI_CanParalyze(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_SUBSTITUTE: + if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || AI_DATA->abilities[battlerDef] == ABILITY_INFILTRATOR) + score -= 8; + else if (AI_DATA->hpPercents[battlerAtk] <= 25) + score -= 10; + else if (B_SOUND_SUBSTITUTE >= GEN_6 && TestMoveFlagsInMoveset(battlerDef, FLAG_SOUND)) + score -= 8; + break; + case EFFECT_LEECH_SEED: + if (gStatuses3[battlerDef] & STATUS3_LEECHSEED + || IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + else if (AI_DATA->abilities[battlerDef] == ABILITY_LIQUID_OOZE) + score -= 3; + break; + case EFFECT_DISABLE: + if (gDisableStructs[battlerDef].disableTimer == 0 + && (B_MENTAL_HERB >= GEN_5 && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) + && !PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + { + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first + { + if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) + score -= 10; // no anticipated move to disable + } + else if (predictedMove == MOVE_NONE) + { + score -= 10; + } + } + else + { + score -= 10; + } + break; + case EFFECT_ENCORE: + if (gDisableStructs[battlerDef].encoreTimer == 0 + && (B_MENTAL_HERB >= GEN_5 && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) + && !DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + { + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first + { + if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) + score -= 10; // no anticipated move to encore + } + else if (predictedMove == MOVE_NONE) + { + score -= 10; + } + } + else + { + score -= 10; + } + break; + case EFFECT_SNORE: + case EFFECT_SLEEP_TALK: + if (IsWakeupTurn(battlerAtk) || (!(gBattleMons[battlerAtk].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerAtk] != ABILITY_COMATOSE)) + score -= 10; // if mon will wake up, is not asleep, or is not comatose + break; + case EFFECT_MEAN_LOOK: + if (IsBattlerTrapped(battlerDef, TRUE) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_NIGHTMARE: + if (gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) + score -= 10; + else if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE) + score -= 8; + else if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_CURSE: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) + { + if (gBattleMons[battlerDef].status2 & STATUS2_CURSED + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + else if (AI_DATA->hpPercents[battlerAtk] <= 50) + score -= 6; + } + else // regular curse + { + if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF)) + score -= 8; + } + break; + case EFFECT_SPIKES: + if (gSideTimers[GetBattlerSide(battlerDef)].spikesAmount >= 3) + score -= 10; + else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) + && gSideTimers[GetBattlerSide(battlerDef)].spikesAmount == 2) + score -= 10; // only one mon needs to set up the last layer of Spikes + break; + case EFFECT_STEALTH_ROCK: + if (gSideTimers[GetBattlerSide(battlerDef)].stealthRockAmount > 0 + || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) //Only one mon needs to set up Stealth Rocks + score -= 10; + break; + case EFFECT_TOXIC_SPIKES: + if (gSideTimers[GetBattlerSide(battlerDef)].toxicSpikesAmount >= 2) + score -= 10; + else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) && gSideTimers[GetBattlerSide(battlerDef)].toxicSpikesAmount == 1) + score -= 10; // only one mon needs to set up the last layer of Toxic Spikes + break; + case EFFECT_STICKY_WEB: + if (gSideTimers[GetBattlerSide(battlerDef)].stickyWebAmount) + score -= 10; + else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) && gSideTimers[GetBattlerSide(battlerDef)].stickyWebAmount) + score -= 10; // only one mon needs to set up Sticky Web + break; + case EFFECT_FORESIGHT: + if (gBattleMons[battlerDef].status2 & STATUS2_FORESIGHT) + score -= 10; + else if (gBattleMons[battlerDef].statStages[STAT_EVASION] <= 4 + || !(IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 9; + break; + case EFFECT_PERISH_SONG: + if (isDoubleBattle) + { + if (CountUsablePartyMons(battlerAtk) == 0 + && AI_DATA->abilities[battlerAtk] != ABILITY_SOUNDPROOF + && AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] != ABILITY_SOUNDPROOF + && CountUsablePartyMons(FOE(battlerAtk)) >= 1) + { + score -= 10; //Don't wipe your team if you're going to lose + } + else if ((!IsBattlerAlive(FOE(battlerAtk)) || AI_DATA->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF + || gStatuses3[FOE(battlerAtk)] & STATUS3_PERISH_SONG) + && (!IsBattlerAlive(BATTLE_PARTNER(FOE(battlerAtk))) || AI_DATA->abilities[BATTLE_PARTNER(FOE(battlerAtk))] == ABILITY_SOUNDPROOF + || gStatuses3[BATTLE_PARTNER(FOE(battlerAtk))] & STATUS3_PERISH_SONG)) + { + score -= 10; //Both enemies are perish songed + } + else if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + { + score -= 10; + } + } + else + { + if (CountUsablePartyMons(battlerAtk) == 0 && AI_DATA->abilities[battlerAtk] != ABILITY_SOUNDPROOF + && CountUsablePartyMons(battlerDef) >= 1) + score -= 10; + + if (gStatuses3[FOE(battlerAtk)] & STATUS3_PERISH_SONG || AI_DATA->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF) + score -= 10; + } + break; + case EFFECT_SANDSTORM: + if (gBattleWeather & (B_WEATHER_SANDSTORM | B_WEATHER_PRIMAL_ANY) + || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) + score -= 8; + break; + case EFFECT_SUNNY_DAY: + if (gBattleWeather & (B_WEATHER_SUN | B_WEATHER_PRIMAL_ANY) + || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) + score -= 8; + break; + case EFFECT_RAIN_DANCE: + if (gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_PRIMAL_ANY) + || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) + score -= 8; + break; + case EFFECT_HAIL: + if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) + || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) + score -= 8; + break; + case EFFECT_ATTRACT: + if (!AI_CanBeInfatuated(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], + GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality), + GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality))) + score -= 10; + break; + case EFFECT_SAFEGUARD: + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_SAFEGUARD + || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_MAGNITUDE: + if (AI_DATA->abilities[battlerDef] == ABILITY_LEVITATE) + score -= 10; + break; + case EFFECT_PARTING_SHOT: + if (CountUsablePartyMons(battlerAtk) == 0) + score -= 10; + break; + case EFFECT_BATON_PASS: + if (CountUsablePartyMons(battlerAtk) == 0) + score -= 10; + else if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE + || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK)) + || AnyStatIsRaised(battlerAtk)) + break; + else + score -= 6; + break; + case EFFECT_HIT_ESCAPE: + break; + case EFFECT_RAPID_SPIN: + if ((gBattleMons[battlerAtk].status2 & STATUS2_WRAPPED) || (gStatuses3[battlerAtk] & STATUS3_LEECHSEED)) + break; // check damage/accuracy + //Spin checks + if (!(gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY)) + score -= 6; + break; + case EFFECT_BELLY_DRUM: + if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) + score -= 10; + else if (AI_DATA->hpPercents[battlerAtk] <= 60) + score -= 10; + break; + case EFFECT_FUTURE_SIGHT: + if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_FUTUREATTACK + || gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_FUTUREATTACK) + score -= 12; + else + score += 5; + break; + case EFFECT_TELEPORT: + score -= 10; + break; + case EFFECT_FAKE_OUT: + if (!gDisableStructs[battlerAtk].isFirstTurn) + { + score -= 10; + } + else if (move == MOVE_FAKE_OUT) // filter out first impression + { + if ((AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CHOICE_BAND || AI_DATA->abilities[battlerAtk] == ABILITY_GORILLA_TACTICS) + && (CountUsablePartyMons(battlerDef) > 0 || !CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0))) + { + if (CountUsablePartyMons(battlerAtk) == 0) + score -= 10; // Don't lock the attacker into Fake Out if they can't switch out afterwards. + } + } + break; + case EFFECT_STOCKPILE: + if (gDisableStructs[battlerAtk].stockpileCounter >= 3) + score -= 10; + break; + case EFFECT_SPIT_UP: + if (gDisableStructs[battlerAtk].stockpileCounter <= 1) + score -= 10; + break; + case EFFECT_SWALLOW: + if (gDisableStructs[battlerAtk].stockpileCounter == 0) + { + score -= 10; + } + else + { + if (AtMaxHp(battlerAtk)) + score -= 10; + else if (AI_DATA->hpPercents[battlerAtk] >= 80) + score -= 5; // do it if nothing better + } + break; + case EFFECT_TORMENT: + if (gBattleMons[battlerDef].status2 & STATUS2_TORMENT + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + { + score -= 10; + break; + } + + if (B_MENTAL_HERB >= GEN_5 && AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_MENTAL_HERB) + score -= 6; + break; + case EFFECT_WILL_O_WISP: + if (!AI_CanBurn(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_MEMENTO: + if (CountUsablePartyMons(battlerAtk) == 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + else if (gBattleMons[battlerDef].statStages[STAT_ATK] == MIN_STAT_STAGE && gBattleMons[battlerDef].statStages[STAT_SPATK] == MIN_STAT_STAGE) + score -= 10; + break; + case EFFECT_FOLLOW_ME: + case EFFECT_HELPING_HAND: + if (!isDoubleBattle + || !IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) + || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) + || (AI_DATA->partnerMove != MOVE_NONE && IS_MOVE_STATUS(AI_DATA->partnerMove)) + || *(gBattleStruct->monToSwitchIntoId + BATTLE_PARTNER(battlerAtk)) != PARTY_SIZE) //Partner is switching out. + score -= 10; + break; + case EFFECT_TRICK: + case EFFECT_KNOCK_OFF: + if (AI_DATA->abilities[battlerDef] == ABILITY_STICKY_HOLD) + score -= 10; + break; + case EFFECT_INGRAIN: + if (gStatuses3[battlerAtk] & STATUS3_ROOTED) + score -= 10; + break; + case EFFECT_AQUA_RING: + if (gStatuses3[battlerAtk] & STATUS3_AQUA_RING) + score -= 10; + break; + case EFFECT_RECYCLE: + if (GetUsedHeldItem(battlerAtk) == 0 || gBattleMons[battlerAtk].item != 0) + score -= 10; + break; + case EFFECT_IMPRISON: + if (gStatuses3[battlerAtk] & STATUS3_IMPRISONED_OTHERS) + score -= 10; + break; + case EFFECT_REFRESH: + if (!(gBattleMons[battlerDef].status1 & (STATUS1_PSN_ANY | STATUS1_BURN | STATUS1_PARALYSIS))) + score -= 10; + break; + case EFFECT_PSYCHO_SHIFT: + if (gBattleMons[battlerAtk].status1 & STATUS1_PSN_ANY && !AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + score -= 10; + else if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && !AI_CanBurn(battlerAtk, battlerDef, + AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + else if (gBattleMons[battlerAtk].status1 & STATUS1_PARALYSIS && !AI_CanParalyze(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + score -= 10; + else if (gBattleMons[battlerAtk].status1 & STATUS1_SLEEP && !AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + score -= 10; + else + score -= 10; // attacker has no status to transmit + break; + case EFFECT_MUD_SPORT: + if (gFieldStatuses & STATUS_FIELD_MUDSPORT + || gStatuses4[battlerAtk] & STATUS4_MUD_SPORT + || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_WATER_SPORT: + if (gFieldStatuses & STATUS_FIELD_WATERSPORT + || gStatuses4[battlerAtk] & STATUS4_WATER_SPORT + || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_ABSORB: + if (AI_DATA->abilities[battlerDef] == ABILITY_LIQUID_OOZE) + score -= 6; + break; + case EFFECT_STRENGTH_SAP: + if (AI_DATA->abilities[battlerDef] == ABILITY_CONTRARY) + score -= 10; + else if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ATK)) + score -= 10; + break; + case EFFECT_COPYCAT: + case EFFECT_MIRROR_MOVE: + return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score); + case EFFECT_FLOWER_SHIELD: + if (!IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) + && !(isDoubleBattle && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS))) + score -= 10; + break; + case EFFECT_AROMATIC_MIST: + if (!isDoubleBattle || gBattleMons[BATTLE_PARTNER(battlerAtk)].hp == 0 || !BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPDEF)) + score -= 10; + break; + case EFFECT_BIDE: + if (!HasDamagingMove(battlerDef) + || AI_DATA->hpPercents[battlerAtk] < 30 //Close to death + || gBattleMons[battlerDef].status1 & (STATUS1_SLEEP | STATUS1_FREEZE)) //No point in biding if can't take damage + score -= 10; + break; + case EFFECT_HIT_SWITCH_TARGET: + if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; // don't scare away pokemon twice + else if (AI_DATA->hpPercents[battlerDef] < 10 && GetBattlerSecondaryDamage(battlerDef)) + score -= 10; // don't blow away mon that will faint soon + else if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) + score -= 10; + break; + case EFFECT_CONVERSION: + //Check first move type + if (IS_BATTLER_OF_TYPE(battlerAtk, gBattleMoves[gBattleMons[battlerAtk].moves[0]].type)) + score -= 10; + break; + case EFFECT_REST: + if (!AI_CanSleep(battlerAtk, AI_DATA->abilities[battlerAtk])) + score -= 10; + //fallthrough + case EFFECT_RESTORE_HP: + case EFFECT_SOFTBOILED: + case EFFECT_ROOST: + if (AtMaxHp(battlerAtk)) + score -= 10; + else if (AI_DATA->hpPercents[battlerAtk] >= 90) + score -= 9; //No point in healing, but should at least do it if nothing better + break; + case EFFECT_MORNING_SUN: + case EFFECT_SYNTHESIS: + case EFFECT_MOONLIGHT: + if (AI_WeatherHasEffect() && (gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_HAIL))) + score -= 3; + else if (AtMaxHp(battlerAtk)) + score -= 10; + else if (AI_DATA->hpPercents[battlerAtk] >= 90) + score -= 9; //No point in healing, but should at least do it if nothing better + break; + case EFFECT_PURIFY: + if (!(gBattleMons[battlerDef].status1 & STATUS1_ANY)) + score -= 10; + else if (battlerDef == BATTLE_PARTNER(battlerAtk)) + break; //Always heal your ally + else if (AtMaxHp(battlerAtk)) + score -= 10; + else if (AI_DATA->hpPercents[battlerAtk] >= 90) + score -= 8; //No point in healing, but should at least do it if nothing better + break; + case EFFECT_SUPER_FANG: + if (AI_DATA->hpPercents[battlerDef] < 50) + score -= 4; + break; + case EFFECT_RECOIL_IF_MISS: + if (AI_DATA->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_GetMoveAccuracy(battlerAtk, battlerDef, move) < 75) + score -= 6; + break; + case EFFECT_RECOIL_25: + if (AI_DATA->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->abilities[battlerAtk] != ABILITY_ROCK_HEAD) + { + u32 recoilDmg = max(1, AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 4); + if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex)) + score -= 10; + break; + } + break; + case EFFECT_RECOIL_33: + case EFFECT_RECOIL_33_STATUS: + if (AI_DATA->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->abilities[battlerAtk] != ABILITY_ROCK_HEAD) + { + u32 recoilDmg = max(1, AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 3); + if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex)) + score -= 10; + break; + } + break; + case EFFECT_RECOIL_50: + if (AI_DATA->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->abilities[battlerAtk] != ABILITY_ROCK_HEAD) + { + u32 recoilDmg = max(1, AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 2); + if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex)) + score -= 10; + break; + } + break; + case EFFECT_TEETER_DANCE: + if (((gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) + || (!DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move) && AI_DATA->abilities[battlerDef] == ABILITY_OWN_TEMPO) + || (IsBattlerGrounded(battlerDef) && AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) + || (DoesSubstituteBlockMove(battlerAtk, battlerDef, move))) + && ((gBattleMons[BATTLE_PARTNER(battlerDef)].status2 & STATUS2_CONFUSION) + || (!DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move) && AI_DATA->abilities[BATTLE_PARTNER(battlerDef)] == ABILITY_OWN_TEMPO) + || (IsBattlerGrounded(BATTLE_PARTNER(battlerDef)) && AI_IsTerrainAffected(BATTLE_PARTNER(battlerDef), STATUS_FIELD_MISTY_TERRAIN)) + || (DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), move)))) + { + score -= 10; + } + break; + case EFFECT_TRANSFORM: + if (gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED + || (gBattleMons[battlerDef].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE))) //Leave out Illusion b/c AI is supposed to be fooled + score -= 10; + break; + case EFFECT_TWO_TURNS_ATTACK: + if (AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_POWER_HERB && CanTargetFaintAi(battlerDef, battlerAtk)) + score -= 6; + break; + case EFFECT_RECHARGE: + if (AI_DATA->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < AI_EFFECTIVENESS_x2) + score -= 10; + else if (AI_DATA->abilities[battlerAtk] != ABILITY_TRUANT + && !CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0)) + score -= 2; + break; + case EFFECT_SPITE: + case EFFECT_MIMIC: + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first + { + if (gLastMoves[battlerDef] == MOVE_NONE + || gLastMoves[battlerDef] == 0xFFFF) + score -= 10; + } + else if (predictedMove == MOVE_NONE) + { + // TODO predicted move separate from gLastMoves + score -= 10; + } + break; + case EFFECT_METRONOME: + break; + case EFFECT_ENDEAVOR: + case EFFECT_PAIN_SPLIT: + if (gBattleMons[battlerAtk].hp > (gBattleMons[battlerAtk].hp + gBattleMons[battlerDef].hp) / 2) + score -= 10; + break; + + case EFFECT_CONVERSION_2: + //TODO + break; + case EFFECT_LOCK_ON: + if (gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS + || AI_DATA->abilities[battlerAtk] == ABILITY_NO_GUARD + || AI_DATA->abilities[battlerDef] == ABILITY_NO_GUARD + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_LASER_FOCUS: + if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS) + score -= 10; + else if (AI_DATA->abilities[battlerDef] == ABILITY_SHELL_ARMOR || AI_DATA->abilities[battlerDef] == ABILITY_BATTLE_ARMOR) + score -= 8; + break; + case EFFECT_SKETCH: + if (gLastMoves[battlerDef] == MOVE_NONE) + score -= 10; + break; + case EFFECT_DESTINY_BOND: + if (gBattleMons[battlerDef].status2 & STATUS2_DESTINY_BOND) + score -= 10; + break; + case EFFECT_FALSE_SWIPE: + // TODO + break; + case EFFECT_HEAL_BELL: + if (!AnyPartyMemberStatused(battlerAtk, TestMoveFlags(move, FLAG_SOUND)) || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_HIT_PREVENT_ESCAPE: + break; + case EFFECT_ENDURE: + if (gBattleMons[battlerAtk].hp == 1 || GetBattlerSecondaryDamage(battlerAtk)) //Don't use Endure if you'll die after using it + score -= 10; + break; + case EFFECT_PROTECT: + { + bool32 decreased = FALSE; + switch (move) + { + case MOVE_QUICK_GUARD: + case MOVE_WIDE_GUARD: + case MOVE_CRAFTY_SHIELD: + if (!isDoubleBattle) + { + score -= 10; + decreased = TRUE; + } + break; + case MOVE_MAT_BLOCK: + if (!gDisableStructs[battlerAtk].isFirstTurn) + { + score -= 10; + decreased = TRUE; + } + break; + } // move check + + if (decreased) + break; + if (IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef])) + { + score -= 10; + break; + } + + if (move != MOVE_QUICK_GUARD + && move != MOVE_WIDE_GUARD + && move != MOVE_CRAFTY_SHIELD) //These moves have infinite usage + { + if (GetBattlerSecondaryDamage(battlerAtk) >= gBattleMons[battlerAtk].hp + && AI_DATA->abilities[battlerDef] != ABILITY_MOXIE + && AI_DATA->abilities[battlerDef] != ABILITY_BEAST_BOOST) + { + score -= 10; //Don't protect if you're going to faint after protecting + } + else if (gDisableStructs[battlerAtk].protectUses == 1 && Random() % 100 < 50) + { + if (!isDoubleBattle) + score -= 6; + else + score -= 10; //Don't try double protecting in doubles + } + else if (gDisableStructs[battlerAtk].protectUses >= 2) + { + score -= 10; + } + } + + /*if (AI_THINKING_STRUCT->aiFlags == AI_SCRIPT_CHECK_BAD_MOVE //Only basic AI + && IS_DOUBLE_BATTLE) //Make the regular AI know how to use Protect minimally in Doubles + { + u8 shouldProtect = ShouldProtect(battlerAtk, battlerDef, move); + if (shouldProtect == USE_PROTECT || shouldProtect == PROTECT_FROM_FOES) + IncreaseFoeProtectionViability(&viability, 0xFF, battlerAtk, battlerDef); + else if (shouldProtect == PROTECT_FROM_ALLIES) + IncreaseAllyProtectionViability(&viability, 0xFF); + }*/ + } + break; + case EFFECT_MIRACLE_EYE: + if (gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED) + score -= 10; + + if (gBattleMons[battlerDef].statStages[STAT_EVASION] <= 4 + || !(IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK)) + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 9; + break; + case EFFECT_BURN_UP: + if (!IS_BATTLER_OF_TYPE(battlerAtk, TYPE_FIRE)) + score -= 10; + break; + case EFFECT_DEFOG: + if (gSideStatuses[GetBattlerSide(battlerDef)] + & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST) + || gSideTimers[GetBattlerSide(battlerDef)].auroraVeilTimer != 0 + || gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY) + { + if (PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + { + score -= 10; //Only need one hazards removal + break; + } + } + + if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_HAZARDS_ANY) + { + score -= 10; //Don't blow away opposing hazards + break; + } + + if (isDoubleBattle) + { + if (IsHazardMoveEffect(gBattleMoves[AI_DATA->partnerMove].effect) // partner is going to set up hazards + && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerAtk, AI_DATA->partnerMove) == AI_IS_FASTER) // partner is going to set up before the potential Defog + { + score -= 10; + break; // Don't use Defog if partner is going to set up hazards + } + } + + // evasion check + if (gBattleMons[battlerDef].statStages[STAT_EVASION] == MIN_STAT_STAGE + || ((AI_DATA->abilities[battlerDef] == ABILITY_CONTRARY) && !IsTargetingPartner(battlerAtk, battlerDef))) // don't want to raise target stats unless its your partner + score -= 10; + break; + + case EFFECT_PSYCH_UP: // haze stats check + { + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerAtk].statStages[i] > DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerAtk)].statStages[i] > DEFAULT_STAT_STAGE) + score -= 10; // Don't want to reset our boosted stats + } + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerDef].statStages[i] < DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerDef)].statStages[i] < DEFAULT_STAT_STAGE) + score -= 10; //Don't want to copy enemy lowered stats + } + } + break; + case EFFECT_SPECTRAL_THIEF: + break; + case EFFECT_SOLAR_BEAM: + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB + || (AI_WeatherHasEffect() && gBattleWeather & B_WEATHER_SUN && AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_UTILITY_UMBRELLA)) + break; + if (CanTargetFaintAi(battlerDef, battlerAtk)) //Attacker can be knocked out + score -= 4; + break; + case EFFECT_SEMI_INVULNERABLE: + if (predictedMove != MOVE_NONE + && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + && gBattleMoves[predictedMove].effect == EFFECT_SEMI_INVULNERABLE) + score -= 10; // Don't Fly/dig/etc if opponent is going to fly/dig/etc after you + + if (BattlerWillFaintFromWeather(battlerAtk, AI_DATA->abilities[battlerAtk]) + && (move == MOVE_FLY || move == MOVE_BOUNCE)) + score -= 10; // Attacker will faint while in the air + break; + case EFFECT_HEALING_WISH: //healing wish, lunar dance + if (CountUsablePartyMons(battlerAtk) == 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + else if (IsPartyFullyHealedExceptBattler(battlerAtk)) + score -= 10; + break; + case EFFECT_FINAL_GAMBIT: + if (CountUsablePartyMons(battlerAtk) == 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_NATURE_POWER: + return AI_CheckBadMove(battlerAtk, battlerDef, GetNaturePowerMove(), score); + case EFFECT_TAUNT: + if (gDisableStructs[battlerDef].tauntTimer > 0 + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score--; + break; + case EFFECT_BESTOW: + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_NONE + || !CanBattlerGetOrLoseItem(battlerAtk, gBattleMons[battlerAtk].item)) // AI knows its own item + score -= 10; + break; + case EFFECT_ROLE_PLAY: + if (AI_DATA->abilities[battlerAtk] == AI_DATA->abilities[battlerDef] + || AI_DATA->abilities[battlerDef] == ABILITY_NONE + || IsRolePlayBannedAbilityAtk(AI_DATA->abilities[battlerAtk]) + || IsRolePlayBannedAbility(AI_DATA->abilities[battlerDef])) + score -= 10; + else if (IsAbilityOfRating(AI_DATA->abilities[battlerAtk], 5)) + score -= 4; + break; + case EFFECT_WISH: + if (gWishFutureKnock.wishCounter[battlerAtk] != 0) + score -= 10; + break; + case EFFECT_ASSIST: + if (CountUsablePartyMons(battlerAtk) == 0) + score -= 10; // no teammates to assist from + break; + case EFFECT_MAGIC_COAT: + if (!TestMoveFlagsInMoveset(battlerDef, FLAG_MAGIC_COAT_AFFECTED)) + score -= 10; + break; + case EFFECT_BELCH: + if (ItemId_GetPocket(GetUsedHeldItem(battlerAtk)) != POCKET_BERRIES) + score -= 10; // attacker has not consumed a berry + break; + case EFFECT_YAWN: + if (gStatuses3[battlerDef] & STATUS3_YAWN) + score -= 10; + else if (!AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_SKILL_SWAP: + if (AI_DATA->abilities[battlerAtk] == ABILITY_NONE || AI_DATA->abilities[battlerDef] == ABILITY_NONE + || IsSkillSwapBannedAbility(AI_DATA->abilities[battlerAtk]) || IsSkillSwapBannedAbility(AI_DATA->abilities[battlerDef])) + score -= 10; + break; + case EFFECT_WORRY_SEED: + if (AI_DATA->abilities[battlerDef] == ABILITY_INSOMNIA + || IsWorrySeedBannedAbility(AI_DATA->abilities[battlerDef])) + score -= 10; + break; + case EFFECT_GASTRO_ACID: + if (gStatuses3[battlerDef] & STATUS3_GASTRO_ACID + || IsGastroAcidBannedAbility(AI_DATA->abilities[battlerDef])) + score -= 10; + break; + case EFFECT_ENTRAINMENT: + if (AI_DATA->abilities[battlerAtk] == ABILITY_NONE + || IsEntrainmentBannedAbilityAttacker(AI_DATA->abilities[battlerAtk]) + || IsEntrainmentTargetOrSimpleBeamBannedAbility(AI_DATA->abilities[battlerDef])) + score -= 10; + break; + case EFFECT_CORE_ENFORCER: + break; + case EFFECT_SIMPLE_BEAM: + if (AI_DATA->abilities[battlerDef] == ABILITY_SIMPLE + || IsEntrainmentTargetOrSimpleBeamBannedAbility(AI_DATA->abilities[battlerDef])) + score -= 10; + break; + case EFFECT_SNATCH: + if (!TestMoveFlagsInMoveset(battlerDef, FLAG_SNATCH_AFFECTED) + || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_POWER_TRICK: + if (IsTargetingPartner(battlerAtk, battlerDef)) + score -= 10; + else if (gBattleMons[battlerAtk].defense >= gBattleMons[battlerAtk].attack && !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 10; + break; + case EFFECT_POWER_SWAP: // Don't use if attacker's stat stages are higher than opponents + if (IsTargetingPartner(battlerAtk, battlerDef)) + score -= 10; + else if (gBattleMons[battlerAtk].statStages[STAT_ATK] >= gBattleMons[battlerDef].statStages[STAT_ATK] + && gBattleMons[battlerAtk].statStages[STAT_SPATK] >= gBattleMons[battlerDef].statStages[STAT_SPATK]) + score -= 10; + break; + case EFFECT_GUARD_SWAP: // Don't use if attacker's stat stages are higher than opponents + if (IsTargetingPartner(battlerAtk, battlerDef)) + score -= 10; + else if (gBattleMons[battlerAtk].statStages[STAT_DEF] >= gBattleMons[battlerDef].statStages[STAT_DEF] + && gBattleMons[battlerAtk].statStages[STAT_SPDEF] >= gBattleMons[battlerDef].statStages[STAT_SPDEF]) + score -= 10; + break; + case EFFECT_SPEED_SWAP: + if (IsTargetingPartner(battlerAtk, battlerDef)) + { + score -= 10; + } + else + { + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && (gBattleMons[battlerAtk].speed <= gBattleMons[battlerDef].speed)) + score -= 10; + else if (gBattleMons[battlerAtk].speed >= gBattleMons[battlerDef].speed) + score -= 10; + } + break; + case EFFECT_HEART_SWAP: + if (IsTargetingPartner(battlerAtk, battlerDef)) + { + score -= 10; + } + else + { + u32 atkPositiveStages = CountPositiveStatStages(battlerAtk); + u32 atkNegativeStages = CountNegativeStatStages(battlerAtk); + u32 defPositiveStages = CountPositiveStatStages(battlerDef); + u32 defNegativeStages = CountNegativeStatStages(battlerDef); + + if (atkPositiveStages >= defPositiveStages && atkNegativeStages <= defNegativeStages) + score -= 10; + break; + } + break; + case EFFECT_POWER_SPLIT: + if (IsTargetingPartner(battlerAtk, battlerDef)) + { + score -= 10; + } + else + { + u8 atkAttack = gBattleMons[battlerAtk].attack; + u8 defAttack = gBattleMons[battlerDef].attack; + u8 atkSpAttack = gBattleMons[battlerAtk].spAttack; + u8 defSpAttack = gBattleMons[battlerDef].spAttack; + + if (atkAttack + atkSpAttack >= defAttack + defSpAttack) // Combined attacker stats are > than combined target stats + score -= 10; + break; + } + break; + case EFFECT_GUARD_SPLIT: + if (IsTargetingPartner(battlerAtk, battlerDef)) + { + score -= 10; + } + else + { + u8 atkDefense = gBattleMons[battlerAtk].defense; + u8 defDefense = gBattleMons[battlerDef].defense; + u8 atkSpDefense = gBattleMons[battlerAtk].spDefense; + u8 defSpDefense = gBattleMons[battlerDef].spDefense; + + if (atkDefense + atkSpDefense >= defDefense + defSpDefense) //Combined attacker stats are > than combined target stats + score -= 10; + break; + } + break; + case EFFECT_ME_FIRST: + if (predictedMove != MOVE_NONE) + { + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + score -= 10; // Target is predicted to go first, Me First will fail + else + return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score); + } + else + { + score -= 10; //Target is predicted to switch most likely + } + break; + case EFFECT_NATURAL_GIFT: + if (AI_DATA->abilities[battlerAtk] == ABILITY_KLUTZ + || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM + || GetPocketByItemId(gBattleMons[battlerAtk].item) != POCKET_BERRIES) + score -= 10; + break; + case EFFECT_GRASSY_TERRAIN: + if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove) || gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + score -= 10; + break; + case EFFECT_ELECTRIC_TERRAIN: + if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove) || gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + score -= 10; + break; + case EFFECT_PSYCHIC_TERRAIN: + if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove) || gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + score -= 10; + break; + case EFFECT_MISTY_TERRAIN: + if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove) || gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + score -= 10; + break; + case EFFECT_PLEDGE: + if (isDoubleBattle && gBattleMons[BATTLE_PARTNER(battlerAtk)].hp > 0) + { + if (AI_DATA->partnerMove != MOVE_NONE + && gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_PLEDGE + && move != AI_DATA->partnerMove) // Different pledge moves + { + if (gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & (STATUS1_SLEEP | STATUS1_FREEZE)) + // && gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 != 1) // Will wake up this turn - how would AI know + score -= 10; // Don't use combo move if your partner will cause failure + } + } + break; + case EFFECT_TRICK_ROOM: + if (PartnerMoveIs(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove, MOVE_TRICK_ROOM)) + { + score -= 10; + } + else if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM) // Trick Room Up + { + if (GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) // Attacker side slower than target side + score -= 10; // Keep the Trick Room up + } + else + { + if (GetBattlerSideSpeedAverage(battlerAtk) >= GetBattlerSideSpeedAverage(battlerDef)) // Attacker side faster than target side + score -= 10; // Keep the Trick Room down + } + break; + case EFFECT_MAGIC_ROOM: + if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_WONDER_ROOM: + if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_GRAVITY: + if ((gFieldStatuses & STATUS_FIELD_GRAVITY + && !IS_BATTLER_OF_TYPE(battlerAtk, TYPE_FLYING) + && AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_AIR_BALLOON) // Should revert Gravity in this case + || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_ION_DELUGE: + if (gFieldStatuses & STATUS_FIELD_ION_DELUGE + || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_FLING: + if (!CanFling(battlerAtk)) + { + score -= 10; + } + else + { + /* TODO Fling + u8 effect = gFlingTable[gBattleMons[battlerAtk].item].effect; + switch (effect) + { + case MOVE_EFFECT_BURN: + if (!AI_CanBurn(battlerAtk, battlerDef, BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case MOVE_EFFECT_PARALYSIS: + if (!AI_CanParalyze(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + score -= 10; + break; + case MOVE_EFFECT_POISON: + if (!AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + score -= 10; + break; + case MOVE_EFFECT_TOXIC: + if (!AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + score -= 10; + break; + case MOVE_EFFECT_FREEZE: + if (!CanBeFrozen(battlerDef, TRUE) + || MoveBlockedBySubstitute(move, battlerAtk, battlerDef)) + score -= 10; + break; + }*/ + } + break; + case EFFECT_EMBARGO: + if (AI_DATA->abilities[battlerDef] == ABILITY_KLUTZ + || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM + || gDisableStructs[battlerDef].embargoTimer != 0 + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_POWDER: + if (!HasMoveWithType(battlerDef, TYPE_FIRE) + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_TELEKINESIS: + if (gStatuses3[battlerDef] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN) + || gFieldStatuses & STATUS_FIELD_GRAVITY + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_IRON_BALL + || IsTelekinesisBannedSpecies(gBattleMons[battlerDef].species) + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_THROAT_CHOP: + break; + case EFFECT_HEAL_BLOCK: + if (gDisableStructs[battlerDef].healBlockTimer != 0 + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_SOAK: + if (PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove) + || (gBattleMons[battlerDef].type1 == TYPE_WATER + && gBattleMons[battlerDef].type2 == TYPE_WATER + && gBattleMons[battlerDef].type3 == TYPE_MYSTERY)) + 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, AI_DATA->partnerMove)) + score -= 10; + break; + case MOVE_FORESTS_CURSE: + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + } + break; + case EFFECT_HIT_ENEMY_HEAL_ALLY: // pollen puff + if (IsTargetingPartner(battlerAtk, battlerDef)) + { + if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK) + return 0; + if (AtMaxHp(battlerDef)) + score -= 10; + else if (gBattleMons[battlerDef].hp > gBattleMons[battlerDef].maxHP / 2) + score -= 5; + break; + } + // fallthrough + case EFFECT_HEAL_PULSE: // and floral healing + if (!IsTargetingPartner(battlerAtk, battlerDef)) // Don't heal enemies + { + score -= 10; + } + else + { + if (AtMaxHp(battlerDef)) + score -= 10; + else if (gBattleMons[battlerDef].hp > gBattleMons[battlerDef].maxHP / 2) + score -= 5; + } + break; + case EFFECT_ELECTRIFY: + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER + //|| GetMoveTypeSpecial(battlerDef, predictedMove) == TYPE_ELECTRIC // Move will already be electric type + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_TOPSY_TURVY: + if (!IsTargetingPartner(battlerAtk, battlerDef)) + { + u8 targetPositiveStages = CountPositiveStatStages(battlerDef); + u8 targetNegativeStages = CountNegativeStatStages(battlerDef); + + if (targetPositiveStages == 0 //No good stat changes to make bad + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + + else if (targetNegativeStages < targetPositiveStages) + score -= 5; //More stages would be made positive than negative + } + break; + case EFFECT_FAIRY_LOCK: + if ((gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_DO_NOTHING: + score -= 10; + break; + case EFFECT_INSTRUCT: + { + u16 instructedMove; + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + instructedMove = predictedMove; + else + instructedMove = gLastMoves[battlerDef]; + + if (instructedMove == MOVE_NONE + || IsInstructBannedMove(instructedMove) + || MoveRequiresRecharging(instructedMove) + || MoveCallsOtherMove(instructedMove) + || IsZMove(instructedMove) + || (gLockedMoves[battlerDef] != 0 && gLockedMoves[battlerDef] != 0xFFFF) + || gBattleMons[battlerDef].status2 & STATUS2_MULTIPLETURNS + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + { + score -= 10; + } + else if (isDoubleBattle) + { + if (!IsTargetingPartner(battlerAtk, battlerDef)) + score -= 10; + } + else + { + if (AI_GetBattlerMoveTargetType(battlerDef, instructedMove) & (MOVE_TARGET_SELECTED + | MOVE_TARGET_DEPENDS + | MOVE_TARGET_RANDOM + | MOVE_TARGET_BOTH + | MOVE_TARGET_FOES_AND_ALLY + | MOVE_TARGET_OPPONENTS_FIELD) + && instructedMove != MOVE_MIND_BLOWN && instructedMove != MOVE_STEEL_BEAM) + score -= 10; //Don't force the enemy to attack you again unless it can kill itself with Mind Blown + else if (instructedMove != MOVE_MIND_BLOWN) + score -= 5; //Do something better + } + } + break; + case EFFECT_QUASH: + if (!isDoubleBattle + || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_AFTER_YOU: + if (!IsTargetingPartner(battlerAtk, battlerDef) + || !isDoubleBattle + || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_SUCKER_PUNCH: + if (predictedMove != MOVE_NONE) + { + if (IS_MOVE_STATUS(predictedMove) || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent going first + score -= 10; + } + break; + case EFFECT_TAILWIND: + if (gSideTimers[GetBattlerSide(battlerAtk)].tailwindTimer != 0 + || PartnerMoveIs(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove, MOVE_TAILWIND) + || (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer > 1)) // Trick Room active and not ending this turn + score -= 10; + break; + case EFFECT_LUCKY_CHANT: + if (gSideTimers[GET_BATTLER_SIDE(battlerAtk)].luckyChantTimer != 0 + || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; + break; + case EFFECT_MAGNET_RISE: + if (gFieldStatuses & STATUS_FIELD_GRAVITY + || gDisableStructs[battlerAtk].magnetRiseTimer != 0 + || AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_IRON_BALL + || gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_MAGNET_RISE | STATUS3_SMACKED_DOWN) + || !IsBattlerGrounded(battlerAtk)) + score -= 10; + break; + case EFFECT_CAMOUFLAGE: + if (!CanCamouflage(battlerAtk)) + score -= 10; + break; + case EFFECT_LAST_RESORT: + if (!CanUseLastResort(battlerAtk)) + score -= 10; + break; + case EFFECT_SYNCHRONOISE: + //Check holding ring target or is of same type + if (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_RING_TARGET + || IS_BATTLER_OF_TYPE(battlerDef, gBattleMons[battlerAtk].type1) + || IS_BATTLER_OF_TYPE(battlerDef, gBattleMons[battlerAtk].type2) + || IS_BATTLER_OF_TYPE(battlerDef, gBattleMons[battlerAtk].type3)) + break; + else + score -= 10; + break; + case EFFECT_ERUPTION: + if (effectiveness <= AI_EFFECTIVENESS_x0_5) + score--; + if (AI_DATA->hpPercents[battlerDef] < 50) + score--; + break; + case EFFECT_VITAL_THROW: + if (WillAIStrikeFirst() && AI_DATA->hpPercents[battlerAtk] < 40) + score--; // don't want to move last + break; + case EFFECT_FLAIL: + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER // Opponent should go first + || AI_DATA->hpPercents[battlerAtk] > 50) + score -= 4; + break; + //TODO + //case EFFECT_PLASMA_FISTS: + //break; + //case EFFECT_SHELL_TRAP: + //break; + //case EFFECT_BEAK_BLAST: + //break; + case EFFECT_SKY_DROP: + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_FLYING)) + score -= 10; + if (BattlerWillFaintFromWeather(battlerAtk, AI_DATA->abilities[battlerAtk]) + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) + || GetBattlerWeight(battlerDef) >= 2000) //200.0 kg + score -= 10; + break; + /*case EFFECT_NO_RETREAT: + if (TrappedByNoRetreat(battlerAtk)) + score -= 10; + break; + case EFFECT_EXTREME_EVOBOOST: + if (MainStatsMaxed(battlerAtk)) + score -= 10; + break; + case EFFECT_CLANGOROUS_SOUL: + if (gBattleMons[battlerAtk].hp <= gBattleMons[battlerAtk].maxHP / 3) + score -= 10; + break;*/ + case EFFECT_PLACEHOLDER: + return 0; // cannot even select + } // move effect checks + + if (score < 0) + score = 0; + + return score; +} + +static s16 AI_TryToFaint(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + if (IsTargetingPartner(battlerAtk, battlerDef)) + return score; + + if (gBattleMoves[move].power == 0) + return score; // can't make anything faint with no power + + if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0) && gBattleMoves[move].effect != EFFECT_EXPLOSION) + { + // this move can faint the target + if (!WillAIStrikeFirst() || GetMovePriority(battlerAtk, move) > 0) + score += 4; // we go first or we're using priority move + else + score += 2; + } + else + { + // this move isn't expected to faint the target + if (TestMoveFlags(move, FLAG_HIGH_CRIT)) + score += 2; // crit makes it more likely to make them faint + + if (GetMoveDamageResult(move) == MOVE_POWER_OTHER) + score--; + + switch (AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]) + { + case AI_EFFECTIVENESS_x8: + score += 8; + break; + case AI_EFFECTIVENESS_x4: + score += 4; + break; + case AI_EFFECTIVENESS_x2: + if (AI_RandLessThan(176)) + score += 2; + else + score++; + break; + } + } + + //AI_TryToFaint_CheckIfDanger + if (!WillAIStrikeFirst() && CanTargetFaintAi(battlerDef, battlerAtk)) + { // AI_TryToFaint_Danger + if (GetMoveDamageResult(move) != MOVE_POWER_BEST) + score--; + else + score++; + } + + return score; +} + +// double battle logic +static s16 AI_DoubleBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + // move data + u8 moveType = gBattleMoves[move].type; + u16 effect = gBattleMoves[move].effect; + u16 moveTarget = AI_GetBattlerMoveTargetType(battlerAtk, move); + // ally data + u8 battlerAtkPartner = BATTLE_PARTNER(battlerAtk); + u16 atkPartnerAbility = AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)]; + u16 atkPartnerHoldEffect = AI_DATA->holdEffects[BATTLE_PARTNER(battlerAtk)]; + bool32 partnerProtecting = (gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_PROTECT); + bool32 attackerHasBadAbility = (GetAbilityRating(AI_DATA->abilities[battlerAtk]) < 0); + bool32 partnerHasBadAbility = (GetAbilityRating(atkPartnerAbility) < 0); + u16 predictedMove = AI_DATA->predictedMoves[battlerDef]; + + SetTypeBeforeUsingMove(move, battlerAtk); + GET_MOVE_TYPE(move, moveType); + + // check what effect partner is using + if (AI_DATA->partnerMove != 0) + { + switch (gBattleMoves[AI_DATA->partnerMove].effect) + { + case EFFECT_HELPING_HAND: + if (IS_MOVE_STATUS(move)) + score += 5; + break; + case EFFECT_PERISH_SONG: + if (!(gBattleMons[battlerDef].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED))) + { + if (IsTrappingMoveEffect(effect) || predictedMove == MOVE_INGRAIN) + score++; + } + break; + case EFFECT_ALWAYS_CRIT: + // Ally decided to use Frost Breath on us. we must have Anger Point as our ability + if (AI_DATA->abilities[battlerAtk] == ABILITY_ANGER_POINT) + { + if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_SLOWER) // Partner moving first + { + // discourage raising our attack since it's about to be maxed out + if (IsAttackBoostMoveEffect(effect)) + score -= 3; + // encourage moves hitting multiple opponents + if (!IS_MOVE_STATUS(move) && (moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) + score += 3; + } + } + break; + } + } // check partner move effect + + + // consider our move effect relative to partner state + switch (effect) + { + case EFFECT_HELPING_HAND: + if (AI_DATA->partnerMove != 0 && !HasDamagingMove(battlerAtkPartner)) + score -= 5; + break; + case EFFECT_PERISH_SONG: + if (AI_DATA->partnerMove != 0 && HasTrappingMoveEffect(battlerAtkPartner)) + score++; + break; + case EFFECT_MAGNET_RISE: + if (IsBattlerGrounded(battlerAtk) + && (HasMove(battlerAtkPartner, MOVE_EARTHQUAKE) || HasMove(battlerAtkPartner, MOVE_MAGNITUDE)) + && (AI_GetMoveEffectiveness(MOVE_EARTHQUAKE, battlerAtk, battlerAtkPartner) != AI_EFFECTIVENESS_x0)) // Doesn't resist ground move + { + RETURN_SCORE_PLUS(2); // partner has earthquake or magnitude -> good idea to use magnet rise + } + break; + } // our effect relative to partner + + + // consider global move effects + switch (effect) + { + case EFFECT_SANDSTORM: + if (ShouldSetSandstorm(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) + { + RETURN_SCORE_PLUS(1); // our partner benefits from sandstorm + } + break; + case EFFECT_RAIN_DANCE: + if (ShouldSetRain(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) + { + RETURN_SCORE_PLUS(1); // our partner benefits from rain + } + break; + case EFFECT_SUNNY_DAY: + if (ShouldSetSun(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) + { + RETURN_SCORE_PLUS(1); // our partner benefits from sun + } + break; + case EFFECT_HAIL: + if (IsBattlerAlive(battlerAtkPartner) + && ShouldSetHail(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) + { + RETURN_SCORE_PLUS(2); // our partner benefits from hail + } + break; + } // global move effect check + + + // check specific target + if (IsTargetingPartner(battlerAtk, battlerDef)) + { + if (GetMoveDamageResult(move) == MOVE_POWER_OTHER) + { + // partner ability checks + if (!partnerProtecting && moveTarget != MOVE_TARGET_BOTH && !DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move)) + { + switch (atkPartnerAbility) + { + case ABILITY_VOLT_ABSORB: + if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_HP_AWARE)) + { + RETURN_SCORE_MINUS(10); + } + break; // handled in AI_HPAware + case ABILITY_MOTOR_DRIVE: + if (moveType == TYPE_ELECTRIC && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPEED)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_LIGHTNING_ROD: + if (moveType == TYPE_ELECTRIC + && HasMoveWithSplit(battlerAtkPartner, SPLIT_SPECIAL) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_WATER_ABSORB: + case ABILITY_DRY_SKIN: + if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_HP_AWARE)) + { + RETURN_SCORE_MINUS(10); + } + break; // handled in AI_HPAware + case ABILITY_STORM_DRAIN: + if (moveType == TYPE_WATER + && HasMoveWithSplit(battlerAtkPartner, SPLIT_SPECIAL) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_WATER_COMPACTION: + if (moveType == TYPE_WATER && GetMoveDamageResult(move) == MOVE_POWER_WEAK) + { + RETURN_SCORE_PLUS(1); // only mon with this ability is weak to water so only make it okay if we do very little damage + } + RETURN_SCORE_MINUS(10); + break; + case ABILITY_FLASH_FIRE: + if (moveType == TYPE_FIRE + && HasMoveWithType(battlerAtkPartner, TYPE_FIRE) + && !(gBattleResources->flags->flags[battlerAtkPartner] & RESOURCE_FLAG_FLASH_FIRE)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_SAP_SIPPER: + if (moveType == TYPE_GRASS + && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_JUSTIFIED: + if (moveType == TYPE_DARK + && !IS_MOVE_STATUS(move) + && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) + && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_RATTLED: + if (!IS_MOVE_STATUS(move) + && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPEED) + && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_CONTRARY: + if (IsStatLoweringEffect(effect)) + { + RETURN_SCORE_PLUS(2); + } + break; + case ABILITY_DEFIANT: + if (IsStatLoweringEffect(effect) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_COMPETITIVE: + if (IsStatLoweringEffect(effect) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) + { + RETURN_SCORE_PLUS(1); + } + break; + } + } // ability checks + } // move power check + + // attacker move effects specifically targeting partner + if (!partnerProtecting) + { + switch (effect) + { + case EFFECT_PURIFY: + if (gBattleMons[battlerAtkPartner].status1 & STATUS1_ANY) + { + RETURN_SCORE_PLUS(1); + } + break; + case EFFECT_SWAGGER: + if (gBattleMons[battlerAtkPartner].statStages[STAT_ATK] < MAX_STAT_STAGE + && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL) + && (!AI_CanBeConfused(battlerAtkPartner, TRUE) + || atkPartnerHoldEffect == HOLD_EFFECT_CURE_CONFUSION + || atkPartnerHoldEffect == HOLD_EFFECT_CURE_STATUS)) + { + RETURN_SCORE_PLUS(1); + } + break; + case EFFECT_FLATTER: + if (gBattleMons[battlerAtkPartner].statStages[STAT_SPATK] < MAX_STAT_STAGE + && HasMoveWithSplit(battlerAtkPartner, SPLIT_SPECIAL) + && (!AI_CanBeConfused(battlerAtkPartner, TRUE) + || atkPartnerHoldEffect == HOLD_EFFECT_CURE_CONFUSION + || atkPartnerHoldEffect == HOLD_EFFECT_CURE_STATUS)) + { + RETURN_SCORE_PLUS(1); + } + break; + case EFFECT_BEAT_UP: + if (atkPartnerAbility == ABILITY_JUSTIFIED + && moveType == TYPE_DARK + && !IS_MOVE_STATUS(move) + && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) + && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 0)) + { + RETURN_SCORE_PLUS(1); + } + break; + case EFFECT_SKILL_SWAP: + if (AI_DATA->abilities[battlerAtk] != AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] && !attackerHasBadAbility) + { + if (AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_TRUANT) + { + RETURN_SCORE_PLUS(10); + } + else if (AI_DATA->abilities[battlerAtk] == ABILITY_COMPOUND_EYES + && HasMoveWithLowAccuracy(battlerAtkPartner, FOE(battlerAtkPartner), 90, TRUE, atkPartnerAbility, AI_DATA->abilities[FOE(battlerAtkPartner)], atkPartnerHoldEffect, AI_DATA->holdEffects[FOE(battlerAtkPartner)])) + { + RETURN_SCORE_PLUS(3); + } + } + break; + case EFFECT_ROLE_PLAY: + if (attackerHasBadAbility && !partnerHasBadAbility) + { + RETURN_SCORE_PLUS(1); + } + break; + case EFFECT_WORRY_SEED: + case EFFECT_GASTRO_ACID: + case EFFECT_SIMPLE_BEAM: + if (partnerHasBadAbility) + { + RETURN_SCORE_PLUS(2); + } + break; + case EFFECT_ENTRAINMENT: + if (partnerHasBadAbility && IsAbilityOfRating(AI_DATA->abilities[battlerAtk], 0)) + { + RETURN_SCORE_PLUS(1); + } + break; + case EFFECT_SOAK: + if (atkPartnerAbility == ABILITY_WONDER_GUARD + && (gBattleMons[battlerAtkPartner].type1 != TYPE_WATER + || gBattleMons[battlerAtkPartner].type2 != TYPE_WATER + || gBattleMons[battlerAtkPartner].type3 != TYPE_WATER)) + { + RETURN_SCORE_PLUS(1); + } + break; + case EFFECT_INSTRUCT: + { + u16 instructedMove; + if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_FASTER) + instructedMove = AI_DATA->partnerMove; + else + instructedMove = gLastMoves[battlerAtkPartner]; + + if (instructedMove != MOVE_NONE + && !IS_MOVE_STATUS(instructedMove) + && (AI_GetBattlerMoveTargetType(battlerAtkPartner, instructedMove) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) // Use instruct on multi-target moves + { + RETURN_SCORE_PLUS(1); + } + } + break; + case EFFECT_AFTER_YOU: + if (AI_WhoStrikesFirst(battlerAtkPartner, FOE(battlerAtkPartner), AI_DATA->partnerMove) == AI_IS_SLOWER // Opponent mon 1 goes before partner + || AI_WhoStrikesFirst(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), AI_DATA->partnerMove) == AI_IS_SLOWER) // Opponent mon 2 goes before partner + { + if (gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_COUNTER || gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_MIRROR_COAT) + break; // These moves need to go last + RETURN_SCORE_PLUS(1); + } + break; + } // attacker move effects + } // check partner protecting + + score -= 30; // otherwise, don't target partner + } + else // checking opponent + { + // these checks mostly handled in AI_CheckBadMove and AI_CheckViability + switch (effect) + { + case EFFECT_SKILL_SWAP: + if (AI_DATA->abilities[battlerAtk] == ABILITY_TRUANT) + score += 5; + else if (IsAbilityOfRating(AI_DATA->abilities[battlerAtk], 0) || IsAbilityOfRating(AI_DATA->abilities[battlerDef], 10)) + score += 2; // we want to transfer our bad ability or take their awesome ability + break; + case EFFECT_EARTHQUAKE: + case EFFECT_MAGNITUDE: + if (!IsBattlerGrounded(battlerAtkPartner) + || (IsBattlerGrounded(battlerAtkPartner) + && AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_SLOWER + && IsUngroundingEffect(gBattleMoves[AI_DATA->partnerMove].effect))) + score += 2; + else if (IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_FIRE) + || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_ELECTRIC) + || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_POISON) + || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_ROCK)) + score -= 10; // partner will be hit by earthquake and is weak to it + else + score -= 3; + break; + } + + // lightning rod, flash fire against enemy handled in AI_CheckBadMove + } + + return score; +} + +static bool32 IsPinchBerryItemEffect(u16 holdEffect) +{ + switch (holdEffect) + { + case HOLD_EFFECT_ATTACK_UP: + case HOLD_EFFECT_DEFENSE_UP: + case HOLD_EFFECT_SPEED_UP: + case HOLD_EFFECT_SP_ATTACK_UP: + case HOLD_EFFECT_SP_DEFENSE_UP: + case HOLD_EFFECT_CRITICAL_UP: + case HOLD_EFFECT_RANDOM_STAT_UP: + #ifdef HOLD_EFFECT_CUSTAP_BERRY + case HOLD_EFFECT_CUSTAP_BERRY: + #endif + #ifdef HOLD_EFFECT_MICLE_BERRY + case HOLD_EFFECT_MICLE_BERRY: + #endif + return TRUE; + } + + return FALSE; +} + +// AI_FLAG_CHECK_VIABILITY - a weird mix of increasing and decreasing scores +static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + // move data + u16 moveEffect = gBattleMoves[move].effect; + u32 effectiveness = AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; + u8 atkPriority = GetMovePriority(battlerAtk, move); + u16 predictedMove = AI_DATA->predictedMoves[battlerDef]; + bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); + u32 i; + + // Targeting partner, check benefits of doing that instead + if (IsTargetingPartner(battlerAtk, battlerDef)) + return score; + + // check always hits + if (!IS_MOVE_STATUS(move) && gBattleMoves[move].accuracy == 0) + { + if (gBattleMons[battlerDef].statStages[STAT_EVASION] >= 10 || gBattleMons[battlerAtk].statStages[STAT_ACC] <= 2) + score++; + if (AI_RandLessThan(100) && (gBattleMons[battlerDef].statStages[STAT_EVASION] >= 8 || gBattleMons[battlerAtk].statStages[STAT_ACC] <= 4)) + score++; + } + + // check high crit + if (TestMoveFlags(move, FLAG_HIGH_CRIT) && effectiveness >= AI_EFFECTIVENESS_x2 && AI_RandLessThan(128)) + score++; + + // check already dead + if (!IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]) + && CanTargetFaintAi(battlerAtk, battlerDef) + && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent should go first + { + if (atkPriority > 0) + score++; + else + score--; + } + + // check damage + if (gBattleMoves[move].power != 0 && GetMoveDamageResult(move) == MOVE_POWER_WEAK) + score--; + + // check status move preference + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_PREFER_STATUS_MOVES && IS_MOVE_STATUS(move) && effectiveness != AI_EFFECTIVENESS_x0) + score++; + + // check thawing moves + if ((gBattleMons[battlerAtk].status1 & STATUS1_FREEZE) && TestMoveFlags(move, FLAG_THAW_USER)) + score += (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? 20 : 10; + + // check burn + if (gBattleMons[battlerAtk].status1 & STATUS1_BURN) + { + switch (AI_DATA->abilities[battlerAtk]) + { + case ABILITY_GUTS: + break; + case ABILITY_NATURAL_CURE: + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING + && HasOnlyMovesWithSplit(battlerAtk, SPLIT_PHYSICAL, TRUE)) + score = 90; // Force switch if all your attacking moves are physical and you have Natural Cure. + break; + default: + if (IS_MOVE_PHYSICAL(move) && gBattleMoves[move].effect != EFFECT_FACADE) + score -= 2; + break; + } + } + + // attacker ability checks + switch (AI_DATA->abilities[battlerAtk]) + { + case ABILITY_MOXIE: + case ABILITY_BEAST_BOOST: + case ABILITY_CHILLING_NEIGH: + case ABILITY_GRIM_NEIGH: + case ABILITY_AS_ONE_ICE_RIDER: + case ABILITY_AS_ONE_SHADOW_RIDER: + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first + { + if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0)) + score += 8; // prioritize killing target for stat boost + } + break; + } // ability checks + + // move effect checks + switch (moveEffect) + { + case EFFECT_HIT: + break; + case EFFECT_SLEEP: + case EFFECT_YAWN: + if (AI_RandLessThan(128)) + IncreaseSleepScore(battlerAtk, battlerDef, move, &score); + break; + case EFFECT_ABSORB: + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) + score++; + if (effectiveness <= AI_EFFECTIVENESS_x0_5 && AI_RandLessThan(50)) + score -= 3; + break; + case EFFECT_EXPLOSION: + case EFFECT_MEMENTO: + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_WILL_SUICIDE && gBattleMons[battlerDef].statStages[STAT_EVASION] < 7) + { + if (AI_DATA->hpPercents[battlerAtk] < 50 && AI_RandLessThan(128)) + score++; + } + break; + case EFFECT_MIRROR_MOVE: + if (predictedMove != MOVE_NONE) + return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score); + break; +// stat raising effects + case EFFECT_ATTACK_UP: + case EFFECT_ATTACK_UP_2: + if (MovesWithSplitUnusable(battlerAtk, battlerDef, SPLIT_PHYSICAL)) + { + score -= 8; + break; + } + else if (gBattleMons[battlerAtk].statStages[STAT_ATK] < 9) + { + if (AI_DATA->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128)) + { + score += 2; + break; + } + } + + if (!AI_RandLessThan(100)) + { + score--; + } + break; + case EFFECT_DEFENSE_UP: + case EFFECT_DEFENSE_UP_2: + case EFFECT_DEFENSE_UP_3: + if (!HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)) + score -= 2; + if (AI_DATA->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128)) + score += 2; + else if (AI_DATA->hpPercents[battlerAtk] > 70 && AI_RandLessThan(200)) + break; + else if (AI_DATA->hpPercents[battlerAtk] < 40) + score -= 2; + break; + case EFFECT_SPEED_UP: + case EFFECT_SPEED_UP_2: + if (!WillAIStrikeFirst()) + { + if (!AI_RandLessThan(70)) + score += 3; + } + else + { + score -= 3; + } + break; + case EFFECT_SPECIAL_ATTACK_UP: + case EFFECT_SPECIAL_ATTACK_UP_2: + case EFFECT_SPECIAL_ATTACK_UP_3: + if (MovesWithSplitUnusable(battlerAtk, battlerDef, SPLIT_SPECIAL)) + { + score -= 8; + break; + } + else if (gBattleMons[battlerAtk].statStages[STAT_SPATK] < 9) + { + if (AI_DATA->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128)) + { + score += 2; + break; + } + } + + if (!AI_RandLessThan(100)) + { + score--; + } + break; + case EFFECT_SPECIAL_DEFENSE_UP: + case EFFECT_SPECIAL_DEFENSE_UP_2: + if (!HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)) + score -= 2; + if (AI_DATA->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128)) + score += 2; + else if (AI_DATA->hpPercents[battlerAtk] > 70 && AI_RandLessThan(200)) + break; + else if (AI_DATA->hpPercents[battlerAtk] < 40) + score -= 2; + break; + case EFFECT_ACCURACY_UP: + case EFFECT_ACCURACY_UP_2: + if (gBattleMons[battlerAtk].statStages[STAT_ACC] >= 9 && !AI_RandLessThan(50)) + score -= 2; + else if (AI_DATA->hpPercents[battlerAtk] <= 70) + score -= 2; + else + score++; + break; + case EFFECT_EVASION_UP: + case EFFECT_EVASION_UP_2: + if (AI_DATA->hpPercents[battlerAtk] > 90 && !AI_RandLessThan(100)) + score += 3; + if (gBattleMons[battlerAtk].statStages[STAT_EVASION] > 9 && AI_RandLessThan(128)) + score--; + if ((gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) && AI_DATA->hpPercents[battlerAtk] >= 50 && !AI_RandLessThan(80)) + score += 3; + if (gStatuses3[battlerDef] & STATUS3_LEECHSEED && !AI_RandLessThan(70)) + score += 3; + if (gStatuses3[battlerAtk] & STATUS3_ROOTED && AI_RandLessThan(128)) + score += 2; + if (gBattleMons[battlerDef].status2 & STATUS2_CURSED && !AI_RandLessThan(70)) + score += 3; + if (AI_DATA->hpPercents[battlerAtk] < 70 || gBattleMons[battlerAtk].statStages[STAT_EVASION] == DEFAULT_STAT_STAGE) + break; + else if (AI_DATA->hpPercents[battlerAtk] < 40 || AI_DATA->hpPercents[battlerDef] < 40) + score -= 2; + else if (!AI_RandLessThan(70)) + score -= 2; + break; +// stat lowering effects + case EFFECT_ATTACK_DOWN: + case EFFECT_ATTACK_DOWN_2: + if (!ShouldLowerAttack(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) + score -= 2; + if (gBattleMons[battlerDef].statStages[STAT_ATK] < DEFAULT_STAT_STAGE) + score--; + else if (AI_DATA->hpPercents[battlerAtk] <= 90) + score--; + if (gBattleMons[battlerDef].statStages[STAT_ATK] > 3 && !AI_RandLessThan(50)) + score -= 2; + else if (AI_DATA->hpPercents[battlerDef] < 70) + score -= 2; + break; + case EFFECT_DEFENSE_DOWN: + case EFFECT_DEFENSE_DOWN_2: + if (!ShouldLowerDefense(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) + score -= 2; + if ((AI_DATA->hpPercents[battlerAtk] < 70 && !AI_RandLessThan(50)) || (gBattleMons[battlerDef].statStages[STAT_DEF] <= 3 && !AI_RandLessThan(50))) + score -= 2; + if (AI_DATA->hpPercents[battlerDef] <= 70) + score -= 2; + break; + case EFFECT_SPEED_DOWN: + case EFFECT_SPEED_DOWN_2: + if (WillAIStrikeFirst()) + score -= 3; + else if (!AI_RandLessThan(70)) + score += 2; + break; + case EFFECT_SPECIAL_ATTACK_DOWN: + case EFFECT_SPECIAL_ATTACK_DOWN_2: + if (!ShouldLowerSpAtk(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) + score -= 2; + if (gBattleMons[battlerDef].statStages[STAT_SPATK] < DEFAULT_STAT_STAGE) + score--; + else if (AI_DATA->hpPercents[battlerAtk] <= 90) + score--; + if (gBattleMons[battlerDef].statStages[STAT_SPATK] > 3 && !AI_RandLessThan(50)) + score -= 2; + else if (AI_DATA->hpPercents[battlerDef] < 70) + score -= 2; + break; + case EFFECT_SPECIAL_DEFENSE_DOWN: + case EFFECT_SPECIAL_DEFENSE_DOWN_2: + if (!ShouldLowerSpDef(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) + score -= 2; + if ((AI_DATA->hpPercents[battlerAtk] < 70 && !AI_RandLessThan(50)) + || (gBattleMons[battlerDef].statStages[STAT_SPDEF] <= 3 && !AI_RandLessThan(50))) + score -= 2; + if (AI_DATA->hpPercents[battlerDef] <= 70) + score -= 2; + break; + case EFFECT_ACCURACY_DOWN: + case EFFECT_ACCURACY_DOWN_2: + if (ShouldLowerAccuracy(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) + score -= 2; + if ((AI_DATA->hpPercents[battlerAtk] < 70 || AI_DATA->hpPercents[battlerDef] < 70) && AI_RandLessThan(100)) + score--; + if (gBattleMons[battlerDef].statStages[STAT_ACC] <= 4 && !AI_RandLessThan(80)) + score -= 2; + if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY && !AI_RandLessThan(70)) + score += 2; + if (gStatuses3[battlerDef] & STATUS3_LEECHSEED && !AI_RandLessThan(70)) + score += 2; + if (gStatuses3[battlerDef] & STATUS3_ROOTED && AI_RandLessThan(128)) + score++; + if (gBattleMons[battlerDef].status2 & STATUS2_CURSED && !AI_RandLessThan(70)) + score += 2; + if (AI_DATA->hpPercents[battlerAtk] > 70 || gBattleMons[battlerDef].statStages[STAT_ACC] < DEFAULT_STAT_STAGE) + break; + else if (AI_DATA->hpPercents[battlerAtk] < 40 || AI_DATA->hpPercents[battlerDef] < 40 || !AI_RandLessThan(70)) + score -= 2; + break; + case EFFECT_EVASION_DOWN: + case EFFECT_EVASION_DOWN_2: + if (!ShouldLowerEvasion(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) + score -= 2; + if ((AI_DATA->hpPercents[battlerAtk] < 70 || gBattleMons[battlerDef].statStages[STAT_EVASION] <= 3) && !AI_RandLessThan(50)) + score -= 2; + if (AI_DATA->hpPercents[battlerDef] <= 70) + score -= 2; + if (gBattleMons[battlerAtk].statStages[STAT_ACC] < DEFAULT_STAT_STAGE) + score++; + if (gBattleMons[battlerDef].statStages[STAT_EVASION] < 7 || AI_DATA->abilities[battlerAtk] == ABILITY_NO_GUARD) + score -= 2; + break; + case EFFECT_BIDE: + if (AI_DATA->hpPercents[battlerAtk] < 90) + score -= 2; + break; + case EFFECT_DREAM_EATER: + if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP)) + break; + score++; // if target is asleep, dream eater is a pretty good move even without draining + // fallthrough + case EFFECT_ACUPRESSURE: + break; + case EFFECT_ATTACK_ACCURACY_UP: // hone claws + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ACC, &score); + break; + case EFFECT_GROWTH: + case EFFECT_ATTACK_SPATK_UP: // work up + if (AI_DATA->hpPercents[battlerAtk] <= 40 || AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) + break; + + if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score); + else if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score); + break; + case EFFECT_HAZE: + if (AnyStatIsRaised(BATTLE_PARTNER(battlerAtk)) + || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 3; + break; + // fallthrough + case EFFECT_ROAR: + case EFFECT_CLEAR_SMOG: + if (isDoubleBattle) + score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7); + else + score += min(CountPositiveStatStages(battlerDef), 4); + break; + case EFFECT_MULTI_HIT: + case EFFECT_DOUBLE_HIT: + case EFFECT_TRIPLE_KICK: + if (AI_MoveMakesContact(AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk], move) + && AI_DATA->abilities[battlerAtk] != ABILITY_MAGIC_GUARD + && AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_ROCKY_HELMET) + score -= 2; + break; + case EFFECT_CONVERSION: + if (!IS_BATTLER_OF_TYPE(battlerAtk, gBattleMoves[gBattleMons[battlerAtk].moves[0]].type)) + score++; + break; + case EFFECT_FLINCH_HIT: + score += ShouldTryToFlinch(battlerAtk, battlerDef, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], move); + break; + case EFFECT_SWALLOW: + if (gDisableStructs[battlerAtk].stockpileCounter == 0) + { + break; + } + else + { + u32 healPercent = 0; + switch (gDisableStructs[battlerAtk].stockpileCounter) + { + case 1: + healPercent = 25; + break; + case 2: + healPercent = 50; + break; + case 3: + healPercent = 100; + break; + default: + break; + } + + if (ShouldRecover(battlerAtk, battlerDef, move, healPercent)) + score += 2; + } + break; + case EFFECT_RESTORE_HP: + case EFFECT_SOFTBOILED: + case EFFECT_ROOST: + case EFFECT_MORNING_SUN: + case EFFECT_SYNTHESIS: + case EFFECT_MOONLIGHT: + if (ShouldRecover(battlerAtk, battlerDef, move, 50)) + score += 3; + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) + score++; + break; + case EFFECT_TOXIC: + case EFFECT_POISON: + IncreasePoisonScore(battlerAtk, battlerDef, move, &score); + break; + case EFFECT_LIGHT_SCREEN: + case EFFECT_REFLECT: + case EFFECT_AURORA_VEIL: + if (ShouldSetScreen(battlerAtk, battlerDef, moveEffect)) + { + score += 5; + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_LIGHT_CLAY) + score += 2; + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SCREENER) + score += 2; + } + break; + case EFFECT_REST: + if (!(AI_CanSleep(battlerAtk, AI_DATA->abilities[battlerAtk]))) + { + break; + } + else if (ShouldRecover(battlerAtk, battlerDef, move, 100)) + { + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_SLP + || AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_STATUS + || HasMoveEffect(EFFECT_SLEEP_TALK, battlerAtk) + || HasMoveEffect(EFFECT_SNORE, battlerAtk) + || AI_DATA->abilities[battlerAtk] == ABILITY_SHED_SKIN + || AI_DATA->abilities[battlerAtk] == ABILITY_EARLY_BIRD + || (gBattleWeather & B_WEATHER_RAIN && gWishFutureKnock.weatherDuration != 1 && AI_DATA->abilities[battlerAtk] == ABILITY_HYDRATION && AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_UTILITY_UMBRELLA)) + { + score += 2; + } + else + { + score++; + } + } + break; + case EFFECT_OHKO: + if (gStatuses3[battlerAtk] & STATUS3_ALWAYS_HITS) + score += 5; + break; + case EFFECT_TRAP: + if (HasMoveEffect(battlerDef, EFFECT_RAPID_SPIN)) + break; + //fallthrough + case EFFECT_MEAN_LOOK: + if (IsBattlerTrapped(battlerDef, TRUE)) + break; // in this case its a bad attacking move + else if (ShouldTrap(battlerAtk, battlerDef, move)) + score += 5; + break; + case EFFECT_MIST: + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SCREENER) + score += 2; + break; + case EFFECT_FOCUS_ENERGY: + case EFFECT_LASER_FOCUS: + if (AI_DATA->abilities[battlerAtk] == ABILITY_SUPER_LUCK + || AI_DATA->abilities[battlerAtk] == ABILITY_SNIPER + || AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_SCOPE_LENS + || TestMoveFlagsInMoveset(battlerAtk, FLAG_HIGH_CRIT)) + score += 2; + break; + case EFFECT_CONFUSE_HIT: + if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE) + score++; + //fallthrough + case EFFECT_CONFUSE: + IncreaseConfusionScore(battlerAtk, battlerDef, move, &score); + break; + case EFFECT_PARALYZE: + IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); + break; + case EFFECT_GRAV_APPLE: + if (gFieldStatuses & STATUS_FIELD_GRAVITY) + score += 2; + // fall through + case EFFECT_ATTACK_DOWN_HIT: + case EFFECT_DEFENSE_DOWN_HIT: + case EFFECT_SPECIAL_ATTACK_DOWN_HIT: + case EFFECT_SPECIAL_DEFENSE_DOWN_HIT: + case EFFECT_ACCURACY_DOWN_HIT: + case EFFECT_EVASION_DOWN_HIT: + if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY) + score += 2; + break; + case EFFECT_SPEED_DOWN_HIT: + if (WillAIStrikeFirst()) + score -= 2; + else if (!AI_RandLessThan(70)) + score++; + if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY) + score++; + if (ShouldLowerSpeed(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) + { + if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY) + score += 4; + else + score += 2; + } + break; + case EFFECT_SUBSTITUTE: + if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) + score += 3; + if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY)) + score++; + if (HasMoveEffect(battlerDef, EFFECT_SLEEP) + || HasMoveEffect(battlerDef, EFFECT_TOXIC) + || HasMoveEffect(battlerDef, EFFECT_POISON) + || HasMoveEffect(battlerDef, EFFECT_PARALYZE) + || HasMoveEffect(battlerDef, EFFECT_WILL_O_WISP) + || HasMoveEffect(battlerDef, EFFECT_CONFUSE) + || HasMoveEffect(battlerDef, EFFECT_LEECH_SEED)) + score += 2; + if (!gBattleMons[battlerDef].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION && AI_DATA->hpPercents[battlerAtk] > 70)) + score++; + break; + case EFFECT_MIMIC: + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + { + if (gLastMoves[battlerDef] != MOVE_NONE && gLastMoves[battlerDef] != 0xFFFF) + return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score); + } + break; + case EFFECT_LEECH_SEED: + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) + || gStatuses3[battlerDef] & STATUS3_LEECHSEED + || HasMoveEffect(battlerDef, EFFECT_RAPID_SPIN) + || AI_DATA->abilities[battlerDef] == ABILITY_LIQUID_OOZE + || AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_GUARD) + break; + score += 3; + if (!HasDamagingMove(battlerDef) || IsBattlerTrapped(battlerDef, FALSE)) + score += 2; + break; + case EFFECT_DO_NOTHING: + //todo - check z splash, z celebrate, z happy hour (lol) + break; + case EFFECT_TELEPORT: + if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) || GetBattlerSide(battlerAtk) != B_SIDE_PLAYER) + break; + //fallthrough + case EFFECT_HIT_ESCAPE: + case EFFECT_PARTING_SHOT: + if (!IsDoubleBattle()) + { + switch (ShouldPivot(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_THINKING_STRUCT->movesetIndex)) + { + case 0: // no + score -= 10; // technically should go in CheckBadMove, but this is easier/less computationally demanding + break; + case 1: // maybe + break; + case 2: // yes + score += 7; + break; + } + } + else //Double Battle + { + if (CountUsablePartyMons(battlerAtk) == 0) + break; // Can't switch + + //if (switchAbility == ABILITY_INTIMIDATE && PartyHasMoveSplit(battlerDef, SPLIT_PHYSICAL)) + //score += 7; + } + break; + case EFFECT_BATON_PASS: + if (ShouldSwitch() && (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE + || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK)) + || AnyStatIsRaised(battlerAtk))) + score += 5; + break; + case EFFECT_DISABLE: + if (gDisableStructs[battlerDef].disableTimer == 0 + && (B_MENTAL_HERB >= GEN_5 && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)) // mental herb + { + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // AI goes first + { + if (gLastMoves[battlerDef] != MOVE_NONE + && gLastMoves[battlerDef] != 0xFFFF) + { + /* TODO predicted moves + if (gLastMoves[battlerDef] == predictedMove) + score += 3; + else */if (CanMoveFaintBattler(gLastMoves[battlerDef], battlerDef, battlerAtk, 1)) + score += 2; //Disable move that can kill attacker + } + } + else if (predictedMove != MOVE_NONE && IS_MOVE_STATUS(predictedMove)) + { + score++; // Disable annoying status moves + } + } + break; + case EFFECT_ENCORE: + if (gDisableStructs[battlerDef].encoreTimer == 0 + && (B_MENTAL_HERB >= GEN_5 && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)) // mental herb + { + if (IsEncoreEncouragedEffect(gBattleMoves[gLastMoves[battlerDef]].effect)) + score += 3; + } + break; + case EFFECT_PAIN_SPLIT: + { + u16 newHp = (gBattleMons[battlerAtk].hp + gBattleMons[battlerDef].hp) / 2; + u16 healthBenchmark = (gBattleMons[battlerAtk].hp * 12) / 10; + if (newHp > healthBenchmark && ShouldAbsorb(battlerAtk, battlerDef, move, AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex])) + score += 2; + } + break; + case EFFECT_SLEEP_TALK: + case EFFECT_SNORE: + if (!IsWakeupTurn(battlerAtk) && gBattleMons[battlerAtk].status1 & STATUS1_SLEEP) + score += 10; + break; + case EFFECT_LOCK_ON: + if (HasMoveEffect(battlerAtk, EFFECT_OHKO)) + score += 3; + else if (AI_DATA->abilities[battlerAtk] == ABILITY_COMPOUND_EYES && HasMoveWithLowAccuracy(battlerAtk, battlerDef, 80, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef])) + score += 3; + else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 85, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef])) + score += 3; + else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef])) + score++; + break; + case EFFECT_SPEED_UP_HIT: + if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY && !WillAIStrikeFirst()) + score += 3; + break; + case EFFECT_DESTINY_BOND: + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && CanTargetFaintAi(battlerDef, battlerAtk)) + score += 3; + break; + case EFFECT_SPITE: + //TODO - predicted move + break; + case EFFECT_WISH: + case EFFECT_HEAL_BELL: + if (ShouldUseWishAromatherapy(battlerAtk, battlerDef, move)) + score += 7; + break; + case EFFECT_THIEF: + { + bool32 canSteal = FALSE; + + #if defined B_TRAINERS_KNOCK_OFF_ITEMS && B_TRAINERS_KNOCK_OFF_ITEMS == TRUE + canSteal = TRUE; + #endif + if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER || GetBattlerSide(battlerAtk) == B_SIDE_PLAYER) + canSteal = TRUE; + + if (canSteal && AI_DATA->items[battlerAtk] == ITEM_NONE + && AI_DATA->items[battlerDef] != ITEM_NONE + && CanBattlerGetOrLoseItem(battlerDef, AI_DATA->items[battlerDef]) + && CanBattlerGetOrLoseItem(battlerAtk, AI_DATA->items[battlerDef]) + && !HasMoveEffect(battlerAtk, EFFECT_ACROBATICS) + && AI_DATA->abilities[battlerDef] != ABILITY_STICKY_HOLD) + { + switch (AI_DATA->holdEffects[battlerDef]) + { + case HOLD_EFFECT_NONE: + break; + case HOLD_EFFECT_CHOICE_BAND: + case HOLD_EFFECT_CHOICE_SCARF: + case HOLD_EFFECT_CHOICE_SPECS: + score += 2; + break; + case HOLD_EFFECT_TOXIC_ORB: + if (ShouldPoisonSelf(battlerAtk, AI_DATA->abilities[battlerAtk])) + score += 2; + break; + case HOLD_EFFECT_FLAME_ORB: + if (ShouldBurnSelf(battlerAtk, AI_DATA->abilities[battlerAtk])) + score += 2; + break; + case HOLD_EFFECT_BLACK_SLUDGE: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) + score += 2; + break; + case HOLD_EFFECT_IRON_BALL: + if (HasMoveEffect(battlerAtk, EFFECT_FLING)) + score += 2; + break; + case HOLD_EFFECT_LAGGING_TAIL: + case HOLD_EFFECT_STICKY_BARB: + break; + default: + score++; + break; + } + } + break; + } + break; + case EFFECT_NIGHTMARE: + if (AI_DATA->abilities[battlerDef] != ABILITY_MAGIC_GUARD + && !(gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) + && (AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE || gBattleMons[battlerDef].status1 & STATUS1_SLEEP)) + { + score += 5; + if (IsBattlerTrapped(battlerDef, TRUE)) + score += 3; + } + break; + case EFFECT_CURSE: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) + { + if (IsBattlerTrapped(battlerDef, TRUE)) + score += 3; + else + score++; + break; + } + else + { + if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY || AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_GUARD) + break; + else if (gBattleMons[battlerAtk].statStages[STAT_ATK] < 8) + score += (8 - gBattleMons[battlerAtk].statStages[STAT_ATK]); + else if (gBattleMons[battlerAtk].statStages[STAT_SPEED] < 3) + break; + else if (gBattleMons[battlerAtk].statStages[STAT_DEF] < 8) + score += (8 - gBattleMons[battlerAtk].statStages[STAT_DEF]); + } + break; + case EFFECT_PROTECT: + if (predictedMove == 0xFFFF) + predictedMove = MOVE_NONE; + switch (move) + { + case MOVE_QUICK_GUARD: + if (predictedMove != MOVE_NONE && gBattleMoves[predictedMove].priority > 0) + ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + break; + case MOVE_WIDE_GUARD: + if (predictedMove != MOVE_NONE && AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_BOTH)) + { + ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + } + else if (isDoubleBattle && AI_GetBattlerMoveTargetType(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove) & MOVE_TARGET_FOES_AND_ALLY) + { + if (AI_DATA->abilities[battlerAtk] != ABILITY_TELEPATHY) + ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + } + break; + case MOVE_CRAFTY_SHIELD: + if (predictedMove != MOVE_NONE && IS_MOVE_STATUS(predictedMove) && !(AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) + ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + break; + + case MOVE_MAT_BLOCK: + if (gDisableStructs[battlerAtk].isFirstTurn && predictedMove != MOVE_NONE + && !IS_MOVE_STATUS(predictedMove) && !(AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) + ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + break; + case MOVE_KINGS_SHIELD: + #if (defined SPECIES_AEGISLASH && defined SPECIES_AEGISLASH_BLADE) + if (AI_DATA->abilities[battlerAtk] == ABILITY_STANCE_CHANGE //Special logic for Aegislash + && gBattleMons[battlerAtk].species == SPECIES_AEGISLASH_BLADE + && !IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef])) + { + score += 3; + break; + } + #endif + //fallthrough + default: // protect + ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + break; + } + break; + case EFFECT_ENDURE: + if (CanTargetFaintAi(battlerDef, battlerAtk)) + { + if (gBattleMons[battlerAtk].hp > gBattleMons[battlerAtk].maxHP / 4 // Pinch berry couldn't have activated yet + && IsPinchBerryItemEffect(AI_DATA->holdEffects[battlerAtk])) + { + score += 3; + } + else if (gBattleMons[battlerAtk].hp > 1) // Only spam endure for Flail/Reversal if you're not at Min Health + { + if (HasMoveEffect(battlerAtk, EFFECT_FLAIL) || HasMoveEffect(battlerAtk, EFFECT_ENDEAVOR)) + score += 3; + } + } + break; + + case EFFECT_SPIKES: + case EFFECT_STEALTH_ROCK: + case EFFECT_STICKY_WEB: + case EFFECT_TOXIC_SPIKES: + if (AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0) + break; + if (gDisableStructs[battlerAtk].isFirstTurn) + score += 2; + //TODO - track entire opponent party data to determine hazard effectiveness + break; + case EFFECT_FORESIGHT: + if (AI_DATA->abilities[battlerAtk] == ABILITY_SCRAPPY) + break; + else if (gBattleMons[battlerDef].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE + || (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST) + && (HasMoveWithType(battlerAtk, TYPE_NORMAL) + || HasMoveWithType(battlerAtk, TYPE_FIGHTING)))) + score += 2; + break; + case EFFECT_MIRACLE_EYE: + if (gBattleMons[battlerDef].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE + || (IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) && (HasMoveWithType(battlerAtk, TYPE_PSYCHIC)))) + score += 2; + break; + case EFFECT_PERISH_SONG: + if (IsBattlerTrapped(battlerDef, TRUE)) + score += 3; + break; + case EFFECT_SANDSTORM: + if (ShouldSetSandstorm(battlerAtk, AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerAtk])) + { + score++; + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_SMOOTH_ROCK) + score++; + if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN) + || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS) + || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT)) + score += 2; + } + break; + case EFFECT_HAIL: + if (ShouldSetHail(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk])) + { + if ((HasMoveEffect(battlerAtk, EFFECT_AURORA_VEIL) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_AURORA_VEIL)) + && ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL)) + score += 3; + + score++; + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_ICY_ROCK) + score++; + if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN) + || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS) + || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT)) + score += 2; + } + break; + case EFFECT_RAIN_DANCE: + if (ShouldSetRain(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk])) + { + score++; + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_DAMP_ROCK) + score++; + if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN) + || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS) + || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT)) + score += 2; + if (HasMoveWithType(battlerDef, TYPE_FIRE) || HasMoveWithType(BATTLE_PARTNER(battlerDef), TYPE_FIRE)) + score++; + } + break; + case EFFECT_SUNNY_DAY: + if (ShouldSetSun(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk])) + { + score++; + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_HEAT_ROCK) + score++; + if (HasMoveWithType(battlerDef, TYPE_WATER) || HasMoveWithType(BATTLE_PARTNER(battlerDef), TYPE_WATER)) + score++; + if (HasMoveEffect(battlerDef, EFFECT_THUNDER) || HasMoveEffect(BATTLE_PARTNER(battlerDef), EFFECT_THUNDER)) + score++; + } + break; + case EFFECT_ATTACK_UP_HIT: + if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score); + break; + case EFFECT_FELL_STINGER: + if (gBattleMons[battlerAtk].statStages[STAT_ATK] < MAX_STAT_STAGE + && AI_DATA->abilities[battlerAtk] != ABILITY_CONTRARY + && CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0)) + { + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first + score += 9; + else + score += 3; + } + break; + case EFFECT_BELLY_DRUM: + if (!CanTargetFaintAi(battlerDef, battlerAtk) && HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && AI_DATA->abilities[battlerAtk] != ABILITY_CONTRARY) + score += (MAX_STAT_STAGE - gBattleMons[battlerAtk].statStages[STAT_ATK]); + break; + case EFFECT_PSYCH_UP: + case EFFECT_SPECTRAL_THIEF: + // Want to copy positive stat changes + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerDef].statStages[i] > gBattleMons[battlerAtk].statStages[i]) + { + switch (i) + { + case STAT_ATK: + if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score++; + break; + case STAT_SPATK: + if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + score++; + break; + case STAT_ACC: + case STAT_EVASION: + case STAT_SPEED: + score++; + break; + case STAT_DEF: + case STAT_SPDEF: + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL) + score++; + break; + } + } + } + break; + case EFFECT_SEMI_INVULNERABLE: + score++; + if (predictedMove != MOVE_NONE && !isDoubleBattle) + { + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first + { + if (gBattleMoves[predictedMove].effect == EFFECT_EXPLOSION + || gBattleMoves[predictedMove].effect == EFFECT_PROTECT) + score += 3; + } + else if (gBattleMoves[predictedMove].effect == EFFECT_SEMI_INVULNERABLE && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) + { + score += 3; + } + } + break; + case EFFECT_DEFENSE_CURL: + if (HasMoveEffect(battlerAtk, EFFECT_ROLLOUT) && !(gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL)) + score++; + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score); + break; + case EFFECT_FAKE_OUT: + if (move == MOVE_FAKE_OUT // filter out first impression + && ShouldFakeOut(battlerAtk, battlerDef, move)) + score += 8; + break; + case EFFECT_STOCKPILE: + if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) + break; + if (HasMoveEffect(battlerAtk, EFFECT_SWALLOW) + || HasMoveEffect(battlerAtk, EFFECT_SPIT_UP)) + score += 2; + + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score); + break; + case EFFECT_SPIT_UP: + if (gDisableStructs[battlerAtk].stockpileCounter >= 2) + score++; + break; + case EFFECT_ROLLOUT: + if (gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL) + score += 8; + break; + case EFFECT_SWAGGER: + if (HasMoveEffect(battlerAtk, EFFECT_FOUL_PLAY) + || HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP) + || HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF)) + score++; + + if (AI_DATA->abilities[battlerDef] == ABILITY_CONTRARY) + score += 2; + + IncreaseConfusionScore(battlerAtk, battlerDef, move, &score); + break; + case EFFECT_FLATTER: + if (HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP) + || HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF)) + score += 2; + + if (AI_DATA->abilities[battlerDef] == ABILITY_CONTRARY) + score += 2; + + IncreaseConfusionScore(battlerAtk, battlerDef, move, &score); + break; + case EFFECT_FURY_CUTTER: + if (!isDoubleBattle && AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_METRONOME) + score += 3; + break; + case EFFECT_ATTRACT: + if (!isDoubleBattle && BattlerWillFaintFromSecondaryDamage(battlerDef, AI_DATA->abilities[battlerDef]) + && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Target goes first + break; // Don't use if the attract won't have a change to activate + + if (gBattleMons[battlerDef].status1 & STATUS1_ANY + || (gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) + || IsBattlerTrapped(battlerDef, TRUE)) + score += 2; + else + score++; + break; + case EFFECT_SAFEGUARD: + if (!AI_IsTerrainAffected(battlerAtk, STATUS_FIELD_MISTY_TERRAIN) || !IsBattlerGrounded(battlerAtk)) + score++; + //if (CountUsablePartyMons(battlerDef) != 0) + //score += 8; + break; + case EFFECT_PURSUIT: + /*TODO + if (IsPredictedToSwitch(battlerDef, battlerAtk)) + score += 3; + else if (IsPredictedToUsePursuitableMove(battlerDef, battlerAtk) && !MoveWouldHitFirst(move, battlerAtk, battlerDef)) //Pursuit against fast U-Turn + score += 3;*/ + break; + case EFFECT_RAPID_SPIN: + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); // Gen 8 increases speed + //fallthrough + case EFFECT_DEFOG: + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerAtk) != 0) + { + score += 3; + break; + } + + switch (move) + { + case MOVE_DEFOG: + if (gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SCREEN_ANY | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST)) + { + score += 3; + } + else if (!(gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SPIKES)) //Don't blow away hazards if you set them up + { + if (isDoubleBattle) + { + if (IsHazardMoveEffect(gBattleMoves[AI_DATA->partnerMove].effect) // Partner is going to set up hazards + && AI_WhoStrikesFirst(battlerAtk, BATTLE_PARTNER(battlerAtk), move) == AI_IS_SLOWER) // Partner going first + break; // Don't use Defog if partner is going to set up hazards + } + + // check defog lowering evasion + if (ShouldLowerEvasion(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) + { + if (gBattleMons[battlerDef].statStages[STAT_EVASION] > 7 + || HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef])) + score += 2; // encourage lowering evasion if they are evasive or we have a move with low accuracy + else + score++; + } + } + break; + case MOVE_RAPID_SPIN: + if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED || gBattleMons[battlerAtk].status2 & STATUS2_WRAPPED) + score += 3; + break; + } + break; + case EFFECT_TORMENT: + break; + case EFFECT_WILL_O_WISP: + IncreaseBurnScore(battlerAtk, battlerDef, move, &score); + break; + case EFFECT_FOLLOW_ME: + if (isDoubleBattle + && move != MOVE_SPOTLIGHT + && !IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]) + && (move != MOVE_RAGE_POWDER || IsAffectedByPowder(battlerDef, AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerDef])) // Rage Powder doesn't affect powder immunities + && IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + { + u16 predictedMoveOnPartner = gLastMoves[BATTLE_PARTNER(battlerAtk)]; + if (predictedMoveOnPartner != MOVE_NONE && !IS_MOVE_STATUS(predictedMoveOnPartner)) + score += 3; + } + break; + case EFFECT_NATURE_POWER: + return AI_CheckViability(battlerAtk, battlerDef, GetNaturePowerMove(), score); + case EFFECT_CHARGE: + if (HasDamagingMoveOfType(battlerAtk, TYPE_ELECTRIC)) + score += 2; + #if B_CHARGE_SPDEF_RAISE >= GEN_5 + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score); + #endif + break; + case EFFECT_TAUNT: + if (IS_MOVE_STATUS(predictedMove)) + score += 3; + else if (HasMoveWithSplit(battlerDef, SPLIT_STATUS)) + score += 2; + break; + case EFFECT_TRICK: + case EFFECT_BESTOW: + switch (AI_DATA->holdEffects[battlerAtk]) + { + case HOLD_EFFECT_CHOICE_SCARF: + score += 2; // assume its beneficial + break; + case HOLD_EFFECT_CHOICE_BAND: + if (!HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)) + score += 2; + break; + case HOLD_EFFECT_CHOICE_SPECS: + if (!HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)) + score += 2; + break; + case HOLD_EFFECT_TOXIC_ORB: + if (!ShouldPoisonSelf(battlerAtk, AI_DATA->abilities[battlerAtk])) + score += 2; + break; + case HOLD_EFFECT_FLAME_ORB: + if (!ShouldBurnSelf(battlerAtk, AI_DATA->abilities[battlerAtk]) && AI_CanBeBurned(battlerAtk, AI_DATA->abilities[battlerDef])) + score += 2; + break; + case HOLD_EFFECT_BLACK_SLUDGE: + if (!IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON) && AI_DATA->abilities[battlerDef] != ABILITY_MAGIC_GUARD) + score += 3; + break; + case HOLD_EFFECT_IRON_BALL: + if (!HasMoveEffect(battlerDef, EFFECT_FLING) || !IsBattlerGrounded(battlerDef)) + score += 2; + break; + case HOLD_EFFECT_LAGGING_TAIL: + case HOLD_EFFECT_STICKY_BARB: + score += 3; + break; + case HOLD_EFFECT_UTILITY_UMBRELLA: + if (AI_DATA->abilities[battlerAtk] != ABILITY_SOLAR_POWER && AI_DATA->abilities[battlerAtk] != ABILITY_DRY_SKIN && AI_WeatherHasEffect()) + { + switch (AI_DATA->abilities[battlerDef]) + { + case ABILITY_SWIFT_SWIM: + if (gBattleWeather & B_WEATHER_RAIN) + score += 3; // Slow 'em down + break; + case ABILITY_CHLOROPHYLL: + case ABILITY_FLOWER_GIFT: + if (gBattleWeather & B_WEATHER_SUN) + score += 3; // Slow 'em down + break; + } + } + break; + case HOLD_EFFECT_EJECT_BUTTON: + //if (!IsRaidBattle() && IsDynamaxed(battlerDef) && gNewBS->dynamaxData.timer[battlerDef] > 1 && + if (HasDamagingMove(battlerAtk) + || (isDoubleBattle && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && HasDamagingMove(BATTLE_PARTNER(battlerAtk)))) + score += 2; // Force 'em out next turn + break; + default: + if (move != MOVE_BESTOW && AI_DATA->items[battlerAtk] == ITEM_NONE) + { + switch (AI_DATA->holdEffects[battlerDef]) + { + case HOLD_EFFECT_CHOICE_BAND: + break; + case HOLD_EFFECT_TOXIC_ORB: + if (ShouldPoisonSelf(battlerAtk, AI_DATA->abilities[battlerAtk])) + score += 2; + break; + case HOLD_EFFECT_FLAME_ORB: + if (ShouldBurnSelf(battlerAtk, AI_DATA->abilities[battlerAtk])) + score += 2; + break; + case HOLD_EFFECT_BLACK_SLUDGE: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON) || AI_DATA->abilities[battlerAtk] == ABILITY_MAGIC_GUARD) + score += 3; + break; + case HOLD_EFFECT_IRON_BALL: + if (HasMoveEffect(battlerAtk, EFFECT_FLING)) + score += 2; + break; + case HOLD_EFFECT_LAGGING_TAIL: + case HOLD_EFFECT_STICKY_BARB: + break; + default: + score++; //other hold effects generally universally good + break; + } + } + } + break; + case EFFECT_ROLE_PLAY: + if (!IsRolePlayBannedAbilityAtk(AI_DATA->abilities[battlerAtk]) + && !IsRolePlayBannedAbility(AI_DATA->abilities[battlerDef]) + && !IsAbilityOfRating(AI_DATA->abilities[battlerAtk], 5) + && IsAbilityOfRating(AI_DATA->abilities[battlerDef], 5)) + score += 2; + break; + case EFFECT_INGRAIN: + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) + score += 3; + else + score++; + break; + case EFFECT_SUPERPOWER: + case EFFECT_OVERHEAT: + if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) + score += 10; + break; + case EFFECT_MAGIC_COAT: + if (IS_MOVE_STATUS(predictedMove) && AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_SELECTED | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH)) + score += 3; + break; + case EFFECT_RECYCLE: + if (GetUsedHeldItem(battlerAtk) != ITEM_NONE) + score++; + if (IsRecycleEncouragedItem(GetUsedHeldItem(battlerAtk))) + score++; + if (AI_DATA->abilities[battlerAtk] == ABILITY_RIPEN) + { + u16 item = GetUsedHeldItem(battlerAtk); + u16 toHeal = (ItemId_GetHoldEffectParam(item) == 10) ? 10 : gBattleMons[battlerAtk].maxHP / ItemId_GetHoldEffectParam(item); + + if (IsStatBoostingBerry(item) && AI_DATA->hpPercents[battlerAtk] > 60) + score++; + else if (ShouldRestoreHpBerry(battlerAtk, item) && !CanAIFaintTarget(battlerAtk, battlerDef, 0) + && ((GetWhoStrikesFirst(battlerAtk, battlerDef, TRUE) == 0 && CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 0)) + || !CanTargetFaintAiWithMod(battlerDef, battlerAtk, toHeal, 0))) + score++; // Recycle healing berry if we can't otherwise faint the target and the target wont kill us after we activate the berry + } + break; + case EFFECT_BRICK_BREAK: + if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_REFLECT) + score++; + if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_LIGHTSCREEN) + score++; + if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_AURORA_VEIL) + score++; + break; + case EFFECT_KNOCK_OFF: + if (CanKnockOffItem(battlerDef, AI_DATA->items[battlerDef])) + { + switch (AI_DATA->holdEffects[battlerDef]) + { + case HOLD_EFFECT_IRON_BALL: + if (HasMoveEffect(battlerDef, EFFECT_FLING)) + score += 4; + break; + case HOLD_EFFECT_LAGGING_TAIL: + case HOLD_EFFECT_STICKY_BARB: + break; + default: + score += 3; + break; + } + } + break; + case EFFECT_SKILL_SWAP: + if (GetAbilityRating(AI_DATA->abilities[battlerDef]) > GetAbilityRating(AI_DATA->abilities[battlerAtk])) + score++; + break; + case EFFECT_WORRY_SEED: + case EFFECT_GASTRO_ACID: + case EFFECT_SIMPLE_BEAM: + if (IsAbilityOfRating(AI_DATA->abilities[battlerDef], 5)) + score += 2; + break; + case EFFECT_ENTRAINMENT: + if (IsAbilityOfRating(AI_DATA->abilities[battlerDef], 5) || GetAbilityRating(AI_DATA->abilities[battlerAtk]) <= 0) + { + if (AI_DATA->abilities[battlerDef] != AI_DATA->abilities[battlerAtk] && !(gStatuses3[battlerDef] & STATUS3_GASTRO_ACID)) + score += 2; + } + break; + case EFFECT_IMPRISON: + if (predictedMove != MOVE_NONE && HasMove(battlerAtk, predictedMove)) + score += 3; + else if (gDisableStructs[battlerAtk].isFirstTurn == 0) + score++; + break; + case EFFECT_REFRESH: + if (gBattleMons[battlerAtk].status1 & STATUS1_ANY) + score += 2; + break; + case EFFECT_PSYCHO_SHIFT: + if (gBattleMons[battlerAtk].status1 & STATUS1_PSN_ANY) + IncreasePoisonScore(battlerAtk, battlerDef, move, &score); + else if (gBattleMons[battlerAtk].status1 & STATUS1_BURN) + IncreaseBurnScore(battlerAtk, battlerDef, move, &score); + else if (gBattleMons[battlerAtk].status1 & STATUS1_PARALYSIS) + IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); + else if (gBattleMons[battlerAtk].status1 & STATUS1_SLEEP) + IncreaseSleepScore(battlerAtk, battlerDef, move, &score); + break; + case EFFECT_GRUDGE: + break; + case EFFECT_SNATCH: + if (predictedMove != MOVE_NONE && TestMoveFlags(predictedMove, FLAG_SNATCH_AFFECTED)) + score += 3; // Steal move + break; + case EFFECT_MUD_SPORT: + if (!HasMoveWithType(battlerAtk, TYPE_ELECTRIC) && HasMoveWithType(battlerDef, TYPE_ELECTRIC)) + score++; + break; + case EFFECT_WATER_SPORT: + if (!HasMoveWithType(battlerAtk, TYPE_FIRE) && (HasMoveWithType(battlerDef, TYPE_FIRE))) + score++; + break; + case EFFECT_TICKLE: + if (gBattleMons[battlerDef].statStages[STAT_DEF] > 4 && HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) + && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY && ShouldLowerDefense(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) + { + score += 2; + } + else if (ShouldLowerAttack(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) + { + score += 2; + } + break; + case EFFECT_COSMIC_POWER: + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score); + break; + case EFFECT_BULK_UP: + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score); + break; + case EFFECT_CALM_MIND: + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score); + break; + case EFFECT_GEOMANCY: + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB) + score += 3; + //fallthrough + case EFFECT_QUIVER_DANCE: + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score); + break; + case EFFECT_SHELL_SMASH: + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_RESTORE_STATS) + score += 1; + + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score); + break; + case EFFECT_DRAGON_DANCE: + case EFFECT_SHIFT_GEAR: + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score); + break; + case EFFECT_GUARD_SWAP: + if (gBattleMons[battlerDef].statStages[STAT_DEF] > gBattleMons[battlerAtk].statStages[STAT_DEF] + && gBattleMons[battlerDef].statStages[STAT_SPDEF] >= gBattleMons[battlerAtk].statStages[STAT_SPDEF]) + score++; + else if (gBattleMons[battlerDef].statStages[STAT_SPDEF] > gBattleMons[battlerAtk].statStages[STAT_SPDEF] + && gBattleMons[battlerDef].statStages[STAT_DEF] >= gBattleMons[battlerAtk].statStages[STAT_DEF]) + score++; + break; + case EFFECT_POWER_SWAP: + if (gBattleMons[battlerDef].statStages[STAT_ATK] > gBattleMons[battlerAtk].statStages[STAT_ATK] + && gBattleMons[battlerDef].statStages[STAT_SPATK] >= gBattleMons[battlerAtk].statStages[STAT_SPATK]) + score++; + else if (gBattleMons[battlerDef].statStages[STAT_SPATK] > gBattleMons[battlerAtk].statStages[STAT_SPATK] + && gBattleMons[battlerDef].statStages[STAT_ATK] >= gBattleMons[battlerAtk].statStages[STAT_ATK]) + score++; + break; + case EFFECT_POWER_TRICK: + if (!(gStatuses3[battlerAtk] & STATUS3_POWER_TRICK)) + { + if (gBattleMons[battlerAtk].defense > gBattleMons[battlerAtk].attack && HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score += 2; + break; + } + break; + case EFFECT_HEART_SWAP: + { + bool32 hasHigherStat = FALSE; + //Only use if all target stats are >= attacker stats to prevent infinite loop + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerDef].statStages[i] < gBattleMons[battlerAtk].statStages[i]) + break; + if (gBattleMons[battlerDef].statStages[i] > gBattleMons[battlerAtk].statStages[i]) + hasHigherStat = TRUE; + } + if (hasHigherStat && i == NUM_BATTLE_STATS) + score++; + } + break; + case EFFECT_SPEED_SWAP: + // TODO this is cheating a bit... + if (gBattleMons[battlerDef].speed > gBattleMons[battlerAtk].speed) + score += 3; + break; + case EFFECT_GUARD_SPLIT: + { + // TODO also kind of cheating... + u16 newDefense = (gBattleMons[battlerAtk].defense + gBattleMons[battlerDef].defense) / 2; + u16 newSpDef = (gBattleMons[battlerAtk].spDefense + gBattleMons[battlerDef].spDefense) / 2; + + if ((newDefense > gBattleMons[battlerAtk].defense && newSpDef >= gBattleMons[battlerAtk].spDefense) + || (newSpDef > gBattleMons[battlerAtk].spDefense && newDefense >= gBattleMons[battlerAtk].defense)) + score++; + } + break; + case EFFECT_POWER_SPLIT: + { + u16 newAttack = (gBattleMons[battlerAtk].attack + gBattleMons[battlerDef].attack) / 2; + u16 newSpAtk = (gBattleMons[battlerAtk].spAttack + gBattleMons[battlerDef].spAttack) / 2; + + if ((newAttack > gBattleMons[battlerAtk].attack && newSpAtk >= gBattleMons[battlerAtk].spAttack) + || (newSpAtk > gBattleMons[battlerAtk].spAttack && newAttack >= gBattleMons[battlerAtk].attack)) + score++; + } + break; + case EFFECT_BUG_BITE: // And pluck + if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || AI_DATA->abilities[battlerDef] == ABILITY_STICKY_HOLD) + break; + else if (ItemId_GetPocket(AI_DATA->items[battlerDef]) == POCKET_BERRIES) + score += 3; + break; + case EFFECT_INCINERATE: + if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || AI_DATA->abilities[battlerDef] == ABILITY_STICKY_HOLD) + break; + else if (ItemId_GetPocket(AI_DATA->items[battlerDef]) == POCKET_BERRIES || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_GEMS) + score += 3; + break; + case EFFECT_SMACK_DOWN: + if (!IsBattlerGrounded(battlerDef)) + score += 3; + break; + case EFFECT_RELIC_SONG: + #if (defined SPECIES_MELOETTA && defined SPECIES_MELOETTA_PIROUETTE) + if (!(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) // Don't try to change form if it's transformed. + { + if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA && gBattleMons[battlerDef].defense < gBattleMons[battlerDef].spDefense) + score += 3; // Change to Pirouette if can do more damage + else if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA_PIROUETTE && gBattleMons[battlerDef].spDefense < gBattleMons[battlerDef].defense) + score += 3; // Change to Aria if can do more damage + } + #endif + break; + case EFFECT_ELECTRIC_TERRAIN: + case EFFECT_MISTY_TERRAIN: + if (gStatuses3[battlerAtk] & STATUS3_YAWN && IsBattlerGrounded(battlerAtk)) + score += 10; + //fallthrough + case EFFECT_GRASSY_TERRAIN: + case EFFECT_PSYCHIC_TERRAIN: + score += 2; + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_TERRAIN_EXTENDER) + score += 2; + break; + case EFFECT_PLEDGE: + if (isDoubleBattle) + { + if (HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_PLEDGE)) + score += 3; // Partner might use pledge move + } + break; + case EFFECT_TRICK_ROOM: + if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) + score += 3; + else if ((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && GetBattlerSideSpeedAverage(battlerAtk) >= GetBattlerSideSpeedAverage(battlerDef)) + score += 3; + break; + case EFFECT_MAGIC_ROOM: + score++; + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_NONE && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_NONE) + score++; + if (isDoubleBattle && AI_DATA->holdEffects[BATTLE_PARTNER(battlerAtk)] == HOLD_EFFECT_NONE && AI_DATA->holdEffects[BATTLE_PARTNER(battlerDef)] != HOLD_EFFECT_NONE) + score++; + break; + case EFFECT_WONDER_ROOM: + if ((HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL) && gBattleMons[battlerAtk].defense < gBattleMons[battlerAtk].spDefense) + || (HasMoveWithSplit(battlerDef, SPLIT_SPECIAL) && gBattleMons[battlerAtk].spDefense < gBattleMons[battlerAtk].defense)) + score += 2; + break; + case EFFECT_GRAVITY: + if (!(gFieldStatuses & STATUS_FIELD_GRAVITY)) + { + if (HasSleepMoveWithLowAccuracy(battlerAtk, battlerDef)) // Has Gravity for a move like Hypnosis + IncreaseSleepScore(battlerAtk, battlerDef, move, &score); + else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, FALSE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef])) + score += 2; + else + score++; + } + break; + case EFFECT_ION_DELUGE: + if ((AI_DATA->abilities[battlerAtk] == ABILITY_VOLT_ABSORB + || AI_DATA->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE + || AI_DATA->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD) + && gBattleMoves[predictedMove].type == TYPE_NORMAL) + score += 2; + break; + case EFFECT_FLING: + /* TODO + switch (gFlingTable[AI_DATA->items[battlerAtk]].effect) + { + case MOVE_EFFECT_BURN: + IncreaseBurnScore(battlerAtk, battlerDef, move, &score); + break; + case MOVE_EFFECT_FLINCH: + score += ShouldTryToFlinch(battlerAtk, battlerDef, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], move); + break; + case MOVE_EFFECT_PARALYSIS: + IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); + break; + case MOVE_EFFECT_POISON: + case MOVE_EFFECT_TOXIC: + IncreasePoisonScore(battlerAtk, battlerDef, move, &score); + break; + case MOVE_EFFECT_FREEZE: + if (AI_CanFreeze(battlerAtk, battlerDef)) + score += 3; + break; + }*/ + break; + case EFFECT_FEINT: + if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT) + score += 3; + break; + case EFFECT_EMBARGO: + if (AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_NONE) + score++; + break; + case EFFECT_POWDER: + if (predictedMove != MOVE_NONE && !IS_MOVE_STATUS(predictedMove) && gBattleMoves[predictedMove].type == TYPE_FIRE) + score += 3; + break; + case EFFECT_TELEKINESIS: + if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, FALSE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]) + || !IsBattlerGrounded(battlerDef)) + score++; + break; + case EFFECT_THROAT_CHOP: + if (predictedMove != MOVE_NONE && TestMoveFlags(predictedMove, FLAG_SOUND) && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + score += 3; // Ai goes first and predicts the target will use a sound move + else if (TestMoveFlagsInMoveset(battlerDef, FLAG_SOUND)) + score += 3; + break; + case EFFECT_HEAL_BLOCK: + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && predictedMove != MOVE_NONE && IsHealingMoveEffect(gBattleMoves[predictedMove].effect)) + score += 3; // Try to cancel healing move + else if (HasHealingEffect(battlerDef) || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_LEFTOVERS + || (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_BLACK_SLUDGE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON))) + score += 2; + break; + case EFFECT_SOAK: + if (HasMoveWithType(battlerAtk, TYPE_ELECTRIC) || HasMoveWithType(battlerAtk, TYPE_GRASS) || HasMoveEffect(battlerAtk, EFFECT_FREEZE_DRY)) + score += 2; // Get some super effective moves + break; + case EFFECT_THIRD_TYPE: + if (AI_DATA->abilities[battlerDef] == ABILITY_WONDER_GUARD) + score += 2; // Give target more weaknesses + break; + case EFFECT_ELECTRIFY: + if (predictedMove != MOVE_NONE && gBattleMoves[predictedMove].type == TYPE_NORMAL + && (AI_DATA->abilities[battlerAtk] == ABILITY_VOLT_ABSORB + || AI_DATA->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE + || AI_DATA->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) + { + score += 3; + } + break; + case EFFECT_TOPSY_TURVY: + if (CountPositiveStatStages(battlerDef) > CountNegativeStatStages(battlerDef)) + score++; + break; + case EFFECT_FAIRY_LOCK: + if (!IsBattlerTrapped(battlerDef, TRUE)) + { + if (ShouldTrap(battlerAtk, battlerDef, move)) + score += 8; + } + break; + case EFFECT_QUASH: + if (isDoubleBattle + && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerDef, AI_DATA->partnerMove) == AI_IS_SLOWER) // Attacker partner wouldn't go before target + score++; + break; + case EFFECT_TAILWIND: + if (GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) + score += 2; + break; + case EFFECT_LUCKY_CHANT: + if (!isDoubleBattle) + { + score++; + } + else + { + if (CountUsablePartyMons(battlerDef) > 0) + score += 8; + } + break; + case EFFECT_MAGNET_RISE: + 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 (gBattleMoves[predictedMove].type == TYPE_GROUND) + score += 3; // Cause the enemy's move to fail + break; + } + else // Opponent Goes First + { + if (HasDamagingMoveOfType(battlerDef, TYPE_GROUND)) + score += 2; + break; + } + } + break; + case EFFECT_CAMOUFLAGE: + if (predictedMove != MOVE_NONE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER // Attacker goes first + && !IS_MOVE_STATUS(move) && AI_GetTypeEffectiveness(predictedMove, battlerDef, battlerAtk) != AI_EFFECTIVENESS_x0) + score++; + break; + case EFFECT_FLAME_BURST: + if (isDoubleBattle) + { + if (IsBattlerAlive(BATTLE_PARTNER(battlerDef)) + && AI_DATA->hpPercents[BATTLE_PARTNER(battlerDef)] < 12 + && AI_DATA->abilities[BATTLE_PARTNER(battlerDef)] != ABILITY_MAGIC_GUARD + && !IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerDef), TYPE_FIRE)) + score++; + } + break; + case EFFECT_TOXIC_THREAD: + IncreasePoisonScore(battlerAtk, battlerDef, move, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); + break; + case EFFECT_TWO_TURNS_ATTACK: + case EFFECT_SKULL_BASH: + case EFFECT_SOLAR_BEAM: + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB) + score += 2; + break; + case EFFECT_COUNTER: + if (!IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]) && predictedMove != MOVE_NONE) + { + if (gDisableStructs[battlerDef].tauntTimer != 0) + score++; // target must use damaging move + if (GetMoveDamageResult(predictedMove) >= MOVE_POWER_GOOD && GetBattleMoveSplit(predictedMove) == SPLIT_PHYSICAL) + score += 3; + } + break; + case EFFECT_MIRROR_COAT: + if (!IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]) && predictedMove != MOVE_NONE) + { + if (gDisableStructs[battlerDef].tauntTimer != 0) + score++; // target must use damaging move + if (GetMoveDamageResult(predictedMove) >= MOVE_POWER_GOOD && GetBattleMoveSplit(predictedMove) == SPLIT_SPECIAL) + score += 3; + } + break; + case EFFECT_FLAIL: + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Ai goes first + { + if (AI_DATA->hpPercents[battlerAtk] < 20) + score++; + else if (AI_DATA->hpPercents[battlerAtk] < 8) + score += 2; + } + break; + case EFFECT_SHORE_UP: + if (AI_WeatherHasEffect() && (gBattleWeather & B_WEATHER_SANDSTORM) + && ShouldRecover(battlerAtk, battlerDef, move, 67)) + score += 3; + else if (ShouldRecover(battlerAtk, battlerDef, move, 50)) + score += 2; + break; + case EFFECT_FACADE: + if (gBattleMons[battlerAtk].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)) + score++; + break; + case EFFECT_FOCUS_PUNCH: + if (!isDoubleBattle && effectiveness > AI_EFFECTIVENESS_x0_5) + { + if (IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef])) + score += 2; + else if (gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)) + score++; + } + break; + case EFFECT_SMELLINGSALT: + if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS) + score += 2; + break; + case EFFECT_WAKE_UP_SLAP: + if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP) + score += 2; + break; + case EFFECT_REVENGE: + if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) + && !(gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))) + score += 2; + break; + case EFFECT_ENDEAVOR: + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent faster + { + if (AI_DATA->hpPercents[battlerAtk] < 40) + score++; + } + else if (AI_DATA->hpPercents[battlerAtk] < 50) + { + score++; + } + break; + //case EFFECT_EXTREME_EVOBOOST: // TODO + //break; + //case EFFECT_CLANGOROUS_SOUL: // TODO + //break; + //case EFFECT_NO_RETREAT: // TODO + //break; + //case EFFECT_SKY_DROP + //break; + } // move effect checks + + return score; +} + +// Effects that are encouraged on the first turn of battle +static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + if (IsTargetingPartner(battlerAtk, battlerDef) + || gBattleResults.battleTurnCounter != 0) + return score; + + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING + && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + && CanTargetFaintAi(battlerDef, battlerAtk) + && GetMovePriority(battlerAtk, move) == 0) + { + RETURN_SCORE_MINUS(20); // No point in setting up if you will faint. Should just switch if possible.. + } + + // check effects to prioritize first turn + switch (gBattleMoves[move].effect) + { + case EFFECT_ATTACK_UP: + case EFFECT_DEFENSE_UP: + case EFFECT_SPEED_UP: + case EFFECT_SPECIAL_ATTACK_UP: + case EFFECT_SPECIAL_DEFENSE_UP: + case EFFECT_ACCURACY_UP: + case EFFECT_EVASION_UP: + case EFFECT_ATTACK_DOWN: + case EFFECT_DEFENSE_DOWN: + case EFFECT_SPEED_DOWN: + case EFFECT_SPECIAL_ATTACK_DOWN: + case EFFECT_SPECIAL_DEFENSE_DOWN: + case EFFECT_ACCURACY_DOWN: + case EFFECT_EVASION_DOWN: + case EFFECT_CONVERSION: + case EFFECT_LIGHT_SCREEN: + case EFFECT_FOCUS_ENERGY: + case EFFECT_CONFUSE: + case EFFECT_ATTACK_UP_2: + case EFFECT_DEFENSE_UP_2: + case EFFECT_DEFENSE_UP_3: + case EFFECT_SPEED_UP_2: + case EFFECT_SPECIAL_ATTACK_UP_2: + case EFFECT_SPECIAL_ATTACK_UP_3: + case EFFECT_SPECIAL_DEFENSE_UP_2: + case EFFECT_ACCURACY_UP_2: + case EFFECT_EVASION_UP_2: + case EFFECT_ATTACK_DOWN_2: + case EFFECT_DEFENSE_DOWN_2: + case EFFECT_SPEED_DOWN_2: + case EFFECT_SPECIAL_ATTACK_DOWN_2: + case EFFECT_SPECIAL_DEFENSE_DOWN_2: + case EFFECT_ACCURACY_DOWN_2: + case EFFECT_EVASION_DOWN_2: + case EFFECT_REFLECT: + case EFFECT_POISON: + case EFFECT_PARALYZE: + case EFFECT_SUBSTITUTE: + case EFFECT_LEECH_SEED: + case EFFECT_MINIMIZE: + case EFFECT_CURSE: + case EFFECT_SWAGGER: + case EFFECT_CAMOUFLAGE: + case EFFECT_YAWN: + case EFFECT_DEFENSE_CURL: + case EFFECT_TORMENT: + case EFFECT_FLATTER: + case EFFECT_WILL_O_WISP: + case EFFECT_INGRAIN: + case EFFECT_IMPRISON: + case EFFECT_TEETER_DANCE: + case EFFECT_TICKLE: + case EFFECT_COSMIC_POWER: + case EFFECT_BULK_UP: + case EFFECT_CALM_MIND: + case EFFECT_ACUPRESSURE: + case EFFECT_AUTOTOMIZE: + case EFFECT_SHIFT_GEAR: + case EFFECT_SHELL_SMASH: + case EFFECT_GROWTH: + case EFFECT_QUIVER_DANCE: + case EFFECT_ATTACK_SPATK_UP: + case EFFECT_ATTACK_ACCURACY_UP: + case EFFECT_PSYCHIC_TERRAIN: + case EFFECT_GRASSY_TERRAIN: + case EFFECT_ELECTRIC_TERRAIN: + case EFFECT_MISTY_TERRAIN: + case EFFECT_STEALTH_ROCK: + case EFFECT_TOXIC_SPIKES: + case EFFECT_TRICK_ROOM: + case EFFECT_WONDER_ROOM: + case EFFECT_MAGIC_ROOM: + case EFFECT_TAILWIND: + case EFFECT_DRAGON_DANCE: + case EFFECT_STICKY_WEB: + case EFFECT_RAIN_DANCE: + case EFFECT_SUNNY_DAY: + case EFFECT_SANDSTORM: + case EFFECT_HAIL: + case EFFECT_GEOMANCY: + score += 2; + break; + default: + break; + } + + return score; +} + +// Adds score bonus to 'riskier' move effects and high crit moves +static s16 AI_Risky(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + if (IsTargetingPartner(battlerAtk, battlerDef)) + return score; + + if (TestMoveFlags(move, FLAG_HIGH_CRIT)) + score += 2; + + switch (gBattleMoves[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_ALL_STATS_UP_HIT: + case EFFECT_BELLY_DRUM: + case EFFECT_MIRROR_COAT: + case EFFECT_FOCUS_PUNCH: + case EFFECT_REVENGE: + case EFFECT_TEETER_DANCE: + if (Random() & 1) + score += 2; + break; + default: + break; + } + + return score; +} + +// Adds score bonus to best powered move +static s16 AI_PreferStrongestMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + if (IsTargetingPartner(battlerAtk, battlerDef)) + return score; + + if (GetMoveDamageResult(move) == MOVE_POWER_BEST) + score += 2; + + return score; +} + +// Prefers moves that are good for baton pass +static s16 AI_PreferBatonPass(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + u32 i; + + if (IsTargetingPartner(battlerAtk, battlerDef) + || CountUsablePartyMons(battlerAtk) == 0 + || GetMoveDamageResult(move) != MOVE_POWER_OTHER + || !HasMoveEffect(battlerAtk, EFFECT_BATON_PASS) + || IsBattlerTrapped(battlerAtk, TRUE)) + return score; + + if (IsStatRaisingEffect(gBattleMoves[move].effect)) + { + if (gBattleResults.battleTurnCounter == 0) + score += 5; + else if (AI_DATA->hpPercents[battlerAtk] < 60) + score -= 10; + else + score++; + } + + // other specific checks + switch (gBattleMoves[move].effect) + { + case EFFECT_INGRAIN: + if (!(gStatuses3[battlerAtk] & STATUS3_ROOTED)) + score += 2; + break; + case EFFECT_AQUA_RING: + if (!(gStatuses3[battlerAtk] & STATUS3_AQUA_RING)) + score += 2; + break; + case EFFECT_PROTECT: + if (gLastMoves[battlerAtk] == MOVE_PROTECT || gLastMoves[battlerAtk] == MOVE_DETECT) + score -= 2; + else + score += 2; + break; + case EFFECT_BATON_PASS: + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + IncreaseStatUpScore(battlerAtk, battlerDef, i, &score); + } + if (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING)) + score += 2; + if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED) + score -= 3; + break; + default: + break; + } + + return score; +} + +static s16 AI_HPAware(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + u16 effect = gBattleMoves[move].effect; + u8 moveType = gBattleMoves[move].type; + + SetTypeBeforeUsingMove(move, battlerAtk); + GET_MOVE_TYPE(move, moveType); + + if (IsTargetingPartner(battlerAtk, battlerDef)) + { + if ((effect == EFFECT_HEAL_PULSE || effect == EFFECT_HIT_ENEMY_HEAL_ALLY) + || (moveType == TYPE_ELECTRIC && AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_VOLT_ABSORB) + || (moveType == TYPE_WATER && (AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_DRY_SKIN || AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_WATER_ABSORB))) + { + if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK) + return 0; + + if (CanTargetFaintAi(FOE(battlerAtk), BATTLE_PARTNER(battlerAtk)) + || (CanTargetFaintAi(BATTLE_PARTNER(FOE(battlerAtk)), BATTLE_PARTNER(battlerAtk)))) + score--; + + if (AI_DATA->hpPercents[battlerDef] <= 50) + score++; + } + } + else + { + // Consider AI HP + if (AI_DATA->hpPercents[battlerAtk] > 70) + { + // high hp + switch (effect) + { + case EFFECT_EXPLOSION: + case EFFECT_RESTORE_HP: + case EFFECT_REST: + case EFFECT_DESTINY_BOND: + case EFFECT_FLAIL: + case EFFECT_ENDURE: + case EFFECT_MORNING_SUN: + case EFFECT_SYNTHESIS: + case EFFECT_MOONLIGHT: + case EFFECT_SHORE_UP: + case EFFECT_SOFTBOILED: + case EFFECT_ROOST: + case EFFECT_MEMENTO: + case EFFECT_GRUDGE: + case EFFECT_OVERHEAT: + score -= 2; + break; + default: + break; + } + } + else if (AI_DATA->hpPercents[battlerAtk] > 30) + { + // med hp + if (IsStatRaisingEffect(effect) || IsStatLoweringEffect(effect)) + score -= 2; + + switch (effect) + { + case EFFECT_EXPLOSION: + case EFFECT_BIDE: + case EFFECT_CONVERSION: + case EFFECT_LIGHT_SCREEN: + case EFFECT_MIST: + case EFFECT_FOCUS_ENERGY: + case EFFECT_CONVERSION_2: + case EFFECT_SAFEGUARD: + case EFFECT_BELLY_DRUM: + score -= 2; + break; + default: + break; + } + } + else + { + // low hp + if (IsStatRaisingEffect(effect) || IsStatLoweringEffect(effect)) + score -= 2; + + // check other discouraged low hp effects + switch (effect) + { + case EFFECT_BIDE: + case EFFECT_CONVERSION: + case EFFECT_REFLECT: + case EFFECT_LIGHT_SCREEN: + case EFFECT_AURORA_VEIL: + case EFFECT_MIST: + case EFFECT_FOCUS_ENERGY: + case EFFECT_RAGE: + case EFFECT_CONVERSION_2: + case EFFECT_LOCK_ON: + case EFFECT_SAFEGUARD: + case EFFECT_BELLY_DRUM: + case EFFECT_PSYCH_UP: + case EFFECT_MIRROR_COAT: + case EFFECT_SOLAR_BEAM: + case EFFECT_TWO_TURNS_ATTACK: + case EFFECT_ERUPTION: + case EFFECT_TICKLE: + case EFFECT_SUNNY_DAY: + case EFFECT_SANDSTORM: + case EFFECT_HAIL: + case EFFECT_RAIN_DANCE: + score -= 2; + break; + default: + break; + } + } + } + + // consider target HP + if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0)) + { + score += 2; + } + else + { + if (AI_DATA->hpPercents[battlerDef] > 70) + { + // high HP + ; // nothing yet + } + else if (AI_DATA->hpPercents[battlerDef] > 30) + { + // med HP - check discouraged effects + switch (effect) + { + case EFFECT_ATTACK_UP: + case EFFECT_DEFENSE_UP: + case EFFECT_SPEED_UP: + case EFFECT_SPECIAL_ATTACK_UP: + case EFFECT_SPECIAL_DEFENSE_UP: + case EFFECT_ACCURACY_UP: + case EFFECT_EVASION_UP: + case EFFECT_ATTACK_DOWN: + case EFFECT_DEFENSE_DOWN: + case EFFECT_SPEED_DOWN: + case EFFECT_SPECIAL_ATTACK_DOWN: + case EFFECT_SPECIAL_DEFENSE_DOWN: + case EFFECT_ACCURACY_DOWN: + case EFFECT_EVASION_DOWN: + case EFFECT_MIST: + case EFFECT_FOCUS_ENERGY: + case EFFECT_ATTACK_UP_2: + case EFFECT_DEFENSE_UP_2: + case EFFECT_SPEED_UP_2: + case EFFECT_SPECIAL_ATTACK_UP_2: + case EFFECT_SPECIAL_DEFENSE_UP_2: + case EFFECT_ACCURACY_UP_2: + case EFFECT_EVASION_UP_2: + case EFFECT_ATTACK_DOWN_2: + case EFFECT_DEFENSE_DOWN_2: + case EFFECT_SPEED_DOWN_2: + case EFFECT_SPECIAL_ATTACK_DOWN_2: + case EFFECT_SPECIAL_DEFENSE_DOWN_2: + case EFFECT_ACCURACY_DOWN_2: + case EFFECT_EVASION_DOWN_2: + case EFFECT_POISON: + case EFFECT_PAIN_SPLIT: + case EFFECT_PERISH_SONG: + case EFFECT_SAFEGUARD: + case EFFECT_TICKLE: + case EFFECT_COSMIC_POWER: + case EFFECT_BULK_UP: + case EFFECT_CALM_MIND: + case EFFECT_DRAGON_DANCE: + case EFFECT_DEFENSE_UP_3: + case EFFECT_SPECIAL_ATTACK_UP_3: + score -= 2; + break; + default: + break; + } + } + else + { + // low HP + if (IS_MOVE_STATUS(move)) + score -= 2; // don't use status moves if target is at low health + } + } + + return score; +} + +static void AI_Flee(void) +{ + AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_FLEE | AI_ACTION_DO_NOT_ATTACK); +} + +static void AI_Watch(void) +{ + AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK); +} + +// Roaming pokemon logic +static s16 AI_Roaming(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + if (IsBattlerTrapped(battlerAtk, FALSE)) + return score; + + AI_Flee(); + return score; +} + +// Safari pokemon logic +static s16 AI_Safari(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + u8 safariFleeRate = gBattleStruct->safariEscapeFactor * 5; // Safari flee rate, from 0-20. + + if ((Random() % 100) < safariFleeRate) + AI_Flee(); + else + AI_Watch(); + + return score; +} + +// First battle logic +static s16 AI_FirstBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + if (AI_DATA->hpPercents[battlerDef] <= 20) + AI_Flee(); + + return score; +} diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c deleted file mode 100644 index bb615e4972..0000000000 --- a/src/battle_ai_script_commands.c +++ /dev/null @@ -1,2276 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_anim.h" -#include "battle_ai_script_commands.h" -#include "battle_factory.h" -#include "battle_setup.h" -#include "data.h" -#include "item.h" -#include "pokemon.h" -#include "random.h" -#include "recorded_battle.h" -#include "util.h" -#include "constants/abilities.h" -#include "constants/battle_ai.h" -#include "constants/battle_move_effects.h" -#include "constants/moves.h" - -#define AI_ACTION_DONE 0x0001 -#define AI_ACTION_FLEE 0x0002 -#define AI_ACTION_WATCH 0x0004 -#define AI_ACTION_DO_NOT_ATTACK 0x0008 -#define AI_ACTION_UNK5 0x0010 -#define AI_ACTION_UNK6 0x0020 -#define AI_ACTION_UNK7 0x0040 -#define AI_ACTION_UNK8 0x0080 - -#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gBattleResources->ai)) -#define BATTLE_HISTORY ((struct BattleHistory *)(gBattleResources->battleHistory)) - -// AI states -enum -{ - AIState_SettingUp, - AIState_Processing, - AIState_FinishedProcessing, - AIState_DoNotProcess -}; - -/* -gAIScriptPtr is a pointer to the next battle AI cmd command to read. -when a command finishes processing, gAIScriptPtr is incremented by -the number of bytes that the current command had reserved for arguments -in order to read the next command correctly. refer to battle_ai_scripts.s for the -AI scripts. -*/ - -extern const u8 *const gBattleAI_ScriptsTable[]; - -static u8 ChooseMoveOrAction_Singles(void); -static u8 ChooseMoveOrAction_Doubles(void); -static void RecordLastUsedMoveByTarget(void); -static void BattleAI_DoAIProcessing(void); -static void AIStackPushVar(const u8 *); -static bool8 AIStackPop(void); - -static void Cmd_if_random_less_than(void); -static void Cmd_if_random_greater_than(void); -static void Cmd_if_random_equal(void); -static void Cmd_if_random_not_equal(void); -static void Cmd_score(void); -static void Cmd_if_hp_less_than(void); -static void Cmd_if_hp_more_than(void); -static void Cmd_if_hp_equal(void); -static void Cmd_if_hp_not_equal(void); -static void Cmd_if_status(void); -static void Cmd_if_not_status(void); -static void Cmd_if_status2(void); -static void Cmd_if_not_status2(void); -static void Cmd_if_status3(void); -static void Cmd_if_not_status3(void); -static void Cmd_if_side_affecting(void); -static void Cmd_if_not_side_affecting(void); -static void Cmd_if_less_than(void); -static void Cmd_if_more_than(void); -static void Cmd_if_equal(void); -static void Cmd_if_not_equal(void); -static void Cmd_if_less_than_ptr(void); -static void Cmd_if_more_than_ptr(void); -static void Cmd_if_equal_ptr(void); -static void Cmd_if_not_equal_ptr(void); -static void Cmd_if_move(void); -static void Cmd_if_not_move(void); -static void Cmd_if_in_bytes(void); -static void Cmd_if_not_in_bytes(void); -static void Cmd_if_in_hwords(void); -static void Cmd_if_not_in_hwords(void); -static void Cmd_if_user_has_attacking_move(void); -static void Cmd_if_user_has_no_attacking_moves(void); -static void Cmd_get_turn_count(void); -static void Cmd_get_type(void); -static void Cmd_get_considered_move_power(void); -static void Cmd_get_how_powerful_move_is(void); -static void Cmd_get_last_used_battler_move(void); -static void Cmd_if_equal_(void); -static void Cmd_if_not_equal_(void); -static void Cmd_if_user_goes(void); -static void Cmd_if_user_doesnt_go(void); -static void Cmd_nop_2A(void); -static void Cmd_nop_2B(void); -static void Cmd_count_usable_party_mons(void); -static void Cmd_get_considered_move(void); -static void Cmd_get_considered_move_effect(void); -static void Cmd_get_ability(void); -static void Cmd_get_highest_type_effectiveness(void); -static void Cmd_if_type_effectiveness(void); -static void Cmd_nop_32(void); -static void Cmd_nop_33(void); -static void Cmd_if_status_in_party(void); -static void Cmd_if_status_not_in_party(void); -static void Cmd_get_weather(void); -static void Cmd_if_effect(void); -static void Cmd_if_not_effect(void); -static void Cmd_if_stat_level_less_than(void); -static void Cmd_if_stat_level_more_than(void); -static void Cmd_if_stat_level_equal(void); -static void Cmd_if_stat_level_not_equal(void); -static void Cmd_if_can_faint(void); -static void Cmd_if_cant_faint(void); -static void Cmd_if_has_move(void); -static void Cmd_if_doesnt_have_move(void); -static void Cmd_if_has_move_with_effect(void); -static void Cmd_if_doesnt_have_move_with_effect(void); -static void Cmd_if_any_move_disabled_or_encored(void); -static void Cmd_if_curr_move_disabled_or_encored(void); -static void Cmd_flee(void); -static void Cmd_if_random_safari_flee(void); -static void Cmd_watch(void); -static void Cmd_get_hold_effect(void); -static void Cmd_get_gender(void); -static void Cmd_is_first_turn_for(void); -static void Cmd_get_stockpile_count(void); -static void Cmd_is_double_battle(void); -static void Cmd_get_used_held_item(void); -static void Cmd_get_move_type_from_result(void); -static void Cmd_get_move_power_from_result(void); -static void Cmd_get_move_effect_from_result(void); -static void Cmd_get_protect_count(void); -static void Cmd_nop_52(void); -static void Cmd_nop_53(void); -static void Cmd_nop_54(void); -static void Cmd_nop_55(void); -static void Cmd_nop_56(void); -static void Cmd_nop_57(void); -static void Cmd_call(void); -static void Cmd_goto(void); -static void Cmd_end(void); -static void Cmd_if_level_cond(void); -static void Cmd_if_target_taunted(void); -static void Cmd_if_target_not_taunted(void); -static void Cmd_check_ability(void); -static void Cmd_is_of_type(void); -static void Cmd_if_target_is_ally(void); -static void Cmd_if_flash_fired(void); -static void Cmd_if_holds_item(void); - -// ewram -EWRAM_DATA const u8 *gAIScriptPtr = NULL; -EWRAM_DATA static u8 sBattler_AI = 0; - -// const rom data -typedef void (*BattleAICmdFunc)(void); - -static const BattleAICmdFunc sBattleAICmdTable[] = -{ - Cmd_if_random_less_than, // 0x0 - Cmd_if_random_greater_than, // 0x1 - Cmd_if_random_equal, // 0x2 - Cmd_if_random_not_equal, // 0x3 - Cmd_score, // 0x4 - Cmd_if_hp_less_than, // 0x5 - Cmd_if_hp_more_than, // 0x6 - Cmd_if_hp_equal, // 0x7 - Cmd_if_hp_not_equal, // 0x8 - Cmd_if_status, // 0x9 - Cmd_if_not_status, // 0xA - Cmd_if_status2, // 0xB - Cmd_if_not_status2, // 0xC - Cmd_if_status3, // 0xD - Cmd_if_not_status3, // 0xE - Cmd_if_side_affecting, // 0xF - Cmd_if_not_side_affecting, // 0x10 - Cmd_if_less_than, // 0x11 - Cmd_if_more_than, // 0x12 - Cmd_if_equal, // 0x13 - Cmd_if_not_equal, // 0x14 - Cmd_if_less_than_ptr, // 0x15 - Cmd_if_more_than_ptr, // 0x16 - Cmd_if_equal_ptr, // 0x17 - Cmd_if_not_equal_ptr, // 0x18 - Cmd_if_move, // 0x19 - Cmd_if_not_move, // 0x1A - Cmd_if_in_bytes, // 0x1B - Cmd_if_not_in_bytes, // 0x1C - Cmd_if_in_hwords, // 0x1D - Cmd_if_not_in_hwords, // 0x1E - Cmd_if_user_has_attacking_move, // 0x1F - Cmd_if_user_has_no_attacking_moves, // 0x20 - Cmd_get_turn_count, // 0x21 - Cmd_get_type, // 0x22 - Cmd_get_considered_move_power, // 0x23 - Cmd_get_how_powerful_move_is, // 0x24 - Cmd_get_last_used_battler_move, // 0x25 - Cmd_if_equal_, // 0x26 - Cmd_if_not_equal_, // 0x27 - Cmd_if_user_goes, // 0x28 - Cmd_if_user_doesnt_go, // 0x29 - Cmd_nop_2A, // 0x2A - Cmd_nop_2B, // 0x2B - Cmd_count_usable_party_mons, // 0x2C - Cmd_get_considered_move, // 0x2D - Cmd_get_considered_move_effect, // 0x2E - Cmd_get_ability, // 0x2F - Cmd_get_highest_type_effectiveness, // 0x30 - Cmd_if_type_effectiveness, // 0x31 - Cmd_nop_32, // 0x32 - Cmd_nop_33, // 0x33 - Cmd_if_status_in_party, // 0x34 - Cmd_if_status_not_in_party, // 0x35 - Cmd_get_weather, // 0x36 - Cmd_if_effect, // 0x37 - Cmd_if_not_effect, // 0x38 - Cmd_if_stat_level_less_than, // 0x39 - Cmd_if_stat_level_more_than, // 0x3A - Cmd_if_stat_level_equal, // 0x3B - Cmd_if_stat_level_not_equal, // 0x3C - Cmd_if_can_faint, // 0x3D - Cmd_if_cant_faint, // 0x3E - Cmd_if_has_move, // 0x3F - Cmd_if_doesnt_have_move, // 0x40 - Cmd_if_has_move_with_effect, // 0x41 - Cmd_if_doesnt_have_move_with_effect, // 0x42 - Cmd_if_any_move_disabled_or_encored, // 0x43 - Cmd_if_curr_move_disabled_or_encored, // 0x44 - Cmd_flee, // 0x45 - Cmd_if_random_safari_flee, // 0x46 - Cmd_watch, // 0x47 - Cmd_get_hold_effect, // 0x48 - Cmd_get_gender, // 0x49 - Cmd_is_first_turn_for, // 0x4A - Cmd_get_stockpile_count, // 0x4B - Cmd_is_double_battle, // 0x4C - Cmd_get_used_held_item, // 0x4D - Cmd_get_move_type_from_result, // 0x4E - Cmd_get_move_power_from_result, // 0x4F - Cmd_get_move_effect_from_result, // 0x50 - Cmd_get_protect_count, // 0x51 - Cmd_nop_52, // 0x52 - Cmd_nop_53, // 0x53 - Cmd_nop_54, // 0x54 - Cmd_nop_55, // 0x55 - Cmd_nop_56, // 0x56 - Cmd_nop_57, // 0x57 - Cmd_call, // 0x58 - Cmd_goto, // 0x59 - Cmd_end, // 0x5A - Cmd_if_level_cond, // 0x5B - Cmd_if_target_taunted, // 0x5C - Cmd_if_target_not_taunted, // 0x5D - Cmd_if_target_is_ally, // 0x5E - Cmd_is_of_type, // 0x5F - Cmd_check_ability, // 0x60 - Cmd_if_flash_fired, // 0x61 - Cmd_if_holds_item, // 0x62 -}; - -// For the purposes of determining the most powerful move in a moveset, these -// moves are treated the same as having a power of 0 or 1 -#define IGNORED_MOVES_END 0xFFFF -static const u16 sIgnoredPowerfulMoveEffects[] = -{ - EFFECT_EXPLOSION, - EFFECT_DREAM_EATER, - EFFECT_RAZOR_WIND, - EFFECT_SKY_ATTACK, - EFFECT_RECHARGE, - EFFECT_SKULL_BASH, - EFFECT_SOLARBEAM, - EFFECT_SPIT_UP, - EFFECT_FOCUS_PUNCH, - EFFECT_SUPERPOWER, - EFFECT_ERUPTION, - EFFECT_OVERHEAT, - IGNORED_MOVES_END -}; - -// code -void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves) -{ - s32 i; - u8 *data = (u8 *)BATTLE_HISTORY; - - for (i = 0; i < sizeof(struct BattleHistory); i++) - data[i] = 0; - - // Items are allowed to use in ONLY trainer battles. - if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER - | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_SECRET_BASE | BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_RECORDED_LINK) - ) - ) - { - for (i = 0; i < MAX_TRAINER_ITEMS; i++) - { - if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0) - { - BATTLE_HISTORY->trainerItems[BATTLE_HISTORY->itemsNo] = gTrainers[gTrainerBattleOpponent_A].items[i]; - BATTLE_HISTORY->itemsNo++; - } - } - } - - BattleAI_SetupAIData(defaultScoreMoves); -} - -void BattleAI_SetupAIData(u8 defaultScoreMoves) -{ - s32 i; - u8 *data = (u8 *)AI_THINKING_STRUCT; - u8 moveLimitations; - - // Clear AI data. - for (i = 0; i < sizeof(struct AI_ThinkingStruct); i++) - data[i] = 0; - - // Conditional score reset, unlike Ruby. - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (defaultScoreMoves & 1) - AI_THINKING_STRUCT->score[i] = 100; - else - AI_THINKING_STRUCT->score[i] = 0; - - defaultScoreMoves >>= 1; - } - - moveLimitations = CheckMoveLimitations(gActiveBattler, 0, 0xFF); - - // Ignore moves that aren't possible to use. - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBitTable[i] & moveLimitations) - AI_THINKING_STRUCT->score[i] = 0; - - AI_THINKING_STRUCT->simulatedRNG[i] = 100 - (Random() % 16); - } - - gBattleResources->AI_ScriptsStack->size = 0; - sBattler_AI = gActiveBattler; - - // Decide a random target battlerId in doubles. - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - gBattlerTarget = (Random() & BIT_FLANK) + (GetBattlerSide(gActiveBattler) ^ BIT_SIDE); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - gBattlerTarget ^= BIT_FLANK; - } - // There's only one choice in single battles. - else - { - gBattlerTarget = sBattler_AI ^ BIT_SIDE; - } - - // Choose proper trainer ai scripts. - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - AI_THINKING_STRUCT->aiFlags = GetAiScriptsInRecordedBattle(); - else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_SAFARI; - else if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) - AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_ROAMING; - else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) - AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_FIRST_BATTLE; - else if (gBattleTypeFlags & BATTLE_TYPE_FACTORY) - AI_THINKING_STRUCT->aiFlags = GetAiScriptsInBattleFactory(); - else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE)) - AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_TRY_TO_FAINT; - else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags | gTrainers[gTrainerBattleOpponent_B].aiFlags; - else - AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags; - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - AI_THINKING_STRUCT->aiFlags |= AI_SCRIPT_DOUBLE_BATTLE; // act smart in doubles and don't attack your partner -} - -u8 BattleAI_ChooseMoveOrAction(void) -{ - u16 savedCurrentMove = gCurrentMove; - u8 ret; - - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - ret = ChooseMoveOrAction_Singles(); - else - ret = ChooseMoveOrAction_Doubles(); - - gCurrentMove = savedCurrentMove; - return ret; -} - -static u8 ChooseMoveOrAction_Singles(void) -{ - u8 currentMoveArray[MAX_MON_MOVES]; - u8 consideredMoveArray[MAX_MON_MOVES]; - u8 numOfBestMoves; - s32 i; - - RecordLastUsedMoveByTarget(); - - while (AI_THINKING_STRUCT->aiFlags != 0) - { - if (AI_THINKING_STRUCT->aiFlags & 1) - { - AI_THINKING_STRUCT->aiState = AIState_SettingUp; - BattleAI_DoAIProcessing(); - } - AI_THINKING_STRUCT->aiFlags >>= 1; - AI_THINKING_STRUCT->aiLogicId++; - AI_THINKING_STRUCT->movesetIndex = 0; - } - - // Check special AI actions. - if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE) - return AI_CHOICE_FLEE; - if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH) - return AI_CHOICE_WATCH; - - numOfBestMoves = 1; - currentMoveArray[0] = AI_THINKING_STRUCT->score[0]; - consideredMoveArray[0] = 0; - - for (i = 1; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[sBattler_AI].moves[i] != MOVE_NONE) - { - // In ruby, the order of these if statements is reversed. - if (currentMoveArray[0] == AI_THINKING_STRUCT->score[i]) - { - currentMoveArray[numOfBestMoves] = AI_THINKING_STRUCT->score[i]; - consideredMoveArray[numOfBestMoves++] = i; - } - if (currentMoveArray[0] < AI_THINKING_STRUCT->score[i]) - { - numOfBestMoves = 1; - currentMoveArray[0] = AI_THINKING_STRUCT->score[i]; - consideredMoveArray[0] = i; - } - } - } - return consideredMoveArray[Random() % numOfBestMoves]; -} - -static u8 ChooseMoveOrAction_Doubles(void) -{ - s32 i; - s32 j; -#ifndef BUGFIX - s32 scriptsToRun; -#else - // the value assigned to this is a u32 (aiFlags) - // this becomes relevant because aiFlags can have bit 31 set - // and scriptsToRun is shifted - // this never happens in the vanilla game because bit 31 is - // only set when it's the first battle - u32 scriptsToRun; -#endif - s16 bestMovePointsForTarget[MAX_BATTLERS_COUNT]; - s8 mostViableTargetsArray[MAX_BATTLERS_COUNT]; - u8 actionOrMoveIndex[MAX_BATTLERS_COUNT]; - u8 mostViableMovesScores[MAX_MON_MOVES]; - u8 mostViableMovesIndices[MAX_MON_MOVES]; - s32 mostViableTargetsNo; - s32 mostViableMovesNo; - s16 mostMovePoints; - - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (i == sBattler_AI || gBattleMons[i].hp == 0) - { - actionOrMoveIndex[i] = 0xFF; - bestMovePointsForTarget[i] = -1; - } - else - { - if (gBattleTypeFlags & BATTLE_TYPE_PALACE) - BattleAI_SetupAIData(gBattleStruct->palaceFlags >> 4); - else - BattleAI_SetupAIData((1 << MAX_MON_MOVES) - 1); - - gBattlerTarget = i; - - if ((i & BIT_SIDE) != (sBattler_AI & BIT_SIDE)) - RecordLastUsedMoveByTarget(); - - AI_THINKING_STRUCT->aiLogicId = 0; - AI_THINKING_STRUCT->movesetIndex = 0; - scriptsToRun = AI_THINKING_STRUCT->aiFlags; - while (scriptsToRun != 0) - { - if (scriptsToRun & 1) - { - AI_THINKING_STRUCT->aiState = AIState_SettingUp; - BattleAI_DoAIProcessing(); - } - scriptsToRun >>= 1; - AI_THINKING_STRUCT->aiLogicId++; - AI_THINKING_STRUCT->movesetIndex = 0; - } - - if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE) - { - actionOrMoveIndex[i] = AI_CHOICE_FLEE; - } - else if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH) - { - actionOrMoveIndex[i] = AI_CHOICE_WATCH; - } - else - { - mostViableMovesScores[0] = AI_THINKING_STRUCT->score[0]; - mostViableMovesIndices[0] = 0; - mostViableMovesNo = 1; - for (j = 1; j < MAX_MON_MOVES; j++) - { - if (gBattleMons[sBattler_AI].moves[j] != 0) - { - if (mostViableMovesScores[0] == AI_THINKING_STRUCT->score[j]) - { - mostViableMovesScores[mostViableMovesNo] = AI_THINKING_STRUCT->score[j]; - mostViableMovesIndices[mostViableMovesNo] = j; - mostViableMovesNo++; - } - if (mostViableMovesScores[0] < AI_THINKING_STRUCT->score[j]) - { - mostViableMovesScores[0] = AI_THINKING_STRUCT->score[j]; - mostViableMovesIndices[0] = j; - mostViableMovesNo = 1; - } - } - } - actionOrMoveIndex[i] = mostViableMovesIndices[Random() % mostViableMovesNo]; - bestMovePointsForTarget[i] = mostViableMovesScores[0]; - - // Don't use a move against ally if it has less than 100 points. - if (i == (sBattler_AI ^ BIT_FLANK) && bestMovePointsForTarget[i] < 100) - { - bestMovePointsForTarget[i] = -1; - mostViableMovesScores[0] = mostViableMovesScores[0]; // Needed to match. - } - } - } - } - - mostMovePoints = bestMovePointsForTarget[0]; - mostViableTargetsArray[0] = 0; - mostViableTargetsNo = 1; - - for (i = 1; i < MAX_BATTLERS_COUNT; i++) - { - if (mostMovePoints == bestMovePointsForTarget[i]) - { - mostViableTargetsArray[mostViableTargetsNo] = i; - mostViableTargetsNo++; - } - if (mostMovePoints < bestMovePointsForTarget[i]) - { - mostMovePoints = bestMovePointsForTarget[i]; - mostViableTargetsArray[0] = i; - mostViableTargetsNo = 1; - } - } - - gBattlerTarget = mostViableTargetsArray[Random() % mostViableTargetsNo]; - return actionOrMoveIndex[gBattlerTarget]; -} - -static void BattleAI_DoAIProcessing(void) -{ - while (AI_THINKING_STRUCT->aiState != AIState_FinishedProcessing) - { - switch (AI_THINKING_STRUCT->aiState) - { - case AIState_DoNotProcess: // Needed to match. - break; - case AIState_SettingUp: - gAIScriptPtr = gBattleAI_ScriptsTable[AI_THINKING_STRUCT->aiLogicId]; // set AI ptr to logic ID. - if (gBattleMons[sBattler_AI].pp[AI_THINKING_STRUCT->movesetIndex] == 0) - { - AI_THINKING_STRUCT->moveConsidered = 0; - } - else - { - AI_THINKING_STRUCT->moveConsidered = gBattleMons[sBattler_AI].moves[AI_THINKING_STRUCT->movesetIndex]; - } - AI_THINKING_STRUCT->aiState++; - break; - case AIState_Processing: - if (AI_THINKING_STRUCT->moveConsidered != 0) - { - sBattleAICmdTable[*gAIScriptPtr](); // Run AI command. - } - else - { - AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; - AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE; - } - if (AI_THINKING_STRUCT->aiAction & AI_ACTION_DONE) - { - AI_THINKING_STRUCT->movesetIndex++; - - if (AI_THINKING_STRUCT->movesetIndex < MAX_MON_MOVES && !(AI_THINKING_STRUCT->aiAction & AI_ACTION_DO_NOT_ATTACK)) - AI_THINKING_STRUCT->aiState = AIState_SettingUp; - else - AI_THINKING_STRUCT->aiState++; - - AI_THINKING_STRUCT->aiAction &= ~(AI_ACTION_DONE); - } - break; - } - } -} - -static void RecordLastUsedMoveByTarget(void) -{ - s32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget]) - break; - - if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == MOVE_NONE) - { - BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] = gLastMoves[gBattlerTarget]; - break; - } - } -} - -void ClearBattlerMoveHistory(u8 battlerId) -{ - s32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) - BATTLE_HISTORY->usedMoves[battlerId].moves[i] = MOVE_NONE; -} - -void RecordAbilityBattle(u8 battlerId, u8 abilityId) -{ - BATTLE_HISTORY->abilities[battlerId] = abilityId; -} - -void ClearBattlerAbilityHistory(u8 battlerId) -{ - BATTLE_HISTORY->abilities[battlerId] = ABILITY_NONE; -} - -void RecordItemEffectBattle(u8 battlerId, u8 itemEffect) -{ - BATTLE_HISTORY->itemEffects[battlerId] = itemEffect; -} - -void ClearBattlerItemEffectHistory(u8 battlerId) -{ - BATTLE_HISTORY->itemEffects[battlerId] = 0; -} - -static void Cmd_if_random_less_than(void) -{ - u16 random = Random(); - - if (random % 256 < gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_random_greater_than(void) -{ - u16 random = Random(); - - if (random % 256 > gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_random_equal(void) -{ - u16 random = Random(); - - if (random % 256 == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_random_not_equal(void) -{ - u16 random = Random(); - - if (random % 256 != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_score(void) -{ - AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += gAIScriptPtr[1]; // Add the result to the array of the move consider's score. - - if (AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] < 0) // If the score is negative, flatten it to 0. - AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; - - gAIScriptPtr += 2; // AI return. -} - -static void Cmd_if_hp_less_than(void) -{ - u16 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) < gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void Cmd_if_hp_more_than(void) -{ - u16 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) > gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void Cmd_if_hp_equal(void) -{ - u16 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) == gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void Cmd_if_hp_not_equal(void) -{ - u16 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) != gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void Cmd_if_status(void) -{ - u16 battlerId; - u32 status; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - status = T1_READ_32(gAIScriptPtr + 2); - - if (gBattleMons[battlerId].status1 & status) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void Cmd_if_not_status(void) -{ - u16 battlerId; - u32 status; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - status = T1_READ_32(gAIScriptPtr + 2); - - if (!(gBattleMons[battlerId].status1 & status)) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void Cmd_if_status2(void) -{ - u16 battlerId; - u32 status; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - status = T1_READ_32(gAIScriptPtr + 2); - - if ((gBattleMons[battlerId].status2 & status)) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void Cmd_if_not_status2(void) -{ - u16 battlerId; - u32 status; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - status = T1_READ_32(gAIScriptPtr + 2); - - if (!(gBattleMons[battlerId].status2 & status)) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void Cmd_if_status3(void) -{ - u16 battlerId; - u32 status; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - status = T1_READ_32(gAIScriptPtr + 2); - - if (gStatuses3[battlerId] & status) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void Cmd_if_not_status3(void) -{ - u16 battlerId; - u32 status; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - status = T1_READ_32(gAIScriptPtr + 2); - - if (!(gStatuses3[battlerId] & status)) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void Cmd_if_side_affecting(void) -{ - u16 battlerId; - u32 side, status; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - side = GET_BATTLER_SIDE(battlerId); - status = T1_READ_32(gAIScriptPtr + 2); - - if (gSideStatuses[side] & status) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void Cmd_if_not_side_affecting(void) -{ - u16 battlerId; - u32 side, status; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - side = GET_BATTLER_SIDE(battlerId); - status = T1_READ_32(gAIScriptPtr + 2); - - if (!(gSideStatuses[side] & status)) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void Cmd_if_less_than(void) -{ - if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_more_than(void) -{ - if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_equal(void) -{ - if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_not_equal(void) -{ - if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_less_than_ptr(void) -{ - const u8 *value = T1_READ_PTR(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->funcResult < *value) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; -} - -static void Cmd_if_more_than_ptr(void) -{ - const u8 *value = T1_READ_PTR(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->funcResult > *value) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; -} - -static void Cmd_if_equal_ptr(void) -{ - const u8 *value = T1_READ_PTR(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->funcResult == *value) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; -} - -static void Cmd_if_not_equal_ptr(void) -{ - const u8 *value = T1_READ_PTR(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->funcResult != *value) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; -} - -static void Cmd_if_move(void) -{ - u16 move = T1_READ_16(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->moveConsidered == move) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void Cmd_if_not_move(void) -{ - u16 move = T1_READ_16(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->moveConsidered != move) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void Cmd_if_in_bytes(void) -{ - const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1); - - while (*ptr != 0xFF) - { - if (AI_THINKING_STRUCT->funcResult == *ptr) - { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); - return; - } - ptr++; - } - gAIScriptPtr += 9; -} - -static void Cmd_if_not_in_bytes(void) -{ - const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1); - - while (*ptr != 0xFF) - { - if (AI_THINKING_STRUCT->funcResult == *ptr) - { - gAIScriptPtr += 9; - return; - } - ptr++; - } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); -} - -static void Cmd_if_in_hwords(void) -{ - const u16 *ptr = (const u16 *)T1_READ_PTR(gAIScriptPtr + 1); - - while (*ptr != 0xFFFF) - { - if (AI_THINKING_STRUCT->funcResult == *ptr) - { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); - return; - } - ptr++; - } - gAIScriptPtr += 9; -} - -static void Cmd_if_not_in_hwords(void) -{ - const u16 *ptr = (const u16 *)T1_READ_PTR(gAIScriptPtr + 1); - - while (*ptr != 0xFFFF) - { - if (AI_THINKING_STRUCT->funcResult == *ptr) - { - gAIScriptPtr += 9; - return; - } - ptr++; - } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); -} - -static void Cmd_if_user_has_attacking_move(void) -{ - s32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[sBattler_AI].moves[i] != 0 - && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].power != 0) - break; - } - - if (i == MAX_MON_MOVES) - gAIScriptPtr += 5; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); -} - -static void Cmd_if_user_has_no_attacking_moves(void) -{ - s32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[sBattler_AI].moves[i] != 0 - && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].power != 0) - break; - } - - if (i != MAX_MON_MOVES) - gAIScriptPtr += 5; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); -} - -static void Cmd_get_turn_count(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleResults.battleTurnCounter; - gAIScriptPtr += 1; -} - -static void Cmd_get_type(void) -{ - u8 typeVar = gAIScriptPtr[1]; - - switch (typeVar) - { - case AI_TYPE1_USER: // AI user primary type - AI_THINKING_STRUCT->funcResult = gBattleMons[sBattler_AI].type1; - break; - case AI_TYPE1_TARGET: // target primary type - AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerTarget].type1; - break; - case AI_TYPE2_USER: // AI user secondary type - AI_THINKING_STRUCT->funcResult = gBattleMons[sBattler_AI].type2; - break; - case AI_TYPE2_TARGET: // target secondary type - AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerTarget].type2; - break; - case AI_TYPE_MOVE: // type of move being pointed to - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].type; - break; - } - gAIScriptPtr += 2; -} - -static u8 BattleAI_GetWantedBattler(u8 wantedBattler) -{ - switch (wantedBattler) - { - case AI_USER: - return sBattler_AI; - case AI_TARGET: - default: - return gBattlerTarget; - case AI_USER_PARTNER: - return sBattler_AI ^ BIT_FLANK; - case AI_TARGET_PARTNER: - return gBattlerTarget ^ BIT_FLANK; - } -} - -static void Cmd_is_of_type(void) -{ - u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]); - - if (IS_BATTLER_OF_TYPE(battlerId, gAIScriptPtr[2])) - AI_THINKING_STRUCT->funcResult = TRUE; - else - AI_THINKING_STRUCT->funcResult = FALSE; - - gAIScriptPtr += 3; -} - -static void Cmd_get_considered_move_power(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power; - gAIScriptPtr += 1; -} - -static void Cmd_get_how_powerful_move_is(void) -{ - s32 i, checkedMove; - s32 moveDmgs[MAX_MON_MOVES]; - - for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++) - { - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sIgnoredPowerfulMoveEffects[i]) - break; - } - - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1 - && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END) - { - gDynamicBasePower = 0; - *(&gBattleStruct->dynamicMoveType) = 0; - gBattleScripting.dmgMultiplier = 1; - gMoveResultFlags = 0; - gCritMultiplier = 1; - - // Considered move has power and is not in sIgnoredPowerfulMoveEffects - // Check all other moves and calculate their power - for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++) - { - for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++) - { - if (gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].effect == sIgnoredPowerfulMoveEffects[i]) - break; - } - - if (gBattleMons[sBattler_AI].moves[checkedMove] != MOVE_NONE - && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END - && gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].power > 1) - { - gCurrentMove = gBattleMons[sBattler_AI].moves[checkedMove]; - AI_CalcDmg(sBattler_AI, gBattlerTarget); - TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget); - moveDmgs[checkedMove] = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[checkedMove] / 100; - if (moveDmgs[checkedMove] == 0) - moveDmgs[checkedMove] = 1; - } - else - { - moveDmgs[checkedMove] = 0; - } - } - - // Is the considered move the most powerful move available? - for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++) - { - if (moveDmgs[checkedMove] > moveDmgs[AI_THINKING_STRUCT->movesetIndex]) - break; - } - - if (checkedMove == MAX_MON_MOVES) - AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL; - else - AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL; - } - else - { - // Move has a power of 0/1, or is in the group sIgnoredPowerfulMoveEffects - AI_THINKING_STRUCT->funcResult = MOVE_POWER_OTHER; - } - - gAIScriptPtr++; -} - -static void Cmd_get_last_used_battler_move(void) -{ - if (gAIScriptPtr[1] == AI_USER) - AI_THINKING_STRUCT->funcResult = gLastMoves[sBattler_AI]; - else - AI_THINKING_STRUCT->funcResult = gLastMoves[gBattlerTarget]; - - gAIScriptPtr += 2; -} - -static void Cmd_if_equal_(void) // Same as if_equal. -{ - if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_not_equal_(void) // Same as if_not_equal. -{ - if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_user_goes(void) -{ - if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_user_doesnt_go(void) -{ - if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_nop_2A(void) -{ -} - -static void Cmd_nop_2B(void) -{ -} - -static void Cmd_count_usable_party_mons(void) -{ - u8 battlerId; - u8 battlerOnField1, battlerOnField2; - struct Pokemon *party; - s32 i; - - AI_THINKING_STRUCT->funcResult = 0; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - u32 position; - battlerOnField1 = gBattlerPartyIndexes[battlerId]; - position = GetBattlerPosition(battlerId) ^ BIT_FLANK; - battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)]; - } - else // In singles there's only one battlerId by side. - { - battlerOnField1 = gBattlerPartyIndexes[battlerId]; - battlerOnField2 = gBattlerPartyIndexes[battlerId]; - } - - for (i = 0; i < PARTY_SIZE; i++) - { - if (i != battlerOnField1 && i != battlerOnField2 - && GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) - { - AI_THINKING_STRUCT->funcResult++; - } - } - - gAIScriptPtr += 2; -} - -static void Cmd_get_considered_move(void) -{ - AI_THINKING_STRUCT->funcResult = AI_THINKING_STRUCT->moveConsidered; - gAIScriptPtr += 1; -} - -static void Cmd_get_considered_move_effect(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect; - gAIScriptPtr += 1; -} - -static void Cmd_get_ability(void) -{ - u8 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if (gActiveBattler != battlerId) - { - if (BATTLE_HISTORY->abilities[battlerId] != 0) - { - AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->abilities[battlerId]; - gAIScriptPtr += 2; - return; - } - - // abilities that prevent fleeing. - if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG - || gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL - || gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP) - { - AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability; - gAIScriptPtr += 2; - return; - } - - if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE) - { - if (gBaseStats[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE) - { - // AI has no knowledge of opponent, so it guesses which ability. - if (Random() & 1) - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0]; - else - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1]; - } - else - { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0]; // It's definitely ability 1. - } - } - else - { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1. - } - } - else - { - // The AI knows its own ability. - AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability; - } - - gAIScriptPtr += 2; -} - -static void Cmd_check_ability(void) -{ - u32 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]); - u32 ability = gAIScriptPtr[2]; - - if (gAIScriptPtr[1] == AI_TARGET || gAIScriptPtr[1] == AI_TARGET_PARTNER) - { - if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE) - { - ability = BATTLE_HISTORY->abilities[battlerId]; - AI_THINKING_STRUCT->funcResult = ability; - } - // Abilities that prevent fleeing. - else if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG - || gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL - || gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP) - { - ability = gBattleMons[battlerId].ability; - } - else if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE) - { - if (gBaseStats[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE) - { - u8 abilityDummyVariable = ability; // Needed to match. - if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != abilityDummyVariable - && gBaseStats[gBattleMons[battlerId].species].abilities[1] != abilityDummyVariable) - { - ability = gBaseStats[gBattleMons[battlerId].species].abilities[0]; - } - else - { - ability = ABILITY_NONE; - } - } - else - { - ability = gBaseStats[gBattleMons[battlerId].species].abilities[0]; - } - } - else - { - ability = gBaseStats[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1. - } - } - else - { - // The AI knows its own or partner's ability. - ability = gBattleMons[battlerId].ability; - } - - if (ability == 0) - AI_THINKING_STRUCT->funcResult = 2; // Unable to answer. - else if (ability == gAIScriptPtr[2]) - AI_THINKING_STRUCT->funcResult = 1; // Pokemon has the ability we wanted to check. - else - AI_THINKING_STRUCT->funcResult = 0; // Pokemon doesn't have the ability we wanted to check. - - gAIScriptPtr += 3; -} - -static void Cmd_get_highest_type_effectiveness(void) -{ - s32 i; - u8 *dynamicMoveType; - - gDynamicBasePower = 0; - dynamicMoveType = &gBattleStruct->dynamicMoveType; - *dynamicMoveType = 0; - gBattleScripting.dmgMultiplier = 1; - gMoveResultFlags = 0; - gCritMultiplier = 1; - AI_THINKING_STRUCT->funcResult = 0; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - gBattleMoveDamage = 40; - gCurrentMove = gBattleMons[sBattler_AI].moves[i]; - - if (gCurrentMove != MOVE_NONE) - { - TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget); - - if (gBattleMoveDamage == 120) // Super effective STAB. - gBattleMoveDamage = AI_EFFECTIVENESS_x2; - if (gBattleMoveDamage == 240) - gBattleMoveDamage = AI_EFFECTIVENESS_x4; - if (gBattleMoveDamage == 30) // Not very effective STAB. - gBattleMoveDamage = AI_EFFECTIVENESS_x0_5; - if (gBattleMoveDamage == 15) - gBattleMoveDamage = AI_EFFECTIVENESS_x0_25; - - if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) - gBattleMoveDamage = AI_EFFECTIVENESS_x0; - - if (AI_THINKING_STRUCT->funcResult < gBattleMoveDamage) - AI_THINKING_STRUCT->funcResult = gBattleMoveDamage; - } - } - - gAIScriptPtr += 1; -} - -static void Cmd_if_type_effectiveness(void) -{ - u8 damageVar; - - gDynamicBasePower = 0; - gBattleStruct->dynamicMoveType = 0; - gBattleScripting.dmgMultiplier = 1; - gMoveResultFlags = 0; - gCritMultiplier = 1; - - gBattleMoveDamage = AI_EFFECTIVENESS_x1; - gCurrentMove = AI_THINKING_STRUCT->moveConsidered; - - TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget); - - if (gBattleMoveDamage == 120) // Super effective STAB. - gBattleMoveDamage = AI_EFFECTIVENESS_x2; - if (gBattleMoveDamage == 240) - gBattleMoveDamage = AI_EFFECTIVENESS_x4; - if (gBattleMoveDamage == 30) // Not very effective STAB. - gBattleMoveDamage = AI_EFFECTIVENESS_x0_5; - if (gBattleMoveDamage == 15) - gBattleMoveDamage = AI_EFFECTIVENESS_x0_25; - - if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) - gBattleMoveDamage = AI_EFFECTIVENESS_x0; - - // Store gBattleMoveDamage in a u8 variable because gAIScriptPtr[1] is a u8. - damageVar = gBattleMoveDamage; - - if (damageVar == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_nop_32(void) -{ -} - -static void Cmd_nop_33(void) -{ -} - -static void Cmd_if_status_in_party(void) -{ - struct Pokemon *party; - s32 i; - u32 statusToCompareTo; - u8 battlerId; - - switch (gAIScriptPtr[1]) - { - case AI_USER: - battlerId = sBattler_AI; - break; - default: - battlerId = gBattlerTarget; - break; - } - - party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - - statusToCompareTo = T1_READ_32(gAIScriptPtr + 2); - - for (i = 0; i < PARTY_SIZE; i++) - { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES); - u16 hp = GetMonData(&party[i], MON_DATA_HP); - u32 status = GetMonData(&party[i], MON_DATA_STATUS); - - if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) - { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); - return; - } - } - - gAIScriptPtr += 10; -} - -static void Cmd_if_status_not_in_party(void) -{ - struct Pokemon *party; - s32 i; - u32 statusToCompareTo; - u8 battlerId; - - switch(gAIScriptPtr[1]) - { - case 1: - battlerId = sBattler_AI; - break; - default: - battlerId = gBattlerTarget; - break; - } - - party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - - statusToCompareTo = T1_READ_32(gAIScriptPtr + 2); - - for (i = 0; i < PARTY_SIZE; i++) - { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES); - u16 hp = GetMonData(&party[i], MON_DATA_HP); - u32 status = GetMonData(&party[i], MON_DATA_STATUS); - - if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) - { - gAIScriptPtr += 10; - #ifdef UBFIX - return; - #endif - } - } - - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); -} - -static void Cmd_get_weather(void) -{ - if (gBattleWeather & WEATHER_RAIN_ANY) - AI_THINKING_STRUCT->funcResult = AI_WEATHER_RAIN; - if (gBattleWeather & WEATHER_SANDSTORM_ANY) - AI_THINKING_STRUCT->funcResult = AI_WEATHER_SANDSTORM; - if (gBattleWeather & WEATHER_SUN_ANY) - AI_THINKING_STRUCT->funcResult = AI_WEATHER_SUN; - if (gBattleWeather & WEATHER_HAIL_ANY) - AI_THINKING_STRUCT->funcResult = AI_WEATHER_HAIL; - - gAIScriptPtr += 1; -} - -static void Cmd_if_effect(void) -{ - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_not_effect(void) -{ - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void Cmd_if_stat_level_less_than(void) -{ - u32 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); - else - gAIScriptPtr += 8; -} - -static void Cmd_if_stat_level_more_than(void) -{ - u32 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); - else - gAIScriptPtr += 8; -} - -static void Cmd_if_stat_level_equal(void) -{ - u32 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); - else - gAIScriptPtr += 8; -} - -static void Cmd_if_stat_level_not_equal(void) -{ - u32 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); - else - gAIScriptPtr += 8; -} - -static void Cmd_if_can_faint(void) -{ - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) - { - gAIScriptPtr += 5; - return; - } - - gDynamicBasePower = 0; - gBattleStruct->dynamicMoveType = 0; - gBattleScripting.dmgMultiplier = 1; - gMoveResultFlags = 0; - gCritMultiplier = 1; - gCurrentMove = AI_THINKING_STRUCT->moveConsidered; - AI_CalcDmg(sBattler_AI, gBattlerTarget); - TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget); - - gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100; - - // Moves always do at least 1 damage. - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - - if (gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -static void Cmd_if_cant_faint(void) -{ - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) - { - gAIScriptPtr += 5; - return; - } - - gDynamicBasePower = 0; - gBattleStruct->dynamicMoveType = 0; - gBattleScripting.dmgMultiplier = 1; - gMoveResultFlags = 0; - gCritMultiplier = 1; - gCurrentMove = AI_THINKING_STRUCT->moveConsidered; - AI_CalcDmg(sBattler_AI, gBattlerTarget); - TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget); - - gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100; - -#ifdef BUGFIX - // Moves always do at least 1 damage. - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; -#endif - - if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -static void Cmd_if_has_move(void) -{ - s32 i; - const u16 *movePtr = (u16 *)(gAIScriptPtr + 2); - - switch (gAIScriptPtr[1]) - { - case AI_USER: - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[sBattler_AI].moves[i] == *movePtr) - break; - } - if (i == MAX_MON_MOVES) - gAIScriptPtr += 8; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); - break; - case AI_USER_PARTNER: - if (gBattleMons[sBattler_AI ^ BIT_FLANK].hp == 0) - { - gAIScriptPtr += 8; - break; - } - else - { - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[sBattler_AI ^ BIT_FLANK].moves[i] == *movePtr) - break; - } - } - if (i == MAX_MON_MOVES) - gAIScriptPtr += 8; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); - break; - case AI_TARGET: - case AI_TARGET_PARTNER: - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == *movePtr) - break; - } - if (i == MAX_MON_MOVES) - gAIScriptPtr += 8; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); - break; - } -} - -static void Cmd_if_doesnt_have_move(void) -{ - s32 i; - const u16 *movePtr = (u16 *)(gAIScriptPtr + 2); - - switch(gAIScriptPtr[1]) - { - case AI_USER: - case AI_USER_PARTNER: // UB: no separate check for user partner. - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[sBattler_AI].moves[i] == *movePtr) - break; - } - if (i != MAX_MON_MOVES) - gAIScriptPtr += 8; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); - break; - case AI_TARGET: - case AI_TARGET_PARTNER: - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == *movePtr) - break; - } - if (i != MAX_MON_MOVES) - gAIScriptPtr += 8; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); - break; - } -} - -static void Cmd_if_has_move_with_effect(void) -{ - s32 i; - - switch (gAIScriptPtr[1]) - { - case AI_USER: - case AI_USER_PARTNER: - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].effect == gAIScriptPtr[2]) - break; - } - if (i == MAX_MON_MOVES) - gAIScriptPtr += 7; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - break; - case AI_TARGET: - case AI_TARGET_PARTNER: - for (i = 0; i < MAX_MON_MOVES; i++) - { - // BUG: checks sBattler_AI instead of gBattlerTarget. - #ifndef BUGFIX - if (gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i]].effect == gAIScriptPtr[2]) - break; - #else - if (gBattleMons[gBattlerTarget].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i]].effect == gAIScriptPtr[2]) - break; - #endif - } - if (i == MAX_MON_MOVES) - gAIScriptPtr += 7; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - break; - } -} - -static void Cmd_if_doesnt_have_move_with_effect(void) -{ - s32 i; - - switch (gAIScriptPtr[1]) - { - case AI_USER: - case AI_USER_PARTNER: - for (i = 0; i < MAX_MON_MOVES; i++) - { - if(gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].effect == gAIScriptPtr[2]) - break; - } - if (i != MAX_MON_MOVES) - gAIScriptPtr += 7; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - break; - case AI_TARGET: - case AI_TARGET_PARTNER: - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i]].effect == gAIScriptPtr[2]) - break; - } - if (i != MAX_MON_MOVES) - gAIScriptPtr += 7; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - break; - } -} - -static void Cmd_if_any_move_disabled_or_encored(void) -{ - u8 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if (gAIScriptPtr[2] == 0) - { - if (gDisableStructs[battlerId].disabledMove == MOVE_NONE) - gAIScriptPtr += 7; - else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - } - else if (gAIScriptPtr[2] != 1) - { - gAIScriptPtr += 7; - } - else - { - if (gDisableStructs[battlerId].encoredMove != MOVE_NONE) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; - } -} - -static void Cmd_if_curr_move_disabled_or_encored(void) -{ - switch (gAIScriptPtr[1]) - { - case 0: - if (gDisableStructs[gActiveBattler].disabledMove == AI_THINKING_STRUCT->moveConsidered) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; - break; - case 1: - if (gDisableStructs[gActiveBattler].encoredMove == AI_THINKING_STRUCT->moveConsidered) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; - break; - default: - gAIScriptPtr += 6; - break; - } -} - -static void Cmd_flee(void) -{ - AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_FLEE | AI_ACTION_DO_NOT_ATTACK); -} - -static void Cmd_if_random_safari_flee(void) -{ - u8 safariFleeRate = gBattleStruct->safariEscapeFactor * 5; // Safari flee rate, from 0-20. - - if ((u8)(Random() % 100) < safariFleeRate) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -static void Cmd_watch(void) -{ - AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK); -} - -static void Cmd_get_hold_effect(void) -{ - u8 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - if (gActiveBattler != battlerId) - AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(BATTLE_HISTORY->itemEffects[battlerId]); - else - AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[battlerId].item); - - gAIScriptPtr += 2; -} - -static void Cmd_if_holds_item(void) -{ - u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]); - u16 item; - u8 itemLo, itemHi; - - if ((battlerId & BIT_SIDE) == (sBattler_AI & BIT_SIDE)) - item = gBattleMons[battlerId].item; - else - item = BATTLE_HISTORY->itemEffects[battlerId]; - - itemHi = gAIScriptPtr[2]; - itemLo = gAIScriptPtr[3]; - -#ifdef BUGFIX - // This bug doesn't affect the vanilla game because this script command - // is only used to check ITEM_PERSIM_BERRY, whose high byte happens to - // be 0. - if (((itemHi << 8) | itemLo) == item) -#else - if ((itemLo | itemHi) == item) -#endif - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); - else - gAIScriptPtr += 8; -} - -static void Cmd_get_gender(void) -{ - u8 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerId].species, gBattleMons[battlerId].personality); - - gAIScriptPtr += 2; -} - -static void Cmd_is_first_turn_for(void) -{ - u8 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].isFirstTurn; - - gAIScriptPtr += 2; -} - -static void Cmd_get_stockpile_count(void) -{ - u8 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].stockpileCounter; - - gAIScriptPtr += 2; -} - -static void Cmd_is_double_battle(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleTypeFlags & BATTLE_TYPE_DOUBLE; - - gAIScriptPtr += 1; -} - -static void Cmd_get_used_held_item(void) -{ - u8 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - AI_THINKING_STRUCT->funcResult = *(u8 *)&gBattleStruct->usedHeldItems[battlerId]; - - gAIScriptPtr += 2; -} - -static void Cmd_get_move_type_from_result(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].type; - - gAIScriptPtr += 1; -} - -static void Cmd_get_move_power_from_result(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].power; - - gAIScriptPtr += 1; -} - -static void Cmd_get_move_effect_from_result(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].effect; - - gAIScriptPtr += 1; -} - -static void Cmd_get_protect_count(void) -{ - u8 battlerId; - - if (gAIScriptPtr[1] == AI_USER) - battlerId = sBattler_AI; - else - battlerId = gBattlerTarget; - - AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].protectUses; - - gAIScriptPtr += 2; -} - -static void Cmd_nop_52(void) -{ -} - -static void Cmd_nop_53(void) -{ -} - -static void Cmd_nop_54(void) -{ -} - -static void Cmd_nop_55(void) -{ -} - -static void Cmd_nop_56(void) -{ -} - -static void Cmd_nop_57(void) -{ -} - -static void Cmd_call(void) -{ - AIStackPushVar(gAIScriptPtr + 5); - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); -} - -static void Cmd_goto(void) -{ - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); -} - -static void Cmd_end(void) -{ - if (AIStackPop() == 0) - AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE; -} - -static void Cmd_if_level_cond(void) -{ - switch (gAIScriptPtr[1]) - { - case 0: // greater than - if (gBattleMons[sBattler_AI].level > gBattleMons[gBattlerTarget].level) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; - break; - case 1: // less than - if (gBattleMons[sBattler_AI].level < gBattleMons[gBattlerTarget].level) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; - break; - case 2: // equal - if (gBattleMons[sBattler_AI].level == gBattleMons[gBattlerTarget].level) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; - break; - } -} - -static void Cmd_if_target_taunted(void) -{ - if (gDisableStructs[gBattlerTarget].tauntTimer != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -static void Cmd_if_target_not_taunted(void) -{ - if (gDisableStructs[gBattlerTarget].tauntTimer == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -static void Cmd_if_target_is_ally(void) -{ - if ((sBattler_AI & BIT_SIDE) == (gBattlerTarget & BIT_SIDE)) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -static void Cmd_if_flash_fired(void) -{ - u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]); - - if (gBattleResources->flags->flags[battlerId] & RESOURCE_FLAG_FLASH_FIRE) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void AIStackPushVar(const u8 *var) -{ - gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = var; -} - -static void AIStackPushVar_cursor(void) -{ - gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = gAIScriptPtr; -} - -static bool8 AIStackPop(void) -{ - if (gBattleResources->AI_ScriptsStack->size != 0) - { - --gBattleResources->AI_ScriptsStack->size; - gAIScriptPtr = gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size]; - return TRUE; - } - else - { - return FALSE; - } -} diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 04122b17d1..e29970cdf1 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1,7 +1,12 @@ #include "global.h" #include "battle.h" +#include "battle_ai_main.h" +#include "battle_ai_util.h" #include "battle_anim.h" #include "battle_controllers.h" +#include "battle_main.h" +#include "battle_setup.h" +#include "data.h" #include "pokemon.h" #include "random.h" #include "util.h" @@ -12,8 +17,44 @@ // this file's functions static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng); -static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent); +static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent); static bool8 ShouldUseItem(void); +static bool32 AI_ShouldHeal(u32 healAmount); +static bool32 AI_OpponentCanFaintAiWithMod(u32 healAmount); + +void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId) +{ + if (BATTLE_TWO_VS_ONE_OPPONENT && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT) + { + *firstId = 0, *lastId = PARTY_SIZE; + } + else if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_TOWER_LINK_MULTI)) + { + if ((battlerId & BIT_FLANK) == B_FLANK_LEFT) + *firstId = 0, *lastId = PARTY_SIZE / 2; + else + *firstId = PARTY_SIZE / 2, *lastId = PARTY_SIZE; + } + else + { + *firstId = 0, *lastId = PARTY_SIZE; + } +} + +static bool8 ShouldSwitchIfAllBadMoves(void) +{ + if (gBattleResources->ai->switchMon) + { + gBattleResources->ai->switchMon = 0; + *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); + return TRUE; + } + else + { + return FALSE; + } +} static bool8 ShouldSwitchIfPerishSong(void) { @@ -21,7 +62,7 @@ static bool8 ShouldSwitchIfPerishSong(void) && gDisableStructs[gActiveBattler].perishSongTimer == 0) { *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; - BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); return TRUE; } else @@ -34,7 +75,6 @@ static bool8 ShouldSwitchIfWonderGuard(void) { u8 opposingPosition; u8 opposingBattler; - u8 moveFlags; s32 i, j; s32 firstId; s32 lastId; // + 1 @@ -46,33 +86,22 @@ static bool8 ShouldSwitchIfWonderGuard(void) opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(gActiveBattler)); - if (gBattleMons[GetBattlerAtPosition(opposingPosition)].ability != ABILITY_WONDER_GUARD) + if (GetBattlerAbility(GetBattlerAtPosition(opposingPosition)) != ABILITY_WONDER_GUARD) return FALSE; // Check if Pokemon has a super effective move. for (opposingBattler = GetBattlerAtPosition(opposingPosition), i = 0; i < MAX_MON_MOVES; i++) { move = gBattleMons[gActiveBattler].moves[i]; - if (move == MOVE_NONE) - continue; - - moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability); - if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE) - return FALSE; + if (move != MOVE_NONE) + { + if (AI_GetTypeEffectiveness(move, gActiveBattler, opposingBattler) >= UQ_4_12(2.0)) + return FALSE; + } } // Get party information. - if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI)) - { - if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT) - firstId = 0, lastId = 3; - else - firstId = 3, lastId = 6; - } - else - { - firstId = 0, lastId = 6; - } + GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) party = gPlayerParty; @@ -91,22 +120,18 @@ static bool8 ShouldSwitchIfWonderGuard(void) if (i == gBattlerPartyIndexes[gActiveBattler]) continue; - GetMonData(&party[i], MON_DATA_SPECIES); // Unused return value. - GetMonData(&party[i], MON_DATA_ABILITY_NUM); // Unused return value. - for (opposingBattler = GetBattlerAtPosition(opposingPosition), j = 0; j < MAX_MON_MOVES; j++) { move = GetMonData(&party[i], MON_DATA_MOVE1 + j); - if (move == MOVE_NONE) - continue; - - moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability); - if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % 3 < 2) + if (move != MOVE_NONE) { - // We found a mon. - *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i; - BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); - return TRUE; + if (AI_GetTypeEffectiveness(move, gActiveBattler, opposingBattler) >= UQ_4_12(2.0) && Random() % 3 < 2) + { + // We found a mon. + *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i; + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); + return TRUE; + } } } } @@ -117,7 +142,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) static bool8 FindMonThatAbsorbsOpponentsMove(void) { u8 battlerIn1, battlerIn2; - u8 absorbingTypeAbility; + u16 absorbingTypeAbility; s32 firstId; s32 lastId; // + 1 struct Pokemon *party; @@ -125,11 +150,11 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) if (HasSuperEffectiveMoveAgainstOpponents(TRUE) && Random() % 3 != 0) return FALSE; - if (gLastLandedMoves[gActiveBattler] == 0) + if (gLastLandedMoves[gActiveBattler] == MOVE_NONE) return FALSE; - if (gLastLandedMoves[gActiveBattler] == 0xFFFF) + if (gLastLandedMoves[gActiveBattler] == MOVE_UNAVAILABLE) return FALSE; - if (gBattleMoves[gLastLandedMoves[gActiveBattler]].power == 0) + if (IS_MOVE_STATUS(gLastLandedMoves[gActiveBattler])) return FALSE; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) @@ -155,20 +180,10 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) else return FALSE; - if (gBattleMons[gActiveBattler].ability == absorbingTypeAbility) + if (AI_GetAbility(gActiveBattler) == absorbingTypeAbility) return FALSE; - if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI)) - { - if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT) - firstId = 0, lastId = 3; - else - firstId = 3, lastId = 6; - } - else - { - firstId = 0, lastId = 6; - } + GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) party = gPlayerParty; @@ -178,7 +193,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) for (i = firstId; i < lastId; i++) { u16 species; - u8 monAbility; + u16 monAbility; if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; @@ -205,7 +220,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) { // we found a mon. *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i; - BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); return TRUE; } } @@ -217,21 +232,23 @@ static bool8 ShouldSwitchIfNaturalCure(void) { if (!(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)) return FALSE; - if (gBattleMons[gActiveBattler].ability != ABILITY_NATURAL_CURE) + if (AI_GetAbility(gActiveBattler) != ABILITY_NATURAL_CURE) return FALSE; if (gBattleMons[gActiveBattler].hp < gBattleMons[gActiveBattler].maxHP / 2) return FALSE; - if ((gLastLandedMoves[gActiveBattler] == 0 || gLastLandedMoves[gActiveBattler] == 0xFFFF) && Random() & 1) + if ((gLastLandedMoves[gActiveBattler] == MOVE_NONE + || gLastLandedMoves[gActiveBattler] == MOVE_UNAVAILABLE) + && Random() & 1) { *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; - BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); return TRUE; } - else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].power == 0 && Random() & 1) + else if (IS_MOVE_STATUS(gLastLandedMoves[gActiveBattler]) && Random() & 1) { *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; - BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); return TRUE; } @@ -243,7 +260,7 @@ static bool8 ShouldSwitchIfNaturalCure(void) if (Random() & 1) { *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; - BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); return TRUE; } @@ -255,7 +272,6 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng) u8 opposingPosition; u8 opposingBattler; s32 i; - u8 moveFlags; u16 move; opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(gActiveBattler)); @@ -269,8 +285,7 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng) if (move == MOVE_NONE) continue; - moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability); - if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE) + if (AI_GetTypeEffectiveness(move, gActiveBattler, opposingBattler) >= UQ_4_12(2.0)) { if (noRng) return TRUE; @@ -292,8 +307,7 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng) if (move == MOVE_NONE) continue; - moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability); - if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE) + if (AI_GetTypeEffectiveness(move, gActiveBattler, opposingBattler) >= UQ_4_12(2.0)) { if (noRng) return TRUE; @@ -320,7 +334,7 @@ static bool8 AreStatsRaised(void) return (buffedStatsValue > 3); } -static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) +static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent) { u8 battlerIn1, battlerIn2; s32 firstId; @@ -328,15 +342,14 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) struct Pokemon *party; s32 i, j; u16 move; - u8 moveFlags; - if (gLastLandedMoves[gActiveBattler] == 0) + if (gLastLandedMoves[gActiveBattler] == MOVE_NONE) return FALSE; - if (gLastLandedMoves[gActiveBattler] == 0xFFFF) + if (gLastLandedMoves[gActiveBattler] == MOVE_UNAVAILABLE) return FALSE; if (gLastHitBy[gActiveBattler] == 0xFF) return FALSE; - if (gBattleMoves[gLastLandedMoves[gActiveBattler]].power == 0) + if (IS_MOVE_STATUS(gLastLandedMoves[gActiveBattler])) return FALSE; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) @@ -353,17 +366,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) battlerIn2 = gActiveBattler; } - if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI)) - { - if ((gActiveBattler & BIT_FLANK) == 0) - firstId = 0, lastId = 3; - else - firstId = 3, lastId = 6; - } - else - { - firstId = 0, lastId = 6; - } + GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) party = gPlayerParty; @@ -373,7 +376,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) for (i = firstId; i < lastId; i++) { u16 species; - u8 monAbility; + u16 monAbility; if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; @@ -396,8 +399,8 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) else monAbility = gBaseStats[species].abilities[0]; - moveFlags = AI_TypeCalc(gLastLandedMoves[gActiveBattler], species, monAbility); - if (moveFlags & flags) + CalcPartyMonTypeEffectivenessMultiplier(gLastLandedMoves[gActiveBattler], species, monAbility); + if (gMoveResultFlags & flags) { battlerIn1 = gLastHitBy[gActiveBattler]; @@ -407,11 +410,10 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) if (move == 0) continue; - moveFlags = AI_TypeCalc(move, gBattleMons[battlerIn1].species, gBattleMons[battlerIn1].ability); - if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % moduloPercent == 0) + if (AI_GetTypeEffectiveness(move, gActiveBattler, battlerIn1) >= UQ_4_12(2.0) && Random() % moduloPercent == 0) { *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i; - BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); return TRUE; } } @@ -421,60 +423,41 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) return FALSE; } -static bool8 ShouldSwitch(void) +bool32 ShouldSwitch(void) { u8 battlerIn1, battlerIn2; - u8 *activeBattlerPtr; // Needed to match. s32 firstId; s32 lastId; // + 1 struct Pokemon *party; s32 i; s32 availableToSwitch; - if (gBattleMons[*(activeBattlerPtr = &gActiveBattler)].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) return FALSE; if (gStatuses3[gActiveBattler] & STATUS3_ROOTED) return FALSE; - if (ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG)) + if (IsAbilityPreventingEscape(gActiveBattler)) return FALSE; - if (ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP)) // Misses the flying type and Levitate check. - return FALSE; - if (ABILITY_ON_FIELD2(ABILITY_MAGNET_PULL)) - { - if (gBattleMons[gActiveBattler].type1 == TYPE_STEEL) - return FALSE; - if (gBattleMons[gActiveBattler].type2 == TYPE_STEEL) - return FALSE; - } if (gBattleTypeFlags & BATTLE_TYPE_ARENA) return FALSE; availableToSwitch = 0; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - battlerIn1 = *activeBattlerPtr; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(*activeBattlerPtr) ^ BIT_FLANK)]) - battlerIn2 = *activeBattlerPtr; + battlerIn1 = gActiveBattler; + if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)]) + battlerIn2 = gActiveBattler; else - battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(*activeBattlerPtr) ^ BIT_FLANK); + battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK); } else { - battlerIn1 = *activeBattlerPtr; - battlerIn2 = *activeBattlerPtr; + battlerIn1 = gActiveBattler; + battlerIn2 = gActiveBattler; } - if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI)) - { - if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT) - firstId = 0, lastId = 3; - else - firstId = 3, lastId = 6; - } - else - { - firstId = 0, lastId = 6; - } + GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) party = gPlayerParty; @@ -503,6 +486,8 @@ static bool8 ShouldSwitch(void) if (availableToSwitch == 0) return FALSE; + if (ShouldSwitchIfAllBadMoves()) + return TRUE; if (ShouldSwitchIfPerishSong()) return TRUE; if (ShouldSwitchIfWonderGuard()) @@ -555,17 +540,7 @@ void AI_TrySwitchOrUseItem(void) battlerIn2 = GetBattlerAtPosition(battlerIdentity ^ BIT_FLANK); } - if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI)) - { - if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT) - firstId = 0, lastId = 3; - else - firstId = 3, lastId = 6; - } - else - { - firstId = 0, lastId = 6; - } + GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); for (monToSwitchId = firstId; monToSwitchId < lastId; monToSwitchId++) { @@ -596,45 +571,145 @@ void AI_TrySwitchOrUseItem(void) } } - BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, (gActiveBattler ^ BIT_SIDE) << 8); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_MOVE, (gActiveBattler ^ BIT_SIDE) << 8); } -static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8 *var) +// If there are two(or more) mons to choose from, always choose one that has baton pass +// as most often it can't do much on its own. +static u32 GetBestMonBatonPass(struct Pokemon *party, int firstId, int lastId, u8 invalidMons, int aliveCount) { - s32 i = 0; + int i, j, bits = 0; - while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) + for (i = firstId; i < lastId; i++) { - if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) - { - i += 3; + if (invalidMons & gBitTable[i]) continue; - } - else if (TYPE_EFFECT_ATK_TYPE(i) == atkType) + + for (j = 0; j < MAX_MON_MOVES; j++) { - // Check type1. - if (TYPE_EFFECT_DEF_TYPE(i) == defType1) - *var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10; - // Check type2. - if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) - *var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10; + if (GetMonData(&party[i], MON_DATA_MOVE1 + j, NULL) == MOVE_BATON_PASS) + { + bits |= gBitTable[i]; + break; + } } - i += 3; } + + if ((aliveCount == 2 || (aliveCount > 2 && Random() % 3 == 0)) && bits) + { + do + { + i = (Random() % (lastId - firstId)) + firstId; + } while (!(bits & gBitTable[i])); + return i; + } + + return PARTY_SIZE; +} + +static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, u8 invalidMons, u32 opposingBattler) +{ + int i, bits = 0; + + while (bits != 0x3F) // All mons were checked. + { + u32 bestResist = UQ_4_12(1.0); + int bestMonId = PARTY_SIZE; + // Find the mon whose type is the most suitable defensively. + for (i = firstId; i < lastId; i++) + { + if (!(gBitTable[i] & invalidMons) && !(gBitTable[i] & bits)) + { + u16 species = GetMonData(&party[i], MON_DATA_SPECIES); + u32 typeEffectiveness = UQ_4_12(1.0); + + u8 atkType1 = gBattleMons[opposingBattler].type1; + u8 atkType2 = gBattleMons[opposingBattler].type2; + u8 defType1 = gBaseStats[species].type1; + u8 defType2 = gBaseStats[species].type2; + + typeEffectiveness *= GetTypeModifier(atkType1, defType1); + if (atkType2 != atkType1) + typeEffectiveness *= GetTypeModifier(atkType2, defType1); + if (defType2 != defType1) + { + typeEffectiveness *= GetTypeModifier(atkType1, defType2); + if (atkType2 != atkType1) + typeEffectiveness *= GetTypeModifier(atkType2, defType2); + } + if (typeEffectiveness < bestResist) + { + bestResist = typeEffectiveness; + bestMonId = i; + } + } + } + + // Ok, we know the mon has the right typing but does it have at least one super effective move? + if (bestMonId != PARTY_SIZE) + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + u32 move = GetMonData(&party[bestMonId], MON_DATA_MOVE1 + i); + if (move != MOVE_NONE && AI_GetTypeEffectiveness(move, gActiveBattler, opposingBattler) >= UQ_4_12(2.0)) + break; + } + + if (i != MAX_MON_MOVES) + return bestMonId; // Has both the typing and at least one super effective move. + + bits |= gBitTable[bestMonId]; // Sorry buddy, we want something better. + } + else + { + bits = 0x3F; // No viable mon to switch. + } + } + + return PARTY_SIZE; +} + +static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 invalidMons, u32 opposingBattler) +{ + int i, j; + int bestDmg = 0; + int bestMonId = PARTY_SIZE; + + gMoveResultFlags = 0; + // If we couldn't find the best mon in terms of typing, find the one that deals most damage. + for (i = firstId; i < lastId; i++) + { + if (gBitTable[i] & invalidMons) + continue; + + for (j = 0; j < MAX_MON_MOVES; j++) + { + u32 move = GetMonData(&party[i], MON_DATA_MOVE1 + j); + if (move != MOVE_NONE && gBattleMoves[move].power != 0) + { + s32 dmg = AI_CalcPartyMonDamage(move, gActiveBattler, opposingBattler, &party[i]); + if (bestDmg < dmg) + { + bestDmg = dmg; + bestMonId = i; + } + } + } + } + + return bestMonId; } u8 GetMostSuitableMonToSwitchInto(void) { - u8 opposingBattler; - u8 bestDmg; // Note : should be changed to u32 for obvious reasons. - u8 bestMonId; - u8 battlerIn1, battlerIn2; - s32 firstId; - s32 lastId; // + 1 + u32 opposingBattler = 0; + u32 bestMonId = 0; + u8 battlerIn1 = 0, battlerIn2 = 0; + s32 firstId = 0; + s32 lastId = 0; // + 1 struct Pokemon *party; - s32 i, j; - u8 invalidMons; - u16 move; + s32 i, j, aliveCount = 0; + u8 invalidMons = 0; if (*(gBattleStruct->monToSwitchIntoId + gActiveBattler) != PARTY_SIZE) return *(gBattleStruct->monToSwitchIntoId + gActiveBattler); @@ -649,8 +724,7 @@ u8 GetMostSuitableMonToSwitchInto(void) else battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK); - // UB: It considers the opponent only player's side even though it can battle alongside player. - opposingBattler = Random() & BIT_FLANK; + opposingBattler = BATTLE_OPPOSITE(battlerIn1); if (gAbsentBattlerFlags & gBitTable[opposingBattler]) opposingBattler ^= BIT_FLANK; } @@ -661,124 +735,44 @@ u8 GetMostSuitableMonToSwitchInto(void) battlerIn2 = gActiveBattler; } - if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI)) - { - if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT) - firstId = 0, lastId = 3; - else - firstId = 3, lastId = 6; - } - else - { - firstId = 0, lastId = 6; - } + GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) party = gPlayerParty; else party = gEnemyParty; - invalidMons = 0; - - while (invalidMons != 0x3F) // All mons are invalid. - { - bestDmg = 0; - bestMonId = 6; - // Find the mon whose type is the most suitable offensively. - for (i = firstId; i < lastId; i++) - { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES); - if (species != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_HP) != 0 - && !(gBitTable[i] & invalidMons) - && gBattlerPartyIndexes[battlerIn1] != i - && gBattlerPartyIndexes[battlerIn2] != i - && i != *(gBattleStruct->monToSwitchIntoId + battlerIn1) - && i != *(gBattleStruct->monToSwitchIntoId + battlerIn2)) - { - u8 type1 = gBaseStats[species].type1; - u8 type2 = gBaseStats[species].type2; - u8 typeDmg = 10; - ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type1, type1, type2, &typeDmg); - ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type2, type1, type2, &typeDmg); - if (bestDmg < typeDmg) - { - bestDmg = typeDmg; - bestMonId = i; - } - } - else - { - invalidMons |= gBitTable[i]; - } - } - - // Ok, we know the mon has the right typing but does it have at least one super effective move? - if (bestMonId != PARTY_SIZE) - { - for (i = 0; i < MAX_MON_MOVES; i++) - { - move = GetMonData(&party[bestMonId], MON_DATA_MOVE1 + i); - if (move != MOVE_NONE && TypeCalc(move, gActiveBattler, opposingBattler) & MOVE_RESULT_SUPER_EFFECTIVE) - break; - } - - if (i != MAX_MON_MOVES) - return bestMonId; // Has both the typing and at least one super effective move. - - invalidMons |= gBitTable[bestMonId]; // Sorry buddy, we want something better. - } - else - { - invalidMons = 0x3F; // No viable mon to switch. - } - } - - gDynamicBasePower = 0; - gBattleStruct->dynamicMoveType = 0; - gBattleScripting.dmgMultiplier = 1; - gMoveResultFlags = 0; - gCritMultiplier = 1; - bestDmg = 0; - bestMonId = 6; - - // If we couldn't find the best mon in terms of typing, find the one that deals most damage. + // Get invalid slots ids. for (i = firstId; i < lastId; i++) { - if ((u16)(GetMonData(&party[i], MON_DATA_SPECIES)) == SPECIES_NONE) - continue; - if (GetMonData(&party[i], MON_DATA_HP) == 0) - continue; - if (gBattlerPartyIndexes[battlerIn1] == i) - continue; - if (gBattlerPartyIndexes[battlerIn2] == i) - continue; - if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1)) - continue; - if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) - continue; - - for (j = 0; j < MAX_MON_MOVES; j++) - { - move = GetMonData(&party[i], MON_DATA_MOVE1 + j); - gBattleMoveDamage = 0; - if (move != MOVE_NONE && gBattleMoves[move].power != 1) - { - AI_CalcDmg(gActiveBattler, opposingBattler); - TypeCalc(move, gActiveBattler, opposingBattler); - } - if (bestDmg < gBattleMoveDamage) - { - bestDmg = gBattleMoveDamage; - bestMonId = i; - } - } + if (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE + || GetMonData(&party[i], MON_DATA_HP) == 0 + || gBattlerPartyIndexes[battlerIn1] == i + || gBattlerPartyIndexes[battlerIn2] == i + || i == *(gBattleStruct->monToSwitchIntoId + battlerIn1) + || i == *(gBattleStruct->monToSwitchIntoId + battlerIn2) + || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(gActiveBattler, opposingBattler))) // While not really invalid per say, not really wise to switch into this mon. + invalidMons |= gBitTable[i]; + else + aliveCount++; } - return bestMonId; + bestMonId = GetBestMonBatonPass(party, firstId, lastId, invalidMons, aliveCount); + if (bestMonId != PARTY_SIZE) + return bestMonId; + + bestMonId = GetBestMonTypeMatchup(party, firstId, lastId, invalidMons, opposingBattler); + if (bestMonId != PARTY_SIZE) + return bestMonId; + + bestMonId = GetBestMonDmg(party, firstId, lastId, invalidMons, opposingBattler); + if (bestMonId != PARTY_SIZE) + return bestMonId; + + return PARTY_SIZE; } -static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u16 as item Id argument +static u8 GetAI_ItemType(u16 itemId, const u8 *itemEffect) { if (itemId == ITEM_FULL_RESTORE) return AI_ITEM_FULL_RESTORE; @@ -786,7 +780,7 @@ static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u return AI_ITEM_HEAL_HP; else if (itemEffect[3] & ITEM3_STATUS_ALL) return AI_ITEM_CURE_CONDITION; - else if (itemEffect[0] & (ITEM0_DIRE_HIT | ITEM0_X_ATTACK) || itemEffect[1] != 0 || itemEffect[2] != 0) + else if ((itemEffect[0] & ITEM0_DIRE_HIT) || itemEffect[1]) return AI_ITEM_X_STAT; else if (itemEffect[3] & ITEM3_GUARD_SPEC) return AI_ITEM_GUARD_SPEC; @@ -794,6 +788,25 @@ static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u return AI_ITEM_NOT_RECOGNIZABLE; } +static bool32 AiExpectsToFaintPlayer(void) +{ + bool32 canFaintPlayer; + u32 i; + u8 target = gBattleStruct->aiChosenTarget[gActiveBattler]; + + if (gBattleStruct->aiMoveOrAction[gActiveBattler] > 3) + return FALSE; // AI not planning to use move + + if (GetBattlerSide(target) != GetBattlerSide(gActiveBattler) + && CanIndexMoveFaintTarget(gActiveBattler, target, gBattleStruct->aiMoveOrAction[gActiveBattler], 0) + && AI_WhoStrikesFirst(gActiveBattler, target, GetAIChosenMove(gActiveBattler)) == AI_IS_FASTER) { + // We expect to faint the target and move first -> dont use an item + return TRUE; + } + + return FALSE; +} + static bool8 ShouldUseItem(void) { struct Pokemon *party; @@ -801,7 +814,15 @@ static bool8 ShouldUseItem(void) u8 validMons = 0; bool8 shouldUse = FALSE; - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT) + // If teaming up with player and Pokemon is on the right, or Pokemon is currently held by Sky Drop + if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT) + || gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED) + return FALSE; + + if (gStatuses3[gActiveBattler] & STATUS3_EMBARGO) + return FALSE; + + if (AiExpectsToFaintPlayer()) return FALSE; if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) @@ -834,7 +855,7 @@ static bool8 ShouldUseItem(void) if (gItemEffectTable[item - ITEM_POTION] == NULL) continue; - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) itemEffects = gSaveBlock1Ptr->enigmaBerry.itemEffect; else itemEffects = gItemEffectTable[item - ITEM_POTION]; @@ -844,20 +865,10 @@ static bool8 ShouldUseItem(void) switch (*(gBattleStruct->AI_itemType + gActiveBattler / 2)) { case AI_ITEM_FULL_RESTORE: - if (gBattleMons[gActiveBattler].hp >= gBattleMons[gActiveBattler].maxHP / 4) - break; - if (gBattleMons[gActiveBattler].hp == 0) - break; - shouldUse = TRUE; + shouldUse = AI_ShouldHeal(0); break; case AI_ITEM_HEAL_HP: - paramOffset = GetItemEffectParamOffset(item, 4, 4); - if (paramOffset == 0) - break; - if (gBattleMons[gActiveBattler].hp == 0) - break; - if (gBattleMons[gActiveBattler].hp < gBattleMons[gActiveBattler].maxHP / 4 || gBattleMons[gActiveBattler].maxHP - gBattleMons[gActiveBattler].hp > itemEffects[paramOffset]) - shouldUse = TRUE; + shouldUse = AI_ShouldHeal(itemEffects[GetItemEffectParamOffset(item, 4, 4)]); break; case AI_ITEM_CURE_CONDITION: *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) = 0; @@ -866,7 +877,7 @@ static bool8 ShouldUseItem(void) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_SLEEP); shouldUse = TRUE; } - if (itemEffects[3] & ITEM3_POISON && (gBattleMons[gActiveBattler].status1 & STATUS1_POISON + if (itemEffects[3] & ITEM3_POISON && (gBattleMons[gActiveBattler].status1 & STATUS1_POISON || gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON)) { *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_POISON); @@ -897,15 +908,17 @@ static bool8 ShouldUseItem(void) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) = 0; if (gDisableStructs[gActiveBattler].isFirstTurn == 0) break; - if (itemEffects[0] & ITEM0_X_ATTACK) + if (itemEffects[1] & ITEM1_X_ATTACK) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_ATTACK); - if (itemEffects[1] & ITEM1_X_DEFEND) + if (itemEffects[1] & ITEM1_X_DEFENSE) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_DEFEND); if (itemEffects[1] & ITEM1_X_SPEED) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPEED); - if (itemEffects[2] & ITEM2_X_SPATK) + if (itemEffects[1] & ITEM1_X_SPATK) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPATK); - if (itemEffects[2] & ITEM2_X_ACCURACY) + if (itemEffects[1] & ITEM1_X_SPDEF) + *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPDEF); + if (itemEffects[1] & ITEM1_X_ACCURACY) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_ACCURACY); if (itemEffects[0] & ITEM0_DIRE_HIT) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_DIRE_HIT); @@ -922,7 +935,7 @@ static bool8 ShouldUseItem(void) if (shouldUse) { - BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_ITEM, 0); *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2) = item; gBattleResources->battleHistory->trainerItems[i] = 0; return shouldUse; @@ -931,3 +944,32 @@ static bool8 ShouldUseItem(void) return FALSE; } + +static bool32 AI_ShouldHeal(u32 healAmount) +{ + bool32 shouldHeal = FALSE; + + if (gBattleMons[gActiveBattler].hp < gBattleMons[gActiveBattler].maxHP / 4 + || gBattleMons[gActiveBattler].hp == 0 + || (healAmount != 0 && gBattleMons[gActiveBattler].maxHP - gBattleMons[gActiveBattler].hp > healAmount)) { + // We have low enough HP to consider healing + shouldHeal = !AI_OpponentCanFaintAiWithMod(healAmount); // if target can kill us even after we heal, why bother + } + + return shouldHeal; +} + +static bool32 AI_OpponentCanFaintAiWithMod(u32 healAmount) +{ + u32 i; + // Check special cases to NOT heal + for (i = 0; i < gBattlersCount; i++) { + if (GetBattlerSide(i) == B_SIDE_PLAYER) { + if (CanTargetFaintAiWithMod(i, gActiveBattler, healAmount, 0)) { + // Target is expected to faint us + return TRUE; + } + } + } + return FALSE; +} diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c new file mode 100644 index 0000000000..25c7f3b9d5 --- /dev/null +++ b/src/battle_ai_util.c @@ -0,0 +1,3635 @@ +#include "global.h" +#include "battle_z_move.h" +#include "malloc.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_ai_util.h" +#include "battle_ai_main.h" +#include "battle_ai_switch_items.h" +#include "battle_factory.h" +#include "battle_setup.h" +#include "data.h" +#include "item.h" +#include "pokemon.h" +#include "random.h" +#include "recorded_battle.h" +#include "util.h" +#include "constants/abilities.h" +#include "constants/battle_ai.h" +#include "constants/battle_move_effects.h" +#include "constants/hold_effects.h" +#include "constants/moves.h" +#include "constants/items.h" + +static u32 AI_GetEffectiveness(u16 multiplier); + +// Const Data +static const s8 sAiAbilityRatings[ABILITIES_COUNT] = +{ + [ABILITY_ADAPTABILITY] = 8, + [ABILITY_AFTERMATH] = 5, + [ABILITY_AERILATE] = 8, + [ABILITY_AIR_LOCK] = 5, + [ABILITY_ANALYTIC] = 5, + [ABILITY_ANGER_POINT] = 4, + [ABILITY_ANTICIPATION] = 2, + [ABILITY_ARENA_TRAP] = 9, + [ABILITY_AROMA_VEIL] = 3, + [ABILITY_AURA_BREAK] = 3, + [ABILITY_BAD_DREAMS] = 4, + [ABILITY_BATTERY] = 0, + [ABILITY_BATTLE_ARMOR] = 2, + [ABILITY_BATTLE_BOND] = 6, + [ABILITY_BEAST_BOOST] = 7, + [ABILITY_BERSERK] = 5, + [ABILITY_BIG_PECKS] = 1, + [ABILITY_BLAZE] = 5, + [ABILITY_BULLETPROOF] = 7, + [ABILITY_CHEEK_POUCH] = 4, + [ABILITY_CHLOROPHYLL] = 6, + [ABILITY_CLEAR_BODY] = 4, + [ABILITY_CLOUD_NINE] = 5, + [ABILITY_COLOR_CHANGE] = 2, + [ABILITY_COMATOSE] = 6, + [ABILITY_COMPETITIVE] = 5, + [ABILITY_COMPOUND_EYES] = 7, + [ABILITY_CONTRARY] = 8, + [ABILITY_CORROSION] = 5, + [ABILITY_CURSED_BODY] = 4, + [ABILITY_CUTE_CHARM] = 2, + [ABILITY_DAMP] = 2, + [ABILITY_DANCER] = 5, + [ABILITY_DARK_AURA] = 6, + [ABILITY_DAZZLING] = 5, + [ABILITY_DEFEATIST] = -1, + [ABILITY_DEFIANT] = 5, + [ABILITY_DELTA_STREAM] = 10, + [ABILITY_DESOLATE_LAND] = 10, + [ABILITY_DISGUISE] = 8, + [ABILITY_DOWNLOAD] = 7, + [ABILITY_DRIZZLE] = 9, + [ABILITY_DROUGHT] = 9, + [ABILITY_DRY_SKIN] = 6, + [ABILITY_EARLY_BIRD] = 4, + [ABILITY_EFFECT_SPORE] = 4, + [ABILITY_ELECTRIC_SURGE] = 8, + [ABILITY_EMERGENCY_EXIT] = 3, + [ABILITY_FAIRY_AURA] = 6, + [ABILITY_FILTER] = 6, + [ABILITY_FLAME_BODY] = 4, + [ABILITY_FLARE_BOOST] = 5, + [ABILITY_FLASH_FIRE] = 6, + [ABILITY_FLOWER_GIFT] = 4, + [ABILITY_FLOWER_VEIL] = 0, + [ABILITY_FLUFFY] = 5, + [ABILITY_FORECAST] = 6, + [ABILITY_FOREWARN] = 2, + [ABILITY_FRIEND_GUARD] = 0, + [ABILITY_FRISK] = 3, + [ABILITY_FULL_METAL_BODY] = 4, + [ABILITY_FUR_COAT] = 7, + [ABILITY_GALE_WINGS] = 6, + [ABILITY_GALVANIZE] = 8, + [ABILITY_GLUTTONY] = 3, + [ABILITY_GOOEY] = 5, + [ABILITY_GRASS_PELT] = 2, + [ABILITY_GRASSY_SURGE] = 8, + [ABILITY_GUTS] = 6, + [ABILITY_HARVEST] = 5, + [ABILITY_HEALER] = 0, + [ABILITY_HEATPROOF] = 5, + [ABILITY_HEAVY_METAL] = -1, + [ABILITY_HONEY_GATHER] = 0, + [ABILITY_HUGE_POWER] = 10, + [ABILITY_HUSTLE] = 7, + [ABILITY_HYDRATION] = 4, + [ABILITY_HYPER_CUTTER] = 3, + [ABILITY_ICE_BODY] = 3, + [ABILITY_ILLUMINATE] = 0, + [ABILITY_ILLUSION] = 8, + [ABILITY_IMMUNITY] = 4, + [ABILITY_IMPOSTER] = 9, + [ABILITY_INFILTRATOR] = 6, + [ABILITY_INNARDS_OUT] = 5, + [ABILITY_INNER_FOCUS] = 2, + [ABILITY_INSOMNIA] = 4, + [ABILITY_INTIMIDATE] = 7, + [ABILITY_IRON_BARBS] = 6, + [ABILITY_IRON_FIST] = 6, + [ABILITY_JUSTIFIED] = 4, + [ABILITY_KEEN_EYE] = 1, + [ABILITY_KLUTZ] = -1, + [ABILITY_LEAF_GUARD] = 2, + [ABILITY_LEVITATE] = 7, + [ABILITY_LIGHT_METAL] = 2, + [ABILITY_LIGHTNING_ROD] = 7, + [ABILITY_LIMBER] = 3, + [ABILITY_LIQUID_OOZE] = 3, + [ABILITY_LIQUID_VOICE] = 5, + [ABILITY_LONG_REACH] = 3, + [ABILITY_MAGIC_BOUNCE] = 9, + [ABILITY_MAGIC_GUARD] = 9, + [ABILITY_MAGICIAN] = 3, + [ABILITY_MAGMA_ARMOR] = 1, + [ABILITY_MAGNET_PULL] = 9, + [ABILITY_MARVEL_SCALE] = 5, + [ABILITY_MEGA_LAUNCHER] = 7, + [ABILITY_MERCILESS] = 4, + [ABILITY_MINUS] = 0, + [ABILITY_MISTY_SURGE] = 8, + [ABILITY_MOLD_BREAKER] = 7, + [ABILITY_MOODY] = 10, + [ABILITY_MOTOR_DRIVE] = 6, + [ABILITY_MOXIE] = 7, + [ABILITY_MULTISCALE] = 8, + [ABILITY_MULTITYPE] = 8, + [ABILITY_MUMMY] = 5, + [ABILITY_NATURAL_CURE] = 7, + [ABILITY_NEUROFORCE] = 6, + [ABILITY_NO_GUARD] = 8, + [ABILITY_NORMALIZE] = -1, + [ABILITY_OBLIVIOUS] = 2, + [ABILITY_OVERCOAT] = 5, + [ABILITY_OVERGROW] = 5, + [ABILITY_OWN_TEMPO] = 3, + [ABILITY_PARENTAL_BOND] = 10, + [ABILITY_PICKUP] = 1, + [ABILITY_PICKPOCKET] = 3, + [ABILITY_PIXILATE] = 8, + [ABILITY_PLUS] = 0, + [ABILITY_POISON_HEAL] = 8, + [ABILITY_POISON_POINT] = 4, + [ABILITY_POISON_TOUCH] = 4, + [ABILITY_POWER_CONSTRUCT] = 10, + [ABILITY_POWER_OF_ALCHEMY] = 0, + [ABILITY_PRANKSTER] = 8, + [ABILITY_PRESSURE] = 5, + [ABILITY_PRIMORDIAL_SEA] = 10, + [ABILITY_PRISM_ARMOR] = 6, + [ABILITY_PROTEAN] = 8, + [ABILITY_PSYCHIC_SURGE] = 8, + [ABILITY_PURE_POWER] = 10, + [ABILITY_QUEENLY_MAJESTY] = 6, + [ABILITY_QUICK_FEET] = 5, + [ABILITY_RAIN_DISH] = 3, + [ABILITY_RATTLED] = 3, + [ABILITY_RECEIVER] = 0, + [ABILITY_RECKLESS] = 6, + [ABILITY_REFRIGERATE] = 8, + [ABILITY_REGENERATOR] = 8, + [ABILITY_RIVALRY] = 1, + [ABILITY_RKS_SYSTEM] = 8, + [ABILITY_ROCK_HEAD] = 5, + [ABILITY_ROUGH_SKIN] = 6, + [ABILITY_RUN_AWAY] = 0, + [ABILITY_SAND_FORCE] = 4, + [ABILITY_SAND_RUSH] = 6, + [ABILITY_SAND_STREAM] = 9, + [ABILITY_SAND_VEIL] = 3, + [ABILITY_SAP_SIPPER] = 7, + [ABILITY_SCHOOLING] = 6, + [ABILITY_SCRAPPY] = 6, + [ABILITY_SERENE_GRACE] = 8, + [ABILITY_SHADOW_SHIELD] = 8, + [ABILITY_SHADOW_TAG] = 10, + [ABILITY_SHED_SKIN] = 7, + [ABILITY_SHEER_FORCE] = 8, + [ABILITY_SHELL_ARMOR] = 2, + [ABILITY_SHIELD_DUST] = 5, + [ABILITY_SHIELDS_DOWN] = 6, + [ABILITY_SIMPLE] = 8, + [ABILITY_SKILL_LINK] = 7, + [ABILITY_SLOW_START] = -2, + [ABILITY_SLUSH_RUSH] = 5, + [ABILITY_SNIPER] = 3, + [ABILITY_SNOW_CLOAK] = 3, + [ABILITY_SNOW_WARNING] = 8, + [ABILITY_SOLAR_POWER] = 3, + [ABILITY_SOLID_ROCK] = 6, + [ABILITY_SOUL_HEART] = 7, + [ABILITY_SOUNDPROOF] = 4, + [ABILITY_SPEED_BOOST] = 9, + [ABILITY_STAKEOUT] = 6, + [ABILITY_STALL] = -1, + [ABILITY_STAMINA] = 6, + [ABILITY_STANCE_CHANGE] = 10, + [ABILITY_STATIC] = 4, + [ABILITY_STEADFAST] = 2, + [ABILITY_STEELWORKER] = 6, + [ABILITY_STENCH] = 1, + [ABILITY_STICKY_HOLD] = 3, + [ABILITY_STORM_DRAIN] = 7, + [ABILITY_STRONG_JAW] = 6, + [ABILITY_STURDY] = 6, + [ABILITY_SUCTION_CUPS] = 2, + [ABILITY_SUPER_LUCK] = 3, + [ABILITY_SURGE_SURFER] = 4, + [ABILITY_SWARM] = 5, + [ABILITY_SWEET_VEIL] = 4, + [ABILITY_SWIFT_SWIM] = 6, + [ABILITY_SYMBIOSIS] = 0, + [ABILITY_SYNCHRONIZE] = 4, + [ABILITY_TANGLED_FEET] = 2, + [ABILITY_TANGLING_HAIR] = 5, + [ABILITY_TECHNICIAN] = 8, + [ABILITY_TELEPATHY] = 0, + [ABILITY_TERAVOLT] = 7, + [ABILITY_THICK_FAT] = 7, + [ABILITY_TINTED_LENS] = 7, + [ABILITY_TORRENT] = 5, + [ABILITY_TOXIC_BOOST] = 6, + [ABILITY_TOUGH_CLAWS] = 7, + [ABILITY_TRACE] = 6, + [ABILITY_TRIAGE] = 7, + [ABILITY_TRUANT] = -2, + [ABILITY_TURBOBLAZE] = 7, + [ABILITY_UNAWARE] = 6, + [ABILITY_UNBURDEN] = 7, + [ABILITY_UNNERVE] = 3, + [ABILITY_VICTORY_STAR] = 6, + [ABILITY_VITAL_SPIRIT] = 4, + [ABILITY_VOLT_ABSORB] = 7, + [ABILITY_WATER_ABSORB] = 7, + [ABILITY_WATER_BUBBLE] = 8, + [ABILITY_WATER_COMPACTION] = 4, + [ABILITY_WATER_VEIL] = 4, + [ABILITY_WEAK_ARMOR] = 2, + [ABILITY_WHITE_SMOKE] = 4, + [ABILITY_WIMP_OUT] = 3, + [ABILITY_WONDER_GUARD] = 10, + [ABILITY_WONDER_SKIN] = 4, + [ABILITY_ZEN_MODE] = -1, + [ABILITY_INTREPID_SWORD] = 3, + [ABILITY_DAUNTLESS_SHIELD] = 3, + [ABILITY_BALL_FETCH] = 0, + [ABILITY_COTTON_DOWN] = 3, + [ABILITY_MIRROR_ARMOR] = 6, + [ABILITY_GULP_MISSILE] = 3, + [ABILITY_STALWART] = 2, + [ABILITY_PROPELLER_TAIL] = 2, + [ABILITY_STEAM_ENGINE] = 3, + [ABILITY_PUNK_ROCK] = 2, + [ABILITY_SAND_SPIT] = 5, + [ABILITY_ICE_SCALES] = 7, + [ABILITY_RIPEN] = 4, + [ABILITY_ICE_FACE] = 4, + [ABILITY_POWER_SPOT] = 2, + [ABILITY_MIMICRY] = 2, + [ABILITY_SCREEN_CLEANER] = 3, + [ABILITY_NEUTRALIZING_GAS] = 5, + [ABILITY_HUNGER_SWITCH] = 2, + [ABILITY_PASTEL_VEIL] = 4, + [ABILITY_STEELY_SPIRIT] = 2, + [ABILITY_PERISH_BODY] = -1, + [ABILITY_WANDERING_SPIRIT] = 2, + [ABILITY_GORILLA_TACTICS] = 4, +}; + +static const u16 sEncouragedEncoreEffects[] = +{ + EFFECT_DREAM_EATER, + EFFECT_ATTACK_UP, + EFFECT_DEFENSE_UP, + EFFECT_SPEED_UP, + EFFECT_SPECIAL_ATTACK_UP, + EFFECT_HAZE, + EFFECT_ROAR, + EFFECT_CONVERSION, + EFFECT_TOXIC, + EFFECT_LIGHT_SCREEN, + EFFECT_REST, + EFFECT_SUPER_FANG, + EFFECT_SPECIAL_DEFENSE_UP_2, + EFFECT_CONFUSE, + EFFECT_POISON, + EFFECT_PARALYZE, + EFFECT_LEECH_SEED, + EFFECT_DO_NOTHING, + EFFECT_ATTACK_UP_2, + EFFECT_ENCORE, + EFFECT_CONVERSION_2, + EFFECT_LOCK_ON, + EFFECT_HEAL_BELL, + EFFECT_MEAN_LOOK, + EFFECT_NIGHTMARE, + EFFECT_PROTECT, + EFFECT_SKILL_SWAP, + EFFECT_FORESIGHT, + EFFECT_PERISH_SONG, + EFFECT_SANDSTORM, + EFFECT_ENDURE, + EFFECT_SWAGGER, + EFFECT_ATTRACT, + EFFECT_SAFEGUARD, + EFFECT_RAIN_DANCE, + EFFECT_SUNNY_DAY, + EFFECT_BELLY_DRUM, + EFFECT_PSYCH_UP, + EFFECT_FUTURE_SIGHT, + EFFECT_FAKE_OUT, + EFFECT_STOCKPILE, + EFFECT_SPIT_UP, + EFFECT_SWALLOW, + EFFECT_HAIL, + EFFECT_TORMENT, + EFFECT_WILL_O_WISP, + EFFECT_FOLLOW_ME, + EFFECT_CHARGE, + EFFECT_TRICK, + EFFECT_ROLE_PLAY, + EFFECT_INGRAIN, + EFFECT_RECYCLE, + EFFECT_KNOCK_OFF, + EFFECT_SKILL_SWAP, + EFFECT_IMPRISON, + EFFECT_REFRESH, + EFFECT_GRUDGE, + EFFECT_TEETER_DANCE, + EFFECT_MUD_SPORT, + EFFECT_WATER_SPORT, + EFFECT_DRAGON_DANCE, + EFFECT_CAMOUFLAGE, +}; + +// For the purposes of determining the most powerful move in a moveset, these +// moves are treated the same as having a power of 0 or 1 +#define IGNORED_MOVES_END 0xFFFF +static const u16 sIgnoredPowerfulMoveEffects[] = +{ + EFFECT_EXPLOSION, + EFFECT_DREAM_EATER, + EFFECT_RECHARGE, + EFFECT_SKULL_BASH, + EFFECT_SOLAR_BEAM, + EFFECT_SPIT_UP, + EFFECT_FOCUS_PUNCH, + EFFECT_SUPERPOWER, + EFFECT_ERUPTION, + EFFECT_OVERHEAT, + EFFECT_MIND_BLOWN, + IGNORED_MOVES_END +}; + +static const u16 sIgnoreMoldBreakerMoves[] = +{ + MOVE_MOONGEIST_BEAM, + MOVE_SUNSTEEL_STRIKE, + MOVE_PHOTON_GEYSER, + MOVE_LIGHT_THAT_BURNS_THE_SKY, + MOVE_MENACING_MOONRAZE_MAELSTROM, + MOVE_SEARING_SUNRAZE_SMASH, +}; + +static const u16 sInstructBannedMoves[] = +{ + MOVE_INSTRUCT, + MOVE_BIDE, + MOVE_FOCUS_PUNCH, + MOVE_BEAK_BLAST, + MOVE_SHELL_TRAP, + MOVE_SKETCH, + MOVE_TRANSFORM, + MOVE_MIMIC, + MOVE_KINGS_SHIELD, + MOVE_STRUGGLE, + MOVE_BOUNCE, + MOVE_DIG, + MOVE_DIVE, + MOVE_FLY, + MOVE_FREEZE_SHOCK, + MOVE_GEOMANCY, + MOVE_ICE_BURN, + MOVE_PHANTOM_FORCE, + MOVE_RAZOR_WIND, + MOVE_SHADOW_FORCE, + MOVE_SKULL_BASH, + MOVE_SKY_ATTACK, + MOVE_SKY_DROP, + MOVE_SOLAR_BEAM, + MOVE_SOLAR_BLADE, +}; + +static const u16 sRechargeMoves[] = +{ + MOVE_HYPER_BEAM, + MOVE_BLAST_BURN, + MOVE_HYDRO_CANNON, + MOVE_FRENZY_PLANT, + MOVE_GIGA_IMPACT, + MOVE_ROCK_WRECKER, + MOVE_ROAR_OF_TIME, + MOVE_PRISMATIC_LASER, + MOVE_METEOR_ASSAULT, + MOVE_ETERNABEAM, +}; + +static const u16 sOtherMoveCallingMoves[] = +{ + MOVE_ASSIST, + MOVE_COPYCAT, + MOVE_ME_FIRST, + MOVE_METRONOME, + MOVE_MIRROR_MOVE, + MOVE_NATURE_POWER, + MOVE_SLEEP_TALK, +}; + +// Functions +u16 GetAIChosenMove(u8 battlerId) +{ + return (gBattleMons[battlerId].moves[gBattleStruct->aiMoveOrAction[battlerId]]); +} + +bool32 WillAIStrikeFirst(void) +{ + return (AI_WhoStrikesFirst(sBattler_AI, gBattlerTarget, AI_THINKING_STRUCT->moveConsidered) == AI_IS_FASTER); +} + +bool32 AI_RandLessThan(u8 val) +{ + if ((Random() % 0xFF) < val) + return TRUE; + return FALSE; +} + +void RecordLastUsedMoveByTarget(void) +{ + RecordKnownMove(gBattlerTarget, gLastMoves[gBattlerTarget]); +} + +bool32 IsBattlerAIControlled(u32 battlerId) +{ + switch (GetBattlerPosition(battlerId)) + { + case B_POSITION_PLAYER_LEFT: + default: + return FALSE; + case B_POSITION_OPPONENT_LEFT: + return TRUE; + case B_POSITION_PLAYER_RIGHT: + return ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) != 0); + case B_POSITION_OPPONENT_RIGHT: + return TRUE; + } +} + +void ClearBattlerMoveHistory(u8 battlerId) +{ + memset(BATTLE_HISTORY->usedMoves[battlerId], 0, sizeof(BATTLE_HISTORY->usedMoves[battlerId])); + memset(BATTLE_HISTORY->moveHistory[battlerId], 0, sizeof(BATTLE_HISTORY->moveHistory[battlerId])); + BATTLE_HISTORY->moveHistoryIndex[battlerId] = 0; +} + +void RecordLastUsedMoveBy(u32 battlerId, u32 move) +{ + u8 *index = &BATTLE_HISTORY->moveHistoryIndex[battlerId]; + + if (++(*index) >= AI_MOVE_HISTORY_COUNT) + *index = 0; + BATTLE_HISTORY->moveHistory[battlerId][*index] = move; +} + +void RecordKnownMove(u8 battlerId, u32 move) +{ + s32 i; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (BATTLE_HISTORY->usedMoves[battlerId][i] == move) + break; + if (BATTLE_HISTORY->usedMoves[battlerId][i] == MOVE_NONE) + { + BATTLE_HISTORY->usedMoves[battlerId][i] = move; + break; + } + } +} + +void RecordAbilityBattle(u8 battlerId, u16 abilityId) +{ + BATTLE_HISTORY->abilities[battlerId] = abilityId; +} + +void ClearBattlerAbilityHistory(u8 battlerId) +{ + BATTLE_HISTORY->abilities[battlerId] = ABILITY_NONE; +} + +void RecordItemEffectBattle(u8 battlerId, u8 itemEffect) +{ + BATTLE_HISTORY->itemEffects[battlerId] = itemEffect; +} + +void ClearBattlerItemEffectHistory(u8 battlerId) +{ + BATTLE_HISTORY->itemEffects[battlerId] = 0; +} + +void SaveBattlerData(u8 battlerId) +{ + if (!IsBattlerAIControlled(battlerId)) + { + u32 i; + + 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; + for (i = 0; i < 4; i++) + AI_THINKING_STRUCT->saved[battlerId].moves[i] = gBattleMons[battlerId].moves[i]; + } +} + +void SetBattlerData(u8 battlerId) +{ + if (!IsBattlerAIControlled(battlerId)) + { + struct Pokemon *illusionMon; + u32 i; + + // Use the known battler's ability. + if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE) + gBattleMons[battlerId].ability = BATTLE_HISTORY->abilities[battlerId]; + // Check if mon can only have one ability. + else if (gBaseStats[gBattleMons[battlerId].species].abilities[1] == ABILITY_NONE + || gBaseStats[gBattleMons[battlerId].species].abilities[1] == gBaseStats[gBattleMons[battlerId].species].abilities[0]) + gBattleMons[battlerId].ability = gBaseStats[gBattleMons[battlerId].species].abilities[0]; + // The ability is unknown. + else + gBattleMons[battlerId].ability = ABILITY_NONE; + + if (BATTLE_HISTORY->itemEffects[battlerId] == 0) + gBattleMons[battlerId].item = 0; + + for (i = 0; i < 4; i++) + { + if (BATTLE_HISTORY->usedMoves[battlerId][i] == 0) + gBattleMons[battlerId].moves[i] = 0; + } + + // Simulate Illusion + if ((illusionMon = GetIllusionMonPtr(battlerId)) != NULL) + gBattleMons[battlerId].species = GetMonData(illusionMon, MON_DATA_SPECIES2); + } +} + +void RestoreBattlerData(u8 battlerId) +{ + if (!IsBattlerAIControlled(battlerId)) + { + u32 i; + + 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]; + } +} + +u32 GetHealthPercentage(u8 battlerId) +{ + return (u32)((100 * gBattleMons[battlerId].hp) / gBattleMons[battlerId].maxHP); +} + +bool32 AtMaxHp(u8 battlerId) +{ + if (AI_DATA->hpPercents[battlerId] == 100) + return TRUE; + return FALSE; +} + +bool32 IsBattlerTrapped(u8 battler, bool8 checkSwitch) +{ + u8 holdEffect = AI_DATA->holdEffects[battler]; + if ((B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + || (checkSwitch && holdEffect == HOLD_EFFECT_SHED_SHELL) + || (!checkSwitch && GetBattlerAbility(battler) == ABILITY_RUN_AWAY) + || (!checkSwitch && holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)) + { + return FALSE; + } + else + { + if (gBattleMons[battler].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED) + || IsAbilityPreventingEscape(battler) + || gStatuses3[battler] & (STATUS3_ROOTED | STATUS3_SKY_DROPPED) + || (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK)) + return TRUE; + } + + return FALSE; +} + +u32 GetTotalBaseStat(u32 species) +{ + return gBaseStats[species].baseHP + + gBaseStats[species].baseAttack + + gBaseStats[species].baseDefense + + gBaseStats[species].baseSpeed + + gBaseStats[species].baseSpAttack + + gBaseStats[species].baseSpDefense; +} + +bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler) +{ + int i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + u32 move = gBattleResources->battleHistory->usedMoves[opposingBattler][i]; + if (gBattleMoves[move].effect == EFFECT_PROTECT && move != MOVE_ENDURE) + return TRUE; + if (gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAI, opposingBattler, GetAIChosenMove(battlerAI)) == AI_IS_SLOWER) + return TRUE; + } + return FALSE; +} + +// move checks +bool32 IsAffectedByPowder(u8 battler, u16 ability, u16 holdEffect) +{ + if ((B_POWDER_GRASS >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GRASS)) + || ability == ABILITY_OVERCOAT + || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES) + return FALSE; + return TRUE; +} + +// This function checks if all physical/special moves are either unusable or unreasonable to use. +// Consider a pokemon boosting their attack against a ghost pokemon having only normal-type physical attacks. +bool32 MovesWithSplitUnusable(u32 attacker, u32 target, u32 split) +{ + s32 i, moveType; + u32 usable = 0; + u32 unusable = AI_DATA->moveLimitations[attacker]; + u16 *moves = GetMovesArray(attacker); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE + && moves[i] != 0xFFFF + && GetBattleMoveSplit(moves[i]) == split + && !(unusable & gBitTable[i])) + { + SetTypeBeforeUsingMove(moves[i], attacker); + GET_MOVE_TYPE(moves[i], moveType); + if (CalcTypeEffectivenessMultiplier(moves[i], moveType, attacker, target, FALSE) != 0) + usable |= gBitTable[i]; + } + } + + return (usable == 0); +} + +static bool32 AI_GetIfCrit(u32 move, u8 battlerAtk, u8 battlerDef) +{ + bool32 isCrit; + + switch (CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE)) + { + case -1: + case 0: + default: + isCrit = FALSE; + break; + case 1: + if (gBattleMoves[move].flags & FLAG_HIGH_CRIT && (Random() % 5 == 0)) + isCrit = TRUE; + else + isCrit = FALSE; + break; + case 2: + if (gBattleMoves[move].flags & FLAG_HIGH_CRIT && (Random() % 2 == 0)) + isCrit = TRUE; + else if (!(gBattleMoves[move].flags & FLAG_HIGH_CRIT) && (Random() % 4) == 0) + isCrit = TRUE; + else + isCrit = FALSE; + break; + case -2: + case 3: + case 4: + isCrit = TRUE; + break; + } + + return isCrit; +} + +s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, bool32 considerZPower) +{ + s32 dmg, moveType, critDmg, normalDmg; + s8 critChance; + u16 effectivenessMultiplier; + + if (considerZPower && IsViableZMove(battlerAtk, move)) + { + //temporarily enable z moves for damage calcs + gBattleStruct->zmove.baseMoves[battlerAtk] = move; + gBattleStruct->zmove.active = TRUE; + } + + SaveBattlerData(battlerAtk); + SaveBattlerData(battlerDef); + + SetBattlerData(battlerAtk); + SetBattlerData(battlerDef); + + gBattleStruct->dynamicMoveType = 0; + SetTypeBeforeUsingMove(move, battlerAtk); + GET_MOVE_TYPE(move, moveType); + + if (gBattleMoves[move].power) + { + critChance = GetInverseCritChance(battlerAtk, battlerDef, move); + normalDmg = CalculateMoveDamageAndEffectiveness(move, battlerAtk, battlerDef, moveType, &effectivenessMultiplier); + critDmg = CalculateMoveDamage(move, battlerAtk, battlerDef, moveType, 0, TRUE, FALSE, FALSE); + + if (critChance == -1) + dmg = normalDmg; + else + dmg = (critDmg + normalDmg * (critChance - 1)) / critChance; + + // Handle dynamic move damage + switch (gBattleMoves[move].effect) + { + case EFFECT_LEVEL_DAMAGE: + case EFFECT_PSYWAVE: + dmg = gBattleMons[battlerAtk].level * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); + break; + case EFFECT_DRAGON_RAGE: + dmg = 40 * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); + break; + case EFFECT_SONICBOOM: + dmg = 20 * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); + break; + case EFFECT_MULTI_HIT: + dmg *= (AI_DATA->abilities[battlerAtk] == ABILITY_SKILL_LINK ? 5 : 3); + break; + case EFFECT_TRIPLE_KICK: + dmg *= (AI_DATA->abilities[battlerAtk] == ABILITY_SKILL_LINK ? 6 : 5); + break; + case EFFECT_ENDEAVOR: + // If target has less HP than user, Endeavor does no damage + dmg = max(0, gBattleMons[battlerDef].hp - gBattleMons[battlerAtk].hp); + break; + case EFFECT_SUPER_FANG: + dmg = (AI_DATA->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; + break; + } + + // Handle other multi-strike moves + if (gBattleMoves[move].flags & FLAG_TWO_STRIKES) + dmg *= 2; + else if (move == MOVE_SURGING_STRIKES || (move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH)) + dmg *= 3; + + if (dmg == 0) + dmg = 1; + } + else + { + dmg = 0; + } + + RestoreBattlerData(battlerAtk); + RestoreBattlerData(battlerDef); + + // convert multiper to AI_EFFECTIVENESS_xX + *typeEffectiveness = AI_GetEffectiveness(effectivenessMultiplier); + + gBattleStruct->zmove.active = FALSE; + gBattleStruct->zmove.baseMoves[battlerAtk] = MOVE_NONE; + return dmg; +} + +// Checks if one of the moves has side effects or perks +static u32 WhichMoveBetter(u32 move1, u32 move2) +{ + s32 defAbility = AI_DATA->abilities[gBattlerTarget]; + + // Check if physical moves hurt. + if (AI_DATA->holdEffects[sBattler_AI] != HOLD_EFFECT_PROTECTIVE_PADS + && (BATTLE_HISTORY->itemEffects[gBattlerTarget] == HOLD_EFFECT_ROCKY_HELMET + || defAbility == ABILITY_IRON_BARBS || defAbility == ABILITY_ROUGH_SKIN)) + { + if (IS_MOVE_PHYSICAL(move1) && !IS_MOVE_PHYSICAL(move2)) + return 1; + if (IS_MOVE_PHYSICAL(move2) && !IS_MOVE_PHYSICAL(move1)) + return 0; + } + // Check recoil + if (GetBattlerAbility(sBattler_AI) != ABILITY_ROCK_HEAD) + { + if (((gBattleMoves[move1].effect == EFFECT_RECOIL_25 + || gBattleMoves[move1].effect == EFFECT_RECOIL_IF_MISS + || gBattleMoves[move1].effect == EFFECT_RECOIL_50 + || gBattleMoves[move1].effect == EFFECT_RECOIL_33 + || gBattleMoves[move1].effect == EFFECT_RECOIL_33_STATUS) + && (gBattleMoves[move2].effect != EFFECT_RECOIL_25 + && gBattleMoves[move2].effect != EFFECT_RECOIL_IF_MISS + && gBattleMoves[move2].effect != EFFECT_RECOIL_50 + && gBattleMoves[move2].effect != EFFECT_RECOIL_33 + && gBattleMoves[move2].effect != EFFECT_RECOIL_33_STATUS + && gBattleMoves[move2].effect != EFFECT_RECHARGE))) + return 1; + + if (((gBattleMoves[move2].effect == EFFECT_RECOIL_25 + || gBattleMoves[move2].effect == EFFECT_RECOIL_IF_MISS + || gBattleMoves[move2].effect == EFFECT_RECOIL_50 + || gBattleMoves[move2].effect == EFFECT_RECOIL_33 + || gBattleMoves[move2].effect == EFFECT_RECOIL_33_STATUS) + && (gBattleMoves[move1].effect != EFFECT_RECOIL_25 + && gBattleMoves[move1].effect != EFFECT_RECOIL_IF_MISS + && gBattleMoves[move1].effect != EFFECT_RECOIL_50 + && gBattleMoves[move1].effect != EFFECT_RECOIL_33 + && gBattleMoves[move1].effect != EFFECT_RECOIL_33_STATUS + && gBattleMoves[move1].effect != EFFECT_RECHARGE))) + return 0; + } + // Check recharge + if (gBattleMoves[move1].effect == EFFECT_RECHARGE && gBattleMoves[move2].effect != EFFECT_RECHARGE) + return 1; + if (gBattleMoves[move2].effect == EFFECT_RECHARGE && gBattleMoves[move1].effect != EFFECT_RECHARGE) + return 0; + // Check additional effect. + if (gBattleMoves[move1].effect == 0 && gBattleMoves[move2].effect != 0) + return 1; + if (gBattleMoves[move2].effect == 0 && gBattleMoves[move1].effect != 0) + return 0; + + return 2; +} + +u8 GetMoveDamageResult(u16 move) +{ + s32 i, checkedMove, bestId, currId, hp; + s32 moveDmgs[MAX_MON_MOVES]; + u8 result; + + for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++) + { + if (gBattleMoves[move].effect == sIgnoredPowerfulMoveEffects[i]) + break; + } + + if (gBattleMoves[move].power != 0 && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END) + { + // Considered move has power and is not in sIgnoredPowerfulMoveEffects + // Check all other moves and calculate their power + for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++) + { + for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++) + { + if (gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].effect == sIgnoredPowerfulMoveEffects[i]) + break; + } + + if (gBattleMons[sBattler_AI].moves[checkedMove] != MOVE_NONE + && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END + && gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].power != 0) + { + moveDmgs[checkedMove] = AI_DATA->simulatedDmg[sBattler_AI][gBattlerTarget][checkedMove]; + } + else + { + moveDmgs[checkedMove] = 0; + } + } + + hp = gBattleMons[gBattlerTarget].hp + (20 * gBattleMons[gBattlerTarget].hp / 100); // 20 % add to make sure the battler is always fainted + // If a move can faint battler, it doesn't matter how much damage it does + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moveDmgs[i] > hp) + moveDmgs[i] = hp; + } + + for (bestId = 0, i = 1; i < MAX_MON_MOVES; i++) + { + if (moveDmgs[i] > moveDmgs[bestId]) + bestId = i; + if (moveDmgs[i] == moveDmgs[bestId]) + { + switch (WhichMoveBetter(gBattleMons[sBattler_AI].moves[bestId], gBattleMons[sBattler_AI].moves[i])) + { + case 2: + if (Random() & 1) + break; + case 1: + bestId = i; + break; + } + } + } + + currId = AI_THINKING_STRUCT->movesetIndex; + if (currId == bestId) + AI_THINKING_STRUCT->funcResult = MOVE_POWER_BEST; + // Compare percentage difference. + else if ((moveDmgs[currId] >= hp || moveDmgs[bestId] < hp) // If current move can faint as well, or if neither can + && (moveDmgs[bestId] * 100 / hp) - (moveDmgs[currId] * 100 / hp) <= 30 + && WhichMoveBetter(gBattleMons[sBattler_AI].moves[bestId], gBattleMons[sBattler_AI].moves[currId]) != 0) + AI_THINKING_STRUCT->funcResult = MOVE_POWER_GOOD; + else + AI_THINKING_STRUCT->funcResult = MOVE_POWER_WEAK; + } + else + { + // Move has a power of 0/1, or is in the group sIgnoredPowerfulMoveEffects + AI_THINKING_STRUCT->funcResult = MOVE_POWER_OTHER; + } + + return AI_THINKING_STRUCT->funcResult; +} + +u32 GetCurrDamageHpPercent(u8 battlerAtk, u8 battlerDef) +{ + int bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; + + return (bestDmg * 100) / gBattleMons[battlerDef].maxHP; +} + +u16 AI_GetTypeEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef) +{ + u16 typeEffectiveness, moveType; + + SaveBattlerData(battlerAtk); + SaveBattlerData(battlerDef); + + SetBattlerData(battlerAtk); + SetBattlerData(battlerDef); + + gBattleStruct->dynamicMoveType = 0; + SetTypeBeforeUsingMove(move, battlerAtk); + GET_MOVE_TYPE(move, moveType); + typeEffectiveness = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); + + RestoreBattlerData(battlerAtk); + RestoreBattlerData(battlerDef); + + return typeEffectiveness; +} + +u32 AI_GetMoveEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef) +{ + gMoveResultFlags = 0; + return AI_GetEffectiveness(AI_GetTypeEffectiveness(move, battlerAtk, battlerDef)); +} + +static u32 AI_GetEffectiveness(u16 multiplier) +{ + switch (multiplier) + { + case UQ_4_12(0.0): + return AI_EFFECTIVENESS_x0; + case UQ_4_12(0.125): + return AI_EFFECTIVENESS_x0_125; + case UQ_4_12(0.25): + return AI_EFFECTIVENESS_x0_25; + case UQ_4_12(0.5): + return AI_EFFECTIVENESS_x0_5; + case UQ_4_12(1.0): + default: + return AI_EFFECTIVENESS_x1; + case UQ_4_12(2.0): + return AI_EFFECTIVENESS_x2; + case UQ_4_12(4.0): + return AI_EFFECTIVENESS_x4; + case UQ_4_12(8.0): + return AI_EFFECTIVENESS_x8; + } +} + +/* Checks to see if AI will move ahead of another battler + * Output: + * AI_IS_FASTER: is user(ai) faster + * AI_IS_SLOWER: is target faster +*/ +u8 AI_WhoStrikesFirst(u8 battlerAI, u8 battler2, u16 moveConsidered) +{ + u32 fasterAI = 0, fasterPlayer = 0, i; + s8 prioAI = 0; + s8 prioPlayer = 0; + s8 prioBattler2 = 0; + u16 *battler2Moves = GetMovesArray(battler2); + + // Check move priorities first. + prioAI = GetMovePriority(battlerAI, moveConsidered); + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (battler2Moves[i] == 0 || battler2Moves[i] == 0xFFFF) + continue; + + prioBattler2 = GetMovePriority(battler2, battler2Moves[i]); + if (prioAI > prioBattler2) + fasterAI++; + else if (prioBattler2 > prioAI) + fasterPlayer++; + } + + if (fasterAI > fasterPlayer) + { + return AI_IS_FASTER; + } + else if (fasterAI < fasterPlayer) + { + return AI_IS_SLOWER; + } + else + { + if (prioAI > prioBattler2) + return AI_IS_FASTER; // if we didn't know any of battler 2's moves to compare priorities, assume they don't have a prio+ move + // Priorities are the same(at least comparing to moves the AI is aware of), decide by speed. + if (GetWhoStrikesFirst(battlerAI, battler2, TRUE) == 0) + return AI_IS_FASTER; + else + return AI_IS_SLOWER; + } +} + +// Check if target has means to faint ai mon. +bool32 CanTargetFaintAi(u8 battlerDef, u8 battlerAtk) +{ + s32 i, dmg; + u32 unusable = AI_DATA->moveLimitations[battlerDef]; + u16 *moves = gBattleResources->battleHistory->usedMoves[battlerDef]; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && !(unusable & gBitTable[i]) + && AI_DATA->simulatedDmg[battlerDef][battlerAtk][moves[i]] >= gBattleMons[battlerAtk].hp) + { + return TRUE; + } + } + + return FALSE; +} + +// 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(u8 battlerAtk, u8 battlerDef, u8 numHits) +{ + s32 i, dmg; + u32 moveLimitations = AI_DATA->moveLimitations[battlerAtk]; + u16 *moves = gBattleMons[battlerAtk].moves; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && !(moveLimitations & gBitTable[i])) + { + // Use the pre-calculated value in simulatedDmg instead of re-calculating it + dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]; + + if (numHits) + dmg *= numHits; + + if (gBattleMons[battlerDef].hp <= dmg) + return TRUE; + } + } + + return FALSE; +} + +bool32 CanMoveFaintBattler(u16 move, u8 battlerDef, u8 battlerAtk, u8 nHits) +{ + s32 i, dmg; + u8 effectiveness; + u32 unusable = AI_DATA->moveLimitations[battlerDef]; + + if (move != MOVE_NONE + && move != 0xFFFF + && !(unusable & gBitTable[i]) + && AI_CalcDamage(move, battlerDef, battlerAtk, &effectiveness, FALSE) >= gBattleMons[battlerAtk].hp) + return TRUE; + + return FALSE; +} + +// Check if target has means to faint ai mon after modding hp/dmg +bool32 CanTargetFaintAiWithMod(u8 battlerDef, u8 battlerAtk, s32 hpMod, s32 dmgMod) +{ + u32 i; + u32 unusable = AI_DATA->moveLimitations[battlerDef]; + s32 dmg; + u16 *moves = gBattleResources->battleHistory->usedMoves[battlerDef]; + u32 hpCheck = gBattleMons[battlerAtk].hp + hpMod; + + if (hpCheck > gBattleMons[battlerAtk].maxHP) + hpCheck = gBattleMons[battlerAtk].maxHP; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]; + if (dmgMod) + dmg *= dmgMod; + + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && !(unusable & gBitTable[i]) && dmg >= hpCheck) + { + return TRUE; + } + } + + return FALSE; +} + +bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability) +{ + if (IsBattlerAlive(battlerId) && AI_DATA->abilities[battlerId] == ability) + return TRUE; + else if (IsBattlerAlive(BATTLE_PARTNER(battlerId)) && AI_DATA->abilities[BATTLE_PARTNER(battlerId)] == ability) + return TRUE; + else + return FALSE; +} + +// does NOT include ability suppression checks +s32 AI_GetAbility(u32 battlerId) +{ + u32 knownAbility = GetBattlerAbility(battlerId); + + // The AI knows its own ability. + if (IsBattlerAIControlled(battlerId)) + return knownAbility; + + // Check neutralizing gas, gastro acid + if (knownAbility == ABILITY_NONE) + return knownAbility; + + if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE) + return BATTLE_HISTORY->abilities[battlerId]; + + // Abilities that prevent fleeing - treat as always known + if (knownAbility == ABILITY_SHADOW_TAG || knownAbility == ABILITY_MAGNET_PULL || knownAbility == ABILITY_ARENA_TRAP) + return knownAbility; + + // Else, guess the ability + if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE) + { + u16 abilityGuess = ABILITY_NONE; + while (abilityGuess == ABILITY_NONE) + { + abilityGuess = gBaseStats[gBattleMons[battlerId].species].abilities[Random() % NUM_ABILITY_SLOTS]; + } + + return abilityGuess; + } + + return ABILITY_NONE; // Unknown. +} + +u16 AI_GetHoldEffect(u32 battlerId) +{ + u32 holdEffect; + + if (!IsBattlerAIControlled(battlerId)) + holdEffect = BATTLE_HISTORY->itemEffects[battlerId]; + else + holdEffect = GetBattlerHoldEffect(battlerId, FALSE); + + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) + return holdEffect; + + if (gStatuses3[battlerId] & STATUS3_EMBARGO) + return HOLD_EFFECT_NONE; + if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) + return HOLD_EFFECT_NONE; + if (AI_DATA->abilities[battlerId] == ABILITY_KLUTZ && !(gStatuses3[battlerId] & STATUS3_GASTRO_ACID)) + return HOLD_EFFECT_NONE; + + return holdEffect; +} + +bool32 AI_IsTerrainAffected(u8 battlerId, u32 flags) +{ + if (gStatuses3[battlerId] & STATUS3_SEMI_INVULNERABLE) + return FALSE; + else if (!(gFieldStatuses & flags)) + return FALSE; + return AI_IsBattlerGrounded(battlerId); +} + +// different from IsBattlerGrounded in that we don't always know battler's hold effect or ability +bool32 AI_IsBattlerGrounded(u8 battlerId) +{ + u32 holdEffect = AI_DATA->holdEffects[battlerId]; + + if (holdEffect == HOLD_EFFECT_IRON_BALL) + return TRUE; + else if (gFieldStatuses & STATUS_FIELD_GRAVITY) + return TRUE; + else if (gStatuses3[battlerId] & STATUS3_ROOTED) + return TRUE; + else if (gStatuses3[battlerId] & STATUS3_SMACKED_DOWN) + return TRUE; + else if (gStatuses3[battlerId] & STATUS3_TELEKINESIS) + return FALSE; + else if (gStatuses3[battlerId] & STATUS3_MAGNET_RISE) + return FALSE; + else if (holdEffect == HOLD_EFFECT_AIR_BALLOON) + return FALSE; + else if (AI_DATA->abilities[battlerId] == ABILITY_LEVITATE) + return FALSE; + else if (IS_BATTLER_OF_TYPE(battlerId, TYPE_FLYING)) + return FALSE; + else + return TRUE; +} + +bool32 DoesBattlerIgnoreAbilityChecks(u16 atkAbility, u16 move) +{ + u32 i; + + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) + return FALSE; // AI handicap flag: doesn't understand ability suppression concept + + for (i = 0; i < ARRAY_COUNT(sIgnoreMoldBreakerMoves); i++) + { + if (move == sIgnoreMoldBreakerMoves[i]) + return TRUE; + } + + if (atkAbility == ABILITY_MOLD_BREAKER + || atkAbility == ABILITY_TERAVOLT + || atkAbility == ABILITY_TURBOBLAZE) + return TRUE; + + return FALSE; +} + +bool32 AI_WeatherHasEffect(void) +{ + u32 i; + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) + return TRUE; // AI doesn't understand weather supression (handicap) + + return WEATHER_HAS_EFFECT; // weather damping abilities are announced +} + +u32 AI_GetBattlerMoveTargetType(u8 battlerId, u16 move) +{ + u32 target; + + if (gBattleMoves[move].effect == EFFECT_EXPANDING_FORCE && AI_IsTerrainAffected(battlerId, STATUS_FIELD_PSYCHIC_TERRAIN)) + return MOVE_TARGET_BOTH; + else + return gBattleMoves[move].target; +} + +bool32 IsAromaVeilProtectedMove(u16 move) +{ + u32 i; + + switch (move) + { + case MOVE_DISABLE: + case MOVE_ATTRACT: + case MOVE_ENCORE: + case MOVE_TORMENT: + case MOVE_TAUNT: + case MOVE_HEAL_BLOCK: + return TRUE; + default: + return FALSE; + } +} + +bool32 IsNonVolatileStatusMoveEffect(u16 moveEffect) +{ + switch (moveEffect) + { + case EFFECT_SLEEP: + case EFFECT_TOXIC: + case EFFECT_POISON: + case EFFECT_PARALYZE: + case EFFECT_WILL_O_WISP: + case EFFECT_YAWN: + return TRUE; + default: + return FALSE; + } +} + +bool32 IsConfusionMoveEffect(u16 moveEffect) +{ + switch (moveEffect) + { + case EFFECT_CONFUSE_HIT: + case EFFECT_SWAGGER: + case EFFECT_FLATTER: + case EFFECT_TEETER_DANCE: + return TRUE; + default: + return FALSE; + } +} + +bool32 IsStatLoweringMoveEffect(u16 moveEffect) +{ + switch (moveEffect) + { + case EFFECT_ATTACK_DOWN: + case EFFECT_DEFENSE_DOWN: + case EFFECT_SPEED_DOWN: + case EFFECT_SPECIAL_ATTACK_DOWN: + case EFFECT_SPECIAL_DEFENSE_DOWN: + case EFFECT_ACCURACY_DOWN: + case EFFECT_EVASION_DOWN: + case EFFECT_ATTACK_DOWN_2: + case EFFECT_DEFENSE_DOWN_2: + case EFFECT_SPEED_DOWN_2: + case EFFECT_SPECIAL_ATTACK_DOWN_2: + case EFFECT_SPECIAL_DEFENSE_DOWN_2: + case EFFECT_ACCURACY_DOWN_2: + case EFFECT_EVASION_DOWN_2: + return TRUE; + default: + return FALSE; + } +} + +bool32 IsHazardMoveEffect(u16 moveEffect) +{ + switch (moveEffect) + { + case EFFECT_SPIKES: + case EFFECT_TOXIC_SPIKES: + case EFFECT_STICKY_WEB: + case EFFECT_STEALTH_ROCK: + return TRUE; + default: + return FALSE; + } +} + +bool32 IsMoveRedirectionPrevented(u16 move, u16 atkAbility) +{ + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) + return FALSE; + + if (move == MOVE_SKY_DROP + || move == MOVE_SNIPE_SHOT + || atkAbility == ABILITY_PROPELLER_TAIL + || atkAbility == ABILITY_STALWART) + return TRUE; + return FALSE; +} + +u32 AI_GetMoveAccuracy(u8 battlerAtk, u8 battlerDef, u16 move) +{ + return GetTotalAccuracy(battlerAtk, battlerDef, move, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], + AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]); +} + +bool32 IsSemiInvulnerable(u8 battlerDef, u16 move) +{ + if (gStatuses3[battlerDef] & STATUS3_PHANTOM_FORCE) + return TRUE; + else if (!TestMoveFlags(move, FLAG_DMG_IN_AIR) && gStatuses3[battlerDef] & STATUS3_ON_AIR) + return TRUE; + else if (!TestMoveFlags(move, FLAG_DMG_UNDERWATER) && gStatuses3[battlerDef] & STATUS3_UNDERWATER) + return TRUE; + else if (!TestMoveFlags(move, FLAG_DMG_UNDERGROUND) && gStatuses3[battlerDef] & STATUS3_UNDERGROUND) + return TRUE; + else + return FALSE; +} + +bool32 IsMoveEncouragedToHit(u8 battlerAtk, u8 battlerDef, u16 move) +{ + if (IsSemiInvulnerable(battlerDef, move)) + return FALSE; + + //TODO - anticipate protect move? + + // always hits + if (gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS || gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk) + return TRUE; + + if (AI_DATA->abilities[battlerDef] == ABILITY_NO_GUARD || AI_DATA->abilities[battlerAtk] == ABILITY_NO_GUARD) + return TRUE; + + if (B_TOXIC_NEVER_MISS >= GEN_6 && gBattleMoves[move].effect == EFFECT_TOXIC && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) + return TRUE; + + // discouraged from hitting + if (AI_WeatherHasEffect() && (gBattleWeather & B_WEATHER_SUN) + && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE)) + return FALSE; + + // increased accuracy but don't always hit + if ((AI_WeatherHasEffect() && + (((gBattleWeather & B_WEATHER_RAIN) && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE)) + || (((gBattleWeather & B_WEATHER_HAIL) && move == MOVE_BLIZZARD)))) + || (gBattleMoves[move].effect == EFFECT_VITAL_THROW) + || (gBattleMoves[move].accuracy == 0) + || ((B_MINIMIZE_DMG_ACC >= GEN_6) && (gStatuses3[battlerDef] & STATUS3_MINIMIZED) && (gBattleMoves[move].flags & FLAG_DMG_MINIMIZE))) + { + return TRUE; + } + + return FALSE; +} + +bool32 ShouldTryOHKO(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move) +{ + u32 holdEffect = AI_DATA->holdEffects[battlerDef]; + u32 accuracy = AI_GetMoveAccuracy(battlerAtk, battlerDef, move); + + gPotentialItemEffectBattler = battlerDef; + if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < AI_DATA->holdEffectParams[battlerDef]) + return FALSE; //probabilistically speaking, focus band should activate so dont OHKO + else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && AtMaxHp(battlerDef)) + return FALSE; + + if (!DoesBattlerIgnoreAbilityChecks(atkAbility, move) && defAbility == ABILITY_STURDY) + return FALSE; + + if ((((gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS) + && gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk) + || atkAbility == ABILITY_NO_GUARD || defAbility == ABILITY_NO_GUARD) + && gBattleMons[battlerAtk].level >= gBattleMons[battlerDef].level) + { + return TRUE; + } + else // test the odds + { + u16 odds = accuracy + (gBattleMons[battlerAtk].level - gBattleMons[battlerDef].level); + #if B_SHEER_COLD_ACC >= GEN_7 + if (gCurrentMove == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) + odds -= 10; + #endif + if (Random() % 100 + 1 < odds && gBattleMons[battlerAtk].level >= gBattleMons[battlerDef].level) + return TRUE; + } + return FALSE; +} + +bool32 ShouldSetSandstorm(u8 battler, u16 ability, u16 holdEffect) +{ + if (!AI_WeatherHasEffect()) + return FALSE; + else if (gBattleWeather & B_WEATHER_SANDSTORM) + return FALSE; + + if (ability == ABILITY_SAND_VEIL + || ability == ABILITY_SAND_RUSH + || ability == ABILITY_SAND_FORCE + || ability == ABILITY_OVERCOAT + || ability == ABILITY_MAGIC_GUARD + || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES + || IS_BATTLER_OF_TYPE(battler, TYPE_ROCK) + || IS_BATTLER_OF_TYPE(battler, TYPE_STEEL) + || IS_BATTLER_OF_TYPE(battler, TYPE_GROUND) + || HasMoveEffect(battler, EFFECT_SHORE_UP) + || HasMoveEffect(battler, EFFECT_WEATHER_BALL)) + { + return TRUE; + } + return FALSE; +} + +bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect) +{ + if (!AI_WeatherHasEffect()) + return FALSE; + else if (gBattleWeather & B_WEATHER_HAIL) + return FALSE; + + if (ability == ABILITY_SNOW_CLOAK + || ability == ABILITY_ICE_BODY + || ability == ABILITY_FORECAST + || ability == ABILITY_SLUSH_RUSH + || ability == ABILITY_MAGIC_GUARD + || ability == ABILITY_OVERCOAT + || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES + || IS_BATTLER_OF_TYPE(battler, TYPE_ICE) + || HasMove(battler, MOVE_BLIZZARD) + || HasMoveEffect(battler, EFFECT_AURORA_VEIL) + || HasMoveEffect(battler, EFFECT_WEATHER_BALL)) + { + return TRUE; + } + return FALSE; +} + +bool32 ShouldSetRain(u8 battlerAtk, u16 atkAbility, u16 holdEffect) +{ + if (!AI_WeatherHasEffect()) + return FALSE; + else if (gBattleWeather & B_WEATHER_RAIN) + return FALSE; + + if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA + && (atkAbility == ABILITY_SWIFT_SWIM + || atkAbility == ABILITY_FORECAST + || atkAbility == ABILITY_HYDRATION + || atkAbility == ABILITY_RAIN_DISH + || atkAbility == ABILITY_DRY_SKIN + || HasMoveEffect(battlerAtk, EFFECT_THUNDER) + || HasMoveEffect(battlerAtk, EFFECT_HURRICANE) + || HasMoveEffect(battlerAtk, EFFECT_WEATHER_BALL) + || HasMoveWithType(battlerAtk, TYPE_WATER))) + { + return TRUE; + } + return FALSE; +} + +bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect) +{ + if (!AI_WeatherHasEffect()) + return FALSE; + else if (gBattleWeather & B_WEATHER_SUN) + return FALSE; + + if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA + && (atkAbility == ABILITY_CHLOROPHYLL + || atkAbility == ABILITY_FLOWER_GIFT + || atkAbility == ABILITY_FORECAST + || atkAbility == ABILITY_LEAF_GUARD + || atkAbility == ABILITY_SOLAR_POWER + || atkAbility == ABILITY_HARVEST + || HasMoveEffect(battlerAtk, EFFECT_SOLAR_BEAM) + || HasMoveEffect(battlerAtk, EFFECT_MORNING_SUN) + || HasMoveEffect(battlerAtk, EFFECT_SYNTHESIS) + || HasMoveEffect(battlerAtk, EFFECT_MOONLIGHT) + || HasMoveEffect(battlerAtk, EFFECT_WEATHER_BALL) + || HasMoveEffect(battlerAtk, EFFECT_GROWTH) + || HasMoveWithType(battlerAtk, TYPE_FIRE))) + { + return TRUE; + } + return FALSE; +} + + +void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s16 *score) +{ + // TODO more sophisticated logic + u16 predictedEffect = gBattleMoves[predictedMove].effect; + u8 defAbility = AI_DATA->abilities[battlerDef]; + u32 uses = gDisableStructs[battlerAtk].protectUses; + + /*if (GetMoveResultFlags(predictedMove) & (MOVE_RESULT_NO_EFFECT | MOVE_RESULT_MISSED)) + { + (*score) -= 5; + return; + }*/ + + if (uses == 0) + { + if (predictedMove != MOVE_NONE && predictedMove != 0xFFFF && !IS_MOVE_STATUS(predictedMove)) + (*score) += 2; + else if (Random() % 256 < 100) + (*score)++; + } + else + { + if (IsDoubleBattle()) + (*score) -= 2 * min(uses, 3); + else + (*score) -= min(uses, 3); + } + + if (gBattleMons[battlerAtk].status1 & (STATUS1_PSN_ANY | STATUS1_BURN) + || gBattleMons[battlerAtk].status2 & (STATUS2_CURSED | STATUS2_INFATUATION) + || gStatuses3[battlerAtk] & (STATUS3_PERISH_SONG | STATUS3_LEECHSEED | STATUS3_YAWN)) + { + (*score)--; + } + + if (gBattleMons[battlerDef].status1 & STATUS1_TOXIC_POISON + || gBattleMons[battlerDef].status2 & (STATUS2_CURSED | STATUS2_INFATUATION) + || gStatuses3[battlerDef] & (STATUS3_PERISH_SONG | STATUS3_LEECHSEED | STATUS3_YAWN)) + (*score) += 2; +} + +// stat stages +bool32 ShouldLowerStat(u8 battler, u16 battlerAbility, u8 stat) +{ + if ((gBattleMons[battler].statStages[stat] > MIN_STAT_STAGE && battlerAbility != ABILITY_CONTRARY) + || (battlerAbility == ABILITY_CONTRARY && gBattleMons[battler].statStages[stat] < MAX_STAT_STAGE)) + { + if (battlerAbility == ABILITY_CLEAR_BODY + || battlerAbility == ABILITY_WHITE_SMOKE + || battlerAbility == ABILITY_FULL_METAL_BODY) + return FALSE; + + return TRUE; + } + + return FALSE; +} + +bool32 BattlerStatCanRise(u8 battler, u16 battlerAbility, u8 stat) +{ + if ((gBattleMons[battler].statStages[stat] < MAX_STAT_STAGE && battlerAbility != ABILITY_CONTRARY) + || (battlerAbility == ABILITY_CONTRARY && gBattleMons[battler].statStages[stat] > MIN_STAT_STAGE)) + return TRUE; + return FALSE; +} + +bool32 AreBattlersStatsMaxed(u8 battlerId) +{ + u32 i; + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerId].statStages[i] < MAX_STAT_STAGE) + return FALSE; + } + return TRUE; +} + +bool32 AnyStatIsRaised(u8 battlerId) +{ + u32 i; + + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerId].statStages[i] > DEFAULT_STAT_STAGE) + return TRUE; + } + return FALSE; +} + +u32 CountPositiveStatStages(u8 battlerId) +{ + u32 count = 0; + u32 i; + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerId].statStages[i] > DEFAULT_STAT_STAGE) + count++; + } + return count; +} + +u32 CountNegativeStatStages(u8 battlerId) +{ + u32 count = 0; + u32 i; + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE) + count++; + } + return count; +} + +bool32 ShouldLowerAttack(u8 battlerAtk, u8 battlerDef, u16 defAbility) +{ + if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return FALSE; // Don't bother lowering stats if can kill enemy. + + if (gBattleMons[battlerDef].statStages[STAT_ATK] > 4 + && HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL) + && defAbility != ABILITY_CONTRARY + && defAbility != ABILITY_CLEAR_BODY + && defAbility != ABILITY_WHITE_SMOKE + && defAbility != ABILITY_FULL_METAL_BODY + && defAbility != ABILITY_HYPER_CUTTER) + return TRUE; + return FALSE; +} + +bool32 ShouldLowerDefense(u8 battlerAtk, u8 battlerDef, u16 defAbility) +{ + if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return FALSE; // Don't bother lowering stats if can kill enemy. + + if (gBattleMons[battlerDef].statStages[STAT_DEF] > 4 + && HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) + && defAbility != ABILITY_CONTRARY + && defAbility != ABILITY_CLEAR_BODY + && defAbility != ABILITY_WHITE_SMOKE + && defAbility != ABILITY_FULL_METAL_BODY + && defAbility != ABILITY_BIG_PECKS) + return TRUE; + return FALSE; +} + +bool32 ShouldLowerSpeed(u8 battlerAtk, u8 battlerDef, u16 defAbility) +{ + if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return FALSE; // Don't bother lowering stats if can kill enemy. + + if (!WillAIStrikeFirst() + && defAbility != ABILITY_CONTRARY + && defAbility != ABILITY_CLEAR_BODY + && defAbility != ABILITY_FULL_METAL_BODY + && defAbility != ABILITY_WHITE_SMOKE) + return TRUE; + return FALSE; +} + +bool32 ShouldLowerSpAtk(u8 battlerAtk, u8 battlerDef, u16 defAbility) +{ + if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return FALSE; // Don't bother lowering stats if can kill enemy. + + if (gBattleMons[battlerDef].statStages[STAT_SPATK] > 4 + && HasMoveWithSplit(battlerDef, SPLIT_SPECIAL) + && defAbility != ABILITY_CONTRARY + && defAbility != ABILITY_CLEAR_BODY + && defAbility != ABILITY_FULL_METAL_BODY + && defAbility != ABILITY_WHITE_SMOKE) + return TRUE; + return FALSE; +} + +bool32 ShouldLowerSpDef(u8 battlerAtk, u8 battlerDef, u16 defAbility) +{ + if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return FALSE; // Don't bother lowering stats if can kill enemy. + + if (gBattleMons[battlerDef].statStages[STAT_SPDEF] > 4 + && HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL) + && defAbility != ABILITY_CONTRARY + && defAbility != ABILITY_CLEAR_BODY + && defAbility != ABILITY_FULL_METAL_BODY + && defAbility != ABILITY_WHITE_SMOKE) + return TRUE; + return FALSE; +} + +bool32 ShouldLowerAccuracy(u8 battlerAtk, u8 battlerDef, u16 defAbility) +{ + if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return FALSE; // Don't bother lowering stats if can kill enemy. + + if (defAbility != ABILITY_CONTRARY + && defAbility != ABILITY_CLEAR_BODY + && defAbility != ABILITY_WHITE_SMOKE + && defAbility != ABILITY_FULL_METAL_BODY + && defAbility != ABILITY_KEEN_EYE) + return TRUE; + return FALSE; +} + +bool32 ShouldLowerEvasion(u8 battlerAtk, u8 battlerDef, u16 defAbility) +{ + if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return FALSE; // Don't bother lowering stats if can kill enemy. + + if (gBattleMons[battlerDef].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE + && defAbility != ABILITY_CONTRARY + && defAbility != ABILITY_CLEAR_BODY + && defAbility != ABILITY_FULL_METAL_BODY + && defAbility != ABILITY_WHITE_SMOKE) + return TRUE; + return FALSE; +} + +bool32 CanIndexMoveFaintTarget(u8 battlerAtk, u8 battlerDef, u8 index, u8 numHits) +{ + s32 dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index]; + + if (numHits) + dmg *= numHits; + + if (gBattleMons[battlerDef].hp <= dmg) + return TRUE; + return FALSE; +} + +u16 *GetMovesArray(u32 battler) +{ + if (IsBattlerAIControlled(battler) || IsBattlerAIControlled(BATTLE_PARTNER(battler))) + return gBattleMons[battler].moves; + else + return gBattleResources->battleHistory->usedMoves[battler]; +} + +bool32 HasOnlyMovesWithSplit(u32 battlerId, u32 split, bool32 onlyOffensive) +{ + u32 i; + u16 *moves = GetMovesArray(battlerId); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (onlyOffensive && IS_MOVE_STATUS(moves[i])) + continue; + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && GetBattleMoveSplit(moves[i]) != split) + return FALSE; + } + + return TRUE; +} + +bool32 HasMoveWithSplit(u32 battler, u32 split) +{ + u32 i; + u16 *moves = GetMovesArray(battler); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && GetBattleMoveSplit(moves[i]) == split) + return TRUE; + } + + return FALSE; +} + +bool32 HasMoveWithType(u32 battler, u8 type) +{ + s32 i; + u16 *moves = GetMovesArray(battler); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && gBattleMoves[moves[i]].type == type) + return TRUE; + } + + return FALSE; +} + +bool32 HasMoveEffect(u32 battlerId, u16 moveEffect) +{ + s32 i; + u16 *moves = GetMovesArray(battlerId); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && gBattleMoves[moves[i]].effect == moveEffect) + return TRUE; + } + + return FALSE; +} + +bool32 HasMove(u32 battlerId, u32 move) +{ + s32 i; + u16 *moves = GetMovesArray(battlerId); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && moves[i] == move) + return TRUE; + } + + return FALSE; +} + +bool32 HasMoveWithLowAccuracy(u8 battlerAtk, u8 battlerDef, u8 accCheck, bool32 ignoreStatus, u16 atkAbility, u16 defAbility, u16 atkHoldEffect, u16 defHoldEffect) +{ + s32 i; + u16 *moves = GetMovesArray(battlerAtk); + u8 moveLimitations = AI_DATA->moveLimitations[battlerAtk]; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] == MOVE_NONE || moves[i] == 0xFFFF) + continue; + + if (!(gBitTable[i] & moveLimitations)) + { + if (ignoreStatus && IS_MOVE_STATUS(moves[i])) + continue; + else if ((!IS_MOVE_STATUS(moves[i]) && gBattleMoves[moves[i]].accuracy == 0) + || AI_GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD)) + continue; + + if (AI_GetMoveAccuracy(battlerAtk, battlerDef, moves[i]) <= accCheck) + return TRUE; + } + } + + return FALSE; +} + +bool32 HasSleepMoveWithLowAccuracy(u8 battlerAtk, u8 battlerDef) +{ + u8 moveLimitations = AI_DATA->moveLimitations[battlerAtk]; + u32 i; + u16 *moves = GetMovesArray(battlerAtk); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] == MOVE_NONE) + break; + if (!(gBitTable[i] & moveLimitations)) + { + if (gBattleMoves[moves[i]].effect == EFFECT_SLEEP + && AI_GetMoveAccuracy(battlerAtk, battlerDef, moves[i]) < 85) + return TRUE; + } + } + return FALSE; +} + +bool32 IsHealingMoveEffect(u16 effect) +{ + switch (effect) + { + case EFFECT_RESTORE_HP: + case EFFECT_MORNING_SUN: + case EFFECT_SYNTHESIS: + case EFFECT_MOONLIGHT: + case EFFECT_SOFTBOILED: + case EFFECT_ROOST: + case EFFECT_SWALLOW: + case EFFECT_WISH: + case EFFECT_HEALING_WISH: + case EFFECT_HEAL_PULSE: + case EFFECT_REST: + return TRUE; + default: + return FALSE; + } +} + +bool32 HasHealingEffect(u32 battlerId) +{ + s32 i; + u16 *moves = GetMovesArray(battlerId); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && IsHealingMoveEffect(gBattleMoves[moves[i]].effect)) + return TRUE; + } + + return FALSE; +} + +bool32 IsTrappingMoveEffect(u16 effect) +{ + switch (effect) + { + case EFFECT_MEAN_LOOK: + case EFFECT_TRAP: + case EFFECT_HIT_PREVENT_ESCAPE: + case EFFECT_FAIRY_LOCK: + //case EFFECT_NO_RETREAT: // TODO + return TRUE; + default: + return FALSE; + } +} + +bool32 HasTrappingMoveEffect(u8 battler) +{ + s32 i; + u16 *moves = GetMovesArray(battler); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && IsTrappingMoveEffect(gBattleMoves[moves[i]].effect)) + return TRUE; + } + + return FALSE; +} + +bool32 HasThawingMove(u8 battlerId) +{ + s32 i; + u16 *moves = GetMovesArray(battlerId); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && TestMoveFlags(moves[i], FLAG_THAW_USER)) + return TRUE; + } + + return FALSE; +} + +bool32 IsUngroundingEffect(u16 effect) +{ + switch (effect) + { + case EFFECT_MAGNET_RISE: + return TRUE; + default: + return FALSE; + } +} + +// for anger point +bool32 IsAttackBoostMoveEffect(u16 effect) +{ + switch (effect) + { + case EFFECT_ATTACK_UP: + case EFFECT_ATTACK_UP_2: + case EFFECT_ATTACK_ACCURACY_UP: + case EFFECT_ATTACK_SPATK_UP: + case EFFECT_DRAGON_DANCE: + case EFFECT_COIL: + case EFFECT_BELLY_DRUM: + case EFFECT_BULK_UP: + case EFFECT_GROWTH: + return TRUE; + default: + return FALSE; + } +} + +bool32 IsStatRaisingEffect(u16 effect) +{ + switch (effect) + { + case EFFECT_ATTACK_UP: + case EFFECT_ATTACK_UP_2: + case EFFECT_DEFENSE_UP: + case EFFECT_DEFENSE_UP_2: + case EFFECT_DEFENSE_UP_3: + case EFFECT_SPEED_UP: + case EFFECT_SPEED_UP_2: + case EFFECT_SPECIAL_ATTACK_UP: + case EFFECT_SPECIAL_ATTACK_UP_2: + case EFFECT_SPECIAL_ATTACK_UP_3: + case EFFECT_SPECIAL_DEFENSE_UP: + case EFFECT_SPECIAL_DEFENSE_UP_2: + case EFFECT_ACCURACY_UP: + case EFFECT_ACCURACY_UP_2: + case EFFECT_EVASION_UP: + case EFFECT_EVASION_UP_2: + case EFFECT_MINIMIZE: + case EFFECT_DEFENSE_CURL: + #if B_CHARGE_SPDEF_RAISE >= GEN_5 + case EFFECT_CHARGE: + #endif + case EFFECT_CALM_MIND: + case EFFECT_COSMIC_POWER: + case EFFECT_DRAGON_DANCE: + case EFFECT_ACUPRESSURE: + case EFFECT_SHELL_SMASH: + case EFFECT_SHIFT_GEAR: + case EFFECT_ATTACK_ACCURACY_UP: + case EFFECT_ATTACK_SPATK_UP: + case EFFECT_GROWTH: + case EFFECT_COIL: + case EFFECT_QUIVER_DANCE: + case EFFECT_BULK_UP: + case EFFECT_GEOMANCY: + case EFFECT_STOCKPILE: + return TRUE; + default: + return FALSE; + } +} + +bool32 IsStatLoweringEffect(u16 effect) +{ + // ignore other potentially-beneficial effects like defog, gravity + switch (effect) + { + case EFFECT_ATTACK_DOWN: + case EFFECT_DEFENSE_DOWN: + case EFFECT_SPEED_DOWN: + case EFFECT_SPECIAL_ATTACK_DOWN: + case EFFECT_SPECIAL_DEFENSE_DOWN: + case EFFECT_ACCURACY_DOWN: + case EFFECT_EVASION_DOWN: + case EFFECT_ATTACK_DOWN_2: + case EFFECT_DEFENSE_DOWN_2: + case EFFECT_SPEED_DOWN_2: + case EFFECT_SPECIAL_ATTACK_DOWN_2: + case EFFECT_SPECIAL_DEFENSE_DOWN_2: + case EFFECT_ACCURACY_DOWN_2: + case EFFECT_EVASION_DOWN_2: + case EFFECT_TICKLE: + case EFFECT_CAPTIVATE: + case EFFECT_NOBLE_ROAR: + return TRUE; + default: + return FALSE; + } +} + +bool32 HasDamagingMove(u8 battlerId) +{ + u32 i; + u16 *moves = GetMovesArray(battlerId); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && gBattleMoves[moves[i]].power != 0) + return TRUE; + } + + return FALSE; +} + +bool32 HasDamagingMoveOfType(u8 battlerId, u8 type) +{ + s32 i; + u16 *moves = GetMovesArray(battlerId); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF + && gBattleMoves[moves[i]].type == type && gBattleMoves[moves[i]].power != 0) + return TRUE; + } + + return FALSE; +} + +bool32 IsInstructBannedMove(u16 move) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sInstructBannedMoves); i++) + { + if (move == sInstructBannedMoves[i]) + return TRUE; + } + return FALSE; +} + +bool32 IsEncoreEncouragedEffect(u16 moveEffect) +{ + u32 i; + + for (i = 0; i < ARRAY_COUNT(sEncouragedEncoreEffects); i++) + { + if (moveEffect == sEncouragedEncoreEffects[i]) + return TRUE; + } + return FALSE; +} + +bool32 MoveRequiresRecharging(u16 move) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sRechargeMoves); i++) + { + if (move == sRechargeMoves[i]) + return TRUE; + } + return FALSE; +} + +bool32 MoveCallsOtherMove(u16 move) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sOtherMoveCallingMoves); i++) + { + if (move == sOtherMoveCallingMoves[i]) + return TRUE; + } + return FALSE; +} + +bool32 TestMoveFlagsInMoveset(u8 battler, u32 flags) +{ + s32 i; + u16 *moves = GetMovesArray(battler); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && TestMoveFlags(moves[i], flags)) + return TRUE; + } + return FALSE; +} + +static u32 GetLeechSeedDamage(u8 battlerId) +{ + u32 damage = 0; + if ((gStatuses3[battlerId] & STATUS3_LEECHSEED) + && gBattleMons[gStatuses3[battlerId] & STATUS3_LEECHSEED_BATTLER].hp != 0) + { + damage = gBattleMons[battlerId].maxHP / 8; + if (damage == 0) + damage = 1; + } + return damage; +} + +static u32 GetNightmareDamage(u8 battlerId) +{ + u32 damage = 0; + if ((gBattleMons[battlerId].status2 & STATUS2_NIGHTMARE) && gBattleMons[battlerId].status1 & STATUS1_SLEEP) + { + damage = gBattleMons[battlerId].maxHP / 4; + if (damage == 0) + damage = 1; + } + return damage; +} + +static u32 GetCurseDamage(u8 battlerId) +{ + u32 damage = 0; + if (gBattleMons[battlerId].status2 & STATUS2_CURSED) + { + damage = gBattleMons[battlerId].maxHP / 4; + if (damage == 0) + damage = 1; + } + return damage; +} + +static u32 GetTrapDamage(u8 battlerId) +{ + // ai has no knowledge about turns remaining + u32 damage = 0; + u32 holdEffect = AI_DATA->holdEffects[gBattleStruct->wrappedBy[battlerId]]; + if (gBattleMons[battlerId].status2 & STATUS2_WRAPPED) + { + if (holdEffect == HOLD_EFFECT_BINDING_BAND) + damage = gBattleMons[battlerId].maxHP / (B_BINDING_DAMAGE >= GEN_6) ? 6 : 8; + else + damage = gBattleMons[battlerId].maxHP / (B_BINDING_DAMAGE >= GEN_6) ? 8 : 16; + + if (damage == 0) + damage = 1; + } + return damage; +} + +static u32 GetPoisonDamage(u8 battlerId) +{ + u32 damage = 0; + + if (AI_DATA->abilities[battlerId] == ABILITY_POISON_HEAL) + return damage; + + if (gBattleMons[battlerId].status1 & STATUS1_POISON) + { + damage = gBattleMons[battlerId].maxHP / 8; + if (damage == 0) + damage = 1; + } + else if (gBattleMons[battlerId].status1 & STATUS1_TOXIC_POISON) + { + damage = gBattleMons[battlerId].maxHP / 16; + if (damage == 0) + damage = 1; + if ((gBattleMons[battlerId].status1 & STATUS1_TOXIC_COUNTER) != STATUS1_TOXIC_TURN(15)) // not 16 turns + gBattleMons[battlerId].status1 += STATUS1_TOXIC_TURN(1); + damage *= (gBattleMons[battlerId].status1 & STATUS1_TOXIC_COUNTER) >> 8; + } + return damage; +} + +static bool32 BattlerAffectedBySandstorm(u8 battlerId, u16 ability) +{ + if (!IS_BATTLER_OF_TYPE(battlerId, TYPE_ROCK) + && !IS_BATTLER_OF_TYPE(battlerId, TYPE_GROUND) + && !IS_BATTLER_OF_TYPE(battlerId, TYPE_STEEL) + && ability != ABILITY_SAND_VEIL + && ability != ABILITY_SAND_FORCE + && ability != ABILITY_SAND_RUSH + && ability != ABILITY_OVERCOAT) + return TRUE; + return FALSE; +} + +static bool32 BattlerAffectedByHail(u8 battlerId, u16 ability) +{ + if (!IS_BATTLER_OF_TYPE(battlerId, TYPE_ICE) + && ability != ABILITY_SNOW_CLOAK + && ability != ABILITY_OVERCOAT + && ability != ABILITY_ICE_BODY) + return TRUE; + return FALSE; +} + +static u32 GetWeatherDamage(u8 battlerId) +{ + u32 ability = AI_DATA->abilities[battlerId]; + u32 holdEffect = AI_DATA->holdEffects[battlerId]; + u32 damage = 0; + if (!AI_WeatherHasEffect()) + return 0; + + if (gBattleWeather & B_WEATHER_SANDSTORM) + { + if (BattlerAffectedBySandstorm(battlerId, ability) + && !(gStatuses3[battlerId] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + && holdEffect != HOLD_EFFECT_SAFETY_GOGGLES) + { + damage = gBattleMons[battlerId].maxHP / 16; + if (damage == 0) + damage = 1; + } + } + if ((gBattleWeather & B_WEATHER_HAIL) && ability != ABILITY_ICE_BODY) + { + if (BattlerAffectedByHail(battlerId, ability) + && !(gStatuses3[battlerId] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + && holdEffect != HOLD_EFFECT_SAFETY_GOGGLES) + { + damage = gBattleMons[battlerId].maxHP / 16; + if (damage == 0) + damage = 1; + } + } + return damage; +} + +u32 GetBattlerSecondaryDamage(u8 battlerId) +{ + u32 secondaryDamage; + + if (AI_DATA->abilities[battlerId] == ABILITY_MAGIC_GUARD) + return FALSE; + + secondaryDamage = GetLeechSeedDamage(battlerId) + + GetNightmareDamage(battlerId) + + GetCurseDamage(battlerId) + + GetTrapDamage(battlerId) + + GetPoisonDamage(battlerId) + + GetWeatherDamage(battlerId); + + return secondaryDamage; +} + +bool32 BattlerWillFaintFromWeather(u8 battler, u16 ability) +{ + if ((BattlerAffectedBySandstorm(battler, ability) || BattlerAffectedByHail(battler, ability)) + && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 16) + return TRUE; + + return FALSE; +} + +bool32 BattlerWillFaintFromSecondaryDamage(u8 battler, u16 ability) +{ + if (GetBattlerSecondaryDamage(battler) != 0 + && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 16) + return TRUE; + return FALSE; +} + +static bool32 AnyUsefulStatIsRaised(u8 battler) +{ + u8 statId; + + for (statId = STAT_ATK; statId < NUM_BATTLE_STATS; statId++) + { + if (gBattleMons[battler].statStages[statId] > DEFAULT_STAT_STAGE) + { + switch (statId) + { + case STAT_ATK: + if (HasMoveWithSplit(battler, SPLIT_PHYSICAL)) + return TRUE; + break; + case STAT_SPATK: + if (HasMoveWithSplit(battler, SPLIT_SPECIAL)) + return TRUE; + break; + case STAT_SPEED: + return TRUE; + } + } + } + + return FALSE; +} + +struct Pokemon *GetPartyBattlerPartyData(u8 battlerId, u8 switchBattler) +{ + struct Pokemon *mon; + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + mon = &gPlayerParty[switchBattler]; + else + mon = &gEnemyParty[switchBattler]; + return mon; +} + +static bool32 PartyBattlerShouldAvoidHazards(u8 currBattler, u8 switchBattler) +{ + struct Pokemon *mon = GetPartyBattlerPartyData(currBattler, switchBattler); + u16 ability = GetMonAbility(mon); // we know our own party data + u16 holdEffect = GetBattlerHoldEffect(GetMonData(mon, MON_DATA_HELD_ITEM), TRUE); + u32 flags = gSideStatuses[GetBattlerSide(currBattler)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES); + + if (flags == 0) + return FALSE; + + if (ability == ABILITY_MAGIC_GUARD || ability == ABILITY_LEVITATE + || holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS) + return FALSE; + + if (flags & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK) && GetMonData(mon, MON_DATA_HP) < (GetMonData(mon, MON_DATA_MAX_HP) / 8)) + return TRUE; + + return FALSE; +} + +enum { + DONT_PIVOT, + CAN_TRY_PIVOT, + PIVOT, +}; +bool32 ShouldPivot(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u8 moveIndex) +{ + bool8 hasStatBoost = AnyUsefulStatIsRaised(battlerAtk) || gBattleMons[battlerDef].statStages[STAT_EVASION] >= 9; //Significant boost in evasion for any class + u8 backupBattler = gActiveBattler; + bool32 shouldSwitch; + u8 battlerToSwitch; + + gActiveBattler = battlerAtk; + shouldSwitch = ShouldSwitch(); + battlerToSwitch = *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler); + gActiveBattler = backupBattler; + + if (PartyBattlerShouldAvoidHazards(battlerAtk, battlerToSwitch)) + return DONT_PIVOT; + + if (!IsDoubleBattle()) + { + if (CountUsablePartyMons(battlerAtk) == 0) + return CAN_TRY_PIVOT; // can't switch, but attack might still be useful + + //TODO - predict opponent switching + /*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 (!CanAIFaintTarget(battlerAtk, battlerDef, 0)) // Can't KO foe otherwise + { + if (CanAIFaintTarget(battlerAtk, battlerDef, 2)) + { + // attacker can kill target in two hits (theoretically) + if (CanTargetFaintAi(battlerDef, battlerAtk)) + return PIVOT; // Won't get the two turns, pivot + + if (!IS_MOVE_STATUS(move) && (shouldSwitch + || (AtMaxHp(battlerDef) && (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH + || (defAbility == ABILITY_STURDY && B_STURDY >= GEN_5) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD)))) + return PIVOT; // pivot to break sash/sturdy/multiscale + } + else if (!hasStatBoost) + { + if (!IS_MOVE_STATUS(move) && (AtMaxHp(battlerDef) && (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH + || (defAbility == ABILITY_STURDY && B_STURDY >= GEN_5) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD))) + return PIVOT; // pivot to break sash/sturdy/multiscale + + if (shouldSwitch) + return PIVOT; + + /* TODO - check if switchable mon unafffected by/will remove hazards + if (gSideStatuses[battlerAtk] & SIDE_STATUS_SPIKES && switchScore >= SWITCHING_INCREASE_CAN_REMOVE_HAZARDS) + return PIVOT;*/ + + /*if (BattlerWillFaintFromSecondaryDamage(battlerAtk, AI_DATA->abilities[battlerAtk]) && switchScore >= SWITCHING_INCREASE_WALLS_FOE) + return PIVOT;*/ + + /*if (IsClassDamager(class) && switchScore >= SWITCHING_INCREASE_HAS_SUPER_EFFECTIVE_MOVE) + { + bool8 physMoveInMoveset = PhysicalMoveInMoveset(battlerAtk); + bool8 specMoveInMoveset = SpecialMoveInMoveset(battlerAtk); + + //Pivot if attacking stats are bad + if (physMoveInMoveset && !specMoveInMoveset) + { + if (STAT_STAGE_ATK < 6) + return PIVOT; + } + else if (!physMoveInMoveset && specMoveInMoveset) + { + if (STAT_STAGE_SPATK < 6) + return PIVOT; + } + else if (physMoveInMoveset && specMoveInMoveset) + { + if (STAT_STAGE_ATK < 6 && STAT_STAGE_SPATK < 6) + return PIVOT; + } + + return CAN_TRY_PIVOT; + }*/ + } + } + } + else // Opponent Goes First + { + if (CanTargetFaintAi(battlerDef, battlerAtk)) + { + if (gBattleMoves[move].effect == EFFECT_TELEPORT) + return DONT_PIVOT; // If you're going to faint because you'll go second, use a different move + else + return CAN_TRY_PIVOT; // You're probably going to faint anyways so if for some reason you don't, better switch + } + else if (CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 2)) // Foe can 2HKO AI + { + if (CanAIFaintTarget(battlerAtk, battlerDef, 0)) + { + if (!BattlerWillFaintFromSecondaryDamage(battlerAtk, AI_DATA->abilities[battlerAtk])) + return CAN_TRY_PIVOT; // Use this move to KO if you must + } + else // Can't KO the foe + { + return PIVOT; + } + } + else // Foe can 3HKO+ AI + { + if (CanAIFaintTarget(battlerAtk, battlerDef, 0)) + { + if (!BattlerWillFaintFromSecondaryDamage(battlerAtk, AI_DATA->abilities[battlerAtk]) // This is the only move that can KO + && !hasStatBoost) //You're not wasting a valuable stat boost + { + return CAN_TRY_PIVOT; + } + } + else if (CanAIFaintTarget(battlerAtk, battlerDef, 2)) + { + // can knock out foe in 2 hits + if (IS_MOVE_STATUS(move) && (shouldSwitch //Damaging move + //&& (switchScore >= SWITCHING_INCREASE_RESIST_ALL_MOVES + SWITCHING_INCREASE_KO_FOE //remove hazards + || (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH && AtMaxHp(battlerDef)))) + return DONT_PIVOT; // Pivot to break the sash + else + return CAN_TRY_PIVOT; + } + else + { + //if (IsClassDamager(class) && switchScore >= SWITCHING_INCREASE_KO_FOE) + //return PIVOT; //Only switch if way better matchup + + if (!hasStatBoost) + { + // TODO - check if switching prevents/removes hazards + //if (gSideStatuses[battlerAtk] & SIDE_STATUS_SPIKES && switchScore >= SWITCHING_INCREASE_CAN_REMOVE_HAZARDS) + //return PIVOT; + + // TODO - not always a good idea + //if (BattlerWillFaintFromSecondaryDamage(battlerAtk) && switchScore >= SWITCHING_INCREASE_HAS_SUPER_EFFECTIVE_MOVE) + //return PIVOT; + + /*if (IsClassDamager(class) && switchScore >= SWITCHING_INCREASE_HAS_SUPER_EFFECTIVE_MOVE) + { + bool8 physMoveInMoveset = PhysicalMoveInMoveset(battlerAtk); + bool8 specMoveInMoveset = SpecialMoveInMoveset(battlerAtk); + + //Pivot if attacking stats are bad + if (physMoveInMoveset && !specMoveInMoveset) + { + if (STAT_STAGE_ATK < 6) + return PIVOT; + } + else if (!physMoveInMoveset && specMoveInMoveset) + { + if (STAT_STAGE_SPATK < 6) + return PIVOT; + } + else if (physMoveInMoveset && specMoveInMoveset) + { + if (STAT_STAGE_ATK < 6 && STAT_STAGE_SPATK < 6) + return PIVOT; + } + }*/ + + return CAN_TRY_PIVOT; + } + } + } + } + } + + return DONT_PIVOT; +} + +bool32 CanKnockOffItem(u8 battler, u16 item) +{ + if (item == ITEM_NONE) + return FALSE; + + if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_LINK + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_SECRET_BASE + #if defined B_TRAINERS_KNOCK_OFF_ITEMS + | BATTLE_TYPE_TRAINER + #endif + )) && GetBattlerSide(battler) == B_SIDE_PLAYER) + return FALSE; + + if (AI_DATA->abilities[battler] == ABILITY_STICKY_HOLD) + return FALSE; + + if (!CanBattlerGetOrLoseItem(battler, item)) + return FALSE; + + return TRUE; +} + +// status checks +bool32 IsBattlerIncapacitated(u8 battler, u16 ability) +{ + if ((gBattleMons[battler].status1 & STATUS1_FREEZE) && !HasThawingMove(battler)) + return TRUE; // if battler has thawing move we assume they will definitely use it, and thus being frozen should be neglected + + if (gBattleMons[battler].status1 & STATUS1_SLEEP) + return TRUE; + + if (gBattleMons[battler].status2 & STATUS2_RECHARGE || (ability == ABILITY_TRUANT && gDisableStructs[battler].truantCounter != 0)) + return TRUE; + + return FALSE; +} + +bool32 AI_CanSleep(u8 battler, u16 ability) +{ + if (ability == ABILITY_INSOMNIA + || ability == ABILITY_VITAL_SPIRIT + || gBattleMons[battler].status1 & STATUS1_ANY + || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD + || (gFieldStatuses & (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN)) + || IsAbilityStatusProtected(battler)) + return FALSE; + return TRUE; +} + +bool32 AI_CanPutToSleep(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove) +{ + if (!AI_CanSleep(battlerDef, defAbility) + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) + || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) // shouldn't try to sleep mon that partner is trying to make sleep + return FALSE; + return TRUE; +} + +static bool32 AI_CanPoisonType(u8 battlerAttacker, u8 battlerTarget) +{ + return ((AI_DATA->abilities[battlerAttacker] == ABILITY_CORROSION && gBattleMoves[gCurrentMove].split == SPLIT_STATUS) + || !(IS_BATTLER_OF_TYPE(battlerTarget, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerTarget, TYPE_STEEL))); +} + +static bool32 AI_CanBePoisoned(u8 battlerAtk, u8 battlerDef) +{ + u16 ability = AI_DATA->abilities[battlerDef]; + + if (!(AI_CanPoisonType(battlerAtk, battlerDef)) + || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD + || gBattleMons[battlerDef].status1 & STATUS1_ANY + || ability == ABILITY_IMMUNITY + || ability == ABILITY_COMATOSE + || AI_IsAbilityOnSide(battlerDef, ABILITY_PASTEL_VEIL) + || gBattleMons[battlerDef].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battlerDef) + || AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) + return FALSE; + return TRUE; +} + +bool32 ShouldPoisonSelf(u8 battler, u16 ability) +{ + if (AI_CanBePoisoned(battler, battler) && ( + ability == ABILITY_MARVEL_SCALE + || ability == ABILITY_POISON_HEAL + || ability == ABILITY_QUICK_FEET + || ability == ABILITY_MAGIC_GUARD + || (ability == ABILITY_TOXIC_BOOST && HasMoveWithSplit(battler, SPLIT_PHYSICAL)) + || (ability == ABILITY_GUTS && HasMoveWithSplit(battler, SPLIT_PHYSICAL)) + || HasMoveEffect(battler, EFFECT_FACADE) + || HasMoveEffect(battler, EFFECT_PSYCHO_SHIFT))) + return TRUE; // battler can be poisoned and has move/ability that synergizes with being poisoned + return FALSE; +} + +bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove) +{ + if (!AI_CanBePoisoned(battlerAtk, battlerDef) + || AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0 + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) + || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) + return FALSE; + else if (defAbility != ABILITY_CORROSION && (IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerDef, TYPE_STEEL))) + return FALSE; + else if (IsValidDoubleBattle(battlerAtk) && AI_DATA->abilities[BATTLE_PARTNER(battlerDef)] == ABILITY_PASTEL_VEIL) + return FALSE; + + return TRUE; +} + +static bool32 AI_CanBeParalyzed(u8 battler, u16 ability) +{ + if (ability == ABILITY_LIMBER + || IS_BATTLER_OF_TYPE(battler, TYPE_ELECTRIC) + || gBattleMons[battler].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battler)) + return FALSE; + return TRUE; +} + +bool32 AI_CanParalyze(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove) +{ + if (!AI_CanBeParalyzed(battlerDef, defAbility) + || AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0 + || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) + || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) + return FALSE; + return TRUE; +} + +bool32 AI_CanBeConfused(u8 battler, u16 ability) +{ + if ((gBattleMons[battler].status2 & STATUS2_CONFUSION) + || (ability == ABILITY_OWN_TEMPO) + || (IsBattlerGrounded(battler) && (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN))) + return FALSE; + return TRUE; +} + +bool32 AI_CanConfuse(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove) +{ + if (!AI_CanBeConfused(battlerDef, defAbility) + || AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0 + || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) + || DoesPartnerHaveSameMoveEffect(battlerAtkPartner, battlerDef, move, partnerMove)) + { + return FALSE; + } + + return TRUE; +} + +bool32 AI_CanBeBurned(u8 battler, u16 ability) +{ + if (ability == ABILITY_WATER_VEIL + || ability == ABILITY_WATER_BUBBLE + || IS_BATTLER_OF_TYPE(battler, TYPE_FIRE) + || gBattleMons[battler].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battler) + || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) + return FALSE; + return TRUE; +} + +bool32 ShouldBurnSelf(u8 battler, u16 ability) +{ + if (AI_CanBeBurned(battler, ability) && ( + ability == ABILITY_QUICK_FEET + || ability == ABILITY_HEATPROOF + || ability == ABILITY_MAGIC_GUARD + || (ability == ABILITY_FLARE_BOOST && HasMoveWithSplit(battler, SPLIT_SPECIAL)) + || (ability == ABILITY_GUTS && HasMoveWithSplit(battler, SPLIT_PHYSICAL)) + || HasMoveEffect(battler, EFFECT_FACADE) + || HasMoveEffect(battler, EFFECT_PSYCHO_SHIFT))) + return TRUE; + return FALSE; +} + +bool32 AI_CanBurn(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove) +{ + if (!AI_CanBeBurned(battlerDef, defAbility) + || AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0 + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) + || PartnerMoveEffectIsStatusSameTarget(battlerAtkPartner, battlerDef, partnerMove)) + { + return FALSE; + } + return TRUE; +} + +bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGender, u8 defGender) +{ + if ((gBattleMons[battlerDef].status2 & STATUS2_INFATUATION) + || AI_GetMoveEffectiveness(AI_THINKING_STRUCT->moveConsidered, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0 + || defAbility == ABILITY_OBLIVIOUS + || atkGender == defGender + || atkGender == MON_GENDERLESS + || defGender == MON_GENDERLESS + || AI_IsAbilityOnSide(battlerDef, ABILITY_AROMA_VEIL)) + return FALSE; + return TRUE; +} + +u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move) +{ + if (defAbility == ABILITY_INNER_FOCUS + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) + || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent goes first + { + return 0; // don't try to flinch + } + else if ((gBattleMons[battlerDef].status1 & STATUS1_SLEEP) && !HasMoveEffect(battlerDef, EFFECT_SLEEP_TALK) && !HasMoveEffect(battlerDef, EFFECT_SNORE)) + { + return 0; // don't try to flinch sleeping pokemon + } + else if (atkAbility == ABILITY_SERENE_GRACE + || gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS + || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION + || gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) + { + return 2; // good idea to flinch + } + return 1; // decent idea to flinch +} + +bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move) +{ + if (BattlerWillFaintFromSecondaryDamage(battlerDef, AI_DATA->abilities[battlerDef])) + return TRUE; // battler is taking secondary damage with low HP + + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL) + { + if (!CanTargetFaintAi(battlerDef, battlerAtk)) + return TRUE; // attacker goes first and opponent can't kill us + } + + return FALSE; +} + +bool32 ShouldFakeOut(u8 battlerAtk, u8 battlerDef, u16 move) +{ + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CHOICE_BAND && CountUsablePartyMons(battlerAtk) == 0) + return FALSE; // don't lock attacker into fake out if can't switch out + + if (gDisableStructs[battlerAtk].isFirstTurn + && ShouldTryToFlinch(battlerAtk, battlerDef, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], move) + && !DoesSubstituteBlockMove(battlerAtk, battlerDef, move)) + return TRUE; + + return FALSE; +} + +static u32 FindMoveUsedXTurnsAgo(u32 battlerId, u32 x) +{ + s32 i, index = BATTLE_HISTORY->moveHistoryIndex[battlerId]; + for (i = 0; i < x; i++) + { + if (--index < 0) + index = AI_MOVE_HISTORY_COUNT - 1; + } + return BATTLE_HISTORY->moveHistory[battlerId][index]; +} + +bool32 IsWakeupTurn(u8 battler) +{ + // Check if rest was used 2 turns ago + if ((gBattleMons[battler].status1 & STATUS1_SLEEP) == 1 && FindMoveUsedXTurnsAgo(battler, 2) == MOVE_REST) + return TRUE; + else // no way to know + return FALSE; +} + +bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof) +{ + struct Pokemon *party; + u32 i; + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + party = gPlayerParty; + else + party = gEnemyParty; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (checkSoundproof && GetMonAbility(&party[i]) == ABILITY_SOUNDPROOF) + continue; + + if (GetMonData(&party[i], MON_DATA_STATUS) != STATUS1_NONE) + return TRUE; + } + + return FALSE; +} + +u16 GetBattlerSideSpeedAverage(u8 battler) +{ + u16 speed1 = 0; + u16 speed2 = 0; + u8 numBattlersAlive = 0; + + if (IsBattlerAlive(battler)) + { + speed1 = GetBattlerTotalSpeedStat(battler); + numBattlersAlive++; + } + + if (IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(battler))) + { + speed2 = GetBattlerTotalSpeedStat(BATTLE_PARTNER(battler)); + numBattlersAlive++; + } + + return (speed1 + speed2) / numBattlersAlive; +} + +bool32 ShouldUseRecoilMove(u8 battlerAtk, u8 battlerDef, u32 recoilDmg, u8 moveIndex) +{ + if (recoilDmg >= gBattleMons[battlerAtk].hp //Recoil kills attacker + && CountUsablePartyMons(battlerDef) != 0) //Foe has more than 1 target left + { + if (recoilDmg >= gBattleMons[battlerDef].hp && !CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return TRUE; //If it's the only KO move then just use it + else + return FALSE; //Not as good to use move if you'll faint and not win + } + + return TRUE; +} + +bool32 ShouldAbsorb(u8 battlerAtk, u8 battlerDef, u16 move, s32 damage) +{ + if (move == 0xFFFF || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + { + // using item or user goes first + u8 healPercent = (gBattleMoves[move].argument == 0) ? 50 : gBattleMoves[move].argument; + s32 healDmg = (healPercent * damage) / 100; + + if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) + healDmg = 0; + + if (CanTargetFaintAi(battlerDef, battlerAtk) + && !CanTargetFaintAiWithMod(battlerDef, battlerAtk, healDmg, 0)) + return TRUE; // target can faint attacker unless they heal + else if (!CanTargetFaintAi(battlerDef, battlerAtk) && AI_DATA->hpPercents[battlerAtk] < 60 && (Random() % 3)) + return TRUE; // target can't faint attacker at all, attacker health is about half, 2/3rds rate of encouraging healing + } + else + { + // opponent goes first + if (!CanTargetFaintAi(battlerDef, battlerAtk)) + return TRUE; + } + + return FALSE; +} + +bool32 ShouldRecover(u8 battlerAtk, u8 battlerDef, u16 move, u8 healPercent) +{ + if (move == 0xFFFF || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + { + // using item or user going first + s32 damage = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; + s32 healAmount = (healPercent * damage) / 100; + if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) + healAmount = 0; + + if (CanTargetFaintAi(battlerDef, battlerAtk) + && !CanTargetFaintAiWithMod(battlerDef, battlerAtk, healAmount, 0)) + return TRUE; // target can faint attacker unless they heal + else if (!CanTargetFaintAi(battlerDef, battlerAtk) && AI_DATA->hpPercents[battlerAtk] < 60 && (Random() % 3)) + return TRUE; // target can't faint attacker at all, attacker health is about half, 2/3rds rate of encouraging healing + } + return FALSE; +} + +bool32 ShouldSetScreen(u8 battlerAtk, u8 battlerDef, u16 moveEffect) +{ + u8 atkSide = GetBattlerSide(battlerAtk); + switch (moveEffect) + { + case EFFECT_AURORA_VEIL: + // Use only in Hail and only if AI doesn't already have Reflect, Light Screen or Aurora Veil itself active. + if (gBattleWeather & B_WEATHER_HAIL + && !(gSideStatuses[atkSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL))) + return TRUE; + break; + case EFFECT_REFLECT: + // Use only if the player has a physical move and AI doesn't already have Reflect itself active. + if (HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL) + && !(gSideStatuses[atkSide] & SIDE_STATUS_REFLECT)) + return TRUE; + break; + case EFFECT_LIGHT_SCREEN: + // Use only if the player has a special move and AI doesn't already have Light Screen itself active. + if (HasMoveWithSplit(battlerDef, SPLIT_SPECIAL) + && !(gSideStatuses[atkSide] & SIDE_STATUS_LIGHTSCREEN)) + return TRUE; + break; + } + + return FALSE; +} + +// Partner Logic +bool32 IsValidDoubleBattle(u8 battlerAtk) +{ + if (IsDoubleBattle() + && ((IsBattlerAlive(BATTLE_OPPOSITE(battlerAtk)) && IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerAtk)))) || IsBattlerAlive(BATTLE_PARTNER(battlerAtk)))) + return TRUE; + return FALSE; +} + +u16 GetAllyChosenMove(u8 battlerId) +{ + u8 partnerBattler = BATTLE_PARTNER(battlerId); + + if (!IsBattlerAlive(partnerBattler) || !IsBattlerAIControlled(partnerBattler)) + return MOVE_NONE; + else if (partnerBattler > battlerId) // Battler with the lower id chooses the move first. + return gLastMoves[partnerBattler]; + else + return gBattleMons[partnerBattler].moves[gBattleStruct->chosenMovePositions[partnerBattler]]; +} + +bool32 IsTargetingPartner(u8 battlerAtk, u8 battlerDef) +{ + if ((battlerAtk & BIT_SIDE) == (battlerDef & BIT_SIDE)) + return TRUE; + + return FALSE; +} + +//PARTNER_MOVE_EFFECT_IS_SAME +bool32 DoesPartnerHaveSameMoveEffect(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove) +{ + if (!IsDoubleBattle()) + return FALSE; + + if (gBattleMoves[move].effect == gBattleMoves[partnerMove].effect + && gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE + && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef) + { + return TRUE; + } + return FALSE; +} + +//PARTNER_MOVE_EFFECT_IS_SAME_NO_TARGET +bool32 PartnerHasSameMoveEffectWithoutTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove) +{ + if (!IsDoubleBattle()) + return FALSE; + + if (gBattleMoves[move].effect == gBattleMoves[partnerMove].effect + && gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE) + return TRUE; + return FALSE; +} + +//PARTNER_MOVE_EFFECT_IS_STATUS_SAME_TARGET +bool32 PartnerMoveEffectIsStatusSameTarget(u8 battlerAtkPartner, u8 battlerDef, u16 partnerMove) +{ + if (!IsDoubleBattle()) + return FALSE; + + if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE + && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef + && (gBattleMoves[partnerMove].effect == EFFECT_SLEEP + || gBattleMoves[partnerMove].effect == EFFECT_POISON + || gBattleMoves[partnerMove].effect == EFFECT_TOXIC + || gBattleMoves[partnerMove].effect == EFFECT_PARALYZE + || gBattleMoves[partnerMove].effect == EFFECT_WILL_O_WISP + || gBattleMoves[partnerMove].effect == EFFECT_YAWN)) + return TRUE; + return FALSE; +} + +//PARTNER_MOVE_EFFECT_IS_WEATHER +bool32 PartnerMoveEffectIsWeather(u8 battlerAtkPartner, u16 partnerMove) +{ + if (!IsDoubleBattle()) + return FALSE; + + if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE + && (gBattleMoves[partnerMove].effect == EFFECT_SUNNY_DAY + || gBattleMoves[partnerMove].effect == EFFECT_RAIN_DANCE + || gBattleMoves[partnerMove].effect == EFFECT_SANDSTORM + || gBattleMoves[partnerMove].effect == EFFECT_HAIL)) + return TRUE; + + return FALSE; +} + +//PARTNER_MOVE_EFFECT_IS_TERRAIN +bool32 PartnerMoveEffectIsTerrain(u8 battlerAtkPartner, u16 partnerMove) +{ + if (!IsDoubleBattle()) + return FALSE; + + if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE + && (gBattleMoves[partnerMove].effect == EFFECT_GRASSY_TERRAIN + || gBattleMoves[partnerMove].effect == EFFECT_MISTY_TERRAIN + || gBattleMoves[partnerMove].effect == EFFECT_ELECTRIC_TERRAIN + || gBattleMoves[partnerMove].effect == EFFECT_PSYCHIC_TERRAIN)) + return TRUE; + + return FALSE; +} + +//PARTNER_MOVE_IS_TAILWIND_TRICKROOM +bool32 PartnerMoveIs(u8 battlerAtkPartner, u16 partnerMove, u16 moveCheck) +{ + if (!IsDoubleBattle()) + return FALSE; + + if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE && partnerMove == moveCheck) + return TRUE; + return FALSE; +} + +//PARTNER_MOVE_IS_SAME +bool32 PartnerMoveIsSameAsAttacker(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove) +{ + if (!IsDoubleBattle()) + return FALSE; + + if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE && move == partnerMove && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef) + return TRUE; + return FALSE; +} + +//PARTNER_MOVE_IS_SAME_NO_TARGET +bool32 PartnerMoveIsSameNoTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove) +{ + if (!IsDoubleBattle()) + return FALSE; + if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE && move == partnerMove) + return TRUE; + return FALSE; +} + +bool32 ShouldUseWishAromatherapy(u8 battlerAtk, u8 battlerDef, u16 move) +{ + u32 i; + u32 firstId, lastId; + struct Pokemon* party; + bool32 hasStatus = FALSE; + bool32 needHealing = FALSE; + + GetAIPartyIndexes(battlerAtk, &firstId, &lastId); + + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + party = gPlayerParty; + else + party = gEnemyParty; + + if (CountUsablePartyMons(battlerAtk) == 0 + && (CanTargetFaintAi(battlerDef, battlerAtk) || BattlerWillFaintFromSecondaryDamage(battlerAtk, AI_DATA->abilities[battlerAtk]))) + return FALSE; // Don't heal if last mon and will faint + + for (i = 0; i < PARTY_SIZE; i++) + { + u16 currHp = GetMonData(&party[i], MON_DATA_HP); + u16 maxHp = GetMonData(&party[i], MON_DATA_MAX_HP); + + if (!GetMonData(&party[i], MON_DATA_IS_EGG, NULL) && currHp > 0) + { + if ((currHp * 100) / maxHp < 65 // Less than 65% health remaining + && i >= firstId && i < lastId) // Can only switch to mon on your team + { + needHealing = TRUE; + } + + if (GetMonData(&party[i], MON_DATA_STATUS, NULL) != STATUS1_NONE) + { + if (move != MOVE_HEAL_BELL || GetMonAbility(&party[i]) != ABILITY_SOUNDPROOF) + hasStatus = TRUE; + } + } + } + + if (!IsDoubleBattle()) + { + switch (gBattleMoves[move].effect) + { + case EFFECT_WISH: + if (needHealing) + return TRUE; + break; + case EFFECT_HEAL_BELL: + if (hasStatus) + return TRUE; + } + } + else + { + switch (gBattleMoves[move].effect) + { + case EFFECT_WISH: + return ShouldRecover(battlerAtk, battlerDef, move, 50); // Switch recovery isn't good idea in doubles + case EFFECT_HEAL_BELL: + if (hasStatus) + return TRUE; + } + } + + return FALSE; +} + +// party logic +s32 AI_CalcPartyMonDamage(u16 move, u8 battlerAtk, u8 battlerDef, struct Pokemon *mon) +{ + s32 dmg; + u32 i; + u8 effectiveness; + struct BattlePokemon *battleMons = Alloc(sizeof(struct BattlePokemon) * MAX_BATTLERS_COUNT); + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + battleMons[i] = gBattleMons[i]; + + PokemonToBattleMon(mon, &gBattleMons[battlerAtk]); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE); + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + gBattleMons[i] = battleMons[i]; + + Free(battleMons); + + return dmg; +} + +s32 CountUsablePartyMons(u8 battlerId) +{ + s32 battlerOnField1, battlerOnField2, i, ret; + struct Pokemon *party; + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + party = gPlayerParty; + else + party = gEnemyParty; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + battlerOnField1 = gBattlerPartyIndexes[battlerId]; + battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(GetBattlerPosition(battlerId) ^ BIT_FLANK)]; + } + else // In singles there's only one battlerId by side. + { + battlerOnField1 = gBattlerPartyIndexes[battlerId]; + battlerOnField2 = gBattlerPartyIndexes[battlerId]; + } + + ret = 0; + for (i = 0; i < PARTY_SIZE; i++) + { + if (i != battlerOnField1 && i != battlerOnField2 + && GetMonData(&party[i], MON_DATA_HP) != 0 + && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + { + ret++; + } + } + + return ret; +} + +bool32 IsPartyFullyHealedExceptBattler(u8 battlerId) +{ + struct Pokemon *party; + u32 i; + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + party = gPlayerParty; + else + party = gEnemyParty; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (i != gBattlerPartyIndexes[battlerId] + && GetMonData(&party[i], MON_DATA_HP) != 0 + && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&party[i], MON_DATA_HP) < GetMonData(&party[i], MON_DATA_MAX_HP)) + return FALSE; + } + return TRUE; +} + +bool32 PartyHasMoveSplit(u8 battlerId, u8 split) +{ + u8 firstId, lastId; + struct Pokemon* party = GetBattlerPartyData(battlerId); + u32 i, j; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&party[i], MON_DATA_HP, NULL) == 0) + continue; + + for (j = 0; j < MAX_MON_MOVES; j++) + { + u16 move = GetMonData(&party[i], MON_DATA_MOVE1 + j, NULL); + u16 pp = GetMonData(&party[i], MON_DATA_PP1 + j, NULL); + + if (pp > 0 && move != MOVE_NONE) + { + //TODO - handle photon geyser, light that burns the sky + if (gBattleMoves[move].split == split) + return TRUE; + } + } + } + + return FALSE; +} + +bool32 SideHasMoveSplit(u8 battlerId, u8 split) +{ + if (IsDoubleBattle()) + { + if (HasMoveWithSplit(battlerId, split) || HasMoveWithSplit(BATTLE_PARTNER(battlerId), split)) + return TRUE; + } + else + { + if (HasMoveWithSplit(battlerId, split)) + return TRUE; + } + return FALSE; +} + +bool32 IsAbilityOfRating(u16 ability, s8 rating) +{ + if (sAiAbilityRatings[ability] >= rating) + return TRUE; + return FALSE; +} + +s8 GetAbilityRating(u16 ability) +{ + return sAiAbilityRatings[ability]; +} + +static const u16 sRecycleEncouragedItems[] = +{ + ITEM_CHESTO_BERRY, + ITEM_LUM_BERRY, + ITEM_STARF_BERRY, + ITEM_SITRUS_BERRY, + ITEM_MICLE_BERRY, + ITEM_CUSTAP_BERRY, + ITEM_MENTAL_HERB, + ITEM_FOCUS_SASH, + // TODO expand this +}; + +// Its assumed that the berry is strategically given, so no need to check benefits of the berry +bool32 IsStatBoostingBerry(u16 item) +{ + switch (item) + { + case ITEM_LIECHI_BERRY: + case ITEM_GANLON_BERRY: + case ITEM_SALAC_BERRY: + case ITEM_PETAYA_BERRY: + case ITEM_APICOT_BERRY: + //case ITEM_LANSAT_BERRY: + case ITEM_STARF_BERRY: + case ITEM_MICLE_BERRY: + return TRUE; + default: + return FALSE; + } +} + +bool32 ShouldRestoreHpBerry(u8 battlerAtk, u16 item) +{ + switch (item) + { + case ITEM_ORAN_BERRY: + if (gBattleMons[battlerAtk].maxHP <= 50) + return TRUE; // Only worth it in the early game + return FALSE; + case ITEM_SITRUS_BERRY: + case ITEM_FIGY_BERRY: + case ITEM_WIKI_BERRY: + case ITEM_MAGO_BERRY: + case ITEM_AGUAV_BERRY: + case ITEM_IAPAPA_BERRY: + return TRUE; + default: + return FALSE; + } +} + +bool32 IsRecycleEncouragedItem(u16 item) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sRecycleEncouragedItems); i++) + { + if (item == sRecycleEncouragedItems[i]) + return TRUE; + } + return FALSE; +} + +// score increases +#define STAT_UP_2_STAGE 8 +#define STAT_UP_STAGE 10 +void IncreaseStatUpScore(u8 battlerAtk, u8 battlerDef, u8 statId, s16 *score) +{ + if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) + return; + + if (AI_DATA->hpPercents[battlerAtk] < 80 && AI_RandLessThan(128)) + return; + + if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return; // Damaging moves would get a score boost from AI_TryToFaint or PreferStrongestMove so we don't consider them here + + switch (statId) + { + case STAT_ATK: + if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && AI_DATA->hpPercents[battlerAtk] > 40) + { + if (gBattleMons[battlerAtk].statStages[STAT_ATK] < STAT_UP_2_STAGE) + *score += 2; + else if (gBattleMons[battlerAtk].statStages[STAT_ATK] < STAT_UP_STAGE) + *(score)++; + } + if (HasMoveEffect(battlerAtk, EFFECT_FOUL_PLAY)) + *(score)++; + break; + case STAT_DEF: + if ((HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)|| IS_MOVE_PHYSICAL(gLastMoves[battlerDef])) + && AI_DATA->hpPercents[battlerAtk] > 70) + { + if (gBattleMons[battlerAtk].statStages[STAT_DEF] < STAT_UP_2_STAGE) + *score += 2; // seems better to raise def at higher HP + else if (gBattleMons[battlerAtk].statStages[STAT_DEF] < STAT_UP_STAGE) + *(score)++; + } + break; + case STAT_SPEED: + if (!WillAIStrikeFirst()) + { + if (gBattleMons[battlerAtk].statStages[STAT_SPEED] < STAT_UP_2_STAGE) + *score += 2; + else if (gBattleMons[battlerAtk].statStages[STAT_SPEED] < STAT_UP_STAGE) + *(score)++; + } + break; + case STAT_SPATK: + if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL) && AI_DATA->hpPercents[battlerAtk] > 40) + { + if (gBattleMons[battlerAtk].statStages[STAT_SPATK] < STAT_UP_2_STAGE) + *score += 2; + else if (gBattleMons[battlerAtk].statStages[STAT_SPATK] < STAT_UP_STAGE) + *(score)++; + } + break; + case STAT_SPDEF: + if ((HasMoveWithSplit(battlerDef, SPLIT_SPECIAL) || IS_MOVE_SPECIAL(gLastMoves[battlerDef])) + && AI_DATA->hpPercents[battlerAtk] > 70) + { + if (gBattleMons[battlerAtk].statStages[STAT_SPDEF] < STAT_UP_2_STAGE) + *score += 2; // seems better to raise spdef at higher HP + else if (gBattleMons[battlerAtk].statStages[STAT_SPDEF] < STAT_UP_STAGE) + *(score)++; + } + break; + case STAT_ACC: + if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 80, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef])) + *score += 2; // has moves with less than 80% accuracy + else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef])) + *(score)++; + break; + case STAT_EVASION: + if (!BattlerWillFaintFromWeather(battlerAtk, AI_DATA->abilities[battlerAtk])) + { + if (!GetBattlerSecondaryDamage(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_ROOTED)) + *score += 2; + else + *(score)++; + } + break; + } +} + +void IncreasePoisonScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) +{ + if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return; + + if (AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove) && AI_DATA->hpPercents[battlerDef] > 20) + { + if (!HasDamagingMove(battlerDef)) + *score += 2; + + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL && HasMoveEffect(battlerAtk, EFFECT_PROTECT)) + (*score)++; // stall tactic + + if (HasMoveEffect(battlerAtk, EFFECT_VENOSHOCK) + || HasMoveEffect(battlerAtk, EFFECT_HEX) + || HasMoveEffect(battlerAtk, EFFECT_VENOM_DRENCH) + || AI_DATA->abilities[battlerAtk] == ABILITY_MERCILESS) + *(score) += 2; + else + *(score)++; + } +} + +void IncreaseBurnScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) +{ + if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return; + + if (AI_CanBurn(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + { + (*score)++; // burning is good + if (HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)) + { + if (CanTargetFaintAi(battlerDef, battlerAtk)) + *score += 2; // burning the target to stay alive is cool + } + + if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX)) + (*score)++; + } +} + +void IncreaseParalyzeScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) +{ + if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return; + + if (AI_CanParalyze(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + { + u8 atkSpeed = GetBattlerTotalSpeedStat(battlerAtk); + u8 defSpeed = GetBattlerTotalSpeedStat(battlerDef); + + if ((defSpeed >= atkSpeed && defSpeed / 2 < atkSpeed) // You'll go first after paralyzing foe + || HasMoveEffect(battlerAtk, EFFECT_HEX) + || HasMoveEffect(battlerAtk, EFFECT_FLINCH_HIT) + || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION + || gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) + *score += 4; + else + *score += 2; + } +} + +void IncreaseSleepScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) +{ + if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return; + + if (AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) + *score += 2; + else + return; + + if ((HasMoveEffect(battlerAtk, EFFECT_DREAM_EATER) || HasMoveEffect(battlerAtk, EFFECT_NIGHTMARE)) + && !(HasMoveEffect(battlerDef, EFFECT_SNORE) || HasMoveEffect(battlerDef, EFFECT_SLEEP_TALK))) + (*score)++; + + if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX)) + (*score)++; +} + +void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) +{ + if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return; + + if (AI_CanConfuse(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) + && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CURE_CONFUSION + && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CURE_STATUS) + { + if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS + || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION + || (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && HasMoveEffect(battlerAtk, EFFECT_FLINCH_HIT))) + *score += 3; + else + *score += 2; + } +} + +bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u16 move) +{ + if (TestMoveFlags(move, FLAG_MAKES_CONTACT) + && ability != ABILITY_LONG_REACH + && holdEffect != HOLD_EFFECT_PROTECTIVE_PADS) + return TRUE; + return FALSE; +} + +//TODO - this could use some more sophisticated logic +bool32 ShouldUseZMove(u8 battlerAtk, u8 battlerDef, u16 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 + + if (IsViableZMove(battlerAtk, chosenMove)) + { + u8 effectiveness; + + if (gBattleMons[battlerDef].ability == ABILITY_DISGUISE && gBattleMons[battlerDef].species == SPECIES_MIMIKYU) + return FALSE; // Don't waste a Z-Move busting disguise + if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE && gBattleMons[battlerDef].species == SPECIES_EISCUE && IS_MOVE_PHYSICAL(chosenMove)) + return FALSE; // Don't waste a Z-Move busting Ice Face + + if (IS_MOVE_STATUS(chosenMove) && !IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove)) + return FALSE; + else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove)) + return FALSE; + + if (!IS_MOVE_STATUS(chosenMove) && AI_CalcDamage(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE) >= gBattleMons[battlerDef].hp) + return FALSE; // don't waste damaging z move if can otherwise faint target + + return TRUE; + } + + return FALSE; +} diff --git a/src/battle_anim.c b/src/battle_anim.c index 80d511f4c7..e3885ec4eb 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -17,83 +17,83 @@ #include "sprite.h" #include "task.h" #include "constants/battle_anim.h" +#include "constants/battle_config.h" +#include "constants/moves.h" + +/* + This file handles the commands for the macros defined in + battle_anim_script.inc and used in battle_anim_scripts.s +*/ #define ANIM_SPRITE_INDEX_COUNT 8 -extern struct MusicPlayerInfo gMPlayInfo_BGM; -extern struct MusicPlayerInfo gMPlayInfo_SE1; -extern struct MusicPlayerInfo gMPlayInfo_SE2; - extern const u16 gMovesWithQuietBGM[]; extern const u8 *const gBattleAnims_Moves[]; -// this file's functions -static void ScriptCmd_loadspritegfx(void); -static void ScriptCmd_unloadspritegfx(void); -static void ScriptCmd_createsprite(void); -static void ScriptCmd_createvisualtask(void); -static void ScriptCmd_delay(void); -static void ScriptCmd_waitforvisualfinish(void); -static void ScriptCmd_hang1(void); -static void ScriptCmd_hang2(void); -static void ScriptCmd_end(void); -static void ScriptCmd_playse(void); -static void ScriptCmd_monbg(void); -static void ScriptCmd_clearmonbg(void); -static void ScriptCmd_setalpha(void); -static void ScriptCmd_blendoff(void); -static void ScriptCmd_call(void); -static void ScriptCmd_return(void); -static void ScriptCmd_setarg(void); -static void ScriptCmd_choosetwoturnanim(void); -static void ScriptCmd_jumpifmoveturn(void); -static void ScriptCmd_goto(void); -static void ScriptCmd_fadetobg(void); -static void ScriptCmd_restorebg(void); -static void ScriptCmd_waitbgfadeout(void); -static void ScriptCmd_waitbgfadein(void); -static void ScriptCmd_changebg(void); -static void ScriptCmd_playsewithpan(void); -static void ScriptCmd_setpan(void); -static void ScriptCmd_panse_1B(void); -static void ScriptCmd_loopsewithpan(void); -static void ScriptCmd_waitplaysewithpan(void); -static void ScriptCmd_setbldcnt(void); -static void ScriptCmd_createsoundtask(void); -static void ScriptCmd_waitsound(void); -static void ScriptCmd_jumpargeq(void); -static void ScriptCmd_monbg_22(void); -static void ScriptCmd_clearmonbg_23(void); -static void ScriptCmd_jumpifcontest(void); -static void ScriptCmd_fadetobgfromset(void); -static void ScriptCmd_panse_26(void); -static void ScriptCmd_panse_27(void); -static void ScriptCmd_monbgprio_28(void); -static void ScriptCmd_monbgprio_29(void); -static void ScriptCmd_monbgprio_2A(void); -static void ScriptCmd_invisible(void); -static void ScriptCmd_visible(void); -static void ScriptCmd_doublebattle_2D(void); -static void ScriptCmd_doublebattle_2E(void); -static void ScriptCmd_stopsound(void); +static void Cmd_loadspritegfx(void); +static void Cmd_unloadspritegfx(void); +static void Cmd_createsprite(void); +static void Cmd_createvisualtask(void); +static void Cmd_delay(void); +static void Cmd_waitforvisualfinish(void); +static void Cmd_nop(void); +static void Cmd_nop2(void); +static void Cmd_end(void); +static void Cmd_playse(void); +static void Cmd_monbg(void); +static void Cmd_clearmonbg(void); +static void Cmd_setalpha(void); +static void Cmd_blendoff(void); +static void Cmd_call(void); +static void Cmd_return(void); +static void Cmd_setarg(void); +static void Cmd_choosetwoturnanim(void); +static void Cmd_jumpifmoveturn(void); +static void Cmd_goto(void); +static void Cmd_fadetobg(void); +static void Cmd_restorebg(void); +static void Cmd_waitbgfadeout(void); +static void Cmd_waitbgfadein(void); +static void Cmd_changebg(void); +static void Cmd_playsewithpan(void); +static void Cmd_setpan(void); +static void Cmd_panse(void); +static void Cmd_loopsewithpan(void); +static void Cmd_waitplaysewithpan(void); +static void Cmd_setbldcnt(void); +static void Cmd_createsoundtask(void); +static void Cmd_waitsound(void); +static void Cmd_jumpargeq(void); +static void Cmd_monbg_static(void); +static void Cmd_clearmonbg_static(void); +static void Cmd_jumpifcontest(void); +static void Cmd_fadetobgfromset(void); +static void Cmd_panse_adjustnone(void); +static void Cmd_panse_adjustall(void); +static void Cmd_splitbgprio(void); +static void Cmd_splitbgprio_all(void); +static void Cmd_splitbgprio_foes(void); +static void Cmd_invisible(void); +static void Cmd_visible(void); +static void Cmd_teamattack_moveback(void); +static void Cmd_teamattack_movefwd(void); +static void Cmd_stopsound(void); static void RunAnimScriptCommand(void); -static void task_pA_ma0A_obj_to_bg_pal(u8 taskId); -static void sub_80A46A0(void); -static void sub_80A4980(u8 taskId); -static void sub_80A4BB0(u8 taskId); +static void Task_UpdateMonBg(u8 taskId); +static void FlipBattlerBgTiles(void); +static void Task_ClearMonBg(u8 taskId); +static void Task_ClearMonBgStatic(u8 taskId); static void Task_FadeToBg(u8 taskId); static void Task_PanFromInitialToTarget(u8 taskId); static void Task_LoopAndPlaySE(u8 taskId); static void Task_WaitAndPlaySE(u8 taskId); static void LoadDefaultBg(void); -static void LoadMoveBg(u16 bgId); -// ewram EWRAM_DATA static const u8 *sBattleAnimScriptPtr = NULL; EWRAM_DATA static const u8 *sBattleAnimScriptRetAddr = NULL; EWRAM_DATA void (*gAnimScriptCallback)(void) = NULL; -EWRAM_DATA static s8 gAnimFramesToWait = 0; +EWRAM_DATA static s8 sAnimFramesToWait = 0; EWRAM_DATA bool8 gAnimScriptActive = FALSE; EWRAM_DATA u8 gAnimVisualTaskCount = 0; EWRAM_DATA u8 gAnimSoundTaskCount = 0; @@ -108,1696 +108,71 @@ EWRAM_DATA static u16 sSoundAnimFramesToWait = 0; EWRAM_DATA static u8 sMonAnimTaskIdArray[2] = {0}; EWRAM_DATA u8 gAnimMoveTurn = 0; EWRAM_DATA static u8 sAnimBackgroundFadeState = 0; -EWRAM_DATA static u16 sAnimMoveIndex = 0; // Set but unused. +EWRAM_DATA u16 gAnimMoveIndex = 0; // Set but unused. EWRAM_DATA u8 gBattleAnimAttacker = 0; EWRAM_DATA u8 gBattleAnimTarget = 0; EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gAnimCustomPanning = 0; -const struct OamData gOamData_AffineOff_ObjNormal_8x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - - -const struct OamData gOamData_AffineOff_ObjNormal_16x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjNormal_32x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjNormal_64x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjNormal_16x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjNormal_32x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x8), - .x = 0, - .size = SPRITE_SIZE(32x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjNormal_32x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x16), - .x = 0, - .size = SPRITE_SIZE(32x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjNormal_64x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x32), - .x = 0, - .size = SPRITE_SIZE(64x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjNormal_8x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjNormal_8x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x32), - .x = 0, - .size = SPRITE_SIZE(8x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjNormal_16x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x32), - .x = 0, - .size = SPRITE_SIZE(16x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjNormal_32x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x64), - .x = 0, - .size = SPRITE_SIZE(32x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_8x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_16x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_32x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_64x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_16x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_32x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x8), - .x = 0, - .size = SPRITE_SIZE(32x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_32x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x16), - .x = 0, - .size = SPRITE_SIZE(32x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_64x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x32), - .x = 0, - .size = SPRITE_SIZE(64x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_8x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_8x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x32), - .x = 0, - .size = SPRITE_SIZE(8x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_16x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x32), - .x = 0, - .size = SPRITE_SIZE(16x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjNormal_32x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x64), - .x = 0, - .size = SPRITE_SIZE(32x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_8x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_16x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_32x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_64x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_16x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_32x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x8), - .x = 0, - .size = SPRITE_SIZE(32x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_32x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x16), - .x = 0, - .size = SPRITE_SIZE(32x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_64x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x32), - .x = 0, - .size = SPRITE_SIZE(64x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_8x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_8x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x32), - .x = 0, - .size = SPRITE_SIZE(8x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_16x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x32), - .x = 0, - .size = SPRITE_SIZE(16x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjNormal_32x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x64), - .x = 0, - .size = SPRITE_SIZE(32x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_8x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_16x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_32x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_64x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_16x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_32x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x8), - .x = 0, - .size = SPRITE_SIZE(32x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_32x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x16), - .x = 0, - .size = SPRITE_SIZE(32x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_64x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x32), - .x = 0, - .size = SPRITE_SIZE(64x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_8x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_8x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x32), - .x = 0, - .size = SPRITE_SIZE(8x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_16x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x32), - .x = 0, - .size = SPRITE_SIZE(16x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineOff_ObjBlend_32x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x64), - .x = 0, - .size = SPRITE_SIZE(32x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_8x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_16x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_32x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_64x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_16x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_32x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x8), - .x = 0, - .size = SPRITE_SIZE(32x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_32x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x16), - .x = 0, - .size = SPRITE_SIZE(32x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_64x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x32), - .x = 0, - .size = SPRITE_SIZE(64x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_8x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_8x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x32), - .x = 0, - .size = SPRITE_SIZE(8x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_16x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x32), - .x = 0, - .size = SPRITE_SIZE(16x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineNormal_ObjBlend_32x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x64), - .x = 0, - .size = SPRITE_SIZE(32x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_8x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_16x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_32x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_64x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_16x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_32x8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x8), - .x = 0, - .size = SPRITE_SIZE(32x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_32x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x16), - .x = 0, - .size = SPRITE_SIZE(32x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_64x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x32), - .x = 0, - .size = SPRITE_SIZE(64x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_8x16 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_8x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x32), - .x = 0, - .size = SPRITE_SIZE(8x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_16x32 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x32), - .x = 0, - .size = SPRITE_SIZE(16x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct OamData gOamData_AffineDouble_ObjBlend_32x64 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_DOUBLE, - .objMode = ST_OAM_OBJ_BLEND, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x64), - .x = 0, - .size = SPRITE_SIZE(32x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, -}; - -const struct CompressedSpriteSheet gBattleAnimPicTable[] = -{ - {gBattleAnimSpriteGfx_Bone, 0x0200, ANIM_TAG_BONE}, - {gBattleAnimSpriteGfx_Spark, 0x0300, ANIM_TAG_SPARK}, - {gBattleAnimSpriteGfx_Pencil, 0x0200, ANIM_TAG_PENCIL}, - {gBattleAnimSpriteGfx_AirWave, 0x0100, ANIM_TAG_AIR_WAVE}, - {gBattleAnimSpriteGfx_Orb, 0x0200, ANIM_TAG_ORB}, - {gBattleAnimSpriteGfx_Sword, 0x0400, ANIM_TAG_SWORD}, - {gBattleAnimSpriteGfx_Seed, 0x0180, ANIM_TAG_SEED}, - {gBattleAnimSpriteGfx_Explosion6, 0x0800, ANIM_TAG_EXPLOSION_6}, - {gBattleAnimSpriteGfx_PinkOrb, 0x0020, ANIM_TAG_PINK_ORB}, - {gBattleAnimSpriteGfx_Gust, 0x0400, ANIM_TAG_GUST}, - {gBattleAnimSpriteGfx_IceCube, 0x1200, ANIM_TAG_ICE_CUBE}, - {gBattleAnimSpriteGfx_Spark2, 0x0180, ANIM_TAG_SPARK_2}, - {gBattleAnimSpriteGfx_Orange, 0x0080, ANIM_TAG_ORANGE}, - {gBattleAnimSpriteGfx_YellowBall, 0x0080, ANIM_TAG_YELLOW_BALL}, - {gBattleAnimSpriteGfx_LockOn, 0x0280, ANIM_TAG_LOCK_ON}, - {gBattleAnimSpriteGfx_TiedBag, 0x0080, ANIM_TAG_TIED_BAG}, - {gBattleAnimSpriteGfx_BlackSmoke, 0x0100, ANIM_TAG_BLACK_SMOKE}, - {gBattleAnimSpriteGfx_BlackBall, 0x0020, ANIM_TAG_BLACK_BALL}, - {gBattleAnimSpriteGfx_Conversion, 0x0080, ANIM_TAG_CONVERSION}, - {gBattleAnimSpriteGfx_Glass, 0x0400, ANIM_TAG_GLASS}, - {gBattleAnimSpriteGfx_HornHit, 0x0200, ANIM_TAG_HORN_HIT}, - {gBattleAnimSpriteGfx_Hit, 0x0A00, ANIM_TAG_HIT}, - {gBattleAnimSpriteGfx_Hit, 0x0A00, ANIM_TAG_HIT_2}, - {gBattleAnimSpriteGfx_BlueShards, 0x0380, ANIM_TAG_BLUE_SHARDS}, - {gBattleAnimSpriteGfx_ClosingEye, 0x0300, ANIM_TAG_CLOSING_EYE}, - {gBattleAnimSpriteGfx_WavingHand, 0x0A00, ANIM_TAG_WAVING_HAND}, - {gBattleAnimSpriteGfx_HitDuplicate, 0x0A00, ANIM_TAG_HIT_DUPLICATE}, - {gBattleAnimSpriteGfx_Leer, 0x0A00, ANIM_TAG_LEER}, - {gBattleAnimSpriteGfx_BlueBurst, 0x0A00, ANIM_TAG_BLUE_BURST}, - {gBattleAnimSpriteGfx_SmallEmber, 0x0A00, ANIM_TAG_SMALL_EMBER}, - {gBattleAnimSpriteGfx_GraySmoke, 0x0A00, ANIM_TAG_GRAY_SMOKE}, - {gBattleAnimSpriteGfx_BlueStar, 0x0E00, ANIM_TAG_BLUE_STAR}, - {gBattleAnimSpriteGfx_BubbleBurst, 0x0380, ANIM_TAG_BUBBLE_BURST}, - {gBattleAnimSpriteGfx_Fire, 0x1000, ANIM_TAG_FIRE}, - {gBattleAnimSpriteGfx_SpinningFire, 0x0800, ANIM_TAG_SPINNING_FIRE}, - {gBattleAnimSpriteGfx_FirePlume, 0x0A00, ANIM_TAG_FIRE_PLUME}, - {gBattleAnimSpriteGfx_Lightning2, 0x0800, ANIM_TAG_LIGHTNING_2}, - {gBattleAnimSpriteGfx_Lightning, 0x0A00, ANIM_TAG_LIGHTNING}, - {gBattleAnimSpriteGfx_ClawSlash2, 0x0A00, ANIM_TAG_CLAW_SLASH_2}, - {gBattleAnimSpriteGfx_ClawSlash, 0x0A00, ANIM_TAG_CLAW_SLASH}, - {gBattleAnimSpriteGfx_Scratch3, 0x0A00, ANIM_TAG_SCRATCH_3}, - {gBattleAnimSpriteGfx_Scratch2, 0x0A00, ANIM_TAG_SCRATCH_2}, - {gBattleAnimSpriteGfx_BubbleBurst2, 0x0A00, ANIM_TAG_BUBBLE_BURST_2}, - {gBattleAnimSpriteGfx_IceChunk, 0x0A00, ANIM_TAG_ICE_CHUNK}, - {gBattleAnimSpriteGfx_Glass2, 0x0A00, ANIM_TAG_GLASS_2}, - {gBattleAnimSpriteGfx_PinkHeart2, 0x0A00, ANIM_TAG_PINK_HEART_2}, - {gBattleAnimSpriteGfx_SapDrip, 0x1000, ANIM_TAG_SAP_DRIP}, - {gBattleAnimSpriteGfx_SapDrip, 0x1000, ANIM_TAG_SAP_DRIP_2}, - {gBattleAnimSpriteGfx_Sparkle1, 0x1000, ANIM_TAG_SPARKLE_1}, - {gBattleAnimSpriteGfx_Sparkle1, 0x1000, ANIM_TAG_SPARKLE_2}, - {gBattleAnimSpriteGfx_HumanoidFoot, 0x0200, ANIM_TAG_HUMANOID_FOOT}, - {gBattleAnimSpriteGfx_MonsterFoot, 0x0200, ANIM_TAG_MONSTER_FOOT}, - {gBattleAnimSpriteGfx_HumanoidHand, 0x0200, ANIM_TAG_HUMANOID_HAND}, - {gBattleAnimSpriteGfx_NoiseLine, 0x0800, ANIM_TAG_NOISE_LINE}, - {gBattleAnimSpriteGfx_YellowUnk, 0x0080, ANIM_TAG_YELLOW_UNK}, - {gBattleAnimSpriteGfx_RedFist, 0x0200, ANIM_TAG_RED_FIST}, - {gBattleAnimSpriteGfx_SlamHit, 0x1000, ANIM_TAG_SLAM_HIT}, - {gBattleAnimSpriteGfx_Ring, 0x0180, ANIM_TAG_RING}, - {gBattleAnimSpriteGfx_Rocks, 0x0C00, ANIM_TAG_ROCKS}, - {gBattleAnimSpriteGfx_Z, 0x0100, ANIM_TAG_Z}, - {gBattleAnimSpriteGfx_YellowUnk2, 0x0040, ANIM_TAG_YELLOW_UNK_2}, - {gBattleAnimSpriteGfx_AirSlash, 0x0180, ANIM_TAG_AIR_SLASH}, - {gBattleAnimSpriteGfx_SpinningGreenOrbs, 0x0800, ANIM_TAG_SPINNING_GREEN_ORBS}, - {gBattleAnimSpriteGfx_Leaf, 0x0480, ANIM_TAG_LEAF}, - {gBattleAnimSpriteGfx_Finger, 0x0200, ANIM_TAG_FINGER}, - {gBattleAnimSpriteGfx_PoisonPowder, 0x0200, ANIM_TAG_POISON_POWDER}, - {gBattleAnimSpriteGfx_BrownTriangle, 0x0100, ANIM_TAG_BROWN_TRIANGLE}, - {gBattleAnimSpriteGfx_PoisonPowder, 0x0200, ANIM_TAG_SLEEP_POWDER}, - {gBattleAnimSpriteGfx_PoisonPowder, 0x0200, ANIM_TAG_STUN_SPORE}, - {gBattleAnimSpriteGfx_PoisonPowder, 0x0200, ANIM_TAG_POWDER}, - {gBattleAnimSpriteGfx_Sparkle3, 0x0200, ANIM_TAG_SPARKLE_3}, - {gBattleAnimSpriteGfx_Sparkle4, 0x0A00, ANIM_TAG_SPARKLE_4}, - {gBattleAnimSpriteGfx_MusicNotes, 0x0300, ANIM_TAG_MUSIC_NOTES}, - {gBattleAnimSpriteGfx_Duck, 0x0180, ANIM_TAG_DUCK}, - {gBattleAnimSpriteGfx_MudSand, 0x00A0, ANIM_TAG_MUD_SAND}, - {gBattleAnimSpriteGfx_Alert, 0x0700, ANIM_TAG_ALERT}, - {gBattleAnimSpriteGfx_BlueFlames, 0x0400, ANIM_TAG_BLUE_FLAMES}, - {gBattleAnimSpriteGfx_BlueFlames2, 0x0200, ANIM_TAG_BLUE_FLAMES_2}, - {gBattleAnimSpriteGfx_Shock4, 0x0300, ANIM_TAG_SHOCK_4}, - {gBattleAnimSpriteGfx_Shock, 0x0C00, ANIM_TAG_SHOCK}, - {gBattleAnimSpriteGfx_Bell2, 0x0A00, ANIM_TAG_BELL_2}, - {gBattleAnimSpriteGfx_PinkGlove, 0x0080, ANIM_TAG_PINK_GLOVE}, - {gBattleAnimSpriteGfx_BlueLines, 0x0040, ANIM_TAG_BLUE_LINES}, - {gBattleAnimSpriteGfx_Impact3, 0x0E00, ANIM_TAG_IMPACT_3}, - {gBattleAnimSpriteGfx_Impact2, 0x0E00, ANIM_TAG_IMPACT_2}, - {gBattleAnimSpriteGfx_Reticle, 0x0280, ANIM_TAG_RETICLE}, - {gBattleAnimSpriteGfx_Breath, 0x0200, ANIM_TAG_BREATH}, - {gBattleAnimSpriteGfx_Anger, 0x0080, ANIM_TAG_ANGER}, - {gBattleAnimSpriteGfx_Snowball, 0x00C0, ANIM_TAG_SNOWBALL}, - {gBattleAnimSpriteGfx_Vine, 0x0A00, ANIM_TAG_VINE}, - {gBattleAnimSpriteGfx_Sword2, 0x0200, ANIM_TAG_SWORD_2}, - {gBattleAnimSpriteGfx_Clapping, 0x0180, ANIM_TAG_CLAPPING}, - {gBattleAnimSpriteGfx_RedTube, 0x0080, ANIM_TAG_RED_TUBE}, - {gBattleAnimSpriteGfx_Amnesia, 0x1000, ANIM_TAG_AMNESIA}, - {gBattleAnimSpriteGfx_String2, 0x0A00, ANIM_TAG_STRING_2}, - {gBattleAnimSpriteGfx_Pencil2, 0x0180, ANIM_TAG_PENCIL_2}, - {gBattleAnimSpriteGfx_Petal, 0x0380, ANIM_TAG_PETAL}, - {gBattleAnimSpriteGfx_BentSpoon, 0x0C00, ANIM_TAG_BENT_SPOON}, - {gBattleAnimSpriteGfx_Web, 0x0200, ANIM_TAG_WEB}, - {gBattleAnimSpriteGfx_MilkBottle, 0x0200, ANIM_TAG_MILK_BOTTLE}, - {gBattleAnimSpriteGfx_Coin, 0x0200, ANIM_TAG_COIN}, - {gBattleAnimSpriteGfx_CrackedEgg, 0x0200, ANIM_TAG_CRACKED_EGG}, - {gBattleAnimSpriteGfx_HatchedEgg, 0x0400, ANIM_TAG_HATCHED_EGG}, - {gBattleAnimSpriteGfx_FreshEgg, 0x0080, ANIM_TAG_FRESH_EGG}, - {gBattleAnimSpriteGfx_Fangs, 0x0400, ANIM_TAG_FANGS}, - {gBattleAnimSpriteGfx_Explosion2, 0x0c00, ANIM_TAG_EXPLOSION_2}, - {gBattleAnimSpriteGfx_Explosion3, 0x0200, ANIM_TAG_EXPLOSION_3}, - {gBattleAnimSpriteGfx_WaterDroplet, 0x1000, ANIM_TAG_WATER_DROPLET}, - {gBattleAnimSpriteGfx_WaterDroplet2, 0x0a00, ANIM_TAG_WATER_DROPLET_2}, - {gBattleAnimSpriteGfx_Seed2, 0x0020, ANIM_TAG_SEED_2}, - {gBattleAnimSpriteGfx_Sprout, 0x0e00, ANIM_TAG_SPROUT}, - {gBattleAnimSpriteGfx_RedWand, 0x0080, ANIM_TAG_RED_WAND}, - {gBattleAnimSpriteGfx_PurpleGreenUnk, 0x0a00, ANIM_TAG_PURPLE_GREEN_UNK}, - {gBattleAnimSpriteGfx_WaterColumn, 0x0400, ANIM_TAG_WATER_COLUMN}, - {gBattleAnimSpriteGfx_MudUnk, 0x0200, ANIM_TAG_MUD_UNK}, - {gBattleAnimSpriteGfx_RainDrops, 0x0700, ANIM_TAG_RAIN_DROPS}, - {gBattleAnimSpriteGfx_FurySwipes, 0x0800, ANIM_TAG_FURY_SWIPES}, - {gBattleAnimSpriteGfx_Vine2, 0x0a00, ANIM_TAG_VINE_2}, - {gBattleAnimSpriteGfx_Teeth, 0x0600, ANIM_TAG_TEETH}, - {gBattleAnimSpriteGfx_Bone2, 0x0800, ANIM_TAG_BONE_2}, - {gBattleAnimSpriteGfx_WhiteBag, 0x0200, ANIM_TAG_WHITE_BAG}, - {gBattleAnimSpriteGfx_Unknown, 0x0040, ANIM_TAG_UNKNOWN}, - {gBattleAnimSpriteGfx_PurpleCoral, 0x0180, ANIM_TAG_PURPLE_CORAL}, - {gBattleAnimSpriteGfx_PurpleDroplet, 0x0600, ANIM_TAG_PURPLE_DROPLET}, - {gBattleAnimSpriteGfx_Shock2, 0x0600, ANIM_TAG_SHOCK_2}, - {gBattleAnimSpriteGfx_ClosingEye2, 0x0200, ANIM_TAG_CLOSING_EYE_2}, - {gBattleAnimSpriteGfx_MetalBall, 0x0080, ANIM_TAG_METAL_BALL}, - {gBattleAnimSpriteGfx_MonsterDoll, 0x0200, ANIM_TAG_MONSTER_DOLL}, - {gBattleAnimSpriteGfx_Whirlwind, 0x0800, ANIM_TAG_WHIRLWIND}, - {gBattleAnimSpriteGfx_Whirlwind2, 0x0080, ANIM_TAG_WHIRLWIND_2}, - {gBattleAnimSpriteGfx_Explosion4, 0x0a00, ANIM_TAG_EXPLOSION_4}, - {gBattleAnimSpriteGfx_Explosion5, 0x0280, ANIM_TAG_EXPLOSION_5}, - {gBattleAnimSpriteGfx_Tongue, 0x0280, ANIM_TAG_TONGUE}, - {gBattleAnimSpriteGfx_Smoke, 0x0100, ANIM_TAG_SMOKE}, - {gBattleAnimSpriteGfx_Smoke2, 0x0200, ANIM_TAG_SMOKE_2}, - {gBattleAnimSpriteGfx_Impact, 0x0200, ANIM_TAG_IMPACT}, - {gBattleAnimSpriteGfx_CircleImpact, 0x0020, ANIM_TAG_CIRCLE_IMPACT}, - {gBattleAnimSpriteGfx_Scratch, 0x0a00, ANIM_TAG_SCRATCH}, - {gBattleAnimSpriteGfx_Cut, 0x0800, ANIM_TAG_CUT}, - {gBattleAnimSpriteGfx_SharpTeeth, 0x0800, ANIM_TAG_SHARP_TEETH}, - {gBattleAnimSpriteGfx_RainbowRings, 0x00c0, ANIM_TAG_RAINBOW_RINGS}, - {gBattleAnimSpriteGfx_IceCrystals, 0x01c0, ANIM_TAG_ICE_CRYSTALS}, - {gBattleAnimSpriteGfx_IceSpikes, 0x0100, ANIM_TAG_ICE_SPIKES}, - {gBattleAnimSpriteGfx_HandsAndFeet, 0x0800, ANIM_TAG_HANDS_AND_FEET}, - {gBattleAnimSpriteGfx_MistCloud, 0x0200, ANIM_TAG_MIST_CLOUD}, - {gBattleAnimSpriteGfx_Clamp, 0x0800, ANIM_TAG_CLAMP}, - {gBattleAnimSpriteGfx_Bubble, 0x0180, ANIM_TAG_BUBBLE}, - {gBattleAnimSpriteGfx_Orbs, 0x0180, ANIM_TAG_ORBS}, - {gBattleAnimSpriteGfx_WaterImpact, 0x0200, ANIM_TAG_WATER_IMPACT}, - {gBattleAnimSpriteGfx_WaterOrb, 0x0200, ANIM_TAG_WATER_ORB}, - {gBattleAnimSpriteGfx_PoisonBubble, 0x0180, ANIM_TAG_POISON_BUBBLE}, - {gBattleAnimSpriteGfx_ToxicBubble, 0x0400, ANIM_TAG_TOXIC_BUBBLE}, - {gBattleAnimSpriteGfx_Spikes, 0x0080, ANIM_TAG_SPIKES}, - {gBattleAnimSpriteGfx_HornHit2, 0x0100, ANIM_TAG_HORN_HIT_2}, - {gBattleAnimSpriteGfx_AirWave2, 0x0100, ANIM_TAG_AIR_WAVE_2}, - {gBattleAnimSpriteGfx_SmallBubbles, 0x0140, ANIM_TAG_SMALL_BUBBLES}, - {gBattleAnimSpriteGfx_RoundShadow, 0x0800, ANIM_TAG_ROUND_SHADOW}, - {gBattleAnimSpriteGfx_Sunlight, 0x0200, ANIM_TAG_SUNLIGHT}, - {gBattleAnimSpriteGfx_Spore, 0x0100, ANIM_TAG_SPORE}, - {gBattleAnimSpriteGfx_Flower, 0x00a0, ANIM_TAG_FLOWER}, - {gBattleAnimSpriteGfx_RazorLeaf, 0x0100, ANIM_TAG_RAZOR_LEAF}, - {gBattleAnimSpriteGfx_Needle, 0x0080, ANIM_TAG_NEEDLE}, - {gBattleAnimSpriteGfx_WhirlwindLines, 0x0300, ANIM_TAG_WHIRLWIND_LINES}, - {gBattleAnimSpriteGfx_GoldRing, 0x0100, ANIM_TAG_GOLD_RING}, - {gBattleAnimSpriteGfx_GoldRing, 0x0100, ANIM_TAG_PURPLE_RING}, - {gBattleAnimSpriteGfx_GoldRing, 0x0100, ANIM_TAG_BLUE_RING}, - {gBattleAnimSpriteGfx_GreenLightWall, 0x0800, ANIM_TAG_GREEN_LIGHT_WALL}, - {gBattleAnimSpriteGfx_GreenLightWall, 0x0800, ANIM_TAG_BLUE_LIGHT_WALL}, - {gBattleAnimSpriteGfx_GreenLightWall, 0x0800, ANIM_TAG_RED_LIGHT_WALL}, - {gBattleAnimSpriteGfx_GreenLightWall, 0x0800, ANIM_TAG_GRAY_LIGHT_WALL}, - {gBattleAnimSpriteGfx_GreenLightWall, 0x0800, ANIM_TAG_ORANGE_LIGHT_WALL}, - {gBattleAnimSpriteGfx_BlackBall2, 0x0080, ANIM_TAG_BLACK_BALL_2}, - {gBattleAnimSpriteGfx_MistCloud, 0x0200, ANIM_TAG_PURPLE_GAS_CLOUD}, - {gBattleAnimSpriteGfx_SparkH, 0x0200, ANIM_TAG_SPARK_H}, - {gBattleAnimSpriteGfx_YellowStar, 0x0200, ANIM_TAG_YELLOW_STAR}, - {gBattleAnimSpriteGfx_LargeFreshEgg, 0x0080, ANIM_TAG_LARGE_FRESH_EGG}, - {gBattleAnimSpriteGfx_ShadowBall, 0x0200, ANIM_TAG_SHADOW_BALL}, - {gBattleAnimSpriteGfx_Lick, 0x0500, ANIM_TAG_LICK}, - {gBattleAnimSpriteGfx_VoidLines, 0x0800, ANIM_TAG_VOID_LINES}, - {gBattleAnimSpriteGfx_String, 0x0400, ANIM_TAG_STRING}, - {gBattleAnimSpriteGfx_WebThread, 0x0020, ANIM_TAG_WEB_THREAD}, - {gBattleAnimSpriteGfx_SpiderWeb, 0x0800, ANIM_TAG_SPIDER_WEB}, - {gBattleAnimSpriteGfx_Lightbulb, 0x0100, ANIM_TAG_LIGHTBULB}, - {gBattleAnimSpriteGfx_Slash, 0x0800, ANIM_TAG_SLASH}, - {gBattleAnimSpriteGfx_FocusEnergy, 0x0400, ANIM_TAG_FOCUS_ENERGY}, - {gBattleAnimSpriteGfx_SphereToCube, 0x0a00, ANIM_TAG_SPHERE_TO_CUBE}, - {gBattleAnimSpriteGfx_Tendrils, 0x1000, ANIM_TAG_TENDRILS}, - {gBattleAnimSpriteGfx_Eye, 0x0800, ANIM_TAG_EYE}, - {gBattleAnimSpriteGfx_WhiteShadow, 0x0400, ANIM_TAG_WHITE_SHADOW}, - {gBattleAnimSpriteGfx_TealAlert, 0x0200, ANIM_TAG_TEAL_ALERT}, - {gBattleAnimSpriteGfx_OpeningEye, 0x0800, ANIM_TAG_OPENING_EYE}, - {gBattleAnimSpriteGfx_RoundWhiteHalo, 0x0800, ANIM_TAG_ROUND_WHITE_HALO}, - {gBattleAnimSpriteGfx_FangAttack, 0x0800, ANIM_TAG_FANG_ATTACK}, - {gBattleAnimSpriteGfx_PurpleHandOutline, 0x0200, ANIM_TAG_PURPLE_HAND_OUTLINE}, - {gBattleAnimSpriteGfx_Moon, 0x0800, ANIM_TAG_MOON}, - {gBattleAnimSpriteGfx_GreenSparkle, 0x0200, ANIM_TAG_GREEN_SPARKLE}, - {gBattleAnimSpriteGfx_Spiral, 0x0800, ANIM_TAG_SPIRAL}, - {gBattleAnimSpriteGfx_SnoreZ, 0x0200, ANIM_TAG_SNORE_Z}, - {gBattleAnimSpriteGfx_Explosion, 0x0800, ANIM_TAG_EXPLOSION}, - {gBattleAnimSpriteGfx_Nail, 0x0400, ANIM_TAG_NAIL}, - {gBattleAnimSpriteGfx_GhostlySpirit, 0x0200, ANIM_TAG_GHOSTLY_SPIRIT}, - {gBattleAnimSpriteGfx_WarmRock, 0x0a80, ANIM_TAG_WARM_ROCK}, - {gBattleAnimSpriteGfx_BreakingEgg, 0x0600, ANIM_TAG_BREAKING_EGG}, - {gBattleAnimSpriteGfx_ThinRing, 0x0800, ANIM_TAG_THIN_RING}, - {gBattleAnimSpriteGfx_PunchImpact, 0x0200, ANIM_TAG_PUNCH_IMPACT}, - {gBattleAnimSpriteGfx_Bell, 0x0600, ANIM_TAG_BELL}, - {gBattleAnimSpriteGfx_MusicNotes2, 0x0800, ANIM_TAG_MUSIC_NOTES_2}, - {gBattleAnimSpriteGfx_SpeedDust, 0x0180, ANIM_TAG_SPEED_DUST}, - {gBattleAnimSpriteGfx_TornMetal, 0x0800, ANIM_TAG_TORN_METAL}, - {gBattleAnimSpriteGfx_ThoughtBubble, 0x0800, ANIM_TAG_THOUGHT_BUBBLE}, - {gBattleAnimSpriteGfx_MagentaHeart, 0x0080, ANIM_TAG_MAGENTA_HEART}, - {gBattleAnimSpriteGfx_ElectricOrbs, 0x0080, ANIM_TAG_ELECTRIC_ORBS}, - {gBattleAnimSpriteGfx_CircleOfLight, 0x0800, ANIM_TAG_CIRCLE_OF_LIGHT}, - {gBattleAnimSpriteGfx_Electricity, 0x0800, ANIM_TAG_ELECTRICITY}, - {gBattleAnimSpriteGfx_Finger2, 0x0600, ANIM_TAG_FINGER_2}, - {gBattleAnimSpriteGfx_MovementWaves, 0x0600, ANIM_TAG_MOVEMENT_WAVES}, - {gBattleAnimSpriteGfx_MagentaHeart, 0x0080, ANIM_TAG_RED_HEART}, - {gBattleAnimSpriteGfx_RedOrb, 0x0080, ANIM_TAG_RED_ORB}, - {gBattleAnimSpriteGfx_EyeSparkle, 0x0180, ANIM_TAG_EYE_SPARKLE}, - {gBattleAnimSpriteGfx_MagentaHeart, 0x0080, ANIM_TAG_PINK_HEART}, - {gBattleAnimSpriteGfx_Angel, 0x0200, ANIM_TAG_ANGEL}, - {gBattleAnimSpriteGfx_Devil, 0x0400, ANIM_TAG_DEVIL}, - {gBattleAnimSpriteGfx_Swipe, 0x0a00, ANIM_TAG_SWIPE}, - {gBattleAnimSpriteGfx_Roots, 0x0800, ANIM_TAG_ROOTS}, - {gBattleAnimSpriteGfx_ItemBag, 0x0200, ANIM_TAG_ITEM_BAG}, - {gBattleAnimSpriteGfx_JaggedMusicNote, 0x0400, ANIM_TAG_JAGGED_MUSIC_NOTE}, - {gBattleAnimSpriteGfx_Pokeball, 0x0080, ANIM_TAG_POKEBALL}, - {gBattleAnimSpriteGfx_Spotlight, 0x0800, ANIM_TAG_SPOTLIGHT}, - {gBattleAnimSpriteGfx_LetterZ, 0x0200, ANIM_TAG_LETTER_Z}, - {gBattleAnimSpriteGfx_RapidSpin, 0x0300, ANIM_TAG_RAPID_SPIN}, - {gBattleAnimSpriteGfx_TriAttackTriangle, 0x0800, ANIM_TAG_TRI_ATTACK_TRIANGLE}, - {gBattleAnimSpriteGfx_WispOrb, 0x0380, ANIM_TAG_WISP_ORB}, - {gBattleAnimSpriteGfx_WispFire, 0x0800, ANIM_TAG_WISP_FIRE}, - {gBattleAnimSpriteGfx_GoldStars, 0x00c0, ANIM_TAG_GOLD_STARS}, - {gBattleAnimSpriteGfx_EclipsingOrb, 0x0800, ANIM_TAG_ECLIPSING_ORB}, - {gBattleAnimSpriteGfx_GrayOrb, 0x0060, ANIM_TAG_GRAY_ORB}, - {gBattleAnimSpriteGfx_GrayOrb, 0x0060, ANIM_TAG_BLUE_ORB}, - {gBattleAnimSpriteGfx_GrayOrb, 0x0060, ANIM_TAG_RED_ORB_2}, - {gBattleAnimSpriteGfx_PinkPetal, 0x0080, ANIM_TAG_PINK_PETAL}, - {gBattleAnimSpriteGfx_PainSplit, 0x0180, ANIM_TAG_PAIN_SPLIT}, - {gBattleAnimSpriteGfx_Confetti, 0x0180, ANIM_TAG_CONFETTI}, - {gBattleAnimSpriteGfx_GreenStar, 0x0200, ANIM_TAG_GREEN_STAR}, - {gBattleAnimSpriteGfx_PinkCloud, 0x0200, ANIM_TAG_PINK_CLOUD}, - {gBattleAnimSpriteGfx_SweatDrop, 0x0020, ANIM_TAG_SWEAT_DROP}, - {gBattleAnimSpriteGfx_GuardRing, 0x0400, ANIM_TAG_GUARD_RING}, - {gBattleAnimSpriteGfx_PurpleScratch, 0x0600, ANIM_TAG_PURPLE_SCRATCH}, - {gBattleAnimSpriteGfx_PurpleSwipe, 0x1000, ANIM_TAG_PURPLE_SWIPE}, - {gBattleAnimSpriteGfx_TagHand, 0x0400, ANIM_TAG_TAG_HAND}, - {gBattleAnimSpriteGfx_SmallRedEye, 0x0020, ANIM_TAG_SMALL_RED_EYE}, - {gBattleAnimSpriteGfx_HollowOrb, 0x0080, ANIM_TAG_HOLLOW_ORB}, - {gBattleAnimSpriteGfx_XSign, 0x0800, ANIM_TAG_X_SIGN}, - {gBattleAnimSpriteGfx_BluegreenOrb, 0x0080, ANIM_TAG_BLUEGREEN_ORB}, - {gBattleAnimSpriteGfx_PawPrint, 0x0200, ANIM_TAG_PAW_PRINT}, - {gBattleAnimSpriteGfx_PurpleFlame, 0x0400, ANIM_TAG_PURPLE_FLAME}, - {gBattleAnimSpriteGfx_RedBall, 0x0200, ANIM_TAG_RED_BALL}, - {gBattleAnimSpriteGfx_SmellingsaltEffect, 0x0200, ANIM_TAG_SMELLINGSALT_EFFECT}, - {gBattleAnimSpriteGfx_Meteor, 0x0800, ANIM_TAG_METEOR}, - {gBattleAnimSpriteGfx_FlatRock, 0x0280, ANIM_TAG_FLAT_ROCK}, - {gBattleAnimSpriteGfx_MagnifyingGlass, 0x0200, ANIM_TAG_MAGNIFYING_GLASS}, - {gBattleAnimSpriteGfx_WaterOrb, 0x0200, ANIM_TAG_BROWN_ORB}, - {gBattleAnimSpriteGfx_MetalSoundWaves, 0x0400, ANIM_TAG_METAL_SOUND_WAVES}, - {gBattleAnimSpriteGfx_FlyingDirt, 0x0200, ANIM_TAG_FLYING_DIRT}, - {gBattleAnimSpriteGfx_IcicleSpear, 0x0200, ANIM_TAG_ICICLE_SPEAR}, - {gBattleAnimSpriteGfx_Hail, 0x0080, ANIM_TAG_HAIL}, - {gBattleAnimSpriteGfx_GlowyRedOrb, 0x0020, ANIM_TAG_GLOWY_RED_ORB}, - {gBattleAnimSpriteGfx_GlowyRedOrb, 0x0020, ANIM_TAG_GLOWY_GREEN_ORB}, - {gBattleAnimSpriteGfx_GreenSpike, 0x0080, ANIM_TAG_GREEN_SPIKE}, - {gBattleAnimSpriteGfx_CircleOfLight, 0x0800, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT}, - {gBattleAnimSpriteGfx_GlowyRedOrb, 0x0020, ANIM_TAG_GLOWY_BLUE_ORB}, - {gBattleAnimSpriteGfx_Pokeblock, 0x0080, ANIM_TAG_POKEBLOCK}, - {gBattleAnimSpriteGfx_WhiteFeather, 0x0400, ANIM_TAG_WHITE_FEATHER}, - {gBattleAnimSpriteGfx_Sparkle6, 0x0080, ANIM_TAG_SPARKLE_6}, - {gBattleAnimSpriteGfx_Splash, 0x0800, ANIM_TAG_SPLASH}, - {gBattleAnimSpriteGfx_SweatBead, 0x0020, ANIM_TAG_SWEAT_BEAD}, - {gBattleAnimSpriteGfx_Gem1, 0x0800, ANIM_TAG_GEM_1}, - {gBattleAnimSpriteGfx_Gem2, 0x0800, ANIM_TAG_GEM_2}, - {gBattleAnimSpriteGfx_Gem3, 0x0800, ANIM_TAG_GEM_3}, - {gBattleAnimSpriteGfx_SlamHit2, 0x1000, ANIM_TAG_SLAM_HIT_2}, - {gBattleAnimSpriteGfx_Recycle, 0x0800, ANIM_TAG_RECYCLE}, - {gBattleAnimSpriteGfx_RedParticles, 0x00a0, ANIM_TAG_RED_PARTICLES}, - {gBattleAnimSpriteGfx_Protect, 0x0800, ANIM_TAG_PROTECT}, - {gBattleAnimSpriteGfx_DirtMound, 0x0200, ANIM_TAG_DIRT_MOUND}, - {gBattleAnimSpriteGfx_Shock3, 0x0600, ANIM_TAG_SHOCK_3}, - {gBattleAnimSpriteGfx_WeatherBall, 0x0200, ANIM_TAG_WEATHER_BALL}, - {gBattleAnimSpriteGfx_Bird, 0x0800, ANIM_TAG_BIRD}, - {gBattleAnimSpriteGfx_CrossImpact, 0x0200, ANIM_TAG_CROSS_IMPACT}, - {gBattleAnimSpriteGfx_Slash, 0x0800, ANIM_TAG_SLASH_2}, - {gBattleAnimSpriteGfx_SlamHit, 0x1000, ANIM_TAG_WHIP_HIT}, - {gBattleAnimSpriteGfx_GoldRing, 0x0100, ANIM_TAG_BLUE_RING_2}, -}; - -const struct CompressedSpritePalette gBattleAnimPaletteTable[] = -{ - {gBattleAnimSpritePal_Bone, ANIM_TAG_BONE}, - {gBattleAnimSpritePal_Spark, ANIM_TAG_SPARK}, - {gBattleAnimSpritePal_Pencil, ANIM_TAG_PENCIL}, - {gBattleAnimSpritePal_AirWave, ANIM_TAG_AIR_WAVE}, - {gBattleAnimSpritePal_Orb, ANIM_TAG_ORB}, - {gBattleAnimSpritePal_Sword, ANIM_TAG_SWORD}, - {gBattleAnimSpritePal_Seed, ANIM_TAG_SEED}, - {gBattleAnimSpritePal_Explosion6, ANIM_TAG_EXPLOSION_6}, - {gBattleAnimSpritePal_PinkOrb, ANIM_TAG_PINK_ORB}, - {gBattleAnimSpritePal_Gust, ANIM_TAG_GUST}, - {gBattleAnimSpritePal_IceCube, ANIM_TAG_ICE_CUBE}, - {gBattleAnimSpritePal_Spark2, ANIM_TAG_SPARK_2}, - {gBattleAnimSpritePal_Orange, ANIM_TAG_ORANGE}, - {gBattleAnimSpritePal_YellowBall, ANIM_TAG_YELLOW_BALL}, - {gBattleAnimSpritePal_LockOn, ANIM_TAG_LOCK_ON}, - {gBattleAnimSpritePal_TiedBag, ANIM_TAG_TIED_BAG}, - {gBattleAnimSpritePal_BlackSmoke, ANIM_TAG_BLACK_SMOKE}, - {gBattleAnimSpritePal_BlackSmoke, ANIM_TAG_BLACK_BALL}, - {gBattleAnimSpritePal_Conversion, ANIM_TAG_CONVERSION}, - {gBattleAnimSpritePal_Glass, ANIM_TAG_GLASS}, - {gBattleAnimSpritePal_HornHit, ANIM_TAG_HORN_HIT}, - {gBattleAnimSpritePal_Hit, ANIM_TAG_HIT}, - {gBattleAnimSpritePal_Hit2, ANIM_TAG_HIT_2}, - {gBattleAnimSpritePal_BlueShards, ANIM_TAG_BLUE_SHARDS}, - {gBattleAnimSpritePal_ClosingEye, ANIM_TAG_CLOSING_EYE}, - {gBattleAnimSpritePal_WavingHand, ANIM_TAG_WAVING_HAND}, - {gBattleAnimSpritePal_HitDuplicate, ANIM_TAG_HIT_DUPLICATE}, - {gBattleAnimSpritePal_Leer, ANIM_TAG_LEER}, - {gBattleAnimSpritePal_BlueBurst, ANIM_TAG_BLUE_BURST}, - {gBattleAnimSpritePal_SmallEmber, ANIM_TAG_SMALL_EMBER}, - {gBattleAnimSpritePal_GraySmoke, ANIM_TAG_GRAY_SMOKE}, - {gBattleAnimSpritePal_BlueStar, ANIM_TAG_BLUE_STAR}, - {gBattleAnimSpritePal_BubbleBurst, ANIM_TAG_BUBBLE_BURST}, - {gBattleAnimSpritePal_Fire, ANIM_TAG_FIRE}, - {gBattleAnimSpritePal_Fire, ANIM_TAG_SPINNING_FIRE}, - {gBattleAnimSpritePal_Fire, ANIM_TAG_FIRE_PLUME}, - {gBattleAnimSpritePal_Lightning2, ANIM_TAG_LIGHTNING_2}, - {gBattleAnimSpritePal_Lightning2, ANIM_TAG_LIGHTNING}, - {gBattleAnimSpritePal_ClawSlash2, ANIM_TAG_CLAW_SLASH_2}, - {gBattleAnimSpritePal_ClawSlash, ANIM_TAG_CLAW_SLASH}, - {gBattleAnimSpritePal_ClawSlash2, ANIM_TAG_SCRATCH_3}, - {gBattleAnimSpritePal_ClawSlash2, ANIM_TAG_SCRATCH_2}, - {gBattleAnimSpritePal_BubbleBurst2, ANIM_TAG_BUBBLE_BURST_2}, - {gBattleAnimSpritePal_IceChunk, ANIM_TAG_ICE_CHUNK}, - {gBattleAnimSpritePal_Glass2, ANIM_TAG_GLASS_2}, - {gBattleAnimSpritePal_PinkHeart2, ANIM_TAG_PINK_HEART_2}, - {gBattleAnimSpritePal_SapDrip, ANIM_TAG_SAP_DRIP}, - {gBattleAnimSpritePal_SapDrip2, ANIM_TAG_SAP_DRIP}, - {gBattleAnimSpritePal_Sparkle1, ANIM_TAG_SPARKLE_1}, - {gBattleAnimSpritePal_Sparkle2, ANIM_TAG_SPARKLE_2}, - {gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_HUMANOID_FOOT}, - {gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_MONSTER_FOOT}, - {gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_HUMANOID_HAND}, - {gBattleAnimSpritePal_HitDuplicate, ANIM_TAG_NOISE_LINE}, - {gBattleAnimSpritePal_YellowUnk, ANIM_TAG_YELLOW_UNK}, - {gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_RED_FIST}, - {gBattleAnimSpritePal_SlamHit, ANIM_TAG_SLAM_HIT}, - {gBattleAnimSpritePal_Ring, ANIM_TAG_RING}, - {gBattleAnimSpritePal_Rocks, ANIM_TAG_ROCKS}, - {gBattleAnimSpritePal_Z, ANIM_TAG_Z}, - {gBattleAnimSpritePal_YellowUnk2, ANIM_TAG_YELLOW_UNK_2}, - {gBattleAnimSpritePal_AirSlash, ANIM_TAG_AIR_SLASH}, - {gBattleAnimSpritePal_SpinningGreenOrbs, ANIM_TAG_SPINNING_GREEN_ORBS}, - {gBattleAnimSpritePal_Leaf, ANIM_TAG_LEAF}, - {gBattleAnimSpritePal_Finger, ANIM_TAG_FINGER}, - {gBattleAnimSpritePal_PoisonPowder, ANIM_TAG_POISON_POWDER}, - {gBattleAnimSpritePal_BrownTriangle, ANIM_TAG_BROWN_TRIANGLE}, - {gBattleAnimSpritePal_SleepPowder, ANIM_TAG_SLEEP_POWDER}, - {gBattleAnimSpritePal_StunSpore, ANIM_TAG_STUN_SPORE}, - {gBattleAnimSpritePal_PoisonPowder, ANIM_TAG_POWDER}, - {gBattleAnimSpritePal_Sparkle3, ANIM_TAG_SPARKLE_3}, - {gBattleAnimSpritePal_Sparkle3, ANIM_TAG_SPARKLE_4}, - {gBattleAnimSpritePal_MusicNotes, ANIM_TAG_MUSIC_NOTES}, - {gBattleAnimSpritePal_Duck, ANIM_TAG_DUCK}, - {gBattleAnimSpritePal_MudSand, ANIM_TAG_MUD_SAND}, - {gBattleAnimSpritePal_Alert, ANIM_TAG_ALERT}, - {gBattleAnimSpritePal_BlueFlames, ANIM_TAG_BLUE_FLAMES}, - {gBattleAnimSpritePal_BlueFlames, ANIM_TAG_BLUE_FLAMES_2}, - {gBattleAnimSpritePal_Shock4, ANIM_TAG_SHOCK_4}, - {gBattleAnimSpritePal_Shock4, ANIM_TAG_SHOCK}, - {gBattleAnimSpritePal_Bell2, ANIM_TAG_BELL_2}, - {gBattleAnimSpritePal_PinkGlove, ANIM_TAG_PINK_GLOVE}, - {gBattleAnimSpritePal_BlueLines, ANIM_TAG_BLUE_LINES}, - {gBattleAnimSpritePal_Impact3, ANIM_TAG_IMPACT_3}, - {gBattleAnimSpritePal_Impact2, ANIM_TAG_IMPACT_2}, - {gBattleAnimSpritePal_Reticle, ANIM_TAG_RETICLE}, - {gBattleAnimSpritePal_Breath, ANIM_TAG_BREATH}, - {gBattleAnimSpritePal_Anger, ANIM_TAG_ANGER}, - {gBattleAnimSpritePal_Snowball, ANIM_TAG_SNOWBALL}, - {gBattleAnimSpritePal_Vine, ANIM_TAG_VINE}, - {gBattleAnimSpritePal_Sword2, ANIM_TAG_SWORD_2}, - {gBattleAnimSpritePal_Clapping, ANIM_TAG_CLAPPING}, - {gBattleAnimSpritePal_RedTube, ANIM_TAG_RED_TUBE}, - {gBattleAnimSpritePal_Amnesia, ANIM_TAG_AMNESIA}, - {gBattleAnimSpritePal_String2, ANIM_TAG_STRING_2}, - {gBattleAnimSpritePal_Pencil2, ANIM_TAG_PENCIL_2}, - {gBattleAnimSpritePal_Petal, ANIM_TAG_PETAL}, - {gBattleAnimSpritePal_BentSpoon, ANIM_TAG_BENT_SPOON}, - {gBattleAnimSpritePal_String2, ANIM_TAG_WEB}, - {gBattleAnimSpritePal_MilkBottle, ANIM_TAG_MILK_BOTTLE}, - {gBattleAnimSpritePal_Coin, ANIM_TAG_COIN}, - {gBattleAnimSpritePal_CrackedEgg, ANIM_TAG_CRACKED_EGG}, - {gBattleAnimSpritePal_CrackedEgg, ANIM_TAG_HATCHED_EGG}, - {gBattleAnimSpritePal_FreshEgg, ANIM_TAG_FRESH_EGG}, - {gBattleAnimSpritePal_Fangs, ANIM_TAG_FANGS}, - {gBattleAnimSpritePal_Explosion2, ANIM_TAG_EXPLOSION_2}, - {gBattleAnimSpritePal_Explosion2, ANIM_TAG_EXPLOSION_3}, - {gBattleAnimSpritePal_WaterDroplet, ANIM_TAG_WATER_DROPLET}, - {gBattleAnimSpritePal_WaterDroplet, ANIM_TAG_WATER_DROPLET_2}, - {gBattleAnimSpritePal_Seed2, ANIM_TAG_SEED_2}, - {gBattleAnimSpritePal_Seed2, ANIM_TAG_SPROUT}, - {gBattleAnimSpritePal_RedWand, ANIM_TAG_RED_WAND}, - {gBattleAnimSpritePal_PurpleGreenUnk, ANIM_TAG_PURPLE_GREEN_UNK}, - {gBattleAnimSpritePal_WaterColumn, ANIM_TAG_WATER_COLUMN}, - {gBattleAnimSpritePal_MudUnk, ANIM_TAG_MUD_UNK}, - {gBattleAnimSpritePal_RainDrops, ANIM_TAG_RAIN_DROPS}, - {gBattleAnimSpritePal_FurySwipes, ANIM_TAG_FURY_SWIPES}, - {gBattleAnimSpritePal_Vine2, ANIM_TAG_VINE_2}, - {gBattleAnimSpritePal_Teeth, ANIM_TAG_TEETH}, - {gBattleAnimSpritePal_Bone2, ANIM_TAG_BONE_2}, - {gBattleAnimSpritePal_WhiteBag, ANIM_TAG_WHITE_BAG}, - {gBattleAnimSpritePal_Unknown, ANIM_TAG_UNKNOWN}, - {gBattleAnimSpritePal_PurpleCoral, ANIM_TAG_PURPLE_CORAL}, - {gBattleAnimSpritePal_PurpleCoral, ANIM_TAG_PURPLE_DROPLET}, - {gBattleAnimSpritePal_Shock2, ANIM_TAG_SHOCK_2}, - {gBattleAnimSpritePal_ClosingEye2, ANIM_TAG_CLOSING_EYE_2}, - {gBattleAnimSpritePal_MetalBall, ANIM_TAG_METAL_BALL}, - {gBattleAnimSpritePal_MonsterDoll, ANIM_TAG_MONSTER_DOLL}, - {gBattleAnimSpritePal_Whirlwind, ANIM_TAG_WHIRLWIND}, - {gBattleAnimSpritePal_Whirlwind, ANIM_TAG_WHIRLWIND_2}, - {gBattleAnimSpritePal_Explosion4, ANIM_TAG_EXPLOSION_4}, - {gBattleAnimSpritePal_Explosion4, ANIM_TAG_EXPLOSION_5}, - {gBattleAnimSpritePal_Tongue, ANIM_TAG_TONGUE}, - {gBattleAnimSpritePal_Smoke, ANIM_TAG_SMOKE}, - {gBattleAnimSpritePal_Smoke, ANIM_TAG_SMOKE_2}, - {gBattleAnimSpritePal_Impact, ANIM_TAG_IMPACT}, - {gBattleAnimSpritePal_CircleImpact, ANIM_TAG_CIRCLE_IMPACT}, - {gBattleAnimSpritePal_Impact, ANIM_TAG_SCRATCH}, - {gBattleAnimSpritePal_Impact, ANIM_TAG_CUT}, - {gBattleAnimSpritePal_SharpTeeth, ANIM_TAG_SHARP_TEETH}, - {gBattleAnimSpritePal_RainbowRings, ANIM_TAG_RAINBOW_RINGS}, - {gBattleAnimSpritePal_IceCrystals, ANIM_TAG_ICE_CRYSTALS}, - {gBattleAnimSpritePal_IceCrystals, ANIM_TAG_ICE_SPIKES}, - {gBattleAnimSpritePal_HandsAndFeet, ANIM_TAG_HANDS_AND_FEET}, - {gBattleAnimSpritePal_MistCloud, ANIM_TAG_MIST_CLOUD}, - {gBattleAnimSpritePal_SharpTeeth, ANIM_TAG_CLAMP}, - {gBattleAnimSpritePal_RainDrops, ANIM_TAG_BUBBLE}, - {gBattleAnimSpritePal_Orbs, ANIM_TAG_ORBS}, - {gBattleAnimSpritePal_WaterImpact, ANIM_TAG_WATER_IMPACT}, - {gBattleAnimSpritePal_WaterImpact, ANIM_TAG_WATER_ORB}, - {gBattleAnimSpritePal_PoisonBubble, ANIM_TAG_POISON_BUBBLE}, - {gBattleAnimSpritePal_PoisonBubble, ANIM_TAG_TOXIC_BUBBLE}, - {gBattleAnimSpritePal_Spikes, ANIM_TAG_SPIKES}, - {gBattleAnimSpritePal_HornHit2, ANIM_TAG_HORN_HIT_2}, - {gBattleAnimSpritePal_AirWave2, ANIM_TAG_AIR_WAVE_2}, - {gBattleAnimSpritePal_SmallBubbles, ANIM_TAG_SMALL_BUBBLES}, - {gBattleAnimSpritePal_RoundShadow, ANIM_TAG_ROUND_SHADOW}, - {gBattleAnimSpritePal_Sunlight, ANIM_TAG_SUNLIGHT}, - {gBattleAnimSpritePal_Spore, ANIM_TAG_SPORE}, - {gBattleAnimSpritePal_Flower, ANIM_TAG_FLOWER}, - {gBattleAnimSpritePal_RazorLeaf, ANIM_TAG_RAZOR_LEAF}, - {gBattleAnimSpritePal_Needle, ANIM_TAG_NEEDLE}, - {gBattleAnimSpritePal_WhirlwindLines, ANIM_TAG_WHIRLWIND_LINES}, - {gBattleAnimSpritePal_GoldRing, ANIM_TAG_GOLD_RING}, - {gBattleAnimSpritePal_PurpleRing, ANIM_TAG_PURPLE_RING}, - {gBattleAnimSpritePal_BlueRing, ANIM_TAG_BLUE_RING}, - {gBattleAnimSpritePal_GreenLightWall, ANIM_TAG_GREEN_LIGHT_WALL}, - {gBattleAnimSpritePal_BlueLightWall, ANIM_TAG_BLUE_LIGHT_WALL}, - {gBattleAnimSpritePal_RedLightWall, ANIM_TAG_RED_LIGHT_WALL}, - {gBattleAnimSpritePal_GrayLightWall, ANIM_TAG_GRAY_LIGHT_WALL}, - {gBattleAnimSpritePal_OrangeLightWall, ANIM_TAG_ORANGE_LIGHT_WALL}, - {gBattleAnimSpritePal_BlackBall2, ANIM_TAG_BLACK_BALL_2}, - {gBattleAnimSpritePal_PurpleGasCloud, ANIM_TAG_PURPLE_GAS_CLOUD}, - {gBattleAnimSpritePal_Spark, ANIM_TAG_SPARK_H}, - {gBattleAnimSpritePal_YellowStar, ANIM_TAG_YELLOW_STAR}, - {gBattleAnimSpritePal_LargeFreshEgg, ANIM_TAG_LARGE_FRESH_EGG}, - {gBattleAnimSpritePal_ShadowBall, ANIM_TAG_SHADOW_BALL}, - {gBattleAnimSpritePal_Lick, ANIM_TAG_LICK}, - {gBattleAnimSpritePal_VoidLines, ANIM_TAG_VOID_LINES}, - {gBattleAnimSpritePal_String, ANIM_TAG_STRING}, - {gBattleAnimSpritePal_String, ANIM_TAG_WEB_THREAD}, - {gBattleAnimSpritePal_String, ANIM_TAG_SPIDER_WEB}, - {gBattleAnimSpritePal_Lightbulb, ANIM_TAG_LIGHTBULB}, - {gBattleAnimSpritePal_Slash, ANIM_TAG_SLASH}, - {gBattleAnimSpritePal_FocusEnergy, ANIM_TAG_FOCUS_ENERGY}, - {gBattleAnimSpritePal_SphereToCube, ANIM_TAG_SPHERE_TO_CUBE}, - {gBattleAnimSpritePal_Tendrils, ANIM_TAG_TENDRILS}, - {gBattleAnimSpritePal_Eye, ANIM_TAG_EYE}, - {gBattleAnimSpritePal_WhiteShadow, ANIM_TAG_WHITE_SHADOW}, - {gBattleAnimSpritePal_TealAlert, ANIM_TAG_TEAL_ALERT}, - {gBattleAnimSpritePal_OpeningEye, ANIM_TAG_OPENING_EYE}, - {gBattleAnimSpritePal_RoundWhiteHalo, ANIM_TAG_ROUND_WHITE_HALO}, - {gBattleAnimSpritePal_FangAttack, ANIM_TAG_FANG_ATTACK}, - {gBattleAnimSpritePal_PurpleHandOutline, ANIM_TAG_PURPLE_HAND_OUTLINE}, - {gBattleAnimSpritePal_Moon, ANIM_TAG_MOON}, - {gBattleAnimSpritePal_GreenSparkle, ANIM_TAG_GREEN_SPARKLE}, - {gBattleAnimSpritePal_Spiral, ANIM_TAG_SPIRAL}, - {gBattleAnimSpritePal_SnoreZ, ANIM_TAG_SNORE_Z}, - {gBattleAnimSpritePal_Explosion, ANIM_TAG_EXPLOSION}, - {gBattleAnimSpritePal_Nail, ANIM_TAG_NAIL}, - {gBattleAnimSpritePal_GhostlySpirit, ANIM_TAG_GHOSTLY_SPIRIT}, - {gBattleAnimSpritePal_WarmRock, ANIM_TAG_WARM_ROCK}, - {gBattleAnimSpritePal_BreakingEgg, ANIM_TAG_BREAKING_EGG}, - {gBattleAnimSpritePal_ThinRing, ANIM_TAG_THIN_RING}, - {gBattleAnimSpritePal_PunchImpact, ANIM_TAG_PUNCH_IMPACT}, - {gBattleAnimSpritePal_Bell, ANIM_TAG_BELL}, - {gBattleAnimSpritePal_MusicNotes2, ANIM_TAG_MUSIC_NOTES_2}, - {gBattleAnimSpritePal_SpeedDust, ANIM_TAG_SPEED_DUST}, - {gBattleAnimSpritePal_BlueLightWall, ANIM_TAG_TORN_METAL}, - {gBattleAnimSpritePal_ThoughtBubble, ANIM_TAG_THOUGHT_BUBBLE}, - {gBattleAnimSpritePal_MagentaHeart, ANIM_TAG_MAGENTA_HEART}, - {gBattleAnimSpritePal_ElectricOrbs, ANIM_TAG_ELECTRIC_ORBS}, - {gBattleAnimSpritePal_ElectricOrbs, ANIM_TAG_CIRCLE_OF_LIGHT}, - {gBattleAnimSpritePal_ElectricOrbs, ANIM_TAG_ELECTRICITY}, - {gBattleAnimSpritePal_Finger, ANIM_TAG_FINGER_2}, - {gBattleAnimSpritePal_MovementWaves, ANIM_TAG_MOVEMENT_WAVES}, - {gBattleAnimSpritePal_RedHeart, ANIM_TAG_RED_HEART}, - {gBattleAnimSpritePal_RedOrb, ANIM_TAG_RED_ORB}, - {gBattleAnimSpritePal_EyeSparkle, ANIM_TAG_EYE_SPARKLE}, - {gBattleAnimSpritePal_PinkHeart, ANIM_TAG_PINK_HEART}, - {gBattleAnimSpritePal_Angel, ANIM_TAG_ANGEL}, - {gBattleAnimSpritePal_Devil, ANIM_TAG_DEVIL}, - {gBattleAnimSpritePal_Swipe, ANIM_TAG_SWIPE}, - {gBattleAnimSpritePal_Roots, ANIM_TAG_ROOTS}, - {gBattleAnimSpritePal_ItemBag, ANIM_TAG_ITEM_BAG}, - {gBattleAnimSpritePal_JaggedMusicNote, ANIM_TAG_JAGGED_MUSIC_NOTE}, - {gBattleAnimSpritePal_Pokeball, ANIM_TAG_POKEBALL}, - {gBattleAnimSpritePal_Pokeball, ANIM_TAG_SPOTLIGHT}, - {gBattleAnimSpritePal_LetterZ, ANIM_TAG_LETTER_Z}, - {gBattleAnimSpritePal_RapidSpin, ANIM_TAG_RAPID_SPIN}, - {gBattleAnimSpritePal_TriAttackTriangle, ANIM_TAG_TRI_ATTACK_TRIANGLE}, - {gBattleAnimSpritePal_WispOrb, ANIM_TAG_WISP_ORB}, - {gBattleAnimSpritePal_WispOrb, ANIM_TAG_WISP_FIRE}, - {gBattleAnimSpritePal_GoldStars, ANIM_TAG_GOLD_STARS}, - {gBattleAnimSpritePal_EclipsingOrb, ANIM_TAG_ECLIPSING_ORB}, - {gBattleAnimSpritePal_GrayOrb, ANIM_TAG_GRAY_ORB}, - {gBattleAnimSpritePal_BlueOrb, ANIM_TAG_BLUE_ORB}, - {gBattleAnimSpritePal_RedOrb2, ANIM_TAG_RED_ORB_2}, - {gBattleAnimSpritePal_PinkPetal, ANIM_TAG_PINK_PETAL}, - {gBattleAnimSpritePal_PainSplit, ANIM_TAG_PAIN_SPLIT}, - {gBattleAnimSpritePal_Confetti, ANIM_TAG_CONFETTI}, - {gBattleAnimSpritePal_GreenStar, ANIM_TAG_GREEN_STAR}, - {gBattleAnimSpritePal_PinkCloud, ANIM_TAG_PINK_CLOUD}, - {gBattleAnimSpritePal_SweatDrop, ANIM_TAG_SWEAT_DROP}, - {gBattleAnimSpritePal_GuardRing, ANIM_TAG_GUARD_RING}, - {gBattleAnimSpritePal_PurpleScratch, ANIM_TAG_PURPLE_SCRATCH}, - {gBattleAnimSpritePal_PurpleScratch, ANIM_TAG_PURPLE_SWIPE}, - {gBattleAnimSpritePal_Finger, ANIM_TAG_TAG_HAND}, - {gBattleAnimSpritePal_SmallRedEye, ANIM_TAG_SMALL_RED_EYE}, - {gBattleAnimSpritePal_HollowOrb, ANIM_TAG_HOLLOW_ORB}, - {gBattleAnimSpritePal_HollowOrb, ANIM_TAG_X_SIGN}, - {gBattleAnimSpritePal_BluegreenOrb, ANIM_TAG_BLUEGREEN_ORB}, - {gBattleAnimSpritePal_PawPrint, ANIM_TAG_PAW_PRINT}, - {gBattleAnimSpritePal_PurpleFlame, ANIM_TAG_PURPLE_FLAME}, - {gBattleAnimSpritePal_RedBall, ANIM_TAG_RED_BALL}, - {gBattleAnimSpritePal_SmellingsaltEffect, ANIM_TAG_SMELLINGSALT_EFFECT}, - {gBattleAnimSpritePal_Meteor, ANIM_TAG_METEOR}, - {gBattleAnimSpritePal_FlatRock, ANIM_TAG_FLAT_ROCK}, - {gBattleAnimSpritePal_MagnifyingGlass, ANIM_TAG_MAGNIFYING_GLASS}, - {gBattleAnimSpritePal_BrownOrb, ANIM_TAG_BROWN_ORB}, - {gBattleAnimSpritePal_MetalSoundWaves, ANIM_TAG_METAL_SOUND_WAVES}, - {gBattleAnimSpritePal_FlyingDirt, ANIM_TAG_FLYING_DIRT}, - {gBattleAnimSpritePal_IcicleSpear, ANIM_TAG_ICICLE_SPEAR}, - {gBattleAnimSpritePal_Hail, ANIM_TAG_HAIL}, - {gBattleAnimSpritePal_GlowyRedOrb, ANIM_TAG_GLOWY_RED_ORB}, - {gBattleAnimSpritePal_GlowyGreenOrb, ANIM_TAG_GLOWY_GREEN_ORB}, - {gBattleAnimSpritePal_GreenSpike, ANIM_TAG_GREEN_SPIKE}, - {gBattleAnimSpritePal_WhiteCircleOfLight, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT}, - {gBattleAnimSpritePal_GlowyBlueOrb, ANIM_TAG_GLOWY_BLUE_ORB}, - {gBattleAnimSpritePal_Pokeblock, ANIM_TAG_POKEBLOCK}, - {gBattleAnimSpritePal_WhiteFeather, ANIM_TAG_WHITE_FEATHER}, - {gBattleAnimSpritePal_Sparkle6, ANIM_TAG_SPARKLE_6}, - {gBattleAnimSpritePal_Splash, ANIM_TAG_SPLASH}, - {gBattleAnimSpritePal_Splash, ANIM_TAG_SWEAT_BEAD}, - {gBattleAnimSpritePal_Gem1, ANIM_TAG_GEM_1}, - {gBattleAnimSpritePal_Gem1, ANIM_TAG_GEM_2}, - {gBattleAnimSpritePal_Gem1, ANIM_TAG_GEM_3}, - {gBattleAnimSpritePal_SlamHit2, ANIM_TAG_SLAM_HIT_2}, - {gBattleAnimSpritePal_Recycle, ANIM_TAG_RECYCLE}, - {gBattleAnimSpritePal_RedParticles, ANIM_TAG_RED_PARTICLES}, - {gBattleAnimSpritePal_Protect, ANIM_TAG_PROTECT}, - {gBattleAnimSpritePal_DirtMound, ANIM_TAG_DIRT_MOUND}, - {gBattleAnimSpritePal_Shock3, ANIM_TAG_SHOCK_3}, - {gBattleAnimSpritePal_WeatherBall, ANIM_TAG_WEATHER_BALL}, - {gBattleAnimSpritePal_Bird, ANIM_TAG_BIRD}, - {gBattleAnimSpritePal_CrossImpact, ANIM_TAG_CROSS_IMPACT}, - {gBattleAnimSpritePal_Slash2, ANIM_TAG_SLASH_2}, - {gBattleAnimSpritePal_WhipHit, ANIM_TAG_WHIP_HIT}, - {gBattleAnimSpritePal_BlueRing2, ANIM_TAG_BLUE_RING_2}, -}; - -const struct BattleAnimBackground gBattleAnimBackgroundTable[] = -{ - [BG_DARK_] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark}, - [BG_DARK] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark}, - [BG_GHOST] = {gBattleAnimBgImage_Ghost, gBattleAnimBgPalette_Ghost, gBattleAnimBgTilemap_Ghost}, - [BG_PSYCHIC] = {gBattleAnimBgImage_Psychic, gBattleAnimBgPalette_Psychic, gBattleAnimBgTilemap_Psychic}, - [BG_IMPACT_OPPONENT] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactOpponent}, - [BG_IMPACT_PLAYER] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactPlayer}, - [BG_IMPACT_CONTESTS] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactContests}, - [BG_DRILL] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Drill, gBattleAnimBgTilemap_Drill}, - [BG_DRILL_CONTESTS] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Drill, gBattleAnimBgTilemap_DrillContests}, - [BG_HIGHSPEED_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Highspeed, gBattleAnimBgTilemap_HighspeedOpponent}, - [BG_HIGHSPEED_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Highspeed, gBattleAnimBgTilemap_HighspeedPlayer}, - [BG_THUNDER] = {gBattleAnimBgImage_Thunder, gBattleAnimBgPalette_Thunder, gBattleAnimBgTilemap_Thunder}, - [BG_GUILLOTINE_OPPONENT] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotineOpponent}, - [BG_GUILLOTINE_PLAYER] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotinePlayer}, - [BG_GUILLOTINE_CONTESTS] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotineContests}, - [BG_ICE] = {gBattleAnimBgImage_Ice, gBattleAnimBgPalette_Ice, gBattleAnimBgTilemap_Ice}, - [BG_COSMIC] = {gBattleAnimBgImage_Cosmic, gBattleAnimBgPalette_Cosmic, gBattleAnimBgTilemap_Cosmic}, - [BG_IN_AIR] = {gBattleAnimBgImage_InAir, gBattleAnimBgPalette_InAir, gBattleAnimBgTilemap_InAir}, - [BG_SKY] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Sky, gBattleAnimBgTilemap_Drill}, - [BG_SKY_CONTESTS] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Sky, gBattleAnimBgTilemap_DrillContests}, - [BG_AURORA] = {gBattleAnimBgImage_Aurora, gBattleAnimBgPalette_Aurora, gBattleAnimBgTilemap_Aurora}, - [BG_FISSURE] = {gBattleAnimBgImage_Fissure, gBattleAnimBgPalette_Fissure, gBattleAnimBgTilemap_Fissure}, - [BG_BUG_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Bug, gBattleAnimBgTilemap_HighspeedOpponent}, - [BG_BUG_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Bug, gBattleAnimBgTilemap_HighspeedPlayer}, - [BG_SOLARBEAM_OPPONENT] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Solarbeam, gBattleAnimBgTilemap_ImpactOpponent}, - [BG_SOLARBEAM_PLAYER] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Solarbeam, gBattleAnimBgTilemap_ImpactPlayer}, - [BG_SOLARBEAM_CONTESTS] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Solarbeam, gBattleAnimBgTilemap_ImpactContests}, -}; +#include "data/battle_anim.h" static void (* const sScriptCmdTable[])(void) = { - ScriptCmd_loadspritegfx, - ScriptCmd_unloadspritegfx, - ScriptCmd_createsprite, - ScriptCmd_createvisualtask, - ScriptCmd_delay, - ScriptCmd_waitforvisualfinish, - ScriptCmd_hang1, - ScriptCmd_hang2, - ScriptCmd_end, - ScriptCmd_playse, - ScriptCmd_monbg, - ScriptCmd_clearmonbg, - ScriptCmd_setalpha, - ScriptCmd_blendoff, - ScriptCmd_call, - ScriptCmd_return, - ScriptCmd_setarg, - ScriptCmd_choosetwoturnanim, - ScriptCmd_jumpifmoveturn, - ScriptCmd_goto, - ScriptCmd_fadetobg, - ScriptCmd_restorebg, - ScriptCmd_waitbgfadeout, - ScriptCmd_waitbgfadein, - ScriptCmd_changebg, - ScriptCmd_playsewithpan, - ScriptCmd_setpan, - ScriptCmd_panse_1B, - ScriptCmd_loopsewithpan, - ScriptCmd_waitplaysewithpan, - ScriptCmd_setbldcnt, - ScriptCmd_createsoundtask, - ScriptCmd_waitsound, - ScriptCmd_jumpargeq, - ScriptCmd_monbg_22, - ScriptCmd_clearmonbg_23, - ScriptCmd_jumpifcontest, - ScriptCmd_fadetobgfromset, - ScriptCmd_panse_26, - ScriptCmd_panse_27, - ScriptCmd_monbgprio_28, - ScriptCmd_monbgprio_29, - ScriptCmd_monbgprio_2A, - ScriptCmd_invisible, - ScriptCmd_visible, - ScriptCmd_doublebattle_2D, - ScriptCmd_doublebattle_2E, - ScriptCmd_stopsound + Cmd_loadspritegfx, // 0x00 + Cmd_unloadspritegfx, // 0x01 + Cmd_createsprite, // 0x02 + Cmd_createvisualtask, // 0x03 + Cmd_delay, // 0x04 + Cmd_waitforvisualfinish, // 0x05 + Cmd_nop, // 0x06 + Cmd_nop2, // 0x07 + Cmd_end, // 0x08 + Cmd_playse, // 0x09 + Cmd_monbg, // 0x0A + Cmd_clearmonbg, // 0x0B + Cmd_setalpha, // 0x0C + Cmd_blendoff, // 0x0D + Cmd_call, // 0x0E + Cmd_return, // 0x0F + Cmd_setarg, // 0x10 + Cmd_choosetwoturnanim, // 0x11 + Cmd_jumpifmoveturn, // 0x12 + Cmd_goto, // 0x13 + Cmd_fadetobg, // 0x14 + Cmd_restorebg, // 0x15 + Cmd_waitbgfadeout, // 0x16 + Cmd_waitbgfadein, // 0x17 + Cmd_changebg, // 0x18 + Cmd_playsewithpan, // 0x19 + Cmd_setpan, // 0x1A + Cmd_panse, // 0x1B + Cmd_loopsewithpan, // 0x1C + Cmd_waitplaysewithpan, // 0x1D + Cmd_setbldcnt, // 0x1E + Cmd_createsoundtask, // 0x1F + Cmd_waitsound, // 0x20 + Cmd_jumpargeq, // 0x21 + Cmd_monbg_static, // 0x22 + Cmd_clearmonbg_static, // 0x23 + Cmd_jumpifcontest, // 0x24 + Cmd_fadetobgfromset, // 0x25 + Cmd_panse_adjustnone, // 0x26 + Cmd_panse_adjustall, // 0x27 + Cmd_splitbgprio, // 0x28 + Cmd_splitbgprio_all, // 0x29 + Cmd_splitbgprio_foes, // 0x2A + Cmd_invisible, // 0x2B + Cmd_visible, // 0x2C + Cmd_teamattack_moveback, // 0x2D + Cmd_teamattack_movefwd, // 0x2E + Cmd_stopsound, // 0x2F }; -// code void ClearBattleAnimationVars(void) { s32 i; - gAnimFramesToWait = 0; + sAnimFramesToWait = 0; gAnimScriptActive = FALSE; gAnimVisualTaskCount = 0; gAnimSoundTaskCount = 0; @@ -1818,7 +193,7 @@ void ClearBattleAnimationVars(void) sMonAnimTaskIdArray[1] = TASK_NONE; gAnimMoveTurn = 0; sAnimBackgroundFadeState = 0; - sAnimMoveIndex = 0; + gAnimMoveIndex = 0; gBattleAnimAttacker = 0; gBattleAnimTarget = 0; gAnimCustomPanning = 0; @@ -1828,17 +203,48 @@ void DoMoveAnim(u16 move) { gBattleAnimAttacker = gBattlerAttacker; gBattleAnimTarget = gBattlerTarget; + // Make sure the anim target of moves hitting everyone is at the opposite side. + if (GetBattlerMoveTargetType(gBattlerAttacker, move) & MOVE_TARGET_FOES_AND_ALLY && IsDoubleBattle()) + { + while (GET_BATTLER_SIDE(gBattleAnimAttacker) == GET_BATTLER_SIDE(gBattleAnimTarget)) + { + if (++gBattleAnimTarget >= MAX_BATTLERS_COUNT) + gBattleAnimTarget = 0; + } + } LaunchBattleAnimation(gBattleAnims_Moves, move, TRUE); } void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim) { s32 i; + bool32 hideHpBoxes = (tableId == MOVE_TRANSFORM) ? FALSE : TRUE; + + if (!isMoveAnim) + { + switch (tableId) + { + case B_ANIM_TURN_TRAP: + case B_ANIM_LEECH_SEED_DRAIN: + case B_ANIM_MON_HIT: + case B_ANIM_SNATCH_MOVE: + case B_ANIM_FUTURE_SIGHT_HIT: + case B_ANIM_DOOM_DESIRE_HIT: + case B_ANIM_WISH_HEAL: + case B_ANIM_MEGA_EVOLUTION: + case B_ANIM_GULP_MISSILE: + hideHpBoxes = TRUE; + break; + default: + hideHpBoxes = FALSE; + break; + } + } if (!IsContest()) { - sub_80A8278(); - UpdateOamPriorityInAllHealthboxes(0); + InitPrioritiesForVisibleBattlers(); + UpdateOamPriorityInAllHealthboxes(0, hideHpBoxes); for (i = 0; i < MAX_BATTLERS_COUNT; i++) { if (GetBattlerSide(i) != B_SIDE_PLAYER) @@ -1854,9 +260,9 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo } if (!isMoveAnim) - sAnimMoveIndex = 0; + gAnimMoveIndex = 0; else - sAnimMoveIndex = tableId; + gAnimMoveIndex = tableId; for (i = 0; i < ANIM_ARGS_COUNT; i++) gBattleAnimArgs[i] = 0; @@ -1865,7 +271,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo sMonAnimTaskIdArray[1] = TASK_NONE; sBattleAnimScriptPtr = animsTable[tableId]; gAnimScriptActive = TRUE; - gAnimFramesToWait = 0; + sAnimFramesToWait = 0; gAnimScriptCallback = RunAnimScriptCommand; for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) @@ -1877,7 +283,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo { if (tableId == gMovesWithQuietBGM[i]) { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 128); break; } } @@ -1938,14 +344,14 @@ static void ClearSpriteIndex(u16 index) static void WaitAnimFrameCount(void) { - if (gAnimFramesToWait <= 0) + if (sAnimFramesToWait <= 0) { gAnimScriptCallback = RunAnimScriptCommand; - gAnimFramesToWait = 0; + sAnimFramesToWait = 0; } else { - gAnimFramesToWait--; + sAnimFramesToWait--; } } @@ -1954,10 +360,10 @@ static void RunAnimScriptCommand(void) do { sScriptCmdTable[sBattleAnimScriptPtr[0]](); - } while (gAnimFramesToWait == 0 && gAnimScriptActive); + } while (sAnimFramesToWait == 0 && gAnimScriptActive); } -static void ScriptCmd_loadspritegfx(void) +static void Cmd_loadspritegfx(void) { u16 index; @@ -1967,11 +373,11 @@ static void ScriptCmd_loadspritegfx(void) LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]); sBattleAnimScriptPtr += 2; AddSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); - gAnimFramesToWait = 1; + sAnimFramesToWait = 1; gAnimScriptCallback = WaitAnimFrameCount; } -static void ScriptCmd_unloadspritegfx(void) +static void Cmd_unloadspritegfx(void) { u16 index; @@ -1983,7 +389,7 @@ static void ScriptCmd_unloadspritegfx(void) ClearSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); } -static void ScriptCmd_createsprite(void) +static void Cmd_createsprite(void) { s32 i; const struct SpriteTemplate *template; @@ -2006,11 +412,11 @@ static void ScriptCmd_createsprite(void) sBattleAnimScriptPtr += 2; } - if (argVar & 0x80) + if (argVar & ANIMSPRITE_IS_TARGET) { - argVar ^= 0x80; - if (argVar >= 0x40) - argVar -= 0x40; + argVar ^= ANIMSPRITE_IS_TARGET; + if (argVar >= 64) + argVar -= 64; else argVar *= -1; @@ -2018,8 +424,8 @@ static void ScriptCmd_createsprite(void) } else { - if (argVar >= 0x40) - argVar -= 0x40; + if (argVar >= 64) + argVar -= 64; else argVar *= -1; @@ -2037,7 +443,7 @@ static void ScriptCmd_createsprite(void) gAnimVisualTaskCount++; } -static void ScriptCmd_createvisualtask(void) +static void Cmd_createvisualtask(void) { TaskFunc taskFunc; u8 taskPriority; @@ -2067,39 +473,39 @@ static void ScriptCmd_createvisualtask(void) gAnimVisualTaskCount++; } -static void ScriptCmd_delay(void) +static void Cmd_delay(void) { sBattleAnimScriptPtr++; - gAnimFramesToWait = sBattleAnimScriptPtr[0]; - if (gAnimFramesToWait == 0) - gAnimFramesToWait = -1; + sAnimFramesToWait = sBattleAnimScriptPtr[0]; + if (sAnimFramesToWait == 0) + sAnimFramesToWait = -1; sBattleAnimScriptPtr++; gAnimScriptCallback = WaitAnimFrameCount; } // Wait for visual tasks to finish. -static void ScriptCmd_waitforvisualfinish(void) +static void Cmd_waitforvisualfinish(void) { if (gAnimVisualTaskCount == 0) { sBattleAnimScriptPtr++; - gAnimFramesToWait = 0; + sAnimFramesToWait = 0; } else { - gAnimFramesToWait = 1; + sAnimFramesToWait = 1; } } -static void ScriptCmd_hang1(void) +static void Cmd_nop(void) { } -static void ScriptCmd_hang2(void) +static void Cmd_nop2(void) { } -static void ScriptCmd_end(void) +static void Cmd_end(void) { s32 i; bool32 continuousAnim = FALSE; @@ -2109,7 +515,7 @@ static void ScriptCmd_end(void) || sMonAnimTaskIdArray[0] != TASK_NONE || sMonAnimTaskIdArray[1] != TASK_NONE) { sSoundAnimFramesToWait = 0; - gAnimFramesToWait = 1; + sAnimFramesToWait = 1; return; } @@ -2118,7 +524,7 @@ static void ScriptCmd_end(void) { if (++sSoundAnimFramesToWait <= 90) // Wait 90 frames, then halt the sound effect. { - gAnimFramesToWait = 1; + sAnimFramesToWait = 1; return; } else @@ -2143,69 +549,78 @@ static void ScriptCmd_end(void) if (!continuousAnim) // May have been used for debug? { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 256); if (!IsContest()) { - sub_80A8278(); - UpdateOamPriorityInAllHealthboxes(1); + InitPrioritiesForVisibleBattlers(); + UpdateOamPriorityInAllHealthboxes(1, TRUE); } gAnimScriptActive = FALSE; } } -static void ScriptCmd_playse(void) +static void Cmd_playse(void) { sBattleAnimScriptPtr++; PlaySE(T1_READ_16(sBattleAnimScriptPtr)); sBattleAnimScriptPtr += 2; } -#define t1_MONBG_BATTLER 0 -#define t1_MON_IN_BG2 1 -#define t1_CREATE_ANOTHER_TASK 2 -#define t1_IS_SECONDMON_BG 3 +// These two tasks share context and similar task data +// To differentiate them the task data for Task_UpdateMonBg is prefixed t2 -#define t2_BATTLER_SPRITE_ID 0 -#define t2_MON_IN_BG2 5 -#define t2_MONBG_BATTLER 6 +// Task data for Task_InitUpdateMonBg +#define tBattlerId data[0] +#define tInBg2 data[1] +#define tActive data[2] +#define tIsPartner data[3] -static void sub_80A40F4(u8 taskId) +// Task data for Task_UpdateMonBg +#define t2_SpriteId data[0] +#define t2_SpriteX data[1] +#define t2_SpriteY data[2] +#define t2_BgX data[3] +#define t2_BgY data[4] +#define t2_InBg2 data[5] +#define t2_BattlerId data[6] + +static void Task_InitUpdateMonBg(u8 taskId) { - u8 newTaskId; + u8 updateTaskId; - s16 *selfData = gTasks[taskId].data; - u8 battlerSpriteId = gBattlerSpriteIds[selfData[t1_MONBG_BATTLER]]; + s16 *data = gTasks[taskId].data; + u8 battlerSpriteId = gBattlerSpriteIds[tBattlerId]; gSprites[battlerSpriteId].invisible = TRUE; - if (!selfData[t1_CREATE_ANOTHER_TASK]) + if (!tActive) { DestroyAnimVisualTask(taskId); return; } - newTaskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); - gTasks[newTaskId].data[t2_BATTLER_SPRITE_ID] = battlerSpriteId; - gTasks[newTaskId].data[1] = gSprites[battlerSpriteId].x + gSprites[battlerSpriteId].x2; - gTasks[newTaskId].data[2] = gSprites[battlerSpriteId].y + gSprites[battlerSpriteId].y2; + updateTaskId = CreateTask(Task_UpdateMonBg, 10); + gTasks[updateTaskId].t2_SpriteId = battlerSpriteId; + gTasks[updateTaskId].t2_SpriteX = gSprites[battlerSpriteId].x + gSprites[battlerSpriteId].x2; + gTasks[updateTaskId].t2_SpriteY = gSprites[battlerSpriteId].y + gSprites[battlerSpriteId].y2; - if (!selfData[t1_MON_IN_BG2]) + if (!tInBg2) { - gTasks[newTaskId].data[3] = gBattle_BG1_X; - gTasks[newTaskId].data[4] = gBattle_BG1_Y; + gTasks[updateTaskId].t2_BgX = gBattle_BG1_X; + gTasks[updateTaskId].t2_BgY = gBattle_BG1_Y; } else { - gTasks[newTaskId].data[3] = gBattle_BG2_X; - gTasks[newTaskId].data[4] = gBattle_BG2_Y; + gTasks[updateTaskId].t2_BgX = gBattle_BG2_X; + gTasks[updateTaskId].t2_BgY = gBattle_BG2_Y; } - gTasks[newTaskId].data[t2_MON_IN_BG2] = selfData[t1_MON_IN_BG2]; - gTasks[newTaskId].data[t2_MONBG_BATTLER] = selfData[t1_MONBG_BATTLER]; - sMonAnimTaskIdArray[selfData[t1_IS_SECONDMON_BG]] = newTaskId; + gTasks[updateTaskId].t2_InBg2 = tInBg2; + gTasks[updateTaskId].t2_BattlerId = tBattlerId; + sMonAnimTaskIdArray[tIsPartner] = updateTaskId; DestroyAnimVisualTask(taskId); } -static void ScriptCmd_monbg(void) +static void Cmd_monbg(void) { bool8 toBG_2; u8 taskId; @@ -2220,6 +635,7 @@ static void ScriptCmd_monbg(void) else battlerId = gBattleAnimAttacker; + // Move designated battler to background if (IsBattlerSpriteVisible(battlerId)) { u8 position = GetBattlerPosition(battlerId); @@ -2229,15 +645,16 @@ static void ScriptCmd_monbg(void) toBG_2 = TRUE; MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE); - taskId = CreateTask(sub_80A40F4, 10); + taskId = CreateTask(Task_InitUpdateMonBg, 10); gAnimVisualTaskCount++; - gTasks[taskId].data[t1_MONBG_BATTLER] = battlerId; - gTasks[taskId].data[t1_MON_IN_BG2] = toBG_2; - gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE; - gTasks[taskId].data[t1_IS_SECONDMON_BG] = 0; + gTasks[taskId].tBattlerId = battlerId; + gTasks[taskId].tInBg2 = toBG_2; + gTasks[taskId].tActive = TRUE; + gTasks[taskId].tIsPartner = FALSE; } + // Move battler's partner to background battlerId ^= BIT_FLANK; if (IsBattlerSpriteVisible(battlerId)) { @@ -2248,19 +665,31 @@ static void ScriptCmd_monbg(void) toBG_2 = TRUE; MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE); - taskId = CreateTask(sub_80A40F4, 10); + taskId = CreateTask(Task_InitUpdateMonBg, 10); gAnimVisualTaskCount++; - gTasks[taskId].data[0] = battlerId; - gTasks[taskId].data[1] = toBG_2; - gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE; - gTasks[taskId].data[t1_IS_SECONDMON_BG] = 1; + gTasks[taskId].tBattlerId = battlerId; + gTasks[taskId].tInBg2 = toBG_2; + gTasks[taskId].tActive = TRUE; + gTasks[taskId].tIsPartner = TRUE; } sBattleAnimScriptPtr++; - gAnimFramesToWait = 1; + sAnimFramesToWait = 1; gAnimScriptCallback = WaitAnimFrameCount; } +u8 GetAnimBattlerId(u8 wantedBattler) +{ + if (wantedBattler == ANIM_ATTACKER) + return gBattleAnimAttacker; + else if (wantedBattler == ANIM_TARGET) + return gBattleAnimTarget; + else if (wantedBattler == ANIM_ATK_PARTNER) + return BATTLE_PARTNER(gBattleAnimAttacker); + else + return BATTLE_PARTNER(gBattleAnimTarget); +} + bool8 IsBattlerSpriteVisible(u8 battlerId) { if (IsContest()) @@ -2291,13 +720,13 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible) if (IsContest() == TRUE) { - RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(16)), 0x2000, 1); - RequestDma3Fill(0xFF, (void*)(BG_SCREEN_ADDR(30)), 0x1000, 0); + RequestDma3Fill(0, (void *)(BG_SCREEN_ADDR(16)), 0x2000, 1); + RequestDma3Fill(0xFF, (void *)(BG_SCREEN_ADDR(30)), 0x1000, 0); } else { - RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(8)), 0x2000, 1); - RequestDma3Fill(0xFF, (void*)(BG_SCREEN_ADDR(28)), 0x1000, 0); + RequestDma3Fill(0, (void *)(BG_SCREEN_ADDR(8)), 0x2000, 1); + RequestDma3Fill(0xFF, (void *)(BG_SCREEN_ADDR(28)), 0x1000, 0); } GetBattleAnimBg1Data(&animBg); @@ -2322,22 +751,22 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible) SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], animBg.paletteId * 16, 0x20); - CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + animBg.paletteId * 32), 0x20); + CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void *)(BG_PLTT + animBg.paletteId * 32), 0x20); if (IsContest()) battlerPosition = 0; else battlerPosition = GetBattlerPosition(battlerId); - sub_8118FBC(1, 0, 0, battlerPosition, animBg.paletteId, animBg.bgTiles, animBg.bgTilemap, animBg.tilesOffset); + DrawBattlerOnBg(1, 0, 0, battlerPosition, animBg.paletteId, animBg.bgTiles, animBg.bgTilemap, animBg.tilesOffset); if (IsContest()) - sub_80A46A0(); + FlipBattlerBgTiles(); } else { - RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(12)), 0x2000, 1); - RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(30)), 0x1000, 1); + RequestDma3Fill(0, (void *)(BG_SCREEN_ADDR(12)), 0x2000, 1); + RequestDma3Fill(0, (void *)(BG_SCREEN_ADDR(30)), 0x1000, 1); GetBattleAnimBgData(&animBg, 2); CpuFill16(0, animBg.bgTiles + 0x1000, 0x1000); CpuFill16(0, animBg.bgTilemap + 0x400, 0x800); @@ -2357,13 +786,13 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible) SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], 0x90, 0x20); - CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + 0x120), 0x20); + CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void *)(BG_PLTT + 0x120), 0x20); - sub_8118FBC(2, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles + 0x1000, animBg.bgTilemap + 0x400, animBg.tilesOffset); + DrawBattlerOnBg(2, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles + 0x1000, animBg.bgTilemap + 0x400, animBg.tilesOffset); } } -static void sub_80A46A0(void) +static void FlipBattlerBgTiles(void) { s32 i, j; struct BattleAnimBgData animBg; @@ -2377,10 +806,8 @@ static void sub_80A46A0(void) { for (j = 0; j < 4; j++) { - u16 temp = ptr[j + i * 32]; - - ptr[j + i * 32] = ptr[7 - j + i * 32]; - ptr[7 - j + i * 32] = temp; + u16 temp; + SWAP(ptr[j + i * 32], ptr[7 - j + i * 32], temp); } } for (i = 0; i < 8; i++) @@ -2391,20 +818,20 @@ static void sub_80A46A0(void) } } -void sub_80A4720(u16 a, u16 *b, u32 c, u8 d) +void RelocateBattleBgPal(u16 paletteNum, u16 *dest, u32 offset, bool8 largeScreen) { s32 i, j; - s32 var; + s32 size; - if (d == 0) - var = 32; + if (!largeScreen) + size = 32; else - var = 64; - a <<= 12; - for (i = 0; i < var; i++) + size = 64; + paletteNum <<= 12; + for (i = 0; i < size; i++) { for (j = 0; j < 32; j++) - b[j + i * 32] = ((b[j + i * 32] & 0xFFF) | a) + c; + dest[j + i * 32] = ((dest[j + i * 32] & 0xFFF) | paletteNum) + offset; } } @@ -2427,43 +854,58 @@ void ResetBattleAnimBg(bool8 toBG2) } } -static void task_pA_ma0A_obj_to_bg_pal(u8 taskId) +static void Task_UpdateMonBg(u8 taskId) { - u8 spriteId, palIndex; + u8 spriteId, battlerId; s16 x, y; struct BattleAnimBgData animBg; - spriteId = gTasks[taskId].data[0]; - palIndex = gTasks[taskId].data[6]; + spriteId = gTasks[taskId].t2_SpriteId; + battlerId = gTasks[taskId].t2_BattlerId; GetBattleAnimBg1Data(&animBg); - x = gTasks[taskId].data[1] - (gSprites[spriteId].x + gSprites[spriteId].x2); - y = gTasks[taskId].data[2] - (gSprites[spriteId].y + gSprites[spriteId].y2); + x = gTasks[taskId].t2_SpriteX - (gSprites[spriteId].x + gSprites[spriteId].x2); + y = gTasks[taskId].t2_SpriteY - (gSprites[spriteId].y + gSprites[spriteId].y2); - if (gTasks[taskId].data[5] == 0) + if (!gTasks[taskId].t2_InBg2) { u16 *src; u16 *dst; - gBattle_BG1_X = x + gTasks[taskId].data[3]; - gBattle_BG1_Y = y + gTasks[taskId].data[4]; - src = gPlttBufferFaded + 0x100 + palIndex * 16; - dst = gPlttBufferFaded + 0x100 + animBg.paletteId * 16 - 256; - CpuCopy32(src, dst, 0x20); + gBattle_BG1_X = x + gTasks[taskId].t2_BgX; + gBattle_BG1_Y = y + gTasks[taskId].t2_BgY; + + src = &gPlttBufferFaded[0x100 + battlerId * 16]; + dst = &gPlttBufferFaded[0x100 + animBg.paletteId * 16 - 256]; + CpuCopy32(src, dst, 32); } else { u16 *src; u16 *dst; - gBattle_BG2_X = x + gTasks[taskId].data[3]; - gBattle_BG2_Y = y + gTasks[taskId].data[4]; - src = gPlttBufferFaded + 0x100 + palIndex * 16; - dst = gPlttBufferFaded + 0x100 - 112; - CpuCopy32(src, dst, 0x20); + gBattle_BG2_X = x + gTasks[taskId].t2_BgX; + gBattle_BG2_Y = y + gTasks[taskId].t2_BgY; + + src = &gPlttBufferFaded[0x100 + battlerId * 16]; + dst = &gPlttBufferFaded[0x100 - 112]; + CpuCopy32(src, dst, 32); } } -static void ScriptCmd_clearmonbg(void) +#undef tBattlerId +#undef tInBg2 +#undef tActive +#undef tIsPartner + +#undef t2_SpriteId +#undef t2_SpriteX +#undef t2_SpriteY +#undef t2_BgX +#undef t2_BgY +#undef t2_InBg2 +#undef t2_BattlerId + +static void Cmd_clearmonbg(void) { u8 animBattlerId; u8 battlerId; @@ -2489,14 +931,14 @@ static void ScriptCmd_clearmonbg(void) else animBattlerId = 0; - taskId = CreateTask(sub_80A4980, 5); + taskId = CreateTask(Task_ClearMonBg, 5); gTasks[taskId].data[0] = animBattlerId; gTasks[taskId].data[2] = battlerId; sBattleAnimScriptPtr++; } -static void sub_80A4980(u8 taskId) +static void Task_ClearMonBg(u8 taskId) { gTasks[taskId].data[1]++; if (gTasks[taskId].data[1] != 1) @@ -2524,7 +966,8 @@ static void sub_80A4980(u8 taskId) } } -static void ScriptCmd_monbg_22(void) +// Equivalent to Cmd_monbg but never creates Task_InitUpdateMonBg / Task_UpdateMonBg +static void Cmd_monbg_static(void) { bool8 toBG_2; u8 battlerId; @@ -2570,7 +1013,7 @@ static void ScriptCmd_monbg_22(void) sBattleAnimScriptPtr++; } -static void ScriptCmd_clearmonbg_23(void) +static void Cmd_clearmonbg_static(void) { u8 animBattlerId; u8 battlerId; @@ -2596,14 +1039,14 @@ static void ScriptCmd_clearmonbg_23(void) else animBattlerId = 0; - taskId = CreateTask(sub_80A4BB0, 5); + taskId = CreateTask(Task_ClearMonBgStatic, 5); gTasks[taskId].data[0] = animBattlerId; gTasks[taskId].data[2] = battlerId; sBattleAnimScriptPtr++; } -static void sub_80A4BB0(u8 taskId) +static void Task_ClearMonBgStatic(u8 taskId) { gTasks[taskId].data[1]++; if (gTasks[taskId].data[1] != 1) @@ -2625,16 +1068,7 @@ static void sub_80A4BB0(u8 taskId) } } -#undef t1_MONBG_BATTLER -#undef t1_MON_IN_BG2 -#undef t1_CREATE_ANOTHER_TASK -#undef t1_IS_SECONDMON_BG - -#undef t2_BATTLER_SPRITE_ID -#undef t2_MON_IN_BG2 -#undef t2_MONBG_BATTLER - -static void ScriptCmd_setalpha(void) +static void Cmd_setalpha(void) { u16 half1, half2; @@ -2645,7 +1079,7 @@ static void ScriptCmd_setalpha(void) SetGpuReg(REG_OFFSET_BLDALPHA, half1 | half2); } -static void ScriptCmd_setbldcnt(void) +static void Cmd_setbldcnt(void) { u16 half1, half2; @@ -2655,27 +1089,31 @@ static void ScriptCmd_setbldcnt(void) SetGpuReg(REG_OFFSET_BLDCNT, half1 | half2); } -static void ScriptCmd_blendoff(void) +static void Cmd_blendoff(void) { sBattleAnimScriptPtr++; SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); } -static void ScriptCmd_call(void) +static void Cmd_call(void) { sBattleAnimScriptPtr++; sBattleAnimScriptRetAddr = sBattleAnimScriptPtr + 4; sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); } -static void ScriptCmd_return(void) +static void Cmd_return(void) { sBattleAnimScriptPtr = sBattleAnimScriptRetAddr; } -static void ScriptCmd_setarg(void) +static void Cmd_setarg(void) { + // Save original address to return to + // after the T1_READ_16, + 4. + // They could have equivalently just advanced + // sBattleAnimScriptPtr by 2 afterwards. const u8 *addr = sBattleAnimScriptPtr; u16 value; u8 argId; @@ -2688,7 +1126,7 @@ static void ScriptCmd_setarg(void) gBattleAnimArgs[argId] = value; } -static void ScriptCmd_choosetwoturnanim(void) +static void Cmd_choosetwoturnanim(void) { sBattleAnimScriptPtr++; if (gAnimMoveTurn & 1) @@ -2696,7 +1134,7 @@ static void ScriptCmd_choosetwoturnanim(void) sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); } -static void ScriptCmd_jumpifmoveturn(void) +static void Cmd_jumpifmoveturn(void) { u8 toCheck; sBattleAnimScriptPtr++; @@ -2709,7 +1147,7 @@ static void ScriptCmd_jumpifmoveturn(void) sBattleAnimScriptPtr += 4; } -static void ScriptCmd_goto(void) +static void Cmd_goto(void) { sBattleAnimScriptPtr++; sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); @@ -2728,7 +1166,7 @@ bool8 IsContest(void) #define tBackgroundId data[0] #define tState data[10] -static void ScriptCmd_fadetobg(void) +static void Cmd_fadetobg(void) { u8 backgroundId; u8 taskId; @@ -2741,7 +1179,7 @@ static void ScriptCmd_fadetobg(void) sAnimBackgroundFadeState = 1; } -static void ScriptCmd_fadetobgfromset(void) +static void Cmd_fadetobgfromset(void) { u8 bg1, bg2, bg3; u8 taskId; @@ -2800,7 +1238,7 @@ static void Task_FadeToBg(u8 taskId) } } -static void LoadMoveBg(u16 bgId) +void LoadMoveBg(u16 bgId) { if (IsContest()) { @@ -2809,17 +1247,17 @@ static void LoadMoveBg(u16 bgId) void *dmaDest; LZDecompressWram(tilemap, gDecompressionBuffer); - sub_80A4720(GetBattleBgPaletteNum(), (void*)(gDecompressionBuffer), 0x100, 0); + RelocateBattleBgPal(GetBattleBgPaletteNum(), (void *)gDecompressionBuffer, 0x100, FALSE); dmaSrc = gDecompressionBuffer; - dmaDest = (void *)(BG_SCREEN_ADDR(26)); + dmaDest = (void *)BG_SCREEN_ADDR(26); DmaCopy32(3, dmaSrc, dmaDest, 0x800); - LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_SCREEN_ADDR(4))); + LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)BG_SCREEN_ADDR(4)); LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, GetBattleBgPaletteNum() * 16, 32); } else { - LZDecompressVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)(BG_SCREEN_ADDR(26))); - LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)BG_SCREEN_ADDR(26)); + LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)BG_CHAR_ADDR(2)); LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, 32, 32); } } @@ -2828,11 +1266,15 @@ static void LoadDefaultBg(void) { if (IsContest()) LoadContestBgAfterMoveAnim(); + #if B_TERRAIN_BG_CHANGE == TRUE + else if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + DrawTerrainTypeBattleBackground(); + #endif else DrawMainBattleBackground(); } -static void ScriptCmd_restorebg(void) +static void Cmd_restorebg(void) { u8 taskId; @@ -2845,33 +1287,33 @@ static void ScriptCmd_restorebg(void) #undef tBackgroundId #undef tState -static void ScriptCmd_waitbgfadeout(void) +static void Cmd_waitbgfadeout(void) { if (sAnimBackgroundFadeState == 2) { sBattleAnimScriptPtr++; - gAnimFramesToWait = 0; + sAnimFramesToWait = 0; } else { - gAnimFramesToWait = 1; + sAnimFramesToWait = 1; } } -static void ScriptCmd_waitbgfadein(void) +static void Cmd_waitbgfadein(void) { if (sAnimBackgroundFadeState == 0) { sBattleAnimScriptPtr++; - gAnimFramesToWait = 0; + sAnimFramesToWait = 0; } else { - gAnimFramesToWait = 1; + sAnimFramesToWait = 1; } } -static void ScriptCmd_changebg(void) +static void Cmd_changebg(void) { sBattleAnimScriptPtr++; LoadMoveBg(sBattleAnimScriptPtr[0]); @@ -2963,7 +1405,7 @@ s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan) return ret; } -static void ScriptCmd_playsewithpan(void) +static void Cmd_playsewithpan(void) { u16 songId; s8 pan; @@ -2975,7 +1417,7 @@ static void ScriptCmd_playsewithpan(void) sBattleAnimScriptPtr += 3; } -static void ScriptCmd_setpan(void) +static void Cmd_setpan(void) { s8 pan; @@ -2992,7 +1434,7 @@ static void ScriptCmd_setpan(void) #define tCurrentPan data[4] #define tFrameCounter data[8] -static void ScriptCmd_panse_1B(void) +static void Cmd_panse(void) { u16 songNum; s8 currentPanArg, incrementPan, incrementPanArg, currentPan, targetPan; @@ -3002,13 +1444,14 @@ static void ScriptCmd_panse_1B(void) sBattleAnimScriptPtr++; songNum = T1_READ_16(sBattleAnimScriptPtr); currentPanArg = sBattleAnimScriptPtr[2]; - incrementPan = sBattleAnimScriptPtr[3]; + incrementPan = sBattleAnimScriptPtr[3]; // targetPan, var is re-used incrementPanArg = sBattleAnimScriptPtr[4]; framesToWait = sBattleAnimScriptPtr[5]; currentPan = BattleAnimAdjustPanning(currentPanArg); targetPan = BattleAnimAdjustPanning(incrementPan); incrementPan = CalculatePanIncrement(currentPan, targetPan, incrementPanArg); + taskId = CreateTask(Task_PanFromInitialToTarget, 1); gTasks[taskId].tInitialPan = currentPan; gTasks[taskId].tTargetPan = targetPan; @@ -3064,7 +1507,7 @@ void Task_PanFromInitialToTarget(u8 taskId) } } -static void ScriptCmd_panse_26(void) +static void Cmd_panse_adjustnone(void) { u16 songId; s8 currentPan, targetPan, incrementPan; @@ -3091,7 +1534,7 @@ static void ScriptCmd_panse_26(void) sBattleAnimScriptPtr += 6; } -static void ScriptCmd_panse_27(void) +static void Cmd_panse_adjustall(void) { u16 songId; s8 targetPanArg, incrementPanArg, currentPanArg, currentPan, targetPan, incrementPan; @@ -3135,7 +1578,7 @@ static void ScriptCmd_panse_27(void) #define tNumberOfPlays data[3] #define tFrameCounter data[8] -static void ScriptCmd_loopsewithpan(void) +static void Cmd_loopsewithpan(void) { u16 songId; s8 panningArg, panning; @@ -3192,7 +1635,7 @@ static void Task_LoopAndPlaySE(u8 taskId) #define tPanning data[1] #define tFramesToWait data[2] -static void ScriptCmd_waitplaysewithpan(void) +static void Cmd_waitplaysewithpan(void) { u16 songId; s8 panningArg, panning; @@ -3228,7 +1671,7 @@ static void Task_WaitAndPlaySE(u8 taskId) #undef tPanning #undef tFramesToWait -static void ScriptCmd_createsoundtask(void) +static void Cmd_createsoundtask(void) { TaskFunc func; u8 numArgs, taskId; @@ -3249,12 +1692,12 @@ static void ScriptCmd_createsoundtask(void) gAnimSoundTaskCount++; } -static void ScriptCmd_waitsound(void) +static void Cmd_waitsound(void) { if (gAnimSoundTaskCount != 0) { sSoundAnimFramesToWait = 0; - gAnimFramesToWait = 1; + sAnimFramesToWait = 1; } else if (IsSEPlaying()) { @@ -3266,18 +1709,18 @@ static void ScriptCmd_waitsound(void) } else { - gAnimFramesToWait = 1; + sAnimFramesToWait = 1; } } else { sSoundAnimFramesToWait = 0; sBattleAnimScriptPtr++; - gAnimFramesToWait = 0; + sAnimFramesToWait = 0; } } -static void ScriptCmd_jumpargeq(void) +static void Cmd_jumpargeq(void) { u8 argId; s16 valueToCheck; @@ -3292,7 +1735,7 @@ static void ScriptCmd_jumpargeq(void) sBattleAnimScriptPtr += 7; } -static void ScriptCmd_jumpifcontest(void) +static void Cmd_jumpifcontest(void) { sBattleAnimScriptPtr++; if (IsContest()) @@ -3301,7 +1744,7 @@ static void ScriptCmd_jumpifcontest(void) sBattleAnimScriptPtr += 4; } -static void ScriptCmd_monbgprio_28(void) +static void Cmd_splitbgprio(void) { u8 wantedBattler; u8 battlerId; @@ -3315,6 +1758,7 @@ static void ScriptCmd_monbgprio_28(void) else battlerId = gBattleAnimAttacker; + // Apply only if the given battler is the lead (on left from team's perspective) battlerPosition = GetBattlerPosition(battlerId); if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT)) { @@ -3323,7 +1767,7 @@ static void ScriptCmd_monbgprio_28(void) } } -static void ScriptCmd_monbgprio_29(void) +static void Cmd_splitbgprio_all(void) { sBattleAnimScriptPtr++; if (!IsContest()) @@ -3333,7 +1777,7 @@ static void ScriptCmd_monbgprio_29(void) } } -static void ScriptCmd_monbgprio_2A(void) +static void Cmd_splitbgprio_foes(void) { u8 wantedBattler; u8 battlerPosition; @@ -3341,6 +1785,8 @@ static void ScriptCmd_monbgprio_2A(void) wantedBattler = sBattleAnimScriptPtr[1]; sBattleAnimScriptPtr += 2; + + // Apply only if the attacking the opposing side if (GetBattlerSide(gBattleAnimAttacker) != GetBattlerSide(gBattleAnimTarget)) { if (wantedBattler != ANIM_ATTACKER) @@ -3348,6 +1794,7 @@ static void ScriptCmd_monbgprio_2A(void) else battlerId = gBattleAnimAttacker; + // Apply only if the given battler is the lead (on left from team's perspective) battlerPosition = GetBattlerPosition(battlerId); if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT)) { @@ -3357,7 +1804,7 @@ static void ScriptCmd_monbgprio_2A(void) } } -static void ScriptCmd_invisible(void) +static void Cmd_invisible(void) { u8 spriteId; @@ -3368,7 +1815,7 @@ static void ScriptCmd_invisible(void) sBattleAnimScriptPtr += 2; } -static void ScriptCmd_visible(void) +static void Cmd_visible(void) { u8 spriteId; @@ -3379,34 +1826,37 @@ static void ScriptCmd_visible(void) sBattleAnimScriptPtr += 2; } -static void ScriptCmd_doublebattle_2D(void) +// Below two commands are never used +static void Cmd_teamattack_moveback(void) { u8 wantedBattler; - u8 r4; + u8 priorityRank; u8 spriteId; wantedBattler = sBattleAnimScriptPtr[1]; sBattleAnimScriptPtr += 2; + + // Apply to double battles when attacking own side if (!IsContest() && IsDoubleBattle() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) { if (wantedBattler == ANIM_ATTACKER) { - r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); + priorityRank = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); } else { - r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); + priorityRank = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); } if (spriteId != SPRITE_NONE) { gSprites[spriteId].invisible = FALSE; - if (r4 == 2) + if (priorityRank == 2) gSprites[spriteId].oam.priority = 3; - if (r4 == 1) + if (priorityRank == 1) ResetBattleAnimBg(FALSE); else ResetBattleAnimBg(TRUE); @@ -3414,34 +1864,36 @@ static void ScriptCmd_doublebattle_2D(void) } } -static void ScriptCmd_doublebattle_2E(void) +static void Cmd_teamattack_movefwd(void) { u8 wantedBattler; - u8 r4; + u8 priorityRank; u8 spriteId; wantedBattler = sBattleAnimScriptPtr[1]; sBattleAnimScriptPtr += 2; + + // Apply to double battles when attacking own side if (!IsContest() && IsDoubleBattle() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) { if (wantedBattler == ANIM_ATTACKER) { - r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); + priorityRank = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); } else { - r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); + priorityRank = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); } - if (spriteId != SPRITE_NONE && r4 == 2) + if (spriteId != SPRITE_NONE && priorityRank == 2) gSprites[spriteId].oam.priority = 2; } } -static void ScriptCmd_stopsound(void) +static void Cmd_stopsound(void) { m4aMPlayStop(&gMPlayInfo_SE1); m4aMPlayStop(&gMPlayInfo_SE2); diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index 105cc611ea..894fd866e0 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -9,13 +9,9 @@ static void AnimLeechLifeNeedle(struct Sprite *); static void AnimTranslateWebThread(struct Sprite *); static void AnimTranslateWebThread_Step(struct Sprite *); static void AnimStringWrap(struct Sprite *); -static void AnimStringWrap_Step(struct Sprite *); -static void AnimSpiderWeb(struct Sprite *); static void AnimSpiderWeb_Step(struct Sprite *); static void AnimSpiderWeb_End(struct Sprite *); static void AnimTranslateStinger(struct Sprite *); -static void AnimMissileArc(struct Sprite *); -static void AnimMissileArc_Step(struct Sprite *); static void AnimTailGlowOrb(struct Sprite *); static const union AffineAnimCmd sAffineAnim_MegahornHorn_0[] = @@ -212,12 +208,12 @@ static void AnimMegahornHorn(struct Sprite *sprite) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; } - sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); @@ -236,12 +232,12 @@ static void AnimLeechLifeNeedle(struct Sprite *sprite) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; } - sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); @@ -266,12 +262,12 @@ static void AnimTranslateWebThread(struct Sprite *sprite) if (!gBattleAnimArgs[4]) { - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } else { - SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]); + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]); } InitAnimLinearTranslationWithSpeed(sprite); @@ -294,7 +290,7 @@ static void AnimTranslateWebThread_Step(struct Sprite *sprite) // Second stage of String Shot static void AnimStringWrap(struct Sprite *sprite) { - SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->x, &sprite->y); + SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y); if (GetBattlerSide(gBattleAnimAttacker)) sprite->x -= gBattleAnimArgs[0]; else @@ -307,7 +303,7 @@ static void AnimStringWrap(struct Sprite *sprite) sprite->callback = AnimStringWrap_Step; } -static void AnimStringWrap_Step(struct Sprite *sprite) +void AnimStringWrap_Step(struct Sprite *sprite) { if (++sprite->data[0] == 3) { @@ -321,11 +317,23 @@ static void AnimStringWrap_Step(struct Sprite *sprite) } } -static void AnimSpiderWeb(struct Sprite *sprite) +// arg0: x +// arg1: y +// arg2: targets both +void AnimSpiderWeb(struct Sprite *sprite) { SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + if (gBattleAnimArgs[2]) + SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y); + + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + sprite->x -= gBattleAnimArgs[0]; + else + sprite->x += gBattleAnimArgs[0]; + + sprite->y += gBattleAnimArgs[1]; sprite->data[0] = 16; sprite->callback = AnimSpiderWeb_Step; } @@ -392,10 +400,10 @@ static void AnimTranslateStinger(struct Sprite *sprite) } } - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); - lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; - lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; rot = ArcTan2Neg(lVarX - sprite->x, lVarY - sprite->y); rot += 0xC000; TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot); @@ -415,16 +423,16 @@ static void AnimTranslateStinger(struct Sprite *sprite) // arg 3: target y pixel offset // arg 4: duration // arg 5: wave amplitude -static void AnimMissileArc(struct Sprite *sprite) +void AnimMissileArc(struct Sprite *sprite) { - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); if (GetBattlerSide(gBattleAnimAttacker)) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[5]; InitAnimArcTranslation(sprite); @@ -432,7 +440,7 @@ static void AnimMissileArc(struct Sprite *sprite) sprite->invisible = TRUE; } -static void AnimMissileArc_Step(struct Sprite *sprite) +void AnimMissileArc_Step(struct Sprite *sprite) { sprite->invisible = FALSE; @@ -473,13 +481,13 @@ static void AnimTailGlowOrb(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 18; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 18; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 18; } StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c index fdde347699..becbc8fcf9 100644 --- a/src/battle_anim_dark.c +++ b/src/battle_anim_dark.c @@ -11,9 +11,6 @@ static void AnimUnusedBagSteal(struct Sprite *); static void AnimUnusedBagSteal_Step(struct Sprite *); -static void AnimBite(struct Sprite *); -static void AnimTearDrop(struct Sprite *); -static void AnimClawSlash(struct Sprite *); static void AnimTask_AttackerFadeToInvisible_Step(u8); static void AnimTask_AttackerFadeFromInvisible_Step(u8); static void AnimBite_Step1(struct Sprite *); @@ -23,6 +20,7 @@ static void AnimTask_MoveAttackerMementoShadow_Step(u8); static void AnimTask_MoveTargetMementoShadow_Step(u8); static void DoMementoShadowEffect(struct Task *); static void SetAllBattlersSpritePriority(u8); +static void AnimPunishment(struct Sprite *sprite); static void AnimTask_MetallicShine_Step(u8); // Unused @@ -133,7 +131,7 @@ static const union AffineAnimCmd sAffineAnim_TearDrop_1[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_TearDrop[] = +const union AffineAnimCmd *const gAffineAnims_TearDrop[] = { sAffineAnim_TearDrop_0, sAffineAnim_TearDrop_1, @@ -146,7 +144,7 @@ const struct SpriteTemplate gTearDropSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_TearDrop, + .affineAnims = gAffineAnims_TearDrop, .callback = AnimTearDrop, }; @@ -170,7 +168,7 @@ static const union AnimCmd sAnim_ClawSlash_1[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_ClawSlash[] = +const union AnimCmd *const gAnims_ClawSlash[] = { sAnim_ClawSlash_0, sAnim_ClawSlash_1, @@ -181,12 +179,96 @@ const struct SpriteTemplate gClawSlashSpriteTemplate = .tileTag = ANIM_TAG_CLAW_SLASH, .paletteTag = ANIM_TAG_CLAW_SLASH, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_ClawSlash, + .anims = gAnims_ClawSlash, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimClawSlash, }; +const union AffineAnimCmd gPunishmentImpactAffineAnimCmd_1[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gPunishmentImpactAffineAnimCmd_2[] = +{ + AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gPunishmentImpactAffineAnimCmd_3[] = +{ + AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gPunishmentImpactAffineAnimCmd_4[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gPunishmentImpactAffineAnim[] = +{ + gPunishmentImpactAffineAnimCmd_1, + gPunishmentImpactAffineAnimCmd_2, + gPunishmentImpactAffineAnimCmd_3, + gPunishmentImpactAffineAnimCmd_4, +}; + +const union AnimCmd gPunishmentAnimCmd[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gPunishmentAnim[] = +{ + gPunishmentAnimCmd, +}; + +const struct SpriteTemplate gPunishmentSpriteTemplate = +{ + .tileTag = ANIM_TAG_SCRATCH, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gPunishmentAnim, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos, +}; + +const struct SpriteTemplate gPunishmentImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gPunishmentImpactAffineAnim, + .callback = AnimPunishment, +}; + +static void AnimPunishment(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, 1); + else + InitSpritePosToAnimTarget(sprite, TRUE); + + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + void AnimTask_AttackerFadeToInvisible(u8 taskId) { int battler; @@ -312,7 +394,7 @@ static void AnimUnusedBagSteal_Step(struct Sprite *sprite) } // Move sprite inward for Bite/Crunch and Clamp -static void AnimBite(struct Sprite *sprite) +void AnimBite(struct Sprite *sprite) { sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; @@ -344,7 +426,7 @@ static void AnimBite_Step2(struct Sprite *sprite) } // Launches a tear drop away from the battler. Used by Fake Tears -static void AnimTearDrop(struct Sprite *sprite) +void AnimTearDrop(struct Sprite *sprite) { u8 battler; s8 xOffset; @@ -426,7 +508,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId) GetBattleAnimBg1Data(&animBg); task->data[10] = gBattle_BG1_Y; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); - FillPalette(0, animBg.paletteId * 16, 32); + FillPalette(RGB_BLACK, animBg.paletteId * 16, 32); scanlineParams.dmaDest = ®_BG1VOFS; var0 = WINOUT_WIN01_BG1; if (!IsContest()) @@ -436,7 +518,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId) { task->data[10] = gBattle_BG2_Y; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2); - FillPalette(0, 144, 32); + FillPalette(RGB_BLACK, 144, 32); scanlineParams.dmaDest = ®_BG2VOFS; var0 = WINOUT_WIN01_BG2; if (!IsContest()) @@ -566,12 +648,12 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId) { GetBattleAnimBg1Data(&animBg); task->data[10] = gBattle_BG1_Y; - FillPalette(0, animBg.paletteId * 16, 32); + FillPalette(RGB_BLACK, animBg.paletteId * 16, 32); } else { task->data[10] = gBattle_BG2_Y; - FillPalette(0, 9 * 16, 32); + FillPalette(RGB_BLACK, 9 * 16, 32); } SetAllBattlersSpritePriority(3); @@ -784,9 +866,9 @@ void AnimTask_InitMementoShadow(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_8114470(u8 taskId) +void AnimTask_MementoHandleBg(u8 taskId) { - u8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? 1 : 0; + bool8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? TRUE : FALSE; ResetBattleAnimBg(toBG2); if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) @@ -796,7 +878,7 @@ void sub_8114470(u8 taskId) } // Animates a deep slash from a claw. Used by Metal Claw, Dragon Claw, and Crush Claw -static void AnimClawSlash(struct Sprite *sprite) +void AnimClawSlash(struct Sprite *sprite) { sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; diff --git a/src/battle_anim_dragon.c b/src/battle_anim_dragon.c index 1bc0f569b9..54304732e6 100644 --- a/src/battle_anim_dragon.c +++ b/src/battle_anim_dragon.c @@ -6,16 +6,15 @@ #include "constants/rgb.h" static void AnimOutrageFlame(struct Sprite *); -static void AnimDragonRageFirePlume(struct Sprite *); -static void AnimDragonFireToTarget(struct Sprite *); -static void AnimDragonDanceOrb(struct Sprite *); static void AnimDragonDanceOrb_Step(struct Sprite *); -static void AnimOverheatFlame(struct Sprite *); static void AnimOverheatFlame_Step(struct Sprite *); static void AnimTask_DragonDanceWaver_Step(u8); static void UpdateDragonDanceScanlineEffect(struct Task *); +static void AnimDragonRushStep(struct Sprite *sprite); +static void AnimSpinningDracoMeteor(struct Sprite *sprite); +static void AnimSpinningDracoMeteorFinish(struct Sprite *sprite); -EWRAM_DATA static u16 gUnusedOverheatData[7] = {0}; +EWRAM_DATA static u16 sUnusedOverheatData[7] = {0}; static const union AnimCmd sAnim_OutrageOverheatFire_0[] = { @@ -59,7 +58,7 @@ static const union AnimCmd sAnim_DragonBreathFire_1[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAnims_DragonBreathFire[] = +const union AnimCmd *const gAnims_DragonBreathFire[] = { sAnim_DragonBreathFire_0, sAnim_DragonBreathFire_1, @@ -79,7 +78,7 @@ static const union AffineAnimCmd sAffineAnim_DragonBreathFire_1[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_DragonBreathFire[] = +const union AffineAnimCmd *const gAffineAnims_DragonBreathFire[] = { sAffineAnim_DragonBreathFire_0, sAffineAnim_DragonBreathFire_1, @@ -90,9 +89,9 @@ const struct SpriteTemplate gDragonBreathFireSpriteTemplate = .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, .oam = &gOamData_AffineDouble_ObjNormal_32x32, - .anims = sAnims_DragonBreathFire, + .anims = gAnims_DragonBreathFire, .images = NULL, - .affineAnims = sAffineAnims_DragonBreathFire, + .affineAnims = gAffineAnims_DragonBreathFire, .callback = AnimDragonFireToTarget, }; @@ -106,7 +105,7 @@ static const union AnimCmd sAnim_DragonRageFirePlume[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_DragonRageFirePlume[] = +const union AnimCmd *const gAnims_DragonRageFirePlume[] = { sAnim_DragonRageFirePlume, }; @@ -116,7 +115,7 @@ const struct SpriteTemplate gDragonRageFirePlumeSpriteTemplate = .tileTag = ANIM_TAG_FIRE_PLUME, .paletteTag = ANIM_TAG_FIRE_PLUME, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_DragonRageFirePlume, + .anims = gAnims_DragonRageFirePlume, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimDragonRageFirePlume, @@ -130,7 +129,7 @@ static const union AnimCmd sAnim_DragonRageFire[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAnims_DragonRageFire[] = +const union AnimCmd *const gAnims_DragonRageFire[] = { sAnim_DragonRageFire, sAnim_DragonRageFire, @@ -148,7 +147,7 @@ static const union AffineAnimCmd sAffineAnim_DragonRageFire_1[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_DragonRageFire[] = +const union AffineAnimCmd *const gAffineAnims_DragonRageFire[] = { sAffineAnim_DragonRageFire_0, sAffineAnim_DragonRageFire_1, @@ -159,9 +158,9 @@ const struct SpriteTemplate gDragonRageFireSpitSpriteTemplate = .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, .oam = &gOamData_AffineDouble_ObjNormal_32x32, - .anims = sAnims_DragonRageFire, + .anims = gAnims_DragonRageFire, .images = NULL, - .affineAnims = sAffineAnims_DragonRageFire, + .affineAnims = gAffineAnims_DragonRageFire, .callback = AnimDragonFireToTarget, }; @@ -187,10 +186,140 @@ const struct SpriteTemplate gOverheatFlameSpriteTemplate = .callback = AnimOverheatFlame, }; +const union AnimCmd gDragonRushAnimCmds[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gDragonRushAnimTable[] = +{ + gDragonRushAnimCmds, +}; + +const union AffineAnimCmd gDragonRushAffineanimCmds1[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -4, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gDragonRushAffineanimCmds2[] = +{ + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 4, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gDragonRushAffineAnimTable[] = +{ + gDragonRushAffineanimCmds1, + gDragonRushAffineanimCmds2, +}; + +const union AnimCmd gDracoMeteorAnimTable[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gDracoMeteorAnimCmd[] = +{ + gDracoMeteorAnimTable, +}; + +const union AffineAnimCmd gDracoMeteorAffineAnimCmd[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 20, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gDracoMeteorAffineAnims[] = +{ + gDracoMeteorAffineAnimCmd, +}; + +const struct SpriteTemplate gDragonRushSpriteTemplate = +{ + .tileTag = ANIM_TAG_SLAM_HIT_2, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDragonRushAnimTable, + .images = NULL, + .affineAnims = gDragonRushAffineAnimTable, + .callback = AnimDragonRushStep, +}; + +const struct SpriteTemplate gDracoMetorSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDracoMeteorAnimCmd, + .images = NULL, + .affineAnims = gDracoMeteorAffineAnims, + .callback = AnimSpinningDracoMeteor, +}; + +const struct SpriteTemplate gDragonPulseSpriteTemplate = +{ + .tileTag = ANIM_TAG_DRAGON_PULSE, + .paletteTag = ANIM_TAG_DRAGON_PULSE, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +static void AnimDragonRushStep(struct Sprite *sprite) +{ + // These two cases are identical. + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + sprite->data[1] += sprite->data[0]; + sprite->data[1] &= 0xFF; + } + else + { + sprite->data[1] += sprite->data[0]; + sprite->data[1] &= 0xFF; + } + + sprite->x2 = Cos(sprite->data[1], 20); + sprite->y2 = Sin(sprite->data[1], 20); + if (sprite->animEnded) + DestroyAnimSprite(sprite); + + sprite->data[2]++; +} + +static void AnimSpinningDracoMeteorFinish(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, 0); + sprite->affineAnimPaused = 1; + sprite->data[0] = 20; + + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void AnimSpinningDracoMeteor(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->data[0] = gBattleAnimArgs[3]; + + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, AnimSpinningDracoMeteorFinish); +} + static void AnimOutrageFlame(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { sprite->x -= gBattleAnimArgs[0]; @@ -215,8 +344,8 @@ static void AnimOutrageFlame(struct Sprite *sprite) static void StartDragonFireTranslation(struct Sprite *sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { sprite->x -= gBattleAnimArgs[1]; @@ -238,17 +367,17 @@ static void StartDragonFireTranslation(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); } -static void AnimDragonRageFirePlume(struct Sprite *sprite) +void AnimDragonRageFirePlume(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); } SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[1]); @@ -258,7 +387,7 @@ static void AnimDragonRageFirePlume(struct Sprite *sprite) } // For Dragon Breath and Dragon Rage -static void AnimDragonFireToTarget(struct Sprite *sprite) +void AnimDragonFireToTarget(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) StartSpriteAffineAnim(sprite, 1); @@ -266,12 +395,12 @@ static void AnimDragonFireToTarget(struct Sprite *sprite) StartDragonFireTranslation(sprite); } -static void AnimDragonDanceOrb(struct Sprite *sprite) +void AnimDragonDanceOrb(struct Sprite *sprite) { u16 r5; u16 r0; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[4] = 0; sprite->data[5] = 1; sprite->data[6] = gBattleAnimArgs[0]; @@ -413,12 +542,12 @@ static void UpdateDragonDanceScanlineEffect(struct Task *task) task->data[5] = (task->data[5] + 9) & 0xFF; } -static void AnimOverheatFlame(struct Sprite *sprite) +void AnimOverheatFlame(struct Sprite *sprite) { int i; int yAmplitude = (gBattleAnimArgs[2] * 3) / 5; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[4]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[4]; sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]); sprite->data[2] = Sin(gBattleAnimArgs[1], yAmplitude); sprite->x += sprite->data[1] * gBattleAnimArgs[0]; @@ -426,7 +555,7 @@ static void AnimOverheatFlame(struct Sprite *sprite) sprite->data[3] = gBattleAnimArgs[3]; sprite->callback = AnimOverheatFlame_Step; for (i = 0; i < 7; i++) - gUnusedOverheatData[i] = sprite->data[i]; + sUnusedOverheatData[i] = sprite->data[i]; } static void AnimOverheatFlame_Step(struct Sprite *sprite) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index ebdb471bfd..ff9495d0e0 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -15,6 +15,7 @@ #include "util.h" #include "constants/rgb.h" #include "constants/songs.h" +#include "constants/moves.h" struct { s16 startX; @@ -23,21 +24,13 @@ struct { s16 targetY; } static EWRAM_DATA sFrenzyPlantRootData = {0}; // Debug? Written to but never read. -static void AnimMovePowderParticle(struct Sprite *); static void AnimMovePowderParticle_Step(struct Sprite *); -static void AnimPowerAbsorptionOrb(struct Sprite *); -static void AnimSolarbeamBigOrb(struct Sprite *); -static void AnimSolarbeamSmallOrb(struct Sprite *); -static void AnimSolarbeamSmallOrb_Step(struct Sprite *); -static void AnimAbsorptionOrb(struct Sprite *); +static void AnimSolarBeamSmallOrb(struct Sprite *); +static void AnimSolarBeamSmallOrb_Step(struct Sprite *); static void AnimAbsorptionOrb_Step(struct Sprite *); -static void AnimHyperBeamOrb(struct Sprite *); static void AnimHyperBeamOrb_Step(struct Sprite *); -static void AnimSporeParticle(struct Sprite *); static void AnimSporeParticle_Step(struct Sprite *); -static void AnimPetalDanceBigFlower(struct Sprite *); static void AnimPetalDanceBigFlower_Step(struct Sprite *); -static void AnimPetalDanceSmallFlower(struct Sprite *); static void AnimPetalDanceSmallFlower_Step(struct Sprite *); static void AnimRazorLeafParticle(struct Sprite *); static void AnimRazorLeafParticle_Step1(struct Sprite *); @@ -45,12 +38,10 @@ static void AnimRazorLeafParticle_Step2(struct Sprite *); static void AnimLeechSeed(struct Sprite *); static void AnimLeechSeed_Step(struct Sprite *); static void AnimLeechSeedSprouts(struct Sprite *); -static void AnimTranslateLinearSingleSineWave(struct Sprite *); static void AnimTranslateLinearSingleSineWave_Step(struct Sprite *); static void AnimConstrictBinding(struct Sprite *); static void AnimConstrictBinding_Step1(struct Sprite *); static void AnimConstrictBinding_Step2(struct Sprite *); -static void AnimMimicOrb(struct Sprite *); static void AnimIngrainRoot(struct Sprite *); static void AnimFrenzyPlantRoot(struct Sprite *); static void AnimRootFlickerOut(struct Sprite *); @@ -68,12 +59,9 @@ static void AnimTrickBag_Step2(struct Sprite *); static void AnimTrickBag_Step3(struct Sprite *); static void AnimFlyingParticle(struct Sprite *); static void AnimFlyingParticle_Step(struct Sprite *); -static void AnimNeedleArmSpike(struct Sprite *); -static void AnimNeedleArmSpike_Step(struct Sprite *); static void AnimSlidingHit(struct Sprite *); static void AnimWhipHit(struct Sprite *); static void AnimFlickeringPunch(struct Sprite *); -static void AnimCuttingSlice(struct Sprite *); static void AnimAirCutterSlice(struct Sprite *); static void AnimSlice_Step(struct Sprite *); static void AnimCirclingMusicNote(struct Sprite *); @@ -83,8 +71,7 @@ static void AnimProtect_Step(struct Sprite *); static void AnimMilkBottle(struct Sprite *); static void AnimMilkBottle_Step1(struct Sprite *); static void AnimMilkBottle_Step2(struct Sprite *, int, int); -static void AnimGrantingStars(struct Sprite *); -static void AnimSparkingStars(struct Sprite *); +static void AnimSparklingStars(struct Sprite *); static void AnimBubbleBurst(struct Sprite *); static void AnimBubbleBurst_Step(struct Sprite *); static void AnimSleepLetterZ(struct Sprite *); @@ -112,11 +99,9 @@ static void AnimFalseSwipeSlice_Step1(struct Sprite *); static void AnimFalseSwipeSlice_Step2(struct Sprite *); static void AnimFalseSwipeSlice_Step3(struct Sprite *); static void AnimFalseSwipePositionedSlice(struct Sprite *); -static void AnimEndureEnergy(struct Sprite *); static void AnimEndureEnergy_Step(struct Sprite *); static void AnimSharpenSphere(struct Sprite *); static void AnimSharpenSphere_Step(struct Sprite *); -static void AnimConversion(struct Sprite *); static void AnimConversion2(struct Sprite *); static void AnimConversion2_Step(struct Sprite *); static void AnimMoon(struct Sprite *); @@ -128,17 +113,14 @@ static void AnimHornHit_Step(struct Sprite *); static void AnimSuperFang(struct Sprite *); static void AnimWavyMusicNotes(struct Sprite *); static void AnimWavyMusicNotes_Step(struct Sprite *); -static void AnimWavyMusicNotesGetNextPos(s16, s16, s16 *, s16 *, s8); +static void AnimWavyMusicNotes_CalcVelocity(s16, s16, s16 *, s16 *, s8); static void AnimFlyingMusicNotes(struct Sprite *); static void AnimFlyingMusicNotes_Step(struct Sprite *); static void AnimBellyDrumHand(struct Sprite *); static void AnimSlowFlyingMusicNotes(struct Sprite *); static void AnimSlowFlyingMusicNotes_Step(struct Sprite *); -static void AnimThoughtBubble(struct Sprite *); static void AnimThoughtBubble_Step(struct Sprite *); -static void AnimMetronomeFinger(struct Sprite *); static void AnimMetronomeFinger_Step(struct Sprite *); -static void AnimFollowMeFinger(struct Sprite *); static void AnimFollowMeFinger_Step1(struct Sprite *); static void AnimFollowMeFinger_Step2(struct Sprite *); static void AnimTauntFinger(struct Sprite *); @@ -154,8 +136,26 @@ static void AnimTask_LeafBlade_Step2(struct Task *, u8); static void AnimTask_LeafBlade_Step2_Callback(struct Sprite *); static void AnimTask_SkullBashPositionSet(u8); static void AnimTask_SkullBashPositionReset(u8); +static void AnimMoveFeintSwipe(struct Sprite *); +static void AnimMoveFeintZoom(struct Sprite *); +static void AnimMoveTrumpCard(struct Sprite *); +static void AnimMoveTrumpCardParticle(struct Sprite *); +static void AnimMoveAccupressure(struct Sprite *); +static void AnimMoveWringOut(struct Sprite *); +static void AnimMoveWorrySeed(struct Sprite *); +static void AnimMoveSmallCloud(struct Sprite *); +static void AnimGrassKnotStep(struct Sprite *); +static void AnimGrassKnot(struct Sprite *); +static void AnimWoodHammerSmall(struct Sprite *); +static void AnimWoodHammerBig(struct Sprite *); static void AnimTask_DoubleTeam_Step(u8); static void AnimDoubleTeam(struct Sprite *); +static void AnimNightSlash(struct Sprite *); +static void AnimRockPolishStreak(struct Sprite *); +static void AnimRockPolishSparkle(struct Sprite *); +static void AnimPoisonJabProjectile(struct Sprite *); +static void AnimNightSlash(struct Sprite *); +static void AnimPluck(struct Sprite *); const union AnimCmd gPowderParticlesAnimCmds[] = { @@ -175,6 +175,251 @@ const union AnimCmd *const gPowderParticlesAnimTable[] = gPowderParticlesAnimCmds, }; +static const union AffineAnimCmd sFeintAffineSwipe[] = { AFFINEANIMCMD_END }; +static const union AffineAnimCmd sFeintAffineZoom[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_FRAME(-30, -30, 0, 10), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sTrumpCardAffine0[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, 30, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sTrumpCardAffine1[] = +{ + AFFINEANIMCMD_FRAME(0xA0, 0xA0, 40, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sTrumpCardAffine2[] = +{ + AFFINEANIMCMD_FRAME(0xD0, 0xD0, -20, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sTrumpCardAffine3[] = +{ + AFFINEANIMCMD_FRAME(0xE0, 0xE0, 40, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sTrumpCardAffine4[] = +{ + AFFINEANIMCMD_FRAME(0xF0, 0xF0, 60, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd * const sTrumpCardAffineAnims[] = +{ + sTrumpCardAffine0, + sTrumpCardAffine1, + sTrumpCardAffine2, + sTrumpCardAffine3, + sTrumpCardAffine4 +}; + +static const union AffineAnimCmd * const sFeintAffineAnims[] = +{ + sFeintAffineZoom, +}; + +static const union AnimCmd sTrumpCardFrame0[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sTrumpCardFrame1[] = +{ + ANIMCMD_FRAME(4, 0), + ANIMCMD_END +}; + +static const union AnimCmd sTrumpCardFrame2[] = +{ + ANIMCMD_FRAME(8, 0), + ANIMCMD_END +}; + +static const union AnimCmd sTrumpCardParticleFrame0[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sTrumpCardParticleFrame1[] = +{ + ANIMCMD_FRAME(1, 0), + ANIMCMD_END +}; + +static const union AnimCmd sTrumpCardParticleFrame2[] = +{ + ANIMCMD_FRAME(2, 0), + ANIMCMD_END +}; + +static const union AnimCmd * const sTrumpCardAnims[] = +{ + sTrumpCardFrame0, + sTrumpCardFrame1, + sTrumpCardFrame2 +}; + +static const union AnimCmd * const sTrumpCardParticleAnims[] = +{ + sTrumpCardParticleFrame0, + sTrumpCardParticleFrame1, + sTrumpCardParticleFrame2, +}; + +static const union AffineAnimCmd sAccupressureTurn[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 1, 20), + AFFINEANIMCMD_FRAME(0, 0, -1, 40), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sAccupressureStill[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd * const sAccupressureAffineAnims[] = +{ + sAccupressureStill, + sAccupressureTurn +}; + +static const union AffineAnimCmd sSmallCloundsInit[] = +{ + AFFINEANIMCMD_FRAME(0x100,0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sSmallCloudsVariant0[] = +{ + AFFINEANIMCMD_FRAME(0x100,0x100, 0, 0), + AFFINEANIMCMD_FRAME(-10, -10, 0, 15), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSmallCloudsVariant1[] = +{ + AFFINEANIMCMD_FRAME(0x180,0x180, 0, 0), + AFFINEANIMCMD_FRAME(-18, -18, 0, 21), + AFFINEANIMCMD_END +}; + + +static const union AffineAnimCmd sSmallCloudsVariant2[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0), + AFFINEANIMCMD_FRAME(-6, -6, 0, 15), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd * const sSmallCloudSpriteAffineAnimTable[] = +{ + sSmallCloundsInit, + sSmallCloudsVariant0, + sSmallCloudsVariant1, + sSmallCloudsVariant2, +}; + +const struct SpriteTemplate gWorrySeedSpriteTemplate = +{ + .tileTag = ANIM_TAG_WORRY_SEED, + .paletteTag = ANIM_TAG_WORRY_SEED, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveWorrySeed +}; + +const struct SpriteTemplate gSmallCloudTemplate = +{ + .tileTag = ANIM_TAG_SMALL_CLOUD, + .paletteTag = ANIM_TAG_SMALL_CLOUD, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSmallCloudSpriteAffineAnimTable, + .callback = AnimMoveSmallCloud +}; + +const struct SpriteTemplate gAccupressureSpriteTemplate = +{ + .tileTag = ANIM_TAG_ACCUPRESSURE, + .paletteTag = ANIM_TAG_ACCUPRESSURE, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sAccupressureAffineAnims, + .callback = AnimMoveAccupressure, +}; + +const struct SpriteTemplate gWringOutHandSpriteTemplate = +{ + .tileTag = ANIM_TAG_WRING_OUT, + .paletteTag = ANIM_TAG_WRING_OUT, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveWringOut, +}; + +const struct SpriteTemplate gTrumpCardParticleSpriteTempalte = +{ + .tileTag = ANIM_TAG_TRUMP_CARD_PARTICLES, + .paletteTag = ANIM_TAG_TRUMP_CARD_PARTICLES, + .oam = &gOamData_AffineDouble_ObjNormal_8x8, + .anims = sTrumpCardParticleAnims, + .images = NULL, + .affineAnims = sTrumpCardAffineAnims, + .callback = AnimMoveTrumpCardParticle +}; + +const struct SpriteTemplate gTrumpCardSpriteTemplate = +{ + .tileTag = ANIM_TAG_TRUMP_CARD, + .paletteTag = ANIM_TAG_TRUMP_CARD, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = sTrumpCardAnims, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveTrumpCard +}; + +const struct SpriteTemplate gFeintSwipeSpriteTemplate = +{ + .tileTag = ANIM_TAG_FEINT, + .paletteTag = ANIM_TAG_FEINT, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveFeintSwipe, +}; + +const struct SpriteTemplate gFeintZoomSpriteTemplate = +{ + .tileTag = ANIM_TAG_FEINT, + .paletteTag = ANIM_TAG_FEINT, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sFeintAffineAnims, + .callback = AnimMoveFeintZoom, +}; + const struct SpriteTemplate gSleepPowderParticleSpriteTemplate = { .tileTag = ANIM_TAG_SLEEP_POWDER, @@ -208,49 +453,49 @@ const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate = .callback = AnimMovePowderParticle, }; -const union AnimCmd gSolarbeamBigOrbAnimCmds1[] = +const union AnimCmd gSolarBeamBigOrbAnimCmds1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd gSolarbeamBigOrbAnimCmds2[] = +const union AnimCmd gSolarBeamBigOrbAnimCmds2[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -const union AnimCmd gSolarbeamBigOrbAnimCmds3[] = +const union AnimCmd gSolarBeamBigOrbAnimCmds3[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_END, }; -const union AnimCmd gSolarbeamBigOrbAnimCmds4[] = +const union AnimCmd gSolarBeamBigOrbAnimCmds4[] = { ANIMCMD_FRAME(3, 1), ANIMCMD_END, }; -const union AnimCmd gSolarbeamBigOrbAnimCmds5[] = +const union AnimCmd gSolarBeamBigOrbAnimCmds5[] = { ANIMCMD_FRAME(4, 1), ANIMCMD_END, }; -const union AnimCmd gSolarbeamBigOrbAnimCmds6[] = +const union AnimCmd gSolarBeamBigOrbAnimCmds6[] = { ANIMCMD_FRAME(5, 1), ANIMCMD_END, }; -const union AnimCmd gSolarbeamBigOrbAnimCmds7[] = +const union AnimCmd gSolarBeamBigOrbAnimCmds7[] = { ANIMCMD_FRAME(6, 1), ANIMCMD_END, }; -const union AnimCmd gSolarbeamSmallOrbAnimCms[] = +const union AnimCmd gSolarBeamSmallOrbAnimCms[] = { ANIMCMD_FRAME(7, 1), ANIMCMD_END, @@ -262,20 +507,20 @@ const union AnimCmd gPowerAbsorptionOrbAnimCmds[] = ANIMCMD_END, }; -const union AnimCmd *const gSolarbeamBigOrbAnimTable[] = +const union AnimCmd *const gSolarBeamBigOrbAnimTable[] = { - gSolarbeamBigOrbAnimCmds1, - gSolarbeamBigOrbAnimCmds2, - gSolarbeamBigOrbAnimCmds3, - gSolarbeamBigOrbAnimCmds4, - gSolarbeamBigOrbAnimCmds5, - gSolarbeamBigOrbAnimCmds6, - gSolarbeamBigOrbAnimCmds7, + gSolarBeamBigOrbAnimCmds1, + gSolarBeamBigOrbAnimCmds2, + gSolarBeamBigOrbAnimCmds3, + gSolarBeamBigOrbAnimCmds4, + gSolarBeamBigOrbAnimCmds5, + gSolarBeamBigOrbAnimCmds6, + gSolarBeamBigOrbAnimCmds7, }; -const union AnimCmd *const gSolarbeamSmallOrbAnimTable[] = +const union AnimCmd *const gSolarBeamSmallOrbAnimTable[] = { - gSolarbeamSmallOrbAnimCms, + gSolarBeamSmallOrbAnimCms, }; const union AnimCmd *const gPowerAbsorptionOrbAnimTable[] = @@ -303,26 +548,26 @@ const struct SpriteTemplate gPowerAbsorptionOrbSpriteTemplate = .callback = AnimPowerAbsorptionOrb, }; -const struct SpriteTemplate gSolarbeamBigOrbSpriteTemplate = +const struct SpriteTemplate gSolarBeamBigOrbSpriteTemplate = { .tileTag = ANIM_TAG_ORBS, .paletteTag = ANIM_TAG_ORBS, .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = gSolarbeamBigOrbAnimTable, + .anims = gSolarBeamBigOrbAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimSolarbeamBigOrb, + .callback = AnimSolarBeamBigOrb, }; -const struct SpriteTemplate gSolarbeamSmallOrbSpriteTemplate = +const struct SpriteTemplate gSolarBeamSmallOrbSpriteTemplate = { .tileTag = ANIM_TAG_ORBS, .paletteTag = ANIM_TAG_ORBS, .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = gSolarbeamSmallOrbAnimTable, + .anims = gSolarBeamSmallOrbAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimSolarbeamSmallOrb, + .callback = AnimSolarBeamSmallOrb, }; const union AffineAnimCmd gStockpileAbsorptionOrbAffineCmds[] = { @@ -371,7 +616,7 @@ const struct SpriteTemplate gHyperBeamOrbSpriteTemplate = .tileTag = ANIM_TAG_ORBS, .paletteTag = ANIM_TAG_ORBS, .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = gSolarbeamBigOrbAnimTable, + .anims = gSolarBeamBigOrbAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimHyperBeamOrb, @@ -407,6 +652,17 @@ const struct SpriteTemplate gLeechSeedSpriteTemplate = .callback = AnimLeechSeed, }; +const struct SpriteTemplate gPluckParticleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SEED_BROWN, + .paletteTag = ANIM_TAG_SEED_BROWN, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPluck, +}; + const union AnimCmd gSporeParticleAnimCmds1[] = { ANIMCMD_FRAME(0, 1), @@ -509,6 +765,8 @@ const union AnimCmd *const gRazorLeafParticleAnimTable[] = gRazorLeafParticleAnimCmds2, }; +void AnimFlyUpTarget(struct Sprite *sprite); + const struct SpriteTemplate gRazorLeafParticleSpriteTemplate = { .tileTag = ANIM_TAG_LEAF, @@ -520,6 +778,17 @@ const struct SpriteTemplate gRazorLeafParticleSpriteTemplate = .callback = AnimRazorLeafParticle, }; +const struct SpriteTemplate gGrassPledgeSpriteTemplate = +{ + .tileTag = ANIM_TAG_LEAF, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFlyUpTarget, +}; + const struct SpriteTemplate gTwisterLeafSpriteTemplate = { .tileTag = ANIM_TAG_LEAF, @@ -531,6 +800,17 @@ const struct SpriteTemplate gTwisterLeafSpriteTemplate = .callback = AnimMoveTwisterParticle, }; +const struct SpriteTemplate gAttackOrderParticleSpriteTemplate = +{ + .tileTag = ANIM_TAG_ATTACK_ORDER, + .paletteTag = ANIM_TAG_ATTACK_ORDER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveTwisterParticle, +}; + const union AnimCmd gRazorLeafCutterAnimCmds[] = { ANIMCMD_FRAME(0, 3), @@ -1416,7 +1696,7 @@ const struct SpriteTemplate gSparklingStarsSpriteTemplate = .anims = gGrantingStarsAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimSparkingStars, + .callback = AnimSparklingStars, }; static const union AnimCmd sAnim_BubbleBurst[] = @@ -1652,6 +1932,39 @@ const struct SpriteTemplate gEndureEnergySpriteTemplate = .callback = AnimEndureEnergy, }; +const struct SpriteTemplate gBlueEndureEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_SWEAT_BEAD, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy, +}; + +const struct SpriteTemplate gGreenEndureEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_WHIP_HIT, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy, +}; + +const struct SpriteTemplate gYellowEndureEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_PAW_PRINT, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy, +}; + const union AnimCmd gSharpenSphereAnimCmds[] = { ANIMCMD_FRAME(0, 18), @@ -2189,6 +2502,494 @@ const struct SpriteTemplate gTauntFingerSpriteTemplate = .callback = AnimTauntFinger, }; +const struct SpriteTemplate gPowerOrbs_Float = +{ + .tileTag = ANIM_TAG_RED_ORB, + .paletteTag = ANIM_TAG_RED_ORB, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gSporeParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSporeParticle, +}; + +const union AnimCmd gRockPolishStreak_AnimCmd[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(4, 2), + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(12, 15), + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(4, 2), + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gRockPolishStreak_AnimCmds[] = +{ + gRockPolishStreak_AnimCmd, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd0[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd1[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x10, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd2[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x20, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd3[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x30, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd4[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x40, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd5[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x50, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd6[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x60, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd7[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x70, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd8[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x80, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd9[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x90, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdA[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xA0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdB[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xB0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdC[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xC0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdD[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xD0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdE[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xE0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdF[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xF0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gRockPolishStreak_AffineAnimCmds[] = +{ + gRockPolishStreak_AffineAnimCmd0, + gRockPolishStreak_AffineAnimCmd1, + gRockPolishStreak_AffineAnimCmd2, + gRockPolishStreak_AffineAnimCmd3, + gRockPolishStreak_AffineAnimCmd4, + gRockPolishStreak_AffineAnimCmd5, + gRockPolishStreak_AffineAnimCmd6, + gRockPolishStreak_AffineAnimCmd7, + gRockPolishStreak_AffineAnimCmd8, + gRockPolishStreak_AffineAnimCmd9, + gRockPolishStreak_AffineAnimCmdA, + gRockPolishStreak_AffineAnimCmdB, + gRockPolishStreak_AffineAnimCmdC, + gRockPolishStreak_AffineAnimCmdD, + gRockPolishStreak_AffineAnimCmdE, + gRockPolishStreak_AffineAnimCmdF, +}; + +const struct SpriteTemplate gRockPolishStreakSpriteTemplate = +{ + .tileTag = ANIM_TAG_WHITE_STREAK, + .paletteTag = ANIM_TAG_WHITE_STREAK, + .oam = &gOamData_AffineDouble_ObjBlend_32x8, + .anims = gRockPolishStreak_AnimCmds, + .images = NULL, + .affineAnims = gRockPolishStreak_AffineAnimCmds, + .callback = AnimRockPolishStreak, +}; + +const union AnimCmd gRockPolishSparkle_AnimCmd1[] = +{ + ANIMCMD_FRAME(0, 7), + ANIMCMD_FRAME(4, 7), + ANIMCMD_FRAME(8, 7), + ANIMCMD_FRAME(12, 7), + ANIMCMD_END, +}; + +const union AnimCmd *const gRockPolishSparkle_AnimCmds[] = +{ + gRockPolishSparkle_AnimCmd1, +}; + +const struct SpriteTemplate gRockPolishSparkleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_3, + .paletteTag = ANIM_TAG_SPARKLE_3, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRockPolishSparkle_AnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRockPolishSparkle, +}; + +const struct SpriteTemplate gPoisonJabProjectileSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_JAB, + .paletteTag = ANIM_TAG_PURPLE_JAB, + .oam = &gOamData_AffineDouble_ObjBlend_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPoisonJabProjectile, +}; + +const union AnimCmd gNightSlashLeftAnimCmd0[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd gNightSlashLeftAnimCmd1[] = +{ + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gNightSlashLeftAnimTable[] = +{ + gNightSlashLeftAnimCmd0, + gNightSlashLeftAnimCmd1, +}; + +const struct SpriteTemplate gNightSlashLeftSpriteTemplate = +{ + .tileTag = ANIM_TAG_SLASH, + .paletteTag = ANIM_TAG_SLASH, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gNightSlashLeftAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNightSlash, +}; + +const union AnimCmd gNightSlashRightAnimCmd0[] = +{ + ANIMCMD_FRAME(0, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gNightSlashRightAnimCmd1[] = +{ + ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gNightSlashRightAnimTable[] = +{ + gNightSlashRightAnimCmd0, + gNightSlashRightAnimCmd1, +}; + +const struct SpriteTemplate gNightSlashRightSpriteTemplate = +{ + .tileTag = ANIM_TAG_SLASH, + .paletteTag = ANIM_TAG_SLASH, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gNightSlashRightAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNightSlash, +}; + +const struct SpriteTemplate gLuckyChantBigStarsSpriteTemplate = +{ + .tileTag = ANIM_TAG_GOLD_STARS, + .paletteTag = ANIM_TAG_GOLD_STARS, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPetalDanceBigFlower, +}; + +const struct SpriteTemplate gLuckyChantSmallStarsSpriteTemplate = +{ + .tileTag = ANIM_TAG_GOLD_STARS, + .paletteTag = ANIM_TAG_GOLD_STARS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gPetalDanceSmallFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPetalDanceSmallFlower, +}; + +const union AnimCmd gWoodHammerBigAnimCmd_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gWoodHammerBigAnimCmd_2[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gWoodHammerBigAnims[] = +{ + gWoodHammerBigAnimCmd_1, + gWoodHammerBigAnimCmd_2, +}; + +const union AffineAnimCmd gWoodHammerBigAffineAnimCmd_1[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -5, 5), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gWoodHammerBigAffineAnimCmd_2[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 5, 5), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gWoodHammerBigAffineAnims[] = +{ + gWoodHammerBigAffineAnimCmd_1, + gWoodHammerBigAffineAnimCmd_2, +}; + +const union AnimCmd gWoodHammerSmallAnimCmd_1[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +const union AnimCmd gWoodHammerSmallAnimCmd_2[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END, +}; + +const union AnimCmd gWoodHammerSmallAnimCmd_3[] = +{ + ANIMCMD_FRAME(64, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gWoodHammerSmallAnims[] = +{ + gWoodHammerSmallAnimCmd_1, + gWoodHammerSmallAnimCmd_2, + gWoodHammerSmallAnimCmd_3, +}; + +const struct SpriteTemplate gGrassKnotSpriteTemplate = +{ + .tileTag = ANIM_TAG_RAZOR_LEAF, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gRazorLeafCutterAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGrassKnot, +}; + +const struct SpriteTemplate gWoodHammerBigSpriteTemplate = +{ + .tileTag = ANIM_TAG_WOOD_HAMMER, + .paletteTag = ANIM_TAG_WOOD_HAMMER, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gWoodHammerBigAnims, + .images = NULL, + .affineAnims = gWoodHammerBigAffineAnims, + .callback = AnimWoodHammerBig, +}; + +const struct SpriteTemplate gWoodHammerSmallSpriteTemplate = +{ + .tileTag = ANIM_TAG_WOOD_HAMMER, + .paletteTag = ANIM_TAG_WOOD_HAMMER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gWoodHammerSmallAnims, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWoodHammerSmall, +}; + +const struct SpriteTemplate gJudgmentGrayOutwardSpikesTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPIKE, + .paletteTag = ANIM_TAG_GUST, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gJudgmentGrayInwardOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gDarkVoidPurpleStarsTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGrantingStars +}; + +const struct SpriteTemplate gSeedFlareGreenCirclesTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; + +// functions +static void AnimGrassKnot(struct Sprite *sprite) +{ + if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT) + gBattleAnimArgs[0] *= -1; + + InitSpritePosToAnimTarget(sprite, TRUE); + + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->x; + sprite->data[2] = sprite->x + gBattleAnimArgs[2]; + sprite->data[3] = sprite->y; + sprite->data[4] = sprite->y; + + InitAnimLinearTranslation(sprite); + + sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[6] = gBattleAnimArgs[4]; + sprite->data[7] = 0; + + sprite->callback = AnimGrassKnotStep; +} + +static void AnimGrassKnotStep(struct Sprite *sprite) +{ + if (!AnimTranslateLinear(sprite)) + { + sprite->y2 += Sin(sprite->data[7] >> 8, sprite->data[5]); + sprite->data[7] += sprite->data[6]; + } + else + { + DestroyAnimSprite(sprite); + } +} + +static void AnimWoodHammerBig(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + StartSpriteAffineAnim(sprite, 1); + + TranslateAnimSpriteToTargetMonLocation(sprite); +} + +static void AnimWoodHammerSmall(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, gBattleAnimArgs[5]); + AnimateSprite(sprite); + + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->x -= gBattleAnimArgs[0]; + else + sprite->x += gBattleAnimArgs[0]; + + sprite->y += gBattleAnimArgs[1]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->x; + sprite->data[2] = sprite->x + gBattleAnimArgs[2]; + sprite->data[3] = sprite->y; + sprite->data[4] = sprite->y + gBattleAnimArgs[3]; + + InitSpriteDataForLinearTranslation(sprite); + sprite->data[3] = 0; + sprite->data[4] = 0; + + sprite->callback = TranslateSpriteLinearFixedPoint; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); +} + // Animates the falling particles that horizontally wave back and forth. // Used by Sleep Powder, Stun Spore, and Poison Powder. // arg 0: initial x pixel offset @@ -2197,7 +2998,7 @@ const struct SpriteTemplate gTauntFingerSpriteTemplate = // arg 3: vertical movement speed (sub-pixel value) // arg 4: wave amplitude // arg 5: wave speed -static void AnimMovePowderParticle(struct Sprite* sprite) +void AnimMovePowderParticle(struct Sprite *sprite) { sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; @@ -2217,7 +3018,7 @@ static void AnimMovePowderParticle(struct Sprite* sprite) sprite->callback = AnimMovePowderParticle_Step; } -static void AnimMovePowderParticle_Step(struct Sprite* sprite) +static void AnimMovePowderParticle_Step(struct Sprite *sprite) { if (sprite->data[0] > 0) { @@ -2237,7 +3038,7 @@ static void AnimMovePowderParticle_Step(struct Sprite* sprite) // arg 0: initial x pixel offset // arg 1: initial y pixel offset // arg 2: duration -static void AnimPowerAbsorptionOrb(struct Sprite* sprite) +void AnimPowerAbsorptionOrb(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; @@ -2252,7 +3053,7 @@ static void AnimPowerAbsorptionOrb(struct Sprite* sprite) // arg 1: initial y pixel offset // arg 2: duration // arg 3: sprite anim number -static void AnimSolarbeamBigOrb(struct Sprite* sprite) +void AnimSolarBeamBigOrb(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); StartSpriteAnim(sprite, gBattleAnimArgs[3]); @@ -2264,26 +3065,35 @@ static void AnimSolarbeamBigOrb(struct Sprite* sprite) } // Moves a small orb in a wavy pattern towards the target mon. -// The small orb "circles" the big orbs in AnimSolarbeamBigOrb. +// The small orb "circles" the big orbs in AnimSolarBeamBigOrb. // arg 0: initial x pixel offset // arg 1: initial y pixel offset // arg 2: duration // arg 3: initial wave offset -static void AnimSolarbeamSmallOrb(struct Sprite* sprite) +static void AnimSolarBeamSmallOrb(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gAnimMoveIndex == MOVE_CORE_ENFORCER) + { + CoreEnforcerLoadBeamTarget(sprite); + } + else + { + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[3] = sprite->y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } + InitAnimLinearTranslation(sprite); sprite->data[5] = gBattleAnimArgs[3]; - sprite->callback = AnimSolarbeamSmallOrb_Step; + sprite->callback = AnimSolarBeamSmallOrb_Step; sprite->callback(sprite); } -static void AnimSolarbeamSmallOrb_Step(struct Sprite* sprite) +static void AnimSolarBeamSmallOrb_Step(struct Sprite *sprite) { if (AnimTranslateLinear(sprite)) { @@ -2302,10 +3112,10 @@ static void AnimSolarbeamSmallOrb_Step(struct Sprite* sprite) } } -// Creates 15 small secondary orbs used in the solarbeam anim effect. +// Creates 15 small secondary orbs used in the SolarBeam anim effect. // There is a 7-frame delay between each of them. // No args. -void AnimTask_CreateSmallSolarbeamOrbs(u8 taskId) +void AnimTask_CreateSmallSolarBeamOrbs(u8 taskId) { if (--gTasks[taskId].data[0] == -1) { @@ -2315,7 +3125,7 @@ void AnimTask_CreateSmallSolarbeamOrbs(u8 taskId) gBattleAnimArgs[1] = 0; gBattleAnimArgs[2] = 80; gBattleAnimArgs[3] = 0; - CreateSpriteAndAnimate(&gSolarbeamSmallOrbSpriteTemplate, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1); + CreateSpriteAndAnimate(&gSolarBeamSmallOrbSpriteTemplate, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1); } if (gTasks[taskId].data[1] == 15) @@ -2327,7 +3137,7 @@ void AnimTask_CreateSmallSolarbeamOrbs(u8 taskId) // arg 1: initial y pixel offset // arg 2: wave amplitude // arg 3: wave period (lower means faster wave) -static void AnimAbsorptionOrb(struct Sprite* sprite) +void AnimAbsorptionOrb(struct Sprite *sprite) { InitSpritePosToAnimTarget(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[3]; @@ -2338,7 +3148,7 @@ static void AnimAbsorptionOrb(struct Sprite* sprite) sprite->callback = AnimAbsorptionOrb_Step; } -static void AnimAbsorptionOrb_Step(struct Sprite* sprite) +static void AnimAbsorptionOrb_Step(struct Sprite *sprite) { if (TranslateAnimHorizontalArc(sprite)) DestroyAnimSprite(sprite); @@ -2346,7 +3156,7 @@ static void AnimAbsorptionOrb_Step(struct Sprite* sprite) // Moves an orb in a wave-like fashion towards the target mon. The wave's // properties and the sprite anim are randomly determined. -static void AnimHyperBeamOrb(struct Sprite* sprite) +void AnimHyperBeamOrb(struct Sprite *sprite) { u16 speed; u16 animNum = Random2(); @@ -2372,7 +3182,7 @@ static void AnimHyperBeamOrb(struct Sprite* sprite) sprite->callback(sprite); } -static void AnimHyperBeamOrb_Step(struct Sprite* sprite) +static void AnimHyperBeamOrb_Step(struct Sprite *sprite) { if (AnimFastTranslateLinear(sprite)) { @@ -2391,6 +3201,302 @@ static void AnimHyperBeamOrb_Step(struct Sprite* sprite) } } +static void AnimMoveWorrySeedWait(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroyAnimSprite(sprite); +} + +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: wave period +// arg 3: wave amplitude +static void AnimMoveWorrySeed(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[5] = gBattleAnimArgs[3]; + InitAnimArcTranslation(sprite); + sprite->callback = AnimMoveWorrySeedWait; +} + +static void AnimMoveSmallCloudAnimate(struct Sprite *sprite) +{ + sprite->x2 += sprite->data[0]; + sprite->y2 += sprite->data[1]; + + if(sprite->affineAnimEnded) + { + DestroyAnimSprite(sprite); + } + +} +#define ONE_IF_ZERO(x) ((x) > 0 ? (x) : 1) + +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: cloud type animation [0..2] +// arg 3: horizontal velocity +// arg 4: vertical velocity +// arg 5: duration +static void AnimMoveSmallCloud(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[4]; + sprite->callback = AnimMoveSmallCloudAnimate; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]+1); +} + +static void AnimPluckParticle(struct Sprite *sprite) +{ + if(sprite->data[0] > 0) + { + s16 yVelocity = sprite->data[5]; + s16 xVelocity = sprite->data[2]; + sprite->y -= yVelocity; + sprite->x += xVelocity; + if((sprite->data[0] % 7) == 0) + { + sprite->data[5] = yVelocity-1; + } + sprite->data[0]--; + } + else + { + sprite->callback = DestroyAnimSprite; + } +} + +// brown seed particle (jumps up, falls down.) +// used by Pluck. +// arg 0: initial x offset from target +// arg 1: initial y offset from target +// arg 2: lifetime of the particle +// arg 3: upward velocity initial (decreases over time) +// arg 4: horizontal velocity (stays the same) +static void AnimPluck(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + + sprite->data[0] = gBattleAnimArgs[2]; //lifetime of the particle + sprite->data[5] = gBattleAnimArgs[3]; //upward velocity + sprite->data[2] = gBattleAnimArgs[4]; //horizontal velocity + sprite->x += gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + sprite->callback = AnimPluckParticle; +} + +static void AnimMoveFeintSwipeStep(struct Sprite *sprite) +{ + switch(sprite->data[5]) + { + case 0: + if(AnimTranslateLinear(sprite)) + { + //Not the most elegant solution here, but it works without messing up the sprites coordinates + sprite->x2 = 0; + sprite->x += 64; + sprite->data[5]++; + sprite->data[0] = sprite->data[6]; + sprite->data[1] = sprite->x; + sprite->data[2] = sprite->x - 64; + sprite->data[3] = sprite->y; + sprite->data[4] = sprite->y; + InitAnimLinearTranslation(sprite); + } + break; + case 1: + if(AnimTranslateLinear(sprite)) + { + sprite->callback = DestroyAnimSprite; + } + break; + } + +} + +static void AnimMoveFeintSwipe(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->x; + sprite->data[2] = sprite->x + 64; + sprite->data[3] = sprite->y; + sprite->data[4] = sprite->y; + sprite->data[5] = 0; + InitAnimLinearTranslation(sprite); + sprite->callback = AnimMoveFeintSwipeStep; +} + +static void AnimMoveFeintZoom(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} + +static void AnimMoveTrumpCardArc(struct Sprite *sprite) +{ + if(AnimTranslateLinear(sprite)) + { + DestroyAnimSprite(sprite); + } + else + { + sprite->y2 = Sin(sprite->data[5], -20); + sprite->data[5] -= sprite->data[6]; + } + +} + +static void AnimMoveTrumpCard(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + InitSpritePosToAnimTarget(sprite, TRUE); + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->x; + sprite->data[2] = sprite->x - 80; + sprite->data[3] = sprite->y; + sprite->data[4] = sprite->y; + sprite->data[5] = 128; + sprite->data[6] = 128 / sprite->data[0]; + InitAnimLinearTranslation(sprite); + sprite->callback = AnimMoveTrumpCardArc; +} + +static void AnimMoveTrumpCardParticleAlive(struct Sprite *sprite) +{ + if(sprite->data[0] > 0) + { + s16 yVelocity = sprite->data[2]; + s16 xVelocity = sprite->data[1]; + sprite->y -= yVelocity; + sprite->x += xVelocity; + if((sprite->data[0] % 2) == 0) + { + if(xVelocity > 0) + xVelocity--; + else if(xVelocity < 0) + xVelocity++; + + if(yVelocity > 0) + yVelocity--; + else if(yVelocity < 0) + yVelocity++; + sprite->data[1] = xVelocity; + sprite->data[2] = yVelocity; + } + sprite->data[0]--; + } + else + { + sprite->callback = DestroyAnimSprite; + } +} + +static void AnimMoveTrumpCardParticle(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + InitSpritePosToAnimTarget(sprite, TRUE); + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); + sprite->data[0] = gBattleAnimArgs[3]; //lifespan + sprite->data[1] = gBattleAnimArgs[4]; //horizontal velocity, decaying + sprite->data[2] = gBattleAnimArgs[5]; //vertical velocity, decaying + sprite->callback = AnimMoveTrumpCardParticleAlive; +} + +static void AnimMoveAccupressureTransition(struct Sprite *sprite) +{ + switch(sprite->data[5]) + { + case 0: + if(AnimTranslateLinear(sprite)) + { + StartSpriteAffineAnim(sprite, 1); + sprite->data[5]++; + } + break; + case 1: + if(sprite->affineAnimEnded) + { + DestroyAnimSprite(sprite); + } + break; + } +} + +static void AnimMoveAccupressure(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->data[3] = sprite->y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); + sprite->data[5] = 0; + InitAnimLinearTranslation(sprite); + sprite->callback = AnimMoveAccupressureTransition; +} + +static void AnimMoveWringOutCircle(struct Sprite *sprite) +{ + sprite->x2 = Cos(sprite->data[3], sprite->data[2]); + sprite->y2 = Sin(sprite->data[3], sprite->data[2]); + if(sprite->data[1] > 0) + { + if(sprite->data[3] + sprite->data[0] >= 256) + { + sprite->data[3] = (sprite->data[0] + sprite->data[3]) % 256; + sprite->data[1]--; + } + else + { + sprite->data[3] += sprite->data[0]; + } + + } + else if(sprite->data[3] < 64) + { + //We need to go for an extra 90° + sprite->data[3] += sprite->data[0]; + } + else + { + DestroyAnimSprite(sprite); + } +} + +static void AnimMoveWringOut(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + if(gBattleAnimArgs[5] == TRUE) + { + sprite->oam.objMode = ST_OAM_OBJ_BLEND; + } + sprite->data[0] = 256 / gBattleAnimArgs[2]; //step size + sprite->data[1] = gBattleAnimArgs[3]; //Number of circle spins + sprite->data[2] = gBattleAnimArgs[4]; //radius + sprite->data[3] = 64; //current angle 90° + sprite->callback = AnimMoveWringOutCircle; +} + // seed (sprouts a sapling from a seed.) // Used by Leech Seed. // arg 0: initial x pixel offset @@ -2399,7 +3505,7 @@ static void AnimHyperBeamOrb_Step(struct Sprite* sprite) // arg 3: target y pixel offset // arg 4: duration // arg 5: wave amplitude -static void AnimLeechSeed(struct Sprite* sprite) +static void AnimLeechSeed(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) @@ -2413,7 +3519,7 @@ static void AnimLeechSeed(struct Sprite* sprite) sprite->callback = AnimLeechSeed_Step; } -static void AnimLeechSeed_Step(struct Sprite* sprite) +static void AnimLeechSeed_Step(struct Sprite *sprite) { if (TranslateAnimHorizontalArc(sprite)) { @@ -2424,7 +3530,7 @@ static void AnimLeechSeed_Step(struct Sprite* sprite) } } -static void AnimLeechSeedSprouts(struct Sprite* sprite) +static void AnimLeechSeedSprouts(struct Sprite *sprite) { sprite->invisible = FALSE; StartSpriteAnim(sprite, 1); @@ -2441,7 +3547,7 @@ static void AnimLeechSeedSprouts(struct Sprite* sprite) // arg 2: initial wave offset // arg 3: duration // arg 4: blend (0 = off, 1 = on) -static void AnimSporeParticle(struct Sprite* sprite) +void AnimSporeParticle(struct Sprite *sprite) { InitSpritePosToAnimTarget(sprite, TRUE); StartSpriteAnim(sprite, gBattleAnimArgs[4]); @@ -2454,7 +3560,7 @@ static void AnimSporeParticle(struct Sprite* sprite) sprite->callback(sprite); } -static void AnimSporeParticle_Step(struct Sprite* sprite) +static void AnimSporeParticle_Step(struct Sprite *sprite) { sprite->x2 = Sin(sprite->data[1], 32); sprite->y2 = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8); @@ -2503,7 +3609,7 @@ void AnimTask_SporeDoubleBattle(u8 taskId) // arg 1: initial y pixel offset // arg 2: target y pixel offset // arg 3: duration -static void AnimPetalDanceBigFlower(struct Sprite* sprite) +void AnimPetalDanceBigFlower(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, FALSE); sprite->data[0] = gBattleAnimArgs[3]; @@ -2517,7 +3623,7 @@ static void AnimPetalDanceBigFlower(struct Sprite* sprite) sprite->callback(sprite); } -static void AnimPetalDanceBigFlower_Step(struct Sprite* sprite) +static void AnimPetalDanceBigFlower_Step(struct Sprite *sprite) { if (!AnimTranslateLinear(sprite)) { @@ -2541,21 +3647,21 @@ static void AnimPetalDanceBigFlower_Step(struct Sprite* sprite) // arg 1: initial y pixel offset // arg 2: target y pixel offset // arg 3: duration -static void AnimPetalDanceSmallFlower(struct Sprite* sprite) +void AnimPetalDanceSmallFlower(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[3]; sprite->data[1] = sprite->x; sprite->data[2] = sprite->x; sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; InitAnimLinearTranslation(sprite); sprite->data[5] = 0x40; sprite->callback = AnimPetalDanceSmallFlower_Step; sprite->callback(sprite); } -static void AnimPetalDanceSmallFlower_Step(struct Sprite* sprite) +static void AnimPetalDanceSmallFlower_Step(struct Sprite *sprite) { if (!AnimTranslateLinear(sprite)) { @@ -2576,7 +3682,7 @@ static void AnimPetalDanceSmallFlower_Step(struct Sprite* sprite) // arg 0: upward x delta per frame // arg 1: upward y delta per frame // arg 2: upward duration -static void AnimRazorLeafParticle(struct Sprite* sprite) +static void AnimRazorLeafParticle(struct Sprite *sprite) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); @@ -2586,7 +3692,7 @@ static void AnimRazorLeafParticle(struct Sprite* sprite) sprite->callback = AnimRazorLeafParticle_Step1; } -static void AnimRazorLeafParticle_Step1(struct Sprite* sprite) +static void AnimRazorLeafParticle_Step1(struct Sprite *sprite) { if (!sprite->data[2]) { @@ -2612,7 +3718,7 @@ static void AnimRazorLeafParticle_Step1(struct Sprite* sprite) } } -static void AnimRazorLeafParticle_Step2(struct Sprite* sprite) +static void AnimRazorLeafParticle_Step2(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker)) sprite->x2 = -Sin(sprite->data[0], 25); @@ -2639,7 +3745,7 @@ static void AnimRazorLeafParticle_Step2(struct Sprite* sprite) // arg 4: translation duration // arg 5: wave amplitude // arg 6: target between double battle opponents (boolean) -static void AnimTranslateLinearSingleSineWave(struct Sprite* sprite) +void AnimTranslateLinearSingleSineWave(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) @@ -2668,7 +3774,7 @@ static void AnimTranslateLinearSingleSineWave(struct Sprite* sprite) sprite->callback = AnimTranslateLinearSingleSineWave_Step; } -static void AnimTranslateLinearSingleSineWave_Step(struct Sprite* sprite) +static void AnimTranslateLinearSingleSineWave_Step(struct Sprite *sprite) { bool8 destroy = FALSE; s16 a = sprite->data[0]; @@ -2706,10 +3812,10 @@ static void AnimTranslateLinearSingleSineWave_Step(struct Sprite* sprite) // arg 2: wave period (higher means faster wave) // arg 3: wave amplitude // arg 4: speedup frame (particles move faster at the end of the animation) -void AnimMoveTwisterParticle(struct Sprite* sprite) +void AnimMoveTwisterParticle(struct Sprite *sprite) { if (IsDoubleBattle() == TRUE) - SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->x, &sprite->y); + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y); sprite->y += 32; sprite->data[0] = gBattleAnimArgs[0]; @@ -2720,7 +3826,7 @@ void AnimMoveTwisterParticle(struct Sprite* sprite) sprite->callback = AnimMoveTwisterParticle_Step; } -static void AnimMoveTwisterParticle_Step(struct Sprite* sprite) +static void AnimMoveTwisterParticle_Step(struct Sprite *sprite) { if (sprite->data[1] == 0xFF) { @@ -2753,7 +3859,7 @@ static void AnimMoveTwisterParticle_Step(struct Sprite* sprite) // arg 1: initial y pixel offset // arg 2: affine anim num // arg 3: num squeezes -static void AnimConstrictBinding(struct Sprite* sprite) +static void AnimConstrictBinding(struct Sprite *sprite) { InitSpritePosToAnimTarget(sprite, FALSE); sprite->affineAnimPaused = 1; @@ -2763,7 +3869,7 @@ static void AnimConstrictBinding(struct Sprite* sprite) sprite->callback = AnimConstrictBinding_Step1; } -static void AnimConstrictBinding_Step1(struct Sprite* sprite) +static void AnimConstrictBinding_Step1(struct Sprite *sprite) { u8 spriteId; @@ -2776,7 +3882,7 @@ static void AnimConstrictBinding_Step1(struct Sprite* sprite) } } -static void AnimConstrictBinding_Step2(struct Sprite* sprite) +static void AnimConstrictBinding_Step2(struct Sprite *sprite) { u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); if (!sprite->data[2]) @@ -2870,7 +3976,7 @@ static void AnimTask_DuplicateAndShrinkToPos_Step2(u8 taskId) // Moves an orb from the target mon to the attacking mon. // arg 0: initial x pixel offset // arg 1: initial y pixel offset -static void AnimMimicOrb(struct Sprite* sprite) +void AnimMimicOrb(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -2904,7 +4010,7 @@ static void AnimMimicOrb(struct Sprite* sprite) // arg 2: sprite subpriority offset // arg 3: sprite anim num // arg 4: duration -static void AnimIngrainRoot(struct Sprite* sprite) +static void AnimIngrainRoot(struct Sprite *sprite) { if (!sprite->data[0]) { @@ -2952,7 +4058,7 @@ static void AnimFrenzyPlantRoot(struct Sprite *sprite) sFrenzyPlantRootData.targetY = targetY; } -static void AnimRootFlickerOut(struct Sprite* sprite) +static void AnimRootFlickerOut(struct Sprite *sprite) { if (++sprite->data[0] > (sprite->data[2] - 10)) sprite->invisible = sprite->data[0] % 2; @@ -2967,12 +4073,12 @@ static void AnimRootFlickerOut(struct Sprite* sprite) // arg 2: horizontal velocity // arg 3: wave amplitude // arg 4: duration -static void AnimIngrainOrb(struct Sprite* sprite) +static void AnimIngrainOrb(struct Sprite *sprite) { if (!sprite->data[0]) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; sprite->data[1] = gBattleAnimArgs[2]; sprite->data[2] = gBattleAnimArgs[3]; sprite->data[3] = gBattleAnimArgs[4]; @@ -2985,7 +4091,7 @@ static void AnimIngrainOrb(struct Sprite* sprite) DestroyAnimSprite(sprite); } -static void InitItemBagData(struct Sprite* sprite, s16 c) +static void InitItemBagData(struct Sprite *sprite, s16 c) { int a = (sprite->x << 8) | sprite->y; int b = (sprite->data[6] << 8) | sprite->data[7]; @@ -2995,7 +4101,7 @@ static void InitItemBagData(struct Sprite* sprite, s16 c) sprite->data[7] = c; } -bool8 moveAlongLinearPath(struct Sprite* sprite) +bool8 moveAlongLinearPath(struct Sprite *sprite) { u16 xStartPos = (u8)(sprite->data[5] >> 8); u16 yStartPos = (u8)sprite->data[5]; @@ -3026,7 +4132,7 @@ bool8 moveAlongLinearPath(struct Sprite* sprite) return FALSE; } -static void AnimItemSteal_Step2(struct Sprite* sprite) +static void AnimItemSteal_Step2(struct Sprite *sprite) { if (sprite->data[0] == 10) StartSpriteAffineAnim(sprite, 1); @@ -3036,7 +4142,7 @@ static void AnimItemSteal_Step2(struct Sprite* sprite) DestroyAnimSprite(sprite); } -static void AnimItemSteal_Step1(struct Sprite* sprite) +static void AnimItemSteal_Step1(struct Sprite *sprite) { sprite->data[0] += sprite->data[3] * 128 / sprite->data[4]; if (sprite->data[0] >= 128) @@ -3054,7 +4160,7 @@ static void AnimItemSteal_Step1(struct Sprite* sprite) } } -static void AnimPresent(struct Sprite* sprite) +static void AnimPresent(struct Sprite *sprite) { s16 targetX; s16 targetY; @@ -3080,7 +4186,7 @@ static void AnimPresent(struct Sprite* sprite) sprite->callback = AnimItemSteal_Step1; } -static void AnimKnockOffOpponentsItem(struct Sprite* sprite) +static void AnimKnockOffOpponentsItem(struct Sprite *sprite) { int zero; sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); @@ -3100,7 +4206,7 @@ static void AnimKnockOffOpponentsItem(struct Sprite* sprite) } } -static void AnimKnockOffItem(struct Sprite* sprite) +static void AnimKnockOffItem(struct Sprite *sprite) { s16 targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) @@ -3131,7 +4237,7 @@ static void AnimKnockOffItem(struct Sprite* sprite) // arg 1: initial y pixel offset // arg 2: vertical velocity // arg 3: unused -static void AnimPresentHealParticle(struct Sprite* sprite) +static void AnimPresentHealParticle(struct Sprite *sprite) { if (!sprite->data[0]) { @@ -3145,7 +4251,7 @@ static void AnimPresentHealParticle(struct Sprite* sprite) DestroyAnimSprite(sprite); } -static void AnimItemSteal(struct Sprite* sprite) +static void AnimItemSteal(struct Sprite *sprite) { s16 attackerX; s16 attackerY; @@ -3171,7 +4277,7 @@ static void AnimItemSteal(struct Sprite* sprite) sprite->callback = AnimItemSteal_Step3; } -static void AnimItemSteal_Step3(struct Sprite* sprite) +static void AnimItemSteal_Step3(struct Sprite *sprite) { int zero; sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); @@ -3184,21 +4290,21 @@ static void AnimItemSteal_Step3(struct Sprite* sprite) sprite->y2 = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); if (sprite->y2 == 0) - PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(63)); + PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(SOUND_PAN_TARGET)); if (moveAlongLinearPath(sprite)) { sprite->y2 = 0; sprite->data[0] = 0; sprite->callback = AnimItemSteal_Step2; - PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(-64)); + PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER)); } } // Moves a bag in a circular motion. // arg 0: y position // arg 1: initial wave offset -static void AnimTrickBag(struct Sprite* sprite) +static void AnimTrickBag(struct Sprite *sprite) { int a; int b; @@ -3235,7 +4341,7 @@ static void AnimTrickBag(struct Sprite* sprite) } } -static void AnimTrickBag_Step1(struct Sprite* sprite) +static void AnimTrickBag_Step1(struct Sprite *sprite) { switch (sprite->data[3]) { @@ -3265,7 +4371,7 @@ static void AnimTrickBag_Step1(struct Sprite* sprite) } } -static void AnimTrickBag_Step2(struct Sprite* sprite) +static void AnimTrickBag_Step2(struct Sprite *sprite) { if (sprite->data[2] == gTrickBagCoordinates[sprite->data[0]][1]) { @@ -3295,7 +4401,7 @@ static void AnimTrickBag_Step2(struct Sprite* sprite) } } -static void AnimTrickBag_Step3(struct Sprite* sprite) +static void AnimTrickBag_Step3(struct Sprite *sprite) { if (sprite->data[0] > 20) DestroyAnimSprite(sprite); @@ -3309,8 +4415,8 @@ void AnimTask_LeafBlade(u8 taskId) struct Task *task = &gTasks[taskId]; task->data[4] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1; - task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); task->data[10] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH); task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT); task->data[5] = (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) ? 1 : -1; @@ -3332,8 +4438,8 @@ void AnimTask_LeafBlade(u8 taskId) static void AnimTask_LeafBlade_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; - struct Sprite* sprite = &gSprites[task->data[2]]; + struct Task *task = &gTasks[taskId]; + struct Sprite *sprite = &gSprites[task->data[2]]; int a = task->data[0]; switch (a) { @@ -3515,7 +4621,7 @@ static void AnimTask_LeafBlade_Step(u8 taskId) } } -static s16 LeafBladeGetPosFactor(struct Sprite* sprite) +static s16 LeafBladeGetPosFactor(struct Sprite *sprite) { s16 var = 8; if (sprite->data[4] < sprite->y) @@ -3524,7 +4630,7 @@ static s16 LeafBladeGetPosFactor(struct Sprite* sprite) return var; } -static void AnimTask_LeafBlade_Step2(struct Task* task, u8 taskId) +static void AnimTask_LeafBlade_Step2(struct Task *task, u8 taskId) { task->data[14]++; if (task->data[14] > 0) @@ -3550,7 +4656,7 @@ static void AnimTask_LeafBlade_Step2(struct Task* task, u8 taskId) } } -static void AnimTask_LeafBlade_Step2_Callback(struct Sprite* sprite) +static void AnimTask_LeafBlade_Step2_Callback(struct Sprite *sprite) { sprite->data[0]++; if (sprite->data[0] > 1) @@ -3566,7 +4672,7 @@ static void AnimTask_LeafBlade_Step2_Callback(struct Sprite* sprite) } } -static void AnimFlyingParticle(struct Sprite* sprite) +static void AnimFlyingParticle(struct Sprite *sprite) { u8 battler; if (!gBattleAnimArgs[6]) @@ -3601,11 +4707,11 @@ static void AnimFlyingParticle(struct Sprite* sprite) sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; break; case 2: - sprite->y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[0]; sprite->oam.priority = GetBattlerSpriteBGPriority(battler); break; case 3: - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[0]; GetAnimBattlerSpriteId(ANIM_TARGET); sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; break; @@ -3614,7 +4720,7 @@ static void AnimFlyingParticle(struct Sprite* sprite) sprite->callback = AnimFlyingParticle_Step; } -static void AnimFlyingParticle_Step(struct Sprite* sprite) +static void AnimFlyingParticle_Step(struct Sprite *sprite) { int a = sprite->data[7]; sprite->data[7]++; @@ -3637,7 +4743,7 @@ static void AnimFlyingParticle_Step(struct Sprite* sprite) void AnimTask_CycleMagicalLeafPal(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch (task->data[0]) { case 0: @@ -3665,7 +4771,7 @@ void AnimTask_CycleMagicalLeafPal(u8 taskId) DestroyAnimVisualTask(taskId); } -static void AnimNeedleArmSpike(struct Sprite* sprite) +void AnimNeedleArmSpike(struct Sprite *sprite) { u8 a; u8 b; @@ -3681,13 +4787,13 @@ static void AnimNeedleArmSpike(struct Sprite* sprite) { if (gBattleAnimArgs[0] == 0) { - a = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - b = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + a = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + b = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); } else { - a = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - b = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } sprite->data[0] = gBattleAnimArgs[4]; @@ -3716,12 +4822,12 @@ static void AnimNeedleArmSpike(struct Sprite* sprite) if (IsContest()) c -= 0x8000; - TrySetSpriteRotScale(sprite, 0, 0x100, 0x100, c); + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, c); sprite->callback = AnimNeedleArmSpike_Step; } } -static void AnimNeedleArmSpike_Step(struct Sprite* sprite) +void AnimNeedleArmSpike_Step(struct Sprite *sprite) { if (sprite->data[0]) { @@ -3737,13 +4843,13 @@ static void AnimNeedleArmSpike_Step(struct Sprite* sprite) } } -static void AnimWhipHit_WaitEnd(struct Sprite* sprite) +static void AnimWhipHit_WaitEnd(struct Sprite *sprite) { if (sprite->animEnded) DestroyAnimSprite(sprite); } -static void AnimSlidingHit(struct Sprite* sprite) +static void AnimSlidingHit(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { @@ -3760,7 +4866,7 @@ static void AnimSlidingHit(struct Sprite* sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -static void AnimWhipHit(struct Sprite* sprite) +static void AnimWhipHit(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) StartSpriteAnim(sprite, 1); @@ -3770,7 +4876,7 @@ static void AnimWhipHit(struct Sprite* sprite) sprite->y += gBattleAnimArgs[1]; } -static void AnimFlickeringPunch(struct Sprite* sprite) +static void AnimFlickeringPunch(struct Sprite *sprite) { sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; @@ -3788,10 +4894,10 @@ static void AnimFlickeringPunch(struct Sprite* sprite) // arg 0: initial x pixel offset // arg 1: initial y pixel offset // arg 2: slice direction; 0 = right-to-left, 1 = left-to-right -static void AnimCuttingSlice(struct Sprite* sprite) +void AnimCuttingSlice(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) sprite->y += 8; @@ -3814,34 +4920,33 @@ static void AnimCuttingSlice(struct Sprite* sprite) sprite->data[1] = -sprite->data[1]; } -static void AnimAirCutterSlice(struct Sprite* sprite) +static void AnimAirCutterSlice(struct Sprite *sprite) { - u8 a; - u8 b; + u8 x, y; switch (gBattleAnimArgs[3]) { case 1: - a = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0); - b = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1); + x = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X); + y = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y); break; case 2: - a = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - b = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) { - a = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0) + a) / 2; - b = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1) + b) / 2; + x = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X) + x) / 2; + y = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y) + y) / 2; } break; case 0: default: - a = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - b = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); break; } - sprite->x = a; - sprite->y = b; + sprite->x = x; + sprite->y = y; if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) sprite->y += 8; @@ -3864,7 +4969,7 @@ static void AnimAirCutterSlice(struct Sprite* sprite) sprite->data[1] = -sprite->data[1]; } -static void AnimSlice_Step(struct Sprite* sprite) +static void AnimSlice_Step(struct Sprite *sprite) { sprite->data[3] += sprite->data[1]; sprite->data[4] += sprite->data[2]; @@ -3885,7 +4990,7 @@ static void AnimSlice_Step(struct Sprite* sprite) } } -static void UnusedFlickerAnim(struct Sprite* sprite) +static void UnusedFlickerAnim(struct Sprite *sprite) { if (sprite->data[2] > 1) { @@ -3918,7 +5023,7 @@ static void UnusedFlickerAnim(struct Sprite* sprite) } } -static void AnimCirclingMusicNote(struct Sprite* sprite) +static void AnimCirclingMusicNote(struct Sprite *sprite) { sprite->data[0] = gBattleAnimArgs[2]; if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) @@ -3934,7 +5039,7 @@ static void AnimCirclingMusicNote(struct Sprite* sprite) sprite->callback(sprite); } -static void AnimCirclingMusicNote_Step(struct Sprite* sprite) +static void AnimCirclingMusicNote_Step(struct Sprite *sprite) { sprite->x2 = Cos(sprite->data[0], 100); sprite->y2 = Sin(sprite->data[0], 20); @@ -3951,13 +5056,13 @@ static void AnimCirclingMusicNote_Step(struct Sprite* sprite) DestroyAnimSprite(sprite); } -static void AnimProtect(struct Sprite* sprite) +static void AnimProtect(struct Sprite *sprite) { if (IsContest()) gBattleAnimArgs[1] += 8; - sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest()) sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker) + 1; else @@ -4014,10 +5119,10 @@ static void AnimProtect_Step(struct Sprite *sprite) } } -static void AnimMilkBottle(struct Sprite* sprite) +static void AnimMilkBottle(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 0xFFE8; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 0xFFE8; sprite->data[0] = 0; sprite->data[1] = 0; sprite->data[2] = 0; @@ -4030,7 +5135,7 @@ static void AnimMilkBottle(struct Sprite* sprite) sprite->callback = AnimMilkBottle_Step1; } -static void AnimMilkBottle_Step1(struct Sprite* sprite) +static void AnimMilkBottle_Step1(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -4103,7 +5208,7 @@ static void AnimMilkBottle_Step1(struct Sprite* sprite) } } -static void AnimMilkBottle_Step2(struct Sprite* sprite, int unk1, int unk2) +static void AnimMilkBottle_Step2(struct Sprite *sprite, int unk1, int unk2) { if (sprite->data[3] <= 11) sprite->data[4] += 2; @@ -4124,7 +5229,7 @@ static void AnimMilkBottle_Step2(struct Sprite* sprite, int unk1, int unk2) sprite->data[3] = 0; } -static void AnimGrantingStars(struct Sprite* sprite) +void AnimGrantingStars(struct Sprite *sprite) { if (!gBattleAnimArgs[2]) SetSpriteCoordsToAnimAttackerCoords(sprite); @@ -4138,7 +5243,7 @@ static void AnimGrantingStars(struct Sprite* sprite) sprite->callback = TranslateSpriteLinearFixedPoint; } -static void AnimSparkingStars(struct Sprite* sprite) +static void AnimSparklingStars(struct Sprite *sprite) { u8 battler; if (!gBattleAnimArgs[2]) @@ -4156,13 +5261,13 @@ static void AnimSparkingStars(struct Sprite* sprite) { if (!gBattleAnimArgs[6]) { - sprite->x = GetBattlerSpriteCoord(battler, 0); - sprite->y = GetBattlerSpriteCoord(battler, 1) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + gBattleAnimArgs[1]; } else { - sprite->x = GetBattlerSpriteCoord(battler, 2); - sprite->y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; } SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); @@ -4175,7 +5280,7 @@ static void AnimSparkingStars(struct Sprite* sprite) sprite->callback = TranslateSpriteLinearFixedPoint; } -static void AnimBubbleBurst(struct Sprite* sprite) +static void AnimBubbleBurst(struct Sprite *sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) @@ -4193,7 +5298,7 @@ static void AnimBubbleBurst(struct Sprite* sprite) sprite->callback = AnimBubbleBurst_Step; } -static void AnimBubbleBurst_Step(struct Sprite* sprite) +static void AnimBubbleBurst_Step(struct Sprite *sprite) { if (++sprite->data[0] > 30) { @@ -4206,7 +5311,7 @@ static void AnimBubbleBurst_Step(struct Sprite* sprite) DestroyAnimSprite(sprite); } -static void AnimSleepLetterZ(struct Sprite* sprite) +static void AnimSleepLetterZ(struct Sprite *sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) @@ -4226,7 +5331,7 @@ static void AnimSleepLetterZ(struct Sprite* sprite) sprite->callback = AnimSleepLetterZ_Step; } -static void AnimSleepLetterZ_Step(struct Sprite* sprite) +static void AnimSleepLetterZ_Step(struct Sprite *sprite) { sprite->y2 = -(sprite->data[0] / 0x28); sprite->x2 = sprite->data[4] / 10; @@ -4236,7 +5341,7 @@ static void AnimSleepLetterZ_Step(struct Sprite* sprite) DestroySpriteAndMatrix(sprite); } -static void AnimLockOnTarget(struct Sprite* sprite) +static void AnimLockOnTarget(struct Sprite *sprite) { sprite->x -= 32; sprite->y -= 32; @@ -4245,7 +5350,7 @@ static void AnimLockOnTarget(struct Sprite* sprite) StoreSpriteCallbackInData6(sprite, AnimLockOnTarget_Step1); } -static void AnimLockOnTarget_Step1(struct Sprite* sprite) +static void AnimLockOnTarget_Step1(struct Sprite *sprite) { switch (sprite->data[5] & 1) { @@ -4265,14 +5370,14 @@ static void AnimLockOnTarget_Step1(struct Sprite* sprite) sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, AnimLockOnTarget_Step2); sprite->data[5] += 0x100; - PlaySE12WithPanning(SE_M_LOCK_ON, BattleAnimAdjustPanning(63)); + PlaySE12WithPanning(SE_M_LOCK_ON, BattleAnimAdjustPanning(SOUND_PAN_TARGET)); break; } sprite->data[5] ^= 1; } -static void AnimLockOnTarget_Step2(struct Sprite* sprite) +static void AnimLockOnTarget_Step2(struct Sprite *sprite) { if ((sprite->data[5] >> 8) == 4) { @@ -4286,7 +5391,7 @@ static void AnimLockOnTarget_Step2(struct Sprite* sprite) } } -static void AnimLockOnTarget_Step3(struct Sprite* sprite) +static void AnimLockOnTarget_Step3(struct Sprite *sprite) { s16 a; s16 b; @@ -4325,14 +5430,14 @@ static void AnimLockOnTarget_Step3(struct Sprite* sprite) sprite->y2 = 0; sprite->x2 = 0; sprite->data[0] = 6; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + a; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + b; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + a; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + b; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, AnimLockOnTarget_Step5); } } -static void AnimLockOnTarget_Step4(struct Sprite* sprite) +static void AnimLockOnTarget_Step4(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -4344,14 +5449,14 @@ static void AnimLockOnTarget_Step4(struct Sprite* sprite) sprite->data[1] = 0; } - BlendPalettes(GetBattleBgPalettesMask(1, 1, 1, 1, 1, 0, 0), sprite->data[1], RGB(31, 31, 31)); + BlendPalettes(GetBattlePalettesMask(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE), sprite->data[1], RGB(31, 31, 31)); if (sprite->data[1] == 16) { int pal; sprite->data[2]++; pal = sprite->oam.paletteNum; LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4); - PlaySE12WithPanning(SE_M_LEER, BattleAnimAdjustPanning(63)); + PlaySE12WithPanning(SE_M_LEER, BattleAnimAdjustPanning(SOUND_PAN_TARGET)); } else if (sprite->data[1] == 0) { @@ -4359,7 +5464,7 @@ static void AnimLockOnTarget_Step4(struct Sprite* sprite) } } -static void AnimLockOnTarget_Step5(struct Sprite* sprite) +static void AnimLockOnTarget_Step5(struct Sprite *sprite) { if ((u16)gBattleAnimArgs[7] == 0xFFFF) { @@ -4369,7 +5474,7 @@ static void AnimLockOnTarget_Step5(struct Sprite* sprite) } } -static void AnimLockOnTarget_Step6(struct Sprite* sprite) +static void AnimLockOnTarget_Step6(struct Sprite *sprite) { if (sprite->data[0] % 3 == 0) { @@ -4382,7 +5487,7 @@ static void AnimLockOnTarget_Step6(struct Sprite* sprite) DestroyAnimSprite(sprite); } -static void AnimLockOnMoveTarget(struct Sprite* sprite) +static void AnimLockOnMoveTarget(struct Sprite *sprite) { sprite->oam.affineParam = gBattleAnimArgs[0]; if ((s16)sprite->oam.affineParam == 1) @@ -4414,7 +5519,7 @@ static void AnimLockOnMoveTarget(struct Sprite* sprite) sprite->callback(sprite); } -static void AnimBowMon(struct Sprite* sprite) +static void AnimBowMon(struct Sprite *sprite) { sprite->invisible = TRUE; sprite->data[0] = 0; @@ -4435,17 +5540,17 @@ static void AnimBowMon(struct Sprite* sprite) } } -static void AnimBowMon_Step1(struct Sprite* sprite) +static void AnimBowMon_Step1(struct Sprite *sprite) { sprite->data[0] = 6; sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? 2 : -2; sprite->data[2] = 0; sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; StoreSpriteCallbackInData6(sprite, AnimBowMon_Step1_Callback); - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; } -static void AnimBowMon_Step1_Callback(struct Sprite* sprite) +static void AnimBowMon_Step1_Callback(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -4465,17 +5570,17 @@ static void AnimBowMon_Step1_Callback(struct Sprite* sprite) } } -static void AnimBowMon_Step2(struct Sprite* sprite) +static void AnimBowMon_Step2(struct Sprite *sprite) { sprite->data[0] = 4; sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? -3 : 3; sprite->data[2] = 0; sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; StoreSpriteCallbackInData6(sprite, AnimBowMon_Step4); - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; } -static void AnimBowMon_Step3(struct Sprite* sprite) +static void AnimBowMon_Step3(struct Sprite *sprite) { if (++sprite->data[0] > 8) { @@ -4484,7 +5589,7 @@ static void AnimBowMon_Step3(struct Sprite* sprite) } } -static void AnimBowMon_Step3_Callback(struct Sprite* sprite) +static void AnimBowMon_Step3_Callback(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -4512,7 +5617,7 @@ static void AnimBowMon_Step3_Callback(struct Sprite* sprite) } } -static void AnimBowMon_Step4(struct Sprite* sprite) +static void AnimBowMon_Step4(struct Sprite *sprite) { DestroyAnimSprite(sprite); } @@ -4691,7 +5796,7 @@ static void AnimTask_SkullBashPositionSet(u8 taskId) static void AnimTask_SkullBashPositionReset(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; if (task->data[3]) { task->data[4] -= task->data[5]; @@ -4706,17 +5811,17 @@ static void AnimTask_SkullBashPositionReset(u8 taskId) } } -static void AnimSlashSlice(struct Sprite* sprite) +static void AnimSlashSlice(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; } sprite->data[0] = 0; @@ -4725,25 +5830,25 @@ static void AnimSlashSlice(struct Sprite* sprite) sprite->callback = RunStoredCallbackWhenAnimEnds; } -static void AnimFalseSwipeSlice(struct Sprite* sprite) +static void AnimFalseSwipeSlice(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSlice_Step1); sprite->callback = RunStoredCallbackWhenAnimEnds; } -static void AnimFalseSwipePositionedSlice(struct Sprite* sprite) +static void AnimFalseSwipePositionedSlice(struct Sprite *sprite) { - sprite->x = sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0 + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0 + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); StartSpriteAnim(sprite, 1); sprite->data[0] = 0; sprite->data[1] = 0; sprite->callback = AnimFalseSwipeSlice_Step3; } -static void AnimFalseSwipeSlice_Step1(struct Sprite* sprite) +static void AnimFalseSwipeSlice_Step1(struct Sprite *sprite) { if (++sprite->data[0] > 8) { @@ -4755,14 +5860,14 @@ static void AnimFalseSwipeSlice_Step1(struct Sprite* sprite) } } -static void AnimFalseSwipeSlice_Step2(struct Sprite* sprite) +static void AnimFalseSwipeSlice_Step2(struct Sprite *sprite) { sprite->data[0] = 0; sprite->data[1] = 0; sprite->callback = AnimFalseSwipeSlice_Step3; } -static void AnimFalseSwipeSlice_Step3(struct Sprite* sprite) +static void AnimFalseSwipeSlice_Step3(struct Sprite *sprite) { if (++sprite->data[0] > 1) { @@ -4773,17 +5878,17 @@ static void AnimFalseSwipeSlice_Step3(struct Sprite* sprite) } } -static void AnimEndureEnergy(struct Sprite* sprite) +void AnimEndureEnergy(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[2]; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[2]; } sprite->data[0] = 0; @@ -4791,7 +5896,7 @@ static void AnimEndureEnergy(struct Sprite* sprite) sprite->callback = AnimEndureEnergy_Step; } -static void AnimEndureEnergy_Step(struct Sprite* sprite) +static void AnimEndureEnergy_Step(struct Sprite *sprite) { if (++sprite->data[0] > sprite->data[1]) { @@ -4804,20 +5909,20 @@ static void AnimEndureEnergy_Step(struct Sprite* sprite) DestroyAnimSprite(sprite); } -static void AnimSharpenSphere(struct Sprite* sprite) +static void AnimSharpenSphere(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - 12; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - 12; sprite->data[0] = 0; sprite->data[1] = 2; sprite->data[2] = 0; sprite->data[3] = 0; sprite->data[4] = 0; - sprite->data[5] = BattleAnimAdjustPanning(-64); + sprite->data[5] = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); sprite->callback = AnimSharpenSphere_Step; } -static void AnimSharpenSphere_Step(struct Sprite* sprite) +static void AnimSharpenSphere_Step(struct Sprite *sprite) { if (++sprite->data[0] >= sprite->data[1]) { @@ -4841,12 +5946,12 @@ static void AnimSharpenSphere_Step(struct Sprite* sprite) DestroyAnimSprite(sprite); } -static void AnimConversion(struct Sprite* sprite) +void AnimConversion(struct Sprite *sprite) { if (sprite->data[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; if (IsContest()) sprite->y += 10; @@ -4881,7 +5986,7 @@ void AnimTask_ConversionAlphaBlend(u8 taskId) } } -static void AnimConversion2(struct Sprite* sprite) +static void AnimConversion2(struct Sprite *sprite) { InitSpritePosToAnimTarget(sprite, FALSE); sprite->animPaused = 1; @@ -4889,7 +5994,7 @@ static void AnimConversion2(struct Sprite* sprite) sprite->callback = AnimConversion2_Step; } -static void AnimConversion2_Step(struct Sprite* sprite) +static void AnimConversion2_Step(struct Sprite *sprite) { if (sprite->data[0]) { @@ -4899,8 +6004,8 @@ static void AnimConversion2_Step(struct Sprite* sprite) { sprite->animPaused = 0; sprite->data[0] = 30; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -4944,7 +6049,7 @@ static void AnimTask_ShowBattlersHealthbox(u8 taskId) DestroyAnimVisualTask(taskId); } -static void AnimMoon(struct Sprite* sprite) +static void AnimMoon(struct Sprite *sprite) { if (IsContest()) { @@ -4963,15 +6068,15 @@ static void AnimMoon(struct Sprite* sprite) sprite->callback = AnimMoon_Step; } -static void AnimMoon_Step(struct Sprite* sprite) +static void AnimMoon_Step(struct Sprite *sprite) { if (sprite->data[0]) DestroyAnimSprite(sprite); } -static void AnimMoonlightSparkle(struct Sprite* sprite) +static void AnimMoonlightSparkle(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; sprite->y = gBattleAnimArgs[1]; sprite->data[0] = 0; sprite->data[1] = 0; @@ -4981,7 +6086,7 @@ static void AnimMoonlightSparkle(struct Sprite* sprite) sprite->callback = AnimMoonlightSparkle_Step; } -static void AnimMoonlightSparkle_Step(struct Sprite* sprite) +static void AnimMoonlightSparkle_Step(struct Sprite *sprite) { if (++sprite->data[1] > 1) { @@ -4999,7 +6104,7 @@ static void AnimMoonlightSparkle_Step(struct Sprite* sprite) void AnimTask_MoonlightEndFade(u8 taskId) { - int a = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; + int a = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) & 0xFFFF; int b; int c; int d; @@ -5016,7 +6121,7 @@ void AnimTask_MoonlightEndFade(u8 taskId) gTasks[taskId].data[9] = 15; b = GetBattleMonSpritePalettesMask(1, 1, 1, 1); c = a | b; - StorePointerInVars(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); + StorePointerInVars(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void *)c); b = b | (0x10000 << IndexOfSpritePaletteTag(ANIM_TAG_MOON)); d = IndexOfSpritePaletteTag(ANIM_TAG_GREEN_SPARKLE); BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 16, RGB(27, 29, 31)); @@ -5026,7 +6131,7 @@ void AnimTask_MoonlightEndFade(u8 taskId) static void AnimTask_MoonlightEndFade_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch (task->data[0]) { case 0: @@ -5102,7 +6207,7 @@ static void AnimTask_MoonlightEndFade_Step(u8 taskId) } } -static void AnimHornHit(struct Sprite* sprite) +static void AnimHornHit(struct Sprite *sprite) { if (gBattleAnimArgs[2] < 2) gBattleAnimArgs[2] = 2; @@ -5112,8 +6217,8 @@ static void AnimHornHit(struct Sprite* sprite) sprite->data[0] = 0; sprite->data[1] = gBattleAnimArgs[2]; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->data[6] = sprite->x; sprite->data[7] = sprite->y; if (IsContest()) @@ -5149,7 +6254,7 @@ static void AnimHornHit(struct Sprite* sprite) sprite->callback = AnimHornHit_Step; } -static void AnimHornHit_Step(struct Sprite* sprite) +static void AnimHornHit_Step(struct Sprite *sprite) { sprite->data[2] += sprite->data[3]; sprite->data[4] += sprite->data[5]; @@ -5171,7 +6276,7 @@ void AnimTask_DoubleTeam(u8 taskId) int obj; u16 r3; u16 r4; - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->data[1] = AllocSpritePalette(ANIM_TAG_BENT_SPOON); r3 = (task->data[1] * 16) + 0x100; @@ -5202,7 +6307,7 @@ void AnimTask_DoubleTeam(u8 taskId) static void AnimTask_DoubleTeam_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; if (!task->data[3]) { if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) @@ -5215,7 +6320,7 @@ static void AnimTask_DoubleTeam_Step(u8 taskId) } } -static void AnimDoubleTeam(struct Sprite* sprite) +static void AnimDoubleTeam(struct Sprite *sprite) { if (++sprite->data[3] > 1) { @@ -5226,7 +6331,7 @@ static void AnimDoubleTeam(struct Sprite* sprite) if (sprite->data[0] > 64) { gTasks[sprite->data[2]].data[3]--; - obj_delete_but_dont_free_vram(sprite); + DestroySpriteWithActiveSheet(sprite); } else { @@ -5237,7 +6342,7 @@ static void AnimDoubleTeam(struct Sprite* sprite) } } -static void AnimSuperFang(struct Sprite* sprite) +static void AnimSuperFang(struct Sprite *sprite) { StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); sprite->callback = RunStoredCallbackWhenAnimEnds; @@ -5280,92 +6385,100 @@ void AnimTask_MusicNotesClearRainbowBlend(u8 taskId) DestroyAnimVisualTask(taskId); } -static void AnimWavyMusicNotes(struct Sprite* sprite) +#define sMoveTimer data[0] +#define sBlendTableIdx data[1] +#define sBlendTimer data[2] +#define sBlendCycleTime data[3] +#define sX data[4] +#define sY data[5] +#define sVelocX data[6] +#define sVelocY data[7] + +static void AnimWavyMusicNotes(struct Sprite *sprite) { u8 index; - u8 a; - u8 b; + u8 x, y; SetSpriteCoordsToAnimAttackerCoords(sprite); StartSpriteAnim(sprite, gBattleAnimArgs[0]); if ((index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[1]][0])) != 0xFF) sprite->oam.paletteNum = index; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = 0; - sprite->data[3] = gBattleAnimArgs[2]; + sprite->sBlendTableIdx = gBattleAnimArgs[1]; + sprite->sBlendTimer = 0; + sprite->sBlendCycleTime = gBattleAnimArgs[2]; if (IsContest()) { - a = 48; - b = 40; + x = 48; + y = 40; } else { - a = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - b = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } - sprite->data[4] = sprite->x << 4; - sprite->data[5] = sprite->y << 4; - AnimWavyMusicNotesGetNextPos(a - sprite->x, b - sprite->y, &sprite->data[6], &sprite->data[7], 40); + sprite->sX = sprite->x << 4; + sprite->sY = sprite->y << 4; + AnimWavyMusicNotes_CalcVelocity(x - sprite->x, y - sprite->y, &sprite->sVelocX, &sprite->sVelocY, 40); sprite->callback = AnimWavyMusicNotes_Step; } -static void AnimWavyMusicNotesGetNextPos(s16 a, s16 b, s16* c, s16* d, s8 e) +static void AnimWavyMusicNotes_CalcVelocity(s16 x, s16 y, s16 *velocX, s16 *velocY, s8 xSpeedFactor) { - int f; - int g; - if (a < 0) - e = -e; + int x2; + int time; + if (x < 0) + xSpeedFactor = -xSpeedFactor; - f = a << 8; - g = f / e; - if (g == 0) - g = 1; + x2 = x * 256; + time = x2 / xSpeedFactor; + if (time == 0) + time = 1; - *c = f / g; - *d = (b << 8) / g; + *velocX = x2 / time; + *velocY = (y * 256) / time; } -static void AnimWavyMusicNotes_Step(struct Sprite* sprite) +static void AnimWavyMusicNotes_Step(struct Sprite *sprite) { - s16 y, yDelta; + s16 y, trigIdx; u8 index; - sprite->data[0]++; - yDelta = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); - sprite->data[4] += sprite->data[6]; - sprite->data[5] += sprite->data[7]; - sprite->x = sprite->data[4] >> 4; - sprite->y = sprite->data[5] >> 4; - sprite->y2 = Sin(yDelta, 15); + sprite->sMoveTimer++; + trigIdx = sprite->sMoveTimer * 5 - ((sprite->sMoveTimer * 5 / 256) << 8); + sprite->sX += sprite->sVelocX; + sprite->sY += sprite->sVelocY; + sprite->x = sprite->sX >> 4; + sprite->y = sprite->sY >> 4; + sprite->y2 = Sin(trigIdx, 15); y = sprite->y; - if (sprite->x < -16 || sprite->x > 256 || y < -16 || y > 128) + if (sprite->x < -16 || sprite->x > DISPLAY_WIDTH + 16 || y < -16 || y > DISPLAY_HEIGHT - 32) { DestroySpriteAndMatrix(sprite); } else { - if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) + if (sprite->sBlendCycleTime && ++sprite->sBlendTimer > sprite->sBlendCycleTime) { - sprite->data[2] = 0; - if (++sprite->data[1] > 3) - sprite->data[1] = 0; + sprite->sBlendTimer = 0; + if (++sprite->sBlendTableIdx > (int)ARRAY_COUNT(gParticlesColorBlendTable) - 1) + sprite->sBlendTableIdx = 0; - index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[sprite->data[1]][0]); + index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[sprite->sBlendTableIdx][0]); if (index != 0xFF) sprite->oam.paletteNum = index; } } } -static void AnimFlyingMusicNotes(struct Sprite* sprite) +static void AnimFlyingMusicNotes(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) gBattleAnimArgs[1] *= -1; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; StartSpriteAnim(sprite, gBattleAnimArgs[0]); sprite->data[2] = 0; sprite->data[3] = 0; @@ -5376,7 +6489,7 @@ static void AnimFlyingMusicNotes(struct Sprite* sprite) sprite->callback = AnimFlyingMusicNotes_Step; } -static void AnimFlyingMusicNotes_Step(struct Sprite* sprite) +static void AnimFlyingMusicNotes_Step(struct Sprite *sprite) { sprite->data[4] += sprite->data[6]; sprite->data[5] += sprite->data[7]; @@ -5395,7 +6508,7 @@ static void AnimFlyingMusicNotes_Step(struct Sprite* sprite) DestroySpriteAndMatrix(sprite); } -static void AnimBellyDrumHand(struct Sprite* sprite) +static void AnimBellyDrumHand(struct Sprite *sprite) { s16 a; if (gBattleAnimArgs[0] == 1) @@ -5408,14 +6521,14 @@ static void AnimBellyDrumHand(struct Sprite* sprite) a = -16; } - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + a; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 8; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + a; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 8; sprite->data[0] = 8; sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -void AnimSlowFlyingMusicNotes(struct Sprite* sprite) +void AnimSlowFlyingMusicNotes(struct Sprite *sprite) { s16 xDiff; u8 index; @@ -5437,7 +6550,7 @@ void AnimSlowFlyingMusicNotes(struct Sprite* sprite) sprite->callback = AnimSlowFlyingMusicNotes_Step; } -static void AnimSlowFlyingMusicNotes_Step(struct Sprite* sprite) +static void AnimSlowFlyingMusicNotes_Step(struct Sprite *sprite) { if (AnimTranslateLinear(sprite) == 0) { @@ -5456,19 +6569,19 @@ static void AnimSlowFlyingMusicNotes_Step(struct Sprite* sprite) } } -void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite) +void SetSpriteNextToMonHead(u8 battler, struct Sprite *sprite) { if (GetBattlerSide(battler) == B_SIDE_PLAYER) sprite->x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) + 8; else sprite->x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) - 8; - sprite->y = GetBattlerSpriteCoord(battler, 3) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; } -static void AnimThoughtBubble(struct Sprite* sprite) +void AnimThoughtBubble(struct Sprite *sprite) { - u8 a; + u8 animNum; u8 battler; if (gBattleAnimArgs[0] == 0) battler = gBattleAnimAttacker; @@ -5476,15 +6589,15 @@ static void AnimThoughtBubble(struct Sprite* sprite) battler = gBattleAnimTarget; SetSpriteNextToMonHead(battler, sprite); - a = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1; + animNum = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1; sprite->data[0] = gBattleAnimArgs[1]; - sprite->data[1] = a + 2; - StartSpriteAnim(sprite, a); + sprite->data[1] = animNum + 2; + StartSpriteAnim(sprite, animNum); StoreSpriteCallbackInData6(sprite, AnimThoughtBubble_Step); sprite->callback = RunStoredCallbackWhenAnimEnds; } -static void AnimThoughtBubble_Step(struct Sprite* sprite) +static void AnimThoughtBubble_Step(struct Sprite *sprite) { if (--sprite->data[0] == 0) { @@ -5494,7 +6607,7 @@ static void AnimThoughtBubble_Step(struct Sprite* sprite) } } -static void AnimMetronomeFinger(struct Sprite* sprite) +void AnimMetronomeFinger(struct Sprite *sprite) { u8 battler; if (gBattleAnimArgs[0] == 0) @@ -5508,7 +6621,7 @@ static void AnimMetronomeFinger(struct Sprite* sprite) sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } -static void AnimMetronomeFinger_Step(struct Sprite* sprite) +static void AnimMetronomeFinger_Step(struct Sprite *sprite) { if (++sprite->data[0] > 16) { @@ -5518,7 +6631,7 @@ static void AnimMetronomeFinger_Step(struct Sprite* sprite) } } -static void AnimFollowMeFinger(struct Sprite* sprite) +void AnimFollowMeFinger(struct Sprite *sprite) { u8 battler; if (gBattleAnimArgs[0] == 0) @@ -5526,7 +6639,7 @@ static void AnimFollowMeFinger(struct Sprite* sprite) else battler = gBattleAnimTarget; - sprite->x = GetBattlerSpriteCoord(battler, 0); + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); sprite->y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP); if (sprite->y <= 9) sprite->y = 10; @@ -5540,13 +6653,13 @@ static void AnimFollowMeFinger(struct Sprite* sprite) sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } -static void AnimFollowMeFinger_Step1(struct Sprite* sprite) +static void AnimFollowMeFinger_Step1(struct Sprite *sprite) { if (++sprite->data[4] > 12) sprite->callback = AnimFollowMeFinger_Step2; } -static void AnimFollowMeFinger_Step2(struct Sprite* sprite) +static void AnimFollowMeFinger_Step2(struct Sprite *sprite) { s16 x1, x2; @@ -5576,7 +6689,7 @@ static void AnimFollowMeFinger_Step2(struct Sprite* sprite) sprite->x2 = (x1 >> 3) + (x2 >> 1); } -static void AnimTauntFinger(struct Sprite* sprite) +static void AnimTauntFinger(struct Sprite *sprite) { u8 battler; if (gBattleAnimArgs[0] == 0) @@ -5599,7 +6712,7 @@ static void AnimTauntFinger(struct Sprite* sprite) sprite->callback = AnimTauntFinger_Step1; } -static void AnimTauntFinger_Step1(struct Sprite* sprite) +static void AnimTauntFinger_Step1(struct Sprite *sprite) { if (++sprite->data[1] > 10) { @@ -5610,8 +6723,129 @@ static void AnimTauntFinger_Step1(struct Sprite* sprite) } } -static void AnimTauntFinger_Step2(struct Sprite* sprite) +static void AnimTauntFinger_Step2(struct Sprite *sprite) { if (++sprite->data[1] > 5) DestroyAnimSprite(sprite); } + +// Animates a white streak by giving it a random rotation. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +static void AnimRockPolishStreak(struct Sprite *sprite) +{ + int affineAnimNum = Random2() % ARRAY_COUNT(gRockPolishStreak_AffineAnimCmds); + InitSpritePosToAnimAttacker(sprite, TRUE); + StartSpriteAffineAnim(sprite, affineAnimNum); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +// Places a blue sparkle that plays its default animation. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +static void AnimRockPolishSparkle(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +// Moves a projectile towards the center of the target mon. The sprite is rotated to look +// like it's traveling along that path. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +static void AnimPoisonJabProjectile(struct Sprite *sprite) +{ + s16 targetXPos; + s16 targetYPos; + u16 rotation; + + InitSpritePosToAnimTarget(sprite, TRUE); + targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + rotation = ArcTan2Neg(targetXPos - sprite->x, targetYPos - sprite->y); + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = targetXPos; + sprite->data[4] = targetYPos; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void AnimTask_BlendNightSlash(u8 taskId) +{ + int paletteOffset = IndexOfSpritePaletteTag(ANIM_TAG_SLASH) * 16 + 256; + BlendPalette(paletteOffset, 16, 6, RGB_RED); + DestroyAnimVisualTask(taskId); +} + +static void AnimNightSlash(struct Sprite *sprite) +{ + sprite->callback = AnimSlashSlice; + sprite->callback(sprite); +} + +static const union AffineAnimCmd sCompressTargetHorizontallyAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(64, 0, 0, 16), //Compress + AFFINEANIMCMD_FRAME(0, 0, 0, 64), + AFFINEANIMCMD_FRAME(-64, 0, 0, 16), + AFFINEANIMCMD_END, +}; + +static void AnimTask_CompressTargetStep(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + if (!RunAffineAnimFromTaskData(task)) + DestroyAnimVisualTask(taskId); +} + +void AnimTask_CompressTargetHorizontally(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + PrepareAffineAnimInTaskData(task, spriteId, sCompressTargetHorizontallyAffineAnimCmds); + task->func = AnimTask_CompressTargetStep; +} + +const struct SpriteTemplate gSteelBeamBigOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_STEEL_BEAM, + .paletteTag = ANIM_TAG_STEEL_BEAM, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSolarBeamBigOrb, +}; + +const struct SpriteTemplate gSteelBeamSmallOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_STEEL_BEAM, + .paletteTag = ANIM_TAG_STEEL_BEAM, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamSmallOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSolarBeamSmallOrb, +}; + +void AnimTask_CreateSmallSteelBeamOrbs(u8 taskId) +{ + if (--gTasks[taskId].data[0] == -1) + { + gTasks[taskId].data[1]++; + gTasks[taskId].data[0] = 6; + gBattleAnimArgs[0] = 15; + gBattleAnimArgs[1] = 0; + gBattleAnimArgs[2] = 80; + gBattleAnimArgs[3] = 0; + CreateSpriteAndAnimate(&gSteelBeamSmallOrbSpriteTemplate, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1); + } + + if (gTasks[taskId].data[1] == 15) + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 315d610897..7ce8979735 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -26,7 +26,6 @@ static void AnimMovingClamp_End(struct Sprite *); static void AnimKinesisZapEnergy(struct Sprite *); static void AnimSwordsDanceBlade(struct Sprite *); static void AnimSwordsDanceBlade_Step(struct Sprite *); -static void AnimSonicBoomProjectile(struct Sprite *); static void AnimAirWaveProjectile(struct Sprite *); static void AnimAirWaveProjectile_Step1(struct Sprite *sprite); static void AnimAirWaveProjectile_Step2(struct Sprite *sprite); @@ -46,12 +45,9 @@ static void AnimGuillotinePincer_Step1(struct Sprite *); static void AnimGuillotinePincer_Step2(struct Sprite *); static void AnimGuillotinePincer_Step3(struct Sprite *); static void AnimBreathPuff(struct Sprite *); -static void AnimAngerMark(struct Sprite *); static void AnimPencil(struct Sprite *); static void AnimPencil_Step(struct Sprite *); static void AnimBlendThinRing(struct Sprite *); -static void AnimHyperVoiceRing(struct Sprite *); -static void AnimUproarRing(struct Sprite *); static void AnimSoftBoiledEgg(struct Sprite *); static void AnimSoftBoiledEgg_Step1(struct Sprite *); static void AnimSoftBoiledEgg_Step2(struct Sprite *); @@ -62,14 +58,11 @@ static void AnimSoftBoiledEgg_Step4(struct Sprite *); static void AnimSoftBoiledEgg_Step4_Callback(struct Sprite *); static void AnimSpeedDust(struct Sprite *); static void AnimHealBellMusicNote(struct Sprite *); -static void AnimMagentaHeart(struct Sprite *); static void AnimRedHeartProjectile(struct Sprite *); static void AnimRedHeartProjectile_Step(struct Sprite *); static void AnimRedHeartRising(struct Sprite *); static void AnimRedHeartRising_Step(struct Sprite *); -static void AnimOrbitFast(struct Sprite *); static void AnimOrbitFast_Step(struct Sprite *); -static void AnimOrbitScatter(struct Sprite *); static void AnimOrbitScatter_Step(struct Sprite *); static void AnimSpitUpOrb(struct Sprite *); static void AnimSpitUpOrb_Step(struct Sprite *sprite); @@ -985,6 +978,28 @@ const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate = .callback = AnimOrbitScatter, }; +const struct SpriteTemplate gPowerGemOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_POWER_GEM, + .paletteTag = ANIM_TAG_POWER_GEM, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gHiddenPowerOrbAffineAnimTable, + .callback = AnimOrbitFast, +}; + +const struct SpriteTemplate gPowerGemOrbScatterSpriteTemplate = +{ + .tileTag = ANIM_TAG_POWER_GEM, + .paletteTag = ANIM_TAG_POWER_GEM, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gHiddenPowerOrbAffineAnimTable, + .callback = AnimOrbitScatter, +}; + const union AffineAnimCmd gSpitUpOrbAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), @@ -1210,7 +1225,6 @@ const union AffineAnimCmd *const gPerishSongMusicNoteAffineAnimTable[] = gPerishSongMusicNoteAffineAnimCmds3, }; -extern const union AnimCmd *const gMusicNotesAnimTable[]; const struct SpriteTemplate gPerishSongMusicNoteSpriteTemplate = { .tileTag = ANIM_TAG_MUSIC_NOTES_2, @@ -1262,20 +1276,52 @@ const struct SpriteTemplate gGuardRingSpriteTemplate = .callback = AnimGuardRing, }; +const struct SpriteTemplate gCrushGripExplosionTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_EXPLOSION, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gRoarOfTimeBombTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_WATER_GUN, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +#define sAmplitudeX data[1] +#define sCircleSpeed data[2] +#define sMoveSteps data[3] +#define sAmplitudeY data[4] + static void AnimCirclingFinger(struct Sprite *sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); sprite->y += gBattleAnimArgs[1]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->data[2] = gBattleAnimArgs[4]; - sprite->data[3] = gBattleAnimArgs[5]; - sprite->data[4] = gBattleAnimArgs[3]; + sprite->sAmplitudeX = gBattleAnimArgs[2]; + sprite->sCircleSpeed = gBattleAnimArgs[4]; + sprite->sMoveSteps = gBattleAnimArgs[5]; + sprite->sAmplitudeY = gBattleAnimArgs[3]; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback = TranslateSpriteInEllipse; sprite->callback(sprite); } +#undef sAmplitudeX +#undef sCircleSpeed +#undef sMoveSteps +#undef sAmplitudeY + static void AnimBouncingMusicNote(struct Sprite *sprite) { u8 battler; @@ -1329,8 +1375,8 @@ static void AnimVibrateBattlerBack_Step(struct Sprite *sprite) static void AnimVibrateBattlerBack(struct Sprite *sprite) { u8 spriteId; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); spriteId = gBattlerSpriteIds[gBattleAnimTarget]; if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) sprite->x -= gBattleAnimArgs[0]; @@ -1480,7 +1526,7 @@ static void AnimSwordsDanceBlade_Step(struct Sprite *sprite) // arg 2: target x pixel offset // arg 3: target y pixel offset // arg 4: duration -static void AnimSonicBoomProjectile(struct Sprite *sprite) +void AnimSonicBoomProjectile(struct Sprite *sprite) { s16 targetXPos; s16 targetYPos; @@ -1498,8 +1544,8 @@ static void AnimSonicBoomProjectile(struct Sprite *sprite) } InitSpritePosToAnimAttacker(sprite, TRUE); - targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; - targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; rotation = ArcTan2Neg(targetXPos - sprite->x, targetYPos - sprite->y); rotation += 0xF000; if (IsContest()) @@ -1524,7 +1570,7 @@ static void AnimAirWaveProjectile_Step2(struct Sprite *sprite) static void AnimAirWaveProjectile_Step1(struct Sprite *sprite) { - struct Task* task = &gTasks[sprite->data[7]]; + struct Task *task = &gTasks[sprite->data[7]]; if (sprite->data[0] > task->data[5]) { sprite->data[5] += sprite->data[3]; @@ -1561,7 +1607,7 @@ static void AnimAirWaveProjectile(struct Sprite *sprite) s16 b; s16 c; - struct Task* task = &gTasks[sprite->data[7]]; + struct Task *task = &gTasks[sprite->data[7]]; sprite->data[1] += (-2 & task->data[7]); sprite->data[2] += (-2 & task->data[8]); if (1 & task->data[7]) @@ -1632,7 +1678,7 @@ static void AirCutterProjectileStep1(u8 taskId) gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; gTasks[taskId].data[0] = gTasks[taskId].data[3]; gTasks[taskId].data[1]++; - PlaySE12WithPanning(SE_M_BLIZZARD2, BattleAnimAdjustPanning(-63)); + PlaySE12WithPanning(SE_M_BLIZZARD2, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER + 1)); if (gTasks[taskId].data[1] > 2) gTasks[taskId].func = AirCutterProjectileStep2; } @@ -1674,7 +1720,7 @@ void AnimTask_AirCutterProjectile(u8 taskId) if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) { - SetAverageBattlerPositions(gBattleAnimTarget, 0, &targetX, &targetY); + SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &targetX, &targetY); } else { @@ -1772,8 +1818,8 @@ static void AnimCoinThrow(struct Sprite *sprite) u16 var; InitSpritePosToAnimAttacker(sprite, TRUE); - r6 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - r7 = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + r6 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + r7 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; @@ -1828,8 +1874,8 @@ static void AnimBulletSeed_Step1(struct Sprite *sprite) { int i; u16 rand; - s16* ptr; - PlaySE12WithPanning(SE_M_HORN_ATTACK, BattleAnimAdjustPanning(63)); + s16 *ptr; + PlaySE12WithPanning(SE_M_HORN_ATTACK, BattleAnimAdjustPanning(SOUND_PAN_TARGET)); sprite->x += sprite->x2; sprite->y += sprite->y2; sprite->y2 = 0; @@ -1883,7 +1929,7 @@ static void AnimRazorWindTornado(struct Sprite *sprite) sprite->data[2] = gBattleAnimArgs[5]; sprite->data[3] = gBattleAnimArgs[6]; sprite->data[4] = gBattleAnimArgs[3]; - sprite->callback = TranslateSpriteInCircleOverDuration; + sprite->callback = TranslateSpriteInCircle; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); sprite->callback(sprite); } @@ -2025,7 +2071,7 @@ static void AnimTask_GrowAndGrayscale_Step(u8 taskId) // No args. void AnimTask_Minimize(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->data[0] = spriteId; PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); @@ -2041,7 +2087,7 @@ void AnimTask_Minimize(u8 taskId) static void AnimTask_Minimize_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch (task->data[1]) { case 0: @@ -2105,7 +2151,7 @@ static void AnimTask_Minimize_Step(u8 taskId) } } -static void CreateMinimizeSprite(struct Task* task, u8 taskId) +static void CreateMinimizeSprite(struct Task *task, u8 taskId) { u16 matrixNum; s16 spriteId = CloneBattlerSpriteWithBlend(ANIM_ATTACKER); @@ -2113,7 +2159,7 @@ static void CreateMinimizeSprite(struct Task* task, u8 taskId) { if ((matrixNum = AllocOamMatrix()) == 0xFF) { - obj_delete_but_dont_free_vram(&gSprites[spriteId]); + DestroySpriteWithActiveSheet(&gSprites[spriteId]); } else { @@ -2141,7 +2187,7 @@ static void ClonedMinizeSprite_Step(struct Sprite *sprite) { gTasks[sprite->data[1]].data[sprite->data[2]]--; FreeOamMatrix(sprite->oam.matrixNum); - obj_delete_but_dont_free_vram(sprite); + DestroySpriteWithActiveSheet(sprite); } } @@ -2150,7 +2196,7 @@ static void ClonedMinizeSprite_Step(struct Sprite *sprite) // arg 1: num hops void AnimTask_Splash(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; if (gBattleAnimArgs[1] == 0) { DestroyAnimVisualTask(taskId); @@ -2170,7 +2216,7 @@ void AnimTask_Splash(u8 taskId) static void AnimTask_Splash_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch (task->data[1]) { case 0: @@ -2224,7 +2270,7 @@ static void AnimTask_Splash_Step(u8 taskId) // No args. void AnimTask_GrowAndShrink(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); PrepareAffineAnimInTaskData(task, spriteId, gGrowAndShrinkAffineAnimCmds); task->func = AnimTask_GrowAndShrink_Step; @@ -2232,7 +2278,7 @@ void AnimTask_GrowAndShrink(u8 taskId) static void AnimTask_GrowAndShrink_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; if (!RunAffineAnimFromTaskData(task)) DestroyAnimVisualTask(taskId); } @@ -2268,7 +2314,7 @@ static void AnimBreathPuff(struct Sprite *sprite) // arg 0: target mon (0 = attacker, 1 = target) // arg 1: x pixel offset // arg 2: y pixel offset -static void AnimAngerMark(struct Sprite *sprite) +void AnimAngerMark(struct Sprite *sprite) { u8 battler; if (!gBattleAnimArgs[0]) @@ -2291,7 +2337,7 @@ static void AnimAngerMark(struct Sprite *sprite) // left/right movements void AnimTask_ThrashMoveMonHorizontal(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->data[0] = spriteId; task->data[1] = 0; @@ -2301,7 +2347,7 @@ void AnimTask_ThrashMoveMonHorizontal(u8 taskId) static void AnimTask_ThrashMoveMonHorizontal_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; if (!RunAffineAnimFromTaskData(task)) DestroyAnimVisualTask(taskId); } @@ -2309,7 +2355,7 @@ static void AnimTask_ThrashMoveMonHorizontal_Step(u8 taskId) // up/down movements void AnimTask_ThrashMoveMonVertical(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->data[1] = 0; task->data[2] = 4; @@ -2328,7 +2374,7 @@ void AnimTask_ThrashMoveMonVertical(u8 taskId) static void AnimTask_ThrashMoveMonVertical_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; if (++task->data[7] > 2) { task->data[7] = 0; @@ -2379,7 +2425,7 @@ static void AnimTask_ThrashMoveMonVertical_Step(u8 taskId) void AnimTask_SketchDrawMon(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; struct ScanlineEffectParams params; s16 i; @@ -2394,12 +2440,12 @@ void AnimTask_SketchDrawMon(u8 taskId) if (GetBattlerSpriteBGPriorityRank(gBattleAnimTarget) == 1) { task->data[6] = gBattle_BG1_X; - params.dmaDest = (u16 *)REG_ADDR_BG1HOFS; + params.dmaDest = ®_BG1HOFS; } else { task->data[6] = gBattle_BG2_X; - params.dmaDest = (u16 *)REG_ADDR_BG2HOFS; + params.dmaDest = ®_BG2HOFS; } for (i = task->data[0] - 0x40; i <= task->data[0]; i++) @@ -2420,7 +2466,7 @@ void AnimTask_SketchDrawMon(u8 taskId) static void AnimTask_SketchDrawMon_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch (task->data[4]) { @@ -2467,7 +2513,7 @@ static void AnimTask_SketchDrawMon_Step(u8 taskId) static void AnimPencil(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) - 16; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) - 16; sprite->y = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 16; sprite->data[0] = 0; sprite->data[1] = 0; @@ -2475,7 +2521,7 @@ static void AnimPencil(struct Sprite *sprite) sprite->data[3] = 16; sprite->data[4] = 0; sprite->data[5] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT) + 2; - sprite->data[6] = BattleAnimAdjustPanning(63); + sprite->data[6] = BattleAnimAdjustPanning(SOUND_PAN_TARGET); sprite->callback = AnimPencil_Step; } @@ -2555,9 +2601,9 @@ static void AnimBlendThinRing(struct Sprite *sprite) { SetAverageBattlerPositions(battler, r4, &sp0, &sp1); if (r4 == 0) - r4 = GetBattlerSpriteCoord(battler, 0); + r4 = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); else - r4 = GetBattlerSpriteCoord(battler, 2); + r4 = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); if (GetBattlerSide(battler) != B_SIDE_PLAYER) gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. @@ -2578,16 +2624,16 @@ static void AnimHyperVoiceRing_WaitEnd(struct Sprite *sprite) } } -static void AnimHyperVoiceRing(struct Sprite *sprite) +void AnimHyperVoiceRing(struct Sprite *sprite) { - u16 r9 = 0; - u16 r6 = 0; - s16 sp0 = 0; - s16 sp1 = 0; - u8 sp4; + u16 startX = 0; + u16 startY = 0; + s16 x = 0; + s16 y = 0; + u8 yCoordType; u8 battler1; u8 battler2; - u8 r10; + u8 xCoordType; if (gBattleAnimArgs[5] == 0) { @@ -2602,18 +2648,18 @@ static void AnimHyperVoiceRing(struct Sprite *sprite) if (!gBattleAnimArgs[6]) { - r10 = 0; - sp4 = 1; + xCoordType = BATTLER_COORD_X; + yCoordType = BATTLER_COORD_Y; } else { - r10 = 2; - sp4 = 3; + xCoordType = BATTLER_COORD_X_2; + yCoordType = BATTLER_COORD_Y_PIC_OFFSET; } if (GetBattlerSide(battler1) != B_SIDE_PLAYER) { - r9 = GetBattlerSpriteCoord(battler1, r10) + gBattleAnimArgs[0]; + startX = GetBattlerSpriteCoord(battler1, xCoordType) + gBattleAnimArgs[0]; if (IsBattlerSpriteVisible(BATTLE_PARTNER(battler2))) sprite->subpriority = gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler2)]].subpriority - 1; else @@ -2621,7 +2667,7 @@ static void AnimHyperVoiceRing(struct Sprite *sprite) } else { - r9 = GetBattlerSpriteCoord(battler1, r10) - gBattleAnimArgs[0]; + startX = GetBattlerSpriteCoord(battler1, xCoordType) - gBattleAnimArgs[0]; if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler1))) { if (gSprites[gBattlerSpriteIds[battler1]].x < gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler1)]].x) @@ -2636,34 +2682,34 @@ static void AnimHyperVoiceRing(struct Sprite *sprite) } - r6 = GetBattlerSpriteCoord(battler1, sp4) + gBattleAnimArgs[1]; + startY = GetBattlerSpriteCoord(battler1, yCoordType) + gBattleAnimArgs[1]; if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler2))) { - SetAverageBattlerPositions(battler2, gBattleAnimArgs[6], &sp0, &sp1); + SetAverageBattlerPositions(battler2, gBattleAnimArgs[6], &x, &y); } else { - sp0 = GetBattlerSpriteCoord(battler2, r10); - sp1 = GetBattlerSpriteCoord(battler2, sp4); + x = GetBattlerSpriteCoord(battler2, xCoordType); + y = GetBattlerSpriteCoord(battler2, yCoordType); } if (GetBattlerSide(battler2)) - sp0 += gBattleAnimArgs[3]; + x += gBattleAnimArgs[3]; else - sp0 -= gBattleAnimArgs[3]; + x -= gBattleAnimArgs[3]; - sp1 += gBattleAnimArgs[4]; - sprite->x = sprite->data[1] = r9; - sprite->y = sprite->data[3] = r6; - sprite->data[2] = sp0; - sprite->data[4] = sp1; + y += gBattleAnimArgs[4]; + sprite->x = sprite->data[1] = startX; + sprite->y = sprite->data[3] = startY; + sprite->data[2] = x; + sprite->data[4] = y; sprite->data[0] = gBattleAnimArgs[0]; InitAnimLinearTranslation(sprite); sprite->callback = AnimHyperVoiceRing_WaitEnd; sprite->callback(sprite); } -static void AnimUproarRing(struct Sprite *sprite) +void AnimUproarRing(struct Sprite *sprite) { u8 index = IndexOfSpritePaletteTag(ANIM_TAG_THIN_RING); if (index != 0xFF) @@ -2781,7 +2827,7 @@ static void AnimSoftBoiledEgg_Step4_Callback(struct Sprite *sprite) // Used by Extremespeed void AnimTask_AttackerStretchAndDisappear(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->data[0] = spriteId; PrepareAffineAnimInTaskData(task, spriteId, gStretchAttackerAffineAnimCmds); @@ -2790,7 +2836,7 @@ void AnimTask_AttackerStretchAndDisappear(u8 taskId) static void AnimTask_AttackerStretchAndDisappear_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; if (!RunAffineAnimFromTaskData(task)) { gSprites[task->data[0]].y2 = 0; @@ -2801,7 +2847,7 @@ static void AnimTask_AttackerStretchAndDisappear_Step(u8 taskId) void AnimTask_ExtremeSpeedImpact(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; task->data[0] = 0; task->data[1] = 0; task->data[2] = 0; @@ -2824,7 +2870,7 @@ void AnimTask_ExtremeSpeedImpact(u8 taskId) static void AnimTask_ExtremeSpeedImpact_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch (task->data[0]) { @@ -2870,7 +2916,7 @@ static void AnimTask_ExtremeSpeedImpact_Step(u8 taskId) void AnimTask_ExtremeSpeedMonReappear(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; task->data[0] = 0; task->data[1] = 0; task->data[2] = 0; @@ -2884,7 +2930,7 @@ void AnimTask_ExtremeSpeedMonReappear(u8 taskId) static void AnimTask_ExtremeSpeedMonReappear_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; if (task->data[0] == 0 && ++task->data[1] > task->data[4]) { task->data[1] = 0; @@ -2912,7 +2958,7 @@ static void AnimTask_ExtremeSpeedMonReappear_Step(u8 taskId) void AnimTask_SpeedDust(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; task->data[0] = 0; task->data[1] = 4; task->data[2] = 0; @@ -2923,14 +2969,14 @@ void AnimTask_SpeedDust(u8 taskId) task->data[7] = 0; task->data[8] = 0; task->data[13] = 0; - task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_ATTACKER); - task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_TARGET); + task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); task->func = AnimTask_SpeedDust_Step; } static void AnimTask_SpeedDust_Step(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch (task->data[8]) { case 0: @@ -3033,9 +3079,7 @@ void AnimTask_FreeMusicNotesPals(u8 taskId) static void SetMusicNotePalette(struct Sprite *sprite, u8 a, u8 b) { - u8 tile; - tile = (b & 1); - tile = ((-tile | tile) >> 31) & 32; + u8 tile = (b & 1) ? 32 : 0; sprite->oam.tileNum += tile + (a << 2); sprite->oam.paletteNum = IndexOfSpritePaletteTag(sMusicNotePaletteTagsTable[b >> 1]); } @@ -3047,14 +3091,14 @@ static void AnimHealBellMusicNote(struct Sprite *sprite) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[3]; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); SetMusicNotePalette(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); } -static void AnimMagentaHeart(struct Sprite *sprite) +void AnimMagentaHeart(struct Sprite *sprite) { if (++sprite->data[0] == 1) InitSpritePosToAnimAttacker(sprite, FALSE); @@ -3106,7 +3150,7 @@ static void AnimTask_FakeOut_Step2(u8 taskId) { gTasks[taskId].data[11] = 0x88; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_LIGHTEN); - BlendPalettes(GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31)); + BlendPalettes(GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), 16, RGB(31, 31, 31)); } else if (gTasks[taskId].data[10] > 4) { @@ -3165,9 +3209,9 @@ static void AnimRedHeartProjectile(struct Sprite *sprite) InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = 95; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); sprite->callback = AnimRedHeartProjectile_Step; } @@ -3249,9 +3293,9 @@ void AnimTask_HeartsBackground(u8 taskId) SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); GetBattleAnimBg1Data(&animBg); - AnimLoadCompressedBgGfx(animBg.bgId, &gBattleAnimBgImage_Attract, animBg.tilesOffset); - AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_Attract, 0); - LoadCompressedPalette(&gBattleAnimBgPalette_Attract, animBg.paletteId * 16, 32); + AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Attract, animBg.tilesOffset); + AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Attract, FALSE); + LoadCompressedPalette(gBattleAnimBgPalette_Attract, animBg.paletteId * 16, 32); gTasks[taskId].func = AnimTask_HeartsBackground_Step; } @@ -3328,11 +3372,11 @@ void AnimTask_ScaryFace(u8 taskId) SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); GetBattleAnimBg1Data(&animBg); if (IsContest()) - AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceContest, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceContest, FALSE); else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) - AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFacePlayer, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFacePlayer, FALSE); else - AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceOpponent, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceOpponent, FALSE); AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_ScaryFace, animBg.tilesOffset); LoadCompressedPalette(gBattleAnimBgPalette_ScaryFace, animBg.paletteId * 16, 32); @@ -3400,10 +3444,10 @@ static void AnimTask_ScaryFace_Step(u8 taskId) // Used by MOVE_HIDDEN_POWER // arg 0: duration // arg 1: initial wave offset -static void AnimOrbitFast(struct Sprite *sprite) +void AnimOrbitFast(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->affineAnimPaused = 1; sprite->data[0] = gBattleAnimArgs[0]; sprite->data[1] = gBattleAnimArgs[1]; @@ -3451,10 +3495,10 @@ static void AnimOrbitFast_Step(struct Sprite *sprite) // Moves orbs away from the mon, based on where they are in their orbit. // Used in MOVE_HIDDEN_POWER. // arg 0: initial wave offset -static void AnimOrbitScatter(struct Sprite *sprite) +void AnimOrbitScatter(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] = Sin(gBattleAnimArgs[0], 10); sprite->data[1] = Cos(gBattleAnimArgs[0], 7); sprite->callback = AnimOrbitScatter_Step; @@ -3464,7 +3508,7 @@ static void AnimOrbitScatter_Step(struct Sprite *sprite) { sprite->x2 += sprite->data[0]; sprite->y2 += sprite->data[1]; - if (sprite->x + sprite->x2 + 16 > ((u32)DISPLAY_WIDTH + 32) + if (sprite->x + sprite->x2 + 16 > ((u32)DISPLAY_WIDTH + 32) || sprite->y + sprite->y2 > DISPLAY_HEIGHT || sprite->y + sprite->y2 < -16) DestroyAnimSprite(sprite); } @@ -3479,8 +3523,8 @@ static void AnimSpitUpOrb_Step(struct Sprite *sprite) static void AnimSpitUpOrb(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] = Sin(gBattleAnimArgs[0], 10); sprite->data[1] = Cos(gBattleAnimArgs[0], 7); sprite->data[2] = gBattleAnimArgs[1]; @@ -3617,13 +3661,13 @@ static void AnimMovementWaves(struct Sprite *sprite) { if (!gBattleAnimArgs[0]) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } if (!gBattleAnimArgs[1]) @@ -3671,8 +3715,8 @@ static void AnimJaggedMusicNote(struct Sprite *sprite) if (GetBattlerSide(battler) == B_SIDE_OPPONENT) gBattleAnimArgs[1] *= -1; - sprite->x = GetBattlerSpriteCoord(battler, 2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; sprite->data[0] = 0; sprite->data[1] = (u16)sprite->x << 3; sprite->data[2] = (u16)sprite->y << 3; @@ -3710,7 +3754,7 @@ static void AnimPerishSongMusicNote2(struct Sprite *sprite) } if (++sprite->data[0] == sprite->data[1]) - SetGrayscaleOrOriginalPalette(sprite->oam.paletteNum + 16, 0); + SetGrayscaleOrOriginalPalette(sprite->oam.paletteNum + 16, FALSE); if (sprite->data[0] == sprite->data[1] + 80) DestroyAnimSprite(sprite); @@ -3782,8 +3826,7 @@ static void AnimPerishSongMusicNote_Step2(struct Sprite *sprite) if (sprite->data[4] > 3) { - int var1 = sprite->data[2]; - sprite->invisible = var1 - (((s32)(var1 + ((u32)var1 >> 31)) >> 1) << 1); + sprite->invisible = sprite->data[2] % 2; DestroyAnimSprite(sprite); } @@ -3797,15 +3840,15 @@ static void AnimGuardRing(struct Sprite *sprite) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) { - SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->x, &sprite->y); + SetAverageBattlerPositions(gBattleAnimAttacker, FALSE, &sprite->x, &sprite->y); sprite->y += 40; StartSpriteAffineAnim(sprite, 1); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 40; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 40; } sprite->data[0] = 13; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 4ddfdd651f..3b9a9a8f8e 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -22,15 +22,14 @@ #include "constants/rgb.h" #include "constants/songs.h" #include "constants/weather.h" +#include "constants/hold_effects.h" extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate; -static void AnimBlackSmoke(struct Sprite *); static void AnimBlackSmoke_Step(struct Sprite *); static void AnimWhiteHalo(struct Sprite *); static void AnimWhiteHalo_Step1(struct Sprite *); static void AnimWhiteHalo_Step2(struct Sprite *); -static void AnimTealAlert(struct Sprite *); static void AnimMeanLookEye(struct Sprite *); static void AnimMeanLookEye_Step1(struct Sprite *); static void AnimMeanLookEye_Step2(struct Sprite *); @@ -62,14 +61,11 @@ static void AnimGreenStar_Step1(struct Sprite *); static void AnimGreenStar_Step2(struct Sprite *); static void AnimGreenStar_Callback(struct Sprite *); static void AnimWeakFrustrationAngerMark(struct Sprite *); -static void AnimSweetScentPetal(struct Sprite *); static void AnimSweetScentPetal_Step(struct Sprite *); static void AnimPainSplitProjectile(struct Sprite *); static void AnimFlatterConfetti(struct Sprite *); static void AnimFlatterConfetti_Step(struct Sprite *); static void AnimFlatterSpotlight(struct Sprite *); -static void AnimFlatterSpotlight_Step(struct Sprite *); -static void AnimReversalOrb(struct Sprite *); static void AnimReversalOrb_Step(struct Sprite *); static void AnimYawnCloud(struct Sprite *); static void AnimYawnCloud_Step(struct Sprite *); @@ -78,7 +74,6 @@ static void AnimFacadeSweatDrop(struct Sprite *); static void AnimRoarNoiseLine(struct Sprite *); static void AnimRoarNoiseLine_Step(struct Sprite *); static void AnimGlareEyeDot(struct Sprite *); -static void AnimAssistPawprint(struct Sprite *); static void AnimSmellingSaltsHand(struct Sprite *); static void AnimSmellingSaltsHand_Step(struct Sprite *); static void AnimSmellingSaltExclamation(struct Sprite *); @@ -89,7 +84,6 @@ static void AnimForesightMagnifyingGlass(struct Sprite *); static void AnimForesightMagnifyingGlass_Step(struct Sprite *); static void AnimMeteorMashStar(struct Sprite *); static void AnimMeteorMashStar_Step(struct Sprite *sprite); -static void AnimBlockX(struct Sprite *); static void AnimBlockX_Step(struct Sprite *); static void AnimUnusedItemBagSteal(struct Sprite *); static void AnimKnockOffStrike(struct Sprite *); @@ -258,6 +252,17 @@ const struct SpriteTemplate gSpikesSpriteTemplate = .callback = AnimSpikes, }; +const struct SpriteTemplate gToxicSpikesSpriteTemplate = +{ + .tileTag = ANIM_TAG_TOXIC_SPIKES, + .paletteTag = ANIM_TAG_TOXIC_SPIKES, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpikes, +}; + const union AnimCmd gLeerAnimCmds[] = { ANIMCMD_FRAME(0, 3), @@ -718,7 +723,7 @@ const struct SpriteTemplate gSweetScentPetalSpriteTemplate = .callback = AnimSweetScentPetal, }; -static const u16 sUnusedPalette[] = INCBIN_U16("graphics/battle_anims/unused.gbapal"); +static const u16 sUnusedPalette[] = INCBIN_U16("graphics/battle_anims/unused/unknown.gbapal"); const union AnimCmd gPainSplitAnimCmds[] = { @@ -1179,7 +1184,95 @@ const union AffineAnimCmd gSlackOffSquishAffineAnimCmds[] = AFFINEANIMCMD_END, }; -static void AnimBlackSmoke(struct Sprite *sprite) +const struct SpriteTemplate gMegaStoneSpriteTemplate = +{ + .tileTag = ANIM_TAG_MEGA_STONE, + .paletteTag = ANIM_TAG_MEGA_STONE, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_LusterPurgeCircle, + .callback = AnimSpriteOnMonPos, +}; + +const struct SpriteTemplate gMegaParticlesSpriteTemplate = +{ + .tileTag = ANIM_TAG_MEGA_PARTICLES, + .paletteTag = ANIM_TAG_MEGA_PARTICLES, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb, +}; + +const struct SpriteTemplate gMegaSymbolSpriteTemplate = +{ + .tileTag = ANIM_TAG_MEGA_SYMBOL, + .paletteTag = ANIM_TAG_MEGA_SYMBOL, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGhostStatusSprite, +}; + +const struct SpriteTemplate gAlphaStoneSpriteTemplate = +{ + .tileTag = ANIM_TAG_ALPHA_STONE, + .paletteTag = ANIM_TAG_ALPHA_STONE, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_LusterPurgeCircle, + .callback = AnimSpriteOnMonPos, +}; + +const struct SpriteTemplate gOmegaStoneSpriteTemplate = +{ + .tileTag = ANIM_TAG_OMEGA_STONE, + .paletteTag = ANIM_TAG_OMEGA_STONE, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_LusterPurgeCircle, + .callback = AnimSpriteOnMonPos, +}; + +const struct SpriteTemplate gPrimalParticlesSpriteTemplate = +{ + .tileTag = ANIM_TAG_PRIMAL_PARTICLES, + .paletteTag = ANIM_TAG_PRIMAL_PARTICLES, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb, +}; + +const struct SpriteTemplate gAlphaSymbolSpriteTemplate = +{ + .tileTag = ANIM_TAG_ALPHA_SYMBOL, + .paletteTag = ANIM_TAG_ALPHA_SYMBOL, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGhostStatusSprite, +}; + +const struct SpriteTemplate gOmegaSymbolSpriteTemplate = +{ + .tileTag = ANIM_TAG_OMEGA_SYMBOL, + .paletteTag = ANIM_TAG_OMEGA_SYMBOL, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGhostStatusSprite, +}; + +void AnimBlackSmoke(struct Sprite *sprite) { sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; @@ -1211,9 +1304,9 @@ static void AnimBlackSmoke_Step(struct Sprite *sprite) void AnimTask_SmokescreenImpact(u8 taskId) { SmokescreenImpact( - GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 8, - GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 8, - 0); + GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 8, + GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 8, + FALSE); DestroyAnimVisualTask(taskId); } @@ -1244,11 +1337,11 @@ static void AnimWhiteHalo_Step2(struct Sprite *sprite) DestroyAnimSprite(sprite); } -static void AnimTealAlert(struct Sprite *sprite) +void AnimTealAlert(struct Sprite *sprite) { u16 rotation; - u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitSpritePosToAnimTarget(sprite, TRUE); @@ -1608,8 +1701,8 @@ static void AnimClappingHand(struct Sprite *sprite) { if (gBattleAnimArgs[3] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); } sprite->x += gBattleAnimArgs[0]; @@ -1646,7 +1739,7 @@ static void AnimClappingHand_Step(struct Sprite *sprite) sprite->data[2]++; if (sprite->data[3] == 0) { - PlaySE1WithPanning(SE_M_ENCORE, BattleAnimAdjustPanning(-64)); + PlaySE1WithPanning(SE_M_ENCORE, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER)); } } } @@ -1710,13 +1803,13 @@ static void AnimRapidSpin(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); } sprite->y2 = gBattleAnimArgs[2]; @@ -1896,8 +1989,8 @@ void AnimTask_TormentAttacker(u8 taskId) task->data[0] = 0; task->data[1] = 0; - task->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + task->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); task->data[4] = 32; task->data[5] = -20; task->data[6] = 0; @@ -1930,7 +2023,7 @@ static void TormentAttacker_Step(u8 taskId) y = task->data[3] + task->data[5]; spriteId = CreateSprite(&gThoughtBubbleSpriteTemplate, x, y, 6 - task->data[1]); - PlaySE12WithPanning(SE_M_METRONOME, BattleAnimAdjustPanning(-64)); + PlaySE12WithPanning(SE_M_METRONOME, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER)); if (spriteId != MAX_SPRITES) { @@ -2038,8 +2131,8 @@ static void AnimTriAttackTriangle(struct Sprite *sprite) sprite->x2 = 0; sprite->y2 = 0; sprite->data[0] = 20; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; } } @@ -2066,8 +2159,8 @@ static void AnimBatonPassPokeball(struct Sprite *sprite) switch (sprite->data[0]) { case 0: - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); sprite->data[1] = 256; sprite->data[2] = 256; @@ -2107,7 +2200,7 @@ static void AnimWishStar(struct Sprite *sprite) if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) sprite->x = -16; else - sprite->x = 256; + sprite->x = DISPLAY_WIDTH + 16; sprite->y = 0; sprite->callback = AnimWishStar_Step; @@ -2136,7 +2229,7 @@ static void AnimWishStar_Step(struct Sprite *sprite) } newX = sprite->x + sprite->x2 + 32; - if (newX > 304) + if (newX > DISPLAY_WIDTH + 64) DestroyAnimSprite(sprite); } @@ -2222,7 +2315,7 @@ static void AnimSwallowBlueOrb(struct Sprite *sprite) case 0: InitSpritePosToAnimAttacker(sprite, FALSE); sprite->data[1] = 0x900; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0]++; break; case 1: @@ -2282,11 +2375,11 @@ void AnimTask_TransformMon(u8 taskId) } break; case 2: - HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]); - sub_80A6BFC(&animBg, gBattleAnimAttacker); + HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1]); + GetBgDataForTransform(&animBg, gBattleAnimAttacker); if (IsContest()) - position = 0; + position = B_POSITION_PLAYER_LEFT; else position = GetBattlerPosition(gBattleAnimAttacker); @@ -2369,7 +2462,7 @@ void AnimTask_IsMonInvisible(u8 taskId) void AnimTask_CastformGfxDataChange(u8 taskId) { - HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE); + HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE, FALSE); DestroyAnimVisualTask(taskId); } @@ -2388,7 +2481,7 @@ void AnimTask_MorningSunLightBeam(u8 taskId) SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); GetBattleAnimBg1Data(&animBg); - AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimMaskTilemap_LightBeam, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimMaskTilemap_LightBeam, FALSE); if (IsContest()) { gBattle_BG1_X = -56; @@ -2411,7 +2504,7 @@ void AnimTask_MorningSunLightBeam(u8 taskId) gTasks[taskId].data[11] = gBattle_BG1_Y; gTasks[taskId].data[0]++; - PlaySE12WithPanning(SE_M_MORNING_SUN, BattleAnimAdjustPanning(-64)); + PlaySE12WithPanning(SE_M_MORNING_SUN, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER)); break; case 1: if (gTasks[taskId].data[4]++ > 0) @@ -2446,7 +2539,7 @@ void AnimTask_MorningSunLightBeam(u8 taskId) { gTasks[taskId].data[3] = 0; gTasks[taskId].data[0] = 1; - PlaySE12WithPanning(SE_M_MORNING_SUN, BattleAnimAdjustPanning(-64)); + PlaySE12WithPanning(SE_M_MORNING_SUN, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER)); } break; case 4: @@ -2476,8 +2569,8 @@ static void AnimGreenStar(struct Sprite *sprite) if (xOffset > 31) xOffset = 32 - xOffset; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + xOffset; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + xOffset; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 32; sprite->data[1] = gBattleAnimArgs[0]; sprite->data[2] = gBattleAnimArgs[1]; @@ -2569,7 +2662,7 @@ void AnimTask_DoomDesireLightBeam(u8 taskId) SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); GetBattleAnimBg1Data(&animBg); - AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimMaskTilemap_LightBeam, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimMaskTilemap_LightBeam, FALSE); if (IsContest()) { gBattle_BG1_X = -56; @@ -2677,7 +2770,7 @@ static void AnimWeakFrustrationAngerMark(struct Sprite *sprite) { if (sprite->data[0] == 0) { - InitSpritePosToAnimAttacker(sprite, 0); + InitSpritePosToAnimAttacker(sprite, FALSE); sprite->data[0]++; } else if (sprite->data[0]++ > 20) @@ -2798,7 +2891,7 @@ static void AnimTask_RockMonBackAndForth_Step(u8 taskId) // arg 0: initial y pixel offset // arg 1: sprite anim num // arg 2: unused -static void AnimSweetScentPetal(struct Sprite *sprite) +void AnimSweetScentPetal(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) { @@ -3104,7 +3197,7 @@ static void AnimFlatterSpotlight(struct Sprite *sprite) sprite->callback = AnimFlatterSpotlight_Step; } -static void AnimFlatterSpotlight_Step(struct Sprite *sprite) +void AnimFlatterSpotlight_Step(struct Sprite *sprite) { switch (sprite->data[1]) { @@ -3138,7 +3231,7 @@ static void AnimFlatterSpotlight_Step(struct Sprite *sprite) // Spins an orb around the attacking mon, while its path radius grows and shrinks. // arg 0: duration // arg 1: initial wave offset -static void AnimReversalOrb(struct Sprite *sprite) +void AnimReversalOrb(struct Sprite *sprite) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); @@ -3183,7 +3276,7 @@ static void AnimReversalOrb_Step(struct Sprite *sprite) // Copies the target mon's sprite, and makes a white silhouette that shrinks away. void AnimTask_RolePlaySilhouette(u8 taskId) { - u8 isBackPic; + bool8 isBackPic; u32 personality; u32 otId; u16 species; @@ -3206,7 +3299,7 @@ void AnimTask_RolePlaySilhouette(u8 taskId) { if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { - isBackPic = 0; + isBackPic = FALSE; personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY); otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_OT_ID); if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE) @@ -3226,7 +3319,7 @@ void AnimTask_RolePlaySilhouette(u8 taskId) } else { - isBackPic = 1; + isBackPic = TRUE; personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY); otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_OT_ID); if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE) @@ -3246,8 +3339,8 @@ void AnimTask_RolePlaySilhouette(u8 taskId) } } - coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); spriteId = CreateAdditionalMonSpriteForMoveAnim(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget); gSprites[spriteId].oam.priority = priority; @@ -3717,6 +3810,26 @@ void AnimTask_SlideMonForFocusBand(u8 taskId) gTasks[taskId].func = AnimTask_SlideMonForFocusBand_Step1; } +#define IDX_ACTIVE_SPRITES 2 // Used by the sprite callback to modify the number of active sprites + +// Task data for AnimTask_SquishAndSweatDroplets +#define tState data[0] +#define tTimer data[1] +#define tActiveSprites data[IDX_ACTIVE_SPRITES] +#define tNumSquishes data[3] +#define tBaseX data[4] +#define tBaseY data[5] +#define tSubpriority data[6] +// data[7]-data[15] used by PrepareAffineAnimInTaskData +#define tBattlerSpriteId data[15] + +// Sprite data for AnimFacadeSweatDrop +#define sTimer data[0] +#define sVelocX data[1] +#define sVelocY data[2] +#define sTaskId data[3] +#define sActiveSpritesIdx data[4] + // Squishes the mon vertically and emits sweat droplets a few times. // arg 0: battler // arg 1: num squishes @@ -3728,20 +3841,20 @@ void AnimTask_SquishAndSweatDroplets(u8 taskId) if (!gBattleAnimArgs[1]) DestroyAnimVisualTask(taskId); - task->data[0] = 0; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = gBattleAnimArgs[1]; + task->tState = 0; + task->tTimer = 0; + task->tActiveSprites = 0; + task->tNumSquishes = gBattleAnimArgs[1]; if (gBattleAnimArgs[0] == ANIM_ATTACKER) battler = gBattleAnimAttacker; else battler = gBattleAnimTarget; - task->data[4] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); - task->data[5] = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y); - task->data[6] = GetBattlerSpriteSubpriority(battler); - task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - PrepareAffineAnimInTaskData(task, task->data[15], gFacadeSquishAffineAnimCmds); + task->tBaseX = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); + task->tBaseY = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y); + task->tSubpriority = GetBattlerSpriteSubpriority(battler); + task->tBattlerSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + PrepareAffineAnimInTaskData(task, task->tBattlerSpriteId, gFacadeSquishAffineAnimCmds); task->func = AnimTask_SquishAndSweatDroplets_Step; } @@ -3749,37 +3862,40 @@ static void AnimTask_SquishAndSweatDroplets_Step(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: - task->data[1]++; - if (task->data[1] == 6) + task->tTimer++; + if (task->tTimer == 6) CreateSweatDroplets(taskId, TRUE); - if (task->data[1] == 18) + if (task->tTimer == 18) CreateSweatDroplets(taskId, FALSE); if (!RunAffineAnimFromTaskData(task)) { - if (--task->data[3] == 0) + if (--task->tNumSquishes == 0) { - task->data[0]++; + // Animation is finished + task->tState++; } else { - task->data[1] = 0; - PrepareAffineAnimInTaskData(task, task->data[15], gFacadeSquishAffineAnimCmds); + // Animation continues, more droplet sprites to create + task->tTimer = 0; + PrepareAffineAnimInTaskData(task, task->tBattlerSpriteId, gFacadeSquishAffineAnimCmds); } } break; case 1: - if (task->data[2] == 0) + // Wait for sprites to be destroyed before ending task + if (task->tActiveSprites == 0) DestroyAnimVisualTask(taskId); break; } } -static void CreateSweatDroplets(u8 taskId, bool8 arg1) +static void CreateSweatDroplets(u8 taskId, bool8 lowerDroplets) { u8 i; s8 xOffset, yOffset; @@ -3788,7 +3904,7 @@ static void CreateSweatDroplets(u8 taskId, bool8 arg1) s16 yCoords[2]; task = &gTasks[taskId]; - if (!arg1) + if (!lowerDroplets) { xOffset = 18; yOffset = -20; @@ -3799,39 +3915,54 @@ static void CreateSweatDroplets(u8 taskId, bool8 arg1) yOffset = 20; } - xCoords[0] = task->data[4] - xOffset; - xCoords[1] = task->data[4] - xOffset - 4; - xCoords[2] = task->data[4] + xOffset; - xCoords[3] = task->data[4] + xOffset + 4; - yCoords[0] = task->data[5] + yOffset; - yCoords[1] = task->data[5] + yOffset + 6; + xCoords[0] = task->tBaseX - xOffset; + xCoords[1] = task->tBaseX - xOffset - 4; + xCoords[2] = task->tBaseX + xOffset; + xCoords[3] = task->tBaseX + xOffset + 4; + yCoords[0] = task->tBaseY + yOffset; + yCoords[1] = task->tBaseY + yOffset + 6; for (i = 0; i < 4; i++) { - u8 spriteId = CreateSprite(&gFacadeSweatDropSpriteTemplate, xCoords[i], yCoords[i & 1], task->data[6] - 5); + u8 spriteId = CreateSprite(&gFacadeSweatDropSpriteTemplate, xCoords[i], yCoords[i & 1], task->tSubpriority - 5); if (spriteId != MAX_SPRITES) { - gSprites[spriteId].data[0] = 0; - gSprites[spriteId].data[1] = i < 2 ? -2 : 2; - gSprites[spriteId].data[2] = -1; - gSprites[spriteId].data[3] = taskId; - gSprites[spriteId].data[4] = 2; - task->data[2]++; + gSprites[spriteId].sTimer = 0; + gSprites[spriteId].sVelocX = i < 2 ? -2 : 2; // First two travel left, remaining travel right + gSprites[spriteId].sVelocY = -1; + gSprites[spriteId].sTaskId = taskId; + gSprites[spriteId].sActiveSpritesIdx = IDX_ACTIVE_SPRITES; + task->tActiveSprites++; } } } static void AnimFacadeSweatDrop(struct Sprite *sprite) { - sprite->x += sprite->data[1]; - sprite->y += sprite->data[2]; - if (++sprite->data[0] > 6) + sprite->x += sprite->sVelocX; + sprite->y += sprite->sVelocY; + if (++sprite->sTimer > 6) { - gTasks[sprite->data[3]].data[sprite->data[4]]--; + gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--; DestroySprite(sprite); } } +#undef IDX_ACTIVE_SPRITES +#undef tState +#undef tTimer +#undef tActiveSprites +#undef tNumSquishes +#undef tBaseX +#undef tBaseY +#undef tSubpriority +#undef tBattlerSpriteId +#undef sTimer +#undef sVelocX +#undef sVelocY +#undef sTaskId +#undef sActiveSpritesIdx + // Blends the mon sprite's color with a rotating set of colors. // arg 0: battler // arg 1: duration @@ -3927,6 +4058,26 @@ static void AnimRoarNoiseLine_Step(struct Sprite *sprite) DestroyAnimSprite(sprite); } +#define IDX_ACTIVE_SPRITES 10 // Used by the sprite callback to modify the number of active sprites + +// Task data for AnimTask_GlareEyeDots +#define tState data[0] +#define tTimer data[1] +#define tPairNum data[2] +#define tPairMax data[5] +#define tDotOffset data[6] +#define tIsContest data[7] +#define tActiveSprites data[IDX_ACTIVE_SPRITES] +#define tStartX data[11] +#define tStartY data[12] +#define tEndX data[13] +#define tEndY data[14] + +// Sprite data for AnimGlareEyeDot +#define sTimer data[0] +#define sTaskId data[1] +#define sActiveSpritesIdx data[2] + // Makes a series of dots in a trail from the attacker to the target. // arg 0: unused void AnimTask_GlareEyeDots(u8 taskId) @@ -3935,25 +4086,25 @@ void AnimTask_GlareEyeDots(u8 taskId) if (IsContest()) { - task->data[5] = 8; - task->data[6] = 3; - task->data[7] = 1; + task->tPairMax = 8; + task->tDotOffset = 3; + task->tIsContest = TRUE; } else { - task->data[5] = 12; - task->data[6] = 3; - task->data[7] = 0; + task->tPairMax = 12; + task->tDotOffset = 3; + task->tIsContest = FALSE; } if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) - task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; + task->tStartX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; else - task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; + task->tStartX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; - task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; - task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + task->tStartY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; + task->tEndX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->tEndY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); task->func = AnimTask_GlareEyeDots_Step; } @@ -3963,110 +4114,129 @@ static void AnimTask_GlareEyeDots_Step(u8 taskId) s16 x, y; struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: - if (++task->data[1] > 3) + // Wait to create next pair of dots + if (++task->tTimer > 3) { - task->data[1] = 0; + task->tTimer = 0; GetGlareEyeDotCoords( - task->data[11], - task->data[12], - task->data[13], - task->data[14], - task->data[5], - task->data[2], + task->tStartX, + task->tStartY, + task->tEndX, + task->tEndY, + task->tPairMax, + task->tPairNum, &x, &y); + // Create dot pair for (i = 0; i < 2; i++) { u8 spriteId = CreateSprite(&gGlareEyeDotSpriteTemplate, x, y, 35); if (spriteId != MAX_SPRITES) { - if (task->data[7] == 0) + if (!task->tIsContest) { if (i == 0) - gSprites[spriteId].x2 = gSprites[spriteId].y2 = -task->data[6]; + gSprites[spriteId].x2 = gSprites[spriteId].y2 = -task->tDotOffset; else - gSprites[spriteId].x2 = gSprites[spriteId].y2 = task->data[6]; + gSprites[spriteId].x2 = gSprites[spriteId].y2 = task->tDotOffset; } else { if (i == 0) { - gSprites[spriteId].x2 = -task->data[6]; - gSprites[spriteId].y2 = task->data[6]; + gSprites[spriteId].x2 = -task->tDotOffset; + gSprites[spriteId].y2 = task->tDotOffset; } else { - gSprites[spriteId].x2 = task->data[6]; - gSprites[spriteId].y2 = -task->data[6]; + gSprites[spriteId].x2 = task->tDotOffset; + gSprites[spriteId].y2 = -task->tDotOffset; } } - gSprites[spriteId].data[0] = 0; - gSprites[spriteId].data[1] = taskId; - gSprites[spriteId].data[2] = 10; - task->data[10]++; + gSprites[spriteId].sTimer = 0; + gSprites[spriteId].sTaskId = taskId; + gSprites[spriteId].sActiveSpritesIdx = IDX_ACTIVE_SPRITES; + task->tActiveSprites++; } } - if (task->data[2] == task->data[5]) - task->data[0]++; + if (task->tPairNum == task->tPairMax) + task->tState++; - task->data[2]++; + task->tPairNum++; } break; case 1: - if (task->data[10] == 0) + // Wait for sprites to be destroyed before ending task + if (task->tActiveSprites == 0) DestroyAnimVisualTask(taskId); break; } } -static void GetGlareEyeDotCoords(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y) +static void GetGlareEyeDotCoords(s16 startX, s16 startY, s16 endX, s16 endY, u8 pairMax, u8 pairNum, s16 *x, s16 *y) { int x2; int y2; - if (arg5 == 0) + if (pairNum == 0) { - *x = arg0; - *y = arg1; + *x = startX; + *y = startY; return; } - if (arg5 >= arg4) + if (pairNum >= pairMax) { - *x = arg2; - *y = arg3; + *x = endX; + *y = endY; return; } - arg4--; - x2 = (arg0 << 8) + arg5 * (((arg2 - arg0) << 8) / arg4); - y2 = (arg1 << 8) + arg5 * (((arg3 - arg1) << 8) / arg4); + pairMax--; + x2 = (startX << 8) + pairNum * (((endX - startX) << 8) / pairMax); + y2 = (startY << 8) + pairNum * (((endY - startY) << 8) / pairMax); *x = x2 >> 8; *y = y2 >> 8; } static void AnimGlareEyeDot(struct Sprite *sprite) { - if (++sprite->data[0] > 36) + if (++sprite->sTimer > 36) { - gTasks[sprite->data[1]].data[sprite->data[2]]--; + gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--; DestroySprite(sprite); } } +#undef IDX_ACTIVE_SPRITES +#undef tState +#undef tTimer +#undef tPairNum +#undef tPairMax +#undef tDotOffset +#undef tIsContest +#undef tActiveSprites +#undef tStartX +#undef tStartY +#undef tEndX +#undef tEndY +#undef sTimer +#undef sTaskId +#undef sActiveSpritesIdx + // Moves a pawprint in a straight line. // arg 0: initial x position // arg 1: initial y position // arg 2: destination x position // arg 3: destination y position // arg 4: duration -static void AnimAssistPawprint(struct Sprite *sprite) +void AnimAssistPawprint(struct Sprite *sprite) { sprite->x = gBattleAnimArgs[0]; sprite->y = gBattleAnimArgs[1]; @@ -4165,7 +4335,7 @@ static void AnimSmellingSaltsHand(struct Sprite *sprite) sprite->oam.tileNum += 16; sprite->data[6] = gBattleAnimArgs[2]; sprite->data[7] = gBattleAnimArgs[1] == 0 ? -1 : 1; - sprite->y = GetBattlerSpriteCoord(battler, 3); + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET); if (gBattleAnimArgs[1] == 0) { sprite->oam.matrixNum |= ST_OAM_HFLIP; @@ -4280,12 +4450,12 @@ static void AnimSmellingSaltExclamation(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP); } @@ -4426,9 +4596,9 @@ void AnimTask_HelpingHandAttackerMovement(u8 taskId) { if (IsDoubleBattle() == TRUE) { - int x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - int y = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimAttacker), 0); - if (x > y) + int attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + int partnerX = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X); + if (attackerX > partnerX) task->data[14] = 1; else task->data[14] = -1; @@ -4566,24 +4736,24 @@ static void AnimForesightMagnifyingGlass_Step(struct Sprite *sprite) sprite->data[6] = 0; case 0: case 4: - x = GetBattlerSpriteCoordAttr(sprite->data[7], 5) - 4; - y = GetBattlerSpriteCoordAttr(sprite->data[7], 3) - 4; + x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_RIGHT) - 4; + y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_BOTTOM) - 4; break; case 1: - x = GetBattlerSpriteCoordAttr(sprite->data[7], 5) - 4; - y = GetBattlerSpriteCoordAttr(sprite->data[7], 2) + 4; + x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_RIGHT) - 4; + y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_TOP) + 4; break; case 2: - x = GetBattlerSpriteCoordAttr(sprite->data[7], 4) + 4; - y = GetBattlerSpriteCoordAttr(sprite->data[7], 3) - 4; + x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_LEFT) + 4; + y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_BOTTOM) - 4; break; case 3: - x = GetBattlerSpriteCoordAttr(sprite->data[7], 4) + 4; - y = GetBattlerSpriteCoordAttr(sprite->data[7], 2) - 4; + x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_LEFT) + 4; + y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_TOP) - 4; break; case 5: - x = GetBattlerSpriteCoord(sprite->data[7], 2); - y = GetBattlerSpriteCoord(sprite->data[7], 3); + x = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_X_2); + y = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_Y_PIC_OFFSET); break; } @@ -4655,6 +4825,17 @@ static void AnimForesightMagnifyingGlass_Step(struct Sprite *sprite) } } +const struct SpriteTemplate gDracoMeteorSmashSpriteTemplate = +{ + .tileTag = ANIM_TAG_WARM_ROCK, + .paletteTag = ANIM_TAG_WARM_ROCK, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMeteorMashStar, +}; + static void AnimMeteorMashStar_Step(struct Sprite *sprite) { sprite->x2 = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4]; @@ -4730,7 +4911,7 @@ void AnimTask_MonToSubstitute(u8 taskId) } else { - LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, 0, spriteId); + LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, FALSE, spriteId); if (IsContest()) { gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gAffineAnims_BattleSpriteContest; @@ -4768,7 +4949,7 @@ static void AnimTask_MonToSubstituteDoll(u8 taskId) if (gSprites[spriteId].y2 == 0) { - PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(-64)); + PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER)); gTasks[taskId].data[10] -= 0x800; gTasks[taskId].data[0]++; } @@ -4790,7 +4971,7 @@ static void AnimTask_MonToSubstituteDoll(u8 taskId) if (gSprites[spriteId].y2 == 0) { - PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(-64)); + PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER)); DestroyAnimVisualTask(taskId); } break; @@ -4799,7 +4980,7 @@ static void AnimTask_MonToSubstituteDoll(u8 taskId) // Moves down an X that flickers and disappears. // No args. -static void AnimBlockX(struct Sprite *sprite) +void AnimBlockX(struct Sprite *sprite) { s16 y; @@ -4814,7 +4995,7 @@ static void AnimBlockX(struct Sprite *sprite) y = -96; } - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->y2 = y; sprite->callback = AnimBlockX_Step; } @@ -4827,7 +5008,7 @@ static void AnimBlockX_Step(struct Sprite *sprite) sprite->y2 += 10; if (sprite->y2 >= 0) { - PlaySE12WithPanning(SE_M_SKETCH, BattleAnimAdjustPanning(63)); + PlaySE12WithPanning(SE_M_SKETCH, BattleAnimAdjustPanning(SOUND_PAN_TARGET)); sprite->y2 = 0; sprite->data[0]++; } @@ -4837,7 +5018,7 @@ static void AnimBlockX_Step(struct Sprite *sprite) sprite->y2 = -(gSineTable[sprite->data[1]] >> 3); if (sprite->data[1] > 0x7F) { - PlaySE12WithPanning(SE_M_SKETCH, BattleAnimAdjustPanning(63)); + PlaySE12WithPanning(SE_M_SKETCH, BattleAnimAdjustPanning(SOUND_PAN_TARGET)); sprite->data[1] = 0; sprite->y2 = 0; sprite->data[0]++; @@ -4856,7 +5037,7 @@ static void AnimBlockX_Step(struct Sprite *sprite) case 3: if (++sprite->data[1] > 8) { - PlaySE12WithPanning(SE_M_LEER, BattleAnimAdjustPanning(63)); + PlaySE12WithPanning(SE_M_LEER, BattleAnimAdjustPanning(SOUND_PAN_TARGET)); sprite->data[1] = 0; sprite->data[0]++; } @@ -4896,7 +5077,7 @@ void AnimTask_OdorSleuthMovement(u8 taskId) spriteId2 = CloneBattlerSpriteWithBlend(ANIM_TARGET); if (spriteId2 < 0) { - obj_delete_but_dont_free_vram(&gSprites[spriteId1]); + DestroySpriteWithActiveSheet(&gSprites[spriteId1]); DestroyAnimVisualTask(taskId); return; } @@ -4974,7 +5155,7 @@ static void MoveOdorSleuthClone(struct Sprite *sprite) if (sprite->data[5] < 0) { gTasks[sprite->data[6]].data[sprite->data[7]]--; - obj_delete_but_dont_free_vram(sprite); + DestroySpriteWithActiveSheet(sprite); } } break; @@ -5020,7 +5201,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) gTasks[taskId].data[1] &= 0xFF; x = gSprites[spriteId].x + gSprites[spriteId].x2; - if ((u16)(x + 32) > 304) + if (x < -32 || x > DISPLAY_WIDTH + 32) { gTasks[taskId].data[1] = 0; gTasks[taskId].data[0]++; @@ -5103,7 +5284,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) } } - if ((u16)(x + 32) > 304) + if (x < -32 || x > DISPLAY_WIDTH + 32) { gTasks[taskId].data[1] = 0; gTasks[taskId].data[0]++; @@ -5150,7 +5331,7 @@ static void AnimUnusedItemBagSteal(struct Sprite *sprite) case 0: if (gBattleAnimArgs[7] == -1) { - PlaySE12WithPanning(SE_M_VITAL_THROW, BattleAnimAdjustPanning(63)); + PlaySE12WithPanning(SE_M_VITAL_THROW, BattleAnimAdjustPanning(SOUND_PAN_TARGET)); sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 16; sprite->data[0] = -32; sprite->data[7]++; @@ -5420,14 +5601,16 @@ static void AnimRecycle_Step(struct Sprite *sprite) void AnimTask_GetWeather(u8 taskId) { + bool32 utilityUmbrellaAffected = GetBattlerHoldEffect(gBattleAnimAttacker, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA; + gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_NONE; - if (gWeatherMoveAnim & WEATHER_SUN_ANY) + if (gWeatherMoveAnim & B_WEATHER_SUN && !utilityUmbrellaAffected) gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SUN; - else if (gWeatherMoveAnim & WEATHER_RAIN_ANY) + else if (gWeatherMoveAnim & B_WEATHER_RAIN && !utilityUmbrellaAffected) gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_RAIN; - else if (gWeatherMoveAnim & WEATHER_SANDSTORM_ANY) + else if (gWeatherMoveAnim & B_WEATHER_SANDSTORM) gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SANDSTORM; - else if (gWeatherMoveAnim & WEATHER_HAIL_ANY) + else if (gWeatherMoveAnim & B_WEATHER_HAIL) gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_HAIL; DestroyAnimVisualTask(taskId); diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c index 8a2469d09b..aee824b39c 100644 --- a/src/battle_anim_electric.c +++ b/src/battle_anim_electric.c @@ -4,34 +4,27 @@ #include "trig.h" #include "constants/songs.h" #include "sound.h" +#include "constants/moves.h" static void AnimLightning(struct Sprite *); static void AnimLightning_Step(struct Sprite *); static void AnimUnusedSpinningFist(struct Sprite *); static void AnimUnusedSpinningFist_Step(struct Sprite *); static void AnimUnusedCirclingShock(struct Sprite *); -static void AnimSparkElectricity(struct Sprite *); -static void AnimZapCannonSpark(struct Sprite *); static void AnimZapCannonSpark_Step(struct Sprite *); static void AnimThunderboltOrb(struct Sprite *); static void AnimThunderboltOrb_Step(struct Sprite *); -static void AnimSparkElectricityFlashing(struct Sprite *); static void AnimSparkElectricityFlashing_Step(struct Sprite *); -static void AnimElectricity(struct Sprite *); static void AnimTask_ElectricBolt_Step(u8 taskId); static void AnimElectricBoltSegment(struct Sprite *); -static void AnimThunderWave(struct Sprite *); static void AnimThunderWave_Step(struct Sprite *); static void AnimTask_ElectricChargingParticles_Step(u8 taskId); static void AnimElectricChargingParticles(struct Sprite *); static void AnimElectricChargingParticles_Step(struct Sprite *); -static void AnimGrowingChargeOrb(struct Sprite *); -static void AnimElectricPuff(struct Sprite *); static void AnimVoltTackleOrbSlide(struct Sprite *); static void AnimVoltTackleOrbSlide_Step(struct Sprite *); static bool8 CreateVoltTackleBolt(struct Task *task, u8 taskId); static void AnimVoltTackleBolt(struct Sprite *); -static void AnimGrowingShockWaveOrb(struct Sprite *); static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId); static void AnimShockWaveProgressingBolt(struct Sprite *); static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId); @@ -144,7 +137,7 @@ static const union AffineAnimCmd sAffineAnim_FlashingSpark[] = AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd *const sAffineAnims_FlashingSpark[] = +const union AffineAnimCmd *const gAffineAnims_FlashingSpark[] = { sAffineAnim_FlashingSpark, }; @@ -156,7 +149,7 @@ const struct SpriteTemplate gZapCannonSparkSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_FlashingSpark, + .affineAnims = gAffineAnims_FlashingSpark, .callback = AnimZapCannonSpark, }; @@ -168,7 +161,7 @@ static const union AnimCmd sAnim_ThunderboltOrb[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAnims_ThunderboltOrb[] = +const union AnimCmd *const gAnims_ThunderboltOrb[] = { sAnim_ThunderboltOrb, }; @@ -191,7 +184,7 @@ const struct SpriteTemplate gThunderboltOrbSpriteTemplate = .tileTag = ANIM_TAG_SHOCK_3, .paletteTag = ANIM_TAG_SHOCK_3, .oam = &gOamData_AffineNormal_ObjNormal_32x32, - .anims = sAnims_ThunderboltOrb, + .anims = gAnims_ThunderboltOrb, .images = NULL, .affineAnims = sAffineAnims_ThunderboltOrb, .callback = AnimThunderboltOrb, @@ -204,7 +197,7 @@ const struct SpriteTemplate gSparkElectricityFlashingSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_FlashingSpark, + .affineAnims = gAffineAnims_FlashingSpark, .callback = AnimSparkElectricityFlashing, }; @@ -241,6 +234,17 @@ const struct SpriteTemplate gThunderWaveSpriteTemplate = .callback = AnimThunderWave, }; +const struct SpriteTemplate gAnchorShotChainTemplate = +{ + .tileTag = ANIM_TAG_CHAIN_LINK, + .paletteTag = ANIM_TAG_CHAIN_LINK, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThunderWave +}; + static const s8 sElectricChargingParticleCoordOffsets[][2] = { { 58, -60}, @@ -279,7 +283,7 @@ static const union AnimCmd sAnim_ElectricChargingParticles_1[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_ElectricChargingParticles[] = +const union AnimCmd *const gAnims_ElectricChargingParticles[] = { sAnim_ElectricChargingParticles_0, sAnim_ElectricChargingParticles_1, @@ -290,12 +294,23 @@ const struct SpriteTemplate gElectricChargingParticlesSpriteTemplate = .tileTag = ANIM_TAG_ELECTRIC_ORBS, .paletteTag = ANIM_TAG_ELECTRIC_ORBS, .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = sAnims_ElectricChargingParticles, + .anims = gAnims_ElectricChargingParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; +const struct SpriteTemplate gLightOfRuinGrayChargeTemplate = +{ + .tileTag = ANIM_TAG_ELECTRIC_ORBS, + .paletteTag = ANIM_TAG_GUST, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gAnims_ElectricChargingParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_0[] = { AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), @@ -326,13 +341,31 @@ static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_2[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_GrowingElectricOrb[] = +static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_4[] = +{ + AFFINEANIMCMD_FRAME(5, 5, 0, 0), + AFFINEANIMCMD_FRAME(0x2, 0x2, 0, 20), + AFFINEANIMCMD_FRAME(0x3, 0x3, 0, 15), + AFFINEANIMCMD_FRAME(0x1, 0x1, 0, 25), + AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 0, 5), + AFFINEANIMCMD_FRAME(0x3, 0x3, 0, 5), + AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 5), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb[] = { sAffineAnim_GrowingElectricOrb_0, sAffineAnim_GrowingElectricOrb_1, sAffineAnim_GrowingElectricOrb_2, }; +const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb2[] = +{ + sAffineAnim_GrowingElectricOrb_4, +}; + const struct SpriteTemplate gGrowingChargeOrbSpriteTemplate = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, @@ -340,7 +373,19 @@ const struct SpriteTemplate gGrowingChargeOrbSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_GrowingElectricOrb, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb, +}; + +// For Electro Ball - smaller orb. +const struct SpriteTemplate gGrowingChargeOrb2SpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb2, .callback = AnimGrowingChargeOrb, }; @@ -353,7 +398,7 @@ static const union AnimCmd sAnim_ElectricPuff[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_ElectricPuff[] = +const union AnimCmd *const gAnims_ElectricPuff[] = { sAnim_ElectricPuff, }; @@ -363,7 +408,7 @@ const struct SpriteTemplate gElectricPuffSpriteTemplate = .tileTag = ANIM_TAG_ELECTRICITY, .paletteTag = ANIM_TAG_ELECTRICITY, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_ElectricPuff, + .anims = gAnims_ElectricPuff, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimElectricPuff, @@ -376,7 +421,7 @@ const struct SpriteTemplate gVoltTackleOrbSlideSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_GrowingElectricOrb, + .affineAnims = gAffineAnims_GrowingElectricOrb, .callback = AnimVoltTackleOrbSlide, }; @@ -441,7 +486,7 @@ const struct SpriteTemplate gGrowingShockWaveOrbSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_GrowingElectricOrb, + .affineAnims = gAffineAnims_GrowingElectricOrb, .callback = AnimGrowingShockWaveOrb, }; @@ -456,6 +501,54 @@ const struct SpriteTemplate gShockWaveProgressingBoltSpriteTemplate = .callback = AnimShockWaveProgressingBolt, }; +const struct SpriteTemplate gFlashCannonGrayChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; + +static const union AffineAnimCmd sSpriteAffineAnim_JudgmentBall[] = +{ + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(8, 8, 0, 15), //Half size + AFFINEANIMCMD_FRAME(0, 0, 0, 120), //Delay + AFFINEANIMCMD_FRAME(24, 24, 0, 5), //Normal size + AFFINEANIMCMD_FRAME(0, 0, 0, 10), //Delay + AFFINEANIMCMD_FRAME(-16, -16, 0, 15), //Revert to 1 px + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_JudgmentBall[] = +{ + sSpriteAffineAnim_JudgmentBall, +}; +const struct SpriteTemplate gJudgmentBlackChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_JudgmentBall, + .callback = AnimGrowingChargeOrb +}; + +const struct SpriteTemplate gSeedFlareGreenChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; + +// functions static void AnimLightning(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) @@ -509,10 +602,10 @@ static void AnimUnusedCirclingShock(struct Sprite *sprite) sprite->data[2] = gBattleAnimArgs[3]; sprite->data[3] = gBattleAnimArgs[4]; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteInCircleOverDuration; + sprite->callback = TranslateSpriteInCircle; } -static void AnimSparkElectricity(struct Sprite *sprite) +void AnimSparkElectricity(struct Sprite *sprite) { u8 battler; u32 matrixNum; @@ -569,9 +662,9 @@ static void AnimSparkElectricity(struct Sprite *sprite) sprite->callback = DestroyAnimSpriteAfterTimer; } -static void AnimZapCannonSpark(struct Sprite *sprite) +void AnimZapCannonSpark(struct Sprite *sprite) { - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[3]; sprite->data[1] = sprite->x; sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); @@ -583,7 +676,7 @@ static void AnimZapCannonSpark(struct Sprite *sprite) sprite->data[7] = gBattleAnimArgs[4]; sprite->oam.tileNum += gBattleAnimArgs[6] * 4; sprite->callback = AnimZapCannonSpark_Step; - AnimZapCannonSpark_Step(sprite); + sprite->callback(sprite); } static void AnimZapCannonSpark_Step(struct Sprite *sprite) @@ -624,7 +717,7 @@ static void AnimThunderboltOrb(struct Sprite *sprite) sprite->callback = AnimThunderboltOrb_Step; } -static void AnimSparkElectricityFlashing(struct Sprite *sprite) +void AnimSparkElectricityFlashing(struct Sprite *sprite) { u8 battler; @@ -664,9 +757,10 @@ static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite) } // Electricity arcs around the target. Used for Paralysis and various electric move hits -static void AnimElectricity(struct Sprite *sprite) +void AnimElectricity(struct Sprite *sprite) { - InitSpritePosToAnimTarget(sprite, FALSE); + if (!InitSpritePosToAnimBattler(gBattleAnimArgs[4], sprite, FALSE)) + return; sprite->oam.tileNum += gBattleAnimArgs[3] * 4; if (gBattleAnimArgs[3] == 1) @@ -682,8 +776,8 @@ static void AnimElectricity(struct Sprite *sprite) // The vertical falling thunder bolt used in Thunder Wave/Shock/Bolt void AnimTask_ElectricBolt(u8 taskId) { - gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0]; - gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1]; + gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0]; + gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1]; gTasks[taskId].data[2] = gBattleAnimArgs[2]; gTasks[taskId].func = AnimTask_ElectricBolt_Step; } @@ -774,13 +868,17 @@ static void AnimElectricBoltSegment(struct Sprite *sprite) } // The horizontal bands of electricity used in Thunder Wave -static void AnimThunderWave(struct Sprite *sprite) +void AnimThunderWave(struct Sprite *sprite) { u8 spriteId; sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; - spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority); + if (gAnimMoveIndex == MOVE_THUNDER_WAVE) + spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority); + else + spriteId = CreateSprite(&gAnchorShotChainTemplate, sprite->x + 32, sprite->y, sprite->subpriority); + gSprites[spriteId].oam.tileNum += 8; gAnimVisualTaskCount++; gSprites[spriteId].callback = AnimThunderWave_Step; @@ -836,7 +934,11 @@ static void AnimTask_ElectricChargingParticles_Step(u8 taskId) { u8 spriteId; task->data[12] = 0; - spriteId = CreateSprite(&gElectricChargingParticlesSpriteTemplate, task->data[14], task->data[15], 2); + if (gAnimMoveIndex == MOVE_FLASH_CANNON || gAnimMoveIndex == MOVE_STEEL_BEAM) + spriteId = CreateSprite(&gLightOfRuinGrayChargeTemplate, task->data[14], task->data[15], 2); + else + spriteId = CreateSprite(&gElectricChargingParticlesSpriteTemplate, task->data[14], task->data[15], 2); + if (spriteId != MAX_SPRITES) { struct Sprite *sprite = &gSprites[spriteId]; @@ -888,7 +990,7 @@ static void AnimElectricChargingParticles(struct Sprite *sprite) sprite->callback = AnimElectricChargingParticles_Step; } -static void AnimGrowingChargeOrb(struct Sprite *sprite) +void AnimGrowingChargeOrb(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { @@ -906,7 +1008,7 @@ static void AnimGrowingChargeOrb(struct Sprite *sprite) } // The quick electric burst at the end of Charge / during the Volt Tackle hit -static void AnimElectricPuff(struct Sprite *sprite) +void AnimElectricPuff(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { @@ -1126,7 +1228,7 @@ static void AnimVoltTackleBolt(struct Sprite *sprite) } } -static void AnimGrowingShockWaveOrb(struct Sprite *sprite) +void AnimGrowingShockWaveOrb(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -1147,6 +1249,7 @@ static void AnimGrowingShockWaveOrb(struct Sprite *sprite) void AnimTask_ShockWaveProgressingBolt(u8 taskId) { struct Task *task = &gTasks[taskId]; + u8 target = GetAnimBattlerId(gBattleAnimArgs[0]); switch (task->data[0]) { @@ -1154,12 +1257,12 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId) task->data[6] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); task->data[8] = 4; - task->data[10] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[10] = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2); task->data[9] = (task->data[10] - task->data[6]) / 5; task->data[4] = 7; task->data[5] = -1; task->data[11] = 12; - task->data[12] = BattleAnimAdjustPanning(task->data[11] - 76); + task->data[12] = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); task->data[13] = BattleAnimAdjustPanning(SOUND_PAN_TARGET); task->data[14] = task->data[12]; task->data[15] = (task->data[13] - task->data[12]) / 3; @@ -1272,19 +1375,20 @@ static void AnimShockWaveProgressingBolt(struct Sprite *sprite) void AnimTask_ShockWaveLightning(u8 taskId) { struct Task *task = &gTasks[taskId]; + u8 target = GetAnimBattlerId(gBattleAnimArgs[0]); switch (task->data[0]) { case 0: - task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32; + task->data[15] = GetBattlerSpriteCoord(target, BATTLER_COORD_Y) + 32; task->data[14] = task->data[15]; while (task->data[14] > 16) { task->data[14] -= 32; } - task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - task->data[12] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2; + task->data[13] = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2); + task->data[12] = GetBattlerSpriteSubpriority(target) - 2; task->data[0]++; break; case 1: @@ -1305,7 +1409,7 @@ void AnimTask_ShockWaveLightning(u8 taskId) static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId) { u8 spriteId = CreateSprite(&gLightningSpriteTemplate, task->data[13], task->data[14], task->data[12]); - + if (spriteId != MAX_SPRITES) { gSprites[spriteId].callback = AnimShockWaveLightning; diff --git a/src/battle_anim_fight.c b/src/battle_anim_fight.c index 47bb9312fc..18034348fe 100644 --- a/src/battle_anim_fight.c +++ b/src/battle_anim_fight.c @@ -8,21 +8,15 @@ static void AnimUnusedHumanoidFoot(struct Sprite *); static void AnimSlideHandOrFootToTarget(struct Sprite *); -static void AnimJumpKick(struct Sprite *); -static void AnimBasicFistOrFoot(struct Sprite *); static void AnimFistOrFootRandomPos(struct Sprite *); static void AnimFistOrFootRandomPos_Step(struct Sprite *); static void AnimCrossChopHand(struct Sprite *); static void AnimCrossChopHand_Step(struct Sprite *); static void AnimSlidingKick(struct Sprite *); static void AnimSlidingKick_Step(struct Sprite *); -static void AnimSpinningKickOrPunch(struct Sprite *); -static void AnimStompFoot(struct Sprite *); static void AnimStompFoot_Step(struct Sprite *); static void AnimStompFoot_End(struct Sprite *); -static void AnimDizzyPunchDuck(struct Sprite *); static void AnimBrickBreakWall(struct Sprite *); -static void AnimBrickBreakWall_Step(struct Sprite *); static void AnimBrickBreakWallShard(struct Sprite *); static void AnimBrickBreakWallShard_Step(struct Sprite *); static void AnimSuperpowerOrb(struct Sprite *); @@ -30,12 +24,10 @@ static void AnimSuperpowerOrb_Step(struct Sprite *); static void AnimSuperpowerRock(struct Sprite *); static void AnimSuperpowerRock_Step1(struct Sprite *); static void AnimSuperpowerRock_Step2(struct Sprite *); -static void AnimSuperpowerFireball(struct Sprite *); static void AnimArmThrustHit(struct Sprite *); static void AnimArmThrustHit_Step(struct Sprite *sprite); -static void AnimRevengeScratch(struct Sprite *); static void AnimFocusPunchFist(struct Sprite *); -static void AnimSpinningKickOrPunchFinish(struct Sprite *); +static void AnimForcePalm(struct Sprite *sprite); extern struct SpriteTemplate gBasicHitSplatSpriteTemplate; @@ -81,7 +73,7 @@ static const union AnimCmd sAnim_HandRight[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_HandsAndFeet[] = +const union AnimCmd *const gAnims_HandsAndFeet[] = { sAnim_Fist, sAnim_FootWide, @@ -95,7 +87,7 @@ const struct SpriteTemplate gKarateChopSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_HandsAndFeet, + .anims = gAnims_HandsAndFeet, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimSlideHandOrFootToTarget, @@ -106,7 +98,7 @@ const struct SpriteTemplate gJumpKickSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_HandsAndFeet, + .anims = gAnims_HandsAndFeet, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimJumpKick, @@ -117,7 +109,7 @@ const struct SpriteTemplate gFistFootSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_HandsAndFeet, + .anims = gAnims_HandsAndFeet, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimBasicFistOrFoot, @@ -128,7 +120,7 @@ const struct SpriteTemplate gFistFootRandomPosSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_HandsAndFeet, + .anims = gAnims_HandsAndFeet, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimFistOrFootRandomPos, @@ -139,7 +131,7 @@ const struct SpriteTemplate gCrossChopHandSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = &sAnims_HandsAndFeet[3], + .anims = &gAnims_HandsAndFeet[3], .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimCrossChopHand, @@ -150,7 +142,7 @@ const struct SpriteTemplate gSlidingKickSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = &sAnims_HandsAndFeet[1], + .anims = &gAnims_HandsAndFeet[1], .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimSlidingKick, @@ -163,7 +155,7 @@ static const union AffineAnimCmd sAffineAnim_SpinningHandOrFoot[] = AFFINEANIMCMD_JUMP(1), }; -static const union AffineAnimCmd *const sAffineAnims_SpinningHandOrFoot[] = +const union AffineAnimCmd *const gAffineAnims_SpinningHandOrFoot[] = { sAffineAnim_SpinningHandOrFoot, }; @@ -174,9 +166,9 @@ const struct SpriteTemplate gSpinningHandOrFootSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineDouble_ObjNormal_32x32, - .anims = sAnims_HandsAndFeet, + .anims = gAnims_HandsAndFeet, .images = NULL, - .affineAnims = sAffineAnims_SpinningHandOrFoot, + .affineAnims = gAffineAnims_SpinningHandOrFoot, .callback = AnimSpinningKickOrPunch, }; @@ -187,7 +179,7 @@ static const union AffineAnimCmd sAffineAnim_MegaPunchKick[] = AFFINEANIMCMD_JUMP(1), }; -static const union AffineAnimCmd *const sAffineAnims_MegaPunchKick[] = +const union AffineAnimCmd *const gAffineAnims_MegaPunchKick[] = { sAffineAnim_MegaPunchKick, }; @@ -197,9 +189,9 @@ const struct SpriteTemplate gMegaPunchKickSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineDouble_ObjNormal_32x32, - .anims = sAnims_HandsAndFeet, + .anims = gAnims_HandsAndFeet, .images = NULL, - .affineAnims = sAffineAnims_MegaPunchKick, + .affineAnims = gAffineAnims_MegaPunchKick, .callback = AnimSpinningKickOrPunch, }; @@ -208,7 +200,7 @@ const struct SpriteTemplate gStompFootSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = &sAnims_HandsAndFeet[1], + .anims = &gAnims_HandsAndFeet[1], .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimStompFoot, @@ -299,7 +291,7 @@ const struct SpriteTemplate gArmThrustHandSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_HandsAndFeet, + .anims = gAnims_HandsAndFeet, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimArmThrustHit, @@ -368,7 +360,7 @@ static const union AnimCmd sAnim_RevengeBigScratch_2[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_RevengeBigScratch[] = +const union AnimCmd *const gAnims_RevengeBigScratch[] = { sAnim_RevengeBigScratch_0, sAnim_RevengeBigScratch_1, @@ -380,7 +372,7 @@ const struct SpriteTemplate gRevengeBigScratchSpriteTemplate = .tileTag = ANIM_TAG_PURPLE_SWIPE, .paletteTag = ANIM_TAG_PURPLE_SWIPE, .oam = &gOamData_AffineOff_ObjNormal_64x64, - .anims = sAnims_RevengeBigScratch, + .anims = gAnims_RevengeBigScratch, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimRevengeScratch, @@ -403,12 +395,92 @@ const struct SpriteTemplate gFocusPunchFistSpriteTemplate = .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, .oam = &gOamData_AffineDouble_ObjNormal_32x32, - .anims = sAnims_HandsAndFeet, + .anims = gAnims_HandsAndFeet, .images = NULL, .affineAnims = sAffineAnims_FocusPunchFist, .callback = AnimFocusPunchFist, }; +const struct SpriteTemplate gPalmSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE, + .paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBasicFistOrFoot, +}; + +const struct SpriteTemplate gAuraSphereBlast = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSuperpowerFireball, +}; + +const union AffineAnimCmd gForcePalmAffineAnimCmd_1[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gForcePalmAffineAnimCmd_2[] = +{ + AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gForcePalmAffineAnimCmd_3[] = +{ + AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gForcePalmAffineAnimCmd_4[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gForcePalmAffineAnims[] = +{ + gForcePalmAffineAnimCmd_1, + gForcePalmAffineAnimCmd_2, + gForcePalmAffineAnimCmd_3, + gForcePalmAffineAnimCmd_4, +}; + +const struct SpriteTemplate gForcePalmSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_SHADOW_BALL, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gForcePalmAffineAnims, + .callback = AnimForcePalm, +}; + +static void AnimForcePalm(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, 1); + else + InitSpritePosToAnimTarget(sprite, TRUE); + + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + static void AnimUnusedHumanoidFoot(struct Sprite *sprite) { SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); @@ -431,7 +503,7 @@ static void AnimSlideHandOrFootToTarget(struct Sprite *sprite) AnimTravelDiagonally(sprite); } -static void AnimJumpKick(struct Sprite *sprite) +void AnimJumpKick(struct Sprite *sprite) { if (IsContest()) { @@ -449,12 +521,12 @@ static void AnimJumpKick(struct Sprite *sprite) // arg 2: duration // arg 3: ? (todo: related to initial pixel offsets) // arg 4: anim num -static void AnimBasicFistOrFoot(struct Sprite *sprite) +void AnimBasicFistOrFoot(struct Sprite *sprite) { StartSpriteAnim(sprite, gBattleAnimArgs[4]); if (gBattleAnimArgs[3] == 0) - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); @@ -478,8 +550,8 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite) gBattleAnimArgs[2] = Random2() % 5; StartSpriteAnim(sprite, gBattleAnimArgs[2]); - sprite->x = GetBattlerSpriteCoord(battler, 2); - sprite->y = GetBattlerSpriteCoord(battler, 3); + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET); xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2; yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; @@ -500,7 +572,7 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite) sprite->data[0] = gBattleAnimArgs[1]; sprite->data[7] = CreateSprite(&gBasicHitSplatSpriteTemplate, sprite->x, sprite->y, sprite->subpriority + 1); - if (sprite->data[7] != 64) + if (sprite->data[7] != MAX_SPRITES) { StartSpriteAffineAnim(&gSprites[sprite->data[7]], 0); gSprites[sprite->data[7]].callback = SpriteCallbackDummy; @@ -513,7 +585,7 @@ static void AnimFistOrFootRandomPos_Step(struct Sprite *sprite) { if (sprite->data[0] == 0) { - if (sprite->data[7] != 64) + if (sprite->data[7] != MAX_SPRITES) { FreeOamMatrix(gSprites[sprite->data[7]].oam.matrixNum); DestroySprite(&gSprites[sprite->data[7]]); @@ -609,7 +681,7 @@ static void AnimSlidingKick_Step(struct Sprite *sprite) // arg 1: initial y pixel offset // arg 2: anim num // arg 3: spin duration -static void AnimSpinningKickOrPunch(struct Sprite *sprite) +void AnimSpinningKickOrPunch(struct Sprite *sprite) { InitSpritePosToAnimTarget(sprite, TRUE); StartSpriteAnim(sprite, gBattleAnimArgs[2]); @@ -619,7 +691,7 @@ static void AnimSpinningKickOrPunch(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, AnimSpinningKickOrPunchFinish); } -static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite) +void AnimSpinningKickOrPunchFinish(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, 0); sprite->affineAnimPaused = 1; @@ -633,7 +705,7 @@ static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite) // arg 0: initial x pixel offset // arg 1: initial y pixel offset // arg 2: initial wait duration -static void AnimStompFoot(struct Sprite *sprite) +void AnimStompFoot(struct Sprite *sprite) { InitSpritePosToAnimTarget(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; @@ -646,8 +718,8 @@ static void AnimStompFoot_Step(struct Sprite *sprite) if (--sprite->data[0] == -1) { sprite->data[0] = 6; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, AnimStompFoot_End); @@ -662,7 +734,7 @@ static void AnimStompFoot_End(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -static void AnimDizzyPunchDuck(struct Sprite *sprite) +void AnimDizzyPunchDuck(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -691,13 +763,13 @@ static void AnimBrickBreakWall(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); } sprite->x += gBattleAnimArgs[1]; @@ -710,7 +782,7 @@ static void AnimBrickBreakWall(struct Sprite *sprite) sprite->callback = AnimBrickBreakWall_Step; } -static void AnimBrickBreakWall_Step(struct Sprite *sprite) +void AnimBrickBreakWall_Step(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -745,13 +817,13 @@ static void AnimBrickBreakWallShard(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[2]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[3]; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3]; } sprite->oam.tileNum += gBattleAnimArgs[1] * 16; @@ -796,8 +868,8 @@ static void AnimSuperpowerOrb(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); sprite->data[7] = gBattleAnimTarget; } @@ -821,13 +893,13 @@ static void AnimSuperpowerOrb_Step(struct Sprite *sprite) sprite->data[0] = 16; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], 2); + sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3); + sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = AnimTranslateLinear_WaitEnd; + sprite->callback = AnimTranslateLinear_WithFollowup; } } @@ -865,10 +937,10 @@ static void AnimSuperpowerRock_Step1(struct Sprite *sprite) } else { - s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); - s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] = pos2 - pos0; sprite->data[1] = pos3 - pos1; @@ -893,14 +965,14 @@ static void AnimSuperpowerRock_Step2(struct Sprite *sprite) DestroyAnimSprite(sprite); } -static void AnimSuperpowerFireball(struct Sprite *sprite) +void AnimSuperpowerFireball(struct Sprite *sprite) { u8 battler; if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET); battler = gBattleAnimTarget; sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); } @@ -917,13 +989,13 @@ static void AnimSuperpowerFireball(struct Sprite *sprite) sprite->data[0] = 16; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(battler, 2); + sprite->data[2] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(battler, 3); + sprite->data[4] = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = AnimTranslateLinear_WaitEnd; + sprite->callback = AnimTranslateLinear_WithFollowup; } static void AnimArmThrustHit_Step(struct Sprite *sprite) @@ -938,8 +1010,8 @@ static void AnimArmThrustHit(struct Sprite *sprite) { u8 turn; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[1] = gBattleAnimArgs[3]; sprite->data[2] = gBattleAnimArgs[0]; sprite->data[3] = gBattleAnimArgs[1]; @@ -961,10 +1033,10 @@ static void AnimArmThrustHit(struct Sprite *sprite) sprite->callback = AnimArmThrustHit_Step; } -static void AnimRevengeScratch(struct Sprite *sprite) +void AnimRevengeScratch(struct Sprite *sprite) { if (gBattleAnimArgs[2] == ANIM_ATTACKER) - InitSpritePosToAnimAttacker(sprite, 0); + InitSpritePosToAnimAttacker(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c index e70f314497..8061da9bd2 100644 --- a/src/battle_anim_fire.c +++ b/src/battle_anim_fire.c @@ -8,8 +8,6 @@ #include "trig.h" static void AnimFireSpiralInward(struct Sprite *); -static void AnimFireSpread(struct Sprite *); -static void AnimFirePlume(struct Sprite *); static void AnimLargeFlame(struct Sprite *); static void AnimLargeFlame_Step(struct Sprite *); static void AnimUnusedSmallEmber(struct Sprite *); @@ -22,22 +20,20 @@ static void AnimFireRing_Step1(struct Sprite *); static void AnimFireRing_Step2(struct Sprite *); static void AnimFireRing_Step3(struct Sprite *); static void UpdateFireRingCircleOffset(struct Sprite *); -static void AnimFireCross(struct Sprite *); -static void AnimFireSpiralOutward(struct Sprite *); static void AnimFireSpiralOutward_Step1(struct Sprite *); static void AnimFireSpiralOutward_Step2(struct Sprite *); -static void AnimTask_EruptionLaunchRocks_Step(u8 taskId); -static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3); +static void AnimTask_EruptionLaunchRocks_Step(u8); +static void CreateEruptionLaunchRocks(u8, u8, u8); static void AnimEruptionLaunchRock(struct Sprite *); -static u16 GetEruptionLaunchRockInitialYPos(u8 spriteId); -static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 x, s16 y); +static u16 GetEruptionLaunchRockInitialYPos(u8); +static void InitEruptionLaunchRockCoordData(struct Sprite *, s16, s16); static void UpdateEruptionLaunchRockPos(struct Sprite *); -static void AnimEruptionFallingRock(struct Sprite *); static void AnimEruptionFallingRock_Step(struct Sprite *); -static void AnimWillOWispOrb(struct Sprite *); static void AnimWillOWispOrb_Step(struct Sprite *); static void AnimWillOWispFire(struct Sprite *); -static void AnimTask_MoveHeatWaveTargets_Step(u8 taskId); +static void AnimTask_MoveHeatWaveTargets_Step(u8); +static void AnimLavaPlumeOrbitScatter(struct Sprite *); +static void AnimLavaPlumeOrbitScatterStep(struct Sprite *); static const union AnimCmd sAnim_FireSpiralSpread_0[] = { @@ -111,7 +107,7 @@ static const union AnimCmd sAnim_FirePlume[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAnims_FirePlume[] = +const union AnimCmd *const gAnims_FirePlume[] = { sAnim_FirePlume, }; @@ -155,7 +151,7 @@ const struct SpriteTemplate gFirePlumeSpriteTemplate = .tileTag = ANIM_TAG_FIRE_PLUME, .paletteTag = ANIM_TAG_FIRE_PLUME, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_FirePlume, + .anims = gAnims_FirePlume, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimFirePlume, @@ -167,7 +163,7 @@ static const struct SpriteTemplate sUnusedEmberFirePlumeSpriteTemplate = .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_FirePlume, + .anims = gAnims_FirePlume, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimFirePlume, @@ -258,6 +254,30 @@ const struct SpriteTemplate gEmberFlareSpriteTemplate = .callback = AnimEmberFlare, }; +const union AnimCmd gIncinerateAnim1[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 2), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gIncinerateAnims[] = +{ + gIncinerateAnim1, +}; + +const struct SpriteTemplate gIncinerateSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gIncinerateAnims, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + const struct SpriteTemplate gBurnFlameSpriteTemplate = { .tileTag = ANIM_TAG_SMALL_EMBER, @@ -287,7 +307,7 @@ static const union AnimCmd sAnim_FireBlastCross[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAnims_FireBlastCross[] = +const union AnimCmd *const gAnims_FireBlastCross[] = { sAnim_FireBlastCross, }; @@ -316,7 +336,7 @@ const struct SpriteTemplate gFireBlastCrossSpriteTemplate = .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_FireBlastCross, + .anims = gAnims_FireBlastCross, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimFireCross, @@ -355,7 +375,7 @@ const struct SpriteTemplate gEruptionLaunchRockSpriteTemplate = .callback = AnimEruptionLaunchRock, }; -static const s16 sEruptionLaunchRockCoords[][2] = +static const s16 sEruptionLaunchRockSpeeds[][2] = { {-2, -5}, {-1, -1}, @@ -404,7 +424,7 @@ static const union AnimCmd sAnim_WillOWispOrb_3[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_WillOWispOrb[] = +const union AnimCmd *const gAnims_WillOWispOrb[] = { sAnim_WillOWispOrb_0, sAnim_WillOWispOrb_1, @@ -417,7 +437,7 @@ const struct SpriteTemplate gWillOWispOrbSpriteTemplate = .tileTag = ANIM_TAG_WISP_ORB, .paletteTag = ANIM_TAG_WISP_ORB, .oam = &gOamData_AffineOff_ObjNormal_16x16, - .anims = sAnims_WillOWispOrb, + .anims = gAnims_WillOWispOrb, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimWillOWispOrb, @@ -461,6 +481,68 @@ static const s8 sShakeDirsPattern1[16] = -1, 0, 1, 0, -1, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, 1, }; +const union AffineAnimCmd gLavaPlumeAffineAnimCmd[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gLavaPlumeAffineAnims[] = +{ + gLavaPlumeAffineAnimCmd, +}; + +const struct SpriteTemplate gLavaPlumeSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_FIRE_PLUME, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gLavaPlumeAffineAnims, + .callback = AnimLavaPlumeOrbitScatter, +}; + +const struct SpriteTemplate gSpacialRendBladesTemplate = +{ + .tileTag = ANIM_TAG_PUNISHMENT_BLADES, + .paletteTag = ANIM_TAG_PINK_HEART_2, //ANIM_TAG_BERRY_EATEN, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_BasicFire, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward +}; + +const struct SpriteTemplate gSpacialRendBladesTemplate2 = +{ + .tileTag = ANIM_TAG_PUNISHMENT_BLADES, + .paletteTag = ANIM_TAG_PINK_HEART_2, //ANIM_TAG_BERRY_EATEN, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_FireSpiralSpread, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpread +}; + +static void AnimLavaPlumeOrbitScatter(struct Sprite *sprite) +{ + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); + sprite->callback = AnimLavaPlumeOrbitScatterStep; +} + +static void AnimLavaPlumeOrbitScatterStep(struct Sprite *sprite) +{ + sprite->x2 += sprite->data[0]; + sprite->y2 += sprite->data[1]; + if (sprite->x + sprite->x2 + 16 > 272u || sprite->y + sprite->y2 > 160 || sprite->y + sprite->y2 < -16) + DestroyAnimSprite(sprite); +} + // For the first stage of Fire Punch static void AnimFireSpiralInward(struct Sprite *sprite) { @@ -472,12 +554,12 @@ static void AnimFireSpiralInward(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = TranslateSpriteInGrowingCircleOverDuration; + sprite->callback = TranslateSpriteInGrowingCircle; sprite->callback(sprite); } // For the impact spread of fire sprites for moves like Blaze Kick or Fire Punch -static void AnimFireSpread(struct Sprite *sprite) +void AnimFireSpread(struct Sprite *sprite) { SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); @@ -490,7 +572,7 @@ static void AnimFireSpread(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -static void AnimFirePlume(struct Sprite *sprite) +void AnimFirePlume(struct Sprite *sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); @@ -649,7 +731,7 @@ static void AnimBurnFlame(struct Sprite *sprite) //void AnimFireRing(struct Sprite *sprite) void AnimFireRing(struct Sprite *sprite) { - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[7] = gBattleAnimArgs[2]; sprite->data[0] = 0; @@ -658,16 +740,16 @@ void AnimFireRing(struct Sprite *sprite) } static void AnimFireRing_Step1(struct Sprite *sprite) -{ +{ UpdateFireRingCircleOffset(sprite); if (++sprite->data[0] == 0x12) { sprite->data[0] = 0x19; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); @@ -681,8 +763,8 @@ static void AnimFireRing_Step2(struct Sprite *sprite) { sprite->data[0] = 0; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->y2 = 0; sprite->x2 = 0; @@ -718,9 +800,9 @@ static void UpdateFireRingCircleOffset(struct Sprite *sprite) // arg 1: initial y pixel offset // arg 2: duration // arg 3: x delta -// arg 4: y delta +// arg 4: y delta // AnimFireCross(struct Sprite *sprite) -static void AnimFireCross(struct Sprite *sprite) +void AnimFireCross(struct Sprite *sprite) { sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; @@ -734,9 +816,9 @@ static void AnimFireCross(struct Sprite *sprite) sprite->callback = TranslateSpriteLinear; } -static void AnimFireSpiralOutward(struct Sprite *sprite) +void AnimFireSpiralOutward(struct Sprite *sprite) { - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[1] = gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[3]; @@ -770,22 +852,43 @@ static void AnimFireSpiralOutward_Step2(struct Sprite *sprite) DestroyAnimSprite(sprite); } +#define IDX_ACTIVE_SPRITES 6 // Used by the sprite callback to modify the number of active sprites + +#define tState data[0] +#define tTimer1 data[1] +#define tTimer2 data[2] +#define tTimer3 data[3] +#define tAttackerY data[4] +#define tAttackerSide data[5] +#define tActiveSprites data[IDX_ACTIVE_SPRITES] +// data[8]-data[15] used by PrepareEruptAnimTaskData / UpdateEruptAnimTask +#define tAttackerSpriteId data[15] + +#define sSpeedDelay data[0] +#define sLaunchStage data[1] +#define sX data[2] +#define sY data[3] +#define sSpeedX data[4] +#define sSpeedY data[5] +#define sTaskId data[6] +#define sActiveSpritesIdx data[7] + // Animates first stage of Eruption where the attacker squishes and launches rocks away from themself void AnimTask_EruptionLaunchRocks(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->tAttackerSpriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); - task->data[0] = 0; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = gSprites[task->data[15]].y; - task->data[5] = GetBattlerSide(gBattleAnimAttacker); - task->data[6] = 0; + task->tState = 0; + task->tTimer1 = 0; + task->tTimer2 = 0; + task->tTimer3 = 0; + task->tAttackerY = gSprites[task->tAttackerSpriteId].y; + task->tAttackerSide = GetBattlerSide(gBattleAnimAttacker); + task->tActiveSprites = 0; - PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL); + PrepareBattlerSpriteForRotScale(task->tAttackerSpriteId, ST_OAM_OBJ_NORMAL); task->func = AnimTask_EruptionLaunchRocks_Step; } @@ -794,102 +897,102 @@ static void AnimTask_EruptionLaunchRocks_Step(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: - PrepareEruptAnimTaskData(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 32); - task->data[0]++; + PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0x100, 0x100, 0xE0, 0x200, 32); + task->tState++; case 1: - if (++task->data[1] > 1) + if (++task->tTimer1 > 1) { - task->data[1] = 0; + task->tTimer1 = 0; - if (++task->data[2] & 0x1) - gSprites[task->data[15]].x2 = 3; + if (++task->tTimer2 & 1) + gSprites[task->tAttackerSpriteId].x2 = 3; else - gSprites[task->data[15]].x2 = -3; + gSprites[task->tAttackerSpriteId].x2 = -3; } - if (task->data[5] != B_SIDE_PLAYER) + if (task->tAttackerSide != B_SIDE_PLAYER) { - if (++task->data[3] > 4) + if (++task->tTimer3 > 4) { - task->data[3] = 0; - gSprites[task->data[15]].y++; + task->tTimer3 = 0; + gSprites[task->tAttackerSpriteId].y++; } } if(!UpdateEruptAnimTask(task)) { - SetBattlerSpriteYOffsetFromYScale(task->data[15]); - gSprites[task->data[15]].x2 = 0; + SetBattlerSpriteYOffsetFromYScale(task->tAttackerSpriteId); + gSprites[task->tAttackerSpriteId].x2 = 0; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[0]++; + task->tTimer1 = 0; + task->tTimer2 = 0; + task->tTimer3 = 0; + task->tState++; } break; case 2: - if (++task->data[1] > 4) + if (++task->tTimer1 > 4) { - if (task->data[5] != B_SIDE_PLAYER) - PrepareEruptAnimTaskData(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 6); + if (task->tAttackerSide != B_SIDE_PLAYER) + PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0xE0, 0x200, 0x180, 0xF0, 6); else - PrepareEruptAnimTaskData(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 6); + PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0xE0, 0x200, 0x180, 0xC0, 6); - task->data[1] = 0; - task->data[0]++; + task->tTimer1 = 0; + task->tState++; } break; case 3: if (!UpdateEruptAnimTask(task)) { - CreateEruptionLaunchRocks(task->data[15], taskId, 6); - task->data[0]++; + CreateEruptionLaunchRocks(task->tAttackerSpriteId, taskId, IDX_ACTIVE_SPRITES); + task->tState++; } break; case 4: - if (++task->data[1] > 1) + if (++task->tTimer1 > 1) { - task->data[1] = 0; + task->tTimer1 = 0; - if (++task->data[2] & 1) - gSprites[task->data[15]].y2 += 3; + if (++task->tTimer2 & 1) + gSprites[task->tAttackerSpriteId].y2 += 3; else - gSprites[task->data[15]].y2 -= 3; + gSprites[task->tAttackerSpriteId].y2 -= 3; } - if (++task->data[3] > 0x18) + if (++task->tTimer3 > 24) { - if (task->data[5] != B_SIDE_PLAYER) - PrepareEruptAnimTaskData(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 8); + if (task->tAttackerSide != B_SIDE_PLAYER) + PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0x180, 0xF0, 0x100, 0x100, 8); else - PrepareEruptAnimTaskData(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 8); + PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0x180, 0xC0, 0x100, 0x100, 8); - if (task->data[2] & 1) - gSprites[task->data[15]].y2 -= 3; + if (task->tTimer2 & 1) + gSprites[task->tAttackerSpriteId].y2 -= 3; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[0]++; + task->tTimer1 = 0; + task->tTimer2 = 0; + task->tTimer3 = 0; + task->tState++; } break; case 5: - if (task->data[5] != B_SIDE_PLAYER) - gSprites[task->data[15]].y--; + if (task->tAttackerSide != B_SIDE_PLAYER) + gSprites[task->tAttackerSpriteId].y--; if (!UpdateEruptAnimTask(task)) { - gSprites[task->data[15]].y = task->data[4]; - ResetSpriteRotScale(task->data[15]); - task->data[2] = 0; - task->data[0]++; + gSprites[task->tAttackerSpriteId].y = task->tAttackerY; + ResetSpriteRotScale(task->tAttackerSpriteId); + task->tTimer2 = 0; + task->tState++; } break; case 6: - if (!task->data[6]) + if (task->tActiveSprites == 0) DestroyAnimVisualTask(taskId); break; default: @@ -897,7 +1000,7 @@ static void AnimTask_EruptionLaunchRocks_Step(u8 taskId) } } -static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3) +static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 activeSpritesIdx) { u16 i, j; s8 sign; @@ -907,12 +1010,12 @@ static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3) if(!GetBattlerSide(gBattleAnimAttacker)) { - x -= 0xC; + x -= 12; sign = 1; } else { - x += 0x10; + x += 16; sign = -1; } @@ -920,18 +1023,18 @@ static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3) { u8 spriteId = CreateSprite(&gEruptionLaunchRockSpriteTemplate, x, y, 2); - if (spriteId != 0x40) + if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.tileNum += j * 4 + 0x40; if (++j >= 5) j = 0; - InitEruptionLaunchRockCoordData(&gSprites[spriteId], sEruptionLaunchRockCoords[i][0] * sign, sEruptionLaunchRockCoords[i][1]); - gSprites[spriteId].data[6] = taskId; - gSprites[spriteId].data[7] = a3; + InitEruptionLaunchRockCoordData(&gSprites[spriteId], sEruptionLaunchRockSpeeds[i][0] * sign, sEruptionLaunchRockSpeeds[i][1]); + gSprites[spriteId].sTaskId = taskId; + gSprites[spriteId].sActiveSpritesIdx = activeSpritesIdx; - gTasks[taskId].data[a3]++; + gTasks[taskId].data[activeSpritesIdx]++; } } } @@ -942,7 +1045,7 @@ static void AnimEruptionLaunchRock(struct Sprite *sprite) if (sprite->invisible) { - gTasks[sprite->data[6]].data[sprite->data[7]]--; + gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--; DestroySprite(sprite); } } @@ -959,46 +1062,71 @@ static u16 GetEruptionLaunchRockInitialYPos(u8 spriteId) return y; } -static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 x, s16 y) +static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 speedX, s16 speedY) { - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->data[2] = (u16)sprite->x * 8; - sprite->data[3] = (u16)sprite->y * 8; - sprite->data[4] = x * 8; - sprite->data[5] = y * 8; + sprite->sSpeedDelay = 0; + sprite->sLaunchStage = 0; + sprite->sX = (u16)sprite->x * 8; + sprite->sY = (u16)sprite->y * 8; + sprite->sSpeedX = speedX * 8; + sprite->sSpeedY = speedY * 8; } static void UpdateEruptionLaunchRockPos(struct Sprite *sprite) { - int var1; - if (++sprite->data[0] > 2) + int extraLaunchSpeed; + if (++sprite->sSpeedDelay > 2) { - sprite->data[0] = 0; - ++sprite->data[1]; - var1 = (u16)sprite->data[1] * (u16)sprite->data[1]; - sprite->data[3] += var1; + sprite->sSpeedDelay = 0; + ++sprite->sLaunchStage; + extraLaunchSpeed = (u16)sprite->sLaunchStage * (u16)sprite->sLaunchStage; + sprite->sY += extraLaunchSpeed; } - sprite->data[2] += sprite->data[4]; - sprite->x = sprite->data[2] >> 3; - sprite->data[3] += sprite->data[5]; - sprite->y = sprite->data[3] >> 3; + sprite->sX += sprite->sSpeedX; + sprite->x = sprite->sX >> 3; + sprite->sY += sprite->sSpeedY; + sprite->y = sprite->sY >> 3; - if (sprite->x < -8 || sprite->x > 0xf8 || sprite->y < -8 || sprite->y > 120) + if (sprite->x < -8 || sprite->x > DISPLAY_WIDTH + 8 || sprite->y < -8 || sprite->y > 120) sprite->invisible = TRUE; } -static void AnimEruptionFallingRock(struct Sprite *sprite) +#undef IDX_ACTIVE_SPRITES +#undef tState +#undef tTimer1 +#undef tTimer2 +#undef tTimer3 +#undef tAttackerY +#undef tAttackerSide +#undef tActiveSprites +#undef tAttackerSpriteId +#undef sSpeedDelay +#undef sLaunchStage +#undef sX +#undef sY +#undef sSpeedX +#undef sSpeedY +#undef sTaskId +#undef sActiveSpritesIdx + +#define sState data[0] +#define sBounceTimer data[1] +#define sBounceDir data[2] +#define sEndTimer data[3] +#define sFallDelay data[6] +#define sTargetY data[7] + +void AnimEruptionFallingRock(struct Sprite *sprite) { sprite->x = gBattleAnimArgs[0]; sprite->y = gBattleAnimArgs[1]; - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[6] = gBattleAnimArgs[2]; - sprite->data[7] = gBattleAnimArgs[3]; + sprite->sState = 0; + sprite->sBounceTimer = 0; + sprite->sBounceDir = 0; + sprite->sFallDelay = gBattleAnimArgs[2]; + sprite->sTargetY = gBattleAnimArgs[3]; sprite->oam.tileNum += gBattleAnimArgs[4] * 16; sprite->callback = AnimEruptionFallingRock_Step; @@ -1006,53 +1134,57 @@ static void AnimEruptionFallingRock(struct Sprite *sprite) static void AnimEruptionFallingRock_Step(struct Sprite *sprite) { - switch (sprite->data[0]) + switch (sprite->sState) { case 0: - if (sprite->data[6] != 0) + // Wait to begin falling + if (sprite->sFallDelay != 0) { - sprite->data[6]--; + sprite->sFallDelay--; return; } - sprite->data[0]++; + sprite->sState++; // fall through case 1: + // Rock is falling sprite->y += 8; - if (sprite->y >= sprite->data[7]) + if (sprite->y >= sprite->sTargetY) { - sprite->y = sprite->data[7]; - sprite->data[0]++; + sprite->y = sprite->sTargetY; + sprite->sState++; } break; case 2: - if (++sprite->data[1] > 1) + // Bounce up and down on landing spot + if (++sprite->sBounceTimer > 1) { - sprite->data[1] = 0; - if ((++sprite->data[2] & 1) != 0) - { + sprite->sBounceTimer = 0; + if ((++sprite->sBounceDir & 1) != 0) sprite->y2 = -3; - } else - { sprite->y2 = 3; - } } - if (++sprite->data[3] > 16) - { + if (++sprite->sEndTimer > 16) DestroyAnimSprite(sprite); - } break; } } -static void AnimWillOWispOrb(struct Sprite *sprite) +#undef sState +#undef sBounceTimer +#undef sBounceDir +#undef sEndTimer +#undef sFallDelay +#undef sTargetY + +void AnimWillOWispOrb(struct Sprite *sprite) { switch (sprite->data[0]) { case 0: - InitSpritePosToAnimAttacker(sprite, 0); + InitSpritePosToAnimAttacker(sprite, FALSE); StartSpriteAnim(sprite, gBattleAnimArgs[2]); sprite->data[7] = gBattleAnimArgs[2]; @@ -1091,7 +1223,7 @@ static void AnimWillOWispOrb(struct Sprite *sprite) case 2: sprite->x2 = Sin(sprite->data[2], sprite->data[4]); sprite->data[2] = (sprite->data[2] + 4) & 0xFF; - + if (++sprite->data[3] == 31) { sprite->x += sprite->x2; @@ -1101,9 +1233,9 @@ static void AnimWillOWispOrb(struct Sprite *sprite) sprite->data[0] = 256; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslationWithSpeed(sprite); sprite->callback = AnimWillOWispOrb_Step; @@ -1177,8 +1309,8 @@ void AnimTask_MoveHeatWaveTargets(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->data[12] = !GetBattlerSide(gBattleAnimAttacker) ? 1 : -1; - task->data[13] = IsBattlerSpriteVisible(gBattleAnimTarget ^ 2) + 1; + task->data[12] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : -1; + task->data[13] = IsBattlerSpriteVisible(gBattleAnimTarget ^ BIT_FLANK) + 1; task->data[14] = GetAnimBattlerSpriteId(ANIM_TARGET); task->data[15] = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER); diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 1e9b3b56f2..8fdb316ec5 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -5,25 +5,20 @@ #include "constants/battle_anim.h" #include "constants/rgb.h" #include "random.h" +#include "gpu_regs.h" +#include "graphics.h" extern const struct SpriteTemplate gFlashingHitSplatSpriteTemplate; -static void AnimEllipticalGust(struct Sprite *); static void AnimEllipticalGust_Step(struct Sprite *); static void AnimGustToTarget(struct Sprite *); static void AnimGustToTarget_Step(struct Sprite *); -static void AnimAirWaveCrescent(struct Sprite *); -static void AnimFlyBallUp(struct Sprite *); -static void AnimFlyBallUp_Step(struct Sprite *); -static void AnimFlyBallAttack(struct Sprite *); -static void AnimFlyBallAttack_Step(struct Sprite *); static void AnimFallingFeather(struct Sprite *); static void AnimFallingFeather_Step(struct Sprite *); static void AnimWhirlwindLine_Step(struct Sprite *); static void AnimUnusedBubbleThrow(struct Sprite *); static void AnimWhirlwindLine(struct Sprite *); static void AnimBounceBallShrink(struct Sprite *); -static void AnimBounceBallLand(struct Sprite *); static void AnimDiveBall(struct Sprite *); static void AnimDiveBall_Step1(struct Sprite *); static void AnimDiveBall_Step2(struct Sprite *); @@ -35,7 +30,7 @@ static void AnimUnusedFlashingLight_Step(struct Sprite *); static void AnimSkyAttackBird(struct Sprite *); static void AnimSkyAttackBird_Step(struct Sprite *); static void AnimTask_AnimateGustTornadoPalette_Step(u8); - +static void AnimTask_LoadWindstormBackground_Step(u8 taskId); const struct SpriteTemplate gEllipticalGustSpriteTemplate = { @@ -80,7 +75,7 @@ static const union AnimCmd sAffineAnim_AirWaveCrescent[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAffineAnims_AirWaveCrescent[] = +const union AnimCmd *const gAffineAnims_AirWaveCrescent[] = { sAffineAnim_AirWaveCrescent, }; @@ -90,7 +85,7 @@ const struct SpriteTemplate gAirWaveCrescentSpriteTemplate = .tileTag = ANIM_TAG_AIR_WAVE_2, .paletteTag = ANIM_TAG_AIR_WAVE_2, .oam = &gOamData_AffineOff_ObjNormal_32x16, - .anims = sAffineAnims_AirWaveCrescent, + .anims = gAffineAnims_AirWaveCrescent, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimAirWaveCrescent, @@ -105,7 +100,7 @@ static const union AffineAnimCmd sAffineAnim_FlyBallUp[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_FlyBallUp[] = +const union AffineAnimCmd *const gAffineAnims_FlyBallUp[] = { sAffineAnim_FlyBallUp, }; @@ -122,7 +117,7 @@ static const union AffineAnimCmd sAffineAnim_FlyBallAttack_1[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_FlyBallAttack[] = +const union AffineAnimCmd *const gAffineAnims_FlyBallAttack[] = { sAffineAnim_FlyBallAttack_0, sAffineAnim_FlyBallAttack_1, @@ -135,7 +130,7 @@ const struct SpriteTemplate gFlyBallUpSpriteTemplate = .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_FlyBallUp, + .affineAnims = gAffineAnims_FlyBallUp, .callback = AnimFlyBallUp, }; @@ -146,7 +141,7 @@ const struct SpriteTemplate gFlyBallAttackSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_FlyBallAttack, + .affineAnims = gAffineAnims_FlyBallAttack, .callback = AnimFlyBallAttack, }; @@ -249,7 +244,7 @@ static const union AffineAnimCmd sAffineAnim_BounceBallLand[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_BounceBallLand[] = +const union AffineAnimCmd *const gAffineAnims_BounceBallLand[] = { sAffineAnim_BounceBallLand, }; @@ -261,7 +256,7 @@ const struct SpriteTemplate gBounceBallLandSpriteTemplate = .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_BounceBallLand, + .affineAnims = gAffineAnims_BounceBallLand, .callback = AnimBounceBallLand, }; @@ -350,7 +345,7 @@ const struct SpriteTemplate gSkyAttackBirdSpriteTemplate = }; -static void AnimEllipticalGust(struct Sprite *sprite) +void AnimEllipticalGust(struct Sprite *sprite) { InitSpritePosToAnimTarget(sprite, FALSE); sprite->y += 20; @@ -427,7 +422,7 @@ static void AnimGustToTarget_Step(struct Sprite *sprite) DestroyAnimSprite(sprite); } -static void AnimAirWaveCrescent(struct Sprite *sprite) +void AnimAirWaveCrescent(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { @@ -456,7 +451,7 @@ static void AnimAirWaveCrescent(struct Sprite *sprite) } else { - SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]); + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]); } sprite->data[2] = sprite->data[2] + gBattleAnimArgs[2]; @@ -467,7 +462,7 @@ static void AnimAirWaveCrescent(struct Sprite *sprite) SeekSpriteAnim(sprite, gBattleAnimArgs[5]); } -static void AnimFlyBallUp(struct Sprite *sprite) +void AnimFlyBallUp(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; @@ -476,7 +471,7 @@ static void AnimFlyBallUp(struct Sprite *sprite) gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE; } -static void AnimFlyBallUp_Step(struct Sprite *sprite) +void AnimFlyBallUp_Step(struct Sprite *sprite) { if (sprite->data[0] > 0) { @@ -492,7 +487,7 @@ static void AnimFlyBallUp_Step(struct Sprite *sprite) DestroyAnimSprite(sprite); } -static void AnimFlyBallAttack(struct Sprite *sprite) +void AnimFlyBallAttack(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { @@ -511,12 +506,13 @@ static void AnimFlyBallAttack(struct Sprite *sprite) sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + sprite->data[5] = gBattleAnimArgs[1]; // if sprite is to remain invisible InitAnimLinearTranslation(sprite); sprite->callback = AnimFlyBallAttack_Step; } -static void AnimFlyBallAttack_Step(struct Sprite *sprite) +void AnimFlyBallAttack_Step(struct Sprite *sprite) { sprite->data[0] = 1; AnimTranslateLinear(sprite); @@ -528,10 +524,10 @@ static void AnimFlyBallAttack_Step(struct Sprite *sprite) } if (sprite->x + sprite->x2 < -32 - || sprite->x + sprite->x2 > DISPLAY_WIDTH + 32 - || sprite->y + sprite->y2 > DISPLAY_HEIGHT) + || sprite->x + sprite->x2 > DISPLAY_WIDTH + 32 + || sprite->y + sprite->y2 > DISPLAY_HEIGHT) { - gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = FALSE; + gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = sprite->data[5]; DestroyAnimSprite(sprite); } } @@ -595,7 +591,7 @@ static void AnimFallingFeather(struct Sprite *sprite) data->unkA = (gBattleAnimArgs[2] >> 8) & 0xFF; data->unk4 = gBattleAnimArgs[3]; data->unk6 = gBattleAnimArgs[4]; - *(u16*)(data->unkC) = gBattleAnimArgs[5]; + *(u16 *)(data->unkC) = gBattleAnimArgs[5]; if (data->unk2 >= 64 && data->unk2 <= 191) { @@ -661,7 +657,7 @@ static void AnimFallingFeather_Step(struct Sprite *sprite) { switch (data->unk2 / 64) { - case 0: + case 0: if ((u8)data->unk0_1 == 1) //casts to u8 here are necessary for matching { data->unk0_0d = 1; @@ -895,8 +891,8 @@ static void AnimFallingFeather_Step(struct Sprite *sprite) static void AnimUnusedBubbleThrow(struct Sprite *sprite) { sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = TranslateAnimSpriteToTargetMonLocation; } @@ -906,7 +902,7 @@ static void AnimWhirlwindLine(struct Sprite * sprite) u8 mult; if (gBattleAnimArgs[2] == ANIM_ATTACKER) - InitSpritePosToAnimAttacker(sprite, 0); + InitSpritePosToAnimAttacker(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -955,8 +951,8 @@ void AnimTask_DrillPeckHitSplats(u8 task) gBattleAnimArgs[3] = 3; CreateSpriteAndAnimate(&gFlashingHitSplatSpriteTemplate, - GetBattlerSpriteCoord(gBattleAnimTarget, 2), - GetBattlerSpriteCoord(gBattleAnimTarget, 3), + GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2), + GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET), 3); } @@ -971,7 +967,7 @@ static void AnimBounceBallShrink(struct Sprite *sprite) switch (sprite->data[0]) { case 0: - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE; ++sprite->data[0]; break; @@ -982,12 +978,12 @@ static void AnimBounceBallShrink(struct Sprite *sprite) } } -static void AnimBounceBallLand(struct Sprite *sprite) +void AnimBounceBallLand(struct Sprite *sprite) { switch (sprite->data[0]) { case 0: - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); sprite->y2 = -sprite->y - 32; sprite->data[0]++; break; @@ -1009,7 +1005,7 @@ static void AnimBounceBallLand(struct Sprite *sprite) static void AnimDiveBall(struct Sprite *sprite) { - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[3]; sprite->callback = AnimDiveBall_Step1; @@ -1056,18 +1052,18 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) case 0: if (!gBattleAnimArgs[0]) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); } sprite->data[1] = 0x200; - TrySetSpriteRotScale(sprite, 0, 0x100, sprite->data[1], 0); + TrySetSpriteRotScale(sprite, FALSE, 0x100, sprite->data[1], 0); sprite->data[0]++; break; case 1: @@ -1078,7 +1074,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) sprite->data[2]++; - TrySetSpriteRotScale(sprite, 0, 0x100, sprite->data[1], 0); + TrySetSpriteRotScale(sprite, FALSE, 0x100, sprite->data[1], 0); matrixNum = sprite->oam.matrixNum; @@ -1123,13 +1119,13 @@ static void AnimSprayWaterDroplet(struct Sprite *sprite) if (gBattleAnimArgs[1] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 32; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 32; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32; } sprite->callback = AnimSprayWaterDroplet_Step; @@ -1190,8 +1186,8 @@ static void AnimSkyAttackBird(struct Sprite *sprite) s16 posx = sprite->x; s16 posy = sprite->y; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[4] = sprite->x << 4; sprite->data[5] = sprite->y << 4; @@ -1202,7 +1198,7 @@ static void AnimSkyAttackBird(struct Sprite *sprite) rotation = ArcTan2Neg(posx - sprite->x, posy - sprite->y); rotation -= 16384; - TrySetSpriteRotScale(sprite, 1, 0x100, 0x100, rotation); + TrySetSpriteRotScale(sprite, TRUE, 0x100, 0x100, rotation); sprite->callback = AnimSkyAttackBird_Step; } @@ -1215,8 +1211,8 @@ void AnimSkyAttackBird_Step(struct Sprite *sprite) sprite->x = sprite->data[4] >> 4; sprite->y = sprite->data[5] >> 4; - if (sprite->x > 285 || sprite->x < -45 - || sprite->y > 157 || sprite->y < -45) + if (sprite->x > DISPLAY_WIDTH + 45 || sprite->x < -45 + || sprite->y > 157 || sprite->y < -45) DestroySpriteAndMatrix(sprite); } @@ -1235,3 +1231,99 @@ static void AnimTask_SetAttackerVisibility(u8 taskId) } DestroyAnimVisualTask(taskId); } + +void AnimTask_LoadWindstormBackground(u8 taskId) +{ + int var0; + struct BattleAnimBgData animBg; + + var0 = 0; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + + GetBattleAnimBg1Data(&animBg); + AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Windstorm, animBg.tilesOffset); + AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Windstorm, 0); + LoadCompressedPalette(gBattleAnimSpritePal_Windstorm, animBg.paletteId * 16, 32); + + if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + var0 = 1; + + gTasks[taskId].data[0] = var0; + gTasks[taskId].func = AnimTask_LoadWindstormBackground_Step; +} + +static void AnimTask_LoadWindstormBackground_Step(u8 taskId) +{ + struct BattleAnimBgData animBg; + + if (gTasks[taskId].data[0] == 0) + gBattle_BG1_X += -6; + else + gBattle_BG1_X += 6; + + gBattle_BG1_Y += -1; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 7) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 101) + { + gTasks[taskId].data[11] = 7; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + GetBattleAnimBg1Data(&animBg); + ClearBattleAnimBg(animBg.bgId); + gTasks[taskId].data[12]++; + break; + case 4: + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + DestroyAnimVisualTask(taskId); + break; + } +} diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index 03a003c604..f14b35ccb2 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -2,6 +2,7 @@ #include "battle.h" #include "battle_anim.h" #include "gpu_regs.h" +#include "item_icon.h" #include "palette.h" #include "constants/rgb.h" #include "scanline_effect.h" @@ -9,6 +10,7 @@ #include "sound.h" #include "trig.h" #include "util.h" +#include "constants/moves.h" static void AnimConfuseRayBallBounce(struct Sprite *); static void AnimConfuseRayBallBounce_Step1(struct Sprite *); @@ -18,7 +20,6 @@ static void AnimConfuseRayBallSpiral(struct Sprite *); static void AnimConfuseRayBallSpiral_Step(struct Sprite *); static void AnimTask_NightShadeClone_Step1(u8 taskId); static void AnimTask_NightShadeClone_Step2(u8 taskId); -static void AnimShadowBall(struct Sprite *); static void AnimShadowBall_Step(struct Sprite *); static void AnimLick(struct Sprite *); static void AnimLick_Step(struct Sprite *); @@ -35,12 +36,11 @@ static void AnimCurseNail(struct Sprite *); static void AnimCurseNail_Step1(struct Sprite *); static void AnimCurseNail_Step2(struct Sprite *); static void AnimCurseNail_End(struct Sprite *); -static void AnimGhostStatusSprite(struct Sprite *); static void AnimGhostStatusSprite_Step(struct Sprite *); -static void AnimTask_GrudgeFlames_Step(u8 taskId); static void AnimGrudgeFlame(struct Sprite *); static void AnimMonMoveCircular(struct Sprite *); static void AnimMonMoveCircular_Step(struct Sprite *); +static void AnimPoltergeistItem(struct Sprite *); static const union AffineAnimCmd sAffineAnim_ConfuseRayBallBounce[] = { @@ -82,7 +82,7 @@ static const union AffineAnimCmd sAffineAnim_ShadowBall[] = AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd *const sAffineAnims_ShadowBall[] = +const union AffineAnimCmd *const gAffineAnims_ShadowBall[] = { sAffineAnim_ShadowBall, }; @@ -94,10 +94,43 @@ const struct SpriteTemplate gShadowBallSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_ShadowBall, + .affineAnims = gAffineAnims_ShadowBall, .callback = AnimShadowBall, }; +const struct SpriteTemplate gEnergyBallSpriteTemplate = +{ + .tileTag = ANIM_TAG_ENERGY_BALL, + .paletteTag = ANIM_TAG_ENERGY_BALL, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimShadowBall, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_LeafStorm = +{ + .tileTag = ANIM_TAG_RAZOR_LEAF, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gAffineAnims_AirWaveCrescent, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimAirWaveCrescent, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_LeafStorm2 = +{ + .tileTag = ANIM_TAG_LEAF, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_PoisonProjectile, + .callback = AnimNeedleArmSpike, +}; + static const union AnimCmd sAnim_Lick[] = { ANIMCMD_FRAME(0, 2), @@ -147,6 +180,17 @@ const struct SpriteTemplate gDestinyBondWhiteShadowSpriteTemplate = .callback = AnimDestinyBondWhiteShadow, }; +const struct SpriteTemplate gDarkVoidBlackHoleTemplate = +{ + .tileTag = ANIM_TAG_WHITE_SHADOW, + .paletteTag = ANIM_TAG_QUICK_GUARD_HAND, + .oam = &gOamData_AffineOff_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDestinyBondWhiteShadow +}; + const struct SpriteTemplate gCurseNailSpriteTemplate = { .tileTag = ANIM_TAG_NAIL, @@ -217,14 +261,36 @@ static const struct SpriteTemplate sMonMoveCircularSpriteTemplate = .callback = AnimMonMoveCircular, }; +const struct SpriteTemplate gFlashCannonBallMovementTemplate = +{ + .tileTag = ANIM_TAG_FLASH_CANNON_BALL, + .paletteTag = ANIM_TAG_FLASH_CANNON_BALL, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimShadowBall +}; + +const struct SpriteTemplate gPoltergeistEffectTemplate = +{ + .tileTag = ANIM_TAG_POLTERGEIST, + .paletteTag = ANIM_TAG_POLTERGEIST, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimPoltergeistItem, +}; + static void AnimConfuseRayBallBounce(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslationWithSpeed(sprite); sprite->callback = AnimConfuseRayBallBounce_Step1; sprite->data[6] = 16; @@ -395,13 +461,13 @@ static void AnimTask_NightShadeClone_Step2(u8 taskId) // arg 0: duration step 1 (attacker -> center) // arg 1: duration step 2 (spin center) // arg 2: duration step 3 (center -> target) -static void AnimShadowBall(struct Sprite *sprite) +void AnimShadowBall(struct Sprite *sprite) { s16 oldPosX = sprite->x; s16 oldPosY = sprite->y; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] = 0; sprite->data[1] = gBattleAnimArgs[0]; sprite->data[2] = gBattleAnimArgs[1]; @@ -431,8 +497,8 @@ static void AnimShadowBall_Step(struct Sprite *sprite) sprite->data[2] -= 1; if (sprite->data[2] > 0) break; - sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[4] = sprite->x << 4; sprite->data[5] = sprite->y << 4; sprite->data[6] = ((sprite->data[1] - sprite->x) << 4) / sprite->data[3]; @@ -447,8 +513,8 @@ static void AnimShadowBall_Step(struct Sprite *sprite) sprite->data[3] -= 1; if (sprite->data[3] > 0) break; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] += 1; break; case 3: @@ -567,7 +633,7 @@ static void AnimTask_NightmareClone_Step(u8 taskId) break; if (task->data[1] <= 80) break; - obj_delete_but_dont_free_vram(&gSprites[task->data[0]]); + DestroySpriteWithActiveSheet(&gSprites[task->data[0]]); task->data[4] = 1; break; case 1: @@ -653,9 +719,9 @@ static void AnimTask_SpiteTargetShadow_Step1(u8 taskId) startLine = 0; if (position == 1) - task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, 4, 1); + task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG1HOFS, TRUE); else - task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, 8, 1); + task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG2HOFS, TRUE); task->data[15]++; break; @@ -723,7 +789,7 @@ static void AnimTask_SpiteTargetShadow_Step3(u8 taskId) break; case 2: gSprites[task->data[14]].invisible = TRUE; - obj_delete_but_dont_free_vram(&gSprites[task->data[0]]); + DestroySpriteWithActiveSheet(&gSprites[task->data[0]]); FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); @@ -747,17 +813,17 @@ static void AnimDestinyBondWhiteShadow(struct Sprite *sprite) if (gBattleAnimArgs[0] == 0) { - battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28; - battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28; + battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28; + battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28; } else { - battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28; - battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28; + battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28; + battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28; } yDiff = battler2Y - battler1Y; @@ -807,7 +873,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId) task->data[9] = 16; task->data[10] = gBattleAnimArgs[0]; - baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM); if (!IsContest()) { @@ -817,10 +883,15 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId) && battler != (gBattleAnimAttacker ^ 2) && IsBattlerSpriteVisible(battler)) { - spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); + if (gAnimMoveIndex == MOVE_DARK_VOID + || gAnimMoveIndex == MOVE_POLTERGEIST) + spriteId = CreateSprite(&gDarkVoidBlackHoleTemplate, baseX, baseY, 55); //dark void + else + spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); //destiny bond + if (spriteId != MAX_SPRITES) { - x = GetBattlerSpriteCoord(battler, 2); + x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_BOTTOM); gSprites[spriteId].data[0] = baseX << 4; gSprites[spriteId].data[1] = baseY << 4; @@ -839,7 +910,11 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId) } else { - spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); + if (gAnimMoveIndex == MOVE_DARK_VOID) + spriteId = CreateSprite(&gDarkVoidBlackHoleTemplate, baseX, baseY, 55); //dark void + else + spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); //destiny bond + if (spriteId != MAX_SPRITES) { x = 48; @@ -1004,7 +1079,7 @@ static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId) right = DISPLAY_WIDTH; top = 0; bottom = 112; - selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); + selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0)); gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step2; } @@ -1034,7 +1109,7 @@ static void AnimCurseNail(struct Sprite *sprite) s16 xDelta; s16 xDelta2; - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) { xDelta = 24; @@ -1120,7 +1195,7 @@ static void AnimCurseNail_End(struct Sprite *sprite) DestroyAnimSprite(sprite); } -static void AnimGhostStatusSprite(struct Sprite *sprite) +void AnimGhostStatusSprite(struct Sprite *sprite) { u16 coeffB; u16 coeffA; @@ -1175,7 +1250,7 @@ void AnimTask_GrudgeFlames(u8 taskId) task->data[0] = 0; task->data[1] = 16; - task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimAttacker); task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2) + 8; task->data[7] = 0; @@ -1189,7 +1264,7 @@ void AnimTask_GrudgeFlames(u8 taskId) task->func = AnimTask_GrudgeFlames_Step; } -static void AnimTask_GrudgeFlames_Step(u8 taskId) +void AnimTask_GrudgeFlames_Step(u8 taskId) { u16 i; u8 spriteId; @@ -1334,3 +1409,101 @@ static void AnimMonMoveCircular_Step(struct Sprite *sprite) sprite->callback = DestroySpriteAndMatrix; } } + +void AnimTask_PoltergeistItem(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + (GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT) / 2); + + task->data[0] = AddItemIconSprite(ANIM_TAG_ITEM_BAG, ANIM_TAG_ITEM_BAG, gLastUsedItem); + gSprites[task->data[0]].x = x + 4; + gSprites[task->data[0]].y = y + 4; + gSprites[task->data[0]].data[0] = x + 4; + gSprites[task->data[0]].data[1] = y + 4; + gSprites[task->data[0]].callback = AnimPoltergeistItem; + + task->data[1] = CreateSprite(&gPoltergeistEffectTemplate, x, y, 1); + gSprites[task->data[1]].data[0] = x; + gSprites[task->data[1]].data[1] = y; + + gAnimVisualTaskCount += 2; + + DestroyAnimVisualTask(taskId); +} + +static void AnimPoltergeistItem(struct Sprite *sprite) +{ + sprite->data[2] += 4; + + sprite->x = sprite->data[0] + Sin(sprite->data[2], 24); + sprite->y = sprite->data[1] + (Cos(sprite->data[2], 24) - 24); + + if (sprite->data[2] == 256) + DestroyAnimSprite(sprite); +} + +//pulverizing pancake - destiny bond shadow from attacker to target +void AnimTask_PulverizingPancakeWhiteShadow(u8 taskId) +{ + struct Task *task; + s16 battler; + u8 spriteId; + s16 baseX, baseY; + s16 x, y; + + task = &gTasks[taskId]; + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 16; + task->data[10] = gBattleAnimArgs[0]; + + baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM); + if (!IsContest()) + { + spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); + if (spriteId != MAX_SPRITES) + { + x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + y = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM); + gSprites[spriteId].data[0] = baseX << 4; + gSprites[spriteId].data[1] = baseY << 4; + gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[4] = gBattleAnimArgs[1]; + gSprites[spriteId].data[5] = x; + gSprites[spriteId].data[6] = y; + gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step; + + task->data[task->data[12] + 13] = spriteId; + task->data[12]++; + } + } + else + { + spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); + if (spriteId != MAX_SPRITES) + { + x = 48; + y = 40; + gSprites[spriteId].data[0] = baseX << 4; + gSprites[spriteId].data[1] = baseY << 4; + gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[4] = gBattleAnimArgs[1]; + gSprites[spriteId].data[5] = x; + gSprites[spriteId].data[6] = y; + gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step; + + task->data[13] = spriteId; + task->data[12] = 1; + } + } + + task->func = AnimTask_DestinyBondWhiteShadow_Step; +} diff --git a/src/battle_anim_ground.c b/src/battle_anim_ground.c index 2cd1351471..184107d488 100644 --- a/src/battle_anim_ground.c +++ b/src/battle_anim_ground.c @@ -8,14 +8,10 @@ static void AnimBonemerangProjectile(struct Sprite *); static void AnimBoneHitProjectile(struct Sprite *); -static void AnimDirtScatter(struct Sprite *); -static void AnimMudSportDirt(struct Sprite *); -static void AnimDirtPlumeParticle(struct Sprite *); static void AnimDirtPlumeParticle_Step(struct Sprite *); static void AnimDigDirtMound(struct Sprite *); static void AnimBonemerangProjectile_Step(struct Sprite *); static void AnimBonemerangProjectile_End(struct Sprite *); -static void AnimMudSportDirtRising(struct Sprite *); static void AnimMudSportDirtFalling(struct Sprite *); static void AnimTask_DigBounceMovement(u8); static void AnimTask_DigEndBounceMovementSetInvisible(u8); @@ -44,7 +40,7 @@ static const union AffineAnimCmd *const sAffineAnims_Bonemerang[] = sAffineAnim_Bonemerang, }; -static const union AffineAnimCmd *const sAffineAnims_SpinningBone[] = +const union AffineAnimCmd *const gAffineAnims_SpinningBone[] = { sAffineAnim_SpinningBone, }; @@ -67,7 +63,7 @@ const struct SpriteTemplate gSpinningBoneSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_SpinningBone, + .affineAnims = gAffineAnims_SpinningBone, .callback = AnimBoneHitProjectile, }; @@ -137,15 +133,37 @@ const struct SpriteTemplate gDirtMoundSpriteTemplate = .callback = AnimDigDirtMound, }; +const struct SpriteTemplate gMudBombSplash = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSludgeBombHitParticle, +}; + +const struct SpriteTemplate gMudBombToss = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = sAnims_MudSlapMud, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThrowProjectile, +}; + // Moves a bone projectile towards the target mon, which moves like // a boomerang. After hitting the target mon, it comes back to the user. static void AnimBonemerangProjectile(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] = 20; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[5] = -40; InitAnimArcTranslation(sprite); sprite->callback = AnimBonemerangProjectile_Step; @@ -160,8 +178,8 @@ static void AnimBonemerangProjectile_Step(struct Sprite *sprite) sprite->y2 = 0; sprite->x2 = 0; sprite->data[0] = 20; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[5] = 40; InitAnimArcTranslation(sprite); sprite->callback = AnimBonemerangProjectile_End; @@ -186,10 +204,10 @@ static void AnimBoneHitProjectile(struct Sprite *sprite) InitSpritePosToAnimTarget(sprite, TRUE); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - + sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -200,15 +218,15 @@ static void AnimBoneHitProjectile(struct Sprite *sprite) // arg 2: duration // arg 3: target x pixel offset // arg 4: target y pixel offset -static void AnimDirtScatter(struct Sprite *sprite) +void AnimDirtScatter(struct Sprite *sprite) { u8 targetXPos, targetYPos; s16 xOffset, yOffset; - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); - targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 2); - targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 3); + targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2); + targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); xOffset = Random2() & 0x1F; yOffset = Random2() & 0x1F; @@ -229,13 +247,13 @@ static void AnimDirtScatter(struct Sprite *sprite) // arg 0: 0 = dirt is rising into the air, 1 = dirt is falling down // arg 1: initial x pixel offset // arg 2: initial y pixel offset -static void AnimMudSportDirt(struct Sprite *sprite) +void AnimMudSportDirt(struct Sprite *sprite) { sprite->oam.tileNum++; if (gBattleAnimArgs[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1; sprite->callback = AnimMudSportDirtRising; } @@ -248,7 +266,7 @@ static void AnimMudSportDirt(struct Sprite *sprite) } } -static void AnimMudSportDirtRising(struct Sprite *sprite) +void AnimMudSportDirtRising(struct Sprite *sprite) { if (++sprite->data[1] > 1) { @@ -518,7 +536,7 @@ void AnimDirtPlumeParticle(struct Sprite *sprite) gBattleAnimArgs[2] *= -1; } - sprite->x = GetBattlerSpriteCoord(battler, 2) + xOffset; + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + xOffset; sprite->y = GetBattlerYCoordWithElevation(battler) + 30; sprite->data[0] = gBattleAnimArgs[5]; sprite->data[2] = sprite->x + gBattleAnimArgs[2]; @@ -549,7 +567,7 @@ static void AnimDigDirtMound(struct Sprite *sprite) else battler = gBattleAnimTarget; - sprite->x = GetBattlerSpriteCoord(battler, 0) - 16 + (gBattleAnimArgs[1] * 32); + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X) - 16 + (gBattleAnimArgs[1] * 32); sprite->y = GetBattlerYCoordWithElevation(battler) + 32; sprite->oam.tileNum += gBattleAnimArgs[1] * 8; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); @@ -557,7 +575,6 @@ static void AnimDigDirtMound(struct Sprite *sprite) sprite->callback = WaitAnimForDuration; } - #define tState data[0] #define tDelay data[1] #define tTimer data[2] diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index a0608cfd1c..22bfddee20 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -24,18 +24,14 @@ static void AnimUnusedIceCrystalThrow(struct Sprite *); static void AnimUnusedIceCrystalThrow_Step(struct Sprite *); static void AnimIcePunchSwirlingParticle(struct Sprite *); static void AnimIceBeamParticle(struct Sprite *); -static void AnimIceEffectParticle(struct Sprite *); static void AnimFlickerIceEffectParticle(struct Sprite *); static void AnimSwirlingSnowball(struct Sprite *); -static void AnimSwirlingSnowball_Step1(struct Sprite *); static void AnimSwirlingSnowball_Step2(struct Sprite *); static void AnimSwirlingSnowball_End(struct Sprite *); -static void AnimMoveParticleBeyondTarget(struct Sprite *); static void AnimWiggleParticleTowardsTarget(struct Sprite *); static void AnimWaveFromCenterOfTarget(struct Sprite *); static void InitSwirlingFogAnim(struct Sprite *); static void AnimSwirlingFogAnim(struct Sprite *); -static void AnimThrowMistBall(struct Sprite *); static void InitPoisonGasCloudAnim(struct Sprite *); static void MovePoisonGasCloud(struct Sprite *); static void AnimHailBegin(struct Sprite *); @@ -45,9 +41,11 @@ static void AnimThrowIceBall(struct Sprite *); static void InitIceBallParticle(struct Sprite *); static void AnimIceBallParticle(struct Sprite *); static void AnimTask_HazeScrollingFog_Step(u8); -static void AnimTask_LoadMistTiles_Step(u8); +static void AnimTask_MistBallFog_Step(u8); static void AnimTask_Hail2(u8); static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c); +static void AvalancheAnim_Step(struct Sprite *sprite); +static void AvalancheAnim_Step2(struct Sprite *sprite); static const union AnimCmd sAnim_Unused[] = { @@ -116,7 +114,7 @@ static const union AnimCmd *const sAnims_IceCrystalLargeChunk[] = sAnim_IceCrystalLargeChunk, }; -static const union AnimCmd *const sAnims_IceCrystalLarge[] = +const union AnimCmd *const gAnims_IceCrystalLarge[] = { sAnim_IceCrystalLarge, }; @@ -126,12 +124,12 @@ static const union AnimCmd *const sAnims_IceCrystalSmall[] = sAnim_IceCrystalSmall, }; -static const union AnimCmd *const sAnims_Snowball[] = +const union AnimCmd *const gAnims_Snowball[] = { sAnim_Snowball, }; -static const union AnimCmd *const sAnims_BlizzardIceCrystal[] = +const union AnimCmd *const gAnims_BlizzardIceCrystal[] = { sAnim_BlizzardIceCrystal, }; @@ -157,7 +155,7 @@ const struct SpriteTemplate gIceCrystalSpiralInwardLarge = .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, .oam = &gOamData_AffineDouble_ObjBlend_8x16, - .anims = sAnims_IceCrystalLarge, + .anims = gAnims_IceCrystalLarge, .images = NULL, .affineAnims = sAffineAnims_IceCrystalSpiralInwardLarge, .callback = AnimIcePunchSwirlingParticle, @@ -190,7 +188,7 @@ const struct SpriteTemplate gIceBeamInnerCrystalSpriteTemplate = .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, .oam = &gOamData_AffineNormal_ObjBlend_8x16, - .anims = sAnims_IceCrystalLarge, + .anims = gAnims_IceCrystalLarge, .images = NULL, .affineAnims = sAffineAnims_IceBeamInnerCrystal, .callback = AnimIceBeamParticle, @@ -215,7 +213,7 @@ static const union AffineAnimCmd sAffineAnim_IceCrystalHit[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_IceCrystalHit[] = +const union AffineAnimCmd *const gAffineAnims_IceCrystalHit[] = { sAffineAnim_IceCrystalHit, }; @@ -225,9 +223,9 @@ const struct SpriteTemplate gIceCrystalHitLargeSpriteTemplate = .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, .oam = &gOamData_AffineNormal_ObjBlend_8x16, - .anims = sAnims_IceCrystalLarge, + .anims = gAnims_IceCrystalLarge, .images = NULL, - .affineAnims = sAffineAnims_IceCrystalHit, + .affineAnims = gAffineAnims_IceCrystalHit, .callback = AnimIceEffectParticle, }; @@ -238,7 +236,7 @@ const struct SpriteTemplate gIceCrystalHitSmallSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_8x8, .anims = sAnims_IceCrystalSmall, .images = NULL, - .affineAnims = sAffineAnims_IceCrystalHit, + .affineAnims = gAffineAnims_IceCrystalHit, .callback = AnimIceEffectParticle, }; @@ -247,7 +245,7 @@ const struct SpriteTemplate gSwirlingSnowballSpriteTemplate = .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = sAnims_Snowball, + .anims = gAnims_Snowball, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimSwirlingSnowball, @@ -258,7 +256,7 @@ const struct SpriteTemplate gBlizzardIceCrystalSpriteTemplate = .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, .oam = &gOamData_AffineOff_ObjNormal_16x16, - .anims = sAnims_BlizzardIceCrystal, + .anims = gAnims_BlizzardIceCrystal, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimMoveParticleBeyondTarget, @@ -269,7 +267,7 @@ const struct SpriteTemplate gPowderSnowSnowballSpriteTemplate = .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = sAnims_Snowball, + .anims = gAnims_Snowball, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimMoveParticleBeyondTarget, @@ -353,7 +351,7 @@ const struct SpriteTemplate gMistBallSpriteTemplate = .callback = AnimThrowMistBall, }; -static const u8 wMistBlendAmounts[] = +static const u8 sMistBlendAmounts[] = { 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, }; @@ -456,7 +454,7 @@ static const union AnimCmd sAnim_IceBallChunk_1[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_IceBallChunk[] = +const union AnimCmd *const gAnims_IceBallChunk[] = { sAnim_IceBallChunk_0, sAnim_IceBallChunk_1, @@ -506,7 +504,7 @@ const struct SpriteTemplate gIceBallChunkSpriteTemplate = .tileTag = ANIM_TAG_ICE_CHUNK, .paletteTag = ANIM_TAG_ICE_CHUNK, .oam = &gOamData_AffineDouble_ObjNormal_32x32, - .anims = sAnims_IceBallChunk, + .anims = gAnims_IceBallChunk, .images = NULL, .affineAnims = sAffineAnims_IceBallChunk, .callback = InitIceBallAnim, @@ -523,6 +521,91 @@ const struct SpriteTemplate gIceBallImpactShardSpriteTemplate = .callback = InitIceBallParticle, }; +const union AnimCmd gAvalancheAnimTable_1[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +const union AnimCmd gAvalancheAnimTable_2[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END, +}; + +const union AnimCmd gAvalancheAnimTable_3[] = +{ + ANIMCMD_FRAME(64, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gAvalancheAnimCmd[] = +{ + gAvalancheAnimTable_1, + gAvalancheAnimTable_2, + gAvalancheAnimTable_3, +}; + +const struct SpriteTemplate gAvalancheSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAvalancheAnimCmd, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AvalancheAnim_Step, +}; + +const struct SpriteTemplate gChatterSingNotesTemplate = +{ + .tileTag = ANIM_TAG_MUSIC_NOTES, + .paletteTag = ANIM_TAG_MUSIC_NOTES, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gMusicNotesAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimIceEffectParticle +}; + +static void AvalancheAnim_Step(struct Sprite *sprite) +{ + if (gBattleAnimArgs[3] != 0) + SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->x, &sprite->y); + + 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, AvalancheAnim_Step2); + sprite->callback = TranslateSpriteInEllipse; + sprite->callback(sprite); +} + +static void AvalancheAnim_Step2(struct Sprite *sprite) +{ + sprite->x += sprite->data[5]; + + sprite->data[0] = 192; + sprite->data[1] = sprite->data[5]; + sprite->data[2] = 4; + sprite->data[3] = 32; + sprite->data[4] = -24; + + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteInEllipse; + sprite->callback(sprite); +} + // Unused static void AnimUnusedIceCrystalThrow(struct Sprite *sprite) { @@ -538,7 +621,7 @@ static void AnimUnusedIceCrystalThrow(struct Sprite *sprite) sprite->data[2] = gBattleAnimArgs[2] + targetX; sprite->data[3] = gBattleAnimArgs[1] + attackerY; sprite->data[4] = gBattleAnimArgs[3] + targetY; - sub_80A64EC(sprite); + ConvertPosDataToTranslateLinearData(sprite); for (;(targetX >= -32 && targetX <= DISPLAY_WIDTH + 32) && (targetY >= -32 && targetY <= DISPLAY_HEIGHT + 32); targetX += sprite->data[1], targetY += sprite->data[2]) @@ -557,7 +640,7 @@ static void AnimUnusedIceCrystalThrow(struct Sprite *sprite) sprite->data[2] = targetX; sprite->data[3] = attackerY; sprite->data[4] = targetY; - sub_80A64EC(sprite); + ConvertPosDataToTranslateLinearData(sprite); sprite->data[3] = gBattleAnimArgs[5]; sprite->data[4] = gBattleAnimArgs[6]; sprite->callback = AnimUnusedIceCrystalThrow_Step; @@ -592,7 +675,7 @@ static void AnimIcePunchSwirlingParticle(struct Sprite *sprite) sprite->data[3] = 30; sprite->data[4] = -512; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = TranslateSpriteInGrowingCircleOverDuration; + sprite->callback = TranslateSpriteInGrowingCircle; sprite->callback(sprite); } @@ -623,7 +706,7 @@ static void AnimIceBeamParticle(struct Sprite *sprite) // arg 0: target x offset // arg 1: target y offset // arg 2: ??? unknown boolean -static void AnimIceEffectParticle(struct Sprite *sprite) +void AnimIceEffectParticle(struct Sprite *sprite) { if (gBattleAnimArgs[2] == 0) { @@ -631,7 +714,7 @@ static void AnimIceEffectParticle(struct Sprite *sprite) } else { - SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->x, &sprite->y); + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; @@ -676,7 +759,7 @@ static void AnimSwirlingSnowball(struct Sprite *sprite) } else { - SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]); + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]); } if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) @@ -696,7 +779,8 @@ static void AnimSwirlingSnowball(struct Sprite *sprite) sprite->data[0] = 1; AnimFastTranslateLinear(sprite); - if ((u32)(sprite->x + sprite->x2 + 16) > DISPLAY_WIDTH + 32 + if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16 + || sprite->x + sprite->x2 < -16 || sprite->y + sprite->y2 > DISPLAY_HEIGHT || sprite->y + sprite->y2 < -16) break; @@ -714,7 +798,7 @@ static void AnimSwirlingSnowball(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step1); } -static void AnimSwirlingSnowball_Step1(struct Sprite *sprite) +void AnimSwirlingSnowball_Step1(struct Sprite *sprite) { s16 tempVar; @@ -762,7 +846,8 @@ static void AnimSwirlingSnowball_End(struct Sprite *sprite) sprite->data[0] = 1; AnimFastTranslateLinear(sprite); - if ((u32)(sprite->x + sprite->x2 + 16) > DISPLAY_WIDTH + 32 + if (sprite->x + sprite->x2 > 256 + || sprite->x + sprite->x2 < -16 || sprite->y + sprite->y2 > 256 || sprite->y + sprite->y2 < -16) DestroyAnimSprite(sprite); @@ -778,7 +863,7 @@ static void AnimSwirlingSnowball_End(struct Sprite *sprite) // arg 5: wave amplitude // arg 6: wave frequency // arg 7: multiple targets? (boolean) -static void AnimMoveParticleBeyondTarget(struct Sprite *sprite) +void AnimMoveParticleBeyondTarget(struct Sprite *sprite) { int i; s16 tempDataHolder[8]; @@ -796,7 +881,7 @@ static void AnimMoveParticleBeyondTarget(struct Sprite *sprite) } else { - SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]); + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]); } if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) @@ -816,7 +901,8 @@ static void AnimMoveParticleBeyondTarget(struct Sprite *sprite) { sprite->data[0] = 1; AnimFastTranslateLinear(sprite); - if ((u32)(sprite->x + sprite->x2 + 16) > DISPLAY_WIDTH + 32 + if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16 + || sprite->x + sprite->x2 < -16 || sprite->y + sprite->y2 > DISPLAY_HEIGHT || sprite->y + sprite->y2 < -16) break; @@ -846,7 +932,8 @@ static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite) sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF; if (sprite->data[0] == 1) { - if ((u32)(sprite->x + sprite->x2 + 16) > DISPLAY_WIDTH + 32 + if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16 + || sprite->x + sprite->x2 < -16 || sprite->y + sprite->y2 > DISPLAY_HEIGHT || sprite->y + sprite->y2 < -16) DestroyAnimSprite(sprite); @@ -867,7 +954,7 @@ static void AnimWaveFromCenterOfTarget(struct Sprite *sprite) } else { - SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->x, &sprite->y); + SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; @@ -905,7 +992,7 @@ static void InitSwirlingFogAnim(struct Sprite *sprite) } else { - SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->x, &sprite->y); + SetAverageBattlerPositions(gBattleAnimAttacker, FALSE, &sprite->x, &sprite->y); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) sprite->x -= gBattleAnimArgs[0]; else @@ -924,7 +1011,7 @@ static void InitSwirlingFogAnim(struct Sprite *sprite) } else { - SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->x, &sprite->y); + SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y); if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER) sprite->x -= gBattleAnimArgs[0]; else @@ -1000,7 +1087,7 @@ void AnimTask_HazeScrollingFog(u8 taskId) GetBattleAnimBg1Data(&animBg); LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset); - AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, FALSE); LoadPalette(&gFogPalette, animBg.paletteId * 16, 32); gTasks[taskId].func = AnimTask_HazeScrollingFog_Step; @@ -1078,7 +1165,7 @@ static void AnimTask_HazeScrollingFog_Step(u8 taskId) // arg 3: target y offset // arg 4: duration // arg 5: ??? unknown (seems to vibrate target mon somehow) -static void AnimThrowMistBall(struct Sprite *sprite) +void AnimThrowMistBall(struct Sprite *sprite) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); @@ -1086,7 +1173,7 @@ static void AnimThrowMistBall(struct Sprite *sprite) } // Displays misty background in Mist Ball. -void AnimTask_LoadMistTiles(u8 taskId) +void AnimTask_MistBallFog(u8 taskId) { struct BattleAnimBgData animBg; @@ -1105,14 +1192,14 @@ void AnimTask_LoadMistTiles(u8 taskId) GetBattleAnimBg1Data(&animBg); LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset); - AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, FALSE); LoadPalette(&gFogPalette, animBg.paletteId * 16, 32); gTasks[taskId].data[15] = -1; - gTasks[taskId].func = AnimTask_LoadMistTiles_Step; + gTasks[taskId].func = AnimTask_MistBallFog_Step; } -static void AnimTask_LoadMistTiles_Step(u8 taskId) +static void AnimTask_MistBallFog_Step(u8 taskId) { struct BattleAnimBgData animBg; @@ -1123,7 +1210,7 @@ static void AnimTask_LoadMistTiles_Step(u8 taskId) { case 0: gTasks[taskId].data[9] += 1; - gTasks[taskId].data[11] = wMistBlendAmounts[gTasks[taskId].data[9]]; + gTasks[taskId].data[11] = sMistBlendAmounts[gTasks[taskId].data[9]]; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 17 - gTasks[taskId].data[11])); if (gTasks[taskId].data[11] == 5) { @@ -1410,14 +1497,14 @@ static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, } else { - battlerX = (sHailCoordData[hailStructId].x); - battlerY = (sHailCoordData[hailStructId].y); + battlerX = sHailCoordData[hailStructId].x; + battlerY = sHailCoordData[hailStructId].y; } } else { - battlerX = (sHailCoordData[hailStructId].x); - battlerY = (sHailCoordData[hailStructId].y); + battlerX = sHailCoordData[hailStructId].x; + battlerY = sHailCoordData[hailStructId].y; } spriteX = battlerX - ((battlerY + 8) / 2); id = CreateSprite(&gHailParticleSpriteTemplate, spriteX, -8, 18); @@ -1497,7 +1584,7 @@ static void InitIceBallAnim(struct Sprite *sprite) animNum = 4; StartSpriteAffineAnim(sprite, animNum); - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[4]; diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index 31857c4dcc..91798463bd 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -5,7 +5,6 @@ #include "task.h" #include "trig.h" -// This file's functions. static void AnimTask_ShakeMon_Step(u8 taskId); static void AnimTask_ShakeMon2_Step(u8 taskId); static void AnimTask_ShakeMonInPlace_Step(u8 taskId); @@ -14,7 +13,7 @@ static void AnimTask_TranslateMonElliptical_Step(u8 taskId); static void DoHorizontalLunge(struct Sprite *sprite); static void ReverseHorizontalLungeDirection(struct Sprite *sprite); static void DoVerticalDip(struct Sprite *sprite); -static void ReverseVerticalDipDirection(struct Sprite* sprite); +static void ReverseVerticalDipDirection(struct Sprite *sprite); static void SlideMonToOriginalPos(struct Sprite *sprite); static void SlideMonToOriginalPos_Step(struct Sprite *sprite); static void SlideMonToOffset(struct Sprite *sprite); @@ -27,6 +26,7 @@ static void AnimTask_ScaleMonAndRestore_Step(u8 taskId); static void AnimTask_RotateMonSpriteToSide_Step(u8 taskId); static void AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step(u8 taskId); static void AnimTask_SlideOffScreen_Step(u8 taskId); +static void AnimTask_RotateVerticallyStep(u8 taskId); const struct SpriteTemplate gHorizontalLungeSpriteTemplate = { @@ -108,7 +108,7 @@ void AnimTask_ShakeMon(u8 taskId) gTasks[taskId].data[4] = gBattleAnimArgs[1]; gTasks[taskId].data[5] = gBattleAnimArgs[2]; gTasks[taskId].func = AnimTask_ShakeMon_Step; - AnimTask_ShakeMon_Step(taskId); + gTasks[taskId].func(taskId); } static void AnimTask_ShakeMon_Step(u8 taskId) @@ -156,17 +156,14 @@ static void AnimTask_ShakeMon_Step(u8 taskId) void AnimTask_ShakeMon2(u8 taskId) { u8 spriteId; - bool8 destroy = FALSE; + bool8 abort = FALSE; u8 battlerId; if (gBattleAnimArgs[0] < MAX_BATTLERS_COUNT) { spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); if (spriteId == SPRITE_NONE) - { - DestroyAnimVisualTask(taskId); - return; - } + abort = TRUE; } else if (gBattleAnimArgs[0] != 8) { @@ -188,7 +185,7 @@ void AnimTask_ShakeMon2(u8 taskId) } if (IsBattlerSpriteVisible(battlerId) == FALSE) - destroy = TRUE; + abort = TRUE; spriteId = gBattlerSpriteIds[battlerId]; } @@ -197,7 +194,7 @@ void AnimTask_ShakeMon2(u8 taskId) spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; } - if (destroy) + if (abort) { DestroyAnimVisualTask(taskId); return; @@ -320,6 +317,13 @@ static void AnimTask_ShakeMonInPlace_Step(u8 taskId) void AnimTask_ShakeAndSinkMon(u8 taskId) { u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + + if (spriteId == SPRITE_NONE) + { + DestroyAnimVisualTask(taskId); + return; + } + gSprites[spriteId].x2 = gBattleAnimArgs[1]; gTasks[taskId].data[0] = spriteId; gTasks[taskId].data[1] = gBattleAnimArgs[1]; @@ -332,10 +336,8 @@ void AnimTask_ShakeAndSinkMon(u8 taskId) static void AnimTask_ShakeAndSinkMon_Step(u8 taskId) { - s16 x; - u8 spriteId; - spriteId = gTasks[taskId].data[0]; - x = gTasks[taskId].data[1]; + u8 spriteId = gTasks[taskId].data[0]; + s16 x = gTasks[taskId].data[1]; if (gTasks[taskId].data[2] == gTasks[taskId].data[8]++) { gTasks[taskId].data[8] = 0; @@ -365,11 +367,8 @@ static void AnimTask_ShakeAndSinkMon_Step(u8 taskId) void AnimTask_TranslateMonElliptical(u8 taskId) { u8 i; - u8 spriteId; - u8 wavePeriod; - - wavePeriod = 1; - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + u8 wavePeriod = 1; + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); if (gBattleAnimArgs[4] > 5) gBattleAnimArgs[4] = 5; @@ -441,14 +440,14 @@ static void DoHorizontalLunge(struct Sprite *sprite) sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; sprite->data[4] = gBattleAnimArgs[0]; StoreSpriteCallbackInData6(sprite, ReverseHorizontalLungeDirection); - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; } static void ReverseHorizontalLungeDirection(struct Sprite *sprite) { sprite->data[0] = sprite->data[4]; sprite->data[1] = -sprite->data[1]; - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -468,14 +467,14 @@ static void DoVerticalDip(struct Sprite *sprite) sprite->data[3] = spriteId; sprite->data[4] = gBattleAnimArgs[0]; StoreSpriteCallbackInData6(sprite, ReverseVerticalDipDirection); - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; } static void ReverseVerticalDipDirection(struct Sprite *sprite) { sprite->data[0] = sprite->data[4]; sprite->data[2] = -sprite->data[2]; - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -581,7 +580,7 @@ static void SlideMonToOffset(struct Sprite *sprite) sprite->data[5] = monSpriteId; sprite->invisible = TRUE; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = TranslateMonSpriteLinearFixedPoint; + sprite->callback = TranslateSpriteLinearByIdFixedPoint; } static void SlideMonToOffsetAndBack(struct Sprite *sprite) @@ -622,7 +621,7 @@ static void SlideMonToOffsetAndBack(struct Sprite *sprite) { StoreSpriteCallbackInData6(sprite, SlideMonToOffsetAndBack_End); } - sprite->callback = TranslateMonSpriteLinearFixedPoint; + sprite->callback = TranslateSpriteLinearByIdFixedPoint; } @@ -742,7 +741,7 @@ static void AnimTask_SlideOffScreen_Step(u8 taskId) { u8 spriteId = gTasks[taskId].data[0]; gSprites[spriteId].x2 += gTasks[taskId].data[1]; - if (gSprites[spriteId].x2 + gSprites[spriteId].x + 0x20 > 0x130u) + if (gSprites[spriteId].x2 + gSprites[spriteId].x < -32 || gSprites[spriteId].x2 + gSprites[spriteId].x > DISPLAY_WIDTH + 32) { DestroyAnimVisualTask(taskId); return; @@ -764,6 +763,11 @@ void AnimTask_SwayMon(u8 taskId) gBattleAnimArgs[1] = -gBattleAnimArgs[1]; spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[4]); + if (spriteId == 0xff) + { + DestroyAnimVisualTask(taskId); + return; + } gTasks[taskId].data[0] = gBattleAnimArgs[0]; gTasks[taskId].data[1] = gBattleAnimArgs[1]; gTasks[taskId].data[2] = gBattleAnimArgs[2]; @@ -831,8 +835,7 @@ static void AnimTask_SwayMonStep(u8 taskId) // arg 4: sprite object mode void AnimTask_ScaleMonAndRestore(u8 taskId) { - u8 spriteId; - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[3]); + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[3]); PrepareBattlerSpriteForRotScale(spriteId, gBattleAnimArgs[4]); gTasks[taskId].data[0] = gBattleAnimArgs[0]; gTasks[taskId].data[1] = gBattleAnimArgs[1]; @@ -893,7 +896,7 @@ void AnimTask_RotateMonSpriteToSide(u8 taskId) } else { - if (gBattleAnimArgs[2] == 0) + if (gBattleAnimArgs[2] == ANIM_ATTACKER) { gTasks[taskId].data[7] = !GetBattlerSide(gBattleAnimAttacker); } @@ -916,8 +919,7 @@ void AnimTask_RotateMonSpriteToSide(u8 taskId) // Rotates mon to side and back to original position. For Peck and when a held item activates void AnimTask_RotateMonToSideAndRestore(u8 taskId) { - u8 spriteId; - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = gBattleAnimArgs[0]; @@ -979,7 +981,7 @@ static void AnimTask_RotateMonSpriteToSide_Step(u8 taskId) } } -void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId) +void SetupShakeBattlerBasedOnMovePowerOrDmg(u8 taskId, u8 animBattlerId) { if (!gBattleAnimArgs[0]) { @@ -1010,12 +1012,23 @@ void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId) gTasks[taskId].data[12] = 0; gTasks[taskId].data[10] = gBattleAnimArgs[3]; gTasks[taskId].data[11] = gBattleAnimArgs[4]; - gTasks[taskId].data[7] = GetAnimBattlerSpriteId(ANIM_TARGET); + gTasks[taskId].data[7] = GetAnimBattlerSpriteId(animBattlerId); gTasks[taskId].data[8] = gSprites[gTasks[taskId].data[7]].x2; gTasks[taskId].data[9] = gSprites[gTasks[taskId].data[7]].y2; gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = gBattleAnimArgs[1]; gTasks[taskId].data[2] = gBattleAnimArgs[2]; +} + +void AnimTask_ShakeTargetPartnerBasedOnMovePowerOrDmg(u8 taskId) +{ + SetupShakeBattlerBasedOnMovePowerOrDmg(taskId, ANIM_DEF_PARTNER); + gTasks[taskId].func = AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step; +} + +void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId) +{ + SetupShakeBattlerBasedOnMovePowerOrDmg(taskId, ANIM_TARGET); gTasks[taskId].func = AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step; } @@ -1057,3 +1070,68 @@ static void AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step(u8 taskId) } } } + +#define tSpriteId data[0] +#define tRotSpeed data[1] +#define tRotCurr data[2] +#define tPhase data[3] +#define tFrames data[4] +#define tPlayerSide data[5] +#define tRotMax data[6] // Can't fully flip back sprites + +void AnimTask_RotateVertically(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); + gTasks[taskId].tSpriteId = spriteId; + gTasks[taskId].tRotCurr = 0; + gTasks[taskId].tPlayerSide = ((GetBattlerSide(GetAnimBattlerId(gBattleAnimArgs[0]))) == B_SIDE_PLAYER); + gTasks[taskId].tRotMax = gTasks[taskId].tPlayerSide ? 0x1FFF : 0x7FFE; + gTasks[taskId].tRotSpeed = gBattleAnimArgs[1]; + gTasks[taskId].func = AnimTask_RotateVerticallyStep; +} + +static void AnimTask_RotateVerticallyStep(u8 taskId) +{ + switch (gTasks[taskId].tPhase) + { + case 0: // flip upside-down + gTasks[taskId].tRotCurr = min(abs(gTasks[taskId].tRotCurr + gTasks[taskId].tRotSpeed), gTasks[taskId].tRotMax); + SetSpriteRotScale(gTasks[taskId].tSpriteId, 0x100, 0x100, gTasks[taskId].tRotCurr); + if (gTasks[taskId].tPlayerSide) + SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].tSpriteId); + + if (gTasks[taskId].tRotCurr == gTasks[taskId].tRotMax) + gTasks[taskId].tPhase++; + break; + case 1: // Wait a bit + if (++gTasks[taskId].tFrames >= 75) + gTasks[taskId].tPhase++; + break; + case 2: // rotate back + if (gTasks[taskId].tRotCurr < gTasks[taskId].tRotSpeed) + gTasks[taskId].tRotCurr = 0; + else + gTasks[taskId].tRotCurr = gTasks[taskId].tRotCurr - gTasks[taskId].tRotSpeed; + SetSpriteRotScale(gTasks[taskId].tSpriteId, 0x100, 0x100, gTasks[taskId].tRotCurr); + if (gTasks[taskId].tPlayerSide) + SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].tSpriteId); + + if (gTasks[taskId].tRotCurr == 0) + gTasks[taskId].tPhase++; + break; + case 3: // end + ResetSpriteRotScale(gTasks[taskId].tSpriteId); + DestroyAnimVisualTask(taskId); + break; + } +} + +#undef tSpriteId +#undef tRotSpeed +#undef tRotCurr +#undef tPhase +#undef tFrames +#undef tPlayerSide +#undef tRotMax diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 27432b4808..659c088b26 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" +#include "battle_interface.h" #include "bg.h" #include "contest.h" #include "data.h" @@ -20,32 +21,34 @@ extern const struct OamData gOamData_AffineNormal_ObjNormal_64x64; -static void sub_80A6FB4(struct Sprite *sprite); +static void AnimTranslateLinear_WithFollowup_SetCornerVecX(struct Sprite *sprite); static void AnimFastTranslateLinearWaitEnd(struct Sprite *sprite); static void AnimThrowProjectile_Step(struct Sprite *sprite); -static void sub_80A8DFC(struct Sprite *sprite); +static void AnimBattlerTrace(struct Sprite *sprite); static void AnimWeatherBallUp_Step(struct Sprite *sprite); static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId); static void AnimTask_BlendPalInAndOutSetup(struct Task *task); static void AnimTask_AlphaFadeIn_Step(u8 taskId); static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId); static void AnimTask_BlendMonInAndOut_Step(u8 taskId); -static bool8 sub_80A7238(void); -static void sub_80A8D78(struct Task *task, u8 taskId); +static bool8 ShouldRotScaleSpeciesBeFlipped(void); +static void CreateBattlerTrace(struct Task *task, u8 taskId); -// EWRAM vars -EWRAM_DATA static union AffineAnimCmd *gAnimTaskAffineAnim = NULL; +EWRAM_DATA static union AffineAnimCmd *sAnimTaskAffineAnim = NULL; -// Const rom data -static const struct UCoords8 sBattlerCoords[][4] = +#if P_ENABLE_DEBUG == TRUE +const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] = +#else +static const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] = +#endif { - { + { // Single battle { 72, 80 }, { 176, 40 }, { 48, 40 }, { 112, 80 }, }, - { + { // Double battle { 32, 80 }, { 200, 40 }, { 90, 88 }, @@ -54,36 +57,40 @@ static const struct UCoords8 sBattlerCoords[][4] = }; // One entry for each of the four Castform forms. -const struct MonCoords gCastformFrontSpriteCoords[] = +const struct MonCoords gCastformFrontSpriteCoords[NUM_CASTFORM_FORMS] = { - { .size = 0x44, .y_offset = 17 }, // NORMAL - { .size = 0x66, .y_offset = 9 }, // SUN - { .size = 0x46, .y_offset = 9 }, // RAIN - { .size = 0x86, .y_offset = 8 }, // HAIL + [CASTFORM_NORMAL] = { .size = MON_COORDS_SIZE(32, 32), .y_offset = 17 }, + [CASTFORM_FIRE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, + [CASTFORM_WATER] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 9 }, + [CASTFORM_ICE] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 8 }, }; -static const u8 sCastformElevations[] = +#if P_ENABLE_DEBUG == TRUE +const u8 sCastformElevations[NUM_CASTFORM_FORMS] = +#else +static const u8 sCastformElevations[NUM_CASTFORM_FORMS] = +#endif { - 13, // NORMAL - 14, // SUN - 13, // RAIN - 13, // HAIL + [CASTFORM_NORMAL] = 13, + [CASTFORM_FIRE] = 14, + [CASTFORM_WATER] = 13, + [CASTFORM_ICE] = 13, }; // Y position of the backsprite for each of the four Castform forms. -static const u8 sCastformBackSpriteYCoords[] = +static const u8 sCastformBackSpriteYCoords[NUM_CASTFORM_FORMS] = { - 0, // NORMAL - 0, // SUN - 0, // RAIN - 0, // HAIL + [CASTFORM_NORMAL] = 0, + [CASTFORM_FIRE] = 0, + [CASTFORM_WATER] = 0, + [CASTFORM_ICE] = 0, }; // Placeholders for pokemon sprites to be created for a move animation effect (e.g. Role Play / Snatch) #define TAG_MOVE_EFFECT_MON_1 55125 #define TAG_MOVE_EFFECT_MON_2 55126 -static const struct SpriteTemplate sSpriteTemplate_MoveEffectMons[] = +static const struct SpriteTemplate sSpriteTemplates_MoveEffectMons[] = { { .tileTag = TAG_MOVE_EFFECT_MON_1, @@ -105,7 +112,7 @@ static const struct SpriteTemplate sSpriteTemplate_MoveEffectMons[] = } }; -static const struct SpriteSheet sSpriteSheet_MoveEffectMons[] = +static const struct SpriteSheet sSpriteSheets_MoveEffectMons[] = { { gMiscBlank_Gfx, MON_PIC_SIZE, TAG_MOVE_EFFECT_MON_1, }, { gMiscBlank_Gfx, MON_PIC_SIZE, TAG_MOVE_EFFECT_MON_2, }, @@ -115,6 +122,7 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) { u8 retVal; u16 species; + struct Pokemon *mon, *illusionMon; struct BattleSpriteInfo *spriteInfo; if (IsContest()) @@ -127,10 +135,10 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) { case BATTLER_COORD_X: case BATTLER_COORD_X_2: - retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].x; + retVal = sBattlerCoords[WhichBattleCoords(battlerId)][GetBattlerPosition(battlerId)].x; break; case BATTLER_COORD_Y: - retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y; + retVal = sBattlerCoords[WhichBattleCoords(battlerId)][GetBattlerPosition(battlerId)].y; break; case BATTLER_COORD_Y_PIC_OFFSET: case BATTLER_COORD_Y_PIC_OFFSET_DEFAULT: @@ -145,21 +153,18 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) else { if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; - } + mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; else - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; - } + mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; + + illusionMon = GetIllusionMonPtr(battlerId); + if (illusionMon != NULL) + mon = illusionMon; + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(mon, MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; } if (coordType == BATTLER_COORD_Y_PIC_OFFSET) retVal = GetBattlerSpriteFinal_Y(battlerId, species, TRUE); @@ -274,13 +279,13 @@ u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3) offset = GetBattlerYDelta(battlerId, species); offset -= GetBattlerElevation(battlerId, species); } - y = offset + sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y; + y = offset + sBattlerCoords[WhichBattleCoords(battlerId)][GetBattlerPosition(battlerId)].y; if (a3) { if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) y += 8; - if (y > 104) - y = 104; + if (y > DISPLAY_HEIGHT - MON_PIC_HEIGHT + 8) + y = DISPLAY_HEIGHT - MON_PIC_HEIGHT + 8; } return y; } @@ -377,7 +382,7 @@ u8 GetAnimBattlerSpriteId(u8 animBattler) } else { - return 0xff; + return SPRITE_NONE; } } else if (animBattler == ANIM_TARGET) @@ -389,13 +394,13 @@ u8 GetAnimBattlerSpriteId(u8 animBattler) } else { - return 0xff; + return SPRITE_NONE; } } else if (animBattler == ANIM_ATK_PARTNER) { if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) - return 0xff; + return SPRITE_NONE; else return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]; } @@ -404,11 +409,11 @@ u8 GetAnimBattlerSpriteId(u8 animBattler) if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]; else - return 0xff; + return SPRITE_NONE; } } -void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite*)) +void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite *)) { sprite->data[6] = (u32)(callback) & 0xffff; sprite->data[7] = (u32)(callback) >> 16; @@ -420,18 +425,38 @@ void SetCallbackToStoredInData6(struct Sprite *sprite) sprite->callback = (void (*)(struct Sprite *))callback; } -void TranslateSpriteInCircleOverDuration(struct Sprite *sprite) +// Sprite data for TranslateSpriteInCircle/Ellipse and related +#define sCirclePos data[0] +#define sAmplitude data[1] +#define sCircleSpeed data[2] +#define sDuration data[3] + +// TranslateSpriteInGrowingCircle +#define sAmplitudeSpeed data[4] +#define sAmplitudeChange data[5] + +// TranslateSpriteInEllipse +#define sAmplitudeX sAmplitude +#define sAmplitudeY data[4] + +// TranslateSpriteInLissajousCurve +#define sCirclePosX sCirclePos +#define sCircleSpeedX sCircleSpeed +#define sCirclePosY data[4] +#define sCircleSpeedY data[5] + +void TranslateSpriteInCircle(struct Sprite *sprite) { - if (sprite->data[3]) + if (sprite->sDuration) { - sprite->x2 = Sin(sprite->data[0], sprite->data[1]); - sprite->y2 = Cos(sprite->data[0], sprite->data[1]); - sprite->data[0] += sprite->data[2]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - sprite->data[3]--; + sprite->x2 = Sin(sprite->sCirclePos, sprite->sAmplitude); + sprite->y2 = Cos(sprite->sCirclePos, sprite->sAmplitude); + sprite->sCirclePos += sprite->sCircleSpeed; + if (sprite->sCirclePos >= 0x100) + sprite->sCirclePos -= 0x100; + else if (sprite->sCirclePos < 0) + sprite->sCirclePos += 0x100; + sprite->sDuration--; } else { @@ -439,19 +464,19 @@ void TranslateSpriteInCircleOverDuration(struct Sprite *sprite) } } -void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite) +void TranslateSpriteInGrowingCircle(struct Sprite *sprite) { - if (sprite->data[3]) + if (sprite->sDuration) { - sprite->x2 = Sin(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); - sprite->y2 = Cos(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); - sprite->data[0] += sprite->data[2]; - sprite->data[5] += sprite->data[4]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - sprite->data[3]--; + sprite->x2 = Sin(sprite->sCirclePos, (sprite->sAmplitudeChange >> 8) + sprite->sAmplitude); + sprite->y2 = Cos(sprite->sCirclePos, (sprite->sAmplitudeChange >> 8) + sprite->sAmplitude); + sprite->sCirclePos += sprite->sCircleSpeed; + sprite->sAmplitudeChange += sprite->sAmplitudeSpeed; + if (sprite->sCirclePos >= 0x100) + sprite->sCirclePos -= 0x100; + else if (sprite->sCirclePos < 0) + sprite->sCirclePos += 0x100; + sprite->sDuration--; } else { @@ -459,23 +484,28 @@ void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite) } } -void sub_80A63C8(struct Sprite *sprite) +// Unused +// Exact shape depends on arguments. Can move in a figure-8-like pattern, or circular, etc. +static void TranslateSpriteInLissajousCurve(struct Sprite *sprite) { - if (sprite->data[3]) + if (sprite->sDuration) { - sprite->x2 = Sin(sprite->data[0], sprite->data[1]); - sprite->y2 = Cos(sprite->data[4], sprite->data[1]); - sprite->data[0] += sprite->data[2]; - sprite->data[4] += sprite->data[5]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - if (sprite->data[4] >= 0x100) - sprite->data[4] -= 0x100; - else if (sprite->data[4] < 0) - sprite->data[4] += 0x100; - sprite->data[3]--; + sprite->x2 = Sin(sprite->sCirclePosX, sprite->sAmplitude); + sprite->y2 = Cos(sprite->sCirclePosY, sprite->sAmplitude); + sprite->sCirclePosX += sprite->sCircleSpeedX; + sprite->sCirclePosY += sprite->sCircleSpeedY; + + if (sprite->sCirclePosX >= 0x100) + sprite->sCirclePosX -= 0x100; + else if (sprite->sCirclePosX < 0) + sprite->sCirclePosX += 0x100; + + if (sprite->sCirclePosY >= 0x100) + sprite->sCirclePosY -= 0x100; + else if (sprite->sCirclePosY < 0) + sprite->sCirclePosY += 0x100; + + sprite->sDuration--; } else { @@ -483,18 +513,18 @@ void sub_80A63C8(struct Sprite *sprite) } } -void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite) +void TranslateSpriteInEllipse(struct Sprite *sprite) { - if (sprite->data[3]) + if (sprite->sDuration) { - sprite->x2 = Sin(sprite->data[0], sprite->data[1]); - sprite->y2 = Cos(sprite->data[0], sprite->data[4]); - sprite->data[0] += sprite->data[2]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - sprite->data[3]--; + sprite->x2 = Sin(sprite->sCirclePos, sprite->sAmplitudeX); + sprite->y2 = Cos(sprite->sCirclePos, sprite->sAmplitudeY); + sprite->sCirclePos += sprite->sCircleSpeed; + if (sprite->sCirclePos >= 0x100) + sprite->sCirclePos -= 0x100; + else if (sprite->sCirclePos < 0) + sprite->sCirclePos += 0x100; + sprite->sDuration--; } else { @@ -502,6 +532,19 @@ void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite) } } +#undef sCirclePos +#undef sAmplitude +#undef sCircleSpeed +#undef sDuration +#undef sAmplitudeSpeed +#undef sAmplitudeChange +#undef sAmplitudeX +#undef sAmplitudeY +#undef sCirclePosX +#undef sCircleSpeedX +#undef sCirclePosY +#undef sCircleSpeedY + // Simply waits until the sprite's data[0] hits zero. // This is used to let sprite anims or affine anims to run for a designated // duration. @@ -513,34 +556,47 @@ void WaitAnimForDuration(struct Sprite *sprite) SetCallbackToStoredInData6(sprite); } -static void sub_80A64D0(struct Sprite *sprite) +// Sprite data for ConvertPosDataToTranslateLinearData +#define sStepsX data[0] +#define sStartX data[1] +#define sTargetX data[2] +#define sStartY data[3] +#define sTargetY data[4] + +// Sprite data for TranslateSpriteLinear +#define sMoveSteps data[0] +#define sSpeedX data[1] +#define sSpeedY data[2] + +// Functionally unused +static void AnimPosToTranslateLinear(struct Sprite *sprite) { - sub_80A64EC(sprite); + ConvertPosDataToTranslateLinearData(sprite); sprite->callback = TranslateSpriteLinear; sprite->callback(sprite); } -void sub_80A64EC(struct Sprite *sprite) +void ConvertPosDataToTranslateLinearData(struct Sprite *sprite) { s16 old; int xDiff; - if (sprite->data[1] > sprite->data[2]) - sprite->data[0] = -sprite->data[0]; - xDiff = sprite->data[2] - sprite->data[1]; - old = sprite->data[0]; - sprite->data[0] = abs(xDiff / sprite->data[0]); - sprite->data[2] = (sprite->data[4] - sprite->data[3]) / sprite->data[0]; - sprite->data[1] = old; + if (sprite->sStartX > sprite->sTargetX) + sprite->sStepsX = -sprite->sStepsX; + xDiff = sprite->sTargetX - sprite->sStartX; + old = sprite->sStepsX; + sprite->sMoveSteps = abs(xDiff / sprite->sStepsX); + sprite->sSpeedY = (sprite->sTargetY - sprite->sStartY) / sprite->sMoveSteps; + sprite->sSpeedX = old; } void TranslateSpriteLinear(struct Sprite *sprite) { - if (sprite->data[0] > 0) + if (sprite->sMoveSteps > 0) { - sprite->data[0]--; - sprite->x2 += sprite->data[1]; - sprite->y2 += sprite->data[2]; + sprite->sMoveSteps--; + sprite->x2 += sprite->sSpeedX; + sprite->y2 += sprite->sSpeedY; } else { @@ -582,16 +638,18 @@ static void TranslateSpriteLinearFixedPointIconFrame(struct Sprite *sprite) UpdateMonIconFrame(sprite); } -void sub_80A65EC(struct Sprite *sprite) +// Unused +static void TranslateSpriteToBattleTargetPos(struct Sprite *sprite) { - sprite->data[1] = sprite->x + sprite->x2; - sprite->data[3] = sprite->y + sprite->y2; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); - sprite->callback = sub_80A64D0; + sprite->sStartX = sprite->x + sprite->x2; + sprite->sStartY = sprite->y + sprite->y2; + sprite->sTargetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->sTargetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = AnimPosToTranslateLinear; } -void TranslateMonSpriteLinear(struct Sprite *sprite) +// Same as TranslateSpriteLinear but takes an id to specify which sprite to move +void TranslateSpriteLinearById(struct Sprite *sprite) { if (sprite->data[0] > 0) { @@ -605,7 +663,7 @@ void TranslateMonSpriteLinear(struct Sprite *sprite) } } -void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite) +void TranslateSpriteLinearByIdFixedPoint(struct Sprite *sprite) { if (sprite->data[0] > 0) { @@ -648,18 +706,26 @@ void DestroySpriteAndMatrix(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_80A6760(struct Sprite *sprite) +// Unused +static void TranslateSpriteToBattleAttackerPos(struct Sprite *sprite) { - sprite->data[1] = sprite->x + sprite->x2; - sprite->data[3] = sprite->y + sprite->y2; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); - sprite->callback = sub_80A64D0; + sprite->sStartX = sprite->x + sprite->x2; + sprite->sStartY = sprite->y + sprite->y2; + sprite->sTargetX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->sTargetY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = AnimPosToTranslateLinear; } -void sub_80A67A4(struct Sprite *sprite) +#undef sStepsX +#undef sStartX +#undef sTargetX +#undef sStartY +#undef sTargetY + +// Unused +static void EndUnkPaletteAnim(struct Sprite *sprite) { - ResetPaletteStructByUid(sprite->data[5]); + PaletteStruct_ResetById(sprite->data[5]); DestroySpriteAndMatrix(sprite); } @@ -783,6 +849,46 @@ void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffse sprite->y += gBattleAnimArgs[1]; } +void InitSpritePosToAnimAttackerPartner(struct Sprite *sprite, bool8 respectMonPicOffsets) +{ + if (!respectMonPicOffsets) + { + sprite->x = GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_Y); + } + else + { + sprite->x = GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_Y_PIC_OFFSET); + } + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->y += gBattleAnimArgs[1]; +} + +bool32 InitSpritePosToAnimBattler(u32 animBattlerId, struct Sprite *sprite, bool8 respectMonPicOffsets) +{ + u32 battlerId = GetAnimBattlerId(animBattlerId); + if (GetAnimBattlerSpriteId(animBattlerId) == 0xFF || !IsBattlerSpriteVisible(battlerId)) + { + DestroyAnimSprite(sprite); + return FALSE; + } + + if (!respectMonPicOffsets) + { + sprite->x = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_Y); + } + else if (animBattlerId != ANIM_TARGET) + { + sprite->x = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_Y_PIC_OFFSET); + } + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->y += gBattleAnimArgs[1]; + return TRUE; +} + u8 GetBattlerSide(u8 battlerId) { return GET_BATTLER_SIDE2(battlerId); @@ -819,21 +925,23 @@ bool8 IsBattlerSpritePresent(u8 battlerId) else { if (gBattlerPositions[battlerId] == 0xff) - { return FALSE; - } - else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + + if (!gBattleStruct->spriteIgnore0Hp) { - if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0) - return TRUE; - } - else - { - if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0) - return TRUE; + if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) + { + if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) == 0) + return FALSE; + } + else + { + if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) == 0) + return FALSE; + } } + return TRUE; } - return FALSE; } bool8 IsDoubleBattle(void) @@ -841,22 +949,26 @@ bool8 IsDoubleBattle(void) return IS_DOUBLE_BATTLE(); } +#define BG_ANIM_PAL_1 8 +#define BG_ANIM_PAL_2 9 +#define BG_ANIM_PAL_CONTEST 14 + void GetBattleAnimBg1Data(struct BattleAnimBgData *out) { if (IsContest()) { - out->bgTiles = gUnknown_0202305C; - out->bgTilemap = (u16 *)gUnknown_02023060; - out->paletteId = 14; + out->bgTiles = gBattleAnimBgTileBuffer; + out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; + out->paletteId = BG_ANIM_PAL_CONTEST; out->bgId = 1; out->tilesOffset = 0; out->unused = 0; } else { - out->bgTiles = gUnknown_0202305C; - out->bgTilemap = (u16 *)gUnknown_02023060; - out->paletteId = 8; + out->bgTiles = gBattleAnimBgTileBuffer; + out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; + out->paletteId = BG_ANIM_PAL_1; out->bgId = 1; out->tilesOffset = 0x200; out->unused = 0; @@ -867,9 +979,9 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId) { if (IsContest()) { - out->bgTiles = gUnknown_0202305C; - out->bgTilemap = (u16 *)gUnknown_02023060; - out->paletteId = 14; + out->bgTiles = gBattleAnimBgTileBuffer; + out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; + out->paletteId = BG_ANIM_PAL_CONTEST; out->bgId = 1; out->tilesOffset = 0; out->unused = 0; @@ -880,36 +992,36 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId) } else { - out->bgTiles = gUnknown_0202305C; - out->bgTilemap = (u16 *)gUnknown_02023060; - out->paletteId = 9; + out->bgTiles = gBattleAnimBgTileBuffer; + out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; + out->paletteId = BG_ANIM_PAL_2; out->bgId = 2; out->tilesOffset = 0x300; out->unused = 0; } } -void sub_80A6BFC(struct BattleAnimBgData *out, u8 unused) +void GetBgDataForTransform(struct BattleAnimBgData *out, u8 battlerId) { - out->bgTiles = gUnknown_0202305C; - out->bgTilemap = (u16 *)gUnknown_02023060; + out->bgTiles = gBattleAnimBgTileBuffer; + out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; if (IsContest()) { - out->paletteId = 14; + out->paletteId = BG_ANIM_PAL_CONTEST; out->bgId = 1; out->tilesOffset = 0; out->unused = 0; } else if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) { - out->paletteId = 8; + out->paletteId = BG_ANIM_PAL_1; out->bgId = 1; out->tilesOffset = 0x200; out->unused = 0; } else { - out->paletteId = 9; + out->paletteId = BG_ANIM_PAL_2; out->bgId = 2; out->tilesOffset = 0x300; out->unused = 0; @@ -929,9 +1041,9 @@ void ClearBattleAnimBg(u32 bgId) void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset) { - CpuFill32(0, gUnknown_0202305C, 0x2000); - LZDecompressWram(src, gUnknown_0202305C); - LoadBgTiles(bgId, gUnknown_0202305C, 0x2000, tilesOffset); + CpuFill32(0, gBattleAnimBgTileBuffer, 0x2000); + LZDecompressWram(src, gBattleAnimBgTileBuffer); + LoadBgTiles(bgId, gBattleAnimBgTileBuffer, 0x2000, tilesOffset); } static void InitAnimBgTilemapBuffer(u32 bgId, const void *src) @@ -946,12 +1058,12 @@ void AnimLoadCompressedBgTilemap(u32 bgId, const void *src) CopyBgTilemapBufferToVram(bgId); } -void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData *unk, const void *src, u32 arg2) +void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData *data, const void *src, bool32 largeScreen) { - InitAnimBgTilemapBuffer(unk->bgId, src); + InitAnimBgTilemapBuffer(data->bgId, src); if (IsContest() == TRUE) - sub_80A4720(unk->paletteId, unk->bgTilemap, 0, arg2); - CopyBgTilemapBufferToVram(unk->bgId); + RelocateBattleBgPal(data->paletteId, data->bgTilemap, 0, largeScreen); + CopyBgTilemapBufferToVram(data->bgId); } u8 GetBattleBgPaletteNum(void) @@ -1028,16 +1140,17 @@ void StartAnimLinearTranslation(struct Sprite *sprite) sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; InitAnimLinearTranslation(sprite); - sprite->callback = AnimTranslateLinear_WaitEnd; + sprite->callback = AnimTranslateLinear_WithFollowup; sprite->callback(sprite); } -void sub_80A6F14(struct Sprite *sprite) +// Unused +static void StartAnimLinearTranslation_SetCornerVecX(struct Sprite *sprite) { sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; InitAnimLinearTranslation(sprite); - sprite->callback = sub_80A6FB4; + sprite->callback = AnimTranslateLinear_WithFollowup_SetCornerVecX; sprite->callback(sprite); } @@ -1071,15 +1184,16 @@ bool8 AnimTranslateLinear(struct Sprite *sprite) return FALSE; } -void AnimTranslateLinear_WaitEnd(struct Sprite *sprite) +void AnimTranslateLinear_WithFollowup(struct Sprite *sprite) { if (AnimTranslateLinear(sprite)) SetCallbackToStoredInData6(sprite); } -static void sub_80A6FB4(struct Sprite *sprite) +// Functionally unused +static void AnimTranslateLinear_WithFollowup_SetCornerVecX(struct Sprite *sprite) { - sub_8039E9C(sprite); + AnimSetCenterToCornerVecX(sprite); if (AnimTranslateLinear(sprite)) SetCallbackToStoredInData6(sprite); } @@ -1096,7 +1210,7 @@ void InitAnimLinearTranslationWithSpeedAndPos(struct Sprite *sprite) sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; InitAnimLinearTranslationWithSpeed(sprite); - sprite->callback = AnimTranslateLinear_WaitEnd; + sprite->callback = AnimTranslateLinear_WithFollowup; sprite->callback(sprite); } @@ -1198,7 +1312,7 @@ void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) src.xScale = xScale; src.yScale = yScale; src.rotation = rotation; - if (sub_80A7238()) + if (ShouldRotScaleSpeciesBeFlipped()) src.xScale = -src.xScale; i = gSprites[spriteId].oam.matrixNum; ObjAffineSet(&src, &matrix, 1, 2); @@ -1208,7 +1322,8 @@ void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) gOamMatrices[i].d = matrix.d; } -static bool8 sub_80A7238(void) +// Pokémon in Contests (except Unown) should be flipped. +static bool8 ShouldRotScaleSpeciesBeFlipped(void) { if (IsContest()) { @@ -1273,7 +1388,7 @@ void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 x src.xScale = xScale; src.yScale = yScale; src.rotation = rotation; - if (sub_80A7238()) + if (ShouldRotScaleSpeciesBeFlipped()) src.xScale = -src.xScale; i = sprite->oam.matrixNum; ObjAffineSet(&src, &matrix, 1, 2); @@ -1291,14 +1406,14 @@ void ResetSpriteRotScale_PreserveAffine(struct Sprite *sprite) CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); } -static u16 ArcTan2_(s16 a, s16 b) +static u16 ArcTan2_(s16 x, s16 y) { - return ArcTan2(a, b); + return ArcTan2(x, y); } -u16 ArcTan2Neg(s16 a, s16 b) +u16 ArcTan2Neg(s16 x, s16 y) { - u16 var = ArcTan2_(a, b); + u16 var = ArcTan2_(x, y); return -var; } @@ -1331,7 +1446,7 @@ void SetGrayscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) } } -u32 GetBattleBgPalettesMask(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7) +u32 GetBattlePalettesMask(bool8 battleBackground, bool8 attacker, bool8 target, bool8 attackerPartner, bool8 targetPartner, bool8 anim1, bool8 anim2) { u32 selectedPalettes = 0; u32 shift; @@ -1339,7 +1454,7 @@ u32 GetBattleBgPalettesMask(u8 battleBackground, u8 attacker, u8 target, u8 atta if (battleBackground) { if (!IsContest()) - selectedPalettes = 0xe; + selectedPalettes = 0xe; // Palettes 1, 2, and 3 else selectedPalettes = 1 << GetBattleBgPaletteNum(); } @@ -1369,17 +1484,17 @@ u32 GetBattleBgPalettesMask(u8 battleBackground, u8 attacker, u8 target, u8 atta selectedPalettes |= 1 << shift; } } - if (a6) + if (anim1) { if (!IsContest()) - selectedPalettes |= 0x100; + selectedPalettes |= 1 << BG_ANIM_PAL_1; else - selectedPalettes |= 0x4000; + selectedPalettes |= 1 << BG_ANIM_PAL_CONTEST; } - if (a7) + if (anim2) { if (!IsContest()) - selectedPalettes |= 0x200; + selectedPalettes |= 1 << BG_ANIM_PAL_2; } return selectedPalettes; } @@ -1434,13 +1549,13 @@ u32 GetBattleMonSpritePalettesMask(u8 playerLeft, u8 playerRight, u8 opponentLef return selectedPalettes; } -// Presumably something commented here, just returns arg -u8 AnimDummyReturnArg(u8 battler) +u8 GetSpritePalIdxByBattler(u8 battler) { return battler; } -static u8 GetBattlerAtPosition_(u8 position) +// Unused +static u8 GetSpritePalIdxByPosition(u8 position) { return GetBattlerAtPosition(position); } @@ -1455,10 +1570,14 @@ void AnimSpriteOnMonPos(struct Sprite *sprite) var = TRUE; else var = FALSE; - if (!gBattleAnimArgs[2]) + + if (gBattleAnimArgs[2] == 0) InitSpritePosToAnimAttacker(sprite, var); - else + else if (gBattleAnimArgs[2] == 1) InitSpritePosToAnimTarget(sprite, var); + else if (gBattleAnimArgs[2] == 2) + InitSpritePosToAnimAttackerPartner(sprite, var); + sprite->data[0]++; } @@ -1478,20 +1597,20 @@ void AnimSpriteOnMonPos(struct Sprite *sprite) // arg 5: lower 8 bits = location on attacking mon, upper 8 bits = location on target mon pick to target void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) { - bool8 v1; + bool8 respectMonPicOffsets; u8 coordType; if (!(gBattleAnimArgs[5] & 0xff00)) - v1 = TRUE; + respectMonPicOffsets = TRUE; else - v1 = FALSE; + respectMonPicOffsets = FALSE; if (!(gBattleAnimArgs[5] & 0xff)) coordType = BATTLER_COORD_Y_PIC_OFFSET; else coordType = BATTLER_COORD_Y; - InitSpritePosToAnimAttacker(sprite, v1); + InitSpritePosToAnimAttacker(sprite, respectMonPicOffsets); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; @@ -1504,7 +1623,7 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) void AnimThrowProjectile(struct Sprite *sprite) { - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); if (GetBattlerSide(gBattleAnimAttacker)) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; @@ -1577,7 +1696,7 @@ s16 CloneBattlerSpriteWithBlend(u8 animBattler) return -1; } -void obj_delete_but_dont_free_vram(struct Sprite *sprite) +void DestroySpriteWithActiveSheet(struct Sprite *sprite) { sprite->usingSheet = TRUE; DestroySprite(sprite); @@ -1732,34 +1851,34 @@ void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union Aff bool8 RunAffineAnimFromTaskData(struct Task *task) { - gAnimTaskAffineAnim = &((union AffineAnimCmd *)LoadPointerFromVars(task->data[13], task->data[14]))[task->data[7]]; - switch (gAnimTaskAffineAnim->type) + sAnimTaskAffineAnim = &((union AffineAnimCmd *)LoadPointerFromVars(task->data[13], task->data[14]))[task->data[7]]; + switch (sAnimTaskAffineAnim->type) { default: - if (!gAnimTaskAffineAnim->frame.duration) + if (!sAnimTaskAffineAnim->frame.duration) { - task->data[10] = gAnimTaskAffineAnim->frame.xScale; - task->data[11] = gAnimTaskAffineAnim->frame.yScale; - task->data[12] = gAnimTaskAffineAnim->frame.rotation; + task->data[10] = sAnimTaskAffineAnim->frame.xScale; + task->data[11] = sAnimTaskAffineAnim->frame.yScale; + task->data[12] = sAnimTaskAffineAnim->frame.rotation; task->data[7]++; - gAnimTaskAffineAnim++; + sAnimTaskAffineAnim++; } - task->data[10] += gAnimTaskAffineAnim->frame.xScale; - task->data[11] += gAnimTaskAffineAnim->frame.yScale; - task->data[12] += gAnimTaskAffineAnim->frame.rotation; + task->data[10] += sAnimTaskAffineAnim->frame.xScale; + task->data[11] += sAnimTaskAffineAnim->frame.yScale; + task->data[12] += sAnimTaskAffineAnim->frame.rotation; SetSpriteRotScale(task->data[15], task->data[10], task->data[11], task->data[12]); SetBattlerSpriteYOffsetFromYScale(task->data[15]); - if (++task->data[8] >= gAnimTaskAffineAnim->frame.duration) + if (++task->data[8] >= sAnimTaskAffineAnim->frame.duration) { task->data[8] = 0; task->data[7]++; } break; case AFFINEANIMCMDTYPE_JUMP: - task->data[7] = gAnimTaskAffineAnim->jump.target; + task->data[7] = sAnimTaskAffineAnim->jump.target; break; case AFFINEANIMCMDTYPE_LOOP: - if (gAnimTaskAffineAnim->loop.count) + if (sAnimTaskAffineAnim->loop.count) { if (task->data[9]) { @@ -1771,7 +1890,7 @@ bool8 RunAffineAnimFromTaskData(struct Task *task) } else { - task->data[9] = gAnimTaskAffineAnim->loop.count; + task->data[9] = sAnimTaskAffineAnim->loop.count; } if (!task->data[7]) { @@ -1780,8 +1899,8 @@ bool8 RunAffineAnimFromTaskData(struct Task *task) for (;;) { task->data[7]--; - gAnimTaskAffineAnim--; - if (gAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP) + sAnimTaskAffineAnim--; + if (sAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP) { task->data[7]++; return TRUE; @@ -1805,12 +1924,12 @@ bool8 RunAffineAnimFromTaskData(struct Task *task) // matrix's scale in the y dimension. void SetBattlerSpriteYOffsetFromYScale(u8 spriteId) { - int var = 64 - GetBattlerYDeltaFromSpriteId(spriteId) * 2; + int var = MON_PIC_HEIGHT - GetBattlerYDeltaFromSpriteId(spriteId) * 2; u16 matrix = gSprites[spriteId].oam.matrixNum; int var2 = SAFE_DIV(var << 8, gOamMatrices[matrix].d); - if (var2 > 128) - var2 = 128; + if (var2 > MON_PIC_HEIGHT * 2) + var2 = MON_PIC_HEIGHT * 2; gSprites[spriteId].y2 = (var - var2) / 2; } @@ -1818,12 +1937,12 @@ void SetBattlerSpriteYOffsetFromYScale(u8 spriteId) // matrix's scale in the y dimension. void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId) { - int var = 64 - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2; + int var = MON_PIC_HEIGHT - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2; u16 matrix = gSprites[spriteId].oam.matrixNum; int var2 = SAFE_DIV(var << 8, gOamMatrices[matrix].d); - if (var2 > 128) - var2 = 128; + if (var2 > MON_PIC_HEIGHT * 2) + var2 = MON_PIC_HEIGHT * 2; gSprites[spriteId].y2 = (var - var2) / 2; } @@ -1874,7 +1993,7 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId) } } } - return 64; + return MON_PIC_HEIGHT; } void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr) @@ -1939,7 +2058,8 @@ void AnimTask_GetFrustrationPowerLevel(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_80A8174(u8 priority) +// Unused +static void SetPriorityForVisibleBattlers(u8 priority) { if (IsBattlerSpriteVisible(gBattleAnimTarget)) gSprites[gBattlerSpriteIds[gBattleAnimTarget]].oam.priority = priority; @@ -1951,7 +2071,7 @@ void sub_80A8174(u8 priority) gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority = priority; } -void sub_80A8278(void) +void InitPrioritiesForVisibleBattlers(void) { int i; @@ -2022,16 +2142,15 @@ u8 GetBattlerSpriteBGPriorityRank(u8 battlerId) u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId) { u8 spriteId; - u16 sheet = LoadSpriteSheet(&sSpriteSheet_MoveEffectMons[id]); - u16 palette = AllocSpritePalette(sSpriteTemplate_MoveEffectMons[id].paletteTag); + u16 sheet = LoadSpriteSheet(&sSpriteSheets_MoveEffectMons[id]); + u16 palette = AllocSpritePalette(sSpriteTemplates_MoveEffectMons[id].paletteTag); if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->buffer == NULL) gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); if (!isBackpic) { LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); - LoadSpecialPokePic(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->buffer, + LoadSpecialPokePic(gMonSpritesGfxPtr->buffer, species, personality, TRUE); @@ -2039,8 +2158,7 @@ u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 else { LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); - LoadSpecialPokePic(&gMonBackPicTable[species], - gMonSpritesGfxPtr->buffer, + LoadSpecialPokePic(gMonSpritesGfxPtr->buffer, species, personality, FALSE); @@ -2050,9 +2168,9 @@ u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 FREE_AND_SET_NULL(gMonSpritesGfxPtr->buffer); if (!isBackpic) - spriteId = CreateSprite(&sSpriteTemplate_MoveEffectMons[id], x, y + gMonFrontPicCoords[species].y_offset, subpriority); + spriteId = CreateSprite(&sSpriteTemplates_MoveEffectMons[id], x, y + gMonFrontPicCoords[species].y_offset, subpriority); else - spriteId = CreateSprite(&sSpriteTemplate_MoveEffectMons[id], x, y + gMonBackPicCoords[species].y_offset, subpriority); + spriteId = CreateSprite(&sSpriteTemplates_MoveEffectMons[id], x, y + gMonBackPicCoords[species].y_offset, subpriority); if (IsContest()) { @@ -2172,17 +2290,17 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr) switch (attr) { case BATTLER_COORD_ATTR_HEIGHT: - return (coords->size & 0xf) * 8; + return GET_MON_COORDS_HEIGHT(coords->size); case BATTLER_COORD_ATTR_WIDTH: - return (coords->size >> 4) * 8; + return GET_MON_COORDS_WIDTH(coords->size); case BATTLER_COORD_ATTR_LEFT: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - ((coords->size >> 4) * 4); + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - (GET_MON_COORDS_WIDTH(coords->size) / 2); case BATTLER_COORD_ATTR_RIGHT: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + ((coords->size >> 4) * 4); + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + (GET_MON_COORDS_WIDTH(coords->size) / 2); case BATTLER_COORD_ATTR_TOP: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - ((coords->size & 0xf) * 4); + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - (GET_MON_COORDS_HEIGHT(coords->size) / 2); case BATTLER_COORD_ATTR_BOTTOM: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + ((coords->size & 0xf) * 4); + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + (GET_MON_COORDS_HEIGHT(coords->size) / 2); case BATTLER_COORD_ATTR_RAW_BOTTOM: ret = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 31; return ret - coords->y_offset; @@ -2294,6 +2412,19 @@ void AnimSpinningSparkle(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } +// Task and sprite data for AnimTask_AttackerPunchWithTrace +#define tBattlerSpriteId data[0] +#define tMoveSpeed data[1] +#define tState data[2] +#define tCounter data[3] +#define tPaletteNum data[4] +#define tNumTracesActive data[5] +#define tPriority data[6] + +#define sActiveTime data[0] +#define sTaskId data[1] +#define sSpriteId data[2] + // Slides attacker to right and back with a cloned trace of the specified color // arg0: Trace palette blend color // arg1: Trace palette blend coeff @@ -2303,21 +2434,24 @@ void AnimTask_AttackerPunchWithTrace(u8 taskId) u16 dest; struct Task *task = &gTasks[taskId]; - task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER); - task->data[1] = ((GetBattlerSide(gBattleAnimAttacker)) != B_SIDE_PLAYER) ? -8 : 8; - task->data[2] = 0; - task->data[3] = 0; - gSprites[task->data[0]].x2 -= task->data[0]; - task->data[4] = AllocSpritePalette(ANIM_TAG_BENT_SPOON); - task->data[5] = 0; + task->tBattlerSpriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->tMoveSpeed = (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) ? -8 : 8; + task->tState = 0; + task->tCounter = 0; + gSprites[task->tBattlerSpriteId].x2 -= task->tBattlerSpriteId; + task->tPaletteNum = AllocSpritePalette(ANIM_TAG_BENT_SPOON); + task->tNumTracesActive = 0; - dest = (task->data[4] + 0x10) * 0x10; - src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; - task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker); - if (task->data[6] == 20 || task->data[6] == 40) - task->data[6] = 2; + dest = (task->tPaletteNum + 16) * 16; + src = (gSprites[task->tBattlerSpriteId].oam.paletteNum + 0x10) * 0x10; + + // Set trace's priority based on battler's subpriority + task->tPriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker); + if (task->tPriority == 20 || task->tPriority == 40) + task->tPriority = 2; else - task->data[6] = 3; + task->tPriority = 3; + CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); BlendPalette(dest, 16, gBattleAnimArgs[1], gBattleAnimArgs[0]); task->func = AnimTask_AttackerPunchWithTrace_Step; @@ -2326,28 +2460,30 @@ void AnimTask_AttackerPunchWithTrace(u8 taskId) static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[2]) + switch (task->tState) { case 0: - sub_80A8D78(task, taskId); - gSprites[task->data[0]].x2 += task->data[1]; - if (++task->data[3] == 5) + // Move forward + CreateBattlerTrace(task, taskId); + gSprites[task->tBattlerSpriteId].x2 += task->tMoveSpeed; + if (++task->tCounter == 5) { - task->data[3]--; - task->data[2]++; + task->tCounter--; + task->tState++; } break; case 1: - sub_80A8D78(task, taskId); - gSprites[task->data[0]].x2 -= task->data[1]; - if (--task->data[3] == 0) + // Move back (do same number of traces as before) + CreateBattlerTrace(task, taskId); + gSprites[task->tBattlerSpriteId].x2 -= task->tMoveSpeed; + if (--task->tCounter == 0) { - gSprites[task->data[0]].x2 = 0; - task->data[2]++; + gSprites[task->tBattlerSpriteId].x2 = 0; + task->tState++; } break; case 2: - if (!task->data[5]) + if (task->tNumTracesActive == 0) { FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); DestroyAnimVisualTask(taskId); @@ -2356,31 +2492,44 @@ static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId) } } -static void sub_80A8D78(struct Task *task, u8 taskId) +static void CreateBattlerTrace(struct Task *task, u8 taskId) { s16 spriteId = CloneBattlerSpriteWithBlend(0); if (spriteId >= 0) { - gSprites[spriteId].oam.priority = task->data[6]; - gSprites[spriteId].oam.paletteNum = task->data[4]; - gSprites[spriteId].data[0] = 8; - gSprites[spriteId].data[1] = taskId; - gSprites[spriteId].data[2] = spriteId; - gSprites[spriteId].x2 = gSprites[task->data[0]].x2; - gSprites[spriteId].callback = sub_80A8DFC; - task->data[5]++; + gSprites[spriteId].oam.priority = task->tPriority; + gSprites[spriteId].oam.paletteNum = task->tPaletteNum; + gSprites[spriteId].sActiveTime = 8; + gSprites[spriteId].sTaskId = taskId; + gSprites[spriteId].sSpriteId = spriteId; + gSprites[spriteId].x2 = gSprites[task->tBattlerSpriteId].x2; + gSprites[spriteId].callback = AnimBattlerTrace; + task->tNumTracesActive++; } } -static void sub_80A8DFC(struct Sprite *sprite) +// Just waits until destroyed +static void AnimBattlerTrace(struct Sprite *sprite) { - if (--sprite->data[0] == 0) + if (--sprite->sActiveTime == 0) { - gTasks[sprite->data[1]].data[5]--; - obj_delete_but_dont_free_vram(sprite); + gTasks[sprite->sTaskId].tNumTracesActive--; + DestroySpriteWithActiveSheet(sprite); } } +#undef tBattlerSpriteId +#undef tMoveSpeed +#undef tState +#undef tCounter +#undef tPaletteNum +#undef tNumTracesActive +#undef tPriority + +#undef sActiveTime +#undef sTaskId +#undef sSpriteId + void AnimWeatherBallUp(struct Sprite *sprite) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c new file mode 100644 index 0000000000..35c1244670 --- /dev/null +++ b/src/battle_anim_new.c @@ -0,0 +1,7904 @@ +#include "global.h" +#include "battle_anim.h" +#include "item_menu_icons.h" +#include "sprite.h" +#include "random.h" +#include "gpu_regs.h" +#include "item.h" +#include "rtc.h" +#include "item_icon.h" +#include "sound.h" +#include "menu.h" +#include "malloc.h" +#include "util.h" +#include "trig.h" +#include "graphics.h" +#include "battle_scripts.h" +#include "battle_controllers.h" +#include "constants/moves.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/pokemon.h" + +// function declarations +static void SpriteCB_SpriteToCentreOfSide(struct Sprite *sprite); +static void SpriteCB_SpriteOnMonForDuration(struct Sprite *sprite); +static void SpriteCB_ToxicThreadWrap(struct Sprite *sprite); +static void SpriteCB_GrowingSuperpower(struct Sprite *sprite); +static void SpriteCB_CentredSpiderWeb(struct Sprite *sprite); +static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite); +static void SpriteCB_CoreEnforcerBeam(struct Sprite *sprite); +static void SpriteCB_TranslateAnimSpriteToTargetMonLocationDoubles(struct Sprite *sprite); +static void SpriteCB_FallingObject(struct Sprite *sprite); +static void SpriteCB_FallingObjectStep(struct Sprite *sprite); +static void SpriteCB_SunsteelStrikeRings(struct Sprite *sprite); +static void SpriteCB_MoongeistCharge(struct Sprite *sprite); +static void SpriteCB_MindBlownBall(struct Sprite *sprite); +static void AnimMindBlownBallStep(struct Sprite *sprite); +static void SpriteCB_MindBlownExplosion(struct Sprite *sprite); +static void SpriteCB_LockingJaw(struct Sprite *sprite); +static void SpriteCB_LockingJawStep(struct Sprite *sprite); +static void SpriteCB_LockingJawFinish(struct Sprite *sprite); +static void SpriteCB_LeftRightSlice(struct Sprite *sprite); +static void SpriteCB_LeftRightSliceStep1(struct Sprite *sprite); +static void SpriteCB_LeftRightSliceStep0(struct Sprite *sprite); +static void SpriteCB_PyroBallRockBounce(struct Sprite *sprite); +static void SpriteCB_PyroBallLaunch(struct Sprite *sprite); +static void SpriteCB_AcidLaunchSingleTarget(struct Sprite *sprite); +static void SpriteCB_AcidDripSingleTarget(struct Sprite *sprite); +static void SpriteCB_WaterDroplet(struct Sprite *sprite); +static void SpriteCB_WaterDropletDrip(struct Sprite *sprite); +static void SpriteCB_WaterDropletDrop(struct Sprite *sprite); +static void SpriteCB_AnimSpriteOnSelectedMonPos(struct Sprite *sprite); +static void SpriteCB_SurroundingRing(struct Sprite *sprite); +static void SpriteCB_PhotonGeyserBeam(struct Sprite *sprite); +static void SpriteCB_BeamUpStep(struct Sprite *sprite); +static void SpriteCB_CentredElectricity(struct Sprite *sprite); +static void AnimSkyDropBallUp(struct Sprite *sprite); +static void SpriteCB_SearingShotRock(struct Sprite *sprite); +static void AnimHappyHourCoinShower(struct Sprite *sprite); +static void SpriteCB_Geyser(struct Sprite *sprite); +static void SpriteCB_GeyserTarget(struct Sprite *sprite); +static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite); +static void AnimBlastBurnTargetPlume_Step1(struct Sprite *sprite); +static void AnimBlastBurnTargetPlume(struct Sprite *sprite); +static void AnimEllipticalGustAttacker(struct Sprite *sprite); +static void AnimEllipticalGustAttacker_Step(struct Sprite *sprite); +static void AnimGrowingShockWaveOrbOnTarget(struct Sprite *sprite); +static void AnimTask_GrowStep(u8 taskId); +static void AnimExtremeEvoboostCircle(struct Sprite *sprite); +static void AnimExtremeEvoboostCircle_Step(struct Sprite *sprite); +static void AnimOceanicOperettaSpotlight(struct Sprite *sprite); +static void AnimSoulStealingStar(struct Sprite *sprite); +static void AnimSoulStealingStar_Step1(struct Sprite *sprite); +static void AnimSoulStealingStar_Step2(struct Sprite *sprite); + +// const data +// general +static const union AffineAnimCmd sSquishTargetAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(0, 64, 0, 16), //Flatten + AFFINEANIMCMD_FRAME(0, 0, 0, 64), + AFFINEANIMCMD_FRAME(0, -64, 0, 16), + AFFINEANIMCMD_END, +}; + +// GEN 4 +// shadow sneak +const struct SpriteTemplate gShadowSneakImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimIceEffectParticle +}; + +// power trick +const struct SpriteTemplate gPowerTrickSpriteTemplate = +{ + .tileTag = ANIM_TAG_POWER_TRICK, + .paletteTag = ANIM_TAG_POWER_TRICK, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_SpinningBone, + .callback = SpriteCB_SpriteOnMonForDuration +}; + + +//// GEN 5 +//shell smash +const struct SpriteTemplate gShellSmashLeftShellSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHELL_RIGHT, + .paletteTag = ANIM_TAG_SHELL_RIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_Bite, + .callback = AnimBite +}; + +const struct SpriteTemplate gShellSmashRightShellSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHELL_LEFT, + .paletteTag = ANIM_TAG_SHELL_LEFT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_Bite, + .callback = AnimBite +}; + +const struct SpriteTemplate gShellSmashPurpleRocksSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_SHELL_RIGHT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlyingRock, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRockFragment +}; + +//wide guard +const struct SpriteTemplate gWideGuardBlueConversionTemplate = +{ + .tileTag = ANIM_TAG_CONVERSION, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_8x8, + .anims = gConversionAnimTable, + .images = NULL, + .affineAnims = gConversionAffineAnimTable, + .callback = AnimConversion +}; + +//guard split +const struct SpriteTemplate gGuardSwapOrbs1Template = +{ + .tileTag = ANIM_TAG_BLUEGREEN_ORB, + .paletteTag = ANIM_TAG_BLUEGREEN_ORB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimMimicOrb +}; + +const struct SpriteTemplate gGuardSwapOrbs2Template = +{ + .tileTag = ANIM_TAG_BLUEGREEN_ORB, + .paletteTag = ANIM_TAG_BLUEGREEN_ORB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimMissileArc +}; + +// power split +const struct SpriteTemplate gPowerSplitOrbs1Template = +{ + .tileTag = ANIM_TAG_BLUEGREEN_ORB, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimMimicOrb +}; + +const struct SpriteTemplate gPowerSplitOrbs2Template = +{ + .tileTag = ANIM_TAG_BLUEGREEN_ORB, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimMissileArc +}; + +// automotize +const struct SpriteTemplate gAutotomizeMetalShardsTemplate = +{ + .tileTag = ANIM_TAG_METAL_BITS, + .paletteTag = ANIM_TAG_METAL_BITS, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_TearDrop, + .callback = AnimTearDrop +}; + +//rage powder +const struct SpriteTemplate gRagePowderRedPowderTemplate = +{ + .tileTag = ANIM_TAG_SPORE, + .paletteTag = ANIM_TAG_HEART_STAMP, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gSporeParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSporeParticle +}; + +//flame charge +const struct SpriteTemplate gFlameChargeEmberTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlamethrowerFlame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPetalDanceBigFlower +}; + +//final gambit +const struct SpriteTemplate gFinalGambitBlueYawnTemplate = +{ + .tileTag = ANIM_TAG_PINK_CLOUD, + .paletteTag = ANIM_TAG_WATER_IMPACT, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimShadowBall +}; + +const struct SpriteTemplate gFinalGambitExplosionTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_WATER_IMPACT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +//synchronoise +const struct SpriteTemplate gSynchronoiseVioletRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gHyperVoiceRingAffineAnimTable, + .callback = AnimHyperVoiceRing +}; + +const struct SpriteTemplate gSynchronoiseYellowRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gHyperVoiceRingAffineAnimTable, + .callback = AnimHyperVoiceRing +}; + +const struct SpriteTemplate gSynchronoiseBlueRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gHyperVoiceRingAffineAnimTable, + .callback = AnimHyperVoiceRing +}; + +const struct SpriteTemplate gSynchronoiseAeroWheelTemplate = +{ + .tileTag = ANIM_TAG_AIR_WAVE_2, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gAffineAnims_AirWaveCrescent, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpread +}; + +//electro ball +const struct SpriteTemplate gElectroBallCannonBallTemplate = +{ + .tileTag = ANIM_TAG_FLASH_CANNON_BALL, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimShadowBall +}; + +//foul play +const struct SpriteTemplate gFoulPlayImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +const struct SpriteTemplate gFoulPlayRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +//simple beam +const struct SpriteTemplate gSimpleBeamBrownTemplate = +{ + .tileTag = ANIM_TAG_GOLD_RING, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; + +const struct SpriteTemplate gSimpleBeamPinkTemplate = +{ + .tileTag = ANIM_TAG_GOLD_RING, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; + +const struct SpriteTemplate gSimpleBeamBrownRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +const struct SpriteTemplate gSimpleBeamPinkRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +// after you +const struct SpriteTemplate gAfterYouGreenRageTemplate = +{ + .tileTag = ANIM_TAG_ANGER, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAngerMarkAffineAnimTable, + .callback = AnimAngerMark +}; + +//quick guard +const struct SpriteTemplate gQuickGuardArmImpactTemplate = +{ + .tileTag = ANIM_TAG_QUICK_GUARD_HAND, + .paletteTag = ANIM_TAG_QUICK_GUARD_HAND, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBasicFistOrFoot +}; + +//sky drop +static const union AffineAnimCmd sSkyDropFlyBallAffineAnimCmd_0[] = +{ + AFFINEANIMCMD_FRAME(0xa0, 0x100, 0x50, 0x0), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSkyDropFlyBallAffineAnimCmds[] = +{ + sSkyDropFlyBallAffineAnimCmd_0 +}; +const struct SpriteTemplate gSkyDropFlyBallTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_ROUND_SHADOW, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSkyDropFlyBallAffineAnimCmds, + .callback = AnimThrowMistBall +}; + +const struct SpriteTemplate gSkyDropTargetFlyingTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_ROUND_SHADOW, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimSkyDropBallUp +}; + +//shift gear +const struct SpriteTemplate gShiftGearGearsTemplate = +{ + .tileTag = ANIM_TAG_GEAR, + .paletteTag = ANIM_TAG_GEAR, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_SpinningBone, + .callback = SpriteCB_SpriteOnMonForDuration +}; + +//circle throw +const struct SpriteTemplate gCircleThrowRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +//quash +const struct SpriteTemplate gQuashArmHitTemplate = +{ + .tileTag = ANIM_TAG_ASSURANCE_HAND, + .paletteTag = ANIM_TAG_ASSURANCE_HAND, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimStompFoot +}; + +//reflect type +const struct SpriteTemplate gReflectTypeBlueStringTemplate = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineOff_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_ToxicThreadWrap +}; + +const struct SpriteTemplate gReflectTypeVioletStringTemplate = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_PURPLE_FLAME, + .oam = &gOamData_AffineOff_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_ToxicThreadWrap +}; + +const struct SpriteTemplate gReflectTypeWhiteStringTemplate = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_GUARD_RING, + .oam = &gOamData_AffineOff_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_ToxicThreadWrap +}; + +const struct SpriteTemplate gReflectTypeWhiteRingTemplate = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_GUARD_RING, + .oam = &gOamData_AffineDouble_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGuardRingAffineAnimTable, + .callback = SpriteCB_SurroundingRing +}; + +const struct SpriteTemplate gReflectTypePinkRingTemplate = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineDouble_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGuardRingAffineAnimTable, + .callback = SpriteCB_SurroundingRing +}; + +const struct SpriteTemplate gReflectTypeVioletRingTemplate = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_PURPLE_FLAME, + .oam = &gOamData_AffineDouble_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGuardRingAffineAnimTable, + .callback = SpriteCB_SurroundingRing +}; + +const struct SpriteTemplate gReflectTypeBlueRingTemplate = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGuardRingAffineAnimTable, + .callback = SpriteCB_SurroundingRing +}; + +//frost breath +const struct SpriteTemplate gFrostBreathBlueRageTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_DragonRageFirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDragonRageFirePlume +}; + +const struct SpriteTemplate gFrostBreathBlueBreathTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gAnims_DragonRageFire, + .images = NULL, + .affineAnims = gAffineAnims_DragonRageFire, + .callback = AnimDragonFireToTarget +}; + +//heart stamp +const struct SpriteTemplate gHeartStampSpinningHeartTemplate = +{ + .tileTag = ANIM_TAG_HEART_STAMP, + .paletteTag = ANIM_TAG_HEART_STAMP, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gAffineAnims_SpinningHandOrFoot, + .callback = AnimSpinningKickOrPunch +}; + +//horn leech +const struct SpriteTemplate gHornLeechHornTemplate = +{ + .tileTag = ANIM_TAG_HORN_LEECH, + .paletteTag = ANIM_TAG_HORN_LEECH, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimShadowBall +}; + +//dual chop +const struct SpriteTemplate gDualChopImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//sacred sword +const struct SpriteTemplate gSacredSwordBladesTemplate = +{ + .tileTag = ANIM_TAG_PUNISHMENT_BLADES, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gAnims_DragonBreathFire, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpread +}; + +const struct SpriteTemplate gSacredSwordCutTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCuttingSlice +}; + +//razor shell +const struct SpriteTemplate gRazorShellTemplate = +{ + .tileTag = ANIM_TAG_RAZOR_SHELL, + .paletteTag = ANIM_TAG_RAZOR_SHELL, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = SpriteCB_SpriteOnMonForDuration +}; + +//heat crash +const struct SpriteTemplate gHeatCrashEruptionRockTemplate = +{ + .tileTag = ANIM_TAG_WARM_ROCK, + .paletteTag = ANIM_TAG_WARM_ROCK, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimStompFoot +}; + +//leaf tornado +const struct SpriteTemplate gLeafTornadoVortexTemplate = +{ + .tileTag = ANIM_TAG_LEAF, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + +//cotton guard +const struct SpriteTemplate gCottonGuardSporeTemplate = +{ + .tileTag = ANIM_TAG_SPORE, + .paletteTag = ANIM_TAG_SPORE, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gSporeParticleAnimTable, + .images = NULL, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; + +//night daze +const struct SpriteTemplate gNightDazeVioletRingsTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_PURPLE_FLAME, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +const struct SpriteTemplate gNightDazeVioletCirclesTemplate = +{ + .tileTag = ANIM_TAG_RED_ORB, + .paletteTag = ANIM_TAG_PURPLE_FLAME, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gHiddenPowerOrbAffineAnimTable, + .callback = AnimOrbitScatter +}; + +//tail slap +const struct SpriteTemplate gTailSlapTemplate = +{ + .tileTag = ANIM_TAG_PUNISHMENT_BLADES, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gScratchAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +//gear grind +const struct SpriteTemplate gGearGrindTemplate = +{ + .tileTag = ANIM_TAG_GEAR, + .paletteTag = ANIM_TAG_GEAR, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimBite +}; + +//searing shot +const struct SpriteTemplate gSearingShotRedChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; + +const struct SpriteTemplate gSearingShotEruptionRockTemplate = +{ + .tileTag = ANIM_TAG_WARM_ROCK, + .paletteTag = ANIM_TAG_WARM_ROCK, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimOverheatFlame +}; + +static const union AffineAnimCmd sSpriteAffineAnim_SearingShotRock[] = +{ + AFFINEANIMCMD_FRAME(8, 8, 9, 15), + AFFINEANIMCMD_FRAME(-8, -8, 9, 15), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_SearingShotRock[] = +{ + sSpriteAffineAnim_SearingShotRock, +}; +const struct SpriteTemplate gSearingShotEruptionImpactTemplate = +{ + .tileTag = ANIM_TAG_WARM_ROCK, + .paletteTag = ANIM_TAG_WARM_ROCK, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_SearingShotRock, + .callback = SpriteCB_SearingShotRock +}; + +//techno blast +const struct SpriteTemplate gTechnoBlastWhiteChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gTechnoBlastWhiteCircleTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gTechnoBlastWhiteBlastTemplate = +{ + .tileTag = ANIM_TAG_BLACK_BALL_2, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; +const struct SpriteTemplate gTechnoBlastWhiteSparkTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimZapCannonSpark +}; +const struct SpriteTemplate gTechnoBlastWhiteSmokeTemplate = +{ + .tileTag = ANIM_TAG_GRAY_SMOKE, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOctazookaAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gTechnoBlastYellowBlastTemplate = +{ + .tileTag = ANIM_TAG_BLACK_BALL_2, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; +const struct SpriteTemplate gTechnoBlastYellowSparkTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimZapCannonSpark +}; +const struct SpriteTemplate gTechnoBlastYellowSmokeTemplate = +{ + .tileTag = ANIM_TAG_GRAY_SMOKE, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOctazookaAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gTechnoBlastBlueChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gTechnoBlastBlueBubbleTemplate = +{ + .tileTag = ANIM_TAG_BUBBLE, + .paletteTag = ANIM_TAG_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gAnims_WaterBubbleProjectile, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSmallBubblePair +}; +const struct SpriteTemplate gTechnoBlastBlueBlastTemplate = +{ + .tileTag = ANIM_TAG_BLACK_BALL_2, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; +const struct SpriteTemplate gTechnoBlastBlueSparkTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimZapCannonSpark +}; +const struct SpriteTemplate gTechnoBlastBlueSmokeTemplate = +{ + .tileTag = ANIM_TAG_GRAY_SMOKE, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOctazookaAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gTechnoBlastRedChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gTechnoBlastRedBlastTemplate = +{ + .tileTag = ANIM_TAG_BLACK_BALL_2, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; +const struct SpriteTemplate gTechnoBlastRedSparkTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimZapCannonSpark +}; +const struct SpriteTemplate gTechnoBlastRedSmokeTemplate = +{ + .tileTag = ANIM_TAG_GRAY_SMOKE, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOctazookaAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gTechnoBlastIceChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gTechnoBlastIceBlastTemplate = +{ + .tileTag = ANIM_TAG_BLACK_BALL_2, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; +const struct SpriteTemplate gTechnoBlastIceSparkTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimZapCannonSpark +}; +const struct SpriteTemplate gTechnoBlastIceSmokeTemplate = +{ + .tileTag = ANIM_TAG_GRAY_SMOKE, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOctazookaAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gTechnoBlastIceCrystalsTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineNormal_ObjBlend_8x16, + .anims = gAnims_IceCrystalLarge, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//secret sword +const struct SpriteTemplate gSecretSwordBladesTemplate = +{ + .tileTag = ANIM_TAG_PUNISHMENT_BLADES, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gAnims_DragonBreathFire, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpread +}; + +//glaciate +const struct SpriteTemplate gGlaciateSmokeTemplate = +{ + .tileTag = ANIM_TAG_BLACK_SMOKE, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlackSmoke +}; + +//blue flare +const struct SpriteTemplate gBlueFlareFlameJabTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_METAL_BITS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlamethrowerFlame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gBlueFlareFlameSwirlTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_METAL_BITS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlamethrowerFlame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + +const struct SpriteTemplate gBlueFlareBurnTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_METAL_BITS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlamethrowerFlame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpread +}; + +//freeze shock +const struct SpriteTemplate gFreezeShockCircleTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrb +}; + +const struct SpriteTemplate gFreezeShockIceBallTemplate = +{ + .tileTag = ANIM_TAG_ICE_CHUNK, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gAnims_IceBallChunk, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; + +//ice burn +const struct SpriteTemplate gIceBurnSmokeTemplate = +{ + .tileTag = ANIM_TAG_BLACK_SMOKE, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlackSmoke +}; + +//icicle crash +static const union AffineAnimCmd sSpriteAffineAnim_IcicleCrash[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 128, 1), //180 degree turn + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_IcicleCrash[] = +{ + sSpriteAffineAnim_IcicleCrash, +}; +const struct SpriteTemplate gIcicleCrashSpearTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ICICLE_SPEAR, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_IcicleCrash, + .callback = AnimFallingRock +}; + +//v create +const struct SpriteTemplate gVCreateFlameTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FireBlastCross, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gVCreateRedRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gVCreateRedOrbTemplate = +{ + .tileTag = ANIM_TAG_ECLIPSING_ORB, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gEclipsingOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +//fusion flare +const struct SpriteTemplate gFusionFlareRedBallUpTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWeatherBallUp +}; + +const struct SpriteTemplate gFusionFlareRedBallTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimStompFoot +}; + +const struct SpriteTemplate gFusionFlareRedBubblesTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gAnims_WaterPulseBubble, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWaterPulseBubble +}; + +const struct SpriteTemplate gFusionFlareRedRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +//fusion bolt +static const union AffineAnimCmd sSpriteAffineAnim_DrakeStrikePlayer[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd sSpriteAffineAnim_DrakeStrikeOpponent[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sAffineAnimCmdTable_DrakeStriking[] = //devestating drake, fusion bolt +{ + sSpriteAffineAnim_DrakeStrikePlayer, + sSpriteAffineAnim_DrakeStrikeOpponent, +}; +const struct SpriteTemplate gFusionBoltBallTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sAffineAnimCmdTable_DrakeStriking, + .callback = AnimFlyBallAttack +}; + +// GEN 6 +//mat block +const struct SpriteTemplate gMatBlockGreenConversionTemplate = +{ + .tileTag = ANIM_TAG_CONVERSION, + .paletteTag = ANIM_TAG_GREEN_LIGHT_WALL, + .oam = &gOamData_AffineDouble_ObjBlend_8x8, + .anims = gConversionAnimTable, + .images = NULL, + .affineAnims = gConversionAffineAnimTable, + .callback = AnimConversion +}; + +//belch +static const union AnimCmd sAnimCmdBerryEaten[] = +{ + ANIMCMD_FRAME(16, 3), + ANIMCMD_END, +}; +static const union AnimCmd *const sAnimCmdFramesBerryEaten[] = +{ + sAnimCmdBerryEaten, +}; +const struct SpriteTemplate gBelchBerryTemplate = +{ + .tileTag = ANIM_TAG_BERRY_NORMAL, + .paletteTag = ANIM_TAG_BERRY_NORMAL, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = sAnimCmdFramesBerryEaten, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMissileArc +}; + +//forest's curse +const struct SpriteTemplate gForestsCurseIngrainTemplate = +{ + .tileTag = ANIM_TAG_ROOTS, + .paletteTag = ANIM_TAG_ROOTS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gIngrainRootAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWaterPulseBubble +}; + +//petal blizzard +static const union AnimCmd sAnimCmd_PetalBlizzard1_0[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_JUMP(0), +}; +static const union AnimCmd *const sAnimCmdTable_PetalBlizzard1[] = +{ + sAnimCmd_PetalBlizzard1_0, +}; +const struct SpriteTemplate gPetalBlizzardTwister1Template = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = sAnimCmdTable_PetalBlizzard1, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveTwisterParticle +}; +static const u16 sPetalBlizzardFlowerOam[] = {0x0, 0x2000,0x0800,0x0}; //todo: convert to oam data +static const union AnimCmd sAnimCmd_PetalBlizzard2_0[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; +static const union AnimCmd *const sAnimCmdTable_PetalBlizzard2[] = +{ + sAnimCmd_PetalBlizzard2_0, +}; +const struct SpriteTemplate gPetalBlizzardTwister2Template = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = (const struct OamData *) &sPetalBlizzardFlowerOam, + .anims = sAnimCmdTable_PetalBlizzard2, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveTwisterParticle +}; + +//crafty shield +const struct SpriteTemplate gCraftyShieldPinkConversionTemplate = +{ + .tileTag = ANIM_TAG_CRAFTY_SHIELD, + .paletteTag = ANIM_TAG_CRAFTY_SHIELD, + .oam = &gOamData_AffineDouble_ObjBlend_8x8, + .anims = gConversionAnimTable, + .images = NULL, + .affineAnims = gConversionAffineAnimTable, + .callback = AnimConversion +}; + +//grassy terrain +const struct SpriteTemplate gGrassyTerrainOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, + .callback = AnimOrbitFast +}; + +const struct SpriteTemplate gGrassyTerrainStarTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPARKLE, + .paletteTag = ANIM_TAG_GREEN_SPARKLE, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gMoonlightSparkleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimOrbitScatter +}; + +//misty terrain +const struct SpriteTemplate gMistyTerrainOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_WATER_GUN, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, + .callback = AnimOrbitFast +}; + +const struct SpriteTemplate gMistyTerrainStarTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPARKLE, + .paletteTag = ANIM_TAG_WATER_GUN, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gMoonlightSparkleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimOrbitScatter +}; + +//electrify +const struct SpriteTemplate gElectrifyRingTemplate = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineDouble_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGuardRingAffineAnimTable, + .callback = SpriteCB_SurroundingRing +}; + +const struct SpriteTemplate gElectrifyYellowRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +//fairy wind +const struct SpriteTemplate gFairyWindCloudTemplate = +{ + .tileTag = ANIM_TAG_PINK_CLOUD, + .paletteTag = ANIM_TAG_PINK_CLOUD, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSwiftStarAffineAnimTable, + .callback = AnimTranslateLinearSingleSineWave +}; + +//confide +const struct SpriteTemplate gConfideBubbleTemplate = +{ + .tileTag = ANIM_TAG_CONFIDE, + .paletteTag = ANIM_TAG_CONFIDE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gMetronomeThroughtBubbleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThoughtBubble +}; + +//diamond storm +const struct SpriteTemplate gDiamondStormSwirlingIceTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gAnims_Snowball, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSwirlingSnowball_Step1 +}; + +const struct SpriteTemplate gDiamondStormBlizzardTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gAnims_BlizzardIceCrystal, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveParticleBeyondTarget +}; + +const struct SpriteTemplate gDiamondStormDiamondsTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineNormal_ObjBlend_8x16, + .anims = gAnims_IceCrystalLarge, + .images = NULL, + .affineAnims = gAffineAnims_BasicRock, + .callback = AnimMoveTwisterParticle +}; + +//steam eruption +const struct SpriteTemplate gSteamEruptionBreathTemplate = +{ + .tileTag = ANIM_TAG_STEAM_ERUPTION, + .paletteTag = ANIM_TAG_STEAM_ERUPTION, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gAnims_DragonBreathFire, + .images = NULL, + .affineAnims = gAffineAnims_DragonBreathFire, + .callback = AnimDragonFireToTarget +}; + +//hyperspace hole +const struct SpriteTemplate gHyperspaceHoleImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimIceEffectParticle +}; + +//water shuriken +const struct SpriteTemplate gWaterShurikenStarTemplate = +{ + .tileTag = ANIM_TAG_YELLOW_STAR, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimShadowBall +}; + +const struct SpriteTemplate gWaterShurikenRingTemplate = +{ + .tileTag = ANIM_TAG_BLUE_RING_2, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gWaterPulseRingAffineAnimTable, + .callback = AnimWaterPulseRing +}; + +const struct SpriteTemplate gWaterShurikenImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//eerie impulse +const struct SpriteTemplate gEerieImpulseRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gHyperVoiceRingAffineAnimTable, + .callback = AnimHyperVoiceRing +}; + +const struct SpriteTemplate gEerieImpulseImpactTemplate = +{ + .tileTag = ANIM_TAG_GOLD_RING, + .paletteTag = ANIM_TAG_SPARK_H, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGrantingStars +}; + +//venom drench +const struct SpriteTemplate gVenomDrenchAcidTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFallingRock +}; + +//powder +const struct SpriteTemplate gPowderBlackSporeTemplate = +{ + .tileTag = ANIM_TAG_SPORE, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gSporeParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSporeParticle +}; + +//geomancy +const struct SpriteTemplate gGeomancyRingTemplate = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_GUARD_RING, + .oam = &gOamData_AffineDouble_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGuardRingAffineAnimTable, + .callback = SpriteCB_SurroundingRing +}; + +const struct SpriteTemplate gGeomancyYellowRageTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_PAW_PRINT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_DragonRageFirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDragonRageFirePlume +}; + +const struct SpriteTemplate gGeomancyRedCellVortexTemplate = +{ + .tileTag = ANIM_TAG_ZYGARDE_HEXES, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + +const struct SpriteTemplate gGeomancyGreenCellVortexTemplate = +{ + .tileTag = ANIM_TAG_ZYGARDE_HEXES, + .paletteTag = ANIM_TAG_WHIP_HIT, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + +const struct SpriteTemplate gGeomancyBlueCellVortexTemplate = +{ + .tileTag = ANIM_TAG_ZYGARDE_HEXES, + .paletteTag = ANIM_TAG_SWEAT_BEAD, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + +const struct SpriteTemplate gGeomancyRedCellRaiseTemplate = +{ + .tileTag = ANIM_TAG_ZYGARDE_HEXES, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRaiseSprite +}; + +const struct SpriteTemplate gGeomancyGreenCellRaiseTemplate = +{ + .tileTag = ANIM_TAG_ZYGARDE_HEXES, + .paletteTag = ANIM_TAG_WHIP_HIT, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRaiseSprite +}; + +const struct SpriteTemplate gGeomancyBlueCellRaiseTemplate = +{ + .tileTag = ANIM_TAG_ZYGARDE_HEXES, + .paletteTag = ANIM_TAG_SWEAT_BEAD, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRaiseSprite +}; + +//magnetic flux +const struct SpriteTemplate gMagneticFluxUproarTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +//happy hour +const struct SpriteTemplate gHappyHourCoinShowerTemplate = +{ + .tileTag = ANIM_TAG_COIN, + .paletteTag = ANIM_TAG_COIN, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gCoinAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHappyHourCoinShower +}; + +//electric terrain +const struct SpriteTemplate gElectricTerrainOrbsTemplate = +{ + .tileTag = ANIM_TAG_ELECTRIC_ORBS, + .paletteTag = ANIM_TAG_ELECTRIC_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gAnims_ElectricChargingParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimOrbitFast +}; + +const struct SpriteTemplate gElectricTerrainFlyingBallTemplate = +{ + .tileTag = ANIM_TAG_ELECTRIC_ORBS, + .paletteTag = ANIM_TAG_ELECTRIC_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gAnims_ElectricChargingParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimOrbitScatter +}; + +//celebrate +const struct SpriteTemplate gCelebrateBagTemplate = +{ + .tileTag = ANIM_TAG_ITEM_BAG, + .paletteTag = ANIM_TAG_ITEM_BAG, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gMetronomeFingerAffineAnimTable, + .callback = AnimFollowMeFinger +}; + +//hold hands +const struct SpriteTemplate gHoldHandsHeartTemplate = +{ + .tileTag = ANIM_TAG_MAGENTA_HEART, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPetalDanceBigFlower +}; + +//hold back +const struct SpriteTemplate gHoldBackSwipeTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_SWIPE, + .paletteTag = ANIM_TAG_PAW_PRINT, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = gAnims_RevengeBigScratch, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRevengeScratch +}; + +const struct SpriteTemplate gHoldBackRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_PAW_PRINT, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gHoldBackStarsTemplate = +{ + .tileTag = ANIM_TAG_PAIN_SPLIT, + .paletteTag = ANIM_TAG_DUCK, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDizzyPunchDuck +}; + +//infestation +const struct SpriteTemplate gInfestationBubbleTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gAnims_WaterPulseBubble, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + +//oblivion wing +static const union AffineAnimCmd sSpriteAffineAnim_GrowingRing[] = +{ + AFFINEANIMCMD_FRAME(8, 8, 0, 16), //Double in size + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_GrowingRing[] = +{ + sSpriteAffineAnim_GrowingRing, +}; +const struct SpriteTemplate gOblivionWingBeamTemplate = +{ + .tileTag = ANIM_TAG_HYDRO_PUMP, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GrowingRing, + .callback = TranslateAnimSpriteToTargetMonLocation +}; + +//thousand arrows +const struct SpriteTemplate gThousandArrowsGreenChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; + +const struct SpriteTemplate gThousandArrowsGreenHexTemplate = +{ + .tileTag = ANIM_TAG_VERTICAL_HEX, + .paletteTag = ANIM_TAG_ZYGARDE_HEXES, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_Geyser +}; + +const struct SpriteTemplate gThousandArrowsGreenArrowTemplate = +{ + .tileTag = ANIM_TAG_NEEDLE, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMudSportDirt +}; + +const struct SpriteTemplate gThousandArrowsGreenDischargeTemplate = +{ + .tileTag = ANIM_TAG_ELECTRICITY, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_ElectricPuff, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimElectricPuff +}; + +//thousand waves +const struct SpriteTemplate gThousandWavesGreenWaveTemplate = +{ + .tileTag = ANIM_TAG_FLYING_DIRT, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFlyingSandCrescent +}; + +const struct SpriteTemplate gThousandWavesGreenRecoverTemplate = +{ + .tileTag = ANIM_TAG_ZYGARDE_HEXES, + .paletteTag = ANIM_TAG_ZYGARDE_HEXES, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; + +const struct SpriteTemplate gThousandWavesGreenWheelTemplate = +{ + .tileTag = ANIM_TAG_ZYGARDE_HEXES, + .paletteTag = ANIM_TAG_ZYGARDE_HEXES, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDragonDanceOrb +}; + +const struct SpriteTemplate gThousandWavesRotatingImpactTemplate = +{ + .tileTag = ANIM_TAG_ZYGARDE_HEXES, + .paletteTag = ANIM_TAG_ZYGARDE_HEXES, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_Whirlpool, + .callback = AnimParticleInVortex +}; + +const struct SpriteTemplate gThousandWavesPoundImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatOnMonEdge +}; + +//lands wrath +const struct SpriteTemplate gLandsWrathVortexTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = gAffineAnims_Whirlpool, + .callback = AnimParticleInVortex +}; + +//light of ruin +const struct SpriteTemplate gLightOfRuinPinkOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate gLightOfRuinPinkDischargeTemplate = +{ + .tileTag = ANIM_TAG_ELECTRICITY, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_ElectricPuff, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimElectricPuff +}; + +const struct SpriteTemplate gLightOfRuinPinkExplosionTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +//origin pulse +const struct SpriteTemplate gOriginPulseRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +const struct SpriteTemplate gOriginPulseOrbTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDragonDanceOrb +}; + +const struct SpriteTemplate gOriginPulseOrbInwardTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gOriginPulseBlueImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatRandom +}; + +const struct SpriteTemplate gOriginPulseBasicSplatTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//precipice blades +static const union AnimCmd sAnimCmdLargeSpike[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(96, 3), + ANIMCMD_END, +}; +static const union AnimCmd *const sAnimCmdTable_LargeSpike[] = +{ + sAnimCmdLargeSpike, +}; +const struct SpriteTemplate gPrecipiceBladesSpikeTemplate = +{ + .tileTag = ANIM_TAG_LARGE_SPIKE, + .paletteTag = ANIM_TAG_LARGE_SPIKE, + .oam = &gOamData_AffineOff_ObjNormal_32x64, + .anims = sAnimCmdTable_LargeSpike, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_SpriteOnMonForDuration +}; + +static const union AffineAnimCmd sSpriteAffineAnim_LargeHailRock[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_LargeHailRock[] = +{ + sSpriteAffineAnim_LargeHailRock, +}; +const struct SpriteTemplate gPrecipiceBladesLargeSpikeTemplate = +{ + .tileTag = ANIM_TAG_LARGE_SPIKE, + .paletteTag = ANIM_TAG_LARGE_SPIKE, + .oam = &gOamData_AffineDouble_ObjNormal_32x64, + .anims = sAnimCmdTable_LargeSpike, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_LargeHailRock, + .callback = SpriteCB_SpriteOnMonForDuration +}; + +const struct SpriteTemplate gPrecipiceBladesPlumeTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_FIRE_PLUME, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_DragonRageFirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_AnimSpriteOnSelectedMonPos +}; + +//dragon ascent +static const union AffineAnimCmd sAffineAnimCmd_Drake[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0, 1), //drake faces up + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sAffineAnimCmdTable_DrakeFaceNorth[] = +{ + sAffineAnimCmd_Drake, + sAffineAnimCmd_Drake, +}; +const struct SpriteTemplate gDragonAscentFlyUpTemplate = +{ + .tileTag = ANIM_TAG_DRAGON_ASCENT, + .paletteTag = ANIM_TAG_DRAGON_ASCENT, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sAffineAnimCmdTable_DrakeFaceNorth, + .callback = AnimParticleInVortex +}; + +const struct SpriteTemplate gDragonAscentDrakeTemplate = +{ + .tileTag = ANIM_TAG_DRAGON_ASCENT, + .paletteTag = ANIM_TAG_DRAGON_ASCENT, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sAffineAnimCmdTable_DrakeStriking, + .callback = AnimFlyBallAttack +}; + +//hyperspace fury +const struct SpriteTemplate gHyperspaceFuryRingTemplate = +{ + .tileTag = ANIM_TAG_HOOPA_RING, + .paletteTag = ANIM_TAG_HOOPA_RING, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimFireSpiralOutward +}; + +const struct SpriteTemplate gHyperspaceFuryHandTemplate = +{ + .tileTag = ANIM_TAG_HOOPA_HAND, + .paletteTag = ANIM_TAG_HOOPA_HAND, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gHyperspaceFuryImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatRandom +}; + +// GEN 7 +//first impression +const struct SpriteTemplate gFirstImpressionPoundTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//baneful bunker +const struct SpriteTemplate gBanefulBunkerPoisonBubbleTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSmallBubblePair +}; + +//spirit shackle +const struct SpriteTemplate gSpiritShackleArrowTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSonicBoomProjectile +}; + +const struct SpriteTemplate gSpiritShackleChainTemplate = +{ + .tileTag = ANIM_TAG_CHAIN_LINK, + .paletteTag = ANIM_TAG_CHAIN_LINK, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThunderWave +}; + +//darkest lariat +const struct SpriteTemplate gDarkestLariatImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//sparklig aria +const struct SpriteTemplate gSparklingAriaBlueChargeTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; + +const struct SpriteTemplate gSparklingAriaRainTemplate = +{ + .tileTag = ANIM_TAG_HYDRO_PUMP, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineOff_ObjBlend_16x16, + .anims = gAnims_WaterBubbleProjectile, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMudSportDirt +}; + +const struct SpriteTemplate gSparklingAriaBubbleRainTemplate = +{ + .tileTag = ANIM_TAG_BUBBLE, + .paletteTag = ANIM_TAG_BUBBLE, + .oam = &gOamData_AffineOff_ObjBlend_16x16, + .anims = gAnims_WaterBubbleProjectile, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMudSportDirt +}; + +const struct SpriteTemplate gSparklingAriaBubblesTemplate = +{ + .tileTag = ANIM_TAG_BUBBLE, + .paletteTag = ANIM_TAG_BUBBLE, + .oam = &gOamData_AffineOff_ObjBlend_16x16, + .anims = gAnims_WaterBubbleProjectile, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSmallBubblePair +}; + +//ice hammer +const struct SpriteTemplate gIceHammerPunchStompTemplate = +{ + .tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST, + .paletteTag = ANIM_TAG_HORSESHOE_SIDE_FIST, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimStompFoot +}; + +const struct SpriteTemplate gIceHammerSmokesTemplate = +{ + .tileTag = ANIM_TAG_BLACK_SMOKE, + .paletteTag = ANIM_TAG_ECLIPSING_ORB, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlackSmoke +}; + +//floral healing +const struct SpriteTemplate gFloralHealingFlowerTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSporeParticle +}; + +const struct SpriteTemplate gFloralHealingOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_Whirlpool, + .callback = AnimParticleInVortex +}; + +const struct SpriteTemplate gFloralHealingLeavesTemplate = +{ + .tileTag = ANIM_TAG_LEAF, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_Whirlpool, + .callback = AnimParticleInVortex +}; + +const struct SpriteTemplate gFloralHealingWindLeavesTemplate = +{ + .tileTag = ANIM_TAG_LEAF, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSweetScentPetal +}; + +//high horsepower +const struct SpriteTemplate gHighHorsepowerHorseshoeTemplate = +{ + .tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST, + .paletteTag = ANIM_TAG_HORSESHOE_SIDE_FIST, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gAffineAnims_MegaPunchKick, + .callback = AnimSpinningKickOrPunch +}; + +//strength sap +const struct SpriteTemplate gStrengthSapRedSmokeTemplate = +{ + .tileTag = ANIM_TAG_GRAY_SMOKE, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOctazookaAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gStrengthSapRedInwardTemplate = +{ + .tileTag = ANIM_TAG_TEAL_ALERT, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimTealAlert +}; + +const struct SpriteTemplate gStrengthSapAbsorbTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gAbsorptionOrbAffineAnimTable, + .callback = AnimAbsorptionOrb +}; + +//solar blade +const struct SpriteTemplate gSolarBladeImpactTemplate = +{ + .tileTag = ANIM_TAG_CLAW_SLASH, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_ClawSlash, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimClawSlash +}; + +//leafage +const struct SpriteTemplate gLeafageImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//toxic thread +const struct SpriteTemplate gToxicThreadString = +{ + .tileTag = ANIM_TAG_STRING, + .paletteTag = ANIM_TAG_STRING, + .oam = &gOamData_AffineOff_ObjNormal_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_ToxicThreadWrap +}; + +//laser focus +const struct SpriteTemplate gLaserFocusRedEyesTemplate = +{ + .tileTag = ANIM_TAG_OPENING_EYE, + .paletteTag = ANIM_TAG_EYE_SPARKLE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOpeningEyeAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +//gear up +const struct SpriteTemplate gGearUpGearsTemplate = +{ + .tileTag = ANIM_TAG_GEAR, + .paletteTag = ANIM_TAG_GEAR, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPetalDanceBigFlower +}; + +//throat chop +const struct SpriteTemplate gThroatChopRedImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//pollen puff +const struct SpriteTemplate gPollenPuffPinkStarTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSmallBubblePair +}; + +const struct SpriteTemplate gPollenPuffPinkSparkleTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimZapCannonSpark +}; + +const struct SpriteTemplate gPollenPuffYellowSparkleTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimZapCannonSpark +}; + +const struct SpriteTemplate gPollenPuffSporeTemplate = +{ + .tileTag = ANIM_TAG_SPORE, + .paletteTag = ANIM_TAG_SPORE, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gSporeParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThrowProjectile +}; + +const struct SpriteTemplate gPollenPuffImpactTemplates = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_FLAT_ROCK, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gPollenPuffHealTemplate = +{ + .tileTag = ANIM_TAG_BLUE_STAR, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gHealingBlueStarAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +//anchor shot +const struct SpriteTemplate gAnchorShotAnchorTemplate = +{ + .tileTag = ANIM_TAG_ANCHOR, + .paletteTag = ANIM_TAG_CHAIN_LINK, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlockX +}; + +const struct SpriteTemplate gAnchorShotAngledAnchorTemplate = +{ + .tileTag = ANIM_TAG_ANCHOR, + .paletteTag = ANIM_TAG_CHAIN_LINK, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimShadowBall +}; + +//psychic terrain +const struct SpriteTemplate gPsychicTerrainOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, + .callback = AnimOrbitFast +}; + +const struct SpriteTemplate gPsychicTerrainStarTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPARKLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gMoonlightSparkleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimOrbitScatter +}; + +//lunge +const struct SpriteTemplate gLungeGreenChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_PsychoBoostOrb, + .callback = AnimPsychoBoost +}; + +const struct SpriteTemplate gLungeGreenBubbleTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThrowProjectile +}; + +const struct SpriteTemplate gLungeGreenImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//power trip +const struct SpriteTemplate gPowerTripFocusEnergyTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; + +const struct SpriteTemplate gPowerTripImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_PURPLE_FLAME, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//burn up +const struct SpriteTemplate gBurnUpRedYawnTemplate = +{ + .tileTag = ANIM_TAG_PINK_CLOUD, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThrowMistBall +}; + +//speed swap +const struct SpriteTemplate gSpeedSwapRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gSpeedSwapCircleTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gMimicOrbAffineAnimTable, + .callback = AnimMimicOrb +}; + +const struct SpriteTemplate gSpeedSwapOrbMissileTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gMimicOrbAffineAnimTable, + .callback = AnimMissileArc +}; + +const struct SpriteTemplate gSpeedSwapOrbTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineOff_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +//smart strike +const struct SpriteTemplate gSmartStrikeGemTemplate = +{ + .tileTag = ANIM_TAG_POWER_GEM, + .paletteTag = ANIM_TAG_POWER_GEM, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gSmartStrikeImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_FLASH_CANNON_BALL, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//purify +const struct SpriteTemplate gPurifyWhiteBallTemplate = +{ + .tileTag = ANIM_TAG_FLASH_CANNON_BALL, + .paletteTag = ANIM_TAG_FLASH_CANNON_BALL, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMissileArc +}; + +const struct SpriteTemplate gPurifySmokeTemplate = +{ + .tileTag = ANIM_TAG_BLACK_SMOKE, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlackSmoke +}; + +//revelation dance +const struct SpriteTemplate gRevelationDanceYellowOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPetalDanceBigFlower +}; + +const struct SpriteTemplate gRevelationDanceYellowFlowerTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gPetalDanceSmallFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPetalDanceSmallFlower +}; + +const struct SpriteTemplate gRevelationDanceYellowAirWaveTemplate = +{ + .tileTag = ANIM_TAG_AIR_WAVE, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineDouble_ObjBlend_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSonicBoomProjectile +}; + +const struct SpriteTemplate gRevelationDanceYellowImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +const struct SpriteTemplate gRevelationDanceYellowRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +const struct SpriteTemplate gRevelationDanceYellowDispersalTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpread +}; + +//core enforcer +const struct SpriteTemplate gCoreEnforcerBlueRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gCoreEnforcerYellowRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gCoreEnforcerGreenRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gCoreEnforcerCircleChargeTemplate = +{ + .tileTag = ANIM_TAG_SHOCK_3, + .paletteTag = ANIM_TAG_SHOCK_3, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gAnims_ThunderboltOrb, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimFlashingHitSplat +}; + +const struct SpriteTemplate gCoreEnforcerBlueSparkTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSparkElectricity +}; + +const struct SpriteTemplate gCoreEnforcerGreenChargeTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSparkElectricity +}; + +const struct SpriteTemplate gCoreEnforcerSnoreTemplate = +{ + .tileTag = ANIM_TAG_SNORE_Z, + .paletteTag = ANIM_TAG_SNORE_Z, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_CentredSpiderWeb +}; + +const struct SpriteTemplate gCoreEnforcerImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = SpriteCB_CoreEnforcerHits +}; + +const struct SpriteTemplate gCoreEnforcerBeamTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_CoreEnforcerBeam +}; + +const struct SpriteTemplate gCoreEnforcerExplosionTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_EXPLOSION, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_SpriteToCentreOfSide +}; + +//trop kick +const struct SpriteTemplate gTropKickGreenFootTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimJumpKick +}; + +const struct SpriteTemplate gTropKickFlowerTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpread +}; + +const struct SpriteTemplate gTropKickLeavesTemplate = +{ + .tileTag = ANIM_TAG_LEAF, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpread +}; + +//clanging scales +const struct SpriteTemplate gClangingScalesPurpleMetalSoundTemplate = +{ + .tileTag = ANIM_TAG_METAL_SOUND_WAVES, + .paletteTag = ANIM_TAG_METAL_SOUND_WAVES, + .oam = &gOamData_AffineDouble_ObjNormal_32x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGrowingRingAffineAnimTable, + .callback = SpriteCB_TranslateAnimSpriteToTargetMonLocationDoubles +}; + +//brutal swing +const struct SpriteTemplate gBrutalSwingRandomImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatRandom +}; + +const struct SpriteTemplate gBrutalSwingBasicImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +//aurora veil +const struct SpriteTemplate gAuroraVeilRingTemplate = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_GUARD_RING, + .oam = &gOamData_AffineDouble_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGuardRingAffineAnimTable, + .callback = SpriteCB_SurroundingRing +}; + +//shell trap +const struct SpriteTemplate gShellTrapYellowImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +const struct SpriteTemplate gShellTrapRedImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +const struct SpriteTemplate gShellTrapFireHitsTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gAnims_Snowball, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveParticleBeyondTarget +}; + +//fleur cannon +const struct SpriteTemplate gFleurCannonOrbTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; + +const struct SpriteTemplate gFleurCannonDischargeTemplate = +{ + .tileTag = ANIM_TAG_ELECTRICITY, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_ElectricPuff, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimElectricPuff +}; + +//stomping tantrum +const struct SpriteTemplate gStompingTantrumRockTemplate = +{ + .tileTag = ANIM_TAG_SMALL_ROCK, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_TearDrop, + .callback = AnimTearDrop +}; + +//prismatic laser +const struct SpriteTemplate gPrismaticLaserChargeTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; + +const struct SpriteTemplate gPrismaticLaserYellowOutwardTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPIKE, + .paletteTag = ANIM_TAG_SPARK_H, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gPrismaticLaserGreenOutwardTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPIKE, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gPrismaticLaserRedOutwardTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPIKE, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gPrismaticLaserVioletOutwardTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPIKE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gPrismaticLaserYellowInwardTemplate = +{ + .tileTag = ANIM_TAG_TEAL_ALERT, + .paletteTag = ANIM_TAG_SPARK_H, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gPrismaticLaserGreenInwardTemplate = +{ + .tileTag = ANIM_TAG_TEAL_ALERT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gPrismaticLaserRedInwardTemplate = +{ + .tileTag = ANIM_TAG_TEAL_ALERT, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gPrismaticLaserVioletInwardTemplate = +{ + .tileTag = ANIM_TAG_TEAL_ALERT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; + +const struct SpriteTemplate gPrismaticLaserYellowRainTemplate = +{ + .tileTag = ANIM_TAG_NEEDLE, + .paletteTag = ANIM_TAG_SPARK_H, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_FallingObject +}; + +const struct SpriteTemplate gPrismaticLaserGreenRainTemplate = +{ + .tileTag = ANIM_TAG_NEEDLE, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_FallingObject +}; + +const struct SpriteTemplate gPrismaticLaserRedRainTemplate = +{ + .tileTag = ANIM_TAG_NEEDLE, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_FallingObject +}; + +const struct SpriteTemplate gPrismaticLaserVioletRainTemplate = +{ + .tileTag = ANIM_TAG_NEEDLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_FallingObject +}; + +//spectral thief +const struct SpriteTemplate gSpectralThiefBlackSmokeTemplate = +{ + .tileTag = ANIM_TAG_GRAY_SMOKE, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOctazookaAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +const struct SpriteTemplate gSpectralThiefThiefImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimIceEffectParticle +}; + +const struct SpriteTemplate gSpectralThiefBlackOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gMimicOrbAffineAnimTable, + .callback = AnimMimicOrb +}; + +const struct SpriteTemplate gSpectralThiefBlackBuffTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; + +//sunsteeel strike +const struct SpriteTemplate gSunsteelStrikeBlackFlyBallTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; + +static const struct OamData sSunsteelStrikeBlastOAM = +{ + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .priority = 1, //Above sprites +}; +static const union AffineAnimCmd sSpriteAffineAnim_SunsteelStrikeBlastEnemySide[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -64, 1), //90 degree turn + AFFINEANIMCMD_FRAME(0, 0, 0, 7), //Pause + AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd sSpriteAffineAnim_SunsteelStrikeBlastPlayerSide[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 128, 1), //180 degree turn + AFFINEANIMCMD_FRAME(0, 0, 0, 7), //Pause + AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_SunsteelStrikeBlast[] = +{ + sSpriteAffineAnim_SunsteelStrikeBlastEnemySide, + sSpriteAffineAnim_SunsteelStrikeBlastPlayerSide, +}; +const struct SpriteTemplate gSunsteelStrikeSuperpowerTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_METEOR, + .oam = &sSunsteelStrikeBlastOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_SunsteelStrikeBlast, + .callback = AnimFlyBallAttack +}; + +const struct SpriteTemplate gSunsteelStrikeRedBeamTemplate = +{ + .tileTag = ANIM_TAG_GOLD_RING, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallAttack, + .callback = SpriteCB_SunsteelStrikeRings +}; + +const struct SpriteTemplate gSunsteelStrikeYellowBeamTemplate = +{ + .tileTag = ANIM_TAG_GOLD_RING, + .paletteTag = ANIM_TAG_GOLD_RING, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallAttack, + .callback = SpriteCB_SunsteelStrikeRings +}; + +const struct SpriteTemplate gSunsteelStrikeRedImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +const struct SpriteTemplate gSunsteelStrikeRocksTemplate = +{ + .tileTag = ANIM_TAG_SMALL_ROCK, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_TearDrop, + .callback = AnimTearDrop +}; + +//moongeist beam +const struct SpriteTemplate gMoongeistBeamBlueOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_WATER_GUN, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; + +const struct SpriteTemplate gMoongeistBeamPurpleOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ASSURANCE_HAND, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; + +const struct SpriteTemplate gMoongeistBeamChargeTemplate = +{ + .tileTag = ANIM_TAG_ELECTRIC_ORBS, + .paletteTag = ANIM_TAG_ELECTRIC_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gAnims_ElectricChargingParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_MoongeistCharge +}; + +//zing zap +const struct SpriteTemplate gZingZapYellowBallTemplate = +{ + .tileTag = ANIM_TAG_YELLOW_BALL, + .paletteTag = ANIM_TAG_SPARK_H, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimShadowBall +}; + +const struct SpriteTemplate gZingZapRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +//nature's madness +const struct SpriteTemplate gNaturesMadnessPinkStarsTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSmallBubblePair +}; + +const struct SpriteTemplate gNaturesMadnessCrystalsTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gAnims_SmallBubblePair, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSmallBubblePair +}; + +const struct SpriteTemplate gNaturesMadnessPinkRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +const struct SpriteTemplate gNaturesMadnessGrayRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_ECLIPSING_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +//mind blown +const struct SpriteTemplate gMindBlownHeadTemplate = +{ + .tileTag = ANIM_TAG_BLACEPHALON_HEAD, + .paletteTag = ANIM_TAG_BLACEPHALON_HEAD, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = SpriteCB_MindBlownBall +}; + +const struct SpriteTemplate gMindBlownBlueOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_MindBlownExplosion +}; + +const struct SpriteTemplate gMindBlownPinkOrbsTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_PINK_HEART, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_MindBlownExplosion +}; + +const struct SpriteTemplate gMindBlownBlueImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = SpriteCB_RandomCentredHits +}; + +const struct SpriteTemplate gMindBlownPinkImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_PINK_HEART, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = SpriteCB_RandomCentredHits +}; + +//plasma fists +const struct SpriteTemplate gPlasmaFistsChargeTemplate = +{ + .tileTag = ANIM_TAG_SHOCK_3, + .paletteTag = ANIM_TAG_SHOCK_3, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gAnims_ThunderboltOrb, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; + +//photon geyser +static const union AnimCmd sAnimCmdPhotonGeyserBeam1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; +static const union AnimCmd sAnimCmdSmiteBeam[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END +}; +static const union AnimCmd sAnimCmdPhotonGeyserBeam2[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END +}; +static const union AnimCmd *const sAnimCmdTable_PhotonGeyserBeam[] = +{ + sAnimCmdPhotonGeyserBeam1, + sAnimCmdSmiteBeam, + sAnimCmdPhotonGeyserBeam2, +}; +static const union AffineAnimCmd sSpriteAffineAnim_DoNothing[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0, 1), //Do nothing + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd sSpriteAffineAnim_PhotonGeyserBeam[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0, 16), //Delay + AFFINEANIMCMD_FRAME(64, 64, 0, 4), //Double in size + //Pulsate + AFFINEANIMCMD_FRAME(-128, -128, 0, 1), + AFFINEANIMCMD_FRAME(128, 128, 0, 1), + AFFINEANIMCMD_JUMP(2), +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_PhotonGeyserBeam[] = +{ + sSpriteAffineAnim_DoNothing, + sSpriteAffineAnim_PhotonGeyserBeam, +}; +const struct SpriteTemplate gPhotonGeyserBeam = +{ + .tileTag = ANIM_TAG_STRAIGHT_BEAM, + .paletteTag = ANIM_TAG_STRAIGHT_BEAM, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = sAnimCmdTable_PhotonGeyserBeam, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_PhotonGeyserBeam, + .callback = SpriteCB_PhotonGeyserBeam +}; + +const struct SpriteTemplate gPhotonGeyserChargeTemplate = +{ + .tileTag = ANIM_TAG_SHOCK_3, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gAnims_ThunderboltOrb, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; + +const struct SpriteTemplate gPhotonGeyserSparkTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSparkElectricity +}; + +const struct SpriteTemplate gPhotonGeyserZapCannonSparkTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimZapCannonSpark +}; + +const struct SpriteTemplate gPhotonGeyserWhiteRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +const struct SpriteTemplate gPhotonGeyserYellowRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing +}; + +const struct SpriteTemplate gPhotonGeyserZapBallTemplate = +{ + .tileTag = ANIM_TAG_YELLOW_BALL, + .paletteTag = ANIM_TAG_YELLOW_BALL, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; + + +// GEN 8 +//snipe shot +static const union AffineAnimCmd sSpriteAffineAnim_LargeSpikePointedLeft[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 32, 1), //45 degree turn + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_LargeSpikePointedRight[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -32, 1), //45 degree turn + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_LargeSpike[] = +{ + sSpriteAffineAnim_LargeSpikePointedLeft, + sSpriteAffineAnim_LargeSpikePointedRight, +}; + +static const union AffineAnimCmd* const sSpriteAffineAnimTable_SnipeShot[] = +{ + sSpriteAffineAnim_LargeSpikePointedRight, +}; +static const union AnimCmd sAnimCmdSnipeShot[] = +{ + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; +static const union AnimCmd *const sAnimCmdTable_SnipeShot[] = +{ + sAnimCmdSnipeShot, +}; +const struct SpriteTemplate gSnipeShotBallTemplate = //used in aura sphere +{ + .tileTag = ANIM_TAG_IMPACT_2, + .paletteTag = ANIM_TAG_IMPACT_2, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = sAnimCmdTable_SnipeShot, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_SnipeShot, + .callback = AnimShadowBall +}; + +//jaw lock +const struct SpriteTemplate gJawLockTeethTemplate = +{ + .tileTag = ANIM_TAG_SHARP_TEETH, + .paletteTag = ANIM_TAG_SHARP_TEETH, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_Bite, + .callback = SpriteCB_LockingJaw +}; + +//stuff cheeks +static const union AnimCmd sAnimCmdBerryChomp[] = +{ + ANIMCMD_FRAME(0, 0x30), + ANIMCMD_FRAME(0, 0x25), + ANIMCMD_FRAME(16, 3), + ANIMCMD_END, +}; +static const union AnimCmd *const sAnimCmdTable_BerryChomp[] = +{ + sAnimCmdBerryChomp, +}; +const struct SpriteTemplate gFloatingBerryTemplate = +{ + .tileTag = ANIM_TAG_BERRY_NORMAL, + .paletteTag = ANIM_TAG_BERRY_NORMAL, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = sAnimCmdTable_BerryChomp, + .images = NULL, + .affineAnims = gMetronomeFingerAffineAnimTable, + .callback = AnimMetronomeFinger +}; + +//no retreat +static const struct OamData sPyroBallFlamesOAM = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 1, //Above sprites +}; +const struct SpriteTemplate gNoRetreatFlameTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &sPyroBallFlamesOAM, + .anims = gAnims_DragonBreathFire, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_SpriteOnMonForDuration +}; + +//magic powder +const struct SpriteTemplate gMagicPowderBluePowderTemplate = +{ + .tileTag = ANIM_TAG_POISON_POWDER, + .paletteTag = ANIM_TAG_WATER_GUN, + .oam = &gOamData_AffineOff_ObjNormal_8x16, + .anims = gPowderParticlesAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMovePowderParticle +}; + +//dreepy missile +const struct SpriteTemplate gDreepyMissileTemplate = +{ + .tileTag = ANIM_TAG_DREEPY, + .paletteTag = ANIM_TAG_DREEPY, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimShadowBall +}; + +//bolt beak +const struct SpriteTemplate gBoltBeakBlueSparkTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_ELECTRICITY, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSparkElectricity +}; + +const struct SpriteTemplate gBoltBeakBlueFlashingSparkTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_ELECTRICITY, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimSparkElectricityFlashing +}; + +//fishious rend +static const struct OamData sFishiousRendTeethOam = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .priority = 1, //Above sprites +}; +const struct SpriteTemplate gFishiousRendTeethTemplate = +{ + .tileTag = ANIM_TAG_SHARP_TEETH, + .paletteTag = ANIM_TAG_SHARP_TEETH, + .oam = &sFishiousRendTeethOam, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_LeftRightSlice +}; + +//clangorous soul +const struct SpriteTemplate gClangorousSoulBlueBuffTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; + +const struct SpriteTemplate gClangorousSoulPurpleBuffTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; + +const struct SpriteTemplate gClangorousSoulWhiteBuffTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; + +const struct SpriteTemplate gClangorousSoulRedFistTemplate = +{ + .tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimJumpKick +}; + +const struct SpriteTemplate gClangorousSoulRedRingTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +//pyro ball +static const struct OamData sPyroBallRockOAM = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .priority = 1, //Above sprites +}; +const struct SpriteTemplate gPyroBallRockTemplate = +{ + .tileTag = ANIM_TAG_FLAT_ROCK, + .paletteTag = ANIM_TAG_FLAT_ROCK, + .oam = &sPyroBallRockOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_PyroBallRockBounce +}; + +const struct SpriteTemplate gPyroBallBurningRockTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &sPyroBallFlamesOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_PyroBallRockBounce +}; + +const struct SpriteTemplate gPyroBallFlamesUpTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &sPyroBallFlamesOAM, + .anims = gAnims_DragonBreathFire, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_PyroBallRockBounce +}; + +const struct SpriteTemplate gPyroBallEmberBallTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &sPyroBallFlamesOAM, + .anims = gAnims_DragonBreathFire, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_PyroBallLaunch +}; + +//aura wheel +const struct SpriteTemplate gAuraWheelBlueElectricityTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimFireSpiralOutward +}; + +const struct SpriteTemplate gAuraWheelRedElectricityTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SPARK, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimFireSpiralOutward +}; + +//breaking swipe +const struct SpriteTemplate gBreakingSwipeCenteredElectricity = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_CentredElectricity +}; + +//branch poke +const struct SpriteTemplate gBranchPokeBranchTemplate = +{ + .tileTag = ANIM_TAG_BRANCH, + .paletteTag = ANIM_TAG_BRANCH, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimShadowBall +}; + +//apple acid +const struct SpriteTemplate gAppleAcidFloatingAppleTemplate = +{ + .tileTag = ANIM_TAG_APPLE, + .paletteTag = ANIM_TAG_APPLE, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gMetronomeFingerAffineAnimTable, + .callback = AnimMetronomeFinger +}; + +const struct SpriteTemplate gAppleAcidLaunchTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gAffineAnims_PoisonProjectile, + .callback = SpriteCB_AcidLaunchSingleTarget +}; + +const struct SpriteTemplate gAppleAcidDripTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gAnims_AcidPoisonDroplet, + .images = NULL, + .affineAnims = gAffineAnims_Droplet, + .callback = SpriteCB_AcidDripSingleTarget +}; + +//grav apple +static const struct OamData sAppleOAM = +{ + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 1, //Above sprites +}; +const struct SpriteTemplate gGravAppleSmallApple = +{ + .tileTag = ANIM_TAG_APPLE, + .paletteTag = ANIM_TAG_APPLE, + .oam = &sAppleOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_FallingObject +}; + +static const union AffineAnimCmd sSpriteAffineAnim_ScaledApple[] = +{ + AFFINEANIMCMD_FRAME(64, 64, 0, 10), //Quadruple in size + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_ScaledApple[] = +{ + sSpriteAffineAnim_ScaledApple, +}; +const struct SpriteTemplate gGravAppleLargeApple = +{ + .tileTag = ANIM_TAG_APPLE, + .paletteTag = ANIM_TAG_APPLE, + .oam = &sAppleOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_ScaledApple, + .callback = SpriteCB_FallingObject +}; + +//strange steam +const struct SpriteTemplate gStrangeSteamPinkCloudTemplate = +{ + .tileTag = ANIM_TAG_PINK_CLOUD, + .paletteTag = ANIM_TAG_PINK_CLOUD, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimDirtScatter +}; + +const struct SpriteTemplate gStrangeSteamGreenCloudTemplate = +{ + .tileTag = ANIM_TAG_PINK_CLOUD, + .paletteTag = ANIM_TAG_FINGER, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimDirtScatter +}; + +const struct SpriteTemplate gStrangeSteamBlueCloudTemplate = +{ + .tileTag = ANIM_TAG_PINK_CLOUD, + .paletteTag = ANIM_TAG_WATER_GUN, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimDirtScatter +}; + +//life dew +static const union AnimCmd sAnimCmdWaterDropletDrip[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_END, +}; +static const union AnimCmd sAnimCmdWaterDropletSplash[] = +{ + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(80, 3), + ANIMCMD_FRAME(96, 3), + ANIMCMD_FRAME(112, 10), + ANIMCMD_END, +}; +static const union AnimCmd *const sAnimCmdWaterDroplet[] = +{ + sAnimCmdWaterDropletDrip, + sAnimCmdWaterDropletSplash, +}; +const struct SpriteTemplate gLifeDewDropletTemplate = +{ + .tileTag = ANIM_TAG_WATER_DROPLET, + .paletteTag = ANIM_TAG_WATER_DROPLET, + .oam = &sAppleOAM, + .anims = sAnimCmdWaterDroplet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_WaterDroplet +}; + +const struct SpriteTemplate gLifeDewSpecialOrbsTemplate = +{ + .tileTag = ANIM_TAG_BLUE_STAR, + .paletteTag = ANIM_TAG_BLUE_STAR, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gHealingBlueStarAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_AnimSpriteOnSelectedMonPos +}; + +//obstruct +const struct SpriteTemplate gObstructCrossTemplate = +{ + .tileTag = ANIM_TAG_OBSTRUCT_CROSS, + .paletteTag = ANIM_TAG_OBSTRUCT_CROSS, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCrossImpact +}; + +//meteor assault +static const struct OamData sGrowingSuperpowerOAM = +{ + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .priority = 2, +}; +static const union AffineAnimCmd sSpriteAffineAnim_GrowingSuperpowerEnemyAttack[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 128, 1), //180 degree turn + AFFINEANIMCMD_FRAME(0, 0, 0, 2), //Pause + AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd sSpriteAffineAnim_GrowingSuperpowerPlayerAttack[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0, 2), //Pause + AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_GrowingSuperpower[] = +{ + sSpriteAffineAnim_GrowingSuperpowerPlayerAttack, + sSpriteAffineAnim_GrowingSuperpowerEnemyAttack, +}; +const struct SpriteTemplate gGrowingSuperpowerTemplate = //used in breakneck blitz +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_METEOR, + .oam = &sGrowingSuperpowerOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower, + .callback = SpriteCB_GrowingSuperpower +}; + +//steel beam +const struct SpriteTemplate gSteelBeamSpikeShardTemplate = +{ + .tileTag = ANIM_TAG_SPIKES, + .paletteTag = ANIM_TAG_SPIKES, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimDirtScatter +}; + +// Z MOVES +//activate +const struct SpriteTemplate gZMoveSymbolSpriteTemplate = +{ + .tileTag = ANIM_TAG_Z_MOVE_SYMBOL, + .paletteTag = ANIM_TAG_Z_MOVE_SYMBOL, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_LusterPurgeCircle, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlueZMoveEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_SWEAT_BEAD, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy, +}; +const struct SpriteTemplate gGreenZMoveEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_WHIP_HIT, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy, +}; +const struct SpriteTemplate gYellowZMoveEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_PAW_PRINT, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy, +}; +// breakneck blitz +const struct SpriteTemplate gBreakneckBlitzDanceSpriteTemplate = +{ + .tileTag = ANIM_TAG_HOLLOW_ORB, + .paletteTag = ANIM_TAG_FLAT_ROCK, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDragonDanceOrb +}; +const struct SpriteTemplate gBreakneckBlitzHitSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_FLAT_ROCK, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; +// all out pummelling +const struct SpriteTemplate gAllOutPummelingOnslaughtSpriteTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimJumpKick +}; +// supersonic skystrike +static const union AffineAnimCmd sSupersonicSkystrikeAffinePlayerSide[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd sSupersonicSkystrikeAffineOpponentSide[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSupersonicSkystrikeAffineAnimTable[] = { + sSupersonicSkystrikeAffinePlayerSide, + sSupersonicSkystrikeAffineOpponentSide, +}; +const struct SpriteTemplate gSupersonicSkystrikeFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_BIRD, + .paletteTag = ANIM_TAG_BIRD, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSupersonicSkystrikeAffineAnimTable, + .callback = AnimFlyBallAttack +}; +//acid downpour +const struct SpriteTemplate gAcidDownpourReversalSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimReversalOrb +}; +const struct SpriteTemplate gAcidDownpourAuraSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +//tectonic rage +const struct SpriteTemplate gTectonicRageBlastBurnSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_FIRE_PLUME, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlastBurnTargetPlume +}; +const struct SpriteTemplate gTectonicRageExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// continental crush +const struct SpriteTemplate gContinentalCrushNeedleArmSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlyingRock, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; +const struct SpriteTemplate gContinentalCrushBigRockStompSpriteTemplate = +{ + .tileTag = ANIM_TAG_REALLY_BIG_ROCK, + .paletteTag = ANIM_TAG_REALLY_BIG_ROCK, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_LargeHailRock, + .callback = SpriteCB_FallingObject +}; +const struct SpriteTemplate gContinentalCrushFocusEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gContinentalCrushGrowingRockSpriteTemplate = +{ + .tileTag = ANIM_TAG_REALLY_BIG_ROCK, + .paletteTag = ANIM_TAG_REALLY_BIG_ROCK, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gContinentalCrushEruptionSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEruptionFallingRock +}; + +// savage spin out +const struct SpriteTemplate gSavageSpinOutStringBlastSpriteTemplate = +{ + .tileTag = ANIM_TAG_STRING, + .paletteTag = ANIM_TAG_STRING, + .oam = &gOamData_AffineOff_ObjNormal_64x32, + .anims = gAffineAnims_AirWaveCrescent, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimAirWaveCrescent +}; +const struct SpriteTemplate gSavageSpinOutCacoonSpriteTemplate = +{ + .tileTag = ANIM_TAG_COCOON, + .paletteTag = ANIM_TAG_COCOON, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_Bite, + .callback = AnimBite +}; +const struct SpriteTemplate gSavageSpinOutGreenChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gSavageSpinOutGreenCutSpriteTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCuttingSlice +}; +const struct SpriteTemplate gSavageSpinOutWhiteExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// never ending nightmare +const struct SpriteTemplate gNeverEndingNightmareRingAttackerSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gNeverEndingNightmareRingTargetSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gNeverEndingNightmareFocusEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gNeverEndingNightmareHandSpriteTemplate = +{ + .tileTag = ANIM_TAG_ASSURANCE_HAND, + .paletteTag = ANIM_TAG_ASSURANCE_HAND, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; +const struct SpriteTemplate gNeverEndingNightmareBlastBurnSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlastBurnTargetPlume +}; +const struct SpriteTemplate gNeverEndingNightmareGeyserHexSpriteTemplate = +{ + .tileTag = ANIM_TAG_VERTICAL_HEX, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_GeyserTarget +}; +const struct SpriteTemplate gNeverEndingNightmareExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// corkscrew crash +const struct SpriteTemplate gCorkscrewCrashMetalBitSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIKES, + .paletteTag = ANIM_TAG_SPIKES, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_TearDrop, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gCorkscrewCrashChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gCorkscrewCrashCorkscrewFlyUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimParticleInVortex +}; +static const union AffineAnimCmd sCorkscrewCrashFlyDownAffineOpponentSide[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x80, 1), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sCorkscrewCrashFlyDownAffineAnimTable[] = { + sCorkscrewCrashFlyDownAffineOpponentSide, +}; +const struct SpriteTemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashFlyDownAffineAnimTable, + .callback = AnimStompFoot +}; +static const union AffineAnimCmd sCorkscrewCrashStrikePlayerAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd sCorkscrewCrashStrikeTargetAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sCorkscrewCrashStrikeAffineAnimTable[] = { + sCorkscrewCrashStrikePlayerAffineAnims, + sCorkscrewCrashStrikeTargetAffineAnims, +}; +const struct SpriteTemplate gCorkscrewCrashStrikeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashStrikeAffineAnimTable, + .callback = AnimFlyBallAttack +}; +static const union AffineAnimCmd sCorkscrewCrashLeftAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x40, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sCorkscrewCrashLeftAffineAnimTable[] = { + sCorkscrewCrashLeftAffineAnims, +}; +const struct SpriteTemplate gCorkscrewCrashLeftUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashLeftAffineAnimTable, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gCorkscrewCrashLeftDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashLeftAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sCorkscrewCrashRightUpAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sCorkscrewCrashRightUpAffineAnimTable[] = { + sCorkscrewCrashRightUpAffineAnims, +}; +const struct SpriteTemplate gCorkscrewCrashRightUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashRightUpAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sCorkscrewCrashRightDownAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xba, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sCorkscrewCrashRightDownAffineAnimTable[] = { + sCorkscrewCrashRightDownAffineAnims, +}; +const struct SpriteTemplate gCorkscrewCrashRightDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashRightDownAffineAnimTable, + .callback = AnimAssistPawprint +}; + +// inferno overdrive +const struct SpriteTemplate gInfernoOverdriveSuperpowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &sGrowingSuperpowerOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower, + .callback = SpriteCB_GrowingSuperpower +}; +const struct SpriteTemplate gInfernoOverdriveChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gInfernoOverdriveExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// hydro vortex +const struct SpriteTemplate gHydroVortexSuperpowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &sGrowingSuperpowerOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower, + .callback = SpriteCB_GrowingSuperpower +}; +const struct SpriteTemplate gHydroVortexHurricaneSpriteTemplate = +{ + .tileTag = ANIM_TAG_GUST, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_32x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEllipticalGust +}; +const struct SpriteTemplate gHydroVortexImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +// bloom doom +const struct SpriteTemplate gBloomDoomPetalSpinSpriteTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward +}; +const struct SpriteTemplate gBloomDoomGreenChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gBloomDoomHurricaneSpriteTemplate = +{ + .tileTag = ANIM_TAG_GUST, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_32x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEllipticalGustAttacker, +}; +const struct SpriteTemplate gBloomDoomFlowerGeyserSpriteTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_Geyser +}; +const struct SpriteTemplate gBloomDoomGreenBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate gBloomDoomPetalStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; +const struct SpriteTemplate gBloomDoomExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// gigavolt havoc +const struct SpriteTemplate gGigavoltHavocChargingSpearSpriteTemplate = +{ + .tileTag = ANIM_TAG_HAVOC_SPEAR, + .paletteTag = ANIM_TAG_HAVOC_SPEAR, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gGigavoltHavocLaunchSpearSpriteTemplate = +{ + .tileTag = ANIM_TAG_HAVOC_SPEAR, + .paletteTag = ANIM_TAG_HAVOC_SPEAR, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSuperpowerFireball +}; +const struct SpriteTemplate gGigavoltHavocRingsSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gGigavoltHavocGeyserSpriteTemplate = +{ + .tileTag = ANIM_TAG_VERTICAL_HEX, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_GeyserTarget +}; + +// shattered psyche +const struct SpriteTemplate gShatteredPsycheReflectHitSpriteTemplate = +{ + .tileTag = ANIM_TAG_BLUE_LIGHT_WALL, + .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; +const struct SpriteTemplate gShatteredPsychePinkChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gShatteredPsycheRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// subzero slammer +const struct SpriteTemplate gSubzeroSlammerIceSpinSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineNormal_ObjBlend_8x16, + .anims = gAnims_IceCrystalLarge, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimFireSpiralOutward +}; +const struct SpriteTemplate gSubzeroSlammerExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSubzeroSlammerIceSwirlSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineNormal_ObjBlend_8x16, + .anims = gAnims_IceCrystalLarge, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimParticleInVortex +}; + +// devastating drake +static const union AffineAnimCmd sDevastatingDrakeStrikePlayer[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd sDevastatingDrakeStrikeOpponent[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sDevastatingDrakeStrikeAffineAnimTable[] = { + sDevastatingDrakeStrikePlayer, + sDevastatingDrakeStrikeOpponent, +}; +static const union AffineAnimCmd sDevastatingDrakeFlyUpAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sDevastatingDrakeFlyUpAffineAnimTable[] = { + sDevastatingDrakeFlyUpAffineAnims, + sDevastatingDrakeFlyUpAffineAnims +}; +static const union AffineAnimCmd sDevastatingDrakeRightAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sDevastatingDrakeRightAffineAnimTable[] = { + sDevastatingDrakeRightAffineAnims, + sDevastatingDrakeRightAffineAnims +}; +static const union AffineAnimCmd sDevastatingDrakeLeftAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x40, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sDevastatingDrakeLeftAffineAnimTable[] = { + sDevastatingDrakeLeftAffineAnims, + sDevastatingDrakeLeftAffineAnims, +}; +const struct SpriteTemplate gDevastatingDrakePurpleEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gDevastatingDrakeShockwaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrb +}; +const struct SpriteTemplate gDevastatingDrakeDrakeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_DRAKE, + .paletteTag = ANIM_TAG_PURPLE_DRAKE, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sDevastatingDrakeFlyUpAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gDevastatingDrakeRightSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_DRAKE, + .paletteTag = ANIM_TAG_PURPLE_DRAKE, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sDevastatingDrakeRightAffineAnimTable, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gDevastatingDrakeLeftSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_DRAKE, + .paletteTag = ANIM_TAG_PURPLE_DRAKE, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sDevastatingDrakeLeftAffineAnimTable, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gDevastatingDrakeStrikeSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_DRAKE, + .paletteTag = ANIM_TAG_PURPLE_DRAKE, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sDevastatingDrakeStrikeAffineAnimTable, + .callback = AnimFlyBallAttack +}; +const struct SpriteTemplate gDevastatingDrakePurpleBlastSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_FIRE_PLUME, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlastBurnTargetPlume +}; +const struct SpriteTemplate gDevastatingDrakeHexSpriteTemplate = +{ + .tileTag = ANIM_TAG_VERTICAL_HEX, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_Geyser +}; +const struct SpriteTemplate gDevastatingDrakeExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_EXPLOSION, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gDevastatingDrakeExplosion2SpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// black hole eclipse +const struct SpriteTemplate gBlackHoleEclipseShockwaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_BLACK_BALL_2, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrb +}; +const struct SpriteTemplate gBlackHoleEclipseBlueRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlackHoleEclipseBlackRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlackHoleEclipseRedExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlackHoleEclipseWispSpriteTemplate = +{ + .tileTag = ANIM_TAG_WISP_ORB, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gAnims_WillOWispOrb, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWillOWispOrb +}; +const struct SpriteTemplate gBlackHoleEclipseRedRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +static const union AffineAnimCmd gGrowingBackHoleTargetAffineCmds[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -10, 0x88), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd *const gGrowingBlackHoleTargetAffineAnimTable[] = { + gGrowingBackHoleTargetAffineCmds, +}; +const struct SpriteTemplate gBlackHoleEclipseHoleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGrowingBlackHoleTargetAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +static const union AffineAnimCmd gShrinkingBlackHoleAffineCmds[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x10, -0x10, 0xf6, 8), + AFFINEANIMCMD_END_ALT(1), +}; +static const union AffineAnimCmd *const gShrinkingBlackHoleAffineAnimTable[] = { + gShrinkingBlackHoleAffineCmds, +}; +const struct SpriteTemplate gBlackHoleEclipseHoleShrinkSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gShrinkingBlackHoleAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +static const union AffineAnimCmd gGrowingBackHoleAffineCmds[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -10, 0x48), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd *const gGrowingBlackHoleAffineAnimTable[] = { + gGrowingBackHoleAffineCmds, +}; +const struct SpriteTemplate gBlackHoleEclipseHoleUserSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGrowingBlackHoleAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gTargetTwinkleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_SPARKLE_4, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_SpinningSparkle, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TwinkleOnBattler +}; + +// twinkle tackle +static const union AffineAnimCmd sTwinkleTackleStarPlayerAffineAnims[] = { + AFFINEANIMCMD_FRAME(8, 8, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0x0, 0x1e), + AFFINEANIMCMD_END_ALT(1), +}; +static const union AffineAnimCmd sTwinkleTackleStarOpponentAffineAnims[] = { + AFFINEANIMCMD_FRAME(8, 8, 0, 0), + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0xf), + AFFINEANIMCMD_END_ALT(1), +}; +static const union AffineAnimCmd *const sTwinkleTackleStarAffineAnimTable[] = { + sTwinkleTackleStarPlayerAffineAnims, + sTwinkleTackleStarOpponentAffineAnims +}; +const struct SpriteTemplate gTwinkleTacklePinkStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGrantingStars +}; +const struct SpriteTemplate gTwinkleTacklePinkRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gTwinkleTackleStarGrowSpriteTemplate = +{ + .tileTag = ANIM_TAG_YELLOW_STAR, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sTwinkleTackleStarAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gTwinkleTackleTwinkleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_SPARKLE_4, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_SpinningSparkle, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TwinkleOnBattler +}; +const struct SpriteTemplate gTwinkleTackleDigStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_YELLOW_STAR, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDirtPlumeParticle +}; +const struct SpriteTemplate gTwinkleTackleYellowImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; +const struct SpriteTemplate gTwinkleTackleImpactStarsSpriteTemplate = +{ + .tileTag = ANIM_TAG_PAIN_SPLIT, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDizzyPunchDuck +}; + +// catastrokpika +const struct SpriteTemplate gCatastrokpikaSuperpowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &sGrowingSuperpowerOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower, + .callback = SpriteCB_GrowingSuperpower +}; + +// 10e6 volt thunderbolt +const struct SpriteTemplate g10MillionVoltBoltYellowFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate g10MillionVoltBoltShockwaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrbOnTarget, +}; +const struct SpriteTemplate g10MillionVoltBoltRedBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate g10MillionVoltBoltBlueBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate g10MillionVoltBoltPinkBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_BERRY_EATEN, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate g10MillionVoltBoltYellowBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ELECTRIC_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate g10MillionVoltBoltGreenBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate g10MillionVoltBoltPurpleBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; + +// stoked sparksurfer +const struct SpriteTemplate gStokedSparksurferFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; + +// extreme evoboost +const struct SpriteTemplate gExtremeEvoboostRedChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostPinkChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_BERRY_EATEN, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostIceChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostBlackChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostBlueChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostPurpleChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostYellowChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostGreenChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostRedChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_BERRY_EATEN, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostIceChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostRedStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostPinkStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_BERRY_EATEN, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostIceStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostBlackStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostBlueStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostPurpleStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostYellowStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostGreenStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; + +// pulverizing pancake +const struct SpriteTemplate gPulverizingPancakeRedDetectSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_SpinningSparkle, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpinningSparkle +}; +const struct SpriteTemplate gPulverizingPancakeExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_ELECTRIC_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gPulverizingPancakeYellowRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_ELECTRIC_ORBS, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// genesis supernova +const struct SpriteTemplate gGenesisSupernovaOrbRiseSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gAffineAnims_Bubble, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gGenesisSupernovaReversalSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimReversalOrb +}; +const struct SpriteTemplate gGenesisSupernovaSpinUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gGenesisSupernovaChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gGenesisSupernovaSuperpowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &sGrowingSuperpowerOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower, + .callback = SpriteCB_GrowingSuperpower +}; +const struct SpriteTemplate gGenesisSupernovaBubbleSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gAffineAnims_Bubble, + .callback = AnimBubbleEffect +}; +const struct SpriteTemplate gGenesisSupernovaExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// sinister arrow raid +static const union AffineAnimCmd sArrowRaidFlyStrikePlayerAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd sArrowRaidFlyStrikeOpponentAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidFlyStrikeAffineAnimTable[] = { + sArrowRaidFlyStrikePlayerAffineAnims, + sArrowRaidFlyStrikeOpponentAffineAnims +}; +static const union AffineAnimCmd sArrowRaidFlyRightAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidFlyRightAffineAnimTable[] = { + sArrowRaidFlyRightAffineAnims, + sArrowRaidFlyRightAffineAnims +}; +static const union AffineAnimCmd sArrowRaidFlyLeftAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x40, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidFlyLeftAffineAnimTable[] = { + sArrowRaidFlyLeftAffineAnims, + sArrowRaidFlyLeftAffineAnims +}; +const struct SpriteTemplate gArrowRaidExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gArrowRaidFlyUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate gArrowRaidFlyRightSpriteTemplate = +{ + .tileTag = ANIM_TAG_BIRD, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidFlyRightAffineAnimTable, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gArrowRaidFlyLeftSpriteTemplate = +{ + .tileTag = ANIM_TAG_BIRD, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidFlyLeftAffineAnimTable, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gArrowRaidFlyStrikeSpriteTemplate = +{ + .tileTag = ANIM_TAG_BIRD, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidFlyStrikeAffineAnimTable, + .callback = AnimFlyBallAttack +}; +static const union AffineAnimCmd sArrowRaidArrowUpAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xa0, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidArrowUpAffineAnimTable[] = { + sArrowRaidArrowUpAffineAnims, +}; +const struct SpriteTemplate gArrowRaidArrowUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidArrowUpAffineAnimTable, + .callback = AnimParticleInVortex +}; +static const union AffineAnimCmd sArrowRaidArrowRightUpAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x75, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidArrowRightUpAffineAnimTable[] = { + sArrowRaidArrowRightUpAffineAnims, +}; +const struct SpriteTemplate gArrowRaidRightUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidArrowRightUpAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidRightDownAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x60, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidRightDownAffineAnimTable[] = { + sArrowRaidRightDownAffineAnims, +}; +const struct SpriteTemplate gArrowRaidRightDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidRightDownAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidArrowLeftUpAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xe0, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidLeftUpAffineAnimTable[] = { + sArrowRaidArrowLeftUpAffineAnims, +}; +const struct SpriteTemplate gArrowRaidLeftUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidLeftUpAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidFaceUpLeftAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xe0, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidFaceUpLeftAffineAnimTable[] = { + sArrowRaidFaceUpLeftAffineAnims, +}; +const struct SpriteTemplate gArrowRaidFaceUpLeftSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidFaceUpLeftAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidArrowFaceRightAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x60, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidArrowFaceRightAffineAnimTable[] = { + sArrowRaidArrowFaceRightAffineAnims +}; +const struct SpriteTemplate gArrowRaidRightSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidArrowFaceRightAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidLeftDownAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xd0, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidLeftDownAffineAnimTable[] = { + sArrowRaidLeftDownAffineAnims +}; +const struct SpriteTemplate gArrowRaidLeftDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidLeftDownAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidOnslaughtAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x30, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidOnslaughtAffineAnimTable[] = { + sArrowRaidOnslaughtAffineAnims +}; +const struct SpriteTemplate gArrowRaidArrowOnslaughtSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidOnslaughtAffineAnimTable, + .callback = AnimAssistPawprint +}; + +// malicious moonsault +const struct SpriteTemplate gMaliciousMoonsaultRedFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate gMaliciousMoonsaultRedBounceSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_BounceBallLand, + .callback = AnimBounceBallLand +}; +const struct SpriteTemplate gMaliciousMoonsaultRedImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; +const struct SpriteTemplate gMaliciousMoonsaultFireblastSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FireBlastCross, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireCross +}; +const struct SpriteTemplate gMaliciousMoonsaultExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// oceanic operetta +const struct SpriteTemplate gOceanOperaSpotlightSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPOTLIGHT, + .paletteTag = ANIM_TAG_SPOTLIGHT, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpotlightAffineAnimTable, + .callback = AnimOceanicOperettaSpotlight, +}; +const struct SpriteTemplate gOceanOperaBlueFlareSpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gOceanOperaBlueChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gOceanOperaBlueRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gOceanOperaMovingOrbsSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThrowMistBall +}; +const struct SpriteTemplate gOceanOperaBlueOrbsSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBite +}; +const struct SpriteTemplate gOceanOperaExpandingRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gOceanOperaExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gOceanOperaSparkleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGrantingStars +}; + +// splintered stormshards +const struct SpriteTemplate gSplinteredShardsFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate gSplinteredShardsExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSplinteredShardsRisingSpearSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sSplinteredShardsOpponentSteepAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xca, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSplinteredShardsOpponentSteepAffineAnimTable[] = { + sSplinteredShardsOpponentSteepAffineAnims, +}; +const struct SpriteTemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSplinteredShardsOpponentSteepAffineAnimTable, + .callback = AnimJumpKick +}; +static const union AffineAnimCmd sSplinteredShardsOpponentShallowAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSplinteredShardsOpponentShallowAffineAnimTable[] = { + sSplinteredShardsOpponentShallowAffineAnims +}; +const struct SpriteTemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSplinteredShardsOpponentShallowAffineAnimTable, + .callback = AnimJumpKick +}; +static const union AffineAnimCmd sSplinteredShardsPlayerSteepAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x60, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSplinteredShardsPlayerSteepAffineAnimTable[] = { + sSplinteredShardsPlayerSteepAffineAnims +}; +const struct SpriteTemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSplinteredShardsPlayerSteepAffineAnimTable, + .callback = AnimJumpKick +}; +static const union AffineAnimCmd sSplinteredShardsPlayerShallowAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSplinteredShardsPlayerShallowAffineAnimTable[] = { + sSplinteredShardsPlayerShallowAffineAnims +}; +const struct SpriteTemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSplinteredShardsPlayerShallowAffineAnimTable, + .callback = AnimJumpKick +}; + +// lets snuggle forever +const struct SpriteTemplate gSnuggleForeverEyesSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_SpinningSparkle, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpinningSparkle +}; +const struct SpriteTemplate gSnuggleForeverStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_PAIN_SPLIT, + .paletteTag = ANIM_TAG_DUCK, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDizzyPunchDuck +}; +const struct SpriteTemplate gSnuggleForeverHeartSpriteTemplate = +{ + .tileTag = ANIM_TAG_MAGENTA_HEART, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMagentaHeart +}; + +// clangorous soulblaze +const struct SpriteTemplate gClangoorousSoulblazeWhiteFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = gAffineAnims_Whirlpool, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gClangoorousSoulblazePurpleChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gClangoorousSoulblazePulseSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; + +// guardian of alola +const struct SpriteTemplate gGuardianOfAlolaFistSpriteTemplate = +{ + .tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST, + .paletteTag = ANIM_TAG_HORSESHOE_SIDE_FIST, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimStompFoot +}; +const struct SpriteTemplate gGuardianOfAlolaDirtGeyserSpriteTemplate = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMudSportDirt +}; + +// seering sunraze smash +static const union AffineAnimCmd sSearingSunrazeSmashWormholeGrowingAffineAnims[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0xf8, 0x88), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSearingSunrazeSmashWormholeGrowingAffineAnimTable[] = { + sSearingSunrazeSmashWormholeGrowingAffineAnims +}; +const struct SpriteTemplate gSearingSunrazeSmashGrowWormholeSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSearingSunrazeSmashWormholeGrowingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSearingSunrazeSmashCrossImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_CROSS_IMPACT, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCrossImpact +}; +const struct SpriteTemplate gSearingSunrazeSmashWhiteCutSpriteTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCuttingSlice +}; +const struct SpriteTemplate gSearingSunrazeSmashInfernoOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gSearingSunrazeSmashShockwaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrbOnTarget +}; +const struct SpriteTemplate gSearingSunrazeSmashRedFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; + +// menacing moonraze maelstrom +const struct SpriteTemplate gMoonrazeMaelstromBlueBuffSpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gMoonrazeMaelstromBlackBuffSpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGrantingStars +}; +const struct SpriteTemplate gMoonrazeMaelstromBlueRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gMoonrazeMaelstromWhiteRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gMoonrazeMaelstromSuperpowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSuperpowerFireball +}; +const struct SpriteTemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gMoonrazeMaelstromBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate gMoonrazeMaelstromExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gMoonrazeMaelstromShockwaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrbOnTarget +}; +static const union AffineAnimCmd sMoonrazeMaelstromWormholeAffineAnims[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0xf6, 0x88), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sMoonrazeMaelstromWormholeAffineAnimTable[] = { + sMoonrazeMaelstromWormholeAffineAnims +}; +const struct SpriteTemplate gMoonrazeMaelstromWormholeSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sMoonrazeMaelstromWormholeAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// light that burns the sky +const struct SpriteTemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimSparkElectricityFlashing +}; +const struct SpriteTemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlastBurnTargetPlume +}; +static const struct OamData sGeyserOam = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 1, //Above sprites +}; +const struct SpriteTemplate gLightThatBurnsTheSkyExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &sGeyserOam, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// soul stealing 7star strike +const struct SpriteTemplate gSoulStealBlackFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate gSoulStealIceBuffSpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gSoulStealBlueFistSpriteTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimJumpKick +}; +const struct SpriteTemplate gSoulStealBlueStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_PAIN_SPLIT, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_Bite, + .callback = AnimSoulStealingStar +}; +const struct SpriteTemplate gSoulStealBlueParalyzeSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimElectricity +}; +const struct SpriteTemplate gSoulStealBlastburnSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_WISP_FIRE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFirePlume +}; +const struct SpriteTemplate gSoulStealExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_WISP_FIRE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSoulStealZStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_SNORE_Z, + .paletteTag = ANIM_TAG_SNORE_Z, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCrossImpact +}; + +// functions +//general +void AnimTask_IsTargetPartner(u8 taskId) +{ + if (gBattleAnimTarget == (gBattleAnimAttacker ^ BIT_FLANK)) + gBattleAnimArgs[0] = 1; + else + gBattleAnimArgs[0] = 0; + + DestroyAnimVisualTask(taskId); +} + +void AnimTask_AllBanksInvisible(u8 taskId) +{ + u32 i; + for (i = 0; i < gBattlersCount; i++) + { + u8 spriteId = gBattlerSpriteIds[i]; + if (spriteId != 0xFF) + gSprites[spriteId].invisible = TRUE; + } + DestroyAnimVisualTask(taskId); +} + +void AnimTask_AllBanksVisible(u8 taskId) +{ + u32 i; + for (i = 0; i < gBattlersCount; i++) + { + u8 spriteId = gBattlerSpriteIds[i]; + if (spriteId != 0xFF) + gSprites[spriteId].invisible = FALSE; + } + DestroyAnimVisualTask(taskId); +} + +void AnimTask_AllBanksInvisibleExceptAttackerAndTarget(u8 taskId) +{ + u32 i; + for (i = 0; i < gBattlersCount; ++i) + { + u8 spriteId = gBattlerSpriteIds[i]; + if (spriteId == GetAnimBattlerSpriteId(ANIM_ATTACKER) || spriteId == GetAnimBattlerSpriteId(ANIM_TARGET)) + continue; + if (spriteId != 0xFF || !IsBattlerSpriteVisible(i)) //Pokemon that are already hidden + gSprites[spriteId].invisible = TRUE; + } + DestroyAnimVisualTask(taskId); +} + +static u8 LoadBattleAnimTarget(u8 arg) +{ + u8 battler; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + switch (gBattleAnimArgs[arg]) + { + case 0: + battler = gBattleAnimAttacker; + break; + default: + battler = gBattleAnimTarget; + break; + case 2: + battler = BATTLE_PARTNER(gBattleAnimAttacker); + break; + case 3: + battler = BATTLE_PARTNER(gBattleAnimTarget); + break; + } + } + else + { + if (gBattleAnimArgs[arg] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + } + + return battler; +} + +static u8 GetProperCentredCoord(u8 battler, u8 coordType) +{ + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + return (GetBattlerSpriteCoord2(battler, coordType) + GetBattlerSpriteCoord2(BATTLE_PARTNER(battler), coordType)) / 2; + + return GetBattlerSpriteCoord(battler, coordType); +} + +static void InitSpritePosToGivenTarget(struct Sprite *sprite, u8 target) +{ + sprite->x = GetBattlerSpriteCoord2(target, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord2(target, BATTLER_COORD_Y); + + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->y2 = gBattleAnimArgs[1]; +} + +static void InitSpritePosToAnimTargetsCentre(struct Sprite *sprite, bool8 respectMonPicOffsets) +{ + if (!respectMonPicOffsets) + { + sprite->x = (GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X) + + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X)) / 2; + sprite->y = (GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y) + + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y)) / 2; + } + + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->y += gBattleAnimArgs[1]; +} + +static void InitSpritePosToAnimAttackersCentre(struct Sprite *sprite, bool8 respectMonPicOffsets) +{ + if (!respectMonPicOffsets) + { + sprite->x = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X) + + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X)) / 2; + sprite->y = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y) + + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_Y)) / 2; + } + else + { + sprite->x = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2) + + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X_2)) / 2; + sprite->y = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_Y_PIC_OFFSET)) / 2; + } + + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->y += gBattleAnimArgs[1]; +} + +//sprite callbacks +static void AnimSoulStealingStar(struct Sprite *sprite) +{ + sprite->x += gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[4]; + sprite->data[2] = gBattleAnimArgs[5]; + sprite->callback = AnimSoulStealingStar_Step1; +} + +static void AnimSoulStealingStar_Step1(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[0]; + sprite->data[5] += sprite->data[1]; + sprite->x2 = sprite->data[4] >> 8; + sprite->y2 = sprite->data[5] >> 8; + if (++sprite->data[3] == sprite->data[2]) + sprite->callback = AnimSoulStealingStar_Step2; +} + +static void AnimSoulStealingStar_Step2(struct Sprite *sprite) +{ + sprite->data[4] -= sprite->data[0]; + sprite->data[5] -= sprite->data[1]; + sprite->x2 = sprite->data[4] >> 8; + sprite->y2 = sprite->data[5] >> 8; + if (--sprite->data[3] == 0) + DestroySpriteAndMatrix(sprite); +} + +//Creates The Extreme Evoboost Circles +static void AnimExtremeEvoboostCircle(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, FALSE); + sprite->y += 20; + sprite->data[1] = 191; + sprite->callback = AnimExtremeEvoboostCircle_Step; + sprite->callback(sprite); +} + +static void AnimExtremeEvoboostCircle_Step(struct Sprite *sprite) +{ + sprite->x2 = Sin(sprite->data[1], 32); + sprite->y2 = Cos(sprite->data[1], 8); + sprite->data[1] += 5; + sprite->data[1] &= 0xFF; + if (++sprite->data[0] == 71) + DestroyAnimSprite(sprite); +} + +static void AnimGrowingShockWaveOrbOnTarget(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + StartSpriteAffineAnim(sprite, 2); + sprite->data[0]++; + break; + case 1: + if (sprite->affineAnimEnded) + DestroySpriteAndMatrix(sprite); + break; + } +} + +static void AnimEllipticalGustAttacker(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, FALSE); + sprite->y += 20; + sprite->data[1] = 191; + sprite->callback = AnimEllipticalGustAttacker_Step; + sprite->callback(sprite); +} + +static void AnimEllipticalGustAttacker_Step(struct Sprite *sprite) +{ + sprite->x2 = Sin(sprite->data[1], 32); + sprite->y2 = Cos(sprite->data[1], 8); + sprite->data[1] += 5; + sprite->data[1] &= 0xFF; + if (++sprite->data[0] == 71) + DestroyAnimSprite(sprite); +} + +static void SetSpriteCoordsToAnimTargetCoords(struct Sprite *sprite) +{ + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); +} + +static void AnimBlastBurnTargetPlume(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimTargetCoords(sprite); + if (GetBattlerSide(gBattleAnimTarget)) + { + sprite->x -= gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + sprite->data[2] = -gBattleAnimArgs[4]; + } + else + { + sprite->x += gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[4]; + } + + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[5]; + + sprite->callback = AnimBlastBurnTargetPlume_Step1; +} +static void AnimBlastBurnTargetPlume_Step1(struct Sprite *sprite) +{ + if (++sprite->data[0] < sprite->data[4]) + { + sprite->x2 += sprite->data[2]; + sprite->y2 += sprite->data[3]; + } + + if (sprite->data[0] == sprite->data[1]) + DestroySpriteAndMatrix(sprite); +} + +static void SpriteCB_SpriteToCentreOfSide(struct Sprite *sprite) +{ + bool8 var; + + if (!sprite->data[0]) + { + if (!gBattleAnimArgs[3]) + var = TRUE; + else + var = FALSE; + + if (gBattleAnimArgs[2] == 0) //Attacker + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + InitSpritePosToAnimAttackersCentre(sprite, var); + else + InitSpritePosToAnimAttacker(sprite, var); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + InitSpritePosToAnimTargetsCentre(sprite, var); + else + InitSpritePosToAnimTarget(sprite, var); + } + + sprite->data[0]++; + } + else if (sprite->animEnded || sprite->affineAnimEnded) + { + DestroySpriteAndMatrix(sprite); + } +} + +static void SpriteCB_SpriteOnMonForDuration(struct Sprite *sprite) +{ + u8 target = LoadBattleAnimTarget(0); + + if (!IsBattlerSpriteVisible(target)) + { + DestroyAnimSprite(sprite); + } + else + { + sprite->x = GetBattlerSpriteCoord(target, 0); + sprite->y = GetBattlerSpriteCoord(target, 1); + sprite->x += gBattleAnimArgs[1]; + sprite->y += gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = 0; + sprite->callback = AnimBrickBreakWall_Step; + } +} + +static void SpriteCB_ToxicThreadWrap(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->x -= gBattleAnimArgs[0]; + else + sprite->x += gBattleAnimArgs[0]; + + sprite->y += gBattleAnimArgs[1]; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + sprite->y += 8; + + sprite->callback = AnimStringWrap_Step; +} + + +static void SpriteCB_GrowingSuperpower(struct Sprite *sprite) +{ + u8 battler; + + if (gBattleAnimArgs[0] == 0) + { + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + battler = gBattleAnimTarget; + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); + } + else + { + battler = gBattleAnimAttacker; + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + } + + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + StartSpriteAffineAnim(sprite, 1); + + sprite->data[0] = 16; + sprite->data[1] = sprite->x; + sprite->data[2] = GetBattlerSpriteCoord(battler, 2); + sprite->data[3] = sprite->y; + sprite->data[4] = GetBattlerSpriteCoord(battler, 3); + + InitAnimLinearTranslation(sprite); + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = AnimTranslateLinear_WithFollowup; +} + +static void SpriteCB_CentredSpiderWeb(struct Sprite *sprite) +{ + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); + + sprite->callback = AnimSpiderWeb; +} + +static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + + if (gBattleAnimArgs[2] == 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + InitSpritePosToAnimAttackersCentre(sprite, FALSE); + else + InitSpritePosToAnimAttacker(sprite, FALSE); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); + } + + sprite->y += 20; + sprite->callback = AnimFlashingHitSplat_Step; +} + +static void SpriteCB_CoreEnforcerBeam(struct Sprite *sprite) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + AnimSolarBeamBigOrb(sprite); + } + else + { + InitSpritePosToAnimAttacker(sprite, TRUE); + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + + sprite->data[0] = gBattleAnimArgs[2]; + + sprite->data[2] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + + GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X_2)) / 2; + + + sprite->data[4] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + + GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y_PIC_OFFSET)) / 2; + + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + } +} + +static void SpriteCB_TranslateAnimSpriteToTargetMonLocationDoubles(struct Sprite *sprite) +{ + bool8 v1; + u8 target; + u8 coordType; + + if (!(gBattleAnimArgs[5] & 0xff00)) + v1 = TRUE; + else + v1 = FALSE; + + if (!(gBattleAnimArgs[5] & 0xff)) + coordType = BATTLER_COORD_Y_PIC_OFFSET; + else + coordType = BATTLER_COORD_Y; + + InitSpritePosToAnimAttacker(sprite, v1); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + target = LoadBattleAnimTarget(6); + + if (!IsBattlerSpriteVisible(target)) + DestroyAnimSprite(sprite); + else + { + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(target, coordType) + gBattleAnimArgs[3]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + } +} + +//Causes an object to fall from the sky. +//arg 0: initial x pixel offset +//arg 1: initial y pixel offset +//arg 2: speed +//arg 3: anim battler +static void SpriteCB_FallingObject(struct Sprite *sprite) +{ + u8 target = LoadBattleAnimTarget(3); + + if (!IsBattlerSpriteVisible(target)) + DestroyAnimSprite(sprite); + else + { + sprite->x = GetBattlerSpriteCoord2(target, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord2(target, BATTLER_COORD_Y); + + sprite->x2 = gBattleAnimArgs[0]; + sprite->y = gBattleAnimArgs[1]; + sprite->y2 = -gBattleAnimArgs[1]; + + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + sprite->y += 45; + sprite->y2 -= 45; + } + + sprite->data[3] = gBattleAnimArgs[2]; //Speed + sprite->callback = SpriteCB_FallingObjectStep; + } +} +static void SpriteCB_FallingObjectStep(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->y2 += sprite->data[3]; + if (sprite->y2 >= 0) + { + sprite->y2 = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] > 0) + { + sprite->data[1] = 0; + sprite->invisible ^= 1; + if (++sprite->data[2] == 10) + DestroySpriteAndMatrix(sprite); + } + break; + } +} + +static void SpriteCB_SunsteelStrikeRings(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->x = 272; + sprite->y = -32; + } + else + { + sprite->x = -32; + sprite->y = -32; + } + + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = sprite->x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[3] = sprite->y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + + InitAnimLinearTranslation(sprite); + sprite->callback = AnimFlyBallAttack_Step; +} + +//arg 0: initial x pixel offset +//arg 1: initial y pixel offset +//arg 2: target x pixel offset +//arg 3: target y pixel offset +//arg 4: duration +//arg 5: wave amplitude +static void SpriteCB_MoongeistCharge(struct Sprite *sprite) +{ + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y + sprite->data[5] = gBattleAnimArgs[5]; + + InitAnimArcTranslation(sprite); + sprite->callback = AnimMissileArc_Step; +} + +//Spins a sprite towards the target, pausing in the middle. +//Used in Mind Blown. +//arg 0: duration step 1 (attacker -> center) +//arg 1: duration step 2 (spin center) +//arg 2: duration step 3 (center -> target) +static void SpriteCB_MindBlownBall(struct Sprite *sprite) +{ + s16 oldPosX = sprite->x; + s16 oldPosY = sprite->y; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] = gBattleAnimArgs[2]; + sprite->data[4] = sprite->x << 4; + sprite->data[5] = sprite->y << 4; + sprite->data[6] = ((oldPosX - sprite->x) << 4) / (gBattleAnimArgs[0] << 1); + sprite->data[7] = ((oldPosY - sprite->y) << 4) / (gBattleAnimArgs[0] << 1); + sprite->callback = AnimMindBlownBallStep; +} +static void AnimMindBlownBallStep(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->x = sprite->data[4] >> 4; + sprite->y = sprite->data[5] >> 4; + sprite->data[1] -= 1; + if (sprite->data[1] > 0) + break; + sprite->data[0] += 1; + break; + case 1: + sprite->data[2] -= 1; + if (sprite->data[2] > 0) + break; + + sprite->data[1] = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[2] = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + sprite->data[4] = sprite->x << 4; + sprite->data[5] = sprite->y << 4; + sprite->data[6] = ((sprite->data[1] - sprite->x) << 4) / sprite->data[3]; + sprite->data[7] = ((sprite->data[2] - sprite->y) << 4) / sprite->data[3]; + sprite->data[0] += 1; + break; + case 2: + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->x = sprite->data[4] >> 4; + sprite->y = sprite->data[5] >> 4; + sprite->data[3] -= 1; + if (sprite->data[3] > 0) + break; + sprite->x = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + sprite->data[0] += 1; + break; + case 3: + DestroySpriteAndMatrix(sprite); + break; + } +} + +static void SpriteCB_MindBlownExplosion(struct Sprite *sprite) +{ + u8 a; + u8 b; + u16 x; + u16 y; + + if (gBattleAnimArgs[4] == 0) + { + DestroyAnimSprite(sprite); + } + else + { + a = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + b = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + + sprite->data[0] = gBattleAnimArgs[4]; + if (gBattleAnimArgs[1] == 0) + { + sprite->x = gBattleAnimArgs[2] + a; + sprite->y = gBattleAnimArgs[3] + b; + sprite->data[5] = a; + sprite->data[6] = b; + } + else + { + sprite->x = a; + sprite->y = b; + sprite->data[5] = gBattleAnimArgs[2] + a; + sprite->data[6] = gBattleAnimArgs[3] + b; + } + + x = sprite->x; + sprite->data[1] = x * 16; + y = sprite->y; + sprite->data[2] = y * 16; + sprite->data[3] = (sprite->data[5] - sprite->x) * 16 / gBattleAnimArgs[4]; + sprite->data[4] = (sprite->data[6] - sprite->y) * 16 / gBattleAnimArgs[4]; + + sprite->callback = AnimNeedleArmSpike_Step; + } +} + +void SpriteCB_RandomCentredHits(struct Sprite *sprite) +{ + if (gBattleAnimArgs[1] == -1) + gBattleAnimArgs[1] = Random() & 3; + + StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]); + + if (gBattleAnimArgs[0] == 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + InitSpritePosToAnimAttackersCentre(sprite, FALSE); + else + InitSpritePosToAnimAttacker(sprite, FALSE); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); + } + + sprite->x2 += (Random() % 48) - 24; + sprite->y2 += (Random() % 24) - 12; + + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} + +//Creates a jaw that bites down and locks on the target. +//args: Idk same as bite and crunch +//arg 6: Time to hold bite for. +static void SpriteCB_LockingJaw(struct Sprite *sprite) +{ + sprite->x += gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[4]; + sprite->data[2] = gBattleAnimArgs[5]; + sprite->data[6] = -gBattleAnimArgs[6]; + sprite->callback = SpriteCB_LockingJawStep; +} +static void SpriteCB_LockingJawStep(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[0]; + sprite->data[5] += sprite->data[1]; + sprite->x2 = sprite->data[4] >> 8; + sprite->y2 = sprite->data[5] >> 8; + if (++sprite->data[3] == sprite->data[2]) + sprite->callback = SpriteCB_LockingJawFinish; +} +static void SpriteCB_LockingJawFinish(struct Sprite *sprite) +{ + if (--sprite->data[3] <= sprite->data[6]) + DestroySpriteAndMatrix(sprite); +} + +//Creates a sprite that moves left then right along the target. +//arg 0: Slice distance +//arg 1: Speed +static void SpriteCB_LeftRightSlice(struct Sprite *sprite) +{ + sprite->x2 = gBattleAnimArgs[0]; + sprite->data[0] = -gBattleAnimArgs[0]; //Slice distance + sprite->data[1] = gBattleAnimArgs[1]; //Slice speed + sprite->callback = SpriteCB_LeftRightSliceStep0; +} +static void SpriteCB_LeftRightSliceStep1(struct Sprite *sprite) +{ + sprite->x2 += sprite->data[1]; + if (sprite->x2 >= sprite->data[0]) + DestroyAnimSprite(sprite); +} +static void SpriteCB_LeftRightSliceStep0(struct Sprite *sprite) +{ + sprite->x2 -= sprite->data[1]; + if (sprite->x2 <= sprite->data[0]) + { + sprite->data[0] = -sprite->data[0]; + sprite->callback = SpriteCB_LeftRightSliceStep1; + } +} + +//Creates a rock that bounces between the attacker's feet. +//arg 0: initial x pixel offset +//arg 1: initial y pixel offset +//arg 2: Ignore horizontal motion if TRUE. Only bounce once. +#define sVerticalTime sprite->data[0] +#define sHorizontalTime sprite->data[1] +#define sMovingBackHorizontally sprite->data[2] +static void SpriteCB_PyroBallRockBounceStep(struct Sprite *sprite) +{ + s8 initialVerticalVelocity; + s8 initialHorizontalVelocity; + + if (sprite->y2 > 0) //Rock returned back down + { + if (gBattleAnimArgs[2] || sMovingBackHorizontally) //Finished moving from left to right + DestroyAnimSprite(sprite); + else + { + sVerticalTime = 0; + sMovingBackHorizontally = TRUE; + } + } + + initialVerticalVelocity = -6; + initialHorizontalVelocity = -1; //Starts by moving right to left + + //vi = -6 + //g = 0.25 (gravity not negative b/c go up to go closer to 0) + //h = vi*t + 0.5g*t^2 + //t = sVerticalTime + sprite->y2 = (initialVerticalVelocity * sVerticalTime + (1 * sVerticalTime * sVerticalTime) / 4); + + //x = vi*t + //vi = sprite->data[2] + //t = sHorizontalTime + if (!gBattleAnimArgs[2]) + sprite->x2 = (initialHorizontalVelocity * sHorizontalTime); + + sVerticalTime++; + + if (sMovingBackHorizontally) + sHorizontalTime--; //Move left to right + else + sHorizontalTime++; //Move right to left +} + +static void InitSpritePositionForPyroBall(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, 0); + sprite->y += 20; //Move closer to attacker's feet + + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + sprite->y += 20; //Move below the text box + +} + +static void SpriteCB_PyroBallRockBounce(struct Sprite *sprite) +{ + InitSpritePositionForPyroBall(sprite); + sprite->callback = SpriteCB_PyroBallRockBounceStep; +} +#undef sVerticalTime +#undef sHorizontalTime +#undef sMovingBackHorizontally + +//Launches a projectile from the attacker's feet at the target. +//arg 0: initial x pixel offset +//arg 1: initial y pixel offset +//arg 2: target x pixel offset +//arg 3: target y pixel offset +//arg 4: duration +//arg 5: wave amplitude +static void SpriteCB_PyroBallLaunch(struct Sprite *sprite) +{ + InitSpritePositionForPyroBall(sprite); + + if (GetBattlerSide(gBattleAnimAttacker)) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimArcTranslation(sprite); + + sprite->callback = AnimMissileArc_Step; +} + +//Throws acid at a single target. +static void SpriteCB_AcidLaunchSingleTarget(struct Sprite *sprite) +{ + s16 l1, l2; + + if (!gBattleAnimArgs[3]) + StartSpriteAnim(sprite, 2); + + InitSpritePosToAnimTarget(sprite, TRUE); + l1 = sprite->x; l2 = sprite->y; + InitSpritePosToAnimAttacker(sprite, TRUE); + if (GetBattlerSide(gBattleAnimAttacker)) + gBattleAnimArgs[4] = -gBattleAnimArgs[4]; + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = l1 + gBattleAnimArgs[4]; + sprite->data[4] = l2 + gBattleAnimArgs[5]; + sprite->data[5] = -30; + InitAnimArcTranslation(sprite); + sprite->callback = AnimAcidPoisonBubble_Step; +} + +//Causes acid to drip down a single target. +static void SpriteCB_AcidDripSingleTarget(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + + sprite->x += gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sprite->x + gBattleAnimArgs[2]; + sprite->data[4] = sprite->y + sprite->data[0]; + + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +//Causes an object to fall from the sky. +//arg 0: initial x pixel offset +//arg 1: initial y pixel offset +//arg 2: anim battler +static void SpriteCB_WaterDroplet(struct Sprite *sprite) +{ + u8 target = LoadBattleAnimTarget(2); + + if (!IsBattlerSpriteVisible(target)) + DestroyAnimSprite(sprite); + else + { + InitSpritePosToGivenTarget(sprite, target); + sprite->data[1] = sprite->y; //Target's y coord + + sprite->x2 = gBattleAnimArgs[0]; + sprite->y2 = 0; + + //Put droplet at the top of the screen + sprite->y = 15; + + sprite->callback = SpriteCB_WaterDropletDrip; + } +} +static void SpriteCB_WaterDropletDrip(struct Sprite *sprite) +{ + sprite->data[0] = 12; + StartSpriteAnim(sprite, 0); + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, SpriteCB_WaterDropletDrop); +} +static void SpriteCB_WaterDropletDrop(struct Sprite *sprite) +{ + sprite->y2 += 4; + if (sprite->y2 >= sprite->data[1]) + { + sprite->data[0] = 19; + StartSpriteAnim(sprite, 1); + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + } +} + +static void SpriteCB_AnimSpriteOnSelectedMonPos(struct Sprite *sprite) +{ + if (!sprite->data[0]) + { + u8 target = LoadBattleAnimTarget(2); + + if (!IsBattlerSpriteVisible(target)) + DestroyAnimSprite(sprite); + else + { + InitSpritePosToGivenTarget(sprite, target); + sprite->data[0]++; + } + } + else if (sprite->animEnded || sprite->affineAnimEnded) + { + DestroySpriteAndMatrix(sprite); + } +} + +static void SpriteCB_SurroundingRing(struct Sprite *sprite) +{ + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 40; + + sprite->data[0] = 13; + sprite->data[2] = sprite->x; + sprite->data[4] = sprite->y - 72; + + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +//Imitates launching a beam of light towards the sky +//arg 0: initial x pixel offset +//arg 1: initial y pixel offset +//arg 2: battler +//arg 3: duration +//arg 4: Anim num +//arg 5: affine anim start delay +static void SpriteCB_PhotonGeyserBeam(struct Sprite *sprite) +{ + u8 target = LoadBattleAnimTarget(2); + + if (!IsBattlerSpriteVisible(target)) + DestroyAnimSprite(sprite); + else + { + InitSpritePosToGivenTarget(sprite, target); + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[5]; + sprite->callback = SpriteCB_BeamUpStep; + } +} +//Animates the beam of light +static void SpriteCB_BeamUpStep(struct Sprite *sprite) +{ + if (sprite->data[1]-- == 0) + StartSpriteAffineAnim(sprite, 1); + + if (sprite->data[0]-- <= 0) + DestroySpriteAndMatrix(sprite); +} + +static void SpriteCB_CentredElectricity(struct Sprite *sprite) +{ + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); + + sprite->oam.tileNum += gBattleAnimArgs[3] * 4; + + if (gBattleAnimArgs[3] == 1) + sprite->oam.matrixNum = 8; + else if (gBattleAnimArgs[3] == 2) + sprite->oam.matrixNum = 16; + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void AnimSkyDropBallUp(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = AnimFlyBallUp_Step; + gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE; +} + +static void SpriteCB_SearingShotRock(struct Sprite *sprite) +{ + u8 target = LoadBattleAnimTarget(4); + + if (!IsBattlerSpriteVisible(target)) + { + DestroyAnimSprite(sprite); + } + else + { + InitSpritePosToGivenTarget(sprite, target); + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, AnimSpinningKickOrPunchFinish); + } +} + +static void AnimHappyHourCoinShower(struct Sprite *sprite) +{ + if (gBattleAnimArgs[3] != 0) + SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->x, &sprite->y); //coin shower on attacker + + 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); +} + +//Launches an object upwards like they were being shot from a geyser +//arg 0: null +//arg 1: initial x pixel offset +//arg 2: initial y pixel offset +static void SpriteCB_Geyser(struct Sprite *sprite) +{ + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1; + sprite->callback = AnimMudSportDirtRising; +} + +//Launches an object upwards like they were being shot from a geyser +//arg 0: null +//arg 1: initial x pixel offset +//arg 2: initial y pixel offset +static void SpriteCB_GeyserTarget(struct Sprite *sprite) +{ + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1; + sprite->callback = AnimMudSportDirtRising; +} + +// Anim Tasks Functions +#define tSpriteId data[0] +#define tTimer data[1] +#define tInitialXPos data[2] +#define tInitialYPos data[3] +#define tSide data[4] +#define tAnimLengthTime data[5] +static const s8 sHomerunEnemyHorizontalMovement[] = +{ + 3, 3, 3, 3, + 3, 3, 2, 2, + 1, 1, 1, 1, + 1, 1, 1, 1, + 0, 1, 0, 1, + 0, 1, 0, 0, + 1, 0, 0, 1, + 0, 0, 0, 1, + 0, 0, 0, 1, +}; + +static const s8 sHomerunEnemyVerticalMovement[] = +{ + -4, -4, -4, -4, + -4, -3, -3, -2, + -2, -1, -1, -1, + -1, -1, -1, -1, + 0, -1, 0, -1, + 0, -1, 0, 0, + 0, 0, -1, 0, + 0, -1, 0, 0, + -1, 0, 0, 0, +}; + +void AnimTask_TwinkleTackleLaunchStep(u8 taskId) +{ + u16 rotation; + s16 xScale, yScale; + struct Task* task = &gTasks[taskId]; + struct Sprite *sprite = &gSprites[task->tSpriteId]; + + if (task->tTimer > task->tAnimLengthTime) + { + if (task->tTimer > task->tAnimLengthTime + 5) //Wait an extra few frames so the glint can be placed on the target + { + sprite->x = task->tInitialXPos; + sprite->y = task->tInitialYPos; + ResetSpriteRotScale(task->tSpriteId); + DestroyAnimVisualTask(taskId); + } + else + ++task->tTimer; + return; + } + else if ((u16) task->tTimer < NELEMS(sHomerunEnemyHorizontalMovement)) + { + s8 movement = sHomerunEnemyHorizontalMovement[task->tTimer]; + if (task->tSide == B_SIDE_PLAYER) + movement *= -1; + sprite->x += movement; + + movement = sHomerunEnemyVerticalMovement[task->tTimer]; + if (task->tSide == B_SIDE_PLAYER) + movement *= -1; + sprite->y += movement; + } + + xScale = 0x180; + yScale = 0x180; + rotation = (task->tTimer << 4) + (task->tTimer << 3); + + xScale += rotation; + yScale += rotation; + rotation <<= 7; + + if (task->tSide == B_SIDE_OPPONENT) + rotation *= -1; + + SetSpriteRotScale(task->tSpriteId, xScale, yScale, rotation); + + if (++task->tTimer > task->tAnimLengthTime) + sprite->invisible = TRUE; +} + +//Launches the target in Twinkle Tackle +//arg 0: Anim time +void AnimTask_TwinkleTackleLaunch(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + task->tSpriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + task->tSide = GetBattlerSide(gBattleAnimTarget); + task->tAnimLengthTime = gBattleAnimArgs[0]; + task->tInitialXPos = gSprites[task->tSpriteId].x; + task->tInitialYPos = gSprites[task->tSpriteId].y; + task->tTimer = 0; + task->func = AnimTask_TwinkleTackleLaunchStep; + + PrepareBattlerSpriteForRotScale(task->tSpriteId, ST_OAM_OBJ_NORMAL); +} +#undef tSpriteId +#undef tTimer +#undef tInitialXPos +#undef tInitialYPos +#undef tSide +#undef tAnimLengthTime + +void AnimTask_GetTimeOfDay(u8 taskId) +{ + gBattleAnimArgs[0] = 0; //Daytime is default + + RtcCalcLocalTime(); + if (gLocalTime.hours >= 20 || gLocalTime.hours < 4) + gBattleAnimArgs[0] = 1; + else if (gLocalTime.hours >= 17 && gLocalTime.hours < 20) + gBattleAnimArgs[0] = 2; + + DestroyAnimVisualTask(taskId); +} + +void AnimTask_GetLycanrocForm(u8 taskId) +{ + if (GetMonData(GetIllusionMonPtr(gBattleAnimAttacker), MON_DATA_SPECIES) == SPECIES_LYCANROC_MIDNIGHT) + gBattleAnimArgs[0] = 1; + else + gBattleAnimArgs[0] = 0; + + gBattleAnimArgs[0] = 0; + DestroyAnimVisualTask(taskId); +} + +// Scales up the target mon sprite +// Used in Let's Snuggle Forever +// No args. +void AnimTask_GrowTarget(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND); + SetSpriteRotScale(spriteId, 208, 208, 0); + gTasks[taskId].data[0] = 120; + gTasks[taskId].func = AnimTask_GrowStep; +} +static void AnimTask_GrowStep(u8 taskId) +{ + if (--gTasks[taskId].data[0] == -1) + { + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + ResetSpriteRotScale(spriteId); + DestroyAnimVisualTask(taskId); + } +} + +// Uses a spotlight sprite as a light mask to illuminate the attacker. The spotlight grows and shrinks. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration of fully-opened spotlight +static void AnimOceanicOperettaSpotlight(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H); + SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V); + + sprite->data[0] = gBattleAnimArgs[2]; + InitSpritePosToAnimAttacker(sprite, FALSE); + sprite->oam.objMode = ST_OAM_OBJ_WINDOW; + sprite->invisible = TRUE; + sprite->callback = AnimFlatterSpotlight_Step; +} + +static void AnimTask_WaitAffineAnim(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + if (!RunAffineAnimFromTaskData(task)) + DestroyAnimVisualTask(taskId); +} + +void AnimTask_SquishTarget(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + + PrepareAffineAnimInTaskData(task, spriteId, sSquishTargetAffineAnimCmds); + task->func = AnimTask_WaitAffineAnim; +} + +void CoreEnforcerLoadBeamTarget(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->x; + sprite->data[2] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + + GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X_2)) / 2; + sprite->data[3] = sprite->y; + sprite->data[4] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + + GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y_PIC_OFFSET)) / 2; +} + +void AnimTask_CreateBestowItem(u8 taskId) +{ + u8 iconSpriteId = AddItemIconSprite(ANIM_TAG_ITEM_BAG, ANIM_TAG_ITEM_BAG, gLastUsedItem); + + if (iconSpriteId != MAX_SPRITES) + { + gSprites[iconSpriteId].oam.priority = 2; + gSprites[iconSpriteId].callback = AnimThrowProjectile; + ++gAnimVisualTaskCount; + } + DestroyAnimVisualTask(taskId); +} + +//Creates purple flames that surround the target. +//No args. +void AnimTask_PurpleFlamesOnTarget(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[0] = 0; + task->data[1] = 16; + task->data[9] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimTarget); + task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH) / 2) + 8; + task->data[7] = 0; + task->data[5] = GetBattlerSpriteBGPriority(gBattleAnimTarget); + task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2; + task->data[3] = 0; + task->data[4] = 16; + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); + task->data[8] = 0; + task->func = AnimTask_GrudgeFlames_Step; +} + +void AnimTask_TechnoBlast(u8 taskId) +{ + if (ItemId_GetHoldEffect(gBattleMons[gBattleAnimAttacker].item) == HOLD_EFFECT_DRIVE) + gBattleAnimArgs[0] = ItemId_GetSecondaryId(gBattleMons[gBattleAnimAttacker].item); + else + gBattleAnimArgs[0] = 0; + DestroyAnimVisualTask(taskId); +} + +// Z MOVES +//Creates a twinkle at the location the target was knocked too in Twinkle Tackle +static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite) +{ + struct Sprite* monSprite; + + if (gBattleAnimArgs[2] == ANIM_TARGET) + monSprite = &gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)]; + else + monSprite = &gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)]; + + sprite->x = monSprite->x; + sprite->y = monSprite->y; + sprite->x2 = monSprite->x2; + sprite->y2 = monSprite->y2; + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void AnimTask_PrimalReversion(u8 taskId) +{ + if (ItemId_GetId(gBattleMons[gBattleAnimAttacker].item) == ITEM_RED_ORB) + gBattleAnimArgs[0] = ItemId_GetId(gBattleMons[gBattleAnimAttacker].item); + else + gBattleAnimArgs[0] = 0; + DestroyAnimVisualTask(taskId); +} + +void AnimTask_ShellSideArm(u8 taskId) +{ + if (gBattleStruct->swapDamageCategory) + gBattleAnimArgs[0] = TRUE; + else + gBattleAnimArgs[0] = FALSE; + DestroyAnimVisualTask(taskId); +} + +void AnimTask_TerrainPulse(u8 taskId) +{ + if (IsBattlerTerrainAffected(gBattleAnimAttacker, STATUS_FIELD_TERRAIN_ANY)) + { + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + gBattleAnimArgs[0] = TYPE_ELECTRIC; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + gBattleAnimArgs[0] = TYPE_GRASS; + else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + gBattleAnimArgs[0] = TYPE_FAIRY; + else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + gBattleAnimArgs[0] = TYPE_PSYCHIC; + else //failsafe + gBattleAnimArgs[0] = 0; + } + else + { + gBattleAnimArgs[0] = 0; + } + DestroyAnimVisualTask(taskId); +} + +void AnimTask_AffectionHangedOn(u8 taskId) +{ + int side = GetBattlerSide(gBattleAnimTarget); + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + + gBattleAnimArgs[0] = GetMonFriendshipScore(&party[gBattlerPartyIndexes[gBattleAnimTarget]]); + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c index abd5d54782..f43dd6e9b0 100644 --- a/src/battle_anim_normal.c +++ b/src/battle_anim_normal.c @@ -16,14 +16,8 @@ static void AnimCirclingSparkle(struct Sprite *); static void AnimShakeMonOrBattleTerrain(struct Sprite *); static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *); static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void); -static void AnimHitSplatBasic(struct Sprite *); static void AnimHitSplatPersistent(struct Sprite *); static void AnimHitSplatHandleInvert(struct Sprite *); -static void AnimHitSplatRandom(struct Sprite *); -static void AnimHitSplatOnMonEdge(struct Sprite *); -static void AnimCrossImpact(struct Sprite *); -static void AnimFlashingHitSplat(struct Sprite *); -static void AnimFlashingHitSplat_Step(struct Sprite *); static void AnimConfusionDuck_Step(struct Sprite *); static void BlendColorCycle(u8, u8, u8); static void AnimTask_BlendColorCycleLoop(u8); @@ -34,6 +28,7 @@ static void AnimTask_BlendColorCycleByTagLoop(u8); static void AnimTask_FlashAnimTagWithColor_Step1(u8); static void AnimTask_FlashAnimTagWithColor_Step2(u8); static void AnimTask_ShakeBattleTerrain_Step(u8); +static void AnimMovePowerSwapGuardSwap(struct Sprite *); static const union AnimCmd sAnim_ConfusionDuck_0[] = { @@ -92,6 +87,63 @@ const struct SpriteTemplate gComplexPaletteBlendSpriteTemplate = .callback = AnimComplexPaletteBlend, }; +static const union AnimCmd sPowerSwapGuardSwapFrame0[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sPowerSwapGuardSwapFrame1[] = +{ + ANIMCMD_FRAME(4, 0), + ANIMCMD_END +}; + +static const union AnimCmd sPowerSwapGuardSwapFrame2[] = +{ + ANIMCMD_FRAME(8, 0), + ANIMCMD_END +}; + +static const union AnimCmd sPowerSwapGuardSwapFrame3[] = +{ + ANIMCMD_FRAME(12, 0), + ANIMCMD_END +}; + +static const union AnimCmd sPowerSwapGuardSwapFrame4[] = +{ + ANIMCMD_FRAME(16, 0), + ANIMCMD_END +}; + +static const union AnimCmd sPowerSwapGuardSwapFrame5[] = +{ + ANIMCMD_FRAME(20, 0), + ANIMCMD_END +}; + +static const union AnimCmd * const sPowerSwapGuardSwapAnimTable[] = +{ + sPowerSwapGuardSwapFrame0, + sPowerSwapGuardSwapFrame1, + sPowerSwapGuardSwapFrame2, + sPowerSwapGuardSwapFrame3, + sPowerSwapGuardSwapFrame4, + sPowerSwapGuardSwapFrame5 +}; + +const struct SpriteTemplate gPowerSwapGuardSwapSpriteTemplate = +{ + .tileTag = ANIM_TAG_COLORED_ORBS, + .paletteTag = ANIM_TAG_COLORED_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = sPowerSwapGuardSwapAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMovePowerSwapGuardSwap +}; + static const union AnimCmd sAnim_CirclingSparkle[] = { ANIMCMD_FRAME(0, 3), @@ -157,7 +209,7 @@ static const union AffineAnimCmd sAffineAnim_HitSplat_3[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_HitSplat[] = +const union AffineAnimCmd *const gAffineAnims_HitSplat[] = { sAffineAnim_HitSplat_0, sAffineAnim_HitSplat_1, @@ -172,7 +224,7 @@ const struct SpriteTemplate gBasicHitSplatSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_HitSplat, + .affineAnims = gAffineAnims_HitSplat, .callback = AnimHitSplatBasic, }; @@ -183,7 +235,7 @@ const struct SpriteTemplate gHandleInvertHitSplatSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_HitSplat, + .affineAnims = gAffineAnims_HitSplat, .callback = AnimHitSplatHandleInvert, }; @@ -194,7 +246,7 @@ const struct SpriteTemplate gWaterHitSplatSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_HitSplat, + .affineAnims = gAffineAnims_HitSplat, .callback = AnimHitSplatBasic, }; @@ -205,8 +257,8 @@ const struct SpriteTemplate gRandomPosHitSplatSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_HitSplat, - .callback = AnimHitSplatRandom, + .affineAnims = gAffineAnims_HitSplat, + .callback = SpriteCB_RandomCentredHits, }; const struct SpriteTemplate gMonEdgeHitSplatSpriteTemplate = @@ -216,7 +268,7 @@ const struct SpriteTemplate gMonEdgeHitSplatSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_HitSplat, + .affineAnims = gAffineAnims_HitSplat, .callback = AnimHitSplatOnMonEdge, }; @@ -238,7 +290,7 @@ const struct SpriteTemplate gFlashingHitSplatSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_HitSplat, + .affineAnims = gAffineAnims_HitSplat, .callback = AnimFlashingHitSplat, }; @@ -249,10 +301,43 @@ const struct SpriteTemplate gPersistHitSplatSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_HitSplat, + .affineAnims = gAffineAnims_HitSplat, .callback = AnimHitSplatPersistent, }; +static void AnimMovePowerSwapGuardSwapWait(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroyAnimSprite(sprite); +} + +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: orb type (0..5) - color and size +// arg 3: from user to target / target to user +// arg 4: wave period +// arg 5: wave amplitude +static void AnimMovePowerSwapGuardSwap(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + if(gBattleAnimArgs[3] == 0) + { + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); + } + else + { + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); + } + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimArcTranslation(sprite); + sprite->callback = AnimMovePowerSwapGuardSwapWait; +} + // Moves a spinning duck around the mon's head. // arg 0: initial x pixel offset // arg 1: initial y pixel offset @@ -304,7 +389,7 @@ static void AnimConfusionDuck_Step(struct Sprite *sprite) // arg 4: blend color static void AnimSimplePaletteBlend(struct Sprite *sprite) { - u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gBattleAnimArgs[0]); + u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]); BeginNormalPaletteFade(selectedPalettes, gBattleAnimArgs[1], gBattleAnimArgs[2], gBattleAnimArgs[3], gBattleAnimArgs[4]); sprite->invisible = TRUE; sprite->callback = AnimSimplePaletteBlend_Step; @@ -312,23 +397,23 @@ static void AnimSimplePaletteBlend(struct Sprite *sprite) // Unpacks a bitfield and returns a bitmask of its selected palettes. // Bits 0-6 of the selector parameter result in the following palettes being selected: -// 0: battle background palettes (BG palettes 1, 2, and 3) -// 1: gBattleAnimAttacker OBJ palette -// 2: gBattleAnimTarget OBJ palette -// 3: gBattleAnimAttacker partner OBJ palette -// 4: gBattleAnimTarget partner OBJ palette -// 5: BG palette 4 -// 6: BG palette 5 -u32 UnpackSelectedBattleBgPalettes(s16 selector) +// 0: F_PAL_BG, battle background palettes (BG palettes 1, 2, and 3) +// 1: F_PAL_ATTACKER, gBattleAnimAttacker OBJ palette +// 2: F_PAL_TARGET, gBattleAnimTarget OBJ palette +// 3: F_PAL_ATK_PARTNER, gBattleAnimAttacker partner OBJ palette +// 4: F_PAL_DEF_PARTNER, gBattleAnimTarget partner OBJ palette +// 5: F_PAL_ANIM_1, BG palette 8 (or 14, if in Contest) +// 6: F_PAL_ANIM_2, BG palette 9 +u32 UnpackSelectedBattlePalettes(s16 selector) { - u8 battleBackground = selector & 1; - u8 attacker = (selector >> 1) & 1; - u8 target = (selector >> 2) & 1; - u8 attackerPartner = (selector >> 3) & 1; - u8 targetPartner = (selector >> 4) & 1; - u8 arg5 = (selector >> 5) & 1; - u8 arg6 = (selector >> 6) & 1; - return GetBattleBgPalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, arg5, arg6); + bool8 battleBackground = selector & 1; + bool8 attacker = (selector >> 1) & 1; + bool8 target = (selector >> 2) & 1; + bool8 attackerPartner = (selector >> 3) & 1; + bool8 targetPartner = (selector >> 4) & 1; + bool8 anim1 = (selector >> 5) & 1; + bool8 anim2 = (selector >> 6) & 1; + return GetBattlePalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, anim1, anim2); } static void AnimSimplePaletteBlend_Step(struct Sprite *sprite) @@ -350,7 +435,7 @@ static void AnimComplexPaletteBlend(struct Sprite *sprite) sprite->data[6] = gBattleAnimArgs[6]; sprite->data[7] = gBattleAnimArgs[0]; - selectedPalettes = UnpackSelectedBattleBgPalettes(sprite->data[7]); + selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); BlendPalettes(selectedPalettes, gBattleAnimArgs[4], gBattleAnimArgs[3]); sprite->invisible = TRUE; sprite->callback = AnimComplexPaletteBlend_Step1; @@ -375,7 +460,7 @@ static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite) return; } - selectedPalettes = UnpackSelectedBattleBgPalettes(sprite->data[7]); + selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); if (sprite->data[1] & 0x100) BlendPalettes(selectedPalettes, sprite->data[4], sprite->data[3]); else @@ -392,7 +477,7 @@ static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite) if (!gPaletteFade.active) { - selectedPalettes = UnpackSelectedBattleBgPalettes(sprite->data[7]); + selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); BlendPalettes(selectedPalettes, 0, 0); DestroyAnimSprite(sprite); } @@ -409,7 +494,7 @@ static void AnimCirclingSparkle(struct Sprite *sprite) sprite->data[4] = 112; sprite->data[5] = 0; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteInGrowingCircleOverDuration; + sprite->callback = TranslateSpriteInGrowingCircle; sprite->callback(sprite); } @@ -425,7 +510,7 @@ static void AnimCirclingSparkle(struct Sprite *sprite) #define tPalSelectorHi data[9] #define tPalSelectorLo data[10] -// Blends mon/screen to designated color or back alternately tNumBlends times +// Blends mon/screen to designated color or back alternately tNumBlends times // Many uses of this task only set a tNumBlends of 2, which has the effect of blending to a color and back once void AnimTask_BlendColorCycle(u8 taskId) { @@ -442,7 +527,7 @@ void AnimTask_BlendColorCycle(u8 taskId) static void BlendColorCycle(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount) { - u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gTasks[taskId].tPalSelector); + u32 selectedPalettes = UnpackSelectedBattlePalettes(gTasks[taskId].tPalSelector); BeginNormalPaletteFade( selectedPalettes, gTasks[taskId].tDelay, @@ -717,66 +802,83 @@ static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId) void AnimTask_InvertScreenColor(u8 taskId) { u32 selectedPalettes = 0; - u8 attackerBattler = gBattleAnimAttacker; - u8 targetBattler = gBattleAnimTarget; - if (gBattleAnimArgs[0] & 0x100) - selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); - - if (gBattleAnimArgs[1] & 0x100) - selectedPalettes |= (0x10000 << attackerBattler); - - if (gBattleAnimArgs[2] & 0x100) - selectedPalettes |= (0x10000 << targetBattler); + if (gBattleAnimArgs[0] & 0x1) + selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); + if (gBattleAnimArgs[0] & 0x2) + selectedPalettes |= (0x10000 << gBattleAnimAttacker); + if (gBattleAnimArgs[0] & 0x4) + selectedPalettes |= (0x10000 << gBattleAnimTarget); + if (gBattleAnimArgs[0] & 0x8 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimTarget))) + selectedPalettes |= (0x10000 << BATTLE_PARTNER(gBattleAnimTarget)); + if (gBattleAnimArgs[0] & 0x10 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimAttacker))) + selectedPalettes |= (0x10000 << BATTLE_PARTNER(gBattleAnimAttacker)); InvertPlttBuffer(selectedPalettes); DestroyAnimVisualTask(taskId); } -void UnusedAnimTask_8115F94(u8 taskId) +// Unused +#define tTimer data[0] +#define tLength data[1] +#define tFlagsScenery data[2] +#define tFlagsAttacker data[3] +#define tFlagsTarget data[4] +#define tColorR data[5] +#define tColorG data[6] +#define tColorB data[7] +void AnimTask_TintPalettes(u8 taskId) { u8 attackerBattler; u8 targetBattler; u8 paletteIndex; u32 selectedPalettes = 0; - if (gTasks[taskId].data[0] == 0) + if (gTasks[taskId].tTimer == 0) { - gTasks[taskId].data[2] = gBattleAnimArgs[0]; - gTasks[taskId].data[3] = gBattleAnimArgs[1]; - gTasks[taskId].data[4] = gBattleAnimArgs[2]; - gTasks[taskId].data[1] = gBattleAnimArgs[3]; - gTasks[taskId].data[5] = gBattleAnimArgs[4]; - gTasks[taskId].data[6] = gBattleAnimArgs[5]; - gTasks[taskId].data[7] = gBattleAnimArgs[6]; + gTasks[taskId].tFlagsScenery = gBattleAnimArgs[0]; + gTasks[taskId].tFlagsAttacker = gBattleAnimArgs[1]; + gTasks[taskId].tFlagsTarget = gBattleAnimArgs[2]; + gTasks[taskId].tLength = gBattleAnimArgs[3]; + gTasks[taskId].tColorR = gBattleAnimArgs[4]; + gTasks[taskId].tColorG = gBattleAnimArgs[5]; + gTasks[taskId].tColorB = gBattleAnimArgs[6]; } - gTasks[taskId].data[0]++; + gTasks[taskId].tTimer++; attackerBattler = gBattleAnimAttacker; targetBattler = gBattleAnimTarget; - if (gTasks[taskId].data[2] & 0x100) - selectedPalettes = 0x0000FFFF; + if (gTasks[taskId].tFlagsScenery & (1 << 8)) + selectedPalettes = PALETTES_BG; - if (gTasks[taskId].data[2] & 0x1) + if (gTasks[taskId].tFlagsScenery & 1) { paletteIndex = IndexOfSpritePaletteTag(gSprites[gHealthboxSpriteIds[attackerBattler]].template->paletteTag); selectedPalettes |= (1 << paletteIndex) << 16; } - - if (gTasks[taskId].data[3] & 0x100) + + if (gTasks[taskId].tFlagsAttacker & (1 << 8)) selectedPalettes |= (1 << attackerBattler) << 16; - if (gTasks[taskId].data[4] & 0x100) + if (gTasks[taskId].tFlagsTarget & (1 << 8)) selectedPalettes |= (1 << targetBattler) << 16; - TintPlttBuffer(selectedPalettes, gTasks[taskId].data[5], gTasks[taskId].data[6], gTasks[taskId].data[7]); - if (gTasks[taskId].data[0] == gTasks[taskId].data[1]) + TintPlttBuffer(selectedPalettes, gTasks[taskId].tColorR, gTasks[taskId].tColorG, gTasks[taskId].tColorB); + if (gTasks[taskId].tTimer == gTasks[taskId].tLength) { UnfadePlttBuffer(selectedPalettes); DestroyAnimVisualTask(taskId); } } +#undef tTimer +#undef tLength +#undef tFlagsScenery +#undef tFlagsAttacker +#undef tFlagsTarget +#undef tColorR +#undef tColorG +#undef tColorB static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite) { @@ -924,11 +1026,11 @@ static void AnimTask_ShakeBattleTerrain_Step(u8 taskId) #undef tTimer #undef tShakeDelay -static void AnimHitSplatBasic(struct Sprite *sprite) +void AnimHitSplatBasic(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); if (gBattleAnimArgs[2] == ANIM_ATTACKER) - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); @@ -941,7 +1043,7 @@ static void AnimHitSplatPersistent(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); if (gBattleAnimArgs[2] == ANIM_ATTACKER) - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); @@ -956,20 +1058,18 @@ static void AnimHitSplatHandleInvert(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER && !IsContest()) gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - + AnimHitSplatBasic(sprite); } -static void AnimHitSplatRandom(struct Sprite *sprite) +void AnimHitSplatRandom(struct Sprite *sprite) { if (gBattleAnimArgs[1] == -1) gBattleAnimArgs[1] = Random2() & 3; + if (!InitSpritePosToAnimBattler(gBattleAnimArgs[0], sprite, FALSE)) + return; StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]); - if (gBattleAnimArgs[0] == ANIM_ATTACKER) - InitSpritePosToAnimAttacker(sprite, 0); - else - InitSpritePosToAnimTarget(sprite, FALSE); sprite->x2 += (Random2() % 48) - 24; sprite->y2 += (Random2() % 24) - 12; @@ -978,7 +1078,7 @@ static void AnimHitSplatRandom(struct Sprite *sprite) sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } -static void AnimHitSplatOnMonEdge(struct Sprite *sprite) +void AnimHitSplatOnMonEdge(struct Sprite *sprite) { sprite->data[0] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); sprite->x = gSprites[sprite->data[0]].x + gSprites[sprite->data[0]].x2; @@ -990,10 +1090,10 @@ static void AnimHitSplatOnMonEdge(struct Sprite *sprite) sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } -static void AnimCrossImpact(struct Sprite *sprite) +void AnimCrossImpact(struct Sprite *sprite) { if (gBattleAnimArgs[2] == ANIM_ATTACKER) - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); @@ -1002,18 +1102,18 @@ static void AnimCrossImpact(struct Sprite *sprite) sprite->callback = WaitAnimForDuration; } -static void AnimFlashingHitSplat(struct Sprite *sprite) +void AnimFlashingHitSplat(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); if (gBattleAnimArgs[2] == ANIM_ATTACKER) - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); sprite->callback = AnimFlashingHitSplat_Step; } -static void AnimFlashingHitSplat_Step(struct Sprite *sprite) +void AnimFlashingHitSplat_Step(struct Sprite *sprite) { sprite->invisible ^= 1; if (sprite->data[0]++ > 12) diff --git a/src/battle_anim_poison.c b/src/battle_anim_poison.c index 6dedbd9555..8905f5c475 100644 --- a/src/battle_anim_poison.c +++ b/src/battle_anim_poison.c @@ -6,12 +6,14 @@ static void AnimSludgeProjectile(struct Sprite *); static void AnimSludgeProjectile_Step(struct Sprite *); static void AnimAcidPoisonBubble(struct Sprite *); -static void AnimAcidPoisonBubble_Step(struct Sprite *); -static void AnimSludgeBombHitParticle(struct Sprite *); static void AnimSludgeBombHitParticle_Step(struct Sprite *); static void AnimAcidPoisonDroplet(struct Sprite *); -static void AnimBubbleEffect(struct Sprite *); static void AnimBubbleEffect_Step(struct Sprite *); +static void AnimSuckerPunchStep(struct Sprite *sprite); +static void AnimSuckerPunch(struct Sprite *sprite); +static void AnimGunkShotParticlesStep(struct Sprite *sprite); +static void AnimGunkShotParticles(struct Sprite *sprite); +static void AnimGunkShotImpact(struct Sprite *sprite); static const union AnimCmd sAnim_ToxicBubble[] = { @@ -56,12 +58,12 @@ static const union AnimCmd sAnim_SludgeBombHit[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_PoisonProjectile[] = +const union AnimCmd *const gAnims_PoisonProjectile[] = { sAnim_PoisonProjectile, }; -static const union AnimCmd *const sAnims_AcidPoisonDroplet[] = +const union AnimCmd *const gAnims_AcidPoisonDroplet[] = { sAnim_AcidPoisonDroplet, }; @@ -85,7 +87,7 @@ static const union AffineAnimCmd sAffineAnim_SludgeBombHit[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_PoisonProjectile[] = +const union AffineAnimCmd *const gAffineAnims_PoisonProjectile[] = { sAffineAnim_PoisonProjectile, }; @@ -100,9 +102,9 @@ const struct SpriteTemplate gSludgeProjectileSpriteTemplate = .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, .oam = &gOamData_AffineDouble_ObjNormal_16x16, - .anims = sAnims_PoisonProjectile, + .anims = gAnims_PoisonProjectile, .images = NULL, - .affineAnims = sAffineAnims_PoisonProjectile, + .affineAnims = gAffineAnims_PoisonProjectile, .callback = AnimSludgeProjectile, }; @@ -111,9 +113,9 @@ const struct SpriteTemplate gAcidPoisonBubbleSpriteTemplate = .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, .oam = &gOamData_AffineDouble_ObjNormal_16x16, - .anims = sAnims_PoisonProjectile, + .anims = gAnims_PoisonProjectile, .images = NULL, - .affineAnims = sAffineAnims_PoisonProjectile, + .affineAnims = gAffineAnims_PoisonProjectile, .callback = AnimAcidPoisonBubble, }; @@ -145,7 +147,7 @@ const struct SpriteTemplate gAcidPoisonDropletSpriteTemplate = .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, .oam = &gOamData_AffineDouble_ObjNormal_16x16, - .anims = sAnims_AcidPoisonDroplet, + .anims = gAnims_AcidPoisonDroplet, .images = NULL, .affineAnims = gAffineAnims_Droplet, .callback = AnimAcidPoisonDroplet, @@ -158,7 +160,7 @@ static const union AffineAnimCmd sAffineAnim_Bubble[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_Bubble[] = +const union AffineAnimCmd *const gAffineAnims_Bubble[] = { sAffineAnim_Bubble, }; @@ -168,9 +170,9 @@ const struct SpriteTemplate gPoisonBubbleSpriteTemplate = .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, .oam = &gOamData_AffineNormal_ObjNormal_16x16, - .anims = sAnims_PoisonProjectile, + .anims = gAnims_PoisonProjectile, .images = NULL, - .affineAnims = sAffineAnims_Bubble, + .affineAnims = gAffineAnims_Bubble, .callback = AnimBubbleEffect, }; @@ -181,20 +183,231 @@ const struct SpriteTemplate gWaterBubbleSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_16x16, .anims = gAnims_WaterBubble, .images = NULL, - .affineAnims = sAffineAnims_Bubble, + .affineAnims = gAffineAnims_Bubble, .callback = AnimBubbleEffect, }; +const struct SpriteTemplate gGreenPoisonDrip = +{ + .tileTag = ANIM_TAG_GREEN_POISON_BUBBLE, + .paletteTag = ANIM_TAG_GREEN_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gAnims_AcidPoisonDroplet, + .images = NULL, + .affineAnims = gAffineAnims_Droplet, + .callback = AnimAcidPoisonDroplet, +}; + +const struct SpriteTemplate gGreenPoisonBubble = +{ + .tileTag = ANIM_TAG_GREEN_POISON_BUBBLE, + .paletteTag = ANIM_TAG_GREEN_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gAffineAnims_PoisonProjectile, + .callback = AnimAcidPoisonBubble, +}; + +const union AnimCmd gSuckerPunchAnimCmd[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(0, 3, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSuckerPunchAnim[] = +{ + gSuckerPunchAnimCmd, +}; + +const union AnimCmd gGunkShotParticlesAnimCmd[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(8, 1), + ANIMCMD_FRAME(12, 1), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gGunkShotParticlesAnims[] = +{ + gGunkShotParticlesAnimCmd, +}; + +const union AffineAnimCmd gSuckerPunchImpactAffineAnimCmd_1[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSuckerPunchImpactAffineAnimCmd_2[] = +{ + AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSuckerPunchImpactAffineAnimCmd_3[] = +{ + AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSuckerPunchImpactAffineAnimCmd_4[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSuckerPunchImpactAffineAnim[] = +{ + gSuckerPunchImpactAffineAnimCmd_1, + gSuckerPunchImpactAffineAnimCmd_2, + gSuckerPunchImpactAffineAnimCmd_3, + gSuckerPunchImpactAffineAnimCmd_4, +}; + +const struct SpriteTemplate gSuckerPunchSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_JAB, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gSuckerPunchAnim, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSuckerPunch, +}; + +const struct SpriteTemplate gGunkShoParticlesSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjBlend_16x16, + .anims = gGunkShotParticlesAnims, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGunkShotParticles, +}; + +const struct SpriteTemplate gGunkShotImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_IMPACT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSuckerPunchImpactAffineAnim, + .callback = AnimGunkShotImpact, +}; + +static void AnimGunkShotImpact(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, 1); + else + InitSpritePosToAnimTarget(sprite, TRUE); + + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void AnimGunkShotParticles(struct Sprite *sprite) +{ + u16 retArg; + + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[0] = 30; + sprite->data[1] = sprite->x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[3] = sprite->y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + InitAnimLinearTranslation(sprite); + sprite->data[5] = 0xD200 / sprite->data[0]; + sprite->data[7] = gBattleAnimArgs[3]; + retArg = gBattleAnimArgs[ARG_RET_ID]; + if (gBattleAnimArgs[ARG_RET_ID] > 127) + { + sprite->data[6] = (retArg - 127) * 256; + sprite->data[7] = -sprite->data[7]; + } + else + { + sprite->data[6] = retArg * 256; + } + sprite->callback = AnimGunkShotParticlesStep; + sprite->callback(sprite); +} + +static void AnimGunkShotParticlesStep(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + DestroyAnimSprite(sprite); + sprite->y2 += Sin(sprite->data[6] >> 8, sprite->data[7]); + if ((sprite->data[6] + sprite->data[5]) >> 8 > 127) + { + sprite->data[6] = 0; + sprite->data[7] = -sprite->data[7]; + } + else + { + sprite->data[6] += sprite->data[5]; + } +} + +static void AnimSuckerPunch(struct Sprite *sprite) +{ + if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT) + gBattleAnimArgs[0] *= -1; + + InitSpritePosToAnimTarget(sprite, TRUE); + + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->x; + sprite->data[2] = sprite->x + gBattleAnimArgs[2]; + sprite->data[3] = sprite->y; + sprite->data[4] = sprite->y; + + InitAnimLinearTranslation(sprite); + + sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[6] = gBattleAnimArgs[4]; + sprite->data[7] = 0; + + sprite->callback = AnimSuckerPunchStep; +} + +static void AnimSuckerPunchStep(struct Sprite *sprite) +{ + if (!AnimTranslateLinear(sprite)) + { + sprite->y2 += Sin(sprite->data[7] >> 8, sprite->data[5]); + sprite->data[7] += sprite->data[6]; + } + else + { + DestroyAnimSprite(sprite); + } +} + static void AnimSludgeProjectile(struct Sprite *sprite) { if (!gBattleAnimArgs[3]) StartSpriteAnim(sprite, 2); - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[5] = -30; InitAnimArcTranslation(sprite); @@ -210,12 +423,15 @@ static void AnimSludgeProjectile_Step(struct Sprite *sprite) static void AnimAcidPoisonBubble(struct Sprite *sprite) { - s16 l1, l2; + s16 l1 = 0, l2 = 0; if (!gBattleAnimArgs[3]) StartSpriteAnim(sprite, 2); - InitSpritePosToAnimAttacker(sprite, 1); - SetAverageBattlerPositions(gBattleAnimTarget, 1, &l1, &l2); + InitSpritePosToAnimAttacker(sprite, TRUE); + if (gBattleAnimArgs[6]) + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &l1, &l2); + else + l1 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2), l2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); if (GetBattlerSide(gBattleAnimAttacker)) gBattleAnimArgs[4] = -gBattleAnimArgs[4]; @@ -230,13 +446,13 @@ static void AnimAcidPoisonBubble(struct Sprite *sprite) sprite->callback = AnimAcidPoisonBubble_Step; } -static void AnimAcidPoisonBubble_Step(struct Sprite *sprite) +void AnimAcidPoisonBubble_Step(struct Sprite *sprite) { if (TranslateAnimHorizontalArc(sprite)) DestroyAnimSprite(sprite); } -static void AnimSludgeBombHitParticle(struct Sprite *sprite) +void AnimSludgeBombHitParticle(struct Sprite *sprite) { sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = sprite->x; @@ -265,7 +481,8 @@ static void AnimSludgeBombHitParticle_Step(struct Sprite *sprite) static void AnimAcidPoisonDroplet(struct Sprite *sprite) { - SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y); + if (gBattleAnimArgs[5]) + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; @@ -287,7 +504,7 @@ static void AnimAcidPoisonDroplet(struct Sprite *sprite) // arg 0: initial x pixel offset // arg 1: initial y pixel offset // arg 2: 0 = single-target, 1 = multi-target -static void AnimBubbleEffect(struct Sprite *sprite) +void AnimBubbleEffect(struct Sprite *sprite) { if (!gBattleAnimArgs[2]) { diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index 6c81467dcb..c96ae31756 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -21,13 +21,14 @@ static void AnimQuestionMark_Step1(struct Sprite *); static void AnimQuestionMark_Step2(struct Sprite *); static void AnimRedX(struct Sprite *); static void AnimSkillSwapOrb(struct Sprite *); -static void AnimPsychoBoost(struct Sprite *); static void AnimTask_MeditateStretchAttacker_Step(u8); static void AnimTask_Teleport_Step(u8); static void AnimTask_ImprisonOrbs_Step(u8); static void AnimTask_SkillSwap_Step(u8); static void AnimTask_ExtrasensoryDistortion_Step(u8); static void AnimTask_TransparentCloneGrowAndShrink_Step(u8); +static void AnimateZenHeadbutt(struct Sprite *sprite); +static void AnimPsychoCut(struct Sprite *sprite); static const union AffineAnimCmd sAffineAnim_PsychUpSpiral[] = { @@ -365,7 +366,7 @@ static const union AffineAnimCmd sAffineAnim_LusterPurgeCircle[] = AFFINEANIMCMD_END_ALT(1), }; -static const union AffineAnimCmd *const sAffineAnims_LusterPurgeCircle[] = +const union AffineAnimCmd *const gAffineAnims_LusterPurgeCircle[] = { sAffineAnim_LusterPurgeCircle, }; @@ -377,7 +378,7 @@ const struct SpriteTemplate gLusterPurgeCircleSpriteTemplate = .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_LusterPurgeCircle, + .affineAnims = gAffineAnims_LusterPurgeCircle, .callback = AnimSpriteOnMonPos, }; @@ -402,7 +403,7 @@ static const union AffineAnimCmd sAffineAnim_PsychoBoostOrb_1[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_PsychoBoostOrb[] = +const union AffineAnimCmd *const gAffineAnims_PsychoBoostOrb[] = { sAffineAnim_PsychoBoostOrb_0, sAffineAnim_PsychoBoostOrb_1, @@ -415,10 +416,126 @@ const struct SpriteTemplate gPsychoBoostOrbSpriteTemplate = .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_PsychoBoostOrb, + .affineAnims = gAffineAnims_PsychoBoostOrb, .callback = AnimPsychoBoost, }; +const union AffineAnimCmd gZenHeadbuttAffineAnimCmd[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 18), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 8), + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 8), + AFFINEANIMCMD_LOOP(5), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gZenHeadbuttAffineAnims[] = +{ + gZenHeadbuttAffineAnimCmd, +}; + +const struct SpriteTemplate gZenHeadbuttSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_IMPACT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gZenHeadbuttAffineAnims, + .callback = AnimateZenHeadbutt, +}; + +const struct SpriteTemplate gPsychoCutSpiralSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRAL, + .paletteTag = ANIM_TAG_PSYCHO_CUT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sAffineAnims_PsychUpSpiral, + .callback = AnimSpriteOnMonPos, +}; + +const struct SpriteTemplate gPsychoCutSpriteTemplate = +{ + .tileTag = ANIM_TAG_PSYCHO_CUT, + .paletteTag = ANIM_TAG_PSYCHO_CUT, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPsychoCut, +}; + +static void AnimPsychoCut(struct Sprite *sprite) +{ + s16 lVarX, lVarY; + u16 rot; + + if (IsContest()) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + else + { + if (GetBattlerSide(gBattleAnimAttacker)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + } + + if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + { + if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT + || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT) + { + s16 temp1, temp2; + + temp1 = gBattleAnimArgs[2]; + gBattleAnimArgs[2] = -temp1; + + temp2 = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -temp2; + } + } + + InitSpritePosToAnimAttacker(sprite, 1); + + lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; + lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + rot = ArcTan2Neg(lVarX - sprite->x, lVarY - sprite->y); + rot += 0xC000; + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot); + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = lVarX; + sprite->data[4] = lVarY; + + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void AnimateZenHeadbutt(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 18; + } + else + { + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18; + } + + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} + // For the rectangular wall sprite used by Reflect, Mirror Coat, etc static void AnimDefensiveWall(struct Sprite *sprite) { @@ -493,7 +610,7 @@ static void AnimDefensiveWall_Step1(struct Sprite *sprite) if (IsBattlerSpriteVisible(battler)) gSprites[gBattlerSpriteIds[battler]].invisible = TRUE; - + battler = BATTLE_PARTNER(battler); if (IsBattlerSpriteVisible(battler)) gSprites[gBattlerSpriteIds[battler]].invisible = TRUE; @@ -583,9 +700,9 @@ static void AnimWallSparkle(struct Sprite *sprite) { if (sprite->data[0] == 0) { - int arg3 = gBattleAnimArgs[3]; + bool32 ignoreOffsets = gBattleAnimArgs[3]; bool8 respectMonPicOffsets = FALSE; - if (arg3 == 0) + if (!ignoreOffsets) respectMonPicOffsets = TRUE; if (!IsContest() && IsDoubleBattle()) @@ -650,8 +767,8 @@ static void AnimQuestionMark(struct Sprite *sprite) if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) x = -x; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + x; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + y; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + x; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + y; if (sprite->y < 16) sprite->y = 16; @@ -818,7 +935,7 @@ static void AnimTask_ImprisonOrbs_Step(u8 taskId) { for (i = 8; i < 13; i++) { - if (task->data[i] != 64) + if (task->data[i] != MAX_SPRITES) DestroySprite(&gSprites[task->data[i]]); } @@ -957,7 +1074,7 @@ void AnimTask_ExtrasensoryDistortion(u8 taskId) u8 yOffset; struct ScanlineEffectParams scanlineParams; struct Task *task = &gTasks[taskId]; - + yOffset = GetBattlerYCoordWithElevation(gBattleAnimTarget); task->data[14] = yOffset - 32; @@ -997,12 +1114,10 @@ void AnimTask_ExtrasensoryDistortion(u8 taskId) scanlineParams.dmaDest = ®_BG2HOFS; } - i = task->data[14]; - while (i <= task->data[14] + 64) + for (i = task->data[14]; i <= task->data[14] + 64; i++) { gScanlineEffectRegBuffers[0][i] = task->data[10]; gScanlineEffectRegBuffers[1][i] = task->data[10]; - i++; } scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; @@ -1056,7 +1171,7 @@ void AnimTask_TransparentCloneGrowAndShrink(u8 taskId) s16 spriteId; s16 matrixNum; struct Task *task = &gTasks[taskId]; - + matrixNum = AllocOamMatrix(); if (matrixNum == 0xFF) { @@ -1108,7 +1223,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId) task->data[0]++; break; case 2: - obj_delete_but_dont_free_vram(&gSprites[task->data[15]]); + DestroySpriteWithActiveSheet(&gSprites[task->data[15]]); task->data[0]++; break; case 3: @@ -1118,7 +1233,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId) } } -static void AnimPsychoBoost(struct Sprite *sprite) +void AnimPsychoBoost(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -1137,7 +1252,7 @@ static void AnimPsychoBoost(struct Sprite *sprite) case 1: if (sprite->affineAnimEnded) { - PlaySE12WithPanning(SE_M_TELEPORT, BattleAnimAdjustPanning(-64)); + PlaySE12WithPanning(SE_M_TELEPORT, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER)); ChangeSpriteAffineAnim(sprite, 1); sprite->data[0]++; } diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index 7f292d5961..e1a90b1948 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -9,11 +9,6 @@ #include "constants/rgb.h" #include "constants/songs.h" -static void AnimFallingRock(struct Sprite *); -static void AnimFallingRock_Step(struct Sprite *); -static void AnimRockFragment(struct Sprite *); -static void AnimFlyingSandCrescent(struct Sprite *); -static void AnimRaiseSprite(struct Sprite *); static void AnimTask_Rollout_Step(u8 taskId); static void AnimRolloutParticle(struct Sprite *); static void AnimRockTomb(struct Sprite *); @@ -21,10 +16,12 @@ static void AnimRockTomb_Step(struct Sprite *sprite); static void AnimRockBlastRock(struct Sprite *); static void AnimRockScatter(struct Sprite *); static void AnimRockScatter_Step(struct Sprite *sprite); -static void AnimParticleInVortex(struct Sprite *); static void AnimParticleInVortex_Step(struct Sprite *sprite); static void AnimTask_LoadSandstormBackground_Step(u8 taskId); static void CreateRolloutDirtSprite(struct Task *task); +static void AnimStealthRockStep2(struct Sprite *sprite); +static void AnimStealthRockStep(struct Sprite *sprite); +static void AnimStealthRock(struct Sprite *sprite); static u8 GetRolloutCounter(void); static const union AnimCmd sAnim_FlyingRock_0[] = @@ -45,7 +42,7 @@ static const union AnimCmd sAnim_FlyingRock_2[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_FlyingRock[] = +const union AnimCmd *const gAnims_FlyingRock[] = { sAnim_FlyingRock_0, sAnim_FlyingRock_1, @@ -57,7 +54,7 @@ const struct SpriteTemplate gFallingRockSpriteTemplate = .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_FlyingRock, + .anims = gAnims_FlyingRock, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimFallingRock, @@ -68,7 +65,7 @@ const struct SpriteTemplate gRockFragmentSpriteTemplate = .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_FlyingRock, + .anims = gAnims_FlyingRock, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimRockFragment, @@ -93,7 +90,7 @@ static const union AffineAnimCmd sAffineAnim_Whirlpool[] = AFFINEANIMCMD_JUMP(1), }; -static const union AffineAnimCmd *const sAffineAnims_Whirlpool[] = +const union AffineAnimCmd *const gAffineAnims_Whirlpool[] = { sAffineAnim_Whirlpool, }; @@ -105,7 +102,7 @@ const struct SpriteTemplate gWhirlpoolSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_16x16, .anims = gAnims_WaterMudOrb, .images = NULL, - .affineAnims = sAffineAnims_Whirlpool, + .affineAnims = gAffineAnims_Whirlpool, .callback = AnimParticleInVortex, }; @@ -244,7 +241,7 @@ static const union AffineAnimCmd sAffineAnim_BasicRock_1[] = AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd *const sAffineAnims_BasicRock[] = +const union AffineAnimCmd *const gAffineAnims_BasicRock[] = { sAffineAnim_BasicRock_0, sAffineAnim_BasicRock_1, @@ -257,7 +254,7 @@ const struct SpriteTemplate gRockBlastRockSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = sAnims_BasicRock, .images = NULL, - .affineAnims = sAffineAnims_BasicRock, + .affineAnims = gAffineAnims_BasicRock, .callback = AnimRockBlastRock, }; @@ -268,7 +265,7 @@ const struct SpriteTemplate gRockScatterSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = sAnims_BasicRock, .images = NULL, - .affineAnims = sAffineAnims_BasicRock, + .affineAnims = gAffineAnims_BasicRock, .callback = AnimRockScatter, }; @@ -279,7 +276,7 @@ const struct SpriteTemplate gTwisterRockSpriteTemplate = .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = &sAnims_BasicRock[4], .images = NULL, - .affineAnims = sAffineAnims_BasicRock, + .affineAnims = gAffineAnims_BasicRock, .callback = AnimMoveTwisterParticle, }; @@ -290,14 +287,113 @@ const struct SpriteTemplate gWeatherBallRockDownSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = &sAnims_BasicRock[2], .images = NULL, - .affineAnims = sAffineAnims_BasicRock, + .affineAnims = gAffineAnims_BasicRock, .callback = AnimWeatherBallDown, }; -static void AnimFallingRock(struct Sprite *sprite) +const struct SpriteTemplate gStoneEdgeSpriteTemplate = +{ + .tileTag = ANIM_TAG_STONE_EDGE, + .paletteTag = ANIM_TAG_STONE_EDGE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_BasicFire, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex, +}; + +const struct SpriteTemplate gStealthRockSpriteTemplate = +{ + .tileTag = ANIM_TAG_STEALTH_ROCK, + .paletteTag = ANIM_TAG_STEALTH_ROCK, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimStealthRock, +}; + +static const union AffineAnimCmd sSpriteAffineAnim_CrushGripHandEnemyAttack[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 96, 1), //180 degree turn + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd sSpriteAffineAnim_DoNothing[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0, 1), //Do nothing + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_CrushGripHand[] = +{ + sSpriteAffineAnim_DoNothing, + sSpriteAffineAnim_CrushGripHandEnemyAttack, +}; +const struct SpriteTemplate gCrushGripHandTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE, + .paletteTag = ANIM_TAG_ACCUPRESSURE, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = sAnims_BasicRock, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_CrushGripHand, + .callback = AnimRockBlastRock +}; + +const struct SpriteTemplate gSeedFlareGreenWavesTemplate = +{ + .tileTag = ANIM_TAG_FLYING_DIRT, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFlyingSandCrescent +}; + +static void AnimStealthRock(struct Sprite *sprite) +{ + u16 x; + u16 y; + + InitSpritePosToAnimAttacker(sprite, TRUE); + SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &x, &y); + + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = x + gBattleAnimArgs[2]; + sprite->data[4] = y + gBattleAnimArgs[3]; + sprite->data[5] = -50; + + InitAnimArcTranslation(sprite); + sprite->callback = AnimStealthRockStep; +} + +static void AnimStealthRockStep(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + { + sprite->data[0] = 30; + sprite->data[1] = 0; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, AnimStealthRockStep2); + } +} + +static void AnimStealthRockStep2(struct Sprite *sprite) +{ + if (sprite->data[1] & 1) + sprite->invisible ^= 1; + + if (++sprite->data[1] == 16) + DestroyAnimSprite(sprite); +} + +void AnimFallingRock(struct Sprite *sprite) { if (gBattleAnimArgs[3] != 0) - SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->x, &sprite->y); + SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y); sprite->x += gBattleAnimArgs[0]; sprite->y += 14; @@ -313,11 +409,11 @@ static void AnimFallingRock(struct Sprite *sprite) sprite->data[5] = gBattleAnimArgs[2]; StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step); - sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback = TranslateSpriteInEllipse; sprite->callback(sprite); } -static void AnimFallingRock_Step(struct Sprite *sprite) +void AnimFallingRock_Step(struct Sprite *sprite) { sprite->x += sprite->data[5]; @@ -328,12 +424,12 @@ static void AnimFallingRock_Step(struct Sprite *sprite) sprite->data[4] = -24; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback = TranslateSpriteInEllipse; sprite->callback(sprite); } // Animates the rock particles that are shown on the impact for Rock Blast / Rock Smash -static void AnimRockFragment(struct Sprite *sprite) +void AnimRockFragment(struct Sprite *sprite) { StartSpriteAnim(sprite, gBattleAnimArgs[5]); AnimateSprite(sprite); @@ -360,10 +456,10 @@ static void AnimRockFragment(struct Sprite *sprite) } // Swirls particle in vortex. Used for moves like Fire Spin or Sand Tomb -static void AnimParticleInVortex(struct Sprite *sprite) +void AnimParticleInVortex(struct Sprite *sprite) { if (gBattleAnimArgs[6] == ANIM_ATTACKER) - InitSpritePosToAnimAttacker(sprite, 0); + InitSpritePosToAnimAttacker(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -409,7 +505,7 @@ void AnimTask_LoadSandstormBackground(u8 taskId) GetBattleAnimBg1Data(&animBg); AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Sandstorm, animBg.tilesOffset); - AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Sandstorm, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Sandstorm, FALSE); LoadCompressedPalette(gBattleAnimSpritePal_FlyingDirt, animBg.paletteId * 16, 32); if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) @@ -490,7 +586,7 @@ static void AnimTask_LoadSandstormBackground_Step(u8 taskId) // arg 1: projectile speed // arg 2: y pixel drop // arg 3: ??? unknown (possibly a color bit) -static void AnimFlyingSandCrescent(struct Sprite *sprite) +void AnimFlyingSandCrescent(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -541,10 +637,10 @@ static void AnimFlyingSandCrescent(struct Sprite *sprite) // arg 2: terminal y offset // arg 3: duration // arg 4: sprite size [1,5] -static void AnimRaiseSprite(struct Sprite *sprite) +void AnimRaiseSprite(struct Sprite *sprite) { StartSpriteAnim(sprite, gBattleAnimArgs[4]); - InitSpritePosToAnimAttacker(sprite, 0); + InitSpritePosToAnimAttacker(sprite, FALSE); sprite->data[0] = gBattleAnimArgs[3]; sprite->data[2] = sprite->x; @@ -564,10 +660,10 @@ void AnimTask_Rollout(u8 taskId) task = &gTasks[taskId]; - var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24; - var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24; + var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 24; + var2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + var3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 24; if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget) var3 = var1; @@ -596,6 +692,54 @@ void AnimTask_Rollout(u8 taskId) task->data[6] = 0; task->data[7] = 0; + pan1 = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); + pan2 = BattleAnimAdjustPanning(SOUND_PAN_TARGET); + + task->data[13] = pan1; + task->data[14] = (pan2 - pan1) / task->data[8]; + task->data[1] = rolloutCounter; + task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + + task->func = AnimTask_Rollout_Step; +} + +void AnimTask_TectonicRageRollout(u8 taskId) +{ + u16 var0, var1, var2, var3; + int var5; + s16 pan1, pan2; + struct Task *task; + u8 rolloutCounter = 1; + + task = &gTasks[taskId]; + + var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24; + var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24; + + if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget) + var3 = var1; + + task->data[8] = 48 - (rolloutCounter * 8); //rollout speed + task->data[0] = 0; + task->data[11] = 0; + task->data[9] = 0; + task->data[12] = 1; + + var5 = task->data[8]; + if (var5 < 0) + var5 += 7; + + task->data[10] = (var5 >> 3) - 1; + + task->data[2] = var0 * 8; + task->data[3] = var1 * 8; + task->data[4] = ((var2 - var0) * 8) / task->data[8]; + task->data[5] = ((var3 - var1) * 8) / task->data[8]; + task->data[6] = 0; + task->data[7] = 0; + pan1 = BattleAnimAdjustPanning(-64); pan2 = BattleAnimAdjustPanning(63); @@ -787,8 +931,8 @@ static void AnimRockBlastRock(struct Sprite *sprite) static void AnimRockScatter(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; diff --git a/src/battle_anim_smokescreen.c b/src/battle_anim_smokescreen.c index ea7f948434..e395be5f84 100644 --- a/src/battle_anim_smokescreen.c +++ b/src/battle_anim_smokescreen.c @@ -5,15 +5,19 @@ #include "graphics.h" #include "sprite.h" #include "util.h" -#include "constants/pokemon.h" #include "constants/battle_palace.h" -static void SmokescreenImpact_Callback(struct Sprite *); -static void SpriteCB_DestroySprite(struct Sprite *sprite); +#define TAG_SMOKESCREEN 55019 + +#define PALTAG_SHADOW 55039 +#define GFXTAG_SHADOW 55129 + +static void SpriteCB_SmokescreenImpactMain(struct Sprite *); +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] = +const u8 gBattlePalaceNatureToMoveTarget[NUM_NATURES] = { [NATURE_HARDY] = PALACE_TARGET_STRONGER, [NATURE_LONELY] = PALACE_TARGET_STRONGER, @@ -21,7 +25,7 @@ const u8 gBattlePalaceNatureToMoveTarget[NUM_NATURES] = [NATURE_ADAMANT] = PALACE_TARGET_STRONGER, [NATURE_NAUGHTY] = PALACE_TARGET_WEAKER, [NATURE_BOLD] = PALACE_TARGET_WEAKER, - [NATURE_DOCILE] = PALACE_TARGET_RANDOM, + [NATURE_DOCILE] = PALACE_TARGET_RANDOM, [NATURE_RELAXED] = PALACE_TARGET_STRONGER, [NATURE_IMPISH] = PALACE_TARGET_STRONGER, [NATURE_LAX] = PALACE_TARGET_STRONGER, @@ -29,7 +33,7 @@ const u8 gBattlePalaceNatureToMoveTarget[NUM_NATURES] = [NATURE_HASTY] = PALACE_TARGET_WEAKER, [NATURE_SERIOUS] = PALACE_TARGET_WEAKER, [NATURE_JOLLY] = PALACE_TARGET_STRONGER, - [NATURE_NAIVE] = PALACE_TARGET_RANDOM, + [NATURE_NAIVE] = PALACE_TARGET_RANDOM, [NATURE_MODEST] = PALACE_TARGET_WEAKER, [NATURE_MILD] = PALACE_TARGET_STRONGER, [NATURE_QUIET] = PALACE_TARGET_WEAKER, @@ -44,20 +48,20 @@ const u8 gBattlePalaceNatureToMoveTarget[NUM_NATURES] = static const struct CompressedSpriteSheet sSmokescreenImpactSpriteSheet = { - .data = gSmokescreenImpactTiles, .size = 0x180, .tag = 55019 + .data = gSmokescreenImpactTiles, .size = 0x180, .tag = TAG_SMOKESCREEN }; static const struct CompressedSpritePalette sSmokescreenImpactSpritePalette = { - .data = gSmokescreenImpactPalette, .tag = 55019 + .data = gSmokescreenImpactPalette, .tag = TAG_SMOKESCREEN }; static const struct OamData sOamData_SmokescreenImpact = { - .y = 0, + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -71,33 +75,33 @@ static const struct OamData sOamData_SmokescreenImpact = static const union AnimCmd sAnim_SmokescreenImpact_0[] = { - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(4, 4), - ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(8, 4), ANIMCMD_END }; static const union AnimCmd sAnim_SmokescreenImpact_1[] = { - ANIMCMD_FRAME(0, 4, .hFlip = TRUE), - ANIMCMD_FRAME(4, 4, .hFlip = TRUE), - ANIMCMD_FRAME(8, 4, .hFlip = TRUE), + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(4, 4, .hFlip = TRUE), + ANIMCMD_FRAME(8, 4, .hFlip = TRUE), ANIMCMD_END }; static const union AnimCmd sAnim_SmokescreenImpact_2[] = { - ANIMCMD_FRAME(0, 4, .vFlip = TRUE), - ANIMCMD_FRAME(4, 4, .vFlip = TRUE), - ANIMCMD_FRAME(8, 4, .vFlip = TRUE), + ANIMCMD_FRAME(0, 4, .vFlip = TRUE), + ANIMCMD_FRAME(4, 4, .vFlip = TRUE), + ANIMCMD_FRAME(8, 4, .vFlip = TRUE), ANIMCMD_END }; static const union AnimCmd sAnim_SmokescreenImpact_3[] = { - ANIMCMD_FRAME(0, 4, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(4, 4, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(8, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(4, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(8, 4, .hFlip = TRUE, .vFlip = TRUE), ANIMCMD_END }; @@ -111,26 +115,26 @@ static const union AnimCmd *const sAnims_SmokescreenImpact[] = static const struct SpriteTemplate sSmokescreenImpactSpriteTemplate = { - .tileTag = 55019, - .paletteTag = 55019, - .oam = &sOamData_SmokescreenImpact, - .anims = sAnims_SmokescreenImpact, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_DestroySprite + .tileTag = TAG_SMOKESCREEN, + .paletteTag = TAG_SMOKESCREEN, + .oam = &sOamData_SmokescreenImpact, + .anims = sAnims_SmokescreenImpact, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_SmokescreenImpact }; const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow = { - .data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = 55129 + .data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = GFXTAG_SHADOW }; static const struct OamData sOamData_EnemyShadow = { - .y = 0, + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), .x = 0, @@ -144,16 +148,21 @@ static const struct OamData sOamData_EnemyShadow = const struct SpriteTemplate gSpriteTemplate_EnemyShadow = { - .tileTag = 55129, - .paletteTag = 55039, - .oam = &sOamData_EnemyShadow, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = GFXTAG_SHADOW, + .paletteTag = PALTAG_SHADOW, + .oam = &sOamData_EnemyShadow, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_SetInvisible }; -u8 SmokescreenImpact(s16 x, s16 y, u8 a3) +#define sActiveSprites data[0] +#define sPersist data[1] + +#define sMainSpriteId data[0] + +u8 SmokescreenImpact(s16 x, s16 y, bool8 persist) { u8 mainSpriteId; u8 spriteId1, spriteId2, spriteId3, spriteId4; @@ -165,54 +174,58 @@ u8 SmokescreenImpact(s16 x, s16 y, u8 a3) LoadCompressedSpritePaletteUsingHeap(&sSmokescreenImpactSpritePalette); } - mainSpriteId = CreateInvisibleSpriteWithCallback(SmokescreenImpact_Callback); + mainSpriteId = CreateInvisibleSpriteWithCallback(SpriteCB_SmokescreenImpactMain); mainSprite = &gSprites[mainSpriteId]; - mainSprite->data[1] = a3; + mainSprite->sPersist = persist; + // Top left sprite spriteId1 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2); - gSprites[spriteId1].data[0] = mainSpriteId; - mainSprite->data[0]++; + gSprites[spriteId1].sMainSpriteId = mainSpriteId; + mainSprite->sActiveSprites++; AnimateSprite(&gSprites[spriteId1]); + // Top right sprite spriteId2 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y - 16, 2); - gSprites[spriteId2].data[0] = mainSpriteId; - mainSprite->data[0]++; + gSprites[spriteId2].sMainSpriteId = mainSpriteId; + mainSprite->sActiveSprites++; StartSpriteAnim(&gSprites[spriteId2], 1); AnimateSprite(&gSprites[spriteId2]); + // Bottom left sprite spriteId3 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y, 2); - gSprites[spriteId3].data[0] = mainSpriteId; - mainSprite->data[0]++; + gSprites[spriteId3].sMainSpriteId = mainSpriteId; + mainSprite->sActiveSprites++; StartSpriteAnim(&gSprites[spriteId3], 2); AnimateSprite(&gSprites[spriteId3]); + // Bottom right sprite spriteId4 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y, 2); - gSprites[spriteId4].data[0] = mainSpriteId; - mainSprite->data[0]++; + gSprites[spriteId4].sMainSpriteId = mainSpriteId; + mainSprite->sActiveSprites++; StartSpriteAnim(&gSprites[spriteId4], 3); AnimateSprite(&gSprites[spriteId4]); return mainSpriteId; } -static void SmokescreenImpact_Callback(struct Sprite *sprite) +static void SpriteCB_SmokescreenImpactMain(struct Sprite *sprite) { - if (!sprite->data[0]) + if (sprite->sActiveSprites == 0) { FreeSpriteTilesByTag(sSmokescreenImpactSpriteSheet.tag); FreeSpritePaletteByTag(sSmokescreenImpactSpritePalette.tag); - if (!sprite->data[1]) + if (!sprite->sPersist) DestroySprite(sprite); else sprite->callback = SpriteCallbackDummy; } } -static void SpriteCB_DestroySprite(struct Sprite *sprite) +static void SpriteCB_SmokescreenImpact(struct Sprite *sprite) { if (sprite->animEnded) { - gSprites[sprite->data[0]].data[0]--; + gSprites[sprite->sMainSpriteId].sActiveSprites--; DestroySprite(sprite); } } diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index 39d6729e8d..d96a4cea46 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -2,16 +2,20 @@ #include "battle.h" #include "battle_anim.h" #include "contest.h" +#include "m4a.h" #include "sound.h" #include "task.h" #include "constants/battle_anim.h" +extern struct MusicPlayerInfo gMPlayInfo_SE1; + static void SoundTask_FireBlast_Step1(u8 taskId); static void SoundTask_FireBlast_Step2(u8 taskId); static void SoundTask_LoopSEAdjustPanning_Step(u8 taskId); static void SoundTask_PlayDoubleCry_Step(u8 taskId); static void SoundTask_PlayCryWithEcho_Step(u8 taskId); static void SoundTask_AdjustPanningVar_Step(u8 taskId); +static void SoundTask_SeVolumeChange(u8 taskId); // Loops the specified sound effect and pans from the // attacker to the target. The second specified sound effect @@ -100,7 +104,7 @@ void SoundTask_LoopSEAdjustPanning(u8 taskId) gTasks[taskId].data[12] = r9; gTasks[taskId].func = SoundTask_LoopSEAdjustPanning_Step; - SoundTask_LoopSEAdjustPanning_Step(taskId); + gTasks[taskId].func(taskId); } static void SoundTask_LoopSEAdjustPanning_Step(u8 taskId) @@ -135,10 +139,12 @@ void SoundTask_PlayCryHighPitch(u8 taskId) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) species = gContestResources->moveAnim->species; - #ifndef UBFIX + // Destroying the task twice (here and at end of function) + // results in an incorrect value for gAnimVisualTaskCount + #ifndef BUGFIX else - DestroyAnimVisualTask(taskId); // UB: task gets destroyed twice. - #endif + DestroyAnimVisualTask(taskId); + #endif } else { @@ -168,7 +174,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId) } if (species != SPECIES_NONE) - PlayCry3(species, pan, 3); + PlayCry_ByMode(species, pan, CRY_MODE_HIGH_PITCH); DestroyAnimVisualTask(taskId); } @@ -181,10 +187,12 @@ void SoundTask_PlayDoubleCry(u8 taskId) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) species = gContestResources->moveAnim->species; - #ifndef UBFIX + // Destroying the task twice (here and at end of function) + // results in an incorrect value for gAnimVisualTaskCount + #ifndef BUGFIX else - DestroyAnimVisualTask(taskId); // UB: task gets destroyed twice. - #endif + DestroyAnimVisualTask(taskId); + #endif } else { @@ -219,10 +227,10 @@ void SoundTask_PlayDoubleCry(u8 taskId) if (species != SPECIES_NONE) { - if (gBattleAnimArgs[1] == 0xFF) - PlayCry3(species, pan, 9); - else - PlayCry3(species, pan, 7); + if (gBattleAnimArgs[1] == DOUBLE_CRY_GROWL) + PlayCry_ByMode(species, pan, CRY_MODE_GROWL_1); + else // DOUBLE_CRY_ROAR + PlayCry_ByMode(species, pan, CRY_MODE_ROAR_1); gTasks[taskId].func = SoundTask_PlayDoubleCry_Step; } @@ -243,19 +251,19 @@ static void SoundTask_PlayDoubleCry_Step(u8 taskId) } else { - if (gTasks[taskId].data[0] == 0xFF) + if (gTasks[taskId].data[0] == DOUBLE_CRY_GROWL) { if (!IsCryPlaying()) { - PlayCry3(species, pan, 10); + PlayCry_ByMode(species, pan, CRY_MODE_GROWL_2); DestroyAnimVisualTask(taskId); } } - else + else // DOUBLE_CRY_ROAR { if (!IsCryPlaying()) { - PlayCry3(species, pan, 8); + PlayCry_ByMode(species, pan, CRY_MODE_ROAR_2); DestroyAnimVisualTask(taskId); } } @@ -275,12 +283,18 @@ void SoundTask_WaitForCry(u8 taskId) } } + +#define tSpecies data[1] +#define tPan data[2] +#define tState data[9] +#define tLastCry data[10] // If it's not the last cry, don't try to restore the BGM, because another is coming + void SoundTask_PlayCryWithEcho(u8 taskId) { u16 species; s8 pan; - gTasks[taskId].data[10] = gBattleAnimArgs[0]; + gTasks[taskId].tLastCry = gBattleAnimArgs[0]; pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); if (IsContest()) @@ -288,8 +302,8 @@ void SoundTask_PlayCryWithEcho(u8 taskId) else species = gAnimBattlerSpecies[gBattleAnimAttacker]; - gTasks[taskId].data[1] = species; - gTasks[taskId].data[2] = pan; + gTasks[taskId].tSpecies = species; + gTasks[taskId].tPan = pan; if (species != SPECIES_NONE) gTasks[taskId].func = SoundTask_PlayCryWithEcho_Step; @@ -299,38 +313,44 @@ void SoundTask_PlayCryWithEcho(u8 taskId) static void SoundTask_PlayCryWithEcho_Step(u8 taskId) { - u16 species = gTasks[taskId].data[1]; - s8 pan = gTasks[taskId].data[2]; + u16 species = gTasks[taskId].tSpecies; + s8 pan = gTasks[taskId].tPan; - switch (gTasks[taskId].data[9]) + // Note the cases are not in order of execution + switch (gTasks[taskId].tState) { case 2: - PlayCry6(species, pan, 4); - gTasks[taskId].data[9]++; + PlayCry_DuckNoRestore(species, pan, CRY_MODE_ECHO_START); + gTasks[taskId].tState++; break; case 1: case 3: case 4: - gTasks[taskId].data[9]++; + gTasks[taskId].tState++; break; case 5: if (IsCryPlaying()) break; case 0: StopCryAndClearCrySongs(); - gTasks[taskId].data[9]++; + gTasks[taskId].tState++; break; default: - if (gTasks[taskId].data[10] == 0) - PlayCry6(species, pan, 6); + if (!gTasks[taskId].tLastCry) + PlayCry_DuckNoRestore(species, pan, CRY_MODE_ECHO_END); else - PlayCry3(species, pan, 6); + PlayCry_ByMode(species, pan, CRY_MODE_ECHO_END); DestroyAnimVisualTask(taskId); break; } } +#undef tSpecies +#undef tPan +#undef tState +#undef tLastCry + void SoundTask_PlaySE1WithPanning(u8 taskId) { u16 songId = gBattleAnimArgs[0]; @@ -349,7 +369,7 @@ void SoundTask_PlaySE2WithPanning(u8 taskId) DestroyAnimVisualTask(taskId); } -// Adjusts panning and assigns it to gAnimCustomPanning. Doesnt play sound. +// Adjusts panning and assigns it to gAnimCustomPanning. Doesnt play sound. // Used by Confuse Ray and Will-O-Wisp (see uses of gAnimCustomPanning) void SoundTask_AdjustPanningVar(u8 taskId) { @@ -369,7 +389,7 @@ void SoundTask_AdjustPanningVar(u8 taskId) gTasks[taskId].data[11] = sourcePan; gTasks[taskId].func = SoundTask_AdjustPanningVar_Step; - SoundTask_AdjustPanningVar_Step(taskId); + gTasks[taskId].func(taskId); } static void SoundTask_AdjustPanningVar_Step(u8 taskId) @@ -381,7 +401,7 @@ static void SoundTask_AdjustPanningVar_Step(u8 taskId) u16 oldPan; gTasks[taskId].data[10] = 0; oldPan = gTasks[taskId].data[11]; - gTasks[taskId].data[11] = panIncrement + oldPan; + gTasks[taskId].data[11] = panIncrement + oldPan; gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan); } @@ -389,3 +409,61 @@ static void SoundTask_AdjustPanningVar_Step(u8 taskId) if (gTasks[taskId].data[11] == gTasks[taskId].data[2]) DestroyAnimVisualTask(taskId); } + +#define tSongNum data[0] +#define tPan data[1] +#define tCurrentVolume data[2] +#define tIncrementVal data[3] +#define tTargetVolume data[4] +#define tDelay data[5] +#define tFrameCounter data[6] +#define tInitialVolume data[7] + +void SoundTask_PlaySeChangingVolume(u8 taskId) +{ + gTasks[taskId].tSongNum = gBattleAnimArgs[0]; + gTasks[taskId].tPan = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + gTasks[taskId].tCurrentVolume = gTasks[taskId].tInitialVolume = gBattleAnimArgs[2]; + gTasks[taskId].tIncrementVal = gBattleAnimArgs[3]; + gTasks[taskId].tTargetVolume = gBattleAnimArgs[4]; + gTasks[taskId].tDelay = gBattleAnimArgs[5]; + + PlaySE1WithPanning(gTasks[taskId].tSongNum, gTasks[taskId].tPan); + m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFF, gTasks[taskId].tCurrentVolume); + if (gTasks[taskId].tIncrementVal == 0) // Either increase or decrease volume. + DestroyAnimSoundTask(taskId); + else + gTasks[taskId].func = SoundTask_SeVolumeChange; +} + +static void SoundTask_SeVolumeChange(u8 taskId) +{ + bool32 destroyTask = FALSE; + + if (gTasks[taskId].tFrameCounter++ >= gTasks[taskId].tDelay) + { + gTasks[taskId].tFrameCounter = 0; + gTasks[taskId].tCurrentVolume += gTasks[taskId].tIncrementVal; + + if (gTasks[taskId].tCurrentVolume < 0) + gTasks[taskId].tCurrentVolume = 0; + if (gTasks[taskId].tCurrentVolume > 256) + gTasks[taskId].tCurrentVolume = 256; + + if (gTasks[taskId].tInitialVolume < gTasks[taskId].tTargetVolume) // Volume increasing. + { + if (gTasks[taskId].tCurrentVolume >= gTasks[taskId].tTargetVolume) // Target reached. + destroyTask = TRUE; + } + else // Volume decreasing. + { + if (gTasks[taskId].tCurrentVolume <= gTasks[taskId].tTargetVolume) // Target reached. + destroyTask = TRUE; + } + + if (destroyTask) + DestroyAnimSoundTask(taskId); + + m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFF, gTasks[taskId].tCurrentVolume); + } +} diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index 4893abd585..fb2f979565 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -107,7 +107,7 @@ static const union AnimCmd sAnim_SpinningSparkle[] = ANIMCMD_END }; -static const union AnimCmd *const sAnims_SpinningSparkle[] = +const union AnimCmd *const sAnims_SpinningSparkle[] = { sAnim_SpinningSparkle }; @@ -210,35 +210,35 @@ static const struct SpriteTemplate sFlickeringShrinkOrbSpriteTemplate = static const struct Subsprite sFrozenIceCubeSubsprites[] = { { - .x = -16, - .y = -16, - .shape = SPRITE_SHAPE(64x64), - .size = SPRITE_SIZE(64x64), - .tileOffset = 0, + .x = -16, + .y = -16, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileOffset = 0, .priority = 2 }, { - .x = -16, - .y = 48, - .shape = SPRITE_SHAPE(64x32), - .size = SPRITE_SIZE(64x32), - .tileOffset = 64, + .x = -16, + .y = 48, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 64, .priority = 2 }, { - .x = 48, - .y = -16, - .shape = SPRITE_SHAPE(32x64), + .x = 48, + .y = -16, + .shape = SPRITE_SHAPE(32x64), .size = SPRITE_SIZE(32x64), - .tileOffset = 96, + .tileOffset = 96, .priority = 2 }, { - .x = 48, - .y = 48, - .shape = SPRITE_SHAPE(32x32), - .size = SPRITE_SIZE(32x32), - .tileOffset = 128, + .x = 48, + .y = 48, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileOffset = 128, .priority = 2 }, }; @@ -248,7 +248,7 @@ static const struct SubspriteTable sFrozenIceCubeSubspriteTable[] = {ARRAY_COUNT(sFrozenIceCubeSubsprites), sFrozenIceCubeSubsprites}, }; -static const struct SpriteTemplate gFrozenIceCubeSpriteTemplate = +static const struct SpriteTemplate sFrozenIceCubeSpriteTemplate = { .tileTag = ANIM_TAG_ICE_CUBE, .paletteTag = ANIM_TAG_ICE_CUBE, @@ -379,6 +379,25 @@ static void AnimFlashingCircleImpact_Step(struct Sprite *sprite) } } +void AnimTask_FrozenIceCubeAttacker(u8 taskId) +{ + s16 x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - 32; + s16 y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - 36; + u8 spriteId; + + if (IsContest()) + x -= 6; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4); + if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF) + gSprites[spriteId].invisible = TRUE; + SetSubspriteTables(&gSprites[spriteId], sFrozenIceCubeSubspriteTable); + gTasks[taskId].data[15] = spriteId; + gTasks[taskId].func = AnimTask_FrozenIceCube_Step1; +} + + void AnimTask_FrozenIceCube(u8 taskId) { s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 32; @@ -389,7 +408,7 @@ void AnimTask_FrozenIceCube(u8 taskId) x -= 6; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); - spriteId = CreateSprite(&gFrozenIceCubeSpriteTemplate, x, y, 4); + spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4); if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF) gSprites[spriteId].invisible = TRUE; SetSubspriteTables(&gSprites[spriteId], sFrozenIceCubeSubspriteTable); @@ -549,7 +568,7 @@ void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId) gBattleAnimAttacker = battlerId; gBattleAnimTarget = battlerId; - LaunchBattleAnimation(gBattleAnims_StatusConditions, statusAnimId, 0); + LaunchBattleAnimation(gBattleAnims_StatusConditions, statusAnimId, FALSE); taskId = CreateTask(Task_DoStatusAnimation, 10); gTasks[taskId].data[0] = battlerId; } diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index 23e031b646..e3e8f9ac1a 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -99,6 +99,7 @@ static void DiveBallOpenParticleAnimation(u8); static void RepeatBallOpenParticleAnimation(u8); static void TimerBallOpenParticleAnimation(u8); static void PremierBallOpenParticleAnimation(u8); +static void CB_CriticalCaptureThrownBallMovement(struct Sprite *sprite); static void SpriteCB_PokeBlock_Throw(struct Sprite *); struct CaptureStar @@ -127,49 +128,94 @@ static const struct CaptureStar sCaptureStars[] = }, }; -#define TAG_PARTICLES_POKEBALL 55020 -#define TAG_PARTICLES_GREATBALL 55021 -#define TAG_PARTICLES_SAFARIBALL 55022 -#define TAG_PARTICLES_ULTRABALL 55023 -#define TAG_PARTICLES_MASTERBALL 55024 -#define TAG_PARTICLES_NETBALL 55025 -#define TAG_PARTICLES_DIVEBALL 55026 -#define TAG_PARTICLES_NESTBALL 55027 -#define TAG_PARTICLES_REPEATBALL 55028 -#define TAG_PARTICLES_TIMERBALL 55029 -#define TAG_PARTICLES_LUXURYBALL 55030 -#define TAG_PARTICLES_PREMIERBALL 55031 +#define TAG_PARTICLES_POKEBALL 65030 +#define TAG_PARTICLES_GREATBALL 65031 +#define TAG_PARTICLES_ULTRABALL 65032 +#define TAG_PARTICLES_MASTERBALL 65033 +#define TAG_PARTICLES_PREMIERBALL 65034 +#define TAG_PARTICLES_HEALBALL 65035 +#define TAG_PARTICLES_NETBALL 65036 +#define TAG_PARTICLES_NESTBALL 65037 +#define TAG_PARTICLES_DIVEBALL 65038 +#define TAG_PARTICLES_DUSKBALL 65039 +#define TAG_PARTICLES_TIMERBALL 65040 +#define TAG_PARTICLES_QUICKBALL 65041 +#define TAG_PARTICLES_REPEATBALL 65042 +#define TAG_PARTICLES_LUXURYBALL 65043 +#define TAG_PARTICLES_LEVELBALL 65044 +#define TAG_PARTICLES_LUREBALL 65045 +#define TAG_PARTICLES_MOONBALL 65046 +#define TAG_PARTICLES_FRIENDBALL 65047 +#define TAG_PARTICLES_LOVEBALL 65048 +#define TAG_PARTICLES_FASTBALL 65049 +#define TAG_PARTICLES_HEAVYBALL 65050 +#define TAG_PARTICLES_DREAMBALL 65051 +#define TAG_PARTICLES_SAFARIBALL 65052 +#define TAG_PARTICLES_SPORTBALL 65053 +#define TAG_PARTICLES_PARKBALL 65054 +#define TAG_PARTICLES_BEASTBALL 65055 +#define TAG_PARTICLES_CHERISHBALL 65056 -static const struct CompressedSpriteSheet sBallParticleSpriteSheets[POKEBALL_COUNT] = +static const struct CompressedSpriteSheet sBallParticleSpriteSheets[] = { - [BALL_POKE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_POKEBALL}, - [BALL_GREAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_GREATBALL}, - [BALL_SAFARI] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SAFARIBALL}, - [BALL_ULTRA] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_ULTRABALL}, - [BALL_MASTER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_MASTERBALL}, - [BALL_NET] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NETBALL}, - [BALL_DIVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DIVEBALL}, - [BALL_NEST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NESTBALL}, - [BALL_REPEAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_REPEATBALL}, - [BALL_TIMER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_TIMERBALL}, - [BALL_LUXURY] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUXURYBALL}, - [BALL_PREMIER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PREMIERBALL}, + [BALL_POKE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_POKEBALL}, + [BALL_GREAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_GREATBALL}, + [BALL_ULTRA] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_ULTRABALL}, + [BALL_MASTER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_MASTERBALL}, + [BALL_PREMIER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PREMIERBALL}, + [BALL_HEAL] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_HEALBALL}, + [BALL_NET] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NETBALL}, + [BALL_NEST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NESTBALL}, + [BALL_DIVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DIVEBALL}, + [BALL_DUSK] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_DUSKBALL}, + [BALL_TIMER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_TIMERBALL}, + [BALL_QUICK] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_QUICKBALL}, + [BALL_REPEAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_REPEATBALL}, + [BALL_LUXURY] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUXURYBALL}, + [BALL_LEVEL] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_LEVELBALL}, + [BALL_LURE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUREBALL}, + [BALL_MOON] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_MOONBALL}, + [BALL_FRIEND] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_FRIENDBALL}, + [BALL_LOVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LOVEBALL}, + [BALL_FAST] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_FASTBALL}, + [BALL_HEAVY] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_HEAVYBALL}, + [BALL_DREAM] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DREAMBALL}, + [BALL_SAFARI] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SAFARIBALL}, + [BALL_SPORT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SPORTBALL}, + [BALL_PARK] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PARKBALL}, + [BALL_BEAST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_BEASTBALL}, + [BALL_CHERISH] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_CHERISHBALL}, }; -static const struct CompressedSpritePalette sBallParticlePalettes[POKEBALL_COUNT] = +static const struct CompressedSpritePalette sBallParticlePalettes[] = { - [BALL_POKE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_POKEBALL}, - [BALL_GREAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_GREATBALL}, - [BALL_SAFARI] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SAFARIBALL}, - [BALL_ULTRA] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_ULTRABALL}, - [BALL_MASTER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_MASTERBALL}, - [BALL_NET] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NETBALL}, - [BALL_DIVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DIVEBALL}, - [BALL_NEST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NESTBALL}, - [BALL_REPEAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_REPEATBALL}, - [BALL_TIMER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_TIMERBALL}, - [BALL_LUXURY] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUXURYBALL}, - [BALL_PREMIER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PREMIERBALL}, + [BALL_POKE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_POKEBALL}, + [BALL_GREAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_GREATBALL}, + [BALL_ULTRA] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_ULTRABALL}, + [BALL_MASTER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_MASTERBALL}, + [BALL_PREMIER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PREMIERBALL}, + [BALL_HEAL] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_HEALBALL}, + [BALL_NET] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NETBALL}, + [BALL_NEST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NESTBALL}, + [BALL_DIVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DIVEBALL}, + [BALL_DUSK] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_DUSKBALL}, + [BALL_TIMER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_TIMERBALL}, + [BALL_QUICK] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_QUICKBALL}, + [BALL_REPEAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_REPEATBALL}, + [BALL_LUXURY] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUXURYBALL}, + [BALL_LEVEL] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_LEVELBALL}, + [BALL_LURE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUREBALL}, + [BALL_MOON] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_MOONBALL}, + [BALL_FRIEND] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_FRIENDBALL}, + [BALL_LOVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LOVEBALL}, + [BALL_FAST] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_FASTBALL}, + [BALL_HEAVY] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_HEAVYBALL}, + [BALL_DREAM] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DREAMBALL}, + [BALL_SAFARI] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SAFARIBALL}, + [BALL_SPORT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SPORTBALL}, + [BALL_PARK] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PARKBALL}, + [BALL_BEAST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_BEASTBALL}, + [BALL_CHERISH] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_CHERISHBALL}, }; static const union AnimCmd sAnim_RegularBall[] = @@ -228,32 +274,63 @@ static const u8 sBallParticleAnimNums[POKEBALL_COUNT] = { [BALL_POKE] = 0, [BALL_GREAT] = 0, - [BALL_SAFARI] = 0, [BALL_ULTRA] = 5, [BALL_MASTER] = 1, - [BALL_NET] = 2, - [BALL_DIVE] = 2, - [BALL_NEST] = 3, - [BALL_REPEAT] = 5, - [BALL_TIMER] = 5, - [BALL_LUXURY] = 4, [BALL_PREMIER] = 4, + [BALL_HEAL] = 0, + [BALL_NET] = 2, + [BALL_NEST] = 3, + [BALL_DIVE] = 2, + [BALL_DUSK] = 2, + [BALL_TIMER] = 5, + [BALL_QUICK] = 4, + [BALL_REPEAT] = 5, + [BALL_LUXURY] = 4, + [BALL_LEVEL] = 5, + [BALL_LURE] = 2, + [BALL_MOON] = 4, + [BALL_FRIEND] = 3, + [BALL_LOVE] = 3, + [BALL_FAST] = 4, + [BALL_HEAVY] = 0, + [BALL_DREAM] = 5, + [BALL_SAFARI] = 0, + [BALL_SPORT] = 0, + [BALL_PARK] = 5, + [BALL_BEAST] = 5, + [BALL_CHERISH] = 0, }; static const TaskFunc sBallParticleAnimationFuncs[POKEBALL_COUNT] = { + // Todo: assign and possibly create different particles [BALL_POKE] = PokeBallOpenParticleAnimation, [BALL_GREAT] = GreatBallOpenParticleAnimation, - [BALL_SAFARI] = SafariBallOpenParticleAnimation, [BALL_ULTRA] = UltraBallOpenParticleAnimation, [BALL_MASTER] = MasterBallOpenParticleAnimation, - [BALL_NET] = SafariBallOpenParticleAnimation, - [BALL_DIVE] = DiveBallOpenParticleAnimation, - [BALL_NEST] = UltraBallOpenParticleAnimation, - [BALL_REPEAT] = RepeatBallOpenParticleAnimation, - [BALL_TIMER] = TimerBallOpenParticleAnimation, - [BALL_LUXURY] = GreatBallOpenParticleAnimation, [BALL_PREMIER] = PremierBallOpenParticleAnimation, + [BALL_HEAL] = PokeBallOpenParticleAnimation, + [BALL_NET] = SafariBallOpenParticleAnimation, + [BALL_NEST] = UltraBallOpenParticleAnimation, + [BALL_DIVE] = DiveBallOpenParticleAnimation, + [BALL_DUSK] = UltraBallOpenParticleAnimation, + [BALL_TIMER] = TimerBallOpenParticleAnimation, + [BALL_QUICK] = UltraBallOpenParticleAnimation, + [BALL_REPEAT] = RepeatBallOpenParticleAnimation, + [BALL_LUXURY] = GreatBallOpenParticleAnimation, + [BALL_LEVEL] = SafariBallOpenParticleAnimation, + [BALL_LURE] = GreatBallOpenParticleAnimation, + [BALL_MOON] = UltraBallOpenParticleAnimation, + [BALL_FRIEND] = UltraBallOpenParticleAnimation, + [BALL_LOVE] = GreatBallOpenParticleAnimation, + [BALL_FAST] = GreatBallOpenParticleAnimation, + [BALL_HEAVY] = GreatBallOpenParticleAnimation, + [BALL_DREAM] = UltraBallOpenParticleAnimation, + [BALL_SAFARI] = SafariBallOpenParticleAnimation, + [BALL_SPORT] = UltraBallOpenParticleAnimation, + [BALL_PARK] = UltraBallOpenParticleAnimation, + [BALL_BEAST] = UltraBallOpenParticleAnimation, + [BALL_CHERISH] = MasterBallOpenParticleAnimation, }; static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT] = @@ -276,15 +353,6 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT] .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - [BALL_SAFARI] = { - .tileTag = TAG_PARTICLES_SAFARIBALL, - .paletteTag = TAG_PARTICLES_SAFARIBALL, - .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = sAnims_BallParticles, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, [BALL_ULTRA] = { .tileTag = TAG_PARTICLES_ULTRABALL, .paletteTag = TAG_PARTICLES_ULTRABALL, @@ -303,18 +371,27 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT] .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - [BALL_NET] = { - .tileTag = TAG_PARTICLES_NETBALL, - .paletteTag = TAG_PARTICLES_NETBALL, + [BALL_PREMIER] = { + .tileTag = TAG_PARTICLES_PREMIERBALL, + .paletteTag = TAG_PARTICLES_PREMIERBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = sAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - [BALL_DIVE] = { - .tileTag = TAG_PARTICLES_DIVEBALL, - .paletteTag = TAG_PARTICLES_DIVEBALL, + [BALL_HEAL] = { + .tileTag = TAG_PARTICLES_HEALBALL, + .paletteTag = TAG_PARTICLES_HEALBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_NET] = { + .tileTag = TAG_PARTICLES_NETBALL, + .paletteTag = TAG_PARTICLES_NETBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = sAnims_BallParticles, .images = NULL, @@ -330,9 +407,18 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT] .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - [BALL_REPEAT] = { - .tileTag = TAG_PARTICLES_REPEATBALL, - .paletteTag = TAG_PARTICLES_REPEATBALL, + [BALL_DIVE] = { + .tileTag = TAG_PARTICLES_DIVEBALL, + .paletteTag = TAG_PARTICLES_DIVEBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_DUSK] = { + .tileTag = TAG_PARTICLES_DUSKBALL, + .paletteTag = TAG_PARTICLES_DUSKBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = sAnims_BallParticles, .images = NULL, @@ -348,6 +434,24 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT] .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, + [BALL_QUICK] = { + .tileTag = TAG_PARTICLES_QUICKBALL, + .paletteTag = TAG_PARTICLES_QUICKBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_REPEAT] = { + .tileTag = TAG_PARTICLES_REPEATBALL, + .paletteTag = TAG_PARTICLES_REPEATBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, [BALL_LUXURY] = { .tileTag = TAG_PARTICLES_LUXURYBALL, .paletteTag = TAG_PARTICLES_LUXURYBALL, @@ -357,9 +461,117 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT] .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - [BALL_PREMIER] = { - .tileTag = TAG_PARTICLES_PREMIERBALL, - .paletteTag = TAG_PARTICLES_PREMIERBALL, + [BALL_LEVEL] = { + .tileTag = TAG_PARTICLES_LEVELBALL, + .paletteTag = TAG_PARTICLES_LEVELBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_LURE] = { + .tileTag = TAG_PARTICLES_LUREBALL, + .paletteTag = TAG_PARTICLES_LUREBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_MOON] = { + .tileTag = TAG_PARTICLES_MOONBALL, + .paletteTag = TAG_PARTICLES_MOONBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_FRIEND] = { + .tileTag = TAG_PARTICLES_FRIENDBALL, + .paletteTag = TAG_PARTICLES_FRIENDBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_LOVE] = { + .tileTag = TAG_PARTICLES_LOVEBALL, + .paletteTag = TAG_PARTICLES_LOVEBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_FAST] = { + .tileTag = TAG_PARTICLES_FASTBALL, + .paletteTag = TAG_PARTICLES_FASTBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_HEAVY] = { + .tileTag = TAG_PARTICLES_HEAVYBALL, + .paletteTag = TAG_PARTICLES_HEAVYBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_DREAM] = { + .tileTag = TAG_PARTICLES_DREAMBALL, + .paletteTag = TAG_PARTICLES_DREAMBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_SAFARI] = { + .tileTag = TAG_PARTICLES_SAFARIBALL, + .paletteTag = TAG_PARTICLES_SAFARIBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_SPORT] = { + .tileTag = TAG_PARTICLES_SPORTBALL, + .paletteTag = TAG_PARTICLES_SPORTBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_PARK] = { + .tileTag = TAG_PARTICLES_PARKBALL, + .paletteTag = TAG_PARTICLES_PARKBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_BEAST] = { + .tileTag = TAG_PARTICLES_BEASTBALL, + .paletteTag = TAG_PARTICLES_BEASTBALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_BallParticles, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + [BALL_CHERISH] = { + .tileTag = TAG_PARTICLES_CHERISHBALL, + .paletteTag = TAG_PARTICLES_CHERISHBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = sAnims_BallParticles, .images = NULL, @@ -370,28 +582,34 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT] const u16 gBallOpenFadeColors[] = { + // Todo, assign different colors [BALL_POKE] = RGB(31, 22, 30), [BALL_GREAT] = RGB(16, 23, 30), - [BALL_SAFARI] = RGB(23, 30, 20), [BALL_ULTRA] = RGB(31, 31, 15), [BALL_MASTER] = RGB(23, 20, 28), - [BALL_NET] = RGB(21, 31, 25), - [BALL_DIVE] = RGB(12, 25, 30), - [BALL_NEST] = RGB(30, 27, 10), - [BALL_REPEAT] = RGB(31, 24, 16), - [BALL_TIMER] = RGB(29, 30, 30), - [BALL_LUXURY] = RGB(31, 17, 10), [BALL_PREMIER] = RGB(31, 9, 10), - - // Garbage data - RGB(0, 0, 0), - RGB(1, 16, 0), - RGB(3, 0, 1), - RGB(1, 8, 0), - RGB(0, 8, 0), - RGB(3, 8, 1), - RGB(6, 8, 1), - RGB(4, 0, 0), + [BALL_HEAL] = RGB(31, 23, 27), + [BALL_NET] = RGB(21, 31, 25), + [BALL_NEST] = RGB(30, 27, 10), + [BALL_DIVE] = RGB(12, 25, 30), + [BALL_DUSK] = RGB(7, 1, 13), + [BALL_TIMER] = RGB(29, 30, 30), + [BALL_QUICK] = RGB(16, 25, 30), + [BALL_REPEAT] = RGB(31, 24, 16), + [BALL_LUXURY] = RGB(31, 17, 10), + [BALL_LEVEL] = RGB(24, 4, 4), + [BALL_LURE] = RGB(9, 22, 27), + [BALL_MOON] = RGB(30, 25, 8), + [BALL_FRIEND] = RGB(17, 24, 7), + [BALL_LOVE] = RGB(31, 19, 26), + [BALL_FAST] = RGB(29, 17, 8), + [BALL_HEAVY] = RGB(7, 11, 20), + [BALL_DREAM] = RGB(31, 31, 15), + [BALL_SAFARI] = RGB(23, 30, 20), + [BALL_SPORT] = RGB(31, 31, 15), + [BALL_PARK] = RGB(31, 31, 15), + [BALL_BEAST] = RGB(31, 31, 15), + [BALL_CHERISH] = RGB(25, 4, 3), }; const struct SpriteTemplate gPokeblockSpriteTemplate = @@ -515,7 +733,7 @@ static void AnimTask_UnusedLevelUpHealthBox_Step(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); if (gTasks[taskId].data[12] == 0) { - ResetBattleAnimBg(0); + ResetBattleAnimBg(FALSE); gBattle_WIN0H = 0; gBattle_WIN0V = 0; SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); @@ -550,8 +768,8 @@ static void LoadHealthboxPalsForLevelUp(u8 *paletteId1, u8 *paletteId2, u8 battl healthBoxSpriteId = gHealthboxSpriteIds[battler]; spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; spriteId2 = gSprites[healthBoxSpriteId].data[5]; - *paletteId1 = AllocSpritePalette(0xD709); - *paletteId2 = AllocSpritePalette(0xD70A); + *paletteId1 = AllocSpritePalette(TAG_HEALTHBOX_PALS_1); + *paletteId2 = AllocSpritePalette(TAG_HEALTHBOX_PALS_2); offset1 = (gSprites[healthBoxSpriteId].oam.paletteNum * 16) + 0x100; offset2 = (gSprites[spriteId2].oam.paletteNum * 16) + 0x100; @@ -580,10 +798,10 @@ static void FreeHealthboxPalsForLevelUp(u8 battler) spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; spriteId2 = gSprites[healthBoxSpriteId].data[5]; - FreeSpritePaletteByTag(0xD709); - FreeSpritePaletteByTag(0xD70A); - paletteId1 = IndexOfSpritePaletteTag(0xD6FF); - paletteId2 = IndexOfSpritePaletteTag(0xD704); + FreeSpritePaletteByTag(TAG_HEALTHBOX_PALS_1); + FreeSpritePaletteByTag(TAG_HEALTHBOX_PALS_2); + paletteId1 = IndexOfSpritePaletteTag(TAG_HEALTHBOX_PAL); + paletteId2 = IndexOfSpritePaletteTag(TAG_HEALTHBAR_PAL); gSprites[healthBoxSpriteId].oam.paletteNum = paletteId1; gSprites[spriteId1].oam.paletteNum = paletteId1; gSprites[spriteId2].oam.paletteNum = paletteId2; @@ -611,7 +829,7 @@ static void AnimTask_FlashHealthboxOnLevelUp_Step(u8 taskId) if (gTasks[taskId].data[0]++ >= gTasks[taskId].data[11]) { gTasks[taskId].data[0] = 0; - paletteNum = IndexOfSpritePaletteTag(0xD709); + paletteNum = IndexOfSpritePaletteTag(TAG_HEALTHBOX_PALS_1); colorOffset = gTasks[taskId].data[10] == 0 ? 6 : 2; switch (gTasks[taskId].data[1]) { @@ -690,7 +908,7 @@ void AnimTask_SwitchOutBallEffect(u8 taskId) priority = gSprites[spriteId].oam.priority; subpriority = gSprites[spriteId].subpriority; gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId); - selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); + selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); gTasks[taskId].data[11] = LaunchBallFadeMonTask(FALSE, gBattleAnimAttacker, selectedPalettes, ballId); gTasks[taskId].data[0]++; break; @@ -729,29 +947,60 @@ u8 ItemIdToBallId(u16 ballItem) { switch (ballItem) { - case ITEM_MASTER_BALL: - return BALL_MASTER; - case ITEM_ULTRA_BALL: - return BALL_ULTRA; + case ITEM_POKE_BALL: + return BALL_POKE; case ITEM_GREAT_BALL: return BALL_GREAT; - case ITEM_SAFARI_BALL: - return BALL_SAFARI; - case ITEM_NET_BALL: - return BALL_NET; - case ITEM_DIVE_BALL: - return BALL_DIVE; - case ITEM_NEST_BALL: - return BALL_NEST; - case ITEM_REPEAT_BALL: - return BALL_REPEAT; - case ITEM_TIMER_BALL: - return BALL_TIMER; - case ITEM_LUXURY_BALL: - return BALL_LUXURY; + case ITEM_ULTRA_BALL: + return BALL_ULTRA; + case ITEM_MASTER_BALL: + return BALL_MASTER; case ITEM_PREMIER_BALL: return BALL_PREMIER; - case ITEM_POKE_BALL: + case ITEM_HEAL_BALL: + return BALL_HEAL; + case ITEM_NET_BALL: + return BALL_NET; + case ITEM_NEST_BALL: + return BALL_NEST; + case ITEM_DIVE_BALL: + return BALL_DIVE; + case ITEM_DUSK_BALL: + return BALL_DUSK; + case ITEM_TIMER_BALL: + return BALL_TIMER; + case ITEM_QUICK_BALL: + return BALL_QUICK; + case ITEM_REPEAT_BALL: + return BALL_REPEAT; + case ITEM_LUXURY_BALL: + return BALL_LUXURY; + case ITEM_LEVEL_BALL: + return BALL_LEVEL; + case ITEM_LURE_BALL: + return BALL_LURE; + case ITEM_MOON_BALL: + return BALL_MOON; + case ITEM_FRIEND_BALL: + return BALL_FRIEND; + case ITEM_LOVE_BALL: + return BALL_LOVE; + case ITEM_FAST_BALL: + return BALL_FAST; + case ITEM_HEAVY_BALL: + return BALL_HEAVY; + case ITEM_DREAM_BALL: + return BALL_DREAM; + case ITEM_SAFARI_BALL: + return BALL_SAFARI; + case ITEM_SPORT_BALL: + return BALL_SPORT; + case ITEM_PARK_BALL: + return BALL_PARK; + case ITEM_BEAST_BALL: + return BALL_BEAST; + case ITEM_CHERISH_BALL: + return BALL_CHERISH; default: return BALL_POKE; } @@ -989,17 +1238,17 @@ static void SpriteCB_Ball_MonShrink_Step(struct Sprite *sprite) static void SpriteCB_Ball_Bounce(struct Sprite *sprite) { - s16 phase; - if (sprite->animEnded) { sprite->sState = 0; sprite->sAmplitude = 40; sprite->sPhase = 0; - phase = 0; - sprite->y += Cos(phase, 40); - sprite->y2 = -Cos(phase, sprite->sAmplitude); - sprite->callback = SpriteCB_Ball_Bounce_Step; + sprite->y += Cos(0, 40); + sprite->y2 = -Cos(0, sprite->sAmplitude); + if (IsCriticalCapture()) + sprite->callback = CB_CriticalCaptureThrownBallMovement; + else + sprite->callback = SpriteCB_Ball_Bounce_Step; } } @@ -1139,8 +1388,8 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite) switch (STATE(sprite->sState)) { - case BALL_ROLL_1: - // Rolling effect: every frame in the rotation, the sprite shifts 176/256 of a pixel. + case BALL_ROLL_1: + // Rolling effect: every frame in the rotation, the sprite shifts 176/256 of a pixel. if (gBattleSpritesDataPtr->animationData->ballSubpx > 255) { sprite->x2 += sprite->sDirection; @@ -1232,22 +1481,38 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite) case BALL_NEXT_MOVE: SHAKE_INC(sprite->sState); shakes = SHAKES(sprite->sState); - if (shakes == gBattleSpritesDataPtr->animationData->ballThrowCaseId) + if (IsCriticalCapture()) { - sprite->affineAnimPaused = TRUE; - sprite->callback = SpriteCB_Ball_Release; - } - else - { - if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && shakes == 3) + if (gBattleSpritesDataPtr->animationData->criticalCaptureSuccess) { sprite->callback = SpriteCB_Ball_Capture; sprite->affineAnimPaused = TRUE; } else { - sprite->sState++; // BALL_WAIT_NEXT_SHAKE sprite->affineAnimPaused = TRUE; + sprite->callback = SpriteCB_Ball_Release; + } + } + else + { + if (shakes == gBattleSpritesDataPtr->animationData->ballThrowCaseId) + { + sprite->affineAnimPaused = TRUE; + sprite->callback = SpriteCB_Ball_Release; + } + else + { + if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && shakes == 3) + { + sprite->callback = SpriteCB_Ball_Capture; + sprite->affineAnimPaused = TRUE; + } + else + { + sprite->sState++; // BALL_WAIT_NEXT_SHAKE + sprite->affineAnimPaused = TRUE; + } } } break; @@ -1319,7 +1584,7 @@ static void SpriteCB_Ball_Capture_Step(struct Sprite *sprite) else if (sprite->sTimer == 95) { gDoingBattleAnim = FALSE; - UpdateOamPriorityInAllHealthboxes(1); + UpdateOamPriorityInAllHealthboxes(1, FALSE); m4aMPlayAllStop(); PlaySE(MUS_RG_CAUGHT_INTRO); } @@ -1502,7 +1767,7 @@ static void SpriteCB_Ball_Release_Wait(struct Sprite *sprite) sprite->sFrame = 0; sprite->callback = DestroySpriteAfterOneFrame; gDoingBattleAnim = 0; - UpdateOamPriorityInAllHealthboxes(1); + UpdateOamPriorityInAllHealthboxes(1, FALSE); } } @@ -1544,7 +1809,7 @@ static void SpriteCB_Ball_Block_Step(struct Sprite *sprite) sprite->sFrame = 0; sprite->callback = DestroySpriteAfterOneFrame; gDoingBattleAnim = 0; - UpdateOamPriorityInAllHealthboxes(1); + UpdateOamPriorityInAllHealthboxes(1, FALSE); } } @@ -2018,24 +2283,24 @@ static void DestroyBallOpenAnimationParticle(struct Sprite *sprite) #define tPaletteHi data[11] #define tBallId data[15] -u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 battler, u32 selectedPalettes, u8 ballId) +u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 spritePalNum, u32 selectedPalettes, u8 ballId) { u8 taskId; taskId = CreateTask(Task_FadeMon_ToBallColor, 5); gTasks[taskId].tBallId = ballId; - gTasks[taskId].tPalOffset = battler; + gTasks[taskId].tPalOffset = spritePalNum; gTasks[taskId].tPaletteLo = selectedPalettes; gTasks[taskId].tPaletteHi = selectedPalettes >> 16; if (!unfadeLater) { - BlendPalette(battler * 16 + 0x100, 16, 0, gBallOpenFadeColors[ballId]); + BlendPalette(spritePalNum * 16 + 0x100, 16, 0, gBallOpenFadeColors[ballId]); gTasks[taskId].tdCoeff = 1; } else { - BlendPalette(battler * 16 + 0x100, 16, 16, gBallOpenFadeColors[ballId]); + BlendPalette(spritePalNum * 16 + 0x100, 16, 16, gBallOpenFadeColors[ballId]); gTasks[taskId].tCoeff = 16; gTasks[taskId].tdCoeff = -1; gTasks[taskId].func = Task_FadeMon_ToNormal; @@ -2227,7 +2492,7 @@ void TryShinyAnimation(u8 battler, struct Pokemon *mon) if (IsBattlerSpriteVisible(battler)) { - shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + shinyValue = GET_SHINY_VALUE(otId, personality); if (shinyValue < SHINY_ODDS) isShiny = TRUE; @@ -2268,7 +2533,7 @@ static void Task_ShinyStars(u8 taskId) } // Wait until the ball particles have despawned - if (gBattleSpritesDataPtr->animationData->numBallParticles) + if (gBattleSpritesDataPtr->animationData->numBallParticles) return; timer = gTasks[taskId].tStarTimer++; @@ -2408,7 +2673,7 @@ void AnimTask_FreePokeblockGfx(u8 taskId) static void SpriteCB_PokeBlock_Throw(struct Sprite *sprite) { - InitSpritePosToAnimAttacker(sprite, 0); + InitSpritePosToAnimAttacker(sprite, FALSE); sprite->sDuration = 30; sprite->sTargetX = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_X) + gBattleAnimArgs[2]; sprite->sTargetY = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_Y) + gBattleAnimArgs[3]; @@ -2440,7 +2705,7 @@ static void SpriteCB_PokeBlock_Arc(struct Sprite *sprite) } // Destroy after end of player animation -static void SpriteCB_ThrowPokeBlock_Free(struct Sprite *sprite) +static void SpriteCB_ThrowPokeBlock_Free(struct Sprite *sprite) { if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animEnded) { @@ -2479,6 +2744,12 @@ void AnimTask_GetTrappedMoveAnimId(u8 taskId) gBattleAnimArgs[0] = TRAP_ANIM_CLAMP; else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_SAND_TOMB) gBattleAnimArgs[0] = TRAP_ANIM_SAND_TOMB; + else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_MAGMA_STORM) + gBattleAnimArgs[0] = TRAP_ANIM_MAGMA_STORM; + else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_INFESTATION) + gBattleAnimArgs[0] = TRAP_ANIM_INFESTATION; + else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_SNAP_TRAP) + gBattleAnimArgs[0] = TRAP_ANIM_SNAP_TRAP; else gBattleAnimArgs[0] = TRAP_ANIM_BIND; @@ -2491,3 +2762,53 @@ void AnimTask_GetBattlersFromArg(u8 taskId) gBattleAnimTarget = gBattleSpritesDataPtr->animationData->animArg >> 8; DestroyAnimVisualTask(taskId); } + +bool32 IsCriticalCapture(void) +{ + return gBattleSpritesDataPtr->animationData->isCriticalCapture; +} + +static void CB_CriticalCaptureThrownBallMovement(struct Sprite *sprite) +{ + bool8 lastBounce = FALSE; + u8 maxBounces = 6; + int bounceCount = sprite->data[3] >> 8; + + if (bounceCount == 0) + PlaySE(SE_BALL); + + switch (sprite->data[3] & 0xFF) + { + case 0: + if (bounceCount < 3) + sprite->x2++; + + if (++sprite->data[5] >= 3) + sprite->data[3] += 257; + + break; + case 1: + if (bounceCount < 3 || sprite->x2 != 0) + sprite->x2--; + + if (--sprite->data[5] <= 0) + { + sprite->data[5] = 0; + sprite->data[3] &= -0x100; + } + + if (bounceCount >= maxBounces) + lastBounce = TRUE; + + break; + } + + if (lastBounce) + { + sprite->data[3] = 0; + sprite->data[4] = 40; //starting max height + sprite->data[5] = 0; + sprite->callback = SpriteCB_Ball_Bounce_Step; + } +} + diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index c20fbc9e27..096912c3b6 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -27,7 +27,7 @@ static void StartBlendAnimSpriteColor(u8, u32); static void AnimTask_BlendSpriteColor_Step2(u8); static void AnimTask_HardwarePaletteFade_Step(u8); static void AnimTask_TraceMonBlended_Step(u8); -static void AnimMonTrace(struct Sprite*); +static void AnimMonTrace(struct Sprite *); static void AnimTask_DrawFallingWhiteLinesOnAttacker_Step(u8); static void StatsChangeAnimation_Step1(u8); static void StatsChangeAnimation_Step2(u8); @@ -47,7 +47,7 @@ const u8 gBattleAnimBgCntGet[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFS void AnimTask_BlendBattleAnimPal(u8 taskId) { - u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gBattleAnimArgs[0]); + u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]); selectedPalettes |= GetBattleMonSpritePalettesMask((gBattleAnimArgs[0] >> 7) & 1, (gBattleAnimArgs[0] >> 8) & 1, (gBattleAnimArgs[0] >> 9) & 1, @@ -62,7 +62,7 @@ void AnimTask_BlendBattleAnimPalExclude(u8 taskId) u8 animBattlers[2]; animBattlers[1] = 0xFF; - selectedPalettes = UnpackSelectedBattleBgPalettes(1); + selectedPalettes = UnpackSelectedBattlePalettes(F_PAL_BG); switch (gBattleAnimArgs[0]) { case 2: @@ -97,7 +97,7 @@ void AnimTask_BlendBattleAnimPalExclude(u8 taskId) for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) { if (battler != animBattlers[0] && battler != animBattlers[1] && IsBattlerSpriteVisible(battler)) - selectedPalettes |= 0x10000 << AnimDummyReturnArg(battler); + selectedPalettes |= 0x10000 << GetSpritePalIdxByBattler(battler); } StartBlendAnimSpriteColor(taskId, selectedPalettes); @@ -105,7 +105,7 @@ void AnimTask_BlendBattleAnimPalExclude(u8 taskId) void AnimTask_SetCamouflageBlend(u8 taskId) { - u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gBattleAnimArgs[0]); + u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]); switch (gBattleTerrain) { case BATTLE_TERRAIN_GRASS: @@ -136,6 +136,7 @@ void AnimTask_SetCamouflageBlend(u8 taskId) gBattleAnimArgs[4] = RGB(31, 31, 31); break; case BATTLE_TERRAIN_PLAIN: + default: gBattleAnimArgs[4] = RGB(31, 31, 31); break; } @@ -267,7 +268,7 @@ static void AnimMonTrace(struct Sprite *sprite) else { gTasks[sprite->data[1]].data[sprite->data[2]]--; - obj_delete_but_dont_free_vram(sprite); + DestroySpriteWithActiveSheet(sprite); } } @@ -331,7 +332,7 @@ void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId) spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); newSpriteId = CreateInvisibleSpriteCopy(gBattleAnimAttacker, spriteId, species); GetBattleAnimBg1Data(&animBgData); - AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleAnimMaskTilemap_Curse, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleAnimMaskTilemap_Curse, FALSE); AnimLoadCompressedBgGfx(animBgData.bgId, gBattleAnimMaskImage_Curse, animBgData.tilesOffset); LoadPalette(sCurseLinesPalette, animBgData.paletteId * 16 + 1, 2); @@ -356,7 +357,7 @@ static void AnimTask_DrawFallingWhiteLinesOnAttacker_Step(u8 taskId) gBattle_BG1_Y += 64; if (++gTasks[taskId].data[11] == 4) { - ResetBattleAnimBg(0); + ResetBattleAnimBg(FALSE); gBattle_WIN0H = 0; gBattle_WIN0V = 0; SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR @@ -470,9 +471,9 @@ static void StatsChangeAnimation_Step2(u8 taskId) GetBattleAnimBg1Data(&animBgData); if (sAnimStatsChangeData->data[0] == 0) - AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask1_Tilemap, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask1_Tilemap, FALSE); else - AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask2_Tilemap, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask2_Tilemap, FALSE); AnimLoadCompressedBgGfx(animBgData.bgId, gBattleStatMask_Gfx, animBgData.tilesOffset); switch (sAnimStatsChangeData->data[1]) @@ -535,9 +536,9 @@ static void StatsChangeAnimation_Step2(u8 taskId) gTasks[taskId].func = StatsChangeAnimation_Step3; if (sAnimStatsChangeData->data[0] == 0) - PlaySE12WithPanning(SE_M_STAT_INCREASE, BattleAnimAdjustPanning2(-64)); + PlaySE12WithPanning(SE_M_STAT_INCREASE, BattleAnimAdjustPanning2(SOUND_PAN_ATTACKER)); else - PlaySE12WithPanning(SE_M_STAT_DECREASE, BattleAnimAdjustPanning2(-64)); + PlaySE12WithPanning(SE_M_STAT_DECREASE, BattleAnimAdjustPanning2(SOUND_PAN_ATTACKER)); } static void StatsChangeAnimation_Step3(u8 taskId) @@ -568,7 +569,7 @@ static void StatsChangeAnimation_Step3(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); if (gTasks[taskId].data[12] == 0) { - ResetBattleAnimBg(0); + ResetBattleAnimBg(FALSE); gTasks[taskId].data[15]++; } } @@ -594,8 +595,7 @@ static void StatsChangeAnimation_Step3(u8 taskId) if (gTasks[taskId].data[6] == 1) gSprites[gTasks[taskId].data[7]].oam.priority++; - Free(sAnimStatsChangeData); - sAnimStatsChangeData = NULL; + FREE_AND_SET_NULL(sAnimStatsChangeData); DestroyAnimVisualTask(taskId); break; } @@ -607,7 +607,7 @@ void AnimTask_Flash(u8 taskId) SetPalettesToColor(selectedPalettes, RGB_BLACK); gTasks[taskId].data[14] = selectedPalettes >> 16; - selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; + selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) & 0xFFFF; SetPalettesToColor(selectedPalettes, RGB_WHITEALPHA); gTasks[taskId].data[15] = selectedPalettes; @@ -821,7 +821,7 @@ void StartMonScrollingBgMask(u8 taskId, int unused, u16 scrollSpeed, u8 battler, spriteId2 = CreateInvisibleSpriteCopy(battler2, gBattlerSpriteIds[battler2], species); GetBattleAnimBg1Data(&animBgData); - AnimLoadCompressedBgTilemapHandleContest(&animBgData, tilemap, 0); + AnimLoadCompressedBgTilemapHandleContest(&animBgData, tilemap, FALSE); AnimLoadCompressedBgGfx(animBgData.bgId, gfx, animBgData.tilesOffset); LoadCompressedPalette(palette, animBgData.paletteId * 16, 32); @@ -870,7 +870,7 @@ static void UpdateMonScrollingBgMask(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); if (gTasks[taskId].data[12] == 0) { - ResetBattleAnimBg(0); + ResetBattleAnimBg(FALSE); gBattle_WIN0H = 0; gBattle_WIN0V = 0; SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR @@ -904,6 +904,12 @@ void AnimTask_GetBattleTerrain(u8 taskId) DestroyAnimVisualTask(taskId); } +void AnimTask_GetFieldTerrain(u8 taskId) +{ + gBattleAnimArgs[0] = gFieldStatuses & STATUS_FIELD_TERRAIN_ANY; + DestroyAnimVisualTask(taskId); +} + void AnimTask_AllocBackupPalBuffer(u8 taskId) { gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); @@ -923,7 +929,7 @@ void AnimTask_CopyPalUnfadedToBackup(u8 taskId) if (gBattleAnimArgs[0] == 0) { - selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); + selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); while ((selectedPalettes & 1) == 0) { selectedPalettes >>= 1; @@ -950,7 +956,7 @@ void AnimTask_CopyPalUnfadedFromBackup(u8 taskId) if (gBattleAnimArgs[0] == 0) { - selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); + selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); while ((selectedPalettes & 1) == 0) { selectedPalettes >>= 1; @@ -977,7 +983,7 @@ void AnimTask_CopyPalFadedToUnfaded(u8 taskId) if (gBattleAnimArgs[0] == 0) { - selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); + selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); while ((selectedPalettes & 1) == 0) { selectedPalettes >>= 1; @@ -1060,3 +1066,33 @@ static void AnimTask_WaitAndRestoreVisibility(u8 taskId) DestroyTask(taskId); } } + +void AnimTask_IsDoubleBattle(u8 taskId) +{ + gBattleAnimArgs[7] = (IsDoubleBattle() && !IsContest()); + DestroyAnimVisualTask(taskId); +} + +void AnimTask_CanBattlerSwitch(u8 taskId) +{ + if (gBattleTypeFlags & BATTLE_TYPE_ARENA) + gBattleAnimArgs[ARG_RET_ID] = FALSE; + else + gBattleAnimArgs[ARG_RET_ID] = CanBattlerSwitch(GetAnimBattlerId(gBattleAnimArgs[0])); + DestroyAnimVisualTask(taskId); +} + +void AnimTask_SetInvisible(u8 taskId) +{ + u32 battlerId = GetAnimBattlerId(gBattleAnimArgs[0]); + u32 spriteId = gBattlerSpriteIds[battlerId]; + + gSprites[spriteId].invisible = gBattleSpritesDataPtr->battlerData[battlerId].invisible = gBattleAnimArgs[1]; + DestroyAnimVisualTask(taskId); +} + +void AnimTask_SetAnimTargetToAttackerOpposite(u8 taskId) +{ + gBattleAnimTarget = BATTLE_OPPOSITE(gBattleAnimAttacker); + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index e0a78acf5d..48d1dc6d6a 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -21,13 +21,14 @@ static void AnimWaterBubbleProjectile_Step2(struct Sprite *); static void AnimWaterBubbleProjectile_Step3(struct Sprite *); static void AnimAuroraBeamRings(struct Sprite *); static void AnimAuroraBeamRings_Step(struct Sprite *); +void AnimFlyUpTarget(struct Sprite *); +static void AnimFlyUpTarget_Step(struct Sprite *); static void AnimToTargetInSinWave(struct Sprite *); static void AnimToTargetInSinWave_Step(struct Sprite *); static void AnimHydroCannonCharge(struct Sprite *); static void AnimHydroCannonCharge_Step(struct Sprite *); static void AnimHydroCannonBeam(struct Sprite *); static void AnimWaterGunDroplet(struct Sprite *); -static void AnimSmallBubblePair(struct Sprite *); static void AnimSmallBubblePair_Step(struct Sprite *); static void AnimSmallDriftingBubbles(struct Sprite *); static void AnimSmallDriftingBubbles_Step(struct Sprite *); @@ -36,7 +37,6 @@ static void AnimWaterSpoutRain(struct Sprite *); static void AnimWaterSpoutRainHit(struct Sprite *); static void AnimWaterSportDroplet(struct Sprite *); static void AnimWaterSportDroplet_Step(struct Sprite *); -static void AnimWaterPulseBubble(struct Sprite *); static void AnimWaterPulseBubble_Step(struct Sprite *); static void AnimWaterPulseRingBubble(struct Sprite *); static void AnimWaterPulseRing_Step(struct Sprite *); @@ -48,15 +48,17 @@ static void AnimTask_SurfWaveScanlineEffect(u8); static void AnimTask_WaterSpoutLaunch_Step(u8); static void AnimTask_WaterSpoutRain_Step(u8); static u8 GetWaterSpoutPowerForAnim(void); -static void CreateWaterSpoutLaunchDroplets(struct Task*, u8); -static void CreateWaterSpoutRainDroplet(struct Task*, u8); +static void CreateWaterSpoutLaunchDroplets(struct Task *, u8); +static void CreateWaterSpoutRainDroplet(struct Task *, u8); static void AnimTask_WaterSport_Step(u8); -static void CreateWaterSportDroplet(struct Task*); -static void CreateWaterPulseRingBubbles(struct Sprite*, int, int); +static void CreateWaterSportDroplet(struct Task *); +static void CreateWaterPulseRingBubbles(struct Sprite *, int, int); +static void AnimAquaTail(struct Sprite *sprite); +static void AnimKnockOffAquaTail(struct Sprite *sprite); +static void AnimKnockOffAquaTailStep(struct Sprite *sprite); -// Both unused -const u8 gUnknown_8593C80[] = INCBIN_U8("graphics/unknown/unknown_593C80.4bpp"); -const u8 gUnknown_8593FFC[] = INCBIN_U8("graphics/unknown/unknown_593FFC.bin"); +static const u8 sUnusedWater_Gfx[] = INCBIN_U8("graphics/battle_anims/unused/water_gfx.4bpp"); +static const u8 sUnusedWater[] = INCBIN_U8("graphics/battle_anims/unused/water.bin"); static const union AnimCmd sAnim_RainDrop[] = { @@ -106,7 +108,7 @@ static const union AnimCmd sAnim_WaterBubbleProjectile[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_WaterBubbleProjectile[] = +const union AnimCmd *const gAnims_WaterBubbleProjectile[] = { sAnim_WaterBubbleProjectile, }; @@ -116,7 +118,7 @@ const struct SpriteTemplate gWaterBubbleProjectileSpriteTemplate = .tileTag = ANIM_TAG_BUBBLE, .paletteTag = ANIM_TAG_BUBBLE, .oam = &gOamData_AffineNormal_ObjBlend_16x16, - .anims = sAnims_WaterBubbleProjectile, + .anims = gAnims_WaterBubbleProjectile, .images = NULL, .affineAnims = sAffineAnims_WaterBubbleProjectile, .callback = AnimWaterBubbleProjectile, @@ -188,6 +190,17 @@ const struct SpriteTemplate gHydroPumpOrbSpriteTemplate = .callback = AnimToTargetInSinWave, }; +const struct SpriteTemplate gWaterPledgeOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFlyUpTarget, +}; + const struct SpriteTemplate gMudShotOrbSpriteTemplate = { .tileTag = ANIM_TAG_BROWN_ORB, @@ -229,7 +242,7 @@ static const union AnimCmd sAnim_FlamethrowerFlame[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAnims_FlamethrowerFlame[] = +const union AnimCmd *const gAnims_FlamethrowerFlame[] = { sAnim_FlamethrowerFlame, }; @@ -239,12 +252,23 @@ const struct SpriteTemplate gFlamethrowerFlameSpriteTemplate = .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_FlamethrowerFlame, + .anims = gAnims_FlamethrowerFlame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimToTargetInSinWave, }; +const struct SpriteTemplate gFirePledgeSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlamethrowerFlame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFlyUpTarget, +}; + const struct SpriteTemplate gPsywaveRingSpriteTemplate = { .tileTag = ANIM_TAG_BLUE_RING, @@ -398,7 +422,7 @@ static const union AnimCmd sAnim_WeatherBallWaterDown[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_WaterPulseBubble[] = +const union AnimCmd *const gAnims_WaterPulseBubble[] = { sAnim_WaterPulseBubble_0, sAnim_WaterPulseBubble_1, @@ -446,7 +470,7 @@ const struct SpriteTemplate gWaterPulseBubbleSpriteTemplate = .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = sAnims_WaterPulseBubble, + .anims = gAnims_WaterPulseBubble, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimWaterPulseBubble, @@ -457,7 +481,7 @@ const struct SpriteTemplate gWaterPulseRingBubbleSpriteTemplate = .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, .oam = &gOamData_AffineNormal_ObjNormal_8x8, - .anims = sAnims_WaterPulseBubble, + .anims = gAnims_WaterPulseBubble, .images = NULL, .affineAnims = sAffineAnims_WaterPulseRingBubble, .callback = AnimWaterPulseRingBubble, @@ -474,6 +498,140 @@ const struct SpriteTemplate gWeatherBallWaterDownSpriteTemplate = .callback = AnimWeatherBallDown, }; +const union AffineAnimCmd gAquaTailHitAffineAnimCmd_1[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gAquaTailHitAffineAnimCmd_2[] = +{ + AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gAquaTailHitAffineAnimCmd_3[] = +{ + AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gAquaTailHitAffineAnimCmd_4[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gAquaTailHitAffineAnims[] = +{ + gAquaTailHitAffineAnimCmd_1, + gAquaTailHitAffineAnimCmd_2, + gAquaTailHitAffineAnimCmd_3, + gAquaTailHitAffineAnimCmd_4, +}; + +const union AnimCmd gKnockOffAquaTailAnimCmd[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gKnockOffAquaTailAnim[] = +{ + gKnockOffAquaTailAnimCmd, +}; + +const union AffineAnimCmd gKnockOffAquaTailAffineanimCmd_1[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -4, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gKnockOffAquaTailAffineanimCmd_2[] = +{ + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 4, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gKnockOffAquaTailAffineAnim[] = +{ + gKnockOffAquaTailAffineanimCmd_1, + gKnockOffAquaTailAffineanimCmd_2, +}; + +const struct SpriteTemplate gAquaTailKnockOffSpriteTemplate = +{ + .tileTag = ANIM_TAG_SLAM_HIT_2, + .paletteTag = ANIM_TAG_WATER_IMPACT, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gKnockOffAquaTailAnim, + .images = NULL, + .affineAnims = gKnockOffAquaTailAffineAnim, + .callback = AnimKnockOffAquaTail, +}; + +const struct SpriteTemplate gAquaTailHitSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_WATER_IMPACT, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAquaTailHitAffineAnims, + .callback = AnimAquaTail, +}; + +static void AnimAquaTail(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, 1); + else + InitSpritePosToAnimTarget(sprite, TRUE); + + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void AnimKnockOffAquaTail(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + sprite->x -= gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + sprite->data[0] = -11; + sprite->data[1] = 192; + StartSpriteAffineAnim(sprite, 1); + } + else + { + sprite->data[0] = 11; + sprite->data[1] = 192; + sprite->x += gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + } + + sprite->callback = AnimKnockOffAquaTailStep; +} + +static void AnimKnockOffAquaTailStep(struct Sprite *sprite) +{ + sprite->data[1] += sprite->data[0]; + sprite->data[1] &= 0xFF; + sprite->x2 = Cos(sprite->data[1], 20); + sprite->y2 = Sin(sprite->data[1], 20); + if (sprite->animEnded) + DestroyAnimSprite(sprite); + + sprite->data[2]++; +} + void AnimTask_CreateRaindrops(u8 taskId) { u8 x, y; @@ -518,23 +676,23 @@ static void AnimWaterBubbleProjectile(struct Sprite *sprite) if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->animPaused = TRUE; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->animPaused = TRUE; } if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[6]; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); spriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); sprite->data[5] = spriteId; @@ -596,9 +754,9 @@ static void AnimAuroraBeamRings(struct Sprite *sprite) unkArg = gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + unkArg; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + unkArg; sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; InitAnimLinearTranslation(sprite); sprite->callback = AnimAuroraBeamRings_Step; sprite->affineAnimPaused = TRUE; @@ -643,6 +801,27 @@ static void AnimTask_RotateAuroraRingColors_Step(u8 taskId) DestroyAnimVisualTask(taskId); } +void AnimFlyUpTarget(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->y2 += GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT) / 2; + sprite->y2 += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; //max y offset + sprite->data[1] = gBattleAnimArgs[3]; //speed + sprite->callback = AnimFlyUpTarget_Step; + sprite->callback(sprite); +} + +static void AnimFlyUpTarget_Step(struct Sprite *sprite) +{ + if(sprite->y2 <= sprite->data[0]) + { + DestroyAnimSprite(sprite); + return; + } + sprite->y2 -= sprite->data[1]; +} + // For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam) static void AnimToTargetInSinWave(struct Sprite *sprite) { @@ -651,9 +830,9 @@ static void AnimToTargetInSinWave(struct Sprite *sprite) InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = 30; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); sprite->data[5] = 0xD200 / sprite->data[0]; sprite->data[7] = gBattleAnimArgs[3]; @@ -706,8 +885,8 @@ static void AnimHydroCannonCharge(struct Sprite *sprite) { u8 priority; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); sprite->y2 = -10; priority = GetBattlerSpriteSubpriority(gBattleAnimAttacker); if (!IsContest()) @@ -753,14 +932,14 @@ static void AnimHydroCannonBeam(struct Sprite *sprite) else animType = FALSE; if ((u8)gBattleAnimArgs[5] == 0) - coordType = 3; + coordType = BATTLER_COORD_Y_PIC_OFFSET; else - coordType = 1; + coordType = BATTLER_COORD_Y; InitSpritePosToAnimAttacker(sprite, animType); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3]; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); @@ -777,7 +956,7 @@ static void AnimWaterGunDroplet(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -static void AnimSmallBubblePair(struct Sprite *sprite) +void AnimSmallBubblePair(struct Sprite *sprite) { if (gBattleAnimArgs[3] != ANIM_ATTACKER) InitSpritePosToAnimTarget(sprite, TRUE); @@ -822,13 +1001,26 @@ void AnimTask_CreateSurfWave(u8 taskId) } else { - AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_SurfContest, 1); + AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_SurfContest, TRUE); } AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Surf, animBg.tilesOffset); - if (gBattleAnimArgs[0] == 0) - LoadCompressedPalette(gBattleAnimBgPalette_Surf, animBg.paletteId * 16, 32); - else + switch (gBattleAnimArgs[0]) + { + case ANIM_SURF_PAL_SURF: + default: + if (B_NEW_SURF_PARTICLE_PALETTE == TRUE) + LoadCompressedPalette(gBattleAnimSpritePal_NewSurf, animBg.paletteId * 16, 32); + else + LoadCompressedPalette(gBattleAnimBgPalette_Surf, animBg.paletteId * 16, 32); + break; + case ANIM_SURF_PAL_MUDDY_WATER: LoadCompressedPalette(gBattleAnimBackgroundImageMuddyWater_Pal, animBg.paletteId * 16, 32); + break; + case ANIM_SURF_PAL_SLUDGE_WAVE: + LoadCompressedPalette(gBattleAnimBgPalette_SludgeWave, animBg.paletteId * 16, 32); + break; + } + taskId2 = CreateTask(AnimTask_SurfWaveScanlineEffect, gTasks[taskId].priority + 1); gTasks[taskId].data[15] = taskId2; gTasks[taskId2].data[0] = 0; @@ -961,7 +1153,7 @@ static void AnimTask_SurfWaveScanlineEffect(u8 taskId) else gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2]; - params.dmaDest = (vu16 *)REG_ADDR_BLDALPHA; + params.dmaDest = ®_BLDALPHA; params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; params.initState = 1; params.unused9 = 0; @@ -1168,8 +1360,8 @@ static u8 GetWaterSpoutPowerForAnim(void) static void CreateWaterSpoutLaunchDroplets(struct Task *task, u8 taskId) { s16 i; - s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); s16 trigIndex = 172; u8 subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; s16 increment = 4 - task->data[1]; @@ -1342,8 +1534,8 @@ void AnimTask_WaterSport(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); task->data[7] = (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) ? 1 : -1; if (IsContest()) task->data[7] *= -1; @@ -1478,7 +1670,7 @@ static void AnimWaterSportDroplet_Step(struct Sprite *sprite) } } -static void AnimWaterPulseBubble(struct Sprite *sprite) +void AnimWaterPulseBubble(struct Sprite *sprite) { sprite->x = gBattleAnimArgs[0]; sprite->y = gBattleAnimArgs[1]; @@ -1515,8 +1707,8 @@ static void AnimWaterPulseRingBubble(struct Sprite *sprite) void AnimWaterPulseRing(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); - sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[3] = gBattleAnimArgs[2]; sprite->data[4] = gBattleAnimArgs[3]; sprite->callback = AnimWaterPulseRing_Step; @@ -1549,7 +1741,7 @@ static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yD s16 randomSomethingY; s16 randomSomethingX; u8 spriteId; - + something = sprite->data[0] / 2; combinedX = sprite->x + sprite->x2; combinedY = sprite->y + sprite->y2; diff --git a/src/battle_arena.c b/src/battle_arena.c index 8d31230791..e0a2c5e748 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -28,7 +28,6 @@ #include "constants/moves.h" #include "constants/rgb.h" -// This file's functions. static void InitArenaChallenge(void); static void GetArenaData(void); static void SetArenaData(void); @@ -36,13 +35,28 @@ static void SaveArenaChallenge(void); static void SetArenaPrize(void); static void GiveArenaPrize(void); static void BufferArenaOpponentName(void); -static void SpriteCb_JudgmentIcon(struct Sprite *sprite); +static void SpriteCB_JudgmentIcon(struct Sprite *sprite); static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler); -// Const rom data. -static const s8 sMindRatings[] = +#define JUDGEMENT_STATE_FINISHED 8 + +#define TAG_JUDGEMENT_ICON 1000 + +enum { + ANIM_ICON_X, // Player lost + ANIM_ICON_TRIANGLE, // Tie + ANIM_ICON_CIRCLE, // Player won + ANIM_ICON_LINE, // Line segment for separating the score total at the bottom +}; + +// This table holds the number of points to add to the 'mind' score for each move. +// All moves with power != 0 give 1 point, with the following exceptions: +// - Counter, Mirror Coat, and Bide give 0 points +// - Fake Out subtracts 1 point +// All moves with power == 0 give 0 points, with the following exceptions: +// - Protect, Detect, and Endure subtract 1 point +static const s8 sMindRatings[MOVES_COUNT] = { - [MOVE_NONE] = 0, [MOVE_POUND] = 1, [MOVE_KARATE_CHOP] = 1, [MOVE_DOUBLE_SLAP] = 1, @@ -56,11 +70,9 @@ static const s8 sMindRatings[] = [MOVE_VISE_GRIP] = 1, [MOVE_GUILLOTINE] = 1, [MOVE_RAZOR_WIND] = 1, - [MOVE_SWORDS_DANCE] = 0, [MOVE_CUT] = 1, [MOVE_GUST] = 1, [MOVE_WING_ATTACK] = 1, - [MOVE_WHIRLWIND] = 0, [MOVE_FLY] = 1, [MOVE_BIND] = 1, [MOVE_SLAM] = 1, @@ -70,7 +82,6 @@ static const s8 sMindRatings[] = [MOVE_MEGA_KICK] = 1, [MOVE_JUMP_KICK] = 1, [MOVE_ROLLING_KICK] = 1, - [MOVE_SAND_ATTACK] = 0, [MOVE_HEADBUTT] = 1, [MOVE_HORN_ATTACK] = 1, [MOVE_FURY_ATTACK] = 1, @@ -81,22 +92,14 @@ static const s8 sMindRatings[] = [MOVE_TAKE_DOWN] = 1, [MOVE_THRASH] = 1, [MOVE_DOUBLE_EDGE] = 1, - [MOVE_TAIL_WHIP] = 0, [MOVE_POISON_STING] = 1, [MOVE_TWINEEDLE] = 1, [MOVE_PIN_MISSILE] = 1, - [MOVE_LEER] = 0, [MOVE_BITE] = 1, - [MOVE_GROWL] = 0, - [MOVE_ROAR] = 0, - [MOVE_SING] = 0, - [MOVE_SUPERSONIC] = 0, [MOVE_SONIC_BOOM] = 1, - [MOVE_DISABLE] = 0, [MOVE_ACID] = 1, [MOVE_EMBER] = 1, [MOVE_FLAMETHROWER] = 1, - [MOVE_MIST] = 0, [MOVE_WATER_GUN] = 1, [MOVE_HYDRO_PUMP] = 1, [MOVE_SURF] = 1, @@ -110,58 +113,27 @@ static const s8 sMindRatings[] = [MOVE_DRILL_PECK] = 1, [MOVE_SUBMISSION] = 1, [MOVE_LOW_KICK] = 1, - [MOVE_COUNTER] = 0, [MOVE_SEISMIC_TOSS] = 1, [MOVE_STRENGTH] = 1, [MOVE_ABSORB] = 1, [MOVE_MEGA_DRAIN] = 1, - [MOVE_LEECH_SEED] = 0, - [MOVE_GROWTH] = 0, [MOVE_RAZOR_LEAF] = 1, [MOVE_SOLAR_BEAM] = 1, - [MOVE_POISON_POWDER] = 0, - [MOVE_STUN_SPORE] = 0, - [MOVE_SLEEP_POWDER] = 0, [MOVE_PETAL_DANCE] = 1, - [MOVE_STRING_SHOT] = 0, [MOVE_DRAGON_RAGE] = 1, [MOVE_FIRE_SPIN] = 1, [MOVE_THUNDER_SHOCK] = 1, [MOVE_THUNDERBOLT] = 1, - [MOVE_THUNDER_WAVE] = 0, [MOVE_THUNDER] = 1, [MOVE_ROCK_THROW] = 1, [MOVE_EARTHQUAKE] = 1, [MOVE_FISSURE] = 1, [MOVE_DIG] = 1, - [MOVE_TOXIC] = 0, [MOVE_CONFUSION] = 1, [MOVE_PSYCHIC] = 1, - [MOVE_HYPNOSIS] = 0, - [MOVE_MEDITATE] = 0, - [MOVE_AGILITY] = 0, [MOVE_QUICK_ATTACK] = 1, [MOVE_RAGE] = 1, - [MOVE_TELEPORT] = 0, [MOVE_NIGHT_SHADE] = 1, - [MOVE_MIMIC] = 0, - [MOVE_SCREECH] = 0, - [MOVE_DOUBLE_TEAM] = 0, - [MOVE_RECOVER] = 0, - [MOVE_HARDEN] = 0, - [MOVE_MINIMIZE] = 0, - [MOVE_SMOKESCREEN] = 0, - [MOVE_CONFUSE_RAY] = 0, - [MOVE_WITHDRAW] = 0, - [MOVE_DEFENSE_CURL] = 0, - [MOVE_BARRIER] = 0, - [MOVE_LIGHT_SCREEN] = 0, - [MOVE_HAZE] = 0, - [MOVE_REFLECT] = 0, - [MOVE_FOCUS_ENERGY] = 0, - [MOVE_BIDE] = 0, - [MOVE_METRONOME] = 0, - [MOVE_MIRROR_MOVE] = 0, [MOVE_SELF_DESTRUCT] = 1, [MOVE_EGG_BOMB] = 1, [MOVE_LICK] = 1, @@ -175,118 +147,67 @@ static const s8 sMindRatings[] = [MOVE_SKULL_BASH] = 1, [MOVE_SPIKE_CANNON] = 1, [MOVE_CONSTRICT] = 1, - [MOVE_AMNESIA] = 0, - [MOVE_KINESIS] = 0, - [MOVE_SOFT_BOILED] = 0, [MOVE_HIGH_JUMP_KICK] = 1, - [MOVE_GLARE] = 0, [MOVE_DREAM_EATER] = 1, - [MOVE_POISON_GAS] = 0, [MOVE_BARRAGE] = 1, [MOVE_LEECH_LIFE] = 1, - [MOVE_LOVELY_KISS] = 0, [MOVE_SKY_ATTACK] = 1, - [MOVE_TRANSFORM] = 0, [MOVE_BUBBLE] = 1, [MOVE_DIZZY_PUNCH] = 1, - [MOVE_SPORE] = 0, - [MOVE_FLASH] = 0, [MOVE_PSYWAVE] = 1, - [MOVE_SPLASH] = 0, - [MOVE_ACID_ARMOR] = 0, [MOVE_CRABHAMMER] = 1, [MOVE_EXPLOSION] = 1, [MOVE_FURY_SWIPES] = 1, [MOVE_BONEMERANG] = 1, - [MOVE_REST] = 0, [MOVE_ROCK_SLIDE] = 1, [MOVE_HYPER_FANG] = 1, - [MOVE_SHARPEN] = 0, - [MOVE_CONVERSION] = 0, [MOVE_TRI_ATTACK] = 1, [MOVE_SUPER_FANG] = 1, [MOVE_SLASH] = 1, - [MOVE_SUBSTITUTE] = 0, [MOVE_STRUGGLE] = 1, - [MOVE_SKETCH] = 0, [MOVE_TRIPLE_KICK] = 1, [MOVE_THIEF] = 1, - [MOVE_SPIDER_WEB] = 0, - [MOVE_MIND_READER] = 0, - [MOVE_NIGHTMARE] = 0, [MOVE_FLAME_WHEEL] = 1, [MOVE_SNORE] = 1, - [MOVE_CURSE] = 0, [MOVE_FLAIL] = 1, - [MOVE_CONVERSION_2] = 0, [MOVE_AEROBLAST] = 1, - [MOVE_COTTON_SPORE] = 0, [MOVE_REVERSAL] = 1, - [MOVE_SPITE] = 0, [MOVE_POWDER_SNOW] = 1, [MOVE_PROTECT] = -1, [MOVE_MACH_PUNCH] = 1, - [MOVE_SCARY_FACE] = 0, [MOVE_FEINT_ATTACK] = 1, - [MOVE_SWEET_KISS] = 0, - [MOVE_BELLY_DRUM] = 0, [MOVE_SLUDGE_BOMB] = 1, [MOVE_MUD_SLAP] = 1, [MOVE_OCTAZOOKA] = 1, - [MOVE_SPIKES] = 0, [MOVE_ZAP_CANNON] = 1, - [MOVE_FORESIGHT] = 0, - [MOVE_DESTINY_BOND] = 0, - [MOVE_PERISH_SONG] = 0, [MOVE_ICY_WIND] = 1, [MOVE_DETECT] = -1, [MOVE_BONE_RUSH] = 1, - [MOVE_LOCK_ON] = 0, [MOVE_OUTRAGE] = 1, - [MOVE_SANDSTORM] = 0, [MOVE_GIGA_DRAIN] = 1, [MOVE_ENDURE] = -1, - [MOVE_CHARM] = 0, [MOVE_ROLLOUT] = 1, [MOVE_FALSE_SWIPE] = 1, - [MOVE_SWAGGER] = 0, - [MOVE_MILK_DRINK] = 0, [MOVE_SPARK] = 1, [MOVE_FURY_CUTTER] = 1, [MOVE_STEEL_WING] = 1, - [MOVE_MEAN_LOOK] = 0, - [MOVE_ATTRACT] = 0, - [MOVE_SLEEP_TALK] = 0, - [MOVE_HEAL_BELL] = 0, [MOVE_RETURN] = 1, [MOVE_PRESENT] = 1, [MOVE_FRUSTRATION] = 1, - [MOVE_SAFEGUARD] = 0, - [MOVE_PAIN_SPLIT] = 0, [MOVE_SACRED_FIRE] = 1, [MOVE_MAGNITUDE] = 1, [MOVE_DYNAMIC_PUNCH] = 1, [MOVE_MEGAHORN] = 1, [MOVE_DRAGON_BREATH] = 1, - [MOVE_BATON_PASS] = 0, - [MOVE_ENCORE] = 0, [MOVE_PURSUIT] = 1, [MOVE_RAPID_SPIN] = 1, - [MOVE_SWEET_SCENT] = 0, [MOVE_IRON_TAIL] = 1, [MOVE_METAL_CLAW] = 1, [MOVE_VITAL_THROW] = 1, - [MOVE_MORNING_SUN] = 0, - [MOVE_SYNTHESIS] = 0, - [MOVE_MOONLIGHT] = 0, [MOVE_HIDDEN_POWER] = 1, [MOVE_CROSS_CHOP] = 1, [MOVE_TWISTER] = 1, - [MOVE_RAIN_DANCE] = 0, - [MOVE_SUNNY_DAY] = 0, [MOVE_CRUNCH] = 1, - [MOVE_MIRROR_COAT] = 0, - [MOVE_PSYCH_UP] = 0, [MOVE_EXTREME_SPEED] = 1, [MOVE_ANCIENT_POWER] = 1, [MOVE_SHADOW_BALL] = 1, @@ -296,56 +217,25 @@ static const s8 sMindRatings[] = [MOVE_BEAT_UP] = 1, [MOVE_FAKE_OUT] = -1, [MOVE_UPROAR] = 1, - [MOVE_STOCKPILE] = 0, [MOVE_SPIT_UP] = 1, - [MOVE_SWALLOW] = 0, [MOVE_HEAT_WAVE] = 1, - [MOVE_HAIL] = 0, - [MOVE_TORMENT] = 0, - [MOVE_FLATTER] = 0, - [MOVE_WILL_O_WISP] = 0, - [MOVE_MEMENTO] = 0, [MOVE_FACADE] = 1, [MOVE_FOCUS_PUNCH] = 1, [MOVE_SMELLING_SALTS] = 1, - [MOVE_FOLLOW_ME] = 0, - [MOVE_NATURE_POWER] = 0, - [MOVE_CHARGE] = 0, - [MOVE_TAUNT] = 0, - [MOVE_HELPING_HAND] = 0, - [MOVE_TRICK] = 0, - [MOVE_ROLE_PLAY] = 0, - [MOVE_WISH] = 0, - [MOVE_ASSIST] = 0, - [MOVE_INGRAIN] = 0, [MOVE_SUPERPOWER] = 1, - [MOVE_MAGIC_COAT] = 0, - [MOVE_RECYCLE] = 0, [MOVE_REVENGE] = 1, [MOVE_BRICK_BREAK] = 1, - [MOVE_YAWN] = 0, [MOVE_KNOCK_OFF] = 1, [MOVE_ENDEAVOR] = 1, [MOVE_ERUPTION] = 1, - [MOVE_SKILL_SWAP] = 0, - [MOVE_IMPRISON] = 0, - [MOVE_REFRESH] = 0, - [MOVE_GRUDGE] = 0, - [MOVE_SNATCH] = 0, [MOVE_SECRET_POWER] = 1, [MOVE_DIVE] = 1, [MOVE_ARM_THRUST] = 1, - [MOVE_CAMOUFLAGE] = 0, - [MOVE_TAIL_GLOW] = 0, [MOVE_LUSTER_PURGE] = 1, [MOVE_MIST_BALL] = 1, - [MOVE_FEATHER_DANCE] = 0, - [MOVE_TEETER_DANCE] = 0, [MOVE_BLAZE_KICK] = 1, - [MOVE_MUD_SPORT] = 0, [MOVE_ICE_BALL] = 1, [MOVE_NEEDLE_ARM] = 1, - [MOVE_SLACK_OFF] = 0, [MOVE_HYPER_VOICE] = 1, [MOVE_POISON_FANG] = 1, [MOVE_CRUSH_CLAW] = 1, @@ -354,17 +244,10 @@ static const s8 sMindRatings[] = [MOVE_METEOR_MASH] = 1, [MOVE_ASTONISH] = 1, [MOVE_WEATHER_BALL] = 1, - [MOVE_AROMATHERAPY] = 0, - [MOVE_FAKE_TEARS] = 0, [MOVE_AIR_CUTTER] = 1, [MOVE_OVERHEAT] = 1, - [MOVE_ODOR_SLEUTH] = 0, [MOVE_ROCK_TOMB] = 1, [MOVE_SILVER_WIND] = 1, - [MOVE_METAL_SOUND] = 0, - [MOVE_GRASS_WHISTLE] = 0, - [MOVE_TICKLE] = 0, - [MOVE_COSMIC_POWER] = 0, [MOVE_WATER_SPOUT] = 1, [MOVE_SIGNAL_BEAM] = 1, [MOVE_SHADOW_PUNCH] = 1, @@ -376,22 +259,15 @@ static const s8 sMindRatings[] = [MOVE_BULLET_SEED] = 1, [MOVE_AERIAL_ACE] = 1, [MOVE_ICICLE_SPEAR] = 1, - [MOVE_IRON_DEFENSE] = 0, - [MOVE_BLOCK] = 0, - [MOVE_HOWL] = 0, [MOVE_DRAGON_CLAW] = 1, [MOVE_FRENZY_PLANT] = 1, - [MOVE_BULK_UP] = 0, [MOVE_BOUNCE] = 1, [MOVE_MUD_SHOT] = 1, [MOVE_POISON_TAIL] = 1, [MOVE_COVET] = 1, [MOVE_VOLT_TACKLE] = 1, [MOVE_MAGICAL_LEAF] = 1, - [MOVE_WATER_SPORT] = 0, - [MOVE_CALM_MIND] = 0, [MOVE_LEAF_BLADE] = 1, - [MOVE_DRAGON_DANCE] = 0, [MOVE_ROCK_BLAST] = 1, [MOVE_SHOCK_WAVE] = 1, [MOVE_WATER_PULSE] = 1, @@ -399,14 +275,12 @@ static const s8 sMindRatings[] = [MOVE_PSYCHO_BOOST] = 1, }; -#define TAG_JUDGEMENT_ICON 1000 - -static const struct OamData sJudgementIconOamData = +static const struct OamData sOam_JudgementIcon = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -418,47 +292,47 @@ static const struct OamData sJudgementIconOamData = .affineParam = 0 }; -static const union AnimCmd sJudgementIconAnimCmd0[] = +static const union AnimCmd sAnim_JudgementIcon_X[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END }; -static const union AnimCmd sJudgementIconAnimCmd1[] = +static const union AnimCmd sAnim_JudgementIcon_Triangle[] = { ANIMCMD_FRAME(4, 1), ANIMCMD_END }; -static const union AnimCmd sJudgementIconAnimCmd2[] = +static const union AnimCmd sAnim_JudgementIcon_Circle[] = { ANIMCMD_FRAME(8, 1), ANIMCMD_END }; -static const union AnimCmd sJudgementIconAnimCmd3[] = +static const union AnimCmd sAnim_JudgementIcon_Line[] = { ANIMCMD_FRAME(12, 1), ANIMCMD_END }; -static const union AnimCmd *const sJudgementIconAnimCmds[] = +static const union AnimCmd *const sAnims_JudgementIcon[] = { - sJudgementIconAnimCmd0, - sJudgementIconAnimCmd1, - sJudgementIconAnimCmd2, - sJudgementIconAnimCmd3 + [ANIM_ICON_X] = sAnim_JudgementIcon_X, + [ANIM_ICON_TRIANGLE] = sAnim_JudgementIcon_Triangle, + [ANIM_ICON_CIRCLE] = sAnim_JudgementIcon_Circle, + [ANIM_ICON_LINE] = sAnim_JudgementIcon_Line, }; static const struct SpriteTemplate sSpriteTemplate_JudgmentIcon = { .tileTag = TAG_JUDGEMENT_ICON, - .paletteTag = 0xFFFF, - .oam = &sJudgementIconOamData, - .anims = sJudgementIconAnimCmds, + .paletteTag = TAG_NONE, + .oam = &sOam_JudgementIcon, + .anims = sAnims_JudgementIcon, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_JudgmentIcon, + .callback = SpriteCB_JudgmentIcon, }; static const struct CompressedSpriteSheet sBattleArenaJudgementSymbolsSpriteSheet[] = @@ -501,7 +375,6 @@ static const u16 sLongStreakPrizeItems[] = ITEM_CHOICE_BAND, }; -// code void CallBattleArenaFunction(void) { sArenaFunctions[gSpecialVar_0x8004](); @@ -510,12 +383,12 @@ void CallBattleArenaFunction(void) u8 BattleArena_ShowJudgmentWindow(u8 *state) { int i; - u8 ret = 0; + u8 result = ARENA_RESULT_RUNNING; switch (*state) { case 0: BeginNormalPaletteFade(0x7FFFFF1C, 4, 0, 8, RGB_BLACK); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WININ, (WININ_WIN0_ALL & ~WININ_WIN0_BG0) | WININ_WIN1_ALL); LoadCompressedSpriteSheet(sBattleArenaJudgementSymbolsSpriteSheet); LoadCompressedPalette(gBattleArenaJudgementSymbolsPalette, 0x1F0, 0x20); gBattle_WIN0H = 0xFF; @@ -537,28 +410,30 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state) gBattleTextBuff2[0] = CHAR_0; gBattleTextBuff2[1] = EOS; BattleStringExpandPlaceholdersToDisplayedString(gText_PlayerMon1Name); - BattlePutTextOnWindow(gDisplayedStringBattle, 15); - BattlePutTextOnWindow(gText_Vs, 16); + BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_PLAYER_NAME); + BattlePutTextOnWindow(gText_Vs, ARENA_WIN_VS); BattleStringExpandPlaceholdersToDisplayedString(gText_OpponentMon1Name); - BattlePutTextOnWindow(gDisplayedStringBattle, 17); - BattlePutTextOnWindow(gText_Mind, 18); - BattlePutTextOnWindow(gText_Skill, 19); - BattlePutTextOnWindow(gText_Body, 20); + BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_OPPONENT_NAME); + BattlePutTextOnWindow(gText_Mind, ARENA_WIN_MIND); + BattlePutTextOnWindow(gText_Skill, ARENA_WIN_SKILL); + BattlePutTextOnWindow(gText_Body, ARENA_WIN_BODY); BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement); - BattlePutTextOnWindow(gDisplayedStringBattle, 21); + BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGEMENT_TITLE); (*state)++; } break; case 3: if (!IsDma3ManagerBusyWithBgCopy()) { - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_ALL | WININ_WIN1_ALL); + + // Create dividing line for the the score totals at the bottom for (i = 0; i < 8; i++) { u8 spriteId = CreateSprite(&sSpriteTemplate_JudgmentIcon, 64 + i * 16, 84, 0); - StartSpriteAnim(&gSprites[spriteId], 3); + StartSpriteAnim(&gSprites[spriteId], ANIM_ICON_LINE); } - ret = 1; + result = ARENA_RESULT_STEP_DONE; (*state)++; } break; @@ -567,69 +442,70 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state) ShowJudgmentSprite(80, 40, ARENA_CATEGORY_MIND, B_POSITION_PLAYER_LEFT); ShowJudgmentSprite(160, 40, ARENA_CATEGORY_MIND, B_POSITION_OPPONENT_LEFT); BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement); - BattlePutTextOnWindow(gDisplayedStringBattle, 21); + BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGEMENT_TITLE); (*state)++; - ret = 1; + result = ARENA_RESULT_STEP_DONE; break; case 5: PlaySE(SE_ARENA_TIMEUP1); ShowJudgmentSprite(80, 56, ARENA_CATEGORY_SKILL, B_POSITION_PLAYER_LEFT); ShowJudgmentSprite(160, 56, ARENA_CATEGORY_SKILL, B_POSITION_OPPONENT_LEFT); BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement); - BattlePutTextOnWindow(gDisplayedStringBattle, 21); + BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGEMENT_TITLE); (*state)++; - ret = 1; + result = ARENA_RESULT_STEP_DONE; break; case 6: PlaySE(SE_ARENA_TIMEUP1); ShowJudgmentSprite(80, 72, ARENA_CATEGORY_BODY, B_POSITION_PLAYER_LEFT); ShowJudgmentSprite(160, 72, ARENA_CATEGORY_BODY, B_POSITION_OPPONENT_LEFT); BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement); - BattlePutTextOnWindow(gDisplayedStringBattle, 21); + BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGEMENT_TITLE); (*state)++; - ret = 1; + result = ARENA_RESULT_STEP_DONE; break; case 7: PlaySE(SE_ARENA_TIMEUP2); if (gBattleTextBuff1[0] > gBattleTextBuff2[0]) { - ret = 2; + result = ARENA_RESULT_PLAYER_WON; gBattleScripting.battler = 0; } else if (gBattleTextBuff1[0] < gBattleTextBuff2[0]) { - ret = 3; + result = ARENA_RESULT_PLAYER_LOST; gBattleScripting.battler = 1; } else { - ret = 4; + result = ARENA_RESULT_TIE; } (*state)++; break; - case 8: + case JUDGEMENT_STATE_FINISHED: + // Finishing this state is the indicator to SpriteCB_JudgmentIcon that its safe to destroy the judgement icon sprites (*state)++; break; - case 9: - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + case JUDGEMENT_STATE_FINISHED + 1: + SetGpuReg(REG_OFFSET_WININ, (WININ_WIN0_ALL & ~WININ_WIN0_BG0) | WININ_WIN1_ALL); HandleBattleWindow(5, 0, 24, 13, WINDOW_CLEAR); CopyBgTilemapBufferToVram(0); - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 256); BeginNormalPaletteFade(0x7FFFFF1C, 4, 8, 0, RGB_BLACK); (*state)++; break; - case 10: + case JUDGEMENT_STATE_FINISHED + 2: if (!gPaletteFade.active) { - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_ALL | WININ_WIN1_ALL); FreeSpriteTilesByTag(TAG_JUDGEMENT_ICON); - ret = 1; + result = ARENA_RESULT_STEP_DONE; (*state)++; } break; } - return ret; + return result; } static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler) @@ -659,7 +535,8 @@ static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler) if (pointsPlayer > pointsOpponent) { - animNum = 2; + animNum = ANIM_ICON_CIRCLE; + // +2 to score total for winning if (battler != 0) gBattleTextBuff2[0] += 2; else @@ -667,7 +544,8 @@ static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler) } else if (pointsPlayer == pointsOpponent) { - animNum = 1; + animNum = ANIM_ICON_TRIANGLE; + // +1 to score total for a tie if (battler != 0) gBattleTextBuff2[0] += 1; else @@ -675,16 +553,16 @@ static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler) } else { - animNum = 0; + animNum = ANIM_ICON_X; } pointsPlayer = CreateSprite(&sSpriteTemplate_JudgmentIcon, x, y, 0); StartSpriteAnim(&gSprites[pointsPlayer], animNum); } -static void SpriteCb_JudgmentIcon(struct Sprite *sprite) +static void SpriteCB_JudgmentIcon(struct Sprite *sprite) { - if (gBattleCommunication[0] > 8) + if (gBattleCommunication[0] > JUDGEMENT_STATE_FINISHED) DestroySprite(sprite); } @@ -704,8 +582,7 @@ void BattleArena_InitPoints(void) void BattleArena_AddMindPoints(u8 battler) { - s8 *mindPoints = gBattleStruct->arenaMindPoints; - mindPoints[battler] += sMindRatings[gCurrentMove]; + gBattleStruct->arenaMindPoints[battler] += sMindRatings[gCurrentMove]; } void BattleArena_AddSkillPoints(u8 battler) @@ -722,7 +599,7 @@ void BattleArena_AddSkillPoints(u8 battler) } else if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { - if (!(gMoveResultFlags & MOVE_RESULT_MISSED) || gBattleCommunication[6] != 1) + if (!(gMoveResultFlags & MOVE_RESULT_MISSED) || gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED) skillPoints[battler] -= 2; } else if ((gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) && (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE)) @@ -744,7 +621,7 @@ void BattleArena_AddSkillPoints(u8 battler) } } -void BattleArena_DeductMindPoints(u8 battler, u16 stringId) +void BattleArena_DeductSkillPoints(u8 battler, u16 stringId) { s8 *skillPoints = gBattleStruct->arenaSkillPoints; @@ -801,7 +678,7 @@ static void InitArenaChallenge(void) if (!isCurrent) gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0; - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); gTrainerBattleOpponent_A = 0; } @@ -917,7 +794,7 @@ void DrawArenaRefereeTextBox(void) FillBgTilemapBufferRect(0, 0x836, 29, 19, 1, 1, palNum); } -void RemoveArenaRefereeTextBox(void) +void EraseArenaRefereeTextBox(void) { u8 width; u8 height; diff --git a/src/battle_bg.c b/src/battle_bg.c index 0ad1265090..3965be2eab 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "battle_bg.h" #include "battle_main.h" #include "battle_message.h" @@ -23,7 +24,9 @@ #include "constants/map_types.h" #include "constants/songs.h" #include "constants/trainers.h" +#include "constants/battle_anim.h" +#if !P_ENABLE_DEBUG struct BattleBackground { const void *tileset; @@ -32,6 +35,7 @@ struct BattleBackground const void *entryTilemap; const void *palette; }; +#endif // .rodata static const u16 sUnrefArray[] = {0x0300, 0x0000}; //OamData? @@ -41,7 +45,7 @@ static const struct OamData sVsLetter_V_OamData = .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -58,7 +62,7 @@ static const struct OamData sVsLetter_S_OamData = .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -159,9 +163,9 @@ const struct BgTemplate gBattleBgTemplates[] = }, }; -static const struct WindowTemplate gStandardBattleWindowTemplates[] = +static const struct WindowTemplate sStandardBattleWindowTemplates[] = { - { // 0 Standard battle message + [B_WIN_MSG] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 15, @@ -170,7 +174,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 0, .baseBlock = 0x0090, }, - { // 1 "What will (pokemon) do?" + [B_WIN_ACTION_PROMPT] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 35, @@ -179,7 +183,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 0, .baseBlock = 0x01c0, }, - { // 2 "Fight/Pokemon/Bag/Run" + [B_WIN_ACTION_MENU] = { .bg = 0, .tilemapLeft = 17, .tilemapTop = 35, @@ -188,43 +192,43 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0190, }, - { // 3 Top left move + [B_WIN_MOVE_NAME_1] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 55, - .width = 8, + .width = 12, //for z move names .height = 2, .paletteNum = 5, .baseBlock = 0x0300, }, - { // 4 Top right move + [B_WIN_MOVE_NAME_2] = { .bg = 0, .tilemapLeft = 11, .tilemapTop = 55, .width = 8, .height = 2, .paletteNum = 5, - .baseBlock = 0x0310, + .baseBlock = 0x0318, }, - { // 5 Bottom left move + [B_WIN_MOVE_NAME_3] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 57, .width = 8, .height = 2, .paletteNum = 5, - .baseBlock = 0x0320, + .baseBlock = 0x0328, }, - { // 6 Bottom right move + [B_WIN_MOVE_NAME_4] = { .bg = 0, .tilemapLeft = 11, .tilemapTop = 57, .width = 8, .height = 2, .paletteNum = 5, - .baseBlock = 0x0330, + .baseBlock = 0x0338, }, - { + [B_WIN_PP] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 55, @@ -233,7 +237,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0290, }, - { + [B_WIN_DUMMY] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 57, @@ -242,7 +246,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0298, }, - { + [B_WIN_PP_REMAINING] = { .bg = 0, .tilemapLeft = 25, .tilemapTop = 55, @@ -251,7 +255,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0298, }, - { + [B_WIN_MOVE_TYPE] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 57, @@ -260,7 +264,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x02a0, }, - { + [B_WIN_SWITCH_PROMPT] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 55, @@ -269,7 +273,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x02b0, }, - { + [B_WIN_YESNO] = { .bg = 0, .tilemapLeft = 26, .tilemapTop = 9, @@ -278,7 +282,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0100, }, - { + [B_WIN_LEVEL_UP_BOX] = { .bg = 1, .tilemapLeft = 19, .tilemapTop = 8, @@ -287,7 +291,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0100, }, - { + [B_WIN_LEVEL_UP_BANNER] = { .bg = 2, .tilemapLeft = 18, .tilemapTop = 0, @@ -296,7 +300,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 6, .baseBlock = 0x016e, }, - { + [B_WIN_VS_PLAYER] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 3, @@ -305,7 +309,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0020, }, - { + [B_WIN_VS_OPPONENT] = { .bg = 2, .tilemapLeft = 2, .tilemapTop = 3, @@ -314,7 +318,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0040, }, - { + [B_WIN_VS_MULTI_PLAYER_1] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 2, @@ -323,7 +327,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0020, }, - { + [B_WIN_VS_MULTI_PLAYER_2] = { .bg = 2, .tilemapLeft = 2, .tilemapTop = 2, @@ -332,7 +336,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0040, }, - { + [B_WIN_VS_MULTI_PLAYER_3] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 6, @@ -341,7 +345,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0060, }, - { + [B_WIN_VS_MULTI_PLAYER_4] = { .bg = 2, .tilemapLeft = 2, .tilemapTop = 6, @@ -350,7 +354,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0080, }, - { + [B_WIN_VS_OUTCOME_DRAW] = { .bg = 0, .tilemapLeft = 12, .tilemapTop = 2, @@ -359,7 +363,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 0, .baseBlock = 0x00a0, }, - { + [B_WIN_VS_OUTCOME_LEFT] = { .bg = 0, .tilemapLeft = 4, .tilemapTop = 2, @@ -368,7 +372,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = .paletteNum = 0, .baseBlock = 0x00a0, }, - { + [B_WIN_VS_OUTCOME_RIGHT] = { .bg = 0, .tilemapLeft = 19, .tilemapTop = 2, @@ -380,9 +384,9 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] = DUMMY_WIN_TEMPLATE }; -static const struct WindowTemplate gBattleArenaWindowTemplates[] = +static const struct WindowTemplate sBattleArenaWindowTemplates[] = { - { + [B_WIN_MSG] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 15, @@ -391,7 +395,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 0, .baseBlock = 0x0090, }, - { + [B_WIN_ACTION_PROMPT] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 35, @@ -400,7 +404,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 0, .baseBlock = 0x01c0, }, - { + [B_WIN_ACTION_MENU] = { .bg = 0, .tilemapLeft = 17, .tilemapTop = 35, @@ -409,7 +413,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0190, }, - { + [B_WIN_MOVE_NAME_1] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 55, @@ -418,7 +422,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0300, }, - { + [B_WIN_MOVE_NAME_2] = { .bg = 0, .tilemapLeft = 11, .tilemapTop = 55, @@ -427,7 +431,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0310, }, - { + [B_WIN_MOVE_NAME_3] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 57, @@ -436,7 +440,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0320, }, - { + [B_WIN_MOVE_NAME_4] = { .bg = 0, .tilemapLeft = 11, .tilemapTop = 57, @@ -445,7 +449,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0330, }, - { + [B_WIN_PP] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 55, @@ -454,7 +458,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0290, }, - { + [B_WIN_DUMMY] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 57, @@ -463,7 +467,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0298, }, - { + [B_WIN_PP_REMAINING] = { .bg = 0, .tilemapLeft = 25, .tilemapTop = 55, @@ -472,7 +476,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0298, }, - { + [B_WIN_MOVE_TYPE] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 57, @@ -481,7 +485,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x02a0, }, - { + [B_WIN_SWITCH_PROMPT] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 55, @@ -490,7 +494,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x02b0, }, - { + [B_WIN_YESNO] = { .bg = 0, .tilemapLeft = 26, .tilemapTop = 9, @@ -499,7 +503,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0100, }, - { + [B_WIN_LEVEL_UP_BOX] = { .bg = 1, .tilemapLeft = 19, .tilemapTop = 8, @@ -508,7 +512,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0100, }, - { + [B_WIN_LEVEL_UP_BANNER] = { .bg = 2, .tilemapLeft = 18, .tilemapTop = 0, @@ -517,7 +521,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 6, .baseBlock = 0x016e, }, - { + [ARENA_WIN_PLAYER_NAME] = { .bg = 0, .tilemapLeft = 6, .tilemapTop = 1, @@ -526,7 +530,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0100, }, - { + [ARENA_WIN_VS] = { .bg = 0, .tilemapLeft = 14, .tilemapTop = 1, @@ -535,7 +539,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0110, }, - { + [ARENA_WIN_OPPONENT_NAME] = { .bg = 0, .tilemapLeft = 16, .tilemapTop = 1, @@ -544,7 +548,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0114, }, - { + [ARENA_WIN_MIND] = { .bg = 0, .tilemapLeft = 12, .tilemapTop = 4, @@ -553,7 +557,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0124, }, - { + [ARENA_WIN_SKILL] = { .bg = 0, .tilemapLeft = 12, .tilemapTop = 6, @@ -562,7 +566,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0130, }, - { + [ARENA_WIN_BODY] = { .bg = 0, .tilemapLeft = 12, .tilemapTop = 8, @@ -571,7 +575,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x013c, }, - { + [ARENA_WIN_JUDGEMENT_TITLE] = { .bg = 0, .tilemapLeft = 8, .tilemapTop = 11, @@ -580,7 +584,7 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = .paletteNum = 5, .baseBlock = 0x0148, }, - { + [ARENA_WIN_JUDGEMENT_TEXT] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 15, @@ -594,11 +598,15 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] = const struct WindowTemplate * const gBattleWindowTemplates[] = { - gStandardBattleWindowTemplates, - gBattleArenaWindowTemplates, + [B_WIN_TYPE_NORMAL] = sStandardBattleWindowTemplates, + [B_WIN_TYPE_ARENA] = sBattleArenaWindowTemplates, }; -static const struct BattleBackground gBattleTerrainTable[] = +#if P_ENABLE_DEBUG == TRUE +const struct BattleBackground sBattleTerrainTable[] = +#else +static const struct BattleBackground sBattleTerrainTable[] = +#endif { [BATTLE_TERRAIN_GRASS] = { @@ -691,20 +699,19 @@ static const struct BattleBackground gBattleTerrainTable[] = }, }; -static void sub_8035648(void); +static void CB2_UnusedBattleInit(void); -// Unused -static void sub_8035608(void) +static void UnusedBattleInit(void) { u8 spriteId; ResetSpriteData(); - spriteId = CreateSprite(&gUnknown_0831AC88, 0, 0, 0); + spriteId = CreateSprite(&gUnusedBattleInitSprite, 0, 0, 0); gSprites[spriteId].invisible = TRUE; - SetMainCallback2(sub_8035648); + SetMainCallback2(CB2_UnusedBattleInit); } -static void sub_8035648(void) +static void CB2_UnusedBattleInit(void) { AnimateSprites(); BuildOamBuffer(); @@ -717,13 +724,13 @@ void BattleInitBgsAndWindows(void) if (gBattleTypeFlags & BATTLE_TYPE_ARENA) { - gBattleScripting.windowsType = 1; - SetBgTilemapBuffer(1, gUnknown_02023060); - SetBgTilemapBuffer(2, gUnknown_02023060); + gBattleScripting.windowsType = B_WIN_TYPE_ARENA; + SetBgTilemapBuffer(1, gBattleAnimBgTilemapBuffer); + SetBgTilemapBuffer(2, gBattleAnimBgTilemapBuffer); } else { - gBattleScripting.windowsType = 0; + gBattleScripting.windowsType = B_WIN_TYPE_NORMAL; } InitWindows(gBattleWindowTemplates[gBattleScripting.windowsType]); @@ -761,26 +768,26 @@ void DrawMainBattleBackground(void) { if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK)) { - LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60); } else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON) { - LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Cave, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Cave, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60); } else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE) { - LZDecompressVram(gBattleTerrainTiles_Water, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Water, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Water, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60); } else if (gBattleTypeFlags & BATTLE_TYPE_RAYQUAZA) { - LZDecompressVram(gBattleTerrainTiles_Rayquaza, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Rayquaza, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Rayquaza, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_Rayquaza, 0x20, 0x60); } else @@ -790,15 +797,15 @@ void DrawMainBattleBackground(void) u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass; if (trainerClass == TRAINER_CLASS_LEADER) { - LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60); return; } else if (trainerClass == TRAINER_CLASS_CHAMPION) { - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, 0x20, 0x60); return; } @@ -808,48 +815,48 @@ void DrawMainBattleBackground(void) { default: case MAP_BATTLE_SCENE_NORMAL: - LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tileset, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tilemap, (void*)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(gBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60); + LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60); break; case MAP_BATTLE_SCENE_GYM: - LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, 0x20, 0x60); break; case MAP_BATTLE_SCENE_MAGMA: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, 0x20, 0x60); break; case MAP_BATTLE_SCENE_AQUA: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, 0x20, 0x60); break; case MAP_BATTLE_SCENE_SIDNEY: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, 0x20, 0x60); break; case MAP_BATTLE_SCENE_PHOEBE: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, 0x20, 0x60); break; case MAP_BATTLE_SCENE_GLACIA: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, 0x20, 0x60); break; case MAP_BATTLE_SCENE_DRAKE: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, 0x20, 0x60); break; case MAP_BATTLE_SCENE_FRONTIER: - LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60); break; } @@ -858,12 +865,16 @@ void DrawMainBattleBackground(void) void LoadBattleTextboxAndBackground(void) { - LZDecompressVram(gBattleTextboxTiles, (void*)(BG_CHAR_ADDR(0))); + LZDecompressVram(gBattleTextboxTiles, (void *)(BG_CHAR_ADDR(0))); CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0); CopyBgTilemapBufferToVram(0); LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40); LoadBattleMenuWindowGfx(); - DrawMainBattleBackground(); + #if B_TERRAIN_BG_CHANGE == TRUE + DrawTerrainTypeBattleBackground(); + #else + DrawMainBattleBackground(); + #endif } static void DrawLinkBattleParticipantPokeballs(u8 taskId, u8 multiplayerId, u8 bgId, u8 destX, u8 destY) @@ -936,7 +947,7 @@ static void DrawLinkBattleVsScreenOutcomeText(void) { if (gBattleOutcome == B_OUTCOME_DREW) { - BattlePutTextOnWindow(gText_Draw, 0x15); + BattlePutTextOnWindow(gText_Draw, B_WIN_VS_OUTCOME_DRAW); } else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { @@ -945,20 +956,20 @@ static void DrawLinkBattleVsScreenOutcomeText(void) switch (gLinkPlayers[gBattleScripting.multiplayerId].id) { case 0: - BattlePutTextOnWindow(gText_Win, 0x16); - BattlePutTextOnWindow(gText_Loss, 0x17); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_LEFT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_RIGHT); break; case 1: - BattlePutTextOnWindow(gText_Win, 0x17); - BattlePutTextOnWindow(gText_Loss, 0x16); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_RIGHT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_LEFT); break; case 2: - BattlePutTextOnWindow(gText_Win, 0x16); - BattlePutTextOnWindow(gText_Loss, 0x17); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_LEFT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_RIGHT); break; case 3: - BattlePutTextOnWindow(gText_Win, 0x17); - BattlePutTextOnWindow(gText_Loss, 0x16); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_RIGHT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_LEFT); break; } } @@ -967,20 +978,20 @@ static void DrawLinkBattleVsScreenOutcomeText(void) switch (gLinkPlayers[gBattleScripting.multiplayerId].id) { case 0: - BattlePutTextOnWindow(gText_Win, 0x17); - BattlePutTextOnWindow(gText_Loss, 0x16); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_RIGHT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_LEFT); break; case 1: - BattlePutTextOnWindow(gText_Win, 0x16); - BattlePutTextOnWindow(gText_Loss, 0x17); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_LEFT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_RIGHT); break; case 2: - BattlePutTextOnWindow(gText_Win, 0x17); - BattlePutTextOnWindow(gText_Loss, 0x16); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_RIGHT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_LEFT); break; case 3: - BattlePutTextOnWindow(gText_Win, 0x16); - BattlePutTextOnWindow(gText_Loss, 0x17); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_LEFT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_RIGHT); break; } } @@ -989,26 +1000,26 @@ static void DrawLinkBattleVsScreenOutcomeText(void) { if (gLinkPlayers[gBattleScripting.multiplayerId].id != 0) { - BattlePutTextOnWindow(gText_Win, 0x17); - BattlePutTextOnWindow(gText_Loss, 0x16); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_RIGHT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_LEFT); } else { - BattlePutTextOnWindow(gText_Win, 0x16); - BattlePutTextOnWindow(gText_Loss, 0x17); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_LEFT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_RIGHT); } } else { if (gLinkPlayers[gBattleScripting.multiplayerId].id != 0) { - BattlePutTextOnWindow(gText_Win, 0x16); - BattlePutTextOnWindow(gText_Loss, 0x17); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_LEFT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_RIGHT); } else { - BattlePutTextOnWindow(gText_Win, 0x17); - BattlePutTextOnWindow(gText_Loss, 0x16); + BattlePutTextOnWindow(gText_Win, B_WIN_VS_OUTCOME_RIGHT); + BattlePutTextOnWindow(gText_Loss, B_WIN_VS_OUTCOME_LEFT); } } } @@ -1032,19 +1043,19 @@ void InitLinkBattleVsScreen(u8 taskId) switch (linkPlayer->id) { case 0: - BattlePutTextOnWindow(name, 0x11); + BattlePutTextOnWindow(name, B_WIN_VS_MULTI_PLAYER_1); DrawLinkBattleParticipantPokeballs(taskId, linkPlayer->id, 1, 2, 4); break; case 1: - BattlePutTextOnWindow(name, 0x12); + BattlePutTextOnWindow(name, B_WIN_VS_MULTI_PLAYER_2); DrawLinkBattleParticipantPokeballs(taskId, linkPlayer->id, 2, 2, 4); break; case 2: - BattlePutTextOnWindow(name, 0x13); + BattlePutTextOnWindow(name, B_WIN_VS_MULTI_PLAYER_3); DrawLinkBattleParticipantPokeballs(taskId, linkPlayer->id, 1, 2, 8); break; case 3: - BattlePutTextOnWindow(name, 0x14); + BattlePutTextOnWindow(name, B_WIN_VS_MULTI_PLAYER_4); DrawLinkBattleParticipantPokeballs(taskId, linkPlayer->id, 2, 2, 8); break; } @@ -1060,10 +1071,10 @@ void InitLinkBattleVsScreen(u8 taskId) opponentId = playerId, playerId = opponentId_copy; name = gLinkPlayers[playerId].name; - BattlePutTextOnWindow(name, 0xF); + BattlePutTextOnWindow(name, B_WIN_VS_PLAYER); name = gLinkPlayers[opponentId].name; - BattlePutTextOnWindow(name, 0x10); + BattlePutTextOnWindow(name, B_WIN_VS_OPPONENT); DrawLinkBattleParticipantPokeballs(taskId, playerId, 1, 2, 7); DrawLinkBattleParticipantPokeballs(taskId, opponentId, 2, 2, 7); @@ -1125,13 +1136,13 @@ void DrawBattleEntryBackground(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - LZDecompressVram(gUnknown_08D778F0, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gVsLettersGfx, (void*)OBJ_VRAM0); - LoadCompressedPalette(gUnknown_08D77AE4, 0x60, 0x20); + LZDecompressVram(gBattleVSFrame_Gfx, (void *)(BG_CHAR_ADDR(1))); + LZDecompressVram(gVsLettersGfx, (void *)OBJ_VRAM0); + LoadCompressedPalette(gBattleVSFrame_Pal, 0x60, 0x20); SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1); SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04); - CopyToBgTilemapBuffer(1, gUnknown_08D779D8, 0, 0); - CopyToBgTilemapBuffer(2, gUnknown_08D779D8, 0, 0); + CopyToBgTilemapBuffer(1, gBattleVSFrame_Tilemap, 0, 0); + CopyToBgTilemapBuffer(2, gBattleVSFrame_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR); @@ -1142,35 +1153,37 @@ void DrawBattleEntryBackground(void) } else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER)) { - if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId == TRAINER_STEVEN_PARTNER) + if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId == TRAINER_STEVEN_PARTNER || gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER) { - LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(BG_SCREEN_ADDR(28))); + LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1))); + LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28))); } else { + // Set up bg for the multi battle intro where both teams slide in facing the screen. + // Note Steven's multi battle (which has a dedicated back pic) is excluded above. SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 2); SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 2); - CopyToBgTilemapBuffer(1, gUnknown_08D857A8, 0, 0); - CopyToBgTilemapBuffer(2, gUnknown_08D85A1C, 0, 0); + CopyToBgTilemapBuffer(1, gMultiBattleIntroBg_Opponent_Tilemap, 0, 0); + CopyToBgTilemapBuffer(2, gMultiBattleIntroBg_Player_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); } } else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON) { - LZDecompressVram(gBattleTerrainAnimTiles_Cave, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainAnimTilemap_Cave, (void*)(BG_SCREEN_ADDR(28))); + LZDecompressVram(gBattleTerrainAnimTiles_Cave, (void *)(BG_CHAR_ADDR(1))); + LZDecompressVram(gBattleTerrainAnimTilemap_Cave, (void *)(BG_SCREEN_ADDR(28))); } else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE) { - LZDecompressVram(gBattleTerrainAnimTiles_Underwater, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainAnimTilemap_Underwater, (void*)(BG_SCREEN_ADDR(28))); + LZDecompressVram(gBattleTerrainAnimTiles_Underwater, (void *)(BG_CHAR_ADDR(1))); + LZDecompressVram(gBattleTerrainAnimTilemap_Underwater, (void *)(BG_SCREEN_ADDR(28))); } else if (gBattleTypeFlags & BATTLE_TYPE_RAYQUAZA) { - LZDecompressVram(gBattleTerrainAnimTiles_Rayquaza, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainAnimTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(28))); + LZDecompressVram(gBattleTerrainAnimTiles_Rayquaza, (void *)(BG_CHAR_ADDR(1))); + LZDecompressVram(gBattleTerrainAnimTilemap_Rayquaza, (void *)(BG_SCREEN_ADDR(28))); } else { @@ -1179,27 +1192,27 @@ void DrawBattleEntryBackground(void) u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass; if (trainerClass == TRAINER_CLASS_LEADER) { - LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(BG_SCREEN_ADDR(28))); + LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1))); + LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28))); return; } else if (trainerClass == TRAINER_CLASS_CHAMPION) { - LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(BG_SCREEN_ADDR(28))); + LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1))); + LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28))); return; } } if (GetCurrentMapBattleScene() == MAP_BATTLE_SCENE_NORMAL) { - LZDecompressVram(gBattleTerrainTable[gBattleTerrain].entryTileset, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainTable[gBattleTerrain].entryTilemap, (void*)(BG_SCREEN_ADDR(28))); + LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTileset, (void *)(BG_CHAR_ADDR(1))); + LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTilemap, (void *)(BG_SCREEN_ADDR(28))); } else { - LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(BG_SCREEN_ADDR(28))); + LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1))); + LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28))); } } } @@ -1211,7 +1224,7 @@ bool8 LoadChosenBattleElement(u8 caseId) switch (caseId) { case 0: - LZDecompressVram(gBattleTextboxTiles, (void*)(BG_CHAR_ADDR(0))); + LZDecompressVram(gBattleTextboxTiles, (void *)(BG_CHAR_ADDR(0))); break; case 1: CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0); @@ -1223,11 +1236,11 @@ bool8 LoadChosenBattleElement(u8 caseId) case 3: if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER)) { - LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); } else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON) { - LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Cave, (void *)(BG_CHAR_ADDR(2))); } else { @@ -1236,12 +1249,12 @@ bool8 LoadChosenBattleElement(u8 caseId) u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass; if (trainerClass == TRAINER_CLASS_LEADER) { - LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); break; } else if (trainerClass == TRAINER_CLASS_CHAMPION) { - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); break; } } @@ -1250,31 +1263,31 @@ bool8 LoadChosenBattleElement(u8 caseId) { default: case MAP_BATTLE_SCENE_NORMAL: - LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tileset, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2))); break; case MAP_BATTLE_SCENE_GYM: - LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); break; case MAP_BATTLE_SCENE_MAGMA: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); break; case MAP_BATTLE_SCENE_AQUA: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); break; case MAP_BATTLE_SCENE_SIDNEY: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); break; case MAP_BATTLE_SCENE_PHOEBE: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); break; case MAP_BATTLE_SCENE_GLACIA: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); break; case MAP_BATTLE_SCENE_DRAKE: - LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); break; case MAP_BATTLE_SCENE_FRONTIER: - LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); break; } } @@ -1282,14 +1295,14 @@ bool8 LoadChosenBattleElement(u8 caseId) case 4: if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER)) { - LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); } else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) { if (gGameVersion == VERSION_RUBY) - LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Cave, (void *)(BG_SCREEN_ADDR(26))); else - LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Water, (void *)(BG_SCREEN_ADDR(26))); } else { @@ -1298,12 +1311,12 @@ bool8 LoadChosenBattleElement(u8 caseId) u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass; if (trainerClass == TRAINER_CLASS_LEADER) { - LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); break; } else if (trainerClass == TRAINER_CLASS_CHAMPION) { - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); break; } } @@ -1312,31 +1325,31 @@ bool8 LoadChosenBattleElement(u8 caseId) { default: case MAP_BATTLE_SCENE_NORMAL: - LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tilemap, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26))); break; case MAP_BATTLE_SCENE_GYM: - LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); break; case MAP_BATTLE_SCENE_MAGMA: - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); break; case MAP_BATTLE_SCENE_AQUA: - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); break; case MAP_BATTLE_SCENE_SIDNEY: - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); break; case MAP_BATTLE_SCENE_PHOEBE: - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); break; case MAP_BATTLE_SCENE_GLACIA: - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); break; case MAP_BATTLE_SCENE_DRAKE: - LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); break; case MAP_BATTLE_SCENE_FRONTIER: - LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); break; } } @@ -1374,7 +1387,7 @@ bool8 LoadChosenBattleElement(u8 caseId) { default: case MAP_BATTLE_SCENE_NORMAL: - LoadCompressedPalette(gBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60); + LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60); break; case MAP_BATTLE_SCENE_GYM: LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, 0x20, 0x60); @@ -1413,3 +1426,26 @@ bool8 LoadChosenBattleElement(u8 caseId) return ret; } + +void DrawTerrainTypeBattleBackground(void) +{ + switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + case STATUS_FIELD_GRASSY_TERRAIN: + LoadMoveBg(BG_GRASSY_TERRAIN); + break; + case STATUS_FIELD_MISTY_TERRAIN: + LoadMoveBg(BG_MISTY_TERRAIN); + break; + case STATUS_FIELD_ELECTRIC_TERRAIN: + LoadMoveBg(BG_ELECTRIC_TERRAIN); + break; + case STATUS_FIELD_PSYCHIC_TERRAIN: + LoadMoveBg(BG_PSYCHIC_TERRAIN); + break; + default: + DrawMainBattleBackground(); + break; + } +} + diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 0c3bf2dbf4..26ee356c34 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -1,6 +1,6 @@ #include "global.h" #include "battle.h" -#include "battle_ai_script_commands.h" +#include "battle_ai_main.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_interface.h" @@ -29,9 +29,6 @@ #include "constants/trainers.h" #include "recorded_battle.h" -extern struct MusicPlayerInfo gMPlayInfo_BGM; - -// this file's functions static void LinkOpponentHandleGetMonData(void); static void LinkOpponentHandleGetRawMonData(void); static void LinkOpponentHandleSetMonData(void); @@ -88,6 +85,7 @@ static void LinkOpponentHandleBattleAnimation(void); static void LinkOpponentHandleLinkStandbyMsg(void); static void LinkOpponentHandleResetActionMoveSelection(void); static void LinkOpponentHandleEndLinkBattle(void); +static void LinkOpponentHandleBattleDebug(void); static void LinkOpponentCmdEnd(void); static void LinkOpponentBufferRunCommand(void); @@ -160,6 +158,7 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = [CONTROLLER_LINKSTANDBYMSG] = LinkOpponentHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = LinkOpponentHandleResetActionMoveSelection, [CONTROLLER_ENDLINKBATTLE] = LinkOpponentHandleEndLinkBattle, + [CONTROLLER_DEBUGMENU] = LinkOpponentHandleBattleDebug, [CONTROLLER_TERMINATOR_NOP] = LinkOpponentCmdEnd }; @@ -176,8 +175,8 @@ static void LinkOpponentBufferRunCommand(void) { if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) { - if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands)) - sLinkOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands)) + sLinkOpponentBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); else LinkOpponentBufferExecCompleted(); } @@ -323,7 +322,7 @@ static void Intro_TryShinyAnimShowHealthbox(void) } else { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } } @@ -393,7 +392,7 @@ static void CompleteOnHealthbarDone(void) if (hpValue != -1) { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); } else { @@ -424,7 +423,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void) static void CompleteOnInactiveTextPrinter(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) LinkOpponentBufferExecCompleted(); } @@ -465,7 +464,7 @@ static void SwitchIn_HandleSoundAndEnd(void) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy || gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy_2) { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); LinkOpponentBufferExecCompleted(); } } @@ -529,7 +528,7 @@ static void LinkOpponentBufferExecCompleted(void) u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; } else { @@ -544,13 +543,13 @@ static void LinkOpponentHandleGetMonData(void) u8 monToCheck; s32 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { size += CopyLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -558,7 +557,7 @@ static void LinkOpponentHandleGetMonData(void) monToCheck >>= 1; } } - BtlController_EmitDataTransfer(1, size, monData); + BtlController_EmitDataTransfer(BUFFER_B, size, monData); LinkOpponentBufferExecCompleted(); } @@ -572,7 +571,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst) u32 data32; s32 size = 0; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES); @@ -604,7 +603,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst) battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy10(battleMon.nickname, nickname); + StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName); src = (u8 *)&battleMon; for (size = 0; size < sizeof(battleMon); size++) @@ -629,7 +628,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst) moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - src = (u8*)(&moveData); + src = (u8 *)(&moveData); for (size = 0; size < sizeof(moveData); size++) dst[size] = src[size]; break; @@ -637,7 +636,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); + data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); dst[0] = data16; dst[1] = data16 >> 8; size = 2; @@ -652,7 +651,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst) case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); + dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); size = 1; break; case REQUEST_OTID_BATTLE: @@ -877,13 +876,13 @@ static void LinkOpponentHandleSetMonData(void) u8 monToCheck; u8 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { SetLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler]); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -896,11 +895,11 @@ static void LinkOpponentHandleSetMonData(void) static void SetLinkOpponentMonData(u8 monId) { - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3]; + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; + struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; s32 i; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: { @@ -941,10 +940,10 @@ static void SetLinkOpponentMonData(u8 monId) } break; case REQUEST_SPECIES_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HELDITEM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MOVES_PP_BATTLE: for (i = 0; i < MAX_MON_MOVES; i++) @@ -958,165 +957,165 @@ static void SetLinkOpponentMonData(u8 monId) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PP_DATA_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); break; case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_OTID_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_EXP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKERUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_GAME_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKEBALL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); break; case REQUEST_HP_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_STATUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MAX_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SHEEN_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; } } static void LinkOpponentHandleSetRawMonData(void) { - u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; + u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; u8 i; - for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++) - dst[i] = gBattleBufferA[gActiveBattler][3 + i]; + for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) + dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; LinkOpponentBufferExecCompleted(); } @@ -1129,7 +1128,7 @@ static void LinkOpponentHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); @@ -1145,8 +1144,8 @@ static void LinkOpponentHandleLoadMonSprite(void) static void LinkOpponentHandleSwitchInAnim(void) { - gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; - StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; + StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; } @@ -1155,7 +1154,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); @@ -1163,7 +1162,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) gBattlerSpriteIds[battlerId] = CreateSprite( &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1184,7 +1183,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) static void LinkOpponentHandleReturnMonToBall(void) { - if (gBattleBufferA[gActiveBattler][1] == 0) + if (gBattleResources->bufferA[gActiveBattler][1] == 0) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; @@ -1391,32 +1390,25 @@ static void LinkOpponentHandleMoveAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - gAnimMoveTurn = gBattleBufferA[gActiveBattler][3]; - gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleBufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16]; + gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; + gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); + gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); + gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; + gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE - { - LinkOpponentBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation; - BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); - } + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation; + BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); } } static void LinkOpponentDoMoveAnimation(void) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleBufferA[gActiveBattler][11]; + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); + u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) { @@ -1454,7 +1446,7 @@ static void LinkOpponentDoMoveAnimation(void) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; LinkOpponentBufferExecCompleted(); } @@ -1468,9 +1460,9 @@ static void LinkOpponentHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; BattleTv_SetDataBasedOnString(*stringId); } @@ -1515,7 +1507,7 @@ static void LinkOpponentHandleHealthBarUpdate(void) s16 hpVal; LoadBattleBarGfx(0); - hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (hpVal != INSTANT_HP_BAR_DROP) { @@ -1556,8 +1548,8 @@ static void LinkOpponentHandleStatusAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], - gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); + InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], + gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } @@ -1615,7 +1607,7 @@ static void LinkOpponentHandleClearUnkVar(void) static void LinkOpponentHandleSetUnkVar(void) { - gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; LinkOpponentBufferExecCompleted(); } @@ -1660,20 +1652,20 @@ static void LinkOpponentHandlePlaySE(void) else pan = SOUND_PAN_TARGET; - PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); + PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); LinkOpponentBufferExecCompleted(); } static void LinkOpponentHandlePlayFanfareOrBGM(void) { - if (gBattleBufferA[gActiveBattler][3]) + if (gBattleResources->bufferA[gActiveBattler][3]) { BattleStopLowHpSound(); - PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } else { - PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } LinkOpponentBufferExecCompleted(); @@ -1683,13 +1675,13 @@ static void LinkOpponentHandleFaintingCry(void) { u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, 25, 5); + PlayCry_ByMode(species, 25, CRY_MODE_FAINT); LinkOpponentBufferExecCompleted(); } static void LinkOpponentHandleIntroSlide(void) { - HandleIntroSlide(gBattleBufferA[gActiveBattler][1]); + HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); gIntroSlideFlags |= 1; LinkOpponentBufferExecCompleted(); } @@ -1724,15 +1716,15 @@ static void Task_StartSendOutAnim(u8 taskId) gActiveBattler = gTasks[taskId].data[0]; if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); } else { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler = BATTLE_PARTNER(gActiveBattler); - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler = BATTLE_PARTNER(gActiveBattler); } @@ -1750,7 +1742,7 @@ static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) static void LinkOpponentHandleDrawPartyStatusSummary(void) { - if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { LinkOpponentBufferExecCompleted(); } @@ -1758,7 +1750,7 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - if (gBattleBufferA[gActiveBattler][2] != 0) + if (gBattleResources->bufferA[gActiveBattler][2] != 0) { if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E < 2) { @@ -1771,10 +1763,10 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void) } } - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); + gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - if (gBattleBufferA[gActiveBattler][2] != 0) + if (gBattleResources->bufferA[gActiveBattler][2] != 0) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; @@ -1806,7 +1798,7 @@ static void LinkOpponentHandleSpriteInvisibility(void) { if (IsBattlerSpritePresent(gActiveBattler)) { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1]; + gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; CopyBattleSpriteInvisibility(gActiveBattler); } LinkOpponentBufferExecCompleted(); @@ -1816,8 +1808,8 @@ static void LinkOpponentHandleBattleAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u8 animationId = gBattleBufferA[gActiveBattler][1]; - u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; + u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) LinkOpponentBufferExecCompleted(); @@ -1830,7 +1822,7 @@ static void LinkOpponentHandleBattleAnimation(void) static void LinkOpponentHandleLinkStandbyMsg(void) { - RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][2]); + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][2]); LinkOpponentBufferExecCompleted(); } @@ -1841,20 +1833,25 @@ static void LinkOpponentHandleResetActionMoveSelection(void) static void LinkOpponentHandleEndLinkBattle(void) { - RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][4]); + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][4]); - if (gBattleBufferA[gActiveBattler][1] == B_OUTCOME_DREW) - gBattleOutcome = gBattleBufferA[gActiveBattler][1]; + if (gBattleResources->bufferA[gActiveBattler][1] == B_OUTCOME_DREW) + gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; else - gBattleOutcome = gBattleBufferA[gActiveBattler][1] ^ B_OUTCOME_DREW; + gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1] ^ B_OUTCOME_DREW; - gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleBufferA[gActiveBattler][2]; + gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[gActiveBattler][2]; FadeOutMapMusic(5); BeginFastPaletteFade(3); LinkOpponentBufferExecCompleted(); gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; } +static void LinkOpponentHandleBattleDebug(void) +{ + LinkOpponentBufferExecCompleted(); +} + static void LinkOpponentCmdEnd(void) { } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 726e7771f7..4afa2cb18e 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -1,6 +1,6 @@ #include "global.h" #include "battle.h" -#include "battle_ai_script_commands.h" +#include "battle_ai_main.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_interface.h" @@ -29,7 +29,6 @@ #include "constants/trainers.h" #include "recorded_battle.h" -// this file's functions static void LinkPartnerHandleGetMonData(void); static void LinkPartnerHandleGetRawMonData(void); static void LinkPartnerHandleSetMonData(void); @@ -86,6 +85,7 @@ static void LinkPartnerHandleBattleAnimation(void); static void LinkPartnerHandleLinkStandbyMsg(void); static void LinkPartnerHandleResetActionMoveSelection(void); static void LinkPartnerHandleEndLinkBattle(void); +static void LinkPartnerHandleBattleDebug(void); static void LinkPartnerCmdEnd(void); static void LinkPartnerBufferRunCommand(void); @@ -157,6 +157,7 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = [CONTROLLER_LINKSTANDBYMSG] = LinkPartnerHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = LinkPartnerHandleResetActionMoveSelection, [CONTROLLER_ENDLINKBATTLE] = LinkPartnerHandleEndLinkBattle, + [CONTROLLER_DEBUGMENU] = LinkPartnerHandleBattleDebug, [CONTROLLER_TERMINATOR_NOP] = LinkPartnerCmdEnd }; @@ -173,8 +174,8 @@ static void LinkPartnerBufferRunCommand(void) { if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) { - if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands)) - sLinkPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands)) + sLinkPartnerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); else LinkPartnerBufferExecCompleted(); } @@ -277,7 +278,7 @@ static void CompleteOnHealthbarDone(void) if (hpValue != -1) { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); } else { @@ -313,7 +314,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void) static void CompleteOnInactiveTextPrinter(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) LinkPartnerBufferExecCompleted(); } @@ -402,7 +403,7 @@ static void LinkPartnerBufferExecCompleted(void) u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; } else { @@ -429,13 +430,13 @@ static void LinkPartnerHandleGetMonData(void) u8 monToCheck; s32 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { size += CopyLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -443,7 +444,7 @@ static void LinkPartnerHandleGetMonData(void) monToCheck >>= 1; } } - BtlController_EmitDataTransfer(1, size, monData); + BtlController_EmitDataTransfer(BUFFER_B, size, monData); LinkPartnerBufferExecCompleted(); } @@ -457,7 +458,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst) u32 data32; s32 size = 0; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); @@ -489,7 +490,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst) battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy10(battleMon.nickname, nickname); + StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); src = (u8 *)&battleMon; for (size = 0; size < sizeof(battleMon); size++) @@ -514,7 +515,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst) moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - src = (u8*)(&moveData); + src = (u8 *)(&moveData); for (size = 0; size < sizeof(moveData); size++) dst[size] = src[size]; break; @@ -522,7 +523,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); + data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); dst[0] = data16; dst[1] = data16 >> 8; size = 2; @@ -537,7 +538,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst) case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); + dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); size = 1; break; case REQUEST_OTID_BATTLE: @@ -762,13 +763,13 @@ static void LinkPartnerHandleSetMonData(void) u8 monToCheck; u8 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { SetLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler]); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -781,11 +782,11 @@ static void LinkPartnerHandleSetMonData(void) static void SetLinkPartnerMonData(u8 monId) { - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3]; + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; + struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; s32 i; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: { @@ -826,10 +827,10 @@ static void SetLinkPartnerMonData(u8 monId) } break; case REQUEST_SPECIES_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HELDITEM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MOVES_PP_BATTLE: for (i = 0; i < MAX_MON_MOVES; i++) @@ -843,154 +844,154 @@ static void SetLinkPartnerMonData(u8 monId) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PP_DATA_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); break; case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_OTID_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_EXP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKERUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_GAME_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKEBALL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); break; case REQUEST_HP_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_STATUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MAX_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SHEEN_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; } @@ -999,11 +1000,11 @@ static void SetLinkPartnerMonData(u8 monId) static void LinkPartnerHandleSetRawMonData(void) { - u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; + u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; u8 i; - for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++) - dst[i] = gBattleBufferA[gActiveBattler][3 + i]; + for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) + dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; LinkPartnerBufferExecCompleted(); } @@ -1017,7 +1018,7 @@ static void LinkPartnerHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; @@ -1029,10 +1030,10 @@ static void LinkPartnerHandleLoadMonSprite(void) static void LinkPartnerHandleSwitchInAnim(void) { - ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]); - gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; + ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); + gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; } @@ -1041,14 +1042,14 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite( &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1069,7 +1070,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) static void LinkPartnerHandleReturnMonToBall(void) { - if (gBattleBufferA[gActiveBattler][1] == 0) + if (gBattleResources->bufferA[gActiveBattler][1] == 0) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; @@ -1221,32 +1222,25 @@ static void LinkPartnerHandleMoveAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - gAnimMoveTurn = gBattleBufferA[gActiveBattler][3]; - gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleBufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16]; + gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; + gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); + gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); + gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; + gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE - { - LinkPartnerBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation; - BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); - } + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation; + BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); } } static void LinkPartnerDoMoveAnimation(void) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleBufferA[gActiveBattler][11]; + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); + u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) { @@ -1284,7 +1278,7 @@ static void LinkPartnerDoMoveAnimation(void) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; LinkPartnerBufferExecCompleted(); } @@ -1298,9 +1292,9 @@ static void LinkPartnerHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; BattleTv_SetDataBasedOnString(*stringId); } @@ -1345,7 +1339,7 @@ static void LinkPartnerHandleHealthBarUpdate(void) s16 hpVal; LoadBattleBarGfx(0); - hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (hpVal != INSTANT_HP_BAR_DROP) { @@ -1386,8 +1380,8 @@ static void LinkPartnerHandleStatusAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], - gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); + InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], + gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } @@ -1445,7 +1439,7 @@ static void LinkPartnerHandleClearUnkVar(void) static void LinkPartnerHandleSetUnkVar(void) { - gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; LinkPartnerBufferExecCompleted(); } @@ -1490,20 +1484,20 @@ static void LinkPartnerHandlePlaySE(void) else pan = SOUND_PAN_TARGET; - PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); + PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); LinkPartnerBufferExecCompleted(); } static void LinkPartnerHandlePlayFanfareOrBGM(void) { - if (gBattleBufferA[gActiveBattler][3]) + if (gBattleResources->bufferA[gActiveBattler][3]) { BattleStopLowHpSound(); - PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } else { - PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } LinkPartnerBufferExecCompleted(); @@ -1513,13 +1507,13 @@ static void LinkPartnerHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, -25, 5); + PlayCry_ByMode(species, -25, CRY_MODE_FAINT); LinkPartnerBufferExecCompleted(); } static void LinkPartnerHandleIntroSlide(void) { - HandleIntroSlide(gBattleBufferA[gActiveBattler][1]); + HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); gIntroSlideFlags |= 1; LinkPartnerBufferExecCompleted(); } @@ -1585,15 +1579,15 @@ static void Task_StartSendOutAnim(u8 taskId) gActiveBattler = gTasks[taskId].data[0]; if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); } else { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; @@ -1606,17 +1600,17 @@ static void Task_StartSendOutAnim(u8 taskId) static void LinkPartnerHandleDrawPartyStatusSummary(void) { - if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { LinkPartnerBufferExecCompleted(); } else { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); + gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - if (gBattleBufferA[gActiveBattler][2] != 0) + if (gBattleResources->bufferA[gActiveBattler][2] != 0) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; @@ -1648,7 +1642,7 @@ static void LinkPartnerHandleSpriteInvisibility(void) { if (IsBattlerSpritePresent(gActiveBattler)) { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1]; + gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; CopyBattleSpriteInvisibility(gActiveBattler); } LinkPartnerBufferExecCompleted(); @@ -1658,8 +1652,8 @@ static void LinkPartnerHandleBattleAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u8 animationId = gBattleBufferA[gActiveBattler][1]; - u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; + u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) LinkPartnerBufferExecCompleted(); @@ -1672,7 +1666,7 @@ static void LinkPartnerHandleBattleAnimation(void) static void LinkPartnerHandleLinkStandbyMsg(void) { - RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][2]); + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][2]); LinkPartnerBufferExecCompleted(); } @@ -1683,15 +1677,20 @@ static void LinkPartnerHandleResetActionMoveSelection(void) static void LinkPartnerHandleEndLinkBattle(void) { - RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][4]); - gBattleOutcome = gBattleBufferA[gActiveBattler][1]; - gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleBufferA[gActiveBattler][2]; + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][4]); + gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; + gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[gActiveBattler][2]; FadeOutMapMusic(5); BeginFastPaletteFade(3); LinkPartnerBufferExecCompleted(); gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; } +static void LinkPartnerHandleBattleDebug(void) +{ + LinkPartnerBufferExecCompleted(); +} + static void LinkPartnerCmdEnd(void) { } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 55fb3072fc..760fbf3203 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle.h" -#include "battle_ai_script_commands.h" +#include "battle_ai_main.h" +#include "battle_ai_util.h" #include "battle_anim.h" #include "battle_arena.h" #include "battle_controllers.h" @@ -9,6 +10,7 @@ #include "battle_setup.h" #include "battle_tower.h" #include "battle_tv.h" +#include "battle_z_move.h" #include "bg.h" #include "data.h" #include "frontier_util.h" @@ -34,9 +36,6 @@ #include "constants/trainers.h" #include "trainer_hill.h" -extern struct MusicPlayerInfo gMPlayInfo_BGM; - -// this file's functions static void OpponentHandleGetMonData(void); static void OpponentHandleGetRawMonData(void); static void OpponentHandleSetMonData(void); @@ -93,6 +92,7 @@ static void OpponentHandleBattleAnimation(void); static void OpponentHandleLinkStandbyMsg(void); static void OpponentHandleResetActionMoveSelection(void); static void OpponentHandleEndLinkBattle(void); +static void OpponentHandleDebugMenu(void); static void OpponentCmdEnd(void); static void OpponentBufferRunCommand(void); @@ -165,6 +165,7 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = [CONTROLLER_LINKSTANDBYMSG] = OpponentHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = OpponentHandleResetActionMoveSelection, [CONTROLLER_ENDLINKBATTLE] = OpponentHandleEndLinkBattle, + [CONTROLLER_DEBUGMENU] = OpponentHandleDebugMenu, [CONTROLLER_TERMINATOR_NOP] = OpponentCmdEnd }; @@ -184,8 +185,8 @@ static void OpponentBufferRunCommand(void) { if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) { - if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sOpponentBufferCommands)) - sOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sOpponentBufferCommands)) + sOpponentBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); else OpponentBufferExecCompleted(); } @@ -223,12 +224,18 @@ static void Intro_DelayAndEnd(void) } } +static bool32 TwoIntroMons(u32 battlerId) // Double battle with both player pokemon active. +{ + return (IsDoubleBattle() && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[battlerId ^ BIT_FLANK]])); +} + static void Intro_WaitForShinyAnimAndHealthbox(void) { bool8 healthboxAnimDone = FALSE; bool8 twoMons; - if (!IsDoubleBattle() || ((IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)) || (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS))) + twoMons = TwoIntroMons(gActiveBattler); + if (!twoMons || ((twoMons && (gBattleTypeFlags & BATTLE_TYPE_MULTI) && !BATTLE_TWO_VS_ONE_OPPONENT) || (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS))) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; @@ -249,7 +256,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(void) { if (twoMons == TRUE) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; @@ -266,7 +273,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(void) { if (GetBattlerPosition(gActiveBattler) == 3) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) { FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); @@ -290,17 +297,19 @@ static void Intro_TryShinyAnimShowHealthbox(void) { bool32 bgmRestored = FALSE; bool32 battlerAnimsDone = FALSE; + bool32 twoMons; - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); - if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - && !(gBattleTypeFlags & BATTLE_TYPE_MULTI) - && IsDoubleBattle() - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive + twoMons = TwoIntroMons(gActiveBattler); + if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT) + && twoMons + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); @@ -308,7 +317,7 @@ static void Intro_TryShinyAnimShowHealthbox(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted) { - if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + if (twoMons && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT)) { UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL); StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); @@ -334,13 +343,13 @@ static void Intro_TryShinyAnimShowHealthbox(void) m4aMPlayContinue(&gMPlayInfo_BGM); } else - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = TRUE; bgmRestored = TRUE; } - if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) + if (!twoMons || (twoMons && gBattleTypeFlags & BATTLE_TYPE_MULTI && !BATTLE_TWO_VS_ONE_OPPONENT)) { if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) @@ -361,7 +370,7 @@ static void Intro_TryShinyAnimShowHealthbox(void) if (bgmRestored && battlerAnimsDone) { - if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + if (twoMons && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT)) { DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]); SetBattlerShadowSpriteCallback(gActiveBattler ^ BIT_FLANK, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], MON_DATA_SPECIES)); @@ -379,12 +388,12 @@ static void Intro_TryShinyAnimShowHealthbox(void) static void TryShinyAnimAfterMonAnim(void) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].x2 == 0 - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim + if (gSprites[gBattlerSpriteIds[gActiveBattler]].x2 == 0 + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy + if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; @@ -401,7 +410,7 @@ static void CompleteOnHealthbarDone(void) SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); if (hpValue != -1) { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); } else OpponentBufferExecCompleted(); @@ -430,7 +439,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void) static void CompleteOnInactiveTextPrinter(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) OpponentBufferExecCompleted(); } @@ -467,10 +476,10 @@ static void SwitchIn_HandleSoundAndEnd(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) { - if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy + if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy || gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy_2) { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); OpponentBufferExecCompleted(); } } @@ -478,7 +487,7 @@ static void SwitchIn_HandleSoundAndEnd(void) static void SwitchIn_ShowHealthbox(void) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; @@ -496,7 +505,7 @@ static void SwitchIn_ShowHealthbox(void) static void SwitchIn_TryShinyAnim(void) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); @@ -529,7 +538,7 @@ static void OpponentBufferExecCompleted(void) u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; } else { @@ -544,13 +553,13 @@ static void OpponentHandleGetMonData(void) u8 monToCheck; s32 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { size += GetOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -558,7 +567,7 @@ static void OpponentHandleGetMonData(void) monToCheck >>= 1; } } - BtlController_EmitDataTransfer(1, size, monData); + BtlController_EmitDataTransfer(BUFFER_B, size, monData); OpponentBufferExecCompleted(); } @@ -572,7 +581,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst) u32 data32; s32 size = 0; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES); @@ -604,7 +613,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst) battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy10(battleMon.nickname, nickname); + StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName); src = (u8 *)&battleMon; for (size = 0; size < sizeof(battleMon); size++) @@ -629,7 +638,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst) moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - src = (u8*)(&moveData); + src = (u8 *)(&moveData); for (size = 0; size < sizeof(moveData); size++) dst[size] = src[size]; break; @@ -637,7 +646,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); + data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); dst[0] = data16; dst[1] = data16 >> 8; size = 2; @@ -652,7 +661,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst) case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); + dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); size = 1; break; case REQUEST_OTID_BATTLE: @@ -870,14 +879,14 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst) static void OpponentHandleGetRawMonData(void) { struct BattlePokemon battleMon; - u8 *src = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; - u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBattler][1]; + u8 *src = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; + u8 *dst = (u8 *)&battleMon + gBattleResources->bufferA[gActiveBattler][1]; u8 i; - for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++) + for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) dst[i] = src[i]; - BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst); + BtlController_EmitDataTransfer(BUFFER_B, gBattleResources->bufferA[gActiveBattler][2], dst); OpponentBufferExecCompleted(); } @@ -886,13 +895,13 @@ static void OpponentHandleSetMonData(void) u8 monToCheck; u8 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { SetOpponentMonData(gBattlerPartyIndexes[gActiveBattler]); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -905,11 +914,11 @@ static void OpponentHandleSetMonData(void) static void SetOpponentMonData(u8 monId) { - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3]; + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; + struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; s32 i; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: { @@ -950,10 +959,10 @@ static void SetOpponentMonData(u8 monId) } break; case REQUEST_SPECIES_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HELDITEM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MOVES_PP_BATTLE: for (i = 0; i < MAX_MON_MOVES; i++) @@ -967,165 +976,165 @@ static void SetOpponentMonData(u8 monId) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PP_DATA_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); break; case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_OTID_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_EXP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKERUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_GAME_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKEBALL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); break; case REQUEST_HP_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_STATUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MAX_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SHEEN_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; } } static void OpponentHandleSetRawMonData(void) { - u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; + u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; u8 i; - for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++) - dst[i] = gBattleBufferA[gActiveBattler][3 + i]; + for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) + dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; OpponentBufferExecCompleted(); } @@ -1138,7 +1147,7 @@ static void OpponentHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); @@ -1156,8 +1165,8 @@ static void OpponentHandleLoadMonSprite(void) static void OpponentHandleSwitchInAnim(void) { *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6; - gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; - StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; + StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; } @@ -1166,14 +1175,14 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1195,7 +1204,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) static void OpponentHandleReturnMonToBall(void) { - if (gBattleBufferA[gActiveBattler][1] == 0) + if (gBattleResources->bufferA[gActiveBattler][1] == 0) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; @@ -1290,7 +1299,7 @@ static void OpponentHandleDrawTrainerPic(void) trainerPicId = gTrainers[gTrainerBattleOpponent_A].trainerPic; } - if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS)) + if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) { if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon xPos = 152; @@ -1445,31 +1454,24 @@ static void OpponentHandleMoveAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - gAnimMoveTurn = gBattleBufferA[gActiveBattler][3]; - gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleBufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16]; + gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; + gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); + gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); + gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; + gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE - { - OpponentBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = OpponentDoMoveAnimation; - } + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + gBattlerControllerFuncs[gActiveBattler] = OpponentDoMoveAnimation; } } static void OpponentDoMoveAnimation(void) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleBufferA[gActiveBattler][11]; + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); + u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) { @@ -1507,7 +1509,7 @@ static void OpponentDoMoveAnimation(void) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; OpponentBufferExecCompleted(); } @@ -1521,11 +1523,11 @@ static void OpponentHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; - BattleArena_DeductMindPoints(gActiveBattler, *stringId); + BattleArena_DeductSkillPoints(gActiveBattler, *stringId); } static void OpponentHandlePrintSelectionString(void) @@ -1548,60 +1550,111 @@ static void OpponentHandleChooseMove(void) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - BtlController_EmitTwoReturnValues(1, 10, ChooseMoveAndTargetInBattlePalace()); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace()); OpponentBufferExecCompleted(); } else { u8 chosenMoveId; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); - if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER)) + if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER) + || IsWildMonSmart()) { - - BattleAI_SetupAIData(0xF); - chosenMoveId = BattleAI_ChooseMoveOrAction(); - + chosenMoveId = gBattleStruct->aiMoveOrAction[gActiveBattler]; + gBattlerTarget = gBattleStruct->aiChosenTarget[gActiveBattler]; switch (chosenMoveId) { case AI_CHOICE_WATCH: - BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_WATCH_CAREFULLY, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SAFARI_WATCH_CAREFULLY, 0); break; case AI_CHOICE_FLEE: - BtlController_EmitTwoReturnValues(1, B_ACTION_RUN, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_RUN, 0); + break; + case AI_CHOICE_SWITCH: + BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0xFFFF); break; case 6: - BtlController_EmitTwoReturnValues(1, 15, gBattlerTarget); + BtlController_EmitTwoReturnValues(BUFFER_B, 15, gBattlerTarget); break; default: - if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) - gBattlerTarget = gActiveBattler; - if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH) { - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + u16 chosenMove = moveInfo->moves[chosenMoveId]; + + if (GetBattlerMoveTargetType(gActiveBattler, chosenMove) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) + gBattlerTarget = gActiveBattler; + if (GetBattlerMoveTargetType(gActiveBattler, chosenMove) & MOVE_TARGET_BOTH) + { + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + } + if (ShouldUseZMove(gActiveBattler, gBattlerTarget, chosenMove)) + QueueZMove(gActiveBattler, chosenMove); + if (CanMegaEvolve(gActiveBattler)) // If opponent can mega evolve, do it. + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8)); + else + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); } - BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (gBattlerTarget << 8)); break; } OpponentBufferExecCompleted(); } - else + else // Wild pokemon - use random move { u16 move; + u8 target; do { chosenMoveId = Random() & 3; move = moveInfo->moves[chosenMoveId]; } while (move == MOVE_NONE); - if (gBattleMoves[move].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) - BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (gActiveBattler << 8)); + if (GetBattlerMoveTargetType(gActiveBattler, move) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gActiveBattler << 8)); else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (GetBattlerAtPosition(Random() & 2) << 8)); + { + do { + target = GetBattlerAtPosition(Random() & 2); + } while (!CanTargetBattler(gActiveBattler, target, move)); + + #if B_WILD_NATURAL_ENEMIES == TRUE + // Don't bother to loop through table if the move can't attack ally + if (!(gBattleMoves[move].target & MOVE_TARGET_BOTH)) + { + u16 i, speciesAttacker, speciesTarget, isPartnerEnemy = FALSE; + static const u16 naturalEnemies[][2] = + { + // Attacker Target + {SPECIES_ZANGOOSE, SPECIES_SEVIPER}, + {SPECIES_SEVIPER, SPECIES_ZANGOOSE}, + {SPECIES_HEATMOR, SPECIES_DURANT}, + {SPECIES_DURANT, SPECIES_HEATMOR}, + {SPECIES_SABLEYE, SPECIES_CARBINK}, + {SPECIES_MAREANIE, SPECIES_CORSOLA}, + }; + speciesAttacker = gBattleMons[gActiveBattler].species; + speciesTarget = gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(gActiveBattler))].species; + + for (i = 0; i < ARRAY_COUNT(naturalEnemies); i++) + { + if (speciesAttacker == naturalEnemies[i][0] && speciesTarget == naturalEnemies[i][1]) + { + isPartnerEnemy = TRUE; + break; + } + } + if (isPartnerEnemy && CanTargetBattler(gActiveBattler, target, move)) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (GetBattlerAtPosition(BATTLE_PARTNER(gActiveBattler)) << 8)); + else + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (target << 8)); + } + else + #endif + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (target << 8)); + } else - BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) << 8)); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) << 8)); OpponentBufferExecCompleted(); } @@ -1610,7 +1663,7 @@ static void OpponentHandleChooseMove(void) static void OpponentHandleChooseItem(void) { - BtlController_EmitOneReturnValue(1, *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2)); + BtlController_EmitOneReturnValue(BUFFER_B, *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2)); OpponentBufferExecCompleted(); } @@ -1636,17 +1689,7 @@ static void OpponentHandleChoosePokemon(void) battler2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); } - if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI)) - { - if (gActiveBattler == 1) - firstId = 0, lastId = 3; - else - firstId = 3, lastId = 6; - } - else - { - firstId = 0, lastId = 6; - } + GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); for (chosenMonId = firstId; chosenMonId < lastId; chosenMonId++) { @@ -1667,7 +1710,7 @@ static void OpponentHandleChoosePokemon(void) *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; - BtlController_EmitChosenMonReturnValue(1, chosenMonId, NULL); + BtlController_EmitChosenMonReturnValue(BUFFER_B, chosenMonId, NULL); OpponentBufferExecCompleted(); } @@ -1681,7 +1724,7 @@ static void OpponentHandleHealthBarUpdate(void) s16 hpVal; LoadBattleBarGfx(0); - hpVal = (gBattleBufferA[gActiveBattler][3] << 8) | gBattleBufferA[gActiveBattler][2]; + hpVal = (gBattleResources->bufferA[gActiveBattler][3] << 8) | gBattleResources->bufferA[gActiveBattler][2]; if (hpVal != INSTANT_HP_BAR_DROP) { @@ -1722,8 +1765,8 @@ static void OpponentHandleStatusAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], - gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); + InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], + gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } @@ -1781,7 +1824,7 @@ static void OpponentHandleClearUnkVar(void) static void OpponentHandleSetUnkVar(void) { - gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; OpponentBufferExecCompleted(); } @@ -1826,20 +1869,20 @@ static void OpponentHandlePlaySE(void) else pan = SOUND_PAN_TARGET; - PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); + PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); OpponentBufferExecCompleted(); } static void OpponentHandlePlayFanfareOrBGM(void) { - if (gBattleBufferA[gActiveBattler][3]) + if (gBattleResources->bufferA[gActiveBattler][3]) { BattleStopLowHpSound(); - PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } else { - PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } OpponentBufferExecCompleted(); @@ -1849,13 +1892,13 @@ static void OpponentHandleFaintingCry(void) { u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, 25, 5); + PlayCry_ByMode(species, 25, CRY_MODE_FAINT); OpponentBufferExecCompleted(); } static void OpponentHandleIntroSlide(void) { - HandleIntroSlide(gBattleBufferA[gActiveBattler][1]); + HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); gIntroSlideFlags |= 1; OpponentBufferExecCompleted(); } @@ -1895,22 +1938,22 @@ static void Task_StartSendOutAnim(u8 taskId) u8 savedActiveBank = gActiveBattler; gActiveBattler = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) + if ((!TwoIntroMons(gActiveBattler) || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) && !BATTLE_TWO_VS_ONE_OPPONENT) { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); } else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); } else { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; } @@ -1921,7 +1964,7 @@ static void Task_StartSendOutAnim(u8 taskId) static void OpponentHandleDrawPartyStatusSummary(void) { - if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { OpponentBufferExecCompleted(); } @@ -1929,7 +1972,7 @@ static void OpponentHandleDrawPartyStatusSummary(void) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - if (gBattleBufferA[gActiveBattler][2] != 0) + if (gBattleResources->bufferA[gActiveBattler][2] != 0) { if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E < 2) { @@ -1942,10 +1985,10 @@ static void OpponentHandleDrawPartyStatusSummary(void) } } - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); + gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - if (gBattleBufferA[gActiveBattler][2] != 0) + if (gBattleResources->bufferA[gActiveBattler][2] != 0) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; @@ -1977,7 +2020,7 @@ static void OpponentHandleSpriteInvisibility(void) { if (IsBattlerSpritePresent(gActiveBattler)) { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1]; + gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; CopyBattleSpriteInvisibility(gActiveBattler); } OpponentBufferExecCompleted(); @@ -1987,8 +2030,8 @@ static void OpponentHandleBattleAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u8 animationId = gBattleBufferA[gActiveBattler][1]; - u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; + u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) OpponentBufferExecCompleted(); @@ -2018,6 +2061,11 @@ static void OpponentHandleEndLinkBattle(void) OpponentBufferExecCompleted(); } +static void OpponentHandleDebugMenu(void) +{ + OpponentBufferExecCompleted(); +} + static void OpponentCmdEnd(void) { } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 65267099be..ea3bf2915b 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -8,6 +8,7 @@ #include "battle_message.h" #include "battle_setup.h" #include "battle_tv.h" +#include "battle_z_move.h" #include "bg.h" #include "data.h" #include "item.h" @@ -29,6 +30,7 @@ #include "util.h" #include "window.h" #include "constants/battle_anim.h" +#include "constants/battle_config.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/party_menu.h" @@ -36,9 +38,6 @@ #include "constants/trainers.h" #include "constants/rgb.h" -extern struct MusicPlayerInfo gMPlayInfo_BGM; - -// this file's functions static void PlayerHandleGetMonData(void); static void PlayerHandleSetMonData(void); static void PlayerHandleSetRawMonData(void); @@ -94,13 +93,12 @@ static void PlayerHandleBattleAnimation(void); static void PlayerHandleLinkStandbyMsg(void); static void PlayerHandleResetActionMoveSelection(void); static void PlayerHandleEndLinkBattle(void); +static void PlayerHandleBattleDebug(void); static void PlayerCmdEnd(void); static void PlayerBufferRunCommand(void); static void HandleInputChooseTarget(void); static void HandleInputChooseMove(void); -static void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1); -static void MoveSelectionDestroyCursorAt(u8 cursorPos); static void MoveSelectionDisplayPpNumber(void); static void MoveSelectionDisplayPpString(void); static void MoveSelectionDisplayMoveType(void); @@ -109,20 +107,22 @@ static void HandleMoveSwitching(void); static void SwitchIn_HandleSoundAndEnd(void); static void WaitForMonSelection(void); static void CompleteWhenChoseItem(void); -static void Task_LaunchLvlUpAnim(u8 taskId); -static void Task_PrepareToGiveExpWithExpBar(u8 taskId); -static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId); -static void Task_GiveExpWithExpBar(u8 taskId); -static void Task_UpdateLvlInHealthbox(u8 taskId); +static void Task_LaunchLvlUpAnim(u8); +static void Task_PrepareToGiveExpWithExpBar(u8); +static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8); +static void Task_GiveExpWithExpBar(u8); +static void Task_UpdateLvlInHealthbox(u8); static void PrintLinkStandbyMsg(void); -static u32 CopyPlayerMonData(u8 monId, u8 *dst); -static void SetPlayerMonData(u8 monId); -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); +static u32 CopyPlayerMonData(u8, u8 *); +static void SetPlayerMonData(u8); +static void StartSendOutAnim(u8, bool8); static void DoSwitchOutAnimation(void); static void PlayerDoMoveAnimation(void); -static void Task_StartSendOutAnim(u8 taskId); +static void Task_StartSendOutAnim(u8); static void EndDrawPartyStatusSummary(void); +static void ReloadMoveNames(void); + static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { [CONTROLLER_GETMONDATA] = PlayerHandleGetMonData, @@ -181,11 +181,10 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = [CONTROLLER_LINKSTANDBYMSG] = PlayerHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = PlayerHandleResetActionMoveSelection, [CONTROLLER_ENDLINKBATTLE] = PlayerHandleEndLinkBattle, + [CONTROLLER_DEBUGMENU] = PlayerHandleBattleDebug, [CONTROLLER_TERMINATOR_NOP] = PlayerCmdEnd }; -static const u8 sTargetIdentities[MAX_BATTLERS_COUNT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT}; - // unknown unused data static const u8 sUnused[] = {0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58}; @@ -208,7 +207,7 @@ static void PlayerBufferExecCompleted(void) u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; } else { @@ -220,8 +219,8 @@ static void PlayerBufferRunCommand(void) { if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) { - if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerBufferCommands)) - sPlayerBufferCommands[gBattleBufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerBufferCommands)) + sPlayerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); else PlayerBufferExecCompleted(); } @@ -235,7 +234,7 @@ static void CompleteOnBankSpritePosX_0(void) static void HandleInputChooseAction(void) { - u16 itemId = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + u16 itemId = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); @@ -248,20 +247,21 @@ static void HandleInputChooseAction(void) if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); + TryHideLastUsedBall(); switch (gActionSelectionCursor[gActiveBattler]) { - case 0: - BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, 0); + case 0: // Top left + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_MOVE, 0); break; - case 1: - BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0); + case 1: // Top right + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_ITEM, 0); break; - case 2: - BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); + case 2: // Bottom left + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0); break; - case 3: - BtlController_EmitTwoReturnValues(1, B_ACTION_RUN, 0); + case 3: // Bottom right + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_RUN, 0); break; } PlayerBufferExecCompleted(); @@ -313,7 +313,7 @@ static void HandleInputChooseAction(void) && !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - if (gBattleBufferA[gActiveBattler][1] == B_ACTION_USE_ITEM) + if (gBattleResources->bufferA[gActiveBattler][1] == B_ACTION_USE_ITEM) { // Add item to bag if it is a ball if (itemId <= LAST_BALL) @@ -322,7 +322,7 @@ static void HandleInputChooseAction(void) return; } PlaySE(SE_SELECT); - BtlController_EmitTwoReturnValues(1, B_ACTION_CANCEL_PARTNER, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_CANCEL_PARTNER, 0); PlayerBufferExecCompleted(); } } @@ -330,6 +330,20 @@ static void HandleInputChooseAction(void) { SwapHpBarsWithHpText(); } + else if (B_ENABLE_DEBUG && gMain.newKeys & SELECT_BUTTON) + { + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_DEBUG, 0); + PlayerBufferExecCompleted(); + } + #if B_LAST_USED_BALL == TRUE + else if (JOY_NEW(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall()) + { + PlaySE(SE_SELECT); + TryHideLastUsedBall(); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_THROW_BALL, 0); + PlayerBufferExecCompleted(); + } + #endif } static void UnusedEndBounceEffect(void) @@ -342,21 +356,15 @@ static void UnusedEndBounceEffect(void) static void HandleInputChooseTarget(void) { s32 i; - u8 identities[MAX_BATTLERS_COUNT]; - memcpy(identities, sTargetIdentities, ARRAY_COUNT(sTargetIdentities)); + static const u8 identities[MAX_BATTLERS_COUNT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT}; + u16 move = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler]); + u16 moveTarget = GetBattlerMoveTargetType(gActiveBattler, move); DoBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX, 15, 1); - - // what a weird loop - i = 0; - if (gBattlersCount != 0) + for (i = 0; i < gBattlersCount; i++) { - do - { - if (i != gMultiUsePlayerCursor) - EndBounceEffect(i, BOUNCE_HEALTHBOX); - i++; - } while (i < gBattlersCount); + if (i != gMultiUsePlayerCursor) + EndBounceEffect(i, BOUNCE_HEALTHBOX); } if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) @@ -367,15 +375,20 @@ static void HandleInputChooseTarget(void) if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; - BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget; + if (gBattleStruct->mega.playerSelect) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + else + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); + TryHideLastUsedBall(); + HideTriggerSprites(); PlayerBufferExecCompleted(); } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget; gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); @@ -384,98 +397,134 @@ static void HandleInputChooseTarget(void) else if (JOY_NEW(DPAD_LEFT | DPAD_UP)) { PlaySE(SE_SELECT); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget; - do + if (moveTarget == (MOVE_TARGET_USER | MOVE_TARGET_ALLY)) + { + gMultiUsePlayerCursor ^= BIT_FLANK; + } + else { - u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor); - - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (currSelIdentity == identities[i]) - break; - } do { - if (--i < 0) -#ifdef UBFIX - i = MAX_BATTLERS_COUNT - 1; -#else - i = MAX_BATTLERS_COUNT; // UB: array out of range -#endif - gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]); - } while (gMultiUsePlayerCursor == gBattlersCount); + u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor); - i = 0; - switch (GetBattlerPosition(gMultiUsePlayerCursor)) - { - case B_POSITION_PLAYER_LEFT: - case B_POSITION_PLAYER_RIGHT: - if (gActiveBattler != gMultiUsePlayerCursor) - i++; - else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED) - i++; - break; - case B_POSITION_OPPONENT_LEFT: - case B_POSITION_OPPONENT_RIGHT: - i++; - break; - } + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (currSelIdentity == identities[i]) + break; + } + do + { + if (--i < 0) + i = MAX_BATTLERS_COUNT - 1; + gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]); + } while (gMultiUsePlayerCursor == gBattlersCount); - if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor]) i = 0; - } while (i == 0); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget; + switch (GetBattlerPosition(gMultiUsePlayerCursor)) + { + case B_POSITION_PLAYER_LEFT: + case B_POSITION_PLAYER_RIGHT: + if (gActiveBattler != gMultiUsePlayerCursor) + i++; + else if (moveTarget & MOVE_TARGET_USER_OR_SELECTED) + i++; + break; + case B_POSITION_OPPONENT_LEFT: + case B_POSITION_OPPONENT_RIGHT: + i++; + break; + } + + if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor] + || !CanTargetBattler(gActiveBattler, gMultiUsePlayerCursor, move)) + i = 0; + } while (i == 0); + } + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget; } else if (JOY_NEW(DPAD_RIGHT | DPAD_DOWN)) { PlaySE(SE_SELECT); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget; - do + if (moveTarget == (MOVE_TARGET_USER | MOVE_TARGET_ALLY)) + { + gMultiUsePlayerCursor ^= BIT_FLANK; + } + else { - u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor); - - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (currSelIdentity == identities[i]) - break; - } do { - if (++i > 3) - i = 0; - gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]); - } while (gMultiUsePlayerCursor == gBattlersCount); + u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor); - i = 0; - switch (GetBattlerPosition(gMultiUsePlayerCursor)) - { - case B_POSITION_PLAYER_LEFT: - case B_POSITION_PLAYER_RIGHT: - if (gActiveBattler != gMultiUsePlayerCursor) - i++; - else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED) - i++; - break; - case B_POSITION_OPPONENT_LEFT: - case B_POSITION_OPPONENT_RIGHT: - i++; - break; - } + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (currSelIdentity == identities[i]) + break; + } + do + { + if (++i > 3) + i = 0; + gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]); + } while (gMultiUsePlayerCursor == gBattlersCount); - if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor]) i = 0; - } while (i == 0); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget; + switch (GetBattlerPosition(gMultiUsePlayerCursor)) + { + case B_POSITION_PLAYER_LEFT: + case B_POSITION_PLAYER_RIGHT: + if (gActiveBattler != gMultiUsePlayerCursor) + i++; + else if (moveTarget & MOVE_TARGET_USER_OR_SELECTED) + i++; + break; + case B_POSITION_OPPONENT_LEFT: + case B_POSITION_OPPONENT_RIGHT: + i++; + break; + } + + if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor] + || !CanTargetBattler(gActiveBattler, gMultiUsePlayerCursor, move)) + i = 0; + } while (i == 0); + } + + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget; } } -static void HandleInputChooseMove(void) +static void HideAllTargets(void) { - bool32 canSelectTarget = FALSE; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); + s32 i; + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (IsBattlerAlive(i) && gBattleSpritesDataPtr->healthBoxesData[i].healthboxIsBouncing) + { + gSprites[gBattlerSpriteIds[i]].callback = SpriteCB_HideAsMoveTarget; + EndBounceEffect(i, BOUNCE_HEALTHBOX); + } + } +} +static void HideShownTargets(void) +{ + s32 i; + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (IsBattlerAlive(i) && gBattleSpritesDataPtr->healthBoxesData[i].healthboxIsBouncing && i != gActiveBattler) + { + gSprites[gBattlerSpriteIds[i]].callback = SpriteCB_HideAsMoveTarget; + EndBounceEffect(i, BOUNCE_HEALTHBOX); + } + } +} + +static void HandleInputShowEntireFieldTargets(void) +{ if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; else @@ -483,19 +532,97 @@ static void HandleInputChooseMove(void) if (JOY_NEW(A_BUTTON)) { - u8 moveTarget; + PlaySE(SE_SELECT); + HideAllTargets(); + if (gBattleStruct->mega.playerSelect) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + else + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); + HideMegaTriggerSprite(); + PlayerBufferExecCompleted(); + } + else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59) + { + PlaySE(SE_SELECT); + HideAllTargets(); + gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; + DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); + DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); + } +} +static void HandleInputShowTargets(void) +{ + if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + gPlayerDpadHoldFrames++; + else + gPlayerDpadHoldFrames = 0; + + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + HideShownTargets(); + if (gBattleStruct->mega.playerSelect) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + else + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); + HideTriggerSprites(); + TryHideLastUsedBall(); + PlayerBufferExecCompleted(); + } + else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59) + { + PlaySE(SE_SELECT); + HideShownTargets(); + gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; + DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); + DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); + } +} + +static void TryShowAsTarget(u32 battlerId) +{ + if (IsBattlerAlive(battlerId)) + { + DoBounceEffect(battlerId, BOUNCE_HEALTHBOX, 15, 1); + gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCB_ShowAsMoveTarget; + } +} + +static void HandleInputChooseMove(void) +{ + u16 moveTarget; + u32 canSelectTarget = 0; + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + + if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + gPlayerDpadHoldFrames++; + else + gPlayerDpadHoldFrames = 0; + + if (gMain.newKeys & A_BUTTON) + { PlaySE(SE_SELECT); if (moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] == MOVE_CURSE) { - if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST) + if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST && moveInfo->monType3 != TYPE_GHOST) moveTarget = MOVE_TARGET_USER; else moveTarget = MOVE_TARGET_SELECTED; } else { - moveTarget = gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].target; + moveTarget = GetBattlerMoveTargetType(gActiveBattler, moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]); + } + + if (gBattleStruct->zmove.viewing) + { + u16 chosenMove = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]; + + QueueZMove(gActiveBattler, chosenMove); + gBattleStruct->zmove.viewing = FALSE; + if (gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].split != SPLIT_STATUS) + moveTarget = MOVE_TARGET_SELECTED; //damaging z moves always have selected target } if (moveTarget & MOVE_TARGET_USER) @@ -503,34 +630,63 @@ static void HandleInputChooseMove(void) else gMultiUsePlayerCursor = GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) & BIT_SIDE) ^ BIT_SIDE); - if (!gBattleBufferA[gActiveBattler][1]) // not a double battle + if (!gBattleResources->bufferA[gActiveBattler][1]) // not a double battle { - if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleBufferA[gActiveBattler][2]) - canSelectTarget++; + if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleResources->bufferA[gActiveBattler][2]) + canSelectTarget = 1; } else // double battle { - if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER))) - canSelectTarget++; // either selected or user + if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER | MOVE_TARGET_ALLY))) + canSelectTarget = 1; // either selected or user + if (moveTarget == (MOVE_TARGET_USER | MOVE_TARGET_ALLY) && IsBattlerAlive(BATTLE_PARTNER(gActiveBattler))) + canSelectTarget = 1; if (moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] == 0) { - canSelectTarget = FALSE; + canSelectTarget = 0; } else if (!(moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1) { gMultiUsePlayerCursor = GetDefaultMoveTarget(gActiveBattler); - canSelectTarget = FALSE; + canSelectTarget = 0; + } + + // Show all available targets for multi-target moves + if (B_SHOW_TARGETS) + { + if ((moveTarget & MOVE_TARGET_ALL_BATTLERS) == MOVE_TARGET_ALL_BATTLERS) + { + u32 i = 0; + for (i = 0; i < gBattlersCount; i++) + TryShowAsTarget(i); + + canSelectTarget = 3; + } + else if (moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) + { + TryShowAsTarget(gMultiUsePlayerCursor); + TryShowAsTarget(BATTLE_PARTNER(gMultiUsePlayerCursor)); + if (moveTarget & MOVE_TARGET_FOES_AND_ALLY) + TryShowAsTarget(BATTLE_PARTNER(gActiveBattler)); + canSelectTarget = 2; + } } } - if (!canSelectTarget) + switch (canSelectTarget) { - BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); + case 0: + default: + if (gBattleStruct->mega.playerSelect) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); + else + BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); + HideTriggerSprites(); + TryHideLastUsedBall(); PlayerBufferExecCompleted(); - } - else - { + break; + case 1: gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget; if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) @@ -540,16 +696,33 @@ static void HandleInputChooseMove(void) else gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget; + break; + case 2: + gBattlerControllerFuncs[gActiveBattler] = HandleInputShowTargets; + break; + case 3: // Entire field + gBattlerControllerFuncs[gActiveBattler] = HandleInputShowEntireFieldTargets; + break; } } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); - BtlController_EmitTwoReturnValues(1, 10, 0xFFFF); - PlayerBufferExecCompleted(); + if (gBattleStruct->zmove.viewing) + { + ReloadMoveNames(); + } + else + { + gBattleStruct->mega.playerSelect = FALSE; + gBattleStruct->zmove.viable = FALSE; + BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0xFFFF); + HideTriggerSprites(); + PlayerBufferExecCompleted(); + } } - else if (JOY_NEW(DPAD_LEFT)) + else if (JOY_NEW(DPAD_LEFT) && !gBattleStruct->zmove.viewing) { if (gMoveSelectionCursor[gActiveBattler] & 1) { @@ -559,9 +732,10 @@ static void HandleInputChooseMove(void) MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); + TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); } } - else if (JOY_NEW(DPAD_RIGHT)) + else if (JOY_NEW(DPAD_RIGHT) && !gBattleStruct->zmove.viewing) { if (!(gMoveSelectionCursor[gActiveBattler] & 1) && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose) @@ -572,9 +746,10 @@ static void HandleInputChooseMove(void) MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); + TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); } } - else if (JOY_NEW(DPAD_UP)) + else if (JOY_NEW(DPAD_UP) && !gBattleStruct->zmove.viewing) { if (gMoveSelectionCursor[gActiveBattler] & 2) { @@ -584,9 +759,10 @@ static void HandleInputChooseMove(void) MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); + TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); } } - else if (JOY_NEW(DPAD_DOWN)) + else if (JOY_NEW(DPAD_DOWN) && !gBattleStruct->zmove.viewing) { if (!(gMoveSelectionCursor[gActiveBattler] & 2) && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose) @@ -597,9 +773,10 @@ static void HandleInputChooseMove(void) MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); + TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); } } - else if (JOY_NEW(SELECT_BUTTON)) + else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing) { if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -611,10 +788,40 @@ static void HandleInputChooseMove(void) gMultiUsePlayerCursor = gMoveSelectionCursor[gActiveBattler] + 1; MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); - BattlePutTextOnWindow(gText_BattleSwitchWhich, 0xB); + BattlePutTextOnWindow(gText_BattleSwitchWhich, B_WIN_SWITCH_PROMPT); gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitching; } } + else if (JOY_NEW(START_BUTTON)) + { + if (CanMegaEvolve(gActiveBattler)) + { + gBattleStruct->mega.playerSelect ^= 1; + ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, gBattleStruct->mega.playerSelect); + PlaySE(SE_SELECT); + } + else if (gBattleStruct->zmove.viable) + { + // show z move name / info + //TODO: brighten z move symbol + PlaySE(SE_SELECT); + if (!gBattleStruct->zmove.viewing) + MoveSelectionDisplayZMove(gBattleStruct->zmove.chosenZMove); + else + ReloadMoveNames(); + } + } +} + +static void ReloadMoveNames(void) +{ + gBattleStruct->mega.playerSelect = FALSE; + gBattleStruct->zmove.viewing = FALSE; + MoveSelectionDestroyCursorAt(0); + MoveSelectionDisplayMoveNames(); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); + MoveSelectionDisplayPpNumber(); + MoveSelectionDisplayMoveType(); } static u32 HandleMoveInputUnused(void) @@ -679,7 +886,7 @@ static void HandleMoveSwitching(void) if (gMoveSelectionCursor[gActiveBattler] != gMultiUsePlayerCursor) { - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); s32 i; // swap moves and pp @@ -858,7 +1065,7 @@ static void SetLinkBattleEndCallbacks(void) if (gReceivedRemoteLinkPlayers == 0) { m4aSongNumStop(SE_LOW_HEALTH); - gMain.inBattle = 0; + gMain.inBattle = FALSE; gMain.callback1 = gPreBattleCallback1; SetMainCallback2(CB2_InitEndLinkBattle); if (gBattleOutcome == B_OUTCOME_WON) @@ -871,7 +1078,7 @@ static void SetLinkBattleEndCallbacks(void) if (IsLinkTaskFinished()) { m4aSongNumStop(SE_LOW_HEALTH); - gMain.inBattle = 0; + gMain.inBattle = FALSE; gMain.callback1 = gPreBattleCallback1; SetMainCallback2(CB2_InitEndLinkBattle); if (gBattleOutcome == B_OUTCOME_WON) @@ -901,7 +1108,7 @@ void SetBattleEndCallbacks(void) else { m4aSongNumStop(SE_LOW_HEALTH); - gMain.inBattle = 0; + gMain.inBattle = FALSE; gMain.callback1 = gPreBattleCallback1; SetMainCallback2(gMain.savedCallback); } @@ -940,20 +1147,25 @@ static void Intro_DelayAndEnd(void) } } +static bool32 TwoIntroMons(u32 battlerId) // Double battle with both player pokemon active. +{ + return (IsDoubleBattle() && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[battlerId ^ BIT_FLANK]])); +} + static void Intro_WaitForShinyAnimAndHealthbox(void) { bool8 healthboxAnimDone = FALSE; // Check if healthbox has finished sliding in - if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) + if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy + && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; } else { - if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == SpriteCallbackDummy) + if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) healthboxAnimDone = TRUE; } @@ -971,7 +1183,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(void) HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - if (IsDoubleBattle()) + if (TwoIntroMons(gActiveBattler)) HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], gActiveBattler ^ BIT_FLANK); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; @@ -985,22 +1197,22 @@ static void Intro_TryShinyAnimShowHealthbox(void) bool32 battlerAnimsDone = FALSE; // Start shiny animation if applicable for 1st pokemon - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); // Start shiny animation if applicable for 2nd pokemon - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); // Show healthbox after ball anim - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted) { - if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL); StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); @@ -1024,22 +1236,14 @@ static void Intro_TryShinyAnimShowHealthbox(void) if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) m4aMPlayContinue(&gMPlayInfo_BGM); else - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = TRUE; bgmRestored = TRUE; } // Wait for battler anims - if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) - { - if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) - { - battlerAnimsDone = TRUE; - } - } - else + if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy @@ -1049,11 +1253,19 @@ static void Intro_TryShinyAnimShowHealthbox(void) battlerAnimsDone = TRUE; } } + else + { + if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + { + battlerAnimsDone = TRUE; + } + } // Clean up if (bgmRestored && battlerAnimsDone) { - if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]); DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); @@ -1072,7 +1284,7 @@ static void SwitchIn_CleanShinyAnimShowSubstitute(void) && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { CopyBattleSpriteInvisibility(gActiveBattler); - + // Reset shiny anim (even if it didn't occur) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; @@ -1092,7 +1304,7 @@ static void SwitchIn_HandleSoundAndEnd(void) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); PlayerBufferExecCompleted(); } @@ -1121,7 +1333,7 @@ void Task_PlayerController_RestoreBgmAfterCry(u8 taskId) { if (!IsCryPlayingOrClearCrySongs()) { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); DestroyTask(taskId); } } @@ -1134,7 +1346,7 @@ static void CompleteOnHealthbarDone(void) if (hpValue != -1) { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); } else { @@ -1145,20 +1357,26 @@ static void CompleteOnHealthbarDone(void) static void CompleteOnInactiveTextPrinter(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) PlayerBufferExecCompleted(); } -#define tExpTask_monId data[0] -#define tExpTask_gainedExp data[1] -#define tExpTask_battler data[2] -#define tExpTask_frames data[10] +#define tExpTask_monId data[0] +#define tExpTask_battler data[2] +#define tExpTask_gainedExp_1 data[3] +#define tExpTask_gainedExp_2 data[4] // Stored as two half-words containing a word. +#define tExpTask_frames data[10] + +static s32 GetTaskExpValue(u8 taskId) +{ + return (u16)(gTasks[taskId].tExpTask_gainedExp_1) | (gTasks[taskId].tExpTask_gainedExp_2 << 16); +} static void Task_GiveExpToMon(u8 taskId) { u32 monId = (u8)(gTasks[taskId].tExpTask_monId); u8 battlerId = gTasks[taskId].tExpTask_battler; - s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; + s32 gainedExp = GetTaskExpValue(taskId); if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // Give exp without moving the expbar. { @@ -1177,7 +1395,7 @@ static void Task_GiveExpToMon(u8 taskId) gainedExp -= nextLvlExp - currExp; savedActiveBattler = gActiveBattler; gActiveBattler = battlerId; - BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp); + BtlController_EmitTwoReturnValues(BUFFER_B, RET_VALUE_LEVELED_UP, gainedExp); gActiveBattler = savedActiveBattler; if (IsDoubleBattle() == TRUE @@ -1203,7 +1421,7 @@ static void Task_GiveExpToMon(u8 taskId) static void Task_PrepareToGiveExpWithExpBar(u8 taskId) { u8 monIndex = gTasks[taskId].tExpTask_monId; - s32 gainedExp = gTasks[taskId].tExpTask_gainedExp; + s32 gainedExp = GetTaskExpValue(taskId); u8 battlerId = gTasks[taskId].tExpTask_battler; struct Pokemon *mon = &gPlayerParty[monIndex]; u8 level = GetMonData(mon, MON_DATA_LEVEL); @@ -1228,9 +1446,9 @@ static void Task_GiveExpWithExpBar(u8 taskId) else { u8 monId = gTasks[taskId].tExpTask_monId; - s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; + s32 gainedExp = GetTaskExpValue(taskId); u8 battlerId = gTasks[taskId].tExpTask_battler; - s16 newExpPoints; + s32 newExpPoints; newExpPoints = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0); SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]); @@ -1256,7 +1474,7 @@ static void Task_GiveExpWithExpBar(u8 taskId) gainedExp -= expOnNextLvl - currExp; savedActiveBattler = gActiveBattler; gActiveBattler = battlerId; - BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp); + BtlController_EmitTwoReturnValues(BUFFER_B, RET_VALUE_LEVELED_UP, gainedExp); gActiveBattler = savedActiveBattler; gTasks[taskId].func = Task_LaunchLvlUpAnim; } @@ -1341,7 +1559,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void) static void CompleteOnInactiveTextPrinter2(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) PlayerBufferExecCompleted(); } @@ -1364,11 +1582,11 @@ static void WaitForMonSelection(void) if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { if (gPartyMenuUseExitCallback == TRUE) - BtlController_EmitChosenMonReturnValue(1, gSelectedMonPartyId, gBattlePartyCurrentOrder); + BtlController_EmitChosenMonReturnValue(BUFFER_B, gSelectedMonPartyId, gBattlePartyCurrentOrder); else - BtlController_EmitChosenMonReturnValue(1, PARTY_SIZE, NULL); + BtlController_EmitChosenMonReturnValue(BUFFER_B, PARTY_SIZE, NULL); - if ((gBattleBufferA[gActiveBattler][1] & 0xF) == 1) + if ((gBattleResources->bufferA[gActiveBattler][1] & 0xF) == 1) PrintLinkStandbyMsg(); PlayerBufferExecCompleted(); @@ -1390,7 +1608,7 @@ static void CompleteWhenChoseItem(void) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { - BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId); + BtlController_EmitOneReturnValue(BUFFER_B, gSpecialVar_ItemId); PlayerBufferExecCompleted(); } } @@ -1438,19 +1656,19 @@ static void PlayerHandleYesNoInput(void) } if (JOY_NEW(A_BUTTON)) { - HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); PlaySE(SE_SELECT); if (gMultiUsePlayerCursor != 0) - BtlController_EmitTwoReturnValues(1, 0xE, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, 0xE, 0); else - BtlController_EmitTwoReturnValues(1, 0xD, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, 0xD, 0); PlayerBufferExecCompleted(); } if (JOY_NEW(B_BUTTON)) { - HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); PlaySE(SE_SELECT); PlayerBufferExecCompleted(); } @@ -1459,14 +1677,15 @@ static void PlayerHandleYesNoInput(void) static void MoveSelectionDisplayMoveNames(void) { s32 i; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); gNumberOfMovesToChoose = 0; for (i = 0; i < MAX_MON_MOVES; i++) { MoveSelectionDestroyCursorAt(i); StringCopy(gDisplayedStringBattle, gMoveNames[moveInfo->moves[i]]); - BattlePutTextOnWindow(gDisplayedStringBattle, i + 3); + // Prints on windows B_WIN_MOVE_NAME_1, B_WIN_MOVE_NAME_2, B_WIN_MOVE_NAME_3, B_WIN_MOVE_NAME_4 + BattlePutTextOnWindow(gDisplayedStringBattle, i + B_WIN_MOVE_NAME_1); if (moveInfo->moves[i] != MOVE_NONE) gNumberOfMovesToChoose++; } @@ -1475,7 +1694,7 @@ static void MoveSelectionDisplayMoveNames(void) static void MoveSelectionDisplayPpString(void) { StringCopy(gDisplayedStringBattle, gText_MoveInterfacePP); - BattlePutTextOnWindow(gDisplayedStringBattle, 7); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_PP); } static void MoveSelectionDisplayPpNumber(void) @@ -1483,43 +1702,43 @@ static void MoveSelectionDisplayPpNumber(void) u8 *txtPtr; struct ChooseMoveStruct *moveInfo; - if (gBattleBufferA[gActiveBattler][2] == TRUE) // check if we didn't want to display pp number + if (gBattleResources->bufferA[gActiveBattler][2] == TRUE) // check if we didn't want to display pp number return; SetPpNumbersPaletteInMoveSelection(); - moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); + moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2); *(txtPtr)++ = CHAR_SLASH; ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2); - BattlePutTextOnWindow(gDisplayedStringBattle, 9); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_PP_REMAINING); } static void MoveSelectionDisplayMoveType(void) { u8 *txtPtr; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); *(txtPtr)++ = EXT_CTRL_CODE_BEGIN; - *(txtPtr)++ = EXT_CTRL_CODE_SIZE; - *(txtPtr)++ = 1; + *(txtPtr)++ = EXT_CTRL_CODE_FONT; + *(txtPtr)++ = FONT_NORMAL; StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]); - BattlePutTextOnWindow(gDisplayedStringBattle, 10); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } -static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 arg1) +void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum) { u16 src[2]; - src[0] = arg1 + 1; - src[1] = arg1 + 2; + src[0] = baseTileNum + 1; + src[1] = baseTileNum + 2; CopyToBgTilemapBufferRect_ChangePalette(0, src, 9 * (cursorPosition & 1) + 1, 55 + (cursorPosition & 2), 1, 2, 0x11); CopyBgTilemapBufferToVram(0); } -static void MoveSelectionDestroyCursorAt(u8 cursorPosition) +void MoveSelectionDestroyCursorAt(u8 cursorPosition) { u16 src[2]; src[0] = 0x1016; @@ -1529,7 +1748,7 @@ static void MoveSelectionDestroyCursorAt(u8 cursorPosition) CopyBgTilemapBufferToVram(0); } -void ActionSelectionCreateCursorAt(u8 cursorPosition, u8 arg1) +void ActionSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum) { u16 src[2]; src[0] = 1; @@ -1577,7 +1796,7 @@ static void PrintLinkStandbyMsg(void) { gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - BattlePutTextOnWindow(gText_LinkStandby, 0); + BattlePutTextOnWindow(gText_LinkStandby, B_WIN_MSG); } } @@ -1588,13 +1807,13 @@ static void PlayerHandleGetMonData(void) u8 monToCheck; s32 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { size += CopyPlayerMonData(gBattlerPartyIndexes[gActiveBattler], monData); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -1602,7 +1821,7 @@ static void PlayerHandleGetMonData(void) monToCheck >>= 1; } } - BtlController_EmitDataTransfer(1, size, monData); + BtlController_EmitDataTransfer(BUFFER_B, size, monData); PlayerBufferExecCompleted(); } @@ -1616,7 +1835,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst) u32 data32; s32 size = 0; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); @@ -1648,7 +1867,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst) battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy10(battleMon.nickname, nickname); + StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); src = (u8 *)&battleMon; for (size = 0; size < sizeof(battleMon); size++) @@ -1673,7 +1892,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst) moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - src = (u8*)(&moveData); + src = (u8 *)(&moveData); for (size = 0; size < sizeof(moveData); size++) dst[size] = src[size]; break; @@ -1681,7 +1900,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); + data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); dst[0] = data16; dst[1] = data16 >> 8; size = 2; @@ -1696,7 +1915,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst) case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); + dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); size = 1; break; case REQUEST_OTID_BATTLE: @@ -1914,14 +2133,14 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst) void PlayerHandleGetRawMonData(void) { struct BattlePokemon battleMon; - u8 *src = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; - u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBattler][1]; + u8 *src = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; + u8 *dst = (u8 *)&battleMon + gBattleResources->bufferA[gActiveBattler][1]; u8 i; - for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++) + for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) dst[i] = src[i]; - BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst); + BtlController_EmitDataTransfer(BUFFER_B, gBattleResources->bufferA[gActiveBattler][2], dst); PlayerBufferExecCompleted(); } @@ -1930,13 +2149,13 @@ static void PlayerHandleSetMonData(void) u8 monToCheck; u8 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { SetPlayerMonData(gBattlerPartyIndexes[gActiveBattler]); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -1949,11 +2168,11 @@ static void PlayerHandleSetMonData(void) static void SetPlayerMonData(u8 monId) { - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3]; + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; + struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; s32 i; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: { @@ -1994,10 +2213,10 @@ static void SetPlayerMonData(u8 monId) } break; case REQUEST_SPECIES_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HELDITEM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MOVES_PP_BATTLE: for (i = 0; i < MAX_MON_MOVES; i++) @@ -2011,154 +2230,154 @@ static void SetPlayerMonData(u8 monId) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PP_DATA_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); break; case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_OTID_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_EXP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKERUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_GAME_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKEBALL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); break; case REQUEST_HP_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_STATUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MAX_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SHEEN_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; } @@ -2167,11 +2386,11 @@ static void SetPlayerMonData(u8 monId) static void PlayerHandleSetRawMonData(void) { - u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; + u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; u8 i; - for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++) - dst[i] = gBattleBufferA[gActiveBattler][3 + i]; + for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) + dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; PlayerBufferExecCompleted(); } @@ -2185,12 +2404,12 @@ static void PlayerHandleLoadMonSprite(void) static void PlayerHandleSwitchInAnim(void) { - ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]); - gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; + ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); + gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); gActionSelectionCursor[gActiveBattler] = 0; gMoveSelectionCursor[gActiveBattler] = 0; - StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnimShowHealthbox; } @@ -2199,14 +2418,14 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite( &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -2227,13 +2446,14 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) static void PlayerHandleReturnMonToBall(void) { - if (gBattleBufferA[gActiveBattler][1] == 0) + if (!gBattleResources->bufferA[gActiveBattler][1]) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; } else { + // Skip animation, just remove battler FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); @@ -2301,7 +2521,7 @@ static void PlayerHandleDrawTrainerPic(void) else // First mon, on the left. xPos = 32; - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER) + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER && gPartnerTrainerId < TRAINER_CUSTOM_PARTNER) { xPos = 90; yPos = (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 80; @@ -2319,7 +2539,7 @@ static void PlayerHandleDrawTrainerPic(void) } // Use front pic table for any tag battles unless your partner is Steven. - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER) + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER && gPartnerTrainerId < TRAINER_CUSTOM_PARTNER) { trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender); DecompressTrainerFrontPic(trainerPicId, gActiveBattler); @@ -2441,23 +2661,31 @@ static void PlayerHandleSuccessBallThrowAnim(void) { gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS; gDoingBattleAnim = TRUE; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW); + if (IsCriticalCapture()) + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_CRITICAL_CAPTURE_THROW); + else + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_BALL_THROW); + gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone; } static void PlayerHandleBallThrowAnim(void) { - u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1]; + u8 ballThrowCaseId = gBattleResources->bufferA[gActiveBattler][1]; gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId; gDoingBattleAnim = TRUE; - InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW); + if (IsCriticalCapture()) + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_CRITICAL_CAPTURE_THROW); + else + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_BALL_THROW); + gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone; } static void PlayerHandlePause(void) { - u8 timer = gBattleBufferA[gActiveBattler][1]; + u8 timer = gBattleResources->bufferA[gActiveBattler][1]; while (timer != 0) timer--; @@ -2469,32 +2697,25 @@ static void PlayerHandleMoveAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - gAnimMoveTurn = gBattleBufferA[gActiveBattler][3]; - gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleBufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16]; + gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; + gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); + gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); + gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; + gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // Always returns FALSE. - { - PlayerBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation; - BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); - } + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation; + BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); } } static void PlayerDoMoveAnimation(void) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleBufferA[gActiveBattler][11]; + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); + u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) { @@ -2532,7 +2753,7 @@ static void PlayerDoMoveAnimation(void) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; PlayerBufferExecCompleted(); } @@ -2546,12 +2767,12 @@ static void PlayerHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2; BattleTv_SetDataBasedOnString(*stringId); - BattleArena_DeductMindPoints(gActiveBattler, *stringId); + BattleArena_DeductSkillPoints(gActiveBattler, *stringId); } static void PlayerHandlePrintSelectionString(void) @@ -2578,22 +2799,23 @@ static void PlayerHandleChooseAction(void) gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; BattleTv_ClearExplosionFaintCause(); - BattlePutTextOnWindow(gText_BattleMenu, 2); + BattlePutTextOnWindow(gText_BattleMenu, B_WIN_ACTION_MENU); for (i = 0; i < 4; i++) ActionSelectionDestroyCursorAt(i); + TryRestoreLastUsedBall(); ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo); - BattlePutTextOnWindow(gDisplayedStringBattle, 1); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); } static void PlayerHandleYesNoBox(void) { if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { - HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); - BattlePutTextOnWindow(gText_BattleYesNoChoice, 12); + HandleBattleWindow(YESNOBOX_X_Y, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); gMultiUsePlayerCursor = 1; BattleCreateYesNoCursorAt(1); gBattlerControllerFuncs[gActiveBattler] = PlayerHandleYesNoInput; @@ -2621,7 +2843,7 @@ static void PlayerChooseMoveInBattlePalace(void) if (--*(gBattleStruct->arenaMindPoints + gActiveBattler) == 0) { gBattlePalaceMoveSelectionRngValue = gRngValue; - BtlController_EmitTwoReturnValues(1, 10, ChooseMoveAndTargetInBattlePalace()); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace()); PlayerBufferExecCompleted(); } } @@ -2635,7 +2857,20 @@ static void PlayerHandleChooseMove(void) } else { + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + InitMoveSelectionsVarsAndStrings(); + gBattleStruct->mega.playerSelect = FALSE; + if (!IsMegaTriggerSpriteActive()) + gBattleStruct->mega.triggerSpriteId = 0xFF; + if (CanMegaEvolve(gActiveBattler)) + CreateMegaTriggerSprite(gActiveBattler, 0); + if (!IsZMoveTriggerSpriteActive()) + gBattleStruct->zmove.triggerSpriteId = 0xFF; + + GetUsableZMoves(gActiveBattler, moveInfo->moves); + gBattleStruct->zmove.viable = IsZMoveUsable(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); + CreateZMoveTriggerSprite(gActiveBattler, gBattleStruct->zmove.viable); gBattlerControllerFuncs[gActiveBattler] = HandleChooseMoveAfterDma3; } } @@ -2658,30 +2893,30 @@ static void PlayerHandleChooseItem(void) gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem; gBattlerInMenuId = gActiveBattler; - for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) - gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][1 + i]; + for (i = 0; i < ARRAY_COUNT(gBattlePartyCurrentOrder); i++) + gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[gActiveBattler][1 + i]; } static void PlayerHandleChoosePokemon(void) { s32 i; - for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) - gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i]; + for (i = 0; i < ARRAY_COUNT(gBattlePartyCurrentOrder); i++) + gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[gActiveBattler][4 + i]; - if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH) + if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleResources->bufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH) { - BtlController_EmitChosenMonReturnValue(1, gBattlerPartyIndexes[gActiveBattler] + 1, gBattlePartyCurrentOrder); + BtlController_EmitChosenMonReturnValue(BUFFER_B, gBattlerPartyIndexes[gActiveBattler] + 1, gBattlePartyCurrentOrder); PlayerBufferExecCompleted(); } else { gBattleControllerData[gActiveBattler] = CreateTask(TaskDummy, 0xFF); - gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; - *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4; - *(&gBattleStruct->prevSelectedPartySlot) = gBattleBufferA[gActiveBattler][2]; - *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3]; - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleResources->bufferA[gActiveBattler][1] & 0xF; + *(&gBattleStruct->battlerPreventingSwitchout) = gBattleResources->bufferA[gActiveBattler][1] >> 4; + *(&gBattleStruct->prevSelectedPartySlot) = gBattleResources->bufferA[gActiveBattler][2]; + *(&gBattleStruct->abilityPreventingSwitchout) = (gBattleResources->bufferA[gActiveBattler][3] & 0xFF) | (gBattleResources->bufferA[gActiveBattler][7] << 8); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon; gBattlerInMenuId = gActiveBattler; } @@ -2699,7 +2934,7 @@ static void PlayerHandleHealthBarUpdate(void) s16 hpVal; LoadBattleBarGfx(0); - hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); // gPlayerPartyLostHP used by Battle Dome, but never read if (hpVal > 0) @@ -2717,7 +2952,7 @@ static void PlayerHandleHealthBarUpdate(void) u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, 0, maxHP); } gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; @@ -2725,7 +2960,8 @@ static void PlayerHandleHealthBarUpdate(void) static void PlayerHandleExpUpdate(void) { - u8 monId = gBattleBufferA[gActiveBattler][1]; + u8 monId = gBattleResources->bufferA[gActiveBattler][1]; + s32 taskId, expPointsToGive; if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL) { @@ -2733,23 +2969,22 @@ static void PlayerHandleExpUpdate(void) } else { - s16 expPointsToGive; - u8 taskId; - LoadBattleBarGfx(1); GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // Unused return value. - expPointsToGive = T1_READ_16(&gBattleBufferA[gActiveBattler][2]); + expPointsToGive = T1_READ_32(&gBattleResources->bufferA[gActiveBattler][2]); taskId = CreateTask(Task_GiveExpToMon, 10); gTasks[taskId].tExpTask_monId = monId; - gTasks[taskId].tExpTask_gainedExp = expPointsToGive; + gTasks[taskId].tExpTask_gainedExp_1 = expPointsToGive; + gTasks[taskId].tExpTask_gainedExp_2 = expPointsToGive >> 16; gTasks[taskId].tExpTask_battler = gActiveBattler; gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy; } } #undef tExpTask_monId -#undef tExpTask_gainedExp #undef tExpTask_battler +#undef tExpTask_gainedExp_1 +#undef tExpTask_gainedExp_2 #undef tExpTask_frames static void PlayerHandleStatusIconUpdate(void) @@ -2769,15 +3004,15 @@ static void PlayerHandleStatusAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], - gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); + InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], + gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } static void PlayerHandleStatusXor(void) { - u8 val = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBattler][1]; + u8 val = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS) ^ gBattleResources->bufferA[gActiveBattler][1]; SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS, &val); PlayerBufferExecCompleted(); @@ -2790,14 +3025,14 @@ static void PlayerHandleDataTransfer(void) static void PlayerHandleDMA3Transfer(void) { - u32 dstArg = gBattleBufferA[gActiveBattler][1] - | (gBattleBufferA[gActiveBattler][2] << 8) - | (gBattleBufferA[gActiveBattler][3] << 16) - | (gBattleBufferA[gActiveBattler][4] << 24); - u16 sizeArg = gBattleBufferA[gActiveBattler][5] | (gBattleBufferA[gActiveBattler][6] << 8); + u32 dstArg = gBattleResources->bufferA[gActiveBattler][1] + | (gBattleResources->bufferA[gActiveBattler][2] << 8) + | (gBattleResources->bufferA[gActiveBattler][3] << 16) + | (gBattleResources->bufferA[gActiveBattler][4] << 24); + u16 sizeArg = gBattleResources->bufferA[gActiveBattler][5] | (gBattleResources->bufferA[gActiveBattler][6] << 8); - const u8 *src = &gBattleBufferA[gActiveBattler][7]; - u8 *dst = (u8*)(dstArg); + const u8 *src = &gBattleResources->bufferA[gActiveBattler][7]; + u8 *dst = (u8 *)(dstArg); u32 size = sizeArg; while (1) @@ -2817,7 +3052,7 @@ static void PlayerHandleDMA3Transfer(void) static void PlayerHandlePlayBGM(void) { - PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); PlayerBufferExecCompleted(); } @@ -2828,25 +3063,25 @@ static void PlayerHandleCmd32(void) static void PlayerHandleTwoReturnValues(void) { - BtlController_EmitTwoReturnValues(1, 0, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, 0, 0); PlayerBufferExecCompleted(); } static void PlayerHandleChosenMonReturnValue(void) { - BtlController_EmitChosenMonReturnValue(1, 0, NULL); + BtlController_EmitChosenMonReturnValue(BUFFER_B, 0, NULL); PlayerBufferExecCompleted(); } static void PlayerHandleOneReturnValue(void) { - BtlController_EmitOneReturnValue(1, 0); + BtlController_EmitOneReturnValue(BUFFER_B, 0); PlayerBufferExecCompleted(); } static void PlayerHandleOneReturnValue_Duplicate(void) { - BtlController_EmitOneReturnValue_Duplicate(1, 0); + BtlController_EmitOneReturnValue_Duplicate(BUFFER_B, 0); PlayerBufferExecCompleted(); } @@ -2858,7 +3093,7 @@ static void PlayerHandleClearUnkVar(void) static void PlayerHandleSetUnkVar(void) { - gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; PlayerBufferExecCompleted(); } @@ -2903,20 +3138,20 @@ static void PlayerHandlePlaySE(void) else pan = SOUND_PAN_TARGET; - PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); + PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); PlayerBufferExecCompleted(); } static void PlayerHandlePlayFanfareOrBGM(void) { - if (gBattleBufferA[gActiveBattler][3]) + if (gBattleResources->bufferA[gActiveBattler][3]) { BattleStopLowHpSound(); - PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } else { - PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } PlayerBufferExecCompleted(); @@ -2926,13 +3161,13 @@ static void PlayerHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, -25, 5); + PlayCry_ByMode(species, -25, CRY_MODE_FAINT); PlayerBufferExecCompleted(); } static void PlayerHandleIntroSlide(void) { - HandleIntroSlide(gBattleBufferA[gActiveBattler][1]); + HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); gIntroSlideFlags |= 1; PlayerBufferExecCompleted(); } @@ -3001,21 +3236,21 @@ static void Task_StartSendOutAnim(u8 taskId) u8 savedActiveBattler = gActiveBattler; gActiveBattler = gTasks[taskId].tBattlerId; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) + if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); - } - else - { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; } + else + { + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + StartSendOutAnim(gActiveBattler, FALSE); + } gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; gActiveBattler = savedActiveBattler; DestroyTask(taskId); @@ -3027,18 +3262,18 @@ static void Task_StartSendOutAnim(u8 taskId) static void PlayerHandleDrawPartyStatusSummary(void) { - if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { PlayerBufferExecCompleted(); } else { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); + gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; // If intro, skip the delay after drawing - if (gBattleBufferA[gActiveBattler][2] != 0) + if (gBattleResources->bufferA[gActiveBattler][2] != 0) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; @@ -3072,7 +3307,7 @@ static void PlayerHandleSpriteInvisibility(void) { if (IsBattlerSpritePresent(gActiveBattler)) { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1]; + gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; CopyBattleSpriteInvisibility(gActiveBattler); } PlayerBufferExecCompleted(); @@ -3082,8 +3317,8 @@ static void PlayerHandleBattleAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u8 animationId = gBattleBufferA[gActiveBattler][1]; - u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; + u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) PlayerBufferExecCompleted(); @@ -3096,17 +3331,17 @@ static void PlayerHandleBattleAnimation(void) static void PlayerHandleLinkStandbyMsg(void) { - RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][2]); - switch (gBattleBufferA[gActiveBattler][1]) + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][2]); + switch (gBattleResources->bufferA[gActiveBattler][1]) { - case 0: + case LINK_STANDBY_MSG_STOP_BOUNCE: PrintLinkStandbyMsg(); // fall through - case 1: + case LINK_STANDBY_STOP_BOUNCE_ONLY: EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX); EndBounceEffect(gActiveBattler, BOUNCE_MON); break; - case 2: + case LINK_STANDBY_MSG_ONLY: PrintLinkStandbyMsg(); break; } @@ -3115,7 +3350,7 @@ static void PlayerHandleLinkStandbyMsg(void) static void PlayerHandleResetActionMoveSelection(void) { - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case RESET_ACTION_MOVE_SELECTION: gActionSelectionCursor[gActiveBattler] = 0; @@ -3133,15 +3368,30 @@ static void PlayerHandleResetActionMoveSelection(void) static void PlayerHandleEndLinkBattle(void) { - RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][4]); - gBattleOutcome = gBattleBufferA[gActiveBattler][1]; - gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleBufferA[gActiveBattler][2]; + RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][4]); + gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; + gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[gActiveBattler][2]; FadeOutMapMusic(5); BeginFastPaletteFade(3); PlayerBufferExecCompleted(); gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; } +static void WaitForDebug(void) +{ + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) + { + PlayerBufferExecCompleted(); + } +} + +static void PlayerHandleBattleDebug(void) +{ + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + SetMainCallback2(CB2_BattleDebugMenu); + gBattlerControllerFuncs[gActiveBattler] = WaitForDebug; +} + static void PlayerCmdEnd(void) { } diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 8a8ee6c59d..f29bd1b871 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -1,12 +1,14 @@ #include "global.h" #include "battle.h" -#include "battle_ai_script_commands.h" +#include "battle_ai_main.h" +#include "battle_ai_util.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" #include "battle_interface.h" #include "battle_setup.h" #include "battle_tower.h" +#include "battle_z_move.h" #include "bg.h" #include "data.h" #include "item_use.h" @@ -27,7 +29,6 @@ #include "constants/songs.h" #include "constants/trainers.h" -// this file's functions static void PlayerPartnerHandleGetMonData(void); static void PlayerPartnerHandleGetRawMonData(void); static void PlayerPartnerHandleSetMonData(void); @@ -84,6 +85,7 @@ static void PlayerPartnerHandleBattleAnimation(void); static void PlayerPartnerHandleLinkStandbyMsg(void); static void PlayerPartnerHandleResetActionMoveSelection(void); static void PlayerPartnerHandleEndLinkBattle(void); +static void PlayerPartnerHandleBattleDebug(void); static void PlayerPartnerCmdEnd(void); static void PlayerPartnerBufferRunCommand(void); @@ -160,6 +162,7 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = [CONTROLLER_LINKSTANDBYMSG] = PlayerPartnerHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = PlayerPartnerHandleResetActionMoveSelection, [CONTROLLER_ENDLINKBATTLE] = PlayerPartnerHandleEndLinkBattle, + [CONTROLLER_DEBUGMENU] = PlayerPartnerHandleBattleDebug, [CONTROLLER_TERMINATOR_NOP] = PlayerPartnerCmdEnd }; @@ -185,8 +188,8 @@ static void PlayerPartnerBufferRunCommand(void) { if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) { - if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerPartnerBufferCommands)) - sPlayerPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerPartnerBufferCommands)) + sPlayerPartnerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); else PlayerPartnerBufferExecCompleted(); } @@ -289,7 +292,7 @@ static void CompleteOnHealthbarDone(void) if (hpValue != -1) { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); } else { @@ -300,7 +303,7 @@ static void CompleteOnHealthbarDone(void) static void CompleteOnInactiveTextPrinter(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) PlayerPartnerBufferExecCompleted(); } @@ -333,7 +336,7 @@ static void Task_GiveExpToMon(u8 taskId) gainedExp -= nextLvlExp - currExp; savedActiveBank = gActiveBattler; gActiveBattler = battlerId; - BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp); + BtlController_EmitTwoReturnValues(BUFFER_B, RET_VALUE_LEVELED_UP, gainedExp); gActiveBattler = savedActiveBank; if (IsDoubleBattle() == TRUE @@ -412,7 +415,7 @@ static void Task_GiveExpWithExpBar(u8 taskId) gainedExp -= expOnNextLvl - currExp; savedActiveBank = gActiveBattler; gActiveBattler = battlerId; - BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp); + BtlController_EmitTwoReturnValues(BUFFER_B, RET_VALUE_LEVELED_UP, gainedExp); gActiveBattler = savedActiveBank; gTasks[taskId].func = Task_LaunchLvlUpAnim; } @@ -497,7 +500,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void) static void CompleteOnInactiveTextPrinter2(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) PlayerPartnerBufferExecCompleted(); } @@ -586,7 +589,7 @@ static void PlayerPartnerBufferExecCompleted(void) u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; } else { @@ -613,13 +616,13 @@ static void PlayerPartnerHandleGetMonData(void) u8 monToCheck; s32 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { size += CopyPlayerPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -627,7 +630,7 @@ static void PlayerPartnerHandleGetMonData(void) monToCheck >>= 1; } } - BtlController_EmitDataTransfer(1, size, monData); + BtlController_EmitDataTransfer(BUFFER_B, size, monData); PlayerPartnerBufferExecCompleted(); } @@ -641,7 +644,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst) u32 data32; s32 size = 0; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); @@ -673,7 +676,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst) battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy10(battleMon.nickname, nickname); + StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); src = (u8 *)&battleMon; for (size = 0; size < sizeof(battleMon); size++) @@ -698,7 +701,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst) moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - src = (u8*)(&moveData); + src = (u8 *)(&moveData); for (size = 0; size < sizeof(moveData); size++) dst[size] = src[size]; break; @@ -706,7 +709,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); + data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); dst[0] = data16; dst[1] = data16 >> 8; size = 2; @@ -721,7 +724,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst) case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); + dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); size = 1; break; case REQUEST_OTID_BATTLE: @@ -946,13 +949,13 @@ static void PlayerPartnerHandleSetMonData(void) u8 monToCheck; u8 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { SetPlayerPartnerMonData(gBattlerPartyIndexes[gActiveBattler]); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -965,11 +968,11 @@ static void PlayerPartnerHandleSetMonData(void) static void SetPlayerPartnerMonData(u8 monId) { - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3]; + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; + struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; s32 i; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: { @@ -1010,10 +1013,10 @@ static void SetPlayerPartnerMonData(u8 monId) } break; case REQUEST_SPECIES_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HELDITEM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MOVES_PP_BATTLE: for (i = 0; i < MAX_MON_MOVES; i++) @@ -1027,154 +1030,154 @@ static void SetPlayerPartnerMonData(u8 monId) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PP_DATA_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); break; case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_OTID_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_EXP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKERUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_GAME_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKEBALL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); break; case REQUEST_HP_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_STATUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MAX_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SHEEN_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; } @@ -1183,11 +1186,11 @@ static void SetPlayerPartnerMonData(u8 monId) static void PlayerPartnerHandleSetRawMonData(void) { - u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; + u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; u8 i; - for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++) - dst[i] = gBattleBufferA[gActiveBattler][3 + i]; + for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) + dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; PlayerPartnerBufferExecCompleted(); } @@ -1201,7 +1204,7 @@ static void PlayerPartnerHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; @@ -1213,10 +1216,10 @@ static void PlayerPartnerHandleLoadMonSprite(void) static void PlayerPartnerHandleSwitchInAnim(void) { - ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]); - gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; + ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); + gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; } @@ -1225,14 +1228,14 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite( &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1253,7 +1256,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) static void PlayerPartnerHandleReturnMonToBall(void) { - if (gBattleBufferA[gActiveBattler][1] == 0) + if (gBattleResources->bufferA[gActiveBattler][1] == 0) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; @@ -1304,6 +1307,12 @@ static void PlayerPartnerHandleDrawTrainerPic(void) xPos = 90; yPos = (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80; } + else if (gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER) + { + trainerPicId = gPartnerSpriteId; + xPos = 90; + yPos = (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80; + } else { trainerPicId = GetFrontierTrainerFrontSpriteId(gPartnerTrainerId); @@ -1312,7 +1321,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void) } // Use back pic only if the partner is Steven - if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER) + if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER || gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER) { DecompressTrainerBackPic(trainerPicId, gActiveBattler); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); @@ -1412,31 +1421,24 @@ static void PlayerPartnerHandleMoveAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - gAnimMoveTurn = gBattleBufferA[gActiveBattler][3]; - gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleBufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16]; + gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; + gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); + gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); + gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; + gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE - { - PlayerPartnerBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = PlayerPartnerDoMoveAnimation; - } + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + gBattlerControllerFuncs[gActiveBattler] = PlayerPartnerDoMoveAnimation; } } static void PlayerPartnerDoMoveAnimation(void) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleBufferA[gActiveBattler][11]; + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); + u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) { @@ -1474,7 +1476,7 @@ static void PlayerPartnerDoMoveAnimation(void) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; PlayerPartnerBufferExecCompleted(); } @@ -1488,9 +1490,9 @@ static void PlayerPartnerHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2; } @@ -1513,10 +1515,10 @@ static void PlayerPartnerHandleYesNoBox(void) static void PlayerPartnerHandleChooseMove(void) { u8 chosenMoveId; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); - BattleAI_SetupAIData(0xF); - chosenMoveId = BattleAI_ChooseMoveOrAction(); + chosenMoveId = gBattleStruct->aiMoveOrAction[gActiveBattler]; + gBattlerTarget = gBattleStruct->aiChosenTarget[gActiveBattler]; if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) gBattlerTarget = gActiveBattler; @@ -1527,7 +1529,15 @@ static void PlayerPartnerHandleChooseMove(void) gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); } - BtlController_EmitTwoReturnValues(1, 10, chosenMoveId | (gBattlerTarget << 8)); + if (ShouldUseZMove(gActiveBattler, gBattlerTarget, moveInfo->moves[chosenMoveId])) + QueueZMove(gActiveBattler, moveInfo->moves[chosenMoveId]); + + // If partner can mega evolve, do it. + if (CanMegaEvolve(gActiveBattler)) + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8)); + else + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); + PlayerPartnerBufferExecCompleted(); } @@ -1557,7 +1567,7 @@ static void PlayerPartnerHandleChoosePokemon(void) } *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; - BtlController_EmitChosenMonReturnValue(1, chosenMonId, NULL); + BtlController_EmitChosenMonReturnValue(BUFFER_B, chosenMonId, NULL); PlayerPartnerBufferExecCompleted(); } @@ -1571,7 +1581,7 @@ static void PlayerPartnerHandleHealthBarUpdate(void) s16 hpVal; LoadBattleBarGfx(0); - hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (hpVal != INSTANT_HP_BAR_DROP) { @@ -1592,7 +1602,7 @@ static void PlayerPartnerHandleHealthBarUpdate(void) static void PlayerPartnerHandleExpUpdate(void) { - u8 monId = gBattleBufferA[gActiveBattler][1]; + u8 monId = gBattleResources->bufferA[gActiveBattler][1]; if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL) { @@ -1605,7 +1615,7 @@ static void PlayerPartnerHandleExpUpdate(void) LoadBattleBarGfx(1); GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // unused return value - expPointsToGive = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + expPointsToGive = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); taskId = CreateTask(Task_GiveExpToMon, 10); gTasks[taskId].tExpTask_monId = monId; gTasks[taskId].tExpTask_gainedExp = expPointsToGive; @@ -1636,8 +1646,8 @@ static void PlayerPartnerHandleStatusAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], - gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); + InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], + gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } @@ -1695,7 +1705,7 @@ static void PlayerPartnerHandleClearUnkVar(void) static void PlayerPartnerHandleSetUnkVar(void) { - gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; PlayerPartnerBufferExecCompleted(); } @@ -1740,20 +1750,20 @@ static void PlayerPartnerHandlePlaySE(void) else pan = SOUND_PAN_TARGET; - PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); + PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); PlayerPartnerBufferExecCompleted(); } static void PlayerPartnerHandlePlayFanfareOrBGM(void) { - if (gBattleBufferA[gActiveBattler][3]) + if (gBattleResources->bufferA[gActiveBattler][3]) { BattleStopLowHpSound(); - PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } else { - PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } PlayerPartnerBufferExecCompleted(); @@ -1763,13 +1773,13 @@ static void PlayerPartnerHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, -25, 5); + PlayCry_ByMode(species, -25, CRY_MODE_FAINT); PlayerPartnerBufferExecCompleted(); } static void PlayerPartnerHandleIntroSlide(void) { - HandleIntroSlide(gBattleBufferA[gActiveBattler][1]); + HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); gIntroSlideFlags |= 1; PlayerPartnerBufferExecCompleted(); } @@ -1796,6 +1806,11 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void) u8 spriteId = TRAINER_BACK_PIC_STEVEN; LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32); } + else if (gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER) + { + u8 spriteId = gPartnerSpriteId; + LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32); + } else { u8 spriteId = GetFrontierTrainerFrontSpriteId(gPartnerTrainerId); @@ -1828,15 +1843,15 @@ static void Task_StartSendOutAnim(u8 taskId) gActiveBattler = gTasks[taskId].data[0]; if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); } else { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; @@ -1849,17 +1864,17 @@ static void Task_StartSendOutAnim(u8 taskId) static void PlayerPartnerHandleDrawPartyStatusSummary(void) { - if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { PlayerPartnerBufferExecCompleted(); } else { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); + gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - if (gBattleBufferA[gActiveBattler][2] != 0) + if (gBattleResources->bufferA[gActiveBattler][2] != 0) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; @@ -1891,7 +1906,7 @@ static void PlayerPartnerHandleSpriteInvisibility(void) { if (IsBattlerSpritePresent(gActiveBattler)) { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1]; + gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; CopyBattleSpriteInvisibility(gActiveBattler); } PlayerPartnerBufferExecCompleted(); @@ -1901,8 +1916,8 @@ static void PlayerPartnerHandleBattleAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u8 animationId = gBattleBufferA[gActiveBattler][1]; - u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; + u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) PlayerPartnerBufferExecCompleted(); @@ -1923,13 +1938,18 @@ static void PlayerPartnerHandleResetActionMoveSelection(void) static void PlayerPartnerHandleEndLinkBattle(void) { - gBattleOutcome = gBattleBufferA[gActiveBattler][1]; + gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); PlayerPartnerBufferExecCompleted(); gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; } +static void PlayerPartnerHandleBattleDebug(void) +{ + PlayerPartnerBufferExecCompleted(); +} + static void PlayerPartnerCmdEnd(void) { } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index c0d790695d..14efa76c22 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -1,6 +1,6 @@ #include "global.h" #include "battle.h" -#include "battle_ai_script_commands.h" +#include "battle_ai_main.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_interface.h" @@ -29,9 +29,6 @@ #include "constants/songs.h" #include "constants/trainers.h" -extern struct MusicPlayerInfo gMPlayInfo_BGM; - -// this file's functions static void RecordedOpponentHandleGetMonData(void); static void RecordedOpponentHandleGetRawMonData(void); static void RecordedOpponentHandleSetMonData(void); @@ -88,6 +85,7 @@ static void RecordedOpponentHandleBattleAnimation(void); static void RecordedOpponentHandleLinkStandbyMsg(void); static void RecordedOpponentHandleResetActionMoveSelection(void); static void RecordedOpponentHandleEndLinkBattle(void); +static void RecordedOpponentHandleBattleDebug(void); static void RecordedOpponentCmdEnd(void); static void RecordedOpponentBufferRunCommand(void); @@ -160,6 +158,7 @@ static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void [CONTROLLER_LINKSTANDBYMSG] = RecordedOpponentHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = RecordedOpponentHandleResetActionMoveSelection, [CONTROLLER_ENDLINKBATTLE] = RecordedOpponentHandleEndLinkBattle, + [CONTROLLER_DEBUGMENU] = RecordedOpponentHandleBattleDebug, [CONTROLLER_TERMINATOR_NOP] = RecordedOpponentCmdEnd }; @@ -176,8 +175,8 @@ static void RecordedOpponentBufferRunCommand(void) { if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) { - if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sRecordedOpponentBufferCommands)) - sRecordedOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sRecordedOpponentBufferCommands)) + sRecordedOpponentBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); else RecordedOpponentBufferExecCompleted(); } @@ -262,11 +261,11 @@ static void Intro_TryShinyAnimShowHealthbox(void) bool32 bgmRestored = FALSE; bool32 battlerAnimsDone = FALSE; - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); @@ -301,7 +300,7 @@ static void Intro_TryShinyAnimShowHealthbox(void) } else { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } } gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = TRUE; @@ -377,7 +376,7 @@ static void CompleteOnHealthbarDone(void) if (hpValue != -1) { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); } else { @@ -408,7 +407,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void) static void CompleteOnInactiveTextPrinter(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) RecordedOpponentBufferExecCompleted(); } @@ -450,7 +449,7 @@ static void SwitchIn_HandleSoundAndEnd(void) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy || gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy_2) { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); RecordedOpponentBufferExecCompleted(); } } @@ -512,7 +511,7 @@ static void RecordedOpponentBufferExecCompleted(void) u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; } else { @@ -527,13 +526,13 @@ static void RecordedOpponentHandleGetMonData(void) u8 monToCheck; s32 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { size += CopyRecordedOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -541,7 +540,7 @@ static void RecordedOpponentHandleGetMonData(void) monToCheck >>= 1; } } - BtlController_EmitDataTransfer(1, size, monData); + BtlController_EmitDataTransfer(BUFFER_B, size, monData); RecordedOpponentBufferExecCompleted(); } @@ -555,7 +554,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst) u32 data32; s32 size = 0; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES); @@ -587,7 +586,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst) battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy10(battleMon.nickname, nickname); + StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName); src = (u8 *)&battleMon; for (size = 0; size < sizeof(battleMon); size++) @@ -612,7 +611,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst) moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES); - src = (u8*)(&moveData); + src = (u8 *)(&moveData); for (size = 0; size < sizeof(moveData); size++) dst[size] = src[size]; break; @@ -620,7 +619,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); + data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); dst[0] = data16; dst[1] = data16 >> 8; size = 2; @@ -635,7 +634,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst) case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); + dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); size = 1; break; case REQUEST_OTID_BATTLE: @@ -860,13 +859,13 @@ static void RecordedOpponentHandleSetMonData(void) u8 monToCheck; u8 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { SetRecordedOpponentMonData(gBattlerPartyIndexes[gActiveBattler]); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -879,11 +878,11 @@ static void RecordedOpponentHandleSetMonData(void) static void SetRecordedOpponentMonData(u8 monId) { - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3]; + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; + struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; s32 i; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: { @@ -924,10 +923,10 @@ static void SetRecordedOpponentMonData(u8 monId) } break; case REQUEST_SPECIES_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HELDITEM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MOVES_PP_BATTLE: for (i = 0; i < MAX_MON_MOVES; i++) @@ -941,165 +940,165 @@ static void SetRecordedOpponentMonData(u8 monId) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PP_DATA_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); break; case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_OTID_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_EXP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKERUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_GAME_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKEBALL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]); - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); break; case REQUEST_HP_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_STATUS_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_LEVEL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MAX_HP_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SHEEN_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; } } static void RecordedOpponentHandleSetRawMonData(void) { - u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; + u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; u8 i; - for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++) - dst[i] = gBattleBufferA[gActiveBattler][3 + i]; + for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) + dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; RecordedOpponentBufferExecCompleted(); } @@ -1112,7 +1111,7 @@ static void RecordedOpponentHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); @@ -1128,8 +1127,8 @@ static void RecordedOpponentHandleLoadMonSprite(void) static void RecordedOpponentHandleSwitchInAnim(void) { - gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; - StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; + StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; } @@ -1138,14 +1137,14 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1166,7 +1165,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) static void RecordedOpponentHandleReturnMonToBall(void) { - if (gBattleBufferA[gActiveBattler][1] == 0) + if (gBattleResources->bufferA[gActiveBattler][1] == 0) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; @@ -1319,31 +1318,24 @@ static void RecordedOpponentHandleMoveAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - gAnimMoveTurn = gBattleBufferA[gActiveBattler][3]; - gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleBufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16]; + gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; + gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); + gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); + gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; + gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE - { - RecordedOpponentBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = RecordedOpponentDoMoveAnimation; - } + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + gBattlerControllerFuncs[gActiveBattler] = RecordedOpponentDoMoveAnimation; } } static void RecordedOpponentDoMoveAnimation(void) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleBufferA[gActiveBattler][11]; + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); + u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) { @@ -1381,7 +1373,7 @@ static void RecordedOpponentDoMoveAnimation(void) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; RecordedOpponentBufferExecCompleted(); } @@ -1395,9 +1387,9 @@ static void RecordedOpponentHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; } @@ -1408,7 +1400,7 @@ static void RecordedOpponentHandlePrintSelectionString(void) static void RecordedOpponentHandleChooseAction(void) { - BtlController_EmitTwoReturnValues(1, RecordedBattle_GetBattlerAction(gActiveBattler), 0); + BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(gActiveBattler), 0); RecordedOpponentBufferExecCompleted(); } @@ -1421,13 +1413,13 @@ static void RecordedOpponentHandleChooseMove(void) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - BtlController_EmitTwoReturnValues(1, 10, ChooseMoveAndTargetInBattlePalace()); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace()); } else { u8 moveId = RecordedBattle_GetBattlerAction(gActiveBattler); u8 target = RecordedBattle_GetBattlerAction(gActiveBattler); - BtlController_EmitTwoReturnValues(1, 10, moveId | (target << 8)); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, moveId | (target << 8)); } RecordedOpponentBufferExecCompleted(); @@ -1441,7 +1433,7 @@ static void RecordedOpponentHandleChooseItem(void) static void RecordedOpponentHandleChoosePokemon(void) { *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(gActiveBattler); - BtlController_EmitChosenMonReturnValue(1, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); + BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); RecordedOpponentBufferExecCompleted(); } @@ -1455,7 +1447,7 @@ static void RecordedOpponentHandleHealthBarUpdate(void) s16 hpVal; LoadBattleBarGfx(0); - hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (hpVal != INSTANT_HP_BAR_DROP) { @@ -1496,8 +1488,8 @@ static void RecordedOpponentHandleStatusAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], - gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); + InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], + gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } @@ -1555,7 +1547,7 @@ static void RecordedOpponentHandleClearUnkVar(void) static void RecordedOpponentHandleSetUnkVar(void) { - gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; RecordedOpponentBufferExecCompleted(); } @@ -1600,20 +1592,20 @@ static void RecordedOpponentHandlePlaySE(void) else pan = SOUND_PAN_TARGET; - PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); + PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); RecordedOpponentBufferExecCompleted(); } static void RecordedOpponentHandlePlayFanfareOrBGM(void) { - if (gBattleBufferA[gActiveBattler][3]) + if (gBattleResources->bufferA[gActiveBattler][3]) { BattleStopLowHpSound(); - PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } else { - PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } RecordedOpponentBufferExecCompleted(); @@ -1623,13 +1615,13 @@ static void RecordedOpponentHandleFaintingCry(void) { u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, 25, 5); + PlayCry_ByMode(species, 25, CRY_MODE_FAINT); RecordedOpponentBufferExecCompleted(); } static void RecordedOpponentHandleIntroSlide(void) { - HandleIntroSlide(gBattleBufferA[gActiveBattler][1]); + HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); gIntroSlideFlags |= 1; RecordedOpponentBufferExecCompleted(); } @@ -1664,15 +1656,15 @@ static void Task_StartSendOutAnim(u8 taskId) gActiveBattler = gTasks[taskId].data[0]; if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); } else { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; } @@ -1690,7 +1682,7 @@ static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) static void RecordedOpponentHandleDrawPartyStatusSummary(void) { - if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { RecordedOpponentBufferExecCompleted(); } @@ -1698,7 +1690,7 @@ static void RecordedOpponentHandleDrawPartyStatusSummary(void) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - if (gBattleBufferA[gActiveBattler][2] != 0) + if (gBattleResources->bufferA[gActiveBattler][2] != 0) { if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E < 2) { @@ -1711,10 +1703,10 @@ static void RecordedOpponentHandleDrawPartyStatusSummary(void) } } - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); + gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - if (gBattleBufferA[gActiveBattler][2] != 0) + if (gBattleResources->bufferA[gActiveBattler][2] != 0) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; @@ -1746,7 +1738,7 @@ static void RecordedOpponentHandleSpriteInvisibility(void) { if (IsBattlerSpritePresent(gActiveBattler)) { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1]; + gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; CopyBattleSpriteInvisibility(gActiveBattler); } RecordedOpponentBufferExecCompleted(); @@ -1756,8 +1748,8 @@ static void RecordedOpponentHandleBattleAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u8 animationId = gBattleBufferA[gActiveBattler][1]; - u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; + u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) RecordedOpponentBufferExecCompleted(); @@ -1778,10 +1770,10 @@ static void RecordedOpponentHandleResetActionMoveSelection(void) static void RecordedOpponentHandleEndLinkBattle(void) { - if (gBattleBufferA[gActiveBattler][1] == B_OUTCOME_DREW) - gBattleOutcome = gBattleBufferA[gActiveBattler][1]; + if (gBattleResources->bufferA[gActiveBattler][1] == B_OUTCOME_DREW) + gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; else - gBattleOutcome = gBattleBufferA[gActiveBattler][1] ^ B_OUTCOME_DREW; + gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1] ^ B_OUTCOME_DREW; FadeOutMapMusic(5); BeginFastPaletteFade(3); @@ -1789,6 +1781,11 @@ static void RecordedOpponentHandleEndLinkBattle(void) gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; } +static void RecordedOpponentHandleBattleDebug(void) +{ + RecordedOpponentBufferExecCompleted(); +} + static void RecordedOpponentCmdEnd(void) { } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index a02746817b..0d531db92c 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -1,6 +1,6 @@ #include "global.h" #include "battle.h" -#include "battle_ai_script_commands.h" +#include "battle_ai_main.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" @@ -25,9 +25,6 @@ #include "constants/battle_anim.h" #include "constants/songs.h" -extern struct MusicPlayerInfo gMPlayInfo_BGM; - -// this file's functions static void RecordedPlayerHandleGetMonData(void); static void RecordedPlayerHandleGetRawMonData(void); static void RecordedPlayerHandleSetMonData(void); @@ -171,8 +168,8 @@ static void RecordedPlayerBufferRunCommand(void) { if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) { - if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sRecordedPlayerBufferCommands)) - sRecordedPlayerBufferCommands[gBattleBufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sRecordedPlayerBufferCommands)) + sRecordedPlayerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); else RecordedPlayerBufferExecCompleted(); } @@ -318,7 +315,7 @@ static void Intro_TryShinyAnimShowHealthbox(void) } else { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } } @@ -354,7 +351,7 @@ static void CompleteOnHealthbarDone(void) if (hpValue != -1) { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); } else { @@ -390,7 +387,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void) static void CompleteOnInactiveTextPrinter(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) RecordedPlayerBufferExecCompleted(); } @@ -479,7 +476,7 @@ static void RecordedPlayerBufferExecCompleted(void) u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; } else { @@ -506,13 +503,13 @@ static void RecordedPlayerHandleGetMonData(void) u8 monToCheck; s32 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { size += CopyRecordedPlayerMonData(gBattlerPartyIndexes[gActiveBattler], monData); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -520,7 +517,7 @@ static void RecordedPlayerHandleGetMonData(void) monToCheck >>= 1; } } - BtlController_EmitDataTransfer(1, size, monData); + BtlController_EmitDataTransfer(BUFFER_B, size, monData); RecordedPlayerBufferExecCompleted(); } @@ -534,7 +531,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst) u32 data32; s32 size = 0; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); @@ -566,7 +563,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst) battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy10(battleMon.nickname, nickname); + StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); src = (u8 *)&battleMon; for (size = 0; size < sizeof(battleMon); size++) @@ -591,7 +588,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst) moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - src = (u8*)(&moveData); + src = (u8 *)(&moveData); for (size = 0; size < sizeof(moveData); size++) dst[size] = src[size]; break; @@ -599,7 +596,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); + data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); dst[0] = data16; dst[1] = data16 >> 8; size = 2; @@ -614,7 +611,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst) case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); + dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); size = 1; break; case REQUEST_OTID_BATTLE: @@ -839,13 +836,13 @@ static void RecordedPlayerHandleSetMonData(void) u8 monToCheck; u8 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { SetRecordedPlayerMonData(gBattlerPartyIndexes[gActiveBattler]); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -858,11 +855,11 @@ static void RecordedPlayerHandleSetMonData(void) static void SetRecordedPlayerMonData(u8 monId) { - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3]; + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; + struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; s32 i; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: { @@ -903,10 +900,10 @@ static void SetRecordedPlayerMonData(u8 monId) } break; case REQUEST_SPECIES_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HELDITEM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MOVES_PP_BATTLE: for (i = 0; i < MAX_MON_MOVES; i++) @@ -920,154 +917,154 @@ static void SetRecordedPlayerMonData(u8 monId) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PP_DATA_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); break; case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_OTID_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_EXP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKERUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_GAME_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKEBALL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); break; case REQUEST_HP_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_STATUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MAX_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SHEEN_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; } @@ -1076,11 +1073,11 @@ static void SetRecordedPlayerMonData(u8 monId) static void RecordedPlayerHandleSetRawMonData(void) { - u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1]; + u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1]; u8 i; - for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++) - dst[i] = gBattleBufferA[gActiveBattler][3 + i]; + for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++) + dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i]; RecordedPlayerBufferExecCompleted(); } @@ -1094,7 +1091,7 @@ static void RecordedPlayerHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; @@ -1106,10 +1103,10 @@ static void RecordedPlayerHandleLoadMonSprite(void) static void RecordedPlayerHandleSwitchInAnim(void) { - ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]); - gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; + ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); + gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; } @@ -1118,14 +1115,14 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); - gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite( &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1146,7 +1143,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) static void RecordedPlayerHandleReturnMonToBall(void) { - if (gBattleBufferA[gActiveBattler][1] == 0) + if (gBattleResources->bufferA[gActiveBattler][1] == 0) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; @@ -1325,31 +1322,24 @@ static void RecordedPlayerHandleMoveAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - gAnimMoveTurn = gBattleBufferA[gActiveBattler][3]; - gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleBufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16]; + gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; + gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); + gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); + gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; + gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE - { - RecordedPlayerBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = RecordedPlayerDoMoveAnimation; - } + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + gBattlerControllerFuncs[gActiveBattler] = RecordedPlayerDoMoveAnimation; } } static void RecordedPlayerDoMoveAnimation(void) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); - u8 multihit = gBattleBufferA[gActiveBattler][11]; + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); + u8 multihit = gBattleResources->bufferA[gActiveBattler][11]; switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) { @@ -1387,7 +1377,7 @@ static void RecordedPlayerDoMoveAnimation(void) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; RecordedPlayerBufferExecCompleted(); } @@ -1401,9 +1391,9 @@ static void RecordedPlayerHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; } @@ -1416,7 +1406,7 @@ static void ChooseActionInBattlePalace(void) { if (gBattleCommunication[4] >= gBattlersCount / 2) { - BtlController_EmitTwoReturnValues(1, RecordedBattle_GetBattlerAction(gActiveBattler), 0); + BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(gActiveBattler), 0); RecordedPlayerBufferExecCompleted(); } } @@ -1429,7 +1419,7 @@ static void RecordedPlayerHandleChooseAction(void) } else { - BtlController_EmitTwoReturnValues(1, RecordedBattle_GetBattlerAction(gActiveBattler), 0); + BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(gActiveBattler), 0); RecordedPlayerBufferExecCompleted(); } } @@ -1443,13 +1433,13 @@ static void RecordedPlayerHandleChooseMove(void) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - BtlController_EmitTwoReturnValues(1, 10, ChooseMoveAndTargetInBattlePalace()); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace()); } else { u8 moveId = RecordedBattle_GetBattlerAction(gActiveBattler); u8 target = RecordedBattle_GetBattlerAction(gActiveBattler); - BtlController_EmitTwoReturnValues(1, 10, moveId | (target << 8)); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, moveId | (target << 8)); } RecordedPlayerBufferExecCompleted(); @@ -1463,7 +1453,7 @@ static void RecordedPlayerHandleChooseItem(void) static void RecordedPlayerHandleChoosePokemon(void) { *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(gActiveBattler); - BtlController_EmitChosenMonReturnValue(1, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); + BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); RecordedPlayerBufferExecCompleted(); } @@ -1477,7 +1467,7 @@ static void RecordedPlayerHandleHealthBarUpdate(void) s16 hpVal; LoadBattleBarGfx(0); - hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (hpVal != INSTANT_HP_BAR_DROP) { @@ -1491,7 +1481,7 @@ static void RecordedPlayerHandleHealthBarUpdate(void) u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, 0, maxHP); } gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; @@ -1519,8 +1509,8 @@ static void RecordedPlayerHandleStatusAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], - gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); + InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1], + gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24)); gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } @@ -1578,7 +1568,7 @@ static void RecordedPlayerHandleClearUnkVar(void) static void RecordedPlayerHandleSetUnkVar(void) { - gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1]; RecordedPlayerBufferExecCompleted(); } @@ -1623,20 +1613,20 @@ static void RecordedPlayerHandlePlaySE(void) else pan = SOUND_PAN_TARGET; - PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); + PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); RecordedPlayerBufferExecCompleted(); } static void RecordedPlayerHandlePlayFanfareOrBGM(void) { - if (gBattleBufferA[gActiveBattler][3]) + if (gBattleResources->bufferA[gActiveBattler][3]) { BattleStopLowHpSound(); - PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } else { - PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } RecordedPlayerBufferExecCompleted(); @@ -1646,13 +1636,13 @@ static void RecordedPlayerHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, -25, 5); + PlayCry_ByMode(species, -25, CRY_MODE_FAINT); RecordedPlayerBufferExecCompleted(); } static void RecordedPlayerHandleIntroSlide(void) { - HandleIntroSlide(gBattleBufferA[gActiveBattler][1]); + HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); gIntroSlideFlags |= 1; RecordedPlayerBufferExecCompleted(); } @@ -1707,15 +1697,15 @@ static void Task_StartSendOutAnim(u8 taskId) gActiveBattler = gTasks[taskId].data[0]; if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); } else { - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; @@ -1728,17 +1718,17 @@ static void Task_StartSendOutAnim(u8 taskId) static void RecordedPlayerHandleDrawPartyStatusSummary(void) { - if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { RecordedPlayerBufferExecCompleted(); } else { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); + gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - if (gBattleBufferA[gActiveBattler][2] != 0) + if (gBattleResources->bufferA[gActiveBattler][2] != 0) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; @@ -1770,7 +1760,7 @@ static void RecordedPlayerHandleSpriteInvisibility(void) { if (IsBattlerSpritePresent(gActiveBattler)) { - gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1]; + gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1]; CopyBattleSpriteInvisibility(gActiveBattler); } RecordedPlayerBufferExecCompleted(); @@ -1780,8 +1770,8 @@ static void RecordedPlayerHandleBattleAnimation(void) { if (!IsBattleSEPlaying(gActiveBattler)) { - u8 animationId = gBattleBufferA[gActiveBattler][1]; - u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; + u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) RecordedPlayerBufferExecCompleted(); @@ -1802,7 +1792,7 @@ static void RecordedPlayerHandleResetActionMoveSelection(void) static void RecordedPlayerHandleEndLinkBattle(void) { - gBattleOutcome = gBattleBufferA[gActiveBattler][1]; + gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); RecordedPlayerBufferExecCompleted(); diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index a825387419..1542838dbb 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -24,7 +24,6 @@ #include "constants/songs.h" #include "constants/rgb.h" -// this file's functions static void SafariHandleGetMonData(void); static void SafariHandleGetRawMonData(void); static void SafariHandleSetMonData(void); @@ -81,6 +80,7 @@ static void SafariHandleBattleAnimation(void); static void SafariHandleLinkStandbyMsg(void); static void SafariHandleResetActionMoveSelection(void); static void SafariHandleEndLinkBattle(void); +static void SafariHandleBattleDebug(void); static void SafariCmdEnd(void); static void SafariBufferRunCommand(void); @@ -145,6 +145,7 @@ static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) = [CONTROLLER_LINKSTANDBYMSG] = SafariHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = SafariHandleResetActionMoveSelection, [CONTROLLER_ENDLINKBATTLE] = SafariHandleEndLinkBattle, + [CONTROLLER_DEBUGMENU] = SafariHandleBattleDebug, [CONTROLLER_TERMINATOR_NOP] = SafariCmdEnd }; @@ -161,8 +162,8 @@ static void SafariBufferRunCommand(void) { if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) { - if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sSafariBufferCommands)) - sSafariBufferCommands[gBattleBufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sSafariBufferCommands)) + sSafariBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); else SafariBufferExecCompleted(); } @@ -177,16 +178,16 @@ static void HandleInputChooseAction(void) switch (gActionSelectionCursor[gActiveBattler]) { case 0: - BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_BALL, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SAFARI_BALL, 0); break; case 1: - BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_POKEBLOCK, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SAFARI_POKEBLOCK, 0); break; case 2: - BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_GO_NEAR, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SAFARI_GO_NEAR, 0); break; case 3: - BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_RUN, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SAFARI_RUN, 0); break; } SafariBufferExecCompleted(); @@ -241,7 +242,7 @@ static void CompleteOnBattlerSpriteCallbackDummy(void) static void CompleteOnInactiveTextPrinter(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) SafariBufferExecCompleted(); } @@ -281,7 +282,7 @@ static void CompleteWhenChosePokeblock(void) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { - BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId); + BtlController_EmitOneReturnValue(BUFFER_B, gSpecialVar_ItemId); SafariBufferExecCompleted(); } } @@ -300,7 +301,7 @@ static void SafariBufferExecCompleted(void) u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; } else { @@ -399,7 +400,7 @@ static void SafariHandleSuccessBallThrowAnim(void) static void SafariHandleBallThrowAnim(void) { - u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1]; + u8 ballThrowCaseId = gBattleResources->bufferA[gActiveBattler][1]; gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId; gDoingBattleAnim = TRUE; @@ -423,9 +424,9 @@ static void SafariHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; } @@ -452,14 +453,14 @@ static void SafariHandleChooseAction(void) s32 i; gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; - BattlePutTextOnWindow(gText_SafariZoneMenu, 2); + BattlePutTextOnWindow(gText_SafariZoneMenu, B_WIN_ACTION_MENU); for (i = 0; i < 4; i++) ActionSelectionDestroyCursorAt(i); ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo2); - BattlePutTextOnWindow(gDisplayedStringBattle, 1); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); } static void SafariHandleYesNoBox(void) @@ -594,20 +595,20 @@ static void SafariHandlePlaySE(void) else pan = SOUND_PAN_TARGET; - PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); + PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan); SafariBufferExecCompleted(); } static void SafariHandlePlayFanfareOrBGM(void) { - if (gBattleBufferA[gActiveBattler][3]) + if (gBattleResources->bufferA[gActiveBattler][3]) { BattleStopLowHpSound(); - PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } else { - PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } SafariBufferExecCompleted(); @@ -617,13 +618,13 @@ static void SafariHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry1(species, 25); + PlayCry_Normal(species, 25); SafariBufferExecCompleted(); } static void SafariHandleIntroSlide(void) { - HandleIntroSlide(gBattleBufferA[gActiveBattler][1]); + HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); gIntroSlideFlags |= 1; SafariBufferExecCompleted(); } @@ -658,8 +659,8 @@ static void SafariHandleSpriteInvisibility(void) static void SafariHandleBattleAnimation(void) { - u8 animationId = gBattleBufferA[gActiveBattler][1]; - u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; + u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) SafariBufferExecCompleted(); @@ -679,7 +680,7 @@ static void SafariHandleResetActionMoveSelection(void) static void SafariHandleEndLinkBattle(void) { - gBattleOutcome = gBattleBufferA[gActiveBattler][1]; + gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); SafariBufferExecCompleted(); @@ -687,6 +688,11 @@ static void SafariHandleEndLinkBattle(void) gBattlerControllerFuncs[gActiveBattler] = SafariSetBattleEndCallbacks; } +static void SafariHandleBattleDebug(void) +{ + SafariBufferExecCompleted(); +} + static void SafariCmdEnd(void) { } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index c986d891e4..0b480a23ac 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -89,6 +89,7 @@ static void WallyHandleBattleAnimation(void); static void WallyHandleLinkStandbyMsg(void); static void WallyHandleResetActionMoveSelection(void); static void WallyHandleEndLinkBattle(void); +static void WallyHandleBattleDebug(void); static void WallyCmdEnd(void); static void WallyBufferRunCommand(void); @@ -158,6 +159,7 @@ static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(void) = [CONTROLLER_LINKSTANDBYMSG] = WallyHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = WallyHandleResetActionMoveSelection, [CONTROLLER_ENDLINKBATTLE] = WallyHandleEndLinkBattle, + [CONTROLLER_DEBUGMENU] = WallyHandleBattleDebug, [CONTROLLER_TERMINATOR_NOP] = WallyCmdEnd }; @@ -178,8 +180,8 @@ static void WallyBufferRunCommand(void) { if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) { - if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sWallyBufferCommands)) - sWallyBufferCommands[gBattleBufferA[gActiveBattler][0]](); + if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sWallyBufferCommands)) + sWallyBufferCommands[gBattleResources->bufferA[gActiveBattler][0]](); else WallyBufferExecCompleted(); } @@ -196,7 +198,7 @@ static void WallyHandleActions(void) if (--gBattleStruct->wallyWaitFrames == 0) { PlaySE(SE_SELECT); - BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_MOVE, 0); WallyBufferExecCompleted(); gBattleStruct->wallyBattleState++; gBattleStruct->wallyMovesState = 0; @@ -207,7 +209,7 @@ static void WallyHandleActions(void) if (--gBattleStruct->wallyWaitFrames == 0) { PlaySE(SE_SELECT); - BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_MOVE, 0); WallyBufferExecCompleted(); gBattleStruct->wallyBattleState++; gBattleStruct->wallyMovesState = 0; @@ -217,7 +219,7 @@ static void WallyHandleActions(void) case 3: if (--gBattleStruct->wallyWaitFrames == 0) { - BtlController_EmitTwoReturnValues(1, B_ACTION_WALLY_THROW, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_WALLY_THROW, 0); WallyBufferExecCompleted(); gBattleStruct->wallyBattleState++; gBattleStruct->wallyMovesState = 0; @@ -238,7 +240,7 @@ static void WallyHandleActions(void) if (--gBattleStruct->wallyWaitFrames == 0) { PlaySE(SE_SELECT); - BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0); + BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_ITEM, 0); WallyBufferExecCompleted(); } break; @@ -253,7 +255,7 @@ static void CompleteOnBattlerSpriteCallbackDummy(void) static void CompleteOnInactiveTextPrinter(void) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) WallyBufferExecCompleted(); } @@ -278,18 +280,18 @@ static void CompleteOnChosenItem(void) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { - BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId); + BtlController_EmitOneReturnValue(BUFFER_B, gSpecialVar_ItemId); WallyBufferExecCompleted(); } } static void Intro_TryShinyAnimShowHealthbox(void) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); @@ -350,7 +352,7 @@ static void CompleteOnHealthbarDone(void) if (hpValue != -1) { - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, hpValue, gBattleMons[gActiveBattler].maxHP); } else { @@ -409,7 +411,7 @@ static void WallyBufferExecCompleted(void) u8 playerId = GetMultiplayerId(); PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; } else { @@ -430,13 +432,13 @@ static void WallyHandleGetMonData(void) u8 monToCheck; s32 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { size += CopyWallyMonData(gBattlerPartyIndexes[gActiveBattler], monData); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -444,7 +446,7 @@ static void WallyHandleGetMonData(void) monToCheck >>= 1; } } - BtlController_EmitDataTransfer(1, size, monData); + BtlController_EmitDataTransfer(BUFFER_B, size, monData); WallyBufferExecCompleted(); } @@ -458,7 +460,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst) u32 data32; s32 size = 0; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); @@ -490,7 +492,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst) battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); - StringCopy10(battleMon.nickname, nickname); + StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); src = (u8 *)&battleMon; for (size = 0; size < sizeof(battleMon); size++) @@ -515,7 +517,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst) moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES); - src = (u8*)(&moveData); + src = (u8 *)(&moveData); for (size = 0; size < sizeof(moveData); size++) dst[size] = src[size]; break; @@ -523,7 +525,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); + data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); dst[0] = data16; dst[1] = data16 >> 8; size = 2; @@ -538,7 +540,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst) case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); + dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); size = 1; break; case REQUEST_OTID_BATTLE: @@ -763,13 +765,13 @@ static void WallyHandleSetMonData(void) u8 monToCheck; u8 i; - if (gBattleBufferA[gActiveBattler][2] == 0) + if (gBattleResources->bufferA[gActiveBattler][2] == 0) { SetWallyMonData(gBattlerPartyIndexes[gActiveBattler]); } else { - monToCheck = gBattleBufferA[gActiveBattler][2]; + monToCheck = gBattleResources->bufferA[gActiveBattler][2]; for (i = 0; i < PARTY_SIZE; i++) { if (monToCheck & 1) @@ -782,11 +784,11 @@ static void WallyHandleSetMonData(void) static void SetWallyMonData(u8 monId) { - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3]; - struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3]; + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3]; + struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3]; s32 i; - switch (gBattleBufferA[gActiveBattler][1]) + switch (gBattleResources->bufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: { @@ -827,10 +829,10 @@ static void SetWallyMonData(u8 monId) } break; case REQUEST_SPECIES_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HELDITEM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MOVES_PP_BATTLE: for (i = 0; i < MAX_MON_MOVES; i++) @@ -844,154 +846,154 @@ static void SetWallyMonData(u8 monId) case REQUEST_MOVE2_BATTLE: case REQUEST_MOVE3_BATTLE: case REQUEST_MOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PP_DATA_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]); break; case REQUEST_PPMOVE1_BATTLE: case REQUEST_PPMOVE2_BATTLE: case REQUEST_PPMOVE3_BATTLE: case REQUEST_PPMOVE4_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_OTID_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_EXP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_EV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_FRIENDSHIP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKERUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LOCATION_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MET_GAME_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_POKEBALL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ALL_IVS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]); - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]); break; case REQUEST_HP_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_IV_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_PERSONALITY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CHECKSUM_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_STATUS_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_LEVEL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_MAX_HP_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_ATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_DEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPEED_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPATK_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SPDEF_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SHEEN_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_COOL_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_BEAUTY_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_CUTE_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_SMART_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; case REQUEST_TOUGH_RIBBON_BATTLE: - SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); + SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]); break; } @@ -1015,7 +1017,7 @@ static void WallyHandleSwitchInAnim(void) static void WallyHandleReturnMonToBall(void) { - if (gBattleBufferA[gActiveBattler][1] == 0) + if (gBattleResources->bufferA[gActiveBattler][1] == 0) { InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; @@ -1088,7 +1090,7 @@ static void WallyHandleSuccessBallThrowAnim(void) static void WallyHandleBallThrowAnim(void) { - u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1]; + u8 ballThrowCaseId = gBattleResources->bufferA[gActiveBattler][1]; gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId; gDoingBattleAnim = TRUE; @@ -1103,30 +1105,22 @@ static void WallyHandlePause(void) static void WallyHandleMoveAnimation(void) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); - gAnimMoveTurn = gBattleBufferA[gActiveBattler][3]; - gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8); - gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24); - gAnimFriendship = gBattleBufferA[gActiveBattler][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8); - gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16]; + gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3]; + gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8); + gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24); + gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10]; + gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; - if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE - { - WallyBufferExecCompleted(); - } - else - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; - gBattlerControllerFuncs[gActiveBattler] = WallyDoMoveAnimation; - } - + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + gBattlerControllerFuncs[gActiveBattler] = WallyDoMoveAnimation; } static void WallyDoMoveAnimation(void) { - u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8); switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) { @@ -1161,7 +1155,7 @@ static void WallyDoMoveAnimation(void) if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { CopyAllBattleSpritesInvisibilities(); - TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; WallyBufferExecCompleted(); } @@ -1175,9 +1169,9 @@ static void WallyHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); + stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; } @@ -1204,14 +1198,14 @@ static void WallyHandleChooseAction(void) s32 i; gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; - BattlePutTextOnWindow(gText_BattleMenu, 2); + BattlePutTextOnWindow(gText_BattleMenu, B_WIN_ACTION_MENU); for (i = 0; i < 4; i++) ActionSelectionDestroyCursorAt(i); ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillWallyDo); - BattlePutTextOnWindow(gDisplayedStringBattle, 1); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); } static void WallyHandleYesNoBox(void) @@ -1240,7 +1234,7 @@ static void WallyHandleChooseMove(void) if (--gBattleStruct->wallyMoveFrames == 0) { PlaySE(SE_SELECT); - BtlController_EmitTwoReturnValues(1, 10, 0x100); + BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0x100); WallyBufferExecCompleted(); } break; @@ -1269,7 +1263,7 @@ static void WallyHandleHealthBarUpdate(void) s16 hpVal; LoadBattleBarGfx(0); - hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (hpVal != INSTANT_HP_BAR_DROP) { @@ -1283,7 +1277,7 @@ static void WallyHandleHealthBarUpdate(void) u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); - UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, 0, maxHP); } gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; @@ -1391,20 +1385,20 @@ static void WallyHandleCantSwitch(void) static void WallyHandlePlaySE(void) { - PlaySE(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlaySE(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); WallyBufferExecCompleted(); } static void WallyHandlePlayFanfareOrBGM(void) { - if (gBattleBufferA[gActiveBattler][3]) + if (gBattleResources->bufferA[gActiveBattler][3]) { BattleStopLowHpSound(); - PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } else { - PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8)); } WallyBufferExecCompleted(); @@ -1414,13 +1408,15 @@ static void WallyHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry1(species, 25); + // Seems that it doesn't bother using CRY_MODE_FAINT because + // Wally's Pokémon during the tutorial is never intended to faint. + PlayCry_Normal(species, 25); WallyBufferExecCompleted(); } static void WallyHandleIntroSlide(void) { - HandleIntroSlide(gBattleBufferA[gActiveBattler][1]); + HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]); gIntroSlideFlags |= 1; WallyBufferExecCompleted(); } @@ -1460,12 +1456,12 @@ static void StartSendOutAnim(u8 battlerId) u16 species; gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = 0; - gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1493,7 +1489,7 @@ static void Task_StartSendOutAnim(u8 taskId) u8 savedActiveBank = gActiveBattler; gActiveBattler = gTasks[taskId].data[0]; - gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler); gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; gActiveBattler = savedActiveBank; @@ -1503,14 +1499,14 @@ static void Task_StartSendOutAnim(u8 taskId) static void WallyHandleDrawPartyStatusSummary(void) { - if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { WallyBufferExecCompleted(); } else { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; - gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); + gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]); WallyBufferExecCompleted(); } } @@ -1532,8 +1528,8 @@ static void WallyHandleSpriteInvisibility(void) static void WallyHandleBattleAnimation(void) { - u8 animationId = gBattleBufferA[gActiveBattler][1]; - u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + u8 animationId = gBattleResources->bufferA[gActiveBattler][1]; + u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) WallyBufferExecCompleted(); @@ -1553,7 +1549,7 @@ static void WallyHandleResetActionMoveSelection(void) static void WallyHandleEndLinkBattle(void) { - gBattleOutcome = gBattleBufferA[gActiveBattler][1]; + gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); WallyBufferExecCompleted(); @@ -1562,6 +1558,11 @@ static void WallyHandleEndLinkBattle(void) gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; } +static void WallyHandleBattleDebug(void) +{ + WallyBufferExecCompleted(); +} + static void WallyCmdEnd(void) { } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 0f32345791..82ce1ebf20 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -1,9 +1,10 @@ #include "global.h" #include "battle.h" -#include "battle_ai_script_commands.h" +#include "battle_ai_main.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" +#include "battle_setup.h" #include "cable_club.h" #include "link.h" #include "link_rfu.h" @@ -58,7 +59,8 @@ void SetUpBattleVarsAndBirchZigzagoon(void) gBattleControllerExecFlags = 0; ClearBattleAnimationVars(); ClearBattleMonForms(); - BattleAI_HandleItemUseBeforeAISetup(0xF); + BattleAI_SetupItems(); + BattleAI_SetupFlags(); if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { @@ -99,10 +101,10 @@ void InitBattleControllers(void) } for (i = 0; i < sizeof(gBattleStruct->tvMovePoints); i++) - *((u8*)(&gBattleStruct->tvMovePoints) + i) = 0; + *((u8 *)(&gBattleStruct->tvMovePoints) + i) = 0; for (i = 0; i < sizeof(gBattleStruct->tv); i++) - *((u8*)(&gBattleStruct->tv) + i) = 0; + *((u8 *)(&gBattleStruct->tv) + i) = 0; } static void InitSinglePlayerBtlControllers(void) @@ -151,8 +153,16 @@ static void InitSinglePlayerBtlControllers(void) gBattlerPartyIndexes[0] = 0; gBattlerPartyIndexes[1] = 0; - gBattlerPartyIndexes[2] = 3; - gBattlerPartyIndexes[3] = 3; + if (BATTLE_TWO_VS_ONE_OPPONENT) + { + gBattlerPartyIndexes[2] = 3; + gBattlerPartyIndexes[3] = 1; + } + else + { + gBattlerPartyIndexes[2] = 3; + gBattlerPartyIndexes[3] = 3; + } } else if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { @@ -578,6 +588,14 @@ static void InitLinkBtlControllers(void) } } +bool32 IsValidForBattle(struct Pokemon *mon) +{ + u32 species = GetMonData(mon, MON_DATA_SPECIES2); + return (species != SPECIES_NONE && species != SPECIES_EGG + && GetMonData(mon, MON_DATA_HP) != 0 + && GetMonData(mon, MON_DATA_IS_EGG) == 0); +} + static void SetBattlePartyIds(void) { s32 i, j; @@ -592,10 +610,7 @@ static void SetBattlePartyIds(void) { if (GET_BATTLER_SIDE2(i) == B_SIDE_PLAYER) { - if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0) + if (IsValidForBattle(&gPlayerParty[j])) { gBattlerPartyIndexes[i] = j; break; @@ -603,10 +618,7 @@ static void SetBattlePartyIds(void) } else { - if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0) + if (IsValidForBattle(&gEnemyParty[j])) { gBattlerPartyIndexes[i] = j; break; @@ -617,11 +629,7 @@ static void SetBattlePartyIds(void) { if (GET_BATTLER_SIDE2(i) == B_SIDE_PLAYER) { - if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != SPECIES_NONE // Probably a typo by Game Freak. The rest use SPECIES2. - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0 - && gBattlerPartyIndexes[i - 2] != j) + if (IsValidForBattle(&gPlayerParty[j]) && gBattlerPartyIndexes[i - 2] != j) { gBattlerPartyIndexes[i] = j; break; @@ -629,16 +637,18 @@ static void SetBattlePartyIds(void) } else { - if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0 - && gBattlerPartyIndexes[i - 2] != j) + if (IsValidForBattle(&gEnemyParty[j]) && gBattlerPartyIndexes[i - 2] != j) { gBattlerPartyIndexes[i] = j; break; } } + + // No valid mons were found. Add the empty slot. + if (gBattlerPartyIndexes[i - 2] == 0) + gBattlerPartyIndexes[i] = 1; + else + gBattlerPartyIndexes[i] = 0; } } } @@ -660,17 +670,17 @@ static void PrepareBufferDataTransfer(u8 bufferId, u8 *data, u16 size) { switch (bufferId) { - case 0: + case BUFFER_A: for (i = 0; i < size; i++) { - gBattleBufferA[gActiveBattler][i] = *data; + gBattleResources->bufferA[gActiveBattler][i] = *data; data++; } break; - case 1: + case BUFFER_B: for (i = 0; i < size; i++) { - gBattleBufferB[gActiveBattler][i] = *data; + gBattleResources->bufferB[gActiveBattler][i] = *data; data++; } break; @@ -737,7 +747,7 @@ void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data) static void Task_HandleSendLinkBuffersData(u8 taskId) { - u16 var; + u16 numPlayers; u16 blockSize; switch (gTasks[taskId].data[11]) @@ -759,11 +769,11 @@ static void Task_HandleSendLinkBuffersData(u8 taskId) else { if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) - var = 2; + numPlayers = 2; else - var = (gBattleTypeFlags & BATTLE_TYPE_MULTI) ? 4 : 2; + numPlayers = (gBattleTypeFlags & BATTLE_TYPE_MULTI) ? 4 : 2; - if (GetLinkPlayerCount_2() >= var) + if (GetLinkPlayerCount_2() >= numPlayers) { if (IsLinkMaster()) { @@ -789,7 +799,7 @@ static void Task_HandleSendLinkBuffersData(u8 taskId) gTasks[taskId].data[15] = 0; } blockSize = (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8)) + LINK_BUFF_DATA; - SendBlock(bitmask_all_link_players_but_self(), &gLinkBattleSendBuffer[gTasks[taskId].data[15]], blockSize); + SendBlock(BitmaskAllOtherLinkPlayers(), &gLinkBattleSendBuffer[gTasks[taskId].data[15]], blockSize); gTasks[taskId].data[11]++; } else @@ -880,7 +890,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) if (gBattleControllerExecFlags & gBitTable[battlerId]) return; - memcpy(gBattleBufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); + memcpy(gBattleResources->bufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); MarkBattlerReceivedLinkData(battlerId); if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) @@ -892,7 +902,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) } break; case 1: - memcpy(gBattleBufferB[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); + memcpy(gBattleResources->bufferB[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); break; case 2: var = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA]; @@ -930,7 +940,7 @@ void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 b sBattleBuffersTransferData[1] = requestId; sBattleBuffersTransferData[2] = monToCheck; for (i = 0; i < bytes; i++) - sBattleBuffersTransferData[3 + i] = *(u8*)(data++); + sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 3 + bytes); } @@ -942,7 +952,7 @@ void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data sBattleBuffersTransferData[1] = monId; sBattleBuffersTransferData[2] = bytes; for (i = 0; i < bytes; i++) - sBattleBuffersTransferData[3 + i] = *(u8*)(data++); + sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, bytes + 3); } @@ -964,10 +974,10 @@ void BtlController_EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubs PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitReturnMonToBall(u8 bufferId, u8 arg1) +void BtlController_EmitReturnMonToBall(u8 bufferId, bool8 skipAnim) { sBattleBuffersTransferData[0] = CONTROLLER_RETURNMONTOBALL; - sBattleBuffersTransferData[1] = arg1; + sBattleBuffersTransferData[1] = skipAnim; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2); } @@ -1039,7 +1049,7 @@ void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data) sBattleBuffersTransferData[0] = CONTROLLER_PAUSE; sBattleBuffersTransferData[1] = toWait; for (i = 0; i < toWait * 3; i++) - sBattleBuffersTransferData[2 + i] = *(u8*)(data++); + sBattleBuffersTransferData[2 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, toWait * 3 + 2); } @@ -1057,7 +1067,7 @@ void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 m sBattleBuffersTransferData[9] = (dmg & 0xFF000000) >> 24; sBattleBuffersTransferData[10] = friendship; sBattleBuffersTransferData[11] = multihit; - if (WEATHER_HAS_EFFECT2) + if (WEATHER_HAS_EFFECT) { sBattleBuffersTransferData[12] = gBattleWeather; sBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8; @@ -1076,14 +1086,14 @@ void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 m void BtlController_EmitPrintString(u8 bufferId, u16 stringID) { s32 i; - struct BattleMsgData* stringInfo; + struct BattleMsgData *stringInfo; sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRING; sBattleBuffersTransferData[1] = gBattleOutcome; sBattleBuffersTransferData[2] = stringID; sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; - stringInfo = (struct BattleMsgData*)(&sBattleBuffersTransferData[4]); + stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]); stringInfo->currentMove = gCurrentMove; stringInfo->originallyUsedMove = gChosenMove; stringInfo->lastItem = gLastUsedItem; @@ -1115,7 +1125,7 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID) sBattleBuffersTransferData[2] = stringID; sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; - stringInfo = (struct BattleMsgData*)(&sBattleBuffersTransferData[4]); + stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]); stringInfo->currentMove = gCurrentMove; stringInfo->originallyUsedMove = gChosenMove; stringInfo->lastItem = gLastUsedItem; @@ -1134,12 +1144,13 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4); } -void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2) +// itemId only relevant for B_ACTION_USE_ITEM +void BtlController_EmitChooseAction(u8 bufferId, u8 action, u16 itemId) { sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEACTION; - sBattleBuffersTransferData[1] = arg1; - sBattleBuffersTransferData[2] = arg2; - sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8; + sBattleBuffersTransferData[1] = action; + sBattleBuffersTransferData[2] = itemId; + sBattleBuffersTransferData[3] = (itemId & 0xFF00) >> 8; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } @@ -1163,30 +1174,31 @@ void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpN sBattleBuffersTransferData[2] = NoPpNumber; sBattleBuffersTransferData[3] = 0; for (i = 0; i < sizeof(*movePpData); i++) - sBattleBuffersTransferData[4 + i] = *((u8*)(movePpData) + i); + sBattleBuffersTransferData[4 + i] = *((u8 *)(movePpData) + i); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4); } -void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1) +void BtlController_EmitChooseItem(u8 bufferId, u8 *battlePartyOrder) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_OPENBAG; - for (i = 0; i < 3; i++) - sBattleBuffersTransferData[1 + i] = arg1[i]; + for (i = 0; i < PARTY_SIZE / 2; i++) + sBattleBuffersTransferData[1 + i] = battlePartyOrder[i]; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u8 abilityId, u8 *arg4) +void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u16 abilityId, u8 *data) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON; sBattleBuffersTransferData[1] = caseId; sBattleBuffersTransferData[2] = slotId; - sBattleBuffersTransferData[3] = abilityId; + sBattleBuffersTransferData[3] = abilityId & 0xFF; + sBattleBuffersTransferData[7] = (abilityId >> 8) & 0xFF; for (i = 0; i < 3; i++) - sBattleBuffersTransferData[4 + i] = arg4[i]; + sBattleBuffersTransferData[4 + i] = data[i]; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written. } @@ -1209,14 +1221,15 @@ void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// why is the argument u16 if it's being cast to s16 anyway? -void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints) +void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, s32 expPoints) { sBattleBuffersTransferData[0] = CONTROLLER_EXPUPDATE; sBattleBuffersTransferData[1] = partyId; - sBattleBuffersTransferData[2] = (s16)expPoints; - sBattleBuffersTransferData[3] = ((s16)expPoints & 0xFF00) >> 8; - PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); + sBattleBuffersTransferData[2] = expPoints; + sBattleBuffersTransferData[3] = (expPoints & 0x0000FF00) >> 8; + sBattleBuffersTransferData[4] = (expPoints & 0x00FF0000) >> 16; + sBattleBuffersTransferData[5] = (expPoints & 0xFF000000) >> 24; + PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6); } void BtlController_EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2) @@ -1260,7 +1273,7 @@ void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data) sBattleBuffersTransferData[2] = size; sBattleBuffersTransferData[3] = (size & 0xFF00) >> 8; for (i = 0; i < size; i++) - sBattleBuffersTransferData[4 + i] = *(u8*)(data++); + sBattleBuffersTransferData[4 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 4); } @@ -1276,19 +1289,23 @@ void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data sBattleBuffersTransferData[5] = size; sBattleBuffersTransferData[6] = (size & 0xFF00) >> 8; for (i = 0; i < size; i++) - sBattleBuffersTransferData[7 + i] = *(u8*)(data++); + sBattleBuffersTransferData[7 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 7); } -void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter) +// Unused +void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *data) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_PLAYBGM; sBattleBuffersTransferData[1] = songId; sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8; - for (i = 0; i < songId; i++) // ???? - sBattleBuffersTransferData[3 + i] = *(u8*)(unusedDumbDataParameter++); + + // Nonsense loop using songId as a size + // Would go out of bounds for any song id after SE_RG_BAG_POCKET (253) + for (i = 0; i < songId; i++) + sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, songId + 3); } @@ -1300,17 +1317,19 @@ void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data) sBattleBuffersTransferData[1] = size; sBattleBuffersTransferData[2] = (size & 0xFF00) >> 8; for (i = 0; i < size; i++) - sBattleBuffersTransferData[3 + i] = *(u8*)(data++); + sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3); } -void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2) +void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u32 ret32) { sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES; - sBattleBuffersTransferData[1] = arg1; - sBattleBuffersTransferData[2] = arg2; - sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8; - PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); + sBattleBuffersTransferData[1] = ret8; + sBattleBuffersTransferData[2] = ret32; + sBattleBuffersTransferData[3] = (ret32 & 0x0000FF00) >> 8; + sBattleBuffersTransferData[4] = (ret32 & 0x00FF0000) >> 16; + sBattleBuffersTransferData[5] = (ret32 & 0xFF000000) >> 24; + PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6); } void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battlePartyOrder) @@ -1324,20 +1343,20 @@ void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battleP PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5); } -void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1) +void BtlController_EmitOneReturnValue(u8 bufferId, u16 ret) { sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE; - sBattleBuffersTransferData[1] = arg1; - sBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8; + sBattleBuffersTransferData[1] = ret; + sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8; sBattleBuffersTransferData[3] = 0; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b) +void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 ret) { sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE; - sBattleBuffersTransferData[1] = b; - sBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + sBattleBuffersTransferData[1] = ret; + sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8; sBattleBuffersTransferData[3] = 0; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } @@ -1442,11 +1461,11 @@ void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* h s32 i; sBattleBuffersTransferData[0] = CONTROLLER_DRAWPARTYSTATUSSUMMARY; - sBattleBuffersTransferData[1] = flags & 0x7F; - sBattleBuffersTransferData[2] = (flags & 0x80) >> 7; // If true, skip delay after drawing. True during intro + sBattleBuffersTransferData[1] = flags & ~PARTY_SUMM_SKIP_DRAW_DELAY; // If true, skip player side + sBattleBuffersTransferData[2] = (flags & PARTY_SUMM_SKIP_DRAW_DELAY) >> 7; // If true, skip delay after drawing. True during intro sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY; for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); i++) - sBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus)); + sBattleBuffersTransferData[4 + i] = *(i + (u8 *)(hpAndStatus)); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * PARTY_SIZE + 4); } @@ -1486,11 +1505,12 @@ void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 record) +// mode is a LINK_STANDBY_* constant +void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 mode, bool32 record) { bool8 record_ = record; sBattleBuffersTransferData[0] = CONTROLLER_LINKSTANDBYMSG; - sBattleBuffersTransferData[1] = arg1; + sBattleBuffersTransferData[1] = mode; if (record_) sBattleBuffersTransferData[3] = sBattleBuffersTransferData[2] = RecordedBattle_BufferNewBattlerData(&sBattleBuffersTransferData[4]); @@ -1516,3 +1536,9 @@ void BtlController_EmitEndLinkBattle(u8 bufferId, u8 battleOutcome) sBattleBuffersTransferData[5] = sBattleBuffersTransferData[4] = RecordedBattle_BufferNewBattlerData(&sBattleBuffersTransferData[6]); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sBattleBuffersTransferData[4] + 6); } + +void BtlController_EmitDebugMenu(u8 bufferId) +{ + sBattleBuffersTransferData[0] = CONTROLLER_DEBUGMENU; + PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 1); +} diff --git a/src/battle_debug.c b/src/battle_debug.c new file mode 100644 index 0000000000..9911154022 --- /dev/null +++ b/src/battle_debug.c @@ -0,0 +1,2155 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_message.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "scanline_effect.h" +#include "palette.h" +#include "pokemon_icon.h" +#include "sprite.h" +#include "item.h" +#include "task.h" +#include "bg.h" +#include "gpu_regs.h" +#include "window.h" +#include "text.h" +#include "text_window.h" +#include "international_string_util.h" +#include "strings.h" +#include "battle_ai_main.h" +#include "battle_ai_util.h" +#include "list_menu.h" +#include "decompress.h" +#include "trainer_pokemon_sprites.h" +#include "malloc.h" +#include "string_util.h" +#include "util.h" +#include "data.h" +#include "reset_rtc_screen.h" +#include "reshow_battle_screen.h" +#include "constants/abilities.h" +#include "constants/moves.h" +#include "constants/items.h" +#include "constants/rgb.h" +#include "constants/hold_effects.h" + +#define MAX_MODIFY_DIGITS 4 + +struct BattleDebugModifyArrows +{ + u8 arrowSpriteId[2]; + u16 minValue; + u16 maxValue; + int currValue; + u8 currentDigit; + u8 maxDigits; + u8 charDigits[MAX_MODIFY_DIGITS]; + void *modifiedValPtr; + u8 typeOfVal; +}; + +struct BattleDebugMenu +{ + u8 battlerId; + u8 battlerWindowId; + + u8 mainListWindowId; + u8 mainListTaskId; + u8 currentMainListItemId; + + u8 secondaryListWindowId; + u8 secondaryListTaskId; + u8 currentSecondaryListItemId; + u8 secondaryListItemCount; + + u8 modifyWindowId; + + u8 activeWindow; + + struct BattleDebugModifyArrows modifyArrows; + const struct BitfieldInfo *bitfield; + bool8 battlerWasChanged[MAX_BATTLERS_COUNT]; + + u8 aiBattlerId; + u8 aiViewState; + u8 aiIconSpriteIds[MAX_BATTLERS_COUNT]; + u8 aiMonSpriteId; + u8 aiMovesWindowId; +}; + +struct __attribute__((__packed__)) BitfieldInfo +{ + u8 bitsCount; + u8 currBit; +}; + +enum +{ + LIST_ITEM_MOVES, + LIST_ITEM_ABILITY, + LIST_ITEM_HELD_ITEM, + LIST_ITEM_PP, + LIST_ITEM_TYPES, + LIST_ITEM_STATS, + LIST_ITEM_STAT_STAGES, + LIST_ITEM_STATUS1, + LIST_ITEM_STATUS2, + LIST_ITEM_STATUS3, + LIST_ITEM_STATUS4, + LIST_ITEM_SIDE_STATUS, + LIST_ITEM_AI, + LIST_ITEM_AI_MOVES_PTS, + LIST_ITEM_AI_INFO, + LIST_ITEM_VARIOUS, + LIST_ITEM_COUNT +}; + +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_ITEM, + VAL_ALL_STAT_STAGES, +}; + +enum +{ + LIST_SIDE_REFLECT, + LIST_SIDE_LIGHTSCREEN, + LIST_SIDE_SPIKES, + LIST_SIDE_SAFEGUARD, + LIST_SIDE_MIST, + LIST_SIDE_AURORA_VEIL, + LIST_SIDE_LUCKY_CHANT, + LIST_SIDE_TAILWIND, + LIST_SIDE_STEALTH_ROCK, + LIST_SIDE_TOXIC_SPIKES, + LIST_SIDE_STICKY_WEB, +}; + +enum +{ + VARIOUS_SHOW_HP, + VARIOUS_SUBSTITUTE_HP, + VARIOUS_IN_LOVE, +}; + +// Static Declarations +static const u8 *GetHoldEffectName(u16 holdEffect); + +// const rom data +static const u8 sText_HoldEffect[] = _("Hold Effect"); +static const u8 sText_Ability[] = _("Ability"); +static const u8 sText_Moves[] = _("Moves"); +static const u8 sText_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_CurrHp[] = _("HP Current"); +static const u8 sText_Freeze[] = _("Freeze"); +static const u8 sText_ToxicPoison[] = _("Toxic Poison"); +static const u8 sText_ToxicCounter[] = _("Toxic Counter"); +static const u8 sText_Flinch[] = _("Flinch"); +static const u8 sText_Uproar[] = _("Uproar"); +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_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_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_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_Reflect[] = _("Reflect"); +static const u8 sText_LightScreen[] = _("Light Screen"); +static const u8 sText_Spikes[] = _("Spikes"); +static const u8 sText_Safeguard[] = _("Safeguard"); +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_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_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_Risky[] = _("Risky"); +static const u8 sText_StrongestMove[] = _("Most dmg move"); +static const u8 sText_Various[] = _("Various"); +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_InLove[] = _("In Love"); +static const u8 sText_AIMovePts[] = _("AI Pts/Dmg"); +static const u8 sText_AiKnowledge[] = _("AI Info"); +static const u8 sText_EffectOverride[] = _("Effect Override"); + +static const u8 sText_EmptyString[] = _(""); + +static const struct BitfieldInfo sStatus1Bitfield[] = +{ + {/*Sleep*/ 3, 0}, + {/*Poison*/ 1, 3}, + {/*Burn*/ 1, 4}, + {/*Freeze*/ 1, 5}, + {/*Paralysis*/1, 6}, + {/*Toxic Poison*/ 1, 7}, + {/*Toxic Counter*/ 4, 8}, +}; + +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. + {/*Transformed*/ 1, 21}, + {/*Recharge*/ 1, 22}, + {/*Rage*/ 1, 23}, + {/*Substitute*/ 1, 24}, + {/*Destiny bond*/ 1, 25}, + {/*Can't escape*/ 1, 26}, + {/*Nightmares*/ 1, 27}, + {/*Cursed*/ 1, 28}, + {/*Foresighted*/ 1, 29}, + {/*Defense Curled*/ 1, 30}, + {/*Tormented*/ 1, 31}, +}; + +static const struct BitfieldInfo sStatus3Bitfield[] = +{ + {/*Always hits*/ 2, 4}, + //*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}, + {/*Gastro Acid*/ 1, 16}, + // Embargo 1, 17, + // Underwater 1, 18, + // Intimidated Mons 1, 19, + // Traced 1, 20, + {/*Smacked Down*/ 1, 21}, + // Me First 1, 22, + // Telekinesis 1, 23, + // Phantom Force 1, 24}, + {/*Miracle Eyed*/ 1, 25}, + // Magnet Rise 1, 26, + // Heal Block 1, 27, + {/*Aqua Ring*/ 1, 28}, + {/*Laser Focus*/ 1, 29}, + // Power Trick 1, 30, +}; + +static const struct BitfieldInfo sStatus4Bitfield[] = +{ + {/*Electrified*/ 1, 0,} +}; + +static const struct BitfieldInfo sAIBitfield[] = +{ + {/*Check bad move*/ 1, 0}, + {/*Try To Faint*/ 1, 1}, + {/*Viability*/ 1, 2}, + {/*Set up 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}, +}; + + +static const struct ListMenuItem sMainListItems[] = +{ + {sText_Moves, LIST_ITEM_MOVES}, + {sText_Ability, LIST_ITEM_ABILITY}, + {sText_HeldItem, LIST_ITEM_HELD_ITEM}, + {sText_PP, LIST_ITEM_PP}, + {sText_Types, LIST_ITEM_TYPES}, + {sText_Stats, LIST_ITEM_STATS}, + {sText_StatStages, LIST_ITEM_STAT_STAGES}, + {sText_Status1, LIST_ITEM_STATUS1}, + {sText_Status2, LIST_ITEM_STATUS2}, + {sText_Status3, LIST_ITEM_STATUS3}, + {sText_Status4, LIST_ITEM_STATUS4}, + {sText_SideStatus, LIST_ITEM_SIDE_STATUS}, + {sText_AI, LIST_ITEM_AI}, + {sText_AIMovePts, LIST_ITEM_AI_MOVES_PTS}, + {sText_AiKnowledge, LIST_ITEM_AI_INFO}, + {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}, +}; + +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}, +}; + +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}, +}; + +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}, +}; + +static const struct ListMenuItem sStatus4ListItems[] = +{ + {sText_Electrified, 0}, +}; + +static const struct ListMenuItem sSideStatusListItems[] = +{ + {sText_Reflect, LIST_SIDE_REFLECT}, + {sText_LightScreen, LIST_SIDE_LIGHTSCREEN}, + {sText_Spikes, LIST_SIDE_SPIKES}, + {sText_Safeguard, LIST_SIDE_SAFEGUARD}, + {sText_Mist, LIST_SIDE_MIST}, + {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}, +}; + +static const struct ListMenuItem sSecondaryListItems[] = +{ + {sText_EmptyString, 0}, + {sText_EmptyString, 1}, + {sText_EmptyString, 2}, + {sText_EmptyString, 3}, + {sText_EmptyString, 4}, + {sText_EmptyString, 5}, + {sText_EmptyString, 6}, + {sText_EmptyString, 7}, + {sText_EmptyString, 8}, +}; + + +static const struct ListMenuTemplate sMainListTemplate = +{ + .items = sMainListItems, + .moveCursorFunc = NULL, + .itemPrintFunc = NULL, + .totalItems = ARRAY_COUNT(sMainListItems), + .maxShowed = 6, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 1, + .cursorKind = 0 +}; + +static const struct ListMenuTemplate sSecondaryListTemplate = +{ + .items = sSecondaryListItems, + .moveCursorFunc = NULL, + .itemPrintFunc = NULL, + .totalItems = 0, + .maxShowed = 0, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 1, + .cursorKind = 0 +}; + + +static const struct WindowTemplate sMainListWindowTemplate = +{ + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 9, + .height = 12, + .paletteNum = 0xF, + .baseBlock = 0x2 +}; + +static const struct WindowTemplate sSecondaryListWindowTemplate = +{ + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 3, + .width = 10, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0xA0 +}; + +static const struct WindowTemplate sModifyWindowTemplate = +{ + .bg = 0, + .tilemapLeft = 25, + .tilemapTop = 2, + .width = 4, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x200 +}; + +static const struct WindowTemplate sBattlerWindowTemplate = +{ + .bg = 0, + .tilemapLeft = 10, + .tilemapTop = 0, + .width = 14, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x300 +}; + +static const struct BgTemplate sBgTemplates[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 2, + .mapBaseIndex = 20, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + } +}; + +static const u8 sBitsToMaxDigit[] = +{ + [0] = 0, + [1] = 1, // max 1 + [2] = 1, // max 3 + [3] = 1, // max 7 + [4] = 2, // max 15 + [5] = 2, // max 31 + [6] = 2, // max 63 + [7] = 3, // max 127 + [8] = 3, // max 255 +}; + +static const bool8 sHasChangeableEntries[LIST_ITEM_COUNT] = +{ + [LIST_ITEM_MOVES] = TRUE, + [LIST_ITEM_AI_MOVES_PTS] = TRUE, + [LIST_ITEM_PP] = TRUE, + [LIST_ITEM_ABILITY] = TRUE, + [LIST_ITEM_TYPES] = TRUE, + [LIST_ITEM_HELD_ITEM] = TRUE, + [LIST_ITEM_STAT_STAGES] = TRUE, +}; + +static const u16 sBgColor[] = {RGB_WHITE}; + +// this file's functions +static void Task_DebugMenuFadeOut(u8 taskId); +static void Task_DebugMenuProcessInput(u8 taskId); +static void Task_DebugMenuFadeIn(u8 taskId); +static void PrintOnBattlerWindow(u8 windowId, u8 battlerId); +static void UpdateWindowsOnChangedBattler(struct BattleDebugMenu *data); +static void CreateSecondaryListMenu(struct BattleDebugMenu *data); +static void PrintSecondaryEntries(struct BattleDebugMenu *data); +static void DestroyModifyArrows(struct BattleDebugMenu *data); +static void PrintDigitChars(struct BattleDebugMenu *data); +static void SetUpModifyArrows(struct BattleDebugMenu *data); +static void UpdateBattlerValue(struct BattleDebugMenu *data); +static void UpdateMonData(struct BattleDebugMenu *data); +static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, bool32 statusTrue); +static bool32 TryMoveDigit(struct BattleDebugModifyArrows *modArrows, bool32 moveUp); +static void SwitchToDebugView(u8 taskId); + +// code +static struct BattleDebugMenu *GetStructPtr(u8 taskId) +{ + u8 *taskDataPtr = (u8 *)(&gTasks[taskId].data[0]); + + return (struct BattleDebugMenu*)(T1_READ_PTR(taskDataPtr)); +} + +static void SetStructPtr(u8 taskId, void *ptr) +{ + u32 structPtr = (u32)(ptr); + u8 *taskDataPtr = (u8 *)(&gTasks[taskId].data[0]); + + taskDataPtr[0] = structPtr >> 0; + taskDataPtr[1] = structPtr >> 8; + taskDataPtr[2] = structPtr >> 16; + taskDataPtr[3] = structPtr >> 24; +} + +static void MainCB2(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void CB2_BattleDebugMenu(void) +{ + u8 taskId; + struct BattleDebugMenu *data; + + switch (gMain.state) + { + default: + case 0: + SetVBlankCallback(NULL); + gMain.state++; + break; + case 1: + ResetVramOamAndBgCntRegs(); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + ResetAllBgsCoordinates(); + FreeAllWindowBuffers(); + DeactivateAllTextPrinters(); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + ShowBg(0); + ShowBg(1); + gMain.state++; + break; + case 2: + ResetPaletteFade(); + ScanlineEffect_Stop(); + ResetTasks(); + ResetSpriteData(); + gMain.state++; + break; + case 3: + LoadPalette(sBgColor, 0, 2); + LoadPalette(GetOverworldTextboxPalettePtr(), 0xf0, 16); + gMain.state++; + break; + case 4: + taskId = CreateTask(Task_DebugMenuFadeIn, 0); + data = AllocZeroed(sizeof(struct BattleDebugMenu)); + SetStructPtr(taskId, data); + + data->battlerId = gBattleStruct->debugBattler; + data->battlerWindowId = AddWindow(&sBattlerWindowTemplate); + PutWindowTilemap(data->battlerWindowId); + PrintOnBattlerWindow(data->battlerWindowId, data->battlerId); + + data->mainListWindowId = AddWindow(&sMainListWindowTemplate); + + gMultiuseListMenuTemplate = sMainListTemplate; + gMultiuseListMenuTemplate.windowId = data->mainListWindowId; + data->mainListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + + data->currentMainListItemId = 0; + data->activeWindow = ACTIVE_WIN_MAIN; + data->secondaryListTaskId = 0xFF; + CopyWindowToVram(data->mainListWindowId, 3); + gMain.state++; + break; + case 5: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + SetVBlankCallback(VBlankCB); + SetMainCallback2(MainCB2); + return; + } +} + +static void PutMovesPointsText(struct BattleDebugMenu *data) +{ + u32 i, j, count, battlerDef; + u8 *text = malloc(0x50); + + FillWindowPixelBuffer(data->aiMovesWindowId, 0x11); + for (i = 0; i < MAX_MON_MOVES; i++) + { + text[0] = CHAR_SPACE; + StringCopy(text + 1, gMoveNames[gBattleMons[data->aiBattlerId].moves[i]]); + AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 0, i * 15, 0, NULL); + for (count = 0, j = 0; j < MAX_BATTLERS_COUNT; j++) + { + if (data->aiIconSpriteIds[j] == 0xFF) + continue; + battlerDef = gSprites[data->aiIconSpriteIds[j]].data[0]; + ConvertIntToDecimalStringN(text, + gBattleStruct->aiFinalScore[data->aiBattlerId][battlerDef][i], + STR_CONV_MODE_RIGHT_ALIGN, 3); + AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 83 + count * 54, i * 15, 0, NULL); + + ConvertIntToDecimalStringN(text, + AI_DATA->simulatedDmg[data->aiBattlerId][battlerDef][i], + STR_CONV_MODE_RIGHT_ALIGN, 3); + AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 110 + count * 54, i * 15, 0, NULL); + + count++; + } + } + + CopyWindowToVram(data->aiMovesWindowId, 3); + free(text); +} + +static void Task_ShowAiPoints(u8 taskId) +{ + u32 i, count; + struct WindowTemplate winTemplate; + struct BattleDebugMenu *data = GetStructPtr(taskId); + + switch (data->aiViewState) + { + case 0: + HideBg(0); + ShowBg(1); + + // Swap battler if it's player mon + data->aiBattlerId = data->battlerId; + while (!IsBattlerAIControlled(data->aiBattlerId)) + { + if (++data->aiBattlerId >= gBattlersCount) + data->aiBattlerId = 0; + } + + LoadMonIconPalettes(); + for (count = 0, i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (i != data->aiBattlerId && IsBattlerAlive(i)) + { + data->aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species, + SpriteCallbackDummy, + 95 + (count * 60), 17, 0, 0); + gSprites[data->aiIconSpriteIds[i]].data[0] = i; // battler id + count++; + } + else + { + data->aiIconSpriteIds[i] = 0xFF; + } + } + data->aiMonSpriteId = CreateMonPicSprite(gBattleMons[data->aiBattlerId].species, + gBattleMons[data->aiBattlerId].otId, + gBattleMons[data->aiBattlerId].personality, + TRUE, + 39, 130, 15, TAG_NONE); + data->aiViewState++; + break; + // Put text + case 1: + winTemplate = CreateWindowTemplate(1, 0, 4, 30, 14, 15, 0x200); + data->aiMovesWindowId = AddWindow(&winTemplate); + PutWindowTilemap(data->aiMovesWindowId); + PutMovesPointsText(data); + + data->aiViewState++; + break; + // Input + case 2: + if (gMain.newKeys & (SELECT_BUTTON | B_BUTTON)) + { + SwitchToDebugView(taskId); + HideBg(1); + ShowBg(0); + return; + } + break; + } +} + +static void SwitchToAiPointsView(u8 taskId) +{ + gTasks[taskId].func = Task_ShowAiPoints; + GetStructPtr(taskId)->aiViewState = 0; +} + +static const u8 *const sAiInfoItemNames[] = +{ + sText_Ability, + sText_HeldItem, + sText_HoldEffect, +}; +static void PutAiInfoText(struct BattleDebugMenu *data) +{ + u32 i, j, count; + u8 *text = malloc(0x50); + + FillWindowPixelBuffer(data->aiMovesWindowId, 0x11); + + // item names + for (i = 0; i < ARRAY_COUNT(sAiInfoItemNames); i++) + { + AddTextPrinterParameterized(data->aiMovesWindowId, 1, sAiInfoItemNames[i], 3, i * 15, 0, NULL); + } + + // items info + for (i = 0; i < gBattlersCount; i++) + { + if (GET_BATTLER_SIDE(i) == B_SIDE_PLAYER && IsBattlerAlive(i)) + { + u16 ability = AI_GetAbility(i); + u16 holdEffect = AI_GetHoldEffect(i); + u16 item = gBattleMons[i].item; + u8 x = (i == B_POSITION_PLAYER_LEFT) ? 83 + (i) * 75 : 83 + (i-1) * 75; + AddTextPrinterParameterized(data->aiMovesWindowId, 0, gAbilityNames[ability], x, 0, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, 0, ItemId_GetName(item), x, 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, 0, GetHoldEffectName(holdEffect), x, 30, 0, NULL); + } + } + + CopyWindowToVram(data->aiMovesWindowId, 3); + free(text); +} + +static void Task_ShowAiKnowledge(u8 taskId) +{ + u32 i, count; + struct WindowTemplate winTemplate; + struct BattleDebugMenu *data = GetStructPtr(taskId); + + switch (data->aiViewState) + { + case 0: + HideBg(0); + ShowBg(1); + + // Swap battler if it's player mon + data->aiBattlerId = data->battlerId; + while (!IsBattlerAIControlled(data->aiBattlerId)) + { + if (++data->aiBattlerId >= gBattlersCount) + data->aiBattlerId = 0; + } + + LoadMonIconPalettes(); + for (count = 0, i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (GET_BATTLER_SIDE(i) == B_SIDE_PLAYER && IsBattlerAlive(i)) + { + data->aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species, + SpriteCallbackDummy, + 95 + (count * 80), 17, 0, 0); + gSprites[data->aiIconSpriteIds[i]].data[0] = i; // battler id + count++; + } + else + { + data->aiIconSpriteIds[i] = 0xFF; + } + } + data->aiMonSpriteId = CreateMonPicSprite(gBattleMons[data->aiBattlerId].species, + gBattleMons[data->aiBattlerId].otId, + gBattleMons[data->aiBattlerId].personality, + TRUE, + 39, 130, 15, TAG_NONE); + data->aiViewState++; + break; + // Put text + case 1: + winTemplate = CreateWindowTemplate(1, 0, 4, 27, 14, 15, 0x200); + data->aiMovesWindowId = AddWindow(&winTemplate); + PutWindowTilemap(data->aiMovesWindowId); + PutAiInfoText(data); + data->aiViewState++; + break; + // Input + case 2: + if (gMain.newKeys & (SELECT_BUTTON | B_BUTTON)) + { + SwitchToDebugView(taskId); + HideBg(1); + ShowBg(0); + return; + } + break; + } +} + +static void SwitchToAiInfoView(u8 taskId) +{ + gTasks[taskId].func = Task_ShowAiKnowledge; + GetStructPtr(taskId)->aiViewState = 0; +} + +static void SwitchToDebugView(u8 taskId) +{ + u32 i; + struct BattleDebugMenu *data = GetStructPtr(taskId); + + FreeMonIconPalettes(); + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (data->aiIconSpriteIds[i] != 0xFF) + FreeAndDestroyMonIconSprite(&gSprites[data->aiIconSpriteIds[i]]); + } + FreeAndDestroyMonPicSprite(data->aiMonSpriteId); + RemoveWindow(data->aiMovesWindowId); + + gTasks[taskId].func = Task_DebugMenuProcessInput; +} + +static void Task_DebugMenuFadeIn(u8 taskId) +{ + if (!gPaletteFade.active) + gTasks[taskId].func = Task_DebugMenuProcessInput; +} + +static void Task_DebugMenuProcessInput(u8 taskId) +{ + s32 listItemId = 0; + struct BattleDebugMenu *data = GetStructPtr(taskId); + + // Exit the menu. + if (gMain.newKeys & SELECT_BUTTON) + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_DebugMenuFadeOut; + return; + } + + // Try changing active battler. + if (gMain.newKeys & R_BUTTON) + { + if (data->battlerId++ == gBattlersCount - 1) + data->battlerId = 0; + UpdateWindowsOnChangedBattler(data); + } + else if (gMain.newKeys & L_BUTTON) + { + if (data->battlerId-- == 0) + data->battlerId = gBattlersCount - 1; + UpdateWindowsOnChangedBattler(data); + } + + // A main list item is active, handle input. + if (data->activeWindow == ACTIVE_WIN_MAIN) + { + listItemId = ListMenu_ProcessInput(data->mainListTaskId); + if (listItemId != LIST_CANCEL && listItemId != LIST_NOTHING_CHOSEN && listItemId < LIST_ITEM_COUNT) + { + if (listItemId == LIST_ITEM_AI_MOVES_PTS && gMain.newKeys & A_BUTTON) + { + SwitchToAiPointsView(taskId); + return; + } + else if (listItemId == LIST_ITEM_AI_INFO && gMain.newKeys & A_BUTTON) + { + SwitchToAiInfoView(taskId); + return; + } + data->currentMainListItemId = listItemId; + + // Create the secondary menu list. + CreateSecondaryListMenu(data); + PrintSecondaryEntries(data); + data->activeWindow = ACTIVE_WIN_SECONDARY; + } + } + // Secondary list is active, handle input. + else if (data->activeWindow == ACTIVE_WIN_SECONDARY) + { + listItemId = ListMenu_ProcessInput(data->secondaryListTaskId); + if (listItemId == LIST_CANCEL) + { + DestroyListMenuTask(data->secondaryListTaskId, NULL, NULL); + ClearStdWindowAndFrameToTransparent(data->secondaryListWindowId, TRUE); + RemoveWindow(data->secondaryListWindowId); + data->activeWindow = ACTIVE_WIN_MAIN; + data->secondaryListTaskId = 0xFF; + } + else if (listItemId != LIST_NOTHING_CHOSEN) + { + data->currentSecondaryListItemId = listItemId; + data->modifyWindowId = AddWindow(&sModifyWindowTemplate); + PutWindowTilemap(data->modifyWindowId); + CopyWindowToVram(data->modifyWindowId, 3); + SetUpModifyArrows(data); + PrintDigitChars(data); + data->activeWindow = ACTIVE_WIN_MODIFY; + } + } + // Handle value modifying. + else if (data->activeWindow == ACTIVE_WIN_MODIFY) + { + if (gMain.newKeys & (B_BUTTON | A_BUTTON)) + { + ClearStdWindowAndFrameToTransparent(data->modifyWindowId, TRUE); + RemoveWindow(data->modifyWindowId); + DestroyModifyArrows(data); + data->activeWindow = ACTIVE_WIN_SECONDARY; + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (data->modifyArrows.currentDigit != (data->modifyArrows.maxDigits - 1)) + { + data->modifyArrows.currentDigit++; + gSprites[data->modifyArrows.arrowSpriteId[0]].x2 += 6; + gSprites[data->modifyArrows.arrowSpriteId[1]].x2 += 6; + } + } + else if (gMain.newKeys & DPAD_LEFT) + { + if (data->modifyArrows.currentDigit != 0) + { + data->modifyArrows.currentDigit--; + gSprites[data->modifyArrows.arrowSpriteId[0]].x2 -= 6; + gSprites[data->modifyArrows.arrowSpriteId[1]].x2 -= 6; + } + } + else if (gMain.newKeys & DPAD_UP) + { + if (TryMoveDigit(&data->modifyArrows, TRUE)) + { + PrintDigitChars(data); + UpdateBattlerValue(data); + PrintSecondaryEntries(data); + } + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (TryMoveDigit(&data->modifyArrows, FALSE)) + { + PrintDigitChars(data); + UpdateBattlerValue(data); + PrintSecondaryEntries(data); + } + } + } +} + +static void Task_DebugMenuFadeOut(u8 taskId) +{ + if (!gPaletteFade.active) + { + struct BattleDebugMenu *data = GetStructPtr(taskId); + DestroyListMenuTask(data->mainListTaskId, 0, 0); + if (data->secondaryListTaskId != 0xFF) + DestroyListMenuTask(data->secondaryListTaskId, 0, 0); + + FreeAllWindowBuffers(); + UpdateMonData(data); + gBattleStruct->debugBattler = data->battlerId; + Free(data); + DestroyTask(taskId); + SetMainCallback2(ReshowBattleScreenAfterMenu); + } +} + +static void PrintOnBattlerWindow(u8 windowId, u8 battlerId) +{ + u8 text[POKEMON_NAME_LENGTH + 10]; + + text[0] = CHAR_0 + battlerId; + text[1] = CHAR_SPACE; + text[2] = CHAR_HYPHEN; + text[3] = CHAR_SPACE; + StringCopy(&text[4], gBattleMons[battlerId].nickname); + + FillWindowPixelBuffer(windowId, 0x11); + AddTextPrinterParameterized(windowId, 1, text, 0, 0, 0, NULL); + CopyWindowToVram(windowId, 3); +} + +static void UpdateWindowsOnChangedBattler(struct BattleDebugMenu *data) +{ + PrintOnBattlerWindow(data->battlerWindowId, data->battlerId); + if (data->secondaryListTaskId != 0xFF) + { + DestroyListMenuTask(data->secondaryListTaskId, 0, 0); + RemoveWindow(data->secondaryListWindowId); + CreateSecondaryListMenu(data); + data->currentSecondaryListItemId = 0; + PrintSecondaryEntries(data); + } + if (data->activeWindow == ACTIVE_WIN_MODIFY) + { + DestroyModifyArrows(data); + SetUpModifyArrows(data); + PrintDigitChars(data); + } +} + + +static void CreateSecondaryListMenu(struct BattleDebugMenu *data) +{ + struct WindowTemplate winTemplate; + struct ListMenuTemplate listTemplate; + u8 itemsCount = 1; + + winTemplate = sSecondaryListWindowTemplate; + listTemplate = sSecondaryListTemplate; + + switch (data->currentMainListItemId) + { + case LIST_ITEM_ABILITY: + itemsCount = 1; + break; + case LIST_ITEM_HELD_ITEM: + itemsCount = 2; + break; + case LIST_ITEM_TYPES: + itemsCount = 3; + break; + case LIST_ITEM_MOVES: + itemsCount = 5; + break; + case LIST_ITEM_PP: + itemsCount = 4; + break; + case LIST_ITEM_STATS: + listTemplate.items = sStatsListItems; + itemsCount = ARRAY_COUNT(sStatsListItems); + break; + case LIST_ITEM_STAT_STAGES: + itemsCount = 8; + break; + case LIST_ITEM_STATUS1: + listTemplate.items = sStatus1ListItems; + itemsCount = ARRAY_COUNT(sStatus1ListItems); + data->bitfield = sStatus1Bitfield; + break; + case LIST_ITEM_STATUS2: + listTemplate.items = sStatus2ListItems; + itemsCount = ARRAY_COUNT(sStatus2ListItems); + data->bitfield = sStatus2Bitfield; + winTemplate.height = 1; + break; + case LIST_ITEM_STATUS3: + listTemplate.items = sStatus3ListItems; + itemsCount = ARRAY_COUNT(sStatus3ListItems); + data->bitfield = sStatus3Bitfield; + break; + case LIST_ITEM_STATUS4: + listTemplate.items = sStatus4ListItems; + itemsCount = ARRAY_COUNT(sStatus4ListItems); + data->bitfield = sStatus4Bitfield; + break; + case LIST_ITEM_AI: + listTemplate.items = sAIListItems; + itemsCount = ARRAY_COUNT(sAIListItems); + data->bitfield = sAIBitfield; + break; + case LIST_ITEM_VARIOUS: + listTemplate.items = sVariousListItems; + itemsCount = ARRAY_COUNT(sVariousListItems); + break; + case LIST_ITEM_SIDE_STATUS: + listTemplate.items = sSideStatusListItems; + itemsCount = ARRAY_COUNT(sSideStatusListItems); + break; + case LIST_ITEM_AI_MOVES_PTS: + case LIST_ITEM_AI_INFO: + return; + } + + data->secondaryListItemCount = itemsCount; + winTemplate.height *= itemsCount; + data->secondaryListWindowId = AddWindow(&winTemplate); + + listTemplate.totalItems = itemsCount; + listTemplate.maxShowed = itemsCount; + if (listTemplate.maxShowed > 7 && !sHasChangeableEntries[data->currentMainListItemId]) + listTemplate.maxShowed = 7; + listTemplate.windowId = data->secondaryListWindowId; + + data->secondaryListTaskId = ListMenuInit(&listTemplate, 0, 0); + CopyWindowToVram(data->secondaryListWindowId, 3); +} + +static void PadString(const u8 *src, u8 *dst) +{ + u32 i; + + for (i = 0; i < 17 && src[i] != EOS; i++) + dst[i] = src[i]; + + for (; i < 17; i++) + dst[i] = CHAR_SPACE; + + dst[i] = EOS; +} + +static const u8 sTextAll[] = _("All"); + +static void PrintSecondaryEntries(struct BattleDebugMenu *data) +{ + u8 text[20]; + s32 i; + struct TextPrinterTemplate printer; + u8 yMultiplier; + + // Do not print entries if they are not changing. + if (!sHasChangeableEntries[data->currentMainListItemId]) + return; + + yMultiplier = (GetFontAttribute(sSecondaryListTemplate.fontId, 1) + sSecondaryListTemplate.itemVerticalPadding); + + printer.windowId = data->secondaryListWindowId; + printer.fontId = 1; + printer.unk = 0; + printer.letterSpacing = 0; + printer.lineSpacing = 1; + printer.fgColor = 2; + printer.bgColor = 1; + printer.shadowColor = 3; + printer.x = sSecondaryListTemplate.item_X; + printer.currentX = sSecondaryListTemplate.item_X; + printer.currentChar = text; + + switch (data->currentMainListItemId) + { + case LIST_ITEM_MOVES: + case LIST_ITEM_PP: + for (i = 0; i < 4; i++) + { + PadString(gMoveNames[gBattleMons[data->battlerId].moves[i]], text); + printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y; + AddTextPrinter(&printer, 0, NULL); + } + // Allow changing all moves at once. Useful for testing in wild doubles. + if (data->currentMainListItemId == LIST_ITEM_MOVES) + { + PadString(sTextAll, text); + printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y; + AddTextPrinter(&printer, 0, NULL); + } + break; + case LIST_ITEM_ABILITY: + PadString(gAbilityNames[gBattleMons[data->battlerId].ability], text); + printer.currentY = printer.y = sSecondaryListTemplate.upText_Y; + AddTextPrinter(&printer, 0, NULL); + break; + case LIST_ITEM_HELD_ITEM: + PadString(ItemId_GetName(gBattleMons[data->battlerId].item), text); + printer.currentY = printer.y = sSecondaryListTemplate.upText_Y; + AddTextPrinter(&printer, 0, NULL); + + PadString(sText_EffectOverride, text); + printer.fontId = 0; + printer.currentY = printer.y = sSecondaryListTemplate.upText_Y + yMultiplier; + AddTextPrinter(&printer, 0, NULL); + break; + case LIST_ITEM_TYPES: + for (i = 0; i < 3; i++) + { + u8 *types = &gBattleMons[data->battlerId].type1; + + PadString(gTypeNames[types[i]], text); + printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y; + AddTextPrinter(&printer, 0, NULL); + } + break; + case LIST_ITEM_STAT_STAGES: + for (i = 0; i < NUM_BATTLE_STATS - 1; i++) + { + u8 *txtPtr = StringCopy(text, gStatNamesTable[STAT_ATK + i]); + txtPtr[0] = CHAR_SPACE; + if (gBattleMons[data->battlerId].statStages[STAT_ATK + i] >= DEFAULT_STAT_STAGE) + { + txtPtr[1] = CHAR_PLUS; + txtPtr[2] = CHAR_0 + (gBattleMons[data->battlerId].statStages[STAT_ATK + i] - DEFAULT_STAT_STAGE); + } + else + { + txtPtr[1] = CHAR_HYPHEN; + txtPtr[2] = CHAR_6 - (gBattleMons[data->battlerId].statStages[STAT_ATK + i]); + } + txtPtr[3] = EOS; + + PadString(text, text); + printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y; + AddTextPrinter(&printer, 0, NULL); + } + // Allow changing all stat stages at once. + PadString(sTextAll, text); + printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y; + AddTextPrinter(&printer, 0, NULL); + break; + } +} + +static void DestroyModifyArrows(struct BattleDebugMenu *data) +{ + FreeSpritePaletteByTag(gSpritePalette_Arrow.tag); + if (data->modifyArrows.arrowSpriteId[0] != 0xFF) + DestroySprite(&gSprites[data->modifyArrows.arrowSpriteId[0]]); + if (data->modifyArrows.arrowSpriteId[1] != 0xFF) + DestroySprite(&gSprites[data->modifyArrows.arrowSpriteId[1]]); +} + +static void PrintDigitChars(struct BattleDebugMenu *data) +{ + s32 i; + u8 text[MAX_MODIFY_DIGITS + 1]; + + for (i = 0; i < data->modifyArrows.maxDigits; i++) + text[i] = data->modifyArrows.charDigits[i]; + + text[i] = EOS; + + AddTextPrinterParameterized(data->modifyWindowId, 1, text, 3, 0, 0, NULL); +} + +static const u32 GetBitfieldToAndValue(u32 currBit, u32 bitsCount) +{ + u32 i; + u32 toAnd = 0; + + for (i = 0; i < bitsCount; i++) + toAnd |= (1 << (currBit + i)); + + return toAnd; +} + +static const u32 GetBitfieldValue(u32 value, u32 currBit, u32 bitsCount) +{ + return (value & (GetBitfieldToAndValue(currBit, bitsCount))) >> currBit; +} + +static void UpdateBattlerValue(struct BattleDebugMenu *data) +{ + u32 i; + switch (data->modifyArrows.typeOfVal) + { + case VAL_U8: + *(u8 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue; + break; + case VAL_S8: + *(s8 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue; + break; + case VAL_U16: + *(u16 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue; + break; + case VAR_U16_4_ENTRIES: + ((u16 *)(data->modifyArrows.modifiedValPtr))[0] = data->modifyArrows.currValue; + ((u16 *)(data->modifyArrows.modifiedValPtr))[1] = data->modifyArrows.currValue; + ((u16 *)(data->modifyArrows.modifiedValPtr))[2] = data->modifyArrows.currValue; + ((u16 *)(data->modifyArrows.modifiedValPtr))[3] = data->modifyArrows.currValue; + break; + case VAL_ALL_STAT_STAGES: + for (i = 0; i < NUM_BATTLE_STATS; i++) + gBattleMons[data->battlerId].statStages[i] = data->modifyArrows.currValue; + break; + case VAL_U32: + *(u32 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue; + break; + case VAL_BITFIELD_32: + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~(GetBitfieldToAndValue(data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount)); + *(u32 *)(data->modifyArrows.modifiedValPtr) |= (data->modifyArrows.currValue << data->bitfield[data->currentSecondaryListItemId].currBit); + break; + case VAR_SIDE_STATUS: + *GetSideStatusValue(data, TRUE, data->modifyArrows.currValue != 0) = data->modifyArrows.currValue; + break; + case VAR_SHOW_HP: + (*(struct BattleSpriteInfo*)(data->modifyArrows.modifiedValPtr)).hpNumbersNoBars = data->modifyArrows.currValue; + break; + case VAR_SUBSTITUTE: + *(u8 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue; + if (*(u8 *)(data->modifyArrows.modifiedValPtr) == 0) + { + gBattleMons[data->battlerId].status2 &= ~STATUS2_SUBSTITUTE; + gBattleSpritesDataPtr->battlerData[data->battlerId].behindSubstitute = 0; + } + else + { + gBattleMons[data->battlerId].status2 |= STATUS2_SUBSTITUTE; + gBattleSpritesDataPtr->battlerData[data->battlerId].behindSubstitute = 1; + } + break; + case VAR_IN_LOVE: + if (data->modifyArrows.currValue) + { + if (IsBattlerAlive(BATTLE_OPPOSITE(data->battlerId))) + gBattleMons[data->battlerId].status2 |= STATUS2_INFATUATED_WITH(BATTLE_OPPOSITE(data->battlerId)); + else + gBattleMons[data->battlerId].status2 |= STATUS2_INFATUATED_WITH(BATTLE_PARTNER(BATTLE_OPPOSITE(data->battlerId))); + } + else + { + gBattleMons[data->battlerId].status2 &= ~STATUS2_INFATUATION; + } + break; + case VAL_ITEM: + if (data->currentSecondaryListItemId == 0) + *(u16 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue; + else if (data->currentSecondaryListItemId == 1) + gBattleStruct->debugHoldEffects[data->battlerId] = data->modifyArrows.currValue; + break; + } + data->battlerWasChanged[data->battlerId] = TRUE; +} + +static u32 CharDigitsToValue(u8 *charDigits, u8 maxDigits) +{ + s32 i; + u8 id = 0; + u32 newValue = 0; + u8 valueDigits[MAX_MODIFY_DIGITS]; + + for (i = 0; i < MAX_MODIFY_DIGITS; i++) + valueDigits[i] = charDigits[i] - CHAR_0; + + if (maxDigits >= MAX_MODIFY_DIGITS) + newValue += valueDigits[id++] * 1000; + if (maxDigits >= MAX_MODIFY_DIGITS - 1) + newValue += valueDigits[id++] * 100; + if (maxDigits >= MAX_MODIFY_DIGITS - 2) + newValue += valueDigits[id++] * 10; + if (maxDigits >= MAX_MODIFY_DIGITS - 3) + newValue += valueDigits[id++]; + + return newValue; +} + +static void ValueToCharDigits(u8 *charDigits, u32 newValue, u8 maxDigits) +{ + s32 i; + u8 valueDigits[MAX_MODIFY_DIGITS]; + u8 id = 0; + + if (maxDigits >= MAX_MODIFY_DIGITS) + valueDigits[id++] = newValue / 1000; + if (maxDigits >= MAX_MODIFY_DIGITS - 1) + valueDigits[id++] = (newValue % 1000) / 100; + if (maxDigits >= MAX_MODIFY_DIGITS - 2) + valueDigits[id++] = (newValue % 100) / 10; + if (maxDigits >= MAX_MODIFY_DIGITS - 3) + valueDigits[id++] = newValue % 10; + + for (i = 0; i < MAX_MODIFY_DIGITS; i++) + charDigits[i] = valueDigits[i] + CHAR_0; +} + +static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, bool32 statusTrue) +{ + struct SideTimer *sideTimer = &gSideTimers[GET_BATTLER_SIDE(data->battlerId)]; + + switch (data->currentSecondaryListItemId) + { + case LIST_SIDE_REFLECT: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_REFLECT; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_REFLECT; + sideTimer->reflectBattlerId = data->battlerId; + } + return &sideTimer->reflectTimer; + case LIST_SIDE_LIGHTSCREEN: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_LIGHTSCREEN; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_LIGHTSCREEN; + sideTimer->lightscreenBattlerId = data->battlerId; + } + return &sideTimer->lightscreenTimer; + case LIST_SIDE_SPIKES: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_SPIKES; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_SPIKES; + } + return &sideTimer->spikesAmount; + case LIST_SIDE_SAFEGUARD: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_SAFEGUARD; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_SAFEGUARD; + sideTimer->safeguardBattlerId = data->battlerId; + } + return &sideTimer->safeguardTimer; + case LIST_SIDE_MIST: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_MIST; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_MIST; + sideTimer->mistBattlerId = data->battlerId; + } + return &sideTimer->mistTimer; + case LIST_SIDE_AURORA_VEIL: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_AURORA_VEIL; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_AURORA_VEIL; + sideTimer->auroraVeilBattlerId = data->battlerId; + } + return &sideTimer->auroraVeilTimer; + case LIST_SIDE_LUCKY_CHANT: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_LUCKY_CHANT; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_LUCKY_CHANT; + sideTimer->luckyChantBattlerId = data->battlerId; + } + return &sideTimer->luckyChantTimer; + case LIST_SIDE_TAILWIND: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TAILWIND; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TAILWIND; + sideTimer->tailwindBattlerId = data->battlerId; + } + return &sideTimer->tailwindTimer; + case LIST_SIDE_STEALTH_ROCK: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STEALTH_ROCK; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEALTH_ROCK; + } + return &sideTimer->stealthRockAmount; + case LIST_SIDE_TOXIC_SPIKES: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TOXIC_SPIKES; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TOXIC_SPIKES; + } + return &sideTimer->toxicSpikesAmount; + 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; + } + return &sideTimer->stickyWebAmount; + default: + return NULL; + } +} + +static void SetUpModifyArrows(struct BattleDebugMenu *data) +{ + LoadSpritePalette(&gSpritePalette_Arrow); + data->modifyArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, 207, 12, 0); + data->modifyArrows.arrowSpriteId[1] = CreateSprite(&gSpriteTemplate_Arrow, 207, 36, 0); + gSprites[data->modifyArrows.arrowSpriteId[1]].animNum = 1; + switch (data->currentMainListItemId) + { + case LIST_ITEM_ABILITY: + data->modifyArrows.minValue = 0; + data->modifyArrows.maxValue = ABILITIES_COUNT_GEN8 - 1; + data->modifyArrows.maxDigits = 3; + data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].ability; + data->modifyArrows.typeOfVal = VAL_U16; + data->modifyArrows.currValue = gBattleMons[data->battlerId].ability; + break; + case LIST_ITEM_MOVES: + data->modifyArrows.minValue = 0; + data->modifyArrows.maxValue = MOVES_COUNT_GEN8 - 1; + data->modifyArrows.maxDigits = 3; + if (data->currentSecondaryListItemId == 4) + { + data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].moves[0]; + data->modifyArrows.currValue = gBattleMons[data->battlerId].moves[0]; + data->modifyArrows.typeOfVal = VAR_U16_4_ENTRIES; + } + else + { + data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].moves[data->currentSecondaryListItemId]; + data->modifyArrows.currValue = gBattleMons[data->battlerId].moves[data->currentSecondaryListItemId]; + data->modifyArrows.typeOfVal = VAL_U16; + } + break; + case LIST_ITEM_PP: + data->modifyArrows.minValue = 0; + data->modifyArrows.maxValue = CalculatePPWithBonus(gBattleMons[data->battlerId].moves[data->currentSecondaryListItemId], gBattleMons[data->battlerId].ppBonuses, data->currentSecondaryListItemId); + data->modifyArrows.maxDigits = 2; + data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].pp[data->currentSecondaryListItemId]; + data->modifyArrows.typeOfVal = VAL_U8; + data->modifyArrows.currValue = gBattleMons[data->battlerId].pp[data->currentSecondaryListItemId]; + break; + case LIST_ITEM_HELD_ITEM: + data->modifyArrows.minValue = 0; + data->modifyArrows.maxValue = ITEMS_COUNT - 1; + data->modifyArrows.maxDigits = 3; + data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].item; + data->modifyArrows.typeOfVal = VAL_ITEM; + if (data->currentSecondaryListItemId == 0) + data->modifyArrows.currValue = gBattleMons[data->battlerId].item; + else + data->modifyArrows.currValue = gBattleStruct->debugHoldEffects[data->battlerId]; + break; + case LIST_ITEM_TYPES: + 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.typeOfVal = VAL_U8; + data->modifyArrows.currValue = *(u8 *)((&gBattleMons[data->battlerId].type1) + 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.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) + { + data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].maxHP; + data->modifyArrows.minValue = gBattleMons[data->battlerId].hp; + data->modifyArrows.currValue = gBattleMons[data->battlerId].maxHP; + } + else + { + 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; + data->modifyArrows.maxValue = 12; + data->modifyArrows.maxDigits = 2; + if (data->currentSecondaryListItemId == NUM_BATTLE_STATS - 1) // Change all stats + { + data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].statStages[STAT_ATK]; + data->modifyArrows.currValue = gBattleMons[data->battlerId].statStages[STAT_ATK]; + data->modifyArrows.typeOfVal = VAL_ALL_STAT_STAGES; + } + else + { + data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].statStages[data->currentSecondaryListItemId + STAT_ATK]; + data->modifyArrows.typeOfVal = VAL_U8; + data->modifyArrows.currValue = gBattleMons[data->battlerId].statStages[data->currentSecondaryListItemId + STAT_ATK]; + } + break; + case LIST_ITEM_VARIOUS: + if (data->currentSecondaryListItemId == VARIOUS_SHOW_HP) + { + data->modifyArrows.minValue = 0; + data->modifyArrows.maxValue = 1; + data->modifyArrows.maxDigits = 1; + data->modifyArrows.modifiedValPtr = &gBattleSpritesDataPtr->battlerData[data->battlerId]; + data->modifyArrows.typeOfVal = VAR_SHOW_HP; + data->modifyArrows.currValue = gBattleSpritesDataPtr->battlerData[data->battlerId].hpNumbersNoBars; + } + else if (data->currentSecondaryListItemId == VARIOUS_SUBSTITUTE_HP) + { + data->modifyArrows.minValue = 0; + data->modifyArrows.maxValue = 255; + data->modifyArrows.maxDigits = 3; + data->modifyArrows.modifiedValPtr = &gDisableStructs[data->battlerId].substituteHP; + data->modifyArrows.typeOfVal = VAR_SUBSTITUTE; + data->modifyArrows.currValue = gDisableStructs[data->battlerId].substituteHP; + } + else if (data->currentSecondaryListItemId == VARIOUS_IN_LOVE) + { + data->modifyArrows.minValue = 0; + data->modifyArrows.maxValue = 1; + data->modifyArrows.maxDigits = 1; + data->modifyArrows.modifiedValPtr = NULL; + data->modifyArrows.typeOfVal = VAR_IN_LOVE; + data->modifyArrows.currValue = (gBattleMons[data->battlerId].status2 & STATUS2_INFATUATION) != 0; + } + break; + case LIST_ITEM_STATUS1: + data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].status1; + data->modifyArrows.currValue = GetBitfieldValue(gBattleMons[data->battlerId].status1, data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); + data->modifyArrows.typeOfVal = VAL_BITFIELD_32; + goto CASE_ITEM_STATUS; + case LIST_ITEM_STATUS2: + data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].status2; + data->modifyArrows.currValue = GetBitfieldValue(gBattleMons[data->battlerId].status2, data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); + data->modifyArrows.typeOfVal = VAL_BITFIELD_32; + goto CASE_ITEM_STATUS; + case LIST_ITEM_STATUS3: + data->modifyArrows.modifiedValPtr = &gStatuses3[data->battlerId]; + data->modifyArrows.currValue = GetBitfieldValue(gStatuses3[data->battlerId], data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); + data->modifyArrows.typeOfVal = VAL_BITFIELD_32; + goto CASE_ITEM_STATUS; + case LIST_ITEM_STATUS4: + data->modifyArrows.modifiedValPtr = &gStatuses4[data->battlerId]; + data->modifyArrows.currValue = GetBitfieldValue(gStatuses4[data->battlerId], data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); + data->modifyArrows.typeOfVal = VAL_BITFIELD_32; + goto CASE_ITEM_STATUS; + case LIST_ITEM_AI: + data->modifyArrows.modifiedValPtr = &gBattleResources->ai->aiFlags; + data->modifyArrows.currValue = GetBitfieldValue(gBattleResources->ai->aiFlags, data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); + data->modifyArrows.typeOfVal = VAL_BITFIELD_32; + goto CASE_ITEM_STATUS; + CASE_ITEM_STATUS: + data->modifyArrows.minValue = 0; + data->modifyArrows.maxValue = (1 << data->bitfield[data->currentSecondaryListItemId].bitsCount) - 1; + data->modifyArrows.maxDigits = sBitsToMaxDigit[data->bitfield[data->currentSecondaryListItemId].bitsCount]; + break; + case LIST_ITEM_SIDE_STATUS: + data->modifyArrows.minValue = 0; + + if (data->currentSecondaryListItemId == LIST_SIDE_SPIKES) + data->modifyArrows.maxValue = 3; + else if (data->currentSecondaryListItemId == LIST_SIDE_STEALTH_ROCK || data->currentSecondaryListItemId == LIST_SIDE_STICKY_WEB) + data->modifyArrows.maxValue = 1; + else + data->modifyArrows.maxValue = 9; + + data->modifyArrows.maxDigits = 2; + data->modifyArrows.modifiedValPtr = &gSideStatuses[GET_BATTLER_SIDE(data->battlerId)]; + data->modifyArrows.typeOfVal = VAR_SIDE_STATUS; + data->modifyArrows.currValue = *GetSideStatusValue(data, FALSE, FALSE); + break; + } + + data->modifyArrows.currentDigit = 0; + ValueToCharDigits(data->modifyArrows.charDigits, data->modifyArrows.currValue, data->modifyArrows.maxDigits); +} + +static bool32 TryMoveDigit(struct BattleDebugModifyArrows *modArrows, bool32 moveUp) +{ + s32 i; + u8 charDigits[MAX_MODIFY_DIGITS]; + u32 newValue; + + for (i = 0; i < MAX_MODIFY_DIGITS; i++) + charDigits[i] = modArrows->charDigits[i]; + + if (moveUp) + { + if (charDigits[modArrows->currentDigit] == CHAR_9) + { + charDigits[modArrows->currentDigit] = CHAR_0; + for (i = modArrows->currentDigit - 1; i >= 0; i--) + { + if (charDigits[i] == CHAR_9) + { + charDigits[i] = CHAR_0; + } + else + { + charDigits[i]++; + break; + } + } + } + else + charDigits[modArrows->currentDigit]++; + } + else + { + if (charDigits[modArrows->currentDigit] == CHAR_0) + { + charDigits[modArrows->currentDigit] = CHAR_9; + for (i = modArrows->currentDigit - 1; i >= 0; i--) + { + if (charDigits[i] == CHAR_0) + { + charDigits[i] = CHAR_9; + } + else + { + charDigits[i]--; + break; + } + } + } + else + charDigits[modArrows->currentDigit]--; + } + + newValue = CharDigitsToValue(charDigits, modArrows->maxDigits); + if (newValue > modArrows->maxValue || newValue < modArrows->minValue) + { + return FALSE; + } + else + { + modArrows->currValue = newValue; + for (i = 0; i < MAX_MODIFY_DIGITS; i++) + modArrows->charDigits[i] = charDigits[i]; + return TRUE; + } +} + +static void UpdateMonData(struct BattleDebugMenu *data) +{ + s32 i, j; + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (data->battlerWasChanged[i]) + { + struct Pokemon *mon; + struct BattlePokemon *battleMon = &gBattleMons[i]; + + if (GetBattlerSide(i) == B_SIDE_PLAYER) + mon = &gPlayerParty[gBattlerPartyIndexes[i]]; + else + mon = &gEnemyParty[gBattlerPartyIndexes[i]]; + + SetMonData(mon, MON_DATA_HELD_ITEM, &battleMon->item); + SetMonData(mon, MON_DATA_STATUS, &battleMon->status1); + SetMonData(mon, MON_DATA_HP, &battleMon->hp); + SetMonData(mon, MON_DATA_MAX_HP, &battleMon->maxHP); + for (j = 0; j < 4; j++) + SetMonData(mon, MON_DATA_MOVE1 + j, &battleMon->moves[j]); + } + } +} + +static const u8 sText_HoldEffectNone[] = _("????????"); +static const u8 sText_HoldEffectRestoreHp[] = _("Restore Hp"); +static const u8 sText_HoldEffectCurePar[] = _("Cure Par"); +static const u8 sText_HoldEffectCureSlp[] = _("Cure Slp"); +static const u8 sText_HoldEffectCurePsn[] = _("Cure Psn"); +static const u8 sText_HoldEffectCureBrn[] = _("Cure Brn"); +static const u8 sText_HoldEffectCureFrz[] = _("Cure Frz"); +static const u8 sText_HoldEffectRestorePp[] = _("Restore Pp"); +static const u8 sText_HoldEffectCureConfusion[] = _("Cure Confusion"); +static const u8 sText_HoldEffectCureStatus[] = _("Cure Status"); +static const u8 sText_HoldEffectConfuseSpicy[] = _("Confuse Spicy"); +static const u8 sText_HoldEffectConfuseDry[] = _("Confuse Dry"); +static const u8 sText_HoldEffectConfuseSweet[] = _("Confuse Sweet"); +static const u8 sText_HoldEffectConfuseBitter[] = _("Confuse Bitter"); +static const u8 sText_HoldEffectConfuseSour[] = _("Confuse Sour"); +static const u8 sText_HoldEffectAttackUp[] = _("Attack Up"); +static const u8 sText_HoldEffectDefenseUp[] = _("Defense Up"); +static const u8 sText_HoldEffectSpeedUp[] = _("Speed Up"); +static const u8 sText_HoldEffectSpAttackUp[] = _("Sp Attack Up"); +static const u8 sText_HoldEffectSpDefenseUp[] = _("Sp Defense Up"); +static const u8 sText_HoldEffectCriticalUp[] = _("Critical Up"); +static const u8 sText_HoldEffectRandomStatUp[] = _("Random Stat Up"); +static const u8 sText_HoldEffectEvasionUp[] = _("Evasion Up"); +static const u8 sText_HoldEffectRestoreStats[] = _("Restore Stats"); +static const u8 sText_HoldEffectMachoBrace[] = _("Macho Brace"); +static const u8 sText_HoldEffectExpShare[] = _("Exp Share"); +static const u8 sText_HoldEffectQuickClaw[] = _("Quick Claw"); +static const u8 sText_HoldEffectFriendshipUp[] = _("Friendship Up"); +static const u8 sText_HoldEffectMentalHerb[] = _("Mental Herb"); +static const u8 sText_HoldEffectChoiceBand[] = _("Choice Band"); +static const u8 sText_HoldEffectFlinch[] = _("Flinch"); +static const u8 sText_HoldEffectBugPower[] = _("Bug Power"); +static const u8 sText_HoldEffectDoublePrize[] = _("Double Prize"); +static const u8 sText_HoldEffectRepel[] = _("Repel"); +static const u8 sText_HoldEffectSoulDew[] = _("Soul Dew"); +static const u8 sText_HoldEffectDeepSeaTooth[] = _("Deep Sea Tooth"); +static const u8 sText_HoldEffectDeepSeaScale[] = _("Deep Sea Scale"); +static const u8 sText_HoldEffectCanAlwaysRun[] = _("Can Always Run"); +static const u8 sText_HoldEffectPreventEvolve[] = _("Prevent Evolve"); +static const u8 sText_HoldEffectFocusBand[] = _("Focus Band"); +static const u8 sText_HoldEffectLuckyEgg[] = _("Lucky Egg"); +static const u8 sText_HoldEffectScopeLens[] = _("Scope Lens"); +static const u8 sText_HoldEffectSteelPower[] = _("Steel Power"); +static const u8 sText_HoldEffectLeftovers[] = _("Leftovers"); +static const u8 sText_HoldEffectDragonScale[] = _("Dragon Scale"); +static const u8 sText_HoldEffectLightBall[] = _("Light Ball"); +static const u8 sText_HoldEffectGroundPower[] = _("Ground Power"); +static const u8 sText_HoldEffectRockPower[] = _("Rock Power"); +static const u8 sText_HoldEffectGrassPower[] = _("Grass Power"); +static const u8 sText_HoldEffectDarkPower[] = _("Dark Power"); +static const u8 sText_HoldEffectFightingPower[] = _("Fighting Power"); +static const u8 sText_HoldEffectElectricPower[] = _("Electric Power"); +static const u8 sText_HoldEffectWaterPower[] = _("Water Power"); +static const u8 sText_HoldEffectFlyingPower[] = _("Flying Power"); +static const u8 sText_HoldEffectPoisonPower[] = _("Poison Power"); +static const u8 sText_HoldEffectIcePower[] = _("Ice Power"); +static const u8 sText_HoldEffectGhostPower[] = _("Ghost Power"); +static const u8 sText_HoldEffectPsychicPower[] = _("Psychic Power"); +static const u8 sText_HoldEffectFirePower[] = _("Fire Power"); +static const u8 sText_HoldEffectDragonPower[] = _("Dragon Power"); +static const u8 sText_HoldEffectNormalPower[] = _("Normal Power"); +static const u8 sText_HoldEffectUpgrade[] = _("Upgrade"); +static const u8 sText_HoldEffectShellBell[] = _("Shell Bell"); +static const u8 sText_HoldEffectLuckyPunch[] = _("Lucky Punch"); +static const u8 sText_HoldEffectMetalPowder[] = _("Metal Powder"); +static const u8 sText_HoldEffectThickClub[] = _("Thick Club"); +static const u8 sText_HoldEffectLeek[] = _("Leek"); +static const u8 sText_HoldEffectChoiceScarf[] = _("Choice Scarf"); +static const u8 sText_HoldEffectChoiceSpecs[] = _("Choice Specs"); +static const u8 sText_HoldEffectDampRock[] = _("Damp Rock"); +static const u8 sText_HoldEffectGripClaw[] = _("Grip Claw"); +static const u8 sText_HoldEffectHeatRock[] = _("Heat Rock"); +static const u8 sText_HoldEffectIcyRock[] = _("Icy Rock"); +static const u8 sText_HoldEffectLightClay[] = _("Light Clay"); +static const u8 sText_HoldEffectSmoothRock[] = _("Smooth Rock"); +static const u8 sText_HoldEffectPowerHerb[] = _("Power Herb"); +static const u8 sText_HoldEffectBigRoot[] = _("Big Root"); +static const u8 sText_HoldEffectExpertBelt[] = _("Expert Belt"); +static const u8 sText_HoldEffectLifeOrb[] = _("Life Orb"); +static const u8 sText_HoldEffectMetronome[] = _("Metronome"); +static const u8 sText_HoldEffectMuscleBand[] = _("Muscle Band"); +static const u8 sText_HoldEffectWideLens[] = _("Wide Lens"); +static const u8 sText_HoldEffectWiseGlasses[] = _("Wise Glasses"); +static const u8 sText_HoldEffectZoomLens[] = _("Zoom Lens"); +static const u8 sText_HoldEffectLaggingTail[] = _("Lagging Tail"); +static const u8 sText_HoldEffectFocusSash[] = _("Focus Sash"); +static const u8 sText_HoldEffectFlameOrb[] = _("Flame Orb"); +static const u8 sText_HoldEffectToxicOrb[] = _("Toxic Orb"); +static const u8 sText_HoldEffectStickyBarb[] = _("Sticky Barb"); +static const u8 sText_HoldEffectIronBall[] = _("Iron Ball"); +static const u8 sText_HoldEffectBlackSludge[] = _("Black Sludge"); +static const u8 sText_HoldEffectDestinyKnot[] = _("Destiny Knot"); +static const u8 sText_HoldEffectShedShell[] = _("Shed Shell"); +static const u8 sText_HoldEffectQuickPowder[] = _("Quick Powder"); +static const u8 sText_HoldEffectAdamantOrb[] = _("Adamant Orb"); +static const u8 sText_HoldEffectLustrousOrb[] = _("Lustrous Orb"); +static const u8 sText_HoldEffectGriseousOrb[] = _("Griseous Orb"); +static const u8 sText_HoldEffectEnigmaBerry[] = _("Enigma Berry"); +static const u8 sText_HoldEffectResistBerry[] = _("Resist Berry"); +static const u8 sText_HoldEffectPowerItem[] = _("Power Item"); +static const u8 sText_HoldEffectRestorePctHp[] = _("Restore Pct Hp"); +static const u8 sText_HoldEffectMicleBerry[] = _("Micle Berry"); +static const u8 sText_HoldEffectCustapBerry[] = _("Custap Berry"); +static const u8 sText_HoldEffectJabocaBerry[] = _("Jaboca Berry"); +static const u8 sText_HoldEffectRowapBerry[] = _("Rowap Berry"); +static const u8 sText_HoldEffectKeeBerry[] = _("Kee Berry"); +static const u8 sText_HoldEffectMarangaBerry[] = _("Maranga Berry"); +static const u8 sText_HoldEffectFloatStone[] = _("Float Stone"); +static const u8 sText_HoldEffectEviolite[] = _("Eviolite"); +static const u8 sText_HoldEffectAssaultVest[] = _("Assault Vest"); +static const u8 sText_HoldEffectDrive[] = _("Drive"); +static const u8 sText_HoldEffectGems[] = _("Gems"); +static const u8 sText_HoldEffectRockyHelmet[] = _("Rocky Helmet"); +static const u8 sText_HoldEffectAirBalloon[] = _("Air Balloon"); +static const u8 sText_HoldEffectRedCard[] = _("Red Card"); +static const u8 sText_HoldEffectRingTarget[] = _("Ring Target"); +static const u8 sText_HoldEffectBindingBand[] = _("Binding Band"); +static const u8 sText_HoldEffectEjectButton[] = _("Eject Button"); +static const u8 sText_HoldEffectAbsorbBulb[] = _("Absorb Bulb"); +static const u8 sText_HoldEffectCellBattery[] = _("Cell Battery"); +static const u8 sText_HoldEffectFairyPower[] = _("Fairy Power"); +static const u8 sText_HoldEffectMegaStone[] = _("Mega Stone"); +static const u8 sText_HoldEffectSafetyGoggles[] = _("Safety Goggles"); +static const u8 sText_HoldEffectLuminousMoss[] = _("Luminous Moss"); +static const u8 sText_HoldEffectSnowball[] = _("Snowball"); +static const u8 sText_HoldEffectWeaknessPolicy[] = _("Weakness Policy"); +static const u8 sText_HoldEffectPrimalOrb[] = _("Primal Orb"); +static const u8 sText_HoldEffectProtectivePads[] = _("Protective Pads"); +static const u8 sText_HoldEffectTerrainExtender[] = _("Terrain Extender"); +static const u8 sText_HoldEffectSeeds[] = _("Seeds"); +static const u8 sText_HoldEffectAdrenalineOrb[] = _("Adrenaline Orb"); +static const u8 sText_HoldEffectMemory[] = _("Memory"); +static const u8 sText_HoldEffectZCrystal[] = _("Z-Crystal"); +static const u8 sText_HoldEffectPlate[] = _("Plate"); +static const u8 sText_HoldEffectUtilityUmbrella[] = _("Utility Umbrella"); +static const u8 sText_HoldEffectEjectPack[] = _("Eject Pack"); +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 *const sHoldEffectNames[] = +{ + [HOLD_EFFECT_NONE] = sText_HoldEffectNone, + [HOLD_EFFECT_RESTORE_HP] = sText_HoldEffectRestoreHp, + [HOLD_EFFECT_CURE_PAR] = sText_HoldEffectCurePar, + [HOLD_EFFECT_CURE_SLP] = sText_HoldEffectCureSlp, + [HOLD_EFFECT_CURE_PSN] = sText_HoldEffectCurePsn, + [HOLD_EFFECT_CURE_BRN] = sText_HoldEffectCureBrn, + [HOLD_EFFECT_CURE_FRZ] = sText_HoldEffectCureFrz, + [HOLD_EFFECT_RESTORE_PP] = sText_HoldEffectRestorePp, + [HOLD_EFFECT_CURE_CONFUSION] = sText_HoldEffectCureConfusion, + [HOLD_EFFECT_CURE_STATUS] = sText_HoldEffectCureStatus, + [HOLD_EFFECT_CONFUSE_SPICY] = sText_HoldEffectConfuseSpicy, + [HOLD_EFFECT_CONFUSE_DRY] = sText_HoldEffectConfuseDry, + [HOLD_EFFECT_CONFUSE_SWEET] = sText_HoldEffectConfuseSweet, + [HOLD_EFFECT_CONFUSE_BITTER] = sText_HoldEffectConfuseBitter, + [HOLD_EFFECT_CONFUSE_SOUR] = sText_HoldEffectConfuseSour, + [HOLD_EFFECT_ATTACK_UP] = sText_HoldEffectAttackUp, + [HOLD_EFFECT_DEFENSE_UP] = sText_HoldEffectDefenseUp, + [HOLD_EFFECT_SPEED_UP] = sText_HoldEffectSpeedUp, + [HOLD_EFFECT_SP_ATTACK_UP] = sText_HoldEffectSpAttackUp, + [HOLD_EFFECT_SP_DEFENSE_UP] = sText_HoldEffectSpDefenseUp, + [HOLD_EFFECT_CRITICAL_UP] = sText_HoldEffectCriticalUp, + [HOLD_EFFECT_RANDOM_STAT_UP] = sText_HoldEffectRandomStatUp, + [HOLD_EFFECT_EVASION_UP] = sText_HoldEffectEvasionUp, + [HOLD_EFFECT_RESTORE_STATS] = sText_HoldEffectRestoreStats, + [HOLD_EFFECT_MACHO_BRACE] = sText_HoldEffectMachoBrace, + [HOLD_EFFECT_EXP_SHARE] = sText_HoldEffectExpShare, + [HOLD_EFFECT_QUICK_CLAW] = sText_HoldEffectQuickClaw, + [HOLD_EFFECT_FRIENDSHIP_UP] = sText_HoldEffectFriendshipUp, + [HOLD_EFFECT_MENTAL_HERB] = sText_HoldEffectMentalHerb, + [HOLD_EFFECT_CHOICE_BAND] = sText_HoldEffectChoiceBand, + [HOLD_EFFECT_FLINCH] = sText_HoldEffectFlinch, + [HOLD_EFFECT_BUG_POWER] = sText_HoldEffectBugPower, + [HOLD_EFFECT_DOUBLE_PRIZE] = sText_HoldEffectDoublePrize, + [HOLD_EFFECT_REPEL] = sText_HoldEffectRepel, + [HOLD_EFFECT_SOUL_DEW] = sText_HoldEffectSoulDew, + [HOLD_EFFECT_DEEP_SEA_TOOTH] = sText_HoldEffectDeepSeaTooth, + [HOLD_EFFECT_DEEP_SEA_SCALE] = sText_HoldEffectDeepSeaScale, + [HOLD_EFFECT_CAN_ALWAYS_RUN] = sText_HoldEffectCanAlwaysRun, + [HOLD_EFFECT_PREVENT_EVOLVE] = sText_HoldEffectPreventEvolve, + [HOLD_EFFECT_FOCUS_BAND] = sText_HoldEffectFocusBand, + [HOLD_EFFECT_LUCKY_EGG] = sText_HoldEffectLuckyEgg, + [HOLD_EFFECT_SCOPE_LENS] = sText_HoldEffectScopeLens, + [HOLD_EFFECT_STEEL_POWER] = sText_HoldEffectSteelPower, + [HOLD_EFFECT_LEFTOVERS] = sText_HoldEffectLeftovers, + [HOLD_EFFECT_DRAGON_SCALE] = sText_HoldEffectDragonScale, + [HOLD_EFFECT_LIGHT_BALL] = sText_HoldEffectLightBall, + [HOLD_EFFECT_GROUND_POWER] = sText_HoldEffectGroundPower, + [HOLD_EFFECT_ROCK_POWER] = sText_HoldEffectRockPower, + [HOLD_EFFECT_GRASS_POWER] = sText_HoldEffectGrassPower, + [HOLD_EFFECT_DARK_POWER] = sText_HoldEffectDarkPower, + [HOLD_EFFECT_FIGHTING_POWER] = sText_HoldEffectFightingPower, + [HOLD_EFFECT_ELECTRIC_POWER] = sText_HoldEffectElectricPower, + [HOLD_EFFECT_WATER_POWER] = sText_HoldEffectWaterPower, + [HOLD_EFFECT_FLYING_POWER] = sText_HoldEffectFlyingPower, + [HOLD_EFFECT_POISON_POWER] = sText_HoldEffectPoisonPower, + [HOLD_EFFECT_ICE_POWER] = sText_HoldEffectIcePower, + [HOLD_EFFECT_GHOST_POWER] = sText_HoldEffectGhostPower, + [HOLD_EFFECT_PSYCHIC_POWER] = sText_HoldEffectPsychicPower, + [HOLD_EFFECT_FIRE_POWER] = sText_HoldEffectFirePower, + [HOLD_EFFECT_DRAGON_POWER] = sText_HoldEffectDragonPower, + [HOLD_EFFECT_NORMAL_POWER] = sText_HoldEffectNormalPower, + [HOLD_EFFECT_UPGRADE] = sText_HoldEffectUpgrade, + [HOLD_EFFECT_SHELL_BELL] = sText_HoldEffectShellBell, + [HOLD_EFFECT_LUCKY_PUNCH] = sText_HoldEffectLuckyPunch, + [HOLD_EFFECT_METAL_POWDER] = sText_HoldEffectMetalPowder, + [HOLD_EFFECT_THICK_CLUB] = sText_HoldEffectThickClub, + [HOLD_EFFECT_LEEK] = sText_HoldEffectLeek, + [HOLD_EFFECT_CHOICE_SCARF] = sText_HoldEffectChoiceScarf, + [HOLD_EFFECT_CHOICE_SPECS] = sText_HoldEffectChoiceSpecs, + [HOLD_EFFECT_DAMP_ROCK] = sText_HoldEffectDampRock, + [HOLD_EFFECT_GRIP_CLAW] = sText_HoldEffectGripClaw, + [HOLD_EFFECT_HEAT_ROCK] = sText_HoldEffectHeatRock, + [HOLD_EFFECT_ICY_ROCK] = sText_HoldEffectIcyRock, + [HOLD_EFFECT_LIGHT_CLAY] = sText_HoldEffectLightClay, + [HOLD_EFFECT_SMOOTH_ROCK] = sText_HoldEffectSmoothRock, + [HOLD_EFFECT_POWER_HERB] = sText_HoldEffectPowerHerb, + [HOLD_EFFECT_BIG_ROOT] = sText_HoldEffectBigRoot, + [HOLD_EFFECT_EXPERT_BELT] = sText_HoldEffectExpertBelt, + [HOLD_EFFECT_LIFE_ORB] = sText_HoldEffectLifeOrb, + [HOLD_EFFECT_METRONOME] = sText_HoldEffectMetronome, + [HOLD_EFFECT_MUSCLE_BAND] = sText_HoldEffectMuscleBand, + [HOLD_EFFECT_WIDE_LENS] = sText_HoldEffectWideLens, + [HOLD_EFFECT_WISE_GLASSES] = sText_HoldEffectWiseGlasses, + [HOLD_EFFECT_ZOOM_LENS] = sText_HoldEffectZoomLens, + [HOLD_EFFECT_LAGGING_TAIL] = sText_HoldEffectLaggingTail, + [HOLD_EFFECT_FOCUS_SASH] = sText_HoldEffectFocusSash, + [HOLD_EFFECT_FLAME_ORB] = sText_HoldEffectFlameOrb, + [HOLD_EFFECT_TOXIC_ORB] = sText_HoldEffectToxicOrb, + [HOLD_EFFECT_STICKY_BARB] = sText_HoldEffectStickyBarb, + [HOLD_EFFECT_IRON_BALL] = sText_HoldEffectIronBall, + [HOLD_EFFECT_BLACK_SLUDGE] = sText_HoldEffectBlackSludge, + [HOLD_EFFECT_DESTINY_KNOT] = sText_HoldEffectDestinyKnot, + [HOLD_EFFECT_SHED_SHELL] = sText_HoldEffectShedShell, + [HOLD_EFFECT_QUICK_POWDER] = sText_HoldEffectQuickPowder, + [HOLD_EFFECT_ADAMANT_ORB] = sText_HoldEffectAdamantOrb, + [HOLD_EFFECT_LUSTROUS_ORB] = sText_HoldEffectLustrousOrb, + [HOLD_EFFECT_GRISEOUS_ORB] = sText_HoldEffectGriseousOrb, + [HOLD_EFFECT_ENIGMA_BERRY] = sText_HoldEffectEnigmaBerry, + [HOLD_EFFECT_RESIST_BERRY] = sText_HoldEffectResistBerry, + [HOLD_EFFECT_POWER_ITEM] = sText_HoldEffectPowerItem, + [HOLD_EFFECT_RESTORE_PCT_HP] = sText_HoldEffectRestorePctHp, + [HOLD_EFFECT_MICLE_BERRY] = sText_HoldEffectMicleBerry, + [HOLD_EFFECT_CUSTAP_BERRY] = sText_HoldEffectCustapBerry, + [HOLD_EFFECT_JABOCA_BERRY] = sText_HoldEffectJabocaBerry, + [HOLD_EFFECT_ROWAP_BERRY] = sText_HoldEffectRowapBerry, + [HOLD_EFFECT_KEE_BERRY] = sText_HoldEffectKeeBerry, + [HOLD_EFFECT_MARANGA_BERRY] = sText_HoldEffectMarangaBerry, + [HOLD_EFFECT_PLATE] = sText_HoldEffectPlate, + [HOLD_EFFECT_FLOAT_STONE] = sText_HoldEffectFloatStone, + [HOLD_EFFECT_EVIOLITE] = sText_HoldEffectEviolite, + [HOLD_EFFECT_ASSAULT_VEST] = sText_HoldEffectAssaultVest, + [HOLD_EFFECT_DRIVE] = sText_HoldEffectDrive, + [HOLD_EFFECT_GEMS] = sText_HoldEffectGems, + [HOLD_EFFECT_ROCKY_HELMET] = sText_HoldEffectRockyHelmet, + [HOLD_EFFECT_AIR_BALLOON] = sText_HoldEffectAirBalloon, + [HOLD_EFFECT_RED_CARD] = sText_HoldEffectRedCard, + [HOLD_EFFECT_RING_TARGET] = sText_HoldEffectRingTarget, + [HOLD_EFFECT_BINDING_BAND] = sText_HoldEffectBindingBand, + [HOLD_EFFECT_EJECT_BUTTON] = sText_HoldEffectEjectButton, + [HOLD_EFFECT_ABSORB_BULB] = sText_HoldEffectAbsorbBulb, + [HOLD_EFFECT_CELL_BATTERY] = sText_HoldEffectCellBattery, + [HOLD_EFFECT_FAIRY_POWER] = sText_HoldEffectFairyPower, + [HOLD_EFFECT_MEGA_STONE] = sText_HoldEffectMegaStone, + [HOLD_EFFECT_SAFETY_GOGGLES] = sText_HoldEffectSafetyGoggles, + [HOLD_EFFECT_LUMINOUS_MOSS] = sText_HoldEffectLuminousMoss, + [HOLD_EFFECT_SNOWBALL] = sText_HoldEffectSnowball, + [HOLD_EFFECT_WEAKNESS_POLICY] = sText_HoldEffectWeaknessPolicy, + [HOLD_EFFECT_PRIMAL_ORB] = sText_HoldEffectPrimalOrb, + [HOLD_EFFECT_PROTECTIVE_PADS] = sText_HoldEffectProtectivePads, + [HOLD_EFFECT_TERRAIN_EXTENDER] = sText_HoldEffectTerrainExtender, + [HOLD_EFFECT_SEEDS] = sText_HoldEffectSeeds, + [HOLD_EFFECT_ADRENALINE_ORB] = sText_HoldEffectAdrenalineOrb, + [HOLD_EFFECT_MEMORY] = sText_HoldEffectMemory, + [HOLD_EFFECT_Z_CRYSTAL] = sText_HoldEffectZCrystal, + [HOLD_EFFECT_UTILITY_UMBRELLA] = sText_HoldEffectUtilityUmbrella, + [HOLD_EFFECT_EJECT_PACK] = sText_HoldEffectEjectPack, + [HOLD_EFFECT_ROOM_SERVICE] = sText_HoldEffectRoomService, + [HOLD_EFFECT_BLUNDER_POLICY] = sText_HoldEffectBlunderPolicy, + [HOLD_EFFECT_HEAVY_DUTY_BOOTS] = sText_HoldEffectHeavyDutyBoots, + [HOLD_EFFECT_THROAT_SPRAY] = sText_HoldEffectThroatSpray, +}; +static const u8 *GetHoldEffectName(u16 holdEffect) +{ + if (holdEffect > ARRAY_COUNT(sHoldEffectNames)) + return sHoldEffectNames[0]; + return sHoldEffectNames[holdEffect]; +} diff --git a/src/battle_dome.c b/src/battle_dome.c index 0638bf07aa..84b7652a54 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -34,7 +34,6 @@ #include "constants/battle_dome.h" #include "constants/frontier_util.h" #include "constants/moves.h" -#include "constants/pokemon.h" #include "constants/trainers.h" #include "constants/abilities.h" #include "constants/songs.h" @@ -74,40 +73,43 @@ struct TourneyTreeLineSection #define tMode data[2] #define tPrevTaskId data[3] -// This file's functions. -static u8 GetDomeTrainerMonIvs(u16 trainerId); -static void SwapDomeTrainers(int id1, int id2, u16 *statsArray); -static void CalcDomeMonStats(u16 species, int level, int ivs, u8 evBits, u8 nature, int *stats); -static void CreateDomeOpponentMons(u16 tournamentTrainerId); -static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 arg1); -static int SelectOpponentMonsUsingOtId(u16 tournamentTrainerId, bool8 arg1); -static int GetTypeEffectivenessPoints(int move, int species, int arg2); -static int SelectOpponentMonsFromParty(int *arr, bool8 arg1); -static void Task_ShowTourneyInfoCard(u8 taskId); -static void Task_HandleInfoCardInput(u8 taskId); -static u8 Task_GetInfoCardInput(u8 taskId); +#define EFFECTIVENESS_MODE_GOOD 0 +#define EFFECTIVENESS_MODE_BAD 1 +#define EFFECTIVENESS_MODE_AI_VS_AI 2 + +static u8 GetDomeTrainerMonIvs(u16); +static void SwapDomeTrainers(int, int, u16 *); +static void CalcDomeMonStats(u16, int, int, u8, u8, int *); +static void CreateDomeOpponentMons(u16); +static int SelectOpponentMons_Good(u16, bool8); +static int SelectOpponentMons_Bad(u16, bool8); +static int GetTypeEffectivenessPoints(int, int, int); +static int SelectOpponentMonsFromParty(int *, bool8); +static void Task_ShowTourneyInfoCard(u8); +static void Task_HandleInfoCardInput(u8); +static u8 Task_GetInfoCardInput(u8); static void SetFacilityTrainerAndMonPtrs(void); -static int TrainerIdToTournamentId(u16 trainerId); +static int TrainerIdToTournamentId(u16); static u16 TrainerIdOfPlayerOpponent(void); -static void Task_ShowTourneyTree(u8 taskId); -static void Task_HandleStaticTourneyTreeInput(u8 taskId); +static void Task_ShowTourneyTree(u8); +static void Task_HandleStaticTourneyTreeInput(u8); static void CB2_TourneyTree(void); static void VblankCb_TourneyInfoCard(void); -static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo); -static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId); -static int BufferDomeWinString(u8, u8*); +static void DisplayMatchInfoOnCard(u8, u8); +static void DisplayTrainerInfoOnCard(u8, u8); +static int BufferDomeWinString(u8, u8 *); static u8 GetDomeBrainTrainerPicId(void); static u8 GetDomeBrainTrainerClass(void); -static void CopyDomeBrainTrainerName(u8 *str); -static void CopyDomeTrainerName(u8 *str, u16 trainerId); +static void CopyDomeBrainTrainerName(u8 *); +static void CopyDomeTrainerName(u8 *, u16); static void HblankCb_TourneyTree(void); static void VblankCb_TourneyTree(void); -static u8 UpdateTourneyTreeCursor(u8 taskId); -static void DecideRoundWinners(u8 roundId); -static u8 sub_81953E8(u8 tournamentId, u8); +static u8 UpdateTourneyTreeCursor(u8); +static void DecideRoundWinners(u8); +static u8 GetOpposingNPCTournamentIdByRound(u8, u8); static void DrawTourneyAdvancementLine(u8, u8); -static void SpriteCb_HorizontalScrollArrow(struct Sprite *sprite); -static void SpriteCb_VerticalScrollArrow(struct Sprite *sprite); +static void SpriteCB_HorizontalScrollArrow(struct Sprite *); +static void SpriteCB_VerticalScrollArrow(struct Sprite *); static void InitDomeChallenge(void); static void GetDomeData(void); static void SetDomeData(void); @@ -131,7 +133,6 @@ static void BufferLastDomeWinnerName(void); static void InitRandomTourneyTreeResults(void); static void InitDomeTrainers(void); -// EWRAM variables. EWRAM_DATA u32 gPlayerPartyLostHP = 0; // never read static EWRAM_DATA u32 sPlayerPartyMaxHP = 0; // never read static EWRAM_DATA struct TourneyTreeInfoCard *sInfoCard = {0}; @@ -870,7 +871,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = static const struct ScanlineEffectParams sTourneyTreeScanlineEffectParams = { - .dmaDest = (void *)REG_ADDR_BG3CNT, + .dmaDest = ®_BG3CNT, .dmaControl = SCANLINE_EFFECT_DMACNT_16BIT, .initState = 1, }; @@ -893,7 +894,7 @@ static const struct OamData sOamData_TourneyTreePokeball = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -911,7 +912,7 @@ static const struct OamData sOamData_TourneyTreeCloseButton = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), .x = 0, @@ -928,7 +929,7 @@ static const struct OamData sOamData_VerticalScrollArrow = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), .x = 0, @@ -945,7 +946,7 @@ static const struct OamData sOamData_HorizontalScrollArrow = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x16), .x = 0, @@ -978,7 +979,7 @@ static const union AnimCmd * const sSpriteAnimTable_TourneyTreePokeball[] = static const struct SpriteTemplate sTourneyTreePokeballSpriteTemplate = { .tileTag = 0x0000, - .paletteTag = 0xffff, + .paletteTag = TAG_NONE, .oam = &sOamData_TourneyTreePokeball, .anims = sSpriteAnimTable_TourneyTreePokeball, .images = NULL, @@ -1007,7 +1008,7 @@ static const union AnimCmd * const sSpriteAnimTable_TourneyTreeCancelButton[] = static const struct SpriteTemplate sCancelButtonSpriteTemplate = { .tileTag = 0x0000, - .paletteTag = 0xffff, + .paletteTag = TAG_NONE, .oam = &sOamData_TourneyTreeCloseButton, .anims = sSpriteAnimTable_TourneyTreeCancelButton, .images = NULL, @@ -1036,7 +1037,7 @@ static const union AnimCmd * const sSpriteAnimTable_TourneyTreeExitButton[] = static const struct SpriteTemplate sExitButtonSpriteTemplate = { .tileTag = 0x0000, - .paletteTag = 0xffff, + .paletteTag = TAG_NONE, .oam = &sOamData_TourneyTreeCloseButton, .anims = sSpriteAnimTable_TourneyTreeExitButton, .images = NULL, @@ -1083,23 +1084,23 @@ static const union AnimCmd * const sSpriteAnimTable_HorizontalScrollArrow[] = static const struct SpriteTemplate sHorizontalScrollArrowSpriteTemplate = { .tileTag = 0x0000, - .paletteTag = 0xffff, + .paletteTag = TAG_NONE, .oam = &sOamData_HorizontalScrollArrow, .anims = sSpriteAnimTable_HorizontalScrollArrow, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_HorizontalScrollArrow + .callback = SpriteCB_HorizontalScrollArrow }; static const struct SpriteTemplate sVerticalScrollArrowSpriteTemplate = { .tileTag = 0x0000, - .paletteTag = 0xffff, + .paletteTag = TAG_NONE, .oam = &sOamData_VerticalScrollArrow, .anims = sSpriteAnimTable_VerticalScrollArrow, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_VerticalScrollArrow + .callback = SpriteCB_VerticalScrollArrow }; // Organized by seed starting position, i.e. seed 0 battles seed 8 first @@ -1197,7 +1198,7 @@ static const u8 sLastMatchCardNum[DOME_ROUNDS_COUNT] = [DOME_FINAL] = 30 }; -static const u8 gUnknown_0860D1A0[DOME_TOURNAMENT_TRAINERS_COUNT / 2][DOME_ROUNDS_COUNT] = +static const u8 sTrainerAndRoundToLastMatchCardNum[DOME_TOURNAMENT_TRAINERS_COUNT / 2][DOME_ROUNDS_COUNT] = { {16, 24, 28, 30}, {17, 24, 28, 30}, @@ -1209,7 +1210,7 @@ static const u8 gUnknown_0860D1A0[DOME_TOURNAMENT_TRAINERS_COUNT / 2][DOME_ROUND {23, 27, 29, 30}, }; -static const u8 gUnknown_0860D1C0[DOME_TOURNAMENT_TRAINERS_COUNT] = {0, 15, 8, 7, 3, 12, 11, 4, 1, 14, 9, 6, 2, 13, 10, 5}; +static const u8 sTournamentIdToPairedTrainerIds[DOME_TOURNAMENT_TRAINERS_COUNT] = {0, 15, 8, 7, 3, 12, 11, 4, 1, 14, 9, 6, 2, 13, 10, 5}; // The first line of text on a trainers info card. It describes their potential to win, based on their seed in the tournament tree. // Dome Ace Tucker has their own separate potential text. @@ -2081,7 +2082,6 @@ static const u8 sTourneyTreeLineSectionArrayCounts[DOME_TOURNAMENT_TRAINERS_COUN {ARRAY_COUNT(sLineSectionTrainer16Round1), ARRAY_COUNT(sLineSectionTrainer16Round2), ARRAY_COUNT(sLineSectionTrainer16Semifinal), ARRAY_COUNT(sLineSectionTrainer16Final)}, }; -// code void CallBattleDomeFunction(void) { sBattleDomeFunctions[gSpecialVar_0x8004](); @@ -2099,7 +2099,7 @@ static void InitDomeChallenge(void) if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode])) gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0; - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); gTrainerBattleOpponent_A = 0; } @@ -2593,28 +2593,33 @@ static void CreateDomeOpponentMons(u16 tournamentTrainerId) } } +// Returns a bitmask representing which 2 of the trainer's 3 pokemon to select. +// The choice is calculated solely depending on the type effectiveness of their +// movesets against the player's pokemon. +// There is a 50% chance of either a "good" or "bad" selection mode being used. +// In the good mode movesets are preferred which are more effective against the +// player, and in the bad mode the opposite is true. If all 3 pokemon tie, the +// other mode will be tried. If they tie again, the pokemon selection is random. int GetDomeTrainerSelectedMons(u16 tournamentTrainerId) { int selectedMonBits; if (Random() & 1) { - selectedMonBits = SelectOpponentMonsUsingPersonality(tournamentTrainerId, FALSE); + selectedMonBits = SelectOpponentMons_Good(tournamentTrainerId, FALSE); if (selectedMonBits == 0) - selectedMonBits = SelectOpponentMonsUsingOtId(tournamentTrainerId, TRUE); + selectedMonBits = SelectOpponentMons_Bad(tournamentTrainerId, TRUE); } else { - selectedMonBits = SelectOpponentMonsUsingOtId(tournamentTrainerId, FALSE); + selectedMonBits = SelectOpponentMons_Bad(tournamentTrainerId, FALSE); if (selectedMonBits == 0) - selectedMonBits = SelectOpponentMonsUsingPersonality(tournamentTrainerId, TRUE); + selectedMonBits = SelectOpponentMons_Good(tournamentTrainerId, TRUE); } return selectedMonBits; } -// Could probably use a better name once GetTypeEffectivenessPoints is clarified -// Personality seems to be used to select a different weighting system for type effectiveness points -static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 allowRandom) +static int SelectOpponentMons_Good(u16 tournamentTrainerId, bool8 allowRandom) { int i, moveId, playerMonId; int partyMovePoints[FRONTIER_PARTY_SIZE]; @@ -2629,12 +2634,12 @@ static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 all if (DOME_TRAINERS[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) { partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId), - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_PERSONALITY); + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_GOOD); } else { partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveId], - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_PERSONALITY); + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_GOOD); } } } @@ -2642,8 +2647,8 @@ static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 all return SelectOpponentMonsFromParty(partyMovePoints, allowRandom); } -// See above function, identical but uses MON_DATA_OT_ID -static int SelectOpponentMonsUsingOtId(u16 tournamentTrainerId, bool8 allowRandom) +// Identical to function above, but uses EFFECTIVENESS_MODE_BAD +static int SelectOpponentMons_Bad(u16 tournamentTrainerId, bool8 allowRandom) { int i, moveId, playerMonId; int partyMovePoints[FRONTIER_PARTY_SIZE]; @@ -2658,12 +2663,12 @@ static int SelectOpponentMonsUsingOtId(u16 tournamentTrainerId, bool8 allowRando if (DOME_TRAINERS[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) { partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId), - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_OT_ID); + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_BAD); } else { partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveId], - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_OT_ID); + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_BAD); } } } @@ -2736,13 +2741,13 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom) #define TYPE_x2 40 #define TYPE_x4 80 -static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) +static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode) { int defType1, defType2, defAbility, moveType; int i = 0; int typePower = TYPE_x1; - if (move == MOVE_NONE || move == 0xFFFF || gBattleMoves[move].power == 0) + if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || IS_MOVE_STATUS(move)) return 0; defType1 = gBaseStats[targetSpecies].type1; @@ -2752,49 +2757,38 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) if (defAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND) { - if (arg2 == 1) + // They likely meant to return here, as 8 is the number of points normally used in this mode for moves with no effect. + // Because there's no return the value instead gets interpreted by the switch, and the number of points becomes 0. + if (mode == EFFECTIVENESS_MODE_BAD) + { typePower = 8; + #ifdef BUGFIX + return typePower; + #endif + } } else { - while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) - { - if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) - { - i += 3; - continue; - } - if (TYPE_EFFECT_ATK_TYPE(i) == moveType) - { - // BUG: the value of TYPE_x2 does not exist in gTypeEffectiveness, so if defAbility is ABILITY_WONDER_GUARD, the conditional always fails - #ifndef BUGFIX - if (TYPE_EFFECT_DEF_TYPE(i) == defType1) - if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) - typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; - if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) - if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) - typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; - #else - if (TYPE_EFFECT_DEF_TYPE(i) == defType1) - if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) || defAbility != ABILITY_WONDER_GUARD) - typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; - if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) - if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) || defAbility != ABILITY_WONDER_GUARD) - typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; - #endif - } - i += 3; - } + u32 typeEffectiveness1 = UQ_4_12_TO_INT(GetTypeModifier(moveType, defType1) * 2) * 5; + u32 typeEffectiveness2 = UQ_4_12_TO_INT(GetTypeModifier(moveType, defType2) * 2) * 5; + + typePower = (typeEffectiveness1 * typePower) / 10; + if (defType2 != defType1) + typePower = (typeEffectiveness2 * typePower) / 10; + + if (defAbility == ABILITY_WONDER_GUARD && typeEffectiveness1 != TYPE_x1 && typeEffectiveness2 != TYPE_x1) + typePower = 0; } - switch (arg2) + switch (mode) { - case 0: + case EFFECTIVENESS_MODE_GOOD: + // Weights moves that more effective. switch (typePower) { - case TYPE_x0_50: - case TYPE_x0_25: case TYPE_x0: + case TYPE_x0_25: + case TYPE_x0_50: default: typePower = 0; break; @@ -2809,22 +2803,24 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) break; } break; - case 1: + case EFFECTIVENESS_MODE_BAD: + // Weights moves that are less effective. + // Odd that there's no limit on this being used, even the Frontier Brain could end up using this. switch (typePower) { - default: - case TYPE_x1: - typePower = 0; + case TYPE_x0: + typePower = 8; break; case TYPE_x0_25: typePower = 4; break; - case TYPE_x0: - typePower = 8; - break; case TYPE_x0_50: typePower = 2; break; + default: + case TYPE_x1: + typePower = 0; + break; case TYPE_x2: typePower = -2; break; @@ -2833,7 +2829,9 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) break; } break; - case 2: + case EFFECTIVENESS_MODE_AI_VS_AI: + // Used as part of calculating the winner in a battle between two AIs. + // Weights moves that are more effective much more strongly in both directions. switch (typePower) { case TYPE_x0: @@ -3100,7 +3098,7 @@ static void Task_ShowTourneyInfoCard(u8 taskId) // Note: Card scrolling up means the current card goes down and another one appears from top. // The same is true for scrolling left. // That means that the sprite needs to move with the moving card in the opposite scrolling direction. -static void SpriteCb_TrainerIconCardScrollUp(struct Sprite *sprite) +static void SpriteCB_TrainerIconCardScrollUp(struct Sprite *sprite) { sprite->y += 4; if (sprite->data[0] != 0) @@ -3120,7 +3118,7 @@ static void SpriteCb_TrainerIconCardScrollUp(struct Sprite *sprite) } } -static void SpriteCb_TrainerIconCardScrollDown(struct Sprite *sprite) +static void SpriteCB_TrainerIconCardScrollDown(struct Sprite *sprite) { sprite->y -= 4; if (sprite->data[0] != 0) @@ -3140,7 +3138,7 @@ static void SpriteCb_TrainerIconCardScrollDown(struct Sprite *sprite) } } -static void SpriteCb_TrainerIconCardScrollLeft(struct Sprite *sprite) +static void SpriteCB_TrainerIconCardScrollLeft(struct Sprite *sprite) { sprite->x += 4; if (sprite->data[0] != 0) @@ -3160,7 +3158,7 @@ static void SpriteCb_TrainerIconCardScrollLeft(struct Sprite *sprite) } } -static void SpriteCb_TrainerIconCardScrollRight(struct Sprite *sprite) +static void SpriteCB_TrainerIconCardScrollRight(struct Sprite *sprite) { sprite->x -= 4; if (sprite->data[0] != 0) @@ -3182,13 +3180,13 @@ static void SpriteCb_TrainerIconCardScrollRight(struct Sprite *sprite) #define sMonIconStill data[3] -static void SpriteCb_MonIcon(struct Sprite *sprite) +static void SpriteCB_MonIconDomeInfo(struct Sprite *sprite) { if (!sprite->sMonIconStill) UpdateMonIconFrame(sprite); } -static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite) +static void SpriteCB_MonIconCardScrollUp(struct Sprite *sprite) { if (!sprite->sMonIconStill) UpdateMonIconFrame(sprite); @@ -3198,7 +3196,7 @@ static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite) if (sprite->y >= -16) sprite->invisible = FALSE; if (++sprite->data[1] == 40) - sprite->callback = SpriteCb_MonIcon; + sprite->callback = SpriteCB_MonIconDomeInfo; } else { @@ -3210,7 +3208,7 @@ static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite) } } -static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite) +static void SpriteCB_MonIconCardScrollDown(struct Sprite *sprite) { if (!sprite->sMonIconStill) UpdateMonIconFrame(sprite); @@ -3220,7 +3218,7 @@ static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite) if (sprite->y <= 176) sprite->invisible = FALSE; if (++sprite->data[1] == 40) - sprite->callback = SpriteCb_MonIcon; + sprite->callback = SpriteCB_MonIconDomeInfo; } else { @@ -3232,7 +3230,7 @@ static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite) } } -static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite) +static void SpriteCB_MonIconCardScrollLeft(struct Sprite *sprite) { if (!sprite->sMonIconStill) UpdateMonIconFrame(sprite); @@ -3242,7 +3240,7 @@ static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite) if (sprite->x >= -16) sprite->invisible = FALSE; if (++sprite->data[1] == 64) - sprite->callback = SpriteCb_MonIcon; + sprite->callback = SpriteCB_MonIconDomeInfo; } else { @@ -3254,7 +3252,7 @@ static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite) } } -static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite) +static void SpriteCB_MonIconCardScrollRight(struct Sprite *sprite) { if (!sprite->sMonIconStill) UpdateMonIconFrame(sprite); @@ -3264,7 +3262,7 @@ static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite) if (sprite->x <= DISPLAY_WIDTH + 16) sprite->invisible = FALSE; if (++sprite->data[1] == 64) - sprite->callback = SpriteCb_MonIcon; + sprite->callback = SpriteCB_MonIconDomeInfo; } else { @@ -3276,7 +3274,7 @@ static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite) } } -static void SpriteCb_HorizontalScrollArrow(struct Sprite *sprite) +static void SpriteCB_HorizontalScrollArrow(struct Sprite *sprite) { int taskId1 = sprite->data[0]; int arrId = gTasks[gTasks[taskId1].data[4]].data[1]; @@ -3345,7 +3343,7 @@ static void SpriteCb_HorizontalScrollArrow(struct Sprite *sprite) } } -static void SpriteCb_VerticalScrollArrow(struct Sprite *sprite) +static void SpriteCB_VerticalScrollArrow(struct Sprite *sprite) { int taskId1 = sprite->data[0]; @@ -3428,7 +3426,7 @@ static void Task_HandleInfoCardInput(u8 taskId) for (i = windowId; i < windowId + 9; i++) { - CopyWindowToVram(i, 2); + CopyWindowToVram(i, COPYWIN_GFX); FillWindowPixelBuffer(i, PIXEL_FILL(0)); } gTasks[taskId].tState = STATE_REACT_INPUT; @@ -3511,7 +3509,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollUp; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollUp; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3522,7 +3520,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollUp; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollUp; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3535,7 +3533,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollUp; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollUp; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3546,7 +3544,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollUp; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollUp; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3627,7 +3625,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollDown; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollDown; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3638,7 +3636,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollDown; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollDown; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3651,7 +3649,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollDown; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollDown; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3662,7 +3660,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollDown; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollDown; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3710,7 +3708,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollLeft; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3721,7 +3719,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollLeft; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3734,7 +3732,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollLeft; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3745,7 +3743,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollLeft; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3793,7 +3791,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollLeft; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3804,7 +3802,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollLeft; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3817,7 +3815,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollLeft; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3828,7 +3826,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollLeft; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3874,7 +3872,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollRight; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3885,7 +3883,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollRight; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3898,7 +3896,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollRight; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3909,7 +3907,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollRight; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3957,7 +3955,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollRight; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3968,7 +3966,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollRight; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3981,7 +3979,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollRight; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -3992,7 +3990,7 @@ static void Task_HandleInfoCardInput(u8 taskId) { if (sInfoCard->spriteIds[i] != SPRITE_NONE) { - gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight; + gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollRight; gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot; gSprites[sInfoCard->spriteIds[i]].data[1] = 0; gSprites[sInfoCard->spriteIds[i]].data[2] = i; @@ -4178,7 +4176,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) if (input == INFOCARD_INPUT_AB) { if (sInfoCard->pos != 0) - gTasks[taskId2].data[1] = gUnknown_0860D1A0[position / 2][sInfoCard->pos - 1]; + gTasks[taskId2].data[1] = sTrainerAndRoundToLastMatchCardNum[position / 2][sInfoCard->pos - 1]; else gTasks[taskId2].data[1] = position; } @@ -4218,9 +4216,9 @@ static u8 Task_GetInfoCardInput(u8 taskId) if (input == INFOCARD_INPUT_AB) { if (sInfoCard->pos == 0) // On left trainer info card - gTasks[taskId2].data[1] = gUnknown_0860D1C0[sInfoCard->tournamentIds[0]]; + gTasks[taskId2].data[1] = sTournamentIdToPairedTrainerIds[sInfoCard->tournamentIds[0]]; else if (sInfoCard->pos == 2) // On right trainer info card - gTasks[taskId2].data[1] = gUnknown_0860D1C0[sInfoCard->tournamentIds[1]]; + gTasks[taskId2].data[1] = sTournamentIdToPairedTrainerIds[sInfoCard->tournamentIds[1]]; else // On match info card gTasks[taskId2].data[1] = position; } @@ -4267,11 +4265,11 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) // Create trainer pic sprite if (trainerId == TRAINER_PLAYER) - sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 64, palSlot + 12, TAG_NONE); else if (trainerId == TRAINER_FRONTIER_BRAIN) - sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 64, palSlot + 12, TAG_NONE); else - sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerId), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerId), TRUE, x + 48, y + 64, palSlot + 12, TAG_NONE); if (flags & MOVE_CARD) gSprites[sInfoCard->spriteIds[arrId]].invisible = TRUE; @@ -4282,7 +4280,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) if (trainerId == TRAINER_PLAYER) { sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[trainerTourneyId][i], - SpriteCb_MonIcon, + SpriteCB_MonIconDomeInfo, x | sInfoTrainerMonX[i], y + sInfoTrainerMonY[i], 0, 0); @@ -4291,7 +4289,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) else if (trainerId == TRAINER_FRONTIER_BRAIN) { sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[trainerTourneyId][i], - SpriteCb_MonIcon, + SpriteCB_MonIconDomeInfo, x | sInfoTrainerMonX[i], y + sInfoTrainerMonY[i], 0, 0); @@ -4300,7 +4298,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) else { sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].species, - SpriteCb_MonIcon, + SpriteCB_MonIconDomeInfo, x | sInfoTrainerMonX[i], y + sInfoTrainerMonY[i], 0, 0); @@ -4312,7 +4310,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) } // Initialize the text printer - textPrinter.fontId = 2; + textPrinter.fontId = FONT_SHORT; textPrinter.x = 0; textPrinter.y = 0; textPrinter.currentX = textPrinter.x; @@ -4358,7 +4356,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) textPrinter.currentChar = gStringVar1; textPrinter.windowId = windowId; PutWindowTilemap(windowId); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); textPrinter.letterSpacing = 0; @@ -4380,12 +4378,12 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) textPrinter.currentX = 0; PutWindowTilemap(1 + i + windowId); - CopyWindowToVram(1 + i + windowId, 3); + CopyWindowToVram(1 + i + windowId, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); } PutWindowTilemap(windowId + 4); - CopyWindowToVram(windowId + 4, 3); + CopyWindowToVram(windowId + 4, COPYWIN_FULL); // Print text about trainers potential in the tourney if (trainerId == TRAINER_FRONTIER_BRAIN) @@ -4393,7 +4391,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) else textPrinter.currentChar = sBattleDomePotentialTexts[trainerTourneyId]; - textPrinter.fontId = 1; + textPrinter.fontId = FONT_NORMAL; textPrinter.windowId = windowId + 4; textPrinter.currentX = 0; textPrinter.y = 4; @@ -4548,7 +4546,6 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) // If 2 good stats have been found already, choose which to use if (i == 2) { - if (allocatedArray[6] < allocatedArray[k]) { if (allocatedArray[7] < allocatedArray[k]) @@ -4741,11 +4738,11 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) // Draw left trainer sprite. if (trainerIds[0] == TRAINER_PLAYER) - sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); + sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 88, palSlot + 12, TAG_NONE); else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) - sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); + sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 88, palSlot + 12, TAG_NONE); else - sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[0]), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); + sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[0]), TRUE, x + 48, y + 88, palSlot + 12, TAG_NONE); if (flags & MOVE_CARD) gSprites[sInfoCard->spriteIds[arrId]].invisible = TRUE; @@ -4754,11 +4751,11 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) // Draw right trainer sprite. if (trainerIds[1] == TRAINER_PLAYER) - sInfoCard->spriteIds[1 + arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); + sInfoCard->spriteIds[1 + arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 192, y + 88, palSlot + 13, TAG_NONE); else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) - sInfoCard->spriteIds[1 + arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); + sInfoCard->spriteIds[1 + arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 192, y + 88, palSlot + 13, TAG_NONE); else - sInfoCard->spriteIds[1 + arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[1]), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); + sInfoCard->spriteIds[1 + arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[1]), TRUE, x + 192, y + 88, palSlot + 13, TAG_NONE); if (flags & MOVE_CARD) gSprites[sInfoCard->spriteIds[1 + arrId]].invisible = TRUE; @@ -4771,7 +4768,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) if (trainerIds[0] == TRAINER_PLAYER) { sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[0]][i], - SpriteCb_MonIcon, + SpriteCB_MonIconDomeInfo, x | sLeftTrainerMonX[i], y + sLeftTrainerMonY[i], 0, 0); @@ -4780,7 +4777,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) { sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[0]][i], - SpriteCb_MonIcon, + SpriteCB_MonIconDomeInfo, x | sLeftTrainerMonX[i], y + sLeftTrainerMonY[i], 0, 0); @@ -4789,7 +4786,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) else { sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[DOME_MONS[tournamentIds[0]][i]].species, - SpriteCb_MonIcon, + SpriteCB_MonIconDomeInfo, x | sLeftTrainerMonX[i], y + sLeftTrainerMonY[i], 0, 0); @@ -4811,7 +4808,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) if (trainerIds[1] == TRAINER_PLAYER) { sInfoCard->spriteIds[5 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[1]][i], - SpriteCb_MonIcon, + SpriteCB_MonIconDomeInfo, x | sRightTrainerMonX[i], y + sRightTrainerMonY[i], 0, 0); @@ -4820,7 +4817,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) { sInfoCard->spriteIds[5 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[1]][i], - SpriteCb_MonIcon, + SpriteCB_MonIconDomeInfo, x | sRightTrainerMonX[i], y + sRightTrainerMonY[i], 0, 0); @@ -4829,7 +4826,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) else { sInfoCard->spriteIds[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[DOME_MONS[tournamentIds[1]][i]].species, - SpriteCb_MonIcon, + SpriteCB_MonIconDomeInfo, x | sRightTrainerMonX[i], y + sRightTrainerMonY[i], 0, 0); @@ -4859,9 +4856,9 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) StringExpandPlaceholders(gStringVar4, sBattleDomeWinTexts[winStringId]); textPrinter.currentChar = gStringVar4; textPrinter.windowId = windowId + 8; - textPrinter.fontId = 1; + textPrinter.fontId = FONT_NORMAL; PutWindowTilemap(windowId + 8); - CopyWindowToVram(windowId + 8, 3); + CopyWindowToVram(windowId + 8, COPYWIN_FULL); textPrinter.currentX = 0; textPrinter.currentY = textPrinter.y = 0; AddTextPrinter(&textPrinter, 0, NULL); @@ -4874,14 +4871,14 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) else CopyDomeTrainerName(gStringVar1, trainerIds[0]); - textPrinter.fontId = 2; + textPrinter.fontId = FONT_SHORT; textPrinter.letterSpacing = 2; textPrinter.currentChar = gStringVar1; textPrinter.windowId = windowId + 6; textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x40, textPrinter.letterSpacing); textPrinter.currentY = textPrinter.y = 2; PutWindowTilemap(windowId + 6); - CopyWindowToVram(windowId + 6, 3); + CopyWindowToVram(windowId + 6, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); // Print right trainer's name. @@ -4897,7 +4894,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x40, textPrinter.letterSpacing); textPrinter.currentY = textPrinter.y = 2; PutWindowTilemap(windowId + 7); - CopyWindowToVram(windowId + 7, 3); + CopyWindowToVram(windowId + 7, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); // Print match number. @@ -4907,7 +4904,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0xA0, textPrinter.letterSpacing); textPrinter.currentY = textPrinter.y = 2; PutWindowTilemap(windowId + 5); - CopyWindowToVram(windowId + 5, 3); + CopyWindowToVram(windowId + 5, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); } @@ -5179,28 +5176,28 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun for (k = 0; k < FRONTIER_PARTY_SIZE; k++) { - u32 var = 0; - u16 targetSpecies = SPECIES_NONE; - u16 targetAbility = ABILITY_NONE; + u32 personality = 0; + u32 targetSpecies = 0; + u32 targetAbility = 0; + u32 typeMultiplier = 0; do { - var = Random32(); - } while (gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].nature != GetNatureFromPersonality(var)); + personality = Random32(); + } while (gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].nature != GetNatureFromPersonality(personality)); targetSpecies = gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].species; - if (var & 1) + + if (personality & 1) targetAbility = gBaseStats[targetSpecies].abilities[1]; else targetAbility = gBaseStats[targetSpecies].abilities[0]; - var = AI_TypeCalc(moveIds[i * MAX_MON_MOVES + j], targetSpecies, targetAbility); - if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE && var & MOVE_RESULT_SUPER_EFFECTIVE) - moveScores[i * MAX_MON_MOVES + j] += movePower; - else if (var & MOVE_RESULT_NO_EFFECT) + typeMultiplier = CalcPartyMonTypeEffectivenessMultiplier(moveIds[i * 4 + j], targetSpecies, targetAbility); + if (typeMultiplier == UQ_4_12(0)) moveScores[i * MAX_MON_MOVES + j] += 0; - else if (var & MOVE_RESULT_SUPER_EFFECTIVE) + else if (typeMultiplier >= UQ_4_12(2)) moveScores[i * MAX_MON_MOVES + j] += movePower * 2; - else if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE) + else if (typeMultiplier <= UQ_4_12(0.5)) moveScores[i * MAX_MON_MOVES + j] += movePower / 2; else moveScores[i * MAX_MON_MOVES + j] += movePower; @@ -5224,7 +5221,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun { for (i = 0; i < roundId - 1; i++) { - if (gSaveBlock2Ptr->frontier.domeWinningMoves[sub_81953E8(winnerTournamentId, i)] == moveIds[j]) + if (gSaveBlock2Ptr->frontier.domeWinningMoves[GetOpposingNPCTournamentIdByRound(winnerTournamentId, i)] == moveIds[j]) break; } if (i != roundId - 1) @@ -5281,10 +5278,10 @@ static void Task_ShowTourneyTree(u8 taskId) gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0xB00, 0); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0xB00, BG_COORD_SET); gTasks[taskId].tState++; break; case 1: @@ -5305,10 +5302,10 @@ static void Task_ShowTourneyTree(u8 taskId) break; case 2: sTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); - LZDecompressWram(gDomeTourneyLineMask_Tilemap, sTilemapBuffer); + LZDecompressWram(gDomeTourneyTree_Tilemap, sTilemapBuffer); SetBgTilemapBuffer(1, sTilemapBuffer); CopyBgTilemapBufferToVram(1); - DecompressAndLoadBgGfxUsingHeap(1, gDomeTourneyBg_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(1, gDomeTourneyTree_Gfx, 0x2000, 0, 0); DecompressAndLoadBgGfxUsingHeap(2, gDomeTourneyLine_Gfx, 0x2000, 0, 0); DecompressAndLoadBgGfxUsingHeap(2, gDomeTourneyLineDown_Tilemap, 0x2000, 0, 1); DecompressAndLoadBgGfxUsingHeap(3, gDomeTourneyLineUp_Tilemap, 0x2000, 0, 1); @@ -5339,7 +5336,7 @@ static void Task_ShowTourneyTree(u8 taskId) gTasks[taskId].tState++; break; case 4: - textPrinter.fontId = 2; + textPrinter.fontId = FONT_SHORT; textPrinter.currentChar = gText_BattleTourney; textPrinter.windowId = 2; textPrinter.x = 0; @@ -5442,9 +5439,9 @@ static void Task_ShowTourneyTree(u8 taskId) PutWindowTilemap(0); PutWindowTilemap(1); PutWindowTilemap(2); - CopyWindowToVram(0, 3); - CopyWindowToVram(1, 3); - CopyWindowToVram(2, 3); + CopyWindowToVram(0, COPYWIN_FULL); + CopyWindowToVram(1, COPYWIN_FULL); + CopyWindowToVram(2, COPYWIN_FULL); SetHBlankCallback(HblankCb_TourneyTree); SetVBlankCallback(VblankCb_TourneyTree); if (r4 == 2) @@ -5524,7 +5521,7 @@ static void Task_HandleStaticTourneyTreeInput(u8 taskId) { gTasks[taskId].tState = STATE_DELAY; gTasks[taskId].data[3] = 64; - textPrinter.fontId = 2; + textPrinter.fontId = FONT_SHORT; textPrinter.x = 0; textPrinter.y = 0; textPrinter.letterSpacing = 2; @@ -5597,8 +5594,8 @@ static void CB2_TourneyTree(void) static void VblankCb_TourneyInfoCard(void) { - ChangeBgX(3, 0x80, 1); - ChangeBgY(3, 0x80, 2); + ChangeBgX(3, 0x80, BG_COORD_ADD); + ChangeBgY(3, 0x80, BG_COORD_SUB); SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); @@ -5693,8 +5690,8 @@ static void VblankCb_TourneyTree(void) SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - ChangeBgY(2, 0x80, 2); - ChangeBgY(3, 0x80, 1); + ChangeBgY(2, 0x80, BG_COORD_SUB); + ChangeBgY(3, 0x80, BG_COORD_ADD); LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); @@ -5800,7 +5797,7 @@ static void InitRandomTourneyTreeResults(void) gSaveBlock2Ptr->frontier.lvlMode = FRONTIER_LVL_50; zero1 = 0; zero2 = 0; - + gSaveBlock2Ptr->frontier.domeLvlMode = zero1 + 1; gSaveBlock2Ptr->frontier.domeBattleMode = zero2 + 1; @@ -5848,7 +5845,7 @@ static void InitRandomTourneyTreeResults(void) DOME_TRAINERS[i].forfeited = FALSE; } - monLevel = 50; + monLevel = FRONTIER_MAX_LEVEL_50; for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) { monTypesBits = 0; @@ -5934,10 +5931,10 @@ int TrainerIdToDomeTournamentId(u16 trainerId) return i; } -static u8 sub_81953E8(u8 tournamentId, u8 round) +static u8 GetOpposingNPCTournamentIdByRound(u8 tournamentId, u8 round) { u8 tournamentIds[2]; - BufferDomeWinString(gUnknown_0860D1A0[gUnknown_0860D1C0[tournamentId] / 2][round] - 16, tournamentIds); + BufferDomeWinString(sTrainerAndRoundToLastMatchCardNum[sTournamentIdToPairedTrainerIds[tournamentId] / 2][round] - 16, tournamentIds); if (tournamentId == tournamentIds[0]) return tournamentIds[1]; else @@ -5991,7 +5988,7 @@ static void DecideRoundWinners(u8 roundId) for (monId2 = 0; monId2 < FRONTIER_PARTY_SIZE; monId2++) { points1 += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].moves[moveSlot], - gFacilityTrainerMons[DOME_MONS[tournamentId2][monId2]].species, 2); + gFacilityTrainerMons[DOME_MONS[tournamentId2][monId2]].species, EFFECTIVENESS_MODE_AI_VS_AI); } } species = gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].species; @@ -6014,7 +6011,7 @@ static void DecideRoundWinners(u8 roundId) for (monId2 = 0; monId2 < FRONTIER_PARTY_SIZE; monId2++) { points2 += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].moves[moveSlot], - gFacilityTrainerMons[DOME_MONS[tournamentId1][monId2]].species, 2); + gFacilityTrainerMons[DOME_MONS[tournamentId1][monId2]].species, EFFECTIVENESS_MODE_AI_VS_AI); } } species = gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].species; diff --git a/src/battle_factory.c b/src/battle_factory.c index e0bfdfdd0b..12e477e323 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -12,15 +12,15 @@ #include "constants/battle_factory.h" #include "constants/battle_frontier.h" #include "constants/battle_frontier_mons.h" +#include "constants/battle_tent.h" #include "constants/frontier_util.h" #include "constants/layouts.h" #include "constants/trainers.h" #include "constants/moves.h" +#include "constants/items.h" -// IWRAM bss static bool8 sPerformedRentalSwap; -// This file's functions. static void InitFactoryChallenge(void); static void GetBattleFactoryData(void); static void SetBattleFactoryData(void); @@ -43,12 +43,12 @@ static u8 GetMoveBattleStyle(u16 move); // Number of moves needed on the team to be considered using a certain battle style static const u8 sRequiredMoveCounts[FACTORY_NUM_STYLES - 1] = { - [FACTORY_STYLE_PREPARATION - 1] = 3, - [FACTORY_STYLE_SLOW_STEADY - 1] = 3, - [FACTORY_STYLE_ENDURANCE - 1] = 3, - [FACTORY_STYLE_HIGH_RISK - 1] = 2, - [FACTORY_STYLE_WEAKENING - 1] = 2, - [FACTORY_STYLE_UNPREDICTABLE - 1] = 2, + [FACTORY_STYLE_PREPARATION - 1] = 3, + [FACTORY_STYLE_SLOW_STEADY - 1] = 3, + [FACTORY_STYLE_ENDURANCE - 1] = 3, + [FACTORY_STYLE_HIGH_RISK - 1] = 2, + [FACTORY_STYLE_WEAKENING - 1] = 2, + [FACTORY_STYLE_UNPREDICTABLE - 1] = 2, [FACTORY_STYLE_WEATHER - 1] = 2 }; @@ -212,12 +212,12 @@ static void InitFactoryChallenge(void) } sPerformedRentalSwap = FALSE; - for (i = 0; i < 6; i++) + for (i = 0; i < ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); i++) gSaveBlock2Ptr->frontier.rentalMons[i].monId = 0xFFFF; for (i = 0; i < FRONTIER_PARTY_SIZE; i++) gFrontierTempParty[i] = 0xFFFF; - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); gTrainerBattleOpponent_A = 0; } @@ -310,11 +310,12 @@ static void GenerateOpponentMons(void) u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u32 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; - u32 challengeNum = winStreak / 7; + u32 challengeNum = winStreak / FRONTIER_STAGES_PER_CHALLENGE; gFacilityTrainers = gBattleFrontierTrainers; do { + // Choose a random trainer, ensuring no repeats in this challenge trainerId = GetRandomScaledFrontierTrainerId(challengeNum, gSaveBlock2Ptr->frontier.curChallengeBattleNum); for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) { @@ -324,27 +325,32 @@ static void GenerateOpponentMons(void) } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); gTrainerBattleOpponent_A = trainerId; - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 6) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < FRONTIER_STAGES_PER_CHALLENGE - 1) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = trainerId; i = 0; while (i != FRONTIER_PARTY_SIZE) { u16 monId = GetFactoryMonId(lvlMode, challengeNum, FALSE); + + // Unown (FRONTIER_MON_UNOWN) is forbidden on opponent Factory teams. if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN) continue; - for (j = 0; j < 6; j++) + // Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player + for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++) { if (gFacilityTrainerMons[monId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species) break; } - if (j != 6) + if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons)) continue; + // "High tier" pokemon are only allowed on open level mode if (lvlMode == FRONTIER_LVL_50 && monId > FRONTIER_MONS_HIGH_TIER) continue; + // Ensure this species hasn't already been chosen for the opponent for (k = firstMonId; k < firstMonId + i; k++) { if (species[k] == gFacilityTrainerMons[monId].species) @@ -353,14 +359,16 @@ static void GenerateOpponentMons(void) if (k != firstMonId + i) continue; + // Ensure held items don't repeat on the opponent's team for (k = firstMonId; k < firstMonId + i; k++) { - if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) + if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) break; } if (k != firstMonId + i) continue; + // Successful selection species[i] = gFacilityTrainerMons[monId].species; heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]; gFrontierTempParty[i] = monId; @@ -406,15 +414,15 @@ static void SetPlayerAndOpponentParties(void) if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_TENT) { gFacilityTrainerMons = gSlateportBattleTentMons; - monLevel = 30; + monLevel = TENT_MIN_LEVEL; } else { gFacilityTrainerMons = gBattleFrontierMons; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) - monLevel = 100; + monLevel = FRONTIER_MAX_LEVEL_OPEN; else - monLevel = 50; + monLevel = FRONTIER_MAX_LEVEL_50; } if (gSpecialVar_0x8005 < 2) @@ -618,9 +626,9 @@ static void GetOpponentMostCommonMonType(void) // Determine which are the two most-common types. // The second most-common type is only updated if // its count is equal to the most-common type. - mostCommonTypes[0] = TYPE_NORMAL; - mostCommonTypes[1] = TYPE_NORMAL; - for (i = TYPE_FIGHTING; i < NUMBER_OF_MON_TYPES; i++) + mostCommonTypes[0] = 0; + mostCommonTypes[1] = 0; + for (i = 1; i < NUMBER_OF_MON_TYPES; i++) { if (typeCounts[mostCommonTypes[0]] < typeCounts[i]) mostCommonTypes[0] = i; @@ -720,17 +728,25 @@ static void RestorePlayerPartyHeldItems(void) } } -u8 GetFactoryMonFixedIV(u8 arg0, u8 arg1) +// Get the IV to use for the opponent's pokémon. +// The IVs get higher for each subsequent challenge and for +// the last trainer in each challenge. Noland is an exception +// to this, as he uses the IVs that would be used by the regular +// trainers 2 challenges ahead of the current one. +// Due to a mistake in FillFactoryFrontierTrainerParty, the +// challenge number used to determine the IVs for regular trainers +// is Battle Tower's instead of Battle Factory's. +u8 GetFactoryMonFixedIV(u8 challengeNum, bool8 isLastBattle) { - u8 a1; - u8 a2 = (arg1 != 0) ? 1 : 0; + u8 ivSet; + bool8 useHigherIV = isLastBattle ? TRUE : FALSE; - if (arg0 > 8) - a1 = 7; + if (challengeNum > 8) + ivSet = 7; else - a1 = arg0; + ivSet = challengeNum; - return sFixedIVTable[a1][a2]; + return sFixedIVTable[ivSet][useHigherIV]; } void FillFactoryBrainParty(void) @@ -746,7 +762,7 @@ void FillFactoryBrainParty(void) u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; - fixedIV = GetFactoryMonFixedIV(challengeNum + 2, 0); + fixedIV = GetFactoryMonFixedIV(challengeNum + 2, FALSE); monLevel = SetFacilityPtrsGetLevel(); i = 0; otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); @@ -757,15 +773,15 @@ void FillFactoryBrainParty(void) if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN) continue; - if (monLevel == 50 && monId > FRONTIER_MONS_HIGH_TIER) + if (monLevel == FRONTIER_MAX_LEVEL_50 && monId > FRONTIER_MONS_HIGH_TIER) continue; - for (j = 0; j < 6; j++) + for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++) { if (monId == gSaveBlock2Ptr->frontier.rentalMons[j].monId) break; } - if (j != 6) + if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons)) continue; for (k = 0; k < i; k++) @@ -778,7 +794,7 @@ void FillFactoryBrainParty(void) for (k = 0; k < i; k++) { - if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) + if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) break; } if (k != i) @@ -877,13 +893,13 @@ u32 GetAiScriptsInBattleFactory(void) int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) - return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY; + return AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY; else if (challengeNum < 2) return 0; else if (challengeNum < 4) - return AI_SCRIPT_CHECK_BAD_MOVE; + return AI_FLAG_CHECK_BAD_MOVE; else - return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY; + return AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY; } } diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 36e39234a5..6f9a2efb3a 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -410,7 +410,7 @@ static const struct OamData sOam_Select_Pokeball = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -427,7 +427,7 @@ static const struct OamData sOam_Select_Arrow = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -444,7 +444,7 @@ static const struct OamData sOam_Select_MenuHighlight = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), .x = 0, @@ -461,7 +461,7 @@ static const struct OamData sOam_Select_MonPicBgAnim = .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -661,7 +661,7 @@ static const struct OamData sOam_Swap_Pokeball = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -678,7 +678,7 @@ static const struct OamData sOam_Swap_Arrow = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -695,7 +695,7 @@ static const struct OamData sOam_Swap_MenuHighlight = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), .x = 0, @@ -712,7 +712,7 @@ static const struct OamData sOam_Swap_MonPicBgAnim = .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -1131,8 +1131,7 @@ static void CB2_InitSelectScreen(void) switch (gMain.state) { case 0: - if (sFactorySelectMons != NULL) - FREE_AND_SET_NULL(sFactorySelectMons); + TRY_FREE_AND_SET_NULL(sFactorySelectMons); SetHBlankCallback(NULL); SetVBlankCallback(NULL); CpuFill32(0, (void *)VRAM, VRAM_SIZE); @@ -1147,12 +1146,12 @@ static void CB2_InitSelectScreen(void) sSelectMonPicBgTilesetBuffer = AllocZeroed(0x440); sSelectMenuTilemapBuffer = Alloc(BG_SCREEN_SIZE); sSelectMonPicBgTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDY, 0); @@ -1404,7 +1403,7 @@ static void Select_HandleMonSelectionChange(void) if (sFactorySelectScreen->mons[cursorPos].selectedId) // Deselect a mon. { paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY); - if (sFactorySelectScreen->selectingMonsState == FRONTIER_PARTY_SIZE + if (sFactorySelectScreen->selectingMonsState == FRONTIER_PARTY_SIZE && sFactorySelectScreen->mons[cursorPos].selectedId == 1) { for (i = 0; i < SELECTABLE_MONS_COUNT; i++) @@ -1748,9 +1747,9 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId) u16 monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId; sFactorySelectScreen->mons[i + firstMonId].monId = monId; if (i < rentalRank) - ivs = GetFactoryMonFixedIV(challengeNum + 1, 0); + ivs = GetFactoryMonFixedIV(challengeNum + 1, FALSE); else - ivs = GetFactoryMonFixedIV(challengeNum, 0); + ivs = GetFactoryMonFixedIV(challengeNum, FALSE); CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].species, level, @@ -1854,15 +1853,15 @@ static void Select_ErasePopupMenu(u8 windowId) gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = TRUE; gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = TRUE; FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); ClearWindowTilemap(windowId); } static void Select_PrintRentalPkmnString(void) { FillWindowPixelBuffer(SELECT_WIN_TITLE, PIXEL_FILL(0)); - AddTextPrinterParameterized(SELECT_WIN_TITLE, 1, gText_RentalPkmn2, 2, 1, 0, NULL); - CopyWindowToVram(SELECT_WIN_TITLE, 3); + AddTextPrinterParameterized(SELECT_WIN_TITLE, FONT_NORMAL, gText_RentalPkmn2, 2, 1, 0, NULL); + CopyWindowToVram(SELECT_WIN_TITLE, COPYWIN_FULL); } static void Select_PrintMonSpecies(void) @@ -1874,9 +1873,9 @@ static void Select_PrintMonSpecies(void) FillWindowPixelBuffer(SELECT_WIN_SPECIES, PIXEL_FILL(0)); species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); - x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(SELECT_WIN_SPECIES, 1, x, 1, sSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(SELECT_WIN_SPECIES, 2); + x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 86); + AddTextPrinterParameterized3(SELECT_WIN_SPECIES, FONT_NORMAL, x, 1, sSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SELECT_WIN_SPECIES, COPYWIN_GFX); } static void Select_PrintSelectMonString(void) @@ -1893,15 +1892,15 @@ static void Select_PrintSelectMonString(void) else str = gText_TheseThreePkmnOkay; - AddTextPrinterParameterized(SELECT_WIN_INFO, 1, str, 2, 5, 0, NULL); - CopyWindowToVram(SELECT_WIN_INFO, 2); + AddTextPrinterParameterized(SELECT_WIN_INFO, FONT_NORMAL, str, 2, 5, 0, NULL); + CopyWindowToVram(SELECT_WIN_INFO, COPYWIN_GFX); } static void Select_PrintCantSelectSameMon(void) { FillWindowPixelBuffer(SELECT_WIN_INFO, PIXEL_FILL(0)); - AddTextPrinterParameterized(SELECT_WIN_INFO, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); - CopyWindowToVram(SELECT_WIN_INFO, 2); + AddTextPrinterParameterized(SELECT_WIN_INFO, FONT_NORMAL, gText_CantSelectSamePkmn, 2, 5, 0, NULL); + CopyWindowToVram(SELECT_WIN_INFO, COPYWIN_GFX); } static void Select_PrintMenuOptions(void) @@ -1910,23 +1909,23 @@ static void Select_PrintMenuOptions(void) PutWindowTilemap(SELECT_WIN_OPTIONS); FillWindowPixelBuffer(SELECT_WIN_OPTIONS, PIXEL_FILL(0)); - AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 1, sMenuOptionTextColors, 0, gText_Summary); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, FONT_NORMAL, 7, 1, sMenuOptionTextColors, 0, gText_Summary); if (selectedId != 0) - AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 17, sMenuOptionTextColors, 0, gText_Deselect); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, FONT_NORMAL, 7, 17, sMenuOptionTextColors, 0, gText_Deselect); else - AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 17, sMenuOptionTextColors, 0, gText_Rent); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, FONT_NORMAL, 7, 17, sMenuOptionTextColors, 0, gText_Rent); - AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 33, sMenuOptionTextColors, 0, gText_Others2); - CopyWindowToVram(SELECT_WIN_OPTIONS, 3); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, FONT_NORMAL, 7, 33, sMenuOptionTextColors, 0, gText_Others2); + CopyWindowToVram(SELECT_WIN_OPTIONS, COPYWIN_FULL); } static void Select_PrintYesNoOptions(void) { PutWindowTilemap(SELECT_WIN_YES_NO); FillWindowPixelBuffer(SELECT_WIN_YES_NO, PIXEL_FILL(0)); - AddTextPrinterParameterized3(SELECT_WIN_YES_NO, 1, 7, 1, sMenuOptionTextColors, 0, gText_Yes2); - AddTextPrinterParameterized3(SELECT_WIN_YES_NO, 1, 7, 17, sMenuOptionTextColors, 0, gText_No2); - CopyWindowToVram(SELECT_WIN_YES_NO, 3); + AddTextPrinterParameterized3(SELECT_WIN_YES_NO, FONT_NORMAL, 7, 1, sMenuOptionTextColors, 0, gText_Yes2); + AddTextPrinterParameterized3(SELECT_WIN_YES_NO, FONT_NORMAL, 7, 17, sMenuOptionTextColors, 0, gText_No2); + CopyWindowToVram(SELECT_WIN_YES_NO, COPYWIN_FULL); } static u8 Select_RunMenuOptionFunc(void) @@ -1994,9 +1993,9 @@ static void Select_PrintMonCategory(void) FillWindowPixelBuffer(SELECT_WIN_MON_CATEGORY, PIXEL_FILL(0)); species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); - x = GetStringRightAlignXOffset(1, text, 0x76); - AddTextPrinterParameterized(SELECT_WIN_MON_CATEGORY, 1, text, x, 1, 0, NULL); - CopyWindowToVram(SELECT_WIN_MON_CATEGORY, 2); + x = GetStringRightAlignXOffset(FONT_NORMAL, text, 0x76); + AddTextPrinterParameterized(SELECT_WIN_MON_CATEGORY, FONT_NORMAL, text, x, 1, 0, NULL); + CopyWindowToVram(SELECT_WIN_MON_CATEGORY, COPYWIN_GFX); } } @@ -2008,7 +2007,7 @@ static void Select_CreateMonSprite(void) u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySelectScreen->monPics[1].monSpriteId = CreateMonPicSprite(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + sFactorySelectScreen->monPics[1].monSpriteId = CreateMonPicSprite(species, otId, personality, TRUE, 88, 32, 15, TAG_NONE); gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecX = 0; gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecY = 0; @@ -2034,7 +2033,7 @@ static void Select_ReshowMonSprite(void) personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySelectScreen->monPics[1].monSpriteId = CreateMonPicSprite(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + sFactorySelectScreen->monPics[1].monSpriteId = CreateMonPicSprite(species, otId, personality, TRUE, 88, 32, 15, TAG_NONE); gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecX = 0; gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecY = 0; @@ -2056,7 +2055,7 @@ static void Select_CreateChosenMonsSprites(void) u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySelectScreen->monPics[i].monSpriteId = CreateMonPicSprite(species, otId, personality, TRUE, (i * 72) + 16, 32, i + 13, 0xFFFF); + sFactorySelectScreen->monPics[i].monSpriteId = CreateMonPicSprite(species, otId, personality, TRUE, (i * 72) + 16, 32, i + 13, TAG_NONE); gSprites[sFactorySelectScreen->monPics[i].monSpriteId].centerToCornerVecX = 0; gSprites[sFactorySelectScreen->monPics[i].monSpriteId].centerToCornerVecY = 0; break; @@ -2474,7 +2473,7 @@ static void Swap_Task_HandleYesNo(u8 taskId) gTasks[taskId].tSaidYes = TRUE; hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; loPtr = gTasks[taskId].tFollowUpTaskPtrLo; - gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + gTasks[taskId].func = (void *)((hiPtr << 16) | loPtr); } else { @@ -2483,7 +2482,7 @@ static void Swap_Task_HandleYesNo(u8 taskId) Swap_ErasePopupMenu(SWAP_WIN_YES_NO); hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; loPtr = gTasks[taskId].tFollowUpTaskPtrLo; - gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + gTasks[taskId].func = (void *)((hiPtr << 16) | loPtr); } } else if (JOY_NEW(B_BUTTON)) @@ -2493,7 +2492,7 @@ static void Swap_Task_HandleYesNo(u8 taskId) Swap_ErasePopupMenu(SWAP_WIN_YES_NO); hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; loPtr = gTasks[taskId].tFollowUpTaskPtrLo; - gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + gTasks[taskId].func = (void *)((hiPtr << 16) | loPtr); } else if (JOY_REPEAT(DPAD_UP)) { @@ -2509,7 +2508,7 @@ static void Swap_Task_HandleYesNo(u8 taskId) } } -static void Swap_HandleQuitSwappingResposne(u8 taskId) +static void Swap_HandleQuitSwappingResponse(u8 taskId) { if (gTasks[taskId].tSaidYes == TRUE) { @@ -2533,8 +2532,8 @@ static void Swap_AskQuitSwapping(u8 taskId) Swap_PrintOnInfoWindow(gText_QuitSwapping); sFactorySwapScreen->monSwapped = FALSE; gTasks[taskId].tState = STATE_YESNO_SHOW; - gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_HandleQuitSwappingResposne) >> 16; - gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_HandleQuitSwappingResposne); + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_HandleQuitSwappingResponse) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_HandleQuitSwappingResponse); gTasks[taskId].func = Swap_Task_HandleYesNo; } } @@ -3012,7 +3011,7 @@ static void Swap_Task_ScreenInfoTransitionOut(u8 taskId) if (!gPaletteFade.active) { FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, COPYWIN_GFX); if (sFactorySwapScreen->inEnemyScreen == TRUE) { // Start "Pkmn for Swap" button slide offscreen @@ -3057,7 +3056,7 @@ static void Swap_Task_ScreenInfoTransitionOut(u8 taskId) } break; case 5: - if (gTasks[taskId].tSlideFinishedPkmn == TRUE + if (gTasks[taskId].tSlideFinishedPkmn == TRUE && gTasks[taskId].tSlideFinishedCancel == TRUE) { gTasks[taskId].tState = gTasks[taskId].tFollowUpTaskState; @@ -3123,7 +3122,7 @@ static void Swap_Task_ScreenInfoTransitionIn(u8 taskId) } break; case 2: - if (gTasks[taskId].tSlideFinishedPkmn == TRUE + if (gTasks[taskId].tSlideFinishedPkmn == TRUE && gTasks[taskId].tSlideFinishedCancel == TRUE) { gPlttBufferFaded[226] = sPokeballGray_Pal[37]; @@ -3150,7 +3149,7 @@ static void Swap_Task_ScreenInfoTransitionIn(u8 taskId) break; case 6: FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, COPYWIN_GFX); gTasks[taskId].tState++; break; case 7: @@ -3205,7 +3204,7 @@ static void Swap_Task_SwitchPartyScreen(u8 taskId) gTasks[taskId].tState++; break; case 3: - if (!FuncIsActiveTask(Swap_Task_SlideCycleBalls) + if (!FuncIsActiveTask(Swap_Task_SlideCycleBalls) && gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tFadeOutFinished == TRUE) { Swap_EraseSpeciesWindow(); @@ -3280,14 +3279,14 @@ static void CB2_InitSwapScreen(void) sSwapMonPicBgTilesetBuffer = AllocZeroed(0x440); sSwapMenuTilemapBuffer = Alloc(BG_SCREEN_SIZE); sSwapMonPicBgTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); SetGpuReg(REG_OFFSET_BLDY, 0); SetGpuReg(REG_OFFSET_MOSAIC, 0); SetGpuReg(REG_OFFSET_WIN0H, 0); @@ -3679,7 +3678,7 @@ static void Swap_HideActionButtonHighlights(void) { // Hide button highlight on "Pkmn for Swap" gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][i]].invisible = TRUE; - + // Hide button highlight on Cancel if (i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0])) gSprites[sFactorySwapScreen->cancelButtonSpriteIds[1][i]].invisible = TRUE; @@ -3724,7 +3723,7 @@ static void Swap_ErasePopupMenu(u8 windowId) gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = TRUE; gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = TRUE; FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); ClearWindowTilemap(windowId); } @@ -3732,14 +3731,14 @@ static void Swap_EraseSpeciesWindow(void) { PutWindowTilemap(SWAP_WIN_SPECIES); FillWindowPixelBuffer(SWAP_WIN_SPECIES, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_SPECIES, 2); + CopyWindowToVram(SWAP_WIN_SPECIES, COPYWIN_GFX); } static void Swap_EraseSpeciesAtFadeWindow(void) { PutWindowTilemap(SWAP_WIN_SPECIES_AT_FADE); FillWindowPixelBuffer(SWAP_WIN_SPECIES_AT_FADE, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, 2); + CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, COPYWIN_GFX); } static void Swap_EraseActionFadeWindow(void) @@ -3747,14 +3746,14 @@ static void Swap_EraseActionFadeWindow(void) Swap_EraseSpeciesWindow(); PutWindowTilemap(SWAP_WIN_ACTION_FADE); FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, COPYWIN_GFX); } static void Swap_PrintPkmnSwap(void) { FillWindowPixelBuffer(SWAP_WIN_TITLE, PIXEL_FILL(1)); - AddTextPrinterParameterized(SWAP_WIN_TITLE, 1, gText_PkmnSwap, 2, 1, 0, NULL); - CopyWindowToVram(SWAP_WIN_TITLE, 3); + AddTextPrinterParameterized(SWAP_WIN_TITLE, FONT_NORMAL, gText_PkmnSwap, 2, 1, 0, NULL); + CopyWindowToVram(SWAP_WIN_TITLE, COPYWIN_FULL); } static void Swap_PrintMonSpecies(void) @@ -3765,7 +3764,7 @@ static void Swap_PrintMonSpecies(void) FillWindowPixelBuffer(SWAP_WIN_SPECIES, PIXEL_FILL(0)); if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(SWAP_WIN_SPECIES, 2); + CopyWindowToVram(SWAP_WIN_SPECIES, COPYWIN_GFX); } else { @@ -3775,42 +3774,42 @@ static void Swap_PrintMonSpecies(void) else species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); - x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(SWAP_WIN_SPECIES, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(SWAP_WIN_SPECIES, 3); + x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 86); + AddTextPrinterParameterized3(SWAP_WIN_SPECIES, FONT_NORMAL, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SWAP_WIN_SPECIES, COPYWIN_FULL); } } static void Swap_PrintOnInfoWindow(const u8 *str) { FillWindowPixelBuffer(SWAP_WIN_INFO, PIXEL_FILL(0)); - AddTextPrinterParameterized(SWAP_WIN_INFO, 1, str, 2, 5, 0, NULL); - CopyWindowToVram(SWAP_WIN_INFO, 2); + AddTextPrinterParameterized(SWAP_WIN_INFO, FONT_NORMAL, str, 2, 5, 0, NULL); + CopyWindowToVram(SWAP_WIN_INFO, COPYWIN_GFX); } static void Swap_PrintMenuOptions(void) { PutWindowTilemap(SWAP_WIN_OPTIONS); FillWindowPixelBuffer(SWAP_WIN_OPTIONS, PIXEL_FILL(0)); - AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, 1, 15, 1, sSwapMenuOptionsTextColors, 0, gText_Summary2); - AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, 1, 15, 17, sSwapMenuOptionsTextColors, 0, gText_Swap); - AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, 1, 15, 33, sSwapMenuOptionsTextColors, 0, gText_Rechoose); - CopyWindowToVram(SWAP_WIN_OPTIONS, 3); + AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, FONT_NORMAL, 15, 1, sSwapMenuOptionsTextColors, 0, gText_Summary2); + AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, FONT_NORMAL, 15, 17, sSwapMenuOptionsTextColors, 0, gText_Swap); + AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, FONT_NORMAL, 15, 33, sSwapMenuOptionsTextColors, 0, gText_Rechoose); + CopyWindowToVram(SWAP_WIN_OPTIONS, COPYWIN_FULL); } static void Swap_PrintYesNoOptions(void) { PutWindowTilemap(SWAP_WIN_YES_NO); FillWindowPixelBuffer(SWAP_WIN_YES_NO, PIXEL_FILL(0)); - AddTextPrinterParameterized3(SWAP_WIN_YES_NO, 1, 7, 1, sSwapMenuOptionsTextColors, 0, gText_Yes3); - AddTextPrinterParameterized3(SWAP_WIN_YES_NO, 1, 7, 17, sSwapMenuOptionsTextColors, 0, gText_No3); - CopyWindowToVram(SWAP_WIN_YES_NO, 3); + AddTextPrinterParameterized3(SWAP_WIN_YES_NO, FONT_NORMAL, 7, 1, sSwapMenuOptionsTextColors, 0, gText_Yes3); + AddTextPrinterParameterized3(SWAP_WIN_YES_NO, FONT_NORMAL, 7, 17, sSwapMenuOptionsTextColors, 0, gText_No3); + CopyWindowToVram(SWAP_WIN_YES_NO, COPYWIN_FULL); } static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) { - s32 x = GetStringRightAlignXOffset(0, str, 0x46); - AddTextPrinterParameterized3(windowId, 0, x, y, sSwapMenuOptionsTextColors, 0, str); + s32 x = GetStringRightAlignXOffset(FONT_SMALL, str, 0x46); + AddTextPrinterParameterized3(windowId, FONT_SMALL, x, y, sSwapMenuOptionsTextColors, 0, str); } static void Swap_PrintActionStrings(void) @@ -3824,7 +3823,7 @@ static void Swap_PrintActionStrings(void) Swap_PrintActionString(gText_Cancel3, 24, SWAP_WIN_ACTION_FADE); break; } - CopyWindowToVram(SWAP_WIN_ACTION_FADE, 3); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, COPYWIN_FULL); } static void Swap_PrintActionStrings2(void) @@ -3838,7 +3837,7 @@ static void Swap_PrintActionStrings2(void) Swap_PrintActionString(gText_Cancel3, 32, SWAP_WIN_OPTIONS); break; } - CopyWindowToVram(SWAP_WIN_OPTIONS, 3); + CopyWindowToVram(SWAP_WIN_OPTIONS, COPYWIN_FULL); } static void Swap_PrintOneActionString(u8 which) @@ -3853,7 +3852,7 @@ static void Swap_PrintOneActionString(u8 which) Swap_PrintActionString(gText_Cancel3, 32, SWAP_WIN_OPTIONS); break; } - CopyWindowToVram(SWAP_WIN_OPTIONS, 3); + CopyWindowToVram(SWAP_WIN_OPTIONS, COPYWIN_FULL); } // For printing the species name once its selected. Keep the current fade but don't keep fading in and out @@ -3874,7 +3873,7 @@ static void Swap_PrintMonSpeciesAtFade(void) FillWindowPixelBuffer(SWAP_WIN_SPECIES_AT_FADE, PIXEL_FILL(0)); if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, 3); + CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, COPYWIN_FULL); } else { @@ -3884,9 +3883,9 @@ static void Swap_PrintMonSpeciesAtFade(void) else species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); - x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(SWAP_WIN_SPECIES_AT_FADE, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, 3); + x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 86); + AddTextPrinterParameterized3(SWAP_WIN_SPECIES_AT_FADE, FONT_NORMAL, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, COPYWIN_FULL); } } @@ -3901,7 +3900,7 @@ static void Swap_PrintMonSpeciesForTransition(void) if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(SWAP_WIN_SPECIES, 2); + CopyWindowToVram(SWAP_WIN_SPECIES, COPYWIN_GFX); } else { @@ -3911,9 +3910,9 @@ static void Swap_PrintMonSpeciesForTransition(void) else species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); - x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(SWAP_WIN_SPECIES, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(SWAP_WIN_SPECIES, 3); + x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 86); + AddTextPrinterParameterized3(SWAP_WIN_SPECIES, FONT_NORMAL, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SWAP_WIN_SPECIES, COPYWIN_FULL); } } @@ -3927,7 +3926,7 @@ static void Swap_PrintMonCategory(void) FillWindowPixelBuffer(SWAP_WIN_MON_CATEGORY, PIXEL_FILL(0)); if (monId >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(SWAP_WIN_MON_CATEGORY, 2); + CopyWindowToVram(SWAP_WIN_MON_CATEGORY, COPYWIN_GFX); } else { @@ -3937,9 +3936,9 @@ static void Swap_PrintMonCategory(void) else species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); - x = GetStringRightAlignXOffset(1, text, 0x76); - AddTextPrinterParameterized(SWAP_WIN_MON_CATEGORY, 1, text, x, 1, 0, NULL); - CopyWindowToVram(SWAP_WIN_MON_CATEGORY, 2); + x = GetStringRightAlignXOffset(FONT_NORMAL, text, 0x76); + AddTextPrinterParameterized(SWAP_WIN_MON_CATEGORY, FONT_NORMAL, text, x, 1, 0, NULL); + CopyWindowToVram(SWAP_WIN_MON_CATEGORY, COPYWIN_GFX); } } @@ -4072,9 +4071,9 @@ static void Swap_ShowSummaryMonSprite(void) otId = GetMonData(mon, MON_DATA_OT_ID, NULL); #ifdef BUGFIX - sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite(species, otId, personality, TRUE, 88, 32, 15, TAG_NONE); #else - sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite(species, personality, otId, TRUE, 88, 32, 15, 0xFFFF); + sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite(species, personality, otId, TRUE, 88, 32, 15, TAG_NONE); #endif gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecX = 0; gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecY = 0; @@ -4126,7 +4125,7 @@ static void Swap_TaskCantHaveSameMons(u8 taskId) if (sFactorySwapScreen->monPicAnimating != TRUE) { FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, COPYWIN_GFX); gTasks[taskId].tState++; } break; @@ -4221,17 +4220,12 @@ static void Task_OpenMonPic(u8 taskId) return; break; default: - #ifndef UBFIX DestroyTask(taskId); - #endif - // UB: Should not use the task after it has been deleted. + // Accessing data of destroyed task. Task data isn't reset until a new task needs that task id. if (gTasks[taskId].tIsSwapScreen == TRUE) Swap_CreateMonSprite(); else Select_CreateMonSprite(); - #ifdef UBFIX - DestroyTask(taskId); - #endif return; } task->tState++; @@ -4296,7 +4290,7 @@ static void Swap_CreateMonSprite(void) personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite(species, otId, personality, TRUE, 88, 32, 15, TAG_NONE); gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecX = 0; gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecY = 0; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 41cf890d2b..d832ebbc1c 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -1,7 +1,7 @@ #include "global.h" #include "battle.h" #include "battle_controllers.h" -#include "battle_ai_script_commands.h" +#include "battle_ai_main.h" #include "battle_anim.h" #include "constants/battle_anim.h" #include "battle_interface.h" @@ -23,21 +23,18 @@ #include "palette.h" #include "contest.h" #include "constants/songs.h" +#include "constants/battle_config.h" #include "constants/rgb.h" #include "constants/battle_palace.h" -extern struct MusicPlayerInfo gMPlayInfo_SE1; -extern struct MusicPlayerInfo gMPlayInfo_SE2; -extern struct MusicPlayerInfo gMPlayInfo_BGM; - extern const u8 gBattlePalaceNatureToMoveTarget[]; -extern const u8 * const gBattleAnims_General[]; -extern const u8 * const gBattleAnims_Special[]; +extern const u8 *const gBattleAnims_General[]; +extern const u8 *const gBattleAnims_Special[]; extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow; extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; // this file's functions -static u8 GetBattlePalaceMoveGroup(u16 move); +static u8 GetBattlePalaceMoveGroup(u8 battlerId, u16 move); static u16 GetBattlePalaceTarget(void); static void SpriteCB_TrainerSlideVertical(struct Sprite *sprite); static bool8 ShouldAnimBeDoneRegardlessOfSubstitute(u8 animId); @@ -81,7 +78,11 @@ static const struct CompressedSpriteSheet sSpriteSheets_HealthBar[MAX_BATTLERS_C {gBlankGfxCompressed, 0x0120, TAG_HEALTHBAR_OPPONENT2_TILE} }; +#if P_ENABLE_DEBUG == TRUE +const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2] = +#else static const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2] = +#endif { {gBattleInterface_BallStatusBarPal, TAG_HEALTHBOX_PAL}, {gBattleInterface_BallDisplayPal, TAG_HEALTHBAR_PAL} @@ -114,8 +115,8 @@ u16 ChooseMoveAndTargetInBattlePalace(void) { s32 i, var1, var2; s32 chosenMoveId = -1; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); - u8 unusableMovesBits = CheckMoveLimitations(gActiveBattler, 0, 0xFF); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + u8 unusableMovesBits = CheckMoveLimitations(gActiveBattler, 0, MOVE_LIMITATIONS_ALL); s32 percent = Random() % 100; // Heavy variable re-use here makes this hard to read without defines @@ -139,7 +140,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void) // Each nature has a different percent chance to select a move from one of 3 move groups // If percent is less than 1st check, use move from "Attack" group // If percent is less than 2nd check, use move from "Defense" group - // Otherwise use move from "Support" group + // Otherwise use move from "Support" group for (; i < maxGroupNum; i++) { if (gBattlePalaceNatureToMoveGroupLikelihood[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)][i] > percent) @@ -154,7 +155,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void) { if (moveInfo->moves[i] == MOVE_NONE) break; - if (selectedGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i]) && moveInfo->currentPp[i] != 0) + if (selectedGroup == GetBattlePalaceMoveGroup(gActiveBattler, moveInfo->moves[i]) && moveInfo->currentPp[i] != 0) selectedMoves |= gBitTable[i]; } @@ -180,11 +181,11 @@ u16 ChooseMoveAndTargetInBattlePalace(void) { // validMoveFlags is used here as a bitfield for which moves can be used for each move group type // first 4 bits are for attack (1 for each move), then 4 bits for defense, and 4 for support - if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !(gBitTable[i] & unusableMovesBits)) + if (GetBattlePalaceMoveGroup(gActiveBattler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !(gBitTable[i] & unusableMovesBits)) validMoveFlags += (1 << 0); - if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !(gBitTable[i] & unusableMovesBits)) + if (GetBattlePalaceMoveGroup(gActiveBattler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !(gBitTable[i] & unusableMovesBits)) validMoveFlags += (1 << 4); - if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !(gBitTable[i] & unusableMovesBits)) + if (GetBattlePalaceMoveGroup(gActiveBattler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !(gBitTable[i] & unusableMovesBits)) validMoveFlags += (1 << 8); } @@ -196,7 +197,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void) if ((validMoveFlags & 0xF0) > 0x1FF) numValidMoveGroups++; - + // If more than 1 possible move group, or no possible move groups // then choose move randomly if (numValidMoveGroups > 1 || numValidMoveGroups == 0) @@ -221,7 +222,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void) do { i = Random() % MAX_MON_MOVES; - if (!(gBitTable[i] & unusableMovesBits) && validMoveGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i])) + if (!(gBitTable[i] & unusableMovesBits) && validMoveGroup == GetBattlePalaceMoveGroup(gActiveBattler, moveInfo->moves[i])) chosenMoveId = i; } while (chosenMoveId == -1); } @@ -243,14 +244,14 @@ u16 ChooseMoveAndTargetInBattlePalace(void) if (moveInfo->moves[chosenMoveId] == MOVE_CURSE) { - if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST) + if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST && moveInfo->monType3 != TYPE_GHOST) moveTarget = MOVE_TARGET_USER; else moveTarget = MOVE_TARGET_SELECTED; } else { - moveTarget = gBattleMoves[moveInfo->moves[chosenMoveId]].target; + moveTarget = GetBattlerMoveTargetType(gActiveBattler, moveInfo->moves[chosenMoveId]); } if (moveTarget & MOVE_TARGET_USER) @@ -272,16 +273,16 @@ u16 ChooseMoveAndTargetInBattlePalace(void) #undef numValidMoveGroups #undef validMoveGroup -static u8 GetBattlePalaceMoveGroup(u16 move) +static u8 GetBattlePalaceMoveGroup(u8 battlerId, u16 move) { - switch (gBattleMoves[move].target) + switch (GetBattlerMoveTargetType(battlerId, move)) { case MOVE_TARGET_SELECTED: case MOVE_TARGET_USER_OR_SELECTED: case MOVE_TARGET_RANDOM: case MOVE_TARGET_BOTH: case MOVE_TARGET_FOES_AND_ALLY: - if (gBattleMoves[move].power == 0) + if (IS_MOVE_STATUS(move)) return PALACE_MOVE_GROUP_SUPPORT; else return PALACE_MOVE_GROUP_ATTACK; @@ -357,12 +358,12 @@ void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite) } } -static void UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 arg1) +static void UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 pointless) { sprite->animPaused = TRUE; sprite->callback = SpriteCallbackDummy; - if (!arg1) + if (!pointless) StartSpriteAffineAnim(sprite, 1); else StartSpriteAffineAnim(sprite, 1); @@ -438,9 +439,10 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 de { u8 taskId; - if (tableId == B_ANIM_CASTFORM_CHANGE && (argument & 0x80)) + if (tableId == B_ANIM_CASTFORM_CHANGE && (argument & CASTFORM_SUBSTITUTE)) { - gBattleMonForms[activeBattler] = (argument & ~(0x80)); + // If Castform is behind substitute, set the new form but skip the animation + gBattleMonForms[activeBattler] = (argument & ~CASTFORM_SUBSTITUTE); return TRUE; } if (gBattleSpritesDataPtr->battlerData[activeBattler].behindSubstitute @@ -457,6 +459,12 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 de return TRUE; } + if (tableId == B_ANIM_ILLUSION_OFF) + { + gBattleStruct->illusion[activeBattler].broken = 1; + gBattleStruct->illusion[activeBattler].on = 0; + } + gBattleAnimAttacker = atkBattler; gBattleAnimTarget = defBattler; gBattleSpritesDataPtr->animationData->animArg = argument; @@ -522,12 +530,6 @@ static void Task_ClearBitWhenSpecialAnimDone(u8 taskId) #undef tBattlerId -// Great function to include newly added moves that don't have animation yet. -bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn) -{ - return FALSE; -} - // Check if SE has finished or 30 calls, whichever comes first bool8 IsBattleSEPlaying(u8 battlerId) { @@ -552,16 +554,15 @@ bool8 IsBattleSEPlaying(u8 battlerId) return TRUE; } -void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) +static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 opponent) { - u32 monsPersonality, currentPersonality, otId; - u16 species; - u8 position; - u16 paletteOffset; + u32 monsPersonality, currentPersonality, otId, species, paletteOffset, position; const void *lzPaletteData; + struct Pokemon *illusionMon = GetIllusionMonPtr(battlerId); + if (illusionMon != NULL) + mon = illusionMon; monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY); - if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) { species = GetMonData(mon, MON_DATA_SPECIES); @@ -575,9 +576,18 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) otId = GetMonData(mon, MON_DATA_OT_ID); position = GetBattlerPosition(battlerId); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites.ptr[position], - species, currentPersonality); + if (opponent) + { + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->sprites.ptr[position], + species, currentPersonality); + } + else + { + HandleLoadSpecialPokePic(FALSE, + gMonSpritesGfxPtr->sprites.ptr[position], + species, currentPersonality); + } paletteOffset = 0x100 + battlerId * 16; @@ -590,10 +600,10 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) LoadPalette(gDecompressionBuffer, paletteOffset, 0x20); LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20); - if (species == SPECIES_CASTFORM) + if (species == SPECIES_CASTFORM || species == SPECIES_CHERRIM) { paletteOffset = 0x100 + battlerId * 16; - LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]); + LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette); LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20); } @@ -605,63 +615,14 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) } } +void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) +{ + BattleLoadMonSpriteGfx(mon, battlerId, TRUE); +} + void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) { - u32 monsPersonality, currentPersonality, otId; - u16 species; - u8 position; - u16 paletteOffset; - const void *lzPaletteData; - - monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY); - - if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) - { - species = GetMonData(mon, MON_DATA_SPECIES); - currentPersonality = monsPersonality; - } - else - { - species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies; - currentPersonality = gTransformedPersonalities[battlerId]; - } - - otId = GetMonData(mon, MON_DATA_OT_ID); - position = GetBattlerPosition(battlerId); - - HandleLoadSpecialPokePic(&gMonBackPicTable[species], - gMonSpritesGfxPtr->sprites.ptr[position], - species, currentPersonality); - - paletteOffset = 0x100 + battlerId * 16; - - if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) - lzPaletteData = GetMonFrontSpritePal(mon); - else - lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); - - LZDecompressWram(lzPaletteData, gDecompressionBuffer); - LoadPalette(gDecompressionBuffer, paletteOffset, 0x20); - LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20); - - if (species == SPECIES_CASTFORM) - { - paletteOffset = 0x100 + battlerId * 16; - LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]); - LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20); - } - - // transform's pink color - if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) - { - BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); - } -} - -// Unused -static void BattleGfxSfxDummy1(void) -{ + BattleLoadMonSpriteGfx(mon, battlerId, FALSE); } void BattleGfxSfxDummy2(u16 species) @@ -754,7 +715,12 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) else { if (state == 2) - LoadCompressedSpriteSheet(&sSpriteSheets_DoublesPlayerHealthbox[0]); + { + if (WhichBattleCoords(0)) + LoadCompressedSpriteSheet(&sSpriteSheets_DoublesPlayerHealthbox[0]); + else + LoadCompressedSpriteSheet(&sSpriteSheet_SinglesPlayerHealthbox); + } else if (state == 3) LoadCompressedSpriteSheet(&sSpriteSheets_DoublesPlayerHealthbox[1]); else if (state == 4) @@ -777,9 +743,9 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) return retVal; } -void LoadBattleBarGfx(u8 arg0) +void LoadBattleBarGfx(u8 unused) { - LZDecompressWram(gUnknown_08C093F0, gMonSpritesGfxPtr->barFontGfx); + LZDecompressWram(gBattleInterfaceGfx_BattleBar, gMonSpritesGfxPtr->barFontGfx); } bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId) @@ -886,18 +852,61 @@ void CopyBattleSpriteInvisibility(u8 battlerId) gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible; } -void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform) +void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform, bool32 megaEvo) { - u16 paletteOffset; - u32 personalityValue; - u32 otId; - u8 position; - const u32 *lzPaletteData; + u32 personalityValue, otId, position, paletteOffset, targetSpecies; + const void *lzPaletteData, *src; + void *dst; - if (notTransform) + if (IsContest()) + { + position = B_POSITION_PLAYER_LEFT; + targetSpecies = gContestResources->moveAnim->targetSpecies; + personalityValue = gContestResources->moveAnim->personality; + otId = gContestResources->moveAnim->otId; + + HandleLoadSpecialPokePic(FALSE, + gMonSpritesGfxPtr->sprites.ptr[position], + targetSpecies, + gContestResources->moveAnim->targetPersonality); + } + else + { + position = GetBattlerPosition(battlerAtk); + + if (GetBattlerSide(battlerDef) == B_SIDE_OPPONENT) + targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES); + else + targetSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES); + + if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER) + { + personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); + + HandleLoadSpecialPokePic(FALSE, + gMonSpritesGfxPtr->sprites.ptr[position], + targetSpecies, + gTransformedPersonalities[battlerAtk]); + } + else + { + personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); + + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->sprites.ptr[position], + targetSpecies, + gTransformedPersonalities[battlerAtk]); + } + } + + if (castform) { StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleSpritesDataPtr->animationData->animArg); paletteOffset = 0x100 + battlerAtk * 16; + lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue); + LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette); LoadPalette(gBattleStruct->castformPalette[gBattleSpritesDataPtr->animationData->animArg], paletteOffset, 32); gBattleMonForms[battlerAtk] = gBattleSpritesDataPtr->animationData->animArg; if (gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies != SPECIES_NONE) @@ -909,53 +918,6 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform } else { - const void *src; - void *dst; - u16 targetSpecies; - - if (IsContest()) - { - position = 0; - targetSpecies = gContestResources->moveAnim->targetSpecies; - personalityValue = gContestResources->moveAnim->personality; - otId = gContestResources->moveAnim->otId; - - HandleLoadSpecialPokePic(&gMonBackPicTable[targetSpecies], - gMonSpritesGfxPtr->sprites.ptr[0], - targetSpecies, - gContestResources->moveAnim->targetPersonality); - } - else - { - position = GetBattlerPosition(battlerAtk); - - if (GetBattlerSide(battlerDef) == B_SIDE_OPPONENT) - targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES); - else - targetSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES); - - if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER) - { - personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); - otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); - - HandleLoadSpecialPokePic(&gMonBackPicTable[targetSpecies], - gMonSpritesGfxPtr->sprites.ptr[position], - targetSpecies, - gTransformedPersonalities[battlerAtk]); - } - else - { - personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); - otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); - - HandleLoadSpecialPokePic(&gMonFrontPicTable[targetSpecies], - gMonSpritesGfxPtr->sprites.ptr[position], - targetSpecies, - gTransformedPersonalities[battlerAtk]); - } - } - src = gMonSpritesGfxPtr->sprites.ptr[position]; dst = (void *)(OBJ_VRAM0 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32); DmaCopy32(3, src, dst, MON_PIC_SIZE); @@ -964,17 +926,20 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform LZDecompressWram(lzPaletteData, gDecompressionBuffer); LoadPalette(gDecompressionBuffer, paletteOffset, 32); - if (targetSpecies == SPECIES_CASTFORM) + if (targetSpecies == SPECIES_CASTFORM || targetSpecies == SPECIES_CHERRIM) { gSprites[gBattlerSpriteIds[battlerAtk]].anims = gMonFrontAnimsPtrTable[targetSpecies]; - LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]); - LoadPalette(gBattleStruct->castformPalette[0] + gBattleMonForms[battlerDef] * 16, paletteOffset, 32); + LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette); + LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerDef]], paletteOffset, 32); } - BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + if (!megaEvo) + { + BlendPalette(paletteOffset, 16, 6, RGB_WHITE); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + } - if (!IsContest()) + if (!IsContest() && !megaEvo) { gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies = targetSpecies; gBattleMonForms[battlerAtk] = gBattleMonForms[battlerDef]; @@ -992,7 +957,7 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) if (!loadMonSprite) { if (IsContest()) - position = 0; + position = B_POSITION_PLAYER_LEFT; else position = GetBattlerPosition(battlerId); @@ -1141,13 +1106,19 @@ void LoadAndCreateEnemyShadowSprites(void) LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8); + gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 29, + 0xC8); gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId; if (IsDoubleBattle()) { battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8); + gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 29, + 0xC8); gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId; } } @@ -1187,7 +1158,7 @@ void SpriteCB_SetInvisible(struct Sprite *sprite) void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species) { // The player's shadow is never seen. - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER || gBattleScripting.monCaught) return; if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) @@ -1204,9 +1175,10 @@ void HideBattlerShadowSprite(u8 battlerId) gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_SetInvisible; } -void sub_805EF14(void) +// Color the background tiles surrounding the action selection and move windows +void FillAroundBattleWindows(void) { - u16 *vramPtr = (u16*)(VRAM + 0x240); + u16 *vramPtr = (u16 *)(VRAM + 0x240); s32 i; s32 j; @@ -1241,20 +1213,20 @@ void AllocateMonSpritesGfx(void) gMonSpritesGfxPtr = NULL; gMonSpritesGfxPtr = AllocZeroed(sizeof(*gMonSpritesGfxPtr)); - gMonSpritesGfxPtr->firstDecompressed = AllocZeroed(0x8000); + gMonSpritesGfxPtr->firstDecompressed = AllocZeroed(MON_PIC_SIZE * 4 * MAX_BATTLERS_COUNT); for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - gMonSpritesGfxPtr->sprites.ptr[i] = gMonSpritesGfxPtr->firstDecompressed + (i * 0x2000); + gMonSpritesGfxPtr->sprites.ptr[i] = gMonSpritesGfxPtr->firstDecompressed + (i * MON_PIC_SIZE * 4); *(gMonSpritesGfxPtr->templates + i) = gBattlerSpriteTemplates[i]; for (j = 0; j < 4; j++) { - gMonSpritesGfxPtr->field_74[i][j].data = gMonSpritesGfxPtr->sprites.ptr[i] + (j * MON_PIC_SIZE); - gMonSpritesGfxPtr->field_74[i][j].size = MON_PIC_SIZE; + gMonSpritesGfxPtr->frameImages[i][j].data = gMonSpritesGfxPtr->sprites.ptr[i] + (j * MON_PIC_SIZE); + gMonSpritesGfxPtr->frameImages[i][j].size = MON_PIC_SIZE; } - gMonSpritesGfxPtr->templates[i].images = gMonSpritesGfxPtr->field_74[i]; + gMonSpritesGfxPtr->templates[i].images = gMonSpritesGfxPtr->frameImages[i]; } gMonSpritesGfxPtr->barFontGfx = AllocZeroed(0x1000); @@ -1265,17 +1237,14 @@ void FreeMonSpritesGfx(void) if (gMonSpritesGfxPtr == NULL) return; - if (gMonSpritesGfxPtr->buffer != NULL) - FREE_AND_SET_NULL(gMonSpritesGfxPtr->buffer); - if (gMonSpritesGfxPtr->field_178 != NULL) - FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_178); - + TRY_FREE_AND_SET_NULL(gMonSpritesGfxPtr->buffer); + TRY_FREE_AND_SET_NULL(gMonSpritesGfxPtr->unusedPtr); FREE_AND_SET_NULL(gMonSpritesGfxPtr->barFontGfx); FREE_AND_SET_NULL(gMonSpritesGfxPtr->firstDecompressed); - gMonSpritesGfxPtr->sprites.ptr[0] = NULL; - gMonSpritesGfxPtr->sprites.ptr[1] = NULL; - gMonSpritesGfxPtr->sprites.ptr[2] = NULL; - gMonSpritesGfxPtr->sprites.ptr[3] = NULL; + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_PLAYER_LEFT] = NULL; + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT] = NULL; + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_PLAYER_RIGHT] = NULL; + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT] = NULL; FREE_AND_SET_NULL(gMonSpritesGfxPtr); } diff --git a/src/battle_interface.c b/src/battle_interface.c index 83bdf0cb71..545808fb5c 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1,15 +1,16 @@ #include "global.h" +#include "malloc.h" #include "battle.h" #include "pokemon.h" #include "battle_controllers.h" #include "battle_interface.h" +#include "battle_z_move.h" #include "graphics.h" #include "sprite.h" #include "window.h" #include "string_util.h" #include "text.h" #include "sound.h" -#include "constants/songs.h" #include "decompress.h" #include "task.h" #include "util.h" @@ -20,19 +21,18 @@ #include "international_string_util.h" #include "safari_zone.h" #include "battle_anim.h" -#include "constants/battle_anim.h" -#include "constants/rgb.h" #include "data.h" #include "pokemon_summary_screen.h" - -struct TestingBar -{ - s32 maxValue; - s32 oldValue; - s32 receivedValue; - u32 unkC_0:5; - u32 unk10; -}; +#include "strings.h" +#include "battle_debug.h" +#include "item.h" +#include "item_icon.h" +#include "item_use.h" +#include "constants/battle_anim.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/battle_config.h" +#include "constants/items.h" enum { // Corresponds to gHealthboxElementsGfxTable (and the tables after it) in graphics.c @@ -103,11 +103,11 @@ enum HEALTHBOX_GFX_63, //hp bar red [7 pixels] HEALTHBOX_GFX_64, //hp bar red [8 pixels] HEALTHBOX_GFX_65, //hp bar frame end - HEALTHBOX_GFX_66, //status ball [full] - HEALTHBOX_GFX_67, //status ball [empty] - HEALTHBOX_GFX_68, //status ball [fainted] - HEALTHBOX_GFX_69, //status ball [statused] - HEALTHBOX_GFX_70, //status ball [unused extra] + HEALTHBOX_GFX_STATUS_BALL, // Full + HEALTHBOX_GFX_STATUS_BALL_EMPTY, + HEALTHBOX_GFX_STATUS_BALL_FAINTED, + HEALTHBOX_GFX_STATUS_BALL_STATUSED, + HEALTHBOX_GFX_STATUS_BALL_CAUGHT, HEALTHBOX_GFX_STATUS_PSN_BATTLER1, //status2 "PSN" HEALTHBOX_GFX_72, HEALTHBOX_GFX_73, @@ -153,57 +153,55 @@ enum HEALTHBOX_GFX_STATUS_BRN_BATTLER3, //status4 "BRN" HEALTHBOX_GFX_114, HEALTHBOX_GFX_115, - HEALTHBOX_GFX_116, //unknown_D12FEC - HEALTHBOX_GFX_117, //unknown_D1300C + HEALTHBOX_GFX_FRAME_END, + HEALTHBOX_GFX_FRAME_END_BAR, }; -// strings -extern const u8 gText_Slash[]; -extern const u8 gText_HighlightDarkGray[]; -extern const u8 gText_DynColor2[]; -extern const u8 gText_DynColor2Male[]; -extern const u8 gText_DynColor1Female[]; - -// this file's functions - -static const u8 *GetHealthboxElementGfxPtr(u8 elementId); -static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId); +static const u8 *GetHealthboxElementGfxPtr(u8); +static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *, u32, u32, u32, u32 *); static void RemoveWindowOnHealthbox(u32 windowId); -static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); -static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId); +static void UpdateHpTextInHealthboxInDoubles(u32 healthboxSpriteId, u32 maxOrCurrent, s16 currHp, s16 maxHp); +static void UpdateStatusIconInHealthbox(u8); -static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); -static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth); -static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth); -static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2); +static void TextIntoHealthboxObject(void *, u8 *, s32); +static void SafariTextIntoHealthboxObject(void *, u8 *, u32); +static void HpTextIntoHealthboxObject(void *, u8 *, u32); +static void FillHealthboxObject(void *, u32, u32); -static void sub_8073E08(u8 taskId); -static void sub_8073F98(u8 taskId); -static void sub_8073E64(u8 taskId); +static void Task_HidePartyStatusSummary_BattleStart_1(u8); +static void Task_HidePartyStatusSummary_BattleStart_2(u8); +static void Task_HidePartyStatusSummary_DuringBattle(u8); -static void SpriteCB_HealthBoxOther(struct Sprite *sprite); -static void SpriteCB_HealthBar(struct Sprite *sprite); -static void sub_8074158(struct Sprite *sprite); -static void sub_8074090(struct Sprite *sprite); -static void SpriteCB_StatusSummaryBar(struct Sprite *sprite); -static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite); -static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite); +static void SpriteCB_HealthBoxOther(struct Sprite *); +static void SpriteCB_HealthBar(struct Sprite *); +static void SpriteCB_StatusSummaryBar_Enter(struct Sprite *); +static void SpriteCB_StatusSummaryBar_Exit(struct Sprite *); +static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *); +static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *); +static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *); -static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId); -static s32 CalcNewBarValue(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5); -static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale); -static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar); -static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale); -static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2); +static void SpriteCb_MegaTrigger(struct Sprite *); +static void SpriteCb_MegaIndicator(struct Sprite *); -// const rom data -static const struct OamData sUnknown_0832C138 = +static u8 GetStatusIconForBattlerId(u8, u8); +static s32 CalcNewBarValue(s32, s32, s32, s32 *, u8, u16); +static u8 GetScaledExpFraction(s32, s32, s32, u8); +static void MoveBattleBarGraphically(u8, u8); +static u8 CalcBarFilledPixels(s32, s32, s32, s32 *, u8 *, u8); + +static void SpriteCb_AbilityPopUp(struct Sprite *); +static void Task_FreeAbilityPopUpGfx(u8); + +static void SpriteCB_LastUsedBall(struct Sprite *); +static void SpriteCB_LastUsedBallWin(struct Sprite *); + +static const struct OamData sOamData_64x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -220,7 +218,7 @@ static const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[2] = { .tileTag = TAG_HEALTHBOX_PLAYER1_TILE, .paletteTag = TAG_HEALTHBOX_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -229,7 +227,7 @@ static const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[2] = { .tileTag = TAG_HEALTHBOX_PLAYER2_TILE, .paletteTag = TAG_HEALTHBOX_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -242,7 +240,7 @@ static const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[2] = { .tileTag = TAG_HEALTHBOX_OPPONENT1_TILE, .paletteTag = TAG_HEALTHBOX_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -251,7 +249,7 @@ static const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[2] = { .tileTag = TAG_HEALTHBOX_OPPONENT2_TILE, .paletteTag = TAG_HEALTHBOX_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -263,7 +261,7 @@ static const struct SpriteTemplate sHealthboxSafariSpriteTemplate = { .tileTag = TAG_HEALTHBOX_SAFARI_TILE, .paletteTag = TAG_HEALTHBOX_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -275,7 +273,7 @@ static const struct OamData sOamData_Healthbar = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), .x = 0, @@ -327,298 +325,158 @@ static const struct SpriteTemplate sHealthbarSpriteTemplates[MAX_BATTLERS_COUNT] } }; -static const struct Subsprite sUnknown_0832C220[] = +static const struct Subsprite sHealthBar_Subsprites_Player[] = { { - .x = DISPLAY_WIDTH, - .y = 0, - .shape = SPRITE_SHAPE(64x32), - .size = SPRITE_SIZE(64x32), - .tileOffset = 0, + .x = DISPLAY_WIDTH, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 1 }, { - .x = 48, - .y = 0, - .shape = SPRITE_SHAPE(32x32), - .size = SPRITE_SIZE(32x32), - .tileOffset = 32, - .priority = 1 - }, - { - .x = DISPLAY_WIDTH, - .y = 32, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 48, - .priority = 1 - }, - { - .x = 16, - .y = 32, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 52, - .priority = 1 - }, - { - .x = 48, - .y = 32, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 56, + .x = 16, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, .priority = 1 } }; -static const struct Subsprite sUnknown_0832C234[] = +static const struct Subsprite sHealthBar_Subsprites_Opponent[] = { { - .x = DISPLAY_WIDTH, - .y = 0, - .shape = SPRITE_SHAPE(64x32), - .size = SPRITE_SIZE(64x32), - .tileOffset = 64, + .x = DISPLAY_WIDTH, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 1 }, { - .x = 48, - .y = 0, - .shape = SPRITE_SHAPE(32x32), - .size = SPRITE_SIZE(32x32), - .tileOffset = 96, + .x = 16, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, .priority = 1 }, { - .x = DISPLAY_WIDTH, - .y = 32, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 112, - .priority = 1 - }, - { - .x = 16, - .y = 32, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 116, - .priority = 1 - }, - { - .x = 48, - .y = 32, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 120, + .x = DISPLAY_WIDTH - 16, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 8, .priority = 1 } }; -static const struct Subsprite sUnknown_0832C248[] = +static const struct SubspriteTable sHealthBar_SubspriteTables[] = +{ + [B_SIDE_PLAYER] = {ARRAY_COUNT(sHealthBar_Subsprites_Player), sHealthBar_Subsprites_Player}, + [B_SIDE_OPPONENT] = {ARRAY_COUNT(sHealthBar_Subsprites_Opponent), sHealthBar_Subsprites_Opponent} +}; + +static const struct Subsprite sStatusSummaryBar_Subsprites_Enter[] = { { - .x = DISPLAY_WIDTH, - .y = 0, - .shape = SPRITE_SHAPE(64x32), - .size = SPRITE_SIZE(64x32), - .tileOffset = 0, + .x = 32 * 5, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 1 }, { - .x = 48, - .y = 0, - .shape = SPRITE_SHAPE(32x32), - .size = SPRITE_SIZE(32x32), - .tileOffset = 32, + .x = 32 * 6, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = 32 * 7, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, + .priority = 1 + }, + { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, .priority = 1 } }; -static const struct Subsprite sUnknown_0832C250[] = +static const struct Subsprite sStatusSummaryBar_Subsprites_Exit[] = { { - .x = DISPLAY_WIDTH, - .y = 0, - .shape = SPRITE_SHAPE(64x32), - .size = SPRITE_SIZE(64x32), - .tileOffset = 0, + .x = 32 * 5, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 1 }, { - .x = 48, - .y = 0, - .shape = SPRITE_SHAPE(32x32), - .size = SPRITE_SIZE(32x32), - .tileOffset = 32, + .x = 32 * 6, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = 32 * 7, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, + .priority = 1 + }, + { + .x = 32 * 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, + .priority = 1 + }, + { + .x = 32 * 1, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, + .priority = 1 + }, + { + .x = 32 * 2, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, .priority = 1 } }; -static const struct Subsprite sUnknown_0832C258[] = +static const struct SubspriteTable sStatusSummaryBar_SubspriteTable_Enter[] = { - { - .x = DISPLAY_WIDTH, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, - .priority = 1 - }, - { - .x = 16, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, - .priority = 1 - } + {ARRAY_COUNT(sStatusSummaryBar_Subsprites_Enter), sStatusSummaryBar_Subsprites_Enter} }; -static const struct Subsprite sUnknown_0832C260[] = +static const struct SubspriteTable sStatusSummaryBar_SubspriteTable_Exit[] = { - { - .x = DISPLAY_WIDTH, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, - .priority = 1 - }, - { - .x = 16, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, - .priority = 1 - }, - { - .x = DISPLAY_WIDTH - 16, - .y = 0, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 8, - .priority = 1 - } + {ARRAY_COUNT(sStatusSummaryBar_Subsprites_Exit), sStatusSummaryBar_Subsprites_Exit} }; -// unused subsprite table -static const struct SubspriteTable sUnknown_0832C26C[] = -{ - {ARRAY_COUNT(sUnknown_0832C220), sUnknown_0832C220}, - {ARRAY_COUNT(sUnknown_0832C248), sUnknown_0832C248}, - {ARRAY_COUNT(sUnknown_0832C234), sUnknown_0832C234}, - {ARRAY_COUNT(sUnknown_0832C250), sUnknown_0832C250} -}; - -static const struct SubspriteTable sUnknown_0832C28C[] = -{ - {ARRAY_COUNT(sUnknown_0832C258), sUnknown_0832C258}, - {ARRAY_COUNT(sUnknown_0832C260), sUnknown_0832C260} -}; - -static const struct Subsprite sStatusSummaryBar_Subsprites_0[] = -{ - { - .x = 160, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, - .priority = 1 - }, - { - .x = 192, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, - .priority = 1 - }, - { - .x = 224, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 8, - .priority = 1 - }, - { - .x = 0, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 12, - .priority = 1 - } -}; - -static const struct Subsprite sUnknown_0832C2AC[] = -{ - { - .x = 160, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, - .priority = 1 - }, - { - .x = 192, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, - .priority = 1 - }, - { - .x = 224, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 8, - .priority = 1 - }, - { - .x = 0, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 8, - .priority = 1 - }, - { - .x = 32, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 8, - .priority = 1 - }, - { - .x = 64, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 12, - .priority = 1 - } -}; - -static const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] = -{ - {ARRAY_COUNT(sStatusSummaryBar_Subsprites_0), sStatusSummaryBar_Subsprites_0} -}; - -static const struct SubspriteTable sUnknown_0832C2CC[] = -{ - {ARRAY_COUNT(sUnknown_0832C2AC), sUnknown_0832C2AC} -}; - -// unused unknown image -static const u8 sUnknown_0832C2D4[] = INCBIN_U8("graphics/battle_interface/unknown_32C2D4.4bpp"); - static const struct CompressedSpriteSheet sStatusSummaryBarSpriteSheet = { gBattleInterface_BallStatusBarGfx, 0x200, TAG_STATUS_SUMMARY_BAR_TILE @@ -636,25 +494,7 @@ static const struct SpritePalette sStatusSummaryBallsSpritePal = static const struct SpriteSheet sStatusSummaryBallsSpriteSheet = { - gBattleInterface_BallDisplayGfx, 0x80, TAG_STATUS_SUMMARY_BALLS_TILE -}; - -// unused oam data -static const struct OamData sUnknown_0832C354 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(64x32), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, + &gHealthboxElementsGfxTable[HEALTHBOX_GFX_STATUS_BALL], 0x80, TAG_STATUS_SUMMARY_BALLS_TILE }; static const struct OamData sOamData_StatusSummaryBalls = @@ -662,7 +502,7 @@ static const struct OamData sOamData_StatusSummaryBalls = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -676,23 +516,23 @@ static const struct OamData sOamData_StatusSummaryBalls = static const struct SpriteTemplate sStatusSummaryBarSpriteTemplates[2] = { - { + { // Player .tileTag = TAG_STATUS_SUMMARY_BAR_TILE, .paletteTag = TAG_STATUS_SUMMARY_BAR_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBar + .callback = SpriteCB_StatusSummaryBar_Enter }, - { + { // Opponent .tileTag = TAG_STATUS_SUMMARY_BAR_TILE, .paletteTag = TAG_STATUS_SUMMARY_BAR_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBar + .callback = SpriteCB_StatusSummaryBar_Enter } }; @@ -705,7 +545,7 @@ static const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[2] = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBallsOnBattleStart + .callback = SpriteCB_StatusSummaryBalls_Enter }, { .tileTag = TAG_STATUS_SUMMARY_BALLS_TILE, @@ -714,25 +554,12 @@ static const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[2] = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBallsOnBattleStart + .callback = SpriteCB_StatusSummaryBalls_Enter } }; -// possibly text -static const u8 sUnknown_0832C3C4[] = -{ - 0xfc, 0x01, 0x01, 0xfc, 0x02, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, -}; - -// possibly text -static const u8 sUnknown_0832C3D8[] = -{ - 0xfc, 0x01, 0x01, 0xfc, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, -}; +static const u8 sEmptyWhiteText_GrayHighlight[] = __("{COLOR WHITE}{HIGHLIGHT DARK_GRAY} "); +static const u8 sEmptyWhiteText_TransparentHighlight[] = __("{COLOR WHITE}{HIGHLIGHT TRANSPARENT} "); enum { @@ -752,93 +579,157 @@ static const u16 sStatusIconColors[] = [PAL_STATUS_BRN] = RGB(28, 14, 10), }; -static const struct WindowTemplate sHealthboxWindowTemplate = {0, 0, 0, 8, 2, 0, 0}; // width = 8, height = 2 +static const struct WindowTemplate sHealthboxWindowTemplate = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 8, + .height = 2, + .paletteNum = 0, + .baseBlock = 0 +}; -// code +static const u8 sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp"); +static const u16 sMegaTriggerPal[] = INCBIN_U16("graphics/battle_interface/mega_trigger.gbapal"); -static s32 DummiedOutFunction(s16 unused1, s16 unused2, s32 unused3) +static const struct SpriteSheet sSpriteSheet_MegaTrigger = { - return 9; -} -void sub_8072308(s16 number, u16 *dest, bool8 unk) + sMegaTriggerGfx, sizeof(sMegaTriggerGfx), TAG_MEGA_TRIGGER_TILE +}; +static const struct SpritePalette sSpritePalette_MegaTrigger = { - s8 i, j; - u8 buff[4]; + sMegaTriggerPal, TAG_MEGA_TRIGGER_PAL +}; - for (i = 0; i < 4; i++) - { - buff[i] = 0; - } - - for (i = 3; ; i--) - { - if (number > 0) - { - buff[i] = number % 10; - number /= 10; - } - else - { - for (; i > -1; i--) - { - buff[i] = 0xFF; - } - if (buff[3] == 0xFF) - buff[3] = 0; - break; - } - } - - if (!unk) - { - for (i = 0, j = 0; i < 4; i++) - { - if (buff[j] == 0xFF) - { - dest[j + 0x00] &= 0xFC00; - dest[j + 0x00] |= 0x1E; - dest[i + 0x20] &= 0xFC00; - dest[i + 0x20] |= 0x1E; - } - else - { - dest[j + 0x00] &= 0xFC00; - dest[j + 0x00] |= 0x14 + buff[j]; - dest[i + 0x20] &= 0xFC00; - dest[i + 0x20] |= 0x34 + buff[i]; - } - j++; - } - } - else - { - for (i = 0; i < 4; i++) - { - if (buff[i] == 0xFF) - { - dest[i + 0x00] &= 0xFC00; - dest[i + 0x00] |= 0x1E; - dest[i + 0x20] &= 0xFC00; - dest[i + 0x20] |= 0x1E; - } - else - { - dest[i + 0x00] &= 0xFC00; - dest[i + 0x00] |= 0x14 + buff[i]; - dest[i + 0x20] &= 0xFC00; - dest[i + 0x20] |= 0x34 + buff[i]; - } - } - } -} - - -void sub_80724A8(s16 arg0, s16 arg1, u16 *arg2) +static const struct OamData sOamData_MegaTrigger = { - arg2[4] = 0x1E; - sub_8072308(arg1, arg2, 0); - sub_8072308(arg0, arg2 + 5, 1); -} + .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 sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); +static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); + +static const struct SpriteSheet sSpriteSheet_MegaIndicator = +{ + sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE +}; +static const struct SpritePalette sSpritePalette_MegaIndicator = +{ + sMegaIndicatorPal, TAG_MEGA_INDICATOR_PAL +}; + +static const u8 sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); +static const u16 sAlphaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/alpha_indicator.gbapal"); +static const u8 sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); +static const u16 sOmegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/omega_indicator.gbapal"); + +static const struct SpriteSheet sSpriteSheet_AlphaIndicator = +{ + sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE +}; +static const struct SpritePalette sSpritePalette_AlphaIndicator = +{ + sAlphaIndicatorPal, TAG_ALPHA_INDICATOR_PAL +}; +static const struct SpriteSheet sSpriteSheet_OmegaIndicator = +{ + sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE +}; +static const struct SpritePalette sSpritePalette_OmegaIndicator = +{ + sOmegaIndicatorPal, TAG_OMEGA_INDICATOR_PAL +}; + +static const struct OamData sOamData_MegaIndicator = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +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 struct SpriteTemplate sSpriteTemplate_AlphaIndicator = +{ + .tileTag = TAG_ALPHA_INDICATOR_TILE, + .paletteTag = TAG_ALPHA_INDICATOR_PAL, + .oam = &sOamData_MegaIndicator, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_MegaIndicator, +}; + +static const struct SpriteTemplate sSpriteTemplate_OmegaIndicator = +{ + .tileTag = TAG_OMEGA_INDICATOR_TILE, + .paletteTag = TAG_OMEGA_INDICATOR_PAL, + .oam = &sOamData_MegaIndicator, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_MegaIndicator, +}; // 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. @@ -853,19 +744,43 @@ void sub_80724A8(s16 arg0, s16 arg1, u16 *arg2) // data fields for healthboxRight #define hOther_HealthBoxSpriteId data[5] +#define hOther_IndicatorSpriteId data[6] // For Mega Evo // data fields for healthbar #define hBar_HealthBoxSpriteId data[5] #define hBar_Data6 data[6] +u8 GetMegaIndicatorSpriteId(u32 healthboxSpriteId) +{ + u8 spriteId = gSprites[healthboxSpriteId].oam.affineParam; + if (spriteId >= MAX_SPRITES) + return 0xFF; + return gSprites[spriteId].hOther_IndicatorSpriteId; +} + +static void InitLastUsedBallAssets(void) +{ + gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; + gBattleStruct->ballSpriteIds[1] = MAX_SPRITES; +} + +// This function is here to cover a specific case - one player's mon in a 2 vs 1 double battle. In this scenario - display singles layout. +u32 WhichBattleCoords(u32 battlerId) // 0 - singles, 1 - doubles +{ + if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT && gPlayerPartyCount == 1) + return 0; + else + return IsDoubleBattle(); +} + u8 CreateBattlerHealthboxSprites(u8 battlerId) { s16 data6 = 0; u8 healthboxLeftSpriteId, healthboxRightSpriteId; - u8 healthbarSpriteId; + u8 healthbarSpriteId, megaIndicatorSpriteId; struct Sprite *healthBarSpritePtr; - if (!IsDoubleBattle()) + if (WhichBattleCoords(battlerId) == 0) // Singles { if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { @@ -923,22 +838,34 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId) healthbarSpriteId = CreateSpriteAtEnd(&sHealthbarSpriteTemplates[gBattlerPositions[battlerId]], 140, 60, 0); healthBarSpritePtr = &gSprites[healthbarSpriteId]; - SetSubspriteTables(healthBarSpritePtr, &sUnknown_0832C28C[GetBattlerSide(battlerId)]); + SetSubspriteTables(healthBarSpritePtr, &sHealthBar_SubspriteTables[GetBattlerSide(battlerId)]); healthBarSpritePtr->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; healthBarSpritePtr->oam.priority = 1; - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void*)(OBJ_VRAM0 + healthBarSpritePtr->oam.tileNum * TILE_SIZE_4BPP), 64); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + healthBarSpritePtr->oam.tileNum * TILE_SIZE_4BPP), 64); gSprites[healthboxLeftSpriteId].hMain_HealthBarSpriteId = healthbarSpriteId; gSprites[healthboxLeftSpriteId].hMain_Battler = battlerId; gSprites[healthboxLeftSpriteId].invisible = TRUE; gSprites[healthboxRightSpriteId].invisible = TRUE; + gSprites[healthboxRightSpriteId].hOther_IndicatorSpriteId = 0xFF; healthBarSpritePtr->hBar_HealthBoxSpriteId = healthboxLeftSpriteId; healthBarSpritePtr->hBar_Data6 = data6; healthBarSpritePtr->invisible = TRUE; + // Create mega indicator sprite if is a mega evolved or a primal reverted mon. + if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]] + || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + { + megaIndicatorSpriteId = CreateMegaIndicatorSprite(battlerId, 0); + gSprites[megaIndicatorSpriteId].invisible = TRUE; + } + + gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; + gBattleStruct->ballSpriteIds[1] = MAX_SPRITES; + return healthboxLeftSpriteId; } @@ -957,6 +884,8 @@ u8 CreateSafariPlayerHealthboxSprites(void) gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; gSprites[healthboxRightSpriteId].hOther_HealthBoxSpriteId = healthboxLeftSpriteId; + gSprites[healthboxRightSpriteId].hOther_IndicatorSpriteId = 0xFF; + gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; return healthboxLeftSpriteId; @@ -996,12 +925,19 @@ static void SpriteCB_HealthBar(struct Sprite *sprite) static void SpriteCB_HealthBoxOther(struct Sprite *sprite) { u8 healthboxMainSpriteId = sprite->hOther_HealthBoxSpriteId; + u8 megaSpriteId = sprite->hOther_IndicatorSpriteId; sprite->x = gSprites[healthboxMainSpriteId].x + 64; sprite->y = gSprites[healthboxMainSpriteId].y; sprite->x2 = gSprites[healthboxMainSpriteId].x2; sprite->y2 = gSprites[healthboxMainSpriteId].y2; + + if (megaSpriteId != 0xFF) + { + gSprites[megaSpriteId].x2 = sprite->x2; + gSprites[megaSpriteId].y2 = sprite->y2; + } } void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldVal, s32 receivedValue) @@ -1015,6 +951,7 @@ void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldV void SetHealthboxSpriteInvisible(u8 healthboxSpriteId) { + DestroyMegaIndicatorSprite(healthboxSpriteId); gSprites[healthboxSpriteId].invisible = TRUE; gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = TRUE; gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = TRUE; @@ -1022,9 +959,20 @@ void SetHealthboxSpriteInvisible(u8 healthboxSpriteId) void SetHealthboxSpriteVisible(u8 healthboxSpriteId) { + u8 battlerId = gSprites[healthboxSpriteId].hMain_Battler; + gSprites[healthboxSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE; + if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]] + || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + { + u8 spriteId = GetMegaIndicatorSpriteId(healthboxSpriteId); + if (spriteId != 0xFF) + gSprites[spriteId].invisible = FALSE; + else + CreateMegaIndicatorSprite(battlerId, 0); + } } static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) @@ -1035,6 +983,7 @@ static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) void DestoryHealthboxSprite(u8 healthboxSpriteId) { + DestroyMegaIndicatorSprite(healthboxSpriteId); DestroySprite(&gSprites[gSprites[healthboxSpriteId].oam.affineParam]); DestroySprite(&gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId]); DestroySprite(&gSprites[healthboxSpriteId]); @@ -1045,7 +994,29 @@ void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBattlerO } -void UpdateOamPriorityInAllHealthboxes(u8 priority) +static void TryToggleHealboxVisibility(u8 priority, u8 healthboxLeftSpriteId, u8 healthboxRightSpriteId, u8 healthbarSpriteId, u8 indicatorSpriteId) +{ + u8 spriteIds[4] = {healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId, indicatorSpriteId}; + int i; + + for (i = 0; i < NELEMS(spriteIds); i++) + { + if (spriteIds[i] == 0xFF) + continue; + + switch (priority) + { + case 0: //start of anim -> make invisible + gSprites[spriteIds[i]].invisible = TRUE; + break; + case 1: //end of anim -> make visible + gSprites[spriteIds[i]].invisible = FALSE; + break; + } + } +} + +void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes) { s32 i; @@ -1054,43 +1025,57 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority) u8 healthboxLeftSpriteId = gHealthboxSpriteIds[i]; u8 healthboxRightSpriteId = gSprites[gHealthboxSpriteIds[i]].oam.affineParam; u8 healthbarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; + u8 indicatorSpriteId = GetMegaIndicatorSpriteId(healthboxLeftSpriteId); gSprites[healthboxLeftSpriteId].oam.priority = priority; gSprites[healthboxRightSpriteId].oam.priority = priority; gSprites[healthbarSpriteId].oam.priority = priority; + if (indicatorSpriteId != 0xFF) + gSprites[indicatorSpriteId].oam.priority = priority; + + #if B_HIDE_HEALTHBOX_IN_ANIMS + if (hideHPBoxes && IsBattlerAlive(i)) + TryToggleHealboxVisibility(priority, healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId, indicatorSpriteId); + #endif } } -void InitBattlerHealthboxCoords(u8 battler) +void GetBattlerHealthboxCoords(u8 battler, s16 *x, s16 *y) { - s16 x = 0, y = 0; + *x = 0, *y = 0; - if (!IsDoubleBattle()) + if (!WhichBattleCoords(battler)) { if (GetBattlerSide(battler) != B_SIDE_PLAYER) - x = 44, y = 30; + *x = 44, *y = 30; else - x = 158, y = 88; + *x = 158, *y = 88; } else { switch (GetBattlerPosition(battler)) { case B_POSITION_PLAYER_LEFT: - x = 159, y = 76; + *x = 159, *y = 76; break; case B_POSITION_PLAYER_RIGHT: - x = 171, y = 101; + *x = 171, *y = 101; break; case B_POSITION_OPPONENT_LEFT: - x = 44, y = 19; + *x = 44, *y = 19; break; case B_POSITION_OPPONENT_RIGHT: - x = 32, y = 44; + *x = 32, *y = 44; break; } } +} +void InitBattlerHealthboxCoords(u8 battler) +{ + s16 x, y; + + GetBattlerHealthboxCoords(battler, &x, &y); UpdateSpritePos(gHealthboxSpriteIds[battler], x, y); } @@ -1101,202 +1086,188 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) u8 text[16]; u32 xPos; u8 *objVram; - - text[0] = CHAR_EXTRA_SYMBOL; - text[1] = CHAR_LV_2; + u8 battler = gSprites[healthboxSpriteId].hMain_Battler; + + // Don't print Lv char if mon is mega evolved or primal reverted. + if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]] + || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]]) + { + objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); + xPos = 5 * (3 - (objVram - (text + 2))) - 1; + } + else + { + text[0] = CHAR_EXTRA_SYMBOL; + text[1] = CHAR_LV_2; + + objVram = ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); + xPos = 5 * (3 - (objVram - (text + 2))); + } - objVram = ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); xPos = 5 * (3 - (objVram - (text + 2))); - windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, 2, &windowId); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; - if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER) + if (GetBattlerSide(battler) == B_SIDE_PLAYER) { - objVram = (void*)(OBJ_VRAM0); - if (!IsDoubleBattle()) + objVram = (void *)(OBJ_VRAM0); + if (!WhichBattleCoords(battler)) objVram += spriteTileNum + 0x820; else objVram += spriteTileNum + 0x420; } else { - objVram = (void*)(OBJ_VRAM0); + objVram = (void *)(OBJ_VRAM0); objVram += spriteTileNum + 0x400; } TextIntoHealthboxObject(objVram, windowTileData, 3); RemoveWindowOnHealthbox(windowId); } -void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) +static void PrintHpOnHealthbox(u32 spriteId, s16 currHp, s16 maxHp, u32 bgColor, u32 rightTile, u32 leftTile) { - u32 windowId, spriteTileNum; u8 *windowTileData; - u8 text[32]; - void *objVram; + u32 windowId, tilesCount, x, healthboxTileNum; + u8 text[28], *txtPtr; + void *objVram = (void *)(OBJ_VRAM0) + gSprites[spriteId].oam.tileNum * TILE_SIZE_4BPP; - if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER && !IsDoubleBattle()) - { - spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; - if (maxOrCurrent != HP_CURRENT) // singles, max - { - ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3); - windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 0, 5, 2, &windowId); - objVram = (void*)(OBJ_VRAM0); - objVram += spriteTileNum + 0xB40; - HpTextIntoHealthboxObject(objVram, windowTileData, 2); - RemoveWindowOnHealthbox(windowId); - } - else // singles, current - { - ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3); - text[3] = CHAR_SLASH; - text[4] = EOS; - windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 4, 5, 2, &windowId); - objVram = (void*)(OBJ_VRAM0); - objVram += spriteTileNum + 0x3E0; - HpTextIntoHealthboxObject(objVram, windowTileData, 1); - objVram = (void*)(OBJ_VRAM0); - objVram += spriteTileNum + 0xB00; - HpTextIntoHealthboxObject(objVram, windowTileData + 0x20, 2); - RemoveWindowOnHealthbox(windowId); - } - } + // To fit 4 digit HP values we need to modify a bit the way hp is printed on Healthbox. + // 6 chars can fit on the right healthbox, the rest goes to the left one + txtPtr = ConvertIntToDecimalStringN(text, currHp, STR_CONV_MODE_RIGHT_ALIGN, 4); + *txtPtr++ = CHAR_SLASH; + txtPtr = ConvertIntToDecimalStringN(txtPtr, maxHp, STR_CONV_MODE_LEFT_ALIGN, 4); + // Print last 6 chars on the right window + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(txtPtr - 6, 0, 5, bgColor, &windowId); + HpTextIntoHealthboxObject(objVram + rightTile, windowTileData, 4); + RemoveWindowOnHealthbox(windowId); + // Print the rest of the chars on the left window + txtPtr[-6] = EOS; + // if max hp is 3 digits print on block closer to the right window, if 4 digits print further from the right window + if (maxHp >= 1000) + x = 9, tilesCount = 3; else + x = 6, tilesCount = 2, leftTile += 0x20; + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, x, 5, bgColor, &windowId); + HpTextIntoHealthboxObject(objVram + leftTile, windowTileData, tilesCount); + RemoveWindowOnHealthbox(windowId); +} + +// Note: this is only possible to trigger via debug, it was an unused GF function. +static void UpdateOpponentHpTextDoubles(u32 healthboxSpriteId, u32 barSpriteId, s16 value, u8 maxOrCurrent) +{ + u8 text[32], *txtPtr; + u32 i, var; + u32 battlerId = gSprites[healthboxSpriteId].hMain_Battler; + + if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) // don't print text if only bars are visible { - u8 battler; - - memcpy(text, sUnknown_0832C3C4, sizeof(sUnknown_0832C3C4)); - battler = gSprites[healthboxSpriteId].hMain_Battler; - if (IsDoubleBattle() == TRUE || GetBattlerSide(battler) == B_SIDE_OPPONENT) - { - UpdateHpTextInHealthboxInDoubles(healthboxSpriteId, value, maxOrCurrent); - } + memcpy(text, sEmptyWhiteText_TransparentHighlight, sizeof(sEmptyWhiteText_TransparentHighlight)); + if (maxOrCurrent == HP_CURRENT) + var = 0; else - { - u32 var; - u8 i; + var = 4; - if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER) + txtPtr = ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3); + if (!maxOrCurrent) + StringCopy(txtPtr, gText_Slash); + RenderTextHandleBold(gMonSpritesGfxPtr->barFontGfx, FONT_BOLD, text); + + for (i = var; i < var + 3; i++) + { + if (i < 3) { - if (maxOrCurrent == HP_CURRENT) - var = 29; - else - var = 89; + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32], + (void *)((OBJ_VRAM0) + 32 * (1 + gSprites[barSpriteId].oam.tileNum + i)), + 0x20); } else { - if (maxOrCurrent == HP_CURRENT) - var = 20; - else - var = 48; + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32], + (void *)((OBJ_VRAM0 + 0x20) + 32 * (i + gSprites[barSpriteId].oam.tileNum)), + 0x20); } + } - ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3); - RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 9, text); - - for (i = 0; i < 3; i++) - { - CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[i * 64 + 32], - (void*)((OBJ_VRAM0) + TILE_SIZE_4BPP * (gSprites[healthboxSpriteId].oam.tileNum + var + i)), - 0x20); - } + if (maxOrCurrent == HP_CURRENT) + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[224], + (void *)((OBJ_VRAM0) + ((gSprites[barSpriteId].oam.tileNum + 4) * TILE_SIZE_4BPP)), + 0x20); + CpuFill32(0, (void *)((OBJ_VRAM0) + (gSprites[barSpriteId].oam.tileNum * TILE_SIZE_4BPP)), 0x20); } } } -static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) +// Same with this one. +static void UpdateOpponentHpTextSingles(u32 healthboxSpriteId, s16 value, u32 maxOrCurrent) { - u32 windowId, spriteTileNum; - u8 *windowTileData; u8 text[32]; - void *objVram; + u32 var, i; + u32 battler = gSprites[healthboxSpriteId].hMain_Battler; + + memcpy(text, sEmptyWhiteText_GrayHighlight, sizeof(sEmptyWhiteText_GrayHighlight)); + if (gBattleSpritesDataPtr->battlerData[battler].hpNumbersNoBars) // don't print text if only bars are visible + { + if (maxOrCurrent == HP_CURRENT) + var = 21; + else + var = 49; + + ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_LEADING_ZEROS, 3); + RenderTextHandleBold(gMonSpritesGfxPtr->barFontGfx, FONT_BOLD, text); + + for (i = 0; i < 3; i++) + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[i * 64 + 32], + (void *)((OBJ_VRAM0) + TILE_SIZE_4BPP * (gSprites[healthboxSpriteId].oam.tileNum + var + i)), + 0x20); + } + } +} + +void UpdateHpTextInHealthbox(u32 healthboxSpriteId, u32 maxOrCurrent, s16 currHp, s16 maxHp) +{ + u32 battlerId = gSprites[healthboxSpriteId].hMain_Battler; + if (WhichBattleCoords(battlerId)) + { + UpdateHpTextInHealthboxInDoubles(healthboxSpriteId, maxOrCurrent, currHp, maxHp); + } + else // Single Battle + { + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // Player + { + PrintHpOnHealthbox(healthboxSpriteId, currHp, maxHp, 2, 0xB00, 0x3A0); + } + else // Opponent + { + UpdateOpponentHpTextSingles(healthboxSpriteId, currHp, HP_CURRENT); + UpdateOpponentHpTextSingles(healthboxSpriteId, maxHp, HP_MAX); + } + } +} + +static void UpdateHpTextInHealthboxInDoubles(u32 healthboxSpriteId, u32 maxOrCurrent, s16 currHp, s16 maxHp) +{ + u32 barSpriteId = gSprites[healthboxSpriteId].data[5]; if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER) { if (gBattleSpritesDataPtr->battlerData[gSprites[healthboxSpriteId].data[6]].hpNumbersNoBars) // don't print text if only bars are visible { - spriteTileNum = gSprites[gSprites[healthboxSpriteId].data[5]].oam.tileNum * TILE_SIZE_4BPP; - objVram = (void*)(OBJ_VRAM0) + spriteTileNum; - - if (maxOrCurrent != HP_CURRENT) // doubles, max hp - { - ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3); - windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 0, 5, 0, &windowId); - HpTextIntoHealthboxObject((void*)(OBJ_VRAM0) + spriteTileNum + 0xC0, windowTileData, 2); - RemoveWindowOnHealthbox(windowId); - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116), - (void*)(OBJ_VRAM0 + 0x680) + (gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP), + PrintHpOnHealthbox(barSpriteId, currHp, maxHp, 0, 0x80, 0x20); + // Clears the end of the healthbar gfx. + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_FRAME_END), + (void *)(OBJ_VRAM0 + 0x680) + (gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP), 0x20); - } - else - { - ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3); - text[3] = CHAR_SLASH; - text[4] = EOS; - windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 4, 5, 0, &windowId); - FillHealthboxObject(objVram, 0, 3); // Erases HP bar leftover. - HpTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x60) + spriteTileNum, windowTileData, 3); - RemoveWindowOnHealthbox(windowId); - } + // Erases HP bar leftover. + FillHealthboxObject((void *)(OBJ_VRAM0) + (gSprites[barSpriteId].oam.tileNum * TILE_SIZE_4BPP), 0, 2); } } - else + else // Opponent { - u8 battlerId; - - memcpy(text, sUnknown_0832C3D8, sizeof(sUnknown_0832C3D8)); - battlerId = gSprites[healthboxSpriteId].hMain_Battler; - - if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) // don't print text if only bars are visible - { - u8 var = 4; - u8 r7; - u8 *txtPtr; - u8 i; - - if (maxOrCurrent == HP_CURRENT) - var = 0; - - r7 = gSprites[healthboxSpriteId].data[5]; - txtPtr = ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3); - if (!maxOrCurrent) - StringCopy(txtPtr, gText_Slash); - RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 9, text); - - for (i = var; i < var + 3; i++) - { - if (i < 3) - { - CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32], - (void*)((OBJ_VRAM0) + 32 * (1 + gSprites[r7].oam.tileNum + i)), - 0x20); - } - else - { - CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32], - (void*)((OBJ_VRAM0 + 0x20) + 32 * (i + gSprites[r7].oam.tileNum)), - 0x20); - } - } - - if (maxOrCurrent == HP_CURRENT) - { - CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[224], - (void*)((OBJ_VRAM0) + ((gSprites[r7].oam.tileNum + 4) * TILE_SIZE_4BPP)), - 0x20); - CpuFill32(0, (void*)((OBJ_VRAM0) + (gSprites[r7].oam.tileNum * TILE_SIZE_4BPP)), 0x20); - } - else - { - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // Impossible to reach part, because the battlerId is from the opponent's side. - { - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116), - (void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * TILE_SIZE_4BPP), - 0x20); - } - } - } + UpdateOpponentHpTextDoubles(healthboxSpriteId, barSpriteId, maxHp, HP_MAX); + UpdateOpponentHpTextDoubles(healthboxSpriteId, barSpriteId, currHp, HP_CURRENT); } } @@ -1308,12 +1279,12 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) u8 *barFontGfx; u8 i, var, nature, healthBarSpriteId; - memcpy(text, sUnknown_0832C3C4, sizeof(sUnknown_0832C3C4)); + memcpy(text, sEmptyWhiteText_GrayHighlight, sizeof(sEmptyWhiteText_GrayHighlight)); barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].hMain_Battler) * 384)]; var = 5; nature = GetNature(mon); - StringCopy(text + 6, gNatureNamePointers[nature]); - RenderTextFont9(barFontGfx, 9, text); + StringCopy(&text[6], gNatureNamePointers[nature]); + RenderTextHandleBold(barFontGfx, FONT_BOLD, text); for (j = 6, i = 0; i < var; i++, j++) { @@ -1332,20 +1303,20 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) for (j = 1; j < var + 1; j++) { spriteTileNum = (gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * TILE_SIZE_4BPP; - CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (spriteTileNum), 0x20); + CpuCopy32(barFontGfx, (void *)(OBJ_VRAM0) + (spriteTileNum), 0x20); barFontGfx += 0x20; spriteTileNum = (8 + gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * TILE_SIZE_4BPP; - CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (spriteTileNum), 0x20); + CpuCopy32(barFontGfx, (void *)(OBJ_VRAM0) + (spriteTileNum), 0x20); barFontGfx += 0x20; } healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; - ConvertIntToDecimalStringN(text + 6, gBattleStruct->safariCatchFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); - ConvertIntToDecimalStringN(text + 9, gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(&text[6], gBattleStruct->safariCatchFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(&text[9], gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); text[5] = CHAR_SPACE; text[8] = CHAR_SLASH; - RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 9, text); + RenderTextHandleBold(gMonSpritesGfxPtr->barFontGfx, FONT_BOLD, text); j = healthBarSpriteId; // Needed to match for some reason. for (j = 0; j < 5; j++) @@ -1353,13 +1324,13 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) if (j <= 1) { CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20], - (void*)(OBJ_VRAM0) + (gSprites[healthBarSpriteId].oam.tileNum + 2 + j) * TILE_SIZE_4BPP, + (void *)(OBJ_VRAM0) + (gSprites[healthBarSpriteId].oam.tileNum + 2 + j) * TILE_SIZE_4BPP, 32); } else { CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20], - (void*)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthBarSpriteId].oam.tileNum) * TILE_SIZE_4BPP, + (void *)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthBarSpriteId].oam.tileNum) * TILE_SIZE_4BPP, 32); } } @@ -1367,22 +1338,23 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) void SwapHpBarsWithHpText(void) { - s32 i; - u8 healthBarSpriteId; + u32 healthBarSpriteId, i; for (i = 0; i < gBattlersCount; i++) { if (gSprites[gHealthboxSpriteIds[i]].callback == SpriteCallbackDummy && GetBattlerSide(i) != B_SIDE_OPPONENT - && (IsDoubleBattle() || GetBattlerSide(i) != B_SIDE_PLAYER)) + && (WhichBattleCoords(i) || GetBattlerSide(i) != B_SIDE_PLAYER)) { + s32 currHp = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_HP); + s32 maxHp = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP); bool8 noBars; gBattleSpritesDataPtr->battlerData[i].hpNumbersNoBars ^= 1; noBars = gBattleSpritesDataPtr->battlerData[i].hpNumbersNoBars; if (GetBattlerSide(i) == B_SIDE_PLAYER) { - if (!IsDoubleBattle()) + if (!WhichBattleCoords(i)) continue; if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) continue; @@ -1391,15 +1363,14 @@ void SwapHpBarsWithHpText(void) { healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; - CpuFill32(0, (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 0x100); - UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT); - UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX); + CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 0x100); + UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], HP_BOTH, currHp, maxHp); } else // text to bars { UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]); UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gPlayerParty[gBattlerPartyIndexes[i]], HEALTHBOX_HEALTH_BAR); - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_117), (void*)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_FRAME_END_BAR), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32); } } else @@ -1416,8 +1387,7 @@ void SwapHpBarsWithHpText(void) healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 0x100); - UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT); - UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX); + UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], HP_BOTH, currHp, maxHp); } } else // text to bars @@ -1433,13 +1403,230 @@ void SwapHpBarsWithHpText(void) } } +// Mega Evolution gfx 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 != 0xFF) + { + ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, 0); + gSprites[gBattleStruct->mega.triggerSpriteId].tHide = TRUE; + } +} + +void HideTriggerSprites(void) +{ + HideMegaTriggerSprite(); + HideZMoveTriggerSprite(); +} + +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; +} + +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}, +}; + +u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) +{ + u32 spriteId, position; + s16 x, y; + + if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + { + LoadSpritePalette(&sSpritePalette_MegaIndicator); + LoadSpriteSheet(&sSpriteSheet_MegaIndicator); + } + else if (gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + { + if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON) + { + LoadSpritePalette(&sSpritePalette_OmegaIndicator); + LoadSpriteSheet(&sSpriteSheet_OmegaIndicator); + } + else if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_KYOGRE) + { + LoadSpritePalette(&sSpritePalette_AlphaIndicator); + LoadSpriteSheet(&sSpriteSheet_AlphaIndicator); + } + } + + position = GetBattlerPosition(battlerId); + GetBattlerHealthboxCoords(battlerId, &x, &y); + + x += sIndicatorPositions[position][0]; + y += sIndicatorPositions[position][1]; + + if (gBattleMons[battlerId].level >= 100) + x -= 4; + else if (gBattleMons[battlerId].level < 10) + x += 5; + + if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + { + spriteId = CreateSpriteAtEnd(&sSpriteTemplate_MegaIndicator, x, y, 0); + } + else if (gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + { + if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON) + spriteId = CreateSpriteAtEnd(&sSpriteTemplate_OmegaIndicator, x, y, 0); + else if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_KYOGRE) + spriteId = CreateSpriteAtEnd(&sSpriteTemplate_AlphaIndicator, x, y, 0); + } + + gSprites[gSprites[gHealthboxSpriteIds[battlerId]].oam.affineParam].hOther_IndicatorSpriteId = spriteId; + gSprites[spriteId].tBattler = battlerId; + return spriteId; +} + +void DestroyMegaIndicatorSprite(u32 healthboxSpriteId) +{ + u32 i; + s16 *spriteId = &gSprites[gSprites[healthboxSpriteId].oam.affineParam].hOther_IndicatorSpriteId; + + if (*spriteId != 0xFF) + { + DestroySprite(&gSprites[*spriteId]); + *spriteId = 0xFF; + } + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (gSprites[gSprites[gHealthboxSpriteIds[i]].oam.affineParam].hOther_IndicatorSpriteId != 0xFF) + break; + } + // Free Sprite pal/tiles only if no indicator sprite is active for all battlers. + if (i == MAX_BATTLERS_COUNT) + { + FreeSpritePaletteByTag(TAG_MEGA_INDICATOR_PAL); + FreeSpriteTilesByTag(TAG_MEGA_INDICATOR_TILE); + } +} + +static void SpriteCb_MegaIndicator(struct Sprite *sprite) +{ + +} + +#undef tBattler +#undef tHide + #define tBattler data[0] #define tSummaryBarSpriteId data[1] #define tBallIconSpriteId(n) data[3 + n] #define tIsBattleStart data[10] -#define tData15 data[15] +#define tBlend data[15] -u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) +u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart) { bool8 isOpponent; s16 bar_X, bar_Y, bar_pos2_X, bar_data0; @@ -1448,7 +1635,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 ballIconSpritesIds[PARTY_SIZE]; u8 taskId; - if (!arg2 || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT) + if (!skipPlayer || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT) { if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { @@ -1461,7 +1648,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { isOpponent = TRUE; - if (!arg2 || !IsDoubleBattle()) + if (!skipPlayer || !WhichBattleCoords(battlerId)) bar_X = 104, bar_Y = 40; else bar_X = 104, bar_Y = 16; @@ -1484,7 +1671,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, LoadSpritePalette(&sStatusSummaryBallsSpritePal); summaryBarSpriteId = CreateSprite(&sStatusSummaryBarSpriteTemplates[isOpponent], bar_X, bar_Y, 10); - SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable); + SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable_Enter); gSprites[summaryBarSpriteId].x2 = bar_pos2_X; gSprites[summaryBarSpriteId].data[0] = bar_data0; @@ -1503,7 +1690,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, ballIconSpritesIds[i] = CreateSpriteAtEnd(&sStatusSummaryBallsSpriteTemplates[isOpponent], bar_X, bar_Y - 4, 9); if (!isBattleStart) - gSprites[ballIconSpritesIds[i]].callback = SpriteCB_StatusSummaryBallsOnSwitchout; + gSprites[ballIconSpritesIds[i]].callback = SpriteCB_StatusSummaryBalls_OnSwitchout; if (!isOpponent) { @@ -1535,42 +1722,49 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { for (i = 0; i < PARTY_SIZE; i++) { - if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg + if (partyInfo[i].hp == HP_EMPTY_SLOT) { + // empty slot or an egg gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; gSprites[ballIconSpritesIds[i]].data[7] = 1; } - else if (partyInfo[i].hp == 0) // fainted mon + else if (partyInfo[i].hp == 0) { + // fainted mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; } - else if (partyInfo[i].status != 0) // mon with major status + else if (partyInfo[i].status != 0) { + // mon with major status gSprites[ballIconSpritesIds[i]].oam.tileNum += 2; } } } else { - for (i = 0, var = 5, j = 0; j < PARTY_SIZE; j++) + for (i = 0, var = PARTY_SIZE - 1, j = 0; j < PARTY_SIZE; j++) { - if (partyInfo[j].hp == 0xFFFF) // empty slot or an egg + if (partyInfo[j].hp == HP_EMPTY_SLOT) { + // empty slot or an egg gSprites[ballIconSpritesIds[var]].oam.tileNum += 1; gSprites[ballIconSpritesIds[var]].data[7] = 1; var--; continue; } - else if (partyInfo[j].hp == 0) // fainted mon + else if (partyInfo[j].hp == 0) { + // fainted mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; } else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostPlayerMons & gBitTable[j]) { + // fainted arena mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; } - else if (partyInfo[j].status != 0) // mon with major status + else if (partyInfo[j].status != 0) { + // mon with primary status gSprites[ballIconSpritesIds[i]].oam.tileNum += 2; } i++; @@ -1581,19 +1775,22 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS)) { - for (var = 5, i = 0; i < PARTY_SIZE; i++) + for (var = PARTY_SIZE - 1, i = 0; i < PARTY_SIZE; i++) { - if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg + if (partyInfo[i].hp == HP_EMPTY_SLOT) { + // empty slot or an egg gSprites[ballIconSpritesIds[var]].oam.tileNum += 1; gSprites[ballIconSpritesIds[var]].data[7] = 1; } - else if (partyInfo[i].hp == 0) // fainted mon + else if (partyInfo[i].hp == 0) { + // fainted mon gSprites[ballIconSpritesIds[var]].oam.tileNum += 3; } - else if (partyInfo[i].status != 0) // mon with major status + else if (partyInfo[i].status != 0) { + // mon with primary status gSprites[ballIconSpritesIds[var]].oam.tileNum += 2; } var--; @@ -1603,24 +1800,28 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { for (var = 0, i = 0, j = 0; j < PARTY_SIZE; j++) { - if (partyInfo[j].hp == 0xFFFF) // empty slot or an egg + if (partyInfo[j].hp == HP_EMPTY_SLOT) { + // empty slot or an egg gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; gSprites[ballIconSpritesIds[i]].data[7] = 1; i++; continue; } - else if (partyInfo[j].hp == 0) // fainted mon + else if (partyInfo[j].hp == 0) { - gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 3; + // fainted mon + gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 3; } - else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & gBitTable[j]) // hmm...? + else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & gBitTable[j]) { - gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 3; + // fainted arena mon + gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 3; } - else if (partyInfo[j].status != 0) // mon with major status + else if (partyInfo[j].status != 0) { - gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 2; + // mon with primary status + gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 2; } var++; } @@ -1645,6 +1846,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, return taskId; } +// Slide the party summary tray back offscreen void Task_HidePartyStatusSummary(u8 taskId) { u8 ballIconSpriteIds[PARTY_SIZE]; @@ -1663,7 +1865,7 @@ void Task_HidePartyStatusSummary(u8 taskId) SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); - gTasks[taskId].tData15 = 16; + gTasks[taskId].tBlend = 16; for (i = 0; i < PARTY_SIZE; i++) gSprites[ballIconSpriteIds[i]].oam.objMode = ST_OAM_OBJ_BLEND; @@ -1676,51 +1878,51 @@ void Task_HidePartyStatusSummary(u8 taskId) { if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) { - gSprites[ballIconSpriteIds[5 - i]].data[1] = 7 * i; - gSprites[ballIconSpriteIds[5 - i]].data[3] = 0; - gSprites[ballIconSpriteIds[5 - i]].data[4] = 0; - gSprites[ballIconSpriteIds[5 - i]].callback = sub_8074158; + gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[1] = 7 * i; + gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[3] = 0; + gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[4] = 0; + gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].callback = SpriteCB_StatusSummaryBalls_Exit; } else { gSprites[ballIconSpriteIds[i]].data[1] = 7 * i; gSprites[ballIconSpriteIds[i]].data[3] = 0; gSprites[ballIconSpriteIds[i]].data[4] = 0; - gSprites[ballIconSpriteIds[i]].callback = sub_8074158; + gSprites[ballIconSpriteIds[i]].callback = SpriteCB_StatusSummaryBalls_Exit; } } gSprites[summaryBarSpriteId].data[0] /= 2; gSprites[summaryBarSpriteId].data[1] = 0; - gSprites[summaryBarSpriteId].callback = sub_8074090; - SetSubspriteTables(&gSprites[summaryBarSpriteId], sUnknown_0832C2CC); - gTasks[taskId].func = sub_8073E08; + gSprites[summaryBarSpriteId].callback = SpriteCB_StatusSummaryBar_Exit; + SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable_Exit); + gTasks[taskId].func = Task_HidePartyStatusSummary_BattleStart_1; } else { - gTasks[taskId].func = sub_8073F98; + gTasks[taskId].func = Task_HidePartyStatusSummary_DuringBattle; } } -static void sub_8073E08(u8 taskId) +static void Task_HidePartyStatusSummary_BattleStart_1(u8 taskId) { if ((gTasks[taskId].data[11]++ % 2) == 0) { - if (--gTasks[taskId].tData15 < 0) + if (--gTasks[taskId].tBlend < 0) return; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15])); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend)); } - if (gTasks[taskId].tData15 == 0) - gTasks[taskId].func = sub_8073E64; + if (gTasks[taskId].tBlend == 0) + gTasks[taskId].func = Task_HidePartyStatusSummary_BattleStart_2; } -static void sub_8073E64(u8 taskId) +static void Task_HidePartyStatusSummary_BattleStart_2(u8 taskId) { u8 ballIconSpriteIds[PARTY_SIZE]; s32 i; u8 battlerId = gTasks[taskId].tBattler; - if (--gTasks[taskId].tData15 == -1) + if (--gTasks[taskId].tBlend == -1) { u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; @@ -1744,7 +1946,7 @@ static void sub_8073E64(u8 taskId) for (i = 1; i < PARTY_SIZE; i++) DestroySprite(&gSprites[ballIconSpriteIds[i]]); } - else if (gTasks[taskId].tData15 == -3) + else if (gTasks[taskId].tBlend == -3) { gBattleSpritesDataPtr->healthBoxesData[battlerId].partyStatusSummaryShown = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -1753,17 +1955,17 @@ static void sub_8073E64(u8 taskId) } } -static void sub_8073F98(u8 taskId) +static void Task_HidePartyStatusSummary_DuringBattle(u8 taskId) { u8 ballIconSpriteIds[PARTY_SIZE]; s32 i; u8 battlerId = gTasks[taskId].tBattler; - if (--gTasks[taskId].tData15 >= 0) + if (--gTasks[taskId].tBlend >= 0) { - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15])); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend)); } - else if (gTasks[taskId].tData15 == -1) + else if (gTasks[taskId].tBlend == -1) { u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; @@ -1776,7 +1978,7 @@ static void sub_8073F98(u8 taskId) for (i = 1; i < PARTY_SIZE; i++) DestroySprite(&gSprites[ballIconSpriteIds[i]]); } - else if (gTasks[taskId].tData15 == -3) + else if (gTasks[taskId].tBlend == -3) { gBattleSpritesDataPtr->healthBoxesData[battlerId].partyStatusSummaryShown = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -1789,15 +1991,15 @@ static void sub_8073F98(u8 taskId) #undef tSummaryBarSpriteId #undef tBallIconSpriteId #undef tIsBattleStart -#undef tData15 +#undef tBlend -static void SpriteCB_StatusSummaryBar(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBar_Enter(struct Sprite *sprite) { if (sprite->x2 != 0) sprite->x2 += sprite->data[0]; } -static void sub_8074090(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBar_Exit(struct Sprite *sprite) { sprite->data[1] += 32; if (sprite->data[0] > 0) @@ -1807,7 +2009,7 @@ static void sub_8074090(struct Sprite *sprite) sprite->data[1] &= 0xF; } -static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *sprite) { u8 var1; u16 var2; @@ -1852,7 +2054,7 @@ static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) } } -static void sub_8074158(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *sprite) { u8 var1; u16 var2; @@ -1878,7 +2080,7 @@ static void sub_8074158(struct Sprite *sprite) } } -static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *sprite) { u8 barSpriteId = sprite->data[0]; @@ -1890,14 +2092,16 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) { u8 nickname[POKEMON_NAME_LENGTH + 1]; void *ptr; - u32 windowId, spriteTileNum; + u32 windowId, spriteTileNum, species; u8 *windowTileData; - u16 species; u8 gender; + struct Pokemon *illusionMon = GetIllusionMonPtr(gSprites[healthboxSpriteId].hMain_Battler); + if (illusionMon != NULL) + mon = illusionMon; - StringCopy(gDisplayedStringBattle, gText_HighlightDarkGray); + StringCopy(gDisplayedStringBattle, gText_HealthboxNickname); GetMonData(mon, MON_DATA_NICKNAME, nickname); - StringGetEnd10(nickname); + StringGet_Nickname(nickname); ptr = StringAppend(gDisplayedStringBattle, nickname); gender = GetMonGender(mon); @@ -1911,15 +2115,15 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) switch (gender) { default: - StringCopy(ptr, gText_DynColor2); + StringCopy(ptr, gText_HealthboxGender_None); windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId); break; case MON_MALE: - StringCopy(ptr, gText_DynColor2Male); + StringCopy(ptr, gText_HealthboxGender_Male); windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId); break; case MON_FEMALE: - StringCopy(ptr, gText_DynColor1Female); + StringCopy(ptr, gText_HealthboxGender_Female); windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId); break; } @@ -1928,9 +2132,9 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER) { - TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40 + spriteTileNum), windowTileData, 6); - ptr = (void*)(OBJ_VRAM0); - if (!IsDoubleBattle()) + TextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x40 + spriteTileNum), windowTileData, 6); + ptr = (void *)(OBJ_VRAM0); + if (!WhichBattleCoords(gSprites[healthboxSpriteId].data[6])) ptr += spriteTileNum + 0x800; else ptr += spriteTileNum + 0x400; @@ -1938,7 +2142,7 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) } else { - TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x20 + spriteTileNum), windowTileData, 7); + TextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x20 + spriteTileNum), windowTileData, 7); } RemoveWindowOnHealthbox(windowId); @@ -1962,9 +2166,9 @@ static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus) healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; if (noStatus) - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_70), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_STATUS_BALL_CAUGHT), (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); else - CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); + CpuFill32(0, (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); } static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) @@ -1981,7 +2185,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS); - if (!IsDoubleBattle()) + if (!WhichBattleCoords(battlerId)) tileNumAdder = 0x1A; else tileNumAdder = 0x12; @@ -2022,7 +2226,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) statusGfxPtr = GetHealthboxElementGfxPtr(HEALTHBOX_GFX_39); for (i = 0; i < 3; i++) - CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * TILE_SIZE_4BPP), 32); + CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * TILE_SIZE_4BPP), 32); if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 64); @@ -2035,14 +2239,14 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) pltAdder += battlerId + 12; FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2); - CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void*)(OBJ_PLTT + pltAdder * 2), 2); - CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96); - if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT) + CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void *)(OBJ_PLTT + pltAdder * 2), 2); + CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96); + if (WhichBattleCoords(battlerId) == 1 || GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) { - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 32); - CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * TILE_SIZE_4BPP), 32); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 32); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * TILE_SIZE_4BPP), 32); } } TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE); @@ -2115,8 +2319,8 @@ static void UpdateSafariBallsTextOnHealthbox(u8 healthboxSpriteId) windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gText_SafariBalls, 0, 3, 2, &windowId); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; - TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40) + spriteTileNum, windowTileData, 6); - TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x800) + spriteTileNum, windowTileData + 0xC0, 2); + TextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x40) + spriteTileNum, windowTileData, 6); + TextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x800) + spriteTileNum, windowTileData + 0xC0, 2); RemoveWindowOnHealthbox(windowId); } @@ -2130,40 +2334,40 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId) txtPtr = StringCopy(text, gText_SafariBallLeft); ConvertIntToDecimalStringN(txtPtr, gNumSafariBalls, STR_CONV_MODE_LEFT_ALIGN, 2); - windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, GetStringRightAlignXOffset(0, text, 0x2F), 3, 2, &windowId); + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, GetStringRightAlignXOffset(FONT_SMALL, text, 0x2F), 3, 2, &windowId); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; - SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2); - SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4); + SafariTextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2); + SafariTextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4); RemoveWindowOnHealthbox(windowId); } void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId) { - s32 maxHp, currHp; - u8 battlerId = gSprites[healthboxSpriteId].hMain_Battler; + u32 battlerId = gSprites[healthboxSpriteId].hMain_Battler; + s32 maxHp = GetMonData(mon, MON_DATA_MAX_HP); + s32 currHp = GetMonData(mon, MON_DATA_HP); - if (elementId == HEALTHBOX_ALL && !IsDoubleBattle()) - GetBattlerSide(battlerId); // Pointless function call. - - if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { - u8 isDoubles; + u8 isDoubles = WhichBattleCoords(battlerId); if (elementId == HEALTHBOX_LEVEL || elementId == HEALTHBOX_ALL) UpdateLvlInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_LEVEL)); - if (elementId == HEALTHBOX_CURRENT_HP || elementId == HEALTHBOX_ALL) - UpdateHpTextInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_HP), HP_CURRENT); - if (elementId == HEALTHBOX_MAX_HP || elementId == HEALTHBOX_ALL) - UpdateHpTextInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_MAX_HP), HP_MAX); + + if (elementId == HEALTHBOX_ALL) + UpdateHpTextInHealthbox(healthboxSpriteId, HP_BOTH, currHp, maxHp); + else if (elementId == HEALTHBOX_MAX_HP) + UpdateHpTextInHealthbox(healthboxSpriteId, HP_MAX, currHp, maxHp); + else if (elementId == HEALTHBOX_CURRENT_HP) + UpdateHpTextInHealthbox(healthboxSpriteId, HP_CURRENT, currHp, maxHp); + if (elementId == HEALTHBOX_HEALTH_BAR || elementId == HEALTHBOX_ALL) { LoadBattleBarGfx(0); - maxHp = GetMonData(mon, MON_DATA_MAX_HP); - currHp = GetMonData(mon, MON_DATA_HP); SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0); MoveBattleBar(battlerId, healthboxSpriteId, HEALTH_BAR, 0); } - isDoubles = IsDoubleBattle(); + if (!isDoubles && (elementId == HEALTHBOX_EXP_BAR || elementId == HEALTHBOX_ALL)) { u16 species; @@ -2194,11 +2398,18 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem { if (elementId == HEALTHBOX_LEVEL || elementId == HEALTHBOX_ALL) UpdateLvlInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_LEVEL)); + if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) + { + if (elementId == HEALTHBOX_ALL) + UpdateHpTextInHealthbox(healthboxSpriteId, HP_BOTH, currHp, maxHp); + else if (elementId == HEALTHBOX_MAX_HP) + UpdateHpTextInHealthbox(healthboxSpriteId, HP_MAX, currHp, maxHp); + else if (elementId == HEALTHBOX_CURRENT_HP) + UpdateHpTextInHealthbox(healthboxSpriteId, HP_CURRENT, currHp, maxHp); + } if (elementId == HEALTHBOX_HEALTH_BAR || elementId == HEALTHBOX_ALL) { LoadBattleBarGfx(0); - maxHp = GetMonData(mon, MON_DATA_MAX_HP); - currHp = GetMonData(mon, MON_DATA_HP); SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0); MoveBattleBar(battlerId, healthboxSpriteId, HEALTH_BAR, 0); } @@ -2222,7 +2433,11 @@ s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused) gBattleSpritesDataPtr->battleBars[battlerId].oldValue, gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, &gBattleSpritesDataPtr->battleBars[battlerId].currValue, + #if B_FAST_HP_DRAIN == TRUE + B_HEALTHBAR_PIXELS / 8, max(gBattleSpritesDataPtr->battleBars[battlerId].maxValue / B_HEALTHBAR_PIXELS, 1)); + #else B_HEALTHBAR_PIXELS / 8, 1); + #endif } else // exp bar { @@ -2277,10 +2492,10 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar) u8 healthbarSpriteId = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].hMain_HealthBarSpriteId; if (i < 2) CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32, - (void*)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * TILE_SIZE_4BPP), 32); + (void *)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * TILE_SIZE_4BPP), 32); else CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32, - (void*)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32); + (void *)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32); } break; case EXP_BAR: @@ -2299,10 +2514,10 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar) { if (i < 4) CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32, - (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * TILE_SIZE_4BPP), 32); + (void *)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * TILE_SIZE_4BPP), 32); else CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32, - (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32); + (void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32); } break; } @@ -2387,7 +2602,7 @@ static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *c return ret; } -static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale) +static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *pixelsArray, u8 scale) { u8 pixels, filledPixels, totalPixels; u8 i; @@ -2401,7 +2616,7 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 totalPixels = scale * 8; for (i = 0; i < scale; i++) - arg4[i] = 0; + pixelsArray[i] = 0; if (maxValue < totalPixels) pixels = (*currValue * totalPixels / maxValue) >> 8; @@ -2412,7 +2627,7 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 if (filledPixels == 0 && newValue > 0) { - arg4[0] = 1; + pixelsArray[0] = 1; filledPixels = 1; } else @@ -2421,11 +2636,11 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 { if (pixels >= 8) { - arg4[i] = 8; + pixelsArray[i] = 8; } else { - arg4[i] = pixels; + pixelsArray[i] = pixels; break; } pixels -= 8; @@ -2435,42 +2650,6 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 return filledPixels; } -// These two functions seem as if they were made for testing the health bar. -static s16 sub_8074F28(struct TestingBar *barInfo, s32 *currValue, u16 *arg2, s32 arg3) -{ - s16 ret, var; - - ret = CalcNewBarValue(barInfo->maxValue, - barInfo->oldValue, - barInfo->receivedValue, - currValue, B_HEALTHBAR_PIXELS / 8, 1); - sub_8074F88(barInfo, currValue, arg2); - - if (barInfo->maxValue < B_HEALTHBAR_PIXELS) - var = *currValue >> 8; - else - var = *currValue; - - DummiedOutFunction(barInfo->maxValue, var, arg3); - - return ret; -} - -static void sub_8074F88(struct TestingBar *barInfo, s32 *currValue, u16 *arg2) -{ - u8 sp8[6]; - u16 sp10[6]; - u8 i; - - CalcBarFilledPixels(barInfo->maxValue, barInfo->oldValue, - barInfo->receivedValue, currValue, sp8, B_HEALTHBAR_PIXELS / 8); - - for (i = 0; i < 6; i++) - sp10[i] = (barInfo->unkC_0 << 12) | (barInfo->unk10 + sp8[i]); - - CpuCopy16(sp10, arg2, sizeof(sp10)); -} - static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale) { s32 newVal, result; @@ -2525,7 +2704,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 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId) { u16 winId; u8 color[3]; @@ -2538,10 +2717,10 @@ static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, color[1] = 1; color[2] = 3; - AddTextPrinterParameterized4(winId, 0, x, y, 0, 0, color, -1, str); + AddTextPrinterParameterized4(winId, FONT_SMALL, x, y, 0, 0, color, TEXT_SKIP_DRAW, str); *windowId = winId; - return (u8*)(GetWindowAttribute(winId, WINDOW_TILE_DATA)); + return (u8 *)(GetWindowAttribute(winId, WINDOW_TILE_DATA)); } static void RemoveWindowOnHealthbox(u32 windowId) @@ -2549,9 +2728,9 @@ static void RemoveWindowOnHealthbox(u32 windowId) RemoveWindow(windowId); } -static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2) +static void FillHealthboxObject(void *dest, u32 valMult, u32 numTiles) { - CpuFill32(0x11111111 * arg1, dest, arg2 * TILE_SIZE_4BPP); + CpuFill32(0x11111111 * valMult, dest, numTiles * TILE_SIZE_4BPP); } static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth) @@ -2579,3 +2758,700 @@ static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 wi CpuCopy32(windowTileData, dest, windowWidth * TILE_SIZE_4BPP); CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP); } + +#define ABILITY_POP_UP_TAG 0xD720 + +// for sprite +#define tOriginalX data[0] +#define tHide data[1] +#define tFrames data[2] +#define tRightToLeft data[3] +#define tBattlerId data[4] +#define tIsMain data[5] + +// for task +#define tSpriteId1 data[6] +#define tSpriteId2 data[7] + +static const u8 sAbilityPopUpGfx[] = INCBIN_U8("graphics/battle_interface/ability_pop_up.4bpp"); +static const u16 sAbilityPopUpPalette[] = INCBIN_U16("graphics/battle_interface/ability_pop_up.gbapal"); + +static const struct SpriteSheet sSpriteSheet_AbilityPopUp = +{ + sAbilityPopUpGfx, sizeof(sAbilityPopUpGfx), ABILITY_POP_UP_TAG +}; +static const struct SpritePalette sSpritePalette_AbilityPopUp = +{ + sAbilityPopUpPalette, ABILITY_POP_UP_TAG +}; + +static const struct OamData sOamData_AbilityPopUp = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = ST_OAM_H_RECTANGLE, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_AbilityPopUp1[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_AbilityPopUp1[] = +{ + sSpriteAnim_AbilityPopUp1 +}; + +static const struct SpriteTemplate sSpriteTemplate_AbilityPopUp1 = +{ + .tileTag = ABILITY_POP_UP_TAG, + .paletteTag = ABILITY_POP_UP_TAG, + .oam = &sOamData_AbilityPopUp, + .anims = sSpriteAnimTable_AbilityPopUp1, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_AbilityPopUp +}; + +static const union AnimCmd sSpriteAnim_AbilityPopUp2[] = +{ + ANIMCMD_FRAME(32, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_AbilityPopUp2[] = +{ + sSpriteAnim_AbilityPopUp2 +}; + +static const struct SpriteTemplate sSpriteTemplate_AbilityPopUp2 = +{ + .tileTag = ABILITY_POP_UP_TAG, + .paletteTag = ABILITY_POP_UP_TAG, + .oam = &sOamData_AbilityPopUp, + .anims = sSpriteAnimTable_AbilityPopUp2, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_AbilityPopUp +}; + +#define ABILITY_POP_UP_POS_X_DIFF 64 +#define ABILITY_POP_UP_POS_X_SLIDE 68 + +static const s16 sAbilityPopUpCoordsDoubles[MAX_BATTLERS_COUNT][2] = +{ + {29, 80}, // player left + {186, 19}, // opponent left + {29, 97}, // player right + {186, 36}, // opponent right +}; + +static const s16 sAbilityPopUpCoordsSingles[MAX_BATTLERS_COUNT][2] = +{ + {29, 97}, // player + {186, 57}, // opponent +}; + +static u8* AddTextPrinterAndCreateWindowOnAbilityPopUp(const u8 *str, u32 x, u32 y, u32 color1, u32 color2, u32 color3, u32 *windowId) +{ + u8 color[3] = {color1, color2, color3}; + struct WindowTemplate winTemplate = {0}; + winTemplate.width = 8; + winTemplate.height = 2; + + *windowId = AddWindow(&winTemplate); + FillWindowPixelBuffer(*windowId, PIXEL_FILL(color1)); + + AddTextPrinterParameterized4(*windowId, 0, x, y, 0, 0, color, -1, str); + return (u8 *)(GetWindowAttribute(*windowId, WINDOW_TILE_DATA)); +} + +static void TextIntoAbilityPopUp(void *dest, u8 *windowTileData, s32 arg2, bool32 arg3) +{ + CpuCopy32(windowTileData + 256, dest + 256, arg2 * 32); + if (arg2 > 0) + { + do + { + if (arg3) + CpuCopy32(windowTileData + 16, dest + 16, 16); + else + CpuCopy32(windowTileData + 20, dest + 20, 12); + dest += 32, windowTileData += 32; + arg2--; + } while (arg2 != 0); + } +} + +#define MAX_CHARS_PRINTED 12 + +static void PrintOnAbilityPopUp(const u8 *str, u8 *spriteTileData1, u8 *spriteTileData2, u32 x1, u32 x2, u32 y, u32 color1, u32 color2, u32 color3, bool32 alignAbilityChars) +{ + u32 windowId, i; + u8 *windowTileData; + u8 text1[MAX_CHARS_PRINTED]; + u8 text2[MAX_CHARS_PRINTED]; + + for (i = 0; i < MAX_CHARS_PRINTED; i++) + { + text1[i] = str[i]; + if (text1[i] == EOS) + break; + } + text1[i] = EOS; + + // Because there are two Windows, we need to align the strings, so that the first char in the second window starts right after the last char in the first window. + // Windows are 64 pixels in width. + if (alignAbilityChars && i == MAX_CHARS_PRINTED) + { + u32 width = GetStringWidth(FONT_SMALL, text1, 0); + if (x1 + width < 64) + x1 += 64 - (x1 + width); + } + + windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text1, x1, y, color1, color2, color3, &windowId); + TextIntoAbilityPopUp(spriteTileData1, windowTileData, 8, (y == 0)); + RemoveWindow(windowId); + + if (i == MAX_CHARS_PRINTED) + { + for (i = 0; i < MAX_CHARS_PRINTED; i++) + { + text2[i] = str[MAX_CHARS_PRINTED + i]; + if (text2[i] == EOS) + break; + } + text2[i] = EOS; + + windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text2, x2, y, color1, color2, color3, &windowId); + TextIntoAbilityPopUp(spriteTileData2, windowTileData, 3, (y == 0)); + RemoveWindow(windowId); + } +} + +static const u8 sText_Space16[]= _(" "); +static void ClearAbilityName(u8 spriteId1, u8 spriteId2) +{ + PrintOnAbilityPopUp(sText_Space16, + (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256, + (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256, + 6, 1, + 4, + 7, 9, 1, + FALSE); +} + +static void PrintBattlerOnAbilityPopUp(u8 battlerId, u8 spriteId1, u8 spriteId2) +{ + int i; + u8 lastChar; + u8* name; + u8 monName[POKEMON_NAME_LENGTH + 3] = {0}; + u8* nick = gBattleMons[battlerId].nickname; + + for (i = 0; i < POKEMON_NAME_LENGTH; ++i) + { + monName[i] = nick[i]; + if (nick[i] == EOS || i + 1 == POKEMON_NAME_LENGTH) + break; + } + + name = monName + i + 1; + if (*(name - 1) == EOS) + name--; + + lastChar = *(name - 1); + name[0] = CHAR_SGL_QUOTE_RIGHT; // apostraphe + name++; + if (lastChar != CHAR_S && lastChar != CHAR_s) + { + name[0] = CHAR_s; + name++; + } + + name[0] = EOS; + PrintOnAbilityPopUp((const u8 *)monName, + (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32), + (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32), + 7, 0, + 0, + 2, 7, 1, + FALSE); +} + +static void PrintAbilityOnAbilityPopUp(u32 ability, u8 spriteId1, u8 spriteId2) +{ + PrintOnAbilityPopUp(gAbilityNames[ability], + (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256, + (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256, + 6, 0, + 4, + 7, 9, 1, + TRUE); +} + +#define PIXEL_COORDS_TO_OFFSET(x, y)( \ +/*Add tiles by X*/ \ +((y / 8) * 32 * 8) \ +/*Add tiles by X*/ \ ++ ((x / 8) * 32) \ +/*Add pixels by Y*/ \ ++ ((((y) - ((y / 8) * 8))) * 4) \ +/*Add pixels by X*/ \ ++ ((((x) - ((x / 8) * 8)) / 2))) + +static const u16 sOverwrittenPixelsTable[][2] = +{ + {PIXEL_COORDS_TO_OFFSET(0, 0), 5}, + {PIXEL_COORDS_TO_OFFSET(0, 1), 5}, + {PIXEL_COORDS_TO_OFFSET(0, 2), 5}, + {PIXEL_COORDS_TO_OFFSET(0, 3), 5}, + {PIXEL_COORDS_TO_OFFSET(0, 4), 5}, + {PIXEL_COORDS_TO_OFFSET(0, 5), 5}, + {PIXEL_COORDS_TO_OFFSET(0, 6), 5}, + {PIXEL_COORDS_TO_OFFSET(0, 7), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 8), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 9), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 10), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 11), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 12), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 13), 8}, + + {PIXEL_COORDS_TO_OFFSET(8, 13), 8}, + {PIXEL_COORDS_TO_OFFSET(16, 13), 8}, + {PIXEL_COORDS_TO_OFFSET(24, 13), 8}, + {PIXEL_COORDS_TO_OFFSET(32, 13), 8}, + {PIXEL_COORDS_TO_OFFSET(40, 13), 8}, + {PIXEL_COORDS_TO_OFFSET(48, 13), 8}, + {PIXEL_COORDS_TO_OFFSET(56, 13), 8}, + + {PIXEL_COORDS_TO_OFFSET(0, 14), 8}, + {PIXEL_COORDS_TO_OFFSET(8, 14), 8}, + {PIXEL_COORDS_TO_OFFSET(16, 14), 8}, + {PIXEL_COORDS_TO_OFFSET(24, 14), 8}, + {PIXEL_COORDS_TO_OFFSET(32, 14), 8}, + {PIXEL_COORDS_TO_OFFSET(40, 14), 8}, + {PIXEL_COORDS_TO_OFFSET(48, 14), 8}, + {PIXEL_COORDS_TO_OFFSET(56, 14), 8}, + + {PIXEL_COORDS_TO_OFFSET(0, 15), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 16), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 17), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 18), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 19), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 20), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 21), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 22), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 23), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 24), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 25), 3}, + {PIXEL_COORDS_TO_OFFSET(0, 26), 3}, + +//Second Row Of Image + {PIXEL_COORDS_TO_OFFSET(0, 45), 8}, + {PIXEL_COORDS_TO_OFFSET(0, 46), 8}, + {PIXEL_COORDS_TO_OFFSET(0, 47), 8}, + //{PIXEL_COORDS_TO_OFFSET(0, 48), 8}, // cuts off the top of the 'G' in Neutralizing Gas + {PIXEL_COORDS_TO_OFFSET(8, 45), 8}, + {PIXEL_COORDS_TO_OFFSET(8, 46), 8}, + {PIXEL_COORDS_TO_OFFSET(8, 47), 8}, + {PIXEL_COORDS_TO_OFFSET(8, 48), 8}, + {PIXEL_COORDS_TO_OFFSET(16, 45), 8}, + {PIXEL_COORDS_TO_OFFSET(16, 46), 8}, + {PIXEL_COORDS_TO_OFFSET(16, 47), 8}, + {PIXEL_COORDS_TO_OFFSET(16, 48), 8}, +}; + +static inline void CopyPixels(u8 *dest, const u8 *src, u32 pixelCount) +{ + u32 i = 0; + + if (pixelCount & 1) + { + while (pixelCount != 0) + { + dest[i] &= ~(0xF); + dest[i] |= (src[i] & 0xF); + if (--pixelCount != 0) + { + dest[i] &= ~(0xF0); + dest[i] |= (src[i] & 0xF0); + pixelCount--; + } + i++; + } + } + else + { + for (i = 0; i < pixelCount / 2; i++) + dest[i] = src[i]; + } +} + +static void RestoreOverwrittenPixels(u8 *tiles) +{ + u32 i; + u8 *buffer = Alloc(sizeof(sAbilityPopUpGfx) * 2); + + CpuCopy32(tiles, buffer, sizeof(sAbilityPopUpGfx)); + + for (i = 0; i < ARRAY_COUNT(sOverwrittenPixelsTable); i++) + { + CopyPixels(buffer + sOverwrittenPixelsTable[i][0], + sAbilityPopUpGfx + sOverwrittenPixelsTable[i][0], + sOverwrittenPixelsTable[i][1]); + } + + CpuCopy32(buffer, tiles, sizeof(sAbilityPopUpGfx)); + Free(buffer); +} + +void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle) +{ + const s16 (*coords)[2]; + u8 spriteId1, spriteId2, battlerPosition, taskId; + + if (!B_ABILITY_POP_UP) + return; + + if (gBattleScripting.abilityPopupOverwrite != 0) + ability = gBattleScripting.abilityPopupOverwrite; + + if (!gBattleStruct->activeAbilityPopUps) + { + LoadSpriteSheet(&sSpriteSheet_AbilityPopUp); + LoadSpritePalette(&sSpritePalette_AbilityPopUp); + } + gBattleStruct->activeAbilityPopUps |= gBitTable[battlerId]; + battlerPosition = GetBattlerPosition(battlerId); + + if (isDoubleBattle) + coords = sAbilityPopUpCoordsDoubles; + else + coords = sAbilityPopUpCoordsSingles; + + if ((battlerPosition & BIT_SIDE) == B_SIDE_PLAYER) + { + spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp1, + coords[battlerPosition][0] - ABILITY_POP_UP_POS_X_SLIDE, + coords[battlerPosition][1], 0); + spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp2, + coords[battlerPosition][0] - ABILITY_POP_UP_POS_X_SLIDE + ABILITY_POP_UP_POS_X_DIFF, + coords[battlerPosition][1], 0); + + gSprites[spriteId1].tOriginalX = coords[battlerPosition][0]; + gSprites[spriteId2].tOriginalX = coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_DIFF; + + gSprites[spriteId1].tRightToLeft = TRUE; + gSprites[spriteId2].tRightToLeft = TRUE; + } + else + { + spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp1, + coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_SLIDE, + coords[battlerPosition][1], 0); + spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp2, + coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_SLIDE + ABILITY_POP_UP_POS_X_DIFF, + coords[battlerPosition][1], 0); + + gSprites[spriteId1].tOriginalX = coords[battlerPosition][0]; + gSprites[spriteId2].tOriginalX = coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_DIFF; + + gSprites[spriteId1].tRightToLeft = FALSE; + gSprites[spriteId2].tRightToLeft = FALSE; + } + + gBattleStruct->abilityPopUpSpriteIds[battlerId][0] = spriteId1; + gBattleStruct->abilityPopUpSpriteIds[battlerId][1] = spriteId2; + + taskId = CreateTask(Task_FreeAbilityPopUpGfx, 5); + gTasks[taskId].tSpriteId1 = spriteId1; + gTasks[taskId].tSpriteId2 = spriteId2; + + gSprites[spriteId1].tIsMain = TRUE; + gSprites[spriteId1].tBattlerId = battlerId; + gSprites[spriteId2].tBattlerId = battlerId; + + StartSpriteAnim(&gSprites[spriteId1], 0); + StartSpriteAnim(&gSprites[spriteId2], 0); + + PrintBattlerOnAbilityPopUp(battlerId, spriteId1, spriteId2); + PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2); + RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32)); +} + +void UpdateAbilityPopup(u8 battlerId) +{ + u8 spriteId1 = gBattleStruct->abilityPopUpSpriteIds[battlerId][0]; + u8 spriteId2 = gBattleStruct->abilityPopUpSpriteIds[battlerId][1]; + u16 ability = (gBattleScripting.abilityPopupOverwrite != 0) ? gBattleScripting.abilityPopupOverwrite : gBattleMons[battlerId].ability; + + ClearAbilityName(spriteId1, spriteId2); + PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2); + RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32)); +} + +#define FRAMES_TO_WAIT 48 + +static void SpriteCb_AbilityPopUp(struct Sprite *sprite) +{ + if (!sprite->tHide) // Show + { + if (sprite->tIsMain && ++sprite->tFrames == 4) + PlaySE(SE_BALL_TRAY_ENTER); + if ((!sprite->tRightToLeft && (sprite->x -= 4) <= sprite->tOriginalX) + || (sprite->tRightToLeft && (sprite->x += 4) >= sprite->tOriginalX) + ) + { + sprite->x = sprite->tOriginalX; + sprite->tHide = TRUE; + sprite->tFrames = FRAMES_TO_WAIT; + } + } + else // Hide + { + if (sprite->tFrames == 0) + { + if ((!sprite->tRightToLeft && (sprite->x += 4) >= sprite->tOriginalX + ABILITY_POP_UP_POS_X_SLIDE) + ||(sprite->tRightToLeft && (sprite->x -= 4) <= sprite->tOriginalX - ABILITY_POP_UP_POS_X_SLIDE) + ) + { + gBattleStruct->activeAbilityPopUps &= ~(gBitTable[sprite->tBattlerId]); + DestroySprite(sprite); + } + } + else + { + if (!gBattleScripting.fixedPopup) + sprite->tFrames--; + } + } +} + +void DestroyAbilityPopUp(u8 battlerId) +{ + gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][0]].tFrames = 0; + gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][1]].tFrames = 0; + gBattleScripting.fixedPopup = FALSE; +} + +static void Task_FreeAbilityPopUpGfx(u8 taskId) +{ + if (!gSprites[gTasks[taskId].tSpriteId1].inUse + && !gSprites[gTasks[taskId].tSpriteId2].inUse + && !gBattleStruct->activeAbilityPopUps) + { + FreeSpriteTilesByTag(ABILITY_POP_UP_TAG); + FreeSpritePaletteByTag(ABILITY_POP_UP_TAG); + DestroyTask(taskId); + } +} + +// last used ball +#define LAST_BALL_WINDOW_TAG 0xD721 + +static const struct OamData sOamData_LastUsedBall = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_LastUsedBallWindow = +{ + .tileTag = LAST_BALL_WINDOW_TAG, + .paletteTag = ABILITY_POP_UP_TAG, + .oam = &sOamData_LastUsedBall, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_LastUsedBallWin +}; + +#if B_LAST_USED_BALL_BUTTON == R_BUTTON + static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_r.4bpp"); +#else + static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_l.4bpp"); +#endif +static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow = +{ + sLastUsedBallWindowGfx, sizeof(sLastUsedBallWindowGfx), LAST_BALL_WINDOW_TAG +}; + +#define LAST_USED_BALL_X_F 15 +#define LAST_USED_BALL_X_0 -15 +#define LAST_USED_BALL_Y ((IsDoubleBattle()) ? 78 : 68) + +#define LAST_BALL_WIN_X_F (LAST_USED_BALL_X_F - 1) +#define LAST_BALL_WIN_X_0 (LAST_USED_BALL_X_0 - 0) +#define LAST_USED_WIN_Y (LAST_USED_BALL_Y - 8) + +#define sHide data[0] + +bool32 CanThrowLastUsedBall(void) +{ +#if B_LAST_USED_BALL == FALSE + return FALSE; +#else + if (!CanThrowBall()) + return FALSE; + if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FRONTIER)) + return FALSE; + if (!CheckBagHasItem(gLastThrownBall, 1)) + return FALSE; + + return TRUE; +#endif +} + +void TryAddLastUsedBallItemSprites(void) +{ +#if B_LAST_USED_BALL == TRUE + if (gLastThrownBall == 0 + || (gLastThrownBall != 0 && !CheckBagHasItem(gLastThrownBall, 1))) + { + // we're out of the last used ball, so just set it to the first ball in the bag + // we have to compact the bag first bc it is typically only compacted when you open it + CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]); + gLastThrownBall = gBagPockets[BALLS_POCKET].itemSlots[0].itemId; + } + + if (!CanThrowLastUsedBall()) + return; + + // ball + if (gBattleStruct->ballSpriteIds[0] == MAX_SPRITES) + { + gBattleStruct->ballSpriteIds[0] = AddItemIconSprite(102, 102, gLastThrownBall); + gSprites[gBattleStruct->ballSpriteIds[0]].x = LAST_USED_BALL_X_0; + gSprites[gBattleStruct->ballSpriteIds[0]].y = LAST_USED_BALL_Y; + gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore + gSprites[gBattleStruct->ballSpriteIds[0]].callback = SpriteCB_LastUsedBall; + } + + // window + LoadSpritePalette(&sSpritePalette_AbilityPopUp); + if (GetSpriteTileStartByTag(LAST_BALL_WINDOW_TAG) == 0xFFFF) + LoadSpriteSheet(&sSpriteSheet_LastUsedBallWindow); + + if (gBattleStruct->ballSpriteIds[1] == MAX_SPRITES) + { + gBattleStruct->ballSpriteIds[1] = CreateSprite(&sSpriteTemplate_LastUsedBallWindow, + LAST_BALL_WIN_X_0, + LAST_USED_WIN_Y, 5); + gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore + } +#endif +} + +static void DestroyLastUsedBallWinGfx(struct Sprite *sprite) +{ + FreeSpriteTilesByTag(LAST_BALL_WINDOW_TAG); + FreeSpritePaletteByTag(ABILITY_POP_UP_TAG); + DestroySprite(sprite); + gBattleStruct->ballSpriteIds[1] = MAX_SPRITES; +} + +static void DestroyLastUsedBallGfx(struct Sprite *sprite) +{ + FreeSpriteTilesByTag(102); + FreeSpritePaletteByTag(102); + DestroySprite(sprite); + gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; +} + +static void SpriteCB_LastUsedBallWin(struct Sprite *sprite) +{ + if (sprite->sHide) + { + if (sprite->x != LAST_BALL_WIN_X_0) + sprite->x--; + + if (sprite->x == LAST_BALL_WIN_X_0) + DestroyLastUsedBallWinGfx(sprite); + } + else + { + if (sprite->x != LAST_BALL_WIN_X_F) + sprite->x++; + } +} + +static void SpriteCB_LastUsedBall(struct Sprite *sprite) +{ + if (sprite->sHide) + { + if (sprite->x != LAST_USED_BALL_X_0) + sprite->x--; + + if (sprite->x == LAST_USED_BALL_X_0) + DestroyLastUsedBallGfx(sprite); + } + else + { + if (sprite->x != LAST_USED_BALL_X_F) + sprite->x++; + } +} + +static void TryHideOrRestoreLastUsedBall(u8 caseId) +{ +#if B_LAST_USED_BALL == TRUE + if (gBattleStruct->ballSpriteIds[0] == MAX_SPRITES) + return; + + switch (caseId) + { + case 0: // hide + if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES) + gSprites[gBattleStruct->ballSpriteIds[0]].sHide = TRUE; // hide + if (gBattleStruct->ballSpriteIds[1] != MAX_SPRITES) + gSprites[gBattleStruct->ballSpriteIds[1]].sHide = TRUE; // hide + break; + case 1: // restore + if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES) + gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore + if (gBattleStruct->ballSpriteIds[1] != MAX_SPRITES) + gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; // restore + break; + } +#endif +} + +void TryHideLastUsedBall(void) +{ +#if B_LAST_USED_BALL == TRUE + TryHideOrRestoreLastUsedBall(0); +#endif +} + +void TryRestoreLastUsedBall(void) +{ +#if B_LAST_USED_BALL == TRUE + if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES) + TryHideOrRestoreLastUsedBall(1); + else + TryAddLastUsedBallItemSprites(); +#endif +} diff --git a/src/battle_intro.c b/src/battle_intro.c index 0ea65dab17..78982ca4c3 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -106,7 +106,7 @@ void HandleIntroSlide(u8 terrain) { u8 taskId; - if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) && gPartnerTrainerId != TRAINER_STEVEN_PARTNER) + if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) && gPartnerTrainerId != TRAINER_STEVEN_PARTNER && gPartnerTrainerId < TRAINER_CUSTOM_PARTNER) { taskId = CreateTask(BattleIntroSlidePartner, 0); } @@ -584,36 +584,35 @@ static void BattleIntroSlidePartner(u8 taskId) } } -void sub_8118FBC(int bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 tilesOffset) +void DrawBattlerOnBg(int bgId, u8 x, u8 y, u8 battlerPosition, u8 paletteId, u8 *tiles, u16 *tilemap, u16 tilesOffset) { int i, j; u8 battler = GetBattlerAtPosition(battlerPosition); int offset = tilesOffset; - CpuCopy16(gMonSpritesGfxPtr->sprites.ptr[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], arg5, BG_SCREEN_SIZE); - LoadBgTiles(bgId, arg5, 0x1000, tilesOffset); - for (i = arg2; i < arg2 + 8; i++) + CpuCopy16(gMonSpritesGfxPtr->sprites.ptr[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], tiles, BG_SCREEN_SIZE); + LoadBgTiles(bgId, tiles, 0x1000, tilesOffset); + for (i = y; i < y + 8; i++) { - for (j = arg1; j < arg1 + 8; j++) + for (j = x; j < x + 8; j++) { - arg6[i * 32 + j] = offset | (arg4 << 12); + tilemap[i * 32 + j] = offset | (paletteId << 12); offset++; } } - - LoadBgTilemap(bgId, arg6, BG_SCREEN_SIZE, 0); + LoadBgTilemap(bgId, tilemap, BG_SCREEN_SIZE, 0); } -void unref_sub_8119094(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7) +static void DrawBattlerOnBgDMA(u8 x, u8 y, u8 battlerPosition, u8 arg3, u8 paletteId, u16 arg5, u8 arg6, u8 arg7) { int i, j, offset; DmaCopy16(3, gMonSpritesGfxPtr->sprites.ptr[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE); offset = (arg5 >> 5) - (arg7 << 9); - for (i = arg1; i < arg1 + 8; i++) + for (i = y; i < y + 8; i++) { - for (j = arg0; j < arg0 + 8; j++) + for (j = x; j < x + 8; j++) { - *((u16 *)(BG_VRAM) + (i * 32) + (j + (arg6 << 10))) = offset | (arg4 << 12); + *((u16 *)(BG_VRAM) + (i * 32) + (j + (arg6 << 10))) = offset | (paletteId << 12); offset++; } } diff --git a/src/battle_main.c b/src/battle_main.c index 736c8151af..72c1b58167 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1,7 +1,8 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" -#include "battle_ai_script_commands.h" +#include "battle_ai_main.h" +#include "battle_ai_util.h" #include "battle_arena.h" #include "battle_controllers.h" #include "battle_interface.h" @@ -48,8 +49,10 @@ #include "trig.h" #include "tv.h" #include "util.h" +#include "wild_encounter.h" #include "window.h" #include "constants/abilities.h" +#include "constants/battle_config.h" #include "constants/battle_move_effects.h" #include "constants/battle_string_ids.h" #include "constants/hold_effects.h" @@ -61,13 +64,11 @@ #include "constants/trainers.h" #include "cable_club.h" -extern struct MusicPlayerInfo gMPlayInfo_SE1; -extern struct MusicPlayerInfo gMPlayInfo_SE2; +extern struct Evolution gEvolutionTable[][EVOS_PER_MON]; extern const struct BgTemplate gBattleBgTemplates[]; extern const struct WindowTemplate *const gBattleWindowTemplates[]; -// this file's functions static void CB2_InitBattleInternal(void); static void CB2_PreInitMultiBattle(void); static void CB2_PreInitIngamePlayerPartnerBattle(void); @@ -77,42 +78,33 @@ static void CB2_HandleStartBattle(void); static void TryCorrectShedinjaLanguage(struct Pokemon *mon); static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 firstTrainer); static void BattleMainCB1(void); -static void sub_8038538(struct Sprite *sprite); static void CB2_EndLinkBattle(void); static void EndLinkBattleInSteps(void); -static void sub_80392A8(void); -static void sub_803937C(void); -static void sub_803939C(void); -static void SpriteCb_MoveWildMonToRight(struct Sprite *sprite); -static void SpriteCb_WildMonShowHealthbox(struct Sprite *sprite); -static void SpriteCb_WildMonAnimate(struct Sprite *sprite); -static void sub_80398D0(struct Sprite *sprite); +static void CB2_InitAskRecordBattle(void); +static void CB2_AskRecordBattle(void); +static void AskRecordBattle(void); +static void SpriteCB_MoveWildMonToRight(struct Sprite *sprite); +static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite); +static void SpriteCB_WildMonAnimate(struct Sprite *sprite); +static void SpriteCB_Flicker(struct Sprite *sprite); static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite); -static void SpriteCb_BlinkVisible(struct Sprite *sprite); -static void SpriteCallbackDummy_3(struct Sprite *sprite); +static void SpriteCB_BlinkVisible(struct Sprite *sprite); +static void SpriteCB_Idle(struct Sprite *sprite); static void SpriteCB_BattleSpriteSlideLeft(struct Sprite *sprite); static void TurnValuesCleanUp(bool8 var0); static void SpriteCB_BounceEffect(struct Sprite *sprite); static void BattleStartClearSetData(void); -static void BattleIntroGetMonsData(void); -static void BattleIntroPrepareBackgroundSlide(void); -static void BattleIntroDrawTrainersOrMonsSprites(void); -static void BattleIntroDrawPartySummaryScreens(void); -static void BattleIntroPrintTrainerWantsToBattle(void); -static void BattleIntroPrintWildMonAttacked(void); -static void BattleIntroPrintOpponentSendsOut(void); -static void BattleIntroPrintPlayerSendsOut(void); -static void BattleIntroOpponent1SendsOutMonAnimation(void); -static void BattleIntroOpponent2SendsOutMonAnimation(void); -static void BattleIntroRecordMonsToDex(void); -static void BattleIntroPlayer1SendsOutMonAnimation(void); +static void DoBattleIntro(void); static void TryDoEventsBeforeFirstTurn(void); static void HandleTurnActionSelectionState(void); static void RunTurnActionsFunctions(void); static void SetActionsAndBattlersTurnOrder(void); -static void sub_803CDF8(void); +static void UpdateBattlerPartyOrdersOnSwitch(void); static bool8 AllAtActionConfirmed(void); +static void TryChangeTurnOrder(void); static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); +static void CheckMegaEvolutionBeforeTurn(void); +static void CheckQuickClaw_CustapBerryActivation(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); static void ReturnFromBattleToOverworld(void); static void TryEvolvePokemon(void); @@ -123,8 +115,10 @@ static void HandleEndTurn_BattleLost(void); static void HandleEndTurn_RanFromBattle(void); static void HandleEndTurn_MonFled(void); static void HandleEndTurn_FinishBattle(void); +static void SpriteCB_UnusedBattleInit(struct Sprite *sprite); +static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite); +static void TrySpecialEvolution(void); -// EWRAM vars EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0; EWRAM_DATA u16 gBattle_BG1_X = 0; @@ -137,20 +131,23 @@ EWRAM_DATA u16 gBattle_WIN0H = 0; EWRAM_DATA u16 gBattle_WIN0V = 0; EWRAM_DATA u16 gBattle_WIN1H = 0; EWRAM_DATA u16 gBattle_WIN1V = 0; -EWRAM_DATA u8 gDisplayedStringBattle[300] = {0}; +EWRAM_DATA u8 gDisplayedStringBattle[400] = {0}; EWRAM_DATA u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT] = {0}; EWRAM_DATA u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT] = {0}; -EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0}; -EWRAM_DATA static u32 sUnusedUnknownArray[25] = {0}; +EWRAM_DATA u8 gBattleTextBuff3[30] = {0}; //expanded for stupidly long z move names +// The below array is never intentionally used. However, Juan's +// defeat text (SootopolisCity_Gym_1F_Text_JuanDefeat) is too long +// for gDisplayedStringBattle and overflows into this array. If it +// is removed (and none of the buffers above are increased in size) +// it will instead overflow into useful data. +EWRAM_DATA static u32 sFlickerArray[25] = {0}; EWRAM_DATA u32 gBattleTypeFlags = 0; EWRAM_DATA u8 gBattleTerrain = 0; EWRAM_DATA u32 gUnusedFirstBattleVar1 = 0; // Never read -EWRAM_DATA struct UnknownPokemonStruct4 gMultiPartnerParty[MULTI_PARTY_SIZE] = {0}; -EWRAM_DATA static struct UnknownPokemonStruct4* sMultiPartnerPartyBuffer = NULL; -EWRAM_DATA u8 *gUnknown_0202305C = NULL; -EWRAM_DATA u8 *gUnknown_02023060 = NULL; -EWRAM_DATA u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200] = {0}; -EWRAM_DATA u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200] = {0}; +EWRAM_DATA struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE] = {0}; +EWRAM_DATA static struct MultiPartnerMenuPokemon* sMultiPartnerPartyBuffer = NULL; +EWRAM_DATA u8 *gBattleAnimBgTileBuffer = NULL; +EWRAM_DATA u8 *gBattleAnimBgTilemapBuffer = NULL; EWRAM_DATA u8 gActiveBattler = 0; EWRAM_DATA u32 gBattleControllerExecFlags = 0; EWRAM_DATA u8 gBattlersCount = 0; @@ -171,17 +168,16 @@ EWRAM_DATA s32 gBattleMoveDamage = 0; EWRAM_DATA s32 gHpDealt = 0; EWRAM_DATA s32 gTakenDmg[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLastUsedItem = 0; -EWRAM_DATA u8 gLastUsedAbility = 0; +EWRAM_DATA u16 gLastUsedAbility = 0; EWRAM_DATA u8 gBattlerAttacker = 0; EWRAM_DATA u8 gBattlerTarget = 0; EWRAM_DATA u8 gBattlerFainted = 0; EWRAM_DATA u8 gEffectBattler = 0; EWRAM_DATA u8 gPotentialItemEffectBattler = 0; EWRAM_DATA u8 gAbsentBattlerFlags = 0; -EWRAM_DATA u8 gCritMultiplier = 0; +EWRAM_DATA u8 gIsCriticalHit = FALSE; EWRAM_DATA u8 gMultiHitCounter = 0; EWRAM_DATA const u8 *gBattlescriptCurrInstr = NULL; -EWRAM_DATA u32 gUnusedBattleMainVar = 0; EWRAM_DATA u8 gChosenActionByBattler[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL}; EWRAM_DATA const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL}; @@ -191,16 +187,17 @@ EWRAM_DATA u16 gLastLandedMoves[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLastHitByType[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLastResultingMoves[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLockedMoves[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gLastUsedMove = 0; EWRAM_DATA u8 gLastHitBy[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT] = {0}; -EWRAM_DATA u8 gMoveResultFlags = 0; +EWRAM_DATA u16 gMoveResultFlags = 0; EWRAM_DATA u32 gHitMarker = 0; -EWRAM_DATA static u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gUnusedFirstBattleVar2 = 0; // Never read -EWRAM_DATA u16 gSideStatuses[2] = {0}; +EWRAM_DATA u32 gSideStatuses[2] = {0}; EWRAM_DATA struct SideTimer gSideTimers[2] = {0}; EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u32 gStatuses4[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gPauseCounterBattle = 0; EWRAM_DATA u16 gPaydayMoney = 0; @@ -213,7 +210,6 @@ EWRAM_DATA u16 gBattleWeather = 0; EWRAM_DATA struct WishFutureKnock gWishFutureKnock = {0}; EWRAM_DATA u16 gIntroSlideFlags = 0; EWRAM_DATA u8 gSentPokesToOpponent[2] = {0}; -EWRAM_DATA u16 gDynamicBasePower = 0; EWRAM_DATA u16 gExpShareExp = 0; EWRAM_DATA struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA struct BattleScripting gBattleScripting = {0}; @@ -235,8 +231,17 @@ EWRAM_DATA struct BattleHealthboxInfo *gBattleControllerOpponentFlankHealthboxDa EWRAM_DATA u16 gBattleMovePower = 0; EWRAM_DATA u16 gMoveToLearn = 0; EWRAM_DATA u8 gBattleMonForms[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u32 gFieldStatuses = 0; +EWRAM_DATA struct FieldTimer gFieldTimers = {0}; +EWRAM_DATA u8 gBattlerAbility = 0; +EWRAM_DATA u16 gPartnerSpriteId = 0; +EWRAM_DATA struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA bool8 gHasFetchedBall = FALSE; +EWRAM_DATA u8 gLastUsedBall = 0; +EWRAM_DATA u16 gLastThrownBall = 0; +EWRAM_DATA u8 gPartyCriticalHits[PARTY_SIZE] = {0}; +EWRAM_DATA static u8 sTriedEvolving = 0; -// IWRAM common vars void (*gPreBattleCallback1)(void); void (*gBattleMainFunc)(void); struct BattleResults gBattleResults; @@ -247,19 +252,18 @@ u8 gMultiUsePlayerCursor; u8 gNumberOfMovesToChoose; u8 gBattleControllerData[MAX_BATTLERS_COUNT]; // Used by the battle controllers to store misc sprite/task IDs for each battler -// rom const data static const struct ScanlineEffectParams sIntroScanlineParams16Bit = { - (void *)REG_ADDR_BG3HOFS, SCANLINE_EFFECT_DMACNT_16BIT, 1 + ®_BG3HOFS, SCANLINE_EFFECT_DMACNT_16BIT, 1 }; // unused static const struct ScanlineEffectParams sIntroScanlineParams32Bit = { - (void *)REG_ADDR_BG3HOFS, SCANLINE_EFFECT_DMACNT_32BIT, 1 + ®_BG3HOFS, SCANLINE_EFFECT_DMACNT_32BIT, 1 }; -const struct SpriteTemplate gUnknown_0831AC88 = +const struct SpriteTemplate gUnusedBattleInitSprite = { .tileTag = 0, .paletteTag = 0, @@ -267,7 +271,7 @@ const struct SpriteTemplate gUnknown_0831AC88 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8038528, + .callback = SpriteCB_UnusedBattleInit, }; static const u8 sText_ShedinjaJpnName[] = _("ヌケニン"); // Nukenin @@ -302,156 +306,29 @@ const struct OamData gOamData_BattleSpritePlayerSide = .affineParam = 0, }; -// Unknown and unused data. Feel free to remove. -static const u16 sUnused1[] = {0, 5, 0xfffe, 0}; -static const u16 *const sUnused1Ptr = sUnused1; -static const u16 sUnused2[] = {0xfff0, 0, 0x0400, 0, 0, 0, 0x3c00, 0, 0x7ffe, 1, 0, 0}; -static const u16 *const sUnused2Ptr = sUnused2; - -static const s8 gUnknown_0831ACE0[] ={-32, -16, -16, -32, -32, 0, 0, 0}; - -// format: attacking type, defending type, damage multiplier -// the multiplier is a (decimal) fixed-point number: -// 20 is ×2.0 TYPE_MUL_SUPER_EFFECTIVE -// 10 is ×1.0 TYPE_MUL_NORMAL -// 05 is ×0.5 TYPE_MUL_NOT_EFFECTIVE -// 00 is ×0.0 TYPE_MUL_NO_EFFECT -const u8 gTypeEffectiveness[336] = -{ - TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE, - TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FIRE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FIRE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FIRE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FIRE, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FIRE, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FIRE, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FIRE, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FIRE, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_WATER, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_WATER, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE, - TYPE_WATER, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE, - TYPE_WATER, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_WATER, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_WATER, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE, - TYPE_ELECTRIC, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_ELECTRIC, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE, - TYPE_ELECTRIC, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE, - TYPE_ELECTRIC, TYPE_GROUND, TYPE_MUL_NO_EFFECT, - TYPE_ELECTRIC, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_ELECTRIC, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GRASS, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GRASS, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_GRASS, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GRASS, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GRASS, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_GRASS, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GRASS, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GRASS, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_GRASS, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GRASS, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_ICE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE, - TYPE_ICE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_ICE, TYPE_ICE, TYPE_MUL_NOT_EFFECTIVE, - TYPE_ICE, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_ICE, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_ICE, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_ICE, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_ICE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FIGHTING, TYPE_NORMAL, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FIGHTING, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FIGHTING, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FIGHTING, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FIGHTING, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FIGHTING, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE, - TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE, - TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE, - TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE, - TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT, - TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GROUND, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_GROUND, TYPE_FLYING, TYPE_MUL_NO_EFFECT, - TYPE_GROUND, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GROUND, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_GROUND, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FLYING, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FLYING, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FLYING, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FLYING, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_FLYING, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FLYING, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_PSYCHIC, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_PSYCHIC, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_PSYCHIC, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE, - TYPE_PSYCHIC, TYPE_DARK, TYPE_MUL_NO_EFFECT, - TYPE_PSYCHIC, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_BUG, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE, - TYPE_BUG, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_BUG, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE, - TYPE_BUG, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE, - TYPE_BUG, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE, - TYPE_BUG, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE, - TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE, - TYPE_ROCK, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE, - TYPE_ROCK, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_ROCK, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_ROCK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GHOST, TYPE_NORMAL, TYPE_MUL_NO_EFFECT, - TYPE_GHOST, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_GHOST, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GHOST, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE, - TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE, - TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE, - TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE, - TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE, - TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, - TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, - TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT, - TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT, - TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT, - TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT -}; +static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32}; const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1] = { - [TYPE_NORMAL] = _("NORMAL"), - [TYPE_FIGHTING] = _("FIGHT"), - [TYPE_FLYING] = _("FLYING"), - [TYPE_POISON] = _("POISON"), - [TYPE_GROUND] = _("GROUND"), - [TYPE_ROCK] = _("ROCK"), - [TYPE_BUG] = _("BUG"), - [TYPE_GHOST] = _("GHOST"), - [TYPE_STEEL] = _("STEEL"), + [TYPE_NORMAL] = _("Normal"), + [TYPE_FIGHTING] = _("Fight"), + [TYPE_FLYING] = _("Flying"), + [TYPE_POISON] = _("Poison"), + [TYPE_GROUND] = _("Ground"), + [TYPE_ROCK] = _("Rock"), + [TYPE_BUG] = _("Bug"), + [TYPE_GHOST] = _("Ghost"), + [TYPE_STEEL] = _("Steel"), [TYPE_MYSTERY] = _("???"), - [TYPE_FIRE] = _("FIRE"), - [TYPE_WATER] = _("WATER"), - [TYPE_GRASS] = _("GRASS"), - [TYPE_ELECTRIC] = _("ELECTR"), - [TYPE_PSYCHIC] = _("PSYCHC"), - [TYPE_ICE] = _("ICE"), - [TYPE_DRAGON] = _("DRAGON"), - [TYPE_DARK] = _("DARK"), + [TYPE_FIRE] = _("Fire"), + [TYPE_WATER] = _("Water"), + [TYPE_GRASS] = _("Grass"), + [TYPE_ELECTRIC] = _("Electr"), + [TYPE_PSYCHIC] = _("Psychc"), + [TYPE_ICE] = _("Ice"), + [TYPE_DRAGON] = _("Dragon"), + [TYPE_DARK] = _("Dark"), + [TYPE_FAIRY] = _("Fairy"), }; // This is a factor in how much money you get for beating a trainer. @@ -501,7 +378,7 @@ const struct TrainerMoney gTrainerMoneyTable[] = {TRAINER_CLASS_TWINS, 3}, {TRAINER_CLASS_SAILOR, 8}, {TRAINER_CLASS_COLLECTOR, 15}, - {TRAINER_CLASS_PKMN_TRAINER_3, 15}, + {TRAINER_CLASS_RIVAL, 15}, {TRAINER_CLASS_PKMN_BREEDER, 10}, {TRAINER_CLASS_PKMN_RANGER, 12}, {TRAINER_CLASS_TEAM_MAGMA, 5}, @@ -512,53 +389,54 @@ const struct TrainerMoney gTrainerMoneyTable[] = {TRAINER_CLASS_HIKER, 10}, {TRAINER_CLASS_YOUNG_COUPLE, 8}, {TRAINER_CLASS_WINSTRATE, 10}, - {0xFF, 5}, + {0xFF, 5}, // Any trainer class not listed above uses this }; #include "data/text/abilities.h" static void (* const sTurnActionsFuncsTable[])(void) = { - [B_ACTION_USE_MOVE] = HandleAction_UseMove, - [B_ACTION_USE_ITEM] = HandleAction_UseItem, - [B_ACTION_SWITCH] = HandleAction_Switch, - [B_ACTION_RUN] = HandleAction_Run, + [B_ACTION_USE_MOVE] = HandleAction_UseMove, + [B_ACTION_USE_ITEM] = HandleAction_UseItem, + [B_ACTION_SWITCH] = HandleAction_Switch, + [B_ACTION_RUN] = HandleAction_Run, [B_ACTION_SAFARI_WATCH_CAREFULLY] = HandleAction_WatchesCarefully, - [B_ACTION_SAFARI_BALL] = HandleAction_SafariZoneBallThrow, - [B_ACTION_SAFARI_POKEBLOCK] = HandleAction_ThrowPokeblock, - [B_ACTION_SAFARI_GO_NEAR] = HandleAction_GoNear, - [B_ACTION_SAFARI_RUN] = HandleAction_SafariZoneRun, - [B_ACTION_WALLY_THROW] = HandleAction_WallyBallThrow, - [B_ACTION_EXEC_SCRIPT] = HandleAction_RunBattleScript, - [B_ACTION_TRY_FINISH] = HandleAction_TryFinish, - [B_ACTION_FINISHED] = HandleAction_ActionFinished, - [B_ACTION_NOTHING_FAINTED] = HandleAction_NothingIsFainted, + [B_ACTION_SAFARI_BALL] = HandleAction_SafariZoneBallThrow, + [B_ACTION_SAFARI_POKEBLOCK] = HandleAction_ThrowPokeblock, + [B_ACTION_SAFARI_GO_NEAR] = HandleAction_GoNear, + [B_ACTION_SAFARI_RUN] = HandleAction_SafariZoneRun, + [B_ACTION_WALLY_THROW] = HandleAction_WallyBallThrow, + [B_ACTION_EXEC_SCRIPT] = HandleAction_RunBattleScript, + [B_ACTION_TRY_FINISH] = HandleAction_TryFinish, + [B_ACTION_FINISHED] = HandleAction_ActionFinished, + [B_ACTION_NOTHING_FAINTED] = HandleAction_NothingIsFainted, + [B_ACTION_THROW_BALL] = HandleAction_ThrowBall, }; static void (* const sEndTurnFuncsTable[])(void) = { - [0] = HandleEndTurn_ContinueBattle, //B_OUTCOME_NONE? - [B_OUTCOME_WON] = HandleEndTurn_BattleWon, - [B_OUTCOME_LOST] = HandleEndTurn_BattleLost, - [B_OUTCOME_DREW] = HandleEndTurn_BattleLost, - [B_OUTCOME_RAN] = HandleEndTurn_RanFromBattle, + [0] = HandleEndTurn_ContinueBattle, + [B_OUTCOME_WON] = HandleEndTurn_BattleWon, + [B_OUTCOME_LOST] = HandleEndTurn_BattleLost, + [B_OUTCOME_DREW] = HandleEndTurn_BattleLost, + [B_OUTCOME_RAN] = HandleEndTurn_RanFromBattle, [B_OUTCOME_PLAYER_TELEPORTED] = HandleEndTurn_FinishBattle, - [B_OUTCOME_MON_FLED] = HandleEndTurn_MonFled, - [B_OUTCOME_CAUGHT] = HandleEndTurn_FinishBattle, - [B_OUTCOME_NO_SAFARI_BALLS] = HandleEndTurn_FinishBattle, - [B_OUTCOME_FORFEITED] = HandleEndTurn_FinishBattle, - [B_OUTCOME_MON_TELEPORTED] = HandleEndTurn_FinishBattle, + [B_OUTCOME_MON_FLED] = HandleEndTurn_MonFled, + [B_OUTCOME_CAUGHT] = HandleEndTurn_FinishBattle, + [B_OUTCOME_NO_SAFARI_BALLS] = HandleEndTurn_FinishBattle, + [B_OUTCOME_FORFEITED] = HandleEndTurn_FinishBattle, + [B_OUTCOME_MON_TELEPORTED] = HandleEndTurn_FinishBattle, }; -const u8 gStatusConditionString_PoisonJpn[8] = _("どく$$$$$"); -const u8 gStatusConditionString_SleepJpn[8] = _("ねむり$$$$"); -const u8 gStatusConditionString_ParalysisJpn[8] = _("まひ$$$$$"); -const u8 gStatusConditionString_BurnJpn[8] = _("やけど$$$$"); -const u8 gStatusConditionString_IceJpn[8] = _("こおり$$$$"); -const u8 gStatusConditionString_ConfusionJpn[8] = _("こんらん$$$"); -const u8 gStatusConditionString_LoveJpn[8] = _("メロメロ$$$"); +const u8 gStatusConditionString_PoisonJpn[] = _("どく$$$$$"); +const u8 gStatusConditionString_SleepJpn[] = _("ねむり$$$$"); +const u8 gStatusConditionString_ParalysisJpn[] = _("まひ$$$$$"); +const u8 gStatusConditionString_BurnJpn[] = _("やけど$$$$"); +const u8 gStatusConditionString_IceJpn[] = _("こおり$$$$"); +const u8 gStatusConditionString_ConfusionJpn[] = _("こんらん$$$"); +const u8 gStatusConditionString_LoveJpn[] = _("メロメロ$$$"); -const u8 * const gStatusConditionStringsTable[7][2] = +const u8 *const gStatusConditionStringsTable[][2] = { {gStatusConditionString_PoisonJpn, gText_Poison}, {gStatusConditionString_SleepJpn, gText_Sleep}, @@ -569,7 +447,6 @@ const u8 * const gStatusConditionStringsTable[7][2] = {gStatusConditionString_LoveJpn, gText_Love} }; -// code void CB2_InitBattle(void) { MoveSaveBlocks_ResetHeap(); @@ -608,7 +485,7 @@ static void CB2_InitBattleInternal(void) SetHBlankCallback(NULL); SetVBlankCallback(NULL); - CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + CpuFill32(0, (void *)(VRAM), VRAM_SIZE); SetGpuReg(REG_OFFSET_MOSAIC, 0); SetGpuReg(REG_OFFSET_WIN0H, DISPLAY_WIDTH); @@ -618,7 +495,7 @@ static void CB2_InitBattleInternal(void) gBattle_WIN0H = DISPLAY_WIDTH; - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER) + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER && gPartnerTrainerId < TRAINER_CUSTOM_PARTNER) { gBattle_WIN0V = DISPLAY_HEIGHT - 1; gBattle_WIN1H = DISPLAY_WIDTH; @@ -683,8 +560,8 @@ static void CB2_InitBattleInternal(void) if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED))) { CreateNPCTrainerParty(&gEnemyParty[0], gTrainerBattleOpponent_A, TRUE); - if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - CreateNPCTrainerParty(&gEnemyParty[3], gTrainerBattleOpponent_B, FALSE); + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && !BATTLE_TWO_VS_ONE_OPPONENT) + CreateNPCTrainerParty(&gEnemyParty[PARTY_SIZE / 2], gTrainerBattleOpponent_B, FALSE); SetWildMonHeldItem(); } @@ -758,7 +635,7 @@ static void SetPlayerBerryDataInBattleStruct(void) } else { - const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY)); + const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY_E_READER)); for (i = 0; i < BERRY_NAME_LENGTH; i++) battleBerry->name[i] = berryData->name[i]; @@ -774,8 +651,7 @@ static void SetPlayerBerryDataInBattleStruct(void) static void SetAllPlayersBerryData(void) { - s32 i; - s32 j; + s32 i, j; if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -802,7 +678,7 @@ static void SetAllPlayersBerryData(void) } else { - const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY)); + const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY_E_READER)); for (i = 0; i < BERRY_NAME_LENGTH; i++) { @@ -818,8 +694,8 @@ static void SetAllPlayersBerryData(void) gEnigmaBerries[2].itemEffect[i] = 0; } - gEnigmaBerries[0].holdEffect = 0; - gEnigmaBerries[2].holdEffect = 0; + gEnigmaBerries[0].holdEffect = HOLD_EFFECT_NONE; + gEnigmaBerries[2].holdEffect = HOLD_EFFECT_NONE; gEnigmaBerries[0].holdEffectParam = 0; gEnigmaBerries[2].holdEffectParam = 0; } @@ -961,7 +837,7 @@ static void CB2_HandleStartBattle(void) ShowBg(1); ShowBg(2); ShowBg(3); - sub_805EF14(); + FillAroundBattleWindows(); gBattleCommunication[MULTIUSE_STATE] = 1; } if (gWirelessCommType) @@ -986,7 +862,7 @@ static void CB2_HandleStartBattle(void) gLinkPlayers[1].id = 1; } - SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); + SendBlock(BitmaskAllOtherLinkPlayers(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); gBattleCommunication[MULTIUSE_STATE] = 2; } if (gWirelessCommType) @@ -1021,15 +897,18 @@ static void CB2_HandleStartBattle(void) } break; case 3: + // Link battle, send/receive party Pokémon 2 at a time if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2); + // Send Pokémon 1-2 + SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty, sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; case 4: if ((GetBlockReceivedStatus() & 3) == 3) { + // Recv Pokémon 1-2 ResetBlockReceivedFlags(); memcpy(gEnemyParty, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; @@ -1038,30 +917,35 @@ static void CB2_HandleStartBattle(void) case 7: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon) * 2); + // Send Pokémon 3-4 + SendBlock(BitmaskAllOtherLinkPlayers(), &gPlayerParty[2], sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; case 8: if ((GetBlockReceivedStatus() & 3) == 3) { + // Recv Pokémon 3-4 ResetBlockReceivedFlags(); - memcpy(gEnemyParty + 2, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + memcpy(&gEnemyParty[2], gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; case 11: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(struct Pokemon) * 2); + // Send Pokémon 5-6 + SendBlock(BitmaskAllOtherLinkPlayers(), &gPlayerParty[4], sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; case 12: if ((GetBlockReceivedStatus() & 3) == 3) { + // Recv Pokémon 5-6 ResetBlockReceivedFlags(); - memcpy(gEnemyParty + 4, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + memcpy(&gEnemyParty[4], gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + TryCorrectShedinjaLanguage(&gEnemyParty[0]); TryCorrectShedinjaLanguage(&gEnemyParty[1]); TryCorrectShedinjaLanguage(&gEnemyParty[2]); @@ -1073,13 +957,15 @@ static void CB2_HandleStartBattle(void) break; case 15: InitBattleControllers(); - sub_8184E58(); + RecordedBattle_SetTrainerInfo(); gBattleCommunication[SPRITES_INIT_STATE1] = 0; gBattleCommunication[SPRITES_INIT_STATE2] = 0; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { + // Check if both players are using Emerald + // to determine if the recorded battle rng + // seed needs to be sent s32 i; - for (i = 0; i < 2 && (gLinkPlayers[i].version & 0xFF) == VERSION_EMERALD; i++); if (i == 2) @@ -1093,13 +979,15 @@ static void CB2_HandleStartBattle(void) } break; case 16: + // Both players are using Emerald, send rng seed for recorded battle if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), &gRecordedBattleRngSeed, sizeof(gRecordedBattleRngSeed)); + SendBlock(BitmaskAllOtherLinkPlayers(), &gRecordedBattleRngSeed, sizeof(gRecordedBattleRngSeed)); gBattleCommunication[MULTIUSE_STATE]++; } break; case 17: + // Receive rng seed for recorded battle (only read it if partner is the link master) if ((GetBlockReceivedStatus() & 3) == 3) { ResetBlockReceivedFlags(); @@ -1109,17 +997,17 @@ static void CB2_HandleStartBattle(void) } break; case 18: + // Finish, start battle if (BattleInitAllSprites(&gBattleCommunication[SPRITES_INIT_STATE1], &gBattleCommunication[SPRITES_INIT_STATE2])) { gPreBattleCallback1 = gMain.callback1; gMain.callback1 = BattleMainCB1; SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { gBattleTypeFlags |= BATTLE_TYPE_LINK_IN_BATTLE; - } } break; + // Introduce short delays between sending party Pokémon for link case 5: case 9: case 13: @@ -1137,7 +1025,7 @@ static void CB2_HandleStartBattle(void) static void CB2_HandleStartMultiPartnerBattle(void) { u8 playerMultiplayerId; - u8 enemyMultiplayerId; + u8 partnerMultiplayerId; RunTasks(); AnimateSprites(); @@ -1145,7 +1033,7 @@ static void CB2_HandleStartMultiPartnerBattle(void) playerMultiplayerId = GetMultiplayerId(); gBattleScripting.multiplayerId = playerMultiplayerId; - enemyMultiplayerId = playerMultiplayerId ^ BIT_SIDE; + partnerMultiplayerId = playerMultiplayerId ^ BIT_SIDE; switch (gBattleCommunication[MULTIUSE_STATE]) { @@ -1156,7 +1044,7 @@ static void CB2_HandleStartMultiPartnerBattle(void) ShowBg(1); ShowBg(2); ShowBg(3); - sub_805EF14(); + FillAroundBattleWindows(); gBattleCommunication[MULTIUSE_STATE] = 1; } if (gWirelessCommType) @@ -1187,7 +1075,7 @@ static void CB2_HandleStartMultiPartnerBattle(void) *(&gBattleStruct->multiBuffer.linkBattlerHeader.versionSignatureHi) = 3; BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); - SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); + SendBlock(BitmaskAllOtherLinkPlayers(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); gBattleCommunication[MULTIUSE_STATE] = 2; } @@ -1221,25 +1109,28 @@ static void CB2_HandleStartMultiPartnerBattle(void) } break; case 3: + // Link battle, send/receive party Pokémon in groups if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2); + // Send Pokémon 1-2 + SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty, sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; case 4: if ((GetBlockReceivedStatus() & 3) == 3) { + // Recv partner's Pokémon 1-2, and copy partner's and own Pokémon into party positions ResetBlockReceivedFlags(); if (gLinkPlayers[playerMultiplayerId].id != 0) { - memcpy(gPlayerParty, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); - memcpy(gPlayerParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon) * 2); + memcpy(gPlayerParty, gBlockRecvBuffer[partnerMultiplayerId], sizeof(struct Pokemon) * 2); + memcpy(&gPlayerParty[MULTI_PARTY_SIZE], gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon) * 2); } else { memcpy(gPlayerParty, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon) * 2); - memcpy(gPlayerParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + memcpy(&gPlayerParty[MULTI_PARTY_SIZE], gBlockRecvBuffer[partnerMultiplayerId], sizeof(struct Pokemon) * 2); } gBattleCommunication[MULTIUSE_STATE]++; } @@ -1247,23 +1138,25 @@ static void CB2_HandleStartMultiPartnerBattle(void) case 5: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon)); + // Send Pokémon 3 + SendBlock(BitmaskAllOtherLinkPlayers(), &gPlayerParty[2], sizeof(struct Pokemon)); gBattleCommunication[MULTIUSE_STATE]++; } break; case 6: if ((GetBlockReceivedStatus() & 3) == 3) { + // Recv partner's Pokémon 3, and copy partner's and own Pokémon into party positions ResetBlockReceivedFlags(); if (gLinkPlayers[playerMultiplayerId].id != 0) { - memcpy(gPlayerParty + 2, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon)); - memcpy(gPlayerParty + 5, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon)); + memcpy(&gPlayerParty[2], gBlockRecvBuffer[partnerMultiplayerId], sizeof(struct Pokemon)); + memcpy(&gPlayerParty[2 + MULTI_PARTY_SIZE], gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon)); } else { - memcpy(gPlayerParty + 2, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon)); - memcpy(gPlayerParty + 5, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon)); + memcpy(&gPlayerParty[2], gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon)); + memcpy(&gPlayerParty[2 + MULTI_PARTY_SIZE], gBlockRecvBuffer[partnerMultiplayerId], sizeof(struct Pokemon)); } gBattleCommunication[MULTIUSE_STATE]++; } @@ -1271,52 +1164,55 @@ static void CB2_HandleStartMultiPartnerBattle(void) case 7: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gEnemyParty, sizeof(struct Pokemon) * 2); + // Send enemy Pokémon 1-2 to partner + SendBlock(BitmaskAllOtherLinkPlayers(), gEnemyParty, sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; case 8: if ((GetBlockReceivedStatus() & 3) == 3) { + // Recv enemy Pokémon 1-2 (if not master) ResetBlockReceivedFlags(); if (GetMultiplayerId() != 0) - { memcpy(gEnemyParty, gBlockRecvBuffer[0], sizeof(struct Pokemon) * 2); - } gBattleCommunication[MULTIUSE_STATE]++; } break; case 9: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gEnemyParty + 2, sizeof(struct Pokemon) * 2); + // Send enemy Pokémon 3-4 to partner + SendBlock(BitmaskAllOtherLinkPlayers(), &gEnemyParty[2], sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; case 10: if ((GetBlockReceivedStatus() & 3) == 3) { + // Recv enemy Pokémon 3-4 (if not master) ResetBlockReceivedFlags(); if (GetMultiplayerId() != 0) - { - memcpy(gEnemyParty + 2, gBlockRecvBuffer[0], sizeof(struct Pokemon) * 2); - } + memcpy(&gEnemyParty[2], gBlockRecvBuffer[0], sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; case 11: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gEnemyParty + 4, sizeof(struct Pokemon) * 2); + // Send enemy Pokémon 5-6 to partner + SendBlock(BitmaskAllOtherLinkPlayers(), &gEnemyParty[4], sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; case 12: if ((GetBlockReceivedStatus() & 3) == 3) { + // Recv enemy Pokémon 5-6 (if not master) ResetBlockReceivedFlags(); if (GetMultiplayerId() != 0) - memcpy(gEnemyParty + 4, gBlockRecvBuffer[0], sizeof(struct Pokemon) * 2); + memcpy(&gEnemyParty[4], gBlockRecvBuffer[0], sizeof(struct Pokemon) * 2); + TryCorrectShedinjaLanguage(&gPlayerParty[0]); TryCorrectShedinjaLanguage(&gPlayerParty[1]); TryCorrectShedinjaLanguage(&gPlayerParty[2]); @@ -1334,35 +1230,34 @@ static void CB2_HandleStartMultiPartnerBattle(void) break; case 13: InitBattleControllers(); - sub_8184E58(); + RecordedBattle_SetTrainerInfo(); gBattleCommunication[SPRITES_INIT_STATE1] = 0; gBattleCommunication[SPRITES_INIT_STATE2] = 0; if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { gBattleCommunication[MULTIUSE_STATE] = 14; - } else - { gBattleCommunication[MULTIUSE_STATE] = 16; - } break; case 14: + // Send rng seed for recorded battle if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), &gRecordedBattleRngSeed, sizeof(gRecordedBattleRngSeed)); + SendBlock(BitmaskAllOtherLinkPlayers(), &gRecordedBattleRngSeed, sizeof(gRecordedBattleRngSeed)); gBattleCommunication[MULTIUSE_STATE]++; } break; case 15: + // Receive rng seed for recorded battle (only read it if partner is the link master) if ((GetBlockReceivedStatus() & 3) == 3) { ResetBlockReceivedFlags(); if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) - memcpy(&gRecordedBattleRngSeed, gBlockRecvBuffer[enemyMultiplayerId], sizeof(gRecordedBattleRngSeed)); + memcpy(&gRecordedBattleRngSeed, gBlockRecvBuffer[partnerMultiplayerId], sizeof(gRecordedBattleRngSeed)); gBattleCommunication[MULTIUSE_STATE]++; } break; case 16: + // Finish, start battle if (BattleInitAllSprites(&gBattleCommunication[SPRITES_INIT_STATE1], &gBattleCommunication[SPRITES_INIT_STATE2])) { TrySetLinkBattleTowerEnemyPartyLevel(); @@ -1370,31 +1265,29 @@ static void CB2_HandleStartMultiPartnerBattle(void) gMain.callback1 = BattleMainCB1; SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { gBattleTypeFlags |= BATTLE_TYPE_LINK_IN_BATTLE; - } } break; } } -static void sub_80379F8(u8 arrayIdPlus) +static void SetMultiPartnerMenuParty(u8 offset) { s32 i; - for (i = 0; i < (int)ARRAY_COUNT(gMultiPartnerParty); i++) + for (i = 0; i < MULTI_PARTY_SIZE; i++) { - gMultiPartnerParty[i].species = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_SPECIES); - gMultiPartnerParty[i].heldItem = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_HELD_ITEM); - GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_NICKNAME, gMultiPartnerParty[i].nickname); - gMultiPartnerParty[i].level = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_LEVEL); - gMultiPartnerParty[i].hp = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_HP); - gMultiPartnerParty[i].maxhp = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_MAX_HP); - gMultiPartnerParty[i].status = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_STATUS); - gMultiPartnerParty[i].personality = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_PERSONALITY); - gMultiPartnerParty[i].gender = GetMonGender(&gPlayerParty[arrayIdPlus + i]); + gMultiPartnerParty[i].species = GetMonData(&gPlayerParty[offset + i], MON_DATA_SPECIES); + gMultiPartnerParty[i].heldItem = GetMonData(&gPlayerParty[offset + i], MON_DATA_HELD_ITEM); + GetMonData(&gPlayerParty[offset + i], MON_DATA_NICKNAME, gMultiPartnerParty[i].nickname); + gMultiPartnerParty[i].level = GetMonData(&gPlayerParty[offset + i], MON_DATA_LEVEL); + gMultiPartnerParty[i].hp = GetMonData(&gPlayerParty[offset + i], MON_DATA_HP); + gMultiPartnerParty[i].maxhp = GetMonData(&gPlayerParty[offset + i], MON_DATA_MAX_HP); + gMultiPartnerParty[i].status = GetMonData(&gPlayerParty[offset + i], MON_DATA_STATUS); + gMultiPartnerParty[i].personality = GetMonData(&gPlayerParty[offset + i], MON_DATA_PERSONALITY); + gMultiPartnerParty[i].gender = GetMonGender(&gPlayerParty[offset + i]); StripExtCtrlCodes(gMultiPartnerParty[i].nickname); - if (GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE) + if (GetMonData(&gPlayerParty[offset + i], MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE) PadNameString(gMultiPartnerParty[i].nickname, CHAR_SPACE); } memcpy(sMultiPartnerPartyBuffer, gMultiPartnerParty, sizeof(gMultiPartnerParty)); @@ -1404,15 +1297,15 @@ static void CB2_PreInitMultiBattle(void) { s32 i; u8 playerMultiplierId; - s32 numPlayers = 4; - u8 r4 = 0xF; + s32 numPlayers = MAX_BATTLERS_COUNT; + u8 blockMask = 0xF; u32 *savedBattleTypeFlags; void (**savedCallback)(void); if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) { numPlayers = 2; - r4 = 3; + blockMask = 3; } playerMultiplierId = GetMultiplayerId(); @@ -1429,14 +1322,14 @@ static void CB2_PreInitMultiBattle(void) case 0: if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) { - sMultiPartnerPartyBuffer = Alloc(sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty)); - sub_80379F8(0); - SendBlock(bitmask_all_link_players_but_self(), sMultiPartnerPartyBuffer, sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty)); + sMultiPartnerPartyBuffer = Alloc(sizeof(gMultiPartnerParty)); + SetMultiPartnerMenuParty(0); + SendBlock(BitmaskAllOtherLinkPlayers(), sMultiPartnerPartyBuffer, sizeof(gMultiPartnerParty)); gBattleCommunication[MULTIUSE_STATE]++; } break; case 1: - if ((GetBlockReceivedStatus() & r4) == r4) + if ((GetBlockReceivedStatus() & blockMask) == blockMask) { ResetBlockReceivedFlags(); for (i = 0; i < numPlayers; i++) @@ -1449,12 +1342,12 @@ static void CB2_PreInitMultiBattle(void) if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[playerMultiplierId].id & 1)) || (gLinkPlayers[i].id & 1 && gLinkPlayers[playerMultiplierId].id & 1)) { - memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty)); + memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], sizeof(gMultiPartnerParty)); } } else { - memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty)); + memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], sizeof(gMultiPartnerParty)); } } gBattleCommunication[MULTIUSE_STATE]++; @@ -1482,8 +1375,7 @@ static void CB2_PreInitMultiBattle(void) gBattleTypeFlags = *savedBattleTypeFlags; gMain.savedCallback = *savedCallback; SetMainCallback2(CB2_InitBattleInternal); - Free(sMultiPartnerPartyBuffer); - sMultiPartnerPartyBuffer = NULL; + FREE_AND_SET_NULL(sMultiPartnerPartyBuffer); } } else if (gReceivedRemoteLinkPlayers == 0) @@ -1491,8 +1383,7 @@ static void CB2_PreInitMultiBattle(void) gBattleTypeFlags = *savedBattleTypeFlags; gMain.savedCallback = *savedCallback; SetMainCallback2(CB2_InitBattleInternal); - Free(sMultiPartnerPartyBuffer); - sMultiPartnerPartyBuffer = NULL; + FREE_AND_SET_NULL(sMultiPartnerPartyBuffer); } break; } @@ -1513,8 +1404,8 @@ static void CB2_PreInitIngamePlayerPartnerBattle(void) switch (gBattleCommunication[MULTIUSE_STATE]) { case 0: - sMultiPartnerPartyBuffer = Alloc(sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty)); - sub_80379F8(3); + sMultiPartnerPartyBuffer = Alloc(sizeof(gMultiPartnerParty)); + SetMultiPartnerMenuParty(MULTI_PARTY_SIZE); gBattleCommunication[MULTIUSE_STATE]++; *savedCallback = gMain.savedCallback; *savedBattleTypeFlags = gBattleTypeFlags; @@ -1528,8 +1419,7 @@ static void CB2_PreInitIngamePlayerPartnerBattle(void) gBattleTypeFlags = *savedBattleTypeFlags; gMain.savedCallback = *savedCallback; SetMainCallback2(CB2_InitBattleInternal); - Free(sMultiPartnerPartyBuffer); - sMultiPartnerPartyBuffer = NULL; + FREE_AND_SET_NULL(sMultiPartnerPartyBuffer); } break; } @@ -1557,7 +1447,7 @@ static void CB2_HandleStartMultiBattle(void) ShowBg(1); ShowBg(2); ShowBg(3); - sub_805EF14(); + FillAroundBattleWindows(); gBattleCommunication[MULTIUSE_STATE] = 1; } if (gWirelessCommType) @@ -1576,7 +1466,7 @@ static void CB2_HandleStartMultiBattle(void) BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); - SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); + SendBlock(BitmaskAllOtherLinkPlayers(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); gBattleCommunication[MULTIUSE_STATE]++; } if (gWirelessCommType) @@ -1632,7 +1522,7 @@ static void CB2_HandleStartMultiBattle(void) case 3: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2); + SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty, sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -1695,7 +1585,7 @@ static void CB2_HandleStartMultiBattle(void) case 5: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon)); + SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty + 2, sizeof(struct Pokemon)); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -1771,7 +1661,7 @@ static void CB2_HandleStartMultiBattle(void) break; case 7: InitBattleControllers(); - sub_8184E58(); + RecordedBattle_SetTrainerInfo(); gBattleCommunication[SPRITES_INIT_STATE1] = 0; gBattleCommunication[SPRITES_INIT_STATE2] = 0; if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -1791,10 +1681,10 @@ static void CB2_HandleStartMultiBattle(void) case 8: if (IsLinkTaskFinished()) { - u32* ptr = gBattleStruct->multiBuffer.battleVideo; + u32 *ptr = gBattleStruct->multiBuffer.battleVideo; ptr[0] = gBattleTypeFlags; ptr[1] = gRecordedBattleRngSeed; // UB: overwrites berry data - SendBlock(bitmask_all_link_players_but_self(), ptr, sizeof(gBattleStruct->multiBuffer.battleVideo)); + SendBlock(BitmaskAllOtherLinkPlayers(), ptr, sizeof(gBattleStruct->multiBuffer.battleVideo)); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -1839,11 +1729,12 @@ void BattleMainCB2(void) UpdatePaletteFade(); RunTasks(); - if (JOY_HELD(B_BUTTON) && gBattleTypeFlags & BATTLE_TYPE_RECORDED && sub_8186450()) + if (JOY_HELD(B_BUTTON) && gBattleTypeFlags & BATTLE_TYPE_RECORDED && RecordedBattle_CanStopPlayback()) { + // Player pressed B during recorded battle playback, end battle gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; ResetPaletteFadeControl(); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); SetMainCallback2(CB2_QuitRecordedBattle); } } @@ -1852,7 +1743,7 @@ static void FreeRestoreBattleData(void) { gMain.callback1 = gPreBattleCallback1; gScanlineEffect.state = 3; - gMain.inBattle = 0; + gMain.inBattle = FALSE; ZeroEnemyPartyMons(); m4aSongNumStop(SE_LOW_HEALTH); FreeMonSpritesGfx(); @@ -1873,34 +1764,37 @@ void CB2_QuitRecordedBattle(void) } } -void sub_8038528(struct Sprite* sprite) +#define sState data[0] +#define sDelay data[4] + +static void SpriteCB_UnusedBattleInit(struct Sprite *sprite) { - sprite->data[0] = 0; - sprite->callback = sub_8038538; + sprite->sState = 0; + sprite->callback = SpriteCB_UnusedBattleInit_Main; } -static void sub_8038538(struct Sprite *sprite) +static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite) { - u16 *arr = (u16*)(gDecompressionBuffer); + u16 *arr = (u16 *)gDecompressionBuffer; - switch (sprite->data[0]) + switch (sprite->sState) { case 0: - sprite->data[0]++; + sprite->sState++; sprite->data[1] = 0; sprite->data[2] = 0x281; sprite->data[3] = 0; - sprite->data[4] = 1; + sprite->sDelay = 1; // fall through case 1: - sprite->data[4]--; - if (sprite->data[4] == 0) + sprite->sDelay--; + if (sprite->sDelay == 0) { s32 i; s32 r2; s32 r0; - sprite->data[4] = 2; + sprite->sDelay = 2; r2 = sprite->data[1] + sprite->data[3] * 32; r0 = sprite->data[2] - sprite->data[3] * 32; for (i = 0; i < 29; i += 2) @@ -1911,7 +1805,7 @@ static void sub_8038538(struct Sprite *sprite) sprite->data[3]++; if (sprite->data[3] == 21) { - sprite->data[0]++; + sprite->sState++; sprite->data[1] = 32; } } @@ -1944,8 +1838,8 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { - if (gTrainers[trainerNum].partySize > 3) - monsCount = 3; + if (gTrainers[trainerNum].partySize > PARTY_SIZE / 2) + monsCount = PARTY_SIZE / 2; else monsCount = gTrainers[trainerNum].partySize; } @@ -2042,12 +1936,6 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir return gTrainers[trainerNum].partySize; } -void sub_8038A04(void) // unused -{ - if (REG_VCOUNT < 0xA0 && REG_VCOUNT >= 0x6F) - SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_SCREENBASE(24) | BGCNT_TXT256x512); -} - void VBlankCB_Battle(void) { // Change gRngSeed every vblank unless the battle could be recorded. @@ -2148,7 +2036,7 @@ void CB2_InitEndLinkBattle(void) SetHBlankCallback(NULL); SetVBlankCallback(NULL); - gBattleTypeFlags &= ~(BATTLE_TYPE_LINK_IN_BATTLE); + gBattleTypeFlags &= ~BATTLE_TYPE_LINK_IN_BATTLE; if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { @@ -2159,7 +2047,7 @@ void CB2_InitEndLinkBattle(void) } else { - CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + CpuFill32(0, (void *)(VRAM), VRAM_SIZE); SetGpuReg(REG_OFFSET_MOSAIC, 0); SetGpuReg(REG_OFFSET_WIN0H, DISPLAY_WIDTH); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1)); @@ -2244,33 +2132,35 @@ static void EndLinkBattleInSteps(void) case 1: if (--gBattleCommunication[1] == 0) { - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); gBattleCommunication[MULTIUSE_STATE]++; } break; case 2: if (!gPaletteFade.active) { - u8 monsCount; + u8 battlerCount; gMain.anyLinkBattlerHasFrontierPass = RecordedBattle_GetFrontierPassFlag(); if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - monsCount = 4; + battlerCount = 4; else - monsCount = 2; + battlerCount = 2; - for (i = 0; i < monsCount && (gLinkPlayers[i].version & 0xFF) == VERSION_EMERALD; i++); + for (i = 0; i < battlerCount && (gLinkPlayers[i].version & 0xFF) == VERSION_EMERALD; i++); - if (!gSaveBlock2Ptr->frontier.disableRecordBattle && i == monsCount) + if (!gSaveBlock2Ptr->frontier.disableRecordBattle && i == battlerCount) { if (FlagGet(FLAG_SYS_FRONTIER_PASS)) { + // Ask player if they want to record the battle FreeAllWindowBuffers(); - SetMainCallback2(sub_80392A8); + SetMainCallback2(CB2_InitAskRecordBattle); } else if (!gMain.anyLinkBattlerHasFrontierPass) { + // No players can record this battle, end SetMainCallback2(gMain.savedCallback); FreeBattleResources(); FreeBattleSpritesData(); @@ -2278,6 +2168,8 @@ static void EndLinkBattleInSteps(void) } else if (gReceivedRemoteLinkPlayers == 0) { + // Player can't record battle but + // another player can, reconnect with them CreateTask(Task_ReconnectWithLinkPlayers, 5); gBattleCommunication[MULTIUSE_STATE]++; } @@ -2296,12 +2188,12 @@ static void EndLinkBattleInSteps(void) } break; case 3: - CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); for (i = 0; i < 2; i++) LoadChosenBattleElement(i); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); gBattleCommunication[MULTIUSE_STATE]++; break; case 4: @@ -2316,12 +2208,12 @@ static void EndLinkBattleInSteps(void) if (IsLinkTaskFinished() == TRUE) { SetLinkStandbyCallback(); - BattlePutTextOnWindow(gText_LinkStandby3, 0); + BattlePutTextOnWindow(gText_LinkStandby3, B_WIN_MSG); gBattleCommunication[MULTIUSE_STATE]++; } break; case 7: - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(B_WIN_MSG)) { if (IsLinkTaskFinished() == TRUE) gBattleCommunication[MULTIUSE_STATE]++; @@ -2335,7 +2227,7 @@ static void EndLinkBattleInSteps(void) case 9: if (!gMain.anyLinkBattlerHasFrontierPass || gWirelessCommType || gReceivedRemoteLinkPlayers != 1) { - gMain.anyLinkBattlerHasFrontierPass = 0; + gMain.anyLinkBattlerHasFrontierPass = FALSE; SetMainCallback2(gMain.savedCallback); FreeBattleResources(); FreeBattleSpritesData(); @@ -2377,13 +2269,13 @@ u32 GetBattleBgTemplateData(u8 arrayId, u8 caseId) return ret; } -static void sub_80392A8(void) +static void CB2_InitAskRecordBattle(void) { s32 i; SetHBlankCallback(NULL); SetVBlankCallback(NULL); - CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + CpuFill32(0, (void *)(VRAM), VRAM_SIZE); ResetPaletteFade(); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; @@ -2405,14 +2297,14 @@ static void sub_80392A8(void) FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; SetVBlankCallback(VBlankCB_Battle); - SetMainCallback2(sub_803937C); + SetMainCallback2(CB2_AskRecordBattle); BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); gBattleCommunication[MULTIUSE_STATE] = 0; } -static void sub_803937C(void) +static void CB2_AskRecordBattle(void) { - sub_803939C(); + AskRecordBattle(); AnimateSprites(); BuildOamBuffer(); RunTextPrinters(); @@ -2420,47 +2312,65 @@ static void sub_803937C(void) RunTasks(); } -static void sub_803939C(void) + +// States for AskRecordBattle +#define STATE_INIT 0 +#define STATE_LINK 1 +#define STATE_WAIT_LINK 2 +#define STATE_ASK_RECORD 3 +#define STATE_PRINT_YES_NO 4 +#define STATE_HANDLE_YES_NO 5 +#define STATE_RECORD_NO 6 +#define STATE_END_RECORD_NO 7 +#define STATE_WAIT_END 8 +#define STATE_END 9 +#define STATE_RECORD_YES 10 +#define STATE_RECORD_WAIT 11 +#define STATE_END_RECORD_YES 12 + +static void AskRecordBattle(void) { switch (gBattleCommunication[MULTIUSE_STATE]) { - case 0: + case STATE_INIT: ShowBg(0); ShowBg(1); ShowBg(2); gBattleCommunication[MULTIUSE_STATE]++; break; - case 1: + case STATE_LINK: if (gMain.anyLinkBattlerHasFrontierPass && gReceivedRemoteLinkPlayers == 0) CreateTask(Task_ReconnectWithLinkPlayers, 5); gBattleCommunication[MULTIUSE_STATE]++; break; - case 2: + case STATE_WAIT_LINK: if (!FuncIsActiveTask(Task_ReconnectWithLinkPlayers)) gBattleCommunication[MULTIUSE_STATE]++; break; - case 3: + case STATE_ASK_RECORD: if (!gPaletteFade.active) { - BattlePutTextOnWindow(gText_RecordBattleToPass, 0); + // "Would you like to record your battle on your FRONTIER PASS?" + BattlePutTextOnWindow(gText_RecordBattleToPass, B_WIN_MSG); gBattleCommunication[MULTIUSE_STATE]++; } break; - case 4: - if (!IsTextPrinterActive(0)) + case STATE_PRINT_YES_NO: + if (!IsTextPrinterActive(B_WIN_MSG)) { - HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); - BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC); + HandleBattleWindow(YESNOBOX_X_Y, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); gBattleCommunication[CURSOR_POSITION] = 1; BattleCreateYesNoCursorAt(1); gBattleCommunication[MULTIUSE_STATE]++; } break; - case 5: + case STATE_HANDLE_YES_NO: if (JOY_NEW(DPAD_UP)) { if (gBattleCommunication[CURSOR_POSITION] != 0) { + // Moved cursor onto Yes PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 0; @@ -2471,6 +2381,7 @@ static void sub_803939C(void) { if (gBattleCommunication[CURSOR_POSITION] == 0) { + // Moved cursor onto No PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 1; @@ -2482,12 +2393,14 @@ static void sub_803939C(void) PlaySE(SE_SELECT); if (gBattleCommunication[CURSOR_POSITION] == 0) { - HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); + // Selected Yes + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); gBattleCommunication[1] = MoveRecordedBattleToSaveData(); - gBattleCommunication[MULTIUSE_STATE] = 10; + gBattleCommunication[MULTIUSE_STATE] = STATE_RECORD_YES; } else { + // Selected No gBattleCommunication[MULTIUSE_STATE]++; } } @@ -2497,19 +2410,20 @@ static void sub_803939C(void) gBattleCommunication[MULTIUSE_STATE]++; } break; - case 6: + case STATE_RECORD_NO: if (IsLinkTaskFinished() == TRUE) { - HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); if (gMain.anyLinkBattlerHasFrontierPass) { + // Other battlers may be recording, wait for them SetLinkStandbyCallback(); - BattlePutTextOnWindow(gText_LinkStandby3, 0); + BattlePutTextOnWindow(gText_LinkStandby3, B_WIN_MSG); } - gBattleCommunication[MULTIUSE_STATE]++; + gBattleCommunication[MULTIUSE_STATE]++; // STATE_END_RECORD_NO } break; - case 8: + case STATE_WAIT_END: if (--gBattleCommunication[1] == 0) { if (gMain.anyLinkBattlerHasFrontierPass && !gWirelessCommType) @@ -2517,10 +2431,10 @@ static void sub_803939C(void) gBattleCommunication[MULTIUSE_STATE]++; } break; - case 9: + case STATE_END: if (!gMain.anyLinkBattlerHasFrontierPass || gWirelessCommType || gReceivedRemoteLinkPlayers != 1) { - gMain.anyLinkBattlerHasFrontierPass = 0; + gMain.anyLinkBattlerHasFrontierPass = FALSE; if (!gPaletteFade.active) { SetMainCallback2(gMain.savedCallback); @@ -2530,53 +2444,53 @@ static void sub_803939C(void) } } break; - case 10: + case STATE_RECORD_YES: if (gBattleCommunication[1] == 1) { PlaySE(SE_SAVE); BattleStringExpandPlaceholdersToDisplayedString(gText_BattleRecordedOnPass); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); - gBattleCommunication[1] = 0x80; + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); + gBattleCommunication[1] = 128; // Delay gBattleCommunication[MULTIUSE_STATE]++; } else { BattleStringExpandPlaceholdersToDisplayedString(BattleFrontier_BattleTowerBattleRoom_Text_RecordCouldntBeSaved); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); - gBattleCommunication[1] = 0x80; + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); + gBattleCommunication[1] = 128; // Delay gBattleCommunication[MULTIUSE_STATE]++; } break; - case 11: - if (IsLinkTaskFinished() == TRUE && !IsTextPrinterActive(0) && --gBattleCommunication[1] == 0) + case STATE_RECORD_WAIT: + if (IsLinkTaskFinished() == TRUE && !IsTextPrinterActive(B_WIN_MSG) && --gBattleCommunication[1] == 0) { if (gMain.anyLinkBattlerHasFrontierPass) { SetLinkStandbyCallback(); - BattlePutTextOnWindow(gText_LinkStandby3, 0); + BattlePutTextOnWindow(gText_LinkStandby3, B_WIN_MSG); } gBattleCommunication[MULTIUSE_STATE]++; } break; - case 12: - case 7: - if (!IsTextPrinterActive(0)) + case STATE_END_RECORD_YES: + case STATE_END_RECORD_NO: + if (!IsTextPrinterActive(B_WIN_MSG)) { if (gMain.anyLinkBattlerHasFrontierPass) { if (IsLinkTaskFinished() == TRUE) { - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - gBattleCommunication[1] = 0x20; - gBattleCommunication[MULTIUSE_STATE] = 8; + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + gBattleCommunication[1] = 32; // Delay + gBattleCommunication[MULTIUSE_STATE] = STATE_WAIT_END; } } else { - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - gBattleCommunication[1] = 0x20; - gBattleCommunication[MULTIUSE_STATE] = 8; + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + gBattleCommunication[1] = 32; // Delay + gBattleCommunication[MULTIUSE_STATE] = STATE_WAIT_END; } } break; @@ -2597,46 +2511,52 @@ static void TryCorrectShedinjaLanguage(struct Pokemon *mon) } } -u32 GetBattleWindowTemplatePixelWidth(u32 setId, u32 tableId) +u32 GetBattleWindowTemplatePixelWidth(u32 windowsType, u32 tableId) { - return gBattleWindowTemplates[setId][tableId].width * 8; + return gBattleWindowTemplates[windowsType][tableId].width * 8; } #define sBattler data[0] #define sSpeciesId data[2] -void SpriteCb_WildMon(struct Sprite *sprite) +void SpriteCB_WildMon(struct Sprite *sprite) { - sprite->callback = SpriteCb_MoveWildMonToRight; + sprite->callback = SpriteCB_MoveWildMonToRight; StartSpriteAnimIfDifferent(sprite, 0); - BeginNormalPaletteFade(0x20000, 0, 10, 10, RGB(8, 8, 8)); + if (WILD_DOUBLE_BATTLE) + BeginNormalPaletteFade((0x10000 << sprite->sBattler) | (0x10000 << BATTLE_PARTNER(sprite->sBattler)), 0, 10, 10, RGB(8, 8, 8)); + else + BeginNormalPaletteFade((0x10000 << sprite->sBattler), 0, 10, 10, RGB(8, 8, 8)); } -static void SpriteCb_MoveWildMonToRight(struct Sprite *sprite) +static void SpriteCB_MoveWildMonToRight(struct Sprite *sprite) { if ((gIntroSlideFlags & 1) == 0) { sprite->x2 += 2; if (sprite->x2 == 0) { - sprite->callback = SpriteCb_WildMonShowHealthbox; + sprite->callback = SpriteCB_WildMonShowHealthbox; } } } -static void SpriteCb_WildMonShowHealthbox(struct Sprite *sprite) +static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite) { if (sprite->animEnded) { StartHealthboxSlideIn(sprite->sBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[sprite->sBattler]); - sprite->callback = SpriteCb_WildMonAnimate; + sprite->callback = SpriteCB_WildMonAnimate; StartSpriteAnimIfDifferent(sprite, 0); - BeginNormalPaletteFade(0x20000, 0, 10, 0, RGB(8, 8, 8)); + if (WILD_DOUBLE_BATTLE) + BeginNormalPaletteFade((0x10000 << sprite->sBattler) | (0x10000 << BATTLE_PARTNER(sprite->sBattler)), 0, 10, 0, RGB(8, 8, 8)); + else + BeginNormalPaletteFade((0x10000 << sprite->sBattler), 0, 10, 0, RGB(8, 8, 8)); } } -static void SpriteCb_WildMonAnimate(struct Sprite *sprite) +static void SpriteCB_WildMonAnimate(struct Sprite *sprite) { if (!gPaletteFade.active) { @@ -2649,31 +2569,29 @@ void SpriteCallbackDummy_2(struct Sprite *sprite) } -// Unused -static void sub_80398BC(struct Sprite *sprite) -{ - sprite->data[3] = 6; - sprite->data[4] = 1; - sprite->callback = sub_80398D0; -} +#define sNumFlickers data[3] +#define sDelay data[4] -static void sub_80398D0(struct Sprite *sprite) +static void SpriteCB_Flicker(struct Sprite *sprite) { - sprite->data[4]--; - if (sprite->data[4] == 0) + sprite->sDelay--; + if (sprite->sDelay == 0) { - sprite->data[4] = 8; + sprite->sDelay = 8; sprite->invisible ^= 1; - sprite->data[3]--; - if (sprite->data[3] == 0) + sprite->sNumFlickers--; + if (sprite->sNumFlickers == 0) { sprite->invisible = FALSE; sprite->callback = SpriteCallbackDummy_2; - sUnusedUnknownArray[0] = 0; + // sFlickerArray[0] = 0; } } } +#undef sNumFlickers +#undef sDelay + extern const struct MonCoords gMonFrontPicCoords[]; extern const struct MonCoords gCastformFrontSpriteCoords[]; @@ -2729,7 +2647,7 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite) } else // Erase bottom part of the sprite to create a smooth illusion of mon falling down. { - u8* dst = gMonSpritesGfxPtr->sprites.byte[GetBattlerPosition(sprite->sBattler)] + (gBattleMonForms[sprite->sBattler] << 11) + (sprite->data[3] << 8); + u8 *dst = gMonSpritesGfxPtr->sprites.byte[GetBattlerPosition(sprite->sBattler)] + (gBattleMonForms[sprite->sBattler] << 11) + (sprite->data[3] << 8); for (i = 0; i < 0x100; i++) *(dst++) = 0; @@ -2740,14 +2658,14 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite) } // Used when selecting a move, which can hit multiple targets, in double battles. -void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite) +void SpriteCB_ShowAsMoveTarget(struct Sprite *sprite) { sprite->data[3] = 8; sprite->data[4] = sprite->invisible; - sprite->callback = SpriteCb_BlinkVisible; + sprite->callback = SpriteCB_BlinkVisible; } -static void SpriteCb_BlinkVisible(struct Sprite *sprite) +static void SpriteCB_BlinkVisible(struct Sprite *sprite) { if (--sprite->data[3] == 0) { @@ -2756,14 +2674,14 @@ static void SpriteCb_BlinkVisible(struct Sprite *sprite) } } -void SpriteCb_HideAsMoveTarget(struct Sprite *sprite) +void SpriteCB_HideAsMoveTarget(struct Sprite *sprite) { sprite->invisible = sprite->data[4]; sprite->data[4] = FALSE; sprite->callback = SpriteCallbackDummy_2; } -void SpriteCb_OpponentMonFromBall(struct Sprite *sprite) +void SpriteCB_OpponentMonFromBall(struct Sprite *sprite) { if (sprite->affineAnimEnded) { @@ -2789,19 +2707,19 @@ static void SpriteCB_BattleSpriteSlideLeft(struct Sprite *sprite) sprite->x2 -= 2; if (sprite->x2 == 0) { - sprite->callback = SpriteCallbackDummy_3; + sprite->callback = SpriteCB_Idle; sprite->data[1] = 0; } } } // Unused -static void sub_80105DC(struct Sprite *sprite) +static void SetIdleSpriteCallback(struct Sprite *sprite) { - sprite->callback = SpriteCallbackDummy_3; + sprite->callback = SpriteCB_Idle; } -static void SpriteCallbackDummy_3(struct Sprite *sprite) +static void SpriteCB_Idle(struct Sprite *sprite) { } @@ -2820,11 +2738,11 @@ void SpriteCB_FaintSlideAnim(struct Sprite *sprite) #undef sSpeedX #undef sSpeedY -#define sSinIndex data[0] -#define sDelta data[1] -#define sAmplitude data[2] -#define sBouncerSpriteId data[3] -#define sWhich data[4] +#define sSinIndex data[3] +#define sDelta data[4] +#define sAmplitude data[5] +#define sBouncerSpriteId data[6] +#define sWhich data[7] void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude) { @@ -2863,6 +2781,7 @@ void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude) gSprites[invisibleSpriteId].sAmplitude = amplitude; gSprites[invisibleSpriteId].sBouncerSpriteId = bouncerSpriteId; gSprites[invisibleSpriteId].sWhich = which; + gSprites[invisibleSpriteId].sBattler = battler; gSprites[bouncerSpriteId].x2 = 0; gSprites[bouncerSpriteId].y2 = 0; } @@ -2897,15 +2816,15 @@ void EndBounceEffect(u8 battler, u8 which) static void SpriteCB_BounceEffect(struct Sprite *sprite) { u8 bouncerSpriteId = sprite->sBouncerSpriteId; - s32 index; + s32 index = sprite->sSinIndex; + s32 y = Sin(index, sprite->sAmplitude) + sprite->sAmplitude; - if (sprite->sWhich == BOUNCE_HEALTHBOX) - index = sprite->sSinIndex; - else - index = sprite->sSinIndex; - - gSprites[bouncerSpriteId].y2 = Sin(index, sprite->sAmplitude) + sprite->sAmplitude; + gSprites[bouncerSpriteId].y2 = y; sprite->sSinIndex = (sprite->sSinIndex + sprite->sDelta) & 0xFF; + + bouncerSpriteId = GetMegaIndicatorSpriteId(sprite->sBouncerSpriteId); + if (sprite->sWhich == BOUNCE_HEALTHBOX && bouncerSpriteId != 0xFF) + gSprites[bouncerSpriteId].y2 = y; } #undef sSinIndex @@ -2914,29 +2833,31 @@ static void SpriteCB_BounceEffect(struct Sprite *sprite) #undef sBouncerSpriteId #undef sWhich -void SpriteCb_PlayerMonFromBall(struct Sprite *sprite) +void SpriteCB_PlayerMonFromBall(struct Sprite *sprite) { if (sprite->affineAnimEnded) BattleAnimateBackSprite(sprite, sprite->sSpeciesId); } -void sub_8039E60(struct Sprite *sprite) +static void SpriteCB_TrainerThrowObject_Main(struct Sprite *sprite) { - sub_8039E9C(sprite); + AnimSetCenterToCornerVecX(sprite); if (sprite->animEnded) - sprite->callback = SpriteCallbackDummy_3; + sprite->callback = SpriteCB_Idle; } +// Sprite callback for a trainer back pic to throw an object +// (Wally throwing a ball, throwing Pokéblocks/balls in the Safari Zone) void SpriteCB_TrainerThrowObject(struct Sprite *sprite) { StartSpriteAnim(sprite, 1); - sprite->callback = sub_8039E60; + sprite->callback = SpriteCB_TrainerThrowObject_Main; } -void sub_8039E9C(struct Sprite *sprite) +void AnimSetCenterToCornerVecX(struct Sprite *sprite) { if (sprite->animDelayCounter == 0) - sprite->centerToCornerVecX = gUnknown_0831ACE0[sprite->animCmdIndex]; + sprite->centerToCornerVecX = sCenterToCornerVecXs[sprite->animCmdIndex]; } void BeginBattleIntroDummy(void) @@ -2948,7 +2869,8 @@ void BeginBattleIntro(void) { BattleStartClearSetData(); gBattleCommunication[1] = 0; - gBattleMainFunc = BattleIntroGetMonsData; + gBattleStruct->introState = 0; + gBattleMainFunc = DoBattleIntro; } static void BattleMainCB1(void) @@ -2962,50 +2884,51 @@ static void BattleMainCB1(void) static void BattleStartClearSetData(void) { s32 i; - u32 j; - u8 *dataPtr; TurnValuesCleanUp(FALSE); SpecialStatusesClear(); + memset(&gDisableStructs, 0, sizeof(gDisableStructs)); + memset(&gFieldTimers, 0, sizeof(gFieldTimers)); + memset(&gSideStatuses, 0, sizeof(gSideStatuses)); + memset(&gSideTimers, 0, sizeof(gSideTimers)); + memset(&gWishFutureKnock, 0, sizeof(gWishFutureKnock)); + memset(&gBattleResults, 0, sizeof(gBattleResults)); + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { gStatuses3[i] = 0; - - dataPtr = (u8 *)&gDisableStructs[i]; - for (j = 0; j < sizeof(struct DisableStruct); j++) - dataPtr[j] = 0; - + gStatuses4[i] = 0; gDisableStructs[i].isFirstTurn = 2; - sUnusedBattlersArray[i] = 0; - gLastMoves[i] = 0; - gLastLandedMoves[i] = 0; + gLastMoves[i] = MOVE_NONE; + gLastLandedMoves[i] = MOVE_NONE; gLastHitByType[i] = 0; - gLastResultingMoves[i] = 0; + gLastResultingMoves[i] = MOVE_NONE; gLastHitBy[i] = 0xFF; - gLockedMoves[i] = 0; - gLastPrintedMoves[i] = 0; + gLockedMoves[i] = MOVE_NONE; + gLastPrintedMoves[i] = MOVE_NONE; gBattleResources->flags->flags[i] = 0; gPalaceSelectionBattleScripts[i] = 0; + gBattleStruct->lastTakenMove[i] = MOVE_NONE; + gBattleStruct->choicedMove[i] = MOVE_NONE; + gBattleStruct->changedItems[i] = 0; + gBattleStruct->lastTakenMoveFrom[i][0] = MOVE_NONE; + gBattleStruct->lastTakenMoveFrom[i][1] = MOVE_NONE; + gBattleStruct->lastTakenMoveFrom[i][2] = MOVE_NONE; + gBattleStruct->lastTakenMoveFrom[i][3] = MOVE_NONE; + gBattleStruct->AI_monToSwitchIntoId[i] = PARTY_SIZE; + gBattleStruct->skyDropTargets[i] = 0xFF; } - for (i = 0; i < 2; i++) - { - gSideStatuses[i] = 0; + gLastUsedMove = 0; + gFieldStatuses = 0; - dataPtr = (u8 *)&gSideTimers[i]; - for (j = 0; j < sizeof(struct SideTimer); j++) - dataPtr[j] = 0; - } + gHasFetchedBall = FALSE; + gLastUsedBall = 0; gBattlerAttacker = 0; gBattlerTarget = 0; gBattleWeather = 0; - - dataPtr = (u8 *)&gWishFutureKnock; - for (i = 0; i < sizeof(struct WishFutureKnock); i++) - dataPtr[i] = 0; - gHitMarker = 0; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) @@ -3014,9 +2937,13 @@ static void BattleStartClearSetData(void) gHitMarker |= HITMARKER_NO_ANIMATIONS; } else if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) && GetBattleSceneInRecordedBattle()) + { gHitMarker |= HITMARKER_NO_ANIMATIONS; + } gBattleScripting.battleStyle = gSaveBlock2Ptr->optionsBattleStyle; + gBattleScripting.expOnCatch = (B_EXP_CATCH >= GEN_6); + gBattleScripting.monCaught = FALSE; gMultiHitCounter = 0; gBattleOutcome = 0; @@ -3038,49 +2965,43 @@ static void BattleStartClearSetData(void) gBattleStruct->runTries = 0; gBattleStruct->safariGoNearCounter = 0; gBattleStruct->safariPkblThrowCounter = 0; - *(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; + gBattleStruct->safariCatchFactor = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; gBattleStruct->safariEscapeFactor = 3; gBattleStruct->wildVictorySong = 0; gBattleStruct->moneyMultiplier = 1; - for (i = 0; i < 8; i++) - { - *((u8 *)gBattleStruct->lastTakenMove + i) = 0; - *((u8 *)gBattleStruct->usedHeldItems + i) = 0; - *((u8 *)gBattleStruct->choicedMove + i) = 0; - *((u8 *)gBattleStruct->changedItems + i) = 0; - *(i + 0 * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(i + 1 * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(i + 2 * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(i + 3 * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - } - - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - *(gBattleStruct->AI_monToSwitchIntoId + i) = PARTY_SIZE; - } - gBattleStruct->givenExpMons = 0; gBattleStruct->palaceFlags = 0; gRandomTurnNumber = Random(); - dataPtr = (u8 *)(&gBattleResults); - for (i = 0; i < sizeof(struct BattleResults); i++) - dataPtr[i] = 0; - gBattleResults.shinyWildMon = IsMonShiny(&gEnemyParty[0]); gBattleStruct->arenaLostPlayerMons = 0; gBattleStruct->arenaLostOpponentMons = 0; + + gBattleStruct->mega.triggerSpriteId = 0xFF; + + gBattleStruct->stickyWebUser = 0xFF; + gBattleStruct->appearedInBattle = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + gBattleStruct->usedHeldItems[i][0] = 0; + gBattleStruct->usedHeldItems[i][1] = 0; + gBattleStruct->itemStolen[i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + gPartyCriticalHits[i] = 0; + } + + gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky } void SwitchInClearSetData(void) { - struct DisableStruct disableStructCopy = gDisableStructs[gActiveBattler]; s32 i; - u8 *ptr; + struct DisableStruct disableStructCopy = gDisableStructs[gActiveBattler]; + ClearIllusionMon(gActiveBattler); if (gBattleMoves[gCurrentMove].effect != EFFECT_BATON_PASS) { for (i = 0; i < NUM_BATTLE_STATS; i++) @@ -3099,39 +3020,42 @@ void SwitchInClearSetData(void) if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) { gBattleMons[gActiveBattler].status2 &= (STATUS2_CONFUSION | STATUS2_FOCUS_ENERGY | STATUS2_SUBSTITUTE | STATUS2_ESCAPE_PREVENTION | STATUS2_CURSED); - gStatuses3[gActiveBattler] &= (STATUS3_LEECHSEED_BATTLER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT); - + gStatuses3[gActiveBattler] &= (STATUS3_LEECHSEED_BATTLER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED + | STATUS3_GASTRO_ACID | STATUS3_EMBARGO | STATUS3_TELEKINESIS | STATUS3_MAGNET_RISE | STATUS3_HEAL_BLOCK + | STATUS3_AQUA_RING | STATUS3_POWER_TRICK); + gStatuses4[gActiveBattler] &= (STATUS4_MUD_SPORT | STATUS4_WATER_SPORT); for (i = 0; i < gBattlersCount; i++) { if (GetBattlerSide(gActiveBattler) != GetBattlerSide(i) && (gStatuses3[i] & STATUS3_ALWAYS_HITS) != 0 && (gDisableStructs[i].battlerWithSureHit == gActiveBattler)) { - gStatuses3[i] &= ~(STATUS3_ALWAYS_HITS); + gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; gStatuses3[i] |= STATUS3_ALWAYS_HITS_TURN(2); } } + if (gStatuses3[gActiveBattler] & STATUS3_POWER_TRICK) + SWAP(gBattleMons[gActiveBattler].attack, gBattleMons[gActiveBattler].defense, i); } else { gBattleMons[gActiveBattler].status2 = 0; gStatuses3[gActiveBattler] = 0; + gStatuses4[gActiveBattler] = 0; } for (i = 0; i < gBattlersCount; i++) { if (gBattleMons[i].status2 & STATUS2_INFATUATED_WITH(gActiveBattler)) - gBattleMons[i].status2 &= ~(STATUS2_INFATUATED_WITH(gActiveBattler)); + gBattleMons[i].status2 &= ~STATUS2_INFATUATED_WITH(gActiveBattler); if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && *(gBattleStruct->wrappedBy + i) == gActiveBattler) - gBattleMons[i].status2 &= ~(STATUS2_WRAPPED); + gBattleMons[i].status2 &= ~STATUS2_WRAPPED; } gActionSelectionCursor[gActiveBattler] = 0; gMoveSelectionCursor[gActiveBattler] = 0; - ptr = (u8 *)&gDisableStructs[gActiveBattler]; - for (i = 0; i < sizeof(struct DisableStruct); i++) - ptr[i] = 0; + memset(&gDisableStructs[gActiveBattler], 0, sizeof(struct DisableStruct)); if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) { @@ -3145,611 +3069,524 @@ void SwitchInClearSetData(void) gMoveResultFlags = 0; gDisableStructs[gActiveBattler].isFirstTurn = 2; gDisableStructs[gActiveBattler].truantSwitchInHack = disableStructCopy.truantSwitchInHack; - gLastMoves[gActiveBattler] = 0; - gLastLandedMoves[gActiveBattler] = 0; + gLastMoves[gActiveBattler] = MOVE_NONE; + gLastLandedMoves[gActiveBattler] = MOVE_NONE; gLastHitByType[gActiveBattler] = 0; - gLastResultingMoves[gActiveBattler] = 0; - gLastPrintedMoves[gActiveBattler] = 0; + gLastResultingMoves[gActiveBattler] = MOVE_NONE; + gLastPrintedMoves[gActiveBattler] = MOVE_NONE; gLastHitBy[gActiveBattler] = 0xFF; - *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 0) = 0; - *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 1) = 0; - *(0 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(0 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; - *(1 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(1 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; - *(2 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(2 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; - *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; - + gBattleStruct->lastTakenMove[gActiveBattler] = 0; + gBattleStruct->sameMoveTurns[gActiveBattler] = 0; + gBattleStruct->lastTakenMoveFrom[gActiveBattler][0] = 0; + gBattleStruct->lastTakenMoveFrom[gActiveBattler][1] = 0; + gBattleStruct->lastTakenMoveFrom[gActiveBattler][2] = 0; + gBattleStruct->lastTakenMoveFrom[gActiveBattler][3] = 0; + gBattleStruct->lastMoveFailed &= ~(gBitTable[gActiveBattler]); gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]); + if (gActiveBattler == gBattleStruct->stickyWebUser) + gBattleStruct->stickyWebUser = 0xFF; // Switched into sticky web user slot so reset it + for (i = 0; i < gBattlersCount; i++) { if (i != gActiveBattler && GetBattlerSide(i) != GetBattlerSide(gActiveBattler)) - { - *(gBattleStruct->lastTakenMove + i * 2 + 0) = 0; - *(gBattleStruct->lastTakenMove + i * 2 + 1) = 0; - } - *(i * 8 + gActiveBattler * 2 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(i * 8 + gActiveBattler * 2 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + gBattleStruct->lastTakenMove[i] = MOVE_NONE; + + gBattleStruct->lastTakenMoveFrom[i][gActiveBattler] = 0; } - *(u8*)((u8*)(&gBattleStruct->choicedMove[gActiveBattler]) + 0) = 0; - *(u8*)((u8*)(&gBattleStruct->choicedMove[gActiveBattler]) + 1) = 0; - + gBattleStruct->choicedMove[gActiveBattler] = MOVE_NONE; gBattleResources->flags->flags[gActiveBattler] = 0; - gCurrentMove = 0; + gCurrentMove = MOVE_NONE; gBattleStruct->arenaTurnCounter = 0xFF; + // Reset damage to prevent things like red card activating if the switched-in mon is holding it + gSpecialStatuses[gActiveBattler].physicalDmg = 0; + gSpecialStatuses[gActiveBattler].specialDmg = 0; + ClearBattlerMoveHistory(gActiveBattler); ClearBattlerAbilityHistory(gActiveBattler); + ClearBattlerItemEffectHistory(gActiveBattler); } void FaintClearSetData(void) { s32 i; - u8 *ptr; for (i = 0; i < NUM_BATTLE_STATS; i++) gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; gBattleMons[gActiveBattler].status2 = 0; gStatuses3[gActiveBattler] = 0; + gStatuses4[gActiveBattler] = 0; for (i = 0; i < gBattlersCount; i++) { if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].battlerPreventingEscape == gActiveBattler) gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION; if (gBattleMons[i].status2 & STATUS2_INFATUATED_WITH(gActiveBattler)) - gBattleMons[i].status2 &= ~(STATUS2_INFATUATED_WITH(gActiveBattler)); + gBattleMons[i].status2 &= ~STATUS2_INFATUATED_WITH(gActiveBattler); if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && *(gBattleStruct->wrappedBy + i) == gActiveBattler) - gBattleMons[i].status2 &= ~(STATUS2_WRAPPED); + gBattleMons[i].status2 &= ~STATUS2_WRAPPED; } gActionSelectionCursor[gActiveBattler] = 0; gMoveSelectionCursor[gActiveBattler] = 0; - ptr = (u8 *)&gDisableStructs[gActiveBattler]; - for (i = 0; i < sizeof(struct DisableStruct); i++) - ptr[i] = 0; + memset(&gDisableStructs[gActiveBattler], 0, sizeof(struct DisableStruct)); - gProtectStructs[gActiveBattler].protected = 0; - gProtectStructs[gActiveBattler].endured = 0; - gProtectStructs[gActiveBattler].noValidMoves = 0; - gProtectStructs[gActiveBattler].helpingHand = 0; - gProtectStructs[gActiveBattler].bounceMove = 0; - gProtectStructs[gActiveBattler].stealMove = 0; - gProtectStructs[gActiveBattler].flag0Unknown = 0; - gProtectStructs[gActiveBattler].prlzImmobility = 0; - gProtectStructs[gActiveBattler].confusionSelfDmg = 0; - gProtectStructs[gActiveBattler].targetNotAffected = 0; - gProtectStructs[gActiveBattler].chargingTurn = 0; - gProtectStructs[gActiveBattler].fleeFlag = 0; - gProtectStructs[gActiveBattler].usedImprisonedMove = 0; - gProtectStructs[gActiveBattler].loveImmobility = 0; - gProtectStructs[gActiveBattler].usedDisabledMove = 0; - gProtectStructs[gActiveBattler].usedTauntedMove = 0; - gProtectStructs[gActiveBattler].flag2Unknown = 0; - gProtectStructs[gActiveBattler].flinchImmobility = 0; - gProtectStructs[gActiveBattler].notFirstStrike = 0; + gProtectStructs[gActiveBattler].protected = FALSE; + gProtectStructs[gActiveBattler].spikyShielded = FALSE; + gProtectStructs[gActiveBattler].kingsShielded = FALSE; + gProtectStructs[gActiveBattler].banefulBunkered = FALSE; + gProtectStructs[gActiveBattler].quash = FALSE; + gProtectStructs[gActiveBattler].obstructed = FALSE; + gProtectStructs[gActiveBattler].endured = FALSE; + gProtectStructs[gActiveBattler].noValidMoves = FALSE; + gProtectStructs[gActiveBattler].helpingHand = FALSE; + gProtectStructs[gActiveBattler].bounceMove = FALSE; + gProtectStructs[gActiveBattler].stealMove = FALSE; + gProtectStructs[gActiveBattler].prlzImmobility = FALSE; + gProtectStructs[gActiveBattler].confusionSelfDmg = FALSE; + gProtectStructs[gActiveBattler].targetAffected = FALSE; + gProtectStructs[gActiveBattler].chargingTurn = FALSE; + gProtectStructs[gActiveBattler].fleeType = 0; + gProtectStructs[gActiveBattler].usedImprisonedMove = FALSE; + gProtectStructs[gActiveBattler].loveImmobility = FALSE; + gProtectStructs[gActiveBattler].usedDisabledMove = FALSE; + gProtectStructs[gActiveBattler].usedTauntedMove = FALSE; + gProtectStructs[gActiveBattler].flag2Unknown = FALSE; + gProtectStructs[gActiveBattler].flinchImmobility = FALSE; + gProtectStructs[gActiveBattler].notFirstStrike = FALSE; + gProtectStructs[gActiveBattler].usedHealBlockedMove = FALSE; + gProtectStructs[gActiveBattler].usesBouncedMove = FALSE; + gProtectStructs[gActiveBattler].usedGravityPreventedMove = FALSE; + gProtectStructs[gActiveBattler].usedThroatChopPreventedMove = FALSE; + gProtectStructs[gActiveBattler].statRaised = FALSE; + gProtectStructs[gActiveBattler].statFell = FALSE; + gProtectStructs[gActiveBattler].pranksterElevated = FALSE; gDisableStructs[gActiveBattler].isFirstTurn = 2; - gLastMoves[gActiveBattler] = 0; - gLastLandedMoves[gActiveBattler] = 0; + gLastMoves[gActiveBattler] = MOVE_NONE; + gLastLandedMoves[gActiveBattler] = MOVE_NONE; gLastHitByType[gActiveBattler] = 0; - gLastResultingMoves[gActiveBattler] = 0; - gLastPrintedMoves[gActiveBattler] = 0; + gLastResultingMoves[gActiveBattler] = MOVE_NONE; + gLastPrintedMoves[gActiveBattler] = MOVE_NONE; gLastHitBy[gActiveBattler] = 0xFF; - *(u8*)((u8*)(&gBattleStruct->choicedMove[gActiveBattler]) + 0) = 0; - *(u8*)((u8*)(&gBattleStruct->choicedMove[gActiveBattler]) + 1) = 0; - - *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 0) = 0; - *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 1) = 0; - *(0 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(0 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; - *(1 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(1 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; - *(2 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(2 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; - *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + gBattleStruct->choicedMove[gActiveBattler] = MOVE_NONE; + gBattleStruct->sameMoveTurns[gActiveBattler] = 0; + gBattleStruct->lastTakenMove[gActiveBattler] = MOVE_NONE; + gBattleStruct->lastTakenMoveFrom[gActiveBattler][0] = 0; + gBattleStruct->lastTakenMoveFrom[gActiveBattler][1] = 0; + gBattleStruct->lastTakenMoveFrom[gActiveBattler][2] = 0; + gBattleStruct->lastTakenMoveFrom[gActiveBattler][3] = 0; gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]); + if (gActiveBattler == gBattleStruct->stickyWebUser) + gBattleStruct->stickyWebUser = 0xFF; // User of sticky web fainted, so reset the stored battler ID + for (i = 0; i < gBattlersCount; i++) { if (i != gActiveBattler && GetBattlerSide(i) != GetBattlerSide(gActiveBattler)) - { - *(gBattleStruct->lastTakenMove + i * 2 + 0) = 0; - *(gBattleStruct->lastTakenMove + i * 2 + 1) = 0; - } - *(i * 8 + gActiveBattler * 2 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; - *(i * 8 + gActiveBattler * 2 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + gBattleStruct->lastTakenMove[i] = MOVE_NONE; + + gBattleStruct->lastTakenMoveFrom[i][gActiveBattler] = 0; } gBattleResources->flags->flags[gActiveBattler] = 0; gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; + gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY; ClearBattlerMoveHistory(gActiveBattler); ClearBattlerAbilityHistory(gActiveBattler); -} + ClearBattlerItemEffectHistory(gActiveBattler); + UndoFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FALSE); + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]); -static void BattleIntroGetMonsData(void) -{ - switch (gBattleCommunication[MULTIUSE_STATE]) + // If the fainted mon was involved in a Sky Drop + if (gBattleStruct->skyDropTargets[gActiveBattler] != 0xFF) { - case 0: - gActiveBattler = gBattleCommunication[1]; - BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, 0); - MarkBattlerForControllerExec(gActiveBattler); - gBattleCommunication[MULTIUSE_STATE]++; - break; - case 1: - if (gBattleControllerExecFlags == 0) + // Get battler id of the other Pokemon involved in this Sky Drop + u8 otherSkyDropper = gBattleStruct->skyDropTargets[gActiveBattler]; + + // Clear Sky Drop data + gBattleStruct->skyDropTargets[gActiveBattler] = 0xFF; + gBattleStruct->skyDropTargets[otherSkyDropper] = 0xFF; + + // If the other Pokemon involved in this Sky Drop was the target, not the attacker + if (gStatuses3[otherSkyDropper] & STATUS3_SKY_DROPPED) { - gBattleCommunication[1]++; - if (gBattleCommunication[1] == gBattlersCount) - gBattleMainFunc = BattleIntroPrepareBackgroundSlide; - else - gBattleCommunication[MULTIUSE_STATE] = 0; + // Release the target and take them out of the semi-invulnerable state + gStatuses3[otherSkyDropper] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR); + + // Make the target's sprite visible + gSprites[gBattlerSpriteIds[otherSkyDropper]].invisible = FALSE; + + // If the target was sky dropped in the middle of using Outrage/Petal Dance/Thrash, + // confuse them upon release and print "confused via fatigue" message and animation. + if (gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE) + { + gBattleMons[otherSkyDropper].status2 &= ~(STATUS2_LOCK_CONFUSE); + + // If the released mon can be confused, do so. + // Don't use CanBeConfused here, since it can cause issues in edge cases. + if (!(GetBattlerAbility(otherSkyDropper) == ABILITY_OWN_TEMPO + || gBattleMons[otherSkyDropper].status2 & STATUS2_CONFUSION + || IsBattlerTerrainAffected(otherSkyDropper, STATUS_FIELD_MISTY_TERRAIN))) + { + gBattleMons[otherSkyDropper].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); + gBattlerAttacker = otherSkyDropper; + gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 2; + } + } } - break; } } -static void BattleIntroPrepareBackgroundSlide(void) +static void DoBattleIntro(void) { - if (gBattleControllerExecFlags == 0) - { - gActiveBattler = GetBattlerAtPosition(0); - BtlController_EmitIntroSlide(0, gBattleTerrain); - MarkBattlerForControllerExec(gActiveBattler); - gBattleMainFunc = BattleIntroDrawTrainersOrMonsSprites; - gBattleCommunication[0] = 0; - gBattleCommunication[1] = 0; - } -} - -static void BattleIntroDrawTrainersOrMonsSprites(void) -{ - u8 *ptr; s32 i; + u8 *state = &gBattleStruct->introState; - if (gBattleControllerExecFlags) - return; - - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + switch (*state) { - if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) - && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + case 0: // Get Data of all battlers. + gActiveBattler = gBattleCommunication[1]; + BtlController_EmitGetMonData(BUFFER_A, REQUEST_ALL_BATTLE, 0); + MarkBattlerForControllerExec(gActiveBattler); + (*state)++; + break; + case 1: // Loop through all battlers. + if (!gBattleControllerExecFlags) { - ptr = (u8 *)&gBattleMons[gActiveBattler]; - for (i = 0; i < sizeof(struct BattlePokemon); i++) - ptr[i] = 0; + if (++gBattleCommunication[1] == gBattlersCount) + (*state)++; + else + *state = 0; } - else + break; + case 2: // Start graphical intro slide. + if (!gBattleControllerExecFlags) { - u16* hpOnSwitchout; - - ptr = (u8 *)&gBattleMons[gActiveBattler]; - for (i = 0; i < sizeof(struct BattlePokemon); i++) - ptr[i] = gBattleBufferB[gActiveBattler][4 + i]; - - gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; - gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; - gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); - hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)]; - *hpOnSwitchout = gBattleMons[gActiveBattler].hp; - for (i = 0; i < NUM_BATTLE_STATS; i++) - gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; - gBattleMons[gActiveBattler].status2 = 0; - } - - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT) - { - BtlController_EmitDrawTrainerPic(0); + gActiveBattler = GetBattlerAtPosition(0); + BtlController_EmitIntroSlide(BUFFER_A, gBattleTerrain); MarkBattlerForControllerExec(gActiveBattler); + gBattleCommunication[0] = 0; + gBattleCommunication[1] = 0; + (*state)++; + } + break; + case 3: // Wait for intro slide. + if (!gBattleControllerExecFlags) + (*state)++; + break; + case 4: // Copy battler data gotten in cases 0 and 1. Draw trainer/mon sprite. + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + { + if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + memset(&gBattleMons[gActiveBattler], 0, sizeof(struct BattlePokemon)); + } + else + { + memcpy(&gBattleMons[gActiveBattler], &gBattleResources->bufferB[gActiveBattler][4], sizeof(struct BattlePokemon)); + gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; + gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; + gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY; + gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); + gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)] = gBattleMons[gActiveBattler].hp; + gBattleMons[gActiveBattler].status2 = 0; + for (i = 0; i < NUM_BATTLE_STATS; i++) + gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; + } + + // Draw sprite. + switch (GetBattlerPosition(gActiveBattler)) + { + case B_POSITION_PLAYER_LEFT: // player sprite + BtlController_EmitDrawTrainerPic(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + break; + case B_POSITION_OPPONENT_LEFT: + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) // opponent 1 sprite + { + BtlController_EmitDrawTrainerPic(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + } + else // wild mon 1 + { + BtlController_EmitLoadMonSprite(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL); + } + break; + case B_POSITION_PLAYER_RIGHT: + if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) // partner sprite + { + BtlController_EmitDrawTrainerPic(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + } + break; + case B_POSITION_OPPONENT_RIGHT: + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) // opponent 2 if exists + { + BtlController_EmitDrawTrainerPic(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + } + } + else if (IsBattlerAlive(gActiveBattler)) // wild mon 2 if alive + { + BtlController_EmitLoadMonSprite(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL); + } + break; + } + + if (gBattleTypeFlags & BATTLE_TYPE_ARENA) + BattleArena_InitPoints(); } if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT) + (*state)++; + } + else // Skip party summary since it is a wild battle. + { + if (B_FAST_INTRO) + *state = 7; // Don't wait for sprite, print message at the same time. + else + *state = 6; // Wait for sprite to load. + } + break; + case 5: // draw party summary in trainer battles + if (!gBattleControllerExecFlags) + { + struct HpAndStatus hpStatus[PARTY_SIZE]; + + for (i = 0; i < PARTY_SIZE; i++) { - BtlController_EmitDrawTrainerPic(0); - MarkBattlerForControllerExec(gActiveBattler); + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE + || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + hpStatus[i].hp = HP_EMPTY_SLOT; + hpStatus[i].status = 0; + } + else + { + hpStatus[i].hp = GetMonData(&gEnemyParty[i], MON_DATA_HP); + hpStatus[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); + } } - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT - && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_LINK - | BATTLE_TYPE_RECORDED_LINK - | BATTLE_TYPE_TRAINER_HILL))) + + gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + BtlController_EmitDrawPartyStatusSummary(BUFFER_A, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY); + MarkBattlerForControllerExec(gActiveBattler); + + for (i = 0; i < PARTY_SIZE; i++) { - HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality); + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + hpStatus[i].hp = HP_EMPTY_SLOT; + hpStatus[i].status = 0; + } + else + { + hpStatus[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + } + } + + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + BtlController_EmitDrawPartyStatusSummary(BUFFER_A, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY); + MarkBattlerForControllerExec(gActiveBattler); + + (*state)++; + } + break; + case 6: // wait for previous action to complete + if (!gBattleControllerExecFlags) + (*state)++; + break; + case 7: // print battle intro message + if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) + { + PrepareStringBattle(STRINGID_INTROMSG, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); + (*state)++; + } + break; + case 8: // wait for intro message to be printed + if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + (*state)++; + } + else + { + if (B_FAST_INTRO) + *state = 15; // Wait for text to be printed. + else + *state = 14; // Wait for text and sprite. } } + break; + case 9: // print opponent sends out + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) + PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); else + PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); + (*state)++; + break; + case 10: // wait for opponent sends out text + if (!gBattleControllerExecFlags) + (*state)++; + break; + case 11: // first opponent's mon send out animation + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + else + gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + + BtlController_EmitIntroTrainerBallThrow(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + (*state)++; + break; + case 12: // nothing + (*state)++; + case 13: // second opponent's mon send out + if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) { - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + else + gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + + BtlController_EmitIntroTrainerBallThrow(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + } + if (B_FAST_INTRO && !(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK))) + *state = 15; // Print at the same time as trainer sends out second mon. + else + (*state)++; + break; + case 14: // wait for opponent 2 send out + if (!gBattleControllerExecFlags) + (*state)++; + break; + case 15: // wait for wild battle message + if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) + (*state)++; + break; + case 16: // print player sends out + if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) + gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + else + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + + // A hack that makes fast intro work in trainer battles too. + if (B_FAST_INTRO + && gBattleTypeFlags & BATTLE_TYPE_TRAINER + && !(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK)) + && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_SIDE]].callback == SpriteCallbackDummy) { - if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_LINK - | BATTLE_TYPE_RECORDED_LINK - | BATTLE_TYPE_TRAINER_HILL))) + return; + } + + PrepareStringBattle(STRINGID_INTROSENDOUT, gActiveBattler); + } + (*state)++; + break; + case 17: // wait for player send out message + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleControllerExecFlags)) + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) + gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + else + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + + if (!IsBattlerMarkedForControllerExec(gActiveBattler)) + (*state)++; + } + break; + case 18: // player 1 send out + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) + gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + else + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + + BtlController_EmitIntroTrainerBallThrow(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + (*state)++; + break; + case 19: // player 2 send out + if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) + gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + else + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + + BtlController_EmitIntroTrainerBallThrow(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + } + (*state)++; + break; + case 20: // set dex and battle vars + if (!gBattleControllerExecFlags) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + { + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT + && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_LINK + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_TRAINER_HILL))) { HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality); } - BtlController_EmitLoadMonSprite(0); - MarkBattlerForControllerExec(gActiveBattler); - gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL); } + + gBattleStruct->switchInAbilitiesCounter = 0; + gBattleStruct->switchInItemsCounter = 0; + gBattleStruct->overworldWeatherDone = FALSE; + + gBattleMainFunc = TryDoEventsBeforeFirstTurn; } - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT - || GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT) - { - BtlController_EmitDrawTrainerPic(0); - MarkBattlerForControllerExec(gActiveBattler); - } - } - - if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT) - { - BtlController_EmitDrawTrainerPic(0); - MarkBattlerForControllerExec(gActiveBattler); - } - - if (gBattleTypeFlags & BATTLE_TYPE_ARENA) - BattleArena_InitPoints(); - } - gBattleMainFunc = BattleIntroDrawPartySummaryScreens; -} - -static void BattleIntroDrawPartySummaryScreens(void) -{ - s32 i; - struct HpAndStatus hpStatus[PARTY_SIZE]; - - if (gBattleControllerExecFlags) - return; - - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - for (i = 0; i < PARTY_SIZE; i++) - { - if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) - { - hpStatus[i].hp = 0xFFFF; - hpStatus[i].status = 0; - } - else - { - hpStatus[i].hp = GetMonData(&gEnemyParty[i], MON_DATA_HP); - hpStatus[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); - } - } - gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - BtlController_EmitDrawPartyStatusSummary(0, hpStatus, 0x80); - MarkBattlerForControllerExec(gActiveBattler); - - for (i = 0; i < PARTY_SIZE; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) - { - hpStatus[i].hp = 0xFFFF; - hpStatus[i].status = 0; - } - else - { - hpStatus[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); - } - } - gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - BtlController_EmitDrawPartyStatusSummary(0, hpStatus, 0x80); - MarkBattlerForControllerExec(gActiveBattler); - - gBattleMainFunc = BattleIntroPrintTrainerWantsToBattle; - } - else - { - // The struct gets set here, but nothing is ever done with it since - // wild battles don't show the party summary. - // Still, there's no point in having dead code. - - for (i = 0; i < PARTY_SIZE; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) - { - hpStatus[i].hp = 0xFFFF; - hpStatus[i].status = 0; - } - else - { - hpStatus[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); - } - } - - gBattleMainFunc = BattleIntroPrintWildMonAttacked; - } - -} - -static void BattleIntroPrintTrainerWantsToBattle(void) -{ - if (gBattleControllerExecFlags == 0) - { - gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - PrepareStringBattle(STRINGID_INTROMSG, gActiveBattler); - gBattleMainFunc = BattleIntroPrintOpponentSendsOut; - } -} - -static void BattleIntroPrintWildMonAttacked(void) -{ - if (gBattleControllerExecFlags == 0) - { - gBattleMainFunc = BattleIntroPrintPlayerSendsOut; - PrepareStringBattle(STRINGID_INTROMSG, 0); - } -} - -static void BattleIntroPrintOpponentSendsOut(void) -{ - u32 position; - - if (gBattleControllerExecFlags) - return; - - if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) - position = B_POSITION_OPPONENT_LEFT; - else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) - position = B_POSITION_OPPONENT_LEFT; - else - position = B_POSITION_PLAYER_LEFT; - } - else - position = B_POSITION_OPPONENT_LEFT; - - PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(position)); - gBattleMainFunc = BattleIntroOpponent1SendsOutMonAnimation; -} - -static void BattleIntroOpponent2SendsOutMonAnimation(void) -{ - u32 position; - - if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) - position = B_POSITION_OPPONENT_RIGHT; - else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) - position = B_POSITION_OPPONENT_RIGHT; - else - position = B_POSITION_PLAYER_RIGHT; - } - else - position = B_POSITION_OPPONENT_RIGHT; - - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (GetBattlerPosition(gActiveBattler) == position) - { - BtlController_EmitIntroTrainerBallThrow(0); - MarkBattlerForControllerExec(gActiveBattler); - } - } - - gBattleMainFunc = BattleIntroRecordMonsToDex; -} - -static void BattleIntroOpponent1SendsOutMonAnimation(void) -{ - u32 position; - - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) - position = B_POSITION_OPPONENT_LEFT; - else - position = B_POSITION_PLAYER_LEFT; - } - else - position = B_POSITION_OPPONENT_LEFT; - } - else - position = B_POSITION_OPPONENT_LEFT; - - if (gBattleControllerExecFlags) - return; - - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (GetBattlerPosition(gActiveBattler) == position) - { - BtlController_EmitIntroTrainerBallThrow(0); - MarkBattlerForControllerExec(gActiveBattler); - if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS)) - { - gBattleMainFunc = BattleIntroOpponent2SendsOutMonAnimation; - return; - } - } - } - - gBattleMainFunc = BattleIntroRecordMonsToDex; -} - -static void BattleIntroRecordMonsToDex(void) -{ - if (gBattleControllerExecFlags == 0) - { - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT - && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_LINK - | BATTLE_TYPE_RECORDED_LINK - | BATTLE_TYPE_TRAINER_HILL))) - { - HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality); - } - } - gBattleMainFunc = BattleIntroPrintPlayerSendsOut; - } -} - -void sub_803B3AC(void) // unused -{ - if (gBattleControllerExecFlags == 0) - gBattleMainFunc = BattleIntroPrintPlayerSendsOut; -} - -static void BattleIntroPrintPlayerSendsOut(void) -{ - if (gBattleControllerExecFlags == 0) - { - u8 position; - - if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) - position = B_POSITION_PLAYER_LEFT; - else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) - position = B_POSITION_PLAYER_LEFT; - else - position = B_POSITION_OPPONENT_LEFT; - } - else - position = B_POSITION_PLAYER_LEFT; - - if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) - PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(position)); - - gBattleMainFunc = BattleIntroPlayer1SendsOutMonAnimation; - } -} - -static void BattleIntroPlayer2SendsOutMonAnimation(void) -{ - u32 position; - - if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) - position = B_POSITION_PLAYER_RIGHT; - else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) - position = B_POSITION_PLAYER_RIGHT; - else - position = B_POSITION_OPPONENT_RIGHT; - } - else - position = B_POSITION_PLAYER_RIGHT; - - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (GetBattlerPosition(gActiveBattler) == position) - { - BtlController_EmitIntroTrainerBallThrow(0); - MarkBattlerForControllerExec(gActiveBattler); - } - } - - gBattleStruct->switchInAbilitiesCounter = 0; - gBattleStruct->switchInItemsCounter = 0; - gBattleStruct->overworldWeatherDone = FALSE; - - gBattleMainFunc = TryDoEventsBeforeFirstTurn; -} - -static void BattleIntroPlayer1SendsOutMonAnimation(void) -{ - u32 position; - - if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) - position = B_POSITION_PLAYER_LEFT; - else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) - position = B_POSITION_PLAYER_LEFT; - else - position = B_POSITION_OPPONENT_LEFT; - } - else - position = B_POSITION_PLAYER_LEFT; - - if (gBattleControllerExecFlags) - return; - - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (GetBattlerPosition(gActiveBattler) == position) - { - BtlController_EmitIntroTrainerBallThrow(0); - MarkBattlerForControllerExec(gActiveBattler); - if (gBattleTypeFlags & (BATTLE_TYPE_MULTI)) - { - gBattleMainFunc = BattleIntroPlayer2SendsOutMonAnimation; - return; - } - } - } - - gBattleStruct->switchInAbilitiesCounter = 0; - gBattleStruct->switchInItemsCounter = 0; - gBattleStruct->overworldWeatherDone = FALSE; - - gBattleMainFunc = TryDoEventsBeforeFirstTurn; -} - -void sub_803B598(void) // unused -{ - if (gBattleControllerExecFlags == 0) - { - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - BtlController_EmitSwitchInAnim(0, gBattlerPartyIndexes[gActiveBattler], FALSE); - MarkBattlerForControllerExec(gActiveBattler); - } - } - - gBattleStruct->switchInAbilitiesCounter = 0; - gBattleStruct->switchInItemsCounter = 0; - gBattleStruct->overworldWeatherDone = FALSE; - - gBattleMainFunc = TryDoEventsBeforeFirstTurn; + break; } } static void TryDoEventsBeforeFirstTurn(void) { - s32 i; - s32 j; - u8 effect = 0; + s32 i, j; if (gBattleControllerExecFlags) return; + // Set invalid mons as absent(for example when starting a double battle with only one pokemon). + if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) + { + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE) + gAbsentBattlerFlags |= gBitTable[i]; + } + } + if (gBattleStruct->switchInAbilitiesCounter == 0) { for (i = 0; i < gBattlersCount; i++) @@ -3769,42 +3606,78 @@ static void TryDoEventsBeforeFirstTurn(void) gBattleStruct->overworldWeatherDone = TRUE; return; } + + if (!gBattleStruct->terrainDone && AbilityBattleEffects(0, 0, 0, ABILITYEFFECT_SWITCH_IN_TERRAIN, 0) != 0) + { + gBattleStruct->terrainDone = TRUE; + return; + } + + // Totem boosts + for (i = 0; i < gBattlersCount; i++) + { + if (gTotemBoosts[i].stats != 0) + { + gBattlerAttacker = i; + BattleScriptExecute(BattleScript_TotemVar); + return; + } + } + memset(gTotemBoosts, 0, sizeof(gTotemBoosts)); // erase all totem boosts just to be safe + + // Primal Reversion + for (i = 0; i < gBattlersCount; i++) + { + if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_PRIMAL_ORB) + { + for (j = 0; j < EVOS_PER_MON; j++) + { + if (gEvolutionTable[gBattleMons[i].species][j].targetSpecies != SPECIES_NONE + && gEvolutionTable[gBattleMons[i].species][j].method == EVO_PRIMAL_REVERSION) + { + gBattlerAttacker = i; + BattleScriptExecute(BattleScript_PrimalReversion); + 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) { - if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter], 0, 0, 0) != 0) - effect++; - - gBattleStruct->switchInAbilitiesCounter++; - - if (effect) + gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter++]; + if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0) return; } if (AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE1, 0, 0, 0, 0) != 0) return; - if (AbilityBattleEffects(ABILITYEFFECT_TRACE, 0, 0, 0, 0) != 0) + if (AbilityBattleEffects(ABILITYEFFECT_TRACE1, 0, 0, 0, 0) != 0) return; // Check all switch in items having effect from the fastest mon to slowest. while (gBattleStruct->switchInItemsCounter < gBattlersCount) { - if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInItemsCounter], FALSE)) - effect++; - - gBattleStruct->switchInItemsCounter++; - - if (effect) + if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInItemsCounter++], FALSE)) return; } + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE; gChosenActionByBattler[i] = B_ACTION_NONE; gChosenMoveByBattler[i] = MOVE_NONE; + // Record party slots of player's mons that appeared in battle + if (!IsBattlerAIControlled(i)) + gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]]; } TurnValuesCleanUp(FALSE); SpecialStatusesClear(); - *(&gBattleStruct->field_91) = gAbsentBattlerFlags; - BattlePutTextOnWindow(gText_EmptyString3, 0); + *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags; + BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG); gBattleMainFunc = HandleTurnActionSelectionState; ResetSentPokesToOpponentValue(); @@ -3812,7 +3685,7 @@ static void TryDoEventsBeforeFirstTurn(void) gBattleCommunication[i] = 0; for (i = 0; i < gBattlersCount; i++) - gBattleMons[i].status2 &= ~(STATUS2_FLINCHED); + gBattleMons[i].status2 &= ~STATUS2_FLINCHED; *(&gBattleStruct->turnEffectsTracker) = 0; *(&gBattleStruct->turnEffectsBattlerId) = 0; @@ -3825,6 +3698,8 @@ static void TryDoEventsBeforeFirstTurn(void) gRandomTurnNumber = Random(); + GetAiLogicData(); // get assumed abilities, hold effects, etc of all battlers + if (gBattleTypeFlags & BATTLE_TYPE_ARENA) { StopCryAndClearCrySongs(); @@ -3843,7 +3718,7 @@ static void HandleEndTurn_ContinueBattle(void) gBattleCommunication[i] = 0; for (i = 0; i < gBattlersCount; i++) { - gBattleMons[i].status2 &= ~(STATUS2_FLINCHED); + gBattleMons[i].status2 &= ~STATUS2_FLINCHED; if ((gBattleMons[i].status1 & STATUS1_SLEEP) && (gBattleMons[i].status2 & STATUS2_MULTIPLETURNS)) CancelMultiTurnMoves(i); } @@ -3875,10 +3750,10 @@ void BattleTurnPassed(void) return; TurnValuesCleanUp(FALSE); - gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); - gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); - gHitMarker &= ~(HITMARKER_x400000); - gHitMarker &= ~(HITMARKER_x100000); + gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; + gHitMarker &= ~HITMARKER_UNABLE_TO_USE_MOVE; + gHitMarker &= ~HITMARKER_PLAYER_FAINTED; + gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; gBattleScripting.animTurn = 0; gBattleScripting.animTargetsHit = 0; gBattleScripting.moveendState = 0; @@ -3910,8 +3785,9 @@ void BattleTurnPassed(void) for (i = 0; i < MAX_BATTLERS_COUNT; i++) *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE; - *(&gBattleStruct->field_91) = gAbsentBattlerFlags; - BattlePutTextOnWindow(gText_EmptyString3, 0); + *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags; + BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG); + GetAiLogicData(); // get assumed abilities, hold effects, etc of all battlers gBattleMainFunc = HandleTurnActionSelectionState; gRandomTurnNumber = Random(); @@ -3919,71 +3795,58 @@ void BattleTurnPassed(void) BattleScriptExecute(BattleScript_PalacePrintFlavorText); else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaTurnCounter == 0) BattleScriptExecute(BattleScript_ArenaTurnBeginning); + else if (ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_LOW_HP)) + BattleScriptExecute(BattleScript_TrainerSlideMsgEnd2); } u8 IsRunningFromBattleImpossible(void) { - u8 holdEffect; - u8 side; - s32 i; + u32 holdEffect, i; - if (gBattleMons[gActiveBattler].item == ITEM_ENIGMA_BERRY) + if (gBattleMons[gActiveBattler].item == ITEM_ENIGMA_BERRY_E_READER) holdEffect = gEnigmaBerries[gActiveBattler].holdEffect; else holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item); gPotentialItemEffectBattler = gActiveBattler; - if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) - return 0; - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - return 0; - if (gBattleMons[gActiveBattler].ability == ABILITY_RUN_AWAY) - return 0; - - side = GetBattlerSide(gActiveBattler); - - for (i = 0; i < gBattlersCount; i++) + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) // Cannot ever run from saving Birch's battle. { - if (side != GetBattlerSide(i) - && gBattleMons[i].ability == ABILITY_SHADOW_TAG) - { - gBattleScripting.battler = i; - gLastUsedAbility = gBattleMons[i].ability; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PREVENTS_ESCAPE; - return 2; - } - if (side != GetBattlerSide(i) - && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE - && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING) - && gBattleMons[i].ability == ABILITY_ARENA_TRAP) - { - gBattleScripting.battler = i; - gLastUsedAbility = gBattleMons[i].ability; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PREVENTS_ESCAPE; - return 2; - } + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DONT_LEAVE_BIRCH; + return BATTLE_RUN_FORBIDDEN; } - i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0); - if (i != 0 && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)) + if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && WILD_DOUBLE_BATTLE + && IsBattlerAlive(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) // The second pokemon cannot run from a double wild battle, unless it's the only alive mon. + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_ESCAPE; + return BATTLE_RUN_FORBIDDEN; + } + + if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) + return BATTLE_RUN_SUCCESS; + #if B_GHOSTS_ESCAPE >= GEN_6 + if (IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_GHOST)) + return BATTLE_RUN_SUCCESS; + #endif + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + return BATTLE_RUN_SUCCESS; + if (GetBattlerAbility(gActiveBattler) == ABILITY_RUN_AWAY) + return BATTLE_RUN_SUCCESS; + + if ((i = IsAbilityPreventingEscape(gActiveBattler))) { gBattleScripting.battler = i - 1; gLastUsedAbility = gBattleMons[i - 1].ability; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PREVENTS_ESCAPE; - return 2; + return BATTLE_RUN_FAILURE; } - if ((gBattleMons[gActiveBattler].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)) - || (gStatuses3[gActiveBattler] & STATUS3_ROOTED)) + + if (!CanBattlerEscape(gActiveBattler)) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_ESCAPE; - return 1; + return BATTLE_RUN_FORBIDDEN; } - if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DONT_LEAVE_BIRCH; - return 1; - } - return 0; + return BATTLE_RUN_SUCCESS; } void SwitchPartyOrder(u8 battler) @@ -3992,10 +3855,8 @@ void SwitchPartyOrder(u8 battler) u8 partyId1; u8 partyId2; - // gBattleStruct->field_60[battler][i] - for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) - gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8*)(gBattleStruct->field_60)); + gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)); partyId1 = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battler]); partyId2 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler)); @@ -4005,15 +3866,15 @@ void SwitchPartyOrder(u8 battler) { for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) { - *(battler * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; - *(BATTLE_PARTNER(battler) * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; + *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i]; + *(BATTLE_PARTNER(battler) * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i]; } } else { for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) { - *(battler * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; + *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i]; } } } @@ -4044,15 +3905,20 @@ static void HandleTurnActionSelectionState(void) case STATE_TURN_START_RECORD: // Recorded battle related action on start of every turn. RecordedBattle_CopyBattlerMoves(); gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + + // Do AI score computations here so we can use them in AI_TrySwitchOrUseItem + if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) && IsBattlerAIControlled(gActiveBattler)) { + gBattleStruct->aiMoveOrAction[gActiveBattler] = ComputeBattleAiScores(gActiveBattler); + } break; case STATE_BEFORE_ACTION_CHOSEN: // Choose an action. *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; if (gBattleTypeFlags & BATTLE_TYPE_MULTI || (position & BIT_FLANK) == B_FLANK_LEFT - || gBattleStruct->field_91 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))] + || gBattleStruct->absentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))] || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED) { - if (gBattleStruct->field_91 & gBitTable[gActiveBattler]) + if (gBattleStruct->absentBattlerFlags & gBitTable[gActiveBattler]) { gChosenActionByBattler[gActiveBattler] = B_ACTION_NOTHING_FAINTED; if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) @@ -4068,9 +3934,17 @@ static void HandleTurnActionSelectionState(void) gChosenActionByBattler[gActiveBattler] = B_ACTION_USE_MOVE; gBattleCommunication[gActiveBattler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY; } + else if (WILD_DOUBLE_BATTLE + && position == B_POSITION_PLAYER_RIGHT + && (gBattleStruct->throwingPokeBall || gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)] == B_ACTION_RUN)) + { + gBattleStruct->throwingPokeBall = FALSE; + gChosenActionByBattler[gActiveBattler] = B_ACTION_NOTHING_FAINTED; // Not fainted, but it cannot move, because of the throwing ball. + gBattleCommunication[gActiveBattler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY; + } else { - BtlController_EmitChooseAction(0, gChosenActionByBattler[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8)); + BtlController_EmitChooseAction(BUFFER_A, gChosenActionByBattler[0], gBattleResources->bufferB[0][1] | (gBattleResources->bufferB[0][2] << 8)); MarkBattlerForControllerExec(gActiveBattler); gBattleCommunication[gActiveBattler]++; } @@ -4080,10 +3954,10 @@ static void HandleTurnActionSelectionState(void) case STATE_WAIT_ACTION_CHOSEN: // Try to perform an action. if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF << 28) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 12)))) { - RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][1]); - gChosenActionByBattler[gActiveBattler] = gBattleBufferB[gActiveBattler][1]; + RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][1]); + gChosenActionByBattler[gActiveBattler] = gBattleResources->bufferB[gActiveBattler][1]; - switch (gBattleBufferB[gActiveBattler][1]) + switch (gBattleResources->bufferB[gActiveBattler][1]) { case B_ACTION_USE_MOVE: if (AreAllMovesUnusable()) @@ -4091,7 +3965,7 @@ static void HandleTurnActionSelectionState(void) gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; *(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE; *(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_WAIT_ACTION_CONFIRMED_STANDBY; - *(gBattleStruct->moveTarget + gActiveBattler) = gBattleBufferB[gActiveBattler][3]; + *(gBattleStruct->moveTarget + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][3]; return; } else if (gDisableStructs[gActiveBattler].encoredMove != 0) @@ -4105,9 +3979,12 @@ static void HandleTurnActionSelectionState(void) { struct ChooseMoveStruct moveInfo; + moveInfo.zmove = gBattleStruct->zmove; + moveInfo.mega = gBattleStruct->mega; moveInfo.species = gBattleMons[gActiveBattler].species; moveInfo.monType1 = gBattleMons[gActiveBattler].type1; moveInfo.monType2 = gBattleMons[gActiveBattler].type2; + moveInfo.monType3 = gBattleMons[gActiveBattler].type3; for (i = 0; i < MAX_MON_MOVES; i++) { @@ -4119,15 +3996,17 @@ static void HandleTurnActionSelectionState(void) i); } - BtlController_EmitChooseMove(0, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0, FALSE, &moveInfo); + BtlController_EmitChooseMove(BUFFER_A, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0, FALSE, &moveInfo); MarkBattlerForControllerExec(gActiveBattler); } break; case B_ACTION_USE_ITEM: - if (gBattleTypeFlags & (BATTLE_TYPE_LINK + if ((gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER_NO_PYRAMID | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK)) + // Or if currently held by Sky Drop + || gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED) { RecordedBattle_ClearBattlerAction(gActiveBattler, 1); gSelectionBattleScripts[gActiveBattler] = BattleScript_ActionSelectionItemsCantBeUsed; @@ -4138,35 +4017,30 @@ static void HandleTurnActionSelectionState(void) } else { - BtlController_EmitChooseItem(0, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChooseItem(BUFFER_A, gBattleStruct->battlerPartyOrders[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); } break; case B_ACTION_SWITCH: - *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; - if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION) - || gBattleTypeFlags & BATTLE_TYPE_ARENA - || gStatuses3[gActiveBattler] & STATUS3_ROOTED) + *(gBattleStruct->battlerPartyIndexes + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; + if (gBattleTypeFlags & BATTLE_TYPE_ARENA + || !CanBattlerEscape(gActiveBattler)) { - BtlController_EmitChoosePokemon(0, PARTY_ACTION_CANT_SWITCH, PARTY_SIZE, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CANT_SWITCH, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); } - else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG)) - || ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP)) - && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING) - && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE) - || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0)) - && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))) + else if (ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item) != HOLD_EFFECT_SHED_SHELL + && (i = IsAbilityPreventingEscape(gActiveBattler))) // must be last to keep i value integrity { - BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, PARTY_SIZE, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(BUFFER_A, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, PARTY_SIZE, gBattleMons[i - 1].ability, gBattleStruct->battlerPartyOrders[gActiveBattler]); } else { if (gActiveBattler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH) - BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); else if (gActiveBattler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH) - BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); else - BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); } MarkBattlerForControllerExec(gActiveBattler); break; @@ -4181,7 +4055,7 @@ static void HandleTurnActionSelectionState(void) } break; case B_ACTION_SAFARI_POKEBLOCK: - BtlController_EmitChooseItem(0, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChooseItem(BUFFER_A, gBattleStruct->battlerPartyOrders[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); break; case B_ACTION_CANCEL_PARTNER: @@ -4191,7 +4065,7 @@ static void HandleTurnActionSelectionState(void) if (gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))].status2 & STATUS2_MULTIPLETURNS || gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))].status2 & STATUS2_RECHARGE) { - BtlController_EmitEndBounceEffect(0); + BtlController_EmitEndBounceEffect(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); return; } @@ -4219,14 +4093,21 @@ static void HandleTurnActionSelectionState(void) { RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))), 3); } - BtlController_EmitEndBounceEffect(0); + + gBattleStruct->mega.toEvolve &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))]); + gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))] = MOVE_NONE; + BtlController_EmitEndBounceEffect(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); return; + case B_ACTION_DEBUG: + BtlController_EmitDebugMenu(BUFFER_A); + MarkBattlerForControllerExec(gActiveBattler); + break; } if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_TRAINER_HILL) - && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN) + && gBattleResources->bufferB[gActiveBattler][1] == B_ACTION_RUN) { gSelectionBattleScripts[gActiveBattler] = BattleScript_AskIfWantsToForfeitMatch; gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT_MAY_RUN; @@ -4236,13 +4117,13 @@ static void HandleTurnActionSelectionState(void) } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) - && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN) + && gBattleResources->bufferB[gActiveBattler][1] == B_ACTION_RUN) { BattleScriptExecute(BattleScript_PrintCantRunFromTrainer); gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; } - else if (IsRunningFromBattleImpossible() - && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN) + else if (IsRunningFromBattleImpossible() != BATTLE_RUN_SUCCESS + && gBattleResources->bufferB[gActiveBattler][1] == B_ACTION_RUN) { gSelectionBattleScripts[gActiveBattler] = BattleScript_PrintCantEscapeFromBattle; gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; @@ -4262,7 +4143,7 @@ static void HandleTurnActionSelectionState(void) switch (gChosenActionByBattler[gActiveBattler]) { case B_ACTION_USE_MOVE: - switch (gBattleBufferB[gActiveBattler][1]) + switch (gBattleResources->bufferB[gActiveBattler][1]) { case 3: case 4: @@ -4271,15 +4152,15 @@ static void HandleTurnActionSelectionState(void) case 7: case 8: case 9: - gChosenActionByBattler[gActiveBattler] = gBattleBufferB[gActiveBattler][1]; + gChosenActionByBattler[gActiveBattler] = gBattleResources->bufferB[gActiveBattler][1]; return; case 15: gChosenActionByBattler[gActiveBattler] = B_ACTION_SWITCH; - sub_803CDF8(); + UpdateBattlerPartyOrdersOnSwitch(); return; default: - sub_818603C(2); - if ((gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8)) == 0xFFFF) + RecordedBattle_CheckMovesetChanges(B_RECORD_MODE_PLAYBACK); + if ((gBattleResources->bufferB[gActiveBattler][2] | (gBattleResources->bufferB[gActiveBattler][3] << 8)) == 0xFFFF) { gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; RecordedBattle_ClearBattlerAction(gActiveBattler, 1); @@ -4289,7 +4170,7 @@ static void HandleTurnActionSelectionState(void) RecordedBattle_ClearBattlerAction(gActiveBattler, 1); gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; *(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE; - gBattleBufferB[gActiveBattler][1] = B_ACTION_USE_MOVE; + gBattleResources->bufferB[gActiveBattler][1] = B_ACTION_USE_MOVE; *(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_WAIT_ACTION_CHOSEN; return; } @@ -4297,37 +4178,41 @@ static void HandleTurnActionSelectionState(void) { if (!(gBattleTypeFlags & BATTLE_TYPE_PALACE)) { - RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][2]); - RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][3]); + RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][2]); + RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][3]); } - *(gBattleStruct->chosenMovePositions + gActiveBattler) = gBattleBufferB[gActiveBattler][2]; + *(gBattleStruct->chosenMovePositions + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][2] & ~RET_MEGA_EVOLUTION; gChosenMoveByBattler[gActiveBattler] = gBattleMons[gActiveBattler].moves[*(gBattleStruct->chosenMovePositions + gActiveBattler)]; - *(gBattleStruct->moveTarget + gActiveBattler) = gBattleBufferB[gActiveBattler][3]; + *(gBattleStruct->moveTarget + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][3]; + if (gBattleResources->bufferB[gActiveBattler][2] & RET_MEGA_EVOLUTION) + gBattleStruct->mega.toEvolve |= gBitTable[gActiveBattler]; gBattleCommunication[gActiveBattler]++; } break; } break; case B_ACTION_USE_ITEM: - if ((gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)) == 0) + if ((gBattleResources->bufferB[gActiveBattler][1] | (gBattleResources->bufferB[gActiveBattler][2] << 8)) == 0) { gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; } else { - gLastUsedItem = (gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)); + gLastUsedItem = (gBattleResources->bufferB[gActiveBattler][1] | (gBattleResources->bufferB[gActiveBattler][2] << 8)); + if (ItemId_GetPocket(gLastUsedItem) == POCKET_POKE_BALLS) + gBattleStruct->throwingPokeBall = TRUE; gBattleCommunication[gActiveBattler]++; } break; case B_ACTION_SWITCH: - if (gBattleBufferB[gActiveBattler][1] == PARTY_SIZE) + if (gBattleResources->bufferB[gActiveBattler][1] == PARTY_SIZE) { gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; RecordedBattle_ClearBattlerAction(gActiveBattler, 1); } else { - sub_803CDF8(); + UpdateBattlerPartyOrdersOnSwitch(); gBattleCommunication[gActiveBattler]++; } break; @@ -4341,15 +4226,15 @@ static void HandleTurnActionSelectionState(void) case B_ACTION_SAFARI_BALL: gBattleCommunication[gActiveBattler]++; break; + case B_ACTION_THROW_BALL: + gBattleStruct->throwingPokeBall = TRUE; + gBattleCommunication[gActiveBattler]++; + break; case B_ACTION_SAFARI_POKEBLOCK: - if ((gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)) != 0) - { + if ((gBattleResources->bufferB[gActiveBattler][1] | (gBattleResources->bufferB[gActiveBattler][2] << 8)) != 0) gBattleCommunication[gActiveBattler]++; - } else - { gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; - } break; case B_ACTION_SAFARI_GO_NEAR: gBattleCommunication[gActiveBattler]++; @@ -4361,14 +4246,17 @@ static void HandleTurnActionSelectionState(void) case B_ACTION_WALLY_THROW: gBattleCommunication[gActiveBattler]++; break; + case B_ACTION_DEBUG: + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + break; } } break; case STATE_WAIT_ACTION_CONFIRMED_STANDBY: - if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) + if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF << 28) - | (gBitTable[gActiveBattler] << 4) - | (gBitTable[gActiveBattler] << 8) + | (gBitTable[gActiveBattler] << 4) + | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 12)))) { if (AllAtActionConfirmed()) @@ -4376,15 +4264,15 @@ static void HandleTurnActionSelectionState(void) else i = FALSE; - if (((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) != BATTLE_TYPE_DOUBLE) + if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) || (position & BIT_FLANK) != B_FLANK_LEFT - || (*(&gBattleStruct->field_91) & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) + || (*(&gBattleStruct->absentBattlerFlags) & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) { - BtlController_EmitLinkStandbyMsg(0, 0, i); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_STOP_BOUNCE, i); } else { - BtlController_EmitLinkStandbyMsg(0, 1, i); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_STOP_BOUNCE_ONLY, i); } MarkBattlerForControllerExec(gActiveBattler); gBattleCommunication[gActiveBattler]++; @@ -4421,7 +4309,7 @@ static void HandleTurnActionSelectionState(void) case STATE_SELECTION_SCRIPT_MAY_RUN: if (*(gBattleStruct->selectionScriptFinished + gActiveBattler)) { - if (gBattleBufferB[gActiveBattler][1] == B_ACTION_NOTHING_FAINTED) + if (gBattleResources->bufferB[gActiveBattler][1] == B_ACTION_NOTHING_FAINTED) { gHitMarker |= HITMARKER_RUN; gChosenActionByBattler[gActiveBattler] = B_ACTION_RUN; @@ -4450,7 +4338,14 @@ static void HandleTurnActionSelectionState(void) // Check if everyone chose actions. if (gBattleCommunication[ACTIONS_CONFIRMED_COUNT] == gBattlersCount) { - sub_818603C(1); + RecordedBattle_CheckMovesetChanges(B_RECORD_MODE_RECORDING); + + if (WILD_DOUBLE_BATTLE && gBattleStruct->throwingPokeBall) { + // if we choose to throw a ball with our second mon, skip the action of the first + // (if we have chosen throw ball with first, second's is already skipped) + gChosenActionByBattler[B_POSITION_PLAYER_LEFT] = B_ACTION_NOTHING_FAINTED; + } + gBattleMainFunc = SetActionsAndBattlersTurnOrder; if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) @@ -4480,20 +4375,20 @@ static bool8 AllAtActionConfirmed(void) return FALSE; } -static void sub_803CDF8(void) +static void UpdateBattlerPartyOrdersOnSwitch(void) { - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleBufferB[gActiveBattler][1]; - RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][1]); + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][1]; + RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][1]); if (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI) { - *(gActiveBattler * 3 + (u8*)(gBattleStruct->field_60) + 0) &= 0xF; - *(gActiveBattler * 3 + (u8*)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); - *(gActiveBattler * 3 + (u8*)(gBattleStruct->field_60) + 1) = gBattleBufferB[gActiveBattler][3]; + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= 0xF; + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleResources->bufferB[gActiveBattler][2] & 0xF0); + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 1) = gBattleResources->bufferB[gActiveBattler][3]; - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->field_60) + 0) &= (0xF0); - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->field_60) + 2) = gBattleBufferB[gActiveBattler][3]; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= (0xF0); + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleResources->bufferB[gActiveBattler][2] & 0xF0) >> 4; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 2) = gBattleResources->bufferB[gActiveBattler][3]; } } @@ -4505,156 +4400,222 @@ void SwapTurnOrder(u8 id1, u8 id2) SWAP(gBattlerByTurnOrder[id1], gBattlerByTurnOrder[id2], temp); } +u32 GetBattlerTotalSpeedStat(u8 battlerId) +{ + u32 speed = gBattleMons[battlerId].speed; + u32 ability = GetBattlerAbility(battlerId); + u32 holdEffect = GetBattlerHoldEffect(battlerId, TRUE); + + // weather abilities + if (WEATHER_HAS_EFFECT) + { + if (ability == ABILITY_SWIFT_SWIM && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && gBattleWeather & B_WEATHER_RAIN) + speed *= 2; + else if (ability == ABILITY_CHLOROPHYLL && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && gBattleWeather & B_WEATHER_SUN) + speed *= 2; + else if (ability == ABILITY_SAND_RUSH && gBattleWeather & B_WEATHER_SANDSTORM) + speed *= 2; + else if (ability == ABILITY_SLUSH_RUSH && gBattleWeather & B_WEATHER_HAIL) + speed *= 2; + } + + // other abilities + if (ability == ABILITY_QUICK_FEET && gBattleMons[battlerId].status1 & STATUS1_ANY) + speed = (speed * 150) / 100; + else if (ability == ABILITY_SURGE_SURFER && gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + speed *= 2; + else if (ability == ABILITY_SLOW_START && gDisableStructs[battlerId].slowStartTimer != 0) + speed /= 2; + + // stat stages + speed *= gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPEED]][0]; + speed /= gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPEED]][1]; + + // player's badge boost + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) + && ShouldGetStatBadgeBoost(FLAG_BADGE03_GET, battlerId) + && GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + speed = (speed * 110) / 100; + } + + // item effects + if (holdEffect == HOLD_EFFECT_MACHO_BRACE || holdEffect == HOLD_EFFECT_POWER_ITEM) + speed /= 2; + else if (holdEffect == HOLD_EFFECT_IRON_BALL) + speed /= 2; + else if (holdEffect == HOLD_EFFECT_CHOICE_SCARF) + speed = (speed * 150) / 100; + else if (holdEffect == HOLD_EFFECT_QUICK_POWDER && gBattleMons[battlerId].species == SPECIES_DITTO && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)) + speed *= 2; + + // various effects + if (gSideStatuses[GET_BATTLER_SIDE(battlerId)] & SIDE_STATUS_TAILWIND) + speed *= 2; + if (gBattleResources->flags->flags[battlerId] & RESOURCE_FLAG_UNBURDEN) + speed *= 2; + + // paralysis drop + if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS && ability != ABILITY_QUICK_FEET) + speed /= (B_PARALYSIS_SPEED >= GEN_7 ? 2 : 4); + + return speed; +} + +s8 GetChosenMovePriority(u32 battlerId) +{ + u16 move; + + gProtectStructs[battlerId].pranksterElevated = 0; + if (gProtectStructs[battlerId].noValidMoves) + move = MOVE_STRUGGLE; + else + move = gBattleMons[battlerId].moves[*(gBattleStruct->chosenMovePositions + battlerId)]; + + return GetMovePriority(battlerId, move); +} + +s8 GetMovePriority(u32 battlerId, u16 move) +{ + s8 priority; + u16 ability = GetBattlerAbility(battlerId); + + priority = gBattleMoves[move].priority; + if (ability == ABILITY_GALE_WINGS + && gBattleMoves[move].type == TYPE_FLYING + && (B_GALE_WINGS <= GEN_6 || BATTLER_MAX_HP(battlerId))) + { + priority++; + } + else if (ability == ABILITY_PRANKSTER && IS_MOVE_STATUS(move)) + { + gProtectStructs[battlerId].pranksterElevated = 1; + priority++; + } + else if (gBattleMoves[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battlerId)) + { + priority++; + } + else if (ability == ABILITY_TRIAGE) + { + switch (gBattleMoves[move].effect) + { + case EFFECT_RESTORE_HP: + case EFFECT_REST: + case EFFECT_MORNING_SUN: + case EFFECT_MOONLIGHT: + case EFFECT_SYNTHESIS: + case EFFECT_HEAL_PULSE: + case EFFECT_HEALING_WISH: + case EFFECT_SWALLOW: + case EFFECT_WISH: + case EFFECT_SOFTBOILED: + case EFFECT_ABSORB: + case EFFECT_ROOST: + priority += 3; + break; + } + } + + if (gProtectStructs[battlerId].quash) + priority = -8; + + return priority; +} + u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) { u8 strikesFirst = 0; - u8 speedMultiplierBattler1 = 0, speedMultiplierBattler2 = 0; u32 speedBattler1 = 0, speedBattler2 = 0; - u8 holdEffect = 0; - u8 holdEffectParam = 0; - u16 moveBattler1 = 0, moveBattler2 = 0; + u32 holdEffectBattler1 = 0, holdEffectBattler2 = 0; + s8 priority1 = 0, priority2 = 0; + u16 ability1 = GetBattlerAbility(battler1), ability2 = GetBattlerAbility(battler2); - if (WEATHER_HAS_EFFECT) - { - if ((gBattleMons[battler1].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY) - || (gBattleMons[battler1].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY)) - speedMultiplierBattler1 = 2; - else - speedMultiplierBattler1 = 1; + // Battler 1 + speedBattler1 = GetBattlerTotalSpeedStat(battler1); + holdEffectBattler1 = GetBattlerHoldEffect(battler1, TRUE); + // Quick Draw + if (!ignoreChosenMoves && ability1 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler1]) && Random() % 100 < 30) + gProtectStructs[battler1].quickDraw = TRUE; + // Quick Claw and Custap Berry + if (!gProtectStructs[battler1].quickDraw + && ((holdEffectBattler1 == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * GetBattlerHoldEffectParam(battler1)) / 100) + || (holdEffectBattler1 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler1, 4, gBattleMons[battler1].item)))) + gProtectStructs[battler1].usedCustapBerry = TRUE; - if ((gBattleMons[battler2].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY) - || (gBattleMons[battler2].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY)) - speedMultiplierBattler2 = 2; - else - speedMultiplierBattler2 = 1; - } - else - { - speedMultiplierBattler1 = 1; - speedMultiplierBattler2 = 1; - } + // Battler 2 + speedBattler2 = GetBattlerTotalSpeedStat(battler2); + holdEffectBattler2 = GetBattlerHoldEffect(battler2, TRUE); + // Quick Draw + if (!ignoreChosenMoves && ability2 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler2]) && Random() % 100 < 30) + gProtectStructs[battler2].quickDraw = TRUE; + // Quick Claw and Custap Berry + if (!gProtectStructs[battler2].quickDraw + && ((holdEffectBattler2 == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * GetBattlerHoldEffectParam(battler2)) / 100) + || (holdEffectBattler2 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler2, 4, gBattleMons[battler2].item)))) + gProtectStructs[battler2].usedCustapBerry = TRUE; - speedBattler1 = (gBattleMons[battler1].speed * speedMultiplierBattler1) - * (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][0]) - / (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][1]); - - if (gBattleMons[battler1].item == ITEM_ENIGMA_BERRY) - { - holdEffect = gEnigmaBerries[battler1].holdEffect; - holdEffectParam = gEnigmaBerries[battler1].holdEffectParam; - } - else - { - holdEffect = ItemId_GetHoldEffect(gBattleMons[battler1].item); - holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler1].item); - } - - // badge boost - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) - && FlagGet(FLAG_BADGE03_GET) - && GetBattlerSide(battler1) == B_SIDE_PLAYER) - { - speedBattler1 = (speedBattler1 * 110) / 100; - } - - if (holdEffect == HOLD_EFFECT_MACHO_BRACE) - speedBattler1 /= 2; - - if (gBattleMons[battler1].status1 & STATUS1_PARALYSIS) - speedBattler1 /= 4; - - if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100) - speedBattler1 = UINT_MAX; - - // check second battlerId's speed - - speedBattler2 = (gBattleMons[battler2].speed * speedMultiplierBattler2) - * (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][0]) - / (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][1]); - - if (gBattleMons[battler2].item == ITEM_ENIGMA_BERRY) - { - holdEffect = gEnigmaBerries[battler2].holdEffect; - holdEffectParam = gEnigmaBerries[battler2].holdEffectParam; - } - else - { - holdEffect = ItemId_GetHoldEffect(gBattleMons[battler2].item); - holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler2].item); - } - - // badge boost - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) - && FlagGet(FLAG_BADGE03_GET) - && GetBattlerSide(battler2) == B_SIDE_PLAYER) - { - speedBattler2 = (speedBattler2 * 110) / 100; - } - - if (holdEffect == HOLD_EFFECT_MACHO_BRACE) - speedBattler2 /= 2; - - if (gBattleMons[battler2].status1 & STATUS1_PARALYSIS) - speedBattler2 /= 4; - - if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100) - speedBattler2 = UINT_MAX; - - if (ignoreChosenMoves) - { - moveBattler1 = MOVE_NONE; - moveBattler2 = MOVE_NONE; - } - else + if (!ignoreChosenMoves) { if (gChosenActionByBattler[battler1] == B_ACTION_USE_MOVE) - { - if (gProtectStructs[battler1].noValidMoves) - moveBattler1 = MOVE_STRUGGLE; - else - moveBattler1 = gBattleMons[battler1].moves[*(gBattleStruct->chosenMovePositions + battler1)]; - } - else - moveBattler1 = MOVE_NONE; - + priority1 = GetChosenMovePriority(battler1); if (gChosenActionByBattler[battler2] == B_ACTION_USE_MOVE) - { - if (gProtectStructs[battler2].noValidMoves) - moveBattler2 = MOVE_STRUGGLE; - else - moveBattler2 = gBattleMons[battler2].moves[*(gBattleStruct->chosenMovePositions + battler2)]; - } - else - moveBattler2 = MOVE_NONE; + priority2 = GetChosenMovePriority(battler2); } - // both move priorities are different than 0 - if (gBattleMoves[moveBattler1].priority != 0 || gBattleMoves[moveBattler2].priority != 0) + if (priority1 == priority2) { - // both priorities are the same - if (gBattleMoves[moveBattler1].priority == gBattleMoves[moveBattler2].priority) + // QUICK CLAW / CUSTAP - always first + // LAGGING TAIL - always last + // STALL - always last + + if (gProtectStructs[battler1].quickDraw && !gProtectStructs[battler2].quickDraw) + strikesFirst = 0; + else if (!gProtectStructs[battler1].quickDraw && gProtectStructs[battler2].quickDraw) + strikesFirst = 1; + else if (gProtectStructs[battler1].usedCustapBerry && !gProtectStructs[battler2].usedCustapBerry) + strikesFirst = 0; + else if (gProtectStructs[battler2].usedCustapBerry && !gProtectStructs[battler1].usedCustapBerry) + strikesFirst = 1; + else if (holdEffectBattler1 == HOLD_EFFECT_LAGGING_TAIL && holdEffectBattler2 != HOLD_EFFECT_LAGGING_TAIL) + strikesFirst = 1; + else if (holdEffectBattler2 == HOLD_EFFECT_LAGGING_TAIL && holdEffectBattler1 != HOLD_EFFECT_LAGGING_TAIL) + strikesFirst = 0; + else if (ability1 == ABILITY_STALL && ability2 != ABILITY_STALL) + strikesFirst = 1; + else if (ability2 == ABILITY_STALL && ability1 != ABILITY_STALL) + strikesFirst = 0; + else { if (speedBattler1 == speedBattler2 && Random() & 1) + { strikesFirst = 2; // same speeds, same priorities + } else if (speedBattler1 < speedBattler2) - strikesFirst = 1; // battler2 has more speed - - // else battler1 has more speed + { + // battler2 has more speed + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM) + strikesFirst = 0; + else + strikesFirst = 1; + } + else + { + // battler1 has more speed + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM) + strikesFirst = 1; + else + strikesFirst = 0; + } } - else if (gBattleMoves[moveBattler1].priority < gBattleMoves[moveBattler2].priority) - strikesFirst = 1; // battler2's move has greater priority - - // else battler1's move has greater priority } - // both priorities are equal to 0 + else if (priority1 < priority2) + { + strikesFirst = 1; // battler2's move has greater priority + } else { - if (speedBattler1 == speedBattler2 && Random() & 1) - strikesFirst = 2; // same speeds, same priorities - else if (speedBattler1 < speedBattler2) - strikesFirst = 1; // battler2 has more speed - - // else battler1 has more speed + strikesFirst = 0; // battler1's move has greater priority } return strikesFirst; @@ -4715,15 +4676,17 @@ static void SetActionsAndBattlersTurnOrder(void) turnOrderId++; } } - gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; - gBattleStruct->focusPunchBattlerId = 0; + gBattleMainFunc = CheckMegaEvolutionBeforeTurn; + gBattleStruct->mega.battlerId = 0; return; } else { for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { - if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH) + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM + || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH + || gChosenActionByBattler[gActiveBattler] == B_ACTION_THROW_BALL) { gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; gBattlerByTurnOrder[turnOrderId] = gActiveBattler; @@ -4732,7 +4695,9 @@ static void SetActionsAndBattlersTurnOrder(void) } for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { - if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH) + if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM + && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH + && gChosenActionByBattler[gActiveBattler] != B_ACTION_THROW_BALL) { gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; gBattlerByTurnOrder[turnOrderId] = gActiveBattler; @@ -4748,7 +4713,9 @@ static void SetActionsAndBattlersTurnOrder(void) if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM && gActionsByTurnOrder[i] != B_ACTION_SWITCH - && gActionsByTurnOrder[j] != B_ACTION_SWITCH) + && gActionsByTurnOrder[j] != B_ACTION_SWITCH + && gActionsByTurnOrder[i] != B_ACTION_THROW_BALL + && gActionsByTurnOrder[j] != B_ACTION_THROW_BALL) { if (GetWhoStrikesFirst(battler1, battler2, FALSE)) SwapTurnOrder(i, j); @@ -4757,27 +4724,27 @@ static void SetActionsAndBattlersTurnOrder(void) } } } - gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; - gBattleStruct->focusPunchBattlerId = 0; + gBattleMainFunc = CheckMegaEvolutionBeforeTurn; + gBattleStruct->mega.battlerId = 0; } static void TurnValuesCleanUp(bool8 var0) { s32 i; - u8 *dataPtr; for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { if (var0) { - gProtectStructs[gActiveBattler].protected = 0; - gProtectStructs[gActiveBattler].endured = 0; + gProtectStructs[gActiveBattler].protected = FALSE; + gProtectStructs[gActiveBattler].spikyShielded = FALSE; + gProtectStructs[gActiveBattler].kingsShielded = FALSE; + gProtectStructs[gActiveBattler].banefulBunkered = FALSE; + gProtectStructs[gActiveBattler].quash = FALSE; } else { - dataPtr = (u8*)(&gProtectStructs[gActiveBattler]); - for (i = 0; i < sizeof(struct ProtectStruct); i++) - dataPtr[i] = 0; + memset(&gProtectStructs[gActiveBattler], 0, sizeof(struct ProtectStruct)); if (gDisableStructs[gActiveBattler].isFirstTurn) gDisableStructs[gActiveBattler].isFirstTurn--; @@ -4786,54 +4753,166 @@ static void TurnValuesCleanUp(bool8 var0) { gDisableStructs[gActiveBattler].rechargeTimer--; if (gDisableStructs[gActiveBattler].rechargeTimer == 0) - gBattleMons[gActiveBattler].status2 &= ~(STATUS2_RECHARGE); + gBattleMons[gActiveBattler].status2 &= ~STATUS2_RECHARGE; } } if (gDisableStructs[gActiveBattler].substituteHP == 0) - gBattleMons[gActiveBattler].status2 &= ~(STATUS2_SUBSTITUTE); + gBattleMons[gActiveBattler].status2 &= ~STATUS2_SUBSTITUTE; } + gSideStatuses[0] &= ~(SIDE_STATUS_QUICK_GUARD | SIDE_STATUS_WIDE_GUARD | SIDE_STATUS_CRAFTY_SHIELD | SIDE_STATUS_MAT_BLOCK); + gSideStatuses[1] &= ~(SIDE_STATUS_QUICK_GUARD | SIDE_STATUS_WIDE_GUARD | SIDE_STATUS_CRAFTY_SHIELD | SIDE_STATUS_MAT_BLOCK); gSideTimers[0].followmeTimer = 0; gSideTimers[1].followmeTimer = 0; } void SpecialStatusesClear(void) { - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - s32 i; - u8 *dataPtr = (u8*)(&gSpecialStatuses[gActiveBattler]); + memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses)); +} - for (i = 0; i < sizeof(struct SpecialStatus); i++) - dataPtr[i] = 0; +static void CheckMegaEvolutionBeforeTurn(void) +{ + if (!(gHitMarker & HITMARKER_RUN)) + { + while (gBattleStruct->mega.battlerId < gBattlersCount) + { + gActiveBattler = gBattlerAttacker = gBattleStruct->mega.battlerId; + gBattleStruct->mega.battlerId++; + if (gBattleStruct->mega.toEvolve & gBitTable[gActiveBattler] + && !(gProtectStructs[gActiveBattler].noValidMoves)) + { + gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]); + gLastUsedItem = gBattleMons[gActiveBattler].item; + if (gBattleStruct->mega.isWishMegaEvo == TRUE) + BattleScriptExecute(BattleScript_WishMegaEvolution); + else + BattleScriptExecute(BattleScript_MegaEvolution); + return; + } + } } + + #if B_MEGA_EVO_TURN_ORDER <= GEN_6 + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleStruct->focusPunchBattlerId = 0; + #else + gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved + #endif +} + +// In gen7, priority and speed are recalculated during the turn in which a pokemon mega evolves +static void TryChangeTurnOrder(void) +{ + s32 i, j; + for (i = 0; i < gBattlersCount - 1; i++) + { + for (j = i + 1; j < gBattlersCount; j++) + { + u8 battler1 = gBattlerByTurnOrder[i]; + u8 battler2 = gBattlerByTurnOrder[j]; + if (gActionsByTurnOrder[i] == B_ACTION_USE_MOVE + && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE) + { + if (GetWhoStrikesFirst(battler1, battler2, FALSE)) + SwapTurnOrder(i, j); + } + } + } + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleStruct->focusPunchBattlerId = 0; } static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) { + u32 i; + if (!(gHitMarker & HITMARKER_RUN)) { while (gBattleStruct->focusPunchBattlerId < gBattlersCount) { gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBattlerId; gBattleStruct->focusPunchBattlerId++; - if (gChosenMoveByBattler[gActiveBattler] == MOVE_FOCUS_PUNCH - && !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) + if (!(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) && !(gDisableStructs[gBattlerAttacker].truantCounter) && !(gProtectStructs[gActiveBattler].noValidMoves)) { - BattleScriptExecute(BattleScript_FocusPunchSetUp); + switch(gChosenMoveByBattler[gActiveBattler]) + { + case MOVE_FOCUS_PUNCH: + BattleScriptExecute(BattleScript_FocusPunchSetUp); + return; + case MOVE_BEAK_BLAST: + BattleScriptExecute(BattleScript_BeakBlastSetUp); + return; + } + } + } + } + + gBattleMainFunc = CheckQuickClaw_CustapBerryActivation; + gBattleStruct->quickClawBattlerId = 0; +} + +static void CheckQuickClaw_CustapBerryActivation(void) +{ + u32 i; + + if (!(gHitMarker & HITMARKER_RUN)) + { + while (gBattleStruct->quickClawBattlerId < gBattlersCount) + { + gActiveBattler = gBattlerAttacker = gBattleStruct->quickClawBattlerId; + gBattleStruct->quickClawBattlerId++; + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_MOVE + && gChosenMoveByBattler[gActiveBattler] != MOVE_FOCUS_PUNCH // quick claw message doesn't need to activate here + && (gProtectStructs[gActiveBattler].usedCustapBerry || gProtectStructs[gActiveBattler].quickDraw) + && !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) + && !(gDisableStructs[gBattlerAttacker].truantCounter) + && !(gProtectStructs[gActiveBattler].noValidMoves)) + { + if (gProtectStructs[gActiveBattler].usedCustapBerry) + { + gProtectStructs[gActiveBattler].usedCustapBerry = FALSE; + gLastUsedItem = gBattleMons[gActiveBattler].item; + PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); + if (GetBattlerHoldEffect(gActiveBattler, FALSE) == HOLD_EFFECT_CUSTAP_BERRY) + { + // don't record berry since its gone now + BattleScriptExecute(BattleScript_CustapBerryActivation); + } + else + { + RecordItemEffectBattle(gActiveBattler, GetBattlerHoldEffect(gActiveBattler, FALSE)); + BattleScriptExecute(BattleScript_QuickClawActivation); + } + } + else if (gProtectStructs[gActiveBattler].quickDraw) + { + gBattlerAbility = gActiveBattler; + gProtectStructs[gActiveBattler].quickDraw = FALSE; + gLastUsedAbility = gBattleMons[gActiveBattler].ability; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); + RecordAbilityBattle(gActiveBattler, gLastUsedAbility); + BattleScriptExecute(BattleScript_QuickDrawActivation); + } return; } } } - TryClearRageStatuses(); + // setup stuff before turns/actions + TryClearRageAndFuryCutter(); gCurrentTurnActionNumber = 0; - gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; - gDynamicBasePower = 0; + gCurrentActionFuncId = gActionsByTurnOrder[0]; gBattleStruct->dynamicMoveType = 0; + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + gBattleStruct->ateBoost[i] = FALSE; + gSpecialStatuses[i].gemBoost = FALSE; + } + gBattleMainFunc = RunTurnActionsFunctions; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; @@ -4851,15 +4930,15 @@ static void RunTurnActionsFunctions(void) if (gCurrentTurnActionNumber >= gBattlersCount) // everyone did their actions, turn finished { - gHitMarker &= ~(HITMARKER_x100000); + gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F]; } else { if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId { - gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); - gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); + gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; + gHitMarker &= ~HITMARKER_UNABLE_TO_USE_MOVE; } } } @@ -4874,7 +4953,7 @@ static void HandleEndTurn_BattleWon(void) gBattleTextBuff1[0] = gBattleOutcome; gBattlerAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); gBattlescriptCurrInstr = BattleScript_LinkBattleWonOrLost; - gBattleOutcome &= ~(B_OUTCOME_LINK_BATTLE_RAN); + gBattleOutcome &= ~B_OUTCOME_LINK_BATTLE_RAN; } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_EREADER_TRAINER)) @@ -4933,13 +5012,13 @@ static void HandleEndTurn_BattleLost(void) if (gBattleOutcome & B_OUTCOME_LINK_BATTLE_RAN) { gBattlescriptCurrInstr = BattleScript_PrintPlayerForfeitedLinkBattle; - gBattleOutcome &= ~(B_OUTCOME_LINK_BATTLE_RAN); + gBattleOutcome &= ~B_OUTCOME_LINK_BATTLE_RAN; gSaveBlock2Ptr->frontier.disableRecordBattle = TRUE; } else { gBattlescriptCurrInstr = BattleScript_FrontierLinkBattleLost; - gBattleOutcome &= ~(B_OUTCOME_LINK_BATTLE_RAN); + gBattleOutcome &= ~B_OUTCOME_LINK_BATTLE_RAN; } } else @@ -4947,7 +5026,7 @@ static void HandleEndTurn_BattleLost(void) gBattleTextBuff1[0] = gBattleOutcome; gBattlerAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); gBattlescriptCurrInstr = BattleScript_LinkBattleWonOrLost; - gBattleOutcome &= ~(B_OUTCOME_LINK_BATTLE_RAN); + gBattleOutcome &= ~B_OUTCOME_LINK_BATTLE_RAN; } } else @@ -4975,15 +5054,15 @@ static void HandleEndTurn_RanFromBattle(void) } else { - switch (gProtectStructs[gBattlerAttacker].fleeFlag) + switch (gProtectStructs[gBattlerAttacker].fleeType) { default: gBattlescriptCurrInstr = BattleScript_GotAwaySafely; break; - case 1: + case FLEE_ITEM: gBattlescriptCurrInstr = BattleScript_SmokeBallEscape; break; - case 2: + case FLEE_ABILITY: gBattlescriptCurrInstr = BattleScript_RanAwayUsingMonAbility; break; } @@ -5004,6 +5083,8 @@ static void HandleEndTurn_MonFled(void) static void HandleEndTurn_FinishBattle(void) { + u32 i; + if (gCurrentActionFuncId == B_ACTION_TRY_FINISH || gCurrentActionFuncId == B_ACTION_FINISHED) { if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK @@ -5046,9 +5127,30 @@ static void HandleEndTurn_FinishBattle(void) TryPutBreakingNewsOnAir(); } - sub_8186444(); + RecordedBattle_SetPlaybackFinished(); BeginFastPaletteFade(3); FadeOutMapMusic(5); + #if B_TRAINERS_KNOCK_OFF_ITEMS + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + TryRestoreStolenItems(); + #endif + for (i = 0; i < PARTY_SIZE; i++) + { + UndoMegaEvolution(i); + UndoFormChange(i, B_SIDE_PLAYER, FALSE); + DoBurmyFormChange(i); + } + #if B_RECALCULATE_STATS >= GEN_5 + // Recalculate the stats of every party member before the end + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_NONE + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) + { + CalculateMonStats(&gPlayerParty[i]); + } + } + #endif gBattleMainFunc = FreeResetData_ReturnToOvOrDoEvolutions; gCB2_AfterEvolution = BattleMainCB2; } @@ -5063,15 +5165,24 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void) { if (!gPaletteFade.active) { + gIsFishingEncounter = FALSE; + gIsSurfingEncounter = FALSE; ResetSpriteData(); - if (gLeveledUpInBattle == 0 || gBattleOutcome != B_OUTCOME_WON) + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_FIRST_BATTLE + | BATTLE_TYPE_SAFARI + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_WALLY_TUTORIAL)) + && (B_EVOLUTION_AFTER_WHITEOUT >= GEN_6 || gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT)) { - gBattleMainFunc = ReturnFromBattleToOverworld; - return; + gBattleMainFunc = TrySpecialEvolution; } else { - gBattleMainFunc = TryEvolvePokemon; + gBattleMainFunc = ReturnFromBattleToOverworld; + return; } } @@ -5084,6 +5195,26 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void) } } +static void TrySpecialEvolution(void) // Attempts to perform non-level related battle evolutions (not the script command). +{ + s32 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + u16 species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_SPECIAL, i, NULL); + if (species != SPECIES_NONE && !(sTriedEvolving & gBitTable[i])) + { + sTriedEvolving |= gBitTable[i]; + FreeAllWindowBuffers(); + gBattleMainFunc = WaitForEvoSceneToFinish; + EvolutionScene(&gPlayerParty[i], species, TRUE, i); + return; + } + } + sTriedEvolving = 0; + gBattleMainFunc = TryEvolvePokemon; +} + static void TryEvolvePokemon(void) { s32 i; @@ -5100,7 +5231,7 @@ static void TryEvolvePokemon(void) levelUpBits &= ~(gBitTable[i]); gLeveledUpInBattle = levelUpBits; - species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_NORMAL, levelUpBits, SPECIES_NONE); + species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_NORMAL, levelUpBits, NULL); if (species != SPECIES_NONE) { FreeAllWindowBuffers(); @@ -5118,7 +5249,7 @@ static void TryEvolvePokemon(void) static void WaitForEvoSceneToFinish(void) { if (gMain.callback2 == BattleMainCB2) - gBattleMainFunc = TryEvolvePokemon; + gBattleMainFunc = TrySpecialEvolution; } static void ReturnFromBattleToOverworld(void) @@ -5133,7 +5264,7 @@ static void ReturnFromBattleToOverworld(void) return; gSpecialVar_Result = gBattleOutcome; - gMain.inBattle = 0; + gMain.inBattle = FALSE; gMain.callback1 = gPreBattleCallback1; if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) @@ -5172,3 +5303,162 @@ void RunBattleScriptCommands(void) if (gBattleControllerExecFlags == 0) gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } + +void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk) +{ + u32 moveType, ateType, attackerAbility; + u16 holdEffect = GetBattlerHoldEffect(battlerAtk, TRUE); + + if (move == MOVE_STRUGGLE) + return; + + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->ateBoost[battlerAtk] = 0; + gSpecialStatuses[battlerAtk].gemBoost = FALSE; + + if (gBattleMoves[move].effect == EFFECT_WEATHER_BALL) + { + if (WEATHER_HAS_EFFECT) + { + if (gBattleWeather & B_WEATHER_RAIN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + gBattleStruct->dynamicMoveType = TYPE_WATER | F_DYNAMIC_TYPE_2; + else if (gBattleWeather & B_WEATHER_SANDSTORM) + gBattleStruct->dynamicMoveType = TYPE_ROCK | F_DYNAMIC_TYPE_2; + else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + gBattleStruct->dynamicMoveType = TYPE_FIRE | F_DYNAMIC_TYPE_2; + else if (gBattleWeather & B_WEATHER_HAIL) + gBattleStruct->dynamicMoveType = TYPE_ICE | F_DYNAMIC_TYPE_2; + else + gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_2; + } + } + else if (gBattleMoves[move].effect == EFFECT_HIDDEN_POWER) + { + u8 typeBits = ((gBattleMons[battlerAtk].hpIV & 1) << 0) + | ((gBattleMons[battlerAtk].attackIV & 1) << 1) + | ((gBattleMons[battlerAtk].defenseIV & 1) << 2) + | ((gBattleMons[battlerAtk].speedIV & 1) << 3) + | ((gBattleMons[battlerAtk].spAttackIV & 1) << 4) + | ((gBattleMons[battlerAtk].spDefenseIV & 1) << 5); + + // 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; + if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY) + gBattleStruct->dynamicMoveType++; + gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_1 | F_DYNAMIC_TYPE_2; + } + else if (gBattleMoves[move].effect == EFFECT_CHANGE_TYPE_ON_ITEM) + { + if (holdEffect == gBattleMoves[move].argument) + gBattleStruct->dynamicMoveType = ItemId_GetSecondaryId(gBattleMons[battlerAtk].item) | F_DYNAMIC_TYPE_2; + } + else if (gBattleMoves[move].effect == EFFECT_REVELATION_DANCE) + { + if (gBattleMons[battlerAtk].type1 != TYPE_MYSTERY) + gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type1 | F_DYNAMIC_TYPE_2; + else if (gBattleMons[battlerAtk].type2 != TYPE_MYSTERY) + gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_2; + else if (gBattleMons[battlerAtk].type3 != TYPE_MYSTERY) + gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type3 | F_DYNAMIC_TYPE_2; + } + else if (gBattleMoves[move].effect == EFFECT_NATURAL_GIFT) + { + if (ItemId_GetPocket(gBattleMons[battlerAtk].item) == POCKET_BERRIES) + gBattleStruct->dynamicMoveType = gNaturalGiftTable[ITEM_TO_BERRY(gBattleMons[battlerAtk].item)].type; + } + else if (gBattleMoves[move].effect == EFFECT_TERRAIN_PULSE) + { + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_TERRAIN_ANY)) + { + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_2; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + gBattleStruct->dynamicMoveType = TYPE_GRASS | F_DYNAMIC_TYPE_2; + else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + gBattleStruct->dynamicMoveType = TYPE_FAIRY | F_DYNAMIC_TYPE_2; + else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + gBattleStruct->dynamicMoveType = TYPE_PSYCHIC | F_DYNAMIC_TYPE_2; + else //failsafe + gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_2; + } + } + + attackerAbility = GetBattlerAbility(battlerAtk); + GET_MOVE_TYPE(move, moveType); + if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && moveType == TYPE_NORMAL) + || gStatuses4[battlerAtk] & STATUS4_ELECTRIFIED) + { + gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_2; + } + else if (gBattleMoves[move].type == TYPE_NORMAL + && gBattleMoves[move].effect != EFFECT_HIDDEN_POWER + && gBattleMoves[move].effect != EFFECT_WEATHER_BALL + && gBattleMoves[move].effect != EFFECT_CHANGE_TYPE_ON_ITEM + && gBattleMoves[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)) + ) + ) + { + gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_2; + gBattleStruct->ateBoost[battlerAtk] = 1; + } + else if (gBattleMoves[move].type != TYPE_NORMAL + && gBattleMoves[move].effect != EFFECT_HIDDEN_POWER + && gBattleMoves[move].effect != EFFECT_WEATHER_BALL + && attackerAbility == ABILITY_NORMALIZE) + { + gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_2; + gBattleStruct->ateBoost[battlerAtk] = 1; + } + else if (gBattleMoves[move].flags & FLAG_SOUND + && attackerAbility == ABILITY_LIQUID_VOICE) + { + gBattleStruct->dynamicMoveType = TYPE_WATER | F_DYNAMIC_TYPE_2; + } + else if (gStatuses4[battlerAtk] & STATUS4_PLASMA_FISTS && moveType == TYPE_NORMAL) + { + gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_2; + } + else if (move == MOVE_AURA_WHEEL && gBattleMons[battlerAtk].species == SPECIES_MORPEKO_HANGRY) + { + gBattleStruct->dynamicMoveType = TYPE_DARK | F_DYNAMIC_TYPE_2; + } + + // Check if a gem should activate. + GET_MOVE_TYPE(move, moveType); + if (holdEffect == HOLD_EFFECT_GEMS + && moveType == ItemId_GetSecondaryId(gBattleMons[battlerAtk].item)) + { + gSpecialStatuses[battlerAtk].gemParam = GetBattlerHoldEffectParam(battlerAtk); + gSpecialStatuses[battlerAtk].gemBoost = TRUE; + } +} + +// special to set a field's totem boost(s) +// inputs: +// var8000: battlerId +// var8001 - var8007: stat changes +void SetTotemBoost(void) +{ + u8 battlerId = gSpecialVar_0x8000; + u8 i; + + for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) + { + if (*(&gSpecialVar_0x8001 + i)) + { + gTotemBoosts[battlerId].stats |= (1 << i); + gTotemBoosts[battlerId].statChanges[i] = *(&gSpecialVar_0x8001 + i); + gTotemBoosts[battlerId].stats |= 0x80; // used as a flag for the "totem flared to life" script + } + } +} + +bool32 IsWildMonSmart(void) +{ + return (B_SMART_WILD_AI_FLAG != 0 && FlagGet(B_SMART_WILD_AI_FLAG)); +} diff --git a/src/battle_message.c b/src/battle_message.c index 5a28aed01f..91eeb4ad6e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -5,9 +5,11 @@ #include "battle_message.h" #include "battle_setup.h" #include "battle_tower.h" +#include "battle_z_move.h" #include "data.h" #include "event_data.h" #include "frontier_util.h" +#include "graphics.h" #include "international_string_util.h" #include "item.h" #include "link.h" @@ -19,11 +21,14 @@ #include "text.h" #include "trainer_hill.h" #include "window.h" +#include "constants/abilities.h" #include "constants/battle_dome.h" #include "constants/battle_string_ids.h" #include "constants/frontier_util.h" #include "constants/items.h" #include "constants/moves.h" +#include "constants/opponents.h" +#include "constants/species.h" #include "constants/trainers.h" #include "constants/trainer_hill.h" #include "constants/weather.h" @@ -42,18 +47,12 @@ struct BattleWindowText u8 shadowColor; }; -extern const u16 gUnknown_08D85620[]; - -// this file's functions static void ChooseMoveUsedParticle(u8 *textPtr); static void ChooseTypeOfMoveUsedString(u8 *dst); -static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst); -// EWRAM vars -static EWRAM_DATA u8 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0}; +static EWRAM_DATA u16 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL; -// const rom data // todo: make some of those names less vague: attacker/target vs pkmn, etc. static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}"); @@ -78,8 +77,14 @@ static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_ static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p"); static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p"); static const u8 sText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p"); +static const u8 sText_PlayerLostToEnemyTrainer[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\pPlayer lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerPaidPrizeMoney[] = _("{B_PLAYER_NAME} paid ¥{B_BUFF1} as the prize\nmoney…\p… … … …\p{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p"); +#if B_WHITEOUT_MONEY >= GEN_4 +static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} panicked and lost ¥{B_BUFF1}…\p… … … …\p{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); +#else static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); +#endif static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); static const u8 sText_CantEscape2[] = _("Can't escape!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); @@ -90,7 +95,7 @@ static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalre static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); -static const u8 sText_PkmnPoisonedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\npoisoned {B_EFF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}!"); static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!"); static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned."); static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!"); @@ -145,6 +150,7 @@ static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!"); static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!"); static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!"); static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}'s BIND!"); +static const u8 sText_PkmnInSnapTrap[] = _("{B_DEF_NAME_WITH_PREFIX} got trapped\nby a snap trap!"); static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!"); static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!"); static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!"); @@ -220,13 +226,13 @@ static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\ static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!"); static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!"); static const u8 sText_PkmnAttack[] = _("{B_BUFF1}'s attack!"); -static const u8 sText_PkmnCenterAttention[] = _("{B_ATK_NAME_WITH_PREFIX} became the\ncenter of attention!"); +static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became the\ncenter of attention!"); static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!"); static const u8 sText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!"); static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}'s status\nreturned to normal!"); static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto TORMENT!"); static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!"); -static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe TAUNT!"); +static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe Taunt!"); static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!"); static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}."); @@ -261,9 +267,10 @@ static const u8 sText_TheWallShattered[] = _("The wall shattered!"); static const u8 sText_ButNoEffect[] = _("But it had no effect!"); static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p"); static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nis disabled!\p"); -static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the same\nmove in a row due to the TORMENT!\p"); -static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the TAUNT!\p"); +static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the same\nmove in a row due to the Torment!\p"); +static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the Taunt!\p"); static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the\nsealed {B_CURRENT_MOVE}!\p"); +static const u8 sText_PkmnCantUseMoveThroatChop[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} due to Throat Chop!\p"); static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!"); static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); @@ -279,7 +286,7 @@ static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s ATTACK!"); static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); -static const u8 sText_PkmnHurtsWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nhurt {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}'s {B_BUFF2}!"); static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents burns!"); static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); @@ -301,7 +308,7 @@ static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); -static const u8 sText_StatSharply[] = _("sharply "); +const u8 gText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); static const u8 sText_StatHarshly[] = _("harshly "); static const u8 sText_StatFell[] = _("fell!"); @@ -420,31 +427,20 @@ static const u8 sText_FoePkmnPrefix3[] = _("Foe"); static const u8 sText_AllyPkmnPrefix2[] = _("Ally"); static const u8 sText_FoePkmnPrefix4[] = _("Foe"); static const u8 sText_AllyPkmnPrefix3[] = _("Ally"); -static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}"); +static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF3}!"); static const u8 sText_ExclamationMark[] = _("!"); static const u8 sText_ExclamationMark2[] = _("!"); static const u8 sText_ExclamationMark3[] = _("!"); static const u8 sText_ExclamationMark4[] = _("!"); static const u8 sText_ExclamationMark5[] = _("!"); -static const u8 sText_HP2[] = _("HP"); -static const u8 sText_Attack2[] = _("ATTACK"); -static const u8 sText_Defense2[] = _("DEFENSE"); -static const u8 sText_Speed[] = _("SPEED"); -static const u8 sText_SpAtk2[] = _("SP. ATK"); -static const u8 sText_SpDef2[] = _("SP. DEF"); static const u8 sText_Accuracy[] = _("accuracy"); static const u8 sText_Evasiveness[] = _("evasiveness"); -const u8 * const gStatNamesTable[NUM_BATTLE_STATS] = +const u8 *const gStatNamesTable[NUM_BATTLE_STATS] = { - [STAT_HP] = sText_HP2, - [STAT_ATK] = sText_Attack2, - [STAT_DEF] = sText_Defense2, - [STAT_SPEED] = sText_Speed, - [STAT_SPATK] = sText_SpAtk2, - [STAT_SPDEF] = sText_SpDef2, - [STAT_ACC] = sText_Accuracy, - [STAT_EVASION] = sText_Evasiveness, + gText_HP3, gText_Attack, gText_Defense, + gText_Speed, gText_SpAtk, gText_SpDef, + sText_Accuracy, sText_Evasiveness }; static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!"); @@ -453,7 +449,7 @@ static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!"); static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!"); static const u8 sText_PokeblockWasTooSour[] = _("was too sour!"); -const u8 * const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = +const u8 *const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = { [FLAVOR_SPICY] = sText_PokeblockWasTooSpicy, [FLAVOR_DRY] = sText_PokeblockWasTooDry, @@ -473,13 +469,13 @@ static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); -static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); -static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); -static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?"); -static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); +static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); +static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); +static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_DEF_NAME}?"); +static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); static const u8 sText_Someones[] = _("someone's"); static const u8 sText_Lanettes[] = _("LANETTE's"); -static const u8 sText_PkmnDataAddedToDex[] = _("{B_OPPONENT_MON1_NAME}'s data was\nadded to the POKéDEX.\p"); +static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data was\nadded to the POKéDEX.\p"); static const u8 sText_ItIsRaining[] = _("It is raining."); static const u8 sText_SandstormIsRaging[] = _("A sandstorm is raging."); static const u8 sText_BoxIsFull[] = _("The BOX is full!\nYou can't catch any more!\p"); @@ -518,377 +514,947 @@ static const u8 sText_Trainer2WinText[]; static const u8 sText_TwoInGameTrainersDefeated[]; static const u8 sText_Trainer2LoseText[]; -const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] = +// New battle strings. +static const s8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} Endured\nthe hit using {B_DEF_ABILITY}!"); +static const s8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its {B_LAST_ITEM}!"); +static const s8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its {B_LAST_ITEM}!"); +static const s8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly \npoisoned by the {B_LAST_ITEM}!"); +static const s8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned\nby the {B_LAST_ITEM}!"); +static const s8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} activates!"); +static const u8 sText_GravityIntensified[] = _("Gravity intensified!"); +static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was \nidentified!"); +static const u8 sText_TargetWokeUp[] = _("{B_DEF_NAME_WITH_PREFIX} woke up!"); +static const u8 sText_PkmnStoleAndAteItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole and\nate {B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); +static const u8 sText_TailWindBlew[] = _("The tailwind blew from\nbehind {B_ATK_TEAM2} team!"); +static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back\nto {B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}"); +static const u8 sText_PkmnCantUseItemsAnymore[] = _("{B_DEF_NAME_WITH_PREFIX} can't use\nitems anymore!"); +static const u8 sText_PkmnFlung[] = _("{B_ATK_NAME_WITH_PREFIX} flung its\n{B_LAST_ITEM}!"); +static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was prevented\nfrom healing!"); +static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched its\nAttack and Defense!"); +static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}'s ability\nwas suppressed!"); +static const u8 sText_ShieldedFromCriticalHits[] = _("The {B_CURRENT_MOVE} shielded {B_ATK_TEAM2}\nteam from critical hits!"); +static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Attack and\pSp. Atk with the target!"); +static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Defense and\pSp. Def with the target!"); +static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired\n{B_DEF_ABILITY}!"); +static const u8 sText_PoisonSpikesScattered[] = _("Poison Spikes were scattered all\naround the opposing team's feet!"); +static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes\nwith the target!"); +static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself\nwith a veil of water!"); +static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated on\nelectromagnetism!"); +static const u8 sText_PkmnTwistedDimensions[] = _("{B_ATK_NAME_WITH_PREFIX} twisted\nthe dimensions!"); +static const u8 sText_PointedStonesFloat[] =_("Pointed stones float in the air\naround {B_DEF_TEAM2} team!"); +static const u8 sText_CloakedInMysticalMoonlight[] =_("It became cloaked in mystical\nmoonlight!"); +static const u8 sText_TrappedBySwirlingMagma[] =_("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by swirling magma!"); +static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} vanished\ninstantly!"); +static const u8 sText_ProtectedTeam[] =_("{B_CURRENT_MOVE} protected\n{B_ATK_TEAM2} team!"); +static const u8 sText_SharedItsGuard[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\nguard with the target!"); +static const u8 sText_SharedItsPower[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\npower with the target!"); +static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which the\nDefense and Sp.Def stats are swapped!"); +static const u8 sText_BecameNimble[] =_("{B_ATK_NAME_WITH_PREFIX} became nimble!"); +static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled\ninto the air!"); +static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarre area in which\nPokémon's held items lose their effects!"); +static const u8 sText_FellStraightDown[] =_("{B_DEF_NAME_WITH_PREFIX} fell\nstraight down!"); +static const u8 sText_TargetChangedType[] =_("{B_DEF_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); +static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!"); +static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX}\ntook the kind offer!"); +static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX}'s stat changes\nwere removed!"); +static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} switched places!"); +static const u8 sText_RestoreTargetsHealth[] =_("{B_DEF_NAME_WITH_PREFIX}'s HP was restored!"); +static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took\n{B_DEF_NAME_WITH_PREFIX} into the sky!"); +static const u8 sText_FreedFromSkyDrop[] =_("{B_DEF_NAME_WITH_PREFIX} was freed\nfrom the Sky Drop!"); +static const u8 sText_PostponeTargetMove[] =_("{B_DEF_NAME_WITH_PREFIX}'s move\nwas postponed!"); +static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX}'s type\nchanged to match the {B_DEF_NAME_WITH_PREFIX}'s!"); +static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}"); +static const u8 sText_EmbargoEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can\nuse items again!"); +static const u8 sText_Electromagnetism[] = _("electromagnetism"); +static const u8 sText_BufferEnds[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\nwore off!"); +static const u8 sText_ThroatChopEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can\nuse sound-based moves again!"); +static const u8 sText_TelekinesisEnds[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom the telekinesis!"); +static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM1} team's tailwind\npetered out!"); +static const u8 sText_LuckyChantEnds[] = _("{B_ATK_TEAM1} team's Lucky Chant\nwore off!"); +static const u8 sText_TrickRoomEnds[] = _("The twisted dimensions returned to\nnormal!"); +static const u8 sText_WonderRoomEnds[] = _("Wonder Room wore off, and Defense\nand Sp. Def stats returned to normal!"); +static const u8 sText_MagicRoomEnds[] = _("Magic Room wore off, and held items'\neffects returned to normal!"); +static const u8 sText_MudSportEnds[] = _("The effects of Mud Sport have faded."); +static const u8 sText_WaterSportEnds[] = _("The effects of Water Sport have faded."); +static const u8 sText_GravityEnds[] = _("Gravity returned to normal!"); +static const u8 sText_AquaRingHeal[] = _("Aqua Ring restored\n{B_ATK_NAME_WITH_PREFIX}'s HP!"); +static const u8 sText_TargetAbilityRaisedStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised its {B_BUFF1}!"); +static const u8 sText_TargetAbilityLoweredStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nlowered its {B_BUFF1}!"); +static const u8 sText_AttackerAbilityRaisedStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nraised its {B_BUFF1}!"); +static const u8 sText_ScriptingAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); +static const u8 sText_AuroraVeilEnds[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nwore off!"); +static const u8 sText_ElectricTerrainEnds[] = _("The electricity disappeared\nfrom the battlefield."); +static const u8 sText_MistyTerrainEnds[] = _("The mist disappeared\nfrom the battlefield."); +static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared\nfrom the battlefield."); +static const u8 sText_GrassyTerrainEnds[] = _("The grass disappeared\nfrom the battlefield."); +static const u8 sText_TargetsStatWasMaxedOut[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed\nits {B_BUFF1}!"); +static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX}\na little bit!"); +static const u8 sText_BadDreamsDmg[] = _("{B_DEF_NAME_WITH_PREFIX} is tormented\nby {B_ATK_ABILITY}!"); +static const u8 sText_MoldBreakerEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} breaks the mold!"); +static const u8 sText_TeravoltEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating \na bursting aura!"); +static const u8 sText_TurboblazeEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na blazing aura!"); +static const u8 sText_SlowStartEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} can't get it going!"); +static const u8 sText_SlowStartEnd[] = _("{B_ATK_NAME_WITH_PREFIX} finally got\nits act together!"); +static const u8 sText_SolarPowerHpDrop[] = _("The {B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\ntakes its toll!"); +static const u8 sText_AftermathDmg[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt!"); +static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shuddered\nin anticipation!"); +static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nto the {B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); +static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nhealed it a little bit!"); +static const u8 sText_SnowWarningHail[] = _("It started to hail!"); +static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX} and\nfound its {B_LAST_ITEM}!"); +static const u8 sText_UnnerveEnters[] = _("The opposing team is too nervous\nto eat Berries!"); +static const u8 sText_HarvestBerry[] = _("{B_ATK_NAME_WITH_PREFIX} harvested\nits {B_LAST_ITEM}!"); +static const u8 sText_LastAbilityRaisedBuff1[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\nraised its {B_BUFF1}!"); +static const u8 sText_MagicBounceActivates[] = _("The {B_DEF_NAME_WITH_PREFIX} bounced the\n{B_ATK_NAME_WITH_PREFIX} back!"); +static const u8 sText_ProteanTypeChange[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed\nit into the {B_BUFF1} type!"); +static const u8 sText_SymbiosisItemPass[] = _("{B_ATK_NAME_WITH_PREFIX} passed its {B_LAST_ITEM}\nto {B_SCR_ACTIVE_NAME_WITH_PREFIX} through {B_ATK_ABILITY}!"); +static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); +static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared\nfrom around the opposing team's feet!"); +static const u8 sText_ToxicSpikesPoisoned[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was poisoned!"); +static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was\ncaught in a Sticky Web!"); +static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_HealingWishHealed[] = _("{B_ATK_NAME_WITH_PREFIX} regained health!"); +static const u8 sText_LunarDanceCameTrue[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin mystical moonlight!"); +static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled\nby {B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!"); +static const u8 sText_AttackerAquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired {B_LAST_ABILITY}!"); +static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go higher!"); +static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was\nbounced back by {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY}!"); +static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into\n{B_DEF_NAME_WITH_PREFIX} using {B_LAST_ABILITY}!"); +static const u8 sText_NotDoneYet[] = _("This move effect is not done yet!\p"); +static const u8 sText_PkmnBlewAwayToxicSpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nToxic Spikes!"); +static const u8 sText_PkmnBlewAwayStickyWeb[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSticky Web!"); +static const u8 sText_PkmnBlewAwayStealthRock[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nStealth Rock!"); +static const u8 sText_StickyWebUsed[] = _("A sticky web spreads out on the\nground around {B_DEF_TEAM2} team!"); +static const u8 sText_QuashSuccess[] = _("The opposing {B_DEF_NAME_WITH_PREFIX}'s\nmove was postponed!"); +static const u8 sText_IonDelugeOn[] = _("A deluge of ions showers\nthe battlefield!"); +static const u8 sText_TopsyTurvySwitchedStats[] = _("{B_DEF_NAME_WITH_PREFIX}'s stat changes were\nall reversed!"); +static const u8 sText_TerrainBecomesMisty[] = _("Mist swirled about\nthe battlefield!"); +static const u8 sText_TerrainBecomesGrassy[] = _("Grass grew to cover\nthe battlefield!"); +static const u8 sText_TerrainBecomesElectric[] = _("An electric current runs across\nthe battlefield!"); +static const u8 sText_TerrainBecomesPsychic[] = _("The battlefield got weird!"); +static const u8 sText_TargetElectrified[] = _("The {B_DEF_NAME_WITH_PREFIX}'s moves\nhave been electrified!"); +static const u8 sText_AssaultVestDoesntAllow[] = _("{B_LAST_ITEM}'s effects prevent\nstatus moves from being used!\p"); +static const u8 sText_GravityPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE}\nbecause of gravity!\p"); +static const u8 sText_HealBlockPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} was\nprevented from healing!\p"); +static const u8 sText_MegaEvoReacting[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ITEM} is \nreacting to {B_ATK_TRAINER_NAME}'s Mega Ring!"); +static const u8 sText_FerventWishReached[] = _("{B_ATK_TRAINER_NAME}'s fervent wish\nhas reached {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_MegaEvoEvolved[] = _("{B_ATK_NAME_WITH_PREFIX} has Mega Evolved into\nMega {B_BUFF1}!"); +static const u8 sText_drastically[] = _("drastically "); +static const u8 sText_severely[] = _("severely "); +static const u8 sText_Infestation[] = _("{B_DEF_NAME_WITH_PREFIX} has been afflicted\nwith an infestation by {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_NoEffectOnTarget[] = _("It had no effect\non {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_BurstingFlames[] = _("The bursting flames\nhit {B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); +static const u8 sText_BestowItemGiving[] = _("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_ThirdTypeAdded[] = _("{B_BUFF1} type was added to\n{B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_FellForFeint[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe feint!"); +static const u8 sText_PokemonCannotUseMove[] = _("{B_ATK_NAME_WITH_PREFIX} cannot\nuse {B_CURRENT_MOVE}!"); +static const u8 sText_CoveredInPowder[] = _("{B_DEF_NAME_WITH_PREFIX} is covered in powder!"); +static const u8 sText_PowderExplodes[] = _("When the flame touched the powder\non the Pokémon, it exploded!"); +static const u8 sText_BelchCantUse[] = _("Belch cannot be used!\p"); +static const u8 sText_SpectralThiefSteal[] = _("{B_ATK_NAME_WITH_PREFIX} stole the target's\nboosted stats!"); +static const u8 sText_GravityGrounding[] = _("{B_DEF_NAME_WITH_PREFIX} can't stay airborne\nbecause of gravity!"); +static const u8 sText_MistyTerrainPreventsStatus[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith a protective mist!"); +static const u8 sText_GrassyTerrainHeals[] = _("{B_ATK_NAME_WITH_PREFIX} is healed\nby the grassy terrain!"); +static const u8 sText_ElectricTerrainPreventsSleep[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith electrified terrain!"); +static const u8 sText_PsychicTerrainPreventsPriority[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith psychic terrain!"); +static const u8 sText_SafetyGogglesProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is not affected\nthanks to its {B_LAST_ITEM}!"); +static const u8 sText_FlowerVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself\nwith a veil of petals!"); +static const u8 sText_SweetVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself\nwith a veil of sweetness!"); +static const u8 sText_AromaVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby an aromatic veil!"); +static const u8 sText_CelebrateMessage[] = _("Congratulations, {B_PLAYER_NAME}!"); +static const u8 sText_UsedInstructedMove[] = _("{B_ATK_NAME_WITH_PREFIX} used the move\ninstructed by {B_BUFF1}!"); +static const u8 sText_LaserFocusMessage[] = _("{B_ATK_NAME_WITH_PREFIX}\nconcentrated intensely!"); +static const u8 sText_GemActivates[] = _("{B_LAST_ITEM} strengthened\n{B_ATK_NAME_WITH_PREFIX}'s power!"); +static const u8 sText_BerryDmgReducing[] = _("{B_LAST_ITEM} weakened the damage\nto {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_TargetAteItem[] = _("{B_DEF_NAME_WITH_PREFIX} ate its {B_LAST_ITEM}!"); +static const u8 sText_AirBalloonFloat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} floats in the air\nwith its {B_LAST_ITEM}!"); +static const u8 sText_AirBalloonPop[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} popped!"); +static const u8 sText_IncinerateBurn[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwas burnt up!"); +static const u8 sText_BugBite[] = _("{B_ATK_NAME_WITH_PREFIX} stole and ate\n{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); +static const u8 sText_IllusionWoreOff[] = _("{B_DEF_NAME_WITH_PREFIX}'s Illusion wore off!"); +static const u8 sText_AttackerCuredTargetStatus[] = _("{B_ATK_NAME_WITH_PREFIX} cured\n{B_DEF_NAME_WITH_PREFIX}'s problem!"); +static const u8 sText_AttackerLostFireType[] = _("{B_ATK_NAME_WITH_PREFIX} burned itself out!"); +static const u8 sText_HealerCure[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\ncured {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s problem!"); +static const u8 sText_ReceiverAbilityTakeOver[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwas taken over!"); +static const u8 sText_PkmnAbsorbingPower[] = _("{B_ATK_NAME_WITH_PREFIX} is absorbing power!"); +static const u8 sText_NoOneWillBeAbleToRun[] = _("No one will be able to run away\nduring the next turn!"); +static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love\nfrom the {B_LAST_ITEM}!"); +static const u8 sText_CloakedInAFreezingLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin a freezing light!"); +static const u8 sText_StatWasNotLowered[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas not lowered!"); +static const u8 sText_AuraFlaredToLife[] = _("{B_DEF_NAME_WITH_PREFIX}'s aura flared to life!"); +static const u8 sText_AirLockActivates[] = _("The effects of weather\ndisappeared."); +static const u8 sText_PressureActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its\npressure!"); +static const u8 sText_DarkAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na dark aura!"); +static const u8 sText_FairyAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na fairy aura!"); +static const u8 sText_AuraBreakActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} reversed all\nother Pokémon's auras!"); +static const u8 sText_ComatoseActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is drowsing!"); +static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were\ncleansed!"); +static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found\na {B_LAST_ITEM}!"); +static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); +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_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}!"); +static const u8 sText_PkmnShookOffTheTaunt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shook off\nthe taunt!"); +static const u8 sText_PkmnGotOverItsInfatuation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} got over\nits infatuation!"); +static const u8 sText_ZPowerSurrounds[] = _("{B_ATK_NAME_WITH_PREFIX} surrounds\nitself with its Z-Power!"); +static const u8 sText_ZPowerUnleashed[] = _("{B_ATK_NAME_WITH_PREFIX} unleashes\nits full-force Z-Move!"); +static const u8 sText_ZMoveResetsStats[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its\ndecreased stats to normal using\lits Z-Power!"); +static const u8 sText_ZMoveAllStatsUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted all\nof its stats using its Z-Power!"); +static const u8 sText_ZMoveBoostCrit[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its\ncritical-hit ratio using its Z-Power!"); +static const u8 sText_ZMoveRestoreHp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nHP using its Z-Power!"); +static const u8 sText_ZMoveStatUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted\nits stats using its Z-Power!"); +static const u8 sText_ZMoveHpSwitchInTrap[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s HP was restored by the Z-Power!"); +static const u8 sText_TerrainReturnedToNormal[] = _("The terrain returned to\nnormal!"); +static const u8 sText_ItemCannotBeRemoved[] = _("{B_ATK_NAME_WITH_PREFIX}'s item cannot be removed!"); +static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itself to\n{B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nburn was healed."); +static const u8 sText_RedCardActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its {B_LAST_ITEM}\nagainst {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched\nout with the {B_LAST_ITEM}!"); +static const u8 sText_AttackerGotOverInfatuation[] =_("{B_ATK_NAME_WITH_PREFIX} got over\nits infatuation!"); +static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is\ntormented no more!"); +static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of\nits heal block!"); +static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its bond with its trainer!\p"); +static const u8 sText_AttackerBecameAshSpecies[] = _("{B_ATK_NAME_WITH_PREFIX} became Ash-{B_BUFF1}!\p"); +static const u8 sText_ExtremelyHarshSunlight[] = _("The sunlight turned\nextremely harsh!"); +static const u8 sText_ExtremeSunlightFaded[] = _("The extreme sunlight faded.{PAUSE 64}"); +static const u8 sText_MoveEvaporatedInTheHarshSunlight[] = _("The Water-type attack evaporated\nin the harsh sunlight!"); +static const u8 sText_ExtremelyHarshSunlightWasNotLessened[] = _("The extremely harsh sunlight\nwas not lessened at all!"); +static const u8 sText_HeavyRain[] = _("A heavy rain began to fall!"); +static const u8 sText_HeavyRainLifted[] = _("The heavy rain has lifted!{PAUSE 64}"); +static const u8 sText_MoveFizzledOutInTheHeavyRain[] = _("The Fire-type attack fizzled out\nin the heavy rain!"); +static const u8 sText_NoReliefFromHeavyRain[] = _("There is no relief from\nthis heavy rain!"); +static const u8 sText_MysteriousAirCurrent[] = _("A mysterious air current is\nprotecting Flying-type Pokémon!"); +static const u8 sText_StrongWindsDissipated[] = _("The mysterious strong winds\nhave dissipated!{PAUSE 64}"); +static const u8 sText_MysteriousAirCurrentBlowsOn[] = _("The mysterious air current\nblows on regardless!"); +static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds\nweakened the attack!"); +static const u8 sText_StuffCheeksCantSelect[] = _("Stuff Cheeks cannot be\nselected without a Berry!\p"); +static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}'s Primal Reversion!\nIt reverted to its primal form!"); +static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFIX} can't\nuse the move!"); +static const u8 sText_ButHoopaCantUseIt[] = _("But Hoopa can't use it\nthe way it is now!"); +static const u8 sText_BrokeThroughProtection[] = _("It broke through the\n{B_DEF_NAME_WITH_PREFIX}'s protection!"); +static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} allows the\nuse of only {B_CURRENT_MOVE}!\p"); +static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities\nwith its target!"); +static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!"); +static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured\nof its poisoning!"); +static const u8 sText_BattlerTypeChangedTo[] = _("{B_BUFF1}'s type\nchanged to {B_BUFF2}!"); +static const u8 sText_BothCanNoLongerEscape[] = _("Neither Pokémon can run away!"); +static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape\nbecause it used {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnBecameWeakerToFire[] = _("{B_DEF_NAME_WITH_PREFIX} became\nweaker to fire!"); +static const u8 sText_PkmnAboutToBeAttackedByItsItem[] = _("{B_DEF_NAME_WITH_PREFIX} is about\nto be attacked by its {B_BUFF1}!"); +static const u8 sText_CantEscapeBecauseOfCurrentMove[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape\nbecause of {B_CURRENT_MOVE}!"); +static const u8 sText_NeutralizingGasEnters[] = _("Neutralizing Gas filled the area!"); +static const u8 sText_NeutralizingGasOver[] = _("The effects of Neutralizing\nGas wore off!"); +static const u8 sText_PkmnTookTargetHigh[] = _("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX}\ninto the air!"); +static const u8 sText_TargetTooHeavy[] = _("But the target\nwas too heavy!"); +static const u8 sText_MeteorBeamCharging[] = _("{B_ATK_NAME_WITH_PREFIX} is overflowing\nwith space energy!"); +static const u8 sText_HeatingUpBeak[] = _("{B_ATK_NAME_WITH_PREFIX} started\nheating up its beak!"); +static const u8 sText_CourtChange[] = _("{B_ATK_NAME_WITH_PREFIX} swapped the battle\neffects affecting each side!"); +static const u8 sText_AttackerExpelledThePoison[] = _("{B_ATK_NAME_WITH_PREFIX} managed to\nexpel the poison!"); +static const u8 sText_AttackerShookItselfAwake[] = _("{B_ATK_NAME_WITH_PREFIX} shook itself awake!"); +static const u8 sText_AttackerBrokeThroughParalysis[] = _("{B_ATK_NAME_WITH_PREFIX} gathered all its energy\nto overcome its paralysis!"); +static const u8 sText_AttackerHealedItsBurn[] = _("{B_ATK_NAME_WITH_PREFIX} healed its burn with\nits sheer determination!"); +static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melted the ice with\nits fiery determination!"); +static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); + + +const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { - [STRINGID_TRAINER1LOSETEXT - 12] = sText_Trainer1LoseText, - [STRINGID_PKMNGAINEDEXP - 12] = sText_PkmnGainedEXP, - [STRINGID_PKMNGREWTOLV - 12] = sText_PkmnGrewToLv, - [STRINGID_PKMNLEARNEDMOVE - 12] = sText_PkmnLearnedMove, - [STRINGID_TRYTOLEARNMOVE1 - 12] = sText_TryToLearnMove1, - [STRINGID_TRYTOLEARNMOVE2 - 12] = sText_TryToLearnMove2, - [STRINGID_TRYTOLEARNMOVE3 - 12] = sText_TryToLearnMove3, - [STRINGID_PKMNFORGOTMOVE - 12] = sText_PkmnForgotMove, - [STRINGID_STOPLEARNINGMOVE - 12] = sText_StopLearningMove, - [STRINGID_DIDNOTLEARNMOVE - 12] = sText_DidNotLearnMove, - [STRINGID_PKMNLEARNEDMOVE2 - 12] = sText_PkmnLearnedMove2, - [STRINGID_ATTACKMISSED - 12] = sText_AttackMissed, - [STRINGID_PKMNPROTECTEDITSELF - 12] = sText_PkmnProtectedItself, - [STRINGID_STATSWONTINCREASE2 - 12] = sText_StatsWontIncrease2, - [STRINGID_AVOIDEDDAMAGE - 12] = sText_AvoidedDamage, - [STRINGID_ITDOESNTAFFECT - 12] = sText_ItDoesntAffect, - [STRINGID_ATTACKERFAINTED - 12] = sText_AttackerFainted, - [STRINGID_TARGETFAINTED - 12] = sText_TargetFainted, - [STRINGID_PLAYERGOTMONEY - 12] = sText_PlayerGotMoney, - [STRINGID_PLAYERWHITEOUT - 12] = sText_PlayerWhiteout, - [STRINGID_PLAYERWHITEOUT2 - 12] = sText_PlayerWhiteout2, - [STRINGID_PREVENTSESCAPE - 12] = sText_PreventsEscape, - [STRINGID_HITXTIMES - 12] = sText_HitXTimes, - [STRINGID_PKMNFELLASLEEP - 12] = sText_PkmnFellAsleep, - [STRINGID_PKMNMADESLEEP - 12] = sText_PkmnMadeSleep, - [STRINGID_PKMNALREADYASLEEP - 12] = sText_PkmnAlreadyAsleep, - [STRINGID_PKMNALREADYASLEEP2 - 12] = sText_PkmnAlreadyAsleep2, - [STRINGID_PKMNWASNTAFFECTED - 12] = sText_PkmnWasntAffected, - [STRINGID_PKMNWASPOISONED - 12] = sText_PkmnWasPoisoned, - [STRINGID_PKMNPOISONEDBY - 12] = sText_PkmnPoisonedBy, - [STRINGID_PKMNHURTBYPOISON - 12] = sText_PkmnHurtByPoison, - [STRINGID_PKMNALREADYPOISONED - 12] = sText_PkmnAlreadyPoisoned, - [STRINGID_PKMNBADLYPOISONED - 12] = sText_PkmnBadlyPoisoned, - [STRINGID_PKMNENERGYDRAINED - 12] = sText_PkmnEnergyDrained, - [STRINGID_PKMNWASBURNED - 12] = sText_PkmnWasBurned, - [STRINGID_PKMNBURNEDBY - 12] = sText_PkmnBurnedBy, - [STRINGID_PKMNHURTBYBURN - 12] = sText_PkmnHurtByBurn, - [STRINGID_PKMNWASFROZEN - 12] = sText_PkmnWasFrozen, - [STRINGID_PKMNFROZENBY - 12] = sText_PkmnFrozenBy, - [STRINGID_PKMNISFROZEN - 12] = sText_PkmnIsFrozen, - [STRINGID_PKMNWASDEFROSTED - 12] = sText_PkmnWasDefrosted, - [STRINGID_PKMNWASDEFROSTED2 - 12] = sText_PkmnWasDefrosted2, - [STRINGID_PKMNWASDEFROSTEDBY - 12] = sText_PkmnWasDefrostedBy, - [STRINGID_PKMNWASPARALYZED - 12] = sText_PkmnWasParalyzed, - [STRINGID_PKMNWASPARALYZEDBY - 12] = sText_PkmnWasParalyzedBy, - [STRINGID_PKMNISPARALYZED - 12] = sText_PkmnIsParalyzed, - [STRINGID_PKMNISALREADYPARALYZED - 12] = sText_PkmnIsAlreadyParalyzed, - [STRINGID_PKMNHEALEDPARALYSIS - 12] = sText_PkmnHealedParalysis, - [STRINGID_PKMNDREAMEATEN - 12] = sText_PkmnDreamEaten, - [STRINGID_STATSWONTINCREASE - 12] = sText_StatsWontIncrease, - [STRINGID_STATSWONTDECREASE - 12] = sText_StatsWontDecrease, - [STRINGID_TEAMSTOPPEDWORKING - 12] = sText_TeamStoppedWorking, - [STRINGID_FOESTOPPEDWORKING - 12] = sText_FoeStoppedWorking, - [STRINGID_PKMNISCONFUSED - 12] = sText_PkmnIsConfused, - [STRINGID_PKMNHEALEDCONFUSION - 12] = sText_PkmnHealedConfusion, - [STRINGID_PKMNWASCONFUSED - 12] = sText_PkmnWasConfused, - [STRINGID_PKMNALREADYCONFUSED - 12] = sText_PkmnAlreadyConfused, - [STRINGID_PKMNFELLINLOVE - 12] = sText_PkmnFellInLove, - [STRINGID_PKMNINLOVE - 12] = sText_PkmnInLove, - [STRINGID_PKMNIMMOBILIZEDBYLOVE - 12] = sText_PkmnImmobilizedByLove, - [STRINGID_PKMNBLOWNAWAY - 12] = sText_PkmnBlownAway, - [STRINGID_PKMNCHANGEDTYPE - 12] = sText_PkmnChangedType, - [STRINGID_PKMNFLINCHED - 12] = sText_PkmnFlinched, - [STRINGID_PKMNREGAINEDHEALTH - 12] = sText_PkmnRegainedHealth, - [STRINGID_PKMNHPFULL - 12] = sText_PkmnHPFull, - [STRINGID_PKMNRAISEDSPDEF - 12] = sText_PkmnRaisedSpDef, - [STRINGID_PKMNRAISEDDEF - 12] = sText_PkmnRaisedDef, - [STRINGID_PKMNCOVEREDBYVEIL - 12] = sText_PkmnCoveredByVeil, - [STRINGID_PKMNUSEDSAFEGUARD - 12] = sText_PkmnUsedSafeguard, - [STRINGID_PKMNSAFEGUARDEXPIRED - 12] = sText_PkmnSafeguardExpired, - [STRINGID_PKMNWENTTOSLEEP - 12] = sText_PkmnWentToSleep, - [STRINGID_PKMNSLEPTHEALTHY - 12] = sText_PkmnSleptHealthy, - [STRINGID_PKMNWHIPPEDWHIRLWIND - 12] = sText_PkmnWhippedWhirlwind, - [STRINGID_PKMNTOOKSUNLIGHT - 12] = sText_PkmnTookSunlight, - [STRINGID_PKMNLOWEREDHEAD - 12] = sText_PkmnLoweredHead, - [STRINGID_PKMNISGLOWING - 12] = sText_PkmnIsGlowing, - [STRINGID_PKMNFLEWHIGH - 12] = sText_PkmnFlewHigh, - [STRINGID_PKMNDUGHOLE - 12] = sText_PkmnDugHole, - [STRINGID_PKMNSQUEEZEDBYBIND - 12] = sText_PkmnSqueezedByBind, - [STRINGID_PKMNTRAPPEDINVORTEX - 12] = sText_PkmnTrappedInVortex, - [STRINGID_PKMNWRAPPEDBY - 12] = sText_PkmnWrappedBy, - [STRINGID_PKMNCLAMPED - 12] = sText_PkmnClamped, - [STRINGID_PKMNHURTBY - 12] = sText_PkmnHurtBy, - [STRINGID_PKMNFREEDFROM - 12] = sText_PkmnFreedFrom, - [STRINGID_PKMNCRASHED - 12] = sText_PkmnCrashed, - [STRINGID_PKMNSHROUDEDINMIST - 12] = gText_PkmnShroudedInMist, - [STRINGID_PKMNPROTECTEDBYMIST - 12] = sText_PkmnProtectedByMist, - [STRINGID_PKMNGETTINGPUMPED - 12] = gText_PkmnGettingPumped, - [STRINGID_PKMNHITWITHRECOIL - 12] = sText_PkmnHitWithRecoil, - [STRINGID_PKMNPROTECTEDITSELF2 - 12] = sText_PkmnProtectedItself2, - [STRINGID_PKMNBUFFETEDBYSANDSTORM - 12] = sText_PkmnBuffetedBySandstorm, - [STRINGID_PKMNPELTEDBYHAIL - 12] = sText_PkmnPeltedByHail, - [STRINGID_PKMNSEEDED - 12] = sText_PkmnSeeded, - [STRINGID_PKMNEVADEDATTACK - 12] = sText_PkmnEvadedAttack, - [STRINGID_PKMNSAPPEDBYLEECHSEED - 12] = sText_PkmnSappedByLeechSeed, - [STRINGID_PKMNFASTASLEEP - 12] = sText_PkmnFastAsleep, - [STRINGID_PKMNWOKEUP - 12] = sText_PkmnWokeUp, - [STRINGID_PKMNUPROARKEPTAWAKE - 12] = sText_PkmnUproarKeptAwake, - [STRINGID_PKMNWOKEUPINUPROAR - 12] = sText_PkmnWokeUpInUproar, - [STRINGID_PKMNCAUSEDUPROAR - 12] = sText_PkmnCausedUproar, - [STRINGID_PKMNMAKINGUPROAR - 12] = sText_PkmnMakingUproar, - [STRINGID_PKMNCALMEDDOWN - 12] = sText_PkmnCalmedDown, - [STRINGID_PKMNCANTSLEEPINUPROAR - 12] = sText_PkmnCantSleepInUproar, - [STRINGID_PKMNSTOCKPILED - 12] = sText_PkmnStockpiled, - [STRINGID_PKMNCANTSTOCKPILE - 12] = sText_PkmnCantStockpile, - [STRINGID_PKMNCANTSLEEPINUPROAR2 - 12] = sText_PkmnCantSleepInUproar2, - [STRINGID_UPROARKEPTPKMNAWAKE - 12] = sText_UproarKeptPkmnAwake, - [STRINGID_PKMNSTAYEDAWAKEUSING - 12] = sText_PkmnStayedAwakeUsing, - [STRINGID_PKMNSTORINGENERGY - 12] = sText_PkmnStoringEnergy, - [STRINGID_PKMNUNLEASHEDENERGY - 12] = sText_PkmnUnleashedEnergy, - [STRINGID_PKMNFATIGUECONFUSION - 12] = sText_PkmnFatigueConfusion, - [STRINGID_PLAYERPICKEDUPMONEY - 12] = sText_PlayerPickedUpMoney, - [STRINGID_PKMNUNAFFECTED - 12] = sText_PkmnUnaffected, - [STRINGID_PKMNTRANSFORMEDINTO - 12] = sText_PkmnTransformedInto, - [STRINGID_PKMNMADESUBSTITUTE - 12] = sText_PkmnMadeSubstitute, - [STRINGID_PKMNHASSUBSTITUTE - 12] = sText_PkmnHasSubstitute, - [STRINGID_SUBSTITUTEDAMAGED - 12] = sText_SubstituteDamaged, - [STRINGID_PKMNSUBSTITUTEFADED - 12] = sText_PkmnSubstituteFaded, - [STRINGID_PKMNMUSTRECHARGE - 12] = sText_PkmnMustRecharge, - [STRINGID_PKMNRAGEBUILDING - 12] = sText_PkmnRageBuilding, - [STRINGID_PKMNMOVEWASDISABLED - 12] = sText_PkmnMoveWasDisabled, - [STRINGID_PKMNMOVEISDISABLED - 12] = sText_PkmnMoveIsDisabled, - [STRINGID_PKMNMOVEDISABLEDNOMORE - 12] = sText_PkmnMoveDisabledNoMore, - [STRINGID_PKMNGOTENCORE - 12] = sText_PkmnGotEncore, - [STRINGID_PKMNENCOREENDED - 12] = sText_PkmnEncoreEnded, - [STRINGID_PKMNTOOKAIM - 12] = sText_PkmnTookAim, - [STRINGID_PKMNSKETCHEDMOVE - 12] = sText_PkmnSketchedMove, - [STRINGID_PKMNTRYINGTOTAKEFOE - 12] = sText_PkmnTryingToTakeFoe, - [STRINGID_PKMNTOOKFOE - 12] = sText_PkmnTookFoe, - [STRINGID_PKMNREDUCEDPP - 12] = sText_PkmnReducedPP, - [STRINGID_PKMNSTOLEITEM - 12] = sText_PkmnStoleItem, - [STRINGID_TARGETCANTESCAPENOW - 12] = sText_TargetCantEscapeNow, - [STRINGID_PKMNFELLINTONIGHTMARE - 12] = sText_PkmnFellIntoNightmare, - [STRINGID_PKMNLOCKEDINNIGHTMARE - 12] = sText_PkmnLockedInNightmare, - [STRINGID_PKMNLAIDCURSE - 12] = sText_PkmnLaidCurse, - [STRINGID_PKMNAFFLICTEDBYCURSE - 12] = sText_PkmnAfflictedByCurse, - [STRINGID_SPIKESSCATTERED - 12] = sText_SpikesScattered, - [STRINGID_PKMNHURTBYSPIKES - 12] = sText_PkmnHurtBySpikes, - [STRINGID_PKMNIDENTIFIED - 12] = sText_PkmnIdentified, - [STRINGID_PKMNPERISHCOUNTFELL - 12] = sText_PkmnPerishCountFell, - [STRINGID_PKMNBRACEDITSELF - 12] = sText_PkmnBracedItself, - [STRINGID_PKMNENDUREDHIT - 12] = sText_PkmnEnduredHit, - [STRINGID_MAGNITUDESTRENGTH - 12] = sText_MagnitudeStrength, - [STRINGID_PKMNCUTHPMAXEDATTACK - 12] = sText_PkmnCutHPMaxedAttack, - [STRINGID_PKMNCOPIEDSTATCHANGES - 12] = sText_PkmnCopiedStatChanges, - [STRINGID_PKMNGOTFREE - 12] = sText_PkmnGotFree, - [STRINGID_PKMNSHEDLEECHSEED - 12] = sText_PkmnShedLeechSeed, - [STRINGID_PKMNBLEWAWAYSPIKES - 12] = sText_PkmnBlewAwaySpikes, - [STRINGID_PKMNFLEDFROMBATTLE - 12] = sText_PkmnFledFromBattle, - [STRINGID_PKMNFORESAWATTACK - 12] = sText_PkmnForesawAttack, - [STRINGID_PKMNTOOKATTACK - 12] = sText_PkmnTookAttack, - [STRINGID_PKMNATTACK - 12] = sText_PkmnAttack, - [STRINGID_PKMNCENTERATTENTION - 12] = sText_PkmnCenterAttention, - [STRINGID_PKMNCHARGINGPOWER - 12] = sText_PkmnChargingPower, - [STRINGID_NATUREPOWERTURNEDINTO - 12] = sText_NaturePowerTurnedInto, - [STRINGID_PKMNSTATUSNORMAL - 12] = sText_PkmnStatusNormal, - [STRINGID_PKMNHASNOMOVESLEFT - 12] = sText_PkmnHasNoMovesLeft, - [STRINGID_PKMNSUBJECTEDTOTORMENT - 12] = sText_PkmnSubjectedToTorment, - [STRINGID_PKMNCANTUSEMOVETORMENT - 12] = sText_PkmnCantUseMoveTorment, - [STRINGID_PKMNTIGHTENINGFOCUS - 12] = sText_PkmnTighteningFocus, - [STRINGID_PKMNFELLFORTAUNT - 12] = sText_PkmnFellForTaunt, - [STRINGID_PKMNCANTUSEMOVETAUNT - 12] = sText_PkmnCantUseMoveTaunt, - [STRINGID_PKMNREADYTOHELP - 12] = sText_PkmnReadyToHelp, - [STRINGID_PKMNSWITCHEDITEMS - 12] = sText_PkmnSwitchedItems, - [STRINGID_PKMNCOPIEDFOE - 12] = sText_PkmnCopiedFoe, - [STRINGID_PKMNMADEWISH - 12] = sText_PkmnMadeWish, - [STRINGID_PKMNWISHCAMETRUE - 12] = sText_PkmnWishCameTrue, - [STRINGID_PKMNPLANTEDROOTS - 12] = sText_PkmnPlantedRoots, - [STRINGID_PKMNABSORBEDNUTRIENTS - 12] = sText_PkmnAbsorbedNutrients, - [STRINGID_PKMNANCHOREDITSELF - 12] = sText_PkmnAnchoredItself, - [STRINGID_PKMNWASMADEDROWSY - 12] = sText_PkmnWasMadeDrowsy, - [STRINGID_PKMNKNOCKEDOFF - 12] = sText_PkmnKnockedOff, - [STRINGID_PKMNSWAPPEDABILITIES - 12] = sText_PkmnSwappedAbilities, - [STRINGID_PKMNSEALEDOPPONENTMOVE - 12] = sText_PkmnSealedOpponentMove, - [STRINGID_PKMNCANTUSEMOVESEALED - 12] = sText_PkmnCantUseMoveSealed, - [STRINGID_PKMNWANTSGRUDGE - 12] = sText_PkmnWantsGrudge, - [STRINGID_PKMNLOSTPPGRUDGE - 12] = sText_PkmnLostPPGrudge, - [STRINGID_PKMNSHROUDEDITSELF - 12] = sText_PkmnShroudedItself, - [STRINGID_PKMNMOVEBOUNCED - 12] = sText_PkmnMoveBounced, - [STRINGID_PKMNWAITSFORTARGET - 12] = sText_PkmnWaitsForTarget, - [STRINGID_PKMNSNATCHEDMOVE - 12] = sText_PkmnSnatchedMove, - [STRINGID_PKMNMADEITRAIN - 12] = sText_PkmnMadeItRain, - [STRINGID_PKMNRAISEDSPEED - 12] = sText_PkmnRaisedSpeed, - [STRINGID_PKMNPROTECTEDBY - 12] = sText_PkmnProtectedBy, - [STRINGID_PKMNPREVENTSUSAGE - 12] = sText_PkmnPreventsUsage, - [STRINGID_PKMNRESTOREDHPUSING - 12] = sText_PkmnRestoredHPUsing, - [STRINGID_PKMNCHANGEDTYPEWITH - 12] = sText_PkmnChangedTypeWith, - [STRINGID_PKMNPREVENTSPARALYSISWITH - 12] = sText_PkmnPreventsParalysisWith, - [STRINGID_PKMNPREVENTSROMANCEWITH - 12] = sText_PkmnPreventsRomanceWith, - [STRINGID_PKMNPREVENTSPOISONINGWITH - 12] = sText_PkmnPreventsPoisoningWith, - [STRINGID_PKMNPREVENTSCONFUSIONWITH - 12] = sText_PkmnPreventsConfusionWith, - [STRINGID_PKMNRAISEDFIREPOWERWITH - 12] = sText_PkmnRaisedFirePowerWith, - [STRINGID_PKMNANCHORSITSELFWITH - 12] = sText_PkmnAnchorsItselfWith, - [STRINGID_PKMNCUTSATTACKWITH - 12] = sText_PkmnCutsAttackWith, - [STRINGID_PKMNPREVENTSSTATLOSSWITH - 12] = sText_PkmnPreventsStatLossWith, - [STRINGID_PKMNHURTSWITH - 12] = sText_PkmnHurtsWith, - [STRINGID_PKMNTRACED - 12] = sText_PkmnTraced, - [STRINGID_STATSHARPLY - 12] = sText_StatSharply, - [STRINGID_STATROSE - 12] = gText_StatRose, - [STRINGID_STATHARSHLY - 12] = sText_StatHarshly, - [STRINGID_STATFELL - 12] = sText_StatFell, - [STRINGID_ATTACKERSSTATROSE - 12] = sText_AttackersStatRose, - [STRINGID_DEFENDERSSTATROSE - 12] = gText_DefendersStatRose, - [STRINGID_ATTACKERSSTATFELL - 12] = sText_AttackersStatFell, - [STRINGID_DEFENDERSSTATFELL - 12] = sText_DefendersStatFell, - [STRINGID_CRITICALHIT - 12] = sText_CriticalHit, - [STRINGID_ONEHITKO - 12] = sText_OneHitKO, - [STRINGID_123POOF - 12] = sText_123Poof, - [STRINGID_ANDELLIPSIS - 12] = sText_AndEllipsis, - [STRINGID_NOTVERYEFFECTIVE - 12] = sText_NotVeryEffective, - [STRINGID_SUPEREFFECTIVE - 12] = sText_SuperEffective, - [STRINGID_GOTAWAYSAFELY - 12] = sText_GotAwaySafely, - [STRINGID_WILDPKMNFLED - 12] = sText_WildPkmnFled, - [STRINGID_NORUNNINGFROMTRAINERS - 12] = sText_NoRunningFromTrainers, - [STRINGID_CANTESCAPE - 12] = sText_CantEscape, - [STRINGID_DONTLEAVEBIRCH - 12] = sText_DontLeaveBirch, - [STRINGID_BUTNOTHINGHAPPENED - 12] = sText_ButNothingHappened, - [STRINGID_BUTITFAILED - 12] = sText_ButItFailed, - [STRINGID_ITHURTCONFUSION - 12] = sText_ItHurtConfusion, - [STRINGID_MIRRORMOVEFAILED - 12] = sText_MirrorMoveFailed, - [STRINGID_STARTEDTORAIN - 12] = sText_StartedToRain, - [STRINGID_DOWNPOURSTARTED - 12] = sText_DownpourStarted, - [STRINGID_RAINCONTINUES - 12] = sText_RainContinues, - [STRINGID_DOWNPOURCONTINUES - 12] = sText_DownpourContinues, - [STRINGID_RAINSTOPPED - 12] = sText_RainStopped, - [STRINGID_SANDSTORMBREWED - 12] = sText_SandstormBrewed, - [STRINGID_SANDSTORMRAGES - 12] = sText_SandstormRages, - [STRINGID_SANDSTORMSUBSIDED - 12] = sText_SandstormSubsided, - [STRINGID_SUNLIGHTGOTBRIGHT - 12] = sText_SunlightGotBright, - [STRINGID_SUNLIGHTSTRONG - 12] = sText_SunlightStrong, - [STRINGID_SUNLIGHTFADED - 12] = sText_SunlightFaded, - [STRINGID_STARTEDHAIL - 12] = sText_StartedHail, - [STRINGID_HAILCONTINUES - 12] = sText_HailContinues, - [STRINGID_HAILSTOPPED - 12] = sText_HailStopped, - [STRINGID_FAILEDTOSPITUP - 12] = sText_FailedToSpitUp, - [STRINGID_FAILEDTOSWALLOW - 12] = sText_FailedToSwallow, - [STRINGID_WINDBECAMEHEATWAVE - 12] = sText_WindBecameHeatWave, - [STRINGID_STATCHANGESGONE - 12] = sText_StatChangesGone, - [STRINGID_COINSSCATTERED - 12] = sText_CoinsScattered, - [STRINGID_TOOWEAKFORSUBSTITUTE - 12] = sText_TooWeakForSubstitute, - [STRINGID_SHAREDPAIN - 12] = sText_SharedPain, - [STRINGID_BELLCHIMED - 12] = sText_BellChimed, - [STRINGID_FAINTINTHREE - 12] = sText_FaintInThree, - [STRINGID_NOPPLEFT - 12] = sText_NoPPLeft, - [STRINGID_BUTNOPPLEFT - 12] = sText_ButNoPPLeft, - [STRINGID_PLAYERUSEDITEM - 12] = sText_PlayerUsedItem, - [STRINGID_WALLYUSEDITEM - 12] = sText_WallyUsedItem, - [STRINGID_TRAINERBLOCKEDBALL - 12] = sText_TrainerBlockedBall, - [STRINGID_DONTBEATHIEF - 12] = sText_DontBeAThief, - [STRINGID_ITDODGEDBALL - 12] = sText_ItDodgedBall, - [STRINGID_YOUMISSEDPKMN - 12] = sText_YouMissedPkmn, - [STRINGID_PKMNBROKEFREE - 12] = sText_PkmnBrokeFree, - [STRINGID_ITAPPEAREDCAUGHT - 12] = sText_ItAppearedCaught, - [STRINGID_AARGHALMOSTHADIT - 12] = sText_AarghAlmostHadIt, - [STRINGID_SHOOTSOCLOSE - 12] = sText_ShootSoClose, - [STRINGID_GOTCHAPKMNCAUGHT - 12] = sText_GotchaPkmnCaught, - [STRINGID_GOTCHAPKMNCAUGHT2 - 12] = sText_GotchaPkmnCaught2, - [STRINGID_GIVENICKNAMECAPTURED - 12] = sText_GiveNicknameCaptured, - [STRINGID_PKMNSENTTOPC - 12] = sText_PkmnSentToPC, - [STRINGID_PKMNDATAADDEDTODEX - 12] = sText_PkmnDataAddedToDex, - [STRINGID_ITISRAINING - 12] = sText_ItIsRaining, - [STRINGID_SANDSTORMISRAGING - 12] = sText_SandstormIsRaging, - [STRINGID_CANTESCAPE2 - 12] = sText_CantEscape2, - [STRINGID_PKMNIGNORESASLEEP - 12] = sText_PkmnIgnoresAsleep, - [STRINGID_PKMNIGNOREDORDERS - 12] = sText_PkmnIgnoredOrders, - [STRINGID_PKMNBEGANTONAP - 12] = sText_PkmnBeganToNap, - [STRINGID_PKMNLOAFING - 12] = sText_PkmnLoafing, - [STRINGID_PKMNWONTOBEY - 12] = sText_PkmnWontObey, - [STRINGID_PKMNTURNEDAWAY - 12] = sText_PkmnTurnedAway, - [STRINGID_PKMNPRETENDNOTNOTICE - 12] = sText_PkmnPretendNotNotice, - [STRINGID_ENEMYABOUTTOSWITCHPKMN - 12] = sText_EnemyAboutToSwitchPkmn, - [STRINGID_CREPTCLOSER - 12] = sText_CreptCloser, - [STRINGID_CANTGETCLOSER - 12] = sText_CantGetCloser, - [STRINGID_PKMNWATCHINGCAREFULLY - 12] = sText_PkmnWatchingCarefully, - [STRINGID_PKMNCURIOUSABOUTX - 12] = sText_PkmnCuriousAboutX, - [STRINGID_PKMNENTHRALLEDBYX - 12] = sText_PkmnEnthralledByX, - [STRINGID_PKMNIGNOREDX - 12] = sText_PkmnIgnoredX, - [STRINGID_THREWPOKEBLOCKATPKMN - 12] = sText_ThrewPokeblockAtPkmn, - [STRINGID_OUTOFSAFARIBALLS - 12] = sText_OutOfSafariBalls, - [STRINGID_PKMNSITEMCUREDPARALYSIS - 12] = sText_PkmnsItemCuredParalysis, - [STRINGID_PKMNSITEMCUREDPOISON - 12] = sText_PkmnsItemCuredPoison, - [STRINGID_PKMNSITEMHEALEDBURN - 12] = sText_PkmnsItemHealedBurn, - [STRINGID_PKMNSITEMDEFROSTEDIT - 12] = sText_PkmnsItemDefrostedIt, - [STRINGID_PKMNSITEMWOKEIT - 12] = sText_PkmnsItemWokeIt, - [STRINGID_PKMNSITEMSNAPPEDOUT - 12] = sText_PkmnsItemSnappedOut, - [STRINGID_PKMNSITEMCUREDPROBLEM - 12] = sText_PkmnsItemCuredProblem, - [STRINGID_PKMNSITEMRESTOREDHEALTH - 12] = sText_PkmnsItemRestoredHealth, - [STRINGID_PKMNSITEMRESTOREDPP - 12] = sText_PkmnsItemRestoredPP, - [STRINGID_PKMNSITEMRESTOREDSTATUS - 12] = sText_PkmnsItemRestoredStatus, - [STRINGID_PKMNSITEMRESTOREDHPALITTLE - 12] = sText_PkmnsItemRestoredHPALittle, - [STRINGID_ITEMALLOWSONLYYMOVE - 12] = sText_ItemAllowsOnlyYMove, - [STRINGID_PKMNHUNGONWITHX - 12] = sText_PkmnHungOnWithX, - [STRINGID_EMPTYSTRING3 - 12] = gText_EmptyString3, - [STRINGID_PKMNSXPREVENTSBURNS - 12] = sText_PkmnsXPreventsBurns, - [STRINGID_PKMNSXBLOCKSY - 12] = sText_PkmnsXBlocksY, - [STRINGID_PKMNSXRESTOREDHPALITTLE2 - 12] = sText_PkmnsXRestoredHPALittle2, - [STRINGID_PKMNSXWHIPPEDUPSANDSTORM - 12] = sText_PkmnsXWhippedUpSandstorm, - [STRINGID_PKMNSXPREVENTSYLOSS - 12] = sText_PkmnsXPreventsYLoss, - [STRINGID_PKMNSXINFATUATEDY - 12] = sText_PkmnsXInfatuatedY, - [STRINGID_PKMNSXMADEYINEFFECTIVE - 12] = sText_PkmnsXMadeYIneffective, - [STRINGID_PKMNSXCUREDYPROBLEM - 12] = sText_PkmnsXCuredYProblem, - [STRINGID_ITSUCKEDLIQUIDOOZE - 12] = sText_ItSuckedLiquidOoze, - [STRINGID_PKMNTRANSFORMED - 12] = sText_PkmnTransformed, - [STRINGID_ELECTRICITYWEAKENED - 12] = sText_ElectricityWeakened, - [STRINGID_FIREWEAKENED - 12] = sText_FireWeakened, - [STRINGID_PKMNHIDUNDERWATER - 12] = sText_PkmnHidUnderwater, - [STRINGID_PKMNSPRANGUP - 12] = sText_PkmnSprangUp, - [STRINGID_HMMOVESCANTBEFORGOTTEN - 12] = sText_HMMovesCantBeForgotten, - [STRINGID_XFOUNDONEY - 12] = sText_XFoundOneY, - [STRINGID_PLAYERDEFEATEDTRAINER1 - 12] = sText_PlayerDefeatedLinkTrainerTrainer1, - [STRINGID_SOOTHINGAROMA - 12] = sText_SoothingAroma, - [STRINGID_ITEMSCANTBEUSEDNOW - 12] = sText_ItemsCantBeUsedNow, - [STRINGID_FORXCOMMAYZ - 12] = sText_ForXCommaYZ, - [STRINGID_USINGITEMSTATOFPKMNROSE - 12] = sText_UsingItemTheStatOfPkmnRose, - [STRINGID_PKMNUSEDXTOGETPUMPED - 12] = sText_PkmnUsedXToGetPumped, - [STRINGID_PKMNSXMADEYUSELESS - 12] = sText_PkmnsXMadeYUseless, - [STRINGID_PKMNTRAPPEDBYSANDTOMB - 12] = sText_PkmnTrappedBySandTomb, - [STRINGID_EMPTYSTRING4 - 12] = sText_EmptyString4, - [STRINGID_ABOOSTED - 12] = sText_ABoosted, - [STRINGID_PKMNSXINTENSIFIEDSUN - 12] = sText_PkmnsXIntensifiedSun, - [STRINGID_PKMNMAKESGROUNDMISS - 12] = sText_PkmnMakesGroundMiss, - [STRINGID_YOUTHROWABALLNOWRIGHT - 12] = sText_YouThrowABallNowRight, - [STRINGID_PKMNSXTOOKATTACK - 12] = sText_PkmnsXTookAttack, - [STRINGID_PKMNCHOSEXASDESTINY - 12] = sText_PkmnChoseXAsDestiny, - [STRINGID_PKMNLOSTFOCUS - 12] = sText_PkmnLostFocus, - [STRINGID_USENEXTPKMN - 12] = sText_UseNextPkmn, - [STRINGID_PKMNFLEDUSINGITS - 12] = sText_PkmnFledUsingIts, - [STRINGID_PKMNFLEDUSING - 12] = sText_PkmnFledUsing, - [STRINGID_PKMNWASDRAGGEDOUT - 12] = sText_PkmnWasDraggedOut, - [STRINGID_PREVENTEDFROMWORKING - 12] = sText_PreventedFromWorking, - [STRINGID_PKMNSITEMNORMALIZEDSTATUS - 12] = sText_PkmnsItemNormalizedStatus, - [STRINGID_TRAINER1USEDITEM - 12] = sText_Trainer1UsedItem, - [STRINGID_BOXISFULL - 12] = sText_BoxIsFull, - [STRINGID_PKMNAVOIDEDATTACK - 12] = sText_PkmnAvoidedAttack, - [STRINGID_PKMNSXMADEITINEFFECTIVE - 12] = sText_PkmnsXMadeItIneffective, - [STRINGID_PKMNSXPREVENTSFLINCHING - 12] = sText_PkmnsXPreventsFlinching, - [STRINGID_PKMNALREADYHASBURN - 12] = sText_PkmnAlreadyHasBurn, - [STRINGID_STATSWONTDECREASE2 - 12] = sText_StatsWontDecrease2, - [STRINGID_PKMNSXBLOCKSY2 - 12] = sText_PkmnsXBlocksY2, - [STRINGID_PKMNSXWOREOFF - 12] = sText_PkmnsXWoreOff, - [STRINGID_PKMNRAISEDDEFALITTLE - 12] = sText_PkmnRaisedDefALittle, - [STRINGID_PKMNRAISEDSPDEFALITTLE - 12] = sText_PkmnRaisedSpDefALittle, - [STRINGID_THEWALLSHATTERED - 12] = sText_TheWallShattered, - [STRINGID_PKMNSXPREVENTSYSZ - 12] = sText_PkmnsXPreventsYsZ, - [STRINGID_PKMNSXCUREDITSYPROBLEM - 12] = sText_PkmnsXCuredItsYProblem, - [STRINGID_ATTACKERCANTESCAPE - 12] = sText_AttackerCantEscape, - [STRINGID_PKMNOBTAINEDX - 12] = sText_PkmnObtainedX, - [STRINGID_PKMNOBTAINEDX2 - 12] = sText_PkmnObtainedX2, - [STRINGID_PKMNOBTAINEDXYOBTAINEDZ - 12] = sText_PkmnObtainedXYObtainedZ, - [STRINGID_BUTNOEFFECT - 12] = sText_ButNoEffect, - [STRINGID_PKMNSXHADNOEFFECTONY - 12] = sText_PkmnsXHadNoEffectOnY, - [STRINGID_TWOENEMIESDEFEATED - 12] = sText_TwoInGameTrainersDefeated, - [STRINGID_TRAINER2LOSETEXT - 12] = sText_Trainer2LoseText, - [STRINGID_PKMNINCAPABLEOFPOWER - 12] = sText_PkmnIncapableOfPower, - [STRINGID_GLINTAPPEARSINEYE - 12] = sText_GlintAppearsInEye, - [STRINGID_PKMNGETTINGINTOPOSITION - 12] = sText_PkmnGettingIntoPosition, - [STRINGID_PKMNBEGANGROWLINGDEEPLY - 12] = sText_PkmnBeganGrowlingDeeply, - [STRINGID_PKMNEAGERFORMORE - 12] = sText_PkmnEagerForMore, - [STRINGID_DEFEATEDOPPONENTBYREFEREE - 12] = sText_DefeatedOpponentByReferee, - [STRINGID_LOSTTOOPPONENTBYREFEREE - 12] = sText_LostToOpponentByReferee, - [STRINGID_TIEDOPPONENTBYREFEREE - 12] = sText_TiedOpponentByReferee, - [STRINGID_QUESTIONFORFEITMATCH - 12] = sText_QuestionForfeitMatch, - [STRINGID_FORFEITEDMATCH - 12] = sText_ForfeitedMatch, - [STRINGID_PKMNTRANSFERREDSOMEONESPC - 12] = gText_PkmnTransferredSomeonesPC, - [STRINGID_PKMNTRANSFERREDLANETTESPC - 12] = gText_PkmnTransferredLanettesPC, - [STRINGID_PKMNBOXSOMEONESPCFULL - 12] = gText_PkmnTransferredSomeonesPCBoxFull, - [STRINGID_PKMNBOXLANETTESPCFULL - 12] = gText_PkmnTransferredLanettesPCBoxFull, - [STRINGID_TRAINER1WINTEXT - 12] = sText_Trainer1WinText, - [STRINGID_TRAINER2WINTEXT - 12] = sText_Trainer2WinText, + [STRINGID_TARGETTOUGHEDITOUT - BATTLESTRINGS_TABLE_START] = sText_TargetToughedItOut, + [STRINGID_ATTACKERMELTEDTHEICE - BATTLESTRINGS_TABLE_START] = sText_AttackerMeltedTheIce, + [STRINGID_ATTACKERHEALEDITSBURN - BATTLESTRINGS_TABLE_START] = sText_AttackerHealedItsBurn, + [STRINGID_ATTACKERBROKETHROUGHPARALYSIS - BATTLESTRINGS_TABLE_START] = sText_AttackerBrokeThroughParalysis, + [STRINGID_ATTACKERSHOOKITSELFAWAKE - BATTLESTRINGS_TABLE_START] = sText_AttackerShookItselfAwake, + [STRINGID_ATTACKEREXPELLEDTHEPOISON - BATTLESTRINGS_TABLE_START] = sText_AttackerExpelledThePoison, + [STRINGID_ZPOWERSURROUNDS - BATTLESTRINGS_TABLE_START] = sText_ZPowerSurrounds, + [STRINGID_ZMOVEUNLEASHED - BATTLESTRINGS_TABLE_START] = sText_ZPowerUnleashed, + [STRINGID_ZMOVERESETSSTATS - BATTLESTRINGS_TABLE_START] = sText_ZMoveResetsStats, + [STRINGID_ZMOVEALLSTATSUP - BATTLESTRINGS_TABLE_START] = sText_ZMoveAllStatsUp, + [STRINGID_ZMOVEZBOOSTCRIT - BATTLESTRINGS_TABLE_START] = sText_ZMoveBoostCrit, + [STRINGID_ZMOVERESTOREHP - BATTLESTRINGS_TABLE_START] = sText_ZMoveRestoreHp, + [STRINGID_ZMOVESTATUP - BATTLESTRINGS_TABLE_START] = sText_ZMoveStatUp, + [STRINGID_ZMOVEHPTRAP - BATTLESTRINGS_TABLE_START] = sText_ZMoveHpSwitchInTrap, + [STRINGID_PLAYERLOSTTOENEMYTRAINER - BATTLESTRINGS_TABLE_START] = sText_PlayerLostToEnemyTrainer, + [STRINGID_PLAYERPAIDPRIZEMONEY - BATTLESTRINGS_TABLE_START] = sText_PlayerPaidPrizeMoney, + [STRINGID_COURTCHANGE - BATTLESTRINGS_TABLE_START] = sText_CourtChange, + [STRINGID_HEATUPBEAK - BATTLESTRINGS_TABLE_START] = sText_HeatingUpBeak, + [STRINGID_METEORBEAMCHARGING - BATTLESTRINGS_TABLE_START] = sText_MeteorBeamCharging, + [STRINGID_PKMNINSNAPTRAP - BATTLESTRINGS_TABLE_START] = sText_PkmnInSnapTrap, + [STRINGID_NEUTRALIZINGGASOVER - BATTLESTRINGS_TABLE_START] = sText_NeutralizingGasOver, + [STRINGID_NEUTRALIZINGGASENTERS - BATTLESTRINGS_TABLE_START] = sText_NeutralizingGasEnters, + [STRINGID_BATTLERTYPECHANGEDTO - BATTLESTRINGS_TABLE_START] = sText_BattlerTypeChangedTo, + [STRINGID_PASTELVEILENTERS - BATTLESTRINGS_TABLE_START] = sText_PastelVeilEnters, + [STRINGID_PASTELVEILPROTECTED - BATTLESTRINGS_TABLE_START] = sText_PastelVeilProtected, + [STRINGID_SWAPPEDABILITIES - BATTLESTRINGS_TABLE_START] = sText_SwappedAbilities, + [STRINGID_ABILITYALLOWSONLYMOVE - BATTLESTRINGS_TABLE_START] = sText_AbilityAllowsOnlyMove, + [STRINGID_BROKETHROUGHPROTECTION - BATTLESTRINGS_TABLE_START] = sText_BrokeThroughProtection, + [STRINGID_BUTPOKEMONCANTUSETHEMOVE - BATTLESTRINGS_TABLE_START] = sText_ButPokemonCantUseTheMove, + [STRINGID_BUTHOOPACANTUSEIT - BATTLESTRINGS_TABLE_START] = sText_ButHoopaCantUseIt, + [STRINGID_PKMNREVERTEDTOPRIMAL - BATTLESTRINGS_TABLE_START] = sText_PkmnRevertedToPrimal, + [STRINGID_STUFFCHEEKSCANTSELECT - BATTLESTRINGS_TABLE_START] = sText_StuffCheeksCantSelect, + [STRINGID_ATTACKWEAKENEDBSTRONGWINDS - BATTLESTRINGS_TABLE_START] = sText_AttackWeakenedByStrongWinds, + [STRINGID_MYSTERIOUSAIRCURRENTBLOWSON - BATTLESTRINGS_TABLE_START] = sText_MysteriousAirCurrentBlowsOn, + [STRINGID_STRONGWINDSDISSIPATED - BATTLESTRINGS_TABLE_START] = sText_StrongWindsDissipated, + [STRINGID_MYSTERIOUSAIRCURRENT - BATTLESTRINGS_TABLE_START] = sText_MysteriousAirCurrent, + [STRINGID_NORELIEFROMHEAVYRAIN - BATTLESTRINGS_TABLE_START] = sText_NoReliefFromHeavyRain, + [STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN - BATTLESTRINGS_TABLE_START] = sText_MoveFizzledOutInTheHeavyRain, + [STRINGID_HEAVYRAINLIFTED - BATTLESTRINGS_TABLE_START] = sText_HeavyRainLifted, + [STRINGID_HEAVYRAIN - BATTLESTRINGS_TABLE_START] = sText_HeavyRain, + [STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED - BATTLESTRINGS_TABLE_START] = sText_ExtremelyHarshSunlightWasNotLessened, + [STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT - BATTLESTRINGS_TABLE_START] = sText_MoveEvaporatedInTheHarshSunlight, + [STRINGID_EXTREMESUNLIGHTFADED - BATTLESTRINGS_TABLE_START] = sText_ExtremeSunlightFaded, + [STRINGID_EXTREMELYHARSHSUNLIGHT - BATTLESTRINGS_TABLE_START] = sText_ExtremelyHarshSunlight, + [STRINGID_ATTACKERBECAMEASHSPECIES - BATTLESTRINGS_TABLE_START] = sText_AttackerBecameAshSpecies, + [STRINGID_ATTACKERBECAMEFULLYCHARGED - BATTLESTRINGS_TABLE_START] = sText_AttackerBecameFullyCharged, + [STRINGID_HEALBLOCKEDNOMORE - BATTLESTRINGS_TABLE_START] = sText_HealBlockedNoMore, + [STRINGID_TORMENTEDNOMORE - BATTLESTRINGS_TABLE_START] = sText_TormentedNoMore, + [STRINGID_ATKGOTOVERINFATUATION - BATTLESTRINGS_TABLE_START] = sText_AttackerGotOverInfatuation, + [STRINGID_EJECTBUTTONACTIVATE - BATTLESTRINGS_TABLE_START] = sText_EjectButtonActivate, + [STRINGID_REDCARDACTIVATE - BATTLESTRINGS_TABLE_START] = sText_RedCardActivate, + [STRINGID_PKMNBURNHEALED - BATTLESTRINGS_TABLE_START] = sText_PkmnBurnHealed, + [STRINGID_STICKYBARBTRANSFER - BATTLESTRINGS_TABLE_START] = sText_StickyBarbTransfer, + [STRINGID_ITEMCANNOTBEREMOVED - BATTLESTRINGS_TABLE_START] = sText_ItemCannotBeRemoved, + [STRINGID_PKMNGOTOVERITSINFATUATION - BATTLESTRINGS_TABLE_START] = sText_PkmnGotOverItsInfatuation, + [STRINGID_PKMNSHOOKOFFTHETAUNT - BATTLESTRINGS_TABLE_START] = sText_PkmnShookOffTheTaunt, + [STRINGID_MICLEBERRYACTIVATES - BATTLESTRINGS_TABLE_START] = sText_MicleBerryActivates, + [STRINGID_CANACTFASTERTHANKSTO - BATTLESTRINGS_TABLE_START] = sText_CanActFaster, + [STRINGID_CURIOUSMEDICINEENTERS - BATTLESTRINGS_TABLE_START] = sText_CuriousMedicineEnters, + [STRINGID_ASONEENTERS - BATTLESTRINGS_TABLE_START] = sText_AsOneEnters, + [STRINGID_ABILITYRAISEDSTATDRASTICALLY - BATTLESTRINGS_TABLE_START] = sText_AbilityRaisedStatDrastically, + [STRINGID_PKMNSWILLPERISHIN3TURNS - BATTLESTRINGS_TABLE_START] = sText_PkmnsWillPerishIn3Turns, + [STRINGID_ASANDSTORMKICKEDUP - BATTLESTRINGS_TABLE_START] = sText_ASandstormKickedUp, + [STRINGID_BATTLERABILITYRAISEDSTAT - BATTLESTRINGS_TABLE_START] = sText_BattlerAbilityRaisedStat, + [STRINGID_FETCHEDPOKEBALL - BATTLESTRINGS_TABLE_START] = sText_FetchedPokeBall, + [STRINGID_STATWASNOTLOWERED - BATTLESTRINGS_TABLE_START] = sText_StatWasNotLowered, + [STRINGID_CLOAKEDINAFREEZINGLIGHT - BATTLESTRINGS_TABLE_START] = sText_CloakedInAFreezingLight, + [STRINGID_DESTINYKNOTACTIVATES - BATTLESTRINGS_TABLE_START] = sText_DestinyKnotActivates, + [STRINGID_NOONEWILLBEABLETORUNAWAY - BATTLESTRINGS_TABLE_START] = sText_NoOneWillBeAbleToRun, + [STRINGID_PKNMABSORBINGPOWER - BATTLESTRINGS_TABLE_START] = sText_PkmnAbsorbingPower, + [STRINGID_RECEIVERABILITYTAKEOVER - BATTLESTRINGS_TABLE_START] = sText_ReceiverAbilityTakeOver, + [STRINGID_SCRIPTINGABILITYSTATRAISE - BATTLESTRINGS_TABLE_START] = sText_ScriptingAbilityRaisedStat, + [STRINGID_HEALERCURE - BATTLESTRINGS_TABLE_START] = sText_HealerCure, + [STRINGID_ATTACKERLOSTFIRETYPE - BATTLESTRINGS_TABLE_START] = sText_AttackerLostFireType, + [STRINGID_ATTACKERCUREDTARGETSTATUS - BATTLESTRINGS_TABLE_START] = sText_AttackerCuredTargetStatus, + [STRINGID_ILLUSIONWOREOFF - BATTLESTRINGS_TABLE_START] = sText_IllusionWoreOff, + [STRINGID_BUGBITE - BATTLESTRINGS_TABLE_START] = sText_BugBite, + [STRINGID_INCINERATEBURN - BATTLESTRINGS_TABLE_START] = sText_IncinerateBurn, + [STRINGID_AIRBALLOONPOP - BATTLESTRINGS_TABLE_START] = sText_AirBalloonPop, + [STRINGID_AIRBALLOONFLOAT - BATTLESTRINGS_TABLE_START] = sText_AirBalloonFloat, + [STRINGID_TARGETATEITEM - BATTLESTRINGS_TABLE_START] = sText_TargetAteItem, + [STRINGID_BERRYDMGREDUCES - BATTLESTRINGS_TABLE_START] = sText_BerryDmgReducing, + [STRINGID_GEMACTIVATES - BATTLESTRINGS_TABLE_START] = sText_GemActivates, + [STRINGID_LASERFOCUS - BATTLESTRINGS_TABLE_START] = sText_LaserFocusMessage, + [STRINGID_THROATCHOPENDS - BATTLESTRINGS_TABLE_START] = sText_ThroatChopEnds, + [STRINGID_PKMNCANTUSEMOVETHROATCHOP - BATTLESTRINGS_TABLE_START] = sText_PkmnCantUseMoveThroatChop, + [STRINGID_USEDINSTRUCTEDMOVE - BATTLESTRINGS_TABLE_START] = sText_UsedInstructedMove, + [STRINGID_CELEBRATEMESSAGE - BATTLESTRINGS_TABLE_START] = sText_CelebrateMessage, + [STRINGID_AROMAVEILPROTECTED - BATTLESTRINGS_TABLE_START] = sText_AromaVeilProtected, + [STRINGID_SWEETVEILPROTECTED - BATTLESTRINGS_TABLE_START] = sText_SweetVeilProtected, + [STRINGID_FLOWERVEILPROTECTED - BATTLESTRINGS_TABLE_START] = sText_FlowerVeilProtected, + [STRINGID_SAFETYGOGGLESPROTECTED - BATTLESTRINGS_TABLE_START] = sText_SafetyGogglesProtected, + [STRINGID_SPECTRALTHIEFSTEAL - BATTLESTRINGS_TABLE_START] = sText_SpectralThiefSteal, + [STRINGID_BELCHCANTSELECT - BATTLESTRINGS_TABLE_START] = sText_BelchCantUse, + [STRINGID_TRAINER1LOSETEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer1LoseText, + [STRINGID_PKMNGAINEDEXP - BATTLESTRINGS_TABLE_START] = sText_PkmnGainedEXP, + [STRINGID_PKMNGREWTOLV - BATTLESTRINGS_TABLE_START] = sText_PkmnGrewToLv, + [STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnLearnedMove, + [STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_TABLE_START] = sText_TryToLearnMove1, + [STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_TABLE_START] = sText_TryToLearnMove2, + [STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_TABLE_START] = sText_TryToLearnMove3, + [STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnForgotMove, + [STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_TABLE_START] = sText_StopLearningMove, + [STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_TABLE_START] = sText_DidNotLearnMove, + [STRINGID_PKMNLEARNEDMOVE2 - BATTLESTRINGS_TABLE_START] = sText_PkmnLearnedMove2, + [STRINGID_ATTACKMISSED - BATTLESTRINGS_TABLE_START] = sText_AttackMissed, + [STRINGID_PKMNPROTECTEDITSELF - BATTLESTRINGS_TABLE_START] = sText_PkmnProtectedItself, + [STRINGID_STATSWONTINCREASE2 - BATTLESTRINGS_TABLE_START] = sText_StatsWontIncrease2, + [STRINGID_AVOIDEDDAMAGE - BATTLESTRINGS_TABLE_START] = sText_AvoidedDamage, + [STRINGID_ITDOESNTAFFECT - BATTLESTRINGS_TABLE_START] = sText_ItDoesntAffect, + [STRINGID_ATTACKERFAINTED - BATTLESTRINGS_TABLE_START] = sText_AttackerFainted, + [STRINGID_TARGETFAINTED - BATTLESTRINGS_TABLE_START] = sText_TargetFainted, + [STRINGID_PLAYERGOTMONEY - BATTLESTRINGS_TABLE_START] = sText_PlayerGotMoney, + [STRINGID_PLAYERWHITEOUT - BATTLESTRINGS_TABLE_START] = sText_PlayerWhiteout, + [STRINGID_PLAYERWHITEOUT2 - BATTLESTRINGS_TABLE_START] = sText_PlayerWhiteout2, + [STRINGID_PREVENTSESCAPE - BATTLESTRINGS_TABLE_START] = sText_PreventsEscape, + [STRINGID_HITXTIMES - BATTLESTRINGS_TABLE_START] = sText_HitXTimes, + [STRINGID_PKMNFELLASLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnFellAsleep, + [STRINGID_PKMNMADESLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnMadeSleep, + [STRINGID_PKMNALREADYASLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnAlreadyAsleep, + [STRINGID_PKMNALREADYASLEEP2 - BATTLESTRINGS_TABLE_START] = sText_PkmnAlreadyAsleep2, + [STRINGID_PKMNWASNTAFFECTED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasntAffected, + [STRINGID_PKMNWASPOISONED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasPoisoned, + [STRINGID_PKMNPOISONEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnPoisonedBy, + [STRINGID_PKMNHURTBYPOISON - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtByPoison, + [STRINGID_PKMNALREADYPOISONED - BATTLESTRINGS_TABLE_START] = sText_PkmnAlreadyPoisoned, + [STRINGID_PKMNBADLYPOISONED - BATTLESTRINGS_TABLE_START] = sText_PkmnBadlyPoisoned, + [STRINGID_PKMNENERGYDRAINED - BATTLESTRINGS_TABLE_START] = sText_PkmnEnergyDrained, + [STRINGID_PKMNWASBURNED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasBurned, + [STRINGID_PKMNBURNEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnBurnedBy, + [STRINGID_PKMNHURTBYBURN - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtByBurn, + [STRINGID_PKMNWASFROZEN - BATTLESTRINGS_TABLE_START] = sText_PkmnWasFrozen, + [STRINGID_PKMNFROZENBY - BATTLESTRINGS_TABLE_START] = sText_PkmnFrozenBy, + [STRINGID_PKMNISFROZEN - BATTLESTRINGS_TABLE_START] = sText_PkmnIsFrozen, + [STRINGID_PKMNWASDEFROSTED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasDefrosted, + [STRINGID_PKMNWASDEFROSTED2 - BATTLESTRINGS_TABLE_START] = sText_PkmnWasDefrosted2, + [STRINGID_PKMNWASDEFROSTEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnWasDefrostedBy, + [STRINGID_PKMNWASPARALYZED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasParalyzed, + [STRINGID_PKMNWASPARALYZEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnWasParalyzedBy, + [STRINGID_PKMNISPARALYZED - BATTLESTRINGS_TABLE_START] = sText_PkmnIsParalyzed, + [STRINGID_PKMNISALREADYPARALYZED - BATTLESTRINGS_TABLE_START] = sText_PkmnIsAlreadyParalyzed, + [STRINGID_PKMNHEALEDPARALYSIS - BATTLESTRINGS_TABLE_START] = sText_PkmnHealedParalysis, + [STRINGID_PKMNDREAMEATEN - BATTLESTRINGS_TABLE_START] = sText_PkmnDreamEaten, + [STRINGID_STATSWONTINCREASE - BATTLESTRINGS_TABLE_START] = sText_StatsWontIncrease, + [STRINGID_STATSWONTDECREASE - BATTLESTRINGS_TABLE_START] = sText_StatsWontDecrease, + [STRINGID_TEAMSTOPPEDWORKING - BATTLESTRINGS_TABLE_START] = sText_TeamStoppedWorking, + [STRINGID_FOESTOPPEDWORKING - BATTLESTRINGS_TABLE_START] = sText_FoeStoppedWorking, + [STRINGID_PKMNISCONFUSED - BATTLESTRINGS_TABLE_START] = sText_PkmnIsConfused, + [STRINGID_PKMNHEALEDCONFUSION - BATTLESTRINGS_TABLE_START] = sText_PkmnHealedConfusion, + [STRINGID_PKMNWASCONFUSED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasConfused, + [STRINGID_PKMNALREADYCONFUSED - BATTLESTRINGS_TABLE_START] = sText_PkmnAlreadyConfused, + [STRINGID_PKMNFELLINLOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnFellInLove, + [STRINGID_PKMNINLOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnInLove, + [STRINGID_PKMNIMMOBILIZEDBYLOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnImmobilizedByLove, + [STRINGID_PKMNBLOWNAWAY - BATTLESTRINGS_TABLE_START] = sText_PkmnBlownAway, + [STRINGID_PKMNCHANGEDTYPE - BATTLESTRINGS_TABLE_START] = sText_PkmnChangedType, + [STRINGID_PKMNFLINCHED - BATTLESTRINGS_TABLE_START] = sText_PkmnFlinched, + [STRINGID_PKMNREGAINEDHEALTH - BATTLESTRINGS_TABLE_START] = sText_PkmnRegainedHealth, + [STRINGID_PKMNHPFULL - BATTLESTRINGS_TABLE_START] = sText_PkmnHPFull, + [STRINGID_PKMNRAISEDSPDEF - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedSpDef, + [STRINGID_PKMNRAISEDDEF - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedDef, + [STRINGID_PKMNCOVEREDBYVEIL - BATTLESTRINGS_TABLE_START] = sText_PkmnCoveredByVeil, + [STRINGID_PKMNUSEDSAFEGUARD - BATTLESTRINGS_TABLE_START] = sText_PkmnUsedSafeguard, + [STRINGID_PKMNSAFEGUARDEXPIRED - BATTLESTRINGS_TABLE_START] = sText_PkmnSafeguardExpired, + [STRINGID_PKMNWENTTOSLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnWentToSleep, + [STRINGID_PKMNSLEPTHEALTHY - BATTLESTRINGS_TABLE_START] = sText_PkmnSleptHealthy, + [STRINGID_PKMNWHIPPEDWHIRLWIND - BATTLESTRINGS_TABLE_START] = sText_PkmnWhippedWhirlwind, + [STRINGID_PKMNTOOKSUNLIGHT - BATTLESTRINGS_TABLE_START] = sText_PkmnTookSunlight, + [STRINGID_PKMNLOWEREDHEAD - BATTLESTRINGS_TABLE_START] = sText_PkmnLoweredHead, + [STRINGID_PKMNISGLOWING - BATTLESTRINGS_TABLE_START] = sText_PkmnIsGlowing, + [STRINGID_PKMNFLEWHIGH - BATTLESTRINGS_TABLE_START] = sText_PkmnFlewHigh, + [STRINGID_PKMNDUGHOLE - BATTLESTRINGS_TABLE_START] = sText_PkmnDugHole, + [STRINGID_PKMNSQUEEZEDBYBIND - BATTLESTRINGS_TABLE_START] = sText_PkmnSqueezedByBind, + [STRINGID_PKMNTRAPPEDINVORTEX - BATTLESTRINGS_TABLE_START] = sText_PkmnTrappedInVortex, + [STRINGID_PKMNWRAPPEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnWrappedBy, + [STRINGID_PKMNCLAMPED - BATTLESTRINGS_TABLE_START] = sText_PkmnClamped, + [STRINGID_PKMNHURTBY - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtBy, + [STRINGID_PKMNFREEDFROM - BATTLESTRINGS_TABLE_START] = sText_PkmnFreedFrom, + [STRINGID_PKMNCRASHED - BATTLESTRINGS_TABLE_START] = sText_PkmnCrashed, + [STRINGID_PKMNSHROUDEDINMIST - BATTLESTRINGS_TABLE_START] = gText_PkmnShroudedInMist, + [STRINGID_PKMNPROTECTEDBYMIST - BATTLESTRINGS_TABLE_START] = sText_PkmnProtectedByMist, + [STRINGID_PKMNGETTINGPUMPED - BATTLESTRINGS_TABLE_START] = gText_PkmnGettingPumped, + [STRINGID_PKMNHITWITHRECOIL - BATTLESTRINGS_TABLE_START] = sText_PkmnHitWithRecoil, + [STRINGID_PKMNPROTECTEDITSELF2 - BATTLESTRINGS_TABLE_START] = sText_PkmnProtectedItself2, + [STRINGID_PKMNBUFFETEDBYSANDSTORM - BATTLESTRINGS_TABLE_START] = sText_PkmnBuffetedBySandstorm, + [STRINGID_PKMNPELTEDBYHAIL - BATTLESTRINGS_TABLE_START] = sText_PkmnPeltedByHail, + [STRINGID_PKMNSEEDED - BATTLESTRINGS_TABLE_START] = sText_PkmnSeeded, + [STRINGID_PKMNEVADEDATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnEvadedAttack, + [STRINGID_PKMNSAPPEDBYLEECHSEED - BATTLESTRINGS_TABLE_START] = sText_PkmnSappedByLeechSeed, + [STRINGID_PKMNFASTASLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnFastAsleep, + [STRINGID_PKMNWOKEUP - BATTLESTRINGS_TABLE_START] = sText_PkmnWokeUp, + [STRINGID_PKMNUPROARKEPTAWAKE - BATTLESTRINGS_TABLE_START] = sText_PkmnUproarKeptAwake, + [STRINGID_PKMNWOKEUPINUPROAR - BATTLESTRINGS_TABLE_START] = sText_PkmnWokeUpInUproar, + [STRINGID_PKMNCAUSEDUPROAR - BATTLESTRINGS_TABLE_START] = sText_PkmnCausedUproar, + [STRINGID_PKMNMAKINGUPROAR - BATTLESTRINGS_TABLE_START] = sText_PkmnMakingUproar, + [STRINGID_PKMNCALMEDDOWN - BATTLESTRINGS_TABLE_START] = sText_PkmnCalmedDown, + [STRINGID_PKMNCANTSLEEPINUPROAR - BATTLESTRINGS_TABLE_START] = sText_PkmnCantSleepInUproar, + [STRINGID_PKMNSTOCKPILED - BATTLESTRINGS_TABLE_START] = sText_PkmnStockpiled, + [STRINGID_PKMNCANTSTOCKPILE - BATTLESTRINGS_TABLE_START] = sText_PkmnCantStockpile, + [STRINGID_PKMNCANTSLEEPINUPROAR2 - BATTLESTRINGS_TABLE_START] = sText_PkmnCantSleepInUproar2, + [STRINGID_UPROARKEPTPKMNAWAKE - BATTLESTRINGS_TABLE_START] = sText_UproarKeptPkmnAwake, + [STRINGID_PKMNSTAYEDAWAKEUSING - BATTLESTRINGS_TABLE_START] = sText_PkmnStayedAwakeUsing, + [STRINGID_PKMNSTORINGENERGY - BATTLESTRINGS_TABLE_START] = sText_PkmnStoringEnergy, + [STRINGID_PKMNUNLEASHEDENERGY - BATTLESTRINGS_TABLE_START] = sText_PkmnUnleashedEnergy, + [STRINGID_PKMNFATIGUECONFUSION - BATTLESTRINGS_TABLE_START] = sText_PkmnFatigueConfusion, + [STRINGID_PLAYERPICKEDUPMONEY - BATTLESTRINGS_TABLE_START] = sText_PlayerPickedUpMoney, + [STRINGID_PKMNUNAFFECTED - BATTLESTRINGS_TABLE_START] = sText_PkmnUnaffected, + [STRINGID_PKMNTRANSFORMEDINTO - BATTLESTRINGS_TABLE_START] = sText_PkmnTransformedInto, + [STRINGID_PKMNMADESUBSTITUTE - BATTLESTRINGS_TABLE_START] = sText_PkmnMadeSubstitute, + [STRINGID_PKMNHASSUBSTITUTE - BATTLESTRINGS_TABLE_START] = sText_PkmnHasSubstitute, + [STRINGID_SUBSTITUTEDAMAGED - BATTLESTRINGS_TABLE_START] = sText_SubstituteDamaged, + [STRINGID_PKMNSUBSTITUTEFADED - BATTLESTRINGS_TABLE_START] = sText_PkmnSubstituteFaded, + [STRINGID_PKMNMUSTRECHARGE - BATTLESTRINGS_TABLE_START] = sText_PkmnMustRecharge, + [STRINGID_PKMNRAGEBUILDING - BATTLESTRINGS_TABLE_START] = sText_PkmnRageBuilding, + [STRINGID_PKMNMOVEWASDISABLED - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveWasDisabled, + [STRINGID_PKMNMOVEISDISABLED - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveIsDisabled, + [STRINGID_PKMNMOVEDISABLEDNOMORE - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveDisabledNoMore, + [STRINGID_PKMNGOTENCORE - BATTLESTRINGS_TABLE_START] = sText_PkmnGotEncore, + [STRINGID_PKMNENCOREENDED - BATTLESTRINGS_TABLE_START] = sText_PkmnEncoreEnded, + [STRINGID_PKMNTOOKAIM - BATTLESTRINGS_TABLE_START] = sText_PkmnTookAim, + [STRINGID_PKMNSKETCHEDMOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnSketchedMove, + [STRINGID_PKMNTRYINGTOTAKEFOE - BATTLESTRINGS_TABLE_START] = sText_PkmnTryingToTakeFoe, + [STRINGID_PKMNTOOKFOE - BATTLESTRINGS_TABLE_START] = sText_PkmnTookFoe, + [STRINGID_PKMNREDUCEDPP - BATTLESTRINGS_TABLE_START] = sText_PkmnReducedPP, + [STRINGID_PKMNSTOLEITEM - BATTLESTRINGS_TABLE_START] = sText_PkmnStoleItem, + [STRINGID_TARGETCANTESCAPENOW - BATTLESTRINGS_TABLE_START] = sText_TargetCantEscapeNow, + [STRINGID_PKMNFELLINTONIGHTMARE - BATTLESTRINGS_TABLE_START] = sText_PkmnFellIntoNightmare, + [STRINGID_PKMNLOCKEDINNIGHTMARE - BATTLESTRINGS_TABLE_START] = sText_PkmnLockedInNightmare, + [STRINGID_PKMNLAIDCURSE - BATTLESTRINGS_TABLE_START] = sText_PkmnLaidCurse, + [STRINGID_PKMNAFFLICTEDBYCURSE - BATTLESTRINGS_TABLE_START] = sText_PkmnAfflictedByCurse, + [STRINGID_SPIKESSCATTERED - BATTLESTRINGS_TABLE_START] = sText_SpikesScattered, + [STRINGID_PKMNHURTBYSPIKES - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtBySpikes, + [STRINGID_PKMNIDENTIFIED - BATTLESTRINGS_TABLE_START] = sText_PkmnIdentified, + [STRINGID_PKMNPERISHCOUNTFELL - BATTLESTRINGS_TABLE_START] = sText_PkmnPerishCountFell, + [STRINGID_PKMNBRACEDITSELF - BATTLESTRINGS_TABLE_START] = sText_PkmnBracedItself, + [STRINGID_PKMNENDUREDHIT - BATTLESTRINGS_TABLE_START] = sText_PkmnEnduredHit, + [STRINGID_MAGNITUDESTRENGTH - BATTLESTRINGS_TABLE_START] = sText_MagnitudeStrength, + [STRINGID_PKMNCUTHPMAXEDATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnCutHPMaxedAttack, + [STRINGID_PKMNCOPIEDSTATCHANGES - BATTLESTRINGS_TABLE_START] = sText_PkmnCopiedStatChanges, + [STRINGID_PKMNGOTFREE - BATTLESTRINGS_TABLE_START] = sText_PkmnGotFree, + [STRINGID_PKMNSHEDLEECHSEED - BATTLESTRINGS_TABLE_START] = sText_PkmnShedLeechSeed, + [STRINGID_PKMNBLEWAWAYSPIKES - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwaySpikes, + [STRINGID_PKMNFLEDFROMBATTLE - BATTLESTRINGS_TABLE_START] = sText_PkmnFledFromBattle, + [STRINGID_PKMNFORESAWATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnForesawAttack, + [STRINGID_PKMNTOOKATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnTookAttack, + [STRINGID_PKMNATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnAttack, + [STRINGID_PKMNCENTERATTENTION - BATTLESTRINGS_TABLE_START] = sText_PkmnCenterAttention, + [STRINGID_PKMNCHARGINGPOWER - BATTLESTRINGS_TABLE_START] = sText_PkmnChargingPower, + [STRINGID_NATUREPOWERTURNEDINTO - BATTLESTRINGS_TABLE_START] = sText_NaturePowerTurnedInto, + [STRINGID_PKMNSTATUSNORMAL - BATTLESTRINGS_TABLE_START] = sText_PkmnStatusNormal, + [STRINGID_PKMNHASNOMOVESLEFT - BATTLESTRINGS_TABLE_START] = sText_PkmnHasNoMovesLeft, + [STRINGID_PKMNSUBJECTEDTOTORMENT - BATTLESTRINGS_TABLE_START] = sText_PkmnSubjectedToTorment, + [STRINGID_PKMNCANTUSEMOVETORMENT - BATTLESTRINGS_TABLE_START] = sText_PkmnCantUseMoveTorment, + [STRINGID_PKMNTIGHTENINGFOCUS - BATTLESTRINGS_TABLE_START] = sText_PkmnTighteningFocus, + [STRINGID_PKMNFELLFORTAUNT - BATTLESTRINGS_TABLE_START] = sText_PkmnFellForTaunt, + [STRINGID_PKMNCANTUSEMOVETAUNT - BATTLESTRINGS_TABLE_START] = sText_PkmnCantUseMoveTaunt, + [STRINGID_PKMNREADYTOHELP - BATTLESTRINGS_TABLE_START] = sText_PkmnReadyToHelp, + [STRINGID_PKMNSWITCHEDITEMS - BATTLESTRINGS_TABLE_START] = sText_PkmnSwitchedItems, + [STRINGID_PKMNCOPIEDFOE - BATTLESTRINGS_TABLE_START] = sText_PkmnCopiedFoe, + [STRINGID_PKMNMADEWISH - BATTLESTRINGS_TABLE_START] = sText_PkmnMadeWish, + [STRINGID_PKMNWISHCAMETRUE - BATTLESTRINGS_TABLE_START] = sText_PkmnWishCameTrue, + [STRINGID_PKMNPLANTEDROOTS - BATTLESTRINGS_TABLE_START] = sText_PkmnPlantedRoots, + [STRINGID_PKMNABSORBEDNUTRIENTS - BATTLESTRINGS_TABLE_START] = sText_PkmnAbsorbedNutrients, + [STRINGID_PKMNANCHOREDITSELF - BATTLESTRINGS_TABLE_START] = sText_PkmnAnchoredItself, + [STRINGID_PKMNWASMADEDROWSY - BATTLESTRINGS_TABLE_START] = sText_PkmnWasMadeDrowsy, + [STRINGID_PKMNKNOCKEDOFF - BATTLESTRINGS_TABLE_START] = sText_PkmnKnockedOff, + [STRINGID_PKMNSWAPPEDABILITIES - BATTLESTRINGS_TABLE_START] = sText_PkmnSwappedAbilities, + [STRINGID_PKMNSEALEDOPPONENTMOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnSealedOpponentMove, + [STRINGID_PKMNCANTUSEMOVESEALED - BATTLESTRINGS_TABLE_START] = sText_PkmnCantUseMoveSealed, + [STRINGID_PKMNWANTSGRUDGE - BATTLESTRINGS_TABLE_START] = sText_PkmnWantsGrudge, + [STRINGID_PKMNLOSTPPGRUDGE - BATTLESTRINGS_TABLE_START] = sText_PkmnLostPPGrudge, + [STRINGID_PKMNSHROUDEDITSELF - BATTLESTRINGS_TABLE_START] = sText_PkmnShroudedItself, + [STRINGID_PKMNMOVEBOUNCED - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveBounced, + [STRINGID_PKMNWAITSFORTARGET - BATTLESTRINGS_TABLE_START] = sText_PkmnWaitsForTarget, + [STRINGID_PKMNSNATCHEDMOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnSnatchedMove, + [STRINGID_PKMNMADEITRAIN - BATTLESTRINGS_TABLE_START] = sText_PkmnMadeItRain, + [STRINGID_PKMNRAISEDSPEED - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedSpeed, + [STRINGID_PKMNPROTECTEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnProtectedBy, + [STRINGID_PKMNPREVENTSUSAGE - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsUsage, + [STRINGID_PKMNRESTOREDHPUSING - BATTLESTRINGS_TABLE_START] = sText_PkmnRestoredHPUsing, + [STRINGID_PKMNCHANGEDTYPEWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnChangedTypeWith, + [STRINGID_PKMNPREVENTSPARALYSISWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsParalysisWith, + [STRINGID_PKMNPREVENTSROMANCEWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsRomanceWith, + [STRINGID_PKMNPREVENTSPOISONINGWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsPoisoningWith, + [STRINGID_PKMNPREVENTSCONFUSIONWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsConfusionWith, + [STRINGID_PKMNRAISEDFIREPOWERWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedFirePowerWith, + [STRINGID_PKMNANCHORSITSELFWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnAnchorsItselfWith, + [STRINGID_PKMNCUTSATTACKWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnCutsAttackWith, + [STRINGID_PKMNPREVENTSSTATLOSSWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsStatLossWith, + [STRINGID_PKMNHURTSWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtsWith, + [STRINGID_PKMNTRACED - BATTLESTRINGS_TABLE_START] = sText_PkmnTraced, + [STRINGID_STATSHARPLY - BATTLESTRINGS_TABLE_START] = gText_StatSharply, + [STRINGID_STATROSE - BATTLESTRINGS_TABLE_START] = gText_StatRose, + [STRINGID_STATHARSHLY - BATTLESTRINGS_TABLE_START] = sText_StatHarshly, + [STRINGID_STATFELL - BATTLESTRINGS_TABLE_START] = sText_StatFell, + [STRINGID_ATTACKERSSTATROSE - BATTLESTRINGS_TABLE_START] = sText_AttackersStatRose, + [STRINGID_DEFENDERSSTATROSE - BATTLESTRINGS_TABLE_START] = gText_DefendersStatRose, + [STRINGID_ATTACKERSSTATFELL - BATTLESTRINGS_TABLE_START] = sText_AttackersStatFell, + [STRINGID_DEFENDERSSTATFELL - BATTLESTRINGS_TABLE_START] = sText_DefendersStatFell, + [STRINGID_CRITICALHIT - BATTLESTRINGS_TABLE_START] = sText_CriticalHit, + [STRINGID_ONEHITKO - BATTLESTRINGS_TABLE_START] = sText_OneHitKO, + [STRINGID_123POOF - BATTLESTRINGS_TABLE_START] = sText_123Poof, + [STRINGID_ANDELLIPSIS - BATTLESTRINGS_TABLE_START] = sText_AndEllipsis, + [STRINGID_NOTVERYEFFECTIVE - BATTLESTRINGS_TABLE_START] = sText_NotVeryEffective, + [STRINGID_SUPEREFFECTIVE - BATTLESTRINGS_TABLE_START] = sText_SuperEffective, + [STRINGID_GOTAWAYSAFELY - BATTLESTRINGS_TABLE_START] = sText_GotAwaySafely, + [STRINGID_WILDPKMNFLED - BATTLESTRINGS_TABLE_START] = sText_WildPkmnFled, + [STRINGID_NORUNNINGFROMTRAINERS - BATTLESTRINGS_TABLE_START] = sText_NoRunningFromTrainers, + [STRINGID_CANTESCAPE - BATTLESTRINGS_TABLE_START] = sText_CantEscape, + [STRINGID_DONTLEAVEBIRCH - BATTLESTRINGS_TABLE_START] = sText_DontLeaveBirch, + [STRINGID_BUTNOTHINGHAPPENED - BATTLESTRINGS_TABLE_START] = sText_ButNothingHappened, + [STRINGID_BUTITFAILED - BATTLESTRINGS_TABLE_START] = sText_ButItFailed, + [STRINGID_ITHURTCONFUSION - BATTLESTRINGS_TABLE_START] = sText_ItHurtConfusion, + [STRINGID_MIRRORMOVEFAILED - BATTLESTRINGS_TABLE_START] = sText_MirrorMoveFailed, + [STRINGID_STARTEDTORAIN - BATTLESTRINGS_TABLE_START] = sText_StartedToRain, + [STRINGID_DOWNPOURSTARTED - BATTLESTRINGS_TABLE_START] = sText_DownpourStarted, + [STRINGID_RAINCONTINUES - BATTLESTRINGS_TABLE_START] = sText_RainContinues, + [STRINGID_DOWNPOURCONTINUES - BATTLESTRINGS_TABLE_START] = sText_DownpourContinues, + [STRINGID_RAINSTOPPED - BATTLESTRINGS_TABLE_START] = sText_RainStopped, + [STRINGID_SANDSTORMBREWED - BATTLESTRINGS_TABLE_START] = sText_SandstormBrewed, + [STRINGID_SANDSTORMRAGES - BATTLESTRINGS_TABLE_START] = sText_SandstormRages, + [STRINGID_SANDSTORMSUBSIDED - BATTLESTRINGS_TABLE_START] = sText_SandstormSubsided, + [STRINGID_SUNLIGHTGOTBRIGHT - BATTLESTRINGS_TABLE_START] = sText_SunlightGotBright, + [STRINGID_SUNLIGHTSTRONG - BATTLESTRINGS_TABLE_START] = sText_SunlightStrong, + [STRINGID_SUNLIGHTFADED - BATTLESTRINGS_TABLE_START] = sText_SunlightFaded, + [STRINGID_STARTEDHAIL - BATTLESTRINGS_TABLE_START] = sText_StartedHail, + [STRINGID_HAILCONTINUES - BATTLESTRINGS_TABLE_START] = sText_HailContinues, + [STRINGID_HAILSTOPPED - BATTLESTRINGS_TABLE_START] = sText_HailStopped, + [STRINGID_FAILEDTOSPITUP - BATTLESTRINGS_TABLE_START] = sText_FailedToSpitUp, + [STRINGID_FAILEDTOSWALLOW - BATTLESTRINGS_TABLE_START] = sText_FailedToSwallow, + [STRINGID_WINDBECAMEHEATWAVE - BATTLESTRINGS_TABLE_START] = sText_WindBecameHeatWave, + [STRINGID_STATCHANGESGONE - BATTLESTRINGS_TABLE_START] = sText_StatChangesGone, + [STRINGID_COINSSCATTERED - BATTLESTRINGS_TABLE_START] = sText_CoinsScattered, + [STRINGID_TOOWEAKFORSUBSTITUTE - BATTLESTRINGS_TABLE_START] = sText_TooWeakForSubstitute, + [STRINGID_SHAREDPAIN - BATTLESTRINGS_TABLE_START] = sText_SharedPain, + [STRINGID_BELLCHIMED - BATTLESTRINGS_TABLE_START] = sText_BellChimed, + [STRINGID_FAINTINTHREE - BATTLESTRINGS_TABLE_START] = sText_FaintInThree, + [STRINGID_NOPPLEFT - BATTLESTRINGS_TABLE_START] = sText_NoPPLeft, + [STRINGID_BUTNOPPLEFT - BATTLESTRINGS_TABLE_START] = sText_ButNoPPLeft, + [STRINGID_PLAYERUSEDITEM - BATTLESTRINGS_TABLE_START] = sText_PlayerUsedItem, + [STRINGID_WALLYUSEDITEM - BATTLESTRINGS_TABLE_START] = sText_WallyUsedItem, + [STRINGID_TRAINERBLOCKEDBALL - BATTLESTRINGS_TABLE_START] = sText_TrainerBlockedBall, + [STRINGID_DONTBEATHIEF - BATTLESTRINGS_TABLE_START] = sText_DontBeAThief, + [STRINGID_ITDODGEDBALL - BATTLESTRINGS_TABLE_START] = sText_ItDodgedBall, + [STRINGID_YOUMISSEDPKMN - BATTLESTRINGS_TABLE_START] = sText_YouMissedPkmn, + [STRINGID_PKMNBROKEFREE - BATTLESTRINGS_TABLE_START] = sText_PkmnBrokeFree, + [STRINGID_ITAPPEAREDCAUGHT - BATTLESTRINGS_TABLE_START] = sText_ItAppearedCaught, + [STRINGID_AARGHALMOSTHADIT - BATTLESTRINGS_TABLE_START] = sText_AarghAlmostHadIt, + [STRINGID_SHOOTSOCLOSE - BATTLESTRINGS_TABLE_START] = sText_ShootSoClose, + [STRINGID_GOTCHAPKMNCAUGHT - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaught, + [STRINGID_GOTCHAPKMNCAUGHT2 - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaught2, + [STRINGID_GIVENICKNAMECAPTURED - BATTLESTRINGS_TABLE_START] = sText_GiveNicknameCaptured, + [STRINGID_PKMNSENTTOPC - BATTLESTRINGS_TABLE_START] = sText_PkmnSentToPC, + [STRINGID_PKMNDATAADDEDTODEX - BATTLESTRINGS_TABLE_START] = sText_PkmnDataAddedToDex, + [STRINGID_ITISRAINING - BATTLESTRINGS_TABLE_START] = sText_ItIsRaining, + [STRINGID_SANDSTORMISRAGING - BATTLESTRINGS_TABLE_START] = sText_SandstormIsRaging, + [STRINGID_CANTESCAPE2 - BATTLESTRINGS_TABLE_START] = sText_CantEscape2, + [STRINGID_PKMNIGNORESASLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnIgnoresAsleep, + [STRINGID_PKMNIGNOREDORDERS - BATTLESTRINGS_TABLE_START] = sText_PkmnIgnoredOrders, + [STRINGID_PKMNBEGANTONAP - BATTLESTRINGS_TABLE_START] = sText_PkmnBeganToNap, + [STRINGID_PKMNLOAFING - BATTLESTRINGS_TABLE_START] = sText_PkmnLoafing, + [STRINGID_PKMNWONTOBEY - BATTLESTRINGS_TABLE_START] = sText_PkmnWontObey, + [STRINGID_PKMNTURNEDAWAY - BATTLESTRINGS_TABLE_START] = sText_PkmnTurnedAway, + [STRINGID_PKMNPRETENDNOTNOTICE - BATTLESTRINGS_TABLE_START] = sText_PkmnPretendNotNotice, + [STRINGID_ENEMYABOUTTOSWITCHPKMN - BATTLESTRINGS_TABLE_START] = sText_EnemyAboutToSwitchPkmn, + [STRINGID_CREPTCLOSER - BATTLESTRINGS_TABLE_START] = sText_CreptCloser, + [STRINGID_CANTGETCLOSER - BATTLESTRINGS_TABLE_START] = sText_CantGetCloser, + [STRINGID_PKMNWATCHINGCAREFULLY - BATTLESTRINGS_TABLE_START] = sText_PkmnWatchingCarefully, + [STRINGID_PKMNCURIOUSABOUTX - BATTLESTRINGS_TABLE_START] = sText_PkmnCuriousAboutX, + [STRINGID_PKMNENTHRALLEDBYX - BATTLESTRINGS_TABLE_START] = sText_PkmnEnthralledByX, + [STRINGID_PKMNIGNOREDX - BATTLESTRINGS_TABLE_START] = sText_PkmnIgnoredX, + [STRINGID_THREWPOKEBLOCKATPKMN - BATTLESTRINGS_TABLE_START] = sText_ThrewPokeblockAtPkmn, + [STRINGID_OUTOFSAFARIBALLS - BATTLESTRINGS_TABLE_START] = sText_OutOfSafariBalls, + [STRINGID_PKMNSITEMCUREDPARALYSIS - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemCuredParalysis, + [STRINGID_PKMNSITEMCUREDPOISON - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemCuredPoison, + [STRINGID_PKMNSITEMHEALEDBURN - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemHealedBurn, + [STRINGID_PKMNSITEMDEFROSTEDIT - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemDefrostedIt, + [STRINGID_PKMNSITEMWOKEIT - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemWokeIt, + [STRINGID_PKMNSITEMSNAPPEDOUT - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemSnappedOut, + [STRINGID_PKMNSITEMCUREDPROBLEM - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemCuredProblem, + [STRINGID_PKMNSITEMRESTOREDHEALTH - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemRestoredHealth, + [STRINGID_PKMNSITEMRESTOREDPP - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemRestoredPP, + [STRINGID_PKMNSITEMRESTOREDSTATUS - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemRestoredStatus, + [STRINGID_PKMNSITEMRESTOREDHPALITTLE - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemRestoredHPALittle, + [STRINGID_ITEMALLOWSONLYYMOVE - BATTLESTRINGS_TABLE_START] = sText_ItemAllowsOnlyYMove, + [STRINGID_PKMNHUNGONWITHX - BATTLESTRINGS_TABLE_START] = sText_PkmnHungOnWithX, + [STRINGID_EMPTYSTRING3 - BATTLESTRINGS_TABLE_START] = gText_EmptyString3, + [STRINGID_PKMNSXPREVENTSBURNS - BATTLESTRINGS_TABLE_START] = sText_PkmnsXPreventsBurns, + [STRINGID_PKMNSXBLOCKSY - BATTLESTRINGS_TABLE_START] = sText_PkmnsXBlocksY, + [STRINGID_PKMNSXRESTOREDHPALITTLE2 - BATTLESTRINGS_TABLE_START] = sText_PkmnsXRestoredHPALittle2, + [STRINGID_PKMNSXWHIPPEDUPSANDSTORM - BATTLESTRINGS_TABLE_START] = sText_PkmnsXWhippedUpSandstorm, + [STRINGID_PKMNSXPREVENTSYLOSS - BATTLESTRINGS_TABLE_START] = sText_PkmnsXPreventsYLoss, + [STRINGID_PKMNSXINFATUATEDY - BATTLESTRINGS_TABLE_START] = sText_PkmnsXInfatuatedY, + [STRINGID_PKMNSXMADEYINEFFECTIVE - BATTLESTRINGS_TABLE_START] = sText_PkmnsXMadeYIneffective, + [STRINGID_PKMNSXCUREDYPROBLEM - BATTLESTRINGS_TABLE_START] = sText_PkmnsXCuredYProblem, + [STRINGID_ITSUCKEDLIQUIDOOZE - BATTLESTRINGS_TABLE_START] = sText_ItSuckedLiquidOoze, + [STRINGID_PKMNTRANSFORMED - BATTLESTRINGS_TABLE_START] = sText_PkmnTransformed, + [STRINGID_ELECTRICITYWEAKENED - BATTLESTRINGS_TABLE_START] = sText_ElectricityWeakened, + [STRINGID_FIREWEAKENED - BATTLESTRINGS_TABLE_START] = sText_FireWeakened, + [STRINGID_PKMNHIDUNDERWATER - BATTLESTRINGS_TABLE_START] = sText_PkmnHidUnderwater, + [STRINGID_PKMNSPRANGUP - BATTLESTRINGS_TABLE_START] = sText_PkmnSprangUp, + [STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_TABLE_START] = sText_HMMovesCantBeForgotten, + [STRINGID_XFOUNDONEY - BATTLESTRINGS_TABLE_START] = sText_XFoundOneY, + [STRINGID_PLAYERDEFEATEDTRAINER1 - BATTLESTRINGS_TABLE_START] = sText_PlayerDefeatedLinkTrainerTrainer1, + [STRINGID_SOOTHINGAROMA - BATTLESTRINGS_TABLE_START] = sText_SoothingAroma, + [STRINGID_ITEMSCANTBEUSEDNOW - BATTLESTRINGS_TABLE_START] = sText_ItemsCantBeUsedNow, + [STRINGID_FORXCOMMAYZ - BATTLESTRINGS_TABLE_START] = sText_ForXCommaYZ, + [STRINGID_USINGITEMSTATOFPKMNROSE - BATTLESTRINGS_TABLE_START] = sText_UsingItemTheStatOfPkmnRose, + [STRINGID_PKMNUSEDXTOGETPUMPED - BATTLESTRINGS_TABLE_START] = sText_PkmnUsedXToGetPumped, + [STRINGID_PKMNSXMADEYUSELESS - BATTLESTRINGS_TABLE_START] = sText_PkmnsXMadeYUseless, + [STRINGID_PKMNTRAPPEDBYSANDTOMB - BATTLESTRINGS_TABLE_START] = sText_PkmnTrappedBySandTomb, + [STRINGID_EMPTYSTRING4 - BATTLESTRINGS_TABLE_START] = sText_EmptyString4, + [STRINGID_ABOOSTED - BATTLESTRINGS_TABLE_START] = sText_ABoosted, + [STRINGID_PKMNSXINTENSIFIEDSUN - BATTLESTRINGS_TABLE_START] = sText_PkmnsXIntensifiedSun, + [STRINGID_PKMNMAKESGROUNDMISS - BATTLESTRINGS_TABLE_START] = sText_PkmnMakesGroundMiss, + [STRINGID_YOUTHROWABALLNOWRIGHT - BATTLESTRINGS_TABLE_START] = sText_YouThrowABallNowRight, + [STRINGID_PKMNSXTOOKATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnsXTookAttack, + [STRINGID_PKMNCHOSEXASDESTINY - BATTLESTRINGS_TABLE_START] = sText_PkmnChoseXAsDestiny, + [STRINGID_PKMNLOSTFOCUS - BATTLESTRINGS_TABLE_START] = sText_PkmnLostFocus, + [STRINGID_USENEXTPKMN - BATTLESTRINGS_TABLE_START] = sText_UseNextPkmn, + [STRINGID_PKMNFLEDUSINGITS - BATTLESTRINGS_TABLE_START] = sText_PkmnFledUsingIts, + [STRINGID_PKMNFLEDUSING - BATTLESTRINGS_TABLE_START] = sText_PkmnFledUsing, + [STRINGID_PKMNWASDRAGGEDOUT - BATTLESTRINGS_TABLE_START] = sText_PkmnWasDraggedOut, + [STRINGID_PREVENTEDFROMWORKING - BATTLESTRINGS_TABLE_START] = sText_PreventedFromWorking, + [STRINGID_PKMNSITEMNORMALIZEDSTATUS - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemNormalizedStatus, + [STRINGID_TRAINER1USEDITEM - BATTLESTRINGS_TABLE_START] = sText_Trainer1UsedItem, + [STRINGID_BOXISFULL - BATTLESTRINGS_TABLE_START] = sText_BoxIsFull, + [STRINGID_PKMNAVOIDEDATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnAvoidedAttack, + [STRINGID_PKMNSXMADEITINEFFECTIVE - BATTLESTRINGS_TABLE_START] = sText_PkmnsXMadeItIneffective, + [STRINGID_PKMNSXPREVENTSFLINCHING - BATTLESTRINGS_TABLE_START] = sText_PkmnsXPreventsFlinching, + [STRINGID_PKMNALREADYHASBURN - BATTLESTRINGS_TABLE_START] = sText_PkmnAlreadyHasBurn, + [STRINGID_STATSWONTDECREASE2 - BATTLESTRINGS_TABLE_START] = sText_StatsWontDecrease2, + [STRINGID_PKMNSXBLOCKSY2 - BATTLESTRINGS_TABLE_START] = sText_PkmnsXBlocksY2, + [STRINGID_PKMNSXWOREOFF - BATTLESTRINGS_TABLE_START] = sText_PkmnsXWoreOff, + [STRINGID_PKMNRAISEDDEFALITTLE - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedDefALittle, + [STRINGID_PKMNRAISEDSPDEFALITTLE - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedSpDefALittle, + [STRINGID_THEWALLSHATTERED - BATTLESTRINGS_TABLE_START] = sText_TheWallShattered, + [STRINGID_PKMNSXPREVENTSYSZ - BATTLESTRINGS_TABLE_START] = sText_PkmnsXPreventsYsZ, + [STRINGID_PKMNSXCUREDITSYPROBLEM - BATTLESTRINGS_TABLE_START] = sText_PkmnsXCuredItsYProblem, + [STRINGID_ATTACKERCANTESCAPE - BATTLESTRINGS_TABLE_START] = sText_AttackerCantEscape, + [STRINGID_PKMNOBTAINEDX - BATTLESTRINGS_TABLE_START] = sText_PkmnObtainedX, + [STRINGID_PKMNOBTAINEDX2 - BATTLESTRINGS_TABLE_START] = sText_PkmnObtainedX2, + [STRINGID_PKMNOBTAINEDXYOBTAINEDZ - BATTLESTRINGS_TABLE_START] = sText_PkmnObtainedXYObtainedZ, + [STRINGID_BUTNOEFFECT - BATTLESTRINGS_TABLE_START] = sText_ButNoEffect, + [STRINGID_PKMNSXHADNOEFFECTONY - BATTLESTRINGS_TABLE_START] = sText_PkmnsXHadNoEffectOnY, + [STRINGID_TWOENEMIESDEFEATED - BATTLESTRINGS_TABLE_START] = sText_TwoInGameTrainersDefeated, + [STRINGID_TRAINER2LOSETEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer2LoseText, + [STRINGID_PKMNINCAPABLEOFPOWER - BATTLESTRINGS_TABLE_START] = sText_PkmnIncapableOfPower, + [STRINGID_GLINTAPPEARSINEYE - BATTLESTRINGS_TABLE_START] = sText_GlintAppearsInEye, + [STRINGID_PKMNGETTINGINTOPOSITION - BATTLESTRINGS_TABLE_START] = sText_PkmnGettingIntoPosition, + [STRINGID_PKMNBEGANGROWLINGDEEPLY - BATTLESTRINGS_TABLE_START] = sText_PkmnBeganGrowlingDeeply, + [STRINGID_PKMNEAGERFORMORE - BATTLESTRINGS_TABLE_START] = sText_PkmnEagerForMore, + [STRINGID_DEFEATEDOPPONENTBYREFEREE - BATTLESTRINGS_TABLE_START] = sText_DefeatedOpponentByReferee, + [STRINGID_LOSTTOOPPONENTBYREFEREE - BATTLESTRINGS_TABLE_START] = sText_LostToOpponentByReferee, + [STRINGID_TIEDOPPONENTBYREFEREE - BATTLESTRINGS_TABLE_START] = sText_TiedOpponentByReferee, + [STRINGID_QUESTIONFORFEITMATCH - BATTLESTRINGS_TABLE_START] = sText_QuestionForfeitMatch, + [STRINGID_FORFEITEDMATCH - BATTLESTRINGS_TABLE_START] = sText_ForfeitedMatch, + [STRINGID_PKMNTRANSFERREDSOMEONESPC - BATTLESTRINGS_TABLE_START] = gText_PkmnTransferredSomeonesPC, + [STRINGID_PKMNTRANSFERREDLANETTESPC - BATTLESTRINGS_TABLE_START] = gText_PkmnTransferredLanettesPC, + [STRINGID_PKMNBOXSOMEONESPCFULL - BATTLESTRINGS_TABLE_START] = gText_PkmnTransferredSomeonesPCBoxFull, + [STRINGID_PKMNBOXLANETTESPCFULL - BATTLESTRINGS_TABLE_START] = gText_PkmnTransferredLanettesPCBoxFull, + [STRINGID_TRAINER1WINTEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer1WinText, + [STRINGID_TRAINER2WINTEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer2WinText, + [STRINGID_ENDUREDSTURDY - BATTLESTRINGS_TABLE_START] = sText_EnduredViaSturdy, + [STRINGID_POWERHERB - BATTLESTRINGS_TABLE_START] = sText_PowerHerbActivation, + [STRINGID_HURTBYITEM - BATTLESTRINGS_TABLE_START] = sText_HurtByItem, + [STRINGID_PSNBYITEM - BATTLESTRINGS_TABLE_START] = sText_BadlyPoisonedByItem, + [STRINGID_BRNBYITEM - BATTLESTRINGS_TABLE_START] = sText_BurnedByItem, + [STRINGID_DEFABILITYIN - BATTLESTRINGS_TABLE_START] = sText_TargetAbilityActivates, + [STRINGID_GRAVITYINTENSIFIED - BATTLESTRINGS_TABLE_START] = sText_GravityIntensified, + [STRINGID_TARGETIDENTIFIED - BATTLESTRINGS_TABLE_START] = sText_TargetIdentified, + [STRINGID_TARGETWOKEUP - BATTLESTRINGS_TABLE_START] = sText_TargetWokeUp, + [STRINGID_PKMNSTOLEANDATEITEM - BATTLESTRINGS_TABLE_START] = sText_PkmnStoleAndAteItem, + [STRINGID_TAILWINDBLEW - BATTLESTRINGS_TABLE_START] = sText_TailWindBlew, + [STRINGID_PKMNWENTBACK - BATTLESTRINGS_TABLE_START] = sText_PkmnWentBack, + [STRINGID_PKMNCANTUSEITEMSANYMORE - BATTLESTRINGS_TABLE_START] = sText_PkmnCantUseItemsAnymore, + [STRINGID_PKMNFLUNG - BATTLESTRINGS_TABLE_START] = sText_PkmnFlung, + [STRINGID_PKMNPREVENTEDFROMHEALING - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventedFromHealing, + [STRINGID_PKMNSWITCHEDATKANDDEF - BATTLESTRINGS_TABLE_START] = sText_PkmnSwitchedAtkAndDef, + [STRINGID_PKMNSABILITYSUPPRESSED - BATTLESTRINGS_TABLE_START] = sText_PkmnsAbilitySuppressed, + [STRINGID_SHIELDEDFROMCRITICALHITS - BATTLESTRINGS_TABLE_START] = sText_ShieldedFromCriticalHits, + [STRINGID_SWITCHEDATKANDSPATK - BATTLESTRINGS_TABLE_START] = sText_SwitchedAtkAndSpAtk, + [STRINGID_SWITCHEDDEFANDSPDEF - BATTLESTRINGS_TABLE_START] = sText_SwitchedDefAndSpDef, + [STRINGID_PKMNACQUIREDABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnAcquiredAbility, + [STRINGID_POISONSPIKESSCATTERED - BATTLESTRINGS_TABLE_START] = sText_PoisonSpikesScattered, + [STRINGID_PKMNSWITCHEDSTATCHANGES - BATTLESTRINGS_TABLE_START] = sText_PkmnSwitchedStatChanges, + [STRINGID_PKMNSURROUNDEDWITHVEILOFWATER - BATTLESTRINGS_TABLE_START] = sText_PkmnSurroundedWithVeilOfWater, + [STRINGID_PKMNLEVITATEDONELECTROMAGNETISM - BATTLESTRINGS_TABLE_START] = sText_PkmnLevitatedOnElectromagnetism, + [STRINGID_PKMNTWISTEDDIMENSIONS - BATTLESTRINGS_TABLE_START] = sText_PkmnTwistedDimensions, + [STRINGID_POINTEDSTONESFLOAT - BATTLESTRINGS_TABLE_START] = sText_PointedStonesFloat, + [STRINGID_CLOAKEDINMYSTICALMOONLIGHT - BATTLESTRINGS_TABLE_START] = sText_CloakedInMysticalMoonlight, + [STRINGID_TRAPPEDBYSWIRLINGMAGMA - BATTLESTRINGS_TABLE_START] = sText_TrappedBySwirlingMagma, + [STRINGID_VANISHEDINSTANTLY - BATTLESTRINGS_TABLE_START] = sText_VanishedInstantly, + [STRINGID_PROTECTEDTEAM - BATTLESTRINGS_TABLE_START] = sText_ProtectedTeam, + [STRINGID_SHAREDITSGUARD - BATTLESTRINGS_TABLE_START] = sText_SharedItsGuard, + [STRINGID_SHAREDITSPOWER - BATTLESTRINGS_TABLE_START] = sText_SharedItsPower, + [STRINGID_SWAPSDEFANDSPDEFOFALLPOKEMON - BATTLESTRINGS_TABLE_START] = sText_SwapsDefAndSpDefOfAllPkmn, + [STRINGID_BECAMENIMBLE - BATTLESTRINGS_TABLE_START] = sText_BecameNimble, + [STRINGID_HURLEDINTOTHEAIR - BATTLESTRINGS_TABLE_START] = sText_HurledIntoTheAir, + [STRINGID_HELDITEMSLOSEEFFECTS - BATTLESTRINGS_TABLE_START] = sText_HeldItemsLoseEffects, + [STRINGID_FELLSTRAIGHTDOWN - BATTLESTRINGS_TABLE_START] = sText_FellStraightDown, + [STRINGID_TARGETCHANGEDTYPE - BATTLESTRINGS_TABLE_START] = sText_TargetChangedType, + [STRINGID_PKMNACQUIREDSIMPLE - BATTLESTRINGS_TABLE_START] = sText_PkmnAcquiredSimple, + [STRINGID_EMPTYSTRING5 - BATTLESTRINGS_TABLE_START] = sText_EmptyString4, + [STRINGID_KINDOFFER - BATTLESTRINGS_TABLE_START] = sText_KindOffer, + [STRINGID_RESETSTARGETSSTATLEVELS - BATTLESTRINGS_TABLE_START] = sText_ResetsTargetsStatLevels, + [STRINGID_EMPTYSTRING6 - BATTLESTRINGS_TABLE_START] = sText_EmptyString4, + [STRINGID_ALLYSWITCHPOSITION - BATTLESTRINGS_TABLE_START] = sText_AllySwitchPosition, + [STRINGID_RESTORETARGETSHEALTH - BATTLESTRINGS_TABLE_START] = sText_RestoreTargetsHealth, + [STRINGID_TOOKPJMNINTOTHESKY - BATTLESTRINGS_TABLE_START] = sText_TookPkmnIntoTheSky, + [STRINGID_FREEDFROMSKYDROP - BATTLESTRINGS_TABLE_START] = sText_FreedFromSkyDrop, + [STRINGID_POSTPONETARGETMOVE - BATTLESTRINGS_TABLE_START] = sText_PostponeTargetMove, + [STRINGID_REFLECTTARGETSTYPE - BATTLESTRINGS_TABLE_START] = sText_ReflectTargetsType, + [STRINGID_TRANSFERHELDITEM - BATTLESTRINGS_TABLE_START] = sText_TransferHeldItem, + [STRINGID_EMBARGOENDS - BATTLESTRINGS_TABLE_START] = sText_EmbargoEnds, + [STRINGID_ELECTROMAGNETISM - BATTLESTRINGS_TABLE_START] = sText_Electromagnetism, + [STRINGID_BUFFERENDS - BATTLESTRINGS_TABLE_START] = sText_BufferEnds, + [STRINGID_TELEKINESISENDS - BATTLESTRINGS_TABLE_START] = sText_TelekinesisEnds, + [STRINGID_TAILWINDENDS - BATTLESTRINGS_TABLE_START] = sText_TailwindEnds, + [STRINGID_LUCKYCHANTENDS - BATTLESTRINGS_TABLE_START] = sText_LuckyChantEnds, + [STRINGID_TRICKROOMENDS - BATTLESTRINGS_TABLE_START] = sText_TrickRoomEnds, + [STRINGID_WONDERROOMENDS - BATTLESTRINGS_TABLE_START] = sText_WonderRoomEnds, + [STRINGID_MAGICROOMENDS - BATTLESTRINGS_TABLE_START] = sText_MagicRoomEnds, + [STRINGID_MUDSPORTENDS - BATTLESTRINGS_TABLE_START] = sText_MudSportEnds, + [STRINGID_WATERSPORTENDS - BATTLESTRINGS_TABLE_START] = sText_WaterSportEnds, + [STRINGID_GRAVITYENDS - BATTLESTRINGS_TABLE_START] = sText_GravityEnds, + [STRINGID_AQUARINGHEAL - BATTLESTRINGS_TABLE_START] = sText_AquaRingHeal, + [STRINGID_AURORAVEILENDS - BATTLESTRINGS_TABLE_START] = sText_AuroraVeilEnds, + [STRINGID_ELECTRICTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainEnds, + [STRINGID_MISTYTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_MistyTerrainEnds, + [STRINGID_PSYCHICTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_PsychicTerrainEnds, + [STRINGID_GRASSYTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_GrassyTerrainEnds, + [STRINGID_TARGETABILITYSTATRAISE - BATTLESTRINGS_TABLE_START] = sText_TargetAbilityRaisedStat, + [STRINGID_TARGETSSTATWASMAXEDOUT - BATTLESTRINGS_TABLE_START] = sText_TargetsStatWasMaxedOut, + [STRINGID_ATTACKERABILITYSTATRAISE - BATTLESTRINGS_TABLE_START] = sText_AttackerAbilityRaisedStat, + [STRINGID_POISONHEALHPUP - BATTLESTRINGS_TABLE_START] = sText_PoisonHealHpUp, + [STRINGID_BADDREAMSDMG - BATTLESTRINGS_TABLE_START] = sText_BadDreamsDmg, + [STRINGID_MOLDBREAKERENTERS - BATTLESTRINGS_TABLE_START] = sText_MoldBreakerEnters, + [STRINGID_TERAVOLTENTERS - BATTLESTRINGS_TABLE_START] = sText_TeravoltEnters, + [STRINGID_TURBOBLAZEENTERS - BATTLESTRINGS_TABLE_START] = sText_TurboblazeEnters, + [STRINGID_SLOWSTARTENTERS - BATTLESTRINGS_TABLE_START] = sText_SlowStartEnters, + [STRINGID_SLOWSTARTEND - BATTLESTRINGS_TABLE_START] = sText_SlowStartEnd, + [STRINGID_SOLARPOWERHPDROP - BATTLESTRINGS_TABLE_START] = sText_SolarPowerHpDrop, + [STRINGID_AFTERMATHDMG - BATTLESTRINGS_TABLE_START] = sText_AftermathDmg, + [STRINGID_ANTICIPATIONACTIVATES - BATTLESTRINGS_TABLE_START] = sText_AnticipationActivates, + [STRINGID_FOREWARNACTIVATES - BATTLESTRINGS_TABLE_START] = sText_ForewarnActivates, + [STRINGID_ICEBODYHPGAIN - BATTLESTRINGS_TABLE_START] = sText_IceBodyHpGain, + [STRINGID_SNOWWARNINGHAIL - BATTLESTRINGS_TABLE_START] = sText_SnowWarningHail, + [STRINGID_FRISKACTIVATES - BATTLESTRINGS_TABLE_START] = sText_FriskActivates, + [STRINGID_UNNERVEENTERS - BATTLESTRINGS_TABLE_START] = sText_UnnerveEnters, + [STRINGID_HARVESTBERRY - BATTLESTRINGS_TABLE_START] = sText_HarvestBerry, + [STRINGID_LASTABILITYRAISEDSTAT - BATTLESTRINGS_TABLE_START] = sText_LastAbilityRaisedBuff1, + [STRINGID_MAGICBOUNCEACTIVATES - BATTLESTRINGS_TABLE_START] = sText_MagicBounceActivates, + [STRINGID_PROTEANTYPECHANGE - BATTLESTRINGS_TABLE_START] = sText_ProteanTypeChange, + [STRINGID_SYMBIOSISITEMPASS - BATTLESTRINGS_TABLE_START] = sText_SymbiosisItemPass, + [STRINGID_STEALTHROCKDMG - BATTLESTRINGS_TABLE_START] = sText_StealthRockDmg, + [STRINGID_TOXICSPIKESABSORBED - BATTLESTRINGS_TABLE_START] = sText_ToxicSpikesAbsorbed, + [STRINGID_TOXICSPIKESPOISONED - BATTLESTRINGS_TABLE_START] = sText_ToxicSpikesPoisoned, + [STRINGID_STICKYWEBSWITCHIN - BATTLESTRINGS_TABLE_START] = sText_StickyWebSwitchIn, + [STRINGID_HEALINGWISHCAMETRUE - BATTLESTRINGS_TABLE_START] = sText_HealingWishCameTrue, + [STRINGID_HEALINGWISHHEALED - BATTLESTRINGS_TABLE_START] = sText_HealingWishHealed, + [STRINGID_LUNARDANCECAMETRUE - BATTLESTRINGS_TABLE_START] = sText_LunarDanceCameTrue, + [STRINGID_CUSEDBODYDISABLED - BATTLESTRINGS_TABLE_START] = sText_CursedBodyDisabled, + [STRINGID_ATTACKERACQUIREDABILITY - BATTLESTRINGS_TABLE_START] = sText_AttackerAquiredAbility, + [STRINGID_TARGETABILITYSTATLOWER - BATTLESTRINGS_TABLE_START] = sText_TargetAbilityLoweredStat, + [STRINGID_TARGETSTATWONTGOHIGHER - BATTLESTRINGS_TABLE_START] = sText_TargetStatWontGoHigher, + [STRINGID_PKMNMOVEBOUNCEDABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveBouncedViaAbility, + [STRINGID_IMPOSTERTRANSFORM - BATTLESTRINGS_TABLE_START] = sText_ImposterTransform, + [STRINGID_ASSAULTVESTDOESNTALLOW - BATTLESTRINGS_TABLE_START] = sText_AssaultVestDoesntAllow, + [STRINGID_GRAVITYPREVENTSUSAGE - BATTLESTRINGS_TABLE_START] = sText_GravityPreventsUsage, + [STRINGID_HEALBLOCKPREVENTSUSAGE - BATTLESTRINGS_TABLE_START] = sText_HealBlockPreventsUsage, + [STRINGID_NOTDONEYET - BATTLESTRINGS_TABLE_START] = sText_NotDoneYet, + [STRINGID_STICKYWEBUSED - BATTLESTRINGS_TABLE_START] = sText_StickyWebUsed, + [STRINGID_QUASHSUCCESS - BATTLESTRINGS_TABLE_START] = sText_QuashSuccess, + [STRINGID_PKMNBLEWAWAYTOXICSPIKES - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayToxicSpikes, + [STRINGID_PKMNBLEWAWAYSTICKYWEB - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayStickyWeb, + [STRINGID_PKMNBLEWAWAYSTEALTHROCK - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayStealthRock, + [STRINGID_IONDELUGEON - BATTLESTRINGS_TABLE_START] = sText_IonDelugeOn, + [STRINGID_TOPSYTURVYSWITCHEDSTATS - BATTLESTRINGS_TABLE_START] = sText_TopsyTurvySwitchedStats, + [STRINGID_TERRAINBECOMESMISTY - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesMisty, + [STRINGID_TERRAINBECOMESGRASSY - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesGrassy, + [STRINGID_TERRAINBECOMESELECTRIC - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesElectric, + [STRINGID_TERRAINBECOMESPSYCHIC - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesPsychic, + [STRINGID_TARGETELECTRIFIED - BATTLESTRINGS_TABLE_START] = sText_TargetElectrified, + [STRINGID_MEGAEVOREACTING - BATTLESTRINGS_TABLE_START] = sText_MegaEvoReacting, + [STRINGID_FERVENTWISHREACHED - BATTLESTRINGS_TABLE_START] = sText_FerventWishReached, + [STRINGID_MEGAEVOEVOLVED - BATTLESTRINGS_TABLE_START] = sText_MegaEvoEvolved, + [STRINGID_DRASTICALLY - BATTLESTRINGS_TABLE_START] = sText_drastically, + [STRINGID_SEVERELY - BATTLESTRINGS_TABLE_START] = sText_severely, + [STRINGID_INFESTATION - BATTLESTRINGS_TABLE_START] = sText_Infestation, + [STRINGID_NOEFFECTONTARGET - BATTLESTRINGS_TABLE_START] = sText_NoEffectOnTarget, + [STRINGID_BURSTINGFLAMESHIT - BATTLESTRINGS_TABLE_START] = sText_BurstingFlames, + [STRINGID_BESTOWITEMGIVING - BATTLESTRINGS_TABLE_START] = sText_BestowItemGiving, + [STRINGID_THIRDTYPEADDED - BATTLESTRINGS_TABLE_START] = sText_ThirdTypeAdded, + [STRINGID_FELLFORFEINT - BATTLESTRINGS_TABLE_START] = sText_FellForFeint, + [STRINGID_POKEMONCANNOTUSEMOVE - BATTLESTRINGS_TABLE_START] = sText_PokemonCannotUseMove, + [STRINGID_COVEREDINPOWDER - BATTLESTRINGS_TABLE_START] = sText_CoveredInPowder, + [STRINGID_POWDEREXPLODES - BATTLESTRINGS_TABLE_START] = sText_PowderExplodes, + [STRINGID_GRAVITYGROUNDING - BATTLESTRINGS_TABLE_START] = sText_GravityGrounding, + [STRINGID_MISTYTERRAINPREVENTS - BATTLESTRINGS_TABLE_START] = sText_MistyTerrainPreventsStatus, + [STRINGID_GRASSYTERRAINHEALS - BATTLESTRINGS_TABLE_START] = sText_GrassyTerrainHeals, + [STRINGID_ELECTRICTERRAINPREVENTS - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainPreventsSleep, + [STRINGID_PSYCHICTERRAINPREVENTS - BATTLESTRINGS_TABLE_START] = sText_PsychicTerrainPreventsPriority, + [STRINGID_AURAFLAREDTOLIFE - BATTLESTRINGS_TABLE_START] = sText_AuraFlaredToLife, + [STRINGID_AIRLOCKACTIVATES - BATTLESTRINGS_TABLE_START] = sText_AirLockActivates, + [STRINGID_PRESSUREENTERS - BATTLESTRINGS_TABLE_START] = sText_PressureActivates, + [STRINGID_DARKAURAENTERS - BATTLESTRINGS_TABLE_START] = sText_DarkAuraActivates, + [STRINGID_FAIRYAURAENTERS - BATTLESTRINGS_TABLE_START] = sText_FairyAuraActivates, + [STRINGID_AURABREAKENTERS - BATTLESTRINGS_TABLE_START] = sText_AuraBreakActivates, + [STRINGID_COMATOSEENTERS - BATTLESTRINGS_TABLE_START] = sText_ComatoseActivates, + [STRINGID_SCREENCLEANERENTERS - BATTLESTRINGS_TABLE_START] = sText_ScreenCleanerActivates, + [STRINGID_BOTHCANNOLONGERESCAPE - BATTLESTRINGS_TABLE_START] = sText_BothCanNoLongerEscape, + [STRINGID_CANTESCAPEDUETOUSEDMOVE - BATTLESTRINGS_TABLE_START] = sText_CantEscapeDueToUsedMove, + [STRINGID_PKMNBECAMEWEAKERTOFIRE - BATTLESTRINGS_TABLE_START] = sText_PkmnBecameWeakerToFire, + [STRINGID_ABOUTTOUSEPOLTERGEIST - BATTLESTRINGS_TABLE_START] = sText_PkmnAboutToBeAttackedByItsItem, + [STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE - BATTLESTRINGS_TABLE_START] = sText_CantEscapeBecauseOfCurrentMove, + [STRINGID_PKMNTOOKTARGETHIGH - BATTLESTRINGS_TABLE_START] = sText_PkmnTookTargetHigh, + [STRINGID_TARGETTOOHEAVY - BATTLESTRINGS_TABLE_START] = sText_TargetTooHeavy, +}; + +const u16 gZEffectStringIds[] = +{ + [B_MSG_Z_RESET_STATS] = STRINGID_ZMOVERESETSSTATS, + [B_MSG_Z_ALL_STATS_UP]= STRINGID_ZMOVEALLSTATSUP, + [B_MSG_Z_BOOST_CRITS] = STRINGID_ZMOVEZBOOSTCRIT, + [B_MSG_Z_FOLLOW_ME] = STRINGID_PKMNCENTERATTENTION, + [B_MSG_Z_RECOVER_HP] = STRINGID_ZMOVERESTOREHP, + [B_MSG_Z_STAT_UP] = STRINGID_ZMOVESTATUP, + [B_MSG_Z_HP_TRAP] = STRINGID_ZMOVEHPTRAP, +}; + +const u16 gMentalHerbCureStringIds[] = +{ + [B_MSG_MENTALHERBCURE_INFATUATION] = STRINGID_ATKGOTOVERINFATUATION, + [B_MSG_MENTALHERBCURE_TAUNT] = STRINGID_BUFFERENDS, + [B_MSG_MENTALHERBCURE_ENCORE] = STRINGID_PKMNENCOREENDED, + [B_MSG_MENTALHERBCURE_TORMENT] = STRINGID_TORMENTEDNOMORE, + [B_MSG_MENTALHERBCURE_HEALBLOCK] = STRINGID_HEALBLOCKEDNOMORE, + [B_MSG_MENTALHERBCURE_DISABLE] = STRINGID_PKMNMOVEDISABLEDNOMORE, +}; + +const u16 gTerrainStringIds[] = +{ + STRINGID_TERRAINBECOMESMISTY, STRINGID_TERRAINBECOMESGRASSY, STRINGID_TERRAINBECOMESELECTRIC, STRINGID_TERRAINBECOMESPSYCHIC, STRINGID_TERRAINREMOVED, +}; + +const u16 gTerrainEndingStringIds[] = +{ + STRINGID_MISTYTERRAINENDS, STRINGID_GRASSYTERRAINENDS, STRINGID_ELECTRICTERRAINENDS, STRINGID_PSYCHICTERRAINENDS +}; + +const u16 gTerrainPreventsStringIds[] = +{ + [B_MSG_TERRAINPREVENTS_MISTY] = STRINGID_MISTYTERRAINPREVENTS, + [B_MSG_TERRAINPREVENTS_ELECTRIC] = STRINGID_ELECTRICTERRAINPREVENTS, + [B_MSG_TERRAINPREVENTS_PSYCHIC] = STRINGID_PSYCHICTERRAINPREVENTS +}; + +const u16 gMagicCoatBounceStringIds[] = +{ + STRINGID_PKMNMOVEBOUNCED, STRINGID_PKMNMOVEBOUNCEDABILITY +}; + +const u16 gHealingWishStringIds[] = +{ + STRINGID_HEALINGWISHCAMETRUE, STRINGID_LUNARDANCECAMETRUE +}; + +const u16 gDmgHazardsStringIds[] = +{ + STRINGID_PKMNHURTBYSPIKES, STRINGID_STEALTHROCKDMG +}; + +const u16 gSwitchInAbilityStringIds[] = +{ + [B_MSG_SWITCHIN_MOLDBREAKER] = STRINGID_MOLDBREAKERENTERS, + [B_MSG_SWITCHIN_TERAVOLT] = STRINGID_TERAVOLTENTERS, + [B_MSG_SWITCHIN_TURBOBLAZE] = STRINGID_TURBOBLAZEENTERS, + [B_MSG_SWITCHIN_SLOWSTART] = STRINGID_SLOWSTARTENTERS, + [B_MSG_SWITCHIN_UNNERVE] = STRINGID_UNNERVEENTERS, + [B_MSG_SWITCHIN_ANTICIPATION] = STRINGID_ANTICIPATIONACTIVATES, + [B_MSG_SWITCHIN_FOREWARN] = STRINGID_FOREWARNACTIVATES, + [B_MSG_SWITCHIN_PRESSURE] = STRINGID_PRESSUREENTERS, + [B_MSG_SWITCHIN_DARKAURA] = STRINGID_DARKAURAENTERS, + [B_MSG_SWITCHIN_FAIRYAURA] = STRINGID_FAIRYAURAENTERS, + [B_MSG_SWITCHIN_AURABREAK] = STRINGID_AURABREAKENTERS, + [B_MSG_SWITCHIN_COMATOSE] = STRINGID_COMATOSEENTERS, + [B_MSG_SWITCHIN_SCREENCLEANER] = STRINGID_SCREENCLEANERENTERS, + [B_MSG_SWITCHIN_ASONE] = STRINGID_ASONEENTERS, + [B_MSG_SWITCHIN_CURIOUS_MEDICINE] = STRINGID_CURIOUSMEDICINEENTERS, + [B_MSG_SWITCHIN_PASTEL_VEIL] = STRINGID_PASTELVEILENTERS, + [B_MSG_SWITCHIN_NEUTRALIZING_GAS] = STRINGID_NEUTRALIZINGGASENTERS, }; const u16 gMissStringIds[] = @@ -949,6 +1515,7 @@ const u16 gProtectLikeUsedStringIds[] = [B_MSG_PROTECTED_ITSELF] = STRINGID_PKMNPROTECTEDITSELF2, [B_MSG_BRACED_ITSELF] = STRINGID_PKMNBRACEDITSELF, [B_MSG_PROTECT_FAILED] = STRINGID_BUTITFAILED, + [B_MSG_PROTECTED_TEAM] = STRINGID_PROTECTEDTEAM, }; const u16 gReflectLightScreenSafeguardStringIds[] = @@ -1014,7 +1581,7 @@ const u16 gStatUpStringIds[] = [B_MSG_STAT_WONT_INCREASE] = STRINGID_STATSWONTINCREASE, [B_MSG_STAT_ROSE_EMPTY] = STRINGID_EMPTYSTRING3, [B_MSG_STAT_ROSE_ITEM] = STRINGID_USINGITEMSTATOFPKMNROSE, - [B_MSG_USED_DIRE_HIT] = STRINGID_PKMNUSEDXTOGETPUMPED, + [B_MSG_USED_DIRE_HIT] = STRINGID_PKMNUSEDXTOGETPUMPED, }; const u16 gStatDownStringIds[] = @@ -1028,25 +1595,33 @@ const u16 gStatDownStringIds[] = // Index read from sTWOTURN_STRINGID const u16 gFirstTurnOfTwoStringIds[] = { - [B_MSG_TURN1_RAZOR_WIND] = STRINGID_PKMNWHIPPEDWHIRLWIND, - [B_MSG_TURN1_SOLAR_BEAM] = STRINGID_PKMNTOOKSUNLIGHT, - [B_MSG_TURN1_SKULL_BASH] = STRINGID_PKMNLOWEREDHEAD, - [B_MSG_TURN1_SKY_ATTACK] = STRINGID_PKMNISGLOWING, - [B_MSG_TURN1_FLY] = STRINGID_PKMNFLEWHIGH, - [B_MSG_TURN1_DIG] = STRINGID_PKMNDUGHOLE, - [B_MSG_TURN1_DIVE] = STRINGID_PKMNHIDUNDERWATER, - [B_MSG_TURN1_BOUNCE] = STRINGID_PKMNSPRANGUP, + [B_MSG_TURN1_RAZOR_WIND] = STRINGID_PKMNWHIPPEDWHIRLWIND, + [B_MSG_TURN1_SOLAR_BEAM] = STRINGID_PKMNTOOKSUNLIGHT, + [B_MSG_TURN1_SKULL_BASH] = STRINGID_PKMNLOWEREDHEAD, + [B_MSG_TURN1_SKY_ATTACK] = STRINGID_PKMNISGLOWING, + [B_MSG_TURN1_FLY] = STRINGID_PKMNFLEWHIGH, + [B_MSG_TURN1_DIG] = STRINGID_PKMNDUGHOLE, + [B_MSG_TURN1_DIVE] = STRINGID_PKMNHIDUNDERWATER, + [B_MSG_TURN1_BOUNCE] = STRINGID_PKMNSPRANGUP, + [B_MSG_TURN1_PHANTOM_FORCE] = STRINGID_VANISHEDINSTANTLY, + [B_MSG_TURN1_GEOMANCY] = STRINGID_PKNMABSORBINGPOWER, + [B_MSG_TURN1_FREEZE_SHOCK] = STRINGID_CLOAKEDINAFREEZINGLIGHT, + [B_MSG_TURN1_SKY_DROP] = STRINGID_PKMNTOOKTARGETHIGH, + [B_MSG_TURN1_METEOR_BEAM] = STRINGID_METEORBEAMCHARGING, }; -// Index copied from move's index in gTrappingMoves -const u16 gWrappedStringIds[] = +// Index copied from move's index in sTrappingMoves +const u16 gWrappedStringIds[NUM_TRAPPING_MOVES] = { - STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND - STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP - STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_FIRE_SPIN - STRINGID_PKMNCLAMPED, // MOVE_CLAMP - STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_WHIRLPOOL - STRINGID_PKMNTRAPPEDBYSANDTOMB // MOVE_SAND_TOMB + [B_MSG_WRAPPED_BIND] = STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND + [B_MSG_WRAPPED_WRAP] = STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP + [B_MSG_WRAPPED_FIRE_SPIN] = STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_FIRE_SPIN + [B_MSG_WRAPPED_CLAMP] = STRINGID_PKMNCLAMPED, // MOVE_CLAMP + [B_MSG_WRAPPED_WHIRLPOOL] = STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_WHIRLPOOL + [B_MSG_WRAPPED_SAND_TOMB] = STRINGID_PKMNTRAPPEDBYSANDTOMB, // MOVE_SAND_TOMB + [B_MSG_WRAPPED_MAGMA_STORM] = STRINGID_TRAPPEDBYSWIRLINGMAGMA, // MOVE_MAGMA_STORM + [B_MSG_WRAPPED_INFESTATION] = STRINGID_INFESTATION, // MOVE_INFESTATION + [B_MSG_WRAPPED_SNAP_TRAP] = STRINGID_PKMNINSNAPTRAP, // MOVE_SNAP_TRAP }; const u16 gMistUsedStringIds[] = @@ -1257,22 +1832,24 @@ const u16 gCaughtMonStringIds[] = [B_MSG_LANETTES_BOX_FULL] = STRINGID_PKMNBOXLANETTESPCFULL, }; -const u16 gTrappingMoves[] = +const u16 gRoomsStringIds[] = { - MOVE_BIND, - MOVE_WRAP, - MOVE_FIRE_SPIN, - MOVE_CLAMP, - MOVE_WHIRLPOOL, - MOVE_SAND_TOMB, - 0xFFFF + STRINGID_PKMNTWISTEDDIMENSIONS, STRINGID_TRICKROOMENDS, + STRINGID_SWAPSDEFANDSPDEFOFALLPOKEMON, STRINGID_WONDERROOMENDS, + STRINGID_HELDITEMSLOSEEFFECTS, STRINGID_MAGICROOMENDS, + STRINGID_EMPTYSTRING3 +}; + +const u16 gStatusConditionsStringIds[] = +{ + STRINGID_PKMNWASPOISONED, STRINGID_PKMNBADLYPOISONED, STRINGID_PKMNWASBURNED, STRINGID_PKMNWASPARALYZED, STRINGID_PKMNFELLASLEEP }; const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!"); const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{WAIT_SE}\p"); const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p"); const u8 gText_EllipsisQuestionMark[] = _("……?\p"); -const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_ACTIVE_NAME_WITH_PREFIX} do?"); +const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_ACTIVE_NAME2} do?"); const u8 gText_WhatWillPkmnDo2[] = _("What will\n{B_PLAYER_NAME} do?"); const u8 gText_WhatWillWallyDo[] = _("What will\nWALLY do?"); const u8 gText_LinkStandby[] = _("{PAUSE 16}Link standby…"); @@ -1290,17 +1867,11 @@ const u8 gText_BattleSwitchWhich3[] = _("{UP_ARROW}"); const u8 gText_BattleSwitchWhich4[] = _("{ESCAPE 4}"); const u8 gText_BattleSwitchWhich5[] = _("-"); -static const u8 sText_HP[] = _("HP"); -static const u8 sText_Attack[] = _("ATTACK"); -static const u8 sText_Defense[] = _("DEFENSE"); -static const u8 sText_SpAtk[] = _("SP. ATK"); -static const u8 sText_SpDef[] = _("SP. DEF"); - // Unused -static const u8 * const sStatNamesTable2[] = +static const u8 *const sStatNamesTable2[] = { - sText_HP, sText_SpAtk, sText_Attack, - sText_SpDef, sText_Defense, sText_Speed + gText_HP3, gText_SpAtk, gText_Attack, + gText_SpDef, gText_Defense, gText_Speed }; const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GRAY}SAFARI BALLS"); @@ -1347,7 +1918,8 @@ static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][17] = [TYPE_PSYCHIC] = _("a PSYCHIC move"), [TYPE_ICE] = _("an ICE move"), [TYPE_DRAGON] = _("a DRAGON move"), - [TYPE_DARK] = _("a DARK move") + [TYPE_DARK] = _("a DARK move"), + [TYPE_FAIRY] = _("a FAIRY move"), }; const u8 gText_BattleTourney[] = _("BATTLE TOURNEY"); @@ -1390,9 +1962,9 @@ static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is const u16 gBattlePalaceFlavorTextTable[] = { - [B_MSG_GLINT_IN_EYE] = STRINGID_GLINTAPPEARSINEYE, + [B_MSG_GLINT_IN_EYE] = STRINGID_GLINTAPPEARSINEYE, [B_MSG_GETTING_IN_POS] = STRINGID_PKMNGETTINGINTOPOSITION, - [B_MSG_GROWL_DEEPLY] = STRINGID_PKMNBEGANGROWLINGDEEPLY, + [B_MSG_GROWL_DEEPLY] = STRINGID_PKMNBEGANGROWLINGDEEPLY, [B_MSG_EAGER_FOR_MORE] = STRINGID_PKMNEAGERFORMORE, }; @@ -1409,7 +1981,7 @@ static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost t static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!"); -const u8 * const gRefereeStringsTable[] = +const u8 *const gRefereeStringsTable[] = { [B_MSG_REF_NOTHING_IS_DECIDED] = sText_RefIfNothingIsDecided, [B_MSG_REF_THATS_IT] = sText_RefThatsIt, @@ -1433,6 +2005,10 @@ const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\no const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}'s battle result was recorded\non the FRONTIER PASS."); static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_LINK_OPPONENT1_NAME}\nwants to battle!{PAUSE 49}"); static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\nwant to battle!{PAUSE 49}"); +static const u8 sText_Your1[] = _("Your"); +static const u8 sText_Opposing1[] = _("The opposing"); +static const u8 sText_Your2[] = _("your"); +static const u8 sText_Opposing2[] = _("the opposing"); // This is four lists of moves which use a different attack string in Japanese // to the default. See the documentation for ChooseTypeOfMoveUsedString for more detail. @@ -1480,598 +2056,597 @@ static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS, static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { -// The corresponding WindowTemplate is gStandardBattleWindowTemplates[] within src/battle_bg.c - { // 0 Standard battle message + [B_WIN_MSG] = { .fillValue = PIXEL_FILL(0xF), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 1, - .fgColor = 1, - .bgColor = 15, - .shadowColor = 6, + .fgColor = TEXT_COLOR_WHITE, + .bgColor = TEXT_DYNAMIC_COLOR_6, + .shadowColor = TEXT_COLOR_GREEN, }, - { // 1 "What will (pokemon) do?" + [B_WIN_ACTION_PROMPT] = { .fillValue = PIXEL_FILL(0xF), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 1, - .bgColor = 15, - .shadowColor = 6, + .fgColor = TEXT_COLOR_WHITE, + .bgColor = TEXT_DYNAMIC_COLOR_6, + .shadowColor = TEXT_COLOR_GREEN, }, - { // 2 "Fight/Pokemon/Bag/Run" + [B_WIN_ACTION_MENU] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 3 Top left move + [B_WIN_MOVE_NAME_1] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 4 Top right move + [B_WIN_MOVE_NAME_2] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 5 Bottom left move + [B_WIN_MOVE_NAME_3] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 6 Bottom right move + [B_WIN_MOVE_NAME_4] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 7 "PP" + [B_WIN_PP] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 12, - .bgColor = 14, - .shadowColor = 11, + .fgColor = TEXT_DYNAMIC_COLOR_3, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_2, }, - { // 8 + [B_WIN_DUMMY] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 9 PP remaining + [B_WIN_PP_REMAINING] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 2, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 12, - .bgColor = 14, - .shadowColor = 11, + .fgColor = TEXT_DYNAMIC_COLOR_3, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_2, }, - { // 10 "type" + [B_WIN_MOVE_TYPE] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 11 "switch which?" + [B_WIN_SWITCH_PROMPT] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 12 "gText_BattleYesNoChoice" + [B_WIN_YESNO] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 13 + [B_WIN_LEVEL_UP_BOX] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 14 + [B_WIN_LEVEL_UP_BANNER] = { .fillValue = PIXEL_FILL(0), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 32, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 1, - .bgColor = 0, - .shadowColor = 2, + .fgColor = TEXT_COLOR_WHITE, + .bgColor = TEXT_COLOR_TRANSPARENT, + .shadowColor = TEXT_COLOR_DARK_GRAY, }, - { // 15 + [B_WIN_VS_PLAYER] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 16 + [B_WIN_VS_OPPONENT] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 17 + [B_WIN_VS_MULTI_PLAYER_1] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 18 + [B_WIN_VS_MULTI_PLAYER_2] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 19 + [B_WIN_VS_MULTI_PLAYER_3] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 20 + [B_WIN_VS_MULTI_PLAYER_4] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 21 + [B_WIN_VS_OUTCOME_DRAW] = { .fillValue = PIXEL_FILL(0), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 1, - .bgColor = 0, - .shadowColor = 6, + .fgColor = TEXT_COLOR_WHITE, + .bgColor = TEXT_COLOR_TRANSPARENT, + .shadowColor = TEXT_COLOR_GREEN, }, - { // 22 + [B_WIN_VS_OUTCOME_LEFT] = { .fillValue = PIXEL_FILL(0), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 1, - .bgColor = 0, - .shadowColor = 6, + .fgColor = TEXT_COLOR_WHITE, + .bgColor = TEXT_COLOR_TRANSPARENT, + .shadowColor = TEXT_COLOR_GREEN, }, - { // 23 + [B_WIN_VS_OUTCOME_RIGHT] = { .fillValue = PIXEL_FILL(0x0), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 1, - .bgColor = 0, - .shadowColor = 6, + .fgColor = TEXT_COLOR_WHITE, + .bgColor = TEXT_COLOR_TRANSPARENT, + .shadowColor = TEXT_COLOR_GREEN, }, }; static const struct BattleWindowText sTextOnWindowsInfo_Arena[] = { - { // 0 + [B_WIN_MSG] = { .fillValue = PIXEL_FILL(0xF), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 1, - .fgColor = 1, - .bgColor = 15, - .shadowColor = 6, + .fgColor = TEXT_COLOR_WHITE, + .bgColor = TEXT_DYNAMIC_COLOR_6, + .shadowColor = TEXT_COLOR_GREEN, }, - { // 1 + [B_WIN_ACTION_PROMPT] = { .fillValue = PIXEL_FILL(0xF), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 1, - .bgColor = 15, - .shadowColor = 6, + .fgColor = TEXT_COLOR_WHITE, + .bgColor = TEXT_DYNAMIC_COLOR_6, + .shadowColor = TEXT_COLOR_GREEN, }, - { // 2 + [B_WIN_ACTION_MENU] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 3 + [B_WIN_MOVE_NAME_1] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 4 + [B_WIN_MOVE_NAME_2] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 5 + [B_WIN_MOVE_NAME_3] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 6 + [B_WIN_MOVE_NAME_4] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 7 + [B_WIN_PP] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 12, - .bgColor = 14, - .shadowColor = 11, + .fgColor = TEXT_DYNAMIC_COLOR_3, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_2, }, - { // 8 + [B_WIN_DUMMY] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 9 + [B_WIN_PP_REMAINING] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 2, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 12, - .bgColor = 14, - .shadowColor = 11, + .fgColor = TEXT_DYNAMIC_COLOR_3, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_2, }, - { // 10 + [B_WIN_MOVE_TYPE] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 11 + [B_WIN_SWITCH_PROMPT] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 7, + .fontId = FONT_NARROW, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 12 + [B_WIN_YESNO] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 13 + [B_WIN_LEVEL_UP_BOX] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 14 + [B_WIN_LEVEL_UP_BANNER] = { .fillValue = PIXEL_FILL(0), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 32, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 1, - .bgColor = 0, - .shadowColor = 2, + .fgColor = TEXT_COLOR_WHITE, + .bgColor = TEXT_COLOR_TRANSPARENT, + .shadowColor = TEXT_COLOR_DARK_GRAY, }, - { // 15 + [ARENA_WIN_PLAYER_NAME] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 1, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_COLOR_WHITE, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 16 + [ARENA_WIN_VS] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 17 + [ARENA_WIN_OPPONENT_NAME] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 18 + [ARENA_WIN_MIND] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 19 + [ARENA_WIN_SKILL] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 20 + [ARENA_WIN_BODY] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 21 + [ARENA_WIN_JUDGEMENT_TITLE] = { .fillValue = PIXEL_FILL(0xE), - .fontId = 1, + .fontId = FONT_NORMAL, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, - .fgColor = 13, - .bgColor = 14, - .shadowColor = 15, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, }, - { // 22 + [ARENA_WIN_JUDGEMENT_TEXT] = { .fillValue = PIXEL_FILL(0x1), - .fontId = 1, + .fontId = FONT_NORMAL, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 1, - .fgColor = 2, - .bgColor = 1, - .shadowColor = 3, + .fgColor = TEXT_COLOR_DARK_GRAY, + .bgColor = TEXT_COLOR_WHITE, + .shadowColor = TEXT_COLOR_LIGHT_GRAY, }, }; static const struct BattleWindowText *const sBattleTextOnWindowsInfo[] = { - sTextOnWindowsInfo_Normal, sTextOnWindowsInfo_Arena + [B_WIN_TYPE_NORMAL] = sTextOnWindowsInfo_Normal, + [B_WIN_TYPE_ARENA] = sTextOnWindowsInfo_Arena }; static const u8 sRecordedBattleTextSpeeds[] = {8, 4, 1, 0}; -// code void BufferStringBattle(u16 stringID) { s32 i; const u8 *stringPtr = NULL; - gBattleMsgDataPtr = (struct BattleMsgData*)(&gBattleBufferA[gActiveBattler][4]); + gBattleMsgDataPtr = (struct BattleMsgData *)(&gBattleResources->bufferA[gActiveBattler][4]); gLastUsedItem = gBattleMsgDataPtr->lastItem; gLastUsedAbility = gBattleMsgDataPtr->lastAbility; gBattleScripting.battler = gBattleMsgDataPtr->scrActive; - *(&gBattleStruct->field_52) = gBattleMsgDataPtr->unk1605E; - *(&gBattleStruct->hpScale) = gBattleMsgDataPtr->hpScale; + gBattleStruct->field_52 = gBattleMsgDataPtr->unk1605E; + gBattleStruct->hpScale = gBattleMsgDataPtr->hpScale; gPotentialItemEffectBattler = gBattleMsgDataPtr->itemEffectBattler; - *(&gBattleStruct->stringMoveType) = gBattleMsgDataPtr->moveType; + gBattleStruct->stringMoveType = gBattleMsgDataPtr->moveType; for (i = 0; i < MAX_BATTLERS_COUNT; i++) { @@ -2114,7 +2689,9 @@ void BufferStringBattle(u16 stringID) } else { - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + if (BATTLE_TWO_VS_ONE_OPPONENT) + stringPtr = sText_Trainer1WantsToBattle; + else if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) stringPtr = sText_TwoTrainersWantToBattle; else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) stringPtr = sText_TwoTrainersWantToBattle; @@ -2126,7 +2703,7 @@ void BufferStringBattle(u16 stringID) { if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) stringPtr = sText_LegendaryPkmnAppeared; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]])) // interesting, looks like they had something planned for wild double battles stringPtr = sText_TwoWildPkmnAppeared; else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) stringPtr = sText_WildPkmnAppearedPause; @@ -2137,7 +2714,7 @@ void BufferStringBattle(u16 stringID) case STRINGID_INTROSENDOUT: // poke first send-out if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]])) { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) stringPtr = sText_InGamePartnerSentOutZGoN; @@ -2155,9 +2732,11 @@ void BufferStringBattle(u16 stringID) } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]])) { - if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + if (BATTLE_TWO_VS_ONE_OPPONENT) + stringPtr = sText_Trainer1SentOutTwoPkmn; + else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) stringPtr = sText_TwoTrainersSentPkmn; else if (gBattleTypeFlags & BATTLE_TYPE_TOWER_LINK_MULTI) stringPtr = sText_TwoTrainersSentPkmn; @@ -2256,14 +2835,13 @@ void BufferStringBattle(u16 stringID) } break; case STRINGID_USEDMOVE: // pokemon used a move msg - ChooseMoveUsedParticle(gBattleTextBuff1); // buff1 doesn't appear in the string, leftover from japanese move names - - if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) - StringCopy(gBattleTextBuff2, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]); + if (gBattleStruct->zmove.active && gBattleStruct->zmove.activeSplit != SPLIT_STATUS) + StringCopy(gBattleTextBuff3, GetZMoveName(gBattleMsgDataPtr->currentMove)); + else if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) + StringCopy(gBattleTextBuff3, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]); else - StringCopy(gBattleTextBuff2, gMoveNames[gBattleMsgDataPtr->currentMove]); + StringCopy(gBattleTextBuff3, gMoveNames[gBattleMsgDataPtr->currentMove]); - ChooseTypeOfMoveUsedString(gBattleTextBuff2); stringPtr = sText_AttackerUsedX; break; case STRINGID_BATTLEEND: // battle end @@ -2335,15 +2913,18 @@ void BufferStringBattle(u16 stringID) } } break; + case STRINGID_TRAINERSLIDE: + stringPtr = gBattleStruct->trainerSlideMsg; + break; default: // load a string from the table - if (stringID >= BATTLESTRINGS_COUNT + BATTLESTRINGS_ID_ADDER) + if (stringID >= BATTLESTRINGS_COUNT) { gDisplayedStringBattle[0] = EOS; return; } else { - stringPtr = gBattleStringsTable[stringID - BATTLESTRINGS_ID_ADDER]; + stringPtr = gBattleStringsTable[stringID - BATTLESTRINGS_TABLE_START]; } break; } @@ -2351,17 +2932,17 @@ void BufferStringBattle(u16 stringID) BattleStringExpandPlaceholdersToDisplayedString(stringPtr); } -u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src) +u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src) { BattleStringExpandPlaceholders(src, gDisplayedStringBattle); } -static const u8* TryGetStatusString(u8 *src) +static const u8 *TryGetStatusString(u8 *src) { u32 i; u8 status[8]; u32 chars1, chars2; - u8* statusPtr; + u8 *statusPtr; memcpy(status, sDummyWeirdStatusString, 8); @@ -2374,19 +2955,35 @@ static const u8* TryGetStatusString(u8 *src) statusPtr++; } - chars1 = *(u32*)(&status[0]); - chars2 = *(u32*)(&status[4]); + chars1 = *(u32 *)(&status[0]); + chars2 = *(u32 *)(&status[4]); for (i = 0; i < ARRAY_COUNT(gStatusConditionStringsTable); i++) { - if (chars1 == *(u32*)(&gStatusConditionStringsTable[i][0][0]) - && chars2 == *(u32*)(&gStatusConditionStringsTable[i][0][4])) + if (chars1 == *(u32 *)(&gStatusConditionStringsTable[i][0][0]) + && chars2 == *(u32 *)(&gStatusConditionStringsTable[i][0][4])) return gStatusConditionStringsTable[i][1]; } return NULL; } -#define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex) \ +static void GetBattlerNick(u32 battlerId, u8 *dst) +{ + struct Pokemon *mon, *illusionMon; + + if (GET_BATTLER_SIDE(battlerId) == B_SIDE_PLAYER) + mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; + else + mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; + + illusionMon = GetIllusionMonPtr(battlerId); + if (illusionMon != NULL) + mon = illusionMon; + GetMonData(mon, MON_DATA_NICKNAME, dst); + StringGet_Nickname(dst); +} + +#define HANDLE_NICKNAME_STRING_CASE(battlerId) \ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) \ { \ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ @@ -2399,15 +2996,144 @@ static const u8* TryGetStatusString(u8 *src) dstID++; \ toCpy++; \ } \ - GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \ } \ - else \ - { \ - GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \ - } \ - StringGetEnd10(text); \ + GetBattlerNick(battlerId, text); \ toCpy = text; +static const u8 *BattleStringGetOpponentNameByTrainerId(u16 trainerId, u8 *text, u8 multiplayerId, u8 battlerId) +{ + const u8 *toCpy; + + if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) + { + u32 i; + for (i = 0; i < ARRAY_COUNT(gBattleResources->secretBase->trainerName); i++) + text[i] = gBattleResources->secretBase->trainerName[i]; + text[i] = EOS; + ConvertInternationalString(text, gBattleResources->secretBase->language); + toCpy = text; + } + else if (trainerId == TRAINER_UNION_ROOM) + { + toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name; + } + else if (trainerId == TRAINER_LINK_OPPONENT) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + toCpy = gLinkPlayers[GetBattlerMultiplayerId(battlerId)].name; + else + toCpy = gLinkPlayers[GetBattlerMultiplayerId(battlerId) & BIT_SIDE].name; + } + else if (trainerId == TRAINER_FRONTIER_BRAIN) + { + CopyFrontierBrainTrainerName(text); + toCpy = text; + } + else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + { + GetFrontierTrainerName(text, trainerId); + toCpy = text; + } + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) + { + GetTrainerHillTrainerName(text, trainerId); + toCpy = text; + } + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + { + GetEreaderTrainerName(text); + toCpy = text; + } + else + { + toCpy = gTrainers[trainerId].trainerName; + } + + return toCpy; +} + +static const u8 *BattleStringGetOpponentName(u8 *text, u8 multiplayerId, u8 battlerId) +{ + const u8 *toCpy; + + switch (GetBattlerPosition(battlerId)) + { + case B_POSITION_OPPONENT_LEFT: + toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, text, multiplayerId, battlerId); + break; + case B_POSITION_OPPONENT_RIGHT: + if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI) && !BATTLE_TWO_VS_ONE_OPPONENT) + toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_B, text, multiplayerId, battlerId); + else + toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, text, multiplayerId, battlerId); + break; + } + + return toCpy; +} + +static const u8 *BattleStringGetPlayerName(u8 *text, u8 battlerId) +{ + const u8 *toCpy; + + switch (GetBattlerPosition(battlerId)) + { + case B_POSITION_PLAYER_LEFT: + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + toCpy = gLinkPlayers[0].name; + else + toCpy = gSaveBlock2Ptr->playerName; + break; + case B_POSITION_PLAYER_RIGHT: + if (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_MULTI)) + { + toCpy = gLinkPlayers[2].name; + } + else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + { + GetFrontierTrainerName(text, gPartnerTrainerId); + toCpy = text; + } + else + { + toCpy = gSaveBlock2Ptr->playerName; + } + break; + } + + return toCpy; +} + +static const u8 *BattleStringGetTrainerName(u8 *text, u8 multiplayerId, u8 battlerId) +{ + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + return BattleStringGetPlayerName(text, battlerId); + else + return BattleStringGetOpponentName(text, multiplayerId, battlerId); +} + +static const u8 *BattleStringGetOpponentClassByTrainerId(u16 trainerId) +{ + const u8 *toCpy; + + if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) + toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()]; + else if (trainerId == TRAINER_UNION_ROOM) + toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()]; + else if (trainerId == TRAINER_FRONTIER_BRAIN) + toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()]; + else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + toCpy = gTrainerClassNames[GetFrontierOpponentClass(trainerId)]; + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) + toCpy = gTrainerClassNames[GetTrainerHillOpponentClass(trainerId)]; + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + toCpy = gTrainerClassNames[GetEreaderTrainerClassId()]; + else + toCpy = gTrainerClassNames[gTrainers[trainerId].trainerClass]; + + return toCpy; +} + u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) { u32 dstID = 0; // if they used dstID, why not use srcID as well? @@ -2423,6 +3149,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) while (*src != EOS) { + toCpy = NULL; if (*src == PLACEHOLDER_BEGIN) { src++; @@ -2469,89 +3196,86 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) toCpy = gStringVar3; break; case B_TXT_PLAYER_MON1_NAME: // first player poke name - GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]], - MON_DATA_NICKNAME, text); - StringGetEnd10(text); + GetBattlerNick(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), text); toCpy = text; break; case B_TXT_OPPONENT_MON1_NAME: // first enemy poke name - GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]], - MON_DATA_NICKNAME, text); - StringGetEnd10(text); + GetBattlerNick(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), text); toCpy = text; break; case B_TXT_PLAYER_MON2_NAME: // second player poke name - GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]], - MON_DATA_NICKNAME, text); - StringGetEnd10(text); + GetBattlerNick(GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT), text); toCpy = text; break; case B_TXT_OPPONENT_MON2_NAME: // second enemy poke name - GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]], - MON_DATA_NICKNAME, text); - StringGetEnd10(text); + GetBattlerNick(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT), text); toCpy = text; break; case B_TXT_LINK_PLAYER_MON1_NAME: // link first player poke name - GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id]], - MON_DATA_NICKNAME, text); - StringGetEnd10(text); + GetBattlerNick(gLinkPlayers[multiplayerId].id, text); toCpy = text; break; case B_TXT_LINK_OPPONENT_MON1_NAME: // link first opponent poke name - GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 1]], - MON_DATA_NICKNAME, text); - StringGetEnd10(text); + GetBattlerNick(gLinkPlayers[multiplayerId].id ^ 1, text); toCpy = text; break; case B_TXT_LINK_PLAYER_MON2_NAME: // link second player poke name - GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 2]], - MON_DATA_NICKNAME, text); - StringGetEnd10(text); + GetBattlerNick(gLinkPlayers[multiplayerId].id ^ 2, text); toCpy = text; break; case B_TXT_LINK_OPPONENT_MON2_NAME: // link second opponent poke name - GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 3]], - MON_DATA_NICKNAME, text); - StringGetEnd10(text); + GetBattlerNick(gLinkPlayers[multiplayerId].id ^ 3, text); toCpy = text; break; - case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only battlerId 0/1 - HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker, - gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker))]) + case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // Unused, to change into sth else. break; case B_TXT_ATK_PARTNER_NAME: // attacker partner name - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) + 2]], MON_DATA_NICKNAME, text); - else - GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) + 2]], MON_DATA_NICKNAME, text); - - StringGetEnd10(text); + GetBattlerNick(BATTLE_PARTNER(gBattlerAttacker), text); toCpy = text; break; case B_TXT_ATK_NAME_WITH_PREFIX: // attacker name with prefix - HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]) + HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker) break; case B_TXT_DEF_NAME_WITH_PREFIX: // target name with prefix - HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget]) + HANDLE_NICKNAME_STRING_CASE(gBattlerTarget) + break; + case B_TXT_DEF_NAME: // target name + GetBattlerNick(gBattlerTarget, text); + toCpy = text; + break; + case B_TXT_ACTIVE_NAME: // active name + GetBattlerNick(gActiveBattler, text); + toCpy = text; + break; + case B_TXT_ACTIVE_NAME2: // active battlerId name with prefix, no illusion + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_NICKNAME, text); + else + GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_NICKNAME, text); + StringGet_Nickname(text); + toCpy = text; break; case B_TXT_EFF_NAME_WITH_PREFIX: // effect battlerId name with prefix - HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler]) + HANDLE_NICKNAME_STRING_CASE(gEffectBattler) break; case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active battlerId name with prefix - HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler]) + HANDLE_NICKNAME_STRING_CASE(gActiveBattler) break; case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active battlerId name with prefix - HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, gBattlerPartyIndexes[gBattleScripting.battler]) + HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler) break; case B_TXT_CURRENT_MOVE: // current move name - if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) + if (gBattleStruct->zmove.active) + toCpy = GetZMoveName(gBattleMsgDataPtr->currentMove); + else if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) toCpy = sATypeMove_Table[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gBattleMsgDataPtr->currentMove]; break; case B_TXT_LAST_MOVE: // originally used move name - if (gBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT) + if (gBattleStruct->zmove.active) + toCpy = GetZMoveName(gBattleMsgDataPtr->originallyUsedMove); + else if (gBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT) toCpy = sATypeMove_Table[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gBattleMsgDataPtr->originallyUsedMove]; @@ -2559,7 +3283,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) case B_TXT_LAST_ITEM: // last used item if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) { - if (gLastUsedItem == ITEM_ENIGMA_BERRY) + if (gLastUsedItem == ITEM_ENIGMA_BERRY_E_READER) { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { @@ -2615,58 +3339,10 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) toCpy = gAbilityNames[sBattlerAbilities[gEffectBattler]]; break; case B_TXT_TRAINER1_CLASS: // trainer class name - if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) - toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()]; - else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) - toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()]; - else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) - toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()]; - else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - toCpy = gTrainerClassNames[GetFrontierOpponentClass(gTrainerBattleOpponent_A)]; - else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) - toCpy = gTrainerClassNames[GetTrainerHillOpponentClass(gTrainerBattleOpponent_A)]; - else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - toCpy = gTrainerClassNames[GetEreaderTrainerClassId()]; - else - toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent_A].trainerClass]; + toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); break; case B_TXT_TRAINER1_NAME: // trainer1 name - if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) - { - for (i = 0; i < (s32) ARRAY_COUNT(gBattleResources->secretBase->trainerName); i++) - text[i] = gBattleResources->secretBase->trainerName[i]; - text[i] = EOS; - ConvertInternationalString(text, gBattleResources->secretBase->language); - toCpy = text; - } - else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) - { - toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name; - } - else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) - { - CopyFrontierBrainTrainerName(text); - toCpy = text; - } - else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - { - GetFrontierTrainerName(text, gTrainerBattleOpponent_A); - toCpy = text; - } - else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) - { - GetTrainerHillTrainerName(text, gTrainerBattleOpponent_A); - toCpy = text; - } - else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - { - GetEreaderTrainerName(text); - toCpy = text; - } - else - { - toCpy = gTrainers[gTrainerBattleOpponent_A].trainerName; - } + toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, text, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); break; case B_TXT_LINK_PLAYER_NAME: // link player name toCpy = gLinkPlayers[multiplayerId].name; @@ -2684,10 +3360,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) toCpy = gLinkPlayers[GetBattlerMultiplayerId(gBattleScripting.battler)].name; break; case B_TXT_PLAYER_NAME: // player name - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - toCpy = gLinkPlayers[0].name; - else - toCpy = gSaveBlock2Ptr->playerName; + toCpy = BattleStringGetPlayerName(text, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); break; case B_TXT_TRAINER1_LOSE_TEXT: // trainerA lose text if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) @@ -2718,7 +3391,26 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) } break; case B_TXT_26: // ? - HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, *(&gBattleStruct->field_52)) + if (GetBattlerSide(gBattleScripting.battler) != B_SIDE_PLAYER) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = sText_FoePkmnPrefix; + else + toCpy = sText_WildPkmnPrefix; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattleStruct->field_52], MON_DATA_NICKNAME, text); + } + else + { + GetMonData(&gPlayerParty[gBattleStruct->field_52], MON_DATA_NICKNAME, text); + } + StringGet_Nickname(text); + toCpy = text; break; case B_TXT_PC_CREATOR_NAME: // lanette pc if (FlagGet(FLAG_SYS_PC_LANETTE)) @@ -2763,28 +3455,10 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) toCpy = sText_FoePkmnPrefix4; break; case B_TXT_TRAINER2_CLASS: - if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - toCpy = gTrainerClassNames[GetFrontierOpponentClass(gTrainerBattleOpponent_B)]; - else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) - toCpy = gTrainerClassNames[GetTrainerHillOpponentClass(gTrainerBattleOpponent_B)]; - else - toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent_B].trainerClass]; + toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B); break; case B_TXT_TRAINER2_NAME: - if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - { - GetFrontierTrainerName(text, gTrainerBattleOpponent_B); - toCpy = text; - } - else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) - { - GetTrainerHillTrainerName(text, gTrainerBattleOpponent_B); - toCpy = text; - } - else - { - toCpy = gTrainers[gTrainerBattleOpponent_B].trainerName; - } + toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_B, text, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)); break; case B_TXT_TRAINER2_LOSE_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) @@ -2818,18 +3492,65 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) toCpy = gTrainerClassNames[GetFrontierOpponentClass(gPartnerTrainerId)]; break; case B_TXT_PARTNER_NAME: - GetFrontierTrainerName(text, gPartnerTrainerId); - toCpy = text; + toCpy = BattleStringGetPlayerName(text, GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)); + break; + case B_TXT_ATK_TRAINER_NAME: + toCpy = BattleStringGetTrainerName(text, multiplayerId, gBattlerAttacker); + break; + case B_TXT_ATK_TRAINER_CLASS: + switch (GetBattlerPosition(gBattlerAttacker)) + { + case B_POSITION_PLAYER_RIGHT: + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + toCpy = gTrainerClassNames[GetFrontierOpponentClass(gPartnerTrainerId)]; + break; + case B_POSITION_OPPONENT_LEFT: + toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); + break; + case B_POSITION_OPPONENT_RIGHT: + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && !BATTLE_TWO_VS_ONE_OPPONENT) + toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B); + else + toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); + break; + } + break; + case B_TXT_ATK_TEAM1: + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + toCpy = sText_Your1; + else + toCpy = sText_Opposing1; + break; + case B_TXT_ATK_TEAM2: + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + toCpy = sText_Your2; + else + toCpy = sText_Opposing2; + break; + case B_TXT_DEF_TEAM1: + if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) + toCpy = sText_Your1; + else + toCpy = sText_Opposing1; + break; + case B_TXT_DEF_TEAM2: + if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) + toCpy = sText_Your2; + else + toCpy = sText_Opposing2; break; } - // missing if (toCpy != NULL) check - while (*toCpy != EOS) + if (toCpy != NULL) { - dst[dstID] = *toCpy; - dstID++; - toCpy++; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } } + if (*src == B_TXT_TRAINER1_LOSE_TEXT || *src == B_TXT_TRAINER2_LOSE_TEXT || *src == B_TXT_TRAINER1_WIN_TEXT || *src == B_TXT_TRAINER2_WIN_TEXT) { @@ -2853,7 +3574,38 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) return dstID; } -static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) +static void IllusionNickHack(u32 battlerId, u32 partyId, u8 *dst) +{ + s32 id, i; + // we know it's gEnemyParty + struct Pokemon *mon = &gEnemyParty[partyId], *partnerMon; + + if (GetMonAbility(mon) == ABILITY_ILLUSION) + { + if (IsBattlerAlive(BATTLE_PARTNER(battlerId))) + partnerMon = &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]]; + else + partnerMon = mon; + + // Find last alive non-egg pokemon. + for (i = PARTY_SIZE - 1; i >= 0; i--) + { + id = i; + if (GetMonData(&gEnemyParty[id], MON_DATA_SANITY_HAS_SPECIES) + && GetMonData(&gEnemyParty[id], MON_DATA_HP) + && &gEnemyParty[id] != mon + && &gEnemyParty[id] != partnerMon) + { + GetMonData(&gEnemyParty[id], MON_DATA_NICKNAME, dst); + return; + } + } + } + + GetMonData(mon, MON_DATA_NICKNAME, dst); +} + +void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) { u32 srcID = 1; u32 value = 0; @@ -2867,7 +3619,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) { case B_BUFF_STRING: // battle string hword = T1_READ_16(&src[srcID + 1]); - StringAppend(dst, gBattleStringsTable[hword - BATTLESTRINGS_ID_ADDER]); + StringAppend(dst, gBattleStringsTable[hword - BATTLESTRINGS_TABLE_START]); srcID += 3; break; case B_BUFF_NUMBER: // int to string @@ -2908,7 +3660,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text); } - StringGetEnd10(text); + StringGet_Nickname(text); StringAppend(dst, text); srcID += 3; break; @@ -2921,11 +3673,24 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) srcID += 3; break; case B_BUFF_MON_NICK: // poke nick without prefix - if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER) - GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst); + if (src[srcID + 2] == gBattlerPartyIndexes[src[srcID + 1]]) + { + GetBattlerNick(src[srcID + 1], dst); + } + else if (gBattleScripting.illusionNickHack) // for STRINGID_ENEMYABOUTTOSWITCHPKMN + { + gBattleScripting.illusionNickHack = 0; + IllusionNickHack(src[srcID + 1], src[srcID + 2], dst); + StringGet_Nickname(dst); + } else - GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst); - StringGetEnd10(dst); + { + if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER) + GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst); + else + GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst); + StringGet_Nickname(dst); + } srcID += 3; break; case B_BUFF_NEGATIVE_FLAVOR: // flavor table @@ -2933,14 +3698,14 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) srcID += 2; break; case B_BUFF_ABILITY: // ability names - StringAppend(dst, gAbilityNames[src[srcID + 1]]); - srcID += 2; + StringAppend(dst, gAbilityNames[T1_READ_16(&src[srcID + 1])]); + srcID += 3; break; case B_BUFF_ITEM: // item name hword = T1_READ_16(&src[srcID + 1]); if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) { - if (hword == ITEM_ENIGMA_BERRY) + if (hword == ITEM_ENIGMA_BERRY_E_READER) { if (gLinkPlayers[gBattleScripting.multiplayerId].id == gPotentialItemEffectBattler) { @@ -2969,9 +3734,9 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) // Loads one of two text strings into the provided buffer. This is functionally // unused, since the value loaded into the buffer is not read; it loaded one of -// two particles (either "は" or "の") which works in tandem with ChooseTypeOfMoveUsedString +// two particles (either "?" or "?") which works in tandem with ChooseTypeOfMoveUsedString // below to effect changes in the meaning of the line. -static void ChooseMoveUsedParticle(u8* textBuff) +static void ChooseMoveUsedParticle(u8 *textBuff) { s32 counter = 0; u32 i = 0; @@ -2999,19 +3764,19 @@ static void ChooseMoveUsedParticle(u8* textBuff) // sText_ExclamationMark was a plain "!", used for any attack not on the list. // It resulted in the translation "'s !". // -// sText_ExclamationMark2 was "を つかった!". This resulted in the translation +// sText_ExclamationMark2 was "? ????!". This resulted in the translation // " used !", which was used for all attacks in English. // -// sText_ExclamationMark3 was "した!". This was used for those moves whose +// sText_ExclamationMark3 was "??!". This was used for those moves whose // names were verbs, such as Recover, and resulted in translations like " // recovered itself!". // -// sText_ExclamationMark4 was "を した!" This resulted in a translation of +// sText_ExclamationMark4 was "? ??!" This resulted in a translation of // " did an !". // -// sText_ExclamationMark5 was " こうげき!" This resulted in a translation of +// sText_ExclamationMark5 was " ????!" This resulted in a translation of // "'s attack!". -static void ChooseTypeOfMoveUsedString(u8* dst) +static void ChooseTypeOfMoveUsedString(u8 *dst) { s32 counter = 0; s32 i = 0; @@ -3054,9 +3819,9 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId) struct TextPrinterTemplate printerTemplate; u8 speed; - if (windowId & 0x80) + if (windowId & B_WIN_COPYTOVRAM) { - windowId &= ~(0x80); + windowId &= ~B_WIN_COPYTOVRAM; copyToVram = FALSE; } else @@ -3086,17 +3851,17 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId) printerTemplate.x = printerTemplate.currentX = alignX; } - if (windowId == 0x16) - gTextFlags.useAlternateDownArrow = 0; + if (windowId == ARENA_WIN_JUDGEMENT_TEXT) + gTextFlags.useAlternateDownArrow = FALSE; else - gTextFlags.useAlternateDownArrow = 1; + gTextFlags.useAlternateDownArrow = TRUE; if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED)) - gTextFlags.autoScroll = 1; + gTextFlags.autoScroll = TRUE; else - gTextFlags.autoScroll = 0; + gTextFlags.autoScroll = FALSE; - if (windowId == 0 || windowId == 0x16) + if (windowId == B_WIN_MSG || windowId == ARENA_WIN_JUDGEMENT_TEXT) { if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) speed = 1; @@ -3118,14 +3883,14 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId) if (copyToVram) { PutWindowTilemap(windowId); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } } void SetPpNumbersPaletteInMoveSelection(void) { - struct ChooseMoveStruct *chooseMoveStruct = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); - const u16 *palPtr = gUnknown_08D85620; + struct ChooseMoveStruct *chooseMoveStruct = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + const u16 *palPtr = gPPTextPalette; u8 var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], chooseMoveStruct->maxPp[gMoveSelectionCursor[gActiveBattler]]); @@ -3168,3 +3933,95 @@ u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp) return 0; } + +struct TrainerSlide +{ + u16 trainerId; + const u8 *msgLastSwitchIn; + const u8 *msgLastLowHp; + const u8 *msgFirstDown; +}; + +static const struct TrainerSlide sTrainerSlides[] = +{ + /* Put any trainer slide-in messages inside this array. + Example: + { + .trainerId = TRAINER_WALLY_VR_2, + .msgLastSwitchIn = sText_AarghAlmostHadIt, + .msgLastLowHp = sText_BoxIsFull, + .msgFirstDown = sText_123Poof, + }, + */ +}; + +static u32 GetEnemyMonCount(bool32 onlyAlive) +{ + u32 i, count = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL); + if (species != SPECIES_NONE + && species != SPECIES_EGG + && (!onlyAlive || GetMonData(&gEnemyParty[i], MON_DATA_HP, NULL))) + count++; + } + + return count; +} + +static bool32 IsBattlerHpLow(u32 battler) +{ + if ((gBattleMons[battler].hp * 100) / gBattleMons[battler].maxHP < 25) + return TRUE; + else + return FALSE; +} + +bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) +{ + s32 i; + + if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) || GetBattlerSide(battlerId) != B_SIDE_OPPONENT) + return FALSE; + + for (i = 0; i < ARRAY_COUNT(sTrainerSlides); i++) + { + if (trainerId == sTrainerSlides[i].trainerId) + { + gBattleScripting.battler = battlerId; + switch (which) + { + case TRAINER_SLIDE_LAST_SWITCHIN: + if (sTrainerSlides[i].msgLastSwitchIn != NULL && GetEnemyMonCount(TRUE) == 1) + { + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastSwitchIn; + return TRUE; + } + break; + case TRAINER_SLIDE_LAST_LOW_HP: + if (sTrainerSlides[i].msgLastLowHp != NULL + && GetEnemyMonCount(TRUE) == 1 + && IsBattlerHpLow(battlerId) + && !gBattleStruct->trainerSlideLowHpMsgDone) + { + gBattleStruct->trainerSlideLowHpMsgDone = TRUE; + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastLowHp; + return TRUE; + } + break; + case TRAINER_SLIDE_FIRST_DOWN: + if (sTrainerSlides[i].msgFirstDown != NULL && GetEnemyMonCount(TRUE) == GetEnemyMonCount(FALSE) - 1) + { + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgFirstDown; + return TRUE; + } + break; + } + break; + } + } + + return FALSE; +} diff --git a/src/battle_palace.c b/src/battle_palace.c index 6336662546..0fa65200a6 100644 --- a/src/battle_palace.c +++ b/src/battle_palace.c @@ -40,26 +40,26 @@ static void (* const sBattlePalaceFunctions[])(void) = [BATTLE_PALACE_FUNC_GIVE_PRIZE] = GivePalacePrize, }; -static const u16 sBattlePalaceEarlyPrizes[] = +static const u16 sBattlePalaceEarlyPrizes[] = { - ITEM_HP_UP, - ITEM_PROTEIN, - ITEM_IRON, - ITEM_CALCIUM, - ITEM_CARBOS, + ITEM_HP_UP, + ITEM_PROTEIN, + ITEM_IRON, + ITEM_CALCIUM, + ITEM_CARBOS, ITEM_ZINC }; -static const u16 sBattlePalaceLatePrizes[] = +static const u16 sBattlePalaceLatePrizes[] = { - ITEM_BRIGHT_POWDER, - ITEM_WHITE_HERB, - ITEM_QUICK_CLAW, - ITEM_LEFTOVERS, - ITEM_MENTAL_HERB, - ITEM_KINGS_ROCK, - ITEM_FOCUS_BAND, - ITEM_SCOPE_LENS, + ITEM_BRIGHT_POWDER, + ITEM_WHITE_HERB, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_MENTAL_HERB, + ITEM_KINGS_ROCK, + ITEM_FOCUS_BAND, + ITEM_SCOPE_LENS, ITEM_CHOICE_BAND }; @@ -93,7 +93,7 @@ static void InitPalaceChallenge(void) if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode])) gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); gTrainerBattleOpponent_A = 0; } diff --git a/src/battle_pike.c b/src/battle_pike.c index d889d7cddf..229f6211ba 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -17,7 +17,7 @@ #include "constants/battle_frontier.h" #include "constants/frontier_util.h" #include "constants/abilities.h" -#include "constants/easy_chat.h" +#include "constants/battle_config.h" #include "constants/layouts.h" #include "constants/rgb.h" #include "constants/trainers.h" @@ -685,7 +685,7 @@ static void SetBattlePikeData(void) static void IsNextRoomFinal(void) { - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum > 14) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum > NUM_PIKE_ROOMS) gSpecialVar_Result = TRUE; else gSpecialVar_Result = FALSE; @@ -810,7 +810,7 @@ static void HealMon(struct Pokemon *mon) static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status) { - u8 ability = GetMonAbility(mon); + u16 ability = GetMonAbility(mon); bool8 ret = FALSE; switch (status) @@ -820,7 +820,7 @@ static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status) ret = TRUE; break; case STATUS1_BURN: - if (ability == ABILITY_WATER_VEIL) + if (ability == ABILITY_WATER_VEIL || ability == ABILITY_WATER_BUBBLE) ret = TRUE; break; case STATUS1_PARALYSIS: @@ -855,8 +855,9 @@ static bool8 DoesTypePreventStatus(u16 species, u32 status) ret = TRUE; break; case STATUS1_PARALYSIS: - if (gBaseStats[species].type1 == TYPE_GROUND || gBaseStats[species].type1 == TYPE_ELECTRIC - || gBaseStats[species].type2 == TYPE_GROUND || gBaseStats[species].type2 == TYPE_ELECTRIC) + if (gBaseStats[species].type1 == TYPE_GROUND || gBaseStats[species].type2 == TYPE_GROUND + || (B_PARALYZE_ELECTRIC >= GEN_6 && + (gBaseStats[species].type1 == TYPE_ELECTRIC || gBaseStats[species].type2 == TYPE_ELECTRIC))) ret = TRUE; break; case STATUS1_BURN: @@ -1118,20 +1119,20 @@ bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate) if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) { monLevel = GetHighestLevelInPlayerParty(); - if (monLevel < 60) + if (monLevel < FRONTIER_MIN_LEVEL_OPEN) { - monLevel = 60; + monLevel = FRONTIER_MIN_LEVEL_OPEN; } else { monLevel -= wildMons[headerId][pikeMonId].levelDelta; - if (monLevel < 60) - monLevel = 60; + if (monLevel < FRONTIER_MIN_LEVEL_OPEN) + monLevel = FRONTIER_MIN_LEVEL_OPEN; } } else { - monLevel = 50 - wildMons[headerId][pikeMonId].levelDelta; + monLevel = FRONTIER_MAX_LEVEL_50 - wildMons[headerId][pikeMonId].levelDelta; } if (checkKeenEyeIntimidate == TRUE && !CanEncounterWildMon(monLevel)) @@ -1159,11 +1160,11 @@ u8 GetBattlePikeWildMonHeaderId(void) u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; - if (winStreak <= 280) + if (winStreak <= 20 * NUM_PIKE_ROOMS) headerId = 0; - else if (winStreak <= 560) + else if (winStreak <= 40 * NUM_PIKE_ROOMS) headerId = 1; - else if (winStreak <= 840) + else if (winStreak <= 60 * NUM_PIKE_ROOMS) headerId = 2; else headerId = 3; @@ -1252,7 +1253,7 @@ static void Task_DoStatusInflictionScreenFlash(u8 taskId) { if (IsStatusInflictionScreenFlashTaskFinished()) { - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } } @@ -1393,10 +1394,10 @@ static void PrepareOneTrainer(bool8 difficult) if (!difficult) battleNum = 1; else - battleNum = 6; + battleNum = FRONTIER_STAGES_PER_CHALLENGE - 1; lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; + challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / NUM_PIKE_ROOMS; do { trainerId = GetRandomScaledFrontierTrainerId(challengeNum, battleNum); @@ -1410,7 +1411,7 @@ static void PrepareOneTrainer(bool8 difficult) gTrainerBattleOpponent_A = trainerId; gFacilityTrainers = gBattleFrontierTrainers; SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 14) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < NUM_PIKE_ROOMS) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A; } @@ -1419,7 +1420,7 @@ static void PrepareTwoTrainers(void) int i; u16 trainerId; u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u16 challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; + u16 challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / NUM_PIKE_ROOMS; gFacilityTrainers = gBattleFrontierTrainers; do @@ -1434,7 +1435,7 @@ static void PrepareTwoTrainers(void) gTrainerBattleOpponent_A = trainerId; SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 14) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= NUM_PIKE_ROOMS) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A; do @@ -1449,7 +1450,7 @@ static void PrepareTwoTrainers(void) gTrainerBattleOpponent_B = trainerId; SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_B, 1); - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 14) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < NUM_PIKE_ROOMS) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 2] = gTrainerBattleOpponent_B; } @@ -1457,7 +1458,7 @@ static void ClearPikeTrainerIds(void) { u8 i; - for (i = 0; i < 14; i++) + for (i = 0; i < NUM_PIKE_ROOMS; i++) gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF; } @@ -1625,7 +1626,7 @@ static bool8 CanEncounterWildMon(u8 enemyMonLevel) { if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) { - u8 monAbility = GetMonAbility(&gPlayerParty[0]); + u16 monAbility = GetMonAbility(&gPlayerParty[0]); if (monAbility == ABILITY_KEEN_EYE || monAbility == ABILITY_INTIMIDATE) { u8 playerMonLevel = GetMonData(&gPlayerParty[0], MON_DATA_LEVEL); diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 50efeecb4d..d1f418ccbe 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -26,6 +26,7 @@ #include "malloc.h" #include "overworld.h" #include "event_scripts.h" +#include "graphics.h" #include "constants/battle_frontier.h" #include "constants/battle_pyramid.h" #include "constants/event_objects.h" @@ -33,14 +34,11 @@ #include "constants/frontier_util.h" #include "constants/items.h" #include "constants/layouts.h" -#include "constants/maps.h" +#include "constants/metatile_labels.h" #include "constants/moves.h" #include "constants/trainers.h" extern const struct MapLayout *const gMapLayouts[]; -extern const u16 gUnknown_08D856C8[][16]; - - struct PyramidWildMon { @@ -85,18 +83,18 @@ static void ClearPyramidPartyHeldItems(void); static void SetPyramidFloorPalette(void); static void BattlePyramidStartMenu(void); static void RestorePyramidPlayerParty(void); -static void InitPyramidBagItems(u8 lvlMode); +static void InitPyramidBagItems(u8); static u8 GetPyramidFloorTemplateId(void); static u8 GetPostBattleDirectionHintTextIndex(int *, u8, u8); -static void Task_SetPyramidFloorPalette(u8 taskId); -static void MarkPyramidTrainerAsBattled(u16 trainerId); -static void GetPyramidFloorLayoutOffsets(u8 *layoutOffsets); +static void Task_SetPyramidFloorPalette(u8); +static void MarkPyramidTrainerAsBattled(u16); +static void GetPyramidFloorLayoutOffsets(u8 *); static void GetPyramidEntranceAndExitSquareIds(u8 *, u8 *); static void SetPyramidObjectPositionsUniformly(u8); static bool8 SetPyramidObjectPositionsInAndNearSquare(u8, u8); static bool8 SetPyramidObjectPositionsNearSquare(u8, u8); -static bool8 TrySetPyramidObjectEventPositionInSquare(u8 arg0, u8 *floorLayoutOffsets, u8 squareId, u8 objectEventId); -static bool8 TrySetPyramidObjectEventPositionAtCoords(bool8 objType, u8 x, u8 y, u8 *floorLayoutOffsets, u8 squareId, u8 objectEventId); +static bool8 TrySetPyramidObjectEventPositionInSquare(u8, u8 *, u8, u8); +static bool8 TrySetPyramidObjectEventPositionAtCoords(bool8, u8, u8, u8 *, u8, u8); // Const rom data. #define ABILITY_RANDOM 2 // For wild mons data. @@ -281,9 +279,9 @@ static const u8 sPyramidFloorTemplateOptions[][2] = {100, 15} }; -static const u8 sFloorTemplateOffsets[] = +static const u8 sFloorTemplateOffsets[FRONTIER_STAGES_PER_CHALLENGE] = { - 0, 4, 9, 14, 19, 24, 29, 0 + 0, 4, 9, 14, 19, 24, 29 }; static const u16 sPickupItemsLvl50[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] = @@ -291,23 +289,23 @@ static const u16 sPickupItemsLvl50[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] = {ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_CHERI_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_PECHA_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_RAWST_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, - {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, + {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_X_SPEED, ITEM_CHESTO_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_X_ACCURACY, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, - {ITEM_HYPER_POTION, ITEM_X_SPECIAL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, + {ITEM_HYPER_POTION, ITEM_X_SP_ATK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_GUARD_SPEC, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, - {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, + {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_X_SPEED, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_X_ACCURACY, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, - {ITEM_HYPER_POTION, ITEM_X_SPECIAL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, + {ITEM_HYPER_POTION, ITEM_X_SP_ATK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_GUARD_SPEC, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, - {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, + {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, }; static const u16 sPickupItemsLvlOpen[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] = @@ -315,23 +313,23 @@ static const u16 sPickupItemsLvlOpen[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] = {ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_CHERI_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_PECHA_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_RAWST_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, - {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, + {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_X_SPEED, ITEM_CHESTO_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_X_ACCURACY, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, - {ITEM_HYPER_POTION, ITEM_X_SPECIAL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, + {ITEM_HYPER_POTION, ITEM_X_SP_ATK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_GUARD_SPEC, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, - {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, + {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_X_SPEED, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_X_ACCURACY, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, - {ITEM_HYPER_POTION, ITEM_X_SPECIAL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, + {ITEM_HYPER_POTION, ITEM_X_SP_ATK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_GUARD_SPEC, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, {ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, - {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, + {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, }; static const u8 sPickupItemSlots[][2] = @@ -408,7 +406,7 @@ static const u8 sPickupItemSlots[][2] = {100, 9}, }; -static const u8 sPickupItemOffsets[] = {0, 9, 18, 27, 36, 45, 54}; +static const u8 sPickupItemOffsets[FRONTIER_STAGES_PER_CHALLENGE] = {0, 9, 18, 27, 36, 45, 54}; static const struct PyramidTrainerEncounterMusic sTrainerClassEncounterMusic[54] = { @@ -449,7 +447,7 @@ static const struct PyramidTrainerEncounterMusic sTrainerClassEncounterMusic[54] {TRAINER_CLASS_PKMN_BREEDER, TRAINER_ENCOUNTER_MUSIC_FEMALE}, {TRAINER_CLASS_COLLECTOR, TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS}, {TRAINER_CLASS_PKMN_RANGER, TRAINER_ENCOUNTER_MUSIC_COOL}, - {TRAINER_CLASS_PKMN_TRAINER_3, TRAINER_ENCOUNTER_MUSIC_MALE}, + {TRAINER_CLASS_RIVAL, TRAINER_ENCOUNTER_MUSIC_MALE}, {TRAINER_CLASS_YOUNG_COUPLE, TRAINER_ENCOUNTER_MUSIC_GIRL}, {TRAINER_CLASS_PSYCHIC, TRAINER_ENCOUNTER_MUSIC_INTENSE}, {TRAINER_CLASS_SR_AND_JR, TRAINER_ENCOUNTER_MUSIC_TWINS}, @@ -965,7 +963,7 @@ static void SeedPyramidFloor(void) { int i; - for (i = 0; i < 4; i++) + for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.pyramidRandoms); i++) gSaveBlock2Ptr->frontier.pyramidRandoms[i] = Random(); gSaveBlock2Ptr->frontier.pyramidTrainerFlags = 0; @@ -979,7 +977,7 @@ static void SetPickupItem(void) u8 id; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 floor = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7) % TOTAL_ROUNDS; + u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_ROUNDS; if (round >= TOTAL_ROUNDS) round = TOTAL_ROUNDS - 1; @@ -1018,8 +1016,8 @@ static void HidePyramidItem(void) { // Rather than using event flags to hide the item object event, // it moves them far off the map bounds. - events[i].x = 0x7FFF; - events[i].y = 0x7FFF; + events[i].x = SHRT_MAX; + events[i].y = SHRT_MAX; break; } i++; @@ -1065,7 +1063,7 @@ static void ShowPostBattleHintText(void) case HINT_REMAINING_ITEMS: for (i = 0; i < GetNumBattlePyramidObjectEvents(); i++) { - if (events[i].graphicsId == OBJ_EVENT_GFX_ITEM_BALL && events[i].x != 0x7FFF && events[i].y != 0x7FFF) + if (events[i].graphicsId == OBJ_EVENT_GFX_ITEM_BALL && events[i].x != SHRT_MAX && events[i].y != SHRT_MAX) textIndex++; } i = 1; @@ -1073,7 +1071,7 @@ static void ShowPostBattleHintText(void) case HINT_REMAINING_TRAINERS: id = GetPyramidFloorTemplateId(); textIndex = sPyramidFloorTemplates[id].numTrainers; - for (i = 0; i < 8; i++) + for (i = 0; i < MAX_PYRAMID_TRAINERS; i++) { if (gBitTable[i] & gSaveBlock2Ptr->frontier.pyramidTrainerFlags) textIndex--; @@ -1187,7 +1185,7 @@ static void Task_SetPyramidFloorPalette(u8 taskId) { if (gPaletteFade.active) { - CpuCopy16(gUnknown_08D856C8[gSaveBlock2Ptr->frontier.curChallengeBattleNum], &gPlttBufferUnfaded[96], 32); + CpuCopy16(gBattlePyramidFloor_Pal[gSaveBlock2Ptr->frontier.curChallengeBattleNum], &gPlttBufferUnfaded[96], 32); DestroyTask(taskId); } } @@ -1235,16 +1233,16 @@ static u8 GetPostBattleDirectionHintTextIndex(int *hintType, u8 minDistanceForEx int x, y; u8 textIndex = 0; u16 *map = gBackupMapLayout.map; - map += gBackupMapLayout.width * 7 + 7; + map += gBackupMapLayout.width * 7 + MAP_OFFSET; for (y = 0; y < 32; map += 47, y++) { for (x = 0; x < 32; x++) { - if ((map[x] & METATILE_ID_MASK) == FLOOR_EXIT_METATILE) + if ((map[x] & MAPGRID_METATILE_ID_MASK) == METATILE_BattlePyramid_Exit) { - x += 7 - gObjectEvents[gSelectedObjectEvent].initialCoords.x; - y += 7 - gObjectEvents[gSelectedObjectEvent].initialCoords.y; + x += MAP_OFFSET - gObjectEvents[gSelectedObjectEvent].initialCoords.x; + y += MAP_OFFSET - gObjectEvents[gSelectedObjectEvent].initialCoords.y; if (x >= minDistanceForExitHint || x <= -minDistanceForExitHint || y >= minDistanceForExitHint @@ -1328,7 +1326,7 @@ static void MarkPyramidTrainerAsBattled(u16 trainerId) { int i; - for (i = 0; i < 8; i++) + for (i = 0; i < MAX_PYRAMID_TRAINERS; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId) gSaveBlock2Ptr->frontier.pyramidTrainerFlags |= gBitTable[i]; @@ -1347,7 +1345,7 @@ void GenerateBattlePyramidWildMon(void) const struct PyramidWildMon *wildMons; u32 id; u32 lvl = gSaveBlock2Ptr->frontier.lvlMode; - u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / 7) % TOTAL_ROUNDS; + u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_ROUNDS; if (round >= TOTAL_ROUNDS) round = TOTAL_ROUNDS - 1; @@ -1467,7 +1465,7 @@ void CopyPyramidTrainerLoseSpeech(u16 trainerId) FrontierSpeechToString(gFacilityTrainers[trainerId].speechLose); } -u8 GetBattlePyramindTrainerEncounterMusicId(u16 trainerId) +u8 GetTrainerEncounterMusicIdInBattlePyramid(u16 trainerId) { int i; @@ -1482,7 +1480,7 @@ u8 GetBattlePyramindTrainerEncounterMusicId(u16 trainerId) // Unused static void BattlePyramidRetireChallenge(void) { - ScriptContext1_SetupScript(BattlePyramid_Retire); + ScriptContext_SetupScript(BattlePyramid_Retire); } static u16 GetUniqueTrainerId(u8 objectEventId) @@ -1490,13 +1488,13 @@ static u16 GetUniqueTrainerId(u8 objectEventId) int i; u16 trainerId; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u32 challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7; - u32 battleNum = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - if (battleNum == 7) + u32 challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; + u32 floor = gSaveBlock2Ptr->frontier.curChallengeBattleNum; + if (floor == FRONTIER_STAGES_PER_CHALLENGE) { do { - trainerId = GetRandomScaledFrontierTrainerId(challengeNum + 1, battleNum); + trainerId = GetRandomScaledFrontierTrainerId(challengeNum + 1, floor); for (i = 0; i < objectEventId; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId) @@ -1508,7 +1506,7 @@ static u16 GetUniqueTrainerId(u8 objectEventId) { do { - trainerId = GetRandomScaledFrontierTrainerId(challengeNum, battleNum); + trainerId = GetRandomScaledFrontierTrainerId(challengeNum, floor); for (i = 0; i < objectEventId; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId) @@ -1525,11 +1523,11 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio int y, x; int i; u8 entranceSquareId, exitSquareId; - u8 *floorLayoutOffsets = AllocZeroed(16); + u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES); GetPyramidFloorLayoutOffsets(floorLayoutOffsets); GetPyramidEntranceAndExitSquareIds(&entranceSquareId, &exitSquareId); - for (i = 0; i < 16; i++) + for (i = 0; i < NUM_PYRAMID_FLOOR_SQUARES; i++) { u16 *map; int yOffset, xOffset; @@ -1537,17 +1535,17 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio const u16 *layoutMap = mapLayout->map; gBackupMapLayout.map = backupMapData; - gBackupMapLayout.width = mapLayout->width * 4 + 15; - gBackupMapLayout.height = mapLayout->height * 4 + 14; + gBackupMapLayout.width = mapLayout->width * PYRAMID_FLOOR_SQUARES_WIDE + MAP_OFFSET_W; + gBackupMapLayout.height = mapLayout->height * PYRAMID_FLOOR_SQUARES_HIGH + MAP_OFFSET_H; map = backupMapData; - yOffset = ((i / 4 * mapLayout->height) + 7) * gBackupMapLayout.width; - xOffset = (i % 4 * mapLayout->width) + 7; + yOffset = ((i / PYRAMID_FLOOR_SQUARES_WIDE * mapLayout->height) + MAP_OFFSET) * gBackupMapLayout.width; + xOffset = (i % PYRAMID_FLOOR_SQUARES_WIDE * mapLayout->width) + MAP_OFFSET; map += yOffset + xOffset; for (y = 0; y < mapLayout->height; y++) { for (x = 0; x < mapLayout->width; x++) { - if ((layoutMap[x] & METATILE_ID_MASK) != FLOOR_EXIT_METATILE) + if ((layoutMap[x] & MAPGRID_METATILE_ID_MASK) != METATILE_BattlePyramid_Exit) { map[x] = layoutMap[x]; } @@ -1555,17 +1553,17 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio { if (i == entranceSquareId && setPlayerPosition == FALSE) { - gSaveBlock1Ptr->pos.x = (mapLayout->width * (i % 4)) + x; - gSaveBlock1Ptr->pos.y = (mapLayout->height * (i / 4)) + y; + gSaveBlock1Ptr->pos.x = (mapLayout->width * (i % PYRAMID_FLOOR_SQUARES_WIDE)) + x; + gSaveBlock1Ptr->pos.y = (mapLayout->height * (i / PYRAMID_FLOOR_SQUARES_WIDE)) + y; } - map[x] = (layoutMap[x] & 0xFC00) | FLOOR_WALKABLE_METATILE; + map[x] = (layoutMap[x] & (MAPGRID_ELEVATION_MASK | MAPGRID_COLLISION_MASK)) | METATILE_BattlePyramid_Floor; } else { map[x] = layoutMap[x]; } } - map += 15 + (mapLayout->width * 4); + map += MAP_OFFSET_W + (mapLayout->width * PYRAMID_FLOOR_SQUARES_WIDE); layoutMap += mapLayout->width; } } @@ -1579,7 +1577,7 @@ void LoadBattlePyramidObjectEventTemplates(void) u8 id; u8 entranceSquareId, exitSquareId; - for (i = 0; i < 8; i++) + for (i = 0; i < MAX_PYRAMID_TRAINERS; i++) gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF; id = GetPyramidFloorTemplateId(); @@ -1635,13 +1633,13 @@ void LoadBattlePyramidFloorObjectEventScripts(void) static void GetPyramidEntranceAndExitSquareIds(u8 *entranceSquareId, u8 *exitSquareId) { - *entranceSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[3] % 16; - *exitSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[0] % 16; + *entranceSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[3] % NUM_PYRAMID_FLOOR_SQUARES; + *exitSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[0] % NUM_PYRAMID_FLOOR_SQUARES; if (*entranceSquareId == *exitSquareId) { - *entranceSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[3] + 1 ) % 16; - *exitSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[0] + 15) % 16; + *entranceSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[3] + 1 ) % NUM_PYRAMID_FLOOR_SQUARES; + *exitSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[0] + NUM_PYRAMID_FLOOR_SQUARES - 1) % NUM_PYRAMID_FLOOR_SQUARES; } } @@ -1653,10 +1651,10 @@ static void SetPyramidObjectPositionsUniformly(u8 objType) int squareId; u32 bits = 0; u8 id = GetPyramidFloorTemplateId(); - u8 *floorLayoutOffsets = AllocZeroed(16); + u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES); GetPyramidFloorLayoutOffsets(floorLayoutOffsets); - squareId = gSaveBlock2Ptr->frontier.pyramidRandoms[2] % 16; + squareId = gSaveBlock2Ptr->frontier.pyramidRandoms[2] % NUM_PYRAMID_FLOOR_SQUARES; if (objType == OBJ_TRAINERS) { numObjects = sPyramidFloorTemplates[id].numTrainers; @@ -1684,10 +1682,10 @@ static void SetPyramidObjectPositionsUniformly(u8 objType) if (gBitTable[squareId] & gSaveBlock2Ptr->frontier.pyramidRandoms[3]) bits |= 2; } - if (++squareId >= 16) + if (++squareId >= NUM_PYRAMID_FLOOR_SQUARES) squareId = 0; - if (squareId == gSaveBlock2Ptr->frontier.pyramidRandoms[2] % 16) + if (squareId == gSaveBlock2Ptr->frontier.pyramidRandoms[2] % NUM_PYRAMID_FLOOR_SQUARES) { if (bits & 1) bits |= 6; @@ -1711,7 +1709,7 @@ static bool8 SetPyramidObjectPositionsInAndNearSquare(u8 objType, u8 squareId) int numPlacedObjects = 0; int numObjects; u8 id = GetPyramidFloorTemplateId(); - u8 *floorLayoutOffsets = AllocZeroed(16); + u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES); GetPyramidFloorLayoutOffsets(floorLayoutOffsets); if (objType == OBJ_TRAINERS) @@ -1777,7 +1775,7 @@ static bool8 SetPyramidObjectPositionsNearSquare(u8 objType, u8 squareId) int r8 = 0; int numObjects; u8 id = GetPyramidFloorTemplateId(); - u8 *floorLayoutOffsets = AllocZeroed(16); + u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES); GetPyramidFloorLayoutOffsets(floorLayoutOffsets); if (objType == OBJ_TRAINERS) @@ -1902,7 +1900,7 @@ static void GetPyramidFloorLayoutOffsets(u8 *layoutOffsets) int rand = (gSaveBlock2Ptr->frontier.pyramidRandoms[0]) | (gSaveBlock2Ptr->frontier.pyramidRandoms[1] << 16); u8 id = GetPyramidFloorTemplateId(); - for (i = 0; i < 16; i++) + for (i = 0; i < NUM_PYRAMID_FLOOR_SQUARES; i++) { layoutOffsets[i] = sPyramidFloorTemplates[id].layoutOffsets[rand & 0x7]; rand >>= 3; @@ -1933,7 +1931,7 @@ u8 GetNumBattlePyramidObjectEvents(void) u8 i; struct ObjectEventTemplate *events = gSaveBlock1Ptr->objectEventTemplates; - for (i = 0; i < 16; i++) + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { if (events[i].localId == 0) break; @@ -1961,7 +1959,7 @@ u16 GetBattlePyramidPickupItemId(void) int rand; u32 i; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - int round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7); + int round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE); if (round >= TOTAL_ROUNDS) round = TOTAL_ROUNDS - 1; diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 83bf35090b..9fab996da8 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -88,8 +88,8 @@ static void CopyBagItemName(u8 *, u16); static void FreeItemIconSpriteByAltId(u8); static void PrintItemDescription(s32); static void PrintSelectorArrowAtPos(u8, u8); -static void PrintOnWindow_Font1(u8, const u8 *, u8, u8, u8, u8, u8, u8); -static void PrintOnWindow_Font7(u8, const u8 *, u8, u8, u8, u8, u8, u8); +static void PyramidBagPrint(u8, const u8 *, u8, u8, u8, u8, u8, u8); +static void PyramidBagPrint_Quantity(u8, const u8 *, u8, u8, u8, u8, u8, u8); static u8 OpenMenuActionWindowById(u8); static void CloseMenuActionWindowById(u8); static void PrintMenuActionText_SingleRow(u8); @@ -159,7 +159,7 @@ static const struct ListMenuTemplate sListMenuTemplate = .lettersSpacing = 0, .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 7, + .fontId = FONT_NARROW, .cursorKind = 0 }; @@ -309,7 +309,7 @@ static const struct OamData sOamData_PyramidBag = .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -358,7 +358,7 @@ static const union AffineAnimCmd * const sAffineAnims_PyramidBag[] = [ANIM_BAG_SHAKE] = sAffineAnim_PyramidBag_Shake, }; -static const struct CompressedSpriteSheet sSpriteSheet_PyramidBag = {gBattleFrontierGfx_PyramidBag, 0x0800, TAG_PYRAMID_BAG}; +static const struct CompressedSpriteSheet sSpriteSheet_PyramidBag = {gBattlePyramidBag_Gfx, 0x0800, TAG_PYRAMID_BAG}; static const struct SpriteTemplate sSpriteTemplate_PyramidBag = { @@ -393,7 +393,7 @@ static void OpenBattlePyramidBagInBattle(void) // make room. void ChooseItemsToTossFromPyramidBag(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FadeScreen(FADE_TO_BLACK, 0); CreateTask(Task_ChooseItemsToTossFromPyramidBag, 10); } @@ -452,9 +452,9 @@ static void VBlankCB_PyramidBag(void) static void CB2_LoadPyramidBagMenu(void) { - while (MenuHelpers_CallLinkSomething() != TRUE - && LoadPyramidBagMenu() != TRUE - && MenuHelpers_LinkSomething() != TRUE); + while (MenuHelpers_ShouldWaitForLinkRecv() != TRUE + && LoadPyramidBagMenu() != TRUE + && MenuHelpers_IsLinkActive() != TRUE); } static bool8 LoadPyramidBagMenu(void) @@ -484,7 +484,7 @@ static bool8 LoadPyramidBagMenu(void) gMain.state++; break; case 5: - if (!MenuHelpers_LinkSomething()) + if (!MenuHelpers_IsLinkActive()) ResetTasks(); gMain.state++; break; @@ -573,12 +573,12 @@ static bool8 LoadPyramidBagGfx(void) case 1: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - LZDecompressWram(gBattleFrontierGfx_PyramidBagTileMap, gPyramidBagMenu->tilemapBuffer); + LZDecompressWram(gBattlePyramidBagTilemap, gPyramidBagMenu->tilemapBuffer); gPyramidBagMenu->state++; } break; case 2: - LoadCompressedPalette(gUnknown_08D9AF44, 0, 32); + LoadCompressedPalette(gBattlePyramidBagInterface_Pal, 0, 32); gPyramidBagMenu->state++; break; case 3: @@ -672,8 +672,8 @@ static void PrintItemQuantity(u8 windowId, u32 itemIndex, u8 y) STR_CONV_MODE_RIGHT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_xVar1); - xAlign = GetStringRightAlignXOffset(7, gStringVar4, 119); - PrintOnWindow_Font7(windowId, gStringVar4, xAlign, y, 0, 0, TEXT_SPEED_FF, COLORID_DARK_GRAY); + xAlign = GetStringRightAlignXOffset(FONT_NARROW, gStringVar4, 119); + PyramidBagPrint_Quantity(windowId, gStringVar4, xAlign, y, 0, 0, TEXT_SKIP_DRAW, COLORID_DARK_GRAY); } static void PrintItemDescription(s32 listMenuId) @@ -690,15 +690,15 @@ static void PrintItemDescription(s32 listMenuId) desc = gStringVar4; } FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); - PrintOnWindow_Font1(WIN_INFO, desc, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); + PyramidBagPrint(WIN_INFO, desc, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); } static void AddScrollArrows(void) { if (gPyramidBagMenu->scrollIndicatorsTaskId == TASK_NONE) - gPyramidBagMenu->scrollIndicatorsTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 172, 12, 148, - gPyramidBagMenu->listMenuCount - gPyramidBagMenu->listMenuMaxShown, - TAG_SCROLL_ARROW, TAG_SCROLL_ARROW, + gPyramidBagMenu->scrollIndicatorsTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 172, 12, 148, + gPyramidBagMenu->listMenuCount - gPyramidBagMenu->listMenuMaxShown, + TAG_SCROLL_ARROW, TAG_SCROLL_ARROW, &gPyramidBagMenuState.scrollPosition); } @@ -849,9 +849,9 @@ static void PrintSelectorArrow(u8 listMenuTaskId, u8 colorId) static void PrintSelectorArrowAtPos(u8 y, u8 colorId) { if (colorId == COLORID_NONE) // If 'no color', erase arrow - FillWindowPixelRect(WIN_LIST, PIXEL_FILL(0), 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1)); + FillWindowPixelRect(WIN_LIST, PIXEL_FILL(0), 0, y, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), GetMenuCursorDimensionByFont(FONT_NORMAL, 1)); else - PrintOnWindow_Font1(WIN_LIST, gText_SelectorArrow2, 0, y, 0, 0, 0, colorId); + PyramidBagPrint(WIN_LIST, gText_SelectorArrow2, 0, y, 0, 0, 0, colorId); } void CloseBattlePyramidBag(u8 taskId) @@ -866,7 +866,7 @@ static void Task_ClosePyramidBag(u8 taskId) if (!gPaletteFade.active) { DestroyListMenuTask(tListTaskId, &gPyramidBagMenuState.scrollPosition, &gPyramidBagMenuState.cursorPosition); - + // If ready for a new screen (e.g. party menu for giving an item) go to that screen // Otherwise exit the bag and use callback set up when the bag was first opened if (gPyramidBagMenu->newScreenCallback != NULL) @@ -885,7 +885,7 @@ static void Task_ClosePyramidBag(u8 taskId) static void Task_HandlePyramidBagInput(u8 taskId) { s16 *data = gTasks[taskId].data; - if (MenuHelpers_CallLinkSomething() == TRUE || gPaletteFade.active) + if (MenuHelpers_ShouldWaitForLinkRecv() == TRUE || gPaletteFade.active) return; if (JOY_NEW(SELECT_BUTTON)) @@ -937,7 +937,7 @@ static void OpenContextMenu(u8 taskId) { default: // case PYRAMIDBAG_LOC_FIELD: -// case PYRAMIDBAG_LOC_PARTY: +// case PYRAMIDBAG_LOC_PARTY: gPyramidBagMenu->menuActionIds = sMenuActionIds_Field; gPyramidBagMenu->menuActionsCount = ARRAY_COUNT(sMenuActionIds_Field); break; @@ -962,7 +962,7 @@ static void OpenContextMenu(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); - PrintOnWindow_Font1(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); + PyramidBagPrint(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); if (gPyramidBagMenu->menuActionsCount == 1) PrintMenuActionText_SingleRow(OpenMenuActionWindowById(MENU_WIN_1x1)); else if (gPyramidBagMenu->menuActionsCount == 2) @@ -978,19 +978,19 @@ static void OpenContextMenu(u8 taskId) static void PrintMenuActionText_SingleRow(u8 windowId) { - AddItemMenuActionTextPrinters(windowId, 7, 8, 1, 0, 0x10, gPyramidBagMenu->menuActionsCount, sMenuActions, gPyramidBagMenu->menuActionIds); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, gPyramidBagMenu->menuActionsCount, 0); + PrintMenuActionTexts(windowId, FONT_NARROW, 8, 1, 0, 0x10, gPyramidBagMenu->menuActionsCount, sMenuActions, gPyramidBagMenu->menuActionIds); + InitMenuInUpperLeftCornerNormal(windowId, gPyramidBagMenu->menuActionsCount, 0); } static void PrintMenuActionText_MultiRow(u8 windowId, u8 horizontalCount, u8 verticalCount) { - PrintMenuActionGrid(windowId, 7, 8, 1, 56, horizontalCount, verticalCount, sMenuActions, gPyramidBagMenu->menuActionIds); + PrintMenuActionGrid(windowId, FONT_NARROW, 8, 1, 56, horizontalCount, verticalCount, sMenuActions, gPyramidBagMenu->menuActionIds); InitMenuActionGrid(windowId, 56, horizontalCount, verticalCount, 0); } static void HandleMenuActionInput_SingleRow(u8 taskId) { - if (MenuHelpers_CallLinkSomething() != TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { s32 id = Menu_ProcessInputNoWrap(); switch (id) @@ -1012,7 +1012,7 @@ static void HandleMenuActionInput_SingleRow(u8 taskId) static void HandleMenuActionInput_2x2(u8 taskId) { - if (MenuHelpers_CallLinkSomething() != TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { s8 id = Menu_GetCursorPos(); if (JOY_NEW(DPAD_UP)) @@ -1020,7 +1020,7 @@ static void HandleMenuActionInput_2x2(u8 taskId) if (id > 0 && IsValidMenuAction(id - 2)) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); } } else if (JOY_NEW(DPAD_DOWN)) @@ -1028,7 +1028,7 @@ static void HandleMenuActionInput_2x2(u8 taskId) if (id < gPyramidBagMenu->menuActionsCount - 2 && IsValidMenuAction(id + 2)) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); } } else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) @@ -1036,7 +1036,7 @@ static void HandleMenuActionInput_2x2(u8 taskId) if (id & 1 && IsValidMenuAction(id - 1)) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); } } else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) @@ -1044,7 +1044,7 @@ static void HandleMenuActionInput_2x2(u8 taskId) if (!(id & 1) && IsValidMenuAction(id + 1)) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); } } else if (JOY_NEW(A_BUTTON)) @@ -1137,7 +1137,7 @@ static void BagAction_Toss(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_TossHowManyVar1s); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); - PrintOnWindow_Font1(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); + PyramidBagPrint(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); ShowNumToToss(); gTasks[taskId].func = Task_ChooseHowManyToToss; } @@ -1151,7 +1151,7 @@ static void AskConfirmToss(u8 taskId) ConvertIntToDecimalStringN(gStringVar2, tNumToToss, STR_CONV_MODE_LEFT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); - PrintOnWindow_Font1(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); + PyramidBagPrint(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); CreatePyramidBagYesNo(taskId, &sYesNoTossFuncions); } @@ -1170,8 +1170,8 @@ static void ShowNumToToss(void) ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_xVar1); DrawTossNumberWindow(WIN_TOSS_NUM); - x = GetStringCenterAlignXOffset(1, gStringVar4, 0x28); - AddTextPrinterParameterized(WIN_TOSS_NUM, 1, gStringVar4, x, 2, 0, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 0x28); + AddTextPrinterParameterized(WIN_TOSS_NUM, FONT_NORMAL, gStringVar4, x, 2, 0, NULL); } static void UpdateNumToToss(s16 num) @@ -1179,8 +1179,8 @@ static void UpdateNumToToss(s16 num) s32 x; ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_xVar1); - x = GetStringCenterAlignXOffset(1, gStringVar4, 0x28); - AddTextPrinterParameterized(WIN_TOSS_NUM, 1, gStringVar4, x, 2, 0, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 0x28); + AddTextPrinterParameterized(WIN_TOSS_NUM, FONT_NORMAL, gStringVar4, x, 2, 0, NULL); } static void Task_ChooseHowManyToToss(u8 taskId) @@ -1195,7 +1195,7 @@ static void Task_ChooseHowManyToToss(u8 taskId) { // Toss PlaySE(SE_SELECT); - ClearStdWindowAndFrameToTransparent(WIN_TOSS_NUM, 0); + ClearStdWindowAndFrameToTransparent(WIN_TOSS_NUM, FALSE); ClearWindowTilemap(WIN_TOSS_NUM); ScheduleBgCopyTilemapToVram(1); AskConfirmToss(taskId); @@ -1204,7 +1204,7 @@ static void Task_ChooseHowManyToToss(u8 taskId) { // Cancel tossing PlaySE(SE_SELECT); - ClearStdWindowAndFrameToTransparent(WIN_TOSS_NUM, 0); + ClearStdWindowAndFrameToTransparent(WIN_TOSS_NUM, FALSE); ClearWindowTilemap(WIN_TOSS_NUM); ScheduleBgCopyTilemapToVram(1); DontTossItem(taskId); @@ -1219,7 +1219,7 @@ static void TossItem(u8 taskId) ConvertIntToDecimalStringN(gStringVar2, tNumToToss, STR_CONV_MODE_LEFT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); - PrintOnWindow_Font1(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); + PyramidBagPrint(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); gTasks[taskId].func = Task_TossItem; } @@ -1316,7 +1316,7 @@ static void Task_BeginItemSwap(u8 taskId) CopyItemName(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][tListPos], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); - PrintOnWindow_Font1(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); + PyramidBagPrint(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY); PrintSelectorArrow(tListTaskId, COLORID_LIGHT_GRAY); UpdateSwapLinePos(tListPos); gTasks[taskId].func = Task_ItemSwapHandleInput; @@ -1325,7 +1325,7 @@ static void Task_BeginItemSwap(u8 taskId) static void Task_ItemSwapHandleInput(u8 taskId) { s16 *data = gTasks[taskId].data; - if (MenuHelpers_CallLinkSomething() != TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { if (JOY_NEW(SELECT_BUTTON)) { @@ -1410,7 +1410,7 @@ void TryStoreHeldItemsInPyramidBag(void) memcpy(newItems, gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode], PYRAMID_BAG_ITEMS_COUNT * sizeof(u16)); memcpy(newQuantities, gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode], PYRAMID_BAG_ITEMS_COUNT * sizeof(u8)); - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { heldItem = GetMonData(&party[i], MON_DATA_HELD_ITEM); if (heldItem != ITEM_NONE && !AddBagItem(heldItem, 1)) @@ -1426,10 +1426,8 @@ void TryStoreHeldItemsInPyramidBag(void) } heldItem = ITEM_NONE; - for (i = 0; i < 3; i++) - { + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) SetMonData(&party[i], MON_DATA_HELD_ITEM, &heldItem); - } gSpecialVar_Result = 0; Free(newItems); Free(newQuantities); @@ -1443,7 +1441,7 @@ static void InitPyramidBagWindows(void) DeactivateAllTextPrinters(); LoadUserWindowBorderGfx(0, 0x1, 0xE0); LoadMessageBoxGfx(0, 0xA, 0xD0); - LoadPalette(gUnknown_0860F074, 0xF0, 0x20); + LoadPalette(gStandardMenuPalette, 0xF0, 0x20); for (i = 0; i < ARRAY_COUNT(sWindowTemplates); i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -1454,19 +1452,19 @@ static void InitPyramidBagWindows(void) ScheduleBgCopyTilemapToVram(1); } -static void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) +static void PyramidBagPrint(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) { - AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, sTextColors[colorTableId], speed, src); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, letterSpacing, lineSpacing, sTextColors[colorTableId], speed, src); } -static void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) +static void PyramidBagPrint_Quantity(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) { - AddTextPrinterParameterized4(windowId, 7, x, y, letterSpacing, lineSpacing, sTextColors[colorTableId], speed, src); + AddTextPrinterParameterized4(windowId, FONT_NARROW, x, y, letterSpacing, lineSpacing, sTextColors[colorTableId], speed, src); } static void DrawTossNumberWindow(u8 windowId) { - DrawStdFrameWithCustomTileAndPalette(windowId, 0, 1, 0xE); + DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, 1, 0xE); ScheduleBgCopyTilemapToVram(1); } @@ -1509,7 +1507,7 @@ static void CreatePyramidBagYesNo(u8 taskId, const struct YesNoFuncTable *yesNoT void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback)(u8 taskId)) { FillWindowPixelBuffer(WIN_MSG, PIXEL_FILL(1)); - DisplayMessageAndContinueTask(taskId, WIN_MSG, 0xA, 0xD, 1, GetPlayerTextSpeedDelay(), str, callback); + DisplayMessageAndContinueTask(taskId, WIN_MSG, 0xA, 0xD, FONT_NORMAL, GetPlayerTextSpeedDelay(), str, callback); ScheduleBgCopyTilemapToVram(1); } @@ -1541,7 +1539,7 @@ static void LoadPyramidBagPalette(void) struct SpritePalette spritePalette; u16 *palPtr = Alloc(0x40); - LZDecompressWram(gBattleFrontierGfx_PyramidBag_Pal, palPtr); + LZDecompressWram(gBattlePyramidBag_Pal, palPtr); spritePalette.data = palPtr + (gSaveBlock2Ptr->frontier.lvlMode * 16); spritePalette.tag = TAG_PYRAMID_BAG; LoadSpritePalette(&spritePalette); @@ -1608,5 +1606,5 @@ static void SetSwapLineInvisibility(bool8 invisible) static void UpdateSwapLinePos(u8 y) { - UpdateSwapLineSpritesPos(&gPyramidBagMenu->spriteIds[PBAG_SPRITE_SWAP_LINE_START], NUM_SWAP_LINE_SPRITES | 0x80, 120, (y + 1) * 16); + UpdateSwapLineSpritesPos(&gPyramidBagMenu->spriteIds[PBAG_SPRITE_SWAP_LINE_START], NUM_SWAP_LINE_SPRITES | SWAP_LINE_HAS_MARGIN, 120, (y + 1) * 16); } diff --git a/src/battle_records.c b/src/battle_records.c index 5dff8e6d34..6cab28d21b 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -24,21 +24,18 @@ #include "trainer_hill.h" #include "constants/rgb.h" -// this file's functions static void Task_CloseTrainerHillRecordsOnButton(u8 taskId); static void Task_BeginPaletteFade(u8 taskId); static void Task_ExitTrainerHillRecords(u8 taskId); static void RemoveTrainerHillRecordsWindow(u8 windowId); static void CB2_ShowTrainerHillRecords(void); -// EWRAM variables EWRAM_DATA u8 gRecordsWindowId = 0; EWRAM_DATA static u8 *sTilemapBuffer = NULL; -// const rom data -static const u32 sTrainerHillWindowTileset[] = INCBIN_U32("graphics/unknown/unknown_5B3484.4bpp"); -static const u16 sTrainerHillWindowPalette[] = INCBIN_U16("graphics/unknown/unknown_5B3484.gbapal"); -static const u32 sTrainerHillWindowTilemap[] = INCBIN_U32("graphics/unknown/unknown_5B3564.bin"); +static const u32 sTrainerHillWindowTileset[] = INCBIN_U32("graphics/trainer_hill/records_window.4bpp"); +static const u16 sTrainerHillWindowPalette[] = INCBIN_U16("graphics/trainer_hill/records_window.gbapal"); +static const u32 sTrainerHillWindowTilemap[] = INCBIN_U32("graphics/trainer_hill/records_window.bin"); static const struct BgTemplate sTrainerHillRecordsBgTemplates[] = { @@ -282,8 +279,8 @@ static void PrintLinkBattleWinsLossesDraws(struct LinkBattleRecord *records) ConvertIntToDecimalStringN(gStringVar3, GetGameStat(GAME_STAT_LINK_BATTLE_DRAWS), STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_TotalRecordWLD); - x = GetStringCenterAlignXOffset(1, gStringVar4, 0xD0); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x, 0x11, 0, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 0xD0); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x, 0x11, 0, NULL); } static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y, s32 language) @@ -291,10 +288,10 @@ static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y, s32 lan if (record->wins == 0 && record->losses == 0 && record->draws == 0) { // empty slot - AddTextPrinterParameterized(gRecordsWindowId, 1, sText_DashesNoPlayer, 8, (y * 8) + 1, 0, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, sText_DashesNoScore, 80, (y * 8) + 1, 0, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, sText_DashesNoScore, 128, (y * 8) + 1, 0, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, sText_DashesNoScore, 176, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, sText_DashesNoPlayer, 8, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, sText_DashesNoScore, 80, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, sText_DashesNoScore, 128, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, sText_DashesNoScore, 176, (y * 8) + 1, 0, NULL); } else { @@ -302,16 +299,16 @@ static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y, s32 lan StringCopyN(gStringVar1, record->name, 7); ConvertInternationalString(gStringVar1, language); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar1, 8, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar1, 8, (y * 8) + 1, 0, NULL); ConvertIntToDecimalStringN(gStringVar1, record->wins, STR_CONV_MODE_RIGHT_ALIGN, 4); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar1, 80, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar1, 80, (y * 8) + 1, 0, NULL); ConvertIntToDecimalStringN(gStringVar1, record->losses, STR_CONV_MODE_RIGHT_ALIGN, 4); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar1, 128, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar1, 128, (y * 8) + 1, 0, NULL); ConvertIntToDecimalStringN(gStringVar1, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar1, 176, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar1, 176, (y * 8) + 1, 0, NULL); } } @@ -324,12 +321,12 @@ void ShowLinkBattleRecords(void) FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); StringExpandPlaceholders(gStringVar4, gText_PlayersBattleResults); - x = GetStringCenterAlignXOffset(1, gStringVar4, 208); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x, 1, 0, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 208); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x, 1, 0, NULL); PrintLinkBattleWinsLossesDraws(gSaveBlock1Ptr->linkBattleRecords.entries); StringExpandPlaceholders(gStringVar4, gText_WinLoseDraw); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, 0, 41, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, 0, 41, 0, NULL); for (i = 0; i < LINK_B_RECORDS_COUNT; i++) { @@ -337,7 +334,7 @@ void ShowLinkBattleRecords(void) } PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } void RemoveRecordsWindow(void) @@ -385,13 +382,13 @@ static void RemoveTrainerHillRecordsWindow(u8 windowId) { FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); ClearWindowTilemap(windowId); - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); RemoveWindow(windowId); } static void ClearVramOamPlttRegs(void) { - DmaClearLarge16(3, (void*)(VRAM), VRAM_SIZE, 0x1000); + DmaClearLarge16(3, (void *)(VRAM), VRAM_SIZE, 0x1000); DmaClear32(3, OAM, OAM_SIZE); DmaClear16(3, PLTT, PLTT_SIZE); @@ -428,14 +425,14 @@ static void ClearTasksAndGraphicalStructs(void) static void ResetBgCoordinates(void) { - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); } static void SetDispcntReg(void) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 07a9025936..18fa5bbdff 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1,25 +1,19 @@ #include "global.h" #include "battle.h" -#include "constants/battle_move_effects.h" -#include "constants/battle_script_commands.h" #include "battle_message.h" #include "battle_anim.h" -#include "battle_ai_script_commands.h" +#include "battle_ai_main.h" +#include "battle_ai_util.h" #include "battle_scripts.h" +#include "battle_z_move.h" #include "constants/moves.h" #include "constants/abilities.h" #include "item.h" -#include "constants/items.h" -#include "constants/hold_effects.h" #include "util.h" #include "pokemon.h" #include "random.h" #include "battle_controllers.h" #include "battle_interface.h" -#include "constants/songs.h" -#include "constants/trainers.h" -#include "constants/battle_anim.h" -#include "constants/map_types.h" #include "text.h" #include "sound.h" #include "pokedex.h" @@ -38,10 +32,12 @@ #include "pokemon_storage_system.h" #include "task.h" #include "naming_screen.h" -#include "constants/battle_string_ids.h" #include "battle_setup.h" #include "overworld.h" +#include "wild_encounter.h" +#include "rtc.h" #include "party_menu.h" +#include "constants/battle_config.h" #include "battle_arena.h" #include "battle_pike.h" #include "battle_pyramid.h" @@ -49,32 +45,278 @@ #include "pokemon_summary_screen.h" #include "pokenav.h" #include "menu_specialized.h" -#include "constants/rgb.h" #include "data.h" +#include "constants/abilities.h" +#include "constants/battle_anim.h" +#include "constants/battle_move_effects.h" +#include "constants/battle_string_ids.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/map_types.h" +#include "constants/moves.h" #include "constants/party_menu.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/trainers.h" +#include "battle_util.h" +#include "constants/pokemon.h" -extern struct MusicPlayerInfo gMPlayInfo_BGM; +extern struct Evolution gEvolutionTable[][EVOS_PER_MON]; -extern const u8* const gBattleScriptsForMoveEffects[]; +extern const u8 *const gBattleScriptsForMoveEffects[]; -#define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) +// 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 +static const s32 sExperienceScalingFactors[] = +{ + 0, + 0, + 1, + 3, + 8, + 13, + 22, + 32, + 45, + 60, + 79, + 100, + 124, + 152, + 183, + 217, + 256, + 297, + 343, + 393, + 447, + 505, + 567, + 634, + 705, + 781, + 861, + 946, + 1037, + 1132, + 1232, + 1337, + 1448, + 1563, + 1685, + 1811, + 1944, + 2081, + 2225, + 2374, + 2529, + 2690, + 2858, + 3031, + 3210, + 3396, + 3587, + 3786, + 3990, + 4201, + 4419, + 4643, + 4874, + 5112, + 5357, + 5608, + 5866, + 6132, + 6404, + 6684, + 6971, + 7265, + 7566, + 7875, + 8192, + 8515, + 8847, + 9186, + 9532, + 9886, + 10249, + 10619, + 10996, + 11382, + 11776, + 12178, + 12588, + 13006, + 13433, + 13867, + 14310, + 14762, + 15222, + 15690, + 16167, + 16652, + 17146, + 17649, + 18161, + 18681, + 19210, + 19748, + 20295, + 20851, + 21417, + 21991, + 22574, + 23166, + 23768, + 24379, + 25000, + 25629, + 26268, + 26917, + 27575, + 28243, + 28920, + 29607, + 30303, + 31010, + 31726, + 32452, + 33188, + 33934, + 34689, + 35455, + 36231, + 37017, + 37813, + 38619, + 39436, + 40262, + 41099, + 41947, + 42804, + 43673, + 44551, + 45441, + 46340, + 47251, + 48172, + 49104, + 50046, + 50999, + 51963, + 52938, + 53924, + 54921, + 55929, + 56947, + 57977, + 59018, + 60070, + 61133, + 62208, + 63293, + 64390, + 65498, + 66618, + 67749, + 68891, + 70045, + 71211, + 72388, + 73576, + 74777, + 75989, + 77212, + 78448, + 79695, + 80954, + 82225, + 83507, + 84802, + 86109, + 87427, + 88758, + 90101, + 91456, + 92823, + 94202, + 95593, + 96997, + 98413, + 99841, + 101282, + 102735, + 104201, + 105679, + 107169, + 108672, + 110188, + 111716, + 113257, + 114811, + 116377, + 117956, + 119548, + 121153, + 122770, + 124401, + 126044, + 127700, + 129369, + 131052, + 132747, + 134456, + 136177, + 137912, + 139660, + 141421, + 143195, + 144983, + 146784, + 148598, + 150426, + 152267, + 154122, + 155990, + 157872, + 159767, +}; + +static const u16 sTrappingMoves[NUM_TRAPPING_MOVES] = +{ + MOVE_BIND, MOVE_WRAP, MOVE_FIRE_SPIN, MOVE_CLAMP, MOVE_WHIRLPOOL, MOVE_SAND_TOMB, MOVE_MAGMA_STORM, MOVE_INFESTATION, MOVE_SNAP_TRAP, +}; + +static const u16 sBadgeFlags[8] = { + FLAG_BADGE01_GET, FLAG_BADGE02_GET, FLAG_BADGE03_GET, FLAG_BADGE04_GET, + FLAG_BADGE05_GET, FLAG_BADGE06_GET, FLAG_BADGE07_GET, FLAG_BADGE08_GET, +}; + +static const u16 sWhiteOutBadgeMoney[9] = { 8, 16, 24, 36, 48, 64, 80, 100, 120 }; + +#define STAT_CHANGE_WORKED 0 +#define STAT_CHANGE_DIDNT_WORK 1 + +#define LEVEL_UP_BANNER_START 416 +#define LEVEL_UP_BANNER_END 512 + +#define TAG_LVLUP_BANNER_MON_ICON 55130 -// this file's functions static bool8 IsTwoTurnsMove(u16 move); static void TrySetDestinyBondToHappen(void); static u8 AttacksThisTurn(u8 battlerId, u16 move); // Note: returns 1 if it's a charging turn, otherwise 2. -static void CheckWonderGuardAndLevitate(void); -static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8, const u8* BS_ptr); +static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr); static bool32 IsMonGettingExpSentOut(void); -static void sub_804F17C(void); -static bool8 sub_804F1CC(void); +static void InitLevelUpBanner(void); +static bool8 SlideInLevelUpBanner(void); +static bool8 SlideOutLevelUpBanner(void); static void DrawLevelUpWindow1(void); static void DrawLevelUpWindow2(void); -static bool8 sub_804F344(void); -static void PutMonIconOnLvlUpBox(void); -static void PutLevelAndGenderOnLvlUpBox(void); - -static void SpriteCB_MonIconOnLvlUpBox(struct Sprite* sprite); +static void PutMonIconOnLvlUpBanner(void); +static void DrawLevelUpBannerText(void); +static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite *sprite); +static bool32 CriticalCapture(u32 odds); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -83,8 +325,8 @@ static void Cmd_ppreduce(void); static void Cmd_critcalc(void); static void Cmd_damagecalc(void); static void Cmd_typecalc(void); -static void Cmd_adjustnormaldamage(void); -static void Cmd_adjustnormaldamage2(void); +static void Cmd_adjustdamage(void); +static void Cmd_multihitresultmessage(void); static void Cmd_attackanimation(void); static void Cmd_waitanimation(void); static void Cmd_healthbarupdate(void); @@ -110,9 +352,9 @@ static void Cmd_jumpifability(void); static void Cmd_jumpifsideaffecting(void); static void Cmd_jumpifstat(void); static void Cmd_jumpifstatus3condition(void); -static void Cmd_jumpiftype(void); +static void Cmd_jumpbasedontype(void); static void Cmd_getexp(void); -static void Cmd_unknown_24(void); +static void Cmd_checkteamslost(void); static void Cmd_movevaluescleanup(void); static void Cmd_setmultihit(void); static void Cmd_decrementmultihit(void); @@ -142,15 +384,15 @@ static void Cmd_end2(void); static void Cmd_end3(void); static void Cmd_jumpifaffectedbyprotect(void); static void Cmd_call(void); -static void Cmd_jumpiftype2(void); +static void Cmd_setroost(void); static void Cmd_jumpifabilitypresent(void); static void Cmd_endselectionscript(void); static void Cmd_playanimation(void); -static void Cmd_playanimation2(void); +static void Cmd_playanimation_var(void); static void Cmd_setgraphicalstatchangevalues(void); static void Cmd_playstatchangeanimation(void); static void Cmd_moveend(void); -static void Cmd_typecalc2(void); +static void Cmd_sethealblock(void); static void Cmd_returnatktoball(void); static void Cmd_getswitchedmondata(void); static void Cmd_switchindataupdate(void); @@ -170,7 +412,7 @@ static void Cmd_yesnoboxlearnmove(void); static void Cmd_yesnoboxstoplearningmove(void); static void Cmd_hitanimation(void); static void Cmd_getmoneyreward(void); -static void Cmd_unknown_5E(void); +static void Cmd_updatebattlermoves(void); static void Cmd_swapattackerwithtarget(void); static void Cmd_incrementgamestat(void); static void Cmd_drawpartystatussummary(void); @@ -181,14 +423,14 @@ static void Cmd_status2animation(void); static void Cmd_chosenstatusanimation(void); static void Cmd_yesnobox(void); static void Cmd_cancelallactions(void); -static void Cmd_adjustsetdamage(void); +static void Cmd_setgravity(void); static void Cmd_removeitem(void); static void Cmd_atknameinbuff1(void); static void Cmd_drawlvlupbox(void); static void Cmd_resetsentmonsvalue(void); static void Cmd_setatktoplayer0(void); static void Cmd_makevisible(void); -static void Cmd_recordlastability(void); +static void Cmd_recordability(void); static void Cmd_buffermovetolearn(void); static void Cmd_jumpifplayerran(void); static void Cmd_hpthresholds(void); @@ -196,7 +438,7 @@ static void Cmd_hpthresholds2(void); static void Cmd_useitemonopponent(void); static void Cmd_various(void); static void Cmd_setprotectlike(void); -static void Cmd_faintifabilitynotdamp(void); +static void Cmd_tryexplosion(void); static void Cmd_setatkhptozero(void); static void Cmd_jumpifnexttargetvalid(void); static void Cmd_tryhealhalfhealth(void); @@ -207,12 +449,12 @@ static void Cmd_setseeded(void); static void Cmd_manipulatedamage(void); static void Cmd_trysetrest(void); static void Cmd_jumpifnotfirstturn(void); -static void Cmd_nop(void); +static void Cmd_setmiracleeye(void); static void Cmd_jumpifcantmakeasleep(void); static void Cmd_stockpile(void); static void Cmd_stockpiletobasedamage(void); static void Cmd_stockpiletohpheal(void); -static void Cmd_negativedamage(void); +static void Cmd_setdrainedhp(void); static void Cmd_statbuffchange(void); static void Cmd_normalisebuffs(void); static void Cmd_setbide(void); @@ -248,17 +490,17 @@ static void Cmd_copymovepermanently(void); static void Cmd_trychoosesleeptalkmove(void); static void Cmd_setdestinybond(void); static void Cmd_trysetdestinybondtohappen(void); -static void Cmd_remaininghptopower(void); +static void Cmd_settailwind(void); static void Cmd_tryspiteppreduce(void); static void Cmd_healpartystatus(void); static void Cmd_cursetarget(void); static void Cmd_trysetspikes(void); static void Cmd_setforesight(void); static void Cmd_trysetperishsong(void); -static void Cmd_rolloutdamagecalculation(void); +static void Cmd_handlerollout(void); static void Cmd_jumpifconfusedandstatmaxed(void); -static void Cmd_furycuttercalc(void); -static void Cmd_friendshiptodamagecalculation(void); +static void Cmd_handlefurycutter(void); +static void Cmd_setembargo(void); static void Cmd_presentdamagecalculation(void); static void Cmd_setsafeguard(void); static void Cmd_magnitudedamagecalculation(void); @@ -269,7 +511,7 @@ static void Cmd_copyfoestats(void); static void Cmd_rapidspinfree(void); static void Cmd_setdefensecurlbit(void); static void Cmd_recoverbasedonsunlight(void); -static void Cmd_hiddenpowercalc(void); +static void Cmd_setstickyweb(void); static void Cmd_selectfirstvalidtarget(void); static void Cmd_trysetfutureattack(void); static void Cmd_trydobeatup(void); @@ -277,7 +519,7 @@ static void Cmd_setsemiinvulnerablebit(void); static void Cmd_clearsemiinvulnerablebit(void); static void Cmd_setminimize(void); static void Cmd_sethail(void); -static void Cmd_jumpifattackandspecialattackcannotfall(void); +static void Cmd_trymemento(void); static void Cmd_setforcedtarget(void); static void Cmd_setcharge(void); static void Cmd_callterrainattack(void); @@ -289,15 +531,15 @@ static void Cmd_trysethelpinghand(void); static void Cmd_tryswapitems(void); static void Cmd_trycopyability(void); static void Cmd_trywish(void); -static void Cmd_trysetroots(void); -static void Cmd_doubledamagedealtifdamaged(void); +static void Cmd_settoxicspikes(void); +static void Cmd_setgastroacid(void); static void Cmd_setyawn(void); static void Cmd_setdamagetohealthdifference(void); -static void Cmd_scaledamagebyhealthratio(void); +static void Cmd_setroom(void); static void Cmd_tryswapabilities(void); static void Cmd_tryimprison(void); -static void Cmd_trysetgrudge(void); -static void Cmd_weightdamagecalculation(void); +static void Cmd_setstealthrock(void); +static void Cmd_setuserstatus3(void); static void Cmd_assistattackselect(void); static void Cmd_trysetmagiccoat(void); static void Cmd_trysetsnatch(void); @@ -309,10 +551,10 @@ static void Cmd_pickup(void); static void Cmd_docastformchangeanimation(void); static void Cmd_trycastformdatachange(void); static void Cmd_settypebasedhalvers(void); -static void Cmd_setweatherballtype(void); +static void Cmd_jumpifsubstituteblocks(void); static void Cmd_tryrecycleitem(void); static void Cmd_settypetoterrain(void); -static void Cmd_pursuitrelated(void); +static void Cmd_pursuitdoubles(void); static void Cmd_snatchsetbattlers(void); static void Cmd_removelightscreenreflect(void); static void Cmd_handleballthrow(void); @@ -325,6 +567,13 @@ static void Cmd_removeattackerstatus1(void); static void Cmd_finishaction(void); static void Cmd_finishturn(void); static void Cmd_trainerslideout(void); +static void Cmd_settelekinesis(void); +static void Cmd_swapstatstages(void); +static void Cmd_averagestats(void); +static void Cmd_jumpifoppositegenders(void); +static void Cmd_trygetbaddreamstarget(void); +static void Cmd_tryworryseed(void); +static void Cmd_metalburstdamagecalculator(void); void (* const gBattleScriptingCommandsTable[])(void) = { @@ -335,8 +584,8 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_critcalc, //0x4 Cmd_damagecalc, //0x5 Cmd_typecalc, //0x6 - Cmd_adjustnormaldamage, //0x7 - Cmd_adjustnormaldamage2, //0x8 + Cmd_adjustdamage, //0x7 + Cmd_multihitresultmessage, //0x8 Cmd_attackanimation, //0x9 Cmd_waitanimation, //0xA Cmd_healthbarupdate, //0xB @@ -362,9 +611,9 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_jumpifsideaffecting, //0x1F Cmd_jumpifstat, //0x20 Cmd_jumpifstatus3condition, //0x21 - Cmd_jumpiftype, //0x22 + Cmd_jumpbasedontype, //0x22 Cmd_getexp, //0x23 - Cmd_unknown_24, //0x24 + Cmd_checkteamslost, //0x24 Cmd_movevaluescleanup, //0x25 Cmd_setmultihit, //0x26 Cmd_decrementmultihit, //0x27 @@ -394,15 +643,15 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_end3, //0x3F Cmd_jumpifaffectedbyprotect, //0x40 Cmd_call, //0x41 - Cmd_jumpiftype2, //0x42 + Cmd_setroost, //0x42 Cmd_jumpifabilitypresent, //0x43 Cmd_endselectionscript, //0x44 Cmd_playanimation, //0x45 - Cmd_playanimation2, //0x46 + Cmd_playanimation_var, //0x46 Cmd_setgraphicalstatchangevalues, //0x47 Cmd_playstatchangeanimation, //0x48 Cmd_moveend, //0x49 - Cmd_typecalc2, //0x4A + Cmd_sethealblock, //0x4A Cmd_returnatktoball, //0x4B Cmd_getswitchedmondata, //0x4C Cmd_switchindataupdate, //0x4D @@ -422,7 +671,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_yesnoboxstoplearningmove, //0x5B Cmd_hitanimation, //0x5C Cmd_getmoneyreward, //0x5D - Cmd_unknown_5E, //0x5E + Cmd_updatebattlermoves, //0x5E Cmd_swapattackerwithtarget, //0x5F Cmd_incrementgamestat, //0x60 Cmd_drawpartystatussummary, //0x61 @@ -433,14 +682,14 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_chosenstatusanimation, //0x66 Cmd_yesnobox, //0x67 Cmd_cancelallactions, //0x68 - Cmd_adjustsetdamage, //0x69 + Cmd_setgravity, //0x69 Cmd_removeitem, //0x6A Cmd_atknameinbuff1, //0x6B Cmd_drawlvlupbox, //0x6C Cmd_resetsentmonsvalue, //0x6D Cmd_setatktoplayer0, //0x6E Cmd_makevisible, //0x6F - Cmd_recordlastability, //0x70 + Cmd_recordability, //0x70 Cmd_buffermovetolearn, //0x71 Cmd_jumpifplayerran, //0x72 Cmd_hpthresholds, //0x73 @@ -448,7 +697,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_useitemonopponent, //0x75 Cmd_various, //0x76 Cmd_setprotectlike, //0x77 - Cmd_faintifabilitynotdamp, //0x78 + Cmd_tryexplosion, //0x78 Cmd_setatkhptozero, //0x79 Cmd_jumpifnexttargetvalid, //0x7A Cmd_tryhealhalfhealth, //0x7B @@ -459,12 +708,12 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_manipulatedamage, //0x80 Cmd_trysetrest, //0x81 Cmd_jumpifnotfirstturn, //0x82 - Cmd_nop, //0x83 + Cmd_setmiracleeye, //0x83 Cmd_jumpifcantmakeasleep, //0x84 Cmd_stockpile, //0x85 Cmd_stockpiletobasedamage, //0x86 Cmd_stockpiletohpheal, //0x87 - Cmd_negativedamage, //0x88 + Cmd_setdrainedhp, //0x88 Cmd_statbuffchange, //0x89 Cmd_normalisebuffs, //0x8A Cmd_setbide, //0x8B @@ -500,17 +749,17 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_trychoosesleeptalkmove, //0xA9 Cmd_setdestinybond, //0xAA Cmd_trysetdestinybondtohappen, //0xAB - Cmd_remaininghptopower, //0xAC + Cmd_settailwind, //0xAC Cmd_tryspiteppreduce, //0xAD Cmd_healpartystatus, //0xAE Cmd_cursetarget, //0xAF Cmd_trysetspikes, //0xB0 Cmd_setforesight, //0xB1 Cmd_trysetperishsong, //0xB2 - Cmd_rolloutdamagecalculation, //0xB3 + Cmd_handlerollout, //0xB3 Cmd_jumpifconfusedandstatmaxed, //0xB4 - Cmd_furycuttercalc, //0xB5 - Cmd_friendshiptodamagecalculation, //0xB6 + Cmd_handlefurycutter, //0xB5 + Cmd_setembargo, //0xB6 Cmd_presentdamagecalculation, //0xB7 Cmd_setsafeguard, //0xB8 Cmd_magnitudedamagecalculation, //0xB9 @@ -521,7 +770,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_rapidspinfree, //0xBE Cmd_setdefensecurlbit, //0xBF Cmd_recoverbasedonsunlight, //0xC0 - Cmd_hiddenpowercalc, //0xC1 + Cmd_setstickyweb, //0xC1 Cmd_selectfirstvalidtarget, //0xC2 Cmd_trysetfutureattack, //0xC3 Cmd_trydobeatup, //0xC4 @@ -529,7 +778,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_clearsemiinvulnerablebit, //0xC6 Cmd_setminimize, //0xC7 Cmd_sethail, //0xC8 - Cmd_jumpifattackandspecialattackcannotfall, //0xC9 + Cmd_trymemento, //0xC9 Cmd_setforcedtarget, //0xCA Cmd_setcharge, //0xCB Cmd_callterrainattack, //0xCC @@ -541,15 +790,15 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_tryswapitems, //0xD2 Cmd_trycopyability, //0xD3 Cmd_trywish, //0xD4 - Cmd_trysetroots, //0xD5 - Cmd_doubledamagedealtifdamaged, //0xD6 + Cmd_settoxicspikes, //0xD5 + Cmd_setgastroacid, //0xD6 Cmd_setyawn, //0xD7 Cmd_setdamagetohealthdifference, //0xD8 - Cmd_scaledamagebyhealthratio, //0xD9 + Cmd_setroom, //0xD9 Cmd_tryswapabilities, //0xDA Cmd_tryimprison, //0xDB - Cmd_trysetgrudge, //0xDC - Cmd_weightdamagecalculation, //0xDD + Cmd_setstealthrock, //0xDC + Cmd_setuserstatus3, //0xDD Cmd_assistattackselect, //0xDE Cmd_trysetmagiccoat, //0xDF Cmd_trysetsnatch, //0xE0 @@ -561,10 +810,10 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_docastformchangeanimation, //0xE6 Cmd_trycastformdatachange, //0xE7 Cmd_settypebasedhalvers, //0xE8 - Cmd_setweatherballtype, //0xE9 + Cmd_jumpifsubstituteblocks, //0xE9 Cmd_tryrecycleitem, //0xEA Cmd_settypetoterrain, //0xEB - Cmd_pursuitrelated, //0xEC + Cmd_pursuitdoubles, //0xEC Cmd_snatchsetbattlers, //0xED Cmd_removelightscreenreflect, //0xEE Cmd_handleballthrow, //0xEF @@ -576,16 +825,17 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_removeattackerstatus1, //0xF5 Cmd_finishaction, //0xF6 Cmd_finishturn, //0xF7 - Cmd_trainerslideout //0xF8 + Cmd_trainerslideout, //0xF8 + Cmd_settelekinesis, //0xF9 + Cmd_swapstatstages, //0xFA + Cmd_averagestats, //0xFB + Cmd_jumpifoppositegenders, //0xFC + Cmd_trygetbaddreamstarget, //0xFD + Cmd_tryworryseed, //0xFE + Cmd_metalburstdamagecalculator, //0xFF }; -struct StatFractions -{ - u8 dividend; - u8 divisor; -}; - -static const struct StatFractions sAccuracyStageRatios[] = +const struct StatFractions gAccuracyStageRatios[] = { { 33, 100}, // -6 { 36, 100}, // -5 @@ -602,9 +852,6 @@ static const struct StatFractions sAccuracyStageRatios[] = { 3, 1}, // +6 }; -// The chance is 1/N for each stage. -static const u16 sCriticalHitChance[] = {16, 8, 4, 3, 2}; - static const u32 sStatusFlagsForMoveEffects[NUM_MOVE_EFFECTS] = { [MOVE_EFFECT_SLEEP] = STATUS1_SLEEP, @@ -624,9 +871,8 @@ static const u32 sStatusFlagsForMoveEffects[NUM_MOVE_EFFECTS] = [MOVE_EFFECT_THRASH] = STATUS2_LOCK_CONFUSE, }; -static const u8* const sMoveEffectBS_Ptrs[] = +static const u8 *const sMoveEffectBS_Ptrs[] = { - [0] = BattleScript_MoveEffectSleep, [MOVE_EFFECT_SLEEP] = BattleScript_MoveEffectSleep, [MOVE_EFFECT_POISON] = BattleScript_MoveEffectPoison, [MOVE_EFFECT_BURN] = BattleScript_MoveEffectBurn, @@ -634,59 +880,33 @@ static const u8* const sMoveEffectBS_Ptrs[] = [MOVE_EFFECT_PARALYSIS] = BattleScript_MoveEffectParalysis, [MOVE_EFFECT_TOXIC] = BattleScript_MoveEffectToxic, [MOVE_EFFECT_CONFUSION] = BattleScript_MoveEffectConfusion, - [MOVE_EFFECT_FLINCH] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_TRI_ATTACK] = BattleScript_MoveEffectSleep, [MOVE_EFFECT_UPROAR] = BattleScript_MoveEffectUproar, [MOVE_EFFECT_PAYDAY] = BattleScript_MoveEffectPayDay, - [MOVE_EFFECT_CHARGING] = BattleScript_MoveEffectSleep, [MOVE_EFFECT_WRAP] = BattleScript_MoveEffectWrap, [MOVE_EFFECT_RECOIL_25] = BattleScript_MoveEffectRecoil, - [MOVE_EFFECT_ATK_PLUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_DEF_PLUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_SPD_PLUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_SP_ATK_PLUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_SP_DEF_PLUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_ACC_PLUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_EVS_PLUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_ATK_MINUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_DEF_MINUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_SPD_MINUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_SP_ATK_MINUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_SP_DEF_MINUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_ACC_MINUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_EVS_MINUS_1] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_RECHARGE] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_RAGE] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_STEAL_ITEM] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_PREVENT_ESCAPE] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_NIGHTMARE] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_ALL_STATS_UP] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_RAPIDSPIN] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_REMOVE_PARALYSIS] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_ATK_DEF_DOWN] = BattleScript_MoveEffectSleep, [MOVE_EFFECT_RECOIL_33] = BattleScript_MoveEffectRecoil, }; -static const struct WindowTemplate sUnusedWinTemplate = {0, 1, 3, 7, 0xF, 0x1F, 0x3F}; - -static const u16 sUnknown_0831C2C8[] = INCBIN_U16("graphics/battle_interface/unk_battlebox.gbapal"); -static const u32 sUnknown_0831C2E8[] = INCBIN_U32("graphics/battle_interface/unk_battlebox.4bpp.lz"); - -// unused -static const u8 sRubyLevelUpStatBoxStats[] = +static const struct WindowTemplate sUnusedWinTemplate = { - MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, - MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 7, + .height = 15, + .paletteNum = 31, + .baseBlock = 0x3F }; -#define MON_ICON_LVLUP_BOX_TAG 0xD75A +static const u16 sLevelUpBanner_Pal[] = INCBIN_U16("graphics/battle_interface/level_up_banner.gbapal"); +static const u32 sLevelUpBanner_Gfx[] = INCBIN_U32("graphics/battle_interface/level_up_banner.4bpp.lz"); -static const struct OamData sOamData_MonIconOnLvlUpBox = +static const struct OamData sOamData_MonIconOnLvlUpBanner = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -698,80 +918,252 @@ static const struct OamData sOamData_MonIconOnLvlUpBox = .affineParam = 0, }; -static const struct SpriteTemplate sSpriteTemplate_MonIconOnLvlUpBox = +static const struct SpriteTemplate sSpriteTemplate_MonIconOnLvlUpBanner = { - .tileTag = MON_ICON_LVLUP_BOX_TAG, - .paletteTag = MON_ICON_LVLUP_BOX_TAG, - .oam = &sOamData_MonIconOnLvlUpBox, + .tileTag = TAG_LVLUP_BANNER_MON_ICON, + .paletteTag = TAG_LVLUP_BANNER_MON_ICON, + .oam = &sOamData_MonIconOnLvlUpBanner, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_MonIconOnLvlUpBox + .callback = SpriteCB_MonIconOnLvlUpBanner }; static const u16 sProtectSuccessRates[] = {USHRT_MAX, USHRT_MAX / 2, USHRT_MAX / 4, USHRT_MAX / 8}; -#define MIMIC_FORBIDDEN_END 0xFFFE -#define METRONOME_FORBIDDEN_END 0xFFFF -#define ASSIST_FORBIDDEN_END 0xFFFF +#define FORBIDDEN_MIMIC (1 << 0) +#define FORBIDDEN_METRONOME (1 << 1) +#define FORBIDDEN_ASSIST (1 << 2) +#define FORBIDDEN_COPYCAT (1 << 3) +#define FORBIDDEN_SLEEP_TALK (1 << 4) +#define FORBIDDEN_INSTRUCT (1 << 5) -static const u16 sMovesForbiddenToCopy[] = +static const u8 sForbiddenMoves[MOVES_COUNT] = { - MOVE_METRONOME, - MOVE_STRUGGLE, - MOVE_SKETCH, - MOVE_MIMIC, - MIMIC_FORBIDDEN_END, - MOVE_COUNTER, - MOVE_MIRROR_COAT, - MOVE_PROTECT, - MOVE_DETECT, - MOVE_ENDURE, - MOVE_DESTINY_BOND, - MOVE_SLEEP_TALK, - MOVE_THIEF, - MOVE_FOLLOW_ME, - MOVE_SNATCH, - MOVE_HELPING_HAND, - MOVE_COVET, - MOVE_TRICK, - MOVE_FOCUS_PUNCH, - METRONOME_FORBIDDEN_END + [MOVE_NONE] = 0xFF, // Can't use a non-move lol + [MOVE_STRUGGLE] = 0xFF, // Neither Struggle + [MOVE_AFTER_YOU] = FORBIDDEN_METRONOME, + [MOVE_APPLE_ACID] = FORBIDDEN_METRONOME, + [MOVE_ASSIST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_ASTRAL_BARRAGE] = FORBIDDEN_METRONOME, + [MOVE_AURA_WHEEL] = FORBIDDEN_METRONOME, + [MOVE_BADDY_BAD] = FORBIDDEN_METRONOME, + [MOVE_BANEFUL_BUNKER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_BEAK_BLAST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_BEHEMOTH_BASH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_BEHEMOTH_BLADE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_BELCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_BESTOW] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_BIDE] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_BLAST_BURN] = FORBIDDEN_INSTRUCT, + [MOVE_BODY_PRESS] = FORBIDDEN_METRONOME, + [MOVE_BOUNCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_BOUNCY_BUBBLE] = FORBIDDEN_METRONOME, + [MOVE_BRANCH_POKE] = FORBIDDEN_METRONOME, + [MOVE_BREAKING_SWIPE] = FORBIDDEN_METRONOME, + [MOVE_BUZZY_BUZZ] = FORBIDDEN_METRONOME, + [MOVE_CELEBRATE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_CHATTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_CIRCLE_THROW] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_CLANGOROUS_SOUL] = FORBIDDEN_METRONOME, + [MOVE_COPYCAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_COUNTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_COVET] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_CRAFTY_SHIELD] = FORBIDDEN_METRONOME, + [MOVE_DECORATE] = FORBIDDEN_METRONOME, + [MOVE_DESTINY_BOND] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_DETECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_DIAMOND_STORM] = FORBIDDEN_METRONOME, + [MOVE_DIG] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_DIVE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_DOUBLE_IRON_BASH] = FORBIDDEN_METRONOME, + [MOVE_DRAGON_ASCENT] = FORBIDDEN_METRONOME, + [MOVE_DRAGON_ENERGY] = FORBIDDEN_METRONOME, + [MOVE_DRAGON_TAIL] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_DRUM_BEATING] = FORBIDDEN_METRONOME, + [MOVE_DYNAMAX_CANNON] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_ENDURE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_ETERNABEAM] = FORBIDDEN_METRONOME | FORBIDDEN_INSTRUCT, + [MOVE_FALSE_SURRENDER] = FORBIDDEN_METRONOME, + [MOVE_FEINT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_FIERY_WRATH] = FORBIDDEN_METRONOME, + [MOVE_FLEUR_CANNON] = FORBIDDEN_METRONOME, + [MOVE_FLOATY_FALL] = FORBIDDEN_METRONOME, + [MOVE_FLY] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_FOCUS_PUNCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_FOLLOW_ME] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_FREEZE_SHOCK] = FORBIDDEN_METRONOME | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_FREEZING_GLARE] = FORBIDDEN_METRONOME, + [MOVE_FREEZY_FROST] = FORBIDDEN_METRONOME, + [MOVE_FRENZY_PLANT] = FORBIDDEN_INSTRUCT, + [MOVE_GEOMANCY] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_GIGA_IMPACT] = FORBIDDEN_INSTRUCT, + [MOVE_GLACIAL_LANCE] = FORBIDDEN_METRONOME, + [MOVE_GLITZY_GLOW] = FORBIDDEN_METRONOME, + [MOVE_GRAV_APPLE] = FORBIDDEN_METRONOME, + [MOVE_HELPING_HAND] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_HOLD_HANDS] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_HYDRO_CANNON] = FORBIDDEN_INSTRUCT, + [MOVE_HYPER_BEAM] = FORBIDDEN_INSTRUCT, + [MOVE_HYPERSPACE_FURY] = FORBIDDEN_METRONOME, + [MOVE_HYPERSPACE_HOLE] = FORBIDDEN_METRONOME, + [MOVE_ICE_BALL] = FORBIDDEN_INSTRUCT, + [MOVE_ICE_BURN] = FORBIDDEN_METRONOME | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_INSTRUCT] = FORBIDDEN_METRONOME | FORBIDDEN_INSTRUCT, + [MOVE_JUNGLE_HEALING] = FORBIDDEN_METRONOME, + [MOVE_KINGS_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT, + [MOVE_LIFE_DEW] = FORBIDDEN_METRONOME, + [MOVE_LIGHT_OF_RUIN] = FORBIDDEN_METRONOME, + [MOVE_MAT_BLOCK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_ME_FIRST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_METEOR_ASSAULT] = FORBIDDEN_METRONOME | FORBIDDEN_INSTRUCT, + [MOVE_METEOR_BEAM] = FORBIDDEN_INSTRUCT, + [MOVE_METRONOME] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_MIMIC] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_MIND_BLOWN] = FORBIDDEN_METRONOME, + [MOVE_MIRROR_COAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_MIRROR_MOVE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_MOONGEIST_BEAM] = FORBIDDEN_METRONOME, + [MOVE_NATURE_POWER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_NATURES_MADNESS] = FORBIDDEN_METRONOME, + [MOVE_OBSTRUCT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT, + [MOVE_ORIGIN_PULSE] = FORBIDDEN_METRONOME, + [MOVE_OUTRAGE] = FORBIDDEN_INSTRUCT, + [MOVE_OVERDRIVE] = FORBIDDEN_METRONOME, + [MOVE_PETAL_DANCE] = FORBIDDEN_INSTRUCT, + [MOVE_PHANTOM_FORCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_PHOTON_GEYSER] = FORBIDDEN_METRONOME, + [MOVE_PIKA_PAPOW] = FORBIDDEN_METRONOME, + [MOVE_PLASMA_FISTS] = FORBIDDEN_METRONOME, + [MOVE_PRECIPICE_BLADES] = FORBIDDEN_METRONOME, + [MOVE_PRISMATIC_LASER] = FORBIDDEN_INSTRUCT, + [MOVE_PROTECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_PYRO_BALL] = FORBIDDEN_METRONOME, + [MOVE_QUASH] = FORBIDDEN_METRONOME, + [MOVE_QUICK_GUARD] = FORBIDDEN_METRONOME, + [MOVE_RAGE_POWDER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_RAZOR_WIND] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_RELIC_SONG] = FORBIDDEN_METRONOME, + [MOVE_ROAR] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_ROAR_OF_TIME] = FORBIDDEN_INSTRUCT, + [MOVE_ROCK_WRECKER] = FORBIDDEN_INSTRUCT, + [MOVE_ROLLOUT] = FORBIDDEN_INSTRUCT, + [MOVE_SAPPY_SEED] = FORBIDDEN_METRONOME, + [MOVE_SECRET_SWORD] = FORBIDDEN_METRONOME, + [MOVE_SHADOW_FORCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_SHELL_TRAP] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_SIZZLY_SLIDE] = FORBIDDEN_METRONOME, + [MOVE_SKETCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_SKULL_BASH] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_SKY_ATTACK] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_SKY_DROP] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_SLEEP_TALK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_SNAP_TRAP] = FORBIDDEN_METRONOME, + [MOVE_SNARL] = FORBIDDEN_METRONOME, + [MOVE_SNATCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT, + [MOVE_SNORE] = FORBIDDEN_METRONOME, + [MOVE_SOLAR_BEAM] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_SOLAR_BLADE] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_SPARKLY_SWIRL] = FORBIDDEN_METRONOME, + [MOVE_SPECTRAL_THIEF] = FORBIDDEN_METRONOME, + [MOVE_SPIKY_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_SPIRIT_BREAK] = FORBIDDEN_METRONOME, + [MOVE_SPLISHY_SPLASH] = FORBIDDEN_METRONOME, + [MOVE_SPOTLIGHT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_STEAM_ERUPTION] = FORBIDDEN_METRONOME, + [MOVE_STEEL_BEAM] = FORBIDDEN_METRONOME, + [MOVE_STRANGE_STEAM] = FORBIDDEN_METRONOME, + [MOVE_SUNSTEEL_STRIKE] = FORBIDDEN_METRONOME, + [MOVE_SURGING_STRIKES] = FORBIDDEN_METRONOME, + [MOVE_SWITCHEROO] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_TECHNO_BLAST] = FORBIDDEN_METRONOME, + [MOVE_THIEF] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_THOUSAND_ARROWS] = FORBIDDEN_METRONOME, + [MOVE_THOUSAND_WAVES] = FORBIDDEN_METRONOME, + [MOVE_THRASH] = FORBIDDEN_INSTRUCT, + [MOVE_THUNDER_CAGE] = FORBIDDEN_METRONOME, + [MOVE_THUNDEROUS_KICK] = FORBIDDEN_METRONOME, + [MOVE_TRANSFORM] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_INSTRUCT, + [MOVE_TRICK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_UPROAR] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_V_CREATE] = FORBIDDEN_METRONOME, + [MOVE_VEEVEE_VOLLEY] = FORBIDDEN_METRONOME, + [MOVE_WHIRLWIND] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_WICKED_BLOW] = FORBIDDEN_METRONOME, + [MOVE_WIDE_GUARD] = FORBIDDEN_METRONOME, + [MOVE_ZIPPY_ZAP] = FORBIDDEN_METRONOME, }; -static const u8 sFlailHpScaleToPowerTable[] = -{ - 1, 200, - 4, 150, - 9, 100, - 16, 80, - 32, 40, - 48, 20 -}; - -static const u16 sNaturePowerMoves[] = +static const u16 sNaturePowerMoves[BATTLE_TERRAIN_COUNT] = { +#if B_NATURE_POWER_MOVES >= GEN_7 + [BATTLE_TERRAIN_GRASS] = MOVE_ENERGY_BALL, + [BATTLE_TERRAIN_LONG_GRASS] = MOVE_ENERGY_BALL, + [BATTLE_TERRAIN_SAND] = MOVE_EARTH_POWER, + [BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP, + [BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP, + [BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTH_POWER, + [BATTLE_TERRAIN_CAVE] = MOVE_EARTH_POWER, + [BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK, + [BATTLE_TERRAIN_PLAIN] = MOVE_TRI_ATTACK, + [BATTLE_TERRAIN_SNOW] = MOVE_ICE_BEAM, +#elif B_NATURE_POWER_MOVES == GEN_6 + [BATTLE_TERRAIN_GRASS] = MOVE_ENERGY_BALL, + [BATTLE_TERRAIN_LONG_GRASS] = MOVE_ENERGY_BALL, + [BATTLE_TERRAIN_SAND] = MOVE_EARTH_POWER, + [BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP, + [BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP, + [BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTH_POWER, + [BATTLE_TERRAIN_CAVE] = MOVE_EARTH_POWER, + [BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK, + [BATTLE_TERRAIN_PLAIN] = MOVE_TRI_ATTACK, + [BATTLE_TERRAIN_SNOW] = MOVE_FROST_BREATH, +#elif B_NATURE_POWER_MOVES == GEN_5 + [BATTLE_TERRAIN_GRASS] = MOVE_SEED_BOMB, + [BATTLE_TERRAIN_LONG_GRASS] = MOVE_SEED_BOMB, + [BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE, + [BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP, + [BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP, + [BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTHQUAKE, + [BATTLE_TERRAIN_CAVE] = MOVE_EARTHQUAKE, + [BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK, + [BATTLE_TERRAIN_PLAIN] = MOVE_EARTHQUAKE, + [BATTLE_TERRAIN_SNOW] = MOVE_BLIZZARD, +#elif B_NATURE_POWER_MOVES == GEN_4 + [BATTLE_TERRAIN_GRASS] = MOVE_SEED_BOMB, + [BATTLE_TERRAIN_LONG_GRASS] = MOVE_SEED_BOMB, + [BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE, + [BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP, + [BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP, + [BATTLE_TERRAIN_MOUNTAIN] = MOVE_ROCK_SLIDE, + [BATTLE_TERRAIN_CAVE] = MOVE_ROCK_SLIDE, + [BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK, + [BATTLE_TERRAIN_PLAIN] = MOVE_EARTHQUAKE, + [BATTLE_TERRAIN_SNOW] = MOVE_BLIZZARD, +#else // Gen 1-3 [BATTLE_TERRAIN_GRASS] = MOVE_STUN_SPORE, [BATTLE_TERRAIN_LONG_GRASS] = MOVE_RAZOR_LEAF, [BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE, - [BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP, [BATTLE_TERRAIN_WATER] = MOVE_SURF, [BATTLE_TERRAIN_POND] = MOVE_BUBBLE_BEAM, [BATTLE_TERRAIN_MOUNTAIN] = MOVE_ROCK_SLIDE, [BATTLE_TERRAIN_CAVE] = MOVE_SHADOW_BALL, [BATTLE_TERRAIN_BUILDING] = MOVE_SWIFT, - [BATTLE_TERRAIN_PLAIN] = MOVE_SWIFT -}; - -// format: min. weight (hectograms), base power -static const u16 sWeightToDamageTable[] = -{ - 100, 20, - 250, 40, - 500, 60, - 1000, 80, - 2000, 100, - 0xFFFF, 0xFFFF + [BATTLE_TERRAIN_PLAIN] = MOVE_SWIFT, + [BATTLE_TERRAIN_SNOW] = MOVE_BLIZZARD, +#endif + [BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP, + [BATTLE_TERRAIN_SOARING] = MOVE_AIR_SLASH, + [BATTLE_TERRAIN_SKY_PILLAR] = MOVE_AIR_SLASH, + [BATTLE_TERRAIN_BURIAL_GROUND] = MOVE_SHADOW_BALL, + [BATTLE_TERRAIN_PUDDLE] = MOVE_MUD_BOMB, + [BATTLE_TERRAIN_MARSH] = MOVE_MUD_BOMB, + [BATTLE_TERRAIN_SWAMP] = MOVE_MUD_BOMB, + [BATTLE_TERRAIN_ICE] = MOVE_ICE_BEAM, + [BATTLE_TERRAIN_VOLCANO] = MOVE_LAVA_PLUME, + [BATTLE_TERRAIN_DISTORTION_WORLD] = MOVE_TRI_ATTACK, + [BATTLE_TERRAIN_SPACE] = MOVE_DRACO_METEOR, + [BATTLE_TERRAIN_ULTRA_SPACE] = MOVE_PSYSHOCK, }; static const u16 sPickupItems[] = @@ -816,27 +1208,38 @@ static const u8 sPickupProbabilities[] = 30, 40, 50, 60, 70, 80, 90, 94, 98 }; -static const u8 sTerrainToType[] = +static const u8 sTerrainToType[BATTLE_TERRAIN_COUNT] = { - [BATTLE_TERRAIN_GRASS] = TYPE_GRASS, - [BATTLE_TERRAIN_LONG_GRASS] = TYPE_GRASS, - [BATTLE_TERRAIN_SAND] = TYPE_GROUND, - [BATTLE_TERRAIN_UNDERWATER] = TYPE_WATER, - [BATTLE_TERRAIN_WATER] = TYPE_WATER, - [BATTLE_TERRAIN_POND] = TYPE_WATER, - [BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK, - [BATTLE_TERRAIN_CAVE] = TYPE_ROCK, - [BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL, - [BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL, -}; - -// - ITEM_ULTRA_BALL skips Master Ball and ITEM_NONE -static const u8 sBallCatchBonuses[] = -{ - [ITEM_ULTRA_BALL - ITEM_ULTRA_BALL] = 20, - [ITEM_GREAT_BALL - ITEM_ULTRA_BALL] = 15, - [ITEM_POKE_BALL - ITEM_ULTRA_BALL] = 10, - [ITEM_SAFARI_BALL - ITEM_ULTRA_BALL] = 15 + [BATTLE_TERRAIN_GRASS] = TYPE_GRASS, + [BATTLE_TERRAIN_LONG_GRASS] = TYPE_GRASS, + [BATTLE_TERRAIN_SAND] = TYPE_GROUND, + [BATTLE_TERRAIN_UNDERWATER] = TYPE_WATER, + [BATTLE_TERRAIN_WATER] = TYPE_WATER, + [BATTLE_TERRAIN_POND] = TYPE_WATER, + [BATTLE_TERRAIN_CAVE] = TYPE_ROCK, + [BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL, + [BATTLE_TERRAIN_SOARING] = TYPE_FLYING, + [BATTLE_TERRAIN_SKY_PILLAR] = TYPE_FLYING, + [BATTLE_TERRAIN_BURIAL_GROUND] = TYPE_GHOST, + [BATTLE_TERRAIN_PUDDLE] = TYPE_GROUND, + [BATTLE_TERRAIN_MARSH] = TYPE_GROUND, + [BATTLE_TERRAIN_SWAMP] = TYPE_GROUND, + [BATTLE_TERRAIN_SNOW] = TYPE_ICE, + [BATTLE_TERRAIN_ICE] = TYPE_ICE, + [BATTLE_TERRAIN_VOLCANO] = TYPE_FIRE, + [BATTLE_TERRAIN_DISTORTION_WORLD] = TYPE_NORMAL, + [BATTLE_TERRAIN_SPACE] = TYPE_DRAGON, + [BATTLE_TERRAIN_ULTRA_SPACE] = TYPE_PSYCHIC, +#if B_CAMOUFLAGE_TYPES >= GEN_5 + [BATTLE_TERRAIN_MOUNTAIN] = TYPE_GROUND, + [BATTLE_TERRAIN_PLAIN] = TYPE_GROUND, +#elif B_CAMOUFLAGE_TYPES == GEN_4 + [BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK, + [BATTLE_TERRAIN_PLAIN] = TYPE_GROUND, +#else + [BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK, + [BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL, +#endif }; // In Battle Palace, moves are chosen based on the pokemons nature rather than by the player @@ -905,9 +1308,82 @@ static const u8 sBattlePalaceNatureToFlavorTextId[NUM_NATURES] = [NATURE_QUIRKY] = B_MSG_EAGER_FOR_MORE, }; +static bool32 NoTargetPresent(u8 battlerId, u32 move) +{ + if (!IsBattlerAlive(gBattlerTarget)) + gBattlerTarget = GetMoveTarget(move, NO_TARGET_OVERRIDE); + + switch (GetBattlerMoveTargetType(battlerId, move)) + { + case MOVE_TARGET_SELECTED: + case MOVE_TARGET_DEPENDS: + case MOVE_TARGET_RANDOM: + if (!IsBattlerAlive(gBattlerTarget)) + return TRUE; + break; + case MOVE_TARGET_BOTH: + if (!IsBattlerAlive(gBattlerTarget) && !IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget))) + return TRUE; + break; + case MOVE_TARGET_FOES_AND_ALLY: + if (!IsBattlerAlive(gBattlerTarget) && !IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)) && !IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker))) + return TRUE; + break; + } + + return FALSE; +} + +static bool32 TryAegiFormChange(void) +{ + // Only Aegislash with Stance Change can transform, transformed mons cannot. + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_STANCE_CHANGE + || gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) + return FALSE; + + switch (gBattleMons[gBattlerAttacker].species) + { + default: + return FALSE; + case SPECIES_AEGISLASH: // Shield -> Blade + if (IS_MOVE_STATUS(gCurrentMove)) + return FALSE; + gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH_BLADE; + break; + case SPECIES_AEGISLASH_BLADE: // Blade -> Shield + if (gCurrentMove != MOVE_KINGS_SHIELD) + return FALSE; + gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH; + break; + } + + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AttackerFormChange; + return TRUE; +} + static void Cmd_attackcanceler(void) { - s32 i; + s32 i, moveType; + u16 attackerAbility = GetBattlerAbility(gBattlerAttacker); + + GET_MOVE_TYPE(gCurrentMove, moveType); + + if (WEATHER_HAS_EFFECT && gBattleMoves[gCurrentMove].power) + { + if (moveType == TYPE_FIRE && (gBattleWeather & B_WEATHER_RAIN_PRIMAL)) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_PrimordialSeaFizzlesOutFireTypeMoves; + return; + } + else if (moveType == TYPE_WATER && (gBattleWeather & B_WEATHER_SUN_PRIMAL)) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_DesolateLandEvaporatesWaterTypeMoves; + return; + } + } if (gBattleOutcome != 0) { @@ -920,24 +1396,51 @@ static void Cmd_attackcanceler(void) gBattlescriptCurrInstr = BattleScript_MoveEnd; return; } + #if (B_STANCE_CHANGE_FAIL <= GEN_6) + if (TryAegiFormChange()) + return; + #endif if (AtkCanceller_UnableToUseMove()) return; + + // Check Protean activation. + if ((attackerAbility == ABILITY_PROTEAN || attackerAbility == ABILITY_LIBERO) + && (gBattleMons[gBattlerAttacker].type1 != moveType || gBattleMons[gBattlerAttacker].type2 != moveType || + (gBattleMons[gBattlerAttacker].type3 != moveType && gBattleMons[gBattlerAttacker].type3 != TYPE_MYSTERY)) + && gCurrentMove != MOVE_STRUGGLE) + { + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); + SET_BATTLER_TYPE(gBattlerAttacker, moveType); + gBattlerAbility = gBattlerAttacker; + BattleScriptPushCursor(); + PrepareStringBattle(STRINGID_EMPTYSTRING3, gBattlerAttacker); + gBattleCommunication[MSG_DISPLAY] = 1; + gBattlescriptCurrInstr = BattleScript_ProteanActivates; + return; + } + + if (AtkCanceller_UnableToUseMove2()) + return; if (AbilityBattleEffects(ABILITYEFFECT_MOVES_BLOCK, gBattlerTarget, 0, 0, 0)) return; - if (!gBattleMons[gBattlerAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & (HITMARKER_x800000 | HITMARKER_NO_ATTACKSTRING)) + if (!gBattleMons[gBattlerAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE + && !(gHitMarker & (HITMARKER_ALLOW_NO_PP | HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT)) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) { gBattlescriptCurrInstr = BattleScript_NoPPForMove; gMoveResultFlags |= MOVE_RESULT_MISSED; return; } + #if (B_STANCE_CHANGE_FAIL >= GEN_7) + if (TryAegiFormChange()) + return; + #endif - gHitMarker &= ~(HITMARKER_x800000); + gHitMarker &= ~HITMARKER_ALLOW_NO_PP; if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) { - i = IsMonDisobedient(); // why use the 'i' variable...? - switch (i) + switch (IsMonDisobedient()) { case 0: break; @@ -951,11 +1454,41 @@ static void Cmd_attackcanceler(void) } gHitMarker |= HITMARKER_OBEYS; + if (NoTargetPresent(gBattlerAttacker, gCurrentMove) && (!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))) + { + gBattlescriptCurrInstr = BattleScript_ButItFailedAtkStringPpReduce; + if (!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) + CancelMultiTurnMoves(gBattlerAttacker); + return; + } - if (gProtectStructs[gBattlerTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGIC_COAT_AFFECTED) + if (gProtectStructs[gBattlerTarget].bounceMove + && gBattleMoves[gCurrentMove].flags & FLAG_MAGIC_COAT_AFFECTED + && !gProtectStructs[gBattlerAttacker].usesBouncedMove) { PressurePPLose(gBattlerAttacker, gBattlerTarget, MOVE_MAGIC_COAT); - gProtectStructs[gBattlerTarget].bounceMove = 0; + gProtectStructs[gBattlerTarget].usesBouncedMove = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (BlocksPrankster(gCurrentMove, gBattlerTarget, gBattlerAttacker, TRUE)) + { + // Opponent used a prankster'd magic coat -> reflected status move should fail against a dark-type attacker + gBattlerTarget = gBattlerAttacker; + gBattlescriptCurrInstr = BattleScript_MagicCoatBouncePrankster; + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; + } + return; + } + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_MAGIC_BOUNCE + && gBattleMoves[gCurrentMove].flags & FLAG_MAGIC_COAT_AFFECTED + && !gProtectStructs[gBattlerAttacker].usesBouncedMove) + { + RecordAbilityBattle(gBattlerTarget, ABILITY_MAGIC_BOUNCE); + gProtectStructs[gBattlerTarget].usesBouncedMove = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; return; @@ -966,7 +1499,7 @@ static void Cmd_attackcanceler(void) if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) { PressurePPLose(gBattlerAttacker, gBattlerByTurnOrder[i], MOVE_SNATCH); - gProtectStructs[gBattlerByTurnOrder[i]].stealMove = 0; + gProtectStructs[gBattlerByTurnOrder[i]].stealMove = FALSE; gBattleScripting.battler = gBattlerByTurnOrder[i]; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SnatchedMove; @@ -976,16 +1509,27 @@ static void Cmd_attackcanceler(void) if (gSpecialStatuses[gBattlerTarget].lightningRodRedirected) { - gSpecialStatuses[gBattlerTarget].lightningRodRedirected = 0; + gSpecialStatuses[gBattlerTarget].lightningRodRedirected = FALSE; gLastUsedAbility = ABILITY_LIGHTNING_ROD; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_TookAttack; RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); } - else if (DEFENDER_IS_PROTECTED - && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) - && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)))) + else if (gSpecialStatuses[gBattlerTarget].stormDrainRedirected) { + gSpecialStatuses[gBattlerTarget].stormDrainRedirected = FALSE; + gLastUsedAbility = ABILITY_STORM_DRAIN; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TookAttack; + RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); + } + else if (IsBattlerProtected(gBattlerTarget, gCurrentMove) + && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) + && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))) + && gBattleMoves[gCurrentMove].effect != EFFECT_SUCKER_PUNCH) + { + if (IsMoveMakingContact(gCurrentMove, gBattlerAttacker)) + gProtectStructs[gBattlerAttacker].touchedProtectLike = TRUE; CancelMultiTurnMoves(gBattlerAttacker); gMoveResultFlags |= MOVE_RESULT_MISSED; gLastLandedMoves[gBattlerTarget] = 0; @@ -993,33 +1537,39 @@ static void Cmd_attackcanceler(void) gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED; gBattlescriptCurrInstr++; } + else if (gProtectStructs[gBattlerTarget].beakBlastCharge && IsMoveMakingContact(gCurrentMove, gBattlerAttacker)) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = TRUE; + gBattlescriptCurrInstr++; + } else { gBattlescriptCurrInstr++; } } -static void JumpIfMoveFailed(u8 adder, u16 move) +static bool32 JumpIfMoveFailed(u8 adder, u16 move) { - const u8 *BS_ptr = gBattlescriptCurrInstr + adder; if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { gLastLandedMoves[gBattlerTarget] = 0; gLastHitByType[gBattlerTarget] = 0; - BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + return TRUE; } else { TrySetDestinyBondToHappen(); if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBattlerTarget, 0, 0, move)) - return; + return TRUE; } - gBattlescriptCurrInstr = BS_ptr; + gBattlescriptCurrInstr += adder; + return FALSE; } static void Cmd_jumpifaffectedbyprotect(void) { - if (DEFENDER_IS_PROTECTED) + if (IsBattlerProtected(gBattlerTarget, gCurrentMove)) { gMoveResultFlags |= MOVE_RESULT_MISSED; JumpIfMoveFailed(5, 0); @@ -1031,10 +1581,10 @@ static void Cmd_jumpifaffectedbyprotect(void) } } -bool8 JumpIfMoveAffectedByProtect(u16 move) +static bool8 JumpIfMoveAffectedByProtect(u16 move) { bool8 affected = FALSE; - if (DEFENDER_IS_PROTECTED) + if (IsBattlerProtected(gBattlerTarget, move)) { gMoveResultFlags |= MOVE_RESULT_MISSED; JumpIfMoveFailed(7, move); @@ -1044,44 +1594,59 @@ bool8 JumpIfMoveAffectedByProtect(u16 move) return affected; } -static bool8 AccuracyCalcHelper(u16 move) +static bool32 AccuracyCalcHelper(u16 move) { if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) { JumpIfMoveFailed(7, move); return TRUE; } + else if (B_TOXIC_NEVER_MISS >= GEN_6 + && gBattleMoves[move].effect == EFFECT_TOXIC + && IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_POISON)) + { + JumpIfMoveFailed(7, move); + return TRUE; + } + // If the attacker has the ability No Guard and they aren't targeting a Pokemon involved in a Sky Drop with the move Sky Drop, move hits. + else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) + { + if (!JumpIfMoveFailed(7, move)) + RecordAbilityBattle(gBattlerAttacker, ABILITY_NO_GUARD); + return TRUE; + } + // If the target has the ability No Guard and they aren't involved in a Sky Drop or the current move isn't Sky Drop, move hits. + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) + { + if (!JumpIfMoveFailed(7, move)) + RecordAbilityBattle(gBattlerTarget, ABILITY_NO_GUARD); + return TRUE; + } - if (!(gHitMarker & HITMARKER_IGNORE_ON_AIR) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR) + if (gBattleStruct->zmove.active && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)) + { + JumpIfMoveFailed(7, move); + return TRUE; + } + + if ((gStatuses3[gBattlerTarget] & STATUS3_PHANTOM_FORCE) + || (!(gBattleMoves[move].flags & (FLAG_DMG_IN_AIR | FLAG_DMG_2X_IN_AIR)) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR) + || (!(gBattleMoves[move].flags & FLAG_DMG_UNDERGROUND) && gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND) + || (!(gBattleMoves[move].flags & FLAG_DMG_UNDERWATER) && gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER)) { gMoveResultFlags |= MOVE_RESULT_MISSED; JumpIfMoveFailed(7, move); return TRUE; } - gHitMarker &= ~HITMARKER_IGNORE_ON_AIR; - - if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND) - { - gMoveResultFlags |= MOVE_RESULT_MISSED; - JumpIfMoveFailed(7, move); - return TRUE; - } - - gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND; - - if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER) - { - gMoveResultFlags |= MOVE_RESULT_MISSED; - JumpIfMoveFailed(7, move); - return TRUE; - } - - gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER; - - if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMoves[move].effect == EFFECT_THUNDER) - || (gBattleMoves[move].effect == EFFECT_ALWAYS_HIT || gBattleMoves[move].effect == EFFECT_VITAL_THROW)) + if ((WEATHER_HAS_EFFECT && + ((IsBattlerWeatherAffected(gBattlerTarget, B_WEATHER_RAIN) && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE)) + || ((B_BLIZZARD_HAIL >= GEN_4 && (gBattleWeather & B_WEATHER_HAIL) && move == MOVE_BLIZZARD)))) + || (gBattleMoves[move].effect == EFFECT_VITAL_THROW) + || (gBattleMoves[move].accuracy == 0) + || ((B_MINIMIZE_DMG_ACC >= GEN_6) && (gStatuses3[gBattlerTarget] & STATUS3_MINIMIZED) && (gBattleMoves[move].flags & FLAG_DMG_MINIMIZE))) { + // thunder/hurricane ignore acc checks in rain unless target is holding utility umbrella JumpIfMoveFailed(7, move); return TRUE; } @@ -1089,93 +1654,133 @@ static bool8 AccuracyCalcHelper(u16 move) return FALSE; } +u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect) +{ + u32 calc, moveAcc; + s8 buff, accStage, evasionStage; + u8 atkParam = GetBattlerHoldEffectParam(battlerAtk); + u8 defParam = GetBattlerHoldEffectParam(battlerDef); + + gPotentialItemEffectBattler = battlerDef; + accStage = gBattleMons[battlerAtk].statStages[STAT_ACC]; + evasionStage = gBattleMons[battlerDef].statStages[STAT_EVASION]; + if (atkAbility == ABILITY_UNAWARE || atkAbility == ABILITY_KEEN_EYE) + evasionStage = DEFAULT_STAT_STAGE; + if (gBattleMoves[move].flags & FLAG_STAT_STAGES_IGNORED) + evasionStage = DEFAULT_STAT_STAGE; + if (defAbility == ABILITY_UNAWARE) + accStage = DEFAULT_STAT_STAGE; + + if (gBattleMons[battlerDef].status2 & STATUS2_FORESIGHT || gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED) + buff = accStage; + else + buff = accStage + DEFAULT_STAT_STAGE - evasionStage; + + if (buff < MIN_STAT_STAGE) + buff = MIN_STAT_STAGE; + if (buff > MAX_STAT_STAGE) + buff = MAX_STAT_STAGE; + + moveAcc = gBattleMoves[move].accuracy; + // Check Thunder and Hurricane on sunny weather. + if (IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) + && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE)) + moveAcc = 50; + // Check Wonder Skin. + if (defAbility == ABILITY_WONDER_SKIN && IS_MOVE_STATUS(move) && moveAcc > 50) + moveAcc = 50; + + calc = gAccuracyStageRatios[buff].dividend * moveAcc; + calc /= gAccuracyStageRatios[buff].divisor; + + if (atkAbility == ABILITY_COMPOUND_EYES) + calc = (calc * 130) / 100; // 1.3 compound eyes boost + else if (atkAbility == ABILITY_VICTORY_STAR) + calc = (calc * 110) / 100; // 1.1 victory star boost + if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_VICTORY_STAR) + calc = (calc * 110) / 100; // 1.1 ally's victory star boost + + if (defAbility == ABILITY_SAND_VEIL && WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_SANDSTORM) + calc = (calc * 80) / 100; // 1.2 sand veil loss + else if (defAbility == ABILITY_SNOW_CLOAK && WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_HAIL) + calc = (calc * 80) / 100; // 1.2 snow cloak loss + else if (defAbility == ABILITY_TANGLED_FEET && gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) + calc = (calc * 50) / 100; // 1.5 tangled feet loss + + if (atkAbility == ABILITY_HUSTLE && IS_MOVE_PHYSICAL(move)) + calc = (calc * 80) / 100; // 1.2 hustle loss + + if (defHoldEffect == HOLD_EFFECT_EVASION_UP) + calc = (calc * (100 - defParam)) / 100; + + if (atkHoldEffect == HOLD_EFFECT_WIDE_LENS) + calc = (calc * (100 + atkParam)) / 100; + else if (atkHoldEffect == HOLD_EFFECT_ZOOM_LENS && GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef)); + calc = (calc * (100 + atkParam)) / 100; + + if (gProtectStructs[battlerAtk].usedMicleBerry) + { + gProtectStructs[battlerAtk].usedMicleBerry = FALSE; + if (atkAbility == ABILITY_RIPEN) + calc = (calc * 140) / 100; // ripen gives 40% acc boost + else + calc = (calc * 120) / 100; // 20% acc boost + } + + if (gFieldStatuses & STATUS_FIELD_GRAVITY) + calc = (calc * 5) / 3; // 1.66 Gravity acc boost + +#if B_AFFECTION_MECHANICS == TRUE + // With high affection/friendship there's a chance to evade a move by substracting 10% of its accuracy. + // I can't find exact information about that chance, so I'm just gonna write it as a 20% chance for now. + if (GetMonFriendshipScore(&gPlayerParty[gBattlerPartyIndexes[battlerDef]]) >= FRIENDSHIP_150_TO_199 && (Random() % 100) <= 20) + calc = (calc * 90) / 100; +#endif + + return calc; +} + static void Cmd_accuracycheck(void) { - u16 move = T2_READ_16(gBattlescriptCurrInstr + 5); + u16 type, move = T2_READ_16(gBattlescriptCurrInstr + 5); + u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); - if (move == NO_ACC_CALC || move == NO_ACC_CALC_CHECK_LOCK_ON) + if (move == ACC_CURR_MOVE) + move = gCurrentMove; + + if (move == NO_ACC_CALC_CHECK_LOCK_ON) { - if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == NO_ACC_CALC_CHECK_LOCK_ON && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) + if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) gBattlescriptCurrInstr += 7; - else if (gStatuses3[gBattlerTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + else if (gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE)) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else if (!JumpIfMoveAffectedByProtect(0)) gBattlescriptCurrInstr += 7; } else { - u8 type, moveAcc, holdEffect, param; - s8 buff; - u16 calc; - - if (move == 0) - move = gCurrentMove; - GET_MOVE_TYPE(move, type); - if (JumpIfMoveAffectedByProtect(move)) return; if (AccuracyCalcHelper(move)) return; - if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT) - { - u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC]; - buff = acc; - } - else - { - u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC]; - buff = acc + DEFAULT_STAT_STAGE - gBattleMons[gBattlerTarget].statStages[STAT_EVASION]; - } - - if (buff < MIN_STAT_STAGE) - buff = MIN_STAT_STAGE; - if (buff > MAX_STAT_STAGE) - buff = MAX_STAT_STAGE; - - moveAcc = gBattleMoves[move].accuracy; - // check Thunder on sunny weather - if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER) - moveAcc = 50; - - calc = sAccuracyStageRatios[buff].dividend * moveAcc; - calc /= sAccuracyStageRatios[buff].divisor; - - if (gBattleMons[gBattlerAttacker].ability == ABILITY_COMPOUND_EYES) - calc = (calc * 130) / 100; // 1.3 compound eyes boost - if (WEATHER_HAS_EFFECT && gBattleMons[gBattlerTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY) - calc = (calc * 80) / 100; // 1.2 sand veil loss - if (gBattleMons[gBattlerAttacker].ability == ABILITY_HUSTLE && IS_TYPE_PHYSICAL(type)) - calc = (calc * 80) / 100; // 1.2 hustle loss - - if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY) - { - holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect; - param = gEnigmaBerries[gBattlerTarget].holdEffectParam; - } - else - { - holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item); - param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item); - } - - gPotentialItemEffectBattler = gBattlerTarget; - - if (holdEffect == HOLD_EFFECT_EVASION_UP) - calc = (calc * (100 - param)) / 100; - // final calculation - if ((Random() % 100 + 1) > calc) + if ((Random() % 100 + 1) > GetTotalAccuracy(gBattlerAttacker, gBattlerTarget, move, GetBattlerAbility(gBattlerAttacker), GetBattlerAbility(gBattlerTarget), + GetBattlerHoldEffect(gBattlerAttacker, TRUE), GetBattlerHoldEffect(gBattlerTarget, TRUE))) { gMoveResultFlags |= MOVE_RESULT_MISSED; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_BLUNDER_POLICY) + gBattleStruct->blunderPolicy = TRUE; // Only activates from missing through acc/evasion checks + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && - (gBattleMoves[move].target == MOVE_TARGET_BOTH || gBattleMoves[move].target == MOVE_TARGET_FOES_AND_ALLY)) + (moveTarget == MOVE_TARGET_BOTH || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_ATK; else gBattleCommunication[MISS_TYPE] = B_MSG_MISSED; - CheckWonderGuardAndLevitate(); + if (gBattleMoves[move].power) + CalcTypeEffectivenessMultiplier(move, type, gBattlerAttacker, gBattlerTarget, TRUE); } JumpIfMoveFailed(7, move); } @@ -1184,7 +1789,8 @@ static void Cmd_accuracycheck(void) static void Cmd_attackstring(void) { if (gBattleControllerExecFlags) - return; + return; + if (!(gHitMarker & (HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED))) { PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker); @@ -1196,24 +1802,32 @@ static void Cmd_attackstring(void) static void Cmd_ppreduce(void) { - s32 ppToDeduct = 1; + s32 i, ppToDeduct = 1; if (gBattleControllerExecFlags) return; if (!gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure) { - switch (gBattleMoves[gCurrentMove].target) + switch (GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove)) { case MOVE_TARGET_FOES_AND_ALLY: - ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBattlerAttacker, ABILITY_PRESSURE, 0, 0); + for (i = 0; i < gBattlersCount; i++) + { + if (i != gBattlerAttacker && IsBattlerAlive(i)) + ppToDeduct += (GetBattlerAbility(i) == ABILITY_PRESSURE); + } break; case MOVE_TARGET_BOTH: case MOVE_TARGET_OPPONENTS_FIELD: - ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBattlerAttacker, ABILITY_PRESSURE, 0, 0); + for (i = 0; i < gBattlersCount; i++) + { + if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i)) + ppToDeduct += (GetBattlerAbility(i) == ABILITY_PRESSURE); + } break; default: - if (gBattlerAttacker != gBattlerTarget && gBattleMons[gBattlerTarget].ability == ABILITY_PRESSURE) + if (gBattlerAttacker != gBattlerTarget && GetBattlerAbility(gBattlerTarget) == ABILITY_PRESSURE) ppToDeduct++; break; } @@ -1221,520 +1835,319 @@ static void Cmd_ppreduce(void) if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBattlerAttacker].pp[gCurrMovePos]) { - gProtectStructs[gBattlerAttacker].notFirstStrike = 1; + gProtectStructs[gBattlerAttacker].notFirstStrike = TRUE; + // For item Metronome, echoed voice + if (gCurrentMove == gLastResultingMoves[gBattlerAttacker] + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !WasUnableToUseMove(gBattlerAttacker)) + gBattleStruct->sameMoveTurns[gBattlerAttacker]++; + else + gBattleStruct->sameMoveTurns[gBattlerAttacker] = 0; if (gBattleMons[gBattlerAttacker].pp[gCurrMovePos] > ppToDeduct) gBattleMons[gBattlerAttacker].pp[gCurrMovePos] -= ppToDeduct; else gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 0; - if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) - && !((gDisableStructs[gBattlerAttacker].mimickedMoves) & gBitTable[gCurrMovePos])) + if (MOVE_IS_PERMANENT(gBattlerAttacker, gCurrMovePos)) { gActiveBattler = gBattlerAttacker; - BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBattlerAttacker].pp[gCurrMovePos]); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, + sizeof(gBattleMons[gBattlerAttacker].pp[gCurrMovePos]), + &gBattleMons[gBattlerAttacker].pp[gCurrMovePos]); MarkBattlerForControllerExec(gBattlerAttacker); } } - gHitMarker &= ~(HITMARKER_NO_PPDEDUCT); + gHitMarker &= ~HITMARKER_NO_PPDEDUCT; gBattlescriptCurrInstr++; } +// The chance is 1/N for each stage. +#if B_CRIT_CHANCE >= GEN_7 + static const u8 sCriticalHitChance[] = {24, 8, 2, 1, 1}; +#elif B_CRIT_CHANCE == GEN_6 + static const u8 sCriticalHitChance[] = {16, 8, 2, 1, 1}; +#else + static const u8 sCriticalHitChance[] = {16, 8, 4, 3, 2}; // Gens 2,3,4,5 +#endif // B_CRIT_CHANCE + +#define BENEFITS_FROM_LEEK(battler, holdEffect)((holdEffect == HOLD_EFFECT_LEEK) && (GET_BASE_SPECIES_ID(gBattleMons[battler].species) == SPECIES_FARFETCHD || gBattleMons[battler].species == SPECIES_SIRFETCHD)) +s32 CalcCritChanceStage(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recordAbility) +{ + s32 critChance = 0; + u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); + u32 abilityDef = GetBattlerAbility(gBattlerTarget); + u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); + + if (gSideStatuses[battlerDef] & SIDE_STATUS_LUCKY_CHANT + || gStatuses3[gBattlerAttacker] & STATUS3_CANT_SCORE_A_CRIT) + { + critChance = -1; + } + else if (abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR) + { + if (recordAbility) + RecordAbilityBattle(battlerDef, abilityDef); + critChance = -1; + } + else if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS + || gBattleMoves[move].effect == EFFECT_ALWAYS_CRIT + || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) + || move == MOVE_SURGING_STRIKES) + { + critChance = -2; + } + else + { + critChance = 2 * ((gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0) + + ((gBattleMoves[gCurrentMove].flags & FLAG_HIGH_CRIT) != 0) + + (holdEffectAtk == HOLD_EFFECT_SCOPE_LENS) + + 2 * (holdEffectAtk == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBattlerAttacker].species == SPECIES_CHANSEY) + + 2 * BENEFITS_FROM_LEEK(battlerAtk, holdEffectAtk) + #if B_AFFECTION_MECHANICS == TRUE + + 2 * (GetMonFriendshipScore(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]) >= FRIENDSHIP_200_TO_254) + #endif + + (abilityAtk == ABILITY_SUPER_LUCK); + + if (critChance >= ARRAY_COUNT(sCriticalHitChance)) + critChance = ARRAY_COUNT(sCriticalHitChance) - 1; + } + + return critChance; +} +#undef BENEFITS_FROM_LEEK + +s8 GetInverseCritChance(u8 battlerAtk, u8 battlerDef, u32 move) +{ + s32 critChanceIndex = CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE); + if(critChanceIndex < 0) + return -1; + else + return sCriticalHitChance[critChanceIndex]; +} + static void Cmd_critcalc(void) { - u8 holdEffect; - u16 item, critChance; - - item = gBattleMons[gBattlerAttacker].item; - - if (item == ITEM_ENIGMA_BERRY) - holdEffect = gEnigmaBerries[gBattlerAttacker].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(item); - + u16 partySlot; + s32 critChance = CalcCritChanceStage(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE); gPotentialItemEffectBattler = gBattlerAttacker; - critChance = 2 * ((gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0) - + (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) - + (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) - + (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) - + (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) - + (holdEffect == HOLD_EFFECT_SCOPE_LENS) - + 2 * (holdEffect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBattlerAttacker].species == SPECIES_CHANSEY) - + 2 * (holdEffect == HOLD_EFFECT_STICK && gBattleMons[gBattlerAttacker].species == SPECIES_FARFETCHD); - - if (critChance >= ARRAY_COUNT(sCriticalHitChance)) - critChance = ARRAY_COUNT(sCriticalHitChance) - 1; - - if ((gBattleMons[gBattlerTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBattlerTarget].ability != ABILITY_SHELL_ARMOR) - && !(gStatuses3[gBattlerAttacker] & STATUS3_CANT_SCORE_A_CRIT) - && !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) - && !(Random() % sCriticalHitChance[critChance])) - gCritMultiplier = 2; + if (gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) + gIsCriticalHit = FALSE; + else if (critChance == -1) + gIsCriticalHit = FALSE; + else if (critChance == -2) + gIsCriticalHit = TRUE; + else if (Random() % sCriticalHitChance[critChance] == 0) + gIsCriticalHit = TRUE; else - gCritMultiplier = 1; + gIsCriticalHit = FALSE; + + // Counter for EVO_CRITICAL_HITS. + partySlot = gBattlerPartyIndexes[gBattlerAttacker]; + if (gIsCriticalHit && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER + && !(gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gBattlerAttacker) == B_POSITION_PLAYER_LEFT)) + gPartyCriticalHits[partySlot]++; gBattlescriptCurrInstr++; } static void Cmd_damagecalc(void) { - u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)]; - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove, - sideStatus, gDynamicBasePower, - gBattleStruct->dynamicMoveType, gBattlerAttacker, gBattlerTarget); - gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleScripting.dmgMultiplier; - - if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) - gBattleMoveDamage *= 2; - if (gProtectStructs[gBattlerAttacker].helpingHand) - gBattleMoveDamage = gBattleMoveDamage * 15 / 10; + u8 moveType; + GET_MOVE_TYPE(gCurrentMove, moveType); + gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE); gBattlescriptCurrInstr++; } -void AI_CalcDmg(u8 attacker, u8 defender) -{ - u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(defender)]; - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[attacker], &gBattleMons[defender], gCurrentMove, - sideStatus, gDynamicBasePower, - gBattleStruct->dynamicMoveType, attacker, defender); - gDynamicBasePower = 0; - gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleScripting.dmgMultiplier; - - if (gStatuses3[attacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) - gBattleMoveDamage *= 2; - if (gProtectStructs[attacker].helpingHand) - gBattleMoveDamage = gBattleMoveDamage * 15 / 10; -} - -static void ModulateDmgByType(u8 multiplier) -{ - gBattleMoveDamage = gBattleMoveDamage * multiplier / 10; - if (gBattleMoveDamage == 0 && multiplier != 0) - gBattleMoveDamage = 1; - - switch (multiplier) - { - case TYPE_MUL_NO_EFFECT: - gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; - gMoveResultFlags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE; - gMoveResultFlags &= ~MOVE_RESULT_SUPER_EFFECTIVE; - break; - case TYPE_MUL_NOT_EFFECTIVE: - if (gBattleMoves[gCurrentMove].power && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) - { - if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) - gMoveResultFlags &= ~MOVE_RESULT_SUPER_EFFECTIVE; - else - gMoveResultFlags |= MOVE_RESULT_NOT_VERY_EFFECTIVE; - } - break; - case TYPE_MUL_SUPER_EFFECTIVE: - if (gBattleMoves[gCurrentMove].power && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) - { - if (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE) - gMoveResultFlags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE; - else - gMoveResultFlags |= MOVE_RESULT_SUPER_EFFECTIVE; - } - break; - } -} - static void Cmd_typecalc(void) { - s32 i = 0; u8 moveType; - if (gCurrentMove == MOVE_STRUGGLE) - { - gBattlescriptCurrInstr++; - return; - } + GET_MOVE_TYPE(gCurrentMove, moveType); + CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, gBattlerAttacker, gBattlerTarget, TRUE); + + gBattlescriptCurrInstr++; +} + +static void Cmd_adjustdamage(void) +{ + u8 holdEffect, param; + u32 moveType; + u32 friendshipScore = GetMonFriendshipScore(&gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]]); + u32 rand = Random() % 100; GET_MOVE_TYPE(gCurrentMove, moveType); - // check stab - if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType)) - { - gBattleMoveDamage = gBattleMoveDamage * 15; - gBattleMoveDamage = gBattleMoveDamage / 10; - } + if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + goto END; + if (DoesDisguiseBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + goto END; + if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage) + goto END; - if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND) - { - gLastUsedAbility = gBattleMons[gBattlerTarget].ability; - gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE); - gLastLandedMoves[gBattlerTarget] = 0; - gLastHitByType[gBattlerTarget] = 0; - gBattleCommunication[MISS_TYPE] = B_MSG_GROUND_MISS; - RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); - } - else - { - while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) - { - if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) - { - if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT) - break; - i += 3; - continue; - } - else if (TYPE_EFFECT_ATK_TYPE(i) == moveType) - { - // check type1 - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1) - ModulateDmgByType(TYPE_EFFECT_MULTIPLIER(i)); - // check type2 - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 && - gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2) - ModulateDmgByType(TYPE_EFFECT_MULTIPLIER(i)); - } - i += 3; - } - } - - if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2 - && (!(gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) || ((gMoveResultFlags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE))) - && gBattleMoves[gCurrentMove].power) - { - gLastUsedAbility = ABILITY_WONDER_GUARD; - gMoveResultFlags |= MOVE_RESULT_MISSED; - gLastLandedMoves[gBattlerTarget] = 0; - gLastHitByType[gBattlerTarget] = 0; - gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_DMG; - RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); - } - if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) - gProtectStructs[gBattlerAttacker].targetNotAffected = 1; - - gBattlescriptCurrInstr++; -} - -static void CheckWonderGuardAndLevitate(void) -{ - u8 flags = 0; - s32 i = 0; - u8 moveType; - - if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power) - return; - - GET_MOVE_TYPE(gCurrentMove, moveType); - - if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND) - { - gLastUsedAbility = ABILITY_LEVITATE; - gBattleCommunication[MISS_TYPE] = B_MSG_GROUND_MISS; - RecordAbilityBattle(gBattlerTarget, ABILITY_LEVITATE); - return; - } - - while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) - { - if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) - { - if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT) - break; - i += 3; - continue; - } - if (TYPE_EFFECT_ATK_TYPE(i) == moveType) - { - // check no effect - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1 - && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT) - { - gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; - gProtectStructs[gBattlerAttacker].targetNotAffected = 1; - } - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 && - gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 && - TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT) - { - gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; - gProtectStructs[gBattlerAttacker].targetNotAffected = 1; - } - - // check super effective - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1 && TYPE_EFFECT_MULTIPLIER(i) == 20) - flags |= 1; - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 - && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 - && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) - flags |= 1; - - // check not very effective - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1 && TYPE_EFFECT_MULTIPLIER(i) == 5) - flags |= 2; - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 - && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 - && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE) - flags |= 2; - } - i += 3; - } - - if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2) - { - if (((flags & 2) || !(flags & 1)) && gBattleMoves[gCurrentMove].power) - { - gLastUsedAbility = ABILITY_WONDER_GUARD; - gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_DMG; - RecordAbilityBattle(gBattlerTarget, ABILITY_WONDER_GUARD); - } - } -} - -static void ModulateDmgByType2(u8 multiplier, u16 move, u8* flags) // same as ModulateDmgByType except different arguments -{ - gBattleMoveDamage = gBattleMoveDamage * multiplier / 10; - if (gBattleMoveDamage == 0 && multiplier != 0) - gBattleMoveDamage = 1; - - switch (multiplier) - { - case TYPE_MUL_NO_EFFECT: - *flags |= MOVE_RESULT_DOESNT_AFFECT_FOE; - *flags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE; - *flags &= ~MOVE_RESULT_SUPER_EFFECTIVE; - break; - case TYPE_MUL_NOT_EFFECTIVE: - if (gBattleMoves[move].power && !(*flags & MOVE_RESULT_NO_EFFECT)) - { - if (*flags & MOVE_RESULT_SUPER_EFFECTIVE) - *flags &= ~MOVE_RESULT_SUPER_EFFECTIVE; - else - *flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE; - } - break; - case TYPE_MUL_SUPER_EFFECTIVE: - if (gBattleMoves[move].power && !(*flags & MOVE_RESULT_NO_EFFECT)) - { - if (*flags & MOVE_RESULT_NOT_VERY_EFFECTIVE) - *flags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE; - else - *flags |= MOVE_RESULT_SUPER_EFFECTIVE; - } - break; - } -} - -u8 TypeCalc(u16 move, u8 attacker, u8 defender) -{ - s32 i = 0; - u8 flags = 0; - u8 moveType; - - if (move == MOVE_STRUGGLE) - return 0; - - moveType = gBattleMoves[move].type; - - // check stab - if (IS_BATTLER_OF_TYPE(attacker, moveType)) - { - gBattleMoveDamage = gBattleMoveDamage * 15; - gBattleMoveDamage = gBattleMoveDamage / 10; - } - - if (gBattleMons[defender].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND) - { - flags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE); - } - else - { - while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) - { - if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) - { - if (gBattleMons[defender].status2 & STATUS2_FORESIGHT) - break; - i += 3; - continue; - } - - else if (TYPE_EFFECT_ATK_TYPE(i) == moveType) - { - // check type1 - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[defender].type1) - ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags); - // check type2 - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[defender].type2 && - gBattleMons[defender].type1 != gBattleMons[defender].type2) - ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags); - } - i += 3; - } - } - - if (gBattleMons[defender].ability == ABILITY_WONDER_GUARD && !(flags & MOVE_RESULT_MISSED) - && AttacksThisTurn(attacker, move) == 2 - && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE))) - && gBattleMoves[move].power) - { - flags |= MOVE_RESULT_MISSED; - } - return flags; -} - -u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility) -{ - s32 i = 0; - u8 flags = 0; - u8 type1 = gBaseStats[targetSpecies].type1, type2 = gBaseStats[targetSpecies].type2; - u8 moveType; - - if (move == MOVE_STRUGGLE) - return 0; - - moveType = gBattleMoves[move].type; - - if (targetAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND) - { - flags = MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE; - } - else - { - while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) - { - if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) - { - i += 3; - continue; - } - if (TYPE_EFFECT_ATK_TYPE(i) == moveType) - { - // check type1 - if (TYPE_EFFECT_DEF_TYPE(i) == type1) - ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags); - // check type2 - if (TYPE_EFFECT_DEF_TYPE(i) == type2 && type1 != type2) - ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags); - } - i += 3; - } - } - if (targetAbility == ABILITY_WONDER_GUARD - && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE))) - && gBattleMoves[move].power) - flags |= MOVE_RESULT_DOESNT_AFFECT_FOE; - return flags; -} - -// Multiplies the damage by a random factor between 85% to 100% inclusive -static inline void ApplyRandomDmgMultiplier(void) -{ - u16 rand = Random(); - u16 randPercent = 100 - (rand % 16); - - if (gBattleMoveDamage != 0) - { - gBattleMoveDamage *= randPercent; - gBattleMoveDamage /= 100; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } -} - -static void Unused_ApplyRandomDmgMultiplier(void) -{ - ApplyRandomDmgMultiplier(); -} - -static void Cmd_adjustnormaldamage(void) -{ - u8 holdEffect, param; - - ApplyRandomDmgMultiplier(); - - if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY) - { - holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect; - param = gEnigmaBerries[gBattlerTarget].holdEffectParam; - } - else - { - holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item); - param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item); - } + holdEffect = GetBattlerHoldEffect(gBattlerTarget, TRUE); + param = GetBattlerHoldEffectParam(gBattlerTarget); gPotentialItemEffectBattler = gBattlerTarget; - if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param) + if (holdEffect == HOLD_EFFECT_FOCUS_BAND && rand < param) { RecordItemEffectBattle(gBattlerTarget, holdEffect); - gSpecialStatuses[gBattlerTarget].focusBanded = 1; + gSpecialStatuses[gBattlerTarget].focusBanded = TRUE; } - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) - && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded) - && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) + #if B_STURDY >= GEN_5 + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STURDY && BATTLER_MAX_HP(gBattlerTarget)) { - gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; - if (gProtectStructs[gBattlerTarget].endured) - { - gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; - } - else if (gSpecialStatuses[gBattlerTarget].focusBanded) - { - gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; - gLastUsedItem = gBattleMons[gBattlerTarget].item; - } + RecordAbilityBattle(gBattlerTarget, ABILITY_STURDY); + gSpecialStatuses[gBattlerTarget].sturdied = TRUE; } - gBattlescriptCurrInstr++; -} - -static void Cmd_adjustnormaldamage2(void) // The same as adjustnormaldamage except it doesn't check for false swipe move effect. -{ - u8 holdEffect, param; - - ApplyRandomDmgMultiplier(); - - if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY) - { - holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect; - param = gEnigmaBerries[gBattlerTarget].holdEffectParam; - } - else - { - holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item); - param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item); - } - - gPotentialItemEffectBattler = gBattlerTarget; - - if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param) + #endif + else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && BATTLER_MAX_HP(gBattlerTarget)) { RecordItemEffectBattle(gBattlerTarget, holdEffect); - gSpecialStatuses[gBattlerTarget].focusBanded = 1; + gSpecialStatuses[gBattlerTarget].focusSashed = TRUE; } - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) - && (gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded) - && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) +#if B_AFFECTION_MECHANICS == TRUE + else if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER && friendshipScore >= FRIENDSHIP_100_TO_149) { - gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; - if (gProtectStructs[gBattlerTarget].endured) + if ((friendshipScore == FRIENDSHIP_MAX && rand < 25) + || (friendshipScore == FRIENDSHIP_200_TO_254 && rand < 20) + || (friendshipScore == FRIENDSHIP_150_TO_199 && rand < 15) + || (friendshipScore == FRIENDSHIP_100_TO_149 && rand < 10)) + gSpecialStatuses[gBattlerTarget].affectionEndured = TRUE; + } +#endif + + if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE + && !gProtectStructs[gBattlerTarget].endured + && !gSpecialStatuses[gBattlerTarget].focusBanded + && !gSpecialStatuses[gBattlerTarget].focusSashed +#if B_AFFECTION_MECHANICS == TRUE + && !gSpecialStatuses[gBattlerTarget].affectionEndured +#endif + && !gSpecialStatuses[gBattlerTarget].sturdied) + goto END; + + // Handle reducing the dmg to 1 hp. + gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; + + if (gProtectStructs[gBattlerTarget].endured) + { + gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; + } + else if (gSpecialStatuses[gBattlerTarget].focusBanded || gSpecialStatuses[gBattlerTarget].focusSashed) + { + gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; + gLastUsedItem = gBattleMons[gBattlerTarget].item; + } + else if (gSpecialStatuses[gBattlerTarget].sturdied) + { + gMoveResultFlags |= MOVE_RESULT_STURDIED; + gLastUsedAbility = ABILITY_STURDY; + } +#if B_AFFECTION_MECHANICS == TRUE + else if (gSpecialStatuses[gBattlerTarget].affectionEndured) + { + gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED_AFFECTION; + } +#endif + +END: + gBattlescriptCurrInstr++; + + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMoveDamage >= 1) + gSpecialStatuses[gBattlerAttacker].damagedMons |= gBitTable[gBattlerTarget]; + + // Check gems and damage reducing berries. + if (gSpecialStatuses[gBattlerTarget].berryReduced + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerTarget].item) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryReduceDmg; + gLastUsedItem = gBattleMons[gBattlerTarget].item; + } + if (gSpecialStatuses[gBattlerAttacker].gemBoost + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerAttacker].item) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_GemActivates; + gLastUsedItem = gBattleMons[gBattlerAttacker].item; + } + + // B_WEATHER_STRONG_WINDS prints a string when it's about to reduce the power + // of a move that is Super Effective against a Flying-type Pokémon. + if (gBattleWeather & B_WEATHER_STRONG_WINDS) + { + if ((gBattleMons[gBattlerTarget].type1 == TYPE_FLYING + && GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type1) >= UQ_4_12(2.0)) + || (gBattleMons[gBattlerTarget].type2 == TYPE_FLYING + && GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type2) >= UQ_4_12(2.0)) + || (gBattleMons[gBattlerTarget].type3 == TYPE_FLYING + && GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type3) >= UQ_4_12(2.0))) { - gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; - } - else if (gSpecialStatuses[gBattlerTarget].focusBanded) - { - gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; - gLastUsedItem = gBattleMons[gBattlerTarget].item; + gBattlerAbility = gBattlerTarget; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AttackWeakenedByStrongWinds; } } - gBattlescriptCurrInstr++; } -static void Cmd_attackanimation(void) +static void Cmd_multihitresultmessage(void) { if (gBattleControllerExecFlags) return; - if ((gHitMarker & HITMARKER_NO_ANIMATIONS) && (gCurrentMove != MOVE_TRANSFORM && gCurrentMove != MOVE_SUBSTITUTE)) + if (!(gMoveResultFlags & MOVE_RESULT_FAILED) && !(gMoveResultFlags & MOVE_RESULT_FOE_ENDURED)) + { + if (gMoveResultFlags & MOVE_RESULT_STURDIED) + { + gMoveResultFlags &= ~(MOVE_RESULT_STURDIED | MOVE_RESULT_FOE_HUNG_ON); + gSpecialStatuses[gBattlerTarget].sturdied = FALSE; // Delete this line to make Sturdy last for the duration of the whole move turn. + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SturdiedMsg; + return; + } + else if (gMoveResultFlags & MOVE_RESULT_FOE_HUNG_ON) + { + gLastUsedItem = gBattleMons[gBattlerTarget].item; + gPotentialItemEffectBattler = gBattlerTarget; + gMoveResultFlags &= ~(MOVE_RESULT_STURDIED | MOVE_RESULT_FOE_HUNG_ON); + gSpecialStatuses[gBattlerTarget].focusBanded = FALSE; // Delete this line to make Focus Band last for the duration of the whole move turn. + gSpecialStatuses[gBattlerTarget].focusSashed = FALSE; // Delete this line to make Focus Sash last for the duration of the whole move turn. + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_HangedOnMsg; + return; + } + } + gBattlescriptCurrInstr++; + + // Print berry reducing message after result message. + if (gSpecialStatuses[gBattlerTarget].berryReduced + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + { + gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_PrintBerryReduceString; + } +} + +static void Cmd_attackanimation(void) +{ + u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); + + if (gBattleControllerExecFlags) + return; + + if ((gHitMarker & HITMARKER_NO_ANIMATIONS) + && gCurrentMove != MOVE_TRANSFORM + && gCurrentMove != MOVE_SUBSTITUTE + // In a wild double battle gotta use the teleport animation if two wild pokemon are alive. + && !(gCurrentMove == MOVE_TELEPORT && WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))) { BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_Pausex20; @@ -1743,9 +2156,9 @@ static void Cmd_attackanimation(void) } else { - if ((gBattleMoves[gCurrentMove].target & MOVE_TARGET_BOTH - || gBattleMoves[gCurrentMove].target & MOVE_TARGET_FOES_AND_ALLY - || gBattleMoves[gCurrentMove].target & MOVE_TARGET_DEPENDS) + if ((moveTarget & MOVE_TARGET_BOTH + || moveTarget & MOVE_TARGET_FOES_AND_ALLY + || moveTarget & MOVE_TARGET_DEPENDS) && gBattleScripting.animTargetsHit) { gBattlescriptCurrInstr++; @@ -1769,9 +2182,9 @@ static void Cmd_attackanimation(void) else multihit = gMultiHitCounter; - BtlController_EmitMoveAnimation(0, gCurrentMove, gBattleScripting.animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBattlerAttacker].friendship, &gDisableStructs[gBattlerAttacker], multihit); - gBattleScripting.animTurn += 1; - gBattleScripting.animTargetsHit += 1; + BtlController_EmitMoveAnimation(BUFFER_A, gCurrentMove, gBattleScripting.animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBattlerAttacker].friendship, &gDisableStructs[gBattlerAttacker], multihit); + gBattleScripting.animTurn++; + gBattleScripting.animTargetsHit++; MarkBattlerForControllerExec(gBattlerAttacker); gBattlescriptCurrInstr++; } @@ -1794,27 +2207,19 @@ static void Cmd_healthbarupdate(void) if (gBattleControllerExecFlags) return; - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + if (DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove) && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { PrepareStringBattle(STRINGID_SUBSTITUTEDAMAGED, gActiveBattler); } - else + else if (!DoesDisguiseBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove)) { - s16 healthValue; + s16 healthValue = min(gBattleMoveDamage, 10000); // Max damage (10000) not present in R/S, ensures that huge damage values don't change sign - s32 currDmg = gBattleMoveDamage; - s32 maxPossibleDmgValue = 10000; // not present in R/S, ensures that huge damage values don't change sign - - if (currDmg <= maxPossibleDmgValue) - healthValue = currDmg; - else - healthValue = maxPossibleDmgValue; - - BtlController_EmitHealthBarUpdate(0, healthValue); + BtlController_EmitHealthBarUpdate(BUFFER_A, healthValue); MarkBattlerForControllerExec(gActiveBattler); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleMoveDamage > 0) @@ -1834,15 +2239,15 @@ static void Cmd_datahpupdate(void) if (gBattleStruct->dynamicMoveType == 0) moveType = gBattleMoves[gCurrentMove].type; - else if (!(gBattleStruct->dynamicMoveType & 0x40)) - moveType = gBattleStruct->dynamicMoveType & 0x3F; + else if (!(gBattleStruct->dynamicMoveType & F_DYNAMIC_TYPE_1)) + moveType = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; else moveType = gBattleMoves[gCurrentMove].type; - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + if (DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove) && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { if (gDisableStructs[gActiveBattler].substituteHP >= gBattleMoveDamage) { @@ -1867,9 +2272,15 @@ static void Cmd_datahpupdate(void) return; } } + else if (DoesDisguiseBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove)) + { + gBattleMons[gActiveBattler].species = SPECIES_MIMIKYU_BUSTED; + BattleScriptPush(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = BattleScript_TargetFormChange; + } else { - gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE); + gHitMarker &= ~HITMARKER_IGNORE_SUBSTITUTE; if (gBattleMoveDamage < 0) // hp goes up { gBattleMons[gActiveBattler].hp -= gBattleMoveDamage; @@ -1879,9 +2290,9 @@ static void Cmd_datahpupdate(void) } else // hp goes down { - if (gHitMarker & HITMARKER_x20) + if (gHitMarker & HITMARKER_SKIP_DMG_TRACK) { - gHitMarker &= ~(HITMARKER_x20); + gHitMarker &= ~HITMARKER_SKIP_DMG_TRACK; } else { @@ -1903,10 +2314,10 @@ static void Cmd_datahpupdate(void) gBattleMons[gActiveBattler].hp = 0; } - if (!gSpecialStatuses[gActiveBattler].dmg && !(gHitMarker & HITMARKER_x100000)) + if (!gSpecialStatuses[gActiveBattler].dmg && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE)) gSpecialStatuses[gActiveBattler].dmg = gHpDealt; - if (IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT) + if (IS_MOVE_PHYSICAL(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE) && gCurrentMove != MOVE_PAIN_SPLIT) { gProtectStructs[gActiveBattler].physicalDmg = gHpDealt; gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt; @@ -1921,7 +2332,7 @@ static void Cmd_datahpupdate(void) gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerTarget; } } - else if (!IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000)) + else if (!IS_MOVE_PHYSICAL(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { gProtectStructs[gActiveBattler].specialDmg = gHpDealt; gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt; @@ -1937,8 +2348,8 @@ static void Cmd_datahpupdate(void) } } } - gHitMarker &= ~(HITMARKER_x100000); - BtlController_EmitSetMonData(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBattler].hp); + gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].hp), &gBattleMons[gActiveBattler].hp); MarkBattlerForControllerExec(gActiveBattler); } } @@ -1955,7 +2366,7 @@ static void Cmd_critmessage(void) { if (gBattleControllerExecFlags == 0) { - if (gCritMultiplier == 2 && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + if (gIsCriticalHit == TRUE && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { PrepareStringBattle(STRINGID_CRITICALHIT, gBattlerAttacker); gBattleCommunication[MSG_DISPLAY] = 1; @@ -1972,14 +2383,14 @@ static void Cmd_effectivenesssound(void) gActiveBattler = gBattlerTarget; if (!(gMoveResultFlags & MOVE_RESULT_MISSED)) { - switch (gMoveResultFlags & (u8)(~(MOVE_RESULT_MISSED))) + switch (gMoveResultFlags & ~MOVE_RESULT_MISSED) { case MOVE_RESULT_SUPER_EFFECTIVE: - BtlController_EmitPlaySE(0, SE_SUPER_EFFECTIVE); + BtlController_EmitPlaySE(BUFFER_A, SE_SUPER_EFFECTIVE); MarkBattlerForControllerExec(gActiveBattler); break; case MOVE_RESULT_NOT_VERY_EFFECTIVE: - BtlController_EmitPlaySE(0, SE_NOT_EFFECTIVE); + BtlController_EmitPlaySE(BUFFER_A, SE_NOT_EFFECTIVE); MarkBattlerForControllerExec(gActiveBattler); break; case MOVE_RESULT_DOESNT_AFFECT_FOE: @@ -1989,20 +2400,21 @@ static void Cmd_effectivenesssound(void) case MOVE_RESULT_FOE_ENDURED: case MOVE_RESULT_ONE_HIT_KO: case MOVE_RESULT_FOE_HUNG_ON: + case MOVE_RESULT_STURDIED: default: if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) { - BtlController_EmitPlaySE(0, SE_SUPER_EFFECTIVE); + BtlController_EmitPlaySE(BUFFER_A, SE_SUPER_EFFECTIVE); MarkBattlerForControllerExec(gActiveBattler); } else if (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE) { - BtlController_EmitPlaySE(0, SE_NOT_EFFECTIVE); + BtlController_EmitPlaySE(BUFFER_A, SE_NOT_EFFECTIVE); MarkBattlerForControllerExec(gActiveBattler); } else if (!(gMoveResultFlags & (MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED))) { - BtlController_EmitPlaySE(0, SE_EFFECTIVE); + BtlController_EmitPlaySE(BUFFER_A, SE_EFFECTIVE); MarkBattlerForControllerExec(gActiveBattler); } break; @@ -2020,13 +2432,15 @@ static void Cmd_resultmessage(void) if (gMoveResultFlags & MOVE_RESULT_MISSED && (!(gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) || gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK)) { + if (gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK) // Wonder Guard or Levitate - show the ability pop-up + CreateAbilityPopUp(gBattlerTarget, gBattleMons[gBattlerTarget].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); stringId = gMissStringIds[gBattleCommunication[MISS_TYPE]]; gBattleCommunication[MSG_DISPLAY] = 1; } else { gBattleCommunication[MSG_DISPLAY] = 1; - switch (gMoveResultFlags & (u8)(~(MOVE_RESULT_MISSED))) + switch (gMoveResultFlags & ~MOVE_RESULT_MISSED) { case MOVE_RESULT_SUPER_EFFECTIVE: stringId = STRINGID_SUPEREFFECTIVE; @@ -2051,7 +2465,7 @@ static void Cmd_resultmessage(void) gPotentialItemEffectBattler = gBattlerTarget; gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON); BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_FocusBandActivates; + gBattlescriptCurrInstr = BattleScript_HangedOnMsg; return; default: if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) @@ -2060,13 +2474,21 @@ static void Cmd_resultmessage(void) } else if (gMoveResultFlags & MOVE_RESULT_ONE_HIT_KO) { - gMoveResultFlags &= ~(MOVE_RESULT_ONE_HIT_KO); - gMoveResultFlags &= ~(MOVE_RESULT_SUPER_EFFECTIVE); - gMoveResultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE); + gMoveResultFlags &= ~MOVE_RESULT_ONE_HIT_KO; + gMoveResultFlags &= ~MOVE_RESULT_SUPER_EFFECTIVE; + gMoveResultFlags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_OneHitKOMsg; return; } + else if (gMoveResultFlags & MOVE_RESULT_STURDIED) + { + gMoveResultFlags &= ~(MOVE_RESULT_STURDIED | MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON); + gSpecialStatuses[gBattlerTarget].sturdied = FALSE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SturdiedMsg; + return; + } else if (gMoveResultFlags & MOVE_RESULT_FOE_ENDURED) { gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON); @@ -2080,13 +2502,23 @@ static void Cmd_resultmessage(void) gPotentialItemEffectBattler = gBattlerTarget; gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON); BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_FocusBandActivates; + gBattlescriptCurrInstr = BattleScript_HangedOnMsg; return; } else if (gMoveResultFlags & MOVE_RESULT_FAILED) { stringId = STRINGID_BUTITFAILED; } + #if B_AFFECTION_MECHANICS == TRUE + else if (gMoveResultFlags & MOVE_RESULT_FOE_ENDURED_AFFECTION) + { + gSpecialStatuses[gBattlerTarget].affectionEndured = FALSE; + gMoveResultFlags &= ~MOVE_RESULT_FOE_ENDURED_AFFECTION; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AffectionBasedEndurance; + return; + } + #endif else { gBattleCommunication[MSG_DISPLAY] = 0; @@ -2098,6 +2530,16 @@ static void Cmd_resultmessage(void) PrepareStringBattle(stringId, gBattlerAttacker); gBattlescriptCurrInstr++; + + // Print berry reducing message after result message. + if (gSpecialStatuses[gBattlerTarget].berryReduced + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + { + gLastUsedItem = gBattleMons[gBattlerTarget].item; + gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_PrintBerryReduceString; + } } static void Cmd_printstring(void) @@ -2105,8 +2547,9 @@ static void Cmd_printstring(void) if (gBattleControllerExecFlags == 0) { u16 var = T2_READ_16(gBattlescriptCurrInstr + 1); - PrepareStringBattle(var, gBattlerAttacker); + gBattlescriptCurrInstr += 3; + PrepareStringBattle(var, gBattlerAttacker); gBattleCommunication[MSG_DISPLAY] = 1; } } @@ -2115,7 +2558,7 @@ static void Cmd_printselectionstring(void) { gActiveBattler = gBattlerAttacker; - BtlController_EmitPrintSelectionString(0, T2_READ_16(gBattlescriptCurrInstr + 1)); + BtlController_EmitPrintSelectionString(BUFFER_A, T2_READ_16(gBattlescriptCurrInstr + 1)); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 3; @@ -2147,12 +2590,11 @@ static void Cmd_printfromtable(void) { if (gBattleControllerExecFlags == 0) { - const u16 *ptr = (const u16*) T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1); ptr += gBattleCommunication[MULTISTRING_CHOOSER]; - PrepareStringBattle(*ptr, gBattlerAttacker); - gBattlescriptCurrInstr += 5; + PrepareStringBattle(*ptr, gBattlerAttacker); gBattleCommunication[MSG_DISPLAY] = 1; } } @@ -2161,11 +2603,11 @@ static void Cmd_printselectionstringfromtable(void) { if (gBattleControllerExecFlags == 0) { - const u16 *ptr = (const u16*) T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1); ptr += gBattleCommunication[MULTISTRING_CHOOSER]; gActiveBattler = gBattlerAttacker; - BtlController_EmitPrintSelectionString(0, *ptr); + BtlController_EmitPrintSelectionString(BUFFER_A, *ptr); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 5; @@ -2184,29 +2626,74 @@ u8 GetBattlerTurnOrderNum(u8 battlerId) return i; } +static void CheckSetUnburden(u8 battlerId) +{ + if (GetBattlerAbility(battlerId) == ABILITY_UNBURDEN) + { + gBattleResources->flags->flags[battlerId] |= RESOURCE_FLAG_UNBURDEN; + RecordAbilityBattle(battlerId, ABILITY_UNBURDEN); + } +} + +// battlerStealer steals the item of battlerItem +void StealTargetItem(u8 battlerStealer, u8 battlerItem) +{ + gLastUsedItem = gBattleMons[battlerItem].item; + gBattleMons[battlerItem].item = 0; + + RecordItemEffectBattle(battlerItem, 0); + RecordItemEffectBattle(battlerStealer, ItemId_GetHoldEffect(gLastUsedItem)); + gBattleMons[battlerStealer].item = gLastUsedItem; + + CheckSetUnburden(battlerItem); + gBattleResources->flags->flags[battlerStealer] &= ~RESOURCE_FLAG_UNBURDEN; + + gActiveBattler = battlerStealer; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gLastUsedItem), &gLastUsedItem); // set attacker item + MarkBattlerForControllerExec(battlerStealer); + + gActiveBattler = battlerItem; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[battlerItem].item); // remove target item + MarkBattlerForControllerExec(battlerItem); + + gBattleStruct->choicedMove[battlerItem] = 0; + + TrySaveExchangedItem(battlerItem, gLastUsedItem); +} + #define INCREMENT_RESET_RETURN \ { \ gBattlescriptCurrInstr++; \ - gBattleCommunication[MOVE_EFFECT_BYTE] = 0; \ + gBattleScripting.moveEffect = 0; \ return; \ } #define RESET_RETURN \ { \ - gBattleCommunication[MOVE_EFFECT_BYTE] = 0; \ + gBattleScripting.moveEffect = 0; \ return; \ } -void SetMoveEffect(bool8 primary, u8 certain) +void SetMoveEffect(bool32 primary, u32 certain) { + s32 i, byTwo, affectsUser = 0; bool32 statusChanged = FALSE; - u8 affectsUser = 0; // 0x40 otherwise - bool32 noSunCanFreeze = TRUE; + bool32 mirrorArmorReflected = (GetBattlerAbility(gBattlerTarget) == ABILITY_MIRROR_ARMOR); + u32 flags = 0; + u16 battlerAbility; - if (gBattleCommunication[MOVE_EFFECT_BYTE] & MOVE_EFFECT_AFFECTS_USER) + switch (gBattleScripting.moveEffect) // Set move effects which happen later on + { + case MOVE_EFFECT_KNOCK_OFF: + gBattleStruct->moveEffect2 = gBattleScripting.moveEffect; + gBattlescriptCurrInstr++; + return; + } + + if (gBattleScripting.moveEffect & MOVE_EFFECT_AFFECTS_USER) { gEffectBattler = gBattlerAttacker; // battlerId that effects get applied on - gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(MOVE_EFFECT_AFFECTS_USER); + gBattleScripting.moveEffect &= ~MOVE_EFFECT_AFFECTS_USER; affectsUser = MOVE_EFFECT_AFFECTS_USER; gBattleScripting.battler = gBattlerTarget; // theoretically the attacker } @@ -2216,52 +2703,56 @@ void SetMoveEffect(bool8 primary, u8 certain) gBattleScripting.battler = gBattlerAttacker; } - if (gBattleMons[gEffectBattler].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) - && !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 9) + battlerAbility = GetBattlerAbility(gEffectBattler); + + // Just in case this flag is still set + gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN; + + if (battlerAbility == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + && !primary && gBattleScripting.moveEffect <= 9) INCREMENT_RESET_RETURN if (gSideStatuses[GET_BATTLER_SIDE(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) - && !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 7) + && !primary && gBattleScripting.moveEffect <= 7) + INCREMENT_RESET_RETURN + + if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) INCREMENT_RESET_RETURN if (gBattleMons[gEffectBattler].hp == 0 - && gBattleCommunication[MOVE_EFFECT_BYTE] != MOVE_EFFECT_PAYDAY - && gBattleCommunication[MOVE_EFFECT_BYTE] != MOVE_EFFECT_STEAL_ITEM) + && gBattleScripting.moveEffect != MOVE_EFFECT_PAYDAY + && gBattleScripting.moveEffect != MOVE_EFFECT_STEAL_ITEM) INCREMENT_RESET_RETURN - if (gBattleMons[gEffectBattler].status2 & STATUS2_SUBSTITUTE && affectsUser != MOVE_EFFECT_AFFECTS_USER) + if (DoesSubstituteBlockMove(gBattlerAttacker, gEffectBattler, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) INCREMENT_RESET_RETURN - if (gBattleCommunication[MOVE_EFFECT_BYTE] <= PRIMARY_STATUS_MOVE_EFFECT) + if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT) // status change { - switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + switch (sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]) { case STATUS1_SLEEP: // check active uproar - if (gBattleMons[gEffectBattler].ability != ABILITY_SOUNDPROOF) + if (battlerAbility != ABILITY_SOUNDPROOF) { for (gActiveBattler = 0; gActiveBattler < gBattlersCount && !(gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR); gActiveBattler++) - {} + ; } else gActiveBattler = gBattlersCount; - if (gBattleMons[gEffectBattler].status1) - break; if (gActiveBattler != gBattlersCount) break; - if (gBattleMons[gEffectBattler].ability == ABILITY_VITAL_SPIRIT) - break; - if (gBattleMons[gEffectBattler].ability == ABILITY_INSOMNIA) + if (!CanSleep(gEffectBattler)) break; CancelMultiTurnMoves(gEffectBattler); statusChanged = TRUE; break; case STATUS1_POISON: - if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY + if (battlerAbility == ABILITY_IMMUNITY && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { gLastUsedAbility = ABILITY_IMMUNITY; @@ -2273,7 +2764,7 @@ void SetMoveEffect(bool8 primary, u8 certain) if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_ABILITY_STATUS; - gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD; } else { @@ -2281,7 +2772,7 @@ void SetMoveEffect(bool8 primary, u8 certain) } RESET_RETURN } - if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL)) + if (!CanPoisonType(gBattleScripting.battler, gEffectBattler) && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { @@ -2291,30 +2782,27 @@ void SetMoveEffect(bool8 primary, u8 certain) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUS_HAD_NO_EFFECT; RESET_RETURN } - if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON)) - break; - if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL)) - break; - if (gBattleMons[gEffectBattler].status1) - break; - if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY) + if (!CanBePoisoned(gBattleScripting.battler, gEffectBattler)) break; statusChanged = TRUE; break; case STATUS1_BURN: - if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL - && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) + if (gCurrentMove == MOVE_BURNING_JEALOUSY && !gProtectStructs[gEffectBattler].statRaised) + break; + + if ((battlerAbility == ABILITY_WATER_VEIL || battlerAbility == ABILITY_WATER_BUBBLE) + && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { - gLastUsedAbility = ABILITY_WATER_VEIL; - RecordAbilityBattle(gEffectBattler, ABILITY_WATER_VEIL); + gLastUsedAbility = battlerAbility; + RecordAbilityBattle(gEffectBattler, battlerAbility); BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_BRNPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_ABILITY_STATUS; - gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD; } else { @@ -2332,32 +2820,21 @@ void SetMoveEffect(bool8 primary, u8 certain) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUS_HAD_NO_EFFECT; RESET_RETURN } - if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE)) - break; - if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL) - break; - if (gBattleMons[gEffectBattler].status1) + + if (!CanBeBurned(gEffectBattler)) break; statusChanged = TRUE; break; case STATUS1_FREEZE: - if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY) - noSunCanFreeze = FALSE; - if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_ICE)) - break; - if (gBattleMons[gEffectBattler].status1) - break; - if (noSunCanFreeze == 0) - break; - if (gBattleMons[gEffectBattler].ability == ABILITY_MAGMA_ARMOR) + if (!CanBeFrozen(gEffectBattler)) break; CancelMultiTurnMoves(gEffectBattler); statusChanged = TRUE; break; case STATUS1_PARALYSIS: - if (gBattleMons[gEffectBattler].ability == ABILITY_LIMBER) + if (battlerAbility == ABILITY_LIMBER) { if (primary == TRUE || certain == MOVE_EFFECT_CERTAIN) { @@ -2370,7 +2847,7 @@ void SetMoveEffect(bool8 primary, u8 certain) if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_ABILITY_STATUS; - gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD; } else { @@ -2381,13 +2858,25 @@ void SetMoveEffect(bool8 primary, u8 certain) else break; } - if (gBattleMons[gEffectBattler].status1) + if (!CanParalyzeType(gBattleScripting.battler, gEffectBattler) + && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_PRLZPrevention; + + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + RESET_RETURN + } + if (!CanParalyzeType(gBattleScripting.battler, gEffectBattler)) + break; + if (!CanBeParalyzed(gEffectBattler)) break; statusChanged = TRUE; break; case STATUS1_TOXIC_POISON: - if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) + if (battlerAbility == ABILITY_IMMUNITY && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { gLastUsedAbility = ABILITY_IMMUNITY; RecordAbilityBattle(gEffectBattler, ABILITY_IMMUNITY); @@ -2398,7 +2887,7 @@ void SetMoveEffect(bool8 primary, u8 certain) if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_ABILITY_STATUS; - gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD; } else { @@ -2406,7 +2895,7 @@ void SetMoveEffect(bool8 primary, u8 certain) } RESET_RETURN } - if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL)) + if (!CanPoisonType(gBattleScripting.battler, gEffectBattler) && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { @@ -2418,14 +2907,11 @@ void SetMoveEffect(bool8 primary, u8 certain) } if (gBattleMons[gEffectBattler].status1) break; - if (!IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) && !IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL)) + if (CanBePoisoned(gBattleScripting.battler, gEffectBattler)) { - if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY) - break; - // It's redundant, because at this point we know the status1 value is 0. - gBattleMons[gEffectBattler].status1 &= ~(STATUS1_TOXIC_POISON); - gBattleMons[gEffectBattler].status1 &= ~(STATUS1_POISON); + gBattleMons[gEffectBattler].status1 &= ~STATUS1_TOXIC_POISON; + gBattleMons[gEffectBattler].status1 &= ~STATUS1_POISON; statusChanged = TRUE; break; } @@ -2439,21 +2925,21 @@ void SetMoveEffect(bool8 primary, u8 certain) { BattleScriptPush(gBattlescriptCurrInstr + 1); - if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS1_SLEEP) - gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN((Random() & 3) + 2); // 2-5 turns + if (sStatusFlagsForMoveEffects[gBattleScripting.moveEffect] == STATUS1_SLEEP) + gBattleMons[gEffectBattler].status1 |= (B_SLEEP_TURNS >= GEN_5) ? ((Random() % 3) + 2) : ((Random() % 4) + 3); else - gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]; - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; gActiveBattler = gEffectBattler; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBattler].status1); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].status1), &gBattleMons[gEffectBattler].status1); MarkBattlerForControllerExec(gActiveBattler); if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUSED_BY_ABILITY; - gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD; } else { @@ -2462,20 +2948,19 @@ void SetMoveEffect(bool8 primary, u8 certain) // for synchronize - if (gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_POISON - || gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_TOXIC - || gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_PARALYSIS - || gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_BURN) + if (gBattleScripting.moveEffect == MOVE_EFFECT_POISON + || gBattleScripting.moveEffect == MOVE_EFFECT_TOXIC + || gBattleScripting.moveEffect == MOVE_EFFECT_PARALYSIS + || gBattleScripting.moveEffect == MOVE_EFFECT_BURN) { - u8* synchronizeEffect = &gBattleStruct->synchronizeMoveEffect; - *synchronizeEffect = gBattleCommunication[MOVE_EFFECT_BYTE]; + gBattleStruct->synchronizeMoveEffect = gBattleScripting.moveEffect; gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT; } return; } else if (statusChanged == FALSE) { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gBattleScripting.moveEffect = 0; gBattlescriptCurrInstr++; return; } @@ -2483,18 +2968,17 @@ void SetMoveEffect(bool8 primary, u8 certain) } else { - if (gBattleMons[gEffectBattler].status2 & sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + if (gBattleMons[gEffectBattler].status2 & sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]) { gBattlescriptCurrInstr++; } else { u8 side; - switch (gBattleCommunication[MOVE_EFFECT_BYTE]) + switch (gBattleScripting.moveEffect) { case MOVE_EFFECT_CONFUSION: - if (gBattleMons[gEffectBattler].ability == ABILITY_OWN_TEMPO - || gBattleMons[gEffectBattler].status2 & STATUS2_CONFUSION) + if (!CanBeConfused(gEffectBattler)) { gBattlescriptCurrInstr++; } @@ -2502,16 +2986,28 @@ void SetMoveEffect(bool8 primary, u8 certain) { gBattleMons[gEffectBattler].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); // 2-5 turns - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + // If the confusion is activating due to being released from Sky Drop, go to "confused due to fatigue" script. + // Otherwise, do normal confusion script. + if(gCurrentMove == MOVE_SKY_DROP) + { + gBattleMons[gEffectBattler].status2 &= ~(STATUS2_LOCK_CONFUSE); + gBattlerAttacker = gEffectBattler; + gBattlescriptCurrInstr = BattleScript_ThrashConfuses; + } + else + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; + } } break; case MOVE_EFFECT_FLINCH: - if (gBattleMons[gEffectBattler].ability == ABILITY_INNER_FOCUS) + if (battlerAbility == ABILITY_INNER_FOCUS) { if (primary == TRUE || certain == MOVE_EFFECT_CERTAIN) { gLastUsedAbility = ABILITY_INNER_FOCUS; + gBattlerAbility = gEffectBattler; RecordAbilityBattle(gEffectBattler, ABILITY_INNER_FOCUS); gBattlescriptCurrInstr = BattleScript_FlinchPrevention; } @@ -2523,20 +3019,19 @@ void SetMoveEffect(bool8 primary, u8 certain) else { if (GetBattlerTurnOrderNum(gEffectBattler) > gCurrentTurnActionNumber) - gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]; gBattlescriptCurrInstr++; } break; case MOVE_EFFECT_UPROAR: if (!(gBattleMons[gEffectBattler].status2 & STATUS2_UPROAR)) { - gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gEffectBattler] = gCurrentMove; - gBattleMons[gEffectBattler].status2 |= STATUS2_UPROAR_TURN((Random() & 3) + 2); // 2-5 turns + gBattleMons[gEffectBattler].status2 |= STATUS2_UPROAR_TURN(B_UPROAR_TURNS >= GEN_5 ? 3 : ((Random() & 3) + 2)); BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; } else { @@ -2546,13 +3041,21 @@ void SetMoveEffect(bool8 primary, u8 certain) case MOVE_EFFECT_PAYDAY: if (GET_BATTLER_SIDE(gBattlerAttacker) == B_SIDE_PLAYER) { - u16 PayDay = gPaydayMoney; + u16 payday = gPaydayMoney; gPaydayMoney += (gBattleMons[gBattlerAttacker].level * 5); - if (PayDay > gPaydayMoney) + if (payday > gPaydayMoney) gPaydayMoney = 0xFFFF; } BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; + break; + case MOVE_EFFECT_HAPPY_HOUR: + if (GET_BATTLER_SIDE(gBattlerAttacker) == B_SIDE_PLAYER && !gBattleStruct->moneyMultiplierMove) + { + gBattleStruct->moneyMultiplier *= 2; + gBattleStruct->moneyMultiplierMove = 1; + } + gBattlescriptCurrInstr++; break; case MOVE_EFFECT_TRI_ATTACK: if (gBattleMons[gEffectBattler].status1) @@ -2561,14 +3064,14 @@ void SetMoveEffect(bool8 primary, u8 certain) } else { - gBattleCommunication[MOVE_EFFECT_BYTE] = Random() % 3 + 3; + gBattleScripting.moveEffect = Random() % 3 + 3; SetMoveEffect(FALSE, 0); } break; case MOVE_EFFECT_CHARGING: gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gEffectBattler] = gCurrentMove; - gProtectStructs[gEffectBattler].chargingTurn = 1; + gProtectStructs[gEffectBattler].chargingTurn = TRUE; gBattlescriptCurrInstr++; break; case MOVE_EFFECT_WRAP: @@ -2578,32 +3081,25 @@ void SetMoveEffect(bool8 primary, u8 certain) } else { - gBattleMons[gEffectBattler].status2 |= STATUS2_WRAPPED_TURN((Random() & 3) + 3); // 3-6 turns + gBattleMons[gEffectBattler].status2 |= STATUS2_WRAPPED; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_GRIP_CLAW) + gDisableStructs[gEffectBattler].wrapTurns = (B_BINDING_TURNS >= GEN_5) ? 7 : 5; + else + gDisableStructs[gEffectBattler].wrapTurns = (B_BINDING_TURNS >= GEN_5) ? ((Random() % 2) + 4) : ((Random() % 4) + 2); - *(gBattleStruct->wrappedMove + gEffectBattler * 2 + 0) = gCurrentMove; - *(gBattleStruct->wrappedMove + gEffectBattler * 2 + 1) = gCurrentMove >> 8; - *(gBattleStruct->wrappedBy + gEffectBattler) = gBattlerAttacker; + gBattleStruct->wrappedMove[gEffectBattler] = gCurrentMove; + gBattleStruct->wrappedBy[gEffectBattler] = gBattlerAttacker; BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; - for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; ; gBattleCommunication[MULTISTRING_CHOOSER]++) + for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattleCommunication[MULTISTRING_CHOOSER] < NUM_TRAPPING_MOVES; gBattleCommunication[MULTISTRING_CHOOSER]++) { - if (gBattleCommunication[MULTISTRING_CHOOSER] > 4) - break; - if (gTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove) + if (sTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove) break; } } break; - case MOVE_EFFECT_RECOIL_25: // 25% recoil - gBattleMoveDamage = (gHpDealt) / 4; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; - break; case MOVE_EFFECT_ATK_PLUS_1: case MOVE_EFFECT_DEF_PLUS_1: case MOVE_EFFECT_SPD_PLUS_1: @@ -2611,15 +3107,16 @@ void SetMoveEffect(bool8 primary, u8 certain) case MOVE_EFFECT_SP_DEF_PLUS_1: case MOVE_EFFECT_ACC_PLUS_1: case MOVE_EFFECT_EVS_PLUS_1: - if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1), - gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_PLUS_1 + 1, - affectsUser, 0)) + if (NoAliveMonsForEitherParty() + || ChangeStatBuffs(SET_STAT_BUFF_VALUE(1), + gBattleScripting.moveEffect - MOVE_EFFECT_ATK_PLUS_1 + 1, + affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, 0)) { gBattlescriptCurrInstr++; } else { - gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); + gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); gBattleScripting.animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatUp; @@ -2632,15 +3129,20 @@ void SetMoveEffect(bool8 primary, u8 certain) case MOVE_EFFECT_SP_DEF_MINUS_1: case MOVE_EFFECT_ACC_MINUS_1: case MOVE_EFFECT_EVS_MINUS_1: + flags = affectsUser; + if (mirrorArmorReflected && !affectsUser) + flags |= STAT_CHANGE_ALLOW_PTR; + if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE, - gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_MINUS_1 + 1, - affectsUser, 0)) + gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_1 + 1, + flags | STAT_CHANGE_UPDATE_MOVE_EFFECT, gBattlescriptCurrInstr + 1)) { - gBattlescriptCurrInstr++; + if (!mirrorArmorReflected) + gBattlescriptCurrInstr++; } else { - gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); + gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); gBattleScripting.animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatDown; @@ -2653,15 +3155,16 @@ void SetMoveEffect(bool8 primary, u8 certain) case MOVE_EFFECT_SP_DEF_PLUS_2: case MOVE_EFFECT_ACC_PLUS_2: case MOVE_EFFECT_EVS_PLUS_2: - if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2), - gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_PLUS_2 + 1, - affectsUser, 0)) + if (NoAliveMonsForEitherParty() + || ChangeStatBuffs(SET_STAT_BUFF_VALUE(2), + gBattleScripting.moveEffect - MOVE_EFFECT_ATK_PLUS_2 + 1, + affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, 0)) { gBattlescriptCurrInstr++; } else { - gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); + gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); gBattleScripting.animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatUp; @@ -2674,15 +3177,19 @@ void SetMoveEffect(bool8 primary, u8 certain) case MOVE_EFFECT_SP_DEF_MINUS_2: case MOVE_EFFECT_ACC_MINUS_2: case MOVE_EFFECT_EVS_MINUS_2: + flags = affectsUser; + if (mirrorArmorReflected && !affectsUser) + flags |= STAT_CHANGE_ALLOW_PTR; if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE, - gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_MINUS_2 + 1, - affectsUser, 0)) + gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_2 + 1, + flags | STAT_CHANGE_UPDATE_MOVE_EFFECT, gBattlescriptCurrInstr + 1)) { - gBattlescriptCurrInstr++; + if (!mirrorArmorReflected) + gBattlescriptCurrInstr++; } else { - gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); + gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); gBattleScripting.animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatDown; @@ -2700,7 +3207,7 @@ void SetMoveEffect(bool8 primary, u8 certain) break; case MOVE_EFFECT_STEAL_ITEM: { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) + if (!CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item)) { gBattlescriptCurrInstr++; break; @@ -2709,26 +3216,26 @@ void SetMoveEffect(bool8 primary, u8 certain) side = GetBattlerSide(gBattlerAttacker); if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && !(gBattleTypeFlags & - (BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_LINK - | BATTLE_TYPE_RECORDED_LINK - | BATTLE_TYPE_SECRET_BASE))) + (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_LINK + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_SECRET_BASE))) { gBattlescriptCurrInstr++; } else if (!(gBattleTypeFlags & - (BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_LINK - | BATTLE_TYPE_RECORDED_LINK - | BATTLE_TYPE_SECRET_BASE)) + (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_LINK + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_SECRET_BASE)) && (gWishFutureKnock.knockedOffMons[side] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]])) { gBattlescriptCurrInstr++; } else if (gBattleMons[gBattlerTarget].item - && gBattleMons[gBattlerTarget].ability == ABILITY_STICKY_HOLD) + && GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD) { BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_NoItemSteal; @@ -2736,34 +3243,20 @@ void SetMoveEffect(bool8 primary, u8 certain) gLastUsedAbility = gBattleMons[gBattlerTarget].ability; RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); } - else if (gBattleMons[gBattlerAttacker].item != 0 - || gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY - || IS_ITEM_MAIL(gBattleMons[gBattlerTarget].item) - || gBattleMons[gBattlerTarget].item == 0) + else if (gBattleMons[gBattlerAttacker].item != ITEM_NONE + || gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY_E_READER + || gBattleMons[gBattlerTarget].item == ITEM_NONE) { gBattlescriptCurrInstr++; } else { - u16* changedItem = &gBattleStruct->changedItems[gBattlerAttacker]; - gLastUsedItem = *changedItem = gBattleMons[gBattlerTarget].item; - gBattleMons[gBattlerTarget].item = 0; - - gActiveBattler = gBattlerAttacker; - BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); - MarkBattlerForControllerExec(gBattlerAttacker); - - gActiveBattler = gBattlerTarget; - BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBattlerTarget].item); - MarkBattlerForControllerExec(gBattlerTarget); - + StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker steals target item + gBattleMons[gBattlerAttacker].item = ITEM_NONE; // Item assigned later on with thief (see MOVEEND_CHANGED_ITEMS) + gBattleStruct->changedItems[gBattlerAttacker] = gLastUsedItem; // Stolen item to be assigned later BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_ItemSteal; - - *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerTarget]) + 0) = 0; - *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerTarget]) + 1) = 0; } - } break; case MOVE_EFFECT_PREVENT_ESCAPE: @@ -2776,41 +3269,97 @@ void SetMoveEffect(bool8 primary, u8 certain) gBattlescriptCurrInstr++; break; case MOVE_EFFECT_ALL_STATS_UP: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_AllStatsUp; + if (!NoAliveMonsForEitherParty()) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_AllStatsUp; + } break; case MOVE_EFFECT_RAPIDSPIN: BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_RapidSpinAway; break; - case MOVE_EFFECT_REMOVE_PARALYSIS: // Smelling salts - if (!(gBattleMons[gBattlerTarget].status1 & STATUS1_PARALYSIS)) + case MOVE_EFFECT_REMOVE_STATUS: // Smelling salts + if (!(gBattleMons[gBattlerTarget].status1 & gBattleMoves[gCurrentMove].argument)) { gBattlescriptCurrInstr++; } else { - gBattleMons[gBattlerTarget].status1 &= ~(STATUS1_PARALYSIS); + gBattleMons[gBattlerTarget].status1 &= ~gBattleMoves[gCurrentMove].argument; gActiveBattler = gBattlerTarget; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal; + switch (gBattleMoves[gCurrentMove].argument) + { + case STATUS1_PARALYSIS: + gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal; + break; + case STATUS1_SLEEP: + gBattlescriptCurrInstr = BattleScript_TargetWokeUp; + break; + case STATUS1_BURN: + gBattlescriptCurrInstr = BattleScript_TargetBurnHeal; + break; + } } break; case MOVE_EFFECT_ATK_DEF_DOWN: // SuperPower - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_AtkDefDown; + if (!NoAliveMonsForEitherParty()) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_AtkDefDown; + } break; - case MOVE_EFFECT_RECOIL_33: // Double Edge + case MOVE_EFFECT_DEF_SPDEF_DOWN: // Close Combat + if (!NoAliveMonsForEitherParty()) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_DefSpDefDown; + } + break; + case MOVE_EFFECT_RECOIL_25: // Take Down, 25% recoil + gBattleMoveDamage = (gHpDealt) / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; + break; + case MOVE_EFFECT_RECOIL_33: // Double Edge, 33 % recoil gBattleMoveDamage = gHpDealt / 3; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; + break; + case MOVE_EFFECT_RECOIL_50: // Head Smash, 50 % recoil + gBattleMoveDamage = gHpDealt / 2; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil; + break; + case MOVE_EFFECT_RECOIL_33_STATUS: // Flare Blitz - can burn, Volt Tackle - can paralyze + gBattleScripting.savedDmg = gHpDealt / 3; + if (gBattleScripting.savedDmg == 0) + gBattleScripting.savedDmg = 1; + + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectRecoilWithStatus; + break; + case MOVE_EFFECT_RECOIL_HP_25: // Struggle + gBattleMoveDamage = (gBattleMons[gEffectBattler].maxHP) / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil; break; case MOVE_EFFECT_THRASH: if (gBattleMons[gEffectBattler].status2 & STATUS2_LOCK_CONFUSE) @@ -2824,68 +3373,229 @@ void SetMoveEffect(bool8 primary, u8 certain) gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN((Random() & 1) + 2); // thrash for 2-3 turns } break; - case MOVE_EFFECT_KNOCK_OFF: - if (gBattleMons[gEffectBattler].ability == ABILITY_STICKY_HOLD) + case MOVE_EFFECT_SP_ATK_TWO_DOWN: // Overheat + if (!NoAliveMonsForEitherParty()) { - if (gBattleMons[gEffectBattler].item == 0) - { - gBattlescriptCurrInstr++; - } - else - { - gLastUsedAbility = ABILITY_STICKY_HOLD; - gBattlescriptCurrInstr = BattleScript_StickyHoldActivates; - RecordAbilityBattle(gEffectBattler, ABILITY_STICKY_HOLD); - } - break; - } - if (gBattleMons[gEffectBattler].item) - { - side = GetBattlerSide(gEffectBattler); - - gLastUsedItem = gBattleMons[gEffectBattler].item; - gBattleMons[gEffectBattler].item = 0; - gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[gEffectBattler]]; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_KnockedOff; - - *(u8*)((u8*)(&gBattleStruct->choicedMove[gEffectBattler]) + 0) = 0; - *(u8*)((u8*)(&gBattleStruct->choicedMove[gEffectBattler]) + 1) = 0; - } - else - { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = BattleScript_SAtkDown2; } break; - case MOVE_EFFECT_SP_ATK_TWO_DOWN: // Overheat - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_SAtkDown2; + case MOVE_EFFECT_CLEAR_SMOG: + for (i = 0; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[gEffectBattler].statStages[i] != DEFAULT_STAT_STAGE) + break; + } + if ((gSpecialStatuses[gEffectBattler].physicalDmg || gSpecialStatuses[gEffectBattler].specialDmg) && i != NUM_BATTLE_STATS) + { + for (i = 0; i < NUM_BATTLE_STATS; i++) + gBattleMons[gEffectBattler].statStages[i] = DEFAULT_STAT_STAGE; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectClearSmog; + } + break; + case MOVE_EFFECT_SMACK_DOWN: + if (!IsBattlerGrounded(gBattlerTarget)) + { + gStatuses3[gBattlerTarget] |= STATUS3_SMACKED_DOWN; + gStatuses3[gBattlerTarget] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectSmackDown; + } + break; + case MOVE_EFFECT_FLAME_BURST: + if (IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)) && GetBattlerAbility(BATTLE_PARTNER(gBattlerTarget)) != ABILITY_MAGIC_GUARD) + { + gBattleScripting.savedBattler = BATTLE_PARTNER(gBattlerTarget); + gBattleMoveDamage = gBattleMons[BATTLE_PARTNER(gBattlerTarget)].hp / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattlescriptCurrInstr = BattleScript_MoveEffectFlameBurst; + } + break; + case MOVE_EFFECT_FEINT: + if (IS_BATTLER_PROTECTED(gBattlerTarget)) + { + gProtectStructs[gBattlerTarget].protected = FALSE; + gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~SIDE_STATUS_WIDE_GUARD; + gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~SIDE_STATUS_QUICK_GUARD; + gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~SIDE_STATUS_CRAFTY_SHIELD; + gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~SIDE_STATUS_MAT_BLOCK; + gProtectStructs[gBattlerTarget].spikyShielded = FALSE; + gProtectStructs[gBattlerTarget].kingsShielded = FALSE; + gProtectStructs[gBattlerTarget].banefulBunkered = FALSE; + gProtectStructs[gBattlerTarget].obstructed = FALSE; + if (gCurrentMove == MOVE_FEINT) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectFeint; + } + else if (gCurrentMove == MOVE_HYPERSPACE_FURY) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_HyperspaceFuryRemoveProtect; + } + } + break; + case MOVE_EFFECT_SPECTRAL_THIEF: + if (!NoAliveMonsForEitherParty()) + { + gBattleStruct->stolenStats[0] = 0; // Stats to steal. + gBattleScripting.animArg1 = 0; + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[gBattlerTarget].statStages[i] > DEFAULT_STAT_STAGE && gBattleMons[gBattlerAttacker].statStages[i] != MAX_STAT_STAGE) + { + gBattleStruct->stolenStats[0] |= gBitTable[i]; + // Store by how many stages to raise the stat. + gBattleStruct->stolenStats[i] = gBattleMons[gBattlerTarget].statStages[i] - DEFAULT_STAT_STAGE; + while (gBattleMons[gBattlerAttacker].statStages[i] + gBattleStruct->stolenStats[i] > MAX_STAT_STAGE) + gBattleStruct->stolenStats[i]--; + gBattleMons[gBattlerTarget].statStages[i] = DEFAULT_STAT_STAGE; + + if (gBattleStruct->stolenStats[i] >= 2) + byTwo++; + + if (gBattleScripting.animArg1 == 0) + { + if (byTwo) + gBattleScripting.animArg1 = STAT_ANIM_PLUS2 - 1 + i; + else + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 - 1 + i; + } + else + { + if (byTwo) + gBattleScripting.animArg1 = STAT_ANIM_MULTIPLE_PLUS2; + else + gBattleScripting.animArg1 = STAT_ANIM_MULTIPLE_PLUS1; + } + } + } + + if (gBattleStruct->stolenStats[0] != 0) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_SpectralThiefSteal; + } + } + break; + case MOVE_EFFECT_V_CREATE: + if (!NoAliveMonsForEitherParty()) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_VCreateStatLoss; + } + break; + case MOVE_EFFECT_CORE_ENFORCER: + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) + && !NoAliveMonsForEitherParty()) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectCoreEnforcer; + } + break; + case MOVE_EFFECT_THROAT_CHOP: + gDisableStructs[gEffectBattler].throatChopTimer = 2; + gBattlescriptCurrInstr++; + break; + case MOVE_EFFECT_INCINERATE: + if ((B_INCINERATE_GEMS >= GEN_6 && GetBattlerHoldEffect(gEffectBattler, FALSE) == HOLD_EFFECT_GEMS) + || (gBattleMons[gEffectBattler].item >= FIRST_BERRY_INDEX && gBattleMons[gEffectBattler].item <= LAST_BERRY_INDEX)) + { + gLastUsedItem = gBattleMons[gEffectBattler].item; + gBattleMons[gEffectBattler].item = 0; + CheckSetUnburden(gEffectBattler); + + gActiveBattler = gEffectBattler; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item); + MarkBattlerForControllerExec(gActiveBattler); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectIncinerate; + } + break; + case MOVE_EFFECT_BUG_BITE: + if (ItemId_GetPocket(gBattleMons[gEffectBattler].item) == POCKET_BERRIES + && battlerAbility != ABILITY_STICKY_HOLD) + { + // target loses their berry + gLastUsedItem = gBattleMons[gEffectBattler].item; + gBattleMons[gEffectBattler].item = 0; + CheckSetUnburden(gEffectBattler); + gActiveBattler = gEffectBattler; + + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item); + MarkBattlerForControllerExec(gActiveBattler); + + // attacker temporarily gains their item + gBattleStruct->changedItems[gBattlerAttacker] = gBattleMons[gBattlerAttacker].item; + gBattleMons[gBattlerAttacker].item = gLastUsedItem; + + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectBugBite; + } + break; + case MOVE_EFFECT_RELIC_SONG: + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SHEER_FORCE && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)) + { + if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA) + { + gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_PIROUETTE; + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeMoveEffect); + } + else if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_PIROUETTE) + { + gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA; + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeMoveEffect); + } + } + break; + case MOVE_EFFECT_TRAP_BOTH: + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION)) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_BothCanNoLongerEscape; + } + if (!gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION) + gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; + + if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION)) + gDisableStructs[gBattlerAttacker].battlerPreventingEscape = gBattlerTarget; + + gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION; + gBattleMons[gBattlerAttacker].status2 |= STATUS2_ESCAPE_PREVENTION; + break; + case MOVE_EFFECT_SCALE_SHOT: + if (!NoAliveMonsForEitherParty()) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_DefDownSpeedUp; + } break; } } } - gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gBattleScripting.moveEffect = 0; } static void Cmd_seteffectwithchance(void) { u32 percentChance; - if (gBattleMons[gBattlerAttacker].ability == ABILITY_SERENE_GRACE) + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_SERENE_GRACE) percentChance = gBattleMoves[gCurrentMove].secondaryEffectChance * 2; else percentChance = gBattleMoves[gCurrentMove].secondaryEffectChance; - if (gBattleCommunication[MOVE_EFFECT_BYTE] & MOVE_EFFECT_CERTAIN + if (gBattleScripting.moveEffect & MOVE_EFFECT_CERTAIN && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(MOVE_EFFECT_CERTAIN); + gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN; SetMoveEffect(FALSE, MOVE_EFFECT_CERTAIN); } else if (Random() % 100 < percentChance - && gBattleCommunication[MOVE_EFFECT_BYTE] + && gBattleScripting.moveEffect && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { if (percentChance >= 100) @@ -2898,7 +3608,7 @@ static void Cmd_seteffectwithchance(void) gBattlescriptCurrInstr++; } - gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gBattleScripting.moveEffect = 0; gBattleScripting.multihitMoveEffect = 0; } @@ -2916,12 +3626,12 @@ static void Cmd_clearstatusfromeffect(void) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - if (gBattleCommunication[MOVE_EFFECT_BYTE] <= PRIMARY_STATUS_MOVE_EFFECT) - gBattleMons[gActiveBattler].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); + if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT) + gBattleMons[gActiveBattler].status1 &= (~sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]); else - gBattleMons[gActiveBattler].status2 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); + gBattleMons[gActiveBattler].status2 &= (~sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]); - gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gBattleScripting.moveEffect = 0; gBattlescriptCurrInstr += 2; gBattleScripting.multihitMoveEffect = 0; } @@ -2939,7 +3649,7 @@ static void Cmd_tryfaintmon(void) BattleScriptPop(); gBattlescriptCurrInstr = BS_ptr; - gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED); + gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED | SIDE_STATUS_TOXIC_SPIKES_DAMAGED | SIDE_STATUS_STEALTH_ROCK_DAMAGED | SIDE_STATUS_STICKY_WEB_DAMAGED); } else { @@ -2970,20 +3680,22 @@ static void Cmd_tryfaintmon(void) gBattlescriptCurrInstr = BS_ptr; if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { - gHitMarker |= HITMARKER_x400000; - if (gBattleResults.playerFaintCounter < 0xFF) + gHitMarker |= HITMARKER_PLAYER_FAINTED; + if (gBattleResults.playerFaintCounter < 255) gBattleResults.playerFaintCounter++; AdjustFriendshipOnBattleFaint(gActiveBattler); + gSideTimers[0].retaliateTimer = 2; } else { - if (gBattleResults.opponentFaintCounter < 0xFF) + if (gBattleResults.opponentFaintCounter < 255) gBattleResults.opponentFaintCounter++; gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL); + gSideTimers[1].retaliateTimer = 2; } if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0) { - gHitMarker &= ~(HITMARKER_DESTINYBOND); + gHitMarker &= ~HITMARKER_DESTINYBOND; BattleScriptPush(gBattlescriptCurrInstr); gBattleMoveDamage = gBattleMons[battlerId].hp; gBattlescriptCurrInstr = BattleScript_DestinyBondTakesLife; @@ -3000,7 +3712,7 @@ static void Cmd_tryfaintmon(void) BattleScriptPush(gBattlescriptCurrInstr); gBattlescriptCurrInstr = BattleScript_GrudgeTakesPp; gActiveBattler = gBattlerAttacker; - BtlController_EmitSetMonData(0, moveIndex + REQUEST_PPMOVE1_BATTLE, 0, 1, &gBattleMons[gActiveBattler].pp[moveIndex]); + BtlController_EmitSetMonData(BUFFER_A, moveIndex + REQUEST_PPMOVE1_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].pp[moveIndex]), &gBattleMons[gActiveBattler].pp[moveIndex]); MarkBattlerForControllerExec(gActiveBattler); PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].moves[moveIndex]) @@ -3018,7 +3730,7 @@ static void Cmd_dofaintanimation(void) if (gBattleControllerExecFlags == 0) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - BtlController_EmitFaintAnimation(0); + BtlController_EmitFaintAnimation(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; } @@ -3033,7 +3745,7 @@ static void Cmd_cleareffectsonfaint(void) if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || gBattleMons[gActiveBattler].hp == 0) { gBattleMons[gActiveBattler].status1 = 0; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBattler].status1); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); } @@ -3046,9 +3758,9 @@ static void Cmd_jumpifstatus(void) { u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2); - const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); - if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp) + if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp != 0) gBattlescriptCurrInstr = jumpPtr; else gBattlescriptCurrInstr += 10; @@ -3058,9 +3770,9 @@ static void Cmd_jumpifstatus2(void) { u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2); - const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); - if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp) + if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp != 0) gBattlescriptCurrInstr = jumpPtr; else gBattlescriptCurrInstr += 10; @@ -3068,104 +3780,77 @@ static void Cmd_jumpifstatus2(void) static void Cmd_jumpifability(void) { - u8 battlerId; - u8 ability = gBattlescriptCurrInstr[2]; - const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3); + u32 battlerId; + bool32 hasAbility = FALSE; + u32 ability = T2_READ_16(gBattlescriptCurrInstr + 2); - if (gBattlescriptCurrInstr[1] == BS_ATTACKER_SIDE) + switch (gBattlescriptCurrInstr[1]) { - battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_BATTLER_SIDE, gBattlerAttacker, ability, 0, 0); + default: + battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + if (GetBattlerAbility(battlerId) == ability) + hasAbility = TRUE; + break; + case BS_ATTACKER_SIDE: + battlerId = IsAbilityOnSide(gBattlerAttacker, ability); if (battlerId) { - gLastUsedAbility = ability; - gBattlescriptCurrInstr = jumpPtr; - RecordAbilityBattle(battlerId - 1, gLastUsedAbility); - gBattleScripting.battlerWithAbility = battlerId - 1; + battlerId--; + hasAbility = TRUE; } - else - gBattlescriptCurrInstr += 7; + break; + case BS_TARGET_SIDE: + battlerId = IsAbilityOnOpposingSide(gBattlerAttacker, ability); + if (battlerId) + { + battlerId--; + hasAbility = TRUE; + } + break; } - else if (gBattlescriptCurrInstr[1] == BS_NOT_ATTACKER_SIDE) + + if (hasAbility) { - battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gBattlerAttacker, ability, 0, 0); - if (battlerId) - { - gLastUsedAbility = ability; - gBattlescriptCurrInstr = jumpPtr; - RecordAbilityBattle(battlerId - 1, gLastUsedAbility); - gBattleScripting.battlerWithAbility = battlerId - 1; - } - else - gBattlescriptCurrInstr += 7; + gLastUsedAbility = ability; + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 4); + RecordAbilityBattle(battlerId, gLastUsedAbility); + gBattlerAbility = battlerId; } else { - battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - if (gBattleMons[battlerId].ability == ability) - { - gLastUsedAbility = ability; - gBattlescriptCurrInstr = jumpPtr; - RecordAbilityBattle(battlerId, gLastUsedAbility); - gBattleScripting.battlerWithAbility = battlerId; - } - else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr += 8; } } static void Cmd_jumpifsideaffecting(void) { u8 side; - u16 flags; - const u8* jumpPtr; + u32 flags; + const u8 *jumpPtr; if (gBattlescriptCurrInstr[1] == BS_ATTACKER) side = GET_BATTLER_SIDE(gBattlerAttacker); else side = GET_BATTLER_SIDE(gBattlerTarget); - flags = T2_READ_16(gBattlescriptCurrInstr + 2); - jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 4); + flags = T2_READ_32(gBattlescriptCurrInstr + 2); + jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); if (gSideStatuses[side] & flags) gBattlescriptCurrInstr = jumpPtr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr += 10; } static void Cmd_jumpifstat(void) { - u8 ret = 0; + bool32 ret = 0; u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - u8 value = gBattleMons[battlerId].statStages[gBattlescriptCurrInstr[3]]; + u8 statId = gBattlescriptCurrInstr[3]; + u8 cmpTo = gBattlescriptCurrInstr[4]; + u8 cmpKind = gBattlescriptCurrInstr[2]; - switch (gBattlescriptCurrInstr[2]) - { - case CMP_EQUAL: - if (value == gBattlescriptCurrInstr[4]) - ret++; - break; - case CMP_NOT_EQUAL: - if (value != gBattlescriptCurrInstr[4]) - ret++; - break; - case CMP_GREATER_THAN: - if (value > gBattlescriptCurrInstr[4]) - ret++; - break; - case CMP_LESS_THAN: - if (value < gBattlescriptCurrInstr[4]) - ret++; - break; - case CMP_COMMON_BITS: - if (value & gBattlescriptCurrInstr[4]) - ret++; - break; - case CMP_NO_COMMON_BITS: - if (!(value & gBattlescriptCurrInstr[4])) - ret++; - break; - } + ret = CompareStat(battlerId, statId, cmpTo, cmpKind); if (ret) gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 5); @@ -3175,39 +3860,51 @@ static void Cmd_jumpifstat(void) static void Cmd_jumpifstatus3condition(void) { - u32 flags; + u32 status; const u8 *jumpPtr; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - flags = T2_READ_32(gBattlescriptCurrInstr + 2); + status = T2_READ_32(gBattlescriptCurrInstr + 2); jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7); if (gBattlescriptCurrInstr[6]) { - if ((gStatuses3[gActiveBattler] & flags) != 0) + if ((gStatuses3[gActiveBattler] & status) != 0) gBattlescriptCurrInstr += 11; else gBattlescriptCurrInstr = jumpPtr; } else { - if ((gStatuses3[gActiveBattler] & flags) != 0) + if ((gStatuses3[gActiveBattler] & status) != 0) gBattlescriptCurrInstr = jumpPtr; else gBattlescriptCurrInstr += 11; } } -static void Cmd_jumpiftype(void) +static void Cmd_jumpbasedontype(void) { u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); u8 type = gBattlescriptCurrInstr[2]; - const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3); + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 4); - if (IS_BATTLER_OF_TYPE(battlerId, type)) - gBattlescriptCurrInstr = jumpPtr; + // jumpiftype + if (gBattlescriptCurrInstr[3]) + { + if (IS_BATTLER_OF_TYPE(battlerId, type)) + gBattlescriptCurrInstr = jumpPtr; + else + gBattlescriptCurrInstr += 8; + } + // jumpifnottype else - gBattlescriptCurrInstr += 7; + { + if (!IS_BATTLER_OF_TYPE(battlerId, type)) + gBattlescriptCurrInstr = jumpPtr; + else + gBattlescriptCurrInstr += 8; + } } static void Cmd_getexp(void) @@ -3217,7 +3914,7 @@ static void Cmd_getexp(void) u8 holdEffect; s32 sentIn; s32 viaExpShare = 0; - u16 *exp = &gBattleStruct->expValue; + u32 *exp = &gBattleStruct->expValue; gBattlerFainted = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); sentIn = gSentPokesToOpponent[(gBattlerFainted & 2) >> 1]; @@ -3244,7 +3941,7 @@ static void Cmd_getexp(void) break; case 1: // calculate experience points to redistribute { - u16 calculatedExp; + u32 calculatedExp; s32 viaSentIn; for (viaSentIn = 0, i = 0; i < PARTY_SIZE; i++) @@ -3256,7 +3953,7 @@ static void Cmd_getexp(void) item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; else holdEffect = ItemId_GetHoldEffect(item); @@ -3264,26 +3961,36 @@ static void Cmd_getexp(void) if (holdEffect == HOLD_EFFECT_EXP_SHARE) viaExpShare++; } + #if (B_SCALED_EXP >= GEN_5) && (B_SCALED_EXP != GEN_6) + calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 5; + #else + calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7; + #endif - calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7; + #if B_SPLIT_EXP < GEN_6 + if (viaExpShare) // at least one mon is getting exp via exp share + { + *exp = SAFE_DIV(calculatedExp / 2, viaSentIn); + if (*exp == 0) + *exp = 1; - if (viaExpShare) // at least one mon is getting exp via exp share - { - *exp = SAFE_DIV(calculatedExp / 2, viaSentIn); - if (*exp == 0) - *exp = 1; - - gExpShareExp = calculatedExp / 2 / viaExpShare; + gExpShareExp = calculatedExp / 2 / viaExpShare; + if (gExpShareExp == 0) + gExpShareExp = 1; + } + else + { + *exp = SAFE_DIV(calculatedExp, viaSentIn); + if (*exp == 0) + *exp = 1; + gExpShareExp = 0; + } + #else + *exp = calculatedExp; + gExpShareExp = calculatedExp / 2; if (gExpShareExp == 0) gExpShareExp = 1; - } - else - { - *exp = SAFE_DIV(calculatedExp, viaSentIn); - if (*exp == 0) - *exp = 1; - gExpShareExp = 0; - } + #endif gBattleScripting.getexpState++; gBattleStruct->expGetterMonId = 0; @@ -3295,7 +4002,7 @@ static void Cmd_getexp(void) { item = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HELD_ITEM); - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; else holdEffect = ItemId_GetHoldEffect(item); @@ -3306,16 +4013,24 @@ static void Cmd_getexp(void) gBattleScripting.getexpState = 5; gBattleMoveDamage = 0; // used for exp } - else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) == MAX_LEVEL) + else if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gBattleStruct->expGetterMonId >= 3) + || GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) == MAX_LEVEL) { *(&gBattleStruct->sentInPokes) >>= 1; gBattleScripting.getexpState = 5; gBattleMoveDamage = 0; // used for exp + #if B_MAX_LEVEL_EV_GAINS >= GEN_5 + MonGainEVs(&gPlayerParty[gBattleStruct->expGetterMonId], gBattleMons[gBattlerFainted].species); + #endif } else { - // music change in wild battle after fainting a poke - if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !gBattleStruct->wildVictorySong) + // Music change in a wild battle after fainting opposing pokemon. + if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && (gBattleMons[0].hp || (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleMons[2].hp)) + && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) + && !gBattleStruct->wildVictorySong) { BattleStopLowHpSound(); PlayBGM(MUS_VICTORY_WILD); @@ -3329,12 +4044,27 @@ static void Cmd_getexp(void) else gBattleMoveDamage = 0; - if (holdEffect == HOLD_EFFECT_EXP_SHARE) + // only give exp share bonus in later gens if the mon wasn't sent out + if ((holdEffect == HOLD_EFFECT_EXP_SHARE) && ((gBattleMoveDamage == 0) || (B_SPLIT_EXP < GEN_6))) gBattleMoveDamage += gExpShareExp; if (holdEffect == HOLD_EFFECT_LUCKY_EGG) gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && B_TRAINER_EXP_MULTIPLIER <= GEN_7) gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; + #if (B_SCALED_EXP >= GEN_5) && (B_SCALED_EXP != GEN_6) + { + // Note: There is an edge case where if a pokemon receives a large amount of exp, it wouldn't be properly calculated + // because of multiplying by scaling factor(the value would simply be larger than an u32 can hold). Hence u64 is needed. + u64 value = gBattleMoveDamage; + value *= sExperienceScalingFactors[(gBattleMons[gBattlerFainted].level * 2) + 10]; + value /= sExperienceScalingFactors[gBattleMons[gBattlerFainted].level + GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) + 10]; + gBattleMoveDamage = value + 1; + } + #endif + #if B_AFFECTION_MECHANICS == TRUE + if (GetMonFriendshipScore(&gPlayerParty[gBattleStruct->expGetterMonId]) >= FRIENDSHIP_50_TO_99) + gBattleMoveDamage = (gBattleMoveDamage * 120) / 100; + #endif if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterMonId])) { @@ -3375,7 +4105,7 @@ static void Cmd_getexp(void) PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattleStruct->expGetterBattlerId, gBattleStruct->expGetterMonId); // buffer 'gained' or 'gained a boosted' PREPARE_STRING_BUFFER(gBattleTextBuff2, i); - PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 5, gBattleMoveDamage); + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 6, gBattleMoveDamage); PrepareStringBattle(STRINGID_PKMNGAINEDEXP, gBattleStruct->expGetterBattlerId); MonGainEVs(&gPlayerParty[gBattleStruct->expGetterMonId], gBattleMons[gBattlerFainted].species); @@ -3388,7 +4118,7 @@ static void Cmd_getexp(void) case 3: // Set stats and give exp if (gBattleControllerExecFlags == 0) { - gBattleBufferB[gBattleStruct->expGetterBattlerId][0] = 0; + gBattleResources->bufferB[gBattleStruct->expGetterBattlerId][0] = 0; if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP) && GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) != MAX_LEVEL) { gBattleResources->beforeLvlUp->stats[STAT_HP] = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP); @@ -3399,7 +4129,7 @@ static void Cmd_getexp(void) gBattleResources->beforeLvlUp->stats[STAT_SPDEF] = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF); gActiveBattler = gBattleStruct->expGetterBattlerId; - BtlController_EmitExpUpdate(0, gBattleStruct->expGetterMonId, gBattleMoveDamage); + BtlController_EmitExpUpdate(BUFFER_A, gBattleStruct->expGetterMonId, gBattleMoveDamage); MarkBattlerForControllerExec(gActiveBattler); } gBattleScripting.getexpState++; @@ -3409,8 +4139,9 @@ static void Cmd_getexp(void) if (gBattleControllerExecFlags == 0) { gActiveBattler = gBattleStruct->expGetterBattlerId; - if (gBattleBufferB[gActiveBattler][0] == CONTROLLER_TWORETURNVALUES && gBattleBufferB[gActiveBattler][1] == RET_VALUE_LEVELED_UP) + if (gBattleResources->bufferB[gActiveBattler][0] == CONTROLLER_TWORETURNVALUES && gBattleResources->bufferB[gActiveBattler][1] == RET_VALUE_LEVELED_UP) { + u16 temp, battlerId = 0xFF; if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId) HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); @@ -3420,40 +4151,30 @@ static void Cmd_getexp(void) BattleScriptPushCursor(); gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterMonId]; gBattlescriptCurrInstr = BattleScript_LevelUp; - gBattleMoveDamage = (gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8)); + gBattleMoveDamage = T1_READ_32(&gBattleResources->bufferB[gActiveBattler][2]); AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterMonId], FRIENDSHIP_EVENT_GROW_LEVEL); // update battle mon structure after level up if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId && gBattleMons[0].hp) + battlerId = 0; + else if (gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + battlerId = 2; + + if (battlerId != 0xFF) { - gBattleMons[0].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL); - gBattleMons[0].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP); - gBattleMons[0].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP); - gBattleMons[0].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK); - gBattleMons[0].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF); - // Speed is duplicated, likely due to a copy-paste error. - gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED); - gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED); - gBattleMons[0].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK); - gBattleMons[0].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF); + gBattleMons[battlerId].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL); + gBattleMons[battlerId].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP); + gBattleMons[battlerId].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP); + gBattleMons[battlerId].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK); + gBattleMons[battlerId].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF); + gBattleMons[battlerId].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED); + gBattleMons[battlerId].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK); + gBattleMons[battlerId].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF); + + if (gStatuses3[battlerId] & STATUS3_POWER_TRICK) + SWAP(gBattleMons[battlerId].attack, gBattleMons[battlerId].defense, temp); } - if (gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - gBattleMons[2].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL); - gBattleMons[2].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP); - gBattleMons[2].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP); - gBattleMons[2].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK); - gBattleMons[2].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF); - gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED); - // Speed is duplicated again, but Special Defense is missing. -#ifdef BUGFIX - gBattleMons[2].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF); -#else - gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED); -#endif - gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK); - } gBattleScripting.getexpState = 5; } else @@ -3481,24 +4202,45 @@ static void Cmd_getexp(void) if (gBattleControllerExecFlags == 0) { // not sure why gf clears the item and ability here - gBattleMons[gBattlerFainted].item = 0; - gBattleMons[gBattlerFainted].ability = 0; + gBattleMons[gBattlerFainted].item = ITEM_NONE; + gBattleMons[gBattlerFainted].ability = ABILITY_NONE; gBattlescriptCurrInstr += 2; } break; } } -static void Cmd_unknown_24(void) +#if B_MULTI_BATTLE_WHITEOUT >= GEN_4 +static bool32 NoAliveMonsForPlayerAndPartner(void) { - u16 HP_count = 0; - s32 i; + u32 i; + u32 HP_count = 0; - if (gBattleControllerExecFlags) - return; - - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == TRAINER_STEVEN_PARTNER) + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && (gPartnerTrainerId == TRAINER_STEVEN_PARTNER || gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER)) { + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) + && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostPlayerMons & gBitTable[i]))) + { + HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP); + } + } + } + + return (HP_count == 0); +} +#endif + +static bool32 NoAliveMonsForPlayer(void) +{ + u32 i; + u32 HP_count = 0; + + // Get total HP for the player's party to determine if the player has lost + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && (gPartnerTrainerId == TRAINER_STEVEN_PARTNER || gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER)) + { + // In multi battle with Steven, skip his Pokémon for (i = 0; i < MULTI_PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) @@ -3517,52 +4259,88 @@ static void Cmd_unknown_24(void) } } - if (HP_count == 0) - gBattleOutcome |= B_OUTCOME_LOST; - - HP_count = 0; + return (HP_count == 0); +} +static bool32 NoAliveMonsForOpponent(void) +{ + u32 i; + u32 HP_count = 0; + + // Get total HP for the enemy's party to determine if the player has won for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) - && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & gBitTable[i]))) + && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & gBitTable[i]))) { HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP); } } - if (HP_count == 0) + return (HP_count == 0); +} + +bool32 NoAliveMonsForEitherParty(void) +{ + return (NoAliveMonsForPlayer() || NoAliveMonsForOpponent()); +} + +// For battles that aren't BATTLE_TYPE_LINK or BATTLE_TYPE_RECORDED_LINK, the only thing this +// command does is check whether the player has won/lost by totaling each team's HP. It then +// sets gBattleOutcome accordingly, if necessary. +static void Cmd_checkteamslost(void) +{ + if (gBattleControllerExecFlags) + return; + +#if B_MULTI_BATTLE_WHITEOUT >= GEN_4 + if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) + { + if (NoAliveMonsForPlayerAndPartner()) + gBattleOutcome |= B_OUTCOME_LOST; + } + else + { + if (NoAliveMonsForPlayer()) + gBattleOutcome |= B_OUTCOME_LOST; + } +#else + if (NoAliveMonsForPlayer()) + gBattleOutcome |= B_OUTCOME_LOST; +#endif + if (NoAliveMonsForOpponent()) gBattleOutcome |= B_OUTCOME_WON; + // For link battles that haven't ended, count number of empty battler spots + // In link multi battles, jump to pointer if more than 1 spot empty + // In non-multi battles, jump to pointer if 1 spot is missing on both sides if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))) { - s32 foundPlayer = 0; - s32 foundOpponent; + s32 i, emptyPlayerSpots, emptyOpponentSpots; - for (i = 0; i < gBattlersCount; i += 2) + for (emptyPlayerSpots = 0, i = 0; i < gBattlersCount; i += 2) { - if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) - foundPlayer++; + if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].faintedHasReplacement)) + emptyPlayerSpots++; } - - foundOpponent = 0; + emptyOpponentSpots = 0; for (i = 1; i < gBattlersCount; i += 2) { - if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) - foundOpponent++; + if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].faintedHasReplacement)) + emptyOpponentSpots++; } if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - if (foundOpponent + foundPlayer > 1) + if (emptyOpponentSpots + emptyPlayerSpots > 1) gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } else { - if (foundOpponent != 0 && foundPlayer != 0) + if (emptyOpponentSpots != 0 && emptyPlayerSpots != 0) gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; @@ -3577,12 +4355,11 @@ static void Cmd_unknown_24(void) static void MoveValuesCleanUp(void) { gMoveResultFlags = 0; - gBattleScripting.dmgMultiplier = 1; - gCritMultiplier = 1; - gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gIsCriticalHit = FALSE; + gBattleScripting.moveEffect = 0; gBattleCommunication[MISS_TYPE] = 0; - gHitMarker &= ~(HITMARKER_DESTINYBOND); - gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); + gHitMarker &= ~HITMARKER_DESTINYBOND; + gHitMarker &= ~HITMARKER_SYNCHRONISE_EFFECT; } static void Cmd_movevaluescleanup(void) @@ -3613,9 +4390,9 @@ static void Cmd_goto(void) static void Cmd_jumpifbyte(void) { u8 caseID = gBattlescriptCurrInstr[1]; - const u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2); + const u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2); u8 value = gBattlescriptCurrInstr[6]; - const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7); + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7); gBattlescriptCurrInstr += 11; @@ -3651,9 +4428,9 @@ static void Cmd_jumpifbyte(void) static void Cmd_jumpifhalfword(void) { u8 caseID = gBattlescriptCurrInstr[1]; - const u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2); + const u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2); u16 value = T2_READ_16(gBattlescriptCurrInstr + 6); - const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8); + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8); gBattlescriptCurrInstr += 12; @@ -3689,9 +4466,9 @@ static void Cmd_jumpifhalfword(void) static void Cmd_jumpifword(void) { u8 caseID = gBattlescriptCurrInstr[1]; - const u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2); + const u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2); u32 value = T1_READ_32(gBattlescriptCurrInstr + 6); - const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); gBattlescriptCurrInstr += 14; @@ -3726,10 +4503,10 @@ static void Cmd_jumpifword(void) static void Cmd_jumpifarrayequal(void) { - const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); - const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); + const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); u32 size = gBattlescriptCurrInstr[9]; - const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); u8 i; for (i = 0; i < size; i++) @@ -3749,18 +4526,16 @@ static void Cmd_jumpifarrayequal(void) static void Cmd_jumpifarraynotequal(void) { u8 equalBytes = 0; - const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); - const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); + const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); u32 size = gBattlescriptCurrInstr[9]; - const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); + const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); u8 i; for (i = 0; i < size; i++) { if (*mem1 == *mem2) - { equalBytes++; - } mem1++, mem2++; } @@ -3772,7 +4547,7 @@ static void Cmd_jumpifarraynotequal(void) static void Cmd_setbyte(void) { - u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); *memByte = gBattlescriptCurrInstr[5]; gBattlescriptCurrInstr += 6; @@ -3780,59 +4555,55 @@ static void Cmd_setbyte(void) static void Cmd_addbyte(void) { - u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); *memByte += gBattlescriptCurrInstr[5]; gBattlescriptCurrInstr += 6; } static void Cmd_subbyte(void) { - u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); *memByte -= gBattlescriptCurrInstr[5]; gBattlescriptCurrInstr += 6; } static void Cmd_copyarray(void) { - u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); - const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5); + u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5); s32 size = gBattlescriptCurrInstr[9]; s32 i; for (i = 0; i < size; i++) - { dest[i] = src[i]; - } gBattlescriptCurrInstr += 10; } static void Cmd_copyarraywithindex(void) { - u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); - const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5); - const u8* index = T2_READ_PTR(gBattlescriptCurrInstr + 9); + u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5); + const u8 *index = T2_READ_PTR(gBattlescriptCurrInstr + 9); s32 size = gBattlescriptCurrInstr[13]; s32 i; for (i = 0; i < size; i++) - { dest[i] = src[i + *index]; - } gBattlescriptCurrInstr += 14; } static void Cmd_orbyte(void) { - u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); *memByte |= gBattlescriptCurrInstr[5]; gBattlescriptCurrInstr += 6; } static void Cmd_orhalfword(void) { - u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); *memHword |= val; @@ -3841,7 +4612,7 @@ static void Cmd_orhalfword(void) static void Cmd_orword(void) { - u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); *memWord |= val; @@ -3850,14 +4621,14 @@ static void Cmd_orword(void) static void Cmd_bicbyte(void) { - u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); *memByte &= ~(gBattlescriptCurrInstr[5]); gBattlescriptCurrInstr += 6; } static void Cmd_bichalfword(void) { - u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); *memHword &= ~val; @@ -3866,7 +4637,7 @@ static void Cmd_bichalfword(void) static void Cmd_bicword(void) { - u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); *memWord &= ~val; @@ -3899,7 +4670,7 @@ static void Cmd_healthbar_update(void) else gActiveBattler = gBattlerAttacker; - BtlController_EmitHealthBarUpdate(0, gBattleMoveDamage); + BtlController_EmitHealthBarUpdate(BUFFER_A, gBattleMoveDamage); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; } @@ -3925,7 +4696,8 @@ static void Cmd_end2(void) gCurrentActionFuncId = B_ACTION_TRY_FINISH; } -static void Cmd_end3(void) // pops the main function stack +// Pops the main function stack +static void Cmd_end3(void) { BattleScriptPop(); if (gBattleResources->battleCallbackStack->size != 0) @@ -3939,22 +4711,45 @@ static void Cmd_call(void) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } -static void Cmd_jumpiftype2(void) +static void Cmd_setroost(void) { - u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gBattleResources->flags->flags[gBattlerAttacker] |= RESOURCE_FLAG_ROOST; - if (gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type1 || gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type2) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); - else - gBattlescriptCurrInstr += 7; + // Pure flying type. + if (gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING && gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING) + { + gBattleStruct->roostTypes[gBattlerAttacker][0] = TYPE_FLYING; + gBattleStruct->roostTypes[gBattlerAttacker][1] = TYPE_FLYING; + gBattleStruct->roostTypes[gBattlerAttacker][2] = TYPE_FLYING; + SET_BATTLER_TYPE(gBattlerAttacker, TYPE_NORMAL); + } + // Dual Type with Flying Type. + else if ((gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING && gBattleMons[gBattlerAttacker].type2 != TYPE_FLYING) + ||(gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING && gBattleMons[gBattlerAttacker].type1 != TYPE_FLYING)) + { + gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1; + gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2; + if (gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING) + gBattleMons[gBattlerAttacker].type1 = TYPE_MYSTERY; + if (gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING) + gBattleMons[gBattlerAttacker].type2 = TYPE_MYSTERY; + } + // Non-flying type. + else if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FLYING)) + { + gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1; + gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2; + } + + gBattlescriptCurrInstr++; } static void Cmd_jumpifabilitypresent(void) { - if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, gBattlescriptCurrInstr[1], 0, 0)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + if (IsAbilityOnField(T1_READ_16(gBattlescriptCurrInstr + 1))) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); else - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr += 7; } static void Cmd_endselectionscript(void) @@ -3964,30 +4759,44 @@ static void Cmd_endselectionscript(void) static void Cmd_playanimation(void) { - const u16* argumentPtr; + const u16 *argumentPtr; + u8 animId = gBattlescriptCurrInstr[2]; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3); - if (gBattlescriptCurrInstr[2] == B_ANIM_STATS_CHANGE - || gBattlescriptCurrInstr[2] == B_ANIM_SNATCH_MOVE - || gBattlescriptCurrInstr[2] == B_ANIM_SUBSTITUTE_FADE) + #if B_TERRAIN_BG_CHANGE == FALSE + if (animId == B_ANIM_RESTORE_BG) { - BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr); + // workaround for .if not working + gBattlescriptCurrInstr += 7; + return; + } + #endif + + if (animId == B_ANIM_STATS_CHANGE + || animId == B_ANIM_SNATCH_MOVE + || animId == B_ANIM_MEGA_EVOLUTION + || animId == B_ANIM_ILLUSION_OFF + || animId == B_ANIM_FORM_CHANGE + || animId == B_ANIM_SUBSTITUTE_FADE + || animId == B_ANIM_PRIMAL_REVERSION) + { + BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 7; } - else if (gHitMarker & HITMARKER_NO_ANIMATIONS) + else if (gHitMarker & HITMARKER_NO_ANIMATIONS && animId != B_ANIM_RESTORE_BG) { BattleScriptPush(gBattlescriptCurrInstr + 7); gBattlescriptCurrInstr = BattleScript_Pausex20; } - else if (gBattlescriptCurrInstr[2] == B_ANIM_RAIN_CONTINUES - || gBattlescriptCurrInstr[2] == B_ANIM_SUN_CONTINUES - || gBattlescriptCurrInstr[2] == B_ANIM_SANDSTORM_CONTINUES - || gBattlescriptCurrInstr[2] == B_ANIM_HAIL_CONTINUES) + else if (animId == B_ANIM_RAIN_CONTINUES + || animId == B_ANIM_SUN_CONTINUES + || animId == B_ANIM_SANDSTORM_CONTINUES + || animId == B_ANIM_HAIL_CONTINUES) { - BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 7; } @@ -3997,26 +4806,31 @@ static void Cmd_playanimation(void) } else { - BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 7; } } -static void Cmd_playanimation2(void) // animation Id is stored in the first pointer +// Same as playanimation, except it takes a pointer to some animation id, instead of taking the value directly +static void Cmd_playanimation_var(void) { - const u16* argumentPtr; - const u8* animationIdPtr; + const u16 *argumentPtr; + const u8 *animationIdPtr; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); animationIdPtr = T2_READ_PTR(gBattlescriptCurrInstr + 2); argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); if (*animationIdPtr == B_ANIM_STATS_CHANGE - || *animationIdPtr == B_ANIM_SNATCH_MOVE - || *animationIdPtr == B_ANIM_SUBSTITUTE_FADE) + || *animationIdPtr == B_ANIM_SNATCH_MOVE + || *animationIdPtr == B_ANIM_MEGA_EVOLUTION + || *animationIdPtr == B_ANIM_ILLUSION_OFF + || *animationIdPtr == B_ANIM_FORM_CHANGE + || *animationIdPtr == B_ANIM_SUBSTITUTE_FADE + || *animationIdPtr == B_ANIM_PRIMAL_REVERSION) { - BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, *animationIdPtr, *argumentPtr); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 10; } @@ -4025,11 +4839,11 @@ static void Cmd_playanimation2(void) // animation Id is stored in the first poin gBattlescriptCurrInstr += 10; } else if (*animationIdPtr == B_ANIM_RAIN_CONTINUES - || *animationIdPtr == B_ANIM_SUN_CONTINUES - || *animationIdPtr == B_ANIM_SANDSTORM_CONTINUES - || *animationIdPtr == B_ANIM_HAIL_CONTINUES) + || *animationIdPtr == B_ANIM_SUN_CONTINUES + || *animationIdPtr == B_ANIM_SANDSTORM_CONTINUES + || *animationIdPtr == B_ANIM_HAIL_CONTINUES) { - BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, *animationIdPtr, *argumentPtr); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 10; } @@ -4039,7 +4853,7 @@ static void Cmd_playanimation2(void) // animation Id is stored in the first poin } else { - BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, *animationIdPtr, *argumentPtr); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 10; } @@ -4047,8 +4861,9 @@ static void Cmd_playanimation2(void) // animation Id is stored in the first poin static void Cmd_setgraphicalstatchangevalues(void) { - u8 value = 0; - switch (GET_STAT_BUFF_VALUE2(gBattleScripting.statChanger)) + u8 value = GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger); + + switch (value) { case SET_STAT_BUFF_VALUE(1): // +1 value = STAT_ANIM_PLUS1; @@ -4056,12 +4871,24 @@ static void Cmd_setgraphicalstatchangevalues(void) case SET_STAT_BUFF_VALUE(2): // +2 value = STAT_ANIM_PLUS2; break; + case SET_STAT_BUFF_VALUE(3): // +3 + value = STAT_ANIM_PLUS2; + break; case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1 value = STAT_ANIM_MINUS1; break; case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2 value = STAT_ANIM_MINUS2; break; + case SET_STAT_BUFF_VALUE(3) | STAT_BUFF_NEGATIVE: // -3 + value = STAT_ANIM_MINUS2; + break; + default: // <-12,-4> and <4, 12> + if (value & STAT_BUFF_NEGATIVE) + value = STAT_ANIM_MINUS2; + else + value = STAT_ANIM_PLUS2; + break; } gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1; gBattleScripting.animArg2 = 0; @@ -4070,18 +4897,27 @@ static void Cmd_setgraphicalstatchangevalues(void) static void Cmd_playstatchangeanimation(void) { + u32 ability; u32 currStat = 0; - u16 statAnimId = 0; - s32 changeableStatsCount = 0; - u8 statsToCheck = 0; + u32 statAnimId = 0; + u32 changeableStatsCount = 0; + u32 statsToCheck = 0; + u32 startingStatAnimId = 0; + u32 flags = gBattlescriptCurrInstr[3]; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + ability = GetBattlerAbility(gActiveBattler); statsToCheck = gBattlescriptCurrInstr[2]; - if (gBattlescriptCurrInstr[3] & STAT_CHANGE_NEGATIVE) // goes down + // Handle Contrary and Simple + if (ability == ABILITY_CONTRARY) + flags ^= STAT_CHANGE_NEGATIVE; + else if (ability == ABILITY_SIMPLE) + flags |= STAT_CHANGE_BY_TWO; + + if (flags & STAT_CHANGE_NEGATIVE) // goes down { - s16 startingStatAnimId; - if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO) + if (flags & STAT_CHANGE_BY_TWO) startingStatAnimId = STAT_ANIM_MINUS2 - 1; else startingStatAnimId = STAT_ANIM_MINUS1 - 1; @@ -4090,7 +4926,7 @@ static void Cmd_playstatchangeanimation(void) { if (statsToCheck & 1) { - if (gBattlescriptCurrInstr[3] & STAT_CHANGE_CANT_PREVENT) + if (flags & STAT_CHANGE_CANT_PREVENT) { if (gBattleMons[gActiveBattler].statStages[currStat] > MIN_STAT_STAGE) { @@ -4099,10 +4935,12 @@ static void Cmd_playstatchangeanimation(void) } } else if (!gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer - && gBattleMons[gActiveBattler].ability != ABILITY_CLEAR_BODY - && gBattleMons[gActiveBattler].ability != ABILITY_WHITE_SMOKE - && !(gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE && currStat == STAT_ACC) - && !(gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK)) + && ability != ABILITY_CLEAR_BODY + && ability != ABILITY_FULL_METAL_BODY + && ability != ABILITY_WHITE_SMOKE + && !(ability == ABILITY_KEEN_EYE && currStat == STAT_ACC) + && !(ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK) + && !(ability == ABILITY_BIG_PECKS && currStat == STAT_DEF)) { if (gBattleMons[gActiveBattler].statStages[currStat] > MIN_STAT_STAGE) { @@ -4116,7 +4954,7 @@ static void Cmd_playstatchangeanimation(void) if (changeableStatsCount > 1) // more than one stat, so the color is gray { - if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO) + if (flags & STAT_CHANGE_BY_TWO) statAnimId = STAT_ANIM_MULTIPLE_MINUS2; else statAnimId = STAT_ANIM_MULTIPLE_MINUS1; @@ -4124,8 +4962,7 @@ static void Cmd_playstatchangeanimation(void) } else // goes up { - s16 startingStatAnimId; - if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO) + if (flags & STAT_CHANGE_BY_TWO) startingStatAnimId = STAT_ANIM_PLUS2 - 1; else startingStatAnimId = STAT_ANIM_PLUS1 - 1; @@ -4142,22 +4979,22 @@ static void Cmd_playstatchangeanimation(void) if (changeableStatsCount > 1) // more than one stat, so the color is gray { - if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO) + if (flags & STAT_CHANGE_BY_TWO) statAnimId = STAT_ANIM_MULTIPLE_PLUS2; else statAnimId = STAT_ANIM_MULTIPLE_PLUS1; } } - if (gBattlescriptCurrInstr[3] & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount < 2) + if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount < 2) { gBattlescriptCurrInstr += 4; } else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed) { - BtlController_EmitBattleAnimation(0, B_ANIM_STATS_CHANGE, statAnimId); + BtlController_EmitBattleAnimation(BUFFER_A, B_ANIM_STATS_CHANGE, statAnimId); MarkBattlerForControllerExec(gActiveBattler); - if (gBattlescriptCurrInstr[3] & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount > 1) + if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount > 1) gBattleScripting.statAnimPlayed = TRUE; gBattlescriptCurrInstr += 4; } @@ -4167,29 +5004,69 @@ static void Cmd_playstatchangeanimation(void) } } +static bool32 TryKnockOffBattleScript(u32 battlerDef) +{ + if (gBattleMons[battlerDef].item != 0 + && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item) + && !NoAliveMonsForEitherParty()) + { + if (GetBattlerAbility(battlerDef) == ABILITY_STICKY_HOLD && IsBattlerAlive(battlerDef)) + { + gBattlerAbility = battlerDef; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_StickyHoldActivates; + } + else + { + u32 side = GetBattlerSide(battlerDef); + + gLastUsedItem = gBattleMons[battlerDef].item; + gBattleMons[battlerDef].item = 0; + gBattleStruct->choicedMove[battlerDef] = 0; + gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[battlerDef]]; + CheckSetUnburden(battlerDef); + + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_KnockedOff; + } + return TRUE; + } + return FALSE; +} + +static u32 GetNextTarget(u32 moveTarget) +{ + u32 i; + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (i != gBattlerAttacker + && IsBattlerAlive(i) + && !(gBattleStruct->targetsDone[gBattlerAttacker] & gBitTable[i]) + && (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) + break; + } + return i; +} + static void Cmd_moveend(void) { s32 i; bool32 effect = FALSE; - u8 moveType = 0; - u8 holdEffectAtk = 0; + u32 moveType = 0; + u32 holdEffectAtk = 0; u16 *choicedMoveAtk = NULL; - u8 arg1, arg2; - u16 originallyUsedMove; + u32 endMode, endState; + u32 originallyUsedMove; - if (gChosenMove == 0xFFFF) - originallyUsedMove = 0; + if (gChosenMove == MOVE_UNAVAILABLE) + originallyUsedMove = MOVE_NONE; else originallyUsedMove = gChosenMove; - arg1 = gBattlescriptCurrInstr[1]; - arg2 = gBattlescriptCurrInstr[2]; - - if (gBattleMons[gBattlerAttacker].item == ITEM_ENIGMA_BERRY) - holdEffectAtk = gEnigmaBerries[gBattlerAttacker].holdEffect; - else - holdEffectAtk = ItemId_GetHoldEffect(gBattleMons[gBattlerAttacker].item); + endMode = gBattlescriptCurrInstr[1]; + endState = gBattlescriptCurrInstr[2]; + holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker]; GET_MOVE_TYPE(gCurrentMove, moveType); @@ -4197,12 +5074,74 @@ static void Cmd_moveend(void) { switch (gBattleScripting.moveendState) { + case MOVEEND_PROTECT_LIKE_EFFECT: + if (gProtectStructs[gBattlerAttacker].touchedProtectLike) + { + if (gProtectStructs[gBattlerTarget].spikyShielded && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_SPIKY_SHIELD); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SpikyShieldEffect; + effect = 1; + } + else if (gProtectStructs[gBattlerTarget].kingsShielded) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + i = gBattlerAttacker; + gBattlerAttacker = gBattlerTarget; + gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable + gBattleScripting.moveEffect = (B_KINGS_SHIELD_LOWER_ATK >= GEN_8) ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_ATK_MINUS_2; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; + effect = 1; + } + else if (gProtectStructs[gBattlerTarget].banefulBunkered) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + gBattleScripting.moveEffect = MOVE_EFFECT_POISON | MOVE_EFFECT_AFFECTS_USER; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_BANEFUL_BUNKER); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BanefulBunkerEffect; + effect = 1; + } + else if (gProtectStructs[gBattlerTarget].obstructed && gCurrentMove != MOVE_SUCKER_PUNCH) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + i = gBattlerAttacker; + gBattlerAttacker = gBattlerTarget; + gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable + gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_2; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; + effect = 1; + } + // Not strictly a protect effect, but works the same way + else if (gProtectStructs[gBattlerTarget].beakBlastCharge + && CanBeBurned(gBattlerAttacker) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + gBattleMons[gBattlerAttacker].status1 = STATUS1_BURN; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BeakBlastBurn; + effect = 1; + } + } + gBattleScripting.moveendState++; + break; case MOVEEND_RAGE: // rage check if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE - && gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget + && gBattleMons[gBattlerTarget].hp != 0 + && gBattlerAttacker != gBattlerTarget && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget) - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED - && gBattleMoves[gCurrentMove].power && gBattleMons[gBattlerTarget].statStages[STAT_ATK] < MAX_STAT_STAGE) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && gBattleMoves[gCurrentMove].power != 0 + && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) { gBattleMons[gBattlerTarget].statStages[STAT_ATK]++; BattleScriptPushCursor(); @@ -4213,13 +5152,15 @@ static void Cmd_moveend(void) break; case MOVEEND_DEFROST: // defrosting check if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE - && gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget + && gBattleMons[gBattlerTarget].hp != 0 + && gBattlerAttacker != gBattlerTarget && gSpecialStatuses[gBattlerTarget].specialDmg - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && moveType == TYPE_FIRE) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && (moveType == TYPE_FIRE || gBattleMoves[gCurrentMove].effect == EFFECT_SCALD)) { - gBattleMons[gBattlerTarget].status1 &= ~(STATUS1_FREEZE); + gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FREEZE; gActiveBattler = gBattlerTarget; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerTarget].status1); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); MarkBattlerForControllerExec(gActiveBattler); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; @@ -4232,12 +5173,17 @@ static void Cmd_moveend(void) effect = TRUE; gBattleScripting.moveendState++; break; - case MOVEEND_ON_DAMAGE_ABILITIES: // Contact abilities and Color Change - if (AbilityBattleEffects(ABILITYEFFECT_ON_DAMAGE, gBattlerTarget, 0, 0, 0)) + case MOVEEND_ABILITIES: // Such as abilities activating on contact(Poison Spore, Rough Skin, etc.). + if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END, gBattlerTarget, 0, 0, 0)) effect = TRUE; gBattleScripting.moveendState++; break; - case MOVEEND_IMMUNITY_ABILITIES: // status immunities + case MOVEEND_ABILITIES_ATTACKER: // Poison Touch, possibly other in the future + if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END_ATTACKER, gBattlerAttacker, 0, 0, 0)) + effect = TRUE; + gBattleScripting.moveendState++; + break; + case MOVEEND_STATUS_IMMUNITY_ABILITIES: // status immunities if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0)) effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers else @@ -4250,46 +5196,63 @@ static void Cmd_moveend(void) break; case MOVEEND_CHOICE_MOVE: // update choice band move if (gHitMarker & HITMARKER_OBEYS - && holdEffectAtk == HOLD_EFFECT_CHOICE_BAND + && (HOLD_EFFECT_CHOICE(holdEffectAtk) || GetBattlerAbility(gBattlerAttacker) == ABILITY_GORILLA_TACTICS) && gChosenMove != MOVE_STRUGGLE - && (*choicedMoveAtk == 0 || *choicedMoveAtk == 0xFFFF)) + && (*choicedMoveAtk == MOVE_NONE || *choicedMoveAtk == MOVE_UNAVAILABLE)) { - if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED)) + if ((gBattleMoves[gChosenMove].effect == EFFECT_BATON_PASS + || gBattleMoves[gChosenMove].effect == EFFECT_HEALING_WISH) + && !(gMoveResultFlags & MOVE_RESULT_FAILED)) { - ++gBattleScripting.moveendState; + gBattleScripting.moveendState++; break; } *choicedMoveAtk = gChosenMove; } - for (i = 0; i < MAX_MON_MOVES; ++i) + for (i = 0; i < MAX_MON_MOVES; i++) { if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk) break; } if (i == MAX_MON_MOVES) - *choicedMoveAtk = 0; - ++gBattleScripting.moveendState; + *choicedMoveAtk = MOVE_NONE; + gBattleScripting.moveendState++; break; case MOVEEND_CHANGED_ITEMS: // changed held items for (i = 0; i < gBattlersCount; i++) { - u16* changedItem = &gBattleStruct->changedItems[i]; - if (*changedItem != 0) + if (gBattleStruct->changedItems[i] != ITEM_NONE) { - gBattleMons[i].item = *changedItem; - *changedItem = 0; + gBattleMons[i].item = gBattleStruct->changedItems[i]; + gBattleStruct->changedItems[i] = ITEM_NONE; } } gBattleScripting.moveendState++; break; + case MOVEEND_ITEM_EFFECTS_TARGET: + if (ItemBattleEffects(ITEMEFFECT_TARGET, gBattlerTarget, FALSE)) + effect = TRUE; + gBattleScripting.moveendState++; + break; + case MOVEEND_MOVE_EFFECTS2: // For effects which should happen after target items, for example Knock Off after damage from Rocky Helmet. + switch (gBattleStruct->moveEffect2) + { + case MOVE_EFFECT_KNOCK_OFF: + effect = TryKnockOffBattleScript(gBattlerTarget); + break; + } + gBattleStruct->moveEffect2 = 0; + gBattleScripting.moveendState++; + break; case MOVEEND_ITEM_EFFECTS_ALL: // item effects for all battlers if (ItemBattleEffects(ITEMEFFECT_MOVE_END, 0, FALSE)) effect = TRUE; else gBattleScripting.moveendState++; break; - case MOVEEND_KINGSROCK_SHELLBELL: // king's rock and shell bell - if (ItemBattleEffects(ITEMEFFECT_KINGSROCK_SHELLBELL, 0, FALSE)) + case MOVEEND_KINGSROCK: // King's rock + // These effects will occur at each hit in a multi-strike move + if (ItemBattleEffects(ITEMEFFECT_KINGSROCK, 0, FALSE)) effect = TRUE; gBattleScripting.moveendState++; break; @@ -4298,7 +5261,7 @@ static void Cmd_moveend(void) && gHitMarker & HITMARKER_NO_ANIMATIONS) { gActiveBattler = gBattlerAttacker; - BtlController_EmitSpriteInvisibility(0, TRUE); + BtlController_EmitSpriteInvisibility(BUFFER_A, TRUE); MarkBattlerForControllerExec(gActiveBattler); gBattleScripting.moveendState++; return; @@ -4311,10 +5274,10 @@ static void Cmd_moveend(void) || WasUnableToUseMove(gBattlerAttacker)) { gActiveBattler = gBattlerAttacker; - BtlController_EmitSpriteInvisibility(0, FALSE); + BtlController_EmitSpriteInvisibility(BUFFER_A, FALSE); MarkBattlerForControllerExec(gActiveBattler); - gStatuses3[gBattlerAttacker] &= ~(STATUS3_SEMI_INVULNERABLE); - gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = 1; + gStatuses3[gBattlerAttacker] &= ~STATUS3_SEMI_INVULNERABLE; + gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = TRUE; gBattleScripting.moveendState++; return; } @@ -4325,9 +5288,9 @@ static void Cmd_moveend(void) && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)) { gActiveBattler = gBattlerTarget; - BtlController_EmitSpriteInvisibility(0, FALSE); + BtlController_EmitSpriteInvisibility(BUFFER_A, FALSE); MarkBattlerForControllerExec(gActiveBattler); - gStatuses3[gBattlerTarget] &= ~(STATUS3_SEMI_INVULNERABLE); + gStatuses3[gBattlerTarget] &= ~STATUS3_SEMI_INVULNERABLE; gBattleScripting.moveendState++; return; } @@ -4337,35 +5300,77 @@ static void Cmd_moveend(void) for (i = 0; i < gBattlersCount; i++) { if (gDisableStructs[i].substituteHP == 0) - gBattleMons[i].status2 &= ~(STATUS2_SUBSTITUTE); + gBattleMons[i].status2 &= ~STATUS2_SUBSTITUTE; + } + gBattleScripting.moveendState++; + break; + case MOVEEND_SKY_DROP_CONFUSE: // If a Pokemon was released from Sky Drop and was in LOCK_CONFUSE, go to "confused due to fatigue" scripts and clear Sky Drop data. + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleStruct->skyDropTargets[i] == 0xFE) + { + u8 targetId; + // Find the battler id of the Pokemon that was held by Sky Drop + for (targetId = 0; targetId < gBattlersCount; targetId++) + { + if (gBattleStruct->skyDropTargets[targetId] == i) + break; + } + + // Set gBattlerAttacker to the battler id of the target + gBattlerAttacker = targetId; + + // Jump to "confused due to fatigue" script + gBattlescriptCurrInstr = BattleScript_ThrashConfuses; + + // Clear skyDropTargets data + gBattleStruct->skyDropTargets[i] = 0xFF; + gBattleStruct->skyDropTargets[targetId] = 0xFF; + return; + } } gBattleScripting.moveendState++; break; case MOVEEND_UPDATE_LAST_MOVES: + if (gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE)) + gBattleStruct->lastMoveFailed |= gBitTable[gBattlerAttacker]; + else + gBattleStruct->lastMoveFailed &= ~(gBitTable[gBattlerAttacker]); + if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET) { gActiveBattler = gBattlerAttacker; gBattlerAttacker = gBattlerTarget; gBattlerTarget = gActiveBattler; - gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET); + gHitMarker &= ~HITMARKER_SWAP_ATTACKER_TARGET; } - if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED) + if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove) { - gLastPrintedMoves[gBattlerAttacker] = gChosenMove; + gDisableStructs[gBattlerAttacker].usedMoves |= gBitTable[gCurrMovePos]; + gBattleStruct->lastMoveTarget[gBattlerAttacker] = gBattlerTarget; + if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED) + { + gLastPrintedMoves[gBattlerAttacker] = gChosenMove; + gLastUsedMove = gCurrentMove; + } } if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) - && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker]) - && gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS) + && !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker]) + && gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS + && gBattleMoves[originallyUsedMove].effect != EFFECT_HEALING_WISH) { if (gHitMarker & HITMARKER_OBEYS) { - gLastMoves[gBattlerAttacker] = gChosenMove; - gLastResultingMoves[gBattlerAttacker] = gCurrentMove; + if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove) + { + gLastMoves[gBattlerAttacker] = gChosenMove; + gLastResultingMoves[gBattlerAttacker] = gCurrentMove; + } } else { - gLastMoves[gBattlerAttacker] = 0xFFFF; - gLastResultingMoves[gBattlerAttacker] = 0xFFFF; + gLastMoves[gBattlerAttacker] = MOVE_UNAVAILABLE; + gLastResultingMoves[gBattlerAttacker] = MOVE_UNAVAILABLE; } if (!(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))) @@ -4373,7 +5378,7 @@ static void Cmd_moveend(void) if (gHitMarker & HITMARKER_OBEYS && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - if (gChosenMove == 0xFFFF) + if (gChosenMove == MOVE_UNAVAILABLE) { gLastLandedMoves[gBattlerTarget] = gChosenMove; } @@ -4385,62 +5390,337 @@ static void Cmd_moveend(void) } else { - gLastLandedMoves[gBattlerTarget] = 0xFFFF; + gLastLandedMoves[gBattlerTarget] = MOVE_UNAVAILABLE; } } gBattleScripting.moveendState++; break; case MOVEEND_MIRROR_MOVE: // mirror move - if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker]) - && gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED && gHitMarker & HITMARKER_OBEYS - && gBattlerAttacker != gBattlerTarget && !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget)) + if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) + && !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker]) + && gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED + && gHitMarker & HITMARKER_OBEYS + && gBattlerAttacker != gBattlerTarget + && !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget)) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - u8 target, attacker; - - *(gBattleStruct->lastTakenMove + gBattlerTarget * 2 + 0) = gChosenMove; - *(gBattleStruct->lastTakenMove + gBattlerTarget * 2 + 1) = gChosenMove >> 8; - - target = gBattlerTarget; - attacker = gBattlerAttacker; - *(attacker * 2 + target * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = gChosenMove; - - target = gBattlerTarget; - attacker = gBattlerAttacker; - *(attacker * 2 + target * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = gChosenMove >> 8; + gBattleStruct->lastTakenMove[gBattlerTarget] = gChosenMove; + gBattleStruct->lastTakenMoveFrom[gBattlerTarget][gBattlerAttacker] = gChosenMove; + } + gBattleScripting.moveendState++; + break; + case MOVEEND_MAGICIAN: + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MAGICIAN + && gCurrentMove != MOVE_FLING && gCurrentMove != MOVE_NATURAL_GIFT + && gBattleMons[gBattlerAttacker].item == ITEM_NONE + && gBattleMons[gBattlerTarget].item != ITEM_NONE + && IsBattlerAlive(gBattlerAttacker) + && TARGET_TURN_DAMAGED + && CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item) + && !gSpecialStatuses[gBattlerAttacker].gemBoost // In base game, gems are consumed after magician would activate. + && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]]) + && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && (GetBattlerAbility(gBattlerTarget) != ABILITY_STICKY_HOLD || !IsBattlerAlive(gBattlerTarget))) + { + StealTargetItem(gBattlerAttacker, gBattlerTarget); + gBattleScripting.battler = gBattlerAbility = gBattlerAttacker; + gEffectBattler = gBattlerTarget; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MagicianActivates; + effect = TRUE; } gBattleScripting.moveendState++; break; case MOVEEND_NEXT_TARGET: // For moves hitting two opposing Pokemon. - if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && !gProtectStructs[gBattlerAttacker].chargingTurn && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH + { + u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); + // Set a flag if move hits either target (for throat spray that can't check damage) + if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + gProtectStructs[gBattlerAttacker].targetAffected = TRUE; + + gBattleStruct->targetsDone[gBattlerAttacker] |= gBitTable[gBattlerTarget]; + if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + && gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && !gProtectStructs[gBattlerAttacker].chargingTurn + && (moveTarget == MOVE_TARGET_BOTH + || moveTarget == MOVE_TARGET_FOES_AND_ALLY) && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) { - u8 battlerId = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); - if (gBattleMons[battlerId].hp != 0) + u32 nextTarget = GetNextTarget(moveTarget); + gHitMarker |= HITMARKER_NO_PPDEDUCT; + + if (nextTarget != MAX_BATTLERS_COUNT) { - gBattlerTarget = battlerId; - gHitMarker |= HITMARKER_NO_ATTACKSTRING; + gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = nextTarget; // Fix for moxie spread moves gBattleScripting.moveendState = 0; MoveValuesCleanUp(); + gBattleScripting.moveEffect = gBattleScripting.savedMoveEffect; BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); gBattlescriptCurrInstr = BattleScript_FlushMessageBox; return; } - else + // Check if the move used was actually a bounced move. If so, we need to go back to the original attacker and make sure, its move hits all 2 or 3 pokemon. + else if (gProtectStructs[gBattlerAttacker].usesBouncedMove) { - gHitMarker |= HITMARKER_NO_ATTACKSTRING; + u8 originalBounceTarget = gBattlerAttacker; + gBattlerAttacker = gBattleStruct->attackerBeforeBounce; + gBattleStruct->targetsDone[gBattlerAttacker] |= gBitTable[originalBounceTarget]; + gBattleStruct->targetsDone[originalBounceTarget] = 0; + + nextTarget = GetNextTarget(moveTarget); + if (nextTarget != MAX_BATTLERS_COUNT) + { + // We found another target for the original move user. + gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = nextTarget; + gBattleScripting.moveendState = 0; + gBattleScripting.animTurn = 0; + gBattleScripting.animTargetsHit = 0; + MoveValuesCleanUp(); + BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); + gBattlescriptCurrInstr = BattleScript_FlushMessageBox; + return; + } + } + + gHitMarker |= HITMARKER_NO_ATTACKSTRING; + gHitMarker &= ~HITMARKER_NO_PPDEDUCT; + } + RecordLastUsedMoveBy(gBattlerAttacker, gCurrentMove); + gBattleScripting.moveendState++; + break; + } + case MOVEEND_EJECT_BUTTON: + if (gCurrentMove != MOVE_DRAGON_TAIL + && gCurrentMove != MOVE_CIRCLE_THROW + && IsBattlerAlive(gBattlerAttacker) + && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove) + && (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER || (gBattleTypeFlags & BATTLE_TYPE_TRAINER))) + { + // Since we check if battler was damaged, we don't need to check move result. + // In fact, doing so actually prevents multi-target moves from activating eject button properly + u8 battlers[4] = {0, 1, 2, 3}; + SortBattlersBySpeed(battlers, FALSE); + for (i = 0; i < gBattlersCount; i++) + { + u8 battler = battlers[i]; + // Attacker is the damage-dealer, battler is mon to be switched out + if (IsBattlerAlive(battler) + && GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_EJECT_BUTTON + && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) + && (gSpecialStatuses[battler].physicalDmg != 0 || gSpecialStatuses[battler].specialDmg != 0) + && CountUsablePartyMons(battler) > 0) // Has mon to switch into + { + gActiveBattler = gBattleScripting.battler = battler; + gLastUsedItem = gBattleMons[battler].item; + if (gBattleMoves[gCurrentMove].effect == EFFECT_HIT_ESCAPE) + gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_EjectButtonActivates; + effect = TRUE; + break; // Only the fastest Eject Button activates + } } } gBattleScripting.moveendState++; break; + case MOVEEND_RED_CARD: + if (gCurrentMove != MOVE_DRAGON_TAIL + && gCurrentMove != MOVE_CIRCLE_THROW + && IsBattlerAlive(gBattlerAttacker) + && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove)) + { + // Since we check if battler was damaged, we don't need to check move result. + // In fact, doing so actually prevents multi-target moves from activating red card properly + u8 battlers[4] = {0, 1, 2, 3}; + SortBattlersBySpeed(battlers, FALSE); + for (i = 0; i < gBattlersCount; i++) + { + u8 battler = battlers[i]; + // Search for fastest hit pokemon with a red card + // Attacker is the one to be switched out, battler is one with red card + if (battler != gBattlerAttacker + && IsBattlerAlive(battler) + && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) + && GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_RED_CARD + && (gSpecialStatuses[battler].physicalDmg != 0 || gSpecialStatuses[battler].specialDmg != 0) + && CanBattlerSwitch(gBattlerAttacker)) + { + gLastUsedItem = gBattleMons[battler].item; + gActiveBattler = gBattleStruct->savedBattlerTarget = gBattleScripting.battler = battler; // Battler with red card + gEffectBattler = gBattlerAttacker; + if (gBattleMoves[gCurrentMove].effect == EFFECT_HIT_ESCAPE) + gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_RedCardActivates; + effect = TRUE; + break; // Only fastest red card activates + } + } + } + gBattleScripting.moveendState++; + break; + case MOVEEND_EJECT_PACK: + { + u8 battlers[4] = {0, 1, 2, 3}; + SortBattlersBySpeed(battlers, FALSE); + for (i = 0; i < gBattlersCount; i++) + { + u8 battler = battlers[i]; + if (IsBattlerAlive(battler) + && gProtectStructs[battler].statFell + && gProtectStructs[battler].disableEjectPack == 0 + && GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_EJECT_PACK + && !(gCurrentMove == MOVE_PARTING_SHOT && CanBattlerSwitch(gBattlerAttacker)) // Does not activate if attacker used Parting Shot and can switch out + && CountUsablePartyMons(battler) > 0) // Has mon to switch into + { + gProtectStructs[battler].statFell = FALSE; + gActiveBattler = gBattleScripting.battler = battler; + gLastUsedItem = gBattleMons[battler].item; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_EjectPackActivates; + effect = TRUE; + break; // Only fastest eject pack activates + } + } + } + gBattleScripting.moveendState++; + break; + case MOVEEND_LIFEORB_SHELLBELL: + if (ItemBattleEffects(ITEMEFFECT_LIFEORB_SHELLBELL, 0, FALSE)) + effect = TRUE; + gBattleScripting.moveendState++; + break; + case MOVEEND_PICKPOCKET: + if (IsBattlerAlive(gBattlerAttacker) + && gBattleMons[gBattlerAttacker].item != ITEM_NONE // Attacker must be holding an item + && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]) // But not knocked off + && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove)) // Pickpocket doesn't activate for sheer force + && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) // Pickpocket requires contact + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) // Obviously attack needs to have worked + { + u8 battlers[4] = {0, 1, 2, 3}; + SortBattlersBySpeed(battlers, FALSE); // Pickpocket activates for fastest mon without item + for (i = 0; i < gBattlersCount; i++) + { + u8 battler = battlers[i]; + // Attacker is mon who made contact, battler is mon with pickpocket + if (battler != gBattlerAttacker // Cannot pickpocket yourself + && GetBattlerAbility(battler) == ABILITY_PICKPOCKET // Target must have pickpocket ability + && BATTLER_DAMAGED(battler) // Target needs to have been damaged + && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) // Subsitute unaffected + && IsBattlerAlive(battler) // Battler must be alive to pickpocket + && gBattleMons[battler].item == ITEM_NONE // Pickpocketer can't have an item already + && CanStealItem(battler, gBattlerAttacker, gBattleMons[gBattlerAttacker].item)) // Cannot steal plates, mega stones, etc + { + gBattlerTarget = gBattlerAbility = battler; + // Battle scripting is super brittle so we shall do the item exchange now (if possible) + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_STICKY_HOLD) + StealTargetItem(gBattlerTarget, gBattlerAttacker); // Target takes attacker's item + + gEffectBattler = gBattlerAttacker; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_Pickpocket; // Includes sticky hold check to print separate string + effect = TRUE; + break; // Pickpocket activates on fastest mon, so exit loop. + } + } + } + gBattleScripting.moveendState++; + break; + case MOVEEND_DANCER: // Special case because it's so annoying + if (gBattleMoves[gCurrentMove].flags & FLAG_DANCE) + { + u8 battler, nextDancer = 0; + + if (!(gBattleStruct->lastMoveFailed & gBitTable[gBattlerAttacker] + || (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove + && gProtectStructs[gBattlerAttacker].usesBouncedMove))) + { // 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) + { + gBattleScripting.savedBattler = gBattlerTarget | 0x4; + gBattleScripting.savedBattler |= (gBattlerAttacker << 4); + gSpecialStatuses[gBattlerAttacker].dancerUsedMove = TRUE; + } + for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + { + if (GetBattlerAbility(battler) == ABILITY_DANCER && !gSpecialStatuses[battler].dancerUsedMove) + { + if (!nextDancer || (gBattleMons[battler].speed < gBattleMons[nextDancer & 0x3].speed)) + nextDancer = battler | 0x4; + } + } + if (nextDancer && AbilityBattleEffects(ABILITYEFFECT_MOVE_END_OTHER, nextDancer & 0x3, 0, 0, 0)) + effect = TRUE; + } + } + gBattleScripting.moveendState++; + break; + case MOVEEND_EMERGENCY_EXIT: // Special case, because moves hitting multiple opponents stop after switching out + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleResources->flags->flags[i] & RESOURCE_FLAG_EMERGENCY_EXIT) + { + gBattleResources->flags->flags[i] &= ~RESOURCE_FLAG_EMERGENCY_EXIT; + gBattlerTarget = gBattlerAbility = i; + BattleScriptPushCursor(); + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER || GetBattlerSide(i) == B_SIDE_PLAYER) + { + if (B_ABILITY_POP_UP) + gBattlescriptCurrInstr = BattleScript_EmergencyExit; + else + gBattlescriptCurrInstr = BattleScript_EmergencyExitNoPopUp; + } + else + { + if (B_ABILITY_POP_UP) + gBattlescriptCurrInstr = BattleScript_EmergencyExitWild; + else + gBattlescriptCurrInstr = BattleScript_EmergencyExitWildNoPopUp; + } + return; + } + } + gBattleScripting.moveendState++; + break; + case MOVEEND_CLEAR_BITS: // Clear/Set bits for things like using a move for all targets and all hits. + if (gSpecialStatuses[gBattlerAttacker].instructedChosenTarget) + *(gBattleStruct->moveTarget + gBattlerAttacker) = gSpecialStatuses[gBattlerAttacker].instructedChosenTarget & 0x3; + if (gSpecialStatuses[gBattlerAttacker].dancerOriginalTarget) + *(gBattleStruct->moveTarget + gBattlerAttacker) = gSpecialStatuses[gBattlerAttacker].dancerOriginalTarget & 0x3; + + #if B_RAMPAGE_CANCELLING >= GEN_5 + if (gBattleMoves[gCurrentMove].effect == EFFECT_RAMPAGE // If we're rampaging + && (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) // And it is unusable + && (gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) != STATUS2_LOCK_CONFUSE_TURN(1)) // And won't end this turn + CancelMultiTurnMoves(gBattlerAttacker); // Cancel it + #endif + + gBattleStruct->targetsDone[gBattlerAttacker] = 0; + gProtectStructs[gBattlerAttacker].usesBouncedMove = FALSE; + gProtectStructs[gBattlerAttacker].targetAffected = FALSE; + gBattleStruct->ateBoost[gBattlerAttacker] = 0; + gStatuses3[gBattlerAttacker] &= ~STATUS3_ME_FIRST; + gSpecialStatuses[gBattlerAttacker].gemBoost = FALSE; + gSpecialStatuses[gBattlerAttacker].damagedMons = 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; + gBattleScripting.moveendState++; + break; case MOVEEND_COUNT: break; } - if (arg1 == 1 && effect == FALSE) + if (endMode == 1 && effect == FALSE) gBattleScripting.moveendState = MOVEEND_COUNT; - if (arg1 == 2 && arg2 == gBattleScripting.moveendState) + if (endMode == 2 && endState == gBattleScripting.moveendState) gBattleScripting.moveendState = MOVEEND_COUNT; } while (gBattleScripting.moveendState != MOVEEND_COUNT && effect == FALSE); @@ -4449,99 +5729,18 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr += 3; } -static void Cmd_typecalc2(void) +static void Cmd_sethealblock(void) { - u8 flags = 0; - s32 i = 0; - u8 moveType = gBattleMoves[gCurrentMove].type; - - if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND) + if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) { - gLastUsedAbility = gBattleMons[gBattlerTarget].ability; - gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE); - gLastLandedMoves[gBattlerTarget] = 0; - gBattleCommunication[MISS_TYPE] = B_MSG_GROUND_MISS; - RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { - while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) - { - if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) - { - if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT) - { - break; - } - else - { - i += 3; - continue; - } - } - - if (TYPE_EFFECT_ATK_TYPE(i) == moveType) - { - // check type1 - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1) - { - if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT) - { - gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; - break; - } - if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE) - { - flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE; - } - if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) - { - flags |= MOVE_RESULT_SUPER_EFFECTIVE; - } - } - // check type2 - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2) - { - if (gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 - && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT) - { - gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; - break; - } - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 - && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 - && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE) - { - flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE; - } - if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 - && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 - && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) - { - flags |= MOVE_RESULT_SUPER_EFFECTIVE; - } - } - } - i += 3; - } + gStatuses3[gBattlerTarget] |= STATUS3_HEAL_BLOCK; + gDisableStructs[gBattlerTarget].healBlockTimer = 5; + gBattlescriptCurrInstr += 5; } - - if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD - && !(flags & MOVE_RESULT_NO_EFFECT) - && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2 - && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE))) - && gBattleMoves[gCurrentMove].power) - { - gLastUsedAbility = ABILITY_WONDER_GUARD; - gMoveResultFlags |= MOVE_RESULT_MISSED; - gLastLandedMoves[gBattlerTarget] = 0; - gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_DMG; - RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); - } - if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) - gProtectStructs[gBattlerAttacker].targetNotAffected = 1; - - gBattlescriptCurrInstr++; } static void Cmd_returnatktoball(void) @@ -4549,7 +5748,7 @@ static void Cmd_returnatktoball(void) gActiveBattler = gBattlerAttacker; if (!(gHitMarker & HITMARKER_FAINTED(gActiveBattler))) { - BtlController_EmitReturnMonToBall(0, 0); + BtlController_EmitReturnMonToBall(BUFFER_A, FALSE); MarkBattlerForControllerExec(gActiveBattler); } gBattlescriptCurrInstr++; @@ -4564,7 +5763,7 @@ static void Cmd_getswitchedmondata(void) gBattlerPartyIndexes[gActiveBattler] = *(gBattleStruct->monToSwitchIntoId + gActiveBattler); - BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]]); + BtlController_EmitGetMonData(BUFFER_A, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]]); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; @@ -4581,22 +5780,21 @@ static void Cmd_switchindataupdate(void) gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); oldData = gBattleMons[gActiveBattler]; - monData = (u8*)(&gBattleMons[gActiveBattler]); + monData = (u8 *)(&gBattleMons[gActiveBattler]); for (i = 0; i < sizeof(struct BattlePokemon); i++) - { - monData[i] = gBattleBufferB[gActiveBattler][4 + i]; - } + monData[i] = gBattleResources->bufferB[gActiveBattler][4 + i]; gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; + gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY; gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); // check knocked off item i = GetBattlerSide(gActiveBattler); if (gWishFutureKnock.knockedOffMons[i] & gBitTable[gBattlerPartyIndexes[gActiveBattler]]) { - gBattleMons[gActiveBattler].item = 0; + gBattleMons[gActiveBattler].item = ITEM_NONE; } if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) @@ -4610,9 +5808,9 @@ static void Cmd_switchindataupdate(void) SwitchInClearSetData(); - if (gBattleTypeFlags & BATTLE_TYPE_PALACE + if (gBattleTypeFlags & BATTLE_TYPE_PALACE && gBattleMons[gActiveBattler].maxHP / 2 >= gBattleMons[gActiveBattler].hp - && gBattleMons[gActiveBattler].hp != 0 + && gBattleMons[gActiveBattler].hp != 0 && !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)) { gBattleStruct->palaceFlags |= gBitTable[gActiveBattler]; @@ -4638,11 +5836,11 @@ static void Cmd_switchinanim(void) | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_FRONTIER))) - HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality); + HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality); gAbsentBattlerFlags &= ~(gBitTable[gActiveBattler]); - BtlController_EmitSwitchInAnim(0, gBattlerPartyIndexes[gActiveBattler], gBattlescriptCurrInstr[2]); + BtlController_EmitSwitchInAnim(BUFFER_A, gBattlerPartyIndexes[gActiveBattler], gBattlescriptCurrInstr[2]); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 3; @@ -4651,120 +5849,118 @@ static void Cmd_switchinanim(void) BattleArena_InitPoints(); } -static void Cmd_jumpifcantswitch(void) +bool32 CanBattlerSwitch(u32 battlerId) { - s32 i; - s32 lastMonId; + s32 i, lastMonId, battlerIn1, battlerIn2; + bool32 ret = FALSE; struct Pokemon *party; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(SWITCH_IGNORE_ESCAPE_PREVENTION)); - - if (!(gBattlescriptCurrInstr[1] & SWITCH_IGNORE_ESCAPE_PREVENTION) - && ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) - || (gStatuses3[gActiveBattler] & STATUS3_ROOTED))) + if (BATTLE_TWO_VS_ONE_OPPONENT && GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + party = gEnemyParty; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&party[i], MON_DATA_HP) != 0 + && GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE + && !GetMonData(&party[i], MON_DATA_IS_EGG) + && i != gBattlerPartyIndexes[battlerIn1] && i != gBattlerPartyIndexes[battlerIn2]) + break; + } + + ret = (i != PARTY_SIZE); } else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) party = gEnemyParty; else party = gPlayerParty; lastMonId = 0; - if (gActiveBattler & 2) - lastMonId = 3; + if (battlerId & 2) + lastMonId = MULTI_PARTY_SIZE; - for (i = lastMonId; i < lastMonId + 3; i++) + for (i = lastMonId; i < lastMonId + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) && GetMonData(&party[i], MON_DATA_HP) != 0 - && gBattlerPartyIndexes[gActiveBattler] != i) + && gBattlerPartyIndexes[battlerId] != i) break; } - if (i == lastMonId + 3) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); - else - gBattlescriptCurrInstr += 6; + ret = (i != lastMonId + MULTI_PARTY_SIZE); } else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (gBattleTypeFlags & BATTLE_TYPE_TOWER_LINK_MULTI) { - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { party = gPlayerParty; lastMonId = 0; - if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE) - lastMonId = 3; + if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(battlerId)) == TRUE) + lastMonId = MULTI_PARTY_SIZE; } else { party = gEnemyParty; - if (gActiveBattler == 1) + if (battlerId == 1) lastMonId = 0; else - lastMonId = 3; + lastMonId = MULTI_PARTY_SIZE; } } else { - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) party = gEnemyParty; else party = gPlayerParty; lastMonId = 0; - if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE) - lastMonId = 3; + if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(battlerId)) == TRUE) + lastMonId = MULTI_PARTY_SIZE; } - for (i = lastMonId; i < lastMonId + 3; i++) + for (i = lastMonId; i < lastMonId + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) && GetMonData(&party[i], MON_DATA_HP) != 0 - && gBattlerPartyIndexes[gActiveBattler] != i) + && gBattlerPartyIndexes[battlerId] != i) break; } - if (i == lastMonId + 3) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); - else - gBattlescriptCurrInstr += 6; + ret = (i != lastMonId + MULTI_PARTY_SIZE); } - else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { party = gEnemyParty; lastMonId = 0; - if (gActiveBattler == B_POSITION_OPPONENT_RIGHT) - lastMonId = 3; + if (battlerId == B_POSITION_OPPONENT_RIGHT) + lastMonId = PARTY_SIZE / 2; - for (i = lastMonId; i < lastMonId + 3; i++) + for (i = lastMonId; i < lastMonId + (PARTY_SIZE / 2); i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) && GetMonData(&party[i], MON_DATA_HP) != 0 - && gBattlerPartyIndexes[gActiveBattler] != i) + && gBattlerPartyIndexes[battlerId] != i) break; } - if (i == lastMonId + 3) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); - else - gBattlescriptCurrInstr += 6; + ret = (i != lastMonId + (PARTY_SIZE / 2)); } else { - u8 battlerIn1, battlerIn2; - - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); @@ -4777,6 +5973,7 @@ static void Cmd_jumpifcantswitch(void) } else { + // Check if attacker side has mon to switch into battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) @@ -4796,22 +5993,39 @@ static void Cmd_jumpifcantswitch(void) break; } - if (i == PARTY_SIZE) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); - else + ret = (i != PARTY_SIZE); + } + return ret; +} + +static void Cmd_jumpifcantswitch(void) +{ + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~SWITCH_IGNORE_ESCAPE_PREVENTION); + + if (!(gBattlescriptCurrInstr[1] & SWITCH_IGNORE_ESCAPE_PREVENTION) + && !CanBattlerEscape(gActiveBattler)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + } + else + { + if (CanBattlerSwitch(gActiveBattler)) gBattlescriptCurrInstr += 6; + else + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); } } -// Opens the party screen to choose a new Pokémon to send out -// slotId is the Pokémon to replace +// Opens the party screen to choose a new Pokémon to send out. +// slotId is the Pokémon to replace. +// Note that this is not used by the Switch action, only replacing fainted Pokémon or Baton Pass static void ChooseMonToSendOut(u8 slotId) { - *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; + *(gBattleStruct->battlerPartyIndexes + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; gBattleStruct->field_93 &= ~(gBitTable[gActiveBattler]); - BtlController_EmitChoosePokemon(0, PARTY_ACTION_SEND_OUT, slotId, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_SEND_OUT, slotId, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); } @@ -4826,9 +6040,9 @@ static void Cmd_openpartyscreen(void) flags = 0; jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2); - if (gBattlescriptCurrInstr[1] == BS_UNK_5) + if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_1) { - if ((gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE) + if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { @@ -4837,47 +6051,47 @@ static void Cmd_openpartyscreen(void) if (HasNoMonsToSwitch(gActiveBattler, PARTY_SIZE, PARTY_SIZE)) { gAbsentBattlerFlags |= gBitTable[gActiveBattler]; - gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); - BtlController_EmitLinkStandbyMsg(0, 2, FALSE); + gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(gActiveBattler); } - else if (!gSpecialStatuses[gActiveBattler].flag40) + else if (!gSpecialStatuses[gActiveBattler].faintedHasReplacement) { ChooseMonToSendOut(PARTY_SIZE); - gSpecialStatuses[gActiveBattler].flag40 = 1; + gSpecialStatuses[gActiveBattler].faintedHasReplacement = TRUE; } } else { - BtlController_EmitLinkStandbyMsg(0, 2, FALSE); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(gActiveBattler); } } } else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - u8 flag40_0, flag40_1, flag40_2, flag40_3; + bool8 hasReplacement_0, hasReplacement_1, hasReplacement_2, hasReplacement_3; hitmarkerFaintBits = gHitMarker >> 28; if (gBitTable[0] & hitmarkerFaintBits) { gActiveBattler = 0; - if (HasNoMonsToSwitch(0, PARTY_SIZE, PARTY_SIZE)) + if (HasNoMonsToSwitch(gActiveBattler, PARTY_SIZE, PARTY_SIZE)) { gAbsentBattlerFlags |= gBitTable[gActiveBattler]; - gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); - BtlController_EmitCantSwitch(0); + gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); + BtlController_EmitCantSwitch(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); } - else if (!gSpecialStatuses[gActiveBattler].flag40) + else if (!gSpecialStatuses[gActiveBattler].faintedHasReplacement) { ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[2]); - gSpecialStatuses[gActiveBattler].flag40 = 1; + gSpecialStatuses[gActiveBattler].faintedHasReplacement = TRUE; } else { - BtlController_EmitLinkStandbyMsg(0, 2, FALSE); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(gActiveBattler); flags |= 1; } @@ -4885,42 +6099,42 @@ static void Cmd_openpartyscreen(void) if (gBitTable[2] & hitmarkerFaintBits && !(gBitTable[0] & hitmarkerFaintBits)) { gActiveBattler = 2; - if (HasNoMonsToSwitch(2, PARTY_SIZE, PARTY_SIZE)) + if (HasNoMonsToSwitch(gActiveBattler, PARTY_SIZE, PARTY_SIZE)) { gAbsentBattlerFlags |= gBitTable[gActiveBattler]; - gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); - BtlController_EmitCantSwitch(0); + gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); + BtlController_EmitCantSwitch(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); } - else if (!gSpecialStatuses[gActiveBattler].flag40) + else if (!gSpecialStatuses[gActiveBattler].faintedHasReplacement) { ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[0]); - gSpecialStatuses[gActiveBattler].flag40 = 1; + gSpecialStatuses[gActiveBattler].faintedHasReplacement = TRUE; } else if (!(flags & 1)) { - BtlController_EmitLinkStandbyMsg(0, 2, FALSE); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(gActiveBattler); } } if (gBitTable[1] & hitmarkerFaintBits) { gActiveBattler = 1; - if (HasNoMonsToSwitch(1, PARTY_SIZE, PARTY_SIZE)) + if (HasNoMonsToSwitch(gActiveBattler, PARTY_SIZE, PARTY_SIZE)) { gAbsentBattlerFlags |= gBitTable[gActiveBattler]; - gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); - BtlController_EmitCantSwitch(0); + gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); + BtlController_EmitCantSwitch(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); } - else if (!gSpecialStatuses[gActiveBattler].flag40) + else if (!gSpecialStatuses[gActiveBattler].faintedHasReplacement) { ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[3]); - gSpecialStatuses[gActiveBattler].flag40 = 1; + gSpecialStatuses[gActiveBattler].faintedHasReplacement = TRUE; } else { - BtlController_EmitLinkStandbyMsg(0, 2, FALSE); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(gActiveBattler); flags |= 2; } @@ -4928,60 +6142,60 @@ static void Cmd_openpartyscreen(void) if (gBitTable[3] & hitmarkerFaintBits && !(gBitTable[1] & hitmarkerFaintBits)) { gActiveBattler = 3; - if (HasNoMonsToSwitch(3, PARTY_SIZE, PARTY_SIZE)) + if (HasNoMonsToSwitch(gActiveBattler, PARTY_SIZE, PARTY_SIZE)) { gAbsentBattlerFlags |= gBitTable[gActiveBattler]; - gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); - BtlController_EmitCantSwitch(0); + gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); + BtlController_EmitCantSwitch(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); } - else if (!gSpecialStatuses[gActiveBattler].flag40) + else if (!gSpecialStatuses[gActiveBattler].faintedHasReplacement) { ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[1]); - gSpecialStatuses[gActiveBattler].flag40 = 1; + gSpecialStatuses[gActiveBattler].faintedHasReplacement = TRUE; } else if (!(flags & 2)) { - BtlController_EmitLinkStandbyMsg(0, 2, FALSE); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(gActiveBattler); } } - flag40_0 = gSpecialStatuses[0].flag40; - if (!flag40_0) + hasReplacement_0 = gSpecialStatuses[0].faintedHasReplacement; + if (!hasReplacement_0) { - flag40_2 = gSpecialStatuses[2].flag40; - if (!flag40_2 && hitmarkerFaintBits != 0) + hasReplacement_2 = gSpecialStatuses[2].faintedHasReplacement; + if (!hasReplacement_2 && hitmarkerFaintBits != 0) { if (gAbsentBattlerFlags & gBitTable[0]) gActiveBattler = 2; else gActiveBattler = 0; - BtlController_EmitLinkStandbyMsg(0, 2, FALSE); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(gActiveBattler); } } - flag40_1 = gSpecialStatuses[1].flag40; - if (!flag40_1) + hasReplacement_1 = gSpecialStatuses[1].faintedHasReplacement; + if (!hasReplacement_1) { - flag40_3 = gSpecialStatuses[3].flag40; - if (!flag40_3 && hitmarkerFaintBits != 0) + hasReplacement_3 = gSpecialStatuses[3].faintedHasReplacement; + if (!hasReplacement_3 && hitmarkerFaintBits != 0) { if (gAbsentBattlerFlags & gBitTable[1]) gActiveBattler = 3; else gActiveBattler = 1; - BtlController_EmitLinkStandbyMsg(0, 2, FALSE); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(gActiveBattler); } } } gBattlescriptCurrInstr += 6; } - else if (gBattlescriptCurrInstr[1] == BS_UNK_6) + else if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_2) { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { @@ -4991,44 +6205,46 @@ static void Cmd_openpartyscreen(void) if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits) { gActiveBattler = 2; - if (HasNoMonsToSwitch(2, gBattleBufferB[0][1], PARTY_SIZE)) + if (HasNoMonsToSwitch(gActiveBattler, gBattleResources->bufferB[0][1], PARTY_SIZE)) { gAbsentBattlerFlags |= gBitTable[gActiveBattler]; - gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); - BtlController_EmitCantSwitch(0); + gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); + BtlController_EmitCantSwitch(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); } - else if (!gSpecialStatuses[gActiveBattler].flag40) + else if (!gSpecialStatuses[gActiveBattler].faintedHasReplacement) { ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[0]); - gSpecialStatuses[gActiveBattler].flag40 = 1; + gSpecialStatuses[gActiveBattler].faintedHasReplacement = TRUE; } } if (gBitTable[3] & hitmarkerFaintBits && hitmarkerFaintBits & gBitTable[1]) { gActiveBattler = 3; - if (HasNoMonsToSwitch(3, gBattleBufferB[1][1], PARTY_SIZE)) + if (HasNoMonsToSwitch(gActiveBattler, gBattleResources->bufferB[1][1], PARTY_SIZE)) { gAbsentBattlerFlags |= gBitTable[gActiveBattler]; - gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); - BtlController_EmitCantSwitch(0); + gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); + BtlController_EmitCantSwitch(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); } - else if (!gSpecialStatuses[gActiveBattler].flag40) + else if (!gSpecialStatuses[gActiveBattler].faintedHasReplacement) { ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[1]); - gSpecialStatuses[gActiveBattler].flag40 = 1; + gSpecialStatuses[gActiveBattler].faintedHasReplacement = TRUE; } } gBattlescriptCurrInstr += 6; } else { + // Not multi or double battle gBattlescriptCurrInstr += 6; } } else { + // Multi battle gBattlescriptCurrInstr += 6; } @@ -5049,8 +6265,8 @@ static void Cmd_openpartyscreen(void) else hitmarkerFaintBits = PARTY_ACTION_SEND_OUT; - battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(PARTY_SCREEN_OPTIONAL)); - if (gSpecialStatuses[battlerId].flag40) + battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~PARTY_SCREEN_OPTIONAL); + if (gSpecialStatuses[battlerId].faintedHasReplacement) { gBattlescriptCurrInstr += 6; } @@ -5058,22 +6274,22 @@ static void Cmd_openpartyscreen(void) { gActiveBattler = battlerId; gAbsentBattlerFlags |= gBitTable[gActiveBattler]; - gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); + gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); gBattlescriptCurrInstr = jumpPtr; } else { gActiveBattler = battlerId; - *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6; + *(gBattleStruct->battlerPartyIndexes + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; gBattleStruct->field_93 &= ~(gBitTable[gActiveBattler]); - BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(BUFFER_A, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 6; - if (GetBattlerPosition(gActiveBattler) == 0 && gBattleResults.playerSwitchesCounter < 0xFF) + if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT && gBattleResults.playerSwitchesCounter < 255) gBattleResults.playerSwitchesCounter++; if (gBattleTypeFlags & BATTLE_TYPE_MULTI) @@ -5082,7 +6298,7 @@ static void Cmd_openpartyscreen(void) { if (gActiveBattler != battlerId) { - BtlController_EmitLinkStandbyMsg(0, 2, FALSE); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(gActiveBattler); } } @@ -5093,7 +6309,7 @@ static void Cmd_openpartyscreen(void) if (gAbsentBattlerFlags & gBitTable[gActiveBattler]) gActiveBattler ^= BIT_FLANK; - BtlController_EmitLinkStandbyMsg(0, 2, FALSE); + BtlController_EmitLinkStandbyMsg(BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(gActiveBattler); } } @@ -5113,12 +6329,12 @@ static void Cmd_switchhandleorder(void) case 0: for (i = 0; i < gBattlersCount; i++) { - if (gBattleBufferB[i][0] == 0x22) + if (gBattleResources->bufferB[i][0] == CONTROLLER_CHOSENMONRETURNVALUE) { - *(gBattleStruct->monToSwitchIntoId + i) = gBattleBufferB[i][1]; + *(gBattleStruct->monToSwitchIntoId + i) = gBattleResources->bufferB[i][1]; if (!(gBattleStruct->field_93 & gBitTable[i])) { - RecordedBattle_SetBattlerAction(i, gBattleBufferB[i][1]); + RecordedBattle_SetBattlerAction(i, gBattleResources->bufferB[i][1]); gBattleStruct->field_93 |= gBitTable[i]; } } @@ -5131,23 +6347,23 @@ static void Cmd_switchhandleorder(void) case 2: if (!(gBattleStruct->field_93 & gBitTable[gActiveBattler])) { - RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][1]); + RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][1]); gBattleStruct->field_93 |= gBitTable[gActiveBattler]; } // fall through case 3: - gBattleCommunication[0] = gBattleBufferB[gActiveBattler][1]; - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleBufferB[gActiveBattler][1]; + gBattleCommunication[0] = gBattleResources->bufferB[gActiveBattler][1]; + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][1]; if (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI) { - *(gActiveBattler * 3 + (u8*)(gBattleStruct->field_60) + 0) &= 0xF; - *(gActiveBattler * 3 + (u8*)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); - *(gActiveBattler * 3 + (u8*)(gBattleStruct->field_60) + 1) = gBattleBufferB[gActiveBattler][3]; + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= 0xF; + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleResources->bufferB[gActiveBattler][2] & 0xF0); + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 1) = gBattleResources->bufferB[gActiveBattler][3]; - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->field_60) + 0) &= (0xF0); - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->field_60) + 2) = gBattleBufferB[gActiveBattler][3]; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= (0xF0); + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleResources->bufferB[gActiveBattler][2] & 0xF0) >> 4; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 2) = gBattleResources->bufferB[gActiveBattler][3]; } else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { @@ -5159,14 +6375,29 @@ static void Cmd_switchhandleorder(void) } PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species) - PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, gActiveBattler, gBattleBufferB[gActiveBattler][1]) - + PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, gActiveBattler, gBattleResources->bufferB[gActiveBattler][1]) break; } gBattlescriptCurrInstr += 3; } +static void SetDmgHazardsBattlescript(u8 battlerId, u8 multistringId) +{ + gBattleMons[battlerId].status2 &= ~STATUS2_DESTINY_BOND; + gHitMarker &= ~HITMARKER_DESTINYBOND; + gBattleScripting.battler = battlerId; + gBattleCommunication[MULTISTRING_CHOOSER] = multistringId; + + BattleScriptPushCursor(); + if (gBattlescriptCurrInstr[1] == BS_TARGET) + gBattlescriptCurrInstr = BattleScript_DmgHazardsOnTarget; + else if (gBattlescriptCurrInstr[1] == BS_ATTACKER) + gBattlescriptCurrInstr = BattleScript_DmgHazardsOnAttacker; + else + gBattlescriptCurrInstr = BattleScript_DmgHazardsOnFaintedBattler; +} + static void Cmd_switchineffects(void) { s32 i; @@ -5174,85 +6405,151 @@ static void Cmd_switchineffects(void) gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); UpdateSentPokesToOpponentValue(gActiveBattler); - gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); - gSpecialStatuses[gActiveBattler].flag40 = 0; + gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); + gSpecialStatuses[gActiveBattler].faintedHasReplacement = FALSE; - if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED) - && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES) - && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING) - && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE) + if (!IsBattlerAIControlled(gActiveBattler)) + gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; + + // Neutralizing Gas announces itself before hazards + if (gBattleMons[gActiveBattler].ability == ABILITY_NEUTRALIZING_GAS && gSpecialStatuses[gActiveBattler].announceNeutralizingGas == 0) { - u8 spikesDmg; - - gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_SPIKES_DAMAGED; - - gBattleMons[gActiveBattler].status2 &= ~(STATUS2_DESTINY_BOND); - gHitMarker &= ~(HITMARKER_DESTINYBOND); - - spikesDmg = (5 - gSideTimers[GetBattlerSide(gActiveBattler)].spikesAmount) * 2; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_NEUTRALIZING_GAS; + gSpecialStatuses[gActiveBattler].announceNeutralizingGas = TRUE; + gBattlerAbility = gActiveBattler; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SwitchInAbilityMsgRet; + } + else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED) + && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES) + && GetBattlerAbility(gActiveBattler) != ABILITY_MAGIC_GUARD + && IsBattlerAffectedByHazards(gActiveBattler, FALSE) + && IsBattlerGrounded(gActiveBattler)) + { + u8 spikesDmg = (5 - gSideTimers[GetBattlerSide(gActiveBattler)].spikesAmount) * 2; gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / (spikesDmg); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; + gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_SPIKES_DAMAGED; + SetDmgHazardsBattlescript(gActiveBattler, 0); + } + else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STEALTH_ROCK_DAMAGED) + && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STEALTH_ROCK) + && IsBattlerAffectedByHazards(gActiveBattler, FALSE) + && GetBattlerAbility(gActiveBattler) != ABILITY_MAGIC_GUARD) + { + gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_STEALTH_ROCK_DAMAGED; + gBattleMoveDamage = GetStealthHazardDamage(gBattleMoves[MOVE_STEALTH_ROCK].type, gActiveBattler); + + if (gBattleMoveDamage != 0) + SetDmgHazardsBattlescript(gActiveBattler, 1); + } + else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_TOXIC_SPIKES_DAMAGED) + && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_TOXIC_SPIKES) + && IsBattlerGrounded(gActiveBattler)) + { + gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_TOXIC_SPIKES_DAMAGED; + if (IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_POISON)) // Absorb the toxic spikes. + { + gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~SIDE_STATUS_TOXIC_SPIKES; + gSideTimers[GetBattlerSide(gActiveBattler)].toxicSpikesAmount = 0; + gBattleScripting.battler = gActiveBattler; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ToxicSpikesAbsorbed; + } + else if (IsBattlerAffectedByHazards(gActiveBattler, TRUE)) + { + if (!(gBattleMons[gActiveBattler].status1 & STATUS1_ANY) + && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL) + && GetBattlerAbility(gActiveBattler) != ABILITY_IMMUNITY + && !(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SAFEGUARD) + && !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) + { + if (gSideTimers[GetBattlerSide(gActiveBattler)].toxicSpikesAmount >= 2) + gBattleMons[gActiveBattler].status1 |= STATUS1_TOXIC_POISON; + else + gBattleMons[gActiveBattler].status1 |= STATUS1_POISON; + + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); + gBattleScripting.battler = gActiveBattler; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ToxicSpikesPoisoned; + } + } + } + else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STICKY_WEB_DAMAGED) + && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STICKY_WEB) + && IsBattlerAffectedByHazards(gActiveBattler, FALSE) + && IsBattlerGrounded(gActiveBattler)) + { + gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_STICKY_WEB_DAMAGED; + gBattleScripting.battler = gActiveBattler; + SET_STATCHANGER(STAT_SPEED, 1, TRUE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_StickyWebOnSwitchIn; + } + else if (gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP && gBattleStruct->zmove.healReplacement) + { + gBattleStruct->zmove.healReplacement = FALSE; + gBattleMoveDamage = -1 * (gBattleMons[gActiveBattler].maxHP); gBattleScripting.battler = gActiveBattler; BattleScriptPushCursor(); - - if (gBattlescriptCurrInstr[1] == BS_TARGET) - gBattlescriptCurrInstr = BattleScript_SpikesOnTarget; - else if (gBattlescriptCurrInstr[1] == BS_ATTACKER) - gBattlescriptCurrInstr = BattleScript_SpikesOnAttacker; - else - gBattlescriptCurrInstr = BattleScript_SpikesOnFaintedBattler; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_HP_TRAP; + gBattlescriptCurrInstr = BattleScript_HealReplacementZMove; + return; } else { // There is a hack here to ensure the truant counter will be 0 when the battler's next turn starts. // The truant counter is not updated in the case where a mon switches in after a lost judgement in the battle arena. - if (gBattleMons[gActiveBattler].ability == ABILITY_TRUANT && !gDisableStructs[gActiveBattler].truantSwitchInHack) + if (GetBattlerAbility(gActiveBattler) == ABILITY_TRUANT + && gCurrentActionFuncId != B_ACTION_USE_MOVE + && !gDisableStructs[gActiveBattler].truantSwitchInHack) gDisableStructs[gActiveBattler].truantCounter = 1; gDisableStructs[gActiveBattler].truantSwitchInHack = 0; - if (!AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0) - && !ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE)) + if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0) + || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE) + || AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE2, 0, 0, 0, 0) + || AbilityBattleEffects(ABILITYEFFECT_TRACE2, 0, 0, 0, 0) + || AbilityBattleEffects(ABILITYEFFECT_FORECAST, 0, 0, 0, 0)) + return; + + gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED | SIDE_STATUS_TOXIC_SPIKES_DAMAGED | SIDE_STATUS_STEALTH_ROCK_DAMAGED | SIDE_STATUS_STICKY_WEB_DAMAGED); + + for (i = 0; i < gBattlersCount; i++) { - gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED); + if (gBattlerByTurnOrder[i] == gActiveBattler) + gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER; - for (i = 0; i < gBattlersCount; i++) - { - if (gBattlerByTurnOrder[i] == gActiveBattler) - gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER; - } - - for (i = 0; i < gBattlersCount; i++) - { - u16* hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(i)]; - *hpOnSwitchout = gBattleMons[i].hp; - } - - if (gBattlescriptCurrInstr[1] == 5) - { - u32 hitmarkerFaintBits = gHitMarker >> 28; - - gBattlerFainted++; - while (1) - { - if (hitmarkerFaintBits & gBitTable[gBattlerFainted] && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted])) - break; - if (gBattlerFainted >= gBattlersCount) - break; - gBattlerFainted++; - } - } - gBattlescriptCurrInstr += 2; + gBattleStruct->hpOnSwitchout[GetBattlerSide(i)] = gBattleMons[i].hp; } + + if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_1) + { + u32 hitmarkerFaintBits = gHitMarker >> 28; + + gBattlerFainted++; + while (1) + { + if (hitmarkerFaintBits & gBitTable[gBattlerFainted] && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted])) + break; + if (gBattlerFainted >= gBattlersCount) + break; + gBattlerFainted++; + } + } + gBattlescriptCurrInstr += 2; } } static void Cmd_trainerslidein(void) { gActiveBattler = GetBattlerAtPosition(gBattlescriptCurrInstr[1]); - BtlController_EmitTrainerSlide(0); + BtlController_EmitTrainerSlide(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; @@ -5261,7 +6558,7 @@ static void Cmd_trainerslidein(void) static void Cmd_playse(void) { gActiveBattler = gBattlerAttacker; - BtlController_EmitPlaySE(0, T2_READ_16(gBattlescriptCurrInstr + 1)); + BtlController_EmitPlaySE(BUFFER_A, T2_READ_16(gBattlescriptCurrInstr + 1)); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 3; @@ -5270,7 +6567,7 @@ static void Cmd_playse(void) static void Cmd_fanfare(void) { gActiveBattler = gBattlerAttacker; - BtlController_EmitPlayFanfareOrBGM(0, T2_READ_16(gBattlescriptCurrInstr + 1), FALSE); + BtlController_EmitPlayFanfareOrBGM(BUFFER_A, T2_READ_16(gBattlescriptCurrInstr + 1), FALSE); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 3; @@ -5279,7 +6576,7 @@ static void Cmd_fanfare(void) static void Cmd_playfaintcry(void) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - BtlController_EmitFaintingCry(0); + BtlController_EmitFaintingCry(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; @@ -5288,7 +6585,7 @@ static void Cmd_playfaintcry(void) static void Cmd_endlinkbattle(void) { gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - BtlController_EmitEndLinkBattle(0, gBattleOutcome); + BtlController_EmitEndLinkBattle(BUFFER_A, gBattleOutcome); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 1; @@ -5297,7 +6594,7 @@ static void Cmd_endlinkbattle(void) static void Cmd_returntoball(void) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - BtlController_EmitReturnMonToBall(0, 1); + BtlController_EmitReturnMonToBall(BUFFER_A, TRUE); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; @@ -5305,16 +6602,16 @@ static void Cmd_returntoball(void) static void Cmd_handlelearnnewmove(void) { - const u8 *jumpPtr1 = T1_READ_PTR(gBattlescriptCurrInstr + 1); - const u8 *jumpPtr2 = T1_READ_PTR(gBattlescriptCurrInstr + 5); + const u8 *learnedMovePtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *nothingToLearnPtr = T1_READ_PTR(gBattlescriptCurrInstr + 5); u16 learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]); while (learnMove == MON_ALREADY_KNOWS_MOVE) learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], FALSE); - if (learnMove == 0) + if (learnMove == MOVE_NONE) { - gBattlescriptCurrInstr = jumpPtr2; + gBattlescriptCurrInstr = nothingToLearnPtr; } else if (learnMove == MON_HAS_MAX_MOVES) { @@ -5339,7 +6636,7 @@ static void Cmd_handlelearnnewmove(void) } } - gBattlescriptCurrInstr = jumpPtr1; + gBattlescriptCurrInstr = learnedMovePtr; } } @@ -5350,8 +6647,8 @@ static void Cmd_yesnoboxlearnmove(void) switch (gBattleScripting.learnMoveState) { case 0: - HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); - BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC); + HandleBattleWindow(YESNOBOX_X_Y, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); gBattleScripting.learnMoveState++; gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); @@ -5376,8 +6673,8 @@ static void Cmd_yesnoboxlearnmove(void) PlaySE(SE_SELECT); if (gBattleCommunication[1] == 0) { - HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); gBattleScripting.learnMoveState++; } else @@ -5430,17 +6727,14 @@ static void Cmd_yesnoboxlearnmove(void) RemoveMonPPBonus(&gPlayerParty[gBattleStruct->expGetterMonId], movePosition); SetMonMoveSlot(&gPlayerParty[gBattleStruct->expGetterMonId], gMoveToLearn, movePosition); - if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId - && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED) - && !(gDisableStructs[0].mimickedMoves & gBitTable[movePosition])) + if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId && MOVE_IS_PERMANENT(0, movePosition)) { RemoveBattleMonPPBonus(&gBattleMons[0], movePosition); SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, movePosition); } if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId - && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED) - && !(gDisableStructs[2].mimickedMoves & gBitTable[movePosition])) + && MOVE_IS_PERMANENT(2, movePosition)) { RemoveBattleMonPPBonus(&gBattleMons[2], movePosition); SetBattleMonMoveSlot(&gBattleMons[2], gMoveToLearn, movePosition); @@ -5450,7 +6744,7 @@ static void Cmd_yesnoboxlearnmove(void) } break; case 5: - HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); gBattlescriptCurrInstr += 5; break; case 6: @@ -5467,8 +6761,8 @@ static void Cmd_yesnoboxstoplearningmove(void) switch (gBattleScripting.learnMoveState) { case 0: - HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); - BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC); + HandleBattleWindow(YESNOBOX_X_Y, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); gBattleScripting.learnMoveState++; gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); @@ -5497,13 +6791,13 @@ static void Cmd_yesnoboxstoplearningmove(void) else gBattlescriptCurrInstr += 5; - HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); - HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); } break; } @@ -5517,9 +6811,9 @@ static void Cmd_hitanimation(void) { gBattlescriptCurrInstr += 2; } - else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE) || gDisableStructs[gActiveBattler].substituteHP == 0) + else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove)) || gDisableStructs[gActiveBattler].substituteHP == 0) { - BtlController_EmitHitAnimation(0); + BtlController_EmitHitAnimation(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; } @@ -5588,24 +6882,50 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) static void Cmd_getmoneyreward(void) { - u32 moneyReward = GetTrainerMoneyToGive(gTrainerBattleOpponent_A); - if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - moneyReward += GetTrainerMoneyToGive(gTrainerBattleOpponent_B); + u32 money; + u8 sPartyLevel = 1; - AddMoney(&gSaveBlock1Ptr->money, moneyReward); - PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, moneyReward); + if (gBattleOutcome == B_OUTCOME_WON) + { + money = GetTrainerMoneyToGive(gTrainerBattleOpponent_A); + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + money += GetTrainerMoneyToGive(gTrainerBattleOpponent_B); + AddMoney(&gSaveBlock1Ptr->money, money); + } + else + { + s32 i, count; + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_NONE + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) > sPartyLevel) + sPartyLevel = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + } + } + for (count = 0, i = 0; i < ARRAY_COUNT(sBadgeFlags); i++) + { + if (FlagGet(sBadgeFlags[i]) == TRUE) + ++count; + } + money = sWhiteOutBadgeMoney[count] * sPartyLevel; + RemoveMoney(&gSaveBlock1Ptr->money, money); + } + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, money); gBattlescriptCurrInstr++; } -static void Cmd_unknown_5E(void) +// Command is never used +static void Cmd_updatebattlermoves(void) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); switch (gBattleCommunication[0]) { case 0: - BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, 0); + BtlController_EmitGetMonData(BUFFER_A, REQUEST_ALL_BATTLE, 0); MarkBattlerForControllerExec(gActiveBattler); gBattleCommunication[0]++; break; @@ -5613,7 +6933,7 @@ static void Cmd_unknown_5E(void) if (gBattleControllerExecFlags == 0) { s32 i; - struct BattlePokemon *bufferPoke = (struct BattlePokemon*) &gBattleBufferB[gActiveBattler][4]; + struct BattlePokemon *bufferPoke = (struct BattlePokemon *) &gBattleResources->bufferB[gActiveBattler][4]; for (i = 0; i < MAX_MON_MOVES; i++) { gBattleMons[gActiveBattler].moves[i] = bufferPoke->moves[i]; @@ -5632,7 +6952,7 @@ static void Cmd_swapattackerwithtarget(void) gBattlerTarget = gActiveBattler; if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET) - gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET); + gHitMarker &= ~HITMARKER_SWAP_ATTACKER_TARGET; else gHitMarker |= HITMARKER_SWAP_ATTACKER_TARGET; @@ -5678,7 +6998,7 @@ static void Cmd_drawpartystatussummary(void) } } - BtlController_EmitDrawPartyStatusSummary(0, hpStatuses, 1); + BtlController_EmitDrawPartyStatusSummary(BUFFER_A, hpStatuses, 1); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; @@ -5687,7 +7007,7 @@ static void Cmd_drawpartystatussummary(void) static void Cmd_hidepartystatussummary(void) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - BtlController_EmitHidePartyStatusSummary(0); + BtlController_EmitHidePartyStatusSummary(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; @@ -5712,7 +7032,7 @@ static void Cmd_statusanimation(void) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) { - BtlController_EmitStatusAnimation(0, FALSE, gBattleMons[gActiveBattler].status1); + BtlController_EmitStatusAnimation(BUFFER_A, FALSE, gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); } gBattlescriptCurrInstr += 2; @@ -5731,7 +7051,7 @@ static void Cmd_status2animation(void) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) { - BtlController_EmitStatusAnimation(0, TRUE, gBattleMons[gActiveBattler].status2 & wantedToAnimate); + BtlController_EmitStatusAnimation(BUFFER_A, TRUE, gBattleMons[gActiveBattler].status2 & wantedToAnimate); MarkBattlerForControllerExec(gActiveBattler); } gBattlescriptCurrInstr += 6; @@ -5750,7 +7070,7 @@ static void Cmd_chosenstatusanimation(void) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) { - BtlController_EmitStatusAnimation(0, gBattlescriptCurrInstr[2], wantedStatus); + BtlController_EmitStatusAnimation(BUFFER_A, gBattlescriptCurrInstr[2], wantedStatus); MarkBattlerForControllerExec(gActiveBattler); } gBattlescriptCurrInstr += 7; @@ -5762,8 +7082,8 @@ static void Cmd_yesnobox(void) switch (gBattleCommunication[0]) { case 0: - HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); - BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC); + HandleBattleWindow(YESNOBOX_X_Y, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); gBattleCommunication[0]++; gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); @@ -5787,13 +7107,13 @@ static void Cmd_yesnobox(void) { gBattleCommunication[CURSOR_POSITION] = 1; PlaySE(SE_SELECT); - HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); gBattlescriptCurrInstr++; } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); gBattlescriptCurrInstr++; } break; @@ -5810,65 +7130,65 @@ static void Cmd_cancelallactions(void) gBattlescriptCurrInstr++; } -static void Cmd_adjustsetdamage(void) // The same as adjustnormaldamage, except there's no random damage multiplier. +static void Cmd_setgravity(void) { - u8 holdEffect, param; - - if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY) + if (gFieldStatuses & STATUS_FIELD_GRAVITY) { - holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect; - param = gEnigmaBerries[gBattlerTarget].holdEffectParam; + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { - holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item); - param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item); + gFieldStatuses |= STATUS_FIELD_GRAVITY; + gFieldTimers.gravityTimer = 5; + gBattlescriptCurrInstr += 5; } +} - gPotentialItemEffectBattler = gBattlerTarget; - - if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param) +static bool32 TryCheekPouch(u32 battlerId, u32 itemId) +{ + if (ItemId_GetPocket(itemId) == POCKET_BERRIES + && GetBattlerAbility(battlerId) == ABILITY_CHEEK_POUCH + && !(gStatuses3[battlerId] & STATUS3_HEAL_BLOCK) + && gBattleStruct->ateBerry[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]] + && !BATTLER_MAX_HP(battlerId)) { - RecordItemEffectBattle(gBattlerTarget, holdEffect); - gSpecialStatuses[gBattlerTarget].focusBanded = 1; + gBattleMoveDamage = gBattleMons[battlerId].maxHP / 3; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + gBattlerAbility = battlerId; + BattleScriptPush(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = BattleScript_CheekPouchActivates; + return TRUE; } - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) - && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded) - && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) - { - gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; - if (gProtectStructs[gBattlerTarget].endured) - { - gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; - } - else if (gSpecialStatuses[gBattlerTarget].focusBanded) - { - gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; - gLastUsedItem = gBattleMons[gBattlerTarget].item; - } - } - gBattlescriptCurrInstr++; + return FALSE; } static void Cmd_removeitem(void) { - u16* usedHeldItem; + u16 itemId = 0; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + itemId = gBattleMons[gActiveBattler].item; - usedHeldItem = &gBattleStruct->usedHeldItems[gActiveBattler]; - *usedHeldItem = gBattleMons[gActiveBattler].item; - gBattleMons[gActiveBattler].item = 0; + // Popped Air Balloon cannot be restored by any means. + if (GetBattlerHoldEffect(gActiveBattler, TRUE) != HOLD_EFFECT_AIR_BALLOON) + gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gActiveBattler]][GetBattlerSide(gActiveBattler)] = itemId; // Remember if switched out - BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBattler].item); + gBattleMons[gActiveBattler].item = ITEM_NONE; + CheckSetUnburden(gActiveBattler); + + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].item), &gBattleMons[gActiveBattler].item); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + ClearBattlerItemEffectHistory(gActiveBattler); + if (!TryCheekPouch(gActiveBattler, itemId)) + gBattlescriptCurrInstr += 2; } static void Cmd_atknameinbuff1(void) { - PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]) + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]); gBattlescriptCurrInstr++; } @@ -5877,6 +7197,9 @@ static void Cmd_drawlvlupbox(void) { if (gBattleScripting.drawlvlupboxState == 0) { + // If the Pokémon getting exp is not in-battle then + // slide out a banner with their name and icon on it. + // Otherwise skip ahead. if (IsMonGettingExpSentOut()) gBattleScripting.drawlvlupboxState = 3; else @@ -5886,34 +7209,38 @@ static void Cmd_drawlvlupbox(void) switch (gBattleScripting.drawlvlupboxState) { case 1: - gBattle_BG2_Y = 0x60; + // Start level up banner + gBattle_BG2_Y = 96; SetBgAttribute(2, BG_ATTR_PRIORITY, 0); ShowBg(2); - sub_804F17C(); + InitLevelUpBanner(); gBattleScripting.drawlvlupboxState = 2; break; case 2: - if (!sub_804F1CC()) + if (!SlideInLevelUpBanner()) gBattleScripting.drawlvlupboxState = 3; break; case 3: + // Init level up box gBattle_BG1_X = 0; - gBattle_BG1_Y = 0x100; + gBattle_BG1_Y = 256; SetBgAttribute(0, BG_ATTR_PRIORITY, 1); SetBgAttribute(1, BG_ATTR_PRIORITY, 0); ShowBg(0); ShowBg(1); - HandleBattleWindow(0x12, 7, 0x1D, 0x13, WINDOW_x80); + HandleBattleWindow(18, 7, 29, 19, WINDOW_BG1); gBattleScripting.drawlvlupboxState = 4; break; case 4: + // Draw page 1 of level up box DrawLevelUpWindow1(); - PutWindowTilemap(13); - CopyWindowToVram(13, 3); + PutWindowTilemap(B_WIN_LEVEL_UP_BOX); + CopyWindowToVram(B_WIN_LEVEL_UP_BOX, COPYWIN_FULL); gBattleScripting.drawlvlupboxState++; break; case 5: case 7: + // Wait for draw after each page if (!IsDma3ManagerBusyWithBgCopy()) { gBattle_BG1_Y = 0; @@ -5923,28 +7250,30 @@ static void Cmd_drawlvlupbox(void) case 6: if (gMain.newKeys != 0) { + // Draw page 2 of level up box PlaySE(SE_SELECT); DrawLevelUpWindow2(); - CopyWindowToVram(13, 2); + CopyWindowToVram(B_WIN_LEVEL_UP_BOX, COPYWIN_GFX); gBattleScripting.drawlvlupboxState++; } break; case 8: if (gMain.newKeys != 0) { + // Close level up box PlaySE(SE_SELECT); - HandleBattleWindow(0x12, 7, 0x1D, 0x13, WINDOW_x80 | WINDOW_CLEAR); + HandleBattleWindow(18, 7, 29, 19, WINDOW_BG1 | WINDOW_CLEAR); gBattleScripting.drawlvlupboxState++; } break; case 9: - if (!sub_804F344()) + if (!SlideOutLevelUpBanner()) { - ClearWindowTilemap(14); - CopyWindowToVram(14, 1); + ClearWindowTilemap(B_WIN_LEVEL_UP_BANNER); + CopyWindowToVram(B_WIN_LEVEL_UP_BANNER, COPYWIN_MAP); - ClearWindowTilemap(13); - CopyWindowToVram(13, 1); + ClearWindowTilemap(B_WIN_LEVEL_UP_BOX); + CopyWindowToVram(B_WIN_LEVEL_UP_BOX, COPYWIN_MAP); SetBgAttribute(2, BG_ATTR_PRIORITY, 2); ShowBg(2); @@ -5970,7 +7299,7 @@ static void DrawLevelUpWindow1(void) u16 currStats[NUM_STATS]; GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats); - DrawLevelUpWindowPg1(0xD, gBattleResources->beforeLvlUp->stats, currStats, TEXT_DYNAMIC_COLOR_5, TEXT_DYNAMIC_COLOR_4, TEXT_DYNAMIC_COLOR_6); + DrawLevelUpWindowPg1(B_WIN_LEVEL_UP_BOX, gBattleResources->beforeLvlUp->stats, currStats, TEXT_DYNAMIC_COLOR_5, TEXT_DYNAMIC_COLOR_4, TEXT_DYNAMIC_COLOR_6); } static void DrawLevelUpWindow2(void) @@ -5978,41 +7307,41 @@ static void DrawLevelUpWindow2(void) u16 currStats[NUM_STATS]; GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats); - DrawLevelUpWindowPg2(0xD, currStats, TEXT_DYNAMIC_COLOR_5, TEXT_DYNAMIC_COLOR_4, TEXT_DYNAMIC_COLOR_6); + DrawLevelUpWindowPg2(B_WIN_LEVEL_UP_BOX, currStats, TEXT_DYNAMIC_COLOR_5, TEXT_DYNAMIC_COLOR_4, TEXT_DYNAMIC_COLOR_6); } -static void sub_804F17C(void) +static void InitLevelUpBanner(void) { gBattle_BG2_Y = 0; - gBattle_BG2_X = 0x1A0; + gBattle_BG2_X = LEVEL_UP_BANNER_START; - LoadPalette(sUnknown_0831C2C8, 0x60, 0x20); - CopyToWindowPixelBuffer(14, sUnknown_0831C2E8, 0, 0); - PutWindowTilemap(14); - CopyWindowToVram(14, 3); + LoadPalette(sLevelUpBanner_Pal, 0x60, 0x20); + CopyToWindowPixelBuffer(B_WIN_LEVEL_UP_BANNER, sLevelUpBanner_Gfx, 0, 0); + PutWindowTilemap(B_WIN_LEVEL_UP_BANNER); + CopyWindowToVram(B_WIN_LEVEL_UP_BANNER, COPYWIN_FULL); - PutMonIconOnLvlUpBox(); + PutMonIconOnLvlUpBanner(); } -static bool8 sub_804F1CC(void) +static bool8 SlideInLevelUpBanner(void) { if (IsDma3ManagerBusyWithBgCopy()) return TRUE; - if (gBattle_BG2_X == 0x200) + if (gBattle_BG2_X == LEVEL_UP_BANNER_END) return FALSE; - if (gBattle_BG2_X == 0x1A0) - PutLevelAndGenderOnLvlUpBox(); + if (gBattle_BG2_X == LEVEL_UP_BANNER_START) + DrawLevelUpBannerText(); gBattle_BG2_X += 8; - if (gBattle_BG2_X >= 0x200) - gBattle_BG2_X = 0x200; + if (gBattle_BG2_X >= LEVEL_UP_BANNER_END) + gBattle_BG2_X = LEVEL_UP_BANNER_END; - return (gBattle_BG2_X != 0x200); + return (gBattle_BG2_X != LEVEL_UP_BANNER_END); } -static void PutLevelAndGenderOnLvlUpBox(void) +static void DrawLevelUpBannerText(void) { u16 monLevel; u8 monGender; @@ -6025,8 +7354,8 @@ static void PutLevelAndGenderOnLvlUpBox(void) GetMonNickname(&gPlayerParty[gBattleStruct->expGetterMonId], gStringVar4); printerTemplate.currentChar = gStringVar4; - printerTemplate.windowId = 14; - printerTemplate.fontId = 0; + printerTemplate.windowId = B_WIN_LEVEL_UP_BANNER; + printerTemplate.fontId = FONT_SMALL; printerTemplate.x = 32; printerTemplate.y = 0; printerTemplate.currentX = 32; @@ -6038,7 +7367,7 @@ static void PutLevelAndGenderOnLvlUpBox(void) printerTemplate.bgColor = TEXT_COLOR_TRANSPARENT; printerTemplate.shadowColor = TEXT_COLOR_DARK_GRAY; - AddTextPrinter(&printerTemplate, 0xFF, NULL); + AddTextPrinter(&printerTemplate, TEXT_SKIP_DRAW, NULL); txtPtr = gStringVar4; *(txtPtr)++ = CHAR_EXTRA_SYMBOL; @@ -6047,20 +7376,20 @@ static void PutLevelAndGenderOnLvlUpBox(void) var = (u32)(txtPtr); txtPtr = ConvertIntToDecimalStringN(txtPtr, monLevel, STR_CONV_MODE_LEFT_ALIGN, 3); var = (u32)(txtPtr) - var; - txtPtr = StringFill(txtPtr, CHAR_GENDERLESS, 4 - var); + txtPtr = StringFill(txtPtr, CHAR_SPACER, 4 - var); if (monGender != MON_GENDERLESS) { if (monGender == MON_MALE) { - txtPtr = WriteColorChangeControlCode(txtPtr, 0, 0xC); - txtPtr = WriteColorChangeControlCode(txtPtr, 1, 0xD); + txtPtr = WriteColorChangeControlCode(txtPtr, 0, TEXT_DYNAMIC_COLOR_3); + txtPtr = WriteColorChangeControlCode(txtPtr, 1, TEXT_DYNAMIC_COLOR_4); *(txtPtr++) = CHAR_MALE; } else { - txtPtr = WriteColorChangeControlCode(txtPtr, 0, 0xE); - txtPtr = WriteColorChangeControlCode(txtPtr, 1, 0xF); + txtPtr = WriteColorChangeControlCode(txtPtr, 0, TEXT_DYNAMIC_COLOR_5); + txtPtr = WriteColorChangeControlCode(txtPtr, 1, TEXT_DYNAMIC_COLOR_6); *(txtPtr++) = CHAR_FEMALE; } *(txtPtr++) = EOS; @@ -6068,57 +7397,57 @@ static void PutLevelAndGenderOnLvlUpBox(void) printerTemplate.y = 10; printerTemplate.currentY = 10; - AddTextPrinter(&printerTemplate, 0xFF, NULL); + AddTextPrinter(&printerTemplate, TEXT_SKIP_DRAW, NULL); - CopyWindowToVram(14, 2); + CopyWindowToVram(B_WIN_LEVEL_UP_BANNER, COPYWIN_GFX); } -static bool8 sub_804F344(void) +static bool8 SlideOutLevelUpBanner(void) { - if (gBattle_BG2_X == 0x1A0) + if (gBattle_BG2_X == LEVEL_UP_BANNER_START) return FALSE; - if (gBattle_BG2_X - 16 < 0x1A0) - gBattle_BG2_X = 0x1A0; + if (gBattle_BG2_X - 16 < LEVEL_UP_BANNER_START) + gBattle_BG2_X = LEVEL_UP_BANNER_START; else gBattle_BG2_X -= 16; - return (gBattle_BG2_X != 0x1A0); + return (gBattle_BG2_X != LEVEL_UP_BANNER_START); } -#define sDestroy data[0] -#define sSavedLvlUpBoxXPosition data[1] +#define sDestroy data[0] +#define sXOffset data[1] -static void PutMonIconOnLvlUpBox(void) +static void PutMonIconOnLvlUpBanner(void) { u8 spriteId; - const u16* iconPal; + const u16 *iconPal; struct SpriteSheet iconSheet; struct SpritePalette iconPalSheet; u16 species = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPECIES); u32 personality = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_PERSONALITY); - const u8* iconPtr = GetMonIconPtr(species, personality); + const u8 *iconPtr = GetMonIconPtr(species, personality); iconSheet.data = iconPtr; iconSheet.size = 0x200; - iconSheet.tag = MON_ICON_LVLUP_BOX_TAG; + iconSheet.tag = TAG_LVLUP_BANNER_MON_ICON; iconPal = GetValidMonIconPalettePtr(species); iconPalSheet.data = iconPal; - iconPalSheet.tag = MON_ICON_LVLUP_BOX_TAG; + iconPalSheet.tag = TAG_LVLUP_BANNER_MON_ICON; LoadSpriteSheet(&iconSheet); LoadSpritePalette(&iconPalSheet); - spriteId = CreateSprite(&sSpriteTemplate_MonIconOnLvlUpBox, 256, 10, 0); + spriteId = CreateSprite(&sSpriteTemplate_MonIconOnLvlUpBanner, 256, 10, 0); gSprites[spriteId].sDestroy = FALSE; - gSprites[spriteId].sSavedLvlUpBoxXPosition = gBattle_BG2_X; + gSprites[spriteId].sXOffset = gBattle_BG2_X; } -static void SpriteCB_MonIconOnLvlUpBox(struct Sprite* sprite) +static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite *sprite) { - sprite->x2 = sprite->sSavedLvlUpBoxXPosition - gBattle_BG2_X; + sprite->x2 = sprite->sXOffset - gBattle_BG2_X; if (sprite->x2 != 0) { @@ -6127,13 +7456,13 @@ static void SpriteCB_MonIconOnLvlUpBox(struct Sprite* sprite) else if (sprite->sDestroy) { DestroySprite(sprite); - FreeSpriteTilesByTag(MON_ICON_LVLUP_BOX_TAG); - FreeSpritePaletteByTag(MON_ICON_LVLUP_BOX_TAG); + FreeSpriteTilesByTag(TAG_LVLUP_BANNER_MON_ICON); + FreeSpritePaletteByTag(TAG_LVLUP_BANNER_MON_ICON); } } #undef sDestroy -#undef sSavedLvlUpBoxXPosition +#undef sXOffset static bool32 IsMonGettingExpSentOut(void) { @@ -6159,24 +7488,21 @@ static void Cmd_setatktoplayer0(void) static void Cmd_makevisible(void) { + if (gBattleControllerExecFlags) + return; + gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - BtlController_EmitSpriteInvisibility(0, FALSE); + BtlController_EmitSpriteInvisibility(BUFFER_A, FALSE); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; } -static void Cmd_recordlastability(void) +static void Cmd_recordability(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - RecordAbilityBattle(gActiveBattler, gLastUsedAbility); - -#ifdef BUGFIX - // This command occupies two bytes (one for the command id, and one for the battler id parameter). + u8 battler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + RecordAbilityBattle(battler, gBattleMons[battler].ability); gBattlescriptCurrInstr += 2; -#else - gBattlescriptCurrInstr += 1; -#endif } void BufferMoveToLearnIntoBattleTextBuff2(void) @@ -6200,19 +7526,19 @@ static void Cmd_jumpifplayerran(void) static void Cmd_hpthresholds(void) { - u8 opposingBank; + u8 opposingBattler; s32 result; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - opposingBank = gActiveBattler ^ BIT_SIDE; + opposingBattler = gActiveBattler ^ BIT_SIDE; - result = gBattleMons[opposingBank].hp * 100 / gBattleMons[opposingBank].maxHP; + result = gBattleMons[opposingBattler].hp * 100 / gBattleMons[opposingBattler].maxHP; if (result == 0) result = 1; - if (result > 69 || !gBattleMons[opposingBank].hp) + if (result > 69 || gBattleMons[opposingBattler].hp == 0) gBattleStruct->hpScale = 0; else if (result > 39) gBattleStruct->hpScale = 1; @@ -6227,18 +7553,18 @@ static void Cmd_hpthresholds(void) static void Cmd_hpthresholds2(void) { - u8 opposingBank; + u8 opposingBattler; s32 result; u8 hpSwitchout; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - opposingBank = gActiveBattler ^ BIT_SIDE; - hpSwitchout = *(gBattleStruct->hpOnSwitchout + GetBattlerSide(opposingBank)); - result = (hpSwitchout - gBattleMons[opposingBank].hp) * 100 / hpSwitchout; + opposingBattler = gActiveBattler ^ BIT_SIDE; + hpSwitchout = *(gBattleStruct->hpOnSwitchout + GetBattlerSide(opposingBattler)); + result = (hpSwitchout - gBattleMons[opposingBattler].hp) * 100 / hpSwitchout; - if (gBattleMons[opposingBank].hp >= hpSwitchout) + if (gBattleMons[opposingBattler].hp >= hpSwitchout) gBattleStruct->hpScale = 0; else if (result <= 29) gBattleStruct->hpScale = 1; @@ -6255,25 +7581,531 @@ static void Cmd_useitemonopponent(void) { gBattlerInMenuId = gBattlerAttacker; PokemonUseItemEffects(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]], gLastUsedItem, gBattlerPartyIndexes[gBattlerAttacker], 0, TRUE); - gBattlescriptCurrInstr += 1; + gBattlescriptCurrInstr++; +} + +static bool32 HasAttackerFaintedTarget(void) +{ + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMoves[gCurrentMove].power != 0 + && (gLastHitBy[gBattlerTarget] == 0xFF || gLastHitBy[gBattlerTarget] == gBattlerAttacker) + && gBattleStruct->moveTarget[gBattlerAttacker] == gBattlerTarget + && gBattlerTarget != gBattlerAttacker + && gCurrentTurnActionNumber == GetBattlerTurnOrderNum(gBattlerAttacker) + && (gChosenMove == gChosenMoveByBattler[gBattlerAttacker] || gChosenMove == gBattleMons[gBattlerAttacker].moves[gChosenMovePos])) + return TRUE; + else + return FALSE; +} + +static void HandleTerrainMove(u16 move) +{ + u32 statusFlag = 0; + u8 *timer = NULL; + + switch (gBattleMoves[move].effect) + { + case EFFECT_MISTY_TERRAIN: + statusFlag = STATUS_FIELD_MISTY_TERRAIN, timer = &gFieldTimers.terrainTimer; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + break; + case EFFECT_GRASSY_TERRAIN: + statusFlag = STATUS_FIELD_GRASSY_TERRAIN, timer = &gFieldTimers.terrainTimer; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + break; + case EFFECT_ELECTRIC_TERRAIN: + statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN, timer = &gFieldTimers.terrainTimer; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + break; + case EFFECT_PSYCHIC_TERRAIN: + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN, timer = &gFieldTimers.terrainTimer; + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + break; + case EFFECT_DAMAGE_SET_TERRAIN: + switch (gBattleMoves[move].argument) + { + case 0: //genesis supernova + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN, timer = &gFieldTimers.terrainTimer; + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + break; + case 1: //splintered stormshards + if (!(gFieldStatuses & (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN))) + { + //no terrain to remove -> jump to battle script pointer + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + // remove all terrain + gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN); + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr += 7; + } + return; + default: + break; + } + break; + } + + if (gFieldStatuses & statusFlag || statusFlag == 0) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; + gFieldStatuses |= statusFlag; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) + *timer = 8; + else + *timer = 5; + gBattlescriptCurrInstr += 7; + } +} + +bool32 CanPoisonType(u8 battlerAttacker, u8 battlerTarget) +{ + return ((GetBattlerAbility(battlerAttacker) == ABILITY_CORROSION && gBattleMoves[gCurrentMove].split == SPLIT_STATUS) + || !(IS_BATTLER_OF_TYPE(battlerTarget, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerTarget, TYPE_STEEL))); +} + +bool32 CanParalyzeType(u8 battlerAttacker, u8 battlerTarget) +{ + return !(B_PARALYZE_ELECTRIC >= GEN_6 && IS_BATTLER_OF_TYPE(battlerTarget, TYPE_ELECTRIC)); +} + +bool32 CanUseLastResort(u8 battlerId) +{ + u32 i; + u32 knownMovesCount = 0, usedMovesCount = 0; + + for (i = 0; i < 4; i++) + { + if (gBattleMons[battlerId].moves[i] != MOVE_NONE) + knownMovesCount++; + if (i != gCurrMovePos && gDisableStructs[battlerId].usedMoves & gBitTable[i]) // Increment used move count for all moves except current Last Resort. + usedMovesCount++; + } + + return (knownMovesCount >= 2 && usedMovesCount >= knownMovesCount - 1); +} + +#define DEFOG_CLEAR(status, structField, battlescript, move)\ +{ \ + if (*sideStatuses & status) \ + { \ + if (clear) \ + { \ + if (move) \ + PREPARE_MOVE_BUFFER(gBattleTextBuff1, move);\ + *sideStatuses &= ~status; \ + sideTimer->structField = 0; \ + BattleScriptPushCursor(); \ + gBattlescriptCurrInstr = battlescript; \ + } \ + return TRUE; \ + } \ +} + +static bool32 ClearDefogHazards(u8 battlerAtk, bool32 clear) +{ + s32 i; + for (i = 0; i < 2; i++) + { + struct SideTimer *sideTimer = &gSideTimers[i]; + u32 *sideStatuses = &gSideStatuses[i]; + + gBattlerAttacker = i; + if (GetBattlerSide(battlerAtk) != i) + { + DEFOG_CLEAR(SIDE_STATUS_REFLECT, reflectTimer, BattleScript_SideStatusWoreOffReturn, MOVE_REFLECT); + DEFOG_CLEAR(SIDE_STATUS_LIGHTSCREEN, lightscreenTimer, BattleScript_SideStatusWoreOffReturn, MOVE_LIGHT_SCREEN); + DEFOG_CLEAR(SIDE_STATUS_MIST, mistTimer, BattleScript_SideStatusWoreOffReturn, MOVE_MIST); + DEFOG_CLEAR(SIDE_STATUS_AURORA_VEIL, auroraVeilTimer, BattleScript_SideStatusWoreOffReturn, MOVE_AURORA_VEIL); + DEFOG_CLEAR(SIDE_STATUS_SAFEGUARD, safeguardTimer, BattleScript_SideStatusWoreOffReturn, MOVE_SAFEGUARD); + } + DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesFree, 0); + DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockFree, 0); + DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesFree, 0); + DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebFree, 0); + } + + return FALSE; +} + +u32 IsFlowerVeilProtected(u32 battler) +{ + if (IS_BATTLER_OF_TYPE(battler, TYPE_GRASS)) + return IsAbilityOnSide(battler, ABILITY_FLOWER_VEIL); + else + return 0; +} + +u32 IsLeafGuardProtected(u32 battler) +{ + if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) + return GetBattlerAbility(battler) == ABILITY_LEAF_GUARD; + else + return 0; +} + +bool32 IsShieldsDownProtected(u32 battler) +{ + return (GetBattlerAbility(battler) == ABILITY_SHIELDS_DOWN + && GetFormIdFromFormSpeciesId(gBattleMons[battler].species) < GetFormIdFromFormSpeciesId(SPECIES_MINIOR_CORE_RED)); // Minior is not in core form +} + +u32 IsAbilityStatusProtected(u32 battler) +{ + return IsFlowerVeilProtected(battler) + || IsLeafGuardProtected(battler) + || IsShieldsDownProtected(battler); +} + +static void RecalcBattlerStats(u32 battler, struct Pokemon *mon) +{ + CalculateMonStats(mon); + gBattleMons[battler].level = GetMonData(mon, MON_DATA_LEVEL); + gBattleMons[battler].hp = GetMonData(mon, MON_DATA_HP); + gBattleMons[battler].maxHP = GetMonData(mon, MON_DATA_MAX_HP); + gBattleMons[battler].attack = GetMonData(mon, MON_DATA_ATK); + gBattleMons[battler].defense = GetMonData(mon, MON_DATA_DEF); + gBattleMons[battler].speed = GetMonData(mon, MON_DATA_SPEED); + gBattleMons[battler].spAttack = GetMonData(mon, MON_DATA_SPATK); + gBattleMons[battler].spDefense = GetMonData(mon, MON_DATA_SPDEF); + gBattleMons[battler].ability = GetMonAbility(mon); + gBattleMons[battler].type1 = gBaseStats[gBattleMons[battler].species].type1; + gBattleMons[battler].type2 = gBaseStats[gBattleMons[battler].species].type2; +} + +static u32 GetHighestStatId(u32 battlerId) +{ + u32 i, highestId = STAT_ATK, highestStat = gBattleMons[battlerId].attack; + + for (i = STAT_DEF; i < NUM_STATS; i++) + { + u16 *statVal = &gBattleMons[battlerId].attack + (i - 1); + if (*statVal > highestStat) + { + highestStat = *statVal; + highestId = i; + } + } + return highestId; +} + +static bool32 IsRototillerAffected(u32 battlerId) +{ + if (!IsBattlerAlive(battlerId)) + return FALSE; + if (!IsBattlerGrounded(battlerId)) + return FALSE; // Only grounded battlers affected + if (!IS_BATTLER_OF_TYPE(battlerId, TYPE_GRASS)) + return FALSE; // Only grass types affected + if (gStatuses3[battlerId] & STATUS3_SEMI_INVULNERABLE) + return FALSE; // Rototiller doesn't affected semi-invulnerable battlers + if (BlocksPrankster(MOVE_ROTOTILLER, gBattlerAttacker, battlerId, FALSE)) + return FALSE; + return TRUE; +} + +#define COURTCHANGE_SWAP(status, structField, temp) \ +{ \ + temp = gSideStatuses[B_SIDE_PLAYER]; \ + if (gSideStatuses[B_SIDE_OPPONENT] & status) \ + gSideStatuses[B_SIDE_PLAYER] |= status; \ + else \ + gSideStatuses[B_SIDE_PLAYER] &= ~(status); \ + if (temp & status) \ + gSideStatuses[B_SIDE_OPPONENT] |= status; \ + else \ + gSideStatuses[B_SIDE_OPPONENT] &= ~(status); \ + SWAP(sideTimerPlayer->structField, sideTimerOpp->structField, temp);\ +} \ + +#define UPDATE_COURTCHANGED_BATTLER(structField)\ +{ \ + sideTimerPlayer->structField ^= BIT_SIDE; \ + sideTimerOpp->structField ^= BIT_SIDE; \ +} \ + +static bool32 CourtChangeSwapSideStatuses(void) +{ + struct SideTimer *sideTimerPlayer = &gSideTimers[B_SIDE_PLAYER]; + struct SideTimer *sideTimerOpp = &gSideTimers[B_SIDE_OPPONENT]; + u32 temp; + + // TODO: add Pledge-related effects + // TODO: add Gigantamax-related effects + + // Swap timers and statuses + COURTCHANGE_SWAP(SIDE_STATUS_REFLECT, reflectTimer, temp) + COURTCHANGE_SWAP(SIDE_STATUS_LIGHTSCREEN, lightscreenTimer, temp) + COURTCHANGE_SWAP(SIDE_STATUS_MIST, mistTimer, temp); + COURTCHANGE_SWAP(SIDE_STATUS_SAFEGUARD, safeguardTimer, temp); + COURTCHANGE_SWAP(SIDE_STATUS_AURORA_VEIL, auroraVeilTimer, temp); + COURTCHANGE_SWAP(SIDE_STATUS_TAILWIND, tailwindTimer, temp); + // Lucky Chant doesn't exist in gen 8, but seems like it should be affected by Court Change + COURTCHANGE_SWAP(SIDE_STATUS_LUCKY_CHANT, luckyChantTimer, temp); + COURTCHANGE_SWAP(SIDE_STATUS_SPIKES, spikesAmount, temp); + COURTCHANGE_SWAP(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, temp); + COURTCHANGE_SWAP(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, temp); + COURTCHANGE_SWAP(SIDE_STATUS_STICKY_WEB, stickyWebAmount, temp); + + // Change battler IDs of swapped effects. Needed for the correct string when they expire + // E.g. "Foe's Reflect wore off!" + UPDATE_COURTCHANGED_BATTLER(reflectBattlerId); + UPDATE_COURTCHANGED_BATTLER(lightscreenBattlerId); + UPDATE_COURTCHANGED_BATTLER(mistBattlerId); + UPDATE_COURTCHANGED_BATTLER(safeguardBattlerId); + UPDATE_COURTCHANGED_BATTLER(auroraVeilBattlerId); + UPDATE_COURTCHANGED_BATTLER(tailwindBattlerId); + UPDATE_COURTCHANGED_BATTLER(luckyChantBattlerId); + + // For Mirror Armor only + gBattleStruct->stickyWebUser = gBattlerAttacker; + + // Track which side originally set the Sticky Web + SWAP(sideTimerPlayer->stickyWebBattlerSide, sideTimerOpp->stickyWebBattlerSide, temp); } static void Cmd_various(void) { - u8 side; - s32 i; + struct Pokemon *mon; + s32 i, j; + u8 data[10]; + u32 side, bits; + + if (gBattleControllerExecFlags) + return; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); switch (gBattlescriptCurrInstr[2]) { + // Roar will fail in a double wild battle when used by the player against one of the two alive wild mons. + // Also when an opposing wild mon uses it againt its partner. + case VARIOUS_JUMP_IF_ROAR_FAILS: + if (WILD_DOUBLE_BATTLE + && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER + && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT + && IS_WHOLE_SIDE_ALIVE(gBattlerTarget)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else if (WILD_DOUBLE_BATTLE + && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT + && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_JUMP_IF_ABSENT: + if (!IsBattlerAlive(gActiveBattler)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED: + if (IsShieldsDownProtected(gActiveBattler)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_JUMP_IF_NO_HOLD_EFFECT: + if (GetBattlerHoldEffect(gActiveBattler, TRUE) != gBattlescriptCurrInstr[3]) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + } + else + { + gLastUsedItem = gBattleMons[gActiveBattler].item; // For B_LAST_USED_ITEM + gBattlescriptCurrInstr += 8; + } + return; + case VARIOUS_JUMP_IF_NO_ALLY: + if (!IsBattlerAlive(BATTLE_PARTNER(gActiveBattler))) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_INFATUATE_WITH_BATTLER: + gBattleScripting.battler = gActiveBattler; + gBattleMons[gActiveBattler].status2 |= STATUS2_INFATUATED_WITH(GetBattlerForBattleScript(gBattlescriptCurrInstr[3])); + gBattlescriptCurrInstr += 4; + return; + case VARIOUS_SET_LAST_USED_ITEM: + gLastUsedItem = gBattleMons[gActiveBattler].item; + break; + case VARIOUS_TRY_FAIRY_LOCK: + if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gFieldStatuses |= STATUS_FIELD_FAIRY_LOCK; + gFieldTimers.fairyLockTimer = 2; + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_GET_STAT_VALUE: + i = gBattlescriptCurrInstr[3]; + gBattleMoveDamage = *(u16 *)(&gBattleMons[gActiveBattler].attack) + (i - 1); + gBattleMoveDamage *= gStatStageRatios[gBattleMons[gActiveBattler].statStages[i]][0]; + gBattleMoveDamage /= gStatStageRatios[gBattleMons[gActiveBattler].statStages[i]][1]; + gBattlescriptCurrInstr += 4; + return; + case VARIOUS_JUMP_IF_FULL_HP: + if (BATTLER_MAX_HP(gActiveBattler)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_TRY_FRISK: + while (gBattleStruct->friskedBattler < gBattlersCount) + { + gBattlerTarget = gBattleStruct->friskedBattler++; + if (GET_BATTLER_SIDE2(gActiveBattler) != GET_BATTLER_SIDE2(gBattlerTarget) + && IsBattlerAlive(gBattlerTarget) + && gBattleMons[gBattlerTarget].item != ITEM_NONE) + { + gLastUsedItem = gBattleMons[gBattlerTarget].item; + RecordItemEffectBattle(gBattlerTarget, GetBattlerHoldEffect(gBattlerTarget, FALSE)); + BattleScriptPushCursor(); + // If Frisk identifies two mons' items, show the pop-up only once. + if (gBattleStruct->friskedAbility) + { + gBattlescriptCurrInstr = BattleScript_FriskMsg; + } + else + { + gBattleStruct->friskedAbility = TRUE; + gBattlescriptCurrInstr = BattleScript_FriskMsgWithPopup; + } + return; + } + } + gBattleStruct->friskedBattler = 0; + gBattleStruct->friskedAbility = FALSE; + break; + case VARIOUS_POISON_TYPE_IMMUNITY: + if (!CanPoisonType(gActiveBattler, GetBattlerForBattleScript(gBattlescriptCurrInstr[3]))) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + else + gBattlescriptCurrInstr += 8; + return; + case VARIOUS_PARALYZE_TYPE_IMMUNITY: + if (!CanParalyzeType(gActiveBattler, GetBattlerForBattleScript(gBattlescriptCurrInstr[3]))) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + else + gBattlescriptCurrInstr += 8; + return; + case VARIOUS_TRACE_ABILITY: + gBattleMons[gActiveBattler].ability = gBattleStruct->tracedAbility[gActiveBattler]; + RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability); + break; + case VARIOUS_TRY_ILLUSION_OFF: + if (GetIllusionMonPtr(gActiveBattler) != NULL) + { + gBattlescriptCurrInstr += 3; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_IllusionOff; + return; + } + break; + case VARIOUS_SET_SPRITEIGNORE0HP: + gBattleStruct->spriteIgnore0Hp = gBattlescriptCurrInstr[3]; + gBattlescriptCurrInstr += 4; + return; + case VARIOUS_UPDATE_NICK: + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; + else + mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; + UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_NICK); + break; + case VARIOUS_JUMP_IF_NOT_BERRY: + if (ItemId_GetPocket(gBattleMons[gActiveBattler].item) == POCKET_BERRIES) + gBattlescriptCurrInstr += 7; + else + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + return; + case VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS: + if ((gStatuses3[gActiveBattler] & (STATUS3_SEMI_INVULNERABLE | STATUS3_HEAL_BLOCK)) + || BATTLER_MAX_HP(gActiveBattler) + || !gBattleMons[gActiveBattler].hp + || !(IsBattlerGrounded(gActiveBattler))) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_GRAVITY_ON_AIRBORNE_MONS: + // Cancel all multiturn moves of IN_AIR Pokemon except those being targeted by Sky Drop. + if (gStatuses3[gActiveBattler] & STATUS3_ON_AIR && !(gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED)) + CancelMultiTurnMoves(gActiveBattler); + + gStatuses3[gActiveBattler] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR | STATUS3_SKY_DROPPED); + break; + case VARIOUS_SPECTRAL_THIEF: + // Raise stats + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleStruct->stolenStats[0] & gBitTable[i]) + { + gBattleStruct->stolenStats[0] &= ~(gBitTable[i]); + SET_STATCHANGER(i, gBattleStruct->stolenStats[i], FALSE); + if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), i, MOVE_EFFECT_CERTAIN | MOVE_EFFECT_AFFECTS_USER, NULL) == STAT_CHANGE_WORKED) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_StatUpMsg; + return; + } + } + } + break; + case VARIOUS_SET_POWDER: + gBattleMons[gActiveBattler].status2 |= STATUS2_POWDER; + break; + case VARIOUS_ACUPRESSURE: + bits = 0; + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (CompareStat(gActiveBattler, i, MAX_STAT_STAGE, CMP_LESS_THAN)) + bits |= gBitTable[i]; + } + if (bits) + { + u32 statId; + do + { + statId = (Random() % (NUM_BATTLE_STATS - 1)) + 1; + } while (!(bits & gBitTable[statId])); + + SET_STATCHANGER(statId, 2, FALSE); + gBattlescriptCurrInstr += 7; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + return; case VARIOUS_CANCEL_MULTI_TURN_MOVES: CancelMultiTurnMoves(gActiveBattler); break; case VARIOUS_SET_MAGIC_COAT_TARGET: + gBattleStruct->attackerBeforeBounce = gActiveBattler; gBattlerAttacker = gBattlerTarget; side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; - if (gSideTimers[side].followmeTimer != 0 && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) + if (IsAffectedByFollowMe(gBattlerAttacker, side, gCurrentMove)) gBattlerTarget = gSideTimers[side].followmeTarget; else gBattlerTarget = gActiveBattler; @@ -6282,7 +8114,7 @@ static void Cmd_various(void) gBattleCommunication[0] = IsRunningFromBattleImpossible(); break; case VARIOUS_GET_MOVE_TARGET: - gBattlerTarget = GetMoveTarget(gCurrentMove, 0); + gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); break; case VARIOUS_GET_BATTLER_FAINTED: if (gHitMarker & HITMARKER_FAINTED(gActiveBattler)) @@ -6291,44 +8123,40 @@ static void Cmd_various(void) gBattleCommunication[0] = FALSE; break; case VARIOUS_RESET_INTIMIDATE_TRACE_BITS: - gSpecialStatuses[gActiveBattler].intimidatedMon = 0; - gSpecialStatuses[gActiveBattler].traced = 0; + gSpecialStatuses[gActiveBattler].intimidatedMon = FALSE; + gSpecialStatuses[gActiveBattler].traced = FALSE; + gSpecialStatuses[gActiveBattler].switchInAbilityDone = FALSE; break; case VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP: if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId || gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) { - u16 *choicedMove; - if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId) gActiveBattler = 0; else gActiveBattler = 2; - choicedMove = &gBattleStruct->choicedMove[gActiveBattler]; - for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleMons[gActiveBattler].moves[i] == *choicedMove) + if (gBattleMons[gActiveBattler].moves[i] == gBattleStruct->choicedMove[gActiveBattler]) break; } if (i == MAX_MON_MOVES) - *choicedMove = 0; + gBattleStruct->choicedMove[gActiveBattler] = MOVE_NONE; } break; - case 7: + case VARIOUS_RESET_PLAYER_FAINTED: if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE)) && gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattleMons[0].hp != 0 && gBattleMons[1].hp != 0) { - gHitMarker &= ~(HITMARKER_x400000); + gHitMarker &= ~HITMARKER_PLAYER_FAINTED; } break; case VARIOUS_PALACE_FLAVOR_TEXT: // Try and print end-of-turn Battle Palace flavor text (e.g. "A glint appears in mon's eyes") gBattleCommunication[0] = FALSE; // whether or not msg should be printed gBattleScripting.battler = gActiveBattler = gBattleCommunication[1]; - if (!(gBattleStruct->palaceFlags & gBitTable[gActiveBattler]) && gBattleMons[gActiveBattler].maxHP / 2 >= gBattleMons[gActiveBattler].hp && gBattleMons[gActiveBattler].hp != 0 @@ -6341,7 +8169,10 @@ static void Cmd_various(void) break; case VARIOUS_ARENA_JUDGMENT_WINDOW: i = BattleArena_ShowJudgmentWindow(&gBattleCommunication[0]); - if (i == 0) + + // BattleArena_ShowJudgmentWindow's last state was an intermediate step. + // Return without advancing the current instruction so that it will be called again. + if (i == ARENA_RESULT_RUNNING) return; gBattleCommunication[1] = i; @@ -6355,7 +8186,7 @@ static void Cmd_various(void) case VARIOUS_ARENA_PLAYER_MON_LOST: gBattleMons[0].hp = 0; gHitMarker |= HITMARKER_FAINTED(0); - gHitMarker |= HITMARKER_x400000; + gHitMarker |= HITMARKER_PLAYER_FAINTED; gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]]; gDisableStructs[0].truantSwitchInHack = 1; break; @@ -6364,28 +8195,28 @@ static void Cmd_various(void) gBattleMons[1].hp = 0; gHitMarker |= HITMARKER_FAINTED(0); gHitMarker |= HITMARKER_FAINTED(1); - gHitMarker |= HITMARKER_x400000; + gHitMarker |= HITMARKER_PLAYER_FAINTED; gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]]; gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]]; gDisableStructs[0].truantSwitchInHack = 1; gDisableStructs[1].truantSwitchInHack = 1; break; case VARIOUS_EMIT_YESNOBOX: - BtlController_EmitYesNoBox(0); + BtlController_EmitYesNoBox(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); break; - case 14: + case VARIOUS_DRAW_ARENA_REF_TEXT_BOX: DrawArenaRefereeTextBox(); break; - case 15: - RemoveArenaRefereeTextBox(); + case VARIOUS_ERASE_ARENA_REF_TEXT_BOX: + EraseArenaRefereeTextBox(); break; case VARIOUS_ARENA_JUDGMENT_STRING: BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[gBattlescriptCurrInstr[1]]); - BattlePutTextOnWindow(gDisplayedStringBattle, 22); + BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGEMENT_TEXT); break; case VARIOUS_ARENA_WAIT_STRING: - if (IsTextPrinterActive(22)) + if (IsTextPrinterActive(ARENA_WIN_JUDGEMENT_TEXT)) return; break; case VARIOUS_WAIT_CRY: @@ -6396,7 +8227,7 @@ static void Cmd_various(void) gActiveBattler = 1; if (gBattleMons[gActiveBattler].hp != 0) { - BtlController_EmitReturnMonToBall(0, 0); + BtlController_EmitReturnMonToBall(BUFFER_A, FALSE); MarkBattlerForControllerExec(gActiveBattler); } break; @@ -6406,45 +8237,1488 @@ static void Cmd_various(void) gActiveBattler = 3; if (gBattleMons[gActiveBattler].hp != 0) { - BtlController_EmitReturnMonToBall(0, 0); + BtlController_EmitReturnMonToBall(BUFFER_A, FALSE); MarkBattlerForControllerExec(gActiveBattler); } } break; case VARIOUS_VOLUME_DOWN: - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x55); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x55); break; case VARIOUS_VOLUME_UP: - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); break; case VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT: gBattleStruct->alreadyStatusedMoveAttempt |= gBitTable[gActiveBattler]; break; - case 24: - if (sub_805725C(gActiveBattler)) + case VARIOUS_PALACE_TRY_ESCAPE_STATUS: + if (BattlePalace_TryEscapeStatus(gActiveBattler)) return; break; case VARIOUS_SET_TELEPORT_OUTCOME: - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + // Don't end the battle if one of the wild mons teleported from the wild double battle + // and its partner is still alive. + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gActiveBattler))) + { + gAbsentBattlerFlags |= gBitTable[gActiveBattler]; + gHitMarker |= HITMARKER_FAINTED(gActiveBattler); + gBattleMons[gActiveBattler].hp = 0; + SetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP, &gBattleMons[gActiveBattler].hp); + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); + FaintClearSetData(); + } + else if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; + } else + { gBattleOutcome = B_OUTCOME_MON_TELEPORTED; + } break; case VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC: - BtlController_EmitPlayFanfareOrBGM(0, MUS_VICTORY_TRAINER, TRUE); + BtlController_EmitPlayFanfareOrBGM(BUFFER_A, MUS_VICTORY_TRAINER, TRUE); MarkBattlerForControllerExec(gActiveBattler); break; + case VARIOUS_STAT_TEXT_BUFFER: + PREPARE_STAT_BUFFER(gBattleTextBuff1, gBattleCommunication[0]); + break; + case VARIOUS_SWITCHIN_ABILITIES: + gBattlescriptCurrInstr += 3; + AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, gActiveBattler, 0, 0, 0); + AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0); + AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE2, gActiveBattler, 0, 0, 0); + AbilityBattleEffects(ABILITYEFFECT_TRACE2, gActiveBattler, 0, 0, 0); + return; + case VARIOUS_SAVE_TARGET: + gBattleStruct->savedBattlerTarget = gBattlerTarget; + break; + case VARIOUS_RESTORE_TARGET: + gBattlerTarget = gBattleStruct->savedBattlerTarget; + break; + case VARIOUS_INSTANT_HP_DROP: + BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); + MarkBattlerForControllerExec(gActiveBattler); + break; + case VARIOUS_CLEAR_STATUS: + gBattleMons[gActiveBattler].status1 = 0; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); + break; + case VARIOUS_RESTORE_PP: + for (i = 0; i < 4; i++) + { + gBattleMons[gActiveBattler].pp[i] = CalculatePPWithBonus(gBattleMons[gActiveBattler].moves[i], gBattleMons[gActiveBattler].ppBonuses, i); + data[i] = gBattleMons[gActiveBattler].pp[i]; + } + data[i] = gBattleMons[gActiveBattler].ppBonuses; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_PP_DATA_BATTLE, 0, 5, data); + MarkBattlerForControllerExec(gActiveBattler); + break; + case VARIOUS_TRY_ACTIVATE_MOXIE: // and chilling neigh + as one ice rider + { + u16 battlerAbility = GetBattlerAbility(gActiveBattler); + + if ((battlerAbility == ABILITY_MOXIE + || battlerAbility == ABILITY_CHILLING_NEIGH + || battlerAbility == ABILITY_AS_ONE_ICE_RIDER) + && HasAttackerFaintedTarget() + && !NoAliveMonsForEitherParty() + && CompareStat(gBattlerAttacker, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + gBattleMons[gBattlerAttacker].statStages[STAT_ATK]++; + SET_STATCHANGER(STAT_ATK, 1, FALSE); + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); + BattleScriptPush(gBattlescriptCurrInstr + 3); + gLastUsedAbility = battlerAbility; + if (battlerAbility == ABILITY_AS_ONE_ICE_RIDER) + gBattleScripting.abilityPopupOverwrite = gLastUsedAbility = ABILITY_CHILLING_NEIGH; + gBattlescriptCurrInstr = BattleScript_RaiseStatOnFaintingTarget; + return; + } } + break; + case VARIOUS_TRY_ACTIVATE_GRIM_NEIGH: // and as one shadow rider + { + u16 battlerAbility = GetBattlerAbility(gActiveBattler); + + if ((battlerAbility == ABILITY_GRIM_NEIGH + || battlerAbility == ABILITY_AS_ONE_SHADOW_RIDER) + && HasAttackerFaintedTarget() + && !NoAliveMonsForEitherParty() + && CompareStat(gBattlerAttacker, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]++; + SET_STATCHANGER(STAT_SPATK, 1, FALSE); + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); + BattleScriptPush(gBattlescriptCurrInstr + 3); + gLastUsedAbility = battlerAbility; + if (battlerAbility == ABILITY_AS_ONE_SHADOW_RIDER) + gBattleScripting.abilityPopupOverwrite = gLastUsedAbility = ABILITY_GRIM_NEIGH; + gBattlescriptCurrInstr = BattleScript_RaiseStatOnFaintingTarget; + return; + } + } + break; + case VARIOUS_TRY_ACTIVATE_RECEIVER: // Partner gets fainted's ally ability + gBattlerAbility = BATTLE_PARTNER(gActiveBattler); + i = GetBattlerAbility(gBattlerAbility); + if (IsBattlerAlive(gBattlerAbility) + && (i == ABILITY_RECEIVER || i == ABILITY_POWER_OF_ALCHEMY)) + { + switch (gBattleMons[gActiveBattler].ability) + { // Can't copy these abilities. + case ABILITY_POWER_OF_ALCHEMY: case ABILITY_RECEIVER: + case ABILITY_FORECAST: case ABILITY_MULTITYPE: + case ABILITY_FLOWER_GIFT: case ABILITY_ILLUSION: + case ABILITY_WONDER_GUARD: case ABILITY_ZEN_MODE: + case ABILITY_STANCE_CHANGE: case ABILITY_IMPOSTER: + case ABILITY_POWER_CONSTRUCT: case ABILITY_BATTLE_BOND: + case ABILITY_SCHOOLING: case ABILITY_COMATOSE: + case ABILITY_SHIELDS_DOWN: case ABILITY_DISGUISE: + case ABILITY_RKS_SYSTEM: case ABILITY_TRACE: + break; + default: + gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[gActiveBattler].ability; // re-using the variable for trace + gBattleScripting.battler = gActiveBattler; + BattleScriptPush(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = BattleScript_ReceiverActivates; + return; + } + } + break; + case VARIOUS_TRY_ACTIVATE_BEAST_BOOST: + i = GetHighestStatId(gActiveBattler); + if (GetBattlerAbility(gActiveBattler) == ABILITY_BEAST_BOOST + && HasAttackerFaintedTarget() + && !NoAliveMonsForEitherParty() + && CompareStat(gBattlerAttacker, i, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + gBattleMons[gBattlerAttacker].statStages[i]++; + SET_STATCHANGER(i, 1, FALSE); + PREPARE_STAT_BUFFER(gBattleTextBuff1, i); + BattleScriptPush(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = BattleScript_AttackerAbilityStatRaise; + return; + } + break; + case VARIOUS_TRY_ACTIVATE_SOULHEART: + while (gBattleStruct->soulheartBattlerId < gBattlersCount) + { + gBattleScripting.battler = gBattleStruct->soulheartBattlerId++; + if (GetBattlerAbility(gBattleScripting.battler) == ABILITY_SOUL_HEART + && IsBattlerAlive(gBattleScripting.battler) + && !NoAliveMonsForEitherParty() + && CompareStat(gBattleScripting.battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + gBattleMons[gBattleScripting.battler].statStages[STAT_SPATK]++; + SET_STATCHANGER(STAT_SPATK, 1, FALSE); + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ScriptingAbilityStatRaise; + return; + } + } + gBattleStruct->soulheartBattlerId = 0; + break; + case VARIOUS_TRY_ACTIVATE_FELL_STINGER: + if (gBattleMoves[gCurrentMove].effect == EFFECT_FELL_STINGER + && HasAttackerFaintedTarget() + && !NoAliveMonsForEitherParty() + && CompareStat(gBattlerAttacker, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + if (B_FELL_STINGER_STAT_RAISE >= GEN_7) + SET_STATCHANGER(STAT_ATK, 3, FALSE); + else + SET_STATCHANGER(STAT_ATK, 2, FALSE); + + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); + BattleScriptPush(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = BattleScript_FellStingerRaisesStat; + return; + } + break; + case VARIOUS_PLAY_MOVE_ANIMATION: + BtlController_EmitMoveAnimation(BUFFER_A, T1_READ_16(gBattlescriptCurrInstr + 3), gBattleScripting.animTurn, 0, 0, gBattleMons[gActiveBattler].friendship, &gDisableStructs[gActiveBattler], gMultiHitCounter); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 5; + return; + case VARIOUS_SET_LUCKY_CHANT: + if (!(gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] & SIDE_STATUS_LUCKY_CHANT)) + { + gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] |= SIDE_STATUS_LUCKY_CHANT; + gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].luckyChantBattlerId = gActiveBattler; + gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].luckyChantTimer = 5; + gBattlescriptCurrInstr += 7; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + return; + case VARIOUS_SUCKER_PUNCH_CHECK: + if (gProtectStructs[gBattlerTarget].obstructed) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else if (IS_MOVE_STATUS(gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]])) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_SET_SIMPLE_BEAM: + if (IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability) + || gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + if (gBattleMons[gBattlerTarget].ability == ABILITY_NEUTRALIZING_GAS) + gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; + + gBattleMons[gBattlerTarget].ability = ABILITY_SIMPLE; + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_TRY_ENTRAINMENT: + if (IsEntrainmentBannedAbilityAttacker(gBattleMons[gBattlerAttacker].ability) + || IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + return; + } + + if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gBattleMons[gBattlerTarget].ability = gBattleMons[gBattlerAttacker].ability; + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_SET_LAST_USED_ABILITY: + gLastUsedAbility = gBattleMons[gActiveBattler].ability; + break; + case VARIOUS_TRY_HEAL_PULSE: + if (BATTLER_MAX_HP(gActiveBattler)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MEGA_LAUNCHER && gBattleMoves[gCurrentMove].flags & FLAG_MEGA_LAUNCHER_BOOST) + gBattleMoveDamage = -(gBattleMons[gActiveBattler].maxHP * 75 / 100); + else + gBattleMoveDamage = -(gBattleMons[gActiveBattler].maxHP / 2); + + if (gBattleMoveDamage == 0) + gBattleMoveDamage = -1; + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_TRY_QUASH: + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) // It's true if foe is faster, has a bigger priority, or switches + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // This replaces the current battlescript with the "fail" script. + } + else // If the condition is not true, it means we are faster than the foe, so we can set the quash bit + { + gProtectStructs[gBattlerTarget].quash = TRUE; + gBattlescriptCurrInstr += 7; // and then we proceed with the rest of our battlescript + } + return; + case VARIOUS_INVERT_STAT_STAGES: + for (i = 0; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[gActiveBattler].statStages[i] < DEFAULT_STAT_STAGE) // Negative becomes positive. + gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE + (DEFAULT_STAT_STAGE - gBattleMons[gActiveBattler].statStages[i]); + else if (gBattleMons[gActiveBattler].statStages[i] > DEFAULT_STAT_STAGE) // Positive becomes negative. + gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE - (gBattleMons[gActiveBattler].statStages[i] - DEFAULT_STAT_STAGE); + } + break; + case VARIOUS_SET_TERRAIN: + HandleTerrainMove(gCurrentMove); + return; + case VARIOUS_TRY_ME_FIRST: + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else if (IS_MOVE_STATUS(gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]])) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + { + u16 move = gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]]; + switch (move) + { + case MOVE_STRUGGLE: + case MOVE_CHATTER: + case MOVE_FOCUS_PUNCH: + case MOVE_THIEF: + case MOVE_COVET: + case MOVE_COUNTER: + case MOVE_MIRROR_COAT: + case MOVE_METAL_BURST: + case MOVE_ME_FIRST: + case MOVE_BEAK_BLAST: + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + break; + default: + gCalledMove = move; + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; + gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); + gStatuses3[gBattlerAttacker] |= STATUS3_ME_FIRST; + gBattlescriptCurrInstr += 7; + break; + } + } + return; + case VARIOUS_JUMP_IF_BATTLE_END: + if (NoAliveMonsForEitherParty()) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_TRY_ELECTRIFY: + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gStatuses4[gBattlerTarget] |= STATUS4_ELECTRIFIED; + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_TRY_REFLECT_TYPE: + if (gBattleMons[gBattlerTarget].species == SPECIES_ARCEUS || gBattleMons[gBattlerTarget].species == SPECIES_SILVALLY) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else if (gBattleMons[gBattlerTarget].type1 == TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 != TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type2; + gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type2; + gBattlescriptCurrInstr += 7; + } + else if (gBattleMons[gBattlerTarget].type1 != TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 == TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type1; + gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type1; + gBattlescriptCurrInstr += 7; + } + else if (gBattleMons[gBattlerTarget].type1 == TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 == TYPE_MYSTERY) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type1; + gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type2; + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_TRY_SOAK: + if (gBattleMons[gBattlerTarget].type1 == gBattleMoves[gCurrentMove].type + && gBattleMons[gBattlerTarget].type2 == gBattleMoves[gCurrentMove].type) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + SET_BATTLER_TYPE(gBattlerTarget, gBattleMoves[gCurrentMove].type); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, gBattleMoves[gCurrentMove].type); + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_HANDLE_MEGA_EVO: + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; + else + mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; + + // Change species. + if (gBattlescriptCurrInstr[3] == 0) + { + u16 megaSpecies; + gBattleStruct->mega.evolvedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; + if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT + || (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) + { + gBattleStruct->mega.playerEvolvedSpecies = gBattleStruct->mega.evolvedSpecies[gActiveBattler]; + } + //Checks regular Mega Evolution + megaSpecies = GetMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[gActiveBattler], gBattleMons[gActiveBattler].item); + //Checks Wish Mega Evolution + if (megaSpecies == SPECIES_NONE) + { + megaSpecies = GetWishMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[gActiveBattler], gBattleMons[gActiveBattler].moves[0], gBattleMons[gActiveBattler].moves[1], gBattleMons[gActiveBattler].moves[2], gBattleMons[gActiveBattler].moves[3]); + } + + gBattleMons[gActiveBattler].species = megaSpecies; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); + + BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species); + MarkBattlerForControllerExec(gActiveBattler); + } + // Change stats. + else if (gBattlescriptCurrInstr[3] == 1) + { + RecalcBattlerStats(gActiveBattler, mon); + gBattleStruct->mega.alreadyEvolved[GetBattlerPosition(gActiveBattler)] = TRUE; + gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; + } + // Update healthbox and elevation. + else + { + UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL); + CreateMegaIndicatorSprite(gActiveBattler, 0); + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); + } + gBattlescriptCurrInstr += 4; + return; + case VARIOUS_HANDLE_PRIMAL_REVERSION: + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; + else + mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; + + // Change species. + if (gBattlescriptCurrInstr[3] == 0) + { + u16 primalSpecies; + gBattleStruct->mega.primalRevertedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; + if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT + || (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) + { + gBattleStruct->mega.playerPrimalRevertedSpecies = gBattleStruct->mega.primalRevertedSpecies[gActiveBattler]; + } + // Checks Primal Reversion + primalSpecies = GetPrimalReversionSpecies(gBattleStruct->mega.primalRevertedSpecies[gActiveBattler], gBattleMons[gActiveBattler].item); + + gBattleMons[gActiveBattler].species = primalSpecies; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); + + BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species); + MarkBattlerForControllerExec(gActiveBattler); + } + // Change stats. + else if (gBattlescriptCurrInstr[3] == 1) + { + RecalcBattlerStats(gActiveBattler, mon); + gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; + } + // Update healthbox and elevation. + else + { + UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL); + CreateMegaIndicatorSprite(gActiveBattler, 0); + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); + } + gBattlescriptCurrInstr += 4; + return; + case VARIOUS_HANDLE_FORM_CHANGE: + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; + else + mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; + + // Change species. + if (gBattlescriptCurrInstr[3] == 0) + { + if (!gBattleTextBuff1) + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species); + MarkBattlerForControllerExec(gActiveBattler); + } + // Change stats. + else if (gBattlescriptCurrInstr[3] == 1) + { + RecalcBattlerStats(gActiveBattler, mon); + } + // Update healthbox. + else + { + UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL); + } + gBattlescriptCurrInstr += 4; + return; + case VARIOUS_TRY_LAST_RESORT: + if (CanUseLastResort(gActiveBattler)) + gBattlescriptCurrInstr += 7; + else + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + return; + case VARIOUS_ARGUMENT_STATUS_EFFECT: + switch (gBattleMoves[gCurrentMove].argument) + { + case STATUS1_SLEEP: + gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP; + break; + case STATUS1_BURN: + gBattleScripting.moveEffect = MOVE_EFFECT_BURN; + break; + case STATUS1_FREEZE: + gBattleScripting.moveEffect = MOVE_EFFECT_FREEZE; + break; + case STATUS1_PARALYSIS: + gBattleScripting.moveEffect = MOVE_EFFECT_PARALYSIS; + break; + case STATUS1_POISON: + gBattleScripting.moveEffect = MOVE_EFFECT_POISON; + break; + case STATUS1_TOXIC_POISON: + gBattleScripting.moveEffect = MOVE_EFFECT_TOXIC; + break; + default: + gBattleScripting.moveEffect = 0; + break; + } + if (gBattleScripting.moveEffect != 0) + { + BattleScriptPush(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = BattleScript_EffectWithChance; + return; + } + break; + case VARIOUS_TRY_HIT_SWITCH_TARGET: + if (IsBattlerAlive(gBattlerAttacker) + && IsBattlerAlive(gBattlerTarget) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED) + { + gBattleScripting.switchCase = B_SWITCH_HIT; + gBattlescriptCurrInstr = BattleScript_ForceRandomSwitch; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + return; + case VARIOUS_TRY_AUTOTOMIZE: + if (GetBattlerWeight(gActiveBattler) > 1) + { + gDisableStructs[gActiveBattler].autotomizeCount++; + gBattlescriptCurrInstr += 7; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + return; + case VARIOUS_TRY_COPYCAT: + if (gLastUsedMove == 0xFFFF || (sForbiddenMoves[gLastUsedMove] & FORBIDDEN_COPYCAT)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gCalledMove = gLastUsedMove; + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; + gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_TRY_INSTRUCT: + if ((sForbiddenMoves[gLastMoves[gBattlerTarget]] & FORBIDDEN_INSTRUCT) + || gLastMoves[gBattlerTarget] == 0xFFFF) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gSpecialStatuses[gBattlerTarget].instructedChosenTarget = *(gBattleStruct->moveTarget + gBattlerTarget) | 0x4; + gBattlerAttacker = gBattlerTarget; + gCalledMove = gLastMoves[gBattlerAttacker]; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBattlerAttacker].moves[i] == gCalledMove) + { + gCurrMovePos = i; + i = 4; + break; + } + } + if (i != 4 || gBattleMons[gBattlerAttacker].pp[gCurrMovePos] == 0) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + { + gBattlerTarget = gBattleStruct->lastMoveTarget[gBattlerAttacker]; + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]); + gBattlescriptCurrInstr += 7; + } + } + return; + case VARIOUS_ABILITY_POPUP: + CreateAbilityPopUp(gActiveBattler, gBattleMons[gActiveBattler].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); + break; + case VARIOUS_UPDATE_ABILITY_POPUP: + UpdateAbilityPopup(gActiveBattler); + break; + case VARIOUS_DEFOG: + if (T1_READ_8(gBattlescriptCurrInstr + 3)) // Clear + { + if (ClearDefogHazards(gEffectBattler, TRUE)) + return; + else + gBattlescriptCurrInstr += 8; + } + else + { + if (ClearDefogHazards(gActiveBattler, FALSE)) + gBattlescriptCurrInstr += 8; + else + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + } + return; + case VARIOUS_JUMP_IF_TARGET_ALLY: + if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + gBattlescriptCurrInstr += 7; + else + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + return; + case VARIOUS_TRY_SYNCHRONOISE: + if (!DoBattlersShareType(gBattlerAttacker, gBattlerTarget)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_LOSE_TYPE: + for (i = 0; i < 3; i++) + { + if (*(u8 *)(&gBattleMons[gActiveBattler].type1 + i) == gBattlescriptCurrInstr[3]) + *(u8 *)(&gBattleMons[gActiveBattler].type1 + i) = TYPE_MYSTERY; + } + gBattlescriptCurrInstr += 4; + return; + case VARIOUS_PSYCHO_SHIFT: + { + if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS && !CanBeParalyzed(gBattlerTarget)) + || (gBattleMons[gBattlerAttacker].status1 & STATUS1_PSN_ANY && !CanBePoisoned(gBattlerAttacker, gBattlerTarget)) + || (gBattleMons[gBattlerAttacker].status1 & STATUS1_BURN && !CanBeBurned(gBattlerTarget)) + || (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && !CanSleep(gBattlerTarget))) + { + // fails + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + // Psycho shift works + gBattleMons[gBattlerTarget].status1 = gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY; + gActiveBattler = gBattlerTarget; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 7; + } + } + return; + case VARIOUS_CURE_STATUS: + gBattleMons[gActiveBattler].status1 = 0; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); + break; + case VARIOUS_POWER_TRICK: + gStatuses3[gActiveBattler] ^= STATUS3_POWER_TRICK; + SWAP(gBattleMons[gActiveBattler].attack, gBattleMons[gActiveBattler].defense, i); + break; + case VARIOUS_AFTER_YOU: + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) + || GetBattlerTurnOrderNum(gBattlerAttacker) == GetBattlerTurnOrderNum(gBattlerTarget) + 1) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + for (i = 0; i < gBattlersCount; i++) + data[i] = gBattlerByTurnOrder[i]; + if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 2) + { + gBattlerByTurnOrder[1] = gBattlerTarget; + gBattlerByTurnOrder[2] = data[1]; + gBattlerByTurnOrder[3] = data[3]; + } + else if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 3) + { + gBattlerByTurnOrder[1] = gBattlerTarget; + gBattlerByTurnOrder[2] = data[1]; + gBattlerByTurnOrder[3] = data[2]; + } + else + { + gBattlerByTurnOrder[2] = gBattlerTarget; + gBattlerByTurnOrder[3] = data[2]; + } + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_BESTOW: + if (gBattleMons[gBattlerAttacker].item == ITEM_NONE + || gBattleMons[gBattlerTarget].item != ITEM_NONE + || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item) + || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gLastUsedItem = gBattleMons[gBattlerAttacker].item; + + gActiveBattler = gBattlerAttacker; + gBattleMons[gActiveBattler].item = ITEM_NONE; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].item), &gBattleMons[gActiveBattler].item); + MarkBattlerForControllerExec(gActiveBattler); + CheckSetUnburden(gBattlerAttacker); + + gActiveBattler = gBattlerTarget; + gBattleMons[gActiveBattler].item = gLastUsedItem; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].item), &gBattleMons[gActiveBattler].item); + MarkBattlerForControllerExec(gActiveBattler); + gBattleResources->flags->flags[gBattlerTarget] &= ~RESOURCE_FLAG_UNBURDEN; + + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_ARGUMENT_TO_MOVE_EFFECT: + gBattleScripting.moveEffect = gBattleMoves[gCurrentMove].argument; + break; + case VARIOUS_JUMP_IF_NOT_GROUNDED: + if (!IsBattlerGrounded(gActiveBattler)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_HANDLE_TRAINER_SLIDE_MSG: + if (gBattlescriptCurrInstr[3] == 0) + { + gBattleScripting.savedDmg = gBattlerSpriteIds[gActiveBattler]; + HideBattlerShadowSprite(gActiveBattler); + } + else if (gBattlescriptCurrInstr[3] == 1) + { + BtlController_EmitPrintString(BUFFER_A, STRINGID_TRAINERSLIDE); + MarkBattlerForControllerExec(gActiveBattler); + } + else + { + gBattlerSpriteIds[gActiveBattler] = gBattleScripting.savedDmg; + if (gBattleMons[gActiveBattler].hp != 0) + { + SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); + BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + } + } + gBattlescriptCurrInstr += 4; + return; + case VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF: + if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_FIRST_DOWN)) + { + BattleScriptPush(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; + return; + } + break; + case VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON: + if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_SWITCHIN)) + { + BattleScriptPush(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; + return; + } + break; + case VARIOUS_SET_AURORA_VEIL: + if (gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] & SIDE_STATUS_AURORA_VEIL + || !(WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_HAIL)) + { + gMoveResultFlags |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] |= SIDE_STATUS_AURORA_VEIL; + if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].auroraVeilTimer = 8; + else + gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].auroraVeilTimer = 5; + gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].auroraVeilBattlerId = gActiveBattler; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2) + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + break; + case VARIOUS_TRY_THIRD_TYPE: + if (IS_BATTLER_OF_TYPE(gActiveBattler, gBattleMoves[gCurrentMove].argument)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gBattleMons[gActiveBattler].type3 = gBattleMoves[gCurrentMove].argument; + PREPARE_TYPE_BUFFER(gBattleTextBuff1, gBattleMoves[gCurrentMove].argument); + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_DESTROY_ABILITY_POPUP: + DestroyAbilityPopUp(gActiveBattler); + break; + case VARIOUS_TOTEM_BOOST: + gActiveBattler = gBattlerAttacker; + if (gTotemBoosts[gActiveBattler].stats == 0) + { + gBattlescriptCurrInstr += 7; // stats done, exit + } + else + { + for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) + { + if (gTotemBoosts[gActiveBattler].stats & (1 << i)) + { + if (gTotemBoosts[gActiveBattler].statChanges[i] <= -1) + SET_STATCHANGER(i + 1, abs(gTotemBoosts[gActiveBattler].statChanges[i]), TRUE); + else + SET_STATCHANGER(i + 1, gTotemBoosts[gActiveBattler].statChanges[i], FALSE); + + gTotemBoosts[gActiveBattler].stats &= ~(1 << i); + gBattleScripting.battler = gActiveBattler; + gBattlerTarget = gActiveBattler; + if (gTotemBoosts[gActiveBattler].stats & 0x80) + { + gTotemBoosts[gActiveBattler].stats &= ~0x80; // set 'aura flared to life' flag + gBattlescriptCurrInstr = BattleScript_TotemFlaredToLife; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // do boost + } + return; + } + } + gBattlescriptCurrInstr += 7; // exit if loop failed (failsafe) + } + return; + case VARIOUS_SET_Z_EFFECT: + SetZEffect(); //handles battle script jumping internally + return; + case VARIOUS_MOVEEND_ITEM_EFFECTS: + if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, FALSE)) + return; + break; + case VARIOUS_ROOM_SERVICE: + if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_ROOM_SERVICE && TryRoomService(gActiveBattler)) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + return; + case VARIOUS_TERRAIN_SEED: + if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_SEEDS) + { + u8 effect = 0; + u16 item = gBattleMons[gActiveBattler].item; + switch (GetBattlerHoldEffectParam(gActiveBattler)) + { + case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN: + effect = TryHandleSeed(gActiveBattler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, item, FALSE); + break; + case HOLD_EFFECT_PARAM_GRASSY_TERRAIN: + effect = TryHandleSeed(gActiveBattler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, item, FALSE); + break; + case HOLD_EFFECT_PARAM_MISTY_TERRAIN: + effect = TryHandleSeed(gActiveBattler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, item, FALSE); + break; + case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN: + effect = TryHandleSeed(gActiveBattler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, item, FALSE); + break; + } + + if (effect) + return; + } + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + return; + case VARIOUS_MAKE_INVISIBLE: + if (gBattleControllerExecFlags) + break; + + BtlController_EmitSpriteInvisibility(BUFFER_A, TRUE); + MarkBattlerForControllerExec(gActiveBattler); + break; + case VARIOUS_JUMP_IF_TERRAIN_AFFECTED: + { + u32 flags = T1_READ_32(gBattlescriptCurrInstr + 3); + if (IsBattlerTerrainAffected(gActiveBattler, flags)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 7); + else + gBattlescriptCurrInstr += 11; + } + return; + case VARIOUS_EERIE_SPELL_PP_REDUCE: + if (gLastMoves[gActiveBattler] != 0 && gLastMoves[gActiveBattler] != 0xFFFF) + { + s32 i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gLastMoves[gActiveBattler] == gBattleMons[gActiveBattler].moves[i]) + break; + } + + if (i != MAX_MON_MOVES && gBattleMons[gActiveBattler].pp[i] != 0) + { + s32 ppToDeduct = 3; + + if (gBattleMons[gActiveBattler].pp[i] < ppToDeduct) + ppToDeduct = gBattleMons[gActiveBattler].pp[i]; + + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gActiveBattler]) + ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1); + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct) + gBattleMons[gActiveBattler].pp[i] -= ppToDeduct; + if (!(gDisableStructs[gActiveBattler].mimickedMoves & gBitTable[i]) + && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED)) + { + BtlController_EmitSetMonData(BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gActiveBattler].pp[i]), &gBattleMons[gActiveBattler].pp[i]); + MarkBattlerForControllerExec(gActiveBattler); + } + + if (gBattleMons[gActiveBattler].pp[i] == 0 && gBattleStruct->skyDropTargets[gActiveBattler] == 0xFF) + CancelMultiTurnMoves(gActiveBattler); + + gBattlescriptCurrInstr += 7; // continue + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // cant reduce pp + } + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // cant reduce pp + } + return; + case VARIOUS_JUMP_IF_TEAM_HEALTHY: + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerAlive(BATTLE_PARTNER(gActiveBattler))) + { + u8 partner = BATTLE_PARTNER(gActiveBattler); + if ((gBattleMons[gActiveBattler].hp == gBattleMons[gActiveBattler].maxHP && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)) + && (gBattleMons[partner].hp == gBattleMons[partner].maxHP && !(gBattleMons[partner].status1 & STATUS1_ANY))) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // fail + else + gBattlescriptCurrInstr += 7; + } + else // single battle + { + if (gBattleMons[gActiveBattler].hp == gBattleMons[gActiveBattler].maxHP && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // fail + else + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_TRY_HEAL_QUARTER_HP: + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + + if (gBattleMons[gActiveBattler].hp == gBattleMons[gActiveBattler].maxHP) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // fail + else + gBattlescriptCurrInstr += 7; // can heal + return; + case VARIOUS_REMOVE_TERRAIN: + gFieldTimers.terrainTimer = 0; + switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + case STATUS_FIELD_MISTY_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + break; + case STATUS_FIELD_GRASSY_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + break; + case STATUS_FIELD_ELECTRIC_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + break; + case STATUS_FIELD_PSYCHIC_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + break; + default: + gBattleCommunication[MULTISTRING_CHOOSER] = 4; // failsafe + break; + } + gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain + TryToRevertMimicry(); // restore the types of Pokémon with Mimicry + break; + case VARIOUS_JUMP_IF_UNDER_200: + // If the Pokemon is less than 200 kg, or weighing less than 441 lbs, then Sky Drop will work. Otherwise, it will fail. + if (GetBattlerWeight(gBattlerTarget) < 2000) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_SET_SKY_DROP: + gStatuses3[gBattlerTarget] |= (STATUS3_SKY_DROPPED | STATUS3_ON_AIR); + /* skyDropTargets holds the information of who is in a particular instance of Sky Drop. + This is needed in the case that multiple Pokemon use Sky Drop in the same turn or if + the target of a Sky Drop faints while in the air.*/ + gBattleStruct->skyDropTargets[gBattlerAttacker] = gBattlerTarget; + gBattleStruct->skyDropTargets[gBattlerTarget] = gBattlerAttacker; + + // End any multiturn effects caused by the target except STATUS2_LOCK_CONFUSE + gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_MULTIPLETURNS); + gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_UPROAR); + gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_BIDE); + gDisableStructs[gBattlerTarget].rolloutTimer = 0; + gDisableStructs[gBattlerTarget].furyCutterCounter = 0; + + // End any Follow Me/Rage Powder effects caused by the target + if (gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer != 0 && gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget == gBattlerTarget) + gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 0; + + break; + case VARIOUS_CLEAR_SKY_DROP: + // Check to see if the initial target of this Sky Drop fainted before the 2nd turn of Sky Drop. + // If so, make the move fail. If not, clear all of the statuses and continue the move. + if (gBattleStruct->skyDropTargets[gBattlerAttacker] == 0xFF) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + { + gBattleStruct->skyDropTargets[gBattlerAttacker] = 0xFF; + gBattleStruct->skyDropTargets[gBattlerTarget] = 0xFF; + gStatuses3[gBattlerTarget] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR); + gBattlescriptCurrInstr += 7; + } + + // Confuse target if they were in the middle of Petal Dance/Outrage/Thrash when targeted. + if (gBattleMons[gBattlerTarget].status2 & STATUS2_LOCK_CONFUSE) + gBattleScripting.moveEffect = (MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN); + return; + case VARIOUS_SKY_DROP_YAWN: // If the mon that's sleeping due to Yawn was holding a Pokemon in Sky Drop, release the target and clear Sky Drop data. + if (gBattleStruct->skyDropTargets[gEffectBattler] != 0xFF && !(gStatuses3[gEffectBattler] & STATUS3_SKY_DROPPED)) + { + // Set the target of Sky Drop as gEffectBattler + gEffectBattler = gBattleStruct->skyDropTargets[gEffectBattler]; + + // Clear skyDropTargets data + gBattleStruct->skyDropTargets[gBattleStruct->skyDropTargets[gEffectBattler]] = 0xFF; + gBattleStruct->skyDropTargets[gEffectBattler] = 0xFF; + + // If the target was in the middle of Outrage/Thrash/etc. when targeted by Sky Drop, confuse them on release and do proper animation + if (gBattleMons[gEffectBattler].status2 & STATUS2_LOCK_CONFUSE && CanBeConfused(gEffectBattler)) + { + gBattleMons[gEffectBattler].status2 &= ~(STATUS2_LOCK_CONFUSE); + gBattlerAttacker = gEffectBattler; + gBattleMons[gBattlerTarget].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); + gBattlescriptCurrInstr = BattleScript_ThrashConfuses; + return; + } + } + break; + case VARIOUS_JUMP_IF_PRANKSTER_BLOCKED: + if (BlocksPrankster(gCurrentMove, gBattlerAttacker, gActiveBattler, TRUE)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER: + { + bool8 shouldNotClear = FALSE; + + for (i = 0; i < gBattlersCount; i++) + { + u32 ability = GetBattlerAbility(i); + if (((ability == ABILITY_DESOLATE_LAND && gBattleWeather & B_WEATHER_SUN_PRIMAL) + || (ability == ABILITY_PRIMORDIAL_SEA && gBattleWeather & B_WEATHER_RAIN_PRIMAL) + || (ability == ABILITY_DELTA_STREAM && gBattleWeather & B_WEATHER_STRONG_WINDS)) + && IsBattlerAlive(i)) + shouldNotClear = TRUE; + } + if (gBattleWeather & B_WEATHER_SUN_PRIMAL && !shouldNotClear) + { + gBattleWeather &= ~B_WEATHER_SUN_PRIMAL; + PrepareStringBattle(STRINGID_EXTREMESUNLIGHTFADED, gActiveBattler); + gBattleCommunication[MSG_DISPLAY] = 1; + } + else if (gBattleWeather & B_WEATHER_RAIN_PRIMAL && !shouldNotClear) + { + gBattleWeather &= ~B_WEATHER_RAIN_PRIMAL; + PrepareStringBattle(STRINGID_HEAVYRAINLIFTED, gActiveBattler); + gBattleCommunication[MSG_DISPLAY] = 1; + } + else if (gBattleWeather & B_WEATHER_STRONG_WINDS && !shouldNotClear) + { + gBattleWeather &= ~B_WEATHER_STRONG_WINDS; + PrepareStringBattle(STRINGID_STRONGWINDSDISSIPATED, gActiveBattler); + gBattleCommunication[MSG_DISPLAY] = 1; + } + break; + } + case VARIOUS_TRY_END_NEUTRALIZING_GAS: + if (gSpecialStatuses[gActiveBattler].neutralizingGasRemoved) + { + gSpecialStatuses[gActiveBattler].neutralizingGasRemoved = FALSE; + BattleScriptPush(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; + return; + } + break; + case VARIOUS_GET_ROTOTILLER_TARGETS: + // Gets the battlers to be affected by rototiller. If there are none, print 'But it failed!' + { + u32 count = 0; + for (i = 0; i < gBattlersCount; i++) + { + gSpecialStatuses[i].rototillerAffected = FALSE; + if (IsRototillerAffected(i)) + { + gSpecialStatuses[i].rototillerAffected = TRUE; + count++; + } + } + + if (count == 0) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // Rototiller fails + else + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED: + if (gSpecialStatuses[gActiveBattler].rototillerAffected) + { + gSpecialStatuses[gActiveBattler].rototillerAffected = FALSE; + gBattlescriptCurrInstr += 7; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // Unaffected by rototiller - print STRINGID_NOEFFECTONTARGET + } + return; + case VARIOUS_TRY_ACTIVATE_BATTLE_BOND: + if (gBattleMons[gBattlerAttacker].species == SPECIES_GRENINJA_BATTLE_BOND + && HasAttackerFaintedTarget() + && CalculateEnemyPartyCount() > 1) + { + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species); + gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerAttacker]] = gBattleMons[gBattlerAttacker].species; + gBattleMons[gBattlerAttacker].species = SPECIES_GRENINJA_ASH; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BattleBondActivatesOnMoveEndAttacker; + return; + } + break; + case VARIOUS_CONSUME_BERRY: + if (ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item) == HOLD_EFFECT_NONE) + { + gBattlescriptCurrInstr += 4; + return; + } + + gBattleScripting.battler = gEffectBattler = gBattlerTarget = gActiveBattler; // Cover all berry effect battlerId cases. e.g. ChangeStatBuffs uses target ID + // Do move end berry effects for just a single battler, instead of looping through all battlers + if (ItemBattleEffects(ITEMEFFECT_BATTLER_MOVE_END, gActiveBattler, FALSE)) + return; + + if (gBattlescriptCurrInstr[3]) + { + gBattleMons[gActiveBattler].item = gBattleStruct->changedItems[gActiveBattler]; + gBattleStruct->changedItems[gActiveBattler] = ITEM_NONE; + gBattleResources->flags->flags[gActiveBattler] &= ~RESOURCE_FLAG_UNBURDEN; + } + + gBattlescriptCurrInstr += 4; + return; + case VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL: + { + bool8 canDoPrimalReversion = FALSE; + + for (i = 0; i < EVOS_PER_MON; i++) + { + if (gEvolutionTable[gBattleMons[gActiveBattler].species][i].method == EVO_PRIMAL_REVERSION + && gEvolutionTable[gBattleMons[gActiveBattler].species][i].param == gBattleMons[gActiveBattler].item) + canDoPrimalReversion = TRUE; + } + if (!canDoPrimalReversion) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + } + case VARIOUS_JUMP_IF_WEATHER_AFFECTED: + { + u32 weatherFlags = T1_READ_32(gBattlescriptCurrInstr + 3); + if (IsBattlerWeatherAffected(gActiveBattler, weatherFlags)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 7); + else + gBattlescriptCurrInstr += 11; + } + return; + case VARIOUS_APPLY_PLASMA_FISTS: + for (i = 0; i < gBattlersCount; i++) + gStatuses4[i] |= STATUS4_PLASMA_FISTS; + break; + case VARIOUS_JUMP_IF_SPECIES: + if (gBattleMons[gActiveBattler].species == T1_READ_16(gBattlescriptCurrInstr + 3)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + else + gBattlescriptCurrInstr += 9; + return; + case VARIOUS_PHOTON_GEYSER_CHECK: + gBattleStruct->swapDamageCategory = (GetSplitBasedOnStats(gActiveBattler) == SPLIT_SPECIAL); + break; + case VARIOUS_SHELL_SIDE_ARM_CHECK: // 0% chance GameFreak actually checks this way according to DaWobblefet, but this is the only functional explanation at the moment + { + u32 attackerAtkStat = gBattleMons[gBattlerAttacker].attack; + u32 targetDefStat = gBattleMons[gBattlerTarget].defense; + u32 attackerSpAtkStat = gBattleMons[gBattlerAttacker].spAttack; + u32 targetSpDefStat = gBattleMons[gBattlerTarget].spDefense; + u8 statStage; + u32 physical; + u32 special; + + gBattleStruct->swapDamageCategory = FALSE; + + statStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; + attackerAtkStat *= gStatStageRatios[statStage][0]; + attackerAtkStat /= gStatStageRatios[statStage][1]; + + statStage = gBattleMons[gBattlerTarget].statStages[STAT_DEF]; + targetDefStat *= gStatStageRatios[statStage][0]; + targetDefStat /= gStatStageRatios[statStage][1]; + + physical = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gBattleMoves[gCurrentMove].power * attackerAtkStat) / targetDefStat) / 50); + + statStage = gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]; + attackerSpAtkStat *= gStatStageRatios[statStage][0]; + attackerSpAtkStat /= gStatStageRatios[statStage][1]; + + statStage = gBattleMons[gBattlerTarget].statStages[STAT_SPDEF]; + targetSpDefStat *= gStatStageRatios[statStage][0]; + targetSpDefStat /= gStatStageRatios[statStage][1]; + + special = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gBattleMoves[gCurrentMove].power * attackerSpAtkStat) / targetSpDefStat) / 50); + + if (((physical > special) || (physical == special && (Random() % 2) == 0))) + gBattleStruct->swapDamageCategory = TRUE; + break; + } + case VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED: + if (IsLeafGuardProtected(gActiveBattler)) + { + gBattlerAbility = gActiveBattler; + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_SET_ATTACKER_STICKY_WEB_USER: + // For Mirror Armor: "If the Pokémon with this Ability is affected by Sticky Web, the effect is reflected back to the Pokémon which set it up. + // If Pokémon which set up Sticky Web is not on the field, no Pokémon have their Speed lowered." + gBattlerAttacker = gBattlerTarget; // Initialize 'fail' condition + SET_STATCHANGER(STAT_SPEED, 1, TRUE); + if (gBattleStruct->stickyWebUser != 0xFF) + gBattlerAttacker = gBattleStruct->stickyWebUser; + break; + case VARIOUS_CUT_1_3_HP_RAISE_STATS: + { + bool8 atLeastOneStatBoosted = FALSE; + u16 hpFraction = max(1, gBattleMons[gBattlerAttacker].maxHP / 3); + + for (i = 1; i < NUM_STATS; i++) + { + if (CompareStat(gBattlerAttacker, i, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + atLeastOneStatBoosted = TRUE; + break; + } + } + if (atLeastOneStatBoosted && gBattleMons[gBattlerAttacker].hp > hpFraction) + { + gBattleMoveDamage = hpFraction; + gBattlescriptCurrInstr += 7; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + } + return; + case VARIOUS_SET_OCTOLOCK: + if (gDisableStructs[gActiveBattler].octolock) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gDisableStructs[gActiveBattler].octolock = TRUE; + gBattleMons[gActiveBattler].status2 |= STATUS2_ESCAPE_PREVENTION; + gDisableStructs[gActiveBattler].battlerPreventingEscape = gBattlerAttacker; + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_CHECK_POLTERGEIST: + if (gBattleMons[gActiveBattler].item == ITEM_NONE + || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM + || GetBattlerAbility(gActiveBattler) == ABILITY_KLUTZ) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].item); + gLastUsedItem = gBattleMons[gActiveBattler].item; + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_TRY_NO_RETREAT: + if (gDisableStructs[gActiveBattler].noRetreat) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + if (!(gBattleMons[gActiveBattler].status2 & STATUS2_ESCAPE_PREVENTION)) + gDisableStructs[gActiveBattler].noRetreat = TRUE; + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_TRY_TAR_SHOT: + if (gDisableStructs[gActiveBattler].tarShot) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gDisableStructs[gActiveBattler].tarShot = TRUE; + gBattlescriptCurrInstr += 7; + } + return; + case VARIOUS_CAN_TAR_SHOT_WORK: + // Tar Shot will fail if it's already been used on the target and its speed can't be lowered further + if (!gDisableStructs[gActiveBattler].tarShot + && CompareStat(gActiveBattler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)) + gBattlescriptCurrInstr += 7; + else + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + return; + case VARIOUS_TRY_TO_APPLY_MIMICRY: + { + bool8 isMimicryDone = FALSE; + + if (GetBattlerAbility(gActiveBattler) == ABILITY_MIMICRY) + { + TryToApplyMimicry(gActiveBattler, TRUE); + isMimicryDone = TRUE; + } + if (!isMimicryDone) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + } + case VARIOUS_JUMP_IF_CANT_FLING: + if (!CanFling(gActiveBattler)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; + return; + case VARIOUS_CURE_CERTAIN_STATUSES: + // Check infatuation + if (gBattleMons[gActiveBattler].status2 & STATUS2_INFATUATION) + { + gBattleMons[gActiveBattler].status2 &= ~(STATUS2_INFATUATION); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_INFATUATION; // STRINGID_TARGETGOTOVERINFATUATION + StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); + } + // Check taunt + if (gDisableStructs[gActiveBattler].tauntTimer != 0) + { + gDisableStructs[gActiveBattler].tauntTimer = gDisableStructs[gActiveBattler].tauntTimer2 = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); + } + // Check encore + if (gDisableStructs[gActiveBattler].encoreTimer != 0) + { + gDisableStructs[gActiveBattler].encoredMove = 0; + gDisableStructs[gActiveBattler].encoreTimerStartValue = gDisableStructs[gActiveBattler].encoreTimer = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; // STRINGID_PKMNENCOREENDED + } + // Check torment + if (gBattleMons[gActiveBattler].status2 & STATUS2_TORMENT) + { + gBattleMons[gActiveBattler].status2 &= ~(STATUS2_TORMENT); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TORMENT; + } + // Check heal block + if (gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK) + { + gStatuses3[gActiveBattler] &= ~(STATUS3_HEAL_BLOCK); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK; + } + // Check disable + if (gDisableStructs[gActiveBattler].disableTimer != 0) + { + gDisableStructs[gActiveBattler].disableTimer = gDisableStructs[gActiveBattler].disableTimerStartValue = 0; + gDisableStructs[gActiveBattler].disabledMove = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE; + } + gBattlescriptCurrInstr += 3; + return; + case VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES: + gActiveBattler = gBattlerTarget; + for (i = 0; i < NUM_BATTLE_STATS; i++) + if (gBattleMons[gActiveBattler].statStages[i] < DEFAULT_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; + gBattlescriptCurrInstr += 3; + return; + case VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY: + if (ItemId_GetPocket(gLastUsedItem) == POCKET_BERRIES) + gBattlescriptCurrInstr += 7; + else + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + return; + case VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT: + if (ItemId_GetHoldEffect(gLastUsedItem) == gBattlescriptCurrInstr[3]) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + else + gBattlescriptCurrInstr += 8; + return; + case VARIOUS_SAVE_BATTLER_ITEM: + gBattleResources->battleHistory->heldItems[gActiveBattler] = gBattleMons[gActiveBattler].item; + break; + case VARIOUS_RESTORE_BATTLER_ITEM: + gBattleMons[gActiveBattler].item = gBattleResources->battleHistory->heldItems[gActiveBattler]; + break; + case VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM: + gBattleMons[gActiveBattler].item = gLastUsedItem; + break; + case VARIOUS_SET_BEAK_BLAST: + gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE; + break; + case VARIOUS_SWAP_SIDE_STATUSES: + CourtChangeSwapSideStatuses(); + break; + } // End of switch (gBattlescriptCurrInstr[2]) gBattlescriptCurrInstr += 3; } -static void Cmd_setprotectlike(void) // protect and endure +static void Cmd_setprotectlike(void) { - bool8 notLastTurn = TRUE; - u16 lastMove = gLastResultingMoves[gBattlerAttacker]; + bool32 fail = TRUE; + bool32 notLastTurn = TRUE; - if (lastMove != MOVE_PROTECT && lastMove != MOVE_DETECT && lastMove != MOVE_ENDURE) + if (!(gBattleMoves[gLastResultingMoves[gBattlerAttacker]].flags & FLAG_PROTECTION_MOVE)) gDisableStructs[gBattlerAttacker].protectUses = 0; if (gCurrentTurnActionNumber == (gBattlersCount - 1)) @@ -6452,19 +9726,76 @@ static void Cmd_setprotectlike(void) // protect and endure if (sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] >= Random() && notLastTurn) { - if (gBattleMoves[gCurrentMove].effect == EFFECT_PROTECT) + if (!gBattleMoves[gCurrentMove].argument) // Protects one mon only. { - gProtectStructs[gBattlerAttacker].protected = 1; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF; + if (gBattleMoves[gCurrentMove].effect == EFFECT_ENDURE) + { + gProtectStructs[gBattlerAttacker].endured = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BRACED_ITSELF; + } + else if (gCurrentMove == MOVE_DETECT || gCurrentMove == MOVE_PROTECT) + { + gProtectStructs[gBattlerAttacker].protected = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF; + } + else if (gCurrentMove == MOVE_SPIKY_SHIELD) + { + gProtectStructs[gBattlerAttacker].spikyShielded = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF; + } + else if (gCurrentMove == MOVE_KINGS_SHIELD) + { + gProtectStructs[gBattlerAttacker].kingsShielded = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF; + } + else if (gCurrentMove == MOVE_BANEFUL_BUNKER) + { + gProtectStructs[gBattlerAttacker].banefulBunkered = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF; + } + else if (gCurrentMove == MOVE_OBSTRUCT) + { + gProtectStructs[gBattlerAttacker].obstructed = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + + gDisableStructs[gBattlerAttacker].protectUses++; + fail = FALSE; } - if (gBattleMoves[gCurrentMove].effect == EFFECT_ENDURE) + else // Protects the whole side. { - gProtectStructs[gBattlerAttacker].endured = 1; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BRACED_ITSELF; + u8 side = GetBattlerSide(gBattlerAttacker); + if (gCurrentMove == MOVE_WIDE_GUARD && !(gSideStatuses[side] & SIDE_STATUS_WIDE_GUARD)) + { + gSideStatuses[side] |= SIDE_STATUS_WIDE_GUARD; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_TEAM; + gDisableStructs[gBattlerAttacker].protectUses++; + fail = FALSE; + } + else if (gCurrentMove == MOVE_QUICK_GUARD && !(gSideStatuses[side] & SIDE_STATUS_QUICK_GUARD)) + { + gSideStatuses[side] |= SIDE_STATUS_QUICK_GUARD; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_TEAM; + gDisableStructs[gBattlerAttacker].protectUses++; + fail = FALSE; + } + else if (gCurrentMove == MOVE_CRAFTY_SHIELD && !(gSideStatuses[side] & SIDE_STATUS_CRAFTY_SHIELD)) + { + gSideStatuses[side] |= SIDE_STATUS_CRAFTY_SHIELD; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_TEAM; + gDisableStructs[gBattlerAttacker].protectUses++; + fail = FALSE; + } + else if (gCurrentMove == MOVE_MAT_BLOCK && !(gSideStatuses[side] & SIDE_STATUS_MAT_BLOCK)) + { + gSideStatuses[side] |= SIDE_STATUS_MAT_BLOCK; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_TEAM; + fail = FALSE; + } } - gDisableStructs[gBattlerAttacker].protectUses++; } - else + + if (fail) { gDisableStructs[gBattlerAttacker].protectUses = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECT_FAILED; @@ -6474,39 +9805,33 @@ static void Cmd_setprotectlike(void) // protect and endure gBattlescriptCurrInstr++; } -static void Cmd_faintifabilitynotdamp(void) +static void Cmd_tryexplosion(void) { if (gBattleControllerExecFlags) return; + if ((gBattlerTarget = IsAbilityOnField(ABILITY_DAMP))) + { + // Failed, a battler has Damp + gLastUsedAbility = ABILITY_DAMP; + RecordAbilityBattle(--gBattlerTarget, ABILITY_DAMP); + gBattlescriptCurrInstr = BattleScript_DampStopsExplosion; + return; + } + + gActiveBattler = gBattlerAttacker; + gBattleMoveDamage = gBattleMons[gActiveBattler].hp; + BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr++; + for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { - if (gBattleMons[gBattlerTarget].ability == ABILITY_DAMP) + if (gBattlerTarget == gBattlerAttacker) + continue; + if (IsBattlerAlive(gBattlerTarget)) break; } - - if (gBattlerTarget == gBattlersCount) - { - gActiveBattler = gBattlerAttacker; - gBattleMoveDamage = gBattleMons[gActiveBattler].hp; - BtlController_EmitHealthBarUpdate(0, INSTANT_HP_BAR_DROP); - MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr++; - - for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) - { - if (gBattlerTarget == gBattlerAttacker) - continue; - if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget])) - break; - } - } - else - { - gLastUsedAbility = ABILITY_DAMP; - RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); - gBattlescriptCurrInstr = BattleScript_DampStopsExplosion; - } } static void Cmd_setatkhptozero(void) @@ -6516,7 +9841,7 @@ static void Cmd_setatkhptozero(void) gActiveBattler = gBattlerAttacker; gBattleMons[gActiveBattler].hp = 0; - BtlController_EmitSetMonData(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBattler].hp); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].hp), &gBattleMons[gActiveBattler].hp); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr++; @@ -6526,30 +9851,23 @@ static void Cmd_jumpifnexttargetvalid(void) { const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + for (gBattlerTarget++; gBattlerTarget < gBattlersCount; gBattlerTarget++) { - for (gBattlerTarget++; ; gBattlerTarget++) - { - if (gBattlerTarget == gBattlerAttacker) - continue; - if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget])) - break; - } + if (gBattlerTarget == gBattlerAttacker && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER)) + continue; + if (IsBattlerAlive(gBattlerTarget)) + break; + } - if (gBattlerTarget >= gBattlersCount) - gBattlescriptCurrInstr += 5; - else - gBattlescriptCurrInstr = jumpPtr; - } - else - { + if (gBattlerTarget >= gBattlersCount) gBattlescriptCurrInstr += 5; - } + else + gBattlescriptCurrInstr = jumpPtr; } static void Cmd_tryhealhalfhealth(void) { - const u8* failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gBattlescriptCurrInstr[5] == BS_ATTACKER) gBattlerTarget = gBattlerAttacker; @@ -6570,63 +9888,56 @@ static void Cmd_trymirrormove(void) s32 validMovesCount; s32 i; u16 move; - u16 movesArray[4]; - - for (i = 0; i < 3; i++) - movesArray[i] = 0; + u16 validMoves[MAX_BATTLERS_COUNT] = {0}; for (validMovesCount = 0, i = 0; i < gBattlersCount; i++) { if (i != gBattlerAttacker) { - move = *(i * 2 + gBattlerAttacker * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) - | (*(i * 2 + gBattlerAttacker * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) << 8); + move = gBattleStruct->lastTakenMoveFrom[gBattlerAttacker][i]; - if (move != 0 && move != 0xFFFF) + if (move != MOVE_NONE && move != MOVE_UNAVAILABLE) { - movesArray[validMovesCount] = move; + validMoves[validMovesCount] = move; validMovesCount++; } } } - move = *(gBattleStruct->lastTakenMove + gBattlerAttacker * 2 + 0) - | (*(gBattleStruct->lastTakenMove + gBattlerAttacker * 2 + 1) << 8); + move = gBattleStruct->lastTakenMove[gBattlerAttacker]; - if (move != 0 && move != 0xFFFF) + if (move != MOVE_NONE && move != MOVE_UNAVAILABLE) { - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gCurrentMove = move; - gBattlerTarget = GetMoveTarget(gCurrentMove, 0); + gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; } - else if (validMovesCount) + else if (validMovesCount != 0) { - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; i = Random() % validMovesCount; - gCurrentMove = movesArray[i]; - gBattlerTarget = GetMoveTarget(gCurrentMove, 0); + gCurrentMove = validMoves[i]; + gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; } - else + else // no valid moves found { - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1; + gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; gBattlescriptCurrInstr++; } } static void Cmd_setrain(void) { - if (gBattleWeather & WEATHER_RAIN_ANY) + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_RAIN, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED; } else { - gBattleWeather = WEATHER_RAIN_TEMPORARY; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_RAIN; - gWishFutureKnock.weatherDuration = 5; } gBattlescriptCurrInstr++; } @@ -6641,7 +9952,10 @@ static void Cmd_setreflect(void) else { gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_REFLECT; - gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectTimer = 5; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectTimer = 8; + else + gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectTimer = 5; gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectBattlerId = gBattlerAttacker; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2) @@ -6685,12 +9999,34 @@ static void Cmd_manipulatedamage(void) gBattleMoveDamage /= 2; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - if ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage) + if (B_RECOIL_IF_MISS_DMG >= GEN_5) + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2; + if ((B_RECOIL_IF_MISS_DMG <= GEN_4) && ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage)) gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2; break; case DMG_DOUBLED: gBattleMoveDamage *= 2; break; + case DMG_1_8_TARGET_HP: + gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + break; + case DMG_FULL_ATTACKER_HP: + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP; + break; + case DMG_CURR_ATTACKER_HP: + gBattleMoveDamage = gBattleMons[gBattlerAttacker].hp; + break; + case DMG_BIG_ROOT: + gBattleMoveDamage = GetDrainedBigRootHp(gBattlerAttacker, gBattleMoveDamage); + break; + case DMG_1_2_ATTACKER_HP: + gBattleMoveDamage = (gBattleMons[gBattlerAttacker].maxHP + 1) / 2; // Half of Max HP Rounded UP + break; + case DMG_RECOIL_FROM_IMMUNE: + gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2; + break; } gBattlescriptCurrInstr += 2; @@ -6706,6 +10042,14 @@ static void Cmd_trysetrest(void) { gBattlescriptCurrInstr = failJump; } + else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) + { + gBattlescriptCurrInstr = BattleScript_ElectricTerrainPrevents; + } + else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_MISTY_TERRAIN)) + { + gBattlescriptCurrInstr = BattleScript_MistyTerrainPrevents; + } else { if (gBattleMons[gBattlerTarget].status1 & ((u8)(~STATUS1_SLEEP))) @@ -6714,7 +10058,7 @@ static void Cmd_trysetrest(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_REST; gBattleMons[gBattlerTarget].status1 = STATUS1_SLEEP_TURN(3); - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 5; } @@ -6722,7 +10066,7 @@ static void Cmd_trysetrest(void) static void Cmd_jumpifnotfirstturn(void) { - const u8* failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gDisableStructs[gBattlerAttacker].isFirstTurn) gBattlescriptCurrInstr += 5; @@ -6730,9 +10074,17 @@ static void Cmd_jumpifnotfirstturn(void) gBattlescriptCurrInstr = failJump; } -static void Cmd_nop(void) +static void Cmd_setmiracleeye(void) { - gBattlescriptCurrInstr++; + if (!(gStatuses3[gBattlerTarget] & STATUS3_MIRACLE_EYED)) + { + gStatuses3[gBattlerTarget] |= STATUS3_MIRACLE_EYED; + gBattlescriptCurrInstr += 5; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + } } bool8 UproarWakeUpCheck(u8 battlerId) @@ -6741,7 +10093,7 @@ bool8 UproarWakeUpCheck(u8 battlerId) for (i = 0; i < gBattlersCount; i++) { - if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[battlerId].ability == ABILITY_SOUNDPROOF) + if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || GetBattlerAbility(battlerId) == ABILITY_SOUNDPROOF) continue; gBattleScripting.battler = i; @@ -6765,15 +10117,15 @@ bool8 UproarWakeUpCheck(u8 battlerId) static void Cmd_jumpifcantmakeasleep(void) { const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + u32 ability = GetBattlerAbility(gBattlerTarget); if (UproarWakeUpCheck(gBattlerTarget)) { gBattlescriptCurrInstr = jumpPtr; } - else if (gBattleMons[gBattlerTarget].ability == ABILITY_INSOMNIA - || gBattleMons[gBattlerTarget].ability == ABILITY_VITAL_SPIRIT) + else if (ability == ABILITY_INSOMNIA || ability == ABILITY_VITAL_SPIRIT) { - gLastUsedAbility = gBattleMons[gBattlerTarget].ability; + gLastUsedAbility = ability; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAYED_AWAKE_USING; gBattlescriptCurrInstr = jumpPtr; RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); @@ -6786,25 +10138,38 @@ static void Cmd_jumpifcantmakeasleep(void) static void Cmd_stockpile(void) { - if (gDisableStructs[gBattlerAttacker].stockpileCounter == 3) + switch (gBattlescriptCurrInstr[1]) { - gMoveResultFlags |= MOVE_RESULT_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_STOCKPILE; + case 0: + if (gDisableStructs[gBattlerAttacker].stockpileCounter >= 3) + { + gMoveResultFlags |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_STOCKPILE; + } + else + { + gDisableStructs[gBattlerAttacker].stockpileCounter++; + gDisableStructs[gBattlerAttacker].stockpileBeforeDef = gBattleMons[gBattlerAttacker].statStages[STAT_DEF]; + gDisableStructs[gBattlerAttacker].stockpileBeforeSpDef = gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF]; + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[gBattlerAttacker].stockpileCounter); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STOCKPILED; + } + break; + case 1: // Save def/sp def stats. + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + { + gDisableStructs[gBattlerAttacker].stockpileDef += gBattleMons[gBattlerAttacker].statStages[STAT_DEF] - gDisableStructs[gBattlerAttacker].stockpileBeforeDef; + gDisableStructs[gBattlerAttacker].stockpileSpDef += gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] - gDisableStructs[gBattlerAttacker].stockpileBeforeSpDef; + } + break; } - else - { - gDisableStructs[gBattlerAttacker].stockpileCounter++; - PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[gBattlerAttacker].stockpileCounter) - - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STOCKPILED; - } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr += 2; } static void Cmd_stockpiletobasedamage(void) { - const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0) { gBattlescriptCurrInstr = jumpPtr; @@ -6812,94 +10177,188 @@ static void Cmd_stockpiletobasedamage(void) else { if (gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED) - { - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove, - gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)], 0, - 0, gBattlerAttacker, gBattlerTarget) - * gDisableStructs[gBattlerAttacker].stockpileCounter; gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; - if (gProtectStructs[gBattlerAttacker].helpingHand) - gBattleMoveDamage = gBattleMoveDamage * 15 / 10; - } - gDisableStructs[gBattlerAttacker].stockpileCounter = 0; + // Restore stat changes from stockpile. + gBattleMons[gBattlerAttacker].statStages[STAT_DEF] -= gDisableStructs[gBattlerAttacker].stockpileDef; + gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] -= gDisableStructs[gBattlerAttacker].stockpileSpDef; gBattlescriptCurrInstr += 5; } } static void Cmd_stockpiletohpheal(void) { - const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0) { gBattlescriptCurrInstr = jumpPtr; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FAILED; } - else if (gBattleMons[gBattlerAttacker].maxHP == gBattleMons[gBattlerAttacker].hp) - { - gDisableStructs[gBattlerAttacker].stockpileCounter = 0; - gBattlescriptCurrInstr = jumpPtr; - gBattlerTarget = gBattlerAttacker; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FULL_HP; - } else { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter)); + if (gBattleMons[gBattlerAttacker].maxHP == gBattleMons[gBattlerAttacker].hp) + { + gDisableStructs[gBattlerAttacker].stockpileCounter = 0; + gBattlescriptCurrInstr = jumpPtr; + gBattlerTarget = gBattlerAttacker; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FULL_HP; + } + else + { + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter)); - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; - gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; - gDisableStructs[gBattlerAttacker].stockpileCounter = 0; - gBattlescriptCurrInstr += 5; - gBattlerTarget = gBattlerAttacker; + gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; + gDisableStructs[gBattlerAttacker].stockpileCounter = 0; + gBattlescriptCurrInstr += 5; + gBattlerTarget = gBattlerAttacker; + } + + // Restore stat changes from stockpile. + gBattleMons[gBattlerAttacker].statStages[STAT_DEF] -= gDisableStructs[gBattlerAttacker].stockpileDef; + gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] -= gDisableStructs[gBattlerAttacker].stockpileSpDef; } } -static void Cmd_negativedamage(void) +// Sign change for drained HP handled in GetDrainedBigRootHp +static void Cmd_setdrainedhp(void) { - gBattleMoveDamage = -(gHpDealt / 2); + if (gBattleMoves[gCurrentMove].argument != 0) + gBattleMoveDamage = (gHpDealt * gBattleMoves[gCurrentMove].argument / 100); + else + gBattleMoveDamage = (gHpDealt / 2); + if (gBattleMoveDamage == 0) - gBattleMoveDamage = -1; + gBattleMoveDamage = 1; gBattlescriptCurrInstr++; } -#define STAT_BUFF_WORKED 0 -#define STAT_BUFF_DIDNT_WORK 1 - -static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) +static u16 ReverseStatChangeMoveEffect(u16 moveEffect) { - bool8 certain = FALSE; - bool8 notProtectAffected = FALSE; - u32 index; + switch (moveEffect) + { + // +1 + case MOVE_EFFECT_ATK_PLUS_1: + return MOVE_EFFECT_ATK_MINUS_1; + case MOVE_EFFECT_DEF_PLUS_1: + return MOVE_EFFECT_DEF_MINUS_1; + case MOVE_EFFECT_SPD_PLUS_1: + return MOVE_EFFECT_SPD_MINUS_1; + case MOVE_EFFECT_SP_ATK_PLUS_1: + return MOVE_EFFECT_SP_ATK_MINUS_1; + case MOVE_EFFECT_SP_DEF_PLUS_1: + return MOVE_EFFECT_SP_DEF_MINUS_1; + case MOVE_EFFECT_ACC_PLUS_1: + return MOVE_EFFECT_ACC_MINUS_1; + case MOVE_EFFECT_EVS_PLUS_1: + return MOVE_EFFECT_EVS_MINUS_1; + // -1 + case MOVE_EFFECT_ATK_MINUS_1: + return MOVE_EFFECT_ATK_PLUS_1; + case MOVE_EFFECT_DEF_MINUS_1: + return MOVE_EFFECT_DEF_PLUS_1; + case MOVE_EFFECT_SPD_MINUS_1: + return MOVE_EFFECT_SPD_PLUS_1; + case MOVE_EFFECT_SP_ATK_MINUS_1: + return MOVE_EFFECT_SP_ATK_PLUS_1; + case MOVE_EFFECT_SP_DEF_MINUS_1: + return MOVE_EFFECT_SP_DEF_PLUS_1; + case MOVE_EFFECT_ACC_MINUS_1: + return MOVE_EFFECT_ACC_PLUS_1; + case MOVE_EFFECT_EVS_MINUS_1: + // +2 + case MOVE_EFFECT_ATK_PLUS_2: + return MOVE_EFFECT_ATK_MINUS_2; + case MOVE_EFFECT_DEF_PLUS_2: + return MOVE_EFFECT_DEF_MINUS_2; + case MOVE_EFFECT_SPD_PLUS_2: + return MOVE_EFFECT_SPD_MINUS_2; + case MOVE_EFFECT_SP_ATK_PLUS_2: + return MOVE_EFFECT_SP_ATK_MINUS_2; + case MOVE_EFFECT_SP_DEF_PLUS_2: + return MOVE_EFFECT_SP_DEF_MINUS_2; + case MOVE_EFFECT_ACC_PLUS_2: + return MOVE_EFFECT_ACC_MINUS_2; + case MOVE_EFFECT_EVS_PLUS_2: + return MOVE_EFFECT_EVS_MINUS_2; + // -2 + case MOVE_EFFECT_ATK_MINUS_2: + return MOVE_EFFECT_ATK_PLUS_2; + case MOVE_EFFECT_DEF_MINUS_2: + return MOVE_EFFECT_DEF_PLUS_2; + case MOVE_EFFECT_SPD_MINUS_2: + return MOVE_EFFECT_SPD_PLUS_2; + case MOVE_EFFECT_SP_ATK_MINUS_2: + return MOVE_EFFECT_SP_ATK_PLUS_2; + case MOVE_EFFECT_SP_DEF_MINUS_2: + return MOVE_EFFECT_SP_DEF_PLUS_2; + case MOVE_EFFECT_ACC_MINUS_2: + return MOVE_EFFECT_ACC_PLUS_2; + case MOVE_EFFECT_EVS_MINUS_2: + return MOVE_EFFECT_EVS_PLUS_2; + } +} - if (flags & MOVE_EFFECT_AFFECTS_USER) +#define STAT_CHANGE_WORKED 0 +#define STAT_CHANGE_DIDNT_WORK 1 + +static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr) +{ + bool32 certain = FALSE; + bool32 notProtectAffected = FALSE; + u32 index; + bool32 affectsUser = (flags & MOVE_EFFECT_AFFECTS_USER); + u16 activeBattlerAbility; + + if (affectsUser) gActiveBattler = gBattlerAttacker; else gActiveBattler = gBattlerTarget; - flags &= ~(MOVE_EFFECT_AFFECTS_USER); + activeBattlerAbility = GetBattlerAbility(gActiveBattler); + + gSpecialStatuses[gActiveBattler].changedStatsBattlerId = gBattlerAttacker; + + flags &= ~MOVE_EFFECT_AFFECTS_USER; if (flags & MOVE_EFFECT_CERTAIN) certain++; - flags &= ~(MOVE_EFFECT_CERTAIN); + flags &= ~MOVE_EFFECT_CERTAIN; - if (flags & STAT_BUFF_NOT_PROTECT_AFFECTED) + if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED) notProtectAffected++; - flags &= ~(STAT_BUFF_NOT_PROTECT_AFFECTED); + flags &= ~STAT_CHANGE_NOT_PROTECT_AFFECTED; - PREPARE_STAT_BUFFER(gBattleTextBuff1, statId) + if (activeBattlerAbility == ABILITY_CONTRARY) + { + statValue ^= STAT_BUFF_NEGATIVE; + gBattleScripting.statChanger ^= STAT_BUFF_NEGATIVE; + if (flags & STAT_CHANGE_UPDATE_MOVE_EFFECT) + { + flags &= ~STAT_CHANGE_UPDATE_MOVE_EFFECT; + gBattleScripting.moveEffect = ReverseStatChangeMoveEffect(gBattleScripting.moveEffect); + } + } + else if (activeBattlerAbility == ABILITY_SIMPLE) + { + statValue = (SET_STAT_BUFF_VALUE(GET_STAT_BUFF_VALUE(statValue) * 2)) | ((statValue <= -1) ? STAT_BUFF_NEGATIVE : 0); + } + + PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); if (statValue <= -1) // Stat decrease. { if (gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer - && !certain && gCurrentMove != MOVE_CURSE) + && !certain && gCurrentMove != MOVE_CURSE + && !(gActiveBattler == gBattlerTarget && GetBattlerAbility(gBattlerAttacker) == ABILITY_INFILTRATOR)) { - if (flags == STAT_BUFF_ALLOW_PTR) + if (flags == STAT_CHANGE_ALLOW_PTR) { if (gSpecialStatuses[gActiveBattler].statLowered) { @@ -6910,22 +10369,23 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) BattleScriptPush(BS_ptr); gBattleScripting.battler = gActiveBattler; gBattlescriptCurrInstr = BattleScript_MistProtected; - gSpecialStatuses[gActiveBattler].statLowered = 1; + gSpecialStatuses[gActiveBattler].statLowered = TRUE; } } - return STAT_BUFF_DIDNT_WORK; + return STAT_CHANGE_DIDNT_WORK; } else if (gCurrentMove != MOVE_CURSE && notProtectAffected != TRUE && JumpIfMoveAffectedByProtect(0)) { gBattlescriptCurrInstr = BattleScript_ButItFailed; - return STAT_BUFF_DIDNT_WORK; + return STAT_CHANGE_DIDNT_WORK; } - else if ((gBattleMons[gActiveBattler].ability == ABILITY_CLEAR_BODY - || gBattleMons[gActiveBattler].ability == ABILITY_WHITE_SMOKE) + else if ((activeBattlerAbility == ABILITY_CLEAR_BODY + || activeBattlerAbility == ABILITY_FULL_METAL_BODY + || activeBattlerAbility == ABILITY_WHITE_SMOKE) && !certain && gCurrentMove != MOVE_CURSE) { - if (flags == STAT_BUFF_ALLOW_PTR) + if (flags == STAT_CHANGE_ALLOW_PTR) { if (gSpecialStatuses[gActiveBattler].statLowered) { @@ -6935,47 +10395,75 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) { BattleScriptPush(BS_ptr); gBattleScripting.battler = gActiveBattler; + gBattlerAbility = gActiveBattler; gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; - gLastUsedAbility = gBattleMons[gActiveBattler].ability; + gLastUsedAbility = activeBattlerAbility; RecordAbilityBattle(gActiveBattler, gLastUsedAbility); - gSpecialStatuses[gActiveBattler].statLowered = 1; + gSpecialStatuses[gActiveBattler].statLowered = TRUE; } } - return STAT_BUFF_DIDNT_WORK; + return STAT_CHANGE_DIDNT_WORK; } - else if (gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE - && !certain && statId == STAT_ACC) + else if ((index = IsFlowerVeilProtected(gActiveBattler)) && !certain) { - if (flags == STAT_BUFF_ALLOW_PTR) + if (flags == STAT_CHANGE_ALLOW_PTR) + { + if (gSpecialStatuses[gActiveBattler].statLowered) + { + gBattlescriptCurrInstr = BS_ptr; + } + else + { + BattleScriptPush(BS_ptr); + gBattleScripting.battler = gActiveBattler; + gBattlerAbility = index - 1; + gBattlescriptCurrInstr = BattleScript_FlowerVeilProtectsRet; + gLastUsedAbility = ABILITY_FLOWER_VEIL; + gSpecialStatuses[gActiveBattler].statLowered = TRUE; + } + } + return STAT_CHANGE_DIDNT_WORK; + } + else if (!certain + && ((activeBattlerAbility == ABILITY_KEEN_EYE && statId == STAT_ACC) + || (activeBattlerAbility == ABILITY_HYPER_CUTTER && statId == STAT_ATK) + || (activeBattlerAbility == ABILITY_BIG_PECKS && statId == STAT_DEF))) + { + if (flags == STAT_CHANGE_ALLOW_PTR) { BattleScriptPush(BS_ptr); gBattleScripting.battler = gActiveBattler; + gBattlerAbility = gActiveBattler; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; - gLastUsedAbility = gBattleMons[gActiveBattler].ability; + gLastUsedAbility = activeBattlerAbility; RecordAbilityBattle(gActiveBattler, gLastUsedAbility); } - return STAT_BUFF_DIDNT_WORK; + return STAT_CHANGE_DIDNT_WORK; } - else if (gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER - && !certain && statId == STAT_ATK) + else if (activeBattlerAbility == ABILITY_MIRROR_ARMOR && !affectsUser && gBattlerAttacker != gBattlerTarget && gActiveBattler == gBattlerTarget) { - if (flags == STAT_BUFF_ALLOW_PTR) + if (flags == STAT_CHANGE_ALLOW_PTR) { + SET_STATCHANGER(statId, GET_STAT_BUFF_VALUE(statValue) | STAT_BUFF_NEGATIVE, TRUE); BattleScriptPush(BS_ptr); gBattleScripting.battler = gActiveBattler; - gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; - gLastUsedAbility = gBattleMons[gActiveBattler].ability; - RecordAbilityBattle(gActiveBattler, gLastUsedAbility); + gBattlerAbility = gActiveBattler; + gBattlescriptCurrInstr = BattleScript_MirrorArmorReflect; + RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability); } - return STAT_BUFF_DIDNT_WORK; + return STAT_CHANGE_DIDNT_WORK; } - else if (gBattleMons[gActiveBattler].ability == ABILITY_SHIELD_DUST && flags == 0) + else if (activeBattlerAbility == ABILITY_SHIELD_DUST && flags == 0) { - return STAT_BUFF_DIDNT_WORK; + return STAT_CHANGE_DIDNT_WORK; } else // try to decrease { statValue = -GET_STAT_BUFF_VALUE(statValue); + if (gBattleMons[gActiveBattler].statStages[statId] == 1) + statValue = -1; + else if (gBattleMons[gActiveBattler].statStages[statId] == 2 && statValue < -2) + statValue = -2; gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; index = 1; if (statValue == -2) @@ -6985,24 +10473,36 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) gBattleTextBuff2[3] = STRINGID_STATHARSHLY >> 8; index = 4; } - gBattleTextBuff2[index] = B_BUFF_STRING; - index++; - gBattleTextBuff2[index] = STRINGID_STATFELL; - index++; - gBattleTextBuff2[index] = STRINGID_STATFELL >> 8; - index++; + else if (statValue <= -3) + { + gBattleTextBuff2[1] = B_BUFF_STRING; + gBattleTextBuff2[2] = STRINGID_SEVERELY & 0xFF; + gBattleTextBuff2[3] = STRINGID_SEVERELY >> 8; + index = 4; + } + gBattleTextBuff2[index++] = B_BUFF_STRING; + gBattleTextBuff2[index++] = STRINGID_STATFELL; + gBattleTextBuff2[index++] = STRINGID_STATFELL >> 8; gBattleTextBuff2[index] = B_BUFF_EOS; if (gBattleMons[gActiveBattler].statStages[statId] == MIN_STAT_STAGE) + { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAT_WONT_DECREASE; + } else + { + gProtectStructs[gActiveBattler].statFell = TRUE; // Eject pack, lash out gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler); // B_MSG_ATTACKER_STAT_FELL or B_MSG_DEFENDER_STAT_FELL - + } } } else // stat increase { statValue = GET_STAT_BUFF_VALUE(statValue); + if (gBattleMons[gActiveBattler].statStages[statId] == 11) + statValue = 1; + else if (gBattleMons[gActiveBattler].statStages[statId] == 10 && statValue > 2) + statValue = 2; gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; index = 1; if (statValue == 2) @@ -7012,18 +10512,27 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8; index = 4; } - gBattleTextBuff2[index] = B_BUFF_STRING; - index++; - gBattleTextBuff2[index] = STRINGID_STATROSE; - index++; - gBattleTextBuff2[index] = STRINGID_STATROSE >> 8; - index++; + else if (statValue >= 3) + { + gBattleTextBuff2[1] = B_BUFF_STRING; + gBattleTextBuff2[2] = STRINGID_DRASTICALLY & 0xFF; + gBattleTextBuff2[3] = STRINGID_DRASTICALLY >> 8; + index = 4; + } + gBattleTextBuff2[index++] = B_BUFF_STRING; + gBattleTextBuff2[index++] = STRINGID_STATROSE; + gBattleTextBuff2[index++] = STRINGID_STATROSE >> 8; gBattleTextBuff2[index] = B_BUFF_EOS; if (gBattleMons[gActiveBattler].statStages[statId] == MAX_STAT_STAGE) + { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAT_WONT_INCREASE; + } else - gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler); // B_MSG_ATTACKER_STAT_ROSE or B_MSG_DEFENDER_STAT_ROSE + { + gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler); + gProtectStructs[gActiveBattler].statRaised = TRUE; + } } gBattleMons[gActiveBattler].statStages[statId] += statValue; @@ -7032,31 +10541,52 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) if (gBattleMons[gActiveBattler].statStages[statId] > MAX_STAT_STAGE) gBattleMons[gActiveBattler].statStages[statId] = MAX_STAT_STAGE; - if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && flags & STAT_BUFF_ALLOW_PTR) + if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && flags & STAT_CHANGE_ALLOW_PTR) gMoveResultFlags |= MOVE_RESULT_MISSED; - if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && !(flags & STAT_BUFF_ALLOW_PTR)) - return STAT_BUFF_DIDNT_WORK; + if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && !(flags & STAT_CHANGE_ALLOW_PTR)) + return STAT_CHANGE_DIDNT_WORK; - return STAT_BUFF_WORKED; + return STAT_CHANGE_WORKED; } static void Cmd_statbuffchange(void) { - const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2); - if (ChangeStatBuffs(gBattleScripting.statChanger & 0xF0, GET_STAT_BUFF_ID(gBattleScripting.statChanger), gBattlescriptCurrInstr[1], jumpPtr) == STAT_BUFF_WORKED) - gBattlescriptCurrInstr += 6; + u16 flags = T1_READ_16(gBattlescriptCurrInstr + 1); + const u8 *ptrBefore = gBattlescriptCurrInstr; + const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + + if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), GET_STAT_BUFF_ID(gBattleScripting.statChanger), flags, jumpPtr) == STAT_CHANGE_WORKED) + gBattlescriptCurrInstr += 7; + else if (gBattlescriptCurrInstr == ptrBefore) // Prevent infinite looping. + gBattlescriptCurrInstr = jumpPtr; } -static void Cmd_normalisebuffs(void) // haze +bool32 TryResetBattlerStatChanges(u8 battler) +{ + u32 j; + bool32 ret = FALSE; + + gDisableStructs[battler].stockpileDef = 0; + gDisableStructs[battler].stockpileSpDef = 0; + for (j = 0; j < NUM_BATTLE_STATS; j++) + { + if (gBattleMons[battler].statStages[j] != DEFAULT_STAT_STAGE) + ret = TRUE; // returns TRUE if any stat was reset + + gBattleMons[battler].statStages[j] = DEFAULT_STAT_STAGE; + } + + return ret; +} + +// Haze +static void Cmd_normalisebuffs(void) { s32 i, j; for (i = 0; i < gBattlersCount; i++) - { - for (j = 0; j < NUM_BATTLE_STATS; j++) - gBattleMons[i].statStages[j] = DEFAULT_STAT_STAGE; - } + TryResetBattlerStatChanges(i); gBattlescriptCurrInstr++; } @@ -7073,8 +10603,8 @@ static void Cmd_setbide(void) static void Cmd_confuseifrepeatingattackends(void) { - if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE)) - gBattleCommunication[MOVE_EFFECT_BYTE] = (MOVE_EFFECT_THRASH | MOVE_EFFECT_AFFECTS_USER); + if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) && !gSpecialStatuses[gBattlerAttacker].dancerUsedMove) + gBattleScripting.moveEffect = (MOVE_EFFECT_THRASH | MOVE_EFFECT_AFFECTS_USER); gBattlescriptCurrInstr++; } @@ -7087,11 +10617,37 @@ static void Cmd_setmultihitcounter(void) } else { - gMultiHitCounter = Random() & 3; - if (gMultiHitCounter > 1) - gMultiHitCounter = (Random() & 3) + 2; + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_SKILL_LINK) + { + gMultiHitCounter = 5; + } + else if (B_MULTI_HIT_CHANCE >= GEN_5) + { + // Based on Gen 5's odds + // 35% for 2 hits + // 35% for 3 hits + // 15% for 4 hits + // 15% for 5 hits + gMultiHitCounter = Random() % 100; + if (gMultiHitCounter < 35) + gMultiHitCounter = 2; + else if (gMultiHitCounter < 35 + 35) + gMultiHitCounter = 3; + else if (gMultiHitCounter < 35 + 35 + 15) + gMultiHitCounter = 4; + else + gMultiHitCounter = 5; + } else - gMultiHitCounter += 2; + { + // 2 and 3 hits: 37.5% + // 4 and 5 hits: 12.5% + gMultiHitCounter = Random() % 4; + if (gMultiHitCounter > 1) + gMultiHitCounter = (Random() % 4) + 2; + else + gMultiHitCounter += 2; + } } gBattlescriptCurrInstr += 2; @@ -7104,27 +10660,6 @@ static void Cmd_initmultihitstring(void) gBattlescriptCurrInstr++; } -static bool8 TryDoForceSwitchOut(void) -{ - if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) - { - *(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; - } - else - { - u16 random = Random() & 0xFF; - if ((u32)((random * (gBattleMons[gBattlerAttacker].level + gBattleMons[gBattlerTarget].level) >> 8) + 1) <= (gBattleMons[gBattlerTarget].level / 4)) - { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); - return FALSE; - } - *(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; - } - - gBattlescriptCurrInstr = BattleScript_SuccessForceOut; - return TRUE; -} - static void Cmd_forcerandomswitch(void) { s32 i; @@ -7134,32 +10669,84 @@ static void Cmd_forcerandomswitch(void) s32 firstMonId; s32 lastMonId = 0; // + 1 s32 monsCount; - struct Pokemon* party = NULL; + struct Pokemon *party = NULL; s32 validMons = 0; s32 minNeeded; - if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)) + bool32 redCardForcedSwitch = FALSE; + + // Red card checks against wild pokemon. If we have reached here, the player has a mon to switch into + // Red card swaps attacker with target to get the animation correct, so here we check attacker which is really the target. Thanks GF... + if (gBattleScripting.switchCase == B_SWITCH_RED_CARD + && !(gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT) // Check opponent's red card activating + { + if (!WILD_DOUBLE_BATTLE) + { + // Wild mon with red card will end single battle + gBattlescriptCurrInstr = BattleScript_RoarSuccessEndBattle; + return; + } + else + { + // Wild double battle, wild mon red card activation on player + if (IS_WHOLE_SIDE_ALIVE(gBattlerTarget)) + { + // Both player's battlers are alive + redCardForcedSwitch = FALSE; + } + else + { + // Player has only one mon alive -> force red card switch before manually switching to other mon + redCardForcedSwitch = TRUE; + } + } + } + + // Swapping pokemon happens in: + // trainer battles + // wild double battles when an opposing pokemon uses it against one of the two alive player mons + // wild double battle when a player pokemon uses it against its partner + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + || (WILD_DOUBLE_BATTLE + && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT + && GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER + && IS_WHOLE_SIDE_ALIVE(gBattlerTarget)) + || (WILD_DOUBLE_BATTLE + && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER + && GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) + || redCardForcedSwitch + ) { if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) party = gPlayerParty; else party = gEnemyParty; - if ((gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER && gBattleTypeFlags & BATTLE_TYPE_LINK) + if (BATTLE_TWO_VS_ONE_OPPONENT && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT) + { + firstMonId = 0; + lastMonId = 6; + monsCount = 6; + minNeeded = 2; + battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; + battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK]; + } + else if ((gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER && gBattleTypeFlags & BATTLE_TYPE_LINK) || (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER && gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) || (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)) { - if ((gBattlerTarget & BIT_FLANK) != 0) + if ((gBattlerTarget & BIT_FLANK) != B_FLANK_LEFT) { - firstMonId = 3; - lastMonId = 6; + firstMonId = PARTY_SIZE / 2; + lastMonId = PARTY_SIZE; } else { firstMonId = 0; - lastMonId = 3; + lastMonId = PARTY_SIZE / 2; } - monsCount = 3; + monsCount = PARTY_SIZE / 2; minNeeded = 1; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK]; @@ -7167,17 +10754,17 @@ static void Cmd_forcerandomswitch(void) else if ((gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) || (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)) { - if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == 1) + if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == B_FLANK_RIGHT) { - firstMonId = 3; - lastMonId = 6; + firstMonId = PARTY_SIZE / 2; + lastMonId = PARTY_SIZE; } else { firstMonId = 0; - lastMonId = 3; + lastMonId = PARTY_SIZE / 2; } - monsCount = 3; + monsCount = PARTY_SIZE / 2; minNeeded = 1; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK]; @@ -7187,23 +10774,23 @@ static void Cmd_forcerandomswitch(void) if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) { firstMonId = 0; - lastMonId = 6; - monsCount = 6; + lastMonId = PARTY_SIZE; + monsCount = PARTY_SIZE; minNeeded = 2; // since there are two opponents, it has to be a double battle } else { - if ((gBattlerTarget & BIT_FLANK) != 0) + if ((gBattlerTarget & BIT_FLANK) != B_FLANK_LEFT) { - firstMonId = 3; - lastMonId = 6; + firstMonId = PARTY_SIZE / 2; + lastMonId = PARTY_SIZE; } else { firstMonId = 0; - lastMonId = 3; + lastMonId = PARTY_SIZE / 2; } - monsCount = 3; + monsCount = PARTY_SIZE / 2; minNeeded = 1; } battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; @@ -7212,8 +10799,8 @@ static void Cmd_forcerandomswitch(void) else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { firstMonId = 0; - lastMonId = 6; - monsCount = 6; + lastMonId = PARTY_SIZE; + monsCount = PARTY_SIZE; minNeeded = 2; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK]; @@ -7221,8 +10808,8 @@ static void Cmd_forcerandomswitch(void) else { firstMonId = 0; - lastMonId = 6; - monsCount = 6; + lastMonId = PARTY_SIZE; + monsCount = PARTY_SIZE; minNeeded = 1; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one pokemon out in single battles battler1PartyId = gBattlerPartyIndexes[gBattlerTarget]; @@ -7238,26 +10825,26 @@ static void Cmd_forcerandomswitch(void) } } - if (validMons <= minNeeded) + if (!redCardForcedSwitch && validMons <= minNeeded) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { - if (TryDoForceSwitchOut()) + *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; + gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; + + do { - do - { - do - { - i = Random() % monsCount; - i += firstMonId; - } - while (i == battler2PartyId || i == battler1PartyId); - } while (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE - || GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE - || GetMonData(&party[i], MON_DATA_HP) == 0); //should be one while loop, but that doesn't match. + i = Random() % monsCount; + i += firstMonId; } + while (i == battler2PartyId + || i == battler1PartyId + || GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE + || GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE + || GetMonData(&party[i], MON_DATA_HP) == 0); + *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i; if (!IsMultiBattle()) @@ -7278,19 +10865,45 @@ static void Cmd_forcerandomswitch(void) } else { - TryDoForceSwitchOut(); + // In normal wild doubles, Roar will always fail if the user's level is less than the target's. + if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) + gBattlescriptCurrInstr = BattleScript_RoarSuccessEndBattle; + else + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } -static void Cmd_tryconversiontypechange(void) // randomly changes user's type to one of its moves' type +static void Cmd_tryconversiontypechange(void) { u8 validMoves = 0; u8 moveChecked; u8 moveType; +#if B_UPDATED_CONVERSION >= GEN_6 + // Changes user's type to its first move's type + for (moveChecked = 0; moveChecked < MAX_MON_MOVES; moveChecked++) + { + if (gBattleMons[gBattlerAttacker].moves[moveChecked] != MOVE_NONE) + { + moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type; + break; + } + } + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + } + else + { + SET_BATTLER_TYPE(gBattlerAttacker, moveType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); + gBattlescriptCurrInstr += 5; + } +#else + // Randomly changes user's type to one of its moves' type while (validMoves < MAX_MON_MOVES) { - if (gBattleMons[gBattlerAttacker].moves[validMoves] == 0) + if (gBattleMons[gBattlerAttacker].moves[validMoves] == MOVE_NONE) break; validMoves++; @@ -7308,7 +10921,8 @@ static void Cmd_tryconversiontypechange(void) // randomly changes user's type to moveType = TYPE_NORMAL; } if (moveType != gBattleMons[gBattlerAttacker].type1 - && moveType != gBattleMons[gBattlerAttacker].type2) + && moveType != gBattleMons[gBattlerAttacker].type2 + && moveType != gBattleMons[gBattlerAttacker].type3) { break; } @@ -7322,7 +10936,6 @@ static void Cmd_tryconversiontypechange(void) // randomly changes user's type to { do { - while ((moveChecked = Random() & (MAX_MON_MOVES - 1)) >= validMoves); moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type; @@ -7335,13 +10948,14 @@ static void Cmd_tryconversiontypechange(void) // randomly changes user's type to moveType = TYPE_NORMAL; } } - while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2); + while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2 || moveType == gBattleMons[gBattlerAttacker].type3); SET_BATTLER_TYPE(gBattlerAttacker, moveType); PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); gBattlescriptCurrInstr += 5; } +#endif } static void Cmd_givepaydaymoney(void) @@ -7372,7 +10986,10 @@ static void Cmd_setlightscreen(void) else { gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_LIGHTSCREEN; - gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenTimer = 5; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenTimer = 8; + else + gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenTimer = 5; gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenBattlerId = gBattlerAttacker; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2) @@ -7386,71 +11003,71 @@ static void Cmd_setlightscreen(void) static void Cmd_tryKO(void) { - u8 holdEffect, param; - - if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY) - { - holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect; - param = gEnigmaBerries[gBattlerTarget].holdEffectParam; - } - else - { - holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item); - param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item); - } + bool32 lands = FALSE; + u32 holdEffect = GetBattlerHoldEffect(gBattlerTarget, TRUE); + u16 targetAbility = GetBattlerAbility(gBattlerTarget); gPotentialItemEffectBattler = gBattlerTarget; - - if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param) + if (holdEffect == HOLD_EFFECT_FOCUS_BAND + && (Random() % 100) < GetBattlerHoldEffectParam(gBattlerTarget)) { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_FOCUS_BAND); - gSpecialStatuses[gBattlerTarget].focusBanded = 1; + gSpecialStatuses[gBattlerTarget].focusBanded = TRUE; + RecordItemEffectBattle(gBattlerTarget, holdEffect); + } + else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && BATTLER_MAX_HP(gBattlerTarget)) + { + gSpecialStatuses[gBattlerTarget].focusSashed = TRUE; + RecordItemEffectBattle(gBattlerTarget, holdEffect); } - if (gBattleMons[gBattlerTarget].ability == ABILITY_STURDY) + if (targetAbility == ABILITY_STURDY) { gMoveResultFlags |= MOVE_RESULT_MISSED; gLastUsedAbility = ABILITY_STURDY; gBattlescriptCurrInstr = BattleScript_SturdyPreventsOHKO; - RecordAbilityBattle(gBattlerTarget, ABILITY_STURDY); + gBattlerAbility = gBattlerTarget; } else { - u16 chance; - if (!(gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS)) + if ((((gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS) + && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) + || GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD + || targetAbility == ABILITY_NO_GUARD) + && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) { - chance = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level); - if (Random() % 100 + 1 < chance && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) - chance = TRUE; - else - chance = FALSE; - } - else if (gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker - && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) - { - chance = TRUE; + lands = TRUE; } else { - chance = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level); - if (Random() % 100 + 1 < chance && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) - chance = TRUE; - else - chance = FALSE; + u16 odds = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level); + #if B_SHEER_COLD_ACC >= GEN_7 + if (gCurrentMove == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) + odds -= 10; + #endif + if (Random() % 100 + 1 < odds && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) + lands = TRUE; } - if (chance) + + if (lands) { if (gProtectStructs[gBattlerTarget].endured) { gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; } - else if (gSpecialStatuses[gBattlerTarget].focusBanded) + else if (gSpecialStatuses[gBattlerTarget].focusBanded || gSpecialStatuses[gBattlerTarget].focusSashed) { gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; gLastUsedItem = gBattleMons[gBattlerTarget].item; } + #if B_AFFECTION_MECHANICS == TRUE + else if (gSpecialStatuses[gBattlerTarget].affectionEndured) + { + gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; + gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED_AFFECTION; + } + #endif else { gBattleMoveDamage = gBattleMons[gBattlerTarget].hp; @@ -7470,7 +11087,8 @@ static void Cmd_tryKO(void) } } -static void Cmd_damagetohalftargethp(void) // super fang +// Super Fang +static void Cmd_damagetohalftargethp(void) { gBattleMoveDamage = gBattleMons[gBattlerTarget].hp / 2; if (gBattleMoveDamage == 0) @@ -7481,68 +11099,68 @@ static void Cmd_damagetohalftargethp(void) // super fang static void Cmd_setsandstorm(void) { - if (gBattleWeather & WEATHER_SANDSTORM_ANY) + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SANDSTORM, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED; } else { - gBattleWeather = WEATHER_SANDSTORM_TEMPORARY; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SANDSTORM; - gWishFutureKnock.weatherDuration = 5; } gBattlescriptCurrInstr++; } static void Cmd_weatherdamage(void) { - if (WEATHER_HAS_EFFECT) - { - if (gBattleWeather & WEATHER_SANDSTORM_ANY) - { - if (gBattleMons[gBattlerAttacker].type1 != TYPE_ROCK - && gBattleMons[gBattlerAttacker].type1 != TYPE_STEEL - && gBattleMons[gBattlerAttacker].type1 != TYPE_GROUND - && gBattleMons[gBattlerAttacker].type2 != TYPE_ROCK - && gBattleMons[gBattlerAttacker].type2 != TYPE_STEEL - && gBattleMons[gBattlerAttacker].type2 != TYPE_GROUND - && gBattleMons[gBattlerAttacker].ability != ABILITY_SAND_VEIL - && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND) - && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER)) - { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } - else - { - gBattleMoveDamage = 0; - } - } - if (gBattleWeather & WEATHER_HAIL_ANY) - { - if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE) - && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND) - && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER)) - { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } - else - { - gBattleMoveDamage = 0; - } - } - } - else - { - gBattleMoveDamage = 0; - } + u32 ability = GetBattlerAbility(gBattlerAttacker); - if (gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) - gBattleMoveDamage = 0; + 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 = gBattleMons[gBattlerAttacker].maxHP / 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 = gBattleMons[gBattlerAttacker].maxHP / 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 = gBattleMons[gBattlerAttacker].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + } + } + } gBattlescriptCurrInstr++; } @@ -7569,9 +11187,9 @@ static void Cmd_tryinfatuating(void) speciesTarget = GetMonData(monTarget, MON_DATA_SPECIES); personalityTarget = GetMonData(monTarget, MON_DATA_PERSONALITY); - if (gBattleMons[gBattlerTarget].ability == ABILITY_OBLIVIOUS) + if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) { - gBattlescriptCurrInstr = BattleScript_ObliviousPreventsAttraction; + gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp; gLastUsedAbility = ABILITY_OBLIVIOUS; RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS); } @@ -7600,7 +11218,7 @@ static void Cmd_updatestatusicon(void) if (gBattlescriptCurrInstr[1] != BS_ATTACKER_WITH_PARTNER) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2); + BtlController_EmitStatusIconUpdate(BUFFER_A, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; } @@ -7609,7 +11227,7 @@ static void Cmd_updatestatusicon(void) gActiveBattler = gBattlerAttacker; if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler])) { - BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2); + BtlController_EmitStatusIconUpdate(BUFFER_A, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2); MarkBattlerForControllerExec(gActiveBattler); } if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) @@ -7617,7 +11235,7 @@ static void Cmd_updatestatusicon(void) gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK); if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler])) { - BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2); + BtlController_EmitStatusIconUpdate(BUFFER_A, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2); MarkBattlerForControllerExec(gActiveBattler); } } @@ -7659,9 +11277,10 @@ static void Cmd_setfocusenergy(void) static void Cmd_transformdataexecution(void) { - gChosenMove = 0xFFFF; + gChosenMove = MOVE_UNAVAILABLE; gBattlescriptCurrInstr++; if (gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED + || gBattleStruct->illusion[gBattlerTarget].on || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE) { gMoveResultFlags |= MOVE_RESULT_FAILED; @@ -7673,15 +11292,16 @@ static void Cmd_transformdataexecution(void) u8 *battleMonAttacker, *battleMonTarget; gBattleMons[gBattlerAttacker].status2 |= STATUS2_TRANSFORMED; - gDisableStructs[gBattlerAttacker].disabledMove = 0; + gDisableStructs[gBattlerAttacker].disabledMove = MOVE_NONE; gDisableStructs[gBattlerAttacker].disableTimer = 0; gDisableStructs[gBattlerAttacker].transformedMonPersonality = gBattleMons[gBattlerTarget].personality; gDisableStructs[gBattlerAttacker].mimickedMoves = 0; + gDisableStructs[gBattlerAttacker].usedMoves = 0; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].species) - battleMonAttacker = (u8*)(&gBattleMons[gBattlerAttacker]); - battleMonTarget = (u8*)(&gBattleMons[gBattlerTarget]); + battleMonAttacker = (u8 *)(&gBattleMons[gBattlerAttacker]); + battleMonTarget = (u8 *)(&gBattleMons[gBattlerTarget]); for (i = 0; i < offsetof(struct BattlePokemon, pp); i++) battleMonAttacker[i] = battleMonTarget[i]; @@ -7695,7 +11315,7 @@ static void Cmd_transformdataexecution(void) } gActiveBattler = gBattlerAttacker; - BtlController_EmitResetActionMoveSelection(0, RESET_MOVE_SELECTION); + BtlController_EmitResetActionMoveSelection(BUFFER_A, RESET_MOVE_SELECTION); MarkBattlerForControllerExec(gActiveBattler); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TRANSFORMED; } @@ -7719,7 +11339,7 @@ static void Cmd_setsubstitute(void) gBattleMoveDamage = 1; gBattleMons[gBattlerAttacker].status2 |= STATUS2_SUBSTITUTE; - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_WRAPPED); + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_WRAPPED; gDisableStructs[gBattlerAttacker].substituteHP = gBattleMoveDamage; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SUBSTITUTE; gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE; @@ -7728,23 +11348,11 @@ static void Cmd_setsubstitute(void) gBattlescriptCurrInstr++; } -static bool8 IsMoveUncopyableByMimic(u16 move) -{ - s32 i; - for (i = 0; sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END - && sMovesForbiddenToCopy[i] != move; i++); - - return (sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END); -} - static void Cmd_mimicattackcopy(void) { - gChosenMove = 0xFFFF; - - if (IsMoveUncopyableByMimic(gLastMoves[gBattlerTarget]) - || gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED - || gLastMoves[gBattlerTarget] == 0 - || gLastMoves[gBattlerTarget] == 0xFFFF) + if ((sForbiddenMoves[gLastMoves[gBattlerTarget]] & FORBIDDEN_MIMIC) + || (gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) + || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } @@ -7760,13 +11368,13 @@ static void Cmd_mimicattackcopy(void) if (i == MAX_MON_MOVES) { + gChosenMove = 0xFFFF; gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastMoves[gBattlerTarget]; if (gBattleMoves[gLastMoves[gBattlerTarget]].pp < 5) gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = gBattleMoves[gLastMoves[gBattlerTarget]].pp; else gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 5; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) gDisableStructs[gBattlerAttacker].mimickedMoves |= gBitTable[gCurrMovePos]; @@ -7781,31 +11389,17 @@ static void Cmd_mimicattackcopy(void) static void Cmd_metronome(void) { - while (1) + while (TRUE) { - s32 i; - - gCurrentMove = (Random() & 0x1FF) + 1; - if (gCurrentMove >= MOVES_COUNT) + gCurrentMove = (Random() % (MOVES_COUNT - 1)) + 1; + if (gBattleMoves[gCurrentMove].effect == EFFECT_PLACEHOLDER) continue; - for (i = 0; i < MAX_MON_MOVES; i++); // ? - - i = -1; - while (1) + if (!(sForbiddenMoves[gCurrentMove] & FORBIDDEN_METRONOME)) { - i++; - if (sMovesForbiddenToCopy[i] == gCurrentMove) - break; - if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END) - break; - } - - if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END) - { - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; - gBattlerTarget = GetMoveTarget(gCurrentMove, 0); + gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); return; } } @@ -7820,10 +11414,10 @@ static void Cmd_dmgtolevel(void) static void Cmd_psywavedamageeffect(void) { s32 randDamage; - - while ((randDamage = (Random() & 0xF)) > 10); - - randDamage *= 10; + if (B_PSYWAVE_DMG >= GEN_6) + randDamage = (Random() % 101); + else + randDamage = (Random() % 11) * 10; gBattleMoveDamage = gBattleMons[gBattlerAttacker].level * (randDamage + 50) / 100; gBattlescriptCurrInstr++; } @@ -7839,7 +11433,7 @@ static void Cmd_counterdamagecalculator(void) { gBattleMoveDamage = gProtectStructs[gBattlerAttacker].physicalDmg * 2; - if (gSideTimers[sideTarget].followmeTimer && gBattleMons[gSideTimers[sideTarget].followmeTarget].hp) + if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) gBattlerTarget = gSideTimers[sideTarget].followmeTarget; else gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; @@ -7848,21 +11442,24 @@ static void Cmd_counterdamagecalculator(void) } else { - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1; + gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } -static void Cmd_mirrorcoatdamagecalculator(void) // a copy of Cmd with the physical -> special field changes +// A copy of Cmd with the physical -> special field changes +static void Cmd_mirrorcoatdamagecalculator(void) { u8 sideAttacker = GetBattlerSide(gBattlerAttacker); u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId); - if (gProtectStructs[gBattlerAttacker].specialDmg && sideAttacker != sideTarget && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp) + if (gProtectStructs[gBattlerAttacker].specialDmg + && sideAttacker != sideTarget + && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp) { gBattleMoveDamage = gProtectStructs[gBattlerAttacker].specialDmg * 2; - if (gSideTimers[sideTarget].followmeTimer && gBattleMons[gSideTimers[sideTarget].followmeTarget].hp) + if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) gBattlerTarget = gSideTimers[sideTarget].followmeTarget; else gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; @@ -7871,7 +11468,7 @@ static void Cmd_mirrorcoatdamagecalculator(void) // a copy of Cmd with the physi } else { - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1; + gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -7885,13 +11482,18 @@ static void Cmd_disablelastusedattack(void) if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget]) break; } - if (gDisableStructs[gBattlerTarget].disabledMove == 0 + if (gDisableStructs[gBattlerTarget].disabledMove == MOVE_NONE && i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0) { PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].moves[i]) gDisableStructs[gBattlerTarget].disabledMove = gBattleMons[gBattlerTarget].moves[i]; - gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 2; + if (B_DISABLE_TURNS == GEN_3) + gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 2; + else if (B_DISABLE_TURNS == GEN_4) + gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 4; + else + gDisableStructs[gBattlerTarget].disableTimer = 4; gDisableStructs[gBattlerTarget].disableTimerStartValue = gDisableStructs[gBattlerTarget].disableTimer; // used to save the random amount of turns? gBattlescriptCurrInstr += 5; } @@ -7915,15 +11517,15 @@ static void Cmd_trysetencore(void) || gLastMoves[gBattlerTarget] == MOVE_ENCORE || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) { - i = 4; + i = MAX_MON_MOVES; } - if (gDisableStructs[gBattlerTarget].encoredMove == 0 - && i != 4 && gBattleMons[gBattlerTarget].pp[i] != 0) + if (gDisableStructs[gBattlerTarget].encoredMove == MOVE_NONE + && i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0) { gDisableStructs[gBattlerTarget].encoredMove = gBattleMons[gBattlerTarget].moves[i]; gDisableStructs[gBattlerTarget].encoredMovePos = i; - gDisableStructs[gBattlerTarget].encoreTimer = (Random() & 3) + 3; + gDisableStructs[gBattlerTarget].encoreTimer = 3; gDisableStructs[gBattlerTarget].encoreTimerStartValue = gDisableStructs[gBattlerTarget].encoreTimer; gBattlescriptCurrInstr += 5; } @@ -7935,11 +11537,11 @@ static void Cmd_trysetencore(void) static void Cmd_painsplitdmgcalc(void) { - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)) + if (!(DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))) { s32 hpDiff = (gBattleMons[gBattlerAttacker].hp + gBattleMons[gBattlerTarget].hp) / 2; s32 painSplitHp = gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - hpDiff; - u8* storeLoc = (void*)(&gBattleScripting.painSplitHp); + u8 *storeLoc = (void *)(&gBattleScripting.painSplitHp); storeLoc[0] = (painSplitHp); storeLoc[1] = (painSplitHp & 0x0000FF00) >> 8; @@ -7957,10 +11559,11 @@ static void Cmd_painsplitdmgcalc(void) } } -static void Cmd_settypetorandomresistance(void) // conversion 2 +// Conversion 2 +static void Cmd_settypetorandomresistance(void) { - if (gLastLandedMoves[gBattlerAttacker] == 0 - || gLastLandedMoves[gBattlerAttacker] == 0xFFFF) + if (gLastLandedMoves[gBattlerAttacker] == MOVE_NONE + || gLastLandedMoves[gBattlerAttacker] == MOVE_UNAVAILABLE) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } @@ -7971,45 +11574,36 @@ static void Cmd_settypetorandomresistance(void) // conversion 2 } else { - s32 i, j, rands; + u32 i, resistTypes = 0; + u32 hitByType = gLastHitByType[gBattlerAttacker]; - for (rands = 0; rands < 1000; rands++) + for (i = 0; i < NUMBER_OF_MON_TYPES; i++) // Find all types that resist. { - while (((i = (Random() & 0x7F)) > sizeof(gTypeEffectiveness) / 3)); - - i *= 3; - - if (TYPE_EFFECT_ATK_TYPE(i) == gLastHitByType[gBattlerAttacker] - && TYPE_EFFECT_MULTIPLIER(i) <= TYPE_MUL_NOT_EFFECTIVE - && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i))) + switch (GetTypeModifier(hitByType, i)) { - SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(i)); - - gBattlescriptCurrInstr += 5; - return; + case UQ_4_12(0): + case UQ_4_12(0.5): + resistTypes |= gBitTable[i]; + break; } } - for (j = 0, rands = 0; rands < sizeof(gTypeEffectiveness); j += 3, rands += 3) + while (resistTypes != 0) { - switch (TYPE_EFFECT_ATK_TYPE(j)) + i = Random() % NUMBER_OF_MON_TYPES; + if (resistTypes & gBitTable[i]) { - case TYPE_ENDTABLE: - case TYPE_FORESIGHT: - break; - default: - if (TYPE_EFFECT_ATK_TYPE(j) == gLastHitByType[gBattlerAttacker] - && TYPE_EFFECT_MULTIPLIER(j) <= 5 - && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i))) + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, i)) { - SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(rands)); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(rands)) - + resistTypes &= ~(gBitTable[i]); // Type resists, but the user is already of this type. + } + else + { + SET_BATTLER_TYPE(gBattlerAttacker, i); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, i); gBattlescriptCurrInstr += 5; return; } - break; } } @@ -8019,20 +11613,21 @@ static void Cmd_settypetorandomresistance(void) // conversion 2 static void Cmd_setalwayshitflag(void) { - gStatuses3[gBattlerTarget] &= ~(STATUS3_ALWAYS_HITS); + gStatuses3[gBattlerTarget] &= ~STATUS3_ALWAYS_HITS; gStatuses3[gBattlerTarget] |= STATUS3_ALWAYS_HITS_TURN(2); gDisableStructs[gBattlerTarget].battlerWithSureHit = gBattlerAttacker; gBattlescriptCurrInstr++; } -static void Cmd_copymovepermanently(void) // sketch +// Sketch +static void Cmd_copymovepermanently(void) { - gChosenMove = 0xFFFF; + gChosenMove = MOVE_UNAVAILABLE; if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) && gLastPrintedMoves[gBattlerTarget] != MOVE_STRUGGLE - && gLastPrintedMoves[gBattlerTarget] != 0 - && gLastPrintedMoves[gBattlerTarget] != 0xFFFF + && gLastPrintedMoves[gBattlerTarget] != MOVE_NONE + && gLastPrintedMoves[gBattlerTarget] != MOVE_UNAVAILABLE && gLastPrintedMoves[gBattlerTarget] != MOVE_SKETCH) { s32 i; @@ -8064,7 +11659,7 @@ static void Cmd_copymovepermanently(void) // sketch } movePpData.ppBonuses = gBattleMons[gBattlerAttacker].ppBonuses; - BtlController_EmitSetMonData(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct MovePpInfo), &movePpData); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_MOVES_PP_BATTLE, 0, sizeof(movePpData), &movePpData); MarkBattlerForControllerExec(gActiveBattler); PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastPrintedMoves[gBattlerTarget]) @@ -8081,38 +11676,29 @@ static void Cmd_copymovepermanently(void) // sketch static bool8 IsTwoTurnsMove(u16 move) { if (gBattleMoves[move].effect == EFFECT_SKULL_BASH - || gBattleMoves[move].effect == EFFECT_RAZOR_WIND - || gBattleMoves[move].effect == EFFECT_SKY_ATTACK - || gBattleMoves[move].effect == EFFECT_SOLARBEAM - || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE - || gBattleMoves[move].effect == EFFECT_BIDE) - return TRUE; - else - return FALSE; -} - -static bool8 IsInvalidForSleepTalkOrAssist(u16 move) -{ - if (move == 0 || move == MOVE_SLEEP_TALK || move == MOVE_ASSIST - || move == MOVE_MIRROR_MOVE || move == MOVE_METRONOME) + || gBattleMoves[move].effect == EFFECT_TWO_TURNS_ATTACK + || gBattleMoves[move].effect == EFFECT_SOLAR_BEAM + || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE + || gBattleMoves[move].effect == EFFECT_BIDE + || gBattleMoves[move].effect == EFFECT_METEOR_BEAM) return TRUE; else return FALSE; } +// unused static u8 AttacksThisTurn(u8 battlerId, u16 move) // Note: returns 1 if it's a charging turn, otherwise 2 { // first argument is unused - if (gBattleMoves[move].effect == EFFECT_SOLARBEAM - && (gBattleWeather & WEATHER_SUN_ANY)) + if (gBattleMoves[move].effect == EFFECT_SOLAR_BEAM + && IsBattlerWeatherAffected(battlerId, B_WEATHER_SUN)) return 2; if (gBattleMoves[move].effect == EFFECT_SKULL_BASH - || gBattleMoves[move].effect == EFFECT_RAZOR_WIND - || gBattleMoves[move].effect == EFFECT_SKY_ATTACK - || gBattleMoves[move].effect == EFFECT_SOLARBEAM - || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE - || gBattleMoves[move].effect == EFFECT_BIDE) + || gBattleMoves[move].effect == EFFECT_TWO_TURNS_ATTACK + || gBattleMoves[move].effect == EFFECT_SOLAR_BEAM + || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE + || gBattleMoves[move].effect == EFFECT_BIDE) { if ((gHitMarker & HITMARKER_CHARGING)) return 1; @@ -8122,30 +11708,24 @@ static u8 AttacksThisTurn(u8 battlerId, u16 move) // Note: returns 1 if it's a c static void Cmd_trychoosesleeptalkmove(void) { - s32 i; - u8 unusableMovesBits = 0; + u32 i, unusableMovesBits = 0, movePosition; for (i = 0; i < MAX_MON_MOVES; i++) { - if (IsInvalidForSleepTalkOrAssist(gBattleMons[gBattlerAttacker].moves[i]) - || gBattleMons[gBattlerAttacker].moves[i] == MOVE_FOCUS_PUNCH - || gBattleMons[gBattlerAttacker].moves[i] == MOVE_UPROAR + if ((sForbiddenMoves[gBattleMons[gBattlerAttacker].moves[i]] & FORBIDDEN_SLEEP_TALK) || IsTwoTurnsMove(gBattleMons[gBattlerAttacker].moves[i])) { unusableMovesBits |= gBitTable[i]; } - } - unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~(MOVE_LIMITATION_PP)); - if (unusableMovesBits == 0xF) // all 4 moves cannot be chosen + unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~MOVE_LIMITATION_PP); + if (unusableMovesBits == (1 << MAX_MON_MOVES) - 1) // all 4 moves cannot be chosen { gBattlescriptCurrInstr += 5; } else // at least one move can be chosen { - u32 movePosition; - do { movePosition = Random() & (MAX_MON_MOVES - 1); @@ -8153,8 +11733,8 @@ static void Cmd_trychoosesleeptalkmove(void) gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition]; gCurrMovePos = movePosition; - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gBattlerTarget = GetMoveTarget(gCalledMove, 0); + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; + gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -8183,25 +11763,27 @@ static void Cmd_trysetdestinybondtohappen(void) gBattlescriptCurrInstr++; } -static void Cmd_remaininghptopower(void) +static void Cmd_settailwind(void) { - s32 i; - s32 hpFraction = GetScaledHPFraction(gBattleMons[gBattlerAttacker].hp, gBattleMons[gBattlerAttacker].maxHP, 48); + u8 side = GetBattlerSide(gBattlerAttacker); - for (i = 0; i < (s32) sizeof(sFlailHpScaleToPowerTable); i += 2) + if (!(gSideStatuses[side] & SIDE_STATUS_TAILWIND)) { - if (hpFraction <= sFlailHpScaleToPowerTable[i]) - break; + gSideStatuses[side] |= SIDE_STATUS_TAILWIND; + gSideTimers[side].tailwindBattlerId = gBattlerAttacker; + gSideTimers[side].tailwindTimer = (B_TAILWIND_TURNS >= GEN_5) ? 4 : 3; + gBattlescriptCurrInstr += 5; + } + else + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } - - gDynamicBasePower = sFlailHpScaleToPowerTable[i + 1]; - gBattlescriptCurrInstr++; } static void Cmd_tryspiteppreduce(void) { - if (gLastMoves[gBattlerTarget] != 0 - && gLastMoves[gBattlerTarget] != 0xFFFF) + if (gLastMoves[gBattlerTarget] != MOVE_NONE + && gLastMoves[gBattlerTarget] != MOVE_UNAVAILABLE) { s32 i; @@ -8211,9 +11793,18 @@ static void Cmd_tryspiteppreduce(void) break; } + #if B_CAN_SPITE_FAIL <= GEN_3 if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] > 1) + #else + if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0) + #endif { + #if B_PP_REDUCED_BY_SPITE <= GEN_3 s32 ppToDeduct = (Random() & 3) + 2; + #else + s32 ppToDeduct = 4; + #endif + if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct) ppToDeduct = gBattleMons[gBattlerTarget].pp[i]; @@ -8226,16 +11817,18 @@ static void Cmd_tryspiteppreduce(void) gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct; gActiveBattler = gBattlerTarget; + // if (MOVE_IS_PERMANENT(gActiveBattler, i)), but backwards if (!(gDisableStructs[gActiveBattler].mimickedMoves & gBitTable[i]) && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED)) { - BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBattler].pp[i]); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gActiveBattler].pp[i]), &gBattleMons[gActiveBattler].pp[i]); MarkBattlerForControllerExec(gActiveBattler); } gBattlescriptCurrInstr += 5; - if (gBattleMons[gBattlerTarget].pp[i] == 0) + // Don't cut off Sky Drop if pp is brought to zero. + if (gBattleMons[gBattlerTarget].pp[i] == 0 && gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF) CancelMultiTurnMoves(gBattlerTarget); } else @@ -8266,10 +11859,10 @@ static void Cmd_healpartystatus(void) else party = gEnemyParty; - if (gBattleMons[gBattlerAttacker].ability != ABILITY_SOUNDPROOF) + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF) { gBattleMons[gBattlerAttacker].status1 = 0; - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; } else { @@ -8282,10 +11875,10 @@ static void Cmd_healpartystatus(void) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBattlerFlags & gBitTable[gActiveBattler])) { - if (gBattleMons[gActiveBattler].ability != ABILITY_SOUNDPROOF) + if (GetBattlerAbility(gActiveBattler) != ABILITY_SOUNDPROOF) { gBattleMons[gActiveBattler].status1 = 0; - gBattleMons[gActiveBattler].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[gActiveBattler].status2 &= ~STATUS2_NIGHTMARE; } else { @@ -8303,14 +11896,14 @@ static void Cmd_healpartystatus(void) if (species != SPECIES_NONE && species != SPECIES_EGG) { - u8 ability; + u16 ability; if (gBattlerPartyIndexes[gBattlerAttacker] == i) - ability = gBattleMons[gBattlerAttacker].ability; + ability = GetBattlerAbility(gBattlerAttacker); else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlerPartyIndexes[gActiveBattler] == i && !(gAbsentBattlerFlags & gBitTable[gActiveBattler])) - ability = gBattleMons[gActiveBattler].ability; + ability = GetBattlerAbility(gActiveBattler); else ability = GetAbilityBySpecies(species, abilityNum); @@ -8322,17 +11915,17 @@ static void Cmd_healpartystatus(void) else // Aromatherapy { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOOTHING_AROMA; - toHeal = 0x3F; + toHeal = (1 << PARTY_SIZE) - 1; gBattleMons[gBattlerAttacker].status1 = 0; - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBattlerFlags & gBitTable[gActiveBattler])) { gBattleMons[gActiveBattler].status1 = 0; - gBattleMons[gActiveBattler].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[gActiveBattler].status2 &= ~STATUS2_NIGHTMARE; } } @@ -8340,7 +11933,7 @@ static void Cmd_healpartystatus(void) if (toHeal) { gActiveBattler = gBattlerAttacker; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, toHeal, 4, &zero); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, toHeal, sizeof(zero), &zero); MarkBattlerForControllerExec(gActiveBattler); } @@ -8370,7 +11963,7 @@ static void Cmd_trysetspikes(void) if (gSideTimers[targetSide].spikesAmount == 3) { - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1; + gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else @@ -8395,7 +11988,8 @@ static void Cmd_trysetperishsong(void) for (i = 0; i < gBattlersCount; i++) { if (gStatuses3[i] & STATUS3_PERISH_SONG - || gBattleMons[i].ability == ABILITY_SOUNDPROOF) + || GetBattlerAbility(i) == ABILITY_SOUNDPROOF + || BlocksPrankster(gCurrentMove, gBattlerAttacker, i, TRUE)) { notAffectedCount++; } @@ -8415,7 +12009,7 @@ static void Cmd_trysetperishsong(void) gBattlescriptCurrInstr += 5; } -static void Cmd_rolloutdamagecalculation(void) +static void Cmd_handlerollout(void) { if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { @@ -8424,28 +12018,18 @@ static void Cmd_rolloutdamagecalculation(void) } else { - s32 i; - - if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) // first hit + if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) // First hit. { gDisableStructs[gBattlerAttacker].rolloutTimer = 5; gDisableStructs[gBattlerAttacker].rolloutTimerStartValue = 5; gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gBattlerAttacker] = gCurrentMove; } - if (--gDisableStructs[gBattlerAttacker].rolloutTimer == 0) // last hit + if (--gDisableStructs[gBattlerAttacker].rolloutTimer == 0) // Last hit. { - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_MULTIPLETURNS); + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_MULTIPLETURNS; } - gDynamicBasePower = gBattleMoves[gCurrentMove].power; - - for (i = 1; i < (5 - gDisableStructs[gBattlerAttacker].rolloutTimer); i++) - gDynamicBasePower *= 2; - - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_DEFENSE_CURL) - gDynamicBasePower *= 2; - gBattlescriptCurrInstr++; } } @@ -8453,13 +12037,13 @@ static void Cmd_rolloutdamagecalculation(void) static void Cmd_jumpifconfusedandstatmaxed(void) { if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION - && gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == MAX_STAT_STAGE) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + && !CompareStat(gBattlerTarget, gBattlescriptCurrInstr[1], MAX_STAT_STAGE, CMP_LESS_THAN)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); // Fails if we're confused AND stat cannot be raised else gBattlescriptCurrInstr += 6; } -static void Cmd_furycuttercalc(void) +static void Cmd_handlefurycutter(void) { if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { @@ -8468,40 +12052,43 @@ static void Cmd_furycuttercalc(void) } else { - s32 i; - if (gDisableStructs[gBattlerAttacker].furyCutterCounter != 5) gDisableStructs[gBattlerAttacker].furyCutterCounter++; - gDynamicBasePower = gBattleMoves[gCurrentMove].power; - - for (i = 1; i < gDisableStructs[gBattlerAttacker].furyCutterCounter; i++) - gDynamicBasePower *= 2; - gBattlescriptCurrInstr++; } } -static void Cmd_friendshiptodamagecalculation(void) +static void Cmd_setembargo(void) { - if (gBattleMoves[gCurrentMove].effect == EFFECT_RETURN) - gDynamicBasePower = 10 * (gBattleMons[gBattlerAttacker].friendship) / 25; - else // EFFECT_FRUSTRATION - gDynamicBasePower = 10 * (255 - gBattleMons[gBattlerAttacker].friendship) / 25; - - gBattlescriptCurrInstr++; + if (gStatuses3[gBattlerTarget] & STATUS3_EMBARGO) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + } + else + { + gStatuses3[gBattlerTarget] |= STATUS3_EMBARGO; + gDisableStructs[gBattlerTarget].embargoTimer = 5; + gBattlescriptCurrInstr += 5; + } } static void Cmd_presentdamagecalculation(void) { - s32 rand = Random() & 0xFF; + u32 rand = Random() & 0xFF; if (rand < 102) - gDynamicBasePower = 40; + { + gBattleStruct->presentBasePower = 40; + } else if (rand < 178) - gDynamicBasePower = 80; + { + gBattleStruct->presentBasePower = 80; + } else if (rand < 204) - gDynamicBasePower = 120; + { + gBattleStruct->presentBasePower = 120; + } else { gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 4; @@ -8509,13 +12096,18 @@ static void Cmd_presentdamagecalculation(void) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; } + if (rand < 204) + { gBattlescriptCurrInstr = BattleScript_HitFromCritCalc; + } else if (gBattleMons[gBattlerTarget].maxHP == gBattleMons[gBattlerTarget].hp) + { gBattlescriptCurrInstr = BattleScript_AlreadyAtFullHp; + } else { - gMoveResultFlags &= ~(MOVE_RESULT_DOESNT_AFFECT_FOE); + gMoveResultFlags &= ~MOVE_RESULT_DOESNT_AFFECT_FOE; gBattlescriptCurrInstr = BattleScript_PresentHealTarget; } } @@ -8540,52 +12132,51 @@ static void Cmd_setsafeguard(void) static void Cmd_magnitudedamagecalculation(void) { - s32 magnitude = Random() % 100; + u32 magnitude = Random() % 100; if (magnitude < 5) { - gDynamicBasePower = 10; + gBattleStruct->magnitudeBasePower = 10; magnitude = 4; } else if (magnitude < 15) { - gDynamicBasePower = 30; + gBattleStruct->magnitudeBasePower = 30; magnitude = 5; } else if (magnitude < 35) { - gDynamicBasePower = 50; + gBattleStruct->magnitudeBasePower = 50; magnitude = 6; } else if (magnitude < 65) { - gDynamicBasePower = 70; + gBattleStruct->magnitudeBasePower = 70; magnitude = 7; } else if (magnitude < 85) { - gDynamicBasePower = 90; + gBattleStruct->magnitudeBasePower = 90; magnitude = 8; } else if (magnitude < 95) { - gDynamicBasePower = 110; + gBattleStruct->magnitudeBasePower = 110; magnitude = 9; } else { - gDynamicBasePower = 150; + gBattleStruct->magnitudeBasePower = 150; magnitude = 10; } - PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 2, magnitude) for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { if (gBattlerTarget == gBattlerAttacker) continue; - if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget])) // a valid target was found + if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget])) // A valid target was found. break; } @@ -8628,7 +12219,7 @@ static void Cmd_jumpifnopursuitswitchdmg(void) gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerTarget); gBattlescriptCurrInstr += 5; gBattleScripting.animTurn = 1; - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; } else { @@ -8638,28 +12229,28 @@ static void Cmd_jumpifnopursuitswitchdmg(void) static void Cmd_setsunny(void) { - if (gBattleWeather & WEATHER_SUN_ANY) + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SUN, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED; } else { - gBattleWeather = WEATHER_SUN_TEMPORARY; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SUNLIGHT; - gWishFutureKnock.weatherDuration = 5; } gBattlescriptCurrInstr++; } -static void Cmd_maxattackhalvehp(void) // belly drum +// Belly Drum +static void Cmd_maxattackhalvehp(void) { u32 halfHp = gBattleMons[gBattlerAttacker].maxHP / 2; if (!(gBattleMons[gBattlerAttacker].maxHP / 2)) halfHp = 1; + // Belly Drum fails if the user's current HP is less than half its maximum, or if the user's Attack is already at +6 (even if the user has Contrary). if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < MAX_STAT_STAGE && gBattleMons[gBattlerAttacker].hp > halfHp) { @@ -8676,7 +12267,8 @@ static void Cmd_maxattackhalvehp(void) // belly drum } } -static void Cmd_copyfoestats(void) // psych up +// Psych Up +static void Cmd_copyfoestats(void) { s32 i; @@ -8690,35 +12282,52 @@ static void Cmd_copyfoestats(void) // psych up static void Cmd_rapidspinfree(void) { + u8 atkSide = GetBattlerSide(gBattlerAttacker); + if (gBattleMons[gBattlerAttacker].status2 & STATUS2_WRAPPED) { gBattleScripting.battler = gBattlerTarget; - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_WRAPPED); + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_WRAPPED; gBattlerTarget = *(gBattleStruct->wrappedBy + gBattlerAttacker); - - gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN; - gBattleTextBuff1[1] = B_BUFF_MOVE; - gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gBattlerAttacker * 2 + 0); - gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gBattlerAttacker * 2 + 1); - gBattleTextBuff1[4] = B_BUFF_EOS; - + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[gBattlerAttacker]); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_WrapFree; } else if (gStatuses3[gBattlerAttacker] & STATUS3_LEECHSEED) { - gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED); - gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED_BATTLER); + gStatuses3[gBattlerAttacker] &= ~STATUS3_LEECHSEED; + gStatuses3[gBattlerAttacker] &= ~STATUS3_LEECHSEED_BATTLER; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_LeechSeedFree; } - else if (gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_SPIKES) + else if (gSideStatuses[atkSide] & SIDE_STATUS_SPIKES) { - gSideStatuses[GetBattlerSide(gBattlerAttacker)] &= ~(SIDE_STATUS_SPIKES); - gSideTimers[GetBattlerSide(gBattlerAttacker)].spikesAmount = 0; + gSideStatuses[atkSide] &= ~SIDE_STATUS_SPIKES; + gSideTimers[atkSide].spikesAmount = 0; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SpikesFree; } + else if (gSideStatuses[atkSide] & SIDE_STATUS_TOXIC_SPIKES) + { + gSideStatuses[atkSide] &= ~SIDE_STATUS_TOXIC_SPIKES; + gSideTimers[atkSide].toxicSpikesAmount = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ToxicSpikesFree; + } + else if (gSideStatuses[atkSide] & SIDE_STATUS_STICKY_WEB) + { + gSideStatuses[atkSide] &= ~SIDE_STATUS_STICKY_WEB; + gSideTimers[atkSide].stickyWebAmount = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_StickyWebFree; + } + else if (gSideStatuses[atkSide] & SIDE_STATUS_STEALTH_ROCK) + { + gSideStatuses[atkSide] &= ~SIDE_STATUS_STEALTH_ROCK; + gSideTimers[atkSide].stealthRockAmount = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_StealthRockFree; + } else { gBattlescriptCurrInstr++; @@ -8734,15 +12343,24 @@ static void Cmd_setdefensecurlbit(void) static void Cmd_recoverbasedonsunlight(void) { gBattlerTarget = gBattlerAttacker; - if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP) { - if (gBattleWeather == 0 || !WEATHER_HAS_EFFECT) - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2; - else if (gBattleWeather & WEATHER_SUN_ANY) - gBattleMoveDamage = 20 * gBattleMons[gBattlerAttacker].maxHP / 30; - else // not sunny weather - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + if (gCurrentMove == MOVE_SHORE_UP) + { + if (WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_SANDSTORM) + gBattleMoveDamage = 20 * gBattleMons[gBattlerAttacker].maxHP / 30; + else + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2; + } + else + { + if (!(gBattleWeather & B_WEATHER_ANY) || !WEATHER_HAS_EFFECT || GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA) + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2; + else if (gBattleWeather & B_WEATHER_SUN) + gBattleMoveDamage = 20 * gBattleMons[gBattlerAttacker].maxHP / 30; + else // not sunny weather + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + } if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -8756,42 +12374,31 @@ static void Cmd_recoverbasedonsunlight(void) } } -static void Cmd_hiddenpowercalc(void) +static void Cmd_setstickyweb(void) { - u8 powerBits; - u8 typeBits; + u8 targetSide = GetBattlerSide(gBattlerTarget); - powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1) - | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0) - | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1) - | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2) - | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3) - | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4); - - typeBits = ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0) - | ((gBattleMons[gBattlerAttacker].attackIV & 1) << 1) - | ((gBattleMons[gBattlerAttacker].defenseIV & 1) << 2) - | ((gBattleMons[gBattlerAttacker].speedIV & 1) << 3) - | ((gBattleMons[gBattlerAttacker].spAttackIV & 1) << 4) - | ((gBattleMons[gBattlerAttacker].spDefenseIV & 1) << 5); - - gDynamicBasePower = (40 * powerBits) / 63 + 30; - - gBattleStruct->dynamicMoveType = (15 * typeBits) / 63 + 1; - if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY) - gBattleStruct->dynamicMoveType++; - gBattleStruct->dynamicMoveType |= 0xC0; - - gBattlescriptCurrInstr++; + if (gSideStatuses[targetSide] & SIDE_STATUS_STICKY_WEB) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + } + else + { + gSideStatuses[targetSide] |= SIDE_STATUS_STICKY_WEB; + gSideTimers[targetSide].stickyWebBattlerSide = GetBattlerSide(gBattlerAttacker); // For Court Change/Defiant - set this to the user's side + gSideTimers[targetSide].stickyWebAmount = 1; + gBattleStruct->stickyWebUser = gBattlerAttacker; // For Mirror Armor + gBattlescriptCurrInstr += 5; + } } static void Cmd_selectfirstvalidtarget(void) { for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { - if (gBattlerTarget == gBattlerAttacker) + if (gBattlerTarget == gBattlerAttacker && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER)) continue; - if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget])) + if (IsBattlerAlive(gBattlerTarget)) break; } gBattlescriptCurrInstr++; @@ -8809,12 +12416,6 @@ static void Cmd_trysetfutureattack(void) gWishFutureKnock.futureSightMove[gBattlerTarget] = gCurrentMove; gWishFutureKnock.futureSightAttacker[gBattlerTarget] = gBattlerAttacker; gWishFutureKnock.futureSightCounter[gBattlerTarget] = 3; - gWishFutureKnock.futureSightDmg[gBattlerTarget] = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove, - gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)], 0, - 0, gBattlerAttacker, gBattlerTarget); - - if (gProtectStructs[gBattlerAttacker].helpingHand) - gWishFutureKnock.futureSightDmg[gBattlerTarget] = gWishFutureKnock.futureSightDmg[gBattlerTarget] * 15 / 10; if (gCurrentMove == MOVE_DOOM_DESIRE) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOOM_DESIRE; @@ -8847,7 +12448,7 @@ static void Cmd_trydobeatup(void) && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS)) - break; + break; } if (gBattleCommunication[0] < PARTY_SIZE) { @@ -8878,6 +12479,7 @@ static void Cmd_setsemiinvulnerablebit(void) { case MOVE_FLY: case MOVE_BOUNCE: + case MOVE_SKY_DROP: gStatuses3[gBattlerAttacker] |= STATUS3_ON_AIR; break; case MOVE_DIG: @@ -8886,6 +12488,10 @@ static void Cmd_setsemiinvulnerablebit(void) case MOVE_DIVE: gStatuses3[gBattlerAttacker] |= STATUS3_UNDERWATER; break; + case MOVE_PHANTOM_FORCE: + case MOVE_SHADOW_FORCE: + gStatuses3[gBattlerAttacker] |= STATUS3_PHANTOM_FORCE; + break; } gBattlescriptCurrInstr++; @@ -8893,20 +12499,7 @@ static void Cmd_setsemiinvulnerablebit(void) static void Cmd_clearsemiinvulnerablebit(void) { - switch (gCurrentMove) - { - case MOVE_FLY: - case MOVE_BOUNCE: - gStatuses3[gBattlerAttacker] &= ~STATUS3_ON_AIR; - break; - case MOVE_DIG: - gStatuses3[gBattlerAttacker] &= ~STATUS3_UNDERGROUND; - break; - case MOVE_DIVE: - gStatuses3[gBattlerAttacker] &= ~STATUS3_UNDERWATER; - break; - } - + gStatuses3[gBattlerAttacker] &= ~STATUS3_SEMI_INVULNERABLE; gBattlescriptCurrInstr++; } @@ -8920,43 +12513,52 @@ static void Cmd_setminimize(void) static void Cmd_sethail(void) { - if (gBattleWeather & WEATHER_HAIL_ANY) + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_HAIL, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED; } else { - gBattleWeather = WEATHER_HAIL; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_HAIL; - gWishFutureKnock.weatherDuration = 5; } gBattlescriptCurrInstr++; } -static void Cmd_jumpifattackandspecialattackcannotfall(void) // memento +static void Cmd_trymemento(void) { + #if B_MEMENTO_FAIL == GEN_3 if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == MIN_STAT_STAGE && gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED) + #else + if (gBattleCommunication[MISS_TYPE] == B_MSG_PROTECTED + || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE + || IsBattlerProtected(gBattlerTarget, gCurrentMove) + || DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + #endif { + // Failed, unprotected target already has minimum Attack and Special Attack. gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { + // Success, drop user's HP bar to 0 gActiveBattler = gBattlerAttacker; gBattleMoveDamage = gBattleMons[gActiveBattler].hp; - BtlController_EmitHealthBarUpdate(0, INSTANT_HP_BAR_DROP); + BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 5; } } -static void Cmd_setforcedtarget(void) // follow me +// Follow Me +static void Cmd_setforcedtarget(void) { - gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTimer = 1; - gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTarget = gBattlerAttacker; + gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 1; + gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget = gBattlerTarget; + gSideTimers[GetBattlerSide(gBattlerTarget)].followmePowder = TestMoveFlags(gCurrentMove, FLAG_POWDER); gBattlescriptCurrInstr++; } @@ -8968,23 +12570,40 @@ static void Cmd_setcharge(void) gBattlescriptCurrInstr++; } -static void Cmd_callterrainattack(void) // nature power +// Nature Power +static void Cmd_callterrainattack(void) { - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gCurrentMove = sNaturePowerMoves[gBattleTerrain]; - gBattlerTarget = GetMoveTarget(gCurrentMove, 0); + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; + gCurrentMove = GetNaturePowerMove(); + gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); gBattlescriptCurrInstr++; } -static void Cmd_cureifburnedparalysedorpoisoned(void) // refresh +u16 GetNaturePowerMove(void) +{ + if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + return MOVE_MOONBLAST; + else if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + return MOVE_THUNDERBOLT; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + return MOVE_ENERGY_BALL; + else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + return MOVE_PSYCHIC; + else if (sNaturePowerMoves == MOVE_NONE) + return MOVE_TRI_ATTACK; + return sNaturePowerMoves[gBattleTerrain]; +} + +// Refresh +static void Cmd_cureifburnedparalysedorpoisoned(void) { if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)) { gBattleMons[gBattlerAttacker].status1 = 0; gBattlescriptCurrInstr += 5; gActiveBattler = gBattlerAttacker; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); } else @@ -9016,10 +12635,28 @@ static void Cmd_jumpifnodamage(void) static void Cmd_settaunt(void) { +#if B_OBLIVIOUS_TAUNT >= GEN_6 + if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) + { + gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp; + gLastUsedAbility = ABILITY_OBLIVIOUS; + RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS); + } + else +#endif if (gDisableStructs[gBattlerTarget].tauntTimer == 0) { - gDisableStructs[gBattlerTarget].tauntTimer = 2; - gDisableStructs[gBattlerTarget].tauntTimer2 = 2; + #if B_TAUNT_TURNS >= GEN_5 + u8 turns = 4; + if (GetBattlerTurnOrderNum(gBattlerTarget) > GetBattlerTurnOrderNum(gBattlerAttacker)) + turns--; // If the target hasn't yet moved this turn, Taunt lasts for only three turns (source: Bulbapedia) + #elif B_TAUNT_TURNS == GEN_4 + u8 turns = (Random() & 2) + 3; + #else + u8 turns = 2; + #endif + + gDisableStructs[gBattlerTarget].tauntTimer = gDisableStructs[gBattlerTarget].tauntTimer2 = turns; gBattlescriptCurrInstr += 5; } else @@ -9037,7 +12674,7 @@ static void Cmd_trysethelpinghand(void) && !gProtectStructs[gBattlerAttacker].helpingHand && !gProtectStructs[gBattlerTarget].helpingHand) { - gProtectStructs[gBattlerTarget].helpingHand = 1; + gProtectStructs[gBattlerTarget].helpingHand = TRUE; gBattlescriptCurrInstr += 5; } else @@ -9046,7 +12683,8 @@ static void Cmd_trysethelpinghand(void) } } -static void Cmd_tryswapitems(void) // trick +// Trick +static void Cmd_tryswapitems(void) { // opponent can't swap items with player in regular battles if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL @@ -9055,7 +12693,11 @@ static void Cmd_tryswapitems(void) // trick | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_SECRET_BASE - | BATTLE_TYPE_RECORDED_LINK)))) + | BATTLE_TYPE_RECORDED_LINK + #if B_TRAINERS_KNOCK_OFF_ITEMS + | BATTLE_TYPE_TRAINER + #endif + )))) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } @@ -9064,7 +12706,7 @@ static void Cmd_tryswapitems(void) // trick u8 sideAttacker = GetBattlerSide(gBattlerAttacker); u8 sideTarget = GetBattlerSide(gBattlerTarget); - // you can't swap items if they were knocked off in regular battles + // You can't swap items if they were knocked off in regular battles if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_FRONTIER @@ -9077,16 +12719,16 @@ static void Cmd_tryswapitems(void) // trick } // can't swap if two pokemon don't have an item // or if either of them is an enigma berry or a mail - else if ((gBattleMons[gBattlerAttacker].item == 0 && gBattleMons[gBattlerTarget].item == 0) - || gBattleMons[gBattlerAttacker].item == ITEM_ENIGMA_BERRY - || gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY - || IS_ITEM_MAIL(gBattleMons[gBattlerAttacker].item) - || IS_ITEM_MAIL(gBattleMons[gBattlerTarget].item)) + else if ((gBattleMons[gBattlerAttacker].item == ITEM_NONE && gBattleMons[gBattlerTarget].item == ITEM_NONE) + || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item) + || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerTarget].item) + || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerTarget].item) + || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item)) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } // check if ability prevents swapping - else if (gBattleMons[gBattlerTarget].ability == ABILITY_STICKY_HOLD) + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD) { gBattlescriptCurrInstr = BattleScript_StickyHoldActivates; gLastUsedAbility = gBattleMons[gBattlerTarget].ability; @@ -9101,50 +12743,75 @@ static void Cmd_tryswapitems(void) // trick oldItemAtk = gBattleMons[gBattlerAttacker].item; *newItemAtk = gBattleMons[gBattlerTarget].item; - gBattleMons[gBattlerAttacker].item = 0; + gBattleMons[gBattlerAttacker].item = ITEM_NONE; gBattleMons[gBattlerTarget].item = oldItemAtk; + RecordItemEffectBattle(gBattlerAttacker, 0); + RecordItemEffectBattle(gBattlerTarget, ItemId_GetHoldEffect(oldItemAtk)); + gActiveBattler = gBattlerAttacker; - BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, newItemAtk); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(*newItemAtk), newItemAtk); MarkBattlerForControllerExec(gBattlerAttacker); gActiveBattler = gBattlerTarget; - BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBattlerTarget].item); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item); MarkBattlerForControllerExec(gBattlerTarget); - *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerTarget]) + 0) = 0; - *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerTarget]) + 1) = 0; - - *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerAttacker]) + 0) = 0; - *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerAttacker]) + 1) = 0; + gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE; + gBattleStruct->choicedMove[gBattlerAttacker] = MOVE_NONE; gBattlescriptCurrInstr += 5; PREPARE_ITEM_BUFFER(gBattleTextBuff1, *newItemAtk) PREPARE_ITEM_BUFFER(gBattleTextBuff2, oldItemAtk) - if (oldItemAtk != 0 && *newItemAtk != 0) + if (!(sideAttacker == sideTarget && IsPartnerMonFromSameTrainer(gBattlerAttacker))) + { + // if targeting your own side and you aren't in a multi battle, don't save items as stolen + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + TrySaveExchangedItem(gBattlerAttacker, oldItemAtk); + if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) + TrySaveExchangedItem(gBattlerTarget, *newItemAtk); + } + + if (oldItemAtk != ITEM_NONE && *newItemAtk != ITEM_NONE) + { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_BOTH; // attacker's item -> <- target's item - else if (oldItemAtk == 0 && *newItemAtk != 0) + } + else if (oldItemAtk == ITEM_NONE && *newItemAtk != ITEM_NONE) + { + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNBURDEN && gBattleResources->flags->flags[gBattlerAttacker] & RESOURCE_FLAG_UNBURDEN) + gBattleResources->flags->flags[gBattlerAttacker] &= ~RESOURCE_FLAG_UNBURDEN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_TAKEN; // nothing -> <- target's item + } else + { + CheckSetUnburden(gBattlerAttacker); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_GIVEN; // attacker's item -> <- nothing + } } } } -static void Cmd_trycopyability(void) // role play +// Role Play +static void Cmd_trycopyability(void) { - if (gBattleMons[gBattlerTarget].ability != 0 - && gBattleMons[gBattlerTarget].ability != ABILITY_WONDER_GUARD) + u16 defAbility = gBattleMons[gBattlerTarget].ability; + + if (gBattleMons[gBattlerAttacker].ability == defAbility + || defAbility == ABILITY_NONE + || IsRolePlayBannedAbilityAtk(gBattleMons[gBattlerAttacker].ability) + || IsRolePlayBannedAbility(defAbility)) { - gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability; - gLastUsedAbility = gBattleMons[gBattlerTarget].ability; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerAttacker].ability; + gBattleMons[gBattlerAttacker].ability = defAbility; + gLastUsedAbility = defAbility; + gBattlescriptCurrInstr += 5; } } @@ -9156,7 +12823,7 @@ static void Cmd_trywish(void) if (gWishFutureKnock.wishCounter[gBattlerAttacker] == 0) { gWishFutureKnock.wishCounter[gBattlerAttacker] = 2; - gWishFutureKnock.wishMonId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker]; + gWishFutureKnock.wishPartyId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker]; gBattlescriptCurrInstr += 6; } else @@ -9165,13 +12832,17 @@ static void Cmd_trywish(void) } break; case 1: // heal effect - PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerTarget, gWishFutureKnock.wishMonId[gBattlerTarget]) + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerTarget, gWishFutureKnock.wishPartyId[gBattlerTarget]) + #if B_WISH_HP_SOURCE >= GEN_5 + if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) + gBattleMoveDamage = max(1, GetMonData(&gPlayerParty[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2); + else + gBattleMoveDamage = max(1, GetMonData(&gEnemyParty[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2); + #else + gBattleMoveDamage = max(1, gBattleMons[gBattlerTarget].maxHP / 2); + #endif - gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else @@ -9181,30 +12852,35 @@ static void Cmd_trywish(void) } } -static void Cmd_trysetroots(void) // ingrain +static void Cmd_settoxicspikes(void) { - if (gStatuses3[gBattlerAttacker] & STATUS3_ROOTED) + u8 targetSide = GetBattlerSide(gBattlerTarget); + if (gSideTimers[targetSide].toxicSpikesAmount >= 2) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { - gStatuses3[gBattlerAttacker] |= STATUS3_ROOTED; + gSideTimers[targetSide].toxicSpikesAmount++; + gSideStatuses[targetSide] |= SIDE_STATUS_TOXIC_SPIKES; gBattlescriptCurrInstr += 5; } } -static void Cmd_doubledamagedealtifdamaged(void) +static void Cmd_setgastroacid(void) { - if ((gProtectStructs[gBattlerAttacker].physicalDmg - && gProtectStructs[gBattlerAttacker].physicalBattlerId == gBattlerTarget) - || (gProtectStructs[gBattlerAttacker].specialDmg - && gProtectStructs[gBattlerAttacker].specialBattlerId == gBattlerTarget)) + if (IsGastroAcidBannedAbility(gBattleMons[gBattlerTarget].ability)) { - gBattleScripting.dmgMultiplier = 2; + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } + else + { + if (gBattleMons[gBattlerTarget].ability == ABILITY_NEUTRALIZING_GAS) + gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; - gBattlescriptCurrInstr++; + gStatuses3[gBattlerTarget] |= STATUS3_GASTRO_ACID; + gBattlescriptCurrInstr += 5; + } } static void Cmd_setyawn(void) @@ -9214,6 +12890,18 @@ static void Cmd_setyawn(void) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } + else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) + { + // When Yawn is used while Electric Terrain is set and drowsiness is set from Yawn being used against target in the previous turn: + // "But it failed" will display first. + gBattlescriptCurrInstr = BattleScript_ElectricTerrainPrevents; + } + else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_MISTY_TERRAIN)) + { + // When Yawn is used while Misty Terrain is set and drowsiness is set from Yawn being used against target in the previous turn: + // "But it failed" will display first. + gBattlescriptCurrInstr = BattleScript_MistyTerrainPrevents; + } else { gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); @@ -9234,35 +12922,63 @@ static void Cmd_setdamagetohealthdifference(void) } } -static void Cmd_scaledamagebyhealthratio(void) +static void HandleRoomMove(u32 statusFlag, u8 *timer, u8 stringId) { - if (gDynamicBasePower == 0) + if (gFieldStatuses & statusFlag) { - u8 power = gBattleMoves[gCurrentMove].power; - gDynamicBasePower = gBattleMons[gBattlerAttacker].hp * power / gBattleMons[gBattlerAttacker].maxHP; - if (gDynamicBasePower == 0) - gDynamicBasePower = 1; + gFieldStatuses &= ~statusFlag; + *timer = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = stringId + 1; + } + else + { + gFieldStatuses |= statusFlag; + *timer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = stringId; + } +} + +static void Cmd_setroom(void) +{ + switch (gBattleMoves[gCurrentMove].effect) + { + case EFFECT_TRICK_ROOM: + HandleRoomMove(STATUS_FIELD_TRICK_ROOM, &gFieldTimers.trickRoomTimer, 0); + break; + case EFFECT_WONDER_ROOM: + HandleRoomMove(STATUS_FIELD_WONDER_ROOM, &gFieldTimers.wonderRoomTimer, 2); + break; + case EFFECT_MAGIC_ROOM: + HandleRoomMove(STATUS_FIELD_MAGIC_ROOM, &gFieldTimers.magicRoomTimer, 4); + break; + default: + gBattleCommunication[MULTISTRING_CHOOSER] = 6; + break; } gBattlescriptCurrInstr++; } -static void Cmd_tryswapabilities(void) // skill swap +// Skill Swap +static void Cmd_tryswapabilities(void) { - if ((gBattleMons[gBattlerAttacker].ability == 0 - && gBattleMons[gBattlerTarget].ability == 0) - || gBattleMons[gBattlerAttacker].ability == ABILITY_WONDER_GUARD - || gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD - || gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); - } + if (IsSkillSwapBannedAbility(gBattleMons[gBattlerAttacker].ability) + || IsSkillSwapBannedAbility(gBattleMons[gBattlerTarget].ability)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + return; + } + + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + } else { - u8 abilityAtk = gBattleMons[gBattlerAttacker].ability; + u16 abilityAtk = gBattleMons[gBattlerAttacker].ability; gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability; gBattleMons[gBattlerTarget].ability = abilityAtk; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr += 5; } } @@ -9303,47 +13019,51 @@ static void Cmd_tryimprison(void) } } } - if (battlerId == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes + if (battlerId == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes. gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } -static void Cmd_trysetgrudge(void) +static void Cmd_setstealthrock(void) { - if (gStatuses3[gBattlerAttacker] & STATUS3_GRUDGE) + u8 targetSide = GetBattlerSide(gBattlerTarget); + if (gSideStatuses[targetSide] & SIDE_STATUS_STEALTH_ROCK) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { - gStatuses3[gBattlerAttacker] |= STATUS3_GRUDGE; + gSideStatuses[targetSide] |= SIDE_STATUS_STEALTH_ROCK; + gSideTimers[targetSide].stealthRockAmount = 1; gBattlescriptCurrInstr += 5; } } -static void Cmd_weightdamagecalculation(void) +static void Cmd_setuserstatus3(void) { - s32 i; - for (i = 0; sWeightToDamageTable[i] != 0xFFFF; i += 2) + u32 flags = T1_READ_32(gBattlescriptCurrInstr + 1); + + if (gStatuses3[gBattlerAttacker] & flags) { - if (sWeightToDamageTable[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), 1)) - break; + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); } - - if (sWeightToDamageTable[i] != 0xFFFF) - gDynamicBasePower = sWeightToDamageTable[i + 1]; else - gDynamicBasePower = 120; - - gBattlescriptCurrInstr++; + { + gStatuses3[gBattlerAttacker] |= flags; + if (flags & STATUS3_MAGNET_RISE) + gDisableStructs[gBattlerAttacker].magnetRiseTimer = 5; + if (flags & STATUS3_LASER_FOCUS) + gDisableStructs[gBattlerAttacker].laserFocusTimer = 2; + gBattlescriptCurrInstr += 9; + } } static void Cmd_assistattackselect(void) { s32 chooseableMovesNo = 0; - struct Pokemon* party; + struct Pokemon *party; s32 monId, moveId; - u16* movesArray = gBattleStruct->assistPossibleMoves; + u16 *validMoves = gBattleStruct->assistPossibleMoves; if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER) party = gEnemyParty; @@ -9364,25 +13084,18 @@ static void Cmd_assistattackselect(void) s32 i = 0; u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId); - if (IsInvalidForSleepTalkOrAssist(move)) + if (sForbiddenMoves[move] & FORBIDDEN_ASSIST) continue; - for (; sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END && move != sMovesForbiddenToCopy[i]; i++); - - if (sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END) - continue; - if (move == MOVE_NONE) - continue; - - movesArray[chooseableMovesNo] = move; + validMoves[chooseableMovesNo] = move; chooseableMovesNo++; } } if (chooseableMovesNo) { - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gCalledMove = movesArray[((Random() & 0xFF) * chooseableMovesNo) >> 8]; - gBattlerTarget = GetMoveTarget(gCalledMove, 0); + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; + gCalledMove = validMoves[((Random() & 0xFF) * chooseableMovesNo) >> 8]; + gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); gBattlescriptCurrInstr += 5; } else @@ -9394,28 +13107,29 @@ static void Cmd_assistattackselect(void) static void Cmd_trysetmagiccoat(void) { gBattlerTarget = gBattlerAttacker; - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1; + gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { - gProtectStructs[gBattlerAttacker].bounceMove = 1; + gProtectStructs[gBattlerAttacker].bounceMove = TRUE; gBattlescriptCurrInstr += 5; } } -static void Cmd_trysetsnatch(void) // snatch +// Snatch +static void Cmd_trysetsnatch(void) { - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1; + gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { - gProtectStructs[gBattlerAttacker].stealMove = 1; + gProtectStructs[gBattlerAttacker].stealMove = TRUE; gBattlescriptCurrInstr += 5; } } @@ -9446,17 +13160,39 @@ static void Cmd_trygetintimidatetarget(void) static void Cmd_switchoutabilities(void) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - - switch (gBattleMons[gActiveBattler].ability) + if (gBattleMons[gActiveBattler].ability == ABILITY_NEUTRALIZING_GAS) { - case ABILITY_NATURAL_CURE: - gBattleMons[gActiveBattler].status1 = 0; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, gBitTable[*(gBattleStruct->field_58 + gActiveBattler)], 4, &gBattleMons[gActiveBattler].status1); - MarkBattlerForControllerExec(gActiveBattler); - break; + gBattleMons[gActiveBattler].ability = ABILITY_NONE; + BattleScriptPush(gBattlescriptCurrInstr); + gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; } + else + { + switch (GetBattlerAbility(gActiveBattler)) + { + case ABILITY_NATURAL_CURE: + gBattleMons[gActiveBattler].status1 = 0; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, + gBitTable[*(gBattleStruct->battlerPartyIndexes + gActiveBattler)], + sizeof(gBattleMons[gActiveBattler].status1), + &gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); + break; + case ABILITY_REGENERATOR: + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 3; + gBattleMoveDamage += gBattleMons[gActiveBattler].hp; + if (gBattleMoveDamage > gBattleMons[gActiveBattler].maxHP) + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, + gBitTable[*(gBattleStruct->battlerPartyIndexes + gActiveBattler)], + sizeof(gBattleMoveDamage), + &gBattleMoveDamage); + MarkBattlerForControllerExec(gActiveBattler); + break; + } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr += 2; + } } static void Cmd_jumpifhasnohp(void) @@ -9471,44 +13207,120 @@ static void Cmd_jumpifhasnohp(void) static void Cmd_getsecretpowereffect(void) { - switch (gBattleTerrain) - { - case BATTLE_TERRAIN_GRASS: - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_POISON; - break; - case BATTLE_TERRAIN_LONG_GRASS: - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_SLEEP; - break; - case BATTLE_TERRAIN_SAND: - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_ACC_MINUS_1; - break; - case BATTLE_TERRAIN_UNDERWATER: - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_DEF_MINUS_1; - break; - case BATTLE_TERRAIN_WATER: - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_ATK_MINUS_1; - break; - case BATTLE_TERRAIN_POND: - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_SPD_MINUS_1; - break; - case BATTLE_TERRAIN_MOUNTAIN: - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_CONFUSION; - break; - case BATTLE_TERRAIN_CAVE: - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_FLINCH; - break; - default: - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_PARALYSIS; - break; - } + gBattleScripting.moveEffect = GetSecretPowerMoveEffect(); gBattlescriptCurrInstr++; } +u16 GetSecretPowerMoveEffect(void) +{ + u16 moveEffect; + u32 fieldTerrain = gFieldStatuses & STATUS_FIELD_TERRAIN_ANY; + if (fieldTerrain) + { + switch (fieldTerrain) + { + case STATUS_FIELD_MISTY_TERRAIN: + moveEffect = MOVE_EFFECT_SP_ATK_MINUS_1; + break; + case STATUS_FIELD_GRASSY_TERRAIN: + moveEffect = MOVE_EFFECT_SLEEP; + break; + case STATUS_FIELD_ELECTRIC_TERRAIN: + moveEffect = MOVE_EFFECT_PARALYSIS; + break; + case STATUS_FIELD_PSYCHIC_TERRAIN: + moveEffect = MOVE_EFFECT_SPD_MINUS_1; + break; + default: + moveEffect = MOVE_EFFECT_PARALYSIS; + break; + } + } + else + { + switch (gBattleTerrain) + { + case BATTLE_TERRAIN_GRASS: + #if B_SECRET_POWER_EFFECT >= GEN_4 + moveEffect = MOVE_EFFECT_SLEEP; + #else + moveEffect = MOVE_EFFECT_POISON; + #endif + break; + case BATTLE_TERRAIN_LONG_GRASS: + moveEffect = MOVE_EFFECT_SLEEP; + break; + case BATTLE_TERRAIN_SAND: + moveEffect = MOVE_EFFECT_ACC_MINUS_1; + break; + case BATTLE_TERRAIN_UNDERWATER: + #if B_SECRET_POWER_EFFECT >= GEN_6 + moveEffect = MOVE_EFFECT_ATK_MINUS_1; + #else + moveEffect = MOVE_EFFECT_DEF_MINUS_1; + #endif + break; + case BATTLE_TERRAIN_WATER: + moveEffect = MOVE_EFFECT_ATK_MINUS_1; + break; + case BATTLE_TERRAIN_POND: + #if B_SECRET_POWER_EFFECT >= GEN_4 + moveEffect = MOVE_EFFECT_ATK_MINUS_1; + #else + moveEffect = MOVE_EFFECT_SPD_MINUS_1; + #endif + break; + case BATTLE_TERRAIN_MOUNTAIN: + #if B_SECRET_POWER_EFFECT >= GEN_5 + moveEffect = MOVE_EFFECT_ACC_MINUS_1; + #elif B_SECRET_POWER_EFFECT == GEN_4 + moveEffect = MOVE_EFFECT_FLINCH; + #else + moveEffect = MOVE_EFFECT_CONFUSION; + #endif + break; + case BATTLE_TERRAIN_CAVE: + case BATTLE_TERRAIN_BURIAL_GROUND: + case BATTLE_TERRAIN_SPACE: + moveEffect = MOVE_EFFECT_FLINCH; + break; + case BATTLE_TERRAIN_SOARING: + case BATTLE_TERRAIN_SKY_PILLAR: + case BATTLE_TERRAIN_MARSH: + case BATTLE_TERRAIN_SWAMP: + moveEffect = MOVE_EFFECT_SPD_MINUS_1; + break; + case BATTLE_TERRAIN_PUDDLE: + #if B_SECRET_POWER_EFFECT >= GEN_5 + moveEffect = MOVE_EFFECT_SPD_MINUS_1; + #else + moveEffect = MOVE_EFFECT_ACC_MINUS_1; + #endif + break; + case BATTLE_TERRAIN_SNOW: + case BATTLE_TERRAIN_ICE: + moveEffect = MOVE_EFFECT_FREEZE; + break; + case BATTLE_TERRAIN_VOLCANO: + moveEffect = MOVE_EFFECT_BURN; + break; + case BATTLE_TERRAIN_ULTRA_SPACE: + moveEffect = MOVE_EFFECT_DEF_MINUS_1; + break; + default: + moveEffect = MOVE_EFFECT_PARALYSIS; + break; + } + } + return moveEffect; +} + static void Cmd_pickup(void) { s32 i; u16 species, heldItem; - u8 ability; + u16 ability; + u8 lvlDivBy10; if (InBattlePike()) { @@ -9521,13 +13333,10 @@ static void Cmd_pickup(void) species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)) - ability = gBaseStats[species].abilities[1]; - else - ability = gBaseStats[species].abilities[0]; + ability = gBaseStats[species].abilities[GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)]; if (ability == ABILITY_PICKUP - && species != 0 + && species != SPECIES_NONE && species != SPECIES_EGG && heldItem == ITEM_NONE && (Random() % 10) == 0) @@ -9535,6 +13344,19 @@ static void Cmd_pickup(void) heldItem = GetBattlePyramidPickupItemId(); SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } + #if (defined ITEM_HONEY) + else if (ability == ABILITY_HONEY_GATHER + && species != 0 + && species != SPECIES_EGG + && heldItem == ITEM_NONE) + { + if ((lvlDivBy10 + 1 ) * 5 > Random() % 100) + { + heldItem = ITEM_HONEY; + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + } + #endif } } else @@ -9543,23 +13365,20 @@ static void Cmd_pickup(void) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + lvlDivBy10 = (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL)-1) / 10; //Moving this here makes it easier to add in abilities like Honey Gather + if (lvlDivBy10 > 9) + lvlDivBy10 = 9; - if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)) - ability = gBaseStats[species].abilities[1]; - else - ability = gBaseStats[species].abilities[0]; + ability = gBaseStats[species].abilities[GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)]; if (ability == ABILITY_PICKUP - && species != 0 + && species != SPECIES_NONE && species != SPECIES_EGG && heldItem == ITEM_NONE && (Random() % 10) == 0) { s32 j; s32 rand = Random() % 100; - u8 lvlDivBy10 = (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) - 1) / 10; - if (lvlDivBy10 > 9) - lvlDivBy10 = 9; for (j = 0; j < (int)ARRAY_COUNT(sPickupProbabilities); j++) { @@ -9575,6 +13394,19 @@ static void Cmd_pickup(void) } } } + #if (defined ITEM_HONEY) + else if (ability == ABILITY_HONEY_GATHER + && species != 0 + && species != SPECIES_EGG + && heldItem == ITEM_NONE) + { + if ((lvlDivBy10 + 1 ) * 5 > Random() % 100) + { + heldItem = ITEM_HONEY; + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + } + #endif } } @@ -9586,9 +13418,9 @@ static void Cmd_docastformchangeanimation(void) gActiveBattler = gBattleScripting.battler; if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE) - *(&gBattleStruct->formToChangeInto) |= 0x80; + *(&gBattleStruct->formToChangeInto) |= CASTFORM_SUBSTITUTE; - BtlController_EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, gBattleStruct->formToChangeInto); + BtlController_EmitBattleAnimation(BUFFER_A, B_ANIM_CASTFORM_CHANGE, gBattleStruct->formToChangeInto); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr++; @@ -9599,7 +13431,7 @@ static void Cmd_trycastformdatachange(void) u8 form; gBattlescriptCurrInstr++; - form = CastformDataTypeChange(gBattleScripting.battler); + form = TryWeatherFormChange(gBattleScripting.battler); if (form) { BattleScriptPushCursorAndCallback(BattleScript_CastformChange); @@ -9607,27 +13439,48 @@ static void Cmd_trycastformdatachange(void) } } -static void Cmd_settypebasedhalvers(void) // water and mud sport +// Water and Mud Sport +static void Cmd_settypebasedhalvers(void) { bool8 worked = FALSE; if (gBattleMoves[gCurrentMove].effect == EFFECT_MUD_SPORT) { - if (!(gStatuses3[gBattlerAttacker] & STATUS3_MUDSPORT)) - { - gStatuses3[gBattlerAttacker] |= STATUS3_MUDSPORT; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC; - worked = TRUE; - } + #if B_SPORT_TURNS >= GEN_6 + if (!(gFieldStatuses & STATUS_FIELD_MUDSPORT)) + { + gFieldStatuses |= STATUS_FIELD_MUDSPORT; + gFieldTimers.mudSportTimer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC; + worked = TRUE; + } + #else + if (!(gStatuses4[gBattlerAttacker] & STATUS4_MUD_SPORT)) + { + gStatuses4[gBattlerAttacker] |= STATUS4_MUD_SPORT; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC; + worked = TRUE; + } + #endif } - else // water sport + else // Water Sport { - if (!(gStatuses3[gBattlerAttacker] & STATUS3_WATERSPORT)) - { - gStatuses3[gBattlerAttacker] |= STATUS3_WATERSPORT; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE; - worked = TRUE; - } + #if B_SPORT_TURNS >= GEN_6 + if (!(gFieldStatuses & STATUS_FIELD_WATERSPORT)) + { + gFieldStatuses |= STATUS_FIELD_WATERSPORT; + gFieldTimers.waterSportTimer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE; + worked = TRUE; + } + #else + if (!(gStatuses4[gBattlerAttacker] & STATUS4_WATER_SPORT)) + { + gStatuses4[gBattlerAttacker] |= v; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE; + worked = TRUE; + } + #endif } if (worked) @@ -9636,25 +13489,38 @@ static void Cmd_settypebasedhalvers(void) // water and mud sport gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } -static void Cmd_setweatherballtype(void) +bool32 DoesSubstituteBlockMove(u8 battlerAtk, u8 battlerDef, u32 move) { - if (WEATHER_HAS_EFFECT) - { - if (gBattleWeather & WEATHER_ANY) - gBattleScripting.dmgMultiplier = 2; - if (gBattleWeather & WEATHER_RAIN_ANY) - *(&gBattleStruct->dynamicMoveType) = TYPE_WATER | 0x80; - else if (gBattleWeather & WEATHER_SANDSTORM_ANY) - *(&gBattleStruct->dynamicMoveType) = TYPE_ROCK | 0x80; - else if (gBattleWeather & WEATHER_SUN_ANY) - *(&gBattleStruct->dynamicMoveType) = TYPE_FIRE | 0x80; - else if (gBattleWeather & WEATHER_HAIL_ANY) - *(&gBattleStruct->dynamicMoveType) = TYPE_ICE | 0x80; - else - *(&gBattleStruct->dynamicMoveType) = TYPE_NORMAL | 0x80; - } + if (!(gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE)) + return FALSE; + else if (gBattleMoves[move].flags & FLAG_SOUND && B_SOUND_SUBSTITUTE >= GEN_6) + return FALSE; + else if (GetBattlerAbility(battlerAtk) == ABILITY_INFILTRATOR) + return FALSE; + else if (gBattleMoves[move].flags & FLAG_HIT_IN_SUBSTITUTE) + return FALSE; + else + return TRUE; +} - gBattlescriptCurrInstr++; +bool32 DoesDisguiseBlockMove(u8 battlerAtk, u8 battlerDef, u32 move) +{ + if (gBattleMons[battlerDef].species != SPECIES_MIMIKYU + || gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED + || IS_MOVE_STATUS(move) + || gHitMarker & HITMARKER_IGNORE_DISGUISE + || GetBattlerAbility(battlerDef) != ABILITY_DISGUISE) + return FALSE; + else + return TRUE; +} + +static void Cmd_jumpifsubstituteblocks(void) +{ + if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; } static void Cmd_tryrecycleitem(void) @@ -9662,14 +13528,14 @@ static void Cmd_tryrecycleitem(void) u16 *usedHeldItem; gActiveBattler = gBattlerAttacker; - usedHeldItem = &gBattleStruct->usedHeldItems[gActiveBattler]; - if (*usedHeldItem != 0 && gBattleMons[gActiveBattler].item == 0) + usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gActiveBattler]][GetBattlerSide(gActiveBattler)]; + if (*usedHeldItem != ITEM_NONE && gBattleMons[gActiveBattler].item == ITEM_NONE) { gLastUsedItem = *usedHeldItem; - *usedHeldItem = 0; + *usedHeldItem = ITEM_NONE; gBattleMons[gActiveBattler].item = gLastUsedItem; - BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBattler].item); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].item), &gBattleMons[gActiveBattler].item); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 5; @@ -9680,12 +13546,39 @@ static void Cmd_tryrecycleitem(void) } } +bool32 CanCamouflage(u8 battlerId) +{ + if (IS_BATTLER_OF_TYPE(battlerId, sTerrainToType[gBattleTerrain])) + return FALSE; + return TRUE; +} + static void Cmd_settypetoterrain(void) { - if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain])) + u8 terrainType; + switch(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) { - SET_BATTLER_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, sTerrainToType[gBattleTerrain]); + case STATUS_FIELD_ELECTRIC_TERRAIN: + terrainType = TYPE_ELECTRIC; + break; + case STATUS_FIELD_GRASSY_TERRAIN: + terrainType = TYPE_GRASS; + break; + case STATUS_FIELD_MISTY_TERRAIN: + terrainType = TYPE_FAIRY; + break; + case STATUS_FIELD_PSYCHIC_TERRAIN: + terrainType = TYPE_PSYCHIC; + break; + default: + terrainType = sTerrainToType[gBattleTerrain]; + break; + } + + if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, terrainType)) + { + SET_BATTLER_TYPE(gBattlerAttacker, terrainType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, terrainType); gBattlescriptCurrInstr += 5; } @@ -9695,7 +13588,8 @@ static void Cmd_settypetoterrain(void) } } -static void Cmd_pursuitrelated(void) +// Unused +static void Cmd_pursuitdoubles(void) { gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK); @@ -9704,11 +13598,11 @@ static void Cmd_pursuitrelated(void) && gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_MOVE && gChosenMoveByBattler[gActiveBattler] == MOVE_PURSUIT) { - gActionsByTurnOrder[gActiveBattler] = 11; + gActionsByTurnOrder[gActiveBattler] = B_ACTION_TRY_FINISH; gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; gBattleScripting.animTurn = 1; - gBattleScripting.field_20 = gBattlerAttacker; + gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = gActiveBattler; } else @@ -9730,16 +13624,36 @@ static void Cmd_snatchsetbattlers(void) gBattlescriptCurrInstr++; } -static void Cmd_removelightscreenreflect(void) // brick break +// Brick Break +static void Cmd_removelightscreenreflect(void) { - u8 opposingSide = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; + u8 side; + bool32 failed; - if (gSideTimers[opposingSide].reflectTimer || gSideTimers[opposingSide].lightscreenTimer) + #if B_BRICK_BREAK >= GEN_4 + // From Gen 4 onwards, Brick Break can remove screens on the user's side if used on an ally + side = GetBattlerSide(gBattlerTarget); + #else + side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; + #endif + + #if B_BRICK_BREAK >= GEN_5 + failed = (gMoveResultFlags & MOVE_RESULT_NO_EFFECT); + #else + failed = FALSE; + #endif + + if (!failed + && (gSideTimers[side].reflectTimer + || gSideTimers[side].lightscreenTimer + || gSideTimers[side].auroraVeilTimer)) { - gSideStatuses[opposingSide] &= ~(SIDE_STATUS_REFLECT); - gSideStatuses[opposingSide] &= ~(SIDE_STATUS_LIGHTSCREEN); - gSideTimers[opposingSide].reflectTimer = 0; - gSideTimers[opposingSide].lightscreenTimer = 0; + gSideStatuses[side] &= ~SIDE_STATUS_REFLECT; + gSideStatuses[side] &= ~SIDE_STATUS_LIGHTSCREEN; + gSideStatuses[side] &= ~SIDE_STATUS_AURORA_VEIL; + gSideTimers[side].reflectTimer = 0; + gSideTimers[side].lightscreenTimer = 0; + gSideTimers[side].auroraVeilTimer = 0; gBattleScripting.animTurn = 1; gBattleScripting.animTargetsHit = 1; } @@ -9752,85 +13666,225 @@ static void Cmd_removelightscreenreflect(void) // brick break gBattlescriptCurrInstr++; } +u8 GetCatchingBattler(void) +{ + if (IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))) + return GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + else + return GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); +} + static void Cmd_handleballthrow(void) { - u8 ballMultiplier = 0; + u8 ballMultiplier = 10; + s8 ballAddition = 0; if (gBattleControllerExecFlags) return; gActiveBattler = gBattlerAttacker; - gBattlerTarget = gBattlerAttacker ^ BIT_SIDE; + gBattlerTarget = GetCatchingBattler(); if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - BtlController_EmitBallThrowAnim(0, BALL_TRAINER_BLOCK); + BtlController_EmitBallThrowAnim(BUFFER_A, BALL_TRAINER_BLOCK); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr = BattleScript_TrainerBallBlock; } else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) { - BtlController_EmitBallThrowAnim(0, BALL_3_SHAKES_SUCCESS); + BtlController_EmitBallThrowAnim(BUFFER_A, BALL_3_SHAKES_SUCCESS); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr = BattleScript_WallyBallThrow; } else { - u32 odds; + u32 odds, i; u8 catchRate; - if (gLastUsedItem == ITEM_SAFARI_BALL) + gLastThrownBall = gLastUsedItem; + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) catchRate = gBattleStruct->safariCatchFactor * 1275 / 100; else catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate; - if (gLastUsedItem > ITEM_SAFARI_BALL) + if (gBaseStats[gBattleMons[gBattlerTarget].species].flags & FLAG_ULTRA_BEAST) + { + if (gLastUsedItem == ITEM_BEAST_BALL) + ballMultiplier = 50; + else + ballMultiplier = 1; + } + else { switch (gLastUsedItem) { + case ITEM_ULTRA_BALL: + ballMultiplier = 20; + case ITEM_GREAT_BALL: + case ITEM_SAFARI_BALL: + case ITEM_SPORT_BALL: + ballMultiplier = 15; case ITEM_NET_BALL: if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_WATER) || IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_BUG)) - ballMultiplier = 30; - else - ballMultiplier = 10; + #if B_NET_BALL_MODIFIER >= GEN_7 + ballMultiplier = 35; + #else + ballMultiplier = 30; + #endif break; case ITEM_DIVE_BALL: - if (GetCurrentMapType() == MAP_TYPE_UNDERWATER) - ballMultiplier = 35; - else - ballMultiplier = 10; + #if B_DIVE_BALL_MODIFIER >= GEN_4 + if (GetCurrentMapType() == MAP_TYPE_UNDERWATER || gIsFishingEncounter || gIsSurfingEncounter) + ballMultiplier = 35; + #else + if (GetCurrentMapType() == MAP_TYPE_UNDERWATER) + ballMultiplier = 35; + #endif break; case ITEM_NEST_BALL: - if (gBattleMons[gBattlerTarget].level < 40) - { - ballMultiplier = 40 - gBattleMons[gBattlerTarget].level; - if (ballMultiplier <= 9) - ballMultiplier = 10; - } - else - { - ballMultiplier = 10; - } + #if B_NEST_BALL_MODIFIER >= GEN_6 + //((41 - Pokémon's level) ÷ 10)× if Pokémon's level is between 1 and 29, 1× otherwise. + if (gBattleMons[gBattlerTarget].level < 30) + ballMultiplier = 41 - gBattleMons[gBattlerTarget].level; + #elif B_NEST_BALL_MODIFIER == GEN_5 + //((41 - Pokémon's level) ÷ 10)×, minimum 1× + if (gBattleMons[gBattlerTarget].level < 31) + ballMultiplier = 41 - gBattleMons[gBattlerTarget].level; + #else + //((40 - Pokémon's level) ÷ 10)×, minimum 1× + if (gBattleMons[gBattlerTarget].level < 40) + { + ballMultiplier = 40 - gBattleMons[gBattlerTarget].level; + if (ballMultiplier <= 9) + ballMultiplier = 10; + } + #endif break; case ITEM_REPEAT_BALL: if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), FLAG_GET_CAUGHT)) - ballMultiplier = 30; - else - ballMultiplier = 10; + #if B_REPEAT_BALL_MODIFIER >= GEN_7 + ballMultiplier = 35; + #else + ballMultiplier = 30; + #endif break; case ITEM_TIMER_BALL: - ballMultiplier = gBattleResults.battleTurnCounter + 10; + #if B_TIMER_BALL_MODIFIER >= GEN_5 + ballMultiplier = (gBattleResults.battleTurnCounter * 3) + 10; + #else + ballMultiplier = gBattleResults.battleTurnCounter + 10; + #endif if (ballMultiplier > 40) ballMultiplier = 40; break; - case ITEM_LUXURY_BALL: - case ITEM_PREMIER_BALL: - ballMultiplier = 10; + case ITEM_DUSK_BALL: + RtcCalcLocalTime(); + if ((gLocalTime.hours >= 20 && gLocalTime.hours <= 3) || gMapHeader.cave || gMapHeader.mapType == MAP_TYPE_UNDERGROUND) + #if B_DUSK_BALL_MODIFIER >= GEN_7 + ballMultiplier = 30; + #else + ballMultiplier = 35; + #endif + break; + case ITEM_QUICK_BALL: + if (gBattleResults.battleTurnCounter == 0) + #if B_QUICK_BALL_MODIFIER >= GEN_5 + ballMultiplier = 50; + #else + ballMultiplier = 40; + #endif + break; + case ITEM_LEVEL_BALL: + if (gBattleMons[gBattlerAttacker].level >= 4 * gBattleMons[gBattlerTarget].level) + ballMultiplier = 80; + else if (gBattleMons[gBattlerAttacker].level > 2 * gBattleMons[gBattlerTarget].level) + ballMultiplier = 40; + else if (gBattleMons[gBattlerAttacker].level > gBattleMons[gBattlerTarget].level) + ballMultiplier = 20; + break; + case ITEM_LURE_BALL: + if (gIsFishingEncounter) + #if B_LURE_BALL_MODIFIER >= GEN_7 + ballMultiplier = 50; + #else + ballMultiplier = 30; + #endif + break; + case ITEM_MOON_BALL: + for (i = 0; i < EVOS_PER_MON; i++) + { + if (gEvolutionTable[gBattleMons[gBattlerTarget].species][i].method == EVO_ITEM + && gEvolutionTable[gBattleMons[gBattlerTarget].species][i].param == ITEM_MOON_STONE) + ballMultiplier = 40; + } + break; + case ITEM_LOVE_BALL: + if (gBattleMons[gBattlerTarget].species == gBattleMons[gBattlerAttacker].species) + { + u8 gender1 = GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]); + u8 gender2 = GetMonGender(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]); + + if (gender1 != gender2 && gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS) + ballMultiplier = 80; + } + break; + case ITEM_FAST_BALL: + if (gBaseStats[gBattleMons[gBattlerTarget].species].baseSpeed >= 100) + ballMultiplier = 40; + break; + case ITEM_HEAVY_BALL: + i = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), 1); + #if B_HEAVY_BALL_MODIFIER >= GEN_7 + if (i < 1000) + ballAddition = -20; + else if (i < 2000) + ballAddition = 0; + else if (i < 3000) + ballAddition = 20; + else + ballAddition = 30; + #elif B_HEAVY_BALL_MODIFIER >= GEN_4 + if (i < 2048) + ballAddition = -20; + else if (i < 3072) + ballAddition = 20; + else if (i < 4096) + ballAddition = 30; + else + ballAddition = 40; + #else + if (i < 1024) + ballAddition = -20; + else if (i < 2048) + ballAddition = 0; + else if (i < 3072) + ballAddition = 20; + else if (i < 4096) + ballAddition = 30; + else + ballAddition = 40; + #endif + break; + case ITEM_DREAM_BALL: + #if B_DREAM_BALL_MODIFIER >= GEN_8 + if (gBattleMons[gBattlerTarget].status1 & STATUS1_SLEEP || GetBattlerAbility(gBattlerTarget) == ABILITY_COMATOSE) + ballMultiplier = 40; + #else + ballMultiplier = 10; + #endif + break; + case ITEM_BEAST_BALL: + ballMultiplier = 1; break; } } + + // catchRate is unsigned, which means that it may potentially overflow if sum is applied directly. + if (catchRate < 21 && ballAddition == -20) + catchRate = 1; else - ballMultiplier = sBallCatchBonuses[gLastUsedItem - ITEM_ULTRA_BALL]; + catchRate = catchRate + ballAddition; odds = (catchRate * ballMultiplier / 10) * (gBattleMons[gBattlerTarget].maxHP * 3 - gBattleMons[gBattlerTarget].hp * 2) @@ -9841,23 +13895,14 @@ static void Cmd_handleballthrow(void) if (gBattleMons[gBattlerTarget].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)) odds = (odds * 15) / 10; - if (gLastUsedItem != ITEM_SAFARI_BALL) - { - if (gLastUsedItem == ITEM_MASTER_BALL) - { - gBattleResults.usedMasterBall = TRUE; - } - else - { - if (gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL] < 0xFF) - gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL]++; - } - } + if (gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL] < 255) + gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL]++; if (odds > 254) // mon caught { - BtlController_EmitBallThrowAnim(0, BALL_3_SHAKES_SUCCESS); + BtlController_EmitBallThrowAnim(BUFFER_A, BALL_3_SHAKES_SUCCESS); MarkBattlerForControllerExec(gActiveBattler); + UndoFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FALSE); gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); @@ -9865,24 +13910,53 @@ static void Cmd_handleballthrow(void) gBattleCommunication[MULTISTRING_CHOOSER] = 0; else gBattleCommunication[MULTISTRING_CHOOSER] = 1; + + if (gLastUsedItem == ITEM_HEAL_BALL) + { + MonRestorePP(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]); + HealStatusConditions(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], gBattlerPartyIndexes[gBattlerTarget], STATUS1_ANY, gBattlerTarget); + gBattleMons[gBattlerTarget].hp = gBattleMons[gBattlerTarget].maxHP; + SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_HP, &gBattleMons[gBattlerTarget].hp); + } } else // mon may be caught, calculate shakes { u8 shakes; + u8 maxShakes; - odds = Sqrt(Sqrt(16711680 / odds)); - odds = 1048560 / odds; + gBattleSpritesDataPtr->animationData->isCriticalCapture = FALSE; + gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = FALSE; - for (shakes = 0; shakes < BALL_3_SHAKES_SUCCESS && Random() < odds; shakes++); + if (CriticalCapture(odds)) + { + maxShakes = BALL_1_SHAKE; // critical capture doesn't guarantee capture + gBattleSpritesDataPtr->animationData->isCriticalCapture = TRUE; + } + else + { + maxShakes = BALL_3_SHAKES_SUCCESS; + } if (gLastUsedItem == ITEM_MASTER_BALL) - shakes = BALL_3_SHAKES_SUCCESS; // why calculate the shakes before that check? + { + shakes = maxShakes; + } + else + { + odds = Sqrt(Sqrt(16711680 / odds)); + odds = 1048560 / odds; + for (shakes = 0; shakes < maxShakes && Random() < odds; shakes++); + } - BtlController_EmitBallThrowAnim(0, shakes); + BtlController_EmitBallThrowAnim(BUFFER_A, shakes); MarkBattlerForControllerExec(gActiveBattler); - if (shakes == BALL_3_SHAKES_SUCCESS) // mon caught, copy of the code above + if (shakes == maxShakes) // mon caught, copy of the code above { + if (IsCriticalCapture()) + gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = TRUE; + + UndoFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FALSE); gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); @@ -9890,10 +13964,25 @@ static void Cmd_handleballthrow(void) gBattleCommunication[MULTISTRING_CHOOSER] = 0; else gBattleCommunication[MULTISTRING_CHOOSER] = 1; + + if (gLastUsedItem == ITEM_HEAL_BALL) + { + MonRestorePP(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]); + HealStatusConditions(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], gBattlerPartyIndexes[gBattlerTarget], STATUS1_ANY, gBattlerTarget); + gBattleMons[gBattlerTarget].hp = gBattleMons[gBattlerTarget].maxHP; + SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_HP, &gBattleMons[gBattlerTarget].hp); + } } else // not caught { - gBattleCommunication[MULTISTRING_CHOOSER] = shakes; + if (!gHasFetchedBall) + gLastUsedBall = gLastUsedItem; + + if (IsCriticalCapture()) + gBattleCommunication[MULTISTRING_CHOOSER] = BALL_3_SHAKES_FAIL; + else + gBattleCommunication[MULTISTRING_CHOOSER] = shakes; + gBattlescriptCurrInstr = BattleScript_ShakeBallThrow; } } @@ -9902,18 +13991,18 @@ static void Cmd_handleballthrow(void) static void Cmd_givecaughtmon(void) { - if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]]) != MON_GIVEN_TO_PARTY) + if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]]) != MON_GIVEN_TO_PARTY) { if (!ShouldShowBoxWasFullMessage()) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SENT_SOMEONES_PC; StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); - GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2); + GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_NICKNAME, gStringVar2); } else { StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); // box the mon was sent to - GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2); + GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_NICKNAME, gStringVar2); StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon())); //box the mon was going to be sent to gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOMEONES_BOX_FULL; } @@ -9923,17 +14012,17 @@ static void Cmd_givecaughtmon(void) gBattleCommunication[MULTISTRING_CHOOSER]++; } - gBattleResults.caughtMonSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_SPECIES, NULL); - GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleResults.caughtMonNick); - gBattleResults.caughtMonBall = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_POKEBALL, NULL); + gBattleResults.caughtMonSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_SPECIES, NULL); + GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_NICKNAME, gBattleResults.caughtMonNick); + gBattleResults.caughtMonBall = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_POKEBALL, NULL); gBattlescriptCurrInstr++; } static void Cmd_trysetcaughtmondexflags(void) { - u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL); - u32 personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL); + u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_SPECIES, NULL); + u32 personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_PERSONALITY, NULL); if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) { @@ -9948,12 +14037,12 @@ static void Cmd_trysetcaughtmondexflags(void) static void Cmd_displaydexinfo(void) { - u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL); + u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_SPECIES, NULL); switch (gBattleCommunication[0]) { case 0: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); gBattleCommunication[0]++; break; case 1: @@ -9961,8 +14050,8 @@ static void Cmd_displaydexinfo(void) { FreeAllWindowBuffers(); gBattleCommunication[TASK_ID] = DisplayCaughtMonDexPage(SpeciesToNationalPokedexNum(species), - gBattleMons[gBattlerTarget].otId, - gBattleMons[gBattlerTarget].personality); + gBattleMons[GetCatchingBattler()].otId, + gBattleMons[GetCatchingBattler()].personality); gBattleCommunication[0]++; } break; @@ -9978,13 +14067,13 @@ static void Cmd_displaydexinfo(void) case 3: InitBattleBgsVideo(); LoadBattleTextboxAndBackground(); - gBattle_BG3_X = 0x100; + gBattle_BG3_X = 256; gBattleCommunication[0]++; break; case 4: if (!IsDma3ManagerBusyWithBgCopy()) { - BeginNormalPaletteFade(PALETTES_BG, 0, 0x10, 0, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_BG, 0, 16, 0, RGB_BLACK); ShowBg(0); ShowBg(3); gBattleCommunication[0]++; @@ -9999,7 +14088,7 @@ static void Cmd_displaydexinfo(void) void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags) { - s32 destY, destX; + s32 destY, destX, bgId; u16 var = 0; for (destY = yStart; destY <= yEnd; destY++) @@ -10037,10 +14126,8 @@ void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags) if (flags & WINDOW_CLEAR) var = 0; - if (flags & WINDOW_x80) - CopyToBgTilemapBufferRect_ChangePalette(1, &var, destX, destY, 1, 1, 0x11); - else - CopyToBgTilemapBufferRect_ChangePalette(0, &var, destX, destY, 1, 1, 0x11); + bgId = (flags & WINDOW_BG1) ? 1 : 0; + CopyToBgTilemapBufferRect_ChangePalette(bgId, &var, destX, destY, 1, 1, 0x11); } } } @@ -10070,8 +14157,8 @@ static void Cmd_trygivecaughtmonnick(void) switch (gBattleCommunication[MULTIUSE_STATE]) { case 0: - HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); - BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC); + HandleBattleWindow(YESNOBOX_X_Y, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); @@ -10113,22 +14200,22 @@ static void Cmd_trygivecaughtmonnick(void) case 2: if (!gPaletteFade.active) { - GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); + GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); FreeAllWindowBuffers(); DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gBattleStruct->caughtMonNick, - GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_SPECIES), - GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]]), - GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_PERSONALITY, NULL), + GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES), + GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]), + GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_PERSONALITY, NULL), BattleMainCB2); gBattleCommunication[MULTIUSE_STATE]++; } break; case 3: - if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active ) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { - SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); + SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } break; @@ -10167,8 +14254,187 @@ static void Cmd_finishturn(void) static void Cmd_trainerslideout(void) { gActiveBattler = GetBattlerAtPosition(gBattlescriptCurrInstr[1]); - BtlController_EmitTrainerSlideBack(0); + BtlController_EmitTrainerSlideBack(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 2; } + +static const u16 sTelekinesisBanList[] = +{ + SPECIES_DIGLETT, + SPECIES_DUGTRIO, +// #ifdef NEW_POKEMON + SPECIES_DIGLETT_ALOLAN, + SPECIES_DUGTRIO_ALOLAN, + SPECIES_SANDYGAST, + SPECIES_PALOSSAND, + SPECIES_GENGAR_MEGA, +// #endif +}; + +bool32 IsTelekinesisBannedSpecies(u16 species) +{ + u32 i; + + for (i = 0; i < ARRAY_COUNT(sTelekinesisBanList); i++) + { + if (species == sTelekinesisBanList[i]) + return TRUE; + } + return FALSE; +} + +static void Cmd_settelekinesis(void) +{ + if (gStatuses3[gBattlerTarget] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN) + || gFieldStatuses & STATUS_FIELD_GRAVITY + || IsTelekinesisBannedSpecies(gBattleMons[gBattlerTarget].species)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + } + else + { + gStatuses3[gBattlerTarget] |= STATUS3_TELEKINESIS; + gDisableStructs[gBattlerTarget].telekinesisTimer = 3; + gBattlescriptCurrInstr += 5; + } +} + +static void Cmd_swapstatstages(void) +{ + u8 statId = T1_READ_8(gBattlescriptCurrInstr + 1); + s8 atkStatStage = gBattleMons[gBattlerAttacker].statStages[statId]; + s8 defStatStage = gBattleMons[gBattlerTarget].statStages[statId]; + + gBattleMons[gBattlerAttacker].statStages[statId] = defStatStage; + gBattleMons[gBattlerTarget].statStages[statId] = atkStatStage; + + gBattlescriptCurrInstr += 2; +} + +static void Cmd_averagestats(void) +{ + u8 statId = T1_READ_8(gBattlescriptCurrInstr + 1); + u16 atkStat = *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (statId - 1)); + u16 defStat = *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (statId - 1)); + u16 average = (atkStat + defStat) / 2; + + *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (statId - 1)) = average; + *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (statId - 1)) = average; + + gBattlescriptCurrInstr += 2; +} + +static void Cmd_jumpifoppositegenders(void) +{ + u32 atkGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerAttacker].species, gBattleMons[gBattlerAttacker].personality); + u32 defGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerTarget].species, gBattleMons[gBattlerTarget].personality); + + if ((atkGender == MON_MALE && defGender == MON_FEMALE) || (atkGender == MON_FEMALE && defGender == MON_MALE)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; +} + +static void Cmd_trygetbaddreamstarget(void) +{ + u8 badDreamsMonSide = GetBattlerSide(gBattlerAttacker); + for (;gBattlerTarget < gBattlersCount; gBattlerTarget++) + { + if (GetBattlerSide(gBattlerTarget) == badDreamsMonSide) + continue; + if ((gBattleMons[gBattlerTarget].status1 & STATUS1_SLEEP || GetBattlerAbility(gBattlerTarget) == ABILITY_COMATOSE) + && IsBattlerAlive(gBattlerTarget)) + break; + } + + if (gBattlerTarget >= gBattlersCount) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; +} + +static void Cmd_tryworryseed(void) +{ + if (IsWorrySeedBannedAbility(gBattleMons[gBattlerTarget].ability)) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + } + else + { + gBattleMons[gBattlerTarget].ability = ABILITY_INSOMNIA; + gBattlescriptCurrInstr += 5; + } +} + +static void Cmd_metalburstdamagecalculator(void) +{ + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); + u8 sideTarget = 0; + + if (gProtectStructs[gBattlerAttacker].physicalDmg + && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId)) + && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp) + { + gBattleMoveDamage = gProtectStructs[gBattlerAttacker].physicalDmg * 150 / 100; + + if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) + gBattlerTarget = gSideTimers[sideTarget].followmeTarget; + else + gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; + + gBattlescriptCurrInstr += 5; + } + else if (gProtectStructs[gBattlerAttacker].specialDmg + && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId)) + && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp) + { + gBattleMoveDamage = gProtectStructs[gBattlerAttacker].specialDmg * 150 / 100; + + if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) + gBattlerTarget = gSideTimers[sideTarget].followmeTarget; + else + gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; + + gBattlescriptCurrInstr += 5; + } + else + { + gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + } +} + +static bool32 CriticalCapture(u32 odds) +{ + #if B_CRITICAL_CAPTURE == TRUE + u32 numCaught = GetNationalPokedexCount(FLAG_GET_CAUGHT); + + if (numCaught <= (NATIONAL_DEX_COUNT * 30) / 650) + odds = 0; + else if (numCaught <= (NATIONAL_DEX_COUNT * 150) / 650) + odds /= 2; + else if (numCaught <= (NATIONAL_DEX_COUNT * 300) / 650) + ; // odds = (odds * 100) / 100; + else if (numCaught <= (NATIONAL_DEX_COUNT * 450) / 650) + odds = (odds * 150) / 100; + else if (numCaught <= (NATIONAL_DEX_COUNT * 600) / 650) + odds *= 2; + else + odds = (odds * 250) / 100; + + #ifdef ITEM_CATCHING_CHARM + if (CheckBagHasItem(ITEM_CATCHING_CHARM, 1)) + odds = (odds * (100 + B_CATCHING_CHARM_BOOST)) / 100; + #endif + + odds /= 6; + if ((Random() % 255) < odds) + return TRUE; + + return FALSE; + #else + return FALSE; + #endif +} diff --git a/src/battle_setup.c b/src/battle_setup.c index cb65d25d6c..b0b068ef39 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -43,12 +43,18 @@ #include "constants/items.h" #include "constants/songs.h" #include "constants/map_types.h" -#include "constants/maps.h" #include "constants/trainers.h" #include "constants/trainer_hill.h" +#include "constants/weather.h" -enum -{ +enum { + TRANSITION_TYPE_NORMAL, + TRANSITION_TYPE_CAVE, + TRANSITION_TYPE_FLASH, + TRANSITION_TYPE_WATER, +}; + +enum { TRAINER_PARAM_LOAD_VAL_8BIT, TRAINER_PARAM_LOAD_VAL_16BIT, TRAINER_PARAM_LOAD_VAL_32BIT, @@ -67,11 +73,9 @@ struct TrainerBattleParameter // this file's functions static void DoBattlePikeWildBattle(void); static void DoSafariBattle(void); -static void DoStandardWildBattle(void); +static void DoStandardWildBattle(bool32 isDouble); static void CB2_EndWildBattle(void); static void CB2_EndScriptedWildBattle(void); -static u8 GetWildBattleTransition(void); -static u8 GetTrainerBattleTransition(void); static void TryUpdateGymLeaderRematchFromWild(void); static void TryUpdateGymLeaderRematchFromTrainer(void); static void CB2_GiveStarter(void); @@ -85,7 +89,6 @@ static void HandleRematchVarsOnBattleEnd(void); static const u8 *GetIntroSpeechOfApproachingTrainer(void); static const u8 *GetTrainerCantBattleSpeech(void); -// ewram vars EWRAM_DATA static u16 sTrainerBattleMode = 0; EWRAM_DATA u16 gTrainerBattleOpponent_A = 0; EWRAM_DATA u16 gTrainerBattleOpponent_B = 0; @@ -103,55 +106,53 @@ EWRAM_DATA static u8 *sTrainerBBattleScriptRetAddr = NULL; EWRAM_DATA static bool8 sShouldCheckTrainerBScript = FALSE; EWRAM_DATA static u8 sNoOfPossibleTrainerRetScripts = 0; -// const rom data - // The first transition is used if the enemy pokemon are lower level than our pokemon. // Otherwise, the second transition is used. static const u8 sBattleTransitionTable_Wild[][2] = { - {B_TRANSITION_SLICE, B_TRANSITION_WHITEFADE}, // Normal - {B_TRANSITION_CLOCKWISE_BLACKFADE, B_TRANSITION_GRID_SQUARES}, // Cave - {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES}, // Cave with flash used - {B_TRANSITION_WAVE, B_TRANSITION_RIPPLE}, // Water + [TRANSITION_TYPE_NORMAL] = {B_TRANSITION_SLICE, B_TRANSITION_WHITE_BARS_FADE}, + [TRANSITION_TYPE_CAVE] = {B_TRANSITION_CLOCKWISE_WIPE, B_TRANSITION_GRID_SQUARES}, + [TRANSITION_TYPE_FLASH] = {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES}, + [TRANSITION_TYPE_WATER] = {B_TRANSITION_WAVE, B_TRANSITION_RIPPLE}, }; static const u8 sBattleTransitionTable_Trainer[][2] = { - {B_TRANSITION_POKEBALLS_TRAIL, B_TRANSITION_SHARDS}, // Normal - {B_TRANSITION_SHUFFLE, B_TRANSITION_BIG_POKEBALL}, // Cave - {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES}, // Cave with flash used - {B_TRANSITION_SWIRL, B_TRANSITION_RIPPLE}, // Water + [TRANSITION_TYPE_NORMAL] = {B_TRANSITION_POKEBALLS_TRAIL, B_TRANSITION_ANGLED_WIPES}, + [TRANSITION_TYPE_CAVE] = {B_TRANSITION_SHUFFLE, B_TRANSITION_BIG_POKEBALL}, + [TRANSITION_TYPE_FLASH] = {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES}, + [TRANSITION_TYPE_WATER] = {B_TRANSITION_SWIRL, B_TRANSITION_RIPPLE}, }; // Battle Frontier (excluding Pyramid and Dome, which have their own tables below) static const u8 sBattleTransitionTable_BattleFrontier[] = { - B_TRANSITION_FRONTIER_LOGO_WIGGLE, - B_TRANSITION_FRONTIER_LOGO_WAVE, - B_TRANSITION_FRONTIER_SQUARES, + B_TRANSITION_FRONTIER_LOGO_WIGGLE, + B_TRANSITION_FRONTIER_LOGO_WAVE, + B_TRANSITION_FRONTIER_SQUARES, B_TRANSITION_FRONTIER_SQUARES_SCROLL, - B_TRANSITION_FRONTIER_CIRCLES_MEET, - B_TRANSITION_FRONTIER_CIRCLES_CROSS, - B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL, + B_TRANSITION_FRONTIER_CIRCLES_MEET, + B_TRANSITION_FRONTIER_CIRCLES_CROSS, + B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL, B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL, - B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ, - B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ, - B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ, + B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ, + B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ, + B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ, B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ }; static const u8 sBattleTransitionTable_BattlePyramid[] = { - B_TRANSITION_FRONTIER_SQUARES, - B_TRANSITION_FRONTIER_SQUARES_SCROLL, + B_TRANSITION_FRONTIER_SQUARES, + B_TRANSITION_FRONTIER_SQUARES_SCROLL, B_TRANSITION_FRONTIER_SQUARES_SPIRAL }; static const u8 sBattleTransitionTable_BattleDome[] = { - B_TRANSITION_FRONTIER_LOGO_WIGGLE, - B_TRANSITION_FRONTIER_SQUARES, - B_TRANSITION_FRONTIER_SQUARES_SCROLL, + B_TRANSITION_FRONTIER_LOGO_WIGGLE, + B_TRANSITION_FRONTIER_SQUARES, + B_TRANSITION_FRONTIER_SQUARES_SCROLL, B_TRANSITION_FRONTIER_SQUARES_SPIRAL }; @@ -319,7 +320,7 @@ const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] = [REMATCH_TRENT] = REMATCH(TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5, ROUTE112), [REMATCH_SAWYER] = REMATCH(TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5, MT_CHIMNEY), [REMATCH_KIRA_AND_DAN] = REMATCH(TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5, ABANDONED_SHIP_ROOMS2_1F), - [REMATCH_WALLY_3] = REMATCH(TRAINER_WALLY_VR_2, TRAINER_WALLY_VR_3, TRAINER_WALLY_VR_4, TRAINER_WALLY_VR_5, TRAINER_WALLY_VR_5, VICTORY_ROAD_1F), + [REMATCH_WALLY_VR] = REMATCH(TRAINER_WALLY_VR_2, TRAINER_WALLY_VR_3, TRAINER_WALLY_VR_4, TRAINER_WALLY_VR_5, TRAINER_WALLY_VR_5, VICTORY_ROAD_1F), [REMATCH_ROXANNE] = REMATCH(TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5, RUSTBORO_CITY), [REMATCH_BRAWLY] = REMATCH(TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5, DEWFORD_TOWN), [REMATCH_WATTSON] = REMATCH(TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5, MAUVILLE_CITY), @@ -387,7 +388,12 @@ void BattleSetup_StartWildBattle(void) if (GetSafariZoneFlag()) DoSafariBattle(); else - DoStandardWildBattle(); + DoStandardWildBattle(FALSE); +} + +void BattleSetup_StartDoubleWildBattle(void) +{ + DoStandardWildBattle(TRUE); } void BattleSetup_StartBattlePikeWildBattle(void) @@ -395,13 +401,15 @@ void BattleSetup_StartBattlePikeWildBattle(void) DoBattlePikeWildBattle(); } -static void DoStandardWildBattle(void) +static void DoStandardWildBattle(bool32 isDouble) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); - sub_808BCF4(); + StopPlayerAvatar(); gMain.savedCallback = CB2_EndWildBattle; gBattleTypeFlags = 0; + if (isDouble) + gBattleTypeFlags |= BATTLE_TYPE_DOUBLE; if (InBattlePyramid()) { VarSet(VAR_TEMP_E, 0); @@ -416,9 +424,9 @@ static void DoStandardWildBattle(void) void BattleSetup_StartRoamerBattle(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); - sub_808BCF4(); + StopPlayerAvatar(); gMain.savedCallback = CB2_EndWildBattle; gBattleTypeFlags = BATTLE_TYPE_ROAMER; CreateBattleStartTask(GetWildBattleTransition(), 0); @@ -430,9 +438,9 @@ void BattleSetup_StartRoamerBattle(void) static void DoSafariBattle(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); - sub_808BCF4(); + StopPlayerAvatar(); gMain.savedCallback = CB2_EndSafariBattle; gBattleTypeFlags = BATTLE_TYPE_SAFARI; CreateBattleStartTask(GetWildBattleTransition(), 0); @@ -440,9 +448,9 @@ static void DoSafariBattle(void) static void DoBattlePikeWildBattle(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); - sub_808BCF4(); + StopPlayerAvatar(); gMain.savedCallback = CB2_EndWildBattle; gBattleTypeFlags = BATTLE_TYPE_PIKE; CreateBattleStartTask(GetWildBattleTransition(), 0); @@ -460,12 +468,12 @@ static void DoTrainerBattle(void) TryUpdateGymLeaderRematchFromTrainer(); } -static void sub_80B0828(void) +static void DoBattlePyramidTrainerHillBattle(void) { if (InBattlePyramid()) - CreateBattleStartTask(GetSpecialBattleTransition(10), 0); + CreateBattleStartTask(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PYRAMID), 0); else - CreateBattleStartTask(GetSpecialBattleTransition(11), 0); + CreateBattleStartTask(GetSpecialBattleTransition(B_TRANSITION_GROUP_TRAINER_HILL), 0); IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_TRAINER_BATTLES); @@ -476,7 +484,7 @@ static void sub_80B0828(void) void StartWallyTutorialBattle(void) { CreateMaleMon(&gEnemyParty[0], SPECIES_RALTS, 5); - ScriptContext2_Enable(); + LockPlayerFieldControls(); gMain.savedCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic; gBattleTypeFlags = BATTLE_TYPE_WALLY_TUTORIAL; CreateBattleStartTask(B_TRANSITION_SLICE, 0); @@ -484,7 +492,7 @@ void StartWallyTutorialBattle(void) void BattleSetup_StartScriptedWildBattle(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = 0; CreateBattleStartTask(GetWildBattleTransition(), 0); @@ -494,9 +502,21 @@ void BattleSetup_StartScriptedWildBattle(void) TryUpdateGymLeaderRematchFromWild(); } +void BattleSetup_StartScriptedDoubleWildBattle(void) +{ + LockPlayerFieldControls(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_DOUBLE; + CreateBattleStartTask(GetWildBattleTransition(), 0); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); + IncrementDailyWildBattles(); + TryUpdateGymLeaderRematchFromWild(); +} + void BattleSetup_StartLatiBattle(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; CreateBattleStartTask(GetWildBattleTransition(), 0); @@ -508,7 +528,7 @@ void BattleSetup_StartLatiBattle(void) void BattleSetup_StartLegendaryBattle(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; @@ -547,12 +567,12 @@ void BattleSetup_StartLegendaryBattle(void) void StartGroudonKyogreBattle(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON; if (gGameVersion == VERSION_RUBY) - CreateBattleStartTask(B_TRANSITION_SHARDS, MUS_VS_KYOGRE_GROUDON); // GROUDON + CreateBattleStartTask(B_TRANSITION_ANGLED_WIPES, MUS_VS_KYOGRE_GROUDON); // GROUDON else CreateBattleStartTask(B_TRANSITION_RIPPLE, MUS_VS_KYOGRE_GROUDON); // KYOGRE @@ -567,7 +587,7 @@ void StartRegiBattle(void) u8 transitionId; u16 species; - ScriptContext2_Enable(); + LockPlayerFieldControls(); gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI; @@ -597,7 +617,7 @@ void StartRegiBattle(void) static void CB2_EndWildBattle(void) { - CpuFill16(0, (void*)(BG_PLTT), BG_PLTT_SIZE); + CpuFill16(0, (void *)(BG_PLTT), BG_PLTT_SIZE); ResetOamRange(0, 128); if (IsPlayerDefeated(gBattleOutcome) == TRUE && !InBattlePyramid() && !InBattlePike()) @@ -613,7 +633,7 @@ static void CB2_EndWildBattle(void) static void CB2_EndScriptedWildBattle(void) { - CpuFill16(0, (void*)(BG_PLTT), BG_PLTT_SIZE); + CpuFill16(0, (void *)(BG_PLTT), BG_PLTT_SIZE); ResetOamRange(0, 128); if (IsPlayerDefeated(gBattleOutcome) == TRUE) @@ -674,14 +694,16 @@ u8 BattleSetup_GetTerrainId(void) return BATTLE_TERRAIN_MOUNTAIN; if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) { - if (MetatileBehavior_GetBridgeType(tileBehavior)) + // Is BRIDGE_TYPE_POND_*? + if (MetatileBehavior_GetBridgeType(tileBehavior) != BRIDGE_TYPE_OCEAN) return BATTLE_TERRAIN_POND; - if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) + + if (MetatileBehavior_IsBridgeOverWater(tileBehavior) == TRUE) return BATTLE_TERRAIN_WATER; } if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE113) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE113)) return BATTLE_TERRAIN_SAND; - if (GetSav1Weather() == 8) + if (GetSavedWeather() == WEATHER_SANDSTORM) return BATTLE_TERRAIN_SAND; return BATTLE_TERRAIN_PLAIN; @@ -694,21 +716,22 @@ static u8 GetBattleTransitionTypeByMap(void) PlayerGetDestCoords(&x, &y); tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if (Overworld_GetFlashLevel()) - return B_TRANSITION_SHUFFLE; - if (!MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) + + if (GetFlashLevel()) + return TRANSITION_TYPE_FLASH; + + if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) + return TRANSITION_TYPE_WATER; + + switch (gMapHeader.mapType) { - switch (gMapHeader.mapType) - { - case MAP_TYPE_UNDERGROUND: - return B_TRANSITION_SWIRL; - case MAP_TYPE_UNDERWATER: - return B_TRANSITION_BIG_POKEBALL; - default: - return B_TRANSITION_BLUR; - } + case MAP_TYPE_UNDERGROUND: + return TRANSITION_TYPE_CAVE; + case MAP_TYPE_UNDERWATER: + return TRANSITION_TYPE_WATER; + default: + return TRANSITION_TYPE_NORMAL; } - return B_TRANSITION_BIG_POKEBALL; } static u16 GetSumOfPlayerPartyLevel(u8 numMons) @@ -780,7 +803,7 @@ static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons) return sum; } -static u8 GetWildBattleTransition(void) +u8 GetWildBattleTransition(void) { u8 transitionType = GetBattleTransitionTypeByMap(); u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); @@ -802,7 +825,7 @@ static u8 GetWildBattleTransition(void) } } -static u8 GetTrainerBattleTransition(void) +u8 GetTrainerBattleTransition(void) { u8 minPartyCount; u8 transitionType; @@ -853,16 +876,7 @@ static u8 GetTrainerBattleTransition(void) return sBattleTransitionTable_Trainer[transitionType][1]; } -// 0: Battle Tower -// 3: Battle Dome -// 4: Battle Palace -// 5: Battle Arena -// 6: Battle Factory -// 7: Battle Pike -// 10: Battle Pyramid -// 11: Trainer Hill -// 12: Secret Base -// 13: E-Reader +#define RANDOM_TRANSITION(table)(table[Random() % ARRAY_COUNT(table)]) u8 GetSpecialBattleTransition(s32 id) { u16 var; @@ -873,35 +887,35 @@ u8 GetSpecialBattleTransition(s32 id) { switch (id) { - case 11: - case 12: - case 13: + case B_TRANSITION_GROUP_TRAINER_HILL: + case B_TRANSITION_GROUP_SECRET_BASE: + case B_TRANSITION_GROUP_E_READER: return B_TRANSITION_POKEBALLS_TRAIL; - case 10: - return sBattleTransitionTable_BattlePyramid[Random() % ARRAY_COUNT(sBattleTransitionTable_BattlePyramid)]; - case 3: - return sBattleTransitionTable_BattleDome[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleDome)]; + case B_TRANSITION_GROUP_B_PYRAMID: + return RANDOM_TRANSITION(sBattleTransitionTable_BattlePyramid); + case B_TRANSITION_GROUP_B_DOME: + return RANDOM_TRANSITION(sBattleTransitionTable_BattleDome); } if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS) - return sBattleTransitionTable_BattleFrontier[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleFrontier)]; + return RANDOM_TRANSITION(sBattleTransitionTable_BattleFrontier); } else { switch (id) { - case 11: - case 12: - case 13: + case B_TRANSITION_GROUP_TRAINER_HILL: + case B_TRANSITION_GROUP_SECRET_BASE: + case B_TRANSITION_GROUP_E_READER: return B_TRANSITION_BIG_POKEBALL; - case 10: - return sBattleTransitionTable_BattlePyramid[Random() % ARRAY_COUNT(sBattleTransitionTable_BattlePyramid)]; - case 3: - return sBattleTransitionTable_BattleDome[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleDome)]; + case B_TRANSITION_GROUP_B_PYRAMID: + return RANDOM_TRANSITION(sBattleTransitionTable_BattlePyramid); + case B_TRANSITION_GROUP_B_DOME: + return RANDOM_TRANSITION(sBattleTransitionTable_BattleDome); } if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS) - return sBattleTransitionTable_BattleFrontier[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleFrontier)]; + return RANDOM_TRANSITION(sBattleTransitionTable_BattleFrontier); } var = gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum * 2 + 0] @@ -1040,22 +1054,22 @@ static void InitTrainerBattleVariables(void) static inline void SetU8(void *ptr, u8 value) { - *(u8*)(ptr) = value; + *(u8 *)(ptr) = value; } static inline void SetU16(void *ptr, u16 value) { - *(u16*)(ptr) = value; + *(u16 *)(ptr) = value; } static inline void SetU32(void *ptr, u32 value) { - *(u32*)(ptr) = value; + *(u32 *)(ptr) = value; } -static inline void SetPtr(const void *ptr, const void* value) +static inline void SetPtr(const void *ptr, const void *value) { - *(const void**)(ptr) = value; + *(const void **)(ptr) = value; } static void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data) @@ -1104,7 +1118,8 @@ void SetMapVarsToTrainer(void) const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data) { - InitTrainerBattleVariables(); + if (TrainerBattleLoadArg8(data) != TRAINER_BATTLE_SET_TRAINER_B) + InitTrainerBattleVariables(); sTrainerBattleMode = TrainerBattleLoadArg8(data); switch (sTrainerBattleMode) @@ -1161,10 +1176,10 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data) return EventScript_TryDoNormalTrainerBattle; case TRAINER_BATTLE_SET_TRAINER_A: TrainerBattleLoadArgs(sOrdinaryBattleParams, data); - return NULL; + return sTrainerBattleEndScript; case TRAINER_BATTLE_SET_TRAINER_B: TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data); - return NULL; + return sTrainerBattleEndScript; case TRAINER_BATTLE_HILL: if (gApproachingTrainerId == 0) { @@ -1197,8 +1212,8 @@ void ConfigureAndSetUpOneTrainerBattle(u8 trainerObjEventId, const u8 *trainerSc gSelectedObjectEvent = trainerObjEventId; gSpecialVar_LastTalked = gObjectEvents[trainerObjEventId].localId; BattleSetup_ConfigureTrainerBattle(trainerScript + 1); - ScriptContext1_SetupScript(EventScript_StartTrainerApproach); - ScriptContext2_Enable(); + ScriptContext_SetupScript(EventScript_StartTrainerApproach); + LockPlayerFieldControls(); } void ConfigureTwoTrainersBattle(u8 trainerObjEventId, const u8 *trainerScript) @@ -1210,8 +1225,8 @@ void ConfigureTwoTrainersBattle(u8 trainerObjEventId, const u8 *trainerScript) void SetUpTwoTrainersBattle(void) { - ScriptContext1_SetupScript(EventScript_StartTrainerApproach); - ScriptContext2_Enable(); + ScriptContext_SetupScript(EventScript_StartTrainerApproach); + LockPlayerFieldControls(); } bool32 GetTrainerFlagFromScriptPointer(const u8 *data) @@ -1319,11 +1334,11 @@ void BattleSetup_StartTrainerBattle(void) gMain.savedCallback = CB2_EndTrainerBattle; if (InBattlePyramid() || InTrainerHillChallenge()) - sub_80B0828(); + DoBattlePyramidTrainerHillBattle(); else DoTrainerBattle(); - ScriptContext1_Stop(); + ScriptContext_Stop(); } static void CB2_EndTrainerBattle(void) @@ -1374,7 +1389,7 @@ void BattleSetup_StartRematchBattle(void) gBattleTypeFlags = BATTLE_TYPE_TRAINER; gMain.savedCallback = CB2_EndRematchBattle; DoTrainerBattle(); - ScriptContext1_Stop(); + ScriptContext_Stop(); } void ShowTrainerIntroSpeech(void) @@ -1575,12 +1590,14 @@ static s32 TrainerIdToRematchTableId(const struct RematchTrainer *table, u16 tra return -1; } -static bool32 sub_80B1D94(s32 rematchTableId) +// Returns TRUE if the given trainer (by their entry in the rematch table) is not allowed to have rematches. +// This applies to the Elite Four and Victory Road Wally (if he's not been defeated yet) +static bool32 IsRematchForbidden(s32 rematchTableId) { if (rematchTableId >= REMATCH_ELITE_FOUR_ENTRIES) return TRUE; - else if (rematchTableId == REMATCH_WALLY_3) - return (FlagGet(FLAG_DEFEATED_WALLY_VICTORY_ROAD) == FALSE); + else if (rematchTableId == REMATCH_WALLY_VR) + return !FlagGet(FLAG_DEFEATED_WALLY_VICTORY_ROAD); else return FALSE; } @@ -1609,7 +1626,7 @@ static bool32 UpdateRandomTrainerRematches(const struct RematchTrainer *table, u for (i = 0; i <= REMATCH_SPECIAL_TRAINER_START; i++) { - if (table[i].mapGroup == mapGroup && table[i].mapNum == mapNum && !sub_80B1D94(i)) + if (table[i].mapGroup == mapGroup && table[i].mapNum == mapNum && !IsRematchForbidden(i)) { if (gSaveBlock1Ptr->trainerRematches[i] != 0) { diff --git a/src/battle_tent.c b/src/battle_tent.c index 26b2e8bb11..dba9e6e8a0 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -56,10 +56,8 @@ static void GenerateInitialRentalMons(void); * */ -// IWRAM bss -static u16 sRandMonSetId; +static u16 sRandMonId; -// const rom data void static (*const sVerdanturfTentFuncs[])(void) = { [VERDANTURF_TENT_FUNC_INIT] = InitVerdanturfTentChallenge, @@ -114,7 +112,7 @@ static void InitVerdanturfTentChallenge(void) gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; gSaveBlock2Ptr->frontier.challengePaused = FALSE; - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); } static void GetVerdanturfTentPrize(void) @@ -176,7 +174,7 @@ static void InitFallarborTentChallenge(void) gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; gSaveBlock2Ptr->frontier.challengePaused = FALSE; - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); } static void GetFallarborTentPrize(void) @@ -231,7 +229,7 @@ static void InitSlateportTentChallenge(void) gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; gSaveBlock2Ptr->frontier.challengePaused = FALSE; - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); } static void GetSlateportTentPrize(void) @@ -357,7 +355,7 @@ static void GenerateOpponentMons(void) const u16 *monSet; u16 species[FRONTIER_PARTY_SIZE]; u16 heldItems[FRONTIER_PARTY_SIZE]; - s32 monId = 0; + s32 numMons = 0; gFacilityTrainers = gSlateportBattleTentTrainers; gFacilityTrainerMons = gSlateportBattleTentMons; @@ -366,6 +364,7 @@ static void GenerateOpponentMons(void) { do { + // Choose a random trainer, ensuring no repeats in this challenge trainerId = Random() % NUM_BATTLE_TENT_TRAINERS; for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) { @@ -376,48 +375,53 @@ static void GenerateOpponentMons(void) gTrainerBattleOpponent_A = trainerId; monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet; - while (monSet[monId] != 0xFFFF) - monId++; - if (monId > 8) + while (monSet[numMons] != 0xFFFF) + numMons++; + if (numMons > 8) break; - monId = 0; + numMons = 0; } - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 2) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < TENT_STAGES_PER_CHALLENGE - 1) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet; i = 0; while (i != FRONTIER_PARTY_SIZE) { - sRandMonSetId = monSet[Random() % monId]; - for (j = 0; j < 6; j++) + sRandMonId = monSet[Random() % numMons]; + + // Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player + for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++) { - if (gFacilityTrainerMons[sRandMonSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species) + if (gFacilityTrainerMons[sRandMonId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species) break; } - if (j != 6) + if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons)) continue; + // Ensure this species hasn't already been chosen for the opponent for (k = 0; k < i; k++) { - if (species[k] == gFacilityTrainerMons[sRandMonSetId].species) + if (species[k] == gFacilityTrainerMons[sRandMonId].species) break; } if (k != i) continue; + // Ensure held items don't repeat on the opponent's team for (k = 0; k < i; k++) { - if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonSetId].itemTableId]) + if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonId].itemTableId]) break; } if (k != i) continue; - species[i] = gFacilityTrainerMons[sRandMonSetId].species; - heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonSetId].itemTableId]; - gFrontierTempParty[i] = sRandMonSetId; + // Successful selection + species[i] = gFacilityTrainerMons[sRandMonId].species; + heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonId].itemTableId]; + gFrontierTempParty[i] = sRandMonId; i++; } } diff --git a/src/battle_tower.c b/src/battle_tower.c index 082ea6822f..62479186ff 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -27,6 +27,7 @@ #include "constants/battle_dome.h" #include "constants/battle_frontier.h" #include "constants/battle_frontier_mons.h" +#include "constants/battle_tent.h" #include "constants/battle_tent_mons.h" #include "constants/battle_tent_trainers.h" #include "constants/battle_tower.h" @@ -35,7 +36,6 @@ #include "constants/trainers.h" #include "constants/event_objects.h" #include "constants/moves.h" -#include "constants/easy_chat.h" extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_MaxieTrainer[]; extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_TabithaTrainer[]; @@ -135,7 +135,7 @@ const u16 gBattleFrontierHeldItems[] = ITEM_APICOT_BERRY, ITEM_STARF_BERRY, ITEM_LIECHI_BERRY, - ITEM_STICK, + ITEM_LEEK, ITEM_LAX_INCENSE, ITEM_AGUAV_BERRY, ITEM_FIGY_BERRY, @@ -688,7 +688,7 @@ struct { u32 facilityClass; const u8 *const *strings; -} const sPartnerTrainerTextTables[] = +} static const sPartnerTrainerTextTables[] = { {FACILITY_CLASS_LASS, sPartnerTextsLass}, {FACILITY_CLASS_YOUNGSTER, sPartnerTextsYoungster}, @@ -770,7 +770,7 @@ struct u8 nature; u8 evs[NUM_STATS]; u16 moves[MAX_MON_MOVES]; -} const sStevenMons[MULTI_PARTY_SIZE] = +} static const sStevenMons[MULTI_PARTY_SIZE] = { { .species = SPECIES_METANG, @@ -918,7 +918,7 @@ static void InitTowerChallenge(void) gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0; ValidateBattleTowerRecordChecksums(); - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); gTrainerBattleOpponent_A = 0; } @@ -996,7 +996,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void) winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode); for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { - u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]); + u32 *record = (u32 *)(&gSaveBlock2Ptr->frontier.towerRecords[i]); u32 recordHasData = 0; u32 checksum = 0; for (j = 0; j < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; j++) // - 4, because of the last field being the checksum itself. @@ -1007,7 +1007,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void) validMons = 0; for (j = 0; j < MAX_FRONTIER_PARTY_SIZE; j++) { - if (gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species != 0 + if (gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species != SPECIES_NONE && gSaveBlock2Ptr->frontier.towerRecords[i].party[j].level <= GetFrontierEnemyMonLevel(lvlMode)) validMons++; } @@ -1061,7 +1061,7 @@ static void SetNextFacilityOpponent(void) u16 id; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u16 winStreak = GetCurrentFacilityWinStreak(); - u32 challengeNum = winStreak / 7; + u32 challengeNum = winStreak / FRONTIER_STAGES_PER_CHALLENGE; SetFacilityPtrsGetLevel(); if (battleMode == FRONTIER_MODE_MULTIS || battleMode == FRONTIER_MODE_LINK_MULTIS) @@ -1096,7 +1096,7 @@ static void SetNextFacilityOpponent(void) gTrainerBattleOpponent_A = id; SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < 7) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < FRONTIER_STAGES_PER_CHALLENGE) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; } } @@ -1108,7 +1108,7 @@ u16 GetRandomScaledFrontierTrainerId(u8 challengeNum, u8 battleNum) if (challengeNum <= 7) { - if (battleNum == 6) + if (battleNum == FRONTIER_STAGES_PER_CHALLENGE - 1) { // The last battle in each challenge has a jump in difficulty, pulls from a table with higher ranges trainerId = (sFrontierTrainerIdRangesHard[challengeNum][1] - sFrontierTrainerIdRangesHard[challengeNum][0]) + 1; @@ -1137,7 +1137,7 @@ static void GetRandomScaledFrontierTrainerIdRange(u8 challengeNum, u8 battleNum, if (challengeNum <= 7) { - if (battleNum == 6) + if (battleNum == FRONTIER_STAGES_PER_CHALLENGE - 1) { // The last battle in each challenge has a jump in difficulty, pulls from a table with higher ranges range = (sFrontierTrainerIdRangesHard[challengeNum][1] - sFrontierTrainerIdRangesHard[challengeNum][0]) + 1; @@ -1327,19 +1327,19 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) if (gSaveBlock2Ptr->frontier.towerRecords[i].trainerId[j] != newRecord->trainerId[j]) break; } - if (j == 4) + if (j == TRAINER_ID_LENGTH) { for (k = 0; k < PLAYER_NAME_LENGTH; k++) { - #ifdef BUGFIX - if (gSaveBlock2Ptr->frontier.towerRecords[i].name[k] != newRecord->name[k]) + // Incorrect index being used + #ifdef BUGFIX + #define INDEX k + #else + #define INDEX j + #endif + if (gSaveBlock2Ptr->frontier.towerRecords[i].name[INDEX] != newRecord->name[INDEX]) break; - if (newRecord->name[k] == EOS) - #else - if (gSaveBlock2Ptr->frontier.towerRecords[i].name[j] != newRecord->name[j]) - break; - if (newRecord->name[j] == EOS) - #endif + if (newRecord->name[INDEX] == EOS) { k = PLAYER_NAME_LENGTH; break; @@ -1452,6 +1452,10 @@ u8 GetFrontierOpponentClass(u16 trainerId) { trainerClass = gTrainers[TRAINER_STEVEN].trainerClass; } + else if (trainerId >= TRAINER_CUSTOM_PARTNER) + { + trainerClass = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerClass; + } else if (trainerId < FRONTIER_TRAINERS_COUNT) { trainerClass = gFacilityClassToTrainerClass[gFacilityTrainers[trainerId].facilityClass]; @@ -1533,6 +1537,11 @@ void GetFrontierTrainerName(u8 *dst, u16 trainerId) for (i = 0; i < PLAYER_NAME_LENGTH; i++) dst[i] = gTrainers[TRAINER_STEVEN].trainerName[i]; } + else if (trainerId >= TRAINER_CUSTOM_PARTNER) + { + for (i = 0; gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName[i] != EOS; i++) + dst[i] = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName[i]; + } else if (trainerId < FRONTIER_TRAINERS_COUNT) { for (i = 0; i < PLAYER_NAME_LENGTH; i++) @@ -1635,7 +1644,7 @@ static void FillTentTrainerParty(u8 monsCount) static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) { s32 i, j; - u16 chosenMonIndices[4]; + u16 chosenMonIndices[MAX_FRONTIER_PARTY_SIZE]; u8 friendship = MAX_FRIENDSHIP; u8 level = SetFacilityPtrsGetLevel(); u8 fixedIV = 0; @@ -1651,7 +1660,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) } else if (trainerId == TRAINER_EREADER) { - for (i = firstMonId; i < firstMonId + 3; i++) + for (i = firstMonId; i < firstMonId + FRONTIER_PARTY_SIZE; i++) CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i - firstMonId]); return; } @@ -1665,10 +1674,10 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) // Record mixed player. for (j = 0, i = firstMonId; i < firstMonId + monCount; j++, i++) { - if (gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[j].species != 0 + if (gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[j].species != SPECIES_NONE && gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[j].level <= level) { - CreateBattleTowerMon2(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[j], FALSE); + CreateBattleTowerMon_HandleLevel(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[j], FALSE); } } return; @@ -1676,7 +1685,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) else { // Apprentice. - for (i = firstMonId; i < firstMonId + 3; i++) + for (i = firstMonId; i < firstMonId + FRONTIER_PARTY_SIZE; i++) CreateApprenticeMon(&gEnemyParty[i], &gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE], i - firstMonId); return; } @@ -1692,7 +1701,10 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) while (i != monCount) { u16 monId = monSet[Random() % bfMonCount]; - if ((level == 50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER) + + // "High tier" pokemon are only allowed on open level mode + // 20 is not a possible value for level here + if ((level == FRONTIER_MAX_LEVEL_50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER) continue; // Ensure this pokemon species isn't a duplicate. @@ -1707,7 +1719,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) // Ensure this Pokemon's held item isn't a duplicate. for (j = 0; j < i + firstMonId; j++) { - if (GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) != 0 + if (GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) != ITEM_NONE && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) break; } @@ -1768,11 +1780,11 @@ static void Unused_CreateApprenticeMons(u16 trainerId, u8 firstMonId) fixedIV = 9; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) - level = 100; + level = FRONTIER_MAX_LEVEL_OPEN; else - level = 50; + level = FRONTIER_MAX_LEVEL_50; - for (i = 0; i != 3; i++) + for (i = 0; i != FRONTIER_PARTY_SIZE; i++) { CreateMonWithEVSpread(&gEnemyParty[firstMonId + i], apprentice->party[i].species, level, fixedIV, 8); friendship = MAX_FRIENDSHIP; @@ -1803,8 +1815,10 @@ u16 GetRandomFrontierMonFromSet(u16 trainerId) do { + // "High tier" pokemon are only allowed on open level mode + // 20 is not a possible value for level here monId = monSet[Random() % numMons]; - } while((level == 50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER); + } while((level == FRONTIER_MAX_LEVEL_50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER); return monId; } @@ -1828,17 +1842,22 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) if (trainerId < FRONTIER_TRAINERS_COUNT) { - u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; // Unused variable. + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - u8 challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][0] / 7; - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 6) - fixedIV = GetFactoryMonFixedIV(challengeNum, 0); + // By mistake Battle Tower's Level 50 challenge number is used to determine the IVs for Battle Factory. + #ifdef BUGFIX + u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; + #else + u8 challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][FRONTIER_LVL_50] / FRONTIER_STAGES_PER_CHALLENGE; + #endif + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < FRONTIER_STAGES_PER_CHALLENGE - 1) + fixedIV = GetFactoryMonFixedIV(challengeNum, FALSE); else - fixedIV = GetFactoryMonFixedIV(challengeNum, 1); + fixedIV = GetFactoryMonFixedIV(challengeNum, TRUE); // Last trainer in challenge uses higher IVs } else if (trainerId == TRAINER_EREADER) { - for (i = firstMonId; i < firstMonId + 3; i++) + for (i = firstMonId; i < firstMonId + FRONTIER_PARTY_SIZE; i++) CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i - firstMonId]); return; } @@ -1878,7 +1897,7 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId) { u8 i, j; u8 friendship; - u8 level = 30; + u8 level = TENT_MIN_LEVEL; u8 fixedIV = 0; u32 otID = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); @@ -1909,7 +1928,7 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId) void FrontierSpeechToString(const u16 *words) { ConvertEasyChatWordsToString(gStringVar4, words, 3, 2); - if (GetStringWidth(1, gStringVar4, -1) > 204u) + if (GetStringWidth(FONT_NORMAL, gStringVar4, -1) > 204u) { s32 i = 0; @@ -1979,6 +1998,13 @@ static void HandleSpecialTrainerBattleEnd(void) case SPECIAL_BATTLE_EREADER: CopyEReaderTrainerFarewellMessage(); break; + case SPECIAL_BATTLE_MULTI: + for (i = 0; i < 3; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) + gSaveBlock1Ptr->playerParty[i] = gPlayerParty[i]; + } + break; } SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); @@ -2025,7 +2051,7 @@ void DoSpecialTrainerBattle(void) } CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); - BattleTransition_StartOnField(GetSpecialBattleTransition(0)); + BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_TOWER)); break; case SPECIAL_BATTLE_SECRET_BASE: for (i = 0; i < PARTY_SIZE; i++) @@ -2035,17 +2061,17 @@ void DoSpecialTrainerBattle(void) } CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); - BattleTransition_StartOnField(GetSpecialBattleTransition(12)); + BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_SECRET_BASE)); break; case SPECIAL_BATTLE_EREADER: ZeroEnemyPartyMons(); - for (i = 0; i < 3; i++) + for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.ereaderTrainer.party); i++) CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i]); gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_EREADER_TRAINER; gTrainerBattleOpponent_A = 0; CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); - BattleTransition_StartOnField(GetSpecialBattleTransition(13)); + BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_E_READER)); break; case SPECIAL_BATTLE_DOME: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOME; @@ -2055,7 +2081,7 @@ void DoSpecialTrainerBattle(void) FillFrontierTrainerParty(DOME_BATTLE_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); CreateTask_PlayMapChosenOrBattleBGM(0); - BattleTransition_StartOnField(GetSpecialBattleTransition(3)); + BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_DOME)); break; case SPECIAL_BATTLE_PALACE: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE; @@ -2067,7 +2093,7 @@ void DoSpecialTrainerBattle(void) FillTentTrainerParty(FRONTIER_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); - BattleTransition_StartOnField(GetSpecialBattleTransition(4)); + BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PALACE)); break; case SPECIAL_BATTLE_ARENA: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_ARENA; @@ -2077,7 +2103,7 @@ void DoSpecialTrainerBattle(void) FillTentTrainerParty(FRONTIER_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); - BattleTransition_StartOnField(GetSpecialBattleTransition(5)); + BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_ARENA)); break; case SPECIAL_BATTLE_FACTORY: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_FACTORY; @@ -2086,28 +2112,28 @@ void DoSpecialTrainerBattle(void) FillFactoryTrainerParty(); CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); - BattleTransition_StartOnField(GetSpecialBattleTransition(6)); + BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_FACTORY)); break; case SPECIAL_BATTLE_PIKE_SINGLE: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER; FillFrontierTrainerParty(FRONTIER_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); - BattleTransition_StartOnField(GetSpecialBattleTransition(7)); + BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PIKE)); break; case SPECIAL_BATTLE_PYRAMID: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID; FillFrontierTrainerParty(FRONTIER_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); - BattleTransition_StartOnField(GetSpecialBattleTransition(10)); + BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PYRAMID)); break; case SPECIAL_BATTLE_PIKE_DOUBLE: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS; FillFrontierTrainersParties(1); CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); - BattleTransition_StartOnField(GetSpecialBattleTransition(7)); + BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PIKE)); break; case SPECIAL_BATTLE_STEVEN: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER; @@ -2121,6 +2147,34 @@ void DoSpecialTrainerBattle(void) PlayMapChosenOrBattleBGM(0); BattleTransition_StartOnField(B_TRANSITION_MAGMA); break; + case SPECIAL_BATTLE_MULTI: + if (gSpecialVar_0x8005 & MULTI_BATTLE_2_VS_WILD) // Player + AI against wild mon + { + gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER; + } + else if (gSpecialVar_0x8005 & MULTI_BATTLE_2_VS_1) // Player + AI against one trainer + { + gTrainerBattleOpponent_B = 0xFFFF; + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER; + } + else // MULTI_BATTLE_2_VS_2 + { + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER; + } + + gPartnerSpriteId = VarGet(gSpecialVar_0x8007); + gPartnerTrainerId = VarGet(gSpecialVar_0x8006) + TRAINER_CUSTOM_PARTNER; + FillPartnerParty(gPartnerTrainerId); + CreateTask(Task_StartBattleAfterTransition, 1); + PlayMapChosenOrBattleBGM(0); + if (gSpecialVar_0x8005 & MULTI_BATTLE_2_VS_WILD) + BattleTransition_StartOnField(GetWildBattleTransition()); + else + BattleTransition_StartOnField(GetTrainerBattleTransition()); + + if (gSpecialVar_0x8005 & MULTI_BATTLE_CHOOSE_MONS) // Skip mons restoring(done in the script) + gBattleScripting.specialTrainerBattleType = 0xFF; + break; } } @@ -2160,7 +2214,7 @@ static void SaveBattleTowerRecord(void) playerRecord->lvlMode = lvlMode; playerRecord->facilityClass = class; CopyTrainerId(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId); - StringCopy7(playerRecord->name, gSaveBlock2Ptr->playerName); + StringCopy_PlayerName(playerRecord->name, gSaveBlock2Ptr->playerName); playerRecord->winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode); for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) @@ -2185,7 +2239,7 @@ static void SaveTowerChallenge(void) { u16 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7); + s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE); if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0)) SaveBattleTowerRecord(); @@ -2245,7 +2299,7 @@ static void GetRecordMixFriendMultiPartnerParty(u16 trainerId) if (gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].species != species1 && gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].species != species2 && gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].level <= GetFrontierEnemyMonLevel(lvlMode) - && gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].species != 0) + && gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].species != SPECIES_NONE) { validSpecies[count] = i; count++; @@ -2275,7 +2329,7 @@ static void LoadMultiPartnerCandidatesData(void) objEventTemplates = gSaveBlock1Ptr->objectEventTemplates; lvlMode = gSaveBlock2Ptr->frontier.lvlMode; battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL); species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL); level = SetFacilityPtrsGetLevel(); @@ -2334,7 +2388,7 @@ static void LoadMultiPartnerCandidatesData(void) for (i = 0; i < APPRENTICE_COUNT; i++) { if (gSaveBlock2Ptr->apprentices[i].lvlMode != 0 - && sApprenticeChallengeThreshold[gSaveBlock2Ptr->apprentices[i].numQuestions] / 7 <= challengeNum + && sApprenticeChallengeThreshold[gSaveBlock2Ptr->apprentices[i].numQuestions] / FRONTIER_STAGES_PER_CHALLENGE <= challengeNum && gSaveBlock2Ptr->apprentices[i].lvlMode - 1 == lvlMode) { k = 0; @@ -2364,7 +2418,7 @@ static void LoadMultiPartnerCandidatesData(void) r10 = 0; for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { - u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]); + u32 *record = (u32 *)(&gSaveBlock2Ptr->frontier.towerRecords[i]); u32 recordHasData = 0; u32 checksum = 0; for (j = 0; j < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; j++) // - 4, because of the last field being the checksum itself. @@ -2373,7 +2427,7 @@ static void LoadMultiPartnerCandidatesData(void) checksum += record[j]; } - if (gSaveBlock2Ptr->frontier.towerRecords[i].winStreak / 7 <= challengeNum + if (gSaveBlock2Ptr->frontier.towerRecords[i].winStreak / FRONTIER_STAGES_PER_CHALLENGE <= challengeNum && gSaveBlock2Ptr->frontier.towerRecords[i].lvlMode == lvlMode && recordHasData && gSaveBlock2Ptr->frontier.towerRecords[i].checksum == checksum) @@ -2384,7 +2438,7 @@ static void LoadMultiPartnerCandidatesData(void) if (species1 != gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species && species2 != gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species && gSaveBlock2Ptr->frontier.towerRecords[i].party[j].level <= GetFrontierEnemyMonLevel(lvlMode) - && gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species != 0) + && gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species != SPECIES_NONE) { k++; } @@ -2454,7 +2508,7 @@ static void ShowPartnerCandidateMessage(void) s32 monId; s32 level = SetFacilityPtrsGetLevel(); u16 winStreak = GetCurrentFacilityWinStreak(); - s32 challengeNum = winStreak / 7; + s32 challengeNum = winStreak / FRONTIER_STAGES_PER_CHALLENGE; s32 k = gSpecialVar_LastTalked - 2; s32 trainerId = gSaveBlock2Ptr->frontier.trainerIds[k]; @@ -2513,7 +2567,7 @@ static void ShowPartnerCandidateMessage(void) gSaveBlock2Ptr->frontier.trainerIds[18] = gFrontierTempParty[0]; gSaveBlock2Ptr->frontier.trainerIds[19] = gFrontierTempParty[1]; } - for (k = 0; k < 14; k++) + for (k = 0; k < FRONTIER_STAGES_PER_CHALLENGE * 2; k++) { while (1) { @@ -2572,10 +2626,10 @@ static void LoadLinkMultiOpponentsData(void) case 0: if (battleMode == FRONTIER_MODE_LINK_MULTIS) { - challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), &challengeNum, sizeof(challengeNum)); + SendBlock(BitmaskAllOtherLinkPlayers(), &challengeNum, sizeof(challengeNum)); gSpecialVar_Result = 1; } } @@ -2592,7 +2646,7 @@ static void LoadLinkMultiOpponentsData(void) challengeNum = gBlockRecvBuffer[0][0]; else challengeNum = gBlockRecvBuffer[1][0]; - for (i = 0; i < 14; i++) + for (i = 0; i < FRONTIER_STAGES_PER_CHALLENGE * 2; i++) { do { @@ -2612,7 +2666,7 @@ static void LoadLinkMultiOpponentsData(void) case 2: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), &gSaveBlock2Ptr->frontier.trainerIds, sizeof(gSaveBlock2Ptr->frontier.trainerIds)); + SendBlock(BitmaskAllOtherLinkPlayers(), &gSaveBlock2Ptr->frontier.trainerIds, sizeof(gSaveBlock2Ptr->frontier.trainerIds)); gSpecialVar_Result = 3; } break; @@ -2655,7 +2709,7 @@ static void TowerTryCloseLink(void) static void SetMultiPartnerGfx(void) { // 0xF below means use VAR_OBJ_GFX_ID_E - SetBattleFacilityTrainerGfxId(gSaveBlock2Ptr->frontier.trainerIds[17], 0xF); + SetBattleFacilityTrainerGfxId(gSaveBlock2Ptr->frontier.trainerIds[17], 0xF); } static void SetTowerInterviewData(void) @@ -2680,7 +2734,7 @@ static void SetTowerInterviewData(void) static void ValidateBattleTowerRecordChecksums(void) { s32 i, j; - u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerPlayer); + u32 *record = (u32 *)(&gSaveBlock2Ptr->frontier.towerPlayer); u32 checksum = 0; for (j = 0; j < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; j++) // - 4, because of the last field being the checksum itself. @@ -2692,7 +2746,7 @@ static void ValidateBattleTowerRecordChecksums(void) for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { - record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]); + record = (u32 *)(&gSaveBlock2Ptr->frontier.towerRecords[i]); checksum = 0; for (j = 0; j < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; j++) // - 4, because of the last field being the checksum itself. { @@ -2733,8 +2787,8 @@ u16 GetCurrentBattleTowerWinStreak(u8 lvlMode, u8 battleMode) { u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; - if (winStreak > 9999) - return 9999; + if (winStreak > MAX_STREAK) + return MAX_STREAK; else return winStreak; } @@ -2831,12 +2885,12 @@ static void FillEReaderTrainerWithPlayerData(void) } CopyTrainerId(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId); - StringCopy7(ereaderTrainer->name, gSaveBlock2Ptr->playerName); + StringCopy_PlayerName(ereaderTrainer->name, gSaveBlock2Ptr->playerName); ereaderTrainer->winStreak = 1; j = 7; - for (i = 0; i < 6; i++) + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) { ereaderTrainer->greeting[i] = gSaveBlock1Ptr->easyChatBattleStart[i]; ereaderTrainer->farewellPlayerLost[i] = j; @@ -2844,7 +2898,7 @@ static void FillEReaderTrainerWithPlayerData(void) j++; } - for (i = 0; i < 3; i++) + for (i = 0; i < (int)ARRAY_COUNT(ereaderTrainer->party); i++) ConvertPokemonToBattleTowerPokemon(&gPlayerParty[i], &ereaderTrainer->party[i]); SetEReaderTrainerChecksum(ereaderTrainer); @@ -2953,7 +3007,7 @@ static void FillPartnerParty(u16 trainerId) u32 friendship; u16 monId; u32 otID; - u8 trainerName[PLAYER_NAME_LENGTH + 1]; + u8 trainerName[(PLAYER_NAME_LENGTH * 3) + 1]; SetFacilityPtrsGetLevel(); if (trainerId == TRAINER_STEVEN_PARTNER) @@ -2968,7 +3022,7 @@ static void FillPartnerParty(u16 trainerId) sStevenMons[i].species, sStevenMons[i].level, sStevenMons[i].fixedIV, - TRUE, + TRUE, #ifdef BUGFIX j, #else @@ -2985,6 +3039,72 @@ static void FillPartnerParty(u16 trainerId) CalculateMonStats(&gPlayerParty[MULTI_PARTY_SIZE + i]); } } + else if (trainerId >= TRAINER_CUSTOM_PARTNER) + { + otID = Random32(); + + for (i = 0; i < 3; i++) + ZeroMonData(&gPlayerParty[i + 3]); + + for (i = 0; i < 3 && i < gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].partySize; i++) + { + do + { + j = Random32(); + } while (IsShinyOtIdPersonality(otID, j)); + + switch (gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].partyFlags) + { + case 0: + { + const struct TrainerMonNoItemDefaultMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.NoItemDefaultMoves; + + CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID); + break; + } + case F_TRAINER_PARTY_CUSTOM_MOVESET: + { + const struct TrainerMonNoItemCustomMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.NoItemCustomMoves; + + CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID); + + for (j = 0; j < 4; j++) + { + SetMonData(&gPlayerParty[i + 3], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&gPlayerParty[i + 3], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + case F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemDefaultMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.ItemDefaultMoves; + + CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID); + + SetMonData(&gPlayerParty[i + 3], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + break; + } + case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemCustomMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.ItemCustomMoves; + + CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID); + + SetMonData(&gPlayerParty[i + 3], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + + for (j = 0; j < 4; j++) + { + SetMonData(&gPlayerParty[i + 3], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&gPlayerParty[i + 3], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + } + + StringCopy(trainerName, gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName); + SetMonData(&gPlayerParty[i + 3], MON_DATA_OT_NAME, trainerName); + } + } else if (trainerId == TRAINER_EREADER) { // Scrapped, lol. @@ -3042,7 +3162,7 @@ static void FillPartnerParty(u16 trainerId) if (monData.nickname[0] == EXT_CTRL_CODE_BEGIN && monData.nickname[1] == EXT_CTRL_CODE_JPN) trainerName[5] = EOS; } - CreateBattleTowerMon2(&gPlayerParty[MULTI_PARTY_SIZE + i], &monData, TRUE); + CreateBattleTowerMon_HandleLevel(&gPlayerParty[MULTI_PARTY_SIZE + i], &monData, TRUE); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_OT_NAME, trainerName); j = IsFrontierTrainerFemale(trainerId + TRAINER_RECORD_MIXING_FRIEND); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_OT_GENDER, &j); @@ -3185,7 +3305,7 @@ static void ValidateApprenticesChecksums(void) for (i = 0; i < APPRENTICE_COUNT; i++) { - u32 *data = (u32*) &gSaveBlock2Ptr->apprentices[i]; + u32 *data = (u32 *) &gSaveBlock2Ptr->apprentices[i]; u32 checksum = 0; for (j = 0; j < (sizeof(struct Apprentice) - 4) / 4; j++) checksum += data[j]; @@ -3242,12 +3362,12 @@ u8 GetFrontierEnemyMonLevel(u8 lvlMode) { default: case FRONTIER_LVL_50: - level = 50; + level = FRONTIER_MAX_LEVEL_50; break; case FRONTIER_LVL_OPEN: level = GetHighestLevelInPlayerParty(); - if (level < 60) - level = 60; + if (level < FRONTIER_MIN_LEVEL_OPEN) + level = FRONTIER_MIN_LEVEL_OPEN; break; } @@ -3317,7 +3437,7 @@ static u16 GetBattleTentTrainerId(void) static u8 SetTentPtrsGetLevel(void) { - u8 level = 30; + u8 level = TENT_MIN_LEVEL; u32 facility = VarGet(VAR_FRONTIER_FACILITY); if (facility == FRONTIER_FACILITY_FACTORY) @@ -3342,8 +3462,8 @@ static u8 SetTentPtrsGetLevel(void) } level = GetHighestLevelInPlayerParty(); - if (level < 30) - level = 30; + if (level < TENT_MIN_LEVEL) + level = TENT_MIN_LEVEL; return level; } @@ -3365,7 +3485,7 @@ static void SetNextBattleTentOpponent(void) gTrainerBattleOpponent_A = trainerId; SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < 3) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < TENT_STAGES_PER_CHALLENGE) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; } @@ -3411,7 +3531,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) // Ensure this Pokemon's held item isn't a duplicate. for (j = 0; j < i + firstMonId; j++) { - if (GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) != 0 + if (GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) != ITEM_NONE && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) break; } @@ -3494,7 +3614,7 @@ u8 FacilityClassToGraphicsId(u8 facilityClass) bool32 ValidateBattleTowerRecord(u8 recordId) // unused { s32 i; - u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[recordId]); + u32 *record = (u32 *)(&gSaveBlock2Ptr->frontier.towerRecords[recordId]); u32 checksum = 0; u32 hasData = 0; for (i = 0; i < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; i++) // - 4, because of the last fjeld bejng the checksum jtself. diff --git a/src/battle_transition.c b/src/battle_transition.c index 4d446b3df1..bc289efa7f 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -25,6 +25,33 @@ #include "constants/trainers.h" #include "constants/rgb.h" +#define PALTAG_UNUSED_MUGSHOT 0x100A + +#define B_TRANS_DMA_FLAGS (1 | ((DMA_SRC_INC | DMA_DEST_FIXED | DMA_REPEAT | DMA_16BIT | DMA_START_HBLANK | DMA_ENABLE) << 16)) + +// Used by each transition task to determine which of its functions to call +#define tState data[0] + +// Below are data defines for InitBlackWipe and UpdateBlackWipe, for the TransitionData data array. +// These will be re-used by any transitions that use these functions. +#define tWipeStartX data[0] +#define tWipeStartY data[1] +#define tWipeCurrX data[2] +#define tWipeCurrY data[3] +#define tWipeEndX data[4] +#define tWipeEndY data[5] +#define tWipeXMove data[6] +#define tWipeYMove data[7] +#define tWipeXDist data[8] +#define tWipeYDist data[9] +#define tWipeTemp data[10] + +#define SET_TILE(ptr, posY, posX, tile) \ +{ \ + u32 index = (posY) * 32 + posX; \ + ptr[index] = tile | (0xF0 << 8); \ +} + struct TransitionData { vu8 VBlank_DMA; @@ -32,245 +59,242 @@ struct TransitionData u16 WINOUT; u16 WIN0H; u16 WIN0V; - u16 field_A; // unused - u16 field_C; // unused + u16 unused1; + u16 unused2; u16 BLDCNT; u16 BLDALPHA; u16 BLDY; - s16 field_14; - s16 field_16; - s16 BG0HOFS_1; - s16 BG0HOFS_2; + s16 cameraX; + s16 cameraY; + s16 BG0HOFS_Lower; + s16 BG0HOFS_Upper; s16 BG0VOFS; // used but not set - s16 field_1E; // unused - s16 field_20; - s16 field_22; // unused + s16 unused3; + s16 counter; + s16 unused4; s16 data[11]; }; -struct StructRectangularSpiral +struct RectangularSpiralLine { - u8 field_0; - s16 field_2; - u8 field_4; - s16 field_6; - u8 field_8; + u8 state; + s16 position; + u8 moveIdx; + s16 reboundPosition; + bool8 outward; }; typedef bool8 (*TransitionStateFunc)(struct Task *task); typedef bool8 (*TransitionSpriteCallback)(struct Sprite *sprite); -// this file's functions -static void LaunchBattleTransitionTask(u8 transitionId); -static void Task_BattleTransitionMain(u8 taskId); -static void Phase1Task_TransitionAll(u8 taskId); -static void Phase2Task_Blur(u8 taskId); -static void Phase2Task_Swirl(u8 taskId); -static void Phase2Task_Shuffle(u8 taskId); -static void Phase2Task_BigPokeball(u8 taskId); -static void Phase2Task_PokeballsTrail(u8 taskId); -static void Phase2Task_Clockwise_BlackFade(u8 taskId); -static void Phase2Task_Ripple(u8 taskId); -static void Phase2Task_Wave(u8 taskId); -static void Phase2Task_Slice(u8 taskId); -static void Phase2Task_WhiteFade(u8 taskId); -static void Phase2Task_GridSquares(u8 taskId); -static void Phase2Task_Shards(u8 taskId); -static void Phase2Task_Sidney(u8 taskId); -static void Phase2Task_Phoebe(u8 taskId); -static void Phase2Task_Glacia(u8 taskId); -static void Phase2Task_Drake(u8 taskId); -static void Phase2Task_Champion(u8 taskId); -static void Phase2Task_Aqua(u8 taskId); -static void Phase2Task_Magma(u8 taskId); -static void Phase2Task_Regice(u8 taskId); -static void Phase2Task_Registeel(u8 taskId); -static void Phase2Task_Regirock(u8 taskId); -static void Phase2Task_Kyogre(u8 taskId); -static void Phase2Task_Groudon(u8 taskId); -static void Phase2Task_Rayquaza(u8 taskId); -static void Phase2Task_ShredSplit(u8 taskId); -static void Phase2Task_Blackhole1(u8 taskId); -static void Phase2Task_Blackhole2(u8 taskId); -static void Phase2Task_RectangularSpiral(u8 taskId); -static void Phase2Task_FrontierLogoWiggle(u8 taskId); -static void Phase2Task_FrontierLogoWave(u8 taskId); -static void Phase2Task_FrontierSquares(u8 taskId); -static void Phase2Task_FrontierSquaresScroll(u8 taskId); -static void Phase2Task_FrontierSquaresSpiral(u8 taskId); -static void VBlankCB_BattleTransition(void); -static void VBlankCB_Phase2_Swirl(void); -static void HBlankCB_Phase2_Swirl(void); -static void VBlankCB_Phase2_Shuffle(void); -static void HBlankCB_Phase2_Shuffle(void); -static void VBlankCB0_Phase2_BigPokeball(void); -static void VBlankCB1_Phase2_BigPokeball(void); -static void VBlankCB_Phase2_Clockwise_BlackFade(void); -static void VBlankCB_Phase2_Ripple(void); -static void HBlankCB_Phase2_Ripple(void); -static void VBlankCB_Phase2_30(void); -static void HBlankCB_Phase2_30(void); -static void VBlankCB_Phase2_Wave(void); -static void VBlankCB_Phase2_Slice(void); -static void HBlankCB_Phase2_Slice(void); -static void VBlankCB0_Phase2_WhiteFade(void); -static void VBlankCB1_Phase2_WhiteFade(void); -static void HBlankCB_Phase2_WhiteFade(void); -static void VBlankCB_Phase2_Shards(void); -static void VBlankCB_Phase2_Rayquaza(void); -static bool8 Phase2_Blur_Func1(struct Task *task); -static bool8 Phase2_Blur_Func2(struct Task *task); -static bool8 Phase2_Blur_Func3(struct Task *task); -static bool8 Phase2_Swirl_Func1(struct Task *task); -static bool8 Phase2_Swirl_Func2(struct Task *task); -static bool8 Phase2_Shuffle_Func1(struct Task *task); -static bool8 Phase2_Shuffle_Func2(struct Task *task); -static bool8 Phase2_Aqua_Func1(struct Task *task); -static bool8 Phase2_Aqua_Func2(struct Task *task); -static bool8 Phase2_Magma_Func1(struct Task *task); -static bool8 Phase2_Magma_Func2(struct Task *task); -static bool8 Phase2_FramesCountdown(struct Task *task); -static bool8 Phase2_Regi_Func1(struct Task *task); -static bool8 Phase2_Regice_Func2(struct Task *task); -static bool8 Phase2_Registeel_Func2(struct Task *task); -static bool8 Phase2_Regirock_Func2(struct Task *task); -static bool8 Phase2_WeatherTrio_Func1(struct Task *task); -static bool8 Phase2_WaitPaletteFade(struct Task *task); -static bool8 Phase2_Kyogre_Func3(struct Task *task); -static bool8 Phase2_Kyogre_Func4(struct Task *task); -static bool8 Phase2_Kyogre_Func5(struct Task *task); -static bool8 Phase2_Groudon_Func3(struct Task *task); -static bool8 Phase2_Groudon_Func4(struct Task *task); -static bool8 Phase2_Groudon_Func5(struct Task *task); -static bool8 Phase2_WeatherDuo_Func6(struct Task *task); -static bool8 Phase2_WeatherDuo_Func7(struct Task *task); -static bool8 Phase2_BigPokeball_Func1(struct Task *task); -static bool8 Phase2_BigPokeball_Func2(struct Task *task); -static bool8 Phase2_BigPokeball_Func3(struct Task *task); -static bool8 Phase2_BigPokeball_Func4(struct Task *task); -static bool8 Phase2_BigPokeball_Func5(struct Task *task); -static bool8 Phase2_BigPokeball_Func6(struct Task *task); -static bool8 Phase2_PokeballsTrail_Func1(struct Task *task); -static bool8 Phase2_PokeballsTrail_Func2(struct Task *task); -static bool8 Phase2_PokeballsTrail_Func3(struct Task *task); -static bool8 Phase2_Clockwise_BlackFade_Func1(struct Task *task); -static bool8 Phase2_Clockwise_BlackFade_Func2(struct Task *task); -static bool8 Phase2_Clockwise_BlackFade_Func3(struct Task *task); -static bool8 Phase2_Clockwise_BlackFade_Func4(struct Task *task); -static bool8 Phase2_Clockwise_BlackFade_Func5(struct Task *task); -static bool8 Phase2_Clockwise_BlackFade_Func6(struct Task *task); -static bool8 Phase2_Clockwise_BlackFade_Func7(struct Task *task); -static bool8 Phase2_Ripple_Func1(struct Task *task); -static bool8 Phase2_Ripple_Func2(struct Task *task); -static bool8 Phase2_Wave_Func1(struct Task *task); -static bool8 Phase2_Wave_Func2(struct Task *task); -static bool8 Phase2_Wave_Func3(struct Task *task); -static bool8 Phase2_Slice_Func1(struct Task *task); -static bool8 Phase2_Slice_Func2(struct Task *task); -static bool8 Phase2_Slice_Func3(struct Task *task); -static bool8 Phase2_WhiteFade_Func1(struct Task *task); -static bool8 Phase2_WhiteFade_Func2(struct Task *task); -static bool8 Phase2_WhiteFade_Func3(struct Task *task); -static bool8 Phase2_WhiteFade_Func4(struct Task *task); -static bool8 Phase2_WhiteFade_Func5(struct Task *task); -static bool8 Phase2_GridSquares_Func1(struct Task *task); -static bool8 Phase2_GridSquares_Func2(struct Task *task); -static bool8 Phase2_GridSquares_Func3(struct Task *task); -static bool8 Phase2_Shards_Func1(struct Task *task); -static bool8 Phase2_Shards_Func2(struct Task *task); -static bool8 Phase2_Shards_Func3(struct Task *task); -static bool8 Phase2_Shards_Func4(struct Task *task); -static bool8 Phase2_Shards_Func5(struct Task *task); -static bool8 Phase2_ShredSplit_Func1(struct Task *task); -static bool8 Phase2_ShredSplit_Func2(struct Task *task); -static bool8 Phase2_ShredSplit_Func3(struct Task *task); -static bool8 Phase2_ShredSplit_Func4(struct Task *task); -static bool8 Phase2_Blackhole_Func1(struct Task *task); -static bool8 Phase2_Blackhole1_Func2(struct Task *task); -static bool8 Phase2_Blackhole1_Func3(struct Task *task); -static bool8 Phase2_Blackhole2_Func2(struct Task *task); -static bool8 Phase2_RectangularSpiral_Func1(struct Task *task); -static bool8 Phase2_RectangularSpiral_Func2(struct Task *task); -static bool8 Phase2_RectangularSpiral_Func3(struct Task *task); -static bool8 Phase2_FrontierLogoWiggle_Func1(struct Task *task); -static bool8 Phase2_FrontierLogoWiggle_Func2(struct Task *task); -static bool8 Phase2_FrontierLogoWave_Func1(struct Task *task); -static bool8 Phase2_FrontierLogoWave_Func2(struct Task *task); -static bool8 Phase2_FrontierLogoWave_Func3(struct Task *task); -static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task); -static bool8 Phase2_Rayquaza_Func3(struct Task *task); -static bool8 Phase2_Rayquaza_Func4(struct Task *task); -static bool8 Phase2_Rayquaza_Func5(struct Task *task); -static bool8 Phase2_Rayquaza_Func6(struct Task *task); -static bool8 Phase2_Rayquaza_Func7(struct Task *task); -static bool8 Phase2_Rayquaza_Func8(struct Task *task); -static bool8 Phase2_Rayquaza_Func9(struct Task *task); -static bool8 Phase2_FrontierSquares_Func1(struct Task *task); -static bool8 Phase2_FrontierSquares_Func2(struct Task *task); -static bool8 Phase2_FrontierSquares_Func3(struct Task *task); -static bool8 Phase2_FrontierSquares_End(struct Task *task); -static bool8 Phase2_FrontierSquaresSpiral_Func1(struct Task *task); -static bool8 Phase2_FrontierSquaresSpiral_Func2(struct Task *task); -static bool8 Phase2_FrontierSquaresSpiral_Func3(struct Task *task); -static bool8 Phase2_FrontierSquaresSpiral_Func4(struct Task *task); -static bool8 Phase2_FrontierSquaresScroll_Func1(struct Task *task); -static bool8 Phase2_FrontierSquaresScroll_Func2(struct Task *task); -static bool8 Phase2_FrontierSquaresScroll_Func3(struct Task *task); -static bool8 Phase2_FrontierSquaresScroll_Func4(struct Task *task); -static bool8 Phase2_FrontierSquaresScroll_Func5(struct Task *task); -static bool8 Phase2_Mugshot_Func1(struct Task *task); -static bool8 Phase2_Mugshot_Func2(struct Task *task); -static bool8 Phase2_Mugshot_Func3(struct Task *task); -static bool8 Phase2_Mugshot_Func4(struct Task *task); -static bool8 Phase2_Mugshot_Func5(struct Task *task); -static bool8 Phase2_Mugshot_Func6(struct Task *task); -static bool8 Phase2_Mugshot_Func7(struct Task *task); -static bool8 Phase2_Mugshot_Func8(struct Task *task); -static bool8 Phase2_Mugshot_Func9(struct Task *task); -static bool8 Phase2_Mugshot_Func10(struct Task *task); -static void Phase2Task_MugShotTransition(u8 taskId); -static void Mugshots_CreateOpponentPlayerSprites(struct Task *task); -static void VBlankCB0_Phase2_Mugshots(void); -static void VBlankCB1_Phase2_Mugshots(void); -static void HBlankCB_Phase2_Mugshots(void); -static bool8 Transition_Phase1(struct Task *task); -static bool8 Transition_WaitForPhase1(struct Task *task); -static bool8 Transition_Phase2(struct Task *task); -static bool8 Transition_WaitForPhase2(struct Task *task); -static void InitTransitionStructVars(void); -static void FadeScreenBlack(void); -static void CreatePhase1Task(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4); -static void sub_814A014(u16 *a0, s16 a1, s16 a2, s16 a3); -static void sub_8149F98(s16 *array, s16 sinAdd, s16 index, s16 indexIncrementer, s16 amplitude, s16 arrSize); -static void GetBg0TilemapDst(u16 **tileset); -static void sub_814A1AC(s16 *a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); -static bool8 sub_814A228(s16 *a0, bool8 a1, bool8 a2); -static void SetTrainerPicSlideTable(s16 spriteId, s16 arrId); -static void IncrementTrainerPicState(s16 spriteId); -static s16 IsTrainerPicSlideDone(s16 spriteId); -static bool8 Phase1_TransitionAll_Func1(struct Task *task); -static bool8 Phase1_TransitionAll_Func2(struct Task *task); -static bool8 IsPhase1Done(void); -static bool16 sub_8149048(const s16 * const *arg0, struct StructRectangularSpiral *arg1); -static void sub_814713C(struct Sprite *sprite); -static void SpriteCb_TrainerPic(struct Sprite *sprite); -static void sub_8149864(struct Sprite *sprite); -static bool8 TrainerPicCb_Nothing(struct Sprite *sprite); -static bool8 TrainerPicCb_SetSlideOffsets(struct Sprite *sprite); -static bool8 TrainerPicCb_Slide1(struct Sprite *sprite); -static bool8 TrainerPicCb_Slide2(struct Sprite *sprite); -static bool8 TrainerPicCb_Slide3(struct Sprite *sprite); +static bool8 Transition_StartIntro(struct Task *); +static bool8 Transition_WaitForIntro(struct Task *); +static bool8 Transition_StartMain(struct Task *); +static bool8 Transition_WaitForMain(struct Task *); -// iwram bss vars -static s16 sUnusedRectangularSpiralVar; +static void LaunchBattleTransitionTask(u8); +static void Task_BattleTransition(u8); +static void Task_Intro(u8); +static void Task_Blur(u8); +static void Task_Swirl(u8); +static void Task_Shuffle(u8); +static void Task_BigPokeball(u8); +static void Task_PokeballsTrail(u8); +static void Task_ClockwiseWipe(u8); +static void Task_Ripple(u8); +static void Task_Wave(u8); +static void Task_Slice(u8); +static void Task_WhiteBarsFade(u8); +static void Task_GridSquares(u8); +static void Task_AngledWipes(u8); +static void Task_Sidney(u8); +static void Task_Phoebe(u8); +static void Task_Glacia(u8); +static void Task_Drake(u8); +static void Task_Champion(u8); +static void Task_Aqua(u8); +static void Task_Magma(u8); +static void Task_Regice(u8); +static void Task_Registeel(u8); +static void Task_Regirock(u8); +static void Task_Kyogre(u8); +static void Task_Groudon(u8); +static void Task_Rayquaza(u8); +static void Task_ShredSplit(u8); +static void Task_Blackhole(u8); +static void Task_BlackholePulsate(u8); +static void Task_RectangularSpiral(u8); +static void Task_FrontierLogoWiggle(u8); +static void Task_FrontierLogoWave(u8); +static void Task_FrontierSquares(u8); +static void Task_FrontierSquaresScroll(u8); +static void Task_FrontierSquaresSpiral(u8); +static void VBlankCB_BattleTransition(void); +static void VBlankCB_Swirl(void); +static void HBlankCB_Swirl(void); +static void VBlankCB_Shuffle(void); +static void HBlankCB_Shuffle(void); +static void VBlankCB_PatternWeave(void); +static void VBlankCB_CircularMask(void); +static void VBlankCB_ClockwiseWipe(void); +static void VBlankCB_Ripple(void); +static void HBlankCB_Ripple(void); +static void VBlankCB_FrontierLogoWave(void); +static void HBlankCB_FrontierLogoWave(void); +static void VBlankCB_Wave(void); +static void VBlankCB_Slice(void); +static void HBlankCB_Slice(void); +static void VBlankCB_WhiteBarsFade(void); +static void VBlankCB_WhiteBarsFade_Blend(void); +static void HBlankCB_WhiteBarsFade(void); +static void VBlankCB_AngledWipes(void); +static void VBlankCB_Rayquaza(void); +static bool8 Blur_Init(struct Task *); +static bool8 Blur_Main(struct Task *); +static bool8 Blur_End(struct Task *); +static bool8 Swirl_Init(struct Task *); +static bool8 Swirl_End(struct Task *); +static bool8 Shuffle_Init(struct Task *); +static bool8 Shuffle_End(struct Task *); +static bool8 Aqua_Init(struct Task *); +static bool8 Aqua_SetGfx(struct Task *); +static bool8 Magma_Init(struct Task *); +static bool8 Magma_SetGfx(struct Task *); +static bool8 FramesCountdown(struct Task *); +static bool8 Regi_Init(struct Task *); +static bool8 Regice_SetGfx(struct Task *); +static bool8 Registeel_SetGfx(struct Task *); +static bool8 Regirock_SetGfx(struct Task *); +static bool8 WeatherTrio_BgFadeBlack(struct Task *); +static bool8 WeatherTrio_WaitFade(struct Task *); +static bool8 Kyogre_Init(struct Task *); +static bool8 Kyogre_PaletteFlash(struct Task *); +static bool8 Kyogre_PaletteBrighten(struct Task *); +static bool8 Groudon_Init(struct Task *); +static bool8 Groudon_PaletteFlash(struct Task *); +static bool8 Groudon_PaletteBrighten(struct Task *); +static bool8 WeatherDuo_FadeOut(struct Task *); +static bool8 WeatherDuo_End(struct Task *); +static bool8 BigPokeball_Init(struct Task *); +static bool8 BigPokeball_SetGfx(struct Task *); +static bool8 PatternWeave_Blend1(struct Task *); +static bool8 PatternWeave_Blend2(struct Task *); +static bool8 PatternWeave_FinishAppear(struct Task *); +static bool8 PatternWeave_CircularMask(struct Task *); +static bool8 PokeballsTrail_Init(struct Task *); +static bool8 PokeballsTrail_Main(struct Task *); +static bool8 PokeballsTrail_End(struct Task *); +static bool8 ClockwiseWipe_Init(struct Task *); +static bool8 ClockwiseWipe_TopRight(struct Task *); +static bool8 ClockwiseWipe_Right(struct Task *); +static bool8 ClockwiseWipe_Bottom(struct Task *); +static bool8 ClockwiseWipe_Left(struct Task *); +static bool8 ClockwiseWipe_TopLeft(struct Task *); +static bool8 ClockwiseWipe_End(struct Task *); +static bool8 Ripple_Init(struct Task *); +static bool8 Ripple_Main(struct Task *); +static bool8 Wave_Init(struct Task *); +static bool8 Wave_Main(struct Task *); +static bool8 Wave_End(struct Task *); +static bool8 Slice_Init(struct Task *); +static bool8 Slice_Main(struct Task *); +static bool8 Slice_End(struct Task *); +static bool8 WhiteBarsFade_Init(struct Task *); +static bool8 WhiteBarsFade_StartBars(struct Task *); +static bool8 WhiteBarsFade_WaitBars(struct Task *); +static bool8 WhiteBarsFade_BlendToBlack(struct Task *); +static bool8 WhiteBarsFade_End(struct Task *); +static bool8 GridSquares_Init(struct Task *); +static bool8 GridSquares_Main(struct Task *); +static bool8 GridSquares_End(struct Task *); +static bool8 AngledWipes_Init(struct Task *); +static bool8 AngledWipes_SetWipeData(struct Task *); +static bool8 AngledWipes_DoWipe(struct Task *); +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 *); +static bool8 Blackhole_GrowEnd(struct Task *); +static bool8 BlackholePulsate_Main(struct Task *); +static bool8 RectangularSpiral_Init(struct Task *); +static bool8 RectangularSpiral_Main(struct Task *); +static bool8 RectangularSpiral_End(struct Task *); +static bool8 FrontierLogoWiggle_Init(struct Task *); +static bool8 FrontierLogoWiggle_SetGfx(struct Task *); +static bool8 FrontierLogoWave_Init(struct Task *); +static bool8 FrontierLogoWave_SetGfx(struct Task *); +static bool8 FrontierLogoWave_InitScanline(struct Task *); +static bool8 FrontierLogoWave_Main(struct Task *); +static bool8 Rayquaza_Init(struct Task *); +static bool8 Rayquaza_SetGfx(struct Task *); +static bool8 Rayquaza_PaletteFlash(struct Task *); +static bool8 Rayquaza_FadeToBlack(struct Task *); +static bool8 Rayquaza_WaitFade(struct Task *); +static bool8 Rayquaza_SetBlack(struct Task *); +static bool8 Rayquaza_TriRing(struct Task *); +static bool8 FrontierSquares_Init(struct Task *); +static bool8 FrontierSquares_Draw(struct Task *); +static bool8 FrontierSquares_Shrink(struct Task *); +static bool8 FrontierSquares_End(struct Task *); +static bool8 FrontierSquaresSpiral_Init(struct Task *); +static bool8 FrontierSquaresSpiral_Outward(struct Task *); +static bool8 FrontierSquaresSpiral_SetBlack(struct Task *); +static bool8 FrontierSquaresSpiral_Inward(struct Task *); +static bool8 FrontierSquaresScroll_Init(struct Task *); +static bool8 FrontierSquaresScroll_Draw(struct Task *); +static bool8 FrontierSquaresScroll_SetBlack(struct Task *); +static bool8 FrontierSquaresScroll_Erase(struct Task *); +static bool8 FrontierSquaresScroll_End(struct Task *); +static bool8 Mugshot_Init(struct Task *); +static bool8 Mugshot_SetGfx(struct Task *); +static bool8 Mugshot_ShowBanner(struct Task *); +static bool8 Mugshot_StartOpponentSlide(struct Task *); +static bool8 Mugshot_WaitStartPlayerSlide(struct Task *); +static bool8 Mugshot_WaitPlayerSlide(struct Task *); +static bool8 Mugshot_GradualWhiteFade(struct Task *); +static bool8 Mugshot_InitFadeWhiteToBlack(struct Task *); +static bool8 Mugshot_FadeToBlack(struct Task *); +static bool8 Mugshot_End(struct Task *); +static void DoMugshotTransition(u8); +static void Mugshots_CreateTrainerPics(struct Task *); +static void VBlankCB_Mugshots(void); +static void VBlankCB_MugshotsFadeOut(void); +static void HBlankCB_Mugshots(void); +static void InitTransitionData(void); +static void FadeScreenBlack(void); +static void CreateIntroTask(s16, s16, s16, s16, s16); +static void SetCircularMask(u16 *, s16, s16, s16); +static void SetSinWave(s16 *, s16, s16, s16, s16, s16); +static void GetBg0TilemapDst(u16 **); +static void InitBlackWipe(s16 *, s16, s16, s16, s16, s16, s16); +static bool8 UpdateBlackWipe(s16 *, bool8, bool8); +static void SetTrainerPicSlideDirection(s16, s16); +static void IncrementTrainerPicState(s16); +static s16 IsTrainerPicSlideDone(s16); +static bool8 TransitionIntro_FadeToGray(struct Task *); +static bool8 TransitionIntro_FadeFromGray(struct Task *); +static bool8 IsIntroTaskDone(void); +static bool16 UpdateRectangularSpiralLine(const s16 * const *, struct RectangularSpiralLine *); +static void SpriteCB_FldEffPokeballTrail(struct Sprite *); +static void SpriteCB_MugshotTrainerPic(struct Sprite *); +static void SpriteCB_WhiteBarFade(struct Sprite *); +static bool8 MugshotTrainerPic_Pause(struct Sprite *); +static bool8 MugshotTrainerPic_Init(struct Sprite *); +static bool8 MugshotTrainerPic_Slide(struct Sprite *); +static bool8 MugshotTrainerPic_SlideSlow(struct Sprite *); +static bool8 MugshotTrainerPic_SlideOffscreen(struct Sprite *); + +static s16 sDebug_RectangularSpiralData; static u8 sTestingTransitionId; static u8 sTestingTransitionState; -static struct StructRectangularSpiral sRectangularSpiralTransition[4]; +static struct RectangularSpiralLine sRectangularSpiralLines[4]; -// ewram vars -EWRAM_DATA static struct TransitionData *sTransitionStructPtr = NULL; +EWRAM_DATA static struct TransitionData *sTransitionData = NULL; -// const rom data static const u32 sBigPokeball_Tileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball.4bpp"); static const u32 sPokeballTrail_Tileset[] = INCBIN_U32("graphics/battle_transitions/pokeball_trail.4bpp"); static const u8 sPokeball_Gfx[] = INCBIN_U8("graphics/battle_transitions/pokeball.4bpp"); @@ -290,7 +314,7 @@ static const u16 sRegirock_Palette[] = INCBIN_U16("graphics/battle_transitions/r static const u32 sRegice_Tilemap[] = INCBIN_U32("graphics/battle_transitions/regice.bin"); static const u32 sRegisteel_Tilemap[] = INCBIN_U32("graphics/battle_transitions/registeel.bin"); static const u32 sRegirock_Tilemap[] = INCBIN_U32("graphics/battle_transitions/regirock.bin"); -static const u16 gUnknown_085BDB14[] = INCBIN_U16("graphics/battle_transitions/85BDB14.gbapal"); +static const u16 sUnused_Palette[] = INCBIN_U16("graphics/battle_transitions/unused.gbapal"); static const u32 sKyogre_Tileset[] = INCBIN_U32("graphics/battle_transitions/kyogre.4bpp.lz"); static const u32 sKyogre_Tilemap[] = INCBIN_U32("graphics/battle_transitions/kyogre.bin.lz"); static const u32 sGroudon_Tileset[] = INCBIN_U32("graphics/battle_transitions/groudon.4bpp.lz"); @@ -312,213 +336,217 @@ static const u32 sFrontierSquares_Shrink1_Tileset[] = INCBIN_U32("graphics/battl static const u32 sFrontierSquares_Shrink2_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_4.4bpp.lz"); static const u32 sFrontierSquares_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_squares.bin"); -static const TaskFunc sPhase1_Tasks[B_TRANSITION_COUNT] = +// All battle transitions use the same intro +static const TaskFunc sTasks_Intro[B_TRANSITION_COUNT] = { - [0 ... B_TRANSITION_COUNT - 1] = &Phase1Task_TransitionAll + [0 ... B_TRANSITION_COUNT - 1] = &Task_Intro }; -static const TaskFunc sPhase2_Tasks[B_TRANSITION_COUNT] = +// After the intro each transition has a unique main task. +// This task will call the functions that do the transition effects. +static const TaskFunc sTasks_Main[B_TRANSITION_COUNT] = { - [B_TRANSITION_BLUR] = Phase2Task_Blur, - [B_TRANSITION_SWIRL] = Phase2Task_Swirl, - [B_TRANSITION_SHUFFLE] = Phase2Task_Shuffle, - [B_TRANSITION_BIG_POKEBALL] = Phase2Task_BigPokeball, - [B_TRANSITION_POKEBALLS_TRAIL] = Phase2Task_PokeballsTrail, - [B_TRANSITION_CLOCKWISE_BLACKFADE] = Phase2Task_Clockwise_BlackFade, - [B_TRANSITION_RIPPLE] = Phase2Task_Ripple, - [B_TRANSITION_WAVE] = Phase2Task_Wave, - [B_TRANSITION_SLICE] = Phase2Task_Slice, - [B_TRANSITION_WHITEFADE] = Phase2Task_WhiteFade, - [B_TRANSITION_GRID_SQUARES] = Phase2Task_GridSquares, - [B_TRANSITION_SHARDS] = Phase2Task_Shards, - [B_TRANSITION_SIDNEY] = Phase2Task_Sidney, - [B_TRANSITION_PHOEBE] = Phase2Task_Phoebe, - [B_TRANSITION_GLACIA] = Phase2Task_Glacia, - [B_TRANSITION_DRAKE] = Phase2Task_Drake, - [B_TRANSITION_CHAMPION] = Phase2Task_Champion, - [B_TRANSITION_AQUA] = Phase2Task_Aqua, - [B_TRANSITION_MAGMA] = Phase2Task_Magma, - [B_TRANSITION_REGICE] = Phase2Task_Regice, - [B_TRANSITION_REGISTEEL] = Phase2Task_Registeel, - [B_TRANSITION_REGIROCK] = Phase2Task_Regirock, - [B_TRANSITION_KYOGRE] = Phase2Task_Kyogre, - [B_TRANSITION_GROUDON] = Phase2Task_Groudon, - [B_TRANSITION_RAYQUAZA] = Phase2Task_Rayquaza, - [B_TRANSITION_SHRED_SPLIT] = Phase2Task_ShredSplit, - [B_TRANSITION_BLACKHOLE1] = Phase2Task_Blackhole1, - [B_TRANSITION_BLACKHOLE2] = Phase2Task_Blackhole2, - [B_TRANSITION_RECTANGULAR_SPIRAL] = Phase2Task_RectangularSpiral, - [B_TRANSITION_FRONTIER_LOGO_WIGGLE] = Phase2Task_FrontierLogoWiggle, - [B_TRANSITION_FRONTIER_LOGO_WAVE] = Phase2Task_FrontierLogoWave, - [B_TRANSITION_FRONTIER_SQUARES] = Phase2Task_FrontierSquares, - [B_TRANSITION_FRONTIER_SQUARES_SCROLL] = Phase2Task_FrontierSquaresScroll, - [B_TRANSITION_FRONTIER_SQUARES_SPIRAL] = Phase2Task_FrontierSquaresSpiral, - [B_TRANSITION_FRONTIER_CIRCLES_MEET] = Phase2Task_FrontierCirclesMeet, - [B_TRANSITION_FRONTIER_CIRCLES_CROSS] = Phase2Task_FrontierCirclesCross, - [B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL] = Phase2Task_FrontierCirclesAsymmetricSpiral, - [B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL] = Phase2Task_FrontierCirclesSymmetricSpiral, - [B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ] = Phase2Task_FrontierCirclesMeetInSeq, - [B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ] = Phase2Task_FrontierCirclesCrossInSeq, - [B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ] = Phase2Task_FrontierCirclesAsymmetricSpiralInSeq, - [B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ] = Phase2Task_FrontierCirclesSymmetricSpiralInSeq, + [B_TRANSITION_BLUR] = Task_Blur, + [B_TRANSITION_SWIRL] = Task_Swirl, + [B_TRANSITION_SHUFFLE] = Task_Shuffle, + [B_TRANSITION_BIG_POKEBALL] = Task_BigPokeball, + [B_TRANSITION_POKEBALLS_TRAIL] = Task_PokeballsTrail, + [B_TRANSITION_CLOCKWISE_WIPE] = Task_ClockwiseWipe, + [B_TRANSITION_RIPPLE] = Task_Ripple, + [B_TRANSITION_WAVE] = Task_Wave, + [B_TRANSITION_SLICE] = Task_Slice, + [B_TRANSITION_WHITE_BARS_FADE] = Task_WhiteBarsFade, + [B_TRANSITION_GRID_SQUARES] = Task_GridSquares, + [B_TRANSITION_ANGLED_WIPES] = Task_AngledWipes, + [B_TRANSITION_SIDNEY] = Task_Sidney, + [B_TRANSITION_PHOEBE] = Task_Phoebe, + [B_TRANSITION_GLACIA] = Task_Glacia, + [B_TRANSITION_DRAKE] = Task_Drake, + [B_TRANSITION_CHAMPION] = Task_Champion, + [B_TRANSITION_AQUA] = Task_Aqua, + [B_TRANSITION_MAGMA] = Task_Magma, + [B_TRANSITION_REGICE] = Task_Regice, + [B_TRANSITION_REGISTEEL] = Task_Registeel, + [B_TRANSITION_REGIROCK] = Task_Regirock, + [B_TRANSITION_KYOGRE] = Task_Kyogre, + [B_TRANSITION_GROUDON] = Task_Groudon, + [B_TRANSITION_RAYQUAZA] = Task_Rayquaza, + [B_TRANSITION_SHRED_SPLIT] = Task_ShredSplit, + [B_TRANSITION_BLACKHOLE] = Task_Blackhole, + [B_TRANSITION_BLACKHOLE_PULSATE] = Task_BlackholePulsate, + [B_TRANSITION_RECTANGULAR_SPIRAL] = Task_RectangularSpiral, + [B_TRANSITION_FRONTIER_LOGO_WIGGLE] = Task_FrontierLogoWiggle, + [B_TRANSITION_FRONTIER_LOGO_WAVE] = Task_FrontierLogoWave, + [B_TRANSITION_FRONTIER_SQUARES] = Task_FrontierSquares, + [B_TRANSITION_FRONTIER_SQUARES_SCROLL] = Task_FrontierSquaresScroll, + [B_TRANSITION_FRONTIER_SQUARES_SPIRAL] = Task_FrontierSquaresSpiral, + [B_TRANSITION_FRONTIER_CIRCLES_MEET] = Task_FrontierCirclesMeet, + [B_TRANSITION_FRONTIER_CIRCLES_CROSS] = Task_FrontierCirclesCross, + [B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL] = Task_FrontierCirclesAsymmetricSpiral, + [B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL] = Task_FrontierCirclesSymmetricSpiral, + [B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ] = Task_FrontierCirclesMeetInSeq, + [B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ] = Task_FrontierCirclesCrossInSeq, + [B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ] = Task_FrontierCirclesAsymmetricSpiralInSeq, + [B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ] = Task_FrontierCirclesSymmetricSpiralInSeq, }; -static const TransitionStateFunc sMainTransitionPhases[] = +static const TransitionStateFunc sTaskHandlers[] = { - &Transition_Phase1, - &Transition_WaitForPhase1, - &Transition_Phase2, - &Transition_WaitForPhase2 + &Transition_StartIntro, + &Transition_WaitForIntro, + &Transition_StartMain, + &Transition_WaitForMain }; -static const TransitionStateFunc sPhase2_Blur_Funcs[] = +static const TransitionStateFunc sBlur_Funcs[] = { - Phase2_Blur_Func1, - Phase2_Blur_Func2, - Phase2_Blur_Func3 + Blur_Init, + Blur_Main, + Blur_End }; -static const TransitionStateFunc sPhase2_Swirl_Funcs[] = +static const TransitionStateFunc sSwirl_Funcs[] = { - Phase2_Swirl_Func1, - Phase2_Swirl_Func2, + Swirl_Init, + Swirl_End, }; -static const TransitionStateFunc sPhase2_Shuffle_Funcs[] = +static const TransitionStateFunc sShuffle_Funcs[] = { - Phase2_Shuffle_Func1, - Phase2_Shuffle_Func2, + Shuffle_Init, + Shuffle_End, }; -static const TransitionStateFunc sPhase2_Aqua_Funcs[] = +static const TransitionStateFunc sAqua_Funcs[] = { - Phase2_Aqua_Func1, - Phase2_Aqua_Func2, - Phase2_BigPokeball_Func3, - Phase2_BigPokeball_Func4, - Phase2_BigPokeball_Func5, - Phase2_FramesCountdown, - Phase2_BigPokeball_Func6 + Aqua_Init, + Aqua_SetGfx, + PatternWeave_Blend1, + PatternWeave_Blend2, + PatternWeave_FinishAppear, + FramesCountdown, + PatternWeave_CircularMask }; -static const TransitionStateFunc sPhase2_Magma_Funcs[] = +static const TransitionStateFunc sMagma_Funcs[] = { - Phase2_Magma_Func1, - Phase2_Magma_Func2, - Phase2_BigPokeball_Func3, - Phase2_BigPokeball_Func4, - Phase2_BigPokeball_Func5, - Phase2_FramesCountdown, - Phase2_BigPokeball_Func6 + Magma_Init, + Magma_SetGfx, + PatternWeave_Blend1, + PatternWeave_Blend2, + PatternWeave_FinishAppear, + FramesCountdown, + PatternWeave_CircularMask }; -static const TransitionStateFunc sPhase2_BigPokeball_Funcs[] = +static const TransitionStateFunc sBigPokeball_Funcs[] = { - Phase2_BigPokeball_Func1, - Phase2_BigPokeball_Func2, - Phase2_BigPokeball_Func3, - Phase2_BigPokeball_Func4, - Phase2_BigPokeball_Func5, - Phase2_BigPokeball_Func6 + BigPokeball_Init, + BigPokeball_SetGfx, + PatternWeave_Blend1, + PatternWeave_Blend2, + PatternWeave_FinishAppear, + PatternWeave_CircularMask }; -static const TransitionStateFunc sPhase2_Regice_Funcs[] = +static const TransitionStateFunc sRegice_Funcs[] = { - Phase2_Regi_Func1, - Phase2_Regice_Func2, - Phase2_BigPokeball_Func3, - Phase2_BigPokeball_Func4, - Phase2_BigPokeball_Func5, - Phase2_BigPokeball_Func6 + Regi_Init, + Regice_SetGfx, + PatternWeave_Blend1, + PatternWeave_Blend2, + PatternWeave_FinishAppear, + PatternWeave_CircularMask }; -static const TransitionStateFunc sPhase2_Registeel_Funcs[] = +static const TransitionStateFunc sRegisteel_Funcs[] = { - Phase2_Regi_Func1, - Phase2_Registeel_Func2, - Phase2_BigPokeball_Func3, - Phase2_BigPokeball_Func4, - Phase2_BigPokeball_Func5, - Phase2_BigPokeball_Func6 + Regi_Init, + Registeel_SetGfx, + PatternWeave_Blend1, + PatternWeave_Blend2, + PatternWeave_FinishAppear, + PatternWeave_CircularMask }; -static const TransitionStateFunc sPhase2_Regirock_Funcs[] = +static const TransitionStateFunc sRegirock_Funcs[] = { - Phase2_Regi_Func1, - Phase2_Regirock_Func2, - Phase2_BigPokeball_Func3, - Phase2_BigPokeball_Func4, - Phase2_BigPokeball_Func5, - Phase2_BigPokeball_Func6 + Regi_Init, + Regirock_SetGfx, + PatternWeave_Blend1, + PatternWeave_Blend2, + PatternWeave_FinishAppear, + PatternWeave_CircularMask }; -static const TransitionStateFunc sPhase2_Kyogre_Funcs[] = +static const TransitionStateFunc sKyogre_Funcs[] = { - Phase2_WeatherTrio_Func1, - Phase2_WaitPaletteFade, - Phase2_Kyogre_Func3, - Phase2_Kyogre_Func4, - Phase2_Kyogre_Func5, - Phase2_FramesCountdown, - Phase2_WeatherDuo_Func6, - Phase2_WeatherDuo_Func7 + WeatherTrio_BgFadeBlack, + WeatherTrio_WaitFade, + Kyogre_Init, + Kyogre_PaletteFlash, + Kyogre_PaletteBrighten, + FramesCountdown, + WeatherDuo_FadeOut, + WeatherDuo_End }; -static const TransitionStateFunc sPhase2_PokeballsTrail_Funcs[] = +static const TransitionStateFunc sPokeballsTrail_Funcs[] = { - Phase2_PokeballsTrail_Func1, - Phase2_PokeballsTrail_Func2, - Phase2_PokeballsTrail_Func3 + PokeballsTrail_Init, + PokeballsTrail_Main, + PokeballsTrail_End }; -static const s16 sUnknown_085C8B88[2] = {-16, 256}; -static const s16 sUnknown_085C8B8C[5] = {0, 32, 64, 18, 48}; -static const s16 sUnknown_085C8B96[2] = {8, -8}; +#define NUM_POKEBALL_TRAILS 5 +static const s16 sPokeballsTrail_StartXCoords[2] = { -16, DISPLAY_WIDTH + 16 }; +static const s16 sPokeballsTrail_Delays[NUM_POKEBALL_TRAILS] = {0, 32, 64, 18, 48}; +static const s16 sPokeballsTrail_Speeds[2] = {8, -8}; -static const TransitionStateFunc sPhase2_Clockwise_BlackFade_Funcs[] = +static const TransitionStateFunc sClockwiseWipe_Funcs[] = { - Phase2_Clockwise_BlackFade_Func1, - Phase2_Clockwise_BlackFade_Func2, - Phase2_Clockwise_BlackFade_Func3, - Phase2_Clockwise_BlackFade_Func4, - Phase2_Clockwise_BlackFade_Func5, - Phase2_Clockwise_BlackFade_Func6, - Phase2_Clockwise_BlackFade_Func7 + ClockwiseWipe_Init, + ClockwiseWipe_TopRight, + ClockwiseWipe_Right, + ClockwiseWipe_Bottom, + ClockwiseWipe_Left, + ClockwiseWipe_TopLeft, + ClockwiseWipe_End }; -static const TransitionStateFunc sPhase2_Ripple_Funcs[] = +static const TransitionStateFunc sRipple_Funcs[] = { - Phase2_Ripple_Func1, - Phase2_Ripple_Func2 + Ripple_Init, + Ripple_Main }; -static const TransitionStateFunc sPhase2_Wave_Funcs[] = +static const TransitionStateFunc sWave_Funcs[] = { - Phase2_Wave_Func1, - Phase2_Wave_Func2, - Phase2_Wave_Func3 + Wave_Init, + Wave_Main, + Wave_End }; -static const TransitionStateFunc sPhase2_Mugshot_Funcs[] = +static const TransitionStateFunc sMugshot_Funcs[] = { - Phase2_Mugshot_Func1, - Phase2_Mugshot_Func2, - Phase2_Mugshot_Func3, - Phase2_Mugshot_Func4, - Phase2_Mugshot_Func5, - Phase2_Mugshot_Func6, - Phase2_Mugshot_Func7, - Phase2_Mugshot_Func8, - Phase2_Mugshot_Func9, - Phase2_Mugshot_Func10 + Mugshot_Init, + Mugshot_SetGfx, + Mugshot_ShowBanner, + Mugshot_StartOpponentSlide, + Mugshot_WaitStartPlayerSlide, + Mugshot_WaitPlayerSlide, + Mugshot_GradualWhiteFade, + Mugshot_InitFadeWhiteToBlack, + Mugshot_FadeToBlack, + Mugshot_End }; static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] = { - [MUGSHOT_SIDNEY] = TRAINER_PIC_ELITE_FOUR_SIDNEY, - [MUGSHOT_PHOEBE] = TRAINER_PIC_ELITE_FOUR_PHOEBE, - [MUGSHOT_GLACIA] = TRAINER_PIC_ELITE_FOUR_GLACIA, - [MUGSHOT_DRAKE] = TRAINER_PIC_ELITE_FOUR_DRAKE, + [MUGSHOT_SIDNEY] = TRAINER_PIC_ELITE_FOUR_SIDNEY, + [MUGSHOT_PHOEBE] = TRAINER_PIC_ELITE_FOUR_PHOEBE, + [MUGSHOT_GLACIA] = TRAINER_PIC_ELITE_FOUR_GLACIA, + [MUGSHOT_DRAKE] = TRAINER_PIC_ELITE_FOUR_DRAKE, [MUGSHOT_CHAMPION] = TRAINER_PIC_CHAMPION_WALLACE, }; static const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] = @@ -531,185 +559,222 @@ static const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] = }; static const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] = { - [MUGSHOT_SIDNEY] = {0, 0}, - [MUGSHOT_PHOEBE] = {0, 0}, - [MUGSHOT_GLACIA] = {-4, 4}, - [MUGSHOT_DRAKE] = {0, 5}, - [MUGSHOT_CHAMPION] = {-8, 7}, + [MUGSHOT_SIDNEY] = { 0, 0}, + [MUGSHOT_PHOEBE] = { 0, 0}, + [MUGSHOT_GLACIA] = {-4, 4}, + [MUGSHOT_DRAKE] = { 0, 5}, + [MUGSHOT_CHAMPION] = {-8, 7}, }; -static const TransitionSpriteCallback sTrainerPicSpriteCbs[] = +static const TransitionSpriteCallback sMugshotTrainerPicFuncs[] = { - TrainerPicCb_Nothing, - TrainerPicCb_SetSlideOffsets, - TrainerPicCb_Slide1, - TrainerPicCb_Slide2, - TrainerPicCb_Nothing, - TrainerPicCb_Slide3, - TrainerPicCb_Nothing + MugshotTrainerPic_Pause, + MugshotTrainerPic_Init, + MugshotTrainerPic_Slide, + MugshotTrainerPic_SlideSlow, + MugshotTrainerPic_Pause, + MugshotTrainerPic_SlideOffscreen, + MugshotTrainerPic_Pause }; -static const s16 sTrainerPicSlideOffsets1[2] = {12, -12}; -static const s16 sTrainerPicSlideOffsets2[2] = {-1, 1}; +// One element per slide direction. +// Sign of acceleration is opposite speed, so slide decelerates. +static const s16 sTrainerPicSlideSpeeds[2] = {12, -12}; +static const s16 sTrainerPicSlideAccels[2] = {-1, 1}; -static const TransitionStateFunc sPhase2_Slice_Funcs[] = +static const TransitionStateFunc sSlice_Funcs[] = { - Phase2_Slice_Func1, - Phase2_Slice_Func2, - Phase2_Slice_Func3 + Slice_Init, + Slice_Main, + Slice_End }; -static const TransitionStateFunc sPhase2_ShredSplit_Funcs[] = +static const TransitionStateFunc sShredSplit_Funcs[] = { - Phase2_ShredSplit_Func1, - Phase2_ShredSplit_Func2, - Phase2_ShredSplit_Func3, - Phase2_ShredSplit_Func4 + ShredSplit_Init, + ShredSplit_Main, + ShredSplit_BrokenCheck, + ShredSplit_End }; -static const u8 gUnknown_085C8C64[] = {39, 119}; -static const s16 gUnknown_085C8C66[] = {1, -1}; +static const u8 sShredSplit_SectionYCoords[] = {39, DISPLAY_HEIGHT - 41}; +static const s16 sShredSplit_SectionMoveDirs[] = {1, -1}; -static const TransitionStateFunc sPhase2_Blackhole1_Funcs[] = +static const TransitionStateFunc sBlackhole_Funcs[] = { - Phase2_Blackhole_Func1, - Phase2_Blackhole1_Func2, - Phase2_Blackhole1_Func3 + Blackhole_Init, + Blackhole_Vibrate, + Blackhole_GrowEnd }; -static const TransitionStateFunc sPhase2_Blackhole2_Funcs[] = +static const TransitionStateFunc sBlackholePulsate_Funcs[] = { - Phase2_Blackhole_Func1, - Phase2_Blackhole2_Func2 + Blackhole_Init, + BlackholePulsate_Main }; -static const s16 gUnknown_085C8C80[] = {-6, 4}; +// Blackhole rapidly alternates adding these values to the radius, +// resulting in a vibrating shrink/grow effect. +static const s16 sBlackhole_Vibrations[] = {-6, 4}; -static const TransitionStateFunc sPhase2_RectangularSpiral_Funcs[] = +static const TransitionStateFunc sRectangularSpiral_Funcs[] = { - Phase2_RectangularSpiral_Func1, - Phase2_RectangularSpiral_Func2, - Phase2_RectangularSpiral_Func3 + RectangularSpiral_Init, + RectangularSpiral_Main, + RectangularSpiral_End }; -static const s16 gUnknown_085C8C90[] = {1, 27, 275, -1}; -static const s16 gUnknown_085C8C98[] = {2, 486, -1}; -static const s16 gUnknown_085C8C9E[] = {3, 262, -1}; -static const s16 gUnknown_085C8CA4[] = {4, 507, -2}; -static const s16 gUnknown_085C8CAA[] = {1, 213, -1}; -static const s16 gUnknown_085C8CB0[] = {2, 548, -2}; -static const s16 gUnknown_085C8CB6[] = {3, 196, -1}; -static const s16 gUnknown_085C8CBC[] = {4, 573, 309, -1}; -static const s16 gUnknown_085C8CC4[] = {1, 474, -1}; -static const s16 gUnknown_085C8CCA[] = {2, 295, 32, -1}; -static const s16 gUnknown_085C8CD2[] = {3, 58, -1}; -static const s16 gUnknown_085C8CD8[] = {4, 455, -1}; -static const s16 gUnknown_085C8CDE[] = {1, 540, -1}; -static const s16 gUnknown_085C8CE4[] = {2, 229, -1}; -static const s16 gUnknown_085C8CEA[] = {3, 244, 28, -1}; -static const s16 gUnknown_085C8CF2[] = {4, 517, -1}; +#define SPIRAL_END (-1) +#define SPIRAL_REBOUND (-2) -static const s16 *const gUnknown_085C8CF8[] = -{ - gUnknown_085C8C90, - gUnknown_085C8CA4, - gUnknown_085C8C98, - gUnknown_085C8C9E, - gUnknown_085C8CEA, - gUnknown_085C8CE4, - gUnknown_085C8CF2, - gUnknown_085C8CDE +// Note that the directions are inverted for the lines originating at the bottom. +// i.e. MOVE_RIGHT is a right move for the top lines and a left move for the inverted bottom lines. +enum { + MOVE_RIGHT = 1, + MOVE_LEFT, + MOVE_UP, + MOVE_DOWN, }; -static const s16 *const gUnknown_085C8D18[] = +// Offsets of the movement data for spiraling in either direction. +#define SPIRAL_INWARD_START 0 +#define SPIRAL_INWARD_END 3 +#define SPIRAL_OUTWARD_START 4 +#define SPIRAL_OUTWARD_END 7 + +static const s16 sRectangularSpiral_Major_InwardRight[] = {MOVE_RIGHT, 27, 275, SPIRAL_END}; +static const s16 sRectangularSpiral_Major_InwardLeft[] = {MOVE_LEFT, 486, SPIRAL_END}; +static const s16 sRectangularSpiral_Major_InwardUp[] = {MOVE_UP, 262, SPIRAL_END}; +static const s16 sRectangularSpiral_Major_InwardDown[] = {MOVE_DOWN, 507, SPIRAL_REBOUND}; + +static const s16 sRectangularSpiral_Minor_InwardRight[] = {MOVE_RIGHT, 213, SPIRAL_END}; +static const s16 sRectangularSpiral_Minor_InwardLeft[] = {MOVE_LEFT, 548, SPIRAL_REBOUND}; +static const s16 sRectangularSpiral_Minor_InwardUp[] = {MOVE_UP, 196, SPIRAL_END}; +static const s16 sRectangularSpiral_Minor_InwardDown[] = {MOVE_DOWN, 573, 309, SPIRAL_END}; + +static const s16 sRectangularSpiral_Minor_OutwardRight[] = {MOVE_RIGHT, 474, SPIRAL_END}; +static const s16 sRectangularSpiral_Minor_OutwardLeft[] = {MOVE_LEFT, 295, 32, SPIRAL_END}; +static const s16 sRectangularSpiral_Minor_OutwardUp[] = {MOVE_UP, 58, SPIRAL_END}; +static const s16 sRectangularSpiral_Minor_OutwardDown[] = {MOVE_DOWN, 455, SPIRAL_END}; + +static const s16 sRectangularSpiral_Major_OutwardRight[] = {MOVE_RIGHT, 540, SPIRAL_END}; +static const s16 sRectangularSpiral_Major_OutwardLeft[] = {MOVE_LEFT, 229, SPIRAL_END}; +static const s16 sRectangularSpiral_Major_OutwardUp[] = {MOVE_UP, 244, 28, SPIRAL_END}; +static const s16 sRectangularSpiral_Major_OutwardDown[] = {MOVE_DOWN, 517, SPIRAL_END}; + +// Move data for spiral lines starting in the top left / bottom right +static const s16 *const sRectangularSpiral_MoveDataTable_MajorDiagonal[] = { - gUnknown_085C8CBC, - gUnknown_085C8CB0, - gUnknown_085C8CB6, - gUnknown_085C8CAA, - gUnknown_085C8CCA, - gUnknown_085C8CD8, - gUnknown_085C8CC4, - gUnknown_085C8CD2 + [SPIRAL_INWARD_START] = + sRectangularSpiral_Major_InwardRight, + sRectangularSpiral_Major_InwardDown, + sRectangularSpiral_Major_InwardLeft, + sRectangularSpiral_Major_InwardUp, + + [SPIRAL_OUTWARD_START] = + sRectangularSpiral_Major_OutwardUp, + sRectangularSpiral_Major_OutwardLeft, + sRectangularSpiral_Major_OutwardDown, + sRectangularSpiral_Major_OutwardRight }; -static const s16 *const *const gUnknown_085C8D38[] = +// Move data for spiral lines starting in the top right / bottom left +static const s16 *const sRectangularSpiral_MoveDataTable_MinorDiagonal[] = { - gUnknown_085C8CF8, - gUnknown_085C8D18 + [SPIRAL_INWARD_START] = + sRectangularSpiral_Minor_InwardDown, + sRectangularSpiral_Minor_InwardLeft, + sRectangularSpiral_Minor_InwardUp, + sRectangularSpiral_Minor_InwardRight, + + [SPIRAL_OUTWARD_START] = + sRectangularSpiral_Minor_OutwardLeft, + sRectangularSpiral_Minor_OutwardDown, + sRectangularSpiral_Minor_OutwardRight, + sRectangularSpiral_Minor_OutwardUp }; -static const TransitionStateFunc sPhase2_Groudon_Funcs[] = +static const s16 *const *const sRectangularSpiral_MoveDataTables[] = { - Phase2_WeatherTrio_Func1, - Phase2_WaitPaletteFade, - Phase2_Groudon_Func3, - Phase2_Groudon_Func4, - Phase2_Groudon_Func5, - Phase2_FramesCountdown, - Phase2_WeatherDuo_Func6, - Phase2_WeatherDuo_Func7 + sRectangularSpiral_MoveDataTable_MajorDiagonal, + sRectangularSpiral_MoveDataTable_MinorDiagonal }; -static const TransitionStateFunc sPhase2_Rayquaza_Funcs[] = +static const TransitionStateFunc sGroudon_Funcs[] = { - Phase2_WeatherTrio_Func1, - Phase2_WaitPaletteFade, - Phase2_Rayquaza_Func3, - Phase2_Rayquaza_Func4, - Phase2_Rayquaza_Func5, - Phase2_Rayquaza_Func6, - Phase2_Rayquaza_Func7, - Phase2_Rayquaza_Func8, - Phase2_Rayquaza_Func9, - Phase2_Blackhole1_Func2, - Phase2_Blackhole1_Func3 + WeatherTrio_BgFadeBlack, + WeatherTrio_WaitFade, + Groudon_Init, + Groudon_PaletteFlash, + Groudon_PaletteBrighten, + FramesCountdown, + WeatherDuo_FadeOut, + WeatherDuo_End }; -static const TransitionStateFunc sPhase2_WhiteFade_Funcs[] = +static const TransitionStateFunc sRayquaza_Funcs[] = { - Phase2_WhiteFade_Func1, - Phase2_WhiteFade_Func2, - Phase2_WhiteFade_Func3, - Phase2_WhiteFade_Func4, - Phase2_WhiteFade_Func5 + WeatherTrio_BgFadeBlack, + WeatherTrio_WaitFade, + Rayquaza_Init, + Rayquaza_SetGfx, + Rayquaza_PaletteFlash, + Rayquaza_FadeToBlack, + Rayquaza_WaitFade, + Rayquaza_SetBlack, + Rayquaza_TriRing, + Blackhole_Vibrate, + Blackhole_GrowEnd }; -static const s16 sUnknown_085C8DA0[] = {0, 20, 15, 40, 10, 25, 35, 5}; - -static const TransitionStateFunc sPhase2_GridSquares_Funcs[] = +static const TransitionStateFunc sWhiteBarsFade_Funcs[] = { - Phase2_GridSquares_Func1, - Phase2_GridSquares_Func2, - Phase2_GridSquares_Func3 + WhiteBarsFade_Init, + WhiteBarsFade_StartBars, + WhiteBarsFade_WaitBars, + WhiteBarsFade_BlendToBlack, + WhiteBarsFade_End }; -static const TransitionStateFunc sPhase2_Shards_Funcs[] = +#define NUM_WHITE_BARS 8 +static const s16 sWhiteBarsFade_StartDelays[NUM_WHITE_BARS] = {0, 20, 15, 40, 10, 25, 35, 5}; + +static const TransitionStateFunc sGridSquares_Funcs[] = { - Phase2_Shards_Func1, - Phase2_Shards_Func2, - Phase2_Shards_Func3, - Phase2_Shards_Func4, - Phase2_Shards_Func5 + GridSquares_Init, + GridSquares_Main, + GridSquares_End }; -static const s16 sUnknown_085C8DD0[][5] = +static const TransitionStateFunc sAngledWipes_Funcs[] = { - {56, 0, 0, 160, 0}, - {104, 160, 240, 88, 1}, - {240, 72, 56, 0, 1}, - {0, 32, 144, 160, 0}, - {144, 160, 184, 0, 1}, - {56, 0, 168, 160, 0}, - {168, 160, 48, 0, 1}, + AngledWipes_Init, + AngledWipes_SetWipeData, + AngledWipes_DoWipe, + AngledWipes_TryEnd, + AngledWipes_StartNext }; -static const s16 sUnknown_085C8E16[] = {8, 4, 2, 1, 1, 1, 0}; +#define NUM_ANGLED_WIPES 7 -static const TransitionStateFunc sPhase1_TransitionAll_Funcs[] = +static const s16 sAngledWipes_MoveData[NUM_ANGLED_WIPES][5] = { - Phase1_TransitionAll_Func1, - Phase1_TransitionAll_Func2 +// startX startY endX endY yDirection + {56, 0, 0, DISPLAY_HEIGHT, 0}, + {104, DISPLAY_HEIGHT, DISPLAY_WIDTH, 88, 1}, + {DISPLAY_WIDTH, 72, 56, 0, 1}, + {0, 32, 144, DISPLAY_HEIGHT, 0}, + {144, DISPLAY_HEIGHT, 184, 0, 1}, + {56, 0, 168, DISPLAY_HEIGHT, 0}, + {168, DISPLAY_HEIGHT, 48, 0, 1}, +}; + +static const s16 sAngledWipes_EndDelays[NUM_ANGLED_WIPES] = {8, 4, 2, 1, 1, 1, 0}; + +static const TransitionStateFunc sTransitionIntroFuncs[] = +{ + TransitionIntro_FadeToGray, + TransitionIntro_FadeFromGray }; static const struct SpriteFrameImage sSpriteImage_Pokeball[] = @@ -748,13 +813,13 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_Pokeball[] = static const struct SpriteTemplate sSpriteTemplate_Pokeball = { - .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_POKEBALL, + .tileTag = TAG_NONE, + .paletteTag = FLDEFF_PAL_TAG_POKEBALL_TRAIL, .oam = &gObjectEventBaseOam_32x32, .anims = sSpriteAnimTable_Pokeball, .images = sSpriteImage_Pokeball, .affineAnims = sSpriteAffineAnimTable_Pokeball, - .callback = sub_814713C + .callback = SpriteCB_FldEffPokeballTrail }; static const struct OamData sOam_UnusedBrendanLass = @@ -762,7 +827,7 @@ static const struct OamData sOam_UnusedBrendanLass = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -797,29 +862,29 @@ static const union AnimCmd *const sSpriteAnimTable_UnusedBrendanLass[] = static const struct SpriteTemplate sSpriteTemplate_UnusedBrendan = { - .tileTag = 0xFFFF, - .paletteTag = 0x100A, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_UNUSED_MUGSHOT, .oam = &sOam_UnusedBrendanLass, .anims = sSpriteAnimTable_UnusedBrendanLass, .images = sImageTable_UnusedBrendan, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TrainerPic + .callback = SpriteCB_MugshotTrainerPic }; static const struct SpriteTemplate sSpriteTemplate_UnusedLass = { - .tileTag = 0xFFFF, - .paletteTag = 0x100A, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_UNUSED_MUGSHOT, .oam = &sOam_UnusedBrendanLass, .anims = sSpriteAnimTable_UnusedBrendanLass, .images = sImageTable_UnusedLass, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TrainerPic + .callback = SpriteCB_MugshotTrainerPic }; static const u16 sFieldEffectPal_Pokeball[] = INCBIN_U16("graphics/field_effects/palettes/pokeball.gbapal"); -const struct SpritePalette gSpritePalette_Pokeball = {sFieldEffectPal_Pokeball, FLDEFF_PAL_TAG_POKEBALL}; +const struct SpritePalette gSpritePalette_Pokeball = {sFieldEffectPal_Pokeball, FLDEFF_PAL_TAG_POKEBALL_TRAIL}; static const u16 sMugshotPal_Sidney[] = INCBIN_U16("graphics/battle_transitions/sidney_bg.gbapal"); static const u16 sMugshotPal_Phoebe[] = INCBIN_U16("graphics/battle_transitions/phoebe_bg.gbapal"); @@ -845,59 +910,90 @@ static const u16 *const sPlayerMugshotsPals[GENDER_COUNT] = }; static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal"); -static const struct SpritePalette sSpritePalette_UnusedTrainer = {sUnusedTrainerPalette, 0x100A}; +static const struct SpritePalette sSpritePalette_UnusedTrainer = {sUnusedTrainerPalette, PALTAG_UNUSED_MUGSHOT}; static const u16 sBigPokeball_Tilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_map.bin"); static const u16 sMugshotsTilemap[] = INCBIN_U16("graphics/battle_transitions/elite_four_bg_map.bin"); -static const TransitionStateFunc sPhase2_FrontierLogoWiggle_Funcs[] = +static const TransitionStateFunc sFrontierLogoWiggle_Funcs[] = { - Phase2_FrontierLogoWiggle_Func1, - Phase2_FrontierLogoWiggle_Func2, - Phase2_BigPokeball_Func3, - Phase2_BigPokeball_Func4, - Phase2_BigPokeball_Func5, - Phase2_BigPokeball_Func6 + FrontierLogoWiggle_Init, + FrontierLogoWiggle_SetGfx, + PatternWeave_Blend1, + PatternWeave_Blend2, + PatternWeave_FinishAppear, + PatternWeave_CircularMask }; -static const TransitionStateFunc sPhase2_FrontierLogoWave_Funcs[] = +static const TransitionStateFunc sFrontierLogoWave_Funcs[] = { - Phase2_FrontierLogoWave_Func1, - Phase2_FrontierLogoWave_Func2, - Phase2_FrontierLogoWave_Func3, - Phase2_FrontierLogoWave_Func4 + FrontierLogoWave_Init, + FrontierLogoWave_SetGfx, + FrontierLogoWave_InitScanline, + FrontierLogoWave_Main }; -static const TransitionStateFunc sPhase2_FrontierSquares_Funcs[] = +static const TransitionStateFunc sFrontierSquares_Funcs[] = { - Phase2_FrontierSquares_Func1, - Phase2_FrontierSquares_Func2, - Phase2_FrontierSquares_Func3, - Phase2_FrontierSquares_End + FrontierSquares_Init, + FrontierSquares_Draw, + FrontierSquares_Shrink, + FrontierSquares_End }; -static const TransitionStateFunc sPhase2_FrontierSquaresSpiral_Funcs[] = +static const TransitionStateFunc sFrontierSquaresSpiral_Funcs[] = { - Phase2_FrontierSquaresSpiral_Func1, - Phase2_FrontierSquaresSpiral_Func2, - Phase2_FrontierSquaresSpiral_Func3, - Phase2_FrontierSquaresSpiral_Func4, - Phase2_FrontierSquares_End + FrontierSquaresSpiral_Init, + FrontierSquaresSpiral_Outward, + FrontierSquaresSpiral_SetBlack, + FrontierSquaresSpiral_Inward, + FrontierSquares_End }; -static const TransitionStateFunc sPhase2_FrontierSquaresScroll_Funcs[] = +static const TransitionStateFunc sFrontierSquaresScroll_Funcs[] = { - Phase2_FrontierSquaresScroll_Func1, - Phase2_FrontierSquaresScroll_Func2, - Phase2_FrontierSquaresScroll_Func3, - Phase2_FrontierSquaresScroll_Func4, - Phase2_FrontierSquaresScroll_Func5 + FrontierSquaresScroll_Init, + FrontierSquaresScroll_Draw, + FrontierSquaresScroll_SetBlack, + FrontierSquaresScroll_Erase, + FrontierSquaresScroll_End }; -static const u8 gUnknown_085C9A30[] = {0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x1b, 0x14, 0x0d, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x07, 0x0e, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x13, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x10, 0x11, 0x12}; -static const u8 gUnknown_085C9A53[] = {0x00, 0x10, 0x29, 0x16, 0x2c, 0x02, 0x2b, 0x15, 0x2e, 0x1b, 0x09, 0x30, 0x26, 0x05, 0x39, 0x3b, 0x0c, 0x3f, 0x23, 0x1c, 0x0a, 0x35, 0x07, 0x31, 0x27, 0x17, 0x37, 0x01, 0x3e, 0x11, 0x3d, 0x1e, 0x06, 0x22, 0x0f, 0x33, 0x20, 0x3a, 0x0d, 0x2d, 0x25, 0x34, 0x0b, 0x18, 0x3c, 0x13, 0x38, 0x21, 0x1d, 0x32, 0x28, 0x36, 0x0e, 0x03, 0x2f, 0x14, 0x12, 0x19, 0x04, 0x24, 0x1a, 0x2a, 0x1f, 0x08, 0x00}; +#define SQUARE_SIZE 4 +#define MARGIN_SIZE 1 // Squares do not fit evenly across the width, so there is a margin on either side. +#define NUM_SQUARES_PER_ROW ((DISPLAY_WIDTH - (MARGIN_SIZE * 8 * 2)) / (SQUARE_SIZE * 8)) +#define NUM_SQUARES_PER_COL (DISPLAY_HEIGHT / (SQUARE_SIZE * 8)) +#define NUM_SQUARES (NUM_SQUARES_PER_ROW * NUM_SQUARES_PER_COL) + +// The order in which the squares should appear/disappear to create +// the spiral effect. Spiraling inward starts with the first element, +// and spiraling outward starts with the last. The positions are the +// squares numbered left-to-right top-to-bottom. +static const u8 sFrontierSquaresSpiral_Positions[NUM_SQUARES] = { + 28, 29, 30, 31, 32, 33, 34, + 27, 20, 13, 6, 5, 4, 3, + 2, 1, 0, 7, 14, 21, 22, + 23, 24, 25, 26, 19, 12, 11, + 10, 9, 8, 15, 16, 17, 18 +}; + +// In the scrolling version the squares appear/disappear in a "random" order +// dictated by the list below. +static const u8 sFrontierSquaresScroll_Positions[] = { + 0, 16, 41, 22, 44, 2, 43, 21, + 46, 27, 9, 48, 38, 5, 57, 59, + 12, 63, 35, 28, 10, 53, 7, 49, + 39, 23, 55, 1, 62, 17, 61, 30, + 6, 34, 15, 51, 32, 58, 13, 45, + 37, 52, 11, 24, 60, 19, 56, 33, + 29, 50, 40, 54, 14, 3, 47, 20, + 18, 25, 4, 36, 26, 42, 31, 8 +}; + +//--------------------------- +// Main transition functions +//--------------------------- -// code static void CB2_TestBattleTransition(void) { switch (sTestingTransitionState) @@ -921,7 +1017,8 @@ static void CB2_TestBattleTransition(void) UpdatePaletteFade(); } -void TestBattleTransition(u8 transitionId) +// Unused +static void TestBattleTransition(u8 transitionId) { sTestingTransitionId = transitionId; SetMainCallback2(CB2_TestBattleTransition); @@ -938,20 +1035,17 @@ void BattleTransition_Start(u8 transitionId) LaunchBattleTransitionTask(transitionId); } -// in all tasks data[0] is reserved for the state -#define tState data[0] - // main task that launches sub-tasks for phase1 and phase2 #define tTransitionId data[1] #define tTransitionDone data[15] bool8 IsBattleTransitionDone(void) { - u8 taskId = FindTaskIdByFunc(Task_BattleTransitionMain); + u8 taskId = FindTaskIdByFunc(Task_BattleTransition); if (gTasks[taskId].tTransitionDone) { DestroyTask(taskId); - FREE_AND_SET_NULL(sTransitionStructPtr); + FREE_AND_SET_NULL(sTransitionData); return TRUE; } else @@ -962,23 +1056,23 @@ bool8 IsBattleTransitionDone(void) static void LaunchBattleTransitionTask(u8 transitionId) { - u8 taskId = CreateTask(Task_BattleTransitionMain, 2); + u8 taskId = CreateTask(Task_BattleTransition, 2); gTasks[taskId].tTransitionId = transitionId; - sTransitionStructPtr = AllocZeroed(sizeof(*sTransitionStructPtr)); + sTransitionData = AllocZeroed(sizeof(*sTransitionData)); } -static void Task_BattleTransitionMain(u8 taskId) +static void Task_BattleTransition(u8 taskId) { - while (sMainTransitionPhases[gTasks[taskId].tState](&gTasks[taskId])); + while (sTaskHandlers[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Transition_Phase1(struct Task *task) +static bool8 Transition_StartIntro(struct Task *task) { SetWeatherScreenFadeOut(); - CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); - if (sPhase1_Tasks[task->tTransitionId] != NULL) + CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, sizeof(gPlttBufferUnfaded)); + if (sTasks_Intro[task->tTransitionId] != NULL) { - CreateTask(sPhase1_Tasks[task->tTransitionId], 4); + CreateTask(sTasks_Intro[task->tTransitionId], 4); task->tState++; return FALSE; } @@ -989,9 +1083,9 @@ static bool8 Transition_Phase1(struct Task *task) } } -static bool8 Transition_WaitForPhase1(struct Task *task) +static bool8 Transition_WaitForIntro(struct Task *task) { - if (FindTaskIdByFunc(sPhase1_Tasks[task->tTransitionId]) == TASK_NONE) + if (FindTaskIdByFunc(sTasks_Intro[task->tTransitionId]) == TASK_NONE) { task->tState++; return TRUE; @@ -1002,17 +1096,17 @@ static bool8 Transition_WaitForPhase1(struct Task *task) } } -static bool8 Transition_Phase2(struct Task *task) +static bool8 Transition_StartMain(struct Task *task) { - CreateTask(sPhase2_Tasks[task->tTransitionId], 0); + CreateTask(sTasks_Main[task->tTransitionId], 0); task->tState++; return FALSE; } -static bool8 Transition_WaitForPhase2(struct Task *task) +static bool8 Transition_WaitForMain(struct Task *task) { task->tTransitionDone = FALSE; - if (FindTaskIdByFunc(sPhase2_Tasks[task->tTransitionId]) == TASK_NONE) + if (FindTaskIdByFunc(sTasks_Main[task->tTransitionId]) == TASK_NONE) task->tTransitionDone = TRUE; return FALSE; } @@ -1020,38 +1114,32 @@ static bool8 Transition_WaitForPhase2(struct Task *task) #undef tTransitionId #undef tTransitionDone -static void Phase1Task_TransitionAll(u8 taskId) +static void Task_Intro(u8 taskId) { if (gTasks[taskId].tState == 0) { gTasks[taskId].tState++; - CreatePhase1Task(0, 0, 3, 2, 2); // creates a sub-task for this sub-task + CreateIntroTask(0, 0, 3, 2, 2); } - else if (IsPhase1Done()) + else if (IsIntroTaskDone()) { DestroyTask(taskId); } } -// sub-task for phase2 -#define tData1 data[1] -#define tData2 data[2] -#define tData3 data[3] -#define tData4 data[4] -#define tData5 data[5] -#define tData6 data[6] -#define tFuncState data[7] -#define tFrames data[8] -#define tOpponentSpriteId data[13] -#define tPlayerSpriteId data[14] -#define tMugshotId data[15] +//-------------------- +// B_TRANSITION_BLUR +//-------------------- -static void Phase2Task_Blur(u8 taskId) +#define tDelay data[1] +#define tCounter data[2] + +static void Task_Blur(u8 taskId) { - while (sPhase2_Blur_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sBlur_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Blur_Func1(struct Task *task) +static bool8 Blur_Init(struct Task *task) { SetGpuReg(REG_OFFSET_MOSAIC, 0); SetGpuRegBits(REG_OFFSET_BG1CNT, BGCNT_MOSAIC); @@ -1061,48 +1149,58 @@ static bool8 Phase2_Blur_Func1(struct Task *task) return TRUE; } -static bool8 Phase2_Blur_Func2(struct Task *task) +static bool8 Blur_Main(struct Task *task) { - if (task->tData1 != 0) + if (task->tDelay != 0) { - task->tData1--; + task->tDelay--; } else { - task->tData1 = 4; - if (++task->tData2 == 10) - BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 0x10, RGB_BLACK); - SetGpuReg(REG_OFFSET_MOSAIC, (task->tData2 & 15) * 17); - if (task->tData2 > 14) + task->tDelay = 4; + if (++task->tCounter == 10) + BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); + SetGpuReg(REG_OFFSET_MOSAIC, (task->tCounter & 15) * 17); + if (task->tCounter > 14) task->tState++; } return FALSE; } -static bool8 Phase2_Blur_Func3(struct Task *task) +static bool8 Blur_End(struct Task *task) { if (!gPaletteFade.active) { - u8 taskId = FindTaskIdByFunc(Phase2Task_Blur); + u8 taskId = FindTaskIdByFunc(Task_Blur); DestroyTask(taskId); } return FALSE; } -static void Phase2Task_Swirl(u8 taskId) +#undef tDelay +#undef tCounter + +//-------------------- +// B_TRANSITION_SWIRL +//-------------------- + +#define tSinIndex data[1] +#define tAmplitude data[2] + +static void Task_Swirl(u8 taskId) { - while (sPhase2_Swirl_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sSwirl_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Swirl_Func1(struct Task *task) +static bool8 Swirl_Init(struct Task *task) { - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - BeginNormalPaletteFade(PALETTES_ALL, 4, 0, 0x10, RGB_BLACK); - sub_8149F98(gScanlineEffectRegBuffers[1], sTransitionStructPtr->field_14, 0, 2, 0, 160); + BeginNormalPaletteFade(PALETTES_ALL, 4, 0, 16, RGB_BLACK); + SetSinWave(gScanlineEffectRegBuffers[1], sTransitionData->cameraX, 0, 2, 0, DISPLAY_HEIGHT); - SetVBlankCallback(VBlankCB_Phase2_Swirl); - SetHBlankCallback(HBlankCB_Phase2_Swirl); + SetVBlankCallback(VBlankCB_Swirl); + SetHBlankCallback(HBlankCB_Swirl); EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); @@ -1110,32 +1208,32 @@ static bool8 Phase2_Swirl_Func1(struct Task *task) return FALSE; } -static bool8 Phase2_Swirl_Func2(struct Task *task) +static bool8 Swirl_End(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; - task->tData1 += 4; - task->tData2 += 8; + sTransitionData->VBlank_DMA = FALSE; + task->tSinIndex += 4; + task->tAmplitude += 8; - sub_8149F98(gScanlineEffectRegBuffers[0], sTransitionStructPtr->field_14, task->tData1, 2, task->tData2, 160); + SetSinWave(gScanlineEffectRegBuffers[0], sTransitionData->cameraX, task->tSinIndex, 2, task->tAmplitude, DISPLAY_HEIGHT); if (!gPaletteFade.active) { - u8 taskId = FindTaskIdByFunc(Phase2Task_Swirl); + u8 taskId = FindTaskIdByFunc(Task_Swirl); DestroyTask(taskId); } - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static void VBlankCB_Phase2_Swirl(void) +static void VBlankCB_Swirl(void) { VBlankCB_BattleTransition(); - if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + if (sTransitionData->VBlank_DMA) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); } -static void HBlankCB_Phase2_Swirl(void) +static void HBlankCB_Swirl(void) { u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1HOFS = var; @@ -1143,21 +1241,31 @@ static void HBlankCB_Phase2_Swirl(void) REG_BG3HOFS = var; } -static void Phase2Task_Shuffle(u8 taskId) +#undef tSinIndex +#undef tAmplitude + +//---------------------- +// B_TRANSITION_SHUFFLE +//---------------------- + +#define tSinVal data[1] +#define tAmplitude data[2] + +static void Task_Shuffle(u8 taskId) { - while (sPhase2_Shuffle_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sShuffle_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Shuffle_Func1(struct Task *task) +static bool8 Shuffle_Init(struct Task *task) { - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - BeginNormalPaletteFade(PALETTES_ALL, 4, 0, 0x10, RGB_BLACK); - memset(gScanlineEffectRegBuffers[1], sTransitionStructPtr->field_16, 0x140); + BeginNormalPaletteFade(PALETTES_ALL, 4, 0, 16, RGB_BLACK); + memset(gScanlineEffectRegBuffers[1], sTransitionData->cameraY, DISPLAY_HEIGHT * 2); - SetVBlankCallback(VBlankCB_Phase2_Shuffle); - SetHBlankCallback(HBlankCB_Phase2_Shuffle); + SetVBlankCallback(VBlankCB_Shuffle); + SetHBlankCallback(HBlankCB_Shuffle); EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); @@ -1165,38 +1273,38 @@ static bool8 Phase2_Shuffle_Func1(struct Task *task) return FALSE; } -static bool8 Phase2_Shuffle_Func2(struct Task *task) +static bool8 Shuffle_End(struct Task *task) { u8 i; - u16 r3, r4; + u16 amplitude, sinVal; - sTransitionStructPtr->VBlank_DMA = FALSE; - r4 = task->tData1; - r3 = task->tData2 >> 8; - task->tData1 += 4224; - task->tData2 += 384; + sTransitionData->VBlank_DMA = FALSE; + sinVal = task->tSinVal; + amplitude = task->tAmplitude >> 8; + task->tSinVal += 4224; + task->tAmplitude += 384; - for (i = 0; i < 160; i++, r4 += 4224) + for (i = 0; i < DISPLAY_HEIGHT; i++, sinVal += 4224) { - u16 var = r4 / 256; - gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3); + u16 sinIndex = sinVal / 256; + gScanlineEffectRegBuffers[0][i] = sTransitionData->cameraY + Sin(sinIndex, amplitude); } if (!gPaletteFade.active) - DestroyTask(FindTaskIdByFunc(Phase2Task_Shuffle)); + DestroyTask(FindTaskIdByFunc(Task_Shuffle)); - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static void VBlankCB_Phase2_Shuffle(void) +static void VBlankCB_Shuffle(void) { VBlankCB_BattleTransition(); - if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + if (sTransitionData->VBlank_DMA) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); } -static void HBlankCB_Phase2_Shuffle(void) +static void HBlankCB_Shuffle(void) { u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1VOFS = var; @@ -1204,221 +1312,240 @@ static void HBlankCB_Phase2_Shuffle(void) REG_BG3VOFS = var; } -static void Phase2Task_BigPokeball(u8 taskId) +#undef tSinVal +#undef tAmplitude + +//------------------------------------------------------------------------ +// B_TRANSITION_BIG_POKEBALL, B_TRANSITION_AQUA, B_TRANSITION_MAGMA, +// B_TRANSITION_REGICE, B_TRANSITION_REGISTEEL, B_TRANSITION_REGIROCK +// and B_TRANSITION_KYOGRE. +// +// With the exception of B_TRANSITION_KYOGRE, all of the above transitions +// use the same weave effect (see the PatternWeave functions). +// Unclear why Kyogre's was grouped here and not with Groudon/Rayquaza's. +//------------------------------------------------------------------------ + +#define tBlendTarget1 data[1] +#define tBlendTarget2 data[2] +#define tBlendDelay data[3] + +// Data 1-3 change purpose for PatternWeave_CircularMask +#define tRadius data[1] +#define tRadiusDelta data[2] +#define tVBlankSet data[3] + +#define tSinIndex data[4] +#define tAmplitude data[5] +#define tEndDelay data[8] + +static void Task_BigPokeball(u8 taskId) { - while (sPhase2_BigPokeball_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sBigPokeball_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void Phase2Task_Aqua(u8 taskId) +static void Task_Aqua(u8 taskId) { - while (sPhase2_Aqua_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sAqua_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void Phase2Task_Magma(u8 taskId) +static void Task_Magma(u8 taskId) { - while (sPhase2_Magma_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sMagma_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void Phase2Task_Regice(u8 taskId) +static void Task_Regice(u8 taskId) { - while (sPhase2_Regice_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sRegice_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void Phase2Task_Registeel(u8 taskId) +static void Task_Registeel(u8 taskId) { - while (sPhase2_Registeel_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sRegisteel_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void Phase2Task_Regirock(u8 taskId) +static void Task_Regirock(u8 taskId) { - while (sPhase2_Regirock_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sRegirock_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void Phase2Task_Kyogre(u8 taskId) +static void Task_Kyogre(u8 taskId) { - while (sPhase2_Kyogre_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sKyogre_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void sub_814669C(struct Task *task) +static void InitPatternWeaveTransition(struct Task *task) { s32 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - task->tData1 = 16; - task->tData2 = 0; - task->tData4 = 0; - task->tData5 = 0x4000; - sTransitionStructPtr->WININ = WININ_WIN0_ALL; - sTransitionStructPtr->WINOUT = 0; - sTransitionStructPtr->WIN0H = DISPLAY_WIDTH; - sTransitionStructPtr->WIN0V = DISPLAY_HEIGHT; - sTransitionStructPtr->BLDCNT = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL; - sTransitionStructPtr->BLDALPHA = BLDALPHA_BLEND(task->tData2, task->tData1); + task->tBlendTarget1 = 16; + task->tBlendTarget2 = 0; + task->tSinIndex = 0; + task->tAmplitude = 0x4000; + sTransitionData->WININ = WININ_WIN0_ALL; + sTransitionData->WINOUT = 0; + sTransitionData->WIN0H = DISPLAY_WIDTH; + sTransitionData->WIN0V = DISPLAY_HEIGHT; + sTransitionData->BLDCNT = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL; + sTransitionData->BLDALPHA = BLDALPHA_BLEND(task->tBlendTarget2, task->tBlendTarget1); - for (i = 0; i < 160; i++) - { - gScanlineEffectRegBuffers[1][i] = 240; - } + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i] = DISPLAY_WIDTH; - SetVBlankCallback(VBlankCB0_Phase2_BigPokeball); + SetVBlankCallback(VBlankCB_PatternWeave); } -static bool8 Phase2_Aqua_Func1(struct Task *task) +static bool8 Aqua_Init(struct Task *task) { u16 *tilemap, *tileset; - task->tFrames = 60; - sub_814669C(task); + task->tEndDelay = 60; + InitPatternWeaveTransition(task); GetBg0TilesDst(&tilemap, &tileset); - CpuFill16(0, tilemap, 0x800); + CpuFill16(0, tilemap, BG_SCREEN_SIZE); LZ77UnCompVram(sTeamAqua_Tileset, tileset); - LoadPalette(sEvilTeam_Palette, 0xF0, 0x20); + LoadPalette(sEvilTeam_Palette, 0xF0, sizeof(sEvilTeam_Palette)); task->tState++; return FALSE; } -static bool8 Phase2_Magma_Func1(struct Task *task) +static bool8 Magma_Init(struct Task *task) { u16 *tilemap, *tileset; - task->tFrames = 60; - sub_814669C(task); + task->tEndDelay = 60; + InitPatternWeaveTransition(task); GetBg0TilesDst(&tilemap, &tileset); - CpuFill16(0, tilemap, 0x800); + CpuFill16(0, tilemap, BG_SCREEN_SIZE); LZ77UnCompVram(sTeamMagma_Tileset, tileset); - LoadPalette(sEvilTeam_Palette, 0xF0, 0x20); + LoadPalette(sEvilTeam_Palette, 0xF0, sizeof(sEvilTeam_Palette)); task->tState++; return FALSE; } -static bool8 Phase2_Regi_Func1(struct Task *task) +static bool8 Regi_Init(struct Task *task) { u16 *tilemap, *tileset; - task->tFrames = 60; - sub_814669C(task); + task->tEndDelay = 60; + InitPatternWeaveTransition(task); GetBg0TilesDst(&tilemap, &tileset); - CpuFill16(0, tilemap, 0x800); + CpuFill16(0, tilemap, BG_SCREEN_SIZE); CpuCopy16(sRegis_Tileset, tileset, 0x2000); task->tState++; return FALSE; } -static bool8 Phase2_BigPokeball_Func1(struct Task *task) +static bool8 BigPokeball_Init(struct Task *task) { u16 *tilemap, *tileset; - sub_814669C(task); + InitPatternWeaveTransition(task); GetBg0TilesDst(&tilemap, &tileset); - CpuFill16(0, tilemap, 0x800); - CpuCopy16(sBigPokeball_Tileset, tileset, 0x580); - LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20); + CpuFill16(0, tilemap, BG_SCREEN_SIZE); + CpuCopy16(sBigPokeball_Tileset, tileset, sizeof(sBigPokeball_Tileset)); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); task->tState++; return FALSE; } -#define SOME_VRAM_STORE(ptr, posY, posX, toStore) \ -{ \ - u32 index = (posY) * 32 + posX; \ - ptr[index] = toStore; \ -} - -static bool8 Phase2_BigPokeball_Func2(struct Task *task) +static bool8 BigPokeball_SetGfx(struct Task *task) { s16 i, j; u16 *tilemap, *tileset; - const u16 *BigPokeballMap; + const u16 *bigPokeballMap; GetBg0TilesDst(&tilemap, &tileset); - BigPokeballMap = sBigPokeball_Tilemap; + bigPokeballMap = sBigPokeball_Tilemap; for (i = 0; i < 20; i++) { - for (j = 0; j < 30; j++, BigPokeballMap++) - { - SOME_VRAM_STORE(tilemap, i, j, *BigPokeballMap | 0xF000); - } + for (j = 0; j < 30; j++, bigPokeballMap++) + SET_TILE(tilemap, i, j, *bigPokeballMap); } - sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); + + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return TRUE; } -static bool8 Phase2_Aqua_Func2(struct Task *task) +static bool8 Aqua_SetGfx(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); LZ77UnCompVram(sTeamAqua_Tilemap, tilemap); - sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return FALSE; } -static bool8 Phase2_Magma_Func2(struct Task *task) +static bool8 Magma_SetGfx(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); LZ77UnCompVram(sTeamMagma_Tilemap, tilemap); - sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return FALSE; } -static bool8 Phase2_Regice_Func2(struct Task *task) +static bool8 Regice_SetGfx(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LoadPalette(sRegice_Palette, 0xF0, 0x20); + LoadPalette(sRegice_Palette, 0xF0, sizeof(sRegice_Palette)); CpuCopy16(sRegice_Tilemap, tilemap, 0x500); - sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return FALSE; } -static bool8 Phase2_Registeel_Func2(struct Task *task) +static bool8 Registeel_SetGfx(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LoadPalette(sRegisteel_Palette, 0xF0, 0x20); + LoadPalette(sRegisteel_Palette, 0xF0, sizeof(sRegisteel_Palette)); CpuCopy16(sRegisteel_Tilemap, tilemap, 0x500); - sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return FALSE; } -static bool8 Phase2_Regirock_Func2(struct Task *task) +static bool8 Regirock_SetGfx(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LoadPalette(sRegirock_Palette, 0xF0, 0x20); + LoadPalette(sRegirock_Palette, 0xF0, sizeof(sRegirock_Palette)); CpuCopy16(sRegirock_Tilemap, tilemap, 0x500); - sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return FALSE; } -static bool8 Phase2_Kyogre_Func3(struct Task *task) +#define tTimer data[1] + +static bool8 Kyogre_Init(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - CpuFill16(0, tilemap, 0x800); + CpuFill16(0, tilemap, BG_SCREEN_SIZE); LZ77UnCompVram(sKyogre_Tileset, tileset); LZ77UnCompVram(sKyogre_Tilemap, tilemap); @@ -1426,48 +1553,48 @@ static bool8 Phase2_Kyogre_Func3(struct Task *task) return FALSE; } -static bool8 Phase2_Kyogre_Func4(struct Task *task) +static bool8 Kyogre_PaletteFlash(struct Task *task) { - if (task->tData1 % 3 == 0) + if (task->tTimer % 3 == 0) { - u16 var = task->tData1 % 30; - var /= 3; - LoadPalette(sKyogre1_Palette + (var * 16), 0xF0, 0x20); + u16 offset = task->tTimer % 30; + offset /= 3; + LoadPalette(&sKyogre1_Palette[offset * 16], 0xF0, 0x20); } - if (++task->tData1 > 58) + if (++task->tTimer > 58) { task->tState++; - task->tData1 = 0; + task->tTimer = 0; } return FALSE; } -static bool8 Phase2_Kyogre_Func5(struct Task *task) +static bool8 Kyogre_PaletteBrighten(struct Task *task) { - if (task->tData1 % 5 == 0) + if (task->tTimer % 5 == 0) { - s16 var = task->tData1 / 5; - LoadPalette(sKyogre2_Palette + (var * 16), 0xF0, 0x20); + s16 offset = task->tTimer / 5; + LoadPalette(&sKyogre2_Palette[offset * 16], 0xF0, 0x20); } - if (++task->tData1 > 68) + if (++task->tTimer > 68) { task->tState++; - task->tData1 = 0; - task->tFrames = 30; + task->tTimer = 0; + task->tEndDelay = 30; } return FALSE; } -static bool8 Phase2_WeatherDuo_Func6(struct Task *task) +static bool8 WeatherDuo_FadeOut(struct Task *task) { - BeginNormalPaletteFade(PALETTES_OBJECTS | 0x8000, 1, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_OBJECTS | (1 << 15), 1, 0, 16, RGB_BLACK); task->tState++; return FALSE; } -static bool8 Phase2_WeatherDuo_Func7(struct Task *task) +static bool8 WeatherDuo_End(struct Task *task) { if (!gPaletteFade.active) { @@ -1478,100 +1605,106 @@ static bool8 Phase2_WeatherDuo_Func7(struct Task *task) return FALSE; } -static bool8 Phase2_BigPokeball_Func3(struct Task *task) +#undef tTimer + +// The PatternWeave_ functions are used by several different transitions. +// They create an effect where a pattern/image (such as the Magma emblem) is +// formed by a shimmering weave effect. +static bool8 PatternWeave_Blend1(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; - if (task->tData3 == 0 || --task->tData3 == 0) + sTransitionData->VBlank_DMA = FALSE; + if (task->tBlendDelay == 0 || --task->tBlendDelay == 0) { - task->tData2++; - task->tData3 = 2; + task->tBlendTarget2++; + task->tBlendDelay = 2; } - sTransitionStructPtr->BLDALPHA = BLDALPHA_BLEND(task->tData2, task->tData1); - if (task->tData2 > 15) + sTransitionData->BLDALPHA = BLDALPHA_BLEND(task->tBlendTarget2, task->tBlendTarget1); + if (task->tBlendTarget2 > 15) task->tState++; - task->tData4 += 8; - task->tData5 -= 256; + task->tSinIndex += 8; + task->tAmplitude -= 256; - sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5 >> 8, 160); + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_BigPokeball_Func4(struct Task *task) +static bool8 PatternWeave_Blend2(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; - if (task->tData3 == 0 || --task->tData3 == 0) + sTransitionData->VBlank_DMA = FALSE; + if (task->tBlendDelay == 0 || --task->tBlendDelay == 0) { - task->tData1--; - task->tData3 = 2; + task->tBlendTarget1--; + task->tBlendDelay = 2; } - sTransitionStructPtr->BLDALPHA = BLDALPHA_BLEND(task->tData2, task->tData1); - if (task->tData1 == 0) + sTransitionData->BLDALPHA = BLDALPHA_BLEND(task->tBlendTarget2, task->tBlendTarget1); + if (task->tBlendTarget1 == 0) task->tState++; - task->tData4 += 8; - task->tData5 -= 256; + task->tSinIndex += 8; + task->tAmplitude -= 256; - sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5 >> 8, 160); + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_BigPokeball_Func5(struct Task *task) +static bool8 PatternWeave_FinishAppear(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; - task->tData4 += 8; - task->tData5 -= 256; + sTransitionData->VBlank_DMA = FALSE; + task->tSinIndex += 8; + task->tAmplitude -= 256; - sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5 >> 8, 160); + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); - if (task->tData5 <= 0) + if (task->tAmplitude <= 0) { task->tState++; - task->tData1 = 160; - task->tData2 = 256; - task->tData3 = 0; + task->tRadius = DISPLAY_HEIGHT; + task->tRadiusDelta = 1 << 8; + task->tVBlankSet = FALSE; } - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_FramesCountdown(struct Task *task) +static bool8 FramesCountdown(struct Task *task) { - if (--task->tFrames == 0) + if (--task->tEndDelay == 0) task->tState++; return FALSE; } -static bool8 Phase2_WeatherTrio_Func1(struct Task *task) +static bool8 WeatherTrio_BgFadeBlack(struct Task *task) { - BeginNormalPaletteFade(PALETTES_BG, 1, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_BG, 1, 0, 16, RGB_BLACK); task->tState++; return FALSE; } -static bool8 Phase2_WaitPaletteFade(struct Task *task) +static bool8 WeatherTrio_WaitFade(struct Task *task) { if (!gPaletteFade.active) task->tState++; return FALSE; } -static bool8 Phase2_BigPokeball_Func6(struct Task *task) +// Do a shrinking circular mask to go to a black screen after the pattern appears. +static bool8 PatternWeave_CircularMask(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; - if (task->tData2 < 1024) - task->tData2 += 128; - if (task->tData1 != 0) + sTransitionData->VBlank_DMA = FALSE; + if (task->tRadiusDelta < (4 << 8)) + task->tRadiusDelta += 128; // 256 is 1 unit of speed. Speed up every other frame (128 / 256) + if (task->tRadius != 0) { - task->tData1 -= (task->tData2 >> 8); - if (task->tData1 < 0) - task->tData1 = 0; + task->tRadius -= task->tRadiusDelta >> 8; + if (task->tRadius < 0) + task->tRadius = 0; } - sub_814A014(gScanlineEffectRegBuffers[0], 120, 80, task->tData1); - if (task->tData1 == 0) + SetCircularMask(gScanlineEffectRegBuffers[0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, task->tRadius); + if (task->tRadius == 0) { SetVBlankCallback(NULL); DmaStop(0); @@ -1580,357 +1713,382 @@ static bool8 Phase2_BigPokeball_Func6(struct Task *task) } else { - if (task->tData3 == 0) + if (!task->tVBlankSet) { - task->tData3++; - SetVBlankCallback(VBlankCB1_Phase2_BigPokeball); + task->tVBlankSet++; + SetVBlankCallback(VBlankCB_CircularMask); } - - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; } - return FALSE; } -static void Transition_BigPokeball_Vblank(void) +static void VBlankCB_SetWinAndBlend(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - REG_WININ = sTransitionStructPtr->WININ; - REG_WINOUT = sTransitionStructPtr->WINOUT; - REG_WIN0V = sTransitionStructPtr->WIN0V; - REG_BLDCNT = sTransitionStructPtr->BLDCNT; - REG_BLDALPHA = sTransitionStructPtr->BLDALPHA; + if (sTransitionData->VBlank_DMA) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + REG_WININ = sTransitionData->WININ; + REG_WINOUT = sTransitionData->WINOUT; + REG_WIN0V = sTransitionData->WIN0V; + REG_BLDCNT = sTransitionData->BLDCNT; + REG_BLDALPHA = sTransitionData->BLDALPHA; } -static void VBlankCB0_Phase2_BigPokeball(void) +static void VBlankCB_PatternWeave(void) { - Transition_BigPokeball_Vblank(); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, 0xA2400001); + VBlankCB_SetWinAndBlend(); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, B_TRANS_DMA_FLAGS); } -static void VBlankCB1_Phase2_BigPokeball(void) +static void VBlankCB_CircularMask(void) { - Transition_BigPokeball_Vblank(); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); + VBlankCB_SetWinAndBlend(); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, B_TRANS_DMA_FLAGS); } -static void Phase2Task_PokeballsTrail(u8 taskId) +#undef tAmplitude +#undef tSinIndex +#undef tBlendTarget1 +#undef tBlendTarget2 +#undef tRadius +#undef tRadiusDelta +#undef tVBlankSet + +//------------------------------ +// B_TRANSITION_POKEBALLS_TRAIL +//------------------------------ + +#define sSide data[0] +#define sDelay data[1] +#define sPrevX data[2] + +static void Task_PokeballsTrail(u8 taskId) { - while (sPhase2_PokeballsTrail_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sPokeballsTrail_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_PokeballsTrail_Func1(struct Task *task) +static bool8 PokeballsTrail_Init(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); CpuSet(sPokeballTrail_Tileset, tileset, 0x20); - CpuFill32(0, tilemap, 0x800); - LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20); + CpuFill32(0, tilemap, BG_SCREEN_SIZE); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); task->tState++; return FALSE; } -static bool8 Phase2_PokeballsTrail_Func2(struct Task *task) +static bool8 PokeballsTrail_Main(struct Task *task) { s16 i; - s16 rand; - s16 arr0[ARRAY_COUNT(sUnknown_085C8B88)]; - s16 arr1[ARRAY_COUNT(sUnknown_085C8B8C)]; + s16 side; + s16 startX[ARRAY_COUNT(sPokeballsTrail_StartXCoords)]; + s16 delays[ARRAY_COUNT(sPokeballsTrail_Delays)]; + memcpy(startX, sPokeballsTrail_StartXCoords, sizeof(sPokeballsTrail_StartXCoords)); + memcpy(delays, sPokeballsTrail_Delays, sizeof(sPokeballsTrail_Delays)); - memcpy(arr0, sUnknown_085C8B88, sizeof(sUnknown_085C8B88)); - memcpy(arr1, sUnknown_085C8B8C, sizeof(sUnknown_085C8B8C)); - rand = Random() & 1; - for (i = 0; i <= 4; i++, rand ^= 1) + // Randomly pick which side the first ball should start on. + // The side is then flipped for each subsequent ball. + side = Random() & 1; + for (i = 0; i < NUM_POKEBALL_TRAILS; i++, side ^= 1) { - gFieldEffectArguments[0] = arr0[rand]; // x - gFieldEffectArguments[1] = (i * 32) + 16; // y - gFieldEffectArguments[2] = rand; - gFieldEffectArguments[3] = arr1[i]; - FieldEffectStart(FLDEFF_POKEBALL); + gFieldEffectArguments[0] = startX[side]; // x + gFieldEffectArguments[1] = (i * 32) + 16; // y + gFieldEffectArguments[2] = side; + gFieldEffectArguments[3] = delays[i]; + FieldEffectStart(FLDEFF_POKEBALL_TRAIL); } task->tState++; return FALSE; } -static bool8 Phase2_PokeballsTrail_Func3(struct Task *task) +static bool8 PokeballsTrail_End(struct Task *task) { - if (!FieldEffectActiveListContains(FLDEFF_POKEBALL)) + if (!FieldEffectActiveListContains(FLDEFF_POKEBALL_TRAIL)) { FadeScreenBlack(); - DestroyTask(FindTaskIdByFunc(Phase2Task_PokeballsTrail)); + DestroyTask(FindTaskIdByFunc(Task_PokeballsTrail)); } return FALSE; } -bool8 FldEff_Pokeball(void) +bool8 FldEff_PokeballTrail(void) { u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_Pokeball, gFieldEffectArguments[0], gFieldEffectArguments[1], 0); gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].data[0] = gFieldEffectArguments[2]; - gSprites[spriteId].data[1] = gFieldEffectArguments[3]; - gSprites[spriteId].data[2] = -1; + gSprites[spriteId].sSide = gFieldEffectArguments[2]; + gSprites[spriteId].sDelay = gFieldEffectArguments[3]; + gSprites[spriteId].sPrevX = -1; InitSpriteAffineAnim(&gSprites[spriteId]); StartSpriteAffineAnim(&gSprites[spriteId], gFieldEffectArguments[2]); return FALSE; } -static void sub_814713C(struct Sprite *sprite) +static void SpriteCB_FldEffPokeballTrail(struct Sprite *sprite) { - s16 arr0[ARRAY_COUNT(sUnknown_085C8B96)]; + s16 speeds[ARRAY_COUNT(sPokeballsTrail_Speeds)]; + memcpy(speeds, sPokeballsTrail_Speeds, sizeof(sPokeballsTrail_Speeds)); - memcpy(arr0, sUnknown_085C8B96, sizeof(sUnknown_085C8B96)); - if (sprite->data[1] != 0) + if (sprite->sDelay != 0) { - sprite->data[1]--; + sprite->sDelay--; } else { if (sprite->x >= 0 && sprite->x <= DISPLAY_WIDTH) { + // Set Pokéball position s16 posX = sprite->x >> 3; s16 posY = sprite->y >> 3; - if (posX != sprite->data[2]) + // If Pokéball moved forward clear trail behind it + if (posX != sprite->sPrevX) { u32 var; u16 *ptr; - sprite->data[2] = posX; - var = (((REG_BG0CNT >> 8) & 0x1F) << 11); - ptr = (u16 *)(VRAM + var); + sprite->sPrevX = posX; + var = ((REG_BG0CNT >> 8) & 0x1F) << 11; + ptr = (u16 *)(BG_VRAM + var); - SOME_VRAM_STORE(ptr, posY - 2, posX, 0xF001); - SOME_VRAM_STORE(ptr, posY - 1, posX, 0xF001); - SOME_VRAM_STORE(ptr, posY - 0, posX, 0xF001); - SOME_VRAM_STORE(ptr, posY + 1, posX, 0xF001); + SET_TILE(ptr, posY - 2, posX, 1); + SET_TILE(ptr, posY - 1, posX, 1); + SET_TILE(ptr, posY - 0, posX, 1); + SET_TILE(ptr, posY + 1, posX, 1); } } - sprite->x += arr0[sprite->data[0]]; - if (sprite->x < -15 || sprite->x > 255) - FieldEffectStop(sprite, FLDEFF_POKEBALL); + sprite->x += speeds[sprite->sSide]; + if (sprite->x < -15 || sprite->x > DISPLAY_WIDTH + 15) + FieldEffectStop(sprite, FLDEFF_POKEBALL_TRAIL); } } -static void Phase2Task_Clockwise_BlackFade(u8 taskId) +#undef sSide +#undef sDelay +#undef sPrevX + +//----------------------------- +// B_TRANSITION_CLOCKWISE_WIPE +//----------------------------- + +static void Task_ClockwiseWipe(u8 taskId) { - while (sPhase2_Clockwise_BlackFade_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sClockwiseWipe_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Clockwise_BlackFade_Func1(struct Task *task) +static bool8 ClockwiseWipe_Init(struct Task *task) { u16 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->WININ = 0; - sTransitionStructPtr->WINOUT = WINOUT_WIN01_ALL; - sTransitionStructPtr->WIN0H = -3855; - sTransitionStructPtr->WIN0V = DISPLAY_HEIGHT; + sTransitionData->WININ = 0; + sTransitionData->WINOUT = WINOUT_WIN01_ALL; + sTransitionData->WIN0H = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); + sTransitionData->WIN0V = DISPLAY_HEIGHT; - for (i = 0; i < 160; i++) - { - gScanlineEffectRegBuffers[1][i] = 0xF3F4; - } + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i] = ((DISPLAY_WIDTH + 3) << 8) | (DISPLAY_WIDTH + 4); - SetVBlankCallback(VBlankCB_Phase2_Clockwise_BlackFade); - sTransitionStructPtr->data[4] = 120; + SetVBlankCallback(VBlankCB_ClockwiseWipe); + sTransitionData->tWipeEndX = DISPLAY_WIDTH / 2; task->tState++; return TRUE; } -static bool8 Phase2_Clockwise_BlackFade_Func2(struct Task *task) +static bool8 ClockwiseWipe_TopRight(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; - sub_814A1AC(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->data[4], -1, 1, 1); + InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sTransitionData->tWipeEndX, -1, 1, 1); do { - gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = (sTransitionStructPtr->data[2] + 1) | 0x7800; - } while (!sub_814A228(sTransitionStructPtr->data, 1, 1)); + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = (sTransitionData->tWipeCurrX + 1) | ((DISPLAY_WIDTH / 2) << 8); + } while (!UpdateBlackWipe(sTransitionData->data, TRUE, TRUE)); - sTransitionStructPtr->data[4] += 16; - if (sTransitionStructPtr->data[4] >= 240) + sTransitionData->tWipeEndX += 16; + if (sTransitionData->tWipeEndX >= DISPLAY_WIDTH) { - sTransitionStructPtr->data[5] = 0; + sTransitionData->tWipeEndY = 0; task->tState++; } - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Clockwise_BlackFade_Func3(struct Task *task) +static bool8 ClockwiseWipe_Right(struct Task *task) { - s16 r1, r3; - vu8 var = 0; + s16 start, end; + vu8 finished = FALSE; - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; - sub_814A1AC(sTransitionStructPtr->data, 120, 80, 240, sTransitionStructPtr->data[5], 1, 1); + InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, DISPLAY_WIDTH, sTransitionData->tWipeEndY, 1, 1); while (1) { - r1 = 120, r3 = sTransitionStructPtr->data[2] + 1; - if (sTransitionStructPtr->data[5] >= 80) - r1 = sTransitionStructPtr->data[2], r3 = 240; - gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = (r3) | (r1 << 8); - if (var != 0) + start = DISPLAY_WIDTH / 2, end = sTransitionData->tWipeCurrX + 1; + if (sTransitionData->tWipeEndY >= DISPLAY_HEIGHT / 2) + start = sTransitionData->tWipeCurrX, end = DISPLAY_WIDTH; + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = end | (start << 8); + if (finished) break; - var = sub_814A228(sTransitionStructPtr->data, 1, 1); + finished = UpdateBlackWipe(sTransitionData->data, TRUE, TRUE); } - sTransitionStructPtr->data[5] += 8; - if (sTransitionStructPtr->data[5] >= 160) + sTransitionData->tWipeEndY += 8; + if (sTransitionData->tWipeEndY >= DISPLAY_HEIGHT) { - sTransitionStructPtr->data[4] = 240; + sTransitionData->tWipeEndX = DISPLAY_WIDTH; task->tState++; } else { - while (sTransitionStructPtr->data[3] < sTransitionStructPtr->data[5]) - { - gScanlineEffectRegBuffers[0][++sTransitionStructPtr->data[3]] = (r3) | (r1 << 8); - } + while (sTransitionData->tWipeCurrY < sTransitionData->tWipeEndY) + gScanlineEffectRegBuffers[0][++sTransitionData->tWipeCurrY] = end | (start << 8); } - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Clockwise_BlackFade_Func4(struct Task *task) +static bool8 ClockwiseWipe_Bottom(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; - sub_814A1AC(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->data[4], 160, 1, 1); + InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sTransitionData->tWipeEndX, DISPLAY_HEIGHT, 1, 1); do { - gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = (sTransitionStructPtr->data[2] << 8) | 0xF0; - } while (!sub_814A228(sTransitionStructPtr->data, 1, 1)); + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = (sTransitionData->tWipeCurrX << 8) | DISPLAY_WIDTH; + } while (!UpdateBlackWipe(sTransitionData->data, TRUE, TRUE)); - sTransitionStructPtr->data[4] -= 16; - if (sTransitionStructPtr->data[4] <= 0) + sTransitionData->tWipeEndX -= 16; + if (sTransitionData->tWipeEndX <= 0) { - sTransitionStructPtr->data[5] = 160; + sTransitionData->tWipeEndY = DISPLAY_HEIGHT; task->tState++; } - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Clockwise_BlackFade_Func5(struct Task *task) +static bool8 ClockwiseWipe_Left(struct Task *task) { - s16 r1, r2, var4; - vu8 var = 0; + s16 end, start, temp; + vu8 finished = FALSE; - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; - sub_814A1AC(sTransitionStructPtr->data, 120, 80, 0, sTransitionStructPtr->data[5], 1, 1); + InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0, sTransitionData->tWipeEndY, 1, 1); while (1) { - r1 = (gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]]) & 0xFF; - r2 = sTransitionStructPtr->data[2]; - if (sTransitionStructPtr->data[5] <= 80) - r2 = 120, r1 = sTransitionStructPtr->data[2]; - var4 = (r1) | (r2 << 8); - gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = var4; - if (var != 0) + end = (gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY]) & 0xFF; + start = sTransitionData->tWipeCurrX; + if (sTransitionData->tWipeEndY <= DISPLAY_HEIGHT / 2) + start = DISPLAY_WIDTH / 2, end = sTransitionData->tWipeCurrX; + temp = end | (start << 8); + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = temp; + if (finished) break; - var = sub_814A228(sTransitionStructPtr->data, 1, 1); + finished = UpdateBlackWipe(sTransitionData->data, TRUE, TRUE); } - sTransitionStructPtr->data[5] -= 8; - if (sTransitionStructPtr->data[5] <= 0) + sTransitionData->tWipeEndY -= 8; + if (sTransitionData->tWipeEndY <= 0) { - sTransitionStructPtr->data[4] = 0; + sTransitionData->tWipeEndX = 0; task->tState++; } else { - while (sTransitionStructPtr->data[3] > sTransitionStructPtr->data[5]) - { - gScanlineEffectRegBuffers[0][--sTransitionStructPtr->data[3]] = (r1) | (r2 << 8); - } + while (sTransitionData->tWipeCurrY > sTransitionData->tWipeEndY) + gScanlineEffectRegBuffers[0][--sTransitionData->tWipeCurrY] = end | (start << 8); } - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Clockwise_BlackFade_Func6(struct Task *task) +static bool8 ClockwiseWipe_TopLeft(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; - sub_814A1AC(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->data[4], 0, 1, 1); + InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sTransitionData->tWipeEndX, 0, 1, 1); do { - s16 r2, r3; + s16 start, end; + start = DISPLAY_WIDTH / 2, end = sTransitionData->tWipeCurrX; + if (sTransitionData->tWipeCurrX >= DISPLAY_WIDTH / 2) + start = 0, end = DISPLAY_WIDTH; + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = end | (start << 8); + } while (!UpdateBlackWipe(sTransitionData->data, TRUE, TRUE)); - r2 = 120, r3 = sTransitionStructPtr->data[2]; - if (sTransitionStructPtr->data[2] >= 120) - r2 = 0, r3 = 240; - gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = (r3) | (r2 << 8); - - } while (!sub_814A228(sTransitionStructPtr->data, 1, 1)); - - sTransitionStructPtr->data[4] += 16; - if (sTransitionStructPtr->data[2] > 120) + sTransitionData->tWipeEndX += 16; + if (sTransitionData->tWipeCurrX > DISPLAY_WIDTH / 2) task->tState++; - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Clockwise_BlackFade_Func7(struct Task *task) +static bool8 ClockwiseWipe_End(struct Task *task) { DmaStop(0); FadeScreenBlack(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Clockwise_BlackFade)); + DestroyTask(FindTaskIdByFunc(Task_ClockwiseWipe)); return FALSE; } -static void VBlankCB_Phase2_Clockwise_BlackFade(void) +static void VBlankCB_ClockwiseWipe(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (sTransitionStructPtr->VBlank_DMA != 0) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - REG_WININ = sTransitionStructPtr->WININ; - REG_WINOUT = sTransitionStructPtr->WINOUT; - REG_WIN0V = sTransitionStructPtr->WIN0V; + if (sTransitionData->VBlank_DMA != 0) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + REG_WININ = sTransitionData->WININ; + REG_WINOUT = sTransitionData->WINOUT; + REG_WIN0V = sTransitionData->WIN0V; REG_WIN0H = gScanlineEffectRegBuffers[1][0]; - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, B_TRANS_DMA_FLAGS); } -static void Phase2Task_Ripple(u8 taskId) +//--------------------- +// B_TRANSITION_RIPPLE +//--------------------- + +#define tSinVal data[1] +#define tAmplitudeVal data[2] +#define tTimer data[3] +#define tFadeStarted data[4] + +static void Task_Ripple(u8 taskId) { - while (sPhase2_Ripple_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sRipple_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Ripple_Func1(struct Task *task) +static bool8 Ripple_Init(struct Task *task) { u8 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - for (i = 0; i < 160; i++) - { - gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->field_16; - } + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i] = sTransitionData->cameraY; - SetVBlankCallback(VBlankCB_Phase2_Ripple); - SetHBlankCallback(HBlankCB_Phase2_Ripple); + SetVBlankCallback(VBlankCB_Ripple); + SetHBlankCallback(HBlankCB_Ripple); EnableInterrupts(INTR_FLAG_HBLANK); @@ -1938,48 +2096,48 @@ static bool8 Phase2_Ripple_Func1(struct Task *task) return TRUE; } -static bool8 Phase2_Ripple_Func2(struct Task *task) +static bool8 Ripple_Main(struct Task *task) { u8 i; - s16 r3; - u16 r4, r8; + s16 amplitude; + u16 sinVal, speed; - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; - r3 = task->tData2 >> 8; - r4 = task->tData1; - r8 = 384; - task->tData1 += 0x400; - if (task->tData2 <= 0x1FFF) - task->tData2 += 0x180; + amplitude = task->tAmplitudeVal >> 8; + sinVal = task->tSinVal; + speed = 0x180; + task->tSinVal += 0x400; + if (task->tAmplitudeVal <= 0x1FFF) + task->tAmplitudeVal += 0x180; - for (i = 0; i < 160; i++, r4 += r8) + for (i = 0; i < DISPLAY_HEIGHT; i++, sinVal += speed) { - s16 var = r4 >> 8; - gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var & 0xffff, r3); + s16 sinIndex = sinVal >> 8; + gScanlineEffectRegBuffers[0][i] = sTransitionData->cameraY + Sin(sinIndex & 0xffff, amplitude); } - if (++task->tData3 == 81) + if (++task->tTimer == 81) { - task->tData4++; - BeginNormalPaletteFade(PALETTES_ALL, -2, 0, 0x10, RGB_BLACK); + task->tFadeStarted++; + BeginNormalPaletteFade(PALETTES_ALL, -2, 0, 16, RGB_BLACK); } - if (task->tData4 != 0 && !gPaletteFade.active) - DestroyTask(FindTaskIdByFunc(Phase2Task_Ripple)); + if (task->tFadeStarted && !gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(Task_Ripple)); - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static void VBlankCB_Phase2_Ripple(void) +static void VBlankCB_Ripple(void) { VBlankCB_BattleTransition(); - if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + if (sTransitionData->VBlank_DMA) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); } -static void HBlankCB_Phase2_Ripple(void) +static void HBlankCB_Ripple(void) { u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1VOFS = var; @@ -1987,146 +2145,181 @@ static void HBlankCB_Phase2_Ripple(void) REG_BG3VOFS = var; } -static void Phase2Task_Wave(u8 taskId) +#undef tSinVal +#undef tAmplitudeVal +#undef tTimer +#undef tFadeStarted + +//------------------- +// B_TRANSITION_WAVE +//------------------- + +#define tX data[1] +#define tSinIndex data[2] + +static void Task_Wave(u8 taskId) { - while (sPhase2_Wave_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sWave_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Wave_Func1(struct Task *task) +static bool8 Wave_Init(struct Task *task) { u8 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->WININ = WININ_WIN0_ALL; - sTransitionStructPtr->WINOUT = 0; - sTransitionStructPtr->WIN0H = DISPLAY_WIDTH; - sTransitionStructPtr->WIN0V = DISPLAY_HEIGHT; + sTransitionData->WININ = WININ_WIN0_ALL; + sTransitionData->WINOUT = 0; + sTransitionData->WIN0H = DISPLAY_WIDTH; + sTransitionData->WIN0V = DISPLAY_HEIGHT; - for (i = 0; i < 160; i++) - { - gScanlineEffectRegBuffers[1][i] = 242; - } + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i] = DISPLAY_WIDTH + 2; - SetVBlankCallback(VBlankCB_Phase2_Wave); + SetVBlankCallback(VBlankCB_Wave); task->tState++; return TRUE; } -static bool8 Phase2_Wave_Func2(struct Task *task) +static bool8 Wave_Main(struct Task *task) { - u8 i, r5; - u16* toStore; - bool8 nextFunc; + u8 i, sinIndex; + u16 *toStore; + bool8 finished; - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; toStore = gScanlineEffectRegBuffers[0]; - r5 = task->tData2; - task->tData2 += 16; - task->tData1 += 8; + sinIndex = task->tSinIndex; + task->tSinIndex += 16; + task->tX += 8; - for (i = 0, nextFunc = TRUE; i < 160; i++, r5 += 4, toStore++) + for (i = 0, finished = TRUE; i < DISPLAY_HEIGHT; i++, sinIndex += 4, toStore++) { - s16 value = task->tData1 + Sin(r5, 40); - if (value < 0) - value = 0; - if (value > 240) - value = 240; - *toStore = (value << 8) | (0xF1); - if (value < 240) - nextFunc = FALSE; + s16 x = task->tX + Sin(sinIndex, 40); + if (x < 0) + x = 0; + if (x > DISPLAY_WIDTH) + x = DISPLAY_WIDTH; + *toStore = (x << 8) | (DISPLAY_WIDTH + 1); + if (x < DISPLAY_WIDTH) + finished = FALSE; } - if (nextFunc) + if (finished) task->tState++; - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Wave_Func3(struct Task *task) +static bool8 Wave_End(struct Task *task) { DmaStop(0); FadeScreenBlack(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Wave)); + DestroyTask(FindTaskIdByFunc(Task_Wave)); return FALSE; } -static void VBlankCB_Phase2_Wave(void) +static void VBlankCB_Wave(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (sTransitionStructPtr->VBlank_DMA != 0) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - REG_WININ = sTransitionStructPtr->WININ; - REG_WINOUT = sTransitionStructPtr->WINOUT; - REG_WIN0V = sTransitionStructPtr->WIN0V; - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); + if (sTransitionData->VBlank_DMA != 0) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + REG_WININ = sTransitionData->WININ; + REG_WINOUT = sTransitionData->WINOUT; + REG_WIN0V = sTransitionData->WIN0V; + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, B_TRANS_DMA_FLAGS); } -static void Phase2Task_Sidney(u8 taskId) +#undef tX +#undef tSinIndex + +//---------------------------------------------------------------- +// B_TRANSITION_SIDNEY, B_TRANSITION_PHOEBE, B_TRANSITION_GLACIA, +// B_TRANSITION_DRAKE, and B_TRANSITION_CHAMPION +// +// These are all the "mugshot" transitions, where a banner shows +// the trainer pic of the player and their opponent. +//---------------------------------------------------------------- + +#define tSinIndex data[1] +#define tTopBannerX data[2] +#define tBottomBannerX data[3] +#define tTimer data[3] // Re-used +#define tFadeSpread data[4] +#define tOpponentSpriteId data[13] +#define tPlayerSpriteId data[14] +#define tMugshotId data[15] + +// Sprite data for trainer sprites in mugshots +#define sState data[0] +#define sSlideSpeed data[1] +#define sSlideAccel data[2] +#define sDone data[6] +#define sSlideDir data[7] + +static void Task_Sidney(u8 taskId) { gTasks[taskId].tMugshotId = MUGSHOT_SIDNEY; - Phase2Task_MugShotTransition(taskId); + DoMugshotTransition(taskId); } -static void Phase2Task_Phoebe(u8 taskId) +static void Task_Phoebe(u8 taskId) { gTasks[taskId].tMugshotId = MUGSHOT_PHOEBE; - Phase2Task_MugShotTransition(taskId); + DoMugshotTransition(taskId); } -static void Phase2Task_Glacia(u8 taskId) +static void Task_Glacia(u8 taskId) { gTasks[taskId].tMugshotId = MUGSHOT_GLACIA; - Phase2Task_MugShotTransition(taskId); + DoMugshotTransition(taskId); } -static void Phase2Task_Drake(u8 taskId) +static void Task_Drake(u8 taskId) { gTasks[taskId].tMugshotId = MUGSHOT_DRAKE; - Phase2Task_MugShotTransition(taskId); + DoMugshotTransition(taskId); } -static void Phase2Task_Champion(u8 taskId) +static void Task_Champion(u8 taskId) { gTasks[taskId].tMugshotId = MUGSHOT_CHAMPION; - Phase2Task_MugShotTransition(taskId); + DoMugshotTransition(taskId); } -static void Phase2Task_MugShotTransition(u8 taskId) +static void DoMugshotTransition(u8 taskId) { - while (sPhase2_Mugshot_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sMugshot_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Mugshot_Func1(struct Task *task) +static bool8 Mugshot_Init(struct Task *task) { u8 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - Mugshots_CreateOpponentPlayerSprites(task); + Mugshots_CreateTrainerPics(task); - task->tData1 = 0; - task->tData2 = 1; - task->tData3 = 239; - sTransitionStructPtr->WININ = WININ_WIN0_ALL; - sTransitionStructPtr->WINOUT = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; - sTransitionStructPtr->WIN0V = DISPLAY_HEIGHT; + task->tSinIndex = 0; + task->tTopBannerX = 1; + task->tBottomBannerX = DISPLAY_WIDTH - 1; + sTransitionData->WININ = WININ_WIN0_ALL; + sTransitionData->WINOUT = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; + sTransitionData->WIN0V = DISPLAY_HEIGHT; - for (i = 0; i < 160; i++) - { - gScanlineEffectRegBuffers[1][i] = 0xF0F1; - } + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i] = (DISPLAY_WIDTH << 8) | (DISPLAY_WIDTH + 1); - SetVBlankCallback(VBlankCB0_Phase2_Mugshots); + SetVBlankCallback(VBlankCB_Mugshots); task->tState++; return FALSE; } -static bool8 Phase2_Mugshot_Func2(struct Task *task) +static bool8 Mugshot_SetGfx(struct Task *task) { s16 i, j; u16 *tilemap, *tileset; @@ -2141,99 +2334,108 @@ static bool8 Phase2_Mugshot_Func2(struct Task *task) for (i = 0; i < 20; i++) { for (j = 0; j < 32; j++, mugshotsMap++) - { - SOME_VRAM_STORE(tilemap, i, j, *mugshotsMap | 0xF000); - } + SET_TILE(tilemap, i, j, *mugshotsMap); } EnableInterrupts(INTR_FLAG_HBLANK); - SetHBlankCallback(HBlankCB_Phase2_Mugshots); + SetHBlankCallback(HBlankCB_Mugshots); task->tState++; return FALSE; } -static bool8 Phase2_Mugshot_Func3(struct Task *task) +static bool8 Mugshot_ShowBanner(struct Task *task) { - u8 i, r5; - u16* toStore; - s16 value; + u8 i, sinIndex; + u16 *toStore; + s16 x; s32 mergedValue; - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; toStore = gScanlineEffectRegBuffers[0]; - r5 = task->tData1; - task->tData1 += 0x10; + sinIndex = task->tSinIndex; + task->tSinIndex += 16; - for (i = 0; i < 80; i++, toStore++, r5 += 0x10) + // Update top banner + for (i = 0; i < DISPLAY_HEIGHT / 2; i++, toStore++, sinIndex += 16) { - value = task->tData2 + Sin(r5, 0x10); - if (value < 0) - value = 1; - if (value > 0xF0) - value = 0xF0; - *toStore = value; - } - for (; i < 160; i++, toStore++, r5 += 0x10) - { - value = task->tData3 - Sin(r5, 0x10); - if (value < 0) - value = 0; - if (value > 0xEF) - value = 0xEF; - *toStore = (value << 8) | (0xF0); + x = task->tTopBannerX + Sin(sinIndex, 16); + if (x < 0) + x = 1; + if (x > DISPLAY_WIDTH) + x = DISPLAY_WIDTH; + *toStore = x; } - task->tData2 += 8; - task->tData3 -= 8; - if (task->tData2 > 0xF0) - task->tData2 = 0xF0; - if (task->tData3 < 0) - task->tData3 = 0; - mergedValue = *(s32*)(&task->tData2); - if (mergedValue == 0xF0) + // Update bottom banner + for (; i < DISPLAY_HEIGHT; i++, toStore++, sinIndex += 16) + { + x = task->tBottomBannerX - Sin(sinIndex, 16); + if (x < 0) + x = 0; + if (x > DISPLAY_WIDTH - 1) + x = DISPLAY_WIDTH - 1; + *toStore = (x << 8) | DISPLAY_WIDTH; + } + + // Slide banners across screen + task->tTopBannerX += 8; + task->tBottomBannerX -= 8; + + if (task->tTopBannerX > DISPLAY_WIDTH) + task->tTopBannerX = DISPLAY_WIDTH; + if (task->tBottomBannerX < 0) + task->tBottomBannerX = 0; + + mergedValue = *(s32 *)(&task->tTopBannerX); + if (mergedValue == DISPLAY_WIDTH) task->tState++; - sTransitionStructPtr->BG0HOFS_1 -= 8; - sTransitionStructPtr->BG0HOFS_2 += 8; - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->BG0HOFS_Lower -= 8; + sTransitionData->BG0HOFS_Upper += 8; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Mugshot_Func4(struct Task *task) +static bool8 Mugshot_StartOpponentSlide(struct Task *task) { u8 i; - u16* toStore; + u16 *toStore; - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; - for (i = 0, toStore = gScanlineEffectRegBuffers[0]; i < 160; i++, toStore++) - { - *toStore = 0xF0; - } + for (i = 0, toStore = gScanlineEffectRegBuffers[0]; i < DISPLAY_HEIGHT; i++, toStore++) + *toStore = DISPLAY_WIDTH; task->tState++; - task->tData1 = 0; - task->tData2 = 0; - task->tData3 = 0; - sTransitionStructPtr->BG0HOFS_1 -= 8; - sTransitionStructPtr->BG0HOFS_2 += 8; - SetTrainerPicSlideTable(task->tOpponentSpriteId, 0); - SetTrainerPicSlideTable(task->tPlayerSpriteId, 1); + // Clear old data + task->tSinIndex = 0; + task->tTopBannerX = 0; + task->tBottomBannerX = 0; + + sTransitionData->BG0HOFS_Lower -= 8; + sTransitionData->BG0HOFS_Upper += 8; + + SetTrainerPicSlideDirection(task->tOpponentSpriteId, 0); + SetTrainerPicSlideDirection(task->tPlayerSpriteId, 1); + + // Start opponent slide IncrementTrainerPicState(task->tOpponentSpriteId); PlaySE(SE_MUGSHOT); - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Mugshot_Func5(struct Task *task) +static bool8 Mugshot_WaitStartPlayerSlide(struct Task *task) { - sTransitionStructPtr->BG0HOFS_1 -= 8; - sTransitionStructPtr->BG0HOFS_2 += 8; + sTransitionData->BG0HOFS_Lower -= 8; + sTransitionData->BG0HOFS_Upper += 8; + + // Start player's slide in once the opponent is finished if (IsTrainerPicSlideDone(task->tOpponentSpriteId)) { task->tState++; @@ -2242,94 +2444,99 @@ static bool8 Phase2_Mugshot_Func5(struct Task *task) return FALSE; } -static bool8 Phase2_Mugshot_Func6(struct Task *task) +static bool8 Mugshot_WaitPlayerSlide(struct Task *task) { - sTransitionStructPtr->BG0HOFS_1 -= 8; - sTransitionStructPtr->BG0HOFS_2 += 8; + sTransitionData->BG0HOFS_Lower -= 8; + sTransitionData->BG0HOFS_Upper += 8; + if (IsTrainerPicSlideDone(task->tPlayerSpriteId)) { - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; SetVBlankCallback(NULL); DmaStop(0); - memset(gScanlineEffectRegBuffers[0], 0, 0x140); - memset(gScanlineEffectRegBuffers[1], 0, 0x140); + memset(gScanlineEffectRegBuffers[0], 0, DISPLAY_HEIGHT * 2); + memset(gScanlineEffectRegBuffers[1], 0, DISPLAY_HEIGHT * 2); SetGpuReg(REG_OFFSET_WIN0H, DISPLAY_WIDTH); SetGpuReg(REG_OFFSET_BLDY, 0); task->tState++; - task->tData3 = 0; - task->tData4 = 0; - sTransitionStructPtr->BLDCNT = BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN; - SetVBlankCallback(VBlankCB1_Phase2_Mugshots); + task->tTimer = 0; + task->tFadeSpread = 0; + sTransitionData->BLDCNT = BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN; + SetVBlankCallback(VBlankCB_MugshotsFadeOut); } return FALSE; } -static bool8 Phase2_Mugshot_Func7(struct Task *task) +static bool8 Mugshot_GradualWhiteFade(struct Task *task) { - bool32 r6; + bool32 active; - sTransitionStructPtr->VBlank_DMA = FALSE; - r6 = TRUE; - sTransitionStructPtr->BG0HOFS_1 -= 8; - sTransitionStructPtr->BG0HOFS_2 += 8; + sTransitionData->VBlank_DMA = FALSE; + active = TRUE; + sTransitionData->BG0HOFS_Lower -= 8; + sTransitionData->BG0HOFS_Upper += 8; - if (task->tData4 < 0x50) - task->tData4 += 2; - if (task->tData4 > 0x50) - task->tData4 = 0x50; + if (task->tFadeSpread < DISPLAY_HEIGHT / 2) + task->tFadeSpread += 2; + if (task->tFadeSpread > DISPLAY_HEIGHT / 2) + task->tFadeSpread = DISPLAY_HEIGHT / 2; - if (++task->tData3 & 1) + if (++task->tTimer & 1) { s16 i; - for (i = 0, r6 = FALSE; i <= task->tData4; i++) + for (i = 0, active = FALSE; i <= task->tFadeSpread; i++) { - s16 index1 = 0x50 - i; - s16 index2 = 0x50 + i; + // Fade starts in middle of screen and + // spreads outwards in both directions. + s16 index1 = DISPLAY_HEIGHT / 2 - i; + s16 index2 = DISPLAY_HEIGHT / 2 + i; if (gScanlineEffectRegBuffers[0][index1] <= 15) { - r6 = TRUE; + active = TRUE; gScanlineEffectRegBuffers[0][index1]++; } if (gScanlineEffectRegBuffers[0][index2] <= 15) { - r6 = TRUE; + active = TRUE; gScanlineEffectRegBuffers[0][index2]++; } } } - if (task->tData4 == 0x50 && !r6) + if (task->tFadeSpread == DISPLAY_HEIGHT / 2 && !active) task->tState++; - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Mugshot_Func8(struct Task *task) +// Set palette to white to replace the scanline white fade +// before the screen fades to black. +static bool8 Mugshot_InitFadeWhiteToBlack(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; - BlendPalettes(PALETTES_ALL, 0x10, RGB_WHITE); - sTransitionStructPtr->BLDCNT = 0xFF; - task->tData3 = 0; + sTransitionData->VBlank_DMA = FALSE; + BlendPalettes(PALETTES_ALL, 16, RGB_WHITE); + sTransitionData->BLDCNT = 0xFF; + task->tTimer = 0; task->tState++; return TRUE; } -static bool8 Phase2_Mugshot_Func9(struct Task *task) +static bool8 Mugshot_FadeToBlack(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; - task->tData3++; - memset(gScanlineEffectRegBuffers[0], task->tData3, 0x140); - if (task->tData3 > 15) + task->tTimer++; + memset(gScanlineEffectRegBuffers[0], task->tTimer, DISPLAY_HEIGHT * 2); + if (task->tTimer > 15) task->tState++; - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Mugshot_Func10(struct Task *task) +static bool8 Mugshot_End(struct Task *task) { DmaStop(0); FadeScreenBlack(); @@ -2337,60 +2544,56 @@ static bool8 Phase2_Mugshot_Func10(struct Task *task) return FALSE; } -static void VBlankCB0_Phase2_Mugshots(void) +static void VBlankCB_Mugshots(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (sTransitionStructPtr->VBlank_DMA != 0) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - REG_BG0VOFS = sTransitionStructPtr->BG0VOFS; - REG_WININ = sTransitionStructPtr->WININ; - REG_WINOUT = sTransitionStructPtr->WINOUT; - REG_WIN0V = sTransitionStructPtr->WIN0V; - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); + if (sTransitionData->VBlank_DMA != 0) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + REG_BG0VOFS = sTransitionData->BG0VOFS; + REG_WININ = sTransitionData->WININ; + REG_WINOUT = sTransitionData->WINOUT; + REG_WIN0V = sTransitionData->WIN0V; + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, B_TRANS_DMA_FLAGS); } -static void VBlankCB1_Phase2_Mugshots(void) +static void VBlankCB_MugshotsFadeOut(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (sTransitionStructPtr->VBlank_DMA != 0) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - REG_BLDCNT = sTransitionStructPtr->BLDCNT; - DmaSet(0, gScanlineEffectRegBuffers[1], ®_BLDY, 0xA2400001); + if (sTransitionData->VBlank_DMA != 0) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + REG_BLDCNT = sTransitionData->BLDCNT; + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BLDY, B_TRANS_DMA_FLAGS); } -static void HBlankCB_Phase2_Mugshots(void) +static void HBlankCB_Mugshots(void) { - if (REG_VCOUNT < 80) - REG_BG0HOFS = sTransitionStructPtr->BG0HOFS_1; + if (REG_VCOUNT < DISPLAY_HEIGHT / 2) + REG_BG0HOFS = sTransitionData->BG0HOFS_Lower; else - REG_BG0HOFS = sTransitionStructPtr->BG0HOFS_2; + REG_BG0HOFS = sTransitionData->BG0HOFS_Upper; } -// data fields for player/opponent sprites in mugshots -#define sState data[0] -#define sOffsetX data[1] -#define sOffsetX2 data[2] -#define sDone data[6] -#define sSlideTableId data[7] - -static void Mugshots_CreateOpponentPlayerSprites(struct Task *task) +static void Mugshots_CreateTrainerPics(struct Task *task) { struct Sprite *opponentSprite, *playerSprite; s16 mugshotId = task->tMugshotId; task->tOpponentSpriteId = CreateTrainerSprite(sMugshotsTrainerPicIDsTable[mugshotId], - sMugshotsOpponentCoords[mugshotId][0] - 32, - sMugshotsOpponentCoords[mugshotId][1] + 42, - 0, gDecompressionBuffer); - task->tPlayerSpriteId = CreateTrainerSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), DISPLAY_WIDTH + 32, 106, 0, gDecompressionBuffer); + sMugshotsOpponentCoords[mugshotId][0] - 32, + sMugshotsOpponentCoords[mugshotId][1] + 42, + 0, gDecompressionBuffer); + task->tPlayerSpriteId = CreateTrainerSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), + DISPLAY_WIDTH + 32, + 106, + 0, gDecompressionBuffer); opponentSprite = &gSprites[task->tOpponentSpriteId]; playerSprite = &gSprites[task->tPlayerSpriteId]; - opponentSprite->callback = SpriteCb_TrainerPic; - playerSprite->callback = SpriteCb_TrainerPic; + opponentSprite->callback = SpriteCB_MugshotTrainerPic; + playerSprite->callback = SpriteCB_MugshotTrainerPic; opponentSprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; playerSprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; @@ -2411,68 +2614,75 @@ static void Mugshots_CreateOpponentPlayerSprites(struct Task *task) SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 512, 0); } -static void SpriteCb_TrainerPic(struct Sprite *sprite) +static void SpriteCB_MugshotTrainerPic(struct Sprite *sprite) { - while (sTrainerPicSpriteCbs[sprite->sState](sprite)); + while (sMugshotTrainerPicFuncs[sprite->sState](sprite)); } -static bool8 TrainerPicCb_Nothing(struct Sprite *sprite) +// Wait until IncrementTrainerPicState is called +static bool8 MugshotTrainerPic_Pause(struct Sprite *sprite) { return FALSE; } -static bool8 TrainerPicCb_SetSlideOffsets(struct Sprite *sprite) +static bool8 MugshotTrainerPic_Init(struct Sprite *sprite) { - s16 offfsets1[ARRAY_COUNT(sTrainerPicSlideOffsets1)]; - s16 offfsets2[ARRAY_COUNT(sTrainerPicSlideOffsets2)]; + s16 speeds[ARRAY_COUNT(sTrainerPicSlideSpeeds)]; + s16 accels[ARRAY_COUNT(sTrainerPicSlideAccels)]; - memcpy(offfsets1, sTrainerPicSlideOffsets1, sizeof(sTrainerPicSlideOffsets1)); - memcpy(offfsets2, sTrainerPicSlideOffsets2, sizeof(sTrainerPicSlideOffsets2)); + memcpy(speeds, sTrainerPicSlideSpeeds, sizeof(sTrainerPicSlideSpeeds)); + memcpy(accels, sTrainerPicSlideAccels, sizeof(sTrainerPicSlideAccels)); sprite->sState++; - sprite->sOffsetX = offfsets1[sprite->sSlideTableId]; - sprite->sOffsetX2 = offfsets2[sprite->sSlideTableId]; + sprite->sSlideSpeed = speeds[sprite->sSlideDir]; + sprite->sSlideAccel = accels[sprite->sSlideDir]; return TRUE; } -// fast slide to around middle screen -static bool8 TrainerPicCb_Slide1(struct Sprite *sprite) +static bool8 MugshotTrainerPic_Slide(struct Sprite *sprite) { - sprite->x += sprite->sOffsetX; - if (sprite->sSlideTableId && sprite->x < 133) + sprite->x += sprite->sSlideSpeed; + + // Advance state when pic passes ~40% of screen + if (sprite->sSlideDir && sprite->x < DISPLAY_WIDTH - 107) sprite->sState++; - else if (!sprite->sSlideTableId && sprite->x > 103) + else if (!sprite->sSlideDir && sprite->x > 103) sprite->sState++; return FALSE; } -// slower but accelerating slide -static bool8 TrainerPicCb_Slide2(struct Sprite *sprite) +static bool8 MugshotTrainerPic_SlideSlow(struct Sprite *sprite) { - sprite->sOffsetX += sprite->sOffsetX2; - sprite->x += sprite->sOffsetX; - if (sprite->sOffsetX == 0) + // Add acceleration value to speed, then add speed. + // For both sides acceleration is opposite speed, so slide slows down. + sprite->sSlideSpeed += sprite->sSlideAccel; + sprite->x += sprite->sSlideSpeed; + + // Advance state when slide comes to a stop + if (sprite->sSlideSpeed == 0) { sprite->sState++; - sprite->sOffsetX2 = -sprite->sOffsetX2; + sprite->sSlideAccel = -sprite->sSlideAccel; sprite->sDone = TRUE; } return FALSE; } -// Has no practical effect -static bool8 TrainerPicCb_Slide3(struct Sprite *sprite) +// Slides trainer pic offscreen. This is never reached, because it's preceded +// by a second MugshotTrainerPic_Pause, and IncrementTrainerPicState is +// only called once per trainer pic. +static bool8 MugshotTrainerPic_SlideOffscreen(struct Sprite *sprite) { - sprite->sOffsetX += sprite->sOffsetX2; - sprite->x += sprite->sOffsetX; - if (sprite->x < -31 || sprite->x > 271) + sprite->sSlideSpeed += sprite->sSlideAccel; + sprite->x += sprite->sSlideSpeed; + if (sprite->x < -31 || sprite->x > DISPLAY_WIDTH + 31) sprite->sState++; return FALSE; } -static void SetTrainerPicSlideTable(s16 spriteId, s16 arrId) +static void SetTrainerPicSlideDirection(s16 spriteId, s16 dirId) { - gSprites[spriteId].sSlideTableId = arrId; + gSprites[spriteId].sSlideDir = dirId; } static void IncrementTrainerPicState(s16 spriteId) @@ -2486,106 +2696,124 @@ static s16 IsTrainerPicSlideDone(s16 spriteId) } #undef sState -#undef sOffsetX -#undef sOffsetX2 +#undef sSlideSpeed +#undef sSlideAccel #undef sDone -#undef sSlideTableId +#undef sSlideDir +#undef tSinIndex +#undef tTopBannerX +#undef tBottomBannerX +#undef tTimer +#undef tFadeSpread +#undef tOpponentSpriteId +#undef tPlayerSpriteId +#undef tMugshotId -static void Phase2Task_Slice(u8 taskId) +//-------------------- +// B_TRANSITION_SLICE +//-------------------- + +#define tEffectX data[1] +#define tSpeed data[2] +#define tAccel data[3] + +static void Task_Slice(u8 taskId) { - while (sPhase2_Slice_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sSlice_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Slice_Func1(struct Task *task) +static bool8 Slice_Init(struct Task *task) { u16 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - task->tData2 = 256; - task->tData3 = 1; - sTransitionStructPtr->WININ = WININ_WIN0_ALL; - sTransitionStructPtr->WINOUT = 0; - sTransitionStructPtr->WIN0V = DISPLAY_HEIGHT; - sTransitionStructPtr->VBlank_DMA = FALSE; + task->tSpeed = 1 << 8; + task->tAccel = 1; + sTransitionData->WININ = WININ_WIN0_ALL; + sTransitionData->WINOUT = 0; + sTransitionData->WIN0V = DISPLAY_HEIGHT; + sTransitionData->VBlank_DMA = FALSE; - for (i = 0; i < 160; i++) + for (i = 0; i < DISPLAY_HEIGHT; i++) { - gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->field_14; - gScanlineEffectRegBuffers[1][160 + i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = sTransitionData->cameraX; + gScanlineEffectRegBuffers[1][DISPLAY_HEIGHT + i] = DISPLAY_WIDTH; } EnableInterrupts(INTR_FLAG_HBLANK); SetGpuRegBits(REG_OFFSET_DISPSTAT, DISPSTAT_HBLANK_INTR); - SetVBlankCallback(VBlankCB_Phase2_Slice); - SetHBlankCallback(HBlankCB_Phase2_Slice); + SetVBlankCallback(VBlankCB_Slice); + SetHBlankCallback(HBlankCB_Slice); task->tState++; return TRUE; } -static bool8 Phase2_Slice_Func2(struct Task *task) +static bool8 Slice_Main(struct Task *task) { u16 i; - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; - task->tData1 += (task->tData2 >> 8); - if (task->tData1 > 0xF0) - task->tData1 = 0xF0; - if (task->tData2 <= 0xFFF) - task->tData2 += task->tData3; - if (task->tData3 < 128) - task->tData3 <<= 1; // multiplying by two + task->tEffectX += (task->tSpeed >> 8); + if (task->tEffectX > DISPLAY_WIDTH) + task->tEffectX = DISPLAY_WIDTH; + if (task->tSpeed <= 0xFFF) + task->tSpeed += task->tAccel; + if (task->tAccel < 128) + task->tAccel <<= 1; // multiplying by two - for (i = 0; i < 160; i++) + for (i = 0; i < DISPLAY_HEIGHT; i++) { u16 *storeLoc1 = &gScanlineEffectRegBuffers[0][i]; - u16 *storeLoc2 = &gScanlineEffectRegBuffers[0][i + 160]; - if (i & 1) + u16 *storeLoc2 = &gScanlineEffectRegBuffers[0][i + DISPLAY_HEIGHT]; + + // Alternate rows + if (i % 2) { - *storeLoc1 = sTransitionStructPtr->field_14 + task->tData1; - *storeLoc2 = 0xF0 - task->tData1; + *storeLoc1 = sTransitionData->cameraX + task->tEffectX; + *storeLoc2 = DISPLAY_WIDTH - task->tEffectX; } else { - *storeLoc1 = sTransitionStructPtr->field_14 - task->tData1; - *storeLoc2 = (task->tData1 << 8) | (0xF1); + *storeLoc1 = sTransitionData->cameraX - task->tEffectX; + *storeLoc2 = (task->tEffectX << 8) | (DISPLAY_WIDTH + 1); } } - if (task->tData1 > 0xEF) + if (task->tEffectX >= DISPLAY_WIDTH) task->tState++; - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Slice_Func3(struct Task *task) +static bool8 Slice_End(struct Task *task) { DmaStop(0); FadeScreenBlack(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Slice)); + DestroyTask(FindTaskIdByFunc(Task_Slice)); return FALSE; } -static void VBlankCB_Phase2_Slice(void) +static void VBlankCB_Slice(void) { DmaStop(0); VBlankCB_BattleTransition(); - REG_WININ = sTransitionStructPtr->WININ; - REG_WINOUT = sTransitionStructPtr->WINOUT; - REG_WIN0V = sTransitionStructPtr->WIN0V; - if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); - DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, 0xA2400001); + REG_WININ = sTransitionData->WININ; + REG_WINOUT = sTransitionData->WINOUT; + REG_WIN0V = sTransitionData->WIN0V; + if (sTransitionData->VBlank_DMA) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 4); + DmaSet(0, &gScanlineEffectRegBuffers[1][DISPLAY_HEIGHT], ®_WIN0H, B_TRANS_DMA_FLAGS); } -static void HBlankCB_Phase2_Slice(void) +static void HBlankCB_Slice(void) { - if (REG_VCOUNT < 160) + if (REG_VCOUNT < DISPLAY_HEIGHT) { u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1HOFS = var; @@ -2594,77 +2822,92 @@ static void HBlankCB_Phase2_Slice(void) } } -static void Phase2Task_ShredSplit(u8 taskId) +#undef tEffectX +#undef tSpeed +#undef tAccel + +//-------------------------- +// B_TRANSITION_SHRED_SPLIT +//-------------------------- + +// Data starts at 4. Possible it shared data +// with Slice above, which ends at 3. +#define tDelayTimer data[4] +#define tExtent data[5] +#define tDelay data[6] + +static void Task_ShredSplit(u8 taskId) { - while (sPhase2_ShredSplit_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sShredSplit_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_ShredSplit_Func1(struct Task *task) +static bool8 ShredSplit_Init(struct Task *task) { u16 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->WININ = WININ_WIN0_ALL; - sTransitionStructPtr->WINOUT = 0; - sTransitionStructPtr->WIN0V = DISPLAY_HEIGHT; + sTransitionData->WININ = WININ_WIN0_ALL; + sTransitionData->WINOUT = 0; + sTransitionData->WIN0V = DISPLAY_HEIGHT; - for (i = 0; i < 0xA0; i++) + for (i = 0; i < DISPLAY_HEIGHT; i++) { - gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->field_14; - gScanlineEffectRegBuffers[1][0xA0 + i] = 0xF0; - gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_14; - gScanlineEffectRegBuffers[0][0xA0 + i] = 0xF0; - gScanlineEffectRegBuffers[0][0x140 + i] = 0; - gScanlineEffectRegBuffers[0][0x1E0 + i] = 0x100; - gScanlineEffectRegBuffers[0][0x280 + i] = 1; + gScanlineEffectRegBuffers[1][i] = sTransitionData->cameraX; + gScanlineEffectRegBuffers[1][DISPLAY_HEIGHT + i] = DISPLAY_WIDTH; + gScanlineEffectRegBuffers[0][i] = sTransitionData->cameraX; + gScanlineEffectRegBuffers[0][DISPLAY_HEIGHT + i] = DISPLAY_WIDTH; + gScanlineEffectRegBuffers[0][DISPLAY_HEIGHT * 2 + i] = 0; + gScanlineEffectRegBuffers[0][DISPLAY_HEIGHT * 3 + i] = 256; + gScanlineEffectRegBuffers[0][DISPLAY_HEIGHT * 4 + i] = 1; } - task->tData4 = 0; - task->tData5 = 0; - task->tData6 = 7; + task->tDelayTimer = 0; + task->tExtent = 0; + task->tDelay = 7; EnableInterrupts(INTR_FLAG_HBLANK); - SetVBlankCallback(VBlankCB_Phase2_Slice); - SetHBlankCallback(HBlankCB_Phase2_Slice); + SetVBlankCallback(VBlankCB_Slice); + SetHBlankCallback(HBlankCB_Slice); task->tState++; return TRUE; } -static bool8 Phase2_ShredSplit_Func2(struct Task *task) +static bool8 ShredSplit_Main(struct Task *task) { u16 i, j, k; - u8 arr1[ARRAY_COUNT(gUnknown_085C8C64)]; - s16 arr2[ARRAY_COUNT(gUnknown_085C8C66)]; - u8 var; + u8 baseY[ARRAY_COUNT(sShredSplit_SectionYCoords)]; + s16 moveDirs[ARRAY_COUNT(sShredSplit_SectionMoveDirs)]; + u8 linesFinished; u16 *ptr4, *ptr3, *ptr1, *ptr2; - s16 unkVar; + s16 y; - memcpy(arr1, gUnknown_085C8C64, sizeof(arr1)); - memcpy(arr2, gUnknown_085C8C66, sizeof(arr2)); + memcpy(baseY, sShredSplit_SectionYCoords, sizeof(baseY)); + memcpy(moveDirs, sShredSplit_SectionMoveDirs, sizeof(moveDirs)); - sTransitionStructPtr->VBlank_DMA = FALSE; - var = 0; + sTransitionData->VBlank_DMA = FALSE; + linesFinished = 0; - for (i = 0; i <= task->tData5; i++) + for (i = 0; i <= task->tExtent; i++) { + // Slide half of the pixel rows (alternating) right for (j = 0; j < 2; j++) { for (k = 0; k < 2; k++) { - unkVar = (arr1[j]) + (arr2[k] * -(i) * 2); - if (unkVar >= 0 && (unkVar != 79 || j != 1)) + y = baseY[j] + (moveDirs[k] * -i * 2); + if (y >= 0 && (y != DISPLAY_HEIGHT / 2 - 1 || j != 1)) { - ptr4 = &gScanlineEffectRegBuffers[0][unkVar + 320]; - ptr3 = &gScanlineEffectRegBuffers[0][unkVar + 480]; - ptr1 = &gScanlineEffectRegBuffers[0][unkVar + 640]; - if (*ptr4 > 0xEF) + ptr4 = &gScanlineEffectRegBuffers[0][y + DISPLAY_HEIGHT * 2]; + ptr3 = &gScanlineEffectRegBuffers[0][y + DISPLAY_HEIGHT * 3]; + ptr1 = &gScanlineEffectRegBuffers[0][y + DISPLAY_HEIGHT * 4]; + if (*ptr4 >= DISPLAY_WIDTH) { - *ptr4 = 0xF0; - var++; + *ptr4 = DISPLAY_WIDTH; + linesFinished++; } else { @@ -2674,10 +2917,10 @@ static bool8 Phase2_ShredSplit_Func2(struct Task *task) if (*ptr3 <= 0xFFF) *ptr3 += *ptr1; } - ptr2 = &gScanlineEffectRegBuffers[0][unkVar]; - ptr3 = &gScanlineEffectRegBuffers[0][unkVar + 160]; - *ptr2 = sTransitionStructPtr->field_14 + *ptr4; - *ptr3 = 0xF0 - *ptr4; + ptr2 = &gScanlineEffectRegBuffers[0][y]; + ptr3 = &gScanlineEffectRegBuffers[0][y + DISPLAY_HEIGHT]; + *ptr2 = sTransitionData->cameraX + *ptr4; + *ptr3 = DISPLAY_WIDTH - *ptr4; if (i == 0) break; @@ -2685,20 +2928,21 @@ static bool8 Phase2_ShredSplit_Func2(struct Task *task) } } + // Slide the other half of the rows left for (j = 0; j < 2; j++) { for (k = 0; k < 2; k++) { - unkVar = (arr1[j] + 1) + (arr2[k] * -(i) * 2); - if (unkVar <= 160 && (unkVar != 80 || j != 1)) + y = baseY[j] + 1 + (moveDirs[k] * -i * 2); + if (y <= DISPLAY_HEIGHT && (y != DISPLAY_HEIGHT / 2 || j != 1)) { - ptr4 = &gScanlineEffectRegBuffers[0][unkVar + 320]; - ptr3 = &gScanlineEffectRegBuffers[0][unkVar + 480]; - ptr1 = &gScanlineEffectRegBuffers[0][unkVar + 640]; - if (*ptr4 > 0xEF) + ptr4 = &gScanlineEffectRegBuffers[0][y + DISPLAY_HEIGHT * 2]; + ptr3 = &gScanlineEffectRegBuffers[0][y + DISPLAY_HEIGHT * 3]; + ptr1 = &gScanlineEffectRegBuffers[0][y + DISPLAY_HEIGHT * 4]; + if (*ptr4 >= DISPLAY_WIDTH) { - *ptr4 = 0xF0; - var++; + *ptr4 = DISPLAY_WIDTH; + linesFinished++; } else { @@ -2708,10 +2952,10 @@ static bool8 Phase2_ShredSplit_Func2(struct Task *task) if (*ptr3 <= 0xFFF) *ptr3 += *ptr1; } - ptr2 = &gScanlineEffectRegBuffers[0][unkVar]; - ptr3 = &gScanlineEffectRegBuffers[0][unkVar + 160]; - *ptr2 = sTransitionStructPtr->field_14 - *ptr4; - *ptr3 = (*ptr4 << 8) | (0xF1); + ptr2 = &gScanlineEffectRegBuffers[0][y]; + ptr3 = &gScanlineEffectRegBuffers[0][y + DISPLAY_HEIGHT]; + *ptr2 = sTransitionData->cameraX - *ptr4; + *ptr3 = (*ptr4 << 8) | (DISPLAY_WIDTH + 1); if (i == 0) break; @@ -2720,14 +2964,22 @@ static bool8 Phase2_ShredSplit_Func2(struct Task *task) } } - if (--task->tData4 < 0) - task->tData4 = 0; - if (task->tData4 <= 0 && task->tData5 + 1 <= 20) - task->tData4 = task->tData6, task->tData5++; - if (var > 0x9F) + // Count down to next move + if (--task->tDelayTimer < 0) + task->tDelayTimer = 0; + + // Try increase effect's extent + if (task->tDelayTimer <= 0 && task->tExtent + 1 <= DISPLAY_HEIGHT / 8) + { + task->tDelayTimer = task->tDelay; + task->tExtent++; + } + + // All lines have reached screen width, move on. + if (linesFinished >= DISPLAY_HEIGHT) task->tState++; - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } @@ -2735,16 +2987,17 @@ static bool8 Phase2_ShredSplit_Func2(struct Task *task) // 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. -static bool8 Phase2_ShredSplit_Func3(struct Task *task) +// 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 < 0xA0; i++) + for (i = 0; i < DISPLAY_HEIGHT; i++) { - if (gScanlineEffectRegBuffers[1][i] != 0xF0 && gScanlineEffectRegBuffers[1][i] != checkVar2) - done = FALSE; // a break statement should be put here + if (gScanlineEffectRegBuffers[1][i] != DISPLAY_WIDTH && gScanlineEffectRegBuffers[1][i] != checkVar2) + done = FALSE; } if (done == TRUE) @@ -2753,54 +3006,68 @@ static bool8 Phase2_ShredSplit_Func3(struct Task *task) return FALSE; } -static bool8 Phase2_ShredSplit_Func4(struct Task *task) +static bool8 ShredSplit_End(struct Task *task) { DmaStop(0); FadeScreenBlack(); - DestroyTask(FindTaskIdByFunc(Phase2Task_ShredSplit)); + DestroyTask(FindTaskIdByFunc(Task_ShredSplit)); return FALSE; } -static void Phase2Task_Blackhole1(u8 taskId) +#undef tDelayTimer +#undef tExtent +#undef tDelay + +//----------------------------------------------------------- +// B_TRANSITION_BLACKHOLE and B_TRANSITION_BLACKHOLE_PULSATE +//----------------------------------------------------------- + +#define tRadius data[1] +#define tGrowSpeed data[2] +#define tSinIndex data[5] +#define tVibrateId data[6] +#define tAmplitude data[6] // Used differently by the two transitions +#define tFlag data[7] // Used generally to indicate an action has taken place. + +static void Task_Blackhole(u8 taskId) { - while (sPhase2_Blackhole1_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sBlackhole_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void Phase2Task_Blackhole2(u8 taskId) +static void Task_BlackholePulsate(u8 taskId) { - while (sPhase2_Blackhole2_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sBlackholePulsate_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Blackhole_Func1(struct Task *task) +// Init is shared by both transitions +static bool8 Blackhole_Init(struct Task *task) { s32 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->WININ = 0; - sTransitionStructPtr->WINOUT = WINOUT_WIN01_ALL; - sTransitionStructPtr->WIN0H = DISPLAY_WIDTH; - sTransitionStructPtr->WIN0V = DISPLAY_HEIGHT; + sTransitionData->WININ = 0; + sTransitionData->WINOUT = WINOUT_WIN01_ALL; + sTransitionData->WIN0H = DISPLAY_WIDTH; + sTransitionData->WIN0V = DISPLAY_HEIGHT; - for (i = 0; i < 0xA0; i++) - { + for (i = 0; i < DISPLAY_HEIGHT; i++) gScanlineEffectRegBuffers[1][i] = 0; - } - SetVBlankCallback(VBlankCB1_Phase2_BigPokeball); + SetVBlankCallback(VBlankCB_CircularMask); task->tState++; - task->tData1 = 1; - task->tData2 = 0x100; - task->tFuncState = 0; + task->tRadius = 1; + task->tGrowSpeed = 1 << 8; + task->tFlag = FALSE; return FALSE; } -static bool8 Phase2_Blackhole1_Func3(struct Task *task) +static bool8 Blackhole_GrowEnd(struct Task *task) { - if (task->tFuncState == 1) + if (task->tFlag == TRUE) { DmaStop(0); SetVBlankCallback(NULL); @@ -2808,141 +3075,161 @@ static bool8 Phase2_Blackhole1_Func3(struct Task *task) } else { - sTransitionStructPtr->VBlank_DMA = FALSE; - if (task->tData2 < 0x400) - task->tData2 += 0x80; - if (task->tData1 < 0xA0) - task->tData1 += (task->tData2 >> 8); - if (task->tData1 > 0xA0) - task->tData1 = 0xA0; - sub_814A014(gScanlineEffectRegBuffers[0], 0x78, 0x50, task->tData1); - if (task->tData1 == 0xA0) + sTransitionData->VBlank_DMA = FALSE; + if (task->tGrowSpeed < 1024) + task->tGrowSpeed += 128; + if (task->tRadius < DISPLAY_HEIGHT) + task->tRadius += task->tGrowSpeed >> 8; + if (task->tRadius > DISPLAY_HEIGHT) + task->tRadius = DISPLAY_HEIGHT; + SetCircularMask(gScanlineEffectRegBuffers[0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, task->tRadius); + if (task->tRadius == DISPLAY_HEIGHT) { - task->tFuncState = 1; + task->tFlag = TRUE; FadeScreenBlack(); } else { - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; } } return FALSE; } -static bool8 Phase2_Blackhole1_Func2(struct Task *task) +static bool8 Blackhole_Vibrate(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = FALSE; - if (task->tFuncState == 0) + sTransitionData->VBlank_DMA = FALSE; + if (task->tFlag == FALSE) { - task->tFuncState++; - task->tData1 = 0x30; - task->tData6 = 0; + task->tFlag++; + task->tRadius = 48; + task->tVibrateId = 0; } - task->tData1 += gUnknown_085C8C80[task->tData6]; - task->tData6 = (task->tData6 + 1) % 2; - sub_814A014(gScanlineEffectRegBuffers[0], 0x78, 0x50, task->tData1); - if (task->tData1 < 9) + task->tRadius += sBlackhole_Vibrations[task->tVibrateId]; + task->tVibrateId = (task->tVibrateId + 1) % (int)ARRAY_COUNT(sBlackhole_Vibrations); + SetCircularMask(gScanlineEffectRegBuffers[0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, task->tRadius); + if (task->tRadius < 9) { task->tState++; - task->tFuncState = 0; + task->tFlag = FALSE; } - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Blackhole2_Func2(struct Task *task) +static bool8 BlackholePulsate_Main(struct Task *task) { u16 index; // should be s16 I think s16 amplitude; - sTransitionStructPtr->VBlank_DMA = FALSE; - if (task->tFuncState == 0) + sTransitionData->VBlank_DMA = FALSE; + if (task->tFlag == FALSE) { - task->tFuncState++; - task->tData5 = 2; - task->tData6 = 2; + task->tFlag++; + task->tSinIndex = 2; + task->tAmplitude = 2; } - if (task->tData1 > 0xA0) - task->tData1 = 0xA0; - sub_814A014(gScanlineEffectRegBuffers[0], 0x78, 0x50, task->tData1); - if (task->tData1 == 0xA0) + if (task->tRadius > DISPLAY_HEIGHT) + task->tRadius = DISPLAY_HEIGHT; + + SetCircularMask(gScanlineEffectRegBuffers[0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, task->tRadius); + if (task->tRadius == DISPLAY_HEIGHT) { DmaStop(0); FadeScreenBlack(); DestroyTask(FindTaskIdByFunc(task->func)); } - index = task->tData5; - if ((task->tData5 & 0xFF) <= 128) + index = task->tSinIndex; + if ((task->tSinIndex & 0xFF) <= 128) { - amplitude = task->tData6; - task->tData5 += 8; + amplitude = task->tAmplitude; + task->tSinIndex += 8; } else { - amplitude = task->tData6 - 1; - task->tData5 += 16; + amplitude = task->tAmplitude - 1; + task->tSinIndex += 16; } - task->tData1 += Sin(index & 0xFF, amplitude); + task->tRadius += Sin(index & 0xFF, amplitude); - if (task->tData1 <= 0) - task->tData1 = 1; - if (task->tData5 > 0xFE) - task->tData5 >>= 8, task->tData6++; + if (task->tRadius <= 0) + task->tRadius = 1; - sTransitionStructPtr->VBlank_DMA++; + if (task->tSinIndex >= 0xFF) + { + task->tSinIndex >>= 8; + task->tAmplitude++; + } + + sTransitionData->VBlank_DMA++; return FALSE; } -static void Phase2Task_RectangularSpiral(u8 taskId) +#undef tRadius +#undef tGrowSpeed +#undef tSinIndex +#undef tVibrateId +#undef tAmplitude +#undef tFlag + +//--------------------------------- +// B_TRANSITION_RECTANGULAR_SPIRAL +//--------------------------------- + +static void Task_RectangularSpiral(u8 taskId) { - while (sPhase2_RectangularSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sRectangularSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_RectangularSpiral_Func1(struct Task *task) +static bool8 RectangularSpiral_Init(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); CpuCopy16(sShrinkingBoxTileset, tileset, 0x20); - CpuCopy16(sShrinkingBoxTileset + 0x70, tileset + 0x20, 0x20); - CpuFill16(0xF000, tilemap, 0x800); - LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20); + CpuCopy16(&sShrinkingBoxTileset[0x70], &tileset[0x20], 0x20); + CpuFill16(0xF0 << 8, tilemap, BG_SCREEN_SIZE); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); - task->tData3 = 1; + task->data[3] = 1; task->tState++; - sRectangularSpiralTransition[0].field_0 = 0; - sRectangularSpiralTransition[0].field_2 = -1; - sRectangularSpiralTransition[0].field_4 = 1; - sRectangularSpiralTransition[0].field_6 = 308; - sRectangularSpiralTransition[0].field_8 = 0; + // Line starting in top left + sRectangularSpiralLines[0].state = SPIRAL_INWARD_START; + sRectangularSpiralLines[0].position = -1; + sRectangularSpiralLines[0].moveIdx = 1; + sRectangularSpiralLines[0].reboundPosition = 308; + sRectangularSpiralLines[0].outward = FALSE; - sRectangularSpiralTransition[1].field_0 = 0; - sRectangularSpiralTransition[1].field_2 = -1; - sRectangularSpiralTransition[1].field_4 = 1; - sRectangularSpiralTransition[1].field_6 = 308; - sRectangularSpiralTransition[1].field_8 = 0; + // Line starting in bottom right + sRectangularSpiralLines[1].state = SPIRAL_INWARD_START; + sRectangularSpiralLines[1].position = -1; + sRectangularSpiralLines[1].moveIdx = 1; + sRectangularSpiralLines[1].reboundPosition = 308; + sRectangularSpiralLines[1].outward = FALSE; - sRectangularSpiralTransition[2].field_0 = 0; - sRectangularSpiralTransition[2].field_2 = -3; - sRectangularSpiralTransition[2].field_4 = 1; - sRectangularSpiralTransition[2].field_6 = 307; - sRectangularSpiralTransition[2].field_8 = 0; + // Line starting in top right + sRectangularSpiralLines[2].state = SPIRAL_INWARD_START; + sRectangularSpiralLines[2].position = -3; + sRectangularSpiralLines[2].moveIdx = 1; + sRectangularSpiralLines[2].reboundPosition = 307; + sRectangularSpiralLines[2].outward = FALSE; - sRectangularSpiralTransition[3].field_0 = 0; - sRectangularSpiralTransition[3].field_2 = -3; - sRectangularSpiralTransition[3].field_4 = 1; - sRectangularSpiralTransition[3].field_6 = 307; - sRectangularSpiralTransition[3].field_8 = 0; + // Line starting in bottom left + sRectangularSpiralLines[3].state = SPIRAL_INWARD_START; + sRectangularSpiralLines[3].position = -3; + sRectangularSpiralLines[3].moveIdx = 1; + sRectangularSpiralLines[3].reboundPosition = 307; + sRectangularSpiralLines[3].outward = FALSE; return FALSE; } -static bool8 Phase2_RectangularSpiral_Func2(struct Task *task) +static bool8 RectangularSpiral_Main(struct Task *task) { u16 *tilemap, *tileset; u8 i; @@ -2951,24 +3238,28 @@ static bool8 Phase2_RectangularSpiral_Func2(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); + // Draw 2 tiles at a time for each spiral line for (i = 0; i < 2; i++) { - for (j = 0; j < ARRAY_COUNT(sRectangularSpiralTransition); j++) + for (j = 0; j < ARRAY_COUNT(sRectangularSpiralLines); j++) { - s16 var = 0, var2 = 0; - s32 var3 = 0; + s16 position = 0; + s16 x = 0, y = 0; - if (sub_8149048(gUnknown_085C8D38[j / 2], &sRectangularSpiralTransition[j])) + if (UpdateRectangularSpiralLine(sRectangularSpiral_MoveDataTables[j / 2], &sRectangularSpiralLines[j])) { + // The line moved to a new position, draw the tile. done = FALSE; - var = sRectangularSpiralTransition[j].field_2; + position = sRectangularSpiralLines[j].position; + + // Invert position for the two lines that start at the bottom. if ((j % 2) == 1) - var = 0x27D - var; + position = 637 - position; - var2 = var % 32; - var3 = var / 32; + x = position % 32; + y = position / 32; - SOME_VRAM_STORE(tilemap, var3, var2, 0xF002); + SET_TILE(tilemap, y, x, 2); } } } @@ -2978,7 +3269,7 @@ static bool8 Phase2_RectangularSpiral_Func2(struct Task *task) return FALSE; } -static bool8 Phase2_RectangularSpiral_Func3(struct Task *task) +static bool8 RectangularSpiral_End(struct Task *task) { DmaStop(0); FadeScreenBlack(); @@ -2986,575 +3277,655 @@ static bool8 Phase2_RectangularSpiral_Func3(struct Task *task) return FALSE; } -static bool16 sub_8149048(const s16 * const *arg0, struct StructRectangularSpiral *arg1) +// Returns TRUE if a tile should be drawn, FALSE otherwise +static bool16 UpdateRectangularSpiralLine(const s16 * const *moveDataTable, struct RectangularSpiralLine *line) { - const s16 *array = arg0[arg1->field_0]; - if (array[arg1->field_4] == -1) + const s16 *moveData = moveDataTable[line->state]; + + // Has spiral finished? + // Note that most move data arrays endsin SPIRAL_END but it is + // only ever reached on the final array of spiraling outward. + if (moveData[line->moveIdx] == SPIRAL_END) return FALSE; - // ?? - sUnusedRectangularSpiralVar = array[0]; - sUnusedRectangularSpiralVar = array[1]; - sUnusedRectangularSpiralVar = array[2]; - sUnusedRectangularSpiralVar = array[3]; + // Presumably saving data for debug. + sDebug_RectangularSpiralData = moveData[0]; + sDebug_RectangularSpiralData = moveData[1]; + sDebug_RectangularSpiralData = moveData[2]; + sDebug_RectangularSpiralData = moveData[3]; - switch (array[0]) + // Note that for the two lines originating at the bottom the + // position is inverted, so the directions are flipped. + // i.e. position += 1 is right for the top lines and left + // for their inverted partners on the bottom. + switch (moveData[0]) { - case 1: - arg1->field_2 += 0x1; + case MOVE_RIGHT: + line->position += 1; break; - case 2: - arg1->field_2 -= 0x1; + case MOVE_LEFT: + line->position -= 1; break; - case 3: - arg1->field_2 -= 0x20; + case MOVE_UP: + line->position -= 32; break; - case 4: - arg1->field_2 += 0x20; + case MOVE_DOWN: + line->position += 32; break; } - if (arg1->field_2 > 0x27F || array[arg1->field_4] == -1) + // Below check is never true. + // SPIRAL_END was already checked, and position is never >= 640 + if (line->position >= 640 || moveData[line->moveIdx] == SPIRAL_END) return FALSE; - if (arg1->field_8 == 0 && array[arg1->field_4] == -2) + if (!line->outward && moveData[line->moveIdx] == SPIRAL_REBOUND) { - arg1->field_8 = 1; - arg1->field_4 = 1; - arg1->field_2 = arg1->field_6; - arg1->field_0 = 4; + // Line has reached the final point of spiraling inward. + // Time to flip and start spiraling outward. + line->outward = TRUE; + line->moveIdx = 1; + line->position = line->reboundPosition; + line->state = SPIRAL_OUTWARD_START; } - if (arg1->field_2 == array[arg1->field_4]) + // Reached move target, advance to next movement. + if (line->position == moveData[line->moveIdx]) { - (arg1->field_0)++; - if (arg1->field_8 == 1) + line->state++; + if (line->outward == TRUE) { - if (arg1->field_0 > 7) + if (line->state > SPIRAL_OUTWARD_END) { - (arg1->field_4)++; - (arg1->field_0) = 4; + // Still spiraling outward, loop back to the first state + // but use the second set of move targets. + // For example, the 28 in sRectangularSpiral_Major_OutwardUp + line->moveIdx++; + line->state = SPIRAL_OUTWARD_START; } } else { - if (arg1->field_0 > 3) + if (line->state > SPIRAL_INWARD_END) { - (arg1->field_4)++; - (arg1->field_0) = 0; + // Still spiraling inward, loop back to the first state + // but use the second set of move targets. + // For example, the 275 in sRectangularSpiral_Major_InwardRight + line->moveIdx++; + line->state = SPIRAL_INWARD_START; } } } - return TRUE; } -static void Phase2Task_Groudon(u8 taskId) +//---------------------- +// B_TRANSITION_GROUDON +//---------------------- + +#define tTimer data[1] + +static void Task_Groudon(u8 taskId) { - while (sPhase2_Groudon_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sGroudon_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Groudon_Func3(struct Task *task) +static bool8 Groudon_Init(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - CpuFill16(0, tilemap, 0x800); + CpuFill16(0, tilemap, BG_SCREEN_SIZE); LZ77UnCompVram(sGroudon_Tileset, tileset); LZ77UnCompVram(sGroudon_Tilemap, tilemap); task->tState++; - task->tData1 = 0; + task->tTimer = 0; return FALSE; } -static bool8 Phase2_Groudon_Func4(struct Task *task) +static bool8 Groudon_PaletteFlash(struct Task *task) { - if (task->tData1 % 3 == 0) + if (task->tTimer % 3 == 0) { - u16 var = (task->tData1 % 30) / 3; - LoadPalette(sGroudon1_Palette + (var * 16), 0xF0, 0x20); + u16 offset = (task->tTimer % 30) / 3; + LoadPalette(&sGroudon1_Palette[offset * 16], 0xF0, 0x20); } - if (++task->tData1 > 58) + if (++task->tTimer > 58) { task->tState++; - task->tData1 = 0; + task->tTimer = 0; } return FALSE; } -static bool8 Phase2_Groudon_Func5(struct Task *task) +static bool8 Groudon_PaletteBrighten(struct Task *task) { - if (task->tData1 % 5 == 0) + if (task->tTimer % 5 == 0) { - s16 var = task->tData1 / 5; - LoadPalette(sGroudon2_Palette + (var * 16), 0xF0, 0x20); + s16 offset = task->tTimer / 5; + LoadPalette(&sGroudon2_Palette[offset * 16], 0xF0, 0x20); } - if (++task->tData1 > 68) + if (++task->tTimer > 68) { task->tState++; - task->tData1 = 0; - task->tFrames = 30; + task->tTimer = 0; + task->tEndDelay = 30; } return FALSE; } -static void Phase2Task_Rayquaza(u8 taskId) +#undef tTimer +#undef tEndDelay + +//----------------------- +// B_TRANSITION_RAYQUAZA +//----------------------- + +#define tTimer data[1] +#define tGrowSpeed data[2] // Shared from B_TRANSITION_BLACKHOLE +#define tFlag data[7] // Shared from B_TRANSITION_BLACKHOLE + +static void Task_Rayquaza(u8 taskId) { - while (sPhase2_Rayquaza_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sRayquaza_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Rayquaza_Func3(struct Task *task) +static bool8 Rayquaza_Init(struct Task *task) { u16 *tilemap, *tileset; u16 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(26) | BGCNT_TXT256x512); GetBg0TilesDst(&tilemap, &tileset); - CpuFill16(0, tilemap, 0x800); + CpuFill16(0, tilemap, BG_SCREEN_SIZE); CpuCopy16(sRayquaza_Tileset, tileset, 0x2000); - sTransitionStructPtr->field_20 = 0; + sTransitionData->counter = 0; task->tState++; - LoadPalette(sRayquaza_Palette + 0x50, 0xF0, 0x20); + LoadPalette(&sRayquaza_Palette[0x50], 0xF0, 0x20); - for (i = 0; i < 160; i++) + for (i = 0; i < DISPLAY_HEIGHT; i++) { gScanlineEffectRegBuffers[0][i] = 0; gScanlineEffectRegBuffers[1][i] = 0x100; } - SetVBlankCallback(VBlankCB_Phase2_Rayquaza); + SetVBlankCallback(VBlankCB_Rayquaza); return FALSE; } -static bool8 Phase2_Rayquaza_Func4(struct Task *task) +static bool8 Rayquaza_SetGfx(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - CpuCopy16(sRayquaza_Tilemap, tilemap, 0x1000); + CpuCopy16(sRayquaza_Tilemap, tilemap, sizeof(sRayquaza_Tilemap)); task->tState++; return FALSE; } -static bool8 Phase2_Rayquaza_Func5(struct Task *task) +static bool8 Rayquaza_PaletteFlash(struct Task *task) { - if ((task->tData1 % 4) == 0) + if ((task->tTimer % 4) == 0) { - u16 value = task->tData1 / 4; + u16 value = task->tTimer / 4; const u16 *palPtr = &sRayquaza_Palette[(value + 5) * 16]; LoadPalette(palPtr, 0xF0, 0x20); } - if (++task->tData1 > 40) + if (++task->tTimer > 40) { task->tState++; - task->tData1 = 0; + task->tTimer = 0; } return FALSE; } -static bool8 Phase2_Rayquaza_Func6(struct Task *task) +static bool8 Rayquaza_FadeToBlack(struct Task *task) { - if (++task->tData1 > 20) + if (++task->tTimer > 20) { task->tState++; - task->tData1 = 0; - BeginNormalPaletteFade(PALETTES_OBJECTS | 0x8000, 2, 0, 0x10, RGB_BLACK); + task->tTimer = 0; + BeginNormalPaletteFade(PALETTES_OBJECTS | (1 << 15), 2, 0, 16, RGB_BLACK); } return FALSE; } -static bool8 Phase2_Rayquaza_Func7(struct Task *task) +static bool8 Rayquaza_WaitFade(struct Task *task) { if (!gPaletteFade.active) { - sTransitionStructPtr->field_20 = 1; + sTransitionData->counter = 1; task->tState++; } - return FALSE; } -static bool8 Phase2_Rayquaza_Func8(struct Task *task) +static bool8 Rayquaza_SetBlack(struct Task *task) { - BlendPalettes(PALETTES_BG & ~(0x8000), 8, 0); - BlendPalettes(PALETTES_OBJECTS | 0x8000, 0, 0); + BlendPalettes(PALETTES_BG & ~(1 << 15), 8, RGB_BLACK); + BlendPalettes(PALETTES_OBJECTS | (1 << 15), 0, RGB_BLACK); task->tState++; return FALSE; } -static bool8 Phase2_Rayquaza_Func9(struct Task *task) +static bool8 Rayquaza_TriRing(struct Task *task) { - if ((task->tData1 % 3) == 0) + if ((task->tTimer % 3) == 0) { - u16 value = task->tData1 / 3; + u16 value = task->tTimer / 3; const u16 *palPtr = &sRayquaza_Palette[(value + 0) * 16]; LoadPalette(palPtr, 0xF0, 0x20); } - if (++task->tData1 >= 40) + if (++task->tTimer >= 40) { u16 i; - sTransitionStructPtr->WININ = 0; - sTransitionStructPtr->WINOUT = WINOUT_WIN01_ALL; - sTransitionStructPtr->WIN0H = DISPLAY_WIDTH; - sTransitionStructPtr->WIN0V = DISPLAY_HEIGHT; + sTransitionData->WININ = 0; + sTransitionData->WINOUT = WINOUT_WIN01_ALL; + sTransitionData->WIN0H = DISPLAY_WIDTH; + sTransitionData->WIN0V = DISPLAY_HEIGHT; - for (i = 0; i < 160; i++) - { + for (i = 0; i < DISPLAY_HEIGHT; i++) gScanlineEffectRegBuffers[1][i] = 0; - } - SetVBlankCallback(VBlankCB1_Phase2_BigPokeball); + SetVBlankCallback(VBlankCB_CircularMask); task->tState++; - task->tData2 = 0x100; - task->tFuncState = 0; + task->tGrowSpeed = 1 << 8; + task->tFlag = FALSE; ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); } return FALSE; } -static void VBlankCB_Phase2_Rayquaza(void) +static void VBlankCB_Rayquaza(void) { void *dmaSrc; DmaStop(0); VBlankCB_BattleTransition(); - if (sTransitionStructPtr->field_20 == 0) + if (sTransitionData->counter == 0) dmaSrc = gScanlineEffectRegBuffers[0]; - else if (sTransitionStructPtr->field_20 == 1) + else if (sTransitionData->counter == 1) dmaSrc = gScanlineEffectRegBuffers[1]; else dmaSrc = gScanlineEffectRegBuffers[0]; - DmaSet(0, dmaSrc, ®_BG0VOFS, 0xA2400001); + DmaSet(0, dmaSrc, ®_BG0VOFS, B_TRANS_DMA_FLAGS); } -static void Phase2Task_WhiteFade(u8 taskId) +#undef tTimer +#undef tGrowSpeed +#undef tFlag + +//------------------------------ +// B_TRANSITION_WHITE_BARS_FADE +//------------------------------ + +#define sFade data[0] +#define sFinished data[1] +#define sDestroyAttempts data[2] +#define sDelay data[5] +#define sIsMainSprite data[6] + +#define FADE_TARGET (16 << 8) + +static void Task_WhiteBarsFade(u8 taskId) { - while (sPhase2_WhiteFade_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sWhiteBarsFade_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_WhiteFade_Func1(struct Task *task) +static bool8 WhiteBarsFade_Init(struct Task *task) { u16 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->BLDCNT = BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN; - sTransitionStructPtr->BLDY = 0; - sTransitionStructPtr->WININ = WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ; - sTransitionStructPtr->WINOUT = WINOUT_WIN01_ALL; - sTransitionStructPtr->WIN0V = DISPLAY_HEIGHT; + sTransitionData->BLDCNT = BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN; + sTransitionData->BLDY = 0; + sTransitionData->WININ = WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ; + sTransitionData->WINOUT = WINOUT_WIN01_ALL; + sTransitionData->WIN0V = DISPLAY_HEIGHT; - for (i = 0; i < 160; i++) + for (i = 0; i < DISPLAY_HEIGHT; i++) { gScanlineEffectRegBuffers[1][i] = 0; - gScanlineEffectRegBuffers[1][i + 160] = 0xF0; + gScanlineEffectRegBuffers[1][i + DISPLAY_HEIGHT] = DISPLAY_WIDTH; } EnableInterrupts(INTR_FLAG_HBLANK); - SetHBlankCallback(HBlankCB_Phase2_WhiteFade); - SetVBlankCallback(VBlankCB0_Phase2_WhiteFade); + SetHBlankCallback(HBlankCB_WhiteBarsFade); + SetVBlankCallback(VBlankCB_WhiteBarsFade); task->tState++; return FALSE; } -static bool8 Phase2_WhiteFade_Func2(struct Task *task) +static bool8 WhiteBarsFade_StartBars(struct Task *task) { s16 i, posY; - s16 arr1[ARRAY_COUNT(sUnknown_085C8DA0)]; + s16 delays[ARRAY_COUNT(sWhiteBarsFade_StartDelays)]; struct Sprite *sprite; + memcpy(delays, sWhiteBarsFade_StartDelays, sizeof(sWhiteBarsFade_StartDelays)); - memcpy(arr1, sUnknown_085C8DA0, sizeof(sUnknown_085C8DA0)); - for (i = 0, posY = 0; i < 8; i++, posY += 0x14) + for (i = 0, posY = 0; i < NUM_WHITE_BARS; i++, posY += DISPLAY_HEIGHT / NUM_WHITE_BARS) { - sprite = &gSprites[CreateInvisibleSprite(sub_8149864)]; - sprite->x = 0xF0; + sprite = &gSprites[CreateInvisibleSprite(SpriteCB_WhiteBarFade)]; + sprite->x = DISPLAY_WIDTH; sprite->y = posY; - sprite->data[5] = arr1[i]; + sprite->sDelay = delays[i]; } - sprite->data[6]++; + + // Set on one sprite only. This one will enable the DMA + // copy in VBlank and wait for the others to destroy. + sprite->sIsMainSprite++; task->tState++; return FALSE; } -static bool8 Phase2_WhiteFade_Func3(struct Task *task) +static bool8 WhiteBarsFade_WaitBars(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = 0; - if (sTransitionStructPtr->field_20 > 7) + sTransitionData->VBlank_DMA = 0; + if (sTransitionData->counter >= NUM_WHITE_BARS) { - BlendPalettes(PALETTES_ALL, 0x10, 0x7FFF); + BlendPalettes(PALETTES_ALL, 16, RGB_WHITE); task->tState++; } return FALSE; } -static bool8 Phase2_WhiteFade_Func4(struct Task *task) +static bool8 WhiteBarsFade_BlendToBlack(struct Task *task) { - sTransitionStructPtr->VBlank_DMA = 0; + sTransitionData->VBlank_DMA = 0; DmaStop(0); SetVBlankCallback(0); SetHBlankCallback(0); - sTransitionStructPtr->WIN0H = DISPLAY_WIDTH; - sTransitionStructPtr->BLDY = 0; - sTransitionStructPtr->BLDCNT = 0xFF; - sTransitionStructPtr->WININ = WININ_WIN0_ALL; + sTransitionData->WIN0H = DISPLAY_WIDTH; + sTransitionData->BLDY = 0; + sTransitionData->BLDCNT = 0xFF; + sTransitionData->WININ = WININ_WIN0_ALL; - SetVBlankCallback(VBlankCB1_Phase2_WhiteFade); + SetVBlankCallback(VBlankCB_WhiteBarsFade_Blend); task->tState++; return FALSE; } -static bool8 Phase2_WhiteFade_Func5(struct Task *task) +static bool8 WhiteBarsFade_End(struct Task *task) { - if (++sTransitionStructPtr->BLDY > 16) + if (++sTransitionData->BLDY > 16) { FadeScreenBlack(); - DestroyTask(FindTaskIdByFunc(Phase2Task_WhiteFade)); + DestroyTask(FindTaskIdByFunc(Task_WhiteBarsFade)); } return FALSE; } -static void VBlankCB0_Phase2_WhiteFade(void) +static void VBlankCB_WhiteBarsFade(void) { DmaStop(0); VBlankCB_BattleTransition(); - REG_BLDCNT = sTransitionStructPtr->BLDCNT; - REG_WININ = sTransitionStructPtr->WININ; - REG_WINOUT = sTransitionStructPtr->WINOUT; - REG_WIN0V = sTransitionStructPtr->WIN0V; - if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); - DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, 0xA2400001); + REG_BLDCNT = sTransitionData->BLDCNT; + REG_WININ = sTransitionData->WININ; + REG_WINOUT = sTransitionData->WINOUT; + REG_WIN0V = sTransitionData->WIN0V; + if (sTransitionData->VBlank_DMA) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 4); + DmaSet(0, &gScanlineEffectRegBuffers[1][DISPLAY_HEIGHT], ®_WIN0H, B_TRANS_DMA_FLAGS); } -static void VBlankCB1_Phase2_WhiteFade(void) +static void VBlankCB_WhiteBarsFade_Blend(void) { VBlankCB_BattleTransition(); - REG_BLDY = sTransitionStructPtr->BLDY; - REG_BLDCNT = sTransitionStructPtr->BLDCNT; - REG_WININ = sTransitionStructPtr->WININ; - REG_WINOUT = sTransitionStructPtr->WINOUT; - REG_WIN0H = sTransitionStructPtr->WIN0H; - REG_WIN0V = sTransitionStructPtr->WIN0V; + REG_BLDY = sTransitionData->BLDY; + REG_BLDCNT = sTransitionData->BLDCNT; + REG_WININ = sTransitionData->WININ; + REG_WINOUT = sTransitionData->WINOUT; + REG_WIN0H = sTransitionData->WIN0H; + REG_WIN0V = sTransitionData->WIN0V; } -static void HBlankCB_Phase2_WhiteFade(void) +static void HBlankCB_WhiteBarsFade(void) { REG_BLDY = gScanlineEffectRegBuffers[1][REG_VCOUNT]; } -static void sub_8149864(struct Sprite *sprite) +static void SpriteCB_WhiteBarFade(struct Sprite *sprite) { - if (sprite->data[5]) + if (sprite->sDelay) { - sprite->data[5]--; - if (sprite->data[6]) - sTransitionStructPtr->VBlank_DMA = 1; + sprite->sDelay--; + if (sprite->sIsMainSprite) + sTransitionData->VBlank_DMA = 1; } else { u16 i; - u16* ptr1 = &gScanlineEffectRegBuffers[0][sprite->y]; - u16* ptr2 = &gScanlineEffectRegBuffers[0][sprite->y + 160]; - for (i = 0; i < 20; i++) + u16 *ptr1 = &gScanlineEffectRegBuffers[0][sprite->y]; + u16 *ptr2 = &gScanlineEffectRegBuffers[0][sprite->y + DISPLAY_HEIGHT]; + for (i = 0; i < DISPLAY_HEIGHT / NUM_WHITE_BARS; i++) { - ptr1[i] = sprite->data[0] >> 8; - ptr2[i] = (u8)(sprite->x); + ptr1[i] = sprite->sFade >> 8; + ptr2[i] = (u8)sprite->x; } - if (sprite->x == 0 && sprite->data[0] == 0x1000) - sprite->data[1] = 1; + if (sprite->x == 0 && sprite->sFade == FADE_TARGET) + sprite->sFinished = TRUE; sprite->x -= 16; - sprite->data[0] += 0x80; + sprite->sFade += FADE_TARGET / 32; if (sprite->x < 0) sprite->x = 0; - if (sprite->data[0] > 0x1000) - sprite->data[0] = 0x1000; + if (sprite->sFade > FADE_TARGET) + sprite->sFade = FADE_TARGET; - if (sprite->data[6]) - sTransitionStructPtr->VBlank_DMA = 1; + if (sprite->sIsMainSprite) + sTransitionData->VBlank_DMA = 1; - if (sprite->data[1]) + if (sprite->sFinished) { - if (sprite->data[6] == 0 || (sTransitionStructPtr->field_20 > 6 && sprite->data[2]++ > 7)) + // If not the main sprite, destroy self. Otherwise, wait until the + // others have destroyed themselves, or until enough time has elapsed. + if (!sprite->sIsMainSprite || (sTransitionData->counter >= NUM_WHITE_BARS - 1 && sprite->sDestroyAttempts++ > 7)) { - sTransitionStructPtr->field_20++; + sTransitionData->counter++; DestroySprite(sprite); } } } } -static void Phase2Task_GridSquares(u8 taskId) +#undef sFade +#undef sFinished +#undef sDestroyAttempts +#undef sDelay +#undef sIsMainSprite + +//--------------------------- +// B_TRANSITION_GRID_SQUARES +//--------------------------- + +#define tDelay data[1] +#define tShrinkStage data[2] + +static void Task_GridSquares(u8 taskId) { - while (sPhase2_GridSquares_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sGridSquares_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_GridSquares_Func1(struct Task *task) +static bool8 GridSquares_Init(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - CpuSet(sShrinkingBoxTileset, tileset, 0x10); - CpuFill16(0xF000, tilemap, 0x800); - LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20); + CpuSet(sShrinkingBoxTileset, tileset, 16); + CpuFill16(0xF0 << 8, tilemap, BG_SCREEN_SIZE); + LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); task->tState++; return FALSE; } -static bool8 Phase2_GridSquares_Func2(struct Task *task) +static bool8 GridSquares_Main(struct Task *task) { - u16* tileset; + u16 *tileset; - if (task->tData1 == 0) + if (task->tDelay == 0) { GetBg0TilemapDst(&tileset); - task->tData1 = 3; - task->tData2++; - CpuSet(sShrinkingBoxTileset + (task->tData2 * 8), tileset, 0x10); - if (task->tData2 > 0xD) + task->tDelay = 3; + task->tShrinkStage++; + CpuSet(&sShrinkingBoxTileset[task->tShrinkStage * 8], tileset, 16); + if (task->tShrinkStage > 13) { task->tState++; - task->tData1 = 16; + task->tDelay = 16; } } - task->tData1--; + task->tDelay--; return FALSE; } -static bool8 Phase2_GridSquares_Func3(struct Task *task) +static bool8 GridSquares_End(struct Task *task) { - if (--task->tData1 == 0) + if (--task->tDelay == 0) { FadeScreenBlack(); - DestroyTask(FindTaskIdByFunc(Phase2Task_GridSquares)); + DestroyTask(FindTaskIdByFunc(Task_GridSquares)); } return FALSE; } -static void Phase2Task_Shards(u8 taskId) +#undef tDelay +#undef tShrinkStage + +//--------------------------- +// B_TRANSITION_ANGLED_WIPES +//--------------------------- + +#define tWipeId data[1] +#define tDir data[2] +#define tDelay data[3] + +static void Task_AngledWipes(u8 taskId) { - while (sPhase2_Shards_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sAngledWipes_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_Shards_Func1(struct Task *task) +static bool8 AngledWipes_Init(struct Task *task) { u16 i; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); - sTransitionStructPtr->WININ = WININ_WIN0_ALL; - sTransitionStructPtr->WINOUT = 0; - sTransitionStructPtr->WIN0V = DISPLAY_HEIGHT; + sTransitionData->WININ = WININ_WIN0_ALL; + sTransitionData->WINOUT = 0; + sTransitionData->WIN0V = DISPLAY_HEIGHT; - for (i = 0; i < 160; i++) - { - gScanlineEffectRegBuffers[0][i] = 0xF0; - } + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[0][i] = DISPLAY_WIDTH; - CpuSet(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 0xA0); - SetVBlankCallback(VBlankCB_Phase2_Shards); + CpuSet(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT); + SetVBlankCallback(VBlankCB_AngledWipes); task->tState++; return TRUE; } -static bool8 Phase2_Shards_Func2(struct Task *task) +static bool8 AngledWipes_SetWipeData(struct Task *task) { - sub_814A1AC(sTransitionStructPtr->data, - sUnknown_085C8DD0[task->tData1][0], - sUnknown_085C8DD0[task->tData1][1], - sUnknown_085C8DD0[task->tData1][2], - sUnknown_085C8DD0[task->tData1][3], - 1, 1); - task->tData2 = sUnknown_085C8DD0[task->tData1][4]; + InitBlackWipe(sTransitionData->data, + sAngledWipes_MoveData[task->tWipeId][0], + sAngledWipes_MoveData[task->tWipeId][1], + sAngledWipes_MoveData[task->tWipeId][2], + sAngledWipes_MoveData[task->tWipeId][3], + 1, 1); + task->tDir = sAngledWipes_MoveData[task->tWipeId][4]; task->tState++; return TRUE; } -static bool8 Phase2_Shards_Func3(struct Task *task) +static bool8 AngledWipes_DoWipe(struct Task *task) { s16 i; - bool8 nextFunc; + bool8 finished; - sTransitionStructPtr->VBlank_DMA = 0; + sTransitionData->VBlank_DMA = 0; - for (i = 0, nextFunc = FALSE; i < 16; i++) + for (i = 0, finished = FALSE; i < 16; i++) { - s16 r3 = gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] >> 8; - s16 r4 = gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] & 0xFF; - if (task->tData2 == 0) + s16 r3 = gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] >> 8; + s16 r4 = gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] & 0xFF; + if (task->tDir == 0) { - if (r3 < sTransitionStructPtr->data[2]) - r3 = sTransitionStructPtr->data[2]; + // Moving down + if (r3 < sTransitionData->tWipeCurrX) + r3 = sTransitionData->tWipeCurrX; if (r3 > r4) r3 = r4; } else { - if (r4 > sTransitionStructPtr->data[2]) - r4 = sTransitionStructPtr->data[2]; + // Moving up + if (r4 > sTransitionData->tWipeCurrX) + r4 = sTransitionData->tWipeCurrX; if (r4 <= r3) r4 = r3; } - gScanlineEffectRegBuffers[0][sTransitionStructPtr->data[3]] = (r4) | (r3 << 8); - if (nextFunc) + gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = (r4) | (r3 << 8); + if (finished) { task->tState++; break; } - else - nextFunc = sub_814A228(sTransitionStructPtr->data, 1, 1); + finished = UpdateBlackWipe(sTransitionData->data, TRUE, TRUE); } - sTransitionStructPtr->VBlank_DMA++; + sTransitionData->VBlank_DMA++; return FALSE; } -static bool8 Phase2_Shards_Func4(struct Task *task) +static bool8 AngledWipes_TryEnd(struct Task *task) { - if (++task->tData1 < 7) + if (++task->tWipeId < NUM_ANGLED_WIPES) { + // Continue with next wipe task->tState++; - task->tData3 = sUnknown_085C8E16[task->tData1 - 1]; + task->tDelay = sAngledWipes_EndDelays[task->tWipeId - 1]; return TRUE; } else { + // End transition DmaStop(0); FadeScreenBlack(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Shards)); + DestroyTask(FindTaskIdByFunc(Task_AngledWipes)); return FALSE; } } -static bool8 Phase2_Shards_Func5(struct Task *task) +static bool8 AngledWipes_StartNext(struct Task *task) { - if (--task->tData3 == 0) + if (--task->tDelay == 0) { + // Return to AngledWipes_SetWipeData task->tState = 1; return TRUE; } @@ -3562,118 +3933,121 @@ static bool8 Phase2_Shards_Func5(struct Task *task) return FALSE; } -static void VBlankCB_Phase2_Shards(void) +static void VBlankCB_AngledWipes(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); - REG_WININ = sTransitionStructPtr->WININ; - REG_WINOUT = sTransitionStructPtr->WINOUT; - REG_WIN0V = sTransitionStructPtr->WIN0V; + if (sTransitionData->VBlank_DMA) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); + REG_WININ = sTransitionData->WININ; + REG_WINOUT = sTransitionData->WINOUT; + REG_WIN0V = sTransitionData->WIN0V; REG_WIN0H = gScanlineEffectRegBuffers[1][0]; - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, B_TRANS_DMA_FLAGS); } -// sub-task for phase2 -#undef tData1 -#undef tData2 -#undef tData3 -#undef tData4 -#undef tData5 -#undef tData6 -#undef tFuncState -#undef tFrames -#undef tOpponentSpriteId -#undef tPlayerSpriteId -#undef tMugshotId +#undef tWipeId +#undef tDir +#undef tDelay -// sub-task for sub-task phase -#define tData1 data[1] -#define tData2 data[2] -#define tData3 data[3] -#define tData4 data[4] -#define tData5 data[5] -#define tData6 data[6] -#define tData7 data[7] +//----------------------------------- +// Transition intro +//----------------------------------- -static void CreatePhase1Task(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4) +#define tFadeToGrayDelay data[1] +#define tFadeFromGrayDelay data[2] +#define tNumFades data[3] +#define tFadeToGrayIncrement data[4] +#define tFadeFromGrayIncrement data[5] +#define tDelayTimer data[6] +#define tBlend data[7] + +static void CreateIntroTask(s16 fadeToGrayDelay, s16 fadeFromGrayDelay, s16 numFades, s16 fadeToGrayIncrement, s16 fadeFromGrayIncrement) { - u8 taskId = CreateTask(TransitionPhase1_Task_RunFuncs, 3); - gTasks[taskId].tData1 = a0; - gTasks[taskId].tData2 = a1; - gTasks[taskId].tData3 = a2; - gTasks[taskId].tData4 = a3; - gTasks[taskId].tData5 = a4; - gTasks[taskId].tData6 = a0; + u8 taskId = CreateTask(Task_BattleTransition_Intro, 3); + gTasks[taskId].tFadeToGrayDelay = fadeToGrayDelay; + gTasks[taskId].tFadeFromGrayDelay = fadeFromGrayDelay; + gTasks[taskId].tNumFades = numFades; + gTasks[taskId].tFadeToGrayIncrement = fadeToGrayIncrement; + gTasks[taskId].tFadeFromGrayIncrement = fadeFromGrayIncrement; + gTasks[taskId].tDelayTimer = fadeToGrayDelay; } -static bool8 IsPhase1Done(void) +static bool8 IsIntroTaskDone(void) { - if (FindTaskIdByFunc(TransitionPhase1_Task_RunFuncs) == TASK_NONE) + if (FindTaskIdByFunc(Task_BattleTransition_Intro) == TASK_NONE) return TRUE; else return FALSE; } -void TransitionPhase1_Task_RunFuncs(u8 taskId) +void Task_BattleTransition_Intro(u8 taskId) { - while (sPhase1_TransitionAll_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sTransitionIntroFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase1_TransitionAll_Func1(struct Task *task) +static bool8 TransitionIntro_FadeToGray(struct Task *task) { - if (task->tData6 == 0 || --task->tData6 == 0) + if (task->tDelayTimer == 0 || --task->tDelayTimer == 0) { - task->tData6 = task->tData1; - task->tData7 += task->tData4; - if (task->tData7 > 16) - task->tData7 = 16; - BlendPalettes(PALETTES_ALL, task->tData7, 0x2D6B); + task->tDelayTimer = task->tFadeToGrayDelay; + task->tBlend += task->tFadeToGrayIncrement; + if (task->tBlend > 16) + task->tBlend = 16; + BlendPalettes(PALETTES_ALL, task->tBlend, RGB(11, 11, 11)); } - if (task->tData7 > 15) + if (task->tBlend >= 16) { + // Fade to gray complete, start fade back task->tState++; - task->tData6 = task->tData2; + task->tDelayTimer = task->tFadeFromGrayDelay; } return FALSE; } -static bool8 Phase1_TransitionAll_Func2(struct Task *task) +static bool8 TransitionIntro_FadeFromGray(struct Task *task) { - if (task->tData6 == 0 || --task->tData6 == 0) + if (task->tDelayTimer == 0 || --task->tDelayTimer == 0) { - task->tData6 = task->tData2; - task->tData7 -= task->tData5; - if (task->tData7 < 0) - task->tData7 = 0; - BlendPalettes(PALETTES_ALL, task->tData7, 0x2D6B); + task->tDelayTimer = task->tFadeFromGrayDelay; + task->tBlend -= task->tFadeFromGrayIncrement; + if (task->tBlend < 0) + task->tBlend = 0; + BlendPalettes(PALETTES_ALL, task->tBlend, RGB(11, 11, 11)); } - if (task->tData7 == 0) + if (task->tBlend == 0) { - if (--task->tData3 == 0) - DestroyTask(FindTaskIdByFunc(TransitionPhase1_Task_RunFuncs)); + if (--task->tNumFades == 0) + { + // All fades done, end intro + DestroyTask(FindTaskIdByFunc(Task_BattleTransition_Intro)); + } else { - task->tData6 = task->tData1; + // Fade from gray complete, start new fade + task->tDelayTimer = task->tFadeToGrayDelay; task->tState = 0; } } return FALSE; } -#undef tData1 -#undef tData2 -#undef tData3 -#undef tData4 -#undef tData5 -#undef tData6 -#undef tData7 +#undef tFadeToGrayDelay +#undef tFadeFromGrayDelay +#undef tNumFades +#undef tFadeToGrayIncrement +#undef tFadeFromGrayIncrement +#undef tDelayTimer +#undef tBlend -static void InitTransitionStructVars(void) +//----------------------------------- +// General transition functions +//----------------------------------- + +static void InitTransitionData(void) { - memset(sTransitionStructPtr, 0, sizeof(*sTransitionStructPtr)); - GetCameraOffsetWithPan(&sTransitionStructPtr->field_14, &sTransitionStructPtr->field_16); + memset(sTransitionData, 0, sizeof(*sTransitionData)); + GetCameraOffsetWithPan(&sTransitionData->cameraX, &sTransitionData->cameraY); } static void VBlankCB_BattleTransition(void) @@ -3686,8 +4060,8 @@ static void VBlankCB_BattleTransition(void) static void GetBg0TilemapDst(u16 **tileset) { u16 charBase = REG_BG0CNT >> 2; - charBase <<= 0xE; - *tileset = (u16*)(VRAM + charBase); + charBase <<= 14; + *tileset = (u16 *)(BG_VRAM + charBase); } void GetBg0TilesDst(u16 **tilemap, u16 **tileset) @@ -3695,11 +4069,11 @@ void GetBg0TilesDst(u16 **tilemap, u16 **tileset) u16 screenBase = REG_BG0CNT >> 8; u16 charBase = REG_BG0CNT >> 2; - screenBase <<= 0xB; - charBase <<= 0xE; + screenBase <<= 11; + charBase <<= 14; - *tilemap = (u16*)(VRAM + screenBase); - *tileset = (u16*)(VRAM + charBase); + *tilemap = (u16 *)(BG_VRAM + screenBase); + *tileset = (u16 *)(BG_VRAM + charBase); } static void FadeScreenBlack(void) @@ -3707,207 +4081,237 @@ static void FadeScreenBlack(void) BlendPalettes(PALETTES_ALL, 16, RGB_BLACK); } -static void sub_8149F98(s16 *array, s16 sinAdd, s16 index, s16 indexIncrementer, s16 amplitude, s16 arrSize) +static void SetSinWave(s16 *array, s16 sinAdd, s16 index, s16 indexIncrementer, s16 amplitude, s16 arrSize) { u8 i; for (i = 0; arrSize > 0; arrSize--, i++, index += indexIncrementer) - { - array[i] = sinAdd + Sin(0xFF & index, amplitude); - } + array[i] = sinAdd + Sin(index & 0xFF, amplitude); } -static void sub_814A014(u16 *array, s16 a1, s16 a2, s16 a3) +static void SetCircularMask(u16 *buffer, s16 centerX, s16 centerY, s16 radius) { s16 i; - memset(array, 0xA, 160 * sizeof(s16)); + memset(buffer, 10, DISPLAY_HEIGHT * sizeof(u16)); for (i = 0; i < 64; i++) { s16 sinResult, cosResult; - s16 toStoreOrr, r2, r3, toStore, r7, r8; + s16 drawXLeft, drawYBottNext, drawYTopNext, drawX, drawYTop, drawYBott; - sinResult = Sin(i, a3); - cosResult = Cos(i, a3); + sinResult = Sin(i, radius); + cosResult = Cos(i, radius); - toStoreOrr = a1 - sinResult; - toStore = a1 + sinResult; - r7 = a2 - cosResult; - r8 = a2 + cosResult; + drawXLeft = centerX - sinResult; + drawX = centerX + sinResult; + drawYTop = centerY - cosResult; + drawYBott = centerY + cosResult; - if (toStoreOrr < 0) - toStoreOrr = 0; - if (toStore > 0xF0) - toStore = 0xF0; - if (r7 < 0) - r7 = 0; - if (r8 > 0x9F) - r8 = 0x9F; + if (drawXLeft < 0) + drawXLeft = 0; + if (drawX > DISPLAY_WIDTH) + drawX = DISPLAY_WIDTH; + if (drawYTop < 0) + drawYTop = 0; + if (drawYBott > DISPLAY_HEIGHT - 1) + drawYBott = DISPLAY_HEIGHT - 1; - toStore |= (toStoreOrr << 8); - array[r7] = toStore; - array[r8] = toStore; + drawX |= (drawXLeft << 8); + buffer[drawYTop] = drawX; + buffer[drawYBott] = drawX; - cosResult = Cos(i + 1, a3); - r3 = a2 - cosResult; - r2 = a2 + cosResult; + cosResult = Cos(i + 1, radius); + drawYTopNext = centerY - cosResult; + drawYBottNext = centerY + cosResult; - if (r3 < 0) - r3 = 0; - if (r2 > 0x9F) - r2 = 0x9F; + if (drawYTopNext < 0) + drawYTopNext = 0; + if (drawYBottNext > DISPLAY_HEIGHT - 1) + drawYBottNext = DISPLAY_HEIGHT - 1; - while (r7 > r3) - array[--r7] = toStore; - while (r7 < r3) - array[++r7] = toStore; + while (drawYTop > drawYTopNext) + buffer[--drawYTop] = drawX; + while (drawYTop < drawYTopNext) + buffer[++drawYTop] = drawX; - while (r8 > r2) - array[--r8] = toStore; - while (r8 < r2) - array[++r8] = toStore; + while (drawYBott > drawYBottNext) + buffer[--drawYBott] = drawX; + while (drawYBott < drawYBottNext) + buffer[++drawYBott] = drawX; } } -static void sub_814A1AC(s16 *data, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6) +static void InitBlackWipe(s16 *data, s16 startX, s16 startY, s16 endX, s16 endY, s16 xMove, s16 yMove) { - data[0] = a1; - data[1] = a2; - data[2] = a1; - data[3] = a2; - data[4] = a3; - data[5] = a4; - data[6] = a5; - data[7] = a6; - data[8] = a3 - a1; - if (data[8] < 0) + tWipeStartX = startX; + tWipeStartY = startY; + tWipeCurrX = startX; + tWipeCurrY = startY; + tWipeEndX = endX; + tWipeEndY = endY; + tWipeXMove = xMove; + tWipeYMove = yMove; + tWipeXDist = endX - startX; + if (tWipeXDist < 0) { - data[8] = -data[8]; - data[6] = -a5; + // If end was less than start, reverse direction + tWipeXDist = -tWipeXDist; + tWipeXMove = -xMove; } - data[9] = a4 - a2; - if (data[9] < 0) + tWipeYDist = endY - startY; + if (tWipeYDist < 0) { - data[9] = -data[9]; - data[7] = -a6; + // If end was less than start, reverse direction + tWipeYDist = -tWipeYDist; + tWipeYMove = -yMove; } - data[10] = 0; + tWipeTemp = 0; } -static bool8 sub_814A228(s16 *data, bool8 a1, bool8 a2) +static bool8 UpdateBlackWipe(s16 *data, bool8 xExact, bool8 yExact) { - u8 var; - if (data[8] > data[9]) + u8 numFinished; + + if (tWipeXDist > tWipeYDist) { - data[2] += data[6]; - data[10] += data[9]; - if (data[10] > data[8]) + // X has further to move, move it first + tWipeCurrX += tWipeXMove; + + // If it has been far enough since Y's + // last move then move it too + tWipeTemp += tWipeYDist; + if (tWipeTemp > tWipeXDist) { - data[3] += data[7]; - data[10] -= data[8]; + tWipeCurrY += tWipeYMove; + tWipeTemp -= tWipeXDist; } } else { - data[3] += data[7]; - data[10] += data[8]; - if (data[10] > data[9]) + // Y has further to move, move it first + tWipeCurrY += tWipeYMove; + + // If it has been far enough since X's + // last move then move it too + tWipeTemp += tWipeXDist; + if (tWipeTemp > tWipeYDist) { - data[2] += data[6]; - data[10] -= data[9]; + tWipeCurrX += tWipeXMove; + tWipeTemp -= tWipeYDist; } } - var = 0; - if ((data[6] > 0 && data[2] >= data[4]) || (data[6] < 0 && data[2] <= data[4])) + + numFinished = 0; + + // Has X coord reached end? + if ((tWipeXMove > 0 && tWipeCurrX >= tWipeEndX) + || (tWipeXMove < 0 && tWipeCurrX <= tWipeEndX)) { - var++; - if (a1) - data[2] = data[4]; - } - if ((data[7] > 0 && data[3] >= data[5]) || (data[7] < 0 && data[3] <= data[5])) - { - var++; - if (a2) - data[3] = data[5]; + numFinished++; + if (xExact) + tWipeCurrX = tWipeEndX; } - if (var == 2) + // Has Y coord reached end? + if ((tWipeYMove > 0 && tWipeCurrY >= tWipeEndY) + || (tWipeYMove < 0 && tWipeCurrY <= tWipeEndY)) + { + numFinished++; + if (yExact) + tWipeCurrY = tWipeEndY; + } + + // Return TRUE if both coords have reached end + if (numFinished == 2) return TRUE; else return FALSE; } -// sub-task for phase2 of a couple of new transitions -#define tData1 data[1] -#define tData2 data[2] -#define tData3 data[3] -#define tData4 data[4] -#define tData5 data[5] -#define tData6 data[6] -#define tData7 data[7] +//----------------------------------- +// B_TRANSITION_FRONTIER_LOGO_WIGGLE +//----------------------------------- -static bool8 Phase2_FrontierLogoWiggle_Func1(struct Task *task) +#define tSinIndex data[4] +#define tAmplitude data[5] + +static bool8 FrontierLogoWiggle_Init(struct Task *task) { u16 *tilemap, *tileset; - sub_814669C(task); + InitPatternWeaveTransition(task); GetBg0TilesDst(&tilemap, &tileset); - CpuFill16(0, tilemap, 0x800); + CpuFill16(0, tilemap, BG_SCREEN_SIZE); LZ77UnCompVram(sFrontierLogo_Tileset, tileset); - LoadPalette(sFrontierLogo_Palette, 0xF0, 0x20); + LoadPalette(sFrontierLogo_Palette, 0xF0, sizeof(sFrontierLogo_Palette)); task->tState++; return FALSE; } -static bool8 Phase2_FrontierLogoWiggle_Func2(struct Task *task) +static bool8 FrontierLogoWiggle_SetGfx(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); LZ77UnCompVram(sFrontierLogo_Tilemap, tilemap); - sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 0x84, task->tData5, 160); + SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return TRUE; } -static void Phase2Task_FrontierLogoWiggle(u8 taskId) +static void Task_FrontierLogoWiggle(u8 taskId) { - while (sPhase2_FrontierLogoWiggle_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierLogoWiggle_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void Phase2Task_FrontierLogoWave(u8 taskId) +#undef tSinIndex +#undef tAmplitude + +//--------------------------------- +// B_TRANSITION_FRONTIER_LOGO_WAVE +//--------------------------------- + +#define tSinVal data[1] +#define tAmplitudeVal data[2] +#define tTimer data[3] +#define tStartedFade data[4] +#define tBlendTarget2 data[5] +#define tBlendTarget1 data[6] +#define tSinDecrement data[7] + +static void Task_FrontierLogoWave(u8 taskId) { - while (sPhase2_FrontierLogoWave_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierLogoWave_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_FrontierLogoWave_Func1(struct Task *task) +static bool8 FrontierLogoWave_Init(struct Task *task) { u16 *tilemap, *tileset; - InitTransitionStructVars(); + InitTransitionData(); ScanlineEffect_Clear(); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); - task->tData2 = 0x2000; - task->tData1 = 0x7FFF; - task->tData5 = 0; - task->tData6 = 16; - task->tData7 = 2560; - sTransitionStructPtr->BLDCNT = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL; - sTransitionStructPtr->BLDALPHA = BLDALPHA_BLEND(task->tData5, task->tData6); - REG_BLDCNT = sTransitionStructPtr->BLDCNT; - REG_BLDALPHA = sTransitionStructPtr->BLDALPHA; + task->tAmplitudeVal = 32 << 8; + task->tSinVal = 0x7FFF; + task->tBlendTarget2 = 0; + task->tBlendTarget1 = 16; + task->tSinDecrement = 2560; + sTransitionData->BLDCNT = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL; + sTransitionData->BLDALPHA = BLDALPHA_BLEND(task->tBlendTarget2, task->tBlendTarget1); + REG_BLDCNT = sTransitionData->BLDCNT; + REG_BLDALPHA = sTransitionData->BLDALPHA; GetBg0TilesDst(&tilemap, &tileset); - CpuFill16(0, tilemap, 0x800); + CpuFill16(0, tilemap, BG_SCREEN_SIZE); LZ77UnCompVram(sFrontierLogo_Tileset, tileset); - LoadPalette(sFrontierLogo_Palette, 0xF0, 0x20); - sTransitionStructPtr->field_16 = 0; + LoadPalette(sFrontierLogo_Palette, 0xF0, sizeof(sFrontierLogo_Palette)); + sTransitionData->cameraY = 0; task->tState++; return FALSE; } -static bool8 Phase2_FrontierLogoWave_Func2(struct Task *task) +static bool8 FrontierLogoWave_SetGfx(struct Task *task) { u16 *tilemap, *tileset; @@ -3918,164 +4322,190 @@ static bool8 Phase2_FrontierLogoWave_Func2(struct Task *task) return TRUE; } -static bool8 Phase2_FrontierLogoWave_Func3(struct Task *task) +static bool8 FrontierLogoWave_InitScanline(struct Task *task) { u8 i; - for (i = 0; i < 160; i++) - { - gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->field_16; - } + for (i = 0; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[1][i] = sTransitionData->cameraY; - SetVBlankCallback(VBlankCB_Phase2_30); - SetHBlankCallback(HBlankCB_Phase2_30); + SetVBlankCallback(VBlankCB_FrontierLogoWave); + SetHBlankCallback(HBlankCB_FrontierLogoWave); EnableInterrupts(INTR_FLAG_HBLANK); task->tState++; return TRUE; } -static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task) +static bool8 FrontierLogoWave_Main(struct Task *task) { u8 i; - u16 var6, amplitude, var8; + u16 sinVal, amplitude, sinSpread; - sTransitionStructPtr->VBlank_DMA = FALSE; + sTransitionData->VBlank_DMA = FALSE; - amplitude = task->tData2 >> 8; - var6 = task->tData1; - var8 = 384; + amplitude = task->tAmplitudeVal >> 8; + sinVal = task->tSinVal; + sinSpread = 384; - task->tData1 = var6 - task->tData7; + task->tSinVal -= task->tSinDecrement; - if (task->tData3 >= 70) + if (task->tTimer >= 70) { - if (task->tData2 - 384 >= 0) - task->tData2 -= 384; + // Decrease amount of logo movement and distortion + // until it rests normally in the middle of the screen. + if (task->tAmplitudeVal - 384 >= 0) + task->tAmplitudeVal -= 384; else - task->tData2 = 0; + task->tAmplitudeVal = 0; } - if (task->tData3 >= 0 && task->tData3 % 3 == 0) + if (task->tTimer >= 0 && task->tTimer % 3 == 0) { - if (task->tData5 < 16) - task->tData5++; - else if (task->tData6 > 0) - task->tData6--; + // Blend logo into view + if (task->tBlendTarget2 < 16) + task->tBlendTarget2++; + else if (task->tBlendTarget1 > 0) + task->tBlendTarget1--; - sTransitionStructPtr->BLDALPHA = BLDALPHA_BLEND(task->tData5, task->tData6); + sTransitionData->BLDALPHA = BLDALPHA_BLEND(task->tBlendTarget2, task->tBlendTarget1); } - for (i = 0; i < 160; i++, var6 += var8) + // Move logo up and down and distort it + for (i = 0; i < DISPLAY_HEIGHT; i++, sinVal += sinSpread) { - s16 index = var6 / 256; - gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index & 0xff, amplitude); + s16 index = sinVal / 256; + gScanlineEffectRegBuffers[0][i] = sTransitionData->cameraY + Sin(index & 0xff, amplitude); } - if (++task->tData3 == 101) + if (++task->tTimer == 101) { - task->tData4++; - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + task->tStartedFade++; + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); } - if (task->tData4 != 0 && !gPaletteFade.active) - DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierLogoWave)); + if (task->tStartedFade && !gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(Task_FrontierLogoWave)); - task->tData7 -= 17; - sTransitionStructPtr->VBlank_DMA++; + task->tSinDecrement -= 17; + sTransitionData->VBlank_DMA++; return FALSE; } -static void VBlankCB_Phase2_30(void) +static void VBlankCB_FrontierLogoWave(void) { VBlankCB_BattleTransition(); - REG_BLDCNT = sTransitionStructPtr->BLDCNT; - REG_BLDALPHA = sTransitionStructPtr->BLDALPHA; + REG_BLDCNT = sTransitionData->BLDCNT; + REG_BLDALPHA = sTransitionData->BLDALPHA; - if (sTransitionStructPtr->VBlank_DMA) - DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + if (sTransitionData->VBlank_DMA) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); } -static void HBlankCB_Phase2_30(void) +static void HBlankCB_FrontierLogoWave(void) { u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG0VOFS = var; } -static void Phase2Task_FrontierSquares(u8 taskId) +#undef tSinVal +#undef tAmplitudeVal +#undef tTimer +#undef tStartedFade +#undef tBlendTarget2 +#undef tBlendTarget1 +#undef tSinDecrement + +//---------------------------------------------------------------------- +// B_TRANSITION_FRONTIER_SQUARES, B_TRANSITION_FRONTIER_SQUARES_SCROLL, +// and B_TRANSITION_FRONTIER_SQUARES_SPIRAL +//---------------------------------------------------------------------- + +#define tPosX data[2] +#define tPosY data[3] +#define tRowPos data[4] +#define tShrinkState data[5] +#define tShrinkDelayTimer data[6] +#define tShrinkDelay data[7] + +static void Task_FrontierSquares(u8 taskId) { - while (sPhase2_FrontierSquares_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierSquares_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void Phase2Task_FrontierSquaresSpiral(u8 taskId) +static void Task_FrontierSquaresSpiral(u8 taskId) { - while (sPhase2_FrontierSquaresSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierSquaresSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static void Phase2Task_FrontierSquaresScroll(u8 taskId) +static void Task_FrontierSquaresScroll(u8 taskId) { - while (sPhase2_FrontierSquaresScroll_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierSquaresScroll_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } -static bool8 Phase2_FrontierSquares_Func1(struct Task *task) +static bool8 FrontierSquares_Init(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset); - FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); - FillBgTilemapBufferRect(0, 1, 0, 0, 1, 0x20, 0xF); - FillBgTilemapBufferRect(0, 1, 0x1D, 0, 1, 0x20, 0xF); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); + FillBgTilemapBufferRect(0, 1, 0, 0, MARGIN_SIZE, 32, 15); + FillBgTilemapBufferRect(0, 1, 30 - MARGIN_SIZE, 0, MARGIN_SIZE, 32, 15); CopyBgTilemapBufferToVram(0); - LoadPalette(sFrontierSquares_Palette, 0xF0, 0x20); + LoadPalette(sFrontierSquares_Palette, 0xF0, sizeof(sFrontierSquares_Palette)); - task->tData2 = 1; - task->tData3 = 0; - task->tData4 = 0; - task->tData7 = 10; + task->tPosX = MARGIN_SIZE; + task->tPosY = 0; + task->tRowPos = 0; + task->tShrinkDelay = 10; task->tState++; return FALSE; } -static bool8 Phase2_FrontierSquares_Func2(struct Task *task) +static bool8 FrontierSquares_Draw(struct Task *task) { - CopyRectToBgTilemapBufferRect(0, sFrontierSquares_Tilemap, 0, 0, 4, 4, task->tData2, task->tData3, 4, 4, 0xF, 0, 0); + CopyRectToBgTilemapBufferRect(0, sFrontierSquares_Tilemap, 0, 0, + SQUARE_SIZE, SQUARE_SIZE, + task->tPosX, task->tPosY, + SQUARE_SIZE, SQUARE_SIZE, + 15, 0, 0); CopyBgTilemapBufferToVram(0); - task->tData2 += 4; - if (++task->tData4 == 7) + task->tPosX += SQUARE_SIZE; + if (++task->tRowPos == NUM_SQUARES_PER_ROW) { - task->tData2 = 1; - task->tData3 += 4; - task->tData4 = 0; - if (task->tData3 > 19) + task->tPosX = MARGIN_SIZE; + task->tPosY += SQUARE_SIZE; + task->tRowPos = 0; + if (task->tPosY >= NUM_SQUARES_PER_COL * SQUARE_SIZE) task->tState++; } return FALSE; } -static bool8 Phase2_FrontierSquares_Func3(struct Task *task) +static bool8 FrontierSquares_Shrink(struct Task *task) { u8 i; u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - if (task->tData6++ >= task->tData7) + if (task->tShrinkDelayTimer++ >= task->tShrinkDelay) { - switch (task->tData5) + switch (task->tShrinkState) { case 0: for (i = 250; i < 255; i++) { - gPlttBufferUnfaded[i] = 0; - gPlttBufferFaded[i] = 0; + gPlttBufferUnfaded[i] = RGB_BLACK; + gPlttBufferFaded[i] = RGB_BLACK; } break; case 1: - BlendPalettes(PALETTES_ALL & ~(0x8000), 0x10, 0); + BlendPalettes(PALETTES_ALL & ~(1 << 15), 16, RGB_BLACK); LZ77UnCompVram(sFrontierSquares_EmptyBg_Tileset, tileset); break; case 2: @@ -4085,169 +4515,183 @@ static bool8 Phase2_FrontierSquares_Func3(struct Task *task) LZ77UnCompVram(sFrontierSquares_Shrink2_Tileset, tileset); break; default: - FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 32, 32); CopyBgTilemapBufferToVram(0); task->tState++; return FALSE; } - task->tData6 = 0; - task->tData5++; + task->tShrinkDelayTimer = 0; + task->tShrinkState++; } return FALSE; } -static bool8 Phase2_FrontierSquaresSpiral_Func1(struct Task *task) +#undef tPosX +#undef tPosY +#undef tRowPos +#undef tShrinkState +#undef tShrinkDelayTimer +#undef tShrinkDelay + +#define tSquareNum data[2] +#define tFadeFlag data[3] + +static bool8 FrontierSquaresSpiral_Init(struct Task *task) { u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset); - FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); - FillBgTilemapBufferRect(0, 1, 0, 0, 1, 0x20, 0xF); - FillBgTilemapBufferRect(0, 1, 0x1D, 0, 1, 0x20, 0xF); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); + FillBgTilemapBufferRect(0, 1, 0, 0, MARGIN_SIZE, 32, 15); + FillBgTilemapBufferRect(0, 1, 30 - MARGIN_SIZE, 0, MARGIN_SIZE, 32, 15); CopyBgTilemapBufferToVram(0); - LoadPalette(sFrontierSquares_Palette, 0xE0, 0x20); - LoadPalette(sFrontierSquares_Palette, 0xF0, 0x20); - BlendPalette(0xE0, 0x10, 8, 0); + LoadPalette(sFrontierSquares_Palette, 0xE0, sizeof(sFrontierSquares_Palette)); + LoadPalette(sFrontierSquares_Palette, 0xF0, sizeof(sFrontierSquares_Palette)); + BlendPalette(0xE0, 16, 8, RGB_BLACK); - task->tData2 = 34; - task->tData3 = 0; + task->tSquareNum = NUM_SQUARES - 1; + task->tFadeFlag = 0; task->tState++; return FALSE; } -static bool8 Phase2_FrontierSquaresSpiral_Func2(struct Task *task) +static bool8 FrontierSquaresSpiral_Outward(struct Task *task) { - u8 var = gUnknown_085C9A30[task->tData2]; - u8 varMod = var % 7; - u8 varDiv = var / 7; - CopyRectToBgTilemapBufferRect(0, &sFrontierSquares_Tilemap, 0, 0, 4, 4, 4 * varMod + 1, 4 * varDiv, 4, 4, 0xF, 0, 0); + u8 pos = sFrontierSquaresSpiral_Positions[task->tSquareNum]; + u8 x = pos % NUM_SQUARES_PER_ROW; + u8 y = pos / NUM_SQUARES_PER_ROW; + CopyRectToBgTilemapBufferRect(0, sFrontierSquares_Tilemap, 0, 0, + SQUARE_SIZE, SQUARE_SIZE, + SQUARE_SIZE * x + MARGIN_SIZE, SQUARE_SIZE * y, + SQUARE_SIZE, SQUARE_SIZE, + 15, 0, 0); CopyBgTilemapBufferToVram(0); - if (--task->tData2 < 0) + if (--task->tSquareNum < 0) task->tState++; return FALSE; } -static bool8 Phase2_FrontierSquaresSpiral_Func3(struct Task *task) +// Now that the overworld is completely covered by the squares, +// set it to black so it's not revealed when the squares are removed. +static bool8 FrontierSquaresSpiral_SetBlack(struct Task *task) { - BlendPalette(0xE0, 0x10, 3, 0); - BlendPalettes(PALETTES_ALL & ~(0x8000 | 0x4000), 0x10, 0); + BlendPalette(0xE0, 16, 3, RGB_BLACK); + BlendPalettes(PALETTES_ALL & ~(1 << 15 | 1 << 14), 16, RGB_BLACK); - task->tData2 = 0; - task->tData3 = 0; + task->tSquareNum = 0; + task->tFadeFlag = 0; task->tState++; return FALSE; } -static bool8 Phase2_FrontierSquaresSpiral_Func4(struct Task *task) +// Spiral inward erasing the squares +static bool8 FrontierSquaresSpiral_Inward(struct Task *task) { - if ((task->tData3 ^= 1)) + // Each square is faded first, then the one that was faded last move is erased. + if (task->tFadeFlag ^= 1) { - CopyRectToBgTilemapBufferRect( - 0, - sFrontierSquares_Tilemap, - 0, - 0, - 4, - 4, - 4 * (gUnknown_085C9A30[task->tData2] % 7) + 1, - 4 * (gUnknown_085C9A30[task->tData2] / 7), - 4, - 4, - 0xE, - 0, - 0); + // Shade square + CopyRectToBgTilemapBufferRect(0, sFrontierSquares_Tilemap, 0, 0, + SQUARE_SIZE, SQUARE_SIZE, + SQUARE_SIZE * (sFrontierSquaresSpiral_Positions[task->tSquareNum] % NUM_SQUARES_PER_ROW) + MARGIN_SIZE, + SQUARE_SIZE * (sFrontierSquaresSpiral_Positions[task->tSquareNum] / NUM_SQUARES_PER_ROW), + SQUARE_SIZE, SQUARE_SIZE, + 14, 0, 0); } else { - if (task->tData2 > 0) + if (task->tSquareNum > 0) { - FillBgTilemapBufferRect( - 0, - 1, - 4 * (gUnknown_085C9A30[task->tData2 - 1] % 7) + 1, - 4 * (gUnknown_085C9A30[task->tData2 - 1] / 7), - 4, - 4, - 0xF); + // Erase square + FillBgTilemapBufferRect(0, 1, + SQUARE_SIZE * (sFrontierSquaresSpiral_Positions[task->tSquareNum - 1] % NUM_SQUARES_PER_ROW) + MARGIN_SIZE, + SQUARE_SIZE * (sFrontierSquaresSpiral_Positions[task->tSquareNum - 1] / NUM_SQUARES_PER_ROW), + SQUARE_SIZE, SQUARE_SIZE, + 15); } - - task->tData2++; + task->tSquareNum++; } - if (task->tData2 > 34) + if (task->tSquareNum >= NUM_SQUARES) task->tState++; CopyBgTilemapBufferToVram(0); return FALSE; } -static bool8 Phase2_FrontierSquares_End(struct Task *task) +static bool8 FrontierSquares_End(struct Task *task) { - FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 32, 32); CopyBgTilemapBufferToVram(0); - BlendPalettes(PALETTES_ALL, 0x10, 0); + BlendPalettes(PALETTES_ALL, 16, RGB_BLACK); DestroyTask(FindTaskIdByFunc(task->func)); return FALSE; } -// sub task for phase2 32 -#define tSub32_X_delta data[0] -#define tSub32_Y_delta data[1] -#define tSub32_Bool data[2] +#undef tSquareNum +#undef tFadeFlag -static void sub_814ABE4(u8 taskId) +#define tScrollXDir data[0] +#define tScrollYDir data[1] +#define tScrollUpdateFlag data[2] + +#define tSquareNum data[2] + +static void Task_ScrollBg(u8 taskId) { - if (!(gTasks[taskId].tSub32_Bool ^= 1)) + if (!(gTasks[taskId].tScrollUpdateFlag ^= 1)) { SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_X); SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_Y); - gBattle_BG0_X += gTasks[taskId].tSub32_X_delta; - gBattle_BG0_Y += gTasks[taskId].tSub32_Y_delta; + gBattle_BG0_X += gTasks[taskId].tScrollXDir; + gBattle_BG0_Y += gTasks[taskId].tScrollYDir; } } -static bool8 Phase2_FrontierSquaresScroll_Func1(struct Task *task) +static bool8 FrontierSquaresScroll_Init(struct Task *task) { u8 taskId = 0; u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset); - FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); CopyBgTilemapBufferToVram(0); - LoadPalette(sFrontierSquares_Palette, 0xF0, 0x20); + LoadPalette(sFrontierSquares_Palette, 0xF0, sizeof(sFrontierSquares_Palette)); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_X); SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_Y); - task->tData2 = 0; - taskId = CreateTask(sub_814ABE4, 1); + task->tSquareNum = 0; + + // Start scrolling bg in a random direction. + taskId = CreateTask(Task_ScrollBg, 1); switch (Random() % 4) { - case 0: - gTasks[taskId].tSub32_X_delta = 1; - gTasks[taskId].tSub32_Y_delta = 1; + case 0: // Down/right + gTasks[taskId].tScrollXDir = 1; + gTasks[taskId].tScrollYDir = 1; break; - case 1: - gTasks[taskId].tSub32_X_delta = -1; - gTasks[taskId].tSub32_Y_delta = -1; + case 1: // Up/left + gTasks[taskId].tScrollXDir = -1; + gTasks[taskId].tScrollYDir = -1; break; - case 2: - gTasks[taskId].tSub32_X_delta = 1; - gTasks[taskId].tSub32_Y_delta = -1; + case 2: // Up/right + gTasks[taskId].tScrollXDir = 1; + gTasks[taskId].tScrollYDir = -1; break; - default: - gTasks[taskId].tSub32_X_delta = -1; - gTasks[taskId].tSub32_Y_delta = 1; + default: // Down/left + gTasks[taskId].tScrollXDir = -1; + gTasks[taskId].tScrollYDir = 1; break; } @@ -4255,88 +4699,75 @@ static bool8 Phase2_FrontierSquaresScroll_Func1(struct Task *task) return FALSE; } -static bool8 Phase2_FrontierSquaresScroll_Func2(struct Task *task) +static bool8 FrontierSquaresScroll_Draw(struct Task *task) { - u8 var = gUnknown_085C9A53[task->tData2]; - u8 varDiv = var / 8; - u8 varAnd = var & 7; + u8 pos = sFrontierSquaresScroll_Positions[task->tSquareNum]; + u8 x = pos / (NUM_SQUARES_PER_ROW + 1); // +1 because during scroll an additional column covers the margin. + u8 y = pos % (NUM_SQUARES_PER_ROW + 1); - CopyRectToBgTilemapBufferRect( - 0, - &sFrontierSquares_Tilemap, - 0, - 0, - 4, - 4, - 4 * varDiv + 1, - 4 * varAnd, - 4, - 4, - 0xF, - 0, - 0); + CopyRectToBgTilemapBufferRect(0, &sFrontierSquares_Tilemap, 0, 0, + SQUARE_SIZE, SQUARE_SIZE, + SQUARE_SIZE * x + MARGIN_SIZE, SQUARE_SIZE * y, + SQUARE_SIZE, SQUARE_SIZE, + 15, 0, 0); CopyBgTilemapBufferToVram(0); - if (++task->tData2 > 63) + if (++task->tSquareNum >= (int)ARRAY_COUNT(sFrontierSquaresScroll_Positions)) task->tState++; return 0; } -static bool8 Phase2_FrontierSquaresScroll_Func3(struct Task *task) +// Now that the overworld is completely covered by the squares, +// set it to black so it's not revealed when the squares are removed. +static bool8 FrontierSquaresScroll_SetBlack(struct Task *task) { - BlendPalettes(PALETTES_ALL & ~(0x8000), 0x10, 0); + BlendPalettes(PALETTES_ALL & ~(1 << 15), 16, RGB_BLACK); - task->tData2 = 0; + task->tSquareNum = 0; task->tState++; return FALSE; } -static bool8 Phase2_FrontierSquaresScroll_Func4(struct Task *task) +static bool8 FrontierSquaresScroll_Erase(struct Task *task) { - u8 var = gUnknown_085C9A53[task->tData2]; - u8 varDiv = var / 8; - u8 varAnd = var & 7; + u8 pos = sFrontierSquaresScroll_Positions[task->tSquareNum]; + u8 x = pos / (NUM_SQUARES_PER_ROW + 1); + u8 y = pos % (NUM_SQUARES_PER_ROW + 1); - FillBgTilemapBufferRect(0, 1, 4 * varDiv + 1, 4 * varAnd, 4, 4, 0xF); + FillBgTilemapBufferRect(0, 1, + SQUARE_SIZE * x + MARGIN_SIZE, SQUARE_SIZE * y, + SQUARE_SIZE, SQUARE_SIZE, + 15); CopyBgTilemapBufferToVram(0); - if (++task->tData2 > 63) + if (++task->tSquareNum >= (int)ARRAY_COUNT(sFrontierSquaresScroll_Positions)) { - DestroyTask(FindTaskIdByFunc(sub_814ABE4)); + DestroyTask(FindTaskIdByFunc(Task_ScrollBg)); task->tState++; } return FALSE; } -#undef tSub32_X_delta -#undef tSub32_Y_delta -#undef tSub32_Bool - -static bool8 Phase2_FrontierSquaresScroll_Func5(struct Task *task) +static bool8 FrontierSquaresScroll_End(struct Task *task) { gBattle_BG0_X = 0; gBattle_BG0_Y = 0; SetGpuReg(REG_OFFSET_BG0VOFS, 0); SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_Y); - FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 32, 32); CopyBgTilemapBufferToVram(0); - BlendPalettes(PALETTES_ALL, 0x10, 0); + BlendPalettes(PALETTES_ALL, 16, RGB_BLACK); DestroyTask(FindTaskIdByFunc(task->func)); + task->tState++; // Changing value of a destroyed task -#ifndef UBFIX - task->tState++; // UB: changing value of a destroyed task -#endif return FALSE; } -#undef tData1 -#undef tData2 -#undef tData3 -#undef tData4 -#undef tData5 -#undef tData6 -#undef tData7 +#undef tScrollXDir +#undef tScrollYDir +#undef tScrollUpdateFlag +#undef tSquareNum diff --git a/src/battle_transition_frontier.c b/src/battle_transition_frontier.c index 2d34c9f86a..088865dbab 100644 --- a/src/battle_transition_frontier.c +++ b/src/battle_transition_frontier.c @@ -21,7 +21,6 @@ typedef bool8 (*TransitionStateFunc)(struct Task *task); -// this file's functions static void SpriteCB_LogoCircleSlide(struct Sprite *sprite); static void SpriteCB_LogoCircleSpiral(struct Sprite *sprite); static bool8 WaitForLogoCirclesAnim(struct Task *task); @@ -46,7 +45,6 @@ static bool8 CirclesSymmetricSpiralInSeq_End(struct Task *task); #define PALTAG_LOGO_CIRCLES 0x2E90 -// const rom data static const u32 sLogoCenter_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.4bpp.lz"); static const u32 sLogoCenter_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.bin"); static const u32 sLogoCircles_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_circles.4bpp.lz"); @@ -60,7 +58,7 @@ static const struct OamData sOamData_LogoCircles = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -121,7 +119,7 @@ static const struct SpriteTemplate sSpriteTemplate_LogoCircles = .callback = SpriteCallbackDummy, }; -static const TransitionStateFunc sPhase2_FrontierCirclesMeet_Funcs[] = +static const TransitionStateFunc sFrontierCirclesMeet_Funcs[] = { Circles_Init, CirclesMeet_CreateSprites, @@ -130,7 +128,7 @@ static const TransitionStateFunc sPhase2_FrontierCirclesMeet_Funcs[] = CirclesMeet_End }; -static const TransitionStateFunc sPhase2_FrontierCirclesCross_Funcs[] = +static const TransitionStateFunc sFrontierCirclesCross_Funcs[] = { Circles_Init, CirclesCross_CreateSprites, @@ -139,7 +137,7 @@ static const TransitionStateFunc sPhase2_FrontierCirclesCross_Funcs[] = CirclesCross_End }; -static const TransitionStateFunc sPhase2_FrontierCirclesAsymmetricSpiral_Funcs[] = +static const TransitionStateFunc sFrontierCirclesAsymmetricSpiral_Funcs[] = { Circles_Init, CirclesAsymmetricSpiral_CreateSprites, @@ -148,7 +146,7 @@ static const TransitionStateFunc sPhase2_FrontierCirclesAsymmetricSpiral_Funcs[] CirclesAsymmetricSpiral_End }; -static const TransitionStateFunc sPhase2_FrontierCirclesSymmetricSpiral_Funcs[] = +static const TransitionStateFunc sFrontierCirclesSymmetricSpiral_Funcs[] = { Circles_Init, CirclesSymmetricSpiral_CreateSprites, @@ -157,7 +155,7 @@ static const TransitionStateFunc sPhase2_FrontierCirclesSymmetricSpiral_Funcs[] CirclesSymmetricSpiral_End }; -static const TransitionStateFunc sPhase2_FrontierCirclesMeetInSeq_Funcs[] = +static const TransitionStateFunc sFrontierCirclesMeetInSeq_Funcs[] = { Circles_Init, CirclesMeetInSeq_CreateSprites, @@ -166,7 +164,7 @@ static const TransitionStateFunc sPhase2_FrontierCirclesMeetInSeq_Funcs[] = CirclesMeetInSeq_End }; -static const TransitionStateFunc sPhase2_FrontierCirclesCrossInSeq_Funcs[] = +static const TransitionStateFunc sFrontierCirclesCrossInSeq_Funcs[] = { Circles_Init, CirclesCrossInSeq_CreateSprites, @@ -175,7 +173,7 @@ static const TransitionStateFunc sPhase2_FrontierCirclesCrossInSeq_Funcs[] = CirclesCrossInSeq_End }; -static const TransitionStateFunc sPhase2_FrontierCirclesAsymmetricSpiralInSeq_Funcs[] = +static const TransitionStateFunc sFrontierCirclesAsymmetricSpiralInSeq_Funcs[] = { Circles_Init, CirclesAsymmetricSpiralInSeq_CreateSprites, @@ -184,7 +182,7 @@ static const TransitionStateFunc sPhase2_FrontierCirclesAsymmetricSpiralInSeq_Fu CirclesAsymmetricSpiralInSeq_End }; -static const TransitionStateFunc sPhase2_FrontierCirclesSymmetricSpiralInSeq_Funcs[] = +static const TransitionStateFunc sFrontierCirclesSymmetricSpiralInSeq_Funcs[] = { Circles_Init, CirclesSymmetricSpiralInSeq_CreateSprites, @@ -193,45 +191,72 @@ static const TransitionStateFunc sPhase2_FrontierCirclesSymmetricSpiralInSeq_Fun CirclesSymmetricSpiralInSeq_End }; -// code +// Task data +#define tState data[0] +#define tTimer data[1] +#define tBlend data[2] +#define tFadeTimer data[3] +#define tCircle1SpriteId data[4] +#define tCircle2SpriteId data[5] +#define tCircle3SpriteId data[6] + +#define sTargetX data[0] +#define sTargetY data[1] + +// Sprite data for CreateSlidingLogoCircleSprite +#define sSpeedX data[2] +#define sSpeedY data[3] +#define sTimerX data[4] +#define sTimerY data[5] +#define sDelayX data[6] +#define sDelayY data[7] + +// Sprite data for CreateSpiralingLogoCircleSprite +#define sAngle data[2] +#define sRotateSpeed data[3] +#define sRadius data[4] +#define sTargetRadius data[5] +#define sRadiusDelta data[6] + + static void LoadLogoGfx(void) { - u16 *dst1, *dst2; + u16 *tilemap, *tileset; - GetBg0TilesDst(&dst1, &dst2); - LZ77UnCompVram(sLogoCenter_Gfx, dst2); - LZ77UnCompVram(sLogoCenter_Tilemap, dst1); - LoadPalette(sLogo_Pal, 0xF0, 0x20); + GetBg0TilesDst(&tilemap, &tileset); + LZ77UnCompVram(sLogoCenter_Gfx, tileset); + LZ77UnCompVram(sLogoCenter_Tilemap, tilemap); + LoadPalette(sLogo_Pal, 0xF0, sizeof(sLogo_Pal)); LoadCompressedSpriteSheet(&sSpriteSheet_LogoCircles); LoadSpritePalette(&sSpritePalette_LogoCircles); } -static u8 CreateSlidingLogoCircleSprite(s16 x, s16 y, u8 arg2, u8 arg3, s8 arg4, s8 arg5, u8 spriteAnimNum) +static u8 CreateSlidingLogoCircleSprite(s16 x, s16 y, u8 delayX, u8 delayY, s8 speedX, s8 speedY, u8 spriteAnimNum) { u8 spriteId = CreateSprite(&sSpriteTemplate_LogoCircles, x, y, 0); switch (spriteAnimNum) { case 0: - gSprites[spriteId].data[0] = 120; - gSprites[spriteId].data[1] = 45; + gSprites[spriteId].sTargetX = 120; + gSprites[spriteId].sTargetY = 45; break; case 1: - gSprites[spriteId].data[0] = 89; - gSprites[spriteId].data[1] = 97; + gSprites[spriteId].sTargetX = 89; + gSprites[spriteId].sTargetY = 97; break; case 2: - gSprites[spriteId].data[0] = 151; - gSprites[spriteId].data[1] = 97; + gSprites[spriteId].sTargetX = 151; + gSprites[spriteId].sTargetY = 97; break; } - gSprites[spriteId].data[2] = arg4; - gSprites[spriteId].data[3] = arg5; - gSprites[spriteId].data[6] = arg2; - gSprites[spriteId].data[7] = arg3; - gSprites[spriteId].data[4] = 0; - gSprites[spriteId].data[5] = 0; + gSprites[spriteId].sSpeedX = speedX; + gSprites[spriteId].sSpeedY = speedY; + gSprites[spriteId].sDelayX = delayX; + gSprites[spriteId].sDelayY = delayY; + gSprites[spriteId].sTimerX = 0; + gSprites[spriteId].sTimerY = 0; StartSpriteAnim(&gSprites[spriteId], spriteAnimNum); gSprites[spriteId].callback = SpriteCB_LogoCircleSlide; @@ -243,59 +268,60 @@ static void SpriteCB_LogoCircleSlide(struct Sprite *sprite) { s16 *data = sprite->data; - if (sprite->x == data[0] && sprite->y == data[1]) + if (sprite->x == sTargetX && sprite->y == sTargetY) { sprite->callback = SpriteCallbackDummy; } else { - if (data[4] == data[6]) + if (sTimerX == sDelayX) { - sprite->x += data[2]; - data[4] = 0; + sprite->x += sSpeedX; + sTimerX = 0; } else { - data[4]++; + sTimerX++; } - if (data[5] == data[7]) + if (sTimerY == sDelayY) { - sprite->y += data[3]; - data[5] = 0; + sprite->y += sSpeedY; + sTimerY = 0; } else { - data[5]++; + sTimerY++; } } } -static u8 CreateSpiralingLogoCircleSprite(s16 x, s16 y, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, u8 spriteAnimNum) +static u8 CreateSpiralingLogoCircleSprite(s16 x, s16 y, s16 angle, s16 rotateSpeed, s16 radiusStart, s16 radiusEnd, s16 radiusDelta, u8 spriteAnimNum) { u8 spriteId = CreateSprite(&sSpriteTemplate_LogoCircles, x, y, 0); + // Target coords are set but irrelevant switch (spriteAnimNum) { case 0: - gSprites[spriteId].data[0] = 120; - gSprites[spriteId].data[1] = 45; + gSprites[spriteId].sTargetX = 120; + gSprites[spriteId].sTargetY = 45; break; case 1: - gSprites[spriteId].data[0] = 89; - gSprites[spriteId].data[1] = 97; + gSprites[spriteId].sTargetX = 89; + gSprites[spriteId].sTargetY = 97; break; case 2: - gSprites[spriteId].data[0] = 151; - gSprites[spriteId].data[1] = 97; + gSprites[spriteId].sTargetX = 151; + gSprites[spriteId].sTargetY = 97; break; } - gSprites[spriteId].data[2] = arg2; - gSprites[spriteId].data[3] = arg3; - gSprites[spriteId].data[4] = arg4; - gSprites[spriteId].data[5] = arg5; - gSprites[spriteId].data[6] = arg6; + gSprites[spriteId].sAngle = angle; + gSprites[spriteId].sRotateSpeed = rotateSpeed; + gSprites[spriteId].sRadius = radiusStart; + gSprites[spriteId].sTargetRadius = radiusEnd; + gSprites[spriteId].sRadiusDelta = radiusDelta; StartSpriteAnim(&gSprites[spriteId], spriteAnimNum); gSprites[spriteId].callback = SpriteCB_LogoCircleSpiral; @@ -305,34 +331,32 @@ static u8 CreateSpiralingLogoCircleSprite(s16 x, s16 y, s16 arg2, s16 arg3, s16 static void SpriteCB_LogoCircleSpiral(struct Sprite *sprite) { - sprite->x2 = (Sin2(sprite->data[2]) * sprite->data[4]) >> 12; // div by 4096 - sprite->y2 = (Cos2(sprite->data[2]) * sprite->data[4]) >> 12; // div by 4096 + sprite->x2 = (Sin2(sprite->sAngle) * sprite->sRadius) >> 12; // div by 4096 + sprite->y2 = (Cos2(sprite->sAngle) * sprite->sRadius) >> 12; // div by 4096 - sprite->data[2] = (sprite->data[2] + sprite->data[3]) % 360; + sprite->sAngle = (sprite->sAngle + sprite->sRotateSpeed) % 360; - if (sprite->data[4] != sprite->data[5]) - sprite->data[4] += sprite->data[6]; + if (sprite->sRadius != sprite->sTargetRadius) + sprite->sRadius += sprite->sRadiusDelta; else sprite->callback = SpriteCallbackDummy; } -#define tState data[0] - static void DestroyLogoCirclesGfx(struct Task *task) { FreeSpriteTilesByTag(PALTAG_LOGO_CIRCLES); FreeSpritePaletteByTag(PALTAG_LOGO_CIRCLES); - DestroySprite(&gSprites[task->data[4]]); - DestroySprite(&gSprites[task->data[5]]); - DestroySprite(&gSprites[task->data[6]]); + DestroySprite(&gSprites[task->tCircle1SpriteId]); + DestroySprite(&gSprites[task->tCircle2SpriteId]); + DestroySprite(&gSprites[task->tCircle3SpriteId]); } static bool8 IsLogoCirclesAnimFinished(struct Task *task) { - if (gSprites[task->data[4]].callback == SpriteCallbackDummy - && gSprites[task->data[5]].callback == SpriteCallbackDummy - && gSprites[task->data[6]].callback == SpriteCallbackDummy) + if (gSprites[task->tCircle1SpriteId].callback == SpriteCallbackDummy + && gSprites[task->tCircle2SpriteId].callback == SpriteCallbackDummy + && gSprites[task->tCircle3SpriteId].callback == SpriteCallbackDummy) return TRUE; else return FALSE; @@ -340,13 +364,13 @@ static bool8 IsLogoCirclesAnimFinished(struct Task *task) static bool8 Circles_Init(struct Task *task) { - if (task->data[1] == 0) + if (task->tTimer == 0) { ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); - task->data[1]++; + task->tTimer++; return FALSE; } else @@ -354,11 +378,11 @@ static bool8 Circles_Init(struct Task *task) LoadLogoGfx(); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgY(0, 0x500, 2); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgY(0, 0x500, BG_COORD_SUB); - task->data[1] = 0; + task->tTimer = 0; task->tState++; return TRUE; } @@ -366,27 +390,27 @@ static bool8 Circles_Init(struct Task *task) static bool8 FadeInCenterLogoCircle(struct Task *task) { - if (task->data[2] == 0) + if (task->tBlend == 0) SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); - if (task->data[2] == 16) + if (task->tBlend == 16) { - if (task->data[3] == 31) + if (task->tFadeTimer == 31) { BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 0x10, RGB_BLACK); task->tState++; } else { - task->data[3]++; + task->tFadeTimer++; } } else { u16 blnd; - task->data[2]++; - blnd = task->data[2]; + task->tBlend++; + blnd = task->tBlend; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(blnd, 16 - blnd)); } @@ -401,16 +425,16 @@ static bool8 WaitForLogoCirclesAnim(struct Task *task) return FALSE; } -void Phase2Task_FrontierCirclesMeet(u8 taskId) +void Task_FrontierCirclesMeet(u8 taskId) { - while (sPhase2_FrontierCirclesMeet_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierCirclesMeet_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } static bool8 CirclesMeet_CreateSprites(struct Task *task) { - task->data[4] = CreateSlidingLogoCircleSprite(120, -51, 0, 0, 0, 2, 0); - task->data[5] = CreateSlidingLogoCircleSprite(-7, 193, 0, 0, 2, -2, 1); - task->data[6] = CreateSlidingLogoCircleSprite(247, 193, 0, 0, -2, -2, 2); + task->tCircle1SpriteId = CreateSlidingLogoCircleSprite(120, -51, 0, 0, 0, 2, 0); + task->tCircle2SpriteId = CreateSlidingLogoCircleSprite(-7, 193, 0, 0, 2, -2, 1); + task->tCircle3SpriteId = CreateSlidingLogoCircleSprite(247, 193, 0, 0, -2, -2, 2); task->tState++; return FALSE; @@ -421,22 +445,22 @@ static bool8 CirclesMeet_End(struct Task *task) if (!gPaletteFade.active) { DestroyLogoCirclesGfx(task); - DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesMeet)); + DestroyTask(FindTaskIdByFunc(Task_FrontierCirclesMeet)); } return FALSE; } -void Phase2Task_FrontierCirclesCross(u8 taskId) +void Task_FrontierCirclesCross(u8 taskId) { - while (sPhase2_FrontierCirclesCross_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierCirclesCross_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } static bool8 CirclesCross_CreateSprites(struct Task *task) { - task->data[4] = CreateSlidingLogoCircleSprite(120, 197, 0, 0, 0, -4, 0); - task->data[5] = CreateSlidingLogoCircleSprite(241, 59, 0, 1, -4, 2, 1); - task->data[6] = CreateSlidingLogoCircleSprite(-1, 59, 0, 1, 4, 2, 2); + task->tCircle1SpriteId = CreateSlidingLogoCircleSprite(120, 197, 0, 0, 0, -4, 0); + task->tCircle2SpriteId = CreateSlidingLogoCircleSprite(241, 59, 0, 1, -4, 2, 1); + task->tCircle3SpriteId = CreateSlidingLogoCircleSprite(-1, 59, 0, 1, 4, 2, 2); task->tState++; return FALSE; @@ -447,22 +471,22 @@ static bool8 CirclesCross_End(struct Task *task) if (!gPaletteFade.active) { DestroyLogoCirclesGfx(task); - DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesCross)); + DestroyTask(FindTaskIdByFunc(Task_FrontierCirclesCross)); } return FALSE; } -void Phase2Task_FrontierCirclesAsymmetricSpiral(u8 taskId) +void Task_FrontierCirclesAsymmetricSpiral(u8 taskId) { - while (sPhase2_FrontierCirclesAsymmetricSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierCirclesAsymmetricSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } static bool8 CirclesAsymmetricSpiral_CreateSprites(struct Task *task) { - task->data[4] = CreateSpiralingLogoCircleSprite(120, 45, 12, 4, 128, 0, -4, 0); - task->data[5] = CreateSpiralingLogoCircleSprite(89, 97, 252, 4, 128, 0, -4, 1); - task->data[6] = CreateSpiralingLogoCircleSprite(151, 97, 132, 4, 128, 0, -4, 2); + task->tCircle1SpriteId = CreateSpiralingLogoCircleSprite(120, 45, 12, 4, 128, 0, -4, 0); + task->tCircle2SpriteId = CreateSpiralingLogoCircleSprite(89, 97, 252, 4, 128, 0, -4, 1); + task->tCircle3SpriteId = CreateSpiralingLogoCircleSprite(151, 97, 132, 4, 128, 0, -4, 2); task->tState++; return FALSE; @@ -473,22 +497,22 @@ static bool8 CirclesAsymmetricSpiral_End(struct Task *task) if (!gPaletteFade.active) { DestroyLogoCirclesGfx(task); - DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesAsymmetricSpiral)); + DestroyTask(FindTaskIdByFunc(Task_FrontierCirclesAsymmetricSpiral)); } return FALSE; } -void Phase2Task_FrontierCirclesSymmetricSpiral(u8 taskId) +void Task_FrontierCirclesSymmetricSpiral(u8 taskId) { - while (sPhase2_FrontierCirclesSymmetricSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierCirclesSymmetricSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } static bool8 CirclesSymmetricSpiral_CreateSprites(struct Task *task) { - task->data[4] = CreateSpiralingLogoCircleSprite(120, 80, 284, 8, 131, 35, -3, 0); - task->data[5] = CreateSpiralingLogoCircleSprite(120, 80, 44, 8, 131, 35, -3, 1); - task->data[6] = CreateSpiralingLogoCircleSprite(121, 80, 164, 8, 131, 35, -3, 2); + task->tCircle1SpriteId = CreateSpiralingLogoCircleSprite(120, 80, 284, 8, 131, 35, -3, 0); + task->tCircle2SpriteId = CreateSpiralingLogoCircleSprite(120, 80, 44, 8, 131, 35, -3, 1); + task->tCircle3SpriteId = CreateSpiralingLogoCircleSprite(121, 80, 164, 8, 131, 35, -3, 2); task->tState++; return FALSE; @@ -499,34 +523,34 @@ static bool8 CirclesSymmetricSpiral_End(struct Task *task) if (!gPaletteFade.active) { DestroyLogoCirclesGfx(task); - DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesSymmetricSpiral)); + DestroyTask(FindTaskIdByFunc(Task_FrontierCirclesSymmetricSpiral)); } return FALSE; } -void Phase2Task_FrontierCirclesMeetInSeq(u8 taskId) +void Task_FrontierCirclesMeetInSeq(u8 taskId) { - while (sPhase2_FrontierCirclesMeetInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierCirclesMeetInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } static bool8 CirclesMeetInSeq_CreateSprites(struct Task *task) { - if (task->data[1] == 0) + if (task->tTimer == 0) { - task->data[4] = CreateSlidingLogoCircleSprite(120, -51, 0, 0, 0, 4, 0); + task->tCircle1SpriteId = CreateSlidingLogoCircleSprite(120, -51, 0, 0, 0, 4, 0); } - else if (task->data[1] == 16) + else if (task->tTimer == 16) { - task->data[5] = CreateSlidingLogoCircleSprite(-7, 193, 0, 0, 4, -4, 1); + task->tCircle2SpriteId = CreateSlidingLogoCircleSprite(-7, 193, 0, 0, 4, -4, 1); } - else if (task->data[1] == 32) + else if (task->tTimer == 32) { - task->data[6] = CreateSlidingLogoCircleSprite(247, 193, 0, 0, -4, -4, 2); + task->tCircle3SpriteId = CreateSlidingLogoCircleSprite(247, 193, 0, 0, -4, -4, 2); task->tState++; } - task->data[1]++; + task->tTimer++; return FALSE; } @@ -535,34 +559,34 @@ static bool8 CirclesMeetInSeq_End(struct Task *task) if (!gPaletteFade.active) { DestroyLogoCirclesGfx(task); - DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesMeetInSeq)); + DestroyTask(FindTaskIdByFunc(Task_FrontierCirclesMeetInSeq)); } return FALSE; } -void Phase2Task_FrontierCirclesCrossInSeq(u8 taskId) +void Task_FrontierCirclesCrossInSeq(u8 taskId) { - while (sPhase2_FrontierCirclesCrossInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierCirclesCrossInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } static bool8 CirclesCrossInSeq_CreateSprites(struct Task *task) { - if (task->data[1] == 0) + if (task->tTimer == 0) { - task->data[4] = CreateSlidingLogoCircleSprite(120, 197, 0, 0, 0, -8, 0); + task->tCircle1SpriteId = CreateSlidingLogoCircleSprite(120, 197, 0, 0, 0, -8, 0); } - else if (task->data[1] == 16) + else if (task->tTimer == 16) { - task->data[5] = CreateSlidingLogoCircleSprite(241, 78, 0, 0, -8, 1, 1); + task->tCircle2SpriteId = CreateSlidingLogoCircleSprite(241, 78, 0, 0, -8, 1, 1); } - else if (task->data[1] == 32) + else if (task->tTimer == 32) { - task->data[6] = CreateSlidingLogoCircleSprite(-1, 78, 0, 0, 8, 1, 2); + task->tCircle3SpriteId = CreateSlidingLogoCircleSprite(-1, 78, 0, 0, 8, 1, 2); task->tState++; } - task->data[1]++; + task->tTimer++; return FALSE; } @@ -571,34 +595,34 @@ static bool8 CirclesCrossInSeq_End(struct Task *task) if (!gPaletteFade.active) { DestroyLogoCirclesGfx(task); - DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesCrossInSeq)); + DestroyTask(FindTaskIdByFunc(Task_FrontierCirclesCrossInSeq)); } return FALSE; } -void Phase2Task_FrontierCirclesAsymmetricSpiralInSeq(u8 taskId) +void Task_FrontierCirclesAsymmetricSpiralInSeq(u8 taskId) { - while (sPhase2_FrontierCirclesAsymmetricSpiralInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierCirclesAsymmetricSpiralInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } static bool8 CirclesAsymmetricSpiralInSeq_CreateSprites(struct Task *task) { - if (task->data[1] == 0) + if (task->tTimer == 0) { - task->data[4] = CreateSpiralingLogoCircleSprite(120, 45, 12, 4, 128, 0, -4, 0); + task->tCircle1SpriteId = CreateSpiralingLogoCircleSprite(120, 45, 12, 4, 128, 0, -4, 0); } - else if (task->data[1] == 16) + else if (task->tTimer == 16) { - task->data[5] = CreateSpiralingLogoCircleSprite(89, 97, 252, 4, 128, 0, -4, 1); + task->tCircle2SpriteId = CreateSpiralingLogoCircleSprite(89, 97, 252, 4, 128, 0, -4, 1); } - else if (task->data[1] == 32) + else if (task->tTimer == 32) { - task->data[6] = CreateSpiralingLogoCircleSprite(151, 97, 132, 4, 128, 0, -4, 2); + task->tCircle3SpriteId = CreateSpiralingLogoCircleSprite(151, 97, 132, 4, 128, 0, -4, 2); task->tState++; } - task->data[1]++; + task->tTimer++; return FALSE; } @@ -607,34 +631,34 @@ static bool8 CirclesAsymmetricSpiralInSeq_End(struct Task *task) if (!gPaletteFade.active) { DestroyLogoCirclesGfx(task); - DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesAsymmetricSpiralInSeq)); + DestroyTask(FindTaskIdByFunc(Task_FrontierCirclesAsymmetricSpiralInSeq)); } return FALSE; } -void Phase2Task_FrontierCirclesSymmetricSpiralInSeq(u8 taskId) +void Task_FrontierCirclesSymmetricSpiralInSeq(u8 taskId) { - while (sPhase2_FrontierCirclesSymmetricSpiralInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId])); + while (sFrontierCirclesSymmetricSpiralInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId])); } static bool8 CirclesSymmetricSpiralInSeq_CreateSprites(struct Task *task) { - if (task->data[1] == 0) + if (task->tTimer == 0) { - task->data[4] = CreateSpiralingLogoCircleSprite(120, 80, 284, 8, 131, 35, -3, 0); + task->tCircle1SpriteId = CreateSpiralingLogoCircleSprite(120, 80, 284, 8, 131, 35, -3, 0); } - else if (task->data[1] == 16) + else if (task->tTimer == 16) { - task->data[5] = CreateSpiralingLogoCircleSprite(120, 80, 44, 8, 131, 35, -3, 1); + task->tCircle2SpriteId = CreateSpiralingLogoCircleSprite(120, 80, 44, 8, 131, 35, -3, 1); } - else if (task->data[1] == 32) + else if (task->tTimer == 32) { - task->data[6] = CreateSpiralingLogoCircleSprite(121, 80, 164, 8, 131, 35, -3, 2); + task->tCircle3SpriteId = CreateSpiralingLogoCircleSprite(121, 80, 164, 8, 131, 35, -3, 2); task->tState++; } - task->data[1]++; + task->tTimer++; return FALSE; } @@ -643,7 +667,7 @@ static bool8 CirclesSymmetricSpiralInSeq_End(struct Task *task) if (!gPaletteFade.active) { DestroyLogoCirclesGfx(task); - DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesSymmetricSpiralInSeq)); + DestroyTask(FindTaskIdByFunc(Task_FrontierCirclesSymmetricSpiralInSeq)); } return FALSE; diff --git a/src/battle_tv.c b/src/battle_tv.c index 8c1f8044a5..19d3eba8df 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -86,219 +86,219 @@ static const u16 sVariableDmgMoves[] = static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = { - [EFFECT_HIT] = 1, - [EFFECT_SLEEP] = 1, - [EFFECT_POISON_HIT] = 1, - [EFFECT_ABSORB] = 4, - [EFFECT_BURN_HIT] = 1, - [EFFECT_FREEZE_HIT] = 1, - [EFFECT_PARALYZE_HIT] = 1, - [EFFECT_EXPLOSION] = 0, - [EFFECT_DREAM_EATER] = 5, - [EFFECT_MIRROR_MOVE] = 1, - [EFFECT_ATTACK_UP] = 1, - [EFFECT_DEFENSE_UP] = 1, - [EFFECT_SPEED_UP] = 1, - [EFFECT_SPECIAL_ATTACK_UP] = 1, - [EFFECT_SPECIAL_DEFENSE_UP] = 1, + [EFFECT_HIT] = 1, + [EFFECT_SLEEP] = 1, + [EFFECT_POISON_HIT] = 1, + [EFFECT_ABSORB] = 4, + [EFFECT_BURN_HIT] = 1, + [EFFECT_FREEZE_HIT] = 1, + [EFFECT_PARALYZE_HIT] = 1, + [EFFECT_EXPLOSION] = 0, + [EFFECT_DREAM_EATER] = 5, + [EFFECT_MIRROR_MOVE] = 1, + [EFFECT_ATTACK_UP] = 1, + [EFFECT_DEFENSE_UP] = 1, + [EFFECT_SPEED_UP] = 1, + [EFFECT_SPECIAL_ATTACK_UP] = 1, + [EFFECT_SPECIAL_DEFENSE_UP] = 1, [EFFECT_ACCURACY_UP] = 1, - [EFFECT_EVASION_UP] = 1, - [EFFECT_ALWAYS_HIT] = 2, - [EFFECT_ATTACK_DOWN] = 1, - [EFFECT_DEFENSE_DOWN] = 1, - [EFFECT_SPEED_DOWN] = 1, - [EFFECT_SPECIAL_ATTACK_DOWN] = 1, - [EFFECT_SPECIAL_DEFENSE_DOWN] = 1, - [EFFECT_ACCURACY_DOWN] = 1, - [EFFECT_EVASION_DOWN] = 1, - [EFFECT_HAZE] = 5, - [EFFECT_BIDE] = 5, - [EFFECT_RAMPAGE] = 4, - [EFFECT_ROAR] = 5, - [EFFECT_MULTI_HIT] = 1, - [EFFECT_CONVERSION] = 3, + [EFFECT_EVASION_UP] = 1, +// [EFFECT_ALWAYS_HIT] = 2, + [EFFECT_ATTACK_DOWN] = 1, + [EFFECT_DEFENSE_DOWN] = 1, + [EFFECT_SPEED_DOWN] = 1, + [EFFECT_SPECIAL_ATTACK_DOWN] = 1, + [EFFECT_SPECIAL_DEFENSE_DOWN] = 1, + [EFFECT_ACCURACY_DOWN] = 1, + [EFFECT_EVASION_DOWN] = 1, + [EFFECT_HAZE] = 5, + [EFFECT_BIDE] = 5, + [EFFECT_RAMPAGE] = 4, + [EFFECT_ROAR] = 5, + [EFFECT_MULTI_HIT] = 1, + [EFFECT_CONVERSION] = 3, [EFFECT_FLINCH_HIT] = 1, - [EFFECT_RESTORE_HP] = 3, - [EFFECT_TOXIC] = 5, - [EFFECT_PAY_DAY] = 1, - [EFFECT_LIGHT_SCREEN] = 7, - [EFFECT_TRI_ATTACK] = 1, - [EFFECT_REST] = 7, - [EFFECT_OHKO] = 7, - [EFFECT_RAZOR_WIND] = 1, - [EFFECT_SUPER_FANG] = 5, - [EFFECT_DRAGON_RAGE] = 2, - [EFFECT_TRAP] = 4, - [EFFECT_HIGH_CRITICAL] = 1, - [EFFECT_DOUBLE_HIT] = 1, - [EFFECT_RECOIL_IF_MISS] = 1, - [EFFECT_MIST] = 5, + [EFFECT_RESTORE_HP] = 3, + [EFFECT_TOXIC] = 5, + [EFFECT_PAY_DAY] = 1, + [EFFECT_LIGHT_SCREEN] = 7, + [EFFECT_TRI_ATTACK] = 1, + [EFFECT_REST] = 7, + [EFFECT_OHKO] = 7, +// [EFFECT_RAZOR_WIND] = 1, + [EFFECT_SUPER_FANG] = 5, + [EFFECT_DRAGON_RAGE] = 2, + [EFFECT_TRAP] = 4, +// [EFFECT_HIGH_CRITICAL] = 1, + [EFFECT_DOUBLE_HIT] = 1, + [EFFECT_RECOIL_IF_MISS] = 1, + [EFFECT_MIST] = 5, [EFFECT_FOCUS_ENERGY] = 1, - [EFFECT_RECOIL] = 2, - [EFFECT_CONFUSE] = 4, - [EFFECT_ATTACK_UP_2] = 1, - [EFFECT_DEFENSE_UP_2] = 1, - [EFFECT_SPEED_UP_2] = 1, - [EFFECT_SPECIAL_ATTACK_UP_2] = 1, - [EFFECT_SPECIAL_DEFENSE_UP_2] = 1, - [EFFECT_ACCURACY_UP_2] = 1, - [EFFECT_EVASION_UP_2] = 1, - [EFFECT_TRANSFORM] = 0, - [EFFECT_ATTACK_DOWN_2] = 1, - [EFFECT_DEFENSE_DOWN_2] = 1, - [EFFECT_SPEED_DOWN_2] = 1, - [EFFECT_SPECIAL_ATTACK_DOWN_2] = 1, - [EFFECT_SPECIAL_DEFENSE_DOWN_2] = 1, + [EFFECT_RECOIL_25] = 2, + [EFFECT_CONFUSE] = 4, + [EFFECT_ATTACK_UP_2] = 1, + [EFFECT_DEFENSE_UP_2] = 1, + [EFFECT_SPEED_UP_2] = 1, + [EFFECT_SPECIAL_ATTACK_UP_2] = 1, + [EFFECT_SPECIAL_DEFENSE_UP_2] = 1, + [EFFECT_ACCURACY_UP_2] = 1, + [EFFECT_EVASION_UP_2] = 1, + [EFFECT_TRANSFORM] = 0, + [EFFECT_ATTACK_DOWN_2] = 1, + [EFFECT_DEFENSE_DOWN_2] = 1, + [EFFECT_SPEED_DOWN_2] = 1, + [EFFECT_SPECIAL_ATTACK_DOWN_2] = 1, + [EFFECT_SPECIAL_DEFENSE_DOWN_2] = 1, [EFFECT_ACCURACY_DOWN_2] = 1, - [EFFECT_EVASION_DOWN_2] = 1, - [EFFECT_REFLECT] = 7, - [EFFECT_POISON] = 4, - [EFFECT_PARALYZE] = 4, - [EFFECT_ATTACK_DOWN_HIT] = 1, - [EFFECT_DEFENSE_DOWN_HIT] = 1, - [EFFECT_SPEED_DOWN_HIT] = 1, - [EFFECT_SPECIAL_ATTACK_DOWN_HIT] = 1, - [EFFECT_SPECIAL_DEFENSE_DOWN_HIT] = 1, - [EFFECT_ACCURACY_DOWN_HIT] = 1, - [EFFECT_EVASION_DOWN_HIT] = 1, - [EFFECT_SKY_ATTACK] = 4, - [EFFECT_CONFUSE_HIT] = 1, - [EFFECT_TWINEEDLE] = 1, - [EFFECT_VITAL_THROW] = 1, + [EFFECT_EVASION_DOWN_2] = 1, + [EFFECT_REFLECT] = 7, + [EFFECT_POISON] = 4, + [EFFECT_PARALYZE] = 4, + [EFFECT_ATTACK_DOWN_HIT] = 1, + [EFFECT_DEFENSE_DOWN_HIT] = 1, + [EFFECT_SPEED_DOWN_HIT] = 1, + [EFFECT_SPECIAL_ATTACK_DOWN_HIT] = 1, + [EFFECT_SPECIAL_DEFENSE_DOWN_HIT] = 1, + [EFFECT_ACCURACY_DOWN_HIT] = 1, + [EFFECT_EVASION_DOWN_HIT] = 1, +// [EFFECT_SKY_ATTACK] = 4, + [EFFECT_CONFUSE_HIT] = 1, + [EFFECT_TWINEEDLE] = 1, + [EFFECT_VITAL_THROW] = 1, [EFFECT_SUBSTITUTE] = 4, - [EFFECT_RECHARGE] = 5, - [EFFECT_RAGE] = 2, - [EFFECT_MIMIC] = 4, - [EFFECT_METRONOME] = 1, - [EFFECT_LEECH_SEED] = 4, - [EFFECT_SPLASH] = 1, - [EFFECT_DISABLE] = 7, - [EFFECT_LEVEL_DAMAGE] = 2, - [EFFECT_PSYWAVE] = 1, - [EFFECT_COUNTER] = 5, - [EFFECT_ENCORE] = 7, - [EFFECT_PAIN_SPLIT] = 3, - [EFFECT_SNORE] = 3, - [EFFECT_CONVERSION_2] = 4, - [EFFECT_LOCK_ON] = 3, + [EFFECT_RECHARGE] = 5, + [EFFECT_RAGE] = 2, + [EFFECT_MIMIC] = 4, + [EFFECT_METRONOME] = 1, + [EFFECT_LEECH_SEED] = 4, + [EFFECT_DO_NOTHING] = 1, + [EFFECT_DISABLE] = 7, + [EFFECT_LEVEL_DAMAGE] = 2, + [EFFECT_PSYWAVE] = 1, + [EFFECT_COUNTER] = 5, + [EFFECT_ENCORE] = 7, + [EFFECT_PAIN_SPLIT] = 3, + [EFFECT_SNORE] = 3, + [EFFECT_CONVERSION_2] = 4, + [EFFECT_LOCK_ON] = 3, [EFFECT_SKETCH] = 3, - [EFFECT_UNUSED_60] = 3, - [EFFECT_SLEEP_TALK] = 3, - [EFFECT_DESTINY_BOND] = 3, - [EFFECT_FLAIL] = 2, - [EFFECT_SPITE] = 4, - [EFFECT_FALSE_SWIPE] = 1, - [EFFECT_HEAL_BELL] = 5, - [EFFECT_QUICK_ATTACK] = 1, - [EFFECT_TRIPLE_KICK] = 1, - [EFFECT_THIEF] = 4, - [EFFECT_MEAN_LOOK] = 5, - [EFFECT_NIGHTMARE] = 3, - [EFFECT_MINIMIZE] = 1, - [EFFECT_CURSE] = 2, - [EFFECT_UNUSED_6E] = 1, +// [EFFECT_UNUSED_60] = 3, + [EFFECT_SLEEP_TALK] = 3, + [EFFECT_DESTINY_BOND] = 3, + [EFFECT_FLAIL] = 2, + [EFFECT_SPITE] = 4, + [EFFECT_FALSE_SWIPE] = 1, + [EFFECT_HEAL_BELL] = 5, +// [EFFECT_QUICK_ATTACK] = 1, + [EFFECT_TRIPLE_KICK] = 1, + [EFFECT_THIEF] = 4, + [EFFECT_MEAN_LOOK] = 5, + [EFFECT_NIGHTMARE] = 3, + [EFFECT_MINIMIZE] = 1, + [EFFECT_CURSE] = 2, +// [EFFECT_UNUSED_6E] = 1, [EFFECT_PROTECT] = 5, - [EFFECT_SPIKES] = 4, - [EFFECT_FORESIGHT] = 3, - [EFFECT_PERISH_SONG] = 6, - [EFFECT_SANDSTORM] = 4, - [EFFECT_ENDURE] = 3, - [EFFECT_ROLLOUT] = 3, - [EFFECT_SWAGGER] = 3, - [EFFECT_FURY_CUTTER] = 2, - [EFFECT_ATTRACT] = 4, - [EFFECT_RETURN] = 1, - [EFFECT_PRESENT] = 1, - [EFFECT_FRUSTRATION] = 1, - [EFFECT_SAFEGUARD] = 5, - [EFFECT_THAW_HIT] = 1, - [EFFECT_MAGNITUDE] = 1, + [EFFECT_SPIKES] = 4, + [EFFECT_FORESIGHT] = 3, + [EFFECT_PERISH_SONG] = 6, + [EFFECT_SANDSTORM] = 4, + [EFFECT_ENDURE] = 3, + [EFFECT_ROLLOUT] = 3, + [EFFECT_SWAGGER] = 3, + [EFFECT_FURY_CUTTER] = 2, + [EFFECT_ATTRACT] = 4, + [EFFECT_RETURN] = 1, + [EFFECT_PRESENT] = 1, + [EFFECT_FRUSTRATION] = 1, + [EFFECT_SAFEGUARD] = 5, +// [EFFECT_THAW_HIT] = 1, Now unused + [EFFECT_MAGNITUDE] = 1, [EFFECT_BATON_PASS] = 7, - [EFFECT_PURSUIT] = 2, - [EFFECT_RAPID_SPIN] = 2, - [EFFECT_SONICBOOM] = 1, - [EFFECT_UNUSED_83] = 1, - [EFFECT_MORNING_SUN] = 4, - [EFFECT_SYNTHESIS] = 4, - [EFFECT_MOONLIGHT] = 4, - [EFFECT_HIDDEN_POWER] = 1, - [EFFECT_RAIN_DANCE] = 4, - [EFFECT_SUNNY_DAY] = 4, - [EFFECT_DEFENSE_UP_HIT] = 1, - [EFFECT_ATTACK_UP_HIT] = 1, - [EFFECT_ALL_STATS_UP_HIT] = 1, - [EFFECT_UNUSED_8D] = 1, - [EFFECT_BELLY_DRUM] = 7, + [EFFECT_PURSUIT] = 2, + [EFFECT_RAPID_SPIN] = 2, + [EFFECT_SONICBOOM] = 1, +// [EFFECT_UNUSED_83] = 1, + [EFFECT_MORNING_SUN] = 4, + [EFFECT_SYNTHESIS] = 4, + [EFFECT_MOONLIGHT] = 4, + [EFFECT_HIDDEN_POWER] = 1, + [EFFECT_RAIN_DANCE] = 4, + [EFFECT_SUNNY_DAY] = 4, + [EFFECT_DEFENSE_UP_HIT] = 1, + [EFFECT_ATTACK_UP_HIT] = 1, + [EFFECT_ALL_STATS_UP_HIT] = 1, +// [EFFECT_UNUSED_8D] = 1, + [EFFECT_BELLY_DRUM] = 7, [EFFECT_PSYCH_UP] = 7, - [EFFECT_MIRROR_COAT] = 6, - [EFFECT_SKULL_BASH] = 3, - [EFFECT_TWISTER] = 1, + [EFFECT_MIRROR_COAT] = 6, + [EFFECT_SKULL_BASH] = 3, + [EFFECT_TWISTER] = 1, [EFFECT_EARTHQUAKE] = 1, - [EFFECT_FUTURE_SIGHT] = 1, - [EFFECT_GUST] = 1, - [EFFECT_FLINCH_MINIMIZE_HIT] = 1, - [EFFECT_SOLARBEAM] = 1, - [EFFECT_THUNDER] = 1, - [EFFECT_TELEPORT] = 1, - [EFFECT_BEAT_UP] = 2, - [EFFECT_SEMI_INVULNERABLE] = 3, - [EFFECT_DEFENSE_CURL] = 1, - [EFFECT_SOFTBOILED] = 1, - [EFFECT_FAKE_OUT] = 4, + [EFFECT_FUTURE_SIGHT] = 1, + [EFFECT_GUST] = 1, + [EFFECT_FLINCH_MINIMIZE_HIT] = 1, + [EFFECT_SOLAR_BEAM] = 1, + [EFFECT_THUNDER] = 1, + [EFFECT_TELEPORT] = 1, + [EFFECT_BEAT_UP] = 2, + [EFFECT_SEMI_INVULNERABLE] = 3, + [EFFECT_DEFENSE_CURL] = 1, + [EFFECT_SOFTBOILED] = 1, + [EFFECT_FAKE_OUT] = 4, [EFFECT_UPROAR] = 4, - [EFFECT_STOCKPILE] = 3, - [EFFECT_SPIT_UP] = 3, - [EFFECT_SWALLOW] = 3, - [EFFECT_UNUSED_A3] = 1, - [EFFECT_HAIL] = 4, - [EFFECT_TORMENT] = 7, - [EFFECT_FLATTER] = 7, - [EFFECT_WILL_O_WISP] = 5, - [EFFECT_MEMENTO] = 7, - [EFFECT_FACADE] = 1, - [EFFECT_FOCUS_PUNCH] = 7, - [EFFECT_SMELLINGSALT] = 1, - [EFFECT_FOLLOW_ME] = 5, - [EFFECT_NATURE_POWER] = 0, - [EFFECT_CHARGE] = 4, + [EFFECT_STOCKPILE] = 3, + [EFFECT_SPIT_UP] = 3, + [EFFECT_SWALLOW] = 3, +// [EFFECT_UNUSED_A3] = 1, + [EFFECT_HAIL] = 4, + [EFFECT_TORMENT] = 7, + [EFFECT_FLATTER] = 7, + [EFFECT_WILL_O_WISP] = 5, + [EFFECT_MEMENTO] = 7, + [EFFECT_FACADE] = 1, + [EFFECT_FOCUS_PUNCH] = 7, + [EFFECT_SMELLINGSALT] = 1, + [EFFECT_FOLLOW_ME] = 5, + [EFFECT_NATURE_POWER] = 0, + [EFFECT_CHARGE] = 4, [EFFECT_TAUNT] = 4, - [EFFECT_HELPING_HAND] = 4, - [EFFECT_TRICK] = 4, - [EFFECT_ROLE_PLAY] = 4, - [EFFECT_WISH] = 2, - [EFFECT_ASSIST] = 2, - [EFFECT_INGRAIN] = 6, - [EFFECT_SUPERPOWER] = 3, - [EFFECT_MAGIC_COAT] = 6, - [EFFECT_RECYCLE] = 4, - [EFFECT_REVENGE] = 4, - [EFFECT_BRICK_BREAK] = 2, - [EFFECT_YAWN] = 5, - [EFFECT_KNOCK_OFF] = 2, - [EFFECT_ENDEAVOR] = 1, - [EFFECT_ERUPTION] = 1, + [EFFECT_HELPING_HAND] = 4, + [EFFECT_TRICK] = 4, + [EFFECT_ROLE_PLAY] = 4, + [EFFECT_WISH] = 2, + [EFFECT_ASSIST] = 2, + [EFFECT_INGRAIN] = 6, + [EFFECT_SUPERPOWER] = 3, + [EFFECT_MAGIC_COAT] = 6, + [EFFECT_RECYCLE] = 4, + [EFFECT_REVENGE] = 4, + [EFFECT_BRICK_BREAK] = 2, + [EFFECT_YAWN] = 5, + [EFFECT_KNOCK_OFF] = 2, + [EFFECT_ENDEAVOR] = 1, + [EFFECT_ERUPTION] = 1, [EFFECT_SKILL_SWAP] = 6, - [EFFECT_IMPRISON] = 6, - [EFFECT_REFRESH] = 6, - [EFFECT_GRUDGE] = 1, - [EFFECT_SNATCH] = 1, - [EFFECT_LOW_KICK] = 1, - [EFFECT_SECRET_POWER] = 1, - [EFFECT_DOUBLE_EDGE] = 2, - [EFFECT_TEETER_DANCE] = 6, - [EFFECT_BLAZE_KICK] = 1, - [EFFECT_MUD_SPORT] = 4, - [EFFECT_POISON_FANG] = 1, - [EFFECT_WEATHER_BALL] = 1, - [EFFECT_OVERHEAT] = 3, - [EFFECT_TICKLE] = 1, - [EFFECT_COSMIC_POWER] = 1, + [EFFECT_IMPRISON] = 6, + [EFFECT_REFRESH] = 6, + [EFFECT_GRUDGE] = 1, + [EFFECT_SNATCH] = 1, + [EFFECT_LOW_KICK] = 1, + [EFFECT_SECRET_POWER] = 1, + [EFFECT_RECOIL_33] = 2, + [EFFECT_TEETER_DANCE] = 6, +// [EFFECT_BLAZE_KICK] = 1, + [EFFECT_MUD_SPORT] = 4, + [EFFECT_POISON_FANG] = 1, + [EFFECT_WEATHER_BALL] = 1, + [EFFECT_OVERHEAT] = 3, + [EFFECT_TICKLE] = 1, + [EFFECT_COSMIC_POWER] = 1, [EFFECT_SKY_UPPERCUT] = 1, - [EFFECT_BULK_UP] = 1, - [EFFECT_POISON_TAIL] = 1, - [EFFECT_WATER_SPORT] = 4, - [EFFECT_CALM_MIND] = 1, - [EFFECT_DRAGON_DANCE] = 1, + [EFFECT_BULK_UP] = 1, +// [EFFECT_POISON_TAIL] = 1, + [EFFECT_WATER_SPORT] = 4, + [EFFECT_CALM_MIND] = 1, + [EFFECT_DRAGON_DANCE] = 1, [EFFECT_CAMOUFLAGE] = 3 }; @@ -312,93 +312,93 @@ static const u16 sPoints_SetUp[] = { 4, // Future Sight 4, // Doom Desire - 6, + 6, 6, // Wish 7, // Grudge - 6, + 6, 2 // Ingrain }; static const u16 sPoints_RainMoves[] = { - MOVE_BUBBLE, 3, - MOVE_WHIRLPOOL, 3, - MOVE_OCTAZOOKA, 3, - MOVE_CLAMP, 3, - MOVE_WITHDRAW, 3, - MOVE_CRABHAMMER, 3, - MOVE_WATER_SPOUT, 3, + MOVE_BUBBLE, 3, + MOVE_WHIRLPOOL, 3, + MOVE_OCTAZOOKA, 3, + MOVE_CLAMP, 3, + MOVE_WITHDRAW, 3, + MOVE_CRABHAMMER, 3, + MOVE_WATER_SPOUT, 3, MOVE_DIVE, 3, - MOVE_WATERFALL, 3, - MOVE_MUDDY_WATER, 3, - MOVE_SURF, 3, - MOVE_HYDRO_CANNON, 3, - MOVE_HYDRO_PUMP, 3, - MOVE_BUBBLE_BEAM, 3, + MOVE_WATERFALL, 3, + MOVE_MUDDY_WATER, 3, + MOVE_SURF, 3, + MOVE_HYDRO_CANNON, 3, + MOVE_HYDRO_PUMP, 3, + MOVE_BUBBLE_BEAM, 3, MOVE_WATER_SPORT, 0, // Unnecessary, unlisted moves are already given 0 points MOVE_WATER_GUN, 3, - MOVE_WATER_PULSE, 3, - MOVE_WEATHER_BALL, 3, - MOVE_THUNDER, 3, - MOVE_SOLAR_BEAM, -4, - MOVE_OVERHEAT, -4, - MOVE_FLAME_WHEEL, -4, - MOVE_FLAMETHROWER, -4, + MOVE_WATER_PULSE, 3, + MOVE_WEATHER_BALL, 3, + MOVE_THUNDER, 3, + MOVE_SOLAR_BEAM, -4, + MOVE_OVERHEAT, -4, + MOVE_FLAME_WHEEL, -4, + MOVE_FLAMETHROWER, -4, MOVE_SACRED_FIRE, -4, - MOVE_FIRE_BLAST, -4, - MOVE_HEAT_WAVE, -4, - MOVE_EMBER, -4, - MOVE_BLAST_BURN, -4, - MOVE_BLAZE_KICK, -4, - MOVE_ERUPTION, -4, - MOVE_FIRE_SPIN, -4, + MOVE_FIRE_BLAST, -4, + MOVE_HEAT_WAVE, -4, + MOVE_EMBER, -4, + MOVE_BLAST_BURN, -4, + MOVE_BLAZE_KICK, -4, + MOVE_ERUPTION, -4, + MOVE_FIRE_SPIN, -4, MOVE_FIRE_PUNCH, -4, MOVE_SOLAR_BEAM, -4, // Repeated TABLE_END, 0 }; static const u16 sPoints_SunMoves[] = { - MOVE_OVERHEAT, 3, - MOVE_FLAME_WHEEL, 3, - MOVE_FLAMETHROWER, 3, - MOVE_SACRED_FIRE, 3, - MOVE_FIRE_BLAST, 3, - MOVE_HEAT_WAVE, 3, - MOVE_EMBER, 3, + MOVE_OVERHEAT, 3, + MOVE_FLAME_WHEEL, 3, + MOVE_FLAMETHROWER, 3, + MOVE_SACRED_FIRE, 3, + MOVE_FIRE_BLAST, 3, + MOVE_HEAT_WAVE, 3, + MOVE_EMBER, 3, MOVE_BLAST_BURN, 3, - MOVE_BLAZE_KICK, 3, - MOVE_ERUPTION, 3, - MOVE_FIRE_SPIN, 3, - MOVE_FIRE_PUNCH, 3, - MOVE_SOLAR_BEAM, 5, - MOVE_SYNTHESIS, 3, - MOVE_MORNING_SUN, 3, + MOVE_BLAZE_KICK, 3, + MOVE_ERUPTION, 3, + MOVE_FIRE_SPIN, 3, + MOVE_FIRE_PUNCH, 3, + MOVE_SOLAR_BEAM, 5, + MOVE_SYNTHESIS, 3, + MOVE_MORNING_SUN, 3, MOVE_MOONLIGHT, 3, - MOVE_WEATHER_BALL, 3, + MOVE_WEATHER_BALL, 3, TABLE_END, 0 }; static const u16 sPoints_SandstormMoves[] = { - MOVE_WEATHER_BALL, 3, - MOVE_SOLAR_BEAM, -3, + MOVE_WEATHER_BALL, 3, + MOVE_SOLAR_BEAM, -3, TABLE_END, 0 }; static const u16 sPoints_HailMoves[] = { - MOVE_WEATHER_BALL, 3, - MOVE_SOLAR_BEAM, -3, + MOVE_WEATHER_BALL, 3, + MOVE_SOLAR_BEAM, -3, TABLE_END, 0 }; static const u16 sPoints_ElectricMoves[] = { - MOVE_THUNDERBOLT, 3, - MOVE_THUNDER_PUNCH, 3, - MOVE_SPARK, 3, - MOVE_THUNDER_SHOCK, 3, - MOVE_ZAP_CANNON, 3, - MOVE_SHOCK_WAVE, 3, + MOVE_THUNDERBOLT, 3, + MOVE_THUNDER_PUNCH, 3, + MOVE_SPARK, 3, + MOVE_THUNDER_SHOCK, 3, + MOVE_ZAP_CANNON, 3, + MOVE_SHOCK_WAVE, 3, MOVE_THUNDER_WAVE, 0, // Unnecessary, unlisted moves are already given 0 points MOVE_THUNDER, 3, - MOVE_VOLT_TACKLE, 3, + MOVE_VOLT_TACKLE, 3, TABLE_END, 0 }; static const u16 sPoints_StatusDmg[] = @@ -407,7 +407,7 @@ static const u16 sPoints_StatusDmg[] = 3, // Leech Seed 3, // Poison 3, // Toxic - 3, // Burn + 3, // Burn 3, // Nightmare 3 // Wrap (Trapping move) }; @@ -434,62 +434,62 @@ static const u16 sPoints_Flinched[] = { 4 }; static const u16 sPoints_StatIncrease1[NUM_BATTLE_STATS - 1] = { - [STAT_ATK - 1] = 2, - [STAT_DEF - 1] = 2, - [STAT_SPEED - 1] = 2, - [STAT_SPATK - 1] = 2, - [STAT_SPDEF - 1] = 2, - [STAT_ACC - 1] = 2, + [STAT_ATK - 1] = 2, + [STAT_DEF - 1] = 2, + [STAT_SPEED - 1] = 2, + [STAT_SPATK - 1] = 2, + [STAT_SPDEF - 1] = 2, + [STAT_ACC - 1] = 2, [STAT_EVASION - 1] = 2 }; static const u16 sPoints_StatIncrease2[NUM_BATTLE_STATS - 1] = { - [STAT_ATK - 1] = 4, - [STAT_DEF - 1] = 4, - [STAT_SPEED - 1] = 4, - [STAT_SPATK - 1] = 4, - [STAT_SPDEF - 1] = 4, - [STAT_ACC - 1] = 4, + [STAT_ATK - 1] = 4, + [STAT_DEF - 1] = 4, + [STAT_SPEED - 1] = 4, + [STAT_SPATK - 1] = 4, + [STAT_SPDEF - 1] = 4, + [STAT_ACC - 1] = 4, [STAT_EVASION - 1] = 4 }; static const u16 sPoints_StatDecreaseSelf[NUM_BATTLE_STATS - 1] = { - [STAT_ATK - 1] = -1, - [STAT_DEF - 1] = -1, - [STAT_SPEED - 1] = -1, - [STAT_SPATK - 1] = -1, - [STAT_SPDEF - 1] = -1, - [STAT_ACC - 1] = -1, + [STAT_ATK - 1] = -1, + [STAT_DEF - 1] = -1, + [STAT_SPEED - 1] = -1, + [STAT_SPATK - 1] = -1, + [STAT_SPDEF - 1] = -1, + [STAT_ACC - 1] = -1, [STAT_EVASION - 1] = -1 }; static const u16 sPoints_StatDecrease1[NUM_BATTLE_STATS - 1] = { - [STAT_ATK - 1] = 2, - [STAT_DEF - 1] = 2, - [STAT_SPEED - 1] = 2, - [STAT_SPATK - 1] = 2, - [STAT_SPDEF - 1] = 2, - [STAT_ACC - 1] = 2, + [STAT_ATK - 1] = 2, + [STAT_DEF - 1] = 2, + [STAT_SPEED - 1] = 2, + [STAT_SPATK - 1] = 2, + [STAT_SPDEF - 1] = 2, + [STAT_ACC - 1] = 2, [STAT_EVASION - 1] = 2 }; static const u16 sPoints_StatDecrease2[NUM_BATTLE_STATS - 1] = { - [STAT_ATK - 1] = 4, - [STAT_DEF - 1] = 4, - [STAT_SPEED - 1] = 4, - [STAT_SPATK - 1] = 4, - [STAT_SPDEF - 1] = 4, - [STAT_ACC - 1] = 4, + [STAT_ATK - 1] = 4, + [STAT_DEF - 1] = 4, + [STAT_SPEED - 1] = 4, + [STAT_SPATK - 1] = 4, + [STAT_SPDEF - 1] = 4, + [STAT_ACC - 1] = 4, [STAT_EVASION - 1] = 4 }; static const u16 sPoints_StatIncreaseNotSelf[NUM_BATTLE_STATS - 1] = { - [STAT_ATK - 1] = -2, - [STAT_DEF - 1] = -2, - [STAT_SPEED - 1] = -2, + [STAT_ATK - 1] = -2, + [STAT_DEF - 1] = -2, + [STAT_SPEED - 1] = -2, [STAT_SPATK - 1] = -2, - [STAT_SPDEF - 1] = -2, - [STAT_ACC - 1] = -2, + [STAT_SPDEF - 1] = -2, + [STAT_ACC - 1] = -2, [STAT_EVASION - 1] = -2 }; @@ -570,7 +570,7 @@ void BattleTv_SetDataBasedOnString(u16 stringId) moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gBattleMsgDataPtr->currentMove); - if (moveSlot >= MAX_MON_MOVES && IsNotSpecialBattleString(stringId) && stringId > BATTLESTRINGS_ID_ADDER) + if (moveSlot >= MAX_MON_MOVES && IsNotSpecialBattleString(stringId) && stringId > BATTLESTRINGS_TABLE_START) { tvPtr->side[atkSide].faintCause = FNT_OTHER; return; @@ -1010,10 +1010,10 @@ void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruc tvPtr->side[atkSide ^ BIT_SIDE].explosion = TRUE; } - AddMovePoints(PTS_REFLECT, gBattleMoves[move].type, gBattleMoves[move].power, 0); - AddMovePoints(PTS_LIGHT_SCREEN, gBattleMoves[move].type, gBattleMoves[move].power, 0); - AddMovePoints(PTS_WATER_SPORT, gBattleMoves[move].type, 0, 0); - AddMovePoints(PTS_MUD_SPORT, gBattleMoves[move].type, 0, 0); + AddMovePoints(PTS_REFLECT, move, gBattleMoves[move].power, 0); + AddMovePoints(PTS_LIGHT_SCREEN, move, gBattleMoves[move].power, 0); + AddMovePoints(PTS_WATER_SPORT, move, 0, 0); + AddMovePoints(PTS_MUD_SPORT, move, 0, 0); } void BattleTv_SetDataBasedOnAnimation(u8 animationId) @@ -1130,11 +1130,11 @@ void TryPutLinkBattleTvShowOnAir(void) if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - if ((playerBestMonId < 3 && !GetLinkTrainerFlankId(gBattleScripting.multiplayerId)) - || (playerBestMonId >= 3 && GetLinkTrainerFlankId(gBattleScripting.multiplayerId))) + if ((playerBestMonId < MULTI_PARTY_SIZE && !GetLinkTrainerFlankId(gBattleScripting.multiplayerId)) + || (playerBestMonId >= MULTI_PARTY_SIZE && GetLinkTrainerFlankId(gBattleScripting.multiplayerId))) { - j = (opponentBestMonId < 3) ? 0 : 1; - PutBattleUpdateOnTheAir(sub_806EF84(j, gBattleScripting.multiplayerId), moveId, playerBestSpecies, opponentBestSpecies); + j = (opponentBestMonId < MULTI_PARTY_SIZE) ? FALSE : TRUE; + PutBattleUpdateOnTheAir(GetOpposingLinkMultiBattlerId(j, gBattleScripting.multiplayerId), moveId, playerBestSpecies, opponentBestSpecies); } } else @@ -1210,11 +1210,11 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) movePoints->points[arg1][arg2 * 4 + arg3] += sPointsArray[caseId][0]; break; -#define type arg1 +#define move arg1 #define power arg2 case PTS_WATER_SPORT: // If used fire move during Water Sport - if (tvPtr->pos[defSide][0].waterSportMonId != -(tvPtr->pos[defSide][1].waterSportMonId) && type == TYPE_FIRE) + if (tvPtr->pos[defSide][0].waterSportMonId != -(tvPtr->pos[defSide][1].waterSportMonId) && gBattleMoves[move].type == TYPE_FIRE) { if (tvPtr->pos[defSide][0].waterSportMonId != 0) { @@ -1230,7 +1230,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) break; case PTS_MUD_SPORT: // If used Electric move during Mud Sport - if (tvPtr->pos[defSide][0].mudSportMonId != -(tvPtr->pos[defSide][1].mudSportMonId) && type == TYPE_ELECTRIC) + if (tvPtr->pos[defSide][0].mudSportMonId != -(tvPtr->pos[defSide][1].mudSportMonId) && gBattleMoves[move].type == TYPE_ELECTRIC) { if (tvPtr->pos[defSide][0].mudSportMonId != 0) { @@ -1246,7 +1246,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) break; case PTS_REFLECT: // If hit Reflect with damaging physical move - if (IS_TYPE_PHYSICAL(type) && power != 0 && tvPtr->side[defSide].reflectMonId != 0) + if (IS_MOVE_PHYSICAL(move) && power != 0 && tvPtr->side[defSide].reflectMonId != 0) { u32 id = (tvPtr->side[defSide].reflectMonId - 1) * 4; movePoints->points[defSide][id + tvPtr->side[defSide].reflectMoveSlot] += sPointsArray[caseId][0]; @@ -1254,13 +1254,13 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) break; case PTS_LIGHT_SCREEN: // If hit Light Screen with damaging special move - if (!IS_TYPE_PHYSICAL(type) && power != 0 && tvPtr->side[defSide].lightScreenMonId != 0) + if (IS_MOVE_SPECIAL(move) && power != 0 && tvPtr->side[defSide].lightScreenMonId != 0) { u32 id = (tvPtr->side[defSide].lightScreenMonId - 1) * 4; movePoints->points[defSide][id + tvPtr->side[defSide].lightScreenMoveSlot] += sPointsArray[caseId][0]; } break; -#undef type +#undef move #undef power } } @@ -1435,7 +1435,7 @@ static void TrySetBattleSeminarShow(void) return; else if (gBattleTypeFlags & (BATTLE_TYPE_PALACE | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)) return; - else if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[gMoveSelectionCursor[gBattlerAttacker]]].power == 0) + else if (IS_MOVE_STATUS(gBattleMons[gBattlerAttacker].moves[gMoveSelectionCursor[gBattlerAttacker]])) return; i = 0; @@ -1458,20 +1458,9 @@ static void TrySetBattleSeminarShow(void) powerOverride = 0; if (ShouldCalculateDamage(gCurrentMove, &dmgByMove[i], &powerOverride)) { - u8 moveResultFlags; - u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)]; - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove, - sideStatus, powerOverride, - 0, gBattlerAttacker, gBattlerTarget); - - if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) - gBattleMoveDamage *= 2; - if (gProtectStructs[gBattlerAttacker].helpingHand) - gBattleMoveDamage = gBattleMoveDamage * 15 / 10; - - moveResultFlags = TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget); + gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, gBattleMoves[gCurrentMove].type, powerOverride, FALSE, FALSE, FALSE); dmgByMove[i] = gBattleMoveDamage; - if (dmgByMove[i] == 0 && !(moveResultFlags & MOVE_RESULT_NO_EFFECT)) + if (dmgByMove[i] == 0 && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) dmgByMove[i] = 1; } } @@ -1507,7 +1496,7 @@ static void TrySetBattleSeminarShow(void) static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride) { - if (gBattleMoves[moveId].power == 0) + if (IS_MOVE_STATUS(moveId)) { *dmg = 0; return FALSE; @@ -1593,12 +1582,12 @@ u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId) static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot) { - if (weatherFlags & WEATHER_RAIN_ANY) + if (weatherFlags & B_WEATHER_RAIN) AddMovePoints(PTS_RAIN, moveId, moveSlot, 0); - else if (weatherFlags & WEATHER_SUN_ANY) + else if (weatherFlags & B_WEATHER_SUN) AddMovePoints(PTS_SUN, moveId, moveSlot, 0); - else if (weatherFlags & WEATHER_SANDSTORM_ANY) + else if (weatherFlags & B_WEATHER_SANDSTORM) AddMovePoints(PTS_SANDSTORM, moveId, moveSlot, 0); - else if (weatherFlags & WEATHER_HAIL_ANY) + else if (weatherFlags & B_WEATHER_HAIL) AddMovePoints(PTS_HAIL, moveId, moveSlot, 0); } diff --git a/src/battle_util.c b/src/battle_util.c index cbcd445b7e..c92d3690fc 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4,6 +4,10 @@ #include "battle_arena.h" #include "battle_pyramid.h" #include "battle_util.h" +#include "battle_controllers.h" +#include "battle_interface.h" +#include "battle_setup.h" +#include "party_menu.h" #include "pokemon.h" #include "international_string_util.h" #include "item.h" @@ -19,13 +23,18 @@ #include "trig.h" #include "window.h" #include "battle_message.h" -#include "battle_ai_script_commands.h" -#include "battle_controllers.h" +#include "battle_ai_main.h" +#include "battle_ai_util.h" #include "event_data.h" #include "link.h" +#include "malloc.h" +#include "berry.h" +#include "pokedex.h" +#include "mail.h" #include "field_weather.h" #include "constants/abilities.h" #include "constants/battle_anim.h" +#include "constants/battle_config.h" #include "constants/battle_move_effects.h" #include "constants/battle_script_commands.h" #include "constants/battle_string_ids.h" @@ -34,7 +43,11 @@ #include "constants/moves.h" #include "constants/songs.h" #include "constants/species.h" +#include "constants/trainers.h" #include "constants/weather.h" +#include "constants/pokemon.h" + +extern struct Evolution gEvolutionTable[][EVOS_PER_MON]; /* NOTE: The data and functions in this file up until (but not including) sSoundMovesTable @@ -43,8 +56,10 @@ match the ROM; this is also why sSoundMovesTable's declaration is in the middle functions instead of at the top of the file with the other declarations. */ +static bool32 TryRemoveScreens(u8 battler); +static bool32 IsUnnerveAbilityOnOpposingSide(u8 battlerId); + extern const u8 *const gBattleScriptsForMoveEffects[]; -extern const u8 *const gBattlescriptsForBallThrow[]; extern const u8 *const gBattlescriptsForRunningByItem[]; extern const u8 *const gBattlescriptsForUsingItem[]; extern const u8 *const gBattlescriptsForSafariActions[]; @@ -75,68 +90,218 @@ static const u8 sPkblToEscapeFactor[][3] = { static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1}; static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4}; +static const u16 sSkillSwapBannedAbilities[] = +{ + ABILITY_WONDER_GUARD, + ABILITY_MULTITYPE, + ABILITY_ILLUSION, + ABILITY_STANCE_CHANGE, + ABILITY_SCHOOLING, + ABILITY_COMATOSE, + ABILITY_SHIELDS_DOWN, + ABILITY_DISGUISE, + ABILITY_RKS_SYSTEM, + ABILITY_BATTLE_BOND, + ABILITY_POWER_CONSTRUCT, + ABILITY_NEUTRALIZING_GAS, + ABILITY_ICE_FACE, + ABILITY_HUNGER_SWITCH, + ABILITY_GULP_MISSILE, +}; + +static const u16 sRolePlayBannedAbilities[] = +{ + ABILITY_TRACE, + ABILITY_WONDER_GUARD, + ABILITY_FORECAST, + ABILITY_FLOWER_GIFT, + ABILITY_MULTITYPE, + ABILITY_ILLUSION, + ABILITY_ZEN_MODE, + ABILITY_IMPOSTER, + ABILITY_STANCE_CHANGE, + ABILITY_POWER_OF_ALCHEMY, + ABILITY_RECEIVER, + ABILITY_SCHOOLING, + ABILITY_COMATOSE, + ABILITY_SHIELDS_DOWN, + ABILITY_DISGUISE, + ABILITY_RKS_SYSTEM, + ABILITY_BATTLE_BOND, + ABILITY_POWER_CONSTRUCT, + ABILITY_ICE_FACE, + ABILITY_HUNGER_SWITCH, + ABILITY_GULP_MISSILE, +}; + +static const u16 sRolePlayBannedAttackerAbilities[] = +{ + ABILITY_MULTITYPE, + ABILITY_ZEN_MODE, + ABILITY_STANCE_CHANGE, + ABILITY_SCHOOLING, + ABILITY_COMATOSE, + ABILITY_SHIELDS_DOWN, + ABILITY_DISGUISE, + ABILITY_RKS_SYSTEM, + ABILITY_BATTLE_BOND, + ABILITY_POWER_CONSTRUCT, + ABILITY_ICE_FACE, + ABILITY_GULP_MISSILE, +}; + +static const u16 sWorrySeedBannedAbilities[] = +{ + ABILITY_MULTITYPE, + ABILITY_STANCE_CHANGE, + ABILITY_SCHOOLING, + ABILITY_COMATOSE, + ABILITY_SHIELDS_DOWN, + ABILITY_DISGUISE, + ABILITY_RKS_SYSTEM, + ABILITY_BATTLE_BOND, + ABILITY_POWER_CONSTRUCT, + ABILITY_TRUANT, + ABILITY_ICE_FACE, + ABILITY_GULP_MISSILE, +}; + +static const u16 sGastroAcidBannedAbilities[] = +{ + ABILITY_AS_ONE_ICE_RIDER, + ABILITY_AS_ONE_SHADOW_RIDER, + ABILITY_BATTLE_BOND, + ABILITY_COMATOSE, + ABILITY_DISGUISE, + ABILITY_GULP_MISSILE, + ABILITY_ICE_FACE, + ABILITY_MULTITYPE, + ABILITY_POWER_CONSTRUCT, + ABILITY_RKS_SYSTEM, + ABILITY_SCHOOLING, + ABILITY_SHIELDS_DOWN, + ABILITY_STANCE_CHANGE, + ABILITY_ZEN_MODE, +}; + +static const u16 sEntrainmentBannedAttackerAbilities[] = +{ + ABILITY_TRACE, + ABILITY_FORECAST, + ABILITY_FLOWER_GIFT, + ABILITY_ZEN_MODE, + ABILITY_ILLUSION, + ABILITY_IMPOSTER, + ABILITY_POWER_OF_ALCHEMY, + ABILITY_RECEIVER, + ABILITY_DISGUISE, + ABILITY_POWER_CONSTRUCT, + ABILITY_NEUTRALIZING_GAS, + ABILITY_ICE_FACE, + ABILITY_HUNGER_SWITCH, + ABILITY_GULP_MISSILE, +}; + +static const u16 sEntrainmentTargetSimpleBeamBannedAbilities[] = +{ + ABILITY_TRUANT, + ABILITY_MULTITYPE, + ABILITY_STANCE_CHANGE, + ABILITY_SCHOOLING, + ABILITY_COMATOSE, + ABILITY_SHIELDS_DOWN, + ABILITY_DISGUISE, + ABILITY_RKS_SYSTEM, + ABILITY_BATTLE_BOND, + ABILITY_ICE_FACE, + ABILITY_GULP_MISSILE, +}; + +bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move) +{ + u32 ability = GetBattlerAbility(battlerAtk); + + if (gSideTimers[defSide].followmeTimer == 0 + || gBattleMons[gSideTimers[defSide].followmeTarget].hp == 0 + || gBattleMoves[move].effect == EFFECT_SNIPE_SHOT + || gBattleMoves[move].effect == EFFECT_SKY_DROP + || ability == ABILITY_PROPELLER_TAIL || ability == ABILITY_STALWART) + return FALSE; + + if (gSideTimers[defSide].followmePowder && !IsAffectedByPowder(battlerAtk, ability, GetBattlerHoldEffect(battlerAtk, TRUE))) + return FALSE; + + return TRUE; +} + +// Functions void HandleAction_UseMove(void) { - u8 side; - u8 var = 4; + u32 i, side, moveType, var = 4; + u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - - if (*(&gBattleStruct->field_91) & gBitTable[gBattlerAttacker]) + if (gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker] || !IsBattlerAlive(gBattlerAttacker)) { gCurrentActionFuncId = B_ACTION_FINISHED; return; } - gCritMultiplier = 1; - gBattleScripting.dmgMultiplier = 1; + gIsCriticalHit = FALSE; gBattleStruct->atkCancellerTracker = 0; gMoveResultFlags = 0; gMultiHitCounter = 0; - gBattleCommunication[6] = 0; + gBattleCommunication[MISS_TYPE] = 0; + gBattleScripting.savedMoveEffect = 0; gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker); // choose move if (gProtectStructs[gBattlerAttacker].noValidMoves) { - gProtectStructs[gBattlerAttacker].noValidMoves = 0; + gProtectStructs[gBattlerAttacker].noValidMoves = FALSE; gCurrentMove = gChosenMove = MOVE_STRUGGLE; gHitMarker |= HITMARKER_NO_PPDEDUCT; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0); + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(MOVE_STRUGGLE, NO_TARGET_OVERRIDE); } else if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE) { gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker]; } // encore forces you to use the same move - else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE && gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) { gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove; gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); } // check if the encored move wasn't overwritten - else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE - && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) + else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) { gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; gDisableStructs[gBattlerAttacker].encoredMove = MOVE_NONE; gDisableStructs[gBattlerAttacker].encoredMovePos = 0; gDisableStructs[gBattlerAttacker].encoreTimer = 0; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); } else if (gBattleMons[gBattlerAttacker].moves[gCurrMovePos] != gChosenMoveByBattler[gBattlerAttacker]) { gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); } else { 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 (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) @@ -145,36 +310,42 @@ void HandleAction_UseMove(void) gBattleResults.lastUsedMoveOpponent = gCurrentMove; } + // Set dynamic move type. + SetTypeBeforeUsingMove(gChosenMove, gBattlerAttacker); + GET_MOVE_TYPE(gChosenMove, moveType); + // choose target side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; - if (gSideTimers[side].followmeTimer != 0 - && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED - && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget) - && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) + if (IsAffectedByFollowMe(gBattlerAttacker, side, gCurrentMove) + && moveTarget == MOVE_TARGET_SELECTED + && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget)) { - gBattlerTarget = gSideTimers[side].followmeTarget; + gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = gSideTimers[side].followmeTarget; // follow me moxie fix } else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && gSideTimers[side].followmeTimer == 0 - && (gBattleMoves[gCurrentMove].power != 0 - || gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER) - && gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD - && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + && gSideTimers[side].followmeTimer == 0 + && (gBattleMoves[gCurrentMove].power != 0 || moveTarget != MOVE_TARGET_USER) + && ((GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) + || (GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_STORM_DRAIN && moveType == TYPE_WATER))) { side = GetBattlerSide(gBattlerAttacker); for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { if (side != GetBattlerSide(gActiveBattler) && *(gBattleStruct->moveTarget + gBattlerAttacker) != gActiveBattler - && gBattleMons[gActiveBattler].ability == ABILITY_LIGHTNING_ROD - && GetBattlerTurnOrderNum(gActiveBattler) < var) + && ((GetBattlerAbility(gActiveBattler) == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) + || (GetBattlerAbility(gActiveBattler) == ABILITY_STORM_DRAIN && moveType == TYPE_WATER)) + && GetBattlerTurnOrderNum(gActiveBattler) < var + && gBattleMoves[gCurrentMove].effect != EFFECT_SNIPE_SHOT + && (GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL + || GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART)) { var = GetBattlerTurnOrderNum(gActiveBattler); } } if (var == 4) { - if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + if (moveTarget & MOVE_TARGET_RANDOM) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) { @@ -191,12 +362,22 @@ void HandleAction_UseMove(void) gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); } } + else if (moveTarget & MOVE_TARGET_FOES_AND_ALLY) + { + for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) + { + if (gBattlerTarget == gBattlerAttacker) + continue; + if (IsBattlerAlive(gBattlerTarget)) + break; + } + } else { gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); } - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (!IsBattlerAlive(gBattlerTarget)) { if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) { @@ -205,21 +386,27 @@ void HandleAction_UseMove(void) else { gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (!IsBattlerAlive(gBattlerTarget)) gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); } } } else { + u16 battlerAbility; gActiveBattler = gBattlerByTurnOrder[var]; + battlerAbility = GetBattlerAbility(gActiveBattler); + RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability); - gSpecialStatuses[gActiveBattler].lightningRodRedirected = 1; + if (battlerAbility == ABILITY_LIGHTNING_ROD) + gSpecialStatuses[gActiveBattler].lightningRodRedirected = TRUE; + else if (battlerAbility == ABILITY_STORM_DRAIN) + gSpecialStatuses[gActiveBattler].stormDrainRedirected = TRUE; gBattlerTarget = gActiveBattler; } } else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + && moveTarget & MOVE_TARGET_RANDOM) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) { @@ -242,10 +429,28 @@ void HandleAction_UseMove(void) gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); } } + else if (moveTarget == MOVE_TARGET_ALLY) + { + if (IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker))) + gBattlerTarget = BATTLE_PARTNER(gBattlerAttacker); + else + gBattlerTarget = gBattlerAttacker; + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && moveTarget == MOVE_TARGET_FOES_AND_ALLY) + { + for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) + { + if (gBattlerTarget == gBattlerAttacker) + continue; + if (IsBattlerAlive(gBattlerTarget)) + break; + } + } else { gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (!IsBattlerAlive(gBattlerTarget)) { if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) { @@ -254,7 +459,7 @@ void HandleAction_UseMove(void) else { gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (!IsBattlerAlive(gBattlerTarget)) gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); } } @@ -288,6 +493,10 @@ void HandleAction_UseMove(void) if (gBattleTypeFlags & BATTLE_TYPE_ARENA) BattleArena_AddMindPoints(gBattlerAttacker); + // Record HP of each battler + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + gBattleStruct->hpBefore[i] = gBattleMons[i].hp; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } @@ -299,7 +508,7 @@ void HandleAction_Switch(void) gActionSelectionCursor[gBattlerAttacker] = 0; gMoveSelectionCursor[gBattlerAttacker] = 0; - PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->field_58 + gBattlerAttacker)) + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->battlerPartyIndexes + gBattlerAttacker)) gBattleScripting.battler = gBattlerAttacker; gBattlescriptCurrInstr = BattleScript_ActionSwitch; @@ -307,6 +516,8 @@ void HandleAction_Switch(void) if (gBattleResults.playerSwitchesCounter < 255) gBattleResults.playerSwitchesCounter++; + + UndoFormChange(gBattlerPartyIndexes[gBattlerAttacker], GetBattlerSide(gBattlerAttacker), TRUE); } void HandleAction_UseItem(void) @@ -315,19 +526,20 @@ void HandleAction_UseItem(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); - gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8); + + gLastUsedItem = gBattleResources->bufferB[gBattlerAttacker][1] | (gBattleResources->bufferB[gBattlerAttacker][2] << 8); if (gLastUsedItem <= LAST_BALL) // is ball { - gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem]; + gBattlescriptCurrInstr = BattleScript_BallThrow; } else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL) { - gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; + gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; // BattleScript_RunByUsingItem } else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) { - gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; // BattleScript_PlayerUsesItem } else { @@ -407,7 +619,7 @@ bool8 TryRunFromBattle(u8 battler) u8 pyramidMultiplier; u8 speedVar; - if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY) + if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER) holdEffect = gEnigmaBerries[battler].holdEffect; else holdEffect = ItemId_GetHoldEffect(gBattleMons[battler].item); @@ -417,10 +629,16 @@ bool8 TryRunFromBattle(u8 battler) if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) { gLastUsedItem = gBattleMons[battler].item; - gProtectStructs[battler].fleeFlag = 1; + gProtectStructs[battler].fleeType = FLEE_ITEM; effect++; } - else if (gBattleMons[battler].ability == ABILITY_RUN_AWAY) + #if B_GHOSTS_ESCAPE >= GEN_6 + else if (IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + { + effect++; + } + #endif + else if (GetBattlerAbility(battler) == ABILITY_RUN_AWAY) { if (InBattlePyramid()) { @@ -430,14 +648,14 @@ bool8 TryRunFromBattle(u8 battler) if (speedVar > (Random() & 0xFF)) { gLastUsedAbility = ABILITY_RUN_AWAY; - gProtectStructs[battler].fleeFlag = 2; + gProtectStructs[battler].fleeType = FLEE_ABILITY; effect++; } } else { gLastUsedAbility = ABILITY_RUN_AWAY; - gProtectStructs[battler].fleeFlag = 2; + gProtectStructs[battler].fleeType = FLEE_ABILITY; effect++; } } @@ -447,31 +665,32 @@ bool8 TryRunFromBattle(u8 battler) } else { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + u8 runningFromBattler = BATTLE_OPPOSITE(battler); + if (!IsBattlerAlive(runningFromBattler)) + runningFromBattler |= BIT_FLANK; + + if (InBattlePyramid()) { - if (InBattlePyramid()) - { - pyramidMultiplier = GetPyramidRunMultiplier(); - speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); - if (speedVar > (Random() & 0xFF)) - effect++; - } - else if (gBattleMons[battler].speed < gBattleMons[BATTLE_OPPOSITE(battler)].speed) - { - speedVar = (gBattleMons[battler].speed * 128) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); - if (speedVar > (Random() & 0xFF)) - effect++; - } - else // same speed or faster - { + pyramidMultiplier = GetPyramidRunMultiplier(); + speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[runningFromBattler].speed) + (gBattleStruct->runTries * 30); + if (speedVar > (Random() & 0xFF)) effect++; - } + } + else if (gBattleMons[battler].speed < gBattleMons[runningFromBattler].speed) + { + speedVar = (gBattleMons[battler].speed * 128) / (gBattleMons[runningFromBattler].speed) + (gBattleStruct->runTries * 30); + if (speedVar > (Random() & 0xFF)) + effect++; + } + else // same speed or faster + { + effect++; } gBattleStruct->runTries++; } - if (effect) + if (effect != 0) { gCurrentTurnActionNumber = gBattlersCount; gBattleOutcome = B_OUTCOME_RAN; @@ -519,7 +738,7 @@ void HandleAction_Run(void) } else { - if (gBattleMons[gBattlerAttacker].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + if (!CanBattlerEscape(gBattlerAttacker)) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ATTACKER_CANT_ESCAPE; gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; @@ -550,7 +769,18 @@ void HandleAction_SafariZoneBallThrow(void) gBattle_BG0_Y = 0; gNumSafariBalls--; gLastUsedItem = ITEM_SAFARI_BALL; - gBattlescriptCurrInstr = gBattlescriptsForBallThrow[ITEM_SAFARI_BALL]; + gBattlescriptCurrInstr = BattleScript_SafariBallThrow; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_ThrowBall(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gLastUsedItem = gLastThrownBall; + RemoveBagItem(gLastUsedItem, 1); + gBattlescriptCurrInstr = BattleScript_BallThrow; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } @@ -559,10 +789,10 @@ void HandleAction_ThrowPokeblock(void) gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBattlerAttacker][1] - 1; - gLastUsedItem = gBattleBufferB[gBattlerAttacker][2]; + gBattleCommunication[MULTISTRING_CHOOSER] = gBattleResources->bufferB[gBattlerAttacker][1] - 1; + gLastUsedItem = gBattleResources->bufferB[gBattlerAttacker][2]; - if (gBattleResults.pokeblockThrows < 0xFF) + if (gBattleResults.pokeblockThrows < 255) gBattleResults.pokeblockThrows++; if (gBattleStruct->safariPkblThrowCounter < 3) gBattleStruct->safariPkblThrowCounter++; @@ -645,23 +875,26 @@ void HandleAction_NothingIsFainted(void) gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR - | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 - | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT - | HITMARKER_CHARGING | HITMARKER_x4000000); + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_PASSIVE_DAMAGE + | HITMARKER_OBEYS | HITMARKER_WAKE_UP_CLEAR | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_CHARGING | HITMARKER_NEVER_SET); } void HandleAction_ActionFinished(void) { - *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = 6; + #if B_RECALC_TURN_AFTER_ACTIONS >= GEN_8 + u8 i, j; + u8 battler1 = 0; + u8 battler2 = 0; + #endif + *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = PARTY_SIZE; gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; SpecialStatusesClear(); gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR - | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 - | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT - | HITMARKER_CHARGING | HITMARKER_x4000000); + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_PASSIVE_DAMAGE + | HITMARKER_OBEYS | HITMARKER_WAKE_UP_CLEAR | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_CHARGING | HITMARKER_NEVER_SET | HITMARKER_IGNORE_DISGUISE); gCurrentMove = 0; gBattleMoveDamage = 0; @@ -671,21 +904,373 @@ void HandleAction_ActionFinished(void) gLastLandedMoves[gBattlerAttacker] = 0; gLastHitByType[gBattlerAttacker] = 0; gBattleStruct->dynamicMoveType = 0; - gDynamicBasePower = 0; + gBattleScripting.moveendState = 0; gBattleScripting.moveendState = 0; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; gBattleScripting.multihitMoveEffect = 0; gBattleResources->battleScriptsStack->size = 0; + + #if B_RECALC_TURN_AFTER_ACTIONS >= GEN_8 + // i starts at `gCurrentTurnActionNumber` because we don't want to recalculate turn order for mon that have already + // taken action. It's been previously increased, which we want in order to not recalculate the turn of the mon that just finished its action + for (i = gCurrentTurnActionNumber; i < gBattlersCount - 1; i++) + { + for (j = i + 1; j < gBattlersCount; j++) + { + u8 battler1 = gBattlerByTurnOrder[i]; + u8 battler2 = gBattlerByTurnOrder[j]; + // We recalculate order only for action of the same priority. If any action other than switch/move has been taken, they should + // have been executed before. The only recalculation needed is for moves/switch. Mega evolution is handled in src/battle_main.c/TryChangeOrder + if((gActionsByTurnOrder[i] == B_ACTION_USE_MOVE && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE)) + { + if (GetWhoStrikesFirst(battler1, battler2, FALSE)) + SwapTurnOrder(i, j); + } + else if ((gActionsByTurnOrder[i] == B_ACTION_SWITCH && gActionsByTurnOrder[j] == B_ACTION_SWITCH)) + { + if (GetWhoStrikesFirst(battler1, battler2, TRUE)) // If the actions chosen are switching, we recalc order but ignoring the moves + SwapTurnOrder(i, j); + } + } + } + #endif } -// rom const data -static const u16 sSoundMovesTable[] = +static const u8 sMovesNotAffectedByStench[] = { - MOVE_GROWL, MOVE_ROAR, MOVE_SING, MOVE_SUPERSONIC, MOVE_SCREECH, MOVE_SNORE, - MOVE_UPROAR, MOVE_METAL_SOUND, MOVE_GRASS_WHISTLE, MOVE_HYPER_VOICE, 0xFFFF + [MOVE_AIR_SLASH] = 1, + [MOVE_ASTONISH] = 1, + [MOVE_BITE] = 1, + [MOVE_BONE_CLUB] = 1, + [MOVE_DARK_PULSE] = 1, + [MOVE_DOUBLE_IRON_BASH] = 1, + [MOVE_DRAGON_RUSH] = 1, + [MOVE_EXTRASENSORY] = 1, + [MOVE_FAKE_OUT] = 1, + [MOVE_FIERY_WRATH] = 1, + [MOVE_FIRE_FANG] = 1, + [MOVE_FLING] = 1, + [MOVE_FLOATY_FALL] = 1, + [MOVE_HEADBUTT] = 1, + [MOVE_HEART_STAMP] = 1, + [MOVE_HYPER_FANG] = 1, + [MOVE_ICE_FANG] = 1, + [MOVE_ICICLE_CRASH] = 1, + [MOVE_IRON_HEAD] = 1, + [MOVE_NEEDLE_ARM] = 1, + [MOVE_NONE] = 1, + [MOVE_ROCK_SLIDE] = 1, + [MOVE_ROLLING_KICK] = 1, + [MOVE_SECRET_POWER] = 1, + [MOVE_SKY_ATTACK] = 1, + [MOVE_SNORE] = 1, + [MOVE_STEAMROLLER] = 1, + [MOVE_STOMP] = 1, + [MOVE_THUNDER_FANG] = 1, + [MOVE_TWISTER] = 1, + [MOVE_WATERFALL] = 1, + [MOVE_ZEN_HEADBUTT] = 1, + [MOVE_ZING_ZAP] = 1, }; +static const u8 sAbilitiesAffectedByMoldBreaker[] = +{ + [ABILITY_BATTLE_ARMOR] = 1, + [ABILITY_CLEAR_BODY] = 1, + [ABILITY_DAMP] = 1, + [ABILITY_DRY_SKIN] = 1, + [ABILITY_FILTER] = 1, + [ABILITY_FLASH_FIRE] = 1, + [ABILITY_FLOWER_GIFT] = 1, + [ABILITY_HEATPROOF] = 1, + [ABILITY_HYPER_CUTTER] = 1, + [ABILITY_IMMUNITY] = 1, + [ABILITY_INNER_FOCUS] = 1, + [ABILITY_INSOMNIA] = 1, + [ABILITY_KEEN_EYE] = 1, + [ABILITY_LEAF_GUARD] = 1, + [ABILITY_LEVITATE] = 1, + [ABILITY_LIGHTNING_ROD] = 1, + [ABILITY_LIMBER] = 1, + [ABILITY_MAGMA_ARMOR] = 1, + [ABILITY_MARVEL_SCALE] = 1, + [ABILITY_MOTOR_DRIVE] = 1, + [ABILITY_OBLIVIOUS] = 1, + [ABILITY_OWN_TEMPO] = 1, + [ABILITY_SAND_VEIL] = 1, + [ABILITY_SHELL_ARMOR] = 1, + [ABILITY_SHIELD_DUST] = 1, + [ABILITY_SIMPLE] = 1, + [ABILITY_SNOW_CLOAK] = 1, + [ABILITY_SOLID_ROCK] = 1, + [ABILITY_SOUNDPROOF] = 1, + [ABILITY_STICKY_HOLD] = 1, + [ABILITY_STORM_DRAIN] = 1, + [ABILITY_STURDY] = 1, + [ABILITY_SUCTION_CUPS] = 1, + [ABILITY_TANGLED_FEET] = 1, + [ABILITY_THICK_FAT] = 1, + [ABILITY_UNAWARE] = 1, + [ABILITY_VITAL_SPIRIT] = 1, + [ABILITY_VOLT_ABSORB] = 1, + [ABILITY_WATER_ABSORB] = 1, + [ABILITY_WATER_VEIL] = 1, + [ABILITY_WHITE_SMOKE] = 1, + [ABILITY_WONDER_GUARD] = 1, + [ABILITY_BIG_PECKS] = 1, + [ABILITY_CONTRARY] = 1, + [ABILITY_FRIEND_GUARD] = 1, + [ABILITY_HEAVY_METAL] = 1, + [ABILITY_LIGHT_METAL] = 1, + [ABILITY_MAGIC_BOUNCE] = 1, + [ABILITY_MULTISCALE] = 1, + [ABILITY_SAP_SIPPER] = 1, + [ABILITY_TELEPATHY] = 1, + [ABILITY_WONDER_SKIN] = 1, + [ABILITY_AROMA_VEIL] = 1, + [ABILITY_BULLETPROOF] = 1, + [ABILITY_FLOWER_VEIL] = 1, + [ABILITY_FUR_COAT] = 1, + [ABILITY_OVERCOAT] = 1, + [ABILITY_SWEET_VEIL] = 1, + [ABILITY_DAZZLING] = 1, + [ABILITY_DISGUISE] = 1, + [ABILITY_FLUFFY] = 1, + [ABILITY_QUEENLY_MAJESTY] = 1, + [ABILITY_WATER_BUBBLE] = 1, + [ABILITY_MIRROR_ARMOR] = 1, + [ABILITY_PUNK_ROCK] = 1, + [ABILITY_ICE_SCALES] = 1, + [ABILITY_ICE_FACE] = 1, + [ABILITY_PASTEL_VEIL] = 1, +}; + +static const u8 sAbilitiesNotTraced[ABILITIES_COUNT] = +{ + [ABILITY_AS_ONE_ICE_RIDER] = 1, + [ABILITY_AS_ONE_SHADOW_RIDER] = 1, + [ABILITY_BATTLE_BOND] = 1, + [ABILITY_COMATOSE] = 1, + [ABILITY_DISGUISE] = 1, + [ABILITY_FLOWER_GIFT] = 1, + [ABILITY_FORECAST] = 1, + [ABILITY_GULP_MISSILE] = 1, + [ABILITY_HUNGER_SWITCH] = 1, + [ABILITY_ICE_FACE] = 1, + [ABILITY_ILLUSION] = 1, + [ABILITY_IMPOSTER] = 1, + [ABILITY_MULTITYPE] = 1, + [ABILITY_NEUTRALIZING_GAS] = 1, + [ABILITY_NONE] = 1, + [ABILITY_POWER_CONSTRUCT] = 1, + [ABILITY_POWER_OF_ALCHEMY] = 1, + [ABILITY_RECEIVER] = 1, + [ABILITY_RKS_SYSTEM] = 1, + [ABILITY_SCHOOLING] = 1, + [ABILITY_SHIELDS_DOWN] = 1, + [ABILITY_STANCE_CHANGE] = 1, + [ABILITY_TRACE] = 1, + [ABILITY_ZEN_MODE] = 1, +}; + +static const u8 sHoldEffectToType[][2] = +{ + {HOLD_EFFECT_BUG_POWER, TYPE_BUG}, + {HOLD_EFFECT_STEEL_POWER, TYPE_STEEL}, + {HOLD_EFFECT_GROUND_POWER, TYPE_GROUND}, + {HOLD_EFFECT_ROCK_POWER, TYPE_ROCK}, + {HOLD_EFFECT_GRASS_POWER, TYPE_GRASS}, + {HOLD_EFFECT_DARK_POWER, TYPE_DARK}, + {HOLD_EFFECT_FIGHTING_POWER, TYPE_FIGHTING}, + {HOLD_EFFECT_ELECTRIC_POWER, TYPE_ELECTRIC}, + {HOLD_EFFECT_WATER_POWER, TYPE_WATER}, + {HOLD_EFFECT_FLYING_POWER, TYPE_FLYING}, + {HOLD_EFFECT_POISON_POWER, TYPE_POISON}, + {HOLD_EFFECT_ICE_POWER, TYPE_ICE}, + {HOLD_EFFECT_GHOST_POWER, TYPE_GHOST}, + {HOLD_EFFECT_PSYCHIC_POWER, TYPE_PSYCHIC}, + {HOLD_EFFECT_FIRE_POWER, TYPE_FIRE}, + {HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON}, + {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL}, + {HOLD_EFFECT_FAIRY_POWER, TYPE_FAIRY}, +}; + +// percent in UQ_4_12 format +static const u16 sPercentToModifier[] = +{ + UQ_4_12(0.00), // 0 + UQ_4_12(0.01), // 1 + UQ_4_12(0.02), // 2 + UQ_4_12(0.03), // 3 + UQ_4_12(0.04), // 4 + UQ_4_12(0.05), // 5 + UQ_4_12(0.06), // 6 + UQ_4_12(0.07), // 7 + UQ_4_12(0.08), // 8 + UQ_4_12(0.09), // 9 + UQ_4_12(0.10), // 10 + UQ_4_12(0.11), // 11 + UQ_4_12(0.12), // 12 + UQ_4_12(0.13), // 13 + UQ_4_12(0.14), // 14 + UQ_4_12(0.15), // 15 + UQ_4_12(0.16), // 16 + UQ_4_12(0.17), // 17 + UQ_4_12(0.18), // 18 + UQ_4_12(0.19), // 19 + UQ_4_12(0.20), // 20 + UQ_4_12(0.21), // 21 + UQ_4_12(0.22), // 22 + UQ_4_12(0.23), // 23 + UQ_4_12(0.24), // 24 + UQ_4_12(0.25), // 25 + UQ_4_12(0.26), // 26 + UQ_4_12(0.27), // 27 + UQ_4_12(0.28), // 28 + UQ_4_12(0.29), // 29 + UQ_4_12(0.30), // 30 + UQ_4_12(0.31), // 31 + UQ_4_12(0.32), // 32 + UQ_4_12(0.33), // 33 + UQ_4_12(0.34), // 34 + UQ_4_12(0.35), // 35 + UQ_4_12(0.36), // 36 + UQ_4_12(0.37), // 37 + UQ_4_12(0.38), // 38 + UQ_4_12(0.39), // 39 + UQ_4_12(0.40), // 40 + UQ_4_12(0.41), // 41 + UQ_4_12(0.42), // 42 + UQ_4_12(0.43), // 43 + UQ_4_12(0.44), // 44 + UQ_4_12(0.45), // 45 + UQ_4_12(0.46), // 46 + UQ_4_12(0.47), // 47 + UQ_4_12(0.48), // 48 + UQ_4_12(0.49), // 49 + UQ_4_12(0.50), // 50 + UQ_4_12(0.51), // 51 + UQ_4_12(0.52), // 52 + UQ_4_12(0.53), // 53 + UQ_4_12(0.54), // 54 + UQ_4_12(0.55), // 55 + UQ_4_12(0.56), // 56 + UQ_4_12(0.57), // 57 + UQ_4_12(0.58), // 58 + UQ_4_12(0.59), // 59 + UQ_4_12(0.60), // 60 + UQ_4_12(0.61), // 61 + UQ_4_12(0.62), // 62 + UQ_4_12(0.63), // 63 + UQ_4_12(0.64), // 64 + UQ_4_12(0.65), // 65 + UQ_4_12(0.66), // 66 + UQ_4_12(0.67), // 67 + UQ_4_12(0.68), // 68 + UQ_4_12(0.69), // 69 + UQ_4_12(0.70), // 70 + UQ_4_12(0.71), // 71 + UQ_4_12(0.72), // 72 + UQ_4_12(0.73), // 73 + UQ_4_12(0.74), // 74 + UQ_4_12(0.75), // 75 + UQ_4_12(0.76), // 76 + UQ_4_12(0.77), // 77 + UQ_4_12(0.78), // 78 + UQ_4_12(0.79), // 79 + UQ_4_12(0.80), // 80 + UQ_4_12(0.81), // 81 + UQ_4_12(0.82), // 82 + UQ_4_12(0.83), // 83 + UQ_4_12(0.84), // 84 + UQ_4_12(0.85), // 85 + UQ_4_12(0.86), // 86 + UQ_4_12(0.87), // 87 + UQ_4_12(0.88), // 88 + UQ_4_12(0.89), // 89 + UQ_4_12(0.90), // 90 + UQ_4_12(0.91), // 91 + UQ_4_12(0.92), // 92 + UQ_4_12(0.93), // 93 + UQ_4_12(0.94), // 94 + UQ_4_12(0.95), // 95 + UQ_4_12(0.96), // 96 + UQ_4_12(0.97), // 97 + UQ_4_12(0.98), // 98 + UQ_4_12(0.99), // 99 + UQ_4_12(1.00), // 100 +}; + +#define X UQ_4_12 + +static const u16 sTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] = +{ +// normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy + {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(0.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // normal + {X(2.0), X(1.0), X(0.5), X(0.5), X(1.0), X(2.0), X(0.5), X(0.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(2.0), X(0.5)}, // fight + {X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // flying + {X(1.0), X(1.0), X(1.0), X(0.5), X(0.5), X(0.5), X(1.0), X(0.5), X(0.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0)}, // poison + {X(1.0), X(1.0), X(0.0), X(2.0), X(1.0), X(2.0), X(0.5), X(1.0), X(2.0), X(1.0), X(2.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // ground + {X(1.0), X(0.5), X(2.0), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0)}, // rock + {X(1.0), X(0.5), X(0.5), X(0.5), X(1.0), X(1.0), X(1.0), X(0.5), X(0.5), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(2.0), X(1.0), X(1.0), X(2.0), X(0.5)}, // bug + #if B_STEEL_RESISTANCES >= GEN_6 + {X(0.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(0.5), X(1.0)}, // ghost + #else + {X(0.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(0.5), X(1.0)}, // ghost + #endif + {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(0.5), X(1.0), X(0.5), X(0.5), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(1.0), X(2.0)}, // steel + {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // mystery + {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(2.0), X(1.0), X(0.5), X(0.5), X(2.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0)}, // fire + {X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(0.5), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0)}, // water + {X(1.0), X(1.0), X(0.5), X(0.5), X(2.0), X(2.0), X(0.5), X(1.0), X(0.5), X(1.0), X(0.5), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0)}, // grass + {X(1.0), X(1.0), X(2.0), X(1.0), X(0.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(0.5), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0)}, // electric + {X(1.0), X(2.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(0.0), X(1.0)}, // psychic + {X(1.0), X(1.0), X(2.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(0.5), X(0.5), X(2.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0)}, // ice + {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(0.0)}, // dragon + #if B_STEEL_RESISTANCES >= GEN_6 + {X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(0.5), X(0.5)}, // dark + #else + {X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(0.5), X(0.5)}, // dark + #endif + {X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(2.0), X(1.0)}, // fairy +}; + +static const u16 sInverseTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] = +{ +// normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy + {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(2.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // normal + {X(0.5), X(1.0), X(2.0), X(2.0), X(1.0), X(0.5), X(2.0), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(0.5), X(2.0)}, // fight + {X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // flying + {X(1.0), X(1.0), X(1.0), X(2.0), X(2.0), X(2.0), X(1.0), X(2.0), X(2.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5)}, // poison + {X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(0.5), X(2.0), X(1.0), X(0.5), X(1.0), X(0.5), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // ground + {X(1.0), X(2.0), X(0.5), X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0)}, // rock + {X(1.0), X(2.0), X(2.0), X(2.0), X(1.0), X(1.0), X(1.0), X(2.0), X(2.0), X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(0.5), X(1.0), X(1.0), X(0.5), X(2.0)}, // bug + #if B_STEEL_RESISTANCES >= GEN_6 + {X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(2.0), X(1.0)}, // ghost + #else + {X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(2.0), X(1.0)}, // ghost + #endif + {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(2.0), X(1.0), X(2.0), X(2.0), X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(1.0), X(0.5)}, // steel + {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // mystery + {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(0.5), X(1.0), X(2.0), X(2.0), X(0.5), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0)}, // fire + {X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(2.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0)}, // water + {X(1.0), X(1.0), X(2.0), X(2.0), X(0.5), X(0.5), X(2.0), X(1.0), X(2.0), X(1.0), X(2.0), X(0.5), X(2.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0)}, // grass + {X(1.0), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(2.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0)}, // electric + {X(1.0), X(0.5), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(2.0), X(1.0)}, // psychic + {X(1.0), X(1.0), X(0.5), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(2.0), X(2.0), X(0.5), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0)}, // ice + {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(2.0)}, // dragon + #if B_STEEL_RESISTANCES >= GEN_6 + {X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(2.0), X(2.0)}, // dark + #else + {X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(2.0), X(2.0)}, // dark + #endif + {X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(0.5), X(1.0)}, // fairy +}; + +#undef X + +// code u8 GetBattlerForBattleScript(u8 caseId) { u8 ret = 0; @@ -709,13 +1294,13 @@ u8 GetBattlerForBattleScript(u8 caseId) case BS_FAINTED: ret = gBattlerFainted; break; - case 5: + case BS_FAINTED_LINK_MULTIPLE_1: ret = gBattlerFainted; break; - case 4: - case 6: - case 8: - case 9: + case BS_ATTACKER_WITH_PARTNER: + case BS_FAINTED_LINK_MULTIPLE_2: + case BS_ATTACKER_SIDE: + case BS_TARGET_SIDE: case BS_PLAYER1: ret = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); break; @@ -728,6 +1313,9 @@ u8 GetBattlerForBattleScript(u8 caseId) case BS_OPPONENT2: ret = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); break; + case BS_ABILITY_BATTLER: + ret = gBattlerAbility; + break; } return ret; } @@ -736,7 +1324,7 @@ void PressurePPLose(u8 target, u8 attacker, u16 move) { int moveIndex; - if (gBattleMons[target].ability != ABILITY_PRESSURE) + if (GetBattlerAbility(target) != ABILITY_PRESSURE) return; for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) @@ -751,11 +1339,10 @@ void PressurePPLose(u8 target, u8 attacker, u16 move) if (gBattleMons[attacker].pp[moveIndex] != 0) gBattleMons[attacker].pp[moveIndex]--; - if (!(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED) - && !(gDisableStructs[attacker].mimickedMoves & gBitTable[moveIndex])) + if (MOVE_IS_PERMANENT(attacker, moveIndex)) { gActiveBattler = attacker; - BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + moveIndex, 0, 1, &gBattleMons[gActiveBattler].pp[moveIndex]); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_PPMOVE1_BATTLE + moveIndex, 0, 1, &gBattleMons[gActiveBattler].pp[moveIndex]); MarkBattlerForControllerExec(gActiveBattler); } } @@ -763,12 +1350,12 @@ void PressurePPLose(u8 target, u8 attacker, u16 move) void PressurePPLoseOnUsingImprison(u8 attacker) { int i, j; - int imprisonPos = 4; + int imprisonPos = MAX_MON_MOVES; u8 atkSide = GetBattlerSide(attacker); for (i = 0; i < gBattlersCount; i++) { - if (atkSide != GetBattlerSide(i) && gBattleMons[i].ability == ABILITY_PRESSURE) + if (atkSide != GetBattlerSide(i) && GetBattlerAbility(i) == ABILITY_PRESSURE) { for (j = 0; j < MAX_MON_MOVES; j++) { @@ -784,12 +1371,10 @@ void PressurePPLoseOnUsingImprison(u8 attacker) } } - if (imprisonPos != 4 - && !(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED) - && !(gDisableStructs[attacker].mimickedMoves & gBitTable[imprisonPos])) + if (imprisonPos != MAX_MON_MOVES && MOVE_IS_PERMANENT(attacker, imprisonPos)) { gActiveBattler = attacker; - BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + imprisonPos, 0, 1, &gBattleMons[gActiveBattler].pp[imprisonPos]); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_PPMOVE1_BATTLE + imprisonPos, 0, 1, &gBattleMons[gActiveBattler].pp[imprisonPos]); MarkBattlerForControllerExec(gActiveBattler); } } @@ -797,11 +1382,11 @@ void PressurePPLoseOnUsingImprison(u8 attacker) void PressurePPLoseOnUsingPerishSong(u8 attacker) { int i, j; - int perishSongPos = 4; + int perishSongPos = MAX_MON_MOVES; for (i = 0; i < gBattlersCount; i++) { - if (gBattleMons[i].ability == ABILITY_PRESSURE && i != attacker) + if (GetBattlerAbility(i) == ABILITY_PRESSURE && i != attacker) { for (j = 0; j < MAX_MON_MOVES; j++) { @@ -817,17 +1402,16 @@ void PressurePPLoseOnUsingPerishSong(u8 attacker) } } - if (perishSongPos != MAX_MON_MOVES - && !(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED) - && !(gDisableStructs[attacker].mimickedMoves & gBitTable[perishSongPos])) + if (perishSongPos != MAX_MON_MOVES && MOVE_IS_PERMANENT(attacker, perishSongPos)) { gActiveBattler = attacker; - BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + perishSongPos, 0, 1, &gBattleMons[gActiveBattler].pp[perishSongPos]); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_PPMOVE1_BATTLE + perishSongPos, 0, 1, &gBattleMons[gActiveBattler].pp[perishSongPos]); MarkBattlerForControllerExec(gActiveBattler); } } -void MarkAllBattlersForControllerExec(void) // unused +// Unused +static void MarkAllBattlersForControllerExec(void) { int i; @@ -843,6 +1427,14 @@ void MarkAllBattlersForControllerExec(void) // unused } } +bool32 IsBattlerMarkedForControllerExec(u8 battlerId) +{ + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + return (gBattleControllerExecFlags & (gBitTable[battlerId] << 0x1C)) != 0; + else + return (gBattleControllerExecFlags & (gBitTable[battlerId])) != 0; +} + void MarkBattlerForControllerExec(u8 battlerId) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -858,17 +1450,85 @@ void MarkBattlerReceivedLinkData(u8 battlerId) for (i = 0; i < GetLinkPlayerCount(); i++) gBattleControllerExecFlags |= gBitTable[battlerId] << (i << 2); - gBattleControllerExecFlags &= ~(0x10000000 << battlerId); + gBattleControllerExecFlags &= ~((1 << 28) << battlerId); } void CancelMultiTurnMoves(u8 battler) { + u8 i; gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS); gBattleMons[battler].status2 &= ~(STATUS2_LOCK_CONFUSE); gBattleMons[battler].status2 &= ~(STATUS2_UPROAR); gBattleMons[battler].status2 &= ~(STATUS2_BIDE); - gStatuses3[battler] &= ~(STATUS3_SEMI_INVULNERABLE); + // Clear battler's semi-invulnerable bits if they are not held by Sky Drop. + if (!(gStatuses3[battler] & STATUS3_SKY_DROPPED)) + gStatuses3[battler] &= ~(STATUS3_SEMI_INVULNERABLE); + + // Check to see if this Pokemon was in the middle of using Sky Drop. If so, release the target. + if (gBattleStruct->skyDropTargets[battler] != 0xFF && !(gStatuses3[battler] & STATUS3_SKY_DROPPED)) + { + // Get the target's battler id + u8 otherSkyDropper = gBattleStruct->skyDropTargets[battler]; + + // Clears sky_dropped and on_air statuses + gStatuses3[otherSkyDropper] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR); + + // Makes both attacker and target's sprites visible + gSprites[gBattlerSpriteIds[battler]].invisible = FALSE; + gSprites[gBattlerSpriteIds[otherSkyDropper]].invisible = FALSE; + + // If target was sky dropped in the middle of Outrage/Thrash/Petal Dance, + // confuse them upon release and display "confused by fatigue" message & animation. + // Don't do this if this CancelMultiTurnMoves is caused by falling asleep via Yawn. + if (gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE && gBattleStruct->turnEffectsTracker != 24) + { + gBattleMons[otherSkyDropper].status2 &= ~(STATUS2_LOCK_CONFUSE); + + // If the target can be confused, confuse them. + // Don't use CanBeConfused, can cause issues in edge cases. + if (!(GetBattlerAbility(otherSkyDropper) == ABILITY_OWN_TEMPO + || gBattleMons[otherSkyDropper].status2 & STATUS2_CONFUSION + || IsBattlerTerrainAffected(otherSkyDropper, STATUS_FIELD_MISTY_TERRAIN))) + { + // Set confused status + gBattleMons[otherSkyDropper].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); + + // If this CancelMultiTurnMoves is occuring due to attackcanceller + if (gBattlescriptCurrInstr[0] == 0x0) + { + gBattleStruct->skyDropTargets[battler] = 0xFE; + } + // If this CancelMultiTurnMoves is occuring due to VARIOUS_GRAVITY_ON_AIRBORNE_MONS + // Reapplying STATUS3_SKY_DROPPED allows for avoiding unecessary messages when Gravity is applied to the target. + else if (gBattlescriptCurrInstr[0] == 0x76 && gBattlescriptCurrInstr[2] == 76) + { + gBattleStruct->skyDropTargets[battler] = 0xFE; + gStatuses3[otherSkyDropper] |= STATUS3_SKY_DROPPED; + } + // If this CancelMultiTurnMoves is occuring due to cancelmultiturnmoves script + else if (gBattlescriptCurrInstr[0] == 0x76 && gBattlescriptCurrInstr[2] == 0) + { + gBattlerAttacker = otherSkyDropper; + gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 3; + } + // If this CancelMultiTurnMoves is occuring due to receiving Sleep/Freeze status + else if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT) + { + gBattlerAttacker = otherSkyDropper; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 1; + } + } + } + + // Clear skyDropTargets data, unless this CancelMultiTurnMoves is caused by Yawn, attackcanceler, or VARIOUS_GRAVITY_ON_AIRBORNE_MONS + if (!(gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE) && gBattleStruct->skyDropTargets[battler] < 4) + { + gBattleStruct->skyDropTargets[battler] = 0xFF; + gBattleStruct->skyDropTargets[otherSkyDropper] = 0xFF; + } + } gDisableStructs[battler].rolloutTimer = 0; gDisableStructs[battler].furyCutterCounter = 0; @@ -877,14 +1537,17 @@ void CancelMultiTurnMoves(u8 battler) bool8 WasUnableToUseMove(u8 battler) { if (gProtectStructs[battler].prlzImmobility - || gProtectStructs[battler].targetNotAffected || gProtectStructs[battler].usedImprisonedMove || gProtectStructs[battler].loveImmobility || gProtectStructs[battler].usedDisabledMove || gProtectStructs[battler].usedTauntedMove + || gProtectStructs[battler].usedGravityPreventedMove + || gProtectStructs[battler].usedHealBlockedMove || gProtectStructs[battler].flag2Unknown || gProtectStructs[battler].flinchImmobility - || gProtectStructs[battler].confusionSelfDmg) + || gProtectStructs[battler].confusionSelfDmg + || gProtectStructs[battler].powderSelfDmg + || gProtectStructs[battler].usedThroatChopPreventedMove) return TRUE; else return FALSE; @@ -892,8 +1555,52 @@ bool8 WasUnableToUseMove(u8 battler) void PrepareStringBattle(u16 stringId, u8 battler) { + u32 targetSide = GetBattlerSide(gBattlerTarget); + u16 battlerAbility = GetBattlerAbility(battler); + u16 targetAbility = GetBattlerAbility(gBattlerTarget); + // Support for Contrary ability. + // If a move attempted to raise stat - print "won't increase". + // If a move attempted to lower stat - print "won't decrease". + if (stringId == STRINGID_STATSWONTDECREASE && !(gBattleScripting.statChanger & STAT_BUFF_NEGATIVE)) + stringId = STRINGID_STATSWONTINCREASE; + else if (stringId == STRINGID_STATSWONTINCREASE && gBattleScripting.statChanger & STAT_BUFF_NEGATIVE) + stringId = STRINGID_STATSWONTDECREASE; + + else if (stringId == STRINGID_STATSWONTDECREASE2 && battlerAbility == ABILITY_CONTRARY) + stringId = STRINGID_STATSWONTINCREASE2; + else if (stringId == STRINGID_STATSWONTINCREASE2 && battlerAbility == ABILITY_CONTRARY) + stringId = STRINGID_STATSWONTDECREASE2; + + // Check Defiant and Competitive stat raise whenever a stat is lowered. + else if ((stringId == STRINGID_DEFENDERSSTATFELL || stringId == STRINGID_PKMNCUTSATTACKWITH) + && ((targetAbility == ABILITY_DEFIANT && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + || (targetAbility == ABILITY_COMPETITIVE && CompareStat(gBattlerTarget, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN))) + && gSpecialStatuses[gBattlerTarget].changedStatsBattlerId != BATTLE_PARTNER(gBattlerTarget) + && ((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; + if (targetAbility == ABILITY_DEFIANT) + SET_STATCHANGER(STAT_ATK, 2, FALSE); + else + SET_STATCHANGER(STAT_SPATK, 2, FALSE); + } +#if B_UPDATED_INTIMIDATE >= GEN_8 + else if (stringId == STRINGID_PKMNCUTSATTACKWITH && targetAbility == ABILITY_RATTLED + && CompareStat(gBattlerTarget, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + gBattlerAbility = gBattlerTarget; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AbilityRaisesDefenderStat; + SET_STATCHANGER(STAT_SPEED, 1, FALSE); + } +#endif + gActiveBattler = battler; - BtlController_EmitPrintString(0, stringId); + BtlController_EmitPrintString(BUFFER_A, stringId); MarkBattlerForControllerExec(gActiveBattler); } @@ -927,7 +1634,6 @@ void OpponentSwitchInResetSentPokesToOpponentValue(u8 battler) if (!(gAbsentBattlerFlags & gBitTable[i])) bits |= gBitTable[gBattlerPartyIndexes[i]]; } - gSentPokesToOpponent[flank] = bits; } } @@ -961,12 +1667,72 @@ void BattleScriptPop(void) gBattlescriptCurrInstr = gBattleResources->battleScriptsStack->ptr[--gBattleResources->battleScriptsStack->size]; } +static bool32 IsGravityPreventingMove(u32 move) +{ + if (!(gFieldStatuses & STATUS_FIELD_GRAVITY)) + return FALSE; + + switch (move) + { + case MOVE_BOUNCE: + case MOVE_FLY: + case MOVE_FLYING_PRESS: + case MOVE_HIGH_JUMP_KICK: + case MOVE_JUMP_KICK: + case MOVE_MAGNET_RISE: + case MOVE_SKY_DROP: + case MOVE_SPLASH: + case MOVE_TELEKINESIS: + case MOVE_FLOATY_FALL: + return TRUE; + default: + return FALSE; + } +} + +bool32 IsHealBlockPreventingMove(u32 battler, u32 move) +{ + if (!(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + return FALSE; + + switch (gBattleMoves[move].effect) + { +#if B_HEAL_BLOCKING >= GEN_6 + case EFFECT_ABSORB: + case EFFECT_STRENGTH_SAP: + case EFFECT_DREAM_EATER: +#endif + case EFFECT_MORNING_SUN: + case EFFECT_SYNTHESIS: + case EFFECT_MOONLIGHT: + case EFFECT_RESTORE_HP: + case EFFECT_REST: + case EFFECT_ROOST: + case EFFECT_HEALING_WISH: + case EFFECT_WISH: + case EFFECT_HEAL_PULSE: + case EFFECT_JUNGLE_HEALING: + return TRUE; + default: + return FALSE; + } +} + +static bool32 IsBelchPreventingMove(u32 battler, u32 move) +{ + if (gBattleMoves[move].effect != EFFECT_BELCH) + return FALSE; + + return !(gBattleStruct->ateBerry[battler & BIT_SIDE] & gBitTable[gBattlerPartyIndexes[battler]]); +} + u8 TrySetCantSelectMoveBattleScript(void) { - u8 limitations = 0; - u16 move = gBattleMons[gActiveBattler].moves[gBattleBufferB[gActiveBattler][2]]; - u8 holdEffect; - u16* choicedMove = &gBattleStruct->choicedMove[gActiveBattler]; + u32 limitations = 0; + u8 moveId = gBattleResources->bufferB[gActiveBattler][2] & ~RET_MEGA_EVOLUTION; + u32 move = gBattleMons[gActiveBattler].moves[moveId]; + u32 holdEffect = GetBattlerHoldEffect(gActiveBattler, TRUE); + u16 *choicedMove = &gBattleStruct->choicedMove[gActiveBattler]; if (gDisableStructs[gActiveBattler].disabledMove == move && move != MOVE_NONE) { @@ -975,12 +1741,12 @@ u8 TrySetCantSelectMoveBattleScript(void) if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingDisabledMoveInPalace; - gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; } else { gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingDisabledMove; - limitations = 1; + limitations++; } } @@ -990,7 +1756,7 @@ u8 TrySetCantSelectMoveBattleScript(void) if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingTormentedMoveInPalace; - gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; } else { @@ -999,13 +1765,13 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (gDisableStructs[gActiveBattler].tauntTimer != 0 && gBattleMoves[move].power == 0) + if (!gBattleStruct->zmove.active && gDisableStructs[gActiveBattler].tauntTimer != 0 && IS_MOVE_STATUS(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveTauntInPalace; - gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; } else { @@ -1014,13 +1780,28 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (GetImprisonedMovesCount(gActiveBattler, move)) + if (!gBattleStruct->zmove.active && gDisableStructs[gActiveBattler].throatChopTimer != 0 && gBattleMoves[move].flags & FLAG_SOUND) + { + gCurrentMove = move; + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) + { + gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveThroatChopInPalace; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; + } + else + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveThroatChop; + limitations++; + } + } + + if (!gBattleStruct->zmove.active && GetImprisonedMovesCount(gActiveBattler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingImprisonedMoveInPalace; - gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; } else { @@ -1029,20 +1810,75 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (gBattleMons[gActiveBattler].item == ITEM_ENIGMA_BERRY) - holdEffect = gEnigmaBerries[gActiveBattler].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item); + if (!gBattleStruct->zmove.active && IsGravityPreventingMove(move)) + { + gCurrentMove = move; + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) + { + gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveGravityInPalace; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; + } + else + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveGravity; + limitations++; + } + } + + if (!gBattleStruct->zmove.active && IsHealBlockPreventingMove(gActiveBattler, move)) + { + gCurrentMove = move; + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) + { + gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveHealBlockInPalace; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; + } + else + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveHealBlock; + limitations++; + } + } + + if (!gBattleStruct->zmove.active && IsBelchPreventingMove(gActiveBattler, move)) + { + gCurrentMove = move; + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) + { + gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedBelchInPalace; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; + } + else + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedBelch; + limitations++; + } + } + + if (move == MOVE_STUFF_CHEEKS && ItemId_GetPocket(gBattleMons[gActiveBattler].item) != POCKET_BERRIES) + { + gCurrentMove = move; + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) + { + gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedStuffCheeksInPalace; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; + } + else + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedStuffCheeks; + limitations++; + } + } gPotentialItemEffectBattler = gActiveBattler; - - if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != move) + if (HOLD_EFFECT_CHOICE(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) { gCurrentMove = *choicedMove; gLastUsedItem = gBattleMons[gActiveBattler].item; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1; + gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveChoiceItemInPalace; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; } else { @@ -1050,12 +1886,43 @@ u8 TrySetCantSelectMoveBattleScript(void) limitations++; } } + else if (holdEffect == HOLD_EFFECT_ASSAULT_VEST && IS_MOVE_STATUS(move) && move != MOVE_ME_FIRST) + { + gCurrentMove = move; + gLastUsedItem = gBattleMons[gActiveBattler].item; + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) + { + gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveAssaultVestInPalace; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; + } + else + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveAssaultVest; + limitations++; + } + } + if ((GetBattlerAbility(gActiveBattler) == ABILITY_GORILLA_TACTICS) && *choicedMove != MOVE_NONE + && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) + { + gCurrentMove = *choicedMove; + gLastUsedItem = gBattleMons[gActiveBattler].item; + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) + { + gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveGorillaTacticsInPalace; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; + } + else + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveGorillaTactics; + limitations++; + } + } - if (gBattleMons[gActiveBattler].pp[gBattleBufferB[gActiveBattler][2]] == 0) + if (gBattleMons[gActiveBattler].pp[moveId] == 0) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; } else { @@ -1064,61 +1931,103 @@ u8 TrySetCantSelectMoveBattleScript(void) } } + if (gBattleMoves[move].effect == EFFECT_PLACEHOLDER) + { + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) + { + gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedPlaceholderInPalace; + gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; + } + else + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedPlaceholder; + limitations++; + } + } + return limitations; } -u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check) +u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u16 check) { - u8 holdEffect; + u8 holdEffect = GetBattlerHoldEffect(battlerId, TRUE); u16 *choicedMove = &gBattleStruct->choicedMove[battlerId]; s32 i; - if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) - holdEffect = gEnigmaBerries[battlerId].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(gBattleMons[battlerId].item); - gPotentialItemEffectBattler = battlerId; for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleMons[battlerId].moves[i] == 0 && check & MOVE_LIMITATION_ZEROMOVE) + // No move + if (check & MOVE_LIMITATION_ZEROMOVE && gBattleMons[battlerId].moves[i] == MOVE_NONE) unusableMoves |= gBitTable[i]; - if (gBattleMons[battlerId].pp[i] == 0 && check & MOVE_LIMITATION_PP) + // No PP + else if (check & MOVE_LIMITATION_PP && gBattleMons[battlerId].pp[i] == 0) unusableMoves |= gBitTable[i]; - if (gBattleMons[battlerId].moves[i] == gDisableStructs[battlerId].disabledMove && check & MOVE_LIMITATION_DISABLED) + // Placeholder + else if (check & MOVE_LIMITATION_PLACEHOLDER && gBattleMoves[gBattleMons[battlerId].moves[i]].effect == EFFECT_PLACEHOLDER) unusableMoves |= gBitTable[i]; - if (gBattleMons[battlerId].moves[i] == gLastMoves[battlerId] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[battlerId].status2 & STATUS2_TORMENT) + // Disable + else if (check & MOVE_LIMITATION_DISABLED && gBattleMons[battlerId].moves[i] == gDisableStructs[battlerId].disabledMove) unusableMoves |= gBitTable[i]; - if (gDisableStructs[battlerId].tauntTimer && check & MOVE_LIMITATION_TAUNT && gBattleMoves[gBattleMons[battlerId].moves[i]].power == 0) + // Torment + else if (check & MOVE_LIMITATION_TORMENTED && gBattleMons[battlerId].moves[i] == gLastMoves[battlerId] && gBattleMons[battlerId].status2 & STATUS2_TORMENT) unusableMoves |= gBitTable[i]; - if (GetImprisonedMovesCount(battlerId, gBattleMons[battlerId].moves[i]) && check & MOVE_LIMITATION_IMPRISON) + // Taunt + else if (check & MOVE_LIMITATION_TAUNT && gDisableStructs[battlerId].tauntTimer && IS_MOVE_STATUS(gBattleMons[battlerId].moves[i])) unusableMoves |= gBitTable[i]; - if (gDisableStructs[battlerId].encoreTimer && gDisableStructs[battlerId].encoredMove != gBattleMons[battlerId].moves[i]) + // Imprison + else if (check & MOVE_LIMITATION_IMPRISON && GetImprisonedMovesCount(battlerId, gBattleMons[battlerId].moves[i])) unusableMoves |= gBitTable[i]; - if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != gBattleMons[battlerId].moves[i]) + // Encore + else if (check & MOVE_LIMITATION_ENCORE && gDisableStructs[battlerId].encoreTimer && gDisableStructs[battlerId].encoredMove != gBattleMons[battlerId].moves[i]) + unusableMoves |= gBitTable[i]; + // Choice Items + else if (check & MOVE_LIMITATION_CHOICE_ITEM && HOLD_EFFECT_CHOICE(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != gBattleMons[battlerId].moves[i]) + unusableMoves |= gBitTable[i]; + // Assault Vest + else if (check & MOVE_LIMITATION_ASSAULT_VEST && holdEffect == HOLD_EFFECT_ASSAULT_VEST && IS_MOVE_STATUS(gBattleMons[battlerId].moves[i]) && gBattleMons[battlerId].moves[i] != MOVE_ME_FIRST) + unusableMoves |= gBitTable[i]; + // Gravity + else if (check & MOVE_LIMITATION_GRAVITY && IsGravityPreventingMove(gBattleMons[battlerId].moves[i])) + unusableMoves |= gBitTable[i]; + // Heal Block + else if (check & MOVE_LIMITATION_HEAL_BLOCK && IsHealBlockPreventingMove(battlerId, gBattleMons[battlerId].moves[i])) + unusableMoves |= gBitTable[i]; + // Belch + else if (check & MOVE_LIMITATION_BELCH && IsBelchPreventingMove(battlerId, gBattleMons[battlerId].moves[i])) + unusableMoves |= gBitTable[i]; + // Throat Chop + else if (check & MOVE_LIMITATION_THROAT_CHOP && gDisableStructs[battlerId].throatChopTimer && gBattleMoves[gBattleMons[battlerId].moves[i]].flags & FLAG_SOUND) + unusableMoves |= gBitTable[i]; + // Stuff Cheeks + else if (check & MOVE_LIMITATION_STUFF_CHEEKS && gBattleMons[battlerId].moves[i] == MOVE_STUFF_CHEEKS && ItemId_GetPocket(gBattleMons[gActiveBattler].item) != POCKET_BERRIES) + unusableMoves |= gBitTable[i]; + // Gorilla Tactics + else if (check & MOVE_LIMITATION_CHOICE_ITEM && GetBattlerAbility(battlerId) == ABILITY_GORILLA_TACTICS && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != gBattleMons[battlerId].moves[i]) unusableMoves |= gBitTable[i]; } return unusableMoves; } +#define ALL_MOVES_MASK ((1 << MAX_MON_MOVES) - 1) bool8 AreAllMovesUnusable(void) { - u8 unusable; - unusable = CheckMoveLimitations(gActiveBattler, 0, 0xFF); + u8 unusable = CheckMoveLimitations(gActiveBattler, 0, MOVE_LIMITATIONS_ALL); - if (unusable == 0xF) // All moves are unusable. + if (unusable == ALL_MOVES_MASK) // All moves are unusable. { - gProtectStructs[gActiveBattler].noValidMoves = 1; + gProtectStructs[gActiveBattler].noValidMoves = TRUE; gSelectionBattleScripts[gActiveBattler] = BattleScript_NoMovesLeft; } else { - gProtectStructs[gActiveBattler].noValidMoves = 0; + gProtectStructs[gActiveBattler].noValidMoves = FALSE; } - return (unusable == 0xF); + return (unusable == ALL_MOVES_MASK); } +#undef ALL_MOVES_MASK u8 GetImprisonedMovesCount(u8 battlerId, u16 move) { @@ -1144,25 +2053,112 @@ u8 GetImprisonedMovesCount(u8 battlerId, u16 move) return imprisonedMoves; } +void RestoreBattlerOriginalTypes(u8 battlerId) +{ + gBattleMons[battlerId].type1 = gBaseStats[gBattleMons[battlerId].species].type1; + gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2; +} + +void TryToApplyMimicry(u8 battlerId, bool8 various) +{ + u32 moveType, move; + + GET_MOVE_TYPE(move, moveType); + switch (gFieldStatuses) + { + case STATUS_FIELD_ELECTRIC_TERRAIN: + moveType = TYPE_ELECTRIC; + break; + case STATUS_FIELD_MISTY_TERRAIN: + moveType = TYPE_FAIRY; + break; + case STATUS_FIELD_GRASSY_TERRAIN: + moveType = TYPE_GRASS; + break; + case STATUS_FIELD_PSYCHIC_TERRAIN: + moveType = TYPE_PSYCHIC; + break; + default: + moveType = 0; + break; + } + + if (moveType != 0 && !IS_BATTLER_OF_TYPE(battlerId, moveType)) + { + SET_BATTLER_TYPE(battlerId, moveType); + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, battlerId, gBattlerPartyIndexes[battlerId]) + PREPARE_TYPE_BUFFER(gBattleTextBuff2, moveType); + if (!various) + BattleScriptPushCursorAndCallback(BattleScript_MimicryActivatesEnd3); + } +} + +void TryToRevertMimicry(void) +{ + s32 i; + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (GetBattlerAbility(i) == ABILITY_MIMICRY) + RestoreBattlerOriginalTypes(i); + } +} + +u32 GetMonFriendshipScore(struct Pokemon *pokemon) +{ + u32 friendshipScore = GetMonData(pokemon, MON_DATA_FRIENDSHIP); + + if (friendshipScore == MAX_FRIENDSHIP) + return FRIENDSHIP_MAX; + if (friendshipScore >= 200) + return FRIENDSHIP_200_TO_254; + if (friendshipScore >= 150) + return FRIENDSHIP_150_TO_199; + if (friendshipScore >= 100) + return FRIENDSHIP_100_TO_149; + if (friendshipScore >= 50) + return FRIENDSHIP_50_TO_99; + if (friendshipScore >= 1) + return FRIENDSHIP_1_TO_49; + + return FRIENDSHIP_NONE; +} + enum { ENDTURN_ORDER, ENDTURN_REFLECT, ENDTURN_LIGHT_SCREEN, + ENDTURN_AURORA_VEIL, ENDTURN_MIST, + ENDTURN_LUCKY_CHANT, ENDTURN_SAFEGUARD, + ENDTURN_TAILWIND, ENDTURN_WISH, ENDTURN_RAIN, ENDTURN_SANDSTORM, ENDTURN_SUN, ENDTURN_HAIL, + ENDTURN_GRAVITY, + ENDTURN_WATER_SPORT, + ENDTURN_MUD_SPORT, + ENDTURN_TRICK_ROOM, + ENDTURN_WONDER_ROOM, + ENDTURN_MAGIC_ROOM, + ENDTURN_ELECTRIC_TERRAIN, + ENDTURN_MISTY_TERRAIN, + ENDTURN_GRASSY_TERRAIN, + ENDTURN_PSYCHIC_TERRAIN, + ENDTURN_ION_DELUGE, + ENDTURN_FAIRY_LOCK, + ENDTURN_RETALIATE, + ENDTURN_STATUS_HEAL, ENDTURN_FIELD_COUNT, }; u8 DoFieldEndTurnEffects(void) { u8 effect = 0; - s32 i; for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount && gAbsentBattlerFlags & gBitTable[gBattlerAttacker]; gBattlerAttacker++) { @@ -1173,6 +2169,7 @@ u8 DoFieldEndTurnEffects(void) do { + s32 i; u8 side; switch (gBattleStruct->turnCountersTracker) @@ -1187,17 +2184,13 @@ u8 DoFieldEndTurnEffects(void) s32 j; for (j = i + 1; j < gBattlersCount; j++) { - if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], 0)) + if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE)) SwapTurnOrder(i, j); } } - // It's stupid, but won't match without it - { - u8* var = &gBattleStruct->turnCountersTracker; - (*var)++; - gBattleStruct->turnSideTracker = 0; - } + gBattleStruct->turnCountersTracker++; + gBattleStruct->turnSideTracker = 0; // fall through case ENDTURN_REFLECT: while (gBattleStruct->turnSideTracker < 2) @@ -1215,10 +2208,10 @@ u8 DoFieldEndTurnEffects(void) } } gBattleStruct->turnSideTracker++; - if (effect) + if (effect != 0) break; } - if (!effect) + if (effect == 0) { gBattleStruct->turnCountersTracker++; gBattleStruct->turnSideTracker = 0; @@ -1241,7 +2234,33 @@ u8 DoFieldEndTurnEffects(void) } } gBattleStruct->turnSideTracker++; - if (effect) + if (effect != 0) + break; + } + if (effect == 0) + { + gBattleStruct->turnCountersTracker++; + gBattleStruct->turnSideTracker = 0; + } + break; + case ENDTURN_AURORA_VEIL: + while (gBattleStruct->turnSideTracker < 2) + { + side = gBattleStruct->turnSideTracker; + gActiveBattler = gBattlerAttacker = gSideTimers[side].auroraVeilBattlerId; + if (gSideStatuses[side] & SIDE_STATUS_AURORA_VEIL) + { + if (--gSideTimers[side].auroraVeilTimer == 0) + { + gSideStatuses[side] &= ~SIDE_STATUS_AURORA_VEIL; + BattleScriptExecute(BattleScript_SideStatusWoreOff); + gBattleCommunication[MULTISTRING_CHOOSER] = side; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_AURORA_VEIL); + effect++; + } + } + gBattleStruct->turnSideTracker++; + if (effect != 0) break; } if (!effect) @@ -1255,8 +2274,7 @@ u8 DoFieldEndTurnEffects(void) { side = gBattleStruct->turnSideTracker; gActiveBattler = gBattlerAttacker = gSideTimers[side].mistBattlerId; - if (gSideTimers[side].mistTimer != 0 - && --gSideTimers[side].mistTimer == 0) + if (gSideTimers[side].mistTimer != 0 && --gSideTimers[side].mistTimer == 0) { gSideStatuses[side] &= ~SIDE_STATUS_MIST; BattleScriptExecute(BattleScript_SideStatusWoreOff); @@ -1265,10 +2283,10 @@ u8 DoFieldEndTurnEffects(void) effect++; } gBattleStruct->turnSideTracker++; - if (effect) + if (effect != 0) break; } - if (!effect) + if (effect == 0) { gBattleStruct->turnCountersTracker++; gBattleStruct->turnSideTracker = 0; @@ -1289,7 +2307,55 @@ u8 DoFieldEndTurnEffects(void) } } gBattleStruct->turnSideTracker++; - if (effect) + if (effect != 0) + break; + } + if (effect == 0) + { + gBattleStruct->turnCountersTracker++; + gBattleStruct->turnSideTracker = 0; + } + break; + case ENDTURN_LUCKY_CHANT: + while (gBattleStruct->turnSideTracker < 2) + { + side = gBattleStruct->turnSideTracker; + gActiveBattler = gBattlerAttacker = gSideTimers[side].luckyChantBattlerId; + if (gSideStatuses[side] & SIDE_STATUS_LUCKY_CHANT) + { + if (--gSideTimers[side].luckyChantTimer == 0) + { + gSideStatuses[side] &= ~SIDE_STATUS_LUCKY_CHANT; + BattleScriptExecute(BattleScript_LuckyChantEnds); + effect++; + } + } + gBattleStruct->turnSideTracker++; + if (effect != 0) + break; + } + if (!effect) + { + gBattleStruct->turnCountersTracker++; + gBattleStruct->turnSideTracker = 0; + } + break; + case ENDTURN_TAILWIND: + while (gBattleStruct->turnSideTracker < 2) + { + side = gBattleStruct->turnSideTracker; + gActiveBattler = gBattlerAttacker = gSideTimers[side].tailwindBattlerId; + if (gSideStatuses[side] & SIDE_STATUS_TAILWIND) + { + if (--gSideTimers[side].tailwindTimer == 0) + { + gSideStatuses[side] &= ~SIDE_STATUS_TAILWIND; + BattleScriptExecute(BattleScript_TailwindEnds); + effect++; + } + } + gBattleStruct->turnSideTracker++; + if (effect != 0) break; } if (!effect) @@ -1311,31 +2377,33 @@ u8 DoFieldEndTurnEffects(void) effect++; } gBattleStruct->turnSideTracker++; - if (effect) + if (effect != 0) break; } - if (!effect) + if (effect == 0) { gBattleStruct->turnCountersTracker++; + gBattleStruct->turnSideTracker = 0; } break; case ENDTURN_RAIN: - if (gBattleWeather & WEATHER_RAIN_ANY) + if (gBattleWeather & B_WEATHER_RAIN) { - if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) + if (!(gBattleWeather & B_WEATHER_RAIN_PERMANENT) + && !(gBattleWeather & B_WEATHER_RAIN_PRIMAL)) { if (--gWishFutureKnock.weatherDuration == 0) { - gBattleWeather &= ~WEATHER_RAIN_TEMPORARY; - gBattleWeather &= ~WEATHER_RAIN_DOWNPOUR; + gBattleWeather &= ~B_WEATHER_RAIN_TEMPORARY; + gBattleWeather &= ~B_WEATHER_RAIN_DOWNPOUR; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_STOPPED; } - else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR) + else if (gBattleWeather & B_WEATHER_RAIN_DOWNPOUR) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOWNPOUR_CONTINUES; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_CONTINUES; } - else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR) + else if (gBattleWeather & B_WEATHER_RAIN_DOWNPOUR) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOWNPOUR_CONTINUES; } @@ -1350,11 +2418,11 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_SANDSTORM: - if (gBattleWeather & WEATHER_SANDSTORM_ANY) + if (gBattleWeather & B_WEATHER_SANDSTORM) { - if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) + if (!(gBattleWeather & B_WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) { - gBattleWeather &= ~WEATHER_SANDSTORM_TEMPORARY; + gBattleWeather &= ~B_WEATHER_SANDSTORM_TEMPORARY; gBattlescriptCurrInstr = BattleScript_SandStormHailEnds; } else @@ -1370,11 +2438,13 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_SUN: - if (gBattleWeather & WEATHER_SUN_ANY) + if (gBattleWeather & B_WEATHER_SUN) { - if (!(gBattleWeather & WEATHER_SUN_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) + if (!(gBattleWeather & B_WEATHER_SUN_PERMANENT) + && !(gBattleWeather & B_WEATHER_SUN_PRIMAL) + && --gWishFutureKnock.weatherDuration == 0) { - gBattleWeather &= ~WEATHER_SUN_TEMPORARY; + gBattleWeather &= ~B_WEATHER_SUN_TEMPORARY; gBattlescriptCurrInstr = BattleScript_SunlightFaded; } else @@ -1388,11 +2458,11 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_HAIL: - if (gBattleWeather & WEATHER_HAIL_ANY) + if (gBattleWeather & B_WEATHER_HAIL) { - if (--gWishFutureKnock.weatherDuration == 0) + if (!(gBattleWeather & B_WEATHER_HAIL_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) { - gBattleWeather &= ~WEATHER_HAIL; + gBattleWeather &= ~B_WEATHER_HAIL_TEMPORARY; gBattlescriptCurrInstr = BattleScript_SandStormHailEnds; } else @@ -1407,17 +2477,158 @@ u8 DoFieldEndTurnEffects(void) } gBattleStruct->turnCountersTracker++; break; + case ENDTURN_TRICK_ROOM: + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && --gFieldTimers.trickRoomTimer == 0) + { + gFieldStatuses &= ~STATUS_FIELD_TRICK_ROOM; + BattleScriptExecute(BattleScript_TrickRoomEnds); + effect++; + } + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_WONDER_ROOM: + if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM && --gFieldTimers.wonderRoomTimer == 0) + { + gFieldStatuses &= ~STATUS_FIELD_WONDER_ROOM; + BattleScriptExecute(BattleScript_WonderRoomEnds); + effect++; + } + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_MAGIC_ROOM: + if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM && --gFieldTimers.magicRoomTimer == 0) + { + gFieldStatuses &= ~STATUS_FIELD_MAGIC_ROOM; + BattleScriptExecute(BattleScript_MagicRoomEnds); + effect++; + } + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_ELECTRIC_TERRAIN: + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN + && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) + { + gFieldStatuses &= ~(STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); + TryToRevertMimicry(); + BattleScriptExecute(BattleScript_ElectricTerrainEnds); + effect++; + } + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_MISTY_TERRAIN: + if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN + && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) + { + gFieldStatuses &= ~STATUS_FIELD_MISTY_TERRAIN; + TryToRevertMimicry(); + BattleScriptExecute(BattleScript_MistyTerrainEnds); + effect++; + } + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_GRASSY_TERRAIN: + if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + { + if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) + && (gFieldTimers.terrainTimer == 0 || --gFieldTimers.terrainTimer == 0)) + { + gFieldStatuses &= ~STATUS_FIELD_GRASSY_TERRAIN; + TryToRevertMimicry(); + } + BattleScriptExecute(BattleScript_GrassyTerrainHeals); + effect++; + } + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_PSYCHIC_TERRAIN: + if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN + && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) + { + gFieldStatuses &= ~STATUS_FIELD_PSYCHIC_TERRAIN; + TryToRevertMimicry(); + BattleScriptExecute(BattleScript_PsychicTerrainEnds); + effect++; + } + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_WATER_SPORT: + #if B_SPORT_TURNS >= GEN_6 + if (gFieldStatuses & STATUS_FIELD_WATERSPORT && --gFieldTimers.waterSportTimer == 0) + { + gFieldStatuses &= ~STATUS_FIELD_WATERSPORT; + BattleScriptExecute(BattleScript_WaterSportEnds); + effect++; + } + #endif + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_MUD_SPORT: + #if B_SPORT_TURNS >= GEN_6 + if (gFieldStatuses & STATUS_FIELD_MUDSPORT && --gFieldTimers.mudSportTimer == 0) + { + gFieldStatuses &= ~STATUS_FIELD_MUDSPORT; + BattleScriptExecute(BattleScript_MudSportEnds); + effect++; + } + #endif + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_GRAVITY: + if (gFieldStatuses & STATUS_FIELD_GRAVITY && --gFieldTimers.gravityTimer == 0) + { + gFieldStatuses &= ~STATUS_FIELD_GRAVITY; + BattleScriptExecute(BattleScript_GravityEnds); + effect++; + } + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_ION_DELUGE: + gFieldStatuses &= ~STATUS_FIELD_ION_DELUGE; + gBattleStruct->turnCountersTracker++; + break; + case ENDTURN_FAIRY_LOCK: + if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK && --gFieldTimers.fairyLockTimer == 0) + { + gFieldStatuses &= ~STATUS_FIELD_FAIRY_LOCK; + } + 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_STATUS_HEAL: + for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++) + { + #if B_AFFECTION_MECHANICS == TRUE + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER + && GetMonFriendshipScore(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]) >= FRIENDSHIP_150_TO_199 + && (Random() % 100 < 20)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + BattleScriptExecute(BattleScript_AffectionBasedStatusHeal); + break; + } + #endif + } + gBattleStruct->turnCountersTracker++; + break; case ENDTURN_FIELD_COUNT: effect++; break; } } while (effect == 0); + return (gBattleMainFunc != BattleTurnPassed); } enum { ENDTURN_INGRAIN, + ENDTURN_AQUA_RING, ENDTURN_ABILITIES, ENDTURN_ITEMS1, ENDTURN_LEECH_SEED, @@ -1427,81 +2638,150 @@ enum ENDTURN_NIGHTMARES, ENDTURN_CURSE, ENDTURN_WRAP, + ENDTURN_OCTOLOCK, ENDTURN_UPROAR, ENDTURN_THRASH, + ENDTURN_FLINCH, ENDTURN_DISABLE, ENDTURN_ENCORE, + ENDTURN_MAGNET_RISE, + ENDTURN_TELEKINESIS, + ENDTURN_HEALBLOCK, + ENDTURN_EMBARGO, ENDTURN_LOCK_ON, ENDTURN_CHARGE, + ENDTURN_LASER_FOCUS, ENDTURN_TAUNT, ENDTURN_YAWN, ENDTURN_ITEMS2, + ENDTURN_ORBS, + ENDTURN_ROOST, + ENDTURN_ELECTRIFY, + ENDTURN_POWDER, + ENDTURN_THROAT_CHOP, + ENDTURN_SLOW_START, + ENDTURN_PLASMA_FISTS, ENDTURN_BATTLER_COUNT }; +// Ingrain, Leech Seed, Strength Sap and Aqua Ring +s32 GetDrainedBigRootHp(u32 battler, s32 hp) +{ + if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_BIG_ROOT) + hp = (hp * 1300) / 1000; + if (hp == 0) + hp = 1; + + return hp * -1; +} + +#define MAGIC_GUARD_CHECK \ +if (ability == ABILITY_MAGIC_GUARD) \ +{\ + RecordAbilityBattle(gActiveBattler, ability);\ + gBattleStruct->turnEffectsTracker++;\ + break;\ +} + + u8 DoBattlerEndTurnEffects(void) { - u8 effect = 0; + u32 ability, i, effect = 0; - gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); + gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_SKIP_DMG_TRACK); while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= ENDTURN_BATTLER_COUNT) { gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->turnEffectsBattlerId]; if (gAbsentBattlerFlags & gBitTable[gActiveBattler]) { gBattleStruct->turnEffectsBattlerId++; + continue; } - else + + ability = GetBattlerAbility(gActiveBattler); + switch (gBattleStruct->turnEffectsTracker) { - switch (gBattleStruct->turnEffectsTracker) + case ENDTURN_INGRAIN: // ingrain + if ((gStatuses3[gActiveBattler] & STATUS3_ROOTED) + && !BATTLER_MAX_HP(gActiveBattler) + && !(gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK) + && gBattleMons[gActiveBattler].hp != 0) { - case ENDTURN_INGRAIN: // ingrain - if ((gStatuses3[gActiveBattler] & STATUS3_ROOTED) - && gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP - && gBattleMons[gActiveBattler].hp != 0) + gBattleMoveDamage = GetDrainedBigRootHp(gActiveBattler, gBattleMons[gActiveBattler].maxHP / 16); + BattleScriptExecute(BattleScript_IngrainTurnHeal); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_AQUA_RING: // aqua ring + if ((gStatuses3[gActiveBattler] & STATUS3_AQUA_RING) + && !BATTLER_MAX_HP(gActiveBattler) + && !(gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK) + && gBattleMons[gActiveBattler].hp != 0) + { + gBattleMoveDamage = GetDrainedBigRootHp(gActiveBattler, gBattleMons[gActiveBattler].maxHP / 16); + BattleScriptExecute(BattleScript_AquaRingHeal); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_ABILITIES: // end turn abilities + if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBattler, 0, 0, 0)) + effect++; + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_ITEMS1: // item effects + if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, FALSE)) + effect++; + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_ITEMS2: // item effects again + if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, TRUE)) + effect++; + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_ORBS: + if (ItemBattleEffects(ITEMEFFECT_ORBS, gActiveBattler, FALSE)) + effect++; + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_LEECH_SEED: // leech seed + if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED) + && gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0 + && gBattleMons[gActiveBattler].hp != 0) + { + MAGIC_GUARD_CHECK; + + gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver. + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleScripting.animArg1 = gBattlerTarget; + gBattleScripting.animArg2 = gBattlerAttacker; + BattleScriptExecute(BattleScript_LeechSeedTurnDrain); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_POISON: // poison + if ((gBattleMons[gActiveBattler].status1 & STATUS1_POISON) + && gBattleMons[gActiveBattler].hp != 0) + { + MAGIC_GUARD_CHECK; + + if (ability == ABILITY_POISON_HEAL) { - gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - BattleScriptExecute(BattleScript_IngrainTurnHeal); - effect++; + if (!BATTLER_MAX_HP(gActiveBattler) && !(gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK)) + { + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + BattleScriptExecute(BattleScript_PoisonHealActivates); + effect++; + } } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_ABILITIES: // end turn abilities - if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBattler, 0, 0, 0)) - effect++; - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_ITEMS1: // item effects - if (ItemBattleEffects(1, gActiveBattler, FALSE)) - effect++; - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_ITEMS2: // item effects again - if (ItemBattleEffects(1, gActiveBattler, TRUE)) - effect++; - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_LEECH_SEED: // leech seed - if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED) - && gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0 - && gBattleMons[gActiveBattler].hp != 0) - { - gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver. - gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleScripting.animArg1 = gBattlerTarget; - gBattleScripting.animArg2 = gBattlerAttacker; - BattleScriptExecute(BattleScript_LeechSeedTurnDrain); - effect++; - } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_POISON: // poison - if ((gBattleMons[gActiveBattler].status1 & STATUS1_POISON) && gBattleMons[gActiveBattler].hp != 0) + else { gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8; if (gBattleMoveDamage == 0) @@ -1509,10 +2789,28 @@ u8 DoBattlerEndTurnEffects(void) BattleScriptExecute(BattleScript_PoisonTurnDmg); effect++; } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_BAD_POISON: // toxic poison - if ((gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON) && gBattleMons[gActiveBattler].hp != 0) + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_BAD_POISON: // toxic poison + if ((gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON) + && gBattleMons[gActiveBattler].hp != 0) + { + MAGIC_GUARD_CHECK; + + if (ability == ABILITY_POISON_HEAL) + { + if (!BATTLER_MAX_HP(gActiveBattler) && !(gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK)) + { + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + BattleScriptExecute(BattleScript_PoisonHealActivates); + effect++; + } + } + else { gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16; if (gBattleMoveDamage == 0) @@ -1523,246 +2821,392 @@ u8 DoBattlerEndTurnEffects(void) BattleScriptExecute(BattleScript_PoisonTurnDmg); effect++; } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_BURN: // burn - if ((gBattleMons[gActiveBattler].status1 & STATUS1_BURN) && gBattleMons[gActiveBattler].hp != 0) + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_BURN: // burn + if ((gBattleMons[gActiveBattler].status1 & STATUS1_BURN) + && gBattleMons[gActiveBattler].hp != 0) + { + MAGIC_GUARD_CHECK; + + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8); + if (ability == ABILITY_HEATPROOF) { - gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - BattleScriptExecute(BattleScript_BurnTurnDmg); - effect++; + if (gBattleMoveDamage > (gBattleMoveDamage / 2) + 1) // Record ability if the burn takes less damage than it normally would. + RecordAbilityBattle(gActiveBattler, ABILITY_HEATPROOF); + gBattleMoveDamage /= 2; } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_NIGHTMARES: // spooky nightmares - if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBattler].hp != 0) - { - // R/S does not perform this sleep check, which causes the nightmare effect to - // persist even after the affected Pokemon has been awakened by Shed Skin. - if (gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) - { - gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - BattleScriptExecute(BattleScript_NightmareTurnDmg); - effect++; - } - else - { - gBattleMons[gActiveBattler].status2 &= ~STATUS2_NIGHTMARE; - } - } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_CURSE: // curse - if ((gBattleMons[gActiveBattler].status2 & STATUS2_CURSED) && gBattleMons[gActiveBattler].hp != 0) + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptExecute(BattleScript_BurnTurnDmg); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_NIGHTMARES: // spooky nightmares + if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) + && gBattleMons[gActiveBattler].hp != 0) + { + MAGIC_GUARD_CHECK; + // R/S does not perform this sleep check, which causes the nightmare effect to + // persist even after the affected Pokemon has been awakened by Shed Skin. + if (gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) { gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - BattleScriptExecute(BattleScript_CurseTurnDmg); + BattleScriptExecute(BattleScript_NightmareTurnDmg); effect++; } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_WRAP: // wrap - if ((gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBattler].hp != 0) + else { - gBattleMons[gActiveBattler].status2 -= STATUS2_WRAPPED_TURN(1); - if (gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) // damaged by wrap - { - // This is the only way I could get this array access to match. - gBattleScripting.animArg1 = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 0); - gBattleScripting.animArg2 = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 1); - gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN; - gBattleTextBuff1[1] = B_BUFF_MOVE; - gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 0); - gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 1); - gBattleTextBuff1[4] = EOS; - gBattlescriptCurrInstr = BattleScript_WrapTurnDmg; - gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } - else // broke free - { - gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN; - gBattleTextBuff1[1] = B_BUFF_MOVE; - gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 0); - gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 1); - gBattleTextBuff1[4] = EOS; - gBattlescriptCurrInstr = BattleScript_WrapEnds; - } - BattleScriptExecute(gBattlescriptCurrInstr); - effect++; + gBattleMons[gActiveBattler].status2 &= ~STATUS2_NIGHTMARE; } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_UPROAR: // uproar - if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR) + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_CURSE: // curse + if ((gBattleMons[gActiveBattler].status2 & STATUS2_CURSED) + && gBattleMons[gActiveBattler].hp != 0) + { + MAGIC_GUARD_CHECK; + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptExecute(BattleScript_CurseTurnDmg); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_WRAP: // wrap + if ((gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBattler].hp != 0) + { + if (--gDisableStructs[gActiveBattler].wrapTurns != 0) // damaged by wrap { - for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++) + MAGIC_GUARD_CHECK; + + gBattleScripting.animArg1 = gBattleStruct->wrappedMove[gActiveBattler]; + gBattleScripting.animArg2 = gBattleStruct->wrappedMove[gActiveBattler] >> 8; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[gActiveBattler]); + gBattlescriptCurrInstr = BattleScript_WrapTurnDmg; + if (GetBattlerHoldEffect(gBattleStruct->wrappedBy[gActiveBattler], TRUE) == HOLD_EFFECT_BINDING_BAND) + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / ((B_BINDING_DAMAGE >= GEN_6) ? 6 : 8); + else + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / ((B_BINDING_DAMAGE >= GEN_6) ? 8 : 16); + + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + } + else // broke free + { + gBattleMons[gActiveBattler].status2 &= ~STATUS2_WRAPPED; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[gActiveBattler]); + gBattlescriptCurrInstr = BattleScript_WrapEnds; + } + BattleScriptExecute(gBattlescriptCurrInstr); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_OCTOLOCK: + { + u16 battlerAbility = GetBattlerAbility(gActiveBattler); + if (gDisableStructs[gActiveBattler].octolock + && !(battlerAbility == ABILITY_CLEAR_BODY + || battlerAbility == ABILITY_FULL_METAL_BODY + || battlerAbility == ABILITY_WHITE_SMOKE)) + { + gBattlerTarget = gActiveBattler; + BattleScriptExecute(BattleScript_OctolockEndTurn); + effect++; + } + gBattleStruct->turnEffectsTracker++; + } + break; + case ENDTURN_UPROAR: // uproar + if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR) + { + for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++) + { + if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) + && GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF) { - if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) - && gBattleMons[gBattlerAttacker].ability != ABILITY_SOUNDPROOF) - { - gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_SLEEP); - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE); - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - BattleScriptExecute(BattleScript_MonWokeUpInUproar); - gActiveBattler = gBattlerAttacker; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); - MarkBattlerForControllerExec(gActiveBattler); - break; - } - } - if (gBattlerAttacker != gBattlersCount) - { - effect = 2; // a pokemon was awaken + gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP; + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + BattleScriptExecute(BattleScript_MonWokeUpInUproar); + gActiveBattler = gBattlerAttacker; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); break; } + } + if (gBattlerAttacker != gBattlersCount) + { + effect = 2; // a pokemon was awaken + break; + } + else + { + gBattlerAttacker = gActiveBattler; + gBattleMons[gActiveBattler].status2 -= STATUS2_UPROAR_TURN(1); // uproar timer goes down + if (WasUnableToUseMove(gActiveBattler)) + { + CancelMultiTurnMoves(gActiveBattler); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_ENDS; + } + else if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_CONTINUES; + gBattleMons[gActiveBattler].status2 |= STATUS2_MULTIPLETURNS; + } else { - gBattlerAttacker = gActiveBattler; - gBattleMons[gActiveBattler].status2 -= STATUS2_UPROAR_TURN(1); - if (WasUnableToUseMove(gActiveBattler)) - { - CancelMultiTurnMoves(gActiveBattler); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_ENDS; - } - else if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_CONTINUES; - gBattleMons[gActiveBattler].status2 |= STATUS2_MULTIPLETURNS; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_ENDS; - CancelMultiTurnMoves(gActiveBattler); - } - BattleScriptExecute(BattleScript_PrintUproarOverTurns); - effect = 1; - } - } - if (effect != 2) - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_THRASH: // thrash - if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE) - { - gBattleMons[gActiveBattler].status2 -= STATUS2_LOCK_CONFUSE_TURN(1); - if (WasUnableToUseMove(gActiveBattler)) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_ENDS; CancelMultiTurnMoves(gActiveBattler); - else if (!(gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE) - && (gBattleMons[gActiveBattler].status2 & STATUS2_MULTIPLETURNS)) - { - gBattleMons[gActiveBattler].status2 &= ~(STATUS2_MULTIPLETURNS); - if (!(gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION)) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER; - SetMoveEffect(TRUE, 0); - if (gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION) - BattleScriptExecute(BattleScript_ThrashConfuses); - effect++; - } } + BattleScriptExecute(BattleScript_PrintUproarOverTurns); + effect = 1; } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_DISABLE: // disable - if (gDisableStructs[gActiveBattler].disableTimer != 0) - { - s32 i; - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gDisableStructs[gActiveBattler].disabledMove == gBattleMons[gActiveBattler].moves[i]) - break; - } - if (i == MAX_MON_MOVES) // pokemon does not have the disabled move anymore - { - gDisableStructs[gActiveBattler].disabledMove = 0; - gDisableStructs[gActiveBattler].disableTimer = 0; - } - else if (--gDisableStructs[gActiveBattler].disableTimer == 0) // disable ends - { - gDisableStructs[gActiveBattler].disabledMove = 0; - BattleScriptExecute(BattleScript_DisabledNoMore); - effect++; - } - } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_ENCORE: // encore - if (gDisableStructs[gActiveBattler].encoreTimer != 0) - { - if (gBattleMons[gActiveBattler].moves[gDisableStructs[gActiveBattler].encoredMovePos] != gDisableStructs[gActiveBattler].encoredMove) // pokemon does not have the encored move anymore - { - gDisableStructs[gActiveBattler].encoredMove = 0; - gDisableStructs[gActiveBattler].encoreTimer = 0; - } - else if (--gDisableStructs[gActiveBattler].encoreTimer == 0 - || gBattleMons[gActiveBattler].pp[gDisableStructs[gActiveBattler].encoredMovePos] == 0) - { - gDisableStructs[gActiveBattler].encoredMove = 0; - gDisableStructs[gActiveBattler].encoreTimer = 0; - BattleScriptExecute(BattleScript_EncoredNoMore); - effect++; - } - } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_LOCK_ON: // lock-on decrement - if (gStatuses3[gActiveBattler] & STATUS3_ALWAYS_HITS) - gStatuses3[gActiveBattler] -= STATUS3_ALWAYS_HITS_TURN(1); - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_CHARGE: // charge - if (gDisableStructs[gActiveBattler].chargeTimer && --gDisableStructs[gActiveBattler].chargeTimer == 0) - gStatuses3[gActiveBattler] &= ~STATUS3_CHARGED_UP; - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_TAUNT: // taunt - if (gDisableStructs[gActiveBattler].tauntTimer) - gDisableStructs[gActiveBattler].tauntTimer--; - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_YAWN: // yawn - if (gStatuses3[gActiveBattler] & STATUS3_YAWN) - { - gStatuses3[gActiveBattler] -= STATUS3_YAWN_TURN(1); - if (!(gStatuses3[gActiveBattler] & STATUS3_YAWN) && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY) - && gBattleMons[gActiveBattler].ability != ABILITY_VITAL_SPIRIT - && gBattleMons[gActiveBattler].ability != ABILITY_INSOMNIA && !UproarWakeUpCheck(gActiveBattler)) - { - CancelMultiTurnMoves(gActiveBattler); - gBattleMons[gActiveBattler].status1 |= STATUS1_SLEEP_TURN((Random() & 3) + 2); // 2-5 turns of sleep - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); - MarkBattlerForControllerExec(gActiveBattler); - gEffectBattler = gActiveBattler; - BattleScriptExecute(BattleScript_YawnMakesAsleep); - effect++; - } - } - gBattleStruct->turnEffectsTracker++; - break; - case ENDTURN_BATTLER_COUNT: // done - gBattleStruct->turnEffectsTracker = 0; - gBattleStruct->turnEffectsBattlerId++; - break; } - if (effect != 0) - return effect; + if (effect != 2) + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_THRASH: // thrash + // Don't decrement STATUS2_LOCK_CONFUSE if the target is held by Sky Drop + if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE && !(gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED)) + { + gBattleMons[gActiveBattler].status2 -= STATUS2_LOCK_CONFUSE_TURN(1); + if (WasUnableToUseMove(gActiveBattler)) + CancelMultiTurnMoves(gActiveBattler); + else if (!(gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE) + && (gBattleMons[gActiveBattler].status2 & STATUS2_MULTIPLETURNS)) + { + gBattleMons[gActiveBattler].status2 &= ~STATUS2_MULTIPLETURNS; + if (!(gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION)) + { + gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER; + SetMoveEffect(TRUE, 0); + if (gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION) + BattleScriptExecute(BattleScript_ThrashConfuses); + effect++; + } + } + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_FLINCH: // reset flinch + gBattleMons[gActiveBattler].status2 &= ~STATUS2_FLINCHED; + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_DISABLE: // disable + if (gDisableStructs[gActiveBattler].disableTimer != 0) + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gDisableStructs[gActiveBattler].disabledMove == gBattleMons[gActiveBattler].moves[i]) + break; + } + if (i == MAX_MON_MOVES) // pokemon does not have the disabled move anymore + { + gDisableStructs[gActiveBattler].disabledMove = 0; + gDisableStructs[gActiveBattler].disableTimer = 0; + } + else if (--gDisableStructs[gActiveBattler].disableTimer == 0) // disable ends + { + gDisableStructs[gActiveBattler].disabledMove = 0; + BattleScriptExecute(BattleScript_DisabledNoMore); + effect++; + } + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_ENCORE: // encore + if (gDisableStructs[gActiveBattler].encoreTimer != 0) + { + if (gBattleMons[gActiveBattler].moves[gDisableStructs[gActiveBattler].encoredMovePos] != gDisableStructs[gActiveBattler].encoredMove) // pokemon does not have the encored move anymore + { + gDisableStructs[gActiveBattler].encoredMove = 0; + gDisableStructs[gActiveBattler].encoreTimer = 0; + } + else if (--gDisableStructs[gActiveBattler].encoreTimer == 0 + || gBattleMons[gActiveBattler].pp[gDisableStructs[gActiveBattler].encoredMovePos] == 0) + { + gDisableStructs[gActiveBattler].encoredMove = 0; + gDisableStructs[gActiveBattler].encoreTimer = 0; + BattleScriptExecute(BattleScript_EncoredNoMore); + effect++; + } + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_LOCK_ON: // lock-on decrement + if (gStatuses3[gActiveBattler] & STATUS3_ALWAYS_HITS) + gStatuses3[gActiveBattler] -= STATUS3_ALWAYS_HITS_TURN(1); + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_CHARGE: // charge + if (gDisableStructs[gActiveBattler].chargeTimer && --gDisableStructs[gActiveBattler].chargeTimer == 0) + gStatuses3[gActiveBattler] &= ~STATUS3_CHARGED_UP; + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_TAUNT: // taunt + if (gDisableStructs[gActiveBattler].tauntTimer && --gDisableStructs[gActiveBattler].tauntTimer == 0) + { + BattleScriptExecute(BattleScript_BufferEndTurn); + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_YAWN: // yawn + if (gStatuses3[gActiveBattler] & STATUS3_YAWN) + { + u16 battlerAbility = GetBattlerAbility(gActiveBattler); + gStatuses3[gActiveBattler] -= STATUS3_YAWN_TURN(1); + if (!(gStatuses3[gActiveBattler] & STATUS3_YAWN) && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY) + && battlerAbility != ABILITY_VITAL_SPIRIT + && battlerAbility != ABILITY_INSOMNIA && !UproarWakeUpCheck(gActiveBattler) + && !IsLeafGuardProtected(gActiveBattler)) + { + CancelMultiTurnMoves(gActiveBattler); + gEffectBattler = gActiveBattler; + if (IsBattlerTerrainAffected(gActiveBattler, STATUS_FIELD_ELECTRIC_TERRAIN)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINPREVENTS_ELECTRIC; + BattleScriptExecute(BattleScript_TerrainPreventsEnd2); + } + else if (IsBattlerTerrainAffected(gActiveBattler, STATUS_FIELD_MISTY_TERRAIN)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINPREVENTS_MISTY; + BattleScriptExecute(BattleScript_TerrainPreventsEnd2); + } + else + { + gBattleMons[gActiveBattler].status1 |= (B_SLEEP_TURNS >= GEN_5) ? ((Random() % 3) + 2) : ((Random() % 4) + 3); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); + BattleScriptExecute(BattleScript_YawnMakesAsleep); + } + effect++; + } + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_LASER_FOCUS: + if (gStatuses3[gActiveBattler] & STATUS3_LASER_FOCUS) + { + if (gDisableStructs[gActiveBattler].laserFocusTimer == 0 || --gDisableStructs[gActiveBattler].laserFocusTimer == 0) + gStatuses3[gActiveBattler] &= ~STATUS3_LASER_FOCUS; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_EMBARGO: + if (gStatuses3[gActiveBattler] & STATUS3_EMBARGO) + { + if (gDisableStructs[gActiveBattler].embargoTimer == 0 || --gDisableStructs[gActiveBattler].embargoTimer == 0) + { + gStatuses3[gActiveBattler] &= ~STATUS3_EMBARGO; + BattleScriptExecute(BattleScript_EmbargoEndTurn); + effect++; + } + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_MAGNET_RISE: + if (gStatuses3[gActiveBattler] & STATUS3_MAGNET_RISE) + { + if (gDisableStructs[gActiveBattler].magnetRiseTimer == 0 || --gDisableStructs[gActiveBattler].magnetRiseTimer == 0) + { + gStatuses3[gActiveBattler] &= ~STATUS3_MAGNET_RISE; + BattleScriptExecute(BattleScript_BufferEndTurn); + PREPARE_STRING_BUFFER(gBattleTextBuff1, STRINGID_ELECTROMAGNETISM); + effect++; + } + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_TELEKINESIS: + if (gStatuses3[gActiveBattler] & STATUS3_TELEKINESIS) + { + if (gDisableStructs[gActiveBattler].telekinesisTimer == 0 || --gDisableStructs[gActiveBattler].telekinesisTimer == 0) + { + gStatuses3[gActiveBattler] &= ~STATUS3_TELEKINESIS; + BattleScriptExecute(BattleScript_TelekinesisEndTurn); + effect++; + } + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_HEALBLOCK: + if (gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK) + { + if (gDisableStructs[gActiveBattler].healBlockTimer == 0 || --gDisableStructs[gActiveBattler].healBlockTimer == 0) + { + gStatuses3[gActiveBattler] &= ~STATUS3_HEAL_BLOCK; + BattleScriptExecute(BattleScript_BufferEndTurn); + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_HEAL_BLOCK); + effect++; + } + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_ROOST: // Return flying type. + if (gBattleResources->flags->flags[gActiveBattler] & RESOURCE_FLAG_ROOST) + { + gBattleResources->flags->flags[gActiveBattler] &= ~RESOURCE_FLAG_ROOST; + gBattleMons[gActiveBattler].type1 = gBattleStruct->roostTypes[gActiveBattler][0]; + gBattleMons[gActiveBattler].type2 = gBattleStruct->roostTypes[gActiveBattler][1]; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_ELECTRIFY: + gStatuses4[gActiveBattler] &= ~STATUS4_ELECTRIFIED; + gBattleStruct->turnEffectsTracker++; + case ENDTURN_POWDER: + gBattleMons[gActiveBattler].status2 &= ~STATUS2_POWDER; + gBattleStruct->turnEffectsTracker++; + case ENDTURN_THROAT_CHOP: + if (gDisableStructs[gActiveBattler].throatChopTimer && --gDisableStructs[gActiveBattler].throatChopTimer == 0) + { + BattleScriptExecute(BattleScript_ThroatChopEndTurn); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_SLOW_START: + if (gDisableStructs[gActiveBattler].slowStartTimer + && --gDisableStructs[gActiveBattler].slowStartTimer == 0 + && ability == ABILITY_SLOW_START) + { + BattleScriptExecute(BattleScript_SlowStartEnds); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_PLASMA_FISTS: + for (i = 0; i < gBattlersCount; i++) + gStatuses4[i] &= ~STATUS4_PLASMA_FISTS; + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_BATTLER_COUNT: // done + gBattleStruct->turnEffectsTracker = 0; + gBattleStruct->turnEffectsBattlerId++; + break; } + + if (effect != 0) + return effect; + } - gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20); + gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_SKIP_DMG_TRACK); return 0; } bool8 HandleWishPerishSongOnTurnEnd(void) { - gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); + gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_SKIP_DMG_TRACK); switch (gBattleStruct->wishPerishSongState) { @@ -1790,24 +3234,21 @@ bool8 HandleWishPerishSongOnTurnEnd(void) gBattlerTarget = gActiveBattler; gBattlerAttacker = gWishFutureKnock.futureSightAttacker[gActiveBattler]; - gBattleMoveDamage = gWishFutureKnock.futureSightDmg[gActiveBattler]; gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF; + gCurrentMove = gWishFutureKnock.futureSightMove[gActiveBattler]; + SetTypeBeforeUsingMove(gCurrentMove, gActiveBattler); BattleScriptExecute(BattleScript_MonTookFutureAttack); if (gWishFutureKnock.futureSightCounter[gActiveBattler] == 0 && gWishFutureKnock.futureSightCounter[gActiveBattler ^ BIT_FLANK] == 0) { - gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)] &= ~(SIDE_STATUS_FUTUREATTACK); + gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)] &= ~SIDE_STATUS_FUTUREATTACK; } return TRUE; } } - // Why do I have to keep doing this to match? - { - u8 *state = &gBattleStruct->wishPerishSongState; - *state = 1; - gBattleStruct->wishPerishSongBattlerId = 0; - } + gBattleStruct->wishPerishSongState = 1; + gBattleStruct->wishPerishSongBattlerId = 0; // fall through case 1: while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount) @@ -1862,7 +3303,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void) break; } - gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20); + gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_SKIP_DMG_TRACK); return FALSE; } @@ -1908,8 +3349,27 @@ bool8 HandleFaintedMonActions(void) gBattleStruct->faintedActionsState = 3; else gBattleStruct->faintedActionsState = 1; + #if B_FAINT_SWITCH_IN >= GEN_4 + // Don't switch mons until all pokemon performed their actions or the battle's over. + if (gBattleOutcome == 0 + && !NoAliveMonsForEitherParty() + && gCurrentTurnActionNumber != gBattlersCount) + { + gAbsentBattlerFlags |= gBitTable[gBattlerFainted]; + return FALSE; + } + #endif break; case 3: + #if B_FAINT_SWITCH_IN >= GEN_4 + // Don't switch mons until all pokemon performed their actions or the battle's over. + if (gBattleOutcome == 0 + && !NoAliveMonsForEitherParty() + && gCurrentTurnActionNumber != gBattlersCount) + { + return FALSE; + } + #endif gBattleStruct->faintedActionsBattlerId = 0; gBattleStruct->faintedActionsState++; // fall through @@ -1934,7 +3394,7 @@ bool8 HandleFaintedMonActions(void) gBattleStruct->faintedActionsState = 4; break; case 6: - if (AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE1, 0, 0, 0, 0) || AbilityBattleEffects(ABILITYEFFECT_TRACE, 0, 0, 0, 0) || ItemBattleEffects(1, 0, TRUE) || AbilityBattleEffects(ABILITYEFFECT_FORECAST, 0, 0, 0, 0)) + if (ItemBattleEffects(ITEMEFFECT_NORMAL, 0, TRUE)) return TRUE; gBattleStruct->faintedActionsState++; break; @@ -1945,25 +3405,30 @@ bool8 HandleFaintedMonActions(void) return FALSE; } -void TryClearRageStatuses(void) +void TryClearRageAndFuryCutter(void) { s32 i; for (i = 0; i < gBattlersCount; i++) { if ((gBattleMons[i].status2 & STATUS2_RAGE) && gChosenMoveByBattler[i] != MOVE_RAGE) - gBattleMons[i].status2 &= ~(STATUS2_RAGE); + gBattleMons[i].status2 &= ~STATUS2_RAGE; + if (gDisableStructs[i].furyCutterCounter != 0 && gChosenMoveByBattler[i] != MOVE_FURY_CUTTER) + gDisableStructs[i].furyCutterCounter = 0; } } enum { CANCELLER_FLAGS, + CANCELLER_SKY_DROP, CANCELLER_ASLEEP, CANCELLER_FROZEN, CANCELLER_TRUANT, CANCELLER_RECHARGE, CANCELLER_FLINCH, CANCELLER_DISABLED, + CANCELLER_GRAVITY, + CANCELLER_HEAL_BLOCKED, CANCELLER_TAUNTED, CANCELLER_IMPRISONED, CANCELLER_CONFUSED, @@ -1971,7 +3436,13 @@ enum CANCELLER_IN_LOVE, CANCELLER_BIDE, CANCELLER_THAW, + CANCELLER_POWDER_MOVE, + CANCELLER_POWDER_STATUS, + CANCELLER_THROAT_CHOP, + CANCELLER_Z_MOVES, CANCELLER_END, + CANCELLER_PSYCHIC_TERRAIN, + CANCELLER_END2, }; u8 AtkCanceller_UnableToUseMove(void) @@ -1983,8 +3454,18 @@ u8 AtkCanceller_UnableToUseMove(void) switch (gBattleStruct->atkCancellerTracker) { case CANCELLER_FLAGS: // flags clear - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_DESTINY_BOND); - gStatuses3[gBattlerAttacker] &= ~(STATUS3_GRUDGE); + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_DESTINY_BOND; + gStatuses3[gBattlerAttacker] &= ~STATUS3_GRUDGE; + gBattleStruct->atkCancellerTracker++; + break; + case CANCELLER_SKY_DROP: + // If Pokemon is being held in Sky Drop + if (gStatuses3[gBattlerAttacker] & STATUS3_SKY_DROPPED) + { + gBattlescriptCurrInstr = BattleScript_MoveEnd; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } gBattleStruct->atkCancellerTracker++; break; case CANCELLER_ASLEEP: // check being asleep @@ -1992,8 +3473,8 @@ u8 AtkCanceller_UnableToUseMove(void) { if (UproarWakeUpCheck(gBattlerAttacker)) { - gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_SLEEP); - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP; + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP_UPROAR; gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; @@ -2002,17 +3483,17 @@ u8 AtkCanceller_UnableToUseMove(void) else { u8 toSub; - if (gBattleMons[gBattlerAttacker].ability == ABILITY_EARLY_BIRD) + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_EARLY_BIRD) toSub = 2; else toSub = 1; if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) < toSub) - gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_SLEEP); + gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP; else gBattleMons[gBattlerAttacker].status1 -= toSub; if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) { - if (gCurrentMove != MOVE_SNORE && gCurrentMove != MOVE_SLEEP_TALK) + if (gChosenMove != MOVE_SNORE && gChosenMove != MOVE_SLEEP_TALK) { gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; @@ -2021,7 +3502,7 @@ u8 AtkCanceller_UnableToUseMove(void) } else { - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP; gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; @@ -2032,24 +3513,16 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_FROZEN: // check being frozen - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE) + if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE && !(gBattleMoves[gCurrentMove].flags & FLAG_THAW_USER)) { if (Random() % 5) { - if (gBattleMoves[gCurrentMove].effect != EFFECT_THAW_HIT) // unfreezing via a move effect happens in case 13 - { - gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen; - gHitMarker |= HITMARKER_NO_ATTACKSTRING; - } - else - { - gBattleStruct->atkCancellerTracker++; - break; - } + gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen; + gHitMarker |= HITMARKER_NO_ATTACKSTRING; } else // unfreeze { - gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_FREEZE); + gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_FREEZE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DEFROSTED; @@ -2059,12 +3532,13 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_TRUANT: // truant - if (gBattleMons[gBattlerAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter) + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter) { CancelMultiTurnMoves(gBattlerAttacker); gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LOAFING; - gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; + gBattlerAbility = gBattlerAttacker; + gBattlescriptCurrInstr = BattleScript_TruantLoafingAround; gMoveResultFlags |= MOVE_RESULT_MISSED; effect = 1; } @@ -2073,7 +3547,7 @@ u8 AtkCanceller_UnableToUseMove(void) case CANCELLER_RECHARGE: // recharge if (gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE) { - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_RECHARGE); + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_RECHARGE; gDisableStructs[gBattlerAttacker].rechargeTimer = 0; CancelMultiTurnMoves(gBattlerAttacker); gBattlescriptCurrInstr = BattleScript_MoveUsedMustRecharge; @@ -2085,8 +3559,7 @@ u8 AtkCanceller_UnableToUseMove(void) case CANCELLER_FLINCH: // flinch if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FLINCHED) { - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_FLINCHED); - gProtectStructs[gBattlerAttacker].flinchImmobility = 1; + gProtectStructs[gBattlerAttacker].flinchImmobility = TRUE; CancelMultiTurnMoves(gBattlerAttacker); gBattlescriptCurrInstr = BattleScript_MoveUsedFlinched; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; @@ -2095,9 +3568,9 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_DISABLED: // disabled move - if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != 0) + if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE) { - gProtectStructs[gBattlerAttacker].usedDisabledMove = 1; + gProtectStructs[gBattlerAttacker].usedDisabledMove = TRUE; gBattleScripting.battler = gBattlerAttacker; CancelMultiTurnMoves(gBattlerAttacker); gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled; @@ -2106,10 +3579,34 @@ u8 AtkCanceller_UnableToUseMove(void) } gBattleStruct->atkCancellerTracker++; break; - case CANCELLER_TAUNTED: // taunt - if (gDisableStructs[gBattlerAttacker].tauntTimer && gBattleMoves[gCurrentMove].power == 0) + case CANCELLER_HEAL_BLOCKED: + if (gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove)) { - gProtectStructs[gBattlerAttacker].usedTauntedMove = 1; + gProtectStructs[gBattlerAttacker].usedHealBlockedMove = TRUE; + gBattleScripting.battler = gBattlerAttacker; + CancelMultiTurnMoves(gBattlerAttacker); + gBattlescriptCurrInstr = BattleScript_MoveUsedHealBlockPrevents; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } + gBattleStruct->atkCancellerTracker++; + break; + case CANCELLER_GRAVITY: + if (gFieldStatuses & STATUS_FIELD_GRAVITY && IsGravityPreventingMove(gCurrentMove)) + { + gProtectStructs[gBattlerAttacker].usedGravityPreventedMove = TRUE; + gBattleScripting.battler = gBattlerAttacker; + CancelMultiTurnMoves(gBattlerAttacker); + gBattlescriptCurrInstr = BattleScript_MoveUsedGravityPrevents; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } + gBattleStruct->atkCancellerTracker++; + break; + case CANCELLER_TAUNTED: // taunt + if (gDisableStructs[gBattlerAttacker].tauntTimer && IS_MOVE_STATUS(gCurrentMove)) + { + gProtectStructs[gBattlerAttacker].usedTauntedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); gBattlescriptCurrInstr = BattleScript_MoveUsedIsTaunted; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; @@ -2120,7 +3617,7 @@ u8 AtkCanceller_UnableToUseMove(void) case CANCELLER_IMPRISONED: // imprisoned if (GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove)) { - gProtectStructs[gBattlerAttacker].usedImprisonedMove = 1; + gProtectStructs[gBattlerAttacker].usedImprisonedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); gBattlescriptCurrInstr = BattleScript_MoveUsedIsImprisoned; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; @@ -2134,21 +3631,19 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleMons[gBattlerAttacker].status2 -= STATUS2_CONFUSION_TURN(1); if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION) { - if (Random() & 1) - { - // The MULTISTRING_CHOOSER is used here as a bool to signal - // to BattleScript_MoveUsedIsConfused whether or not damage was taken - gBattleCommunication[MULTISTRING_CHOOSER] = FALSE; - BattleScriptPushCursor(); - } - else // confusion dmg + if (Random() % ((B_CONFUSION_SELF_DMG_CHANCE >= GEN_7) ? 3 : 2) == 0) // confusion dmg { gBattleCommunication[MULTISTRING_CHOOSER] = TRUE; gBattlerTarget = gBattlerAttacker; - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerAttacker], MOVE_POUND, 0, 40, 0, gBattlerAttacker, gBattlerAttacker); - gProtectStructs[gBattlerAttacker].confusionSelfDmg = 1; + gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE); + gProtectStructs[gBattlerAttacker].confusionSelfDmg = TRUE; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = FALSE; + BattleScriptPushCursor(); + } gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfused; } else // snapped out of confusion @@ -2163,8 +3658,8 @@ u8 AtkCanceller_UnableToUseMove(void) case CANCELLER_PARALYSED: // paralysis if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && (Random() % 4) == 0) { - gProtectStructs[gBattlerAttacker].prlzImmobility = 1; - // This is removed in Emerald for some reason + gProtectStructs[gBattlerAttacker].prlzImmobility = TRUE; + // This is removed in FRLG and Emerald for some reason //CancelMultiTurnMoves(gBattlerAttacker); gBattlescriptCurrInstr = BattleScript_MoveUsedIsParalyzed; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; @@ -2184,7 +3679,7 @@ u8 AtkCanceller_UnableToUseMove(void) { BattleScriptPush(BattleScript_MoveUsedIsInLoveCantAttack); gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - gProtectStructs[gBattlerAttacker].loveImmobility = 1; + gProtectStructs[gBattlerAttacker].loveImmobility = TRUE; CancelMultiTurnMoves(gBattlerAttacker); } gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove; @@ -2202,15 +3697,15 @@ u8 AtkCanceller_UnableToUseMove(void) } else { - // This is removed in Emerald for some reason - //gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_MULTIPLETURNS); + // This is removed in FRLG and Emerald for some reason + //gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_MULTIPLETURNS; if (gTakenDmg[gBattlerAttacker]) { gCurrentMove = MOVE_BIDE; *bideDmg = gTakenDmg[gBattlerAttacker] * 2; gBattlerTarget = gTakenDmgByBattler[gBattlerAttacker]; if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - gBattlerTarget = GetMoveTarget(MOVE_BIDE, 1); + gBattlerTarget = GetMoveTarget(MOVE_BIDE, MOVE_TARGET_SELECTED + 1); gBattlescriptCurrInstr = BattleScript_BideAttack; } else @@ -2225,9 +3720,9 @@ u8 AtkCanceller_UnableToUseMove(void) case CANCELLER_THAW: // move thawing if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE) { - if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT) + if (!(gBattleMoves[gCurrentMove].effect == EFFECT_BURN_UP && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE))) { - gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_FREEZE); + gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_FREEZE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DEFROSTED_BY_MOVE; @@ -2236,46 +3731,175 @@ u8 AtkCanceller_UnableToUseMove(void) } gBattleStruct->atkCancellerTracker++; break; + case CANCELLER_POWDER_MOVE: + if ((gBattleMoves[gCurrentMove].flags & FLAG_POWDER) && (gBattlerAttacker != gBattlerTarget)) + { + if ((B_POWDER_GRASS >= GEN_6 && IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS)) + || GetBattlerAbility(gBattlerTarget) == ABILITY_OVERCOAT) + { + gBattlerAbility = gBattlerTarget; + effect = 1; + } + else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_SAFETY_GOGGLES) + { + RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_SAFETY_GOGGLES); + gLastUsedItem = gBattleMons[gBattlerTarget].item; + effect = 1; + } + + if (effect != 0) + gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect; + } + gBattleStruct->atkCancellerTracker++; + break; + case CANCELLER_POWDER_STATUS: + if (gBattleMons[gBattlerAttacker].status2 & STATUS2_POWDER) + { + u32 moveType; + GET_MOVE_TYPE(gCurrentMove, moveType); + if (moveType == TYPE_FIRE) + { + gProtectStructs[gBattlerAttacker].powderSelfDmg = TRUE; + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + gBattlescriptCurrInstr = BattleScript_MoveUsedPowder; + effect = 1; + } + } + gBattleStruct->atkCancellerTracker++; + break; + case CANCELLER_THROAT_CHOP: + if (gDisableStructs[gBattlerAttacker].throatChopTimer && gBattleMoves[gCurrentMove].flags & FLAG_SOUND) + { + gProtectStructs[gBattlerAttacker].usedThroatChopPreventedMove = TRUE; + CancelMultiTurnMoves(gBattlerAttacker); + gBattlescriptCurrInstr = BattleScript_MoveUsedIsThroatChopPrevented; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } + gBattleStruct->atkCancellerTracker++; + break; + case CANCELLER_Z_MOVES: + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] != MOVE_NONE) + { + //attacker has a queued z move + gBattleStruct->zmove.active = TRUE; + gBattleStruct->zmove.activeSplit = gBattleStruct->zmove.splits[gBattlerAttacker]; + 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 + + gBattleScripting.battler = gBattlerAttacker; + if (gBattleStruct->zmove.activeSplit == SPLIT_STATUS) + { + gBattleStruct->zmove.effect = gBattleMoves[gBattleStruct->zmove.baseMoves[gBattlerAttacker]].zMoveEffect; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ZMoveActivateStatus; + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ZMoveActivateDamaging; + } + effect = 1; + } + gBattleStruct->atkCancellerTracker++; + break; case CANCELLER_END: break; } - } while (gBattleStruct->atkCancellerTracker != CANCELLER_END && effect == 0); + } while (gBattleStruct->atkCancellerTracker != CANCELLER_END && gBattleStruct->atkCancellerTracker != CANCELLER_END2 && effect == 0); if (effect == 2) { gActiveBattler = gBattlerAttacker; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); } return effect; } +// After Protean Activation. +u8 AtkCanceller_UnableToUseMove2(void) +{ + u8 effect = 0; + + do + { + switch (gBattleStruct->atkCancellerTracker) + { + case CANCELLER_END: + gBattleStruct->atkCancellerTracker++; + case CANCELLER_PSYCHIC_TERRAIN: + if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN + && IsBattlerGrounded(gBattlerTarget) + && GetChosenMovePriority(gBattlerAttacker) > 0 + && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + { + CancelMultiTurnMoves(gBattlerAttacker); + gBattlescriptCurrInstr = BattleScript_MoveUsedPsychicTerrainPrevents; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } + gBattleStruct->atkCancellerTracker++; + break; + case CANCELLER_END2: + break; + } + + } while (gBattleStruct->atkCancellerTracker != CANCELLER_END2 && effect == 0); + + return effect; +} + bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) { + u8 playerId, flankId; struct Pokemon *party; - u8 id1, id2; s32 i; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) return FALSE; - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + if (BATTLE_TWO_VS_ONE_OPPONENT && GetBattlerSide(battler) == B_SIDE_OPPONENT) + { + flankId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + playerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + party = gEnemyParty; + + if (partyIdBattlerOn1 == PARTY_SIZE) + partyIdBattlerOn1 = gBattlerPartyIndexes[flankId]; + if (partyIdBattlerOn2 == PARTY_SIZE) + partyIdBattlerOn2 = gBattlerPartyIndexes[playerId]; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&party[i], MON_DATA_HP) != 0 + && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG + && i != partyIdBattlerOn1 && i != partyIdBattlerOn2 + && i != *(gBattleStruct->monToSwitchIntoId + flankId) && i != playerId[gBattleStruct->monToSwitchIntoId]) + break; + } + return (i == PARTY_SIZE); + } + else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { if (GetBattlerSide(battler) == B_SIDE_PLAYER) party = gPlayerParty; else party = gEnemyParty; - id1 = ((battler & BIT_FLANK) / 2); - for (i = id1 * 3; i < id1 * 3 + 3; i++) + playerId = ((battler & BIT_FLANK) / 2); + for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) break; } - return (i == id1 * 3 + 3); + return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE); } else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { @@ -2284,76 +3908,76 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) if (GetBattlerSide(battler) == B_SIDE_PLAYER) { party = gPlayerParty; - id2 = GetBattlerMultiplayerId(battler); - id1 = GetLinkTrainerFlankId(id2); + flankId = GetBattlerMultiplayerId(battler); + playerId = GetLinkTrainerFlankId(flankId); } else { party = gEnemyParty; if (battler == 1) - id1 = 0; + playerId = 0; else - id1 = 1; + playerId = 1; } } else { - id2 = GetBattlerMultiplayerId(battler); + flankId = GetBattlerMultiplayerId(battler); if (GetBattlerSide(battler) == B_SIDE_PLAYER) party = gPlayerParty; else party = gEnemyParty; - id1 = GetLinkTrainerFlankId(id2); + playerId = GetLinkTrainerFlankId(flankId); } - for (i = id1 * 3; i < id1 * 3 + 3; i++) + for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) break; } - return (i == id1 * 3 + 3); + return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE); } else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && GetBattlerSide(battler) == B_SIDE_OPPONENT) { party = gEnemyParty; if (battler == 1) - id1 = 0; + playerId = 0; else - id1 = 3; + playerId = MULTI_PARTY_SIZE; - for (i = id1; i < id1 + 3; i++) + for (i = playerId; i < playerId + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) break; } - return (i == id1 + 3); + return (i == playerId + 3); } else { if (GetBattlerSide(battler) == B_SIDE_OPPONENT) { - id2 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - id1 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + flankId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + playerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); party = gEnemyParty; } else { - id2 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - id1 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + flankId = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + playerId = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); party = gPlayerParty; } if (partyIdBattlerOn1 == PARTY_SIZE) - partyIdBattlerOn1 = gBattlerPartyIndexes[id2]; + partyIdBattlerOn1 = gBattlerPartyIndexes[flankId]; if (partyIdBattlerOn2 == PARTY_SIZE) - partyIdBattlerOn2 = gBattlerPartyIndexes[id1]; + partyIdBattlerOn2 = gBattlerPartyIndexes[playerId]; for (i = 0; i < PARTY_SIZE; i++) { @@ -2361,827 +3985,2072 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG && i != partyIdBattlerOn1 && i != partyIdBattlerOn2 - && i != *(gBattleStruct->monToSwitchIntoId + id2) && i != id1[gBattleStruct->monToSwitchIntoId]) + && i != *(gBattleStruct->monToSwitchIntoId + flankId) && i != playerId[gBattleStruct->monToSwitchIntoId]) break; } return (i == PARTY_SIZE); } } -enum +u8 TryWeatherFormChange(u8 battler) { - CASTFORM_NO_CHANGE, //0 - CASTFORM_TO_NORMAL, //1 - CASTFORM_TO_FIRE, //2 - CASTFORM_TO_WATER, //3 - CASTFORM_TO_ICE, //4 -}; + u8 ret = 0; + bool32 weatherEffect = WEATHER_HAS_EFFECT; + u16 holdEffect = GetBattlerHoldEffect(battler, TRUE); -u8 CastformDataTypeChange(u8 battler) -{ - u8 formChange = 0; - if (gBattleMons[battler].species != SPECIES_CASTFORM || gBattleMons[battler].ability != ABILITY_FORECAST || gBattleMons[battler].hp == 0) - return CASTFORM_NO_CHANGE; - if (!WEATHER_HAS_EFFECT && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL)) + if (gBattleMons[battler].species == SPECIES_CASTFORM) { - SET_BATTLER_TYPE(battler, TYPE_NORMAL); - return CASTFORM_TO_NORMAL; + if (GetBattlerAbility(battler) != ABILITY_FORECAST || gBattleMons[battler].hp == 0) + { + ret = 0; // No change + } + else if (!weatherEffect && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL)) + { + SET_BATTLER_TYPE(battler, TYPE_NORMAL); + ret = CASTFORM_NORMAL + 1; + } + else if (!weatherEffect) + { + ret = 0; // No change + } + else if (holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA || (!(gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SUN | B_WEATHER_HAIL)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))) + { + SET_BATTLER_TYPE(battler, TYPE_NORMAL); + ret = CASTFORM_NORMAL + 1; + } + else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && !IS_BATTLER_OF_TYPE(battler, TYPE_FIRE)) + { + SET_BATTLER_TYPE(battler, TYPE_FIRE); + ret = CASTFORM_FIRE + 1; + } + else if (gBattleWeather & B_WEATHER_RAIN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && !IS_BATTLER_OF_TYPE(battler, TYPE_WATER)) + { + SET_BATTLER_TYPE(battler, TYPE_WATER); + ret = CASTFORM_WATER + 1; + } + else if (gBattleWeather & B_WEATHER_HAIL && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE)) + { + SET_BATTLER_TYPE(battler, TYPE_ICE); + ret = CASTFORM_ICE + 1; + } } - if (!WEATHER_HAS_EFFECT) - return CASTFORM_NO_CHANGE; - if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL)) + else if (gBattleMons[battler].species == SPECIES_CHERRIM) { - SET_BATTLER_TYPE(battler, TYPE_NORMAL); - formChange = CASTFORM_TO_NORMAL; + if (GetBattlerAbility(battler) != ABILITY_FLOWER_GIFT || gBattleMons[battler].hp == 0) + ret = 0; // No change + else if (gBattleMonForms[battler] == 0 && weatherEffect && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && gBattleWeather & B_WEATHER_SUN) + ret = CHERRIM_SUNSHINE + 1; + else if (gBattleMonForms[battler] != 0 && (!weatherEffect || holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA || !(gBattleWeather & B_WEATHER_SUN))) + ret = CHERRIM_OVERCAST + 1; } - if (gBattleWeather & WEATHER_SUN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_FIRE)) - { - SET_BATTLER_TYPE(battler, TYPE_FIRE); - formChange = CASTFORM_TO_FIRE; - } - if (gBattleWeather & WEATHER_RAIN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_WATER)) - { - SET_BATTLER_TYPE(battler, TYPE_WATER); - formChange = CASTFORM_TO_WATER; - } - if (gBattleWeather & WEATHER_HAIL_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE)) - { - SET_BATTLER_TYPE(battler, TYPE_ICE); - formChange = CASTFORM_TO_ICE; - } - return formChange; + + return ret; } -// The largest function in the game, but even it could not save itself from decompiling. -u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveArg) +static const u16 sWeatherFlagsInfo[][3] = +{ + [ENUM_WEATHER_RAIN] = {B_WEATHER_RAIN_TEMPORARY, B_WEATHER_RAIN_PERMANENT, HOLD_EFFECT_DAMP_ROCK}, + [ENUM_WEATHER_RAIN_PRIMAL] = {B_WEATHER_RAIN_PRIMAL, B_WEATHER_RAIN_PRIMAL, HOLD_EFFECT_DAMP_ROCK}, + [ENUM_WEATHER_SUN] = {B_WEATHER_SUN_TEMPORARY, B_WEATHER_SUN_PERMANENT, HOLD_EFFECT_HEAT_ROCK}, + [ENUM_WEATHER_SUN_PRIMAL] = {B_WEATHER_SUN_PRIMAL, B_WEATHER_SUN_PRIMAL, HOLD_EFFECT_HEAT_ROCK}, + [ENUM_WEATHER_SANDSTORM] = {B_WEATHER_SANDSTORM_TEMPORARY, B_WEATHER_SANDSTORM_PERMANENT, HOLD_EFFECT_SMOOTH_ROCK}, + [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}, +}; + +bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility) +{ + u16 battlerAbility = GetBattlerAbility(battler); + + if (viaAbility && B_ABILITY_WEATHER <= GEN_5 + && !(gBattleWeather & sWeatherFlagsInfo[weatherEnumId][1])) + { + gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]); + return TRUE; + } + else if (gBattleWeather & B_WEATHER_PRIMAL_ANY + && battlerAbility != ABILITY_DESOLATE_LAND + && battlerAbility != ABILITY_PRIMORDIAL_SEA + && battlerAbility != ABILITY_DELTA_STREAM) + { + return FALSE; + } + else if (!(gBattleWeather & (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]))) + { + gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0]); + if (GetBattlerHoldEffect(battler, TRUE) == sWeatherFlagsInfo[weatherEnumId][2]) + gWishFutureKnock.weatherDuration = 8; + else + gWishFutureKnock.weatherDuration = 5; + + return TRUE; + } + + return FALSE; +} + +static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u8 *timer) +{ + if (!(gFieldStatuses & statusFlag)) + { + gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | EFFECT_ELECTRIC_TERRAIN | EFFECT_PSYCHIC_TERRAIN); + gFieldStatuses |= statusFlag; + + if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) + *timer = 8; + else + *timer = 5; + + gBattlerAttacker = gBattleScripting.battler = battler; + return TRUE; + } + + return FALSE; +} + +static bool32 ShouldChangeFormHpBased(u32 battler) +{ + // Ability, form >, form <=, hp divided + static const u16 forms[][4] = + { + {ABILITY_ZEN_MODE, SPECIES_DARMANITAN, SPECIES_DARMANITAN_ZEN_MODE, 2}, + {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, 2}, + {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, 2}, + {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, 2}, + {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, 2}, + {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, 2}, + {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, 2}, + {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, 2}, + {ABILITY_SCHOOLING, SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, 4}, + {ABILITY_GULP_MISSILE, SPECIES_CRAMORANT, SPECIES_CRAMORANT_GORGING, 2}, + {ABILITY_GULP_MISSILE, SPECIES_CRAMORANT, SPECIES_CRAMORANT_GULPING, 1}, + {ABILITY_ZEN_MODE, SPECIES_DARMANITAN_GALARIAN, SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, 2}, + }; + u32 i; + u16 battlerAbility = GetBattlerAbility(battler); + + if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + return FALSE; + + for (i = 0; i < ARRAY_COUNT(forms); i++) + { + if (battlerAbility == forms[i][0]) + { + if (gBattleMons[battler].species == forms[i][2] + && gBattleMons[battler].hp > gBattleMons[battler].maxHP / forms[i][3]) + { + gBattleMons[battler].species = forms[i][1]; + return TRUE; + } + if (gBattleMons[battler].species == forms[i][1] + && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / forms[i][3]) + { + gBattleMons[battler].species = forms[i][2]; + return TRUE; + } + } + } + return FALSE; +} + +static u8 ForewarnChooseMove(u32 battler) +{ + struct Forewarn { + u8 battlerId; + u8 power; + u16 moveId; + }; + u32 i, j, bestId, count; + struct Forewarn *data = malloc(sizeof(struct Forewarn) * MAX_BATTLERS_COUNT * MAX_MON_MOVES); + + // Put all moves + for (count = 0, i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (IsBattlerAlive(i) && GetBattlerSide(i) != GetBattlerSide(battler)) + { + for (j = 0; j < MAX_MON_MOVES; j++) + { + if (gBattleMons[i].moves[j] == MOVE_NONE) + continue; + data[count].moveId = gBattleMons[i].moves[j]; + data[count].battlerId = i; + switch (gBattleMoves[data[count].moveId].effect) + { + case EFFECT_OHKO: + data[count].power = 150; + break; + case EFFECT_COUNTER: + case EFFECT_MIRROR_COAT: + case EFFECT_METAL_BURST: + data[count].power = 120; + break; + default: + if (gBattleMoves[data[count].moveId].power == 1) + data[count].power = 80; + else + data[count].power = gBattleMoves[data[count].moveId].power; + break; + } + count++; + } + } + } + + for (bestId = 0, i = 1; i < count; i++) + { + if (data[i].power > data[bestId].power) + bestId = i; + else if (data[i].power == data[bestId].power && Random() & 1) + bestId = i; + } + + gBattlerTarget = data[bestId].battlerId; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, data[bestId].moveId) + RecordKnownMove(gBattlerTarget, data[bestId].moveId); + + free(data); +} + +u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 moveArg) { u8 effect = 0; - struct Pokemon *pokeAtk; - struct Pokemon *pokeDef; - u16 speciesAtk; - u16 speciesDef; - u32 pidAtk; - u32 pidDef; + u32 speciesAtk, speciesDef; + u32 pidAtk, pidDef; + u32 moveType, move; + u32 i, j; + + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + return 0; if (gBattlerAttacker >= gBattlersCount) gBattlerAttacker = battler; - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - pokeAtk = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]; + speciesAtk = gBattleMons[gBattlerAttacker].species; + pidAtk = gBattleMons[gBattlerAttacker].personality; + + speciesDef = gBattleMons[gBattlerTarget].species; + pidDef = gBattleMons[gBattlerTarget].personality; + + if (special) + gLastUsedAbility = special; else - pokeAtk = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]]; + gLastUsedAbility = GetBattlerAbility(battler); - if (gBattlerTarget >= gBattlersCount) - gBattlerTarget = battler; - - if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) - pokeDef = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]]; + if (moveArg) + move = moveArg; else - pokeDef = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]; + move = gCurrentMove; - speciesAtk = GetMonData(pokeAtk, MON_DATA_SPECIES); - pidAtk = GetMonData(pokeAtk, MON_DATA_PERSONALITY); + GET_MOVE_TYPE(move, moveType); - speciesDef = GetMonData(pokeDef, MON_DATA_SPECIES); - pidDef = GetMonData(pokeDef, MON_DATA_PERSONALITY); - - if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // Why isn't that check done at the beginning? + switch (caseID) { - u8 moveType; - s32 i; - u16 move; - u8 side; - u8 target1; - - if (special) - gLastUsedAbility = special; - else - gLastUsedAbility = gBattleMons[battler].ability; - - if (moveArg) - move = moveArg; - else - move = gCurrentMove; - - GET_MOVE_TYPE(move, moveType); - - switch (caseID) + case ABILITYEFFECT_ON_SWITCHIN: // 0 + gBattleScripting.battler = battler; + switch (gLastUsedAbility) { - case ABILITYEFFECT_ON_SWITCHIN: // 0 - if (gBattlerAttacker >= gBattlersCount) - gBattlerAttacker = battler; - switch (gLastUsedAbility) + case ABILITYEFFECT_SWITCH_IN_TERRAIN: + if (VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) { - case ABILITYEFFECT_SWITCH_IN_WEATHER: - if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) + u16 terrainFlags = VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY; // only works for status flag (1 << 15) + gFieldStatuses = terrainFlags | STATUS_FIELD_TERRAIN_PERMANENT; // terrain is permanent + switch (VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) { - switch (GetCurrentWeather()) + case STATUS_FIELD_ELECTRIC_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + break; + case STATUS_FIELD_MISTY_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + break; + case STATUS_FIELD_GRASSY_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + break; + case STATUS_FIELD_PSYCHIC_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + break; + } + + BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); + effect++; + } + #if B_THUNDERSTORM_TERRAIN == TRUE + else if (GetCurrentWeather() == WEATHER_RAIN_THUNDERSTORM && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)) + { + // overworld weather started rain, so just do electric terrain anim + gFieldStatuses = (STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); + effect++; + } + #endif + break; + case ABILITYEFFECT_SWITCH_IN_WEATHER: + if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) + { + switch (GetCurrentWeather()) + { + case WEATHER_RAIN: + case WEATHER_RAIN_THUNDERSTORM: + case WEATHER_DOWNPOUR: + if (!(gBattleWeather & B_WEATHER_RAIN)) { - case WEATHER_RAIN: - case WEATHER_RAIN_THUNDERSTORM: - case WEATHER_DOWNPOUR: - if (!(gBattleWeather & WEATHER_RAIN_ANY)) + gBattleWeather = (B_WEATHER_RAIN_TEMPORARY | B_WEATHER_RAIN_PERMANENT); + gBattleScripting.animArg1 = B_ANIM_RAIN_CONTINUES; + effect++; + } + break; + case WEATHER_SANDSTORM: + if (!(gBattleWeather & B_WEATHER_SANDSTORM)) + { + gBattleWeather = B_WEATHER_SANDSTORM; + gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES; + effect++; + } + break; + case WEATHER_DROUGHT: + if (!(gBattleWeather & B_WEATHER_SUN)) + { + gBattleWeather = (B_WEATHER_SUN_PERMANENT | B_WEATHER_SUN_TEMPORARY); + gBattleScripting.animArg1 = B_ANIM_SUN_CONTINUES; + effect++; + } + break; + } + } + if (effect != 0) + { + gBattleCommunication[MULTISTRING_CHOOSER] = GetCurrentWeather(); + BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts); + } + break; + case ABILITY_IMPOSTER: + if (IsBattlerAlive(BATTLE_OPPOSITE(battler)) + && !(gBattleMons[BATTLE_OPPOSITE(battler)].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE)) + && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + && !(gBattleStruct->illusion[BATTLE_OPPOSITE(battler)].on) + && !(gStatuses3[BATTLE_OPPOSITE(battler)] & STATUS3_SEMI_INVULNERABLE)) + { + gBattlerAttacker = battler; + gBattlerTarget = BATTLE_OPPOSITE(battler); + BattleScriptPushCursorAndCallback(BattleScript_ImposterActivates); + effect++; + } + break; + case ABILITY_MOLD_BREAKER: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_MOLDBREAKER; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_TERAVOLT: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_TERAVOLT; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_TURBOBLAZE: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_TURBOBLAZE; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_SLOW_START: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gDisableStructs[battler].slowStartTimer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_SLOWSTART; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_UNNERVE: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_UNNERVE; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_AS_ONE_ICE_RIDER: + case ABILITY_AS_ONE_SHADOW_RIDER: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_ASONE; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_ActivateAsOne); + effect++; + } + break; + case ABILITY_CURIOUS_MEDICINE: + if (!gSpecialStatuses[battler].switchInAbilityDone && IsDoubleBattle() + && IsBattlerAlive(BATTLE_PARTNER(battler)) && TryResetBattlerStatChanges(BATTLE_PARTNER(battler))) + { + u32 i; + gEffectBattler = BATTLE_PARTNER(battler); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_CURIOUS_MEDICINE; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_PASTEL_VEIL: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattlerTarget = battler; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_PASTEL_VEIL; + BattleScriptPushCursorAndCallback(BattleScript_PastelVeilActivates); + effect++; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + } + break; + case ABILITY_ANTICIPATION: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + u32 side = GetBattlerSide(battler); + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (IsBattlerAlive(i) && side != GetBattlerSide(i)) + { + for (j = 0; j < MAX_MON_MOVES; j++) { - gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT); - gBattleScripting.animArg1 = B_ANIM_RAIN_CONTINUES; - gBattleScripting.battler = battler; - effect++; + move = gBattleMons[i].moves[j]; + GET_MOVE_TYPE(move, moveType); + if (CalcTypeEffectivenessMultiplier(move, moveType, i, battler, FALSE) >= UQ_4_12(2.0)) + { + effect++; + break; + } } - break; - case WEATHER_SANDSTORM: - if (!(gBattleWeather & WEATHER_SANDSTORM_ANY)) - { - gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); - gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES; - gBattleScripting.battler = battler; - effect++; - } - break; - case WEATHER_DROUGHT: - if (!(gBattleWeather & WEATHER_SUN_ANY)) - { - gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); - gBattleScripting.animArg1 = B_ANIM_SUN_CONTINUES; - gBattleScripting.battler = battler; - effect++; - } - break; } } - if (effect) - { - gBattleCommunication[MULTISTRING_CHOOSER] = GetCurrentWeather(); - BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts); - } - break; - case ABILITY_DRIZZLE: - if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) - { - gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY); - BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates); - gBattleScripting.battler = battler; - effect++; - } - break; - case ABILITY_SAND_STREAM: - if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT)) - { - gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); - BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates); - gBattleScripting.battler = battler; - effect++; - } - break; - case ABILITY_DROUGHT: - if (!(gBattleWeather & WEATHER_SUN_PERMANENT)) - { - gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); - BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates); - gBattleScripting.battler = battler; - effect++; - } - break; - case ABILITY_INTIMIDATE: - if (!(gSpecialStatuses[battler].intimidatedMon)) - { - gStatuses3[battler] |= STATUS3_INTIMIDATE_POKES; - gSpecialStatuses[battler].intimidatedMon = 1; - } - break; - case ABILITY_FORECAST: - effect = CastformDataTypeChange(battler); + if (effect != 0) { - BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - gBattleScripting.battler = battler; - *(&gBattleStruct->formToChangeInto) = effect - 1; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_ANTICIPATION; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); } - break; - case ABILITY_TRACE: - if (!(gSpecialStatuses[battler].traced)) - { - gStatuses3[battler] |= STATUS3_TRACE; - gSpecialStatuses[battler].traced = 1; - } - break; - case ABILITY_CLOUD_NINE: - case ABILITY_AIR_LOCK: - { - // that's a weird choice for a variable, why not use i or battler? - for (target1 = 0; target1 < gBattlersCount; target1++) - { - effect = CastformDataTypeChange(target1); - if (effect != 0) - { - BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - gBattleScripting.battler = target1; - *(&gBattleStruct->formToChangeInto) = effect - 1; - break; - } - } - } - break; } break; - case ABILITYEFFECT_ENDTURN: // 1 - if (gBattleMons[battler].hp != 0) + case ABILITY_FRISK: + if (!gSpecialStatuses[battler].switchInAbilityDone) { - gBattlerAttacker = battler; - switch (gLastUsedAbility) - { - case ABILITY_RAIN_DISH: - if (WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) - && gBattleMons[battler].maxHP > gBattleMons[battler].hp) - { - gLastUsedAbility = ABILITY_RAIN_DISH; // why - BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates); - gBattleMoveDamage = gBattleMons[battler].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - effect++; - } - break; - case ABILITY_SHED_SKIN: - if ((gBattleMons[battler].status1 & STATUS1_ANY) && (Random() % 3) == 0) - { - if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON)) - StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - if (gBattleMons[battler].status1 & STATUS1_SLEEP) - StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - if (gBattleMons[battler].status1 & STATUS1_BURN) - StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - if (gBattleMons[battler].status1 & STATUS1_FREEZE) - StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - gBattleMons[battler].status1 = 0; - gBattleMons[battler].status2 &= ~(STATUS2_NIGHTMARE); // fix nightmare glitch - gBattleScripting.battler = gActiveBattler = battler; - BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates); - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); - MarkBattlerForControllerExec(gActiveBattler); - effect++; - } - break; - case ABILITY_SPEED_BOOST: - if (gBattleMons[battler].statStages[STAT_SPEED] < MAX_STAT_STAGE && gDisableStructs[battler].isFirstTurn != 2) - { - gBattleMons[battler].statStages[STAT_SPEED]++; - gBattleScripting.animArg1 = 14 + STAT_SPEED; - gBattleScripting.animArg2 = 0; - BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates); - gBattleScripting.battler = battler; - effect++; - } - break; - case ABILITY_TRUANT: - gDisableStructs[gBattlerAttacker].truantCounter ^= 1; - break; - } + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_FriskActivates); // Try activate + effect++; } - break; - case ABILITYEFFECT_MOVES_BLOCK: // 2 - if (gLastUsedAbility == ABILITY_SOUNDPROOF) + return effect; // Note: It returns effect as to not record the ability if Frisk does not activate. + case ABILITY_FOREWARN: + if (!gSpecialStatuses[battler].switchInAbilityDone) { - for (i = 0; sSoundMovesTable[i] != 0xFFFF; i++) - { - if (sSoundMovesTable[i] == move) - break; - } - if (sSoundMovesTable[i] != 0xFFFF) - { - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) - gHitMarker |= HITMARKER_NO_PPDEDUCT; - gBattlescriptCurrInstr = BattleScript_SoundproofProtected; - effect = 1; - } + ForewarnChooseMove(battler); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_FOREWARN; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; } break; - case ABILITYEFFECT_ABSORBING: // 3 - if (move) + case ABILITY_DOWNLOAD: + if (!gSpecialStatuses[battler].switchInAbilityDone) { - switch (gLastUsedAbility) + u32 statId, opposingBattler; + u32 opposingDef = 0, opposingSpDef = 0; + + opposingBattler = BATTLE_OPPOSITE(battler); + for (i = 0; i < 2; opposingBattler ^= BIT_FLANK, i++) { - case ABILITY_VOLT_ABSORB: - if (moveType == TYPE_ELECTRIC && gBattleMoves[move].power != 0) + if (IsBattlerAlive(opposingBattler)) { - if (gProtectStructs[gBattlerAttacker].notFirstStrike) - gBattlescriptCurrInstr = BattleScript_MoveHPDrain; - else - gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss; - - effect = 1; + opposingDef += gBattleMons[opposingBattler].defense + * gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_DEF]][0] + / gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_DEF]][1]; + opposingSpDef += gBattleMons[opposingBattler].spDefense + * gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_SPDEF]][0] + / gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_SPDEF]][1]; } - break; - case ABILITY_WATER_ABSORB: - if (moveType == TYPE_WATER && gBattleMoves[move].power != 0) - { - if (gProtectStructs[gBattlerAttacker].notFirstStrike) - gBattlescriptCurrInstr = BattleScript_MoveHPDrain; - else - gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss; - - effect = 1; - } - break; - case ABILITY_FLASH_FIRE: - if (moveType == TYPE_FIRE && !(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 = 2; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_NO_BOOST; - if (gProtectStructs[gBattlerAttacker].notFirstStrike) - gBattlescriptCurrInstr = BattleScript_FlashFireBoost; - else - gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - - effect = 2; - } - } - break; } - if (effect == 1) + + if (opposingDef < opposingSpDef) + statId = STAT_ATK; + else + statId = STAT_SPATK; + + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + + if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) { - if (gBattleMons[battler].maxHP == gBattleMons[battler].hp) - { - if ((gProtectStructs[gBattlerAttacker].notFirstStrike)) - gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless; - else - gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless_PPLoss; - } - else - { - gBattleMoveDamage = gBattleMons[battler].maxHP / 4; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - } + gBattleMons[battler].statStages[statId]++; + SET_STATCHANGER(statId, 1, FALSE); + gBattlerAttacker = battler; + PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); + BattleScriptPushCursorAndCallback(BattleScript_AttackerAbilityStatRaiseEnd3); + effect++; } } break; - case ABILITYEFFECT_ON_DAMAGE: // Contact abilities and Color Change + case ABILITY_PRESSURE: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_PRESSURE; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_DARK_AURA: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_DARKAURA; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_FAIRY_AURA: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_FAIRYAURA; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_AURA_BREAK: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_AURABREAK; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_COMATOSE: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_COMATOSE; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_SCREEN_CLEANER: + if (!gSpecialStatuses[battler].switchInAbilityDone && TryRemoveScreens(battler)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_SCREENCLEANER; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + break; + case ABILITY_DRIZZLE: + if (TryChangeBattleWeather(battler, ENUM_WEATHER_RAIN, TRUE)) + { + BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates); + effect++; + } + else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone) + { + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3); + effect++; + } + break; + case ABILITY_SAND_STREAM: + if (TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE)) + { + BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates); + effect++; + } + else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone) + { + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3); + effect++; + } + break; + case ABILITY_DROUGHT: + if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN, TRUE)) + { + BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates); + effect++; + } + else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone) + { + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3); + effect++; + } + break; + case ABILITY_SNOW_WARNING: + if (TryChangeBattleWeather(battler, ENUM_WEATHER_HAIL, TRUE)) + { + BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivates); + effect++; + } + else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone) + { + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3); + effect++; + } + break; + case ABILITY_ELECTRIC_SURGE: + if (TryChangeBattleTerrain(battler, STATUS_FIELD_ELECTRIC_TERRAIN, &gFieldTimers.terrainTimer)) + { + BattleScriptPushCursorAndCallback(BattleScript_ElectricSurgeActivates); + effect++; + } + break; + case ABILITY_GRASSY_SURGE: + if (TryChangeBattleTerrain(battler, STATUS_FIELD_GRASSY_TERRAIN, &gFieldTimers.terrainTimer)) + { + BattleScriptPushCursorAndCallback(BattleScript_GrassySurgeActivates); + effect++; + } + break; + case ABILITY_MISTY_SURGE: + if (TryChangeBattleTerrain(battler, STATUS_FIELD_MISTY_TERRAIN, &gFieldTimers.terrainTimer)) + { + BattleScriptPushCursorAndCallback(BattleScript_MistySurgeActivates); + effect++; + } + break; + case ABILITY_PSYCHIC_SURGE: + if (TryChangeBattleTerrain(battler, STATUS_FIELD_PSYCHIC_TERRAIN, &gFieldTimers.terrainTimer)) + { + BattleScriptPushCursorAndCallback(BattleScript_PsychicSurgeActivates); + effect++; + } + break; + case ABILITY_INTIMIDATE: + if (!(gSpecialStatuses[battler].intimidatedMon)) + { + gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_INTIMIDATED; + gSpecialStatuses[battler].intimidatedMon = TRUE; + } + break; + case ABILITY_FORECAST: + case ABILITY_FLOWER_GIFT: + effect = TryWeatherFormChange(battler); + if (effect != 0) + { + BattleScriptPushCursorAndCallback(BattleScript_CastformChange); + *(&gBattleStruct->formToChangeInto) = effect - 1; + } + break; + case ABILITY_TRACE: + if (!(gSpecialStatuses[battler].traced)) + { + gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_TRACED; + gSpecialStatuses[battler].traced = TRUE; + } + break; + case ABILITY_CLOUD_NINE: + case ABILITY_AIR_LOCK: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_AnnounceAirLockCloudNine); + effect++; + } + break; + case ABILITY_SCHOOLING: + if (gBattleMons[battler].level < 20) + break; + case ABILITY_SHIELDS_DOWN: + if (ShouldChangeFormHpBased(battler)) + { + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); + effect++; + } + break; + case ABILITY_INTREPID_SWORD: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + SET_STATCHANGER(STAT_ATK, 1, FALSE); + BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); + effect++; + } + break; + case ABILITY_DAUNTLESS_SHIELD: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + SET_STATCHANGER(STAT_DEF, 1, FALSE); + BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); + effect++; + } + break; + case ABILITY_DESOLATE_LAND: + if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN_PRIMAL, TRUE)) + { + BattleScriptPushCursorAndCallback(BattleScript_DesolateLandActivates); + effect++; + } + break; + case ABILITY_PRIMORDIAL_SEA: + if (TryChangeBattleWeather(battler, ENUM_WEATHER_RAIN_PRIMAL, TRUE)) + { + BattleScriptPushCursorAndCallback(BattleScript_PrimordialSeaActivates); + effect++; + } + break; + case ABILITY_DELTA_STREAM: + if (TryChangeBattleWeather(battler, ENUM_WEATHER_STRONG_WINDS, TRUE)) + { + BattleScriptPushCursorAndCallback(BattleScript_DeltaStreamActivates); + effect++; + } + break; + case ABILITY_MIMICRY: + if (gBattleMons[battler].hp != 0 && gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + TryToApplyMimicry(battler, FALSE); + effect++; + } + break; + } + break; + case ABILITYEFFECT_ENDTURN: // 1 + if (gBattleMons[battler].hp != 0) + { + gBattlerAttacker = battler; switch (gLastUsedAbility) { - case ABILITY_COLOR_CHANGE: - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && move != MOVE_STRUGGLE - && gBattleMoves[move].power != 0 - && TARGET_TURN_DAMAGED - && !IS_BATTLER_OF_TYPE(battler, moveType) - && gBattleMons[battler].hp != 0) + case ABILITY_HARVEST: + if ((IsBattlerWeatherAffected(battler, B_WEATHER_SUN) || Random() % 2 == 0) + && gBattleMons[battler].item == ITEM_NONE + && gBattleStruct->changedItems[battler] == ITEM_NONE // Will not inherit an item + && ItemId_GetPocket(GetUsedHeldItem(battler)) == POCKET_BERRIES) { - SET_BATTLER_TYPE(battler, moveType); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ColorChangeActivates; + gLastUsedItem = GetUsedHeldItem(battler); + BattleScriptPushCursorAndCallback(BattleScript_HarvestActivates); effect++; } break; - case ABILITY_ROUGH_SKIN: - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && gBattleMons[gBattlerAttacker].hp != 0 - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && TARGET_TURN_DAMAGED - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + case ABILITY_DRY_SKIN: + if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) + goto SOLAR_POWER_HP_DROP; + // Dry Skin works similarly to Rain Dish in Rain + case ABILITY_RAIN_DISH: + if (IsBattlerWeatherAffected(battler, B_WEATHER_RAIN) + && !BATTLER_MAX_HP(battler) + && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; + BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates); + gBattleMoveDamage = gBattleMons[battler].maxHP / (gLastUsedAbility == ABILITY_RAIN_DISH ? 16 : 8); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_RoughSkinActivates; + gBattleMoveDamage *= -1; effect++; } break; - case ABILITY_EFFECT_SPORE: - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && gBattleMons[gBattlerAttacker].hp != 0 - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && TARGET_TURN_DAMAGED - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 10) == 0) + case ABILITY_HYDRATION: + if (IsBattlerWeatherAffected(battler, B_WEATHER_RAIN) + && gBattleMons[battler].status1 & STATUS1_ANY) { - do - { - gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; - } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); - - if (gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_BURN) - gBattleCommunication[MOVE_EFFECT_BYTE] += 2; // 5 MOVE_EFFECT_PARALYSIS - - gBattleCommunication[MOVE_EFFECT_BYTE] += MOVE_EFFECT_AFFECTS_USER; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; + goto ABILITY_HEAL_MON_STATUS; } break; - case ABILITY_POISON_POINT: - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && gBattleMons[gBattlerAttacker].hp != 0 - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && TARGET_TURN_DAMAGED - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 3) == 0) + case ABILITY_SHED_SKIN: + if ((gBattleMons[battler].status1 & STATUS1_ANY) && (Random() % 3) == 0) { - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITY_STATIC: - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && gBattleMons[gBattlerAttacker].hp != 0 - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && TARGET_TURN_DAMAGED - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITY_FLAME_BODY: - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && gBattleMons[gBattlerAttacker].hp != 0 - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && TARGET_TURN_DAMAGED - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITY_CUTE_CHARM: - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && gBattleMons[gBattlerAttacker].hp != 0 - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && TARGET_TURN_DAMAGED - && gBattleMons[gBattlerTarget].hp != 0 - && (Random() % 3) == 0 - && gBattleMons[gBattlerAttacker].ability != ABILITY_OBLIVIOUS - && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) - && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) - && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != MON_GENDERLESS - && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != MON_GENDERLESS) - { - gBattleMons[gBattlerAttacker].status2 |= STATUS2_INFATUATED_WITH(gBattlerTarget); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; - effect++; - } - break; - } - break; - case ABILITYEFFECT_IMMUNITY: // 5 - for (battler = 0; battler < gBattlersCount; battler++) - { - switch (gBattleMons[battler].ability) - { - case ABILITY_IMMUNITY: - if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER)) - { + ABILITY_HEAL_MON_STATUS: + if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON)) StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - effect = 1; - } - break; - case ABILITY_OWN_TEMPO: - if (gBattleMons[battler].status2 & STATUS2_CONFUSION) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); - effect = 2; - } - break; - case ABILITY_LIMBER: - if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - effect = 1; - } - break; - case ABILITY_INSOMNIA: - case ABILITY_VITAL_SPIRIT: if (gBattleMons[battler].status1 & STATUS1_SLEEP) - { - gBattleMons[battler].status2 &= ~(STATUS2_NIGHTMARE); StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - effect = 1; - } - break; - case ABILITY_WATER_VEIL: + if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) + StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); if (gBattleMons[battler].status1 & STATUS1_BURN) - { StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - effect = 1; - } - break; - case ABILITY_MAGMA_ARMOR: if (gBattleMons[battler].status1 & STATUS1_FREEZE) - { StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - effect = 1; - } - break; - case ABILITY_OBLIVIOUS: - if (gBattleMons[battler].status2 & STATUS2_INFATUATION) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); - effect = 3; - } - break; - } - if (effect) - { - switch (effect) - { - case 1: // status cleared - gBattleMons[battler].status1 = 0; - break; - case 2: // get rid of confusion - gBattleMons[battler].status2 &= ~(STATUS2_CONFUSION); - break; - case 3: // get rid of infatuation - gBattleMons[battler].status2 &= ~(STATUS2_INFATUATION); - break; - } - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; - gBattleScripting.battler = battler; - gActiveBattler = battler; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); + gBattleMons[battler].status1 = 0; + gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; + gBattleScripting.battler = gActiveBattler = battler; + BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); MarkBattlerForControllerExec(gActiveBattler); - return effect; + effect++; } - } - break; - case ABILITYEFFECT_FORECAST: // 6 - for (battler = 0; battler < gBattlersCount; battler++) - { - if (gBattleMons[battler].ability == ABILITY_FORECAST) + break; + case ABILITY_SPEED_BOOST: + if (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) && gDisableStructs[battler].isFirstTurn != 2) { - effect = CastformDataTypeChange(battler); - if (effect) + gBattleMons[battler].statStages[STAT_SPEED]++; + gBattleScripting.animArg1 = 14 + STAT_SPEED; + gBattleScripting.animArg2 = 0; + BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates); + gBattleScripting.battler = battler; + effect++; + } + break; + case ABILITY_MOODY: + if (gDisableStructs[battler].isFirstTurn != 2) + { + u32 validToRaise = 0, validToLower = 0; + u32 statsNum = (B_MOODY_ACC_EVASION != GEN_8) ? NUM_BATTLE_STATS : NUM_STATS; + + for (i = STAT_ATK; i < statsNum; i++) { - BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - gBattleScripting.battler = battler; - *(&gBattleStruct->formToChangeInto) = effect - 1; - return effect; + if (CompareStat(battler, i, MIN_STAT_STAGE, CMP_GREATER_THAN)) + validToLower |= gBitTable[i]; + if (CompareStat(battler, i, MAX_STAT_STAGE, CMP_LESS_THAN)) + validToRaise |= gBitTable[i]; + } + + if (validToLower != 0 || validToRaise != 0) // Can lower one stat, or can raise one stat + { + gBattleScripting.statChanger = gBattleScripting.savedStatChanger = 0; // for raising and lowering stat respectively + if (validToRaise != 0) // Find stat to raise + { + do + { + i = (Random() % statsNum) + STAT_ATK; + } while (!(validToRaise & gBitTable[i])); + SET_STATCHANGER(i, 2, FALSE); + validToLower &= ~(gBitTable[i]); // Can't lower the same stat as raising. + } + if (validToLower != 0) // Find stat to lower + { + do + { + i = (Random() % statsNum) + STAT_ATK; + } while (!(validToLower & gBitTable[i])); + SET_STATCHANGER2(gBattleScripting.savedStatChanger, i, 1, TRUE); + } + BattleScriptPushCursorAndCallback(BattleScript_MoodyActivates); + effect++; } } - } - break; - case ABILITYEFFECT_SYNCHRONIZE: // 7 - if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) - { - gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); - gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); - if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) - gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; - - gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchronizeMoveEffect + MOVE_EFFECT_AFFECTS_USER; - gBattleScripting.battler = gBattlerTarget; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8 - if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) - { - gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); - gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); - if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) - gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; - - gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchronizeMoveEffect; - gBattleScripting.battler = gBattlerAttacker; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITYEFFECT_INTIMIDATE1: // 9 - for (i = 0; i < gBattlersCount; i++) - { - if (gBattleMons[i].ability == ABILITY_INTIMIDATE && gStatuses3[i] & STATUS3_INTIMIDATE_POKES) + break; + case ABILITY_TRUANT: + gDisableStructs[gBattlerAttacker].truantCounter ^= 1; + break; + case ABILITY_BAD_DREAMS: + if (gBattleMons[battler].status1 & STATUS1_SLEEP + || gBattleMons[BATTLE_OPPOSITE(battler)].status1 & STATUS1_SLEEP + || GetBattlerAbility(battler) == ABILITY_COMATOSE + || GetBattlerAbility(BATTLE_OPPOSITE(battler)) == ABILITY_COMATOSE) { - gLastUsedAbility = ABILITY_INTIMIDATE; - gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); - BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivatesEnd3); - gBattleStruct->intimidateBattler = i; + BattleScriptPushCursorAndCallback(BattleScript_BadDreamsActivates); effect++; - break; } - } - break; - case ABILITYEFFECT_TRACE: // 11 - for (i = 0; i < gBattlersCount; i++) - { - if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE)) + break; + SOLAR_POWER_HP_DROP: + case ABILITY_SOLAR_POWER: + if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) { - u8 target2; - side = (GetBattlerPosition(i) ^ BIT_SIDE) & BIT_SIDE; // side of the opposing pokemon - target1 = GetBattlerAtPosition(side); - target2 = GetBattlerAtPosition(side + BIT_FLANK); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + BattleScriptPushCursorAndCallback(BattleScript_SolarPowerActivates); + gBattleMoveDamage = gBattleMons[battler].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + effect++; + } + break; + case ABILITY_HEALER: + gBattleScripting.battler = BATTLE_PARTNER(battler); + if (IsBattlerAlive(gBattleScripting.battler) + && gBattleMons[gBattleScripting.battler].status1 & STATUS1_ANY + && (Random() % 100) < 30) + { + BattleScriptPushCursorAndCallback(BattleScript_HealerActivates); + effect++; + } + break; + case ABILITY_SCHOOLING: + if (gBattleMons[battler].level < 20) + break; + case ABILITY_ZEN_MODE: + case ABILITY_SHIELDS_DOWN: + if ((effect = ShouldChangeFormHpBased(battler))) + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); + break; + case ABILITY_POWER_CONSTRUCT: + if ((gBattleMons[battler].species == SPECIES_ZYGARDE || gBattleMons[battler].species == SPECIES_ZYGARDE_10) + && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 2) + { + gBattleStruct->changedSpecies[gBattlerPartyIndexes[battler]] = gBattleMons[battler].species; + gBattleMons[battler].species = SPECIES_ZYGARDE_COMPLETE; + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); + effect++; + } + break; + case ABILITY_BALL_FETCH: + if (gBattleMons[battler].item == ITEM_NONE + && gBattleResults.catchAttempts[gLastUsedBall - ITEM_ULTRA_BALL] >= 1 + && !gHasFetchedBall) + { + gBattleScripting.battler = battler; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedBall); + MarkBattlerForControllerExec(battler); + gHasFetchedBall = TRUE; + gLastUsedItem = gLastUsedBall; + BattleScriptPushCursorAndCallback(BattleScript_BallFetch); + effect++; + } + break; + case ABILITY_HUNGER_SWITCH: + if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) + { + if (gBattleMons[battler].species == SPECIES_MORPEKO) { - if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0 - && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) - { - gActiveBattler = GetBattlerAtPosition(((Random() & 1) * 2) | side); - gBattleMons[i].ability = gBattleMons[gActiveBattler].ability; - gLastUsedAbility = gBattleMons[gActiveBattler].ability; - effect++; - } - else if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0) - { - gActiveBattler = target1; - gBattleMons[i].ability = gBattleMons[gActiveBattler].ability; - gLastUsedAbility = gBattleMons[gActiveBattler].ability; - effect++; - } - else if (gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) - { - gActiveBattler = target2; - gBattleMons[i].ability = gBattleMons[gActiveBattler].ability; - gLastUsedAbility = gBattleMons[gActiveBattler].ability; - effect++; - } + gBattleMons[battler].species = SPECIES_MORPEKO_HANGRY; + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup); + } + else if (gBattleMons[battler].species == SPECIES_MORPEKO_HANGRY) + { + gBattleMons[battler].species = SPECIES_MORPEKO; + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup); + } + effect++; + } + break; + } + } + break; + case ABILITYEFFECT_MOVES_BLOCK: // 2 + { + u16 moveTarget = GetBattlerMoveTargetType(battler, move); + + if ((gLastUsedAbility == ABILITY_SOUNDPROOF && gBattleMoves[move].flags & FLAG_SOUND && !(moveTarget & MOVE_TARGET_USER)) + || (gLastUsedAbility == ABILITY_BULLETPROOF && gBattleMoves[move].flags & FLAG_BALLISTIC)) + { + if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) + gHitMarker |= HITMARKER_NO_PPDEDUCT; + gBattlescriptCurrInstr = BattleScript_SoundproofProtected; + effect = 1; + } + else if ((((gLastUsedAbility == ABILITY_DAZZLING || gLastUsedAbility == ABILITY_QUEENLY_MAJESTY + || (IsBattlerAlive(battler ^= BIT_FLANK) + && ((GetBattlerAbility(battler) == ABILITY_DAZZLING) || GetBattlerAbility(battler) == ABILITY_QUEENLY_MAJESTY))) + )) + && GetChosenMovePriority(gBattlerAttacker) > 0 + && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(battler)) + { + if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) + gHitMarker |= HITMARKER_NO_PPDEDUCT; + gBattlescriptCurrInstr = BattleScript_DazzlingProtected; + effect = 1; + } + else if (BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) + && !(IS_MOVE_STATUS(move) && GetBattlerAbility(gBattlerTarget) == ABILITY_MAGIC_BOUNCE)) + { + 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; + effect = 1; + } + break; + } + case ABILITYEFFECT_ABSORBING: // 3 + if (move != MOVE_NONE) + { + u8 statId; + switch (gLastUsedAbility) + { + case ABILITY_VOLT_ABSORB: + if (moveType == TYPE_ELECTRIC) + effect = 1; + break; + case ABILITY_WATER_ABSORB: + case ABILITY_DRY_SKIN: + if (moveType == TYPE_WATER) + effect = 1; + break; + case ABILITY_MOTOR_DRIVE: + if (moveType == TYPE_ELECTRIC) + effect = 2, statId = STAT_SPEED; + break; + case ABILITY_LIGHTNING_ROD: + if (moveType == TYPE_ELECTRIC) + effect = 2, statId = STAT_SPATK; + break; + case ABILITY_STORM_DRAIN: + if (moveType == TYPE_WATER) + effect = 2, statId = STAT_SPATK; + break; + case ABILITY_SAP_SIPPER: + if (moveType == TYPE_GRASS) + effect = 2, statId = STAT_ATK; + break; + case ABILITY_FLASH_FIRE: + if (moveType == TYPE_FIRE && !((gBattleMons[battler].status1 & STATUS1_FREEZE) && B_FLASH_FIRE_FROZEN <= GEN_4)) + { + 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 { - gActiveBattler = target1; - if (gBattleMons[target1].ability && gBattleMons[target1].hp) - { - gBattleMons[i].ability = gBattleMons[target1].ability; - gLastUsedAbility = gBattleMons[target1].ability; - effect++; - } - } - if (effect) - { - BattleScriptPushCursorAndCallback(BattleScript_TraceActivates); - gStatuses3[i] &= ~(STATUS3_TRACE); - gBattleScripting.battler = i; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_NO_BOOST; + if (gProtectStructs[gBattlerAttacker].notFirstStrike) + gBattlescriptCurrInstr = BattleScript_FlashFireBoost; + else + gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]) - PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility) - break; + effect = 3; } } + break; + } + + if (effect == 1) // Drain Hp ability. + { +#if B_HEAL_BLOCKING >= GEN_5 + if (BATTLER_MAX_HP(battler) || gStatuses3[battler] & STATUS3_HEAL_BLOCK) +#else + if (BATTLER_MAX_HP(battler)) +#endif + { + if ((gProtectStructs[gBattlerAttacker].notFirstStrike)) + gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless; + else + gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless_PPLoss; + } + else + { + if (gProtectStructs[gBattlerAttacker].notFirstStrike) + gBattlescriptCurrInstr = BattleScript_MoveHPDrain; + else + gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss; + + gBattleMoveDamage = gBattleMons[battler].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + } + } + else if (effect == 2) // Boost Stat ability; + { + if (!CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + if ((gProtectStructs[gBattlerAttacker].notFirstStrike)) + gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless; + else + gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless_PPLoss; + } + else + { + if (gProtectStructs[gBattlerAttacker].notFirstStrike) + gBattlescriptCurrInstr = BattleScript_MoveStatDrain; + else + gBattlescriptCurrInstr = BattleScript_MoveStatDrain_PPLoss; + + SET_STATCHANGER(statId, 1, FALSE); + gBattleMons[battler].statStages[statId]++; + PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); + } + } + } + break; + case ABILITYEFFECT_MOVE_END: // Think contact abilities. + switch (gLastUsedAbility) + { + case ABILITY_JUSTIFIED: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + && moveType == TYPE_DARK + && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + SET_STATCHANGER(STAT_ATK, 1, FALSE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; + effect++; } break; - case ABILITYEFFECT_INTIMIDATE2: // 10 - for (i = 0; i < gBattlersCount; i++) + case ABILITY_RATTLED: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + && (moveType == TYPE_DARK || moveType == TYPE_BUG || moveType == TYPE_GHOST) + && CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)) { - if (gBattleMons[i].ability == ABILITY_INTIMIDATE && (gStatuses3[i] & STATUS3_INTIMIDATE_POKES)) + SET_STATCHANGER(STAT_SPEED, 1, FALSE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; + effect++; + } + break; + case ABILITY_WATER_COMPACTION: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + && moveType == TYPE_WATER + && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + SET_STATCHANGER(STAT_DEF, 2, FALSE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; + effect++; + } + break; + case ABILITY_STAMINA: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + SET_STATCHANGER(STAT_DEF, 1, FALSE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; + effect++; + } + break; + case ABILITY_BERSERK: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + // Had more than half of hp before, now has less + && gBattleStruct->hpBefore[battler] > gBattleMons[battler].maxHP / 2 + && gBattleMons[battler].hp < gBattleMons[battler].maxHP / 2 + && (gMultiHitCounter == 0 || gMultiHitCounter == 1) + && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove)) + && CompareStat(battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + SET_STATCHANGER(STAT_SPATK, 1, FALSE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; + effect++; + } + break; + case ABILITY_EMERGENCY_EXIT: + case ABILITY_WIMP_OUT: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + // Had more than half of hp before, now has less + && gBattleStruct->hpBefore[battler] > gBattleMons[battler].maxHP / 2 + && gBattleMons[battler].hp < gBattleMons[battler].maxHP / 2 + && (gMultiHitCounter == 0 || gMultiHitCounter == 1) + && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove)) + && (CanBattlerSwitch(battler) || !(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) + && !(gBattleTypeFlags & BATTLE_TYPE_ARENA) + && CountUsablePartyMons(battler) > 0 + // Not currently held by Sky Drop + && !(gStatuses3[battler] & STATUS3_SKY_DROPPED)) + { + gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_EMERGENCY_EXIT; + effect++; + } + break; + case ABILITY_WEAK_ARMOR: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + && IS_MOVE_PHYSICAL(gCurrentMove) + && (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) // Don't activate if speed cannot be raised + || CompareStat(battler, STAT_DEF, MIN_STAT_STAGE, CMP_GREATER_THAN))) // Don't activate if defense cannot be lowered + { + if (gBattleMoves[gCurrentMove].effect == EFFECT_HIT_ESCAPE && CanBattlerSwitch(gBattlerAttacker)) + gProtectStructs[battler].disableEjectPack = TRUE; // Set flag for target + + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_WeakArmorActivates; + effect++; + } + break; + case ABILITY_CURSED_BODY: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && gDisableStructs[gBattlerAttacker].disabledMove == MOVE_NONE + && IsBattlerAlive(gBattlerAttacker) + && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL) + && gBattleMons[gBattlerAttacker].pp[gChosenMovePos] != 0 + && (Random() % 3) == 0) + { + gDisableStructs[gBattlerAttacker].disabledMove = gChosenMove; + gDisableStructs[gBattlerAttacker].disableTimer = 4; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gChosenMove); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_CursedBodyActivates; + effect++; + } + break; + case ABILITY_MUMMY: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && IsBattlerAlive(gBattlerAttacker) + && TARGET_TURN_DAMAGED + && (IsMoveMakingContact(move, gBattlerAttacker))) + { + switch (gBattleMons[gBattlerAttacker].ability) { - gLastUsedAbility = ABILITY_INTIMIDATE; - gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); + case ABILITY_MUMMY: + case ABILITY_BATTLE_BOND: + case ABILITY_COMATOSE: + case ABILITY_DISGUISE: + case ABILITY_MULTITYPE: + case ABILITY_POWER_CONSTRUCT: + case ABILITY_RKS_SYSTEM: + case ABILITY_SCHOOLING: + case ABILITY_SHIELDS_DOWN: + case ABILITY_STANCE_CHANGE: + break; + default: + gLastUsedAbility = gBattleMons[gBattlerAttacker].ability = ABILITY_MUMMY; BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_IntimidateActivates; - gBattleStruct->intimidateBattler = i; + gBattlescriptCurrInstr = BattleScript_MummyActivates; effect++; break; } } break; - case ABILITYEFFECT_CHECK_OTHER_SIDE: // 12 - side = GetBattlerSide(battler); - for (i = 0; i < gBattlersCount; i++) + case ABILITY_WANDERING_SPIRIT: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && IsBattlerAlive(gBattlerAttacker) + && TARGET_TURN_DAMAGED + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) { - if (GetBattlerSide(i) != side && gBattleMons[i].ability == ability) + switch (gBattleMons[gBattlerAttacker].ability) { - gLastUsedAbility = ability; - effect = i + 1; + case ABILITY_DISGUISE: + case ABILITY_FLOWER_GIFT: + case ABILITY_GULP_MISSILE: + case ABILITY_HUNGER_SWITCH: + case ABILITY_ICE_FACE: + case ABILITY_ILLUSION: + case ABILITY_IMPOSTER: + case ABILITY_RECEIVER: + case ABILITY_RKS_SYSTEM: + case ABILITY_SCHOOLING: + case ABILITY_STANCE_CHANGE: + case ABILITY_WONDER_GUARD: + case ABILITY_ZEN_MODE: + break; + default: + gLastUsedAbility = gBattleMons[gBattlerAttacker].ability; + gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability; + gBattleMons[gBattlerTarget].ability = gLastUsedAbility; + RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability); + RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_WanderingSpiritActivates; + effect++; + break; } } break; - case ABILITYEFFECT_CHECK_BATTLER_SIDE: // 13 - side = GetBattlerSide(battler); - for (i = 0; i < gBattlersCount; i++) + case ABILITY_ANGER_POINT: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gIsCriticalHit + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) { - if (GetBattlerSide(i) == side && gBattleMons[i].ability == ability) + SET_STATCHANGER(STAT_ATK, MAX_STAT_STAGE - gBattleMons[battler].statStages[STAT_ATK], FALSE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetsStatWasMaxedOut; + effect++; + } + break; + case ABILITY_COLOR_CHANGE: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && move != MOVE_STRUGGLE + && gBattleMoves[move].power != 0 + && TARGET_TURN_DAMAGED + && !IS_BATTLER_OF_TYPE(battler, moveType) + && gBattleMons[battler].hp != 0) + { + SET_BATTLER_TYPE(battler, moveType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ColorChangeActivates; + effect++; + } + break; + case ABILITY_GOOEY: + case ABILITY_TANGLING_HAIR: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerAttacker].hp != 0 + && (CompareStat(gBattlerAttacker, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN) || GetBattlerAbility(gBattlerAttacker) == ABILITY_MIRROR_ARMOR) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && IsMoveMakingContact(move, gBattlerAttacker)) + { + SET_STATCHANGER(STAT_SPEED, 1, TRUE); + gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_GooeyActivates; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + case ABILITY_ROUGH_SKIN: + case ABILITY_IRON_BARBS: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerAttacker].hp != 0 + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && IsMoveMakingContact(move, gBattlerAttacker)) + { + #if B_ROUGH_SKIN_DMG >= GEN_4 + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8; + #else + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; + #endif + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_RoughSkinActivates; + effect++; + } + break; + case ABILITY_AFTERMATH: + if (!IsAbilityOnField(ABILITY_DAMP) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerTarget].hp == 0 + && IsBattlerAlive(gBattlerAttacker) + && IsMoveMakingContact(move, gBattlerAttacker)) + { + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AftermathDmg; + effect++; + } + break; + case ABILITY_INNARDS_OUT: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerTarget].hp == 0 + && IsBattlerAlive(gBattlerAttacker)) + { + gBattleMoveDamage = gSpecialStatuses[gBattlerTarget].dmg; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AftermathDmg; + effect++; + } + break; + case ABILITY_EFFECT_SPORE: + if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GRASS) + && GetBattlerAbility(gBattlerAttacker) != ABILITY_OVERCOAT + && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES) + { + i = Random() % 3; + if (i == 0) + goto POISON_POINT; + if (i == 1) + goto STATIC; + // Sleep + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerAttacker].hp != 0 + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && CanSleep(gBattlerAttacker) + && IsMoveMakingContact(move, gBattlerAttacker) + && (Random() % 3) == 0) { - gLastUsedAbility = ability; - effect = i + 1; + gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_SLEEP; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; } } break; - case ABILITYEFFECT_FIELD_SPORT: // 14 - switch (gLastUsedAbility) + POISON_POINT: + case ABILITY_POISON_POINT: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerAttacker].hp != 0 + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && CanBePoisoned(gBattlerAttacker, gBattlerTarget) + && IsMoveMakingContact(move, gBattlerAttacker) + && (Random() % 3) == 0) { - case 0xFD: - for (i = 0; i < gBattlersCount; i++) + gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + STATIC: + case ABILITY_STATIC: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerAttacker].hp != 0 + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && CanBeParalyzed(gBattlerAttacker) + && IsMoveMakingContact(move, gBattlerAttacker) + && (Random() % 3) == 0) + { + gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + case ABILITY_FLAME_BODY: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerAttacker].hp != 0 + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && (IsMoveMakingContact(move, gBattlerAttacker)) + && TARGET_TURN_DAMAGED + && CanBeBurned(gBattlerAttacker) + && (Random() % 3) == 0) + { + gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + case ABILITY_CUTE_CHARM: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerAttacker].hp != 0 + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && (IsMoveMakingContact(move, gBattlerAttacker)) + && TARGET_TURN_DAMAGED + && gBattleMons[gBattlerTarget].hp != 0 + && (Random() % 3) == 0 + && GetBattlerAbility(gBattlerAttacker) != ABILITY_OBLIVIOUS + && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL) + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) + && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != MON_GENDERLESS + && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != MON_GENDERLESS) + { + gBattleMons[gBattlerAttacker].status2 |= STATUS2_INFATUATED_WITH(gBattlerTarget); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; + effect++; + } + break; + case ABILITY_ILLUSION: + if (gBattleStruct->illusion[gBattlerTarget].on && !gBattleStruct->illusion[gBattlerTarget].broken && TARGET_TURN_DAMAGED) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_IllusionOff; + effect++; + } + break; + case ABILITY_COTTON_DOWN: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerAttacker].hp != 0 + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED) + { + gEffectBattler = gBattlerTarget; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_CottonDownActivates; + effect++; + } + break; + case ABILITY_STEAM_ENGINE: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + && CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) + && (moveType == TYPE_FIRE || moveType == TYPE_WATER)) + { + SET_STATCHANGER(STAT_SPEED, 6, FALSE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; + effect++; + } + break; + case ABILITY_SAND_SPIT: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && !(gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT)) + { + if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT) { - if (gStatuses3[i] & STATUS3_MUDSPORT) - effect = i + 1; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BlockedByPrimalWeatherRet; + effect++; } - break; - case 0xFE: - for (i = 0; i < gBattlersCount; i++) + else if (TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE)) { - if (gStatuses3[i] & STATUS3_WATERSPORT) - effect = i + 1; + gBattleScripting.battler = gActiveBattler = battler; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SandSpitActivates; + effect++; } - break; - default: - for (i = 0; i < gBattlersCount; i++) + } + break; + case ABILITY_PERISH_BODY: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + && (IsMoveMakingContact(move, gBattlerAttacker)) + && !(gStatuses3[gBattlerAttacker] & STATUS3_PERISH_SONG)) + { + if (!(gStatuses3[battler] & STATUS3_PERISH_SONG)) { - if (gBattleMons[i].ability == ability) + gStatuses3[battler] |= STATUS3_PERISH_SONG; + gDisableStructs[battler].perishSongTimer = 3; + gDisableStructs[battler].perishSongTimerStartValue = 3; + } + gStatuses3[gBattlerAttacker] |= STATUS3_PERISH_SONG; + gDisableStructs[gBattlerAttacker].perishSongTimer = 3; + gDisableStructs[gBattlerAttacker].perishSongTimerStartValue = 3; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_PerishBodyActivates; + effect++; + } + break; + case ABILITY_GULP_MISSILE: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler)) + { + if (gBattleMons[gBattlerTarget].species == SPECIES_CRAMORANT_GORGING) + { + gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerTarget]] = gBattleMons[gBattlerTarget].species; + gBattleMons[gBattlerTarget].species = SPECIES_CRAMORANT; + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { - gLastUsedAbility = ability; - effect = i + 1; + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; } - } - break; - } - break; - case ABILITYEFFECT_CHECK_ON_FIELD: // 19 - for (i = 0; i < gBattlersCount; i++) - { - if (gBattleMons[i].ability == ability && gBattleMons[i].hp != 0) - { - gLastUsedAbility = ability; - effect = i + 1; - } - } - break; - case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER: // 15 - for (i = 0; i < gBattlersCount; i++) - { - if (gBattleMons[i].ability == ability && i != battler) - { - gLastUsedAbility = ability; - effect = i + 1; - } - } - break; - case ABILITYEFFECT_COUNT_OTHER_SIDE: // 16 - side = GetBattlerSide(battler); - for (i = 0; i < gBattlersCount; i++) - { - if (GetBattlerSide(i) != side && gBattleMons[i].ability == ability) - { - gLastUsedAbility = ability; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_GulpMissileGorging; effect++; } - } - break; - case ABILITYEFFECT_COUNT_BATTLER_SIDE: // 17 - side = GetBattlerSide(battler); - for (i = 0; i < gBattlersCount; i++) - { - if (GetBattlerSide(i) == side && gBattleMons[i].ability == ability) + else if (gBattleMons[gBattlerTarget].species == SPECIES_CRAMORANT_GULPING) { - gLastUsedAbility = ability; - effect++; - } - } - break; - case ABILITYEFFECT_COUNT_ON_FIELD: // 18 - for (i = 0; i < gBattlersCount; i++) - { - if (gBattleMons[i].ability == ability && i != battler) - { - gLastUsedAbility = ability; + gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerTarget]] = gBattleMons[gBattlerTarget].species; + gBattleMons[gBattlerTarget].species = SPECIES_CRAMORANT; + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) + { + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + } + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_GulpMissileGulping; effect++; } } break; } + break; + case ABILITYEFFECT_MOVE_END_ATTACKER: // Same as above, but for attacker + switch (gLastUsedAbility) + { + case ABILITY_POISON_TOUCH: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerTarget].hp != 0 + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && CanBePoisoned(gBattlerAttacker, gBattlerTarget) + && IsMoveMakingContact(move, gBattlerAttacker) + && TARGET_TURN_DAMAGED // Need to actually hit the target + && (Random() % 3) == 0) + { + gBattleScripting.moveEffect = MOVE_EFFECT_POISON; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + case ABILITY_STENCH: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerTarget].hp != 0 + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && (Random() % 10) == 0 + && !IS_MOVE_STATUS(move) + && !sMovesNotAffectedByStench[gCurrentMove]) + { + gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH; + BattleScriptPushCursor(); + SetMoveEffect(FALSE, 0); + BattleScriptPop(); + effect++; + } + break; + case ABILITY_GULP_MISSILE: + if (((gCurrentMove == MOVE_SURF && TARGET_TURN_DAMAGED) || gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER) + && (effect = ShouldChangeFormHpBased(gBattlerAttacker))) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AttackerFormChange; + effect++; + } + break; + } + break; + case ABILITYEFFECT_MOVE_END_OTHER: // Abilities that activate on *another* battler's moveend: Dancer, Soul-Heart, Receiver, Symbiosis + switch (GetBattlerAbility(battler)) + { + case ABILITY_DANCER: + if (IsBattlerAlive(battler) + && (gBattleMoves[gCurrentMove].flags & FLAG_DANCE) + && !gSpecialStatuses[battler].dancerUsedMove + && gBattlerAttacker != battler) + { + // Set bit and save Dancer mon's original target + gSpecialStatuses[battler].dancerUsedMove = TRUE; + gSpecialStatuses[battler].dancerOriginalTarget = *(gBattleStruct->moveTarget + battler) | 0x4; + gBattleStruct->atkCancellerTracker = 0; + gBattlerAttacker = gBattlerAbility = battler; + gCalledMove = gCurrentMove; - if (effect && caseID < ABILITYEFFECT_CHECK_OTHER_SIDE && gLastUsedAbility != 0xFF) - RecordAbilityBattle(battler, gLastUsedAbility); + // Set the target to the original target of the mon that first used a Dance move + gBattlerTarget = gBattleScripting.savedBattler & 0x3; + + // Make sure that the target isn't an ally - if it is, target the original user + if (GetBattlerSide(gBattlerTarget) == GetBattlerSide(gBattlerAttacker)) + gBattlerTarget = (gBattleScripting.savedBattler & 0xF0) >> 4; + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; + BattleScriptExecute(BattleScript_DancerActivates); + effect++; + } + break; + } + break; + case ABILITYEFFECT_IMMUNITY: // 5 + for (battler = 0; battler < gBattlersCount; battler++) + { + switch (GetBattlerAbility(battler)) + { + case ABILITY_IMMUNITY: + if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER)) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); + effect = 1; + } + break; + case ABILITY_OWN_TEMPO: + if (gBattleMons[battler].status2 & STATUS2_CONFUSION) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); + effect = 2; + } + break; + case ABILITY_LIMBER: + if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); + effect = 1; + } + break; + case ABILITY_INSOMNIA: + case ABILITY_VITAL_SPIRIT: + if (gBattleMons[battler].status1 & STATUS1_SLEEP) + { + gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; + StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); + effect = 1; + } + break; + case ABILITY_WATER_VEIL: + case ABILITY_WATER_BUBBLE: + if (gBattleMons[battler].status1 & STATUS1_BURN) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); + effect = 1; + } + break; + case ABILITY_MAGMA_ARMOR: + if (gBattleMons[battler].status1 & STATUS1_FREEZE) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); + effect = 1; + } + break; + case ABILITY_OBLIVIOUS: + if (gBattleMons[battler].status2 & STATUS2_INFATUATION) + effect = 3; + else if (gDisableStructs[battler].tauntTimer != 0) + effect = 4; + break; + } + if (effect != 0) + { + switch (effect) + { + case 1: // status cleared + gBattleMons[battler].status1 = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; + break; + case 2: // get rid of confusion + gBattleMons[battler].status2 &= ~STATUS2_CONFUSION; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; + break; + case 3: // get rid of infatuation + gBattleMons[battler].status2 &= ~STATUS2_INFATUATION; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BattlerGotOverItsInfatuation; + break; + case 4: // get rid of taunt + gDisableStructs[battler].tauntTimer = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BattlerShookOffTaunt; + break; + } + + gBattleScripting.battler = gActiveBattler = gBattlerAbility = battler; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); + return effect; + } + } + break; + case ABILITYEFFECT_FORECAST: // 6 + for (battler = 0; battler < gBattlersCount; battler++) + { + u16 battlerAbility = GetBattlerAbility(battler); + if (battlerAbility == ABILITY_FORECAST || battlerAbility == ABILITY_FLOWER_GIFT) + { + effect = TryWeatherFormChange(battler); + if (effect != 0) + { + BattleScriptPushCursorAndCallback(BattleScript_CastformChange); + gBattleScripting.battler = battler; + gBattleStruct->formToChangeInto = effect - 1; + return effect; + } + } + } + break; + case ABILITYEFFECT_SYNCHRONIZE: + if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) + { + gHitMarker &= ~HITMARKER_SYNCHRONISE_EFFECT; + + if (!(gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY)) + { + gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); + #if B_SYNCHRONIZE_TOXIC < GEN_5 + if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) + gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; + #endif + + gBattleScripting.moveEffect = gBattleStruct->synchronizeMoveEffect + MOVE_EFFECT_AFFECTS_USER; + gBattleScripting.battler = gBattlerAbility = gBattlerTarget; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, ABILITY_SYNCHRONIZE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } + break; + case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8 + if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) + { + gHitMarker &= ~HITMARKER_SYNCHRONISE_EFFECT; + + if (!(gBattleMons[gBattlerTarget].status1 & STATUS1_ANY)) + { + gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); + if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) + gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; + + gBattleScripting.moveEffect = gBattleStruct->synchronizeMoveEffect; + gBattleScripting.battler = gBattlerAbility = gBattlerAttacker; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, ABILITY_SYNCHRONIZE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } + break; + case ABILITYEFFECT_INTIMIDATE1: + case ABILITYEFFECT_INTIMIDATE2: + for (i = 0; i < gBattlersCount; i++) + { + if (GetBattlerAbility(i) == ABILITY_INTIMIDATE && gBattleResources->flags->flags[i] & RESOURCE_FLAG_INTIMIDATED + && (IsBattlerAlive(BATTLE_OPPOSITE(i)) || IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(i))))) // At least one opposing mon has to be alive. + { + gBattleResources->flags->flags[i] &= ~RESOURCE_FLAG_INTIMIDATED; + gLastUsedAbility = ABILITY_INTIMIDATE; + if (caseID == ABILITYEFFECT_INTIMIDATE1) + { + BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivatesEnd3); + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_IntimidateActivates; + } + battler = gBattlerAbility = gBattleStruct->intimidateBattler = i; + effect++; + break; + } + } + break; + case ABILITYEFFECT_TRACE1: + case ABILITYEFFECT_TRACE2: + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleMons[i].ability == ABILITY_TRACE && (gBattleResources->flags->flags[i] & RESOURCE_FLAG_TRACED)) + { + u8 side = (GetBattlerPosition(i) ^ BIT_SIDE) & BIT_SIDE; // side of the opposing pokemon + u8 target1 = GetBattlerAtPosition(side); + u8 target2 = GetBattlerAtPosition(side + BIT_FLANK); + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0 + && !sAbilitiesNotTraced[gBattleMons[target2].ability] && gBattleMons[target2].hp != 0) + gActiveBattler = GetBattlerAtPosition(((Random() & 1) * 2) | side), effect++; + else if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0) + gActiveBattler = target1, effect++; + else if (!sAbilitiesNotTraced[gBattleMons[target2].ability] && gBattleMons[target2].hp != 0) + gActiveBattler = target2, effect++; + } + else + { + if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0) + gActiveBattler = target1, effect++; + } + + if (effect != 0) + { + if (caseID == ABILITYEFFECT_TRACE1) + { + BattleScriptPushCursorAndCallback(BattleScript_TraceActivatesEnd3); + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TraceActivates; + } + gBattleResources->flags->flags[i] &= ~RESOURCE_FLAG_TRACED; + gBattleStruct->tracedAbility[i] = gLastUsedAbility = gBattleMons[gActiveBattler].ability; + battler = gBattlerAbility = gBattleScripting.battler = i; + + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]) + PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility) + break; + } + } + } + break; + case ABILITYEFFECT_NEUTRALIZINGGAS: + // Prints message only. separate from ABILITYEFFECT_ON_SWITCHIN bc activates before entry hazards + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleMons[i].ability == ABILITY_NEUTRALIZING_GAS && !(gBattleResources->flags->flags[i] & RESOURCE_FLAG_NEUTRALIZING_GAS)) + { + gBattleResources->flags->flags[i] |= RESOURCE_FLAG_NEUTRALIZING_GAS; + gBattlerAbility = i; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_NEUTRALIZING_GAS; + BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); + effect++; + } + + if (effect != 0) + break; + } + break; + case ABILITYEFFECT_FIELD_SPORT: + switch (gLastUsedAbility) + { + case ABILITYEFFECT_MUD_SPORT: + for (i = 0; i < gBattlersCount; i++) + { + if (gStatuses4[i] & STATUS4_MUD_SPORT) + effect = i + 1; + } + break; + case ABILITYEFFECT_WATER_SPORT: + for (i = 0; i < gBattlersCount; i++) + { + if (gStatuses4[i] & STATUS4_WATER_SPORT) + effect = i + 1; + } + break; + default: + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleMons[i].ability == ability) + { + gLastUsedAbility = ability; + effect = i + 1; + } + } + break; + } + break; } + if (effect && gLastUsedAbility != 0xFF) + RecordAbilityBattle(battler, gLastUsedAbility); + if (effect && caseID <= ABILITYEFFECT_MOVE_END) + gBattlerAbility = battler; + return effect; } +bool32 IsNeutralizingGasBannedAbility(u32 ability) +{ + switch (ability) + { + case ABILITY_MULTITYPE: + case ABILITY_ZEN_MODE: + case ABILITY_STANCE_CHANGE: + case ABILITY_POWER_CONSTRUCT: + case ABILITY_SCHOOLING: + case ABILITY_RKS_SYSTEM: + case ABILITY_SHIELDS_DOWN: + case ABILITY_COMATOSE: + case ABILITY_DISGUISE: + case ABILITY_GULP_MISSILE: + case ABILITY_ICE_FACE: + case ABILITY_AS_ONE_ICE_RIDER: + case ABILITY_AS_ONE_SHADOW_RIDER: + return TRUE; + default: + return FALSE; + } +} + +bool32 IsNeutralizingGasOnField(void) +{ + u32 i; + + for (i = 0; i < gBattlersCount; i++) + { + if (IsBattlerAlive(i) && gBattleMons[i].ability == ABILITY_NEUTRALIZING_GAS && !(gStatuses3[i] & STATUS3_GASTRO_ACID)) + return TRUE; + } + + return FALSE; +} + +u32 GetBattlerAbility(u8 battlerId) +{ + if (gStatuses3[battlerId] & STATUS3_GASTRO_ACID) + return ABILITY_NONE; + + if (IsNeutralizingGasOnField() && !IsNeutralizingGasBannedAbility(gBattleMons[battlerId].ability)) + return ABILITY_NONE; + + if ((((gBattleMons[gBattlerAttacker].ability == ABILITY_MOLD_BREAKER + || gBattleMons[gBattlerAttacker].ability == ABILITY_TERAVOLT + || gBattleMons[gBattlerAttacker].ability == ABILITY_TURBOBLAZE) + && !(gStatuses3[gBattlerAttacker] & STATUS3_GASTRO_ACID)) + || gBattleMoves[gCurrentMove].flags & FLAG_TARGET_ABILITY_IGNORED) + && sAbilitiesAffectedByMoldBreaker[gBattleMons[battlerId].ability] + && gBattlerByTurnOrder[gCurrentTurnActionNumber] == gBattlerAttacker + && gActionsByTurnOrder[gBattlerByTurnOrder[gBattlerAttacker]] == B_ACTION_USE_MOVE + && gCurrentTurnActionNumber < gBattlersCount) + return ABILITY_NONE; + + return gBattleMons[battlerId].ability; +} + +u32 IsAbilityOnSide(u32 battlerId, u32 ability) +{ + if (IsBattlerAlive(battlerId) && GetBattlerAbility(battlerId) == ability) + return battlerId + 1; + else if (IsBattlerAlive(BATTLE_PARTNER(battlerId)) && GetBattlerAbility(BATTLE_PARTNER(battlerId)) == ability) + return BATTLE_PARTNER(battlerId) + 1; + else + return 0; +} + +u32 IsAbilityOnOpposingSide(u32 battlerId, u32 ability) +{ + return IsAbilityOnSide(BATTLE_OPPOSITE(battlerId), ability); +} + +u32 IsAbilityOnField(u32 ability) +{ + u32 i; + + for (i = 0; i < gBattlersCount; i++) + { + if (IsBattlerAlive(i) && GetBattlerAbility(i) == ability) + return i + 1; + } + + return 0; +} + +u32 IsAbilityOnFieldExcept(u32 battlerId, u32 ability) +{ + u32 i; + + for (i = 0; i < gBattlersCount; i++) + { + if (i != battlerId && IsBattlerAlive(i) && GetBattlerAbility(i) == ability) + return i + 1; + } + + return 0; +} + +u32 IsAbilityPreventingEscape(u32 battlerId) +{ + u32 id; + #if B_GHOSTS_ESCAPE >= GEN_6 + if (IS_BATTLER_OF_TYPE(battlerId, TYPE_GHOST)) + return 0; + #endif + #if B_SHADOW_TAG_ESCAPE >= GEN_4 + if ((id = IsAbilityOnOpposingSide(battlerId, ABILITY_SHADOW_TAG)) && GetBattlerAbility(battlerId) != ABILITY_SHADOW_TAG) + #else + if (id = IsAbilityOnOpposingSide(battlerId, ABILITY_SHADOW_TAG)) + #endif + return id; + if ((id = IsAbilityOnOpposingSide(battlerId, ABILITY_ARENA_TRAP)) && IsBattlerGrounded(battlerId)) + return id; + if ((id = IsAbilityOnOpposingSide(battlerId, ABILITY_MAGNET_PULL)) && IS_BATTLER_OF_TYPE(battlerId, TYPE_STEEL)) + return id; + + return 0; +} + +bool32 CanBattlerEscape(u32 battlerId) // no ability check +{ + if (GetBattlerHoldEffect(battlerId, TRUE) == HOLD_EFFECT_SHED_SHELL) + return TRUE; + else if ((B_GHOSTS_ESCAPE >= GEN_6 && !IS_BATTLER_OF_TYPE(battlerId, TYPE_GHOST)) && gBattleMons[battlerId].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)) + return FALSE; + else if (gStatuses3[battlerId] & STATUS3_ROOTED) + return FALSE; + else if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) + return FALSE; + else if (gStatuses3[battlerId] & STATUS3_SKY_DROPPED) + return FALSE; + else + return TRUE; +} + void BattleScriptExecute(const u8 *BS_ptr) { gBattlescriptCurrInstr = BS_ptr; @@ -3200,103 +6069,700 @@ void BattleScriptPushCursorAndCallback(const u8 *BS_ptr) enum { - ITEM_NO_EFFECT, // 0 - ITEM_STATUS_CHANGE, // 1 - ITEM_EFFECT_OTHER, // 2 - ITEM_PP_CHANGE, // 3 - ITEM_HP_CHANGE, // 4 - ITEM_STATS_CHANGE, // 5 + ITEM_NO_EFFECT, + ITEM_STATUS_CHANGE, + ITEM_EFFECT_OTHER, + ITEM_PP_CHANGE, + ITEM_HP_CHANGE, + ITEM_STATS_CHANGE, }; +bool32 IsBattlerTerrainAffected(u8 battlerId, u32 terrainFlag) +{ + if (!(gFieldStatuses & terrainFlag)) + return FALSE; + else if (gStatuses3[battlerId] & STATUS3_SEMI_INVULNERABLE) + return FALSE; + + return IsBattlerGrounded(battlerId); +} + +bool32 CanSleep(u8 battlerId) +{ + u16 ability = GetBattlerAbility(battlerId); + if (ability == ABILITY_INSOMNIA + || ability == ABILITY_VITAL_SPIRIT + || ability == ABILITY_COMATOSE + || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD + || gBattleMons[battlerId].status1 & STATUS1_ANY + || IsAbilityOnSide(battlerId, ABILITY_SWEET_VEIL) + || IsAbilityStatusProtected(battlerId) + || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_MISTY_TERRAIN)) + return FALSE; + return TRUE; +} + +bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget) +{ + u16 ability = GetBattlerAbility(battlerTarget); + + if (!(CanPoisonType(battlerAttacker, battlerTarget)) + || gSideStatuses[GetBattlerSide(battlerTarget)] & SIDE_STATUS_SAFEGUARD + || gBattleMons[battlerTarget].status1 & STATUS1_ANY + || ability == ABILITY_IMMUNITY + || ability == ABILITY_COMATOSE + || IsAbilityOnSide(battlerTarget, ABILITY_PASTEL_VEIL) + || gBattleMons[battlerTarget].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battlerTarget) + || IsBattlerTerrainAffected(battlerTarget, STATUS_FIELD_MISTY_TERRAIN)) + return FALSE; + return TRUE; +} + +bool32 CanBeBurned(u8 battlerId) +{ + u16 ability = GetBattlerAbility(battlerId); + if (IS_BATTLER_OF_TYPE(battlerId, TYPE_FIRE) + || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD + || gBattleMons[battlerId].status1 & STATUS1_ANY + || ability == ABILITY_WATER_VEIL + || ability == ABILITY_WATER_BUBBLE + || ability == ABILITY_COMATOSE + || IsAbilityStatusProtected(battlerId) + || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN)) + return FALSE; + return TRUE; +} + +bool32 CanBeParalyzed(u8 battlerId) +{ + u16 ability = GetBattlerAbility(battlerId); + if ((B_PARALYZE_ELECTRIC >= GEN_6 && IS_BATTLER_OF_TYPE(battlerId, TYPE_ELECTRIC)) + || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD + || ability == ABILITY_LIMBER + || ability == ABILITY_COMATOSE + || gBattleMons[battlerId].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battlerId) + || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN)) + return FALSE; + return TRUE; +} + +bool32 CanBeFrozen(u8 battlerId) +{ + u16 ability = GetBattlerAbility(battlerId); + if (IS_BATTLER_OF_TYPE(battlerId, TYPE_ICE) + || IsBattlerWeatherAffected(battlerId, B_WEATHER_SUN) + || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD + || ability == ABILITY_MAGMA_ARMOR + || ability == ABILITY_COMATOSE + || gBattleMons[battlerId].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battlerId) + || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN)) + return FALSE; + return TRUE; +} + +bool32 CanBeConfused(u8 battlerId) +{ + if (GetBattlerAbility(gEffectBattler) == ABILITY_OWN_TEMPO + || gBattleMons[gEffectBattler].status2 & STATUS2_CONFUSION + || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN)) + return FALSE; + return TRUE; +} + +// second argument is 1/X of current hp compared to max hp +bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId) +{ + bool32 isBerry = (ItemId_GetPocket(itemId) == POCKET_BERRIES); + + if (gBattleMons[battlerId].hp == 0) + return FALSE; + if (gBattleScripting.overrideBerryRequirements) + return TRUE; + // Unnerve prevents consumption of opponents' berries. + if (isBerry && IsUnnerveAbilityOnOpposingSide(battlerId)) + return FALSE; + if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / hpFraction) + return TRUE; + + if (hpFraction <= 4 && GetBattlerAbility(battlerId) == ABILITY_GLUTTONY && isBerry + && gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2) + { + RecordAbilityBattle(battlerId, ABILITY_GLUTTONY); + return TRUE; + } + + return FALSE; +} + +#if B_CONFUSE_BERRIES_HEAL >= GEN_7 + #define CONFUSE_BERRY_HP_FRACTION 4 +#else + #define CONFUSE_BERRY_HP_FRACTION 2 +#endif + +static u8 HealConfuseBerry(u32 battlerId, u32 itemId, u8 flavorId, bool32 end2) +{ +#if B_HEAL_BLOCKING >= GEN_5 + if (HasEnoughHpToEatBerry(battlerId, CONFUSE_BERRY_HP_FRACTION, itemId) && !(gStatuses3[battlerId] & STATUS3_HEAL_BLOCK)) +#else + if (HasEnoughHpToEatBerry(battlerId, CONFUSE_BERRY_HP_FRACTION, itemId)) +#endif + { + PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, flavorId); + + gBattleMoveDamage = gBattleMons[battlerId].maxHP / GetBattlerHoldEffectParam(battlerId); + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + + if (GetBattlerAbility(battlerId) == ABILITY_RIPEN) + { + gBattleMoveDamage *= 2; + gBattlerAbility = battlerId; + } + gBattleScripting.battler = battlerId; + if (end2) + { + if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, flavorId) < 0) + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); + else + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItemEnd2); + } + else + { + BattleScriptPushCursor(); + if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, flavorId) < 0) + gBattlescriptCurrInstr = BattleScript_BerryConfuseHealRet; + else + gBattlescriptCurrInstr = BattleScript_ItemHealHP_RemoveItemRet; + } + + return ITEM_HP_CHANGE; + } + return 0; +} + +#undef CONFUSE_BERRY_HP_FRACTION + +static u8 StatRaiseBerry(u32 battlerId, u32 itemId, u32 statId, bool32 end2) +{ + if (CompareStat(battlerId, statId, MAX_STAT_STAGE, CMP_LESS_THAN) && HasEnoughHpToEatBerry(battlerId, GetBattlerHoldEffectParam(battlerId), itemId)) + { + BufferStatChange(battlerId, statId, STRINGID_STATROSE); + gEffectBattler = battlerId; + if (GetBattlerAbility(battlerId) == ABILITY_RIPEN) + SET_STATCHANGER(statId, 2, FALSE); + else + SET_STATCHANGER(statId, 1, FALSE); + + gBattleScripting.animArg1 = 14 + statId; + gBattleScripting.animArg2 = 0; + + if (end2) + { + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; + } + return ITEM_STATS_CHANGE; + } + return 0; +} + +static u8 RandomStatRaiseBerry(u32 battlerId, u32 itemId, bool32 end2) +{ + s32 i; + u16 stringId; + + for (i = 0; i < NUM_STATS - 1; i++) + { + if (CompareStat(battlerId, STAT_ATK + i, MAX_STAT_STAGE, CMP_LESS_THAN)) + break; + } + if (i != NUM_STATS - 1 && HasEnoughHpToEatBerry(battlerId, GetBattlerHoldEffectParam(battlerId), itemId)) + { + u16 battlerAbility = GetBattlerAbility(battlerId); + do + { + i = Random() % (NUM_STATS - 1); + } while (!CompareStat(battlerId, STAT_ATK + i, MAX_STAT_STAGE, CMP_LESS_THAN)); + + PREPARE_STAT_BUFFER(gBattleTextBuff1, i + 1); + stringId = (battlerAbility == ABILITY_CONTRARY) ? STRINGID_STATFELL : STRINGID_STATROSE; + gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; + gBattleTextBuff2[1] = B_BUFF_STRING; + gBattleTextBuff2[2] = STRINGID_STATSHARPLY; + gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8; + gBattleTextBuff2[4] = B_BUFF_STRING; + gBattleTextBuff2[5] = stringId; + gBattleTextBuff2[6] = stringId >> 8; + gBattleTextBuff2[7] = EOS; + gEffectBattler = battlerId; + if (battlerAbility == ABILITY_RIPEN) + SET_STATCHANGER(i + 1, 4, FALSE); + else + SET_STATCHANGER(i + 1, 2, FALSE); + + gBattleScripting.animArg1 = 0x21 + i + 6; + gBattleScripting.animArg2 = 0; + if (end2) + { + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; + } + + return ITEM_STATS_CHANGE; + } + return 0; +} + +static u8 TrySetMicleBerry(u32 battlerId, u32 itemId, bool32 end2) +{ + if (HasEnoughHpToEatBerry(battlerId, 4, itemId)) + { + gProtectStructs[battlerId].usedMicleBerry = TRUE; // battler's next attack has increased accuracy + + if (end2) + { + BattleScriptExecute(BattleScript_MicleBerryActivateEnd2); + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MicleBerryActivateRet; + } + return ITEM_EFFECT_OTHER; + } + return 0; +} + +static u8 DamagedStatBoostBerryEffect(u8 battlerId, u8 statId, u8 split) +{ + if (IsBattlerAlive(battlerId) + && TARGET_TURN_DAMAGED + && CompareStat(battlerId, statId, MAX_STAT_STAGE, CMP_LESS_THAN) + && !DoesSubstituteBlockMove(gBattlerAttacker, battlerId, gCurrentMove) + && GetBattleMoveSplit(gCurrentMove) == split) + { + BufferStatChange(battlerId, statId, STRINGID_STATROSE); + + gEffectBattler = battlerId; + if (GetBattlerAbility(battlerId) == ABILITY_RIPEN) + SET_STATCHANGER(statId, 2, FALSE); + else + SET_STATCHANGER(statId, 1, FALSE); + + gBattleScripting.animArg1 = 14 + statId; + gBattleScripting.animArg2 = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; + return ITEM_STATS_CHANGE; + } + return 0; +} + +u8 TryHandleSeed(u8 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute) +{ + if (gFieldStatuses & terrainFlag && CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + BufferStatChange(battler, statId, STRINGID_STATROSE); + gLastUsedItem = itemId; // For surge abilities + gEffectBattler = gBattleScripting.battler = battler; + SET_STATCHANGER(statId, 1, FALSE); + gBattleScripting.animArg1 = 14 + statId; + gBattleScripting.animArg2 = 0; + if (execute) + { + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; + } + return ITEM_STATS_CHANGE; + } + return 0; +} + +static u8 ItemHealHp(u32 battlerId, u32 itemId, bool32 end2, bool32 percentHeal) +{ +#if B_HEAL_BLOCKING >= GEN_5 + if (HasEnoughHpToEatBerry(battlerId, 2, itemId) && !(gStatuses3[battlerId] & STATUS3_HEAL_BLOCK) +#else + if (HasEnoughHpToEatBerry(battlerId, 2, itemId) +#endif + && !(gBattleScripting.overrideBerryRequirements && gBattleMons[battlerId].hp == gBattleMons[battlerId].maxHP)) + { + if (percentHeal) + gBattleMoveDamage = (gBattleMons[battlerId].maxHP * GetBattlerHoldEffectParam(battlerId) / 100) * -1; + else + gBattleMoveDamage = GetBattlerHoldEffectParam(battlerId) * -1; + + // check ripen + if (ItemId_GetPocket(itemId) == POCKET_BERRIES && GetBattlerAbility(battlerId) == ABILITY_RIPEN) + gBattleMoveDamage *= 2; + + gBattlerAbility = battlerId; // in SWSH, berry juice shows ability pop up but has no effect. This is mimicked here + if (end2) + { + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItemEnd2); + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ItemHealHP_RemoveItemRet; + } + return ITEM_HP_CHANGE; + } + return 0; +} + +static bool32 UnnerveOn(u32 battlerId, u32 itemId) +{ + if (ItemId_GetPocket(itemId) == POCKET_BERRIES && IsUnnerveAbilityOnOpposingSide(battlerId)) + return TRUE; + return FALSE; +} + +static bool32 GetMentalHerbEffect(u8 battlerId) +{ + bool32 ret = FALSE; + + // Check infatuation + if (gBattleMons[battlerId].status2 & STATUS2_INFATUATION) + { + gBattleMons[battlerId].status2 &= ~STATUS2_INFATUATION; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_INFATUATION; // STRINGID_TARGETGOTOVERINFATUATION + StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); + ret = TRUE; + } + #if B_MENTAL_HERB >= GEN_5 + // Check taunt + if (gDisableStructs[battlerId].tauntTimer != 0) + { + gDisableStructs[battlerId].tauntTimer = gDisableStructs[battlerId].tauntTimer2 = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); + ret = TRUE; + } + // Check encore + if (gDisableStructs[battlerId].encoreTimer != 0) + { + gDisableStructs[battlerId].encoredMove = 0; + gDisableStructs[battlerId].encoreTimerStartValue = gDisableStructs[battlerId].encoreTimer = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; // STRINGID_PKMNENCOREENDED + ret = TRUE; + } + // Check torment + if (gBattleMons[battlerId].status2 & STATUS2_TORMENT) + { + gBattleMons[battlerId].status2 &= ~STATUS2_TORMENT; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TORMENT; + ret = TRUE; + } + // Check heal block + if (gStatuses3[battlerId] & STATUS3_HEAL_BLOCK) + { + gStatuses3[battlerId] &= ~STATUS3_HEAL_BLOCK; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK; + ret = TRUE; + } + // Check disable + if (gDisableStructs[battlerId].disableTimer != 0) + { + gDisableStructs[battlerId].disableTimer = gDisableStructs[battlerId].disableTimerStartValue = 0; + gDisableStructs[battlerId].disabledMove = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE; + ret = TRUE; + } + #endif + return ret; +} + u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) { - int i = 0; + int i = 0, moveType; u8 effect = ITEM_NO_EFFECT; u8 changedPP = 0; - u8 battlerHoldEffect, atkHoldEffect, defHoldEffect; - u8 battlerHoldEffectParam, atkHoldEffectParam, defHoldEffectParam; - u16 atkItem, defItem; + u8 battlerHoldEffect, atkHoldEffect; + u8 atkHoldEffectParam; + u16 atkItem; gLastUsedItem = gBattleMons[battlerId].item; - if (gLastUsedItem == ITEM_ENIGMA_BERRY) - { - battlerHoldEffect = gEnigmaBerries[battlerId].holdEffect; - battlerHoldEffectParam = gEnigmaBerries[battlerId].holdEffectParam; - } - else - { - battlerHoldEffect = ItemId_GetHoldEffect(gLastUsedItem); - battlerHoldEffectParam = ItemId_GetHoldEffectParam(gLastUsedItem); - } + battlerHoldEffect = GetBattlerHoldEffect(battlerId, TRUE); atkItem = gBattleMons[gBattlerAttacker].item; - if (atkItem == ITEM_ENIGMA_BERRY) - { - atkHoldEffect = gEnigmaBerries[gBattlerAttacker].holdEffect; - atkHoldEffectParam = gEnigmaBerries[gBattlerAttacker].holdEffectParam; - } - else - { - atkHoldEffect = ItemId_GetHoldEffect(atkItem); - atkHoldEffectParam = ItemId_GetHoldEffectParam(atkItem); - } - - // def variables are unused - defItem = gBattleMons[gBattlerTarget].item; - if (defItem == ITEM_ENIGMA_BERRY) - { - defHoldEffect = gEnigmaBerries[gBattlerTarget].holdEffect; - defHoldEffectParam = gEnigmaBerries[gBattlerTarget].holdEffectParam; - } - else - { - defHoldEffect = ItemId_GetHoldEffect(defItem); - defHoldEffectParam = ItemId_GetHoldEffectParam(defItem); - } + atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); + atkHoldEffectParam = GetBattlerHoldEffectParam(gBattlerAttacker); switch (caseID) { case ITEMEFFECT_ON_SWITCH_IN: - switch (battlerHoldEffect) + if (!gSpecialStatuses[battlerId].switchInItemDone) { - case HOLD_EFFECT_DOUBLE_PRIZE: - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - gBattleStruct->moneyMultiplier = 2; - break; - case HOLD_EFFECT_RESTORE_STATS: - for (i = 0; i < NUM_BATTLE_STATS; i++) + switch (battlerHoldEffect) { - if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE) + case HOLD_EFFECT_DOUBLE_PRIZE: + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER && !gBattleStruct->moneyMultiplierItem) { - gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE; + gBattleStruct->moneyMultiplier *= 2; + gBattleStruct->moneyMultiplierItem = 1; + } + break; + case HOLD_EFFECT_RESTORE_STATS: + for (i = 0; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE) + { + gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE; + effect = ITEM_STATS_CHANGE; + } + } + if (effect != 0) + { + gBattleScripting.battler = battlerId; + gPotentialItemEffectBattler = battlerId; + gActiveBattler = gBattlerAttacker = battlerId; + BattleScriptExecute(BattleScript_WhiteHerbEnd2); + } + break; + case HOLD_EFFECT_CONFUSE_SPICY: + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SPICY, TRUE); + break; + case HOLD_EFFECT_CONFUSE_DRY: + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_DRY, TRUE); + break; + case HOLD_EFFECT_CONFUSE_SWEET: + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SWEET, TRUE); + break; + case HOLD_EFFECT_CONFUSE_BITTER: + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_BITTER, TRUE); + break; + case HOLD_EFFECT_CONFUSE_SOUR: + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SOUR, TRUE); + break; + case HOLD_EFFECT_ATTACK_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_ATK, TRUE); + break; + case HOLD_EFFECT_DEFENSE_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_DEF, TRUE); + break; + case HOLD_EFFECT_SPEED_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPEED, TRUE); + break; + case HOLD_EFFECT_SP_ATTACK_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPATK, TRUE); + break; + case HOLD_EFFECT_SP_DEFENSE_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPDEF, TRUE); + break; + case HOLD_EFFECT_CRITICAL_UP: + if (B_BERRIES_INSTANT >= GEN_4 && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY) && HasEnoughHpToEatBerry(battlerId, GetBattlerHoldEffectParam(battlerId), gLastUsedItem)) + { + gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY; + BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2); + effect = ITEM_EFFECT_OTHER; + } + break; + case HOLD_EFFECT_RANDOM_STAT_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = RandomStatRaiseBerry(battlerId, gLastUsedItem, TRUE); + break; + case HOLD_EFFECT_CURE_PAR: + if (B_BERRIES_INSTANT >= GEN_4 && gBattleMons[battlerId].status1 & STATUS1_PARALYSIS && !UnnerveOn(battlerId, gLastUsedItem)) + { + gBattleMons[battlerId].status1 &= ~STATUS1_PARALYSIS; + BattleScriptExecute(BattleScript_BerryCurePrlzEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_PSN: + if (B_BERRIES_INSTANT >= GEN_4 && gBattleMons[battlerId].status1 & STATUS1_PSN_ANY && !UnnerveOn(battlerId, gLastUsedItem)) + { + gBattleMons[battlerId].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER); + BattleScriptExecute(BattleScript_BerryCurePsnEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_BRN: + if (B_BERRIES_INSTANT >= GEN_4 && gBattleMons[battlerId].status1 & STATUS1_BURN && !UnnerveOn(battlerId, gLastUsedItem)) + { + gBattleMons[battlerId].status1 &= ~STATUS1_BURN; + BattleScriptExecute(BattleScript_BerryCureBrnEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_FRZ: + if (B_BERRIES_INSTANT >= GEN_4 && gBattleMons[battlerId].status1 & STATUS1_FREEZE && !UnnerveOn(battlerId, gLastUsedItem)) + { + gBattleMons[battlerId].status1 &= ~STATUS1_FREEZE; + BattleScriptExecute(BattleScript_BerryCureFrzEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_SLP: + if (B_BERRIES_INSTANT >= GEN_4 && gBattleMons[battlerId].status1 & STATUS1_SLEEP && !UnnerveOn(battlerId, gLastUsedItem)) + { + gBattleMons[battlerId].status1 &= ~STATUS1_SLEEP; + gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE; + BattleScriptExecute(BattleScript_BerryCureSlpEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_STATUS: + if (B_BERRIES_INSTANT >= GEN_4 && (gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION) && !UnnerveOn(battlerId, gLastUsedItem)) + { + i = 0; + if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); + i++; + } + if (gBattleMons[battlerId].status1 & STATUS1_SLEEP) + { + gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE; + StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); + i++; + } + if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); + i++; + } + if (gBattleMons[battlerId].status1 & STATUS1_BURN) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); + i++; + } + if (gBattleMons[battlerId].status1 & STATUS1_FREEZE) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); + i++; + } + if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); + i++; + } + if (i <= 1) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NORMALIZED_STATUS; + gBattleMons[battlerId].status1 = 0; + gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; + BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_RESTORE_HP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = ItemHealHp(battlerId, gLastUsedItem, TRUE, FALSE); + break; + case HOLD_EFFECT_RESTORE_PCT_HP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = ItemHealHp(battlerId, gLastUsedItem, TRUE, TRUE); + break; + case HOLD_EFFECT_AIR_BALLOON: + effect = ITEM_EFFECT_OTHER; + gBattleScripting.battler = battlerId; + BattleScriptPushCursorAndCallback(BattleScript_AirBaloonMsgIn); + RecordItemEffectBattle(battlerId, HOLD_EFFECT_AIR_BALLOON); + break; + case HOLD_EFFECT_ROOM_SERVICE: + if (TryRoomService(battlerId)) + { + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } + break; + case HOLD_EFFECT_SEEDS: + switch (GetBattlerHoldEffectParam(battlerId)) + { + case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN: + effect = TryHandleSeed(battlerId, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, gLastUsedItem, TRUE); + break; + case HOLD_EFFECT_PARAM_GRASSY_TERRAIN: + effect = TryHandleSeed(battlerId, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, gLastUsedItem, TRUE); + break; + case HOLD_EFFECT_PARAM_MISTY_TERRAIN: + effect = TryHandleSeed(battlerId, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, gLastUsedItem, TRUE); + break; + case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN: + effect = TryHandleSeed(battlerId, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, gLastUsedItem, TRUE); + break; + } + break; + case HOLD_EFFECT_EJECT_PACK: + if (gProtectStructs[battlerId].statFell + && gProtectStructs[battlerId].disableEjectPack == 0 + && !(gCurrentMove == MOVE_PARTING_SHOT && CanBattlerSwitch(gBattlerAttacker))) // Does not activate if attacker used Parting Shot and can switch out + { + gProtectStructs[battlerId].statFell = FALSE; + gActiveBattler = gBattleScripting.battler = battlerId; + effect = ITEM_STATS_CHANGE; + if (moveTurn) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_EjectPackActivate_Ret; + } + else + { + BattleScriptExecute(BattleScript_EjectPackActivate_End2); + } + } + break; } - if (effect) + if (effect != 0) { - gBattleScripting.battler = battlerId; - gPotentialItemEffectBattler = battlerId; - gActiveBattler = gBattlerAttacker = battlerId; - BattleScriptExecute(BattleScript_WhiteHerbEnd2); + gSpecialStatuses[battlerId].switchInItemDone = TRUE; + gActiveBattler = gBattlerAttacker = gPotentialItemEffectBattler = gBattleScripting.battler = battlerId; + switch (effect) + { + case ITEM_STATUS_CHANGE: + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battlerId].status1); + MarkBattlerForControllerExec(gActiveBattler); + break; + case ITEM_PP_CHANGE: + if (MOVE_IS_PERMANENT(battlerId, i)) + gBattleMons[battlerId].pp[i] = changedPP; + break; + } } - break; } break; - case 1: + case ITEMEFFECT_NORMAL: if (gBattleMons[battlerId].hp) { switch (battlerHoldEffect) { case HOLD_EFFECT_RESTORE_HP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn) - { - gBattleMoveDamage = battlerHoldEffectParam; - if (gBattleMons[battlerId].hp + battlerHoldEffectParam > gBattleMons[battlerId].maxHP) - gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp; - gBattleMoveDamage *= -1; - BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); - effect = 4; - } + if (!moveTurn) + effect = ItemHealHp(battlerId, gLastUsedItem, TRUE, FALSE); + break; + case HOLD_EFFECT_RESTORE_PCT_HP: + if (!moveTurn) + effect = ItemHealHp(battlerId, gLastUsedItem, TRUE, TRUE); break; case HOLD_EFFECT_RESTORE_PP: if (!moveTurn) @@ -3305,10 +6771,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) u8 ppBonuses; u16 move; - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; - else - mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; + mon = GetBattlerPartyData(battlerId); for (i = 0; i < MAX_MON_MOVES; i++) { move = GetMonData(mon, MON_DATA_MOVE1 + i); @@ -3320,15 +6783,22 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) if (i != MAX_MON_MOVES) { u8 maxPP = CalculatePPWithBonus(move, ppBonuses, i); - if (changedPP + battlerHoldEffectParam > maxPP) + u8 ppRestored = GetBattlerHoldEffectParam(battlerId); + + if (GetBattlerAbility(battlerId) == ABILITY_RIPEN) + { + ppRestored *= 2; + gBattlerAbility = battlerId; + } + if (changedPP + ppRestored > maxPP) changedPP = maxPP; else - changedPP = changedPP + battlerHoldEffectParam; + changedPP = changedPP + ppRestored; PREPARE_MOVE_BUFFER(gBattleTextBuff1, move); BattleScriptExecute(BattleScript_BerryPPHealEnd2); - BtlController_EmitSetMonData(0, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); + BtlController_EmitSetMonData(BUFFER_A, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); MarkBattlerForControllerExec(gActiveBattler); effect = ITEM_PP_CHANGE; } @@ -3343,7 +6813,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) effect = ITEM_STATS_CHANGE; } } - if (effect) + if (effect != 0) { gBattleScripting.battler = battlerId; gPotentialItemEffectBattler = battlerId; @@ -3351,186 +6821,82 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) BattleScriptExecute(BattleScript_WhiteHerbEnd2); } break; + case HOLD_EFFECT_BLACK_SLUDGE: + if (IS_BATTLER_OF_TYPE(battlerId, TYPE_POISON)) + { + goto LEFTOVERS; + } + else if (GetBattlerAbility(battlerId) != ABILITY_MAGIC_GUARD && !moveTurn) + { + gBattleMoveDamage = gBattleMons[battlerId].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptExecute(BattleScript_ItemHurtEnd2); + effect = ITEM_HP_CHANGE; + RecordItemEffectBattle(battlerId, battlerHoldEffect); + PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); + } + break; case HOLD_EFFECT_LEFTOVERS: + LEFTOVERS: +#if B_HEAL_BLOCKING >= GEN_5 + if (gBattleMons[battlerId].hp < gBattleMons[battlerId].maxHP && !moveTurn && !(gStatuses3[battlerId] & STATUS3_HEAL_BLOCK)) +#else if (gBattleMons[battlerId].hp < gBattleMons[battlerId].maxHP && !moveTurn) +#endif { gBattleMoveDamage = gBattleMons[battlerId].maxHP / 16; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) - gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp; gBattleMoveDamage *= -1; BattleScriptExecute(BattleScript_ItemHealHP_End2); effect = ITEM_HP_CHANGE; RecordItemEffectBattle(battlerId, battlerHoldEffect); } break; - // nice copy/paste there gamefreak, making a function for confuse berries was too much eh? case HOLD_EFFECT_CONFUSE_SPICY: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn) - { - PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SPICY); - - gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) - gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp; - gBattleMoveDamage *= -1; - if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_SPICY) < 0) - BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); - else - BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); - effect = ITEM_HP_CHANGE; - } + if (!moveTurn) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SPICY, TRUE); break; case HOLD_EFFECT_CONFUSE_DRY: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn) - { - PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_DRY); - - gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) - gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp; - gBattleMoveDamage *= -1; - if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_DRY) < 0) - BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); - else - BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); - effect = ITEM_HP_CHANGE; - } + if (!moveTurn) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_DRY, TRUE); break; case HOLD_EFFECT_CONFUSE_SWEET: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn) - { - PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SWEET); - - gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) - gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp; - gBattleMoveDamage *= -1; - if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_SWEET) < 0) - BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); - else - BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); - effect = ITEM_HP_CHANGE; - } + if (!moveTurn) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SWEET, TRUE); break; case HOLD_EFFECT_CONFUSE_BITTER: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn) - { - PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_BITTER); - - gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) - gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp; - gBattleMoveDamage *= -1; - if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_BITTER) < 0) - BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); - else - BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); - effect = ITEM_HP_CHANGE; - } + if (!moveTurn) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_BITTER, TRUE); break; case HOLD_EFFECT_CONFUSE_SOUR: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn) - { - PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SOUR); - - gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) - gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp; - gBattleMoveDamage *= -1; - if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_SOUR) < 0) - BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); - else - BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); - effect = ITEM_HP_CHANGE; - } + if (!moveTurn) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SOUR, TRUE); break; - // copy/paste again, smh case HOLD_EFFECT_ATTACK_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam - && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < MAX_STAT_STAGE) - { - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); - PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE); - - gEffectBattler = battlerId; - SET_STATCHANGER(STAT_ATK, 1, FALSE); - gBattleScripting.animArg1 = 14 + STAT_ATK; - gBattleScripting.animArg2 = 0; - BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } + if (!moveTurn) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_ATK, TRUE); break; case HOLD_EFFECT_DEFENSE_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn - && gBattleMons[battlerId].statStages[STAT_DEF] < MAX_STAT_STAGE) - { - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF); - - gEffectBattler = battlerId; - SET_STATCHANGER(STAT_DEF, 1, FALSE); - gBattleScripting.animArg1 = 14 + STAT_DEF; - gBattleScripting.animArg2 = 0; - BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } + if (!moveTurn) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_DEF, TRUE); break; case HOLD_EFFECT_SPEED_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn - && gBattleMons[battlerId].statStages[STAT_SPEED] < MAX_STAT_STAGE) - { - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPEED); - - gEffectBattler = battlerId; - SET_STATCHANGER(STAT_SPEED, 1, FALSE); - gBattleScripting.animArg1 = 14 + STAT_SPEED; - gBattleScripting.animArg2 = 0; - BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } + if (!moveTurn) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPEED, TRUE); break; case HOLD_EFFECT_SP_ATTACK_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn - && gBattleMons[battlerId].statStages[STAT_SPATK] < MAX_STAT_STAGE) - { - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); - - gEffectBattler = battlerId; - SET_STATCHANGER(STAT_SPATK, 1, FALSE); - gBattleScripting.animArg1 = 14 + STAT_SPATK; - gBattleScripting.animArg2 = 0; - BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } + if (!moveTurn) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPATK, TRUE); break; case HOLD_EFFECT_SP_DEFENSE_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn - && gBattleMons[battlerId].statStages[STAT_SPDEF] < MAX_STAT_STAGE) - { - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF); - - gEffectBattler = battlerId; - SET_STATCHANGER(STAT_SPDEF, 1, FALSE); - gBattleScripting.animArg1 = 14 + STAT_SPDEF; - gBattleScripting.animArg2 = 0; - BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } + if (!moveTurn) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPDEF, TRUE); break; case HOLD_EFFECT_CRITICAL_UP: - if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn - && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY)) + if (!moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY) + && HasEnoughHpToEatBerry(battlerId, GetBattlerHoldEffectParam(battlerId), gLastUsedItem)) { gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY; BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2); @@ -3538,50 +6904,19 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } break; case HOLD_EFFECT_RANDOM_STAT_UP: - if (!moveTurn && gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam) - { - for (i = 0; i < 5; i++) - { - if (gBattleMons[battlerId].statStages[STAT_ATK + i] < MAX_STAT_STAGE) - break; - } - if (i != 5) - { - do - { - i = Random() % 5; - } while (gBattleMons[battlerId].statStages[STAT_ATK + i] == MAX_STAT_STAGE); - - PREPARE_STAT_BUFFER(gBattleTextBuff1, i + 1); - - gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; - gBattleTextBuff2[1] = B_BUFF_STRING; - gBattleTextBuff2[2] = STRINGID_STATSHARPLY; - gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8; - gBattleTextBuff2[4] = B_BUFF_STRING; - gBattleTextBuff2[5] = STRINGID_STATROSE; - gBattleTextBuff2[6] = STRINGID_STATROSE >> 8; - gBattleTextBuff2[7] = EOS; - - gEffectBattler = battlerId; - SET_STATCHANGER(i + 1, 2, FALSE); - gBattleScripting.animArg1 = 0x21 + i + 6; - gBattleScripting.animArg2 = 0; - BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } - } + if (!moveTurn) + effect = RandomStatRaiseBerry(battlerId, gLastUsedItem, TRUE); break; case HOLD_EFFECT_CURE_PAR: - if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS) + if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status1 &= ~(STATUS1_PARALYSIS); + gBattleMons[battlerId].status1 &= ~STATUS1_PARALYSIS; BattleScriptExecute(BattleScript_BerryCurePrlzEnd2); effect = ITEM_STATUS_CHANGE; } break; case HOLD_EFFECT_CURE_PSN: - if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY) + if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY && !UnnerveOn(battlerId, gLastUsedItem)) { gBattleMons[battlerId].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER); BattleScriptExecute(BattleScript_BerryCurePsnEnd2); @@ -3589,40 +6924,40 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } break; case HOLD_EFFECT_CURE_BRN: - if (gBattleMons[battlerId].status1 & STATUS1_BURN) + if (gBattleMons[battlerId].status1 & STATUS1_BURN && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status1 &= ~(STATUS1_BURN); + gBattleMons[battlerId].status1 &= ~STATUS1_BURN; BattleScriptExecute(BattleScript_BerryCureBrnEnd2); effect = ITEM_STATUS_CHANGE; } break; case HOLD_EFFECT_CURE_FRZ: - if (gBattleMons[battlerId].status1 & STATUS1_FREEZE) + if (gBattleMons[battlerId].status1 & STATUS1_FREEZE && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status1 &= ~(STATUS1_FREEZE); + gBattleMons[battlerId].status1 &= ~STATUS1_FREEZE; BattleScriptExecute(BattleScript_BerryCureFrzEnd2); effect = ITEM_STATUS_CHANGE; } break; case HOLD_EFFECT_CURE_SLP: - if (gBattleMons[battlerId].status1 & STATUS1_SLEEP) + if (gBattleMons[battlerId].status1 & STATUS1_SLEEP && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP); - gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[battlerId].status1 &= ~STATUS1_SLEEP; + gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE; BattleScriptExecute(BattleScript_BerryCureSlpEnd2); effect = ITEM_STATUS_CHANGE; } break; case HOLD_EFFECT_CURE_CONFUSION: - if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION) + if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION); + gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; BattleScriptExecute(BattleScript_BerryCureConfusionEnd2); effect = ITEM_EFFECT_OTHER; } break; case HOLD_EFFECT_CURE_STATUS: - if (gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION) + if ((gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION) && !UnnerveOn(battlerId, gLastUsedItem)) { i = 0; if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY) @@ -3632,7 +6967,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } if (gBattleMons[battlerId].status1 & STATUS1_SLEEP) { - gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE; StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); i++; } @@ -3656,75 +6991,125 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); i++; } - if (!(i > 1)) + if (i <= 1) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NORMALIZED_STATUS; gBattleMons[battlerId].status1 = 0; - gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION); + gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); effect = ITEM_STATUS_CHANGE; } break; - case HOLD_EFFECT_CURE_ATTRACT: - if (gBattleMons[battlerId].status2 & STATUS2_INFATUATION) + case HOLD_EFFECT_MENTAL_HERB: + if (GetMentalHerbEffect(battlerId)) { - gBattleMons[battlerId].status2 &= ~(STATUS2_INFATUATION); - StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); - BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; + gBattleScripting.savedBattler = gBattlerAttacker; + gBattlerAttacker = battlerId; + BattleScriptExecute(BattleScript_MentalHerbCureEnd2); effect = ITEM_EFFECT_OTHER; } break; + case HOLD_EFFECT_MICLE_BERRY: + if (!moveTurn) + effect = TrySetMicleBerry(battlerId, gLastUsedItem, TRUE); + break; } - if (effect) + + if (effect != 0) { - gBattleScripting.battler = battlerId; - gPotentialItemEffectBattler = battlerId; - gActiveBattler = gBattlerAttacker = battlerId; + gActiveBattler = gBattlerAttacker = gPotentialItemEffectBattler = gBattleScripting.battler = battlerId; switch (effect) { case ITEM_STATUS_CHANGE: - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battlerId].status1); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battlerId].status1); MarkBattlerForControllerExec(gActiveBattler); break; case ITEM_PP_CHANGE: - if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[battlerId].mimickedMoves & gBitTable[i])) + if (MOVE_IS_PERMANENT(battlerId, i)) gBattleMons[battlerId].pp[i] = changedPP; break; } } } break; - case 2: - break; + case ITEMEFFECT_BATTLER_MOVE_END: + goto DO_ITEMEFFECT_MOVE_END; // this hurts a bit to do, but is an easy solution case ITEMEFFECT_MOVE_END: for (battlerId = 0; battlerId < gBattlersCount; battlerId++) { gLastUsedItem = gBattleMons[battlerId].item; - if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) - { - battlerHoldEffect = gEnigmaBerries[battlerId].holdEffect; - battlerHoldEffectParam = gEnigmaBerries[battlerId].holdEffectParam; - } - else - { - battlerHoldEffect = ItemId_GetHoldEffect(gLastUsedItem); - battlerHoldEffectParam = ItemId_GetHoldEffectParam(gLastUsedItem); - } + battlerHoldEffect = GetBattlerHoldEffect(battlerId, TRUE); + DO_ITEMEFFECT_MOVE_END: switch (battlerHoldEffect) { + case HOLD_EFFECT_MICLE_BERRY: + if (B_HP_BERRIES >= GEN_4) + effect = TrySetMicleBerry(battlerId, gLastUsedItem, FALSE); + break; + case HOLD_EFFECT_RESTORE_HP: + if (B_HP_BERRIES >= GEN_4) + effect = ItemHealHp(battlerId, gLastUsedItem, FALSE, FALSE); + break; + case HOLD_EFFECT_RESTORE_PCT_HP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = ItemHealHp(battlerId, gLastUsedItem, FALSE, TRUE); + break; + case HOLD_EFFECT_CONFUSE_SPICY: + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SPICY, FALSE); + break; + case HOLD_EFFECT_CONFUSE_DRY: + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_DRY, FALSE); + break; + case HOLD_EFFECT_CONFUSE_SWEET: + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SWEET, FALSE); + break; + case HOLD_EFFECT_CONFUSE_BITTER: + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_BITTER, FALSE); + break; + case HOLD_EFFECT_CONFUSE_SOUR: + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SOUR, FALSE); + break; + case HOLD_EFFECT_ATTACK_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_ATK, FALSE); + break; + case HOLD_EFFECT_DEFENSE_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_DEF, FALSE); + break; + case HOLD_EFFECT_SPEED_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPEED, FALSE); + break; + case HOLD_EFFECT_SP_ATTACK_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPATK, FALSE); + break; + case HOLD_EFFECT_SP_DEFENSE_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPDEF, FALSE); + break; + case HOLD_EFFECT_RANDOM_STAT_UP: + if (B_BERRIES_INSTANT >= GEN_4) + effect = RandomStatRaiseBerry(battlerId, gLastUsedItem, FALSE); + break; case HOLD_EFFECT_CURE_PAR: - if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS) + if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status1 &= ~(STATUS1_PARALYSIS); + gBattleMons[battlerId].status1 &= ~STATUS1_PARALYSIS; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureParRet; effect = ITEM_STATUS_CHANGE; } break; case HOLD_EFFECT_CURE_PSN: - if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY) + if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY && !UnnerveOn(battlerId, gLastUsedItem)) { gBattleMons[battlerId].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER); BattleScriptPushCursor(); @@ -3733,83 +7118,78 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } break; case HOLD_EFFECT_CURE_BRN: - if (gBattleMons[battlerId].status1 & STATUS1_BURN) + if (gBattleMons[battlerId].status1 & STATUS1_BURN && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status1 &= ~(STATUS1_BURN); + gBattleMons[battlerId].status1 &= ~STATUS1_BURN; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureBrnRet; effect = ITEM_STATUS_CHANGE; } break; case HOLD_EFFECT_CURE_FRZ: - if (gBattleMons[battlerId].status1 & STATUS1_FREEZE) + if (gBattleMons[battlerId].status1 & STATUS1_FREEZE && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status1 &= ~(STATUS1_FREEZE); + gBattleMons[battlerId].status1 &= ~STATUS1_FREEZE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureFrzRet; effect = ITEM_STATUS_CHANGE; } break; case HOLD_EFFECT_CURE_SLP: - if (gBattleMons[battlerId].status1 & STATUS1_SLEEP) + if (gBattleMons[battlerId].status1 & STATUS1_SLEEP && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP); - gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[battlerId].status1 &= ~STATUS1_SLEEP; + gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureSlpRet; effect = ITEM_STATUS_CHANGE; } break; case HOLD_EFFECT_CURE_CONFUSION: - if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION) + if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION); + gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureConfusionRet; effect = ITEM_EFFECT_OTHER; } break; - case HOLD_EFFECT_CURE_ATTRACT: - if (gBattleMons[battlerId].status2 & STATUS2_INFATUATION) + case HOLD_EFFECT_MENTAL_HERB: + if (GetMentalHerbEffect(battlerId)) { - gBattleMons[battlerId].status2 &= ~(STATUS2_INFATUATION); - StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); + gBattleScripting.savedBattler = gBattlerAttacker; + gBattlerAttacker = battlerId; BattleScriptPushCursor(); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; - gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; + gBattlescriptCurrInstr = BattleScript_MentalHerbCureRet; effect = ITEM_EFFECT_OTHER; } break; case HOLD_EFFECT_CURE_STATUS: - if (gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION) + if ((gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION) && !UnnerveOn(battlerId, gLastUsedItem)) { if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY) - { StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - } + if (gBattleMons[battlerId].status1 & STATUS1_SLEEP) { - gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE; StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); } + if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS) - { StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - } + if (gBattleMons[battlerId].status1 & STATUS1_BURN) - { StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - } + if (gBattleMons[battlerId].status1 & STATUS1_FREEZE) - { StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - } + if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION) - { StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); - } + gBattleMons[battlerId].status1 = 0; - gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION); + gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; @@ -3825,7 +7205,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) effect = ITEM_STATS_CHANGE; } } - if (effect) + if (effect != 0) { gBattleScripting.battler = battlerId; gPotentialItemEffectBattler = battlerId; @@ -3835,68 +7215,322 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } break; } - if (effect) + if (effect != 0) { - gBattleScripting.battler = battlerId; - gPotentialItemEffectBattler = battlerId; - gActiveBattler = battlerId; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); - MarkBattlerForControllerExec(gActiveBattler); + gActiveBattler = gPotentialItemEffectBattler = gBattleScripting.battler = battlerId; + if (effect == ITEM_STATUS_CHANGE) + { + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); + } break; } } break; - case ITEMEFFECT_KINGSROCK_SHELLBELL: - if (gBattleMoveDamage) + case ITEMEFFECT_KINGSROCK: + // Occur on each hit of a multi-strike move + switch (atkHoldEffect) { - switch (atkHoldEffect) + case HOLD_EFFECT_FLINCH: + #if B_SERENE_GRACE_BOOST >= GEN_5 + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_SERENE_GRACE) + atkHoldEffectParam *= 2; + #endif + if (gBattleMoveDamage != 0 // Need to have done damage + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && (Random() % 100) < atkHoldEffectParam + && gBattleMoves[gCurrentMove].flags & FLAG_KINGS_ROCK_AFFECTED + && gBattleMons[gBattlerTarget].hp) { - case HOLD_EFFECT_FLINCH: - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && TARGET_TURN_DAMAGED - && (Random() % 100) < atkHoldEffectParam - && gBattleMoves[gCurrentMove].flags & FLAG_KINGS_ROCK_AFFECTED - && gBattleMons[gBattlerTarget].hp) + gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH; + BattleScriptPushCursor(); + SetMoveEffect(FALSE, 0); + BattleScriptPop(); + } + break; + case HOLD_EFFECT_BLUNDER_POLICY: + if (gBattleStruct->blunderPolicy + && gBattleMons[gBattlerAttacker].hp != 0 + && CompareStat(gBattlerAttacker, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + gBattleStruct->blunderPolicy = FALSE; + gLastUsedItem = atkItem; + gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPEED, 2, FALSE); + effect = ITEM_STATS_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AttackerItemStatRaise; + } + break; + } + break; + case ITEMEFFECT_LIFEORB_SHELLBELL: + // Occur after the final hit of a multi-strike move + switch (atkHoldEffect) + { + case HOLD_EFFECT_SHELL_BELL: + if (gSpecialStatuses[gBattlerAttacker].damagedMons // Need to have done damage + && gBattlerAttacker != gBattlerTarget + && gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP +#if B_HEAL_BLOCKING >= GEN_5 + && gBattleMons[gBattlerAttacker].hp != 0 && !(gStatuses3[battlerId] & STATUS3_HEAL_BLOCK)) +#else + && gBattleMons[gBattlerAttacker].hp != 0) +#endif + { + gLastUsedItem = atkItem; + gPotentialItemEffectBattler = gBattlerAttacker; + gBattleScripting.battler = gBattlerAttacker; + gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkHoldEffectParam) * -1; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = -1; + gSpecialStatuses[gBattlerTarget].dmg = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret; + effect = ITEM_HP_CHANGE; + } + break; + case HOLD_EFFECT_LIFE_ORB: + if (IsBattlerAlive(gBattlerAttacker) + && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove)) + && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD + && gSpecialStatuses[gBattlerAttacker].damagedMons) + { + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 10; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + effect = ITEM_HP_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ItemHurtRet; + gLastUsedItem = gBattleMons[gBattlerAttacker].item; + } + break; + case HOLD_EFFECT_THROAT_SPRAY: // Does NOT need to be a damaging move + if (gProtectStructs[gBattlerAttacker].targetAffected + && gBattleMons[gBattlerAttacker].hp != 0 + && gBattleMoves[gCurrentMove].flags & FLAG_SOUND + && CompareStat(gBattlerAttacker, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN) + && !NoAliveMonsForEitherParty()) // Don't activate if battle will end + { + gLastUsedItem = atkItem; + gBattleScripting.battler = gBattlerAttacker; + gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPATK, 1, FALSE); + effect = ITEM_STATS_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AttackerItemStatRaise; + } + break; + } + break; + case ITEMEFFECT_TARGET: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + { + GET_MOVE_TYPE(gCurrentMove, moveType); + switch (battlerHoldEffect) + { + case HOLD_EFFECT_AIR_BALLOON: + if (TARGET_TURN_DAMAGED) { - gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_FLINCH; + effect = ITEM_EFFECT_OTHER; BattleScriptPushCursor(); - SetMoveEffect(FALSE, 0); - BattleScriptPop(); + gBattlescriptCurrInstr = BattleScript_AirBaloonMsgPop; } break; - case HOLD_EFFECT_SHELL_BELL: - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && gSpecialStatuses[gBattlerTarget].dmg != 0 - && gSpecialStatuses[gBattlerTarget].dmg != 0xFFFF - && gBattlerAttacker != gBattlerTarget - && gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP - && gBattleMons[gBattlerAttacker].hp != 0) + case HOLD_EFFECT_ROCKY_HELMET: + if (TARGET_TURN_DAMAGED + && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) + && IsBattlerAlive(gBattlerAttacker) + && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { - gLastUsedItem = atkItem; - gPotentialItemEffectBattler = gBattlerAttacker; - gBattleScripting.battler = gBattlerAttacker; - gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkHoldEffectParam) * -1; + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 6; if (gBattleMoveDamage == 0) - gBattleMoveDamage = -1; - gSpecialStatuses[gBattlerTarget].dmg = 0; + gBattleMoveDamage = 1; + effect = ITEM_HP_CHANGE; BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret; - effect++; + gBattlescriptCurrInstr = BattleScript_RockyHelmetActivates; + PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); + RecordItemEffectBattle(battlerId, HOLD_EFFECT_ROCKY_HELMET); + } + break; + case HOLD_EFFECT_WEAKNESS_POLICY: + if (IsBattlerAlive(battlerId) + && TARGET_TURN_DAMAGED + && gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) + { + effect = ITEM_STATS_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_WeaknessPolicy; + } + break; + case HOLD_EFFECT_SNOWBALL: + if (IsBattlerAlive(battlerId) + && TARGET_TURN_DAMAGED + && moveType == TYPE_ICE) + { + effect = ITEM_STATS_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; + gBattleScripting.statChanger = SET_STATCHANGER(STAT_ATK, 1, FALSE); + } + break; + case HOLD_EFFECT_LUMINOUS_MOSS: + if (IsBattlerAlive(battlerId) + && TARGET_TURN_DAMAGED + && moveType == TYPE_WATER) + { + effect = ITEM_STATS_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; + gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPDEF, 1, FALSE); + } + break; + case HOLD_EFFECT_CELL_BATTERY: + if (IsBattlerAlive(battlerId) + && TARGET_TURN_DAMAGED + && moveType == TYPE_ELECTRIC) + { + effect = ITEM_STATS_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; + gBattleScripting.statChanger = SET_STATCHANGER(STAT_ATK, 1, FALSE); + } + break; + case HOLD_EFFECT_ABSORB_BULB: + if (IsBattlerAlive(battlerId) + && TARGET_TURN_DAMAGED + && moveType == TYPE_WATER) + { + effect = ITEM_STATS_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; + gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPATK, 1, FALSE); + } + break; + case HOLD_EFFECT_JABOCA_BERRY: // consume and damage attacker if used physical move + if (IsBattlerAlive(battlerId) + && TARGET_TURN_DAMAGED + && !DoesSubstituteBlockMove(gBattlerAttacker, battlerId, gCurrentMove) + && IS_MOVE_PHYSICAL(gCurrentMove) + && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) + { + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if (GetBattlerAbility(battlerId) == ABILITY_RIPEN) + gBattleMoveDamage *= 2; + + effect = ITEM_HP_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates; + PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); + RecordItemEffectBattle(battlerId, HOLD_EFFECT_ROCKY_HELMET); + } + break; + case HOLD_EFFECT_ROWAP_BERRY: // consume and damage attacker if used special move + if (IsBattlerAlive(battlerId) + && TARGET_TURN_DAMAGED + && !DoesSubstituteBlockMove(gBattlerAttacker, battlerId, gCurrentMove) + && IS_MOVE_SPECIAL(gCurrentMove) + && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) + { + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if (GetBattlerAbility(battlerId) == ABILITY_RIPEN) + gBattleMoveDamage *= 2; + + effect = ITEM_HP_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates; + PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); + RecordItemEffectBattle(battlerId, HOLD_EFFECT_ROCKY_HELMET); + } + break; + case HOLD_EFFECT_KEE_BERRY: // consume and boost defense if used physical move + effect = DamagedStatBoostBerryEffect(battlerId, STAT_DEF, SPLIT_PHYSICAL); + break; + case HOLD_EFFECT_MARANGA_BERRY: // consume and boost sp. defense if used special move + effect = DamagedStatBoostBerryEffect(battlerId, STAT_SPDEF, SPLIT_SPECIAL); + break; + case HOLD_EFFECT_STICKY_BARB: + if (TARGET_TURN_DAMAGED + && (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) + && !DoesSubstituteBlockMove(gBattlerAttacker, battlerId, gCurrentMove) + && IsBattlerAlive(gBattlerAttacker) + && CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item) + && gBattleMons[gBattlerAttacker].item == ITEM_NONE) + { + // No sticky hold checks. + gEffectBattler = battlerId; // gEffectBattler = target + StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker takes target's barb + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_StickyBarbTransfer; + effect = ITEM_EFFECT_OTHER; } break; } } break; + case ITEMEFFECT_ORBS: + { + u16 battlerAbility = GetBattlerAbility(battlerId); + switch (battlerHoldEffect) + { + case HOLD_EFFECT_TOXIC_ORB: + if (IsBattlerAlive(battlerId) && CanBePoisoned(battlerId, battlerId)) + { + effect = ITEM_STATUS_CHANGE; + gBattleMons[battlerId].status1 = STATUS1_TOXIC_POISON; + BattleScriptExecute(BattleScript_ToxicOrb); + RecordItemEffectBattle(battlerId, battlerHoldEffect); + } + break; + case HOLD_EFFECT_FLAME_ORB: + if (IsBattlerAlive(battlerId) && CanBeBurned(battlerId)) + { + effect = ITEM_STATUS_CHANGE; + gBattleMons[battlerId].status1 = STATUS1_BURN; + BattleScriptExecute(BattleScript_FlameOrb); + RecordItemEffectBattle(battlerId, battlerHoldEffect); + } + break; + case HOLD_EFFECT_STICKY_BARB: // Not an orb per se, but similar effect, and needs to NOT activate with pickpocket + if (battlerAbility != ABILITY_MAGIC_GUARD) + { + gBattleMoveDamage = gBattleMons[battlerId].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptExecute(BattleScript_ItemHurtEnd2); + effect = ITEM_HP_CHANGE; + RecordItemEffectBattle(battlerId, battlerHoldEffect); + PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); + } + break; + } + + if (effect == ITEM_STATUS_CHANGE) + { + gActiveBattler = battlerId; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battlerId].status1); + MarkBattlerForControllerExec(gActiveBattler); + } + } + break; } + // Berry was successfully used on a Pokemon. + if (effect && (gLastUsedItem >= FIRST_BERRY_INDEX && gLastUsedItem <= LAST_BERRY_INDEX)) + gBattleStruct->ateBerry[battlerId & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[battlerId]]; + return effect; } void ClearFuryCutterDestinyBondGrudge(u8 battlerId) { gDisableStructs[battlerId].furyCutterCounter = 0; - gBattleMons[battlerId].status2 &= ~(STATUS2_DESTINY_BOND); - gStatuses3[battlerId] &= ~(STATUS3_GRUDGE); + gBattleMons[battlerId].status2 &= ~STATUS2_DESTINY_BOND; + gStatuses3[battlerId] &= ~STATUS3_GRUDGE; } void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands @@ -3905,37 +7539,69 @@ void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands gBattleScriptingCommandsTable[*gBattlescriptCurrInstr](); } -u8 GetMoveTarget(u16 move, u8 setTarget) +u32 SetRandomTarget(u32 battlerId) +{ + u32 target; + static const u8 targets[2][2] = + { + [B_SIDE_PLAYER] = {B_POSITION_OPPONENT_LEFT, B_POSITION_OPPONENT_RIGHT}, + [B_SIDE_OPPONENT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT}, + }; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + target = GetBattlerAtPosition(targets[GetBattlerSide(battlerId)][Random() % 2]); + if (!IsBattlerAlive(target)) + target ^= BIT_FLANK; + } + else + { + target = GetBattlerAtPosition(targets[GetBattlerSide(battlerId)][0]); + } + + return target; +} + +u32 GetMoveTarget(u16 move, u8 setTarget) { u8 targetBattler = 0; - u8 moveTarget; - u8 side; + u32 i, moveTarget, side; - if (setTarget) + if (setTarget != NO_TARGET_OVERRIDE) moveTarget = setTarget - 1; else - moveTarget = gBattleMoves[move].target; + 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: side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; - if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + if (IsAffectedByFollowMe(gBattlerAttacker, side, move)) + { targetBattler = gSideTimers[side].followmeTarget; + } else { - side = GetBattlerSide(gBattlerAttacker); - do - { - targetBattler = Random() % gBattlersCount; - } while (targetBattler == gBattlerAttacker || side == GetBattlerSide(targetBattler) || gAbsentBattlerFlags & gBitTable[targetBattler]); + targetBattler = SetRandomTarget(gBattlerAttacker); if (gBattleMoves[move].type == TYPE_ELECTRIC - && AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBattlerAttacker, ABILITY_LIGHTNING_ROD, 0, 0) - && gBattleMons[targetBattler].ability != ABILITY_LIGHTNING_ROD) + && IsAbilityOnOpposingSide(gBattlerAttacker, ABILITY_LIGHTNING_ROD) + && GetBattlerAbility(targetBattler) != ABILITY_LIGHTNING_ROD) { targetBattler ^= BIT_FLANK; RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability); - gSpecialStatuses[targetBattler].lightningRodRedirected = 1; + gSpecialStatuses[targetBattler].lightningRodRedirected = TRUE; + } + else if (gBattleMoves[move].type == TYPE_WATER + && IsAbilityOnOpposingSide(gBattlerAttacker, ABILITY_STORM_DRAIN) + && GetBattlerAbility(targetBattler) != ABILITY_STORM_DRAIN) + { + targetBattler ^= BIT_FLANK; + RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability); + gSpecialStatuses[targetBattler].stormDrainRedirected = TRUE; } } break; @@ -3944,39 +7610,29 @@ u8 GetMoveTarget(u16 move, u8 setTarget) case MOVE_TARGET_FOES_AND_ALLY: case MOVE_TARGET_OPPONENTS_FIELD: targetBattler = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE); - if (gAbsentBattlerFlags & gBitTable[targetBattler]) + if (!IsBattlerAlive(targetBattler)) targetBattler ^= BIT_FLANK; break; case MOVE_TARGET_RANDOM: side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; - if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + if (IsAffectedByFollowMe(gBattlerAttacker, side, move)) targetBattler = gSideTimers[side].followmeTarget; else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM) - { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - if (Random() & 1) - targetBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - else - targetBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - } - else - { - if (Random() & 1) - targetBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - else - targetBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - } - if (gAbsentBattlerFlags & gBitTable[targetBattler]) - targetBattler ^= BIT_FLANK; - } + targetBattler = SetRandomTarget(gBattlerAttacker); else targetBattler = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE); break; case MOVE_TARGET_USER_OR_SELECTED: case MOVE_TARGET_USER: + default: targetBattler = gBattlerAttacker; break; + case MOVE_TARGET_ALLY: + if (IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker))) + targetBattler = BATTLE_PARTNER(gBattlerAttacker); + else + targetBattler = gBattlerAttacker; + break; } *(gBattleStruct->moveTarget + gBattlerAttacker) = targetBattler; @@ -4037,7 +7693,7 @@ u8 IsMonDisobedient(void) // is not obedient if (gCurrentMove == MOVE_RAGE) - gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_RAGE); + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_RAGE; if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK)) { gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep; @@ -4048,7 +7704,7 @@ u8 IsMonDisobedient(void) calc = (gBattleMons[gBattlerAttacker].level + obedienceLevel) * rnd >> 8; if (calc < obedienceLevel) { - calc = CheckMoveLimitations(gBattlerAttacker, gBitTable[gCurrMovePos], 0xFF); + calc = CheckMoveLimitations(gBattlerAttacker, gBitTable[gCurrMovePos], MOVE_LIMITATIONS_ALL); if (calc == 0xF) // all moves cannot be used { // Randomly select, then print a disobedient string @@ -4066,8 +7722,8 @@ u8 IsMonDisobedient(void) gCalledMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove; - gBattlerTarget = GetMoveTarget(gCalledMove, 0); - gHitMarker |= HITMARKER_x200000; + gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); + gHitMarker |= HITMARKER_DISOBEDIENT_MOVE; return 2; } } @@ -4076,7 +7732,7 @@ u8 IsMonDisobedient(void) obedienceLevel = gBattleMons[gBattlerAttacker].level - obedienceLevel; calc = (Random() & 255); - if (calc < obedienceLevel && !(gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY) && gBattleMons[gBattlerAttacker].ability != ABILITY_VITAL_SPIRIT && gBattleMons[gBattlerAttacker].ability != ABILITY_INSOMNIA) + if (calc < obedienceLevel && CanSleep(gBattlerAttacker)) { // try putting asleep int i; @@ -4094,7 +7750,7 @@ u8 IsMonDisobedient(void) calc -= obedienceLevel; if (calc < obedienceLevel) { - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerAttacker], MOVE_POUND, 0, 40, 0, gBattlerAttacker, gBattlerAttacker); + gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE); gBattlerTarget = gBattlerAttacker; gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; @@ -4110,3 +7766,2502 @@ u8 IsMonDisobedient(void) } } } + +u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) +{ + if (checkNegating) + { + if (gStatuses3[battlerId] & STATUS3_EMBARGO) + return HOLD_EFFECT_NONE; + if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) + return HOLD_EFFECT_NONE; + if (GetBattlerAbility(battlerId) == ABILITY_KLUTZ) + return HOLD_EFFECT_NONE; + } + + gPotentialItemEffectBattler = battlerId; + + if (B_ENABLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId] != 0 && gBattleMons[battlerId].item) + return gBattleStruct->debugHoldEffects[battlerId]; + else if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) + return gEnigmaBerries[battlerId].holdEffect; + else + return ItemId_GetHoldEffect(gBattleMons[battlerId].item); +} + +u32 GetBattlerHoldEffectParam(u8 battlerId) +{ + if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) + return gEnigmaBerries[battlerId].holdEffectParam; + else + return ItemId_GetHoldEffectParam(gBattleMons[battlerId].item); +} + +bool32 IsMoveMakingContact(u16 move, u8 battlerAtk) +{ + if (!(gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + { + if (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory) + return TRUE; + else + return FALSE; + } + else if (GetBattlerAbility(battlerAtk) == ABILITY_LONG_REACH) + { + return FALSE; + } + else if (GetBattlerHoldEffect(battlerAtk, TRUE) == HOLD_EFFECT_PROTECTIVE_PADS) + { + return FALSE; + } + else + { + return TRUE; + } +} + +bool32 IsBattlerProtected(u8 battlerId, u16 move) +{ + // Decorate bypasses protect and detect, but not crafty shield + if (move == MOVE_DECORATE) + { + if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_CRAFTY_SHIELD) + return TRUE; + else if (gProtectStructs[battlerId].protected) + return FALSE; + } + + // Protective Pads doesn't stop Unseen Fist from bypassing Protect effects, so IsMoveMakingContact() isn't used here. + // This means extra logic is needed to handle Shell Side Arm. + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT || (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory))) + return FALSE; + else if (!(gBattleMoves[move].flags & FLAG_PROTECT_AFFECTED)) + return FALSE; + else if (gBattleMoves[move].effect == MOVE_EFFECT_FEINT) + return FALSE; + else if (gProtectStructs[battlerId].protected) + return TRUE; + else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD + && GetBattlerMoveTargetType(gBattlerAttacker, move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) + return TRUE; + else if (gProtectStructs[battlerId].banefulBunkered) + return TRUE; + else if (gProtectStructs[battlerId].obstructed && !IS_MOVE_STATUS(move)) + return TRUE; + else if (gProtectStructs[battlerId].spikyShielded) + return TRUE; + else if (gProtectStructs[battlerId].kingsShielded && gBattleMoves[move].power != 0) + return TRUE; + else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_QUICK_GUARD + && GetChosenMovePriority(gBattlerAttacker) > 0) + return TRUE; + else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_CRAFTY_SHIELD + && IS_MOVE_STATUS(move)) + return TRUE; + else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_MAT_BLOCK + && !IS_MOVE_STATUS(move)) + return TRUE; + else + return FALSE; +} + +// Only called directly when calculating damage type effectiveness +static bool32 IsBattlerGrounded2(u8 battlerId, bool32 considerInverse) +{ + if (GetBattlerHoldEffect(battlerId, TRUE) == HOLD_EFFECT_IRON_BALL) + return TRUE; + if (gFieldStatuses & STATUS_FIELD_GRAVITY) + return TRUE; +#if B_ROOTED_GROUNDING >= GEN_4 + if (gStatuses3[battlerId] & STATUS3_ROOTED) + return TRUE; +#endif + if (gStatuses3[battlerId] & STATUS3_SMACKED_DOWN) + return TRUE; + if (gStatuses3[battlerId] & STATUS3_TELEKINESIS) + return FALSE; + if (gStatuses3[battlerId] & STATUS3_MAGNET_RISE) + return FALSE; + if (GetBattlerHoldEffect(battlerId, TRUE) == HOLD_EFFECT_AIR_BALLOON) + return FALSE; + if (GetBattlerAbility(battlerId) == ABILITY_LEVITATE) + return FALSE; + if (IS_BATTLER_OF_TYPE(battlerId, TYPE_FLYING) && (!considerInverse || !FlagGet(B_FLAG_INVERSE_BATTLE))) + return FALSE; + return TRUE; +} + +bool32 IsBattlerGrounded(u8 battlerId) +{ + IsBattlerGrounded2(battlerId, FALSE); +} + +bool32 IsBattlerAlive(u8 battlerId) +{ + if (gBattleMons[battlerId].hp == 0) + return FALSE; + else if (battlerId >= gBattlersCount) + return FALSE; + else if (gAbsentBattlerFlags & gBitTable[battlerId]) + return FALSE; + else + return TRUE; +} + +u8 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u16 move) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + if (battleMon->moves[i] == move) + break; + } + return i; +} + +u32 GetBattlerWeight(u8 battlerId) +{ + u32 i; + u32 weight = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[battlerId].species), 1); + u32 ability = GetBattlerAbility(battlerId); + u32 holdEffect = GetBattlerHoldEffect(battlerId, TRUE); + + if (ability == ABILITY_HEAVY_METAL) + weight *= 2; + else if (ability == ABILITY_LIGHT_METAL) + weight /= 2; + + if (holdEffect == HOLD_EFFECT_FLOAT_STONE) + weight /= 2; + + for (i = 0; i < gDisableStructs[battlerId].autotomizeCount; i++) + { + if (weight > 1000) + { + weight -= 1000; + } + else if (weight <= 1000) + { + weight = 1; + break; + } + } + + if (weight == 0) + weight = 1; + + return weight; +} + +u32 CountBattlerStatIncreases(u8 battlerId, bool32 countEvasionAcc) +{ + u32 i; + u32 count = 0; + + for (i = 0; i < NUM_BATTLE_STATS; i++) + { + if ((i == STAT_ACC || i == STAT_EVASION) && !countEvasionAcc) + continue; + if (gBattleMons[battlerId].statStages[i] > DEFAULT_STAT_STAGE) // Stat is increased. + count += gBattleMons[battlerId].statStages[i] - DEFAULT_STAT_STAGE; + } + + return count; +} + +u32 GetMoveTargetCount(u16 move, u8 battlerAtk, u8 battlerDef) +{ + switch (GetBattlerMoveTargetType(gBattlerAttacker, move)) + { + case MOVE_TARGET_BOTH: + return IsBattlerAlive(battlerDef) + + IsBattlerAlive(BATTLE_PARTNER(battlerDef)); + case MOVE_TARGET_FOES_AND_ALLY: + return IsBattlerAlive(battlerDef) + + IsBattlerAlive(BATTLE_PARTNER(battlerDef)) + + IsBattlerAlive(BATTLE_PARTNER(battlerAtk)); + case MOVE_TARGET_OPPONENTS_FIELD: + return 1; + case MOVE_TARGET_DEPENDS: + case MOVE_TARGET_SELECTED: + case MOVE_TARGET_RANDOM: + case MOVE_TARGET_USER_OR_SELECTED: + return IsBattlerAlive(battlerDef); + case MOVE_TARGET_USER: + return IsBattlerAlive(battlerAtk); + default: + return 0; + } +} + +static void MulModifier(u16 *modifier, u16 val) +{ + *modifier = UQ_4_12_TO_INT((*modifier * val) + UQ_4_12_ROUND); +} + +static u32 ApplyModifier(u16 modifier, u32 val) +{ + return UQ_4_12_TO_INT((modifier * val) + UQ_4_12_ROUND); +} + +static const u8 sFlailHpScaleToPowerTable[] = +{ + 1, 200, + 4, 150, + 9, 100, + 16, 80, + 32, 40, + 48, 20 +}; + +// format: min. weight (hectograms), base power +static const u16 sWeightToDamageTable[] = +{ + 100, 20, + 250, 40, + 500, 60, + 1000, 80, + 2000, 100, + 0xFFFF, 0xFFFF +}; + +static const u8 sSpeedDiffPowerTable[] = {40, 60, 80, 120, 150}; +static const u8 sHeatCrashPowerTable[] = {40, 40, 60, 80, 100, 120}; +static const u8 sTrumpCardPowerTable[] = {200, 80, 60, 50, 40}; + +const struct TypePower gNaturalGiftTable[] = +{ + [ITEM_TO_BERRY(ITEM_CHERI_BERRY)] = {TYPE_FIRE, 80}, + [ITEM_TO_BERRY(ITEM_CHESTO_BERRY)] = {TYPE_WATER, 80}, + [ITEM_TO_BERRY(ITEM_PECHA_BERRY)] = {TYPE_ELECTRIC, 80}, + [ITEM_TO_BERRY(ITEM_RAWST_BERRY)] = {TYPE_GRASS, 80}, + [ITEM_TO_BERRY(ITEM_ASPEAR_BERRY)] = {TYPE_ICE, 80}, + [ITEM_TO_BERRY(ITEM_LEPPA_BERRY)] = {TYPE_FIGHTING, 80}, + [ITEM_TO_BERRY(ITEM_ORAN_BERRY)] = {TYPE_POISON, 80}, + [ITEM_TO_BERRY(ITEM_PERSIM_BERRY)] = {TYPE_GROUND, 80}, + [ITEM_TO_BERRY(ITEM_LUM_BERRY)] = {TYPE_FLYING, 80}, + [ITEM_TO_BERRY(ITEM_SITRUS_BERRY)] = {TYPE_PSYCHIC, 80}, + [ITEM_TO_BERRY(ITEM_FIGY_BERRY)] = {TYPE_BUG, 80}, + [ITEM_TO_BERRY(ITEM_WIKI_BERRY)] = {TYPE_ROCK, 80}, + [ITEM_TO_BERRY(ITEM_MAGO_BERRY)] = {TYPE_GHOST, 80}, + [ITEM_TO_BERRY(ITEM_AGUAV_BERRY)] = {TYPE_DRAGON, 80}, + [ITEM_TO_BERRY(ITEM_IAPAPA_BERRY)] = {TYPE_DARK, 80}, + [ITEM_TO_BERRY(ITEM_RAZZ_BERRY)] = {TYPE_STEEL, 80}, + [ITEM_TO_BERRY(ITEM_OCCA_BERRY)] = {TYPE_FIRE, 80}, + [ITEM_TO_BERRY(ITEM_PASSHO_BERRY)] = {TYPE_WATER, 80}, + [ITEM_TO_BERRY(ITEM_WACAN_BERRY)] = {TYPE_ELECTRIC, 80}, + [ITEM_TO_BERRY(ITEM_RINDO_BERRY)] = {TYPE_GRASS, 80}, + [ITEM_TO_BERRY(ITEM_YACHE_BERRY)] = {TYPE_ICE, 80}, + [ITEM_TO_BERRY(ITEM_CHOPLE_BERRY)] = {TYPE_FIGHTING, 80}, + [ITEM_TO_BERRY(ITEM_KEBIA_BERRY)] = {TYPE_POISON, 80}, + [ITEM_TO_BERRY(ITEM_SHUCA_BERRY)] = {TYPE_GROUND, 80}, + [ITEM_TO_BERRY(ITEM_COBA_BERRY)] = {TYPE_FLYING, 80}, + [ITEM_TO_BERRY(ITEM_PAYAPA_BERRY)] = {TYPE_PSYCHIC, 80}, + [ITEM_TO_BERRY(ITEM_TANGA_BERRY)] = {TYPE_BUG, 80}, + [ITEM_TO_BERRY(ITEM_CHARTI_BERRY)] = {TYPE_ROCK, 80}, + [ITEM_TO_BERRY(ITEM_KASIB_BERRY)] = {TYPE_GHOST, 80}, + [ITEM_TO_BERRY(ITEM_HABAN_BERRY)] = {TYPE_DRAGON, 80}, + [ITEM_TO_BERRY(ITEM_COLBUR_BERRY)] = {TYPE_DARK, 80}, + [ITEM_TO_BERRY(ITEM_BABIRI_BERRY)] = {TYPE_STEEL, 80}, + [ITEM_TO_BERRY(ITEM_CHILAN_BERRY)] = {TYPE_NORMAL, 80}, + [ITEM_TO_BERRY(ITEM_ROSELI_BERRY)] = {TYPE_FAIRY, 80}, + [ITEM_TO_BERRY(ITEM_BLUK_BERRY)] = {TYPE_FIRE, 90}, + [ITEM_TO_BERRY(ITEM_NANAB_BERRY)] = {TYPE_WATER, 90}, + [ITEM_TO_BERRY(ITEM_WEPEAR_BERRY)] = {TYPE_ELECTRIC, 90}, + [ITEM_TO_BERRY(ITEM_PINAP_BERRY)] = {TYPE_GRASS, 90}, + [ITEM_TO_BERRY(ITEM_POMEG_BERRY)] = {TYPE_ICE, 90}, + [ITEM_TO_BERRY(ITEM_KELPSY_BERRY)] = {TYPE_FIGHTING, 90}, + [ITEM_TO_BERRY(ITEM_QUALOT_BERRY)] = {TYPE_POISON, 90}, + [ITEM_TO_BERRY(ITEM_HONDEW_BERRY)] = {TYPE_GROUND, 90}, + [ITEM_TO_BERRY(ITEM_GREPA_BERRY)] = {TYPE_FLYING, 90}, + [ITEM_TO_BERRY(ITEM_TAMATO_BERRY)] = {TYPE_PSYCHIC, 90}, + [ITEM_TO_BERRY(ITEM_CORNN_BERRY)] = {TYPE_BUG, 90}, + [ITEM_TO_BERRY(ITEM_MAGOST_BERRY)] = {TYPE_ROCK, 90}, + [ITEM_TO_BERRY(ITEM_RABUTA_BERRY)] = {TYPE_GHOST, 90}, + [ITEM_TO_BERRY(ITEM_NOMEL_BERRY)] = {TYPE_DRAGON, 90}, + [ITEM_TO_BERRY(ITEM_SPELON_BERRY)] = {TYPE_DARK, 90}, + [ITEM_TO_BERRY(ITEM_PAMTRE_BERRY)] = {TYPE_STEEL, 90}, + [ITEM_TO_BERRY(ITEM_WATMEL_BERRY)] = {TYPE_FIRE, 100}, + [ITEM_TO_BERRY(ITEM_DURIN_BERRY)] = {TYPE_WATER, 100}, + [ITEM_TO_BERRY(ITEM_BELUE_BERRY)] = {TYPE_ELECTRIC, 100}, + [ITEM_TO_BERRY(ITEM_LIECHI_BERRY)] = {TYPE_GRASS, 100}, + [ITEM_TO_BERRY(ITEM_GANLON_BERRY)] = {TYPE_ICE, 100}, + [ITEM_TO_BERRY(ITEM_SALAC_BERRY)] = {TYPE_FIGHTING, 100}, + [ITEM_TO_BERRY(ITEM_PETAYA_BERRY)] = {TYPE_POISON, 100}, + [ITEM_TO_BERRY(ITEM_APICOT_BERRY)] = {TYPE_GROUND, 100}, + [ITEM_TO_BERRY(ITEM_LANSAT_BERRY)] = {TYPE_FLYING, 100}, + [ITEM_TO_BERRY(ITEM_STARF_BERRY)] = {TYPE_PSYCHIC, 100}, + [ITEM_TO_BERRY(ITEM_ENIGMA_BERRY)] = {TYPE_BUG, 100}, + [ITEM_TO_BERRY(ITEM_MICLE_BERRY)] = {TYPE_ROCK, 100}, + [ITEM_TO_BERRY(ITEM_CUSTAP_BERRY)] = {TYPE_GHOST, 100}, + [ITEM_TO_BERRY(ITEM_JABOCA_BERRY)] = {TYPE_DRAGON, 100}, + [ITEM_TO_BERRY(ITEM_ROWAP_BERRY)] = {TYPE_DARK, 100}, + [ITEM_TO_BERRY(ITEM_KEE_BERRY)] = {TYPE_FAIRY, 100}, + [ITEM_TO_BERRY(ITEM_MARANGA_BERRY)] = {TYPE_DARK, 100}, +}; + +static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) +{ + u32 i; + u16 basePower = gBattleMoves[move].power; + u32 weight, hpFraction, speed; + + if (gBattleStruct->zmove.active) + return gBattleMoves[gBattleStruct->zmove.baseMoves[battlerAtk]].zMovePower; + + switch (gBattleMoves[move].effect) + { + case EFFECT_PLEDGE: + // todo + break; + case EFFECT_FLING: + basePower = ItemId_GetFlingPower(gBattleMons[battlerAtk].item); + break; + case EFFECT_ERUPTION: + basePower = gBattleMons[battlerAtk].hp * basePower / gBattleMons[battlerAtk].maxHP; + break; + case EFFECT_FLAIL: + hpFraction = GetScaledHPFraction(gBattleMons[battlerAtk].hp, gBattleMons[battlerAtk].maxHP, 48); + for (i = 0; i < sizeof(sFlailHpScaleToPowerTable); i += 2) + { + if (hpFraction <= sFlailHpScaleToPowerTable[i]) + break; + } + basePower = sFlailHpScaleToPowerTable[i + 1]; + break; + case EFFECT_RETURN: + basePower = 10 * (gBattleMons[battlerAtk].friendship) / 25; + break; + case EFFECT_FRUSTRATION: + basePower = 10 * (MAX_FRIENDSHIP - gBattleMons[battlerAtk].friendship) / 25; + break; + case EFFECT_FURY_CUTTER: + for (i = 1; i < gDisableStructs[battlerAtk].furyCutterCounter; i++) + basePower *= 2; + break; + case EFFECT_ROLLOUT: + for (i = 1; i < (5 - gDisableStructs[battlerAtk].rolloutTimer); i++) + basePower *= 2; + if (gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL) + basePower *= 2; + break; + case EFFECT_MAGNITUDE: + basePower = gBattleStruct->magnitudeBasePower; + break; + case EFFECT_PRESENT: + basePower = gBattleStruct->presentBasePower; + break; + case EFFECT_TRIPLE_KICK: + basePower += gBattleScripting.tripleKickPower; + break; + case EFFECT_SPIT_UP: + basePower = 100 * gDisableStructs[battlerAtk].stockpileCounter; + break; + case EFFECT_REVENGE: + if ((gProtectStructs[battlerAtk].physicalDmg + && gProtectStructs[battlerAtk].physicalBattlerId == battlerDef) + || (gProtectStructs[battlerAtk].specialDmg + && gProtectStructs[battlerAtk].specialBattlerId == battlerDef)) + basePower *= 2; + break; + case EFFECT_WEATHER_BALL: + if (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT) + basePower *= 2; + break; + case EFFECT_PURSUIT: + if (gActionsByTurnOrder[GetBattlerTurnOrderNum(gBattlerTarget)] == B_ACTION_SWITCH) + basePower *= 2; + break; + case EFFECT_NATURAL_GIFT: + basePower = gNaturalGiftTable[ITEM_TO_BERRY(gBattleMons[battlerAtk].item)].power; + break; + case EFFECT_WAKE_UP_SLAP: + if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP || GetBattlerAbility(battlerDef) == ABILITY_COMATOSE) + basePower *= 2; + break; + case EFFECT_SMELLINGSALT: + if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS) + basePower *= 2; + break; + case EFFECT_WRING_OUT: + basePower = 120 * gBattleMons[battlerDef].hp / gBattleMons[battlerDef].maxHP; + break; + case EFFECT_HEX: + if (gBattleMons[battlerDef].status1 & STATUS1_ANY || GetBattlerAbility(battlerDef) == ABILITY_COMATOSE) + basePower *= 2; + break; + case EFFECT_ASSURANCE: + if (gProtectStructs[battlerDef].physicalDmg != 0 || gProtectStructs[battlerDef].specialDmg != 0 || gProtectStructs[battlerDef].confusionSelfDmg) + basePower *= 2; + break; + case EFFECT_TRUMP_CARD: + i = GetBattleMonMoveSlot(&gBattleMons[battlerAtk], move); + if (i != 4) + { + if (gBattleMons[battlerAtk].pp[i] >= ARRAY_COUNT(sTrumpCardPowerTable)) + basePower = sTrumpCardPowerTable[ARRAY_COUNT(sTrumpCardPowerTable) - 1]; + else + basePower = sTrumpCardPowerTable[gBattleMons[battlerAtk].pp[i]]; + } + break; + case EFFECT_ACROBATICS: + if (gBattleMons[battlerAtk].item == ITEM_NONE + // Edge case, because removal of items happens after damage calculation. + || (gSpecialStatuses[battlerAtk].gemBoost && GetBattlerHoldEffect(battlerAtk, FALSE) == HOLD_EFFECT_GEMS)) + basePower *= 2; + break; + case EFFECT_LOW_KICK: + weight = GetBattlerWeight(battlerDef); + for (i = 0; sWeightToDamageTable[i] != 0xFFFF; i += 2) + { + if (sWeightToDamageTable[i] > weight) + break; + } + if (sWeightToDamageTable[i] != 0xFFFF) + basePower = sWeightToDamageTable[i + 1]; + else + basePower = 120; + break; + case EFFECT_HEAT_CRASH: + weight = GetBattlerWeight(battlerAtk) / GetBattlerWeight(battlerDef); + if (weight >= ARRAY_COUNT(sHeatCrashPowerTable)) + basePower = sHeatCrashPowerTable[ARRAY_COUNT(sHeatCrashPowerTable) - 1]; + else + basePower = sHeatCrashPowerTable[weight]; + break; + case EFFECT_PUNISHMENT: + basePower = 60 + (CountBattlerStatIncreases(battlerDef, FALSE) * 20); + if (basePower > 200) + basePower = 200; + break; + case EFFECT_STORED_POWER: + basePower += (CountBattlerStatIncreases(battlerAtk, TRUE) * 20); + break; + case EFFECT_ELECTRO_BALL: + speed = GetBattlerTotalSpeedStat(battlerAtk) / GetBattlerTotalSpeedStat(battlerDef); + if (speed >= ARRAY_COUNT(sSpeedDiffPowerTable)) + speed = ARRAY_COUNT(sSpeedDiffPowerTable) - 1; + basePower = sSpeedDiffPowerTable[speed]; + break; + case EFFECT_GYRO_BALL: + basePower = ((25 * GetBattlerTotalSpeedStat(battlerDef)) / GetBattlerTotalSpeedStat(battlerAtk)) + 1; + if (basePower > 150) + basePower = 150; + break; + case EFFECT_ECHOED_VOICE: + // gBattleStruct->sameMoveTurns incremented in ppreduce + if (gBattleStruct->sameMoveTurns[battlerAtk] != 0) + { + basePower += (basePower * gBattleStruct->sameMoveTurns[battlerAtk]); + if (basePower > 200) + basePower = 200; + } + break; + case EFFECT_PAYBACK: + if (GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef) + && (gDisableStructs[battlerDef].isFirstTurn != 2 || B_PAYBACK_SWITCH_BOOST < GEN_5)) + basePower *= 2; + break; + case EFFECT_BOLT_BEAK: + if (GetBattlerTurnOrderNum(battlerAtk) < GetBattlerTurnOrderNum(battlerDef) + || gDisableStructs[battlerDef].isFirstTurn == 2) + basePower *= 2; + break; + case EFFECT_ROUND: + if (gChosenMoveByBattler[BATTLE_PARTNER(battlerAtk)] == MOVE_ROUND && !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerAtk)])) + basePower *= 2; + break; + case EFFECT_FUSION_COMBO: + if (gBattleMoves[gLastUsedMove].effect == EFFECT_FUSION_COMBO && move != gLastUsedMove) + basePower *= 2; + break; + case EFFECT_LASH_OUT: + if (gProtectStructs[battlerAtk].statFell) + basePower *= 2; + break; + case EFFECT_EXPLOSION: + if (move == MOVE_MISTY_EXPLOSION && gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN && IsBattlerGrounded(battlerAtk)) + MulModifier(&basePower, UQ_4_12(1.5)); + break; + case EFFECT_DYNAMAX_DOUBLE_DMG: + #ifdef B_DYNAMAX + if (IsDynamaxed(battlerDef)) + basePower *= 2; + #endif + break; + case EFFECT_HIDDEN_POWER: + { + #if B_HIDDEN_POWER_DMG < GEN_6 + u8 powerBits; + + powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1) + | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0) + | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1) + | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2) + | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3) + | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4); + + basePower = (40 * powerBits) / 63 + 30; + #endif + break; + } + case EFFECT_GRAV_APPLE: + if (gFieldStatuses & STATUS_FIELD_GRAVITY) + MulModifier(&basePower, UQ_4_12(1.5)); + break; + case EFFECT_TERRAIN_PULSE: + if ((gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + && IsBattlerGrounded(gBattlerAttacker)) + basePower *= 2; + break; + case EFFECT_EXPANDING_FORCE: + if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_PSYCHIC_TERRAIN)) + MulModifier(&basePower, UQ_4_12(1.5)); + break; + case EFFECT_RISING_VOLTAGE: + if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) + basePower *= 2; + break; + } + + // Move-specific base power changes + switch (move) + { + case MOVE_WATER_SHURIKEN: + if (gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH) + basePower = 20; + break; + } + + if (basePower == 0) + basePower = 1; + return basePower; +} + +static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 updateFlags) +{ + u32 i, ability; + u32 holdEffectAtk, holdEffectParamAtk; + u16 basePower = CalcMoveBasePower(move, battlerAtk, battlerDef); + u16 holdEffectModifier; + u16 modifier = UQ_4_12(1.0); + u32 atkSide = GET_BATTLER_SIDE(battlerAtk); + + // attacker's abilities + switch (GetBattlerAbility(battlerAtk)) + { + case ABILITY_TECHNICIAN: + if (basePower <= 60) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_FLARE_BOOST: + if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && IS_MOVE_SPECIAL(move)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_TOXIC_BOOST: + if (gBattleMons[battlerAtk].status1 & STATUS1_PSN_ANY && IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_RECKLESS: + if (gBattleMoves[move].flags & FLAG_RECKLESS_BOOST) + MulModifier(&modifier, UQ_4_12(1.2)); + break; + case ABILITY_IRON_FIST: + if (gBattleMoves[move].flags & FLAG_IRON_FIST_BOOST) + MulModifier(&modifier, UQ_4_12(1.2)); + break; + case ABILITY_SHEER_FORCE: + if (gBattleMoves[move].flags & FLAG_SHEER_FORCE_BOOST) + MulModifier(&modifier, UQ_4_12(1.3)); + break; + case ABILITY_SAND_FORCE: + if ((moveType == TYPE_STEEL || moveType == TYPE_ROCK || moveType == TYPE_GROUND) + && gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT) + MulModifier(&modifier, UQ_4_12(1.3)); + break; + case ABILITY_RIVALRY: + if (GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality) != MON_GENDERLESS + && GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality) != MON_GENDERLESS) + { + if (GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality) + == GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality)) + MulModifier(&modifier, UQ_4_12(1.25)); + else + MulModifier(&modifier, UQ_4_12(0.75)); + } + break; + case ABILITY_ANALYTIC: + if (GetBattlerTurnOrderNum(battlerAtk) == gBattlersCount - 1 && move != MOVE_FUTURE_SIGHT && move != MOVE_DOOM_DESIRE) + MulModifier(&modifier, UQ_4_12(1.3)); + break; + case ABILITY_TOUGH_CLAWS: + if (IsMoveMakingContact(move, battlerAtk)) + MulModifier(&modifier, UQ_4_12(1.3)); + break; + case ABILITY_STRONG_JAW: + if (gBattleMoves[move].flags & FLAG_STRONG_JAW_BOOST) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_MEGA_LAUNCHER: + if (gBattleMoves[move].flags & FLAG_MEGA_LAUNCHER_BOOST) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_WATER_BUBBLE: + if (moveType == TYPE_WATER) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case ABILITY_STEELWORKER: + if (moveType == TYPE_STEEL) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_PIXILATE: + if (moveType == TYPE_FAIRY && gBattleStruct->ateBoost[battlerAtk]) + MulModifier(&modifier, UQ_4_12(1.2)); + break; + case ABILITY_GALVANIZE: + if (moveType == TYPE_ELECTRIC && gBattleStruct->ateBoost[battlerAtk]) + MulModifier(&modifier, UQ_4_12(1.2)); + break; + case ABILITY_REFRIGERATE: + if (moveType == TYPE_ICE && gBattleStruct->ateBoost[battlerAtk]) + MulModifier(&modifier, UQ_4_12(1.2)); + break; + case ABILITY_AERILATE: + if (moveType == TYPE_FLYING && gBattleStruct->ateBoost[battlerAtk]) + MulModifier(&modifier, UQ_4_12(1.2)); + break; + case ABILITY_NORMALIZE: + if (moveType == TYPE_NORMAL && gBattleStruct->ateBoost[battlerAtk]) + MulModifier(&modifier, UQ_4_12(1.2)); + break; + case ABILITY_PUNK_ROCK: + if (gBattleMoves[move].flags & FLAG_SOUND) + MulModifier(&modifier, UQ_4_12(1.3)); + break; + case ABILITY_STEELY_SPIRIT: + if (moveType == TYPE_STEEL) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_TRANSISTOR: + if (moveType == TYPE_ELECTRIC) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_DRAGONS_MAW: + if (moveType == TYPE_DRAGON) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_GORILLA_TACTICS: + if (IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + } + + // field abilities + if ((IsAbilityOnField(ABILITY_DARK_AURA) && moveType == TYPE_DARK) + || (IsAbilityOnField(ABILITY_FAIRY_AURA) && moveType == TYPE_FAIRY)) + { + if (IsAbilityOnField(ABILITY_AURA_BREAK)) + MulModifier(&modifier, UQ_4_12(0.75)); + else + MulModifier(&modifier, UQ_4_12(1.33)); + } + + // attacker partner's abilities + if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + { + switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk))) + { + case ABILITY_BATTERY: + if (IS_MOVE_SPECIAL(move)) + MulModifier(&modifier, UQ_4_12(1.3)); + break; + case ABILITY_POWER_SPOT: + MulModifier(&modifier, UQ_4_12(1.3)); + break; + case ABILITY_STEELY_SPIRIT: + if (moveType == TYPE_STEEL) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + } + } + + // target's abilities + ability = GetBattlerAbility(battlerDef); + switch (ability) + { + case ABILITY_HEATPROOF: + case ABILITY_WATER_BUBBLE: + if (moveType == TYPE_FIRE) + { + MulModifier(&modifier, UQ_4_12(0.5)); + if (updateFlags) + RecordAbilityBattle(battlerDef, ability); + } + break; + case ABILITY_DRY_SKIN: + if (moveType == TYPE_FIRE) + MulModifier(&modifier, UQ_4_12(1.25)); + break; + case ABILITY_FLUFFY: + if (IsMoveMakingContact(move, battlerAtk)) + { + MulModifier(&modifier, UQ_4_12(0.5)); + if (updateFlags) + RecordAbilityBattle(battlerDef, ability); + } + if (moveType == TYPE_FIRE) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + } + + holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); + holdEffectParamAtk = GetBattlerHoldEffectParam(battlerAtk); + if (holdEffectParamAtk > 100) + holdEffectParamAtk = 100; + + holdEffectModifier = UQ_4_12(1.0) + sPercentToModifier[holdEffectParamAtk]; + + // attacker's hold effect + switch (holdEffectAtk) + { + case HOLD_EFFECT_MUSCLE_BAND: + if (IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, holdEffectModifier); + break; + case HOLD_EFFECT_WISE_GLASSES: + if (IS_MOVE_SPECIAL(move)) + MulModifier(&modifier, holdEffectModifier); + break; + case HOLD_EFFECT_LUSTROUS_ORB: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_PALKIA && (moveType == TYPE_WATER || moveType == TYPE_DRAGON)) + MulModifier(&modifier, holdEffectModifier); + break; + case HOLD_EFFECT_ADAMANT_ORB: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_DIALGA && (moveType == TYPE_STEEL || moveType == TYPE_DRAGON)) + MulModifier(&modifier, holdEffectModifier); + break; + case HOLD_EFFECT_GRISEOUS_ORB: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_GIRATINA && (moveType == TYPE_GHOST || moveType == TYPE_DRAGON)) + MulModifier(&modifier, holdEffectModifier); + break; + case HOLD_EFFECT_SOUL_DEW: + #if B_SOUL_DEW_BOOST >= GEN_7 + if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) && (moveType == TYPE_PSYCHIC || moveType == TYPE_DRAGON)) + #else + if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && IS_MOVE_SPECIAL(move)) + #endif + MulModifier(&modifier, holdEffectModifier); + break; + case HOLD_EFFECT_GEMS: + if (gSpecialStatuses[battlerAtk].gemBoost && gBattleMons[battlerAtk].item) + MulModifier(&modifier, UQ_4_12(1.0) + sPercentToModifier[gSpecialStatuses[battlerAtk].gemParam]); + break; + case HOLD_EFFECT_BUG_POWER: + case HOLD_EFFECT_STEEL_POWER: + case HOLD_EFFECT_GROUND_POWER: + case HOLD_EFFECT_ROCK_POWER: + case HOLD_EFFECT_GRASS_POWER: + case HOLD_EFFECT_DARK_POWER: + case HOLD_EFFECT_FIGHTING_POWER: + case HOLD_EFFECT_ELECTRIC_POWER: + case HOLD_EFFECT_WATER_POWER: + case HOLD_EFFECT_FLYING_POWER: + case HOLD_EFFECT_POISON_POWER: + case HOLD_EFFECT_ICE_POWER: + case HOLD_EFFECT_GHOST_POWER: + case HOLD_EFFECT_PSYCHIC_POWER: + case HOLD_EFFECT_FIRE_POWER: + case HOLD_EFFECT_DRAGON_POWER: + case HOLD_EFFECT_NORMAL_POWER: + case HOLD_EFFECT_FAIRY_POWER: + for (i = 0; i < ARRAY_COUNT(sHoldEffectToType); i++) + { + if (holdEffectAtk == sHoldEffectToType[i][0]) + { + if (moveType == sHoldEffectToType[i][1]) + MulModifier(&modifier, holdEffectModifier); + break; + } + } + break; + case HOLD_EFFECT_PLATE: + if (moveType == ItemId_GetSecondaryId(gBattleMons[battlerAtk].item)) + MulModifier(&modifier, holdEffectModifier); + break; + } + + // move effect + switch (gBattleMoves[move].effect) + { + case EFFECT_FACADE: + if (gBattleMons[battlerAtk].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_PARALYSIS)) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case EFFECT_BRINE: + if (gBattleMons[battlerDef].hp <= (gBattleMons[battlerDef].maxHP / 2)) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case EFFECT_VENOSHOCK: + if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case EFFECT_RETALIATE: + if (gSideTimers[atkSide].retaliateTimer == 1) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case EFFECT_SOLAR_BEAM: + if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN))) + MulModifier(&modifier, UQ_4_12(0.5)); + break; + case EFFECT_STOMPING_TANTRUM: + if (gBattleStruct->lastMoveFailed & gBitTable[battlerAtk]) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case EFFECT_BULLDOZE: + case EFFECT_MAGNITUDE: + case EFFECT_EARTHQUAKE: + if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) + MulModifier(&modifier, UQ_4_12(0.5)); + break; + case EFFECT_KNOCK_OFF: + #if B_KNOCK_OFF_DMG >= GEN_6 + if (gBattleMons[battlerDef].item != ITEM_NONE + && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item)) + MulModifier(&modifier, UQ_4_12(1.5)); + #endif + break; + } + + // various effecs + if (gProtectStructs[battlerAtk].helpingHand) + MulModifier(&modifier, UQ_4_12(1.5)); + if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP && moveType == TYPE_ELECTRIC) + MulModifier(&modifier, UQ_4_12(2.0)); + if (gStatuses3[battlerAtk] & STATUS3_ME_FIRST) + MulModifier(&modifier, UQ_4_12(1.5)); + if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && moveType == TYPE_GRASS && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE)) + MulModifier(&modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8) ? UQ_4_12(1.3) : UQ_4_12(1.5)); + if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN && moveType == TYPE_DRAGON && IsBattlerGrounded(battlerDef) && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) + MulModifier(&modifier, UQ_4_12(0.5)); + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && moveType == TYPE_ELECTRIC && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE)) + MulModifier(&modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8) ? UQ_4_12(1.3) : UQ_4_12(1.5)); + if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN && moveType == TYPE_PSYCHIC && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE)) + MulModifier(&modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8) ? UQ_4_12(1.3) : UQ_4_12(1.5)); + #if B_SPORT_TURNS >= GEN_6 + if ((gFieldStatuses & STATUS_FIELD_MUDSPORT && moveType == TYPE_ELECTRIC) + || (gFieldStatuses & STATUS_FIELD_WATERSPORT && moveType == TYPE_FIRE)) + MulModifier(&modifier, (B_SPORT_DMG_REDUCTION >= GEN_5) ? UQ_4_12(0.23) : UQ_4_12(0.5)); + #else + if ((moveType == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_MUD_SPORT, 0)) + || (moveType == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_WATER_SPORT, 0))) + MulModifier(&modifier, (B_SPORT_DMG_REDUCTION >= GEN_5) ? UQ_4_12(0.23) : UQ_4_12(0.5)); + #endif + return ApplyModifier(modifier, basePower); +} + +static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 isCrit, bool32 updateFlags) +{ + u8 atkStage; + u32 atkStat; + u16 modifier; + u16 atkBaseSpeciesId; + + atkBaseSpeciesId = GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species); + + if (gBattleMoves[move].effect == EFFECT_FOUL_PLAY) + { + if (IS_MOVE_PHYSICAL(move)) + { + atkStat = gBattleMons[battlerDef].attack; + atkStage = gBattleMons[battlerDef].statStages[STAT_ATK]; + } + else + { + atkStat = gBattleMons[battlerDef].spAttack; + atkStage = gBattleMons[battlerDef].statStages[STAT_SPATK]; + } + } + else if (gBattleMoves[move].effect == EFFECT_BODY_PRESS) + { + atkStat = gBattleMons[battlerAtk].defense; + atkStage = gBattleMons[battlerAtk].statStages[STAT_DEF]; + } + else + { + if (IS_MOVE_PHYSICAL(move)) + { + atkStat = gBattleMons[battlerAtk].attack; + atkStage = gBattleMons[battlerAtk].statStages[STAT_ATK]; + } + else + { + atkStat = gBattleMons[battlerAtk].spAttack; + atkStage = gBattleMons[battlerAtk].statStages[STAT_SPATK]; + } + } + + // critical hits ignore attack stat's stage drops + if (isCrit && atkStage < DEFAULT_STAT_STAGE) + atkStage = DEFAULT_STAT_STAGE; + // pokemon with unaware ignore attack stat changes while taking damage + if (GetBattlerAbility(battlerDef) == ABILITY_UNAWARE) + atkStage = DEFAULT_STAT_STAGE; + + atkStat *= gStatStageRatios[atkStage][0]; + atkStat /= gStatStageRatios[atkStage][1]; + + // apply attack stat modifiers + modifier = UQ_4_12(1.0); + + // attacker's abilities + switch (GetBattlerAbility(battlerAtk)) + { + case ABILITY_HUGE_POWER: + case ABILITY_PURE_POWER: + if (IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case ABILITY_SLOW_START: + if (gDisableStructs[battlerAtk].slowStartTimer != 0) + MulModifier(&modifier, UQ_4_12(0.5)); + break; + case ABILITY_SOLAR_POWER: + if (IS_MOVE_SPECIAL(move) && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_DEFEATIST: + if (gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 2)) + MulModifier(&modifier, UQ_4_12(0.5)); + break; + case ABILITY_FLASH_FIRE: + if (moveType == TYPE_FIRE && gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_FLASH_FIRE) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_SWARM: + if (moveType == TYPE_BUG && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_TORRENT: + if (moveType == TYPE_WATER && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_BLAZE: + if (moveType == TYPE_FIRE && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_OVERGROW: + if (moveType == TYPE_GRASS && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + #if B_PLUS_MINUS_INTERACTION >= GEN_5 + case ABILITY_PLUS: + case ABILITY_MINUS: + if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + { + u32 partnerAbility = GetBattlerAbility(BATTLE_PARTNER(battlerAtk)); + if (partnerAbility == ABILITY_PLUS || partnerAbility == ABILITY_MINUS) + MulModifier(&modifier, UQ_4_12(1.5)); + } + break; + #else + case ABILITY_PLUS: + if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_MINUS) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_MINUS: + if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_PLUS) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + #endif + case ABILITY_FLOWER_GIFT: + if (gBattleMons[battlerAtk].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_HUSTLE: + if (IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_STAKEOUT: + if (gDisableStructs[battlerDef].isFirstTurn == 2) // just switched in + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case ABILITY_GUTS: + if (gBattleMons[battlerAtk].status1 & STATUS1_ANY && IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + } + + // target's abilities + switch (GetBattlerAbility(battlerDef)) + { + case ABILITY_THICK_FAT: + if (moveType == TYPE_FIRE || moveType == TYPE_ICE) + { + MulModifier(&modifier, UQ_4_12(0.5)); + if (updateFlags) + RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT); + } + break; + case ABILITY_ICE_SCALES: + if (IS_MOVE_SPECIAL(move)) + MulModifier(&modifier, UQ_4_12(0.5)); + break; + } + + // ally's abilities + if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + { + switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk))) + { + case ABILITY_FLOWER_GIFT: + if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerAtk), B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + } + } + + // attacker's hold effect + switch (GetBattlerHoldEffect(battlerAtk, TRUE)) + { + case HOLD_EFFECT_THICK_CLUB: + if ((atkBaseSpeciesId == SPECIES_CUBONE || atkBaseSpeciesId == SPECIES_MAROWAK) && IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case HOLD_EFFECT_DEEP_SEA_TOOTH: + if (gBattleMons[battlerAtk].species == SPECIES_CLAMPERL && IS_MOVE_SPECIAL(move)) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case HOLD_EFFECT_LIGHT_BALL: + if (atkBaseSpeciesId == SPECIES_PIKACHU) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case HOLD_EFFECT_CHOICE_BAND: + if (IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case HOLD_EFFECT_CHOICE_SPECS: + if (IS_MOVE_SPECIAL(move)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + } + + // The offensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 1st badge and 7th badges. + // Having the 1st badge boosts physical attack while having the 7th badge boosts special attack. + if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, battlerAtk) && IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(1.1)); + if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerAtk) && IS_MOVE_SPECIAL(move)) + MulModifier(&modifier, UQ_4_12(1.1)); + + return ApplyModifier(modifier, atkStat); +} + +static bool32 CanEvolve(u32 species) +{ + u32 i; + + for (i = 0; i < EVOS_PER_MON; i++) + { + if (gEvolutionTable[species][i].method + && gEvolutionTable[species][i].method != EVO_MEGA_EVOLUTION + && gEvolutionTable[species][i].method != EVO_MOVE_MEGA_EVOLUTION + && gEvolutionTable[species][i].method != EVO_PRIMAL_REVERSION) + return TRUE; + } + return FALSE; +} + +static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 isCrit, bool32 updateFlags) +{ + bool32 usesDefStat; + u8 defStage; + u32 defStat, def, spDef; + u16 modifier; + + if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped + { + def = gBattleMons[battlerDef].spDefense; + spDef = gBattleMons[battlerDef].defense; + } + else + { + def = gBattleMons[battlerDef].defense; + spDef = gBattleMons[battlerDef].spDefense; + } + + if (gBattleMoves[move].effect == EFFECT_PSYSHOCK || IS_MOVE_PHYSICAL(move)) // uses defense stat instead of sp.def + { + defStat = def; + defStage = gBattleMons[battlerDef].statStages[STAT_DEF]; + usesDefStat = TRUE; + } + else // is special + { + defStat = spDef; + defStage = gBattleMons[battlerDef].statStages[STAT_SPDEF]; + usesDefStat = FALSE; + } + + #if B_EXPLOSION_DEFENSE <= GEN_4 + // Self-destruct / Explosion cut defense in half + if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION) + defStat /= 2; + #endif + + // critical hits ignore positive stat changes + if (isCrit && defStage > DEFAULT_STAT_STAGE) + defStage = DEFAULT_STAT_STAGE; + // pokemon with unaware ignore defense stat changes while dealing damage + if (GetBattlerAbility(battlerAtk) == ABILITY_UNAWARE) + defStage = DEFAULT_STAT_STAGE; + // certain moves also ignore stat changes + if (gBattleMoves[move].flags & FLAG_STAT_STAGES_IGNORED) + defStage = DEFAULT_STAT_STAGE; + + defStat *= gStatStageRatios[defStage][0]; + defStat /= gStatStageRatios[defStage][1]; + + // apply defense stat modifiers + modifier = UQ_4_12(1.0); + + // target's abilities + switch (GetBattlerAbility(battlerDef)) + { + case ABILITY_MARVEL_SCALE: + if (gBattleMons[battlerDef].status1 & STATUS1_ANY && usesDefStat) + { + MulModifier(&modifier, UQ_4_12(1.5)); + if (updateFlags) + RecordAbilityBattle(battlerDef, ABILITY_MARVEL_SCALE); + } + break; + case ABILITY_FUR_COAT: + if (usesDefStat) + { + MulModifier(&modifier, UQ_4_12(2.0)); + if (updateFlags) + RecordAbilityBattle(battlerDef, ABILITY_FUR_COAT); + } + break; + case ABILITY_GRASS_PELT: + if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && usesDefStat) + { + MulModifier(&modifier, UQ_4_12(1.5)); + if (updateFlags) + RecordAbilityBattle(battlerDef, ABILITY_GRASS_PELT); + } + break; + case ABILITY_FLOWER_GIFT: + if (gBattleMons[battlerDef].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && !usesDefStat) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_PUNK_ROCK: + if (gBattleMoves[move].flags & FLAG_SOUND) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + } + + // ally's abilities + if (IsBattlerAlive(BATTLE_PARTNER(battlerDef))) + { + switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef))) + { + case ABILITY_FLOWER_GIFT: + if (gBattleMons[BATTLE_PARTNER(battlerDef)].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerDef), B_WEATHER_SUN) && !usesDefStat) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + } + } + + // target's hold effects + switch (GetBattlerHoldEffect(battlerDef, TRUE)) + { + case HOLD_EFFECT_DEEP_SEA_SCALE: + if (gBattleMons[battlerDef].species == SPECIES_CLAMPERL && !usesDefStat) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case HOLD_EFFECT_METAL_POWDER: + if (gBattleMons[battlerDef].species == SPECIES_DITTO && usesDefStat && !(gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED)) + MulModifier(&modifier, UQ_4_12(2.0)); + break; + case HOLD_EFFECT_EVIOLITE: + if (CanEvolve(gBattleMons[battlerDef].species)) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case HOLD_EFFECT_ASSAULT_VEST: + if (!usesDefStat) + MulModifier(&modifier, UQ_4_12(1.5)); + break; +#if B_SOUL_DEW_BOOST <= GEN_6 + case HOLD_EFFECT_SOUL_DEW: + if ((gBattleMons[battlerDef].species == SPECIES_LATIAS || gBattleMons[battlerDef].species == SPECIES_LATIOS) + && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + && !usesDefStat) + MulModifier(&modifier, UQ_4_12(1.5)); + break; +#endif + } + + // sandstorm sp.def boost for rock types + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT && !usesDefStat) + MulModifier(&modifier, UQ_4_12(1.5)); + + // The defensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 5th badge and 7th badges. + // Having the 5th badge boosts physical defense while having the 7th badge boosts special defense. + if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerDef) && IS_MOVE_PHYSICAL(move)) + MulModifier(&modifier, UQ_4_12(1.1)); + if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerDef) && IS_MOVE_SPECIAL(move)) + MulModifier(&modifier, UQ_4_12(1.1)); + + return ApplyModifier(modifier, defStat); +} + +static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, u16 typeEffectivenessModifier, bool32 isCrit, bool32 updateFlags) +{ + u32 percentBoost; + u32 abilityAtk = GetBattlerAbility(battlerAtk); + u32 abilityDef = GetBattlerAbility(battlerDef); + u32 defSide = GET_BATTLER_SIDE(battlerDef); + u16 finalModifier = UQ_4_12(1.0); + u16 itemDef = gBattleMons[battlerDef].item; + + // check multiple targets in double battle + if (GetMoveTargetCount(move, battlerAtk, battlerDef) >= 2) + MulModifier(&finalModifier, UQ_4_12(0.75)); + + // take type effectiveness + MulModifier(&finalModifier, typeEffectivenessModifier); + + // check crit + if (isCrit) + dmg = ApplyModifier((B_CRIT_MULTIPLIER >= GEN_6 ? UQ_4_12(1.5) : UQ_4_12(2.0)), dmg); + + // check burn + if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && IS_MOVE_PHYSICAL(move) + && (gBattleMoves[move].effect != EFFECT_FACADE || B_BURN_FACADE_DMG < GEN_6) + && abilityAtk != ABILITY_GUTS) + dmg = ApplyModifier(UQ_4_12(0.5), dmg); + + // check sunny/rain weather + if (IsBattlerWeatherAffected(battlerAtk, B_WEATHER_RAIN)) + { + if (moveType == TYPE_FIRE) + dmg = ApplyModifier(UQ_4_12(0.5), dmg); + else if (moveType == TYPE_WATER) + dmg = ApplyModifier(UQ_4_12(1.5), dmg); + } + else if (IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN)) + { + if (moveType == TYPE_FIRE) + dmg = ApplyModifier(UQ_4_12(1.5), dmg); + else if (moveType == TYPE_WATER) + dmg = ApplyModifier(UQ_4_12(0.5), dmg); + } + + // check stab + if (IS_BATTLER_OF_TYPE(battlerAtk, moveType) && move != MOVE_STRUGGLE && move != MOVE_NONE) + { + if (abilityAtk == ABILITY_ADAPTABILITY) + MulModifier(&finalModifier, UQ_4_12(2.0)); + else + MulModifier(&finalModifier, UQ_4_12(1.5)); + } + + // reflect, light screen, aurora veil + if (((gSideStatuses[defSide] & SIDE_STATUS_REFLECT && IS_MOVE_PHYSICAL(move)) + || (gSideStatuses[defSide] & SIDE_STATUS_LIGHTSCREEN && IS_MOVE_SPECIAL(move)) + || (gSideStatuses[defSide] & SIDE_STATUS_AURORA_VEIL)) + && abilityAtk != ABILITY_INFILTRATOR + && !(isCrit) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg) + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + MulModifier(&finalModifier, UQ_4_12(0.66)); + else + MulModifier(&finalModifier, UQ_4_12(0.5)); + } + + // attacker's abilities + switch (abilityAtk) + { + case ABILITY_TINTED_LENS: + if (typeEffectivenessModifier <= UQ_4_12(0.5)) + MulModifier(&finalModifier, UQ_4_12(2.0)); + break; + case ABILITY_SNIPER: + if (isCrit) + MulModifier(&finalModifier, UQ_4_12(1.5)); + break; + case ABILITY_NEUROFORCE: + if (typeEffectivenessModifier >= UQ_4_12(2.0)) + MulModifier(&finalModifier, UQ_4_12(1.25)); + break; + } + + // target's abilities + switch (abilityDef) + { + case ABILITY_MULTISCALE: + case ABILITY_SHADOW_SHIELD: + if (BATTLER_MAX_HP(battlerDef)) + MulModifier(&finalModifier, UQ_4_12(0.5)); + break; + case ABILITY_FILTER: + case ABILITY_SOLID_ROCK: + case ABILITY_PRISM_ARMOR: + if (typeEffectivenessModifier >= UQ_4_12(2.0)) + MulModifier(&finalModifier, UQ_4_12(0.75)); + break; + } + + // target's ally's abilities + if (IsBattlerAlive(BATTLE_PARTNER(battlerDef))) + { + switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef))) + { + case ABILITY_FRIEND_GUARD: + MulModifier(&finalModifier, UQ_4_12(0.75)); + break; + } + } + + // attacker's hold effect + switch (GetBattlerHoldEffect(battlerAtk, TRUE)) + { + case HOLD_EFFECT_METRONOME: + percentBoost = min((gBattleStruct->sameMoveTurns[battlerAtk] * GetBattlerHoldEffectParam(battlerAtk)), 100); + MulModifier(&finalModifier, UQ_4_12(1.0) + sPercentToModifier[percentBoost]); + break; + case HOLD_EFFECT_EXPERT_BELT: + if (typeEffectivenessModifier >= UQ_4_12(2.0)) + MulModifier(&finalModifier, UQ_4_12(1.2)); + break; + case HOLD_EFFECT_LIFE_ORB: + MulModifier(&finalModifier, UQ_4_12(1.3)); + break; + } + + // target's hold effect + switch (GetBattlerHoldEffect(battlerDef, TRUE)) + { + // berries reducing dmg + case HOLD_EFFECT_RESIST_BERRY: + if (moveType == GetBattlerHoldEffectParam(battlerDef) + && (moveType == TYPE_NORMAL || typeEffectivenessModifier >= UQ_4_12(2.0)) + && !UnnerveOn(battlerDef, itemDef)) + { + if (abilityDef == ABILITY_RIPEN) + MulModifier(&finalModifier, UQ_4_12(0.25)); + else + MulModifier(&finalModifier, UQ_4_12(0.5)); + if (updateFlags) + gSpecialStatuses[battlerDef].berryReduced = TRUE; + } + break; + } + + if (gBattleMoves[move].flags & FLAG_DMG_MINIMIZE && gStatuses3[battlerDef] & STATUS3_MINIMIZED) + MulModifier(&finalModifier, UQ_4_12(2.0)); + if (gBattleMoves[move].flags & FLAG_DMG_UNDERGROUND && gStatuses3[battlerDef] & STATUS3_UNDERGROUND) + MulModifier(&finalModifier, UQ_4_12(2.0)); + if (gBattleMoves[move].flags & FLAG_DMG_UNDERWATER && gStatuses3[battlerDef] & STATUS3_UNDERWATER) + MulModifier(&finalModifier, UQ_4_12(2.0)); + if (gBattleMoves[move].flags & FLAG_DMG_2X_IN_AIR && gStatuses3[battlerDef] & STATUS3_ON_AIR) + MulModifier(&finalModifier, UQ_4_12(2.0)); + + dmg = ApplyModifier(finalModifier, dmg); + if (dmg == 0) + dmg = 1; + + return dmg; +} + +static s32 DoMoveDamageCalc(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32 fixedBasePower, + bool32 isCrit, bool32 randomFactor, bool32 updateFlags, u16 typeEffectivenessModifier) +{ + s32 dmg; + + // Don't calculate damage if the move has no effect on target. + if (typeEffectivenessModifier == UQ_4_12(0)) + return 0; + + if (fixedBasePower) + gBattleMovePower = fixedBasePower; + else + gBattleMovePower = CalcMoveBasePowerAfterModifiers(move, battlerAtk, battlerDef, moveType, updateFlags); + + // long dmg basic formula + dmg = ((gBattleMons[battlerAtk].level * 2) / 5) + 2; + dmg *= gBattleMovePower; + dmg *= CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags); + dmg /= CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags); + dmg = (dmg / 50) + 2; + + // Calculate final modifiers. + dmg = CalcFinalDmg(dmg, move, battlerAtk, battlerDef, moveType, typeEffectivenessModifier, isCrit, updateFlags); + + // Add a random factor. + if (randomFactor) + { + dmg *= 100 - (Random() % 16); + dmg /= 100; + } + + if (dmg == 0) + dmg = 1; + + return dmg; +} + +s32 CalculateMoveDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags) +{ + return DoMoveDamageCalc(move, battlerAtk, battlerDef, moveType, fixedBasePower, isCrit, randomFactor, + updateFlags, CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, updateFlags)); +} + +// for AI - get move damage and effectiveness with one function call +s32 CalculateMoveDamageAndEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, u16 *typeEffectivenessModifier) +{ + *typeEffectivenessModifier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); + return DoMoveDamageCalc(move, battlerAtk, battlerDef, moveType, 0, FALSE, FALSE, FALSE, *typeEffectivenessModifier); +} + +static void MulByTypeEffectiveness(u16 *modifier, u16 move, u8 moveType, u8 battlerDef, u8 defType, u8 battlerAtk, bool32 recordAbilities) +{ + u16 mod = GetTypeModifier(moveType, defType); + + if (mod == UQ_4_12(0.0) && GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_RING_TARGET) + { + mod = UQ_4_12(1.0); + if (recordAbilities) + RecordItemEffectBattle(battlerDef, HOLD_EFFECT_RING_TARGET); + } + else if ((moveType == TYPE_FIGHTING || moveType == TYPE_NORMAL) && defType == TYPE_GHOST && gBattleMons[battlerDef].status2 & STATUS2_FORESIGHT && mod == UQ_4_12(0.0)) + { + mod = UQ_4_12(1.0); + } + else if ((moveType == TYPE_FIGHTING || moveType == TYPE_NORMAL) && defType == TYPE_GHOST && GetBattlerAbility(battlerAtk) == ABILITY_SCRAPPY && mod == UQ_4_12(0.0)) + { + mod = UQ_4_12(1.0); + if (recordAbilities) + RecordAbilityBattle(battlerAtk, ABILITY_SCRAPPY); + } + + 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 (gBattleMoves[move].effect == EFFECT_FREEZE_DRY && defType == TYPE_WATER) + mod = UQ_4_12(2.0); + if (moveType == TYPE_GROUND && defType == TYPE_FLYING && IsBattlerGrounded(battlerDef) && mod == UQ_4_12(0.0)) + mod = UQ_4_12(1.0); + if (moveType == TYPE_FIRE && gDisableStructs[battlerDef].tarShot) + mod = UQ_4_12(2.0); + + // B_WEATHER_STRONG_WINDS weakens Super Effective moves against Flying-type Pokémon + if (gBattleWeather & B_WEATHER_STRONG_WINDS && WEATHER_HAS_EFFECT) + { + if (defType == TYPE_FLYING && mod >= UQ_4_12(2.0)) + mod = UQ_4_12(1.0); + } + + MulModifier(modifier, mod); +} + +static void UpdateMoveResultFlags(u16 modifier) +{ + if (modifier == UQ_4_12(0.0)) + { + gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; + gMoveResultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE); + } + else if (modifier == UQ_4_12(1.0)) + { + gMoveResultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE); + } + else if (modifier > UQ_4_12(1.0)) + { + gMoveResultFlags |= MOVE_RESULT_SUPER_EFFECTIVE; + gMoveResultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE); + } + else //if (modifier < UQ_4_12(1.0)) + { + gMoveResultFlags |= MOVE_RESULT_NOT_VERY_EFFECTIVE; + gMoveResultFlags &= ~(MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE); + } +} + +static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities, u16 modifier) +{ + u16 defAbility = GetBattlerAbility(battlerDef); + + MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type1, battlerAtk, recordAbilities); + if (gBattleMons[battlerDef].type2 != gBattleMons[battlerDef].type1) + MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type2, battlerAtk, recordAbilities); + if (gBattleMons[battlerDef].type3 != TYPE_MYSTERY && gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type2 + && gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type1) + MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type3, battlerAtk, recordAbilities); + + if (moveType == TYPE_GROUND && !IsBattlerGrounded2(battlerDef, TRUE) && !(gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING)) + { + modifier = UQ_4_12(0.0); + if (recordAbilities && defAbility == ABILITY_LEVITATE) + { + gLastUsedAbility = ABILITY_LEVITATE; + gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE); + gLastLandedMoves[battlerDef] = 0; + gBattleCommunication[MISS_TYPE] = B_MSG_GROUND_MISS; + RecordAbilityBattle(battlerDef, ABILITY_LEVITATE); + } + } + else if (B_SHEER_COLD_IMMUNITY >= GEN_7 && move == MOVE_SHEER_COLD && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) + { + modifier = UQ_4_12(0.0); + } + else if (B_GLARE_GHOST >= GEN_4 && move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) + { + modifier = UQ_4_12(1.0); + } + + // Thousand Arrows ignores type modifiers for flying mons + if (!IsBattlerGrounded(battlerDef) && (gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING) + && (gBattleMons[battlerDef].type1 == TYPE_FLYING || gBattleMons[battlerDef].type2 == TYPE_FLYING || gBattleMons[battlerDef].type3 == TYPE_FLYING)) + { + modifier = UQ_4_12(1.0); + } + + if (((defAbility == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0)) + || (defAbility == ABILITY_TELEPATHY && battlerDef == BATTLE_PARTNER(battlerAtk))) + && gBattleMoves[move].power) + { + modifier = UQ_4_12(0.0); + if (recordAbilities) + { + gLastUsedAbility = gBattleMons[battlerDef].ability; + gMoveResultFlags |= MOVE_RESULT_MISSED; + gLastLandedMoves[battlerDef] = 0; + gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_DMG; + RecordAbilityBattle(battlerDef, gBattleMons[battlerDef].ability); + } + } + + return modifier; +} + +u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities) +{ + u16 modifier = UQ_4_12(1.0); + + if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY) + { + modifier = CalcTypeEffectivenessMultiplierInternal(move, moveType, battlerAtk, battlerDef, recordAbilities, modifier); + if (gBattleMoves[move].effect == EFFECT_TWO_TYPED_MOVE) + modifier = CalcTypeEffectivenessMultiplierInternal(move, gBattleMoves[move].argument, battlerAtk, battlerDef, recordAbilities, modifier); + } + + if (recordAbilities) + UpdateMoveResultFlags(modifier); + return modifier; +} + +u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef) +{ + u16 modifier = UQ_4_12(1.0); + u8 moveType = gBattleMoves[move].type; + + if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY) + { + MulByTypeEffectiveness(&modifier, move, moveType, 0, gBaseStats[speciesDef].type1, 0, FALSE); + if (gBaseStats[speciesDef].type2 != gBaseStats[speciesDef].type1) + MulByTypeEffectiveness(&modifier, move, moveType, 0, gBaseStats[speciesDef].type2, 0, FALSE); + + if (moveType == TYPE_GROUND && abilityDef == ABILITY_LEVITATE && !(gFieldStatuses & STATUS_FIELD_GRAVITY)) + modifier = UQ_4_12(0.0); + if (abilityDef == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0) && gBattleMoves[move].power) + modifier = UQ_4_12(0.0); + } + + UpdateMoveResultFlags(modifier); + return modifier; +} + +u16 GetTypeModifier(u8 atkType, u8 defType) +{ + if (B_FLAG_INVERSE_BATTLE != 0 && FlagGet(B_FLAG_INVERSE_BATTLE)) + return sInverseTypeEffectivenessTable[atkType][defType]; + else + return sTypeEffectivenessTable[atkType][defType]; +} + +s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId) +{ + u8 type1 = gBattleMons[battlerId].type1; + u8 type2 = gBattleMons[battlerId].type2; + u32 maxHp = gBattleMons[battlerId].maxHP; + s32 dmg = 0; + u16 modifier = UQ_4_12(1.0); + + MulModifier(&modifier, GetTypeModifier(hazardType, type1)); + if (type2 != type1) + MulModifier(&modifier, GetTypeModifier(hazardType, type2)); + + switch (modifier) + { + case UQ_4_12(0.0): + dmg = 0; + break; + case UQ_4_12(0.25): + dmg = maxHp / 32; + if (dmg == 0) + dmg = 1; + break; + case UQ_4_12(0.5): + dmg = maxHp / 16; + if (dmg == 0) + dmg = 1; + break; + case UQ_4_12(1.0): + dmg = maxHp / 8; + if (dmg == 0) + dmg = 1; + break; + case UQ_4_12(2.0): + dmg = maxHp / 4; + if (dmg == 0) + dmg = 1; + break; + case UQ_4_12(4.0): + dmg = maxHp / 2; + if (dmg == 0) + dmg = 1; + break; + } + + return dmg; +} + +bool32 IsPartnerMonFromSameTrainer(u8 battlerId) +{ + if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + return FALSE; + else if (GetBattlerSide(battlerId) == B_SIDE_PLAYER && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + return FALSE; + else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + return FALSE; + else + return TRUE; +} + +u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId) +{ + u32 i; + + for (i = 0; i < EVOS_PER_MON; i++) + { + if (gEvolutionTable[preEvoSpecies][i].method == EVO_MEGA_EVOLUTION + && gEvolutionTable[preEvoSpecies][i].param == heldItemId) + return gEvolutionTable[preEvoSpecies][i].targetSpecies; + } + return SPECIES_NONE; +} + +u16 GetPrimalReversionSpecies(u16 preEvoSpecies, u16 heldItemId) +{ + u32 i; + + for (i = 0; i < EVOS_PER_MON; i++) + { + if (gEvolutionTable[preEvoSpecies][i].method == EVO_PRIMAL_REVERSION + && gEvolutionTable[preEvoSpecies][i].param == heldItemId) + return gEvolutionTable[preEvoSpecies][i].targetSpecies; + } + return SPECIES_NONE; +} + +u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4) +{ + u32 i, par; + + for (i = 0; i < EVOS_PER_MON; i++) + { + if (gEvolutionTable[preEvoSpecies][i].method == EVO_MOVE_MEGA_EVOLUTION) + { + par = gEvolutionTable[preEvoSpecies][i].param; + if (par == moveId1 || par == moveId2 || par == moveId3 || par == moveId4) + return gEvolutionTable[preEvoSpecies][i].targetSpecies; + } + } + return SPECIES_NONE; +} + +bool32 CanMegaEvolve(u8 battlerId) +{ + u32 itemId, holdEffect, species; + struct Pokemon *mon; + u8 battlerPosition = GetBattlerPosition(battlerId); + u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battlerId)); + struct MegaEvolutionData *mega = &(((struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]))->mega); + + // Check if Player has a Mega Ring + if ((GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)) + && !CheckBagHasItem(ITEM_MEGA_RING, 1)) + return FALSE; + + // Check if trainer already mega evolved a pokemon. + if (mega->alreadyEvolved[battlerPosition]) + return FALSE; + + // Cannot use z move and mega evolve on same turn + if (gBattleStruct->zmove.toBeUsed[battlerId]) + return FALSE; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsPartnerMonFromSameTrainer(battlerId) + && (mega->alreadyEvolved[partnerPosition] || (mega->toEvolve & gBitTable[BATTLE_PARTNER(battlerId)]))) + return FALSE; + + // Check if mon is currently held by Sky Drop + if (gStatuses3[battlerId] & STATUS3_SKY_DROPPED) + return FALSE; + + // Gets mon data. + if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) + mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; + else + mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; + + species = GetMonData(mon, MON_DATA_SPECIES); + itemId = GetMonData(mon, MON_DATA_HELD_ITEM); + + // Check if there is an entry in the evolution table for regular Mega Evolution. + if (GetMegaEvolutionSpecies(species, itemId) != SPECIES_NONE) + { + if (B_ENABLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId]) + holdEffect = gBattleStruct->debugHoldEffects[battlerId]; + else if (itemId == ITEM_ENIGMA_BERRY_E_READER) + holdEffect = gEnigmaBerries[battlerId].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(itemId); + + // Can Mega Evolve via Mega Stone. + if (holdEffect == HOLD_EFFECT_MEGA_STONE) + { + gBattleStruct->mega.isWishMegaEvo = FALSE; + return TRUE; + } + } + + // Check if there is an entry in the evolution table for Wish Mega Evolution. + if (GetWishMegaEvolutionSpecies(species, GetMonData(mon, MON_DATA_MOVE1), GetMonData(mon, MON_DATA_MOVE2), GetMonData(mon, MON_DATA_MOVE3), GetMonData(mon, MON_DATA_MOVE4))) + { + gBattleStruct->mega.isWishMegaEvo = TRUE; + return TRUE; + } + + // No checks passed, the mon CAN'T mega evolve. + return FALSE; +} + +void UndoMegaEvolution(u32 monId) +{ + u16 baseSpecies = GET_BASE_SPECIES_ID(GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES)); + + if (gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] & gBitTable[monId]) + { + gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] &= ~(gBitTable[monId]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->mega.playerEvolvedSpecies); + CalculateMonStats(&gPlayerParty[monId]); + } + else if (gBattleStruct->mega.primalRevertedPartyIds[B_SIDE_PLAYER] & gBitTable[monId]) + { + gBattleStruct->mega.primalRevertedPartyIds[B_SIDE_PLAYER] &= ~(gBitTable[monId]); + SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &baseSpecies); + CalculateMonStats(&gPlayerParty[monId]); + } + // While not exactly a mega evolution, Zygarde follows the same rules. + else if (GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL) == SPECIES_ZYGARDE_COMPLETE) + { + SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]); + gBattleStruct->changedSpecies[monId] = 0; + CalculateMonStats(&gPlayerParty[monId]); + } +} + +void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut) +{ + u32 i, currSpecies; + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + static const u16 species[][3] = + { + // Changed Form ID Default Form ID Should change on switch + {SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU, FALSE}, + {SPECIES_GRENINJA_ASH, SPECIES_GRENINJA_BATTLE_BOND, FALSE}, + {SPECIES_MELOETTA_PIROUETTE, SPECIES_MELOETTA, FALSE}, + {SPECIES_AEGISLASH_BLADE, SPECIES_AEGISLASH, TRUE}, + {SPECIES_DARMANITAN_ZEN_MODE, SPECIES_DARMANITAN, TRUE}, + {SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, TRUE}, + {SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, TRUE}, + {SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, TRUE}, + {SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, TRUE}, + {SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, TRUE}, + {SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, TRUE}, + {SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, TRUE}, + {SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, TRUE}, + {SPECIES_CRAMORANT_GORGING, SPECIES_CRAMORANT, TRUE}, + {SPECIES_CRAMORANT_GULPING, SPECIES_CRAMORANT, TRUE}, + {SPECIES_MORPEKO_HANGRY, SPECIES_MORPEKO, TRUE}, + {SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, SPECIES_DARMANITAN_GALARIAN, TRUE}, + }; + + currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL); + for (i = 0; i < ARRAY_COUNT(species); i++) + { + if (currSpecies == species[i][0] && (!isSwitchingOut || species[i][2] == TRUE)) + { + SetMonData(&party[monId], MON_DATA_SPECIES, &species[i][1]); + CalculateMonStats(&party[monId]); + break; + } + } +} + +bool32 DoBattlersShareType(u32 battler1, u32 battler2) +{ + s32 i; + u8 types1[3] = {gBattleMons[battler1].type1, gBattleMons[battler1].type2, gBattleMons[battler1].type3}; + u8 types2[3] = {gBattleMons[battler2].type1, gBattleMons[battler2].type2, gBattleMons[battler2].type3}; + + if (types1[2] == TYPE_MYSTERY) + types1[2] = types1[0]; + if (types2[2] == TYPE_MYSTERY) + types2[2] = types2[0]; + + for (i = 0; i < 3; i++) + { + if (types1[i] == types2[0] || types1[i] == types2[1] || types1[i] == types2[2]) + return TRUE; + } + + return FALSE; +} + +bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId) +{ + u16 species = gBattleMons[battlerId].species; + u16 holdEffect = ItemId_GetHoldEffect(itemId); + + // Mail can be stolen now + if (itemId == ITEM_ENIGMA_BERRY_E_READER) + return FALSE; + // Primal Reversion inducing items cannot be lost if pokemon's base species can undergo primal reversion with it. + else if (holdEffect == HOLD_EFFECT_PRIMAL_ORB && (GetPrimalReversionSpecies(GET_BASE_SPECIES_ID(species), itemId) != SPECIES_NONE)) + return FALSE; + // Mega stone cannot be lost if pokemon's base species can mega evolve with it. + else if (holdEffect == HOLD_EFFECT_MEGA_STONE && (GetMegaEvolutionSpecies(GET_BASE_SPECIES_ID(species), itemId) != SPECIES_NONE)) + return FALSE; + else if (GET_BASE_SPECIES_ID(species) == SPECIES_GIRATINA && itemId == ITEM_GRISEOUS_ORB) + return FALSE; + else if (GET_BASE_SPECIES_ID(species) == SPECIES_GENESECT && holdEffect == HOLD_EFFECT_DRIVE) + return FALSE; + else if (GET_BASE_SPECIES_ID(species) == SPECIES_SILVALLY && holdEffect == HOLD_EFFECT_MEMORY) + return FALSE; + else if (GET_BASE_SPECIES_ID(species) == SPECIES_ARCEUS && holdEffect == HOLD_EFFECT_PLATE) + return FALSE; +#ifdef HOLD_EFFECT_Z_CRYSTAL + else if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) + return FALSE; +#endif + else + return TRUE; +} + +struct Pokemon *GetIllusionMonPtr(u32 battlerId) +{ + if (gBattleStruct->illusion[battlerId].broken) + return NULL; + if (!gBattleStruct->illusion[battlerId].set) + { + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + SetIllusionMon(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId); + else + SetIllusionMon(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); + } + if (!gBattleStruct->illusion[battlerId].on) + return NULL; + + return gBattleStruct->illusion[battlerId].mon; +} + +void ClearIllusionMon(u32 battlerId) +{ + memset(&gBattleStruct->illusion[battlerId], 0, sizeof(gBattleStruct->illusion[battlerId])); +} + +bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId) +{ + struct Pokemon *party, *partnerMon; + s32 i, id; + + gBattleStruct->illusion[battlerId].set = 1; + if (GetMonAbility(mon) != ABILITY_ILLUSION) + return FALSE; + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + party = gPlayerParty; + else + party = gEnemyParty; + + if (IsBattlerAlive(BATTLE_PARTNER(battlerId))) + partnerMon = &party[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]]; + else + partnerMon = mon; + + // Find last alive non-egg pokemon. + for (i = PARTY_SIZE - 1; i >= 0; i--) + { + id = i; + if (GetMonData(&party[id], MON_DATA_SANITY_HAS_SPECIES) + && GetMonData(&party[id], MON_DATA_HP) + && !GetMonData(&party[id], MON_DATA_IS_EGG) + && &party[id] != mon + && &party[id] != partnerMon) + { + gBattleStruct->illusion[battlerId].on = 1; + gBattleStruct->illusion[battlerId].broken = 0; + gBattleStruct->illusion[battlerId].partyId = id; + gBattleStruct->illusion[battlerId].mon = &party[id]; + return TRUE; + } + } + + return FALSE; +} + +bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId) +{ + if (B_BADGE_BOOST != GEN_3) + return FALSE; + else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) + return FALSE; + else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + return FALSE; + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + return FALSE; + else if (FlagGet(badgeFlag)) + return TRUE; + else + return FALSE; +} + +u8 GetBattleMoveSplit(u32 moveId) +{ + if (gBattleStruct != NULL && gBattleStruct->zmove.active && !IS_MOVE_STATUS(moveId)) + return gBattleStruct->zmove.activeSplit; + if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky + return SPLIT_PHYSICAL; + else if (IS_MOVE_STATUS(moveId) || B_PHYSICAL_SPECIAL_SPLIT >= GEN_4) + return gBattleMoves[moveId].split; + else if (gBattleMoves[moveId].type < TYPE_MYSTERY) + return SPLIT_PHYSICAL; + else + return SPLIT_SPECIAL; +} + +static bool32 TryRemoveScreens(u8 battler) +{ + bool32 removed = FALSE; + u8 battlerSide = GetBattlerSide(battler); + u8 enemySide = GetBattlerSide(BATTLE_OPPOSITE(battler)); + + // try to remove from battler's side + if (gSideStatuses[battlerSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL)) + { + gSideStatuses[battlerSide] &= ~(SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL); + gSideTimers[battlerSide].reflectTimer = 0; + gSideTimers[battlerSide].lightscreenTimer = 0; + gSideTimers[battlerSide].auroraVeilTimer = 0; + removed = TRUE; + } + + // try to remove from battler opponent's side + if (gSideStatuses[enemySide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL)) + { + gSideStatuses[enemySide] &= ~(SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL); + gSideTimers[enemySide].reflectTimer = 0; + gSideTimers[enemySide].lightscreenTimer = 0; + gSideTimers[enemySide].auroraVeilTimer = 0; + removed = TRUE; + } + + return removed; +} + +static bool32 IsUnnerveAbilityOnOpposingSide(u8 battlerId) +{ + if (IsAbilityOnOpposingSide(battlerId, ABILITY_UNNERVE) + || IsAbilityOnOpposingSide(battlerId, ABILITY_AS_ONE_ICE_RIDER) + || IsAbilityOnOpposingSide(battlerId, ABILITY_AS_ONE_SHADOW_RIDER)) + return TRUE; + return FALSE; +} + +// Photon geyser & light that burns the sky +u8 GetSplitBasedOnStats(u8 battlerId) +{ + u32 attack = gBattleMons[battlerId].attack; + u32 spAttack = gBattleMons[battlerId].spAttack; + + attack = attack * gStatStageRatios[gBattleMons[battlerId].statStages[STAT_ATK]][0]; + attack = attack / gStatStageRatios[gBattleMons[battlerId].statStages[STAT_ATK]][1]; + + spAttack = spAttack * gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPATK]][0]; + spAttack = spAttack / gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPATK]][1]; + + if (spAttack >= attack) + return SPLIT_SPECIAL; + else + return SPLIT_PHYSICAL; +} + +bool32 TestMoveFlags(u16 move, u32 flag) +{ + if (gBattleMoves[move].flags & flag) + return TRUE; + return FALSE; +} + +struct Pokemon *GetBattlerPartyData(u8 battlerId) +{ + struct Pokemon *mon; + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; + else + mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; + + return mon; +} + +// Make sure the input bank is any bank on the specific mon's side +bool32 CanFling(u8 battlerId) +{ + u16 item = gBattleMons[battlerId].item; + u16 itemEffect = ItemId_GetHoldEffect(item); + + if (item == ITEM_NONE + #if B_KLUTZ_FLING_INTERACTION >= GEN_5 + || GetBattlerAbility(battlerId) == ABILITY_KLUTZ + #endif + || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM + || gDisableStructs[battlerId].embargoTimer != 0 + || ItemId_GetFlingPower(item) != 0 + || !CanBattlerGetOrLoseItem(battlerId, item)) + return FALSE; + + return TRUE; +} + +// Ability checks +bool32 IsRolePlayBannedAbilityAtk(u16 ability) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sRolePlayBannedAttackerAbilities); i++) + { + if (ability == sRolePlayBannedAttackerAbilities[i]) + return TRUE; + } + return FALSE; +} + +bool32 IsRolePlayBannedAbility(u16 ability) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sRolePlayBannedAbilities); i++) + { + if (ability == sRolePlayBannedAbilities[i]) + return TRUE; + } + return FALSE; +} + +bool32 IsSkillSwapBannedAbility(u16 ability) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sSkillSwapBannedAbilities); i++) + { + if (ability == sSkillSwapBannedAbilities[i]) + return TRUE; + } + return FALSE; +} + +bool32 IsWorrySeedBannedAbility(u16 ability) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sWorrySeedBannedAbilities); i++) + { + if (ability == sWorrySeedBannedAbilities[i]) + return TRUE; + } + return FALSE; +} + +bool32 IsGastroAcidBannedAbility(u16 ability) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sGastroAcidBannedAbilities); i++) + { + if (ability == sGastroAcidBannedAbilities[i]) + return TRUE; + } + return FALSE; +} + +bool32 IsEntrainmentBannedAbilityAttacker(u16 ability) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sEntrainmentBannedAttackerAbilities); i++) + { + if (ability == sEntrainmentBannedAttackerAbilities[i]) + return TRUE; + } + return FALSE; +} + +bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sEntrainmentTargetSimpleBeamBannedAbilities); i++) + { + if (ability == sEntrainmentTargetSimpleBeamBannedAbilities[i]) + return TRUE; + } + return FALSE; +} + +// Sort an array of battlers by speed +// Useful for effects like pickpocket, eject button, red card, dancer +void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast) +{ + int i, j, currSpeed, currBattler; + u16 speeds[4] = {0}; + + for (i = 0; i < gBattlersCount; i++) + speeds[i] = GetBattlerTotalSpeedStat(battlers[i]); + + for (i = 1; i < gBattlersCount; i++) + { + currBattler = battlers[i]; + currSpeed = speeds[i]; + j = i - 1; + + if (slowToFast) + { + while (j >= 0 && speeds[j] > currSpeed) + { + battlers[j + 1] = battlers[j]; + speeds[j + 1] = speeds[j]; + j = j - 1; + } + } + else + { + while (j >= 0 && speeds[j] < currSpeed) + { + battlers[j + 1] = battlers[j]; + speeds[j + 1] = speeds[j]; + j = j - 1; + } + } + + battlers[j + 1] = currBattler; + speeds[j + 1] = currSpeed; + } +} + +void TryRestoreStolenItems(void) +{ + u32 i; + u16 stolenItem = ITEM_NONE; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (gBattleStruct->itemStolen[i].stolen) + { + stolenItem = gBattleStruct->itemStolen[i].originalItem; + if (stolenItem != ITEM_NONE && ItemId_GetPocket(stolenItem) != POCKET_BERRIES) + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &stolenItem); // Restore stolen non-berry items + } + } +} + +bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item) +{ + u8 stealerSide = GetBattlerSide(battlerStealing); + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) + return FALSE; + + // Check if the battler trying to steal should be able to + if (stealerSide == B_SIDE_OPPONENT + && !(gBattleTypeFlags & + (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_LINK + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_SECRET_BASE + #if B_TRAINERS_KNOCK_OFF_ITEMS + | BATTLE_TYPE_TRAINER + #endif + ))) + { + return FALSE; + } + else if (!(gBattleTypeFlags & + (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_LINK + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_SECRET_BASE)) + && (gWishFutureKnock.knockedOffMons[stealerSide] & gBitTable[gBattlerPartyIndexes[battlerStealing]])) + { + return FALSE; + } + + if (!CanBattlerGetOrLoseItem(battlerItem, item) // Battler with item cannot have it stolen + ||!CanBattlerGetOrLoseItem(battlerStealing, item)) // Stealer cannot take the item + return FALSE; + + return TRUE; +} + +void TrySaveExchangedItem(u8 battlerId, u16 stolenItem) +{ + // Because BtlController_EmitSetMonData does SetMonData, we need to save the stolen item only if it matches the battler's original + // So, if the player steals an item during battle and has it stolen from it, it will not end the battle with it (naturally) + #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE + // If regular trainer battle and mon's original item matches what is being stolen, save it to be restored at end of battle + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER + && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + && GetBattlerSide(battlerId) == B_SIDE_PLAYER + && stolenItem == gBattleStruct->itemStolen[gBattlerPartyIndexes[battlerId]].originalItem) + gBattleStruct->itemStolen[gBattlerPartyIndexes[battlerId]].stolen = TRUE; + #endif +} + +bool32 IsBattlerAffectedByHazards(u8 battlerId, bool32 toxicSpikes) +{ + bool32 ret = TRUE; + u32 holdEffect = GetBattlerHoldEffect(gActiveBattler, TRUE); + if (toxicSpikes && holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS && !IS_BATTLER_OF_TYPE(battlerId, TYPE_POISON)) + { + ret = FALSE; + RecordItemEffectBattle(battlerId, holdEffect); + } + else if (holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS) + { + ret = FALSE; + RecordItemEffectBattle(battlerId, holdEffect); + } + return ret; +} + +bool32 TestSheerForceFlag(u8 battler, u16 move) +{ + if (GetBattlerAbility(battler) == ABILITY_SHEER_FORCE && gBattleMoves[move].flags & FLAG_SHEER_FORCE_BOOST) + return TRUE; + else + return FALSE; +} + +// This function is the body of "jumpifstat", but can be used dynamically in a function +bool32 CompareStat(u8 battlerId, u8 statId, u8 cmpTo, u8 cmpKind) +{ + bool8 ret = FALSE; + u8 statValue = gBattleMons[battlerId].statStages[statId]; + + // Because this command is used as a way of checking if a stat can be lowered/raised, + // we need to do some modification at run-time. + if (GetBattlerAbility(battlerId) == ABILITY_CONTRARY) + { + if (cmpKind == CMP_GREATER_THAN) + cmpKind = CMP_LESS_THAN; + else if (cmpKind == CMP_LESS_THAN) + cmpKind = CMP_GREATER_THAN; + + if (cmpTo == MIN_STAT_STAGE) + cmpTo = MAX_STAT_STAGE; + else if (cmpTo == MAX_STAT_STAGE) + cmpTo = MIN_STAT_STAGE; + } + + switch (cmpKind) + { + case CMP_EQUAL: + if (statValue == cmpTo) + ret = TRUE; + break; + case CMP_NOT_EQUAL: + if (statValue != cmpTo) + ret = TRUE; + break; + case CMP_GREATER_THAN: + if (statValue > cmpTo) + ret = TRUE; + break; + case CMP_LESS_THAN: + if (statValue < cmpTo) + ret = TRUE; + break; + case CMP_COMMON_BITS: + if (statValue & cmpTo) + ret = TRUE; + break; + case CMP_NO_COMMON_BITS: + if (!(statValue & cmpTo)) + ret = TRUE; + break; + } + + return ret; +} + +void BufferStatChange(u8 battlerId, u8 statId, u8 stringId) +{ + bool8 hasContrary = (GetBattlerAbility(battlerId) == ABILITY_CONTRARY); + + PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); + if (stringId == STRINGID_STATFELL) + { + if (hasContrary) + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE) + else + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATFELL) + } + else if (stringId == STRINGID_STATROSE) + { + if (hasContrary) + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATFELL) + else + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE) + } + else + { + PREPARE_STRING_BUFFER(gBattleTextBuff2, stringId) + } +} + +bool32 TryRoomService(u8 battlerId) +{ + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && CompareStat(battlerId, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN)) + { + BufferStatChange(battlerId, STAT_SPEED, STRINGID_STATFELL); + gEffectBattler = gBattleScripting.battler = battlerId; + SET_STATCHANGER(STAT_SPEED, 1, TRUE); + gBattleScripting.animArg1 = 14 + STAT_SPEED; + gBattleScripting.animArg2 = 0; + gLastUsedItem = gBattleMons[battlerId].item; + return TRUE; + } + else + { + return FALSE; + } +} + +void DoBurmyFormChange(u32 monId) +{ + u16 newSpecies, currSpecies; + struct Pokemon *party = gPlayerParty; + + currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL); + + if ((GET_BASE_SPECIES_ID(currSpecies) == SPECIES_BURMY) + && (gBattleStruct->appearedInBattle & gBitTable[monId]) // Burmy appeared in battle + && GetMonData(&party[monId], MON_DATA_HP, NULL) != 0) // Burmy isn't fainted + { + switch (gBattleTerrain) + { + case BATTLE_TERRAIN_GRASS: + case BATTLE_TERRAIN_LONG_GRASS: + case BATTLE_TERRAIN_POND: + case BATTLE_TERRAIN_MOUNTAIN: + case BATTLE_TERRAIN_PLAIN: + newSpecies = SPECIES_BURMY; + break; + case BATTLE_TERRAIN_CAVE: + case BATTLE_TERRAIN_SAND: + newSpecies = SPECIES_BURMY_SANDY_CLOAK; + break; + case BATTLE_TERRAIN_BUILDING: + newSpecies = SPECIES_BURMY_TRASH_CLOAK; + break; + default: // Don't change form if last battle was water-related + newSpecies = SPECIES_NONE; + break; + } + + if (newSpecies != SPECIES_NONE) + { + SetMonData(&party[monId], MON_DATA_SPECIES, &newSpecies); + CalculateMonStats(&party[monId]); + } + } +} + +bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget) +{ + #if B_PRANKSTER_DARK_TYPES >= GEN_7 + if (!gProtectStructs[battlerPrankster].pranksterElevated) + return FALSE; + if (GetBattlerSide(battlerPrankster) == GetBattlerSide(battlerDef)) + return FALSE; + if (checkTarget && (GetBattlerMoveTargetType(battlerPrankster, move) & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_DEPENDS))) + return FALSE; + if (!IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK)) + return FALSE; + if (gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE) + return FALSE; + + return TRUE; + #endif + return FALSE; +} + +u16 GetUsedHeldItem(u8 battler) +{ + return gBattleStruct->usedHeldItems[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)]; +} + +bool32 IsBattlerWeatherAffected(u8 battlerId, u32 weatherFlags) +{ + if (gBattleWeather & weatherFlags && WEATHER_HAS_EFFECT) + { + // given weather is active -> check if its sun, rain against utility umbrella ( since only 1 weather can be active at once) + if (gBattleWeather & (B_WEATHER_SUN | B_WEATHER_RAIN) && GetBattlerHoldEffect(battlerId, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA) + return FALSE; // utility umbrella blocks sun, rain effects + + return TRUE; + } + return FALSE; +} + +// Gets move target before redirection effects etc. are applied +// Possible return values are defined in battle.h following MOVE_TARGET_SELECTED +u32 GetBattlerMoveTargetType(u8 battlerId, u16 move) +{ + u32 target; + + if (gBattleMoves[move].effect == EFFECT_EXPANDING_FORCE + && IsBattlerTerrainAffected(battlerId, STATUS_FIELD_PSYCHIC_TERRAIN)) + return MOVE_TARGET_BOTH; + else + return gBattleMoves[move].target; +} + +bool32 CanTargetBattler(u8 battlerAtk, u8 battlerDef, u16 move) +{ + if (gBattleMoves[move].effect == EFFECT_HIT_ENEMY_HEAL_ALLY + && GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef) + && gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) + return FALSE; // Pokémon affected by Heal Block cannot target allies with Pollen Puff + return TRUE; +} diff --git a/src/battle_util2.c b/src/battle_util2.c index def7302d38..7bc1459d89 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -14,8 +14,6 @@ void AllocateBattleResources(void) { - gBattleResources = gBattleResources; // something dumb needed to match - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) InitTrainerHillBattleStruct(); @@ -28,14 +26,14 @@ void AllocateBattleResources(void) gBattleResources->battleCallbackStack = AllocZeroed(sizeof(*gBattleResources->battleCallbackStack)); gBattleResources->beforeLvlUp = AllocZeroed(sizeof(*gBattleResources->beforeLvlUp)); gBattleResources->ai = AllocZeroed(sizeof(*gBattleResources->ai)); + gBattleResources->aiData = AllocZeroed(sizeof(*gBattleResources->aiData)); gBattleResources->battleHistory = AllocZeroed(sizeof(*gBattleResources->battleHistory)); - gBattleResources->AI_ScriptsStack = AllocZeroed(sizeof(*gBattleResources->AI_ScriptsStack)); gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE); gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE); - gUnknown_0202305C = AllocZeroed(0x2000); - gUnknown_02023060 = AllocZeroed(0x1000); + gBattleAnimBgTileBuffer = AllocZeroed(0x2000); + gBattleAnimBgTilemapBuffer = AllocZeroed(0x1000); if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) { @@ -49,6 +47,7 @@ void FreeBattleResources(void) if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) FreeTrainerHillBattleStruct(); + gFieldStatuses = 0; if (gBattleResources != NULL) { FREE_AND_SET_NULL(gBattleStruct); @@ -59,15 +58,15 @@ void FreeBattleResources(void) FREE_AND_SET_NULL(gBattleResources->battleCallbackStack); FREE_AND_SET_NULL(gBattleResources->beforeLvlUp); FREE_AND_SET_NULL(gBattleResources->ai); + FREE_AND_SET_NULL(gBattleResources->aiData); FREE_AND_SET_NULL(gBattleResources->battleHistory); - FREE_AND_SET_NULL(gBattleResources->AI_ScriptsStack); FREE_AND_SET_NULL(gBattleResources); FREE_AND_SET_NULL(gLinkBattleSendBuffer); FREE_AND_SET_NULL(gLinkBattleRecvBuffer); - FREE_AND_SET_NULL(gUnknown_0202305C); - FREE_AND_SET_NULL(gUnknown_02023060); + FREE_AND_SET_NULL(gBattleAnimBgTileBuffer); + FREE_AND_SET_NULL(gBattleAnimBgTilemapBuffer); } } @@ -108,20 +107,19 @@ void SwitchPartyOrderInGameMulti(u8 battlerId, u8 arg1) if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) { s32 i; - - // gBattleStruct->field_60[0][i] - for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) - gBattlePartyCurrentOrder[i] = *(0 * 3 + i + (u8*)(gBattleStruct->field_60)); + gBattlePartyCurrentOrder[i] = *(0 * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)); SwitchPartyMonSlots(GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battlerId]), GetPartyIdFromBattlePartyId(arg1)); for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) - *(0 * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; + *(0 * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i]; } } -u32 sub_805725C(u8 battlerId) +// Called when a Pokémon is unable to attack during a Battle Palace battle. +// Check if it was because they are frozen/asleep, and if so try to cure the status. +u32 BattlePalace_TryEscapeStatus(u8 battlerId) { u32 effect = 0; @@ -134,6 +132,7 @@ u32 sub_805725C(u8 battlerId) { if (UproarWakeUpCheck(battlerId)) { + // Wake up from Uproar gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP); gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE); BattleScriptPushCursor(); @@ -145,11 +144,12 @@ u32 sub_805725C(u8 battlerId) { u32 toSub; - if (gBattleMons[battlerId].ability == ABILITY_EARLY_BIRD) + if (GetBattlerAbility(battlerId) == ABILITY_EARLY_BIRD) toSub = 2; else toSub = 1; + // Reduce number of sleep turns if ((gBattleMons[battlerId].status1 & STATUS1_SLEEP) < toSub) gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP); else @@ -157,11 +157,13 @@ u32 sub_805725C(u8 battlerId) if (gBattleMons[battlerId].status1 & STATUS1_SLEEP) { + // Still asleep gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep; effect = 2; } else { + // Wake up gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE); BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP; @@ -177,10 +179,12 @@ u32 sub_805725C(u8 battlerId) { if (Random() % 5 != 0) { + // Still frozen gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen; } else { + // Unfreeze gBattleMons[battlerId].status1 &= ~(STATUS1_FREEZE); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; @@ -193,13 +197,13 @@ u32 sub_805725C(u8 battlerId) case 2: break; } - + // Loop until reaching the final state, or stop early if Pokémon was Asleep/Frozen } while (gBattleCommunication[MULTIUSE_STATE] != 2 && effect == 0); if (effect == 2) { gActiveBattler = battlerId; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); } diff --git a/src/battle_z_move.c b/src/battle_z_move.c new file mode 100644 index 0000000000..efa1e6e18c --- /dev/null +++ b/src/battle_z_move.c @@ -0,0 +1,679 @@ +#include "global.h" +#include "malloc.h" +#include "battle.h" +#include "pokemon.h" +#include "battle_ai_main.h" +#include "battle_ai_util.h" +#include "battle_controllers.h" +#include "battle_interface.h" +#include "battle_message.h" +#include "battle_z_move.h" +#include "battle_scripts.h" +#include "graphics.h" +#include "sprite.h" +#include "window.h" +#include "string_util.h" +#include "text.h" +#include "item.h" +#include "strings.h" +#include "sound.h" +#include "constants/songs.h" +#include "decompress.h" +#include "task.h" +#include "util.h" +#include "gpu_regs.h" +#include "battle_message.h" +#include "pokedex.h" +#include "palette.h" +#include "international_string_util.h" +#include "safari_zone.h" +#include "battle_anim.h" +#include "constants/battle_anim.h" +#include "constants/rgb.h" +#include "battle_debug.h" +#include "constants/battle_config.h" +#include "data.h" +#include "pokemon_summary_screen.h" +#include "constants/songs.h" +#include "constants/items.h" +#include "constants/species.h" +#include "constants/hold_effects.h" +#include "constants/battle_string_ids.h" +#include "constants/battle_move_effects.h" +#include "constants/abilities.h" +#include "constants/moves.h" + +#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 u16 GetTypeBasedZMove(u16 move, u8 battler); +static void ZMoveSelectionDisplayPpNumber(void); +static void ZMoveSelectionDisplayPower(u16 move, u16 zMove); +static void ShowZMoveTriggerSprite(void); +static bool32 AreStatsMaxed(u8 battlerId, u8 n); +static u8 GetZMoveScore(u8 battlerAtk, u8 battlerDef, u16 baseMove, u16 zMove); + +// Const Data +static const struct SignatureZMove sSignatureZMoves[] = +{ +// #ifdef NEW_POKEMON + {SPECIES_PIKACHU_COSPLAY, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_ROCK_STAR, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_BELLE, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_POP_STAR, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_PH_D, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_LIBRE, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + + {SPECIES_RAICHU_ALOLAN, ITEM_ALORAICHIUM_Z, MOVE_THUNDERBOLT, MOVE_STOKED_SPARKSURFER}, + {SPECIES_DECIDUEYE, ITEM_DECIDIUM_Z, MOVE_SPIRIT_SHACKLE, MOVE_SINISTER_ARROW_RAID}, + {SPECIES_INCINEROAR, ITEM_INCINIUM_Z, MOVE_DARKEST_LARIAT, MOVE_MALICIOUS_MOONSAULT}, + {SPECIES_KOMMO_O, ITEM_KOMMONIUM_Z, MOVE_CLANGING_SCALES, MOVE_CLANGOROUS_SOULBLAZE}, + {SPECIES_LUNALA, ITEM_LUNALIUM_Z, MOVE_MOONGEIST_BEAM, MOVE_MENACING_MOONRAZE_MAELSTROM}, + {SPECIES_NECROZMA_DAWN_WINGS, ITEM_LUNALIUM_Z, MOVE_MOONGEIST_BEAM, MOVE_MENACING_MOONRAZE_MAELSTROM}, + {SPECIES_LYCANROC, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS}, + {SPECIES_LYCANROC_MIDNIGHT, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS}, + + {SPECIES_LYCANROC_DUSK, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS}, + {SPECIES_MARSHADOW, ITEM_MARSHADIUM_Z, MOVE_SPECTRAL_THIEF, MOVE_SOUL_STEALING_7_STAR_STRIKE}, + {SPECIES_MIMIKYU, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, + {SPECIES_MIMIKYU_BUSTED, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, + {SPECIES_PIKACHU_ORIGINAL_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_HOENN_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_SINNOH_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_UNOVA_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_KALOS_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_ALOLA_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_PARTNER_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_WORLD_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PRIMARINA, ITEM_PRIMARIUM_Z, MOVE_SPARKLING_ARIA, MOVE_OCEANIC_OPERETTA}, + {SPECIES_SOLGALEO, ITEM_SOLGANIUM_Z, MOVE_SUNSTEEL_STRIKE, MOVE_SEARING_SUNRAZE_SMASH}, + {SPECIES_NECROZMA_DUSK_MANE, ITEM_SOLGANIUM_Z, MOVE_SUNSTEEL_STRIKE, MOVE_SEARING_SUNRAZE_SMASH}, + {SPECIES_TAPU_KOKO, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA}, + {SPECIES_TAPU_BULU, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA}, + {SPECIES_TAPU_LELE, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA}, + {SPECIES_TAPU_FINI, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA}, + {SPECIES_NECROZMA_ULTRA, ITEM_ULTRANECROZIUM_Z, MOVE_PHOTON_GEYSER, MOVE_LIGHT_THAT_BURNS_THE_SKY}, +// #endif + {SPECIES_MEW, ITEM_MEWNIUM_Z, MOVE_PSYCHIC, MOVE_GENESIS_SUPERNOVA}, + {SPECIES_PIKACHU, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_EEVEE, ITEM_EEVIUM_Z, MOVE_LAST_RESORT, MOVE_EXTREME_EVOBOOST}, + {SPECIES_SNORLAX, ITEM_SNORLIUM_Z, MOVE_GIGA_IMPACT, MOVE_PULVERIZING_PANCAKE}, +}; + +static const u8 sText_ResetStats[] = _("Reset Lowered Stats"); +static const u8 sText_StatsPlus[] = _("+ All Stats"); +static const u8 sText_StatsPlus2[] = _("++ All Stats"); +static const u8 sText_CritHitsPlus[] = _("+ Critical Hit Chance"); +static const u8 sText_FollowMe[] = _("Follow Me"); +static const u8 sText_RecoverHP[] = _("Recover HP"); +static const u8 sText_HealAllyHP[] = _("Heal Replacement HP"); +static const u8 sText_PowerColon[] = _("Power: "); + +static const u32 sZMoveTriggerGfx[] = INCBIN_U32("graphics/battle_interface/z_move_trigger.4bpp.lz"); +static const u16 sZMoveTriggerPal[] = INCBIN_U16("graphics/battle_interface/z_move_trigger.gbapal"); + +static const struct CompressedSpriteSheet sSpriteSheet_ZMoveTrigger = { + sZMoveTriggerGfx, (32 * 32) / 2, TAG_ZMOVE_TRIGGER_TILE +}; + +static const struct SpritePalette sSpritePalette_ZMoveTrigger = { + sZMoveTriggerPal, TAG_ZMOVE_TRIGGER_PAL +}; + +static const struct OamData sOamData_ZMoveTrigger = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 1, +}; + +static const struct SpriteTemplate sSpriteTemplate_ZMoveTrigger = +{ + .tileTag = TAG_ZMOVE_TRIGGER_TILE, + .paletteTag = TAG_ZMOVE_TRIGGER_PAL, + .oam = &sOamData_ZMoveTrigger, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_ZMoveTrigger +}; + +// Functions +bool8 IsZMove(u16 move) +{ + return move >= FIRST_Z_MOVE && move <= LAST_Z_MOVE; +} + +void QueueZMove(u8 battlerId, u16 baseMove) +{ + gBattleStruct->zmove.toBeUsed[battlerId] = gBattleStruct->zmove.chosenZMove; + gBattleStruct->zmove.baseMoves[battlerId] = baseMove; + if (gBattleStruct->zmove.chosenZMove == MOVE_LIGHT_THAT_BURNS_THE_SKY) + gBattleStruct->zmove.splits[battlerId] = GetSplitBasedOnStats(battlerId); + else + gBattleStruct->zmove.splits[battlerId] = gBattleMoves[baseMove].split; +} + +bool32 IsViableZMove(u8 battlerId, u16 move) +{ + struct Pokemon *mon; + struct MegaEvolutionData *mega = &(((struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]))->mega); + u8 battlerPosition = GetBattlerPosition(battlerId); + u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battlerId)); + u32 item; + u16 holdEffect; + u16 species; + + if (gBattleStruct->zmove.used[battlerId]) + return FALSE; + + species = gBattleMons[battlerId].species; + item = gBattleMons[battlerId].item; + if (gBattleTypeFlags & (BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FRONTIER)) + return FALSE; + + #ifdef ITEM_Z_RING + if ((GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)) && !CheckBagHasItem(ITEM_Z_RING, 1)) + return FALSE; + #endif + + if (mega->alreadyEvolved[battlerPosition]) + return FALSE; // Trainer has mega evolved + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (IsPartnerMonFromSameTrainer(battlerId) && (mega->alreadyEvolved[partnerPosition] || (mega->toEvolve & gBitTable[BATTLE_PARTNER(battlerId)]))) + return FALSE; // Partner has mega evolved or is about to mega evolve + } + + if (B_ENABLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId]) + holdEffect = gBattleStruct->debugHoldEffects[battlerId]; + else if (item == ITEM_ENIGMA_BERRY) + return FALSE; // HoldEffect = gEnigmaBerries[battlerId].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(item); + + #ifdef ITEM_ULTRANECROZIUM_Z + if (holdEffect == HOLD_EFFECT_Z_CRYSTAL || item == ITEM_ULTRANECROZIUM_Z) + #else + if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) + #endif + { + u16 zMove = GetSignatureZMove(move, gBattleMons[battlerId].species, item); + if (zMove != MOVE_NONE) + { + gBattleStruct->zmove.chosenZMove = zMove; // Signature z move exists + return TRUE; + } + + if (move != MOVE_NONE && zMove != MOVE_Z_STATUS && gBattleMoves[move].type == ItemId_GetSecondaryId(item)) + { + if (IS_MOVE_STATUS(move)) + gBattleStruct->zmove.chosenZMove = move; + else + gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, battlerId); + + return TRUE; + } + } + + return FALSE; +} + +void GetUsableZMoves(u8 battlerId, u16 *moves) +{ + u32 i; + gBattleStruct->zmove.possibleZMoves[battlerId] = 0; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && IsViableZMove(battlerId, moves[i])) + gBattleStruct->zmove.possibleZMoves[battlerId] |= (1 << i); + } +} + +bool32 IsZMoveUsable(u8 battlerId, u16 moveIndex) +{ + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsPartnerMonFromSameTrainer(battlerId) && gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(battlerId)] != MOVE_NONE) + return FALSE; // Player's other mon has a z move queued up already + if (gBattleStruct->zmove.possibleZMoves[battlerId] & (1 << moveIndex)) + return TRUE; + return FALSE; +} + +bool32 TryChangeZIndicator(u8 battlerId, u8 moveIndex) +{ + bool32 viableZMove = IsZMoveUsable(battlerId, moveIndex); + + if (gBattleStruct->zmove.viable && !viableZMove) + HideZMoveTriggerSprite(); // Was a viable z move, now is not -> slide out + else if (!gBattleStruct->zmove.viable && viableZMove) + ShowZMoveTriggerSprite(); // Was not a viable z move, now is -> slide back in +} + +#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 battlerId, bool8 viable) +{ + s16 x, y; + + LoadSpritePalette(&sSpritePalette_ZMoveTrigger); + if (GetSpriteTileStartByTag(TAG_ZMOVE_TRIGGER_TILE) == 0xFFFF) + LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_ZMoveTrigger); + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + x = gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_Z_TRIGGER_POS_X_SLIDE; + y = gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_Z_TRIGGER_POS_Y_DIFF; + } + else + { + x = gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_Z_TRIGGER_POS_X_SLIDE; + y = gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_Z_TRIGGER_POS_Y_DIFF, 0; + } + + if (gBattleStruct->zmove.triggerSpriteId == 0xFF) + gBattleStruct->zmove.triggerSpriteId = CreateSprite(&sSpriteTemplate_ZMoveTrigger, x, y, 0); + + gSprites[gBattleStruct->zmove.triggerSpriteId].tBattler = battlerId; + 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 = &gSprites[gBattleStruct->zmove.triggerSpriteId]; + sprite->tHide = TRUE; + gBattleStruct->zmove.viable = FALSE; +} + +static void ShowZMoveTriggerSprite(void) +{ + struct Sprite *sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId]; + gBattleStruct->zmove.viable = TRUE; + CreateZMoveTriggerSprite(sprite->tBattler, TRUE); +} + +void DestroyZMoveTriggerSprite(void) +{ + FreeSpritePaletteByTag(TAG_ZMOVE_TRIGGER_PAL); + FreeSpriteTilesByTag(TAG_ZMOVE_TRIGGER_TILE); + if (gBattleStruct->zmove.triggerSpriteId != 0xFF) + DestroySprite(&gSprites[gBattleStruct->zmove.triggerSpriteId]); + + gBattleStruct->zmove.triggerSpriteId = 0xFF; +} + +static u16 GetSignatureZMove(u16 move, u16 species, u16 item) +{ + u32 i; + + // Check signature z move + for (i = 0; i < ARRAY_COUNT(sSignatureZMoves); ++i) + { + if (sSignatureZMoves[i].item == item && sSignatureZMoves[i].species == species && sSignatureZMoves[i].move == move) + return sSignatureZMoves[i].zmove; + } + + return MOVE_NONE; +} + +static u16 GetTypeBasedZMove(u16 move, u8 battler) +{ + u8 moveType = gBattleMoves[move].type; + + // Get z move from type + if (moveType < TYPE_FIRE) + return MOVE_BREAKNECK_BLITZ + moveType; + else if (moveType >= TYPE_FAIRY) + return MOVE_TWINKLE_TACKLE + (moveType - TYPE_FAIRY); + else + return MOVE_BREAKNECK_BLITZ + (moveType - 1); +} + +bool32 MoveSelectionDisplayZMove(u16 zmove) +{ + u32 i; + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + u16 move = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]; + + PlaySE(SE_SELECT); + gBattleStruct->zmove.viewing = TRUE; + if (zmove != MOVE_NONE) + { + // Clear move slots + for (i = 0; i < MAX_MON_MOVES; ++i) + { + MoveSelectionDestroyCursorAt(i); + StringCopy(gDisplayedStringBattle, gText_EmptyString2); + BattlePutTextOnWindow(gDisplayedStringBattle, i + 3); + } + + if (IS_MOVE_STATUS(move)) + { + u8 zEffect = gBattleMoves[move].zMoveEffect; + + gDisplayedStringBattle[0] = EOS; + + if (zEffect == Z_EFFECT_CURSE) + { + if (moveInfo->monType1 == TYPE_GHOST || moveInfo->monType2 == TYPE_GHOST || moveInfo->monType3 == TYPE_GHOST) + zEffect = Z_EFFECT_RECOVER_HP; + else + zEffect = Z_EFFECT_ATK_UP_1; + } + + switch (zEffect) + { + case Z_EFFECT_RESET_STATS: + StringCopy(gDisplayedStringBattle, sText_ResetStats); + break; + case Z_EFFECT_ALL_STATS_UP_1: + StringCopy(gDisplayedStringBattle, sText_StatsPlus); + break; + case Z_EFFECT_BOOST_CRITS: + StringCopy(gDisplayedStringBattle, sText_CritHitsPlus); + break; + case Z_EFFECT_FOLLOW_ME: + StringCopy(gDisplayedStringBattle, sText_FollowMe); + break; + case Z_EFFECT_RECOVER_HP: + StringCopy(gDisplayedStringBattle, sText_RecoverHP); + break; + case Z_EFFECT_RESTORE_REPLACEMENT_HP: + StringCopy(gDisplayedStringBattle, sText_HealAllyHP); + break; + case Z_EFFECT_ATK_UP_1: + case Z_EFFECT_DEF_UP_1: + case Z_EFFECT_SPD_UP_1: + case Z_EFFECT_SPATK_UP_1: + case Z_EFFECT_SPDEF_UP_1: + case Z_EFFECT_ACC_UP_1: + case Z_EFFECT_EVSN_UP_1: + gDisplayedStringBattle[0] = CHAR_PLUS; + gDisplayedStringBattle[1] = 0; + gDisplayedStringBattle[2] = EOS; + PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_1 + 1); + ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 2); + break; + case Z_EFFECT_ATK_UP_2: + case Z_EFFECT_DEF_UP_2: + case Z_EFFECT_SPD_UP_2: + case Z_EFFECT_SPATK_UP_2: + case Z_EFFECT_SPDEF_UP_2: + case Z_EFFECT_ACC_UP_2: + case Z_EFFECT_EVSN_UP_2: + gDisplayedStringBattle[0] = CHAR_PLUS; + gDisplayedStringBattle[1] = CHAR_PLUS; + gDisplayedStringBattle[2] = 0; + gDisplayedStringBattle[3] = EOS; + PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_2 + 1); + ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 3); + break; + case Z_EFFECT_ATK_UP_3: + case Z_EFFECT_DEF_UP_3: + case Z_EFFECT_SPD_UP_3: + case Z_EFFECT_SPATK_UP_3: + case Z_EFFECT_SPDEF_UP_3: + case Z_EFFECT_ACC_UP_3: + case Z_EFFECT_EVSN_UP_3: + gDisplayedStringBattle[0] = CHAR_PLUS; + gDisplayedStringBattle[1] = CHAR_PLUS; + gDisplayedStringBattle[2] = CHAR_PLUS; + gDisplayedStringBattle[3] = 0; + gDisplayedStringBattle[4] = EOS; + PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_3 + 1); + ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 4); + break; + } + + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_NAME_3); + gDisplayedStringBattle[0] = CHAR_Z; + gDisplayedStringBattle[1] = CHAR_HYPHEN; + StringCopy(gDisplayedStringBattle + 2, gMoveNames[move]); + } + else if (zmove == MOVE_EXTREME_EVOBOOST) + { + // Damaging move -> status z move + StringCopy(gDisplayedStringBattle, sText_StatsPlus2); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_NAME_3); + StringCopy(gDisplayedStringBattle, GetZMoveName(zmove)); + } + else + { + ZMoveSelectionDisplayPower(move, zmove); + StringCopy(gDisplayedStringBattle, GetZMoveName(zmove)); + } + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_NAME_1); + + ZMoveSelectionDisplayPpNumber(); + MoveSelectionCreateCursorAt(0, 0); + return TRUE; + } + + return FALSE; +} + +static void ZMoveSelectionDisplayPower(u16 move, u16 zMove) +{ + u8 *txtPtr; + u16 power = gBattleMoves[move].zMovePower; + + if (zMove >= MOVE_CATASTROPIKA) + power = gBattleMoves[zMove].power; + + if (gBattleMoves[move].split != SPLIT_STATUS) + { + txtPtr = StringCopy(gDisplayedStringBattle, sText_PowerColon); + ConvertIntToDecimalStringN(txtPtr, power, STR_CONV_MODE_LEFT_ALIGN, 3); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_NAME_3); + } +} + +static void ZMoveSelectionDisplayPpNumber(void) +{ + u8 *txtPtr; + struct ChooseMoveStruct *moveInfo; + + if (gBattleResources->bufferA[gActiveBattler][2] == TRUE) // Check if we didn't want to display pp number + return; + + SetPpNumbersPaletteInMoveSelection(); + moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); + txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, 1, STR_CONV_MODE_RIGHT_ALIGN, 2); + *(txtPtr)++ = CHAR_SLASH; + ConvertIntToDecimalStringN(txtPtr, 1, STR_CONV_MODE_RIGHT_ALIGN, 2); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_PP_REMAINING); +} + +const u8 *GetZMoveName(u16 move) +{ + if (IsZMove(move)) + return gZMoveNames[move - FIRST_Z_MOVE]; + else + return gZMoveNames[0]; // Failsafe +} + +#define Z_EFFECT_BS_LENGTH 3 +// This function kinda cheats by setting a return battle script to after the setzeffect various command +// and then jumping to a z effect script +void SetZEffect(void) +{ + u32 i; + + gBattleStruct->zmove.zStatusActive = TRUE; + if (gBattleStruct->zmove.effect == Z_EFFECT_CURSE) + { + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) + gBattleStruct->zmove.effect = Z_EFFECT_RECOVER_HP; + else + gBattleStruct->zmove.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) + { + case Z_EFFECT_RESET_STATS: + for (i = 0; i < NUM_BATTLE_STATS - 1; i++) + { + if (gBattleMons[gBattlerAttacker].statStages[i] < DEFAULT_STAT_STAGE) + gBattleMons[gBattlerAttacker].statStages[i] = DEFAULT_STAT_STAGE; + } + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_RESET_STATS; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; + break; + case Z_EFFECT_ALL_STATS_UP_1: + if (!AreStatsMaxed(gBattlerAttacker, STAT_SPDEF)) + { + for (i = 0; i < STAT_ACC - 1; i++) // Doesn't increase Acc or Evsn + { + if (gBattleMons[gBattlerAttacker].statStages[i] < 12) + ++gBattleMons[gBattlerAttacker].statStages[i]; + } + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_ALL_STATS_UP; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; + } + break; + case Z_EFFECT_BOOST_CRITS: + if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY)) + { + gBattleMons[gBattlerAttacker].status2 |= STATUS2_FOCUS_ENERGY; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_BOOST_CRITS; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; + } + break; + case Z_EFFECT_FOLLOW_ME: + gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTimer = 1; + gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTarget = gBattlerAttacker; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_FOLLOW_ME; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; + break; + case Z_EFFECT_RECOVER_HP: + if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP) + { + gBattleMoveDamage = (-1) * gBattleMons[gBattlerAttacker].maxHP; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_RECOVER_HP; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_RecoverHPZMove; + } + break; + case Z_EFFECT_RESTORE_REPLACEMENT_HP: + gBattleStruct->zmove.healReplacement = TRUE; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_HP_TRAP; + 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); + 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); + 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); + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_StatUpZMove; + break; + default: + gBattlescriptCurrInstr += 3; + break; + } + + gBattleStruct->zmove.zStatusActive = FALSE; +} + +static bool32 AreStatsMaxed(u8 battlerId, u8 n) +{ + u32 i; + for (i = STAT_ATK; i <= n; i++) + { + if (STAT_STAGE(battlerId, i) < MAX_STAT_STAGE) + return FALSE; + } + return TRUE; +} + diff --git a/src/berry.c b/src/berry.c index d56ec801ca..e6ee039f40 100644 --- a/src/berry.c +++ b/src/berry.c @@ -26,97 +26,145 @@ static u16 GetStageDurationByBerryType(u8); //.rodata static const u8 sBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers."); -static const u8 sBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy."); -static const u8 sBerryDescriptionPart1_Chesto[] = _("The BERRY's thick skin and fruit are"); +static const u8 sBerryDescriptionPart2_Cheri[] = _("The bright red Berry is very spicy."); +static const u8 sBerryDescriptionPart1_Chesto[] = _("The Berry's thick skin and fruit are"); static const u8 sBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over."); static const u8 sBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious."); static const u8 sBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care."); static const u8 sBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,"); -static const u8 sBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter."); -static const u8 sBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich"); +static const u8 sBerryDescriptionPart2_Rawst[] = _("the Berry seems to grow very bitter."); +static const u8 sBerryDescriptionPart1_Aspear[] = _("The hard Berry is dense with a rich"); static const u8 sBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour."); -static const u8 sBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others."); -static const u8 sBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier."); -static const u8 sBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors."); -static const u8 sBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day."); -static const u8 sBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY's color"); +static const u8 sBerryDescriptionPart1_Leppa[] = _("Grows slower than Cheri and others."); +static const u8 sBerryDescriptionPart2_Leppa[] = _("The smaller the Berry, the tastier."); +static const u8 sBerryDescriptionPart1_Oran[] = _("A peculiar Berry with a mix of flavors."); +static const u8 sBerryDescriptionPart2_Oran[] = _("Berries grow in half a day."); +static const u8 sBerryDescriptionPart1_Persim[] = _("Loves sunlight. The Berry's color"); static const u8 sBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun."); static const u8 sBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving"); -static const u8 sBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES."); -static const u8 sBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large"); -static const u8 sBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor."); -static const u8 sBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,"); +static const u8 sBerryDescriptionPart2_Lum[] = _("care, it may grow two Berries."); +static const u8 sBerryDescriptionPart1_Sitrus[] = _("Closely related to Oran. The large"); +static const u8 sBerryDescriptionPart2_Sitrus[] = _("Berry has a well-rounded flavor."); +static const u8 sBerryDescriptionPart1_Figy[] = _("The Berry, which looks chewed up,"); static const u8 sBerryDescriptionPart2_Figy[] = _("brims with spicy substances."); -static const u8 sBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy"); -static const u8 sBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it."); -static const u8 sBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows."); +static const u8 sBerryDescriptionPart1_Wiki[] = _("The Berry is said to have grown lumpy"); +static const u8 sBerryDescriptionPart2_Wiki[] = _("to help Pokémon grip it."); +static const u8 sBerryDescriptionPart1_Mago[] = _("The Berry turns curvy as it grows."); static const u8 sBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier."); static const u8 sBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its"); static const u8 sBerryDescriptionPart2_Aguav[] = _("ability to grow without light."); -static const u8 sBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour."); +static const u8 sBerryDescriptionPart1_Iapapa[] = _("The Berry is very big and sour."); static const u8 sBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow."); -static const u8 sBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy."); +static const u8 sBerryDescriptionPart1_Razz[] = _("The red Berry tastes slightly spicy."); static const u8 sBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours."); -static const u8 sBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but"); +static const u8 sBerryDescriptionPart1_Bluk[] = _("The Berry is blue on the outside, but"); static const u8 sBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten."); -static const u8 sBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh"); +static const u8 sBerryDescriptionPart1_Nanab[] = _("This Berry was the seventh"); static const u8 sBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet."); static const u8 sBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a"); static const u8 sBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour."); static const u8 sBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold."); static const u8 sBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour."); static const u8 sBerryDescriptionPart1_Pomeg[] = _("However much it is watered,"); -static const u8 sBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES."); +static const u8 sBerryDescriptionPart2_Pomeg[] = _("it only grows up to six Berries."); static const u8 sBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root."); static const u8 sBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower."); static const u8 sBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in"); static const u8 sBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall."); -static const u8 sBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and"); +static const u8 sBerryDescriptionPart1_Hondew[] = _("A Berry that is very valuable and"); static const u8 sBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious."); static const u8 sBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round"); -static const u8 sBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour."); -static const u8 sBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy."); +static const u8 sBerryDescriptionPart2_Grepa[] = _("shape, the Berry is unimaginably sour."); +static const u8 sBerryDescriptionPart1_Tamato[] = _("The Berry is lip-bendingly spicy."); static const u8 sBerryDescriptionPart2_Tamato[] = _("It takes time to grow."); -static const u8 sBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not"); +static const u8 sBerryDescriptionPart1_Cornn[] = _("A Berry from an ancient era. May not"); static const u8 sBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity."); -static const u8 sBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have"); +static const u8 sBerryDescriptionPart1_Magost[] = _("A Berry that is widely said to have"); static const u8 sBerryDescriptionPart2_Magost[] = _("a finely balanced flavor."); static const u8 sBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with"); static const u8 sBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter."); static const u8 sBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it"); static const u8 sBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days."); -static const u8 sBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy."); +static const u8 sBerryDescriptionPart1_Spelon[] = _("The vividly red Berry is very spicy."); static const u8 sBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance."); static const u8 sBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere."); static const u8 sBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere."); -static const u8 sBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20"); +static const u8 sBerryDescriptionPart1_Watmel[] = _("A huge Berry, with some over 20"); static const u8 sBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet."); static const u8 sBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so"); static const u8 sBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is."); static const u8 sBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but"); static const u8 sBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow."); -static const u8 sBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to"); +static const u8 sBerryDescriptionPart1_Chilan[] = _("It can be made into a whistle that"); +static const u8 sBerryDescriptionPart2_Chilan[] = _("produces an indescribable sound."); +static const u8 sBerryDescriptionPart1_Occa[] = _("Said to grow in the tropics once,"); +static const u8 sBerryDescriptionPart2_Occa[] = _("it boasts an intensely hot spiciness."); +static const u8 sBerryDescriptionPart1_Passho[] = _("Its flesh is dotted with many tiny"); +static const u8 sBerryDescriptionPart2_Passho[] = _("bubbles that keep it afloat in water."); +static const u8 sBerryDescriptionPart1_Wacan[] = _("Energy drawn from lightning strikes"); +static const u8 sBerryDescriptionPart2_Wacan[] = _("makes this Berry grow big and rich."); +static const u8 sBerryDescriptionPart1_Rindo[] = _("This berry has a vegetable-like flavor,"); +static const u8 sBerryDescriptionPart2_Rindo[] = _("but is rich in health-promoting fiber."); +static const u8 sBerryDescriptionPart1_Yache[] = _("This Berry has a refreshing dry and"); +static const u8 sBerryDescriptionPart2_Yache[] = _("sour flavor. Tastes better chilled."); +static const u8 sBerryDescriptionPart1_Chople[] = _("Contains a substance that generates"); +static const u8 sBerryDescriptionPart2_Chople[] = _("heat. Can even fire up a chilly heart."); +static const u8 sBerryDescriptionPart1_Kebia[] = _("Brilliant green on the outside, inside"); +static const u8 sBerryDescriptionPart2_Kebia[] = _("it is packed with black-colored flesh."); +static const u8 sBerryDescriptionPart1_Shuca[] = _("The sweet pulp has just the hint of a"); +static const u8 sBerryDescriptionPart2_Shuca[] = _("a hard-edged and fragrant bite to it."); +static const u8 sBerryDescriptionPart1_Coba[] = _("This Berry is said to be a cross of"); +static const u8 sBerryDescriptionPart2_Coba[] = _("two Berries blown in from far away."); +static const u8 sBerryDescriptionPart1_Payapa[] = _("Said to sense human emotions, it swells"); +static const u8 sBerryDescriptionPart2_Payapa[] = _("roundly when a person approaches."); +static const u8 sBerryDescriptionPart1_Tanga[] = _("It grows a flower at the tip that lures"); +static const u8 sBerryDescriptionPart2_Tanga[] = _("Bug Pokémon with its stringy petals."); +static const u8 sBerryDescriptionPart1_Charti[] = _("Often used for pickles because of its"); +static const u8 sBerryDescriptionPart2_Charti[] = _("dry flavor. Sometimes eaten raw."); +static const u8 sBerryDescriptionPart1_Kasib[] = _("Old superstitions say it has an odd"); +static const u8 sBerryDescriptionPart2_Kasib[] = _("power. A popular good-luck charm."); +static const u8 sBerryDescriptionPart1_Haban[] = _("Less bitter if enough of this Berry"); +static const u8 sBerryDescriptionPart2_Haban[] = _("is boiled down. Makes a good jam."); +static const u8 sBerryDescriptionPart1_Colbur[] = _("Tiny hooks on the surface latch onto"); +static const u8 sBerryDescriptionPart2_Colbur[] = _("Pokémon to reach far-off places."); +static const u8 sBerryDescriptionPart1_Babiri[] = _("Very tough with a strong flavor. It"); +static const u8 sBerryDescriptionPart2_Babiri[] = _("was used to make medicine in the past."); +static const u8 sBerryDescriptionPart1_Roseli[] = _("In nature, they grow in wide rings"); +static const u8 sBerryDescriptionPart2_Roseli[] = _("for reasons that are still unknown."); +static const u8 sBerryDescriptionPart1_Liechi[] = _("A mysterious Berry. It is rumored to"); static const u8 sBerryDescriptionPart2_Liechi[] = _("contain the power of the sea."); -static const u8 sBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to"); +static const u8 sBerryDescriptionPart1_Ganlon[] = _("A mysterious Berry. It is rumored to"); static const u8 sBerryDescriptionPart2_Ganlon[] = _("contain the power of the land."); -static const u8 sBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to"); +static const u8 sBerryDescriptionPart1_Salac[] = _("A mysterious Berry. It is rumored to"); static const u8 sBerryDescriptionPart2_Salac[] = _("contain the power of the sky."); -static const u8 sBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to"); +static const u8 sBerryDescriptionPart1_Petaya[] = _("A mysterious Berry. It is rumored to"); static const u8 sBerryDescriptionPart2_Petaya[] = _("contain the power of all living things."); -static const u8 sBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling"); +static const u8 sBerryDescriptionPart1_Apicot[] = _("A very mystifying Berry. No telling"); static const u8 sBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used."); -static const u8 sBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY."); +static const u8 sBerryDescriptionPart1_Lansat[] = _("Said to be a legendary Berry."); static const u8 sBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy."); static const u8 sBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the"); static const u8 sBerryDescriptionPart2_Starf[] = _("world's edge. Considered a mirage."); -static const u8 sBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY."); +static const u8 sBerryDescriptionPart1_Enigma[] = _("A completely enigmatic Berry."); static const u8 sBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars."); +static const u8 sBerryDescriptionPart1_Micle[] = _("It makes other food eaten at the"); +static const u8 sBerryDescriptionPart2_Micle[] = _("same time taste sweet."); +static const u8 sBerryDescriptionPart1_Custap[] = _("The flesh underneath the Custap"); +static const u8 sBerryDescriptionPart2_Custap[] = _("Berry's skin is sweet and creamy soft."); +static const u8 sBerryDescriptionPart1_Jaboca[] = _("The drupelets that make up this berry"); +static const u8 sBerryDescriptionPart2_Jaboca[] = _("pop rythmically if handled roughly."); +static const u8 sBerryDescriptionPart1_Rowap[] = _("People once worked top-shaped pieces"); +static const u8 sBerryDescriptionPart2_Rowap[] = _("of this berry free to use as toys."); +static const u8 sBerryDescriptionPart1_Kee[] = _("A berry that is incredibly spicy at"); +static const u8 sBerryDescriptionPart2_Kee[] = _("first, then extremely bitter."); +static const u8 sBerryDescriptionPart1_Maranga[] = _("Its outside is very bitter, but its"); +static const u8 sBerryDescriptionPart2_Maranga[] = _("inside tastes like a sweet drink."); const struct Berry gBerries[] = { [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = { - .name = _("CHERI"), + .name = _("Cheri"), .firmness = BERRY_FIRMNESS_SOFT, .size = 20, .maxYield = 3, @@ -134,7 +182,7 @@ const struct Berry gBerries[] = [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = { - .name = _("CHESTO"), + .name = _("Chesto"), .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 80, .maxYield = 3, @@ -152,7 +200,7 @@ const struct Berry gBerries[] = [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = { - .name = _("PECHA"), + .name = _("Pecha"), .firmness = BERRY_FIRMNESS_VERY_SOFT, .size = 40, .maxYield = 3, @@ -170,7 +218,7 @@ const struct Berry gBerries[] = [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = { - .name = _("RAWST"), + .name = _("Rawst"), .firmness = BERRY_FIRMNESS_HARD, .size = 32, .maxYield = 3, @@ -188,7 +236,7 @@ const struct Berry gBerries[] = [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = { - .name = _("ASPEAR"), + .name = _("Aspear"), .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 50, .maxYield = 3, @@ -206,7 +254,7 @@ const struct Berry gBerries[] = [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = { - .name = _("LEPPA"), + .name = _("Leppa"), .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 28, .maxYield = 3, @@ -224,7 +272,7 @@ const struct Berry gBerries[] = [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = { - .name = _("ORAN"), + .name = _("Oran"), .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 35, .maxYield = 3, @@ -242,7 +290,7 @@ const struct Berry gBerries[] = [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = { - .name = _("PERSIM"), + .name = _("Persim"), .firmness = BERRY_FIRMNESS_HARD, .size = 47, .maxYield = 3, @@ -260,7 +308,7 @@ const struct Berry gBerries[] = [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = { - .name = _("LUM"), + .name = _("Lum"), .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 34, .maxYield = 2, @@ -278,7 +326,7 @@ const struct Berry gBerries[] = [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = { - .name = _("SITRUS"), + .name = _("Sitrus"), .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 95, .maxYield = 3, @@ -296,7 +344,7 @@ const struct Berry gBerries[] = [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = { - .name = _("FIGY"), + .name = _("Figy"), .firmness = BERRY_FIRMNESS_SOFT, .size = 100, .maxYield = 3, @@ -314,7 +362,7 @@ const struct Berry gBerries[] = [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = { - .name = _("WIKI"), + .name = _("Wiki"), .firmness = BERRY_FIRMNESS_HARD, .size = 115, .maxYield = 3, @@ -332,7 +380,7 @@ const struct Berry gBerries[] = [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = { - .name = _("MAGO"), + .name = _("Mago"), .firmness = BERRY_FIRMNESS_HARD, .size = 126, .maxYield = 3, @@ -350,7 +398,7 @@ const struct Berry gBerries[] = [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = { - .name = _("AGUAV"), + .name = _("Aguav"), .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 64, .maxYield = 3, @@ -368,7 +416,7 @@ const struct Berry gBerries[] = [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = { - .name = _("IAPAPA"), + .name = _("Iapapa"), .firmness = BERRY_FIRMNESS_SOFT, .size = 223, .maxYield = 3, @@ -386,7 +434,7 @@ const struct Berry gBerries[] = [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = { - .name = _("RAZZ"), + .name = _("Razz"), .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 120, .maxYield = 6, @@ -404,7 +452,7 @@ const struct Berry gBerries[] = [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = { - .name = _("BLUK"), + .name = _("Bluk"), .firmness = BERRY_FIRMNESS_SOFT, .size = 108, .maxYield = 6, @@ -422,7 +470,7 @@ const struct Berry gBerries[] = [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = { - .name = _("NANAB"), + .name = _("Nanab"), .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 77, .maxYield = 6, @@ -440,7 +488,7 @@ const struct Berry gBerries[] = [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = { - .name = _("WEPEAR"), + .name = _("Wepear"), .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 74, .maxYield = 6, @@ -458,7 +506,7 @@ const struct Berry gBerries[] = [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = { - .name = _("PINAP"), + .name = _("Pinap"), .firmness = BERRY_FIRMNESS_HARD, .size = 80, .maxYield = 6, @@ -476,7 +524,7 @@ const struct Berry gBerries[] = [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = { - .name = _("POMEG"), + .name = _("Pomeg"), .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 135, .maxYield = 6, @@ -494,7 +542,7 @@ const struct Berry gBerries[] = [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = { - .name = _("KELPSY"), + .name = _("Kelpsy"), .firmness = BERRY_FIRMNESS_HARD, .size = 150, .maxYield = 6, @@ -512,7 +560,7 @@ const struct Berry gBerries[] = [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = { - .name = _("QUALOT"), + .name = _("Qualot"), .firmness = BERRY_FIRMNESS_HARD, .size = 110, .maxYield = 6, @@ -530,7 +578,7 @@ const struct Berry gBerries[] = [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = { - .name = _("HONDEW"), + .name = _("Hondew"), .firmness = BERRY_FIRMNESS_HARD, .size = 162, .maxYield = 6, @@ -548,7 +596,7 @@ const struct Berry gBerries[] = [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = { - .name = _("GREPA"), + .name = _("Grepa"), .firmness = BERRY_FIRMNESS_SOFT, .size = 149, .maxYield = 6, @@ -566,7 +614,7 @@ const struct Berry gBerries[] = [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = { - .name = _("TAMATO"), + .name = _("Tamato"), .firmness = BERRY_FIRMNESS_SOFT, .size = 200, .maxYield = 4, @@ -584,7 +632,7 @@ const struct Berry gBerries[] = [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = { - .name = _("CORNN"), + .name = _("Cornn"), .firmness = BERRY_FIRMNESS_HARD, .size = 75, .maxYield = 4, @@ -602,7 +650,7 @@ const struct Berry gBerries[] = [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = { - .name = _("MAGOST"), + .name = _("Magost"), .firmness = BERRY_FIRMNESS_HARD, .size = 140, .maxYield = 4, @@ -620,7 +668,7 @@ const struct Berry gBerries[] = [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = { - .name = _("RABUTA"), + .name = _("Rabuta"), .firmness = BERRY_FIRMNESS_SOFT, .size = 226, .maxYield = 4, @@ -638,7 +686,7 @@ const struct Berry gBerries[] = [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = { - .name = _("NOMEL"), + .name = _("Nomel"), .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 285, .maxYield = 4, @@ -656,7 +704,7 @@ const struct Berry gBerries[] = [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = { - .name = _("SPELON"), + .name = _("Spelon"), .firmness = BERRY_FIRMNESS_SOFT, .size = 133, .maxYield = 2, @@ -674,7 +722,7 @@ const struct Berry gBerries[] = [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = { - .name = _("PAMTRE"), + .name = _("Pamtre"), .firmness = BERRY_FIRMNESS_VERY_SOFT, .size = 244, .maxYield = 2, @@ -692,7 +740,7 @@ const struct Berry gBerries[] = [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = { - .name = _("WATMEL"), + .name = _("Watmel"), .firmness = BERRY_FIRMNESS_SOFT, .size = 250, .maxYield = 2, @@ -710,7 +758,7 @@ const struct Berry gBerries[] = [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = { - .name = _("DURIN"), + .name = _("Durin"), .firmness = BERRY_FIRMNESS_HARD, .size = 280, .maxYield = 2, @@ -728,7 +776,7 @@ const struct Berry gBerries[] = [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = { - .name = _("BELUE"), + .name = _("Belue"), .firmness = BERRY_FIRMNESS_VERY_SOFT, .size = 300, .maxYield = 2, @@ -744,9 +792,333 @@ const struct Berry gBerries[] = .smoothness = 70, }, + [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Chilan"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .size = 34, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Chilan, + .description2 = sBerryDescriptionPart2_Chilan, + .stageDuration = 18, + .spicy = 0, + .dry = 25, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 35, + }, + + [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Occa"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 90, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Occa, + .description2 = sBerryDescriptionPart2_Occa, + .stageDuration = 18, + .spicy = 15, + .dry = 0, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 30, + }, + + [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Passho"), + .firmness = BERRY_FIRMNESS_SOFT, + .size = 33, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Passho, + .description2 = sBerryDescriptionPart2_Passho, + .stageDuration = 18, + .spicy = 0, + .dry = 15, + .sweet = 0, + .bitter = 10, + .sour = 0, + .smoothness = 30, + }, + + [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Wacan"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .size = 250, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Wacan, + .description2 = sBerryDescriptionPart2_Wacan, + .stageDuration = 18, + .spicy = 0, + .dry = 0, + .sweet = 15, + .bitter = 0, + .sour = 10, + .smoothness = 30, + }, + + [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Rindo"), + .firmness = BERRY_FIRMNESS_SOFT, + .size = 156, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Rindo, + .description2 = sBerryDescriptionPart2_Rindo, + .stageDuration = 18, + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 15, + .sour = 0, + .smoothness = 30, + }, + + [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Yache"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 135, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Yache, + .description2 = sBerryDescriptionPart2_Yache, + .stageDuration = 18, + .spicy = 0, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 15, + .smoothness = 30, + }, + + [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Chople"), + .firmness = BERRY_FIRMNESS_SOFT, + .size = 77, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Chople, + .description2 = sBerryDescriptionPart2_Chople, + .stageDuration = 18, + .spicy = 15, + .dry = 0, + .sweet = 0, + .bitter = 10, + .sour = 0, + .smoothness = 30, + }, + + [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Kebia"), + .firmness = BERRY_FIRMNESS_HARD, + .size = 90, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Kebia, + .description2 = sBerryDescriptionPart2_Kebia, + .stageDuration = 18, + .spicy = 0, + .dry = 15, + .sweet = 0, + .bitter = 0, + .sour = 10, + .smoothness = 30, + }, + + [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Shuca"), + .firmness = BERRY_FIRMNESS_SOFT, + .size = 42, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Shuca, + .description2 = sBerryDescriptionPart2_Shuca, + .stageDuration = 18, + .spicy = 10, + .dry = 0, + .sweet = 15, + .bitter = 0, + .sour = 0, + .smoothness = 30, + }, + + [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Coba"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 278, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Coba, + .description2 = sBerryDescriptionPart2_Coba, + .stageDuration = 18, + .spicy = 0, + .dry = 10, + .sweet = 0, + .bitter = 15, + .sour = 0, + .smoothness = 30, + }, + + [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Payapa"), + .firmness = BERRY_FIRMNESS_SOFT, + .size = 252, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Payapa, + .description2 = sBerryDescriptionPart2_Payapa, + .stageDuration = 18, + .spicy = 0, + .dry = 0, + .sweet = 10, + .bitter = 0, + .sour = 15, + .smoothness = 30, + }, + + [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Tanga"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .size = 42, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Tanga, + .description2 = sBerryDescriptionPart2_Tanga, + .stageDuration = 18, + .spicy = 20, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 10, + .smoothness = 35, + }, + + [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Charti"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .size = 28, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Charti, + .description2 = sBerryDescriptionPart2_Charti, + .stageDuration = 18, + .spicy = 10, + .dry = 20, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 35, + }, + + [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Kasib"), + .firmness = BERRY_FIRMNESS_HARD, + .size = 144, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Kasib, + .description2 = sBerryDescriptionPart2_Kasib, + .stageDuration = 18, + .spicy = 0, + .dry = 10, + .sweet = 20, + .bitter = 0, + .sour = 0, + .smoothness = 35, + }, + + [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Haban"), + .firmness = BERRY_FIRMNESS_SOFT, + .size = 23, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Haban, + .description2 = sBerryDescriptionPart2_Haban, + .stageDuration = 18, + .spicy = 0, + .dry = 0, + .sweet = 10, + .bitter = 20, + .sour = 0, + .smoothness = 35, + }, + + [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Colbur"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 39, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Colbur, + .description2 = sBerryDescriptionPart2_Colbur, + .stageDuration = 18, + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 10, + .sour = 20, + .smoothness = 35, + }, + + [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Babiri"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 265, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Babiri, + .description2 = sBerryDescriptionPart2_Babiri, + .stageDuration = 18, + .spicy = 25, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 35, + }, + + [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Roseli"), + .firmness = BERRY_FIRMNESS_HARD, + .size = 35, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Roseli, + .description2 = sBerryDescriptionPart2_Roseli, + .stageDuration = 18, + .spicy = 0, + .dry = 0, + .sweet = 25, + .bitter = 10, + .sour = 0, + .smoothness = 35, + }, + [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = { - .name = _("LIECHI"), + .name = _("Liechi"), .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 111, .maxYield = 2, @@ -764,7 +1136,7 @@ const struct Berry gBerries[] = [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = { - .name = _("GANLON"), + .name = _("Ganlon"), .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 33, .maxYield = 2, @@ -782,7 +1154,7 @@ const struct Berry gBerries[] = [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = { - .name = _("SALAC"), + .name = _("Salac"), .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 95, .maxYield = 2, @@ -800,7 +1172,7 @@ const struct Berry gBerries[] = [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = { - .name = _("PETAYA"), + .name = _("Petaya"), .firmness = BERRY_FIRMNESS_VERY_HARD, .size = 237, .maxYield = 2, @@ -818,7 +1190,7 @@ const struct Berry gBerries[] = [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = { - .name = _("APICOT"), + .name = _("Apicot"), .firmness = BERRY_FIRMNESS_HARD, .size = 75, .maxYield = 2, @@ -836,7 +1208,7 @@ const struct Berry gBerries[] = [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = { - .name = _("LANSAT"), + .name = _("Lansat"), .firmness = BERRY_FIRMNESS_SOFT, .size = 97, .maxYield = 2, @@ -854,7 +1226,7 @@ const struct Berry gBerries[] = [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = { - .name = _("STARF"), + .name = _("Starf"), .firmness = BERRY_FIRMNESS_SUPER_HARD, .size = 153, .maxYield = 2, @@ -872,7 +1244,133 @@ const struct Berry gBerries[] = [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = { - .name = _("ENIGMA"), + .name = _("Enigma"), + .firmness = BERRY_FIRMNESS_HARD, + .size = 155, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Enigma, + .description2 = sBerryDescriptionPart2_Enigma, + .stageDuration = 24, + .spicy = 40, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 60, + }, + + [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Micle"), + .firmness = BERRY_FIRMNESS_SOFT, + .size = 41, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Micle, + .description2 = sBerryDescriptionPart2_Micle, + .stageDuration = 24, + .spicy = 0, + .dry = 40, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 60, + }, + + [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Custap"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 267, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Custap, + .description2 = sBerryDescriptionPart2_Custap, + .stageDuration = 24, + .spicy = 0, + .dry = 0, + .sweet = 40, + .bitter = 10, + .sour = 0, + .smoothness = 60, + }, + + [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Jaboca"), + .firmness = BERRY_FIRMNESS_SOFT, + .size = 33, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Jaboca, + .description2 = sBerryDescriptionPart2_Jaboca, + .stageDuration = 24, + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 40, + .sour = 10, + .smoothness = 60, + }, + + [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Rowap"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .size = 52, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Rowap, + .description2 = sBerryDescriptionPart2_Rowap, + .stageDuration = 24, + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 40, + .smoothness = 60, + }, + + [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Kee"), + .firmness = BERRY_FIRMNESS_UNKNOWN, + .size = 0, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Kee, + .description2 = sBerryDescriptionPart2_Kee, + .stageDuration = 24, + .spicy = 30, + .dry = 30, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 60, + }, + + [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = + { + .name = _("Marnga"), // "Maranga" is too long + .firmness = BERRY_FIRMNESS_UNKNOWN, + .size = 0, + .maxYield = 5, + .minYield = 2, + .description1 = sBerryDescriptionPart1_Maranga, + .description2 = sBerryDescriptionPart2_Maranga, + .stageDuration = 24, + .spicy = 10, + .dry = 10, + .sweet = 30, + .bitter = 30, + .sour = 10, + .smoothness = 60, + }, + + [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = + { + .name = _("Enigma"), .firmness = BERRY_FIRMNESS_UNKNOWN, .size = 0, .maxYield = 2, @@ -890,49 +1388,49 @@ const struct Berry gBerries[] = }; const struct BerryCrushBerryData gBerryCrush_BerryData[] = { - [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, - [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, - [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, - [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, - [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, - [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, - [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, - [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, - [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, - [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, - [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, - [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, - [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, - [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, - [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, - [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750}, - [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750}, - [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 150, .powder = 200} + [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, + [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, + [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, + [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, + [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, + [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, + [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, + [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, + [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, + [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, + [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, + [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, + [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, + [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, + [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, + [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, + [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, + [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, + [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, + [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, + [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, + [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, + [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, + [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, + [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, + [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, + [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, + [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, + [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, + [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, + [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, + [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, + [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, + [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, + [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, + [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750}, + [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750}, + [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = {.difficulty = 150, .powder = 200} }; const struct BerryTree gBlankBerryTree = {}; @@ -946,7 +1444,7 @@ void ClearEnigmaBerries(void) void SetEnigmaBerry(u8 *src) { u32 i; - u8 *dest = (u8*)&gSaveBlock1Ptr->enigmaBerry; + u8 *dest = (u8 *)&gSaveBlock1Ptr->enigmaBerry; for (i = 0; i < sizeof(gSaveBlock1Ptr->enigmaBerry); i++) dest[i] = src[i]; @@ -958,7 +1456,7 @@ static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) u32 checksum; u8 *dest; - dest = (u8*)enigmaBerry; + dest = (u8 *)enigmaBerry; checksum = 0; for (i = 0; i < sizeof(gSaveBlock1Ptr->enigmaBerry) - sizeof(gSaveBlock1Ptr->enigmaBerry.checksum); i++) checksum += dest[i]; @@ -979,8 +1477,8 @@ bool32 IsEnigmaBerryValid(void) const struct Berry *GetBerryInfo(u8 berry) { - if (berry == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid()) - return (struct Berry*)(&gSaveBlock1Ptr->enigmaBerry.berry); + if (berry == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY_E_READER) && IsEnigmaBerryValid()) + return (struct Berry *)(&gSaveBlock1Ptr->enigmaBerry.berry); else { if (berry == BERRY_NONE || berry > ITEM_TO_BERRY(LAST_BERRY_INDEX)) @@ -1172,7 +1670,7 @@ void GetBerryNameByBerryType(u8 berry, u8 *string) string[BERRY_NAME_LENGTH] = EOS; } -void GetBerryCountStringByBerryType(u8 berry, u8* dest, u32 berryCount) +void GetBerryCountStringByBerryType(u8 berry, u8 *dest, u32 berryCount) { GetBerryCountString(dest, GetBerryInfo(berry)->name, berryCount); } @@ -1300,7 +1798,7 @@ void ObjectEventInteractionPlantBerryTree(void) { u8 berry = ItemIdToBerryType(gSpecialVar_ItemId); - PlantBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent), berry, 1, TRUE); + PlantBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent), berry, BERRY_STAGE_PLANTED, TRUE); ObjectEventInteractionGetBerryTreeData(); } diff --git a/src/berry_blender.c b/src/berry_blender.c index 8e8d392db5..6ff17931b3 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -215,7 +215,7 @@ static void SetPlayerBerryData(u8, u16); static void Blender_AddTextPrinter(u8, const u8 *, u8, u8, s32, s32); static void ResetLinkCmds(void); static void CreateParticleSprites(void); -static void ShakeBgCoordForHit(s16*, u16); +static void ShakeBgCoordForHit(s16 *, u16); static void TryUpdateProgressBar(u16, u16); static void UpdateRPM(u16); static void RestoreBgCoords(void); @@ -265,7 +265,7 @@ static const u8 sText_Master[] = _("MASTER"); static const u8 sText_Dude[] = _("DUDE"); static const u8 sText_Miss[] = _("MISS"); -static const u8* const sBlenderOpponentsNames[] = +static const u8 *const sBlenderOpponentsNames[] = { [BLENDER_MISTER] = sText_Mister, [BLENDER_LADDIE] = sText_Laddie, @@ -402,17 +402,17 @@ static const struct WindowTemplate sYesNoWindowTemplate_ContinuePlaying = static const s8 sPlayerArrowQuadrant[BLENDER_MAX_PLAYERS][2] = { - {-1, -1}, - { 1, -1}, - {-1, 1}, + {-1, -1}, + { 1, -1}, + {-1, 1}, { 1, 1} }; static const u8 sPlayerArrowPos[BLENDER_MAX_PLAYERS][2] = { - { 72, 32}, - {168, 32}, - { 72, 128}, + { 72, 32}, + {168, 32}, + { 72, 128}, {168, 128} }; @@ -427,16 +427,16 @@ static const u8 sPlayerIdMap[BLENDER_MAX_PLAYERS - 1][BLENDER_MAX_PLAYERS] = // Blender arrow positions: // // 0x0000 (limit 0x10000) -// . . +// . . // . . // 0x4000 . . 0xC000 // . . // . . -// . . +// . . // 0x8000 -// +// static const u16 sArrowStartPos[] = { - 0, + 0, MAX_ARROW_POS / 4 * 3, // 0xC000 MAX_ARROW_POS / 4, // 0x4000 MAX_ARROW_POS / 4 * 2 // 0x8000 @@ -446,8 +446,8 @@ static const u8 sArrowHitRangeStart[BLENDER_MAX_PLAYERS] = {32, 224, 96, 160}; static const TaskFunc sLocalOpponentTasks[] = { - Task_HandleOpponent1, - Task_HandleOpponent2, + Task_HandleOpponent1, + Task_HandleOpponent2, Task_HandleOpponent3 }; @@ -456,7 +456,7 @@ static const struct OamData sOam_PlayerArrow = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -599,7 +599,7 @@ static const struct OamData sOam_ScoreSymbols = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -668,7 +668,7 @@ static const struct OamData sOam_Particles = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -755,7 +755,7 @@ static const struct OamData sOam_CountdownNumbers = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -813,7 +813,7 @@ static const struct OamData sOam_Start = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -873,7 +873,7 @@ static const u8 sOpponentBerrySets[NUM_NPC_BERRIES * 2][3] = {ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1}, // player chose Pecha Berry {ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1}, // player chose Rawst Berry {ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1}, // player chose Aspear Berry - + // These sets are used if the player chose a different berry (set is selected by player's berry % 5) {ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1}, // player chose Leppa, Figy, ... {ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1}, // player chose Oran, Wiki, ... @@ -885,14 +885,14 @@ static const u8 sOpponentBerrySets[NUM_NPC_BERRIES * 2][3] = // Berry master's berries follow the same rules as above, but instead of explicitly listing // the alternate sets if the player chooses one of these berries, it implicitly uses these berries - 5, i.e. Tamato - Nomel static const u8 sBerryMasterBerries[] = { - ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1, - ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1, - ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1, - ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1, + ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1, + ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1, + ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1, + ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1, ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1 }; -// "0 players" is link +// "0 players" is link static const u8 sNumPlayersToSpeedDivisor[] = {1, 1, 2, 3, 4}; // Black pokeblocks will use one of these random combinations of flavors @@ -932,7 +932,7 @@ static const struct WindowTemplate sBlenderRecordWindowTemplate = static void UpdateHitPitch(void) { - m4aMPlayPitchControl(&gMPlayInfo_SE2, 0xFFFF, 2 * (sBerryBlender->speed - MIN_ARROW_SPEED)); + m4aMPlayPitchControl(&gMPlayInfo_SE2, TRACKS_ALL, 2 * (sBerryBlender->speed - MIN_ARROW_SPEED)); } static void VBlankCB_BerryBlender(void) @@ -1013,10 +1013,10 @@ static void DrawBlenderBg(void) ShowBg(0); ShowBg(1); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); } static void InitBerryBlenderWindows(void) @@ -1145,7 +1145,7 @@ static void CB2_LoadBerryBlender(void) #define sYDownSpeed data[7] // For throwing berries into the machine -static void SpriteCB_Berry(struct Sprite* sprite) +static void SpriteCB_Berry(struct Sprite *sprite) { sprite->sX += sprite->sXSpeed; sprite->sY -= sprite->sYUpSpeed; @@ -1166,7 +1166,7 @@ static void SpriteCB_Berry(struct Sprite* sprite) sprite->y = sprite->sY; } -static void SetBerrySpriteData(struct Sprite* sprite, s16 x, s16 y, s16 bounceSpeed, s16 xSpeed, s16 ySpeed) +static void SetBerrySpriteData(struct Sprite *sprite, s16 x, s16 y, s16 bounceSpeed, s16 xSpeed, s16 ySpeed) { sprite->sTargetY = y; sprite->sX = x; @@ -1188,14 +1188,14 @@ static void SetBerrySpriteData(struct Sprite* sprite, s16 x, s16 y, s16 bounceSp #undef sXSpeed #undef sYDownSpeed -static void CreateBerrySprite(u16 a0, u8 playerId) +static void CreateBerrySprite(u16 itemId, u8 playerId) { - u8 spriteId = CreateSpinningBerrySprite(a0 + FIRST_BERRY_INDEX - 10, 0, 80, playerId & 1); - SetBerrySpriteData(&gSprites[spriteId], - sBerrySpriteData[playerId][0], - sBerrySpriteData[playerId][1], - sBerrySpriteData[playerId][2], - sBerrySpriteData[playerId][3], + u8 spriteId = CreateSpinningBerrySprite(ITEM_TO_BERRY(itemId) - 1, 0, 80, playerId & 1); + SetBerrySpriteData(&gSprites[spriteId], + sBerrySpriteData[playerId][0], + sBerrySpriteData[playerId][1], + sBerrySpriteData[playerId][2], + sBerrySpriteData[playerId][3], sBerrySpriteData[playerId][4]); } @@ -1355,7 +1355,7 @@ static void CB2_StartBlenderLink(void) { ResetBlockReceivedFlags(); if (GetMultiplayerId() == 0) - SendBlockRequest(4); + SendBlockRequest(BLOCK_REQ_SIZE_40); sBerryBlender->mainState++; } break; @@ -1538,7 +1538,7 @@ static void SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum, struct B u16 berryMasterDiff; u16 i; - if (playerBerryItemId == ITEM_ENIGMA_BERRY) + if (playerBerryItemId == ITEM_ENIGMA_BERRY_E_READER) { for (i = 0; i < FLAVOR_COUNT; i++) { @@ -1608,7 +1608,7 @@ static void PrintPlayerNames(void) text[0] = EOS; StringCopy(text, gLinkPlayers[sBerryBlender->arrowIdToPlayerId[i]].name); - xPos = GetStringCenterAlignXOffset(1, text, 0x38); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, text, 0x38); if (playerId == sBerryBlender->arrowIdToPlayerId[i]) Blender_AddTextPrinter(i, text, xPos, 1, 0, 2); // Highlight player's name in red @@ -1616,7 +1616,7 @@ static void PrintPlayerNames(void) Blender_AddTextPrinter(i, text, xPos, 1, 0, 1); PutWindowTilemap(i); - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); } } } @@ -2069,7 +2069,7 @@ static bool32 CheckRecvCmdMatches(u16 recvCmd, u16 linkCmd, u16 rfuCmd) { if (gReceivedRemoteLinkPlayers && gWirelessCommType) { - if ((recvCmd & 0xFF00) == rfuCmd) + if ((recvCmd & RFUCMD_MASK) == rfuCmd) return TRUE; } else @@ -2135,12 +2135,12 @@ static void UpdateOpponentScores(void) // BUG: Should be [i][BLENDER_COMM_SCORE] below, not [BLENDER_COMM_SCORE][i] // As a result the music tempo updates if any player misses, but only if 1 specific player hits #ifdef BUGFIX - if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_MISS - || gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_BEST + if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_MISS + || gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_BEST || gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_GOOD) #else - if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_MISS - || gRecvCmds[BLENDER_COMM_SCORE][i] == LINKCMD_BLENDER_SCORE_BEST + if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_MISS + || gRecvCmds[BLENDER_COMM_SCORE][i] == LINKCMD_BLENDER_SCORE_BEST || gRecvCmds[BLENDER_COMM_SCORE][i] == LINKCMD_BLENDER_SCORE_GOOD) #endif { @@ -2204,7 +2204,7 @@ static void HandlePlayerInput(void) sBerryBlender->speed--; sBerryBlender->slowdownTimer = 0; } - + if (gEnableContestDebugging && JOY_NEW(L_BUTTON)) sBerryBlender->perfectOpponents ^= 1; } @@ -2238,7 +2238,7 @@ static void CB2_PlayBlender(void) UpdatePaletteFade(); } -static void Blender_DummiedOutFunc(s16 a0, s16 a1) +static void Blender_DummiedOutFunc(s16 bgX, s16 bgY) { } @@ -2260,7 +2260,7 @@ static bool8 AreBlenderBerriesSame(struct BlenderBerry* berries, u8 a, u8 b) return FALSE; } -static u32 CalculatePokeblockColor(struct BlenderBerry* berries, s16* _flavors, u8 numPlayers, u8 negativeFlavors) +static u32 CalculatePokeblockColor(struct BlenderBerry* berries, s16 *_flavors, u8 numPlayers, u8 negativeFlavors) { s16 flavors[FLAVOR_COUNT + 1]; s32 i, j; @@ -2286,7 +2286,7 @@ static u32 CalculatePokeblockColor(struct BlenderBerry* berries, s16* _flavors, for (j = 0; j < numPlayers; j++) { if (berries[i].itemId == berries[j].itemId && i != j - && (berries[i].itemId != ITEM_ENIGMA_BERRY || AreBlenderBerriesSame(berries, i, j))) + && (berries[i].itemId != ITEM_ENIGMA_BERRY_E_READER || AreBlenderBerriesSame(berries, i, j))) return PBLOCK_CLR_BLACK; } } @@ -2494,7 +2494,7 @@ static void CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *p } // Unused -static void Debug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 numPlayers, u8* flavors, u16 maxRPM) +static void Debug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 numPlayers, u8 *flavors, u16 maxRPM) { CalculatePokeblock(berries, pokeblock, numPlayers, flavors, maxRPM); } @@ -2628,7 +2628,7 @@ static void CB2_EndBlenderGame(void) if (gReceivedRemoteLinkPlayers && gWirelessCommType) { - struct BlenderGameBlock *receivedBlock = (struct BlenderGameBlock*)(&gBlockRecvBuffer); + struct BlenderGameBlock *receivedBlock = (struct BlenderGameBlock *)(&gBlockRecvBuffer); sBerryBlender->maxRPM = receivedBlock->timeRPM.maxRPM; sBerryBlender->gameFrameTime = receivedBlock->timeRPM.time; @@ -2641,7 +2641,7 @@ static void CB2_EndBlenderGame(void) } else { - struct TimeAndRPM *receivedBlock = (struct TimeAndRPM*)(&gBlockRecvBuffer); + struct TimeAndRPM *receivedBlock = (struct TimeAndRPM *)(&gBlockRecvBuffer); sBerryBlender->maxRPM = receivedBlock->maxRPM; sBerryBlender->gameFrameTime = receivedBlock->time; @@ -2684,7 +2684,7 @@ static void CB2_EndBlenderGame(void) if (sBerryBlender->arrowIdToPlayerId[i] != NO_PLAYER) { PutWindowTilemap(i); - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); } } break; @@ -2696,7 +2696,7 @@ static void CB2_EndBlenderGame(void) if (sBerryBlender->arrowIdToPlayerId[i] != NO_PLAYER) { PutWindowTilemap(i); - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); } } break; @@ -2785,7 +2785,7 @@ static bool8 LinkPlayAgainHandleSaving(void) } break; case 2: - FullSaveGame(); + WriteSaveBlock2(); sBerryBlender->linkPlayAgainState++; sBerryBlender->framesToWait = 0; break; @@ -2799,7 +2799,7 @@ static bool8 LinkPlayAgainHandleSaving(void) case 4: if (IsLinkTaskFinished()) { - if (CheckSaveFile()) + if (WriteSaveBlock1Sector()) { sBerryBlender->linkPlayAgainState = 5; } @@ -3030,10 +3030,10 @@ static void ProcessLinkPlayerCmds(void) sBerryBlender->playerContinueResponses[0] = LINKCMD_SEND_LINK_TYPE; } } - + // If player is link leader, check for responses to the "Continue playing" prompt (even if it's not up yet) - if (GetMultiplayerId() == 0 - && sBerryBlender->playerContinueResponses[0] != LINKCMD_BLENDER_STOP + if (GetMultiplayerId() == 0 + && sBerryBlender->playerContinueResponses[0] != LINKCMD_BLENDER_STOP && sBerryBlender->playerContinueResponses[0] != LINKCMD_SEND_LINK_TYPE) { u8 i; @@ -3135,7 +3135,7 @@ static void UpdateBlenderCenter(void) } else { - if ((gRecvCmds[0][BLENDER_COMM_INPUT_STATE] & 0xFF00) == RFUCMD_BLENDER_SEND_KEYS) + if ((gRecvCmds[0][BLENDER_COMM_INPUT_STATE] & RFUCMD_MASK) == RFUCMD_BLENDER_SEND_KEYS) { sBerryBlender->progressBarValue = gRecvCmds[0][BLENDER_COMM_PROGRESS_BAR]; sBerryBlender->arrowPos = gRecvCmds[0][BLENDER_COMM_ARROW_POS]; @@ -3159,7 +3159,7 @@ static void SetBgPos(void) SetGpuReg(REG_OFFSET_BG0VOFS, sBerryBlender->bg_Y); } -static void SpriteCB_Particle(struct Sprite* sprite) +static void SpriteCB_Particle(struct Sprite *sprite) { sprite->data[2] += sprite->data[0]; sprite->data[3] += sprite->data[1]; @@ -3194,7 +3194,7 @@ static void CreateParticleSprites(void) } } -static void SpriteCB_ScoreSymbol(struct Sprite* sprite) +static void SpriteCB_ScoreSymbol(struct Sprite *sprite) { sprite->data[0]++; sprite->y2 = -(sprite->data[0] / 3); @@ -3203,7 +3203,7 @@ static void SpriteCB_ScoreSymbol(struct Sprite* sprite) DestroySprite(sprite); } -static void SpriteCB_ScoreSymbolBest(struct Sprite* sprite) +static void SpriteCB_ScoreSymbolBest(struct Sprite *sprite) { sprite->data[0]++; sprite->y2 = -(sprite->data[0] * 2); @@ -3225,7 +3225,7 @@ static void SetPlayerBerryData(u8 playerId, u16 itemId) #define sDelay data[2] #define sAnimId data[3] -static void SpriteCB_CountdownNumber(struct Sprite* sprite) +static void SpriteCB_CountdownNumber(struct Sprite *sprite) { switch (sprite->sState) { @@ -3272,7 +3272,7 @@ static void SpriteCB_CountdownNumber(struct Sprite* sprite) #undef sDelay #undef sAnimId -static void SpriteCB_Start(struct Sprite* sprite) +static void SpriteCB_Start(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -3318,7 +3318,7 @@ static void UpdateProgressBar(u16 value, u16 limit) s32 amountFilled, maxFilledSegment, subSegmentsFilled, i; u16 *vram; - vram = (u16*)(BG_SCREEN_ADDR(12)); + vram = (u16 *)(BG_SCREEN_ADDR(12)); amountFilled = (value * 64) / limit; maxFilledSegment = amountFilled / 8; @@ -3368,22 +3368,22 @@ static void UpdateRPM(u16 speed) digits[i] = currentRPM % 10; currentRPM /= 10; } - *((u16*)(BG_SCREEN_ADDR(12) + 0x458)) = digits[4] + RPM_DIGIT; - *((u16*)(BG_SCREEN_ADDR(12) + 0x45A)) = digits[3] + RPM_DIGIT; - *((u16*)(BG_SCREEN_ADDR(12) + 0x45C)) = digits[2] + RPM_DIGIT; - *((u16*)(BG_SCREEN_ADDR(12) + 0x460)) = digits[1] + RPM_DIGIT; - *((u16*)(BG_SCREEN_ADDR(12) + 0x462)) = digits[0] + RPM_DIGIT; + *((u16 *)(BG_SCREEN_ADDR(12) + 0x458)) = digits[4] + RPM_DIGIT; + *((u16 *)(BG_SCREEN_ADDR(12) + 0x45A)) = digits[3] + RPM_DIGIT; + *((u16 *)(BG_SCREEN_ADDR(12) + 0x45C)) = digits[2] + RPM_DIGIT; + *((u16 *)(BG_SCREEN_ADDR(12) + 0x460)) = digits[1] + RPM_DIGIT; + *((u16 *)(BG_SCREEN_ADDR(12) + 0x462)) = digits[0] + RPM_DIGIT; } // Passed a pointer to the bg x/y // Used when hitting a Best at high RPM -static void ShakeBgCoordForHit(s16* coord, u16 speed) +static void ShakeBgCoordForHit(s16 *coord, u16 speed) { if (*coord == 0) *coord = (Random() % speed) - (speed / 2); } -static void RestoreBgCoord(s16* coord) +static void RestoreBgCoord(s16 *coord) { if (*coord < 0) (*coord)++; @@ -3398,7 +3398,7 @@ static void RestoreBgCoords(void) RestoreBgCoord(&sBerryBlender->bg_Y); } -static void BlenderLandShakeBgCoord(s16* coord, u16 timer) +static void BlenderLandShakeBgCoord(s16 *coord, u16 timer) { s32 strength; @@ -3443,7 +3443,7 @@ static bool8 UpdateBlenderLandScreenShake(void) return FALSE; } -static void SpriteCB_PlayerArrow(struct Sprite* sprite) +static void SpriteCB_PlayerArrow(struct Sprite *sprite) { sprite->x2 = -(sBerryBlender->bg_X); sprite->y2 = -(sBerryBlender->bg_Y); @@ -3494,8 +3494,8 @@ static bool8 PrintBlendingResults(void) u16 minutes, seconds; u8 *txtPtr; - xPos = GetStringCenterAlignXOffset(1, sText_BlendingResults, 0xA8); - Blender_AddTextPrinter(5, sText_BlendingResults, xPos, 1, TEXT_SPEED_FF, 0); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, sText_BlendingResults, 0xA8); + Blender_AddTextPrinter(5, sText_BlendingResults, xPos, 1, TEXT_SKIP_DRAW, 0); if (sBerryBlender->numPlayers == BLENDER_MAX_PLAYERS) yPos = 17; @@ -3510,15 +3510,15 @@ static bool8 PrintBlendingResults(void) StringAppend(sBerryBlender->stringVar, sText_Dot); StringAppend(sBerryBlender->stringVar, gText_Space); StringAppend(sBerryBlender->stringVar, gLinkPlayers[place].name); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 8, yPos, TEXT_SPEED_FF, 3); + Blender_AddTextPrinter(5, sBerryBlender->stringVar, 8, yPos, TEXT_SKIP_DRAW, 3); StringCopy(sBerryBlender->stringVar, sBerryBlender->blendedBerries[place].name); ConvertInternationalString(sBerryBlender->stringVar, gLinkPlayers[place].language); StringAppend(sBerryBlender->stringVar, sText_SpaceBerry); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 0x54, yPos, TEXT_SPEED_FF, 3); + Blender_AddTextPrinter(5, sBerryBlender->stringVar, 0x54, yPos, TEXT_SKIP_DRAW, 3); } - Blender_AddTextPrinter(5, sText_MaximumSpeed, 0, 0x51, TEXT_SPEED_FF, 3); + Blender_AddTextPrinter(5, sText_MaximumSpeed, 0, 0x51, TEXT_SKIP_DRAW, 3); ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->maxRPM / 100, STR_CONV_MODE_RIGHT_ALIGN, 3); StringAppend(sBerryBlender->stringVar, sText_Dot); @@ -3526,9 +3526,9 @@ static bool8 PrintBlendingResults(void) StringAppend(sBerryBlender->stringVar, text); StringAppend(sBerryBlender->stringVar, sText_RPM); - xPos = GetStringRightAlignXOffset(1, sBerryBlender->stringVar, 0xA8); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, xPos, 0x51, TEXT_SPEED_FF, 3); - Blender_AddTextPrinter(5, sText_Time, 0, 0x61, TEXT_SPEED_FF, 3); + xPos = GetStringRightAlignXOffset(FONT_NORMAL, sBerryBlender->stringVar, 0xA8); + Blender_AddTextPrinter(5, sBerryBlender->stringVar, xPos, 0x51, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(5, sText_Time, 0, 0x61, TEXT_SKIP_DRAW, 3); seconds = (sBerryBlender->gameFrameTime / 60) % 60; minutes = (sBerryBlender->gameFrameTime / (60 * 60)); @@ -3539,13 +3539,13 @@ static bool8 PrintBlendingResults(void) ConvertIntToDecimalStringN(txtPtr, seconds, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(sBerryBlender->stringVar, sText_Sec); - xPos = GetStringRightAlignXOffset(1, sBerryBlender->stringVar, 0xA8); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, xPos, 0x61, TEXT_SPEED_FF, 3); + xPos = GetStringRightAlignXOffset(FONT_NORMAL, sBerryBlender->stringVar, 0xA8); + Blender_AddTextPrinter(5, sBerryBlender->stringVar, xPos, 0x61, TEXT_SKIP_DRAW, 3); sBerryBlender->framesToWait = 0; sBerryBlender->mainState++; - CopyWindowToVram(5, 2); + CopyWindowToVram(5, COPYWIN_GFX); } break; case 4: @@ -3553,7 +3553,7 @@ static bool8 PrintBlendingResults(void) sBerryBlender->mainState++; break; case 5: - ClearStdWindowAndFrameToTransparent(5, 1); + ClearStdWindowAndFrameToTransparent(5, TRUE); for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { @@ -3562,7 +3562,7 @@ static bool8 PrintBlendingResults(void) if (sBerryBlender->arrowIdToPlayerId[i] != NO_PLAYER) { PutWindowTilemap(i); - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); } } @@ -3692,9 +3692,9 @@ static bool8 PrintBlendingRanking(void) } break; case 3: - DrawStdFrameWithCustomTileAndPalette(5, 0, 1, 0xD); - xPos = GetStringCenterAlignXOffset(1, sText_Ranking, 168); - Blender_AddTextPrinter(5, sText_Ranking, xPos, 1, TEXT_SPEED_FF, 0); + DrawStdFrameWithCustomTileAndPalette(5, FALSE, 1, 0xD); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, sText_Ranking, 168); + Blender_AddTextPrinter(5, sText_Ranking, xPos, 1, TEXT_SKIP_DRAW, 0); sBerryBlender->scoreIconIds[SCORE_BEST] = CreateSprite(&sSpriteTemplate_ScoreSymbols, 128, 52, 0); StartSpriteAnim(&gSprites[sBerryBlender->scoreIconIds[SCORE_BEST]], SCOREANIM_BEST_STATIC); @@ -3718,20 +3718,20 @@ static bool8 PrintBlendingRanking(void) StringAppend(sBerryBlender->stringVar, sText_Dot); StringAppend(sBerryBlender->stringVar, gText_Space); StringAppend(sBerryBlender->stringVar, gLinkPlayers[place].name); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 0, yPos, TEXT_SPEED_FF, 3); + Blender_AddTextPrinter(5, sBerryBlender->stringVar, 0, yPos, TEXT_SKIP_DRAW, 3); ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->scores[place][SCORE_BEST], STR_CONV_MODE_RIGHT_ALIGN, 3); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78, yPos, TEXT_SPEED_FF, 3); + Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78, yPos, TEXT_SKIP_DRAW, 3); ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->scores[place][SCORE_GOOD], STR_CONV_MODE_RIGHT_ALIGN, 3); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78 + 32, yPos, TEXT_SPEED_FF, 3); + Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78 + 32, yPos, TEXT_SKIP_DRAW, 3); ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->scores[place][SCORE_MISS], STR_CONV_MODE_RIGHT_ALIGN, 3); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78 + 64, yPos, TEXT_SPEED_FF, 3); + Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78 + 64, yPos, TEXT_SKIP_DRAW, 3); } PutWindowTilemap(5); - CopyWindowToVram(5, 3); + CopyWindowToVram(5, COPYWIN_FULL); sBerryBlender->framesToWait = 0; sBerryBlender->mainState++; @@ -3764,12 +3764,12 @@ void ShowBerryBlenderRecordWindow(void) winTemplate = sBlenderRecordWindowTemplate; gRecordsWindowId = AddWindow(&winTemplate); - DrawStdWindowFrame(gRecordsWindowId, 0); + DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); - xPos = GetStringCenterAlignXOffset(1, gText_BlenderMaxSpeedRecord, 144); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_BlenderMaxSpeedRecord, xPos, 1, 0, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_234Players, 4, 41, 0, NULL); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gText_BlenderMaxSpeedRecord, 144); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_BlenderMaxSpeedRecord, xPos, 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_234Players, 4, 41, 0, NULL); for (i = 0, yPos = 41; i < NUM_SCORE_TYPES; i++) { @@ -3783,12 +3783,12 @@ void ShowBerryBlenderRecordWindow(void) txtPtr = ConvertIntToDecimalStringN(txtPtr, record % 100, STR_CONV_MODE_LEADING_ZEROS, 2); txtPtr = StringAppend(txtPtr, sText_RPM); - xPos = GetStringRightAlignXOffset(1, text, 140); - AddTextPrinterParameterized(gRecordsWindowId, 1, text, xPos, yPos + (i * 16), 0, NULL); + xPos = GetStringRightAlignXOffset(FONT_NORMAL, text, 140); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, text, xPos, yPos + (i * 16), 0, NULL); } PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } static void Task_PlayPokeblockFanfare(u8 taskId) @@ -3879,7 +3879,7 @@ static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s3 FillWindowPixelBuffer(windowId, PIXEL_FILL(txtColor[0])); } - AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, 1, txtColor, speed, string); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, letterSpacing, 1, txtColor, speed, string); } static bool32 Blender_PrintText(s16 *textState, const u8 *string, s32 textSpeed) @@ -3890,7 +3890,7 @@ static bool32 Blender_PrintText(s16 *textState, const u8 *string, s32 textSpeed) DrawDialogFrameWithCustomTileAndPalette(4, FALSE, 0x14, 0xF); Blender_AddTextPrinter(4, string, 0, 1, textSpeed, 0); PutWindowTilemap(4); - CopyWindowToVram(4, 3); + CopyWindowToVram(4, COPYWIN_FULL); (*textState)++; break; case 1: diff --git a/src/berry_crush.c b/src/berry_crush.c index 5504d05d6e..eff0a20737 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -171,7 +171,7 @@ enum { #define INPUT_FLAG_MASK ((1 << INPUT_FLAGS_PER_PLAYER) - 1) // Values for the inputState field -enum { +enum { INPUT_STATE_NONE, INPUT_STATE_HIT, // Hit the crusher INPUT_STATE_HIT_SYNC, // Hit the crusher at same time as another player @@ -241,7 +241,7 @@ struct BerryCrushGame_Results }; // playerIdsRanked above has 3 additional elements after the players. -// Only 1 of these 2*3 is ever used, and it stores the id for which +// Only 1 of these 2*3 is ever used, and it stores the id for which // random results page to show. Its define below is for readability. #define randomPageId playerIdsRanked[0][7] @@ -369,33 +369,33 @@ static u32 Cmd_Quit(struct BerryCrushGame *, u8 *); static EWRAM_DATA struct BerryCrushGame *sGame = NULL; -static const u8 sBitTable[] = { - 1 << 0, - 1 << 1, - 1 << 2, - 1 << 3, - 1 << 4, - 1 << 5, - 1 << 6, - 1 << 7 +static const u8 sBitTable[] = { + 1 << 0, + 1 << 1, + 1 << 2, + 1 << 3, + 1 << 4, + 1 << 5, + 1 << 6, + 1 << 7 }; // Additional A presses are counted depending on the number of players // The bonus of 5 is unobtainable static const u8 sSyncPressBonus[MAX_RFU_PLAYERS] = { 0, 1, 2, 3, 5 }; ALIGNED(4) -static const s8 sIntroOutroVibrationData[][7] = +static const s8 sIntroOutroVibrationData[][7] = { - { 4, 1, 0, -1, 0, 0, 0}, - { 4, 2, 0, -1, 0, 0, 0}, - { 4, 2, 0, -2, 0, 0, 0}, - { 6, 3, 1, -1, -3, -1, 0}, + { 4, 1, 0, -1, 0, 0, 0}, + { 4, 2, 0, -1, 0, 0, 0}, + { 4, 2, 0, -2, 0, 0, 0}, + { 6, 3, 1, -1, -3, -1, 0}, { 6, 4, 1, -2, -4, -2, 0}, }; ALIGNED(4) -static const u8 sVibrationData[MAX_RFU_PLAYERS][4] = +static const u8 sVibrationData[MAX_RFU_PLAYERS][4] = { - {3, 2, 1, 0}, + {3, 2, 1, 0}, {3, 3, 1, 0}, {3, 3, 2, 0}, {3, 4, 2, 0}, @@ -433,7 +433,7 @@ static const struct BgTemplate sBgTemplates[4] = .screenSize = 2, .paletteMode = 0, .priority = 1, - .baseTile = 0, + .baseTile = 0, }, { .bg = 2, @@ -442,7 +442,7 @@ static const struct BgTemplate sBgTemplates[4] = .screenSize = 0, .paletteMode = 0, .priority = 2, - .baseTile = 0, + .baseTile = 0, }, { .bg = 3, @@ -451,7 +451,7 @@ static const struct BgTemplate sBgTemplates[4] = .screenSize = 0, .paletteMode = 0, .priority = 3, - .baseTile = 0, + .baseTile = 0, }, }; @@ -468,11 +468,11 @@ static const u8 sTextColorTable[][3] = static const struct WindowTemplate sWindowTemplate_Rankings = { - .bg = 0, - .tilemapLeft = 3, - .tilemapTop = 4, - .width = 24, - .height = 13, + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 4, + .width = 24, + .height = 13, .paletteNum = 15, .baseBlock = 1 }; @@ -480,48 +480,48 @@ static const struct WindowTemplate sWindowTemplate_Rankings = static const struct WindowTemplate sWindowTemplates_PlayerNames[MAX_RFU_PLAYERS + 1] = { { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 0, - .width = 9, - .height = 2, - .paletteNum = 8, + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 9, + .height = 2, + .paletteNum = 8, .baseBlock = 1005 }, { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 3, - .width = 9, - .height = 2, - .paletteNum = 8, + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 3, + .width = 9, + .height = 2, + .paletteNum = 8, .baseBlock = 987 }, { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 6, - .width = 9, - .height = 2, - .paletteNum = 8, + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 6, + .width = 9, + .height = 2, + .paletteNum = 8, .baseBlock = 969 }, { - .bg = 0, - .tilemapLeft = 21, - .tilemapTop = 3, - .width = 9, - .height = 2, - .paletteNum = 8, + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 3, + .width = 9, + .height = 2, + .paletteNum = 8, .baseBlock = 951 }, { - .bg = 0, - .tilemapLeft = 21, - .tilemapTop = 6, - .width = 9, - .height = 2, - .paletteNum = 8, + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 6, + .width = 9, + .height = 2, + .paletteNum = 8, .baseBlock = 933 }, DUMMY_WIN_TEMPLATE, @@ -530,30 +530,30 @@ static const struct WindowTemplate sWindowTemplates_PlayerNames[MAX_RFU_PLAYERS static const struct WindowTemplate sWindowTemplates_Results[] = { [STATE_RESULTS_PRESSES - RESULTS_STATE_START] = { - .bg = 0, - .tilemapLeft = 5, - .tilemapTop = 2, - .width = 20, - .height = 16, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 2, + .width = 20, + .height = 16, + .paletteNum = 15, .baseBlock = 1 }, [STATE_RESULTS_RANDOM - RESULTS_STATE_START] = { - .bg = 0, - .tilemapLeft = 5, - .tilemapTop = 2, - .width = 20, - .height = 16, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 2, + .width = 20, + .height = 16, + .paletteNum = 15, .baseBlock = 1 }, [STATE_RESULTS_CRUSHING - RESULTS_STATE_START] = { - .bg = 0, - .tilemapLeft = 4, - .tilemapTop = 2, - .width = 22, - .height = 16, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 2, + .width = 22, + .height = 16, + .paletteNum = 15, .baseBlock = 1 }, DUMMY_WIN_TEMPLATE, @@ -567,7 +567,7 @@ static const u8 sResultsWindowHeights[][MAX_RFU_PLAYERS - 1] = {12, 14, 15, 16}, // "Crushing" page }; -static const u32 sPressingSpeedConversionTable[] = +static const u32 sPressingSpeedConversionTable[] = { 50000000, // 50 25000000, // 25 @@ -590,9 +590,9 @@ static const u8 sCrusherTop_Tilemap[] = INCBIN_U8("graphics/berry_crush/crushe static const u8 sContainerCap_Tilemap[] = INCBIN_U8("graphics/berry_crush/container_cap.bin.lz"); static const u8 sBg_Tilemap[] = INCBIN_U8("graphics/berry_crush/bg.bin.lz"); -// Takes the number of players - 2 and a player id and returns the +// Takes the number of players - 2 and a player id and returns the // index into sPlayerCoords where that player should be seated -static const u8 sPlayerIdToPosId[MAX_RFU_PLAYERS - 1][MAX_RFU_PLAYERS] = +static const u8 sPlayerIdToPosId[MAX_RFU_PLAYERS - 1][MAX_RFU_PLAYERS] = { {1, 3}, {0, 1, 3}, @@ -672,18 +672,18 @@ static const s8 sSparkleCoords[][2] = { 40, -16}, }; -static const u16 sPlayerBerrySpriteTags[MAX_RFU_PLAYERS] = +static const u16 sPlayerBerrySpriteTags[MAX_RFU_PLAYERS] = { - TAG_PLAYER1_BERRY, - TAG_PLAYER2_BERRY, - TAG_PLAYER3_BERRY, - TAG_PLAYER4_BERRY, + TAG_PLAYER1_BERRY, + TAG_PLAYER2_BERRY, + TAG_PLAYER3_BERRY, + TAG_PLAYER4_BERRY, TAG_PLAYER5_BERRY }; // sTimerDigits_Gfx is part of this array but is (apparently) uncompressed // It gets cast to raw uncompressed data when used in sDigitObjTemplates -static const struct CompressedSpriteSheet sSpriteSheets[] = +static const struct CompressedSpriteSheet sSpriteSheets[] = { { .data = sCrusherBase_Gfx, .size = 0x800, .tag = TAG_CRUSHER_BASE }, { .data = sImpact_Gfx, .size = 0xE00, .tag = GFXTAG_IMPACT }, @@ -727,23 +727,23 @@ static const union AnimCmd sAnim_Impact_Big[] = static const union AnimCmd sAnim_Sparkle_Small[] = { ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(4, 2), + ANIMCMD_FRAME(4, 2), ANIMCMD_FRAME(8, 2), ANIMCMD_FRAME(12, 2), - ANIMCMD_FRAME(16, 2), - ANIMCMD_FRAME(20, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(20, 2), ANIMCMD_JUMP(0) }; static const union AnimCmd sAnim_Sparkle_Big[] = { - ANIMCMD_FRAME(24, 4), - ANIMCMD_FRAME(28, 4), - ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(24, 4), + ANIMCMD_FRAME(28, 4), + ANIMCMD_FRAME(32, 4), ANIMCMD_FRAME(36, 4), - ANIMCMD_FRAME(40, 4), - ANIMCMD_FRAME(44, 4), - ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(40, 4), + ANIMCMD_FRAME(44, 4), + ANIMCMD_FRAME(48, 4), ANIMCMD_FRAME(52, 4), ANIMCMD_JUMP(0) }; @@ -756,7 +756,7 @@ static const union AnimCmd sAnim_Timer[] = static const union AnimCmd sAnim_PlayerBerry[] = { - ANIMCMD_FRAME(0, 0), + ANIMCMD_FRAME(0, 0), ANIMCMD_END }; @@ -810,71 +810,71 @@ static const union AffineAnimCmd *const sAffineAnims_PlayerBerry[] = static const struct SpriteTemplate sSpriteTemplate_CrusherBase = { - .tileTag = TAG_CRUSHER_BASE, - .paletteTag = TAG_CRUSHER_BASE, - .oam = &gOamData_AffineOff_ObjNormal_64x64, - .anims = sAnims_CrusherBase, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_CRUSHER_BASE, + .paletteTag = TAG_CRUSHER_BASE, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = sAnims_CrusherBase, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_Impact = { .tileTag = GFXTAG_IMPACT, - .paletteTag = PALTAG_EFFECT, - .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_Impact, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .paletteTag = PALTAG_EFFECT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_Impact, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_Impact }; static const struct SpriteTemplate sSpriteTemplate_Sparkle = { - .tileTag = GFXTAG_SPARKLE, - .paletteTag = PALTAG_EFFECT, - .oam = &gOamData_AffineOff_ObjNormal_16x16, - .anims = sAnims_Sparkle, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = GFXTAG_SPARKLE, + .paletteTag = PALTAG_EFFECT, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = sAnims_Sparkle, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_Timer = { - .tileTag = TAG_TIMER_DIGITS, - .paletteTag = TAG_TIMER_DIGITS, - .oam = &gOamData_AffineOff_ObjNormal_8x16, - .anims = sAnims_Timer, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_TIMER_DIGITS, + .paletteTag = TAG_TIMER_DIGITS, + .oam = &gOamData_AffineOff_ObjNormal_8x16, + .anims = sAnims_Timer, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_PlayerBerry = { - .tileTag = TAG_PLAYER1_BERRY, - .paletteTag = TAG_PLAYER1_BERRY, - .oam = &gOamData_AffineDouble_ObjNormal_32x32, - .anims = sAnims_PlayerBerry, - .images = NULL, - .affineAnims = sAffineAnims_PlayerBerry, + .tileTag = TAG_PLAYER1_BERRY, + .paletteTag = TAG_PLAYER1_BERRY, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = sAnims_PlayerBerry, + .images = NULL, + .affineAnims = sAffineAnims_PlayerBerry, .callback = SpriteCallbackDummy }; -static const struct DigitObjUtilTemplate sDigitObjTemplates[] = +static const struct DigitObjUtilTemplate sDigitObjTemplates[] = { { // Minutes .strConvMode = 1, .shape = 2, .size = 0, .priority = 0, - .oamCount = 2, - .xDelta = 8, + .oamCount = 2, + .xDelta = 8, .x = 156, .y = 0, - .spriteSheet = (void*) &sSpriteSheets[3], + .spriteSheet = (void *) &sSpriteSheets[3], .spritePal = &sSpritePals[2], }, { // Seconds @@ -882,11 +882,11 @@ static const struct DigitObjUtilTemplate sDigitObjTemplates[] = .shape = 2, .size = 0, .priority = 0, - .oamCount = 2, - .xDelta = 8, + .oamCount = 2, + .xDelta = 8, .x = 180, .y = 0, - .spriteSheet = (void*) &sSpriteSheets[3], + .spriteSheet = (void *) &sSpriteSheets[3], .spritePal = &sSpritePals[2], }, { // 1/60ths of a second @@ -894,11 +894,11 @@ static const struct DigitObjUtilTemplate sDigitObjTemplates[] = .shape = 2, .size = 0, .priority = 0, - .oamCount = 2, - .xDelta = 8, + .oamCount = 2, + .xDelta = 8, .x = 204, .y = 0, - .spriteSheet = (void*) &sSpriteSheets[3], + .spriteSheet = (void *) &sSpriteSheets[3], .spritePal = &sSpritePals[2], } }; @@ -914,7 +914,7 @@ static const u8 *const sResultsTexts[] = [RESULTS_PAGE_POWER + NUM_RESULTS_PAGES] = gText_PressingPowerRankings, }; -static u32 (*const sBerryCrushCommands[])(struct BerryCrushGame * game, u8 * data) = +static u32 (*const sBerryCrushCommands[])(struct BerryCrushGame * game, u8 *data) = { [CMD_NONE] = NULL, [CMD_FADE] = Cmd_BeginNormalPaletteFade, @@ -944,7 +944,7 @@ static u32 (*const sBerryCrushCommands[])(struct BerryCrushGame * game, u8 * dat [CMD_QUIT] = Cmd_Quit, }; -// Per group size, the number of A presses required to increase the number of sparkles. +// Per group size, the number of A presses required to increase the number of sparkles. static const u8 sSparkleThresholds[MAX_RFU_PLAYERS - 1][4] = { {2, 4, 6, 7}, // 2 players @@ -984,12 +984,12 @@ static u32 QuitBerryCrush(MainCallback exitCallback) return 0; } -#define ERROR_EXIT(exitCallback) \ - { \ - SetMainCallback2(exitCallback); \ - Rfu.unk_10 = 0; \ - Rfu.unk_12 = 0; \ - Rfu.errorState = 1; \ +#define ERROR_EXIT(exitCallback) \ + { \ + SetMainCallback2(exitCallback); \ + gRfu.errorParam0 = 0; \ + gRfu.errorParam1 = 0; \ + gRfu.errorState = RFU_ERROR_STATE_OCCURRED; \ } void StartBerryCrush(MainCallback exitCallback) @@ -1202,12 +1202,12 @@ static s32 ShowGameDisplay(void) SetBgTilemapBuffer(1, game->gfx.bgBuffers[0]); SetBgTilemapBuffer(2, game->gfx.bgBuffers[2]); SetBgTilemapBuffer(3, game->gfx.bgBuffers[3]); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); break; @@ -1249,8 +1249,8 @@ static s32 ShowGameDisplay(void) CreateWirelessStatusIndicatorSprite(0, 0); CreateGameSprites(game); SetGpuReg(REG_OFFSET_BG1VOFS, -gSpriteCoordOffsetY); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); break; case 9: gPaletteFade.bufferTransferDisabled = FALSE; @@ -1472,7 +1472,7 @@ static void UpdateInputEffects(struct BerryCrushGame *game, struct BerryCrushGam numPlayersPressed = 0; linkState = (struct BerryCrushGame_LinkState *)game->recvCmd; - + // Read inputs and update impact effects for (i = 0; i < game->playerCount; i++) { @@ -1591,8 +1591,8 @@ static void FramesToMinSec(struct BerryCrushGame_Gfx *gfx, u16 frames) static void PrintTextCentered(u8 windowId, u8 left, u8 colorId, const u8 *string) { - left = (left * 4) - (GetStringWidth(2, string, -1) / 2u); - AddTextPrinterParameterized3(windowId, 2, left, 0, sTextColorTable[colorId], 0, string); + left = (left * 4) - (GetStringWidth(FONT_SHORT, string, -1) / 2u); + AddTextPrinterParameterized3(windowId, FONT_SHORT, left, 0, sTextColorTable[colorId], 0, string); } static void PrintResultsText(struct BerryCrushGame * game, u8 page, u8 sp14, u8 baseY) @@ -1652,8 +1652,8 @@ static void PrintResultsText(struct BerryCrushGame * game, u8 page, u8 sp14, u8 StringExpandPlaceholders(gStringVar4, sResultsTexts[page]); break; } - x = GetStringRightAlignXOffset(2, gStringVar4, sp14 - 4); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, x, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); + x = GetStringRightAlignXOffset(FONT_SHORT, gStringVar4, sp14 - 4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, x, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); if (playerId == game->localId) StringCopy(gStringVar3, gText_1DotBlueF700); else @@ -1661,7 +1661,7 @@ static void PrintResultsText(struct BerryCrushGame * game, u8 page, u8 sp14, u8 gStringVar3[0] = ranking + CHAR_1; DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, game->players[playerId].name); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gStringVar3); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, 4, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, 4, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); } } @@ -1676,35 +1676,35 @@ static void PrintCrushingResults(struct BerryCrushGame *game) FramesToMinSec(&game->gfx, results->time); // Print time text - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, x, y, sTextColorTable[COLORID_GRAY], 0, gText_TimeColon); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, x, y, sTextColorTable[COLORID_GRAY], 0, gText_TimeColon); // Print seconds text - x = 176 - (u8)GetStringWidth(2, gText_SpaceSec, -1); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, x, y, sTextColorTable[COLORID_GRAY], 0, gText_SpaceSec); + x = 176 - (u8)GetStringWidth(FONT_SHORT, gText_SpaceSec, -1); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, x, y, sTextColorTable[COLORID_GRAY], 0, gText_SpaceSec); // Print seconds value ConvertIntToDecimalStringN(gStringVar1, game->gfx.secondsInt, STR_CONV_MODE_LEADING_ZEROS, 2); ConvertIntToDecimalStringN(gStringVar2, game->gfx.secondsFrac, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_XDotY2); - x -= GetStringWidth(2, gStringVar4, -1); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, x, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); + x -= GetStringWidth(FONT_SHORT, gStringVar4, -1); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, x, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); // Print minutes text - x -= GetStringWidth(2, gText_SpaceMin, -1); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, x, y, sTextColorTable[COLORID_GRAY], 0, gText_SpaceMin); + x -= GetStringWidth(FONT_SHORT, gText_SpaceMin, -1); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, x, y, sTextColorTable[COLORID_GRAY], 0, gText_SpaceMin); // Print minutes value ConvertIntToDecimalStringN(gStringVar1, game->gfx.minutes, STR_CONV_MODE_LEADING_ZEROS, 1); StringExpandPlaceholders(gStringVar4, gText_StrVar1); - x -= GetStringWidth(2, gStringVar4, -1); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, x, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); - + x -= GetStringWidth(FONT_SHORT, gStringVar4, -1); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, x, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); + // Print pressing speed text y += 14; - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, 0, y, sTextColorTable[COLORID_GRAY], 0, gText_PressingSpeed); - x = 176 - (u8)GetStringWidth(2, gText_TimesPerSec, -1); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, x, y, sTextColorTable[COLORID_GRAY], 0, gText_TimesPerSec); - + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, 0, y, sTextColorTable[COLORID_GRAY], 0, gText_PressingSpeed); + x = 176 - (u8)GetStringWidth(FONT_SHORT, gText_TimesPerSec, -1); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, x, y, sTextColorTable[COLORID_GRAY], 0, gText_TimesPerSec); + // Print pressing speed value for (i = 0; i < 8; i++) if (((u8)game->pressingSpeed >> (7 - i)) & 1) @@ -1712,21 +1712,21 @@ static void PrintCrushingResults(struct BerryCrushGame *game) ConvertIntToDecimalStringN(gStringVar1, game->pressingSpeed >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3); ConvertIntToDecimalStringN(gStringVar2, pressingSpeedFrac / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_XDotY3); - x -= GetStringWidth(2, gStringVar4, -1); + x -= GetStringWidth(FONT_SHORT, gStringVar4, -1); if (game->newRecord) - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, x, y, sTextColorTable[COLORID_RED], 0, gStringVar4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, x, y, sTextColorTable[COLORID_RED], 0, gStringVar4); else - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, x, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, x, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); // Print silkiness text y += 14; - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, 0, y, sTextColorTable[COLORID_GRAY], 0, gText_Silkiness); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, 0, y, sTextColorTable[COLORID_GRAY], 0, gText_Silkiness); // Print silkiness value ConvertIntToDecimalStringN(gStringVar1, results->silkiness, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_Var1Percent); - x = 176 - (u8)GetStringWidth(2, gStringVar4, -1); - AddTextPrinterParameterized3(game->gfx.resultsWindowId, 2, x, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); + x = 176 - (u8)GetStringWidth(FONT_SHORT, gStringVar4, -1); + AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_SHORT, x, y, sTextColorTable[COLORID_GRAY], 0, gStringVar4); } static bool32 OpenResultsWindow(struct BerryCrushGame *game, struct BerryCrushGame_Gfx *gfx) @@ -1752,7 +1752,7 @@ static bool32 OpenResultsWindow(struct BerryCrushGame *game, struct BerryCrushGa break; case 2: LoadUserWindowBorderGfx_(gfx->resultsWindowId, 541, 208); - DrawStdFrameWithCustomTileAndPalette(gfx->resultsWindowId, 0, 541, 13); + DrawStdFrameWithCustomTileAndPalette(gfx->resultsWindowId, FALSE, 541, 13); break; case 3: playerCountIdx = game->playerCount - 2; @@ -1778,7 +1778,7 @@ static bool32 OpenResultsWindow(struct BerryCrushGame *game, struct BerryCrushGa PrintCrushingResults(game); break; case 5: - CopyWindowToVram(gfx->resultsWindowId, 3); + CopyWindowToVram(gfx->resultsWindowId, COPYWIN_FULL); gfx->resultsState = 0; return TRUE; } @@ -1788,7 +1788,7 @@ static bool32 OpenResultsWindow(struct BerryCrushGame *game, struct BerryCrushGa static void CloseResultsWindow(struct BerryCrushGame *game) { - ClearStdWindowAndFrameToTransparent(game->gfx.resultsWindowId, 1); + ClearStdWindowAndFrameToTransparent(game->gfx.resultsWindowId, TRUE); RemoveWindow(game->gfx.resultsWindowId); DrawPlayerNameWindows(game); } @@ -1802,7 +1802,7 @@ static void Task_ShowRankings(u8 taskId) u8 i = 0, j, xPos, yPos; u32 score = 0; s16 *data = gTasks[taskId].data; - + switch (tState) { case 0: @@ -1810,24 +1810,24 @@ static void Task_ShowRankings(u8 taskId) PutWindowTilemap(tWindowId); FillWindowPixelBuffer(tWindowId, PIXEL_FILL(0)); LoadUserWindowBorderGfx_(tWindowId, 541, 208); - DrawStdFrameWithCustomTileAndPalette(tWindowId, 0, 541, 13); + DrawStdFrameWithCustomTileAndPalette(tWindowId, FALSE, 541, 13); break; case 1: // Print header text - xPos = 96 - GetStringWidth(1, gText_BerryCrush2, -1) / 2u; - AddTextPrinterParameterized3(tWindowId, 1, xPos, 1, sTextColorTable[COLORID_BLUE], 0, gText_BerryCrush2); - xPos = 96 - GetStringWidth(1, gText_PressingSpeedRankings, -1) / 2u; - AddTextPrinterParameterized3(tWindowId, 1, xPos, 17, sTextColorTable[COLORID_BLUE], 0, gText_PressingSpeedRankings); - + xPos = 96 - GetStringWidth(FONT_NORMAL, gText_BerryCrush2, -1) / 2u; + AddTextPrinterParameterized3(tWindowId, FONT_NORMAL, xPos, 1, sTextColorTable[COLORID_BLUE], 0, gText_BerryCrush2); + xPos = 96 - GetStringWidth(FONT_NORMAL, gText_PressingSpeedRankings, -1) / 2u; + AddTextPrinterParameterized3(tWindowId, FONT_NORMAL, xPos, 17, sTextColorTable[COLORID_BLUE], 0, gText_PressingSpeedRankings); + // Print pressing speed record for each group size, ranked yPos = 41; for (i = 0; i < MAX_RFU_PLAYERS - 1; i++) { ConvertIntToDecimalStringN(gStringVar1, i + 2, STR_CONV_MODE_LEFT_ALIGN, 1); StringExpandPlaceholders(gStringVar4, gText_Var1Players); - AddTextPrinterParameterized3(tWindowId, 1, 0, yPos, sTextColorTable[COLORID_GRAY], 0, gStringVar4); - xPos = 192 - (u8)GetStringWidth(1, gText_TimesPerSec, -1); - AddTextPrinterParameterized3(tWindowId, 1, xPos, yPos, sTextColorTable[COLORID_GRAY], 0, gText_TimesPerSec); + AddTextPrinterParameterized3(tWindowId, FONT_NORMAL, 0, yPos, sTextColorTable[COLORID_GRAY], 0, gStringVar4); + xPos = 192 - (u8)GetStringWidth(FONT_NORMAL, gText_TimesPerSec, -1); + AddTextPrinterParameterized3(tWindowId, FONT_NORMAL, xPos, yPos, sTextColorTable[COLORID_GRAY], 0, gText_TimesPerSec); for (j = 0; j < 8; j++) { if (((tPressingSpeeds(i) & 0xFF) >> (7 - j)) & 1) @@ -1836,12 +1836,12 @@ static void Task_ShowRankings(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, (u16)tPressingSpeeds(i) >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3); ConvertIntToDecimalStringN(gStringVar2, score / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_XDotY3); - xPos -= GetStringWidth(1, gStringVar4, -1); - AddTextPrinterParameterized3(tWindowId, 1, xPos, yPos, sTextColorTable[COLORID_GRAY], 0, gStringVar4); + xPos -= GetStringWidth(FONT_NORMAL, gStringVar4, -1); + AddTextPrinterParameterized3(tWindowId, FONT_NORMAL, xPos, yPos, sTextColorTable[COLORID_GRAY], 0, gStringVar4); yPos += 16; score = 0; } - CopyWindowToVram(tWindowId, 3); + CopyWindowToVram(tWindowId, COPYWIN_FULL); break; case 2: if (JOY_NEW(A_BUTTON | B_BUTTON)) @@ -1849,12 +1849,12 @@ static void Task_ShowRankings(u8 taskId) else return; case 3: - ClearStdWindowAndFrameToTransparent(tWindowId, 1); + ClearStdWindowAndFrameToTransparent(tWindowId, TRUE); ClearWindowTilemap(tWindowId); RemoveWindow(tWindowId); DestroyTask(taskId); - EnableBothScriptContexts(); - ScriptContext2_Disable(); + ScriptContext_Enable(); + UnlockPlayerFieldControls(); tState = 0; return; } @@ -1865,7 +1865,7 @@ void ShowBerryCrushRankings(void) { u8 taskId; - ScriptContext2_Enable(); + LockPlayerFieldControls(); taskId = CreateTask(Task_ShowRankings, 0); gTasks[taskId].tPressingSpeeds(0) = gSaveBlock2Ptr->berryCrush.pressingSpeeds[0]; gTasks[taskId].tPressingSpeeds(1) = gSaveBlock2Ptr->berryCrush.pressingSpeeds[1]; @@ -1885,9 +1885,9 @@ static void HideTimer(struct BerryCrushGame_Gfx *gfx) { gfx->timerSprites[0]->invisible = TRUE; gfx->timerSprites[1]->invisible = TRUE; - DigitObjUtil_HideOrShow(2, 1); - DigitObjUtil_HideOrShow(1, 1); - DigitObjUtil_HideOrShow(0, 1); + DigitObjUtil_HideOrShow(2, TRUE); + DigitObjUtil_HideOrShow(1, TRUE); + DigitObjUtil_HideOrShow(0, TRUE); } static void CreatePlayerNameWindows(struct BerryCrushGame *game) @@ -1913,8 +1913,8 @@ static void DrawPlayerNameWindows(struct BerryCrushGame *game) // Print the player's name AddTextPrinterParameterized4( game->gfx.nameWindowIds[i], - 2, - 36 - GetStringWidth(2, game->players[i].name, 0) / 2u, + FONT_SHORT, + 36 - GetStringWidth(FONT_SHORT, game->players[i].name, 0) / 2u, 1, 0, 0, @@ -1928,8 +1928,8 @@ static void DrawPlayerNameWindows(struct BerryCrushGame *game) // Print a partner's name AddTextPrinterParameterized4( game->gfx.nameWindowIds[i], - 2, - 36 - GetStringWidth(2, game->players[i].name, 0) / 2u, + FONT_SHORT, + 36 - GetStringWidth(FONT_SHORT, game->players[i].name, 0) / 2u, 1, 0, 0, @@ -1938,7 +1938,7 @@ static void DrawPlayerNameWindows(struct BerryCrushGame *game) game->players[i].name ); } - CopyWindowToVram(game->gfx.nameWindowIds[i], 3); + CopyWindowToVram(game->gfx.nameWindowIds[i], COPYWIN_FULL); } CopyBgTilemapBufferToVram(0); } @@ -1947,15 +1947,15 @@ static void DrawPlayerNameWindows(struct BerryCrushGame *game) static void CopyPlayerNameWindowGfxToBg(struct BerryCrushGame *game) { u8 i = 0; - u8 * crusherGfx; + u8 *windowGfx; - LZ77UnCompWram(gBerryCrush_Crusher_Tilemap, gDecompressionBuffer); + LZ77UnCompWram(gBerryCrush_TextWindows_Tilemap, gDecompressionBuffer); - for (crusherGfx = gDecompressionBuffer; i < game->playerCount; i++) + for (windowGfx = gDecompressionBuffer; i < game->playerCount; i++) { CopyToBgTilemapBufferRect( 3, - &crusherGfx[game->gfx.playerCoords[i]->playerId * 40], + &windowGfx[game->gfx.playerCoords[i]->playerId * 40], game->gfx.playerCoords[i]->windowGfxX, game->gfx.playerCoords[i]->windowGfxY, 10, @@ -1977,7 +1977,7 @@ static void CreateGameSprites(struct BerryCrushGame *game) for (i = 0; i < ARRAY_COUNT(sSpriteSheets) - 1; i++) LoadCompressedSpriteSheet(&sSpriteSheets[i]); LoadSpritePalettes(sSpritePals); - + // Create sprite for crusher base spriteId = CreateSprite(&sSpriteTemplate_CrusherBase, 120, 88, 5); game->gfx.coreSprite = &gSprites[spriteId]; @@ -2254,17 +2254,17 @@ static u32 Cmd_PrintMessage(struct BerryCrushGame *game, u8 *args) switch (game->cmdState) { case 0: - DrawDialogueFrame(0, 0); + DrawDialogueFrame(0, FALSE); if (args[1] & F_MSG_EXPAND) { StringExpandPlaceholders(gStringVar4, sMessages[args[0]]); - AddTextPrinterParameterized2(0, 1, gStringVar4, game->textSpeed, 0, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } else { - AddTextPrinterParameterized2(0, 1, sMessages[args[0]], game->textSpeed, 0, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[args[0]], game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); break; case 1: if (!IsTextPrinterActive(0)) @@ -2282,7 +2282,7 @@ static u32 Cmd_PrintMessage(struct BerryCrushGame *game, u8 *args) break; case 3: if (args[1] & F_MSG_CLEAR) - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(0, TRUE); RunOrScheduleCommand(game->nextCmd, SCHEDULE_CMD, NULL); game->cmdState = args[4]; return 0; @@ -2372,7 +2372,7 @@ static u32 Cmd_WaitForOthersToPickBerries(struct BerryCrushGame *game, u8 *args) case 2: if (!IsLinkTaskFinished()) return 0; - + // Send player's chosen berry to partners memset(game->sendCmd, 0, sizeof(game->sendCmd)); game->sendCmd[0] = game->players[game->localId].berryId; @@ -2402,7 +2402,7 @@ static u32 Cmd_WaitForOthersToPickBerries(struct BerryCrushGame *game, u8 *args) game->targetDepth = MathUtil_Div32(Q_24_8(game->targetAPresses), Q_24_8(32)); break; case 5: - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(0, TRUE); RunOrScheduleCommand(CMD_DROP_BERRIES, SCHEDULE_CMD, NULL); game->gameState = STATE_DROP_BERRIES; game->cmdState = 0; @@ -2563,13 +2563,13 @@ static void HandlePartnerInput(struct BerryCrushGame *game) for (i = 0; i < game->playerCount; i++) { linkState = (struct BerryCrushGame_LinkState *)gRecvCmds[i]; - + // Skip player if we have not received a packet from them - if ((linkState->rfuCmd & 0xFF00) != RFUCMD_SEND_PACKET) + if ((linkState->rfuCmd & RFUCMD_MASK) != RFUCMD_SEND_PACKET) continue; if (linkState->sendFlag != SEND_GAME_STATE) continue; - + if (linkState->pushedAButton) { game->localState.playerPressedAFlags |= sBitTable[i]; @@ -2577,10 +2577,10 @@ static void HandlePartnerInput(struct BerryCrushGame *game) game->players[i].numAPresses++; numPlayersPressed++; timeDiff = game->timer - game->players[i].inputTime; - + // If the interval between inputs is regular, the input is considered "neat" // This counts toward the player's neatness score - if (timeDiff >= game->players[i].timeSincePrevInput - 1 + if (timeDiff >= game->players[i].timeSincePrevInput - 1 && timeDiff <= game->players[i].timeSincePrevInput + 1) { // On neat input streak @@ -2595,7 +2595,7 @@ static void HandlePartnerInput(struct BerryCrushGame *game) game->players[i].neatInputStreak = 0; game->players[i].timeSincePrevInput = timeDiff; } - + game->players[i].inputTime = game->timer; game->players[i].inputFlags++; if (game->players[i].inputFlags > F_INPUT_HIT_B) @@ -2637,7 +2637,7 @@ static void HandlePartnerInput(struct BerryCrushGame *game) // Target number of A presses has been reached, game is complete game->newDepth = 32; - game->localState.endGame = TRUE; + game->localState.endGame = TRUE; } // Updates the crusher, input flags, and timer to send to group members @@ -2648,7 +2648,7 @@ static void UpdateLeaderGameState(struct BerryCrushGame *game) u16 flags = 0; u16 temp = 0; u8 i = 0; - + for (i = 0; i < game->playerCount; i++) { if (game->players[i].inputState != INPUT_STATE_NONE) @@ -2727,7 +2727,7 @@ static void HandlePlayerInput(struct BerryCrushGame *game) if (game->localId != 0 && !game->localState.pushedAButton) return; game->localState.sendFlag = SEND_GAME_STATE; - + // Every 30 frames, check whether the sparkles produced should be big, // depending on how many A presses there were in that time if (game->timer % 30 == 0) @@ -2744,7 +2744,7 @@ static void HandlePlayerInput(struct BerryCrushGame *game) game->bigSparkleCounter = 0; game->numBigSparkleChecks++; } - + // Every 15 frames, update the amount of sparkles that should be produced, // depending on how many A presses there were in that time (including the bonus) if (game->timer % 15 == 0) @@ -2787,7 +2787,7 @@ static void HandlePlayerInput(struct BerryCrushGame *game) game->cmdTimer = 0; } } - + } if (game->timer >= MAX_TIME) game->localState.endGame = TRUE; @@ -2805,7 +2805,7 @@ static void RecvLinkData(struct BerryCrushGame *game) for (i = 0; i < game->playerCount; i++) game->players[i].inputState = INPUT_STATE_NONE; - if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET) + if ((gRecvCmds[0][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET) { game->playedSound = FALSE; return; @@ -3056,14 +3056,14 @@ static u32 Cmd_TabulateResults(struct BerryCrushGame *game, u8 *args) game->results.playerIdsRanked[RESULTS_PAGE_RANDOM][i] = i; game->results.stats[RESULTS_PAGE_PRESSES][i] = game->players[i].numAPresses; game->results.totalAPresses += game->results.stats[RESULTS_PAGE_PRESSES][i]; - + // Calculate value for random second results page switch (game->results.randomPageId) { case RESULTS_PAGE_NEATNESS: if (game->players[i].numAPresses != 0) { - // Calculate percentage of inputs that were in largest "neat" streak + // Calculate percentage of inputs that were in largest "neat" streak // "Neat" inputs are those done at a regular interval temp1 = game->players[i].maxNeatInputStreak; temp1 = Q_24_8(temp1); @@ -3129,7 +3129,7 @@ static u32 Cmd_TabulateResults(struct BerryCrushGame *game, u8 *args) // Calculate player rankings for "Number of Presses" by sorting arrays if (game->results.stats[RESULTS_PAGE_PRESSES][j - 1] < game->results.stats[RESULTS_PAGE_PRESSES][j]) { - SWAP(game->results.stats[RESULTS_PAGE_PRESSES][j], + SWAP(game->results.stats[RESULTS_PAGE_PRESSES][j], game->results.stats[RESULTS_PAGE_PRESSES][j - 1], tempStat); SWAP(game->results.playerIdsRanked[RESULTS_PAGE_PRESSES][j], @@ -3139,7 +3139,7 @@ static u32 Cmd_TabulateResults(struct BerryCrushGame *game, u8 *args) // Calculate player rankings for random second results page by sorting arrays if (game->results.stats[RESULTS_PAGE_RANDOM][j - 1] < game->results.stats[RESULTS_PAGE_RANDOM][j]) { - SWAP(game->results.stats[RESULTS_PAGE_RANDOM][j], + SWAP(game->results.stats[RESULTS_PAGE_RANDOM][j], game->results.stats[RESULTS_PAGE_RANDOM][j - 1], tempStat); SWAP(game->results.playerIdsRanked[RESULTS_PAGE_RANDOM][j], @@ -3241,13 +3241,13 @@ static u32 Cmd_SaveGame(struct BerryCrushGame *game, u8 *args) case 2: if (!IsLinkTaskFinished()) return 0; - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3); - CopyWindowToVram(0, 3); - CreateTask(Task_LinkSave, 0); + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + CopyWindowToVram(0, COPYWIN_FULL); + CreateTask(Task_LinkFullSave, 0); break; case 3: - if (FuncIsActiveTask(Task_LinkSave)) + if (FuncIsActiveTask(Task_LinkFullSave)) return 0; break; case 4: @@ -3295,7 +3295,7 @@ static u32 Cmd_AskPlayAgain(struct BerryCrushGame *game, u8 *args) } // Close Yes/No and start communication - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(0, TRUE); SetPrintMessageArgs(args, MSG_COMM_STANDBY, 0, 0, 0); game->nextCmd = CMD_COMM_PLAY_AGAIN; RunOrScheduleCommand(CMD_PRINT_MSG, SCHEDULE_CMD, NULL); @@ -3319,7 +3319,7 @@ static u32 Cmd_CommunicatePlayAgainResponses(struct BerryCrushGame *game, u8 *ar case 1: if (!IsLinkTaskFinished()) return 0; - + // Send player's Yes/No response to partners game->sendCmd[0] = game->playAgainState; game->recvCmd[0] = 0; @@ -3367,7 +3367,7 @@ static u32 Cmd_PlayAgain(struct BerryCrushGame *game, u8 *args) return 0; break; case 2: - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(0, TRUE); ResetCrusherPos(game); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); UpdatePaletteFade(); @@ -3389,12 +3389,12 @@ static u32 Cmd_StopGame(struct BerryCrushGame *game, u8 *args) switch (game->cmdState) { case 0: - DrawDialogueFrame(0, 0); + DrawDialogueFrame(0, FALSE); if (game->playAgainState == PLAY_AGAIN_NO_BERRIES) - AddTextPrinterParameterized2(0, 1, sMessages[MSG_NO_BERRIES], game->textSpeed, 0, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_NO_BERRIES], game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); else - AddTextPrinterParameterized2(0, 1, sMessages[MSG_DROPPED], game->textSpeed, 0, 2, 1, 3); - CopyWindowToVram(0, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_DROPPED], game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + CopyWindowToVram(0, COPYWIN_FULL); break; case 1: if (IsTextPrinterActive(0)) diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index 31caf79cc0..e8c4bc7e68 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -51,20 +51,20 @@ static const u8 sText_TransmissionFailureTryAgain[] = _("Transmission failure.\n static const struct BgTemplate sBerryFixBgTemplates[] = { { - .bg = 0, - .charBaseIndex = 0, - .mapBaseIndex = 30, - .screenSize = 0, - .paletteMode = 0, + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, .priority = 0, .baseTile = 0 - }, + }, { - .bg = 1, - .charBaseIndex = 1, - .mapBaseIndex = 31, - .screenSize = 0, - .paletteMode = 0, + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, .priority = 1, .baseTile = 0 } @@ -72,39 +72,39 @@ static const struct BgTemplate sBerryFixBgTemplates[] = { static const struct WindowTemplate sBerryFixWindowTemplates[] = { { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 4, - .width = 26, - .height = 2, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 4, + .width = 26, + .height = 2, + .paletteNum = 15, .baseBlock = 1 }, { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 11, - .width = 28, - .height = 8, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 11, + .width = 28, + .height = 8, + .paletteNum = 15, .baseBlock = 53 }, { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 8, - .width = 30, - .height = 2, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 8, + .width = 30, + .height = 2, + .paletteNum = 15, .baseBlock = 277 }, { - .bg = 0, - .tilemapLeft = 8, - .tilemapTop = 0, - .width = 14, - .height = 2, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 8, + .tilemapTop = 0, + .width = 14, + .height = 2, + .paletteNum = 15, .baseBlock = 337 }, DUMMY_WIN_TEMPLATE @@ -148,27 +148,27 @@ static const struct { gBerryFixGameboy_Gfx, gBerryFixGameboy_Tilemap, gBerryFixGameboy_Pal - }, + }, [SCENE_TURN_OFF_POWER] = { gBerryFixGameboyLogo_Gfx, gBerryFixGameboyLogo_Tilemap, gBerryFixGameboyLogo_Pal - }, + }, [SCENE_TRANSMITTING] = { gBerryFixGbaTransfer_Gfx, gBerryFixGbaTransfer_Tilemap, gBerryFixGbaTransfer_Pal - }, + }, [SCENE_FOLLOW_INSTRUCT] = { gBerryFixGbaTransferHighlight_Gfx, gBerryFixGbaTransferHighlight_Tilemap, gBerryFixGbaTransferHighlight_Pal - }, + }, [SCENE_TRANSMIT_FAILED] = { gBerryFixGbaTransferError_Gfx, gBerryFixGbaTransferError_Tilemap, gBerryFixGbaTransferError_Pal - }, + }, [SCENE_BEGIN] = { gBerryFixWindow_Gfx, gBerryFixWindow_Tilemap, @@ -242,22 +242,22 @@ static void BerryFix_Main(void) } else if (++sBerryFix->timer > 180) { - MultiBootStartMaster(&sBerryFix->mb, - gMultiBootProgram_BerryGlitchFix_Start + ROM_HEADER_SIZE, - (u32)(gMultiBootProgram_BerryGlitchFix_End - (gMultiBootProgram_BerryGlitchFix_Start + ROM_HEADER_SIZE)), - 4, + MultiBootStartMaster(&sBerryFix->mb, + gMultiBootProgram_BerryGlitchFix_Start + ROM_HEADER_SIZE, + (u32)(gMultiBootProgram_BerryGlitchFix_End - (gMultiBootProgram_BerryGlitchFix_Start + ROM_HEADER_SIZE)), + 4, 1); sBerryFix->state = MAINSTATE_TRANSMIT; } break; case MAINSTATE_TRANSMIT: - if (TryScene(SCENE_TRANSMITTING)) + if (TryScene(SCENE_TRANSMITTING)) { MultiBootMain(&sBerryFix->mb); - if (MultiBootCheckComplete(&sBerryFix->mb)) + if (MultiBootCheckComplete(&sBerryFix->mb)) sBerryFix->state = MAINSTATE_EXIT; - else if (!(sBerryFix->mb.client_bit & 2)) + else if (!(sBerryFix->mb.client_bit & 2)) sBerryFix->state = MAINSTATE_FAILED; } break; @@ -290,10 +290,10 @@ static void BerryFix_GpuSet(void) ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBerryFixBgTemplates, ARRAY_COUNT(sBerryFixBgTemplates)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); InitWindows(sBerryFixWindowTemplates); DeactivateAllTextPrinters(); @@ -303,25 +303,25 @@ static void BerryFix_GpuSet(void) FillWindowPixelBuffer(3, PIXEL_FILL(0)); FillWindowPixelBuffer(0, PIXEL_FILL(10)); - width = GetStringWidth(0, sText_Emerald, 0); + width = GetStringWidth(FONT_SMALL, sText_Emerald, 0); left = (120 - width) / 2; - AddTextPrinterParameterized3(2, 0, left, 3, sGameTitleTextColors, TEXT_SPEED_FF, sText_Emerald); + AddTextPrinterParameterized3(2, FONT_SMALL, left, 3, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_Emerald); - width = GetStringWidth(0, sText_RubySapphire, 0); + width = GetStringWidth(FONT_SMALL, sText_RubySapphire, 0); left = (120 - width) / 2 + 120; - AddTextPrinterParameterized3(2, 0, left, 3, sGameTitleTextColors, TEXT_SPEED_FF, sText_RubySapphire); + AddTextPrinterParameterized3(2, FONT_SMALL, left, 3, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_RubySapphire); - width = GetStringWidth(0, sText_RubySapphire, 0); + width = GetStringWidth(FONT_SMALL, sText_RubySapphire, 0); left = (112 - width) / 2; - AddTextPrinterParameterized3(3, 0, left, 0, sGameTitleTextColors, TEXT_SPEED_FF, sText_RubySapphire); + AddTextPrinterParameterized3(3, FONT_SMALL, left, 0, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_RubySapphire); - width = GetStringWidth(1, sText_BerryProgramUpdate, 0); + width = GetStringWidth(FONT_NORMAL, sText_BerryProgramUpdate, 0); left = (208 - width) / 2; - AddTextPrinterParameterized3(0, 1, left, 2, sBerryProgramTextColors, TEXT_SPEED_FF, sText_BerryProgramUpdate); + AddTextPrinterParameterized3(0, FONT_NORMAL, left, 2, sBerryProgramTextColors, TEXT_SKIP_DRAW, sText_BerryProgramUpdate); - CopyWindowToVram(2, 2); - CopyWindowToVram(3, 2); - CopyWindowToVram(0, 2); + CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(3, COPYWIN_GFX); + CopyWindowToVram(0, COPYWIN_GFX); } static int BerryFix_TrySetScene(int scene) @@ -346,9 +346,9 @@ static void BerryFix_SetScene(int scene) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); FillWindowPixelBuffer(1, PIXEL_FILL(10)); - AddTextPrinterParameterized3(1, 1, 0, 0, sBerryProgramTextColors, -1, sBerryProgramTexts[scene]); + AddTextPrinterParameterized3(1, FONT_NORMAL, 0, 0, sBerryProgramTextColors, TEXT_SKIP_DRAW, sBerryProgramTexts[scene]); PutWindowTilemap(1); - CopyWindowToVram(1, 2); + CopyWindowToVram(1, COPYWIN_GFX); switch (scene) { case SCENE_ENSURE_CONNECT: diff --git a/src/berry_powder.c b/src/berry_powder.c index 50d280f0a6..96f14d6e4e 100755 --- a/src/berry_powder.c +++ b/src/berry_powder.c @@ -62,66 +62,66 @@ static const u32 sUnknown[] = {0xFF, 0x00}; static const struct WindowTemplate sBerryPowderWindowTemplates[] = { { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 1, - .width = 28, - .height = 2, - .paletteNum = 13, + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 2, + .paletteNum = 13, .baseBlock = 19 }, { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 5, - .width = 28, - .height = 14, - .paletteNum = 13, + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 14, + .paletteNum = 13, .baseBlock = 75 }, { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 5, - .width = 28, - .height = 7, - .paletteNum = 13, + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 7, + .paletteNum = 13, .baseBlock = 75 }, { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 8, - .width = 19, - .height = 3, - .paletteNum = 13, + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 8, + .width = 19, + .height = 3, + .paletteNum = 13, .baseBlock = 19 }, { - .bg = 0, - .tilemapLeft = 22, - .tilemapTop = 7, - .width = 6, - .height = 4, - .paletteNum = 13, + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 7, + .width = 6, + .height = 4, + .paletteNum = 13, .baseBlock = 76 }, { - .bg = 0, - .tilemapLeft = 4, - .tilemapTop = 6, - .width = 22, - .height = 5, - .paletteNum = 13, + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 6, + .width = 22, + .height = 5, + .paletteNum = 13, .baseBlock = 19 }, { - .bg = 0, - .tilemapLeft = 5, - .tilemapTop = 8, - .width = 19, - .height = 3, - .paletteNum = 13, + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 8, + .width = 19, + .height = 3, + .paletteNum = 13, .baseBlock = 19 }, }; @@ -205,13 +205,13 @@ u32 GetBerryPowder(void) static void PrintBerryPowderAmount(u8 windowId, int amount, u8 x, u8 y, u8 speed) { ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_RIGHT_ALIGN, 5); - AddTextPrinterParameterized(windowId, 1, gStringVar1, x, y, speed, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar1, x, y, speed, NULL); } static void DrawPlayerPowderAmount(u8 windowId, u16 baseTileOffset, u8 paletteNum, u32 amount) { DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, baseTileOffset, paletteNum); - AddTextPrinterParameterized(windowId, 1, gText_Powder, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_Powder, 0, 1, TEXT_SKIP_DRAW, NULL); PrintBerryPowderAmount(windowId, amount, 26, 17, 0); } diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index babbbb3eb2..d359a0fc1b 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -92,7 +92,7 @@ static const struct BgTemplate sBackgroundTemplates[] = } }; -static const u16 sFontPalette[] = INCBIN_U16("graphics/interface/berry_tag_screen.gbapal"); +static const u16 sFontPalette[] = INCBIN_U16("graphics/bag/berry_tag_screen.gbapal"); static const u8 sTextColors[2][3] = { @@ -200,11 +200,11 @@ static void CB2_InitBerryTagScreen(void) { while (1) { - if (MenuHelpers_CallLinkSomething() == TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() == TRUE) break; if (InitBerryTagScreen() == TRUE) break; - if (MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE) break; } } @@ -237,7 +237,7 @@ static bool8 InitBerryTagScreen(void) gMain.state++; break; case 5: - if (!MenuHelpers_LinkSomething()) + if (!MenuHelpers_IsLinkActive()) ResetTasks(); gMain.state++; break; @@ -276,7 +276,7 @@ static bool8 InitBerryTagScreen(void) gMain.state++; break; case 14: - BlendPalettes(PALETTES_ALL, 0x10, 0); + BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK); gMain.state++; break; case 15: @@ -376,14 +376,14 @@ static void HandleInitWindows(void) static void PrintTextInBerryTagScreen(u8 windowId, const u8 *text, u8 x, u8 y, s32 speed, u8 colorStructId) { - AddTextPrinterParameterized4(windowId, 1, x, y, 0, 0, sTextColors[colorStructId], speed, text); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 0, 0, sTextColors[colorStructId], speed, text); } static void AddBerryTagTextToBg0(void) { memcpy(GetBgTilemapBuffer(0), sBerryTag->tilemapBuffers[2], sizeof(sBerryTag->tilemapBuffers[2])); FillWindowPixelBuffer(WIN_BERRY_TAG, PIXEL_FILL(15)); - PrintTextInBerryTagScreen(WIN_BERRY_TAG, gText_BerryTag, GetStringCenterAlignXOffset(1, gText_BerryTag, 0x40), 1, 0, 1); + PrintTextInBerryTagScreen(WIN_BERRY_TAG, gText_BerryTag, GetStringCenterAlignXOffset(FONT_NORMAL, gText_BerryTag, 0x40), 1, 0, 1); PutWindowTilemap(WIN_BERRY_TAG); ScheduleBgCopyTilemapToVram(0); } @@ -409,7 +409,7 @@ static void PrintBerryNumberAndName(void) static void PrintBerrySize(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gText_SizeSlash, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_SizeSlash, 0, 1, TEXT_SKIP_DRAW, NULL); if (berry->size != 0) { u32 inches, fraction; @@ -423,34 +423,34 @@ static void PrintBerrySize(void) ConvertIntToDecimalStringN(gStringVar1, inches, STR_CONV_MODE_LEFT_ALIGN, 2); ConvertIntToDecimalStringN(gStringVar2, fraction, STR_CONV_MODE_LEFT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_Var1DotVar2); - AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gStringVar4, 0x28, 1, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gStringVar4, 0x28, 1, 0, NULL); } else { - AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gText_ThreeMarks, 0x28, 1, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_ThreeMarks, 0x28, 1, 0, NULL); } } static void PrintBerryFirmness(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gText_FirmSlash, 0, 0x11, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_FirmSlash, 0, 0x11, TEXT_SKIP_DRAW, NULL); if (berry->firmness != 0) - AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, sBerryFirmnessStrings[berry->firmness - 1], 0x28, 0x11, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sBerryFirmnessStrings[berry->firmness - 1], 0x28, 0x11, 0, NULL); else - AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gText_ThreeMarks, 0x28, 0x11, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_ThreeMarks, 0x28, 0x11, 0, NULL); } static void PrintBerryDescription1(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - AddTextPrinterParameterized(WIN_DESC, 1, berry->description1, 0, 1, 0, NULL); + AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berry->description1, 0, 1, 0, NULL); } static void PrintBerryDescription2(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - AddTextPrinterParameterized(WIN_DESC, 1, berry->description2, 0, 0x11, 0, NULL); + AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berry->description2, 0, 0x11, 0, NULL); } static void CreateBerrySprite(void) @@ -550,7 +550,7 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) s16 *data = gTasks[taskId].data; s16 currPocketPosition = gBagPosition.scrollPosition[BERRIES_POCKET] + gBagPosition.cursorPosition[BERRIES_POCKET]; u32 newPocketPosition = currPocketPosition + toMove; - if (newPocketPosition < ITEM_TO_BERRY(MAX_BERRY_INDEX) && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != ITEM_NONE) + if (newPocketPosition < ITEM_TO_BERRY(LAST_BERRY_INDEX) && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != ITEM_NONE) { if (toMove < 0) data[1] = 2; diff --git a/src/bike.c b/src/bike.c index e97a5e04e4..ae30ce288b 100644 --- a/src/bike.c +++ b/src/bike.c @@ -71,12 +71,12 @@ static void (*const sMachBikeTransitions[])(u8) = MachBikeTransition_TrySlowDown, }; -// bikeFrameCounter is input which is represented by sMachBikeSpeeds in order: 0 is normal speed (1 speed), 1 is fast speed (2 speed), 2 is fastest speed (4 speed) +// bikeFrameCounter is input which is represented by sMachBikeSpeeds in order static void (*const sMachBikeSpeedCallbacks[])(u8) = { - PlayerGoSpeed1, // normal speed (1 speed) - PlayerGoSpeed2, // fast speed (2 speed) - PlayerGoSpeed4, // fastest speed (4 speed) + PlayerWalkNormal, + PlayerWalkFast, + PlayerWalkFaster, }; static void (*const sAcroBikeTransitions[])(u8) = @@ -108,7 +108,7 @@ static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) = }; // used with bikeFrameCounter from mach bike -static const u16 sMachBikeSpeeds[] = {SPEED_NORMAL, SPEED_FAST, SPEED_FASTEST}; +static const u16 sMachBikeSpeeds[] = {PLAYER_SPEED_NORMAL, PLAYER_SPEED_FAST, PLAYER_SPEED_FASTEST}; // this is a list of timers to compare against later, terminated with 0. the only timer being compared against is 4 frames in this list. static const u8 sAcroBikeJumpTimerList[] = {4, 0}; @@ -147,7 +147,7 @@ static u8 GetMachBikeTransition(u8 *dirTraveling) if (*dirTraveling == 0) { *dirTraveling = direction; // update the direction, since below we either faced a direction or we started moving. - if (gPlayerAvatar.bikeSpeed == SPEED_STANDING) + if (gPlayerAvatar.bikeSpeed == PLAYER_SPEED_STANDING) { gPlayerAvatar.runningState = NOT_MOVING; return MACH_TRANS_FACE_DIRECTION; @@ -159,7 +159,7 @@ static u8 GetMachBikeTransition(u8 *dirTraveling) // we need to check if the last traveled direction changed from the new direction as well as ensuring that we dont update the state while the player is moving: see the else check. if (*dirTraveling != direction && gPlayerAvatar.runningState != MOVING) { - if (gPlayerAvatar.bikeSpeed != SPEED_STANDING) + if (gPlayerAvatar.bikeSpeed != PLAYER_SPEED_STANDING) { *dirTraveling = direction; // implement the new direction gPlayerAvatar.runningState = MOVING; @@ -246,7 +246,7 @@ static void MachBikeTransition_TrySlowDown(u8 direction) { u8 collision; - if (gPlayerAvatar.bikeSpeed != SPEED_STANDING) + if (gPlayerAvatar.bikeSpeed != PLAYER_SPEED_STANDING) gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.bikeSpeed; collision = GetBikeCollision(direction); @@ -306,7 +306,7 @@ static u8 AcroBikeHandleInputNormal(u8 *newDirection, u16 newKeys, u16 heldKeys) return ACRO_TRANS_FACE_DIRECTION; } } - if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.bikeSpeed == SPEED_STANDING) + if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.bikeSpeed == PLAYER_SPEED_STANDING) { gPlayerAvatar.bikeSpeed++; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING; @@ -342,7 +342,7 @@ static u8 AcroBikeHandleInputTurning(u8 *newDirection, u16 newKeys, u16 heldKeys if (*newDirection == AcroBike_GetJumpDirection()) { Bike_SetBikeStill(); // Bike_SetBikeStill sets speed to standing, but the next line immediately overrides it. could have just reset acroBikeState to 0 here instead of wasting a jump. - gPlayerAvatar.bikeSpeed = SPEED_NORMAL; + gPlayerAvatar.bikeSpeed = PLAYER_SPEED_NORMAL; if (*newDirection == GetOppositeDirection(direction)) { // do a turn jump. @@ -658,7 +658,7 @@ static void AcroBikeTransition_SideJump(u8 direction) playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; PlaySE(SE_BIKE_HOP); playerObjEvent->facingDirectionLocked = 1; - PlayerSetAnimId(GetJumpMovementAction(direction), 2); + PlayerSetAnimId(GetJumpMovementAction(direction), COPY_MOVE_WALK); } static void AcroBikeTransition_TurnJump(u8 direction) @@ -775,7 +775,7 @@ static void AcroBike_TryHistoryUpdate(u16 newKeys, u16 heldKeys) // newKeys is u else { Bike_UpdateDirTimerHistory(direction); - gPlayerAvatar.bikeSpeed = SPEED_STANDING; + gPlayerAvatar.bikeSpeed = PLAYER_SPEED_STANDING; } direction = heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON); // directions is reused for some reason. @@ -787,7 +787,7 @@ static void AcroBike_TryHistoryUpdate(u16 newKeys, u16 heldKeys) // newKeys is u else { Bike_UpdateABStartSelectHistory(direction); - gPlayerAvatar.bikeSpeed = SPEED_STANDING; + gPlayerAvatar.bikeSpeed = PLAYER_SPEED_STANDING; } } @@ -900,7 +900,7 @@ static bool8 IsRunningDisallowedByMetatile(u8 tile) { if (MetatileBehavior_IsRunningDisallowed(tile)) return TRUE; - if (MetatileBehavior_IsFortreeBridge(tile) && (PlayerGetZCoord() & 1) == 0) + if (MetatileBehavior_IsFortreeBridge(tile) && (PlayerGetElevation() & 1) == 0) return TRUE; return FALSE; } @@ -962,7 +962,7 @@ bool8 IsBikingDisallowedByPlayer(void) bool8 IsPlayerNotUsingAcroBikeOnBumpySlope(void) { - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE) + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE) && MetatileBehavior_IsBumpySlope(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior)) return FALSE; else @@ -994,7 +994,7 @@ void BikeClearState(int newDirHistory, int newAbStartHistory) gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; gPlayerAvatar.newDirBackup = DIR_NONE; gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.bikeSpeed = SPEED_STANDING; + gPlayerAvatar.bikeSpeed = PLAYER_SPEED_STANDING; gPlayerAvatar.directionHistory = newDirHistory; gPlayerAvatar.abStartSelectHistory = newAbStartHistory; @@ -1014,7 +1014,7 @@ void Bike_UpdateBikeCounterSpeed(u8 counter) static void Bike_SetBikeStill(void) { gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.bikeSpeed = SPEED_STANDING; + gPlayerAvatar.bikeSpeed = PLAYER_SPEED_STANDING; } s16 GetPlayerSpeed(void) @@ -1027,11 +1027,11 @@ s16 GetPlayerSpeed(void) if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) return machSpeeds[gPlayerAvatar.bikeFrameCounter]; else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) - return SPEED_FASTER; + return PLAYER_SPEED_FASTER; else if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_DASH)) - return SPEED_FAST; + return PLAYER_SPEED_FAST; else - return SPEED_NORMAL; + return PLAYER_SPEED_NORMAL; } void Bike_HandleBumpySlopeJump(void) diff --git a/src/braille.c b/src/braille.c new file mode 100644 index 0000000000..704f50760b --- /dev/null +++ b/src/braille.c @@ -0,0 +1,212 @@ +#include "global.h" +#include "main.h" +#include "window.h" +#include "text.h" +#include "sound.h" + +// This file handles the braille font. +// For printing braille messages, see ScrCmd_braillemessage + +ALIGNED(4) +static const u8 sScrollDistances[] = { + [OPTIONS_TEXT_SPEED_SLOW] = 1, + [OPTIONS_TEXT_SPEED_MID] = 2, + [OPTIONS_TEXT_SPEED_FAST] = 4, +}; +static const u16 sFont_Braille[] = INCBIN_U16("graphics/fonts/braille.fwjpnfont"); + +static void DecompressGlyph_Braille(u16); + +u16 FontFunc_Braille(struct TextPrinter *textPrinter) +{ + u16 char_; + struct TextPrinterSubStruct *subStruct; + subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); + + switch (textPrinter->state) + { + case RENDER_STATE_HANDLE_CHAR: + if (JOY_HELD(A_BUTTON | B_BUTTON) && subStruct->hasPrintBeenSpedUp) + { + textPrinter->delayCounter = 0; + } + if (textPrinter->delayCounter && textPrinter->textSpeed) + { + textPrinter->delayCounter --; + if (gTextFlags.canABSpeedUpPrint && JOY_NEW(A_BUTTON | B_BUTTON)) + { + subStruct->hasPrintBeenSpedUp = TRUE; + textPrinter->delayCounter = 0; + } + return RENDER_UPDATE; + } + if (gTextFlags.autoScroll) + textPrinter->delayCounter = 3; + else + textPrinter->delayCounter = textPrinter->textSpeed; + + char_ = *textPrinter->printerTemplate.currentChar++; + switch (char_) + { + case EOS: + return RENDER_FINISH; + case CHAR_NEWLINE: + textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; + textPrinter->printerTemplate.currentY += gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; + return RENDER_REPEAT; + case PLACEHOLDER_BEGIN: + textPrinter->printerTemplate.currentChar++; + return RENDER_REPEAT; + case EXT_CTRL_CODE_BEGIN: + char_ = *textPrinter->printerTemplate.currentChar++; + switch (char_) + { + case EXT_CTRL_CODE_COLOR: + textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar++; + GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); + return RENDER_REPEAT; + case EXT_CTRL_CODE_HIGHLIGHT: + textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar++; + GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); + return RENDER_REPEAT; + case EXT_CTRL_CODE_SHADOW: + textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar++; + GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); + return RENDER_REPEAT; + case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: + textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; + textPrinter->printerTemplate.bgColor = *++textPrinter->printerTemplate.currentChar; + textPrinter->printerTemplate.shadowColor = *++textPrinter->printerTemplate.currentChar; + textPrinter->printerTemplate.currentChar++; + + GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); + return RENDER_REPEAT; + case EXT_CTRL_CODE_PALETTE: + textPrinter->printerTemplate.currentChar++; + return RENDER_REPEAT; + case EXT_CTRL_CODE_FONT: + subStruct->fontId = *textPrinter->printerTemplate.currentChar; + textPrinter->printerTemplate.currentChar++; + return RENDER_REPEAT; + case EXT_CTRL_CODE_RESET_SIZE: + return RENDER_REPEAT; + case EXT_CTRL_CODE_PAUSE: + textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++; + textPrinter->state = RENDER_STATE_PAUSE; + return RENDER_REPEAT; + case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: + textPrinter->state = RENDER_STATE_WAIT; + if (gTextFlags.autoScroll) + subStruct->autoScrollDelay = 0; + return RENDER_UPDATE; + case EXT_CTRL_CODE_WAIT_SE: + textPrinter->state = RENDER_STATE_WAIT_SE; + return RENDER_UPDATE; + case EXT_CTRL_CODE_PLAY_BGM: + case EXT_CTRL_CODE_PLAY_SE: + textPrinter->printerTemplate.currentChar += 2; + return RENDER_REPEAT; + case EXT_CTRL_CODE_ESCAPE: + char_ = *++textPrinter->printerTemplate.currentChar; + break; + case EXT_CTRL_CODE_SHIFT_TEXT: + textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++; + return RENDER_REPEAT; + case EXT_CTRL_CODE_SHIFT_DOWN: + textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar++; + return RENDER_REPEAT; + case EXT_CTRL_CODE_FILL_WINDOW: + FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); + return RENDER_REPEAT; + } + break; + case CHAR_PROMPT_CLEAR: + textPrinter->state = RENDER_STATE_CLEAR; + TextPrinterInitDownArrowCounters(textPrinter); + return RENDER_UPDATE; + case CHAR_PROMPT_SCROLL: + textPrinter->state = RENDER_STATE_SCROLL_START; + TextPrinterInitDownArrowCounters(textPrinter); + return RENDER_UPDATE; + case CHAR_EXTRA_SYMBOL: + char_ = *textPrinter->printerTemplate.currentChar++| 0x100; + break; + case CHAR_KEYPAD_ICON: + textPrinter->printerTemplate.currentChar++; + return RENDER_PRINT; + } + DecompressGlyph_Braille(char_); + CopyGlyphToWindow(textPrinter); + textPrinter->printerTemplate.currentX += gCurGlyph.width + textPrinter->printerTemplate.letterSpacing; + return RENDER_PRINT; + case RENDER_STATE_WAIT: + if (TextPrinterWait(textPrinter)) + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; + case RENDER_STATE_CLEAR: + if (TextPrinterWaitWithDownArrow(textPrinter)) + { + FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); + textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; + textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y; + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + } + return RENDER_UPDATE; + case RENDER_STATE_SCROLL_START: + if (TextPrinterWaitWithDownArrow(textPrinter)) + { + TextPrinterClearDownArrow(textPrinter); + textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; + textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; + textPrinter->state = RENDER_STATE_SCROLL; + } + return RENDER_UPDATE; + case RENDER_STATE_SCROLL: + if (textPrinter->scrollDistance) + { + if (textPrinter->scrollDistance < sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed]) + { + ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); + textPrinter->scrollDistance = 0; + } + else + { + ScrollWindow(textPrinter->printerTemplate.windowId, 0, sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor)); + textPrinter->scrollDistance -= sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed]; + } + CopyWindowToVram(textPrinter->printerTemplate.windowId, COPYWIN_GFX); + } + else + { + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + } + return RENDER_UPDATE; + case RENDER_STATE_WAIT_SE: + if (!IsSEPlaying()) + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; + case RENDER_STATE_PAUSE: + if (textPrinter->delayCounter) + textPrinter->delayCounter --; + else + textPrinter->state = RENDER_STATE_HANDLE_CHAR; + return RENDER_UPDATE; + } + return RENDER_FINISH; +} + +static void DecompressGlyph_Braille(u16 glyph) +{ + const u16 *glyphs = sFont_Braille + 0x100 * (glyph / 8) + 0x10 * (glyph % 8); + DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); + DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8); + DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); + DecompressGlyphTile(glyphs + 0x88, gCurGlyph.gfxBufferBottom + 8); + gCurGlyph.width = 16; + gCurGlyph.height = 16; +} + +u32 GetGlyphWidth_Braille(u16 glyphId, bool32 isJapanese) +{ + return 16; +} diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index aa6664f356..6b5d66d315 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -6,23 +6,15 @@ #include "sound.h" #include "task.h" #include "constants/field_effects.h" -#include "constants/maps.h" #include "constants/songs.h" #include "constants/metatile_labels.h" #include "fieldmap.h" #include "party_menu.h" #include "fldeff.h" -// why do this, GF? -enum -{ - REGIROCK_PUZZLE, - REGISTEEL_PUZZLE -}; +EWRAM_DATA static bool8 sIsRegisteelPuzzle = 0; -EWRAM_DATA static u8 sBraillePuzzleCallbackFlag = 0; - -static const u8 gRegicePathCoords[][2] = +static const u8 sRegicePathCoords[][2] = { {4, 21}, {5, 21}, @@ -62,9 +54,9 @@ static const u8 gRegicePathCoords[][2] = {4, 22}, }; -void SealedChamberShakingEffect(u8); -void DoBrailleRegirockEffect(void); -void DoBrailleRegisteelEffect(void); +static void Task_SealedChamberShakingEffect(u8); +static void DoBrailleRegirockEffect(void); +static void DoBrailleRegisteelEffect(void); bool8 ShouldDoBrailleDigEffect(void) { @@ -85,16 +77,16 @@ bool8 ShouldDoBrailleDigEffect(void) void DoBrailleDigEffect(void) { - MapGridSetMetatileIdAt(16, 8, METATILE_Cave_SealedChamberEntrance_TopLeft); - MapGridSetMetatileIdAt(17, 8, METATILE_Cave_SealedChamberEntrance_TopMid); - MapGridSetMetatileIdAt(18, 8, METATILE_Cave_SealedChamberEntrance_TopRight); - MapGridSetMetatileIdAt(16, 9, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(17, 9, METATILE_Cave_SealedChamberEntrance_BottomMid); - MapGridSetMetatileIdAt(18, 9, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt( 9 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft); + MapGridSetMetatileIdAt(10 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid); + MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight); + MapGridSetMetatileIdAt( 9 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(10 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid); + MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_COLLISION_MASK); DrawWholeMapView(); PlaySE(SE_BANG); FlagSet(FLAG_SYS_BRAILLE_DIG); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); } bool8 CheckRelicanthWailord(void) @@ -112,132 +104,66 @@ bool8 CheckRelicanthWailord(void) } // THEORY: this was caused by block commenting out all of the older R/S braille functions but leaving the call to it itself, which creates the nullsub. -// the code is shown below to show what this might look like. void ShouldDoBrailleRegirockEffectOld(void) { - /* - if (!FlagGet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED) && (gSaveBlock1.location.mapGroup == MAP_GROUP_DESERT_RUINS && gSaveBlock1.location.mapNum == MAP_ID_DESERT_RUINS)) - { - if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23) - return TRUE; - else if (gSaveBlock1.pos.x == 9 && gSaveBlock1.pos.y == 23) - return TRUE; - else if (gSaveBlock1.pos.x == 11 && gSaveBlock1.pos.y == 23) - return TRUE; - } - - return FALSE; } -void DoBrailleRegirockEffect(void) +#define tDelayCounter data[1] +#define tShakeCounter data[2] +#define tVerticalPan data[4] +#define tDelay data[5] +#define tNumShakes data[6] + +void DoSealedChamberShakingEffect_Long(void) { - FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH); - MapGridSetMetatileIdAt(14, 26, 554); - MapGridSetMetatileIdAt(15, 26, 555); - MapGridSetMetatileIdAt(16, 26, 556); - MapGridSetMetatileIdAt(14, 27, 3634); - MapGridSetMetatileIdAt(15, 27, 563); - MapGridSetMetatileIdAt(16, 27, 3636); - DrawWholeMapView(); - PlaySE(SE_BANG); - FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED); - ScriptContext2_Disable(); -} + u8 taskId = CreateTask(Task_SealedChamberShakingEffect, 9); -bool8 ShouldDoBrailleRegisteelEffect(void) -{ - if (!FlagGet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED) && (gSaveBlock1.location.mapGroup == MAP_GROUP_ANCIENT_TOMB && gSaveBlock1.location.mapNum == MAP_ID_ANCIENT_TOMB)) - { - if (gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25) - return TRUE; - } - - return FALSE; -} - -void DoBrailleRegisteelEffect(void) -{ - gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; - FieldEffectStart(FLDEFF_USE_TOMB_PUZZLE_EFFECT); -} - -bool8 FldEff_UseFlyAncientTomb(void) -{ - u8 taskId = CreateFieldMoveTask(); - - gTasks[taskId].data[8] = (u32)UseRegisteelHm_Callback >> 16; - gTasks[taskId].data[9] = (u32)UseRegisteelHm_Callback; - return FALSE; -} - -void UseRegisteelHm_Callback(void) -{ - FieldEffectActiveListRemove(FLDEFF_USE_TOMB_PUZZLE_EFFECT); - UseFlyAncientTomb_Finish(); -} - -void UseFlyAncientTomb_Finish(void) -{ - MapGridSetMetatileIdAt(14, 26, 554); - MapGridSetMetatileIdAt(15, 26, 555); - MapGridSetMetatileIdAt(16, 26, 556); - MapGridSetMetatileIdAt(14, 27, 3634); - MapGridSetMetatileIdAt(15, 27, 563); - MapGridSetMetatileIdAt(16, 27, 3636); - DrawWholeMapView(); - PlaySE(SE_BANG); - FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED); - ScriptContext2_Disable(); -} - */ -} - -void DoSealedChamberShakingEffect1(void) -{ - u8 taskId = CreateTask(SealedChamberShakingEffect, 9); - - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[4] = 2; - gTasks[taskId].data[5] = 5; - gTasks[taskId].data[6] = 50; + gTasks[taskId].tDelayCounter = 0; + gTasks[taskId].tShakeCounter = 0; + gTasks[taskId].tVerticalPan = 2; + gTasks[taskId].tDelay = 5; + gTasks[taskId].tNumShakes = 50; SetCameraPanningCallback(0); } -void DoSealedChamberShakingEffect2(void) +void DoSealedChamberShakingEffect_Short(void) { - u8 taskId = CreateTask(SealedChamberShakingEffect, 9); + u8 taskId = CreateTask(Task_SealedChamberShakingEffect, 9); - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[4] = 3; - gTasks[taskId].data[5] = 5; - gTasks[taskId].data[6] = 2; + gTasks[taskId].tDelayCounter = 0; + gTasks[taskId].tShakeCounter = 0; + gTasks[taskId].tVerticalPan = 3; + gTasks[taskId].tDelay = 5; + gTasks[taskId].tNumShakes = 2; SetCameraPanningCallback(0); } -void SealedChamberShakingEffect(u8 taskId) +static void Task_SealedChamberShakingEffect(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->data[1]++; - - if (!(task->data[1] % task->data[5])) + task->tDelayCounter++; + if (task->tDelayCounter % task->tDelay == 0) { - task->data[1] = 0; - task->data[2]++; - task->data[4] = -task->data[4]; - SetCameraPanning(0, task->data[4]); - if (task->data[2] == task->data[6]) + task->tDelayCounter = 0; + task->tShakeCounter++; + task->tVerticalPan = -task->tVerticalPan; + SetCameraPanning(0, task->tVerticalPan); + if (task->tShakeCounter == task->tNumShakes) { DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); InstallCameraPanAheadCallback(); } } } -// moved later in the function because it was rewritten. +#undef tDelayCounter +#undef tShakeCounter +#undef tVerticalPan +#undef tDelay +#undef tNumShakes + bool8 ShouldDoBrailleRegirockEffect(void) { if (!FlagGet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED) @@ -246,17 +172,17 @@ bool8 ShouldDoBrailleRegirockEffect(void) { if (gSaveBlock1Ptr->pos.x == 6 && gSaveBlock1Ptr->pos.y == 23) { - sBraillePuzzleCallbackFlag = REGIROCK_PUZZLE; + sIsRegisteelPuzzle = FALSE; return TRUE; } else if (gSaveBlock1Ptr->pos.x == 5 && gSaveBlock1Ptr->pos.y == 23) { - sBraillePuzzleCallbackFlag = REGIROCK_PUZZLE; + sIsRegisteelPuzzle = FALSE; return TRUE; } else if (gSaveBlock1Ptr->pos.x == 7 && gSaveBlock1Ptr->pos.y == 23) { - sBraillePuzzleCallbackFlag = REGIROCK_PUZZLE; + sIsRegisteelPuzzle = FALSE; return TRUE; } } @@ -276,18 +202,18 @@ void UseRegirockHm_Callback(void) DoBrailleRegirockEffect(); } -void DoBrailleRegirockEffect(void) +static void DoBrailleRegirockEffect(void) { - MapGridSetMetatileIdAt(14, 26, METATILE_Cave_SealedChamberEntrance_TopLeft); - MapGridSetMetatileIdAt(15, 26, METATILE_Cave_SealedChamberEntrance_TopMid); - MapGridSetMetatileIdAt(16, 26, METATILE_Cave_SealedChamberEntrance_TopRight); - MapGridSetMetatileIdAt(14, 27, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(15, 27, METATILE_Cave_SealedChamberEntrance_BottomMid); - MapGridSetMetatileIdAt(16, 27, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(7 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft); + MapGridSetMetatileIdAt(8 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid); + MapGridSetMetatileIdAt(9 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight); + MapGridSetMetatileIdAt(7 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(8 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid); + MapGridSetMetatileIdAt(9 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_COLLISION_MASK); DrawWholeMapView(); PlaySE(SE_BANG); FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); } bool8 ShouldDoBrailleRegisteelEffect(void) @@ -296,7 +222,7 @@ bool8 ShouldDoBrailleRegisteelEffect(void) { if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 25) { - sBraillePuzzleCallbackFlag = REGISTEEL_PUZZLE; + sIsRegisteelPuzzle = TRUE; return TRUE; } } @@ -315,95 +241,23 @@ void UseRegisteelHm_Callback(void) DoBrailleRegisteelEffect(); } -void DoBrailleRegisteelEffect(void) +static void DoBrailleRegisteelEffect(void) { - MapGridSetMetatileIdAt(14, 26, METATILE_Cave_SealedChamberEntrance_TopLeft); - MapGridSetMetatileIdAt(15, 26, METATILE_Cave_SealedChamberEntrance_TopMid); - MapGridSetMetatileIdAt(16, 26, METATILE_Cave_SealedChamberEntrance_TopRight); - MapGridSetMetatileIdAt(14, 27, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(15, 27, METATILE_Cave_SealedChamberEntrance_BottomMid); - MapGridSetMetatileIdAt(16, 27, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(7 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft); + MapGridSetMetatileIdAt(8 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid); + MapGridSetMetatileIdAt(9 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight); + MapGridSetMetatileIdAt(7 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(8 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid); + MapGridSetMetatileIdAt(9 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_COLLISION_MASK); DrawWholeMapView(); PlaySE(SE_BANG); FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); } // theory: another commented out DoBrailleWait and Task_BrailleWait. -void DoBrailleWait(void) +static void DoBrailleWait(void) { - /* - if (!FlagGet(FLAG_SYS_BRAILLE_REGICE_COMPLETED)) - CreateTask(Task_BrailleWait, 0x50); -} - -void Task_BrailleWait(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - switch (data[0]) - { - case 0: - data[1] = 7200; - data[0] = 1; - break; - case 1: - if (BrailleWait_CheckButtonPress() != FALSE) - { - MenuZeroFillScreen(); - PlaySE(SE_SELECT); - data[0] = 2; - } - else - { - data[1] = data[1] - 1; - if (data[1] == 0) - { - MenuZeroFillScreen(); - data[0] = 3; - data[1] = 30; - } - } - break; - case 2: - if (BrailleWait_CheckButtonPress() == FALSE) - { - data[1] = data[1] - 1; - if (data[1] == 0) - data[0] = 4; - break; - } - sub_8064E2C(); - DestroyTask(taskId); - ScriptContext2_Disable(); - break; - case 3: - data[1] = data[1] - 1; - if (data[1] == 0) - data[0] = 4; - break; - case 4: - sub_8064E2C(); - ScriptContext1_SetupScript(S_OpenRegiceChamber); - DestroyTask(taskId); - break; - } -} - -bool32 BrailleWait_CheckButtonPress(void) -{ - u16 keyMask = A_BUTTON | B_BUTTON | START_BUTTON | SELECT_BUTTON | DPAD_ANY; - - if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR) - keyMask |= L_BUTTON | R_BUTTON; - if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) - keyMask |= L_BUTTON; - - if (gMain.newKeys & keyMask) - return TRUE; - else - return FALSE; - */ } // this used to be FldEff_UseFlyAncientTomb . why did GF merge the 2 functions? @@ -411,7 +265,7 @@ bool8 FldEff_UsePuzzleEffect(void) { u8 taskId = CreateFieldMoveTask(); - if (sBraillePuzzleCallbackFlag == REGISTEEL_PUZZLE) + if (sIsRegisteelPuzzle == TRUE) { gTasks[taskId].data[8] = (u32)UseRegisteelHm_Callback >> 16; gTasks[taskId].data[9] = (u32)UseRegisteelHm_Callback; @@ -438,10 +292,10 @@ bool8 ShouldDoBrailleRegicePuzzle(void) if (FlagGet(FLAG_TEMP_3) == TRUE) return FALSE; - for (i = 0; i < 36; i++) + for (i = 0; i < ARRAY_COUNT(sRegicePathCoords); i++) { - u8 xPos = gRegicePathCoords[i][0]; - u8 yPos = gRegicePathCoords[i][1]; + u8 xPos = sRegicePathCoords[i][0]; + u8 yPos = sRegicePathCoords[i][1]; if (gSaveBlock1Ptr->pos.x == xPos && gSaveBlock1Ptr->pos.y == yPos) { u16 varValue; diff --git a/src/cable_car.c b/src/cable_car.c index 32d4325352..562e9eceb7 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -17,6 +17,7 @@ #include "sound.h" #include "sprite.h" #include "task.h" +#include "constants/event_object_movement.h" #include "constants/event_objects.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -244,7 +245,7 @@ static void Task_LoadCableCar(u8 taskId) void CableCar(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); CreateTask(Task_LoadCableCar, 1); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); } @@ -825,7 +826,7 @@ static void CreateCableCarSprites(void) case FALSE: default: // Create player sprite - spriteId = AddPseudoObjectEvent(playerGraphicsIds[gSaveBlock2Ptr->playerGender], SpriteCB_Player, 200, 73, 102); + spriteId = CreateObjectGraphicsSprite(playerGraphicsIds[gSaveBlock2Ptr->playerGender], SpriteCB_Player, 200, 73, 102); if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.priority = 2; @@ -853,7 +854,7 @@ static void CreateCableCarSprites(void) case TRUE: CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x24, 24, 26, 12, 3, 17); // Create player sprite - spriteId = AddPseudoObjectEvent(playerGraphicsIds[gSaveBlock2Ptr->playerGender], SpriteCB_Player, 128, 39, 102); + spriteId = CreateObjectGraphicsSprite(playerGraphicsIds[gSaveBlock2Ptr->playerGender], SpriteCB_Player, 128, 39, 102); if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.priority = 2; @@ -890,27 +891,25 @@ static void CreateCableCarSprites(void) if ((rval % 64) == 0) { // Unclear if this was intentional, but the - 1 in the below ARRAY_COUNT means the Zigzagoon is never used - spriteId = AddPseudoObjectEvent(hikerGraphicsIds[rval % (ARRAY_COUNT(hikerGraphicsIds) - 1)], hikerCallbacks[GOING_DOWN], hikerCoords[GOING_DOWN][0], hikerCoords[GOING_DOWN][1], 106); + spriteId = CreateObjectGraphicsSprite(hikerGraphicsIds[rval % (ARRAY_COUNT(hikerGraphicsIds) - 1)], hikerCallbacks[GOING_DOWN], hikerCoords[GOING_DOWN][0], hikerCoords[GOING_DOWN][1], 106); if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.priority = 2; gSprites[spriteId].x2 = -gSprites[spriteId].centerToCornerVecX; gSprites[spriteId].y2 = -gSprites[spriteId].centerToCornerVecY; - + // Randomly choose which direction the NPC is going if (!GOING_DOWN) { if (rval % 2) { - // Do walking west anim - StartSpriteAnim(&gSprites[spriteId], 6); + StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_WEST); gSprites[spriteId].sSameDir = TRUE; gSprites[spriteId].y += 2; } else { - // Do walking east anim - StartSpriteAnim(&gSprites[spriteId], 7); + StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_EAST); gSprites[spriteId].sSameDir = FALSE; } } @@ -918,15 +917,13 @@ static void CreateCableCarSprites(void) { if (rval % 2) { - // Do walking east anim - StartSpriteAnim(&gSprites[spriteId], 7); + StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_EAST); gSprites[spriteId].sSameDir = TRUE; gSprites[spriteId].y += 2; } else { - // Do walking west anim - StartSpriteAnim(&gSprites[spriteId], 6); + StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_WEST); gSprites[spriteId].sSameDir = FALSE; } } @@ -1024,7 +1021,7 @@ static void DrawNextGroundSegmentGoingDown(void) sCableCar->groundSegmentXStart = (sCableCar->groundSegmentXStart + 2) % 32; sCableCar->groundTileIdx += 2; sGroundSegmentY_Down = sCableCar->groundSegmentYStart; - + // Draw next segment for (i = 0; i < ARRAY_COUNT(sCableCar->groundTileBuffer); i++) { diff --git a/src/cable_club.c b/src/cable_club.c index abe1d5d4dd..913a1b7287 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -18,7 +18,7 @@ #include "overworld.h" #include "palette.h" #include "union_room.h" -#include "mevent2.h" +#include "mystery_gift.h" #include "script.h" #include "script_pokemon_util.h" #include "sound.h" @@ -97,19 +97,19 @@ static void PrintNumPlayersInLink(u16 windowId, u32 numPlayers) u8 xPos; ConvertIntToDecimalStringN(gStringVar1, numPlayers, STR_CONV_MODE_LEFT_ALIGN, 1); - SetStandardWindowBorderStyle(windowId, 0); + SetStandardWindowBorderStyle(windowId, FALSE); StringExpandPlaceholders(gStringVar4, gText_NumPlayerLink); - xPos = GetStringCenterAlignXOffset(1, gStringVar4, 88); - AddTextPrinterParameterized(windowId, 1, gStringVar4, xPos, 1, 0xFF, NULL); - CopyWindowToVram(windowId, 3); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 88); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, xPos, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(windowId, COPYWIN_FULL); } static void ClearLinkPlayerCountWindow(u16 windowId) { - // Following this call with a copy-to-vram with mode 3 is identical to + // Following this call with a copy-to-vram with mode COPYWIN_FULL is identical to // calling ClearStdWindowAndFrame(windowId, TRUE). ClearStdWindowAndFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } static void UpdateLinkPlayerCountDisplay(u8 taskId, u8 numPlayers) @@ -185,9 +185,9 @@ static bool32 CheckLinkCanceled(u8 taskId) return FALSE; } -static bool32 sub_80B25CC(u8 taskId) +static bool32 CheckSioErrored(u8 taskId) { - if (GetSioMultiSI() == 1) + if (GetSioMultiSI() == TRUE) { gTasks[taskId].func = Task_LinkupConnectionError; return TRUE; @@ -196,12 +196,12 @@ static bool32 sub_80B25CC(u8 taskId) } // Unused -static void sub_80B2600(u8 taskId) +static void Task_DelayedBlockRequest(u8 taskId) { gTasks[taskId].data[0]++; if (gTasks[taskId].data[0] == 10) { - SendBlockRequest(2); + SendBlockRequest(BLOCK_REQ_SIZE_100); DestroyTask(taskId); } } @@ -252,7 +252,7 @@ static void Task_LinkupAwaitConnection(u8 taskId) static void Task_LinkupConfirmWhenReady(u8 taskId) { if (CheckLinkCanceledBeforeConnection(taskId) == TRUE - || sub_80B25CC(taskId) == TRUE + || CheckSioErrored(taskId) == TRUE || CheckLinkErrored(taskId) == TRUE) return; @@ -269,7 +269,7 @@ static void Task_LinkupAwaitConfirmation(u8 taskId) s32 linkPlayerCount = GetLinkPlayerCount_2(); if (CheckLinkCanceledBeforeConnection(taskId) == TRUE - || sub_80B25CC(taskId) == TRUE + || CheckSioErrored(taskId) == TRUE || CheckLinkErrored(taskId) == TRUE) return; @@ -291,7 +291,7 @@ static void Task_LinkupAwaitConfirmation(u8 taskId) static void Task_LinkupTryConfirmation(u8 taskId) { if (CheckLinkCanceledBeforeConnection(taskId) == TRUE - || sub_80B25CC(taskId) == TRUE + || CheckSioErrored(taskId) == TRUE || CheckLinkErrored(taskId) == TRUE) return; @@ -352,14 +352,14 @@ static void Task_LinkupExchangeDataWithLeader(u8 taskId) gSpecialVar_Result = ExchangeDataAndGetLinkupStatus(minPlayers, maxPlayers); if (gSpecialVar_Result == LINKUP_ONGOING) return; - if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS + if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS || gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS) { SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = Task_StopLinkup; } - else if (gSpecialVar_Result == LINKUP_PLAYER_NOT_READY + else if (gSpecialVar_Result == LINKUP_PLAYER_NOT_READY || gSpecialVar_Result == LINKUP_PARTNER_NOT_READY) { CloseLink(); @@ -372,7 +372,7 @@ static void Task_LinkupExchangeDataWithLeader(u8 taskId) gLocalLinkPlayerId = GetMultiplayerId(); SaveLinkPlayers(gFieldLinkPlayerCount); card = (struct TrainerCard *)gBlockSendBuffer; - TrainerCard_GenerateCardForPlayer(card); + TrainerCard_GenerateCardForLinkPlayer(card); card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL); card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL); gTasks[taskId].func = Task_LinkupAwaitTrainerCardData; @@ -407,7 +407,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId) HideFieldMessageBox(); gTasks[taskId].func = Task_StopLinkup; } - else if (gSpecialVar_Result == LINKUP_PLAYER_NOT_READY + else if (gSpecialVar_Result == LINKUP_PLAYER_NOT_READY || gSpecialVar_Result == LINKUP_PARTNER_NOT_READY) { CloseLink(); @@ -420,11 +420,11 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId) gLocalLinkPlayerId = GetMultiplayerId(); SaveLinkPlayers(gFieldLinkPlayerCount); card = (struct TrainerCard *)gBlockSendBuffer; - TrainerCard_GenerateCardForPlayer(card); + TrainerCard_GenerateCardForLinkPlayer(card); card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL); card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL); gTasks[taskId].func = Task_LinkupAwaitTrainerCardData; - SendBlockRequest(2); + SendBlockRequest(BLOCK_REQ_SIZE_100); } } @@ -486,7 +486,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId) { // Successful battle tower linkup ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId); - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } } @@ -494,7 +494,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId) { // Successful linkup ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId); - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } } @@ -518,7 +518,7 @@ static void Task_LinkupAwaitTrainerCardData(u8 taskId) for (index = 0; index < GetLinkPlayerCount(); index++) { - CopyTrainerCardData(&gTrainerCards[index], gBlockRecvBuffer[index], gLinkPlayers[index].version); + CopyTrainerCardData(&gTrainerCards[index], (struct TrainerCard *)gBlockRecvBuffer[index], gLinkPlayers[index].version); } SetSuppressLinkErrorMessage(FALSE); @@ -531,7 +531,7 @@ static void Task_StopLinkup(u8 taskId) if (!gReceivedRemoteLinkPlayers) { ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId); - EnableBothScriptContexts(); + ScriptContext_Enable(); RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); } @@ -543,7 +543,7 @@ static void Task_LinkupFailed(u8 taskId) ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId); StopFieldMessage(); RemoveWindow(gTasks[taskId].tWindowId); - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } @@ -553,7 +553,7 @@ static void Task_LinkupConnectionError(u8 taskId) ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId); RemoveWindow(gTasks[taskId].tWindowId); HideFieldMessageBox(); - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } @@ -688,13 +688,13 @@ static void Task_ValidateMixingGameLanguage(u8 taskId) return; } } - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); break; case 1: if (!gReceivedRemoteLinkPlayers) { - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } break; @@ -833,7 +833,7 @@ static void SetLinkBattleTypeFlags(int linkService) static void Task_StartWiredCableClubBattle(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch (task->tState) { @@ -879,7 +879,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId) static void Task_StartWirelessCableClubBattle(u8 taskId) { int i; - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; switch (tState) { @@ -1004,10 +1004,10 @@ void CB2_ReturnFromCableClubBattle(void) switch (gBattleOutcome) { case B_OUTCOME_WON: - RecordIdOfWonderCardSenderByEventType(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + MysteryGift_TryIncrementStat(CARD_STAT_BATTLES_WON, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); break; case B_OUTCOME_LOST: - RecordIdOfWonderCardSenderByEventType(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + MysteryGift_TryIncrementStat(CARD_STAT_BATTLES_LOST, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); break; } } @@ -1023,15 +1023,15 @@ void CB2_ReturnFromCableClubBattle(void) void CleanupLinkRoomState(void) { - if (gSpecialVar_0x8004 == USING_SINGLE_BATTLE - || gSpecialVar_0x8004 == USING_DOUBLE_BATTLE - || gSpecialVar_0x8004 == USING_MULTI_BATTLE + if (gSpecialVar_0x8004 == USING_SINGLE_BATTLE + || gSpecialVar_0x8004 == USING_DOUBLE_BATTLE + || gSpecialVar_0x8004 == USING_MULTI_BATTLE || gSpecialVar_0x8004 == USING_BATTLE_TOWER) { LoadPlayerParty(); SavePlayerBag(); } - SetWarpDestinationToDynamicWarp(0x7F); + SetWarpDestinationToDynamicWarp(WARP_ID_DYNAMIC); } void ExitLinkRoom(void) @@ -1042,7 +1042,7 @@ void ExitLinkRoom(void) // Note: gSpecialVar_0x8005 contains the id of the seat the player entered static void Task_EnterCableClubSeat(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch (task->tState) { @@ -1078,9 +1078,9 @@ static void Task_EnterCableClubSeat(u8 taskId) case 3: // Exit, failure SetLinkWaitingForScript(); - sub_8197AE8(TRUE); + EraseFieldMessageBox(TRUE); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); break; } } @@ -1089,7 +1089,7 @@ void CreateTask_EnterCableClubSeat(TaskFunc followupFunc) { u8 taskId = CreateTask(Task_EnterCableClubSeat, 80); SetTaskFuncWithFollowupFunc(taskId, Task_EnterCableClubSeat, followupFunc); - ScriptContext1_Stop(); + ScriptContext_Stop(); } static void Task_StartWiredTrade(u8 taskId) @@ -1099,7 +1099,7 @@ static void Task_StartWiredTrade(u8 taskId) switch (task->tState) { case 0: - ScriptContext2_Enable(); + LockPlayerFieldControls(); FadeScreen(FADE_TO_BLACK, 0); ClearLinkCallback_2(); task->tState++; @@ -1132,7 +1132,7 @@ static void Task_StartWirelessTrade(u8 taskId) switch (tState) { case 0: - ScriptContext2_Enable(); + LockPlayerFieldControls(); FadeScreen(FADE_TO_BLACK, 0); ClearLinkRfuCallback(); tState++; @@ -1172,9 +1172,11 @@ static void CreateTask_StartWiredTrade(void) CreateTask(Task_StartWiredTrade, 80); } -void nullsub_37(void) +// Unused, implemented in Ruby/Sapphire +void Script_StartWiredTrade(void) { - + // CreateTask_StartWiredTrade(); + // ScriptContext_Stop(); } void ColosseumPlayerSpotTriggered(void) @@ -1191,7 +1193,7 @@ void ColosseumPlayerSpotTriggered(void) static void CreateTask_EnterCableClubSeatNoFollowup(void) { u8 taskId = CreateTask(Task_EnterCableClubSeat, 80); - ScriptContext1_Stop(); + ScriptContext_Stop(); } void Script_ShowLinkTrainerCard(void) @@ -1251,20 +1253,20 @@ void Task_WaitForLinkPlayerConnection(u8 taskId) #undef tTimer -static void sub_80B3AAC(u8 taskId) +static void Task_WaitExitToScript(u8 taskId) { if (!gReceivedRemoteLinkPlayers) { - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } } // Unused -static void sub_80B3AD0(u8 taskId) +static void ExitLinkToScript(u8 taskId) { SetCloseLinkCallback(); - gTasks[taskId].func = sub_80B3AAC; + gTasks[taskId].func = Task_WaitExitToScript; } #define tTimer data[1] diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c index 0d69eb0fa9..9b79b48f1f 100644 --- a/src/clear_save_data_screen.c +++ b/src/clear_save_data_screen.c @@ -79,8 +79,8 @@ void CB2_InitClearSaveDataScreen(void) static void Task_DoClearSaveDataScreenYesNo(u8 taskId) { - DrawStdFrameWithCustomTileAndPalette(0, 0, 2, 14); - AddTextPrinterParameterized(0, 1, gText_ClearAllSaveData, 0, 1, 0, 0); + DrawStdFrameWithCustomTileAndPalette(0, FALSE, 2, 14); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_ClearAllSaveData, 0, 1, 0, 0); CreateYesNoMenu(sClearSaveYesNo, 2, 14, 1); gTasks[taskId].func = Task_ClearSaveDataScreenYesNoChoice; } @@ -91,7 +91,7 @@ static void Task_ClearSaveDataScreenYesNoChoice(u8 taskId) { case 0: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, 1, gText_ClearingData, 0, 1, 0, 0); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_ClearingData, 0, 1, 0, 0); gTasks[taskId].func = Task_ClearSaveData; break; case 1: @@ -205,5 +205,5 @@ static void InitClearSaveDataScreenWindows(void) DeactivateAllTextPrinters(); FillWindowPixelBuffer(0, PIXEL_FILL(0)); LoadWindowGfx(0, 0, 2, 224); - LoadPalette(gUnknown_0860F074, 0xF0, 0x20); + LoadPalette(gStandardMenuPalette, 0xF0, 0x20); } diff --git a/src/coins.c b/src/coins.c index 52c7dd3ece..4c4739999b 100644 --- a/src/coins.c +++ b/src/coins.c @@ -8,7 +8,7 @@ #include "international_string_util.h" #include "constants/coins.h" -EWRAM_DATA u8 sCoinsWindowId = 0; +static EWRAM_DATA u8 sCoinsWindowId = 0; void PrintCoinsString(u32 coinAmount) { @@ -17,8 +17,8 @@ void PrintCoinsString(u32 coinAmount) ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, MAX_COIN_DIGITS); StringExpandPlaceholders(gStringVar4, gText_Coins); - xAlign = GetStringRightAlignXOffset(1, gStringVar4, 0x40); - AddTextPrinterParameterized(sCoinsWindowId, 1, gStringVar4, xAlign, 1, 0, NULL); + xAlign = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x40); + AddTextPrinterParameterized(sCoinsWindowId, FONT_NORMAL, gStringVar4, xAlign, 1, 0, NULL); } void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y) diff --git a/src/confetti_util.c b/src/confetti_util.c index bcf19f705c..9ede3088a8 100644 --- a/src/confetti_util.c +++ b/src/confetti_util.c @@ -10,43 +10,6 @@ static EWRAM_DATA struct struct ConfettiUtil *array; } *sWork = NULL; -static void sub_81520A8(void *dest, u16 value, u8 left, u8 top, u8 width, u8 height) // Unused. -{ - u8 i; - u8 j; - u8 x; - u8 y; - - for (i = 0, y = top; i < height; i++) - { - for (x = left, j = 0; j < width; j++) - { - *(u16 *)((dest) + (y * 64 + x * 2)) = value; - x = (x + 1) % 32; - } - y = (y + 1) % 32; - } -} - -static void sub_8152134(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height) // Unused. -{ - u8 i; - u8 j; - u8 x; - u8 y; - const u16 *_src; - - for (i = 0, _src = src, y = top; i < height; i++) - { - for (x = left, j = 0; j < width; j++) - { - *(u16 *)((dest) + (y * 64 + x * 2)) = *(_src++); - x = (x + 1) % 32; - } - y = (y + 1) % 32; - } -} - bool32 ConfettiUtil_Init(u8 count) { u8 i = 0; diff --git a/src/contest.c b/src/contest.c index a87cb77287..0b5eda51b9 100644 --- a/src/contest.c +++ b/src/contest.c @@ -75,7 +75,7 @@ static void Task_FinishRoundOfAppeals(u8); static void Task_ReadyUpdateHeartSliders(u8); static void Task_UpdateHeartSliders(u8); static void Task_WaitForHeartSliders(u8); -static void sub_80DA348(u8); +static void Task_RestorePlttBufferUnfaded(u8); static void Task_WaitPrintRoundResult(u8); static void Task_PrintRoundResultText(u8); static void Task_ReUpdateHeartSliders(u8); @@ -93,7 +93,7 @@ static void Task_ContestReturnToField(u8); static void FieldCB_ContestReturnToField(void); static bool8 IsPlayerLinkLeader(void); static void PrintContestantTrainerName(u8); -static void PrintContestantTrainerNameWithColor(u8 a0, u8 a1); +static void PrintContestantTrainerNameWithColor(u8, u8); static void PrintContestantMonName(u8); static void PrintContestantMonNameWithColor(u8, u8); static u8 CreateJudgeSprite(void); @@ -352,7 +352,7 @@ EWRAM_DATA u16 gSpecialVar_ContestRank = 0; EWRAM_DATA u8 gNumLinkContestPlayers = 0; EWRAM_DATA u8 gHighestRibbonRank = 0; EWRAM_DATA struct ContestResources *gContestResources = NULL; -EWRAM_DATA u8 sContestBgCopyFlags = 0; +static EWRAM_DATA u8 sContestBgCopyFlags = 0; EWRAM_DATA struct ContestWinner gCurContestWinner = {0}; EWRAM_DATA bool8 gCurContestWinnerIsForArtist = 0; EWRAM_DATA u8 gCurContestWinnerSaveIdx = 0; @@ -388,7 +388,7 @@ static const struct OamData sOam_SliderHeart = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -473,7 +473,7 @@ static const struct OamData sOam_NextTurn = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), .x = 0, @@ -625,7 +625,7 @@ static const struct SpriteTemplate sSpriteTemplate_ApplauseMeter = .callback = SpriteCallbackDummy }; -const struct OamData sOam_Judge = +static const struct OamData sOam_Judge = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -639,7 +639,7 @@ const struct OamData sOam_Judge = .paletteNum = 2, }; -const struct SpriteTemplate sSpriteTemplate_Judge = +static const struct SpriteTemplate sSpriteTemplate_Judge = { .tileTag = TAG_JUDGE, .paletteTag = TAG_JUDGE, @@ -650,7 +650,7 @@ const struct SpriteTemplate sSpriteTemplate_Judge = .callback = SpriteCallbackDummy }; -const struct CompressedSpriteSheet sSpriteSheet_Judge = +static const struct CompressedSpriteSheet sSpriteSheet_Judge = { .data = gContestJudgeGfx, .size = 0x800, @@ -664,13 +664,13 @@ static const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols = .tag = TAG_JUDGE_SYMBOLS_GFX }; -const struct CompressedSpritePalette sSpritePalette_JudgeSymbols = +static const struct CompressedSpritePalette sSpritePalette_JudgeSymbols = { - .data = gContest3Pal, + .data = gContestJudgeSymbolsPal, .tag = TAG_CONTEST_SYMBOLS_PAL }; -const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble = +static const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble = { .tileTag = TAG_JUDGE_SYMBOLS_GFX, .paletteTag = TAG_CONTEST_SYMBOLS_PAL, @@ -859,24 +859,24 @@ static const struct CompressedSpriteSheet sSpriteSheets_ContestantsTurnBlinkEffe static const struct SpritePalette sSpritePalettes_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] = { { - .data = (u16*)(gHeap + 0x1A0A4), + .data = (u16 *)(gHeap + 0x1A0A4), .tag = TAG_BLINK_EFFECT_CONTESTANT0 }, { - .data = (u16*)(gHeap + 0x1A0C4), + .data = (u16 *)(gHeap + 0x1A0C4), .tag = TAG_BLINK_EFFECT_CONTESTANT1 }, { - .data = (u16*)(gHeap + 0x1A0E4), + .data = (u16 *)(gHeap + 0x1A0E4), .tag = TAG_BLINK_EFFECT_CONTESTANT2 }, { - .data = (u16*)(gHeap + 0x1A104), + .data = (u16 *)(gHeap + 0x1A104), .tag = TAG_BLINK_EFFECT_CONTESTANT3 } }; -const struct OamData sOam_ContestantsTurnBlinkEffect = +static const struct OamData sOam_ContestantsTurnBlinkEffect = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -891,13 +891,13 @@ const struct OamData sOam_ContestantsTurnBlinkEffect = .affineParam = 0, }; -const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_0[] = +static const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] = +static const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] = { AFFINEANIMCMD_FRAME(3, 3, 0, 15), AFFINEANIMCMD_FRAME(-3, -3, 0, 15), @@ -906,13 +906,13 @@ const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] = AFFINEANIMCMD_END }; -const union AffineAnimCmd *const sAffineAnims_ContestantsTurnBlinkEffect[] = +static const union AffineAnimCmd *const sAffineAnims_ContestantsTurnBlinkEffect[] = { sAffineAnim_ContestantsTurnBlinkEffect_0, sAffineAnim_ContestantsTurnBlinkEffect_1 }; -const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] = +static const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] = { { .tileTag = TAG_BLINK_EFFECT_CONTESTANT0, @@ -952,7 +952,7 @@ const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTA } }; -static const s8 gContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] = +static const s8 sContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] = { [CONTEST_CATEGORY_COOL] = { [CONTEST_CATEGORY_COOL] = +1, @@ -1028,11 +1028,11 @@ void LoadContestBgAfterMoveAnim(void) { s32 i; - LZDecompressVram(gContestMiscGfx, (void *)VRAM); + LZDecompressVram(gContestInterfaceGfx, (void *)VRAM); LZDecompressVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4))); - CopyToBgTilemapBuffer(3, gOldContestGfx, 0, 0); + CopyToBgTilemapBuffer(3, gContestAudienceTilemap, 0, 0); CopyBgTilemapBufferToVram(3); - LoadCompressedPalette(gOldContestPalette, 0, 0x200); + LoadCompressedPalette(gContestInterfaceAudiencePalette, 0, 0x200); LoadContestPalettes(); for (i = 0; i < CONTESTANT_COUNT; i++) { @@ -1103,10 +1103,10 @@ static void InitContestResources(void) eContestAI = (struct ContestAIInfo){}; *gContestResources->excitement = (struct ContestExcitement){}; memset(eContestGfxState, 0, CONTESTANT_COUNT * sizeof(struct ContestGraphicsState)); - + if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)) SortContestants(FALSE); - + for (i = 0; i < CONTESTANT_COUNT; i++) { eContestantStatus[i].nextTurnOrder = 0xFF; @@ -1136,9 +1136,9 @@ static void AllocContestResources(void) gContestResources->contestBgTilemaps[3] = AllocZeroed(0x1000); gContestResources->boxBlinkTiles1 = AllocZeroed(0x800); gContestResources->boxBlinkTiles2 = AllocZeroed(0x800); - gContestResources->field_3c = AllocZeroed(0x2000); - gUnknown_0202305C = gContestResources->field_3c; - gUnknown_02023060 = gContestResources->contestBgTilemaps[1]; + gContestResources->animBgTileBuffer = AllocZeroed(0x2000); + gBattleAnimBgTileBuffer = gContestResources->animBgTileBuffer; + gBattleAnimBgTilemapBuffer = gContestResources->contestBgTilemaps[1]; } static void FreeContestResources(void) @@ -1158,10 +1158,10 @@ static void FreeContestResources(void) FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[3]); FREE_AND_SET_NULL(gContestResources->boxBlinkTiles1); FREE_AND_SET_NULL(gContestResources->boxBlinkTiles2); - FREE_AND_SET_NULL(gContestResources->field_3c); + FREE_AND_SET_NULL(gContestResources->animBgTileBuffer); FREE_AND_SET_NULL(gContestResources); - gUnknown_0202305C = NULL; - gUnknown_02023060 = NULL; + gBattleAnimBgTileBuffer = NULL; + gBattleAnimBgTilemapBuffer = NULL; } void CB2_StartContest(void) @@ -1310,24 +1310,24 @@ static bool8 SetupContestGraphics(u8 *stateVar) RequestDma3Fill(0, (void *)VRAM + 0x10000, 0x8000, 1); break; case 1: - LZDecompressVram(gContestMiscGfx, (void *)VRAM); + LZDecompressVram(gContestInterfaceGfx, (void *)VRAM); break; case 2: LZDecompressVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4))); DmaCopyLarge32(3, (void *)(BG_SCREEN_ADDR(4)), eUnzippedContestAudience_Gfx, 0x2000, 0x1000); break; case 3: - CopyToBgTilemapBuffer(3, gOldContestGfx, 0, 0); + CopyToBgTilemapBuffer(3, gContestAudienceTilemap, 0, 0); CopyBgTilemapBufferToVram(3); break; case 4: - CopyToBgTilemapBuffer(2, gUnknown_08C17170, 0, 0); + CopyToBgTilemapBuffer(2, gContestInterfaceTilemap, 0, 0); CopyBgTilemapBufferToVram(2); // This is a bug, and copies random junk. savedJunk is never read. DmaCopy32Defvars(3, gContestResources->contestBgTilemaps[2], eContestTempSave.savedJunk, sizeof(eContestTempSave.savedJunk)); break; case 5: - LoadCompressedPalette(gOldContestPalette, 0, 0x200); + LoadCompressedPalette(gContestInterfaceAudiencePalette, 0, 0x200); CpuCopy32(gPlttBufferUnfaded + 128, tempPalette1, 16 * sizeof(u16)); CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, tempPalette2, 16 * sizeof(u16)); CpuCopy32(tempPalette2, gPlttBufferUnfaded + 128, 16 * sizeof(u16)); @@ -1396,7 +1396,7 @@ static void Task_RaiseCurtainAtStart(u8 taskId) gTasks[taskId].data[0]++; break; case 1: - *(s16*)&gBattle_BG1_Y += 7; + *(s16 *)&gBattle_BG1_Y += 7; if ((s16)gBattle_BG1_Y <= DISPLAY_HEIGHT) break; gTasks[taskId].data[0]++; @@ -1543,7 +1543,7 @@ static void Task_ShowMoveSelectScreen(u8 taskId) moveNameBuffer = StringCopy(moveNameBuffer, gMoveNames[move]); FillWindowPixelBuffer(i + MOVE_WINDOWS_START, PIXEL_FILL(0)); - Contest_PrintTextToBg0WindowAt(i + MOVE_WINDOWS_START, moveName, 5, 1, 7); + Contest_PrintTextToBg0WindowAt(i + MOVE_WINDOWS_START, moveName, 5, 1, FONT_NARROW); } DrawMoveSelectArrow(eContest.playerMoveChoice); @@ -1582,7 +1582,7 @@ static void Task_HandleMoveSelectInput(u8 taskId) StringCopy(gDisplayedStringBattle, gText_AppealNumButItCantParticipate); ContestClearGeneralTextWindow(); StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle); - Contest_StartTextPrinter(gStringVar4, 0); + Contest_StartTextPrinter(gStringVar4, FALSE); gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; gTasks[taskId].func = Task_TryShowMoveSelectScreen; @@ -1667,7 +1667,7 @@ static void Task_HideMoveSelectScreen(u8 taskId) { FillWindowPixelBuffer(MOVE_WINDOWS_START + i, PIXEL_FILL(0)); PutWindowTilemap(MOVE_WINDOWS_START + i); - CopyWindowToVram(MOVE_WINDOWS_START + i, 2); + CopyWindowToVram(MOVE_WINDOWS_START + i, COPYWIN_GFX); } Contest_SetBgCopyFlags(0); // This seems to be a bug; it should have just copied PLTT_BUFFER_SIZE. @@ -1814,7 +1814,7 @@ static void Task_DoAppeals(u8 taskId) else StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[contestant].moveCategory]); StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove); - Contest_StartTextPrinter(gStringVar4, 1); + Contest_StartTextPrinter(gStringVar4, TRUE); gTasks[taskId].tState = APPEALSTATE_WAIT_USED_MOVE_MSG; } return; @@ -2076,7 +2076,7 @@ static void Task_DoAppeals(u8 taskId) ContestClearGeneralTextWindow(); StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, gText_MonCantAppealNextTurn); - Contest_StartTextPrinter(gStringVar4, 1); + Contest_StartTextPrinter(gStringVar4, TRUE); } gTasks[taskId].tState = APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG; } @@ -2118,7 +2118,7 @@ static void Task_DoAppeals(u8 taskId) ContestClearGeneralTextWindow(); StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, gText_JudgeLookedAtMonExpectantly); - Contest_StartTextPrinter(gStringVar4, 1); + Contest_StartTextPrinter(gStringVar4, TRUE); DoJudgeSpeechBubble(JUDGE_SYMBOL_ONE_EXCLAMATION); gTasks[taskId].tCounter = 0; gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_COMBO; @@ -2231,7 +2231,7 @@ static void Task_DoAppeals(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_MonsXWentOverGreat); else StringExpandPlaceholders(gStringVar4, gText_MonsXGotTheCrowdGoing); - Contest_StartTextPrinter(gStringVar4, 1); + Contest_StartTextPrinter(gStringVar4, TRUE); gTasks[taskId].tCounter = 0; gTasks[taskId].data[11] = 0; if (r3 < 0) @@ -2553,10 +2553,10 @@ static void Task_UpdateHeartSliders(u8 taskId) static void Task_WaitForHeartSliders(u8 taskId) { if (SlidersDoneUpdating()) - gTasks[taskId].func = sub_80DA348; + gTasks[taskId].func = Task_RestorePlttBufferUnfaded; } -static void sub_80DA348(u8 taskId) +static void Task_RestorePlttBufferUnfaded(u8 taskId) { DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); gTasks[taskId].data[0] = 0; @@ -2753,8 +2753,8 @@ static void Task_ContestReturnToField(u8 taskId) static void FieldCB_ContestReturnToField(void) { - ScriptContext2_Disable(); - EnableBothScriptContexts(); + UnlockPlayerFieldControls(); + ScriptContext_Enable(); } static void TryPutPlayerLast(void) @@ -2794,7 +2794,7 @@ void CreateContestMonFromParty(u8 partyIndex) gContestMons[gContestPlayerMonIndex].highestRank = 0; gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES); GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name); - StringGetEnd10(name); + StringGet_Nickname(name); if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) { StripMonNameForLinkContest(name, GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE)); @@ -2853,7 +2853,7 @@ void SetContestants(u8 contestType, u8 rank) u8 opponentsCount = 0; u8 opponents[100]; bool8 allowPostgameContestants = FALSE; - const u8 * filter; + const u8 *filter; TryPutPlayerLast(); @@ -3009,7 +3009,7 @@ static void DrawContestantWindowText(void) static u8 *Contest_CopyStringWithColor(const u8 *string, u8 color) { - u8 * ptr = StringCopy(gDisplayedStringBattle, gText_ColorTransparent); + u8 *ptr = StringCopy(gDisplayedStringBattle, gText_ColorTransparent); ptr[-1] = color; // Overwrites the "{COLOR TRANSPARENT}" part of the string. ptr = StringCopy(ptr, string); @@ -3029,10 +3029,10 @@ static void PrintContestantTrainerNameWithColor(u8 contestant, u8 color) StringCopy(buffer, gText_Slash); StringAppend(buffer, gContestMons[contestant].trainerName); Contest_CopyStringWithColor(buffer, color); - offset = GetStringRightAlignXOffset(7, gDisplayedStringBattle, 0x60); + offset = GetStringRightAlignXOffset(FONT_NARROW, gDisplayedStringBattle, 0x60); if (offset > 55) offset = 55; - Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[contestant], gDisplayedStringBattle, offset, 1, 7); + Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[contestant], gDisplayedStringBattle, offset, 1, FONT_NARROW); } static void PrintContestantMonName(u8 contestant) @@ -3043,7 +3043,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, 7); + Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[contestant], gDisplayedStringBattle, 5, 1, FONT_NARROW); } static u16 CalculateContestantRound1Points(u8 who, u8 contestCategory) @@ -3121,10 +3121,10 @@ static u8 CreateContestantSprite(u16 species, u32 otId, u32 personality, u32 ind u8 spriteId; species = SanitizeSpecies(species); - HandleLoadSpecialPokePic(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites.ptr[0], species, personality); + HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->sprites.ptr[B_POSITION_PLAYER_LEFT], species, personality); LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20); - SetMultiuseSpriteTemplateToPokemon(species, 0); + SetMultiuseSpriteTemplateToPokemon(species, B_POSITION_PLAYER_LEFT); spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x70, GetBattlerSpriteFinal_Y(2, species, FALSE), 30); gSprites[spriteId].oam.paletteNum = 2; @@ -3183,14 +3183,14 @@ static u16 GetMoveEffectSymbolTileOffset(u16 move, u8 contestant) return offset; } -static void PrintContestMoveDescription(u16 a) +static void PrintContestMoveDescription(u16 move) { u8 category; u16 categoryTile; u8 numHearts; // The contest category icon is implemented as a 5x2 group of tiles. - category = gContestMoves[a].contestCategory; + category = gContestMoves[move].contestCategory; if (category == CONTEST_CATEGORY_COOL) categoryTile = 0x4040; else if (category == CONTEST_CATEGORY_BEAUTY) @@ -3206,27 +3206,27 @@ static void PrintContestMoveDescription(u16 a) ContestBG_FillBoxWithIncrementingTile(0, categoryTile + 0x10, 0x0b, 0x20, 0x05, 0x01, 0x11, 0x01); // Appeal hearts - if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF) + if (gContestEffects[gContestMoves[move].effect].appeal == 0xFF) numHearts = 0; else - numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10; + numHearts = gContestEffects[gContestMoves[move].effect].appeal / 10; if (numHearts > MAX_CONTEST_MOVE_HEARTS) numHearts = MAX_CONTEST_MOVE_HEARTS; ContestBG_FillBoxWithTile(0, TILE_EMPTY_APPEAL_HEART, 0x15, 0x1f, MAX_CONTEST_MOVE_HEARTS, 0x01, 0x11); ContestBG_FillBoxWithTile(0, TILE_FILLED_APPEAL_HEART, 0x15, 0x1f, numHearts, 0x01, 0x11); // Jam hearts - if (gContestEffects[gContestMoves[a].effect].jam == 0xFF) + if (gContestEffects[gContestMoves[move].effect].jam == 0xFF) numHearts = 0; else - numHearts = gContestEffects[gContestMoves[a].effect].jam / 10; + numHearts = gContestEffects[gContestMoves[move].effect].jam / 10; if (numHearts > MAX_CONTEST_MOVE_HEARTS) numHearts = MAX_CONTEST_MOVE_HEARTS; ContestBG_FillBoxWithTile(0, TILE_EMPTY_JAM_HEART, 0x15, 0x20, MAX_CONTEST_MOVE_HEARTS, 0x01, 0x11); ContestBG_FillBoxWithTile(0, TILE_FILLED_JAM_HEART, 0x15, 0x20, numHearts, 0x01, 0x11); FillWindowPixelBuffer(WIN_MOVE_DESCRIPTION, PIXEL_FILL(0)); - Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[a].effect]); + Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[move].effect]); Contest_PrintTextToBg0WindowStd(WIN_SLASH, gText_Slash); } @@ -3339,9 +3339,9 @@ static bool8 DrawStatusSymbol(u8 contestant) u16 symbolOffset = 0; u8 contestantOffset = gContestantTurnOrder[contestant] * 5 + 2; - if (eContestantStatus[contestant].resistant - || eContestantStatus[contestant].immune - || eContestantStatus[contestant].jamSafetyCount != 0 + if (eContestantStatus[contestant].resistant + || eContestantStatus[contestant].immune + || eContestantStatus[contestant].jamSafetyCount != 0 || eContestantStatus[contestant].jamReduction != 0) symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_CIRCLE); else if (eContestantStatus[contestant].nervous) @@ -3374,7 +3374,7 @@ static void DrawStatusSymbols(void) static void ContestClearGeneralTextWindow(void) { FillWindowPixelBuffer(WIN_GENERAL_TEXT, PIXEL_FILL(0)); - CopyWindowToVram(WIN_GENERAL_TEXT, 2); + CopyWindowToVram(WIN_GENERAL_TEXT, COPYWIN_GFX); Contest_SetBgCopyFlags(0); } @@ -3663,7 +3663,7 @@ static void ContestPrintLinkStandby(void) gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; ContestClearGeneralTextWindow(); - Contest_StartTextPrinter(gText_LinkStandby4, 0); + Contest_StartTextPrinter(gText_LinkStandby4, FALSE); } static void FillContestantWindowBgs(void) @@ -3817,7 +3817,7 @@ static void Task_UpdateAppealHearts(u8 taskId) { PlaySE(SE_CONTEST_HEART); m4aMPlayImmInit(&gMPlayInfo_SE1); - m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, pitchMod * 256); + m4aMPlayPitchControl(&gMPlayInfo_SE1, TRACKS_ALL, pitchMod * 256); } else { @@ -4270,7 +4270,7 @@ static void ContestDebugDoPrint(void) txtPtr = StringCopy(txtPtr, gText_OneDash); } ConvertIntToDecimalStringN(txtPtr, value, STR_CONV_MODE_LEFT_ALIGN, 4); - Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text, 55, 1, 7); + Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text, 55, 1, FONT_NARROW); } for (i = 0; i < CONTESTANT_COUNT; i++) { @@ -4282,7 +4282,7 @@ static void ContestDebugDoPrint(void) txtPtr = StringCopy(txtPtr, gText_OneDash); } ConvertIntToDecimalStringN(txtPtr, value, STR_CONV_MODE_LEFT_ALIGN, 4); - Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text, 5, 1, 7); + Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text, 5, 1, FONT_NARROW); } SwapMoveDescAndContestTilemaps(); break; @@ -4333,7 +4333,7 @@ void SortContestants(bool8 useRanking) s32 j; for (j = i; j > v3; j--) gContestantTurnOrder[j] = gContestantTurnOrder[j - 1]; - + // Insert into the new spot. gContestantTurnOrder[v3] = i; break; @@ -4348,7 +4348,7 @@ void SortContestants(bool8 useRanking) } // Invert gContestantTurnOrder; above, it was a list of contestant IDs. Now it's a list of turn orderings. - // + // // For example, if contestant 3 had the first turn, then `gContestantTurnOrder[1] = 3`. The turn is the index, // the contestant is the data. After inverting the list, `gContestantTurnOrder[3] = 1`. The contestant is the index, // and the turn is the data. @@ -4383,7 +4383,7 @@ void SortContestants(bool8 useRanking) } // Randomize the order of contestants with tied rankings using Selection Sort. - // + // // Look through the array for tied ranks, and use randomOrdering to break the tie. // This ensures that contestants with the same rank will be randomly ordered. This // uses an in-place slection sort, which involves a lot of extra swapping. @@ -4534,14 +4534,14 @@ static void CalculateAppealMoveImpact(u8 contestant) eContestantStatus[contestant].contestantAnimTarget = i; } -void SetContestantEffectStringID(u8 a, u8 b) +void SetContestantEffectStringID(u8 contestant, u8 effectStringId) { - eContestantStatus[a].effectStringId = b; + eContestantStatus[contestant].effectStringId = effectStringId; } -void SetContestantEffectStringID2(u8 a, u8 b) +void SetContestantEffectStringID2(u8 contestant, u8 effectStringId) { - eContestantStatus[a].effectStringId2 = b; + eContestantStatus[contestant].effectStringId2 = effectStringId; } void SetStartledString(u8 contestant, u8 jam) @@ -4574,7 +4574,7 @@ static void PrintAppealMoveResultText(u8 contestant, u8 stringId) StringCopy(gStringVar3, gText_Contest_Fear); StringExpandPlaceholders(gStringVar4, sAppealResultTexts[stringId]); ContestClearGeneralTextWindow(); - Contest_StartTextPrinter(gStringVar4, 1); + Contest_StartTextPrinter(gStringVar4, TRUE); } void MakeContestantNervous(u8 p) @@ -4741,7 +4741,7 @@ static void UpdateApplauseMeter(void) s8 Contest_GetMoveExcitement(u16 move) { - return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory]; + return sContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory]; } static u8 StartApplauseOverflowAnimation(void) @@ -4759,13 +4759,13 @@ static void Task_ApplauseOverflowAnimation(u8 taskId) if (++gTasks[taskId].data[0] == 1) { gTasks[taskId].data[0] = 0; - + // Alternate between normal colors and white. if (gTasks[taskId].data[3] == 0) gTasks[taskId].data[4]++; else gTasks[taskId].data[4]--; - + BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB_WHITE); // At the maximum or minimum blending, switch directions. @@ -5086,7 +5086,7 @@ static void SetBgForCurtainDrop(void) CpuFill32(0, gContestResources->contestBgTilemaps[1], 0x1000); - CopyToBgTilemapBuffer(1, gUnknown_08C17980, 0, 0); + CopyToBgTilemapBuffer(1, gContestCurtainTilemap, 0, 0); Contest_SetBgCopyFlags(1); for (i = 0; i < CONTESTANT_COUNT; i++) @@ -5385,7 +5385,7 @@ static void SetBattleTargetSpritePosition(void) static void SetMoveTargetPosition(u16 move) { - switch (gBattleMoves[move].target) + switch (GetBattlerMoveTargetType(gBattlerAttacker, move)) { case MOVE_TARGET_USER_OR_SELECTED: case MOVE_TARGET_USER: @@ -5407,7 +5407,7 @@ static void Contest_PrintTextToBg0WindowStd(u32 windowId, const u8 *b) printerTemplate.currentChar = b; printerTemplate.windowId = windowId; - printerTemplate.fontId = 1; + printerTemplate.fontId = FONT_NORMAL; printerTemplate.x = 0; printerTemplate.y = 1; printerTemplate.currentX = 0; @@ -5454,7 +5454,7 @@ static void Contest_StartTextPrinter(const u8 *currChar, bool32 b) printerTemplate.currentChar = currChar; printerTemplate.windowId = 4; - printerTemplate.fontId = 1; + printerTemplate.fontId = FONT_NORMAL; printerTemplate.x = 0; printerTemplate.y = 1; printerTemplate.currentX = 0; @@ -5691,6 +5691,8 @@ static void SetContestLiveUpdateFlags(u8 contestant) } } +#define APPEAL_MOVES_END 0xFFFF + static void CalculateContestLiveUpdateData(void) { u8 loser; @@ -5755,7 +5757,7 @@ static void CalculateContestLiveUpdateData(void) appealMoves[i] = MOVE_NONE; numMoveUses[i] = 0; } - appealMoves[CONTEST_NUM_APPEALS] = 0xFFFF; + appealMoves[CONTEST_NUM_APPEALS] = APPEAL_MOVES_END; numMoveUses[CONTEST_NUM_APPEALS] = 0; for (i = 0; i < CONTEST_NUM_APPEALS; i++) @@ -5784,7 +5786,7 @@ static void CalculateContestLiveUpdateData(void) moveCandidates[0] = appealMoves[0]; mostUses = numMoveUses[0]; numMoveCandidates = 0; - for (i = 1; appealMoves[i] != 0xFFFF; i++) + for (i = 1; appealMoves[i] != APPEAL_MOVES_END; i++) { if (mostUses < numMoveUses[i]) { @@ -5953,7 +5955,7 @@ static void ContestDebugPrintBitStrings(void) if (!gEnableContestDebugging) return; - + if (eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS && eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS) return; @@ -5965,7 +5967,7 @@ static void ContestDebugPrintBitStrings(void) for (i = 0; i < CONTESTANT_COUNT; i++) { txtPtr = StringCopy(text1, gText_CDot); - Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1, 5, 1, 7); + Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1, 5, 1, FONT_NARROW); bits = gContestResources->tv[i].winnerFlags; for (j = 7; j > -1; j--) // Weird loop. { @@ -5978,7 +5980,7 @@ static void ContestDebugPrintBitStrings(void) text2[j] = EOS; Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text2, 5, 1, 7); - Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1 + j, 55, 1, 7); + Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1 + j, 55, 1, FONT_NARROW); } } else // CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS @@ -5998,8 +6000,8 @@ static void ContestDebugPrintBitStrings(void) text2[j] = text1[j]; text2[j] = EOS; - Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text2, 5, 1, 7); - Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1 + j, 55, 1, 7); + Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text2, 5, 1, FONT_NARROW); + Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1 + j, 55, 1, FONT_NARROW); } } SwapMoveDescAndContestTilemaps(); @@ -6028,10 +6030,10 @@ static u8 GetMonNicknameLanguage(u8 *nickname) || *nickname == CHAR_SLASH || *nickname == CHAR_HYPHEN || *nickname == CHAR_ELLIPSIS - || *nickname == CHAR_DBL_QUOT_LEFT - || *nickname == CHAR_DBL_QUOT_RIGHT - || *nickname == CHAR_SGL_QUOT_LEFT - || *nickname == CHAR_DBL_QUOT_LEFT) // Most likely a typo, CHAR_SGL_QUOT_RIGHT should be here instead. + || *nickname == CHAR_DBL_QUOTE_LEFT + || *nickname == CHAR_DBL_QUOTE_RIGHT + || *nickname == CHAR_SGL_QUOTE_LEFT + || *nickname == CHAR_DBL_QUOTE_LEFT) // Most likely a typo, CHAR_SGL_QUOTE_RIGHT should be here instead. { nickname++; } diff --git a/src/contest_ai.c b/src/contest_ai.c index 8fe339790a..7aeba828a6 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -1732,7 +1732,7 @@ static void ContestAICmd_if_user_doesnt_have_exciting_move(void) // BUG: This is checking if the user has a specific move, but when it's used in the AI script // they're checking for an effect. Checking for a specific effect would make more sense, -// but given that effects are normally read as a single byte and this reads 2 bytes, it +// but given that effects are normally read as a single byte and this reads 2 bytes, it // seems reading a move was intended and the AI script is using it incorrectly. // The fix below aligns the function with how it's used by the script, rather than the apparent // intention of its usage @@ -1750,7 +1750,7 @@ static void ContestAICmd_check_user_has_move(void) #else u16 move = gContestMons[eContestAI.contestantId].moves[i]; #endif - + if (move == targetMove) { hasMove = TRUE; diff --git a/src/contest_effect.c b/src/contest_effect.c index 1fe21daaba..1d70b8d128 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -59,22 +59,22 @@ static s16 RoundUp(s16); bool8 AreMovesContestCombo(u16 lastMove, u16 nextMove) { - u8 nextMoveComboMoves[4]; + int i; u8 lastMoveComboStarterId = gContestMoves[lastMove].comboStarterId; - nextMoveComboMoves[0] = gContestMoves[nextMove].comboMoves[0]; - nextMoveComboMoves[1] = gContestMoves[nextMove].comboMoves[1]; - nextMoveComboMoves[2] = gContestMoves[nextMove].comboMoves[2]; - nextMoveComboMoves[3] = gContestMoves[nextMove].comboMoves[3]; if (lastMoveComboStarterId == 0) + { return FALSE; - else if (lastMoveComboStarterId == nextMoveComboMoves[0] - || lastMoveComboStarterId == nextMoveComboMoves[1] - || lastMoveComboStarterId == nextMoveComboMoves[2] - || lastMoveComboStarterId == nextMoveComboMoves[3]) - return gComboStarterLookupTable[lastMoveComboStarterId]; + } else + { + for (i = 0; i < MAX_COMBO_MOVES; i++) + { + if (lastMoveComboStarterId == gContestMoves[nextMove].comboMoves[i]) + return TRUE; + } return FALSE; + } } // A highly appealing move. @@ -132,7 +132,7 @@ static void ContestEffect_UserLessEasilyStartled(void) SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_STOPPED_CARING); } -// Slightly startles the POKéMON in front. +// Slightly startles the POKéMON in front. static void ContestEffect_StartleFrontMon(void) { u8 idx = 0; @@ -179,7 +179,7 @@ static void ContestEffect_StartlePrevMons(void) SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } -// Startles the POKéMON that appealed before the user. +// Startles the POKéMON that appealed before the user. static void ContestEffect_StartlePrevMon2(void) { u8 rval = Random() % 10; @@ -196,7 +196,7 @@ static void ContestEffect_StartlePrevMon2(void) ContestEffect_StartleFrontMon(); } -// Startles all POKéMON that appealed before the user. +// Startles all POKéMON that appealed before the user. static void ContestEffect_StartlePrevMons2(void) { u8 numStartled = 0; @@ -272,7 +272,7 @@ static void ContestEffect_ShiftJudgeAttention(void) } } -// Startles the POKéMON that has the JUDGE's attention. +// Startles the POKéMON that has the JUDGE's attention. static void ContestEffect_StartleMonWithJudgesAttention(void) { u8 numStartled = 0; @@ -310,7 +310,7 @@ static void ContestEffect_JamsOthersButMissOneTurn(void) SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } -// Startles POKéMON that made a same-type appeal. +// Startles POKéMON that made a same-type appeal. static void ContestEffect_StartleMonsSameTypeAppeal(void) { u16 move = eContestantStatus[eContestAppealResults.contestant].currMove; @@ -318,42 +318,42 @@ static void ContestEffect_StartleMonsSameTypeAppeal(void) SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } -// Badly startles POKéMON that made COOL appeals. +// Badly startles POKéMON that made COOL appeals. static void ContestEffect_StartleMonsCoolAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_COOL); SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } -// Badly startles POKéMON that made BEAUTY appeals. +// Badly startles POKéMON that made BEAUTY appeals. static void ContestEffect_StartleMonsBeautyAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_BEAUTY); SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } -// Badly startles POKéMON that made CUTE appeals. +// Badly startles POKéMON that made CUTE appeals. static void ContestEffect_StartleMonsCuteAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_CUTE); SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } -// Badly startles POKéMON that made SMART appeals. +// Badly startles POKéMON that made SMART appeals. static void ContestEffect_StartleMonsSmartAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_SMART); SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } -// Badly startles POKéMON that made TOUGH appeals. +// Badly startles POKéMON that made TOUGH appeals. static void ContestEffect_StartleMonsToughAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_TOUGH); SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } -// Makes one POKéMON after the user nervous. +// Makes one POKéMON after the user nervous. static void ContestEffect_MakeFollowingMonNervous(void) { bool32 hitAny = FALSE; @@ -385,7 +385,7 @@ static void ContestEffect_MakeFollowingMonNervous(void) SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } -// Makes all POKéMON after the user nervous. +// Makes all POKéMON after the user nervous. static void ContestEffect_MakeFollowingMonsNervous(void) { u8 numUnnerved = 0; @@ -427,7 +427,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) for (i = 0; i < CONTESTANT_COUNT; i++) { if (eContestantStatus[i].hasJudgesAttention && IsContestantAllowedToCombo(i)) - oddsMod[i] = gComboStarterLookupTable[gContestMoves[eContestantStatus[i].prevMove].comboStarterId] * 10; + oddsMod[i] = gContestMoves[eContestantStatus[i].prevMove].comboStarterId == 0 ? 0 : 10; else oddsMod[i] = 0; oddsMod[i] -= (eContestantStatus[i].condition / 10) * 10; @@ -492,7 +492,7 @@ static void ContestEffect_WorsenConditionOfPrevMons(void) SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED); } -// Badly startles POKéMON in good condition. +// Badly startles POKéMON in good condition. static void ContestEffect_BadlyStartlesMonsInGoodCondition(void) { u8 numHit = 0; @@ -891,7 +891,7 @@ static void ContestEffect_ExciteAudienceInAnyContest(void) } } -// Badly startles all POKéMON that made good appeals. +// Badly startles all POKéMON that made good appeals. static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void) { int i; diff --git a/src/contest_link.c b/src/contest_link.c index ae6975268f..9a960e00ac 100644 --- a/src/contest_link.c +++ b/src/contest_link.c @@ -22,7 +22,7 @@ static void Task_LinkContest_InitFlags(u8); bool32 LinkContest_SendBlock(void *src, u16 size) { memcpy(gDecompressionBuffer, src, size); - if (SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, size)) + if (SendBlock(BitmaskAllOtherLinkPlayers(), gDecompressionBuffer, size)) return TRUE; else return FALSE; @@ -61,7 +61,7 @@ void Task_LinkContest_Init(u8 taskId) for (i = 0; i < CONTESTANT_COUNT; i++) gBlockRecvBuffer[i][0] = 0xFF; - + gTasks[taskId].tState = 0; gTasks[taskId].func = Task_LinkContest_StartInitFlags; } @@ -99,7 +99,7 @@ bool32 LinkContest_TryLinkStandby(s16 *state) // Skip standby for RS cabled links if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER) return TRUE; - + switch (*state) { case 0: @@ -162,7 +162,7 @@ void Task_LinkContest_CommunicateMonsRS(u8 taskId) // Only if leader. Request other players data if (++gTasks[taskId].tTimer > 300) { - SendBlockRequest(2); + SendBlockRequest(BLOCK_REQ_SIZE_100); gTasks[taskId].tState = 1; } break; @@ -238,7 +238,7 @@ void Task_LinkContest_CommunicateCategoryRS(u8 taskId) case 10: if (++gTasks[taskId].tTimer > 10) { - SendBlockRequest(2); + SendBlockRequest(BLOCK_REQ_SIZE_100); gTasks[taskId].tState = 1; } break; @@ -491,7 +491,7 @@ void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId) case 10: if (++gTasks[taskId].tTimer > 10) { - SendBlockRequest(2); + SendBlockRequest(BLOCK_REQ_SIZE_100); gTasks[taskId].tState = 1; } break; diff --git a/src/contest_link_util.c b/src/contest_link_util.c index 31ffb5fdb3..28dec19892 100644 --- a/src/contest_link_util.c +++ b/src/contest_link_util.c @@ -88,7 +88,7 @@ static void Task_LinkContest_SetUpContestEm(u8 taskId) for (i = 0; i < gNumLinkContestPlayers; i++) categories[i] = gTasks[taskId].data[i + 1]; - + // Ensure all players are doing the same category for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++) ; @@ -100,7 +100,7 @@ static void Task_LinkContest_SetUpContestEm(u8 taskId) for (i = 0; i < gNumLinkContestPlayers; i++) leaderIds[i] = gTasks[taskId].data[i + 5]; - + // If < 4 players and player is leader, set AI contestants based on rank and game clear if (gNumLinkContestPlayers != CONTESTANT_COUNT && GetMultiplayerId() == 0) { @@ -113,7 +113,7 @@ static void Task_LinkContest_SetUpContestEm(u8 taskId) if (rank) rank--; - + gameCleared = TRUE; for (i = 0; i < gNumLinkContestPlayers; i++) { @@ -202,7 +202,7 @@ static void Task_LinkContest_CommunicateRngEm(u8 taskId) // Only the leader sends the RNG seed if (!IsLinkTaskFinished()) return; - + if (LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == 1) gTasks[taskId].data[0]++; } @@ -321,7 +321,7 @@ static void Task_LinkContest_CommunicateAIMonsEm(u8 taskId) { if (!IsLinkTaskFinished()) return; - + if (LinkContest_SendBlock(&gContestMons[gNumLinkContestPlayers], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1) gTasks[taskId].data[0]++; } diff --git a/src/contest_painting.c b/src/contest_painting.c index 6621688f9b..f891946d67 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -267,14 +267,14 @@ static void InitContestPaintingWindow(void) { ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); sWindowId = AddWindow(&sWindowTemplate); DeactivateAllTextPrinters(); FillWindowPixelBuffer(sWindowId, PIXEL_FILL(0)); PutWindowTilemap(sWindowId); - CopyWindowToVram(sWindowId, 3); + CopyWindowToVram(sWindowId, COPYWIN_FULL); ShowBg(1); } @@ -306,8 +306,8 @@ static void PrintContestPaintingCaption(u8 contestType, bool8 isForArtist) StringExpandPlaceholders(gStringVar4, sMuseumCaptions[category]); } - x = GetStringCenterAlignXOffset(1, gStringVar4, 208); - AddTextPrinterParameterized(sWindowId, 1, gStringVar4, x, 1, 0, 0); + x = GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 208); + AddTextPrinterParameterized(sWindowId, FONT_NORMAL, gStringVar4, x, 1, 0, 0); CopyBgTilemapBufferToVram(1); } @@ -361,27 +361,25 @@ static void VBlankCB_ContestPainting(void) TransferPlttBuffer(); } -static void InitContestMonPixels(u16 species, u8 whichSprite) +static void InitContestMonPixels(u16 species, bool8 backPic) { const void *pal = GetMonSpritePalFromSpeciesAndPersonality(species, gContestPaintingWinner->trainerId, gContestPaintingWinner->personality); LZDecompressVram(pal, gContestPaintingMonPalette); - if (whichSprite == 0) + if (!backPic) { - HandleLoadSpecialPokePic( - &gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites.ptr[1], - species, - gContestPaintingWinner->personality); - _InitContestMonPixels(gMonSpritesGfxPtr->sprites.ptr[1], gContestPaintingMonPalette, (void *)gContestMonPixels); + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], + species, + gContestPaintingWinner->personality); + _InitContestMonPixels(gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], gContestPaintingMonPalette, (void *)gContestMonPixels); } else { - HandleLoadSpecialPokePic( - &gMonBackPicTable[species], - gMonSpritesGfxPtr->sprites.ptr[0], - species, - gContestPaintingWinner->personality); - _InitContestMonPixels(gMonSpritesGfxPtr->sprites.ptr[0], gContestPaintingMonPalette, (void *)gContestMonPixels); + HandleLoadSpecialPokePic(FALSE, + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_PLAYER_LEFT], + species, + gContestPaintingWinner->personality); + _InitContestMonPixels(gMonSpritesGfxPtr->sprites.ptr[B_POSITION_PLAYER_LEFT], gContestPaintingMonPalette, (void *)gContestMonPixels); } } @@ -592,7 +590,7 @@ static void DoContestPaintingImageProcessing(u8 imageEffect) static void CreateContestPaintingPicture(u8 contestWinnerId, bool8 isForArtist) { AllocPaintingResources(); - InitContestMonPixels(gContestPaintingWinner->species, 0); + InitContestMonPixels(gContestPaintingWinner->species, FALSE); DoContestPaintingImageProcessing(GetImageEffectForContestWinner(contestWinnerId)); InitPaintingMonOamData(contestWinnerId); LoadContestPaintingFrame(contestWinnerId, isForArtist); diff --git a/src/contest_util.c b/src/contest_util.c index a5b053847c..dfd69a2857 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -77,7 +77,10 @@ enum { #define TAG_CONFETTI 3017 #define TAG_WIRELESS_INDICATOR_WINDOW 22222 -#define MAX_BAR_LENGTH 87 +// Length of the score bar on the results screen +#define NUM_BAR_SEGMENTS 11 +#define BAR_SEGMENT_LENGTH 8 // Each segment of the results bar is a single tile, so 8 pixels long +#define MAX_BAR_LENGTH (NUM_BAR_SEGMENTS * BAR_SEGMENT_LENGTH) // Starting x/y for the sliding results screen text box #define TEXT_BOX_X (DISPLAY_WIDTH + 32) @@ -96,7 +99,7 @@ struct ContestResultsInternal u8 winnerMonSpriteId; bool8 destroyConfetti; bool8 pointsFlashing; - s16 unkC[CONTESTANT_COUNT]; + s16 barLength[CONTESTANT_COUNT]; u8 numBarsUpdating; }; @@ -193,7 +196,7 @@ static const struct OamData sOamData_ResultsTextWindow = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -239,7 +242,7 @@ static const struct OamData sOamData_Confetti = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -362,7 +365,7 @@ static const struct OamData sOamData_WirelessIndicatorWindow = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -889,11 +892,10 @@ static void Task_ShowWinnerMonBanner(u8 taskId) species = gContestMons[i].species; personality = gContestMons[i].personality; otId = gContestMons[i].otId; - HandleLoadSpecialPokePic( - &gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites.ptr[1], - species, - personality); + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], + species, + personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); LoadCompressedSpritePalette(pokePal); @@ -1160,12 +1162,12 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) windowId = AddWindow(&windowTemplate); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - origWidth = GetStringWidth(1, text, 0); + origWidth = GetStringWidth(FONT_NORMAL, text, 0); strWidth = (origWidth + 9) / 8; if (strWidth > 30) strWidth = 30; - AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, -1, text); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, TEXT_SKIP_DRAW, text); { s32 i; struct Sprite *sprite; @@ -1177,17 +1179,17 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + OBJ_VRAM0); for (i = 1; i < (int)ARRAY_COUNT(spriteTilePtrs); i++) - spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + OBJ_VRAM0); - + spriteTilePtrs[i] = (void *)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + OBJ_VRAM0); + for (i = 0; i < (int)ARRAY_COUNT(spriteTilePtrs); i++) CpuFill32(0, spriteTilePtrs[i], 0x400); - + dst = spriteTilePtrs[0]; CpuCopy32(src, dst, 0x20); CpuCopy32(src + 128, dst + 0x100, 0x20); CpuCopy32(src + 128, dst + 0x200, 0x20); CpuCopy32(src + 64, dst + 0x300, 0x20); - + for (i = 0; i < strWidth; i++) { dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; @@ -1220,7 +1222,7 @@ static void CreateResultsTextWindowSprites(void) LoadSpriteSheet(&sSpriteSheets_ResultsTextWindow[i]); LoadSpritePalette(&sSpritePalette_ResultsTextWindow); - + // Create sprites for the two window types, each made up of 4 sprites for (i = 0; i < (int)ARRAY_COUNT(sSpriteSheets_ResultsTextWindow); i++) { @@ -1562,7 +1564,7 @@ static void SpriteCB_WinnerMonSlideIn(struct Sprite *sprite) { if (++sprite->data[0] == 10) { - PlayCry1(sprite->data[1], 0); + PlayCry_Normal(sprite->data[1], 0); sprite->data[1] = 0; } } @@ -1732,7 +1734,7 @@ static void CalculateContestantsResultData(void) if ((*sContestResults->monResults)[i].lostPoints) barLengthRound2 *= -1; - if (barLengthPreliminary + barLengthRound2 == MAX_BAR_LENGTH + 1) + if (barLengthPreliminary + barLengthRound2 == MAX_BAR_LENGTH) { if (barLengthRound2 > 0) (*sContestResults->monResults)[i].barLengthRound2--; @@ -1825,47 +1827,52 @@ static void Task_UpdateContestResultBar(u8 taskId) s16 target = gTasks[taskId].tTarget; s16 decreasing = gTasks[taskId].tDecreasing; + // Has the results bar reached the limit? if (decreasing) { - if (sContestResults->data->unkC[monId] <= 0) + if (sContestResults->data->barLength[monId] <= 0) minMaxReached = TRUE; } else { - if (sContestResults->data->unkC[monId] > MAX_BAR_LENGTH) + if (sContestResults->data->barLength[monId] >= MAX_BAR_LENGTH) minMaxReached = TRUE; } - if (sContestResults->data->unkC[monId] == target) + if (sContestResults->data->barLength[monId] == target) targetReached = TRUE; if (!targetReached) { + // Target length has not been reached, update bar length if (minMaxReached) - sContestResults->data->unkC[monId] = target; + sContestResults->data->barLength[monId] = target; else if (decreasing) - sContestResults->data->unkC[monId] = sContestResults->data->unkC[monId] - 1; + sContestResults->data->barLength[monId]--; else - sContestResults->data->unkC[monId] = sContestResults->data->unkC[monId] + 1; + sContestResults->data->barLength[monId]++; } + // Update the tiles of the results bar if it's still changing if (!minMaxReached && !targetReached) { - u8 var0; + u8 tileOffset; u16 tileNum; - for (i = 0; i < 11; i++) + for (i = 0; i < NUM_BAR_SEGMENTS; i++) { - if (sContestResults->data->unkC[monId] >= (i + 1) * 8) - var0 = 8; - else if (sContestResults->data->unkC[monId] >= i * 8) - var0 = sContestResults->data->unkC[monId] % 8; + if (sContestResults->data->barLength[monId] >= (i + 1) * BAR_SEGMENT_LENGTH) + tileOffset = 8; // Bar segment is full + else if (sContestResults->data->barLength[monId] >= i * BAR_SEGMENT_LENGTH) + tileOffset = sContestResults->data->barLength[monId] % 8; // Bar segment is between full and empty else - var0 = 0; + tileOffset = 0; // Bar segment is empty - if (var0 < 4) - tileNum = 0x504C + var0; + // The first 4 bar segment tiles are not adjacent in the tileset to the + // remaining bar segment tiles; choose the base tile number accordingly. + if (tileOffset < 4) + tileNum = 0x504C + tileOffset; else - tileNum = 0x5057 + var0; + tileNum = 0x5057 + tileOffset; FillBgTilemapBufferRect_Palette0(2, tileNum, i + 7, monId * 3 + 6, 1, 1); } @@ -1915,7 +1922,7 @@ static void AddContestTextPrinter(int windowId, u8 *str, int x) struct TextPrinterTemplate textPrinter; textPrinter.currentChar = str; textPrinter.windowId = windowId; - textPrinter.fontId = 7; + textPrinter.fontId = FONT_NARROW; textPrinter.x = x; textPrinter.y = 2; textPrinter.currentX = x; @@ -2105,7 +2112,7 @@ static void Task_StartContest(u8 taskId) void StartContest(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); CreateTask(Task_StartContest, 10); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); } @@ -2126,7 +2133,7 @@ static void Task_StartShowContestResults(u8 taskId) void ShowContestResults(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); CreateTask(Task_StartShowContestResults, 10); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); } @@ -2139,7 +2146,7 @@ void GetContestPlayerId(void) void ContestLinkTransfer(u8 category) { u8 newTaskId; - ScriptContext2_Enable(); + LockPlayerFieldControls(); newTaskId = CreateTask(Task_LinkContest_Init, 0); SetTaskFuncWithFollowupFunc(newTaskId, Task_LinkContest_Init, Task_StartCommunication); gTasks[newTaskId].data[9] = category; @@ -2237,12 +2244,12 @@ void Task_LinkContest_FinalizeConnection(u8 taskId) { // Succesfully connected for (i = 0; i < CONTESTANT_COUNT; i++) - StringGetEnd10(gContestMons[i].nickname); + StringGet_Nickname(gContestMons[i].nickname); DestroyTask(taskId); - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); - ScriptContext2_Disable(); - EnableBothScriptContexts(); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); + UnlockPlayerFieldControls(); + ScriptContext_Enable(); } } @@ -2257,8 +2264,8 @@ static void Task_LinkContest_WaitDisconnect(u8 taskId) if (!gReceivedRemoteLinkPlayers) { DestroyTask(taskId); - ScriptContext2_Disable(); - EnableBothScriptContexts(); + UnlockPlayerFieldControls(); + ScriptContext_Enable(); } } @@ -2564,11 +2571,11 @@ void ShowContestEntryMonPic(void) taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = species; - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[1], species, personality); + HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], species, personality); palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); LoadCompressedSpritePalette(palette); - SetMultiuseSpriteTemplateToPokemon(species, 1); + SetMultiuseSpriteTemplateToPokemon(species, B_POSITION_OPPONENT_LEFT); gMultiuseSpriteTemplate.paletteTag = palette->tag; spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0); @@ -2612,7 +2619,7 @@ static void Task_ShowContestEntryMonPic(u8 taskId) break; case 1: task->data[5] = CreateWindowFromRect(10, 3, 8, 8); - SetStandardWindowBorderStyle(task->data[5], 1); + SetStandardWindowBorderStyle(task->data[5], TRUE); task->data[0]++; break; case 2: @@ -2699,7 +2706,7 @@ static void Task_LinkContestWaitForConnection(u8 taskId) default: if (IsLinkTaskFinished() == 1) { - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } break; diff --git a/src/credits.c b/src/credits.c index 685ebc9fcc..958639e465 100644 --- a/src/credits.c +++ b/src/credits.c @@ -287,7 +287,7 @@ static const struct OamData sOamData_MonBg = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -370,7 +370,7 @@ static void InitCreditsBgsAndWindows(void) InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); ShowBg(0); } @@ -401,8 +401,8 @@ static void PrintCreditsText(const u8 *string, u8 y, bool8 isTitle) color[2] = TEXT_COLOR_DARK_GRAY; } - x = GetStringCenterAlignXOffsetWithLetterSpacing(1, string, DISPLAY_WIDTH, 1); - AddTextPrinterParameterized4(0, 1, x, y, 1, 0, color, -1, string); + x = GetStringCenterAlignXOffsetWithLetterSpacing(FONT_NORMAL, string, DISPLAY_WIDTH, 1); + AddTextPrinterParameterized4(0, FONT_NORMAL, x, y, 1, 0, color, TEXT_SKIP_DRAW, string); } #define tMainTaskId data[1] @@ -760,9 +760,9 @@ static void Task_UpdatePage(u8 taskId) for (i = 0; i < ENTRIES_PER_PAGE; i++) PrintCreditsText( sCreditsEntryPointerTable[gTasks[taskId].tCurrentPage][i]->text, - 5 + i * 16, + 5 + i * 16, sCreditsEntryPointerTable[gTasks[taskId].tCurrentPage][i]->isTitle); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); gTasks[taskId].tCurrentPage++; gTasks[taskId].tState++; @@ -812,7 +812,7 @@ static void Task_UpdatePage(u8 taskId) { // Still more Credits pages to show, return to state 2 to print FillWindowPixelBuffer(0, PIXEL_FILL(0)); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); gTasks[taskId].tState = 2; } return; @@ -912,9 +912,9 @@ static void Task_ShowMons(u8 taskId) case 2: if (sCreditsData->imgCounter == NUM_MON_SLIDES || gTasks[gTasks[taskId].tMainTaskId].func != Task_CreditsMain) break; - spriteId = CreateCreditsMonSprite(sCreditsData->monToShow[sCreditsData->currShownMon], - sMonSpritePos[sCreditsData->nextImgPos][0], - sMonSpritePos[sCreditsData->nextImgPos][1], + spriteId = CreateCreditsMonSprite(sCreditsData->monToShow[sCreditsData->currShownMon], + sMonSpritePos[sCreditsData->nextImgPos][0], + sMonSpritePos[sCreditsData->nextImgPos][1], sCreditsData->nextImgPos); if (sCreditsData->currShownMon < sCreditsData->numMonToShow - 1) { @@ -1286,18 +1286,18 @@ static void ResetCreditsTasks(u8 taskId) gIntroCredits_MovingSceneryState = INTROCRED_SCENERY_DESTROY; } -static void LoadTheEndScreen(u16 arg0, u16 arg1, u16 palOffset) +static void LoadTheEndScreen(u16 tileOffsetLoad, u16 tileOffsetWrite, u16 palOffset) { u16 baseTile; u16 i; - LZ77UnCompVram(sCreditsCopyrightEnd_Gfx, (void *)(VRAM + arg0)); + LZ77UnCompVram(sCreditsCopyrightEnd_Gfx, (void *)(VRAM + tileOffsetLoad)); LoadPalette(gIntroCopyright_Pal, palOffset, sizeof(gIntroCopyright_Pal)); baseTile = (palOffset / 16) << 12; for (i = 0; i < 32 * 32; i++) - ((u16 *) (VRAM + arg1))[i] = baseTile + 1; + ((u16 *) (VRAM + tileOffsetWrite))[i] = baseTile + 1; } static u16 GetLetterMapTile(u8 baseTiles) @@ -1533,7 +1533,7 @@ static u8 CreateCreditsMonSprite(u16 nationalDexNum, s16 x, s16 y, u16 position) static void SpriteCB_CreditsMonBg(struct Sprite *sprite) { - if (gSprites[sprite->sMonSpriteId].data[0] == 10 + if (gSprites[sprite->sMonSpriteId].data[0] == 10 || gIntroCredits_MovingSceneryState != INTROCRED_SCENERY_NORMAL) { DestroySprite(sprite); @@ -1555,7 +1555,7 @@ static void DeterminePokemonToShow(void) u16 page; u16 dexNum; u16 j; - + // Go through the Pokedex, and anything that has gotten caught we put into our massive array. // This basically packs all of the caught pokemon into the front of the array for (dexNum = 1, j = 0; dexNum < NATIONAL_DEX_COUNT; dexNum++) @@ -1585,7 +1585,7 @@ static void DeterminePokemonToShow(void) // Select a random mon, insert into array page = Random() % sCreditsData->numCaughtMon; sCreditsData->monToShow[j] = sCreditsData->caughtMonIds[page]; - + // Remove the select mon from the array, and condense array entries j++; sCreditsData->caughtMonIds[page] = 0; diff --git a/src/crt0.s b/src/crt0.s index 385e340a57..523061f52d 100644 --- a/src/crt0.s +++ b/src/crt0.s @@ -1,111 +1,12 @@ -#include "constants/global.h" .include "constants/gba_constants.inc" .syntax unified - .global Start - - .text - .arm -Start: @ 8000000 - b Init - - .include "asm/rom_header.inc" - -@ 80000C0 - .word 0 - - .global GPIOPortData -GPIOPortData: @ 80000C4 - .2byte 0 - - .global GPIOPortDirection -GPIOPortDirection: @ 80000C6 - .2byte 0 - - .global GPIOPortReadEnable -GPIOPortReadEnable: @ 80000C8 - .2byte 0 - -@ 80000CA - .2byte 0 - -@ 80000CC - .space 0x34 - - .4byte GAME_VERSION - .4byte GAME_LANGUAGE - - .ascii "pokemon emerald version" - .space 9 - - .4byte gMonFrontPicTable - .4byte gMonBackPicTable - .4byte gMonPaletteTable - .4byte gMonShinyPaletteTable - .4byte gMonIconTable - .4byte gMonIconPaletteIndices - .4byte gMonIconPaletteTable - .4byte gSpeciesNames - .4byte gMoveNames - .4byte gDecorations - - .4byte 0x00001270 @ offsetof(struct SaveBlock1, flags) - .4byte 0x0000139c @ offsetof(struct SaveBlock1, vars) - .4byte 0x00000018 @ offsetof(struct SaveBlock2, pokedex) - .4byte 0x00000988 @ offsetof(struct SaveBlock1, seen1) - .4byte 0x00003b24 @ offsetof(struct SaveBlock1, seen2) - .4byte 0x00000046 @ ? - .4byte 0x000008e4 @ ? - .4byte 0x000008ac @ ? - .4byte 0x00000182 @ NATIONAL_DEX_COUNT? - - .byte 0x07, 0x0a, 0x0a, 0x0a, 0x0c, 0x0c, 0x06, 0x0c - .byte 0x06, 0x10, 0x12, 0x0c, 0x0f, 0x0b, 0x01, 0x08 - - .4byte 0x0000000c @ ? - .4byte 0x00000f2c @ sizeof(struct SaveBlock2) - .4byte 0x00003d88 @ sizeof(struct SaveBlock1) - .4byte 0x00000234 @ offsetof(struct SaveBlock1, playerPartyCount) - .4byte 0x00000238 @ offsetof(struct SaveBlock1, playerParty) - .4byte 0x00000009 @ offsetof(struct SaveBlock2, specialSaveWarpFlags) - .4byte 0x0000000a @ offsetof(struct SaveBlock2, playerTrainerId) - .4byte 0x00000000 @ offsetof(struct SaveBlock2, playerName) - .4byte 0x00000008 @ offsetof(struct SaveBlock2, playerGender) - .4byte 0x00000ca8 @ offsetof(struct SaveBlock2, frontier.challengeStatus) - .4byte 0x00000ca8 @ offsetof(struct SaveBlock2, frontier.challengeStatus) - .4byte 0x000031c7 @ offsetof(struct SaveBlock1, externalEventFlags) - .4byte 0x000031b3 @ offsetof(struct SaveBlock1, externalEventData) - .4byte 0x00000000 - - .4byte gBaseStats - .4byte gAbilityNames - .4byte gAbilityDescriptionPointers - .4byte gItems - .4byte gBattleMoves - .4byte gBallSpriteSheets - .4byte gBallSpritePalettes - - .4byte 0x000000a8 @ offsetof(struct SaveBlock2, gcnLinkFlags) - .4byte 0x00000864 @ ? - .4byte 0x0000089b @ ? - - .byte 0x1e, 0x1e, 0x10, 0x40 - - .4byte 0x0000322e @ offsetof(struct SaveBlock1, ? part-way into unk_322C) - .4byte 0x00000498 @ offsetof(struct SaveBlock1, pcItems) - .4byte 0x000031a8 @ offsetof(struct SaveBlock1, giftRibbons) - .4byte 0x000031f8 @ offsetof(struct SaveBlock1, enigmaBerry) - .4byte 0x00000034 @ offsetof(struct SaveBlock1, mapView) - .4byte 0x00000000 - .4byte 0x00000000 - - .arm .align 2, 0 .global Init -Init: @ 8000204 +Init: mov r0, #PSR_IRQ_MODE msr cpsr_cf, r0 ldr sp, sp_irq @@ -133,7 +34,7 @@ sp_irq: .word IWRAM_END - 0x60 .arm .align 2, 0 .global IntrMain -IntrMain: @ 8000248 +IntrMain: mov r3, #REG_BASE add r3, r3, #OFFSET_REG_IE ldr r2, [r3] diff --git a/src/data.c b/src/data.c index e551ddcce6..4b216cfd25 100644 --- a/src/data.c +++ b/src/data.c @@ -302,18 +302,6 @@ const union AnimCmd *const gAnims_MonPic[] = #define SPECIES_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species} #define SPECIES_SHINY_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species + SPECIES_SHINY_TAG} -const bool8 SpeciesHasGenderDifference[NUM_SPECIES] = -{ - [SPECIES_EEVEE] = TRUE, - [SPECIES_COMBEE] = TRUE, - [SPECIES_HIPPOPOTAS] = TRUE, - [SPECIES_HIPPOWDON] = TRUE, - [SPECIES_UNFEZANT] = TRUE, - [SPECIES_FRILLISH] = TRUE, - [SPECIES_JELLICENT] = TRUE, - [SPECIES_PYROAR] = TRUE, -}; - #include "data/pokemon_graphics/front_pic_coordinates.h" #include "data/pokemon_graphics/back_pic_coordinates.h" diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h new file mode 100644 index 0000000000..62f3802a5c --- /dev/null +++ b/src/data/battle_anim.h @@ -0,0 +1,1992 @@ +const struct OamData gOamData_AffineOff_ObjNormal_8x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + + +const struct OamData gOamData_AffineOff_ObjNormal_16x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjNormal_32x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjNormal_64x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjNormal_16x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjNormal_32x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjNormal_32x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjNormal_64x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjNormal_8x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjNormal_8x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x32), + .x = 0, + .size = SPRITE_SIZE(8x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjNormal_16x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x32), + .x = 0, + .size = SPRITE_SIZE(16x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjNormal_32x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x64), + .x = 0, + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_8x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_16x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_32x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_64x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_16x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_32x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_32x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_64x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_8x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_8x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x32), + .x = 0, + .size = SPRITE_SIZE(8x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_16x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x32), + .x = 0, + .size = SPRITE_SIZE(16x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjNormal_32x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x64), + .x = 0, + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_8x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_16x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_32x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_64x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_16x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_32x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_32x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_64x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_8x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_8x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x32), + .x = 0, + .size = SPRITE_SIZE(8x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_16x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x32), + .x = 0, + .size = SPRITE_SIZE(16x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjNormal_32x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x64), + .x = 0, + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_8x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_16x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_32x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_64x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_16x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_32x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_32x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_64x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_8x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_8x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x32), + .x = 0, + .size = SPRITE_SIZE(8x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_16x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x32), + .x = 0, + .size = SPRITE_SIZE(16x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineOff_ObjBlend_32x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x64), + .x = 0, + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_8x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_16x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_32x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_64x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_16x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_32x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_32x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_64x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_8x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_8x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x32), + .x = 0, + .size = SPRITE_SIZE(8x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_16x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x32), + .x = 0, + .size = SPRITE_SIZE(16x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineNormal_ObjBlend_32x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x64), + .x = 0, + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_8x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_16x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_32x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_64x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_16x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_32x8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_32x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_64x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_8x16 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_8x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x32), + .x = 0, + .size = SPRITE_SIZE(8x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_16x32 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x32), + .x = 0, + .size = SPRITE_SIZE(16x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct OamData gOamData_AffineDouble_ObjBlend_32x64 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x64), + .x = 0, + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct CompressedSpriteSheet gBattleAnimPicTable[] = +{ + {gBattleAnimSpriteGfx_Bone, 0x0200, ANIM_TAG_BONE}, + {gBattleAnimSpriteGfx_Spark, 0x0300, ANIM_TAG_SPARK}, + {gBattleAnimSpriteGfx_Pencil, 0x0200, ANIM_TAG_PENCIL}, + {gBattleAnimSpriteGfx_AirWave, 0x0100, ANIM_TAG_AIR_WAVE}, + {gBattleAnimSpriteGfx_Orb, 0x0200, ANIM_TAG_ORB}, + #if B_NEW_SWORD_PARTICLE + {gBattleAnimSpriteGfx_NewSword, 0x0400, ANIM_TAG_SWORD}, + #else + {gBattleAnimSpriteGfx_Sword, 0x0400, ANIM_TAG_SWORD}, + #endif + #if B_NEW_LEECH_SEED_PARTICLE + {gBattleAnimSpriteGfx_NewLeechSeed, 0x0180, ANIM_TAG_SEED}, + #else + {gBattleAnimSpriteGfx_Seed, 0x0180, ANIM_TAG_SEED}, + #endif + {gBattleAnimSpriteGfx_Explosion6, 0x0800, ANIM_TAG_EXPLOSION_6}, + {gBattleAnimSpriteGfx_PinkOrb, 0x0020, ANIM_TAG_PINK_ORB}, + {gBattleAnimSpriteGfx_Gust, 0x0400, ANIM_TAG_GUST}, + {gBattleAnimSpriteGfx_IceCube, 0x1200, ANIM_TAG_ICE_CUBE}, + {gBattleAnimSpriteGfx_Spark2, 0x0180, ANIM_TAG_SPARK_2}, + {gBattleAnimSpriteGfx_Orange, 0x0080, ANIM_TAG_ORANGE}, + {gBattleAnimSpriteGfx_YellowBall, 0x0080, ANIM_TAG_YELLOW_BALL}, + {gBattleAnimSpriteGfx_LockOn, 0x0280, ANIM_TAG_LOCK_ON}, + {gBattleAnimSpriteGfx_TiedBag, 0x0080, ANIM_TAG_TIED_BAG}, + {gBattleAnimSpriteGfx_BlackSmoke, 0x0100, ANIM_TAG_BLACK_SMOKE}, + {gBattleAnimSpriteGfx_BlackBall, 0x0020, ANIM_TAG_BLACK_BALL}, + {gBattleAnimSpriteGfx_Conversion, 0x0080, ANIM_TAG_CONVERSION}, + {gBattleAnimSpriteGfx_Glass, 0x0400, ANIM_TAG_GLASS}, + {gBattleAnimSpriteGfx_HornHit, 0x0200, ANIM_TAG_HORN_HIT}, + {gBattleAnimSpriteGfx_Hit, 0x0A00, ANIM_TAG_HIT}, + {gBattleAnimSpriteGfx_Hit, 0x0A00, ANIM_TAG_HIT_2}, + {gBattleAnimSpriteGfx_BlueShards, 0x0380, ANIM_TAG_BLUE_SHARDS}, + {gBattleAnimSpriteGfx_ClosingEye, 0x0300, ANIM_TAG_CLOSING_EYE}, + {gBattleAnimSpriteGfx_WavingHand, 0x0A00, ANIM_TAG_WAVING_HAND}, + {gBattleAnimSpriteGfx_HitDuplicate, 0x0A00, ANIM_TAG_HIT_DUPLICATE}, + {gBattleAnimSpriteGfx_Leer, 0x0A00, ANIM_TAG_LEER}, + {gBattleAnimSpriteGfx_BlueBurst, 0x0A00, ANIM_TAG_BLUE_BURST}, + #if B_NEW_EMBER_PARTICLES + {gBattleAnimSpriteGfx_NewEmbers, 0x0A00, ANIM_TAG_SMALL_EMBER}, + #else + {gBattleAnimSpriteGfx_SmallEmber, 0x0A00, ANIM_TAG_SMALL_EMBER}, + #endif + {gBattleAnimSpriteGfx_GraySmoke, 0x0A00, ANIM_TAG_GRAY_SMOKE}, + {gBattleAnimSpriteGfx_BlueStar, 0x0E00, ANIM_TAG_BLUE_STAR}, + {gBattleAnimSpriteGfx_BubbleBurst, 0x0380, ANIM_TAG_BUBBLE_BURST}, + {gBattleAnimSpriteGfx_Fire, 0x1000, ANIM_TAG_FIRE}, + {gBattleAnimSpriteGfx_SpinningFire, 0x0800, ANIM_TAG_SPINNING_FIRE}, + {gBattleAnimSpriteGfx_FirePlume, 0x0A00, ANIM_TAG_FIRE_PLUME}, + {gBattleAnimSpriteGfx_Lightning2, 0x0800, ANIM_TAG_LIGHTNING_2}, + {gBattleAnimSpriteGfx_Lightning, 0x0A00, ANIM_TAG_LIGHTNING}, + {gBattleAnimSpriteGfx_ClawSlash2, 0x0A00, ANIM_TAG_CLAW_SLASH_2}, + {gBattleAnimSpriteGfx_ClawSlash, 0x0A00, ANIM_TAG_CLAW_SLASH}, + {gBattleAnimSpriteGfx_Scratch3, 0x0A00, ANIM_TAG_SCRATCH_3}, + {gBattleAnimSpriteGfx_Scratch2, 0x0A00, ANIM_TAG_SCRATCH_2}, + {gBattleAnimSpriteGfx_BubbleBurst2, 0x0A00, ANIM_TAG_BUBBLE_BURST_2}, + {gBattleAnimSpriteGfx_IceChunk, 0x0A00, ANIM_TAG_ICE_CHUNK}, + {gBattleAnimSpriteGfx_Glass2, 0x0A00, ANIM_TAG_GLASS_2}, + {gBattleAnimSpriteGfx_PinkHeart2, 0x0A00, ANIM_TAG_PINK_HEART_2}, + {gBattleAnimSpriteGfx_SapDrip, 0x1000, ANIM_TAG_SAP_DRIP}, + {gBattleAnimSpriteGfx_SapDrip, 0x1000, ANIM_TAG_SAP_DRIP_2}, + {gBattleAnimSpriteGfx_Sparkle1, 0x1000, ANIM_TAG_SPARKLE_1}, + {gBattleAnimSpriteGfx_Sparkle1, 0x1000, ANIM_TAG_SPARKLE_2}, + {gBattleAnimSpriteGfx_HumanoidFoot, 0x0200, ANIM_TAG_HUMANOID_FOOT}, + {gBattleAnimSpriteGfx_MonsterFoot, 0x0200, ANIM_TAG_MONSTER_FOOT}, + {gBattleAnimSpriteGfx_HumanoidHand, 0x0200, ANIM_TAG_HUMANOID_HAND}, + {gBattleAnimSpriteGfx_NoiseLine, 0x0800, ANIM_TAG_NOISE_LINE}, + {gBattleAnimSpriteGfx_YellowUnk, 0x0080, ANIM_TAG_YELLOW_UNK}, + {gBattleAnimSpriteGfx_RedFist, 0x0200, ANIM_TAG_RED_FIST}, + {gBattleAnimSpriteGfx_SlamHit, 0x1000, ANIM_TAG_SLAM_HIT}, + {gBattleAnimSpriteGfx_Ring, 0x0180, ANIM_TAG_RING}, + #if NEW_ROCKS_PARTICLE + {gBattleAnimSpriteGfx_NewRocks, 0x0C00, ANIM_TAG_ROCKS}, + #else + {gBattleAnimSpriteGfx_Rocks, 0x0C00, ANIM_TAG_ROCKS}, + #endif + {gBattleAnimSpriteGfx_Z, 0x0100, ANIM_TAG_Z}, + {gBattleAnimSpriteGfx_YellowUnk2, 0x0040, ANIM_TAG_YELLOW_UNK_2}, + {gBattleAnimSpriteGfx_AirSlash, 0x0180, ANIM_TAG_AIR_SLASH}, + {gBattleAnimSpriteGfx_SpinningGreenOrbs, 0x0800, ANIM_TAG_SPINNING_GREEN_ORBS}, + #if B_NEW_LEAF_PARTICLE + {gBattleAnimSpriteGfx_NewLeaf, 0x0480, ANIM_TAG_LEAF}, + #else + {gBattleAnimSpriteGfx_Leaf, 0x0480, ANIM_TAG_LEAF}, + #endif + {gBattleAnimSpriteGfx_Finger, 0x0200, ANIM_TAG_FINGER}, + {gBattleAnimSpriteGfx_PoisonPowder, 0x0200, ANIM_TAG_POISON_POWDER}, + {gBattleAnimSpriteGfx_BrownTriangle, 0x0100, ANIM_TAG_BROWN_TRIANGLE}, + {gBattleAnimSpriteGfx_PoisonPowder, 0x0200, ANIM_TAG_SLEEP_POWDER}, + {gBattleAnimSpriteGfx_PoisonPowder, 0x0200, ANIM_TAG_STUN_SPORE}, + {gBattleAnimSpriteGfx_PoisonPowder, 0x0200, ANIM_TAG_POWDER}, + {gBattleAnimSpriteGfx_Sparkle3, 0x0200, ANIM_TAG_SPARKLE_3}, + {gBattleAnimSpriteGfx_Sparkle4, 0x0A00, ANIM_TAG_SPARKLE_4}, + {gBattleAnimSpriteGfx_MusicNotes, 0x0300, ANIM_TAG_MUSIC_NOTES}, + {gBattleAnimSpriteGfx_Duck, 0x0180, ANIM_TAG_DUCK}, + {gBattleAnimSpriteGfx_MudSand, 0x00A0, ANIM_TAG_MUD_SAND}, + {gBattleAnimSpriteGfx_Alert, 0x0700, ANIM_TAG_ALERT}, + {gBattleAnimSpriteGfx_BlueFlames, 0x0400, ANIM_TAG_BLUE_FLAMES}, + {gBattleAnimSpriteGfx_BlueFlames2, 0x0200, ANIM_TAG_BLUE_FLAMES_2}, + {gBattleAnimSpriteGfx_Shock4, 0x0300, ANIM_TAG_SHOCK_4}, + {gBattleAnimSpriteGfx_Shock, 0x0C00, ANIM_TAG_SHOCK}, + {gBattleAnimSpriteGfx_Bell2, 0x0A00, ANIM_TAG_BELL_2}, + {gBattleAnimSpriteGfx_PinkGlove, 0x0080, ANIM_TAG_PINK_GLOVE}, + {gBattleAnimSpriteGfx_BlueLines, 0x0040, ANIM_TAG_BLUE_LINES}, + {gBattleAnimSpriteGfx_Impact3, 0x0E00, ANIM_TAG_IMPACT_3}, + {gBattleAnimSpriteGfx_Impact2, 0x0E00, ANIM_TAG_IMPACT_2}, + {gBattleAnimSpriteGfx_Reticle, 0x0280, ANIM_TAG_RETICLE}, + {gBattleAnimSpriteGfx_Breath, 0x0200, ANIM_TAG_BREATH}, + {gBattleAnimSpriteGfx_Anger, 0x0080, ANIM_TAG_ANGER}, + {gBattleAnimSpriteGfx_Snowball, 0x00C0, ANIM_TAG_SNOWBALL}, + {gBattleAnimSpriteGfx_Vine, 0x0A00, ANIM_TAG_VINE}, + {gBattleAnimSpriteGfx_Sword2, 0x0200, ANIM_TAG_SWORD_2}, + {gBattleAnimSpriteGfx_Clapping, 0x0180, ANIM_TAG_CLAPPING}, + {gBattleAnimSpriteGfx_RedTube, 0x0080, ANIM_TAG_RED_TUBE}, + {gBattleAnimSpriteGfx_Amnesia, 0x1000, ANIM_TAG_AMNESIA}, + {gBattleAnimSpriteGfx_String2, 0x0A00, ANIM_TAG_STRING_2}, + {gBattleAnimSpriteGfx_Pencil2, 0x0180, ANIM_TAG_PENCIL_2}, + {gBattleAnimSpriteGfx_Petal, 0x0380, ANIM_TAG_PETAL}, + {gBattleAnimSpriteGfx_BentSpoon, 0x0C00, ANIM_TAG_BENT_SPOON}, + {gBattleAnimSpriteGfx_Web, 0x0200, ANIM_TAG_WEB}, + {gBattleAnimSpriteGfx_MilkBottle, 0x0200, ANIM_TAG_MILK_BOTTLE}, + {gBattleAnimSpriteGfx_Coin, 0x0200, ANIM_TAG_COIN}, + {gBattleAnimSpriteGfx_CrackedEgg, 0x0200, ANIM_TAG_CRACKED_EGG}, + {gBattleAnimSpriteGfx_HatchedEgg, 0x0400, ANIM_TAG_HATCHED_EGG}, + {gBattleAnimSpriteGfx_FreshEgg, 0x0080, ANIM_TAG_FRESH_EGG}, + {gBattleAnimSpriteGfx_Fangs, 0x0400, ANIM_TAG_FANGS}, + {gBattleAnimSpriteGfx_Explosion2, 0x0c00, ANIM_TAG_EXPLOSION_2}, + {gBattleAnimSpriteGfx_Explosion3, 0x0200, ANIM_TAG_EXPLOSION_3}, + {gBattleAnimSpriteGfx_WaterDroplet, 0x1000, ANIM_TAG_WATER_DROPLET}, + {gBattleAnimSpriteGfx_WaterDroplet2, 0x0a00, ANIM_TAG_WATER_DROPLET_2}, + {gBattleAnimSpriteGfx_Seed2, 0x0020, ANIM_TAG_SEED_2}, + {gBattleAnimSpriteGfx_Sprout, 0x0e00, ANIM_TAG_SPROUT}, + {gBattleAnimSpriteGfx_RedWand, 0x0080, ANIM_TAG_RED_WAND}, + {gBattleAnimSpriteGfx_PurpleGreenUnk, 0x0a00, ANIM_TAG_PURPLE_GREEN_UNK}, + {gBattleAnimSpriteGfx_WaterColumn, 0x0400, ANIM_TAG_WATER_COLUMN}, + {gBattleAnimSpriteGfx_MudUnk, 0x0200, ANIM_TAG_MUD_UNK}, + {gBattleAnimSpriteGfx_RainDrops, 0x0700, ANIM_TAG_RAIN_DROPS}, + {gBattleAnimSpriteGfx_FurySwipes, 0x0800, ANIM_TAG_FURY_SWIPES}, + {gBattleAnimSpriteGfx_Vine2, 0x0a00, ANIM_TAG_VINE_2}, + {gBattleAnimSpriteGfx_Teeth, 0x0600, ANIM_TAG_TEETH}, + {gBattleAnimSpriteGfx_Bone2, 0x0800, ANIM_TAG_BONE_2}, + {gBattleAnimSpriteGfx_WhiteBag, 0x0200, ANIM_TAG_WHITE_BAG}, + {gBattleAnimSpriteGfx_Unknown, 0x0040, ANIM_TAG_UNKNOWN}, + {gBattleAnimSpriteGfx_PurpleCoral, 0x0180, ANIM_TAG_PURPLE_CORAL}, + {gBattleAnimSpriteGfx_PurpleDroplet, 0x0600, ANIM_TAG_PURPLE_DROPLET}, + {gBattleAnimSpriteGfx_Shock2, 0x0600, ANIM_TAG_SHOCK_2}, + {gBattleAnimSpriteGfx_ClosingEye2, 0x0200, ANIM_TAG_CLOSING_EYE_2}, + {gBattleAnimSpriteGfx_MetalBall, 0x0080, ANIM_TAG_METAL_BALL}, + #if NEW_SUBSTITUTE_PARTICLE + {gBattleAnimSpriteGfx_NewSubstituteFront, 0x0200, ANIM_TAG_MONSTER_DOLL}, + #else + {gBattleAnimSpriteGfx_MonsterDoll, 0x0200, ANIM_TAG_MONSTER_DOLL}, + #endif + {gBattleAnimSpriteGfx_Whirlwind, 0x0800, ANIM_TAG_WHIRLWIND}, + {gBattleAnimSpriteGfx_Whirlwind2, 0x0080, ANIM_TAG_WHIRLWIND_2}, + {gBattleAnimSpriteGfx_Explosion4, 0x0a00, ANIM_TAG_EXPLOSION_4}, + {gBattleAnimSpriteGfx_Explosion5, 0x0280, ANIM_TAG_EXPLOSION_5}, + {gBattleAnimSpriteGfx_Tongue, 0x0280, ANIM_TAG_TONGUE}, + {gBattleAnimSpriteGfx_Smoke, 0x0100, ANIM_TAG_SMOKE}, + {gBattleAnimSpriteGfx_Smoke2, 0x0200, ANIM_TAG_SMOKE_2}, + {gBattleAnimSpriteGfx_Impact, 0x0200, ANIM_TAG_IMPACT}, + {gBattleAnimSpriteGfx_CircleImpact, 0x0020, ANIM_TAG_CIRCLE_IMPACT}, + {gBattleAnimSpriteGfx_Scratch, 0x0a00, ANIM_TAG_SCRATCH}, + {gBattleAnimSpriteGfx_Cut, 0x0800, ANIM_TAG_CUT}, + #if B_NEW_TEETH_PARTICLE + {gBattleAnimSpriteGfx_NewTeeth, 0x0800, ANIM_TAG_SHARP_TEETH}, + #else + {gBattleAnimSpriteGfx_SharpTeeth, 0x0800, ANIM_TAG_SHARP_TEETH}, + #endif + {gBattleAnimSpriteGfx_RainbowRings, 0x00c0, ANIM_TAG_RAINBOW_RINGS}, + {gBattleAnimSpriteGfx_IceCrystals, 0x01c0, ANIM_TAG_ICE_CRYSTALS}, + {gBattleAnimSpriteGfx_IceSpikes, 0x0100, ANIM_TAG_ICE_SPIKES}, + #if B_NEW_HANDS_FEET_PARTICLE + {gBattleAnimSpriteGfx_NewHandsAndFeet, 0x0800, ANIM_TAG_HANDS_AND_FEET}, + #else + {gBattleAnimSpriteGfx_HandsAndFeet, 0x0800, ANIM_TAG_HANDS_AND_FEET}, + #endif + {gBattleAnimSpriteGfx_MistCloud, 0x0200, ANIM_TAG_MIST_CLOUD}, + {gBattleAnimSpriteGfx_Clamp, 0x0800, ANIM_TAG_CLAMP}, + {gBattleAnimSpriteGfx_Bubble, 0x0180, ANIM_TAG_BUBBLE}, + {gBattleAnimSpriteGfx_Orbs, 0x0180, ANIM_TAG_ORBS}, + {gBattleAnimSpriteGfx_WaterImpact, 0x0200, ANIM_TAG_WATER_IMPACT}, + {gBattleAnimSpriteGfx_WaterOrb, 0x0200, ANIM_TAG_WATER_ORB}, + {gBattleAnimSpriteGfx_PoisonBubble, 0x0180, ANIM_TAG_POISON_BUBBLE}, + {gBattleAnimSpriteGfx_ToxicBubble, 0x0400, ANIM_TAG_TOXIC_BUBBLE}, + #if B_NEW_SPIKES_PARTICLE + {gBattleAnimSpriteGfx_NewSpikes, 0x0080, ANIM_TAG_SPIKES}, + #else + {gBattleAnimSpriteGfx_Spikes, 0x0080, ANIM_TAG_SPIKES}, + #endif + {gBattleAnimSpriteGfx_HornHit2, 0x0100, ANIM_TAG_HORN_HIT_2}, + {gBattleAnimSpriteGfx_AirWave2, 0x0100, ANIM_TAG_AIR_WAVE_2}, + {gBattleAnimSpriteGfx_SmallBubbles, 0x0140, ANIM_TAG_SMALL_BUBBLES}, + #if B_NEW_FLY_BUBBLE_PARTICLE + {gBattleAnimSpriteGfx_NewFly, 0x0800, ANIM_TAG_ROUND_SHADOW}, + #else + {gBattleAnimSpriteGfx_RoundShadow, 0x0800, ANIM_TAG_ROUND_SHADOW}, + #endif + {gBattleAnimSpriteGfx_Sunlight, 0x0200, ANIM_TAG_SUNLIGHT}, + {gBattleAnimSpriteGfx_Spore, 0x0100, ANIM_TAG_SPORE}, + {gBattleAnimSpriteGfx_Flower, 0x00a0, ANIM_TAG_FLOWER}, + {gBattleAnimSpriteGfx_RazorLeaf, 0x0100, ANIM_TAG_RAZOR_LEAF}, + {gBattleAnimSpriteGfx_Needle, 0x0080, ANIM_TAG_NEEDLE}, + {gBattleAnimSpriteGfx_WhirlwindLines, 0x0300, ANIM_TAG_WHIRLWIND_LINES}, + {gBattleAnimSpriteGfx_GoldRing, 0x0100, ANIM_TAG_GOLD_RING}, + {gBattleAnimSpriteGfx_GoldRing, 0x0100, ANIM_TAG_PURPLE_RING}, + {gBattleAnimSpriteGfx_GoldRing, 0x0100, ANIM_TAG_BLUE_RING}, + {gBattleAnimSpriteGfx_GreenLightWall, 0x0800, ANIM_TAG_GREEN_LIGHT_WALL}, + {gBattleAnimSpriteGfx_GreenLightWall, 0x0800, ANIM_TAG_BLUE_LIGHT_WALL}, + {gBattleAnimSpriteGfx_GreenLightWall, 0x0800, ANIM_TAG_RED_LIGHT_WALL}, + {gBattleAnimSpriteGfx_GreenLightWall, 0x0800, ANIM_TAG_GRAY_LIGHT_WALL}, + {gBattleAnimSpriteGfx_GreenLightWall, 0x0800, ANIM_TAG_ORANGE_LIGHT_WALL}, + {gBattleAnimSpriteGfx_BlackBall2, 0x0080, ANIM_TAG_BLACK_BALL_2}, + {gBattleAnimSpriteGfx_MistCloud, 0x0200, ANIM_TAG_PURPLE_GAS_CLOUD}, + {gBattleAnimSpriteGfx_SparkH, 0x0200, ANIM_TAG_SPARK_H}, + {gBattleAnimSpriteGfx_YellowStar, 0x0200, ANIM_TAG_YELLOW_STAR}, + {gBattleAnimSpriteGfx_LargeFreshEgg, 0x0080, ANIM_TAG_LARGE_FRESH_EGG}, + {gBattleAnimSpriteGfx_ShadowBall, 0x0200, ANIM_TAG_SHADOW_BALL}, + {gBattleAnimSpriteGfx_Lick, 0x0500, ANIM_TAG_LICK}, + {gBattleAnimSpriteGfx_VoidLines, 0x0800, ANIM_TAG_VOID_LINES}, + {gBattleAnimSpriteGfx_String, 0x0400, ANIM_TAG_STRING}, + {gBattleAnimSpriteGfx_WebThread, 0x0020, ANIM_TAG_WEB_THREAD}, + {gBattleAnimSpriteGfx_SpiderWeb, 0x0800, ANIM_TAG_SPIDER_WEB}, + {gBattleAnimSpriteGfx_Lightbulb, 0x0100, ANIM_TAG_LIGHTBULB}, + {gBattleAnimSpriteGfx_Slash, 0x0800, ANIM_TAG_SLASH}, + {gBattleAnimSpriteGfx_FocusEnergy, 0x0400, ANIM_TAG_FOCUS_ENERGY}, + {gBattleAnimSpriteGfx_SphereToCube, 0x0a00, ANIM_TAG_SPHERE_TO_CUBE}, + {gBattleAnimSpriteGfx_Tendrils, 0x1000, ANIM_TAG_TENDRILS}, + #if B_NEW_MEAN_LOOK_PARTICLE + {gBattleAnimSpriteGfx_NewEye, 0x0800, ANIM_TAG_EYE}, + #else + {gBattleAnimSpriteGfx_Eye, 0x0800, ANIM_TAG_EYE}, + #endif + {gBattleAnimSpriteGfx_WhiteShadow, 0x0400, ANIM_TAG_WHITE_SHADOW}, + {gBattleAnimSpriteGfx_TealAlert, 0x0200, ANIM_TAG_TEAL_ALERT}, + {gBattleAnimSpriteGfx_OpeningEye, 0x0800, ANIM_TAG_OPENING_EYE}, + {gBattleAnimSpriteGfx_RoundWhiteHalo, 0x0800, ANIM_TAG_ROUND_WHITE_HALO}, + {gBattleAnimSpriteGfx_FangAttack, 0x0800, ANIM_TAG_FANG_ATTACK}, + {gBattleAnimSpriteGfx_PurpleHandOutline, 0x0200, ANIM_TAG_PURPLE_HAND_OUTLINE}, + {gBattleAnimSpriteGfx_Moon, 0x0800, ANIM_TAG_MOON}, + {gBattleAnimSpriteGfx_GreenSparkle, 0x0200, ANIM_TAG_GREEN_SPARKLE}, + {gBattleAnimSpriteGfx_Spiral, 0x0800, ANIM_TAG_SPIRAL}, + {gBattleAnimSpriteGfx_SnoreZ, 0x0200, ANIM_TAG_SNORE_Z}, + {gBattleAnimSpriteGfx_Explosion, 0x0800, ANIM_TAG_EXPLOSION}, + #if B_NEW_CURSE_NAIL_PARTICLE + {gBattleAnimSpriteGfx_NewNail, 0x0400, ANIM_TAG_NAIL}, + #else + {gBattleAnimSpriteGfx_Nail, 0x0400, ANIM_TAG_NAIL}, + #endif + {gBattleAnimSpriteGfx_GhostlySpirit, 0x0200, ANIM_TAG_GHOSTLY_SPIRIT}, + {gBattleAnimSpriteGfx_WarmRock, 0x0a80, ANIM_TAG_WARM_ROCK}, + {gBattleAnimSpriteGfx_BreakingEgg, 0x0600, ANIM_TAG_BREAKING_EGG}, + {gBattleAnimSpriteGfx_ThinRing, 0x0800, ANIM_TAG_THIN_RING}, + {gBattleAnimSpriteGfx_PunchImpact, 0x0200, ANIM_TAG_PUNCH_IMPACT}, + {gBattleAnimSpriteGfx_Bell, 0x0600, ANIM_TAG_BELL}, + {gBattleAnimSpriteGfx_MusicNotes2, 0x0800, ANIM_TAG_MUSIC_NOTES_2}, + {gBattleAnimSpriteGfx_SpeedDust, 0x0180, ANIM_TAG_SPEED_DUST}, + {gBattleAnimSpriteGfx_TornMetal, 0x0800, ANIM_TAG_TORN_METAL}, + {gBattleAnimSpriteGfx_ThoughtBubble, 0x0800, ANIM_TAG_THOUGHT_BUBBLE}, + {gBattleAnimSpriteGfx_MagentaHeart, 0x0080, ANIM_TAG_MAGENTA_HEART}, + {gBattleAnimSpriteGfx_ElectricOrbs, 0x0080, ANIM_TAG_ELECTRIC_ORBS}, + {gBattleAnimSpriteGfx_CircleOfLight, 0x0800, ANIM_TAG_CIRCLE_OF_LIGHT}, + {gBattleAnimSpriteGfx_Electricity, 0x0800, ANIM_TAG_ELECTRICITY}, + {gBattleAnimSpriteGfx_Finger2, 0x0600, ANIM_TAG_FINGER_2}, + {gBattleAnimSpriteGfx_MovementWaves, 0x0600, ANIM_TAG_MOVEMENT_WAVES}, + {gBattleAnimSpriteGfx_MagentaHeart, 0x0080, ANIM_TAG_RED_HEART}, + {gBattleAnimSpriteGfx_RedOrb, 0x0080, ANIM_TAG_RED_ORB}, + {gBattleAnimSpriteGfx_EyeSparkle, 0x0180, ANIM_TAG_EYE_SPARKLE}, + {gBattleAnimSpriteGfx_MagentaHeart, 0x0080, ANIM_TAG_PINK_HEART}, + {gBattleAnimSpriteGfx_Angel, 0x0200, ANIM_TAG_ANGEL}, + {gBattleAnimSpriteGfx_Devil, 0x0400, ANIM_TAG_DEVIL}, + {gBattleAnimSpriteGfx_Swipe, 0x0a00, ANIM_TAG_SWIPE}, + {gBattleAnimSpriteGfx_Roots, 0x0800, ANIM_TAG_ROOTS}, + {gBattleAnimSpriteGfx_ItemBag, 0x0200, ANIM_TAG_ITEM_BAG}, + {gBattleAnimSpriteGfx_JaggedMusicNote, 0x0400, ANIM_TAG_JAGGED_MUSIC_NOTE}, + #if B_NEW_BATON_PASS_BALL_PARTICLE + {gBattleAnimSpriteGfx_NewPokeball, 0x0080, ANIM_TAG_POKEBALL}, + #else + {gBattleAnimSpriteGfx_Pokeball, 0x0080, ANIM_TAG_POKEBALL}, + #endif + {gBattleAnimSpriteGfx_Spotlight, 0x0800, ANIM_TAG_SPOTLIGHT}, + {gBattleAnimSpriteGfx_LetterZ, 0x0200, ANIM_TAG_LETTER_Z}, + {gBattleAnimSpriteGfx_RapidSpin, 0x0300, ANIM_TAG_RAPID_SPIN}, + {gBattleAnimSpriteGfx_TriAttackTriangle, 0x0800, ANIM_TAG_TRI_ATTACK_TRIANGLE}, + {gBattleAnimSpriteGfx_WispOrb, 0x0380, ANIM_TAG_WISP_ORB}, + {gBattleAnimSpriteGfx_WispFire, 0x0800, ANIM_TAG_WISP_FIRE}, + {gBattleAnimSpriteGfx_GoldStars, 0x00c0, ANIM_TAG_GOLD_STARS}, + {gBattleAnimSpriteGfx_EclipsingOrb, 0x0800, ANIM_TAG_ECLIPSING_ORB}, + {gBattleAnimSpriteGfx_GrayOrb, 0x0060, ANIM_TAG_GRAY_ORB}, + {gBattleAnimSpriteGfx_GrayOrb, 0x0060, ANIM_TAG_BLUE_ORB}, + {gBattleAnimSpriteGfx_GrayOrb, 0x0060, ANIM_TAG_RED_ORB_2}, + {gBattleAnimSpriteGfx_PinkPetal, 0x0080, ANIM_TAG_PINK_PETAL}, + {gBattleAnimSpriteGfx_PainSplit, 0x0180, ANIM_TAG_PAIN_SPLIT}, + {gBattleAnimSpriteGfx_Confetti, 0x0180, ANIM_TAG_CONFETTI}, + #if B_NEW_MORNING_SUN_STAR_PARTICLE + {gBattleAnimSpriteGfx_NewGreenStar, 0x0200, ANIM_TAG_GREEN_STAR}, + #else + {gBattleAnimSpriteGfx_GreenStar, 0x0200, ANIM_TAG_GREEN_STAR}, + #endif + {gBattleAnimSpriteGfx_PinkCloud, 0x0200, ANIM_TAG_PINK_CLOUD}, + {gBattleAnimSpriteGfx_SweatDrop, 0x0020, ANIM_TAG_SWEAT_DROP}, + {gBattleAnimSpriteGfx_GuardRing, 0x0400, ANIM_TAG_GUARD_RING}, + {gBattleAnimSpriteGfx_PurpleScratch, 0x0600, ANIM_TAG_PURPLE_SCRATCH}, + {gBattleAnimSpriteGfx_PurpleSwipe, 0x1000, ANIM_TAG_PURPLE_SWIPE}, + {gBattleAnimSpriteGfx_TagHand, 0x0400, ANIM_TAG_TAG_HAND}, + {gBattleAnimSpriteGfx_SmallRedEye, 0x0020, ANIM_TAG_SMALL_RED_EYE}, + {gBattleAnimSpriteGfx_HollowOrb, 0x0080, ANIM_TAG_HOLLOW_ORB}, + {gBattleAnimSpriteGfx_XSign, 0x0800, ANIM_TAG_X_SIGN}, + {gBattleAnimSpriteGfx_BluegreenOrb, 0x0080, ANIM_TAG_BLUEGREEN_ORB}, + {gBattleAnimSpriteGfx_PawPrint, 0x0200, ANIM_TAG_PAW_PRINT}, + {gBattleAnimSpriteGfx_PurpleFlame, 0x0400, ANIM_TAG_PURPLE_FLAME}, + {gBattleAnimSpriteGfx_RedBall, 0x0200, ANIM_TAG_RED_BALL}, + {gBattleAnimSpriteGfx_SmellingsaltEffect, 0x0200, ANIM_TAG_SMELLINGSALT_EFFECT}, + {gBattleAnimSpriteGfx_Meteor, 0x0800, ANIM_TAG_METEOR}, + {gBattleAnimSpriteGfx_FlatRock, 0x0280, ANIM_TAG_FLAT_ROCK}, + {gBattleAnimSpriteGfx_MagnifyingGlass, 0x0200, ANIM_TAG_MAGNIFYING_GLASS}, + {gBattleAnimSpriteGfx_WaterOrb, 0x0200, ANIM_TAG_BROWN_ORB}, + {gBattleAnimSpriteGfx_MetalSoundWaves, 0x0400, ANIM_TAG_METAL_SOUND_WAVES}, + {gBattleAnimSpriteGfx_FlyingDirt, 0x0200, ANIM_TAG_FLYING_DIRT}, + {gBattleAnimSpriteGfx_IcicleSpear, 0x0200, ANIM_TAG_ICICLE_SPEAR}, + {gBattleAnimSpriteGfx_Hail, 0x0080, ANIM_TAG_HAIL}, + {gBattleAnimSpriteGfx_GlowyRedOrb, 0x0020, ANIM_TAG_GLOWY_RED_ORB}, + {gBattleAnimSpriteGfx_GlowyRedOrb, 0x0020, ANIM_TAG_GLOWY_GREEN_ORB}, + {gBattleAnimSpriteGfx_GreenSpike, 0x0080, ANIM_TAG_GREEN_SPIKE}, + {gBattleAnimSpriteGfx_CircleOfLight, 0x0800, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT}, + {gBattleAnimSpriteGfx_GlowyRedOrb, 0x0020, ANIM_TAG_GLOWY_BLUE_ORB}, + {gBattleAnimSpriteGfx_Pokeblock, 0x0080, ANIM_TAG_POKEBLOCK}, + {gBattleAnimSpriteGfx_WhiteFeather, 0x0400, ANIM_TAG_WHITE_FEATHER}, + {gBattleAnimSpriteGfx_Sparkle6, 0x0080, ANIM_TAG_SPARKLE_6}, + {gBattleAnimSpriteGfx_Splash, 0x0800, ANIM_TAG_SPLASH}, + {gBattleAnimSpriteGfx_SweatBead, 0x0020, ANIM_TAG_SWEAT_BEAD}, + {gBattleAnimSpriteGfx_Gem1, 0x0800, ANIM_TAG_GEM_1}, + {gBattleAnimSpriteGfx_Gem2, 0x0800, ANIM_TAG_GEM_2}, + {gBattleAnimSpriteGfx_Gem3, 0x0800, ANIM_TAG_GEM_3}, + {gBattleAnimSpriteGfx_SlamHit2, 0x1000, ANIM_TAG_SLAM_HIT_2}, + {gBattleAnimSpriteGfx_Recycle, 0x0800, ANIM_TAG_RECYCLE}, + {gBattleAnimSpriteGfx_RedParticles, 0x00a0, ANIM_TAG_RED_PARTICLES}, + {gBattleAnimSpriteGfx_Protect, 0x0800, ANIM_TAG_PROTECT}, + {gBattleAnimSpriteGfx_DirtMound, 0x0200, ANIM_TAG_DIRT_MOUND}, + {gBattleAnimSpriteGfx_Shock3, 0x0600, ANIM_TAG_SHOCK_3}, + {gBattleAnimSpriteGfx_WeatherBall, 0x0200, ANIM_TAG_WEATHER_BALL}, + {gBattleAnimSpriteGfx_Bird, 0x0800, ANIM_TAG_BIRD}, + {gBattleAnimSpriteGfx_CrossImpact, 0x0200, ANIM_TAG_CROSS_IMPACT}, + {gBattleAnimSpriteGfx_Slash, 0x0800, ANIM_TAG_SLASH_2}, + {gBattleAnimSpriteGfx_SlamHit, 0x1000, ANIM_TAG_WHIP_HIT}, + {gBattleAnimSpriteGfx_GoldRing, 0x0100, ANIM_TAG_BLUE_RING_2}, + {gBattleAnimSpriteGfx_WhiteStreak, 0x0200, ANIM_TAG_WHITE_STREAK}, + {gBattleAnimSpriteGfx_PurpleJab, 0x0100, ANIM_TAG_PURPLE_JAB}, + {gBattleAnimSpriteGfx_Spikes, 0x0080, ANIM_TAG_TOXIC_SPIKES}, + {gBattleAnimSpriteGfx_EnergyBall, 0x0200, ANIM_TAG_ENERGY_BALL}, + {gBattleAnimSpriteGfx_SeedBrown, 0x0080, ANIM_TAG_SEED_BROWN}, + {gBattleAnimSpriteGfx_Feint, 0x0800, ANIM_TAG_FEINT}, + {gBattleAnimSpriteGfx_MegaStone, 0x800, ANIM_TAG_MEGA_STONE}, + {gBattleAnimSpriteGfx_MegaSymbol, 0x0200, ANIM_TAG_MEGA_SYMBOL}, + {gBattleAnimSpriteGfx_MegaParticles, 0x0180, ANIM_TAG_MEGA_PARTICLES}, + {gBattleAnimSpriteGfx_TrumpCard, 0x0180, ANIM_TAG_TRUMP_CARD}, + {gBattleAnimSpriteGfx_TrumpCardParticles, 0x0060, ANIM_TAG_TRUMP_CARD_PARTICLES}, + {gBattleAnimSpriteGfx_Accupressure, 0x0200, ANIM_TAG_ACCUPRESSURE}, + {gBattleAnimSpriteGfx_WringOut, 0x0200, ANIM_TAG_WRING_OUT}, + {gBattleAnimSpriteGfx_ColoredOrbs, 0x0300, ANIM_TAG_COLORED_ORBS}, + {gBattleAnimSpriteGfx_WorrySeed, 0x0080, ANIM_TAG_WORRY_SEED}, + {gBattleAnimSpriteGfx_SmallCloud, 0x0080, ANIM_TAG_SMALL_CLOUD}, + {gBattleAnimSpriteGfx_AttackOrder, 0x0480, ANIM_TAG_ATTACK_ORDER}, + {gBattleAnimSpriteGfx_DragonPulse, 0x0100, ANIM_TAG_DRAGON_PULSE}, + {gBattleAnimSpriteGfx_WoodHammer, 0x0C00, ANIM_TAG_WOOD_HAMMER}, + {gBattleAnimSpriteGfx_PsychoCut, 0x0200, ANIM_TAG_PSYCHO_CUT}, + {gBattleAnimSpriteGfx_PowerGem, 0x0080, ANIM_TAG_POWER_GEM}, + {gBattleAnimSpriteGfx_StoneEdge, 0x0A00, ANIM_TAG_STONE_EDGE}, + {gBattleAnimSpriteGfx_StealthRock, 0x0080, ANIM_TAG_STEALTH_ROCK}, + {gBattleAnimSpriteGfx_PoisonJab, 0x0080, ANIM_TAG_POISON_JAB}, + {gBattleAnimSpriteGfx_PoisonBubble, 0x0180, ANIM_TAG_GREEN_POISON_BUBBLE}, + {gBattleAnimSpriteGfx_FlashCannonBall, 0x200, ANIM_TAG_FLASH_CANNON_BALL}, + {gBattleAnimSpriteGfx_WaterGun, 0x180, ANIM_TAG_WATER_GUN}, + {gBattleAnimSpriteGfx_Punishment, 0xa00, ANIM_TAG_PUNISHMENT_BLADES}, + {gBattleAnimSpriteGfx_QuickGuard, 0x200, ANIM_TAG_QUICK_GUARD_HAND}, + {gBattleAnimSpriteGfx_ShellRight, 0x800, ANIM_TAG_SHELL_RIGHT}, + {gBattleAnimSpriteGfx_ShellLeft, 0x800, ANIM_TAG_SHELL_LEFT}, + {gBattleAnimSpriteGfx_RazorShell, 0x200, ANIM_TAG_RAZOR_SHELL}, + {gBattleAnimSpriteGfx_HydroPump, 0x200, ANIM_TAG_HYDRO_PUMP}, + {gBattleAnimSpriteGfx_Brine, 0xc00, ANIM_TAG_BRINE}, + {gBattleAnimSpriteGfx_Gear, 0x200, ANIM_TAG_GEAR}, + {gBattleAnimSpriteGfx_AssuranceHand, 0x200, ANIM_TAG_ASSURANCE_HAND}, + {gBattleAnimSpriteGfx_AcupressureFinger, 0x200, ANIM_TAG_ACUPRESSURE_FINGER}, + {gBattleAnimSpriteGfx_Fishies, 0x480, ANIM_TAG_WISHIWASHI_FISH}, + {gBattleAnimSpriteGfx_ZygardeHexes, 0x480, ANIM_TAG_ZYGARDE_HEXES}, + {gBattleAnimSpriteGfx_AuraSphere, 0x200, ANIM_TAG_AURA_SPHERE}, + {gBattleAnimSpriteGfx_OmegaStone, 0x800, ANIM_TAG_OMEGA_STONE}, + {gBattleAnimSpriteGfx_AlphaStone, 0x800, ANIM_TAG_ALPHA_STONE}, + {gBattleAnimSpriteGfx_BerryNormal, 0x400, ANIM_TAG_BERRY_NORMAL}, + {gBattleAnimSpriteGfx_BerryEaten, 0x200, ANIM_TAG_BERRY_EATEN}, + {gBattleAnimSpriteGfx_PurpleDrake, 0x800, ANIM_TAG_DRAGON_ASCENT}, + {gBattleAnimSpriteGfx_PinkDiamond, 0x40, ANIM_TAG_PINK_DIAMOND}, + {gBattleAnimSpriteGfx_SteamEruption, 0xa00, ANIM_TAG_STEAM_ERUPTION}, + {gBattleAnimSpriteGfx_Confide, 0x800, ANIM_TAG_CONFIDE}, + {gBattleAnimSpriteGfx_Arrows, 0x480, ANIM_TAG_VERTICAL_HEX}, + {NULL, 0x0, ANIM_TAG_UNAVAILABLE_1}, + {NULL, 0x0, ANIM_TAG_UNAVAILABLE_2}, + {gBattleAnimSpriteGfx_PowerTrick, 0x800, ANIM_TAG_POWER_TRICK}, + {gBattleAnimSpriteGfx_ChainLink, 0x200, ANIM_TAG_CHAIN_LINK}, + {gBattleAnimSpriteGfx_Anchor, 0x200, ANIM_TAG_ANCHOR}, + {gBattleAnimSpriteGfx_HorseshoeFist, 0x800, ANIM_TAG_HORSESHOE_SIDE_FIST}, + {gBattleAnimSpriteGfx_PurpleDrake, 0x800, ANIM_TAG_DRAGON_ASCENT_FOE}, + {gBattleAnimSpriteGfx_CraftyShield, 0x80, ANIM_TAG_CRAFTY_SHIELD}, + {gBattleAnimSpriteGfx_BlacephalonHead, 0x200, ANIM_TAG_BLACEPHALON_HEAD}, + {gBattleAnimSpriteGfx_FairyLockChains, 0x400, ANIM_TAG_FAIRY_LOCK_CHAINS}, + {gBattleAnimSpriteGfx_LightningRain, 0x700, ANIM_TAG_IONS}, + {gBattleAnimSpriteGfx_Chop, 0x200, ANIM_TAG_CHOP}, + {gBattleAnimSpriteGfx_HeartStamp, 0x400, ANIM_TAG_HEART_STAMP}, + {gBattleAnimSpriteGfx_HornLeech, 0x200, ANIM_TAG_HORN_LEECH}, + {gBattleAnimSpriteGfx_Steamroller, 0x800, ANIM_TAG_STEAMROLLER}, + {gBattleAnimSpriteGfx_HoopaHand, 0x80, ANIM_TAG_HOOPA_HAND}, + {gBattleAnimSpriteGfx_HoopaRing, 0x200, ANIM_TAG_HOOPA_RING}, + {gBattleAnimSpriteGfx_MetalBits, 0x140, ANIM_TAG_METAL_BITS}, + {gBattleAnimSpriteGfx_RocksSmall, 0x140, ANIM_TAG_SMALL_ROCK}, + {gBattleAnimSpriteGfx_SpiritShackleArrow, 0x200, ANIM_TAG_SPIRIT_ARROW}, + {gBattleAnimSpriteGfx_NecrozmaStar, 0x200, ANIM_TAG_ULTRA_BURST_SYMBOL}, + {gBattleAnimSpriteGfx_ZMoveSymbol, 0x800, ANIM_TAG_Z_MOVE_SYMBOL}, + {gBattleAnimSpriteGfx_BigRock, 0x800, ANIM_TAG_REALLY_BIG_ROCK}, + {gBattleAnimSpriteGfx_Cacoon, 0x800, ANIM_TAG_COCOON}, + {gBattleAnimSpriteGfx_Drill, 0x800, ANIM_TAG_CORKSCREW}, + {gBattleAnimSpriteGfx_GigavoltHavocSpear, 0x800, ANIM_TAG_HAVOC_SPEAR}, + {gBattleAnimSpriteGfx_PurpleDrake, 0x800, ANIM_TAG_PURPLE_DRAKE}, + {gBattleAnimSpriteGfx_MudBomb, 0x800, ANIM_TAG_MUD_BOMB}, + {gBattleAnimSpriteGfx_Branch, 0x200, ANIM_TAG_BRANCH}, + {gBattleAnimSpriteGfx_Apple, 0x200, ANIM_TAG_APPLE}, + {gBattleAnimSpriteGfx_Obstruct, 0x200, ANIM_TAG_OBSTRUCT_CROSS}, + {gBattleAnimSpriteGfx_PoisonColumn, 0x2000, ANIM_TAG_POISON_COLUMN}, + {gBattleAnimSpriteGfx_PoisonColumn, 0x2000, ANIM_TAG_GARBAGE_COLUMN}, + {gBattleAnimSpriteGfx_LargeSpike, 0x1000, ANIM_TAG_LARGE_SPIKE}, + {gBattleAnimSpriteGfx_DragonPulseRing, 0x200, ANIM_TAG_DRAGON_PULSE_RING}, + {gBattleAnimSpriteGfx_StonePillar, 0x2000, ANIM_TAG_STONE_PILLAR}, + {gBattleAnimSpriteGfx_Mushroom, 0x800, ANIM_TAG_MUSHROOM}, + {gBattleAnimSpriteGfx_GoldenApple, 0x800, ANIM_TAG_GOLDEN_APPLE}, + {gBattleAnimSpriteGfx_IceRock, 0x2800, ANIM_TAG_ICE_ROCK}, + {gBattleAnimSpriteGfx_Tornado, 0x1800, ANIM_TAG_TORNADO}, + {gBattleAnimSpriteGfx_StraightBeam, 0x180, ANIM_TAG_STRAIGHT_BEAM}, + {gBattleAnimSpriteGfx_DreepyMissile, 0x200, ANIM_TAG_DREEPY}, + {gBattleAnimSpriteGfx_IceRock, 0x1800, ANIM_TAG_ICE_ROCK_SINGLE}, + {gBattleAnimSpriteGfx_StonePillar, 0x1800, ANIM_TAG_STONE_PILLAR_MULTI}, + {gBattleAnimSpriteGfx_AlphaSymbol, 0x0200, ANIM_TAG_ALPHA_SYMBOL}, + {gBattleAnimSpriteGfx_OmegaSymbol, 0x0200, ANIM_TAG_OMEGA_SYMBOL}, + {gBattleAnimSpriteGfx_PrimalParticles, 0x0180, ANIM_TAG_PRIMAL_PARTICLES}, + {gBattleAnimSpriteGfx_Orbs, 0x0180, ANIM_TAG_STEEL_BEAM}, + {gBattleAnimSpriteGfx_AuraSphere, 0x200, ANIM_TAG_POLTERGEIST}, +}; + +const struct CompressedSpritePalette gBattleAnimPaletteTable[] = +{ + {gBattleAnimSpritePal_Bone, ANIM_TAG_BONE}, + {gBattleAnimSpritePal_Spark, ANIM_TAG_SPARK}, + {gBattleAnimSpritePal_Pencil, ANIM_TAG_PENCIL}, + {gBattleAnimSpritePal_AirWave, ANIM_TAG_AIR_WAVE}, + {gBattleAnimSpritePal_Orb, ANIM_TAG_ORB}, + #if B_NEW_SWORD_PARTICLE + {gBattleAnimSpritePal_NewSword, ANIM_TAG_SWORD}, + #else + {gBattleAnimSpritePal_Sword, ANIM_TAG_SWORD}, + #endif + #if B_NEW_LEECH_SEED_PARTICLE + {gBattleAnimSpritePal_NewLeechSeed, ANIM_TAG_SEED}, + #else + {gBattleAnimSpritePal_Seed, ANIM_TAG_SEED}, + #endif + {gBattleAnimSpritePal_Explosion6, ANIM_TAG_EXPLOSION_6}, + {gBattleAnimSpritePal_PinkOrb, ANIM_TAG_PINK_ORB}, + {gBattleAnimSpritePal_Gust, ANIM_TAG_GUST}, + {gBattleAnimSpritePal_IceCube, ANIM_TAG_ICE_CUBE}, + {gBattleAnimSpritePal_Spark2, ANIM_TAG_SPARK_2}, + {gBattleAnimSpritePal_Orange, ANIM_TAG_ORANGE}, + {gBattleAnimSpritePal_YellowBall, ANIM_TAG_YELLOW_BALL}, + {gBattleAnimSpritePal_LockOn, ANIM_TAG_LOCK_ON}, + {gBattleAnimSpritePal_TiedBag, ANIM_TAG_TIED_BAG}, + {gBattleAnimSpritePal_BlackSmoke, ANIM_TAG_BLACK_SMOKE}, + {gBattleAnimSpritePal_BlackSmoke, ANIM_TAG_BLACK_BALL}, + {gBattleAnimSpritePal_Conversion, ANIM_TAG_CONVERSION}, + {gBattleAnimSpritePal_Glass, ANIM_TAG_GLASS}, + #if B_NEW_HORN_ATTACK_PARTICLE + {gBattleAnimSpritePal_NewHornHit, ANIM_TAG_HORN_HIT}, + #else + {gBattleAnimSpritePal_HornHit, ANIM_TAG_HORN_HIT}, + #endif + {gBattleAnimSpritePal_Hit, ANIM_TAG_HIT}, + {gBattleAnimSpritePal_Hit2, ANIM_TAG_HIT_2}, + {gBattleAnimSpritePal_BlueShards, ANIM_TAG_BLUE_SHARDS}, + {gBattleAnimSpritePal_ClosingEye, ANIM_TAG_CLOSING_EYE}, + {gBattleAnimSpritePal_WavingHand, ANIM_TAG_WAVING_HAND}, + {gBattleAnimSpritePal_HitDuplicate, ANIM_TAG_HIT_DUPLICATE}, + {gBattleAnimSpritePal_Leer, ANIM_TAG_LEER}, + {gBattleAnimSpritePal_BlueBurst, ANIM_TAG_BLUE_BURST}, + #if B_NEW_EMBER_PARTICLES + {gBattleAnimSpritePal_NewEmbers, ANIM_TAG_SMALL_EMBER}, + #else + {gBattleAnimSpritePal_SmallEmber, ANIM_TAG_SMALL_EMBER}, + #endif + {gBattleAnimSpritePal_GraySmoke, ANIM_TAG_GRAY_SMOKE}, + {gBattleAnimSpritePal_BlueStar, ANIM_TAG_BLUE_STAR}, + {gBattleAnimSpritePal_BubbleBurst, ANIM_TAG_BUBBLE_BURST}, + {gBattleAnimSpritePal_Fire, ANIM_TAG_FIRE}, + {gBattleAnimSpritePal_Fire, ANIM_TAG_SPINNING_FIRE}, + {gBattleAnimSpritePal_Fire, ANIM_TAG_FIRE_PLUME}, + {gBattleAnimSpritePal_Lightning2, ANIM_TAG_LIGHTNING_2}, + {gBattleAnimSpritePal_Lightning2, ANIM_TAG_LIGHTNING}, + {gBattleAnimSpritePal_ClawSlash2, ANIM_TAG_CLAW_SLASH_2}, + {gBattleAnimSpritePal_ClawSlash, ANIM_TAG_CLAW_SLASH}, + {gBattleAnimSpritePal_ClawSlash2, ANIM_TAG_SCRATCH_3}, + {gBattleAnimSpritePal_ClawSlash2, ANIM_TAG_SCRATCH_2}, + {gBattleAnimSpritePal_BubbleBurst2, ANIM_TAG_BUBBLE_BURST_2}, + {gBattleAnimSpritePal_IceChunk, ANIM_TAG_ICE_CHUNK}, + {gBattleAnimSpritePal_Glass2, ANIM_TAG_GLASS_2}, + {gBattleAnimSpritePal_PinkHeart2, ANIM_TAG_PINK_HEART_2}, + {gBattleAnimSpritePal_SapDrip, ANIM_TAG_SAP_DRIP}, + {gBattleAnimSpritePal_SapDrip2, ANIM_TAG_SAP_DRIP}, + {gBattleAnimSpritePal_Sparkle1, ANIM_TAG_SPARKLE_1}, + {gBattleAnimSpritePal_Sparkle2, ANIM_TAG_SPARKLE_2}, + {gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_HUMANOID_FOOT}, + {gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_MONSTER_FOOT}, + {gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_HUMANOID_HAND}, + {gBattleAnimSpritePal_HitDuplicate, ANIM_TAG_NOISE_LINE}, + {gBattleAnimSpritePal_YellowUnk, ANIM_TAG_YELLOW_UNK}, + {gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_RED_FIST}, + {gBattleAnimSpritePal_SlamHit, ANIM_TAG_SLAM_HIT}, + {gBattleAnimSpritePal_Ring, ANIM_TAG_RING}, + #if NEW_ROCKS_PARTICLE + {gBattleAnimSpritePal_NewRocks, ANIM_TAG_ROCKS}, + #else + {gBattleAnimSpritePal_Rocks, ANIM_TAG_ROCKS}, + #endif + {gBattleAnimSpritePal_Z, ANIM_TAG_Z}, + {gBattleAnimSpritePal_YellowUnk2, ANIM_TAG_YELLOW_UNK_2}, + {gBattleAnimSpritePal_AirSlash, ANIM_TAG_AIR_SLASH}, + {gBattleAnimSpritePal_SpinningGreenOrbs, ANIM_TAG_SPINNING_GREEN_ORBS}, + #if B_NEW_LEAF_PARTICLE + {gBattleAnimSpritePal_NewLeaf, ANIM_TAG_LEAF}, + #else + {gBattleAnimSpritePal_Leaf, ANIM_TAG_LEAF}, + #endif + {gBattleAnimSpritePal_Finger, ANIM_TAG_FINGER}, + {gBattleAnimSpritePal_PoisonPowder, ANIM_TAG_POISON_POWDER}, + {gBattleAnimSpritePal_BrownTriangle, ANIM_TAG_BROWN_TRIANGLE}, + {gBattleAnimSpritePal_SleepPowder, ANIM_TAG_SLEEP_POWDER}, + {gBattleAnimSpritePal_StunSpore, ANIM_TAG_STUN_SPORE}, + {gBattleAnimSpritePal_PoisonPowder, ANIM_TAG_POWDER}, + {gBattleAnimSpritePal_Sparkle3, ANIM_TAG_SPARKLE_3}, + {gBattleAnimSpritePal_Sparkle3, ANIM_TAG_SPARKLE_4}, + {gBattleAnimSpritePal_MusicNotes, ANIM_TAG_MUSIC_NOTES}, + {gBattleAnimSpritePal_Duck, ANIM_TAG_DUCK}, + {gBattleAnimSpritePal_MudSand, ANIM_TAG_MUD_SAND}, + {gBattleAnimSpritePal_Alert, ANIM_TAG_ALERT}, + {gBattleAnimSpritePal_BlueFlames, ANIM_TAG_BLUE_FLAMES}, + {gBattleAnimSpritePal_BlueFlames, ANIM_TAG_BLUE_FLAMES_2}, + {gBattleAnimSpritePal_Shock4, ANIM_TAG_SHOCK_4}, + {gBattleAnimSpritePal_Shock4, ANIM_TAG_SHOCK}, + {gBattleAnimSpritePal_Bell2, ANIM_TAG_BELL_2}, + {gBattleAnimSpritePal_PinkGlove, ANIM_TAG_PINK_GLOVE}, + {gBattleAnimSpritePal_BlueLines, ANIM_TAG_BLUE_LINES}, + {gBattleAnimSpritePal_Impact3, ANIM_TAG_IMPACT_3}, + {gBattleAnimSpritePal_Impact2, ANIM_TAG_IMPACT_2}, + {gBattleAnimSpritePal_Reticle, ANIM_TAG_RETICLE}, + {gBattleAnimSpritePal_Breath, ANIM_TAG_BREATH}, + {gBattleAnimSpritePal_Anger, ANIM_TAG_ANGER}, + {gBattleAnimSpritePal_Snowball, ANIM_TAG_SNOWBALL}, + {gBattleAnimSpritePal_Vine, ANIM_TAG_VINE}, + {gBattleAnimSpritePal_Sword2, ANIM_TAG_SWORD_2}, + {gBattleAnimSpritePal_Clapping, ANIM_TAG_CLAPPING}, + {gBattleAnimSpritePal_RedTube, ANIM_TAG_RED_TUBE}, + {gBattleAnimSpritePal_Amnesia, ANIM_TAG_AMNESIA}, + {gBattleAnimSpritePal_String2, ANIM_TAG_STRING_2}, + {gBattleAnimSpritePal_Pencil2, ANIM_TAG_PENCIL_2}, + {gBattleAnimSpritePal_Petal, ANIM_TAG_PETAL}, + {gBattleAnimSpritePal_BentSpoon, ANIM_TAG_BENT_SPOON}, + {gBattleAnimSpritePal_String2, ANIM_TAG_WEB}, + {gBattleAnimSpritePal_MilkBottle, ANIM_TAG_MILK_BOTTLE}, + {gBattleAnimSpritePal_Coin, ANIM_TAG_COIN}, + {gBattleAnimSpritePal_CrackedEgg, ANIM_TAG_CRACKED_EGG}, + {gBattleAnimSpritePal_CrackedEgg, ANIM_TAG_HATCHED_EGG}, + {gBattleAnimSpritePal_FreshEgg, ANIM_TAG_FRESH_EGG}, + {gBattleAnimSpritePal_Fangs, ANIM_TAG_FANGS}, + {gBattleAnimSpritePal_Explosion2, ANIM_TAG_EXPLOSION_2}, + {gBattleAnimSpritePal_Explosion2, ANIM_TAG_EXPLOSION_3}, + {gBattleAnimSpritePal_WaterDroplet, ANIM_TAG_WATER_DROPLET}, + {gBattleAnimSpritePal_WaterDroplet, ANIM_TAG_WATER_DROPLET_2}, + {gBattleAnimSpritePal_Seed2, ANIM_TAG_SEED_2}, + {gBattleAnimSpritePal_Seed2, ANIM_TAG_SPROUT}, + {gBattleAnimSpritePal_RedWand, ANIM_TAG_RED_WAND}, + {gBattleAnimSpritePal_PurpleGreenUnk, ANIM_TAG_PURPLE_GREEN_UNK}, + {gBattleAnimSpritePal_WaterColumn, ANIM_TAG_WATER_COLUMN}, + {gBattleAnimSpritePal_MudUnk, ANIM_TAG_MUD_UNK}, + {gBattleAnimSpritePal_RainDrops, ANIM_TAG_RAIN_DROPS}, + {gBattleAnimSpritePal_FurySwipes, ANIM_TAG_FURY_SWIPES}, + {gBattleAnimSpritePal_Vine2, ANIM_TAG_VINE_2}, + {gBattleAnimSpritePal_Teeth, ANIM_TAG_TEETH}, + {gBattleAnimSpritePal_Bone2, ANIM_TAG_BONE_2}, + {gBattleAnimSpritePal_WhiteBag, ANIM_TAG_WHITE_BAG}, + {gBattleAnimSpritePal_Unknown, ANIM_TAG_UNKNOWN}, + {gBattleAnimSpritePal_PurpleCoral, ANIM_TAG_PURPLE_CORAL}, + {gBattleAnimSpritePal_PurpleCoral, ANIM_TAG_PURPLE_DROPLET}, + {gBattleAnimSpritePal_Shock2, ANIM_TAG_SHOCK_2}, + {gBattleAnimSpritePal_ClosingEye2, ANIM_TAG_CLOSING_EYE_2}, + {gBattleAnimSpritePal_MetalBall, ANIM_TAG_METAL_BALL}, + #if NEW_SUBSTITUTE_PARTICLE + {gBattleAnimSpritePal_NewSubstituteFront, ANIM_TAG_MONSTER_DOLL}, + #else + {gBattleAnimSpritePal_MonsterDoll, ANIM_TAG_MONSTER_DOLL}, + #endif + {gBattleAnimSpritePal_Whirlwind, ANIM_TAG_WHIRLWIND}, + {gBattleAnimSpritePal_Whirlwind, ANIM_TAG_WHIRLWIND_2}, + {gBattleAnimSpritePal_Explosion4, ANIM_TAG_EXPLOSION_4}, + {gBattleAnimSpritePal_Explosion4, ANIM_TAG_EXPLOSION_5}, + {gBattleAnimSpritePal_Tongue, ANIM_TAG_TONGUE}, + {gBattleAnimSpritePal_Smoke, ANIM_TAG_SMOKE}, + {gBattleAnimSpritePal_Smoke, ANIM_TAG_SMOKE_2}, + #if B_NEW_IMPACT_PALETTE + {gBattleAnimSpritePal_NewImpact, ANIM_TAG_IMPACT}, + #else + {gBattleAnimSpritePal_Impact, ANIM_TAG_IMPACT}, + #endif + {gBattleAnimSpritePal_CircleImpact, ANIM_TAG_CIRCLE_IMPACT}, + {gBattleAnimSpritePal_Impact, ANIM_TAG_SCRATCH}, + {gBattleAnimSpritePal_Impact, ANIM_TAG_CUT}, + #if B_NEW_TEETH_PARTICLE + {gBattleAnimSpritePal_NewTeeth, ANIM_TAG_SHARP_TEETH}, + #else + {gBattleAnimSpritePal_SharpTeeth, ANIM_TAG_SHARP_TEETH}, + #endif + {gBattleAnimSpritePal_RainbowRings, ANIM_TAG_RAINBOW_RINGS}, + {gBattleAnimSpritePal_IceCrystals, ANIM_TAG_ICE_CRYSTALS}, + {gBattleAnimSpritePal_IceCrystals, ANIM_TAG_ICE_SPIKES}, + #if B_NEW_HANDS_FEET_PARTICLE + {gBattleAnimSpritePal_NewHandsAndFeet, ANIM_TAG_HANDS_AND_FEET}, + #else + {gBattleAnimSpritePal_HandsAndFeet, ANIM_TAG_HANDS_AND_FEET}, + #endif + {gBattleAnimSpritePal_MistCloud, ANIM_TAG_MIST_CLOUD}, + {gBattleAnimSpritePal_SharpTeeth, ANIM_TAG_CLAMP}, + {gBattleAnimSpritePal_RainDrops, ANIM_TAG_BUBBLE}, + {gBattleAnimSpritePal_Orbs, ANIM_TAG_ORBS}, + {gBattleAnimSpritePal_WaterImpact, ANIM_TAG_WATER_IMPACT}, + {gBattleAnimSpritePal_WaterImpact, ANIM_TAG_WATER_ORB}, + {gBattleAnimSpritePal_PoisonBubble, ANIM_TAG_POISON_BUBBLE}, + {gBattleAnimSpritePal_PoisonBubble, ANIM_TAG_TOXIC_BUBBLE}, + #if B_NEW_SPIKES_PARTICLE + {gBattleAnimSpritePal_NewSpikes, ANIM_TAG_SPIKES}, + #else + {gBattleAnimSpritePal_Spikes, ANIM_TAG_SPIKES}, + #endif + {gBattleAnimSpritePal_HornHit2, ANIM_TAG_HORN_HIT_2}, + {gBattleAnimSpritePal_AirWave2, ANIM_TAG_AIR_WAVE_2}, + {gBattleAnimSpritePal_SmallBubbles, ANIM_TAG_SMALL_BUBBLES}, + #if B_NEW_FLY_BUBBLE_PARTICLE + {gBattleAnimSpritePal_NewFly, ANIM_TAG_ROUND_SHADOW}, + #else + {gBattleAnimSpritePal_RoundShadow, ANIM_TAG_ROUND_SHADOW}, + #endif + {gBattleAnimSpritePal_Sunlight, ANIM_TAG_SUNLIGHT}, + {gBattleAnimSpritePal_Spore, ANIM_TAG_SPORE}, + {gBattleAnimSpritePal_Flower, ANIM_TAG_FLOWER}, + {gBattleAnimSpritePal_RazorLeaf, ANIM_TAG_RAZOR_LEAF}, + {gBattleAnimSpritePal_Needle, ANIM_TAG_NEEDLE}, + {gBattleAnimSpritePal_WhirlwindLines, ANIM_TAG_WHIRLWIND_LINES}, + {gBattleAnimSpritePal_GoldRing, ANIM_TAG_GOLD_RING}, + {gBattleAnimSpritePal_PurpleRing, ANIM_TAG_PURPLE_RING}, + {gBattleAnimSpritePal_BlueRing, ANIM_TAG_BLUE_RING}, + {gBattleAnimSpritePal_GreenLightWall, ANIM_TAG_GREEN_LIGHT_WALL}, + {gBattleAnimSpritePal_BlueLightWall, ANIM_TAG_BLUE_LIGHT_WALL}, + {gBattleAnimSpritePal_RedLightWall, ANIM_TAG_RED_LIGHT_WALL}, + {gBattleAnimSpritePal_GrayLightWall, ANIM_TAG_GRAY_LIGHT_WALL}, + {gBattleAnimSpritePal_OrangeLightWall, ANIM_TAG_ORANGE_LIGHT_WALL}, + {gBattleAnimSpritePal_BlackBall2, ANIM_TAG_BLACK_BALL_2}, + {gBattleAnimSpritePal_PurpleGasCloud, ANIM_TAG_PURPLE_GAS_CLOUD}, + {gBattleAnimSpritePal_Spark, ANIM_TAG_SPARK_H}, + {gBattleAnimSpritePal_YellowStar, ANIM_TAG_YELLOW_STAR}, + {gBattleAnimSpritePal_LargeFreshEgg, ANIM_TAG_LARGE_FRESH_EGG}, + {gBattleAnimSpritePal_ShadowBall, ANIM_TAG_SHADOW_BALL}, + {gBattleAnimSpritePal_Lick, ANIM_TAG_LICK}, + {gBattleAnimSpritePal_VoidLines, ANIM_TAG_VOID_LINES}, + {gBattleAnimSpritePal_String, ANIM_TAG_STRING}, + {gBattleAnimSpritePal_String, ANIM_TAG_WEB_THREAD}, + {gBattleAnimSpritePal_String, ANIM_TAG_SPIDER_WEB}, + {gBattleAnimSpritePal_Lightbulb, ANIM_TAG_LIGHTBULB}, + {gBattleAnimSpritePal_Slash, ANIM_TAG_SLASH}, + {gBattleAnimSpritePal_FocusEnergy, ANIM_TAG_FOCUS_ENERGY}, + {gBattleAnimSpritePal_SphereToCube, ANIM_TAG_SPHERE_TO_CUBE}, + {gBattleAnimSpritePal_Tendrils, ANIM_TAG_TENDRILS}, + #if B_NEW_MEAN_LOOK_PARTICLE + {gBattleAnimSpritePal_NewEye, ANIM_TAG_EYE}, + #else + {gBattleAnimSpritePal_Eye, ANIM_TAG_EYE}, + #endif + {gBattleAnimSpritePal_WhiteShadow, ANIM_TAG_WHITE_SHADOW}, + {gBattleAnimSpritePal_TealAlert, ANIM_TAG_TEAL_ALERT}, + {gBattleAnimSpritePal_OpeningEye, ANIM_TAG_OPENING_EYE}, + {gBattleAnimSpritePal_RoundWhiteHalo, ANIM_TAG_ROUND_WHITE_HALO}, + {gBattleAnimSpritePal_FangAttack, ANIM_TAG_FANG_ATTACK}, + {gBattleAnimSpritePal_PurpleHandOutline, ANIM_TAG_PURPLE_HAND_OUTLINE}, + {gBattleAnimSpritePal_Moon, ANIM_TAG_MOON}, + {gBattleAnimSpritePal_GreenSparkle, ANIM_TAG_GREEN_SPARKLE}, + {gBattleAnimSpritePal_Spiral, ANIM_TAG_SPIRAL}, + {gBattleAnimSpritePal_SnoreZ, ANIM_TAG_SNORE_Z}, + {gBattleAnimSpritePal_Explosion, ANIM_TAG_EXPLOSION}, + {gBattleAnimSpritePal_Nail, ANIM_TAG_NAIL}, + {gBattleAnimSpritePal_GhostlySpirit, ANIM_TAG_GHOSTLY_SPIRIT}, + {gBattleAnimSpritePal_WarmRock, ANIM_TAG_WARM_ROCK}, + {gBattleAnimSpritePal_BreakingEgg, ANIM_TAG_BREAKING_EGG}, + {gBattleAnimSpritePal_ThinRing, ANIM_TAG_THIN_RING}, + {gBattleAnimSpritePal_PunchImpact, ANIM_TAG_PUNCH_IMPACT}, + {gBattleAnimSpritePal_Bell, ANIM_TAG_BELL}, + {gBattleAnimSpritePal_MusicNotes2, ANIM_TAG_MUSIC_NOTES_2}, + {gBattleAnimSpritePal_SpeedDust, ANIM_TAG_SPEED_DUST}, + {gBattleAnimSpritePal_BlueLightWall, ANIM_TAG_TORN_METAL}, + {gBattleAnimSpritePal_ThoughtBubble, ANIM_TAG_THOUGHT_BUBBLE}, + {gBattleAnimSpritePal_MagentaHeart, ANIM_TAG_MAGENTA_HEART}, + {gBattleAnimSpritePal_ElectricOrbs, ANIM_TAG_ELECTRIC_ORBS}, + {gBattleAnimSpritePal_ElectricOrbs, ANIM_TAG_CIRCLE_OF_LIGHT}, + {gBattleAnimSpritePal_ElectricOrbs, ANIM_TAG_ELECTRICITY}, + {gBattleAnimSpritePal_Finger, ANIM_TAG_FINGER_2}, + {gBattleAnimSpritePal_MovementWaves, ANIM_TAG_MOVEMENT_WAVES}, + {gBattleAnimSpritePal_RedHeart, ANIM_TAG_RED_HEART}, + {gBattleAnimSpritePal_RedOrb, ANIM_TAG_RED_ORB}, + {gBattleAnimSpritePal_EyeSparkle, ANIM_TAG_EYE_SPARKLE}, + {gBattleAnimSpritePal_PinkHeart, ANIM_TAG_PINK_HEART}, + {gBattleAnimSpritePal_Angel, ANIM_TAG_ANGEL}, + {gBattleAnimSpritePal_Devil, ANIM_TAG_DEVIL}, + {gBattleAnimSpritePal_Swipe, ANIM_TAG_SWIPE}, + {gBattleAnimSpritePal_Roots, ANIM_TAG_ROOTS}, + {gBattleAnimSpritePal_ItemBag, ANIM_TAG_ITEM_BAG}, + {gBattleAnimSpritePal_JaggedMusicNote, ANIM_TAG_JAGGED_MUSIC_NOTE}, + #if B_NEW_BATON_PASS_BALL_PARTICLE + {gBattleAnimSpritePal_NewPokeball, ANIM_TAG_POKEBALL}, + #else + {gBattleAnimSpritePal_Pokeball, ANIM_TAG_POKEBALL}, + #endif + {gBattleAnimSpritePal_Pokeball, ANIM_TAG_SPOTLIGHT}, + {gBattleAnimSpritePal_LetterZ, ANIM_TAG_LETTER_Z}, + {gBattleAnimSpritePal_RapidSpin, ANIM_TAG_RAPID_SPIN}, + {gBattleAnimSpritePal_TriAttackTriangle, ANIM_TAG_TRI_ATTACK_TRIANGLE}, + {gBattleAnimSpritePal_WispOrb, ANIM_TAG_WISP_ORB}, + {gBattleAnimSpritePal_WispOrb, ANIM_TAG_WISP_FIRE}, + {gBattleAnimSpritePal_GoldStars, ANIM_TAG_GOLD_STARS}, + {gBattleAnimSpritePal_EclipsingOrb, ANIM_TAG_ECLIPSING_ORB}, + {gBattleAnimSpritePal_GrayOrb, ANIM_TAG_GRAY_ORB}, + {gBattleAnimSpritePal_BlueOrb, ANIM_TAG_BLUE_ORB}, + {gBattleAnimSpritePal_RedOrb2, ANIM_TAG_RED_ORB_2}, + {gBattleAnimSpritePal_PinkPetal, ANIM_TAG_PINK_PETAL}, + {gBattleAnimSpritePal_PainSplit, ANIM_TAG_PAIN_SPLIT}, + {gBattleAnimSpritePal_Confetti, ANIM_TAG_CONFETTI}, + #if B_NEW_MORNING_SUN_STAR_PARTICLE + {gBattleAnimSpritePal_NewGreenStar, ANIM_TAG_GREEN_STAR}, + #else + {gBattleAnimSpritePal_GreenStar, ANIM_TAG_GREEN_STAR}, + #endif + {gBattleAnimSpritePal_PinkCloud, ANIM_TAG_PINK_CLOUD}, + {gBattleAnimSpritePal_SweatDrop, ANIM_TAG_SWEAT_DROP}, + {gBattleAnimSpritePal_GuardRing, ANIM_TAG_GUARD_RING}, + {gBattleAnimSpritePal_PurpleScratch, ANIM_TAG_PURPLE_SCRATCH}, + {gBattleAnimSpritePal_PurpleScratch, ANIM_TAG_PURPLE_SWIPE}, + {gBattleAnimSpritePal_Finger, ANIM_TAG_TAG_HAND}, + {gBattleAnimSpritePal_SmallRedEye, ANIM_TAG_SMALL_RED_EYE}, + {gBattleAnimSpritePal_HollowOrb, ANIM_TAG_HOLLOW_ORB}, + {gBattleAnimSpritePal_HollowOrb, ANIM_TAG_X_SIGN}, + {gBattleAnimSpritePal_BluegreenOrb, ANIM_TAG_BLUEGREEN_ORB}, + {gBattleAnimSpritePal_PawPrint, ANIM_TAG_PAW_PRINT}, + {gBattleAnimSpritePal_PurpleFlame, ANIM_TAG_PURPLE_FLAME}, + {gBattleAnimSpritePal_RedBall, ANIM_TAG_RED_BALL}, + {gBattleAnimSpritePal_SmellingsaltEffect, ANIM_TAG_SMELLINGSALT_EFFECT}, + {gBattleAnimSpritePal_Meteor, ANIM_TAG_METEOR}, + {gBattleAnimSpritePal_FlatRock, ANIM_TAG_FLAT_ROCK}, + {gBattleAnimSpritePal_MagnifyingGlass, ANIM_TAG_MAGNIFYING_GLASS}, + {gBattleAnimSpritePal_BrownOrb, ANIM_TAG_BROWN_ORB}, + {gBattleAnimSpritePal_MetalSoundWaves, ANIM_TAG_METAL_SOUND_WAVES}, + {gBattleAnimSpritePal_FlyingDirt, ANIM_TAG_FLYING_DIRT}, + {gBattleAnimSpritePal_IcicleSpear, ANIM_TAG_ICICLE_SPEAR}, + {gBattleAnimSpritePal_Hail, ANIM_TAG_HAIL}, + {gBattleAnimSpritePal_GlowyRedOrb, ANIM_TAG_GLOWY_RED_ORB}, + {gBattleAnimSpritePal_GlowyGreenOrb, ANIM_TAG_GLOWY_GREEN_ORB}, + {gBattleAnimSpritePal_GreenSpike, ANIM_TAG_GREEN_SPIKE}, + {gBattleAnimSpritePal_WhiteCircleOfLight, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT}, + {gBattleAnimSpritePal_GlowyBlueOrb, ANIM_TAG_GLOWY_BLUE_ORB}, + {gBattleAnimSpritePal_Pokeblock, ANIM_TAG_POKEBLOCK}, + {gBattleAnimSpritePal_WhiteFeather, ANIM_TAG_WHITE_FEATHER}, + {gBattleAnimSpritePal_Sparkle6, ANIM_TAG_SPARKLE_6}, + {gBattleAnimSpritePal_Splash, ANIM_TAG_SPLASH}, + {gBattleAnimSpritePal_Splash, ANIM_TAG_SWEAT_BEAD}, + {gBattleAnimSpritePal_Gem1, ANIM_TAG_GEM_1}, + {gBattleAnimSpritePal_Gem1, ANIM_TAG_GEM_2}, + {gBattleAnimSpritePal_Gem1, ANIM_TAG_GEM_3}, + {gBattleAnimSpritePal_SlamHit2, ANIM_TAG_SLAM_HIT_2}, + {gBattleAnimSpritePal_Recycle, ANIM_TAG_RECYCLE}, + {gBattleAnimSpritePal_RedParticles, ANIM_TAG_RED_PARTICLES}, + {gBattleAnimSpritePal_Protect, ANIM_TAG_PROTECT}, + {gBattleAnimSpritePal_DirtMound, ANIM_TAG_DIRT_MOUND}, + {gBattleAnimSpritePal_Shock3, ANIM_TAG_SHOCK_3}, + {gBattleAnimSpritePal_WeatherBall, ANIM_TAG_WEATHER_BALL}, + {gBattleAnimSpritePal_Bird, ANIM_TAG_BIRD}, + {gBattleAnimSpritePal_CrossImpact, ANIM_TAG_CROSS_IMPACT}, + {gBattleAnimSpritePal_Slash2, ANIM_TAG_SLASH_2}, + {gBattleAnimSpritePal_WhipHit, ANIM_TAG_WHIP_HIT}, + {gBattleAnimSpritePal_BlueRing2, ANIM_TAG_BLUE_RING_2}, + {gBattleAnimSpritePal_WhiteStreak, ANIM_TAG_WHITE_STREAK}, + {gBattleAnimSpritePal_PurpleJab, ANIM_TAG_PURPLE_JAB}, + //new particles + {gBattleAnimSpritePal_ToxicSpikes, ANIM_TAG_TOXIC_SPIKES}, + {gBattleAnimSpritePal_EnergyBall, ANIM_TAG_ENERGY_BALL}, + {gBattleAnimSpritePal_SeedBrown, ANIM_TAG_SEED_BROWN}, + {gBattleAnimSpritePal_Feint, ANIM_TAG_FEINT}, + {gBattleAnimSpritePal_MegaStone, ANIM_TAG_MEGA_STONE}, + {gBattleAnimSpritePal_MegaSymbol, ANIM_TAG_MEGA_SYMBOL}, + {gBattleAnimSpritePal_MegaParticles, ANIM_TAG_MEGA_PARTICLES}, + {gBattleAnimSpritePal_TrumpCard, ANIM_TAG_TRUMP_CARD}, + {gBattleAnimSpritePal_TrumpCardParticles, ANIM_TAG_TRUMP_CARD_PARTICLES}, + {gBattleAnimSpritePal_Accupressure, ANIM_TAG_ACCUPRESSURE}, + {gBattleAnimSpritePal_WringOut, ANIM_TAG_WRING_OUT}, + {gBattleAnimSpritePal_ColoredOrbs, ANIM_TAG_COLORED_ORBS}, + {gBattleAnimSpritePal_WorrySeed, ANIM_TAG_WORRY_SEED}, + {gBattleAnimSpritePal_SmallCloud, ANIM_TAG_SMALL_CLOUD}, + {gBattleAnimSpritePal_AttackOrder, ANIM_TAG_ATTACK_ORDER}, + {gBattleAnimSpritePal_DragonPulse, ANIM_TAG_DRAGON_PULSE}, + {gBattleAnimSpritePal_WoodHammer, ANIM_TAG_WOOD_HAMMER}, + {gBattleAnimSpritePal_PsychoCut, ANIM_TAG_PSYCHO_CUT}, + {gBattleAnimSpritePal_PowerGem, ANIM_TAG_POWER_GEM}, + {gBattleAnimSpritePal_StoneEdge, ANIM_TAG_STONE_EDGE}, + {gBattleAnimSpritePal_StealthRock, ANIM_TAG_STEALTH_ROCK}, + {gBattleAnimSpritePal_PoisonJab, ANIM_TAG_POISON_JAB}, + {gBattleAnimSpritePal_Vine, ANIM_TAG_GREEN_POISON_BUBBLE}, + {gBattleAnimSpritePal_FlashCannonBall, ANIM_TAG_FLASH_CANNON_BALL}, + {gBattleAnimSpritePal_WaterGun, ANIM_TAG_WATER_GUN}, + {gBattleAnimSpritePal_Punishment, ANIM_TAG_PUNISHMENT_BLADES}, + {gBattleAnimSpritePal_QuickGuard, ANIM_TAG_QUICK_GUARD_HAND}, + {gBattleAnimSpritePal_ShellLeft, ANIM_TAG_SHELL_RIGHT}, + {gBattleAnimSpritePal_ShellLeft, ANIM_TAG_SHELL_LEFT}, + {gBattleAnimSpritePal_RazorShell, ANIM_TAG_RAZOR_SHELL}, + {gBattleAnimSpritePal_HydroPump, ANIM_TAG_HYDRO_PUMP}, + {gBattleAnimSpritePal_Brine, ANIM_TAG_BRINE}, + {gBattleAnimSpritePal_Gear, ANIM_TAG_GEAR}, + {gBattleAnimSpritePal_AssuranceHand, ANIM_TAG_ASSURANCE_HAND}, + {gBattleAnimSpritePal_AcupressureFinger, ANIM_TAG_ACUPRESSURE_FINGER}, + {gBattleAnimSpritePal_Fishies, ANIM_TAG_WISHIWASHI_FISH}, + {gBattleAnimSpritePal_ZygardeHexes, ANIM_TAG_ZYGARDE_HEXES}, + {gBattleAnimSpritePal_AuraSphere, ANIM_TAG_AURA_SPHERE}, + {gBattleAnimSpritePal_OmegaStone, ANIM_TAG_OMEGA_STONE}, + {gBattleAnimSpritePal_AlphaStone, ANIM_TAG_ALPHA_STONE}, + {gBattleAnimSpritePal_BerryNormal, ANIM_TAG_BERRY_NORMAL}, + {gBattleAnimSpritePal_SpacialRendSlices, ANIM_TAG_BERRY_EATEN}, + {gBattleAnimSpritePal_GreenDrake, ANIM_TAG_DRAGON_ASCENT}, + {gBattleAnimSpritePal_PinkDiamond, ANIM_TAG_PINK_DIAMOND}, + {gBattleAnimSpritePal_SteamEruption, ANIM_TAG_STEAM_ERUPTION}, + {gBattleAnimSpritePal_Confide, ANIM_TAG_CONFIDE}, + {gBattleAnimSpritePal_FusionFlare, ANIM_TAG_VERTICAL_HEX}, + {NULL, ANIM_TAG_UNAVAILABLE_1}, + {NULL, ANIM_TAG_UNAVAILABLE_2}, + {gBattleAnimSpritePal_PowerTrick, ANIM_TAG_POWER_TRICK}, + {gBattleAnimSpritePal_ChainLink, ANIM_TAG_CHAIN_LINK}, + {gBattleAnimSpritePal_NaturalGiftRing, ANIM_TAG_ANCHOR}, + {gBattleAnimSpritePal_HorseshoeFist, ANIM_TAG_HORSESHOE_SIDE_FIST}, + {gBattleAnimSpritePal_AvalancheRocks, ANIM_TAG_DRAGON_ASCENT_FOE}, + {gBattleAnimSpritePal_CraftyShield, ANIM_TAG_CRAFTY_SHIELD}, + {gBattleAnimSpritePal_BlacephalonHead, ANIM_TAG_BLACEPHALON_HEAD}, + {gBattleAnimSpritePal_DracoMeteor, ANIM_TAG_FAIRY_LOCK_CHAINS}, + {gBattleAnimSpritePal_LightningRain, ANIM_TAG_IONS}, + {gBattleAnimSpritePal_Chop, ANIM_TAG_CHOP}, + [ANIM_TAG_HEART_STAMP - ANIM_SPRITES_START] = {gBattleAnimSpritePal_HeartStamp, ANIM_TAG_HEART_STAMP}, + {gBattleAnimSpritePal_HornLeech, ANIM_TAG_HORN_LEECH}, + {gBattleAnimSpritePal_Steamroller, ANIM_TAG_STEAMROLLER}, + {gBattleAnimSpritePal_HoopaHand, ANIM_TAG_HOOPA_HAND}, + {gBattleAnimSpritePal_HoopaRing, ANIM_TAG_HOOPA_RING}, + {gBattleAnimSpritePal_BlueFlare, ANIM_TAG_METAL_BITS}, + {gBattleAnimSpritePal_NewRocks, ANIM_TAG_SMALL_ROCK}, + {gBattleAnimSpritePal_SpiritShackleArrow, ANIM_TAG_SPIRIT_ARROW}, + {gBattleAnimSpritePal_NecrozmaStar, ANIM_TAG_ULTRA_BURST_SYMBOL}, + {gBattleAnimSpritePal_ZMoveSymbol, ANIM_TAG_Z_MOVE_SYMBOL}, + {gBattleAnimSpritePal_BigRock, ANIM_TAG_REALLY_BIG_ROCK}, + {gBattleAnimSpritePal_Cacoon, ANIM_TAG_COCOON}, + {gBattleAnimSpritePal_Drill, ANIM_TAG_CORKSCREW}, + {gBattleAnimSpritePal_GigavoltHavocSpear, ANIM_TAG_HAVOC_SPEAR}, + {gBattleAnimSpritePal_PurpleDrake, ANIM_TAG_PURPLE_DRAKE}, + {gBattleAnimSpritePal_MudBomb, ANIM_TAG_MUD_BOMB}, + {gBattleAnimSpritePal_Branch, ANIM_TAG_BRANCH}, + {gBattleAnimSpritePal_Apple, ANIM_TAG_APPLE}, + {gBattleAnimSpritePal_Obstruct, ANIM_TAG_OBSTRUCT_CROSS}, + {gBattleAnimSpritePal_PoisonColumn, ANIM_TAG_POISON_COLUMN}, + {gBattleAnimSpritePal_GarbagePoisonPillar, ANIM_TAG_GARBAGE_COLUMN}, + {gBattleAnimSpritePal_LargeSpike, ANIM_TAG_LARGE_SPIKE}, + {gBattleAnimSpritePal_DragonPulseRing, ANIM_TAG_DRAGON_PULSE_RING}, + {gBattleAnimSpritePal_StonePillar, ANIM_TAG_STONE_PILLAR}, + {gBattleAnimSpritePal_Mushroom, ANIM_TAG_MUSHROOM}, + {gBattleAnimSpritePal_GoldenApple, ANIM_TAG_GOLDEN_APPLE}, + {gBattleAnimSpritePal_IceRock, ANIM_TAG_ICE_ROCK}, + {gBattleAnimSpritePal_Tornado, ANIM_TAG_TORNADO}, + {gBattleAnimSpritePal_StraightBeam, ANIM_TAG_STRAIGHT_BEAM}, + {gBattleAnimSpritePal_DreepyMissile, ANIM_TAG_DREEPY}, + {gBattleAnimSpritePal_IceRock, ANIM_TAG_ICE_ROCK_SINGLE}, + {gBattleAnimSpritePal_StonePillar, ANIM_TAG_STONE_PILLAR_MULTI}, + {gBattleAnimSpritePal_AlphaSymbol, ANIM_TAG_ALPHA_SYMBOL}, + {gBattleAnimSpritePal_OmegaSymbol, ANIM_TAG_OMEGA_SYMBOL}, + {gBattleAnimSpritePal_PrimalParticles, ANIM_TAG_PRIMAL_PARTICLES}, + {gBattleAnimSpritePal_SteelBeam, ANIM_TAG_STEEL_BEAM}, + {gBattleAnimSpritePal_Poltergeist, ANIM_TAG_POLTERGEIST}, +}; + +const struct BattleAnimBackground gBattleAnimBackgroundTable[] = +{ + [BG_NONE] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark}, + [BG_DARK] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark}, + [BG_GHOST] = {gBattleAnimBgImage_Ghost, gBattleAnimBgPalette_Ghost, gBattleAnimBgTilemap_Ghost}, + [BG_PSYCHIC] = {gBattleAnimBgImage_Psychic, gBattleAnimBgPalette_Psychic, gBattleAnimBgTilemap_Psychic}, + [BG_IMPACT_OPPONENT] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactOpponent}, + [BG_IMPACT_PLAYER] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactPlayer}, + [BG_IMPACT_CONTESTS] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactContests}, + [BG_DRILL] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Drill, gBattleAnimBgTilemap_Drill}, + [BG_DRILL_CONTESTS] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Drill, gBattleAnimBgTilemap_DrillContests}, + [BG_HIGHSPEED_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Highspeed, gBattleAnimBgTilemap_HighspeedOpponent}, + [BG_HIGHSPEED_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Highspeed, gBattleAnimBgTilemap_HighspeedPlayer}, + [BG_THUNDER] = {gBattleAnimBgImage_Thunder, gBattleAnimBgPalette_Thunder, gBattleAnimBgTilemap_Thunder}, + [BG_GUILLOTINE_OPPONENT] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotineOpponent}, + [BG_GUILLOTINE_PLAYER] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotinePlayer}, + [BG_GUILLOTINE_CONTESTS] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotineContests}, + [BG_ICE] = {gBattleAnimBgImage_Ice, gBattleAnimBgPalette_Ice, gBattleAnimBgTilemap_Ice}, + [BG_COSMIC] = {gBattleAnimBgImage_Cosmic, gBattleAnimBgPalette_Cosmic, gBattleAnimBgTilemap_Cosmic}, + [BG_IN_AIR] = {gBattleAnimBgImage_InAir, gBattleAnimBgPalette_InAir, gBattleAnimBgTilemap_InAir}, + [BG_SKY] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Sky, gBattleAnimBgTilemap_Drill}, + [BG_SKY_CONTESTS] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Sky, gBattleAnimBgTilemap_DrillContests}, + [BG_AURORA] = {gBattleAnimBgImage_Aurora, gBattleAnimBgPalette_Aurora, gBattleAnimBgTilemap_Aurora}, + [BG_FISSURE] = {gBattleAnimBgImage_Fissure, gBattleAnimBgPalette_Fissure, gBattleAnimBgTilemap_Fissure}, + [BG_BUG_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Bug, gBattleAnimBgTilemap_HighspeedOpponent}, + [BG_BUG_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Bug, gBattleAnimBgTilemap_HighspeedPlayer}, + [BG_SOLAR_BEAM_OPPONENT] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_SolarBeam, gBattleAnimBgTilemap_ImpactOpponent}, + [BG_SOLAR_BEAM_PLAYER] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_SolarBeam, gBattleAnimBgTilemap_ImpactPlayer}, + [BG_SOLAR_BEAM_CONTESTS] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_SolarBeam, gBattleAnimBgTilemap_ImpactContests}, + //new bgs + [BG_MAGMA_STORM] = {gBattleAnimBgImage_InAir, gBattleAnimBgPalette_MagmaStorm, gBattleAnimBgTilemap_InAir}, + [BG_GIGA_IMPACT_OPPONENT] = {gBattleAnimBgImage_GigaImpact, gBattleAnimBgPalette_GigaImpact, gBattleAnimBgTilemap_GigaImpactOpponent}, + [BG_GIGA_IMPACT_PLAYER] = {gBattleAnimBgImage_GigaImpact, gBattleAnimBgPalette_GigaImpact, gBattleAnimBgTilemap_GigaImpactPlayer}, + [BG_GIGA_IMPACT_CONTEST] = {gBattleAnimBgImage_GigaImpact, gBattleAnimBgPalette_GigaImpact, gBattleAnimBgTilemap_GigaImpactContest}, + [BG_TRICK_ROOM] = {gBattleAnimBgImage_TrickRoom, gBattleAnimBgPalette_TrickRoom, gBattleAnimBgTilemap_TrickRoom}, + [BG_ROCK_WRECKER] = {gBattleAnimBgImage_Hurricane, gBattleAnimBgPalette_RockWrecker, gBattleAnimBgTilemap_Hurricane}, + [BG_SPACIAL_REND_ON_OPPONENT] = {gBattleAnimBgImage_SpacialRend, gBattleAnimBgPalette_SpacialRend, gBattleAnimBgTilemap_GigaImpactOpponent}, + [BG_SPACIAL_REND_ON_PLAYER] = {gBattleAnimBgImage_SpacialRend, gBattleAnimBgPalette_SpacialRend, gBattleAnimBgTilemap_GigaImpactPlayer}, + [BG_DARK_VOID] = {gBattleAnimBgImage_Waterfall, gBattleAnimBgPalette_DarkVoid, gBattleAnimBgTilemap_DarkVoid}, + [BG_WATER] = {gBattleAnimBgImage_HydroPump, gBattleAnimBgPalette_HydroPump, gBattleAnimBgTilemap_HydroPump}, + [BG_NIGHTMARE] = {gBattleAnimBgImage_Nightmare, gBattleAnimBgPalette_Nightmare, gBattleAnimBgTilemap_Nightmare}, + [BG_LEAF_STORM] = {gBattleAnimBgImage_LeafStorm, gBattleAnimBgPalette_LeafStorm, gBattleAnimBgTilemap_LeafStorm}, + [BG_FIRE] = {gBattleAnimBgImage_Fire1, gBattleAnimBgPalette_Fire1, gBattleAnimBgTilemap_Fire1}, + [BG_FIRE_2] = {gBattleAnimBgImage_Fire1, gBattleAnimBgPalette_Fire2, gBattleAnimBgTilemap_Fire1}, + [BG_WATER_2] = {gBattleAnimBgImage_Waterfall, gBattleAnimBgPalette_Waterfall, gBattleAnimBgTilemap_Waterfall}, + [BG_POISON] = {gBattleAnimBgImage_Waterfall, gBattleAnimBgPalette_PoisonFalls, gBattleAnimBgTilemap_Waterfall}, + [BG_AEROBLAST] = {gBattleAnimBgImage_Aeroblast, gBattleAnimBgPalette_Aeroblast, gBattleAnimBgTilemap_Aeroblast}, + [BG_HURRICANE] = {gBattleAnimBgImage_Hurricane, gBattleAnimBgPalette_Hurricane, gBattleAnimBgTilemap_Hurricane}, + [BG_ELECTRIC_TERRAIN] = {gBattleAnimBgImage_ElectricTerrain, gBattleAnimBgPalette_ElectricTerrain, gBattleAnimBgTilemap_ElectricTerrain}, + [BG_GRASSY_TERRAIN] = {gBattleAnimBgImage_GrassyTerrain, gBattleAnimBgPalette_GrassyTerrain, gBattleAnimBgTilemap_GrassyTerrain}, + [BG_MISTY_TERRAIN] = {gBattleAnimBgImage_MistyTerrain, gBattleAnimBgPalette_MistyTerrain, gBattleAnimBgTilemap_MistyTerrain}, + [BG_PSYCHIC_TERRAIN] = {gBattleAnimBgImage_PsychicTerrain, gBattleAnimBgPalette_PsychicTerrain, gBattleAnimBgTilemap_PsychicTerrain}, + [BG_FOCUS_BLAST] = {gBattleAnimBgImage_FocusBlast, gBattleAnimBgPalette_FocusBlast, gBattleAnimBgTilemap_FocusBlast}, + [BG_GUNK_SHOT] = {gBattleAnimBgImage_FocusBlast, gBattleAnimBgPalette_GunkShot, gBattleAnimBgTilemap_FocusBlast}, + [BG_HYDRO_CANNON] = {gBattleAnimBgImage_HydroCannon, gBattleAnimBgPalette_HydroCannon, gBattleAnimBgTilemap_HydroCannon}, + [BG_WONDER_ROOM] = {gBattleAnimBgImage_TrickRoom, gBattleAnimBgPalette_WonderRoom, gBattleAnimBgTilemap_TrickRoom}, + [BG_MAGIC_ROOM] = {gBattleAnimBgImage_TrickRoom, gBattleAnimBgPalette_MagicRoom, gBattleAnimBgTilemap_TrickRoom}, + [BG_HYPERSPACE_FURY] = {gBattleAnimBgImage_Psychic, gBattleAnimBgPalette_HyperspaceFury, gBattleAnimBgTilemap_Psychic}, + [BG_BOLT_STRIKE] = {gBattleAnimBgImage_BoltStrike, gBattleAnimBgPalette_BoltStrike, gBattleAnimBgTilemap_BoltStrike}, + [BG_ZMOVE_ACTIVATE] = {gBattleAnimBgImage_ZMoveActivate, gBattleAnimBgPalette_ZMoveActivate, gBattleAnimBgTilemap_ZMoveActivate}, + [BG_TECTONIC_RAGE] = {gBattleAnimBgImage_InAir, gBattleAnimBgPalette_TectonicRage, gBattleAnimBgTilemap_InAir}, + [BG_BLUE_SKY_DAY] = {gBattleAnimBgImage_SkyDay, gBattleAnimBgPalette_SkyDay, gBattleAnimBgTilemap_SkyDay}, + [BG_BLUE_SKY_AFTERNOON] = {gBattleAnimBgImage_SkyDay, gBattleAnimBgPalette_SkyAfternoon, gBattleAnimBgTilemap_SkyDay}, + [BG_BLUE_SKY_NIGHT] = {gBattleAnimBgImage_SkyDay, gBattleAnimBgPalette_SkyNight, gBattleAnimBgTilemap_SkyDay}, + [BG_ZMOVE_MOUNTAIN] = {gBattleAnimBgImage_ZMoveMountain, gBattleAnimBgPalette_ZMoveMountain, gBattleAnimBgTilemap_ZMoveMountain}, + [BG_NEVERENDING_NIGHTMARE] = {gBattleAnimBgImage_NeverendingNightmare, gBattleAnimBgPalette_NeverendingNightmare, gBattleAnimBgTilemap_NeverendingNightmare}, + [BG_WATER_PULSE] = {gBattleAnimBgImage_WaterPulse, gBattleAnimBgPalette_WaterPulse, gBattleAnimBgTilemap_WaterPulse}, + [BG_INFERNO_OVERDRIVE] = {gBattleAnimBgImage_InfernoOverdrive, gBattleAnimBgPalette_InfernoOverdrive, gBattleAnimBgTilemap_InfernoOverdrive}, + [BG_BLOOM_DOOM] = {gBattleAnimBgImage_BloomDoom, gBattleAnimBgPalette_BloomDoom, gBattleAnimBgTilemap_BloomDoom}, + [BG_SHATTERED_PSYCHE] = {gBattleAnimBgImage_ShatteredPsyche, gBattleAnimBgPalette_ShatteredPsyche, gBattleAnimBgTilemap_ShatteredPsyche}, + [BG_TWINKLE_TACKLE] = {gBattleAnimBgImage_TwinkleTackle, gBattleAnimBgPalette_TwinkleTackle, gBattleAnimBgTilemap_TwinkleTackle}, + [BG_BLACKHOLE_ECLIPSE] = {gBattleAnimBgImage_BlackholeEclipse, gBattleAnimBgPalette_BlackholeEclipse, gBattleAnimBgTilemap_BlackholeEclipse}, + [BG_SOULSTEALING_7STAR_STRIKE] = {gBattleAnimBgImage_SoulStealing7StarStrike, gBattleAnimBgPalette_SoulStealing7StarStrike, gBattleAnimBgTilemap_SoulStealing7StarStrike}, + [BG_MALICIOUS_MOONSAULT] = {gBattleAnimBgImage_MaliciousMoonsault, gBattleAnimBgPalette_MaliciousMoonsault, gBattleAnimBgTilemap_MaliciousMoonsault}, + [BG_CLANGOROUS_SOULBLAZE] = {gBattleAnimBgImage_ClangorousSoulblaze, gBattleAnimBgPalette_ClangorousSoulblaze, gBattleAnimBgTilemap_ClangorousSoulblaze}, + [BG_SNUGGLE_FOREVER] = {gBattleAnimBgImage_SnuggleForever, gBattleAnimBgPalette_SnuggleForever, gBattleAnimBgTilemap_SnuggleForever}, + [BG_MAX_LIGHTNING] = {gBattleAnimBgImage_MaxLightning, gBattleAnimBgPalette_MaxLightning, gBattleAnimBgTilemap_MaxLightning}, + [BG_GARBAGE_FALLS] = {gBattleAnimBgImage_Waterfall, gBattleAnimBgPalette_GarbageFalls, gBattleAnimBgTilemap_Waterfall}, + [BG_HYPER_BEAM] = {gBattleAnimBgImage_HydroCannon, gBattleAnimBgPalette_HyperBeam, gBattleAnimBgTilemap_HydroCannon}, + [BG_DYNAMAX_CANNON] = {gBattleAnimBgImage_HydroCannon, gBattleAnimBgPalette_DynamaxCannon, gBattleAnimBgTilemap_HydroCannon}, + [BG_AURA_SPHERE] = {gBattleAnimBgImage_FocusBlast, gBattleAnimBgPalette_AuraSphere, gBattleAnimBgTilemap_FocusBlast}, + [BG_STEEL_BEAM_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedOpponent}, + [BG_STEEL_BEAM_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedPlayer}, +}; diff --git a/src/data/battle_frontier/apprentice.h b/src/data/battle_frontier/apprentice.h index 285946de45..408c3902d5 100644 --- a/src/data/battle_frontier/apprentice.h +++ b/src/data/battle_frontier/apprentice.h @@ -934,18 +934,18 @@ static const bool8 sValidApprenticeMoves[MOVES_COUNT] = // WHICH_MOVE has max 5 occurrences, defined as NUM_WHICH_MOVE_QUESTIONS // WHICH_FIRST has max 1 occurrence, lead mon should only be chosen once // WHICH_SPEECH has max 1 occurrence, as the apprentice leaves after its asked -static const u8 sQuestionPossibilities[MAX_APPRENTICE_QUESTIONS] = +static const u8 sQuestionPossibilities[MAX_APPRENTICE_QUESTIONS] = { QUESTION_ID_WHAT_ITEM, - QUESTION_ID_WHAT_ITEM, - QUESTION_ID_WHAT_ITEM, + QUESTION_ID_WHAT_ITEM, + QUESTION_ID_WHAT_ITEM, QUESTION_ID_WHICH_MOVE, - QUESTION_ID_WHICH_MOVE, - QUESTION_ID_WHICH_MOVE, - QUESTION_ID_WHICH_MOVE, - QUESTION_ID_WHICH_MOVE, - QUESTION_ID_WHICH_FIRST, - QUESTION_ID_WIN_SPEECH + QUESTION_ID_WHICH_MOVE, + QUESTION_ID_WHICH_MOVE, + QUESTION_ID_WHICH_MOVE, + QUESTION_ID_WHICH_MOVE, + QUESTION_ID_WHICH_FIRST, + QUESTION_ID_WIN_SPEECH }; static void (* const sApprenticeFunctions[])(void) = diff --git a/src/data/battle_frontier/battle_frontier_exchange_corner.h b/src/data/battle_frontier/battle_frontier_exchange_corner.h index d29dbdc445..426285e92e 100644 --- a/src/data/battle_frontier/battle_frontier_exchange_corner.h +++ b/src/data/battle_frontier/battle_frontier_exchange_corner.h @@ -1,51 +1,51 @@ static const u16 sFrontierExchangeCorner_Decor1[] = -{ - DECOR_KISS_POSTER, - DECOR_KISS_CUSHION, - DECOR_SMOOCHUM_DOLL, - DECOR_TOGEPI_DOLL, - DECOR_MEOWTH_DOLL, - DECOR_CLEFAIRY_DOLL, - DECOR_DITTO_DOLL, - DECOR_CYNDAQUIL_DOLL, - DECOR_CHIKORITA_DOLL, - DECOR_TOTODILE_DOLL, - 0xFFFF +{ + DECOR_KISS_POSTER, + DECOR_KISS_CUSHION, + DECOR_SMOOCHUM_DOLL, + DECOR_TOGEPI_DOLL, + DECOR_MEOWTH_DOLL, + DECOR_CLEFAIRY_DOLL, + DECOR_DITTO_DOLL, + DECOR_CYNDAQUIL_DOLL, + DECOR_CHIKORITA_DOLL, + DECOR_TOTODILE_DOLL, + 0xFFFF }; static const u16 sFrontierExchangeCorner_Decor2[] = -{ - DECOR_LAPRAS_DOLL, - DECOR_SNORLAX_DOLL, - DECOR_VENUSAUR_DOLL, - DECOR_CHARIZARD_DOLL, - DECOR_BLASTOISE_DOLL, - 0xFFFF +{ + DECOR_LAPRAS_DOLL, + DECOR_SNORLAX_DOLL, + DECOR_VENUSAUR_DOLL, + DECOR_CHARIZARD_DOLL, + DECOR_BLASTOISE_DOLL, + 0xFFFF }; static const u16 sFrontierExchangeCorner_Vitamins[] = -{ - ITEM_PROTEIN, - ITEM_CALCIUM, - ITEM_IRON, - ITEM_ZINC, - ITEM_CARBOS, - ITEM_HP_UP, - 0xFFFF +{ + ITEM_PROTEIN, + ITEM_CALCIUM, + ITEM_IRON, + ITEM_ZINC, + ITEM_CARBOS, + ITEM_HP_UP, + 0xFFFF }; static const u16 sFrontierExchangeCorner_HoldItems[] = -{ - ITEM_LEFTOVERS, - ITEM_WHITE_HERB, - ITEM_QUICK_CLAW, - ITEM_MENTAL_HERB, - ITEM_BRIGHT_POWDER, - ITEM_CHOICE_BAND, - ITEM_KINGS_ROCK, - ITEM_FOCUS_BAND, - ITEM_SCOPE_LENS, - 0xFFFF +{ + ITEM_LEFTOVERS, + ITEM_WHITE_HERB, + ITEM_QUICK_CLAW, + ITEM_MENTAL_HERB, + ITEM_BRIGHT_POWDER, + ITEM_CHOICE_BAND, + ITEM_KINGS_ROCK, + ITEM_FOCUS_BAND, + ITEM_SCOPE_LENS, + 0xFFFF }; static const u8 *const sFrontierExchangeCorner_Decor1Descriptions[] = @@ -63,7 +63,7 @@ static const u8 *const sFrontierExchangeCorner_Decor1Descriptions[] = gText_Exit, }; -static const u8 *const sFrontierExchangeCorner_Decor2Descriptions[] = +static const u8 *const sFrontierExchangeCorner_Decor2Descriptions[] = { BattleFrontier_ExchangeServiceCorner_Text_LargeDollDesc, BattleFrontier_ExchangeServiceCorner_Text_LargeDollDesc, @@ -73,7 +73,7 @@ static const u8 *const sFrontierExchangeCorner_Decor2Descriptions[] = gText_Exit }; -static const u8 *const sFrontierExchangeCorner_VitaminsDescriptions[] = +static const u8 *const sFrontierExchangeCorner_VitaminsDescriptions[] = { BattleFrontier_ExchangeServiceCorner_Text_ProteinDesc, BattleFrontier_ExchangeServiceCorner_Text_CalciumDesc, @@ -84,7 +84,7 @@ static const u8 *const sFrontierExchangeCorner_VitaminsDescriptions[] = gText_Exit }; -static const u8 *const sFrontierExchangeCorner_HoldItemsDescriptions[] = +static const u8 *const sFrontierExchangeCorner_HoldItemsDescriptions[] = { BattleFrontier_ExchangeServiceCorner_Text_LeftoversDesc, BattleFrontier_ExchangeServiceCorner_Text_WhiteHerbDesc, diff --git a/src/data/battle_frontier/battle_frontier_mons.h b/src/data/battle_frontier/battle_frontier_mons.h index e5e992794f..df0a7d9b27 100644 --- a/src/data/battle_frontier/battle_frontier_mons.h +++ b/src/data/battle_frontier/battle_frontier_mons.h @@ -962,7 +962,7 @@ const struct FacilityMon gBattleFrontierMons[NUM_FRONTIER_MONS] = [FRONTIER_MON_FARFETCHD] = { .species = SPECIES_FARFETCHD, .moves = {MOVE_SLASH, MOVE_KNOCK_OFF, MOVE_SWORDS_DANCE, MOVE_AGILITY}, - .itemTableId = BATTLE_FRONTIER_ITEM_STICK, + .itemTableId = BATTLE_FRONTIER_ITEM_LEEK, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_RELAXED }, diff --git a/src/data/battle_frontier/battle_frontier_trainer_mons.h b/src/data/battle_frontier/battle_frontier_trainer_mons.h index 183964f2d9..efd9ef84dd 100644 --- a/src/data/battle_frontier/battle_frontier_trainer_mons.h +++ b/src/data/battle_frontier/battle_frontier_trainer_mons.h @@ -343,7 +343,7 @@ FRONTIER_MON_SPINDA, \ FRONTIER_MON_CORSOLA, \ FRONTIER_MON_POLIWHIRL, \ - -1 + -1 #define FRONTIER_MONS_POKEFAN_M_1 \ FRONTIER_MON_SMOOCHUM, \ @@ -532,7 +532,7 @@ FRONTIER_MON_LEDIAN, \ FRONTIER_MON_ARIADOS, \ FRONTIER_MON_YANMA, \ - -1 + -1 #define FRONTIER_MONS_BUG_MANIAC_1 \ FRONTIER_MON_SHEDINJA, \ @@ -565,7 +565,7 @@ FRONTIER_MON_LEDIAN, \ FRONTIER_MON_ARIADOS, \ FRONTIER_MON_YANMA, \ - -1 + -1 #define FRONTIER_MONS_FISHERMAN_1 \ FRONTIER_MON_MAGIKARP, \ @@ -612,7 +612,7 @@ FRONTIER_MON_CORSOLA, \ FRONTIER_MON_MAWILE, \ FRONTIER_MON_ONIX, \ - -1 + -1 #define FRONTIER_MONS_PARASOL_LADY_1 \ FRONTIER_MON_SUNKERN, \ @@ -697,7 +697,7 @@ FRONTIER_MON_ELEKID, \ FRONTIER_MON_FLAAFFY, \ FRONTIER_MON_MAWILE, \ - -1 + -1 #define FRONTIER_MONS_BIRD_KEEPER_1 \ FRONTIER_MON_AZURILL, \ @@ -769,7 +769,7 @@ FRONTIER_MON_CORSOLA, \ FRONTIER_MON_POLIWHIRL, \ FRONTIER_MON_ONIX, \ - -1 + -1 #define FRONTIER_MONS_HIKER_1 \ FRONTIER_MON_TYROGUE, \ @@ -799,7 +799,7 @@ FRONTIER_MON_LOUDRED, \ FRONTIER_MON_NOSEPASS, \ FRONTIER_MON_ONIX, \ - -1 + -1 #define FRONTIER_MONS_KINDLER_1 \ FRONTIER_MON_SLUGMA, \ @@ -823,7 +823,7 @@ FRONTIER_MON_NOSEPASS, \ FRONTIER_MON_MAWILE, \ FRONTIER_MON_ONIX, \ - -1 + -1 #define FRONTIER_MONS_RUNNING_TRIATHLETE_1 \ FRONTIER_MON_AZURILL, \ @@ -870,7 +870,7 @@ FRONTIER_MON_LOUDRED, \ FRONTIER_MON_SPINDA, \ FRONTIER_MON_ONIX, \ - -1 + -1 #define FRONTIER_MONS_SWIMMING_TRIATHLETE_1 \ FRONTIER_MON_TYROGUE, \ @@ -905,7 +905,7 @@ FRONTIER_MON_SPINDA, \ FRONTIER_MON_CORSOLA, \ FRONTIER_MON_POLIWHIRL, \ - -1 + -1 #define FRONTIER_MONS_CYCLING_TRIATHLETE_1 \ FRONTIER_MON_PICHU, \ @@ -937,7 +937,7 @@ FRONTIER_MON_SPINDA, \ FRONTIER_MON_FLAAFFY, \ FRONTIER_MON_MAWILE, \ - -1 + -1 #define FRONTIER_MONS_RUNNING_TRIATHLETE_2 \ FRONTIER_MON_DELCATTY_1, \ @@ -974,7 +974,7 @@ FRONTIER_MON_STANTLER_1, \ FRONTIER_MON_PIDGEOT_1, \ FRONTIER_MON_SCYTHER_1, \ - -1 + -1 #define FRONTIER_MONS_SWIMMING_TRIATHLETE_2 \ FRONTIER_MON_WAILMER_1, \ @@ -1008,7 +1008,7 @@ FRONTIER_MON_POLIWRATH_1, \ FRONTIER_MON_POLITOED_1, \ FRONTIER_MON_CLOYSTER_1, \ - -1 + -1 #define FRONTIER_MONS_CYCLING_TRIATHLETE_2 \ FRONTIER_MON_DELCATTY_1, \ @@ -1042,7 +1042,7 @@ FRONTIER_MON_MAGNETON_1, \ FRONTIER_MON_STANTLER_1, \ FRONTIER_MON_PIDGEOT_1, \ - -1 + -1 #define FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 \ FRONTIER_MON_LICKITUNG_1, \ @@ -1085,7 +1085,7 @@ FRONTIER_MON_TORKOAL_1, \ FRONTIER_MON_CACTURNE_1, \ FRONTIER_MON_POLIWRATH_1, \ - -1 + -1 #define FRONTIER_MONS_EXPERT_1A \ FRONTIER_MON_DELCATTY_1, \ @@ -1126,7 +1126,7 @@ FRONTIER_MON_RATICATE_1, \ FRONTIER_MON_MASQUERAIN_1, \ FRONTIER_MON_FURRET_1, \ - -1 + -1 #define FRONTIER_MONS_EXPERT_1B \ FRONTIER_MON_DUNSPARCE_1, \ @@ -1166,7 +1166,7 @@ FRONTIER_MON_HITMONCHAN_1, \ FRONTIER_MON_GIRAFARIG_1, \ FRONTIER_MON_HITMONTOP_1, \ - -1 + -1 #define FRONTIER_MONS_EXPERT_1C \ FRONTIER_MON_BANETTE_1, \ @@ -1199,7 +1199,7 @@ FRONTIER_MON_PINSIR_1, \ FRONTIER_MON_POLITOED_1, \ FRONTIER_MON_CLOYSTER_1, \ - -1 + -1 #define FRONTIER_MONS_PSYCHIC_1 \ FRONTIER_MON_DELCATTY_2, \ @@ -1235,7 +1235,7 @@ FRONTIER_MON_CACTURNE_2, \ FRONTIER_MON_GOREBYSS_2, \ FRONTIER_MON_POLITOED_2, \ - -1 + -1 #define FRONTIER_MONS_HEX_MANIAC_1 \ FRONTIER_MON_SABLEYE_2, \ @@ -1265,7 +1265,7 @@ FRONTIER_MON_CRAWDAUNT_2, \ FRONTIER_MON_GRUMPIG_2, \ FRONTIER_MON_CACTURNE_2, \ - -1 + -1 #define FRONTIER_MONS_POKEMANIAC_1 \ FRONTIER_MON_LICKITUNG_2, \ @@ -1299,7 +1299,7 @@ FRONTIER_MON_MANTINE_2, \ FRONTIER_MON_SWALOT_2, \ FRONTIER_MON_TORKOAL_2, \ - -1 + -1 #define FRONTIER_MONS_GENTLEMAN_1A \ FRONTIER_MON_DELCATTY_2, \ @@ -1340,7 +1340,7 @@ FRONTIER_MON_RATICATE_2, \ FRONTIER_MON_MASQUERAIN_2, \ FRONTIER_MON_FURRET_2, \ - -1 + -1 #define FRONTIER_MONS_GENTLEMAN_1B \ FRONTIER_MON_DUNSPARCE_2, \ @@ -1380,7 +1380,7 @@ FRONTIER_MON_HITMONCHAN_2, \ FRONTIER_MON_GIRAFARIG_2, \ FRONTIER_MON_HITMONTOP_2, \ - -1 + -1 #define FRONTIER_MONS_BUG_MANIAC_2 \ FRONTIER_MON_LEDIAN, \ @@ -1402,7 +1402,7 @@ FRONTIER_MON_NINJASK_2, \ FRONTIER_MON_SCYTHER_2, \ FRONTIER_MON_PINSIR_2, \ - -1 + -1 #define FRONTIER_MONS_RUIN_MANIAC_2 \ FRONTIER_MON_GRAVELER_2, \ @@ -1427,7 +1427,7 @@ FRONTIER_MON_RELICANTH_2, \ FRONTIER_MON_OMASTAR_2, \ FRONTIER_MON_KABUTOPS_2, \ - -1 + -1 #define FRONTIER_MONS_COLLECTOR_1 \ FRONTIER_MON_BANETTE_2, \ @@ -1460,7 +1460,7 @@ FRONTIER_MON_PINSIR_2, \ FRONTIER_MON_POLITOED_2, \ FRONTIER_MON_CLOYSTER_2, \ - -1 + -1 #define FRONTIER_MONS_PARASOL_LADY_2 \ FRONTIER_MON_GLOOM_2, \ @@ -1475,7 +1475,7 @@ FRONTIER_MON_HUNTAIL_2, \ FRONTIER_MON_GOREBYSS_2, \ FRONTIER_MON_OMASTAR_2, \ - -1 + -1 #define FRONTIER_MONS_BEAUTY_1 \ FRONTIER_MON_DELCATTY_2, \ @@ -1509,7 +1509,7 @@ FRONTIER_MON_STANTLER_2, \ FRONTIER_MON_SWALOT_2, \ FRONTIER_MON_PIDGEOT_2, \ - -1 + -1 #define FRONTIER_MONS_AROMA_LADY_2 \ FRONTIER_MON_WEEPINBELL_2, \ @@ -1530,7 +1530,7 @@ FRONTIER_MON_GRUMPIG_2, \ FRONTIER_MON_CACTURNE_2, \ FRONTIER_MON_BELLOSSOM_2, \ - -1 + -1 #define FRONTIER_MONS_COOLTRAINER_1A \ FRONTIER_MON_DUGTRIO_1, \ @@ -1566,7 +1566,7 @@ FRONTIER_MON_GOLEM_1, \ FRONTIER_MON_RHYDON_1, \ FRONTIER_MON_ALAKAZAM_1, \ - -1 + -1 #define FRONTIER_MONS_COOLTRAINER_1B \ FRONTIER_MON_WEEZING_1, \ @@ -1602,7 +1602,7 @@ FRONTIER_MON_AERODACTYL_1, \ FRONTIER_MON_PORYGON2_1, \ FRONTIER_MON_GARDEVOIR_1, \ - -1 + -1 #define FRONTIER_MONS_COOLTRAINER_1C \ FRONTIER_MON_EXEGGUTOR_1, \ @@ -1635,7 +1635,7 @@ FRONTIER_MON_SALAMENCE_1, \ FRONTIER_MON_METAGROSS_1, \ FRONTIER_MON_SLAKING_1, \ - -1 + -1 #define FRONTIER_MONS_PKMN_RANGER_1 \ FRONTIER_MON_NINJASK_1, \ @@ -1767,7 +1767,7 @@ FRONTIER_MON_SALAMENCE_1, \ FRONTIER_MON_METAGROSS_1, \ FRONTIER_MON_SLAKING_1, \ - -1 + -1 #define FRONTIER_MONS_PKMN_BREEDER_F_1 \ FRONTIER_MON_DUGTRIO_1, \ @@ -1818,7 +1818,7 @@ FRONTIER_MON_ARMALDO_1, \ FRONTIER_MON_GOLDUCK_1, \ FRONTIER_MON_RAPIDASH_1, \ - -1 + -1 // Odd, all the other Youngster/Lass trainers of this group have Dugtrio, but one does not #define FRONTIER_MONS_YOUNGSTER_LASS_2_NO_DUGTRIO \ @@ -1854,7 +1854,7 @@ FRONTIER_MON_GOLEM_2, \ FRONTIER_MON_RHYDON_2, \ FRONTIER_MON_ALAKAZAM_2, \ - -1 + -1 #define FRONTIER_MONS_YOUNGSTER_LASS_2 \ FRONTIER_MON_DUGTRIO_2, \ @@ -1927,7 +1927,7 @@ FRONTIER_MON_SALAMENCE_2, \ FRONTIER_MON_METAGROSS_2, \ FRONTIER_MON_SLAKING_2, \ - -1 + -1 #define FRONTIER_MONS_BUG_CATCHER_2 \ FRONTIER_MON_NINJASK_2, \ @@ -1953,7 +1953,7 @@ FRONTIER_MON_VENUSAUR_2, \ FRONTIER_MON_MEGANIUM_2, \ FRONTIER_MON_SCEPTILE_2, \ - -1 + -1 #define FRONTIER_MONS_NINJA_BOY_2 \ FRONTIER_MON_PARASECT_2, \ @@ -1988,7 +1988,7 @@ FRONTIER_MON_VENUSAUR_2, \ FRONTIER_MON_ESPEON_2, \ FRONTIER_MON_CROBAT_2, \ - -1 + -1 #define FRONTIER_MONS_TUBER_2 \ FRONTIER_MON_QUAGSIRE_2, \ @@ -2068,7 +2068,7 @@ FRONTIER_MON_WAILORD_3, \ FRONTIER_MON_TENTACRUEL_3, \ FRONTIER_MON_STARMIE_3, \ - -1 + -1 #define FRONTIER_MONS_RUIN_MANIAC_3 \ FRONTIER_MON_DUGTRIO_3, \ @@ -2093,7 +2093,7 @@ FRONTIER_MON_AGGRON_3, \ FRONTIER_MON_SWAMPERT_3, \ FRONTIER_MON_METAGROSS_3, \ - -1 + -1 #define FRONTIER_MONS_COLLECTOR_2 \ FRONTIER_MON_DUGTRIO_3, \ @@ -2144,7 +2144,7 @@ FRONTIER_MON_ARMALDO_3, \ FRONTIER_MON_GOLDUCK_3, \ FRONTIER_MON_RAPIDASH_3, \ - -1 + -1 #define FRONTIER_MONS_GUITARIST_2 \ FRONTIER_MON_SABLEYE_2, \ @@ -2162,7 +2162,7 @@ FRONTIER_MON_HOUNDOOM_3, \ FRONTIER_MON_JOLTEON_3, \ FRONTIER_MON_UMBREON_3, \ - -1 + -1 #define FRONTIER_MONS_BIRD_KEEPER_2 \ FRONTIER_MON_MURKROW_2, \ @@ -2234,7 +2234,7 @@ FRONTIER_MON_AERODACTYL_3, \ FRONTIER_MON_AGGRON_3, \ FRONTIER_MON_BLAZIKEN_3, \ - -1 + -1 #define FRONTIER_MONS_KINDLER_2 \ FRONTIER_MON_GRANBULL_3, \ @@ -2256,7 +2256,7 @@ FRONTIER_MON_BLISSEY_3, \ FRONTIER_MON_ARCANINE_3, \ FRONTIER_MON_SLAKING_3, \ - -1 + -1 #define FRONTIER_MONS_GENTLEMAN_2 \ FRONTIER_MON_MUK_3, \ @@ -2307,7 +2307,7 @@ FRONTIER_MON_SALAMENCE_3, \ FRONTIER_MON_METAGROSS_3, \ FRONTIER_MON_SLAKING_3, \ - -1 + -1 #define FRONTIER_MONS_YOUNGSTER_LASS_3 \ FRONTIER_MON_DUGTRIO_4, \ @@ -2343,7 +2343,7 @@ FRONTIER_MON_GOLEM_4, \ FRONTIER_MON_RHYDON_4, \ FRONTIER_MON_ALAKAZAM_4, \ - -1 + -1 #define FRONTIER_MONS_CAMPER_PICNICKER_2 \ FRONTIER_MON_WEEZING_4, \ @@ -2417,7 +2417,7 @@ FRONTIER_MON_BLISSEY_4, \ FRONTIER_MON_MILOTIC_4, \ FRONTIER_MON_SLAKING_4, \ - -1 + -1 #define FRONTIER_MONS_SWIMMER_F_2 \ FRONTIER_MON_GRANBULL_4, \ @@ -3017,7 +3017,7 @@ FRONTIER_MON_MANECTRIC_4, \ FRONTIER_MON_VILEPLUME_4, \ FRONTIER_MON_VICTREEBEL_4, \ - -1 + -1 #define FRONTIER_MONS_COOLTRAINER_F_2B \ FRONTIER_MON_ELECTRODE_1, \ @@ -3418,7 +3418,7 @@ FRONTIER_MON_SALAMENCE_2, \ FRONTIER_MON_METAGROSS_2, \ FRONTIER_MON_SLAKING_2, \ - -1 + -1 // Similar to FRONTIER_MONS_GENERAL_C but _1 (would be identical if not for re-ordering) // Used by Pkmn Ranger, Running Triathlete, Cycling Triathlete @@ -4066,7 +4066,7 @@ FRONTIER_MON_TYRANITAR_8, \ FRONTIER_MON_TYRANITAR_9, \ FRONTIER_MON_TYRANITAR_10, \ - -1 + -1 // For this group, Expert M uses Tyranitar, Expert F uses Dragonite #define FRONTIER_MONS_EXPERT_2C(lastmon) \ @@ -4170,7 +4170,7 @@ FRONTIER_MON_##lastmon##_8, \ FRONTIER_MON_##lastmon##_9, \ FRONTIER_MON_##lastmon##_10,\ - -1 + -1 // The strong Psychic M/F trainers all use the below pokemon // Additionally they use 1 of 3 legendary trios, and Latios or Latias depending on gender @@ -4270,7 +4270,7 @@ FRONTIER_MON_ZAPDOS_6, \ FRONTIER_MON_MOLTRES_5, \ FRONTIER_MON_MOLTRES_6, \ - -1 + -1 #define FRONTIER_MONS_PSYCHIC_2B(lati) \ FRONTIER_MONS_PSYCHIC_2(lati, RAIKOU, ENTEI, SUICUNE) \ @@ -4284,7 +4284,7 @@ FRONTIER_MON_ENTEI_6, \ FRONTIER_MON_SUICUNE_5, \ FRONTIER_MON_SUICUNE_6, \ - -1 + -1 // Because the regis/latis are swapped here they cant all be merged into the same macro and match #define FRONTIER_MONS_PSYCHIC_2C(lati) \ @@ -4299,7 +4299,7 @@ FRONTIER_MON_##lati##_6, \ FRONTIER_MON_##lati##_7, \ FRONTIER_MON_##lati##_8, \ - -1 + -1 #define FRONTIER_MONS_HEX_MANIAC_2A \ FRONTIER_MON_SHARPEDO_2, \ @@ -4332,7 +4332,7 @@ FRONTIER_MON_GENGAR_6, \ FRONTIER_MON_GENGAR_7, \ FRONTIER_MON_GENGAR_8, \ - -1 + -1 #define FRONTIER_MONS_HEX_MANIAC_2B \ FRONTIER_MON_SEVIPER_2, \ @@ -4388,7 +4388,7 @@ FRONTIER_MON_GENGAR_6, \ FRONTIER_MON_GENGAR_7, \ FRONTIER_MON_GENGAR_8, \ - -1 + -1 #define FRONTIER_MONS_HEX_MANIAC_2C \ FRONTIER_MON_SEVIPER_2, \ @@ -4450,7 +4450,7 @@ FRONTIER_MON_GENGAR_6, \ FRONTIER_MON_GENGAR_7, \ FRONTIER_MON_GENGAR_8, \ - -1 + -1 // For whatever reason FRONTIER_MON_MAROWAK_2 is in a different order than _1 _3 and _4 // This order change is the only difference btween FRONITER_MONS_POKEMANIAC_2A and FRONTIER_MONS_POKEMANIAC_2B other than the numbered suffixes @@ -4542,7 +4542,7 @@ FRONTIER_MON_TYRANITAR_8, \ FRONTIER_MON_TYRANITAR_9, \ FRONTIER_MON_TYRANITAR_10, \ - -1 + -1 #define FRONTIER_MONS_POKEMANIAC_2B \ FRONTIER_MON_ZANGOOSE_2, \ @@ -4828,7 +4828,7 @@ FRONTIER_MON_TYRANITAR_8, \ FRONTIER_MON_TYRANITAR_9, \ FRONTIER_MON_TYRANITAR_10, \ - -1 + -1 // Identical to FRONTIER_MONS_COOLTRAINER_2D but with both latias and latios #define FRONTIER_MONS_GENTLEMAN_3B \ @@ -4922,7 +4922,7 @@ FRONTIER_MON_ENTEI_6, \ FRONTIER_MON_SUICUNE_5, \ FRONTIER_MON_SUICUNE_6, \ - -1 + -1 #define FRONTIER_MONS_SWIMMING_TRIATHLETE_M_3 \ FRONTIER_MON_SNEASEL_2, \ @@ -5005,7 +5005,7 @@ FRONTIER_MON_LAPRAS_6, \ FRONTIER_MON_LAPRAS_7, \ FRONTIER_MON_LAPRAS_8, \ - -1 + -1 #define FRONTIER_MONS_SWIMMING_TRIATHLETE_F_3 \ FRONTIER_MON_SNEASEL_2, \ @@ -5119,7 +5119,7 @@ FRONTIER_MON_SCIZOR_4, \ FRONTIER_MON_HERACROSS_4, \ FRONTIER_MON_SHUCKLE_4, \ - -1 + -1 #define FRONTIER_MONS_FISHERMAN_3 \ FRONTIER_MON_SEAKING_2, \ @@ -5229,7 +5229,7 @@ FRONTIER_MON_REGICE_6, \ FRONTIER_MON_REGISTEEL_5, \ FRONTIER_MON_REGISTEEL_6, \ - -1 + -1 #define FRONTIER_MONS_COLLECTOR_3 \ FRONTIER_MON_VENUSAUR_1, \ @@ -5268,7 +5268,7 @@ FRONTIER_MON_CHARIZARD_4, \ FRONTIER_MON_TYPHLOSION_4, \ FRONTIER_MON_SWAMPERT_4, \ - -1 + -1 #define FRONTIER_MONS_GUITARIST_3A \ FRONTIER_MON_ABSOL_2, \ @@ -5330,7 +5330,7 @@ FRONTIER_MON_ZAPDOS_6, \ FRONTIER_MON_MOLTRES_5, \ FRONTIER_MON_MOLTRES_6, \ - -1 + -1 #define FRONTIER_MONS_GUITARIST_3B \ FRONTIER_MON_MISDREAVUS_1, \ @@ -5368,7 +5368,7 @@ FRONTIER_MON_LATIAS_6, \ FRONTIER_MON_LATIOS_5, \ FRONTIER_MON_LATIOS_6, \ - -1 + -1 #define FRONTIER_MONS_BIRD_KEEPER_3 \ FRONTIER_MON_PIDGEOT_2, \ @@ -5432,7 +5432,7 @@ FRONTIER_MON_SALAMENCE_6, \ FRONTIER_MON_SALAMENCE_7, \ FRONTIER_MON_SALAMENCE_8, \ - -1 + -1 #define FRONTIER_MONS_SAILOR_3 \ FRONTIER_MON_MEDICHAM_1, \ @@ -5515,7 +5515,7 @@ FRONTIER_MON_LAPRAS_6, \ FRONTIER_MON_LAPRAS_7, \ FRONTIER_MON_LAPRAS_8, \ - -1 + -1 #define FRONTIER_MONS_HIKER_3 \ FRONTIER_MON_DUGTRIO_1, \ @@ -5596,7 +5596,7 @@ FRONTIER_MON_TYRANITAR_8, \ FRONTIER_MON_TYRANITAR_9, \ FRONTIER_MON_TYRANITAR_10, \ - -1 + -1 #define FRONTIER_MONS_KINDLER_3 \ FRONTIER_MON_MISDREAVUS_1, \ @@ -5661,7 +5661,7 @@ FRONTIER_MON_DRAGONITE_8, \ FRONTIER_MON_DRAGONITE_9, \ FRONTIER_MON_DRAGONITE_10, \ - -1 + -1 #define FRONTIER_MONS_PARASOL_LADY_3 \ FRONTIER_MON_GLALIE_1, \ @@ -5699,7 +5699,7 @@ FRONTIER_MON_HOUNDOOM_4, \ FRONTIER_MON_VENUSAUR_4, \ FRONTIER_MON_FLAREON_4, \ - -1 + -1 // Only used by one Beauty #define FRONTIER_MONS_EEVEELUTIONS \ @@ -5723,7 +5723,7 @@ FRONTIER_MON_FLAREON_4, \ FRONTIER_MON_ESPEON_4, \ FRONTIER_MON_UMBREON_4, \ - -1 + -1 #define FRONTIER_MONS_BEAUTY_2 \ FRONTIER_MON_JYNX_1, \ @@ -5765,7 +5765,7 @@ FRONTIER_MON_LAPRAS_8, \ FRONTIER_MON_SALAMENCE_8, \ FRONTIER_MON_LATIAS_6, \ - -1 + -1 #define FRONTIER_MONS_AROMA_LADY_3 \ FRONTIER_MON_WOBBUFFET_1, \ @@ -5863,1507 +5863,1507 @@ FRONTIER_MON_STARMIE_6, \ FRONTIER_MON_STARMIE_7, \ FRONTIER_MON_STARMIE_8, \ - -1 + -1 -const u16 gBattleFrontierTrainerMons_Brady[] = +const u16 gBattleFrontierTrainerMons_Brady[] = { FRONTIER_MONS_YOUNGSTER_LASS_1 }; -const u16 gBattleFrontierTrainerMons_Conner[] = +const u16 gBattleFrontierTrainerMons_Conner[] = { FRONTIER_MONS_YOUNGSTER_LASS_1 }; -const u16 gBattleFrontierTrainerMons_Bradley[] = +const u16 gBattleFrontierTrainerMons_Bradley[] = { FRONTIER_MONS_YOUNGSTER_LASS_1 }; -const u16 gBattleFrontierTrainerMons_Cybil[] = +const u16 gBattleFrontierTrainerMons_Cybil[] = { FRONTIER_MONS_YOUNGSTER_LASS_1 }; -const u16 gBattleFrontierTrainerMons_Rodette[] = +const u16 gBattleFrontierTrainerMons_Rodette[] = { FRONTIER_MONS_YOUNGSTER_LASS_1 }; -const u16 gBattleFrontierTrainerMons_Peggy[] = +const u16 gBattleFrontierTrainerMons_Peggy[] = { FRONTIER_MONS_YOUNGSTER_LASS_1 }; -const u16 gBattleFrontierTrainerMons_Keith[] = +const u16 gBattleFrontierTrainerMons_Keith[] = { FRONTIER_MONS_SCHOOL_KID_1 }; -const u16 gBattleFrontierTrainerMons_Grayson[] = +const u16 gBattleFrontierTrainerMons_Grayson[] = { FRONTIER_MONS_SCHOOL_KID_1 }; -const u16 gBattleFrontierTrainerMons_Glenn[] = +const u16 gBattleFrontierTrainerMons_Glenn[] = { FRONTIER_MONS_SCHOOL_KID_1 }; -const u16 gBattleFrontierTrainerMons_Liliana[] = +const u16 gBattleFrontierTrainerMons_Liliana[] = { FRONTIER_MONS_SCHOOL_KID_1 }; -const u16 gBattleFrontierTrainerMons_Elise[] = +const u16 gBattleFrontierTrainerMons_Elise[] = { FRONTIER_MONS_SCHOOL_KID_1 }; -const u16 gBattleFrontierTrainerMons_Zoey[] = +const u16 gBattleFrontierTrainerMons_Zoey[] = { FRONTIER_MONS_SCHOOL_KID_1 }; -const u16 gBattleFrontierTrainerMons_Manuel[] = +const u16 gBattleFrontierTrainerMons_Manuel[] = { FRONTIER_MONS_RICH_BOY_LADY_1 }; -const u16 gBattleFrontierTrainerMons_Russ[] = +const u16 gBattleFrontierTrainerMons_Russ[] = { FRONTIER_MONS_RICH_BOY_LADY_1 }; -const u16 gBattleFrontierTrainerMons_Dustin[] = +const u16 gBattleFrontierTrainerMons_Dustin[] = { FRONTIER_MONS_RICH_BOY_LADY_1 }; -const u16 gBattleFrontierTrainerMons_Tina[] = +const u16 gBattleFrontierTrainerMons_Tina[] = { FRONTIER_MONS_RICH_BOY_LADY_1 }; -const u16 gBattleFrontierTrainerMons_Gillian[] = +const u16 gBattleFrontierTrainerMons_Gillian[] = { FRONTIER_MONS_RICH_BOY_LADY_1 }; -const u16 gBattleFrontierTrainerMons_Zoe[] = +const u16 gBattleFrontierTrainerMons_Zoe[] = { FRONTIER_MONS_RICH_BOY_LADY_1 }; -const u16 gBattleFrontierTrainerMons_Chen[] = +const u16 gBattleFrontierTrainerMons_Chen[] = { FRONTIER_MONS_CAMPER_PICNICKER_1 }; -const u16 gBattleFrontierTrainerMons_Al[] = +const u16 gBattleFrontierTrainerMons_Al[] = { FRONTIER_MONS_CAMPER_PICNICKER_1 }; -const u16 gBattleFrontierTrainerMons_Mitch[] = -{ - FRONTIER_MONS_CAMPER_PICNICKER_1 -}; - -const u16 gBattleFrontierTrainerMons_Anne[] = +const u16 gBattleFrontierTrainerMons_Mitch[] = { FRONTIER_MONS_CAMPER_PICNICKER_1 }; -const u16 gBattleFrontierTrainerMons_Alize[] = +const u16 gBattleFrontierTrainerMons_Anne[] = { FRONTIER_MONS_CAMPER_PICNICKER_1 }; -const u16 gBattleFrontierTrainerMons_Lauren[] = +const u16 gBattleFrontierTrainerMons_Alize[] = { - FRONTIER_MONS_CAMPER_PICNICKER_1 + FRONTIER_MONS_CAMPER_PICNICKER_1 }; -const u16 gBattleFrontierTrainerMons_Kipp[] = +const u16 gBattleFrontierTrainerMons_Lauren[] = +{ + FRONTIER_MONS_CAMPER_PICNICKER_1 +}; + +const u16 gBattleFrontierTrainerMons_Kipp[] = { FRONTIER_MONS_TUBER_1 }; -const u16 gBattleFrontierTrainerMons_Jason[] = +const u16 gBattleFrontierTrainerMons_Jason[] = { FRONTIER_MONS_TUBER_1 }; -const u16 gBattleFrontierTrainerMons_John[] = +const u16 gBattleFrontierTrainerMons_John[] = { FRONTIER_MONS_TUBER_1 }; -const u16 gBattleFrontierTrainerMons_Ann[] = +const u16 gBattleFrontierTrainerMons_Ann[] = { FRONTIER_MONS_TUBER_1 }; -const u16 gBattleFrontierTrainerMons_Eileen[] = +const u16 gBattleFrontierTrainerMons_Eileen[] = { FRONTIER_MONS_TUBER_1 }; -const u16 gBattleFrontierTrainerMons_Carlie[] = +const u16 gBattleFrontierTrainerMons_Carlie[] = { FRONTIER_MONS_TUBER_1 }; -const u16 gBattleFrontierTrainerMons_Gordon[] = +const u16 gBattleFrontierTrainerMons_Gordon[] = { FRONTIER_MONS_SWIMMER_M_1 }; -const u16 gBattleFrontierTrainerMons_Ayden[] = +const u16 gBattleFrontierTrainerMons_Ayden[] = { FRONTIER_MONS_SWIMMER_M_1 }; -const u16 gBattleFrontierTrainerMons_Marco[] = +const u16 gBattleFrontierTrainerMons_Marco[] = { FRONTIER_MONS_SWIMMER_M_1 }; -const u16 gBattleFrontierTrainerMons_Cierra[] = +const u16 gBattleFrontierTrainerMons_Cierra[] = { FRONTIER_MONS_SWIMMER_F_1 }; -const u16 gBattleFrontierTrainerMons_Marcy[] = +const u16 gBattleFrontierTrainerMons_Marcy[] = { FRONTIER_MONS_SWIMMER_F_1 }; -const u16 gBattleFrontierTrainerMons_Kathy[] = +const u16 gBattleFrontierTrainerMons_Kathy[] = { FRONTIER_MONS_SWIMMER_F_1 }; -const u16 gBattleFrontierTrainerMons_Peyton[] = +const u16 gBattleFrontierTrainerMons_Peyton[] = { FRONTIER_MONS_POKEFAN_M_1 }; -const u16 gBattleFrontierTrainerMons_Julian[] = +const u16 gBattleFrontierTrainerMons_Julian[] = { FRONTIER_MONS_POKEFAN_M_1 }; -const u16 gBattleFrontierTrainerMons_Quinn[] = +const u16 gBattleFrontierTrainerMons_Quinn[] = { FRONTIER_MONS_POKEFAN_M_1 }; -const u16 gBattleFrontierTrainerMons_Haylee[] = +const u16 gBattleFrontierTrainerMons_Haylee[] = { - FRONTIER_MONS_POKEFAN_F_1 + FRONTIER_MONS_POKEFAN_F_1 }; -const u16 gBattleFrontierTrainerMons_Amanda[] = +const u16 gBattleFrontierTrainerMons_Amanda[] = { - FRONTIER_MONS_POKEFAN_F_1 + FRONTIER_MONS_POKEFAN_F_1 }; -const u16 gBattleFrontierTrainerMons_Stacy[] = +const u16 gBattleFrontierTrainerMons_Stacy[] = { FRONTIER_MONS_POKEFAN_F_1 }; // The below 6 are the early Pkmn Breeder class trainers, which use groups from other general classes -const u16 gBattleFrontierTrainerMons_Rafael[] = +const u16 gBattleFrontierTrainerMons_Rafael[] = { FRONTIER_MONS_YOUNGSTER_LASS_1 }; -const u16 gBattleFrontierTrainerMons_Oliver[] = +const u16 gBattleFrontierTrainerMons_Oliver[] = { FRONTIER_MONS_SCHOOL_KID_1 }; -const u16 gBattleFrontierTrainerMons_Payton[] = +const u16 gBattleFrontierTrainerMons_Payton[] = { FRONTIER_MONS_CAMPER_PICNICKER_1 }; -const u16 gBattleFrontierTrainerMons_Pamela[] = +const u16 gBattleFrontierTrainerMons_Pamela[] = { FRONTIER_MONS_YOUNGSTER_LASS_1 }; -const u16 gBattleFrontierTrainerMons_Eliza[] = +const u16 gBattleFrontierTrainerMons_Eliza[] = { - FRONTIER_MONS_SCHOOL_KID_1 + FRONTIER_MONS_SCHOOL_KID_1 }; -const u16 gBattleFrontierTrainerMons_Marisa[] = +const u16 gBattleFrontierTrainerMons_Marisa[] = { - FRONTIER_MONS_CAMPER_PICNICKER_1 + FRONTIER_MONS_CAMPER_PICNICKER_1 }; -const u16 gBattleFrontierTrainerMons_Lewis[] = +const u16 gBattleFrontierTrainerMons_Lewis[] = { FRONTIER_MONS_BUG_CATCHER_1_EXTRA(METAPOD, KAKUNA) }; -const u16 gBattleFrontierTrainerMons_Yoshi[] = +const u16 gBattleFrontierTrainerMons_Yoshi[] = { - FRONTIER_MONS_BUG_CATCHER_1_EXTRA(SILCOON, CASCOON) + FRONTIER_MONS_BUG_CATCHER_1_EXTRA(SILCOON, CASCOON) }; -const u16 gBattleFrontierTrainerMons_Destin[] = +const u16 gBattleFrontierTrainerMons_Destin[] = { FRONTIER_MONS_BUG_CATCHER_1 }; -const u16 gBattleFrontierTrainerMons_Keon[] = +const u16 gBattleFrontierTrainerMons_Keon[] = { FRONTIER_MONS_NINJA_BOY_1 }; -const u16 gBattleFrontierTrainerMons_Stuart[] = +const u16 gBattleFrontierTrainerMons_Stuart[] = { FRONTIER_MONS_NINJA_BOY_1 }; -const u16 gBattleFrontierTrainerMons_Nestor[] = +const u16 gBattleFrontierTrainerMons_Nestor[] = { - FRONTIER_MONS_NINJA_BOY_1 + FRONTIER_MONS_NINJA_BOY_1 }; -const u16 gBattleFrontierTrainerMons_Derrick[] = +const u16 gBattleFrontierTrainerMons_Derrick[] = { FRONTIER_MONS_BUG_MANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Bryson[] = +const u16 gBattleFrontierTrainerMons_Bryson[] = { FRONTIER_MONS_BUG_MANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Clayton[] = +const u16 gBattleFrontierTrainerMons_Clayton[] = { FRONTIER_MONS_BUG_MANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Trenton[] = -{ - FRONTIER_MONS_FISHERMAN_1 -}; - -const u16 gBattleFrontierTrainerMons_Jenson[] = +const u16 gBattleFrontierTrainerMons_Trenton[] = { FRONTIER_MONS_FISHERMAN_1 }; -const u16 gBattleFrontierTrainerMons_Wesley[] = +const u16 gBattleFrontierTrainerMons_Jenson[] = { FRONTIER_MONS_FISHERMAN_1 }; -const u16 gBattleFrontierTrainerMons_Anton[] = +const u16 gBattleFrontierTrainerMons_Wesley[] = +{ + FRONTIER_MONS_FISHERMAN_1 +}; + +const u16 gBattleFrontierTrainerMons_Anton[] = { FRONTIER_MONS_RUIN_MANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Lawson[] = +const u16 gBattleFrontierTrainerMons_Lawson[] = { FRONTIER_MONS_RUIN_MANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Sammy[] = +const u16 gBattleFrontierTrainerMons_Sammy[] = { FRONTIER_MONS_RUIN_MANIAC_1 }; // The below 3 are the early Collector class trainers, which use groups from other general classes -const u16 gBattleFrontierTrainerMons_Arnie[] = +const u16 gBattleFrontierTrainerMons_Arnie[] = { FRONTIER_MONS_YOUNGSTER_LASS_1 }; -const u16 gBattleFrontierTrainerMons_Adrian[] = +const u16 gBattleFrontierTrainerMons_Adrian[] = { FRONTIER_MONS_SCHOOL_KID_1 }; -const u16 gBattleFrontierTrainerMons_Tristan[] = +const u16 gBattleFrontierTrainerMons_Tristan[] = { FRONTIER_MONS_CAMPER_PICNICKER_1 }; -const u16 gBattleFrontierTrainerMons_Juliana[] = +const u16 gBattleFrontierTrainerMons_Juliana[] = { FRONTIER_MONS_PARASOL_LADY_1 }; -const u16 gBattleFrontierTrainerMons_Rylee[] = +const u16 gBattleFrontierTrainerMons_Rylee[] = { FRONTIER_MONS_PARASOL_LADY_1 }; -const u16 gBattleFrontierTrainerMons_Chelsea[] = +const u16 gBattleFrontierTrainerMons_Chelsea[] = { FRONTIER_MONS_PARASOL_LADY_1 }; // The below 3 are the early Beauty class trainers, which use groups from other general classes -const u16 gBattleFrontierTrainerMons_Danela[] = +const u16 gBattleFrontierTrainerMons_Danela[] = { FRONTIER_MONS_YOUNGSTER_LASS_1 }; -const u16 gBattleFrontierTrainerMons_Lizbeth[] = +const u16 gBattleFrontierTrainerMons_Lizbeth[] = { FRONTIER_MONS_SCHOOL_KID_1 }; -const u16 gBattleFrontierTrainerMons_Amelia[] = +const u16 gBattleFrontierTrainerMons_Amelia[] = { FRONTIER_MONS_CAMPER_PICNICKER_1 }; -const u16 gBattleFrontierTrainerMons_Jillian[] = -{ - FRONTIER_MONS_AROMA_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Abbie[] = -{ - FRONTIER_MONS_AROMA_LADY_1 -}; - -const u16 gBattleFrontierTrainerMons_Briana[] = +const u16 gBattleFrontierTrainerMons_Jillian[] = { FRONTIER_MONS_AROMA_LADY_1 }; -const u16 gBattleFrontierTrainerMons_Antonio[] = +const u16 gBattleFrontierTrainerMons_Abbie[] = +{ + FRONTIER_MONS_AROMA_LADY_1 +}; + +const u16 gBattleFrontierTrainerMons_Briana[] = +{ + FRONTIER_MONS_AROMA_LADY_1 +}; + +const u16 gBattleFrontierTrainerMons_Antonio[] = { FRONTIER_MONS_GUITARIST_1 }; -const u16 gBattleFrontierTrainerMons_Jaden[] = +const u16 gBattleFrontierTrainerMons_Jaden[] = { FRONTIER_MONS_GUITARIST_1 }; -const u16 gBattleFrontierTrainerMons_Dakota[] = +const u16 gBattleFrontierTrainerMons_Dakota[] = { - FRONTIER_MONS_GUITARIST_1 + FRONTIER_MONS_GUITARIST_1 }; -const u16 gBattleFrontierTrainerMons_Brayden[] = +const u16 gBattleFrontierTrainerMons_Brayden[] = { FRONTIER_MONS_BIRD_KEEPER_1 }; -const u16 gBattleFrontierTrainerMons_Corson[] = +const u16 gBattleFrontierTrainerMons_Corson[] = { FRONTIER_MONS_BIRD_KEEPER_1 }; -const u16 gBattleFrontierTrainerMons_Trevin[] = +const u16 gBattleFrontierTrainerMons_Trevin[] = { FRONTIER_MONS_BIRD_KEEPER_1 }; -const u16 gBattleFrontierTrainerMons_Patrick[] = +const u16 gBattleFrontierTrainerMons_Patrick[] = { FRONTIER_MONS_SAILOR_1 }; -const u16 gBattleFrontierTrainerMons_Kaden[] = +const u16 gBattleFrontierTrainerMons_Kaden[] = { FRONTIER_MONS_SAILOR_1 }; -const u16 gBattleFrontierTrainerMons_Maxwell[] = +const u16 gBattleFrontierTrainerMons_Maxwell[] = { FRONTIER_MONS_SAILOR_1 }; -const u16 gBattleFrontierTrainerMons_Daryl[] = +const u16 gBattleFrontierTrainerMons_Daryl[] = { FRONTIER_MONS_HIKER_1 }; -const u16 gBattleFrontierTrainerMons_Kenneth[] = +const u16 gBattleFrontierTrainerMons_Kenneth[] = { FRONTIER_MONS_HIKER_1 }; -const u16 gBattleFrontierTrainerMons_Rich[] = +const u16 gBattleFrontierTrainerMons_Rich[] = { FRONTIER_MONS_HIKER_1 }; -const u16 gBattleFrontierTrainerMons_Caden[] = +const u16 gBattleFrontierTrainerMons_Caden[] = { FRONTIER_MONS_KINDLER_1 }; -const u16 gBattleFrontierTrainerMons_Marlon[] = +const u16 gBattleFrontierTrainerMons_Marlon[] = { FRONTIER_MONS_KINDLER_1 }; -const u16 gBattleFrontierTrainerMons_Nash[] = +const u16 gBattleFrontierTrainerMons_Nash[] = { FRONTIER_MONS_KINDLER_1 }; -const u16 gBattleFrontierTrainerMons_Robby[] = +const u16 gBattleFrontierTrainerMons_Robby[] = { FRONTIER_MONS_RUNNING_TRIATHLETE_1 }; -const u16 gBattleFrontierTrainerMons_Reece[] = +const u16 gBattleFrontierTrainerMons_Reece[] = { FRONTIER_MONS_RUNNING_TRIATHLETE_1 }; -const u16 gBattleFrontierTrainerMons_Kathryn[] = +const u16 gBattleFrontierTrainerMons_Kathryn[] = { FRONTIER_MONS_RUNNING_TRIATHLETE_1 }; -const u16 gBattleFrontierTrainerMons_Ellen[] = +const u16 gBattleFrontierTrainerMons_Ellen[] = { FRONTIER_MONS_RUNNING_TRIATHLETE_1 }; -const u16 gBattleFrontierTrainerMons_Ramon[] = +const u16 gBattleFrontierTrainerMons_Ramon[] = { FRONTIER_MONS_SWIMMING_TRIATHLETE_1 }; -const u16 gBattleFrontierTrainerMons_Arthur[] = +const u16 gBattleFrontierTrainerMons_Arthur[] = { FRONTIER_MONS_SWIMMING_TRIATHLETE_1 }; -const u16 gBattleFrontierTrainerMons_Alondra[] = +const u16 gBattleFrontierTrainerMons_Alondra[] = { FRONTIER_MONS_SWIMMING_TRIATHLETE_1 }; -const u16 gBattleFrontierTrainerMons_Adriana[] = +const u16 gBattleFrontierTrainerMons_Adriana[] = { FRONTIER_MONS_SWIMMING_TRIATHLETE_1 }; -const u16 gBattleFrontierTrainerMons_Malik[] = +const u16 gBattleFrontierTrainerMons_Malik[] = { FRONTIER_MONS_CYCLING_TRIATHLETE_1 }; -const u16 gBattleFrontierTrainerMons_Jill[] = +const u16 gBattleFrontierTrainerMons_Jill[] = { FRONTIER_MONS_CYCLING_TRIATHLETE_1 }; -const u16 gBattleFrontierTrainerMons_Erik[] = +const u16 gBattleFrontierTrainerMons_Erik[] = { FRONTIER_MONS_RUNNING_TRIATHLETE_2 }; -const u16 gBattleFrontierTrainerMons_Yazmin[] = +const u16 gBattleFrontierTrainerMons_Yazmin[] = { FRONTIER_MONS_RUNNING_TRIATHLETE_2 }; -const u16 gBattleFrontierTrainerMons_Jamal[] = +const u16 gBattleFrontierTrainerMons_Jamal[] = { FRONTIER_MONS_SWIMMING_TRIATHLETE_2 }; -const u16 gBattleFrontierTrainerMons_Leslie[] = +const u16 gBattleFrontierTrainerMons_Leslie[] = { FRONTIER_MONS_SWIMMING_TRIATHLETE_2 }; -const u16 gBattleFrontierTrainerMons_Dave[] = +const u16 gBattleFrontierTrainerMons_Dave[] = { FRONTIER_MONS_CYCLING_TRIATHLETE_2 }; -const u16 gBattleFrontierTrainerMons_Carlo[] = +const u16 gBattleFrontierTrainerMons_Carlo[] = { FRONTIER_MONS_CYCLING_TRIATHLETE_2 }; -const u16 gBattleFrontierTrainerMons_Emilia[] = +const u16 gBattleFrontierTrainerMons_Emilia[] = { FRONTIER_MONS_CYCLING_TRIATHLETE_2 }; -const u16 gBattleFrontierTrainerMons_Dalia[] = +const u16 gBattleFrontierTrainerMons_Dalia[] = { FRONTIER_MONS_CYCLING_TRIATHLETE_2 }; -const u16 gBattleFrontierTrainerMons_Hitomi[] = +const u16 gBattleFrontierTrainerMons_Hitomi[] = { FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 }; -const u16 gBattleFrontierTrainerMons_Ricardo[] = +const u16 gBattleFrontierTrainerMons_Ricardo[] = { FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 }; -const u16 gBattleFrontierTrainerMons_Shizuka[] = +const u16 gBattleFrontierTrainerMons_Shizuka[] = { FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 }; -const u16 gBattleFrontierTrainerMons_Joana[] = +const u16 gBattleFrontierTrainerMons_Joana[] = { FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 }; -const u16 gBattleFrontierTrainerMons_Kelly[] = +const u16 gBattleFrontierTrainerMons_Kelly[] = { FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 }; -const u16 gBattleFrontierTrainerMons_Rayna[] = +const u16 gBattleFrontierTrainerMons_Rayna[] = { FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 }; -const u16 gBattleFrontierTrainerMons_Evan[] = +const u16 gBattleFrontierTrainerMons_Evan[] = { FRONTIER_MONS_EXPERT_1A }; -const u16 gBattleFrontierTrainerMons_Jordan[] = +const u16 gBattleFrontierTrainerMons_Jordan[] = { FRONTIER_MONS_EXPERT_1B }; -const u16 gBattleFrontierTrainerMons_Joel[] = +const u16 gBattleFrontierTrainerMons_Joel[] = { FRONTIER_MONS_EXPERT_1C }; -const u16 gBattleFrontierTrainerMons_Kristen[] = +const u16 gBattleFrontierTrainerMons_Kristen[] = { FRONTIER_MONS_EXPERT_1A }; -const u16 gBattleFrontierTrainerMons_Selphy[] = +const u16 gBattleFrontierTrainerMons_Selphy[] = { FRONTIER_MONS_EXPERT_1B }; -const u16 gBattleFrontierTrainerMons_Chloe[] = +const u16 gBattleFrontierTrainerMons_Chloe[] = { FRONTIER_MONS_EXPERT_1C }; -const u16 gBattleFrontierTrainerMons_Norton[] = +const u16 gBattleFrontierTrainerMons_Norton[] = { FRONTIER_MONS_PSYCHIC_1 }; -const u16 gBattleFrontierTrainerMons_Lukas[] = +const u16 gBattleFrontierTrainerMons_Lukas[] = { FRONTIER_MONS_PSYCHIC_1 }; -const u16 gBattleFrontierTrainerMons_Zach[] = +const u16 gBattleFrontierTrainerMons_Zach[] = { FRONTIER_MONS_PSYCHIC_1 }; -const u16 gBattleFrontierTrainerMons_Kaitlyn[] = +const u16 gBattleFrontierTrainerMons_Kaitlyn[] = { FRONTIER_MONS_PSYCHIC_1 }; -const u16 gBattleFrontierTrainerMons_Breanna[] = +const u16 gBattleFrontierTrainerMons_Breanna[] = { FRONTIER_MONS_PSYCHIC_1 }; -const u16 gBattleFrontierTrainerMons_Kendra[] = +const u16 gBattleFrontierTrainerMons_Kendra[] = { FRONTIER_MONS_PSYCHIC_1 }; -const u16 gBattleFrontierTrainerMons_Molly[] = +const u16 gBattleFrontierTrainerMons_Molly[] = { FRONTIER_MONS_HEX_MANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Jazmin[] = +const u16 gBattleFrontierTrainerMons_Jazmin[] = { FRONTIER_MONS_HEX_MANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Kelsey[] = +const u16 gBattleFrontierTrainerMons_Kelsey[] = { FRONTIER_MONS_HEX_MANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Jalen[] = +const u16 gBattleFrontierTrainerMons_Jalen[] = { FRONTIER_MONS_POKEMANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Griffen[] = +const u16 gBattleFrontierTrainerMons_Griffen[] = { FRONTIER_MONS_POKEMANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Xander[] = +const u16 gBattleFrontierTrainerMons_Xander[] = { FRONTIER_MONS_POKEMANIAC_1 }; -const u16 gBattleFrontierTrainerMons_Marvin[] = +const u16 gBattleFrontierTrainerMons_Marvin[] = { FRONTIER_MONS_GENTLEMAN_1A }; -const u16 gBattleFrontierTrainerMons_Brennan[] = +const u16 gBattleFrontierTrainerMons_Brennan[] = { FRONTIER_MONS_GENTLEMAN_1B }; -const u16 gBattleFrontierTrainerMons_Baley[] = +const u16 gBattleFrontierTrainerMons_Baley[] = { FRONTIER_MONS_BUG_MANIAC_2 }; -const u16 gBattleFrontierTrainerMons_Zackary[] = +const u16 gBattleFrontierTrainerMons_Zackary[] = { FRONTIER_MONS_RUIN_MANIAC_2 }; -const u16 gBattleFrontierTrainerMons_Gabriel[] = +const u16 gBattleFrontierTrainerMons_Gabriel[] = { FRONTIER_MONS_COLLECTOR_1 }; -const u16 gBattleFrontierTrainerMons_Emily[] = +const u16 gBattleFrontierTrainerMons_Emily[] = { FRONTIER_MONS_PARASOL_LADY_2 }; -const u16 gBattleFrontierTrainerMons_Jordyn[] = +const u16 gBattleFrontierTrainerMons_Jordyn[] = { FRONTIER_MONS_BEAUTY_1 }; -const u16 gBattleFrontierTrainerMons_Sofia[] = +const u16 gBattleFrontierTrainerMons_Sofia[] = { FRONTIER_MONS_AROMA_LADY_2 }; -const u16 gBattleFrontierTrainerMons_Braden[] = +const u16 gBattleFrontierTrainerMons_Braden[] = { FRONTIER_MONS_COOLTRAINER_1A }; -const u16 gBattleFrontierTrainerMons_Kayden[] = +const u16 gBattleFrontierTrainerMons_Kayden[] = { FRONTIER_MONS_COOLTRAINER_1B }; -const u16 gBattleFrontierTrainerMons_Cooper[] = +const u16 gBattleFrontierTrainerMons_Cooper[] = { FRONTIER_MONS_COOLTRAINER_1C }; -const u16 gBattleFrontierTrainerMons_Julia[] = +const u16 gBattleFrontierTrainerMons_Julia[] = { FRONTIER_MONS_COOLTRAINER_1A }; -const u16 gBattleFrontierTrainerMons_Amara[] = +const u16 gBattleFrontierTrainerMons_Amara[] = { FRONTIER_MONS_COOLTRAINER_1B }; -const u16 gBattleFrontierTrainerMons_Lynn[] = +const u16 gBattleFrontierTrainerMons_Lynn[] = { FRONTIER_MONS_COOLTRAINER_1C }; -const u16 gBattleFrontierTrainerMons_Jovan[] = +const u16 gBattleFrontierTrainerMons_Jovan[] = { FRONTIER_MONS_PKMN_RANGER_1 }; -const u16 gBattleFrontierTrainerMons_Dominic[] = +const u16 gBattleFrontierTrainerMons_Dominic[] = { FRONTIER_MONS_PKMN_RANGER_1 }; -const u16 gBattleFrontierTrainerMons_Nikolas[] = +const u16 gBattleFrontierTrainerMons_Nikolas[] = { FRONTIER_MONS_PKMN_RANGER_1 }; -const u16 gBattleFrontierTrainerMons_Valeria[] = +const u16 gBattleFrontierTrainerMons_Valeria[] = { FRONTIER_MONS_PKMN_RANGER_1 }; -const u16 gBattleFrontierTrainerMons_Delaney[] = +const u16 gBattleFrontierTrainerMons_Delaney[] = { FRONTIER_MONS_PKMN_RANGER_1 }; -const u16 gBattleFrontierTrainerMons_Meghan[] = +const u16 gBattleFrontierTrainerMons_Meghan[] = { FRONTIER_MONS_PKMN_RANGER_1 }; -const u16 gBattleFrontierTrainerMons_Roberto[] = +const u16 gBattleFrontierTrainerMons_Roberto[] = { FRONTIER_MONS_DRAGON_TAMER_1 }; -const u16 gBattleFrontierTrainerMons_Damian[] = +const u16 gBattleFrontierTrainerMons_Damian[] = { FRONTIER_MONS_DRAGON_TAMER_1 }; -const u16 gBattleFrontierTrainerMons_Brody[] = +const u16 gBattleFrontierTrainerMons_Brody[] = { FRONTIER_MONS_DRAGON_TAMER_1 }; -const u16 gBattleFrontierTrainerMons_Graham[] = +const u16 gBattleFrontierTrainerMons_Graham[] = { FRONTIER_MONS_DRAGON_TAMER_1 }; -const u16 gBattleFrontierTrainerMons_Tylor[] = +const u16 gBattleFrontierTrainerMons_Tylor[] = { FRONTIER_MONS_POKEFAN_2 }; -const u16 gBattleFrontierTrainerMons_Jaren[] = +const u16 gBattleFrontierTrainerMons_Jaren[] = { FRONTIER_MONS_POKEFAN_2 }; -const u16 gBattleFrontierTrainerMons_Cordell[] = +const u16 gBattleFrontierTrainerMons_Cordell[] = { FRONTIER_MONS_PKMN_BREEDER_M_1 }; -const u16 gBattleFrontierTrainerMons_Jazlyn[] = +const u16 gBattleFrontierTrainerMons_Jazlyn[] = { FRONTIER_MONS_PKMN_BREEDER_F_1 }; -const u16 gBattleFrontierTrainerMons_Zachery[] = +const u16 gBattleFrontierTrainerMons_Zachery[] = { FRONTIER_MONS_YOUNGSTER_LASS_2 }; -const u16 gBattleFrontierTrainerMons_Johan[] = +const u16 gBattleFrontierTrainerMons_Johan[] = { FRONTIER_MONS_YOUNGSTER_LASS_2_NO_DUGTRIO }; -const u16 gBattleFrontierTrainerMons_Shea[] = +const u16 gBattleFrontierTrainerMons_Shea[] = { FRONTIER_MONS_YOUNGSTER_LASS_2 }; -const u16 gBattleFrontierTrainerMons_Kaila[] = +const u16 gBattleFrontierTrainerMons_Kaila[] = { FRONTIER_MONS_YOUNGSTER_LASS_2 }; -const u16 gBattleFrontierTrainerMons_Isiah[] = +const u16 gBattleFrontierTrainerMons_Isiah[] = { FRONTIER_MONS_SCHOOL_KID_2 }; -const u16 gBattleFrontierTrainerMons_Garrett[] = +const u16 gBattleFrontierTrainerMons_Garrett[] = { FRONTIER_MONS_SCHOOL_KID_2 }; -const u16 gBattleFrontierTrainerMons_Haylie[] = +const u16 gBattleFrontierTrainerMons_Haylie[] = { FRONTIER_MONS_SCHOOL_KID_2 }; -const u16 gBattleFrontierTrainerMons_Megan[] = +const u16 gBattleFrontierTrainerMons_Megan[] = { FRONTIER_MONS_SCHOOL_KID_2 }; -const u16 gBattleFrontierTrainerMons_Issac[] = +const u16 gBattleFrontierTrainerMons_Issac[] = { FRONTIER_MONS_RICH_BOY_LADY_2 }; -const u16 gBattleFrontierTrainerMons_Quinton[] = +const u16 gBattleFrontierTrainerMons_Quinton[] = { FRONTIER_MONS_RICH_BOY_LADY_2 }; -const u16 gBattleFrontierTrainerMons_Salma[] = +const u16 gBattleFrontierTrainerMons_Salma[] = { FRONTIER_MONS_RICH_BOY_LADY_2 }; -const u16 gBattleFrontierTrainerMons_Ansley[] = +const u16 gBattleFrontierTrainerMons_Ansley[] = { FRONTIER_MONS_RICH_BOY_LADY_2 }; -const u16 gBattleFrontierTrainerMons_Holden[] = +const u16 gBattleFrontierTrainerMons_Holden[] = { FRONTIER_MONS_BUG_CATCHER_2 }; -const u16 gBattleFrontierTrainerMons_Luca[] = +const u16 gBattleFrontierTrainerMons_Luca[] = { FRONTIER_MONS_BUG_CATCHER_2 }; -const u16 gBattleFrontierTrainerMons_Jamison[] = +const u16 gBattleFrontierTrainerMons_Jamison[] = { FRONTIER_MONS_NINJA_BOY_2 }; -const u16 gBattleFrontierTrainerMons_Gunnar[] = +const u16 gBattleFrontierTrainerMons_Gunnar[] = { FRONTIER_MONS_NINJA_BOY_2 }; -const u16 gBattleFrontierTrainerMons_Craig[] = +const u16 gBattleFrontierTrainerMons_Craig[] = { FRONTIER_MONS_TUBER_2 }; -const u16 gBattleFrontierTrainerMons_Pierce[] = +const u16 gBattleFrontierTrainerMons_Pierce[] = { FRONTIER_MONS_TUBER_2 }; -const u16 gBattleFrontierTrainerMons_Regina[] = +const u16 gBattleFrontierTrainerMons_Regina[] = { FRONTIER_MONS_TUBER_2 }; -const u16 gBattleFrontierTrainerMons_Alison[] = +const u16 gBattleFrontierTrainerMons_Alison[] = { FRONTIER_MONS_TUBER_2 }; -const u16 gBattleFrontierTrainerMons_Hank[] = +const u16 gBattleFrontierTrainerMons_Hank[] = { FRONTIER_MONS_BUG_MANIAC_3 }; -const u16 gBattleFrontierTrainerMons_Earl[] = +const u16 gBattleFrontierTrainerMons_Earl[] = { FRONTIER_MONS_BUG_MANIAC_3 }; -const u16 gBattleFrontierTrainerMons_Ramiro[] = +const u16 gBattleFrontierTrainerMons_Ramiro[] = { FRONTIER_MONS_FISHERMAN_2 }; -const u16 gBattleFrontierTrainerMons_Hunter[] = +const u16 gBattleFrontierTrainerMons_Hunter[] = { FRONTIER_MONS_FISHERMAN_2 }; -const u16 gBattleFrontierTrainerMons_Aiden[] = +const u16 gBattleFrontierTrainerMons_Aiden[] = { FRONTIER_MONS_RUIN_MANIAC_3 }; -const u16 gBattleFrontierTrainerMons_Xavier[] = +const u16 gBattleFrontierTrainerMons_Xavier[] = { FRONTIER_MONS_RUIN_MANIAC_3 }; -const u16 gBattleFrontierTrainerMons_Clinton[] = +const u16 gBattleFrontierTrainerMons_Clinton[] = { FRONTIER_MONS_COLLECTOR_2 }; -const u16 gBattleFrontierTrainerMons_Jesse[] = +const u16 gBattleFrontierTrainerMons_Jesse[] = { FRONTIER_MONS_COLLECTOR_2 }; -const u16 gBattleFrontierTrainerMons_Eduardo[] = +const u16 gBattleFrontierTrainerMons_Eduardo[] = { FRONTIER_MONS_GUITARIST_2 }; -const u16 gBattleFrontierTrainerMons_Hal[] = +const u16 gBattleFrontierTrainerMons_Hal[] = { FRONTIER_MONS_GUITARIST_2 }; -const u16 gBattleFrontierTrainerMons_Gage[] = +const u16 gBattleFrontierTrainerMons_Gage[] = { FRONTIER_MONS_BIRD_KEEPER_2 }; -const u16 gBattleFrontierTrainerMons_Arnold[] = +const u16 gBattleFrontierTrainerMons_Arnold[] = { FRONTIER_MONS_BIRD_KEEPER_2 }; -const u16 gBattleFrontierTrainerMons_Jarrett[] = +const u16 gBattleFrontierTrainerMons_Jarrett[] = { FRONTIER_MONS_SAILOR_2 }; -const u16 gBattleFrontierTrainerMons_Garett[] = +const u16 gBattleFrontierTrainerMons_Garett[] = { FRONTIER_MONS_SAILOR_2 }; -const u16 gBattleFrontierTrainerMons_Emanuel[] = +const u16 gBattleFrontierTrainerMons_Emanuel[] = { FRONTIER_MONS_HIKER_2 }; -const u16 gBattleFrontierTrainerMons_Gustavo[] = +const u16 gBattleFrontierTrainerMons_Gustavo[] = { FRONTIER_MONS_HIKER_2 }; -const u16 gBattleFrontierTrainerMons_Kameron[] = +const u16 gBattleFrontierTrainerMons_Kameron[] = { FRONTIER_MONS_KINDLER_2 }; -const u16 gBattleFrontierTrainerMons_Alfredo[] = +const u16 gBattleFrontierTrainerMons_Alfredo[] = { FRONTIER_MONS_KINDLER_2 }; -const u16 gBattleFrontierTrainerMons_Ruben[] = +const u16 gBattleFrontierTrainerMons_Ruben[] = { FRONTIER_MONS_GENTLEMAN_2 }; -const u16 gBattleFrontierTrainerMons_Lamar[] = +const u16 gBattleFrontierTrainerMons_Lamar[] = { FRONTIER_MONS_GENTLEMAN_2 }; -const u16 gBattleFrontierTrainerMons_Jaxon[] = +const u16 gBattleFrontierTrainerMons_Jaxon[] = { FRONTIER_MONS_YOUNGSTER_LASS_3 }; -const u16 gBattleFrontierTrainerMons_Logan[] = +const u16 gBattleFrontierTrainerMons_Logan[] = { FRONTIER_MONS_YOUNGSTER_LASS_3 }; -const u16 gBattleFrontierTrainerMons_Emilee[] = +const u16 gBattleFrontierTrainerMons_Emilee[] = { FRONTIER_MONS_YOUNGSTER_LASS_3 }; -const u16 gBattleFrontierTrainerMons_Josie[] = +const u16 gBattleFrontierTrainerMons_Josie[] = { FRONTIER_MONS_YOUNGSTER_LASS_3 }; -const u16 gBattleFrontierTrainerMons_Armando[] = +const u16 gBattleFrontierTrainerMons_Armando[] = { FRONTIER_MONS_CAMPER_PICNICKER_2 }; -const u16 gBattleFrontierTrainerMons_Skyler[] = +const u16 gBattleFrontierTrainerMons_Skyler[] = { FRONTIER_MONS_CAMPER_PICNICKER_2 }; -const u16 gBattleFrontierTrainerMons_Ruth[] = +const u16 gBattleFrontierTrainerMons_Ruth[] = { FRONTIER_MONS_CAMPER_PICNICKER_2 }; -const u16 gBattleFrontierTrainerMons_Melody[] = +const u16 gBattleFrontierTrainerMons_Melody[] = { FRONTIER_MONS_CAMPER_PICNICKER_2 }; -const u16 gBattleFrontierTrainerMons_Pedro[] = +const u16 gBattleFrontierTrainerMons_Pedro[] = { FRONTIER_MONS_SWIMMER_M_2 }; -const u16 gBattleFrontierTrainerMons_Erick[] = +const u16 gBattleFrontierTrainerMons_Erick[] = { FRONTIER_MONS_SWIMMER_M_2 }; -const u16 gBattleFrontierTrainerMons_Elaine[] = +const u16 gBattleFrontierTrainerMons_Elaine[] = { FRONTIER_MONS_SWIMMER_F_2 }; -const u16 gBattleFrontierTrainerMons_Joyce[] = +const u16 gBattleFrontierTrainerMons_Joyce[] = { FRONTIER_MONS_SWIMMER_F_2 }; -const u16 gBattleFrontierTrainerMons_Todd[] = +const u16 gBattleFrontierTrainerMons_Todd[] = { FRONTIER_MONS_POKEFAN_3 }; -const u16 gBattleFrontierTrainerMons_Gavin[] = +const u16 gBattleFrontierTrainerMons_Gavin[] = { FRONTIER_MONS_POKEFAN_3 }; -const u16 gBattleFrontierTrainerMons_Malory[] = +const u16 gBattleFrontierTrainerMons_Malory[] = { FRONTIER_MONS_POKEFAN_3 }; -const u16 gBattleFrontierTrainerMons_Esther[] = +const u16 gBattleFrontierTrainerMons_Esther[] = { FRONTIER_MONS_POKEFAN_3 }; -const u16 gBattleFrontierTrainerMons_Oscar[] = +const u16 gBattleFrontierTrainerMons_Oscar[] = { FRONTIER_MONS_PKMN_BREEDER_2 }; -const u16 gBattleFrontierTrainerMons_Wilson[] = +const u16 gBattleFrontierTrainerMons_Wilson[] = { FRONTIER_MONS_PKMN_BREEDER_2 }; -const u16 gBattleFrontierTrainerMons_Clare[] = +const u16 gBattleFrontierTrainerMons_Clare[] = { FRONTIER_MONS_PKMN_BREEDER_2 }; -const u16 gBattleFrontierTrainerMons_Tess[] = +const u16 gBattleFrontierTrainerMons_Tess[] = { FRONTIER_MONS_PKMN_BREEDER_2 }; -const u16 gBattleFrontierTrainerMons_Leon[] = +const u16 gBattleFrontierTrainerMons_Leon[] = { FRONTIER_MONS_COOLTRAINER_M_2A }; -const u16 gBattleFrontierTrainerMons_Alonzo[] = +const u16 gBattleFrontierTrainerMons_Alonzo[] = { FRONTIER_MONS_COOLTRAINER_M_2B }; -const u16 gBattleFrontierTrainerMons_Vince[] = +const u16 gBattleFrontierTrainerMons_Vince[] = { FRONTIER_MONS_COOLTRAINER_2C(LATIOS) }; -const u16 gBattleFrontierTrainerMons_Bryon[] = +const u16 gBattleFrontierTrainerMons_Bryon[] = { FRONTIER_MONS_COOLTRAINER_2D(LATIOS) }; -const u16 gBattleFrontierTrainerMons_Ava[] = +const u16 gBattleFrontierTrainerMons_Ava[] = { FRONTIER_MONS_COOLTRAINER_F_2A }; -const u16 gBattleFrontierTrainerMons_Miriam[] = +const u16 gBattleFrontierTrainerMons_Miriam[] = { FRONTIER_MONS_COOLTRAINER_F_2B }; -const u16 gBattleFrontierTrainerMons_Carrie[] = +const u16 gBattleFrontierTrainerMons_Carrie[] = { FRONTIER_MONS_COOLTRAINER_2C(LATIAS) }; -const u16 gBattleFrontierTrainerMons_Gillian2[] = +const u16 gBattleFrontierTrainerMons_Gillian2[] = { FRONTIER_MONS_COOLTRAINER_2D(LATIAS) }; -const u16 gBattleFrontierTrainerMons_Tyler[] = +const u16 gBattleFrontierTrainerMons_Tyler[] = { FRONTIER_MONS_GENERAL_A }; -const u16 gBattleFrontierTrainerMons_Chaz[] = +const u16 gBattleFrontierTrainerMons_Chaz[] = { FRONTIER_MONS_GENERAL_B }; -const u16 gBattleFrontierTrainerMons_Nelson[] = +const u16 gBattleFrontierTrainerMons_Nelson[] = { FRONTIER_MONS_COOLTRAINER_2D(LATIOS) }; -const u16 gBattleFrontierTrainerMons_Shania[] = +const u16 gBattleFrontierTrainerMons_Shania[] = { FRONTIER_MONS_GENERAL_C }; -const u16 gBattleFrontierTrainerMons_Stella[] = +const u16 gBattleFrontierTrainerMons_Stella[] = { FRONTIER_MONS_GENERAL_D }; -const u16 gBattleFrontierTrainerMons_Dorine[] = +const u16 gBattleFrontierTrainerMons_Dorine[] = { FRONTIER_MONS_COOLTRAINER_2D(LATIAS) }; -const u16 gBattleFrontierTrainerMons_Maddox[] = +const u16 gBattleFrontierTrainerMons_Maddox[] = { FRONTIER_MONS_DRAGON_TAMER_2 }; -const u16 gBattleFrontierTrainerMons_Davin[] = +const u16 gBattleFrontierTrainerMons_Davin[] = { FRONTIER_MONS_DRAGON_TAMER_2 }; -const u16 gBattleFrontierTrainerMons_Trevon[] = +const u16 gBattleFrontierTrainerMons_Trevon[] = { FRONTIER_MONS_DRAGON_TAMER_2 }; -const u16 gBattleFrontierTrainerMons_Mateo[] = +const u16 gBattleFrontierTrainerMons_Mateo[] = { FRONTIER_MONS_BLACK_BELT_2A }; -const u16 gBattleFrontierTrainerMons_Bret[] = +const u16 gBattleFrontierTrainerMons_Bret[] = { FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2B }; -const u16 gBattleFrontierTrainerMons_Raul[] = +const u16 gBattleFrontierTrainerMons_Raul[] = { FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2C }; -const u16 gBattleFrontierTrainerMons_Kay[] = +const u16 gBattleFrontierTrainerMons_Kay[] = { FRONTIER_MONS_BATTLE_GIRL_2A }; -const u16 gBattleFrontierTrainerMons_Elena[] = +const u16 gBattleFrontierTrainerMons_Elena[] = { FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2B }; -const u16 gBattleFrontierTrainerMons_Alana[] = +const u16 gBattleFrontierTrainerMons_Alana[] = { FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2C }; -const u16 gBattleFrontierTrainerMons_Alexas[] = +const u16 gBattleFrontierTrainerMons_Alexas[] = { FRONTIER_MONS_EXPERT_2A(TYRANITAR) }; -const u16 gBattleFrontierTrainerMons_Weston[] = +const u16 gBattleFrontierTrainerMons_Weston[] = { FRONTIER_MONS_EXPERT_2B(LATIOS) }; -const u16 gBattleFrontierTrainerMons_Jasper[] = +const u16 gBattleFrontierTrainerMons_Jasper[] = { FRONTIER_MONS_EXPERT_2C(TYRANITAR) }; -const u16 gBattleFrontierTrainerMons_Nadia[] = +const u16 gBattleFrontierTrainerMons_Nadia[] = { FRONTIER_MONS_EXPERT_2A(DRAGONITE) }; -const u16 gBattleFrontierTrainerMons_Miranda[] = +const u16 gBattleFrontierTrainerMons_Miranda[] = { FRONTIER_MONS_EXPERT_2B(LATIAS) }; -const u16 gBattleFrontierTrainerMons_Emma[] = +const u16 gBattleFrontierTrainerMons_Emma[] = { FRONTIER_MONS_EXPERT_2C(DRAGONITE) }; -const u16 gBattleFrontierTrainerMons_Rolando[] = +const u16 gBattleFrontierTrainerMons_Rolando[] = { FRONTIER_MONS_PSYCHIC_2A(LATIOS) }; -const u16 gBattleFrontierTrainerMons_Stanly[] = +const u16 gBattleFrontierTrainerMons_Stanly[] = { FRONTIER_MONS_PSYCHIC_2B(LATIOS) }; -const u16 gBattleFrontierTrainerMons_Dario[] = +const u16 gBattleFrontierTrainerMons_Dario[] = { FRONTIER_MONS_PSYCHIC_2C(LATIOS) }; -const u16 gBattleFrontierTrainerMons_Karlee[] = +const u16 gBattleFrontierTrainerMons_Karlee[] = { FRONTIER_MONS_PSYCHIC_2A(LATIAS) }; -const u16 gBattleFrontierTrainerMons_Jaylin[] = +const u16 gBattleFrontierTrainerMons_Jaylin[] = { FRONTIER_MONS_PSYCHIC_2B(LATIAS) }; -const u16 gBattleFrontierTrainerMons_Ingrid[] = +const u16 gBattleFrontierTrainerMons_Ingrid[] = { FRONTIER_MONS_PSYCHIC_2C(LATIAS) }; -const u16 gBattleFrontierTrainerMons_Delilah[] = +const u16 gBattleFrontierTrainerMons_Delilah[] = { FRONTIER_MONS_HEX_MANIAC_2A }; -const u16 gBattleFrontierTrainerMons_Carly[] = +const u16 gBattleFrontierTrainerMons_Carly[] = { FRONTIER_MONS_HEX_MANIAC_2B }; -const u16 gBattleFrontierTrainerMons_Lexie[] = +const u16 gBattleFrontierTrainerMons_Lexie[] = { FRONTIER_MONS_HEX_MANIAC_2C }; -const u16 gBattleFrontierTrainerMons_Miller[] = +const u16 gBattleFrontierTrainerMons_Miller[] = { FRONTIER_MONS_POKEMANIAC_2A }; -const u16 gBattleFrontierTrainerMons_Marv[] = +const u16 gBattleFrontierTrainerMons_Marv[] = { FRONTIER_MONS_POKEMANIAC_2B }; -const u16 gBattleFrontierTrainerMons_Layton[] = +const u16 gBattleFrontierTrainerMons_Layton[] = { FRONTIER_MONS_POKEMANIAC_2C }; -const u16 gBattleFrontierTrainerMons_Brooks[] = +const u16 gBattleFrontierTrainerMons_Brooks[] = { FRONTIER_MONS_GENERAL_A }; -const u16 gBattleFrontierTrainerMons_Gregory[] = +const u16 gBattleFrontierTrainerMons_Gregory[] = { FRONTIER_MONS_GENTLEMAN_3A }; -const u16 gBattleFrontierTrainerMons_Reese[] = +const u16 gBattleFrontierTrainerMons_Reese[] = { FRONTIER_MONS_GENTLEMAN_3B }; -const u16 gBattleFrontierTrainerMons_Mason[] = +const u16 gBattleFrontierTrainerMons_Mason[] = { FRONTIER_MONS_GENERAL_A }; -const u16 gBattleFrontierTrainerMons_Toby[] = +const u16 gBattleFrontierTrainerMons_Toby[] = { FRONTIER_MONS_GENERAL_B }; -const u16 gBattleFrontierTrainerMons_Dorothy[] = +const u16 gBattleFrontierTrainerMons_Dorothy[] = { FRONTIER_MONS_GENERAL_C }; -const u16 gBattleFrontierTrainerMons_Piper[] = +const u16 gBattleFrontierTrainerMons_Piper[] = { FRONTIER_MONS_GENERAL_D }; -const u16 gBattleFrontierTrainerMons_Finn[] = +const u16 gBattleFrontierTrainerMons_Finn[] = { FRONTIER_MONS_SWIMMING_TRIATHLETE_M_3 }; -const u16 gBattleFrontierTrainerMons_Samir[] = +const u16 gBattleFrontierTrainerMons_Samir[] = { FRONTIER_MONS_SWIMMING_TRIATHLETE_M_3 }; -const u16 gBattleFrontierTrainerMons_Fiona[] = +const u16 gBattleFrontierTrainerMons_Fiona[] = { FRONTIER_MONS_SWIMMING_TRIATHLETE_F_3 }; -const u16 gBattleFrontierTrainerMons_Gloria[] = +const u16 gBattleFrontierTrainerMons_Gloria[] = { FRONTIER_MONS_SWIMMING_TRIATHLETE_F_3 }; -const u16 gBattleFrontierTrainerMons_Nico[] = +const u16 gBattleFrontierTrainerMons_Nico[] = { FRONTIER_MONS_GENERAL_A }; -const u16 gBattleFrontierTrainerMons_Jeremy[] = +const u16 gBattleFrontierTrainerMons_Jeremy[] = { FRONTIER_MONS_GENERAL_B }; -const u16 gBattleFrontierTrainerMons_Caitlin[] = +const u16 gBattleFrontierTrainerMons_Caitlin[] = { FRONTIER_MONS_GENERAL_C }; -const u16 gBattleFrontierTrainerMons_Reena[] = +const u16 gBattleFrontierTrainerMons_Reena[] = { FRONTIER_MONS_GENERAL_D }; -const u16 gBattleFrontierTrainerMons_Avery[] = +const u16 gBattleFrontierTrainerMons_Avery[] = { FRONTIER_MONS_BUG_MANIAC_4 }; -const u16 gBattleFrontierTrainerMons_Liam[] = +const u16 gBattleFrontierTrainerMons_Liam[] = { FRONTIER_MONS_BUG_MANIAC_4 }; -const u16 gBattleFrontierTrainerMons_Theo[] = +const u16 gBattleFrontierTrainerMons_Theo[] = { FRONTIER_MONS_FISHERMAN_3 }; -const u16 gBattleFrontierTrainerMons_Bailey[] = +const u16 gBattleFrontierTrainerMons_Bailey[] = { FRONTIER_MONS_FISHERMAN_3 }; -const u16 gBattleFrontierTrainerMons_Hugo[] = +const u16 gBattleFrontierTrainerMons_Hugo[] = { FRONTIER_MONS_RUIN_MANIAC_4 }; -const u16 gBattleFrontierTrainerMons_Bryce[] = +const u16 gBattleFrontierTrainerMons_Bryce[] = { FRONTIER_MONS_RUIN_MANIAC_4 }; -const u16 gBattleFrontierTrainerMons_Gideon[] = +const u16 gBattleFrontierTrainerMons_Gideon[] = { FRONTIER_MONS_COLLECTOR_3 }; -const u16 gBattleFrontierTrainerMons_Triston[] = +const u16 gBattleFrontierTrainerMons_Triston[] = { FRONTIER_MONS_COLLECTOR_3 }; -const u16 gBattleFrontierTrainerMons_Charles[] = +const u16 gBattleFrontierTrainerMons_Charles[] = { FRONTIER_MONS_GUITARIST_3A }; -const u16 gBattleFrontierTrainerMons_Raymond[] = +const u16 gBattleFrontierTrainerMons_Raymond[] = { FRONTIER_MONS_GUITARIST_3B }; -const u16 gBattleFrontierTrainerMons_Dirk[] = +const u16 gBattleFrontierTrainerMons_Dirk[] = { FRONTIER_MONS_BIRD_KEEPER_3 }; -const u16 gBattleFrontierTrainerMons_Harold[] = +const u16 gBattleFrontierTrainerMons_Harold[] = { FRONTIER_MONS_BIRD_KEEPER_3 }; -const u16 gBattleFrontierTrainerMons_Omar[] = +const u16 gBattleFrontierTrainerMons_Omar[] = { FRONTIER_MONS_SAILOR_3 }; -const u16 gBattleFrontierTrainerMons_Peter[] = +const u16 gBattleFrontierTrainerMons_Peter[] = { FRONTIER_MONS_SAILOR_3 }; -const u16 gBattleFrontierTrainerMons_Dev[] = +const u16 gBattleFrontierTrainerMons_Dev[] = { FRONTIER_MONS_HIKER_3 }; -const u16 gBattleFrontierTrainerMons_Corey[] = +const u16 gBattleFrontierTrainerMons_Corey[] = { FRONTIER_MONS_HIKER_3 }; -const u16 gBattleFrontierTrainerMons_Andre[] = +const u16 gBattleFrontierTrainerMons_Andre[] = { FRONTIER_MONS_KINDLER_3 }; -const u16 gBattleFrontierTrainerMons_Ferris[] = +const u16 gBattleFrontierTrainerMons_Ferris[] = { FRONTIER_MONS_KINDLER_3 }; -const u16 gBattleFrontierTrainerMons_Alivia[] = +const u16 gBattleFrontierTrainerMons_Alivia[] = { FRONTIER_MONS_PARASOL_LADY_3 }; -const u16 gBattleFrontierTrainerMons_Paige[] = +const u16 gBattleFrontierTrainerMons_Paige[] = { FRONTIER_MONS_PARASOL_LADY_3 }; -const u16 gBattleFrontierTrainerMons_Anya[] = +const u16 gBattleFrontierTrainerMons_Anya[] = { FRONTIER_MONS_EEVEELUTIONS }; -const u16 gBattleFrontierTrainerMons_Dawn[] = +const u16 gBattleFrontierTrainerMons_Dawn[] = { FRONTIER_MONS_BEAUTY_2 }; -const u16 gBattleFrontierTrainerMons_Abby[] = +const u16 gBattleFrontierTrainerMons_Abby[] = { FRONTIER_MONS_AROMA_LADY_3 }; -const u16 gBattleFrontierTrainerMons_Gretel[] = +const u16 gBattleFrontierTrainerMons_Gretel[] = { FRONTIER_MONS_AROMA_LADY_3 }; diff --git a/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h b/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h index 043488b93a..f87c1bfc4d 100644 --- a/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h +++ b/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h @@ -1038,7 +1038,7 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round20[] = } }; -static const struct PyramidWildMon *const sOpenLevelWildMonPointers[] = +static const struct PyramidWildMon *const sOpenLevelWildMonPointers[TOTAL_ROUNDS] = { sOpenLevelWildMons_Round1, sOpenLevelWildMons_Round2, diff --git a/src/data/battle_frontier/battle_tent.h b/src/data/battle_frontier/battle_tent.h index bce7979c8c..46598b2120 100644 --- a/src/data/battle_frontier/battle_tent.h +++ b/src/data/battle_frontier/battle_tent.h @@ -1,5 +1,5 @@ // Slateport Battle Tent. -const u16 gSlateportBattleTentTrainerMons_Jolie[] = +const u16 gSlateportBattleTentTrainerMons_Jolie[] = { SLATEPORT_TENT_MON_CACNEA_1, SLATEPORT_TENT_MON_LOMBRE_1, @@ -15,7 +15,7 @@ const u16 gSlateportBattleTentTrainerMons_Jolie[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Malachi[] = +const u16 gSlateportBattleTentTrainerMons_Malachi[] = { SLATEPORT_TENT_MON_CACNEA_1, SLATEPORT_TENT_MON_GRAVELER, @@ -31,7 +31,7 @@ const u16 gSlateportBattleTentTrainerMons_Malachi[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Kelsie[] = +const u16 gSlateportBattleTentTrainerMons_Kelsie[] = { SLATEPORT_TENT_MON_WAILMER_1, SLATEPORT_TENT_MON_WAILMER_2, @@ -47,7 +47,7 @@ const u16 gSlateportBattleTentTrainerMons_Kelsie[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Davon[] = +const u16 gSlateportBattleTentTrainerMons_Davon[] = { SLATEPORT_TENT_MON_WAILMER_1, SLATEPORT_TENT_MON_WAILMER_2, @@ -64,7 +64,7 @@ const u16 gSlateportBattleTentTrainerMons_Davon[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Glenda[] = +const u16 gSlateportBattleTentTrainerMons_Glenda[] = { SLATEPORT_TENT_MON_ZIGZAGOON_1, SLATEPORT_TENT_MON_ZIGZAGOON_2, @@ -82,7 +82,7 @@ const u16 gSlateportBattleTentTrainerMons_Glenda[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Helena[] = +const u16 gSlateportBattleTentTrainerMons_Helena[] = { SLATEPORT_TENT_MON_MIGHTYENA_1, SLATEPORT_TENT_MON_MIGHTYENA_2, @@ -98,7 +98,7 @@ const u16 gSlateportBattleTentTrainerMons_Helena[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Rodolfo[] = +const u16 gSlateportBattleTentTrainerMons_Rodolfo[] = { SLATEPORT_TENT_MON_ZIGZAGOON_1, SLATEPORT_TENT_MON_ZIGZAGOON_2, @@ -116,7 +116,7 @@ const u16 gSlateportBattleTentTrainerMons_Rodolfo[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Davion[] = +const u16 gSlateportBattleTentTrainerMons_Davion[] = { SLATEPORT_TENT_MON_BALTOY, SLATEPORT_TENT_MON_VOLTORB, @@ -135,7 +135,7 @@ const u16 gSlateportBattleTentTrainerMons_Davion[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Kendall[] = +const u16 gSlateportBattleTentTrainerMons_Kendall[] = { SLATEPORT_TENT_MON_WAILMER_1, SLATEPORT_TENT_MON_WINGULL_1, @@ -154,7 +154,7 @@ const u16 gSlateportBattleTentTrainerMons_Kendall[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Colten[] = +const u16 gSlateportBattleTentTrainerMons_Colten[] = { SLATEPORT_TENT_MON_ZIGZAGOON_1, SLATEPORT_TENT_MON_BEAUTIFLY, @@ -171,7 +171,7 @@ const u16 gSlateportBattleTentTrainerMons_Colten[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Irvin[] = +const u16 gSlateportBattleTentTrainerMons_Irvin[] = { SLATEPORT_TENT_MON_ZIGZAGOON_1, SLATEPORT_TENT_MON_ZIGZAGOON_2, @@ -189,7 +189,7 @@ const u16 gSlateportBattleTentTrainerMons_Irvin[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Shaun[] = +const u16 gSlateportBattleTentTrainerMons_Shaun[] = { SLATEPORT_TENT_MON_BALTOY, SLATEPORT_TENT_MON_MIGHTYENA_1, @@ -207,7 +207,7 @@ const u16 gSlateportBattleTentTrainerMons_Shaun[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Kyler[] = +const u16 gSlateportBattleTentTrainerMons_Kyler[] = { SLATEPORT_TENT_MON_ELECTRIKE_1, SLATEPORT_TENT_MON_VOLTORB, @@ -224,7 +224,7 @@ const u16 gSlateportBattleTentTrainerMons_Kyler[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Maggie[] = +const u16 gSlateportBattleTentTrainerMons_Maggie[] = { SLATEPORT_TENT_MON_LOMBRE_1, SLATEPORT_TENT_MON_NUZLEAF, @@ -240,7 +240,7 @@ const u16 gSlateportBattleTentTrainerMons_Maggie[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Stephon[] = +const u16 gSlateportBattleTentTrainerMons_Stephon[] = { SLATEPORT_TENT_MON_PELIPPER_1, SLATEPORT_TENT_MON_LOMBRE_1, @@ -256,7 +256,7 @@ const u16 gSlateportBattleTentTrainerMons_Stephon[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Rebecca[] = +const u16 gSlateportBattleTentTrainerMons_Rebecca[] = { SLATEPORT_TENT_MON_PELIPPER_1, SLATEPORT_TENT_MON_NUZLEAF, @@ -272,7 +272,7 @@ const u16 gSlateportBattleTentTrainerMons_Rebecca[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Reggie[] = +const u16 gSlateportBattleTentTrainerMons_Reggie[] = { SLATEPORT_TENT_MON_MARILL_1, SLATEPORT_TENT_MON_WINGULL_1, @@ -289,7 +289,7 @@ const u16 gSlateportBattleTentTrainerMons_Reggie[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Janae[] = +const u16 gSlateportBattleTentTrainerMons_Janae[] = { SLATEPORT_TENT_MON_ZIGZAGOON_1, SLATEPORT_TENT_MON_ZIGZAGOON_2, @@ -306,7 +306,7 @@ const u16 gSlateportBattleTentTrainerMons_Janae[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Caiden[] = +const u16 gSlateportBattleTentTrainerMons_Caiden[] = { SLATEPORT_TENT_MON_LOMBRE_1, SLATEPORT_TENT_MON_NINJASK_1, @@ -324,7 +324,7 @@ const u16 gSlateportBattleTentTrainerMons_Caiden[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Kirsten[] = +const u16 gSlateportBattleTentTrainerMons_Kirsten[] = { SLATEPORT_TENT_MON_LOMBRE_1, SLATEPORT_TENT_MON_GRAVELER, @@ -342,7 +342,7 @@ const u16 gSlateportBattleTentTrainerMons_Kirsten[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Kurtis[] = +const u16 gSlateportBattleTentTrainerMons_Kurtis[] = { SLATEPORT_TENT_MON_ZIGZAGOON_1, SLATEPORT_TENT_MON_ZIGZAGOON_2, @@ -358,7 +358,7 @@ const u16 gSlateportBattleTentTrainerMons_Kurtis[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Stefan[] = +const u16 gSlateportBattleTentTrainerMons_Stefan[] = { SLATEPORT_TENT_MON_WAILMER_1, SLATEPORT_TENT_MON_WAILMER_2, @@ -374,7 +374,7 @@ const u16 gSlateportBattleTentTrainerMons_Stefan[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Avery[] = +const u16 gSlateportBattleTentTrainerMons_Avery[] = { SLATEPORT_TENT_MON_BEAUTIFLY, SLATEPORT_TENT_MON_DUSTOX, @@ -390,7 +390,7 @@ const u16 gSlateportBattleTentTrainerMons_Avery[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Dwane[] = +const u16 gSlateportBattleTentTrainerMons_Dwane[] = { SLATEPORT_TENT_MON_NINJASK_1, SLATEPORT_TENT_MON_NINJASK_2, @@ -406,7 +406,7 @@ const u16 gSlateportBattleTentTrainerMons_Dwane[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Mckenna[] = +const u16 gSlateportBattleTentTrainerMons_Mckenna[] = { SLATEPORT_TENT_MON_CACNEA_2, SLATEPORT_TENT_MON_SWELLOW, @@ -422,7 +422,7 @@ const u16 gSlateportBattleTentTrainerMons_Mckenna[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Camryn[] = +const u16 gSlateportBattleTentTrainerMons_Camryn[] = { SLATEPORT_TENT_MON_WAILMER_2, SLATEPORT_TENT_MON_MARILL_1, @@ -439,7 +439,7 @@ const u16 gSlateportBattleTentTrainerMons_Camryn[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Natasha[] = +const u16 gSlateportBattleTentTrainerMons_Natasha[] = { SLATEPORT_TENT_MON_ZIGZAGOON_2, SLATEPORT_TENT_MON_DUSTOX, @@ -455,7 +455,7 @@ const u16 gSlateportBattleTentTrainerMons_Natasha[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Austyn[] = +const u16 gSlateportBattleTentTrainerMons_Austyn[] = { SLATEPORT_TENT_MON_ARON_2, SLATEPORT_TENT_MON_LOUDRED, @@ -472,7 +472,7 @@ const u16 gSlateportBattleTentTrainerMons_Austyn[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Donovan[] = +const u16 gSlateportBattleTentTrainerMons_Donovan[] = { SLATEPORT_TENT_MON_LOMBRE_1, SLATEPORT_TENT_MON_GRAVELER, @@ -491,7 +491,7 @@ const u16 gSlateportBattleTentTrainerMons_Donovan[] = -1 }; -const u16 gSlateportBattleTentTrainerMons_Tamia[] = +const u16 gSlateportBattleTentTrainerMons_Tamia[] = { SLATEPORT_TENT_MON_BEAUTIFLY, SLATEPORT_TENT_MON_MARILL_1, @@ -507,7 +507,7 @@ const u16 gSlateportBattleTentTrainerMons_Tamia[] = -1 }; -const struct BattleFrontierTrainer gSlateportBattleTentTrainers[NUM_BATTLE_TENT_TRAINERS] = +const struct BattleFrontierTrainer gSlateportBattleTentTrainers[NUM_BATTLE_TENT_TRAINERS] = { [SLATEPORT_TENT_TRAINER_JOLIE] = { .facilityClass = FACILITY_CLASS_AROMA_LADY, @@ -751,7 +751,7 @@ const struct BattleFrontierTrainer gSlateportBattleTentTrainers[NUM_BATTLE_TENT_ } }; -const struct FacilityMon gSlateportBattleTentMons[NUM_SLATEPORT_TENT_MONS] = +const struct FacilityMon gSlateportBattleTentMons[NUM_SLATEPORT_TENT_MONS] = { [SLATEPORT_TENT_MON_ZIGZAGOON_1] = { .species = SPECIES_ZIGZAGOON, @@ -1246,7 +1246,7 @@ const struct FacilityMon gSlateportBattleTentMons[NUM_SLATEPORT_TENT_MONS] = }; // Verdanturf Battle Tent. -const u16 gVerdanturfBattleTentTrainerMons_Brenna[] = +const u16 gVerdanturfBattleTentTrainerMons_Brenna[] = { VERDANTURF_TENT_MON_SHROOMISH, VERDANTURF_TENT_MON_SWALOT, @@ -1256,7 +1256,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Brenna[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Dilan[] = +const u16 gVerdanturfBattleTentTrainerMons_Dilan[] = { VERDANTURF_TENT_MON_GRAVELER, VERDANTURF_TENT_MON_TRAPINCH, @@ -1266,7 +1266,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Dilan[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Eliana[] = +const u16 gVerdanturfBattleTentTrainerMons_Eliana[] = { VERDANTURF_TENT_MON_MAGIKARP, VERDANTURF_TENT_MON_BARBOACH, @@ -1276,7 +1276,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Eliana[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Markus[] = +const u16 gVerdanturfBattleTentTrainerMons_Markus[] = { VERDANTURF_TENT_MON_MAGIKARP, VERDANTURF_TENT_MON_BARBOACH, @@ -1286,7 +1286,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Markus[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Caitlyn[] = +const u16 gVerdanturfBattleTentTrainerMons_Caitlyn[] = { VERDANTURF_TENT_MON_POOCHYENA, VERDANTURF_TENT_MON_KECLEON, @@ -1297,7 +1297,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Caitlyn[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Desiree[] = +const u16 gVerdanturfBattleTentTrainerMons_Desiree[] = { VERDANTURF_TENT_MON_WINGULL, VERDANTURF_TENT_MON_KECLEON, @@ -1307,7 +1307,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Desiree[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Ronald[] = +const u16 gVerdanturfBattleTentTrainerMons_Ronald[] = { VERDANTURF_TENT_MON_ZIGZAGOON, VERDANTURF_TENT_MON_LINOONE, @@ -1317,7 +1317,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Ronald[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Ashten[] = +const u16 gVerdanturfBattleTentTrainerMons_Ashten[] = { VERDANTURF_TENT_MON_ARON_1, VERDANTURF_TENT_MON_KECLEON, @@ -1327,7 +1327,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Ashten[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Gerard[] = +const u16 gVerdanturfBattleTentTrainerMons_Gerard[] = { VERDANTURF_TENT_MON_MARILL, VERDANTURF_TENT_MON_BARBOACH, @@ -1337,7 +1337,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Gerard[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Bradly[] = +const u16 gVerdanturfBattleTentTrainerMons_Bradly[] = { VERDANTURF_TENT_MON_NUZLEAF, VERDANTURF_TENT_MON_TAILLOW, @@ -1347,7 +1347,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Bradly[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Dennis[] = +const u16 gVerdanturfBattleTentTrainerMons_Dennis[] = { VERDANTURF_TENT_MON_NINJASK, VERDANTURF_TENT_MON_TRAPINCH, @@ -1357,7 +1357,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Dennis[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Prestin[] = +const u16 gVerdanturfBattleTentTrainerMons_Prestin[] = { VERDANTURF_TENT_MON_KADABRA, VERDANTURF_TENT_MON_MIGHTYENA, @@ -1369,7 +1369,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Prestin[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Ernesto[] = +const u16 gVerdanturfBattleTentTrainerMons_Ernesto[] = { VERDANTURF_TENT_MON_MAGNEMITE, VERDANTURF_TENT_MON_VOLTORB, @@ -1379,7 +1379,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Ernesto[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Nala[] = +const u16 gVerdanturfBattleTentTrainerMons_Nala[] = { VERDANTURF_TENT_MON_ZIGZAGOON, VERDANTURF_TENT_MON_SHROOMISH, @@ -1391,7 +1391,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Nala[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Darnell[] = +const u16 gVerdanturfBattleTentTrainerMons_Darnell[] = { VERDANTURF_TENT_MON_POOCHYENA, VERDANTURF_TENT_MON_SOLROCK, @@ -1402,7 +1402,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Darnell[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Ashlyn[] = +const u16 gVerdanturfBattleTentTrainerMons_Ashlyn[] = { VERDANTURF_TENT_MON_SOLROCK, VERDANTURF_TENT_MON_MARILL, @@ -1414,7 +1414,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Ashlyn[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Addison[] = +const u16 gVerdanturfBattleTentTrainerMons_Addison[] = { VERDANTURF_TENT_MON_POOCHYENA, VERDANTURF_TENT_MON_ZIGZAGOON, @@ -1424,7 +1424,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Addison[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Justine[] = +const u16 gVerdanturfBattleTentTrainerMons_Justine[] = { VERDANTURF_TENT_MON_POOCHYENA, VERDANTURF_TENT_MON_ZIGZAGOON, @@ -1434,7 +1434,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Justine[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Tyson[] = +const u16 gVerdanturfBattleTentTrainerMons_Tyson[] = { VERDANTURF_TENT_MON_MACHOP, VERDANTURF_TENT_MON_MAKUHITA, @@ -1446,7 +1446,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Tyson[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Laila[] = +const u16 gVerdanturfBattleTentTrainerMons_Laila[] = { VERDANTURF_TENT_MON_MACHOP, VERDANTURF_TENT_MON_MAKUHITA, @@ -1457,7 +1457,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Laila[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Waren[] = +const u16 gVerdanturfBattleTentTrainerMons_Waren[] = { VERDANTURF_TENT_MON_POOCHYENA, VERDANTURF_TENT_MON_ARON_1, @@ -1467,7 +1467,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Waren[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Tobias[] = +const u16 gVerdanturfBattleTentTrainerMons_Tobias[] = { VERDANTURF_TENT_MON_MAGIKARP, VERDANTURF_TENT_MON_BARBOACH, @@ -1477,7 +1477,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Tobias[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Josiah[] = +const u16 gVerdanturfBattleTentTrainerMons_Josiah[] = { VERDANTURF_TENT_MON_WINGULL, VERDANTURF_TENT_MON_SWABLU, @@ -1487,7 +1487,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Josiah[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Dion[] = +const u16 gVerdanturfBattleTentTrainerMons_Dion[] = { VERDANTURF_TENT_MON_NINJASK, VERDANTURF_TENT_MON_DUSTOX, @@ -1498,7 +1498,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Dion[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Kenzie[] = +const u16 gVerdanturfBattleTentTrainerMons_Kenzie[] = { VERDANTURF_TENT_MON_LOTAD, VERDANTURF_TENT_MON_NUMEL_1, @@ -1509,7 +1509,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Kenzie[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Lillian[] = +const u16 gVerdanturfBattleTentTrainerMons_Lillian[] = { VERDANTURF_TENT_MON_GOLDEEN_2, VERDANTURF_TENT_MON_PELIPPER, @@ -1519,7 +1519,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Lillian[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Lesley[] = +const u16 gVerdanturfBattleTentTrainerMons_Lesley[] = { VERDANTURF_TENT_MON_NUZLEAF, VERDANTURF_TENT_MON_POOCHYENA, @@ -1529,7 +1529,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Lesley[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Marquis[] = +const u16 gVerdanturfBattleTentTrainerMons_Marquis[] = { VERDANTURF_TENT_MON_GOLDEEN_2, VERDANTURF_TENT_MON_PELIPPER, @@ -1540,7 +1540,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Marquis[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Freddy[] = +const u16 gVerdanturfBattleTentTrainerMons_Freddy[] = { VERDANTURF_TENT_MON_LOTAD, VERDANTURF_TENT_MON_SEVIPER, @@ -1550,7 +1550,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Freddy[] = -1 }; -const u16 gVerdanturfBattleTentTrainerMons_Cecilia[] = +const u16 gVerdanturfBattleTentTrainerMons_Cecilia[] = { VERDANTURF_TENT_MON_SWELLOW, VERDANTURF_TENT_MON_NUZLEAF, @@ -1560,7 +1560,7 @@ const u16 gVerdanturfBattleTentTrainerMons_Cecilia[] = -1 }; -const struct BattleFrontierTrainer gVerdanturfBattleTentTrainers[NUM_BATTLE_TENT_TRAINERS] = +const struct BattleFrontierTrainer gVerdanturfBattleTentTrainers[NUM_BATTLE_TENT_TRAINERS] = { [VERDANTURF_TENT_TRAINER_BRENNA] = { .facilityClass = FACILITY_CLASS_AROMA_LADY, @@ -1804,7 +1804,7 @@ const struct BattleFrontierTrainer gVerdanturfBattleTentTrainers[NUM_BATTLE_TENT } }; -const struct FacilityMon gVerdanturfBattleTentMons[NUM_VERDANTURF_TENT_MONS] = +const struct FacilityMon gVerdanturfBattleTentMons[NUM_VERDANTURF_TENT_MONS] = { [VERDANTURF_TENT_MON_POOCHYENA] = { .species = SPECIES_POOCHYENA, @@ -2124,7 +2124,7 @@ const struct FacilityMon gVerdanturfBattleTentMons[NUM_VERDANTURF_TENT_MONS] = }; // Fallarbor Battle Tent. -const u16 gFallarborBattleTentTrainerMons_Amber[] = +const u16 gFallarborBattleTentTrainerMons_Amber[] = { FALLARBOR_TENT_MON_SWALOT, FALLARBOR_TENT_MON_SHROOMISH, @@ -2135,7 +2135,7 @@ const u16 gFallarborBattleTentTrainerMons_Amber[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Javier[] = +const u16 gFallarborBattleTentTrainerMons_Javier[] = { FALLARBOR_TENT_MON_SOLROCK, FALLARBOR_TENT_MON_TRAPINCH, @@ -2146,7 +2146,7 @@ const u16 gFallarborBattleTentTrainerMons_Javier[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Natalie[] = +const u16 gFallarborBattleTentTrainerMons_Natalie[] = { FALLARBOR_TENT_MON_MAGIKARP, FALLARBOR_TENT_MON_PELIPPER, @@ -2156,7 +2156,7 @@ const u16 gFallarborBattleTentTrainerMons_Natalie[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Treve[] = +const u16 gFallarborBattleTentTrainerMons_Treve[] = { FALLARBOR_TENT_MON_WINGULL, FALLARBOR_TENT_MON_PELIPPER, @@ -2166,7 +2166,7 @@ const u16 gFallarborBattleTentTrainerMons_Treve[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Arianna[] = +const u16 gFallarborBattleTentTrainerMons_Arianna[] = { FALLARBOR_TENT_MON_ELECTRIKE, FALLARBOR_TENT_MON_LINOONE_2, @@ -2176,7 +2176,7 @@ const u16 gFallarborBattleTentTrainerMons_Arianna[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Jadyn[] = +const u16 gFallarborBattleTentTrainerMons_Jadyn[] = { FALLARBOR_TENT_MON_NUMEL, FALLARBOR_TENT_MON_LOUDRED, @@ -2187,7 +2187,7 @@ const u16 gFallarborBattleTentTrainerMons_Jadyn[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Gerardo[] = +const u16 gFallarborBattleTentTrainerMons_Gerardo[] = { FALLARBOR_TENT_MON_SOLROCK, FALLARBOR_TENT_MON_ELECTRIKE, @@ -2197,7 +2197,7 @@ const u16 gFallarborBattleTentTrainerMons_Gerardo[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Jonn[] = +const u16 gFallarborBattleTentTrainerMons_Jonn[] = { FALLARBOR_TENT_MON_ARON_1, FALLARBOR_TENT_MON_ARON_2, @@ -2207,7 +2207,7 @@ const u16 gFallarborBattleTentTrainerMons_Jonn[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Esteban[] = +const u16 gFallarborBattleTentTrainerMons_Esteban[] = { FALLARBOR_TENT_MON_MAGIKARP, FALLARBOR_TENT_MON_WINGULL, @@ -2217,7 +2217,7 @@ const u16 gFallarborBattleTentTrainerMons_Esteban[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Jameson[] = +const u16 gFallarborBattleTentTrainerMons_Jameson[] = { FALLARBOR_TENT_MON_LINOONE_1, FALLARBOR_TENT_MON_PLUSLE, @@ -2227,7 +2227,7 @@ const u16 gFallarborBattleTentTrainerMons_Jameson[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Alanzo[] = +const u16 gFallarborBattleTentTrainerMons_Alanzo[] = { FALLARBOR_TENT_MON_NINCADA, FALLARBOR_TENT_MON_BEAUTIFLY, @@ -2239,7 +2239,7 @@ const u16 gFallarborBattleTentTrainerMons_Alanzo[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Howard[] = +const u16 gFallarborBattleTentTrainerMons_Howard[] = { FALLARBOR_TENT_MON_ELECTRIKE, FALLARBOR_TENT_MON_LINOONE_2, @@ -2249,7 +2249,7 @@ const u16 gFallarborBattleTentTrainerMons_Howard[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Conrad[] = +const u16 gFallarborBattleTentTrainerMons_Conrad[] = { FALLARBOR_TENT_MON_ELECTRIKE, FALLARBOR_TENT_MON_MAGNEMITE, @@ -2259,7 +2259,7 @@ const u16 gFallarborBattleTentTrainerMons_Conrad[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Makenna[] = +const u16 gFallarborBattleTentTrainerMons_Makenna[] = { FALLARBOR_TENT_MON_KECLEON, FALLARBOR_TENT_MON_WHISMUR, @@ -2269,7 +2269,7 @@ const u16 gFallarborBattleTentTrainerMons_Makenna[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Brayan[] = +const u16 gFallarborBattleTentTrainerMons_Brayan[] = { FALLARBOR_TENT_MON_NUMEL, FALLARBOR_TENT_MON_KECLEON, @@ -2281,7 +2281,7 @@ const u16 gFallarborBattleTentTrainerMons_Brayan[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Mariana[] = +const u16 gFallarborBattleTentTrainerMons_Mariana[] = { FALLARBOR_TENT_MON_NUMEL, FALLARBOR_TENT_MON_KECLEON, @@ -2293,7 +2293,7 @@ const u16 gFallarborBattleTentTrainerMons_Mariana[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Sheldon[] = +const u16 gFallarborBattleTentTrainerMons_Sheldon[] = { FALLARBOR_TENT_MON_PLUSLE, FALLARBOR_TENT_MON_POOCHYENA, @@ -2303,7 +2303,7 @@ const u16 gFallarborBattleTentTrainerMons_Sheldon[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Gianna[] = +const u16 gFallarborBattleTentTrainerMons_Gianna[] = { FALLARBOR_TENT_MON_LINOONE_1, FALLARBOR_TENT_MON_PLUSLE, @@ -2313,7 +2313,7 @@ const u16 gFallarborBattleTentTrainerMons_Gianna[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Yahir[] = +const u16 gFallarborBattleTentTrainerMons_Yahir[] = { FALLARBOR_TENT_MON_KECLEON, FALLARBOR_TENT_MON_MACHOKE, @@ -2324,7 +2324,7 @@ const u16 gFallarborBattleTentTrainerMons_Yahir[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Britney[] = +const u16 gFallarborBattleTentTrainerMons_Britney[] = { FALLARBOR_TENT_MON_KECLEON, FALLARBOR_TENT_MON_MAKUHITA, @@ -2335,7 +2335,7 @@ const u16 gFallarborBattleTentTrainerMons_Britney[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Hecter[] = +const u16 gFallarborBattleTentTrainerMons_Hecter[] = { FALLARBOR_TENT_MON_NUMEL, FALLARBOR_TENT_MON_LINOONE_1, @@ -2346,7 +2346,7 @@ const u16 gFallarborBattleTentTrainerMons_Hecter[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Tannor[] = +const u16 gFallarborBattleTentTrainerMons_Tannor[] = { FALLARBOR_TENT_MON_MAGIKARP, FALLARBOR_TENT_MON_BARBOACH, @@ -2356,7 +2356,7 @@ const u16 gFallarborBattleTentTrainerMons_Tannor[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Benji[] = +const u16 gFallarborBattleTentTrainerMons_Benji[] = { FALLARBOR_TENT_MON_SWABLU, FALLARBOR_TENT_MON_SKARMORY, @@ -2366,7 +2366,7 @@ const u16 gFallarborBattleTentTrainerMons_Benji[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Rory[] = +const u16 gFallarborBattleTentTrainerMons_Rory[] = { FALLARBOR_TENT_MON_NINCADA, FALLARBOR_TENT_MON_DUSTOX, @@ -2377,7 +2377,7 @@ const u16 gFallarborBattleTentTrainerMons_Rory[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Eleanor[] = +const u16 gFallarborBattleTentTrainerMons_Eleanor[] = { FALLARBOR_TENT_MON_LINOONE_2, FALLARBOR_TENT_MON_WINGULL, @@ -2389,7 +2389,7 @@ const u16 gFallarborBattleTentTrainerMons_Eleanor[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Evelyn[] = +const u16 gFallarborBattleTentTrainerMons_Evelyn[] = { FALLARBOR_TENT_MON_PELIPPER, FALLARBOR_TENT_MON_WAILMER, @@ -2399,7 +2399,7 @@ const u16 gFallarborBattleTentTrainerMons_Evelyn[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Arielle[] = +const u16 gFallarborBattleTentTrainerMons_Arielle[] = { FALLARBOR_TENT_MON_LINOONE_1, FALLARBOR_TENT_MON_POOCHYENA, @@ -2409,7 +2409,7 @@ const u16 gFallarborBattleTentTrainerMons_Arielle[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Connar[] = +const u16 gFallarborBattleTentTrainerMons_Connar[] = { FALLARBOR_TENT_MON_MAKUHITA, FALLARBOR_TENT_MON_MACHOKE, @@ -2420,7 +2420,7 @@ const u16 gFallarborBattleTentTrainerMons_Connar[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Maurice[] = +const u16 gFallarborBattleTentTrainerMons_Maurice[] = { FALLARBOR_TENT_MON_KECLEON, FALLARBOR_TENT_MON_MAGIKARP, @@ -2430,7 +2430,7 @@ const u16 gFallarborBattleTentTrainerMons_Maurice[] = -1 }; -const u16 gFallarborBattleTentTrainerMons_Kianna[] = +const u16 gFallarborBattleTentTrainerMons_Kianna[] = { FALLARBOR_TENT_MON_LOUDRED, FALLARBOR_TENT_MON_MIGHTYENA, @@ -2441,7 +2441,7 @@ const u16 gFallarborBattleTentTrainerMons_Kianna[] = -1 }; -const struct BattleFrontierTrainer gFallarborBattleTentTrainers[NUM_BATTLE_TENT_TRAINERS] = +const struct BattleFrontierTrainer gFallarborBattleTentTrainers[NUM_BATTLE_TENT_TRAINERS] = { [FALLARBOR_TENT_TRAINER_AMBER] = { .facilityClass = FACILITY_CLASS_AROMA_LADY, @@ -2685,7 +2685,7 @@ const struct BattleFrontierTrainer gFallarborBattleTentTrainers[NUM_BATTLE_TENT_ } }; -const struct FacilityMon gFallarborBattleTentMons[NUM_FALLARBOR_TENT_MONS] = +const struct FacilityMon gFallarborBattleTentMons[NUM_FALLARBOR_TENT_MONS] = { [FALLARBOR_TENT_MON_NUMEL] = { .species = SPECIES_NUMEL, diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h index 59cfabd644..ffde333e7b 100644 --- a/src/data/battle_frontier/trainer_hill.h +++ b/src/data/battle_frontier/trainer_hill.h @@ -1,20 +1,23 @@ -#define TRAINER_HILL_OTID 0x10000000 - // NOTE: Each of these macros turn data into one byte. Therefore ranges for all arguments is 0-15 -// See struct TrHillDisplay for more info about each +// See struct TrainerHillFloorMap for more info about each #define COORDS_XY(x,y) ((y<<4)|(x)) #define TRAINER_DIRS(a, b) (((a-1)<<4)|(b-1)) #define TRAINER_RANGE(a, b) ((a<<4)|(b)) -static const struct TrHillTag sDataTagJPDefault = { +// WARNING: While not referenced directly, the floor data in this file is referenced by virtue +// of coming after its corresponding challenge (see SetUpDataStruct in trainer_hill.c). +// Do not insert data between a pair of 'sChallenge_Mode' and 'sFloors_Mode'. + +// Unused +static const struct TrainerHillChallenge sChallenge_JPDefault = { .numTrainers = NUM_TRAINER_HILL_TRAINERS_JP, .unused1 = 1, .numFloors = NUM_TRAINER_HILL_FLOORS_JP, .checksum = 0x0 }; - -static const struct TrHillFloor sDataTagJPDefault_Floors[] = { +// Unused +static const struct TrainerHillFloor sFloors_JPDefault[] = { [0] = { .trainerNum1 = 0, .trainerNum2 = 0, @@ -22,7 +25,7 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { [0] = { .name = __("シゲノブ$$$$ "), .facilityClass = FACILITY_CLASS_YOUNGSTER, - .unused = 0x1, + .unused = TRUE, .speechBefore = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_EXCL, EC_WORD_THEY_WERE, EC_WORD_OPPONENT, EC_WORD_CAN }, .speechWin = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_WEAK, EC_WORD_OF, EC_WORD_WERE, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS }, .speechLose = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_STRONG, EC_WORD_HEY_QUES, EC_WORD_EXCL, EC_WORD_EXCL }, @@ -32,13 +35,10 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .species = SPECIES_ZIGZAGOON, .heldItem = ITEM_SITRUS_BERRY, .moves = { MOVE_HEADBUTT, MOVE_PIN_MISSILE, MOVE_GROWL, MOVE_TAIL_WHIP }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 110, .attackEV = 100, .defenseEV = 100, .speedEV = 100, - .spAttackEV = 0, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, .hpIV = 5, @@ -50,18 +50,14 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 0, .personality = 0x80, .nickname = __("ジグザグマ$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [1] = { .species = SPECIES_SHROOMISH, .heldItem = ITEM_PECHA_BERRY, .moves = { MOVE_MEGA_DRAIN, MOVE_LEECH_SEED, MOVE_POISON_POWDER, MOVE_GROWTH }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 120, - .attackEV = 0, .defenseEV = 120, - .speedEV = 0, .spAttackEV = 150, .spDefenseEV = 120, .otId = TRAINER_HILL_OTID, @@ -74,19 +70,15 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 0, .personality = 0x0, .nickname = __("キノココ$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [2] = { .species = SPECIES_SANDSHREW, .heldItem = ITEM_QUICK_CLAW, .moves = { MOVE_SCRATCH, MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SWIFT }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 110, .attackEV = 100, .defenseEV = 100, - .speedEV = 0, - .spAttackEV = 0, .spDefenseEV = 200, .otId = TRAINER_HILL_OTID, .hpIV = 5, @@ -98,35 +90,32 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 0, .personality = 0x80, .nickname = __("サンド$$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, - [3] = NULL_BATTLE_TOWER_POKEMON, - [4] = NULL_BATTLE_TOWER_POKEMON, - [5] = NULL_BATTLE_TOWER_POKEMON + [3] = DUMMY_HILL_MON, + [4] = DUMMY_HILL_MON, + [5] = DUMMY_HILL_MON } }, [1] = { .name = __("アカリ$$$$$ "), .facilityClass = FACILITY_CLASS_PARASOL_LADY, - .unused = 0x1, + .unused = TRUE, .speechBefore = { EC_WORD_SHE, EC_WORD_EVERY, EC_WORD_TYPE, EC_WORD_ADORE, EC_WORD_FOR, EC_WORD_EXCL }, .speechWin = { EC_WORD_SURPRISE, EC_WORD_THESE, EC_WORD_WONDER, EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_WORD_EXCL }, .speechLose = { EC_WORD_OH_QUES, EC_MOVE(EARTHQUAKE), EC_WORD_EXISTS, EC_WORD_OF, EC_WORD_WITHOUT, EC_WORD_EXCL }, .speechAfter = { EC_WORD_YOU_RE, EC_WORD_PROBABLY, EC_WORD_END, EC_WORD_UNTIL, EC_WORD_GOING, EC_WORD_ANYWHERE }, .mons = { - [0] = NULL_BATTLE_TOWER_POKEMON, - [1] = NULL_BATTLE_TOWER_POKEMON, - [2] = NULL_BATTLE_TOWER_POKEMON, + [0] = DUMMY_HILL_MON, + [1] = DUMMY_HILL_MON, + [2] = DUMMY_HILL_MON, [3] = { .species = SPECIES_WINGULL, .heldItem = ITEM_CHERI_BERRY, .moves = { MOVE_WATER_GUN, MOVE_WING_ATTACK, MOVE_GROWL, MOVE_SUPERSONIC }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 110, .attackEV = 100, .defenseEV = 100, - .speedEV = 0, .spAttackEV = 100, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -139,18 +128,15 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 0, .personality = 0x0, .nickname = __("キャモメ$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [4] = { .species = SPECIES_NUMEL, .heldItem = ITEM_FOCUS_BAND, .moves = { MOVE_EMBER, MOVE_DIG, MOVE_TACKLE, MOVE_FOCUS_ENERGY }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 110, .attackEV = 100, .defenseEV = 100, - .speedEV = 0, .spAttackEV = 100, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -163,18 +149,15 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 0, .personality = 0x96, .nickname = __("ドンメル$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [5] = { .species = SPECIES_SURSKIT, .heldItem = ITEM_PERSIM_BERRY, .moves = { MOVE_BUBBLE_BEAM, MOVE_MUD_SHOT, MOVE_QUICK_ATTACK, MOVE_AGILITY }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 100, .attackEV = 100, .defenseEV = 100, - .speedEV = 0, .spAttackEV = 100, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -187,34 +170,17 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 0, .personality = 0x0, .nickname = __("アメタマ$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, } }, }, - .display = { - .metatileData = { - 0x31, 0x35, 0x35, 0x3b, 0x26, 0x26, 0x1b, 0x1c, 0x1d, 0x25, 0x39, 0x3a, 0x3b, 0x3b, 0x3b, 0x08, - 0x31, 0x2b, 0x2b, 0x3b, 0x34, 0x34, 0x2b, 0x2b, 0x34, 0x33, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x08, - 0x31, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x34, 0x34, 0x3b, 0x33, 0x3f, 0x3f, 0x3f, 0x3b, 0x3b, 0x08, - 0x31, 0x2b, 0x2b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x3b, 0x33, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, 0x08, - 0x31, 0x2b, 0x34, 0x34, 0x34, 0x2b, 0x34, 0x34, 0x3b, 0x2c, 0x3f, 0x3f, 0x3f, 0x3b, 0x3b, 0x08, - 0x31, 0x2b, 0x3b, 0x35, 0x3b, 0x2b, 0x3b, 0x35, 0x3b, 0x35, 0x3b, 0x3f, 0x3f, 0x3f, 0x3b, 0x08, - 0x31, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x3f, 0x3f, 0x3f, 0x3b, 0x08, - 0x31, 0x34, 0x3b, 0x2b, 0x3b, 0x34, 0x3b, 0x2b, 0x35, 0x2b, 0x3b, 0x3b, 0x3f, 0x3b, 0x3b, 0x08, - 0x31, 0x3b, 0x3b, 0x34, 0x3b, 0x3b, 0x3b, 0x34, 0x34, 0x34, 0x3f, 0x3b, 0x3b, 0x3b, 0x3f, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = { 0x0381, 0x6fc1, 0x6341, 0x6041, 0x7f41, 0x4401, 0x5541, 0x5541, 0x11c1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }, - .coords = { COORDS_XY(8,2), COORDS_XY(8,7) }, - .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .range = TRAINER_RANGE(2, 3) + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_jp/floor_0/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_jp/floor_0/collision.bin"), + .trainerCoords = { COORDS_XY(8,2), COORDS_XY(8,7) }, + .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .trainerRanges = TRAINER_RANGE(2, 3) } }, [1] = { @@ -224,7 +190,7 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { [0] = { .name = __("シゲゾウ$$$$ "), .facilityClass = FACILITY_CLASS_NINJA_BOY, - .unused = 0x1, + .unused = TRUE, .speechBefore = { EC_WORD_WIN, EC_WORD_UNTIL, EC_WORD_DAUGHTER, EC_MOVE(CONSTRICT), EC_WORD_OF, EC_WORD_WERE }, .speechWin = { EC_MOVE(CONSTRICT), EC_WORD_UNTIL, EC_WORD_LESS, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_EXCL }, .speechLose = { EC_WORD_YET, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_URGH, EC_WORD_ALMOST, EC_WORD_POWER, EC_WORD_NONE }, @@ -234,14 +200,10 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .species = SPECIES_ELECTRIKE, .heldItem = ITEM_CHERI_BERRY, .moves = { MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_ROAR }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 120, .attackEV = 120, - .defenseEV = 0, .speedEV = 120, .spAttackEV = 150, - .spDefenseEV = 0, .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, @@ -252,18 +214,15 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 1, .personality = 0x0, .nickname = __("ラクライ$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [1] = { .species = SPECIES_CORPHISH, .heldItem = ITEM_QUICK_CLAW, .moves = { MOVE_KNOCK_OFF, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_PROTECT }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 100, .attackEV = 110, .defenseEV = 100, - .speedEV = 0, .spAttackEV = 100, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -276,18 +235,15 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 1, .personality = 0x96, .nickname = __("ヘイガニ$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [2] = { .species = SPECIES_BALTOY, .heldItem = ITEM_PERSIM_BERRY, .moves = { MOVE_PSYBEAM, MOVE_ROCK_TOMB, MOVE_MUD_SLAP, MOVE_HARDEN }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 100, .attackEV = 100, .defenseEV = 100, - .speedEV = 0, .spAttackEV = 110, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -300,35 +256,32 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 0, .personality = 0x96, .nickname = __("ヤジロン$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, - [3] = NULL_BATTLE_TOWER_POKEMON, - [4] = NULL_BATTLE_TOWER_POKEMON, - [5] = NULL_BATTLE_TOWER_POKEMON, + [3] = DUMMY_HILL_MON, + [4] = DUMMY_HILL_MON, + [5] = DUMMY_HILL_MON, } }, [1] = { .name = __("ナミコ$$$$$ "), .facilityClass = FACILITY_CLASS_BEAUTY, - .unused = 0x1, + .unused = TRUE, .speechBefore = { EC_WORD_SISTER, EC_WORD_ALTHOUGH, EC_WORD_KIND, EC_WORD_MATCH, EC_WORD_PLEASE, EC_WORD_WITHOUT }, .speechWin = { EC_WORD_KIND, EC_WORD_ELLIPSIS, EC_WORD_INSTEAD, EC_WORD_DEEP, EC_WORD_WEAK, EC_WORD_QUES }, .speechLose = { EC_WORD_AWFUL, EC_WORD_GWAH, EC_WORD_HOPELESS, EC_WORD_CAN_T_WIN, EC_WORD_IS, EC_WORD_NONE }, .speechAfter = { EC_WORD_AWW, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_ALMOST, EC_WORD_GOOD, EC_WORD_ANYWHERE }, .mons = { - [0] = NULL_BATTLE_TOWER_POKEMON, - [1] = NULL_BATTLE_TOWER_POKEMON, - [2] = NULL_BATTLE_TOWER_POKEMON, + [0] = DUMMY_HILL_MON, + [1] = DUMMY_HILL_MON, + [2] = DUMMY_HILL_MON, [3] = { .species = SPECIES_SPHEAL, .heldItem = ITEM_FOCUS_BAND, .moves = { MOVE_ICE_BALL, MOVE_BODY_SLAM, MOVE_WATER_GUN, MOVE_ENCORE }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 100, .attackEV = 100, .defenseEV = 100, - .speedEV = 0, .spAttackEV = 110, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -341,16 +294,13 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 0, .personality = 0x80, .nickname = __("タマザラシ$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [4] = { .species = SPECIES_SPOINK, .heldItem = ITEM_PERSIM_BERRY, .moves = { MOVE_PSYWAVE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_MAGIC_COAT }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 100, - .attackEV = 0, .defenseEV = 100, .speedEV = 100, .spAttackEV = 110, @@ -365,14 +315,12 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 1, .personality = 0xf, .nickname = __("バネブー$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [5] = { .species = SPECIES_POOCHYENA, .heldItem = ITEM_PECHA_BERRY, .moves = { MOVE_BITE, MOVE_POISON_FANG, MOVE_SWAGGER, MOVE_SCARY_FACE }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 70, .attackEV = 80, .defenseEV = 80, @@ -389,39 +337,22 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = { .abilityNum = 0, .personality = 0x96, .nickname = __("ポチエナ$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, } }, }, - .display = { - .metatileData = { - 0x31, 0x3b, 0x35, 0x3b, 0x39, 0x26, 0x1b, 0x1c, 0x1d, 0x25, 0x39, 0x3a, 0x3b, 0x35, 0x3b, 0x08, - 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x08, - 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3e, 0x3e, 0x3b, 0x2b, 0x3b, 0x08, - 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x08, - 0x3f, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3e, 0x3e, 0x2b, 0x3b, 0x08, - 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2c, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x08, - 0x31, 0x3f, 0x2b, 0x3b, 0x3b, 0x2c, 0x2c, 0x3b, 0x2c, 0x2c, 0x3e, 0x3e, 0x3b, 0x2b, 0x3b, 0x08, - 0x31, 0x3b, 0x2b, 0x35, 0x35, 0x35, 0x35, 0x3b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x2b, 0x3b, 0x08, - 0x3f, 0x3b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x3b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x3b, 0x08, - 0x31, 0x3b, 0x3f, 0x3f, 0x3b, 0x35, 0x35, 0x3b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, - 0x31, 0x3f, 0x3f, 0x3f, 0x3b, 0x2b, 0x2b, 0x35, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x08, - 0x31, 0x3f, 0x3f, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x08, - 0x31, 0x3b, 0x3b, 0x3b, 0x3f, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = { 0x0381, 0x27c5, 0x27c5, 0x27c5, 0x27c5, 0x27c5, 0x26c5, 0x2005, 0x3efd, 0x1, 0x6ff, 0x7ff, 0x7ff, 0xffff, 0xffff, 0xffff }, - .coords = { COORDS_XY(7,6), COORDS_XY(7,10) }, - .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .range = TRAINER_RANGE(3, 3) + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_jp/floor_1/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_jp/floor_1/collision.bin"), + .trainerCoords = { COORDS_XY(7,6), COORDS_XY(7,10) }, + .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .trainerRanges = TRAINER_RANGE(3, 3) } }, }; -static const struct TrHillTag sDataTagNormal = +static const struct TrainerHillChallenge sChallenge_Normal = { .numTrainers = NUM_TRAINER_HILL_TRAINERS, .unused1 = 2, @@ -429,7 +360,7 @@ static const struct TrHillTag sDataTagNormal = .checksum = 0x00051E05 }; -static const struct TrHillFloor sDataTagNormal_Floors[] = +static const struct TrainerHillFloor sFloors_Normal[] = { [0] = { @@ -441,7 +372,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = { .name = _("ALAINA"), .facilityClass = FACILITY_CLASS_HEX_MANIAC, - .unused = 0, .speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_CHOOSE, EC_WORD_NOT, EC_WORD_TO, EC_WORD_BELIEVE}, .speechWin = {EC_WORD_A, EC_WORD_SUPER, EC_WORD_NATURAL, EC_WORD_POWER, EC_WORD_HAS, EC_WORD_COME}, .speechLose = {EC_WORD_THIS, EC_WORD_MUST_BE, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_EXCL, EC_EMPTY_WORD}, @@ -453,8 +383,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_MISDREAVUS, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, .attackEV = 155, .speedEV = 255, .spAttackEV = 100, @@ -468,15 +396,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x0, .nickname = _("MISDREAVUS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_SOLROCK, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_PSYCHIC, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, - .level = 0, - .ppBonuses = 0, .hpEV = 200, .defenseEV = 100, .spAttackEV = 110, @@ -491,15 +417,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0xF, .nickname = _("SOLROCK"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_CLAYDOL, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ICE_BEAM}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .defenseEV = 135, .spDefenseEV = 120, @@ -513,15 +437,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0xC, .nickname = _("CLAYDOL"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_WEEZING, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, .hpEV = 110, .attackEV = 200, .spDefenseEV = 200, @@ -542,8 +464,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_LUNATONE, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, - .level = 0, - .ppBonuses = 0, .hpEV = 200, .defenseEV = 100, .spAttackEV = 110, @@ -558,15 +478,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0xF, .nickname = _("LUNATONE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_FLYGON, .heldItem = ITEM_CHOICE_BAND, .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_FLAMETHROWER}, - .level = 0, - .ppBonuses = 0, .attackEV = 155, .speedEV = 255, .spAttackEV = 100, @@ -580,7 +498,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x83, .nickname = _("FLYGON"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -588,7 +506,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = { .name = _("ALFONSO"), .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_TAKE, EC_WORD_A, EC_WORD_TRAIN, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(SUPERSONIC), EC_WORD_ON, EC_WORD_MY, EC_WORD_BIKE}, .speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL, EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_IT}, @@ -600,8 +517,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_SEALEO, .heldItem = ITEM_NEVER_MELT_ICE, .moves = {MOVE_BLIZZARD, MOVE_ICE_BALL, MOVE_ENCORE, MOVE_HAIL}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -614,15 +529,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0xF, .nickname = _("SEALEO"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_AMPHAROS, .heldItem = ITEM_MAGNET, .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -635,15 +548,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0xF, .nickname = _("AMPHAROS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_MACHOKE, .heldItem = ITEM_BLACK_BELT, .moves = {MOVE_DYNAMIC_PUNCH, MOVE_MUD_SLAP, MOVE_COUNTER, MOVE_SCARY_FACE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, @@ -656,15 +567,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x4E, .nickname = _("MACHOKE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_FLAREON, .heldItem = ITEM_CHARCOAL, .moves = {MOVE_FIRE_BLAST, MOVE_BITE, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -677,15 +586,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x28, .nickname = _("FLAREON"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_MAGNETON, .heldItem = ITEM_MAGNET, .moves = {MOVE_ZAP_CANNON, MOVE_THUNDER_WAVE, MOVE_SCREECH, MOVE_METAL_SOUND}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -698,15 +605,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x0, .nickname = _("MAGNETON"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_PINSIR, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_GUILLOTINE, MOVE_BRICK_BREAK, MOVE_SWAGGER, MOVE_FEINT_ATTACK}, - .level = 0, - .ppBonuses = 0, .hpEV = 200, .defenseEV = 155, .spDefenseEV = 155, @@ -720,35 +625,18 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x85, .nickname = _("PINSIR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x35, 0x35, 0x26, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x26, 0x3A, 0x3B, 0x35, 0x3B, 0x08, - 0x31, 0x3B, 0x2C, 0x2C, 0x2C, 0x2B, 0x24, 0x24, 0x24, 0x24, 0x2C, 0x3B, 0x3B, 0x2C, 0x3B, 0x08, - 0x2D, 0x3B, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x35, 0x3B, 0x35, 0x35, 0x3B, 0x08, - 0x33, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x2C, 0x2B, 0x3B, 0x08, - 0x33, 0x35, 0x3B, 0x3B, 0x3B, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x08, - 0x34, 0x2C, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x2B, 0x32, 0x30, 0x2C, 0x3B, 0x08, - 0x31, 0x35, 0x3B, 0x3B, 0x35, 0x3B, 0x2C, 0x3B, 0x3B, 0x35, 0x2C, 0x3B, 0x3B, 0x35, 0x35, 0x08, - 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x35, 0x3B, 0x2B, 0x32, 0x21, 0x30, 0x2C, 0x2C, 0x08, - 0x31, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x2C, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x08, - 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2B, 0x3B, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x08, - 0x31, 0x35, 0x35, 0x35, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x2B, 0x3B, 0x35, 0x35, 0x08, - 0x31, 0x2B, 0x2C, 0x2C, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x08, - 0x31, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x08, - 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x3B, 0x3B, 0x2C, 0x32, 0x30, 0x2C, 0x32, 0x30, 0x3B, 0x35, 0x08, - 0x31, 0x3B, 0x3B, 0x3B, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x3FE5, 0x0401, 0xBDED, 0x8425, 0xDFBD, 0x0221, 0x7E7F, 0x0941, 0x7F7D, 0x0911, 0x7FF7, 0x4101, 0x79F9, 0x0803, 0xFFFF}, - .coords = {COORDS_XY(11,1), COORDS_XY(13,2)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_NORTH), - .range = TRAINER_RANGE(2, 1), - } + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_normal/floor_0/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_normal/floor_0/collision.bin"), + .trainerCoords = {COORDS_XY(11,1), COORDS_XY(13,2)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_NORTH), + .trainerRanges = TRAINER_RANGE(2, 1), + } }, [1] = { @@ -760,7 +648,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = { .name = _("THEODORE"), .facilityClass = FACILITY_CLASS_BLACK_BELT, - .unused = 0, .speechBefore = {EC_WORD_MY, EC_WORD_POWER, EC_WORD_WILL, EC_MOVE2(STOMP), EC_WORD_YOU, EC_WORD_EXCL}, .speechWin = {EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL}, .speechLose = {EC_WORD_I, EC_WORD_WENT, EC_WORD_AT, EC_WORD_IT, EC_WORD_TOO, EC_WORD_HARD}, @@ -772,8 +659,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_MEDITITE, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -787,15 +672,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x80, .nickname = _("MEDITITE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_HERACROSS, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -809,15 +692,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 1, .personality = 0x80, .nickname = _("HERACROSS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_HITMONTOP, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -831,15 +712,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONTOP"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_MACHOP, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -853,15 +732,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x4E, .nickname = _("MACHOP"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_PINSIR, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -875,15 +752,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x80, .nickname = _("PINSIR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_HITMONCHAN, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -897,7 +772,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONCHAN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -905,7 +780,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = { .name = _("JAYDEN"), .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, - .unused = 0, .speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE}, .speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WE, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_TOGETHER, EC_WORD_QUES, EC_EMPTY_WORD}, @@ -917,8 +791,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_VULPIX, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_TAIL_WHIP, MOVE_OVERHEAT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -932,15 +804,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0xF, .nickname = _("VULPIX"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_MINUN, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_THUNDER_WAVE, MOVE_CHARM, MOVE_ENCORE, MOVE_SPARK}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spAttackEV = 6, @@ -954,15 +824,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x8C, .nickname = _("MINUN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_ROSELIA, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_TOXIC, MOVE_LEECH_SEED, MOVE_SWEET_SCENT, MOVE_GIGA_DRAIN}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spAttackEV = 6, @@ -976,15 +844,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 1, .personality = 0xF, .nickname = _("ROSELIA"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_MR_MIME, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SAFEGUARD, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -998,15 +864,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x82, .nickname = _("MR. MIME"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_PLUSLE, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_HELPING_HAND, MOVE_THUNDER}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -1020,15 +884,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x5, .nickname = _("PLUSLE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_TOGEPI, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOLLOW_ME, MOVE_METRONOME}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -1042,35 +904,18 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 1, .personality = 0x37, .nickname = _("TOGEPI"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0xD1, 0xD5, 0xD5, 0xD5, 0xD9, 0xD9, 0x1B, 0x1C, 0x1D, 0xC5, 0xC6, 0xCE, 0xD5, 0xDB, 0xD5, 0x08, - 0xD1, 0xCB, 0xC4, 0xC4, 0xDB, 0xDB, 0xC4, 0xC4, 0xC4, 0xCC, 0xCC, 0xCC, 0xCB, 0xDB, 0xCB, 0x08, - 0xD1, 0xCB, 0xDB, 0xDB, 0x17, 0x17, 0x17, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCB, 0xDB, 0xCB, 0x08, - 0xD1, 0xCB, 0xDB, 0xD5, 0x17, 0x17, 0x17, 0xD5, 0xD5, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x08, - 0xD1, 0xCB, 0xDB, 0xCB, 0x17, 0x17, 0x1F, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x08, - 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xC4, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x08, - 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDB, 0xC4, 0xC4, 0xCB, 0xDB, 0xCB, 0x08, - 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x08, - 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x08, - 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x08, - 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xC4, 0xC4, 0xDB, 0xC4, 0xC4, 0xC4, 0xDB, 0xCB, 0x08, - 0xD1, 0xCB, 0xDB, 0xCB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0xDB, 0xD5, 0xD5, 0xD5, 0xCB, 0x08, - 0xD1, 0xC4, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x08, - 0xD1, 0xDB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x08, - 0xD1, 0xDB, 0xDB, 0xC4, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xC4, 0xC4, 0xC4, 0xC4, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x73FB, 0x400B, 0x400B, 0x51EB, 0x538B, 0x51BB, 0x518B, 0x51EB, 0x518B, 0x51BB, 0x5003, 0x501F, 0x101F, 0x101F, 0xFFFF}, - .coords = {COORDS_XY(4,11), COORDS_XY(9,14)}, - .direction = TRAINER_DIRS(DIR_SOUTH, DIR_EAST), - .range = TRAINER_RANGE(3, 5), - } + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_normal/floor_1/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_normal/floor_1/collision.bin"), + .trainerCoords = {COORDS_XY(4,11), COORDS_XY(9,14)}, + .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_EAST), + .trainerRanges = TRAINER_RANGE(3, 5), + } }, [2] = { @@ -1082,7 +927,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = { .name = _("SALVADORE"), .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, - .unused = 0, .speechBefore = {EC_WORD_LET_S, EC_MOVE2(WRAP), EC_WORD_THINGS, EC_WORD_UP, EC_WORD_HERE, EC_WORD_HEY_QUES}, .speechWin = {EC_WORD_WOULD, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_QUES}, .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SORRY, EC_WORD_FRIEND}, @@ -1094,8 +938,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_VAPOREON, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_HAZE, MOVE_HELPING_HAND, MOVE_TICKLE, MOVE_WATER_PULSE}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -1116,8 +958,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_DODRIO, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_HAZE, MOVE_TRI_ATTACK, MOVE_TAUNT, MOVE_TORMENT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spDefenseEV = 6, @@ -1138,8 +978,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_OMASTAR, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_HAZE, MOVE_HYDRO_PUMP, MOVE_TICKLE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -1153,15 +991,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x14, .nickname = _("OMASTAR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_LICKITUNG, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -1175,15 +1011,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x8, .nickname = _("LICKITUNG"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_SLOWBRO, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_BELLY_DRUM, MOVE_MUD_SLAP, MOVE_SWAGGER, MOVE_AMNESIA}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -1204,8 +1038,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_LINOONE, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -1219,7 +1051,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x8, .nickname = _("LINOONE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -1227,7 +1059,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = { .name = _("VERONICA"), .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, - .unused = 0, .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE}, .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_TODAY, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL}, @@ -1239,8 +1070,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_SKITTY, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_PSYCH_UP, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_IRON_TAIL}, - .level = 0, - .ppBonuses = 0, .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, @@ -1253,15 +1082,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0xCB, .nickname = _("SKITTY"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_MEDICHAM, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_PSYCH_UP, MOVE_HIGH_JUMP_KICK, MOVE_MEGA_KICK, MOVE_ROCK_SLIDE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 6, .speedEV = 252, @@ -1282,8 +1109,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_STANTLER, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_PSYCH_UP, MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .speedEV = 6, @@ -1304,8 +1129,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_NIDOQUEEN, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_SUPERPOWER, MOVE_BITE, MOVE_CHARM, MOVE_FLATTER}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -1326,8 +1149,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_NINETALES, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_OVERHEAT, MOVE_QUICK_ATTACK, MOVE_SPITE, MOVE_TAIL_WHIP}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -1341,15 +1162,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0xD7, .nickname = _("NINETALES"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_CHARIZARD, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_OVERHEAT, MOVE_BEAT_UP, MOVE_SCARY_FACE, MOVE_GROWL}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -1363,35 +1182,18 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x28, .nickname = _("CHARIZARD"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0x31, 0x35, 0x35, 0x35, 0x26, 0x26, 0x13, 0x14, 0x15, 0x38, 0x26, 0x2E, 0x35, 0x35, 0x3B, 0x08, - 0x69, 0x63, 0x64, 0x64, 0x64, 0x64, 0x71, 0x71, 0x71, 0x72, 0x64, 0x64, 0x64, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x43, 0x41, 0x40, 0x41, 0x42, 0x41, 0x41, 0x4A, 0x42, 0x41, 0x41, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x41, 0x43, 0x4B, 0x43, 0x43, 0x41, 0x42, 0x42, 0x40, 0x41, 0x40, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x41, 0x40, 0x42, 0x42, 0x41, 0x41, 0x42, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x41, 0x42, 0x41, 0x43, 0x4B, 0x41, 0x41, 0x41, 0x40, 0x43, 0x41, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, - 0x69, 0x63, 0x41, 0x40, 0x43, 0x41, 0x42, 0x42, 0x41, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x08, - 0x69, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x64, 0x73, 0x08, - 0x69, 0x43, 0x43, 0x41, 0x42, 0x42, 0x41, 0x43, 0x41, 0x41, 0x40, 0x42, 0x41, 0x42, 0x73, 0x08, - 0x69, 0x42, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x42, 0x73, 0x08, - }, - .collisionData = {0x0381, 0x7C3D, 0x4005, 0x4005, 0x4005, 0x4045, 0x4005, 0x4805, 0x4005, 0x4045, 0x4005, 0x4205, 0x4005, 0x4045, 0x1, 0x1}, - .coords = {COORDS_XY(5,2), COORDS_XY(9,2)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .range = TRAINER_RANGE(3, 3), - } + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_normal/floor_2/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_normal/floor_2/collision.bin"), + .trainerCoords = {COORDS_XY(5,2), COORDS_XY(9,2)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .trainerRanges = TRAINER_RANGE(3, 3), + } }, [3] = { @@ -1403,7 +1205,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = { .name = _("KEENAN"), .facilityClass = FACILITY_CLASS_PSYCHIC_M, - .unused = 0, .speechBefore = {EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_HURRIED, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechWin = {EC_WORD_TOO, EC_WORD_BAD, EC_EMPTY_WORD, EC_WORD_TIME, EC_WORD_IS, EC_WORD_UP}, .speechLose = {EC_WORD_DOES, EC_WORD_THE, EC_WORD_TIME, EC_WORD_WORRY, EC_WORD_YOU, EC_WORD_QUES}, @@ -1415,8 +1216,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_ALAKAZAM, .heldItem = ITEM_PETAYA_BERRY, .moves = {MOVE_SKILL_SWAP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_REFLECT}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1429,15 +1228,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x41, .nickname = _("ALAKAZAM"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_BLISSEY, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_SKILL_SWAP, MOVE_EGG_BOMB, MOVE_THUNDERBOLT, MOVE_SING}, - .level = 0, - .ppBonuses = 0, .defenseEV = 255, .spAttackEV = 155, .spDefenseEV = 100, @@ -1451,15 +1248,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 1, .personality = 0xF, .nickname = _("BLISSEY"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_GRUMPIG, .heldItem = ITEM_TWISTED_SPOON, .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_REST}, - .level = 0, - .ppBonuses = 0, .hpEV = 110, .defenseEV = 200, .spAttackEV = 200, @@ -1473,15 +1268,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x8C, .nickname = _("GRUMPIG"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_GARDEVOIR, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_SKILL_SWAP, MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1494,15 +1287,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 1, .personality = 0xF, .nickname = _("GARDEVOIR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_VENOMOTH, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SKILL_SWAP, MOVE_SIGNAL_BEAM, MOVE_SLEEP_POWDER, MOVE_TOXIC}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1515,15 +1306,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x80, .nickname = _("VENOMOTH"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_ESPEON, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_SKILL_SWAP, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1536,7 +1325,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0xF, .nickname = _("ESPEON"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -1544,7 +1333,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = { .name = _("KRISTINA"), .facilityClass = FACILITY_CLASS_AROMA_LADY, - .unused = 0, .speechBefore = {EC_WORD_IT_S, EC_WORD_HOT, EC_WORD_ELLIPSIS, EC_WORD_WHAT, EC_WORD_A, EC_WORD_STENCH}, .speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_OFFENSIVE, EC_WORD_STENCH}, .speechLose = {EC_WORD_I, EC_MOVE2(COVET), EC_WORD_ANY, EC_WORD_STRONG, EC_WORD_STENCH, EC_EMPTY_WORD}, @@ -1556,8 +1344,6 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .species = SPECIES_WEEZING, .heldItem = ITEM_POISON_BARB, .moves = {MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_SMOKESCREEN, MOVE_HAZE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1570,15 +1356,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x3, .nickname = _("WEEZING"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_GLOOM, .heldItem = ITEM_MIRACLE_SEED, .moves = {MOVE_PETAL_DANCE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1591,15 +1375,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x8C, .nickname = _("GLOOM"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_MUK, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SCREECH, MOVE_DISABLE, MOVE_SLUDGE_BOMB, MOVE_ACID_ARMOR}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1612,15 +1394,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x3, .nickname = _("MUK"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_TROPIUS, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SWEET_SCENT, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, .attackEV = 120, .speedEV = 255, .spAttackEV = 135, @@ -1634,15 +1414,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x83, .nickname = _("TROPIUS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_BELLOSSOM, .heldItem = ITEM_MENTAL_HERB, .moves = {MOVE_SWEET_SCENT, MOVE_PETAL_DANCE, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1655,15 +1433,13 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x6, .nickname = _("BELLOSSOM"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_MEGANIUM, .heldItem = ITEM_MIRACLE_SEED, .moves = {MOVE_RAZOR_LEAF, MOVE_BODY_SLAM, MOVE_LEECH_SEED, MOVE_SYNTHESIS}, - .level = 0, - .ppBonuses = 0, .attackEV = 200, .speedEV = 110, .spAttackEV = 200, @@ -1677,39 +1453,22 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .abilityNum = 0, .personality = 0x1F, .nickname = _("MEGANIUM"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, - 0x1F, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x24, 0x24, 0x24, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x08, - 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x35, 0x35, 0x3B, 0x35, 0x35, 0x08, - 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x08, - 0x33, 0x17, 0x1F, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, - 0x34, 0x17, 0x2C, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, - 0x17, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, - 0x1F, 0x17, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, - 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x35, 0x1F, 0x17, 0x17, 0x1F, 0x17, 0x08, - 0x34, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x3B, 0x3B, 0x2B, 0x17, 0x08, - 0x17, 0x17, 0x17, 0x1F, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x2C, 0x17, 0x08, - 0x1F, 0x17, 0x17, 0x2C, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x1F, 0x3B, 0x17, 0x08, - 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x2B, 0x3B, 0x17, 0x08, - 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x35, 0x35, 0x35, 0x2B, 0x17, 0x3B, 0x2C, 0x3B, 0x17, 0x08, - 0x34, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x7C1, 0x8441, 0x8477, 0x8441, 0xA441, 0x0401, 0x1, 0x8401, 0x8465, 0x0445, 0x1441, 0x8449, 0x8449, 0x87C1, 0xFFFF}, - .coords = {COORDS_XY(7,4), COORDS_XY(7,10)}, - .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .range = TRAINER_RANGE(3, 3), - } + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_normal/floor_3/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_normal/floor_3/collision.bin"), + .trainerCoords = {COORDS_XY(7,4), COORDS_XY(7,10)}, + .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .trainerRanges = TRAINER_RANGE(3, 3), + } }, }; -static const struct TrHillTag sDataTagVariety = +static const struct TrainerHillChallenge sChallenge_Variety = { .numTrainers = NUM_TRAINER_HILL_TRAINERS, .unused1 = 1, @@ -1717,7 +1476,7 @@ static const struct TrHillTag sDataTagVariety = .checksum = 0x00054C15 }; -static const struct TrHillFloor sDataTagVariety_Floors[] = { +static const struct TrainerHillFloor sFloors_Variety[] = { [0] = { .trainerNum1 = 41, @@ -1728,7 +1487,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { { .name = _("TERRANCE"), .facilityClass = FACILITY_CLASS_GENTLEMAN, - .unused = 0, .speechBefore = {EC_WORD_GOOD, EC_WORD_CHILDREN, EC_WORD_WILL, EC_WORD_GET, EC_WORD_A, EC_MOVE2(PRESENT)}, .speechWin = {EC_WORD_THANK_YOU, EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_IS, EC_WORD_YOUR, EC_MOVE2(PRESENT)}, .speechLose = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_MOVE2(PRESENT), EC_WORD_TO, EC_WORD_YOU, EC_EMPTY_WORD}, @@ -1740,8 +1498,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_DELIBIRD, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_SPLASH, MOVE_HAIL, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1754,15 +1510,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 1, .personality = 0x8A, .nickname = _("DELIBIRD"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_CLEFAIRY, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_MOONLIGHT}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1775,15 +1529,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("CLEFAIRY"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_PIKACHU, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_AGILITY}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1796,15 +1548,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("PIKACHU"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_MARILL, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_ENDURE}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1817,15 +1567,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 1, .personality = 0x8A, .nickname = _("MARILL"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_JIGGLYPUFF, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_SING, MOVE_DISABLE, MOVE_REST}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1838,15 +1586,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("JIGGLYPUFF"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_TOGETIC, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_WISH}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1859,7 +1605,7 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 1, .personality = 0x26, .nickname = _("TOGETIC"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -1867,7 +1613,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { { .name = _("ELIZABETH"), .facilityClass = FACILITY_CLASS_LADY, - .unused = 0, .speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_WORD_SENSE, EC_WORD_ME, EC_MOVE(FOCUS_ENERGY), EC_WORD_QUES}, .speechWin = {EC_WORD_THAT_S, EC_WORD_ABOUT, EC_WORD_RIGHT, EC_WORD_I, EC_WORD_WOULD, EC_WORD_THINK}, .speechLose = {EC_WORD_THINGS, EC_WORD_DON_T, EC_WORD_ALWAYS, EC_WORD_WORK, EC_WORD_OUT, EC_EMPTY_WORD}, @@ -1879,8 +1624,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_WIGGLYTUFF, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SING, MOVE_DREAM_EATER}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1893,15 +1636,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xC1, .nickname = _("WIGGLYTUFF"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_SABLEYE, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_ASTONISH, MOVE_FEINT_ATTACK, MOVE_DETECT, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1914,15 +1655,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x87, .nickname = _("SABLEYE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_GRUMPIG, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_BOUNCE, MOVE_FUTURE_SIGHT}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1935,15 +1674,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("GRUMPIG"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_CORSOLA, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_BUBBLE_BEAM, MOVE_ROCK_BLAST, MOVE_REFLECT, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1956,15 +1693,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x12, .nickname = _("CORSOLA"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_CLAMPERL, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_WHIRLPOOL, MOVE_IRON_DEFENSE, MOVE_ENDURE, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1977,15 +1712,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("CLAMPERL"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_STARMIE, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_DIVE, MOVE_ICY_WIND, MOVE_SWIFT, MOVE_SKILL_SWAP}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1998,34 +1731,17 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("STARMIE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, - 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x40, 0x41, 0x41, 0x08, - 0x40, 0xFB, 0x43, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x42, 0x42, 0x42, 0xFB, 0x41, 0x08, - 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x43, 0x43, 0xFB, 0x40, 0x41, 0x08, - 0x40, 0x41, 0x41, 0xFB, 0x43, 0x41, 0x42, 0x40, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x40, 0x41, 0x08, - 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x40, 0x43, 0x43, 0x43, 0x41, 0x41, 0x40, 0x41, 0x08, - 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x08, - 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x08, - 0x40, 0x41, 0x42, 0x41, 0xFE, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x08, - 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x08, - 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x08, - 0x40, 0x42, 0x41, 0x43, 0x43, 0x43, 0x41, 0x40, 0x42, 0x42, 0x42, 0x42, 0x41, 0x40, 0x41, 0x08, - 0x40, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xFB, 0x41, 0x40, 0x41, 0x08, - 0x40, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0xFB, 0x40, 0x41, 0x08, - 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x08, - 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x08, - }, - .collisionData = {0x0381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}, - .coords = {COORDS_XY(5,8), COORDS_XY(9,8)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .range = TRAINER_RANGE(3, 3), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_variety/floor_0/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_variety/floor_0/collision.bin"), + .trainerCoords = {COORDS_XY(5,8), COORDS_XY(9,8)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .trainerRanges = TRAINER_RANGE(3, 3), } }, [1] = @@ -2038,7 +1754,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { { .name = _("ANNABELL"), .facilityClass = FACILITY_CLASS_PARASOL_LADY, - .unused = 0, .speechBefore = {EC_WORD_HI, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_UPBEAT, EC_WORD_QUES}, .speechWin = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_WELL, EC_WORD_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_SEE, EC_WORD_YOU_RE, EC_WORD_FEELING, EC_WORD_GREAT}, @@ -2050,8 +1765,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_JIGGLYPUFF, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SING, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -2068,15 +1781,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("JIGGLYPUFF"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_JYNX, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_PERISH_SONG, MOVE_FAKE_TEARS, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -2093,15 +1804,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("JYNX"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_EXPLOUD, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_HOWL, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -2118,15 +1827,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x96, .nickname = _("EXPLOUD"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_ABSOL, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -2143,15 +1850,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x96, .nickname = _("ABSOL"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_PIDGEOTTO, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_FEATHER_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -2168,15 +1873,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x96, .nickname = _("PIDGEOTTO"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_ALTARIA, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -2193,7 +1896,7 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("ALTARIA"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -2201,7 +1904,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { { .name = _("COLEMAN"), .facilityClass = FACILITY_CLASS_COLLECTOR, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_SEEK, EC_WORD_SOMEONE, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL}, .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_WORD_IDOL, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_LIKE, EC_WORD_A, EC_MOVE(HEAL_BELL), EC_WORD_TO_ME, EC_WORD_EXCL}, @@ -2213,8 +1915,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_CHIMECHO, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2228,15 +1928,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("CHIMECHO"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_WHISMUR, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2250,15 +1948,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("WHISMUR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_YANMA, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2272,15 +1968,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x8A, .nickname = _("YANMA"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_ILLUMISE, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -2294,15 +1988,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("ILLUMISE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_SPHEAL, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spDefenseEV = 6, @@ -2316,15 +2008,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("SPHEAL"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_VIGOROTH, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -2338,34 +2028,17 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x87, .nickname = _("VIGOROTH"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, - 0x91, 0x9B, 0x9C, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x08, - 0x9C, 0x9B, 0x96, 0x40, 0xDB, 0xDB, 0x40, 0x96, 0x40, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x08, - 0x91, 0x96, 0x40, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9C, 0x08, - 0x91, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x9B, 0x08, - 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x08, - 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x08, - 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x08, - 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x08, - 0x91, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x08, - 0x91, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9C, 0x08, - 0x9C, 0x9B, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x08, - 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9C, 0x96, 0x08, - 0xD6, 0x96, 0x9C, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0xD6, 0x08, - 0x9C, 0xD6, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0xD6, 0x9C, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, - .coords = {COORDS_XY(3,8), COORDS_XY(11,8)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .range = TRAINER_RANGE(7, 7), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_variety/floor_1/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_variety/floor_1/collision.bin"), + .trainerCoords = {COORDS_XY(3,8), COORDS_XY(11,8)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .trainerRanges = TRAINER_RANGE(7, 7), } }, [2] = @@ -2378,7 +2051,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { { .name = _("ENRIQUE"), .facilityClass = FACILITY_CLASS_RICH_BOY, - .unused = 0, .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_TIME}, .speechWin = {EC_WORD_HEY, EC_WORD_HEY, EC_WORD_EXCL, EC_WORD_WHAT_S_UP_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechLose = {EC_WORD_AWW, EC_WORD_COULDN_T, EC_WORD_YOU, EC_WORD_LET_ME_WIN, EC_WORD_QUES, EC_EMPTY_WORD}, @@ -2390,8 +2062,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_WOOPER, .heldItem = ITEM_FIGY_BERRY, .moves = {MOVE_RAIN_DANCE, MOVE_YAWN, MOVE_SURF, MOVE_HAZE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 6, .spAttackEV = 252, @@ -2405,15 +2075,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x8C, .nickname = _("WOOPER"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_POLIWAG, .heldItem = ITEM_WIKI_BERRY, .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_MIST, MOVE_HYPNOSIS}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 6, .spAttackEV = 252, @@ -2427,15 +2095,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 1, .personality = 0x3, .nickname = _("POLIWAG"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_PSYDUCK, .heldItem = ITEM_AGUAV_BERRY, .moves = {MOVE_HYPNOSIS, MOVE_SURF, MOVE_DISABLE, MOVE_SEISMIC_TOSS}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -2449,15 +2115,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("PSYDUCK"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_RHYDON, .heldItem = ITEM_SOFT_SAND, .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .speedEV = 6, @@ -2478,8 +2142,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_RHYHORN, .heldItem = ITEM_SOFT_SAND, .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2500,8 +2162,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_CUBONE, .heldItem = ITEM_SOFT_SAND, .moves = {MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2523,7 +2183,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { { .name = _("COLLEEN"), .facilityClass = FACILITY_CLASS_LADY, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_ROCK, EC_WORD_OUT}, .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ROCK, EC_WORD_THING, EC_WORD_EXCL}, .speechLose = {EC_WORD_GO_AHEAD, EC_WORD_AND, EC_WORD_CRUSH, EC_WORD_MY, EC_WORD_DREAM, EC_WORD_ELLIPSIS}, @@ -2535,8 +2194,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_MAGNEMITE, .heldItem = ITEM_MAGNET, .moves = {MOVE_THUNDER, MOVE_ZAP_CANNON, MOVE_SPARK, MOVE_THUNDER_SHOCK}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -2550,15 +2207,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x8C, .nickname = _("MAGNEMITE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_ELECTABUZZ, .heldItem = ITEM_MAGNET, .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_SHOCK_WAVE}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -2572,15 +2227,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x41, .nickname = _("ELECTABUZZ"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_FLAAFFY, .heldItem = ITEM_MAGNET, .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_SHOCK_WAVE, MOVE_THUNDER_SHOCK}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .spAttackEV = 130, .otId = TRAINER_HILL_OTID, @@ -2593,15 +2246,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("FLAAFFY"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_BALTOY, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2622,8 +2273,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_PINECO, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .speedEV = 6, @@ -2644,8 +2293,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_VOLTORB, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2664,29 +2311,12 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x1C, 0x1D, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, - 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x84, 0x84, 0x84, 0x9A, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x08, - 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, - 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x08, - 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, - 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, - 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, - 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, - 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, - 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x08, - 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, - 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x08, - 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, - 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, - 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, - 0x17, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x17, 0xBB, 0xBB, 0x08, - }, - .collisionData = {0x0381, 0x0381, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1}, - .coords = {COORDS_XY(9,1), COORDS_XY(14,1)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .range = TRAINER_RANGE(4, 4), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_variety/floor_2/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_variety/floor_2/collision.bin"), + .trainerCoords = {COORDS_XY(9,1), COORDS_XY(14,1)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .trainerRanges = TRAINER_RANGE(4, 4), } }, [3] = @@ -2699,7 +2329,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { { .name = _("KIMBERLY"), .facilityClass = FACILITY_CLASS_POKEFAN_F, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_WORKING, EC_WORD_AT, EC_WORD_MY, EC_WORD_OWN_TEMPO}, .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_QUES}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MEAN, EC_WORD_KID, EC_WORD_IT, EC_WORD_SEEMS}, @@ -2711,8 +2340,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_UNOWN, .heldItem = ITEM_MIRACLE_SEED, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2725,15 +2352,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x202, .nickname = _("UNOWN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_UNOWN, .heldItem = ITEM_MYSTIC_WATER, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2746,15 +2371,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x10001, .nickname = _("UNOWN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_UNOWN, .heldItem = ITEM_BLACK_BELT, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2767,15 +2390,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x102, .nickname = _("UNOWN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_SPINDA, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, .hpEV = 110, .defenseEV = 200, .spDefenseEV = 200, @@ -2789,15 +2410,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x88FE980F, .nickname = _("SPINDA"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_PLUSLE, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2810,15 +2429,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("PLUSLE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_VOLBEAT, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_HELPING_HAND, MOVE_SIGNAL_BEAM, MOVE_SOLAR_BEAM, MOVE_MOONLIGHT}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2831,7 +2448,7 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("VOLBEAT"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -2839,7 +2456,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { { .name = _("FRANCISCO"), .facilityClass = FACILITY_CLASS_POKEFAN_M, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO, EC_EMPTY_WORD}, .speechWin = {EC_WORD_SO, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_LOSE, EC_EMPTY_WORD}, .speechLose = {EC_WORD_NO, EC_WORD_WONDER, EC_WORD_I, EC_WORD_COULDN_T, EC_WORD_BEAT, EC_WORD_YOU}, @@ -2851,8 +2467,6 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .species = SPECIES_SPINDA, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, .hpEV = 110, .defenseEV = 200, .spDefenseEV = 200, @@ -2866,15 +2480,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xE2880098, .nickname = _("SPINDA"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_MINUN, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2887,15 +2499,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x8C, .nickname = _("MINUN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_ILLUMISE, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_HELPING_HAND, MOVE_WISH, MOVE_THUNDERBOLT, MOVE_MOONLIGHT}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2908,15 +2518,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("ILLUMISE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_UNOWN, .heldItem = ITEM_CHARCOAL, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2929,15 +2537,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x302, .nickname = _("UNOWN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_UNOWN, .heldItem = ITEM_SOFT_SAND, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2950,15 +2556,13 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x203, .nickname = _("UNOWN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_UNOWN, .heldItem = ITEM_TWISTED_SPOON, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2971,39 +2575,22 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .abilityNum = 0, .personality = 0x301, .nickname = _("UNOWN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, - 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x5E, 0x41, 0x71, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x08, - 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x45, 0x45, 0x45, 0x45, 0x45, 0x08, - 0x65, 0x40, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x08, - 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x42, 0x73, 0x41, 0x08, - 0x69, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x43, 0x73, 0x43, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x08, - 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x08, - 0x65, 0x42, 0x73, 0x42, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x08, - 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x08, - 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x43, 0x6D, 0x41, 0x73, 0x43, 0x6D, 0x08, - 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x08, - 0x65, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x40, 0x73, 0x08, - 0x6C, 0x73, 0x40, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x08, - 0x69, 0x40, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x08, - 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x1, 0x2201, 0x1, 0x8881, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0xFFFF}, - .coords = {COORDS_XY(10,2), COORDS_XY(14,2)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .range = TRAINER_RANGE(3, 3), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_variety/floor_3/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_variety/floor_3/collision.bin"), + .trainerCoords = {COORDS_XY(10,2), COORDS_XY(14,2)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .trainerRanges = TRAINER_RANGE(3, 3), } }, }; -static const struct TrHillTag sDataTagUnique = +static const struct TrainerHillChallenge sChallenge_Unique = { .numTrainers = NUM_TRAINER_HILL_TRAINERS, .unused1 = 3, @@ -3011,7 +2598,7 @@ static const struct TrHillTag sDataTagUnique = .checksum = 0x000652F3 }; -static const struct TrHillFloor sDataTagUnique_Floors[] = { +static const struct TrainerHillFloor sFloors_Unique[] = { [0] = { .trainerNum1 = 49, @@ -3022,7 +2609,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { { .name = _("MEREDITH"), .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, - .unused = 0, .speechBefore = {EC_WORD_UM, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, .speechWin = {EC_WORD_OH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_UM, EC_WORD_ELLIPSIS, EC_WORD_YAY}, .speechLose = {EC_WORD_UM, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_WAAAH, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, @@ -3034,8 +2620,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_SUNFLORA, .heldItem = ITEM_PERSIM_BERRY, .moves = {MOVE_PETAL_DANCE, MOVE_GRASS_WHISTLE, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .defenseEV = 155, .spDefenseEV = 100, @@ -3049,15 +2633,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("SUNFLORA"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_TANGELA, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_AMNESIA, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spDefenseEV = 255, .otId = TRAINER_HILL_OTID, @@ -3070,15 +2652,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x91, .nickname = _("TANGELA"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_VENUSAUR, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, .hpEV = 100, .attackEV = 110, .defenseEV = 100, @@ -3094,15 +2674,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x1F, .nickname = _("VENUSAUR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_LANTURN, .heldItem = ITEM_PERSIM_BERRY, .moves = {MOVE_SPARK, MOVE_WATER_PULSE, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3115,15 +2693,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("LANTURN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_MANECTRIC, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_THUNDERBOLT, MOVE_HEADBUTT, MOVE_BITE, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3136,15 +2712,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("MANECTRIC"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_RAIKOU, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_THUNDER, MOVE_CRUNCH, MOVE_ROAR, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3157,7 +2731,7 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("RAIKOU"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -3165,7 +2739,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { { .name = _("BERNARD"), .facilityClass = FACILITY_CLASS_KINDLER, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE, EC_WORD_THIS, EC_WORD_HOT, EC_WORD_BATTLE}, .speechWin = {EC_WORD_DID, EC_WORD_I, EC_WORD_COOL, EC_WORD_YOU, EC_WORD_DOWN, EC_WORD_QUES}, .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_TERRIBLE, EC_WORD_PERSON}, @@ -3177,8 +2750,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_RELICANTH, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_MUD_SPORT, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, .hpEV = 155, .defenseEV = 100, .spDefenseEV = 255, @@ -3192,15 +2763,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x2F, .nickname = _("RELICANTH"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_GOLDUCK, .heldItem = ITEM_LAX_INCENSE, .moves = {MOVE_SURF, MOVE_PSYBEAM, MOVE_BRICK_BREAK, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3213,15 +2782,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("GOLDUCK"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_BLASTOISE, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_MIRROR_COAT, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3234,15 +2801,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x28, .nickname = _("BLASTOISE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_MAGCARGO, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_HEAT_WAVE, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spDefenseEV = 255, .otId = TRAINER_HILL_OTID, @@ -3255,15 +2820,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 1, .personality = 0x93, .nickname = _("MAGCARGO"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_RAPIDASH, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3276,15 +2839,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("RAPIDASH"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_MOLTRES, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SKY_ATTACK, MOVE_AERIAL_ACE, MOVE_ROAR, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3297,34 +2858,17 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("MOLTRES"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0xF1, 0xF5, 0xFB, 0xF5, 0xE6, 0xE6, 0x1B, 0x14, 0x15, 0xF8, 0xF9, 0xFA, 0xFB, 0xFB, 0xFB, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xF9, 0xE6, 0xEE, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0x9B, 0x9B, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0x9B, 0xDB, 0xDB, 0x9B, 0xEC, 0xFB, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0xF5, 0x95, 0x95, 0xF5, 0xF5, 0xF5, 0xEB, 0xEC, 0xEB, 0xFB, 0xEB, 0x08, - 0xED, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x08, - 0xF4, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xF5, 0xFB, 0x08, - 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0x08, - 0xF1, 0xF5, 0xF5, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0x08, - 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0x08, - 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0x08, - 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0x08, - 0xF1, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x5E01, 0x50FF, 0x5083, 0x503B, 0x5FEB, 0xC02B, 0x5FEB, 0x5009, 0x57FD, 0x1005, 0x7FF5, 0x15, 0x7FF5, 0x1, 0xFFFF}, - .coords = {COORDS_XY(4,3), COORDS_XY(7,3)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .range = TRAINER_RANGE(2, 2), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_unique/floor_0/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_unique/floor_0/collision.bin"), + .trainerCoords = {COORDS_XY(4,3), COORDS_XY(7,3)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .trainerRanges = TRAINER_RANGE(2, 2), } }, [1] = @@ -3337,7 +2881,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { { .name = _("ABRAHAM"), .facilityClass = FACILITY_CLASS_RUIN_MANIAC, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_POKEMON, EC_WORD_THE, EC_WORD_BEST}, .speechWin = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_GREAT, EC_WORD_POKEMON, EC_WORD_IT, EC_WORD_IS}, .speechLose = {EC_WORD_I, EC_WORD_CONFUSED, EC_WORD_A, EC_WORD_MOVE, EC_WORD_WITH, EC_WORD_ANOTHER}, @@ -3349,8 +2892,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 6, .speedEV = 252, @@ -3364,15 +2905,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x8A, .nickname = _("SMEARGLE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_REST, MOVE_THUNDER_WAVE, MOVE_FLAMETHROWER, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -3386,15 +2925,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x87, .nickname = _("SMEARGLE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_EXPLOSION}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 6, .speedEV = 252, @@ -3408,15 +2945,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("SMEARGLE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -3430,15 +2965,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("SMEARGLE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -3452,15 +2985,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("SMEARGLE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -3474,7 +3005,7 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x8A, .nickname = _("SMEARGLE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -3482,7 +3013,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { { .name = _("LUC"), .facilityClass = FACILITY_CLASS_TUBER_M, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_WORD_COOL, EC_WORD_RARE, EC_WORD_MOVE}, .speechWin = {EC_WORD_MY, EC_WORD_RARE, EC_WORD_MOVE, EC_WORD_IS, EC_WORD_COOL, EC_WORD_ISN_T_IT_QUES}, .speechLose = {EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_MOVE, EC_WORD_QUES}, @@ -3494,8 +3024,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_STARYU, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_CAMOUFLAGE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -3509,15 +3037,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 1, .personality = 0xA, .nickname = _("STARYU"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_MEOWTH, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_PAY_DAY, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -3531,15 +3057,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("MEOWTH"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_BLAZIKEN, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_BLAZE_KICK, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spDefenseEV = 6, @@ -3553,15 +3077,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x28, .nickname = _("BLAZIKEN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_CUBONE, .heldItem = ITEM_THICK_CLUB, .moves = {MOVE_BONEMERANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .spDefenseEV = 252, @@ -3575,15 +3097,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 1, .personality = 0x16, .nickname = _("CUBONE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_BEEDRILL, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_TWINEEDLE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, @@ -3596,15 +3116,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x8A, .nickname = _("BEEDRILL"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_RATICATE, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_SUPER_FANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -3618,34 +3136,17 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 1, .personality = 0xD, .nickname = _("RATICATE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, - 0x2D, 0x3B, 0x3B, 0x3B, 0x35, 0x2C, 0x23, 0x24, 0x23, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x08, - 0x94, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x9B, 0x08, - 0x91, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x08, - 0x8D, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8C, 0x08, - 0x94, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x9B, 0x9B, 0x87, 0x9B, 0x08, - 0x91, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x9B, 0x95, 0x8F, 0x9B, 0x08, - 0x91, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x95, 0x97, 0x95, 0x97, 0x8C, 0x9B, 0x8C, 0x97, 0x95, 0x08, - 0x91, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x87, 0x95, 0x87, 0x8C, 0x08, - 0x8D, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x08, - 0x94, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x08, - 0x91, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x95, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x9B, 0x08, - 0x91, 0x8F, 0x95, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x08, - 0x91, 0x97, 0x8C, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8B, 0x97, 0x9B, 0x08, - 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8C, 0x9B, 0x9B, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x7C1, 0x8AA1, 0x0209, 0x5557, 0xA281, 0x81, 0x5D6D, 0x2283, 0x89, 0xDD55, 0x20A1, 0xA81, 0x7D5D, 0x9, 0xFFFF}, - .coords = {COORDS_XY(9,6), COORDS_XY(13,6)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .range = TRAINER_RANGE(3, 3), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_unique/floor_1/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_unique/floor_1/collision.bin"), + .trainerCoords = {COORDS_XY(9,6), COORDS_XY(13,6)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .trainerRanges = TRAINER_RANGE(3, 3), } }, [2] = @@ -3658,7 +3159,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { { .name = _("BREYDEN"), .facilityClass = FACILITY_CLASS_YOUNGSTER, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_CARE, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_A_LOT}, .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_CAN, EC_WORD_DO, EC_WORD_IT, EC_WORD_ALL}, .speechLose = {EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_LIKE, EC_WORD_WE, EC_WORD_ALWAYS, EC_WORD_WIN}, @@ -3670,8 +3170,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_CHARMELEON, .heldItem = ITEM_CHARCOAL, .moves = {MOVE_FIRE_SPIN, MOVE_DRAGON_RAGE, MOVE_FLAMETHROWER, MOVE_SLASH}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -3692,8 +3190,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_WARTORTLE, .heldItem = ITEM_MYSTIC_WATER, .moves = {MOVE_HYDRO_PUMP, MOVE_SKULL_BASH, MOVE_RAIN_DANCE, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .otId = TRAINER_HILL_OTID, @@ -3713,8 +3209,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_IVYSAUR, .heldItem = ITEM_MIRACLE_SEED, .moves = {MOVE_SOLAR_BEAM, MOVE_SYNTHESIS, MOVE_GROWTH, MOVE_SWEET_SCENT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 6, .spAttackEV = 252, @@ -3735,8 +3229,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_BAYLEEF, .heldItem = ITEM_MIRACLE_SEED, .moves = {MOVE_SOLAR_BEAM, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN, MOVE_BODY_SLAM}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .attackEV = 130, .spAttackEV = 130, @@ -3757,8 +3249,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_CROCONAW, .heldItem = ITEM_MYSTIC_WATER, .moves = {MOVE_SCARY_FACE, MOVE_SLASH, MOVE_HYDRO_PUMP, MOVE_SCREECH}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .speedEV = 6, @@ -3779,8 +3269,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_QUILAVA, .heldItem = ITEM_CHARCOAL, .moves = {MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_FLAME_WHEEL, MOVE_SWIFT}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3802,7 +3290,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { { .name = _("ANIYA"), .facilityClass = FACILITY_CLASS_TUBER_F, - .unused = 0, .speechBefore = {EC_WORD_SOMEONE, EC_WORD_GOT, EC_WORD_ME, EC_WORD_A_LITTLE, EC_WORD_POKEMON, EC_WORD_EGG}, .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NEW, EC_WORD_AT, EC_WORD_THIS, EC_WORD_EXCL}, .speechLose = {EC_WORD_OH, EC_WORD_BUT, EC_WORD_ELLIPSIS, EC_WORD_WHY, EC_WORD_WHY, EC_WORD_QUES_EXCL}, @@ -3814,8 +3301,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_SMOOCHUM, .heldItem = ITEM_PETAYA_BERRY, .moves = {MOVE_ICE_BEAM, MOVE_PSYCHIC, MOVE_SWEET_KISS, MOVE_FAKE_TEARS}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3836,8 +3321,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_AZURILL, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_SURF, MOVE_SING, MOVE_RAIN_DANCE, MOVE_BLIZZARD}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3858,8 +3341,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_ELEKID, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3880,8 +3361,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_CLEFFA, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_MEGA_KICK, MOVE_SWEET_KISS, MOVE_SING, MOVE_METRONOME}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -3902,8 +3381,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_WYNAUT, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -3924,8 +3401,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_MAGBY, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_FIRE_BLAST, MOVE_CONFUSE_RAY, MOVE_THUNDER_PUNCH, MOVE_BARRIER}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3944,29 +3419,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, - 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x08, - 0x69, 0x46, 0x7A, 0x73, 0x73, 0x73, 0x79, 0x73, 0x73, 0x73, 0x7D, 0x73, 0x73, 0x73, 0x46, 0x08, - 0x69, 0x46, 0x73, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x08, - 0x69, 0x46, 0x73, 0x73, 0x7B, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x7A, 0x73, 0x73, 0x73, 0x46, 0x08, - 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7A, 0x46, 0x08, - 0x69, 0x46, 0x73, 0x73, 0x73, 0x73, 0x73, 0x7D, 0x7C, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x46, 0x08, - 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x08, - 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x08, - 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x08, - 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x08, - 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x08, - 0xF1, 0x46, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7A, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7C, 0x08, - 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xFB, 0x08, - 0x7C, 0xFB, 0x7B, 0xFB, 0x7A, 0xFB, 0x79, 0xFB, 0xB3, 0xFB, 0x7D, 0xFB, 0x7E, 0xFB, 0x7D, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x7FFB, 0x4003, 0x5FFF, 0x4003, 0x7FFB, 0x4003, 0x7EFF, 0x4443, 0x4443, 0x4443, 0x7EFF, 0x4001, 0x7FFD, 0x1, 0xFFFF}, - .coords = {COORDS_XY(6,9), COORDS_XY(8,9)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .range = TRAINER_RANGE(1, 1), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_unique/floor_2/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_unique/floor_2/collision.bin"), + .trainerCoords = {COORDS_XY(6,9), COORDS_XY(8,9)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .trainerRanges = TRAINER_RANGE(1, 1), } }, [3] = @@ -3979,7 +3437,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { { .name = _("DANE"), .facilityClass = FACILITY_CLASS_BIRD_KEEPER, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_GOT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ON, EC_WORD_VACATION}, .speechWin = {EC_WORD_IT_S, EC_WORD_GREAT, EC_WORD_TO, EC_WORD_TRAVEL, EC_WORD_AND, EC_WORD_BATTLE}, .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_WORD_MY, EC_WORD_RARE, EC_WORD_POKEMON, EC_WORD_EXCL}, @@ -3991,8 +3448,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_SUDOWOODO, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_ROCK_SLIDE, MOVE_BLOCK, MOVE_TOXIC, MOVE_EXPLOSION}, - .level = 0, - .ppBonuses = 0, .hpEV = 100, .attackEV = 255, .spDefenseEV = 155, @@ -4006,15 +3461,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("SUDOWOODO"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_SLOWKING, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_BLIZZARD, MOVE_DISABLE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .defenseEV = 255, .otId = TRAINER_HILL_OTID, @@ -4027,15 +3480,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 1, .personality = 0x8C, .nickname = _("SLOWKING"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_ENTEI, .heldItem = ITEM_PETAYA_BERRY, .moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_FIRE_SPIN, MOVE_ROAR}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4048,15 +3499,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("ENTEI"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_HITMONCHAN, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_MEGA_PUNCH, MOVE_DETECT, MOVE_COUNTER, MOVE_SKY_UPPERCUT}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -4069,15 +3518,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONCHAN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_MANTINE, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .defenseEV = 255, .otId = TRAINER_HILL_OTID, @@ -4090,15 +3537,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 1, .personality = 0x6, .nickname = _("MANTINE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_ZAPDOS, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_AGILITY}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4111,7 +3556,7 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x18, .nickname = _("ZAPDOS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -4119,7 +3564,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { { .name = _("STEPHANIE"), .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, - .unused = 0, .speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_WIN, EC_WORD_EXCL}, .speechWin = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_HOW, EC_WORD_NOW, EC_WORD_QUES}, .speechLose = {EC_WORD_YES, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_DO, EC_WORD_IT}, @@ -4131,8 +3575,6 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .species = SPECIES_HITMONLEE, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_MEGA_KICK, MOVE_MIND_READER, MOVE_FOCUS_ENERGY, MOVE_HIGH_JUMP_KICK}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4145,15 +3587,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONLEE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_PORYGON2, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_LOCK_ON, MOVE_BLIZZARD, MOVE_CONVERSION_2, MOVE_PSYCHIC}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4166,15 +3606,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("PORYGON2"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_SUICUNE, .heldItem = ITEM_PETAYA_BERRY, .moves = {MOVE_SURF, MOVE_CALM_MIND, MOVE_MIRROR_COAT, MOVE_MIST}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4187,15 +3625,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("SUICUNE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_HOUNDOOM, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_ROAR, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4208,15 +3644,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("HOUNDOOM"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_STANTLER, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_CONFUSE_RAY, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_TAKE_DOWN}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -4229,15 +3663,13 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("STANTLER"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_ARTICUNO, .heldItem = ITEM_NEVER_MELT_ICE, .moves = {MOVE_BLIZZARD, MOVE_SHEER_COLD, MOVE_MIST, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4250,39 +3682,22 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("ARTICUNO"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0xF1, 0xFB, 0xFB, 0xFB, 0xF9, 0xF9, 0x1B, 0x1C, 0x1D, 0xE5, 0xE6, 0xEE, 0xF5, 0xFB, 0xFB, 0x08, - 0xED, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x08, - 0xF4, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, - 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x08, - 0xF1, 0xEB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x08, - 0xF1, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, - 0xF1, 0xEB, 0xFB, 0xF5, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, - 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0x08, - 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0x08, - 0xF1, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, - 0xF1, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x3F9, 0xF041, 0x41, 0x7F5F, 0x4401, 0x4541, 0x5579, 0x5541, 0x555F, 0x5541, 0x5541, 0x557D, 0x1101, 0x1101, 0xFFFF}, - .coords = {COORDS_XY(8,2), COORDS_XY(11,5)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_NORTH), - .range = TRAINER_RANGE(3, 3), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_unique/floor_3/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_unique/floor_3/collision.bin"), + .trainerCoords = {COORDS_XY(8,2), COORDS_XY(11,5)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_NORTH), + .trainerRanges = TRAINER_RANGE(3, 3), } }, }; -static const struct TrHillTag sDataTagExpert = +static const struct TrainerHillChallenge sChallenge_Expert = { .numTrainers = NUM_TRAINER_HILL_TRAINERS, .unused1 = 1, @@ -4290,7 +3705,7 @@ static const struct TrHillTag sDataTagExpert = .checksum = 0x00061F3F }; -static const struct TrHillFloor sDataTagExpert_Floors[] = { +static const struct TrainerHillFloor sFloors_Expert[] = { [0] = { .trainerNum1 = 57, @@ -4301,7 +3716,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { { .name = _("ALFRED"), .facilityClass = FACILITY_CLASS_COOLTRAINER_M, - .unused = 0, .speechBefore = {EC_WORD_WE, EC_WORD_CAN, EC_WORD_TAKE, EC_WORD_ON, EC_WORD_ANY, EC_WORD_TYPE}, .speechWin = {EC_WORD_WE, EC_WORD_DID, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_OKAY, EC_WORD_EXCL}, .speechLose = {EC_WORD_OUR, EC_WORD_STRATEGY, EC_WORD_ISN_T, EC_WORD_ANY, EC_WORD_GOOD, EC_WORD_ELLIPSIS}, @@ -4313,8 +3727,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_SNORLAX, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .defenseEV = 252, @@ -4328,15 +3740,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x35, .nickname = _("SNORLAX"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_MILTANK, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_MILK_DRINK}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -4350,15 +3760,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("MILTANK"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_URSARING, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spAttackEV = 6, @@ -4372,15 +3780,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x7F, .nickname = _("URSARING"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_SLAKING, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_REST}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .spDefenseEV = 252, @@ -4394,15 +3800,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("SLAKING"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_KANGASKHAN, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_FAKE_OUT}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -4416,15 +3820,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("KANGASKHAN"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_ZANGOOSE, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_ROAR}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -4438,7 +3840,7 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("ZANGOOSE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -4446,7 +3848,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { { .name = _("EDIE"), .facilityClass = FACILITY_CLASS_PSYCHIC_F, - .unused = 0, .speechBefore = {EC_WORD_WE, EC_WORD_WILL_BE_HERE, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_TRAINER, EC_WORD_CHALLENGE}, .speechWin = {EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_WORKS, EC_WORD_TO, EC_WORD_PERFECTION, EC_WORD_EXCL}, .speechLose = {EC_WORD_NO, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_WORD_THAT, EC_WORD_WON_T, EC_WORD_DO}, @@ -4458,8 +3859,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_SLOWKING, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_SKILL_SWAP}, - .level = 0, - .ppBonuses = 0, .hpEV = 200, .defenseEV = 110, .spAttackEV = 200, @@ -4473,15 +3872,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("SLOWKING"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_ESPEON, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_CALM_MIND, MOVE_REFLECT}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4495,15 +3892,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x28, .nickname = _("ESPEON"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_STARMIE, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4517,15 +3912,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("STARMIE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_GENGAR, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4539,15 +3932,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("GENGAR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_GARDEVOIR, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_MAGICAL_LEAF, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4561,15 +3952,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("GARDEVOIR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_ALAKAZAM, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_PSYCHIC, MOVE_RECOVER, MOVE_THUNDER_WAVE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4583,34 +3972,17 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("ALAKAZAM"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, - 0x31, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x08, - 0x31, 0x3B, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3B, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3B, 0x3B, 0x08, - 0x69, 0x73, 0x08, 0x4D, 0x4D, 0x4D, 0x4D, 0xD1, 0x4D, 0x4D, 0x4D, 0x4D, 0x08, 0x69, 0x73, 0x08, - 0x40, 0x3B, 0x08, 0x55, 0x55, 0x55, 0x55, 0xD1, 0x55, 0x55, 0x55, 0x55, 0x08, 0x31, 0x41, 0x08, - 0x69, 0x41, 0x08, 0xC5, 0xD9, 0xD9, 0xD9, 0x9A, 0xD9, 0xD9, 0xD9, 0xC6, 0x08, 0x41, 0x73, 0x08, - 0x69, 0x3B, 0x08, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x08, 0x31, 0x73, 0x08, - 0x69, 0x3B, 0x08, 0xCD, 0x9B, 0x73, 0x73, 0x44, 0x73, 0x73, 0x9B, 0xD5, 0x08, 0x31, 0x73, 0x08, - 0x69, 0x3B, 0x08, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x08, 0x31, 0x73, 0x08, - 0x69, 0x41, 0x08, 0xD1, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xDB, 0xDB, 0xDB, 0x08, 0x41, 0x73, 0x08, - 0x40, 0x3B, 0x08, 0x08, 0xC7, 0xC7, 0xDB, 0xDB, 0xDB, 0xC7, 0xC7, 0x08, 0x08, 0x31, 0x41, 0x08, - 0x69, 0x3B, 0x4D, 0x4D, 0x67, 0x67, 0xDB, 0xDB, 0xDB, 0x67, 0x67, 0x4D, 0x4D, 0x31, 0x73, 0x08, - 0x69, 0x3B, 0x55, 0x55, 0xD7, 0xD7, 0xD1, 0xDB, 0xDB, 0xD7, 0xD7, 0x55, 0x55, 0x31, 0x73, 0x08, - 0x69, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x73, 0x08, - 0x69, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x0201, 0x3EF9, 0x3EF9, 0x3EF9, 0x2009, 0x3019, 0x2009, 0x3019, 0x2009, 0x3019, 0x3019, 0x3C79, 0x1, 0x1, 0xFFFF}, - .coords = {COORDS_XY(4,7), COORDS_XY(10,7)}, - .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .range = TRAINER_RANGE(5, 5), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_expert/floor_0/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_expert/floor_0/collision.bin"), + .trainerCoords = {COORDS_XY(4,7), COORDS_XY(10,7)}, + .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .trainerRanges = TRAINER_RANGE(5, 5), } }, [1] = @@ -4623,7 +3995,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { { .name = _("RODERICK"), .facilityClass = FACILITY_CLASS_COOLTRAINER_M, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_CAN, EC_WORD_WIN, EC_WORD_WITHOUT, EC_WORD_A, EC_MOVE2(HELPING_HAND)}, .speechWin = {EC_WORD_IT_S, EC_WORD_ONLY, EC_WORD_NATURAL, EC_WORD_THAT, EC_WORD_I, EC_WORD_WIN}, .speechLose = {EC_WORD_LOSING, EC_WORD_HAS, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_SMALL, EC_WORD_ELLIPSIS}, @@ -4635,8 +4006,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_SWELLOW, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_FACADE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -4650,15 +4019,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("SWELLOW"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_MACHAMP, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_LOW_KICK, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -4672,15 +4039,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("MACHAMP"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_URSARING, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -4694,15 +4059,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("URSARING"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_KINGLER, .heldItem = ITEM_PERSIM_BERRY, .moves = {MOVE_RETURN, MOVE_PROTECT, MOVE_CRABHAMMER, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -4716,15 +4079,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("KINGLER"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_TYRANITAR, .heldItem = ITEM_PERSIM_BERRY, .moves = {MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .defenseEV = 6, @@ -4738,15 +4099,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("TYRANITAR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_DRAGONITE, .heldItem = ITEM_PERSIM_BERRY, .moves = {MOVE_BODY_SLAM, MOVE_THUNDER_WAVE, MOVE_EARTHQUAKE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -4760,7 +4119,7 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("DRAGONITE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -4768,7 +4127,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { { .name = _("ALICIA"), .facilityClass = FACILITY_CLASS_COOLTRAINER_F, - .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_NEED, EC_WORD_A, EC_MOVE2(HELPING_HAND), EC_WORD_EXCL}, .speechWin = {EC_WORD_SORRY, EC_WORD_EXCL, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_FOR, EC_WORD_YOU}, .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_UNBELIEVABLE, EC_MOVE2(STRUGGLE), EC_WORD_THAT_WAS, EC_WORD_EXCL}, @@ -4780,8 +4138,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_JOLTEON, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4795,15 +4151,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("JOLTEON"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_ALAKAZAM, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_ATTRACT, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4817,15 +4171,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("ALAKAZAM"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_STARMIE, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4839,15 +4191,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 1, .personality = 0xA, .nickname = _("STARMIE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_DUSCLOPS, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_PURSUIT, MOVE_PROTECT, MOVE_ATTRACT, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -4861,15 +4211,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x82, .nickname = _("DUSCLOPS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_NINETALES, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_OVERHEAT, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4883,15 +4231,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0xD2, .nickname = _("NINETALES"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_BANETTE, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_SHADOW_BALL, MOVE_FEINT_ATTACK, MOVE_ATTRACT, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -4905,34 +4251,17 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x85, .nickname = _("BANETTE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, - 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x08, - 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x08, - 0x91, 0x46, 0x7D, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x08, - 0x91, 0x46, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0xB3, 0x9B, 0x9B, 0x9B, 0x08, - 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x9B, 0x08, - 0x91, 0x46, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x08, - 0x91, 0x46, 0x9B, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x08, - 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x08, - 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xB3, 0x08, - 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x08, - 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x08, - 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0x08, - 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x08, - 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - }, - .collisionData = {0x0381, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, - .coords = {COORDS_XY(7,10), COORDS_XY(7,14)}, - .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .range = TRAINER_RANGE(3, 3), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_expert/floor_1/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_expert/floor_1/collision.bin"), + .trainerCoords = {COORDS_XY(7,10), COORDS_XY(7,14)}, + .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .trainerRanges = TRAINER_RANGE(3, 3), } }, [2] = @@ -4945,7 +4274,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { { .name = _("TERRENCE"), .facilityClass = FACILITY_CLASS_EXPERT_M, - .unused = 0, .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_THIS, EC_WORD_MATCH, EC_WORD_IS, EC_WORD_FOR, EC_WORD_YOU}, .speechWin = {EC_WORD_OH_DEAR, EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES}, .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, EC_EMPTY_WORD, EC_EMPTY_WORD}, @@ -4957,8 +4285,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_WOBBUFFET, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_MIRROR_COAT, MOVE_COUNTER, MOVE_SAFEGUARD, MOVE_ENCORE}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -4972,15 +4298,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x94, .nickname = _("WOBBUFFET"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_EXPLOUD, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_HYPER_VOICE, MOVE_COUNTER, MOVE_REST, MOVE_ROCK_SLIDE}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -5001,8 +4325,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_CROBAT, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE, MOVE_TOXIC}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -5016,15 +4338,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("CROBAT"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_DUGTRIO, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_RETURN, MOVE_SLUDGE_BOMB}, - .level = 0, - .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -5038,15 +4358,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 1, .personality = 0xD, .nickname = _("DUGTRIO"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_ELECTRODE, .heldItem = ITEM_PETAYA_BERRY, .moves = {MOVE_TORMENT, MOVE_MIRROR_COAT, MOVE_THUNDERBOLT, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spAttackEV = 6, @@ -5067,8 +4385,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_GENGAR, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spDefenseEV = 6, @@ -5082,7 +4398,7 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x14, .nickname = _("GENGAR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -5090,7 +4406,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { { .name = _("CARLOTTA"), .facilityClass = FACILITY_CLASS_EXPERT_F, - .unused = 0, .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN, EC_WORD_FOR, EC_WORD_YOU}, .speechWin = {EC_WORD_OH_DEAR, EC_WORD_WE, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PARTY, EC_WORD_LATER}, .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_DISAPPOINT, EC_WORD_YOU}, @@ -5102,8 +4417,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_LAPRAS, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_PERISH_SONG, MOVE_SING}, - .level = 0, - .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -5124,8 +4437,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_ABSOL, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_PERISH_SONG, MOVE_DOUBLE_EDGE, MOVE_PROTECT, MOVE_TORMENT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -5146,8 +4457,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_ALTARIA, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_PERISH_SONG, MOVE_PROTECT, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .spAttackEV = 6, .spDefenseEV = 252, @@ -5168,8 +4477,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_DEWGONG, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_ICE_BEAM, MOVE_SIGNAL_BEAM, MOVE_REST, MOVE_PERISH_SONG}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -5190,8 +4497,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_POLITOED, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_HYDRO_PUMP, MOVE_BLIZZARD, MOVE_MIND_READER, MOVE_PERISH_SONG}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .spAttackEV = 6, .spDefenseEV = 252, @@ -5212,8 +4517,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_MAROWAK, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_PERISH_SONG, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, .hpEV = 252, .speedEV = 6, .spDefenseEV = 252, @@ -5232,29 +4535,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { }, }, }, - .display = { - .metatileData = { - 0xD1, 0xDB, 0xDB, 0xDB, 0xD9, 0xD9, 0x1B, 0x14, 0x15, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9B, 0x08, - 0xD1, 0xDB, 0xDB, 0xDB, 0xD5, 0xD5, 0xC3, 0xF9, 0x86, 0x8E, 0x95, 0x9B, 0x9B, 0x9B, 0x9B, 0x08, - 0xD1, 0xDB, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x9B, 0x08, - 0xD1, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x08, - 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x08, - 0xD1, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x08, - 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCC, 0xFB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x08, - 0xD1, 0xCC, 0xCC, 0xCC, 0xCC, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x08, - 0xD1, 0xD5, 0xD5, 0xD5, 0xD5, 0xFB, 0xEC, 0xFB, 0xEC, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x08, - 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xF5, 0xF5, 0xFB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x08, - 0xD1, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x08, - 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x08, - 0xD1, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x08, - 0xD1, 0xDB, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x9B, 0x08, - 0xD1, 0xDB, 0xDB, 0xDB, 0xCC, 0xCC, 0xCB, 0xFB, 0x8C, 0x8C, 0x8C, 0x9B, 0x9B, 0x9B, 0x9B, 0x08, - 0xD1, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCC, 0xFB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x08, - }, - .collisionData = {0x0381, 0x0201, 0xEE1, 0x1EF1, 0x3EF9, 0x3EF9, 0x7E7D, 0x783D, 0x2BD, 0x783D, 0x7E7D, 0x3E79, 0x3EF9, 0x1EF1, 0xEE1, 0x201}, - .coords = {COORDS_XY(7,6), COORDS_XY(7,10)}, - .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .range = TRAINER_RANGE(3, 3), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_expert/floor_2/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_expert/floor_2/collision.bin"), + .trainerCoords = {COORDS_XY(7,6), COORDS_XY(7,10)}, + .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .trainerRanges = TRAINER_RANGE(3, 3), } }, [3] = @@ -5267,7 +4553,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { { .name = _("NORA"), .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, - .unused = 0, .speechBefore = {EC_WORD_WAAAH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL}, .speechWin = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_WON}, .speechLose = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_LOST}, @@ -5279,8 +4564,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_FORRETRESS, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_SPIKES}, - .level = 0, - .ppBonuses = 0, .hpEV = 110, .attackEV = 200, .spDefenseEV = 200, @@ -5294,15 +4577,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("FORRETRESS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_ELECTRODE, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -5315,15 +4596,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 1, .personality = 0xC, .nickname = _("ELECTRODE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_EXEGGUTOR, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_EXPLOSION, MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_SOLAR_BEAM}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -5336,15 +4615,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x7F, .nickname = _("EXEGGUTOR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_DUSCLOPS, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE}, - .level = 0, - .ppBonuses = 0, .hpEV = 110, .defenseEV = 200, .spDefenseEV = 200, @@ -5358,15 +4635,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x93, .nickname = _("DUSCLOPS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_NINETALES, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_OVERHEAT, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -5379,15 +4654,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("NINETALES"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_BANETTE, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_THUNDERBOLT, MOVE_THUNDER}, - .level = 0, - .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -5400,7 +4673,7 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x96, .nickname = _("BANETTE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, @@ -5408,7 +4681,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { { .name = _("GAV"), .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, - .unused = 0, .speechBefore = {EC_WORD_WAHAHAHA, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_STOP, EC_WORD_ME, EC_WORD_EXCL}, .speechWin = {EC_WORD_WOWEE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_AWESOME, EC_WORD_COOL}, .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_COOL, EC_WORD_AT, EC_WORD_ALL, EC_WORD_EXCL}, @@ -5420,8 +4692,6 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .species = SPECIES_SALAMENCE, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -5434,15 +4704,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x95, .nickname = _("SALAMENCE"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [1] = { .species = SPECIES_GENGAR, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -5455,15 +4723,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x8C, .nickname = _("GENGAR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [2] = { .species = SPECIES_GYARADOS, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_BITE, MOVE_EARTHQUAKE}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -5476,15 +4742,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("GYARADOS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [3] = { .species = SPECIES_GENGAR, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_EXPLOSION, MOVE_MEAN_LOOK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -5497,15 +4761,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("GENGAR"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [4] = { .species = SPECIES_DUSCLOPS, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL}, - .level = 0, - .ppBonuses = 0, .hpEV = 110, .defenseEV = 200, .spDefenseEV = 200, @@ -5519,15 +4781,13 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x14, .nickname = _("DUSCLOPS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, [5] = { .species = SPECIES_MISDREAVUS, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_PERISH_SONG, MOVE_SHADOW_BALL}, - .level = 0, - .ppBonuses = 0, .hpEV = 180, .defenseEV = 180, .spDefenseEV = 150, @@ -5541,34 +4801,17 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .abilityNum = 0, .personality = 0x85, .nickname = _("MISDREAVUS"), - .friendship = 255, + .friendship = MAX_FRIENDSHIP, }, }, }, }, - .display = { - .metatileData = { - 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, - 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x08, - 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x08, - 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x08, - 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x08, - 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x08, - 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x08, - 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x08, - 0x96, 0x9B, 0x9B, 0x9B, 0x9B, 0xD6, 0xD6, 0x96, 0xD6, 0xD6, 0xDB, 0x9B, 0x9B, 0x9B, 0x96, 0x08, - 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x08, - 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x08, - 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x08, - 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x08, - 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x08, - 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x08, - 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x08, - }, - .collisionData = {0x0381, 0x0101, 0x0101, 0x6C1, 0x0821, 0x16D1, 0x2829, 0x2009, 0x1, 0x2009, 0x2829, 0x16D1, 0x0821, 0x6C1, 0x0101, 0x101}, - .coords = {COORDS_XY(7,6), COORDS_XY(7,10)}, - .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .range = TRAINER_RANGE(3, 3), + .map = { + .metatileData = INCBIN_U8("graphics/trainer_hill/maps_expert/floor_3/metatiles.bin"), + .collisionData = INCBIN_U16("graphics/trainer_hill/maps_expert/floor_3/collision.bin"), + .trainerCoords = {COORDS_XY(7,6), COORDS_XY(7,10)}, + .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .trainerRanges = TRAINER_RANGE(3, 3), } }, }; diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index bbc1a70b27..4b5cde44c0 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -1,4 +1,4 @@ -const struct BattleMove gBattleMoves[MOVES_COUNT] = +const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { [MOVE_NONE] = { @@ -11,6 +11,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, + .split = SPLIT_PHYSICAL, }, [MOVE_POUND] = @@ -24,11 +25,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_KARATE_CHOP] = { - .effect = EFFECT_HIGH_CRITICAL, + .effect = EFFECT_HIT, .power = 50, .type = TYPE_FIGHTING, .accuracy = 100, @@ -36,7 +40,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DOUBLE_SLAP] = @@ -50,6 +57,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_COMET_PUNCH] = @@ -62,7 +72,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MEGA_PUNCH] = @@ -75,7 +88,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PAY_DAY] = @@ -89,6 +105,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FIRE_PUNCH] = @@ -101,7 +120,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICE_PUNCH] = @@ -114,7 +136,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THUNDER_PUNCH] = @@ -127,7 +152,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SCRATCH] = @@ -141,6 +169,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VISE_GRIP] = @@ -154,6 +185,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GUILLOTINE] = @@ -167,11 +201,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_RAZOR_WIND] = { - .effect = EFFECT_RAZOR_WIND, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #endif + .effect = EFFECT_TWO_TURNS_ATTACK, .power = 80, .type = TYPE_NORMAL, .accuracy = 100, @@ -179,20 +221,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWORDS_DANCE] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .pp = 20, + #else + .pp = 30, + #endif .effect = EFFECT_ATTACK_UP_2, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, - .pp = 30, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = FLAG_SNATCH_AFFECTED, + .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_CUT] = @@ -206,6 +257,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GUST] = @@ -218,7 +272,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_2X_IN_AIR, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WING_ATTACK] = @@ -232,25 +289,45 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WHIRLWIND] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .accuracy = 0, + .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .accuracy = 100, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .accuracy = 100, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_ROAR, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = -6, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_FLY] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .power = 90, + .zMovePower = 175, + #else + .power = 70, + .zMovePower = 140, + #endif .effect = EFFECT_SEMI_INVULNERABLE, - .power = 70, .type = TYPE_FLYING, .accuracy = 95, .pp = 15, @@ -258,19 +335,28 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BIND] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .accuracy = 85, + #else + .accuracy = 75, + #endif .effect = EFFECT_TRAP, .power = 15, .type = TYPE_NORMAL, - .accuracy = 75, .pp = 20, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SLAM] = @@ -284,24 +370,38 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VINE_WHIP] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 45, + .pp = 25, + #elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5 + .power = 35, + .pp = 15, + #else + .power = 35, + .pp = 10, + #endif .effect = EFFECT_HIT, - .power = 35, .type = TYPE_GRASS, .accuracy = 100, - .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STOMP] = { - .effect = EFFECT_FLINCH_MINIMIZE_HIT, + .effect = EFFECT_FLINCH_HIT, .power = 65, .type = TYPE_NORMAL, .accuracy = 100, @@ -309,7 +409,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DOUBLE_KICK] = @@ -322,7 +425,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MEGA_KICK] = @@ -336,23 +442,44 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_JUMP_KICK] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 100, + .pp = 10, + .zMovePower = 180, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .power = 85, + .pp = 25, + .zMovePower = 160, + #else + .power = 70, + .pp = 25, + .zMovePower = 140, + #endif .effect = EFFECT_RECOIL_IF_MISS, - .power = 70, .type = TYPE_FIGHTING, .accuracy = 95, - .pp = 25, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROLLING_KICK] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif .effect = EFFECT_FLINCH_HIT, .power = 60, .type = TYPE_FIGHTING, @@ -361,7 +488,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SAND_ATTACK] = @@ -375,6 +504,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_HEADBUTT] = @@ -387,7 +519,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HORN_ATTACK] = @@ -401,6 +536,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FURY_ATTACK] = @@ -414,6 +552,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HORN_DRILL] = @@ -427,23 +568,42 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TACKLE] = { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .power = 40, + .accuracy = 100, + #elif B_UPDATED_MOVE_DATA == GEN_5 || B_UPDATED_MOVE_DATA == GEN_6 + .power = 50, + .accuracy = 100, + #else + .power = 35, + .accuracy = 95, + #endif .effect = EFFECT_HIT, - .power = 35, .type = TYPE_NORMAL, - .accuracy = 95, .pp = 35, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BODY_SLAM] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif .effect = EFFECT_PARALYZE_HIT, .power = 85, .type = TYPE_NORMAL, @@ -452,25 +612,34 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WRAP] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .accuracy = 90, + #else + .accuracy = 85, + #endif .effect = EFFECT_TRAP, .power = 15, .type = TYPE_NORMAL, - .accuracy = 85, .pp = 20, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TAKE_DOWN] = { - .effect = EFFECT_RECOIL, + .effect = EFFECT_RECOIL_25, .power = 90, .type = TYPE_NORMAL, .accuracy = 85, @@ -478,25 +647,37 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THRASH] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 120, + .pp = 10, + .zMovePower = 190, + #else + .power = 90, + .pp = 20, + .zMovePower = 175, + #endif .effect = EFFECT_RAMPAGE, - .power = 90, .type = TYPE_NORMAL, .accuracy = 100, - .pp = 20, .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DOUBLE_EDGE] = { - .effect = EFFECT_DOUBLE_EDGE, + .effect = EFFECT_RECOIL_33, .power = 120, .type = TYPE_NORMAL, .accuracy = 100, @@ -504,7 +685,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TAIL_WHIP] = @@ -518,6 +702,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_POISON_STING] = @@ -530,7 +717,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TWINEEDLE] = @@ -543,20 +733,31 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PIN_MISSILE] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 25, + .accuracy = 95, + #else + .power = 14, + .accuracy = 85, + #endif .effect = EFFECT_MULTI_HIT, - .power = 14, .type = TYPE_BUG, - .accuracy = 85, .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LEER] = @@ -570,6 +771,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_BITE] = @@ -582,7 +786,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GROWL] = @@ -595,20 +802,34 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_ROAR] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .accuracy = 0, + .flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_MAGIC_COAT_AFFECTED, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .accuracy = 100, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_MAGIC_COAT_AFFECTED, + #else + .accuracy = 100, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + #endif .effect = EFFECT_ROAR, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = -6, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_SING] = @@ -621,7 +842,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SUPERSONIC] = @@ -634,7 +858,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SONIC_BOOM] = @@ -648,24 +875,42 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DISABLE] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .accuracy = 100, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .accuracy = 80, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .accuracy = 55, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_DISABLE, .power = 0, .type = TYPE_NORMAL, - .accuracy = 55, .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_ACID] = { - .effect = EFFECT_DEFENSE_DOWN_HIT, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + #else + .effect = EFFECT_DEFENSE_DOWN_HIT, + #endif .power = 40, .type = TYPE_POISON, .accuracy = 100, @@ -673,7 +918,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EMBER] = @@ -686,20 +934,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FLAMETHROWER] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 90, + #else + .power = 95, + #endif .effect = EFFECT_BURN_HIT, - .power = 95, .type = TYPE_FIRE, .accuracy = 100, .pp = 15, .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIST] = @@ -713,6 +971,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_WATER_GUN] = @@ -726,12 +987,21 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYDRO_PUMP] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 110, + .zMovePower = 185, + #else + .power = 120, + .zMovePower = 190, + #endif .effect = EFFECT_HIT, - .power = 120, .type = TYPE_WATER, .accuracy = 80, .pp = 5, @@ -739,45 +1009,73 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SURF] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 90, + .target = MOVE_TARGET_FOES_AND_ALLY, + #elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5 + .power = 95, + .target = MOVE_TARGET_FOES_AND_ALLY, + #else + .power = 95, + .target = MOVE_TARGET_BOTH, + #endif .effect = EFFECT_HIT, - .power = 95, .type = TYPE_WATER, .accuracy = 100, .pp = 15, .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERWATER, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICE_BEAM] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 90, + #else + .power = 95, + #endif .effect = EFFECT_FREEZE_HIT, - .power = 95, .type = TYPE_ICE, .accuracy = 100, .pp = 10, .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BLIZZARD] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 110, + .zMovePower = 185, + #else + .power = 120, + .zMovePower = 190, + #endif .effect = EFFECT_FREEZE_HIT, - .power = 120, .type = TYPE_ICE, .accuracy = 70, .pp = 5, .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYBEAM] = @@ -790,7 +1088,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BUBBLE_BEAM] = @@ -803,7 +1104,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AURORA_BEAM] = @@ -816,7 +1120,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYPER_BEAM] = @@ -830,6 +1137,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PECK] = @@ -843,6 +1153,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRILL_PECK] = @@ -856,19 +1169,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SUBMISSION] = { - .effect = EFFECT_RECOIL, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .pp = 20, + #else + .pp = 25, + #endif + .effect = EFFECT_RECOIL_25, .power = 80, .type = TYPE_FIGHTING, .accuracy = 80, - .pp = 25, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LOW_KICK] = @@ -882,10 +1205,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_COUNTER] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .flags = FLAG_MAKES_CONTACT, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_COUNTER, .power = 1, .type = TYPE_FIGHTING, @@ -894,7 +1227,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_DEPENDS, .priority = -5, - .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SEISMIC_TOSS] = @@ -908,6 +1243,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STRENGTH] = @@ -921,32 +1259,49 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ABSORB] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .pp = 25, + #else + .pp = 20, + #endif .effect = EFFECT_ABSORB, .power = 20, .type = TYPE_GRASS, .accuracy = 100, - .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MEGA_DRAIN] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .pp = 15, + #else + .pp = 10, + #endif .effect = EFFECT_ABSORB, .power = 40, .type = TYPE_GRASS, .accuracy = 100, - .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LEECH_SEED] = @@ -960,24 +1315,38 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_GROWTH] = { - .effect = EFFECT_SPECIAL_ATTACK_UP, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .pp = 20, + #else + .pp = 40, + #endif + #if B_GROWTH_STAT_RAISE >= GEN_5 + .effect = EFFECT_GROWTH, + #else + .effect = EFFECT_SPECIAL_ATTACK_UP, + #endif .power = 0, .type = TYPE_NORMAL, .accuracy = 0, - .pp = 40, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_RAZOR_LEAF] = { - .effect = EFFECT_HIGH_CRITICAL, + .effect = EFFECT_HIT, .power = 55, .type = TYPE_GRASS, .accuracy = 95, @@ -985,12 +1354,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SOLAR_BEAM] = { - .effect = EFFECT_SOLARBEAM, + .effect = EFFECT_SOLAR_BEAM, .power = 120, .type = TYPE_GRASS, .accuracy = 100, @@ -999,6 +1371,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POISON_POWDER] = @@ -1011,7 +1386,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_STUN_SPORE] = @@ -1024,7 +1402,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_SLEEP_POWDER] = @@ -1037,25 +1418,45 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_PETAL_DANCE] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 120, + .pp = 10, + .zMovePower = 190, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .power = 90, + .pp = 20, + .zMovePower = 175, + #else + .power = 70, + .pp = 20, + .zMovePower = 140, + #endif .effect = EFFECT_RAMPAGE, - .power = 70, .type = TYPE_GRASS, .accuracy = 100, - .pp = 20, .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STRING_SHOT] = { - .effect = EFFECT_SPEED_DOWN, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .effect = EFFECT_SPEED_DOWN_2, + #else + .effect = EFFECT_SPEED_DOWN, + #endif .power = 0, .type = TYPE_BUG, .accuracy = 95, @@ -1064,6 +1465,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_DRAGON_RAGE] = @@ -1077,19 +1481,31 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FIRE_SPIN] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 35, + .accuracy = 85, + #else + .power = 15, + .accuracy = 70, + #endif .effect = EFFECT_TRAP, - .power = 15, .type = TYPE_FIRE, - .accuracy = 70, .pp = 15, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, [MOVE_THUNDER_SHOCK] = @@ -1102,46 +1518,71 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THUNDERBOLT] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 90, + #else + .power = 95, + #endif .effect = EFFECT_PARALYZE_HIT, - .power = 95, .type = TYPE_ELECTRIC, .accuracy = 100, .pp = 15, .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THUNDER_WAVE] = { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .accuracy = 90, + #else + .accuracy = 100, + #endif .effect = EFFECT_PARALYZE, .power = 0, .type = TYPE_ELECTRIC, - .accuracy = 100, .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_THUNDER] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 110, + .zMovePower = 185, + #else + .power = 120, + .zMovePower = 190, + #endif .effect = EFFECT_THUNDER, - .power = 120, .type = TYPE_ELECTRIC, .accuracy = 70, .pp = 10, .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_IN_AIR, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROCK_THROW] = @@ -1155,6 +1596,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EARTHQUAKE] = @@ -1167,7 +1611,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERGROUND, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FISSURE] = @@ -1180,13 +1627,22 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_UNDERGROUND, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DIG] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .power = 80, + .zMovePower = 160, + #else + .power = 60, + .zMovePower = 120, + #endif .effect = EFFECT_SEMI_INVULNERABLE, - .power = 60, .type = TYPE_GROUND, .accuracy = 100, .pp = 10, @@ -1194,19 +1650,28 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TOXIC] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .accuracy = 90, + #else + .accuracy = 85, + #endif .effect = EFFECT_TOXIC, .power = 0, .type = TYPE_POISON, - .accuracy = 85, .pp = 10, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_CONFUSION] = @@ -1219,7 +1684,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYCHIC] = @@ -1232,7 +1700,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYPNOSIS] = @@ -1246,6 +1717,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_MEDITATE] = @@ -1259,6 +1733,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_AGILITY] = @@ -1272,11 +1749,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_QUICK_ATTACK] = { - .effect = EFFECT_QUICK_ATTACK, + .effect = EFFECT_HIT, .power = 40, .type = TYPE_NORMAL, .accuracy = 100, @@ -1285,6 +1765,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_RAGE] = @@ -1298,6 +1781,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TELEPORT] = @@ -1309,8 +1795,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, - .priority = 0, + .priority = -6, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_NIGHT_SHADE] = @@ -1324,6 +1813,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIMIC] = @@ -1331,12 +1823,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .effect = EFFECT_MIMIC, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, + .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_SCREECH] = @@ -1349,7 +1844,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_DOUBLE_TEAM] = @@ -1363,19 +1861,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_RECOVER] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .pp = 10, + #else + .pp = 20, + #endif .effect = EFFECT_RESTORE_HP, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, - .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HARDEN] = @@ -1389,19 +1897,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_MINIMIZE] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .pp = 10, + #else + .pp = 20, + #endif .effect = EFFECT_MINIMIZE, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, - .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_SMOKESCREEN] = @@ -1415,6 +1933,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_CONFUSE_RAY] = @@ -1428,6 +1949,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_WITHDRAW] = @@ -1441,6 +1965,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_DEFENSE_CURL] = @@ -1454,19 +1981,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_BARRIER] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .pp = 20, + #else + .pp = 30, + #endif .effect = EFFECT_DEFENSE_UP_2, .power = 0, .type = TYPE_PSYCHIC, .accuracy = 0, - .pp = 30, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_LIGHT_SCREEN] = @@ -1480,6 +2017,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_HAZE] = @@ -1490,9 +2030,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .accuracy = 0, .pp = 30, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_REFLECT] = @@ -1506,6 +2049,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_FOCUS_ENERGY] = @@ -1519,19 +2065,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_BIDE] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .accuracy = 0, + .priority = 1, + #else + .accuracy = 100, + .priority = 0, + #endif .effect = EFFECT_BIDE, .power = 1, .type = TYPE_NORMAL, - .accuracy = 100, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, - .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_METRONOME] = @@ -1545,6 +2102,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_DEPENDS, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIRROR_MOVE] = @@ -1558,6 +2118,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_DEPENDS, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_2, }, [MOVE_SELF_DESTRUCT] = @@ -1571,6 +2134,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EGG_BOMB] = @@ -1583,33 +2149,50 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LICK] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 30, + #else + .power = 20, + #endif .effect = EFFECT_PARALYZE_HIT, - .power = 20, .type = TYPE_GHOST, .accuracy = 100, .pp = 30, .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SMOG] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 30, + #else + .power = 20, + #endif .effect = EFFECT_POISON_HIT, - .power = 20, .type = TYPE_POISON, .accuracy = 70, .pp = 20, .secondaryEffectChance = 40, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SLUDGE] = @@ -1622,7 +2205,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BONE_CLUB] = @@ -1635,51 +2221,81 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FIRE_BLAST] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 110, + .zMovePower = 185, + #else + .power = 120, + .zMovePower = 190, + #endif .effect = EFFECT_BURN_HIT, - .power = 120, .type = TYPE_FIRE, .accuracy = 85, .pp = 5, .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WATERFALL] = { - .effect = EFFECT_HIT, + #if B_UPDATED_MOVE_DATA >= GEN_5 + .effect = EFFECT_FLINCH_HIT, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .effect = EFFECT_FLINCH_HIT, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .effect = EFFECT_HIT, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif .power = 80, .type = TYPE_WATER, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CLAMP] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .accuracy = 85, + .pp = 15, + #else + .accuracy = 75, + .pp = 10, + #endif .effect = EFFECT_TRAP, .power = 35, .type = TYPE_WATER, - .accuracy = 75, - .pp = 10, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWIFT] = { - .effect = EFFECT_ALWAYS_HIT, + .effect = EFFECT_HIT, .power = 60, .type = TYPE_NORMAL, .accuracy = 0, @@ -1688,19 +2304,31 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SKULL_BASH] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 130, + .pp = 10, + .zMovePower = 195, + #else + .power = 100, + .pp = 15, + .zMovePower = 180, + #endif .effect = EFFECT_SKULL_BASH, - .power = 100, .type = TYPE_NORMAL, .accuracy = 100, - .pp = 15, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPIKE_CANNON] = @@ -1714,6 +2342,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CONSTRICT] = @@ -1726,7 +2357,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AMNESIA] = @@ -1740,10 +2374,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_KINESIS] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_ACCURACY_DOWN, .power = 0, .type = TYPE_PSYCHIC, @@ -1752,7 +2394,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_SOFT_BOILED] = @@ -1766,32 +2410,57 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HIGH_JUMP_KICK] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 130, + .pp = 10, + .zMovePower = 195, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .power = 100, + .pp = 20, + .zMovePower = 180, + #else + .power = 85, + .pp = 20, + .zMovePower = 60, + #endif .effect = EFFECT_RECOIL_IF_MISS, - .power = 85, .type = TYPE_FIGHTING, .accuracy = 90, - .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GLARE] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .accuracy = 100, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .accuracy = 90, + #else + .accuracy = 75, + #endif .effect = EFFECT_PARALYZE, .power = 0, .type = TYPE_NORMAL, - .accuracy = 75, .pp = 30, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_DREAM_EATER] = @@ -1805,19 +2474,33 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POISON_GAS] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .accuracy = 90, + .target = MOVE_TARGET_BOTH, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .accuracy = 80, + .target = MOVE_TARGET_BOTH, + #else + .accuracy = 55, + .target = MOVE_TARGET_SELECTED, + #endif .effect = EFFECT_POISON, .power = 0, .type = TYPE_POISON, - .accuracy = 55, .pp = 40, .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_BARRAGE] = @@ -1830,20 +2513,32 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LEECH_LIFE] = { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .power = 80, + .pp = 10, + .zMovePower = 160, + #else + .power = 20, + .pp = 15, + .zMovePower = 100, + #endif .effect = EFFECT_ABSORB, - .power = 20, .type = TYPE_BUG, .accuracy = 100, - .pp = 15, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LOVELY_KISS] = @@ -1857,11 +2552,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SKY_ATTACK] = { - .effect = EFFECT_SKY_ATTACK, + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif + .effect = EFFECT_TWO_TURNS_ATTACK, .power = 140, .type = TYPE_FLYING, .accuracy = 90, @@ -1869,7 +2572,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .argument = MOVE_EFFECT_FLINCH, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TRANSFORM] = @@ -1883,19 +2589,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_BUBBLE] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 40, + #else + .power = 20, + #endif .effect = EFFECT_SPEED_DOWN_HIT, - .power = 20, .type = TYPE_WATER, .accuracy = 100, .pp = 30, .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DIZZY_PUNCH] = @@ -1908,7 +2624,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPORE] = @@ -1921,38 +2640,55 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_FLASH] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .accuracy = 100, + #else + .accuracy = 70, + #endif .effect = EFFECT_ACCURACY_DOWN, .power = 0, .type = TYPE_NORMAL, - .accuracy = 70, .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_PSYWAVE] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .accuracy = 100, + #else + .accuracy = 80, + #endif .effect = EFFECT_PSYWAVE, .power = 1, .type = TYPE_PSYCHIC, - .accuracy = 80, .pp = 15, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPLASH] = { - .effect = EFFECT_SPLASH, + .effect = EFFECT_DO_NOTHING, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, @@ -1961,32 +2697,55 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_3, }, [MOVE_ACID_ARMOR] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .pp = 20, + #else + .pp = 40, + #endif .effect = EFFECT_DEFENSE_UP_2, .power = 0, .type = TYPE_POISON, .accuracy = 0, - .pp = 40, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_CRABHAMMER] = { - .effect = EFFECT_HIGH_CRITICAL, - .power = 90, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 100, + .accuracy = 90, + .zMovePower = 180, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .power = 90, + .accuracy = 90, + .zMovePower = 175, + #else + .power = 90, + .accuracy = 85, + .zMovePower = 175, + #endif + .effect = EFFECT_HIT, .type = TYPE_WATER, - .accuracy = 85, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EXPLOSION] = @@ -2000,6 +2759,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FURY_SWIPES] = @@ -2013,6 +2775,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BONEMERANG] = @@ -2025,7 +2790,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_REST] = @@ -2039,6 +2807,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_ROCK_SLIDE] = @@ -2051,7 +2822,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYPER_FANG] = @@ -2064,7 +2838,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_STRONG_JAW_BOOST | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHARPEN] = @@ -2078,10 +2855,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_CONVERSION] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_SNATCH_AFFECTED, + #else + .flags = 0, + #endif .effect = EFFECT_CONVERSION, .power = 0, .type = TYPE_NORMAL, @@ -2090,7 +2875,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_TRI_ATTACK] = @@ -2103,7 +2890,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SUPER_FANG] = @@ -2117,11 +2907,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SLASH] = { - .effect = EFFECT_HIGH_CRITICAL, + .effect = EFFECT_HIT, .power = 70, .type = TYPE_NORMAL, .accuracy = 100, @@ -2129,7 +2922,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SUBSTITUTE] = @@ -2143,19 +2939,31 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_STRUGGLE] = { - .effect = EFFECT_RECOIL, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .accuracy = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .effect = EFFECT_RECOIL_HP_25, + #else + .accuracy = 100, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .effect = EFFECT_RECOIL_25, + #endif .power = 50, .type = TYPE_NORMAL, - .accuracy = 100, .pp = 1, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SKETCH] = @@ -2169,6 +2977,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_TRIPLE_KICK] = @@ -2182,63 +2993,96 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THIEF] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 60, + .pp = 25, + .zMovePower = 120, + #else + .power = 40, + .pp = 10, + .zMovePower = 100, + #endif .effect = EFFECT_THIEF, - .power = 40, .type = TYPE_DARK, .accuracy = 100, - .pp = 10, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPIDER_WEB] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_MEAN_LOOK, .power = 0, .type = TYPE_BUG, - .accuracy = 100, + .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_MIND_READER] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .accuracy = 0, + #else + .accuracy = 100, + #endif .effect = EFFECT_LOCK_ON, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, .pp = 5, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_NIGHTMARE] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .accuracy = 100, + #else + .accuracy = 0, + #endif .effect = EFFECT_NIGHTMARE, .power = 0, .type = TYPE_GHOST, - .accuracy = 100, .pp = 15, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_FLAME_WHEEL] = { - .effect = EFFECT_THAW_HIT, + .effect = EFFECT_BURN_HIT, .power = 60, .type = TYPE_FIRE, .accuracy = 100, @@ -2246,33 +3090,54 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SNORE] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 50, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .power = 40, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, + #else + .power = 40, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, + #endif .effect = EFFECT_SNORE, - .power = 40, .type = TYPE_NORMAL, .accuracy = 100, .pp = 15, .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CURSE] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .type = TYPE_GHOST, + #else + .type = TYPE_MYSTERY, + #endif .effect = EFFECT_CURSE, .power = 0, - .type = TYPE_MYSTERY, .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_CURSE, }, [MOVE_FLAIL] = @@ -2286,6 +3151,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CONVERSION_2] = @@ -2293,17 +3161,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .effect = EFFECT_CONVERSION_2, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, + .accuracy = 0, .pp = 30, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_AEROBLAST] = { - .effect = EFFECT_HIGH_CRITICAL, + .effect = EFFECT_HIT, .power = 100, .type = TYPE_FLYING, .accuracy = 95, @@ -2311,20 +3182,34 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_COTTON_SPORE] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .accuracy = 100, + .target = MOVE_TARGET_BOTH, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .accuracy = 100, + .target = MOVE_TARGET_SELECTED, + #else + .accuracy = 85, + .target = MOVE_TARGET_SELECTED, + #endif .effect = EFFECT_SPEED_DOWN_2, .power = 0, .type = TYPE_GRASS, - .accuracy = 85, .pp = 40, .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_REVERSAL] = @@ -2338,10 +3223,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPITE] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_SPITE, .power = 0, .type = TYPE_GHOST, @@ -2350,7 +3243,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_POWDER_SNOW] = @@ -2363,11 +3258,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PROTECT] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .priority = 4, + #else + .priority = 3, + #endif .effect = EFFECT_PROTECT, .power = 0, .type = TYPE_NORMAL, @@ -2375,13 +3278,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, - .priority = 3, - .flags = 0, + .flags = FLAG_PROTECTION_MOVE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_MACH_PUNCH] = { - .effect = EFFECT_QUICK_ATTACK, + .effect = EFFECT_HIT, .power = 40, .type = TYPE_FIGHTING, .accuracy = 100, @@ -2389,25 +3294,40 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 1, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SCARY_FACE] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .accuracy = 100, + #else + .accuracy = 90, + #endif .effect = EFFECT_SPEED_DOWN_2, .power = 0, .type = TYPE_NORMAL, - .accuracy = 90, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_FEINT_ATTACK] = { - .effect = EFFECT_ALWAYS_HIT, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #endif + .effect = EFFECT_HIT, .power = 60, .type = TYPE_DARK, .accuracy = 0, @@ -2415,20 +3335,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWEET_KISS] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .type = TYPE_FAIRY, + #else + .type = TYPE_NORMAL, + #endif .effect = EFFECT_CONFUSE, .power = 0, - .type = TYPE_NORMAL, .accuracy = 75, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_BELLY_DRUM] = @@ -2442,6 +3371,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_SLUDGE_BOMB] = @@ -2454,7 +3386,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MUD_SLAP] = @@ -2467,7 +3402,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_OCTAZOOKA] = @@ -2480,11 +3418,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPIKES] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_MAGIC_COAT_AFFECTED, + #else + .flags = 0, + #endif .effect = EFFECT_SPIKES, .power = 0, .type = TYPE_GROUND, @@ -2493,33 +3439,54 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_OPPONENTS_FIELD, .priority = 0, - .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_ZAP_CANNON] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .power = 120, + .zMovePower = 190, + #else + .power = 100, + .zMovePower = 180, + #endif .effect = EFFECT_PARALYZE_HIT, - .power = 100, .type = TYPE_ELECTRIC, .accuracy = 50, .pp = 5, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FORESIGHT] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .accuracy = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .accuracy = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .accuracy = 100, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_FORESIGHT, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, .pp = 40, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, [MOVE_DESTINY_BOND] = @@ -2533,6 +3500,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_FOLLOW_ME, }, [MOVE_PERISH_SONG] = @@ -2543,9 +3513,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .accuracy = 0, .pp = 5, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, - .flags = 0, + .flags = FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_ICY_WIND] = @@ -2558,11 +3531,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DETECT] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .priority = 4, + #else + .priority = 3, + #endif .effect = EFFECT_PROTECT, .power = 0, .type = TYPE_FIGHTING, @@ -2570,47 +3551,76 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .pp = 5, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, - .priority = 3, - .flags = 0, + .flags = FLAG_PROTECTION_MOVE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_BONE_RUSH] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .accuracy = 90, + #else + .accuracy = 80, + #endif .effect = EFFECT_MULTI_HIT, .power = 25, .type = TYPE_GROUND, - .accuracy = 80, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LOCK_ON] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .accuracy = 0, + #else + .accuracy = 100, + #endif .effect = EFFECT_LOCK_ON, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, .pp = 5, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_OUTRAGE] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 120, + .pp = 10, + .zMovePower = 190, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .power = 120, + .pp = 15, + .zMovePower = 190, + #else + .power = 90, + .pp = 15, + .zMovePower = 175, + #endif .effect = EFFECT_RAMPAGE, - .power = 90, .type = TYPE_DRAGON, .accuracy = 100, - .pp = 15, .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SANDSTORM] = @@ -2621,26 +3631,47 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_GIGA_DRAIN] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 75, + .pp = 10, + .zMovePower = 140, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .power = 60, + .pp = 10, + .zMovePower = 120, + #else + .power = 60, + .pp = 5, + .zMovePower = 120, + #endif .effect = EFFECT_ABSORB, - .power = 60, .type = TYPE_GRASS, .accuracy = 100, - .pp = 5, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ENDURE] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .priority = 4, + #else + .priority = 3, + #endif .effect = EFFECT_ENDURE, .power = 0, .type = TYPE_NORMAL, @@ -2648,21 +3679,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, - .priority = 3, - .flags = 0, + .flags = FLAG_PROTECTION_MOVE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_CHARM] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .type = TYPE_FAIRY, + #else + .type = TYPE_NORMAL, + #endif .effect = EFFECT_ATTACK_DOWN_2, .power = 0, - .type = TYPE_NORMAL, .accuracy = 100, .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_ROLLOUT] = @@ -2676,6 +3716,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FALSE_SWIPE] = @@ -2689,19 +3732,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWAGGER] = { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .accuracy = 85, + #else + .accuracy = 90, + #endif .effect = EFFECT_SWAGGER, .power = 0, .type = TYPE_NORMAL, - .accuracy = 90, .pp = 15, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_MILK_DRINK] = @@ -2715,6 +3768,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_SPARK] = @@ -2727,13 +3783,22 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FURY_CUTTER] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 40, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .power = 20, + #else + .power = 10, + #endif .effect = EFFECT_FURY_CUTTER, - .power = 10, .type = TYPE_BUG, .accuracy = 95, .pp = 20, @@ -2741,6 +3806,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STEEL_WING] = @@ -2753,20 +3821,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MEAN_LOOK] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_MEAN_LOOK, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, + .accuracy = 0, .pp = 5, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_ATTRACT] = @@ -2780,6 +3858,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_SLEEP_TALK] = @@ -2793,10 +3874,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_DEPENDS, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, [MOVE_HEAL_BELL] = { + #if B_UPDATED_MOVE_DATA != GEN_5 + .flags = FLAG_SNATCH_AFFECTED | FLAG_SOUND, + #else + .flags = FLAG_SNATCH_AFFECTED, + #endif .effect = EFFECT_HEAL_BELL, .power = 0, .type = TYPE_NORMAL, @@ -2805,7 +3894,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_RETURN] = @@ -2819,6 +3910,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PRESENT] = @@ -2832,6 +3926,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FRUSTRATION] = @@ -2845,6 +3942,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SAFEGUARD] = @@ -2858,6 +3958,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_PAIN_SPLIT] = @@ -2865,17 +3968,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .effect = EFFECT_PAIN_SPLIT, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, + .accuracy = 0, .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_SACRED_FIRE] = { - .effect = EFFECT_THAW_HIT, + .effect = EFFECT_BURN_HIT, .power = 100, .type = TYPE_FIRE, .accuracy = 95, @@ -2883,7 +3989,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MAGNITUDE] = @@ -2896,7 +4005,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERGROUND, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DYNAMIC_PUNCH] = @@ -2909,7 +4021,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MEGAHORN] = @@ -2923,6 +4038,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRAGON_BREATH] = @@ -2935,7 +4053,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BATON_PASS] = @@ -2949,10 +4070,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_ENCORE] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_ENCORE, .power = 0, .type = TYPE_NORMAL, @@ -2961,7 +4090,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_PURSUIT] = @@ -2975,12 +4106,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_RAPID_SPIN] = { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 50, + #else + .power = 20, + #endif .effect = EFFECT_RAPID_SPIN, - .power = 20, .type = TYPE_NORMAL, .accuracy = 100, .pp = 40, @@ -2988,11 +4126,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWEET_SCENT] = { - .effect = EFFECT_EVASION_DOWN, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .effect = EFFECT_EVASION_DOWN_2, + #else + .effect = EFFECT_EVASION_DOWN, + #endif .power = 0, .type = TYPE_NORMAL, .accuracy = 100, @@ -3001,6 +4146,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_IRON_TAIL] = @@ -3013,7 +4161,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_METAL_CLAW] = @@ -3026,7 +4177,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VITAL_THROW] = @@ -3034,12 +4188,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .effect = EFFECT_VITAL_THROW, .power = 70, .type = TYPE_FIGHTING, - .accuracy = 100, + .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = -1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MORNING_SUN] = @@ -3053,6 +4210,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_SYNTHESIS] = @@ -3066,25 +4226,39 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_MOONLIGHT] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .type = TYPE_FAIRY, + #else + .type = TYPE_NORMAL, + #endif .effect = EFFECT_MOONLIGHT, .power = 0, - .type = TYPE_NORMAL, .accuracy = 0, .pp = 5, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HIDDEN_POWER] = { + #if B_HIDDEN_POWER_DMG >= GEN_6 + .power = 60, + #else + .power = 1, + #endif .effect = EFFECT_HIDDEN_POWER, - .power = 1, .type = TYPE_NORMAL, .accuracy = 100, .pp = 15, @@ -3092,11 +4266,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CROSS_CHOP] = { - .effect = EFFECT_HIGH_CRITICAL, + .effect = EFFECT_HIT, .power = 100, .type = TYPE_FIGHTING, .accuracy = 80, @@ -3104,11 +4281,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TWISTER] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_2X_IN_AIR, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_2X_IN_AIR, + #endif .effect = EFFECT_TWISTER, .power = 40, .type = TYPE_DRAGON, @@ -3117,7 +4302,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_RAIN_DANCE] = @@ -3128,9 +4315,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .accuracy = 0, .pp = 5, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SUNNY_DAY] = @@ -3141,14 +4331,21 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .accuracy = 0, .pp = 5, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_CRUNCH] = { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .effect = EFFECT_DEFENSE_DOWN_HIT, + #else + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + #endif .power = 80, .type = TYPE_DARK, .accuracy = 100, @@ -3156,11 +4353,21 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIRROR_COAT] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .flags = 0, + #else + .flags = FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_MIRROR_COAT, .power = 1, .type = TYPE_PSYCHIC, @@ -3169,11 +4376,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_DEPENDS, .priority = -5, - .flags = FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYCH_UP] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = 0, + #else + .flags = FLAG_SNATCH_AFFECTED, + #endif .effect = EFFECT_PSYCH_UP, .power = 0, .type = TYPE_NORMAL, @@ -3182,24 +4396,38 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_EXTREME_SPEED] = { - .effect = EFFECT_QUICK_ATTACK, + #if B_UPDATED_MOVE_DATA >= GEN_5 + .priority = 2, + #else + .priority = 1, + #endif + .effect = EFFECT_HIT, .power = 80, .type = TYPE_NORMAL, .accuracy = 100, .pp = 5, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, - .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ANCIENT_POWER] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif .effect = EFFECT_ALL_STATS_UP_HIT, .power = 60, .type = TYPE_ROCK, @@ -3208,7 +4436,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHADOW_BALL] = @@ -3221,52 +4451,89 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FUTURE_SIGHT] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 120, + .accuracy = 100, + .pp = 10, + .zMovePower = 190, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .power = 100, + .accuracy = 100, + .pp = 10, + .zMovePower = 180, + #else + .power = 80, + .accuracy = 90, + .pp = 15, + .zMovePower = 160, + #endif .effect = EFFECT_FUTURE_SIGHT, - .power = 80, .type = TYPE_PSYCHIC, - .accuracy = 90, - .pp = 15, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROCK_SMASH] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .power = 40, + #else + .power = 20, + #endif .effect = EFFECT_DEFENSE_DOWN_HIT, - .power = 20, .type = TYPE_FIGHTING, .accuracy = 100, .pp = 15, .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WHIRLPOOL] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 35, + .accuracy = 85, + #else + .power = 15, + .accuracy = 70, + #endif .effect = EFFECT_TRAP, - .power = 15, .type = TYPE_WATER, - .accuracy = 70, .pp = 15, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERWATER, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BEAT_UP] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 1, + #else + .power = 10, + #endif .effect = EFFECT_BEAT_UP, - .power = 10, .type = TYPE_DARK, .accuracy = 100, .pp = 10, @@ -3274,51 +4541,84 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FAKE_OUT] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .priority = 3, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .priority = 1, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .priority = 1, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif .effect = EFFECT_FAKE_OUT, .power = 40, .type = TYPE_NORMAL, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, - .priority = 1, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_UPROAR] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 90, + .zMovePower = 175, + #else + .power = 50, + .zMovePower = 100, + #endif .effect = EFFECT_UPROAR, - .power = 50, .type = TYPE_NORMAL, .accuracy = 100, .pp = 10, .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STOCKPILE] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .pp = 20, + #else + .pp = 10, + #endif .effect = EFFECT_STOCKPILE, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, - .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_SPIT_UP] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .power = 1, + #else + .power = 100, + #endif .effect = EFFECT_SPIT_UP, - .power = 100, .type = TYPE_NORMAL, .accuracy = 100, .pp = 10, @@ -3326,6 +4626,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWALLOW] = @@ -3339,19 +4642,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HEAT_WAVE] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 95, + .zMovePower = 175, + #else + .power = 100, + .zMovePower = 180, + #endif .effect = EFFECT_BURN_HIT, - .power = 100, .type = TYPE_FIRE, .accuracy = 90, .pp = 10, .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HAIL] = @@ -3362,13 +4676,21 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_TORMENT] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_TORMENT, .power = 0, .type = TYPE_DARK, @@ -3377,7 +4699,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_FLATTER] = @@ -3391,19 +4715,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_WILL_O_WISP] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .accuracy = 85, + #else + .accuracy = 75, + #endif .effect = EFFECT_WILL_O_WISP, .power = 0, .type = TYPE_FIRE, - .accuracy = 75, .pp = 15, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_MEMENTO] = @@ -3417,6 +4751,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, }, [MOVE_FACADE] = @@ -3430,6 +4767,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FOCUS_PUNCH] = @@ -3442,13 +4782,22 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = -3, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SMELLING_SALTS] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 70, + .zMovePower = 140, + #else + .power = 60, + .zMovePower = 120, + #endif .effect = EFFECT_SMELLINGSALT, - .power = 60, .type = TYPE_NORMAL, .accuracy = 100, .pp = 10, @@ -3456,10 +4805,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .argument = STATUS1_PARALYSIS, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FOLLOW_ME] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .priority = 2, + #else + .priority = 3, + #endif .effect = EFFECT_FOLLOW_ME, .power = 0, .type = TYPE_NORMAL, @@ -3467,8 +4824,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, - .priority = 3, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_NATURE_POWER] = @@ -3476,12 +4835,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .effect = EFFECT_NATURE_POWER, .power = 0, .type = TYPE_NORMAL, - .accuracy = 95, + .accuracy = 0, .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_DEPENDS, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CHARGE] = @@ -3495,10 +4857,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_TAUNT] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED, + #endif .effect = EFFECT_TAUNT, .power = 0, .type = TYPE_DARK, @@ -3507,20 +4879,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_HELPING_HAND] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .target = MOVE_TARGET_ALLY, + #else + .target = MOVE_TARGET_USER, + #endif .effect = EFFECT_HELPING_HAND, .power = 0, .type = TYPE_NORMAL, .accuracy = 100, .pp = 20, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, .priority = 5, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_TRICK] = @@ -3534,6 +4915,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, }, [MOVE_ROLE_PLAY] = @@ -3541,25 +4925,35 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .effect = EFFECT_ROLE_PLAY, .power = 0, .type = TYPE_PSYCHIC, - .accuracy = 100, + .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_WISH] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_SNATCH_AFFECTED, + #else + .flags = 0, + #endif .effect = EFFECT_WISH, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, + .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_ASSIST] = @@ -3573,6 +4967,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_DEPENDS, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_INGRAIN] = @@ -3586,6 +4983,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_SUPERPOWER] = @@ -3599,6 +4999,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MAGIC_COAT] = @@ -3612,10 +5015,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_DEPENDS, .priority = 4, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, [MOVE_RECYCLE] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_SNATCH_AFFECTED, + #else + .flags = 0, + #endif .effect = EFFECT_RECYCLE, .power = 0, .type = TYPE_NORMAL, @@ -3624,7 +5035,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, }, [MOVE_REVENGE] = @@ -3638,6 +5051,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = -4, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BRICK_BREAK] = @@ -3651,6 +5067,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_YAWN] = @@ -3658,18 +5077,27 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .effect = EFFECT_YAWN, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, + .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_KNOCK_OFF] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 65, + .zMovePower = 120, + #else + .power = 20, + .zMovePower = 100, + #endif .effect = EFFECT_KNOCK_OFF, - .power = 20, .type = TYPE_DARK, .accuracy = 100, .pp = 20, @@ -3677,6 +5105,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ENDEAVOR] = @@ -3690,6 +5120,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ERUPTION] = @@ -3703,6 +5136,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SKILL_SWAP] = @@ -3710,16 +5146,24 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .effect = EFFECT_SKILL_SWAP, .power = 0, .type = TYPE_PSYCHIC, - .accuracy = 100, + .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_IMPRISON] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_SNATCH_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED, + #endif .effect = EFFECT_IMPRISON, .power = 0, .type = TYPE_PSYCHIC, @@ -3728,7 +5172,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, [MOVE_REFRESH] = @@ -3742,6 +5188,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_GRUDGE] = @@ -3755,6 +5204,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_FOLLOW_ME, }, [MOVE_SNATCH] = @@ -3768,6 +5220,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_DEPENDS, .priority = 4, .flags = FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, }, [MOVE_SECRET_POWER] = @@ -3780,13 +5235,22 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DIVE] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .power = 80, + .zMovePower = 160, + #else + .power = 60, + .zMovePower = 120, + #endif .effect = EFFECT_SEMI_INVULNERABLE, - .power = 60, .type = TYPE_WATER, .accuracy = 100, .pp = 10, @@ -3794,6 +5258,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ARM_THRUST] = @@ -3807,6 +5273,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CAMOUFLAGE] = @@ -3820,19 +5289,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_TAIL_GLOW] = { - .effect = EFFECT_SPECIAL_ATTACK_UP_2, + #if B_UPDATED_MOVE_DATA >= GEN_5 + .effect = EFFECT_SPECIAL_ATTACK_UP_3, + #else + .effect = EFFECT_SPECIAL_ATTACK_UP_2, + #endif .power = 0, .type = TYPE_BUG, - .accuracy = 100, + .accuracy = 0, .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_LUSTER_PURGE] = @@ -3845,7 +5324,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIST_BALL] = @@ -3858,7 +5340,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FEATHER_DANCE] = @@ -3871,11 +5356,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DANCE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_TEETER_DANCE] = { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DANCE, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_DANCE, + #endif .effect = EFFECT_TEETER_DANCE, .power = 0, .type = TYPE_NORMAL, @@ -3884,12 +5377,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_BLAZE_KICK] = { - .effect = EFFECT_BLAZE_KICK, + .effect = EFFECT_BURN_HIT, .power = 85, .type = TYPE_FIRE, .accuracy = 90, @@ -3897,7 +5392,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MUD_SPORT] = @@ -3908,9 +5406,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .accuracy = 100, .pp = 15, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_ICE_BALL] = @@ -3923,12 +5424,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_NEEDLE_ARM] = { - .effect = EFFECT_FLINCH_MINIMIZE_HIT, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, + #endif + .effect = EFFECT_FLINCH_HIT, .power = 60, .type = TYPE_GRASS, .accuracy = 100, @@ -3936,7 +5445,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SLACK_OFF] = @@ -3950,6 +5461,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HYPER_VOICE] = @@ -3962,20 +5476,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POISON_FANG] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .secondaryEffectChance = 50, + #else + .secondaryEffectChance = 30, + #endif .effect = EFFECT_POISON_FANG, .power = 50, .type = TYPE_POISON, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CRUSH_CLAW] = @@ -3988,7 +5512,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BLAST_BURN] = @@ -4002,6 +5529,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYDRO_CANNON] = @@ -4015,24 +5545,41 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_METEOR_MASH] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 90, + .accuracy = 90, + .zMovePower = 175, + #else + .power = 100, + .accuracy = 85, + .zMovePower = 180, + #endif .effect = EFFECT_ATTACK_UP_HIT, - .power = 100, .type = TYPE_STEEL, - .accuracy = 85, .pp = 10, .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ASTONISH] = { - .effect = EFFECT_FLINCH_MINIMIZE_HIT, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, + #endif + .effect = EFFECT_FLINCH_HIT, .power = 30, .type = TYPE_GHOST, .accuracy = 100, @@ -4040,7 +5587,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WEATHER_BALL] = @@ -4053,7 +5602,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AROMATHERAPY] = @@ -4067,6 +5619,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_FAKE_TEARS] = @@ -4080,58 +5635,103 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_AIR_CUTTER] = { - .effect = EFFECT_HIGH_CRITICAL, - .power = 55, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 60, + .zMovePower = 120, + #else + .power = 55, + .zMovePower = 100, + #endif + .effect = EFFECT_HIT, .type = TYPE_FLYING, .accuracy = 95, .pp = 25, .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_OVERHEAT] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 130, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 195, + #elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5 + .power = 140, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 200, + #else + .power = 140, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 200, + #endif .effect = EFFECT_OVERHEAT, - .power = 140, .type = TYPE_FIRE, .accuracy = 90, .pp = 5, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ODOR_SLEUTH] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .accuracy = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .accuracy = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .accuracy = 100, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_FORESIGHT, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, .pp = 40, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_ROCK_TOMB] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 60, + .accuracy = 95, + .pp = 15, + .zMovePower = 120, + #else + .power = 50, + .accuracy = 80, + .pp = 10, + .zMovePower = 100, + #endif .effect = EFFECT_SPEED_DOWN_HIT, - .power = 50, .type = TYPE_ROCK, - .accuracy = 80, - .pp = 10, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SILVER_WIND] = @@ -4144,7 +5744,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_METAL_SOUND] = @@ -4157,7 +5760,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_GRASS_WHISTLE] = @@ -4170,7 +5776,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_TICKLE] = @@ -4184,6 +5793,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_COSMIC_POWER] = @@ -4197,6 +5809,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_WATER_SPOUT] = @@ -4210,6 +5825,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SIGNAL_BEAM] = @@ -4222,12 +5840,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHADOW_PUNCH] = { - .effect = EFFECT_ALWAYS_HIT, + .effect = EFFECT_HIT, .power = 60, .type = TYPE_GHOST, .accuracy = 0, @@ -4235,20 +5856,34 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EXTRASENSORY] = { - .effect = EFFECT_FLINCH_MINIMIZE_HIT, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .pp = 20, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5 + .pp = 30, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .pp = 30, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, + #endif + .effect = EFFECT_FLINCH_HIT, .power = 80, .type = TYPE_PSYCHIC, .accuracy = 100, - .pp = 30, .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SKY_UPPERCUT] = @@ -4261,20 +5896,31 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_DMG_IN_AIR, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SAND_TOMB] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 35, + .accuracy = 85, + #else + .power = 15, + .accuracy = 70, + #endif .effect = EFFECT_TRAP, - .power = 15, .type = TYPE_GROUND, - .accuracy = 70, .pp = 15, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHEER_COLD] = @@ -4288,37 +5934,54 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MUDDY_WATER] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 90, + #else + .power = 95, + #endif .effect = EFFECT_ACCURACY_DOWN_HIT, - .power = 95, .type = TYPE_WATER, .accuracy = 85, .pp = 10, .secondaryEffectChance = 30, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BULLET_SEED] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 25, + #else + .power = 10, + #endif .effect = EFFECT_MULTI_HIT, - .power = 10, .type = TYPE_GRASS, .accuracy = 100, .pp = 30, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AERIAL_ACE] = { - .effect = EFFECT_ALWAYS_HIT, + .effect = EFFECT_HIT, .power = 60, .type = TYPE_FLYING, .accuracy = 0, @@ -4327,12 +5990,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICICLE_SPEAR] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 25, + #else + .power = 10, + #endif .effect = EFFECT_MULTI_HIT, - .power = 10, .type = TYPE_ICE, .accuracy = 100, .pp = 30, @@ -4340,6 +6010,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_IRON_DEFENSE] = @@ -4353,23 +6026,38 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_BLOCK] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif .effect = EFFECT_MEAN_LOOK, .power = 0, .type = TYPE_NORMAL, - .accuracy = 100, + .accuracy = 0, .pp = 5, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_HOWL] = { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .flags = FLAG_SNATCH_AFFECTED | FLAG_SOUND, + #else + .flags = FLAG_SNATCH_AFFECTED, + #endif .effect = EFFECT_ATTACK_UP, .power = 0, .type = TYPE_NORMAL, @@ -4378,7 +6066,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_DRAGON_CLAW] = @@ -4392,6 +6082,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FRENZY_PLANT] = @@ -4405,6 +6098,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BULK_UP] = @@ -4418,6 +6114,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_BOUNCE] = @@ -4430,7 +6129,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .argument = MOVE_EFFECT_PARALYSIS, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MUD_SHOT] = @@ -4443,12 +6146,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POISON_TAIL] = { - .effect = EFFECT_POISON_TAIL, + .effect = EFFECT_POISON_HIT, .power = 50, .type = TYPE_POISON, .accuracy = 100, @@ -4456,38 +6162,69 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_COVET] = { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 60, + .pp = 25, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .zMovePower = 120, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .power = 60, + .pp = 40, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .zMovePower = 120, + #elif B_UPDATED_MOVE_DATA == GEN_4 + .power = 40, + .pp = 40, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .zMovePower = 100, + #else + .power = 40, + .pp = 40, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .zMovePower = 100, + #endif .effect = EFFECT_THIEF, - .power = 40, .type = TYPE_NORMAL, .accuracy = 100, - .pp = 40, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VOLT_TACKLE] = { - .effect = EFFECT_DOUBLE_EDGE, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .effect = EFFECT_RECOIL_33_STATUS, + .argument = STATUS1_PARALYSIS, + #else + .effect = EFFECT_RECOIL_33, + #endif .power = 120, .type = TYPE_ELECTRIC, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MAGICAL_LEAF] = { - .effect = EFFECT_ALWAYS_HIT, + .effect = EFFECT_HIT, .power = 60, .type = TYPE_GRASS, .accuracy = 0, @@ -4496,6 +6233,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WATER_SPORT] = @@ -4506,9 +6246,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .accuracy = 100, .pp = 15, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_CALM_MIND] = @@ -4522,19 +6265,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_LEAF_BLADE] = { - .effect = EFFECT_HIGH_CRITICAL, - .power = 70, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .power = 90, + .zMovePower = 175, + #else + .power = 70, + .zMovePower = 140, + #endif + .effect = EFFECT_HIT, .type = TYPE_GRASS, .accuracy = 100, .pp = 15, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRAGON_DANCE] = @@ -4547,25 +6301,39 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = FLAG_SNATCH_AFFECTED, + .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_ROCK_BLAST] = { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .accuracy = 90, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + #elif B_UPDATED_MOVE_DATA == GEN_5 || B_UPDATED_MOVE_DATA == GEN_6 + .accuracy = 90, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #else + .accuracy = 80, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #endif .effect = EFFECT_MULTI_HIT, .power = 25, .type = TYPE_ROCK, - .accuracy = 80, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHOCK_WAVE] = { - .effect = EFFECT_ALWAYS_HIT, + .effect = EFFECT_HIT, .power = 60, .type = TYPE_ELECTRIC, .accuracy = 0, @@ -4574,6 +6342,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WATER_PULSE] = @@ -4586,20 +6357,32 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DOOM_DESIRE] = { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 140, + .accuracy = 100, + .zMovePower = 200, + #else + .power = 120, + .accuracy = 85, + .zMovePower = 190, + #endif .effect = EFFECT_FUTURE_SIGHT, - .power = 120, .type = TYPE_STEEL, - .accuracy = 85, .pp = 5, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYCHO_BOOST] = @@ -4613,5 +6396,7754 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ROOST] = + { + .effect = EFFECT_ROOST, + .power = 0, + .type = TYPE_FLYING, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_GRAVITY] = + { + .effect = EFFECT_GRAVITY, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_MIRACLE_EYE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif + .effect = EFFECT_MIRACLE_EYE, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 40, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_WAKE_UP_SLAP] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 70, + .zMovePower = 140, + #else + .power = 60, + .zMovePower = 120, + #endif + .effect = EFFECT_WAKE_UP_SLAP, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .argument = STATUS1_SLEEP, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HAMMER_ARM] = + { + .effect = EFFECT_HAMMER_ARM, + .power = 100, + .type = TYPE_FIGHTING, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_GYRO_BALL] = + { + .effect = EFFECT_GYRO_BALL, + .power = 1, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HEALING_WISH] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_SNATCH_AFFECTED, + #else + .flags = 0, + #endif + .effect = EFFECT_HEALING_WISH, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BRINE] = + { + .effect = EFFECT_BRINE, + .power = 65, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_NATURAL_GIFT] = + { + .effect = EFFECT_NATURAL_GIFT, + .power = 1, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FEINT] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 30, + .flags = FLAG_MIRROR_MOVE_AFFECTED, + #elif B_UPDATED_MOVE_DATA >= GEN_5 + .power = 30, + .flags = 0, + #else + .power = 50, + .flags = 0, + #endif + .effect = EFFECT_FEINT, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 2, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PLUCK] = + { + .effect = EFFECT_BUG_BITE, + .power = 60, + .type = TYPE_FLYING, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TAILWIND] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .pp = 15, + #else + .pp = 30, + #endif + .effect = EFFECT_TAILWIND, + .power = 0, + .type = TYPE_FLYING, + .accuracy = 0, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_BOOST_CRITS, + }, + + [MOVE_ACUPRESSURE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = 0, + #else + .flags = FLAG_SNATCH_AFFECTED, + #endif + .effect = EFFECT_ACUPRESSURE, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_BOOST_CRITS, + }, + + [MOVE_METAL_BURST] = + { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .flags = FLAG_MIRROR_MOVE_AFFECTED, + #endif + .effect = EFFECT_METAL_BURST, + .power = 0, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_DEPENDS, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_U_TURN] = + { + .effect = EFFECT_HIT_ESCAPE, + .power = 70, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CLOSE_COMBAT] = + { + .effect = EFFECT_CLOSE_COMBAT, + .power = 120, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PAYBACK] = + { + .effect = EFFECT_PAYBACK, + .power = 50, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ASSURANCE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 60, + .zMovePower = 120, + #else + .power = 50, + .zMovePower = 100, + #endif + .effect = EFFECT_ASSURANCE, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_EMBARGO] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif + .effect = EFFECT_EMBARGO, + .power = 0, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_FLING] = + { + .effect = EFFECT_FLING, + .power = 1, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PSYCHO_SHIFT] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .accuracy = 100, + #else + .accuracy = 90, + #endif + .effect = EFFECT_PSYCHO_SHIFT, + .power = 0, + .type = TYPE_PSYCHIC, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_2, + }, + + [MOVE_TRUMP_CARD] = + { + .effect = EFFECT_TRUMP_CARD, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + }, + + [MOVE_HEAL_BLOCK] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif + .effect = EFFECT_HEAL_BLOCK, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_2, + }, + + [MOVE_WRING_OUT] = + { + .effect = EFFECT_WRING_OUT, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + }, + + [MOVE_POWER_TRICK] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_SNATCH_AFFECTED, + #else + .flags = 0, + #endif + .effect = EFFECT_POWER_TRICK, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, + }, + + [MOVE_GASTRO_ACID] = + { + .effect = EFFECT_GASTRO_ACID, + .power = 0, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_LUCKY_CHANT] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_SNATCH_AFFECTED, + #else + .flags = 0, + #endif + .effect = EFFECT_LUCKY_CHANT, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, + }, + + [MOVE_ME_FIRST] = + { + .effect = EFFECT_ME_FIRST, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, + }, + + [MOVE_COPYCAT] = + { + .effect = EFFECT_COPYCAT, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_DEPENDS, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, + }, + + [MOVE_POWER_SWAP] = + { + .effect = EFFECT_POWER_SWAP, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_GUARD_SWAP] = + { + .effect = EFFECT_GUARD_SWAP, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_PUNISHMENT] = + { + .effect = EFFECT_PUNISHMENT, + .power = 60, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LAST_RESORT] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 140, + .zMovePower = 200, + #else + .power = 130, + .zMovePower = 195, + #endif + .effect = EFFECT_LAST_RESORT, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_WORRY_SEED] = + { + .effect = EFFECT_WORRY_SEED, + .power = 0, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_SUCKER_PUNCH] = + { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .power = 70, + .zMovePower = 140, + #else + .power = 80, + .zMovePower = 160, + #endif + .effect = EFFECT_SUCKER_PUNCH, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 1, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TOXIC_SPIKES] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_MAGIC_COAT_AFFECTED, + #else + .flags = 0, + #endif + .effect = EFFECT_TOXIC_SPIKES, + .power = 0, + .type = TYPE_POISON, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_OPPONENTS_FIELD, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_HEART_SWAP] = + { + .effect = EFFECT_HEART_SWAP, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_BOOST_CRITS, + }, + + [MOVE_AQUA_RING] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_SNATCH_AFFECTED, + #else + .flags = 0, + #endif + .effect = EFFECT_AQUA_RING, + .power = 0, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_MAGNET_RISE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_SNATCH_AFFECTED, + #else + .flags = 0, + #endif + .effect = EFFECT_MAGNET_RISE, + .power = 0, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, + }, + + [MOVE_FLARE_BLITZ] = + { + .effect = EFFECT_RECOIL_33_STATUS, + .power = 120, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_RECKLESS_BOOST | FLAG_THAW_USER, + .split = SPLIT_PHYSICAL, + .argument = STATUS1_BURN, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FORCE_PALM] = + { + .effect = EFFECT_PARALYZE_HIT, + .power = 60, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_AURA_SPHERE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 80, + .zMovePower = 160, + #else + .power = 90, + .zMovePower = 175, + #endif + .effect = EFFECT_HIT, + .type = TYPE_FIGHTING, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST | FLAG_BALLISTIC, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ROCK_POLISH] = + { + .effect = EFFECT_SPEED_UP_2, + .power = 0, + .type = TYPE_ROCK, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_POISON_JAB] = + { + .effect = EFFECT_POISON_HIT, + .power = 80, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DARK_PULSE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST, + #endif + .effect = EFFECT_FLINCH_HIT, + .power = 80, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_NIGHT_SLASH] = + { + .effect = EFFECT_HIT, + .power = 70, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_AQUA_TAIL] = + { + .effect = EFFECT_HIT, + .power = 90, + .type = TYPE_WATER, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SEED_BOMB] = + { + .effect = EFFECT_HIT, + .power = 80, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_AIR_SLASH] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .pp = 15, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .pp = 20, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .pp = 20, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif + .effect = EFFECT_FLINCH_HIT, + .power = 75, + .type = TYPE_FLYING, + .accuracy = 95, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_X_SCISSOR] = + { + .effect = EFFECT_HIT, + .power = 80, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BUG_BUZZ] = + { + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + .power = 90, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DRAGON_PULSE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 85, + .zMovePower = 160, + #else + .power = 90, + .zMovePower = 175, + #endif + .effect = EFFECT_HIT, + .type = TYPE_DRAGON, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DRAGON_RUSH] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif + .effect = EFFECT_FLINCH_HIT, + .power = 100, + .type = TYPE_DRAGON, + .accuracy = 75, + .pp = 10, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_POWER_GEM] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 80, + .zMovePower = 160, + #else + .power = 70, + .zMovePower = 140, + #endif + .effect = EFFECT_HIT, + .type = TYPE_ROCK, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DRAIN_PUNCH] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .power = 75, + .pp = 10, + .zMovePower = 140, + #else + .power = 60, + .pp = 5, + .zMovePower = 120, + #endif + .effect = EFFECT_ABSORB, + .type = TYPE_FIGHTING, + .accuracy = 100, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_VACUUM_WAVE] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 1, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FOCUS_BLAST] = + { + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + .power = 120, + .type = TYPE_FIGHTING, + .accuracy = 70, + .pp = 5, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, + .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ENERGY_BALL] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 90, + .zMovePower = 175, + #else + .power = 80, + .zMovePower = 160, + #endif + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BRAVE_BIRD] = + { + .effect = EFFECT_RECOIL_33, + .power = 120, + .type = TYPE_FLYING, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_EARTH_POWER] = + { + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + .power = 90, + .type = TYPE_GROUND, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SWITCHEROO] = + { + .effect = EFFECT_TRICK, + .power = 0, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, + }, + + [MOVE_GIGA_IMPACT] = + { + .effect = EFFECT_RECHARGE, + .power = 150, + .type = TYPE_NORMAL, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_NASTY_PLOT] = + { + .effect = EFFECT_SPECIAL_ATTACK_UP_2, + .power = 0, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_BULLET_PUNCH] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 1, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_AVALANCHE] = + { + .effect = EFFECT_REVENGE, + .power = 60, + .type = TYPE_ICE, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = -4, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ICE_SHARD] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_ICE, + .accuracy = 100, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 1, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SHADOW_CLAW] = + { + .effect = EFFECT_HIT, + .power = 70, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_THUNDER_FANG] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, + #endif + .effect = EFFECT_FLINCH_STATUS, + .power = 65, + .type = TYPE_ELECTRIC, + .accuracy = 95, + .pp = 15, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = STATUS1_PARALYSIS, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ICE_FANG] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, + #endif + .effect = EFFECT_FLINCH_STATUS, + .power = 65, + .type = TYPE_ICE, + .accuracy = 95, + .pp = 15, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = STATUS1_FREEZE, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FIRE_FANG] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, + #endif + .effect = EFFECT_FLINCH_STATUS, + .power = 65, + .type = TYPE_FIRE, + .accuracy = 95, + .pp = 15, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = STATUS1_BURN, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SHADOW_SNEAK] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 1, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MUD_BOMB] = + { + .effect = EFFECT_ACCURACY_DOWN_HIT, + .power = 65, + .type = TYPE_GROUND, + .accuracy = 85, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PSYCHO_CUT] = + { + .effect = EFFECT_HIT, + .power = 70, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ZEN_HEADBUTT] = + { + .effect = EFFECT_FLINCH_HIT, + .power = 80, + .type = TYPE_PSYCHIC, + .accuracy = 90, + .pp = 15, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MIRROR_SHOT] = + { + .effect = EFFECT_ACCURACY_DOWN_HIT, + .power = 65, + .type = TYPE_STEEL, + .accuracy = 85, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FLASH_CANNON] = + { + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + .power = 80, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ROCK_CLIMB] = + { + .effect = EFFECT_CONFUSE_HIT, + .power = 90, + .type = TYPE_NORMAL, + .accuracy = 85, + .pp = 20, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DEFOG] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif + .effect = EFFECT_DEFOG, + .power = 0, + .type = TYPE_FLYING, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, + }, + + [MOVE_TRICK_ROOM] = + { + .effect = EFFECT_TRICK_ROOM, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = -7, + .flags = FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, + }, + + [MOVE_DRACO_METEOR] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 130, + .zMovePower = 195, + #else + .power = 140, + .zMovePower = 200, + #endif + .effect = EFFECT_OVERHEAT, + .type = TYPE_DRAGON, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DISCHARGE] = + { + .effect = EFFECT_PARALYZE_HIT, + .power = 80, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LAVA_PLUME] = + { + .effect = EFFECT_BURN_HIT, + .power = 80, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LEAF_STORM] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 130, + .zMovePower = 195, + #else + .power = 140, + .zMovePower = 200, + #endif + .effect = EFFECT_OVERHEAT, + .type = TYPE_GRASS, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_POWER_WHIP] = + { + .effect = EFFECT_HIT, + .power = 120, + .type = TYPE_GRASS, + .accuracy = 85, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ROCK_WRECKER] = + { + .effect = EFFECT_RECHARGE, + .power = 150, + .type = TYPE_ROCK, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CROSS_POISON] = + { + .effect = EFFECT_POISON_HIT, + .power = 70, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_GUNK_SHOT] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .accuracy = 80, + #else + .accuracy = 70, + #endif + .effect = EFFECT_POISON_HIT, + .power = 120, + .type = TYPE_POISON, + .pp = 5, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_IRON_HEAD] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif + .effect = EFFECT_FLINCH_HIT, + .power = 80, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MAGNET_BOMB] = + { + .effect = EFFECT_HIT, + .power = 60, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STONE_EDGE] = + { + .effect = EFFECT_HIT, + .power = 100, + .type = TYPE_ROCK, + .accuracy = 80, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CAPTIVATE] = + { + .effect = EFFECT_CAPTIVATE, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_2, + }, + + [MOVE_STEALTH_ROCK] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_MAGIC_COAT_AFFECTED, + #else + .flags = 0, + #endif + .effect = EFFECT_STEALTH_ROCK, + .power = 0, + .type = TYPE_ROCK, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_OPPONENTS_FIELD, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_GRASS_KNOT] = + { + .effect = EFFECT_LOW_KICK, + .power = 1, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CHATTER] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 65, + .secondaryEffectChance = 100, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .power = 60, + .secondaryEffectChance = 10, + .flags = FLAG_PROTECT_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, + #else + .power = 60, + .secondaryEffectChance = 31, + .flags = FLAG_PROTECT_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, + #endif + .effect = EFFECT_CONFUSE_HIT, + .type = TYPE_FLYING, + .accuracy = 100, + .pp = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_JUDGMENT] = + { + .effect = EFFECT_CHANGE_TYPE_ON_ITEM, + .power = 100, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .argument = HOLD_EFFECT_PLATE, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BUG_BITE] = + { + .effect = EFFECT_BUG_BITE, + .power = 60, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CHARGE_BEAM] = + { + .effect = EFFECT_SP_ATTACK_UP_HIT, + .power = 50, + .type = TYPE_ELECTRIC, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 70, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_WOOD_HAMMER] = + { + .effect = EFFECT_RECOIL_25, + .power = 120, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_AQUA_JET] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 1, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ATTACK_ORDER] = + { + .effect = EFFECT_HIT, + .power = 90, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DEFEND_ORDER] = + { + .effect = EFFECT_COSMIC_POWER, + .power = 0, + .type = TYPE_BUG, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_HEAL_ORDER] = + { + .effect = EFFECT_RESTORE_HP, + .power = 0, + .type = TYPE_BUG, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_HEAD_SMASH] = + { + .effect = EFFECT_RECOIL_50, + .power = 150, + .type = TYPE_ROCK, + .accuracy = 80, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DOUBLE_HIT] = + { + .effect = EFFECT_DOUBLE_HIT, + .power = 35, + .type = TYPE_NORMAL, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ROAR_OF_TIME] = + { + .effect = EFFECT_RECHARGE, + .power = 150, + .type = TYPE_DRAGON, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SPACIAL_REND] = + { + .effect = EFFECT_HIT, + .power = 100, + .type = TYPE_DRAGON, + .accuracy = 95, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LUNAR_DANCE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flags = FLAG_DANCE | FLAG_SNATCH_AFFECTED, + #else + .flags = FLAG_DANCE, + #endif + .effect = EFFECT_HEALING_WISH, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CRUSH_GRIP] = + { + .effect = EFFECT_WRING_OUT, + .power = 1, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MAGMA_STORM] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 100, + .accuracy = 75, + .zMovePower = 180, + #elif B_UPDATED_MOVE_DATA == GEN_5 + .power = 120, + .accuracy = 75, + .zMovePower = 190, + #else + .power = 120, + .accuracy = 70, + .zMovePower = 190, + #endif + .effect = EFFECT_TRAP, + .type = TYPE_FIRE, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DARK_VOID] = + { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .accuracy = 50, + #else + .accuracy = 80, + #endif + .effect = EFFECT_SLEEP, + .power = 0, + .type = TYPE_DARK, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_SEED_FLARE] = + { + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2, + .power = 120, + .type = TYPE_GRASS, + .accuracy = 85, + .pp = 5, + .secondaryEffectChance = 40, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_OMINOUS_WIND] = + { + .effect = EFFECT_ALL_STATS_UP_HIT, + .power = 60, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SHADOW_FORCE] = + { + #if B_UPDATED_MOVE_DATA == GEN_6 + .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #endif + .effect = EFFECT_SEMI_INVULNERABLE, + .power = 120, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + .argument = MOVE_EFFECT_FEINT, + }, + + [MOVE_HONE_CLAWS] = + { + .effect = EFFECT_ATTACK_ACCURACY_UP, + .power = 0, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, + }, + + [MOVE_WIDE_GUARD] = + { + .effect = EFFECT_PROTECT, + .power = 0, + .type = TYPE_ROCK, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 3, + .flags = FLAG_PROTECTION_MOVE | FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .argument = TRUE, // Protects the whole side. + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_GUARD_SPLIT] = + { + .effect = EFFECT_GUARD_SPLIT, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_POWER_SPLIT] = + { + .effect = EFFECT_POWER_SPLIT, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_WONDER_ROOM] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .priority = 0, + #else + .priority = -7, + #endif + .effect = EFFECT_WONDER_ROOM, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .flags = FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + }, + + [MOVE_PSYSHOCK] = + { + .effect = EFFECT_PSYSHOCK, + .power = 80, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_VENOSHOCK] = + { + .effect = EFFECT_VENOSHOCK, + .power = 65, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_AUTOTOMIZE] = + { + .effect = EFFECT_AUTOTOMIZE, + .power = 0, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_RAGE_POWDER] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .priority = 2, + #else + .priority = 3, + #endif + .effect = EFFECT_FOLLOW_ME, + .power = 0, + .type = TYPE_BUG, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .flags = FLAG_POWDER, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_TELEKINESIS] = + { + .effect = EFFECT_TELEKINESIS, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_MAGIC_ROOM] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .priority = 0, + #else + .priority = -7, + #endif + .effect = EFFECT_MAGIC_ROOM, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .flags = FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + }, + + [MOVE_SMACK_DOWN] = + { + .effect = EFFECT_SMACK_DOWN, + .power = 50, + .type = TYPE_ROCK, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_IN_AIR, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STORM_THROW] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 60, + .zMovePower = 120, + #else + .power = 40, + .zMovePower = 100, + #endif + .effect = EFFECT_ALWAYS_CRIT, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FLAME_BURST] = + { + .effect = EFFECT_FLAME_BURST, + .power = 70, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SLUDGE_WAVE] = + { + .effect = EFFECT_POISON_HIT, + .power = 95, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_QUIVER_DANCE] = + { + .effect = EFFECT_QUIVER_DANCE, + .power = 0, + .type = TYPE_BUG, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_HEAVY_SLAM] = + { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #endif + .effect = EFFECT_HEAT_CRASH, + .power = 1, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SYNCHRONOISE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 120, + .pp = 10, + .zMovePower = 190, + #else + .power = 70, + .pp = 15, + .zMovePower = 140, + #endif + .effect = EFFECT_SYNCHRONOISE, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ELECTRO_BALL] = + { + .effect = EFFECT_ELECTRO_BALL, + .power = 1, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SOAK] = + { + .effect = EFFECT_SOAK, + .power = 0, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_FLAME_CHARGE] = + { + .effect = EFFECT_SPEED_UP_HIT, + .power = 50, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_COIL] = + { + .effect = EFFECT_COIL, + .power = 0, + .type = TYPE_POISON, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_LOW_SWEEP] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 65, + #else + .power = 60, + #endif + .effect = EFFECT_SPEED_DOWN_HIT, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ACID_SPRAY] = + { + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2, + .power = 40, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FOUL_PLAY] = + { + .effect = EFFECT_FOUL_PLAY, + .power = 95, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SIMPLE_BEAM] = + { + .effect = EFFECT_SIMPLE_BEAM, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_ENTRAINMENT] = + { + .effect = EFFECT_ENTRAINMENT, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + }, + + [MOVE_AFTER_YOU] = + { + .effect = EFFECT_AFTER_YOU, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_ROUND] = + { + .effect = EFFECT_ROUND, + .power = 60, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ECHOED_VOICE] = + { + .effect = EFFECT_ECHOED_VOICE, + .power = 40, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CHIP_AWAY] = + { + .effect = EFFECT_HIT, + .power = 70, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CLEAR_SMOG] = + { + .effect = EFFECT_CLEAR_SMOG, + .power = 50, + .type = TYPE_POISON, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STORED_POWER] = + { + .effect = EFFECT_STORED_POWER, + .power = 20, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_QUICK_GUARD] = + { + .effect = EFFECT_PROTECT, + .power = 0, + .type = TYPE_FIGHTING, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 3, + .flags = FLAG_PROTECTION_MOVE | FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .argument = TRUE, // Protects the whole side. + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_ALLY_SWITCH] = + { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .priority = 2, + #else + .priority = 1, + #endif + .effect = EFFECT_ALLY_SWITCH, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, + }, + + [MOVE_SCALD] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .effect = EFFECT_SCALD, + #else + .effect = EFFECT_BURN_HIT, + #endif + .power = 80, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SHELL_SMASH] = + { + .effect = EFFECT_SHELL_SMASH, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_HEAL_PULSE] = + { + .effect = EFFECT_HEAL_PULSE, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_HEX] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 65, + #else + .power = 50, + #endif + .effect = EFFECT_HEX, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SKY_DROP] = + { + .effect = EFFECT_SKY_DROP, + .power = 60, + .type = TYPE_FLYING, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SHIFT_GEAR] = + { + .effect = EFFECT_SHIFT_GEAR, + .power = 0, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_CIRCLE_THROW] = + { + .effect = EFFECT_HIT_SWITCH_TARGET, + .power = 60, + .type = TYPE_FIGHTING, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = -6, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_INCINERATE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 60, + .zMovePower = 120, + #else + .power = 30, + .zMovePower = 100, + #endif + .effect = EFFECT_INCINERATE, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_QUASH] = + { + .effect = EFFECT_QUASH, + .power = 0, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_ACROBATICS] = + { + .effect = EFFECT_ACROBATICS, + .power = 55, + .type = TYPE_FLYING, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_REFLECT_TYPE] = + { + .effect = EFFECT_REFLECT_TYPE, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_RETALIATE] = + { + .effect = EFFECT_RETALIATE, + .power = 70, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FINAL_GAMBIT] = + { + .effect = EFFECT_FINAL_GAMBIT, + .power = 1, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BESTOW] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flags = FLAG_MIRROR_MOVE_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + #endif + .effect = EFFECT_BESTOW, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, + }, + + [MOVE_INFERNO] = + { + .effect = EFFECT_BURN_HIT, + .power = 100, + .type = TYPE_FIRE, + .accuracy = 50, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_WATER_PLEDGE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 80, + .zMovePower = 160, + #else + .power = 50, + .zMovePower = 100, + #endif + .effect = EFFECT_PLEDGE, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FIRE_PLEDGE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 80, + .zMovePower = 160, + #else + .power = 50, + .zMovePower = 100, + #endif + .effect = EFFECT_PLEDGE, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_GRASS_PLEDGE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 80, + .zMovePower = 160, + #else + .power = 50, + .zMovePower = 100, + #endif + .effect = EFFECT_PLEDGE, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_VOLT_SWITCH] = + { + .effect = EFFECT_HIT_ESCAPE, + .power = 70, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STRUGGLE_BUG] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 50, + #else + .power = 30, + #endif + .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BULLDOZE] = + { + .effect = EFFECT_BULLDOZE, + .power = 60, + .type = TYPE_GROUND, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FROST_BREATH] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 60, + .zMovePower = 120, + #else + .power = 40, + .zMovePower = 100, + #endif + .effect = EFFECT_ALWAYS_CRIT, + .type = TYPE_ICE, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DRAGON_TAIL] = + { + .effect = EFFECT_HIT_SWITCH_TARGET, + .power = 60, + .type = TYPE_DRAGON, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = -6, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_WORK_UP] = + { + .effect = EFFECT_ATTACK_SPATK_UP, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, + }, + + [MOVE_ELECTROWEB] = + { + .effect = EFFECT_SPEED_DOWN_HIT, + .power = 55, + .type = TYPE_ELECTRIC, + .accuracy = 95, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_WILD_CHARGE] = + { + .effect = EFFECT_RECOIL_25, + .power = 90, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DRILL_RUN] = + { + .effect = EFFECT_HIT, + .power = 80, + .type = TYPE_GROUND, + .accuracy = 95, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DUAL_CHOP] = + { + .effect = EFFECT_DOUBLE_HIT, + .power = 40, + .type = TYPE_DRAGON, + .accuracy = 90, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HEART_STAMP] = + { + .effect = EFFECT_FLINCH_HIT, + .power = 60, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 25, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HORN_LEECH] = + { + .effect = EFFECT_ABSORB, + .power = 75, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SACRED_SWORD] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .pp = 15, + #else + .pp = 20, + #endif + .effect = EFFECT_HIT, + .power = 90, + .type = TYPE_FIGHTING, + .accuracy = 100, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_RAZOR_SHELL] = + { + .effect = EFFECT_DEFENSE_DOWN_HIT, + .power = 75, + .type = TYPE_WATER, + .accuracy = 95, + .pp = 10, + .secondaryEffectChance = 50, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HEAT_CRASH] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #endif + .effect = EFFECT_HEAT_CRASH, + .power = 1, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LEAF_TORNADO] = + { + .effect = EFFECT_ACCURACY_DOWN_HIT, + .power = 65, + .type = TYPE_GRASS, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 50, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STEAMROLLER] = + { + .effect = EFFECT_FLINCH_HIT, + .power = 65, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_COTTON_GUARD] = + { + .effect = EFFECT_DEFENSE_UP_3, + .power = 0, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_NIGHT_DAZE] = + { + .effect = EFFECT_ACCURACY_DOWN_HIT, + .power = 85, + .type = TYPE_DARK, + .accuracy = 95, + .pp = 10, + .secondaryEffectChance = 40, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PSYSTRIKE] = + { + .effect = EFFECT_PSYSHOCK, + .power = 100, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TAIL_SLAP] = + { + .effect = EFFECT_MULTI_HIT, + .power = 25, + .type = TYPE_NORMAL, + .accuracy = 85, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HURRICANE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 110, + .zMovePower = 185, + #else + .power = 120, + .zMovePower = 190, + #endif + .effect = EFFECT_HURRICANE, + .type = TYPE_FLYING, + .accuracy = 70, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_IN_AIR, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HEAD_CHARGE] = + { + .effect = EFFECT_RECOIL_25, + .power = 120, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_GEAR_GRIND] = + { + .effect = EFFECT_DOUBLE_HIT, + .power = 50, + .type = TYPE_STEEL, + .accuracy = 85, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SEARING_SHOT] = + { + .effect = EFFECT_BURN_HIT, + .power = 100, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TECHNO_BLAST] = + { + #if B_UPDATED_MOVE_DATA >= GEN_6 + .power = 120, + .zMovePower = 190, + #else + .power = 85, + .zMovePower = 160, + #endif + .effect = EFFECT_CHANGE_TYPE_ON_ITEM, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .argument = HOLD_EFFECT_DRIVE, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_RELIC_SONG] = + { + .effect = EFFECT_RELIC_SONG, + .power = 75, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + .argument = STATUS1_SLEEP, + }, + + [MOVE_SECRET_SWORD] = + { + .effect = EFFECT_PSYSHOCK, + .power = 85, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_GLACIATE] = + { + .effect = EFFECT_SPEED_DOWN_HIT, + .power = 65, + .type = TYPE_ICE, + .accuracy = 95, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BOLT_STRIKE] = + { + .effect = EFFECT_PARALYZE_HIT, + .power = 130, + .type = TYPE_ELECTRIC, + .accuracy = 85, + .pp = 5, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BLUE_FLARE] = + { + .effect = EFFECT_BURN_HIT, + .power = 130, + .type = TYPE_FIRE, + .accuracy = 85, + .pp = 5, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FIERY_DANCE] = + { + .effect = EFFECT_SP_ATTACK_UP_HIT, + .power = 80, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 50, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FREEZE_SHOCK] = + { + .effect = EFFECT_TWO_TURNS_ATTACK, + .power = 140, + .type = TYPE_ICE, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .argument = MOVE_EFFECT_PARALYSIS, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ICE_BURN] = + { + .effect = EFFECT_TWO_TURNS_ATTACK, + .power = 140, + .type = TYPE_ICE, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .argument = MOVE_EFFECT_BURN, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SNARL] = + { + .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, + .power = 55, + .type = TYPE_DARK, + .accuracy = 95, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ICICLE_CRASH] = + { + .effect = EFFECT_FLINCH_HIT, + .power = 85, + .type = TYPE_ICE, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_V_CREATE] = + { + .effect = EFFECT_V_CREATE, + .power = 180, + .type = TYPE_FIRE, + .accuracy = 95, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 220, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FUSION_FLARE] = + { + .effect = EFFECT_FUSION_COMBO, + .power = 100, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FUSION_BOLT] = + { + .effect = EFFECT_FUSION_COMBO, + .power = 100, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FLYING_PRESS] = + { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .power = 100, + #else + .power = 80, + #endif + .effect = EFFECT_TWO_TYPED_MOVE, + .type = TYPE_FIGHTING, + .accuracy = 95, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE, + .split = SPLIT_PHYSICAL, + .argument = TYPE_FLYING, + .zMovePower = 170, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MAT_BLOCK] = + { + .effect = EFFECT_MAT_BLOCK, + .power = 0, + .type = TYPE_FIGHTING, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .argument = TRUE, // Protects the whole side. + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_BELCH] = + { + .effect = EFFECT_BELCH, + .power = 120, + .type = TYPE_POISON, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ROTOTILLER] = + { + .effect = EFFECT_ROTOTILLER, + .power = 0, + .type = TYPE_GROUND, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, + }, + + [MOVE_STICKY_WEB] = + { + .effect = EFFECT_STICKY_WEB, + .power = 0, + .type = TYPE_BUG, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_OPPONENTS_FIELD, + .priority = 0, + .flags = FLAG_MAGIC_COAT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_FELL_STINGER] = + { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .power = 50, + #else + .power = 30, + #endif + .effect = EFFECT_FELL_STINGER, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 25, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PHANTOM_FORCE] = + { + #if B_UPDATED_MOVE_DATA == GEN_6 + .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #endif + .effect = EFFECT_SEMI_INVULNERABLE, + .power = 90, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MOVE_EFFECT_FEINT, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TRICK_OR_TREAT] = + { + .effect = EFFECT_THIRD_TYPE, + .power = 0, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .argument = TYPE_GHOST, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + }, + + [MOVE_NOBLE_ROAR] = + { + .effect = EFFECT_NOBLE_ROAR, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_ION_DELUGE] = + { + .effect = EFFECT_ION_DELUGE, + .power = 0, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 25, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 1, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_PARABOLIC_CHARGE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .power = 65, + .zMovePower = 120, + #else + .power = 50, + .zMovePower = 100, + #endif + .effect = EFFECT_ABSORB, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FORESTS_CURSE] = + { + .effect = EFFECT_THIRD_TYPE, + .power = 0, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .argument = TYPE_GRASS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + }, + + [MOVE_PETAL_BLIZZARD] = + { + .effect = EFFECT_HIT, + .power = 90, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FREEZE_DRY] = + { + .effect = EFFECT_FREEZE_DRY, + .power = 70, + .type = TYPE_ICE, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DISARMING_VOICE] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PARTING_SHOT] = + { + .effect = EFFECT_PARTING_SHOT, + .power = 0, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, + }, + + [MOVE_TOPSY_TURVY] = + { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .accuracy = 0, + #else + .accuracy = 100, + #endif + .effect = EFFECT_TOPSY_TURVY, + .power = 0, + .type = TYPE_DARK, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, + }, + + [MOVE_DRAINING_KISS] = + { + .effect = EFFECT_ABSORB, + .power = 50, + .type = TYPE_FAIRY, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .argument = 75, // restores 75% HP instead of 50% HP + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + + }, + + [MOVE_CRAFTY_SHIELD] = + { + .effect = EFFECT_PROTECT, + .power = 0, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 3, + .flags = 0, + .split = SPLIT_STATUS, + .argument = TRUE, // Protects the whole side. + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + }, + + [MOVE_FLOWER_SHIELD] = + { + .effect = EFFECT_FLOWER_SHIELD, + .power = 0, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_GRASSY_TERRAIN] = + { + .effect = EFFECT_GRASSY_TERRAIN, + .power = 0, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_MISTY_TERRAIN] = + { + .effect = EFFECT_MISTY_TERRAIN, + .power = 0, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + }, + + [MOVE_ELECTRIFY] = + { + .effect = EFFECT_ELECTRIFY, + .power = 0, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_PLAY_ROUGH] = + { + .effect = EFFECT_ATTACK_DOWN_HIT, + .power = 90, + .type = TYPE_FAIRY, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FAIRY_WIND] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_FAIRY, + .accuracy = 100, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MOONBLAST] = + { + .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, + .power = 95, + .type = TYPE_FAIRY, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BOOMBURST] = + { + .effect = EFFECT_HIT, + .power = 140, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FAIRY_LOCK] = + { + .effect = EFFECT_FAIRY_LOCK, + .power = 0, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_KINGS_SHIELD] = + { + .effect = EFFECT_PROTECT, + .power = 0, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 4, + .flags = FLAG_PROTECTION_MOVE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_PLAY_NICE] = + { + .effect = EFFECT_ATTACK_DOWN, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_CONFIDE] = + { + .effect = EFFECT_SPECIAL_ATTACK_DOWN, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + }, + + [MOVE_DIAMOND_STORM] = + { + #if B_UPDATED_MOVE_DATA >= GEN_4 + .effect = EFFECT_DEFENSE_UP2_HIT, + #else + .effect = EFFECT_DEFENSE_UP_HIT, + #endif + .power = 100, + .type = TYPE_ROCK, + .accuracy = 95, + .pp = 5, + .secondaryEffectChance = 50, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STEAM_ERUPTION] = + { + .effect = EFFECT_SCALD, + .power = 110, + .type = TYPE_WATER, + .accuracy = 95, + .pp = 5, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, + .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HYPERSPACE_HOLE] = + { + .effect = EFFECT_FEINT, + .power = 80, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_WATER_SHURIKEN] = + { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .split = SPLIT_SPECIAL, + #else + .split = SPLIT_PHYSICAL, + #endif + .effect = EFFECT_MULTI_HIT, + .power = 15, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 1, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + + }, + + [MOVE_MYSTICAL_FIRE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_7 + .power = 75, + .zMovePower = 140, + #else + .power = 65, + .zMovePower = 120, + #endif + .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SPIKY_SHIELD] = + { + .effect = EFFECT_PROTECT, + .power = 0, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 4, + .flags = FLAG_PROTECTION_MOVE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_AROMATIC_MIST] = + { + .effect = EFFECT_AROMATIC_MIST, + .power = 0, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALLY, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_2, + }, + + [MOVE_EERIE_IMPULSE] = + { + .effect = EFFECT_SPECIAL_ATTACK_DOWN_2, + .power = 0, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + }, + + [MOVE_VENOM_DRENCH] = + { + .effect = EFFECT_VENOM_DRENCH, + .power = 0, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_POWDER] = + { + .effect = EFFECT_POWDER, + .power = 0, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 1, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_2, + }, + + [MOVE_GEOMANCY] = + { + .effect = EFFECT_GEOMANCY, + .power = 0, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + }, + + [MOVE_MAGNETIC_FLUX] = + { + .effect = EFFECT_MAGNETIC_FLUX, + .power = 0, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + }, + + [MOVE_HAPPY_HOUR] = + { + .effect = EFFECT_DO_NOTHING, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + }, + + [MOVE_ELECTRIC_TERRAIN] = + { + .effect = EFFECT_ELECTRIC_TERRAIN, + .power = 0, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_DAZZLING_GLEAM] = + { + .effect = EFFECT_HIT, + .power = 80, + .type = TYPE_FAIRY, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CELEBRATE] = + { + .effect = EFFECT_DO_NOTHING, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 40, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + }, + + [MOVE_HOLD_HANDS] = + { + .effect = EFFECT_DO_NOTHING, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 40, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALLY, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + }, + + [MOVE_BABY_DOLL_EYES] = + { + .effect = EFFECT_ATTACK_DOWN, + .power = 0, + .type = TYPE_FAIRY, + .accuracy = 100, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 1, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_NUZZLE] = + { + .effect = EFFECT_PARALYZE_HIT, + .power = 20, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HOLD_BACK] = + { + .effect = EFFECT_FALSE_SWIPE, + .power = 40, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 40, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_INFESTATION] = + { + .effect = EFFECT_TRAP, + .power = 20, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_POWER_UP_PUNCH] = + { + .effect = EFFECT_ATTACK_UP_HIT, + .power = 40, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_OBLIVION_WING] = + { + .effect = EFFECT_ABSORB, + .power = 80, + .type = TYPE_FLYING, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .argument = 75, // restores 75% HP instead of 50% HP + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_THOUSAND_ARROWS] = + { + .effect = EFFECT_SMACK_DOWN, + .power = 90, + .type = TYPE_GROUND, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_IN_AIR | FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_THOUSAND_WAVES] = + { + .effect = EFFECT_HIT_PREVENT_ESCAPE, + .power = 90, + .type = TYPE_GROUND, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LANDS_WRATH] = + { + .effect = EFFECT_HIT, + .power = 90, + .type = TYPE_GROUND, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LIGHT_OF_RUIN] = + { + .effect = EFFECT_RECOIL_50, + .power = 140, + .type = TYPE_FAIRY, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ORIGIN_PULSE] = + { + .effect = EFFECT_HIT, + .power = 110, + .type = TYPE_WATER, + .accuracy = 85, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PRECIPICE_BLADES] = + { + .effect = EFFECT_HIT, + .power = 120, + .type = TYPE_GROUND, + .accuracy = 85, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DRAGON_ASCENT] = + { + .effect = EFFECT_CLOSE_COMBAT, + .power = 120, + .type = TYPE_FLYING, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HYPERSPACE_FURY] = + { + .effect = EFFECT_HYPERSPACE_FURY, + .power = 100, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIT_IN_SUBSTITUTE, + .split = SPLIT_PHYSICAL, + }, + + [MOVE_SHORE_UP] = + { + .effect = EFFECT_SHORE_UP, + .power = 0, + .type = TYPE_GROUND, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_FIRST_IMPRESSION] = + { + .effect = EFFECT_FAKE_OUT, + .power = 90, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 2, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BANEFUL_BUNKER] = + { + .effect = EFFECT_PROTECT, + .power = 0, + .type = TYPE_POISON, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 4, + .flags = FLAG_PROTECTION_MOVE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_SPIRIT_SHACKLE] = + { + .effect = EFFECT_HIT_PREVENT_ESCAPE, + .power = 80, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DARKEST_LARIAT] = + { + .effect = EFFECT_HIT, + .power = 85, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SPARKLING_ARIA] = + { + .effect = EFFECT_SPARKLING_ARIA, + .power = 90, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .argument = STATUS1_BURN, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ICE_HAMMER] = + { + .effect = EFFECT_HAMMER_ARM, + .power = 100, + .type = TYPE_ICE, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FLORAL_HEALING] = + { + .effect = EFFECT_HEAL_PULSE, + .power = 0, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + }, + + [MOVE_HIGH_HORSEPOWER] = + { + .effect = EFFECT_HIT, + .power = 95, + .type = TYPE_GROUND, + .accuracy = 95, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STRENGTH_SAP] = + { + .effect = EFFECT_STRENGTH_SAP, + .power = 0, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_SOLAR_BLADE] = + { + .effect = EFFECT_SOLAR_BEAM, + .power = 125, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LEAFAGE] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 40, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SPOTLIGHT] = + { + .effect = EFFECT_FOLLOW_ME, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 3, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + }, + + [MOVE_TOXIC_THREAD] = + { + .effect = EFFECT_TOXIC_THREAD, + .power = 0, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_LASER_FOCUS] = + { + .effect = EFFECT_LASER_FOCUS, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 30, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, + }, + + [MOVE_GEAR_UP] = + { + .effect = EFFECT_GEAR_UP, + .power = 0, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_THROAT_CHOP] = + { + .effect = EFFECT_THROAT_CHOP, + .power = 80, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_POLLEN_PUFF] = + { + .effect = EFFECT_HIT_ENEMY_HEAL_ALLY, + .power = 90, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ANCHOR_SHOT] = + { + .effect = EFFECT_HIT_PREVENT_ESCAPE, + .power = 80, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PSYCHIC_TERRAIN] = + { + .effect = EFFECT_PSYCHIC_TERRAIN, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_LUNGE] = + { + .effect = EFFECT_ATTACK_DOWN_HIT, + .power = 80, + .type = TYPE_BUG, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FIRE_LASH] = + { + .effect = EFFECT_DEFENSE_DOWN_HIT, + .power = 80, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_POWER_TRIP] = + { + .effect = EFFECT_STORED_POWER, + .power = 20, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BURN_UP] = + { + .effect = EFFECT_BURN_UP, + .power = 130, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, + .split = SPLIT_SPECIAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SPEED_SWAP] = + { + .effect = EFFECT_SPEED_SWAP, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_SMART_STRIKE] = + { + .effect = EFFECT_HIT, + .power = 70, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PURIFY] = + { + .effect = EFFECT_PURIFY, + .power = 0, + .type = TYPE_POISON, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + }, + + [MOVE_REVELATION_DANCE] = + { + .effect = EFFECT_REVELATION_DANCE, + .power = 90, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CORE_ENFORCER] = + { + .effect = EFFECT_CORE_ENFORCER, + .power = 100, + .type = TYPE_DRAGON, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TROP_KICK] = + { + .effect = EFFECT_ATTACK_DOWN_HIT, + .power = 70, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_INSTRUCT] = + { + .effect = EFFECT_INSTRUCT, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, + }, + + [MOVE_BEAK_BLAST] = + { + .effect = EFFECT_BEAK_BLAST, + .power = 100, + .type = TYPE_FLYING, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = -3, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CLANGING_SCALES] = + { + .effect = EFFECT_ATTACKER_DEFENSE_DOWN_HIT, + .power = 110, + .type = TYPE_DRAGON, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, + .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DRAGON_HAMMER] = + { + .effect = EFFECT_HIT, + .power = 90, + .type = TYPE_DRAGON, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BRUTAL_SWING] = + { + .effect = EFFECT_HIT, + .power = 60, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_AURORA_VEIL] = + { + .effect = EFFECT_AURORA_VEIL, + .power = 0, + .type = TYPE_ICE, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + }, + + [MOVE_SHELL_TRAP] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP, + .power = 150, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = -3, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FLEUR_CANNON] = + { + .effect = EFFECT_OVERHEAT, + .power = 130, + .type = TYPE_FAIRY, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PSYCHIC_FANGS] = + { + .effect = EFFECT_BRICK_BREAK, + .power = 85, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STOMPING_TANTRUM] = + { + .effect = EFFECT_STOMPING_TANTRUM, + .power = 75, + .type = TYPE_GROUND, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SHADOW_BONE] = + { + .effect = EFFECT_DEFENSE_DOWN_HIT, + .power = 85, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ACCELEROCK] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_ROCK, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 1, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LIQUIDATION] = + { + .effect = EFFECT_DEFENSE_DOWN_HIT, + .power = 85, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PRISMATIC_LASER] = + { + .effect = EFFECT_RECHARGE, + .power = 160, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SPECTRAL_THIEF] = + { + .effect = EFFECT_SPECTRAL_THIEF, + .power = 90, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SUNSTEEL_STRIKE] = + { + .effect = EFFECT_HIT, + .power = 100, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MOONGEIST_BEAM] = + { + .effect = EFFECT_HIT, + .power = 100, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TEARFUL_LOOK] = + { + .effect = EFFECT_NOBLE_ROAR, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, + }, + + [MOVE_ZING_ZAP] = + { + .effect = EFFECT_FLINCH_HIT, + .power = 80, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_NATURES_MADNESS] = + { + .effect = EFFECT_SUPER_FANG, + .power = 1, + .type = TYPE_FAIRY, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MULTI_ATTACK] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 120, + .zMovePower = 190, + #else + .power = 90, + .zMovePower = 175, + #endif + .effect = EFFECT_CHANGE_TYPE_ON_ITEM, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .argument = HOLD_EFFECT_MEMORY, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MIND_BLOWN] = + { + .effect = EFFECT_MIND_BLOWN, + .power = 150, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PLASMA_FISTS] = + { + .effect = EFFECT_PLASMA_FISTS, + .power = 100, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PHOTON_GEYSER] = + { + .effect = EFFECT_PHOTON_GEYSER, + .power = 100, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ZIPPY_ZAP] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 80, + .effect = EFFECT_EVASION_UP_HIT, + .pp = 10, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .zMovePower = 160, + #else + .effect = EFFECT_ALWAYS_CRIT, + .power = 50, + .pp = 15, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 100, + #endif + .type = TYPE_ELECTRIC, + .accuracy = 100, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 2, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SPLISHY_SPLASH] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif + .effect = EFFECT_PARALYZE_HIT, + .power = 90, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FLOATY_FALL] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, + #endif + .effect = EFFECT_FLINCH_HIT, + .power = 90, + .type = TYPE_FLYING, + .accuracy = 95, + .pp = 15, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PIKA_PAPOW] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #else + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #endif + .effect = EFFECT_RETURN, + .power = 1, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BOUNCY_BUBBLE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 60, + .pp = 20, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .argument = 100, // restores 100% HP instead of 50% HP + .zMovePower = 120, + #else + .power = 90, + .pp = 15, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 175, + #endif + .effect = EFFECT_ABSORB, + .type = TYPE_WATER, + .accuracy = 100, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BUZZY_BUZZ] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 60, + .pp = 20, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 120, + #else + .power = 90, + .pp = 15, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 175, + #endif + .effect = EFFECT_PARALYZE_HIT, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SIZZLY_SLIDE] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 60, + .pp = 20, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, + .zMovePower = 120, + #else + .power = 90, + .pp = 15, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, + .zMovePower = 175, + #endif + .effect = EFFECT_BURN_HIT, + .type = TYPE_FIRE, + .accuracy = 100, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_GLITZY_GLOW] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 80, + .accuracy = 95, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 160, + #else + .power = 90, + .accuracy = 100, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 175, + #endif + .effect = EFFECT_GLITZY_GLOW, + .type = TYPE_PSYCHIC, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BADDY_BAD] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 80, + .accuracy = 95, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 160, + #else + .power = 90, + .accuracy = 100, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 175, + #endif + .effect = EFFECT_BADDY_BAD, + .type = TYPE_DARK, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SAPPY_SEED] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 100, + .accuracy = 90, + .pp = 10, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 180, + #else + .power = 90, + .accuracy = 100, + .pp = 15, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 175, + #endif + .effect = EFFECT_SAPPY_SEED, + .type = TYPE_GRASS, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FREEZY_FROST] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 100, + .accuracy = 90, + .pp = 10, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 180, + #else + .power = 90, + .accuracy = 100, + .pp = 15, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 175, + #endif + .effect = EFFECT_FREEZY_FROST, + .type = TYPE_ICE, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SPARKLY_SWIRL] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .power = 120, + .accuracy = 85, + .pp = 5, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 190, + #else + .power = 90, + .accuracy = 100, + .pp = 15, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 175, + #endif + .effect = EFFECT_SPARKLY_SWIRL, + .type = TYPE_FAIRY, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_VEEVEE_VOLLEY] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + #endif + .effect = EFFECT_RETURN, + .power = 1, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DOUBLE_IRON_BASH] = + { + #if B_UPDATED_MOVE_DATA >= GEN_8 + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES, + #else + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_MINIMIZE | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES, + #endif + .effect = EFFECT_DOUBLE_IRON_BASH, + .power = 60, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DYNAMAX_CANNON] = + { + .effect = EFFECT_DYNAMAX_DOUBLE_DMG, + .power = 100, + .type = TYPE_DRAGON, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SNIPE_SHOT] = + { + .effect = EFFECT_SNIPE_SHOT, + .power = 80, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_JAW_LOCK] = + { + .effect = EFFECT_JAW_LOCK, + .power = 80, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STUFF_CHEEKS] = + { + .effect = EFFECT_STUFF_CHEEKS, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_NO_RETREAT] = + { + .effect = EFFECT_NO_RETREAT, + .power = 0, + .type = TYPE_FIGHTING, + .accuracy = 0, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TAR_SHOT] = + { + .effect = EFFECT_TAR_SHOT, + .power = 0, + .type = TYPE_ROCK, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MAGIC_POWDER] = + { + .effect = EFFECT_SOAK, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, + .split = SPLIT_STATUS, + .argument = TYPE_PSYCHIC, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DRAGON_DARTS] = + { + .effect = EFFECT_MULTI_HIT, //TODO + .power = 50, + .type = TYPE_DRAGON, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TEATIME] = + { + .effect = EFFECT_PLACEHOLDER, //TODO + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_OCTOLOCK] = + { + .effect = EFFECT_OCTOLOCK, + .power = 0, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BOLT_BEAK] = + { + .effect = EFFECT_BOLT_BEAK, + .power = 85, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FISHIOUS_REND] = + { + .effect = EFFECT_BOLT_BEAK, + .power = 85, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_COURT_CHANGE] = + { + .effect = EFFECT_COURT_CHANGE, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CLANGOROUS_SOUL] = + { + .effect = EFFECT_CLANGOROUS_SOUL, + .power = 0, + .type = TYPE_DRAGON, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED | FLAG_SOUND, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BODY_PRESS] = + { + .effect = EFFECT_BODY_PRESS, + .power = 80, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DECORATE] = + { + .effect = EFFECT_DECORATE, + .power = 0, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DRUM_BEATING] = + { + .effect = EFFECT_SPEED_DOWN_HIT, + .power = 80, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SNAP_TRAP] = + { + .effect = EFFECT_TRAP, + .power = 35, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PYRO_BALL] = + { + .effect = EFFECT_BURN_HIT, + .power = 120, + .type = TYPE_FIRE, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BEHEMOTH_BLADE] = + { + .effect = EFFECT_DYNAMAX_DOUBLE_DMG, + .power = 100, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BEHEMOTH_BASH] = + { + .effect = EFFECT_DYNAMAX_DOUBLE_DMG, + .power = 100, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_AURA_WHEEL] = + { + .effect = EFFECT_AURA_WHEEL, + .power = 110, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BREAKING_SWIPE] = + { + .effect = EFFECT_ATTACK_DOWN_HIT, + .power = 60, + .type = TYPE_DRAGON, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BRANCH_POKE] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 40, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_OVERDRIVE] = + { + .effect = EFFECT_HIT, + .power = 80, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_APPLE_ACID] = + { + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + .power = 80, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_GRAV_APPLE] = + { + .effect = EFFECT_GRAV_APPLE, + .power = 80, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SPIRIT_BREAK] = + { + .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, + .power = 75, + .type = TYPE_FAIRY, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STRANGE_STEAM] = + { + .effect = EFFECT_CONFUSE_HIT, + .power = 90, + .type = TYPE_FAIRY, + .accuracy = 95, + .pp = 10, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LIFE_DEW] = + { + .effect = EFFECT_JUNGLE_HEALING, + .power = 0, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_OBSTRUCT] = + { + .effect = EFFECT_PROTECT, + .power = 0, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 4, + .flags = FLAG_PROTECTION_MOVE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FALSE_SURRENDER] = + { + .effect = EFFECT_HIT, + .power = 80, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_METEOR_ASSAULT] = + { + .effect = EFFECT_RECHARGE, + .power = 150, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ETERNABEAM] = + { + .effect = EFFECT_RECHARGE, + .power = 160, + .type = TYPE_DRAGON, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STEEL_BEAM] = + { + .effect = EFFECT_STEEL_BEAM, + .power = 140, + .type = TYPE_STEEL, + .accuracy = 95, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_EXPANDING_FORCE] = + { + .effect = EFFECT_EXPANDING_FORCE, + .power = 80, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STEEL_ROLLER] = + { + .effect = EFFECT_REMOVE_TERRAIN, + .power = 130, + .type = TYPE_STEEL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SCALE_SHOT] = + { + .effect = EFFECT_SCALE_SHOT, + .power = 25, + .type = TYPE_DRAGON, + .accuracy = 90, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_METEOR_BEAM] = + { + .effect = EFFECT_METEOR_BEAM, + .power = 120, + .type = TYPE_ROCK, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SHELL_SIDE_ARM] = + { + .effect = EFFECT_SHELL_SIDE_ARM, + .power = 90, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MISTY_EXPLOSION] = + { + .effect = EFFECT_EXPLOSION, + .power = 100, + .type = TYPE_FAIRY, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_GRASSY_GLIDE] = + { + .effect = EFFECT_GRASSY_GLIDE, + .power = 70, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_RISING_VOLTAGE] = + { + .effect = EFFECT_RISING_VOLTAGE, + .power = 70, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TERRAIN_PULSE] = + { + .effect = EFFECT_TERRAIN_PULSE, + .power = 50, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SKITTER_SMACK] = + { + .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, + .power = 70, + .type = TYPE_BUG, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BURNING_JEALOUSY] = + { + .effect = EFFECT_BURN_HIT, + .power = 70, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LASH_OUT] = + { + .effect = EFFECT_LASH_OUT, + .power = 75, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_POLTERGEIST] = + { + .effect = EFFECT_POLTERGEIST, + .power = 110, + .type = TYPE_GHOST, + .accuracy = 90, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CORROSIVE_GAS] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_CORROSIVE_GAS, TODO + .power = 0, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 40, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_FOES_AND_ALLY, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_COACHING] = + { + .effect = EFFECT_COACHING, + .power = 0, + .type = TYPE_FIGHTING, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALLY, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FLIP_TURN] = + { + .effect = EFFECT_HIT_ESCAPE, + .power = 60, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 20, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TRIPLE_AXEL] = + { + .effect = EFFECT_TRIPLE_KICK, + .power = 20, + .type = TYPE_ICE, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DUAL_WINGBEAT] = + { + .effect = EFFECT_DOUBLE_HIT, + .power = 40, + .type = TYPE_FLYING, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SCORCHING_SANDS] = + { + .effect = EFFECT_SCALD, + .power = 70, + .type = TYPE_GROUND, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_JUNGLE_HEALING] = + { + .effect = EFFECT_JUNGLE_HEALING, + .power = 0, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_WICKED_BLOW] = + { + .effect = EFFECT_ALWAYS_CRIT, + .power = 80, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SURGING_STRIKES] = + { + .effect = EFFECT_TRIPLE_HIT, + .power = 25, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_THUNDER_CAGE] = + { + .effect = EFFECT_TRAP, + .power = 80, + .type = TYPE_ELECTRIC, + .accuracy = 90, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DRAGON_ENERGY] = + { + .effect = EFFECT_ERUPTION, + .power = 150, + .type = TYPE_DRAGON, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FREEZING_GLARE] = + { + .power = 90, + .effect = EFFECT_FREEZE_HIT, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FIERY_WRATH] = + { + .effect = EFFECT_FLINCH_HIT, + .power = 90, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_THUNDEROUS_KICK] = + { + .effect = EFFECT_DEFENSE_DOWN_HIT, + .power = 90, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_GLACIAL_LANCE] = + { + .effect = EFFECT_HIT, + .power = 130, + .type = TYPE_ICE, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ASTRAL_BARRAGE] = + { + .effect = EFFECT_HIT, + .power = 120, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_EERIE_SPELL] = + { + .effect = EFFECT_EERIE_SPELL, + .power = 80, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DIRE_CLAW] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_DIRE_CLAW, + .power = 60, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_PSYSHIELD_BASH] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_PSYSHIELD_BASH, + .power = 70, + .type = TYPE_PSYCHIC, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 50, // TODO: Adjust this value. Currently it's set to Fiery Dance's. + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_POWER_SHIFT] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_POWER_SHIFT, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_STONE_AXE] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_STONE_AXE, + .power = 65, + .type = TYPE_ROCK, + .accuracy = 90, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SPRINGTIDE_STORM] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_SPRINGTIDE_STORM, + .power = 95, + .type = TYPE_FAIRY, + .accuracy = 80, + .pp = 5, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MYSTICAL_POWER] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_MYSTICAL_POWER, + .power = 70, + .type = TYPE_PSYCHIC, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_RAGING_FURY] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_RAGING_FURY, + .power = 90, + .type = TYPE_FIRE, + .accuracy = 85, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_WAVE_CRASH] = + { + .effect = EFFECT_RECOIL_33, // TODO: Legends: Arceus mechanics. + .power = 75, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CHLOROBLAST] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_CHLOROBLAST, + .power = 120, + .type = TYPE_GRASS, + .accuracy = 95, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MOUNTAIN_GALE] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_ACTION_SPEED_DOWN_HIT, + .power = 100, + .type = TYPE_ICE, + .accuracy = 85, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_VICTORY_DANCE] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_VICTORY_DANCE, + .power = 0, + .type = TYPE_FIGHTING, + .accuracy = 0, + .pp = 20, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, + .split = SPLIT_STATUS, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HEADLONG_RUSH] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_HEADLONG_RUSH, + .power = 100, + .type = TYPE_GROUND, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BARB_BARRAGE] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_BARB_BARRAGE, + .power = 60, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ESPER_WING] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_ESPER_WING, + .power = 75, + .type = TYPE_PSYCHIC, + .accuracy = 90, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BITTER_MALICE] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_ESPER_WING, + .power = 60, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SHELTER] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELTER, + .power = 0, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TRIPLE_ARROWS] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_TRIPLE_ARROWS, + .power = 50, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_INFERNAL_PARADE] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_INFERNAL_PARADE, + .power = 60, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CEASELESS_EDGE] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_CEASELESS_EDGE, + .power = 65, + .type = TYPE_DARK, + .accuracy = 90, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BLEAKWIND_STORM] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_BLEAKWIND_STORM, + .power = 95, + .type = TYPE_FLYING, + .accuracy = 80, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_WILDBOLT_STORM] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_WILDBOLT_STORM, + .power = 95, + .type = TYPE_ELECTRIC, + .accuracy = 80, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SANDSEAR_STORM] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_SANDSEAR_STORM, + .power = 95, + .type = TYPE_GROUND, + .accuracy = 80, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_LUNAR_BLESSING] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_LUNAR_BLESSING, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TAKE_HEART] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_TAKE_HEART, + .power = 0, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = FLAG_SNATCH_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + // Z-Moves + [MOVE_BREAKNECK_BLITZ] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, //determined from move type + .zMoveEffect = 0 + }, + [MOVE_ALL_OUT_PUMMELING] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_FIGHTING, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_SUPERSONIC_SKYSTRIKE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_FLYING, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_ACID_DOWNPOUR] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_POISON, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_TECTONIC_RAGE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_GROUND, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_CONTINENTAL_CRUSH] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_ROCK, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_SAVAGE_SPIN_OUT] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_BUG, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_NEVER_ENDING_NIGHTMARE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_GHOST, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_CORKSCREW_CRASH] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_INFERNO_OVERDRIVE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_FIRE, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_HYDRO_VORTEX] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_BLOOM_DOOM] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_GIGAVOLT_HAVOC] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_SHATTERED_PSYCHE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_SUBZERO_SLAMMER] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_ICE, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_DEVASTATING_DRAKE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_DRAGON, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_BLACK_HOLE_ECLIPSE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_TWINKLE_TACKLE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_CATASTROPIKA] = + { + .effect = EFFECT_HIT, + .power = 210, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_10000000_VOLT_THUNDERBOLT] = + { + .effect = EFFECT_HIT, + .power = 195, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_HIGH_CRIT, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_STOKED_SPARKSURFER] = + { + .effect = EFFECT_PARALYZE_HIT, + .power = 175, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_EXTREME_EVOBOOST] = + { + .effect = EFFECT_EXTREME_EVOBOOST, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_STATUS, + .zMoveEffect = 0 + }, + [MOVE_PULVERIZING_PANCAKE] = + { + .effect = EFFECT_HIT, + .power = 210, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_GENESIS_SUPERNOVA] = + { + .effect = EFFECT_DAMAGE_SET_TERRAIN, + .power = 185, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .argument = 0, //psychic terrain + .zMoveEffect = 0 + }, + [MOVE_SINISTER_ARROW_RAID] = + { + .effect = EFFECT_HIT, + .power = 180, + .type = TYPE_GHOST, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_MALICIOUS_MOONSAULT] = + { + .effect = EFFECT_HIT, + .power = 180, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_OCEANIC_OPERETTA] = + { + .effect = EFFECT_HIT, + .power = 195, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_SPLINTERED_STORMSHARDS] = + { + .effect = EFFECT_DAMAGE_SET_TERRAIN, + .power = 190, + .type = TYPE_ROCK, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .argument = 1, //remove terrain + .zMoveEffect = 0 + }, + [MOVE_LETS_SNUGGLE_FOREVER] = + { + .effect = EFFECT_HIT, + .power = 190, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_CLANGOROUS_SOULBLAZE] = + { + .effect = EFFECT_ALL_STATS_UP_HIT, + .power = 185, + .type = TYPE_DRAGON, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_SOUND, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_GUARDIAN_OF_ALOLA] = + { + .effect = EFFECT_SUPER_FANG, + .power = 1, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_SEARING_SUNRAZE_SMASH] = + { + .effect = EFFECT_HIT, + .power = 200, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_MENACING_MOONRAZE_MAELSTROM] = + { + .effect = EFFECT_HIT, + .power = 200, + .type = TYPE_GHOST, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_LIGHT_THAT_BURNS_THE_SKY] = + { + .effect = EFFECT_HIT, + .power = 200, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_SOUL_STEALING_7_STAR_STRIKE] = + { + .effect = EFFECT_HIT, + .power = 195, + .type = TYPE_GHOST, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 }, }; diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h index 84a4d271b1..244f0ddb2e 100644 --- a/src/data/contest_moves.h +++ b/src/data/contest_moves.h @@ -1,3 +1,4 @@ +// gen 4+ data from urpg's contest movedex const struct ContestMove gContestMoves[MOVES_COUNT] = { [MOVE_NONE] = {0}, @@ -7,7 +8,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_POUND, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_KARATE_CHOP] = @@ -31,7 +32,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_MEGA_PUNCH] = @@ -47,7 +48,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FIRE_PUNCH] = @@ -55,7 +56,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = COMBO_STARTER_FIRE_PUNCH, - .comboMoves = {COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_THUNDER_PUNCH, COMBO_STARTER_ICE_PUNCH}, + .comboMoves = {COMBO_STARTER_ICE_PUNCH, COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_THUNDER_PUNCH}, }, [MOVE_ICE_PUNCH] = @@ -63,7 +64,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = COMBO_STARTER_ICE_PUNCH, - .comboMoves = {COMBO_STARTER_THUNDER_PUNCH, COMBO_STARTER_FIRE_PUNCH}, + .comboMoves = {COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_THUNDER_PUNCH}, }, [MOVE_THUNDER_PUNCH] = @@ -87,7 +88,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_VICE_GRIP, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_GUILLOTINE] = @@ -103,7 +104,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SWORDS_DANCE] = @@ -111,7 +112,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = COMBO_STARTER_SWORDS_DANCE, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_CUT] = @@ -127,7 +128,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_WING_ATTACK] = @@ -135,7 +136,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_WHIRLWIND] = @@ -143,7 +144,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FLY] = @@ -151,7 +152,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_BIND] = @@ -182,7 +183,8 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = { .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, - .comboStarterId = 0,{0, COMBO_STARTER_LEER}, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_LEER}, }, [MOVE_DOUBLE_KICK] = @@ -190,7 +192,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_MEGA_KICK] = @@ -214,7 +216,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SAND_ATTACK] = @@ -262,7 +264,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_LEER, COMBO_STARTER_HARDEN}, + .comboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN, COMBO_STARTER_LEER}, }, [MOVE_BODY_SLAM] = @@ -270,7 +272,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_WRAP] = @@ -278,7 +280,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TAKE_DOWN] = @@ -318,7 +320,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TWINEEDLE] = @@ -326,7 +328,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_PIN_MISSILE] = @@ -334,7 +336,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_LEER] = @@ -366,7 +368,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SING] = @@ -374,7 +376,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = COMBO_STARTER_SING, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SUPERSONIC] = @@ -382,7 +384,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SONIC_BOOM] = @@ -390,7 +392,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_DISABLE] = @@ -398,7 +400,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ACID] = @@ -406,7 +408,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_EMBER] = @@ -430,7 +432,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_WATER_GUN] = @@ -438,7 +440,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_WATER_SPORT, COMBO_STARTER_MUD_SPORT}, + .comboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_WATER_SPORT}, }, [MOVE_HYDRO_PUMP] = @@ -454,7 +456,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = COMBO_STARTER_SURF, - .comboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_DIVE}, + .comboMoves = {COMBO_STARTER_DIVE, COMBO_STARTER_RAIN_DANCE}, }, [MOVE_ICE_BEAM] = @@ -462,7 +464,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {COMBO_STARTER_HAIL}, }, [MOVE_BLIZZARD] = @@ -470,7 +472,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_POWDER_SNOW, COMBO_STARTER_HAIL}, + .comboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_POWDER_SNOW}, }, [MOVE_PSYBEAM] = @@ -494,7 +496,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {COMBO_STARTER_HAIL}, }, [MOVE_HYPER_BEAM] = @@ -502,7 +504,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_PECK] = @@ -510,7 +512,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = COMBO_STARTER_PECK, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_DRILL_PECK] = @@ -534,7 +536,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_COUNTER] = @@ -558,7 +560,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ABSORB] = @@ -581,8 +583,8 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = { .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, - .comboStarterId = 0, - .comboMoves = {0}, + .comboStarterId = COMBO_STARTER_LEECH_SEED, + .comboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_WORRY_SEED}, }, [MOVE_GROWTH] = @@ -590,7 +592,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = COMBO_STARTER_GROWTH, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_RAZOR_LEAF] = @@ -606,7 +608,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_GROWTH}, + .comboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_SUNNY_DAY}, }, [MOVE_POISON_POWDER] = @@ -646,7 +648,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_STRING_SHOT, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_DRAGON_RAGE] = @@ -654,7 +656,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = COMBO_STARTER_DRAGON_RAGE, - .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE}, + .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, }, [MOVE_FIRE_SPIN] = @@ -694,7 +696,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_LOCK_ON}, + .comboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, }, [MOVE_ROCK_THROW] = @@ -702,7 +704,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_ROCK_THROW, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_EARTHQUAKE] = @@ -710,7 +712,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_EARTHQUAKE, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FISSURE] = @@ -726,15 +728,15 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TOXIC] = { .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, - .comboStarterId = 0, - .comboMoves = {0}, + .comboStarterId = COMBO_STARTER_TOXIC, + .comboMoves = {0} }, [MOVE_CONFUSION] = @@ -742,7 +744,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_CONFUSION, - .comboMoves = {COMBO_STARTER_PSYCHIC, COMBO_STARTER_KINESIS, COMBO_STARTER_CALM_MIND}, + .comboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, }, [MOVE_PSYCHIC] = @@ -750,7 +752,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_PSYCHIC, - .comboMoves = {COMBO_STARTER_KINESIS, COMBO_STARTER_CONFUSION, COMBO_STARTER_CALM_MIND}, + .comboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS}, }, [MOVE_HYPNOSIS] = @@ -758,7 +760,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_HYPNOSIS, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_MEDITATE] = @@ -790,7 +792,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = COMBO_STARTER_RAGE, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TELEPORT] = @@ -798,7 +800,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_DOUBLE_TEAM, COMBO_STARTER_PSYCHIC, COMBO_STARTER_KINESIS, COMBO_STARTER_CONFUSION}, + .comboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_DOUBLE_TEAM, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, }, [MOVE_NIGHT_SHADE] = @@ -806,7 +808,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_MIMIC] = @@ -814,7 +816,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SCREECH] = @@ -822,7 +824,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_DOUBLE_TEAM] = @@ -830,7 +832,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = COMBO_STARTER_DOUBLE_TEAM, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_RECOVER] = @@ -838,7 +840,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_HARDEN] = @@ -846,7 +848,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_HARDEN, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_MINIMIZE] = @@ -854,7 +856,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SMOKESCREEN] = @@ -870,7 +872,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_WITHDRAW] = @@ -886,7 +888,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = COMBO_STARTER_DEFENSE_CURL, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_BARRIER] = @@ -894,7 +896,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_LIGHT_SCREEN] = @@ -910,7 +912,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {COMBO_STARTER_HAIL}, }, [MOVE_REFLECT] = @@ -926,7 +928,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = COMBO_STARTER_FOCUS_ENERGY, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_BIDE] = @@ -934,7 +936,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_METRONOME] = @@ -942,7 +944,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_MIRROR_MOVE] = @@ -950,7 +952,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SELF_DESTRUCT] = @@ -958,7 +960,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_EGG_BOMB] = @@ -974,7 +976,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SMOG] = @@ -982,7 +984,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_SMOG, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SLUDGE] = @@ -998,7 +1000,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_BONE_CLUB, - .comboMoves = {COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH}, + .comboMoves = {COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, }, [MOVE_FIRE_BLAST] = @@ -1030,7 +1032,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SKULL_BASH] = @@ -1038,7 +1040,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SPIKE_CANNON] = @@ -1046,7 +1048,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_CONSTRICT] = @@ -1054,7 +1056,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_AMNESIA] = @@ -1062,7 +1064,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_KINESIS] = @@ -1070,7 +1072,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_KINESIS, - .comboMoves = {COMBO_STARTER_PSYCHIC, COMBO_STARTER_CONFUSION}, + .comboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_PSYCHIC}, }, [MOVE_SOFT_BOILED] = @@ -1078,7 +1080,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = COMBO_STARTER_SOFT_BOILED, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_HIGH_JUMP_KICK] = @@ -1102,7 +1104,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_HYPNOSIS, COMBO_STARTER_CALM_MIND}, + .comboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_HYPNOSIS}, }, [MOVE_POISON_GAS] = @@ -1110,7 +1112,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_BARRAGE] = @@ -1118,7 +1120,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_LEECH_LIFE] = @@ -1126,7 +1128,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_LOVELY_KISS] = @@ -1134,7 +1136,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SKY_ATTACK] = @@ -1142,7 +1144,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TRANSFORM] = @@ -1150,7 +1152,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_BUBBLE] = @@ -1166,7 +1168,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SPORE] = @@ -1174,7 +1176,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FLASH] = @@ -1182,7 +1184,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_PSYWAVE] = @@ -1198,7 +1200,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ACID_ARMOR] = @@ -1206,7 +1208,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_CRABHAMMER] = @@ -1222,7 +1224,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FURY_SWIPES] = @@ -1238,7 +1240,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_BONEMERANG, - .comboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONE_RUSH}, + .comboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, }, [MOVE_REST] = @@ -1262,7 +1264,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SHARPEN] = @@ -1270,7 +1272,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_CONVERSION] = @@ -1278,7 +1280,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TRI_ATTACK] = @@ -1302,7 +1304,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_SWORDS_DANCE, COMBO_STARTER_SCRATCH}, + .comboMoves = {COMBO_STARTER_SCRATCH, COMBO_STARTER_SWORDS_DANCE}, }, [MOVE_SUBSTITUTE] = @@ -1310,23 +1312,17 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, - [MOVE_STRUGGLE] = - { - .effect = CONTEST_EFFECT_HIGHLY_APPEALING, - .contestCategory = CONTEST_CATEGORY_COOL, - .comboStarterId = 0, - .comboMoves = {0}, - }, + [MOVE_STRUGGLE] = {0}, [MOVE_SKETCH] = { .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TRIPLE_KICK] = @@ -1342,7 +1338,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SPIDER_WEB] = @@ -1358,7 +1354,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_MIND_READER, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_NIGHTMARE] = @@ -1366,7 +1362,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_HYPNOSIS}, + .comboMoves = {0} }, [MOVE_FLAME_WHEEL] = @@ -1390,7 +1386,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_CURSE, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FLAIL] = @@ -1406,7 +1402,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_AEROBLAST] = @@ -1414,7 +1410,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_COTTON_SPORE] = @@ -1422,7 +1418,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_REVERSAL] = @@ -1462,7 +1458,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SCARY_FACE] = @@ -1470,7 +1466,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_SCARY_FACE, - .comboMoves = {COMBO_STARTER_RAGE, COMBO_STARTER_LEER}, + .comboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_RAGE}, }, [MOVE_FEINT_ATTACK] = @@ -1494,7 +1490,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = COMBO_STARTER_BELLY_DRUM, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SLUDGE_BOMB] = @@ -1510,7 +1506,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = COMBO_STARTER_MUD_SLAP, - .comboMoves = {COMBO_STARTER_SAND_ATTACK, COMBO_STARTER_MUD_SPORT, COMBO_STARTER_SANDSTORM}, + .comboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_SAND_ATTACK, COMBO_STARTER_SANDSTORM}, }, [MOVE_OCTAZOOKA] = @@ -1518,7 +1514,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_LOCK_ON}, + .comboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, }, [MOVE_SPIKES] = @@ -1526,7 +1522,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ZAP_CANNON] = @@ -1534,7 +1530,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_LOCK_ON}, + .comboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON}, }, [MOVE_FORESIGHT] = @@ -1542,7 +1538,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_DESTINY_BOND] = @@ -1550,7 +1546,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_MEAN_LOOK, COMBO_STARTER_CURSE, COMBO_STARTER_ENDURE}, + .comboMoves = {COMBO_STARTER_CURSE, COMBO_STARTER_ENDURE, COMBO_STARTER_MEAN_LOOK}, }, [MOVE_PERISH_SONG] = @@ -1566,7 +1562,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {COMBO_STARTER_HAIL}, }, [MOVE_DETECT] = @@ -1582,7 +1578,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_BONE_RUSH, - .comboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG}, + .comboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_SHADOW_BONE}, }, [MOVE_LOCK_ON] = @@ -1590,7 +1586,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_LOCK_ON, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_OUTRAGE] = @@ -1598,7 +1594,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SANDSTORM] = @@ -1606,7 +1602,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_SANDSTORM, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_GIGA_DRAIN] = @@ -1622,7 +1618,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_ENDURE, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_CHARM] = @@ -1630,7 +1626,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = COMBO_STARTER_CHARM, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ROLLOUT] = @@ -1654,7 +1650,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_MILK_DRINK] = @@ -1662,7 +1658,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SPARK] = @@ -1686,7 +1682,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_MEAN_LOOK] = @@ -1702,7 +1698,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SLEEP_TALK] = @@ -1717,8 +1713,8 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = { .effect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_BEAUTY, - .comboStarterId = 0, - .comboMoves = {0}, + .comboStarterId = COMBO_STARTER_HEAL_BELL, + .comboMoves = {COMBO_STARTER_LUCKY_CHANT}, }, [MOVE_RETURN] = @@ -1726,7 +1722,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_PRESENT] = @@ -1734,7 +1730,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FRUSTRATION] = @@ -1742,7 +1738,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SAFEGUARD] = @@ -1750,7 +1746,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_PAIN_SPLIT] = @@ -1774,7 +1770,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_DYNAMIC_PUNCH] = @@ -1790,7 +1786,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_DRAGON_BREATH] = @@ -1798,7 +1794,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = COMBO_STARTER_DRAGON_BREATH, - .comboMoves = {COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_DANCE}, + .comboMoves = {COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, }, [MOVE_BATON_PASS] = @@ -1806,7 +1802,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ENCORE] = @@ -1814,7 +1810,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_PURSUIT] = @@ -1822,7 +1818,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_RAPID_SPIN] = @@ -1830,7 +1826,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SWEET_SCENT] = @@ -1838,7 +1834,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = COMBO_STARTER_SWEET_SCENT, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_IRON_TAIL] = @@ -1846,7 +1842,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_METAL_CLAW] = @@ -1894,7 +1890,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_CROSS_CHOP] = @@ -1910,7 +1906,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_RAIN_DANCE] = @@ -1918,7 +1914,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_RAIN_DANCE, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SUNNY_DAY] = @@ -1926,7 +1922,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = COMBO_STARTER_SUNNY_DAY, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_CRUNCH] = @@ -1950,7 +1946,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_EXTREME_SPEED] = @@ -1958,7 +1954,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ANCIENT_POWER] = @@ -1966,7 +1962,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SHADOW_BALL] = @@ -1974,7 +1970,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FUTURE_SIGHT] = @@ -1982,7 +1978,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_PSYCHIC, COMBO_STARTER_KINESIS, COMBO_STARTER_CONFUSION, COMBO_STARTER_CALM_MIND}, + .comboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, }, [MOVE_ROCK_SMASH] = @@ -1990,7 +1986,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_WHIRLPOOL] = @@ -2006,7 +2002,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FAKE_OUT] = @@ -2014,7 +2010,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = COMBO_STARTER_FAKE_OUT, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_UPROAR] = @@ -2022,7 +2018,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_STOCKPILE] = @@ -2030,7 +2026,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = COMBO_STARTER_STOCKPILE, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SPIT_UP] = @@ -2062,7 +2058,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = COMBO_STARTER_HAIL, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TORMENT] = @@ -2070,7 +2066,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FLATTER] = @@ -2094,7 +2090,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FACADE] = @@ -2118,7 +2114,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FOLLOW_ME] = @@ -2126,7 +2122,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_NATURE_POWER] = @@ -2134,7 +2130,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_CHARGE] = @@ -2142,7 +2138,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_CHARGE, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TAUNT] = @@ -2150,7 +2146,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_TAUNT, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_HELPING_HAND] = @@ -2158,7 +2154,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TRICK] = @@ -2166,7 +2162,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ROLE_PLAY] = @@ -2174,7 +2170,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_WISH] = @@ -2182,7 +2178,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ASSIST] = @@ -2190,7 +2186,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_INGRAIN] = @@ -2198,7 +2194,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SUPERPOWER] = @@ -2206,7 +2202,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_LOCK_ON}, + .comboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_MIND_READER}, }, [MOVE_MAGIC_COAT] = @@ -2214,7 +2210,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_RECYCLE] = @@ -2222,15 +2218,15 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_REVENGE] = { .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_TOUGH, - .comboStarterId = 0, - .comboMoves = {0}, + .comboStarterId = COMBO_STARTER_REVENGE, + .comboMoves = {COMBO_STARTER_PAYBACK}, }, [MOVE_BRICK_BREAK] = @@ -2246,7 +2242,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = COMBO_STARTER_YAWN, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_KNOCK_OFF] = @@ -2270,7 +2266,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_ENDURE, COMBO_STARTER_EARTHQUAKE, COMBO_STARTER_SUNNY_DAY}, + .comboMoves = {COMBO_STARTER_EARTHQUAKE, COMBO_STARTER_ENDURE, COMBO_STARTER_SUNNY_DAY}, }, [MOVE_SKILL_SWAP] = @@ -2278,7 +2274,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_IMPRISON] = @@ -2286,7 +2282,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_REFRESH] = @@ -2294,7 +2290,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_WATER_SPORT, COMBO_STARTER_SING}, + .comboMoves = {COMBO_STARTER_SING, COMBO_STARTER_WATER_SPORT}, }, [MOVE_GRUDGE] = @@ -2310,7 +2306,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SECRET_POWER] = @@ -2318,7 +2314,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_DIVE] = @@ -2334,7 +2330,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_FAKE_OUT}, + .comboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_FOCUS_ENERGY}, }, [MOVE_CAMOUFLAGE] = @@ -2342,7 +2338,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TAIL_GLOW] = @@ -2350,7 +2346,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_LUSTER_PURGE] = @@ -2374,7 +2370,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TEETER_DANCE] = @@ -2382,7 +2378,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_BLAZE_KICK] = @@ -2398,7 +2394,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = COMBO_STARTER_MUD_SPORT, - .comboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_WATER_SPORT}, + .comboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM, COMBO_STARTER_WATER_SPORT}, }, [MOVE_ICE_BALL] = @@ -2406,7 +2402,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {COMBO_STARTER_HAIL}, }, [MOVE_NEEDLE_ARM] = @@ -2414,7 +2410,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SLACK_OFF] = @@ -2422,7 +2418,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_YAWN}, + .comboMoves = {0} }, [MOVE_HYPER_VOICE] = @@ -2430,7 +2426,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_POISON_FANG] = @@ -2438,7 +2434,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_CRUSH_CLAW] = @@ -2460,7 +2456,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = [MOVE_HYDRO_CANNON] = { .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, - .contestCategory = CONTEST_CATEGORY_BEAUTY, + .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, .comboMoves = {COMBO_STARTER_RAIN_DANCE}, }, @@ -2470,7 +2466,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ASTONISH] = @@ -2478,7 +2474,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_WEATHER_BALL] = @@ -2486,7 +2482,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_HAIL, COMBO_STARTER_SANDSTORM}, + .comboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SANDSTORM, COMBO_STARTER_SUNNY_DAY}, }, [MOVE_AROMATHERAPY] = @@ -2494,7 +2490,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_FAKE_TEARS] = @@ -2502,7 +2498,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_AIR_CUTTER] = @@ -2510,7 +2506,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_OVERHEAT] = @@ -2526,7 +2522,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ROCK_TOMB] = @@ -2542,7 +2538,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_METAL_SOUND] = @@ -2550,7 +2546,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_METAL_SOUND, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_GRASS_WHISTLE] = @@ -2558,7 +2554,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_TICKLE] = @@ -2566,7 +2562,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_COSMIC_POWER] = @@ -2574,7 +2570,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_WATER_SPOUT] = @@ -2590,7 +2586,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SHADOW_PUNCH] = @@ -2598,7 +2594,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_EXTRASENSORY] = @@ -2606,7 +2602,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SKY_UPPERCUT] = @@ -2630,7 +2626,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_MIND_READER}, }, [MOVE_MUDDY_WATER] = @@ -2654,7 +2650,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_ICICLE_SPEAR] = @@ -2662,7 +2658,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_IRON_DEFENSE] = @@ -2670,7 +2666,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_BLOCK] = @@ -2678,7 +2674,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_HOWL] = @@ -2686,7 +2682,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_DRAGON_CLAW] = @@ -2694,7 +2690,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_DANCE}, + .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, }, [MOVE_FRENZY_PLANT] = @@ -2710,7 +2706,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_BOUNCE] = @@ -2718,7 +2714,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_MUD_SHOT] = @@ -2726,7 +2722,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {COMBO_STARTER_SANDSTORM}, }, [MOVE_POISON_TAIL] = @@ -2734,7 +2730,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_COVET] = @@ -2742,7 +2738,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_VOLT_TACKLE] = @@ -2750,7 +2746,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {COMBO_STARTER_CHARGE}, + .comboMoves = {0} }, [MOVE_MAGICAL_LEAF] = @@ -2766,7 +2762,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .comboStarterId = COMBO_STARTER_WATER_SPORT, - .comboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_MUD_SPORT}, + .comboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE}, }, [MOVE_CALM_MIND] = @@ -2774,7 +2770,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .comboStarterId = COMBO_STARTER_CALM_MIND, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_LEAF_BLADE] = @@ -2782,7 +2778,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_DRAGON_DANCE] = @@ -2790,7 +2786,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = COMBO_STARTER_DRAGON_DANCE, - .comboMoves = {COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_BREATH}, + .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, }, [MOVE_ROCK_BLAST] = @@ -2798,7 +2794,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_SHOCK_WAVE] = @@ -2822,7 +2818,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_COOL, .comboStarterId = 0, - .comboMoves = {0}, + .comboMoves = {0} }, [MOVE_PSYCHO_BOOST] = @@ -2832,6 +2828,3144 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .comboStarterId = 0, .comboMoves = {COMBO_STARTER_CALM_MIND}, }, + + [MOVE_ROOST] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_BRAVE_BIRD}, + }, + + [MOVE_GRAVITY] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MIRACLE_EYE] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_WAKE_UP_SLAP] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MON, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HAMMER_ARM] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + }, + + [MOVE_GYRO_BALL] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HEALING_WISH] = + { + .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BRINE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_RAIN_DANCE}, + }, + + [MOVE_NATURAL_GIFT] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_LATER, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FEINT] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PLUCK] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TAILWIND] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ACUPRESSURE] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_METAL_BURST] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_METAL_SOUND}, + }, + + [MOVE_U_TURN] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CLOSE_COMBAT] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, + }, + + [MOVE_PAYBACK] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = COMBO_STARTER_PAYBACK, + .comboMoves = {COMBO_STARTER_REVENGE}, + }, + + [MOVE_ASSURANCE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_PAYBACK, COMBO_STARTER_REVENGE}, + }, + + [MOVE_EMBARGO] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FLING] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PSYCHO_SHIFT] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TRUMP_CARD] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_LATER, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HEAL_BLOCK] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_WRING_OUT] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MON, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_POWER_TRICK] = + { + .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GASTRO_ACID] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_LUCKY_CHANT] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = COMBO_STARTER_LUCKY_CHANT, + .comboMoves = {COMBO_STARTER_HEAL_BELL}, + }, + + [MOVE_ME_FIRST] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_COPYCAT] = + { + .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_POWER_SWAP] = + { + .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GUARD_SWAP] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PUNISHMENT] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_LATER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_LAST_RESORT] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_WORRY_SEED] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = COMBO_STARTER_WORRY_SEED, + .comboMoves = {COMBO_STARTER_LEECH_SEED}, + }, + + [MOVE_SUCKER_PUNCH] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TOXIC_SPIKES] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HEART_SWAP] = + { + .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_AQUA_RING] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MAGNET_RISE] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FLARE_BLITZ] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_SUNNY_DAY}, + }, + + [MOVE_FORCE_PALM] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_AURA_SPHERE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ROCK_POLISH] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_POISON_JAB] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DARK_PULSE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_NIGHT_SLASH] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_AQUA_TAIL] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_RAIN_DANCE}, + }, + + [MOVE_SEED_BOMB] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_AIR_SLASH] = + { + .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_X_SCISSOR] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_SWORDS_DANCE}, + }, + + [MOVE_BUG_BUZZ] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRAGON_PULSE] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRAGON_RUSH] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = COMBO_STARTER_DRAGON_RUSH, + .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_TAIL}, + }, + + [MOVE_POWER_GEM] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRAIN_PUNCH] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + }, + + [MOVE_VACUUM_WAVE] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FOCUS_BLAST] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + }, + + [MOVE_ENERGY_BALL] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_GROWTH}, + }, + + [MOVE_BRAVE_BIRD] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = COMBO_STARTER_BRAVE_BIRD, + .comboMoves = {0} + }, + + [MOVE_EARTH_POWER] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SWITCHEROO] = + { + .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GIGA_IMPACT] = + { + .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_NASTY_PLOT] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BULLET_PUNCH] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_AVALANCHE] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ICE_SHARD] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SHADOW_CLAW] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_THUNDER_FANG] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = COMBO_STARTER_THUNDER_FANG, + .comboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_FANG, COMBO_STARTER_ICE_FANG}, + }, + + [MOVE_ICE_FANG] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = COMBO_STARTER_ICE_FANG, + .comboMoves = {COMBO_STARTER_FIRE_FANG, COMBO_STARTER_THUNDER_FANG}, + }, + + [MOVE_FIRE_FANG] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = COMBO_STARTER_FIRE_FANG, + .comboMoves = {COMBO_STARTER_ICE_FANG, COMBO_STARTER_THUNDER_FANG}, + }, + + [MOVE_SHADOW_SNEAK] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MUD_BOMB] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PSYCHO_CUT] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ZEN_HEADBUTT] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MIRROR_SHOT] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FLASH_CANNON] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ROCK_CLIMB] = + { + .effect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DEFOG] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TRICK_ROOM] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRACO_METEOR] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DISCHARGE] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_CHARGE}, + }, + + [MOVE_LAVA_PLUME] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_SUNNY_DAY}, + }, + + [MOVE_LEAF_STORM] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_POWER_WHIP] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_GROWTH}, + }, + + [MOVE_ROCK_WRECKER] = + { + .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CROSS_POISON] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GUNK_SHOT] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_IRON_HEAD] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MAGNET_BOMB] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STONE_EDGE] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CAPTIVATE] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_CHARM}, + }, + + [MOVE_STEALTH_ROCK] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GRASS_KNOT] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CHATTER] = + { + .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_JUDGMENT] = + { + .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BUG_BITE] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CHARGE_BEAM] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_CHARGE}, + }, + + [MOVE_WOOD_HAMMER] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_AQUA_JET] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_RAIN_DANCE}, + }, + + [MOVE_ATTACK_ORDER] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = COMBO_STARTER_ATTACK_ORDER, + .comboMoves = {COMBO_STARTER_DEFEND_ORDER, COMBO_STARTER_HEAL_ORDER}, + }, + + [MOVE_DEFEND_ORDER] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = COMBO_STARTER_DEFEND_ORDER, + .comboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_HEAL_ORDER}, + }, + + [MOVE_HEAL_ORDER] = + { + .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = COMBO_STARTER_HEAL_ORDER, + .comboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_DEFEND_ORDER}, + }, + + [MOVE_HEAD_SMASH] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DOUBLE_HIT] = + { + .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ROAR_OF_TIME] = + { + .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SPACIAL_REND] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_LUNAR_DANCE] = + { + .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CRUSH_GRIP] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MAGMA_STORM] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_SUNNY_DAY}, + }, + + [MOVE_DARK_VOID] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SEED_FLARE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_OMINOUS_WIND] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SHADOW_FORCE] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HONE_CLAWS] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_WIDE_GUARD] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GUARD_SPLIT] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_POWER_SPLIT] = + { + .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_WONDER_ROOM] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PSYSHOCK] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_VENOSHOCK] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_TOXIC}, + }, + + [MOVE_AUTOTOMIZE] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_RAGE_POWDER] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TELEKINESIS] = + { + .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MAGIC_ROOM] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SMACK_DOWN] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STORM_THROW] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FLAME_BURST] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SLUDGE_WAVE] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_QUIVER_DANCE] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HEAVY_SLAM] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SYNCHRONOISE] = + { + .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ELECTRO_BALL] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SOAK] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FLAME_CHARGE] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_COIL] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_LOW_SWEEP] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ACID_SPRAY] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FOUL_PLAY] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SIMPLE_BEAM] = + { + .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ENTRAINMENT] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_AFTER_YOU] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ROUND] = + { + .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ECHOED_VOICE] = + { + .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CHIP_AWAY] = + { + .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CLEAR_SMOG] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STORED_POWER] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_LATER, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_QUICK_GUARD] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ALLY_SWITCH] = + { + .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SCALD] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = COMBO_STARTER_SCALD, + .comboMoves = {0} + }, + + [MOVE_SHELL_SMASH] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HEAL_PULSE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HEX] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_TOXIC}, + }, + + [MOVE_SKY_DROP] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SHIFT_GEAR] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CIRCLE_THROW] = + { + .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_INCINERATE] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_QUASH] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ACROBATICS] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_REFLECT_TYPE] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_RETALIATE] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FINAL_GAMBIT] = + { + .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BESTOW] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_INFERNO] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_WATER_PLEDGE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FIRE_PLEDGE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GRASS_PLEDGE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_VOLT_SWITCH] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STRUGGLE_BUG] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BULLDOZE] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FROST_BREATH] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRAGON_TAIL] = + { + .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = COMBO_STARTER_DRAGON_TAIL, + .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH}, + }, + + [MOVE_WORK_UP] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ELECTROWEB] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_WILD_CHARGE] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRILL_RUN] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DUAL_CHOP] = + { + .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HEART_STAMP] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HORN_LEECH] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SACRED_SWORD] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_RAZOR_SHELL] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HEAT_CRASH] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_LEAF_TORNADO] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STEAMROLLER] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_COTTON_GUARD] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_NIGHT_DAZE] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PSYSTRIKE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TAIL_SLAP] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HURRICANE] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HEAD_CHARGE] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GEAR_GRIND] = + { + .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SEARING_SHOT] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TECHNO_BLAST] = + { + .effect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_RELIC_SONG] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SECRET_SWORD] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GLACIATE] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BOLT_STRIKE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BLUE_FLARE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FIERY_DANCE] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FREEZE_SHOCK] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ICE_BURN] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SNARL] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ICICLE_CRASH] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MON, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_V_CREATE] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FUSION_FLARE] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FUSION_BOLT] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FLYING_PRESS] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MAT_BLOCK] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BELCH] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ROTOTILLER] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STICKY_WEB] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FELL_STINGER] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PHANTOM_FORCE] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TRICK_OR_TREAT] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_NOBLE_ROAR] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ION_DELUGE] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PARABOLIC_CHARGE] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FORESTS_CURSE] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PETAL_BLIZZARD] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FREEZE_DRY] = + { + .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DISARMING_VOICE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PARTING_SHOT] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TOPSY_TURVY] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRAINING_KISS] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CRAFTY_SHIELD] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FLOWER_SHIELD] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GRASSY_TERRAIN] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = COMBO_STARTER_GRASSY_TERRAIN, + .comboMoves = {0} + }, + + [MOVE_MISTY_TERRAIN] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = COMBO_STARTER_MISTY_TERRAIN, + .comboMoves = {0} + }, + + [MOVE_ELECTRIFY] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PLAY_ROUGH] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FAIRY_WIND] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MOONBLAST] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BOOMBURST] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FAIRY_LOCK] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_KINGS_SHIELD] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PLAY_NICE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CONFIDE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DIAMOND_STORM] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STEAM_ERUPTION] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_SCALD}, + }, + + [MOVE_HYPERSPACE_HOLE] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = COMBO_STARTER_HYPERSPACE_HOLE, + .comboMoves = {COMBO_STARTER_HYPERSPACE_FURY}, + }, + + [MOVE_WATER_SHURIKEN] = + { + .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MYSTICAL_FIRE] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SPIKY_SHIELD] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_AROMATIC_MIST] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_EERIE_IMPULSE] = + { + .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_VENOM_DRENCH] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_TOXIC}, + }, + + [MOVE_POWDER] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GEOMANCY] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MAGNETIC_FLUX] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HAPPY_HOUR] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ELECTRIC_TERRAIN] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = COMBO_STARTER_ELECTRIC_TERRAIN, + .comboMoves = {0} + }, + + [MOVE_DAZZLING_GLEAM] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CELEBRATE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HOLD_HANDS] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BABY_DOLL_EYES] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_NUZZLE] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HOLD_BACK] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_INFESTATION] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_POWER_UP_PUNCH] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_OBLIVION_WING] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_THOUSAND_ARROWS] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = COMBO_STARTER_THOUSAND_ARROWS, + .comboMoves = {COMBO_STARTER_THOUSAND_WAVES}, + }, + + [MOVE_THOUSAND_WAVES] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = COMBO_STARTER_THOUSAND_WAVES, + .comboMoves = {COMBO_STARTER_THOUSAND_ARROWS}, + }, + + [MOVE_LANDS_WRATH] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_LIGHT_OF_RUIN] = {0}, // undefined in urpg + + [MOVE_ORIGIN_PULSE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PRECIPICE_BLADES] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRAGON_ASCENT] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HYPERSPACE_FURY] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = COMBO_STARTER_HYPERSPACE_FURY, + .comboMoves = {COMBO_STARTER_HYPERSPACE_HOLE}, + }, + + [MOVE_SHORE_UP] = + { + .effect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_SANDSTORM} + }, + + [MOVE_FIRST_IMPRESSION] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BANEFUL_BUNKER] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SPIRIT_SHACKLE] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DARKEST_LARIAT] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SPARKLING_ARIA] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_SCALD}, + }, + + [MOVE_ICE_HAMMER] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_HAIL}, + }, + + [MOVE_FLORAL_HEALING] = + { + .effect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_HIGH_HORSEPOWER] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STRENGTH_SAP] = + { + .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SOLAR_BLADE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_SUNNY_DAY}, + }, + + [MOVE_LEAFAGE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_GROWTH}, + }, + + [MOVE_SPOTLIGHT] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TOXIC_THREAD] = + { + .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_TOXIC}, + }, + + [MOVE_LASER_FOCUS] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GEAR_UP] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_THROAT_CHOP] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_POLLEN_PUFF] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ANCHOR_SHOT] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PSYCHIC_TERRAIN] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = COMBO_STARTER_PSYCHIC_TERRAIN, + .comboMoves = {0} + }, + + [MOVE_LUNGE] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FIRE_LASH] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MON, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_SUNNY_DAY}, + }, + + [MOVE_POWER_TRIP] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_LATER, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BURN_UP] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_SUNNY_DAY}, + }, + + [MOVE_SPEED_SWAP] = + { + .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SMART_STRIKE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PURIFY] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_REVELATION_DANCE] = + { + .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CORE_ENFORCER] = + { + .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TROP_KICK] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_INSTRUCT] = + { + .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BEAK_BLAST] = + { + .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CLANGING_SCALES] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRAGON_HAMMER] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + }, + + [MOVE_BRUTAL_SWING] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_AURORA_VEIL] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_HAIL}, + }, + + [MOVE_SHELL_TRAP] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FLEUR_CANNON] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PSYCHIC_FANGS] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STOMPING_TANTRUM] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SHADOW_BONE] = + { + .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = COMBO_STARTER_SHADOW_BONE, + .comboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH}, + }, + + [MOVE_ACCELEROCK] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_LIQUIDATION] = + { + .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_RAIN_DANCE}, + }, + + [MOVE_PRISMATIC_LASER] = + { + .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SPECTRAL_THIEF] = + { + .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SUNSTEEL_STRIKE] = + { + .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MOONGEIST_BEAM] = + { + .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TEARFUL_LOOK] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ZING_ZAP] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_CHARGE}, + }, + + [MOVE_NATURES_MADNESS] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MULTI_ATTACK] = + { + .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MIND_BLOWN] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PLASMA_FISTS] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PHOTON_GEYSER] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DOUBLE_IRON_BASH] = + { + .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DYNAMAX_CANNON] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_SNIPE_SHOT] = + { + .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_JAW_LOCK] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STUFF_CHEEKS] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_NO_RETREAT] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TAR_SHOT] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MAGIC_POWDER] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRAGON_DARTS] = + { + .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_TEATIME] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_OCTOLOCK] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BOLT_BEAK] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FISHIOUS_REND] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_COURT_CHANGE] = + { + .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_CLANGOROUS_SOUL] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BODY_PRESS] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DECORATE] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRUM_BEATING] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SNAP_TRAP] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_PYRO_BALL] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BEHEMOTH_BLADE] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_BEHEMOTH_BASH] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_AURA_WHEEL] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BREAKING_SWIPE] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_BRANCH_POKE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_OVERDRIVE] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_APPLE_ACID] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_GRAV_APPLE] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_SPIRIT_BREAK] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STRANGE_STEAM] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_LIFE_DEW] = + { + .effect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_OBSTRUCT] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_FALSE_SURRENDER] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_METEOR_ASSAULT] = + { + .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_ETERNABEAM] = + { + .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_STEEL_BEAM] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_EXPANDING_FORCE] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_PSYCHIC_TERRAIN} + }, + + [MOVE_STEEL_ROLLER] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_SCALE_SHOT] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_METEOR_BEAM] = + { + .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_SHELL_SIDE_ARM] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_MISTY_EXPLOSION] = + { + .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_MISTY_TERRAIN} + }, + + [MOVE_GRASSY_GLIDE] = + { + .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_GRASSY_TERRAIN} + }, + + [MOVE_RISING_VOLTAGE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN} + }, + + [MOVE_TERRAIN_PULSE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN, COMBO_STARTER_MISTY_TERRAIN, COMBO_STARTER_GRASSY_TERRAIN, COMBO_STARTER_PSYCHIC_TERRAIN}, + }, + + [MOVE_SKITTER_SMACK] = + { + .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_BURNING_JEALOUSY] = + { + .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_LASH_OUT] = + { + .effect = CONTEST_EFFECT_STARTLE_PREV_MON, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_POLTERGEIST] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_CORROSIVE_GAS] = + { + .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_COACHING] = + { + .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FLIP_TURN] = + { + .effect = CONTEST_EFFECT_AVOID_STARTLE, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_TRIPLE_AXEL] = + { + .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DUAL_WINGBEAT] = + { + .effect = CONTEST_EFFECT_REPETITION_NOT_BORING, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_SCORCHING_SANDS] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_JUNGLE_HEALING] = + { + .effect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_WICKED_BLOW] = + { + .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_SURGING_STRIKES] = + { + .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_THUNDER_CAGE] = + { + .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DRAGON_ENERGY] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_LATER, + .contestCategory = CONTEST_CATEGORY_COOL, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FREEZING_GLARE] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_CUTE, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_FIERY_WRATH] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_THUNDEROUS_KICK] = + { + .effect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_GLACIAL_LANCE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_LAST, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_ASTRAL_BARRAGE] = + { + .effect = CONTEST_EFFECT_BETTER_IF_FIRST, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0}, + }, + + [MOVE_EERIE_SPELL] = + { + .effect = CONTEST_EFFECT_BETTER_WHEN_LATER, + .contestCategory = CONTEST_CATEGORY_SMART, + .comboStarterId = 0, + .comboMoves = {0} + }, + + [MOVE_DIRE_CLAW] = {0}, // TODO + + [MOVE_PSYSHIELD_BASH] = {0}, // TODO + + [MOVE_POWER_SHIFT] = {0}, // TODO + + [MOVE_STONE_AXE] = {0}, // TODO + + [MOVE_SPRINGTIDE_STORM] = {0}, // TODO + + [MOVE_MYSTICAL_POWER] = {0}, // TODO + + [MOVE_RAGING_FURY] = {0}, // TODO + + [MOVE_WAVE_CRASH] = {0}, // TODO + + [MOVE_CHLOROBLAST] = {0}, // TODO + + [MOVE_MOUNTAIN_GALE] = {0}, // TODO + + [MOVE_VICTORY_DANCE] = {0}, // TODO + + [MOVE_HEADLONG_RUSH] = {0}, // TODO + + [MOVE_BARB_BARRAGE] = {0}, // TODO + + [MOVE_ESPER_WING] = {0}, // TODO + + [MOVE_BITTER_MALICE] = {0}, // TODO + + [MOVE_SHELTER] = {0}, // TODO + + [MOVE_TRIPLE_ARROWS] = {0}, // TODO + + [MOVE_INFERNAL_PARADE] = {0}, // TODO + + [MOVE_CEASELESS_EDGE] = {0}, // TODO + + [MOVE_BLEAKWIND_STORM] = {0}, // TODO + + [MOVE_WILDBOLT_STORM] = {0}, // TODO + + [MOVE_SANDSEAR_STORM] = {0}, // TODO + + [MOVE_LUNAR_BLESSING] = {0}, // TODO + + [MOVE_TAKE_HEART] = {0}, // TODO }; const struct ContestEffect gContestEffects[] = @@ -3126,75 +6260,6 @@ const struct ContestEffect gContestEffects[] = }, }; -// A lookup table with TRUE for each combo starter ID and FALSE for ID 0, -// which means "not a combo starter move". -const bool8 gComboStarterLookupTable[] = -{ - FALSE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE, - TRUE -}; - void (*const gContestEffectFuncs[])(void) = { ContestEffect_HighlyAppealing, diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index db801971ac..fb2ff5986e 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -99,8 +99,8 @@ #define CONTEST_OPPONENT_TREY 94 #define CONTEST_OPPONENT_LANE 95 -// All contest opponents have a common set of AI flags (which contains all of the actually -// useful AI scripts, as well as some dummys) and a random combination of 2-3 dummy flags. +// All contest opponents have a common set of AI flags (which contains all of the actually +// useful AI scripts, as well as some dummys) and a random combination of 2-3 dummy flags. // Seems that like the battle AI they had more plans for this than what ended up in the final game #define CONTEST_AI_SET_1 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21) #define CONTEST_AI_SET_2 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25) @@ -1166,7 +1166,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - [CONTEST_OPPONENT_ARIANA] = { + [CONTEST_OPPONENT_ARIANA] = { .species = SPECIES_KECLEON, .nickname = _("KECON"), .trainerName = _("ARIANA"), @@ -2010,7 +2010,7 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_CUBONE, .nickname = _("CUBIN"), .trainerName = _("COLTIN"), - .trainerGfxId = OBJ_EVENT_GFX_MAN_4, + .trainerGfxId = OBJ_EVENT_GFX_MAN_4, .aiFlags = CONTEST_AI_SET_2, .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, diff --git a/src/data/contest_text_tables.h b/src/data/contest_text_tables.h index f893bc66a6..64ad704a59 100644 --- a/src/data/contest_text_tables.h +++ b/src/data/contest_text_tables.h @@ -181,7 +181,7 @@ extern const u8 gText_CouldntImproveItsCondition[]; extern const u8 gText_BadConditionResultedInWeakAppeal[]; extern const u8 gText_MonWasUnaffected[]; extern const u8 gText_AttractedCrowdsAttention[]; - + // sContestConditions extern const u8 gText_Contest_Coolness[]; extern const u8 gText_Contest_Beauty[]; diff --git a/src/data/decoration/header.h b/src/data/decoration/header.h index c574988281..7a151808d3 100644 --- a/src/data/decoration/header.h +++ b/src/data/decoration/header.h @@ -11,7 +11,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SMALL_DESK, .tiles = DecorGfx_SMALL_DESK, }, - + [DECOR_SMALL_DESK] = { .id = DECOR_SMALL_DESK, @@ -23,7 +23,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SMALL_DESK, .tiles = DecorGfx_SMALL_DESK, }, - + [DECOR_POKEMON_DESK] = { .id = DECOR_POKEMON_DESK, @@ -35,7 +35,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_POKEMON_DESK, .tiles = DecorGfx_POKEMON_DESK, }, - + [DECOR_HEAVY_DESK] = { .id = DECOR_HEAVY_DESK, @@ -47,7 +47,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_HEAVY_DESK, .tiles = DecorGfx_HEAVY_DESK, }, - + [DECOR_RAGGED_DESK] = { .id = DECOR_RAGGED_DESK, @@ -59,7 +59,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_RAGGED_DESK, .tiles = DecorGfx_RAGGED_DESK, }, - + [DECOR_COMFORT_DESK] = { .id = DECOR_COMFORT_DESK, @@ -71,7 +71,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_COMFORT_DESK, .tiles = DecorGfx_COMFORT_DESK, }, - + [DECOR_PRETTY_DESK] = { .id = DECOR_PRETTY_DESK, @@ -83,7 +83,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_PRETTY_DESK, .tiles = DecorGfx_PRETTY_DESK, }, - + [DECOR_BRICK_DESK] = { .id = DECOR_BRICK_DESK, @@ -95,7 +95,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BRICK_DESK, .tiles = DecorGfx_BRICK_DESK, }, - + [DECOR_CAMP_DESK] = { .id = DECOR_CAMP_DESK, @@ -107,7 +107,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_CAMP_DESK, .tiles = DecorGfx_CAMP_DESK, }, - + [DECOR_HARD_DESK] = { .id = DECOR_HARD_DESK, @@ -119,7 +119,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_HARD_DESK, .tiles = DecorGfx_HARD_DESK, }, - + [DECOR_SMALL_CHAIR] = { .id = DECOR_SMALL_CHAIR, @@ -131,7 +131,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SMALL_CHAIR, .tiles = DecorGfx_SMALL_CHAIR, }, - + [DECOR_POKEMON_CHAIR] = { .id = DECOR_POKEMON_CHAIR, @@ -143,7 +143,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_POKEMON_CHAIR, .tiles = DecorGfx_POKEMON_CHAIR, }, - + [DECOR_HEAVY_CHAIR] = { .id = DECOR_HEAVY_CHAIR, @@ -155,7 +155,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_HEAVY_CHAIR, .tiles = DecorGfx_HEAVY_CHAIR, }, - + [DECOR_PRETTY_CHAIR] = { .id = DECOR_PRETTY_CHAIR, @@ -167,7 +167,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_PRETTY_CHAIR, .tiles = DecorGfx_PRETTY_CHAIR, }, - + [DECOR_COMFORT_CHAIR] = { .id = DECOR_COMFORT_CHAIR, @@ -179,7 +179,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_COMFORT_CHAIR, .tiles = DecorGfx_COMFORT_CHAIR, }, - + [DECOR_RAGGED_CHAIR] = { .id = DECOR_RAGGED_CHAIR, @@ -191,7 +191,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_RAGGED_CHAIR, .tiles = DecorGfx_RAGGED_CHAIR, }, - + [DECOR_BRICK_CHAIR] = { .id = DECOR_BRICK_CHAIR, @@ -203,7 +203,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BRICK_CHAIR, .tiles = DecorGfx_BRICK_CHAIR, }, - + [DECOR_CAMP_CHAIR] = { .id = DECOR_CAMP_CHAIR, @@ -215,7 +215,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_CAMP_CHAIR, .tiles = DecorGfx_CAMP_CHAIR, }, - + [DECOR_HARD_CHAIR] = { .id = DECOR_HARD_CHAIR, @@ -227,7 +227,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_HARD_CHAIR, .tiles = DecorGfx_HARD_CHAIR, }, - + [DECOR_RED_PLANT] = { .id = DECOR_RED_PLANT, @@ -239,7 +239,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_RED_PLANT, .tiles = DecorGfx_RED_PLANT, }, - + [DECOR_TROPICAL_PLANT] = { .id = DECOR_TROPICAL_PLANT, @@ -251,7 +251,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_TROPICAL_PLANT, .tiles = DecorGfx_TROPICAL_PLANT, }, - + [DECOR_PRETTY_FLOWERS] = { .id = DECOR_PRETTY_FLOWERS, @@ -263,7 +263,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_PRETTY_FLOWERS, .tiles = DecorGfx_PRETTY_FLOWERS, }, - + [DECOR_COLORFUL_PLANT] = { .id = DECOR_COLORFUL_PLANT, @@ -275,7 +275,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_COLORFUL_PLANT, .tiles = DecorGfx_COLORFUL_PLANT, }, - + [DECOR_BIG_PLANT] = { .id = DECOR_BIG_PLANT, @@ -287,7 +287,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BIG_PLANT, .tiles = DecorGfx_BIG_PLANT, }, - + [DECOR_GORGEOUS_PLANT] = { .id = DECOR_GORGEOUS_PLANT, @@ -299,7 +299,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_GORGEOUS_PLANT, .tiles = DecorGfx_GORGEOUS_PLANT, }, - + [DECOR_RED_BRICK] = { .id = DECOR_RED_BRICK, @@ -311,7 +311,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_RED_BRICK, .tiles = DecorGfx_RED_BRICK, }, - + [DECOR_YELLOW_BRICK] = { .id = DECOR_YELLOW_BRICK, @@ -323,7 +323,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_YELLOW_BRICK, .tiles = DecorGfx_YELLOW_BRICK, }, - + [DECOR_BLUE_BRICK] = { .id = DECOR_BLUE_BRICK, @@ -335,7 +335,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BLUE_BRICK, .tiles = DecorGfx_BLUE_BRICK, }, - + [DECOR_RED_BALLOON] = { .id = DECOR_RED_BALLOON, @@ -347,7 +347,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_RED_BALLOON, .tiles = DecorGfx_RED_BALLOON, }, - + [DECOR_BLUE_BALLOON] = { .id = DECOR_BLUE_BALLOON, @@ -359,7 +359,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BLUE_BALLOON, .tiles = DecorGfx_BLUE_BALLOON, }, - + [DECOR_YELLOW_BALLOON] = { .id = DECOR_YELLOW_BALLOON, @@ -371,7 +371,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_YELLOW_BALLOON, .tiles = DecorGfx_YELLOW_BALLOON, }, - + [DECOR_RED_TENT] = { .id = DECOR_RED_TENT, @@ -383,7 +383,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_RED_TENT, .tiles = DecorGfx_RED_TENT, }, - + [DECOR_BLUE_TENT] = { .id = DECOR_BLUE_TENT, @@ -395,7 +395,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BLUE_TENT, .tiles = DecorGfx_BLUE_TENT, }, - + [DECOR_SOLID_BOARD] = { .id = DECOR_SOLID_BOARD, @@ -407,7 +407,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SOLID_BOARD, .tiles = DecorGfx_SOLID_BOARD, }, - + [DECOR_SLIDE] = { .id = DECOR_SLIDE, @@ -419,7 +419,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SLIDE, .tiles = DecorGfx_SLIDE, }, - + [DECOR_FENCE_LENGTH] = { .id = DECOR_FENCE_LENGTH, @@ -431,7 +431,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_FENCE_LENGTH, .tiles = DecorGfx_FENCE_LENGTH, }, - + [DECOR_FENCE_WIDTH] = { .id = DECOR_FENCE_WIDTH, @@ -443,7 +443,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_FENCE_WIDTH, .tiles = DecorGfx_FENCE_WIDTH, }, - + [DECOR_TIRE] = { .id = DECOR_TIRE, @@ -455,7 +455,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_TIRE, .tiles = DecorGfx_TIRE, }, - + [DECOR_STAND] = { .id = DECOR_STAND, @@ -467,7 +467,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_STAND, .tiles = DecorGfx_STAND, }, - + [DECOR_MUD_BALL] = { .id = DECOR_MUD_BALL, @@ -479,7 +479,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_MUD_BALL, .tiles = DecorGfx_MUD_BALL, }, - + [DECOR_BREAKABLE_DOOR] = { .id = DECOR_BREAKABLE_DOOR, @@ -491,7 +491,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BREAKABLE_DOOR, .tiles = DecorGfx_BREAKABLE_DOOR, }, - + [DECOR_SAND_ORNAMENT] = { .id = DECOR_SAND_ORNAMENT, @@ -503,7 +503,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SAND_ORNAMENT, .tiles = DecorGfx_SAND_ORNAMENT, }, - + [DECOR_SILVER_SHIELD] = { .id = DECOR_SILVER_SHIELD, @@ -515,7 +515,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SILVER_SHIELD, .tiles = DecorGfx_SILVER_SHIELD, }, - + [DECOR_GOLD_SHIELD] = { .id = DECOR_GOLD_SHIELD, @@ -527,7 +527,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_GOLD_SHIELD, .tiles = DecorGfx_GOLD_SHIELD, }, - + [DECOR_GLASS_ORNAMENT] = { .id = DECOR_GLASS_ORNAMENT, @@ -539,7 +539,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_GLASS_ORNAMENT, .tiles = DecorGfx_GLASS_ORNAMENT, }, - + [DECOR_TV] = { .id = DECOR_TV, @@ -551,7 +551,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_TV, .tiles = DecorGfx_TV, }, - + [DECOR_ROUND_TV] = { .id = DECOR_ROUND_TV, @@ -563,7 +563,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_ROUND_TV, .tiles = DecorGfx_ROUND_TV, }, - + [DECOR_CUTE_TV] = { .id = DECOR_CUTE_TV, @@ -575,7 +575,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_CUTE_TV, .tiles = DecorGfx_CUTE_TV, }, - + [DECOR_GLITTER_MAT] = { .id = DECOR_GLITTER_MAT, @@ -587,7 +587,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_GLITTER_MAT, .tiles = DecorGfx_GLITTER_MAT, }, - + [DECOR_JUMP_MAT] = { .id = DECOR_JUMP_MAT, @@ -599,7 +599,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_JUMP_MAT, .tiles = DecorGfx_JUMP_MAT, }, - + [DECOR_SPIN_MAT] = { .id = DECOR_SPIN_MAT, @@ -611,7 +611,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SPIN_MAT, .tiles = DecorGfx_SPIN_MAT, }, - + [DECOR_C_LOW_NOTE_MAT] = { .id = DECOR_C_LOW_NOTE_MAT, @@ -623,7 +623,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_C_LOW_NOTE_MAT, .tiles = DecorGfx_C_LOW_NOTE_MAT, }, - + [DECOR_D_NOTE_MAT] = { .id = DECOR_D_NOTE_MAT, @@ -635,7 +635,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_D_NOTE_MAT, .tiles = DecorGfx_D_NOTE_MAT, }, - + [DECOR_E_NOTE_MAT] = { .id = DECOR_E_NOTE_MAT, @@ -647,7 +647,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_E_NOTE_MAT, .tiles = DecorGfx_E_NOTE_MAT, }, - + [DECOR_F_NOTE_MAT] = { .id = DECOR_F_NOTE_MAT, @@ -659,7 +659,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_F_NOTE_MAT, .tiles = DecorGfx_F_NOTE_MAT, }, - + [DECOR_G_NOTE_MAT] = { .id = DECOR_G_NOTE_MAT, @@ -671,7 +671,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_G_NOTE_MAT, .tiles = DecorGfx_G_NOTE_MAT, }, - + [DECOR_A_NOTE_MAT] = { .id = DECOR_A_NOTE_MAT, @@ -683,7 +683,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_A_NOTE_MAT, .tiles = DecorGfx_A_NOTE_MAT, }, - + [DECOR_B_NOTE_MAT] = { .id = DECOR_B_NOTE_MAT, @@ -695,7 +695,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_B_NOTE_MAT, .tiles = DecorGfx_B_NOTE_MAT, }, - + [DECOR_C_HIGH_NOTE_MAT] = { .id = DECOR_C_HIGH_NOTE_MAT, @@ -707,7 +707,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_C_HIGH_NOTE_MAT, .tiles = DecorGfx_C_HIGH_NOTE_MAT, }, - + [DECOR_SURF_MAT] = { .id = DECOR_SURF_MAT, @@ -719,7 +719,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SURF_MAT, .tiles = DecorGfx_SURF_MAT, }, - + [DECOR_THUNDER_MAT] = { .id = DECOR_THUNDER_MAT, @@ -731,7 +731,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_THUNDER_MAT, .tiles = DecorGfx_THUNDER_MAT, }, - + [DECOR_FIRE_BLAST_MAT] = { .id = DECOR_FIRE_BLAST_MAT, @@ -743,7 +743,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_FIRE_BLAST_MAT, .tiles = DecorGfx_FIRE_BLAST_MAT, }, - + [DECOR_POWDER_SNOW_MAT] = { .id = DECOR_POWDER_SNOW_MAT, @@ -755,7 +755,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_POWDER_SNOW_MAT, .tiles = DecorGfx_POWDER_SNOW_MAT, }, - + [DECOR_ATTRACT_MAT] = { .id = DECOR_ATTRACT_MAT, @@ -767,7 +767,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_ATTRACT_MAT, .tiles = DecorGfx_ATTRACT_MAT, }, - + [DECOR_FISSURE_MAT] = { .id = DECOR_FISSURE_MAT, @@ -779,7 +779,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_FISSURE_MAT, .tiles = DecorGfx_FISSURE_MAT, }, - + [DECOR_SPIKES_MAT] = { .id = DECOR_SPIKES_MAT, @@ -791,7 +791,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SPIKES_MAT, .tiles = DecorGfx_SPIKES_MAT, }, - + [DECOR_BALL_POSTER] = { .id = DECOR_BALL_POSTER, @@ -803,7 +803,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BALL_POSTER, .tiles = DecorGfx_BALL_POSTER, }, - + [DECOR_GREEN_POSTER] = { .id = DECOR_GREEN_POSTER, @@ -815,7 +815,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_GREEN_POSTER, .tiles = DecorGfx_GREEN_POSTER, }, - + [DECOR_RED_POSTER] = { .id = DECOR_RED_POSTER, @@ -827,7 +827,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_RED_POSTER, .tiles = DecorGfx_RED_POSTER, }, - + [DECOR_BLUE_POSTER] = { .id = DECOR_BLUE_POSTER, @@ -839,7 +839,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BLUE_POSTER, .tiles = DecorGfx_BLUE_POSTER, }, - + [DECOR_CUTE_POSTER] = { .id = DECOR_CUTE_POSTER, @@ -851,7 +851,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_CUTE_POSTER, .tiles = DecorGfx_CUTE_POSTER, }, - + [DECOR_PIKA_POSTER] = { .id = DECOR_PIKA_POSTER, @@ -863,7 +863,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_PIKA_POSTER, .tiles = DecorGfx_PIKA_POSTER, }, - + [DECOR_LONG_POSTER] = { .id = DECOR_LONG_POSTER, @@ -875,7 +875,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_LONG_POSTER, .tiles = DecorGfx_LONG_POSTER, }, - + [DECOR_SEA_POSTER] = { .id = DECOR_SEA_POSTER, @@ -887,7 +887,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SEA_POSTER, .tiles = DecorGfx_SEA_POSTER, }, - + [DECOR_SKY_POSTER] = { .id = DECOR_SKY_POSTER, @@ -899,7 +899,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SKY_POSTER, .tiles = DecorGfx_SKY_POSTER, }, - + [DECOR_KISS_POSTER] = { .id = DECOR_KISS_POSTER, @@ -911,7 +911,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_KISS_POSTER, .tiles = DecorGfx_KISS_POSTER, }, - + [DECOR_PICHU_DOLL] = { .id = DECOR_PICHU_DOLL, @@ -923,7 +923,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_PICHU_DOLL, .tiles = DecorGfx_PICHU_DOLL, }, - + [DECOR_PIKACHU_DOLL] = { .id = DECOR_PIKACHU_DOLL, @@ -935,7 +935,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_PIKACHU_DOLL, .tiles = DecorGfx_PIKACHU_DOLL, }, - + [DECOR_MARILL_DOLL] = { .id = DECOR_MARILL_DOLL, @@ -947,7 +947,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_MARILL_DOLL, .tiles = DecorGfx_MARILL_DOLL, }, - + [DECOR_TOGEPI_DOLL] = { .id = DECOR_TOGEPI_DOLL, @@ -959,7 +959,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_TOGEPI_DOLL, .tiles = DecorGfx_TOGEPI_DOLL, }, - + [DECOR_CYNDAQUIL_DOLL] = { .id = DECOR_CYNDAQUIL_DOLL, @@ -971,7 +971,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_CYNDAQUIL_DOLL, .tiles = DecorGfx_CYNDAQUIL_DOLL, }, - + [DECOR_CHIKORITA_DOLL] = { .id = DECOR_CHIKORITA_DOLL, @@ -983,7 +983,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_CHIKORITA_DOLL, .tiles = DecorGfx_CHIKORITA_DOLL, }, - + [DECOR_TOTODILE_DOLL] = { .id = DECOR_TOTODILE_DOLL, @@ -995,7 +995,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_TOTODILE_DOLL, .tiles = DecorGfx_TOTODILE_DOLL, }, - + [DECOR_JIGGLYPUFF_DOLL] = { .id = DECOR_JIGGLYPUFF_DOLL, @@ -1007,7 +1007,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_JIGGLYPUFF_DOLL, .tiles = DecorGfx_JIGGLYPUFF_DOLL, }, - + [DECOR_MEOWTH_DOLL] = { .id = DECOR_MEOWTH_DOLL, @@ -1019,7 +1019,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_MEOWTH_DOLL, .tiles = DecorGfx_MEOWTH_DOLL, }, - + [DECOR_CLEFAIRY_DOLL] = { .id = DECOR_CLEFAIRY_DOLL, @@ -1031,7 +1031,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_CLEFAIRY_DOLL, .tiles = DecorGfx_CLEFAIRY_DOLL, }, - + [DECOR_DITTO_DOLL] = { .id = DECOR_DITTO_DOLL, @@ -1043,7 +1043,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_DITTO_DOLL, .tiles = DecorGfx_DITTO_DOLL, }, - + [DECOR_SMOOCHUM_DOLL] = { .id = DECOR_SMOOCHUM_DOLL, @@ -1055,7 +1055,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SMOOCHUM_DOLL, .tiles = DecorGfx_SMOOCHUM_DOLL, }, - + [DECOR_TREECKO_DOLL] = { .id = DECOR_TREECKO_DOLL, @@ -1067,7 +1067,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_TREECKO_DOLL, .tiles = DecorGfx_TREECKO_DOLL, }, - + [DECOR_TORCHIC_DOLL] = { .id = DECOR_TORCHIC_DOLL, @@ -1079,7 +1079,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_TORCHIC_DOLL, .tiles = DecorGfx_TORCHIC_DOLL, }, - + [DECOR_MUDKIP_DOLL] = { .id = DECOR_MUDKIP_DOLL, @@ -1091,7 +1091,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_MUDKIP_DOLL, .tiles = DecorGfx_MUDKIP_DOLL, }, - + [DECOR_DUSKULL_DOLL] = { .id = DECOR_DUSKULL_DOLL, @@ -1103,7 +1103,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_DUSKULL_DOLL, .tiles = DecorGfx_DUSKULL_DOLL, }, - + [DECOR_WYNAUT_DOLL] = { .id = DECOR_WYNAUT_DOLL, @@ -1115,7 +1115,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_WYNAUT_DOLL, .tiles = DecorGfx_WYNAUT_DOLL, }, - + [DECOR_BALTOY_DOLL] = { .id = DECOR_BALTOY_DOLL, @@ -1127,7 +1127,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BALTOY_DOLL, .tiles = DecorGfx_BALTOY_DOLL, }, - + [DECOR_KECLEON_DOLL] = { .id = DECOR_KECLEON_DOLL, @@ -1139,7 +1139,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_KECLEON_DOLL, .tiles = DecorGfx_KECLEON_DOLL, }, - + [DECOR_AZURILL_DOLL] = { .id = DECOR_AZURILL_DOLL, @@ -1151,7 +1151,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_AZURILL_DOLL, .tiles = DecorGfx_AZURILL_DOLL, }, - + [DECOR_SKITTY_DOLL] = { .id = DECOR_SKITTY_DOLL, @@ -1163,7 +1163,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SKITTY_DOLL, .tiles = DecorGfx_SKITTY_DOLL, }, - + [DECOR_SWABLU_DOLL] = { .id = DECOR_SWABLU_DOLL, @@ -1175,7 +1175,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SWABLU_DOLL, .tiles = DecorGfx_SWABLU_DOLL, }, - + [DECOR_GULPIN_DOLL] = { .id = DECOR_GULPIN_DOLL, @@ -1187,7 +1187,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_GULPIN_DOLL, .tiles = DecorGfx_GULPIN_DOLL, }, - + [DECOR_LOTAD_DOLL] = { .id = DECOR_LOTAD_DOLL, @@ -1199,7 +1199,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_LOTAD_DOLL, .tiles = DecorGfx_LOTAD_DOLL, }, - + [DECOR_SEEDOT_DOLL] = { .id = DECOR_SEEDOT_DOLL, @@ -1211,7 +1211,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SEEDOT_DOLL, .tiles = DecorGfx_SEEDOT_DOLL, }, - + [DECOR_PIKA_CUSHION] = { .id = DECOR_PIKA_CUSHION, @@ -1223,7 +1223,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_PIKA_CUSHION, .tiles = DecorGfx_PIKA_CUSHION, }, - + [DECOR_ROUND_CUSHION] = { .id = DECOR_ROUND_CUSHION, @@ -1235,7 +1235,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_ROUND_CUSHION, .tiles = DecorGfx_ROUND_CUSHION, }, - + [DECOR_KISS_CUSHION] = { .id = DECOR_KISS_CUSHION, @@ -1247,7 +1247,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_KISS_CUSHION, .tiles = DecorGfx_KISS_CUSHION, }, - + [DECOR_ZIGZAG_CUSHION] = { .id = DECOR_ZIGZAG_CUSHION, @@ -1259,7 +1259,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_ZIGZAG_CUSHION, .tiles = DecorGfx_ZIGZAG_CUSHION, }, - + [DECOR_SPIN_CUSHION] = { .id = DECOR_SPIN_CUSHION, @@ -1271,7 +1271,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SPIN_CUSHION, .tiles = DecorGfx_SPIN_CUSHION, }, - + [DECOR_DIAMOND_CUSHION] = { .id = DECOR_DIAMOND_CUSHION, @@ -1283,7 +1283,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_DIAMOND_CUSHION, .tiles = DecorGfx_DIAMOND_CUSHION, }, - + [DECOR_BALL_CUSHION] = { .id = DECOR_BALL_CUSHION, @@ -1295,7 +1295,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BALL_CUSHION, .tiles = DecorGfx_BALL_CUSHION, }, - + [DECOR_GRASS_CUSHION] = { .id = DECOR_GRASS_CUSHION, @@ -1307,7 +1307,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_GRASS_CUSHION, .tiles = DecorGfx_GRASS_CUSHION, }, - + [DECOR_FIRE_CUSHION] = { .id = DECOR_FIRE_CUSHION, @@ -1319,7 +1319,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_FIRE_CUSHION, .tiles = DecorGfx_FIRE_CUSHION, }, - + [DECOR_WATER_CUSHION] = { .id = DECOR_WATER_CUSHION, @@ -1331,7 +1331,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_WATER_CUSHION, .tiles = DecorGfx_WATER_CUSHION, }, - + [DECOR_SNORLAX_DOLL] = { .id = DECOR_SNORLAX_DOLL, @@ -1343,7 +1343,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_SNORLAX_DOLL, .tiles = DecorGfx_SNORLAX_DOLL, }, - + [DECOR_RHYDON_DOLL] = { .id = DECOR_RHYDON_DOLL, @@ -1355,7 +1355,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_RHYDON_DOLL, .tiles = DecorGfx_RHYDON_DOLL, }, - + [DECOR_LAPRAS_DOLL] = { .id = DECOR_LAPRAS_DOLL, @@ -1367,7 +1367,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_LAPRAS_DOLL, .tiles = DecorGfx_LAPRAS_DOLL, }, - + [DECOR_VENUSAUR_DOLL] = { .id = DECOR_VENUSAUR_DOLL, @@ -1379,7 +1379,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_VENUSAUR_DOLL, .tiles = DecorGfx_VENUSAUR_DOLL, }, - + [DECOR_CHARIZARD_DOLL] = { .id = DECOR_CHARIZARD_DOLL, @@ -1391,7 +1391,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_CHARIZARD_DOLL, .tiles = DecorGfx_CHARIZARD_DOLL, }, - + [DECOR_BLASTOISE_DOLL] = { .id = DECOR_BLASTOISE_DOLL, @@ -1403,7 +1403,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_BLASTOISE_DOLL, .tiles = DecorGfx_BLASTOISE_DOLL, }, - + [DECOR_WAILMER_DOLL] = { .id = DECOR_WAILMER_DOLL, @@ -1415,7 +1415,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_WAILMER_DOLL, .tiles = DecorGfx_WAILMER_DOLL, }, - + [DECOR_REGIROCK_DOLL] = { .id = DECOR_REGIROCK_DOLL, @@ -1427,7 +1427,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_REGIROCK_DOLL, .tiles = DecorGfx_REGIROCK_DOLL, }, - + [DECOR_REGICE_DOLL] = { .id = DECOR_REGICE_DOLL, @@ -1439,7 +1439,7 @@ const struct Decoration gDecorations[] = .description = DecorDesc_REGICE_DOLL, .tiles = DecorGfx_REGICE_DOLL, }, - + [DECOR_REGISTEEL_DOLL] = { .id = DECOR_REGISTEEL_DOLL, diff --git a/src/data/decoration/icon.h b/src/data/decoration/icon.h index b29dab20f3..03a0e06695 100644 --- a/src/data/decoration/icon.h +++ b/src/data/decoration/icon.h @@ -1,4 +1,4 @@ -const u32 *const gDecorIconTable[][2] = +const u32 *const gDecorIconTable[][2] = { [DECOR_NONE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, [DECOR_SMALL_DESK] = {NULL, NULL}, diff --git a/src/data/easy_chat/easy_chat_group_pokemon2.h b/src/data/easy_chat/easy_chat_group_pokemon2.h index 44dce0cc84..331c5ac6c3 100755 --- a/src/data/easy_chat/easy_chat_group_pokemon2.h +++ b/src/data/easy_chat/easy_chat_group_pokemon2.h @@ -1,253 +1,253 @@ const u16 gEasyChatGroup_Pokemon2[] = { - SPECIES_ABRA, - SPECIES_AERODACTYL, - SPECIES_AIPOM, - SPECIES_ALAKAZAM, - SPECIES_AMPHAROS, - SPECIES_ARBOK, - SPECIES_ARCANINE, - SPECIES_ARIADOS, - SPECIES_ARTICUNO, - SPECIES_AZUMARILL, - SPECIES_BAYLEEF, - SPECIES_BEEDRILL, - SPECIES_BELLOSSOM, - SPECIES_BELLSPROUT, - SPECIES_BLASTOISE, - SPECIES_BLISSEY, - SPECIES_BULBASAUR, - SPECIES_BUTTERFREE, - SPECIES_CATERPIE, - SPECIES_CELEBI, - SPECIES_CHANSEY, - SPECIES_CHARIZARD, - SPECIES_CHARMANDER, - SPECIES_CHARMELEON, - SPECIES_CHIKORITA, - SPECIES_CHINCHOU, - SPECIES_CLEFABLE, - SPECIES_CLEFAIRY, - SPECIES_CLEFFA, - SPECIES_CLOYSTER, - SPECIES_CORSOLA, - SPECIES_CROBAT, - SPECIES_CROCONAW, - SPECIES_CUBONE, - SPECIES_CYNDAQUIL, - SPECIES_DELIBIRD, - SPECIES_DEWGONG, - SPECIES_DIGLETT, - SPECIES_DITTO, - SPECIES_DODRIO, - SPECIES_DODUO, - SPECIES_DONPHAN, - SPECIES_DRAGONAIR, - SPECIES_DRAGONITE, - SPECIES_DRATINI, - SPECIES_DROWZEE, - SPECIES_DUGTRIO, - SPECIES_DUNSPARCE, - SPECIES_EEVEE, - SPECIES_EKANS, - SPECIES_ELECTABUZZ, - SPECIES_ELECTRODE, - SPECIES_ELEKID, - SPECIES_ENTEI, - SPECIES_ESPEON, - SPECIES_EXEGGCUTE, - SPECIES_EXEGGUTOR, - SPECIES_FARFETCHD, - SPECIES_FEAROW, - SPECIES_FERALIGATR, - SPECIES_FLAAFFY, - SPECIES_FLAREON, - SPECIES_FORRETRESS, - SPECIES_FURRET, - SPECIES_GASTLY, - SPECIES_GENGAR, - SPECIES_GEODUDE, - SPECIES_GIRAFARIG, - SPECIES_GLIGAR, - SPECIES_GLOOM, - SPECIES_GOLBAT, - SPECIES_GOLDEEN, - SPECIES_GOLDUCK, - SPECIES_GOLEM, - SPECIES_GRANBULL, - SPECIES_GRAVELER, - SPECIES_GRIMER, - SPECIES_GROWLITHE, - SPECIES_GYARADOS, - SPECIES_HAUNTER, - SPECIES_HERACROSS, - SPECIES_HITMONCHAN, - SPECIES_HITMONLEE, - SPECIES_HITMONTOP, - SPECIES_HO_OH, - SPECIES_HOOTHOOT, - SPECIES_HOPPIP, - SPECIES_HORSEA, - SPECIES_HOUNDOOM, - SPECIES_HOUNDOUR, - SPECIES_HYPNO, - SPECIES_IGGLYBUFF, - SPECIES_IVYSAUR, - SPECIES_JIGGLYPUFF, - SPECIES_JOLTEON, - SPECIES_JUMPLUFF, - SPECIES_JYNX, - SPECIES_KABUTO, - SPECIES_KABUTOPS, - SPECIES_KADABRA, - SPECIES_KAKUNA, - SPECIES_KANGASKHAN, - SPECIES_KINGDRA, - SPECIES_KINGLER, - SPECIES_KOFFING, - SPECIES_KRABBY, - SPECIES_LANTURN, - SPECIES_LAPRAS, - SPECIES_LARVITAR, - SPECIES_LEDIAN, - SPECIES_LEDYBA, - SPECIES_LICKITUNG, - SPECIES_LUGIA, - SPECIES_MACHAMP, - SPECIES_MACHOKE, - SPECIES_MACHOP, - SPECIES_MAGBY, - SPECIES_MAGCARGO, - SPECIES_MAGIKARP, - SPECIES_MAGMAR, - SPECIES_MAGNEMITE, - SPECIES_MAGNETON, - SPECIES_MANKEY, - SPECIES_MANTINE, - SPECIES_MAREEP, - SPECIES_MARILL, - SPECIES_MAROWAK, - SPECIES_MEGANIUM, - SPECIES_MEOWTH, - SPECIES_METAPOD, - SPECIES_MEW, - SPECIES_MEWTWO, - SPECIES_MILTANK, - SPECIES_MISDREAVUS, - SPECIES_MOLTRES, - SPECIES_MR_MIME, - SPECIES_MUK, - SPECIES_MURKROW, - SPECIES_NATU, - SPECIES_NIDOKING, - SPECIES_NIDOQUEEN, - SPECIES_NIDORAN_F, - SPECIES_NIDORAN_M, - SPECIES_NIDORINA, - SPECIES_NIDORINO, - SPECIES_NINETALES, - SPECIES_NOCTOWL, - SPECIES_OCTILLERY, - SPECIES_ODDISH, - SPECIES_OMANYTE, - SPECIES_OMASTAR, - SPECIES_ONIX, - SPECIES_PARAS, - SPECIES_PARASECT, - SPECIES_PERSIAN, - SPECIES_PHANPY, - SPECIES_PICHU, - SPECIES_PIDGEOT, - SPECIES_PIDGEOTTO, - SPECIES_PIDGEY, - SPECIES_PIKACHU, - SPECIES_PILOSWINE, - SPECIES_PINECO, - SPECIES_PINSIR, - SPECIES_POLITOED, - SPECIES_POLIWAG, - SPECIES_POLIWHIRL, - SPECIES_POLIWRATH, - SPECIES_PONYTA, - SPECIES_PORYGON, - SPECIES_PORYGON2, - SPECIES_PRIMEAPE, - SPECIES_PSYDUCK, - SPECIES_PUPITAR, - SPECIES_QUAGSIRE, - SPECIES_QUILAVA, - SPECIES_QWILFISH, - SPECIES_RAICHU, - SPECIES_RAIKOU, - SPECIES_RAPIDASH, - SPECIES_RATICATE, - SPECIES_RATTATA, - SPECIES_REMORAID, - SPECIES_RHYDON, - SPECIES_RHYHORN, - SPECIES_SANDSHREW, - SPECIES_SANDSLASH, - SPECIES_SCIZOR, - SPECIES_SCYTHER, - SPECIES_SEADRA, - SPECIES_SEAKING, - SPECIES_SEEL, - SPECIES_SENTRET, - SPECIES_SHELLDER, - SPECIES_SHUCKLE, - SPECIES_SKARMORY, - SPECIES_SKIPLOOM, - SPECIES_SLOWBRO, - SPECIES_SLOWKING, - SPECIES_SLOWPOKE, - SPECIES_SLUGMA, - SPECIES_SMEARGLE, - SPECIES_SMOOCHUM, - SPECIES_SNEASEL, - SPECIES_SNORLAX, - SPECIES_SNUBBULL, - SPECIES_SPEAROW, - SPECIES_SPINARAK, - SPECIES_SQUIRTLE, - SPECIES_STANTLER, - SPECIES_STARMIE, - SPECIES_STARYU, - SPECIES_STEELIX, - SPECIES_SUDOWOODO, - SPECIES_SUICUNE, - SPECIES_SUNFLORA, - SPECIES_SUNKERN, - SPECIES_SWINUB, - SPECIES_TANGELA, - SPECIES_TAUROS, - SPECIES_TEDDIURSA, - SPECIES_TENTACOOL, - SPECIES_TENTACRUEL, - SPECIES_TOGEPI, - SPECIES_TOGETIC, - SPECIES_TOTODILE, - SPECIES_TYPHLOSION, - SPECIES_TYRANITAR, - SPECIES_TYROGUE, - SPECIES_UMBREON, - SPECIES_UNOWN, - SPECIES_URSARING, - SPECIES_VAPOREON, - SPECIES_VENOMOTH, - SPECIES_VENONAT, - SPECIES_VENUSAUR, - SPECIES_VICTREEBEL, - SPECIES_VILEPLUME, - SPECIES_VOLTORB, - SPECIES_VULPIX, - SPECIES_WARTORTLE, - SPECIES_WEEDLE, - SPECIES_WEEPINBELL, - SPECIES_WEEZING, - SPECIES_WIGGLYTUFF, - SPECIES_WOBBUFFET, - SPECIES_WOOPER, - SPECIES_XATU, - SPECIES_YANMA, - SPECIES_ZAPDOS, - SPECIES_ZUBAT, + SPECIES_ABRA, + SPECIES_AERODACTYL, + SPECIES_AIPOM, + SPECIES_ALAKAZAM, + SPECIES_AMPHAROS, + SPECIES_ARBOK, + SPECIES_ARCANINE, + SPECIES_ARIADOS, + SPECIES_ARTICUNO, + SPECIES_AZUMARILL, + SPECIES_BAYLEEF, + SPECIES_BEEDRILL, + SPECIES_BELLOSSOM, + SPECIES_BELLSPROUT, + SPECIES_BLASTOISE, + SPECIES_BLISSEY, + SPECIES_BULBASAUR, + SPECIES_BUTTERFREE, + SPECIES_CATERPIE, + SPECIES_CELEBI, + SPECIES_CHANSEY, + SPECIES_CHARIZARD, + SPECIES_CHARMANDER, + SPECIES_CHARMELEON, + SPECIES_CHIKORITA, + SPECIES_CHINCHOU, + SPECIES_CLEFABLE, + SPECIES_CLEFAIRY, + SPECIES_CLEFFA, + SPECIES_CLOYSTER, + SPECIES_CORSOLA, + SPECIES_CROBAT, + SPECIES_CROCONAW, + SPECIES_CUBONE, + SPECIES_CYNDAQUIL, + SPECIES_DELIBIRD, + SPECIES_DEWGONG, + SPECIES_DIGLETT, + SPECIES_DITTO, + SPECIES_DODRIO, + SPECIES_DODUO, + SPECIES_DONPHAN, + SPECIES_DRAGONAIR, + SPECIES_DRAGONITE, + SPECIES_DRATINI, + SPECIES_DROWZEE, + SPECIES_DUGTRIO, + SPECIES_DUNSPARCE, + SPECIES_EEVEE, + SPECIES_EKANS, + SPECIES_ELECTABUZZ, + SPECIES_ELECTRODE, + SPECIES_ELEKID, + SPECIES_ENTEI, + SPECIES_ESPEON, + SPECIES_EXEGGCUTE, + SPECIES_EXEGGUTOR, + SPECIES_FARFETCHD, + SPECIES_FEAROW, + SPECIES_FERALIGATR, + SPECIES_FLAAFFY, + SPECIES_FLAREON, + SPECIES_FORRETRESS, + SPECIES_FURRET, + SPECIES_GASTLY, + SPECIES_GENGAR, + SPECIES_GEODUDE, + SPECIES_GIRAFARIG, + SPECIES_GLIGAR, + SPECIES_GLOOM, + SPECIES_GOLBAT, + SPECIES_GOLDEEN, + SPECIES_GOLDUCK, + SPECIES_GOLEM, + SPECIES_GRANBULL, + SPECIES_GRAVELER, + SPECIES_GRIMER, + SPECIES_GROWLITHE, + SPECIES_GYARADOS, + SPECIES_HAUNTER, + SPECIES_HERACROSS, + SPECIES_HITMONCHAN, + SPECIES_HITMONLEE, + SPECIES_HITMONTOP, + SPECIES_HO_OH, + SPECIES_HOOTHOOT, + SPECIES_HOPPIP, + SPECIES_HORSEA, + SPECIES_HOUNDOOM, + SPECIES_HOUNDOUR, + SPECIES_HYPNO, + SPECIES_IGGLYBUFF, + SPECIES_IVYSAUR, + SPECIES_JIGGLYPUFF, + SPECIES_JOLTEON, + SPECIES_JUMPLUFF, + SPECIES_JYNX, + SPECIES_KABUTO, + SPECIES_KABUTOPS, + SPECIES_KADABRA, + SPECIES_KAKUNA, + SPECIES_KANGASKHAN, + SPECIES_KINGDRA, + SPECIES_KINGLER, + SPECIES_KOFFING, + SPECIES_KRABBY, + SPECIES_LANTURN, + SPECIES_LAPRAS, + SPECIES_LARVITAR, + SPECIES_LEDIAN, + SPECIES_LEDYBA, + SPECIES_LICKITUNG, + SPECIES_LUGIA, + SPECIES_MACHAMP, + SPECIES_MACHOKE, + SPECIES_MACHOP, + SPECIES_MAGBY, + SPECIES_MAGCARGO, + SPECIES_MAGIKARP, + SPECIES_MAGMAR, + SPECIES_MAGNEMITE, + SPECIES_MAGNETON, + SPECIES_MANKEY, + SPECIES_MANTINE, + SPECIES_MAREEP, + SPECIES_MARILL, + SPECIES_MAROWAK, + SPECIES_MEGANIUM, + SPECIES_MEOWTH, + SPECIES_METAPOD, + SPECIES_MEW, + SPECIES_MEWTWO, + SPECIES_MILTANK, + SPECIES_MISDREAVUS, + SPECIES_MOLTRES, + SPECIES_MR_MIME, + SPECIES_MUK, + SPECIES_MURKROW, + SPECIES_NATU, + SPECIES_NIDOKING, + SPECIES_NIDOQUEEN, + SPECIES_NIDORAN_F, + SPECIES_NIDORAN_M, + SPECIES_NIDORINA, + SPECIES_NIDORINO, + SPECIES_NINETALES, + SPECIES_NOCTOWL, + SPECIES_OCTILLERY, + SPECIES_ODDISH, + SPECIES_OMANYTE, + SPECIES_OMASTAR, + SPECIES_ONIX, + SPECIES_PARAS, + SPECIES_PARASECT, + SPECIES_PERSIAN, + SPECIES_PHANPY, + SPECIES_PICHU, + SPECIES_PIDGEOT, + SPECIES_PIDGEOTTO, + SPECIES_PIDGEY, + SPECIES_PIKACHU, + SPECIES_PILOSWINE, + SPECIES_PINECO, + SPECIES_PINSIR, + SPECIES_POLITOED, + SPECIES_POLIWAG, + SPECIES_POLIWHIRL, + SPECIES_POLIWRATH, + SPECIES_PONYTA, + SPECIES_PORYGON, + SPECIES_PORYGON2, + SPECIES_PRIMEAPE, + SPECIES_PSYDUCK, + SPECIES_PUPITAR, + SPECIES_QUAGSIRE, + SPECIES_QUILAVA, + SPECIES_QWILFISH, + SPECIES_RAICHU, + SPECIES_RAIKOU, + SPECIES_RAPIDASH, + SPECIES_RATICATE, + SPECIES_RATTATA, + SPECIES_REMORAID, + SPECIES_RHYDON, + SPECIES_RHYHORN, + SPECIES_SANDSHREW, + SPECIES_SANDSLASH, + SPECIES_SCIZOR, + SPECIES_SCYTHER, + SPECIES_SEADRA, + SPECIES_SEAKING, + SPECIES_SEEL, + SPECIES_SENTRET, + SPECIES_SHELLDER, + SPECIES_SHUCKLE, + SPECIES_SKARMORY, + SPECIES_SKIPLOOM, + SPECIES_SLOWBRO, + SPECIES_SLOWKING, + SPECIES_SLOWPOKE, + SPECIES_SLUGMA, + SPECIES_SMEARGLE, + SPECIES_SMOOCHUM, + SPECIES_SNEASEL, + SPECIES_SNORLAX, + SPECIES_SNUBBULL, + SPECIES_SPEAROW, + SPECIES_SPINARAK, + SPECIES_SQUIRTLE, + SPECIES_STANTLER, + SPECIES_STARMIE, + SPECIES_STARYU, + SPECIES_STEELIX, + SPECIES_SUDOWOODO, + SPECIES_SUICUNE, + SPECIES_SUNFLORA, + SPECIES_SUNKERN, + SPECIES_SWINUB, + SPECIES_TANGELA, + SPECIES_TAUROS, + SPECIES_TEDDIURSA, + SPECIES_TENTACOOL, + SPECIES_TENTACRUEL, + SPECIES_TOGEPI, + SPECIES_TOGETIC, + SPECIES_TOTODILE, + SPECIES_TYPHLOSION, + SPECIES_TYRANITAR, + SPECIES_TYROGUE, + SPECIES_UMBREON, + SPECIES_UNOWN, + SPECIES_URSARING, + SPECIES_VAPOREON, + SPECIES_VENOMOTH, + SPECIES_VENONAT, + SPECIES_VENUSAUR, + SPECIES_VICTREEBEL, + SPECIES_VILEPLUME, + SPECIES_VOLTORB, + SPECIES_VULPIX, + SPECIES_WARTORTLE, + SPECIES_WEEDLE, + SPECIES_WEEPINBELL, + SPECIES_WEEZING, + SPECIES_WIGGLYTUFF, + SPECIES_WOBBUFFET, + SPECIES_WOOPER, + SPECIES_XATU, + SPECIES_YANMA, + SPECIES_ZAPDOS, + SPECIES_ZUBAT, }; diff --git a/src/data/easy_chat/easy_chat_words_by_letter.h b/src/data/easy_chat/easy_chat_words_by_letter.h index df6524b173..8bfe237296 100755 --- a/src/data/easy_chat/easy_chat_words_by_letter.h +++ b/src/data/easy_chat/easy_chat_words_by_letter.h @@ -1,5 +1,4 @@ #include "easy_chat.h" -#include "constants/easy_chat.h" #define DOUBLE_SPECIES_NAME EC_EMPTY_WORD, 2, diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index 54145efbcc..938b6bfc55 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -29,8 +29,8 @@ static const struct SpriteFrameImage sPicTable_ShadowExtraLarge[] = { }; const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_8x8, .anims = sAnimTable_Shadow, .images = sPicTable_ShadowSmall, @@ -39,8 +39,8 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = { }; const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_Shadow, .images = sPicTable_ShadowMedium, @@ -49,8 +49,8 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = { }; const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_32x8, .anims = sAnimTable_Shadow, .images = sPicTable_ShadowLarge, @@ -59,8 +59,8 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = { }; const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowExtraLarge = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_64x32, .anims = sAnimTable_Shadow, .images = sPicTable_ShadowExtraLarge, @@ -92,7 +92,7 @@ static const union AnimCmd *const sAnimTable_TallGrass[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrass = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_TallGrass, @@ -128,7 +128,7 @@ static const union AnimCmd *const sAnimTable_Ripple[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_Ripple = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Ripple, @@ -161,7 +161,7 @@ static const union AnimCmd *const sAnimTable_Ash[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_Ash = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Ash, @@ -209,8 +209,8 @@ static const union AnimCmd *const sAnimTable_SurfBlob[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_32x32, .anims = sAnimTable_SurfBlob, .images = sPicTable_SurfBlob, @@ -266,8 +266,8 @@ static const union AnimCmd *const sAnimTable_Arrow[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Arrow, .images = sPicTable_Arrow, @@ -295,7 +295,7 @@ static const union AnimCmd *const sAnimTable_GroundImpactDust[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_GroundImpactDust, @@ -326,7 +326,7 @@ static const union AnimCmd *const sAnimTable_JumpTallGrass[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpTallGrass = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_JumpTallGrass, @@ -374,7 +374,7 @@ static const union AnimCmd *const sAnimTable_SandFootprints[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_SandFootprints, @@ -422,7 +422,7 @@ static const union AnimCmd *const sAnimTable_DeepSandFootprints[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_DeepSandFootprints, @@ -500,7 +500,7 @@ static const union AnimCmd *const sAnimTable_BikeTireTracks[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_BikeTireTracks, @@ -531,7 +531,7 @@ static const union AnimCmd *const sAnimTable_JumpBigSplash[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpBigSplash = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_JumpBigSplash, @@ -572,7 +572,7 @@ static const union AnimCmd *const sAnimTable_Splash[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_Splash = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_Splash, @@ -601,7 +601,7 @@ static const union AnimCmd *const sAnimTable_JumpSmallSplash[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_JumpSmallSplash, @@ -635,7 +635,7 @@ static const union AnimCmd *const sAnimTable_LongGrass[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_LongGrass, @@ -670,7 +670,7 @@ static const union AnimCmd *const sAnimTable_JumpLongGrass[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_JumpLongGrass, @@ -711,7 +711,7 @@ static const union AnimCmd *const sAnimTable_UnusedGrass[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_UnusedGrass, @@ -744,7 +744,7 @@ static const union AnimCmd *const sAnimTable_UnusedGrass2[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass2 = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_UnusedGrass2, @@ -775,7 +775,7 @@ static const union AnimCmd *const sAnimTable_UnusedSand[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedSand = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_UnusedSand, @@ -804,7 +804,7 @@ static const union AnimCmd *const sAnimTable_SandPile[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_SandPile = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_SandPile, @@ -837,7 +837,7 @@ static const union AnimCmd *const sAnimTable_WaterSurfacing[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_WaterSurfacing = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_WaterSurfacing, @@ -882,7 +882,7 @@ static const union AffineAnimCmd *const sAffineAnims_ReflectionDistortion[] = const struct SpriteTemplate gFieldEffectObjectTemplate_ReflectionDistortion = { .tileTag = 0x0, - .paletteTag = 0xFFFF, + .paletteTag = TAG_NONE, .oam = &gDummyOamData, .anims = gDummySpriteAnimTable, .images = NULL, @@ -930,8 +930,8 @@ static const union AnimCmd *const sAnimTable_Sparkle[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Sparkle, .images = sPicTable_Sparkle, @@ -974,8 +974,8 @@ static const union AnimCmd *const sAnimTable_TreeDisguise[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_TreeDisguise, .images = sPicTable_TreeDisguise, @@ -1018,8 +1018,8 @@ static const union AnimCmd *const sAnimTable_MountainDisguise[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_MountainDisguise, .images = sPicTable_MountainDisguise, @@ -1038,8 +1038,8 @@ static const struct SpriteFrameImage sPicTable_SandDisguisePlaceholder[] = { }; const struct SpriteTemplate gFieldEffectObjectTemplate_SandDisguisePlaceholder = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_TreeDisguise, .images = sPicTable_SandDisguisePlaceholder, @@ -1063,8 +1063,8 @@ static const union AnimCmd *const sAnimTable_Bird[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_Bird = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_32x32, .anims = sAnimTable_Bird, .images = sPicTable_Bird, @@ -1090,7 +1090,7 @@ static const union AnimCmd *const sAnimTable_ShortGrass[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_ShortGrass, @@ -1115,7 +1115,7 @@ static const union AnimCmd *const sAnimTable_HotSpringsWater[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_HotSpringsWater, @@ -1149,12 +1149,12 @@ static const union AnimCmd *const sAnimTable_AshPuff[] = const struct SpriteTemplate gFieldEffectObjectTemplate_AshPuff = { - .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_ASH, - .oam = &gObjectEventBaseOam_16x16, - .anims = sAnimTable_AshPuff, - .images = sPicTable_AshPuff, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = FLDEFF_PAL_TAG_ASH, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_AshPuff, + .images = sPicTable_AshPuff, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_AshPuff }; @@ -1183,14 +1183,14 @@ static const union AnimCmd *const sAnimTable_AshLaunch[] = sAnim_AshLaunch, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch = +const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch = { - .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_ASH, - .oam = &gObjectEventBaseOam_16x16, - .anims = sAnimTable_AshLaunch, - .images = sPicTable_AshLaunch, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = FLDEFF_PAL_TAG_ASH, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_AshLaunch, + .images = sPicTable_AshLaunch, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_AshLaunch }; @@ -1224,7 +1224,7 @@ static const union AnimCmd *const sAnimTable_Bubbles[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_Bubbles, @@ -1252,7 +1252,7 @@ static const union AnimCmd *const sAnimTable_SmallSparkle[] = }; const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_SMALL_SPARKLE, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_SmallSparkle, @@ -1272,13 +1272,13 @@ static const union AnimCmd *const sAnimTable_RayquazaSpotlightEffect[] = { sAnim_RayquazaSpotlightEffect, }; -const struct SpriteFrameImage sPicTable_RayquazaSpotlightEffect[] = { +static const struct SpriteFrameImage sPicTable_RayquazaSpotlightEffect[] = { overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 0), }; const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &gObjectEventBaseOam_32x32, .anims = sAnimTable_RayquazaSpotlightEffect, .images = sPicTable_RayquazaSpotlightEffect, diff --git a/src/data/graphics/berries.h b/src/data/graphics/berries.h index eb3f9f4dc7..36658427f9 100644 --- a/src/data/graphics/berries.h +++ b/src/data/graphics/berries.h @@ -1,18 +1,18 @@ -const u32 gBerryCheck_Gfx[] = INCBIN_U32("graphics/interface/check_berry.4bpp.lz"); -const u32 gBerryCheck_Pal[] = INCBIN_U32("graphics/interface/check_berry.gbapal.lz"); +const u32 gBerryCheck_Gfx[] = INCBIN_U32("graphics/bag/check_berry.4bpp.lz"); +const u32 gBerryCheck_Pal[] = INCBIN_U32("graphics/bag/check_berry.gbapal.lz"); -const u32 gBerryTag_Gfx[] = INCBIN_U32("graphics/interface/berry_tag.bin.lz"); -const u32 gBerryTag_Pal[] = INCBIN_U32("graphics/interface/berry_tag_title.bin.lz"); +const u32 gBerryTag_Gfx[] = INCBIN_U32("graphics/bag/berry_tag.bin.lz"); +const u32 gBerryTag_Pal[] = INCBIN_U32("graphics/bag/berry_tag_title.bin.lz"); -const u32 gBerryCheckCircle_Gfx[] = INCBIN_U32("graphics/interface/check_berry_circle.4bpp.lz"); +const u32 gBerryCheckCircle_Gfx[] = INCBIN_U32("graphics/bag/check_berry_circle.4bpp.lz"); const u32 gBerryPic_Cheri[] = INCBIN_U32("graphics/berries/cheri.4bpp.lz"); -const u32 gBerryPic_Oran[] = INCBIN_U32("graphics/berries/oran.4bpp.lz"); +const u32 gBerryPic_Chesto[] = INCBIN_U32("graphics/berries/chesto.4bpp.lz"); const u32 gBerryPic_Pecha[] = INCBIN_U32("graphics/berries/pecha.4bpp.lz"); const u32 gBerryPic_Rawst[] = INCBIN_U32("graphics/berries/rawst.4bpp.lz"); const u32 gBerryPic_Aspear[] = INCBIN_U32("graphics/berries/aspear.4bpp.lz"); const u32 gBerryPic_Leppa[] = INCBIN_U32("graphics/berries/leppa.4bpp.lz"); -const u32 gBerryPic_Chesto[] = INCBIN_U32("graphics/berries/chesto.4bpp.lz"); +const u32 gBerryPic_Oran[] = INCBIN_U32("graphics/berries/oran.4bpp.lz"); const u32 gBerryPic_Persim[] = INCBIN_U32("graphics/berries/persim.4bpp.lz"); const u32 gBerryPic_Lum[] = INCBIN_U32("graphics/berries/lum.4bpp.lz"); const u32 gBerryPic_Sitrus[] = INCBIN_U32("graphics/berries/sitrus.4bpp.lz"); @@ -41,6 +41,24 @@ const u32 gBerryPic_Pamtre[] = INCBIN_U32("graphics/berries/pamtre.4bpp.lz"); const u32 gBerryPic_Watmel[] = INCBIN_U32("graphics/berries/watmel.4bpp.lz"); const u32 gBerryPic_Durin[] = INCBIN_U32("graphics/berries/durin.4bpp.lz"); const u32 gBerryPic_Belue[] = INCBIN_U32("graphics/berries/belue.4bpp.lz"); +const u32 gBerryPic_Chilan[] = INCBIN_U32("graphics/berries/chilan.4bpp.lz"); +const u32 gBerryPic_Occa[] = INCBIN_U32("graphics/berries/occa.4bpp.lz"); +const u32 gBerryPic_Passho[] = INCBIN_U32("graphics/berries/passho.4bpp.lz"); +const u32 gBerryPic_Wacan[] = INCBIN_U32("graphics/berries/wacan.4bpp.lz"); +const u32 gBerryPic_Rindo[] = INCBIN_U32("graphics/berries/rindo.4bpp.lz"); +const u32 gBerryPic_Yache[] = INCBIN_U32("graphics/berries/yache.4bpp.lz"); +const u32 gBerryPic_Chople[] = INCBIN_U32("graphics/berries/chople.4bpp.lz"); +const u32 gBerryPic_Kebia[] = INCBIN_U32("graphics/berries/kebia.4bpp.lz"); +const u32 gBerryPic_Shuca[] = INCBIN_U32("graphics/berries/shuca.4bpp.lz"); +const u32 gBerryPic_Coba[] = INCBIN_U32("graphics/berries/coba.4bpp.lz"); +const u32 gBerryPic_Payapa[] = INCBIN_U32("graphics/berries/payapa.4bpp.lz"); +const u32 gBerryPic_Tanga[] = INCBIN_U32("graphics/berries/tanga.4bpp.lz"); +const u32 gBerryPic_Charti[] = INCBIN_U32("graphics/berries/charti.4bpp.lz"); +const u32 gBerryPic_Kasib[] = INCBIN_U32("graphics/berries/kasib.4bpp.lz"); +const u32 gBerryPic_Haban[] = INCBIN_U32("graphics/berries/haban.4bpp.lz"); +const u32 gBerryPic_Colbur[] = INCBIN_U32("graphics/berries/colbur.4bpp.lz"); +const u32 gBerryPic_Babiri[] = INCBIN_U32("graphics/berries/babiri.4bpp.lz"); +const u32 gBerryPic_Roseli[] = INCBIN_U32("graphics/berries/roseli.4bpp.lz"); const u32 gBerryPic_Liechi[] = INCBIN_U32("graphics/berries/liechi.4bpp.lz"); const u32 gBerryPic_Ganlon[] = INCBIN_U32("graphics/berries/ganlon.4bpp.lz"); const u32 gBerryPic_Salac[] = INCBIN_U32("graphics/berries/salac.4bpp.lz"); @@ -49,14 +67,20 @@ const u32 gBerryPic_Apicot[] = INCBIN_U32("graphics/berries/apicot.4bpp.lz"); const u32 gBerryPic_Lansat[] = INCBIN_U32("graphics/berries/lansat.4bpp.lz"); const u32 gBerryPic_Starf[] = INCBIN_U32("graphics/berries/starf.4bpp.lz"); const u32 gBerryPic_Enigma[] = INCBIN_U32("graphics/berries/enigma.4bpp.lz"); +const u32 gBerryPic_Micle[] = INCBIN_U32("graphics/berries/micle.4bpp.lz"); +const u32 gBerryPic_Custap[] = INCBIN_U32("graphics/berries/custap.4bpp.lz"); +const u32 gBerryPic_Jaboca[] = INCBIN_U32("graphics/berries/jaboca.4bpp.lz"); +const u32 gBerryPic_Rowap[] = INCBIN_U32("graphics/berries/rowap.4bpp.lz"); +const u32 gBerryPic_Kee[] = INCBIN_U32("graphics/berries/kee.4bpp.lz"); +const u32 gBerryPic_Maranga[] = INCBIN_U32("graphics/berries/maranga.4bpp.lz"); const u32 gBerryPalette_Cheri[] = INCBIN_U32("graphics/berries/cheri.gbapal.lz"); -const u32 gBerryPalette_Oran[] = INCBIN_U32("graphics/berries/oran.gbapal.lz"); +const u32 gBerryPalette_Chesto[] = INCBIN_U32("graphics/berries/chesto.gbapal.lz"); const u32 gBerryPalette_Pecha[] = INCBIN_U32("graphics/berries/pecha.gbapal.lz"); const u32 gBerryPalette_Rawst[] = INCBIN_U32("graphics/berries/rawst.gbapal.lz"); const u32 gBerryPalette_Aspear[] = INCBIN_U32("graphics/berries/aspear.gbapal.lz"); const u32 gBerryPalette_Leppa[] = INCBIN_U32("graphics/berries/leppa.gbapal.lz"); -const u32 gBerryPalette_Chesto[] = INCBIN_U32("graphics/berries/chesto.gbapal.lz"); +const u32 gBerryPalette_Oran[] = INCBIN_U32("graphics/berries/oran.gbapal.lz"); const u32 gBerryPalette_Persim[] = INCBIN_U32("graphics/berries/persim.gbapal.lz"); const u32 gBerryPalette_Lum[] = INCBIN_U32("graphics/berries/lum.gbapal.lz"); const u32 gBerryPalette_Sitrus[] = INCBIN_U32("graphics/berries/sitrus.gbapal.lz"); @@ -85,6 +109,24 @@ const u32 gBerryPalette_Pamtre[] = INCBIN_U32("graphics/berries/pamtre.gbapal.lz const u32 gBerryPalette_Watmel[] = INCBIN_U32("graphics/berries/watmel.gbapal.lz"); const u32 gBerryPalette_Durin[] = INCBIN_U32("graphics/berries/durin.gbapal.lz"); const u32 gBerryPalette_Belue[] = INCBIN_U32("graphics/berries/belue.gbapal.lz"); +const u32 gBerryPalette_Chilan[] = INCBIN_U32("graphics/berries/chilan.gbapal.lz"); +const u32 gBerryPalette_Occa[] = INCBIN_U32("graphics/berries/occa.gbapal.lz"); +const u32 gBerryPalette_Passho[] = INCBIN_U32("graphics/berries/passho.gbapal.lz"); +const u32 gBerryPalette_Wacan[] = INCBIN_U32("graphics/berries/wacan.gbapal.lz"); +const u32 gBerryPalette_Rindo[] = INCBIN_U32("graphics/berries/rindo.gbapal.lz"); +const u32 gBerryPalette_Yache[] = INCBIN_U32("graphics/berries/yache.gbapal.lz"); +const u32 gBerryPalette_Chople[] = INCBIN_U32("graphics/berries/chople.gbapal.lz"); +const u32 gBerryPalette_Kebia[] = INCBIN_U32("graphics/berries/kebia.gbapal.lz"); +const u32 gBerryPalette_Shuca[] = INCBIN_U32("graphics/berries/shuca.gbapal.lz"); +const u32 gBerryPalette_Coba[] = INCBIN_U32("graphics/berries/coba.gbapal.lz"); +const u32 gBerryPalette_Payapa[] = INCBIN_U32("graphics/berries/payapa.gbapal.lz"); +const u32 gBerryPalette_Tanga[] = INCBIN_U32("graphics/berries/tanga.gbapal.lz"); +const u32 gBerryPalette_Charti[] = INCBIN_U32("graphics/berries/charti.gbapal.lz"); +const u32 gBerryPalette_Kasib[] = INCBIN_U32("graphics/berries/kasib.gbapal.lz"); +const u32 gBerryPalette_Haban[] = INCBIN_U32("graphics/berries/haban.gbapal.lz"); +const u32 gBerryPalette_Colbur[] = INCBIN_U32("graphics/berries/colbur.gbapal.lz"); +const u32 gBerryPalette_Babiri[] = INCBIN_U32("graphics/berries/babiri.gbapal.lz"); +const u32 gBerryPalette_Roseli[] = INCBIN_U32("graphics/berries/roseli.gbapal.lz"); const u32 gBerryPalette_Liechi[] = INCBIN_U32("graphics/berries/liechi.gbapal.lz"); const u32 gBerryPalette_Ganlon[] = INCBIN_U32("graphics/berries/ganlon.gbapal.lz"); const u32 gBerryPalette_Salac[] = INCBIN_U32("graphics/berries/salac.gbapal.lz"); @@ -93,3 +135,9 @@ const u32 gBerryPalette_Apicot[] = INCBIN_U32("graphics/berries/apicot.gbapal.lz const u32 gBerryPalette_Lansat[] = INCBIN_U32("graphics/berries/lansat.gbapal.lz"); const u32 gBerryPalette_Starf[] = INCBIN_U32("graphics/berries/starf.gbapal.lz"); const u32 gBerryPalette_Enigma[] = INCBIN_U32("graphics/berries/enigma.gbapal.lz"); +const u32 gBerryPalette_Micle[] = INCBIN_U32("graphics/berries/micle.gbapal.lz"); +const u32 gBerryPalette_Custap[] = INCBIN_U32("graphics/berries/custap.gbapal.lz"); +const u32 gBerryPalette_Jaboca[] = INCBIN_U32("graphics/berries/jaboca.gbapal.lz"); +const u32 gBerryPalette_Rowap[] = INCBIN_U32("graphics/berries/rowap.gbapal.lz"); +const u32 gBerryPalette_Kee[] = INCBIN_U32("graphics/berries/kee.gbapal.lz"); +const u32 gBerryPalette_Maranga[] = INCBIN_U32("graphics/berries/maranga.gbapal.lz"); diff --git a/src/data/graphics/interface_pokeballs.h b/src/data/graphics/interface_pokeballs.h deleted file mode 100644 index fe9a4e5be3..0000000000 --- a/src/data/graphics/interface_pokeballs.h +++ /dev/null @@ -1,37 +0,0 @@ -const u32 gInterfaceGfx_PokeBall[] = INCBIN_U32("graphics/interface/ball/poke.4bpp.lz"); -const u32 gInterfacePal_PokeBall[] = INCBIN_U32("graphics/interface/ball/poke.gbapal.lz"); - -const u32 gInterfaceGfx_GreatBall[] = INCBIN_U32("graphics/interface/ball/great.4bpp.lz"); -const u32 gInterfacePal_GreatBall[] = INCBIN_U32("graphics/interface/ball/great.gbapal.lz"); - -const u32 gInterfaceGfx_SafariBall[] = INCBIN_U32("graphics/interface/ball/safari.4bpp.lz"); -const u32 gInterfacePal_SafariBall[] = INCBIN_U32("graphics/interface/ball/safari.gbapal.lz"); - -const u32 gInterfaceGfx_UltraBall[] = INCBIN_U32("graphics/interface/ball/ultra.4bpp.lz"); -const u32 gInterfacePal_UltraBall[] = INCBIN_U32("graphics/interface/ball/ultra.gbapal.lz"); - -const u32 gInterfaceGfx_MasterBall[] = INCBIN_U32("graphics/interface/ball/master.4bpp.lz"); -const u32 gInterfacePal_MasterBall[] = INCBIN_U32("graphics/interface/ball/master.gbapal.lz"); - -const u32 gInterfaceGfx_NetBall[] = INCBIN_U32("graphics/interface/ball/net.4bpp.lz"); -const u32 gInterfacePal_NetBall[] = INCBIN_U32("graphics/interface/ball/net.gbapal.lz"); - -const u32 gInterfaceGfx_DiveBall[] = INCBIN_U32("graphics/interface/ball/dive.4bpp.lz"); -const u32 gInterfacePal_DiveBall[] = INCBIN_U32("graphics/interface/ball/dive.gbapal.lz"); - -const u32 gInterfaceGfx_NestBall[] = INCBIN_U32("graphics/interface/ball/nest.4bpp.lz"); -const u32 gInterfacePal_NestBall[] = INCBIN_U32("graphics/interface/ball/nest.gbapal.lz"); - -const u32 gInterfaceGfx_RepeatBall[] = INCBIN_U32("graphics/interface/ball/repeat.4bpp.lz"); -const u32 gInterfacePal_RepeatBall[] = INCBIN_U32("graphics/interface/ball/repeat.gbapal.lz"); - -const u32 gInterfaceGfx_TimerBall[] = INCBIN_U32("graphics/interface/ball/timer.4bpp.lz"); -const u32 gInterfacePal_TimerBall[] = INCBIN_U32("graphics/interface/ball/timer.gbapal.lz"); - -const u32 gInterfaceGfx_LuxuryBall[] = INCBIN_U32("graphics/interface/ball/luxury.4bpp.lz"); -const u32 gInterfacePal_LuxuryBall[] = INCBIN_U32("graphics/interface/ball/luxury.gbapal.lz"); - -const u32 gInterfaceGfx_PremierBall[] = INCBIN_U32("graphics/interface/ball/premier.4bpp.lz"); -const u32 gInterfacePal_PremierBall[] = INCBIN_U32("graphics/interface/ball/premier.gbapal.lz"); - -const u32 gOpenPokeballGfx[] = INCBIN_U32("graphics/interface/ball_open.4bpp.lz"); diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h index 26da9061df..a755c7e6fd 100644 --- a/src/data/graphics/items.h +++ b/src/data/graphics/items.h @@ -4,73 +4,106 @@ const u32 gItemIconPalette_QuestionMark[] = INCBIN_U32("graphics/items/icon_pale const u32 gItemIcon_ReturnToFieldArrow[] = INCBIN_U32("graphics/items/icons/return_to_field_arrow.4bpp.lz"); const u32 gItemIconPalette_ReturnToFieldArrow[] = INCBIN_U32("graphics/items/icon_palettes/return_to_field_arrow.gbapal.lz"); -// Pokeballs - -const u32 gItemIcon_MasterBall[] = INCBIN_U32("graphics/items/icons/master_ball.4bpp.lz"); -const u32 gItemIconPalette_MasterBall[] = INCBIN_U32("graphics/items/icon_palettes/master_ball.gbapal.lz"); - -const u32 gItemIcon_UltraBall[] = INCBIN_U32("graphics/items/icons/ultra_ball.4bpp.lz"); -const u32 gItemIconPalette_UltraBall[] = INCBIN_U32("graphics/items/icon_palettes/ultra_ball.gbapal.lz"); - -const u32 gItemIcon_GreatBall[] = INCBIN_U32("graphics/items/icons/great_ball.4bpp.lz"); -const u32 gItemIconPalette_GreatBall[] = INCBIN_U32("graphics/items/icon_palettes/great_ball.gbapal.lz"); +// Poké Balls const u32 gItemIcon_PokeBall[] = INCBIN_U32("graphics/items/icons/poke_ball.4bpp.lz"); const u32 gItemIconPalette_PokeBall[] = INCBIN_U32("graphics/items/icon_palettes/poke_ball.gbapal.lz"); -const u32 gItemIcon_SafariBall[] = INCBIN_U32("graphics/items/icons/safari_ball.4bpp.lz"); -const u32 gItemIconPalette_SafariBall[] = INCBIN_U32("graphics/items/icon_palettes/safari_ball.gbapal.lz"); +const u32 gItemIcon_GreatBall[] = INCBIN_U32("graphics/items/icons/great_ball.4bpp.lz"); +const u32 gItemIconPalette_GreatBall[] = INCBIN_U32("graphics/items/icon_palettes/great_ball.gbapal.lz"); + +const u32 gItemIcon_UltraBall[] = INCBIN_U32("graphics/items/icons/ultra_ball.4bpp.lz"); +const u32 gItemIconPalette_UltraBall[] = INCBIN_U32("graphics/items/icon_palettes/ultra_ball.gbapal.lz"); + +const u32 gItemIcon_MasterBall[] = INCBIN_U32("graphics/items/icons/master_ball.4bpp.lz"); +const u32 gItemIconPalette_MasterBall[] = INCBIN_U32("graphics/items/icon_palettes/master_ball.gbapal.lz"); + +const u32 gItemIcon_PremierBall[] = INCBIN_U32("graphics/items/icons/premier_ball.4bpp.lz"); + +const u32 gItemIcon_HealBall[] = INCBIN_U32("graphics/items/icons/heal_ball.4bpp.lz"); +const u32 gItemIconPalette_HealBall[] = INCBIN_U32("graphics/items/icon_palettes/heal_ball.gbapal.lz"); const u32 gItemIcon_NetBall[] = INCBIN_U32("graphics/items/icons/net_ball.4bpp.lz"); const u32 gItemIconPalette_NetBall[] = INCBIN_U32("graphics/items/icon_palettes/net_ball.gbapal.lz"); +const u32 gItemIcon_NestBall[] = INCBIN_U32("graphics/items/icons/nest_ball.4bpp.lz"); +const u32 gItemIconPalette_NestBall[] = INCBIN_U32("graphics/items/icon_palettes/nest_ball.gbapal.lz"); + const u32 gItemIcon_DiveBall[] = INCBIN_U32("graphics/items/icons/dive_ball.4bpp.lz"); const u32 gItemIconPalette_DiveBall[] = INCBIN_U32("graphics/items/icon_palettes/dive_ball.gbapal.lz"); -const u32 gItemIcon_NestBall[] = INCBIN_U32("graphics/items/icons/nest_ball.4bpp.lz"); -const u32 gItemIconPalette_NestBall[] = INCBIN_U32("graphics/items/icon_palettes/nest_ball.gbapal.lz"); +const u32 gItemIcon_DuskBall[] = INCBIN_U32("graphics/items/icons/dusk_ball.4bpp.lz"); +const u32 gItemIconPalette_DuskBall[] = INCBIN_U32("graphics/items/icon_palettes/dusk_ball.gbapal.lz"); + +const u32 gItemIcon_TimerBall[] = INCBIN_U32("graphics/items/icons/timer_ball.4bpp.lz"); + +const u32 gItemIcon_QuickBall[] = INCBIN_U32("graphics/items/icons/quick_ball.4bpp.lz"); +const u32 gItemIconPalette_QuickBall[] = INCBIN_U32("graphics/items/icon_palettes/quick_ball.gbapal.lz"); const u32 gItemIcon_RepeatBall[] = INCBIN_U32("graphics/items/icons/repeat_ball.4bpp.lz"); const u32 gItemIconPalette_RepeatBall[] = INCBIN_U32("graphics/items/icon_palettes/repeat_ball.gbapal.lz"); -const u32 gItemIcon_TimerBall[] = INCBIN_U32("graphics/items/icons/timer_ball.4bpp.lz"); - const u32 gItemIcon_LuxuryBall[] = INCBIN_U32("graphics/items/icons/luxury_ball.4bpp.lz"); const u32 gItemIconPalette_LuxuryBall[] = INCBIN_U32("graphics/items/icon_palettes/luxury_ball.gbapal.lz"); -const u32 gItemIcon_PremierBall[] = INCBIN_U32("graphics/items/icons/premier_ball.4bpp.lz"); +const u32 gItemIcon_LevelBall[] = INCBIN_U32("graphics/items/icons/level_ball.4bpp.lz"); +const u32 gItemIconPalette_LevelBall[] = INCBIN_U32("graphics/items/icon_palettes/level_ball.gbapal.lz"); + +const u32 gItemIcon_LureBall[] = INCBIN_U32("graphics/items/icons/lure_ball.4bpp.lz"); +const u32 gItemIconPalette_LureBall[] = INCBIN_U32("graphics/items/icon_palettes/lure_ball.gbapal.lz"); + +const u32 gItemIcon_MoonBall[] = INCBIN_U32("graphics/items/icons/moon_ball.4bpp.lz"); +const u32 gItemIconPalette_MoonBall[] = INCBIN_U32("graphics/items/icon_palettes/moon_ball.gbapal.lz"); + +const u32 gItemIcon_FriendBall[] = INCBIN_U32("graphics/items/icons/friend_ball.4bpp.lz"); +const u32 gItemIconPalette_FriendBall[] = INCBIN_U32("graphics/items/icon_palettes/friend_ball.gbapal.lz"); + +const u32 gItemIcon_LoveBall[] = INCBIN_U32("graphics/items/icons/love_ball.4bpp.lz"); +const u32 gItemIconPalette_LoveBall[] = INCBIN_U32("graphics/items/icon_palettes/love_ball.gbapal.lz"); + +const u32 gItemIcon_FastBall[] = INCBIN_U32("graphics/items/icons/fast_ball.4bpp.lz"); +const u32 gItemIconPalette_FastBall[] = INCBIN_U32("graphics/items/icon_palettes/fast_ball.gbapal.lz"); + +const u32 gItemIcon_HeavyBall[] = INCBIN_U32("graphics/items/icons/heavy_ball.4bpp.lz"); +const u32 gItemIconPalette_HeavyBall[] = INCBIN_U32("graphics/items/icon_palettes/heavy_ball.gbapal.lz"); + +const u32 gItemIcon_DreamBall[] = INCBIN_U32("graphics/items/icons/dream_ball.4bpp.lz"); +const u32 gItemIconPalette_DreamBall[] = INCBIN_U32("graphics/items/icon_palettes/dream_ball.gbapal.lz"); + +const u32 gItemIcon_SafariBall[] = INCBIN_U32("graphics/items/icons/safari_ball.4bpp.lz"); +const u32 gItemIconPalette_SafariBall[] = INCBIN_U32("graphics/items/icon_palettes/safari_ball.gbapal.lz"); + +const u32 gItemIcon_SportBall[] = INCBIN_U32("graphics/items/icons/sport_ball.4bpp.lz"); +const u32 gItemIconPalette_SportBall[] = INCBIN_U32("graphics/items/icon_palettes/sport_ball.gbapal.lz"); + +const u32 gItemIcon_ParkBall[] = INCBIN_U32("graphics/items/icons/park_ball.4bpp.lz"); +const u32 gItemIconPalette_ParkBall[] = INCBIN_U32("graphics/items/icon_palettes/park_ball.gbapal.lz"); + +const u32 gItemIcon_BeastBall[] = INCBIN_U32("graphics/items/icons/beast_ball.4bpp.lz"); +const u32 gItemIconPalette_BeastBall[] = INCBIN_U32("graphics/items/icon_palettes/beast_ball.gbapal.lz"); + +const u32 gItemIcon_CherishBall[] = INCBIN_U32("graphics/items/icons/cherish_ball.4bpp.lz"); +const u32 gItemIconPalette_CherishBall[] = INCBIN_U32("graphics/items/icon_palettes/cherish_ball.gbapal.lz"); // Medicine const u32 gItemIcon_Potion[] = INCBIN_U32("graphics/items/icons/potion.4bpp.lz"); const u32 gItemIconPalette_Potion[] = INCBIN_U32("graphics/items/icon_palettes/potion.gbapal.lz"); -const u32 gItemIcon_Antidote[] = INCBIN_U32("graphics/items/icons/antidote.4bpp.lz"); -const u32 gItemIconPalette_Antidote[] = INCBIN_U32("graphics/items/icon_palettes/antidote.gbapal.lz"); - -const u32 gItemIconPalette_BurnHeal[] = INCBIN_U32("graphics/items/icon_palettes/burn_heal.gbapal.lz"); -const u32 gItemIconPalette_IceHeal[] = INCBIN_U32("graphics/items/icon_palettes/ice_heal.gbapal.lz"); -const u32 gItemIcon_StatusHeal[] = INCBIN_U32("graphics/items/icons/status_heal.4bpp.lz"); -const u32 gItemIconPalette_Awakening[] = INCBIN_U32("graphics/items/icon_palettes/awakening.gbapal.lz"); -const u32 gItemIconPalette_ParalyzeHeal[] = INCBIN_U32("graphics/items/icon_palettes/paralyze_heal.gbapal.lz"); - -const u32 gItemIcon_LargePotion[] = INCBIN_U32("graphics/items/icons/large_potion.4bpp.lz"); -const u32 gItemIconPalette_FullRestore[] = INCBIN_U32("graphics/items/icon_palettes/full_restore.gbapal.lz"); -const u32 gItemIconPalette_MaxPotion[] = INCBIN_U32("graphics/items/icon_palettes/max_potion.gbapal.lz"); +const u32 gItemIconPalette_SuperPotion[] = INCBIN_U32("graphics/items/icon_palettes/super_potion.gbapal.lz"); const u32 gItemIconPalette_HyperPotion[] = INCBIN_U32("graphics/items/icon_palettes/hyper_potion.gbapal.lz"); -const u32 gItemIconPalette_SuperPotion[] = INCBIN_U32("graphics/items/icon_palettes/super_potion.gbapal.lz"); +const u32 gItemIcon_LargePotion[] = INCBIN_U32("graphics/items/icons/large_potion.4bpp.lz"); +const u32 gItemIconPalette_MaxPotion[] = INCBIN_U32("graphics/items/icon_palettes/max_potion.gbapal.lz"); -const u32 gItemIcon_FullHeal[] = INCBIN_U32("graphics/items/icons/full_heal.4bpp.lz"); -const u32 gItemIconPalette_FullHeal[] = INCBIN_U32("graphics/items/icon_palettes/full_heal.gbapal.lz"); +const u32 gItemIconPalette_FullRestore[] = INCBIN_U32("graphics/items/icon_palettes/full_restore.gbapal.lz"); const u32 gItemIcon_Revive[] = INCBIN_U32("graphics/items/icons/revive.4bpp.lz"); +const u32 gItemIconPalette_Revive[] = INCBIN_U32("graphics/items/icon_palettes/revive.gbapal.lz"); const u32 gItemIcon_MaxRevive[] = INCBIN_U32("graphics/items/icons/max_revive.4bpp.lz"); -const u32 gItemIconPalette_Revive[] = INCBIN_U32("graphics/items/icon_palettes/revive.gbapal.lz"); - const u32 gItemIcon_FreshWater[] = INCBIN_U32("graphics/items/icons/fresh_water.4bpp.lz"); const u32 gItemIconPalette_FreshWater[] = INCBIN_U32("graphics/items/icon_palettes/fresh_water.gbapal.lz"); @@ -94,40 +127,67 @@ const u32 gItemIconPalette_HealPowder[] = INCBIN_U32("graphics/items/icon_palett const u32 gItemIcon_RevivalHerb[] = INCBIN_U32("graphics/items/icons/revival_herb.4bpp.lz"); const u32 gItemIconPalette_RevivalHerb[] = INCBIN_U32("graphics/items/icon_palettes/revival_herb.gbapal.lz"); +const u32 gItemIcon_Antidote[] = INCBIN_U32("graphics/items/icons/antidote.4bpp.lz"); +const u32 gItemIconPalette_Antidote[] = INCBIN_U32("graphics/items/icon_palettes/antidote.gbapal.lz"); + +const u32 gItemIcon_StatusHeal[] = INCBIN_U32("graphics/items/icons/status_heal.4bpp.lz"); +const u32 gItemIconPalette_ParalyzeHeal[] = INCBIN_U32("graphics/items/icon_palettes/paralyze_heal.gbapal.lz"); + +const u32 gItemIconPalette_BurnHeal[] = INCBIN_U32("graphics/items/icon_palettes/burn_heal.gbapal.lz"); + +const u32 gItemIconPalette_IceHeal[] = INCBIN_U32("graphics/items/icon_palettes/ice_heal.gbapal.lz"); + +const u32 gItemIconPalette_Awakening[] = INCBIN_U32("graphics/items/icon_palettes/awakening.gbapal.lz"); + +const u32 gItemIcon_FullHeal[] = INCBIN_U32("graphics/items/icons/full_heal.4bpp.lz"); +const u32 gItemIconPalette_FullHeal[] = INCBIN_U32("graphics/items/icon_palettes/full_heal.gbapal.lz"); + const u32 gItemIcon_Ether[] = INCBIN_U32("graphics/items/icons/ether.4bpp.lz"); const u32 gItemIconPalette_Ether[] = INCBIN_U32("graphics/items/icon_palettes/ether.gbapal.lz"); + const u32 gItemIconPalette_MaxEther[] = INCBIN_U32("graphics/items/icon_palettes/max_ether.gbapal.lz"); + const u32 gItemIconPalette_Elixir[] = INCBIN_U32("graphics/items/icon_palettes/elixir.gbapal.lz"); + const u32 gItemIconPalette_MaxElixir[] = INCBIN_U32("graphics/items/icon_palettes/max_elixir.gbapal.lz"); -const u32 gItemIcon_LavaCookie[] = INCBIN_U32("graphics/items/icons/lava_cookie.4bpp.lz"); -const u32 gItemIconPalette_LavaCookieAndLetter[] = INCBIN_U32("graphics/items/icon_palettes/lava_cookie_and_letter.gbapal.lz"); - -const u32 gItemIcon_Flute[] = INCBIN_U32("graphics/items/icons/flute.4bpp.lz"); -const u32 gItemIconPalette_BlueFlute[] = INCBIN_U32("graphics/items/icon_palettes/blue_flute.gbapal.lz"); -const u32 gItemIconPalette_YellowFlute[] = INCBIN_U32("graphics/items/icon_palettes/yellow_flute.gbapal.lz"); -const u32 gItemIconPalette_RedFlute[] = INCBIN_U32("graphics/items/icon_palettes/red_flute.gbapal.lz"); -const u32 gItemIconPalette_BlackFlute[] = INCBIN_U32("graphics/items/icon_palettes/black_flute.gbapal.lz"); -const u32 gItemIconPalette_WhiteFlute[] = INCBIN_U32("graphics/items/icon_palettes/white_flute.gbapal.lz"); - const u32 gItemIcon_BerryJuice[] = INCBIN_U32("graphics/items/icons/berry_juice.4bpp.lz"); const u32 gItemIconPalette_BerryJuice[] = INCBIN_U32("graphics/items/icon_palettes/berry_juice.gbapal.lz"); const u32 gItemIcon_SacredAsh[] = INCBIN_U32("graphics/items/icons/sacred_ash.4bpp.lz"); const u32 gItemIconPalette_SacredAsh[] = INCBIN_U32("graphics/items/icon_palettes/sacred_ash.gbapal.lz"); -// Collectibles +const u32 gItemIcon_SweetHeart[] = INCBIN_U32("graphics/items/icons/sweet_heart.4bpp.lz"); +const u32 gItemIconPalette_SweetHeart[] = INCBIN_U32("graphics/items/icon_palettes/sweet_heart.gbapal.lz"); -const u32 gItemIconPalette_ShoalSalt[] = INCBIN_U32("graphics/items/icon_palettes/shoal_salt.gbapal.lz"); +const u32 gItemIcon_MaxHoney[] = INCBIN_U32("graphics/items/icons/max_honey.4bpp.lz"); +const u32 gItemIconPalette_MaxHoney[] = INCBIN_U32("graphics/items/icon_palettes/max_honey.gbapal.lz"); -const u32 gItemIcon_ShoalShell[] = INCBIN_U32("graphics/items/icons/shoal_shell.4bpp.lz"); -const u32 gItemIconPalette_Shell[] = INCBIN_U32("graphics/items/icon_palettes/shell.gbapal.lz"); +// Regional Specialties -const u32 gItemIcon_Shard[] = INCBIN_U32("graphics/items/icons/shard.4bpp.lz"); -const u32 gItemIconPalette_RedShard[] = INCBIN_U32("graphics/items/icon_palettes/red_shard.gbapal.lz"); -const u32 gItemIconPalette_BlueShard[] = INCBIN_U32("graphics/items/icon_palettes/blue_shard.gbapal.lz"); -const u32 gItemIconPalette_YellowShard[] = INCBIN_U32("graphics/items/icon_palettes/yellow_shard.gbapal.lz"); -const u32 gItemIconPalette_GreenShard[] = INCBIN_U32("graphics/items/icon_palettes/green_shard.gbapal.lz"); +const u32 gItemIcon_PewterCrunchies[] = INCBIN_U32("graphics/items/icons/pewter_crunchies.4bpp.lz"); +const u32 gItemIconPalette_PewterCrunchies[] = INCBIN_U32("graphics/items/icon_palettes/pewter_crunchies.gbapal.lz"); + +const u32 gItemIcon_RageCandyBar[] = INCBIN_U32("graphics/items/icons/rage_candy_bar.4bpp.lz"); +const u32 gItemIconPalette_RageCandyBar[] = INCBIN_U32("graphics/items/icon_palettes/rage_candy_bar.gbapal.lz"); + +const u32 gItemIcon_LavaCookie[] = INCBIN_U32("graphics/items/icons/lava_cookie.4bpp.lz"); +const u32 gItemIconPalette_LavaCookieAndLetter[] = INCBIN_U32("graphics/items/icon_palettes/lava_cookie_and_letter.gbapal.lz"); + +const u32 gItemIcon_OldGateau[] = INCBIN_U32("graphics/items/icons/old_gateau.4bpp.lz"); +const u32 gItemIconPalette_OldGateau[] = INCBIN_U32("graphics/items/icon_palettes/old_gateau.gbapal.lz"); + +const u32 gItemIcon_Casteliacone[] = INCBIN_U32("graphics/items/icons/casteliacone.4bpp.lz"); +const u32 gItemIconPalette_Casteliacone[] = INCBIN_U32("graphics/items/icon_palettes/casteliacone.gbapal.lz"); + +const u32 gItemIcon_LumioseGalette[] = INCBIN_U32("graphics/items/icons/lumiose_galette.4bpp.lz"); +const u32 gItemIconPalette_LumioseGalette[] = INCBIN_U32("graphics/items/icon_palettes/lumiose_galette.gbapal.lz"); + +const u32 gItemIcon_ShalourSable[] = INCBIN_U32("graphics/items/icons/shalour_sable.4bpp.lz"); +const u32 gItemIconPalette_ShalourSable[] = INCBIN_U32("graphics/items/icon_palettes/shalour_sable.gbapal.lz"); + +const u32 gItemIcon_BigMalasada[] = INCBIN_U32("graphics/items/icons/big_malasada.4bpp.lz"); +const u32 gItemIconPalette_BigMalasada[] = INCBIN_U32("graphics/items/icon_palettes/big_malasada.gbapal.lz"); // Vitamins @@ -136,31 +196,127 @@ const u32 gItemIconPalette_HPUp[] = INCBIN_U32("graphics/items/icon_palettes/hp_ const u32 gItemIcon_Vitamin[] = INCBIN_U32("graphics/items/icons/vitamin.4bpp.lz"); const u32 gItemIconPalette_Protein[] = INCBIN_U32("graphics/items/icon_palettes/protein.gbapal.lz"); + const u32 gItemIconPalette_Iron[] = INCBIN_U32("graphics/items/icon_palettes/iron.gbapal.lz"); -const u32 gItemIconPalette_Carbos[] = INCBIN_U32("graphics/items/icon_palettes/carbos.gbapal.lz"); + const u32 gItemIconPalette_Calcium[] = INCBIN_U32("graphics/items/icon_palettes/calcium.gbapal.lz"); -const u32 gItemIcon_RareCandy[] = INCBIN_U32("graphics/items/icons/rare_candy.4bpp.lz"); -const u32 gItemIconPalette_RareCandy[] = INCBIN_U32("graphics/items/icon_palettes/rare_candy.gbapal.lz"); +const u32 gItemIconPalette_Zinc[] = INCBIN_U32("graphics/items/icon_palettes/zinc.gbapal.lz"); + +const u32 gItemIconPalette_Carbos[] = INCBIN_U32("graphics/items/icon_palettes/carbos.gbapal.lz"); const u32 gItemIcon_PPUp[] = INCBIN_U32("graphics/items/icons/pp_up.4bpp.lz"); const u32 gItemIconPalette_PPUp[] = INCBIN_U32("graphics/items/icon_palettes/pp_up.gbapal.lz"); -const u32 gItemIconPalette_Zinc[] = INCBIN_U32("graphics/items/icon_palettes/zinc.gbapal.lz"); - const u32 gItemIcon_PPMax[] = INCBIN_U32("graphics/items/icons/pp_max.4bpp.lz"); const u32 gItemIconPalette_PPMax[] = INCBIN_U32("graphics/items/icon_palettes/pp_max.gbapal.lz"); -// Battle items +// EV Feathers + +const u32 gItemIcon_HealthFeather[] = INCBIN_U32("graphics/items/icons/health_feather.4bpp.lz"); +const u32 gItemIconPalette_HealthFeather[] = INCBIN_U32("graphics/items/icon_palettes/health_feather.gbapal.lz"); + +const u32 gItemIcon_MuscleFeather[] = INCBIN_U32("graphics/items/icons/muscle_feather.4bpp.lz"); +const u32 gItemIconPalette_MuscleFeather[] = INCBIN_U32("graphics/items/icon_palettes/muscle_feather.gbapal.lz"); + +const u32 gItemIcon_ResistFeather[] = INCBIN_U32("graphics/items/icons/resist_feather.4bpp.lz"); +const u32 gItemIconPalette_ResistFeather[] = INCBIN_U32("graphics/items/icon_palettes/resist_feather.gbapal.lz"); + +const u32 gItemIcon_GeniusFeather[] = INCBIN_U32("graphics/items/icons/genius_feather.4bpp.lz"); +const u32 gItemIconPalette_GeniusFeather[] = INCBIN_U32("graphics/items/icon_palettes/genius_feather.gbapal.lz"); + +const u32 gItemIcon_CleverFeather[] = INCBIN_U32("graphics/items/icons/clever_feather.4bpp.lz"); +const u32 gItemIconPalette_CleverFeather[] = INCBIN_U32("graphics/items/icon_palettes/clever_feather.gbapal.lz"); + +const u32 gItemIcon_SwiftFeather[] = INCBIN_U32("graphics/items/icons/swift_feather.4bpp.lz"); +const u32 gItemIconPalette_SwiftFeather[] = INCBIN_U32("graphics/items/icon_palettes/swift_feather.gbapal.lz"); + +// Ability Modifiers + +const u32 gItemIcon_AbilityCapsule[] = INCBIN_U32("graphics/items/icons/ability_capsule.4bpp.lz"); +const u32 gItemIconPalette_AbilityCapsule[] = INCBIN_U32("graphics/items/icon_palettes/ability_capsule.gbapal.lz"); + +const u32 gItemIcon_AbilityPatch[] = INCBIN_U32("graphics/items/icons/ability_patch.4bpp.lz"); +const u32 gItemIconPalette_AbilityPatch[] = INCBIN_U32("graphics/items/icon_palettes/ability_patch.gbapal.lz"); + +// Mints + +const u32 gItemIcon_Mint[] = INCBIN_U32("graphics/items/icons/mint.4bpp.lz"); +const u32 gItemIconPalette_RedMint[] = INCBIN_U32("graphics/items/icon_palettes/red_mint.gbapal.lz"); +const u32 gItemIconPalette_BlueMint[] = INCBIN_U32("graphics/items/icon_palettes/blue_mint.gbapal.lz"); +const u32 gItemIconPalette_LightBlueMint[] = INCBIN_U32("graphics/items/icon_palettes/light_blue_mint.gbapal.lz"); +const u32 gItemIconPalette_PinkMint[] = INCBIN_U32("graphics/items/icon_palettes/pink_mint.gbapal.lz"); +const u32 gItemIconPalette_GreenMint[] = INCBIN_U32("graphics/items/icon_palettes/green_mint.gbapal.lz"); +const u32 gItemIconPalette_YellowMint[] = INCBIN_U32("graphics/items/icon_palettes/yellow_mint.gbapal.lz"); + +// Candy + +const u32 gItemIcon_RareCandy[] = INCBIN_U32("graphics/items/icons/rare_candy.4bpp.lz"); +const u32 gItemIconPalette_RareCandy[] = INCBIN_U32("graphics/items/icon_palettes/rare_candy.gbapal.lz"); + +const u32 gItemIcon_ExpCandyXS[] = INCBIN_U32("graphics/items/icons/exp_candy_xs.4bpp.lz"); +const u32 gItemIcon_ExpCandyS[] = INCBIN_U32("graphics/items/icons/exp_candy_s.4bpp.lz"); +const u32 gItemIcon_ExpCandyM[] = INCBIN_U32("graphics/items/icons/exp_candy_m.4bpp.lz"); +const u32 gItemIcon_ExpCandyL[] = INCBIN_U32("graphics/items/icons/exp_candy_l.4bpp.lz"); +const u32 gItemIcon_ExpCandyXL[] = INCBIN_U32("graphics/items/icons/exp_candy_xl.4bpp.lz"); +const u32 gItemIconPalette_ExpCandies[] = INCBIN_U32("graphics/items/icon_palettes/exp_candies.gbapal.lz"); + +const u32 gItemIcon_DynamaxCandy[] = INCBIN_U32("graphics/items/icons/dynamax_candy.4bpp.lz"); +const u32 gItemIconPalette_DynamaxCandy[] = INCBIN_U32("graphics/items/icon_palettes/dynamax_candy.gbapal.lz"); + +// Medicinal Flutes + +const u32 gItemIcon_Flute[] = INCBIN_U32("graphics/items/icons/flute.4bpp.lz"); +const u32 gItemIconPalette_BlueFlute[] = INCBIN_U32("graphics/items/icon_palettes/blue_flute.gbapal.lz"); + +const u32 gItemIconPalette_YellowFlute[] = INCBIN_U32("graphics/items/icon_palettes/yellow_flute.gbapal.lz"); + +const u32 gItemIconPalette_RedFlute[] = INCBIN_U32("graphics/items/icon_palettes/red_flute.gbapal.lz"); + +// Encounter-modifying Flutes + +const u32 gItemIconPalette_BlackFlute[] = INCBIN_U32("graphics/items/icon_palettes/black_flute.gbapal.lz"); + +const u32 gItemIconPalette_WhiteFlute[] = INCBIN_U32("graphics/items/icon_palettes/white_flute.gbapal.lz"); + +// Encounter Modifiers + +const u32 gItemIcon_Repel[] = INCBIN_U32("graphics/items/icons/repel.4bpp.lz"); +const u32 gItemIconPalette_Repel[] = INCBIN_U32("graphics/items/icon_palettes/repel.gbapal.lz"); + +const u32 gItemIconPalette_SuperRepel[] = INCBIN_U32("graphics/items/icon_palettes/super_repel.gbapal.lz"); + +const u32 gItemIconPalette_MaxRepel[] = INCBIN_U32("graphics/items/icon_palettes/max_repel.gbapal.lz"); + +const u32 gItemIcon_Lure[] = INCBIN_U32("graphics/items/icons/lure.4bpp.lz"); +const u32 gItemIconPalette_Lure[] = INCBIN_U32("graphics/items/icon_palettes/lure.gbapal.lz"); +const u32 gItemIconPalette_SuperLure[] = INCBIN_U32("graphics/items/icon_palettes/super_lure.gbapal.lz"); +const u32 gItemIconPalette_MaxLure[] = INCBIN_U32("graphics/items/icon_palettes/max_lure.gbapal.lz"); + +const u32 gItemIcon_EscapeRope[] = INCBIN_U32("graphics/items/icons/escape_rope.4bpp.lz"); +const u32 gItemIconPalette_EscapeRope[] = INCBIN_U32("graphics/items/icon_palettes/escape_rope.gbapal.lz"); + +// X Items + +const u32 gItemIcon_BattleStatItem[] = INCBIN_U32("graphics/items/icons/battle_stat_item.4bpp.lz"); +const u32 gItemIconPalette_XAttack[] = INCBIN_U32("graphics/items/icon_palettes/x_attack.gbapal.lz"); + +const u32 gItemIconPalette_XDefend[] = INCBIN_U32("graphics/items/icon_palettes/x_defend.gbapal.lz"); + +const u32 gItemIconPalette_XSpecial[] = INCBIN_U32("graphics/items/icon_palettes/x_special.gbapal.lz"); + +const u32 gItemIcon_XSpecialDefense[] = INCBIN_U32("graphics/items/icons/x_special_defense.4bpp.lz"); +const u32 gItemIconPalette_XSpecialDefense[] = INCBIN_U32("graphics/items/icon_palettes/x_special_defense.gbapal.lz"); + +const u32 gItemIconPalette_XSpeed[] = INCBIN_U32("graphics/items/icon_palettes/x_speed.gbapal.lz"); + +const u32 gItemIconPalette_XAccuracy[] = INCBIN_U32("graphics/items/icon_palettes/x_accuracy.gbapal.lz"); + +const u32 gItemIconPalette_DireHit[] = INCBIN_U32("graphics/items/icon_palettes/dire_hit.gbapal.lz"); const u32 gItemIconPalette_GuardSpec[] = INCBIN_U32("graphics/items/icon_palettes/guard_spec.gbapal.lz"); -const u32 gItemIconPalette_DireHit[] = INCBIN_U32("graphics/items/icon_palettes/dire_hit.gbapal.lz"); -const u32 gItemIconPalette_XAttack[] = INCBIN_U32("graphics/items/icon_palettes/x_attack.gbapal.lz"); -const u32 gItemIcon_BattleStatItem[] = INCBIN_U32("graphics/items/icons/battle_stat_item.4bpp.lz"); -const u32 gItemIconPalette_XDefend[] = INCBIN_U32("graphics/items/icon_palettes/x_defend.gbapal.lz"); -const u32 gItemIconPalette_XSpeed[] = INCBIN_U32("graphics/items/icon_palettes/x_speed.gbapal.lz"); -const u32 gItemIconPalette_XAccuracy[] = INCBIN_U32("graphics/items/icon_palettes/x_accuracy.gbapal.lz"); -const u32 gItemIconPalette_XSpecial[] = INCBIN_U32("graphics/items/icon_palettes/x_special.gbapal.lz"); + +// Escape Items const u32 gItemIcon_PokeDoll[] = INCBIN_U32("graphics/items/icons/poke_doll.4bpp.lz"); const u32 gItemIconPalette_PokeDoll[] = INCBIN_U32("graphics/items/icon_palettes/poke_doll.gbapal.lz"); @@ -168,58 +324,186 @@ const u32 gItemIconPalette_PokeDoll[] = INCBIN_U32("graphics/items/icon_palettes const u32 gItemIcon_FluffyTail[] = INCBIN_U32("graphics/items/icons/fluffy_tail.4bpp.lz"); const u32 gItemIconPalette_FluffyTail[] = INCBIN_U32("graphics/items/icon_palettes/fluffy_tail.gbapal.lz"); -// Field items +const u32 gItemIcon_PokeToy[] = INCBIN_U32("graphics/items/icons/poke_toy.4bpp.lz"); +const u32 gItemIconPalette_PokeToy[] = INCBIN_U32("graphics/items/icon_palettes/poke_toy.gbapal.lz"); -const u32 gItemIcon_Repel[] = INCBIN_U32("graphics/items/icons/repel.4bpp.lz"); -const u32 gItemIconPalette_SuperRepel[] = INCBIN_U32("graphics/items/icon_palettes/super_repel.gbapal.lz"); -const u32 gItemIconPalette_MaxRepel[] = INCBIN_U32("graphics/items/icon_palettes/max_repel.gbapal.lz"); +const u32 gItemIcon_MaxMushrooms[] = INCBIN_U32("graphics/items/icons/max_mushrooms.4bpp.lz"); +const u32 gItemIconPalette_MaxMushrooms[] = INCBIN_U32("graphics/items/icon_palettes/max_mushrooms.gbapal.lz"); -const u32 gItemIcon_EscapeRope[] = INCBIN_U32("graphics/items/icons/escape_rope.4bpp.lz"); +// Treasures -const u32 gItemIconPalette_EscapeRope[] = INCBIN_U32("graphics/items/icon_palettes/escape_rope.gbapal.lz"); - -const u32 gItemIconPalette_Repel[] = INCBIN_U32("graphics/items/icon_palettes/repel.gbapal.lz"); - -// Evolution stones - -const u32 gItemIcon_SunStone[] = INCBIN_U32("graphics/items/icons/sun_stone.4bpp.lz"); -const u32 gItemIconPalette_SunStone[] = INCBIN_U32("graphics/items/icon_palettes/sun_stone.gbapal.lz"); - -const u32 gItemIcon_MoonStone[] = INCBIN_U32("graphics/items/icons/moon_stone.4bpp.lz"); -const u32 gItemIconPalette_MoonStone[] = INCBIN_U32("graphics/items/icon_palettes/moon_stone.gbapal.lz"); - -const u32 gItemIcon_FireStone[] = INCBIN_U32("graphics/items/icons/fire_stone.4bpp.lz"); -const u32 gItemIconPalette_FireStone[] = INCBIN_U32("graphics/items/icon_palettes/fire_stone.gbapal.lz"); - -const u32 gItemIcon_ThunderStone[] = INCBIN_U32("graphics/items/icons/thunder_stone.4bpp.lz"); -const u32 gItemIconPalette_ThunderStone[] = INCBIN_U32("graphics/items/icon_palettes/thunder_stone.gbapal.lz"); - -const u32 gItemIcon_WaterStone[] = INCBIN_U32("graphics/items/icons/water_stone.4bpp.lz"); -const u32 gItemIconPalette_WaterStone[] = INCBIN_U32("graphics/items/icon_palettes/water_stone.gbapal.lz"); - -const u32 gItemIcon_LeafStone[] = INCBIN_U32("graphics/items/icons/leaf_stone.4bpp.lz"); -const u32 gItemIconPalette_LeafStone[] = INCBIN_U32("graphics/items/icon_palettes/leaf_stone.gbapal.lz"); - -// Valuables - -const u32 gItemIcon_TinyMushroom[] = INCBIN_U32("graphics/items/icons/tiny_mushroom.4bpp.lz"); -const u32 gItemIcon_BigMushroom[] = INCBIN_U32("graphics/items/icons/big_mushroom.4bpp.lz"); -const u32 gItemIconPalette_Mushroom[] = INCBIN_U32("graphics/items/icon_palettes/mushroom.gbapal.lz"); - -const u32 gItemIcon_Pearl[] = INCBIN_U32("graphics/items/icons/pearl.4bpp.lz"); -const u32 gItemIconPalette_Pearl[] = INCBIN_U32("graphics/items/icon_palettes/pearl.gbapal.lz"); -const u32 gItemIcon_BigPearl[] = INCBIN_U32("graphics/items/icons/big_pearl.4bpp.lz"); - -const u32 gItemIcon_Stardust[] = INCBIN_U32("graphics/items/icons/stardust.4bpp.lz"); -const u32 gItemIconPalette_Star[] = INCBIN_U32("graphics/items/icon_palettes/star.gbapal.lz"); -const u32 gItemIcon_StarPiece[] = INCBIN_U32("graphics/items/icons/star_piece.4bpp.lz"); +const u32 gItemIcon_BottleCap[] = INCBIN_U32("graphics/items/icons/bottle_cap.4bpp.lz"); +const u32 gItemIconPalette_BottleCap[] = INCBIN_U32("graphics/items/icon_palettes/bottle_cap.gbapal.lz"); +const u32 gItemIconPalette_GoldBottleCap[] = INCBIN_U32("graphics/items/icon_palettes/gold_bottle_cap.gbapal.lz"); const u32 gItemIcon_Nugget[] = INCBIN_U32("graphics/items/icons/nugget.4bpp.lz"); const u32 gItemIconPalette_Nugget[] = INCBIN_U32("graphics/items/icon_palettes/nugget.gbapal.lz"); +const u32 gItemIcon_BigNugget[] = INCBIN_U32("graphics/items/icons/big_nugget.4bpp.lz"); +const u32 gItemIconPalette_BigNugget[] = INCBIN_U32("graphics/items/icon_palettes/big_nugget.gbapal.lz"); + +const u32 gItemIcon_TinyMushroom[] = INCBIN_U32("graphics/items/icons/tiny_mushroom.4bpp.lz"); +const u32 gItemIconPalette_Mushroom[] = INCBIN_U32("graphics/items/icon_palettes/mushroom.gbapal.lz"); + +const u32 gItemIcon_BigMushroom[] = INCBIN_U32("graphics/items/icons/big_mushroom.4bpp.lz"); + +const u32 gItemIcon_BalmMushroom[] = INCBIN_U32("graphics/items/icons/balm_mushroom.4bpp.lz"); +const u32 gItemIconPalette_BalmMushroom[] = INCBIN_U32("graphics/items/icon_palettes/balm_mushroom.gbapal.lz"); + +const u32 gItemIcon_Pearl[] = INCBIN_U32("graphics/items/icons/pearl.4bpp.lz"); +const u32 gItemIconPalette_Pearl[] = INCBIN_U32("graphics/items/icon_palettes/pearl.gbapal.lz"); + +const u32 gItemIcon_BigPearl[] = INCBIN_U32("graphics/items/icons/big_pearl.4bpp.lz"); + +const u32 gItemIcon_PearlString[] = INCBIN_U32("graphics/items/icons/pearl_string.4bpp.lz"); +const u32 gItemIconPalette_PearlString[] = INCBIN_U32("graphics/items/icon_palettes/pearl_string.gbapal.lz"); + +const u32 gItemIcon_Stardust[] = INCBIN_U32("graphics/items/icons/stardust.4bpp.lz"); +const u32 gItemIconPalette_Star[] = INCBIN_U32("graphics/items/icon_palettes/star.gbapal.lz"); + +const u32 gItemIcon_StarPiece[] = INCBIN_U32("graphics/items/icons/star_piece.4bpp.lz"); + +const u32 gItemIcon_CometShard[] = INCBIN_U32("graphics/items/icons/comet_shard.4bpp.lz"); +const u32 gItemIconPalette_CometShard[] = INCBIN_U32("graphics/items/icon_palettes/comet_shard.gbapal.lz"); + +const u32 gItemIconPalette_ShoalSalt[] = INCBIN_U32("graphics/items/icon_palettes/shoal_salt.gbapal.lz"); + +const u32 gItemIcon_ShoalShell[] = INCBIN_U32("graphics/items/icons/shoal_shell.4bpp.lz"); +const u32 gItemIconPalette_Shell[] = INCBIN_U32("graphics/items/icon_palettes/shell.gbapal.lz"); + +const u32 gItemIcon_Shard[] = INCBIN_U32("graphics/items/icons/shard.4bpp.lz"); +const u32 gItemIconPalette_RedShard[] = INCBIN_U32("graphics/items/icon_palettes/red_shard.gbapal.lz"); + +const u32 gItemIconPalette_BlueShard[] = INCBIN_U32("graphics/items/icon_palettes/blue_shard.gbapal.lz"); + +const u32 gItemIconPalette_YellowShard[] = INCBIN_U32("graphics/items/icon_palettes/yellow_shard.gbapal.lz"); + +const u32 gItemIconPalette_GreenShard[] = INCBIN_U32("graphics/items/icon_palettes/green_shard.gbapal.lz"); + const u32 gItemIcon_HeartScale[] = INCBIN_U32("graphics/items/icons/heart_scale.4bpp.lz"); const u32 gItemIconPalette_HeartScale[] = INCBIN_U32("graphics/items/icon_palettes/heart_scale.gbapal.lz"); +const u32 gItemIcon_Honey[] = INCBIN_U32("graphics/items/icons/honey.4bpp.lz"); +const u32 gItemIconPalette_Honey[] = INCBIN_U32("graphics/items/icon_palettes/honey.gbapal.lz"); + +const u32 gItemIcon_RareBone[] = INCBIN_U32("graphics/items/icons/rare_bone.4bpp.lz"); +const u32 gItemIconPalette_RareBone[] = INCBIN_U32("graphics/items/icon_palettes/rare_bone.gbapal.lz"); + +const u32 gItemIcon_OddKeystone[] = INCBIN_U32("graphics/items/icons/odd_keystone.4bpp.lz"); +const u32 gItemIconPalette_OddKeystone[] = INCBIN_U32("graphics/items/icon_palettes/odd_keystone.gbapal.lz"); + +const u32 gItemIcon_PrettyFeather[] = INCBIN_U32("graphics/items/icons/pretty_feather.4bpp.lz"); +const u32 gItemIconPalette_PrettyFeather[] = INCBIN_U32("graphics/items/icon_palettes/pretty_feather.gbapal.lz"); + +const u32 gItemIcon_RelicCoin[] = INCBIN_U32("graphics/items/icons/relic_coin.4bpp.lz"); +const u32 gItemIconPalette_RelicCopper[] = INCBIN_U32("graphics/items/icon_palettes/relic_copper.gbapal.lz"); +const u32 gItemIconPalette_RelicSilver[] = INCBIN_U32("graphics/items/icon_palettes/relic_silver.gbapal.lz"); +const u32 gItemIconPalette_RelicGold[] = INCBIN_U32("graphics/items/icon_palettes/relic_gold.gbapal.lz"); + +const u32 gItemIcon_RelicVase[] = INCBIN_U32("graphics/items/icons/relic_vase.4bpp.lz"); +const u32 gItemIconPalette_Relics[] = INCBIN_U32("graphics/items/icon_palettes/relics.gbapal.lz"); +const u32 gItemIcon_RelicBand[] = INCBIN_U32("graphics/items/icons/relic_band.4bpp.lz"); +const u32 gItemIcon_RelicStatue[] = INCBIN_U32("graphics/items/icons/relic_statue.4bpp.lz"); +const u32 gItemIcon_RelicCrown[] = INCBIN_U32("graphics/items/icons/relic_crown.4bpp.lz"); + +const u32 gItemIcon_StrangeSouvenir[] = INCBIN_U32("graphics/items/icons/strange_souvenir.4bpp.lz"); +const u32 gItemIconPalette_StrangeSouvenir[] = INCBIN_U32("graphics/items/icon_palettes/strange_souvenir.gbapal.lz"); + +// Fossils + +const u32 gItemIcon_HelixFossil[] = INCBIN_U32("graphics/items/icons/helix_fossil.4bpp.lz"); +const u32 gItemIconPalette_KantoFossil[] = INCBIN_U32("graphics/items/icon_palettes/kanto_fossil.gbapal.lz"); + +const u32 gItemIcon_DomeFossil[] = INCBIN_U32("graphics/items/icons/dome_fossil.4bpp.lz"); + +const u32 gItemIcon_OldAmber[] = INCBIN_U32("graphics/items/icons/old_amber.4bpp.lz"); +const u32 gItemIconPalette_OldAmber[] = INCBIN_U32("graphics/items/icon_palettes/old_amber.gbapal.lz"); + +const u32 gItemIcon_RootFossil[] = INCBIN_U32("graphics/items/icons/root_fossil.4bpp.lz"); +const u32 gItemIconPalette_HoennFossil[] = INCBIN_U32("graphics/items/icon_palettes/hoenn_fossil.gbapal.lz"); + +const u32 gItemIcon_ClawFossil[] = INCBIN_U32("graphics/items/icons/claw_fossil.4bpp.lz"); + +const u32 gItemIcon_ArmorFossil[] = INCBIN_U32("graphics/items/icons/armor_fossil.4bpp.lz"); +const u32 gItemIconPalette_ArmorFossil[] = INCBIN_U32("graphics/items/icon_palettes/armor_fossil.gbapal.lz"); + +const u32 gItemIcon_SkullFossil[] = INCBIN_U32("graphics/items/icons/skull_fossil.4bpp.lz"); +const u32 gItemIconPalette_SkullFossil[] = INCBIN_U32("graphics/items/icon_palettes/skull_fossil.gbapal.lz"); + +const u32 gItemIcon_CoverFossil[] = INCBIN_U32("graphics/items/icons/cover_fossil.4bpp.lz"); +const u32 gItemIconPalette_CoverFossil[] = INCBIN_U32("graphics/items/icon_palettes/cover_fossil.gbapal.lz"); + +const u32 gItemIcon_PlumeFossil[] = INCBIN_U32("graphics/items/icons/plume_fossil.4bpp.lz"); +const u32 gItemIconPalette_PlumeFossil[] = INCBIN_U32("graphics/items/icon_palettes/plume_fossil.gbapal.lz"); + +const u32 gItemIcon_JawFossil[] = INCBIN_U32("graphics/items/icons/jaw_fossil.4bpp.lz"); +const u32 gItemIconPalette_JawFossil[] = INCBIN_U32("graphics/items/icon_palettes/jaw_fossil.gbapal.lz"); + +const u32 gItemIcon_SailFossil[] = INCBIN_U32("graphics/items/icons/sail_fossil.4bpp.lz"); +const u32 gItemIconPalette_SailFossil[] = INCBIN_U32("graphics/items/icon_palettes/sail_fossil.gbapal.lz"); + +const u32 gItemIcon_FossilizedBird[] = INCBIN_U32("graphics/items/icons/fossilized_bird.4bpp.lz"); +const u32 gItemIconPalette_FossilizedBird[] = INCBIN_U32("graphics/items/icon_palettes/fossilized_bird.gbapal.lz"); + +const u32 gItemIcon_FossilizedFish[] = INCBIN_U32("graphics/items/icons/fossilized_fish.4bpp.lz"); +const u32 gItemIconPalette_FossilizedFish[] = INCBIN_U32("graphics/items/icon_palettes/fossilized_fish.gbapal.lz"); + +const u32 gItemIcon_FossilizedDrake[] = INCBIN_U32("graphics/items/icons/fossilized_drake.4bpp.lz"); +const u32 gItemIconPalette_FossilizedDrake[] = INCBIN_U32("graphics/items/icon_palettes/fossilized_drake.gbapal.lz"); + +const u32 gItemIcon_FossilizedDino[] = INCBIN_U32("graphics/items/icons/fossilized_dino.4bpp.lz"); +const u32 gItemIconPalette_FossilizedDino[] = INCBIN_U32("graphics/items/icon_palettes/fossilized_dino.gbapal.lz"); + +// Mulch + +const u32 gItemIcon_Mulch[] = INCBIN_U32("graphics/items/icons/mulch.4bpp.lz"); +const u32 gItemIconPalette_GrowthMulch[] = INCBIN_U32("graphics/items/icon_palettes/growth_mulch.gbapal.lz"); +const u32 gItemIconPalette_DampMulch[] = INCBIN_U32("graphics/items/icon_palettes/damp_mulch.gbapal.lz"); + +const u32 gItemIcon_StableMulch[] = INCBIN_U32("graphics/items/icons/stable_mulch.4bpp.lz"); +const u32 gItemIconPalette_StableMulch[] = INCBIN_U32("graphics/items/icon_palettes/stable_mulch.gbapal.lz"); + +const u32 gItemIconPalette_GooeyMulch[] = INCBIN_U32("graphics/items/icon_palettes/gooey_mulch.gbapal.lz"); +const u32 gItemIconPalette_RichMulch[] = INCBIN_U32("graphics/items/icon_palettes/rich_mulch.gbapal.lz"); +const u32 gItemIconPalette_SurpriseMulch[] = INCBIN_U32("graphics/items/icon_palettes/surprise_mulch.gbapal.lz"); +const u32 gItemIconPalette_BoostMulch[] = INCBIN_U32("graphics/items/icon_palettes/boost_mulch.gbapal.lz"); +const u32 gItemIconPalette_AmazeMulch[] = INCBIN_U32("graphics/items/icon_palettes/amaze_mulch.gbapal.lz"); + +// Apricorns + +const u32 gItemIcon_RedApricorn[] = INCBIN_U32("graphics/items/icons/red_apricorn.4bpp.lz"); +const u32 gItemIconPalette_RedApricorn[] = INCBIN_U32("graphics/items/icon_palettes/red_apricorn.gbapal.lz"); + +const u32 gItemIcon_BlueApricorn[] = INCBIN_U32("graphics/items/icons/blue_apricorn.4bpp.lz"); +const u32 gItemIconPalette_BlueApricorn[] = INCBIN_U32("graphics/items/icon_palettes/blue_apricorn.gbapal.lz"); + +const u32 gItemIcon_YellowApricorn[] = INCBIN_U32("graphics/items/icons/yellow_apricorn.4bpp.lz"); +const u32 gItemIconPalette_YellowApricorn[] = INCBIN_U32("graphics/items/icon_palettes/yellow_apricorn.gbapal.lz"); + +const u32 gItemIcon_GreenApricorn[] = INCBIN_U32("graphics/items/icons/green_apricorn.4bpp.lz"); +const u32 gItemIconPalette_GreenApricorn[] = INCBIN_U32("graphics/items/icon_palettes/green_apricorn.gbapal.lz"); + +const u32 gItemIcon_PinkApricorn[] = INCBIN_U32("graphics/items/icons/pink_apricorn.4bpp.lz"); +const u32 gItemIconPalette_PinkApricorn[] = INCBIN_U32("graphics/items/icon_palettes/pink_apricorn.gbapal.lz"); + +const u32 gItemIcon_WhiteApricorn[] = INCBIN_U32("graphics/items/icons/white_apricorn.4bpp.lz"); +const u32 gItemIconPalette_WhiteApricorn[] = INCBIN_U32("graphics/items/icon_palettes/white_apricorn.gbapal.lz"); + +const u32 gItemIcon_BlackApricorn[] = INCBIN_U32("graphics/items/icons/black_apricorn.4bpp.lz"); +const u32 gItemIconPalette_BlackApricorn[] = INCBIN_U32("graphics/items/icon_palettes/black_apricorn.gbapal.lz"); + +const u32 gItemIcon_WishingPiece[] = INCBIN_U32("graphics/items/icons/wishing_piece.4bpp.lz"); +const u32 gItemIconPalette_WishingPiece[] = INCBIN_U32("graphics/items/icon_palettes/wishing_piece.gbapal.lz"); + +const u32 gItemIcon_GalaricaTwig[] = INCBIN_U32("graphics/items/icons/galarica_twig.4bpp.lz"); +const u32 gItemIconPalette_GalaricaItem[] = INCBIN_U32("graphics/items/icon_palettes/galarica_item.gbapal.lz"); + +const u32 gItemIcon_ArmoriteOre[] = INCBIN_U32("graphics/items/icons/armorite_ore.4bpp.lz"); +const u32 gItemIconPalette_ArmoriteOre[] = INCBIN_U32("graphics/items/icon_palettes/armorite_ore.gbapal.lz"); + +const u32 gItemIcon_DyniteOre[] = INCBIN_U32("graphics/items/icons/dynite_ore.4bpp.lz"); +const u32 gItemIconPalette_DyniteOre[] = INCBIN_U32("graphics/items/icon_palettes/dynite_ore.gbapal.lz"); + // Mail const u32 gItemIcon_OrangeMail[] = INCBIN_U32("graphics/items/icons/orange_mail.4bpp.lz"); @@ -258,6 +542,942 @@ const u32 gItemIconPalette_FabMail[] = INCBIN_U32("graphics/items/icon_palettes/ const u32 gItemIcon_RetroMail[] = INCBIN_U32("graphics/items/icons/retro_mail.4bpp.lz"); const u32 gItemIconPalette_RetroMail[] = INCBIN_U32("graphics/items/icon_palettes/retro_mail.gbapal.lz"); +// Evolution Items + +const u32 gItemIcon_FireStone[] = INCBIN_U32("graphics/items/icons/fire_stone.4bpp.lz"); +const u32 gItemIconPalette_FireStone[] = INCBIN_U32("graphics/items/icon_palettes/fire_stone.gbapal.lz"); + +const u32 gItemIcon_WaterStone[] = INCBIN_U32("graphics/items/icons/water_stone.4bpp.lz"); +const u32 gItemIconPalette_WaterStone[] = INCBIN_U32("graphics/items/icon_palettes/water_stone.gbapal.lz"); + +const u32 gItemIcon_ThunderStone[] = INCBIN_U32("graphics/items/icons/thunder_stone.4bpp.lz"); +const u32 gItemIconPalette_ThunderStone[] = INCBIN_U32("graphics/items/icon_palettes/thunder_stone.gbapal.lz"); + +const u32 gItemIcon_LeafStone[] = INCBIN_U32("graphics/items/icons/leaf_stone.4bpp.lz"); +const u32 gItemIconPalette_LeafStone[] = INCBIN_U32("graphics/items/icon_palettes/leaf_stone.gbapal.lz"); + +const u32 gItemIcon_IceStone[] = INCBIN_U32("graphics/items/icons/ice_stone.4bpp.lz"); +const u32 gItemIconPalette_IceStone[] = INCBIN_U32("graphics/items/icon_palettes/ice_stone.gbapal.lz"); + +const u32 gItemIcon_SunStone[] = INCBIN_U32("graphics/items/icons/sun_stone.4bpp.lz"); +const u32 gItemIconPalette_SunStone[] = INCBIN_U32("graphics/items/icon_palettes/sun_stone.gbapal.lz"); + +const u32 gItemIcon_MoonStone[] = INCBIN_U32("graphics/items/icons/moon_stone.4bpp.lz"); +const u32 gItemIconPalette_MoonStone[] = INCBIN_U32("graphics/items/icon_palettes/moon_stone.gbapal.lz"); + +const u32 gItemIcon_ShinyStone[] = INCBIN_U32("graphics/items/icons/shiny_stone.4bpp.lz"); +const u32 gItemIconPalette_ShinyStone[] = INCBIN_U32("graphics/items/icon_palettes/shiny_stone.gbapal.lz"); + +const u32 gItemIcon_DuskStone[] = INCBIN_U32("graphics/items/icons/dusk_stone.4bpp.lz"); +const u32 gItemIconPalette_DuskStone[] = INCBIN_U32("graphics/items/icon_palettes/dusk_stone.gbapal.lz"); + +const u32 gItemIcon_DawnStone[] = INCBIN_U32("graphics/items/icons/dawn_stone.4bpp.lz"); +const u32 gItemIconPalette_DawnStone[] = INCBIN_U32("graphics/items/icon_palettes/dawn_stone.gbapal.lz"); + +const u32 gItemIcon_SweetApple[] = INCBIN_U32("graphics/items/icons/sweet_apple.4bpp.lz"); +const u32 gItemIconPalette_SweetApple[] = INCBIN_U32("graphics/items/icon_palettes/sweet_apple.gbapal.lz"); + +const u32 gItemIcon_TartApple[] = INCBIN_U32("graphics/items/icons/tart_apple.4bpp.lz"); +const u32 gItemIconPalette_TartApple[] = INCBIN_U32("graphics/items/icon_palettes/tart_apple.gbapal.lz"); + +const u32 gItemIcon_CrackedPot[] = INCBIN_U32("graphics/items/icons/cracked_pot.4bpp.lz"); +const u32 gItemIcon_ChippedPot[] = INCBIN_U32("graphics/items/icons/chipped_pot.4bpp.lz"); +const u32 gItemIconPalette_Pot[] = INCBIN_U32("graphics/items/icon_palettes/pot.gbapal.lz"); + +const u32 gItemIcon_GalaricaCuff[] = INCBIN_U32("graphics/items/icons/galarica_cuff.4bpp.lz"); + +const u32 gItemIcon_GalaricaWreath[] = INCBIN_U32("graphics/items/icons/galarica_wreath.4bpp.lz"); + +const u32 gItemIcon_DragonScale[] = INCBIN_U32("graphics/items/icons/dragon_scale.4bpp.lz"); +const u32 gItemIconPalette_DragonScale[] = INCBIN_U32("graphics/items/icon_palettes/dragon_scale.gbapal.lz"); + +const u32 gItemIcon_Upgrade[] = INCBIN_U32("graphics/items/icons/upgrade.4bpp.lz"); +const u32 gItemIconPalette_Upgrade[] = INCBIN_U32("graphics/items/icon_palettes/upgrade.gbapal.lz"); + +const u32 gItemIcon_Protector[] = INCBIN_U32("graphics/items/icons/protector.4bpp.lz"); +const u32 gItemIconPalette_Protector[] = INCBIN_U32("graphics/items/icon_palettes/protector.gbapal.lz"); + +const u32 gItemIcon_Electirizer[] = INCBIN_U32("graphics/items/icons/electirizer.4bpp.lz"); +const u32 gItemIconPalette_Electirizer[] = INCBIN_U32("graphics/items/icon_palettes/electirizer.gbapal.lz"); + +const u32 gItemIcon_Magmarizer[] = INCBIN_U32("graphics/items/icons/magmarizer.4bpp.lz"); +const u32 gItemIconPalette_Magmarizer[] = INCBIN_U32("graphics/items/icon_palettes/magmarizer.gbapal.lz"); + +const u32 gItemIcon_DubiousDisc[] = INCBIN_U32("graphics/items/icons/dubious_disc.4bpp.lz"); +const u32 gItemIconPalette_DubiousDisc[] = INCBIN_U32("graphics/items/icon_palettes/dubious_disc.gbapal.lz"); + +const u32 gItemIcon_ReaperCloth[] = INCBIN_U32("graphics/items/icons/reaper_cloth.4bpp.lz"); +const u32 gItemIconPalette_ReaperCloth[] = INCBIN_U32("graphics/items/icon_palettes/reaper_cloth.gbapal.lz"); + +const u32 gItemIcon_PrismScale[] = INCBIN_U32("graphics/items/icons/prism_scale.4bpp.lz"); +const u32 gItemIconPalette_PrismScale[] = INCBIN_U32("graphics/items/icon_palettes/prism_scale.gbapal.lz"); + +const u32 gItemIcon_WhippedDream[] = INCBIN_U32("graphics/items/icons/whipped_dream.4bpp.lz"); +const u32 gItemIconPalette_WhippedDream[] = INCBIN_U32("graphics/items/icon_palettes/whipped_dream.gbapal.lz"); + +const u32 gItemIcon_Sachet[] = INCBIN_U32("graphics/items/icons/sachet.4bpp.lz"); +const u32 gItemIconPalette_Sachet[] = INCBIN_U32("graphics/items/icon_palettes/sachet.gbapal.lz"); + +const u32 gItemIcon_OvalStone[] = INCBIN_U32("graphics/items/icons/oval_stone.4bpp.lz"); +const u32 gItemIconPalette_OvalStone[] = INCBIN_U32("graphics/items/icon_palettes/oval_stone.gbapal.lz"); + +const u32 gItemIcon_StrawberrySweet[] = INCBIN_U32("graphics/items/icons/strawberry_sweet.4bpp.lz"); +const u32 gItemIconPalette_StrawberrySweet[] = INCBIN_U32("graphics/items/icon_palettes/strawberry_sweet.gbapal.lz"); + +const u32 gItemIcon_LoveSweet[] = INCBIN_U32("graphics/items/icons/love_sweet.4bpp.lz"); +const u32 gItemIconPalette_LoveSweet[] = INCBIN_U32("graphics/items/icon_palettes/love_sweet.gbapal.lz"); + +const u32 gItemIcon_BerrySweet[] = INCBIN_U32("graphics/items/icons/berry_sweet.4bpp.lz"); +const u32 gItemIconPalette_BerrySweet[] = INCBIN_U32("graphics/items/icon_palettes/berry_sweet.gbapal.lz"); + +const u32 gItemIcon_CloverSweet[] = INCBIN_U32("graphics/items/icons/clover_sweet.4bpp.lz"); +const u32 gItemIconPalette_CloverSweet[] = INCBIN_U32("graphics/items/icon_palettes/clover_sweet.gbapal.lz"); + +const u32 gItemIcon_FlowerSweet[] = INCBIN_U32("graphics/items/icons/flower_sweet.4bpp.lz"); +const u32 gItemIconPalette_FlowerSweet[] = INCBIN_U32("graphics/items/icon_palettes/flower_sweet.gbapal.lz"); + +const u32 gItemIcon_StarSweet[] = INCBIN_U32("graphics/items/icons/star_sweet.4bpp.lz"); +const u32 gItemIconPalette_StarSweet[] = INCBIN_U32("graphics/items/icon_palettes/star_sweet.gbapal.lz"); + +const u32 gItemIcon_RibbonSweet[] = INCBIN_U32("graphics/items/icons/ribbon_sweet.4bpp.lz"); +const u32 gItemIconPalette_RibbonSweet[] = INCBIN_U32("graphics/items/icon_palettes/ribbon_sweet.gbapal.lz"); + +const u32 gItemIcon_Everstone[] = INCBIN_U32("graphics/items/icons/everstone.4bpp.lz"); +const u32 gItemIconPalette_Everstone[] = INCBIN_U32("graphics/items/icon_palettes/everstone.gbapal.lz"); + +// Nectars + +const u32 gItemIcon_RedNectar[] = INCBIN_U32("graphics/items/icons/red_nectar.4bpp.lz"); +const u32 gItemIconPalette_RedNectar[] = INCBIN_U32("graphics/items/icon_palettes/red_nectar.gbapal.lz"); + +const u32 gItemIcon_YellowNectar[] = INCBIN_U32("graphics/items/icons/yellow_nectar.4bpp.lz"); +const u32 gItemIconPalette_YellowNectar[] = INCBIN_U32("graphics/items/icon_palettes/yellow_nectar.gbapal.lz"); + +const u32 gItemIcon_PinkNectar[] = INCBIN_U32("graphics/items/icons/pink_nectar.4bpp.lz"); +const u32 gItemIconPalette_PinkNectar[] = INCBIN_U32("graphics/items/icon_palettes/pink_nectar.gbapal.lz"); + +const u32 gItemIcon_PurpleNectar[] = INCBIN_U32("graphics/items/icons/purple_nectar.4bpp.lz"); +const u32 gItemIconPalette_PurpleNectar[] = INCBIN_U32("graphics/items/icon_palettes/purple_nectar.gbapal.lz"); + +// Plates + +const u32 gItemIcon_FlamePlate[] = INCBIN_U32("graphics/items/icons/flame_plate.4bpp.lz"); +const u32 gItemIconPalette_FlamePlate[] = INCBIN_U32("graphics/items/icon_palettes/flame_plate.gbapal.lz"); + +const u32 gItemIcon_SplashPlate[] = INCBIN_U32("graphics/items/icons/splash_plate.4bpp.lz"); +const u32 gItemIconPalette_SplashPlate[] = INCBIN_U32("graphics/items/icon_palettes/splash_plate.gbapal.lz"); + +const u32 gItemIcon_ZapPlate[] = INCBIN_U32("graphics/items/icons/zap_plate.4bpp.lz"); +const u32 gItemIconPalette_ZapPlate[] = INCBIN_U32("graphics/items/icon_palettes/zap_plate.gbapal.lz"); + +const u32 gItemIcon_MeadowPlate[] = INCBIN_U32("graphics/items/icons/meadow_plate.4bpp.lz"); +const u32 gItemIconPalette_MeadowPlate[] = INCBIN_U32("graphics/items/icon_palettes/meadow_plate.gbapal.lz"); + +const u32 gItemIcon_IciclePlate[] = INCBIN_U32("graphics/items/icons/icicle_plate.4bpp.lz"); +const u32 gItemIconPalette_IciclePlate[] = INCBIN_U32("graphics/items/icon_palettes/icicle_plate.gbapal.lz"); + +const u32 gItemIcon_FistPlate[] = INCBIN_U32("graphics/items/icons/fist_plate.4bpp.lz"); +const u32 gItemIconPalette_FistPlate[] = INCBIN_U32("graphics/items/icon_palettes/fist_plate.gbapal.lz"); + +const u32 gItemIcon_ToxicPlate[] = INCBIN_U32("graphics/items/icons/toxic_plate.4bpp.lz"); +const u32 gItemIconPalette_ToxicPlate[] = INCBIN_U32("graphics/items/icon_palettes/toxic_plate.gbapal.lz"); + +const u32 gItemIcon_EarthPlate[] = INCBIN_U32("graphics/items/icons/earth_plate.4bpp.lz"); +const u32 gItemIconPalette_EarthPlate[] = INCBIN_U32("graphics/items/icon_palettes/earth_plate.gbapal.lz"); + +const u32 gItemIcon_SkyPlate[] = INCBIN_U32("graphics/items/icons/sky_plate.4bpp.lz"); +const u32 gItemIconPalette_SkyPlate[] = INCBIN_U32("graphics/items/icon_palettes/sky_plate.gbapal.lz"); + +const u32 gItemIcon_MindPlate[] = INCBIN_U32("graphics/items/icons/mind_plate.4bpp.lz"); +const u32 gItemIconPalette_MindPlate[] = INCBIN_U32("graphics/items/icon_palettes/mind_plate.gbapal.lz"); + +const u32 gItemIcon_InsectPlate[] = INCBIN_U32("graphics/items/icons/insect_plate.4bpp.lz"); +const u32 gItemIconPalette_InsectPlate[] = INCBIN_U32("graphics/items/icon_palettes/insect_plate.gbapal.lz"); + +const u32 gItemIcon_StonePlate[] = INCBIN_U32("graphics/items/icons/stone_plate.4bpp.lz"); +const u32 gItemIconPalette_StonePlate[] = INCBIN_U32("graphics/items/icon_palettes/stone_plate.gbapal.lz"); + +const u32 gItemIcon_SpookyPlate[] = INCBIN_U32("graphics/items/icons/spooky_plate.4bpp.lz"); +const u32 gItemIconPalette_SpookyPlate[] = INCBIN_U32("graphics/items/icon_palettes/spooky_plate.gbapal.lz"); + +const u32 gItemIcon_DracoPlate[] = INCBIN_U32("graphics/items/icons/draco_plate.4bpp.lz"); +const u32 gItemIconPalette_DracoPlate[] = INCBIN_U32("graphics/items/icon_palettes/draco_plate.gbapal.lz"); + +const u32 gItemIcon_DreadPlate[] = INCBIN_U32("graphics/items/icons/dread_plate.4bpp.lz"); +const u32 gItemIconPalette_DreadPlate[] = INCBIN_U32("graphics/items/icon_palettes/dread_plate.gbapal.lz"); + +const u32 gItemIcon_IronPlate[] = INCBIN_U32("graphics/items/icons/iron_plate.4bpp.lz"); +const u32 gItemIconPalette_IronPlate[] = INCBIN_U32("graphics/items/icon_palettes/iron_plate.gbapal.lz"); + +const u32 gItemIcon_PixiePlate[] = INCBIN_U32("graphics/items/icons/pixie_plate.4bpp.lz"); +const u32 gItemIconPalette_PixiePlate[] = INCBIN_U32("graphics/items/icon_palettes/pixie_plate.gbapal.lz"); + +// Drives + +const u32 gItemIcon_DouseDrive[] = INCBIN_U32("graphics/items/icons/douse_drive.4bpp.lz"); +const u32 gItemIconPalette_DouseDrive[] = INCBIN_U32("graphics/items/icon_palettes/douse_drive.gbapal.lz"); + +const u32 gItemIcon_ShockDrive[] = INCBIN_U32("graphics/items/icons/shock_drive.4bpp.lz"); +const u32 gItemIconPalette_ShockDrive[] = INCBIN_U32("graphics/items/icon_palettes/shock_drive.gbapal.lz"); + +const u32 gItemIcon_BurnDrive[] = INCBIN_U32("graphics/items/icons/burn_drive.4bpp.lz"); +const u32 gItemIconPalette_BurnDrive[] = INCBIN_U32("graphics/items/icon_palettes/burn_drive.gbapal.lz"); + +const u32 gItemIcon_ChillDrive[] = INCBIN_U32("graphics/items/icons/chill_drive.4bpp.lz"); +const u32 gItemIconPalette_ChillDrive[] = INCBIN_U32("graphics/items/icon_palettes/chill_drive.gbapal.lz"); + +// Memories + +const u32 gItemIcon_FireMemory[] = INCBIN_U32("graphics/items/icons/fire_memory.4bpp.lz"); +const u32 gItemIconPalette_FireMemory[] = INCBIN_U32("graphics/items/icon_palettes/fire_memory.gbapal.lz"); + +const u32 gItemIcon_WaterMemory[] = INCBIN_U32("graphics/items/icons/water_memory.4bpp.lz"); +const u32 gItemIconPalette_WaterMemory[] = INCBIN_U32("graphics/items/icon_palettes/water_memory.gbapal.lz"); + +const u32 gItemIcon_ElectricMemory[] = INCBIN_U32("graphics/items/icons/electric_memory.4bpp.lz"); +const u32 gItemIconPalette_ElectricMemory[] = INCBIN_U32("graphics/items/icon_palettes/electric_memory.gbapal.lz"); + +const u32 gItemIcon_GrassMemory[] = INCBIN_U32("graphics/items/icons/grass_memory.4bpp.lz"); +const u32 gItemIconPalette_GrassMemory[] = INCBIN_U32("graphics/items/icon_palettes/grass_memory.gbapal.lz"); + +const u32 gItemIcon_IceMemory[] = INCBIN_U32("graphics/items/icons/ice_memory.4bpp.lz"); +const u32 gItemIconPalette_IceMemory[] = INCBIN_U32("graphics/items/icon_palettes/ice_memory.gbapal.lz"); + +const u32 gItemIcon_FightingMemory[] = INCBIN_U32("graphics/items/icons/fighting_memory.4bpp.lz"); +const u32 gItemIconPalette_FightingMemory[] = INCBIN_U32("graphics/items/icon_palettes/fighting_memory.gbapal.lz"); + +const u32 gItemIcon_PoisonMemory[] = INCBIN_U32("graphics/items/icons/poison_memory.4bpp.lz"); +const u32 gItemIconPalette_PoisonMemory[] = INCBIN_U32("graphics/items/icon_palettes/poison_memory.gbapal.lz"); + +const u32 gItemIcon_GroundMemory[] = INCBIN_U32("graphics/items/icons/ground_memory.4bpp.lz"); +const u32 gItemIconPalette_GroundMemory[] = INCBIN_U32("graphics/items/icon_palettes/ground_memory.gbapal.lz"); + +const u32 gItemIcon_FlyingMemory[] = INCBIN_U32("graphics/items/icons/flying_memory.4bpp.lz"); +const u32 gItemIconPalette_FlyingMemory[] = INCBIN_U32("graphics/items/icon_palettes/flying_memory.gbapal.lz"); + +const u32 gItemIcon_PsychicMemory[] = INCBIN_U32("graphics/items/icons/psychic_memory.4bpp.lz"); +const u32 gItemIconPalette_PsychicMemory[] = INCBIN_U32("graphics/items/icon_palettes/psychic_memory.gbapal.lz"); + +const u32 gItemIcon_BugMemory[] = INCBIN_U32("graphics/items/icons/bug_memory.4bpp.lz"); +const u32 gItemIconPalette_BugMemory[] = INCBIN_U32("graphics/items/icon_palettes/bug_memory.gbapal.lz"); + +const u32 gItemIcon_RockMemory[] = INCBIN_U32("graphics/items/icons/rock_memory.4bpp.lz"); +const u32 gItemIconPalette_RockMemory[] = INCBIN_U32("graphics/items/icon_palettes/rock_memory.gbapal.lz"); + +const u32 gItemIcon_GhostMemory[] = INCBIN_U32("graphics/items/icons/ghost_memory.4bpp.lz"); +const u32 gItemIconPalette_GhostMemory[] = INCBIN_U32("graphics/items/icon_palettes/ghost_memory.gbapal.lz"); + +const u32 gItemIcon_DragonMemory[] = INCBIN_U32("graphics/items/icons/dragon_memory.4bpp.lz"); +const u32 gItemIconPalette_DragonMemory[] = INCBIN_U32("graphics/items/icon_palettes/dragon_memory.gbapal.lz"); + +const u32 gItemIcon_DarkMemory[] = INCBIN_U32("graphics/items/icons/dark_memory.4bpp.lz"); +const u32 gItemIconPalette_DarkMemory[] = INCBIN_U32("graphics/items/icon_palettes/dark_memory.gbapal.lz"); + +const u32 gItemIcon_SteelMemory[] = INCBIN_U32("graphics/items/icons/steel_memory.4bpp.lz"); +const u32 gItemIconPalette_SteelMemory[] = INCBIN_U32("graphics/items/icon_palettes/steel_memory.gbapal.lz"); + +const u32 gItemIcon_FairyMemory[] = INCBIN_U32("graphics/items/icons/fairy_memory.4bpp.lz"); +const u32 gItemIconPalette_FairyMemory[] = INCBIN_U32("graphics/items/icon_palettes/fairy_memory.gbapal.lz"); + +const u32 gItemIcon_RustedSword[] = INCBIN_U32("graphics/items/icons/rusted_sword.4bpp.lz"); +const u32 gItemIcon_RustedShield[] = INCBIN_U32("graphics/items/icons/rusted_shield.4bpp.lz"); +const u32 gItemIconPalette_RustedWeapons[] = INCBIN_U32("graphics/items/icon_palettes/rusted_weapons.gbapal.lz"); + +// Colored Orbs + +const u32 gItemIcon_RedOrb[] = INCBIN_U32("graphics/items/icons/red_orb.4bpp.lz"); +const u32 gItemIconPalette_RedOrb[] = INCBIN_U32("graphics/items/icon_palettes/red_orb.gbapal.lz"); + +const u32 gItemIcon_BlueOrb[] = INCBIN_U32("graphics/items/icons/blue_orb.4bpp.lz"); +const u32 gItemIconPalette_BlueOrb[] = INCBIN_U32("graphics/items/icon_palettes/blue_orb.gbapal.lz"); + +// Mega Stones + +const u32 gItemIcon_Venusaurite[] = INCBIN_U32("graphics/items/icons/venusaurite.4bpp.lz"); +const u32 gItemIconPalette_Venusaurite[] = INCBIN_U32("graphics/items/icon_palettes/venusaurite.gbapal.lz"); + +const u32 gItemIcon_CharizarditeX[] = INCBIN_U32("graphics/items/icons/charizardite_x.4bpp.lz"); +const u32 gItemIconPalette_CharizarditeX[] = INCBIN_U32("graphics/items/icon_palettes/charizardite_x.gbapal.lz"); + +const u32 gItemIcon_CharizarditeY[] = INCBIN_U32("graphics/items/icons/charizardite_y.4bpp.lz"); +const u32 gItemIconPalette_CharizarditeY[] = INCBIN_U32("graphics/items/icon_palettes/charizardite_y.gbapal.lz"); + +const u32 gItemIcon_Blastoisinite[] = INCBIN_U32("graphics/items/icons/blastoisinite.4bpp.lz"); +const u32 gItemIconPalette_Blastoisinite[] = INCBIN_U32("graphics/items/icon_palettes/blastoisinite.gbapal.lz"); + +const u32 gItemIcon_Beedrillite[] = INCBIN_U32("graphics/items/icons/beedrillite.4bpp.lz"); +const u32 gItemIconPalette_Beedrillite[] = INCBIN_U32("graphics/items/icon_palettes/beedrillite.gbapal.lz"); + +const u32 gItemIcon_Pidgeotite[] = INCBIN_U32("graphics/items/icons/pidgeotite.4bpp.lz"); +const u32 gItemIconPalette_Pidgeotite[] = INCBIN_U32("graphics/items/icon_palettes/pidgeotite.gbapal.lz"); + +const u32 gItemIcon_Alakazite[] = INCBIN_U32("graphics/items/icons/alakazite.4bpp.lz"); +const u32 gItemIconPalette_Alakazite[] = INCBIN_U32("graphics/items/icon_palettes/alakazite.gbapal.lz"); + +const u32 gItemIcon_Slowbronite[] = INCBIN_U32("graphics/items/icons/slowbronite.4bpp.lz"); +const u32 gItemIconPalette_Slowbronite[] = INCBIN_U32("graphics/items/icon_palettes/slowbronite.gbapal.lz"); + +const u32 gItemIcon_Gengarite[] = INCBIN_U32("graphics/items/icons/gengarite.4bpp.lz"); +const u32 gItemIconPalette_Gengarite[] = INCBIN_U32("graphics/items/icon_palettes/gengarite.gbapal.lz"); + +const u32 gItemIcon_Kangaskhanite[] = INCBIN_U32("graphics/items/icons/kangaskhanite.4bpp.lz"); +const u32 gItemIconPalette_Kangaskhanite[] = INCBIN_U32("graphics/items/icon_palettes/kangaskhanite.gbapal.lz"); + +const u32 gItemIcon_Pinsirite[] = INCBIN_U32("graphics/items/icons/pinsirite.4bpp.lz"); +const u32 gItemIconPalette_Pinsirite[] = INCBIN_U32("graphics/items/icon_palettes/pinsirite.gbapal.lz"); + +const u32 gItemIcon_Gyaradosite[] = INCBIN_U32("graphics/items/icons/gyaradosite.4bpp.lz"); +const u32 gItemIconPalette_Gyaradosite[] = INCBIN_U32("graphics/items/icon_palettes/gyaradosite.gbapal.lz"); + +const u32 gItemIcon_Aerodactylite[] = INCBIN_U32("graphics/items/icons/aerodactylite.4bpp.lz"); +const u32 gItemIconPalette_Aerodactylite[] = INCBIN_U32("graphics/items/icon_palettes/aerodactylite.gbapal.lz"); + +const u32 gItemIcon_MewtwoniteX[] = INCBIN_U32("graphics/items/icons/mewtwonite_x.4bpp.lz"); +const u32 gItemIconPalette_MewtwoniteX[] = INCBIN_U32("graphics/items/icon_palettes/mewtwonite_x.gbapal.lz"); + +const u32 gItemIcon_MewtwoniteY[] = INCBIN_U32("graphics/items/icons/mewtwonite_y.4bpp.lz"); +const u32 gItemIconPalette_MewtwoniteY[] = INCBIN_U32("graphics/items/icon_palettes/mewtwonite_y.gbapal.lz"); + +const u32 gItemIcon_Ampharosite[] = INCBIN_U32("graphics/items/icons/ampharosite.4bpp.lz"); +const u32 gItemIconPalette_Ampharosite[] = INCBIN_U32("graphics/items/icon_palettes/ampharosite.gbapal.lz"); + +const u32 gItemIcon_Steelixite[] = INCBIN_U32("graphics/items/icons/steelixite.4bpp.lz"); +const u32 gItemIconPalette_Steelixite[] = INCBIN_U32("graphics/items/icon_palettes/steelixite.gbapal.lz"); + +const u32 gItemIcon_Scizorite[] = INCBIN_U32("graphics/items/icons/scizorite.4bpp.lz"); +const u32 gItemIconPalette_Scizorite[] = INCBIN_U32("graphics/items/icon_palettes/scizorite.gbapal.lz"); + +const u32 gItemIcon_Heracronite[] = INCBIN_U32("graphics/items/icons/heracronite.4bpp.lz"); +const u32 gItemIconPalette_Heracronite[] = INCBIN_U32("graphics/items/icon_palettes/heracronite.gbapal.lz"); + +const u32 gItemIcon_Houndoominite[] = INCBIN_U32("graphics/items/icons/houndoominite.4bpp.lz"); +const u32 gItemIconPalette_Houndoominite[] = INCBIN_U32("graphics/items/icon_palettes/houndoominite.gbapal.lz"); + +const u32 gItemIcon_Tyranitarite[] = INCBIN_U32("graphics/items/icons/tyranitarite.4bpp.lz"); +const u32 gItemIconPalette_Tyranitarite[] = INCBIN_U32("graphics/items/icon_palettes/tyranitarite.gbapal.lz"); + +const u32 gItemIcon_Sceptilite[] = INCBIN_U32("graphics/items/icons/sceptilite.4bpp.lz"); +const u32 gItemIconPalette_Sceptilite[] = INCBIN_U32("graphics/items/icon_palettes/sceptilite.gbapal.lz"); + +const u32 gItemIcon_Blazikenite[] = INCBIN_U32("graphics/items/icons/blazikenite.4bpp.lz"); +const u32 gItemIconPalette_Blazikenite[] = INCBIN_U32("graphics/items/icon_palettes/blazikenite.gbapal.lz"); + +const u32 gItemIcon_Swampertite[] = INCBIN_U32("graphics/items/icons/swampertite.4bpp.lz"); +const u32 gItemIconPalette_Swampertite[] = INCBIN_U32("graphics/items/icon_palettes/swampertite.gbapal.lz"); + +const u32 gItemIcon_Gardevoirite[] = INCBIN_U32("graphics/items/icons/gardevoirite.4bpp.lz"); +const u32 gItemIconPalette_Gardevoirite[] = INCBIN_U32("graphics/items/icon_palettes/gardevoirite.gbapal.lz"); + +const u32 gItemIcon_Sablenite[] = INCBIN_U32("graphics/items/icons/sablenite.4bpp.lz"); +const u32 gItemIconPalette_Sablenite[] = INCBIN_U32("graphics/items/icon_palettes/sablenite.gbapal.lz"); + +const u32 gItemIcon_Mawilite[] = INCBIN_U32("graphics/items/icons/mawilite.4bpp.lz"); +const u32 gItemIconPalette_Mawilite[] = INCBIN_U32("graphics/items/icon_palettes/mawilite.gbapal.lz"); + +const u32 gItemIcon_Aggronite[] = INCBIN_U32("graphics/items/icons/aggronite.4bpp.lz"); +const u32 gItemIconPalette_Aggronite[] = INCBIN_U32("graphics/items/icon_palettes/aggronite.gbapal.lz"); + +const u32 gItemIcon_Medichamite[] = INCBIN_U32("graphics/items/icons/medichamite.4bpp.lz"); +const u32 gItemIconPalette_Medichamite[] = INCBIN_U32("graphics/items/icon_palettes/medichamite.gbapal.lz"); + +const u32 gItemIcon_Manectite[] = INCBIN_U32("graphics/items/icons/manectite.4bpp.lz"); +const u32 gItemIconPalette_Manectite[] = INCBIN_U32("graphics/items/icon_palettes/manectite.gbapal.lz"); + +const u32 gItemIcon_Sharpedonite[] = INCBIN_U32("graphics/items/icons/sharpedonite.4bpp.lz"); +const u32 gItemIconPalette_Sharpedonite[] = INCBIN_U32("graphics/items/icon_palettes/sharpedonite.gbapal.lz"); + +const u32 gItemIcon_Cameruptite[] = INCBIN_U32("graphics/items/icons/cameruptite.4bpp.lz"); +const u32 gItemIconPalette_Cameruptite[] = INCBIN_U32("graphics/items/icon_palettes/cameruptite.gbapal.lz"); + +const u32 gItemIcon_Altarianite[] = INCBIN_U32("graphics/items/icons/altarianite.4bpp.lz"); +const u32 gItemIconPalette_Altarianite[] = INCBIN_U32("graphics/items/icon_palettes/altarianite.gbapal.lz"); + +const u32 gItemIcon_Banettite[] = INCBIN_U32("graphics/items/icons/banettite.4bpp.lz"); +const u32 gItemIconPalette_Banettite[] = INCBIN_U32("graphics/items/icon_palettes/banettite.gbapal.lz"); + +const u32 gItemIcon_Absolite[] = INCBIN_U32("graphics/items/icons/absolite.4bpp.lz"); +const u32 gItemIconPalette_Absolite[] = INCBIN_U32("graphics/items/icon_palettes/absolite.gbapal.lz"); + +const u32 gItemIcon_Glalitite[] = INCBIN_U32("graphics/items/icons/glalitite.4bpp.lz"); +const u32 gItemIconPalette_Glalitite[] = INCBIN_U32("graphics/items/icon_palettes/glalitite.gbapal.lz"); + +const u32 gItemIcon_Salamencite[] = INCBIN_U32("graphics/items/icons/salamencite.4bpp.lz"); +const u32 gItemIconPalette_Salamencite[] = INCBIN_U32("graphics/items/icon_palettes/salamencite.gbapal.lz"); + +const u32 gItemIcon_Metagrossite[] = INCBIN_U32("graphics/items/icons/metagrossite.4bpp.lz"); +const u32 gItemIconPalette_Metagrossite[] = INCBIN_U32("graphics/items/icon_palettes/metagrossite.gbapal.lz"); + +const u32 gItemIcon_Latiasite[] = INCBIN_U32("graphics/items/icons/latiasite.4bpp.lz"); +const u32 gItemIconPalette_Latiasite[] = INCBIN_U32("graphics/items/icon_palettes/latiasite.gbapal.lz"); + +const u32 gItemIcon_Latiosite[] = INCBIN_U32("graphics/items/icons/latiosite.4bpp.lz"); +const u32 gItemIconPalette_Latiosite[] = INCBIN_U32("graphics/items/icon_palettes/latiosite.gbapal.lz"); + +const u32 gItemIcon_Lopunnite[] = INCBIN_U32("graphics/items/icons/lopunnite.4bpp.lz"); +const u32 gItemIconPalette_Lopunnite[] = INCBIN_U32("graphics/items/icon_palettes/lopunnite.gbapal.lz"); + +const u32 gItemIcon_Garchompite[] = INCBIN_U32("graphics/items/icons/garchompite.4bpp.lz"); +const u32 gItemIconPalette_Garchompite[] = INCBIN_U32("graphics/items/icon_palettes/garchompite.gbapal.lz"); + +const u32 gItemIcon_Lucarionite[] = INCBIN_U32("graphics/items/icons/lucarionite.4bpp.lz"); +const u32 gItemIconPalette_Lucarionite[] = INCBIN_U32("graphics/items/icon_palettes/lucarionite.gbapal.lz"); + +const u32 gItemIcon_Abomasite[] = INCBIN_U32("graphics/items/icons/abomasite.4bpp.lz"); +const u32 gItemIconPalette_Abomasite[] = INCBIN_U32("graphics/items/icon_palettes/abomasite.gbapal.lz"); + +const u32 gItemIcon_Galladite[] = INCBIN_U32("graphics/items/icons/galladite.4bpp.lz"); +const u32 gItemIconPalette_Galladite[] = INCBIN_U32("graphics/items/icon_palettes/galladite.gbapal.lz"); + +const u32 gItemIcon_Audinite[] = INCBIN_U32("graphics/items/icons/audinite.4bpp.lz"); +const u32 gItemIconPalette_Audinite[] = INCBIN_U32("graphics/items/icon_palettes/audinite.gbapal.lz"); + +const u32 gItemIcon_Diancite[] = INCBIN_U32("graphics/items/icons/diancite.4bpp.lz"); +const u32 gItemIconPalette_Diancite[] = INCBIN_U32("graphics/items/icon_palettes/diancite.gbapal.lz"); + +// Gems + +const u32 gItemIcon_NormalGem[] = INCBIN_U32("graphics/items/icons/normal_gem.4bpp.lz"); +const u32 gItemIconPalette_NormalGem[] = INCBIN_U32("graphics/items/icon_palettes/normal_gem.gbapal.lz"); + +const u32 gItemIcon_FireGem[] = INCBIN_U32("graphics/items/icons/fire_gem.4bpp.lz"); +const u32 gItemIconPalette_FireGem[] = INCBIN_U32("graphics/items/icon_palettes/fire_gem.gbapal.lz"); + +const u32 gItemIcon_WaterGem[] = INCBIN_U32("graphics/items/icons/water_gem.4bpp.lz"); +const u32 gItemIconPalette_WaterGem[] = INCBIN_U32("graphics/items/icon_palettes/water_gem.gbapal.lz"); + +const u32 gItemIcon_ElectricGem[] = INCBIN_U32("graphics/items/icons/electric_gem.4bpp.lz"); +const u32 gItemIconPalette_ElectricGem[] = INCBIN_U32("graphics/items/icon_palettes/electric_gem.gbapal.lz"); + +const u32 gItemIcon_GrassGem[] = INCBIN_U32("graphics/items/icons/grass_gem.4bpp.lz"); +const u32 gItemIconPalette_GrassGem[] = INCBIN_U32("graphics/items/icon_palettes/grass_gem.gbapal.lz"); + +const u32 gItemIcon_IceGem[] = INCBIN_U32("graphics/items/icons/ice_gem.4bpp.lz"); +const u32 gItemIconPalette_IceGem[] = INCBIN_U32("graphics/items/icon_palettes/ice_gem.gbapal.lz"); + +const u32 gItemIcon_FightingGem[] = INCBIN_U32("graphics/items/icons/fighting_gem.4bpp.lz"); +const u32 gItemIconPalette_FightingGem[] = INCBIN_U32("graphics/items/icon_palettes/fighting_gem.gbapal.lz"); + +const u32 gItemIcon_PoisonGem[] = INCBIN_U32("graphics/items/icons/poison_gem.4bpp.lz"); +const u32 gItemIconPalette_PoisonGem[] = INCBIN_U32("graphics/items/icon_palettes/poison_gem.gbapal.lz"); + +const u32 gItemIcon_GroundGem[] = INCBIN_U32("graphics/items/icons/ground_gem.4bpp.lz"); +const u32 gItemIconPalette_GroundGem[] = INCBIN_U32("graphics/items/icon_palettes/ground_gem.gbapal.lz"); + +const u32 gItemIcon_FlyingGem[] = INCBIN_U32("graphics/items/icons/flying_gem.4bpp.lz"); +const u32 gItemIconPalette_FlyingGem[] = INCBIN_U32("graphics/items/icon_palettes/flying_gem.gbapal.lz"); + +const u32 gItemIcon_PsychicGem[] = INCBIN_U32("graphics/items/icons/psychic_gem.4bpp.lz"); +const u32 gItemIconPalette_PsychicGem[] = INCBIN_U32("graphics/items/icon_palettes/psychic_gem.gbapal.lz"); + +const u32 gItemIcon_BugGem[] = INCBIN_U32("graphics/items/icons/bug_gem.4bpp.lz"); +const u32 gItemIconPalette_BugGem[] = INCBIN_U32("graphics/items/icon_palettes/bug_gem.gbapal.lz"); + +const u32 gItemIcon_RockGem[] = INCBIN_U32("graphics/items/icons/rock_gem.4bpp.lz"); +const u32 gItemIconPalette_RockGem[] = INCBIN_U32("graphics/items/icon_palettes/rock_gem.gbapal.lz"); + +const u32 gItemIcon_GhostGem[] = INCBIN_U32("graphics/items/icons/ghost_gem.4bpp.lz"); +const u32 gItemIconPalette_GhostGem[] = INCBIN_U32("graphics/items/icon_palettes/ghost_gem.gbapal.lz"); + +const u32 gItemIcon_DragonGem[] = INCBIN_U32("graphics/items/icons/dragon_gem.4bpp.lz"); +const u32 gItemIconPalette_DragonGem[] = INCBIN_U32("graphics/items/icon_palettes/dragon_gem.gbapal.lz"); + +const u32 gItemIcon_DarkGem[] = INCBIN_U32("graphics/items/icons/dark_gem.4bpp.lz"); +const u32 gItemIconPalette_DarkGem[] = INCBIN_U32("graphics/items/icon_palettes/dark_gem.gbapal.lz"); + +const u32 gItemIcon_SteelGem[] = INCBIN_U32("graphics/items/icons/steel_gem.4bpp.lz"); +const u32 gItemIconPalette_SteelGem[] = INCBIN_U32("graphics/items/icon_palettes/steel_gem.gbapal.lz"); + +const u32 gItemIcon_FairyGem[] = INCBIN_U32("graphics/items/icons/fairy_gem.4bpp.lz"); +const u32 gItemIconPalette_FairyGem[] = INCBIN_U32("graphics/items/icon_palettes/fairy_gem.gbapal.lz"); + +// Z-Crystals + +const u32 gItemIcon_NormaliumZ[] = INCBIN_U32("graphics/items/icons/normalium_z.4bpp.lz"); +const u32 gItemIconPalette_NormaliumZ[] = INCBIN_U32("graphics/items/icon_palettes/normalium_z.gbapal.lz"); + +const u32 gItemIcon_FiriumZ[] = INCBIN_U32("graphics/items/icons/firium_z.4bpp.lz"); +const u32 gItemIconPalette_FiriumZ[] = INCBIN_U32("graphics/items/icon_palettes/firium_z.gbapal.lz"); + +const u32 gItemIcon_WateriumZ[] = INCBIN_U32("graphics/items/icons/waterium_z.4bpp.lz"); +const u32 gItemIconPalette_WateriumZ[] = INCBIN_U32("graphics/items/icon_palettes/waterium_z.gbapal.lz"); + +const u32 gItemIcon_ElectriumZ[] = INCBIN_U32("graphics/items/icons/electrium_z.4bpp.lz"); +const u32 gItemIconPalette_ElectriumZ[] = INCBIN_U32("graphics/items/icon_palettes/electrium_z.gbapal.lz"); + +const u32 gItemIcon_GrassiumZ[] = INCBIN_U32("graphics/items/icons/grassium_z.4bpp.lz"); +const u32 gItemIconPalette_GrassiumZ[] = INCBIN_U32("graphics/items/icon_palettes/grassium_z.gbapal.lz"); + +const u32 gItemIcon_IciumZ[] = INCBIN_U32("graphics/items/icons/icium_z.4bpp.lz"); +const u32 gItemIconPalette_IciumZ[] = INCBIN_U32("graphics/items/icon_palettes/icium_z.gbapal.lz"); + +const u32 gItemIcon_FightiniumZ[] = INCBIN_U32("graphics/items/icons/fightinium_z.4bpp.lz"); +const u32 gItemIconPalette_FightiniumZ[] = INCBIN_U32("graphics/items/icon_palettes/fightinium_z.gbapal.lz"); + +const u32 gItemIcon_PoisoniumZ[] = INCBIN_U32("graphics/items/icons/poisonium_z.4bpp.lz"); +const u32 gItemIconPalette_PoisoniumZ[] = INCBIN_U32("graphics/items/icon_palettes/poisonium_z.gbapal.lz"); + +const u32 gItemIcon_GroundiumZ[] = INCBIN_U32("graphics/items/icons/groundium_z.4bpp.lz"); +const u32 gItemIconPalette_GroundiumZ[] = INCBIN_U32("graphics/items/icon_palettes/groundium_z.gbapal.lz"); + +const u32 gItemIcon_FlyiniumZ[] = INCBIN_U32("graphics/items/icons/flyinium_z.4bpp.lz"); +const u32 gItemIconPalette_FlyiniumZ[] = INCBIN_U32("graphics/items/icon_palettes/flyinium_z.gbapal.lz"); + +const u32 gItemIcon_PsychiumZ[] = INCBIN_U32("graphics/items/icons/psychium_z.4bpp.lz"); +const u32 gItemIconPalette_PsychiumZ[] = INCBIN_U32("graphics/items/icon_palettes/psychium_z.gbapal.lz"); + +const u32 gItemIcon_BuginiumZ[] = INCBIN_U32("graphics/items/icons/buginium_z.4bpp.lz"); +const u32 gItemIconPalette_BuginiumZ[] = INCBIN_U32("graphics/items/icon_palettes/buginium_z.gbapal.lz"); + +const u32 gItemIcon_RockiumZ[] = INCBIN_U32("graphics/items/icons/rockium_z.4bpp.lz"); +const u32 gItemIconPalette_RockiumZ[] = INCBIN_U32("graphics/items/icon_palettes/rockium_z.gbapal.lz"); + +const u32 gItemIcon_GhostiumZ[] = INCBIN_U32("graphics/items/icons/ghostium_z.4bpp.lz"); +const u32 gItemIconPalette_GhostiumZ[] = INCBIN_U32("graphics/items/icon_palettes/ghostium_z.gbapal.lz"); + +const u32 gItemIcon_DragoniumZ[] = INCBIN_U32("graphics/items/icons/dragonium_z.4bpp.lz"); +const u32 gItemIconPalette_DragoniumZ[] = INCBIN_U32("graphics/items/icon_palettes/dragonium_z.gbapal.lz"); + +const u32 gItemIcon_DarkiniumZ[] = INCBIN_U32("graphics/items/icons/darkinium_z.4bpp.lz"); +const u32 gItemIconPalette_DarkiniumZ[] = INCBIN_U32("graphics/items/icon_palettes/darkinium_z.gbapal.lz"); + +const u32 gItemIcon_SteeliumZ[] = INCBIN_U32("graphics/items/icons/steelium_z.4bpp.lz"); +const u32 gItemIconPalette_SteeliumZ[] = INCBIN_U32("graphics/items/icon_palettes/steelium_z.gbapal.lz"); + +const u32 gItemIcon_FairiumZ[] = INCBIN_U32("graphics/items/icons/fairium_z.4bpp.lz"); +const u32 gItemIconPalette_FairiumZ[] = INCBIN_U32("graphics/items/icon_palettes/fairium_z.gbapal.lz"); + +const u32 gItemIcon_PikaniumZ[] = INCBIN_U32("graphics/items/icons/pikanium_z.4bpp.lz"); +const u32 gItemIconPalette_PikaniumZ[] = INCBIN_U32("graphics/items/icon_palettes/pikanium_z.gbapal.lz"); + +const u32 gItemIcon_EeviumZ[] = INCBIN_U32("graphics/items/icons/eevium_z.4bpp.lz"); +const u32 gItemIconPalette_EeviumZ[] = INCBIN_U32("graphics/items/icon_palettes/eevium_z.gbapal.lz"); + +const u32 gItemIcon_SnorliumZ[] = INCBIN_U32("graphics/items/icons/snorlium_z.4bpp.lz"); +const u32 gItemIconPalette_SnorliumZ[] = INCBIN_U32("graphics/items/icon_palettes/snorlium_z.gbapal.lz"); + +const u32 gItemIcon_MewniumZ[] = INCBIN_U32("graphics/items/icons/mewnium_z.4bpp.lz"); +const u32 gItemIconPalette_MewniumZ[] = INCBIN_U32("graphics/items/icon_palettes/mewnium_z.gbapal.lz"); + +const u32 gItemIcon_DecidiumZ[] = INCBIN_U32("graphics/items/icons/decidium_z.4bpp.lz"); +const u32 gItemIconPalette_DecidiumZ[] = INCBIN_U32("graphics/items/icon_palettes/decidium_z.gbapal.lz"); + +const u32 gItemIcon_InciniumZ[] = INCBIN_U32("graphics/items/icons/incinium_z.4bpp.lz"); +const u32 gItemIconPalette_InciniumZ[] = INCBIN_U32("graphics/items/icon_palettes/incinium_z.gbapal.lz"); + +const u32 gItemIcon_PrimariumZ[] = INCBIN_U32("graphics/items/icons/primarium_z.4bpp.lz"); +const u32 gItemIconPalette_PrimariumZ[] = INCBIN_U32("graphics/items/icon_palettes/primarium_z.gbapal.lz"); + +const u32 gItemIcon_LycaniumZ[] = INCBIN_U32("graphics/items/icons/lycanium_z.4bpp.lz"); +const u32 gItemIconPalette_LycaniumZ[] = INCBIN_U32("graphics/items/icon_palettes/lycanium_z.gbapal.lz"); + +const u32 gItemIcon_MimikiumZ[] = INCBIN_U32("graphics/items/icons/mimikium_z.4bpp.lz"); +const u32 gItemIconPalette_MimikiumZ[] = INCBIN_U32("graphics/items/icon_palettes/mimikium_z.gbapal.lz"); + +const u32 gItemIcon_KommoniumZ[] = INCBIN_U32("graphics/items/icons/kommonium_z.4bpp.lz"); +const u32 gItemIconPalette_KommoniumZ[] = INCBIN_U32("graphics/items/icon_palettes/kommonium_z.gbapal.lz"); + +const u32 gItemIcon_TapuniumZ[] = INCBIN_U32("graphics/items/icons/tapunium_z.4bpp.lz"); +const u32 gItemIconPalette_TapuniumZ[] = INCBIN_U32("graphics/items/icon_palettes/tapunium_z.gbapal.lz"); + +const u32 gItemIcon_SolganiumZ[] = INCBIN_U32("graphics/items/icons/solganium_z.4bpp.lz"); +const u32 gItemIconPalette_SolganiumZ[] = INCBIN_U32("graphics/items/icon_palettes/solganium_z.gbapal.lz"); + +const u32 gItemIcon_LunaliumZ[] = INCBIN_U32("graphics/items/icons/lunalium_z.4bpp.lz"); +const u32 gItemIconPalette_LunaliumZ[] = INCBIN_U32("graphics/items/icon_palettes/lunalium_z.gbapal.lz"); + +const u32 gItemIcon_MarshadiumZ[] = INCBIN_U32("graphics/items/icons/marshadium_z.4bpp.lz"); +const u32 gItemIconPalette_MarshadiumZ[] = INCBIN_U32("graphics/items/icon_palettes/marshadium_z.gbapal.lz"); + +const u32 gItemIcon_AloraichiumZ[] = INCBIN_U32("graphics/items/icons/aloraichium_z.4bpp.lz"); +const u32 gItemIconPalette_AloraichiumZ[] = INCBIN_U32("graphics/items/icon_palettes/aloraichium_z.gbapal.lz"); + +const u32 gItemIcon_PikashuniumZ[] = INCBIN_U32("graphics/items/icons/pikashunium_z.4bpp.lz"); +const u32 gItemIconPalette_PikashuniumZ[] = INCBIN_U32("graphics/items/icon_palettes/pikashunium_z.gbapal.lz"); + +const u32 gItemIcon_UltranecroziumZ[] = INCBIN_U32("graphics/items/icons/ultranecrozium_z.4bpp.lz"); +const u32 gItemIconPalette_UltranecroziumZ[] = INCBIN_U32("graphics/items/icon_palettes/ultranecrozium_z.gbapal.lz"); + +// Species-specific Held Items + +const u32 gItemIcon_LightBall[] = INCBIN_U32("graphics/items/icons/light_ball.4bpp.lz"); +const u32 gItemIconPalette_LightBall[] = INCBIN_U32("graphics/items/icon_palettes/light_ball.gbapal.lz"); + +const u32 gItemIcon_Leek[] = INCBIN_U32("graphics/items/icons/leek.4bpp.lz"); +const u32 gItemIconPalette_Leek[] = INCBIN_U32("graphics/items/icon_palettes/leek.gbapal.lz"); + +const u32 gItemIcon_ThickClub[] = INCBIN_U32("graphics/items/icons/thick_club.4bpp.lz"); +const u32 gItemIconPalette_ThickClub[] = INCBIN_U32("graphics/items/icon_palettes/thick_club.gbapal.lz"); + +const u32 gItemIcon_LuckyPunch[] = INCBIN_U32("graphics/items/icons/lucky_punch.4bpp.lz"); +const u32 gItemIconPalette_LuckyPunch[] = INCBIN_U32("graphics/items/icon_palettes/lucky_punch.gbapal.lz"); + +const u32 gItemIcon_MetalPowder[] = INCBIN_U32("graphics/items/icons/metal_powder.4bpp.lz"); +const u32 gItemIconPalette_MetalPowder[] = INCBIN_U32("graphics/items/icon_palettes/metal_powder.gbapal.lz"); + +const u32 gItemIcon_QuickPowder[] = INCBIN_U32("graphics/items/icons/quick_powder.4bpp.lz"); +const u32 gItemIconPalette_QuickPowder[] = INCBIN_U32("graphics/items/icon_palettes/quick_powder.gbapal.lz"); + +const u32 gItemIcon_DeepSeaScale[] = INCBIN_U32("graphics/items/icons/deep_sea_scale.4bpp.lz"); +const u32 gItemIconPalette_DeepSeaScale[] = INCBIN_U32("graphics/items/icon_palettes/deep_sea_scale.gbapal.lz"); + +const u32 gItemIcon_DeepSeaTooth[] = INCBIN_U32("graphics/items/icons/deep_sea_tooth.4bpp.lz"); +const u32 gItemIconPalette_DeepSeaTooth[] = INCBIN_U32("graphics/items/icon_palettes/deep_sea_tooth.gbapal.lz"); + +const u32 gItemIcon_SoulDew[] = INCBIN_U32("graphics/items/icons/soul_dew.4bpp.lz"); +const u32 gItemIconPalette_SoulDew[] = INCBIN_U32("graphics/items/icon_palettes/soul_dew.gbapal.lz"); + +const u32 gItemIcon_AdamantOrb[] = INCBIN_U32("graphics/items/icons/adamant_orb.4bpp.lz"); +const u32 gItemIconPalette_AdamantOrb[] = INCBIN_U32("graphics/items/icon_palettes/adamant_orb.gbapal.lz"); + +const u32 gItemIcon_LustrousOrb[] = INCBIN_U32("graphics/items/icons/lustrous_orb.4bpp.lz"); +const u32 gItemIconPalette_LustrousOrb[] = INCBIN_U32("graphics/items/icon_palettes/lustrous_orb.gbapal.lz"); + +const u32 gItemIcon_GriseousOrb[] = INCBIN_U32("graphics/items/icons/griseous_orb.4bpp.lz"); +const u32 gItemIconPalette_GriseousOrb[] = INCBIN_U32("graphics/items/icon_palettes/griseous_orb.gbapal.lz"); + +// Incenses + +const u32 gItemIcon_SeaIncense[] = INCBIN_U32("graphics/items/icons/sea_incense.4bpp.lz"); +const u32 gItemIconPalette_SeaIncense[] = INCBIN_U32("graphics/items/icon_palettes/sea_incense.gbapal.lz"); + +const u32 gItemIcon_LaxIncense[] = INCBIN_U32("graphics/items/icons/lax_incense.4bpp.lz"); +const u32 gItemIconPalette_LaxIncense[] = INCBIN_U32("graphics/items/icon_palettes/lax_incense.gbapal.lz"); + +const u32 gItemIcon_OddIncense[] = INCBIN_U32("graphics/items/icons/odd_incense.4bpp.lz"); +const u32 gItemIconPalette_OddIncense[] = INCBIN_U32("graphics/items/icon_palettes/odd_incense.gbapal.lz"); + +const u32 gItemIcon_RockIncense[] = INCBIN_U32("graphics/items/icons/rock_incense.4bpp.lz"); +const u32 gItemIconPalette_RockIncense[] = INCBIN_U32("graphics/items/icon_palettes/rock_incense.gbapal.lz"); + +const u32 gItemIcon_FullIncense[] = INCBIN_U32("graphics/items/icons/full_incense.4bpp.lz"); +const u32 gItemIconPalette_FullIncense[] = INCBIN_U32("graphics/items/icon_palettes/full_incense.gbapal.lz"); + +const u32 gItemIcon_WaveIncense[] = INCBIN_U32("graphics/items/icons/wave_incense.4bpp.lz"); +const u32 gItemIconPalette_WaveIncense[] = INCBIN_U32("graphics/items/icon_palettes/wave_incense.gbapal.lz"); + +const u32 gItemIcon_RoseIncense[] = INCBIN_U32("graphics/items/icons/rose_incense.4bpp.lz"); +const u32 gItemIconPalette_RoseIncense[] = INCBIN_U32("graphics/items/icon_palettes/rose_incense.gbapal.lz"); + +const u32 gItemIcon_LuckIncense[] = INCBIN_U32("graphics/items/icons/luck_incense.4bpp.lz"); +const u32 gItemIconPalette_LuckIncense[] = INCBIN_U32("graphics/items/icon_palettes/luck_incense.gbapal.lz"); + +const u32 gItemIcon_PureIncense[] = INCBIN_U32("graphics/items/icons/pure_incense.4bpp.lz"); +const u32 gItemIconPalette_PureIncense[] = INCBIN_U32("graphics/items/icon_palettes/pure_incense.gbapal.lz"); + +// Contest Scarves + +const u32 gItemIcon_Scarf[] = INCBIN_U32("graphics/items/icons/scarf.4bpp.lz"); +const u32 gItemIconPalette_RedScarf[] = INCBIN_U32("graphics/items/icon_palettes/red_scarf.gbapal.lz"); + +const u32 gItemIconPalette_BlueScarf[] = INCBIN_U32("graphics/items/icon_palettes/blue_scarf.gbapal.lz"); + +const u32 gItemIconPalette_PinkScarf[] = INCBIN_U32("graphics/items/icon_palettes/pink_scarf.gbapal.lz"); + +const u32 gItemIconPalette_GreenScarf[] = INCBIN_U32("graphics/items/icon_palettes/green_scarf.gbapal.lz"); + +const u32 gItemIconPalette_YellowScarf[] = INCBIN_U32("graphics/items/icon_palettes/yellow_scarf.gbapal.lz"); + +// EV Gain Modifiers + +const u32 gItemIcon_MachoBrace[] = INCBIN_U32("graphics/items/icons/macho_brace.4bpp.lz"); +const u32 gItemIconPalette_MachoBrace[] = INCBIN_U32("graphics/items/icon_palettes/macho_brace.gbapal.lz"); + +const u32 gItemIcon_PowerWeight[] = INCBIN_U32("graphics/items/icons/power_weight.4bpp.lz"); +const u32 gItemIconPalette_PowerWeight[] = INCBIN_U32("graphics/items/icon_palettes/power_weight.gbapal.lz"); + +const u32 gItemIcon_PowerBracer[] = INCBIN_U32("graphics/items/icons/power_bracer.4bpp.lz"); +const u32 gItemIconPalette_PowerBracer[] = INCBIN_U32("graphics/items/icon_palettes/power_bracer.gbapal.lz"); + +const u32 gItemIcon_PowerBelt[] = INCBIN_U32("graphics/items/icons/power_belt.4bpp.lz"); +const u32 gItemIconPalette_PowerBelt[] = INCBIN_U32("graphics/items/icon_palettes/power_belt.gbapal.lz"); + +const u32 gItemIcon_PowerLens[] = INCBIN_U32("graphics/items/icons/power_lens.4bpp.lz"); +const u32 gItemIconPalette_PowerLens[] = INCBIN_U32("graphics/items/icon_palettes/power_lens.gbapal.lz"); + +const u32 gItemIcon_PowerBand[] = INCBIN_U32("graphics/items/icons/power_band.4bpp.lz"); +const u32 gItemIconPalette_PowerBand[] = INCBIN_U32("graphics/items/icon_palettes/power_band.gbapal.lz"); + +const u32 gItemIcon_PowerAnklet[] = INCBIN_U32("graphics/items/icons/power_anklet.4bpp.lz"); +const u32 gItemIconPalette_PowerAnklet[] = INCBIN_U32("graphics/items/icon_palettes/power_anklet.gbapal.lz"); + +// Type-boosting Held Items + +const u32 gItemIcon_SilkScarf[] = INCBIN_U32("graphics/items/icons/silk_scarf.4bpp.lz"); +const u32 gItemIconPalette_SilkScarf[] = INCBIN_U32("graphics/items/icon_palettes/silk_scarf.gbapal.lz"); + +const u32 gItemIcon_Charcoal[] = INCBIN_U32("graphics/items/icons/charcoal.4bpp.lz"); +const u32 gItemIconPalette_Charcoal[] = INCBIN_U32("graphics/items/icon_palettes/charcoal.gbapal.lz"); + +const u32 gItemIcon_MysticWater[] = INCBIN_U32("graphics/items/icons/mystic_water.4bpp.lz"); +const u32 gItemIconPalette_MysticWater[] = INCBIN_U32("graphics/items/icon_palettes/mystic_water.gbapal.lz"); + +const u32 gItemIcon_Magnet[] = INCBIN_U32("graphics/items/icons/magnet.4bpp.lz"); +const u32 gItemIconPalette_Magnet[] = INCBIN_U32("graphics/items/icon_palettes/magnet.gbapal.lz"); + +const u32 gItemIcon_MiracleSeed[] = INCBIN_U32("graphics/items/icons/miracle_seed.4bpp.lz"); +const u32 gItemIconPalette_MiracleSeed[] = INCBIN_U32("graphics/items/icon_palettes/miracle_seed.gbapal.lz"); + +const u32 gItemIcon_NeverMeltIce[] = INCBIN_U32("graphics/items/icons/never_melt_ice.4bpp.lz"); +const u32 gItemIconPalette_NeverMeltIce[] = INCBIN_U32("graphics/items/icon_palettes/never_melt_ice.gbapal.lz"); + +const u32 gItemIcon_BlackBelt[] = INCBIN_U32("graphics/items/icons/black_belt.4bpp.lz"); +const u32 gItemIconPalette_BlackTypeEnhancingItem[] = INCBIN_U32("graphics/items/icon_palettes/black_type_enhancing_item.gbapal.lz"); + +const u32 gItemIcon_PoisonBarb[] = INCBIN_U32("graphics/items/icons/poison_barb.4bpp.lz"); +const u32 gItemIconPalette_PoisonBarb[] = INCBIN_U32("graphics/items/icon_palettes/poison_barb.gbapal.lz"); + +const u32 gItemIcon_SoftSand[] = INCBIN_U32("graphics/items/icons/soft_sand.4bpp.lz"); +const u32 gItemIconPalette_SoftSand[] = INCBIN_U32("graphics/items/icon_palettes/soft_sand.gbapal.lz"); + +const u32 gItemIcon_SharpBeak[] = INCBIN_U32("graphics/items/icons/sharp_beak.4bpp.lz"); +const u32 gItemIconPalette_SharpBeak[] = INCBIN_U32("graphics/items/icon_palettes/sharp_beak.gbapal.lz"); + +const u32 gItemIcon_TwistedSpoon[] = INCBIN_U32("graphics/items/icons/twisted_spoon.4bpp.lz"); +const u32 gItemIconPalette_TwistedSpoon[] = INCBIN_U32("graphics/items/icon_palettes/twisted_spoon.gbapal.lz"); + +const u32 gItemIcon_SilverPowder[] = INCBIN_U32("graphics/items/icons/silver_powder.4bpp.lz"); +const u32 gItemIconPalette_SilverPowder[] = INCBIN_U32("graphics/items/icon_palettes/silver_powder.gbapal.lz"); + +const u32 gItemIcon_HardStone[] = INCBIN_U32("graphics/items/icons/hard_stone.4bpp.lz"); +const u32 gItemIconPalette_HardStone[] = INCBIN_U32("graphics/items/icon_palettes/hard_stone.gbapal.lz"); + +const u32 gItemIcon_SpellTag[] = INCBIN_U32("graphics/items/icons/spell_tag.4bpp.lz"); +const u32 gItemIconPalette_SpellTag[] = INCBIN_U32("graphics/items/icon_palettes/spell_tag.gbapal.lz"); + +const u32 gItemIcon_DragonFang[] = INCBIN_U32("graphics/items/icons/dragon_fang.4bpp.lz"); +const u32 gItemIconPalette_DragonFang[] = INCBIN_U32("graphics/items/icon_palettes/dragon_fang.gbapal.lz"); + +const u32 gItemIcon_BlackGlasses[] = INCBIN_U32("graphics/items/icons/black_glasses.4bpp.lz"); + +const u32 gItemIcon_MetalCoat[] = INCBIN_U32("graphics/items/icons/metal_coat.4bpp.lz"); +const u32 gItemIconPalette_MetalCoat[] = INCBIN_U32("graphics/items/icon_palettes/metal_coat.gbapal.lz"); + +// Choice Items + +const u32 gItemIcon_ChoiceBand[] = INCBIN_U32("graphics/items/icons/choice_band.4bpp.lz"); +const u32 gItemIconPalette_ChoiceBand[] = INCBIN_U32("graphics/items/icon_palettes/choice_band.gbapal.lz"); + +const u32 gItemIcon_ChoiceSpecs[] = INCBIN_U32("graphics/items/icons/choice_specs.4bpp.lz"); +const u32 gItemIconPalette_ChoiceSpecs[] = INCBIN_U32("graphics/items/icon_palettes/choice_specs.gbapal.lz"); + +const u32 gItemIcon_ChoiceScarf[] = INCBIN_U32("graphics/items/icons/choice_scarf.4bpp.lz"); +const u32 gItemIconPalette_ChoiceScarf[] = INCBIN_U32("graphics/items/icon_palettes/choice_scarf.gbapal.lz"); + +// Status Orbs + +const u32 gItemIcon_FlameOrb[] = INCBIN_U32("graphics/items/icons/flame_orb.4bpp.lz"); +const u32 gItemIconPalette_FlameOrb[] = INCBIN_U32("graphics/items/icon_palettes/flame_orb.gbapal.lz"); + +const u32 gItemIcon_ToxicOrb[] = INCBIN_U32("graphics/items/icons/toxic_orb.4bpp.lz"); +const u32 gItemIconPalette_ToxicOrb[] = INCBIN_U32("graphics/items/icon_palettes/toxic_orb.gbapal.lz"); + +// Weather Rocks + +const u32 gItemIcon_DampRock[] = INCBIN_U32("graphics/items/icons/damp_rock.4bpp.lz"); +const u32 gItemIconPalette_DampRock[] = INCBIN_U32("graphics/items/icon_palettes/damp_rock.gbapal.lz"); + +const u32 gItemIcon_HeatRock[] = INCBIN_U32("graphics/items/icons/heat_rock.4bpp.lz"); +const u32 gItemIconPalette_HeatRock[] = INCBIN_U32("graphics/items/icon_palettes/heat_rock.gbapal.lz"); + +const u32 gItemIcon_SmoothRock[] = INCBIN_U32("graphics/items/icons/smooth_rock.4bpp.lz"); +const u32 gItemIconPalette_SmoothRock[] = INCBIN_U32("graphics/items/icon_palettes/smooth_rock.gbapal.lz"); + +const u32 gItemIcon_IcyRock[] = INCBIN_U32("graphics/items/icons/icy_rock.4bpp.lz"); +const u32 gItemIconPalette_IcyRock[] = INCBIN_U32("graphics/items/icon_palettes/icy_rock.gbapal.lz"); + +// Terrain Seeds + +const u32 gItemIcon_ElectricSeed[] = INCBIN_U32("graphics/items/icons/electric_seed.4bpp.lz"); +const u32 gItemIconPalette_ElectricSeed[] = INCBIN_U32("graphics/items/icon_palettes/electric_seed.gbapal.lz"); + +const u32 gItemIcon_PsychicSeed[] = INCBIN_U32("graphics/items/icons/psychic_seed.4bpp.lz"); +const u32 gItemIconPalette_PsychicSeed[] = INCBIN_U32("graphics/items/icon_palettes/psychic_seed.gbapal.lz"); + +const u32 gItemIcon_MistySeed[] = INCBIN_U32("graphics/items/icons/misty_seed.4bpp.lz"); +const u32 gItemIconPalette_MistySeed[] = INCBIN_U32("graphics/items/icon_palettes/misty_seed.gbapal.lz"); + +const u32 gItemIcon_GrassySeed[] = INCBIN_U32("graphics/items/icons/grassy_seed.4bpp.lz"); +const u32 gItemIconPalette_GrassySeed[] = INCBIN_U32("graphics/items/icon_palettes/grassy_seed.gbapal.lz"); + +// Type-activated Stat Modifiers + +const u32 gItemIcon_AbsorbBulb[] = INCBIN_U32("graphics/items/icons/absorb_bulb.4bpp.lz"); +const u32 gItemIconPalette_AbsorbBulb[] = INCBIN_U32("graphics/items/icon_palettes/absorb_bulb.gbapal.lz"); + +const u32 gItemIcon_CellBattery[] = INCBIN_U32("graphics/items/icons/cell_battery.4bpp.lz"); +const u32 gItemIconPalette_CellBattery[] = INCBIN_U32("graphics/items/icon_palettes/cell_battery.gbapal.lz"); + +const u32 gItemIcon_LuminousMoss[] = INCBIN_U32("graphics/items/icons/luminous_moss.4bpp.lz"); +const u32 gItemIconPalette_LuminousMoss[] = INCBIN_U32("graphics/items/icon_palettes/luminous_moss.gbapal.lz"); + +const u32 gItemIcon_Snowball[] = INCBIN_U32("graphics/items/icons/snowball.4bpp.lz"); +const u32 gItemIconPalette_Snowball[] = INCBIN_U32("graphics/items/icon_palettes/snowball.gbapal.lz"); + +// Misc. Held Items + +const u32 gItemIcon_BrightPowder[] = INCBIN_U32("graphics/items/icons/bright_powder.4bpp.lz"); +const u32 gItemIconPalette_BrightPowder[] = INCBIN_U32("graphics/items/icon_palettes/bright_powder.gbapal.lz"); + +const u32 gItemIcon_InBattleHerb[] = INCBIN_U32("graphics/items/icons/in_battle_herb.4bpp.lz"); +const u32 gItemIconPalette_WhiteHerb[] = INCBIN_U32("graphics/items/icon_palettes/white_herb.gbapal.lz"); + +const u32 gItemIcon_ExpShare[] = INCBIN_U32("graphics/items/icons/exp_share.4bpp.lz"); +const u32 gItemIconPalette_ExpShare[] = INCBIN_U32("graphics/items/icon_palettes/exp_share.gbapal.lz"); + +const u32 gItemIcon_QuickClaw[] = INCBIN_U32("graphics/items/icons/quick_claw.4bpp.lz"); +const u32 gItemIconPalette_QuickClaw[] = INCBIN_U32("graphics/items/icon_palettes/quick_claw.gbapal.lz"); + +const u32 gItemIcon_SootheBell[] = INCBIN_U32("graphics/items/icons/soothe_bell.4bpp.lz"); +const u32 gItemIconPalette_SootheBell[] = INCBIN_U32("graphics/items/icon_palettes/soothe_bell.gbapal.lz"); + +const u32 gItemIconPalette_MentalHerb[] = INCBIN_U32("graphics/items/icon_palettes/mental_herb.gbapal.lz"); + +const u32 gItemIcon_KingsRock[] = INCBIN_U32("graphics/items/icons/kings_rock.4bpp.lz"); +const u32 gItemIconPalette_KingsRock[] = INCBIN_U32("graphics/items/icon_palettes/kings_rock.gbapal.lz"); + +const u32 gItemIcon_AmuletCoin[] = INCBIN_U32("graphics/items/icons/amulet_coin.4bpp.lz"); +const u32 gItemIconPalette_AmuletCoin[] = INCBIN_U32("graphics/items/icon_palettes/amulet_coin.gbapal.lz"); + +const u32 gItemIcon_CleanseTag[] = INCBIN_U32("graphics/items/icons/cleanse_tag.4bpp.lz"); +const u32 gItemIconPalette_CleanseTag[] = INCBIN_U32("graphics/items/icon_palettes/cleanse_tag.gbapal.lz"); + +const u32 gItemIcon_SmokeBall[] = INCBIN_U32("graphics/items/icons/smoke_ball.4bpp.lz"); +const u32 gItemIconPalette_SmokeBall[] = INCBIN_U32("graphics/items/icon_palettes/smoke_ball.gbapal.lz"); + +const u32 gItemIcon_FocusBand[] = INCBIN_U32("graphics/items/icons/focus_band.4bpp.lz"); +const u32 gItemIconPalette_FocusBand[] = INCBIN_U32("graphics/items/icon_palettes/focus_band.gbapal.lz"); + +const u32 gItemIcon_LuckyEgg[] = INCBIN_U32("graphics/items/icons/lucky_egg.4bpp.lz"); +const u32 gItemIconPalette_LuckyEgg[] = INCBIN_U32("graphics/items/icon_palettes/lucky_egg.gbapal.lz"); + +const u32 gItemIcon_ScopeLens[] = INCBIN_U32("graphics/items/icons/scope_lens.4bpp.lz"); +const u32 gItemIconPalette_ScopeLens[] = INCBIN_U32("graphics/items/icon_palettes/scope_lens.gbapal.lz"); + +const u32 gItemIcon_Leftovers[] = INCBIN_U32("graphics/items/icons/leftovers.4bpp.lz"); +const u32 gItemIconPalette_Leftovers[] = INCBIN_U32("graphics/items/icon_palettes/leftovers.gbapal.lz"); + +const u32 gItemIcon_ShellBell[] = INCBIN_U32("graphics/items/icons/shell_bell.4bpp.lz"); + +const u32 gItemIcon_WideLens[] = INCBIN_U32("graphics/items/icons/wide_lens.4bpp.lz"); +const u32 gItemIconPalette_WideLens[] = INCBIN_U32("graphics/items/icon_palettes/wide_lens.gbapal.lz"); + +const u32 gItemIcon_MuscleBand[] = INCBIN_U32("graphics/items/icons/muscle_band.4bpp.lz"); +const u32 gItemIconPalette_MuscleBand[] = INCBIN_U32("graphics/items/icon_palettes/muscle_band.gbapal.lz"); + +const u32 gItemIcon_WiseGlasses[] = INCBIN_U32("graphics/items/icons/wise_glasses.4bpp.lz"); +const u32 gItemIconPalette_WiseGlasses[] = INCBIN_U32("graphics/items/icon_palettes/wise_glasses.gbapal.lz"); + +const u32 gItemIcon_ExpertBelt[] = INCBIN_U32("graphics/items/icons/expert_belt.4bpp.lz"); +const u32 gItemIconPalette_ExpertBelt[] = INCBIN_U32("graphics/items/icon_palettes/expert_belt.gbapal.lz"); + +const u32 gItemIcon_LightClay[] = INCBIN_U32("graphics/items/icons/light_clay.4bpp.lz"); +const u32 gItemIconPalette_LightClay[] = INCBIN_U32("graphics/items/icon_palettes/light_clay.gbapal.lz"); + +const u32 gItemIcon_LifeOrb[] = INCBIN_U32("graphics/items/icons/life_orb.4bpp.lz"); +const u32 gItemIconPalette_LifeOrb[] = INCBIN_U32("graphics/items/icon_palettes/life_orb.gbapal.lz"); + +const u32 gItemIcon_PowerHerb[] = INCBIN_U32("graphics/items/icons/power_herb.4bpp.lz"); +const u32 gItemIconPalette_PowerHerb[] = INCBIN_U32("graphics/items/icon_palettes/power_herb.gbapal.lz"); + +const u32 gItemIcon_FocusSash[] = INCBIN_U32("graphics/items/icons/focus_sash.4bpp.lz"); +const u32 gItemIconPalette_FocusSash[] = INCBIN_U32("graphics/items/icon_palettes/focus_sash.gbapal.lz"); + +const u32 gItemIcon_ZoomLens[] = INCBIN_U32("graphics/items/icons/zoom_lens.4bpp.lz"); +const u32 gItemIconPalette_ZoomLens[] = INCBIN_U32("graphics/items/icon_palettes/zoom_lens.gbapal.lz"); + +const u32 gItemIcon_Metronome[] = INCBIN_U32("graphics/items/icons/metronome.4bpp.lz"); +const u32 gItemIconPalette_Metronome[] = INCBIN_U32("graphics/items/icon_palettes/metronome.gbapal.lz"); + +const u32 gItemIcon_IronBall[] = INCBIN_U32("graphics/items/icons/iron_ball.4bpp.lz"); +const u32 gItemIconPalette_IronBall[] = INCBIN_U32("graphics/items/icon_palettes/iron_ball.gbapal.lz"); + +const u32 gItemIcon_LaggingTail[] = INCBIN_U32("graphics/items/icons/lagging_tail.4bpp.lz"); +const u32 gItemIconPalette_LaggingTail[] = INCBIN_U32("graphics/items/icon_palettes/lagging_tail.gbapal.lz"); + +const u32 gItemIcon_DestinyKnot[] = INCBIN_U32("graphics/items/icons/destiny_knot.4bpp.lz"); +const u32 gItemIconPalette_DestinyKnot[] = INCBIN_U32("graphics/items/icon_palettes/destiny_knot.gbapal.lz"); + +const u32 gItemIcon_BlackSludge[] = INCBIN_U32("graphics/items/icons/black_sludge.4bpp.lz"); +const u32 gItemIconPalette_BlackSludge[] = INCBIN_U32("graphics/items/icon_palettes/black_sludge.gbapal.lz"); + +const u32 gItemIcon_GripClaw[] = INCBIN_U32("graphics/items/icons/grip_claw.4bpp.lz"); +const u32 gItemIconPalette_GripClaw[] = INCBIN_U32("graphics/items/icon_palettes/grip_claw.gbapal.lz"); + +const u32 gItemIcon_StickyBarb[] = INCBIN_U32("graphics/items/icons/sticky_barb.4bpp.lz"); +const u32 gItemIconPalette_StickyBarb[] = INCBIN_U32("graphics/items/icon_palettes/sticky_barb.gbapal.lz"); + +const u32 gItemIcon_ShedShell[] = INCBIN_U32("graphics/items/icons/shed_shell.4bpp.lz"); +const u32 gItemIconPalette_ShedShell[] = INCBIN_U32("graphics/items/icon_palettes/shed_shell.gbapal.lz"); + +const u32 gItemIcon_BigRoot[] = INCBIN_U32("graphics/items/icons/big_root.4bpp.lz"); +const u32 gItemIconPalette_BigRoot[] = INCBIN_U32("graphics/items/icon_palettes/big_root.gbapal.lz"); + +const u32 gItemIcon_RazorClaw[] = INCBIN_U32("graphics/items/icons/razor_claw.4bpp.lz"); +const u32 gItemIconPalette_RazorClaw[] = INCBIN_U32("graphics/items/icon_palettes/razor_claw.gbapal.lz"); + +const u32 gItemIcon_RazorFang[] = INCBIN_U32("graphics/items/icons/razor_fang.4bpp.lz"); +const u32 gItemIconPalette_RazorFang[] = INCBIN_U32("graphics/items/icon_palettes/razor_fang.gbapal.lz"); + +const u32 gItemIcon_Eviolite[] = INCBIN_U32("graphics/items/icons/eviolite.4bpp.lz"); +const u32 gItemIconPalette_Eviolite[] = INCBIN_U32("graphics/items/icon_palettes/eviolite.gbapal.lz"); + +const u32 gItemIcon_FloatStone[] = INCBIN_U32("graphics/items/icons/float_stone.4bpp.lz"); +const u32 gItemIconPalette_FloatStone[] = INCBIN_U32("graphics/items/icon_palettes/float_stone.gbapal.lz"); + +const u32 gItemIcon_RockyHelmet[] = INCBIN_U32("graphics/items/icons/rocky_helmet.4bpp.lz"); +const u32 gItemIconPalette_RockyHelmet[] = INCBIN_U32("graphics/items/icon_palettes/rocky_helmet.gbapal.lz"); + +const u32 gItemIcon_AirBalloon[] = INCBIN_U32("graphics/items/icons/air_balloon.4bpp.lz"); +const u32 gItemIconPalette_AirBalloon[] = INCBIN_U32("graphics/items/icon_palettes/air_balloon.gbapal.lz"); + +const u32 gItemIcon_RedCard[] = INCBIN_U32("graphics/items/icons/red_card.4bpp.lz"); +const u32 gItemIconPalette_RedCard[] = INCBIN_U32("graphics/items/icon_palettes/red_card.gbapal.lz"); + +const u32 gItemIcon_RingTarget[] = INCBIN_U32("graphics/items/icons/ring_target.4bpp.lz"); +const u32 gItemIconPalette_RingTarget[] = INCBIN_U32("graphics/items/icon_palettes/ring_target.gbapal.lz"); + +const u32 gItemIcon_BindingBand[] = INCBIN_U32("graphics/items/icons/binding_band.4bpp.lz"); +const u32 gItemIconPalette_BindingBand[] = INCBIN_U32("graphics/items/icon_palettes/binding_band.gbapal.lz"); + +const u32 gItemIcon_EjectButton[] = INCBIN_U32("graphics/items/icons/eject_button.4bpp.lz"); +const u32 gItemIconPalette_EjectButton[] = INCBIN_U32("graphics/items/icon_palettes/eject_button.gbapal.lz"); + +const u32 gItemIcon_WeaknessPolicy[] = INCBIN_U32("graphics/items/icons/weakness_policy.4bpp.lz"); +const u32 gItemIconPalette_WeaknessPolicy[] = INCBIN_U32("graphics/items/icon_palettes/weakness_policy.gbapal.lz"); + +const u32 gItemIcon_AssaultVest[] = INCBIN_U32("graphics/items/icons/assault_vest.4bpp.lz"); +const u32 gItemIconPalette_AssaultVest[] = INCBIN_U32("graphics/items/icon_palettes/assault_vest.gbapal.lz"); + +const u32 gItemIcon_SafetyGoggles[] = INCBIN_U32("graphics/items/icons/safety_goggles.4bpp.lz"); +const u32 gItemIconPalette_SafetyGoggles[] = INCBIN_U32("graphics/items/icon_palettes/safety_goggles.gbapal.lz"); + +const u32 gItemIcon_AdrenalineOrb[] = INCBIN_U32("graphics/items/icons/adrenaline_orb.4bpp.lz"); +const u32 gItemIconPalette_AdrenalineOrb[] = INCBIN_U32("graphics/items/icon_palettes/adrenaline_orb.gbapal.lz"); + +const u32 gItemIcon_TerrainExtender[] = INCBIN_U32("graphics/items/icons/terrain_extender.4bpp.lz"); +const u32 gItemIconPalette_TerrainExtender[] = INCBIN_U32("graphics/items/icon_palettes/terrain_extender.gbapal.lz"); + +const u32 gItemIcon_ProtectivePads[] = INCBIN_U32("graphics/items/icons/protective_pads.4bpp.lz"); +const u32 gItemIconPalette_ProtectivePads[] = INCBIN_U32("graphics/items/icon_palettes/protective_pads.gbapal.lz"); + +const u32 gItemIcon_ThroatSpray[] = INCBIN_U32("graphics/items/icons/throat_spray.4bpp.lz"); +const u32 gItemIconPalette_ThroatSpray[] = INCBIN_U32("graphics/items/icon_palettes/throat_spray.gbapal.lz"); + +const u32 gItemIcon_EjectPack[] = INCBIN_U32("graphics/items/icons/eject_pack.4bpp.lz"); +const u32 gItemIconPalette_EjectPack[] = INCBIN_U32("graphics/items/icon_palettes/eject_pack.gbapal.lz"); + +const u32 gItemIcon_HeavyDutyBoots[] = INCBIN_U32("graphics/items/icons/heavy_duty_boots.4bpp.lz"); +const u32 gItemIconPalette_HeavyDutyBoots[] = INCBIN_U32("graphics/items/icon_palettes/heavy_duty_boots.gbapal.lz"); + +const u32 gItemIcon_BlunderPolicy[] = INCBIN_U32("graphics/items/icons/blunder_policy.4bpp.lz"); +const u32 gItemIconPalette_BlunderPolicy[] = INCBIN_U32("graphics/items/icon_palettes/blunder_policy.gbapal.lz"); + +const u32 gItemIcon_RoomService[] = INCBIN_U32("graphics/items/icons/room_service.4bpp.lz"); +const u32 gItemIconPalette_RoomService[] = INCBIN_U32("graphics/items/icon_palettes/room_service.gbapal.lz"); + +const u32 gItemIcon_UtilityUmbrella[] = INCBIN_U32("graphics/items/icons/utility_umbrella.4bpp.lz"); +const u32 gItemIconPalette_UtilityUmbrella[] = INCBIN_U32("graphics/items/icon_palettes/utility_umbrella.gbapal.lz"); + // Berries const u32 gItemIcon_CheriBerry[] = INCBIN_U32("graphics/items/icons/cheri_berry.4bpp.lz"); @@ -365,6 +1585,60 @@ const u32 gItemIconPalette_DurinBerry[] = INCBIN_U32("graphics/items/icon_palett const u32 gItemIcon_BelueBerry[] = INCBIN_U32("graphics/items/icons/belue_berry.4bpp.lz"); const u32 gItemIconPalette_BelueBerry[] = INCBIN_U32("graphics/items/icon_palettes/belue_berry.gbapal.lz"); +const u32 gItemIcon_ChilanBerry[] = INCBIN_U32("graphics/items/icons/chilan_berry.4bpp.lz"); +const u32 gItemIconPalette_ChilanBerry[] = INCBIN_U32("graphics/items/icon_palettes/chilan_berry.gbapal.lz"); + +const u32 gItemIcon_OccaBerry[] = INCBIN_U32("graphics/items/icons/occa_berry.4bpp.lz"); +const u32 gItemIconPalette_OccaBerry[] = INCBIN_U32("graphics/items/icon_palettes/occa_berry.gbapal.lz"); + +const u32 gItemIcon_PasshoBerry[] = INCBIN_U32("graphics/items/icons/passho_berry.4bpp.lz"); +const u32 gItemIconPalette_PasshoBerry[] = INCBIN_U32("graphics/items/icon_palettes/passho_berry.gbapal.lz"); + +const u32 gItemIcon_WacanBerry[] = INCBIN_U32("graphics/items/icons/wacan_berry.4bpp.lz"); +const u32 gItemIconPalette_WacanBerry[] = INCBIN_U32("graphics/items/icon_palettes/wacan_berry.gbapal.lz"); + +const u32 gItemIcon_RindoBerry[] = INCBIN_U32("graphics/items/icons/rindo_berry.4bpp.lz"); +const u32 gItemIconPalette_RindoBerry[] = INCBIN_U32("graphics/items/icon_palettes/rindo_berry.gbapal.lz"); + +const u32 gItemIcon_YacheBerry[] = INCBIN_U32("graphics/items/icons/yache_berry.4bpp.lz"); +const u32 gItemIconPalette_YacheBerry[] = INCBIN_U32("graphics/items/icon_palettes/yache_berry.gbapal.lz"); + +const u32 gItemIcon_ChopleBerry[] = INCBIN_U32("graphics/items/icons/chople_berry.4bpp.lz"); +const u32 gItemIconPalette_ChopleBerry[] = INCBIN_U32("graphics/items/icon_palettes/chople_berry.gbapal.lz"); + +const u32 gItemIcon_KebiaBerry[] = INCBIN_U32("graphics/items/icons/kebia_berry.4bpp.lz"); +const u32 gItemIconPalette_KebiaBerry[] = INCBIN_U32("graphics/items/icon_palettes/kebia_berry.gbapal.lz"); + +const u32 gItemIcon_ShucaBerry[] = INCBIN_U32("graphics/items/icons/shuca_berry.4bpp.lz"); +const u32 gItemIconPalette_ShucaBerry[] = INCBIN_U32("graphics/items/icon_palettes/shuca_berry.gbapal.lz"); + +const u32 gItemIcon_CobaBerry[] = INCBIN_U32("graphics/items/icons/coba_berry.4bpp.lz"); +const u32 gItemIconPalette_CobaBerry[] = INCBIN_U32("graphics/items/icon_palettes/coba_berry.gbapal.lz"); + +const u32 gItemIcon_PayapaBerry[] = INCBIN_U32("graphics/items/icons/payapa_berry.4bpp.lz"); +const u32 gItemIconPalette_PayapaBerry[] = INCBIN_U32("graphics/items/icon_palettes/payapa_berry.gbapal.lz"); + +const u32 gItemIcon_TangaBerry[] = INCBIN_U32("graphics/items/icons/tanga_berry.4bpp.lz"); +const u32 gItemIconPalette_TangaBerry[] = INCBIN_U32("graphics/items/icon_palettes/tanga_berry.gbapal.lz"); + +const u32 gItemIcon_ChartiBerry[] = INCBIN_U32("graphics/items/icons/charti_berry.4bpp.lz"); +const u32 gItemIconPalette_ChartiBerry[] = INCBIN_U32("graphics/items/icon_palettes/charti_berry.gbapal.lz"); + +const u32 gItemIcon_KasibBerry[] = INCBIN_U32("graphics/items/icons/kasib_berry.4bpp.lz"); +const u32 gItemIconPalette_KasibBerry[] = INCBIN_U32("graphics/items/icon_palettes/kasib_berry.gbapal.lz"); + +const u32 gItemIcon_HabanBerry[] = INCBIN_U32("graphics/items/icons/haban_berry.4bpp.lz"); +const u32 gItemIconPalette_HabanBerry[] = INCBIN_U32("graphics/items/icon_palettes/haban_berry.gbapal.lz"); + +const u32 gItemIcon_ColburBerry[] = INCBIN_U32("graphics/items/icons/colbur_berry.4bpp.lz"); +const u32 gItemIconPalette_ColburBerry[] = INCBIN_U32("graphics/items/icon_palettes/colbur_berry.gbapal.lz"); + +const u32 gItemIcon_BabiriBerry[] = INCBIN_U32("graphics/items/icons/babiri_berry.4bpp.lz"); +const u32 gItemIconPalette_BabiriBerry[] = INCBIN_U32("graphics/items/icon_palettes/babiri_berry.gbapal.lz"); + +const u32 gItemIcon_RoseliBerry[] = INCBIN_U32("graphics/items/icons/roseli_berry.4bpp.lz"); +const u32 gItemIconPalette_RoseliBerry[] = INCBIN_U32("graphics/items/icon_palettes/roseli_berry.gbapal.lz"); + const u32 gItemIcon_LiechiBerry[] = INCBIN_U32("graphics/items/icons/liechi_berry.4bpp.lz"); const u32 gItemIconPalette_LiechiBerry[] = INCBIN_U32("graphics/items/icon_palettes/liechi_berry.gbapal.lz"); @@ -389,163 +1663,131 @@ const u32 gItemIconPalette_StarfBerry[] = INCBIN_U32("graphics/items/icon_palett const u32 gItemIcon_EnigmaBerry[] = INCBIN_U32("graphics/items/icons/enigma_berry.4bpp.lz"); const u32 gItemIconPalette_EnigmaBerry[] = INCBIN_U32("graphics/items/icon_palettes/enigma_berry.gbapal.lz"); -// Hold items +const u32 gItemIcon_MicleBerry[] = INCBIN_U32("graphics/items/icons/micle_berry.4bpp.lz"); +const u32 gItemIconPalette_MicleBerry[] = INCBIN_U32("graphics/items/icon_palettes/micle_berry.gbapal.lz"); -const u32 gItemIcon_BrightPowder[] = INCBIN_U32("graphics/items/icons/bright_powder.4bpp.lz"); -const u32 gItemIconPalette_BrightPowder[] = INCBIN_U32("graphics/items/icon_palettes/bright_powder.gbapal.lz"); +const u32 gItemIcon_CustapBerry[] = INCBIN_U32("graphics/items/icons/custap_berry.4bpp.lz"); +const u32 gItemIconPalette_CustapBerry[] = INCBIN_U32("graphics/items/icon_palettes/custap_berry.gbapal.lz"); -const u32 gItemIcon_InBattleHerb[] = INCBIN_U32("graphics/items/icons/in_battle_herb.4bpp.lz"); -const u32 gItemIconPalette_WhiteHerb[] = INCBIN_U32("graphics/items/icon_palettes/white_herb.gbapal.lz"); +const u32 gItemIcon_JabocaBerry[] = INCBIN_U32("graphics/items/icons/jaboca_berry.4bpp.lz"); +const u32 gItemIconPalette_JabocaBerry[] = INCBIN_U32("graphics/items/icon_palettes/jaboca_berry.gbapal.lz"); -const u32 gItemIcon_MachoBrace[] = INCBIN_U32("graphics/items/icons/macho_brace.4bpp.lz"); -const u32 gItemIconPalette_MachoBrace[] = INCBIN_U32("graphics/items/icon_palettes/macho_brace.gbapal.lz"); +const u32 gItemIcon_RowapBerry[] = INCBIN_U32("graphics/items/icons/rowap_berry.4bpp.lz"); +const u32 gItemIconPalette_RowapBerry[] = INCBIN_U32("graphics/items/icon_palettes/rowap_berry.gbapal.lz"); -const u32 gItemIcon_ExpShare[] = INCBIN_U32("graphics/items/icons/exp_share.4bpp.lz"); -const u32 gItemIconPalette_ExpShare[] = INCBIN_U32("graphics/items/icon_palettes/exp_share.gbapal.lz"); +const u32 gItemIcon_KeeBerry[] = INCBIN_U32("graphics/items/icons/kee_berry.4bpp.lz"); +const u32 gItemIconPalette_KeeBerry[] = INCBIN_U32("graphics/items/icon_palettes/kee_berry.gbapal.lz"); -const u32 gItemIcon_QuickClaw[] = INCBIN_U32("graphics/items/icons/quick_claw.4bpp.lz"); -const u32 gItemIconPalette_QuickClaw[] = INCBIN_U32("graphics/items/icon_palettes/quick_claw.gbapal.lz"); +const u32 gItemIcon_MarangaBerry[] = INCBIN_U32("graphics/items/icons/maranga_berry.4bpp.lz"); +const u32 gItemIconPalette_MarangaBerry[] = INCBIN_U32("graphics/items/icon_palettes/maranga_berry.gbapal.lz"); -const u32 gItemIcon_SootheBell[] = INCBIN_U32("graphics/items/icons/soothe_bell.4bpp.lz"); -const u32 gItemIconPalette_SootheBell[] = INCBIN_U32("graphics/items/icon_palettes/soothe_bell.gbapal.lz"); +// TMs/HMs -const u32 gItemIconPalette_MentalHerb[] = INCBIN_U32("graphics/items/icon_palettes/mental_herb.gbapal.lz"); +const u32 gItemIcon_TM[] = INCBIN_U32("graphics/items/icons/tm.4bpp.lz"); -const u32 gItemIcon_ChoiceBand[] = INCBIN_U32("graphics/items/icons/choice_band.4bpp.lz"); -const u32 gItemIconPalette_ChoiceBand[] = INCBIN_U32("graphics/items/icon_palettes/choice_band.gbapal.lz"); +const u32 gItemIcon_HM[] = INCBIN_U32("graphics/items/icons/hm.4bpp.lz"); -const u32 gItemIcon_KingsRock[] = INCBIN_U32("graphics/items/icons/kings_rock.4bpp.lz"); -const u32 gItemIconPalette_KingsRock[] = INCBIN_U32("graphics/items/icon_palettes/kings_rock.gbapal.lz"); +const u32 gItemIconPalette_NormalTMHM[] = INCBIN_U32("graphics/items/icon_palettes/normal_tm_hm.gbapal.lz"); -const u32 gItemIcon_SilverPowder[] = INCBIN_U32("graphics/items/icons/silver_powder.4bpp.lz"); -const u32 gItemIconPalette_SilverPowder[] = INCBIN_U32("graphics/items/icon_palettes/silver_powder.gbapal.lz"); +const u32 gItemIconPalette_FireTMHM[] = INCBIN_U32("graphics/items/icon_palettes/fire_tm_hm.gbapal.lz"); -const u32 gItemIcon_AmuletCoin[] = INCBIN_U32("graphics/items/icons/amulet_coin.4bpp.lz"); -const u32 gItemIconPalette_AmuletCoin[] = INCBIN_U32("graphics/items/icon_palettes/amulet_coin.gbapal.lz"); +const u32 gItemIconPalette_WaterTMHM[] = INCBIN_U32("graphics/items/icon_palettes/water_tm_hm.gbapal.lz"); -const u32 gItemIcon_CleanseTag[] = INCBIN_U32("graphics/items/icons/cleanse_tag.4bpp.lz"); -const u32 gItemIconPalette_CleanseTag[] = INCBIN_U32("graphics/items/icon_palettes/cleanse_tag.gbapal.lz"); +const u32 gItemIconPalette_ElectricTMHM[] = INCBIN_U32("graphics/items/icon_palettes/electric_tm_hm.gbapal.lz"); -const u32 gItemIcon_SoulDew[] = INCBIN_U32("graphics/items/icons/soul_dew.4bpp.lz"); -const u32 gItemIconPalette_SoulDew[] = INCBIN_U32("graphics/items/icon_palettes/soul_dew.gbapal.lz"); +const u32 gItemIconPalette_GrassTMHM[] = INCBIN_U32("graphics/items/icon_palettes/grass_tm_hm.gbapal.lz"); -const u32 gItemIcon_DeepSeaTooth[] = INCBIN_U32("graphics/items/icons/deep_sea_tooth.4bpp.lz"); -const u32 gItemIconPalette_DeepSeaTooth[] = INCBIN_U32("graphics/items/icon_palettes/deep_sea_tooth.gbapal.lz"); +const u32 gItemIconPalette_IceTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ice_tm_hm.gbapal.lz"); -const u32 gItemIcon_DeepSeaScale[] = INCBIN_U32("graphics/items/icons/deep_sea_scale.4bpp.lz"); -const u32 gItemIconPalette_DeepSeaScale[] = INCBIN_U32("graphics/items/icon_palettes/deep_sea_scale.gbapal.lz"); +const u32 gItemIconPalette_FightingTMHM[] = INCBIN_U32("graphics/items/icon_palettes/fighting_tm_hm.gbapal.lz"); -const u32 gItemIcon_SmokeBall[] = INCBIN_U32("graphics/items/icons/smoke_ball.4bpp.lz"); -const u32 gItemIconPalette_SmokeBall[] = INCBIN_U32("graphics/items/icon_palettes/smoke_ball.gbapal.lz"); +const u32 gItemIconPalette_PoisonTMHM[] = INCBIN_U32("graphics/items/icon_palettes/poison_tm_hm.gbapal.lz"); -const u32 gItemIcon_Everstone[] = INCBIN_U32("graphics/items/icons/everstone.4bpp.lz"); -const u32 gItemIconPalette_Everstone[] = INCBIN_U32("graphics/items/icon_palettes/everstone.gbapal.lz"); +const u32 gItemIconPalette_GroundTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ground_tm_hm.gbapal.lz"); -const u32 gItemIcon_FocusBand[] = INCBIN_U32("graphics/items/icons/focus_band.4bpp.lz"); -const u32 gItemIconPalette_FocusBand[] = INCBIN_U32("graphics/items/icon_palettes/focus_band.gbapal.lz"); +const u32 gItemIconPalette_FlyingTMHM[] = INCBIN_U32("graphics/items/icon_palettes/flying_tm_hm.gbapal.lz"); -const u32 gItemIcon_LuckyEgg[] = INCBIN_U32("graphics/items/icons/lucky_egg.4bpp.lz"); -const u32 gItemIconPalette_LuckyEgg[] = INCBIN_U32("graphics/items/icon_palettes/lucky_egg.gbapal.lz"); +const u32 gItemIconPalette_PsychicTMHM[] = INCBIN_U32("graphics/items/icon_palettes/psychic_tm_hm.gbapal.lz"); -const u32 gItemIcon_ScopeLens[] = INCBIN_U32("graphics/items/icons/scope_lens.4bpp.lz"); -const u32 gItemIconPalette_ScopeLens[] = INCBIN_U32("graphics/items/icon_palettes/scope_lens.gbapal.lz"); +const u32 gItemIconPalette_BugTMHM[] = INCBIN_U32("graphics/items/icon_palettes/bug_tm_hm.gbapal.lz"); -const u32 gItemIcon_MetalCoat[] = INCBIN_U32("graphics/items/icons/metal_coat.4bpp.lz"); -const u32 gItemIconPalette_MetalCoat[] = INCBIN_U32("graphics/items/icon_palettes/metal_coat.gbapal.lz"); +const u32 gItemIconPalette_RockTMHM[] = INCBIN_U32("graphics/items/icon_palettes/rock_tm_hm.gbapal.lz"); -const u32 gItemIcon_Leftovers[] = INCBIN_U32("graphics/items/icons/leftovers.4bpp.lz"); -const u32 gItemIconPalette_Leftovers[] = INCBIN_U32("graphics/items/icon_palettes/leftovers.gbapal.lz"); +const u32 gItemIconPalette_GhostTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ghost_tm_hm.gbapal.lz"); -const u32 gItemIcon_DragonScale[] = INCBIN_U32("graphics/items/icons/dragon_scale.4bpp.lz"); -const u32 gItemIconPalette_DragonScale[] = INCBIN_U32("graphics/items/icon_palettes/dragon_scale.gbapal.lz"); +const u32 gItemIconPalette_DragonTMHM[] = INCBIN_U32("graphics/items/icon_palettes/dragon_tm_hm.gbapal.lz"); -const u32 gItemIcon_LightBall[] = INCBIN_U32("graphics/items/icons/light_ball.4bpp.lz"); -const u32 gItemIconPalette_LightBall[] = INCBIN_U32("graphics/items/icon_palettes/light_ball.gbapal.lz"); +const u32 gItemIconPalette_DarkTMHM[] = INCBIN_U32("graphics/items/icon_palettes/dark_tm_hm.gbapal.lz"); -const u32 gItemIcon_SoftSand[] = INCBIN_U32("graphics/items/icons/soft_sand.4bpp.lz"); -const u32 gItemIconPalette_SoftSand[] = INCBIN_U32("graphics/items/icon_palettes/soft_sand.gbapal.lz"); +const u32 gItemIconPalette_SteelTMHM[] = INCBIN_U32("graphics/items/icon_palettes/steel_tm_hm.gbapal.lz"); -const u32 gItemIcon_HardStone[] = INCBIN_U32("graphics/items/icons/hard_stone.4bpp.lz"); -const u32 gItemIconPalette_HardStone[] = INCBIN_U32("graphics/items/icon_palettes/hard_stone.gbapal.lz"); +const u32 gItemIconPalette_FairyTMHM[] = INCBIN_U32("graphics/items/icon_palettes/fairy_tm_hm.gbapal.lz"); -const u32 gItemIcon_MiracleSeed[] = INCBIN_U32("graphics/items/icons/miracle_seed.4bpp.lz"); -const u32 gItemIconPalette_MiracleSeed[] = INCBIN_U32("graphics/items/icon_palettes/miracle_seed.gbapal.lz"); +// Charms -const u32 gItemIcon_BlackGlasses[] = INCBIN_U32("graphics/items/icons/black_glasses.4bpp.lz"); -const u32 gItemIconPalette_BlackTypeEnhancingItem[] = INCBIN_U32("graphics/items/icon_palettes/black_type_enhancing_item.gbapal.lz"); +const u32 gItemIcon_OvalCharm[] = INCBIN_U32("graphics/items/icons/oval_charm.4bpp.lz"); +const u32 gItemIconPalette_OvalCharm[] = INCBIN_U32("graphics/items/icon_palettes/oval_charm.gbapal.lz"); -const u32 gItemIcon_BlackBelt[] = INCBIN_U32("graphics/items/icons/black_belt.4bpp.lz"); +const u32 gItemIcon_ShinyCharm[] = INCBIN_U32("graphics/items/icons/shiny_charm.4bpp.lz"); +const u32 gItemIconPalette_ShinyCharm[] = INCBIN_U32("graphics/items/icon_palettes/shiny_charm.gbapal.lz"); -const u32 gItemIcon_Magnet[] = INCBIN_U32("graphics/items/icons/magnet.4bpp.lz"); -const u32 gItemIconPalette_Magnet[] = INCBIN_U32("graphics/items/icon_palettes/magnet.gbapal.lz"); +const u32 gItemIcon_CatchingCharm[] = INCBIN_U32("graphics/items/icons/catching_charm.4bpp.lz"); +const u32 gItemIconPalette_CatchingCharm[] = INCBIN_U32("graphics/items/icon_palettes/catching_charm.gbapal.lz"); -const u32 gItemIcon_MysticWater[] = INCBIN_U32("graphics/items/icons/mystic_water.4bpp.lz"); -const u32 gItemIconPalette_MysticWater[] = INCBIN_U32("graphics/items/icon_palettes/mystic_water.gbapal.lz"); +const u32 gItemIcon_ExpCharm[] = INCBIN_U32("graphics/items/icons/exp_charm.4bpp.lz"); +const u32 gItemIconPalette_ExpCharm[] = INCBIN_U32("graphics/items/icon_palettes/exp_charm.gbapal.lz"); -const u32 gItemIcon_SharpBeak[] = INCBIN_U32("graphics/items/icons/sharp_beak.4bpp.lz"); -const u32 gItemIconPalette_SharpBeak[] = INCBIN_U32("graphics/items/icon_palettes/sharp_beak.gbapal.lz"); +// Form-changing Key Items -const u32 gItemIcon_PoisonBarb[] = INCBIN_U32("graphics/items/icons/poison_barb.4bpp.lz"); -const u32 gItemIconPalette_PoisonBarb[] = INCBIN_U32("graphics/items/icon_palettes/poison_barb.gbapal.lz"); +const u32 gItemIcon_RotomCatalog[] = INCBIN_U32("graphics/items/icons/rotom_catalog.4bpp.lz"); +const u32 gItemIconPalette_RotomCatalog[] = INCBIN_U32("graphics/items/icon_palettes/rotom_catalog.gbapal.lz"); -const u32 gItemIcon_NeverMeltIce[] = INCBIN_U32("graphics/items/icons/never_melt_ice.4bpp.lz"); -const u32 gItemIconPalette_NeverMeltIce[] = INCBIN_U32("graphics/items/icon_palettes/never_melt_ice.gbapal.lz"); +const u32 gItemIcon_Gracidea[] = INCBIN_U32("graphics/items/icons/gracidea.4bpp.lz"); +const u32 gItemIconPalette_Gracidea[] = INCBIN_U32("graphics/items/icon_palettes/gracidea.gbapal.lz"); -const u32 gItemIcon_SpellTag[] = INCBIN_U32("graphics/items/icons/spell_tag.4bpp.lz"); -const u32 gItemIconPalette_SpellTag[] = INCBIN_U32("graphics/items/icon_palettes/spell_tag.gbapal.lz"); +const u32 gItemIcon_RevealGlass[] = INCBIN_U32("graphics/items/icons/reveal_glass.4bpp.lz"); +const u32 gItemIconPalette_RevealGlass[] = INCBIN_U32("graphics/items/icon_palettes/reveal_glass.gbapal.lz"); -const u32 gItemIcon_TwistedSpoon[] = INCBIN_U32("graphics/items/icons/twisted_spoon.4bpp.lz"); -const u32 gItemIconPalette_TwistedSpoon[] = INCBIN_U32("graphics/items/icon_palettes/twisted_spoon.gbapal.lz"); +const u32 gItemIcon_DNASplicers[] = INCBIN_U32("graphics/items/icons/dna_splicers.4bpp.lz"); +const u32 gItemIconPalette_DNASplicers[] = INCBIN_U32("graphics/items/icon_palettes/dna_splicers.gbapal.lz"); -const u32 gItemIcon_Charcoal[] = INCBIN_U32("graphics/items/icons/charcoal.4bpp.lz"); -const u32 gItemIconPalette_Charcoal[] = INCBIN_U32("graphics/items/icon_palettes/charcoal.gbapal.lz"); +const u32 gItemIcon_ZygardeCube[] = INCBIN_U32("graphics/items/icons/zygarde_cube.4bpp.lz"); +const u32 gItemIconPalette_ZygardeCube[] = INCBIN_U32("graphics/items/icon_palettes/zygarde_cube.gbapal.lz"); -const u32 gItemIcon_DragonFang[] = INCBIN_U32("graphics/items/icons/dragon_fang.4bpp.lz"); -const u32 gItemIconPalette_DragonFang[] = INCBIN_U32("graphics/items/icon_palettes/dragon_fang.gbapal.lz"); +const u32 gItemIcon_PrisonBottle[] = INCBIN_U32("graphics/items/icons/prison_bottle.4bpp.lz"); +const u32 gItemIconPalette_PrisonBottle[] = INCBIN_U32("graphics/items/icon_palettes/prison_bottle.gbapal.lz"); -const u32 gItemIcon_SilkScarf[] = INCBIN_U32("graphics/items/icons/silk_scarf.4bpp.lz"); -const u32 gItemIconPalette_SilkScarf[] = INCBIN_U32("graphics/items/icon_palettes/silk_scarf.gbapal.lz"); +const u32 gItemIcon_NecrozmaFuser[] = INCBIN_U32("graphics/items/icons/necrozma_fuser.4bpp.lz"); +const u32 gItemIconPalette_NSolarizer[] = INCBIN_U32("graphics/items/icon_palettes/n_solarizer.gbapal.lz"); +const u32 gItemIconPalette_NLunarizer[] = INCBIN_U32("graphics/items/icon_palettes/n_lunarizer.gbapal.lz"); -const u32 gItemIcon_UpGrade[] = INCBIN_U32("graphics/items/icons/up_grade.4bpp.lz"); -const u32 gItemIconPalette_UpGrade[] = INCBIN_U32("graphics/items/icon_palettes/up_grade.gbapal.lz"); +const u32 gItemIcon_ReinsOfUnity[] = INCBIN_U32("graphics/items/icons/reins_of_unity.4bpp.lz"); +const u32 gItemIconPalette_ReinsOfUnity[] = INCBIN_U32("graphics/items/icon_palettes/reins_of_unity.gbapal.lz"); -const u32 gItemIcon_ShellBell[] = INCBIN_U32("graphics/items/icons/shell_bell.4bpp.lz"); +// Battle Mechanic Key Items -const u32 gItemIcon_SeaIncense[] = INCBIN_U32("graphics/items/icons/sea_incense.4bpp.lz"); -const u32 gItemIconPalette_SeaIncense[] = INCBIN_U32("graphics/items/icon_palettes/sea_incense.gbapal.lz"); +const u32 gItemIcon_MegaRing[] = INCBIN_U32("graphics/items/icons/mega_ring.4bpp.lz"); +const u32 gItemIconPalette_MegaRing[] = INCBIN_U32("graphics/items/icon_palettes/mega_ring.gbapal.lz"); -const u32 gItemIcon_LaxIncense[] = INCBIN_U32("graphics/items/icons/lax_incense.4bpp.lz"); -const u32 gItemIconPalette_LaxIncense[] = INCBIN_U32("graphics/items/icon_palettes/lax_incense.gbapal.lz"); +const u32 gItemIcon_ZPowerRing[] = INCBIN_U32("graphics/items/icons/z_power_ring.4bpp.lz"); +const u32 gItemIconPalette_ZPowerRing[] = INCBIN_U32("graphics/items/icon_palettes/z_power_ring.gbapal.lz"); -const u32 gItemIcon_LuckyPunch[] = INCBIN_U32("graphics/items/icons/lucky_punch.4bpp.lz"); -const u32 gItemIconPalette_LuckyPunch[] = INCBIN_U32("graphics/items/icon_palettes/lucky_punch.gbapal.lz"); +const u32 gItemIcon_ZRing[] = INCBIN_U32("graphics/items/icons/z_ring.4bpp.lz"); // Remove +const u32 gItemIconPalette_ZRing[] = INCBIN_U32("graphics/items/icon_palettes/z_ring.gbapal.lz"); // Remove -const u32 gItemIcon_MetalPowder[] = INCBIN_U32("graphics/items/icons/metal_powder.4bpp.lz"); -const u32 gItemIconPalette_MetalPowder[] = INCBIN_U32("graphics/items/icon_palettes/metal_powder.gbapal.lz"); +const u32 gItemIcon_DynamaxBand[] = INCBIN_U32("graphics/items/icons/dynamax_band.4bpp.lz"); +const u32 gItemIconPalette_DynamaxBand[] = INCBIN_U32("graphics/items/icon_palettes/dynamax_band.gbapal.lz"); -const u32 gItemIcon_ThickClub[] = INCBIN_U32("graphics/items/icons/thick_club.4bpp.lz"); -const u32 gItemIconPalette_ThickClub[] = INCBIN_U32("graphics/items/icon_palettes/thick_club.gbapal.lz"); +// Misc. Key Items -const u32 gItemIcon_Stick[] = INCBIN_U32("graphics/items/icons/stick.4bpp.lz"); -const u32 gItemIconPalette_Stick[] = INCBIN_U32("graphics/items/icon_palettes/stick.gbapal.lz"); - -const u32 gItemIcon_Scarf[] = INCBIN_U32("graphics/items/icons/scarf.4bpp.lz"); -const u32 gItemIconPalette_RedScarf[] = INCBIN_U32("graphics/items/icon_palettes/red_scarf.gbapal.lz"); -const u32 gItemIconPalette_BlueScarf[] = INCBIN_U32("graphics/items/icon_palettes/blue_scarf.gbapal.lz"); -const u32 gItemIconPalette_PinkScarf[] = INCBIN_U32("graphics/items/icon_palettes/pink_scarf.gbapal.lz"); -const u32 gItemIconPalette_GreenScarf[] = INCBIN_U32("graphics/items/icon_palettes/green_scarf.gbapal.lz"); -const u32 gItemIconPalette_YellowScarf[] = INCBIN_U32("graphics/items/icon_palettes/yellow_scarf.gbapal.lz"); - -// Key items +const u32 gItemIcon_Bicycle[] = INCBIN_U32("graphics/items/icons/bicycle.4bpp.lz"); +const u32 gItemIconPalette_Bicycle[] = INCBIN_U32("graphics/items/icon_palettes/bicycle.gbapal.lz"); const u32 gItemIcon_MachBike[] = INCBIN_U32("graphics/items/icons/mach_bike.4bpp.lz"); const u32 gItemIconPalette_MachBike[] = INCBIN_U32("graphics/items/icon_palettes/mach_bike.gbapal.lz"); -const u32 gItemIcon_CoinCase[] = INCBIN_U32("graphics/items/icons/coin_case.4bpp.lz"); -const u32 gItemIconPalette_CoinCase[] = INCBIN_U32("graphics/items/icon_palettes/coin_case.gbapal.lz"); - -const u32 gItemIcon_Itemfinder[] = INCBIN_U32("graphics/items/icons/itemfinder.4bpp.lz"); -const u32 gItemIconPalette_Itemfinder[] = INCBIN_U32("graphics/items/icon_palettes/itemfinder.gbapal.lz"); +const u32 gItemIcon_AcroBike[] = INCBIN_U32("graphics/items/icons/acro_bike.4bpp.lz"); +const u32 gItemIconPalette_AcroBike[] = INCBIN_U32("graphics/items/icon_palettes/acro_bike.gbapal.lz"); const u32 gItemIcon_OldRod[] = INCBIN_U32("graphics/items/icons/old_rod.4bpp.lz"); const u32 gItemIconPalette_OldRod[] = INCBIN_U32("graphics/items/icon_palettes/old_rod.gbapal.lz"); @@ -556,111 +1798,108 @@ const u32 gItemIconPalette_GoodRod[] = INCBIN_U32("graphics/items/icon_palettes/ const u32 gItemIcon_SuperRod[] = INCBIN_U32("graphics/items/icons/super_rod.4bpp.lz"); const u32 gItemIconPalette_SuperRod[] = INCBIN_U32("graphics/items/icon_palettes/super_rod.gbapal.lz"); -const u32 gItemIcon_SSTicket[] = INCBIN_U32("graphics/items/icons/ss_ticket.4bpp.lz"); -const u32 gItemIconPalette_SSTicket[] = INCBIN_U32("graphics/items/icon_palettes/ss_ticket.gbapal.lz"); +const u32 gItemIcon_DowsingMachine[] = INCBIN_U32("graphics/items/icons/dowsing_machine.4bpp.lz"); +const u32 gItemIconPalette_DowsingMachine[] = INCBIN_U32("graphics/items/icon_palettes/dowsing_machine.gbapal.lz"); -const u32 gItemIcon_ContestPass[] = INCBIN_U32("graphics/items/icons/contest_pass.4bpp.lz"); -const u32 gItemIconPalette_ContestPass[] = INCBIN_U32("graphics/items/icon_palettes/contest_pass.gbapal.lz"); +const u32 gItemIcon_TownMap[] = INCBIN_U32("graphics/items/icons/town_map.4bpp.lz"); +const u32 gItemIconPalette_TownMap[] = INCBIN_U32("graphics/items/icon_palettes/town_map.gbapal.lz"); + +const u32 gItemIcon_VsSeeker[] = INCBIN_U32("graphics/items/icons/vs_seeker.4bpp.lz"); +const u32 gItemIconPalette_VsSeeker[] = INCBIN_U32("graphics/items/icon_palettes/vs_seeker.gbapal.lz"); + +const u32 gItemIcon_TMCase[] = INCBIN_U32("graphics/items/icons/tm_case.4bpp.lz"); +const u32 gItemIconPalette_TMCase[] = INCBIN_U32("graphics/items/icon_palettes/tm_case.gbapal.lz"); + +const u32 gItemIcon_BerryPouch[] = INCBIN_U32("graphics/items/icons/berry_pouch.4bpp.lz"); +const u32 gItemIconPalette_BerryPouch[] = INCBIN_U32("graphics/items/icon_palettes/berry_pouch.gbapal.lz"); + +const u32 gItemIcon_PokemonBoxLink[] = INCBIN_U32("graphics/items/icons/pokemon_box_link.4bpp.lz"); +const u32 gItemIconPalette_PokemonBoxLink[] = INCBIN_U32("graphics/items/icon_palettes/pokemon_box_link.gbapal.lz"); + +const u32 gItemIcon_CoinCase[] = INCBIN_U32("graphics/items/icons/coin_case.4bpp.lz"); +const u32 gItemIconPalette_CoinCase[] = INCBIN_U32("graphics/items/icon_palettes/coin_case.gbapal.lz"); + +const u32 gItemIcon_PowderJar[] = INCBIN_U32("graphics/items/icons/powder_jar.4bpp.lz"); +const u32 gItemIconPalette_PowderJar[] = INCBIN_U32("graphics/items/icon_palettes/powder_jar.gbapal.lz"); const u32 gItemIcon_WailmerPail[] = INCBIN_U32("graphics/items/icons/wailmer_pail.4bpp.lz"); const u32 gItemIconPalette_WailmerPail[] = INCBIN_U32("graphics/items/icon_palettes/wailmer_pail.gbapal.lz"); -const u32 gItemIcon_DevonGoods[] = INCBIN_U32("graphics/items/icons/devon_goods.4bpp.lz"); -const u32 gItemIconPalette_DevonGoods[] = INCBIN_U32("graphics/items/icon_palettes/devon_goods.gbapal.lz"); - -const u32 gItemIcon_SootSack[] = INCBIN_U32("graphics/items/icons/soot_sack.4bpp.lz"); -const u32 gItemIconPalette_SootSack[] = INCBIN_U32("graphics/items/icon_palettes/soot_sack.gbapal.lz"); - -const u32 gItemIcon_BasementKey[] = INCBIN_U32("graphics/items/icons/basement_key.4bpp.lz"); -const u32 gItemIconPalette_OldKey[] = INCBIN_U32("graphics/items/icon_palettes/old_key.gbapal.lz"); - -const u32 gItemIcon_AcroBike[] = INCBIN_U32("graphics/items/icons/acro_bike.4bpp.lz"); -const u32 gItemIconPalette_AcroBike[] = INCBIN_U32("graphics/items/icon_palettes/acro_bike.gbapal.lz"); +const u32 gItemIcon_PokeRadar[] = INCBIN_U32("graphics/items/icons/poke_radar.4bpp.lz"); +const u32 gItemIconPalette_PokeRadar[] = INCBIN_U32("graphics/items/icon_palettes/poke_radar.gbapal.lz"); const u32 gItemIcon_PokeblockCase[] = INCBIN_U32("graphics/items/icons/pokeblock_case.4bpp.lz"); const u32 gItemIconPalette_PokeblockCase[] = INCBIN_U32("graphics/items/icon_palettes/pokeblock_case.gbapal.lz"); -const u32 gItemIcon_Letter[] = INCBIN_U32("graphics/items/icons/letter.4bpp.lz"); -const u32 gItemIcon_EonTicket[] = INCBIN_U32("graphics/items/icons/eon_ticket.4bpp.lz"); +const u32 gItemIcon_SootSack[] = INCBIN_U32("graphics/items/icons/soot_sack.4bpp.lz"); +const u32 gItemIconPalette_SootSack[] = INCBIN_U32("graphics/items/icon_palettes/soot_sack.gbapal.lz"); +const u32 gItemIcon_PokeFlute[] = INCBIN_U32("graphics/items/icons/poke_flute.4bpp.lz"); +const u32 gItemIconPalette_PokeFlute[] = INCBIN_U32("graphics/items/icon_palettes/poke_flute.gbapal.lz"); + +const u32 gItemIcon_FameChecker[] = INCBIN_U32("graphics/items/icons/fame_checker.4bpp.lz"); +const u32 gItemIconPalette_FameChecker[] = INCBIN_U32("graphics/items/icon_palettes/fame_checker.gbapal.lz"); + +const u32 gItemIcon_TeachyTV[] = INCBIN_U32("graphics/items/icons/teachy_tv.4bpp.lz"); +const u32 gItemIconPalette_TeachyTV[] = INCBIN_U32("graphics/items/icon_palettes/teachy_tv.gbapal.lz"); + +// Story Key Items + +const u32 gItemIcon_SSTicket[] = INCBIN_U32("graphics/items/icons/ss_ticket.4bpp.lz"); +const u32 gItemIconPalette_SSTicket[] = INCBIN_U32("graphics/items/icon_palettes/ss_ticket.gbapal.lz"); + +const u32 gItemIcon_EonTicket[] = INCBIN_U32("graphics/items/icons/eon_ticket.4bpp.lz"); const u32 gItemIconPalette_EonTicket[] = INCBIN_U32("graphics/items/icon_palettes/eon_ticket.gbapal.lz"); -const u32 gItemIcon_Orb[] = INCBIN_U32("graphics/items/icons/orb.4bpp.lz"); -const u32 gItemIconPalette_RedOrb[] = INCBIN_U32("graphics/items/icon_palettes/red_orb.gbapal.lz"); -const u32 gItemIconPalette_BlueOrb[] = INCBIN_U32("graphics/items/icon_palettes/blue_orb.gbapal.lz"); +const u32 gItemIcon_MysticTicket[] = INCBIN_U32("graphics/items/icons/mystic_ticket.4bpp.lz"); +const u32 gItemIconPalette_MysticTicket[] = INCBIN_U32("graphics/items/icon_palettes/mystic_ticket.gbapal.lz"); -const u32 gItemIcon_Scanner[] = INCBIN_U32("graphics/items/icons/scanner.4bpp.lz"); -const u32 gItemIconPalette_Scanner[] = INCBIN_U32("graphics/items/icon_palettes/scanner.gbapal.lz"); +const u32 gItemIcon_AuroraTicket[] = INCBIN_U32("graphics/items/icons/aurora_ticket.4bpp.lz"); +const u32 gItemIconPalette_AuroraTicket[] = INCBIN_U32("graphics/items/icon_palettes/aurora_ticket.gbapal.lz"); + +const u32 gItemIcon_OldSeaMap[] = INCBIN_U32("graphics/items/icons/old_sea_map.4bpp.lz"); +const u32 gItemIconPalette_OldSeaMap[] = INCBIN_U32("graphics/items/icon_palettes/old_sea_map.gbapal.lz"); + +const u32 gItemIcon_Letter[] = INCBIN_U32("graphics/items/icons/letter.4bpp.lz"); + +const u32 gItemIcon_DevonParts[] = INCBIN_U32("graphics/items/icons/devon_parts.4bpp.lz"); +const u32 gItemIconPalette_DevonParts[] = INCBIN_U32("graphics/items/icon_palettes/devon_parts.gbapal.lz"); const u32 gItemIcon_GoGoggles[] = INCBIN_U32("graphics/items/icons/go_goggles.4bpp.lz"); const u32 gItemIconPalette_GoGoggles[] = INCBIN_U32("graphics/items/icon_palettes/go_goggles.gbapal.lz"); -const u32 gItemIcon_Meteorite[] = INCBIN_U32("graphics/items/icons/meteorite.4bpp.lz"); -const u32 gItemIconPalette_Meteorite[] = INCBIN_U32("graphics/items/icon_palettes/meteorite.gbapal.lz"); - -const u32 gItemIcon_Room1Key[] = INCBIN_U32("graphics/items/icons/room1_key.4bpp.lz"); - -const u32 gItemIcon_Room2Key[] = INCBIN_U32("graphics/items/icons/room2_key.4bpp.lz"); - -const u32 gItemIcon_Room4Key[] = INCBIN_U32("graphics/items/icons/room4_key.4bpp.lz"); - -const u32 gItemIcon_Room6Key[] = INCBIN_U32("graphics/items/icons/room6_key.4bpp.lz"); - -const u32 gItemIcon_StorageKey[] = INCBIN_U32("graphics/items/icons/storage_key.4bpp.lz"); - -const u32 gItemIcon_RootFossil[] = INCBIN_U32("graphics/items/icons/root_fossil.4bpp.lz"); -const u32 gItemIconPalette_HoennFossil[] = INCBIN_U32("graphics/items/icon_palettes/hoenn_fossil.gbapal.lz"); -const u32 gItemIcon_ClawFossil[] = INCBIN_U32("graphics/items/icons/claw_fossil.4bpp.lz"); - const u32 gItemIcon_DevonScope[] = INCBIN_U32("graphics/items/icons/devon_scope.4bpp.lz"); const u32 gItemIconPalette_DevonScope[] = INCBIN_U32("graphics/items/icon_palettes/devon_scope.gbapal.lz"); -// TMs/HMs +const u32 gItemIcon_BasementKey[] = INCBIN_U32("graphics/items/icons/basement_key.4bpp.lz"); +const u32 gItemIconPalette_OldKey[] = INCBIN_U32("graphics/items/icon_palettes/old_key.gbapal.lz"); -const u32 gItemIcon_TM[] = INCBIN_U32("graphics/items/icons/tm.4bpp.lz"); +const u32 gItemIcon_Scanner[] = INCBIN_U32("graphics/items/icons/scanner.4bpp.lz"); +const u32 gItemIconPalette_Scanner[] = INCBIN_U32("graphics/items/icon_palettes/scanner.gbapal.lz"); -const u32 gItemIconPalette_FightingTMHM[] = INCBIN_U32("graphics/items/icon_palettes/fighting_tm_hm.gbapal.lz"); +const u32 gItemIcon_StorageKey[] = INCBIN_U32("graphics/items/icons/storage_key.4bpp.lz"); -const u32 gItemIconPalette_DragonTMHM[] = INCBIN_U32("graphics/items/icon_palettes/dragon_tm_hm.gbapal.lz"); +const u32 gItemIcon_KeyToRoom1[] = INCBIN_U32("graphics/items/icons/key_to_room_1.4bpp.lz"); +const u32 gItemIconPalette_Key[] = INCBIN_U32("graphics/items/icon_palettes/key.gbapal.lz"); -const u32 gItemIconPalette_WaterTMHM[] = INCBIN_U32("graphics/items/icon_palettes/water_tm_hm.gbapal.lz"); +const u32 gItemIcon_KeyToRoom2[] = INCBIN_U32("graphics/items/icons/key_to_room_2.4bpp.lz"); -const u32 gItemIconPalette_PsychicTMHM[] = INCBIN_U32("graphics/items/icon_palettes/psychic_tm_hm.gbapal.lz"); +const u32 gItemIcon_KeyToRoom4[] = INCBIN_U32("graphics/items/icons/key_to_room_4.4bpp.lz"); -const u32 gItemIconPalette_NormalTMHM[] = INCBIN_U32("graphics/items/icon_palettes/normal_tm_hm.gbapal.lz"); +const u32 gItemIcon_KeyToRoom6[] = INCBIN_U32("graphics/items/icons/key_to_room_6.4bpp.lz"); -const u32 gItemIconPalette_PoisonTMHM[] = INCBIN_U32("graphics/items/icon_palettes/poison_tm_hm.gbapal.lz"); +const u32 gItemIcon_Meteorite[] = INCBIN_U32("graphics/items/icons/meteorite.4bpp.lz"); +const u32 gItemIconPalette_Meteorite[] = INCBIN_U32("graphics/items/icon_palettes/meteorite.gbapal.lz"); -const u32 gItemIconPalette_IceTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ice_tm_hm.gbapal.lz"); +const u32 gItemIcon_MagmaEmblem[] = INCBIN_U32("graphics/items/icons/magma_emblem.4bpp.lz"); +const u32 gItemIconPalette_MagmaEmblem[] = INCBIN_U32("graphics/items/icon_palettes/magma_emblem.gbapal.lz"); -const u32 gItemIconPalette_GrassTMHM[] = INCBIN_U32("graphics/items/icon_palettes/grass_tm_hm.gbapal.lz"); - -const u32 gItemIconPalette_FireTMHM[] = INCBIN_U32("graphics/items/icon_palettes/fire_tm_hm.gbapal.lz"); - -const u32 gItemIconPalette_DarkTMHM[] = INCBIN_U32("graphics/items/icon_palettes/dark_tm_hm.gbapal.lz"); - -const u32 gItemIconPalette_SteelTMHM[] = INCBIN_U32("graphics/items/icon_palettes/steel_tm_hm.gbapal.lz"); - -const u32 gItemIconPalette_ElectricTMHM[] = INCBIN_U32("graphics/items/icon_palettes/electric_tm_hm.gbapal.lz"); - -const u32 gItemIconPalette_GroundTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ground_tm_hm.gbapal.lz"); - -const u32 gItemIconPalette_GhostTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ghost_tm_hm.gbapal.lz"); - -const u32 gItemIconPalette_RockTMHM[] = INCBIN_U32("graphics/items/icon_palettes/rock_tm_hm.gbapal.lz"); - -const u32 gItemIconPalette_FlyingTMHM[] = INCBIN_U32("graphics/items/icon_palettes/flying_tm_hm.gbapal.lz"); - -const u32 gItemIcon_HM[] = INCBIN_U32("graphics/items/icons/hm.4bpp.lz"); - -// FireRed/LeafGreen key items +const u32 gItemIcon_ContestPass[] = INCBIN_U32("graphics/items/icons/contest_pass.4bpp.lz"); +const u32 gItemIconPalette_ContestPass[] = INCBIN_U32("graphics/items/icon_palettes/contest_pass.gbapal.lz"); const u32 gItemIcon_OaksParcel[] = INCBIN_U32("graphics/items/icons/oaks_parcel.4bpp.lz"); const u32 gItemIconPalette_OaksParcel[] = INCBIN_U32("graphics/items/icon_palettes/oaks_parcel.gbapal.lz"); -const u32 gItemIcon_PokeFlute[] = INCBIN_U32("graphics/items/icons/poke_flute.4bpp.lz"); -const u32 gItemIconPalette_PokeFlute[] = INCBIN_U32("graphics/items/icon_palettes/poke_flute.gbapal.lz"); - const u32 gItemIcon_SecretKey[] = INCBIN_U32("graphics/items/icons/secret_key.4bpp.lz"); const u32 gItemIconPalette_SecretKey[] = INCBIN_U32("graphics/items/icon_palettes/secret_key.gbapal.lz"); @@ -670,43 +1909,14 @@ const u32 gItemIconPalette_BikeVoucher[] = INCBIN_U32("graphics/items/icon_palet const u32 gItemIcon_GoldTeeth[] = INCBIN_U32("graphics/items/icons/gold_teeth.4bpp.lz"); const u32 gItemIconPalette_GoldTeeth[] = INCBIN_U32("graphics/items/icon_palettes/gold_teeth.gbapal.lz"); -const u32 gItemIcon_OldAmber[] = INCBIN_U32("graphics/items/icons/old_amber.4bpp.lz"); -const u32 gItemIconPalette_OldAmber[] = INCBIN_U32("graphics/items/icon_palettes/old_amber.gbapal.lz"); - const u32 gItemIcon_CardKey[] = INCBIN_U32("graphics/items/icons/card_key.4bpp.lz"); const u32 gItemIconPalette_CardKey[] = INCBIN_U32("graphics/items/icon_palettes/card_key.gbapal.lz"); const u32 gItemIcon_LiftKey[] = INCBIN_U32("graphics/items/icons/lift_key.4bpp.lz"); -const u32 gItemIconPalette_Key[] = INCBIN_U32("graphics/items/icon_palettes/key.gbapal.lz"); - -const u32 gItemIcon_HelixFossil[] = INCBIN_U32("graphics/items/icons/helix_fossil.4bpp.lz"); -const u32 gItemIconPalette_KantoFossil[] = INCBIN_U32("graphics/items/icon_palettes/kanto_fossil.gbapal.lz"); -const u32 gItemIcon_DomeFossil[] = INCBIN_U32("graphics/items/icons/dome_fossil.4bpp.lz"); const u32 gItemIcon_SilphScope[] = INCBIN_U32("graphics/items/icons/silph_scope.4bpp.lz"); const u32 gItemIconPalette_SilphScope[] = INCBIN_U32("graphics/items/icon_palettes/silph_scope.gbapal.lz"); -const u32 gItemIcon_Bicycle[] = INCBIN_U32("graphics/items/icons/bicycle.4bpp.lz"); -const u32 gItemIconPalette_Bicycle[] = INCBIN_U32("graphics/items/icon_palettes/bicycle.gbapal.lz"); - -const u32 gItemIcon_TownMap[] = INCBIN_U32("graphics/items/icons/town_map.4bpp.lz"); -const u32 gItemIconPalette_TownMap[] = INCBIN_U32("graphics/items/icon_palettes/town_map.gbapal.lz"); - -const u32 gItemIcon_VSSeeker[] = INCBIN_U32("graphics/items/icons/vs_seeker.4bpp.lz"); -const u32 gItemIconPalette_VSSeeker[] = INCBIN_U32("graphics/items/icon_palettes/vs_seeker.gbapal.lz"); - -const u32 gItemIcon_FameChecker[] = INCBIN_U32("graphics/items/icons/fame_checker.4bpp.lz"); -const u32 gItemIconPalette_FameChecker[] = INCBIN_U32("graphics/items/icon_palettes/fame_checker.gbapal.lz"); - -const u32 gItemIcon_TMCase[] = INCBIN_U32("graphics/items/icons/tm_case.4bpp.lz"); -const u32 gItemIconPalette_TMCase[] = INCBIN_U32("graphics/items/icon_palettes/tm_case.gbapal.lz"); - -const u32 gItemIcon_BerryPouch[] = INCBIN_U32("graphics/items/icons/berry_pouch.4bpp.lz"); -const u32 gItemIconPalette_BerryPouch[] = INCBIN_U32("graphics/items/icon_palettes/berry_pouch.gbapal.lz"); - -const u32 gItemIcon_TeachyTV[] = INCBIN_U32("graphics/items/icons/teachy_tv.4bpp.lz"); -const u32 gItemIconPalette_TeachyTV[] = INCBIN_U32("graphics/items/icon_palettes/teachy_tv.gbapal.lz"); - const u32 gItemIcon_TriPass[] = INCBIN_U32("graphics/items/icons/tri_pass.4bpp.lz"); const u32 gItemIconPalette_TriPass[] = INCBIN_U32("graphics/items/icon_palettes/tri_pass.gbapal.lz"); @@ -716,23 +1926,7 @@ const u32 gItemIconPalette_RainbowPass[] = INCBIN_U32("graphics/items/icon_palet const u32 gItemIcon_Tea[] = INCBIN_U32("graphics/items/icons/tea.4bpp.lz"); const u32 gItemIconPalette_Tea[] = INCBIN_U32("graphics/items/icon_palettes/tea.gbapal.lz"); -const u32 gItemIcon_MysticTicket[] = INCBIN_U32("graphics/items/icons/mystic_ticket.4bpp.lz"); -const u32 gItemIconPalette_MysticTicket[] = INCBIN_U32("graphics/items/icon_palettes/mystic_ticket.gbapal.lz"); - -const u32 gItemIcon_AuroraTicket[] = INCBIN_U32("graphics/items/icons/aurora_ticket.4bpp.lz"); -const u32 gItemIconPalette_AuroraTicket[] = INCBIN_U32("graphics/items/icon_palettes/aurora_ticket.gbapal.lz"); - -const u32 gItemIcon_PowderJar[] = INCBIN_U32("graphics/items/icons/powder_jar.4bpp.lz"); -const u32 gItemIconPalette_PowderJar[] = INCBIN_U32("graphics/items/icon_palettes/powder_jar.gbapal.lz"); - -const u32 gItemIconPalette_Ruby[] = INCBIN_U32("graphics/items/icon_palettes/ruby.gbapal.lz"); const u32 gItemIcon_Gem[] = INCBIN_U32("graphics/items/icons/gem.4bpp.lz"); +const u32 gItemIconPalette_Ruby[] = INCBIN_U32("graphics/items/icon_palettes/ruby.gbapal.lz"); + const u32 gItemIconPalette_Sapphire[] = INCBIN_U32("graphics/items/icon_palettes/sapphire.gbapal.lz"); - -// Emerald-only key items - -const u32 gItemIcon_MagmaEmblem[] = INCBIN_U32("graphics/items/icons/magma_emblem.4bpp.lz"); -const u32 gItemIconPalette_MagmaEmblem[] = INCBIN_U32("graphics/items/icon_palettes/magma_emblem.gbapal.lz"); - -const u32 gItemIcon_OldSeaMap[] = INCBIN_U32("graphics/items/icons/old_sea_map.4bpp.lz"); -const u32 gItemIconPalette_OldSeaMap[] = INCBIN_U32("graphics/items/icon_palettes/old_sea_map.gbapal.lz"); diff --git a/src/data/graphics/pokeballs.h b/src/data/graphics/pokeballs.h new file mode 100644 index 0000000000..44f47cde48 --- /dev/null +++ b/src/data/graphics/pokeballs.h @@ -0,0 +1,82 @@ +const u32 gBallGfx_Poke[] = INCBIN_U32("graphics/balls/poke.4bpp.lz"); +const u32 gBallPal_Poke[] = INCBIN_U32("graphics/balls/poke.gbapal.lz"); + +const u32 gBallGfx_Great[] = INCBIN_U32("graphics/balls/great.4bpp.lz"); +const u32 gBallPal_Great[] = INCBIN_U32("graphics/balls/great.gbapal.lz"); + +const u32 gBallGfx_Ultra[] = INCBIN_U32("graphics/balls/ultra.4bpp.lz"); +const u32 gBallPal_Ultra[] = INCBIN_U32("graphics/balls/ultra.gbapal.lz"); + +const u32 gBallGfx_Master[] = INCBIN_U32("graphics/balls/master.4bpp.lz"); +const u32 gBallPal_Master[] = INCBIN_U32("graphics/balls/master.gbapal.lz"); + +const u32 gBallGfx_Premier[] = INCBIN_U32("graphics/balls/premier.4bpp.lz"); +const u32 gBallPal_Premier[] = INCBIN_U32("graphics/balls/premier.gbapal.lz"); + +const u32 gBallGfx_Heal[] = INCBIN_U32("graphics/balls/heal.4bpp.lz"); +const u32 gBallPal_Heal[] = INCBIN_U32("graphics/balls/heal.gbapal.lz"); + +const u32 gBallGfx_Net[] = INCBIN_U32("graphics/balls/net.4bpp.lz"); +const u32 gBallPal_Net[] = INCBIN_U32("graphics/balls/net.gbapal.lz"); + +const u32 gBallGfx_Nest[] = INCBIN_U32("graphics/balls/nest.4bpp.lz"); +const u32 gBallPal_Nest[] = INCBIN_U32("graphics/balls/nest.gbapal.lz"); + +const u32 gBallGfx_Dive[] = INCBIN_U32("graphics/balls/dive.4bpp.lz"); +const u32 gBallPal_Dive[] = INCBIN_U32("graphics/balls/dive.gbapal.lz"); + +const u32 gBallGfx_Dusk[] = INCBIN_U32("graphics/balls/dusk.4bpp.lz"); +const u32 gBallPal_Dusk[] = INCBIN_U32("graphics/balls/dusk.gbapal.lz"); + +const u32 gBallGfx_Timer[] = INCBIN_U32("graphics/balls/timer.4bpp.lz"); +const u32 gBallPal_Timer[] = INCBIN_U32("graphics/balls/timer.gbapal.lz"); + +const u32 gBallGfx_Quick[] = INCBIN_U32("graphics/balls/quick.4bpp.lz"); +const u32 gBallPal_Quick[] = INCBIN_U32("graphics/balls/quick.gbapal.lz"); + +const u32 gBallGfx_Repeat[] = INCBIN_U32("graphics/balls/repeat.4bpp.lz"); +const u32 gBallPal_Repeat[] = INCBIN_U32("graphics/balls/repeat.gbapal.lz"); + +const u32 gBallGfx_Luxury[] = INCBIN_U32("graphics/balls/luxury.4bpp.lz"); +const u32 gBallPal_Luxury[] = INCBIN_U32("graphics/balls/luxury.gbapal.lz"); + +const u32 gBallGfx_Level[] = INCBIN_U32("graphics/balls/level.4bpp.lz"); +const u32 gBallPal_Level[] = INCBIN_U32("graphics/balls/level.gbapal.lz"); + +const u32 gBallGfx_Lure[] = INCBIN_U32("graphics/balls/lure.4bpp.lz"); +const u32 gBallPal_Lure[] = INCBIN_U32("graphics/balls/lure.gbapal.lz"); + +const u32 gBallGfx_Moon[] = INCBIN_U32("graphics/balls/moon.4bpp.lz"); +const u32 gBallPal_Moon[] = INCBIN_U32("graphics/balls/moon.gbapal.lz"); + +const u32 gBallGfx_Friend[] = INCBIN_U32("graphics/balls/friend.4bpp.lz"); +const u32 gBallPal_Friend[] = INCBIN_U32("graphics/balls/friend.gbapal.lz"); + +const u32 gBallGfx_Love[] = INCBIN_U32("graphics/balls/love.4bpp.lz"); +const u32 gBallPal_Love[] = INCBIN_U32("graphics/balls/love.gbapal.lz"); + +const u32 gBallGfx_Fast[] = INCBIN_U32("graphics/balls/fast.4bpp.lz"); +const u32 gBallPal_Fast[] = INCBIN_U32("graphics/balls/fast.gbapal.lz"); + +const u32 gBallGfx_Heavy[] = INCBIN_U32("graphics/balls/heavy.4bpp.lz"); +const u32 gBallPal_Heavy[] = INCBIN_U32("graphics/balls/heavy.gbapal.lz"); + +const u32 gBallGfx_Dream[] = INCBIN_U32("graphics/balls/dream.4bpp.lz"); +const u32 gBallPal_Dream[] = INCBIN_U32("graphics/balls/dream.gbapal.lz"); + +const u32 gBallGfx_Safari[] = INCBIN_U32("graphics/balls/safari.4bpp.lz"); +const u32 gBallPal_Safari[] = INCBIN_U32("graphics/balls/safari.gbapal.lz"); + +const u32 gBallGfx_Sport[] = INCBIN_U32("graphics/balls/sport.4bpp.lz"); +const u32 gBallPal_Sport[] = INCBIN_U32("graphics/balls/sport.gbapal.lz"); + +const u32 gBallGfx_Park[] = INCBIN_U32("graphics/balls/park.4bpp.lz"); +const u32 gBallPal_Park[] = INCBIN_U32("graphics/balls/park.gbapal.lz"); + +const u32 gBallGfx_Beast[] = INCBIN_U32("graphics/balls/beast.4bpp.lz"); +const u32 gBallPal_Beast[] = INCBIN_U32("graphics/balls/beast.gbapal.lz"); + +const u32 gBallGfx_Cherish[] = INCBIN_U32("graphics/balls/cherish.4bpp.lz"); +const u32 gBallPal_Cherish[] = INCBIN_U32("graphics/balls/cherish.gbapal.lz"); + +const u32 gOpenPokeballGfx[] = INCBIN_U32("graphics/balls/open.4bpp.lz"); diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 7d29936ebe..afb9ecd9a7 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -387,6 +387,7 @@ const u32 gMonFrontPic_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/anim_fro const u32 gMonFrontPic_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/anim_front.4bpp.lz"); const u32 gMonFrontPic_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/anim_front.4bpp.lz"); const u32 gMonFrontPic_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/anim_front.4bpp.lz"); +#if P_NEW_POKEMON == TRUE const u32 gMonFrontPic_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/anim_front.4bpp.lz"); const u32 gMonFrontPic_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/anim_front.4bpp.lz"); const u32 gMonFrontPic_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/anim_front.4bpp.lz"); @@ -397,13 +398,20 @@ const u32 gMonFrontPic_Piplup[] = INCBIN_U32("graphics/pokemon/piplup/anim_front const u32 gMonFrontPic_Prinplup[] = INCBIN_U32("graphics/pokemon/prinplup/anim_front.4bpp.lz"); const u32 gMonFrontPic_Empoleon[] = INCBIN_U32("graphics/pokemon/empoleon/anim_front.4bpp.lz"); const u32 gMonFrontPic_Starly[] = INCBIN_U32("graphics/pokemon/starly/anim_front.4bpp.lz"); +const u32 gMonFrontPic_StarlyF[] = INCBIN_U32("graphics/pokemon/starly/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Staravia[] = INCBIN_U32("graphics/pokemon/staravia/anim_front.4bpp.lz"); +const u32 gMonFrontPic_StaraviaF[] = INCBIN_U32("graphics/pokemon/staravia/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Staraptor[] = INCBIN_U32("graphics/pokemon/staraptor/anim_front.4bpp.lz"); +const u32 gMonFrontPic_StaraptorF[] = INCBIN_U32("graphics/pokemon/staraptor/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Bidoof[] = INCBIN_U32("graphics/pokemon/bidoof/anim_front.4bpp.lz"); +const u32 gMonFrontPic_BidoofF[] = INCBIN_U32("graphics/pokemon/bidoof/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Bibarel[] = INCBIN_U32("graphics/pokemon/bibarel/anim_front.4bpp.lz"); const u32 gMonFrontPic_Kricketot[] = INCBIN_U32("graphics/pokemon/kricketot/anim_front.4bpp.lz"); +const u32 gMonFrontPic_KricketotF[] = INCBIN_U32("graphics/pokemon/kricketot/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Kricketune[] = INCBIN_U32("graphics/pokemon/kricketune/anim_front.4bpp.lz"); +const u32 gMonFrontPic_KricketuneF[] = INCBIN_U32("graphics/pokemon/kricketune/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Shinx[] = INCBIN_U32("graphics/pokemon/shinx/anim_front.4bpp.lz"); +const u32 gMonFrontPic_ShinxF[] = INCBIN_U32("graphics/pokemon/shinx/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Luxio[] = INCBIN_U32("graphics/pokemon/luxio/anim_front.4bpp.lz"); const u32 gMonFrontPic_Luxray[] = INCBIN_U32("graphics/pokemon/luxray/anim_front.4bpp.lz"); const u32 gMonFrontPic_Budew[] = INCBIN_U32("graphics/pokemon/budew/anim_front.4bpp.lz"); @@ -791,10 +799,10 @@ const u32 gMonFrontPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/front. const u32 gMonFrontPic_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/front.4bpp.lz"); const u32 gMonFrontPic_Hakamoo[] = INCBIN_U32("graphics/pokemon/hakamo_o/front.4bpp.lz"); const u32 gMonFrontPic_Kommoo[] = INCBIN_U32("graphics/pokemon/kommo_o/front.4bpp.lz"); -const u32 gMonFrontPic_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/front.4bpp.lz"); -const u32 gMonFrontPic_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/front.4bpp.lz"); -const u32 gMonFrontPic_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/front.4bpp.lz"); -const u32 gMonFrontPic_TapuFini[] = INCBIN_U32("graphics/pokemon/tapu_fini/front.4bpp.lz"); +const u32 gMonFrontPic_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/anim_front.4bpp.lz"); +const u32 gMonFrontPic_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/anim_front.4bpp.lz"); +const u32 gMonFrontPic_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/anim_front.4bpp.lz"); +const u32 gMonFrontPic_TapuFini[] = INCBIN_U32("graphics/pokemon/tapu_fini/anim_front.4bpp.lz"); const u32 gMonFrontPic_Cosmog[] = INCBIN_U32("graphics/pokemon/cosmog/front.4bpp.lz"); const u32 gMonFrontPic_Cosmoem[] = INCBIN_U32("graphics/pokemon/cosmoem/front.4bpp.lz"); const u32 gMonFrontPic_Solgaleo[] = INCBIN_U32("graphics/pokemon/solgaleo/front.4bpp.lz"); @@ -808,7 +816,7 @@ const u32 gMonFrontPic_Kartana[] = INCBIN_U32("graphics/pokemon/kartana/front.4b const u32 gMonFrontPic_Guzzlord[] = INCBIN_U32("graphics/pokemon/guzzlord/front.4bpp.lz"); const u32 gMonFrontPic_Necrozma[] = INCBIN_U32("graphics/pokemon/necrozma/front.4bpp.lz"); const u32 gMonFrontPic_Magearna[] = INCBIN_U32("graphics/pokemon/magearna/front.4bpp.lz"); -const u32 gMonFrontPic_Marshadow[] = INCBIN_U32("graphics/pokemon/marshadow/front.4bpp.lz"); +const u32 gMonFrontPic_Marshadow[] = INCBIN_U32("graphics/pokemon/marshadow/anim_front.4bpp.lz"); const u32 gMonFrontPic_Poipole[] = INCBIN_U32("graphics/pokemon/poipole/front.4bpp.lz"); const u32 gMonFrontPic_Naganadel[] = INCBIN_U32("graphics/pokemon/naganadel/front.4bpp.lz"); const u32 gMonFrontPic_Stakataka[] = INCBIN_U32("graphics/pokemon/stakataka/front.4bpp.lz"); @@ -905,74 +913,82 @@ const u32 gMonFrontPic_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/fron const u32 gMonFrontPic_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/front.4bpp.lz"); const u32 gMonFrontPic_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/front.4bpp.lz"); const u32 gMonFrontPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/front.4bpp.lz"); -const u32 gMonFrontPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/mega_venusaur/front.4bpp.lz"); -const u32 gMonFrontPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/mega_charizard_x/front.4bpp.lz"); -const u32 gMonFrontPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/mega_charizard_y/front.4bpp.lz"); -const u32 gMonFrontPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/mega_blastoise/front.4bpp.lz"); -const u32 gMonFrontPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/mega_beedrill/front.4bpp.lz"); -const u32 gMonFrontPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/mega_pidgeot/front.4bpp.lz"); -const u32 gMonFrontPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/mega_alakazam/front.4bpp.lz"); -const u32 gMonFrontPic_SlowbroMega[] = INCBIN_U32("graphics/pokemon/mega_slowbro/front.4bpp.lz"); -const u32 gMonFrontPic_GengarMega[] = INCBIN_U32("graphics/pokemon/mega_gengar/front.4bpp.lz"); -const u32 gMonFrontPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/mega_kangaskhan/front.4bpp.lz"); -const u32 gMonFrontPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/mega_pinsir/front.4bpp.lz"); -const u32 gMonFrontPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/mega_gyarados/front.4bpp.lz"); -const u32 gMonFrontPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/mega_aerodactyl/front.4bpp.lz"); -const u32 gMonFrontPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_x/front.4bpp.lz"); -const u32 gMonFrontPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_y/front.4bpp.lz"); -const u32 gMonFrontPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/mega_ampharos/front.4bpp.lz"); -const u32 gMonFrontPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/mega_steelix/front.4bpp.lz"); -const u32 gMonFrontPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/mega_scizor/front.4bpp.lz"); -const u32 gMonFrontPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/mega_heracross/front.4bpp.lz"); -const u32 gMonFrontPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/mega_houndoom/front.4bpp.lz"); -const u32 gMonFrontPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/mega_tyranitar/front.4bpp.lz"); -const u32 gMonFrontPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/mega_sceptile/front.4bpp.lz"); -const u32 gMonFrontPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/mega_blaziken/front.4bpp.lz"); -const u32 gMonFrontPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/mega_swampert/front.4bpp.lz"); -const u32 gMonFrontPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/mega_gardevoir/front.4bpp.lz"); -const u32 gMonFrontPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/mega_sableye/front.4bpp.lz"); -const u32 gMonFrontPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mega_mawile/front.4bpp.lz"); -const u32 gMonFrontPic_AggronMega[] = INCBIN_U32("graphics/pokemon/mega_aggron/front.4bpp.lz"); -const u32 gMonFrontPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/mega_medicham/front.4bpp.lz"); -const u32 gMonFrontPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/mega_manectric/front.4bpp.lz"); -const u32 gMonFrontPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/mega_sharpedo/front.4bpp.lz"); -const u32 gMonFrontPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/mega_camerupt/front.4bpp.lz"); -const u32 gMonFrontPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/mega_altaria/front.4bpp.lz"); -const u32 gMonFrontPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/mega_banette/front.4bpp.lz"); -const u32 gMonFrontPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/mega_absol/front.4bpp.lz"); -const u32 gMonFrontPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/mega_glalie/front.4bpp.lz"); -const u32 gMonFrontPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/mega_salamence/front.4bpp.lz"); -const u32 gMonFrontPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/mega_metagross/front.4bpp.lz"); -const u32 gMonFrontPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/mega_latias/front.4bpp.lz"); -const u32 gMonFrontPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/mega_latios/front.4bpp.lz"); -const u32 gMonFrontPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/mega_lopunny/front.4bpp.lz"); -const u32 gMonFrontPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/mega_garchomp/front.4bpp.lz"); -const u32 gMonFrontPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/mega_lucario/front.4bpp.lz"); -const u32 gMonFrontPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/mega_abomasnow/front.4bpp.lz"); -const u32 gMonFrontPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/mega_gallade/front.4bpp.lz"); -const u32 gMonFrontPic_AudinoMega[] = INCBIN_U32("graphics/pokemon/mega_audino/front.4bpp.lz"); -const u32 gMonFrontPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/mega_diancie/front.4bpp.lz"); -const u32 gMonFrontPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/mega_rayquaza/front.4bpp.lz"); -const u32 gMonFrontPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/primal_kyogre/front.4bpp.lz"); -const u32 gMonFrontPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/primal_groudon/front.4bpp.lz"); -const u32 gMonFrontPic_RattataAlolan[] = INCBIN_U32("graphics/pokemon/alolan_rattata/front.4bpp.lz"); -const u32 gMonFrontPic_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raticate/front.4bpp.lz"); -const u32 gMonFrontPic_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raichu/front.4bpp.lz"); -const u32 gMonFrontPic_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandshrew/front.4bpp.lz"); -const u32 gMonFrontPic_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandslash/front.4bpp.lz"); -const u32 gMonFrontPic_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/alolan_vulpix/front.4bpp.lz"); -const u32 gMonFrontPic_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/alolan_ninetales/front.4bpp.lz"); -const u32 gMonFrontPic_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/alolan_diglett/front.4bpp.lz"); -const u32 gMonFrontPic_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/alolan_dugtrio/front.4bpp.lz"); -const u32 gMonFrontPic_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/alolan_meowth/front.4bpp.lz"); -const u32 gMonFrontPic_PersianAlolan[] = INCBIN_U32("graphics/pokemon/alolan_persian/front.4bpp.lz"); -const u32 gMonFrontPic_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/alolan_geodude/front.4bpp.lz"); -const u32 gMonFrontPic_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_graveler/front.4bpp.lz"); -const u32 gMonFrontPic_GolemAlolan[] = INCBIN_U32("graphics/pokemon/alolan_golem/front.4bpp.lz"); -const u32 gMonFrontPic_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_grimer/front.4bpp.lz"); -const u32 gMonFrontPic_MukAlolan[] = INCBIN_U32("graphics/pokemon/alolan_muk/front.4bpp.lz"); -const u32 gMonFrontPic_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/alolan_exeggutor/front.4bpp.lz"); -const u32 gMonFrontPic_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/alolan_marowak/front.4bpp.lz"); +//const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4bpp.lz"); +const u32 gMonFrontPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/front.4bpp.lz"); +const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.4bpp.lz"); +//const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); +//const u32 gMonFrontPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/frontf.4bpp.lz"); +//const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); +const u32 gMonFrontPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/front.4bpp.lz"); +//const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); +const u32 gMonFrontPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/front.4bpp.lz"); +const u32 gMonFrontPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/front.4bpp.lz"); +const u32 gMonFrontPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/front.4bpp.lz"); +const u32 gMonFrontPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/front.4bpp.lz"); +const u32 gMonFrontPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/front.4bpp.lz"); +const u32 gMonFrontPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/front.4bpp.lz"); +const u32 gMonFrontPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/front.4bpp.lz"); +const u32 gMonFrontPic_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/front.4bpp.lz"); +const u32 gMonFrontPic_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/front.4bpp.lz"); +const u32 gMonFrontPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/front.4bpp.lz"); +const u32 gMonFrontPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/front.4bpp.lz"); +const u32 gMonFrontPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/front.4bpp.lz"); +const u32 gMonFrontPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/front.4bpp.lz"); +const u32 gMonFrontPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/front.4bpp.lz"); +const u32 gMonFrontPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/front.4bpp.lz"); +const u32 gMonFrontPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/front.4bpp.lz"); +const u32 gMonFrontPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/front.4bpp.lz"); +const u32 gMonFrontPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/front.4bpp.lz"); +const u32 gMonFrontPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/front.4bpp.lz"); +const u32 gMonFrontPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/front.4bpp.lz"); +const u32 gMonFrontPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/front.4bpp.lz"); +const u32 gMonFrontPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/front.4bpp.lz"); +const u32 gMonFrontPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/front.4bpp.lz"); +const u32 gMonFrontPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/front.4bpp.lz"); +const u32 gMonFrontPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/front.4bpp.lz"); +const u32 gMonFrontPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/front.4bpp.lz"); +const u32 gMonFrontPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/front.4bpp.lz"); +const u32 gMonFrontPic_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/front.4bpp.lz"); +const u32 gMonFrontPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/front.4bpp.lz"); +const u32 gMonFrontPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/front.4bpp.lz"); +const u32 gMonFrontPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/front.4bpp.lz"); +const u32 gMonFrontPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/front.4bpp.lz"); +const u32 gMonFrontPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/front.4bpp.lz"); +const u32 gMonFrontPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/front.4bpp.lz"); +const u32 gMonFrontPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/front.4bpp.lz"); +const u32 gMonFrontPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/front.4bpp.lz"); +const u32 gMonFrontPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/front.4bpp.lz"); +const u32 gMonFrontPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/front.4bpp.lz"); +const u32 gMonFrontPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/front.4bpp.lz"); +const u32 gMonFrontPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/front.4bpp.lz"); +const u32 gMonFrontPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/front.4bpp.lz"); +const u32 gMonFrontPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/front.4bpp.lz"); +const u32 gMonFrontPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/front.4bpp.lz"); +const u32 gMonFrontPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/front.4bpp.lz"); +const u32 gMonFrontPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/front.4bpp.lz"); +const u32 gMonFrontPic_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/front.4bpp.lz"); +const u32 gMonFrontPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/front.4bpp.lz"); +const u32 gMonFrontPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/front.4bpp.lz"); +const u32 gMonFrontPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/front.4bpp.lz"); +const u32 gMonFrontPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/front.4bpp.lz"); +const u32 gMonFrontPic_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/front.4bpp.lz"); +const u32 gMonFrontPic_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/front.4bpp.lz"); const u32 gMonFrontPic_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/front.4bpp.lz"); const u32 gMonFrontPic_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/front.4bpp.lz"); const u32 gMonFrontPic_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/front.4bpp.lz"); @@ -992,6 +1008,22 @@ const u32 gMonFrontPic_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumak const u32 gMonFrontPic_DarmanitanGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/front.4bpp.lz"); const u32 gMonFrontPic_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/front.4bpp.lz"); const u32 gMonFrontPic_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/front.4bpp.lz"); +const u32 gMonFrontPic_GrowlitheHisuian[] = INCBIN_U32("graphics/pokemon/growlithe/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_ArcanineHisuian[] = INCBIN_U32("graphics/pokemon/arcanine/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_VoltorbHisuian[] = INCBIN_U32("graphics/pokemon/voltorb/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_ElectrodeHisuian[] = INCBIN_U32("graphics/pokemon/electrode/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlosion/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/front.4bpp.lz"); +//const u32 gMonFrontPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_BraviaryHisuian[] = INCBIN_U32("graphics/pokemon/braviary/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_SliggooHisuian[] = INCBIN_U32("graphics/pokemon/sliggoo/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/front.4bpp.lz"); +//const u32 gMonFrontPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/front.4bpp.lz"); const u32 gMonFrontPic_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/front.4bpp.lz"); const u32 gMonFrontPic_PikachuBelle[] = INCBIN_U32("graphics/pokemon/pikachu/belle/front.4bpp.lz"); @@ -1007,6 +1039,7 @@ const u32 gMonFrontPic_PikachuAlolaCap[] = INCBIN_U32("graphics/pokemon/pikachu/ const u32 gMonFrontPic_PikachuPartnerCap[] = INCBIN_U32("graphics/pokemon/pikachu/partner_cap/front.4bpp.lz"); const u32 gMonFrontPic_PikachuWorldCap[] = INCBIN_U32("graphics/pokemon/pikachu/world_cap/front.4bpp.lz"); const u32 gMonFrontPic_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/front.4bpp.lz"); +#endif const u32 gMonFrontPic_UnownB[] = INCBIN_U32("graphics/pokemon/unown/b/anim_front.4bpp.lz"); const u32 gMonFrontPic_UnownC[] = INCBIN_U32("graphics/pokemon/unown/c/anim_front.4bpp.lz"); const u32 gMonFrontPic_UnownD[] = INCBIN_U32("graphics/pokemon/unown/d/anim_front.4bpp.lz"); @@ -1040,6 +1073,7 @@ const u32 gMonFrontPic_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/s const u32 gMonFrontPic_DeoxysAttack[] = INCBIN_U32("graphics/pokemon/deoxys/attack/anim_front.4bpp.lz"); const u32 gMonFrontPic_DeoxysDefense[] = INCBIN_U32("graphics/pokemon/deoxys/defense/anim_front.4bpp.lz"); const u32 gMonFrontPic_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/anim_front.4bpp.lz"); +#if P_NEW_POKEMON == TRUE const u32 gMonFrontPic_BurmySandyCloak[] = INCBIN_U32("graphics/pokemon/burmy/sandy_cloak/anim_front.4bpp.lz"); const u32 gMonFrontPic_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/anim_front.4bpp.lz"); const u32 gMonFrontPic_WormadamSandyCloak[] = INCBIN_U32("graphics/pokemon/wormadam/sandy_cloak/anim_front.4bpp.lz"); @@ -1052,9 +1086,12 @@ const u32 gMonFrontPic_RotomWash[] = INCBIN_U32("graphics/pokemon/rotom/wash/ani const u32 gMonFrontPic_RotomFrost[] = INCBIN_U32("graphics/pokemon/rotom/frost/anim_front.4bpp.lz"); const u32 gMonFrontPic_RotomFan[] = INCBIN_U32("graphics/pokemon/rotom/fan/anim_front.4bpp.lz"); const u32 gMonFrontPic_RotomMow[] = INCBIN_U32("graphics/pokemon/rotom/mow/anim_front.4bpp.lz"); +const u32 gMonFrontPic_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/front.4bpp.lz"); +const u32 gMonFrontPic_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/front.4bpp.lz"); const u32 gMonFrontPic_GiratinaOrigin[] = INCBIN_U32("graphics/pokemon/giratina/origin/anim_front.4bpp.lz"); const u32 gMonFrontPic_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/anim_front.4bpp.lz"); const u32 gMonFrontPic_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/front.4bpp.lz"); +const u32 gMonFrontPic_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/front.4bpp.lz"); const u32 gMonFrontPic_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/anim_front.4bpp.lz"); const u32 gMonFrontPic_DarmanitanZenModeGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/front.4bpp.lz"); const u32 gMonFrontPic_SawsbuckSummer[] = INCBIN_U32("graphics/pokemon/sawsbuck/summer/front.4bpp.lz"); @@ -1063,6 +1100,7 @@ const u32 gMonFrontPic_SawsbuckWinter[] = INCBIN_U32("graphics/pokemon/sawsbuck/ const u32 gMonFrontPic_TornadusTherian[] = INCBIN_U32("graphics/pokemon/tornadus/therian/anim_front.4bpp.lz"); const u32 gMonFrontPic_ThundurusTherian[] = INCBIN_U32("graphics/pokemon/thundurus/therian/anim_front.4bpp.lz"); const u32 gMonFrontPic_LandorusTherian[] = INCBIN_U32("graphics/pokemon/landorus/therian/anim_front.4bpp.lz"); +//const u32 gMonFrontPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/front.4bpp.lz"); const u32 gMonFrontPic_KyuremWhite[] = INCBIN_U32("graphics/pokemon/kyurem/white/anim_front.4bpp.lz"); const u32 gMonFrontPic_KyuremBlack[] = INCBIN_U32("graphics/pokemon/kyurem/black/anim_front.4bpp.lz"); const u32 gMonFrontPic_KeldeoResolute[] = INCBIN_U32("graphics/pokemon/keldeo/resolute/front.4bpp.lz"); @@ -1142,6 +1180,7 @@ const u32 gMonFrontPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/ const u32 gMonFrontPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/front.4bpp.lz"); const u32 gMonFrontPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/front.4bpp.lz"); const u32 gMonFrontPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/front.4bpp.lz"); +#endif const u32 gMonFrontPic_Egg[] = INCBIN_U32("graphics/pokemon/egg/anim_front.4bpp.lz"); const u32 gMonBackPic_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/back.4bpp.lz"); @@ -1533,6 +1572,7 @@ const u32 gMonBackPic_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/back.4bpp const u32 gMonBackPic_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/back.4bpp.lz"); const u32 gMonBackPic_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/back.4bpp.lz"); const u32 gMonBackPic_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/back.4bpp.lz"); +#if P_NEW_POKEMON == TRUE const u32 gMonBackPic_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/back.4bpp.lz"); const u32 gMonBackPic_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/back.4bpp.lz"); const u32 gMonBackPic_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/back.4bpp.lz"); @@ -1543,13 +1583,19 @@ const u32 gMonBackPic_Piplup[] = INCBIN_U32("graphics/pokemon/piplup/back.4bpp.l const u32 gMonBackPic_Prinplup[] = INCBIN_U32("graphics/pokemon/prinplup/back.4bpp.lz"); const u32 gMonBackPic_Empoleon[] = INCBIN_U32("graphics/pokemon/empoleon/back.4bpp.lz"); const u32 gMonBackPic_Starly[] = INCBIN_U32("graphics/pokemon/starly/back.4bpp.lz"); +const u32 gMonBackPic_StarlyF[] = INCBIN_U32("graphics/pokemon/starly/backf.4bpp.lz"); const u32 gMonBackPic_Staravia[] = INCBIN_U32("graphics/pokemon/staravia/back.4bpp.lz"); +const u32 gMonBackPic_StaraviaF[] = INCBIN_U32("graphics/pokemon/staravia/back.4bpp.lz"); const u32 gMonBackPic_Staraptor[] = INCBIN_U32("graphics/pokemon/staraptor/back.4bpp.lz"); const u32 gMonBackPic_Bidoof[] = INCBIN_U32("graphics/pokemon/bidoof/back.4bpp.lz"); +const u32 gMonBackPic_BidoofF[] = INCBIN_U32("graphics/pokemon/bidoof/backf.4bpp.lz"); const u32 gMonBackPic_Bibarel[] = INCBIN_U32("graphics/pokemon/bibarel/back.4bpp.lz"); const u32 gMonBackPic_Kricketot[] = INCBIN_U32("graphics/pokemon/kricketot/back.4bpp.lz"); +const u32 gMonBackPic_KricketotF[] = INCBIN_U32("graphics/pokemon/kricketot/backf.4bpp.lz"); const u32 gMonBackPic_Kricketune[] = INCBIN_U32("graphics/pokemon/kricketune/back.4bpp.lz"); +const u32 gMonBackPic_KricketuneF[] = INCBIN_U32("graphics/pokemon/kricketune/backf.4bpp.lz"); const u32 gMonBackPic_Shinx[] = INCBIN_U32("graphics/pokemon/shinx/back.4bpp.lz"); +const u32 gMonBackPic_ShinxF[] = INCBIN_U32("graphics/pokemon/shinx/backf.4bpp.lz"); const u32 gMonBackPic_Luxio[] = INCBIN_U32("graphics/pokemon/luxio/back.4bpp.lz"); const u32 gMonBackPic_Luxray[] = INCBIN_U32("graphics/pokemon/luxray/back.4bpp.lz"); const u32 gMonBackPic_Budew[] = INCBIN_U32("graphics/pokemon/budew/back.4bpp.lz"); @@ -2051,74 +2097,82 @@ const u32 gMonBackPic_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/back. const u32 gMonBackPic_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/back.4bpp.lz"); const u32 gMonBackPic_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/back.4bpp.lz"); const u32 gMonBackPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/back.4bpp.lz"); -const u32 gMonBackPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/mega_venusaur/back.4bpp.lz"); -const u32 gMonBackPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/mega_charizard_x/back.4bpp.lz"); -const u32 gMonBackPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/mega_charizard_y/back.4bpp.lz"); -const u32 gMonBackPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/mega_blastoise/back.4bpp.lz"); -const u32 gMonBackPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/mega_beedrill/back.4bpp.lz"); -const u32 gMonBackPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/mega_pidgeot/back.4bpp.lz"); -const u32 gMonBackPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/mega_alakazam/back.4bpp.lz"); -const u32 gMonBackPic_SlowbroMega[] = INCBIN_U32("graphics/pokemon/mega_slowbro/back.4bpp.lz"); -const u32 gMonBackPic_GengarMega[] = INCBIN_U32("graphics/pokemon/mega_gengar/back.4bpp.lz"); -const u32 gMonBackPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/mega_kangaskhan/back.4bpp.lz"); -const u32 gMonBackPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/mega_pinsir/back.4bpp.lz"); -const u32 gMonBackPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/mega_gyarados/back.4bpp.lz"); -const u32 gMonBackPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/mega_aerodactyl/back.4bpp.lz"); -const u32 gMonBackPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_x/back.4bpp.lz"); -const u32 gMonBackPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_y/back.4bpp.lz"); -const u32 gMonBackPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/mega_ampharos/back.4bpp.lz"); -const u32 gMonBackPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/mega_steelix/back.4bpp.lz"); -const u32 gMonBackPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/mega_scizor/back.4bpp.lz"); -const u32 gMonBackPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/mega_heracross/back.4bpp.lz"); -const u32 gMonBackPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/mega_houndoom/back.4bpp.lz"); -const u32 gMonBackPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/mega_tyranitar/back.4bpp.lz"); -const u32 gMonBackPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/mega_sceptile/back.4bpp.lz"); -const u32 gMonBackPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/mega_blaziken/back.4bpp.lz"); -const u32 gMonBackPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/mega_swampert/back.4bpp.lz"); -const u32 gMonBackPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/mega_gardevoir/back.4bpp.lz"); -const u32 gMonBackPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/mega_sableye/back.4bpp.lz"); -const u32 gMonBackPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mega_mawile/back.4bpp.lz"); -const u32 gMonBackPic_AggronMega[] = INCBIN_U32("graphics/pokemon/mega_aggron/back.4bpp.lz"); -const u32 gMonBackPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/mega_medicham/back.4bpp.lz"); -const u32 gMonBackPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/mega_manectric/back.4bpp.lz"); -const u32 gMonBackPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/mega_sharpedo/back.4bpp.lz"); -const u32 gMonBackPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/mega_camerupt/back.4bpp.lz"); -const u32 gMonBackPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/mega_altaria/back.4bpp.lz"); -const u32 gMonBackPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/mega_banette/back.4bpp.lz"); -const u32 gMonBackPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/mega_absol/back.4bpp.lz"); -const u32 gMonBackPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/mega_glalie/back.4bpp.lz"); -const u32 gMonBackPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/mega_salamence/back.4bpp.lz"); -const u32 gMonBackPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/mega_metagross/back.4bpp.lz"); -const u32 gMonBackPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/mega_latias/back.4bpp.lz"); -const u32 gMonBackPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/mega_latios/back.4bpp.lz"); -const u32 gMonBackPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/mega_lopunny/back.4bpp.lz"); -const u32 gMonBackPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/mega_garchomp/back.4bpp.lz"); -const u32 gMonBackPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/mega_lucario/back.4bpp.lz"); -const u32 gMonBackPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/mega_abomasnow/back.4bpp.lz"); -const u32 gMonBackPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/mega_gallade/back.4bpp.lz"); -const u32 gMonBackPic_AudinoMega[] = INCBIN_U32("graphics/pokemon/mega_audino/back.4bpp.lz"); -const u32 gMonBackPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/mega_diancie/back.4bpp.lz"); -const u32 gMonBackPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/mega_rayquaza/back.4bpp.lz"); -const u32 gMonBackPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/primal_kyogre/back.4bpp.lz"); -const u32 gMonBackPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/primal_groudon/back.4bpp.lz"); -const u32 gMonBackPic_RattataAlolan[] = INCBIN_U32("graphics/pokemon/alolan_rattata/back.4bpp.lz"); -const u32 gMonBackPic_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raticate/back.4bpp.lz"); -const u32 gMonBackPic_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raichu/back.4bpp.lz"); -const u32 gMonBackPic_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandshrew/back.4bpp.lz"); -const u32 gMonBackPic_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandslash/back.4bpp.lz"); -const u32 gMonBackPic_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/alolan_vulpix/back.4bpp.lz"); -const u32 gMonBackPic_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/alolan_ninetales/back.4bpp.lz"); -const u32 gMonBackPic_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/alolan_diglett/back.4bpp.lz"); -const u32 gMonBackPic_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/alolan_dugtrio/back.4bpp.lz"); -const u32 gMonBackPic_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/alolan_meowth/back.4bpp.lz"); -const u32 gMonBackPic_PersianAlolan[] = INCBIN_U32("graphics/pokemon/alolan_persian/back.4bpp.lz"); -const u32 gMonBackPic_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/alolan_geodude/back.4bpp.lz"); -const u32 gMonBackPic_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_graveler/back.4bpp.lz"); -const u32 gMonBackPic_GolemAlolan[] = INCBIN_U32("graphics/pokemon/alolan_golem/back.4bpp.lz"); -const u32 gMonBackPic_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_grimer/back.4bpp.lz"); -const u32 gMonBackPic_MukAlolan[] = INCBIN_U32("graphics/pokemon/alolan_muk/back.4bpp.lz"); -const u32 gMonBackPic_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/alolan_exeggutor/back.4bpp.lz"); -const u32 gMonBackPic_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/alolan_marowak/back.4bpp.lz"); +//const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp.lz"); +const u32 gMonBackPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/back.4bpp.lz"); +const u32 gMonBackPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/back.4bpp.lz"); +//const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); +//const u32 gMonBackPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/backf.4bpp.lz"); +//const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); +const u32 gMonBackPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/back.4bpp.lz"); +//const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); +const u32 gMonBackPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/back.4bpp.lz"); +const u32 gMonBackPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/back.4bpp.lz"); +const u32 gMonBackPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/back.4bpp.lz"); +const u32 gMonBackPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/back.4bpp.lz"); +const u32 gMonBackPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/back.4bpp.lz"); +const u32 gMonBackPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/back.4bpp.lz"); +const u32 gMonBackPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/back.4bpp.lz"); +const u32 gMonBackPic_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/back.4bpp.lz"); +const u32 gMonBackPic_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/back.4bpp.lz"); +const u32 gMonBackPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/back.4bpp.lz"); +const u32 gMonBackPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/back.4bpp.lz"); +const u32 gMonBackPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/back.4bpp.lz"); +const u32 gMonBackPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/back.4bpp.lz"); +const u32 gMonBackPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/back.4bpp.lz"); +const u32 gMonBackPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/back.4bpp.lz"); +const u32 gMonBackPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/back.4bpp.lz"); +const u32 gMonBackPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/back.4bpp.lz"); +const u32 gMonBackPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/back.4bpp.lz"); +const u32 gMonBackPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/back.4bpp.lz"); +const u32 gMonBackPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/back.4bpp.lz"); +const u32 gMonBackPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/back.4bpp.lz"); +const u32 gMonBackPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/back.4bpp.lz"); +const u32 gMonBackPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/back.4bpp.lz"); +const u32 gMonBackPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/back.4bpp.lz"); +const u32 gMonBackPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/back.4bpp.lz"); +const u32 gMonBackPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/back.4bpp.lz"); +const u32 gMonBackPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/back.4bpp.lz"); +const u32 gMonBackPic_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/back.4bpp.lz"); +const u32 gMonBackPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/back.4bpp.lz"); +const u32 gMonBackPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/back.4bpp.lz"); +const u32 gMonBackPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/back.4bpp.lz"); +const u32 gMonBackPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/back.4bpp.lz"); +const u32 gMonBackPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/back.4bpp.lz"); +const u32 gMonBackPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/back.4bpp.lz"); +const u32 gMonBackPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/back.4bpp.lz"); +const u32 gMonBackPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/back.4bpp.lz"); +const u32 gMonBackPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/back.4bpp.lz"); +const u32 gMonBackPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/back.4bpp.lz"); +const u32 gMonBackPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/back.4bpp.lz"); +const u32 gMonBackPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/back.4bpp.lz"); +const u32 gMonBackPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/back.4bpp.lz"); +const u32 gMonBackPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/back.4bpp.lz"); +const u32 gMonBackPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/back.4bpp.lz"); +const u32 gMonBackPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/back.4bpp.lz"); +const u32 gMonBackPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/back.4bpp.lz"); +const u32 gMonBackPic_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/back.4bpp.lz"); +const u32 gMonBackPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/back.4bpp.lz"); +const u32 gMonBackPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/back.4bpp.lz"); +const u32 gMonBackPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/back.4bpp.lz"); +const u32 gMonBackPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/back.4bpp.lz"); +const u32 gMonBackPic_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/back.4bpp.lz"); +const u32 gMonBackPic_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/back.4bpp.lz"); +const u32 gMonBackPic_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/back.4bpp.lz"); +const u32 gMonBackPic_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/back.4bpp.lz"); +const u32 gMonBackPic_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/back.4bpp.lz"); +const u32 gMonBackPic_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/back.4bpp.lz"); +const u32 gMonBackPic_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/back.4bpp.lz"); +const u32 gMonBackPic_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/back.4bpp.lz"); +const u32 gMonBackPic_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/back.4bpp.lz"); +const u32 gMonBackPic_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/back.4bpp.lz"); +const u32 gMonBackPic_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/back.4bpp.lz"); +const u32 gMonBackPic_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/back.4bpp.lz"); +const u32 gMonBackPic_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/back.4bpp.lz"); +const u32 gMonBackPic_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/back.4bpp.lz"); +const u32 gMonBackPic_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/back.4bpp.lz"); +const u32 gMonBackPic_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/back.4bpp.lz"); +const u32 gMonBackPic_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/back.4bpp.lz"); +const u32 gMonBackPic_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/back.4bpp.lz"); const u32 gMonBackPic_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/back.4bpp.lz"); const u32 gMonBackPic_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/back.4bpp.lz"); const u32 gMonBackPic_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/back.4bpp.lz"); @@ -2138,6 +2192,22 @@ const u32 gMonBackPic_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka const u32 gMonBackPic_DarmanitanGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/back.4bpp.lz"); const u32 gMonBackPic_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/back.4bpp.lz"); const u32 gMonBackPic_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/back.4bpp.lz"); +const u32 gMonBackPic_GrowlitheHisuian[] = INCBIN_U32("graphics/pokemon/growlithe/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_ArcanineHisuian[] = INCBIN_U32("graphics/pokemon/arcanine/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_VoltorbHisuian[] = INCBIN_U32("graphics/pokemon/voltorb/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_ElectrodeHisuian[] = INCBIN_U32("graphics/pokemon/electrode/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlosion/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/back.4bpp.lz"); +//const u32 gMonBackPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_BraviaryHisuian[] = INCBIN_U32("graphics/pokemon/braviary/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_SliggooHisuian[] = INCBIN_U32("graphics/pokemon/sliggoo/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/back.4bpp.lz"); +//const u32 gMonBackPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/back.4bpp.lz"); const u32 gMonBackPic_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/back.4bpp.lz"); const u32 gMonBackPic_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/back.4bpp.lz"); const u32 gMonBackPic_PikachuBelle[] = INCBIN_U32("graphics/pokemon/pikachu/belle/back.4bpp.lz"); @@ -2153,6 +2223,7 @@ const u32 gMonBackPic_PikachuAlolaCap[] = INCBIN_U32("graphics/pokemon/pikachu/a const u32 gMonBackPic_PikachuPartnerCap[] = INCBIN_U32("graphics/pokemon/pikachu/partner_cap/back.4bpp.lz"); const u32 gMonBackPic_PikachuWorldCap[] = INCBIN_U32("graphics/pokemon/pikachu/world_cap/back.4bpp.lz"); const u32 gMonBackPic_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/back.4bpp.lz"); +#endif const u32 gMonBackPic_UnownB[] = INCBIN_U32("graphics/pokemon/unown/b/back.4bpp.lz"); const u32 gMonBackPic_UnownC[] = INCBIN_U32("graphics/pokemon/unown/c/back.4bpp.lz"); const u32 gMonBackPic_UnownD[] = INCBIN_U32("graphics/pokemon/unown/d/back.4bpp.lz"); @@ -2186,6 +2257,7 @@ const u32 gMonBackPic_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/sn const u32 gMonBackPic_DeoxysAttack[] = INCBIN_U32("graphics/pokemon/deoxys/attack/back.4bpp.lz"); const u32 gMonBackPic_DeoxysDefense[] = INCBIN_U32("graphics/pokemon/deoxys/defense/back.4bpp.lz"); const u32 gMonBackPic_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/back.4bpp.lz"); +#if P_NEW_POKEMON == TRUE const u32 gMonBackPic_BurmySandyCloak[] = INCBIN_U32("graphics/pokemon/burmy/sandy_cloak/back.4bpp.lz"); const u32 gMonBackPic_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/back.4bpp.lz"); const u32 gMonBackPic_WormadamSandyCloak[] = INCBIN_U32("graphics/pokemon/wormadam/sandy_cloak/back.4bpp.lz"); @@ -2198,9 +2270,12 @@ const u32 gMonBackPic_RotomWash[] = INCBIN_U32("graphics/pokemon/rotom/wash/back const u32 gMonBackPic_RotomFrost[] = INCBIN_U32("graphics/pokemon/rotom/frost/back.4bpp.lz"); const u32 gMonBackPic_RotomFan[] = INCBIN_U32("graphics/pokemon/rotom/fan/back.4bpp.lz"); const u32 gMonBackPic_RotomMow[] = INCBIN_U32("graphics/pokemon/rotom/mow/back.4bpp.lz"); +const u32 gMonBackPic_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/back.4bpp.lz"); +const u32 gMonBackPic_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/back.4bpp.lz"); const u32 gMonBackPic_GiratinaOrigin[] = INCBIN_U32("graphics/pokemon/giratina/origin/back.4bpp.lz"); const u32 gMonBackPic_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/back.4bpp.lz"); const u32 gMonBackPic_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/back.4bpp.lz"); +const u32 gMonBackPic_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/back.4bpp.lz"); const u32 gMonBackPic_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/back.4bpp.lz"); const u32 gMonBackPic_DarmanitanZenModeGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/back.4bpp.lz"); const u32 gMonBackPic_SawsbuckSummer[] = INCBIN_U32("graphics/pokemon/sawsbuck/summer/back.4bpp.lz"); @@ -2209,6 +2284,7 @@ const u32 gMonBackPic_SawsbuckWinter[] = INCBIN_U32("graphics/pokemon/sawsbuck/w const u32 gMonBackPic_TornadusTherian[] = INCBIN_U32("graphics/pokemon/tornadus/therian/back.4bpp.lz"); const u32 gMonBackPic_ThundurusTherian[] = INCBIN_U32("graphics/pokemon/thundurus/therian/back.4bpp.lz"); const u32 gMonBackPic_LandorusTherian[] = INCBIN_U32("graphics/pokemon/landorus/therian/back.4bpp.lz"); +//const u32 gMonBackPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/back.4bpp.lz"); const u32 gMonBackPic_KyuremWhite[] = INCBIN_U32("graphics/pokemon/kyurem/white/back.4bpp.lz"); const u32 gMonBackPic_KyuremBlack[] = INCBIN_U32("graphics/pokemon/kyurem/black/back.4bpp.lz"); const u32 gMonBackPic_KeldeoResolute[] = INCBIN_U32("graphics/pokemon/keldeo/resolute/back.4bpp.lz"); @@ -2288,6 +2364,7 @@ const u32 gMonBackPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/u const u32 gMonBackPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/back.4bpp.lz"); const u32 gMonBackPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/back.4bpp.lz"); const u32 gMonBackPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/back.4bpp.lz"); +#endif const u32 gMonPalette_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/normal.gbapal.lz"); const u32 gMonPalette_DoubleQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/double/normal.gbapal.lz"); @@ -2677,6 +2754,7 @@ const u32 gMonPalette_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/normal.gb const u32 gMonPalette_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/normal.gbapal.lz"); const u32 gMonPalette_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/normal.gbapal.lz"); const u32 gMonPalette_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/normal.gbapal.lz"); +#if P_NEW_POKEMON == TRUE const u32 gMonPalette_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/normal.gbapal.lz"); const u32 gMonPalette_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/normal.gbapal.lz"); const u32 gMonPalette_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/normal.gbapal.lz"); @@ -3195,74 +3273,82 @@ const u32 gMonPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/norma const u32 gMonPalette_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/normal.gbapal.lz"); const u32 gMonPalette_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/normal.gbapal.lz"); const u32 gMonPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/normal.gbapal.lz"); -const u32 gMonPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/mega_venusaur/normal.gbapal.lz"); -const u32 gMonPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/mega_charizard_x/normal.gbapal.lz"); -const u32 gMonPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/mega_charizard_y/normal.gbapal.lz"); -const u32 gMonPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/mega_blastoise/normal.gbapal.lz"); -const u32 gMonPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/mega_beedrill/normal.gbapal.lz"); -const u32 gMonPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/mega_pidgeot/normal.gbapal.lz"); -const u32 gMonPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/mega_alakazam/normal.gbapal.lz"); -const u32 gMonPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/mega_slowbro/normal.gbapal.lz"); -const u32 gMonPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/mega_gengar/normal.gbapal.lz"); -const u32 gMonPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/mega_kangaskhan/normal.gbapal.lz"); -const u32 gMonPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/mega_pinsir/normal.gbapal.lz"); -const u32 gMonPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/mega_gyarados/normal.gbapal.lz"); -const u32 gMonPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/mega_aerodactyl/normal.gbapal.lz"); -const u32 gMonPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_x/normal.gbapal.lz"); -const u32 gMonPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_y/normal.gbapal.lz"); -const u32 gMonPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/mega_ampharos/normal.gbapal.lz"); -const u32 gMonPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/mega_steelix/normal.gbapal.lz"); -const u32 gMonPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/mega_scizor/normal.gbapal.lz"); -const u32 gMonPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/mega_heracross/normal.gbapal.lz"); -const u32 gMonPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/mega_houndoom/normal.gbapal.lz"); -const u32 gMonPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/mega_tyranitar/normal.gbapal.lz"); -const u32 gMonPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/mega_sceptile/normal.gbapal.lz"); -const u32 gMonPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/mega_blaziken/normal.gbapal.lz"); -const u32 gMonPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/mega_swampert/normal.gbapal.lz"); -const u32 gMonPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/mega_gardevoir/normal.gbapal.lz"); -const u32 gMonPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/mega_sableye/normal.gbapal.lz"); -const u32 gMonPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mega_mawile/normal.gbapal.lz"); -const u32 gMonPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/mega_aggron/normal.gbapal.lz"); -const u32 gMonPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/mega_medicham/normal.gbapal.lz"); -const u32 gMonPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/mega_manectric/normal.gbapal.lz"); -const u32 gMonPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/mega_sharpedo/normal.gbapal.lz"); -const u32 gMonPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/mega_camerupt/normal.gbapal.lz"); -const u32 gMonPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/mega_altaria/normal.gbapal.lz"); -const u32 gMonPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/mega_banette/normal.gbapal.lz"); -const u32 gMonPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/mega_absol/normal.gbapal.lz"); -const u32 gMonPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/mega_glalie/normal.gbapal.lz"); -const u32 gMonPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/mega_salamence/normal.gbapal.lz"); -const u32 gMonPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/mega_metagross/normal.gbapal.lz"); -const u32 gMonPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/mega_latias/normal.gbapal.lz"); -const u32 gMonPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/mega_latios/normal.gbapal.lz"); -const u32 gMonPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/mega_lopunny/normal.gbapal.lz"); -const u32 gMonPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/mega_garchomp/normal.gbapal.lz"); -const u32 gMonPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/mega_lucario/normal.gbapal.lz"); -const u32 gMonPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/mega_abomasnow/normal.gbapal.lz"); -const u32 gMonPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/mega_gallade/normal.gbapal.lz"); -const u32 gMonPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/mega_audino/normal.gbapal.lz"); -const u32 gMonPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/mega_diancie/normal.gbapal.lz"); -const u32 gMonPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/mega_rayquaza/normal.gbapal.lz"); -const u32 gMonPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/primal_kyogre/normal.gbapal.lz"); -const u32 gMonPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/primal_groudon/normal.gbapal.lz"); -const u32 gMonPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/alolan_rattata/normal.gbapal.lz"); -const u32 gMonPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raticate/normal.gbapal.lz"); -const u32 gMonPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raichu/normal.gbapal.lz"); -const u32 gMonPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandshrew/normal.gbapal.lz"); -const u32 gMonPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandslash/normal.gbapal.lz"); -const u32 gMonPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/alolan_vulpix/normal.gbapal.lz"); -const u32 gMonPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/alolan_ninetales/normal.gbapal.lz"); -const u32 gMonPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/alolan_diglett/normal.gbapal.lz"); -const u32 gMonPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/alolan_dugtrio/normal.gbapal.lz"); -const u32 gMonPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/alolan_meowth/normal.gbapal.lz"); -const u32 gMonPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/alolan_persian/normal.gbapal.lz"); -const u32 gMonPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/alolan_geodude/normal.gbapal.lz"); -const u32 gMonPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_graveler/normal.gbapal.lz"); -const u32 gMonPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/alolan_golem/normal.gbapal.lz"); -const u32 gMonPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_grimer/normal.gbapal.lz"); -const u32 gMonPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/alolan_muk/normal.gbapal.lz"); -const u32 gMonPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/alolan_exeggutor/normal.gbapal.lz"); -const u32 gMonPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/alolan_marowak/normal.gbapal.lz"); +//const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gbapal.lz"); +const u32 gMonPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/normal.gbapal.lz"); +const u32 gMonPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/normal.gbapal.lz"); +//const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); +//const u32 gMonPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/normalf.gbapal.lz"); +//const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); +const u32 gMonPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/normal.gbapal.lz"); +//const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); +const u32 gMonPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/normal.gbapal.lz"); +const u32 gMonPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/normal.gbapal.lz"); +const u32 gMonPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/normal.gbapal.lz"); +const u32 gMonPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/normal.gbapal.lz"); +const u32 gMonPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/normal.gbapal.lz"); +const u32 gMonPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/normal.gbapal.lz"); +const u32 gMonPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/normal.gbapal.lz"); +const u32 gMonPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/normal.gbapal.lz"); +const u32 gMonPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/normal.gbapal.lz"); +const u32 gMonPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/normal.gbapal.lz"); +const u32 gMonPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/normal.gbapal.lz"); +const u32 gMonPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/normal.gbapal.lz"); +const u32 gMonPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/normal.gbapal.lz"); +const u32 gMonPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/normal.gbapal.lz"); +const u32 gMonPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/normal.gbapal.lz"); +const u32 gMonPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/normal.gbapal.lz"); +const u32 gMonPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/normal.gbapal.lz"); +const u32 gMonPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/normal.gbapal.lz"); +const u32 gMonPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/normal.gbapal.lz"); +const u32 gMonPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/normal.gbapal.lz"); +const u32 gMonPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/normal.gbapal.lz"); +const u32 gMonPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/normal.gbapal.lz"); +const u32 gMonPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/normal.gbapal.lz"); +const u32 gMonPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/normal.gbapal.lz"); +const u32 gMonPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/normal.gbapal.lz"); +const u32 gMonPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/normal.gbapal.lz"); +const u32 gMonPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/normal.gbapal.lz"); +const u32 gMonPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/normal.gbapal.lz"); +const u32 gMonPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/normal.gbapal.lz"); +const u32 gMonPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/normal.gbapal.lz"); +const u32 gMonPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/normal.gbapal.lz"); +const u32 gMonPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/normal.gbapal.lz"); +const u32 gMonPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/normal.gbapal.lz"); +const u32 gMonPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/normal.gbapal.lz"); +const u32 gMonPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/normal.gbapal.lz"); +const u32 gMonPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/normal.gbapal.lz"); +const u32 gMonPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/normal.gbapal.lz"); +const u32 gMonPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/normal.gbapal.lz"); +const u32 gMonPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/normal.gbapal.lz"); +const u32 gMonPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/normal.gbapal.lz"); +const u32 gMonPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/normal.gbapal.lz"); +const u32 gMonPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/normal.gbapal.lz"); +const u32 gMonPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/normal.gbapal.lz"); +const u32 gMonPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/normal.gbapal.lz"); +const u32 gMonPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/normal.gbapal.lz"); +const u32 gMonPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/normal.gbapal.lz"); +const u32 gMonPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/normal.gbapal.lz"); +const u32 gMonPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/normal.gbapal.lz"); +const u32 gMonPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/normal.gbapal.lz"); +const u32 gMonPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/normal.gbapal.lz"); +const u32 gMonPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/normal.gbapal.lz"); +const u32 gMonPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/normal.gbapal.lz"); +const u32 gMonPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/normal.gbapal.lz"); +const u32 gMonPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/normal.gbapal.lz"); +const u32 gMonPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/normal.gbapal.lz"); +const u32 gMonPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/normal.gbapal.lz"); +const u32 gMonPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/normal.gbapal.lz"); +const u32 gMonPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/normal.gbapal.lz"); +const u32 gMonPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/normal.gbapal.lz"); +const u32 gMonPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/normal.gbapal.lz"); +const u32 gMonPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/normal.gbapal.lz"); +const u32 gMonPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/normal.gbapal.lz"); +const u32 gMonPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/normal.gbapal.lz"); +const u32 gMonPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/normal.gbapal.lz"); +const u32 gMonPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/normal.gbapal.lz"); +const u32 gMonPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/normal.gbapal.lz"); +const u32 gMonPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/normal.gbapal.lz"); +const u32 gMonPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/normal.gbapal.lz"); const u32 gMonPalette_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/normal.gbapal.lz"); const u32 gMonPalette_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/normal.gbapal.lz"); const u32 gMonPalette_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/normal.gbapal.lz"); @@ -3282,6 +3368,22 @@ const u32 gMonPalette_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka const u32 gMonPalette_DarmanitanGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/normal.gbapal.lz"); const u32 gMonPalette_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/normal.gbapal.lz"); const u32 gMonPalette_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/normal.gbapal.lz"); +const u32 gMonPalette_GrowlitheHisuian[] = INCBIN_U32("graphics/pokemon/growlithe/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_ArcanineHisuian[] = INCBIN_U32("graphics/pokemon/arcanine/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_VoltorbHisuian[] = INCBIN_U32("graphics/pokemon/voltorb/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_ElectrodeHisuian[] = INCBIN_U32("graphics/pokemon/electrode/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlosion/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/normal.gbapal.lz"); +//const u32 gMonPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_BraviaryHisuian[] = INCBIN_U32("graphics/pokemon/braviary/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_SliggooHisuian[] = INCBIN_U32("graphics/pokemon/sliggoo/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/normal.gbapal.lz"); +//const u32 gMonPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/normal.gbapal.lz"); const u32 gMonPalette_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/normal.gbapal.lz"); const u32 gMonPalette_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/normal.gbapal.lz"); const u32 gMonPalette_PikachuBelle[] = INCBIN_U32("graphics/pokemon/pikachu/belle/normal.gbapal.lz"); @@ -3297,12 +3399,14 @@ const u32 gMonPalette_PikachuAlolaCap[] = INCBIN_U32("graphics/pokemon/pikachu/a const u32 gMonPalette_PikachuPartnerCap[] = INCBIN_U32("graphics/pokemon/pikachu/partner_cap/normal.gbapal.lz"); const u32 gMonPalette_PikachuWorldCap[] = INCBIN_U32("graphics/pokemon/pikachu/world_cap/normal.gbapal.lz"); const u32 gMonPalette_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/normal.gbapal.lz"); +#endif const u32 gMonPalette_CastformSunny[] = INCBIN_U32("graphics/pokemon/castform/sunny/normal.gbapal.lz"); const u32 gMonPalette_CastformRainy[] = INCBIN_U32("graphics/pokemon/castform/rainy/normal.gbapal.lz"); const u32 gMonPalette_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/snowy/normal.gbapal.lz"); const u32 gMonPalette_DeoxysAttack[] = INCBIN_U32("graphics/pokemon/deoxys/attack/normal.gbapal.lz"); const u32 gMonPalette_DeoxysDefense[] = INCBIN_U32("graphics/pokemon/deoxys/defense/normal.gbapal.lz"); const u32 gMonPalette_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/normal.gbapal.lz"); +#if P_NEW_POKEMON == TRUE const u32 gMonPalette_BurmySandyCloak[] = INCBIN_U32("graphics/pokemon/burmy/sandy_cloak/normal.gbapal.lz"); const u32 gMonPalette_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/normal.gbapal.lz"); const u32 gMonPalette_WormadamSandyCloak[] = INCBIN_U32("graphics/pokemon/wormadam/sandy_cloak/normal.gbapal.lz"); @@ -3315,6 +3419,8 @@ const u32 gMonPalette_RotomWash[] = INCBIN_U32("graphics/pokemon/rotom/wash/norm const u32 gMonPalette_RotomFrost[] = INCBIN_U32("graphics/pokemon/rotom/frost/normal.gbapal.lz"); const u32 gMonPalette_RotomFan[] = INCBIN_U32("graphics/pokemon/rotom/fan/normal.gbapal.lz"); const u32 gMonPalette_RotomMow[] = INCBIN_U32("graphics/pokemon/rotom/mow/normal.gbapal.lz"); +const u32 gMonPalette_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/normal.gbapal.lz"); +const u32 gMonPalette_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/normal.gbapal.lz"); const u32 gMonPalette_GiratinaOrigin[] = INCBIN_U32("graphics/pokemon/giratina/origin/normal.gbapal.lz"); const u32 gMonPalette_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/normal.gbapal.lz"); const u32 gMonPalette_ArceusFighting[] = INCBIN_U32("graphics/pokemon/arceus/fighting/normal.gbapal.lz"); @@ -3335,6 +3441,7 @@ const u32 gMonPalette_ArceusDragon[] = INCBIN_U32("graphics/pokemon/arceus/drago const u32 gMonPalette_ArceusDark[] = INCBIN_U32("graphics/pokemon/arceus/dark/normal.gbapal.lz"); const u32 gMonPalette_ArceusFairy[] = INCBIN_U32("graphics/pokemon/arceus/fairy/normal.gbapal.lz"); const u32 gMonPalette_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/normal.gbapal.lz"); +const u32 gMonPalette_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/normal.gbapal.lz"); const u32 gMonPalette_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/normal.gbapal.lz"); const u32 gMonPalette_DarmanitanZenModeGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/normal.gbapal.lz"); const u32 gMonPalette_DeerlingSummer[] = INCBIN_U32("graphics/pokemon/deerling/summer/normal.gbapal.lz"); @@ -3346,6 +3453,7 @@ const u32 gMonPalette_SawsbuckWinter[] = INCBIN_U32("graphics/pokemon/sawsbuck/w const u32 gMonPalette_TornadusTherian[] = INCBIN_U32("graphics/pokemon/tornadus/therian/normal.gbapal.lz"); const u32 gMonPalette_ThundurusTherian[] = INCBIN_U32("graphics/pokemon/thundurus/therian/normal.gbapal.lz"); const u32 gMonPalette_LandorusTherian[] = INCBIN_U32("graphics/pokemon/landorus/therian/normal.gbapal.lz"); +//const u32 gMonPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/normal.gbapal.lz"); const u32 gMonPalette_KyuremWhite[] = INCBIN_U32("graphics/pokemon/kyurem/white/normal.gbapal.lz"); const u32 gMonPalette_KyuremBlack[] = INCBIN_U32("graphics/pokemon/kyurem/black/normal.gbapal.lz"); const u32 gMonPalette_KeldeoResolute[] = INCBIN_U32("graphics/pokemon/keldeo/resolute/normal.gbapal.lz"); @@ -3458,6 +3566,7 @@ const u32 gMonPalette_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/u const u32 gMonPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/normal.gbapal.lz"); const u32 gMonPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/normal.gbapal.lz"); const u32 gMonPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/normal.gbapal.lz"); +#endif const u32 gMonPalette_Egg[] = INCBIN_U32("graphics/pokemon/egg/normal.gbapal.lz"); const u32 gMonShinyPalette_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/shiny.gbapal.lz"); @@ -3848,6 +3957,7 @@ const u32 gMonShinyPalette_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/shin const u32 gMonShinyPalette_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/shiny.gbapal.lz"); const u32 gMonShinyPalette_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/shiny.gbapal.lz"); const u32 gMonShinyPalette_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/shiny.gbapal.lz"); +#if P_NEW_POKEMON == TRUE const u32 gMonShinyPalette_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/shiny.gbapal.lz"); const u32 gMonShinyPalette_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/shiny.gbapal.lz"); const u32 gMonShinyPalette_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/shiny.gbapal.lz"); @@ -4366,74 +4476,82 @@ const u32 gMonShinyPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/ const u32 gMonShinyPalette_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/shiny.gbapal.lz"); const u32 gMonShinyPalette_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/shiny.gbapal.lz"); const u32 gMonShinyPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/shiny.gbapal.lz"); -const u32 gMonShinyPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/mega_venusaur/shiny.gbapal.lz"); -const u32 gMonShinyPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/mega_charizard_x/shiny.gbapal.lz"); -const u32 gMonShinyPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/mega_charizard_y/shiny.gbapal.lz"); -const u32 gMonShinyPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/mega_blastoise/shiny.gbapal.lz"); -const u32 gMonShinyPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/mega_beedrill/shiny.gbapal.lz"); -const u32 gMonShinyPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/mega_pidgeot/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/mega_alakazam/shiny.gbapal.lz"); -const u32 gMonShinyPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/mega_slowbro/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/mega_gengar/shiny.gbapal.lz"); -const u32 gMonShinyPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/mega_kangaskhan/shiny.gbapal.lz"); -const u32 gMonShinyPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/mega_pinsir/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/mega_gyarados/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/mega_aerodactyl/shiny.gbapal.lz"); -const u32 gMonShinyPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_x/shiny.gbapal.lz"); -const u32 gMonShinyPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_y/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/mega_ampharos/shiny.gbapal.lz"); -const u32 gMonShinyPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/mega_steelix/shiny.gbapal.lz"); -const u32 gMonShinyPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/mega_scizor/shiny.gbapal.lz"); -const u32 gMonShinyPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/mega_heracross/shiny.gbapal.lz"); -const u32 gMonShinyPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/mega_houndoom/shiny.gbapal.lz"); -const u32 gMonShinyPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/mega_tyranitar/shiny.gbapal.lz"); -const u32 gMonShinyPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/mega_sceptile/shiny.gbapal.lz"); -const u32 gMonShinyPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/mega_blaziken/shiny.gbapal.lz"); -const u32 gMonShinyPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/mega_swampert/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/mega_gardevoir/shiny.gbapal.lz"); -const u32 gMonShinyPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/mega_sableye/shiny.gbapal.lz"); -const u32 gMonShinyPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mega_mawile/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/mega_aggron/shiny.gbapal.lz"); -const u32 gMonShinyPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/mega_medicham/shiny.gbapal.lz"); -const u32 gMonShinyPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/mega_manectric/shiny.gbapal.lz"); -const u32 gMonShinyPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/mega_sharpedo/shiny.gbapal.lz"); -const u32 gMonShinyPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/mega_camerupt/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/mega_altaria/shiny.gbapal.lz"); -const u32 gMonShinyPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/mega_banette/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/mega_absol/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/mega_glalie/shiny.gbapal.lz"); -const u32 gMonShinyPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/mega_salamence/shiny.gbapal.lz"); -const u32 gMonShinyPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/mega_metagross/shiny.gbapal.lz"); -const u32 gMonShinyPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/mega_latias/shiny.gbapal.lz"); -const u32 gMonShinyPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/mega_latios/shiny.gbapal.lz"); -const u32 gMonShinyPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/mega_lopunny/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/mega_garchomp/shiny.gbapal.lz"); -const u32 gMonShinyPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/mega_lucario/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/mega_abomasnow/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/mega_gallade/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/mega_audino/shiny.gbapal.lz"); -const u32 gMonShinyPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/mega_diancie/shiny.gbapal.lz"); -const u32 gMonShinyPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/mega_rayquaza/shiny.gbapal.lz"); -const u32 gMonShinyPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/primal_kyogre/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/primal_groudon/shiny.gbapal.lz"); -const u32 gMonShinyPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/alolan_rattata/shiny.gbapal.lz"); -const u32 gMonShinyPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raticate/shiny.gbapal.lz"); -const u32 gMonShinyPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raichu/shiny.gbapal.lz"); -const u32 gMonShinyPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandshrew/shiny.gbapal.lz"); -const u32 gMonShinyPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandslash/shiny.gbapal.lz"); -const u32 gMonShinyPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/alolan_vulpix/shiny.gbapal.lz"); -const u32 gMonShinyPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/alolan_ninetales/shiny.gbapal.lz"); -const u32 gMonShinyPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/alolan_diglett/shiny.gbapal.lz"); -const u32 gMonShinyPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/alolan_dugtrio/shiny.gbapal.lz"); -const u32 gMonShinyPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/alolan_meowth/shiny.gbapal.lz"); -const u32 gMonShinyPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/alolan_persian/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/alolan_geodude/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_graveler/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/alolan_golem/shiny.gbapal.lz"); -const u32 gMonShinyPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_grimer/shiny.gbapal.lz"); -const u32 gMonShinyPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/alolan_muk/shiny.gbapal.lz"); -const u32 gMonShinyPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/alolan_exeggutor/shiny.gbapal.lz"); -const u32 gMonShinyPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/alolan_marowak/shiny.gbapal.lz"); +//const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/shiny.gbapal.lz"); +//const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); +//const u32 gMonShinyPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/shinyf.gbapal.lz"); +//const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/shiny.gbapal.lz"); +//const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); +const u32 gMonShinyPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/shiny.gbapal.lz"); +const u32 gMonShinyPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/shiny.gbapal.lz"); +const u32 gMonShinyPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/shiny.gbapal.lz"); const u32 gMonShinyPalette_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/shiny.gbapal.lz"); const u32 gMonShinyPalette_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/shiny.gbapal.lz"); const u32 gMonShinyPalette_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/shiny.gbapal.lz"); @@ -4453,6 +4571,22 @@ const u32 gMonShinyPalette_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/dar const u32 gMonShinyPalette_DarmanitanGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/shiny.gbapal.lz"); const u32 gMonShinyPalette_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/shiny.gbapal.lz"); const u32 gMonShinyPalette_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GrowlitheHisuian[] = INCBIN_U32("graphics/pokemon/growlithe/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ArcanineHisuian[] = INCBIN_U32("graphics/pokemon/arcanine/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_VoltorbHisuian[] = INCBIN_U32("graphics/pokemon/voltorb/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ElectrodeHisuian[] = INCBIN_U32("graphics/pokemon/electrode/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlosion/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/shiny.gbapal.lz"); +//const u32 gMonShinyPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BraviaryHisuian[] = INCBIN_U32("graphics/pokemon/braviary/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SliggooHisuian[] = INCBIN_U32("graphics/pokemon/sliggoo/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/shiny.gbapal.lz"); +//const u32 gMonShinyPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/shiny.gbapal.lz"); const u32 gMonShinyPalette_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/shiny.gbapal.lz"); const u32 gMonShinyPalette_PikachuBelle[] = INCBIN_U32("graphics/pokemon/pikachu/belle/shiny.gbapal.lz"); @@ -4468,12 +4602,14 @@ const u32 gMonShinyPalette_PikachuAlolaCap[] = INCBIN_U32("graphics/pokemon/pika const u32 gMonShinyPalette_PikachuPartnerCap[] = INCBIN_U32("graphics/pokemon/pikachu/partner_cap/shiny.gbapal.lz"); const u32 gMonShinyPalette_PikachuWorldCap[] = INCBIN_U32("graphics/pokemon/pikachu/world_cap/shiny.gbapal.lz"); const u32 gMonShinyPalette_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/shiny.gbapal.lz"); +#endif const u32 gMonShinyPalette_CastformSunny[] = INCBIN_U32("graphics/pokemon/castform/sunny/shiny.gbapal.lz"); const u32 gMonShinyPalette_CastformRainy[] = INCBIN_U32("graphics/pokemon/castform/rainy/shiny.gbapal.lz"); const u32 gMonShinyPalette_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/snowy/shiny.gbapal.lz"); const u32 gMonShinyPalette_DeoxysAttack[] = INCBIN_U32("graphics/pokemon/deoxys/attack/shiny.gbapal.lz"); const u32 gMonShinyPalette_DeoxysDefense[] = INCBIN_U32("graphics/pokemon/deoxys/defense/shiny.gbapal.lz"); const u32 gMonShinyPalette_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/shiny.gbapal.lz"); +#if P_NEW_POKEMON == TRUE const u32 gMonShinyPalette_BurmySandyCloak[] = INCBIN_U32("graphics/pokemon/burmy/sandy_cloak/shiny.gbapal.lz"); const u32 gMonShinyPalette_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/shiny.gbapal.lz"); const u32 gMonShinyPalette_WormadamSandyCloak[] = INCBIN_U32("graphics/pokemon/wormadam/sandy_cloak/shiny.gbapal.lz"); @@ -4486,6 +4622,8 @@ const u32 gMonShinyPalette_RotomWash[] = INCBIN_U32("graphics/pokemon/rotom/wash const u32 gMonShinyPalette_RotomFrost[] = INCBIN_U32("graphics/pokemon/rotom/frost/shiny.gbapal.lz"); const u32 gMonShinyPalette_RotomFan[] = INCBIN_U32("graphics/pokemon/rotom/fan/shiny.gbapal.lz"); const u32 gMonShinyPalette_RotomMow[] = INCBIN_U32("graphics/pokemon/rotom/mow/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/shiny.gbapal.lz"); +const u32 gMonShinyPalette_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/shiny.gbapal.lz"); const u32 gMonShinyPalette_GiratinaOrigin[] = INCBIN_U32("graphics/pokemon/giratina/origin/shiny.gbapal.lz"); const u32 gMonShinyPalette_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/shiny.gbapal.lz"); const u32 gMonShinyPalette_ArceusFighting[] = INCBIN_U32("graphics/pokemon/arceus/fighting/shiny.gbapal.lz"); @@ -4506,6 +4644,7 @@ const u32 gMonShinyPalette_ArceusDragon[] = INCBIN_U32("graphics/pokemon/arceus/ const u32 gMonShinyPalette_ArceusDark[] = INCBIN_U32("graphics/pokemon/arceus/dark/shiny.gbapal.lz"); const u32 gMonShinyPalette_ArceusFairy[] = INCBIN_U32("graphics/pokemon/arceus/fairy/shiny.gbapal.lz"); const u32 gMonShinyPalette_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/shiny.gbapal.lz"); const u32 gMonShinyPalette_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/shiny.gbapal.lz"); const u32 gMonShinyPalette_DarmanitanZenModeGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/shiny.gbapal.lz"); const u32 gMonShinyPalette_DeerlingSummer[] = INCBIN_U32("graphics/pokemon/deerling/summer/shiny.gbapal.lz"); @@ -4517,6 +4656,7 @@ const u32 gMonShinyPalette_SawsbuckWinter[] = INCBIN_U32("graphics/pokemon/sawsb const u32 gMonShinyPalette_TornadusTherian[] = INCBIN_U32("graphics/pokemon/tornadus/therian/shiny.gbapal.lz"); const u32 gMonShinyPalette_ThundurusTherian[] = INCBIN_U32("graphics/pokemon/thundurus/therian/shiny.gbapal.lz"); const u32 gMonShinyPalette_LandorusTherian[] = INCBIN_U32("graphics/pokemon/landorus/therian/shiny.gbapal.lz"); +//const u32 gMonShinyPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/shiny.gbapal.lz"); const u32 gMonShinyPalette_KyuremWhite[] = INCBIN_U32("graphics/pokemon/kyurem/white/shiny.gbapal.lz"); const u32 gMonShinyPalette_KyuremBlack[] = INCBIN_U32("graphics/pokemon/kyurem/black/shiny.gbapal.lz"); const u32 gMonShinyPalette_KeldeoResolute[] = INCBIN_U32("graphics/pokemon/keldeo/resolute/shiny.gbapal.lz"); @@ -4623,6 +4763,7 @@ const u32 gMonShinyPalette_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/poke const u32 gMonShinyPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/shiny.gbapal.lz"); const u32 gMonShinyPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/shiny.gbapal.lz"); const u32 gMonShinyPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/shiny.gbapal.lz"); +#endif const u8 gMonIcon_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mark/icon.4bpp"); const u8 gMonIcon_Bulbasaur[] = INCBIN_U8("graphics/pokemon/bulbasaur/icon.4bpp"); @@ -5011,6 +5152,7 @@ const u8 gMonIcon_Groudon[] = INCBIN_U8("graphics/pokemon/groudon/icon.4bpp"); const u8 gMonIcon_Rayquaza[] = INCBIN_U8("graphics/pokemon/rayquaza/icon.4bpp"); const u8 gMonIcon_Jirachi[] = INCBIN_U8("graphics/pokemon/jirachi/icon.4bpp"); const u8 gMonIcon_Deoxys[] = INCBIN_U8("graphics/pokemon/deoxys/icon.4bpp"); +#if P_NEW_POKEMON == TRUE const u8 gMonIcon_Turtwig[] = INCBIN_U8("graphics/pokemon/turtwig/icon.4bpp"); const u8 gMonIcon_Grotle[] = INCBIN_U8("graphics/pokemon/grotle/icon.4bpp"); const u8 gMonIcon_Torterra[] = INCBIN_U8("graphics/pokemon/torterra/icon.4bpp"); @@ -5526,75 +5668,83 @@ const u8 gMonIcon_Regieleki[] = INCBIN_U8("graphics/pokemon/regieleki/icon.4bpp" const u8 gMonIcon_Regidrago[] = INCBIN_U8("graphics/pokemon/regidrago/icon.4bpp"); const u8 gMonIcon_Glastrier[] = INCBIN_U8("graphics/pokemon/glastrier/icon.4bpp"); const u8 gMonIcon_Spectrier[] = INCBIN_U8("graphics/pokemon/spectrier/icon.4bpp"); -//const u8 gMonIcon_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/icon.4bpp"); -const u8 gMonIcon_VenusaurMega[] = INCBIN_U8("graphics/pokemon/mega_venusaur/icon.4bpp"); -const u8 gMonIcon_CharizardMegaX[] = INCBIN_U8("graphics/pokemon/mega_charizard_x/icon.4bpp"); -const u8 gMonIcon_CharizardMegaY[] = INCBIN_U8("graphics/pokemon/mega_charizard_y/icon.4bpp"); -const u8 gMonIcon_BlastoiseMega[] = INCBIN_U8("graphics/pokemon/mega_blastoise/icon.4bpp"); -const u8 gMonIcon_BeedrillMega[] = INCBIN_U8("graphics/pokemon/mega_beedrill/icon.4bpp"); -const u8 gMonIcon_PidgeotMega[] = INCBIN_U8("graphics/pokemon/mega_pidgeot/icon.4bpp"); -const u8 gMonIcon_AlakazamMega[] = INCBIN_U8("graphics/pokemon/mega_alakazam/icon.4bpp"); -const u8 gMonIcon_SlowbroMega[] = INCBIN_U8("graphics/pokemon/mega_slowbro/icon.4bpp"); -const u8 gMonIcon_GengarMega[] = INCBIN_U8("graphics/pokemon/mega_gengar/icon.4bpp"); -const u8 gMonIcon_KangaskhanMega[] = INCBIN_U8("graphics/pokemon/mega_kangaskhan/icon.4bpp"); -const u8 gMonIcon_PinsirMega[] = INCBIN_U8("graphics/pokemon/mega_pinsir/icon.4bpp"); -const u8 gMonIcon_GyaradosMega[] = INCBIN_U8("graphics/pokemon/mega_gyarados/icon.4bpp"); -const u8 gMonIcon_AerodactylMega[] = INCBIN_U8("graphics/pokemon/mega_aerodactyl/icon.4bpp"); -const u8 gMonIcon_MewtwoMegaX[] = INCBIN_U8("graphics/pokemon/mega_mewtwo_x/icon.4bpp"); -const u8 gMonIcon_MewtwoMegaY[] = INCBIN_U8("graphics/pokemon/mega_mewtwo_y/icon.4bpp"); -const u8 gMonIcon_AmpharosMega[] = INCBIN_U8("graphics/pokemon/mega_ampharos/icon.4bpp"); -const u8 gMonIcon_SteelixMega[] = INCBIN_U8("graphics/pokemon/mega_steelix/icon.4bpp"); -const u8 gMonIcon_ScizorMega[] = INCBIN_U8("graphics/pokemon/mega_scizor/icon.4bpp"); -const u8 gMonIcon_HeracrossMega[] = INCBIN_U8("graphics/pokemon/mega_heracross/icon.4bpp"); -const u8 gMonIcon_HoundoomMega[] = INCBIN_U8("graphics/pokemon/mega_houndoom/icon.4bpp"); -const u8 gMonIcon_TyranitarMega[] = INCBIN_U8("graphics/pokemon/mega_tyranitar/icon.4bpp"); -const u8 gMonIcon_SceptileMega[] = INCBIN_U8("graphics/pokemon/mega_sceptile/icon.4bpp"); -const u8 gMonIcon_BlazikenMega[] = INCBIN_U8("graphics/pokemon/mega_blaziken/icon.4bpp"); -const u8 gMonIcon_SwampertMega[] = INCBIN_U8("graphics/pokemon/mega_swampert/icon.4bpp"); -const u8 gMonIcon_GardevoirMega[] = INCBIN_U8("graphics/pokemon/mega_gardevoir/icon.4bpp"); -const u8 gMonIcon_SableyeMega[] = INCBIN_U8("graphics/pokemon/mega_sableye/icon.4bpp"); -const u8 gMonIcon_MawileMega[] = INCBIN_U8("graphics/pokemon/mega_mawile/icon.4bpp"); -const u8 gMonIcon_AggronMega[] = INCBIN_U8("graphics/pokemon/mega_aggron/icon.4bpp"); -const u8 gMonIcon_MedichamMega[] = INCBIN_U8("graphics/pokemon/mega_medicham/icon.4bpp"); -const u8 gMonIcon_ManectricMega[] = INCBIN_U8("graphics/pokemon/mega_manectric/icon.4bpp"); -const u8 gMonIcon_SharpedoMega[] = INCBIN_U8("graphics/pokemon/mega_sharpedo/icon.4bpp"); -const u8 gMonIcon_CameruptMega[] = INCBIN_U8("graphics/pokemon/mega_camerupt/icon.4bpp"); -const u8 gMonIcon_AltariaMega[] = INCBIN_U8("graphics/pokemon/mega_altaria/icon.4bpp"); -const u8 gMonIcon_BanetteMega[] = INCBIN_U8("graphics/pokemon/mega_banette/icon.4bpp"); -const u8 gMonIcon_AbsolMega[] = INCBIN_U8("graphics/pokemon/mega_absol/icon.4bpp"); -const u8 gMonIcon_GlalieMega[] = INCBIN_U8("graphics/pokemon/mega_glalie/icon.4bpp"); -const u8 gMonIcon_SalamenceMega[] = INCBIN_U8("graphics/pokemon/mega_salamence/icon.4bpp"); -const u8 gMonIcon_MetagrossMega[] = INCBIN_U8("graphics/pokemon/mega_metagross/icon.4bpp"); -const u8 gMonIcon_LatiasMega[] = INCBIN_U8("graphics/pokemon/mega_latias/icon.4bpp"); -const u8 gMonIcon_LatiosMega[] = INCBIN_U8("graphics/pokemon/mega_latios/icon.4bpp"); -const u8 gMonIcon_LopunnyMega[] = INCBIN_U8("graphics/pokemon/mega_lopunny/icon.4bpp"); -const u8 gMonIcon_GarchompMega[] = INCBIN_U8("graphics/pokemon/mega_garchomp/icon.4bpp"); -const u8 gMonIcon_LucarioMega[] = INCBIN_U8("graphics/pokemon/mega_lucario/icon.4bpp"); -const u8 gMonIcon_AbomasnowMega[] = INCBIN_U8("graphics/pokemon/mega_abomasnow/icon.4bpp"); -const u8 gMonIcon_GalladeMega[] = INCBIN_U8("graphics/pokemon/mega_gallade/icon.4bpp"); -const u8 gMonIcon_AudinoMega[] = INCBIN_U8("graphics/pokemon/mega_audino/icon.4bpp"); -const u8 gMonIcon_DiancieMega[] = INCBIN_U8("graphics/pokemon/mega_diancie/icon.4bpp"); -const u8 gMonIcon_RayquazaMega[] = INCBIN_U8("graphics/pokemon/mega_rayquaza/icon.4bpp"); -const u8 gMonIcon_KyogrePrimal[] = INCBIN_U8("graphics/pokemon/primal_kyogre/icon.4bpp"); -const u8 gMonIcon_GroudonPrimal[] = INCBIN_U8("graphics/pokemon/primal_groudon/icon.4bpp"); -const u8 gMonIcon_RattataAlolan[] = INCBIN_U8("graphics/pokemon/alolan_rattata/icon.4bpp"); -const u8 gMonIcon_RaticateAlolan[] = INCBIN_U8("graphics/pokemon/alolan_raticate/icon.4bpp"); -const u8 gMonIcon_RaichuAlolan[] = INCBIN_U8("graphics/pokemon/alolan_raichu/icon.4bpp"); -const u8 gMonIcon_SandshrewAlolan[] = INCBIN_U8("graphics/pokemon/alolan_sandshrew/icon.4bpp"); -const u8 gMonIcon_SandslashAlolan[] = INCBIN_U8("graphics/pokemon/alolan_sandslash/icon.4bpp"); -const u8 gMonIcon_VulpixAlolan[] = INCBIN_U8("graphics/pokemon/alolan_vulpix/icon.4bpp"); -const u8 gMonIcon_NinetalesAlolan[] = INCBIN_U8("graphics/pokemon/alolan_ninetales/icon.4bpp"); -const u8 gMonIcon_DiglettAlolan[] = INCBIN_U8("graphics/pokemon/alolan_diglett/icon.4bpp"); -const u8 gMonIcon_DugtrioAlolan[] = INCBIN_U8("graphics/pokemon/alolan_dugtrio/icon.4bpp"); -const u8 gMonIcon_MeowthAlolan[] = INCBIN_U8("graphics/pokemon/alolan_meowth/icon.4bpp"); -const u8 gMonIcon_PersianAlolan[] = INCBIN_U8("graphics/pokemon/alolan_persian/icon.4bpp"); -const u8 gMonIcon_GeodudeAlolan[] = INCBIN_U8("graphics/pokemon/alolan_geodude/icon.4bpp"); -const u8 gMonIcon_GravelerAlolan[] = INCBIN_U8("graphics/pokemon/alolan_graveler/icon.4bpp"); -const u8 gMonIcon_GolemAlolan[] = INCBIN_U8("graphics/pokemon/alolan_golem/icon.4bpp"); -const u8 gMonIcon_GrimerAlolan[] = INCBIN_U8("graphics/pokemon/alolan_grimer/icon.4bpp"); -const u8 gMonIcon_MukAlolan[] = INCBIN_U8("graphics/pokemon/alolan_muk/icon.4bpp"); -const u8 gMonIcon_ExeggutorAlolan[] = INCBIN_U8("graphics/pokemon/alolan_exeggutor/icon.4bpp"); -const u8 gMonIcon_MarowakAlolan[] = INCBIN_U8("graphics/pokemon/alolan_marowak/icon.4bpp"); +const u8 gMonIcon_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/icon.4bpp"); +const u8 gMonIcon_Wyrdeer[] = INCBIN_U8("graphics/pokemon/wyrdeer/icon.4bpp"); +const u8 gMonIcon_Kleavor[] = INCBIN_U8("graphics/pokemon/kleavor/icon.4bpp"); +const u8 gMonIcon_Ursaluna[] = INCBIN_U8("graphics/pokemon/ursaluna/icon.4bpp"); +const u8 gMonIcon_Basculegion[] = INCBIN_U8("graphics/pokemon/basculegion/icon.4bpp"); +const u8 gMonIcon_BasculegionF[] = INCBIN_U8("graphics/pokemon/basculegion/iconf.4bpp"); +const u8 gMonIcon_Sneasler[] = INCBIN_U8("graphics/pokemon/sneasler/icon.4bpp"); +const u8 gMonIcon_Overqwil[] = INCBIN_U8("graphics/pokemon/overqwil/icon.4bpp"); +const u8 gMonIcon_Enamorus[] = INCBIN_U8("graphics/pokemon/enamorus/icon.4bpp"); +const u8 gMonIcon_VenusaurMega[] = INCBIN_U8("graphics/pokemon/venusaur/mega/icon.4bpp"); +const u8 gMonIcon_CharizardMegaX[] = INCBIN_U8("graphics/pokemon/charizard/mega_x/icon.4bpp"); +const u8 gMonIcon_CharizardMegaY[] = INCBIN_U8("graphics/pokemon/charizard/mega_y/icon.4bpp"); +const u8 gMonIcon_BlastoiseMega[] = INCBIN_U8("graphics/pokemon/blastoise/mega/icon.4bpp"); +const u8 gMonIcon_BeedrillMega[] = INCBIN_U8("graphics/pokemon/beedrill/mega/icon.4bpp"); +const u8 gMonIcon_PidgeotMega[] = INCBIN_U8("graphics/pokemon/pidgeot/mega/icon.4bpp"); +const u8 gMonIcon_AlakazamMega[] = INCBIN_U8("graphics/pokemon/alakazam/mega/icon.4bpp"); +const u8 gMonIcon_SlowbroMega[] = INCBIN_U8("graphics/pokemon/slowbro/mega/icon.4bpp"); +const u8 gMonIcon_GengarMega[] = INCBIN_U8("graphics/pokemon/gengar/mega/icon.4bpp"); +const u8 gMonIcon_KangaskhanMega[] = INCBIN_U8("graphics/pokemon/kangaskhan/mega/icon.4bpp"); +const u8 gMonIcon_PinsirMega[] = INCBIN_U8("graphics/pokemon/pinsir/mega/icon.4bpp"); +const u8 gMonIcon_GyaradosMega[] = INCBIN_U8("graphics/pokemon/gyarados/mega/icon.4bpp"); +const u8 gMonIcon_AerodactylMega[] = INCBIN_U8("graphics/pokemon/aerodactyl/mega/icon.4bpp"); +const u8 gMonIcon_MewtwoMegaX[] = INCBIN_U8("graphics/pokemon/mewtwo/mega_x/icon.4bpp"); +const u8 gMonIcon_MewtwoMegaY[] = INCBIN_U8("graphics/pokemon/mewtwo/mega_y/icon.4bpp"); +const u8 gMonIcon_AmpharosMega[] = INCBIN_U8("graphics/pokemon/ampharos/mega/icon.4bpp"); +const u8 gMonIcon_SteelixMega[] = INCBIN_U8("graphics/pokemon/steelix/mega/icon.4bpp"); +const u8 gMonIcon_ScizorMega[] = INCBIN_U8("graphics/pokemon/scizor/mega/icon.4bpp"); +const u8 gMonIcon_HeracrossMega[] = INCBIN_U8("graphics/pokemon/heracross/mega/icon.4bpp"); +const u8 gMonIcon_HoundoomMega[] = INCBIN_U8("graphics/pokemon/houndoom/mega/icon.4bpp"); +const u8 gMonIcon_TyranitarMega[] = INCBIN_U8("graphics/pokemon/tyranitar/mega/icon.4bpp"); +const u8 gMonIcon_SceptileMega[] = INCBIN_U8("graphics/pokemon/sceptile/mega/icon.4bpp"); +const u8 gMonIcon_BlazikenMega[] = INCBIN_U8("graphics/pokemon/blaziken/mega/icon.4bpp"); +const u8 gMonIcon_SwampertMega[] = INCBIN_U8("graphics/pokemon/swampert/mega/icon.4bpp"); +const u8 gMonIcon_GardevoirMega[] = INCBIN_U8("graphics/pokemon/gardevoir/mega/icon.4bpp"); +const u8 gMonIcon_SableyeMega[] = INCBIN_U8("graphics/pokemon/sableye/mega/icon.4bpp"); +const u8 gMonIcon_MawileMega[] = INCBIN_U8("graphics/pokemon/mawile/mega/icon.4bpp"); +const u8 gMonIcon_AggronMega[] = INCBIN_U8("graphics/pokemon/aggron/mega/icon.4bpp"); +const u8 gMonIcon_MedichamMega[] = INCBIN_U8("graphics/pokemon/medicham/mega/icon.4bpp"); +const u8 gMonIcon_ManectricMega[] = INCBIN_U8("graphics/pokemon/manectric/mega/icon.4bpp"); +const u8 gMonIcon_SharpedoMega[] = INCBIN_U8("graphics/pokemon/sharpedo/mega/icon.4bpp"); +const u8 gMonIcon_CameruptMega[] = INCBIN_U8("graphics/pokemon/camerupt/mega/icon.4bpp"); +const u8 gMonIcon_AltariaMega[] = INCBIN_U8("graphics/pokemon/altaria/mega/icon.4bpp"); +const u8 gMonIcon_BanetteMega[] = INCBIN_U8("graphics/pokemon/banette/mega/icon.4bpp"); +const u8 gMonIcon_AbsolMega[] = INCBIN_U8("graphics/pokemon/absol/mega/icon.4bpp"); +const u8 gMonIcon_GlalieMega[] = INCBIN_U8("graphics/pokemon/glalie/mega/icon.4bpp"); +const u8 gMonIcon_SalamenceMega[] = INCBIN_U8("graphics/pokemon/salamence/mega/icon.4bpp"); +const u8 gMonIcon_MetagrossMega[] = INCBIN_U8("graphics/pokemon/metagross/mega/icon.4bpp"); +const u8 gMonIcon_LatiasMega[] = INCBIN_U8("graphics/pokemon/latias/mega/icon.4bpp"); +const u8 gMonIcon_LatiosMega[] = INCBIN_U8("graphics/pokemon/latios/mega/icon.4bpp"); +const u8 gMonIcon_LopunnyMega[] = INCBIN_U8("graphics/pokemon/lopunny/mega/icon.4bpp"); +const u8 gMonIcon_GarchompMega[] = INCBIN_U8("graphics/pokemon/garchomp/mega/icon.4bpp"); +const u8 gMonIcon_LucarioMega[] = INCBIN_U8("graphics/pokemon/lucario/mega/icon.4bpp"); +const u8 gMonIcon_AbomasnowMega[] = INCBIN_U8("graphics/pokemon/abomasnow/mega/icon.4bpp"); +const u8 gMonIcon_GalladeMega[] = INCBIN_U8("graphics/pokemon/gallade/mega/icon.4bpp"); +const u8 gMonIcon_AudinoMega[] = INCBIN_U8("graphics/pokemon/audino/mega/icon.4bpp"); +const u8 gMonIcon_DiancieMega[] = INCBIN_U8("graphics/pokemon/diancie/mega/icon.4bpp"); +const u8 gMonIcon_RayquazaMega[] = INCBIN_U8("graphics/pokemon/rayquaza/mega/icon.4bpp"); +const u8 gMonIcon_KyogrePrimal[] = INCBIN_U8("graphics/pokemon/kyogre/primal/icon.4bpp"); +const u8 gMonIcon_GroudonPrimal[] = INCBIN_U8("graphics/pokemon/groudon/primal/icon.4bpp"); +const u8 gMonIcon_RattataAlolan[] = INCBIN_U8("graphics/pokemon/rattata/alolan/icon.4bpp"); +const u8 gMonIcon_RaticateAlolan[] = INCBIN_U8("graphics/pokemon/raticate/alolan/icon.4bpp"); +const u8 gMonIcon_RaichuAlolan[] = INCBIN_U8("graphics/pokemon/raichu/alolan/icon.4bpp"); +const u8 gMonIcon_SandshrewAlolan[] = INCBIN_U8("graphics/pokemon/sandshrew/alolan/icon.4bpp"); +const u8 gMonIcon_SandslashAlolan[] = INCBIN_U8("graphics/pokemon/sandslash/alolan/icon.4bpp"); +const u8 gMonIcon_VulpixAlolan[] = INCBIN_U8("graphics/pokemon/vulpix/alolan/icon.4bpp"); +const u8 gMonIcon_NinetalesAlolan[] = INCBIN_U8("graphics/pokemon/ninetales/alolan/icon.4bpp"); +const u8 gMonIcon_DiglettAlolan[] = INCBIN_U8("graphics/pokemon/diglett/alolan/icon.4bpp"); +const u8 gMonIcon_DugtrioAlolan[] = INCBIN_U8("graphics/pokemon/dugtrio/alolan/icon.4bpp"); +const u8 gMonIcon_MeowthAlolan[] = INCBIN_U8("graphics/pokemon/meowth/alolan/icon.4bpp"); +const u8 gMonIcon_PersianAlolan[] = INCBIN_U8("graphics/pokemon/persian/alolan/icon.4bpp"); +const u8 gMonIcon_GeodudeAlolan[] = INCBIN_U8("graphics/pokemon/geodude/alolan/icon.4bpp"); +const u8 gMonIcon_GravelerAlolan[] = INCBIN_U8("graphics/pokemon/graveler/alolan/icon.4bpp"); +const u8 gMonIcon_GolemAlolan[] = INCBIN_U8("graphics/pokemon/golem/alolan/icon.4bpp"); +const u8 gMonIcon_GrimerAlolan[] = INCBIN_U8("graphics/pokemon/grimer/alolan/icon.4bpp"); +const u8 gMonIcon_MukAlolan[] = INCBIN_U8("graphics/pokemon/muk/alolan/icon.4bpp"); +const u8 gMonIcon_ExeggutorAlolan[] = INCBIN_U8("graphics/pokemon/exeggutor/alolan/icon.4bpp"); +const u8 gMonIcon_MarowakAlolan[] = INCBIN_U8("graphics/pokemon/marowak/alolan/icon.4bpp"); const u8 gMonIcon_MeowthGalarian[] = INCBIN_U8("graphics/pokemon/meowth/galarian/icon.4bpp"); const u8 gMonIcon_PonytaGalarian[] = INCBIN_U8("graphics/pokemon/ponyta/galarian/icon.4bpp"); const u8 gMonIcon_RapidashGalarian[] = INCBIN_U8("graphics/pokemon/rapidash/galarian/icon.4bpp"); @@ -5614,6 +5764,22 @@ const u8 gMonIcon_DarumakaGalarian[] = INCBIN_U8("graphics/pokemon/darumaka/gala const u8 gMonIcon_DarmanitanGalarian[] = INCBIN_U8("graphics/pokemon/darmanitan/galarian/icon.4bpp"); const u8 gMonIcon_YamaskGalarian[] = INCBIN_U8("graphics/pokemon/yamask/galarian/icon.4bpp"); const u8 gMonIcon_StunfiskGalarian[] = INCBIN_U8("graphics/pokemon/stunfisk/galarian/icon.4bpp"); +const u8 gMonIcon_GrowlitheHisuian[] = INCBIN_U8("graphics/pokemon/growlithe/hisuian/icon.4bpp"); +const u8 gMonIcon_ArcanineHisuian[] = INCBIN_U8("graphics/pokemon/arcanine/hisuian/icon.4bpp"); +const u8 gMonIcon_VoltorbHisuian[] = INCBIN_U8("graphics/pokemon/voltorb/hisuian/icon.4bpp"); +const u8 gMonIcon_ElectrodeHisuian[] = INCBIN_U8("graphics/pokemon/electrode/hisuian/icon.4bpp"); +const u8 gMonIcon_TyphlosionHisuian[] = INCBIN_U8("graphics/pokemon/typhlosion/hisuian/icon.4bpp"); +const u8 gMonIcon_QwilfishHisuian[] = INCBIN_U8("graphics/pokemon/qwilfish/hisuian/icon.4bpp"); +const u8 gMonIcon_SneaselHisuian[] = INCBIN_U8("graphics/pokemon/sneasel/hisuian/icon.4bpp"); +const u8 gMonIcon_SamurottHisuian[] = INCBIN_U8("graphics/pokemon/samurott/hisuian/icon.4bpp"); +const u8 gMonIcon_LilligantHisuian[] = INCBIN_U8("graphics/pokemon/lilligant/hisuian/icon.4bpp"); +const u8 gMonIcon_ZoruaHisuian[] = INCBIN_U8("graphics/pokemon/zorua/hisuian/icon.4bpp"); +const u8 gMonIcon_ZoroarkHisuian[] = INCBIN_U8("graphics/pokemon/zoroark/hisuian/icon.4bpp"); +const u8 gMonIcon_BraviaryHisuian[] = INCBIN_U8("graphics/pokemon/braviary/hisuian/icon.4bpp"); +const u8 gMonIcon_SliggooHisuian[] = INCBIN_U8("graphics/pokemon/sliggoo/hisuian/icon.4bpp"); +const u8 gMonIcon_GoodraHisuian[] = INCBIN_U8("graphics/pokemon/goodra/hisuian/icon.4bpp"); +const u8 gMonIcon_AvaluggHisuian[] = INCBIN_U8("graphics/pokemon/avalugg/hisuian/icon.4bpp"); +const u8 gMonIcon_DecidueyeHisuian[] = INCBIN_U8("graphics/pokemon/decidueye/hisuian/icon.4bpp"); const u8 gMonIcon_PikachuCosplay[] = INCBIN_U8("graphics/pokemon/pikachu/cosplay/icon.4bpp"); const u8 gMonIcon_PikachuRockStar[] = INCBIN_U8("graphics/pokemon/pikachu/rock_star/icon.4bpp"); const u8 gMonIcon_PikachuBelle[] = INCBIN_U8("graphics/pokemon/pikachu/belle/icon.4bpp"); @@ -5628,6 +5794,7 @@ const u8 gMonIcon_PikachuKalosCap[] = INCBIN_U8("graphics/pokemon/pikachu/kalos_ const u8 gMonIcon_PikachuAlolaCap[] = INCBIN_U8("graphics/pokemon/pikachu/alola_cap/icon.4bpp"); const u8 gMonIcon_PikachuPartnerCap[] = INCBIN_U8("graphics/pokemon/pikachu/partner_cap/icon.4bpp"); const u8 gMonIcon_PichuSpikyEared[] = INCBIN_U8("graphics/pokemon/pichu/spiky_eared/icon.4bpp"); +#endif const u8 gMonIcon_UnownB[] = INCBIN_U8("graphics/pokemon/unown/b/icon.4bpp"); const u8 gMonIcon_UnownC[] = INCBIN_U8("graphics/pokemon/unown/c/icon.4bpp"); const u8 gMonIcon_UnownD[] = INCBIN_U8("graphics/pokemon/unown/d/icon.4bpp"); @@ -5661,6 +5828,7 @@ const u8 gMonIcon_CastformSnowy[] = INCBIN_U8("graphics/pokemon/castform/snowy/i const u8 gMonIcon_DeoxysAttack[] = INCBIN_U8("graphics/pokemon/deoxys/attack/icon.4bpp"); const u8 gMonIcon_DeoxysDefense[] = INCBIN_U8("graphics/pokemon/deoxys/defense/icon.4bpp"); const u8 gMonIcon_DeoxysSpeed[] = INCBIN_U8("graphics/pokemon/deoxys/speed/icon.4bpp"); +#if P_NEW_POKEMON == TRUE const u8 gMonIcon_BurmySandyCloak[] = INCBIN_U8("graphics/pokemon/burmy/sandy_cloak/icon.4bpp"); const u8 gMonIcon_BurmyTrashCloak[] = INCBIN_U8("graphics/pokemon/burmy/trash_cloak/icon.4bpp"); const u8 gMonIcon_WormadamSandyCloak[] = INCBIN_U8("graphics/pokemon/wormadam/sandy_cloak/icon.4bpp"); @@ -5673,9 +5841,12 @@ const u8 gMonIcon_RotomWash[] = INCBIN_U8("graphics/pokemon/rotom/wash/icon.4bpp const u8 gMonIcon_RotomFrost[] = INCBIN_U8("graphics/pokemon/rotom/frost/icon.4bpp"); const u8 gMonIcon_RotomFan[] = INCBIN_U8("graphics/pokemon/rotom/fan/icon.4bpp"); const u8 gMonIcon_RotomMow[] = INCBIN_U8("graphics/pokemon/rotom/mow/icon.4bpp"); +const u8 gMonIcon_DialgaOrigin[] = INCBIN_U8("graphics/pokemon/dialga/origin/icon.4bpp"); +const u8 gMonIcon_PalkiaOrigin[] = INCBIN_U8("graphics/pokemon/palkia/origin/icon.4bpp"); const u8 gMonIcon_GiratinaOrigin[] = INCBIN_U8("graphics/pokemon/giratina/origin/icon.4bpp"); const u8 gMonIcon_ShayminSky[] = INCBIN_U8("graphics/pokemon/shaymin/sky/icon.4bpp"); const u8 gMonIcon_BasculinBlueStriped[] = INCBIN_U8("graphics/pokemon/basculin/blue_striped/icon.4bpp"); +const u8 gMonIcon_BasculinWhiteStriped[] = INCBIN_U8("graphics/pokemon/basculin/white_striped/icon.4bpp"); const u8 gMonIcon_DarmanitanZenMode[] = INCBIN_U8("graphics/pokemon/darmanitan/zen_mode/icon.4bpp"); const u8 gMonIcon_DarmanitanZenModeGalarian[] = INCBIN_U8("graphics/pokemon/darmanitan/zen_mode/galarian/icon.4bpp"); const u8 gMonIcon_DeerlingSummer[] = INCBIN_U8("graphics/pokemon/deerling/summer/icon.4bpp"); @@ -5687,6 +5858,7 @@ const u8 gMonIcon_SawsbuckWinter[] = INCBIN_U8("graphics/pokemon/sawsbuck/winter const u8 gMonIcon_TornadusTherian[] = INCBIN_U8("graphics/pokemon/tornadus/therian/icon.4bpp"); const u8 gMonIcon_ThundurusTherian[] = INCBIN_U8("graphics/pokemon/thundurus/therian/icon.4bpp"); const u8 gMonIcon_LandorusTherian[] = INCBIN_U8("graphics/pokemon/landorus/therian/icon.4bpp"); +const u8 gMonIcon_EnamorusTherian[] = INCBIN_U8("graphics/pokemon/enamorus/therian/icon.4bpp"); const u8 gMonIcon_KyuremWhite[] = INCBIN_U8("graphics/pokemon/kyurem/white/icon.4bpp"); const u8 gMonIcon_KyuremBlack[] = INCBIN_U8("graphics/pokemon/kyurem/black/icon.4bpp"); const u8 gMonIcon_KeldeoResolute[] = INCBIN_U8("graphics/pokemon/keldeo/resolute/icon.4bpp"); @@ -5775,8 +5947,9 @@ const u8 gMonIcon_ZacianCrownedSword[] = INCBIN_U8("graphics/pokemon/zacian/crow const u8 gMonIcon_ZamazentaCrownedShield[] = INCBIN_U8("graphics/pokemon/zamazenta/crowned_shield/icon.4bpp"); const u8 gMonIcon_EternatusEternamax[] = INCBIN_U8("graphics/pokemon/eternatus/eternamax/icon.4bpp"); const u8 gMonIcon_ZarudeDada[] = INCBIN_U8("graphics/pokemon/zarude/dada/icon.4bpp"); -//const u8 gMonIcon_CalyrexIceRider[] = INCBIN_U8("graphics/pokemon/calyrex/ice_rider/icon.4bpp"); -//const u8 gMonIcon_CalyrexShadowRider[] = INCBIN_U8("graphics/pokemon/calyrex/shadow_rider/icon.4bpp"); +const u8 gMonIcon_CalyrexIceRider[] = INCBIN_U8("graphics/pokemon/calyrex/ice_rider/icon.4bpp"); +const u8 gMonIcon_CalyrexShadowRider[] = INCBIN_U8("graphics/pokemon/calyrex/shadow_rider/icon.4bpp"); +#endif const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp"); const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mark/footprint.1bpp"); @@ -6166,6 +6339,7 @@ const u8 gMonFootprint_Latios[] = INCBIN_U8("graphics/pokemon/latios/footprint.1 const u8 gMonFootprint_Jirachi[] = INCBIN_U8("graphics/pokemon/jirachi/footprint.1bpp"); const u8 gMonFootprint_Deoxys[] = INCBIN_U8("graphics/pokemon/deoxys/footprint.1bpp"); const u8 gMonFootprint_Chimecho[] = INCBIN_U8("graphics/pokemon/chimecho/footprint.1bpp"); +#if P_NEW_POKEMON == TRUE const u8 gMonFootprint_Turtwig[] = INCBIN_U8("graphics/pokemon/turtwig/footprint.1bpp"); const u8 gMonFootprint_Grotle[] = INCBIN_U8("graphics/pokemon/grotle/footprint.1bpp"); const u8 gMonFootprint_Torterra[] = INCBIN_U8("graphics/pokemon/torterra/footprint.1bpp"); @@ -6501,3 +6675,188 @@ const u8 gMonFootprint_Zygarde[] = INCBIN_U8("graphics/pokemon/zygarde/footprint const u8 gMonFootprint_Diancie[] = INCBIN_U8("graphics/pokemon/diancie/footprint.1bpp"); const u8 gMonFootprint_Hoopa[] = INCBIN_U8("graphics/pokemon/hoopa/footprint.1bpp"); const u8 gMonFootprint_Volcanion[] = INCBIN_U8("graphics/pokemon/volcanion/footprint.1bpp"); +const u8 gMonFootprint_Rowlet[] = INCBIN_U8("graphics/pokemon/rowlet/footprint.1bpp"); +const u8 gMonFootprint_Dartrix[] = INCBIN_U8("graphics/pokemon/dartrix/footprint.1bpp"); +const u8 gMonFootprint_Decidueye[] = INCBIN_U8("graphics/pokemon/decidueye/footprint.1bpp"); +const u8 gMonFootprint_Litten[] = INCBIN_U8("graphics/pokemon/litten/footprint.1bpp"); +const u8 gMonFootprint_Torracat[] = INCBIN_U8("graphics/pokemon/torracat/footprint.1bpp"); +const u8 gMonFootprint_Incineroar[] = INCBIN_U8("graphics/pokemon/incineroar/footprint.1bpp"); +const u8 gMonFootprint_Popplio[] = INCBIN_U8("graphics/pokemon/popplio/footprint.1bpp"); +const u8 gMonFootprint_Brionne[] = INCBIN_U8("graphics/pokemon/brionne/footprint.1bpp"); +const u8 gMonFootprint_Primarina[] = INCBIN_U8("graphics/pokemon/primarina/footprint.1bpp"); +const u8 gMonFootprint_Pikipek[] = INCBIN_U8("graphics/pokemon/pikipek/footprint.1bpp"); +const u8 gMonFootprint_Trumbeak[] = INCBIN_U8("graphics/pokemon/trumbeak/footprint.1bpp"); +const u8 gMonFootprint_Toucannon[] = INCBIN_U8("graphics/pokemon/toucannon/footprint.1bpp"); +const u8 gMonFootprint_Yungoos[] = INCBIN_U8("graphics/pokemon/yungoos/footprint.1bpp"); +const u8 gMonFootprint_Gumshoos[] = INCBIN_U8("graphics/pokemon/gumshoos/footprint.1bpp"); +const u8 gMonFootprint_Grubbin[] = INCBIN_U8("graphics/pokemon/grubbin/footprint.1bpp"); +const u8 gMonFootprint_Charjabug[] = INCBIN_U8("graphics/pokemon/charjabug/footprint.1bpp"); +const u8 gMonFootprint_Vikavolt[] = INCBIN_U8("graphics/pokemon/vikavolt/footprint.1bpp"); +const u8 gMonFootprint_Crabrawler[] = INCBIN_U8("graphics/pokemon/crabrawler/footprint.1bpp"); +const u8 gMonFootprint_Crabominable[] = INCBIN_U8("graphics/pokemon/crabominable/footprint.1bpp"); +const u8 gMonFootprint_Oricorio[] = INCBIN_U8("graphics/pokemon/oricorio/footprint.1bpp"); +const u8 gMonFootprint_Cutiefly[] = INCBIN_U8("graphics/pokemon/cutiefly/footprint.1bpp"); +const u8 gMonFootprint_Ribombee[] = INCBIN_U8("graphics/pokemon/ribombee/footprint.1bpp"); +const u8 gMonFootprint_Rockruff[] = INCBIN_U8("graphics/pokemon/rockruff/footprint.1bpp"); +const u8 gMonFootprint_Lycanroc[] = INCBIN_U8("graphics/pokemon/lycanroc/footprint.1bpp"); +const u8 gMonFootprint_Wishiwashi[] = INCBIN_U8("graphics/pokemon/wishiwashi/footprint.1bpp"); +const u8 gMonFootprint_Mareanie[] = INCBIN_U8("graphics/pokemon/mareanie/footprint.1bpp"); +const u8 gMonFootprint_Toxapex[] = INCBIN_U8("graphics/pokemon/toxapex/footprint.1bpp"); +const u8 gMonFootprint_Mudbray[] = INCBIN_U8("graphics/pokemon/mudbray/footprint.1bpp"); +const u8 gMonFootprint_Mudsdale[] = INCBIN_U8("graphics/pokemon/mudsdale/footprint.1bpp"); +const u8 gMonFootprint_Dewpider[] = INCBIN_U8("graphics/pokemon/dewpider/footprint.1bpp"); +const u8 gMonFootprint_Araquanid[] = INCBIN_U8("graphics/pokemon/araquanid/footprint.1bpp"); +const u8 gMonFootprint_Fomantis[] = INCBIN_U8("graphics/pokemon/fomantis/footprint.1bpp"); +const u8 gMonFootprint_Lurantis[] = INCBIN_U8("graphics/pokemon/lurantis/footprint.1bpp"); +const u8 gMonFootprint_Morelull[] = INCBIN_U8("graphics/pokemon/morelull/footprint.1bpp"); +const u8 gMonFootprint_Shiinotic[] = INCBIN_U8("graphics/pokemon/shiinotic/footprint.1bpp"); +const u8 gMonFootprint_Salandit[] = INCBIN_U8("graphics/pokemon/salandit/footprint.1bpp"); +const u8 gMonFootprint_Salazzle[] = INCBIN_U8("graphics/pokemon/salazzle/footprint.1bpp"); +const u8 gMonFootprint_Stufful[] = INCBIN_U8("graphics/pokemon/stufful/footprint.1bpp"); +const u8 gMonFootprint_Bewear[] = INCBIN_U8("graphics/pokemon/bewear/footprint.1bpp"); +const u8 gMonFootprint_Bounsweet[] = INCBIN_U8("graphics/pokemon/bounsweet/footprint.1bpp"); +const u8 gMonFootprint_Steenee[] = INCBIN_U8("graphics/pokemon/steenee/footprint.1bpp"); +const u8 gMonFootprint_Tsareena[] = INCBIN_U8("graphics/pokemon/tsareena/footprint.1bpp"); +const u8 gMonFootprint_Comfey[] = INCBIN_U8("graphics/pokemon/comfey/footprint.1bpp"); +const u8 gMonFootprint_Oranguru[] = INCBIN_U8("graphics/pokemon/oranguru/footprint.1bpp"); +const u8 gMonFootprint_Passimian[] = INCBIN_U8("graphics/pokemon/passimian/footprint.1bpp"); +const u8 gMonFootprint_Wimpod[] = INCBIN_U8("graphics/pokemon/wimpod/footprint.1bpp"); +const u8 gMonFootprint_Golisopod[] = INCBIN_U8("graphics/pokemon/golisopod/footprint.1bpp"); +const u8 gMonFootprint_Sandygast[] = INCBIN_U8("graphics/pokemon/sandygast/footprint.1bpp"); +const u8 gMonFootprint_Palossand[] = INCBIN_U8("graphics/pokemon/palossand/footprint.1bpp"); +const u8 gMonFootprint_Pyukumuku[] = INCBIN_U8("graphics/pokemon/pyukumuku/footprint.1bpp"); +const u8 gMonFootprint_Type_Null[] = INCBIN_U8("graphics/pokemon/type_null/footprint.1bpp"); +const u8 gMonFootprint_Silvally[] = INCBIN_U8("graphics/pokemon/silvally/footprint.1bpp"); +const u8 gMonFootprint_Minior[] = INCBIN_U8("graphics/pokemon/minior/footprint.1bpp"); +const u8 gMonFootprint_Komala[] = INCBIN_U8("graphics/pokemon/komala/footprint.1bpp"); +const u8 gMonFootprint_Turtonator[] = INCBIN_U8("graphics/pokemon/turtonator/footprint.1bpp"); +const u8 gMonFootprint_Togedemaru[] = INCBIN_U8("graphics/pokemon/togedemaru/footprint.1bpp"); +const u8 gMonFootprint_Mimikyu[] = INCBIN_U8("graphics/pokemon/mimikyu/footprint.1bpp"); +const u8 gMonFootprint_Bruxish[] = INCBIN_U8("graphics/pokemon/bruxish/footprint.1bpp"); +const u8 gMonFootprint_Drampa[] = INCBIN_U8("graphics/pokemon/drampa/footprint.1bpp"); +const u8 gMonFootprint_Dhelmise[] = INCBIN_U8("graphics/pokemon/dhelmise/footprint.1bpp"); +const u8 gMonFootprint_Jangmo_o[] = INCBIN_U8("graphics/pokemon/jangmo_o/footprint.1bpp"); +const u8 gMonFootprint_Hakamo_o[] = INCBIN_U8("graphics/pokemon/hakamo_o/footprint.1bpp"); +const u8 gMonFootprint_Kommo_o[] = INCBIN_U8("graphics/pokemon/kommo_o/footprint.1bpp"); +const u8 gMonFootprint_Tapu_Koko[] = INCBIN_U8("graphics/pokemon/tapu_koko/footprint.1bpp"); +const u8 gMonFootprint_Tapu_Lele[] = INCBIN_U8("graphics/pokemon/tapu_lele/footprint.1bpp"); +const u8 gMonFootprint_Tapu_Bulu[] = INCBIN_U8("graphics/pokemon/tapu_bulu/footprint.1bpp"); +const u8 gMonFootprint_Tapu_Fini[] = INCBIN_U8("graphics/pokemon/tapu_fini/footprint.1bpp"); +const u8 gMonFootprint_Cosmog[] = INCBIN_U8("graphics/pokemon/cosmog/footprint.1bpp"); +const u8 gMonFootprint_Cosmoem[] = INCBIN_U8("graphics/pokemon/cosmoem/footprint.1bpp"); +const u8 gMonFootprint_Solgaleo[] = INCBIN_U8("graphics/pokemon/solgaleo/footprint.1bpp"); +const u8 gMonFootprint_Lunala[] = INCBIN_U8("graphics/pokemon/lunala/footprint.1bpp"); +const u8 gMonFootprint_Nihilego[] = INCBIN_U8("graphics/pokemon/nihilego/footprint.1bpp"); +const u8 gMonFootprint_Buzzwole[] = INCBIN_U8("graphics/pokemon/buzzwole/footprint.1bpp"); +const u8 gMonFootprint_Pheromosa[] = INCBIN_U8("graphics/pokemon/pheromosa/footprint.1bpp"); +const u8 gMonFootprint_Xurkitree[] = INCBIN_U8("graphics/pokemon/xurkitree/footprint.1bpp"); +const u8 gMonFootprint_Celesteela[] = INCBIN_U8("graphics/pokemon/celesteela/footprint.1bpp"); +const u8 gMonFootprint_Kartana[] = INCBIN_U8("graphics/pokemon/kartana/footprint.1bpp"); +const u8 gMonFootprint_Guzzlord[] = INCBIN_U8("graphics/pokemon/guzzlord/footprint.1bpp"); +const u8 gMonFootprint_Necrozma[] = INCBIN_U8("graphics/pokemon/necrozma/footprint.1bpp"); +const u8 gMonFootprint_Magearna[] = INCBIN_U8("graphics/pokemon/magearna/footprint.1bpp"); +const u8 gMonFootprint_Marshadow[] = INCBIN_U8("graphics/pokemon/marshadow/footprint.1bpp"); +const u8 gMonFootprint_Poipole[] = INCBIN_U8("graphics/pokemon/poipole/footprint.1bpp"); +const u8 gMonFootprint_Naganadel[] = INCBIN_U8("graphics/pokemon/naganadel/footprint.1bpp"); +const u8 gMonFootprint_Stakataka[] = INCBIN_U8("graphics/pokemon/stakataka/footprint.1bpp"); +const u8 gMonFootprint_Blacephalon[] = INCBIN_U8("graphics/pokemon/blacephalon/footprint.1bpp"); +const u8 gMonFootprint_Zeraora[] = INCBIN_U8("graphics/pokemon/zeraora/footprint.1bpp"); +const u8 gMonFootprint_Meltan[] = INCBIN_U8("graphics/pokemon/meltan/footprint.1bpp"); +const u8 gMonFootprint_Melmetal[] = INCBIN_U8("graphics/pokemon/melmetal/footprint.1bpp"); +const u8 gMonFootprint_Grookey[] = INCBIN_U8("graphics/pokemon/grookey/footprint.1bpp"); +const u8 gMonFootprint_Thwackey[] = INCBIN_U8("graphics/pokemon/thwackey/footprint.1bpp"); +const u8 gMonFootprint_Rillaboom[] = INCBIN_U8("graphics/pokemon/rillaboom/footprint.1bpp"); +const u8 gMonFootprint_Scorbunny[] = INCBIN_U8("graphics/pokemon/scorbunny/footprint.1bpp"); +const u8 gMonFootprint_Raboot[] = INCBIN_U8("graphics/pokemon/raboot/footprint.1bpp"); +const u8 gMonFootprint_Cinderace[] = INCBIN_U8("graphics/pokemon/cinderace/footprint.1bpp"); +const u8 gMonFootprint_Sobble[] = INCBIN_U8("graphics/pokemon/sobble/footprint.1bpp"); +const u8 gMonFootprint_Drizzile[] = INCBIN_U8("graphics/pokemon/drizzile/footprint.1bpp"); +const u8 gMonFootprint_Inteleon[] = INCBIN_U8("graphics/pokemon/inteleon/footprint.1bpp"); +const u8 gMonFootprint_Skwovet[] = INCBIN_U8("graphics/pokemon/skwovet/footprint.1bpp"); +const u8 gMonFootprint_Greedent[] = INCBIN_U8("graphics/pokemon/greedent/footprint.1bpp"); +const u8 gMonFootprint_Rookidee[] = INCBIN_U8("graphics/pokemon/rookidee/footprint.1bpp"); +const u8 gMonFootprint_Corvisquire[] = INCBIN_U8("graphics/pokemon/corvisquire/footprint.1bpp"); +const u8 gMonFootprint_Corviknight[] = INCBIN_U8("graphics/pokemon/corviknight/footprint.1bpp"); +const u8 gMonFootprint_Blipbug[] = INCBIN_U8("graphics/pokemon/blipbug/footprint.1bpp"); +const u8 gMonFootprint_Dottler[] = INCBIN_U8("graphics/pokemon/dottler/footprint.1bpp"); +const u8 gMonFootprint_Orbeetle[] = INCBIN_U8("graphics/pokemon/orbeetle/footprint.1bpp"); +const u8 gMonFootprint_Nickit[] = INCBIN_U8("graphics/pokemon/nickit/footprint.1bpp"); +const u8 gMonFootprint_Thievul[] = INCBIN_U8("graphics/pokemon/thievul/footprint.1bpp"); +const u8 gMonFootprint_Gossifleur[] = INCBIN_U8("graphics/pokemon/gossifleur/footprint.1bpp"); +const u8 gMonFootprint_Eldegoss[] = INCBIN_U8("graphics/pokemon/eldegoss/footprint.1bpp"); +const u8 gMonFootprint_Wooloo[] = INCBIN_U8("graphics/pokemon/wooloo/footprint.1bpp"); +const u8 gMonFootprint_Dubwool[] = INCBIN_U8("graphics/pokemon/dubwool/footprint.1bpp"); +const u8 gMonFootprint_Chewtle[] = INCBIN_U8("graphics/pokemon/chewtle/footprint.1bpp"); +const u8 gMonFootprint_Drednaw[] = INCBIN_U8("graphics/pokemon/drednaw/footprint.1bpp"); +const u8 gMonFootprint_Yamper[] = INCBIN_U8("graphics/pokemon/yamper/footprint.1bpp"); +const u8 gMonFootprint_Boltund[] = INCBIN_U8("graphics/pokemon/boltund/footprint.1bpp"); +const u8 gMonFootprint_Rolycoly[] = INCBIN_U8("graphics/pokemon/rolycoly/footprint.1bpp"); +const u8 gMonFootprint_Carkol[] = INCBIN_U8("graphics/pokemon/carkol/footprint.1bpp"); +const u8 gMonFootprint_Coalossal[] = INCBIN_U8("graphics/pokemon/coalossal/footprint.1bpp"); +const u8 gMonFootprint_Applin[] = INCBIN_U8("graphics/pokemon/applin/footprint.1bpp"); +const u8 gMonFootprint_Flapple[] = INCBIN_U8("graphics/pokemon/flapple/footprint.1bpp"); +const u8 gMonFootprint_Appletun[] = INCBIN_U8("graphics/pokemon/appletun/footprint.1bpp"); +const u8 gMonFootprint_Silicobra[] = INCBIN_U8("graphics/pokemon/silicobra/footprint.1bpp"); +const u8 gMonFootprint_Sandaconda[] = INCBIN_U8("graphics/pokemon/sandaconda/footprint.1bpp"); +const u8 gMonFootprint_Cramorant[] = INCBIN_U8("graphics/pokemon/cramorant/footprint.1bpp"); +const u8 gMonFootprint_Arrokuda[] = INCBIN_U8("graphics/pokemon/arrokuda/footprint.1bpp"); +const u8 gMonFootprint_Barraskewda[] = INCBIN_U8("graphics/pokemon/barraskewda/footprint.1bpp"); +const u8 gMonFootprint_Toxel[] = INCBIN_U8("graphics/pokemon/toxel/footprint.1bpp"); +const u8 gMonFootprint_Toxtricity[] = INCBIN_U8("graphics/pokemon/toxtricity/footprint.1bpp"); +const u8 gMonFootprint_Sizzlipede[] = INCBIN_U8("graphics/pokemon/sizzlipede/footprint.1bpp"); +const u8 gMonFootprint_Centiskorch[] = INCBIN_U8("graphics/pokemon/centiskorch/footprint.1bpp"); +const u8 gMonFootprint_Clobbopus[] = INCBIN_U8("graphics/pokemon/clobbopus/footprint.1bpp"); +const u8 gMonFootprint_Grapploct[] = INCBIN_U8("graphics/pokemon/grapploct/footprint.1bpp"); +const u8 gMonFootprint_Sinistea[] = INCBIN_U8("graphics/pokemon/sinistea/footprint.1bpp"); +const u8 gMonFootprint_Polteageist[] = INCBIN_U8("graphics/pokemon/polteageist/footprint.1bpp"); +const u8 gMonFootprint_Hatenna[] = INCBIN_U8("graphics/pokemon/hatenna/footprint.1bpp"); +const u8 gMonFootprint_Hattrem[] = INCBIN_U8("graphics/pokemon/hattrem/footprint.1bpp"); +const u8 gMonFootprint_Hatterene[] = INCBIN_U8("graphics/pokemon/hatterene/footprint.1bpp"); +const u8 gMonFootprint_Impidimp[] = INCBIN_U8("graphics/pokemon/impidimp/footprint.1bpp"); +const u8 gMonFootprint_Morgrem[] = INCBIN_U8("graphics/pokemon/morgrem/footprint.1bpp"); +const u8 gMonFootprint_Grimmsnarl[] = INCBIN_U8("graphics/pokemon/grimmsnarl/footprint.1bpp"); +const u8 gMonFootprint_Obstagoon[] = INCBIN_U8("graphics/pokemon/obstagoon/footprint.1bpp"); +const u8 gMonFootprint_Perrserker[] = INCBIN_U8("graphics/pokemon/perrserker/footprint.1bpp"); +const u8 gMonFootprint_Cursola[] = INCBIN_U8("graphics/pokemon/cursola/footprint.1bpp"); +const u8 gMonFootprint_Sirfetchd[] = INCBIN_U8("graphics/pokemon/sirfetchd/footprint.1bpp"); +const u8 gMonFootprint_Mr_Rime[] = INCBIN_U8("graphics/pokemon/mr_rime/footprint.1bpp"); +const u8 gMonFootprint_Runerigus[] = INCBIN_U8("graphics/pokemon/runerigus/footprint.1bpp"); +const u8 gMonFootprint_Milcery[] = INCBIN_U8("graphics/pokemon/milcery/footprint.1bpp"); +const u8 gMonFootprint_Alcremie[] = INCBIN_U8("graphics/pokemon/alcremie/footprint.1bpp"); +const u8 gMonFootprint_Falinks[] = INCBIN_U8("graphics/pokemon/falinks/footprint.1bpp"); +const u8 gMonFootprint_Pincurchin[] = INCBIN_U8("graphics/pokemon/pincurchin/footprint.1bpp"); +const u8 gMonFootprint_Snom[] = INCBIN_U8("graphics/pokemon/snom/footprint.1bpp"); +const u8 gMonFootprint_Frosmoth[] = INCBIN_U8("graphics/pokemon/frosmoth/footprint.1bpp"); +const u8 gMonFootprint_Stonjourner[] = INCBIN_U8("graphics/pokemon/stonjourner/footprint.1bpp"); +const u8 gMonFootprint_Eiscue[] = INCBIN_U8("graphics/pokemon/eiscue/footprint.1bpp"); +const u8 gMonFootprint_Indeedee[] = INCBIN_U8("graphics/pokemon/indeedee/footprint.1bpp"); +const u8 gMonFootprint_Morpeko[] = INCBIN_U8("graphics/pokemon/morpeko/footprint.1bpp"); +const u8 gMonFootprint_Cufant[] = INCBIN_U8("graphics/pokemon/cufant/footprint.1bpp"); +const u8 gMonFootprint_Copperajah[] = INCBIN_U8("graphics/pokemon/copperajah/footprint.1bpp"); +const u8 gMonFootprint_Dracozolt[] = INCBIN_U8("graphics/pokemon/dracozolt/footprint.1bpp"); +const u8 gMonFootprint_Arctozolt[] = INCBIN_U8("graphics/pokemon/arctozolt/footprint.1bpp"); +const u8 gMonFootprint_Dracovish[] = INCBIN_U8("graphics/pokemon/dracovish/footprint.1bpp"); +const u8 gMonFootprint_Arctovish[] = INCBIN_U8("graphics/pokemon/arctovish/footprint.1bpp"); +const u8 gMonFootprint_Duraludon[] = INCBIN_U8("graphics/pokemon/duraludon/footprint.1bpp"); +const u8 gMonFootprint_Dreepy[] = INCBIN_U8("graphics/pokemon/dreepy/footprint.1bpp"); +const u8 gMonFootprint_Drakloak[] = INCBIN_U8("graphics/pokemon/drakloak/footprint.1bpp"); +const u8 gMonFootprint_Dragapult[] = INCBIN_U8("graphics/pokemon/dragapult/footprint.1bpp"); +const u8 gMonFootprint_Zacian[] = INCBIN_U8("graphics/pokemon/zacian/footprint.1bpp"); +const u8 gMonFootprint_Zamazenta[] = INCBIN_U8("graphics/pokemon/zamazenta/footprint.1bpp"); +const u8 gMonFootprint_Eternatus[] = INCBIN_U8("graphics/pokemon/eternatus/footprint.1bpp"); +const u8 gMonFootprint_Kubfu[] = INCBIN_U8("graphics/pokemon/kubfu/footprint.1bpp"); +const u8 gMonFootprint_Urshifu[] = INCBIN_U8("graphics/pokemon/urshifu/footprint.1bpp"); +const u8 gMonFootprint_Zarude[] = INCBIN_U8("graphics/pokemon/zarude/footprint.1bpp"); +const u8 gMonFootprint_Regieleki[] = INCBIN_U8("graphics/pokemon/regieleki/footprint.1bpp"); +const u8 gMonFootprint_Regidrago[] = INCBIN_U8("graphics/pokemon/regidrago/footprint.1bpp"); +const u8 gMonFootprint_Glastrier[] = INCBIN_U8("graphics/pokemon/glastrier/footprint.1bpp"); +const u8 gMonFootprint_Spectrier[] = INCBIN_U8("graphics/pokemon/spectrier/footprint.1bpp"); +const u8 gMonFootprint_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/footprint.1bpp"); +//const u8 gMonFootprint_Wyrdeer[] = INCBIN_U8("graphics/pokemon/wyrdeer/footprint.1bpp"); +//const u8 gMonFootprint_Kleavor[] = INCBIN_U8("graphics/pokemon/kleavor/footprint.1bpp"); +//const u8 gMonFootprint_Ursaluna[] = INCBIN_U8("graphics/pokemon/ursaluna/footprint.1bpp"); +//const u8 gMonFootprint_Basculegion[] = INCBIN_U8("graphics/pokemon/basculegion/footprint.1bpp"); +//const u8 gMonFootprint_Sneasler[] = INCBIN_U8("graphics/pokemon/sneasler/footprint.1bpp"); +//const u8 gMonFootprint_Overqwil[] = INCBIN_U8("graphics/pokemon/overqwil/footprint.1bpp"); +//const u8 gMonFootprint_Enamorus[] = INCBIN_U8("graphics/pokemon/enamorus/footprint.1bpp"); +#endif diff --git a/src/data/graphics/rayquaza_scene.h b/src/data/graphics/rayquaza_scene.h index 633213db87..660f07416c 100644 --- a/src/data/graphics/rayquaza_scene.h +++ b/src/data/graphics/rayquaza_scene.h @@ -24,7 +24,7 @@ const u32 gRaySceneTakesFlight_Bg_Tilemap[] = INCBIN_U32("graphics/rayquaz // Scene 3 (RAY_ANIM_DESCENDS) const u32 gRaySceneDescends_Rayquaza_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/rayquaza.4bpp.lz"); -// for some reason there are an extra 0xC bytes at the end of the original rayquaza_tail.4bpp, so in order to produce the correct lz, +// for some reason there are an extra 0xC bytes at the end of the original rayquaza_tail.4bpp, so in order to produce the correct lz, // we have to cat the bytes at the end with a make rule. not sure why those bytes are there, it may have been a bug in Game Freak's software. const u32 gRaySceneDescends_RayquazaTail_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/rayquaza_tail_fix.4bpp.lz"); const u32 gRaySceneDescends_Bg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/bg.4bpp.lz"); diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index ea8315e760..3e1789b9a3 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -1,31 +1,40 @@ const u32 *const gItemIconTable[][2] = { [ITEM_NONE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - // Pokeballs - [ITEM_MASTER_BALL] = {gItemIcon_MasterBall, gItemIconPalette_MasterBall}, - [ITEM_ULTRA_BALL] = {gItemIcon_UltraBall, gItemIconPalette_UltraBall}, - [ITEM_GREAT_BALL] = {gItemIcon_GreatBall, gItemIconPalette_GreatBall}, + // Poké Balls [ITEM_POKE_BALL] = {gItemIcon_PokeBall, gItemIconPalette_PokeBall}, - [ITEM_SAFARI_BALL] = {gItemIcon_SafariBall, gItemIconPalette_SafariBall}, - [ITEM_NET_BALL] = {gItemIcon_NetBall, gItemIconPalette_NetBall}, - [ITEM_DIVE_BALL] = {gItemIcon_DiveBall, gItemIconPalette_DiveBall}, - [ITEM_NEST_BALL] = {gItemIcon_NestBall, gItemIconPalette_NestBall}, - [ITEM_REPEAT_BALL] = {gItemIcon_RepeatBall, gItemIconPalette_RepeatBall}, - [ITEM_TIMER_BALL] = {gItemIcon_TimerBall, gItemIconPalette_RepeatBall}, - [ITEM_LUXURY_BALL] = {gItemIcon_LuxuryBall, gItemIconPalette_LuxuryBall}, + [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_ANTIDOTE] = {gItemIcon_Antidote, gItemIconPalette_Antidote}, - [ITEM_BURN_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_BurnHeal}, - [ITEM_ICE_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_IceHeal}, - [ITEM_AWAKENING] = {gItemIcon_StatusHeal, gItemIconPalette_Awakening}, - [ITEM_PARALYZE_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_ParalyzeHeal}, - [ITEM_FULL_RESTORE] = {gItemIcon_LargePotion, gItemIconPalette_FullRestore}, - [ITEM_MAX_POTION] = {gItemIcon_LargePotion, gItemIconPalette_MaxPotion}, - [ITEM_HYPER_POTION] = {gItemIcon_Potion, gItemIconPalette_HyperPotion}, [ITEM_SUPER_POTION] = {gItemIcon_Potion, gItemIconPalette_SuperPotion}, - [ITEM_FULL_HEAL] = {gItemIcon_FullHeal, gItemIconPalette_FullHeal}, + [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}, @@ -36,105 +45,177 @@ const u32 *const gItemIconTable[][2] = [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}, - [ITEM_BERRY_JUICE] = {gItemIcon_BerryJuice, gItemIconPalette_BerryJuice}, - [ITEM_SACRED_ASH] = {gItemIcon_SacredAsh, gItemIconPalette_SacredAsh}, - // Collectibles + // 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_034] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_035] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_036] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_037] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_038] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_039] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_03A] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_03B] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_03C] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_03D] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_03E] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - // Vitamins - [ITEM_HP_UP] = {gItemIcon_HPUp, gItemIconPalette_HPUp}, - [ITEM_PROTEIN] = {gItemIcon_Vitamin, gItemIconPalette_Protein}, - [ITEM_IRON] = {gItemIcon_Vitamin, gItemIconPalette_Iron}, - [ITEM_CARBOS] = {gItemIcon_Vitamin, gItemIconPalette_Carbos}, - [ITEM_CALCIUM] = {gItemIcon_Vitamin, gItemIconPalette_Calcium}, - [ITEM_RARE_CANDY] = {gItemIcon_RareCandy, gItemIconPalette_RareCandy}, - [ITEM_PP_UP] = {gItemIcon_PPUp, gItemIconPalette_PPUp}, - [ITEM_ZINC] = {gItemIcon_Vitamin, gItemIconPalette_Zinc}, - [ITEM_PP_MAX] = {gItemIcon_PPMax, gItemIconPalette_PPMax}, - // ???????? - [ITEM_048] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - // Battle items - [ITEM_GUARD_SPEC] = {gItemIcon_BattleStatItem, gItemIconPalette_GuardSpec}, - [ITEM_DIRE_HIT] = {gItemIcon_BattleStatItem, gItemIconPalette_DireHit}, - [ITEM_X_ATTACK] = {gItemIcon_BattleStatItem, gItemIconPalette_XAttack}, - [ITEM_X_DEFEND] = {gItemIcon_BattleStatItem, gItemIconPalette_XDefend}, - [ITEM_X_SPEED] = {gItemIcon_BattleStatItem, gItemIconPalette_XSpeed}, - [ITEM_X_ACCURACY] = {gItemIcon_BattleStatItem, gItemIconPalette_XAccuracy}, - [ITEM_X_SPECIAL] = {gItemIcon_BattleStatItem, gItemIconPalette_XSpecial}, - [ITEM_POKE_DOLL] = {gItemIcon_PokeDoll, gItemIconPalette_PokeDoll}, - [ITEM_FLUFFY_TAIL] = {gItemIcon_FluffyTail, gItemIconPalette_FluffyTail}, - // ???????? - [ITEM_052] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - // Field items - [ITEM_SUPER_REPEL] = {gItemIcon_Repel, gItemIconPalette_SuperRepel}, - [ITEM_MAX_REPEL] = {gItemIcon_Repel, gItemIconPalette_MaxRepel}, - [ITEM_ESCAPE_ROPE] = {gItemIcon_EscapeRope, gItemIconPalette_EscapeRope}, - [ITEM_REPEL] = {gItemIcon_Repel, gItemIconPalette_Repel}, - // ???????? - [ITEM_057] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_058] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_059] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_05A] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_05B] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_05C] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - // Evolution stones - [ITEM_SUN_STONE] = {gItemIcon_SunStone, gItemIconPalette_SunStone}, - [ITEM_MOON_STONE] = {gItemIcon_MoonStone, gItemIconPalette_MoonStone}, - [ITEM_FIRE_STONE] = {gItemIcon_FireStone, gItemIconPalette_FireStone}, - [ITEM_THUNDER_STONE] = {gItemIcon_ThunderStone, gItemIconPalette_ThunderStone}, - [ITEM_WATER_STONE] = {gItemIcon_WaterStone, gItemIconPalette_WaterStone}, - [ITEM_LEAF_STONE] = {gItemIcon_LeafStone, gItemIconPalette_LeafStone}, - // ???????? - [ITEM_063] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_064] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_065] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_066] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - // Valuables - [ITEM_TINY_MUSHROOM] = {gItemIcon_TinyMushroom, gItemIconPalette_Mushroom}, - [ITEM_BIG_MUSHROOM] = {gItemIcon_BigMushroom, gItemIconPalette_Mushroom}, - [ITEM_069] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_PEARL] = {gItemIcon_Pearl, gItemIconPalette_Pearl}, - [ITEM_BIG_PEARL] = {gItemIcon_BigPearl, gItemIconPalette_Pearl}, - [ITEM_STARDUST] = {gItemIcon_Stardust, gItemIconPalette_Star}, - [ITEM_STAR_PIECE] = {gItemIcon_StarPiece, gItemIconPalette_Star}, - [ITEM_NUGGET] = {gItemIcon_Nugget, gItemIconPalette_Nugget}, [ITEM_HEART_SCALE] = {gItemIcon_HeartScale, gItemIconPalette_HeartScale}, - // ???????? - [ITEM_070] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_071] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_072] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_073] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_074] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_075] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_076] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_077] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_078] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, + [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}, @@ -148,6 +229,329 @@ const u32 *const gItemIconTable[][2] = [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}, @@ -184,6 +588,24 @@ const u32 *const gItemIconTable[][2] = [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}, @@ -192,124 +614,14 @@ const u32 *const gItemIconTable[][2] = [ITEM_LANSAT_BERRY] = {gItemIcon_LansatBerry, gItemIconPalette_LansatBerry}, [ITEM_STARF_BERRY] = {gItemIcon_StarfBerry, gItemIconPalette_StarfBerry}, [ITEM_ENIGMA_BERRY] = {gItemIcon_EnigmaBerry, gItemIconPalette_EnigmaBerry}, - [ITEM_UNUSED_BERRY_1] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_UNUSED_BERRY_2] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_UNUSED_BERRY_3] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - // Hold items - [ITEM_BRIGHT_POWDER] = {gItemIcon_BrightPowder, gItemIconPalette_BrightPowder}, - [ITEM_WHITE_HERB] = {gItemIcon_InBattleHerb, gItemIconPalette_WhiteHerb}, - [ITEM_MACHO_BRACE] = {gItemIcon_MachoBrace, gItemIconPalette_MachoBrace}, - [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_CHOICE_BAND] = {gItemIcon_ChoiceBand, gItemIconPalette_ChoiceBand}, - [ITEM_KINGS_ROCK] = {gItemIcon_KingsRock, gItemIconPalette_KingsRock}, - [ITEM_SILVER_POWDER] = {gItemIcon_SilverPowder, gItemIconPalette_SilverPowder}, - [ITEM_AMULET_COIN] = {gItemIcon_AmuletCoin, gItemIconPalette_AmuletCoin}, - [ITEM_CLEANSE_TAG] = {gItemIcon_CleanseTag, gItemIconPalette_CleanseTag}, - [ITEM_SOUL_DEW] = {gItemIcon_SoulDew, gItemIconPalette_SoulDew}, - [ITEM_DEEP_SEA_TOOTH] = {gItemIcon_DeepSeaTooth, gItemIconPalette_DeepSeaTooth}, - [ITEM_DEEP_SEA_SCALE] = {gItemIcon_DeepSeaScale, gItemIconPalette_DeepSeaScale}, - [ITEM_SMOKE_BALL] = {gItemIcon_SmokeBall, gItemIconPalette_SmokeBall}, - [ITEM_EVERSTONE] = {gItemIcon_Everstone, gItemIconPalette_Everstone}, - [ITEM_FOCUS_BAND] = {gItemIcon_FocusBand, gItemIconPalette_FocusBand}, - [ITEM_LUCKY_EGG] = {gItemIcon_LuckyEgg, gItemIconPalette_LuckyEgg}, - [ITEM_SCOPE_LENS] = {gItemIcon_ScopeLens, gItemIconPalette_ScopeLens}, - [ITEM_METAL_COAT] = {gItemIcon_MetalCoat, gItemIconPalette_MetalCoat}, - [ITEM_LEFTOVERS] = {gItemIcon_Leftovers, gItemIconPalette_Leftovers}, - [ITEM_DRAGON_SCALE] = {gItemIcon_DragonScale, gItemIconPalette_DragonScale}, - [ITEM_LIGHT_BALL] = {gItemIcon_LightBall, gItemIconPalette_LightBall}, - [ITEM_SOFT_SAND] = {gItemIcon_SoftSand, gItemIconPalette_SoftSand}, - [ITEM_HARD_STONE] = {gItemIcon_HardStone, gItemIconPalette_HardStone}, - [ITEM_MIRACLE_SEED] = {gItemIcon_MiracleSeed, gItemIconPalette_MiracleSeed}, - [ITEM_BLACK_GLASSES] = {gItemIcon_BlackGlasses, gItemIconPalette_BlackTypeEnhancingItem}, - [ITEM_BLACK_BELT] = {gItemIcon_BlackBelt, gItemIconPalette_BlackTypeEnhancingItem}, - [ITEM_MAGNET] = {gItemIcon_Magnet, gItemIconPalette_Magnet}, - [ITEM_MYSTIC_WATER] = {gItemIcon_MysticWater, gItemIconPalette_MysticWater}, - [ITEM_SHARP_BEAK] = {gItemIcon_SharpBeak, gItemIconPalette_SharpBeak}, - [ITEM_POISON_BARB] = {gItemIcon_PoisonBarb, gItemIconPalette_PoisonBarb}, - [ITEM_NEVER_MELT_ICE] = {gItemIcon_NeverMeltIce, gItemIconPalette_NeverMeltIce}, - [ITEM_SPELL_TAG] = {gItemIcon_SpellTag, gItemIconPalette_SpellTag}, - [ITEM_TWISTED_SPOON] = {gItemIcon_TwistedSpoon, gItemIconPalette_TwistedSpoon}, - [ITEM_CHARCOAL] = {gItemIcon_Charcoal, gItemIconPalette_Charcoal}, - [ITEM_DRAGON_FANG] = {gItemIcon_DragonFang, gItemIconPalette_DragonFang}, - [ITEM_SILK_SCARF] = {gItemIcon_SilkScarf, gItemIconPalette_SilkScarf}, - [ITEM_UP_GRADE] = {gItemIcon_UpGrade, gItemIconPalette_UpGrade}, - [ITEM_SHELL_BELL] = {gItemIcon_ShellBell, gItemIconPalette_Shell}, - [ITEM_SEA_INCENSE] = {gItemIcon_SeaIncense, gItemIconPalette_SeaIncense}, - [ITEM_LAX_INCENSE] = {gItemIcon_LaxIncense, gItemIconPalette_LaxIncense}, - [ITEM_LUCKY_PUNCH] = {gItemIcon_LuckyPunch, gItemIconPalette_LuckyPunch}, - [ITEM_METAL_POWDER] = {gItemIcon_MetalPowder, gItemIconPalette_MetalPowder}, - [ITEM_THICK_CLUB] = {gItemIcon_ThickClub, gItemIconPalette_ThickClub}, - [ITEM_STICK] = {gItemIcon_Stick, gItemIconPalette_Stick}, - // ???????? - [ITEM_0E2] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0E3] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0E4] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0E5] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0E6] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0E7] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0E8] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0E9] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0EA] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0EB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0EC] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0ED] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0EE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0EF] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0F0] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0F1] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0F2] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0F3] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0F4] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0F5] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0F6] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0F7] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0F8] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0F9] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0FA] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0FB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0FC] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_0FD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - // Contest hold items - [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}, - // Key items - [ITEM_MACH_BIKE] = {gItemIcon_MachBike, gItemIconPalette_MachBike}, - [ITEM_COIN_CASE] = {gItemIcon_CoinCase, gItemIconPalette_CoinCase}, - [ITEM_ITEMFINDER] = {gItemIcon_Itemfinder, gItemIconPalette_Itemfinder}, - [ITEM_OLD_ROD] = {gItemIcon_OldRod, gItemIconPalette_OldRod}, - [ITEM_GOOD_ROD] = {gItemIcon_GoodRod, gItemIconPalette_GoodRod}, - [ITEM_SUPER_ROD] = {gItemIcon_SuperRod, gItemIconPalette_SuperRod}, - [ITEM_SS_TICKET] = {gItemIcon_SSTicket, gItemIconPalette_SSTicket}, - [ITEM_CONTEST_PASS] = {gItemIcon_ContestPass, gItemIconPalette_ContestPass}, - [ITEM_10B] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_WAILMER_PAIL] = {gItemIcon_WailmerPail, gItemIconPalette_WailmerPail}, - [ITEM_DEVON_GOODS] = {gItemIcon_DevonGoods, gItemIconPalette_DevonGoods}, - [ITEM_SOOT_SACK] = {gItemIcon_SootSack, gItemIconPalette_SootSack}, - [ITEM_BASEMENT_KEY] = {gItemIcon_BasementKey, gItemIconPalette_OldKey}, - [ITEM_ACRO_BIKE] = {gItemIcon_AcroBike, gItemIconPalette_AcroBike}, - [ITEM_POKEBLOCK_CASE] = {gItemIcon_PokeblockCase, gItemIconPalette_PokeblockCase}, - [ITEM_LETTER] = {gItemIcon_Letter, gItemIconPalette_LavaCookieAndLetter}, - [ITEM_EON_TICKET] = {gItemIcon_EonTicket, gItemIconPalette_EonTicket}, - [ITEM_RED_ORB] = {gItemIcon_Orb, gItemIconPalette_RedOrb}, - [ITEM_BLUE_ORB] = {gItemIcon_Orb, gItemIconPalette_BlueOrb}, - [ITEM_SCANNER] = {gItemIcon_Scanner, gItemIconPalette_Scanner}, - [ITEM_GO_GOGGLES] = {gItemIcon_GoGoggles, gItemIconPalette_GoGoggles}, - [ITEM_METEORITE] = {gItemIcon_Meteorite, gItemIconPalette_Meteorite}, - [ITEM_ROOM_1_KEY] = {gItemIcon_Room1Key, gItemIconPalette_Key}, - [ITEM_ROOM_2_KEY] = {gItemIcon_Room2Key, gItemIconPalette_Key}, - [ITEM_ROOM_4_KEY] = {gItemIcon_Room4Key, gItemIconPalette_Key}, - [ITEM_ROOM_6_KEY] = {gItemIcon_Room6Key, gItemIconPalette_Key}, - [ITEM_STORAGE_KEY] = {gItemIcon_StorageKey, gItemIconPalette_OldKey}, - [ITEM_ROOT_FOSSIL] = {gItemIcon_RootFossil, gItemIconPalette_HoennFossil}, - [ITEM_CLAW_FOSSIL] = {gItemIcon_ClawFossil, gItemIconPalette_HoennFossil}, - [ITEM_DEVON_SCOPE] = {gItemIcon_DevonScope, gItemIconPalette_DevonScope}, - // TMs / HMs + [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}, @@ -360,6 +672,56 @@ const u32 *const gItemIconTable[][2] = [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}, @@ -368,39 +730,79 @@ const u32 *const gItemIconTable[][2] = [ITEM_HM06] = {gItemIcon_HM, gItemIconPalette_FightingTMHM}, [ITEM_HM07] = {gItemIcon_HM, gItemIconPalette_WaterTMHM}, [ITEM_HM08] = {gItemIcon_HM, gItemIconPalette_WaterTMHM}, - // ???????? - [ITEM_15B] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - [ITEM_15C] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - // FireRed/LeafGreen key items - [ITEM_OAKS_PARCEL] = {gItemIcon_OaksParcel, gItemIconPalette_OaksParcel}, + // 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_OAKS_PARCEL] = {gItemIcon_OaksParcel, gItemIconPalette_OaksParcel}, [ITEM_SECRET_KEY] = {gItemIcon_SecretKey, gItemIconPalette_SecretKey}, [ITEM_BIKE_VOUCHER] = {gItemIcon_BikeVoucher, gItemIconPalette_BikeVoucher}, [ITEM_GOLD_TEETH] = {gItemIcon_GoldTeeth, gItemIconPalette_GoldTeeth}, - [ITEM_OLD_AMBER] = {gItemIcon_OldAmber, gItemIconPalette_OldAmber}, [ITEM_CARD_KEY] = {gItemIcon_CardKey, gItemIconPalette_CardKey}, [ITEM_LIFT_KEY] = {gItemIcon_LiftKey, gItemIconPalette_Key}, - [ITEM_HELIX_FOSSIL] = {gItemIcon_HelixFossil, gItemIconPalette_KantoFossil}, - [ITEM_DOME_FOSSIL] = {gItemIcon_DomeFossil, gItemIconPalette_KantoFossil}, [ITEM_SILPH_SCOPE] = {gItemIcon_SilphScope, gItemIconPalette_SilphScope}, - [ITEM_BICYCLE] = {gItemIcon_Bicycle, gItemIconPalette_Bicycle}, - [ITEM_TOWN_MAP] = {gItemIcon_TownMap, gItemIconPalette_TownMap}, - [ITEM_VS_SEEKER] = {gItemIcon_VSSeeker, gItemIconPalette_VSSeeker}, - [ITEM_FAME_CHECKER] = {gItemIcon_FameChecker, gItemIconPalette_FameChecker}, - [ITEM_TM_CASE] = {gItemIcon_TMCase, gItemIconPalette_TMCase}, - [ITEM_BERRY_POUCH] = {gItemIcon_BerryPouch, gItemIconPalette_BerryPouch}, - [ITEM_TEACHY_TV] = {gItemIcon_TeachyTV, gItemIconPalette_TeachyTV}, [ITEM_TRI_PASS] = {gItemIcon_TriPass, gItemIconPalette_TriPass}, [ITEM_RAINBOW_PASS] = {gItemIcon_RainbowPass, gItemIconPalette_RainbowPass}, [ITEM_TEA] = {gItemIcon_Tea, gItemIconPalette_Tea}, - [ITEM_MYSTIC_TICKET] = {gItemIcon_MysticTicket, gItemIconPalette_MysticTicket}, - [ITEM_AURORA_TICKET] = {gItemIcon_AuroraTicket, gItemIconPalette_AuroraTicket}, - [ITEM_POWDER_JAR] = {gItemIcon_PowderJar, gItemIconPalette_PowderJar}, [ITEM_RUBY] = {gItemIcon_Gem, gItemIconPalette_Ruby}, [ITEM_SAPPHIRE] = {gItemIcon_Gem, gItemIconPalette_Sapphire}, - // Emerald-only key items - [ITEM_MAGMA_EMBLEM] = {gItemIcon_MagmaEmblem, gItemIconPalette_MagmaEmblem}, - [ITEM_OLD_SEA_MAP] = {gItemIcon_OldSeaMap, gItemIconPalette_OldSeaMap}, // Return to field arrow [ITEM_FIELD_ARROW] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 370cd2022c..4e45e943d9 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -11,50 +11,11 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, -// Pokeballs - - [ITEM_MASTER_BALL] = - { - .name = _("MASTER BALL"), - .itemId = ITEM_MASTER_BALL, - .price = 0, - .description = sMasterBallDesc, - .pocket = POCKET_POKE_BALLS, - .type = ITEM_MASTER_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, - .secondaryId = ITEM_MASTER_BALL - FIRST_BALL, - }, - - [ITEM_ULTRA_BALL] = - { - .name = _("ULTRA BALL"), - .itemId = ITEM_ULTRA_BALL, - .price = 1200, - .description = sUltraBallDesc, - .pocket = POCKET_POKE_BALLS, - .type = ITEM_ULTRA_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, - .secondaryId = ITEM_ULTRA_BALL - FIRST_BALL, - }, - - [ITEM_GREAT_BALL] = - { - .name = _("GREAT BALL"), - .itemId = ITEM_GREAT_BALL, - .price = 600, - .description = sGreatBallDesc, - .pocket = POCKET_POKE_BALLS, - .type = ITEM_GREAT_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, - .secondaryId = ITEM_GREAT_BALL - FIRST_BALL, - }, +// Poké Balls [ITEM_POKE_BALL] = { - .name = _("POKé BALL"), + .name = _("Poké Ball"), .itemId = ITEM_POKE_BALL, .price = 200, .description = sPokeBallDesc, @@ -65,22 +26,74 @@ const struct Item gItems[] = .secondaryId = ITEM_POKE_BALL - FIRST_BALL, }, - [ITEM_SAFARI_BALL] = + [ITEM_GREAT_BALL] = { - .name = _("SAFARI BALL"), - .itemId = ITEM_SAFARI_BALL, - .price = 0, - .description = sSafariBallDesc, + .name = _("Great Ball"), + .itemId = ITEM_GREAT_BALL, + .price = 600, + .description = sGreatBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_SAFARI_BALL - FIRST_BALL, + .type = ITEM_GREAT_BALL - FIRST_BALL, .battleUsage = ITEM_B_USE_OTHER, .battleUseFunc = ItemUseInBattle_PokeBall, - .secondaryId = ITEM_SAFARI_BALL - FIRST_BALL, + .secondaryId = ITEM_GREAT_BALL - FIRST_BALL, + }, + + [ITEM_ULTRA_BALL] = + { + .name = _("Ultra Ball"), + .itemId = ITEM_ULTRA_BALL, + .price = 800, + .description = sUltraBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_ULTRA_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_ULTRA_BALL - FIRST_BALL, + }, + + [ITEM_MASTER_BALL] = + { + .name = _("Master Ball"), + .itemId = ITEM_MASTER_BALL, + .price = 0, + .description = sMasterBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_MASTER_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_MASTER_BALL - FIRST_BALL, + }, + + [ITEM_PREMIER_BALL] = + { + .name = _("Premier Ball"), + .itemId = ITEM_PREMIER_BALL, + .price = 20, + .description = sPremierBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_PREMIER_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_PREMIER_BALL - FIRST_BALL, + }, + + [ITEM_HEAL_BALL] = + { + .name = _("Heal Ball"), + .itemId = ITEM_HEAL_BALL, + .price = 300, + .description = sHealBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_HEAL_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_HEAL_BALL - FIRST_BALL, }, [ITEM_NET_BALL] = { - .name = _("NET BALL"), + .name = _("Net Ball"), .itemId = ITEM_NET_BALL, .price = 1000, .description = sNetBallDesc, @@ -91,22 +104,9 @@ const struct Item gItems[] = .secondaryId = ITEM_NET_BALL - FIRST_BALL, }, - [ITEM_DIVE_BALL] = - { - .name = _("DIVE BALL"), - .itemId = ITEM_DIVE_BALL, - .price = 1000, - .description = sDiveBallDesc, - .pocket = POCKET_POKE_BALLS, - .type = ITEM_DIVE_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, - .secondaryId = ITEM_DIVE_BALL - FIRST_BALL, - }, - [ITEM_NEST_BALL] = { - .name = _("NEST BALL"), + .name = _("Nest Ball"), .itemId = ITEM_NEST_BALL, .price = 1000, .description = sNestBallDesc, @@ -117,22 +117,35 @@ const struct Item gItems[] = .secondaryId = ITEM_NEST_BALL - FIRST_BALL, }, - [ITEM_REPEAT_BALL] = + [ITEM_DIVE_BALL] = { - .name = _("REPEAT BALL"), - .itemId = ITEM_REPEAT_BALL, + .name = _("Dive Ball"), + .itemId = ITEM_DIVE_BALL, .price = 1000, - .description = sRepeatBallDesc, + .description = sDiveBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_REPEAT_BALL - FIRST_BALL, + .type = ITEM_DIVE_BALL - FIRST_BALL, .battleUsage = ITEM_B_USE_OTHER, .battleUseFunc = ItemUseInBattle_PokeBall, - .secondaryId = ITEM_REPEAT_BALL - FIRST_BALL, + .secondaryId = ITEM_DIVE_BALL - FIRST_BALL, + }, + + [ITEM_DUSK_BALL] = + { + .name = _("Dusk Ball"), + .itemId = ITEM_DUSK_BALL, + .price = 1000, + .description = sDuskBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_DUSK_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_DUSK_BALL - FIRST_BALL, }, [ITEM_TIMER_BALL] = { - .name = _("TIMER BALL"), + .name = _("Timer Ball"), .itemId = ITEM_TIMER_BALL, .price = 1000, .description = sTimerBallDesc, @@ -143,9 +156,35 @@ const struct Item gItems[] = .secondaryId = ITEM_TIMER_BALL - FIRST_BALL, }, + [ITEM_QUICK_BALL] = + { + .name = _("Quick Ball"), + .itemId = ITEM_QUICK_BALL, + .price = 1000, + .description = sQuickBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_QUICK_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_QUICK_BALL - FIRST_BALL, + }, + + [ITEM_REPEAT_BALL] = + { + .name = _("Repeat Ball"), + .itemId = ITEM_REPEAT_BALL, + .price = 1000, + .description = sRepeatBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_REPEAT_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_REPEAT_BALL - FIRST_BALL, + }, + [ITEM_LUXURY_BALL] = { - .name = _("LUXURY BALL"), + .name = _("Luxury Ball"), .itemId = ITEM_LUXURY_BALL, .price = 1000, .description = sLuxuryBallDesc, @@ -156,26 +195,182 @@ const struct Item gItems[] = .secondaryId = ITEM_LUXURY_BALL - FIRST_BALL, }, - [ITEM_PREMIER_BALL] = + [ITEM_LEVEL_BALL] = { - .name = _("PREMIER BALL"), - .itemId = ITEM_PREMIER_BALL, - .price = 200, - .description = sPremierBallDesc, + .name = _("Level Ball"), + .itemId = ITEM_LEVEL_BALL, + .price = 0, + .description = sLevelBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_PREMIER_BALL - FIRST_BALL, + .type = ITEM_LEVEL_BALL - FIRST_BALL, .battleUsage = ITEM_B_USE_OTHER, .battleUseFunc = ItemUseInBattle_PokeBall, - .secondaryId = ITEM_PREMIER_BALL - FIRST_BALL, + .secondaryId = ITEM_LEVEL_BALL - FIRST_BALL, + }, + + [ITEM_LURE_BALL] = + { + .name = _("Lure Ball"), + .itemId = ITEM_LURE_BALL, + .price = 0, + .description = sLureBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_LURE_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_LURE_BALL - FIRST_BALL, + }, + + [ITEM_MOON_BALL] = + { + .name = _("Moon Ball"), + .itemId = ITEM_MOON_BALL, + .price = 0, + .description = sMoonBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_MOON_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_MOON_BALL - FIRST_BALL, + }, + + [ITEM_FRIEND_BALL] = + { + .name = _("Friend Ball"), + .itemId = ITEM_FRIEND_BALL, + .price = 0, + .description = sFriendBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_FRIEND_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_FRIEND_BALL - FIRST_BALL, + }, + + [ITEM_LOVE_BALL] = + { + .name = _("Love Ball"), + .itemId = ITEM_LOVE_BALL, + .price = 0, + .description = sLoveBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_LOVE_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_LOVE_BALL - FIRST_BALL, + }, + + [ITEM_FAST_BALL] = + { + .name = _("Fast Ball"), + .itemId = ITEM_FAST_BALL, + .price = 0, + .description = sFastBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_FAST_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_FAST_BALL - FIRST_BALL, + }, + + [ITEM_HEAVY_BALL] = + { + .name = _("Heavy Ball"), + .itemId = ITEM_HEAVY_BALL, + .price = 0, + .description = sHeavyBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_HEAVY_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_HEAVY_BALL - FIRST_BALL, + }, + + [ITEM_DREAM_BALL] = + { + .name = _("Dream Ball"), + .itemId = ITEM_DREAM_BALL, + .price = 0, + .description = sDreamBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_DREAM_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_DREAM_BALL - FIRST_BALL, + }, + + [ITEM_SAFARI_BALL] = + { + .name = _("Safari Ball"), + .itemId = ITEM_SAFARI_BALL, + .price = 0, + .description = sSafariBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_SAFARI_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_SAFARI_BALL - FIRST_BALL, + }, + + [ITEM_SPORT_BALL] = + { + .name = _("Sport Ball"), + .itemId = ITEM_SPORT_BALL, + .price = 0, + .description = sSportBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_SPORT_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_SPORT_BALL - FIRST_BALL, + }, + + [ITEM_PARK_BALL] = + { + .name = _("Park Ball"), + .itemId = ITEM_PARK_BALL, + .price = 0, + .description = sParkBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_PARK_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_PARK_BALL - FIRST_BALL, + }, + + [ITEM_BEAST_BALL] = + { + .name = _("Beast Ball"), + .itemId = ITEM_BEAST_BALL, + .price = 0, + .description = sBeastBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_BEAST_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_BEAST_BALL - FIRST_BALL, + }, + + [ITEM_CHERISH_BALL] = + { + .name = _("Cherish Ball"), + .itemId = ITEM_CHERISH_BALL, + .price = 0, + .description = sCherishBallDesc, + .pocket = POCKET_POKE_BALLS, + .type = ITEM_CHERISH_BALL - FIRST_BALL, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_PokeBall, + .secondaryId = ITEM_CHERISH_BALL - FIRST_BALL, }, // Medicine [ITEM_POTION] = { - .name = _("POTION"), + .name = _("Potion"), .itemId = ITEM_POTION, - .price = 300, + .price = 200, .holdEffectParam = 20, .description = sPotionDesc, .pocket = POCKET_ITEMS, @@ -183,90 +378,42 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_ANTIDOTE] = + [ITEM_SUPER_POTION] = { - .name = _("ANTIDOTE"), - .itemId = ITEM_ANTIDOTE, - .price = 100, - .description = sAntidoteDesc, + .name = _("Super Potion"), + .itemId = ITEM_SUPER_POTION, + .price = 700, + .holdEffectParam = 60, + .description = sSuperPotionDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_BURN_HEAL] = + [ITEM_HYPER_POTION] = { - .name = _("BURN HEAL"), - .itemId = ITEM_BURN_HEAL, - .price = 250, - .description = sBurnHealDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, - }, - - [ITEM_ICE_HEAL] = - { - .name = _("ICE HEAL"), - .itemId = ITEM_ICE_HEAL, - .price = 250, - .description = sIceHealDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, - }, - - [ITEM_AWAKENING] = - { - .name = _("AWAKENING"), - .itemId = ITEM_AWAKENING, - .price = 250, - .description = sAwakeningDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, - }, - - [ITEM_PARALYZE_HEAL] = - { - .name = _("PARLYZ HEAL"), - .itemId = ITEM_PARALYZE_HEAL, - .price = 200, - .description = sParalyzeHealDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, - }, - - [ITEM_FULL_RESTORE] = - { - .name = _("FULL RESTORE"), - .itemId = ITEM_FULL_RESTORE, - .price = 3000, - .holdEffectParam = 255, - .description = sFullRestoreDesc, + .name = _("Hyper Potion"), + .itemId = ITEM_HYPER_POTION, + .price = 1500, + .holdEffectParam = 120, + .description = sHyperPotionDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_MAX_POTION] = { - .name = _("MAX POTION"), + .name = _("Max Potion"), .itemId = ITEM_MAX_POTION, .price = 2500, .holdEffectParam = 255, @@ -276,65 +423,41 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_HYPER_POTION] = + [ITEM_FULL_RESTORE] = { - .name = _("HYPER POTION"), - .itemId = ITEM_HYPER_POTION, - .price = 1200, - .holdEffectParam = 200, - .description = sHyperPotionDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, - }, - - [ITEM_SUPER_POTION] = - { - .name = _("SUPER POTION"), - .itemId = ITEM_SUPER_POTION, - .price = 700, - .holdEffectParam = 50, - .description = sSuperPotionDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, - }, - - [ITEM_FULL_HEAL] = - { - .name = _("FULL HEAL"), - .itemId = ITEM_FULL_HEAL, - .price = 600, - .description = sFullHealDesc, + .name = _("Full Restore"), + .itemId = ITEM_FULL_RESTORE, + .price = 3000, + .holdEffectParam = 255, + .description = sFullRestoreDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_REVIVE] = { - .name = _("REVIVE"), + .name = _("Revive"), .itemId = ITEM_REVIVE, - .price = 1500, + .price = 2000, .description = sReviveDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_MAX_REVIVE] = { - .name = _("MAX REVIVE"), + .name = _("Max Revive"), .itemId = ITEM_MAX_REVIVE, .price = 4000, .description = sMaxReviveDesc, @@ -343,55 +466,59 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_FRESH_WATER] = { - .name = _("FRESH WATER"), + .name = _("Fresh Water"), .itemId = ITEM_FRESH_WATER, .price = 200, - .holdEffectParam = 50, + .holdEffectParam = 30, .description = sFreshWaterDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_SODA_POP] = { - .name = _("SODA POP"), + .name = _("Soda Pop"), .itemId = ITEM_SODA_POP, .price = 300, - .holdEffectParam = 60, + .holdEffectParam = 50, .description = sSodaPopDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_LEMONADE] = { - .name = _("LEMONADE"), + .name = _("Lemonade"), .itemId = ITEM_LEMONADE, - .price = 350, - .holdEffectParam = 80, + .price = 400, + .holdEffectParam = 70, .description = sLemonadeDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_MOOMOO_MILK] = { - .name = _("MOOMOO MILK"), + .name = _("Moomoo Milk"), .itemId = ITEM_MOOMOO_MILK, - .price = 500, + .price = 600, .holdEffectParam = 100, .description = sMoomooMilkDesc, .pocket = POCKET_ITEMS, @@ -399,11 +526,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_ENERGY_POWDER] = { - .name = _("ENERGYPOWDER"), + .name = _("Energy Powder"), .itemId = ITEM_ENERGY_POWDER, .price = 500, .description = sEnergyPowderDesc, @@ -412,37 +540,40 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_ENERGY_ROOT] = { - .name = _("ENERGY ROOT"), + .name = _("Energy Root"), .itemId = ITEM_ENERGY_ROOT, - .price = 800, + .price = 1200, .description = sEnergyRootDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_HEAL_POWDER] = { - .name = _("HEAL POWDER"), + .name = _("Heal Powder"), .itemId = ITEM_HEAL_POWDER, - .price = 450, + .price = 300, .description = sHealPowderDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_REVIVAL_HERB] = { - .name = _("REVIVAL HERB"), + .name = _("Revival Herb"), .itemId = ITEM_REVIVAL_HERB, .price = 2800, .description = sRevivalHerbDesc, @@ -451,11 +582,96 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_ANTIDOTE] = + { + .name = _("Antidote"), + .itemId = ITEM_ANTIDOTE, + .price = 200, + .description = sAntidoteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_PARALYZE_HEAL] = + { + .name = _("Paralyze Heal"), + .itemId = ITEM_PARALYZE_HEAL, + .price = 300, + .description = sParalyzeHealDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_BURN_HEAL] = + { + .name = _("Burn Heal"), + .itemId = ITEM_BURN_HEAL, + .price = 300, + .description = sBurnHealDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_ICE_HEAL] = + { + .name = _("Ice Heal"), + .itemId = ITEM_ICE_HEAL, + .price = 100, + .description = sIceHealDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_AWAKENING] = + { + .name = _("Awakening"), + .itemId = ITEM_AWAKENING, + .price = 100, + .description = sAwakeningDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_FULL_HEAL] = + { + .name = _("Full Heal"), + .itemId = ITEM_FULL_HEAL, + .price = 400, + .description = sFullHealDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_ETHER] = { - .name = _("ETHER"), + .name = _("Ether"), .itemId = ITEM_ETHER, .price = 1200, .holdEffectParam = 10, @@ -465,11 +681,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_PPRecovery, + .flingPower = 30, }, [ITEM_MAX_ETHER] = { - .name = _("MAX ETHER"), + .name = _("Max Ether"), .itemId = ITEM_MAX_ETHER, .price = 2000, .holdEffectParam = 255, @@ -479,11 +696,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_PPRecovery, + .flingPower = 30, }, [ITEM_ELIXIR] = { - .name = _("ELIXIR"), + .name = _("Elixir"), .itemId = ITEM_ELIXIR, .price = 3000, .holdEffectParam = 10, @@ -493,11 +711,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_PPRecovery, + .flingPower = 30, }, [ITEM_MAX_ELIXIR] = { - .name = _("MAX ELIXIR"), + .name = _("Max Elixir"), .itemId = ITEM_MAX_ELIXIR, .price = 4500, .holdEffectParam = 255, @@ -507,89 +726,14 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_PPRecovery, - }, - - [ITEM_LAVA_COOKIE] = - { - .name = _("LAVA COOKIE"), - .itemId = ITEM_LAVA_COOKIE, - .price = 200, - .description = sLavaCookieDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, - }, - - [ITEM_BLUE_FLUTE] = - { - .name = _("BLUE FLUTE"), - .itemId = ITEM_BLUE_FLUTE, - .price = 100, - .description = sBlueFluteDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, - }, - - [ITEM_YELLOW_FLUTE] = - { - .name = _("YELLOW FLUTE"), - .itemId = ITEM_YELLOW_FLUTE, - .price = 200, - .description = sYellowFluteDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, - }, - - [ITEM_RED_FLUTE] = - { - .name = _("RED FLUTE"), - .itemId = ITEM_RED_FLUTE, - .price = 300, - .description = sRedFluteDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, - }, - - [ITEM_BLACK_FLUTE] = - { - .name = _("BLACK FLUTE"), - .itemId = ITEM_BLACK_FLUTE, - .price = 400, - .holdEffectParam = 50, - .description = sBlackFluteDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute, - }, - - [ITEM_WHITE_FLUTE] = - { - .name = _("WHITE FLUTE"), - .itemId = ITEM_WHITE_FLUTE, - .price = 500, - .holdEffectParam = 150, - .description = sWhiteFluteDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute, + .flingPower = 30, }, [ITEM_BERRY_JUICE] = { - .name = _("BERRY JUICE"), + .name = _("Berry Juice"), .itemId = ITEM_BERRY_JUICE, - .price = 100, + .price = 200, .holdEffect = HOLD_EFFECT_RESTORE_HP, .holdEffectParam = 20, .description = sBerryJuiceDesc, @@ -598,881 +742,1878 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, [ITEM_SACRED_ASH] = { - .name = _("SACRED ASH"), + .name = _("Sacred Ash"), .itemId = ITEM_SACRED_ASH, - .price = 200, + .price = 50000, .description = sSacredAshDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_SacredAsh, + .flingPower = 30, }, -// Collectibles - - [ITEM_SHOAL_SALT] = + [ITEM_SWEET_HEART] = { - .name = _("SHOAL SALT"), - .itemId = ITEM_SHOAL_SALT, - .price = 20, - .description = sShoalSaltDesc, + .name = _("Sweet Heart"), + .itemId = ITEM_SWEET_HEART, + .price = 3000, + .holdEffectParam = 20, + .description = sSweetHeartDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_SHOAL_SHELL] = + [ITEM_MAX_HONEY] = { - .name = _("SHOAL SHELL"), - .itemId = ITEM_SHOAL_SHELL, - .price = 20, - .description = sShoalShellDesc, + .name = _("Max Honey"), + .itemId = ITEM_MAX_HONEY, + .price = 8000, + .description = sMaxHoneyDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_RED_SHARD] = +// Regional Specialties + + [ITEM_PEWTER_CRUNCHIES] = { - .name = _("RED SHARD"), - .itemId = ITEM_RED_SHARD, - .price = 200, - .description = sRedShardDesc, + .name = _("PewtrCrnches"), + .itemId = ITEM_PEWTER_CRUNCHIES, + .price = 250, + .description = sPewterCrunchiesDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_BLUE_SHARD] = + [ITEM_RAGE_CANDY_BAR] = { - .name = _("BLUE SHARD"), - .itemId = ITEM_BLUE_SHARD, - .price = 200, - .description = sBlueShardDesc, + .name = _("RageCandyBar"), + .itemId = ITEM_RAGE_CANDY_BAR, + .price = 350, + .description = sRageCandyBarDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_YELLOW_SHARD] = + [ITEM_LAVA_COOKIE] = { - .name = _("YELLOW SHARD"), - .itemId = ITEM_YELLOW_SHARD, - .price = 200, - .description = sYellowShardDesc, + .name = _("Lava Cookie"), + .itemId = ITEM_LAVA_COOKIE, + .price = 350, + .description = sLavaCookieDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_GREEN_SHARD] = + [ITEM_OLD_GATEAU] = { - .name = _("GREEN SHARD"), - .itemId = ITEM_GREEN_SHARD, - .price = 200, - .description = sGreenShardDesc, + .name = _("Old Gateau"), + .itemId = ITEM_OLD_GATEAU, + .price = 350, + .description = sOldGateauDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_034] = + [ITEM_CASTELIACONE] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("Casteliacone"), + .itemId = ITEM_CASTELIACONE, + .price = 350, + .description = sCasteliaconeDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_035] = + [ITEM_LUMIOSE_GALETTE] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("LumioseGlete"), + .itemId = ITEM_LUMIOSE_GALETTE, + .price = 350, + .description = sLumioseGaletteDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_036] = + [ITEM_SHALOUR_SABLE] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("ShalourSable"), + .itemId = ITEM_SHALOUR_SABLE, + .price = 350, + .description = sShalourSableDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, - [ITEM_037] = + [ITEM_BIG_MALASADA] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("Big Malasada"), + .itemId = ITEM_BIG_MALASADA, + .price = 350, + .description = sBigMalasadaDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_038] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_039] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_03A] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_03B] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_03C] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_03D] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_03E] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, }, // Vitamins [ITEM_HP_UP] = { - .name = _("HP UP"), + .name = _("HP Up"), .itemId = ITEM_HP_UP, - .price = 9800, + .price = 10000, .description = sHPUpDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, }, [ITEM_PROTEIN] = { - .name = _("PROTEIN"), + .name = _("Protein"), .itemId = ITEM_PROTEIN, - .price = 9800, + .price = 10000, .description = sProteinDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, }, [ITEM_IRON] = { - .name = _("IRON"), + .name = _("Iron"), .itemId = ITEM_IRON, - .price = 9800, + .price = 10000, .description = sIronDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - }, - - [ITEM_CARBOS] = - { - .name = _("CARBOS"), - .itemId = ITEM_CARBOS, - .price = 9800, - .description = sCarbosDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, }, [ITEM_CALCIUM] = { - .name = _("CALCIUM"), + .name = _("Calcium"), .itemId = ITEM_CALCIUM, - .price = 9800, + .price = 10000, .description = sCalciumDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - }, - - [ITEM_RARE_CANDY] = - { - .name = _("RARE CANDY"), - .itemId = ITEM_RARE_CANDY, - .price = 4800, - .description = sRareCandyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_RareCandy, - }, - - [ITEM_PP_UP] = - { - .name = _("PP UP"), - .itemId = ITEM_PP_UP, - .price = 9800, - .description = sPPUpDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_PPUp, + .flingPower = 30, }, [ITEM_ZINC] = { - .name = _("ZINC"), + .name = _("Zinc"), .itemId = ITEM_ZINC, - .price = 9800, + .price = 10000, .description = sZincDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_CARBOS] = + { + .name = _("Carbos"), + .itemId = ITEM_CARBOS, + .price = 10000, + .description = sCarbosDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_PP_UP] = + { + .name = _("PP Up"), + .itemId = ITEM_PP_UP, + .price = 10000, + .description = sPPUpDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_PPUp, + .flingPower = 30, }, [ITEM_PP_MAX] = { - .name = _("PP MAX"), + .name = _("PP Max"), .itemId = ITEM_PP_MAX, - .price = 9800, + .price = 10000, .description = sPPMaxDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_PPUp, + .flingPower = 30, }, - [ITEM_048] = +// EV Feathers + + [ITEM_HEALTH_FEATHER] = { - .name = _("????????"), - .itemId = ITEM_NONE, + .name = _("HealthFeather"), + .itemId = ITEM_HEALTH_FEATHER, + .price = 300, + .description = sHealthFeatherDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 20, + }, + + [ITEM_MUSCLE_FEATHER] = + { + .name = _("MuscleFeather"), + .itemId = ITEM_MUSCLE_FEATHER, + .price = 300, + .description = sMuscleFeatherDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 20, + }, + + [ITEM_RESIST_FEATHER] = + { + .name = _("ResistFeather"), + .itemId = ITEM_RESIST_FEATHER, + .price = 300, + .description = sResistFeatherDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 20, + }, + + [ITEM_GENIUS_FEATHER] = + { + .name = _("GeniusFeather"), + .itemId = ITEM_GENIUS_FEATHER, + .price = 300, + .description = sGeniusFeatherDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 20, + }, + + [ITEM_CLEVER_FEATHER] = + { + .name = _("CleverFeather"), + .itemId = ITEM_CLEVER_FEATHER, + .price = 300, + .description = sCleverFeatherDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 20, + }, + + [ITEM_SWIFT_FEATHER] = + { + .name = _("SwiftFeather"), + .itemId = ITEM_SWIFT_FEATHER, + .price = 300, + .description = sSwiftFeatherDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 20, + }, + +// Ability Modifiers + + [ITEM_ABILITY_CAPSULE] = + { + .name = _("AbilityCapsle"), + .itemId = ITEM_ABILITY_CAPSULE, + .price = 10000, + .holdEffectParam = 0, + .description = sAbilityCapsuleDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_AbilityCapsule, + }, + + [ITEM_ABILITY_PATCH] = + { + .name = _("AbilityPatch"), + .itemId = ITEM_ABILITY_PATCH, .price = 0, - .description = sDummyDesc, + .holdEffectParam = 0, + .description = sAbilityPatchDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_AbilityPatch, }, -// Battle items +// Mints - [ITEM_GUARD_SPEC] = + [ITEM_LONELY_MINT] = { - .name = _("GUARD SPEC."), - .itemId = ITEM_GUARD_SPEC, + .name = _("Lonely Mint"), + .itemId = ITEM_LONELY_MINT, + .price = 20, + .description = sLonelyMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_ADAMANT_MINT] = + { + .name = _("Adamant Mint"), + .itemId = ITEM_ADAMANT_MINT, + .price = 20, + .description = sAdamantMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_NAUGHTY_MINT] = + { + .name = _("Naughty Mint"), + .itemId = ITEM_NAUGHTY_MINT, + .price = 20, + .description = sNaughtyMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_BRAVE_MINT] = + { + .name = _("Brave Mint"), + .itemId = ITEM_BRAVE_MINT, + .price = 20, + .description = sBraveMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_BOLD_MINT] = + { + .name = _("Bold Mint"), + .itemId = ITEM_BOLD_MINT, + .price = 20, + .description = sBoldMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_IMPISH_MINT] = + { + .name = _("Impish Mint"), + .itemId = ITEM_IMPISH_MINT, + .price = 20, + .description = sImpishMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_LAX_MINT] = + { + .name = _("Lax Mint"), + .itemId = ITEM_LAX_MINT, + .price = 20, + .description = sLaxMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_RELAXED_MINT] = + { + .name = _("Relaxed Mint"), + .itemId = ITEM_RELAXED_MINT, + .price = 20, + .description = sRelaxedMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_MODEST_MINT] = + { + .name = _("Modest Mint"), + .itemId = ITEM_MODEST_MINT, + .price = 20, + .description = sModestMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_MILD_MINT] = + { + .name = _("Mild Mint"), + .itemId = ITEM_MILD_MINT, + .price = 20, + .description = sMildMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_RASH_MINT] = + { + .name = _("Rash Mint"), + .itemId = ITEM_RASH_MINT, + .price = 20, + .description = sRashMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_QUIET_MINT] = + { + .name = _("Quiet Mint"), + .itemId = ITEM_QUIET_MINT, + .price = 20, + .description = sQuietMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_CALM_MINT] = + { + .name = _("Calm Mint"), + .itemId = ITEM_CALM_MINT, + .price = 20, + .description = sCalmMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_GENTLE_MINT] = + { + .name = _("Gentle Mint"), + .itemId = ITEM_GENTLE_MINT, + .price = 20, + .description = sGentleMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_CAREFUL_MINT] = + { + .name = _("Careful Mint"), + .itemId = ITEM_CAREFUL_MINT, + .price = 20, + .description = sCarefulMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_SASSY_MINT] = + { + .name = _("Sassy Mint"), + .itemId = ITEM_SASSY_MINT, + .price = 20, + .description = sSassyMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_TIMID_MINT] = + { + .name = _("Timid Mint"), + .itemId = ITEM_TIMID_MINT, + .price = 20, + .description = sTimidMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_HASTY_MINT] = + { + .name = _("Hasty Mint"), + .itemId = ITEM_HASTY_MINT, + .price = 20, + .description = sHastyMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_JOLLY_MINT] = + { + .name = _("Jolly Mint"), + .itemId = ITEM_JOLLY_MINT, + .price = 20, + .description = sJollyMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_NAIVE_MINT] = + { + .name = _("Naive Mint"), + .itemId = ITEM_NAIVE_MINT, + .price = 20, + .description = sNaiveMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + + [ITEM_SERIOUS_MINT] = + { + .name = _("Serious Mint"), + .itemId = ITEM_SERIOUS_MINT, + .price = 20, + .description = sSeriousMintDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 10, + }, + +// Candy + + [ITEM_RARE_CANDY] = + { + .name = _("Rare Candy"), + .itemId = ITEM_RARE_CANDY, + .price = 10000, + .description = sRareCandyDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_RareCandy, + .flingPower = 30, + }, + + [ITEM_EXP_CANDY_XS] = + { + .name = _("Exp.Candy XS"), + .itemId = ITEM_EXP_CANDY_XS, + .price = 20, + .holdEffectParam = EXP_100, + .description = sExpCandyXSDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_RareCandy, + .flingPower = 30, + }, + + [ITEM_EXP_CANDY_S] = + { + .name = _("Exp.Candy S"), + .itemId = ITEM_EXP_CANDY_S, + .price = 240, + .holdEffectParam = EXP_800, + .description = sExpCandyXSDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_RareCandy, + .flingPower = 30, + }, + + [ITEM_EXP_CANDY_M] = + { + .name = _("Exp.Candy M"), + .itemId = ITEM_EXP_CANDY_M, + .price = 1000, + .holdEffectParam = EXP_3000, + .description = sExpCandyMDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_RareCandy, + .flingPower = 30, + }, + + [ITEM_EXP_CANDY_L] = + { + .name = _("Exp.Candy L"), + .itemId = ITEM_EXP_CANDY_L, + .price = 3000, + .holdEffectParam = EXP_10000, + .description = sExpCandyLDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_RareCandy, + .flingPower = 30, + }, + + [ITEM_EXP_CANDY_XL] = + { + .name = _("Exp.Candy XL"), + .itemId = ITEM_EXP_CANDY_XL, + .price = 10000, + .holdEffectParam = EXP_30000, + .description = sExpCandyXLDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_RareCandy, + .flingPower = 30, + }, + + [ITEM_DYNAMAX_CANDY] = + { + .name = _("DynamaxCandy"), + .itemId = ITEM_DYNAMAX_CANDY, + .price = 0, + .description = sDynamaxCandyDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 30, + }, + +// Medicinal Flutes + + [ITEM_BLUE_FLUTE] = + { + .name = _("Blue Flute"), + .itemId = ITEM_BLUE_FLUTE, + .price = 20, + .description = sBlueFluteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_YELLOW_FLUTE] = + { + .name = _("Yellow Flute"), + .itemId = ITEM_YELLOW_FLUTE, + .price = 20, + .description = sYellowFluteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_RED_FLUTE] = + { + .name = _("Red Flute"), + .itemId = ITEM_RED_FLUTE, + .price = 20, + .description = sRedFluteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .battleUsage = ITEM_B_USE_MEDICINE, + .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 30, + }, + +// Encounter-modifying Flutes + + [ITEM_BLACK_FLUTE] = + { + .name = _("Black Flute"), + .itemId = ITEM_BLACK_FLUTE, + .price = 20, + .holdEffectParam = 50, + .description = sBlackFluteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute, + .flingPower = 30, + }, + + [ITEM_WHITE_FLUTE] = + { + .name = _("White Flute"), + .itemId = ITEM_WHITE_FLUTE, + .price = 20, + .holdEffectParam = 150, + .description = sWhiteFluteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute, + .flingPower = 30, + }, + +// Encounter Modifiers + + [ITEM_REPEL] = + { + .name = _("Repel"), + .itemId = ITEM_REPEL, + .price = 400, + .holdEffectParam = 100, + .description = sRepelDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Repel, + .flingPower = 30, + }, + + [ITEM_SUPER_REPEL] = + { + .name = _("Super Repel"), + .itemId = ITEM_SUPER_REPEL, .price = 700, - .description = sGuardSpecDesc, + .holdEffectParam = 200, + .description = sSuperRepelDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .fieldUseFunc = ItemUseOutOfBattle_Repel, + .flingPower = 30, }, - [ITEM_DIRE_HIT] = + [ITEM_MAX_REPEL] = { - .name = _("DIRE HIT"), - .itemId = ITEM_DIRE_HIT, - .price = 650, - .description = sDireHitDesc, + .name = _("Max Repel"), + .itemId = ITEM_MAX_REPEL, + .price = 900, + .holdEffectParam = 250, + .description = sMaxRepelDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Repel, + .flingPower = 30, + }, + + [ITEM_LURE] = + { + .name = _("Lure"), + .itemId = ITEM_LURE, + .price = 350, + .holdEffectParam = 100, + .description = sLureDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .secondaryId = 0, + .flingPower = 30, }, + [ITEM_SUPER_LURE] = + { + .name = _("Super Lure"), + .itemId = ITEM_SUPER_LURE, + .price = 500, + .holdEffectParam = 200, + .description = sSuperLureDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 0, + .flingPower = 30, + }, + + [ITEM_MAX_LURE] = + { + .name = _("Max Lure"), + .itemId = ITEM_MAX_LURE, + .price = 700, + .holdEffectParam = 250, + .description = sMaxLureDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 0, + .flingPower = 30, + }, + + [ITEM_ESCAPE_ROPE] = + { + .name = _("Escape Rope"), + .itemId = ITEM_ESCAPE_ROPE, + .description = sEscapeRopeDesc, + #if I_KEY_ESCAPE_ROPE >= GEN_8 + .price = 0, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + #else + .price = 1000, + .pocket = POCKET_ITEMS, + #endif + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_EscapeRope, + .flingPower = 30, + }, + +// X Items + [ITEM_X_ATTACK] = { - .name = _("X ATTACK"), + .name = _("X Attack"), .itemId = ITEM_X_ATTACK, - .price = 500, + .price = 1000, .description = sXAttackDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .battleUsage = ITEM_B_USE_OTHER, .battleUseFunc = ItemUseInBattle_StatIncrease, + .flingPower = 30, }, - [ITEM_X_DEFEND] = + [ITEM_X_DEFENSE] = { - .name = _("X DEFEND"), - .itemId = ITEM_X_DEFEND, - .price = 550, - .description = sXDefendDesc, + .name = _("X Defense"), + .itemId = ITEM_X_DEFENSE, + .price = 2000, + .description = sXDefenseDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .battleUsage = ITEM_B_USE_OTHER, .battleUseFunc = ItemUseInBattle_StatIncrease, + .flingPower = 30, + }, + + [ITEM_X_SP_ATK] = + { + .name = _("X Sp. Atk"), + .itemId = ITEM_X_SP_ATK, + .price = 1000, + .description = sXSpAtkDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_StatIncrease, + .flingPower = 30, + }, + + [ITEM_X_SP_DEF] = + { + .name = _("X Sp. Def"), + .itemId = ITEM_X_SP_DEF, + .price = 2000, + .description = sXSpDefDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_StatIncrease, + .flingPower = 30, }, [ITEM_X_SPEED] = { - .name = _("X SPEED"), + .name = _("X Speed"), .itemId = ITEM_X_SPEED, - .price = 350, + .price = 1000, .description = sXSpeedDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .battleUsage = ITEM_B_USE_OTHER, .battleUseFunc = ItemUseInBattle_StatIncrease, + .flingPower = 30, }, [ITEM_X_ACCURACY] = { - .name = _("X ACCURACY"), + .name = _("X Accuracy"), .itemId = ITEM_X_ACCURACY, - .price = 950, + .price = 1000, .description = sXAccuracyDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .battleUsage = ITEM_B_USE_OTHER, .battleUseFunc = ItemUseInBattle_StatIncrease, + .flingPower = 30, }, - [ITEM_X_SPECIAL] = + [ITEM_DIRE_HIT] = { - .name = _("X SPECIAL"), - .itemId = ITEM_X_SPECIAL, - .price = 350, - .description = sXSpecialDesc, + .name = _("Dire Hit"), + .itemId = ITEM_DIRE_HIT, + .price = 1000, + .description = sDireHitDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .battleUsage = ITEM_B_USE_OTHER, .battleUseFunc = ItemUseInBattle_StatIncrease, + .flingPower = 30, + }, + + [ITEM_GUARD_SPEC] = + { + .name = _("Guard Spec."), + .itemId = ITEM_GUARD_SPEC, + .price = 1500, + .description = sGuardSpecDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_StatIncrease, + .flingPower = 30, }, [ITEM_POKE_DOLL] = { - .name = _("POKé DOLL"), + .name = _("Poké Doll"), .itemId = ITEM_POKE_DOLL, - .price = 1000, + .price = 100, .description = sPokeDollDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .battleUsage = ITEM_B_USE_OTHER, .battleUseFunc = ItemUseInBattle_Escape, + .flingPower = 30, }, [ITEM_FLUFFY_TAIL] = { - .name = _("FLUFFY TAIL"), + .name = _("Fluffy Tail"), .itemId = ITEM_FLUFFY_TAIL, - .price = 1000, + .price = 100, .description = sFluffyTailDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .battleUsage = ITEM_B_USE_OTHER, .battleUseFunc = ItemUseInBattle_Escape, + .flingPower = 30, }, - [ITEM_052] = + [ITEM_POKE_TOY] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("Poké Toy"), + .itemId = ITEM_POKE_TOY, + .price = 100, + .description = sPokeToyDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_Escape, + .flingPower = 30, }, -// Field items - - [ITEM_SUPER_REPEL] = + [ITEM_MAX_MUSHROOMS] = { - .name = _("SUPER REPEL"), - .itemId = ITEM_SUPER_REPEL, - .price = 500, - .holdEffectParam = 200, - .description = sSuperRepelDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Repel, - }, - - [ITEM_MAX_REPEL] = - { - .name = _("MAX REPEL"), - .itemId = ITEM_MAX_REPEL, - .price = 700, - .holdEffectParam = 250, - .description = sMaxRepelDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Repel, - }, - - [ITEM_ESCAPE_ROPE] = - { - .name = _("ESCAPE ROPE"), - .itemId = ITEM_ESCAPE_ROPE, - .price = 550, - .description = sEscapeRopeDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_EscapeRope, - }, - - [ITEM_REPEL] = - { - .name = _("REPEL"), - .itemId = ITEM_REPEL, - .price = 350, - .holdEffectParam = 100, - .description = sRepelDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_Repel, - }, - - [ITEM_057] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("MaxMushrooms"), + .itemId = ITEM_MAX_MUSHROOMS, + .price = 8000, + .description = sMaxMushroomsDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .battleUsage = ITEM_B_USE_OTHER, + .battleUseFunc = ItemUseInBattle_StatIncrease, // Todo + .flingPower = 30, }, - [ITEM_058] = +// Treasures + + [ITEM_BOTTLE_CAP] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_059] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_05A] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_05B] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_05C] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - -// Evolution stones - - [ITEM_SUN_STONE] = - { - .name = _("SUN STONE"), - .itemId = ITEM_SUN_STONE, - .price = 2100, - .description = sSunStoneDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, - }, - - [ITEM_MOON_STONE] = - { - .name = _("MOON STONE"), - .itemId = ITEM_MOON_STONE, - .price = 0, - .description = sMoonStoneDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, - }, - - [ITEM_FIRE_STONE] = - { - .name = _("FIRE STONE"), - .itemId = ITEM_FIRE_STONE, - .price = 2100, - .description = sFireStoneDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, - }, - - [ITEM_THUNDER_STONE] = - { - .name = _("THUNDERSTONE"), - .itemId = ITEM_THUNDER_STONE, - .price = 2100, - .description = sThunderStoneDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, - }, - - [ITEM_WATER_STONE] = - { - .name = _("WATER STONE"), - .itemId = ITEM_WATER_STONE, - .price = 2100, - .description = sWaterStoneDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, - }, - - [ITEM_LEAF_STONE] = - { - .name = _("LEAF STONE"), - .itemId = ITEM_LEAF_STONE, - .price = 2100, - .description = sLeafStoneDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, - }, - - [ITEM_063] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_064] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_065] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_066] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - -// Valuable items - - [ITEM_TINY_MUSHROOM] = - { - .name = _("TINYMUSHROOM"), - .itemId = ITEM_TINY_MUSHROOM, - .price = 500, - .description = sTinyMushroomDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_BIG_MUSHROOM] = - { - .name = _("BIG MUSHROOM"), - .itemId = ITEM_BIG_MUSHROOM, + .name = _("Bottle Cap"), + .itemId = ITEM_BOTTLE_CAP, .price = 5000, - .description = sBigMushroomDesc, + .description = sBottleCapDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, }, - [ITEM_069] = + [ITEM_GOLD_BOTTLE_CAP] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_PEARL] = - { - .name = _("PEARL"), - .itemId = ITEM_PEARL, - .price = 1400, - .description = sPearlDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_BIG_PEARL] = - { - .name = _("BIG PEARL"), - .itemId = ITEM_BIG_PEARL, - .price = 7500, - .description = sBigPearlDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_STARDUST] = - { - .name = _("STARDUST"), - .itemId = ITEM_STARDUST, - .price = 2000, - .description = sStardustDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_STAR_PIECE] = - { - .name = _("STAR PIECE"), - .itemId = ITEM_STAR_PIECE, - .price = 9800, - .description = sStarPieceDesc, + .name = _("GoldBottlCap"), + .itemId = ITEM_GOLD_BOTTLE_CAP, + .price = 10000, + .description = sGoldBottleCapDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, }, [ITEM_NUGGET] = { - .name = _("NUGGET"), + .name = _("Nugget"), .itemId = ITEM_NUGGET, .price = 10000, .description = sNuggetDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BIG_NUGGET] = + { + .name = _("Big Nugget"), + .itemId = ITEM_BIG_NUGGET, + .price = 40000, + .description = sBigNuggetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_TINY_MUSHROOM] = + { + .name = _("Tiny Mushroom"), + .itemId = ITEM_TINY_MUSHROOM, + .price = 500, + .description = sTinyMushroomDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BIG_MUSHROOM] = + { + .name = _("Big Mushroom"), + .itemId = ITEM_BIG_MUSHROOM, + .price = 5000, + .description = sBigMushroomDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BALM_MUSHROOM] = + { + .name = _("Balm Mushroom"), + .itemId = ITEM_BALM_MUSHROOM, + .price = 15000, + .description = sBalmMushroomDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_PEARL] = + { + .name = _("Pearl"), + .itemId = ITEM_PEARL, + .price = 2000, + .description = sPearlDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BIG_PEARL] = + { + .name = _("Big Pearl"), + .itemId = ITEM_BIG_PEARL, + .price = 8000, + .description = sBigPearlDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_PEARL_STRING] = + { + .name = _("Pearl String"), + .itemId = ITEM_PEARL_STRING, + .price = 20000, + .description = sPearlStringDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_STARDUST] = + { + .name = _("Stardust"), + .itemId = ITEM_STARDUST, + .price = 3000, + .description = sStardustDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_STAR_PIECE] = + { + .name = _("Star Piece"), + .itemId = ITEM_STAR_PIECE, + .price = 12000, + .description = sStarPieceDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_COMET_SHARD] = + { + .name = _("Comet Shard"), + .itemId = ITEM_COMET_SHARD, + .price = 25000, + .description = sCometShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_SHOAL_SALT] = + { + .name = _("Shoal Salt"), + .itemId = ITEM_SHOAL_SALT, + .price = 20, + .description = sShoalSaltDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_SHOAL_SHELL] = + { + .name = _("Shoal Shell"), + .itemId = ITEM_SHOAL_SHELL, + .price = 20, + .description = sShoalShellDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_RED_SHARD] = + { + .name = _("Red Shard"), + .itemId = ITEM_RED_SHARD, + .price = 1000, + .description = sRedShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BLUE_SHARD] = + { + .name = _("Blue Shard"), + .itemId = ITEM_BLUE_SHARD, + .price = 1000, + .description = sBlueShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_YELLOW_SHARD] = + { + .name = _("Yellow Shard"), + .itemId = ITEM_YELLOW_SHARD, + .price = 1000, + .description = sYellowShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_GREEN_SHARD] = + { + .name = _("Green Shard"), + .itemId = ITEM_GREEN_SHARD, + .price = 1000, + .description = sGreenShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, }, [ITEM_HEART_SCALE] = { - .name = _("HEART SCALE"), + .name = _("Heart Scale"), .itemId = ITEM_HEART_SCALE, .price = 100, .description = sHeartScaleDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, }, - [ITEM_070] = + [ITEM_HONEY] = { - .name = _("????????"), - .itemId = ITEM_NONE, + .name = _("Honey"), + .itemId = ITEM_HONEY, + .price = 300, + .description = sHoneyDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_RARE_BONE] = + { + .name = _("Rare Bone"), + .itemId = ITEM_RARE_BONE, + .price = 5000, + .description = sRareBoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_ODD_KEYSTONE] = + { + .name = _("Odd Keystone"), + .itemId = ITEM_ODD_KEYSTONE, + .price = 2100, + .description = sOddKeystoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_PRETTY_FEATHER] = + { + .name = _("PrettyFeather"), + .itemId = ITEM_PRETTY_FEATHER, + .price = 1000, + .description = sPrettyFeatherDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 20, + }, + + [ITEM_RELIC_COPPER] = + { + .name = _("Relic Copper"), + .itemId = ITEM_RELIC_COPPER, .price = 0, - .description = sDummyDesc, + .description = sRelicCopperDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_RELIC_SILVER] = + { + .name = _("Relic Silver"), + .itemId = ITEM_RELIC_SILVER, + .price = 0, + .description = sRelicSilverDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_RELIC_GOLD] = + { + .name = _("Relic Gold"), + .itemId = ITEM_RELIC_GOLD, + .price = 0, + .description = sRelicGoldDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_RELIC_VASE] = + { + .name = _("Relic Vase"), + .itemId = ITEM_RELIC_VASE, + .price = 0, + .description = sRelicVaseDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_RELIC_BAND] = + { + .name = _("Relic Band"), + .itemId = ITEM_RELIC_BAND, + .price = 0, + .description = sRelicBandDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_RELIC_STATUE] = + { + .name = _("Relic Statue"), + .itemId = ITEM_RELIC_STATUE, + .price = 0, + .description = sRelicStatueDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_RELIC_CROWN] = + { + .name = _("Relic Crown"), + .itemId = ITEM_RELIC_CROWN, + .price = 0, + .description = sRelicCrownDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_STRANGE_SOUVENIR] = + { + .name = _("StrngeSouvnr"), + .itemId = ITEM_STRANGE_SOUVENIR, + .price = 3000, + .description = sStrangeSouvenirDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + +// Fossils + + [ITEM_HELIX_FOSSIL] = + { + .name = _("Helix Fossil"), + .itemId = ITEM_HELIX_FOSSIL, + .description = sHelixFossilDesc, + #if I_KEY_FOSSILS >= GEN_4 + .price = 7000, + .pocket = POCKET_ITEMS, + #else + .price = 0, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + #endif + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_DOME_FOSSIL] = + { + .name = _("Dome Fossil"), + .itemId = ITEM_DOME_FOSSIL, + .description = sDomeFossilDesc, + #if I_KEY_FOSSILS >= GEN_4 + .price = 7000, + .pocket = POCKET_ITEMS, + #else + .price = 0, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + #endif + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_OLD_AMBER] = + { + .name = _("Old Amber"), + .itemId = ITEM_OLD_AMBER, + .description = sOldAmberDesc, + #if I_KEY_FOSSILS >= GEN_4 + .price = 10000, + .pocket = POCKET_ITEMS, + #else + .price = 0, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + #endif + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_ROOT_FOSSIL] = + { + .name = _("Root Fossil"), + .itemId = ITEM_ROOT_FOSSIL, + .description = sRootFossilDesc, + #if I_KEY_FOSSILS >= GEN_4 + .price = 7000, + .pocket = POCKET_ITEMS, + #else + .price = 0, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + #endif + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_CLAW_FOSSIL] = + { + .name = _("Claw Fossil"), + .itemId = ITEM_CLAW_FOSSIL, + .description = sClawFossilDesc, + #if I_KEY_FOSSILS >= GEN_4 + .price = 7000, + .pocket = POCKET_ITEMS, + #else + .price = 0, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + #endif + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_ARMOR_FOSSIL] = + { + .name = _("Armor Fossil"), + .itemId = ITEM_ARMOR_FOSSIL, + .price = 7000, + .description = sArmorFossilDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_SKULL_FOSSIL] = + { + .name = _("Skull Fossil"), + .itemId = ITEM_SKULL_FOSSIL, + .price = 7000, + .description = sSkullFossilDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_COVER_FOSSIL] = + { + .name = _("Cover Fossil"), + .itemId = ITEM_COVER_FOSSIL, + .price = 7000, + .description = sCoverFossilDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_PLUME_FOSSIL] = + { + .name = _("Plume Fossil"), + .itemId = ITEM_PLUME_FOSSIL, + .price = 7000, + .description = sPlumeFossilDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_JAW_FOSSIL] = + { + .name = _("Jaw Fossil"), + .itemId = ITEM_JAW_FOSSIL, + .price = 7000, + .description = sJawFossilDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_SAIL_FOSSIL] = + { + .name = _("Sail Fossil"), + .itemId = ITEM_SAIL_FOSSIL, + .price = 7000, + .description = sSailFossilDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_FOSSILIZED_BIRD] = + { + .name = _("FosslzedBird"), + .itemId = ITEM_FOSSILIZED_BIRD, + .price = 5000, + .description = sFossilizedBirdDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_FOSSILIZED_FISH] = + { + .name = _("FosslzedFish"), + .itemId = ITEM_FOSSILIZED_FISH, + .price = 5000, + .description = sFossilizedFishDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_FOSSILIZED_DRAKE] = + { + .name = _("FosslzedDrke"), + .itemId = ITEM_FOSSILIZED_DRAKE, + .price = 5000, + .description = sFossilizedDrakeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_FOSSILIZED_DINO] = + { + .name = _("FosslzedDino"), + .itemId = ITEM_FOSSILIZED_DINO, + .price = 5000, + .description = sFossilizedDinoDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + +// Mulch + + [ITEM_GROWTH_MULCH] = + { + .name = _("Growth Mulch"), + .itemId = ITEM_GROWTH_MULCH, + .price = 200, + .description = sGrowthMulchDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 30, + }, + + [ITEM_DAMP_MULCH] = + { + .name = _("Damp Mulch"), + .itemId = ITEM_DAMP_MULCH, + .price = 200, + .description = sDampMulchDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 30, + }, + + [ITEM_STABLE_MULCH] = + { + .name = _("Stable Mulch"), + .itemId = ITEM_STABLE_MULCH, + .price = 200, + .description = sStableMulchDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 30, + }, + + [ITEM_GOOEY_MULCH] = + { + .name = _("Gooey Mulch"), + .itemId = ITEM_GOOEY_MULCH, + .price = 200, + .description = sGooeyMulchDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 30, + }, + + [ITEM_RICH_MULCH] = + { + .name = _("Rich Mulch"), + .itemId = ITEM_RICH_MULCH, + .price = 200, + .description = sRichMulchDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 30, + }, + + [ITEM_SURPRISE_MULCH] = + { + .name = _("SurprseMulch"), + .itemId = ITEM_SURPRISE_MULCH, + .price = 200, + .description = sSurpriseMulchDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 30, + }, + + [ITEM_BOOST_MULCH] = + { + .name = _("Boost Mulch"), + .itemId = ITEM_BOOST_MULCH, + .price = 200, + .description = sBoostMulchDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 30, + }, + + [ITEM_AMAZE_MULCH] = + { + .name = _("Amaze Mulch"), + .itemId = ITEM_AMAZE_MULCH, + .price = 200, + .description = sAmazeMulchDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 30, + }, + +// Apricorns + + [ITEM_RED_APRICORN] = + { + .name = _("Red Apricorn"), + .itemId = ITEM_RED_APRICORN, + .price = 200, + .description = sRedApricornDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_071] = + [ITEM_BLUE_APRICORN] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("Blue Apricorn"), + .itemId = ITEM_BLUE_APRICORN, + .price = 200, + .description = sBlueApricornDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_072] = + [ITEM_YELLOW_APRICORN] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("YellwApricorn"), + .itemId = ITEM_YELLOW_APRICORN, + .price = 200, + .description = sYellowApricornDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_073] = + [ITEM_GREEN_APRICORN] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("GreenApricorn"), + .itemId = ITEM_GREEN_APRICORN, + .price = 200, + .description = sGreenApricornDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_074] = + [ITEM_PINK_APRICORN] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("Pink Apricorn"), + .itemId = ITEM_PINK_APRICORN, + .price = 200, + .description = sPinkApricornDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_075] = + [ITEM_WHITE_APRICORN] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("WhiteApricorn"), + .itemId = ITEM_WHITE_APRICORN, + .price = 200, + .description = sWhiteApricornDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_076] = + [ITEM_BLACK_APRICORN] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("BlackApricorn"), + .itemId = ITEM_BLACK_APRICORN, + .price = 200, + .description = sBlackApricornDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_077] = + [ITEM_WISHING_PIECE] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("WishingPiece"), + .itemId = ITEM_WISHING_PIECE, + .price = 20, + .description = sWishingPieceDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .flingPower = 50, }, - [ITEM_078] = + [ITEM_GALARICA_TWIG] = { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, + .name = _("GalaricaTwig"), + .itemId = ITEM_GALARICA_TWIG, + .price = 40, + .description = sGalaricaTwigDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_ARMORITE_ORE] = + { + .name = _("Armorite Ore"), + .itemId = ITEM_ARMORITE_ORE, + .price = 40, + .description = sArmoriteOreDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_DYNITE_ORE] = + { + .name = _("Dynite Ore"), + .itemId = ITEM_DYNITE_ORE, + .price = 20, + .description = sDyniteOreDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, }, // Mail + [ITEM_ORANGE_MAIL] = { - .name = _("ORANGE MAIL"), + .name = _("Orange Mail"), .itemId = ITEM_ORANGE_MAIL, .price = 50, .description = sOrangeMailDesc, @@ -1484,7 +2625,7 @@ const struct Item gItems[] = [ITEM_HARBOR_MAIL] = { - .name = _("HARBOR MAIL"), + .name = _("Harbor Mail"), .itemId = ITEM_HARBOR_MAIL, .price = 50, .description = sHarborMailDesc, @@ -1496,7 +2637,7 @@ const struct Item gItems[] = [ITEM_GLITTER_MAIL] = { - .name = _("GLITTER MAIL"), + .name = _("Glitter Mail"), .itemId = ITEM_GLITTER_MAIL, .price = 50, .description = sGlitterMailDesc, @@ -1508,7 +2649,7 @@ const struct Item gItems[] = [ITEM_MECH_MAIL] = { - .name = _("MECH MAIL"), + .name = _("Mech Mail"), .itemId = ITEM_MECH_MAIL, .price = 50, .description = sMechMailDesc, @@ -1520,7 +2661,7 @@ const struct Item gItems[] = [ITEM_WOOD_MAIL] = { - .name = _("WOOD MAIL"), + .name = _("Wood Mail"), .itemId = ITEM_WOOD_MAIL, .price = 50, .description = sWoodMailDesc, @@ -1532,7 +2673,7 @@ const struct Item gItems[] = [ITEM_WAVE_MAIL] = { - .name = _("WAVE MAIL"), + .name = _("Wave Mail"), .itemId = ITEM_WAVE_MAIL, .price = 50, .description = sWaveMailDesc, @@ -1544,7 +2685,7 @@ const struct Item gItems[] = [ITEM_BEAD_MAIL] = { - .name = _("BEAD MAIL"), + .name = _("Bead Mail"), .itemId = ITEM_BEAD_MAIL, .price = 50, .description = sBeadMailDesc, @@ -1556,7 +2697,7 @@ const struct Item gItems[] = [ITEM_SHADOW_MAIL] = { - .name = _("SHADOW MAIL"), + .name = _("Shadow Mail"), .itemId = ITEM_SHADOW_MAIL, .price = 50, .description = sShadowMailDesc, @@ -1568,7 +2709,7 @@ const struct Item gItems[] = [ITEM_TROPIC_MAIL] = { - .name = _("TROPIC MAIL"), + .name = _("Tropic Mail"), .itemId = ITEM_TROPIC_MAIL, .price = 50, .description = sTropicMailDesc, @@ -1580,7 +2721,7 @@ const struct Item gItems[] = [ITEM_DREAM_MAIL] = { - .name = _("DREAM MAIL"), + .name = _("Dream Mail"), .itemId = ITEM_DREAM_MAIL, .price = 50, .description = sDreamMailDesc, @@ -1592,7 +2733,7 @@ const struct Item gItems[] = [ITEM_FAB_MAIL] = { - .name = _("FAB MAIL"), + .name = _("Fab Mail"), .itemId = ITEM_FAB_MAIL, .price = 50, .description = sFabMailDesc, @@ -1604,9 +2745,9 @@ const struct Item gItems[] = [ITEM_RETRO_MAIL] = { - .name = _("RETRO MAIL"), + .name = _("Retro Mail"), .itemId = ITEM_RETRO_MAIL, - .price = 0, + .price = 50, .description = sRetroMailDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_MAIL, @@ -1614,11 +2755,4118 @@ const struct Item gItems[] = .secondaryId = ITEM_TO_MAIL(ITEM_RETRO_MAIL), }, +// Evolution Items + + [ITEM_FIRE_STONE] = + { + .name = _("Fire Stone"), + .itemId = ITEM_FIRE_STONE, + .price = 3000, + .description = sFireStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_WATER_STONE] = + { + .name = _("Water Stone"), + .itemId = ITEM_WATER_STONE, + .price = 3000, + .description = sWaterStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_THUNDER_STONE] = + { + .name = _("Thunder Stone"), + .itemId = ITEM_THUNDER_STONE, + .price = 3000, + .description = sThunderStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_LEAF_STONE] = + { + .name = _("Leaf Stone"), + .itemId = ITEM_LEAF_STONE, + .price = 3000, + .description = sLeafStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_ICE_STONE] = + { + .name = _("Ice Stone"), + .itemId = ITEM_ICE_STONE, + .price = 3000, + .description = sIceStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_SUN_STONE] = + { + .name = _("Sun Stone"), + .itemId = ITEM_SUN_STONE, + .price = 3000, + .description = sSunStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_MOON_STONE] = + { + .name = _("Moon Stone"), + .itemId = ITEM_MOON_STONE, + .price = 3000, + .description = sMoonStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_SHINY_STONE] = + { + .name = _("Shiny Stone"), + .itemId = ITEM_SHINY_STONE, + .price = 3000, + .description = sShinyStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_DUSK_STONE] = + { + .name = _("Dusk Stone"), + .itemId = ITEM_DUSK_STONE, + .price = 3000, + .description = sDuskStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 80, + }, + + [ITEM_DAWN_STONE] = + { + .name = _("Dawn Stone"), + .itemId = ITEM_DAWN_STONE, + .price = 3000, + .description = sDawnStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 80, + }, + + [ITEM_SWEET_APPLE] = + { + .name = _("Sweet Apple"), + .itemId = ITEM_SWEET_APPLE, + .price = 2200, + .description = sSweetAppleDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_TART_APPLE] = + { + .name = _("Tart Apple"), + .itemId = ITEM_TART_APPLE, + .price = 2200, + .description = sTartAppleDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_CRACKED_POT] = + { + .name = _("Cracked Pot"), + .itemId = ITEM_CRACKED_POT, + .price = 1600, + .description = sCrackedPotDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 80, + }, + + [ITEM_CHIPPED_POT] = + { + .name = _("Chipped Pot"), + .itemId = ITEM_CHIPPED_POT, + .price = 38000, + .description = sChippedPotDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 80, + }, + + [ITEM_GALARICA_CUFF] = + { + .name = _("GalaricaCuff"), + .itemId = ITEM_GALARICA_CUFF, + .price = 6000, + .description = sGalaricaCuffDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_GALARICA_WREATH] = + { + .name = _("GalrcaWreath"), + .itemId = ITEM_GALARICA_WREATH, + .price = 6000, + .description = sGalaricaWreathDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_DRAGON_SCALE] = + { + .name = _("Dragon Scale"), + .itemId = ITEM_DRAGON_SCALE, + .price = 2000, + .holdEffect = HOLD_EFFECT_DRAGON_SCALE, + .holdEffectParam = 10, + .description = sDragonScaleDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_UPGRADE] = + { + .name = _("Upgrade"), + .itemId = ITEM_UPGRADE, + .price = 2000, + .holdEffect = HOLD_EFFECT_UPGRADE, + .description = sUpgradeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_PROTECTOR] = + { + .name = _("Protector"), + .itemId = ITEM_PROTECTOR, + .price = 2000, + .description = sProtectorDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_ELECTIRIZER] = + { + .name = _("Electirizer"), + .itemId = ITEM_ELECTIRIZER, + .price = 2000, + .description = sElectirizerDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_MAGMARIZER] = + { + .name = _("Magmarizer"), + .itemId = ITEM_MAGMARIZER, + .price = 2000, + .description = sMagmarizerDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_DUBIOUS_DISC] = + { + .name = _("Dubious Disc"), + .itemId = ITEM_DUBIOUS_DISC, + .price = 2000, + .description = sDubiousDiscDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 50, + }, + + [ITEM_REAPER_CLOTH] = + { + .name = _("Reaper Cloth"), + .itemId = ITEM_REAPER_CLOTH, + .price = 2000, + .description = sReaperClothDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_PRISM_SCALE] = + { + .name = _("Prism Scale"), + .itemId = ITEM_PRISM_SCALE, + .price = 2000, + .description = sPrismScaleDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_WHIPPED_DREAM] = + { + .name = _("Whipped Dream"), + .itemId = ITEM_WHIPPED_DREAM, + .price = 2000, + .description = sWhippedDreamDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SACHET] = + { + .name = _("Sachet"), + .itemId = ITEM_SACHET, + .price = 2000, + .description = sSachetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_OVAL_STONE] = + { + .name = _("Oval Stone"), + .itemId = ITEM_OVAL_STONE, + .price = 2000, + .description = sOvalStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_STRAWBERRY_SWEET] = + { + .name = _("StrwbrySweet"), + .itemId = ITEM_STRAWBERRY_SWEET, + .price = 500, + .description = sStrawberrySweetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_LOVE_SWEET] = + { + .name = _("Love Sweet"), + .itemId = ITEM_LOVE_SWEET, + .price = 500, + .description = sLoveSweetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_BERRY_SWEET] = + { + .name = _("Berry Sweet"), + .itemId = ITEM_BERRY_SWEET, + .price = 500, + .description = sBerrySweetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_CLOVER_SWEET] = + { + .name = _("Clover Sweet"), + .itemId = ITEM_CLOVER_SWEET, + .price = 500, + .description = sCloverSweetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_FLOWER_SWEET] = + { + .name = _("Flower Sweet"), + .itemId = ITEM_FLOWER_SWEET, + .price = 500, + .description = sFlowerSweetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_STAR_SWEET] = + { + .name = _("Star Sweet"), + .itemId = ITEM_STAR_SWEET, + .price = 500, + .description = sStarSweetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_RIBBON_SWEET] = + { + .name = _("Ribbon Sweet"), + .itemId = ITEM_RIBBON_SWEET, + .price = 500, + .description = sRibbonSweetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_EVERSTONE] = + { + .name = _("Everstone"), + .itemId = ITEM_EVERSTONE, + .price = 3000, + .holdEffect = HOLD_EFFECT_PREVENT_EVOLVE, + .description = sEverstoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + +// Nectars + + [ITEM_RED_NECTAR] = + { + .name = _("Red Nectar"), + .itemId = ITEM_RED_NECTAR, + .price = 300, + .holdEffectParam = 0, + .description = sRedNectarDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse, + .secondaryId = FORM_ITEM_USE, + .flingPower = 10, + }, + + [ITEM_YELLOW_NECTAR] = + { + .name = _("Yellow Nectar"), + .itemId = ITEM_YELLOW_NECTAR, + .price = 300, + .holdEffectParam = 0, + .description = sYellowNectarDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse, + .secondaryId = FORM_ITEM_USE, + .flingPower = 10, + }, + + [ITEM_PINK_NECTAR] = + { + .name = _("Pink Nectar"), + .itemId = ITEM_PINK_NECTAR, + .price = 300, + .holdEffectParam = 0, + .description = sPinkNectarDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse, + .secondaryId = FORM_ITEM_USE, + .flingPower = 10, + }, + + [ITEM_PURPLE_NECTAR] = + { + .name = _("Purple Nectar"), + .itemId = ITEM_PURPLE_NECTAR, + .price = 300, + .holdEffectParam = 0, + .description = sPurpleNectarDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse, + .secondaryId = FORM_ITEM_USE, + .flingPower = 10, + }, + +// Plates + + [ITEM_FLAME_PLATE] = + { + .name = _("Flame Plate"), + .itemId = ITEM_FLAME_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sFlamePlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FIRE, + .flingPower = 90, + }, + + [ITEM_SPLASH_PLATE] = + { + .name = _("Splash Plate"), + .itemId = ITEM_SPLASH_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sSplashPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_WATER, + .flingPower = 90, + }, + + [ITEM_ZAP_PLATE] = + { + .name = _("Zap Plate"), + .itemId = ITEM_ZAP_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sZapPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ELECTRIC, + .flingPower = 90, + }, + + [ITEM_MEADOW_PLATE] = + { + .name = _("Meadow Plate"), + .itemId = ITEM_MEADOW_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sMeadowPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GRASS, + .flingPower = 90, + }, + + [ITEM_ICICLE_PLATE] = + { + .name = _("Icicle Plate"), + .itemId = ITEM_ICICLE_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sIciclePlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ICE, + .flingPower = 90, + }, + + [ITEM_FIST_PLATE] = + { + .name = _("Fist Plate"), + .itemId = ITEM_FIST_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sFistPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FIGHTING, + .flingPower = 90, + }, + + [ITEM_TOXIC_PLATE] = + { + .name = _("Toxic Plate"), + .itemId = ITEM_TOXIC_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sToxicPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_POISON, + .flingPower = 90, + }, + + [ITEM_EARTH_PLATE] = + { + .name = _("Earth Plate"), + .itemId = ITEM_EARTH_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sEarthPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GROUND, + .flingPower = 90, + }, + + [ITEM_SKY_PLATE] = + { + .name = _("Sky Plate"), + .itemId = ITEM_SKY_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sSkyPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FLYING, + .flingPower = 90, + }, + + [ITEM_MIND_PLATE] = + { + .name = _("Mind Plate"), + .itemId = ITEM_MIND_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sMindPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_PSYCHIC, + .flingPower = 90, + }, + + [ITEM_INSECT_PLATE] = + { + .name = _("Insect Plate"), + .itemId = ITEM_INSECT_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sInsectPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_BUG, + .flingPower = 90, + }, + + [ITEM_STONE_PLATE] = + { + .name = _("Stone Plate"), + .itemId = ITEM_STONE_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sStonePlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ROCK, + .flingPower = 90, + }, + + [ITEM_SPOOKY_PLATE] = + { + .name = _("Spooky Plate"), + .itemId = ITEM_SPOOKY_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sSpookyPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GHOST, + .flingPower = 90, + }, + + [ITEM_DRACO_PLATE] = + { + .name = _("Draco Plate"), + .itemId = ITEM_DRACO_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sDracoPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_DRAGON, + .flingPower = 90, + }, + + [ITEM_DREAD_PLATE] = + { + .name = _("Dread Plate"), + .itemId = ITEM_DREAD_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sDreadPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_DARK, + .flingPower = 90, + }, + + [ITEM_IRON_PLATE] = + { + .name = _("Iron Plate"), + .itemId = ITEM_IRON_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sIronPlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_STEEL, + .flingPower = 90, + }, + + [ITEM_PIXIE_PLATE] = + { + .name = _("Pixie Plate"), + .itemId = ITEM_PIXIE_PLATE, + .price = 1000, + .holdEffect = HOLD_EFFECT_PLATE, + .holdEffectParam = 20, + .description = sPixiePlateDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FAIRY, + .flingPower = 90, + }, + +// Drives + + [ITEM_DOUSE_DRIVE] = + { + .name = _("Douse Drive"), + .itemId = ITEM_DOUSE_DRIVE, + .price = 0, + .holdEffect = HOLD_EFFECT_DRIVE, + .description = sDouseDriveDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_WATER, + .flingPower = 70, + }, + + [ITEM_SHOCK_DRIVE] = + { + .name = _("Shock Drive"), + .itemId = ITEM_SHOCK_DRIVE, + .price = 0, + .holdEffect = HOLD_EFFECT_DRIVE, + .description = sShockDriveDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ELECTRIC, + .flingPower = 70, + }, + + [ITEM_BURN_DRIVE] = + { + .name = _("Burn Drive"), + .itemId = ITEM_BURN_DRIVE, + .price = 0, + .holdEffect = HOLD_EFFECT_DRIVE, + .description = sBurnDriveDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FIRE, + .flingPower = 70, + }, + + [ITEM_CHILL_DRIVE] = + { + .name = _("Chill Drive"), + .itemId = ITEM_CHILL_DRIVE, + .price = 0, + .holdEffect = HOLD_EFFECT_DRIVE, + .description = sChillDriveDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ICE, + .flingPower = 70, + }, + +// Memories + + [ITEM_FIRE_MEMORY] = + { + .name = _("Fire Memory"), + .itemId = ITEM_FIRE_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sFireMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FIRE, + .flingPower = 50, + }, + + [ITEM_WATER_MEMORY] = + { + .name = _("Water Memory"), + .itemId = ITEM_WATER_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sWaterMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_WATER, + .flingPower = 50, + }, + + [ITEM_ELECTRIC_MEMORY] = + { + .name = _("ElectrcMemory"), + .itemId = ITEM_ELECTRIC_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sElectricMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ELECTRIC, + .flingPower = 50, + }, + + [ITEM_GRASS_MEMORY] = + { + .name = _("Grass Memory"), + .itemId = ITEM_GRASS_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sGrassMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GRASS, + .flingPower = 50, + }, + + [ITEM_ICE_MEMORY] = + { + .name = _("Ice Memory"), + .itemId = ITEM_ICE_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sIceMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ICE, + .flingPower = 50, + }, + + [ITEM_FIGHTING_MEMORY] = + { + .name = _("FightngMemory"), + .itemId = ITEM_FIGHTING_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sFightingMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FIGHTING, + .flingPower = 50, + }, + + [ITEM_POISON_MEMORY] = + { + .name = _("Poison Memory"), + .itemId = ITEM_POISON_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sPoisonMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_POISON, + .flingPower = 50, + }, + + [ITEM_GROUND_MEMORY] = + { + .name = _("Ground Memory"), + .itemId = ITEM_GROUND_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sGroundMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GROUND, + .flingPower = 50, + }, + + [ITEM_FLYING_MEMORY] = + { + .name = _("Flying Memory"), + .itemId = ITEM_FLYING_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sFlyingMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FLYING, + .flingPower = 50, + }, + + [ITEM_PSYCHIC_MEMORY] = + { + .name = _("PsychicMemory"), + .itemId = ITEM_PSYCHIC_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sPsychicMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_PSYCHIC, + .flingPower = 50, + }, + + [ITEM_BUG_MEMORY] = + { + .name = _("Bug Memory"), + .itemId = ITEM_BUG_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sBugMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_BUG, + .flingPower = 50, + }, + + [ITEM_ROCK_MEMORY] = + { + .name = _("Rock Memory"), + .itemId = ITEM_ROCK_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sRockMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ROCK, + .flingPower = 50, + }, + + [ITEM_GHOST_MEMORY] = + { + .name = _("Ghost Memory"), + .itemId = ITEM_GHOST_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sGhostMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GHOST, + .flingPower = 50, + }, + + [ITEM_DRAGON_MEMORY] = + { + .name = _("Dragon Memory"), + .itemId = ITEM_DRAGON_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sDragonMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_DRAGON, + .flingPower = 50, + }, + + [ITEM_DARK_MEMORY] = + { + .name = _("Dark Memory"), + .itemId = ITEM_DARK_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sDarkMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_DARK, + .flingPower = 50, + }, + + [ITEM_STEEL_MEMORY] = + { + .name = _("Steel Memory"), + .itemId = ITEM_STEEL_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sSteelMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_STEEL, + .flingPower = 50, + }, + + [ITEM_FAIRY_MEMORY] = + { + .name = _("Fairy Memory"), + .itemId = ITEM_FAIRY_MEMORY, + .price = 1000, + .holdEffect = HOLD_EFFECT_MEMORY, + .holdEffectParam = 0, + .description = sFairyMemoryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FAIRY, + .flingPower = 50, + }, + + [ITEM_RUSTED_SWORD] = + { + .name = _("RustedSword"), + .itemId = ITEM_RUSTED_SWORD, + .price = 0, + .description = sRustedSwordDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_RUSTED_SHIELD] = + { + .name = _("RustedShield"), + .itemId = ITEM_RUSTED_SHIELD, + .price = 0, + .description = sRustedShieldDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + +// Colored Orbs + + [ITEM_RED_ORB] = + { + .name = _("Red Orb"), + .itemId = ITEM_RED_ORB, + .price = 0, + .holdEffect = HOLD_EFFECT_PRIMAL_ORB, + .description = sRedOrbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_BLUE_ORB] = + { + .name = _("Blue Orb"), + .itemId = ITEM_BLUE_ORB, + .price = 0, + .holdEffect = HOLD_EFFECT_PRIMAL_ORB, + .description = sBlueOrbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + +// Mega Stones + + [ITEM_VENUSAURITE] = + { + .name = _("Venusaurite"), + .itemId = ITEM_VENUSAURITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sVenusauriteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_CHARIZARDITE_X] = + { + .name = _("CharizarditeX"), + .itemId = ITEM_CHARIZARDITE_X, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sCharizarditeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_CHARIZARDITE_Y] = + { + .name = _("CharizarditeY"), + .itemId = ITEM_CHARIZARDITE_Y, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sCharizarditeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_BLASTOISINITE] = + { + .name = _("Blastoisinite"), + .itemId = ITEM_BLASTOISINITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sBlastoisiniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_BEEDRILLITE] = + { + .name = _("Beedrillite"), + .itemId = ITEM_BEEDRILLITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sBeedrilliteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_PIDGEOTITE] = + { + .name = _("Pidgeotite"), + .itemId = ITEM_PIDGEOTITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sPidgeotiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_ALAKAZITE] = + { + .name = _("Alakazite"), + .itemId = ITEM_ALAKAZITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sAlakaziteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SLOWBRONITE] = + { + .name = _("Slowbronite"), + .itemId = ITEM_SLOWBRONITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sSlowbroniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_GENGARITE] = + { + .name = _("Gengarite"), + .itemId = ITEM_GENGARITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sGengariteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_KANGASKHANITE] = + { + .name = _("Kangaskhanite"), + .itemId = ITEM_KANGASKHANITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sKangaskhaniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_PINSIRITE] = + { + .name = _("Pinsirite"), + .itemId = ITEM_PINSIRITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sPinsiriteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_GYARADOSITE] = + { + .name = _("Gyaradosite"), + .itemId = ITEM_GYARADOSITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sGyaradositeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_AERODACTYLITE] = + { + .name = _("Aerodactylite"), + .itemId = ITEM_AERODACTYLITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sAerodactyliteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_MEWTWONITE_X] = + { + .name = _("Mewtwonite X"), + .itemId = ITEM_MEWTWONITE_X, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sMewtwoniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_MEWTWONITE_Y] = + { + .name = _("Mewtwonite Y"), + .itemId = ITEM_MEWTWONITE_Y, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sMewtwoniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_AMPHAROSITE] = + { + .name = _("Ampharosite"), + .itemId = ITEM_AMPHAROSITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sAmpharositeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_STEELIXITE] = + { + .name = _("Steelixite"), + .itemId = ITEM_STEELIXITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sSteelixiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SCIZORITE] = + { + .name = _("Scizorite"), + .itemId = ITEM_SCIZORITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sScizoriteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_HERACRONITE] = + { + .name = _("Heracronite"), + .itemId = ITEM_HERACRONITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sHeracroniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_HOUNDOOMINITE] = + { + .name = _("Houndoominite"), + .itemId = ITEM_HOUNDOOMINITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sHoundoominiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_TYRANITARITE] = + { + .name = _("Tyranitarite"), + .itemId = ITEM_TYRANITARITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sTyranitariteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SCEPTILITE] = + { + .name = _("Sceptilite"), + .itemId = ITEM_SCEPTILITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sSceptiliteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_BLAZIKENITE] = + { + .name = _("Blazikenite"), + .itemId = ITEM_BLAZIKENITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sBlazikeniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SWAMPERTITE] = + { + .name = _("Swampertite"), + .itemId = ITEM_SWAMPERTITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sSwampertiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_GARDEVOIRITE] = + { + .name = _("Gardevoirite"), + .itemId = ITEM_GARDEVOIRITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sGardevoiriteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SABLENITE] = + { + .name = _("Sablenite"), + .itemId = ITEM_SABLENITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sSableniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_MAWILITE] = + { + .name = _("Mawilite"), + .itemId = ITEM_MAWILITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sMawiliteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_AGGRONITE] = + { + .name = _("Aggronite"), + .itemId = ITEM_AGGRONITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sAggroniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_MEDICHAMITE] = + { + .name = _("Medichamite"), + .itemId = ITEM_MEDICHAMITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sMedichamiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_MANECTITE] = + { + .name = _("Manectite"), + .itemId = ITEM_MANECTITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sManectiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SHARPEDONITE] = + { + .name = _("Sharpedonite"), + .itemId = ITEM_SHARPEDONITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sSharpedoniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_CAMERUPTITE] = + { + .name = _("Cameruptite"), + .itemId = ITEM_CAMERUPTITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sCameruptiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_ALTARIANITE] = + { + .name = _("Altarianite"), + .itemId = ITEM_ALTARIANITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sAltarianiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_BANETTITE] = + { + .name = _("Banettite"), + .itemId = ITEM_BANETTITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sBanettiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_ABSOLITE] = + { + .name = _("Absolite"), + .itemId = ITEM_ABSOLITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sAbsoliteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_GLALITITE] = + { + .name = _("Glalitite"), + .itemId = ITEM_GLALITITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sGlalititeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SALAMENCITE] = + { + .name = _("Salamencite"), + .itemId = ITEM_SALAMENCITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sSalamenciteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_METAGROSSITE] = + { + .name = _("Metagrossite"), + .itemId = ITEM_METAGROSSITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sMetagrossiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_LATIASITE] = + { + .name = _("Latiasite"), + .itemId = ITEM_LATIASITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sLatiasiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_LATIOSITE] = + { + .name = _("Latiosite"), + .itemId = ITEM_LATIOSITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sLatiositeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_LOPUNNITE] = + { + .name = _("Lopunnite"), + .itemId = ITEM_LOPUNNITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sLopunniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_GARCHOMPITE] = + { + .name = _("Garchompite"), + .itemId = ITEM_GARCHOMPITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sGarchompiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_LUCARIONITE] = + { + .name = _("Lucarionite"), + .itemId = ITEM_LUCARIONITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sLucarioniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_ABOMASITE] = + { + .name = _("Abomasite"), + .itemId = ITEM_ABOMASITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sAbomasiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_GALLADITE] = + { + .name = _("Galladite"), + .itemId = ITEM_GALLADITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sGalladiteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_AUDINITE] = + { + .name = _("Audinite"), + .itemId = ITEM_AUDINITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sAudiniteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_DIANCITE] = + { + .name = _("Diancite"), + .itemId = ITEM_DIANCITE, + .price = 0, + .holdEffect = HOLD_EFFECT_MEGA_STONE, + .description = sDianciteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + +// Gems + + [ITEM_NORMAL_GEM] = + { + .name = _("Normal Gem"), + .itemId = ITEM_NORMAL_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sNormalGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_NORMAL, + }, + + [ITEM_FIRE_GEM] = + { + .name = _("Fire Gem"), + .itemId = ITEM_FIRE_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sFireGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FIRE, + }, + + [ITEM_WATER_GEM] = + { + .name = _("Water Gem"), + .itemId = ITEM_WATER_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sWaterGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_WATER, + }, + + [ITEM_ELECTRIC_GEM] = + { + .name = _("Electric Gem"), + .itemId = ITEM_ELECTRIC_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sElectricGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ELECTRIC, + }, + + [ITEM_GRASS_GEM] = + { + .name = _("Grass Gem"), + .itemId = ITEM_GRASS_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sGrassGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GRASS, + }, + + [ITEM_ICE_GEM] = + { + .name = _("Ice Gem"), + .itemId = ITEM_ICE_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sIceGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ICE, + }, + + [ITEM_FIGHTING_GEM] = + { + .name = _("Fighting Gem"), + .itemId = ITEM_FIGHTING_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sFightingGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FIGHTING, + }, + + [ITEM_POISON_GEM] = + { + .name = _("Poison Gem"), + .itemId = ITEM_POISON_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sPoisonGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_POISON, + }, + + [ITEM_GROUND_GEM] = + { + .name = _("Ground Gem"), + .itemId = ITEM_GROUND_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sGroundGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GROUND, + }, + + [ITEM_FLYING_GEM] = + { + .name = _("Flying Gem"), + .itemId = ITEM_FLYING_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sFlyingGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FLYING, + }, + + [ITEM_PSYCHIC_GEM] = + { + .name = _("Psychic Gem"), + .itemId = ITEM_PSYCHIC_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sPsychicGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_PSYCHIC, + }, + + [ITEM_BUG_GEM] = + { + .name = _("Bug Gem"), + .itemId = ITEM_BUG_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sBugGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_BUG, + }, + + [ITEM_ROCK_GEM] = + { + .name = _("Rock Gem"), + .itemId = ITEM_ROCK_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sRockGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ROCK, + }, + + [ITEM_GHOST_GEM] = + { + .name = _("Ghost Gem"), + .itemId = ITEM_GHOST_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sGhostGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GHOST, + }, + + [ITEM_DRAGON_GEM] = + { + .name = _("Dragon Gem"), + .itemId = ITEM_DRAGON_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sDragonGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_DRAGON, + }, + + [ITEM_DARK_GEM] = + { + .name = _("Dark Gem"), + .itemId = ITEM_DARK_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sDarkGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_DARK, + }, + + [ITEM_STEEL_GEM] = + { + .name = _("Steel Gem"), + .itemId = ITEM_STEEL_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sSteelGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_STEEL, + }, + + [ITEM_FAIRY_GEM] = + { + .name = _("Fairy Gem"), + .itemId = ITEM_FAIRY_GEM, + .price = 4000, + .holdEffect = HOLD_EFFECT_GEMS, + .holdEffectParam = 30, + .description = sFairyGemDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FAIRY, + }, + +// Z-Crystals + + [ITEM_NORMALIUM_Z] = + { + .name = _("Normalium Z"), + .itemId = ITEM_NORMALIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sNormaliumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_NORMAL + }, + + [ITEM_FIRIUM_Z] = + { + .name = _("Firium Z"), + .itemId = ITEM_FIRIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sFiriumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FIRE + }, + + [ITEM_WATERIUM_Z] = + { + .name = _("Waterium Z"), + .itemId = ITEM_WATERIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sWateriumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_WATER + }, + + [ITEM_ELECTRIUM_Z] = + { + .name = _("Electrium Z"), + .itemId = ITEM_ELECTRIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sElectriumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ELECTRIC + }, + + [ITEM_GRASSIUM_Z] = + { + .name = _("Grassium Z"), + .itemId = ITEM_GRASSIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sGrassiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GRASS + }, + + [ITEM_ICIUM_Z] = + { + .name = _("Icium Z"), + .itemId = ITEM_ICIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sIciumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ICE + }, + + [ITEM_FIGHTINIUM_Z] = + { + .name = _("Fightinium Z"), + .itemId = ITEM_FIGHTINIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sFightiniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FIGHTING + }, + + [ITEM_POISONIUM_Z] = + { + .name = _("Poisonium Z"), + .itemId = ITEM_POISONIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sPoisoniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_POISON + }, + + [ITEM_GROUNDIUM_Z] = + { + .name = _("Groundium Z"), + .itemId = ITEM_GROUNDIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sGroundiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GROUND + }, + + [ITEM_FLYINIUM_Z] = + { + .name = _("Flyinium Z"), + .itemId = ITEM_FLYINIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sFlyiniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FLYING + }, + + [ITEM_PSYCHIUM_Z] = + { + .name = _("Psychium Z"), + .itemId = ITEM_PSYCHIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sPsychiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_PSYCHIC + }, + + [ITEM_BUGINIUM_Z] = + { + .name = _("Buginium Z"), + .itemId = ITEM_BUGINIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sBuginiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_BUG + }, + + [ITEM_ROCKIUM_Z] = + { + .name = _("Rockium Z"), + .itemId = ITEM_ROCKIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sRockiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ROCK + }, + + [ITEM_GHOSTIUM_Z] = + { + .name = _("Ghostium Z"), + .itemId = ITEM_GHOSTIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sGhostiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_GHOST + }, + + [ITEM_DRAGONIUM_Z] = + { + .name = _("Dragonium Z"), + .itemId = ITEM_DRAGONIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sDragoniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_DRAGON + }, + + [ITEM_DARKINIUM_Z] = + { + .name = _("Darkinium Z"), + .itemId = ITEM_DARKINIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sDarkiniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_DARK + }, + + [ITEM_STEELIUM_Z] = + { + .name = _("Steelium Z"), + .itemId = ITEM_STEELIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sSteeliumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_STEEL + }, + + [ITEM_FAIRIUM_Z] = + { + .name = _("Fairium Z"), + .itemId = ITEM_FAIRIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sFairiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FAIRY + }, + + [ITEM_PIKANIUM_Z] = + { + .name = _("Pikanium Z"), + .itemId = ITEM_PIKANIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sPikaniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_EEVIUM_Z] = + { + .name = _("Eevium Z"), + .itemId = ITEM_EEVIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sEeviumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_SNORLIUM_Z] = + { + .name = _("Snorlium Z"), + .itemId = ITEM_SNORLIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sSnorliumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_MEWNIUM_Z] = + { + .name = _("Mewnium Z"), + .itemId = ITEM_MEWNIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sMewniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_DECIDIUM_Z] = + { + .name = _("Decidium Z"), + .itemId = ITEM_DECIDIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sDecidiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_INCINIUM_Z] = + { + .name = _("Incinium Z"), + .itemId = ITEM_INCINIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sInciniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_PRIMARIUM_Z] = + { + .name = _("Primarium Z"), + .itemId = ITEM_PRIMARIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sPrimariumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_LYCANIUM_Z] = + { + .name = _("Lycanium Z"), + .itemId = ITEM_LYCANIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sLycaniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_MIMIKIUM_Z] = + { + .name = _("Mimikium Z"), + .itemId = ITEM_MIMIKIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sMimikiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_KOMMONIUM_Z] = + { + .name = _("Kommonium Z"), + .itemId = ITEM_KOMMONIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sKommoniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_TAPUNIUM_Z] = + { + .name = _("Tapunium Z"), + .itemId = ITEM_TAPUNIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sTapuniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 //signature z move + }, + + [ITEM_SOLGANIUM_Z] = + { + .name = _("Solganium Z"), + .itemId = ITEM_SOLGANIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sSolganiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_LUNALIUM_Z] = + { + .name = _("Lunalium Z"), + .itemId = ITEM_LUNALIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sLunaliumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_MARSHADIUM_Z] = + { + .name = _("Marshadium Z"), + .itemId = ITEM_MARSHADIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sMarshadiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_ALORAICHIUM_Z] = + { + .name = _("Aloraichium Z"), + .itemId = ITEM_ALORAICHIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sAloraichiumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_PIKASHUNIUM_Z] = + { + .name = _("Pikashunium Z"), + .itemId = ITEM_PIKASHUNIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sPikashuniumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 // signature z move + }, + + [ITEM_ULTRANECROZIUM_Z] = + { + .name = _("U-Necrozium Z"), + .itemId = ITEM_ULTRANECROZIUM_Z, + .price = 0, + .holdEffect = HOLD_EFFECT_Z_CRYSTAL, + .description = sUltranecroziumZDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 255 //signature z move + }, + +// Species-specific Held Items + + [ITEM_LIGHT_BALL] = + { + .name = _("Light Ball"), + .itemId = ITEM_LIGHT_BALL, + .price = 1000, + .holdEffect = HOLD_EFFECT_LIGHT_BALL, + .description = sLightBallDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_LEEK] = + { + .name = _("Leek"), + .itemId = ITEM_LEEK, + .price = 1000, + .holdEffect = HOLD_EFFECT_LEEK, + .description = sLeekDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_THICK_CLUB] = + { + .name = _("Thick Club"), + .itemId = ITEM_THICK_CLUB, + .price = 1000, + .holdEffect = HOLD_EFFECT_THICK_CLUB, + .description = sThickClubDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 90, + }, + + [ITEM_LUCKY_PUNCH] = + { + .name = _("Lucky Punch"), + .itemId = ITEM_LUCKY_PUNCH, + .price = 1000, + .holdEffect = HOLD_EFFECT_LUCKY_PUNCH, + .description = sLuckyPunchDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 40, + }, + + [ITEM_METAL_POWDER] = + { + .name = _("Metal Powder"), + .itemId = ITEM_METAL_POWDER, + .price = 1000, + .holdEffect = HOLD_EFFECT_METAL_POWDER, + .description = sMetalPowderDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_QUICK_POWDER] = + { + .name = _("Quick Powder"), + .itemId = ITEM_QUICK_POWDER, + .price = 1000, + .holdEffect = HOLD_EFFECT_QUICK_POWDER, + .description = sQuickPowderDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_DEEP_SEA_SCALE] = + { + .name = _("DeepSeaScale"), + .itemId = ITEM_DEEP_SEA_SCALE, + .price = 2000, + .holdEffect = HOLD_EFFECT_DEEP_SEA_SCALE, + .description = sDeepSeaScaleDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_DEEP_SEA_TOOTH] = + { + .name = _("DeepSeaTooth"), + .itemId = ITEM_DEEP_SEA_TOOTH, + .price = 2000, + .holdEffect = HOLD_EFFECT_DEEP_SEA_TOOTH, + .description = sDeepSeaToothDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 90, + }, + + [ITEM_SOUL_DEW] = + { + .name = _("Soul Dew"), + .itemId = ITEM_SOUL_DEW, + .price = 0, + .holdEffect = HOLD_EFFECT_SOUL_DEW, + #if B_SOUL_DEW_BOOST >= GEN_7 + .holdEffectParam = 20, + #else + .holdEffectParam = 50, + #endif + .description = sSoulDewDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_ADAMANT_ORB] = + { + .name = _("Adamant Orb"), + .itemId = ITEM_ADAMANT_ORB, + .price = 0, + .holdEffect = HOLD_EFFECT_ADAMANT_ORB, + .holdEffectParam = 20, + .description = sAdamantOrbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_LUSTROUS_ORB] = + { + .name = _("Lustrous Orb"), + .itemId = ITEM_LUSTROUS_ORB, + .price = 0, + .holdEffect = HOLD_EFFECT_LUSTROUS_ORB, + .holdEffectParam = 20, + .description = sLustrousOrbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_GRISEOUS_ORB] = + { + .name = _("Griseous Orb"), + .itemId = ITEM_GRISEOUS_ORB, + .price = 0, + .holdEffect = HOLD_EFFECT_GRISEOUS_ORB, + .holdEffectParam = 20, + .description = sGriseousOrbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + +// Incenses + + [ITEM_SEA_INCENSE] = + { + .name = _("Sea Incense"), + .itemId = ITEM_SEA_INCENSE, + .price = 2000, + .holdEffect = HOLD_EFFECT_WATER_POWER, + .holdEffectParam = 20, + .description = sSeaIncenseDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_LAX_INCENSE] = + { + .name = _("Lax Incense"), + .itemId = ITEM_LAX_INCENSE, + .price = 5000, + .holdEffect = HOLD_EFFECT_EVASION_UP, + .holdEffectParam = 10, + .description = sLaxIncenseDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_ODD_INCENSE] = + { + .name = _("Odd Incense"), + .itemId = ITEM_ODD_INCENSE, + .price = 2000, + .holdEffect = HOLD_EFFECT_PSYCHIC_POWER, + .holdEffectParam = 20, + .description = sOddIncenseDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_ROCK_INCENSE] = + { + .name = _("Rock Incense"), + .itemId = ITEM_ROCK_INCENSE, + .price = 2000, + .holdEffect = HOLD_EFFECT_ROCK_POWER, + .holdEffectParam = 20, + .description = sRockIncenseDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_FULL_INCENSE] = + { + .name = _("Full Incense"), + .itemId = ITEM_FULL_INCENSE, + .price = 5000, + .holdEffect = HOLD_EFFECT_LAGGING_TAIL, + .holdEffectParam = 5, + .description = sFullIncenseDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_WAVE_INCENSE] = + { + .name = _("Wave Incense"), + .itemId = ITEM_WAVE_INCENSE, + .price = 2000, + .holdEffect = HOLD_EFFECT_WATER_POWER, + .holdEffectParam = 20, + .description = sWaveIncenseDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_ROSE_INCENSE] = + { + .name = _("Rose Incense"), + .itemId = ITEM_ROSE_INCENSE, + .price = 2000, + .holdEffect = HOLD_EFFECT_GRASS_POWER, + .holdEffectParam = 20, + .description = sRoseIncenseDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_LUCK_INCENSE] = + { + .name = _("Luck Incense"), + .itemId = ITEM_LUCK_INCENSE, + .price = 11000, + .holdEffect = HOLD_EFFECT_DOUBLE_PRIZE, + .holdEffectParam = 10, + .description = sLuckIncenseDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_PURE_INCENSE] = + { + .name = _("Pure Incense"), + .itemId = ITEM_PURE_INCENSE, + .price = 6000, + .holdEffect = HOLD_EFFECT_REPEL, + .description = sPureIncenseDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + +// Contest Scarves + + [ITEM_RED_SCARF] = + { + .name = _("Red Scarf"), + .itemId = ITEM_RED_SCARF, + .price = 100, + .description = sRedScarfDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_BLUE_SCARF] = + { + .name = _("Blue Scarf"), + .itemId = ITEM_BLUE_SCARF, + .price = 100, + .description = sBlueScarfDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_PINK_SCARF] = + { + .name = _("Pink Scarf"), + .itemId = ITEM_PINK_SCARF, + .price = 100, + .description = sPinkScarfDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_GREEN_SCARF] = + { + .name = _("Green Scarf"), + .itemId = ITEM_GREEN_SCARF, + .price = 100, + .description = sGreenScarfDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_YELLOW_SCARF] = + { + .name = _("Yellow Scarf"), + .itemId = ITEM_YELLOW_SCARF, + .price = 100, + .description = sYellowScarfDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + +// EV Gain Modifiers + + [ITEM_MACHO_BRACE] = + { + .name = _("Macho Brace"), + .itemId = ITEM_MACHO_BRACE, + .price = 3000, + .holdEffect = HOLD_EFFECT_MACHO_BRACE, + .description = sMachoBraceDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_POWER_WEIGHT] = + { + .name = _("Power Weight"), + .itemId = ITEM_POWER_WEIGHT, + .price = 3000, + .holdEffect = HOLD_EFFECT_POWER_ITEM, + .holdEffectParam = 8, + .description = sPowerWeightDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = STAT_HP, + .flingPower = 70, + }, + + [ITEM_POWER_BRACER] = + { + .name = _("Power Bracer"), + .itemId = ITEM_POWER_BRACER, + .price = 3000, + .holdEffect = HOLD_EFFECT_POWER_ITEM, + .holdEffectParam = 8, + .description = sPowerBracerDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = STAT_ATK, + .flingPower = 70, + }, + + [ITEM_POWER_BELT] = + { + .name = _("Power Belt"), + .itemId = ITEM_POWER_BELT, + .price = 3000, + .holdEffect = HOLD_EFFECT_POWER_ITEM, + .holdEffectParam = 8, + .description = sPowerBeltDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = STAT_DEF, + .flingPower = 70, + }, + + [ITEM_POWER_LENS] = + { + .name = _("Power Lens"), + .itemId = ITEM_POWER_LENS, + .price = 3000, + .holdEffect = HOLD_EFFECT_POWER_ITEM, + .holdEffectParam = 8, + .description = sPowerLensDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = STAT_SPATK, + .flingPower = 70, + }, + + [ITEM_POWER_BAND] = + { + .name = _("Power Band"), + .itemId = ITEM_POWER_BAND, + .price = 3000, + .holdEffect = HOLD_EFFECT_POWER_ITEM, + .holdEffectParam = 8, + .description = sPowerBandDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = STAT_SPDEF, + .flingPower = 70, + }, + + [ITEM_POWER_ANKLET] = + { + .name = _("Power Anklet"), + .itemId = ITEM_POWER_ANKLET, + .price = 3000, + .holdEffect = HOLD_EFFECT_POWER_ITEM, + .holdEffectParam = 8, + .description = sPowerAnkletDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = STAT_SPEED, + .flingPower = 70, + }, + +// Type-boosting Held Items + + [ITEM_SILK_SCARF] = + { + .name = _("Silk Scarf"), + .itemId = ITEM_SILK_SCARF, + .price = 1000, + .holdEffect = HOLD_EFFECT_NORMAL_POWER, + .holdEffectParam = 20, + .description = sSilkScarfDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_CHARCOAL] = + { + .name = _("Charcoal"), + .itemId = ITEM_CHARCOAL, + .price = 1000, + .holdEffect = HOLD_EFFECT_FIRE_POWER, + .holdEffectParam = 20, + .description = sCharcoalDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_MYSTIC_WATER] = + { + .name = _("Mystic Water"), + .itemId = ITEM_MYSTIC_WATER, + .price = 1000, + .holdEffect = HOLD_EFFECT_WATER_POWER, + .holdEffectParam = 20, + .description = sMysticWaterDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_MAGNET] = + { + .name = _("Magnet"), + .itemId = ITEM_MAGNET, + .price = 1000, + .holdEffect = HOLD_EFFECT_ELECTRIC_POWER, + .holdEffectParam = 20, + .description = sMagnetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_MIRACLE_SEED] = + { + .name = _("Miracle Seed"), + .itemId = ITEM_MIRACLE_SEED, + .price = 1000, + .holdEffect = HOLD_EFFECT_GRASS_POWER, + .holdEffectParam = 20, + .description = sMiracleSeedDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_NEVER_MELT_ICE] = + { + .name = _("Never-MeltIce"), + .itemId = ITEM_NEVER_MELT_ICE, + .price = 1000, + .holdEffect = HOLD_EFFECT_ICE_POWER, + .holdEffectParam = 20, + .description = sNeverMeltIceDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BLACK_BELT] = + { + .name = _("Black Belt"), + .itemId = ITEM_BLACK_BELT, + .price = 1000, + .holdEffect = HOLD_EFFECT_FIGHTING_POWER, + .holdEffectParam = 20, + .description = sBlackBeltDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_POISON_BARB] = + { + .name = _("Poison Barb"), + .itemId = ITEM_POISON_BARB, + .price = 1000, + .holdEffect = HOLD_EFFECT_POISON_POWER, + .holdEffectParam = 20, + .description = sPoisonBarbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 70, + }, + + [ITEM_SOFT_SAND] = + { + .name = _("Soft Sand"), + .itemId = ITEM_SOFT_SAND, + .price = 1000, + .holdEffect = HOLD_EFFECT_GROUND_POWER, + .holdEffectParam = 20, + .description = sSoftSandDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_SHARP_BEAK] = + { + .name = _("Sharp Beak"), + .itemId = ITEM_SHARP_BEAK, + .price = 1000, + .holdEffect = HOLD_EFFECT_FLYING_POWER, + .holdEffectParam = 20, + .description = sSharpBeakDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 50, + }, + + [ITEM_TWISTED_SPOON] = + { + .name = _("Twisted Spoon"), + .itemId = ITEM_TWISTED_SPOON, + .price = 1000, + .holdEffect = HOLD_EFFECT_PSYCHIC_POWER, + .holdEffectParam = 20, + .description = sTwistedSpoonDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_SILVER_POWDER] = + { + .name = _("Silver Powder"), + .itemId = ITEM_SILVER_POWDER, + .price = 1000, + .holdEffect = HOLD_EFFECT_BUG_POWER, + .holdEffectParam = 20, + .description = sSilverPowderDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_HARD_STONE] = + { + .name = _("Hard Stone"), + .itemId = ITEM_HARD_STONE, + .price = 1000, + .holdEffect = HOLD_EFFECT_ROCK_POWER, + .holdEffectParam = 20, + .description = sHardStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_SPELL_TAG] = + { + .name = _("Spell Tag"), + .itemId = ITEM_SPELL_TAG, + .price = 1000, + .holdEffect = HOLD_EFFECT_GHOST_POWER, + .holdEffectParam = 20, + .description = sSpellTagDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_DRAGON_FANG] = + { + .name = _("Dragon Fang"), + .itemId = ITEM_DRAGON_FANG, + .price = 1000, + .holdEffect = HOLD_EFFECT_DRAGON_POWER, + .holdEffectParam = 20, + .description = sDragonFangDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 70, + }, + + [ITEM_BLACK_GLASSES] = + { + .name = _("Black Glasses"), + .itemId = ITEM_BLACK_GLASSES, + .price = 1000, + .holdEffect = HOLD_EFFECT_DARK_POWER, + .holdEffectParam = 20, + .description = sBlackGlassesDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_METAL_COAT] = + { + .name = _("Metal Coat"), + .itemId = ITEM_METAL_COAT, + .price = 2000, + .holdEffect = HOLD_EFFECT_STEEL_POWER, + .holdEffectParam = 20, + .description = sMetalCoatDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + +// Choice Items + + [ITEM_CHOICE_BAND] = + { + .name = _("Choice Band"), + .itemId = ITEM_CHOICE_BAND, + .price = 4000, + .holdEffect = HOLD_EFFECT_CHOICE_BAND, + .description = sChoiceBandDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_CHOICE_SPECS] = + { + .name = _("Choice Specs"), + .itemId = ITEM_CHOICE_SPECS, + .price = 4000, + .holdEffect = HOLD_EFFECT_CHOICE_SPECS, + .description = sChoiceSpecsDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_CHOICE_SCARF] = + { + .name = _("Choice Scarf"), + .itemId = ITEM_CHOICE_SCARF, + .price = 4000, + .holdEffect = HOLD_EFFECT_CHOICE_SCARF, + .description = sChoiceScarfDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + +// Status Orbs + + [ITEM_FLAME_ORB] = + { + .name = _("Flame Orb"), + .itemId = ITEM_FLAME_ORB, + .price = 4000, + .holdEffect = HOLD_EFFECT_FLAME_ORB, + .description = sFlameOrbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_TOXIC_ORB] = + { + .name = _("Toxic Orb"), + .itemId = ITEM_TOXIC_ORB, + .price = 4000, + .holdEffect = HOLD_EFFECT_TOXIC_ORB, + .description = sToxicOrbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + +// Weather Rocks + + [ITEM_DAMP_ROCK] = + { + .name = _("Damp Rock"), + .itemId = ITEM_DAMP_ROCK, + .price = 4000, + .holdEffect = HOLD_EFFECT_DAMP_ROCK, + .description = sDampRockDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_HEAT_ROCK] = + { + .name = _("Heat Rock"), + .itemId = ITEM_HEAT_ROCK, + .price = 4000, + .holdEffect = HOLD_EFFECT_HEAT_ROCK, + .description = sHeatRockDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_SMOOTH_ROCK] = + { + .name = _("Smooth Rock"), + .itemId = ITEM_SMOOTH_ROCK, + .price = 4000, + .holdEffect = HOLD_EFFECT_SMOOTH_ROCK, + .description = sSmoothRockDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_ICY_ROCK] = + { + .name = _("Icy Rock"), + .itemId = ITEM_ICY_ROCK, + .price = 4000, + .holdEffect = HOLD_EFFECT_ICY_ROCK, + .description = sIcyRockDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 40, + }, + +// Terrain Seeds + + [ITEM_ELECTRIC_SEED] = + { + .name = _("Electric Seed"), + .itemId = ITEM_ELECTRIC_SEED, + .price = 4000, + .holdEffect = HOLD_EFFECT_SEEDS, + .holdEffectParam = HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN, + .description = sElectricSeedDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_PSYCHIC_SEED] = + { + .name = _("Psychic Seed"), + .itemId = ITEM_PSYCHIC_SEED, + .price = 4000, + .holdEffect = HOLD_EFFECT_SEEDS, + .holdEffectParam = HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN, + .description = sPsychicSeedDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_MISTY_SEED] = + { + .name = _("Misty Seed"), + .itemId = ITEM_MISTY_SEED, + .price = 4000, + .holdEffect = HOLD_EFFECT_SEEDS, + .holdEffectParam = HOLD_EFFECT_PARAM_MISTY_TERRAIN, + .description = sMistySeedDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_GRASSY_SEED] = + { + .name = _("Grassy Seed"), + .itemId = ITEM_GRASSY_SEED, + .price = 4000, + .holdEffect = HOLD_EFFECT_SEEDS, + .holdEffectParam = HOLD_EFFECT_PARAM_GRASSY_TERRAIN, + .description = sGrassySeedDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + +// Type-activated Stat Modifiers + + [ITEM_ABSORB_BULB] = + { + .name = _("Absorb Bulb"), + .itemId = ITEM_ABSORB_BULB, + .price = 4000, + .holdEffect = HOLD_EFFECT_ABSORB_BULB, + .holdEffectParam = 0, + .description = sAbsorbBulbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_CELL_BATTERY] = + { + .name = _("Cell Battery"), + .itemId = ITEM_CELL_BATTERY, + .price = 4000, + .holdEffect = HOLD_EFFECT_CELL_BATTERY, + .holdEffectParam = 0, + .description = sCellBatteryDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_LUMINOUS_MOSS] = + { + .name = _("Luminous Moss"), + .itemId = ITEM_LUMINOUS_MOSS, + .price = 4000, + .holdEffect = HOLD_EFFECT_LUMINOUS_MOSS, + .holdEffectParam = 0, + .description = sLuminousMossDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_SNOWBALL] = + { + .name = _("Snowball"), + .itemId = ITEM_SNOWBALL, + .price = 4000, + .holdEffect = HOLD_EFFECT_SNOWBALL, + .holdEffectParam = 0, + .description = sSnowballDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + +// Misc. Held Items + + [ITEM_BRIGHT_POWDER] = + { + .name = _("Bright Powder"), + .itemId = ITEM_BRIGHT_POWDER, + .price = 4000, + .holdEffect = HOLD_EFFECT_EVASION_UP, + .holdEffectParam = 10, + .description = sBrightPowderDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_WHITE_HERB] = + { + .name = _("White Herb"), + .itemId = ITEM_WHITE_HERB, + .price = 4000, + .holdEffect = HOLD_EFFECT_RESTORE_STATS, + .description = sWhiteHerbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_EXP_SHARE] = + { + .name = _("Exp. Share"), + .itemId = ITEM_EXP_SHARE, + .price = 3000, + .holdEffect = HOLD_EFFECT_EXP_SHARE, + .description = sExpShareDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_QUICK_CLAW] = + { + .name = _("Quick Claw"), + .itemId = ITEM_QUICK_CLAW, + .price = 4000, + .holdEffect = HOLD_EFFECT_QUICK_CLAW, + .holdEffectParam = 20, + .description = sQuickClawDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SOOTHE_BELL] = + { + .name = _("Soothe Bell"), + .itemId = ITEM_SOOTHE_BELL, + .price = 4000, + .holdEffect = HOLD_EFFECT_FRIENDSHIP_UP, + .description = sSootheBellDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_MENTAL_HERB] = + { + .name = _("Mental Herb"), + .itemId = ITEM_MENTAL_HERB, + .price = 4000, + .holdEffect = HOLD_EFFECT_MENTAL_HERB, + .description = sMentalHerbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_KINGS_ROCK] = + { + .name = _("King's Rock"), + .itemId = ITEM_KINGS_ROCK, + .price = 5000, + .holdEffect = HOLD_EFFECT_FLINCH, + .holdEffectParam = 10, + .description = sKingsRockDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_AMULET_COIN] = + { + .name = _("Amulet Coin"), + .itemId = ITEM_AMULET_COIN, + .price = 10000, + .holdEffect = HOLD_EFFECT_DOUBLE_PRIZE, + .holdEffectParam = 10, + .description = sAmuletCoinDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_CLEANSE_TAG] = + { + .name = _("Cleanse Tag"), + .itemId = ITEM_CLEANSE_TAG, + .price = 5000, + .holdEffect = HOLD_EFFECT_REPEL, + .description = sCleanseTagDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_SMOKE_BALL] = + { + .name = _("Smoke Ball"), + .itemId = ITEM_SMOKE_BALL, + .price = 4000, + .holdEffect = HOLD_EFFECT_CAN_ALWAYS_RUN, + .description = sSmokeBallDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_FOCUS_BAND] = + { + .name = _("Focus Band"), + .itemId = ITEM_FOCUS_BAND, + .price = 4000, + .holdEffect = HOLD_EFFECT_FOCUS_BAND, + .holdEffectParam = 10, + .description = sFocusBandDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_LUCKY_EGG] = + { + .name = _("Lucky Egg"), + .itemId = ITEM_LUCKY_EGG, + .price = 10000, + .holdEffect = HOLD_EFFECT_LUCKY_EGG, + .description = sLuckyEggDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_SCOPE_LENS] = + { + .name = _("Scope Lens"), + .itemId = ITEM_SCOPE_LENS, + .price = 4000, + .holdEffect = HOLD_EFFECT_SCOPE_LENS, + .description = sScopeLensDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_LEFTOVERS] = + { + .name = _("Leftovers"), + .itemId = ITEM_LEFTOVERS, + .price = 4000, + .holdEffect = HOLD_EFFECT_LEFTOVERS, + .holdEffectParam = 10, + .description = sLeftoversDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_SHELL_BELL] = + { + .name = _("Shell Bell"), + .itemId = ITEM_SHELL_BELL, + .price = 4000, + .holdEffect = HOLD_EFFECT_SHELL_BELL, + .holdEffectParam = 8, + .description = sShellBellDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_WIDE_LENS] = + { + .name = _("Wide Lens"), + .itemId = ITEM_WIDE_LENS, + .price = 4000, + .holdEffect = HOLD_EFFECT_WIDE_LENS, + .holdEffectParam = 10, + .description = sWideLensDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_MUSCLE_BAND] = + { + .name = _("Muscle Band"), + .itemId = ITEM_MUSCLE_BAND, + .price = 4000, + .holdEffect = HOLD_EFFECT_MUSCLE_BAND, + .holdEffectParam = 10, + .description = sMuscleBandDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_WISE_GLASSES] = + { + .name = _("Wise Glasses"), + .itemId = ITEM_WISE_GLASSES, + .price = 4000, + .holdEffect = HOLD_EFFECT_WISE_GLASSES, + .holdEffectParam = 10, + .description = sWiseGlassesDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_EXPERT_BELT] = + { + .name = _("Expert Belt"), + .itemId = ITEM_EXPERT_BELT, + .price = 4000, + .holdEffect = HOLD_EFFECT_EXPERT_BELT, + .holdEffectParam = 20, + .description = sExpertBeltDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_LIGHT_CLAY] = + { + .name = _("Light Clay"), + .itemId = ITEM_LIGHT_CLAY, + .price = 4000, + .holdEffect = HOLD_EFFECT_LIGHT_CLAY, + .description = sLightClayDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_LIFE_ORB] = + { + .name = _("Life Orb"), + .itemId = ITEM_LIFE_ORB, + .price = 4000, + .holdEffect = HOLD_EFFECT_LIFE_ORB, + .description = sLifeOrbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_POWER_HERB] = + { + .name = _("Power Herb"), + .itemId = ITEM_POWER_HERB, + .price = 4000, + .holdEffect = HOLD_EFFECT_POWER_HERB, + .description = sPowerHerbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_FOCUS_SASH] = + { + .name = _("Focus Sash"), + .itemId = ITEM_FOCUS_SASH, + .price = 4000, + .holdEffect = HOLD_EFFECT_FOCUS_SASH, + .description = sFocusSashDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_ZOOM_LENS] = + { + .name = _("Zoom Lens"), + .itemId = ITEM_ZOOM_LENS, + .price = 4000, + .holdEffect = HOLD_EFFECT_ZOOM_LENS, + .holdEffectParam = 20, + .description = sZoomLensDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_METRONOME] = + { + .name = _("Metronome"), + .itemId = ITEM_METRONOME, + .price = 4000, + .holdEffect = HOLD_EFFECT_METRONOME, + .holdEffectParam = 20, + .description = sMetronomeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_IRON_BALL] = + { + .name = _("Iron Ball"), + .itemId = ITEM_IRON_BALL, + .price = 4000, + .holdEffect = HOLD_EFFECT_IRON_BALL, + .description = sIronBallDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 130, + }, + + [ITEM_LAGGING_TAIL] = + { + .name = _("Lagging Tail"), + .itemId = ITEM_LAGGING_TAIL, + .price = 4000, + .holdEffect = HOLD_EFFECT_LAGGING_TAIL, + .description = sLaggingTailDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_DESTINY_KNOT] = + { + .name = _("Destiny Knot"), + .itemId = ITEM_DESTINY_KNOT, + .price = 4000, + .holdEffect = HOLD_EFFECT_DESTINY_KNOT, + .description = sDestinyKnotDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_BLACK_SLUDGE] = + { + .name = _("Black Sludge"), + .itemId = ITEM_BLACK_SLUDGE, + .price = 4000, + .holdEffect = HOLD_EFFECT_BLACK_SLUDGE, + .description = sBlackSludgeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_GRIP_CLAW] = + { + .name = _("Grip Claw"), + .itemId = ITEM_GRIP_CLAW, + .price = 4000, + .holdEffect = HOLD_EFFECT_GRIP_CLAW, + .description = sGripClawDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 90, + }, + + [ITEM_STICKY_BARB] = + { + .name = _("Sticky Barb"), + .itemId = ITEM_STICKY_BARB, + .price = 4000, + .holdEffect = HOLD_EFFECT_STICKY_BARB, + .description = sStickyBarbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SHED_SHELL] = + { + .name = _("Shed Shell"), + .itemId = ITEM_SHED_SHELL, + .price = 4000, + .holdEffect = HOLD_EFFECT_SHED_SHELL, + .description = sShedShellDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_BIG_ROOT] = + { + .name = _("Big Root"), + .itemId = ITEM_BIG_ROOT, + .price = 4000, + .holdEffect = HOLD_EFFECT_BIG_ROOT, + .holdEffectParam = 30, + .description = sBigRootDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_RAZOR_CLAW] = + { + .name = _("Razor Claw"), + .itemId = ITEM_RAZOR_CLAW, + .price = 5000, + .holdEffect = HOLD_EFFECT_SCOPE_LENS, + .description = sRazorClawDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_RAZOR_FANG] = + { + .name = _("Razor Fang"), + .itemId = ITEM_RAZOR_FANG, + .price = 5000, + .holdEffect = HOLD_EFFECT_FLINCH, + .holdEffectParam = 10, + .description = sRazorFangDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_EVIOLITE] = + { + .name = _("Eviolite"), + .itemId = ITEM_EVIOLITE, + .price = 4000, + .holdEffect = HOLD_EFFECT_EVIOLITE, + .holdEffectParam = 50, + .description = sEvioliteDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 40, + }, + + [ITEM_FLOAT_STONE] = + { + .name = _("Float Stone"), + .itemId = ITEM_FLOAT_STONE, + .price = 4000, + .holdEffect = HOLD_EFFECT_FLOAT_STONE, + .description = sFloatStoneDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_ROCKY_HELMET] = + { + .name = _("Rocky Helmet"), + .itemId = ITEM_ROCKY_HELMET, + .price = 4000, + .holdEffect = HOLD_EFFECT_ROCKY_HELMET, + .holdEffectParam = 0, + .description = sRockyHelmetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_AIR_BALLOON] = + { + .name = _("Air Balloon"), + .itemId = ITEM_AIR_BALLOON, + .price = 4000, + .holdEffect = HOLD_EFFECT_AIR_BALLOON, + .holdEffectParam = 0, + .description = sAirBalloonDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_RED_CARD] = + { + .name = _("Red Card"), + .itemId = ITEM_RED_CARD, + .price = 4000, + .holdEffect = HOLD_EFFECT_RED_CARD, + .holdEffectParam = 0, + .description = sRedCardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_RING_TARGET] = + { + .name = _("Ring Target"), + .itemId = ITEM_RING_TARGET, + .price = 4000, + .holdEffect = HOLD_EFFECT_RING_TARGET, + .holdEffectParam = 0, + .description = sRingTargetDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_BINDING_BAND] = + { + .name = _("Binding Band"), + .itemId = ITEM_BINDING_BAND, + .price = 4000, + .holdEffect = HOLD_EFFECT_BINDING_BAND, + .description = sBindingBandDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_EJECT_BUTTON] = + { + .name = _("Eject Button"), + .itemId = ITEM_EJECT_BUTTON, + .price = 4000, + .holdEffect = HOLD_EFFECT_EJECT_BUTTON, + .holdEffectParam = 0, + .description = sEjectButtonDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_WEAKNESS_POLICY] = + { + .name = _("WeaknssPolicy"), + .itemId = ITEM_WEAKNESS_POLICY, + .price = 1000, + .holdEffect = HOLD_EFFECT_WEAKNESS_POLICY, + .holdEffectParam = 0, + .description = sWeaknessPolicyDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_ASSAULT_VEST] = + { + .name = _("Assault Vest"), + .itemId = ITEM_ASSAULT_VEST, + .price = 1000, + .holdEffect = HOLD_EFFECT_ASSAULT_VEST, + .holdEffectParam = 50, + .description = sAssaultVestDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_SAFETY_GOGGLES] = + { + .name = _("SafetyGoggles"), + .itemId = ITEM_SAFETY_GOGGLES, + .price = 4000, + .holdEffect = HOLD_EFFECT_SAFETY_GOGGLES, + .description = sSafetyGogglesDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_ADRENALINE_ORB] = + { + .name = _("AdrenalineOrb"), + .itemId = ITEM_ADRENALINE_ORB, + .price = 300, + .holdEffect = HOLD_EFFECT_ADRENALINE_ORB, + .description = sAdrenalineOrbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_TERRAIN_EXTENDER] = + { + .name = _("TerainExtendr"), + .itemId = ITEM_TERRAIN_EXTENDER, + .price = 4000, + .holdEffect = HOLD_EFFECT_TERRAIN_EXTENDER, + .description = sTerrainExtenderDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_PROTECTIVE_PADS] = + { + .name = _("ProtectvePads"), + .itemId = ITEM_PROTECTIVE_PADS, + .price = 4000, + .holdEffect = HOLD_EFFECT_PROTECTIVE_PADS, + .description = sProtectivePadsDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_THROAT_SPRAY] = + { + .name = _("Throat Spray"), + .itemId = ITEM_THROAT_SPRAY, + .price = 4000, + .holdEffect = HOLD_EFFECT_THROAT_SPRAY, + .description = sThroatSprayDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_EJECT_PACK] = + { + .name = _("Eject Pack"), + .itemId = ITEM_EJECT_PACK, + .price = 4000, + .holdEffect = HOLD_EFFECT_EJECT_PACK, + .description = sEjectPackDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 50, + }, + + [ITEM_HEAVY_DUTY_BOOTS] = + { + .name = _("Heavy-DtyBts"), + .itemId = ITEM_HEAVY_DUTY_BOOTS, + .price = 4000, + .holdEffect = HOLD_EFFECT_HEAVY_DUTY_BOOTS, + .description = sHeavyDutyBootsDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_BLUNDER_POLICY] = + { + .name = _("BlundrPolicy"), + .itemId = ITEM_BLUNDER_POLICY, + .price = 4000, + .holdEffect = HOLD_EFFECT_BLUNDER_POLICY, + .description = sBlunderPolicyDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 80, + }, + + [ITEM_ROOM_SERVICE] = + { + .name = _("Room Service"), + .itemId = ITEM_ROOM_SERVICE, + .price = 4000, + .holdEffect = HOLD_EFFECT_ROOM_SERVICE, + .description = sRoomServiceDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 100, + }, + + [ITEM_UTILITY_UMBRELLA] = + { + .name = _("UtltyUmbrlla"), + .itemId = ITEM_UTILITY_UMBRELLA, + .price = 4000, + .holdEffect = HOLD_EFFECT_UTILITY_UMBRELLA, + .description = sUtilityUmbrellaDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + // Berries [ITEM_CHERI_BERRY] = { - .name = _("CHERI BERRY"), + .name = _("Cheri Berry"), .itemId = ITEM_CHERI_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CURE_PAR, @@ -1628,11 +6876,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 10, }, [ITEM_CHESTO_BERRY] = { - .name = _("CHESTO BERRY"), + .name = _("Chesto Berry"), .itemId = ITEM_CHESTO_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CURE_SLP, @@ -1642,11 +6891,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 10, }, [ITEM_PECHA_BERRY] = { - .name = _("PECHA BERRY"), + .name = _("Pecha Berry"), .itemId = ITEM_PECHA_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CURE_PSN, @@ -1656,11 +6906,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 10, }, [ITEM_RAWST_BERRY] = { - .name = _("RAWST BERRY"), + .name = _("Rawst Berry"), .itemId = ITEM_RAWST_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CURE_BRN, @@ -1670,11 +6921,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 10, }, [ITEM_ASPEAR_BERRY] = { - .name = _("ASPEAR BERRY"), + .name = _("Aspear Berry"), .itemId = ITEM_ASPEAR_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CURE_FRZ, @@ -1684,11 +6936,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 10, }, [ITEM_LEPPA_BERRY] = { - .name = _("LEPPA BERRY"), + .name = _("Leppa Berry"), .itemId = ITEM_LEPPA_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_RESTORE_PP, @@ -1699,11 +6952,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_PPRecovery, + .flingPower = 10, }, [ITEM_ORAN_BERRY] = { - .name = _("ORAN BERRY"), + .name = _("Oran Berry"), .itemId = ITEM_ORAN_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_RESTORE_HP, @@ -1714,11 +6968,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 10, }, [ITEM_PERSIM_BERRY] = { - .name = _("PERSIM BERRY"), + .name = _("Persim Berry"), .itemId = ITEM_PERSIM_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CURE_CONFUSION, @@ -1728,11 +6983,12 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 10, }, [ITEM_LUM_BERRY] = { - .name = _("LUM BERRY"), + .name = _("Lum Berry"), .itemId = ITEM_LUM_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CURE_STATUS, @@ -1742,311 +6998,605 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 10, }, [ITEM_SITRUS_BERRY] = { - .name = _("SITRUS BERRY"), + .name = _("Sitrus Berry"), .itemId = ITEM_SITRUS_BERRY, .price = 20, - .holdEffect = HOLD_EFFECT_RESTORE_HP, - .holdEffectParam = 30, + #if I_SITRUS_BERRY_HEAL >= GEN_4 + .holdEffect = HOLD_EFFECT_RESTORE_PCT_HP, + .holdEffectParam = 25, + #else + .holdEffect = HOLD_EFFECT_RESTORE_HP, + .holdEffectParam = 30, + #endif .description = sSitrusBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_Medicine, + .flingPower = 10, }, +#if B_CONFUSE_BERRIES_HEAL >= GEN_8 + #define CONFUSE_BERRY_HEAL_FRACTION 3 +#elif B_CONFUSE_BERRIES_HEAL == GEN_7 + #define CONFUSE_BERRY_HEAL_FRACTION 2 +#else + #define CONFUSE_BERRY_HEAL_FRACTION 8 +#endif + [ITEM_FIGY_BERRY] = { - .name = _("FIGY BERRY"), + .name = _("Figy Berry"), .itemId = ITEM_FIGY_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CONFUSE_SPICY, - .holdEffectParam = 8, + .holdEffectParam = CONFUSE_BERRY_HEAL_FRACTION, .description = sFigyBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_WIKI_BERRY] = { - .name = _("WIKI BERRY"), + .name = _("Wiki Berry"), .itemId = ITEM_WIKI_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CONFUSE_DRY, - .holdEffectParam = 8, + .holdEffectParam = CONFUSE_BERRY_HEAL_FRACTION, .description = sWikiBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_MAGO_BERRY] = { - .name = _("MAGO BERRY"), + .name = _("Mago Berry"), .itemId = ITEM_MAGO_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CONFUSE_SWEET, - .holdEffectParam = 8, + .holdEffectParam = CONFUSE_BERRY_HEAL_FRACTION, .description = sMagoBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_AGUAV_BERRY] = { - .name = _("AGUAV BERRY"), + .name = _("Aguav Berry"), .itemId = ITEM_AGUAV_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CONFUSE_BITTER, - .holdEffectParam = 8, + .holdEffectParam = CONFUSE_BERRY_HEAL_FRACTION, .description = sAguavBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_IAPAPA_BERRY] = { - .name = _("IAPAPA BERRY"), + .name = _("Iapapa Berry"), .itemId = ITEM_IAPAPA_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CONFUSE_SOUR, - .holdEffectParam = 8, + .holdEffectParam = CONFUSE_BERRY_HEAL_FRACTION, .description = sIapapaBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, +#undef CONFUSE_BERRY_HEAL_FRACTION + [ITEM_RAZZ_BERRY] = { - .name = _("RAZZ BERRY"), + .name = _("Razz Berry"), .itemId = ITEM_RAZZ_BERRY, .price = 20, .description = sRazzBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_BLUK_BERRY] = { - .name = _("BLUK BERRY"), + .name = _("Bluk Berry"), .itemId = ITEM_BLUK_BERRY, .price = 20, .description = sBlukBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_NANAB_BERRY] = { - .name = _("NANAB BERRY"), + .name = _("Nanab Berry"), .itemId = ITEM_NANAB_BERRY, .price = 20, .description = sNanabBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_WEPEAR_BERRY] = { - .name = _("WEPEAR BERRY"), + .name = _("Wepear Berry"), .itemId = ITEM_WEPEAR_BERRY, .price = 20, .description = sWepearBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_PINAP_BERRY] = { - .name = _("PINAP BERRY"), + .name = _("Pinap Berry"), .itemId = ITEM_PINAP_BERRY, .price = 20, .description = sPinapBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_POMEG_BERRY] = { - .name = _("POMEG BERRY"), + .name = _("Pomeg Berry"), .itemId = ITEM_POMEG_BERRY, .price = 20, .description = sPomegBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_ReduceEV, + .flingPower = 10, }, [ITEM_KELPSY_BERRY] = { - .name = _("KELPSY BERRY"), + .name = _("Kelpsy Berry"), .itemId = ITEM_KELPSY_BERRY, .price = 20, .description = sKelpsyBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_ReduceEV, + .flingPower = 10, }, [ITEM_QUALOT_BERRY] = { - .name = _("QUALOT BERRY"), + .name = _("Qualot Berry"), .itemId = ITEM_QUALOT_BERRY, .price = 20, .description = sQualotBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_ReduceEV, + .flingPower = 10, }, [ITEM_HONDEW_BERRY] = { - .name = _("HONDEW BERRY"), + .name = _("Hondew Berry"), .itemId = ITEM_HONDEW_BERRY, .price = 20, .description = sHondewBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_ReduceEV, + .flingPower = 10, }, [ITEM_GREPA_BERRY] = { - .name = _("GREPA BERRY"), + .name = _("Grepa Berry"), .itemId = ITEM_GREPA_BERRY, .price = 20, .description = sGrepaBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_ReduceEV, + .flingPower = 10, }, [ITEM_TAMATO_BERRY] = { - .name = _("TAMATO BERRY"), + .name = _("Tamato Berry"), .itemId = ITEM_TAMATO_BERRY, .price = 20, .description = sTamatoBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_ReduceEV, + .flingPower = 10, }, [ITEM_CORNN_BERRY] = { - .name = _("CORNN BERRY"), + .name = _("Cornn Berry"), .itemId = ITEM_CORNN_BERRY, .price = 20, .description = sCornnBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_MAGOST_BERRY] = { - .name = _("MAGOST BERRY"), + .name = _("Magost Berry"), .itemId = ITEM_MAGOST_BERRY, .price = 20, .description = sMagostBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_RABUTA_BERRY] = { - .name = _("RABUTA BERRY"), + .name = _("Rabuta Berry"), .itemId = ITEM_RABUTA_BERRY, .price = 20, .description = sRabutaBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_NOMEL_BERRY] = { - .name = _("NOMEL BERRY"), + .name = _("Nomel Berry"), .itemId = ITEM_NOMEL_BERRY, .price = 20, .description = sNomelBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_SPELON_BERRY] = { - .name = _("SPELON BERRY"), + .name = _("Spelon Berry"), .itemId = ITEM_SPELON_BERRY, .price = 20, .description = sSpelonBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_PAMTRE_BERRY] = { - .name = _("PAMTRE BERRY"), + .name = _("Pamtre Berry"), .itemId = ITEM_PAMTRE_BERRY, .price = 20, .description = sPamtreBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_WATMEL_BERRY] = { - .name = _("WATMEL BERRY"), + .name = _("Watmel Berry"), .itemId = ITEM_WATMEL_BERRY, .price = 20, .description = sWatmelBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_DURIN_BERRY] = { - .name = _("DURIN BERRY"), + .name = _("Durin Berry"), .itemId = ITEM_DURIN_BERRY, .price = 20, .description = sDurinBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_BELUE_BERRY] = { - .name = _("BELUE BERRY"), + .name = _("Belue Berry"), .itemId = ITEM_BELUE_BERRY, .price = 20, .description = sBelueBerryDesc, .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_CHILAN_BERRY] = + { + .name = _("Chilan Berry"), + .itemId = ITEM_CHILAN_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_NORMAL, + .description = sChilanBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_OCCA_BERRY] = + { + .name = _("Occa Berry"), + .itemId = ITEM_OCCA_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_FIRE, + .description = sOccaBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_PASSHO_BERRY] = + { + .name = _("Passho Berry"), + .itemId = ITEM_PASSHO_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_WATER, + .description = sPasshoBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_WACAN_BERRY] = + { + .name = _("Wacan Berry"), + .itemId = ITEM_WACAN_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_ELECTRIC, + .description = sWacanBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_RINDO_BERRY] = + { + .name = _("Rindo Berry"), + .itemId = ITEM_RINDO_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_GRASS, + .description = sRindoBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_YACHE_BERRY] = + { + .name = _("Yache Berry"), + .itemId = ITEM_YACHE_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_ICE, + .description = sYacheBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_CHOPLE_BERRY] = + { + .name = _("Chople Berry"), + .itemId = ITEM_CHOPLE_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_FIGHTING, + .description = sChopleBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_KEBIA_BERRY] = + { + .name = _("Kebia Berry"), + .itemId = ITEM_KEBIA_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_POISON, + .description = sKebiaBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_SHUCA_BERRY] = + { + .name = _("Shuca Berry"), + .itemId = ITEM_SHUCA_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_GROUND, + .description = sShucaBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_COBA_BERRY] = + { + .name = _("Coba Berry"), + .itemId = ITEM_COBA_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_FLYING, + .description = sCobaBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_PAYAPA_BERRY] = + { + .name = _("Payapa Berry"), + .itemId = ITEM_PAYAPA_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_PSYCHIC, + .description = sPayapaBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_TANGA_BERRY] = + { + .name = _("Tanga Berry"), + .itemId = ITEM_TANGA_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_BUG, + .description = sTangaBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_CHARTI_BERRY] = + { + .name = _("Charti Berry"), + .itemId = ITEM_CHARTI_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_ROCK, + .description = sChartiBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_KASIB_BERRY] = + { + .name = _("Kasib Berry"), + .itemId = ITEM_KASIB_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_GHOST, + .description = sKasibBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_HABAN_BERRY] = + { + .name = _("Haban Berry"), + .itemId = ITEM_HABAN_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_DRAGON, + .description = sHabanBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_COLBUR_BERRY] = + { + .name = _("Colbur Berry"), + .itemId = ITEM_COLBUR_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_DARK, + .description = sColburBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_BABIRI_BERRY] = + { + .name = _("Babiri Berry"), + .itemId = ITEM_BABIRI_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_STEEL, + .description = sBabiriBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_ROSELI_BERRY] = + { + .name = _("Roseli Berry"), + .itemId = ITEM_ROSELI_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_RESIST_BERRY, + .holdEffectParam = TYPE_FAIRY, + .description = sRoseliBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_LIECHI_BERRY] = { - .name = _("LIECHI BERRY"), + .name = _("Liechi Berry"), .itemId = ITEM_LIECHI_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_ATTACK_UP, @@ -2055,11 +7605,12 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_GANLON_BERRY] = { - .name = _("GANLON BERRY"), + .name = _("Ganlon Berry"), .itemId = ITEM_GANLON_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_DEFENSE_UP, @@ -2068,11 +7619,12 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_SALAC_BERRY] = { - .name = _("SALAC BERRY"), + .name = _("Salac Berry"), .itemId = ITEM_SALAC_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_SPEED_UP, @@ -2081,11 +7633,12 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_PETAYA_BERRY] = { - .name = _("PETAYA BERRY"), + .name = _("Petaya Berry"), .itemId = ITEM_PETAYA_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_SP_ATTACK_UP, @@ -2094,11 +7647,12 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_APICOT_BERRY] = { - .name = _("APICOT BERRY"), + .name = _("Apicot Berry"), .itemId = ITEM_APICOT_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_SP_DEFENSE_UP, @@ -2107,11 +7661,12 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_LANSAT_BERRY] = { - .name = _("LANSAT BERRY"), + .name = _("Lansat Berry"), .itemId = ITEM_LANSAT_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_CRITICAL_UP, @@ -2120,11 +7675,12 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_STARF_BERRY] = { - .name = _("STARF BERRY"), + .name = _("Starf Berry"), .itemId = ITEM_STARF_BERRY, .price = 20, .holdEffect = HOLD_EFFECT_RANDOM_STAT_UP, @@ -2133,1382 +7689,114 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, [ITEM_ENIGMA_BERRY] = { - .name = _("ENIGMA BERRY"), + .name = _("Enigma Berry"), .itemId = ITEM_ENIGMA_BERRY, .price = 20, + .holdEffect = HOLD_EFFECT_ENIGMA_BERRY, .description = sEnigmaBerryDesc, .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_MICLE_BERRY] = + { + .name = _("Micle Berry"), + .itemId = ITEM_MICLE_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_MICLE_BERRY, + .holdEffectParam = 4, + .description = sMicleBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_CUSTAP_BERRY] = + { + .name = _("Custap Berry"), + .itemId = ITEM_CUSTAP_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_CUSTAP_BERRY, + .holdEffectParam = 4, + .description = sCustapBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_JABOCA_BERRY] = + { + .name = _("Jaboca Berry"), + .itemId = ITEM_JABOCA_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_JABOCA_BERRY, + .description = sJabocaBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_ROWAP_BERRY] = + { + .name = _("Rowap Berry"), + .itemId = ITEM_ROWAP_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_ROWAP_BERRY, + .description = sRowapBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_KEE_BERRY] = + { + .name = _("Kee Berry"), + .itemId = ITEM_KEE_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_KEE_BERRY, + .description = sKeeBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_MARANGA_BERRY] = + { + .name = _("Maranga Berry"), + .itemId = ITEM_MARANGA_BERRY, + .price = 20, + .holdEffect = HOLD_EFFECT_MARANGA_BERRY, + .description = sMarangaBerryDesc, + .pocket = POCKET_BERRIES, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_ENIGMA_BERRY_E_READER] = + { + .name = _("Enigma Berry"), + .itemId = ITEM_ENIGMA_BERRY, + .price = 20, + .description = sEnigmaBerryEReaderDesc, + .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, // Type handled by ItemUseOutOfBattle_EnigmaBerry .fieldUseFunc = ItemUseOutOfBattle_EnigmaBerry, .battleUsage = ITEM_B_USE_MEDICINE, .battleUseFunc = ItemUseInBattle_EnigmaBerry, - }, - - [ITEM_UNUSED_BERRY_1] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_UNUSED_BERRY_2] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_UNUSED_BERRY_3] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - -// Hold items - - [ITEM_BRIGHT_POWDER] = - { - .name = _("BRIGHTPOWDER"), - .itemId = ITEM_BRIGHT_POWDER, - .price = 10, - .holdEffect = HOLD_EFFECT_EVASION_UP, - .holdEffectParam = 10, - .description = sBrightPowderDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_WHITE_HERB] = - { - .name = _("WHITE HERB"), - .itemId = ITEM_WHITE_HERB, - .price = 100, - .holdEffect = HOLD_EFFECT_RESTORE_STATS, - .description = sWhiteHerbDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_MACHO_BRACE] = - { - .name = _("MACHO BRACE"), - .itemId = ITEM_MACHO_BRACE, - .price = 3000, - .holdEffect = HOLD_EFFECT_MACHO_BRACE, - .description = sMachoBraceDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_EXP_SHARE] = - { - .name = _("EXP. SHARE"), - .itemId = ITEM_EXP_SHARE, - .price = 3000, - .holdEffect = HOLD_EFFECT_EXP_SHARE, - .description = sExpShareDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_QUICK_CLAW] = - { - .name = _("QUICK CLAW"), - .itemId = ITEM_QUICK_CLAW, - .price = 100, - .holdEffect = HOLD_EFFECT_QUICK_CLAW, - .holdEffectParam = 20, - .description = sQuickClawDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SOOTHE_BELL] = - { - .name = _("SOOTHE BELL"), - .itemId = ITEM_SOOTHE_BELL, - .price = 100, - .holdEffect = HOLD_EFFECT_FRIENDSHIP_UP, - .description = sSootheBellDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_MENTAL_HERB] = - { - .name = _("MENTAL HERB"), - .itemId = ITEM_MENTAL_HERB, - .price = 100, - .holdEffect = HOLD_EFFECT_CURE_ATTRACT, - .description = sMentalHerbDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_CHOICE_BAND] = - { - .name = _("CHOICE BAND"), - .itemId = ITEM_CHOICE_BAND, - .price = 100, - .holdEffect = HOLD_EFFECT_CHOICE_BAND, - .description = sChoiceBandDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_KINGS_ROCK] = - { - .name = _("KING'S ROCK"), - .itemId = ITEM_KINGS_ROCK, - .price = 100, - .holdEffect = HOLD_EFFECT_FLINCH, - .holdEffectParam = 10, - .description = sKingsRockDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SILVER_POWDER] = - { - .name = _("SILVERPOWDER"), - .itemId = ITEM_SILVER_POWDER, - .price = 100, - .holdEffect = HOLD_EFFECT_BUG_POWER, - .holdEffectParam = 10, - .description = sSilverPowderDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_AMULET_COIN] = - { - .name = _("AMULET COIN"), - .itemId = ITEM_AMULET_COIN, - .price = 100, - .holdEffect = HOLD_EFFECT_DOUBLE_PRIZE, - .holdEffectParam = 10, - .description = sAmuletCoinDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_CLEANSE_TAG] = - { - .name = _("CLEANSE TAG"), - .itemId = ITEM_CLEANSE_TAG, - .price = 200, - .holdEffect = HOLD_EFFECT_REPEL, - .description = sCleanseTagDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SOUL_DEW] = - { - .name = _("SOUL DEW"), - .itemId = ITEM_SOUL_DEW, - .price = 200, - .holdEffect = HOLD_EFFECT_SOUL_DEW, - .description = sSoulDewDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_DEEP_SEA_TOOTH] = - { - .name = _("DEEPSEATOOTH"), - .itemId = ITEM_DEEP_SEA_TOOTH, - .price = 200, - .holdEffect = HOLD_EFFECT_DEEP_SEA_TOOTH, - .description = sDeepSeaToothDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_DEEP_SEA_SCALE] = - { - .name = _("DEEPSEASCALE"), - .itemId = ITEM_DEEP_SEA_SCALE, - .price = 200, - .holdEffect = HOLD_EFFECT_DEEP_SEA_SCALE, - .description = sDeepSeaScaleDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SMOKE_BALL] = - { - .name = _("SMOKE BALL"), - .itemId = ITEM_SMOKE_BALL, - .price = 200, - .holdEffect = HOLD_EFFECT_CAN_ALWAYS_RUN, - .description = sSmokeBallDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_EVERSTONE] = - { - .name = _("EVERSTONE"), - .itemId = ITEM_EVERSTONE, - .price = 200, - .holdEffect = HOLD_EFFECT_PREVENT_EVOLVE, - .description = sEverstoneDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_FOCUS_BAND] = - { - .name = _("FOCUS BAND"), - .itemId = ITEM_FOCUS_BAND, - .price = 200, - .holdEffect = HOLD_EFFECT_FOCUS_BAND, - .holdEffectParam = 10, - .description = sFocusBandDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_LUCKY_EGG] = - { - .name = _("LUCKY EGG"), - .itemId = ITEM_LUCKY_EGG, - .price = 200, - .holdEffect = HOLD_EFFECT_LUCKY_EGG, - .description = sLuckyEggDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SCOPE_LENS] = - { - .name = _("SCOPE LENS"), - .itemId = ITEM_SCOPE_LENS, - .price = 200, - .holdEffect = HOLD_EFFECT_SCOPE_LENS, - .description = sScopeLensDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_METAL_COAT] = - { - .name = _("METAL COAT"), - .itemId = ITEM_METAL_COAT, - .price = 100, - .holdEffect = HOLD_EFFECT_STEEL_POWER, - .holdEffectParam = 10, - .description = sMetalCoatDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_LEFTOVERS] = - { - .name = _("LEFTOVERS"), - .itemId = ITEM_LEFTOVERS, - .price = 200, - .holdEffect = HOLD_EFFECT_LEFTOVERS, - .holdEffectParam = 10, - .description = sLeftoversDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_DRAGON_SCALE] = - { - .name = _("DRAGON SCALE"), - .itemId = ITEM_DRAGON_SCALE, - .price = 2100, - .holdEffect = HOLD_EFFECT_DRAGON_SCALE, - .holdEffectParam = 10, - .description = sDragonScaleDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_LIGHT_BALL] = - { - .name = _("LIGHT BALL"), - .itemId = ITEM_LIGHT_BALL, - .price = 100, - .holdEffect = HOLD_EFFECT_LIGHT_BALL, - .description = sLightBallDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SOFT_SAND] = - { - .name = _("SOFT SAND"), - .itemId = ITEM_SOFT_SAND, - .price = 100, - .holdEffect = HOLD_EFFECT_GROUND_POWER, - .holdEffectParam = 10, - .description = sSoftSandDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_HARD_STONE] = - { - .name = _("HARD STONE"), - .itemId = ITEM_HARD_STONE, - .price = 100, - .holdEffect = HOLD_EFFECT_ROCK_POWER, - .holdEffectParam = 10, - .description = sHardStoneDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_MIRACLE_SEED] = - { - .name = _("MIRACLE SEED"), - .itemId = ITEM_MIRACLE_SEED, - .price = 100, - .holdEffect = HOLD_EFFECT_GRASS_POWER, - .holdEffectParam = 10, - .description = sMiracleSeedDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_BLACK_GLASSES] = - { - .name = _("BLACKGLASSES"), - .itemId = ITEM_BLACK_GLASSES, - .price = 100, - .holdEffect = HOLD_EFFECT_DARK_POWER, - .holdEffectParam = 10, - .description = sBlackGlassesDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_BLACK_BELT] = - { - .name = _("BLACK BELT"), - .itemId = ITEM_BLACK_BELT, - .price = 100, - .holdEffect = HOLD_EFFECT_FIGHTING_POWER, - .holdEffectParam = 10, - .description = sBlackBeltDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_MAGNET] = - { - .name = _("MAGNET"), - .itemId = ITEM_MAGNET, - .price = 100, - .holdEffect = HOLD_EFFECT_ELECTRIC_POWER, - .holdEffectParam = 10, - .description = sMagnetDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_MYSTIC_WATER] = - { - .name = _("MYSTIC WATER"), - .itemId = ITEM_MYSTIC_WATER, - .price = 100, - .holdEffect = HOLD_EFFECT_WATER_POWER, - .holdEffectParam = 10, - .description = sMysticWaterDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SHARP_BEAK] = - { - .name = _("SHARP BEAK"), - .itemId = ITEM_SHARP_BEAK, - .price = 100, - .holdEffect = HOLD_EFFECT_FLYING_POWER, - .holdEffectParam = 10, - .description = sSharpBeakDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_POISON_BARB] = - { - .name = _("POISON BARB"), - .itemId = ITEM_POISON_BARB, - .price = 100, - .holdEffect = HOLD_EFFECT_POISON_POWER, - .holdEffectParam = 10, - .description = sPoisonBarbDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_NEVER_MELT_ICE] = - { - .name = _("NEVERMELTICE"), - .itemId = ITEM_NEVER_MELT_ICE, - .price = 100, - .holdEffect = HOLD_EFFECT_ICE_POWER, - .holdEffectParam = 10, - .description = sNeverMeltIceDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SPELL_TAG] = - { - .name = _("SPELL TAG"), - .itemId = ITEM_SPELL_TAG, - .price = 100, - .holdEffect = HOLD_EFFECT_GHOST_POWER, - .holdEffectParam = 10, - .description = sSpellTagDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_TWISTED_SPOON] = - { - .name = _("TWISTEDSPOON"), - .itemId = ITEM_TWISTED_SPOON, - .price = 100, - .holdEffect = HOLD_EFFECT_PSYCHIC_POWER, - .holdEffectParam = 10, - .description = sTwistedSpoonDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_CHARCOAL] = - { - .name = _("CHARCOAL"), - .itemId = ITEM_CHARCOAL, - .price = 9800, - .holdEffect = HOLD_EFFECT_FIRE_POWER, - .holdEffectParam = 10, - .description = sCharcoalDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_DRAGON_FANG] = - { - .name = _("DRAGON FANG"), - .itemId = ITEM_DRAGON_FANG, - .price = 100, - .holdEffect = HOLD_EFFECT_DRAGON_POWER, - .holdEffectParam = 10, - .description = sDragonFangDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SILK_SCARF] = - { - .name = _("SILK SCARF"), - .itemId = ITEM_SILK_SCARF, - .price = 100, - .holdEffect = HOLD_EFFECT_NORMAL_POWER, - .holdEffectParam = 10, - .description = sSilkScarfDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_UP_GRADE] = - { - .name = _("UP-GRADE"), - .itemId = ITEM_UP_GRADE, - .price = 2100, - .holdEffect = HOLD_EFFECT_UP_GRADE, - .description = sUpGradeDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SHELL_BELL] = - { - .name = _("SHELL BELL"), - .itemId = ITEM_SHELL_BELL, - .price = 200, - .holdEffect = HOLD_EFFECT_SHELL_BELL, - .holdEffectParam = 8, - .description = sShellBellDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SEA_INCENSE] = - { - .name = _("SEA INCENSE"), - .itemId = ITEM_SEA_INCENSE, - .price = 9600, - .holdEffect = HOLD_EFFECT_WATER_POWER, - .holdEffectParam = 5, - .description = sSeaIncenseDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_LAX_INCENSE] = - { - .name = _("LAX INCENSE"), - .itemId = ITEM_LAX_INCENSE, - .price = 9600, - .holdEffect = HOLD_EFFECT_EVASION_UP, - .holdEffectParam = 5, - .description = sLaxIncenseDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_LUCKY_PUNCH] = - { - .name = _("LUCKY PUNCH"), - .itemId = ITEM_LUCKY_PUNCH, - .price = 10, - .holdEffect = HOLD_EFFECT_LUCKY_PUNCH, - .description = sLuckyPunchDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_METAL_POWDER] = - { - .name = _("METAL POWDER"), - .itemId = ITEM_METAL_POWDER, - .price = 10, - .holdEffect = HOLD_EFFECT_METAL_POWDER, - .description = sMetalPowderDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_THICK_CLUB] = - { - .name = _("THICK CLUB"), - .itemId = ITEM_THICK_CLUB, - .price = 500, - .holdEffect = HOLD_EFFECT_THICK_CLUB, - .description = sThickClubDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_STICK] = - { - .name = _("STICK"), - .itemId = ITEM_STICK, - .price = 200, - .holdEffect = HOLD_EFFECT_STICK, - .description = sStickDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0E2] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0E3] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0E4] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0E5] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0E6] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0E7] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0E8] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0E9] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0EA] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0EB] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0EC] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0ED] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0EE] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0EF] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0F0] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0F1] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0F2] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0F3] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0F4] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0F5] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0F6] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0F7] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0F8] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0F9] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0FA] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0FB] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0FC] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_0FD] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_RED_SCARF] = - { - .name = _("RED SCARF"), - .itemId = ITEM_RED_SCARF, - .price = 100, - .description = sRedScarfDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_BLUE_SCARF] = - { - .name = _("BLUE SCARF"), - .itemId = ITEM_BLUE_SCARF, - .price = 100, - .description = sBlueScarfDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_PINK_SCARF] = - { - .name = _("PINK SCARF"), - .itemId = ITEM_PINK_SCARF, - .price = 100, - .description = sPinkScarfDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_GREEN_SCARF] = - { - .name = _("GREEN SCARF"), - .itemId = ITEM_GREEN_SCARF, - .price = 100, - .description = sGreenScarfDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_YELLOW_SCARF] = - { - .name = _("YELLOW SCARF"), - .itemId = ITEM_YELLOW_SCARF, - .price = 100, - .description = sYellowScarfDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - -// Key items - - [ITEM_MACH_BIKE] = - { - .name = _("MACH BIKE"), - .itemId = ITEM_MACH_BIKE, - .price = 0, - .description = sMachBikeDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_Bike, - .secondaryId = MACH_BIKE, - }, - - [ITEM_COIN_CASE] = - { - .name = _("COIN CASE"), - .itemId = ITEM_COIN_CASE, - .price = 0, - .description = sCoinCaseDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CoinCase, - }, - - [ITEM_ITEMFINDER] = - { - .name = _("ITEMFINDER"), - .itemId = ITEM_ITEMFINDER, - .price = 0, - .description = sItemfinderDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_Itemfinder, - }, - - [ITEM_OLD_ROD] = - { - .name = _("OLD ROD"), - .itemId = ITEM_OLD_ROD, - .price = 0, - .description = sOldRodDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_Rod, - .secondaryId = OLD_ROD, - }, - - [ITEM_GOOD_ROD] = - { - .name = _("GOOD ROD"), - .itemId = ITEM_GOOD_ROD, - .price = 0, - .description = sGoodRodDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_Rod, - .secondaryId = GOOD_ROD, - }, - - [ITEM_SUPER_ROD] = - { - .name = _("SUPER ROD"), - .itemId = ITEM_SUPER_ROD, - .price = 0, - .description = sSuperRodDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_Rod, - .secondaryId = SUPER_ROD, - }, - - [ITEM_SS_TICKET] = - { - .name = _("S.S. TICKET"), - .itemId = ITEM_SS_TICKET, - .price = 0, - .description = sSSTicketDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_CONTEST_PASS] = - { - .name = _("CONTEST PASS"), - .itemId = ITEM_CONTEST_PASS, - .price = 0, - .description = sContestPassDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_10B] = - { - .name = _("????????"), - .itemId = ITEM_NONE, - .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_WAILMER_PAIL] = - { - .name = _("WAILMER PAIL"), - .itemId = ITEM_WAILMER_PAIL, - .price = 0, - .description = sWailmerPailDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_WailmerPail, - }, - - [ITEM_DEVON_GOODS] = - { - .name = _("DEVON GOODS"), - .itemId = ITEM_DEVON_GOODS, - .price = 0, - .description = sDevonGoodsDesc, - .importance = 2, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SOOT_SACK] = - { - .name = _("SOOT SACK"), - .itemId = ITEM_SOOT_SACK, - .price = 0, - .description = sSootSackDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_BASEMENT_KEY] = - { - .name = _("BASEMENT KEY"), - .itemId = ITEM_BASEMENT_KEY, - .price = 0, - .description = sBasementKeyDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_ACRO_BIKE] = - { - .name = _("ACRO BIKE"), - .itemId = ITEM_ACRO_BIKE, - .price = 0, - .description = sAcroBikeDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_Bike, - .secondaryId = ACRO_BIKE, - }, - - [ITEM_POKEBLOCK_CASE] = - { - .name = _("{POKEBLOCK} CASE"), - .itemId = ITEM_POKEBLOCK_CASE, - .price = 0, - .description = sPokeblockCaseDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_PBLOCK_CASE, - .fieldUseFunc = ItemUseOutOfBattle_PokeblockCase, - }, - - [ITEM_LETTER] = - { - .name = _("LETTER"), - .itemId = ITEM_LETTER, - .price = 0, - .description = sLetterDesc, - .importance = 2, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_EON_TICKET] = - { - .name = _("EON TICKET"), - .itemId = ITEM_EON_TICKET, - .price = 0, - .description = sEonTicketDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .secondaryId = 1, - }, - - [ITEM_RED_ORB] = - { - .name = _("RED ORB"), - .itemId = ITEM_RED_ORB, - .price = 0, - .description = sRedOrbDesc, - .importance = 2, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_BLUE_ORB] = - { - .name = _("BLUE ORB"), - .itemId = ITEM_BLUE_ORB, - .price = 0, - .description = sBlueOrbDesc, - .importance = 2, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_SCANNER] = - { - .name = _("SCANNER"), - .itemId = ITEM_SCANNER, - .price = 0, - .description = sScannerDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_GO_GOGGLES] = - { - .name = _("GO-GOGGLES"), - .itemId = ITEM_GO_GOGGLES, - .price = 0, - .description = sGoGogglesDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_METEORITE] = - { - .name = _("METEORITE"), - .itemId = ITEM_METEORITE, - .price = 0, - .description = sMeteoriteDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_ROOM_1_KEY] = - { - .name = _("RM. 1 KEY"), - .itemId = ITEM_ROOM_1_KEY, - .price = 0, - .description = sRoom1KeyDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_ROOM_2_KEY] = - { - .name = _("RM. 2 KEY"), - .itemId = ITEM_ROOM_2_KEY, - .price = 0, - .description = sRoom2KeyDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_ROOM_4_KEY] = - { - .name = _("RM. 4 KEY"), - .itemId = ITEM_ROOM_4_KEY, - .price = 0, - .description = sRoom4KeyDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_ROOM_6_KEY] = - { - .name = _("RM. 6 KEY"), - .itemId = ITEM_ROOM_6_KEY, - .price = 0, - .description = sRoom6KeyDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_STORAGE_KEY] = - { - .name = _("STORAGE KEY"), - .itemId = ITEM_STORAGE_KEY, - .price = 0, - .description = sStorageKeyDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_ROOT_FOSSIL] = - { - .name = _("ROOT FOSSIL"), - .itemId = ITEM_ROOT_FOSSIL, - .price = 0, - .description = sRootFossilDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_CLAW_FOSSIL] = - { - .name = _("CLAW FOSSIL"), - .itemId = ITEM_CLAW_FOSSIL, - .price = 0, - .description = sClawFossilDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_DEVON_SCOPE] = - { - .name = _("DEVON SCOPE"), - .itemId = ITEM_DEVON_SCOPE, - .price = 0, - .description = sDevonScopeDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, }, // TMs/HMs @@ -3522,6 +7810,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 150, }, [ITEM_TM02_DRAGON_CLAW] = @@ -3533,6 +7822,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 80, }, [ITEM_TM03_WATER_PULSE] = @@ -3544,6 +7834,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 60, }, [ITEM_TM04_CALM_MIND] = @@ -3555,6 +7846,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM05_ROAR] = @@ -3566,6 +7858,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM06_TOXIC] = @@ -3577,6 +7870,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM07_HAIL] = @@ -3588,6 +7882,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM08_BULK_UP] = @@ -3599,6 +7894,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM09_BULLET_SEED] = @@ -3610,6 +7906,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flingPower = 25, + #else + .flingPower = 10, + #endif }, [ITEM_TM10_HIDDEN_POWER] = @@ -3621,6 +7922,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 60, + #else + .flingPower = 10, + #endif }, [ITEM_TM11_SUNNY_DAY] = @@ -3632,6 +7938,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM12_TAUNT] = @@ -3643,6 +7950,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM13_ICE_BEAM] = @@ -3654,6 +7962,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 90, + #else + .flingPower = 95, + #endif }, [ITEM_TM14_BLIZZARD] = @@ -3665,6 +7978,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 110, + #else + .flingPower = 120, + #endif }, [ITEM_TM15_HYPER_BEAM] = @@ -3676,6 +7994,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 150, }, [ITEM_TM16_LIGHT_SCREEN] = @@ -3687,6 +8006,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM17_PROTECT] = @@ -3698,6 +8018,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM18_RAIN_DANCE] = @@ -3709,6 +8030,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM19_GIGA_DRAIN] = @@ -3720,6 +8042,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_5 + .flingPower = 75, + #else + .flingPower = 60, + #endif }, [ITEM_TM20_SAFEGUARD] = @@ -3731,6 +8058,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM21_FRUSTRATION] = @@ -3742,17 +8070,19 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, - [ITEM_TM22_SOLARBEAM] = + [ITEM_TM22_SOLAR_BEAM] = { .name = _("TM22"), - .itemId = ITEM_TM22_SOLARBEAM, + .itemId = ITEM_TM22_SOLAR_BEAM, .price = 3000, .description = sTM22Desc, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 120, }, [ITEM_TM23_IRON_TAIL] = @@ -3764,6 +8094,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 100, }, [ITEM_TM24_THUNDERBOLT] = @@ -3775,6 +8106,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 90, + #else + .flingPower = 95, + #endif }, [ITEM_TM25_THUNDER] = @@ -3786,6 +8122,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 110, + #else + .flingPower = 120, + #endif }, [ITEM_TM26_EARTHQUAKE] = @@ -3797,6 +8138,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 100, }, [ITEM_TM27_RETURN] = @@ -3808,6 +8150,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM28_DIG] = @@ -3819,6 +8162,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flingPower = 80, + #else + .flingPower = 60, + #endif }, [ITEM_TM29_PSYCHIC] = @@ -3830,6 +8178,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 90, }, [ITEM_TM30_SHADOW_BALL] = @@ -3841,6 +8190,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 80, }, [ITEM_TM31_BRICK_BREAK] = @@ -3852,6 +8202,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 75, }, [ITEM_TM32_DOUBLE_TEAM] = @@ -3863,6 +8214,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM33_REFLECT] = @@ -3874,6 +8226,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM34_SHOCK_WAVE] = @@ -3885,6 +8238,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 60, }, [ITEM_TM35_FLAMETHROWER] = @@ -3896,6 +8250,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 90, + #else + .flingPower = 95, + #endif }, [ITEM_TM36_SLUDGE_BOMB] = @@ -3907,6 +8266,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 90, }, [ITEM_TM37_SANDSTORM] = @@ -3918,6 +8278,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM38_FIRE_BLAST] = @@ -3929,6 +8290,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 110, + #else + .flingPower = 120, + #endif }, [ITEM_TM39_ROCK_TOMB] = @@ -3940,6 +8306,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 60, + #else + .flingPower = 50, + #endif }, [ITEM_TM40_AERIAL_ACE] = @@ -3951,6 +8322,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 60, }, [ITEM_TM41_TORMENT] = @@ -3962,6 +8334,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM42_FACADE] = @@ -3973,6 +8346,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM43_SECRET_POWER] = @@ -3984,6 +8358,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 70, }, [ITEM_TM44_REST] = @@ -3995,6 +8370,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM45_ATTRACT] = @@ -4006,6 +8382,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM46_THIEF] = @@ -4017,6 +8394,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 60, + #else + .flingPower = 40, + #endif }, [ITEM_TM47_STEEL_WING] = @@ -4028,6 +8410,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 70, }, [ITEM_TM48_SKILL_SWAP] = @@ -4039,6 +8422,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM49_SNATCH] = @@ -4050,6 +8434,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_TM50_OVERHEAT] = @@ -4061,6 +8446,561 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 130, + #else + .flingPower = 140, + #endif + }, + + [ITEM_TM51] = + { + .name = _("TM51"), + .itemId = ITEM_TM51, + .price = 3000, + .description = sTM51Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM52] = + { + .name = _("TM52"), + .itemId = ITEM_TM52, + .price = 3000, + .description = sTM52Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM53] = + { + .name = _("TM53"), + .itemId = ITEM_TM53, + .price = 3000, + .description = sTM53Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM54] = + { + .name = _("TM54"), + .itemId = ITEM_TM54, + .price = 3000, + .description = sTM54Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM55] = + { + .name = _("TM55"), + .itemId = ITEM_TM55, + .price = 3000, + .description = sTM55Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM56] = + { + .name = _("TM56"), + .itemId = ITEM_TM56, + .price = 3000, + .description = sTM56Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM57] = + { + .name = _("TM57"), + .itemId = ITEM_TM57, + .price = 3000, + .description = sTM57Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM58] = + { + .name = _("TM58"), + .itemId = ITEM_TM58, + .price = 3000, + .description = sTM58Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM59] = + { + .name = _("TM59"), + .itemId = ITEM_TM59, + .price = 3000, + .description = sTM59Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM60] = + { + .name = _("TM60"), + .itemId = ITEM_TM60, + .price = 3000, + .description = sTM60Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM61] = + { + .name = _("TM61"), + .itemId = ITEM_TM61, + .price = 3000, + .description = sTM61Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM62] = + { + .name = _("TM62"), + .itemId = ITEM_TM62, + .price = 3000, + .description = sTM62Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM63] = + { + .name = _("TM63"), + .itemId = ITEM_TM63, + .price = 3000, + .description = sTM63Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM64] = + { + .name = _("TM64"), + .itemId = ITEM_TM64, + .price = 3000, + .description = sTM64Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM65] = + { + .name = _("TM65"), + .itemId = ITEM_TM65, + .price = 3000, + .description = sTM65Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM66] = + { + .name = _("TM66"), + .itemId = ITEM_TM66, + .price = 3000, + .description = sTM66Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM67] = + { + .name = _("TM67"), + .itemId = ITEM_TM67, + .price = 3000, + .description = sTM67Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM68] = + { + .name = _("TM68"), + .itemId = ITEM_TM68, + .price = 3000, + .description = sTM68Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM69] = + { + .name = _("TM69"), + .itemId = ITEM_TM69, + .price = 3000, + .description = sTM69Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM70] = + { + .name = _("TM70"), + .itemId = ITEM_TM70, + .price = 3000, + .description = sTM70Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM71] = + { + .name = _("TM71"), + .itemId = ITEM_TM71, + .price = 3000, + .description = sTM71Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM72] = + { + .name = _("TM72"), + .itemId = ITEM_TM72, + .price = 3000, + .description = sTM72Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM73] = + { + .name = _("TM73"), + .itemId = ITEM_TM73, + .price = 3000, + .description = sTM73Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM74] = + { + .name = _("TM74"), + .itemId = ITEM_TM74, + .price = 3000, + .description = sTM74Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM75] = + { + .name = _("TM75"), + .itemId = ITEM_TM75, + .price = 3000, + .description = sTM75Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM76] = + { + .name = _("TM76"), + .itemId = ITEM_TM76, + .price = 3000, + .description = sTM76Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM77] = + { + .name = _("TM77"), + .itemId = ITEM_TM77, + .price = 3000, + .description = sTM77Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM78] = + { + .name = _("TM78"), + .itemId = ITEM_TM78, + .price = 3000, + .description = sTM78Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM79] = + { + .name = _("TM79"), + .itemId = ITEM_TM79, + .price = 3000, + .description = sTM79Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM80] = + { + .name = _("TM80"), + .itemId = ITEM_TM80, + .price = 3000, + .description = sTM80Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM81] = + { + .name = _("TM81"), + .itemId = ITEM_TM81, + .price = 3000, + .description = sTM81Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM82] = + { + .name = _("TM82"), + .itemId = ITEM_TM82, + .price = 3000, + .description = sTM82Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM83] = + { + .name = _("TM83"), + .itemId = ITEM_TM83, + .price = 3000, + .description = sTM83Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM84] = + { + .name = _("TM84"), + .itemId = ITEM_TM84, + .price = 3000, + .description = sTM84Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM85] = + { + .name = _("TM85"), + .itemId = ITEM_TM85, + .price = 3000, + .description = sTM85Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM86] = + { + .name = _("TM86"), + .itemId = ITEM_TM86, + .price = 3000, + .description = sTM86Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM87] = + { + .name = _("TM87"), + .itemId = ITEM_TM87, + .price = 3000, + .description = sTM87Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM88] = + { + .name = _("TM88"), + .itemId = ITEM_TM88, + .price = 3000, + .description = sTM88Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM89] = + { + .name = _("TM89"), + .itemId = ITEM_TM89, + .price = 3000, + .description = sTM89Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM90] = + { + .name = _("TM90"), + .itemId = ITEM_TM90, + .price = 3000, + .description = sTM90Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM91] = + { + .name = _("TM91"), + .itemId = ITEM_TM91, + .price = 3000, + .description = sTM91Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM92] = + { + .name = _("TM92"), + .itemId = ITEM_TM92, + .price = 3000, + .description = sTM92Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM93] = + { + .name = _("TM93"), + .itemId = ITEM_TM93, + .price = 3000, + .description = sTM93Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM94] = + { + .name = _("TM94"), + .itemId = ITEM_TM94, + .price = 3000, + .description = sTM94Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM95] = + { + .name = _("TM95"), + .itemId = ITEM_TM95, + .price = 3000, + .description = sTM95Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM96] = + { + .name = _("TM96"), + .itemId = ITEM_TM96, + .price = 3000, + .description = sTM96Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM97] = + { + .name = _("TM97"), + .itemId = ITEM_TM97, + .price = 3000, + .description = sTM97Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM98] = + { + .name = _("TM98"), + .itemId = ITEM_TM98, + .price = 3000, + .description = sTM98Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM99] = + { + .name = _("TM99"), + .itemId = ITEM_TM99, + .price = 3000, + .description = sTM99Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, + }, + + [ITEM_TM100] = + { + .name = _("TM100"), + .itemId = ITEM_TM100, + .price = 3000, + .description = sTM100Desc, + .pocket = POCKET_TM_HM, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, [ITEM_HM01_CUT] = @@ -4073,6 +9013,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 50, }, [ITEM_HM02_FLY] = @@ -4085,6 +9026,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flingPower = 90, + #else + .flingPower = 70, + #endif }, [ITEM_HM03_SURF] = @@ -4097,6 +9043,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_6 + .flingPower = 90, + #else + .flingPower = 95, + #endif }, [ITEM_HM04_STRENGTH] = @@ -4109,6 +9060,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 80, }, [ITEM_HM05_FLASH] = @@ -4121,6 +9073,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 10, }, [ITEM_HM06_ROCK_SMASH] = @@ -4133,6 +9086,11 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flingPower = 20, + #else + .flingPower = 40, + #endif }, [ITEM_HM07_WATERFALL] = @@ -4145,6 +9103,7 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + .flingPower = 80, }, [ITEM_HM08_DIVE] = @@ -4157,39 +9116,442 @@ const struct Item gItems[] = .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, + #if B_UPDATED_MOVE_DATA >= GEN_4 + .flingPower = 80, + #else + .flingPower = 60, + #endif }, - [ITEM_15B] = + +// Charms + + [ITEM_OVAL_CHARM] = { - .name = _("????????"), - .itemId = ITEM_NONE, + .name = _("Oval Charm"), + .itemId = ITEM_OVAL_CHARM, .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, + .importance = 1, + .description = sOvalCharmDesc, + .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_15C] = + [ITEM_SHINY_CHARM] = { - .name = _("????????"), - .itemId = ITEM_NONE, + .name = _("Shiny Charm"), + .itemId = ITEM_SHINY_CHARM, .price = 0, - .description = sDummyDesc, - .pocket = POCKET_ITEMS, + .importance = 1, + .description = sShinyCharmDesc, + .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, -// FireRed/LeafGreen key items - - [ITEM_OAKS_PARCEL] = + [ITEM_CATCHING_CHARM] = { - .name = _("OAK'S PARCEL"), - .itemId = ITEM_OAKS_PARCEL, + .name = _("CatchngCharm"), + .itemId = ITEM_CATCHING_CHARM, .price = 0, - .description = sOaksParcelDesc, - .importance = 2, + .importance = 1, + .description = sCatchingCharmDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_EXP_CHARM] = + { + .name = _("Exp. Charm"), + .itemId = ITEM_EXP_CHARM, + .price = 0, + .importance = 1, + .description = sExpCharmDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + +// Form-changing Key Items + + [ITEM_ROTOM_CATALOG] = + { + .name = _("RotomCatalog"), + .itemId = ITEM_ROTOM_CATALOG, + .price = 0, + .importance = 1, + .description = sRotomCatalogDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + }, + + [ITEM_GRACIDEA] = + { + .name = _("Gracidea"), + .itemId = ITEM_GRACIDEA, + .price = 0, + .description = sGracideaDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange, + .secondaryId = FORM_ITEM_USE_TIME, + }, + + [ITEM_REVEAL_GLASS] = + { + .name = _("Reveal Glass"), + .itemId = ITEM_REVEAL_GLASS, + .price = 0, + .description = sRevealGlassDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange, + .secondaryId = FORM_ITEM_USE, + }, + + [ITEM_DNA_SPLICERS] = + { + .name = _("DNA Splicers"), + .itemId = ITEM_DNA_SPLICERS, + .price = 0, + .description = sDNASplicersDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange, + .secondaryId = FORM_ITEM_USE, + }, + + [ITEM_ZYGARDE_CUBE] = + { + .name = _("Zygarde Cube"), + .itemId = ITEM_ZYGARDE_CUBE, + .price = 0, + .importance = 1, + .description = sZygardeCubeDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + }, + + [ITEM_PRISON_BOTTLE] = + { + .name = _("Prison Bottle"), + .itemId = ITEM_PRISON_BOTTLE, + .price = 0, + .description = sPrisonBottleDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange, + .secondaryId = FORM_ITEM_USE, + }, + + [ITEM_N_SOLARIZER] = + { + .name = _("N-Solarizer"), + .itemId = ITEM_N_SOLARIZER, + .price = 0, + .description = sNSolarizerDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange, + .secondaryId = FORM_ITEM_USE, + }, + + [ITEM_N_LUNARIZER] = + { + .name = _("N-Lunarizer"), + .itemId = ITEM_N_LUNARIZER, + .price = 0, + .description = sNLunarizerDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange, + .secondaryId = FORM_ITEM_USE, + }, + + [ITEM_REINS_OF_UNITY] = + { + .name = _("ReinsOfUnity"), + .itemId = ITEM_REINS_OF_UNITY, + .price = 0, + .description = sReinsOfUnityDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_FormChange, + .secondaryId = FORM_ITEM_USE, + }, + +// Battle Mechanic Key Items + + [ITEM_MEGA_RING] = + { + .name = _("Mega Ring"), + .itemId = ITEM_MEGA_RING, + .price = 0, + .importance = 1, + .description = sMegaRingDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_Z_POWER_RING] = + { + .name = _("Z-Power Ring"), + .itemId = ITEM_Z_POWER_RING, + .price = 0, + .importance = 1, + .description = sZPowerRingDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_DYNAMAX_BAND] = + { + .name = _("Dynamax Band"), + .itemId = ITEM_DYNAMAX_BAND, + .price = 0, + .description = sDynamaxBandDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + +// Misc. Key Items + + [ITEM_BICYCLE] = + { + .name = _("Bicycle"), + .itemId = ITEM_BICYCLE, + .price = 0, + .description = sBicycleDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_MACH_BIKE] = + { + .name = _("Mach Bike"), + .itemId = ITEM_MACH_BIKE, + .price = 0, + .description = sMachBikeDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_Bike, + .secondaryId = MACH_BIKE, + }, + + [ITEM_ACRO_BIKE] = + { + .name = _("Acro Bike"), + .itemId = ITEM_ACRO_BIKE, + .price = 0, + .description = sAcroBikeDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_Bike, + .secondaryId = ACRO_BIKE, + }, + + [ITEM_OLD_ROD] = + { + .name = _("Old Rod"), + .itemId = ITEM_OLD_ROD, + .price = 0, + .description = sOldRodDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_Rod, + .secondaryId = OLD_ROD, + }, + + [ITEM_GOOD_ROD] = + { + .name = _("Good Rod"), + .itemId = ITEM_GOOD_ROD, + .price = 0, + .description = sGoodRodDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_Rod, + .secondaryId = GOOD_ROD, + }, + + [ITEM_SUPER_ROD] = + { + .name = _("Super Rod"), + .itemId = ITEM_SUPER_ROD, + .price = 0, + .description = sSuperRodDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_Rod, + .secondaryId = SUPER_ROD, + }, + + [ITEM_DOWSING_MACHINE] = + { + .name = _("Dowsing MCHN"), + .itemId = ITEM_DOWSING_MACHINE, + .price = 0, + .description = sDowsingMachineDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_Itemfinder, + }, + + [ITEM_TOWN_MAP] = + { + .name = _("Town Map"), + .itemId = ITEM_TOWN_MAP, + .price = 0, + .description = sTownMapDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_VS_SEEKER] = + { + .name = _("Vs. Seeker"), + .itemId = ITEM_VS_SEEKER, + .price = 0, + .description = sVsSeekerDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_TM_CASE] = + { + .name = _("TM Case"), + .itemId = ITEM_TM_CASE, + .price = 0, + .description = sTMCaseDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_BERRY_POUCH] = + { + .name = _("Berry Pouch"), + .itemId = ITEM_BERRY_POUCH, + .price = 0, + .description = sBerryPouchDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_POKEMON_BOX_LINK] = + { + .name = _("{PKMN} Box Link"), + .itemId = ITEM_POKEMON_BOX_LINK, + .price = 0, + .description = sPokemonBoxLinkDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + }, + + [ITEM_COIN_CASE] = + { + .name = _("Coin Case"), + .itemId = ITEM_COIN_CASE, + .price = 0, + .description = sCoinCaseDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CoinCase, + }, + + [ITEM_POWDER_JAR] = + { + .name = _("Powder Jar"), + .itemId = ITEM_POWDER_JAR, + .price = 0, + .description = sPowderJarDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_PowderJar, + }, + + [ITEM_WAILMER_PAIL] = + { + .name = _("Wailmer Pail"), + .itemId = ITEM_WAILMER_PAIL, + .price = 0, + .description = sWailmerPailDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_WailmerPail, + }, + + [ITEM_POKE_RADAR] = + { + .name = _("Poké Radar"), + .itemId = ITEM_POKE_RADAR, + .price = 0, + .description = sPokeRadarDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + }, + + [ITEM_POKEBLOCK_CASE] = + { + .name = _("{POKEBLOCK} Case"), + .itemId = ITEM_POKEBLOCK_CASE, + .price = 0, + .description = sPokeblockCaseDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_PBLOCK_CASE, + .fieldUseFunc = ItemUseOutOfBattle_PokeblockCase, + }, + + [ITEM_SOOT_SACK] = + { + .name = _("Soot Sack"), + .itemId = ITEM_SOOT_SACK, + .price = 0, + .description = sSootSackDesc, + .importance = 1, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -4197,7 +9559,7 @@ const struct Item gItems[] = [ITEM_POKE_FLUTE] = { - .name = _("POKé FLUTE"), + .name = _("Poké Flute"), .itemId = ITEM_POKE_FLUTE, .price = 0, .description = sPokeFluteDesc, @@ -4207,9 +9569,282 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, + [ITEM_FAME_CHECKER] = + { + .name = _("Fame Checker"), + .itemId = ITEM_FAME_CHECKER, + .price = 0, + .description = sFameCheckerDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_TEACHY_TV] = + { + .name = _("Teachy TV"), + .itemId = ITEM_TEACHY_TV, + .price = 0, + .description = sTeachyTVDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_FIELD, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + +// Story Key Items + + [ITEM_SS_TICKET] = + { + .name = _("S.S. Ticket"), + .itemId = ITEM_SS_TICKET, + .price = 0, + .description = sSSTicketDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_EON_TICKET] = + { + .name = _("Eon Ticket"), + .itemId = ITEM_EON_TICKET, + .price = 0, + .description = sEonTicketDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = 1, + }, + + [ITEM_MYSTIC_TICKET] = + { + .name = _("Mystic Ticket"), + .itemId = ITEM_MYSTIC_TICKET, + .price = 0, + .description = sMysticTicketDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_AURORA_TICKET] = + { + .name = _("Aurora Ticket"), + .itemId = ITEM_AURORA_TICKET, + .price = 0, + .description = sAuroraTicketDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_OLD_SEA_MAP] = + { + .name = _("Old Sea Map"), + .itemId = ITEM_OLD_SEA_MAP, + .price = 0, + .description = sOldSeaMapDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_LETTER] = + { + .name = _("Letter"), + .itemId = ITEM_LETTER, + .price = 0, + .description = sLetterDesc, + .importance = 2, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_DEVON_PARTS] = + { + .name = _("Devon Parts"), + .itemId = ITEM_DEVON_PARTS, + .price = 0, + .description = sDevonPartsDesc, + .importance = 2, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_GO_GOGGLES] = + { + .name = _("Go-Goggles"), + .itemId = ITEM_GO_GOGGLES, + .price = 0, + .description = sGoGogglesDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_DEVON_SCOPE] = + { + .name = _("Devon Scope"), + .itemId = ITEM_DEVON_SCOPE, + .price = 0, + .description = sDevonScopeDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_BASEMENT_KEY] = + { + .name = _("Basement Key"), + .itemId = ITEM_BASEMENT_KEY, + .price = 0, + .description = sBasementKeyDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_SCANNER] = + { + .name = _("Scanner"), + .itemId = ITEM_SCANNER, + .price = 0, + .description = sScannerDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_STORAGE_KEY] = + { + .name = _("Storage Key"), + .itemId = ITEM_STORAGE_KEY, + .price = 0, + .description = sStorageKeyDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_KEY_TO_ROOM_1] = + { + .name = _("Key to Room 1"), + .itemId = ITEM_KEY_TO_ROOM_1, + .price = 0, + .description = sKeyToRoom1Desc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_KEY_TO_ROOM_2] = + { + .name = _("Key to Room 2"), + .itemId = ITEM_KEY_TO_ROOM_2, + .price = 0, + .description = sKeyToRoom2Desc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_KEY_TO_ROOM_4] = + { + .name = _("Key to Room 4"), + .itemId = ITEM_KEY_TO_ROOM_4, + .price = 0, + .description = sKeyToRoom4Desc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_KEY_TO_ROOM_6] = + { + .name = _("Key to Room 6"), + .itemId = ITEM_KEY_TO_ROOM_6, + .price = 0, + .description = sKeyToRoom6Desc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_METEORITE] = + { + .name = _("Meteorite"), + .itemId = ITEM_METEORITE, + .price = 0, + .description = sMeteoriteDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_MAGMA_EMBLEM] = + { + .name = _("Magma Emblem"), + .itemId = ITEM_MAGMA_EMBLEM, + .price = 0, + .description = sMagmaEmblemDesc, + .importance = 1, + .registrability = TRUE, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_CONTEST_PASS] = + { + .name = _("Contest Pass"), + .itemId = ITEM_CONTEST_PASS, + .price = 0, + .description = sContestPassDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_OAKS_PARCEL] = + { + .name = _("Oak's Parcel"), + .itemId = ITEM_OAKS_PARCEL, + .price = 0, + .description = sOaksParcelDesc, + .importance = 2, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + [ITEM_SECRET_KEY] = { - .name = _("SECRET KEY"), + .name = _("Secret Key"), .itemId = ITEM_SECRET_KEY, .price = 0, .description = sSecretKeyDesc, @@ -4221,7 +9856,7 @@ const struct Item gItems[] = [ITEM_BIKE_VOUCHER] = { - .name = _("BIKE VOUCHER"), + .name = _("Bike Voucher"), .itemId = ITEM_BIKE_VOUCHER, .price = 0, .description = sBikeVoucherDesc, @@ -4233,7 +9868,7 @@ const struct Item gItems[] = [ITEM_GOLD_TEETH] = { - .name = _("GOLD TEETH"), + .name = _("Gold Teeth"), .itemId = ITEM_GOLD_TEETH, .price = 0, .description = sGoldTeethDesc, @@ -4243,21 +9878,9 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_OLD_AMBER] = - { - .name = _("OLD AMBER"), - .itemId = ITEM_OLD_AMBER, - .price = 0, - .description = sOldAmberDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - [ITEM_CARD_KEY] = { - .name = _("CARD KEY"), + .name = _("Card Key"), .itemId = ITEM_CARD_KEY, .price = 0, .description = sCardKeyDesc, @@ -4269,7 +9892,7 @@ const struct Item gItems[] = [ITEM_LIFT_KEY] = { - .name = _("LIFT KEY"), + .name = _("Lift Key"), .itemId = ITEM_LIFT_KEY, .price = 0, .description = sLiftKeyDesc, @@ -4279,33 +9902,9 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_HELIX_FOSSIL] = - { - .name = _("HELIX FOSSIL"), - .itemId = ITEM_HELIX_FOSSIL, - .price = 0, - .description = sHelixFossilDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_DOME_FOSSIL] = - { - .name = _("DOME FOSSIL"), - .itemId = ITEM_DOME_FOSSIL, - .price = 0, - .description = sDomeFossilDesc, - .importance = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - [ITEM_SILPH_SCOPE] = { - .name = _("SILPH SCOPE"), + .name = _("Silph Scope"), .itemId = ITEM_SILPH_SCOPE, .price = 0, .description = sSilphScopeDesc, @@ -4315,105 +9914,14 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_BICYCLE] = - { - .name = _("BICYCLE"), - .itemId = ITEM_BICYCLE, - .price = 0, - .description = sBicycleDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_TOWN_MAP] = - { - .name = _("TOWN MAP"), - .itemId = ITEM_TOWN_MAP, - .price = 0, - .description = sTownMapDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_VS_SEEKER] = - { - .name = _("VS SEEKER"), - .itemId = ITEM_VS_SEEKER, - .price = 0, - .description = sVSSeekerDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_FAME_CHECKER] = - { - .name = _("FAME CHECKER"), - .itemId = ITEM_FAME_CHECKER, - .price = 0, - .description = sFameCheckerDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_TM_CASE] = - { - .name = _("TM CASE"), - .itemId = ITEM_TM_CASE, - .price = 0, - .description = sTMCaseDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_BERRY_POUCH] = - { - .name = _("BERRY POUCH"), - .itemId = ITEM_BERRY_POUCH, - .price = 0, - .description = sBerryPouchDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_TEACHY_TV] = - { - .name = _("TEACHY TV"), - .itemId = ITEM_TEACHY_TV, - .price = 0, - .description = sTeachyTVDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_FIELD, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - [ITEM_TRI_PASS] = { - .name = _("TRI-PASS"), + .name = _("Tri-Pass"), .itemId = ITEM_TRI_PASS, .price = 0, .description = sTriPassDesc, .importance = 1, - .unk19 = 1, + .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -4421,12 +9929,12 @@ const struct Item gItems[] = [ITEM_RAINBOW_PASS] = { - .name = _("RAINBOW PASS"), + .name = _("Rainbow Pass"), .itemId = ITEM_RAINBOW_PASS, .price = 0, .description = sRainbowPassDesc, .importance = 1, - .unk19 = 1, + .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -4434,64 +9942,25 @@ const struct Item gItems[] = [ITEM_TEA] = { - .name = _("TEA"), + .name = _("Tea"), .itemId = ITEM_TEA, .price = 0, .description = sTeaDesc, .importance = 1, - .unk19 = 1, + .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_MYSTIC_TICKET] = - { - .name = _("MYSTICTICKET"), - .itemId = ITEM_MYSTIC_TICKET, - .price = 0, - .description = sMysticTicketDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_AURORA_TICKET] = - { - .name = _("AURORATICKET"), - .itemId = ITEM_AURORA_TICKET, - .price = 0, - .description = sAuroraTicketDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_POWDER_JAR] = - { - .name = _("POWDER JAR"), - .itemId = ITEM_POWDER_JAR, - .price = 0, - .description = sPowderJarDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_PowderJar, - }, - [ITEM_RUBY] = { - .name = _("RUBY"), + .name = _("Ruby"), .itemId = ITEM_RUBY, .price = 0, .description = sRubyDesc, .importance = 1, - .unk19 = 1, + .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -4499,40 +9968,12 @@ const struct Item gItems[] = [ITEM_SAPPHIRE] = { - .name = _("SAPPHIRE"), + .name = _("Sapphire"), .itemId = ITEM_SAPPHIRE, .price = 0, .description = sSapphireDesc, .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - -// Emerald-specific key items - - [ITEM_MAGMA_EMBLEM] = - { - .name = _("MAGMA EMBLEM"), - .itemId = ITEM_MAGMA_EMBLEM, - .price = 0, - .description = sMagmaEmblemDesc, - .importance = 1, - .unk19 = 1, - .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - }, - - [ITEM_OLD_SEA_MAP] = - { - .name = _("OLD SEA MAP"), - .itemId = ITEM_OLD_SEA_MAP, - .price = 0, - .description = sOldSeaMapDesc, - .importance = 1, - .unk19 = 1, + .registrability = TRUE, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h index 818a5fd5f3..bff13c504d 100644 --- a/src/data/lilycove_lady.h +++ b/src/data/lilycove_lady.h @@ -1,15 +1,14 @@ -#include "constants/easy_chat.h" #include "constants/event_objects.h" #include "constants/items.h" #include "constants/moves.h" static const u16 sContestLadyMonGfxId[] = { - OBJ_EVENT_GFX_ZIGZAGOON_1, - OBJ_EVENT_GFX_SKITTY, - OBJ_EVENT_GFX_POOCHYENA, - OBJ_EVENT_GFX_KECLEON, - OBJ_EVENT_GFX_PIKACHU + [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 }; static const u16 sLilycoveLadyGfxId[] = @@ -20,7 +19,7 @@ static const u16 sLilycoveLadyGfxId[] = }; // Quiz Lady data -static const u16 sQuizLadyQuestion1[] = +static const u16 sQuizLadyQuestion1[QUIZ_QUESTION_LEN] = { EC_WORD_WHICH, EC_WORD_STORES, @@ -33,9 +32,9 @@ static const u16 sQuizLadyQuestion1[] = EC_WORD_POKENAV }; -static const u16 sQuizLadyQuestion2[] = +static const u16 sQuizLadyQuestion2[QUIZ_QUESTION_LEN] = { - EC_WORD_WHICH, + EC_WORD_WHICH, EC_WORD_ISN_T, EC_WORD_A, EC_WORD_GAME, @@ -46,7 +45,7 @@ static const u16 sQuizLadyQuestion2[] = EC_WORD_DARK }; -static const u16 sQuizLadyQuestion3[] = +static const u16 sQuizLadyQuestion3[QUIZ_QUESTION_LEN] = { EC_WORD_HOW, EC_WORD_DO, @@ -59,7 +58,7 @@ static const u16 sQuizLadyQuestion3[] = EC_WORD_CUTE_CHARM }; -static const u16 sQuizLadyQuestion4[] = +static const u16 sQuizLadyQuestion4[QUIZ_QUESTION_LEN] = { EC_WORD_WHICH, EC_WORD_IS, @@ -72,7 +71,7 @@ static const u16 sQuizLadyQuestion4[] = EC_WORD_MACHINE }; -static const u16 sQuizLadyQuestion5[] = +static const u16 sQuizLadyQuestion5[QUIZ_QUESTION_LEN] = { EC_WORD_WHICH, EC_WORD_ITEM, @@ -85,7 +84,7 @@ static const u16 sQuizLadyQuestion5[] = EC_WORD_PHONE }; -static const u16 sQuizLadyQuestion6[] = +static const u16 sQuizLadyQuestion6[QUIZ_QUESTION_LEN] = { EC_WORD_WHICH, EC_WORD_WILL, @@ -98,7 +97,7 @@ static const u16 sQuizLadyQuestion6[] = EC_WORD_SWIFT_SWIM }; -static const u16 sQuizLadyQuestion7[] = +static const u16 sQuizLadyQuestion7[QUIZ_QUESTION_LEN] = { EC_WORD_WHICH, EC_WORD_OF, @@ -111,20 +110,20 @@ static const u16 sQuizLadyQuestion7[] = EC_WORD_ROCK }; -static const u16 sQuizLadyQuestion8[] = +static const u16 sQuizLadyQuestion8[QUIZ_QUESTION_LEN] = { EC_WORD_WHICH, EC_WORD_WILL, EC_MOVE2(BLOCK), EC_WORD_ESCAPE, EC_WORD_QUES, - EC_EMPTY_WORD, + EC_EMPTY_WORD, EC_WORD_RUN_AWAY, EC_WORD_SHADOW_TAG, EC_WORD_WONDER_GUARD }; -static const u16 sQuizLadyQuestion9[] = +static const u16 sQuizLadyQuestion9[QUIZ_QUESTION_LEN] = { EC_WORD_WHICH, EC_WORD_WILL, @@ -137,7 +136,7 @@ static const u16 sQuizLadyQuestion9[] = EC_WORD_SHED_SKIN }; -static const u16 sQuizLadyQuestion10[] = +static const u16 sQuizLadyQuestion10[QUIZ_QUESTION_LEN] = { EC_WORD_WHICH, EC_WORD_GOES, @@ -150,7 +149,7 @@ static const u16 sQuizLadyQuestion10[] = EC_WORD_POKENAV }; -static const u16 sQuizLadyQuestion11[] = +static const u16 sQuizLadyQuestion11[QUIZ_QUESTION_LEN] = { EC_WORD_WHICH, EC_WORD_STORES, @@ -163,7 +162,7 @@ static const u16 sQuizLadyQuestion11[] = EC_WORD_TELEVISION }; -static const u16 sQuizLadyQuestion12[] = +static const u16 sQuizLadyQuestion12[QUIZ_QUESTION_LEN] = { EC_WORD_WHICH, EC_WORD_MACHINE, @@ -176,7 +175,7 @@ static const u16 sQuizLadyQuestion12[] = EC_WORD_TELEVISION }; -static const u16 sQuizLadyQuestion13[] = +static const u16 sQuizLadyQuestion13[QUIZ_QUESTION_LEN] = { EC_WORD_A, EC_WORD_POKEMON, @@ -189,7 +188,7 @@ static const u16 sQuizLadyQuestion13[] = EC_WORD_LETTER }; -static const u16 sQuizLadyQuestion14[] = +static const u16 sQuizLadyQuestion14[QUIZ_QUESTION_LEN] = { EC_WORD_STEEL, EC_WORD_IS, @@ -202,7 +201,7 @@ static const u16 sQuizLadyQuestion14[] = EC_EMPTY_WORD }; -static const u16 sQuizLadyQuestion15[] = +static const u16 sQuizLadyQuestion15[QUIZ_QUESTION_LEN] = { EC_WORD_DARK, EC_WORD_IS, @@ -215,7 +214,7 @@ static const u16 sQuizLadyQuestion15[] = EC_EMPTY_WORD }; -static const u16 sQuizLadyQuestion16[] = +static const u16 sQuizLadyQuestion16[QUIZ_QUESTION_LEN] = { EC_WORD_GHOST, EC_WORD_IS, @@ -361,7 +360,7 @@ static const u16 sFavorLadyAcceptedItems_Shiny[] = ITEM_HEAL_POWDER, ITEM_X_SPEED, ITEM_X_ATTACK, - ITEM_X_DEFEND, + ITEM_X_DEFENSE, ITEM_BLUE_FLUTE, ITEM_YELLOW_FLUTE, ITEM_RED_FLUTE, @@ -434,36 +433,36 @@ static const u16 sFavorLadyPrizes[] = static const u8 *const sContestLadyMonNames[] = { - gText_ContestLady_Handsome, - gText_ContestLady_Vinny, - gText_ContestLady_Moreme, - gText_ContestLady_Ironhard, - gText_ContestLady_Muscle + [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[] = { - gText_ContestLady_Coolness, - gText_ContestLady_Beauty, - gText_ContestLady_Cuteness, - gText_ContestLady_Smartness, - gText_ContestLady_Toughness + [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[] = { - gText_CoolnessContest, - gText_BeautyContest, - gText_CutenessContest, - gText_SmartnessContest, - gText_ToughnessContest + [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[] = { - SPECIES_ZIGZAGOON, - SPECIES_SKITTY, - SPECIES_POOCHYENA, - SPECIES_KECLEON, - SPECIES_PIKACHU + [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/object_events/berry_tree_graphics_tables.h b/src/data/object_events/berry_tree_graphics_tables.h index fe41bda3b1..2969b6a78e 100755 --- a/src/data/object_events/berry_tree_graphics_tables.h +++ b/src/data/object_events/berry_tree_graphics_tables.h @@ -1,59 +1,3 @@ -static const struct SpriteFrameImage sPicTable_PechaBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Pecha[] = {3, 4, 4, 4, 4}; - -static const struct SpriteFrameImage sPicTable_KelpsyBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Kelpsy[] = {3, 4, 2, 2, 2}; - -static const struct SpriteFrameImage sPicTable_WepearBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Wepear[] = {3, 4, 2, 2, 2}; - -static const struct SpriteFrameImage sPicTable_IapapaBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Iapapa[] = {3, 4, 3, 3, 3}; - static const struct SpriteFrameImage sPicTable_CheriBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), @@ -68,187 +12,33 @@ static const struct SpriteFrameImage sPicTable_CheriBerryTree[] = { const u8 gBerryTreePaletteSlotTable_Cheri[] = {3, 4, 4, 4, 4}; -static const struct SpriteFrameImage sPicTable_FigyBerryTree[] = { +static const struct SpriteFrameImage sPicTable_ChestoBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 5), + overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 5), }; -const u8 gBerryTreePaletteSlotTable_Figy[] = {3, 4, 3, 3, 3}; +const u8 gBerryTreePaletteSlotTable_Chesto[] = {3, 4, 2, 2, 2}; -static const struct SpriteFrameImage sPicTable_MagoBerryTree[] = { +static const struct SpriteFrameImage sPicTable_PechaBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 5), + overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 5), }; -const u8 gBerryTreePaletteSlotTable_Mago[] = {3, 4, 3, 3, 3}; - -static const struct SpriteFrameImage sPicTable_LumBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Lum[] = {3, 4, 4, 4, 4}; - -static const struct SpriteFrameImage sPicTable_RazzBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Razz[] = {3, 4, 4, 4, 4}; - -static const struct SpriteFrameImage sPicTable_GrepaBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Grepa[] = {3, 4, 3, 3, 3}; - -static const struct SpriteFrameImage sPicTable_RabutaBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Rabuta[] = {3, 4, 4, 4, 4}; - -static const struct SpriteFrameImage sPicTable_NomelBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Nomel[] = {3, 4, 3, 3, 3}; - -static const struct SpriteFrameImage sPicTable_LeppaBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Leppa[] = {3, 4, 3, 3, 3}; - -static const struct SpriteFrameImage sPicTable_LiechiBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Liechi[] = {3, 4, 4, 4, 4}; - -static const struct SpriteFrameImage sPicTable_HondewBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Hondew[] = {3, 4, 5, 5, 5}; - -static const struct SpriteFrameImage sPicTable_AguavBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Aguav[] = {3, 4, 4, 4, 4}; - -static const struct SpriteFrameImage sPicTable_WikiBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Wiki[] = {3, 4, 3, 3, 3}; - -static const struct SpriteFrameImage sPicTable_PomegBerryTree[] = { - overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), - overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 5), -}; - -const u8 gBerryTreePaletteSlotTable_Pomeg[] = {3, 4, 3, 3, 3}; +const u8 gBerryTreePaletteSlotTable_Pecha[] = {3, 4, 4, 4, 4}; static const struct SpriteFrameImage sPicTable_RawstBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), @@ -264,33 +54,33 @@ static const struct SpriteFrameImage sPicTable_RawstBerryTree[] = { const u8 gBerryTreePaletteSlotTable_Rawst[] = {3, 4, 4, 4, 4}; -static const struct SpriteFrameImage sPicTable_SpelonBerryTree[] = { +static const struct SpriteFrameImage sPicTable_AspearBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 5), + overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 5), }; -const u8 gBerryTreePaletteSlotTable_Spelon[] = {3, 4, 3, 3, 3}; +const u8 gBerryTreePaletteSlotTable_Aspear[] = {3, 4, 3, 3, 3}; -static const struct SpriteFrameImage sPicTable_ChestoBerryTree[] = { +static const struct SpriteFrameImage sPicTable_LeppaBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 5), + overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 5), }; -const u8 gBerryTreePaletteSlotTable_Chesto[] = {3, 4, 2, 2, 2}; +const u8 gBerryTreePaletteSlotTable_Leppa[] = {3, 4, 3, 3, 3}; static const struct SpriteFrameImage sPicTable_OranBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), @@ -320,6 +110,20 @@ static const struct SpriteFrameImage sPicTable_PersimBerryTree[] = { const u8 gBerryTreePaletteSlotTable_Persim[] = {3, 4, 2, 2, 2}; +static const struct SpriteFrameImage sPicTable_LumBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Lum[] = {3, 4, 4, 4, 4}; + static const struct SpriteFrameImage sPicTable_SitrusBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), @@ -334,75 +138,159 @@ static const struct SpriteFrameImage sPicTable_SitrusBerryTree[] = { const u8 gBerryTreePaletteSlotTable_Sitrus[] = {3, 4, 4, 4, 4}; -static const struct SpriteFrameImage sPicTable_AspearBerryTree[] = { +static const struct SpriteFrameImage sPicTable_FigyBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 5), + overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 5), }; -const u8 gBerryTreePaletteSlotTable_Aspear[] = {3, 4, 3, 3, 3}; +const u8 gBerryTreePaletteSlotTable_Figy[] = {3, 4, 3, 3, 3}; -static const struct SpriteFrameImage sPicTable_PamtreBerryTree[] = { +static const struct SpriteFrameImage sPicTable_WikiBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 5), + overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 5), }; -const u8 gBerryTreePaletteSlotTable_Pamtre[] = {3, 4, 2, 2, 2}; +const u8 gBerryTreePaletteSlotTable_Wiki[] = {3, 4, 3, 3, 3}; -static const struct SpriteFrameImage sPicTable_CornnBerryTree[] = { +static const struct SpriteFrameImage sPicTable_MagoBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 5), + overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 5), }; -const u8 gBerryTreePaletteSlotTable_Cornn[] = {3, 4, 2, 2, 2}; +const u8 gBerryTreePaletteSlotTable_Mago[] = {3, 4, 3, 3, 3}; -static const struct SpriteFrameImage sPicTable_LansatBerryTree[] = { +static const struct SpriteFrameImage sPicTable_AguavBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 5), + overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 5), }; -const u8 gBerryTreePaletteSlotTable_Lansat[] = {3, 4, 2, 2, 2}; +const u8 gBerryTreePaletteSlotTable_Aguav[] = {3, 4, 4, 4, 4}; -static const struct SpriteFrameImage sPicTable_DurinBerryTree[] = { +static const struct SpriteFrameImage sPicTable_IapapaBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), - overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 0), - overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 1), - overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 2), - overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 3), - overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 4), - overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 5), + overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 5), }; -const u8 gBerryTreePaletteSlotTable_Durin[] = {3, 4, 4, 4, 4}; +const u8 gBerryTreePaletteSlotTable_Iapapa[] = {3, 4, 3, 3, 3}; + +static const struct SpriteFrameImage sPicTable_RazzBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Razz[] = {3, 4, 4, 4, 4}; + +static const struct SpriteFrameImage sPicTable_WepearBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Wepear[] = {3, 4, 2, 2, 2}; + +static const struct SpriteFrameImage sPicTable_PomegBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Pomeg[] = {3, 4, 3, 3, 3}; + +static const struct SpriteFrameImage sPicTable_KelpsyBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Kelpsy[] = {3, 4, 2, 2, 2}; + +static const struct SpriteFrameImage sPicTable_HondewBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Hondew[] = {3, 4, 5, 5, 5}; + +static const struct SpriteFrameImage sPicTable_GrepaBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Grepa[] = {3, 4, 3, 3, 3}; static const struct SpriteFrameImage sPicTable_TamatoBerryTree[] = { overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), @@ -418,54 +306,401 @@ static const struct SpriteFrameImage sPicTable_TamatoBerryTree[] = { const u8 gBerryTreePaletteSlotTable_Tamato[] = {3, 4, 2, 2, 2}; +static const struct SpriteFrameImage sPicTable_CornnBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Cornn[] = {3, 4, 2, 2, 2}; + +static const struct SpriteFrameImage sPicTable_RabutaBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Rabuta[] = {3, 4, 4, 4, 4}; + +static const struct SpriteFrameImage sPicTable_NomelBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Nomel[] = {3, 4, 3, 3, 3}; + +static const struct SpriteFrameImage sPicTable_SpelonBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Spelon[] = {3, 4, 3, 3, 3}; + +static const struct SpriteFrameImage sPicTable_PamtreBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Pamtre[] = {3, 4, 2, 2, 2}; + +static const struct SpriteFrameImage sPicTable_DurinBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Durin[] = {3, 4, 4, 4, 4}; + +static const struct SpriteFrameImage sPicTable_OccaBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Occa[] = {3, 4, 4, 4, 4}; + +static const struct SpriteFrameImage sPicTable_YacheBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Yache[] = {3, 4, 4, 4, 4}; + +static const struct SpriteFrameImage sPicTable_ChopleBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Chople[] = {3, 4, 3, 3, 3}; + +static const struct SpriteFrameImage sPicTable_KebiaBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Kebia[] = {3, 4, 4, 4, 4}; + +static const struct SpriteFrameImage sPicTable_ShucaBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Shuca[] = {3, 4, 5, 5, 5}; + +static const struct SpriteFrameImage sPicTable_PayapaBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Payapa[] = {3, 4, 5, 5, 5}; + +static const struct SpriteFrameImage sPicTable_TangaBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Tanga[] = {3, 4, 4, 4, 4}; + +static const struct SpriteFrameImage sPicTable_KasibBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Kasib[] = {3, 4, 4, 4, 4}; + +static const struct SpriteFrameImage sPicTable_HabanBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Haban[] = {3, 4, 3, 3, 3}; + +static const struct SpriteFrameImage sPicTable_ColburBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Colbur[] = {3, 4, 5, 5, 5}; + +static const struct SpriteFrameImage sPicTable_RoseliBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 5) +}; + +const u8 gBerryTreePaletteSlotTable_Roseli[] = {3, 4, 4, 4, 4}; + +static const struct SpriteFrameImage sPicTable_LiechiBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Liechi[] = {3, 4, 4, 4, 4}; + +static const struct SpriteFrameImage sPicTable_LansatBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Lansat[] = {3, 4, 2, 2, 2}; + +const struct SpriteFrameImage sPicTable_MicleBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Micle[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage sPicTable_CustapBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Custap[] = {3, 4, 5, 5, 5}; + +const struct SpriteFrameImage sPicTable_JabocaBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Jaboca[] = {3, 4, 5, 5, 5}; + +const struct SpriteFrameImage sPicTable_RowapBerryTree[] = { + overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0), + overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1), + overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 0), + overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 1), + overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 2), + overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 3), + overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 4), + overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 5), +}; + +const u8 gBerryTreePaletteSlotTable_Rowap[] = {3, 4, 5, 5, 5}; + const u8 gDeadBerryTreeObjectEventGraphicsIdTable[] = {OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES}; const u8 gBerryTreeObjectEventGraphicsIdTable[] = {OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES}; const struct SpriteFrameImage *const gBerryTreePicTablePointers[] = { - [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = sPicTable_CheriBerryTree, - [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = sPicTable_ChestoBerryTree, - [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PechaBerryTree, - [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = sPicTable_RawstBerryTree, - [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = sPicTable_AspearBerryTree, - [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_LeppaBerryTree, - [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_OranBerryTree, - [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = sPicTable_PersimBerryTree, - [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = sPicTable_LumBerryTree, - [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = sPicTable_SitrusBerryTree, - [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = sPicTable_FigyBerryTree, - [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = sPicTable_WikiBerryTree, - [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = sPicTable_MagoBerryTree, - [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = sPicTable_AguavBerryTree, - [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_IapapaBerryTree, - [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree, - [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree, - [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = sPicTable_MagoBerryTree, - [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = sPicTable_WepearBerryTree, - [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_IapapaBerryTree, - [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree, - [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = sPicTable_KelpsyBerryTree, - [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = sPicTable_WepearBerryTree, - [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree, - [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree, - [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = sPicTable_TamatoBerryTree, - [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree, - [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree, - [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = sPicTable_RabutaBerryTree, - [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = sPicTable_NomelBerryTree, - [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = sPicTable_SpelonBerryTree, - [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = sPicTable_PamtreBerryTree, - [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = sPicTable_RabutaBerryTree, - [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree, - [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree, - [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LiechiBerryTree, - [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree, - [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = sPicTable_AguavBerryTree, - [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree, - [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree, - [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = sPicTable_LansatBerryTree, - [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree, - [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree, + [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = sPicTable_CheriBerryTree, + [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = sPicTable_ChestoBerryTree, + [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PechaBerryTree, + [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = sPicTable_RawstBerryTree, + [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = sPicTable_AspearBerryTree, + [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_LeppaBerryTree, + [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_OranBerryTree, + [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = sPicTable_PersimBerryTree, + [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = sPicTable_LumBerryTree, + [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = sPicTable_SitrusBerryTree, + [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = sPicTable_FigyBerryTree, + [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = sPicTable_WikiBerryTree, + [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = sPicTable_MagoBerryTree, + [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = sPicTable_AguavBerryTree, + [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_IapapaBerryTree, + [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree, + [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree, + [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = sPicTable_MagoBerryTree, + [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = sPicTable_WepearBerryTree, + [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_IapapaBerryTree, + [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree, + [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = sPicTable_KelpsyBerryTree, + [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = sPicTable_WepearBerryTree, + [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree, + [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree, + [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = sPicTable_TamatoBerryTree, + [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree, + [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree, + [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = sPicTable_RabutaBerryTree, + [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = sPicTable_NomelBerryTree, + [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = sPicTable_SpelonBerryTree, + [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = sPicTable_PamtreBerryTree, + [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = sPicTable_RabutaBerryTree, + [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree, + [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree, + [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree, + [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = sPicTable_OccaBerryTree, + [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree, + [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree, + [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = sPicTable_TamatoBerryTree, + [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = sPicTable_YacheBerryTree, + [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = sPicTable_ChopleBerryTree, + [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = sPicTable_KebiaBerryTree, + [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = sPicTable_ShucaBerryTree, + [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = sPicTable_RawstBerryTree, + [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PayapaBerryTree, + [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = sPicTable_TangaBerryTree, + [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LansatBerryTree, + [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = sPicTable_KasibBerryTree, + [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_HabanBerryTree, + [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = sPicTable_ColburBerryTree, + [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LiechiBerryTree, + [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = sPicTable_RoseliBerryTree, + [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LiechiBerryTree, + [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree, + [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = sPicTable_AguavBerryTree, + [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree, + [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree, + [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = sPicTable_LansatBerryTree, + [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree, + [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree, + [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = sPicTable_MicleBerryTree, + [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_CustapBerryTree, + [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = sPicTable_JabocaBerryTree, + [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_RowapBerryTree, + [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = sPicTable_PechaBerryTree, + [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = sPicTable_OccaBerryTree, + [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree, }; const u8 *const gBerryTreePaletteSlotTablePointers[] = { @@ -504,6 +739,24 @@ const u8 *const gBerryTreePaletteSlotTablePointers[] = { [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rabuta, [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Durin, [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Hondew, + [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Grepa, + [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Occa, + [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Cornn, + [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Razz, + [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Tamato, + [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Yache, + [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Chople, + [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Kebia, + [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Shuca, + [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rawst, + [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Payapa, + [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Tanga, + [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Lansat, + [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Kasib, + [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Haban, + [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Colbur, + [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Liechi, + [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Roseli, [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Liechi, [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Hondew, [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Aguav, @@ -512,6 +765,13 @@ const u8 *const gBerryTreePaletteSlotTablePointers[] = { [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Lansat, [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Cornn, [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Durin, + [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Micle, + [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Custap, + [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Jaboca, + [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rowap, + [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Pecha, + [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Occa, + [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Durin, }; const u8 *const gBerryTreeObjectEventGraphicsIdTablePointers[] = { @@ -550,6 +810,24 @@ const u8 *const gBerryTreeObjectEventGraphicsIdTablePointers[] = { [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, @@ -558,8 +836,11 @@ const u8 *const gBerryTreeObjectEventGraphicsIdTablePointers[] = { [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, - // 3 unused berries. - [ITEM_UNUSED_BERRY_1 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, - [ITEM_UNUSED_BERRY_2 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, - [ITEM_UNUSED_BERRY_3 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, + [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable, }; diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h index 4df07be0dd..2e1b6b3b31 100755 --- a/src/data/object_events/movement_action_func_tables.h +++ b/src/data/object_events/movement_action_func_tables.h @@ -73,10 +73,10 @@ u8 MovementAction_WalkInPlaceFastDown_Step0(struct ObjectEvent *, struct Sprite u8 MovementAction_WalkInPlaceFastUp_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_WalkInPlaceFastLeft_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_WalkInPlaceFastRight_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkInPlaceFastestDown_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkInPlaceFastestUp_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkInPlaceFastestLeft_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkInPlaceFastestRight_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkInPlaceFasterDown_Step0(struct ObjectEvent *, struct Sprite *); +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_RideWaterCurrentDown_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_RideWaterCurrentDown_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementAction_RideWaterCurrentUp_Step0(struct ObjectEvent *, struct Sprite *); @@ -85,14 +85,14 @@ u8 MovementAction_RideWaterCurrentLeft_Step0(struct ObjectEvent *, struct Sprite u8 MovementAction_RideWaterCurrentLeft_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementAction_RideWaterCurrentRight_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_RideWaterCurrentRight_Step1(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkFastestDown_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkFastestDown_Step1(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkFastestUp_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkFastestUp_Step1(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkFastestLeft_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkFastestLeft_Step1(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkFastestRight_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkFastestRight_Step1(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFasterDown_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFasterDown_Step1(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFasterUp_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFasterUp_Step1(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFasterLeft_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFasterLeft_Step1(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFasterRight_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFasterRight_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementAction_SlideDown_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_SlideDown_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementAction_SlideUp_Step0(struct ObjectEvent *, struct Sprite *); @@ -253,9 +253,9 @@ u8 MovementAction_AcroEndWheelieMoveRight_Step1(struct ObjectEvent *, struct Spr u8 MovementAction_Levitate_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_StopLevitate_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_StopLevitateAtTop_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_LockAnim_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_Finish(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_UnlockAnim_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FlyUp_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FlyUp_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementAction_Fly_Finish(struct ObjectEvent *, struct Sprite *); @@ -299,18 +299,18 @@ u8 (*const gMovementActionFuncs_WalkInPlaceFastDown[])(struct ObjectEvent *, str u8 (*const gMovementActionFuncs_WalkInPlaceFastUp[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_WalkInPlaceFastLeft[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_WalkInPlaceFastRight[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkInPlaceFastestDown[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkInPlaceFastestUp[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkInPlaceFastestLeft[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkInPlaceFastestRight[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkInPlaceFasterDown[])(struct ObjectEvent *, struct Sprite *); +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_RideWaterCurrentDown[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RideWaterCurrentUp[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RideWaterCurrentLeft[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RideWaterCurrentRight[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkFastestDown[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkFastestUp[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkFastestLeft[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkFastestRight[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkFasterDown[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkFasterUp[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkFasterLeft[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkFasterRight[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_SlideDown[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_SlideUp[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_SlideLeft[])(struct ObjectEvent *, struct Sprite *); @@ -410,8 +410,8 @@ u8 (*const gMovementActionFuncs_WalkSlowDiagonalUpLeft[])(struct ObjectEvent *, u8 (*const gMovementActionFuncs_WalkSlowDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_WalkSlowDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_WalkSlowDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_StoreAndLockAnim[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_FreeAndUnlockAnim[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_LockAnim[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_UnlockAnim[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_WalkLeftAffine[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_WalkRightAffine[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_Levitate[])(struct ObjectEvent *, struct Sprite *); @@ -459,18 +459,18 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) [MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP] = gMovementActionFuncs_WalkInPlaceFastUp, [MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT] = gMovementActionFuncs_WalkInPlaceFastLeft, [MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT] = gMovementActionFuncs_WalkInPlaceFastRight, - [MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN] = gMovementActionFuncs_WalkInPlaceFastestDown, - [MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP] = gMovementActionFuncs_WalkInPlaceFastestUp, - [MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT] = gMovementActionFuncs_WalkInPlaceFastestLeft, - [MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT] = gMovementActionFuncs_WalkInPlaceFastestRight, + [MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_DOWN] = gMovementActionFuncs_WalkInPlaceFasterDown, + [MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_UP] = gMovementActionFuncs_WalkInPlaceFasterUp, + [MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_LEFT] = gMovementActionFuncs_WalkInPlaceFasterLeft, + [MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_RIGHT] = gMovementActionFuncs_WalkInPlaceFasterRight, [MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN] = gMovementActionFuncs_RideWaterCurrentDown, [MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP] = gMovementActionFuncs_RideWaterCurrentUp, [MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT] = gMovementActionFuncs_RideWaterCurrentLeft, [MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT] = gMovementActionFuncs_RideWaterCurrentRight, - [MOVEMENT_ACTION_WALK_FASTEST_DOWN] = gMovementActionFuncs_WalkFastestDown, - [MOVEMENT_ACTION_WALK_FASTEST_UP] = gMovementActionFuncs_WalkFastestUp, - [MOVEMENT_ACTION_WALK_FASTEST_LEFT] = gMovementActionFuncs_WalkFastestLeft, - [MOVEMENT_ACTION_WALK_FASTEST_RIGHT] = gMovementActionFuncs_WalkFastestRight, + [MOVEMENT_ACTION_WALK_FASTER_DOWN] = gMovementActionFuncs_WalkFasterDown, + [MOVEMENT_ACTION_WALK_FASTER_UP] = gMovementActionFuncs_WalkFasterUp, + [MOVEMENT_ACTION_WALK_FASTER_LEFT] = gMovementActionFuncs_WalkFasterLeft, + [MOVEMENT_ACTION_WALK_FASTER_RIGHT] = gMovementActionFuncs_WalkFasterRight, [MOVEMENT_ACTION_SLIDE_DOWN] = gMovementActionFuncs_SlideDown, [MOVEMENT_ACTION_SLIDE_UP] = gMovementActionFuncs_SlideUp, [MOVEMENT_ACTION_SLIDE_LEFT] = gMovementActionFuncs_SlideLeft, @@ -570,8 +570,8 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) [MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT] = gMovementActionFuncs_WalkSlowDiagonalUpRight, [MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT] = gMovementActionFuncs_WalkSlowDiagonalDownLeft, [MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT] = gMovementActionFuncs_WalkSlowDiagonalDownRight, - [MOVEMENT_ACTION_STORE_AND_LOCK_ANIM] = gMovementActionFuncs_StoreAndLockAnim, - [MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM] = gMovementActionFuncs_FreeAndUnlockAnim, + [MOVEMENT_ACTION_LOCK_ANIM] = gMovementActionFuncs_LockAnim, + [MOVEMENT_ACTION_UNLOCK_ANIM] = gMovementActionFuncs_UnlockAnim, [MOVEMENT_ACTION_WALK_LEFT_AFFINE] = gMovementActionFuncs_WalkLeftAffine, [MOVEMENT_ACTION_WALK_RIGHT_AFFINE] = gMovementActionFuncs_WalkRightAffine, [MOVEMENT_ACTION_LEVITATE] = gMovementActionFuncs_Levitate, @@ -603,11 +603,11 @@ u8 (*const gMovementActionFuncs_FaceRight[])(struct ObjectEvent *, struct Sprite }; static u8 (*const sDirectionAnimFuncsBySpeed[])(u8) = { - GetMoveDirectionAnimNum, - GetMoveDirectionFastAnimNum, - GetMoveDirectionFastAnimNum, - GetMoveDirectionFasterAnimNum, - GetMoveDirectionFastestAnimNum, + [MOVE_SPEED_NORMAL] = GetMoveDirectionAnimNum, + [MOVE_SPEED_FAST_1] = GetMoveDirectionFastAnimNum, + [MOVE_SPEED_FAST_2] = GetMoveDirectionFastAnimNum, + [MOVE_SPEED_FASTER] = GetMoveDirectionFasterAnimNum, + [MOVE_SPEED_FASTEST] = GetMoveDirectionFastestAnimNum, }; u8 (*const gMovementActionFuncs_WalkSlowDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *) = { @@ -706,8 +706,16 @@ u8 (*const gMovementActionFuncs_WalkNormalRight[])(struct ObjectEvent *, struct MovementAction_PauseSpriteAnim, }; -static const s16 sJumpInitDisplacements[] = {0, 1, 1}; -static const s16 sJumpDisplacements[] = {0, 0, 1}; +static const s16 sJumpInitDisplacements[] = { + [JUMP_DISTANCE_IN_PLACE] = 0, + [JUMP_DISTANCE_NORMAL] = 1, + [JUMP_DISTANCE_FAR] = 1, +}; +static const s16 sJumpDisplacements[] = { + [JUMP_DISTANCE_IN_PLACE] = 0, + [JUMP_DISTANCE_NORMAL] = 0, + [JUMP_DISTANCE_FAR] = 1, +}; u8 (*const gMovementActionFuncs_Jump2Down[])(struct ObjectEvent *, struct Sprite *) = { MovementAction_Jump2Down_Step0, @@ -859,26 +867,26 @@ u8 (*const gMovementActionFuncs_WalkInPlaceFastRight[])(struct ObjectEvent *, st MovementAction_PauseSpriteAnim, }; -u8 (*const gMovementActionFuncs_WalkInPlaceFastestDown[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkInPlaceFastestDown_Step0, +u8 (*const gMovementActionFuncs_WalkInPlaceFasterDown[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkInPlaceFasterDown_Step0, MovementAction_WalkInPlace_Step1, MovementAction_PauseSpriteAnim, }; -u8 (*const gMovementActionFuncs_WalkInPlaceFastestUp[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkInPlaceFastestUp_Step0, +u8 (*const gMovementActionFuncs_WalkInPlaceFasterUp[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkInPlaceFasterUp_Step0, MovementAction_WalkInPlace_Step1, MovementAction_PauseSpriteAnim, }; -u8 (*const gMovementActionFuncs_WalkInPlaceFastestLeft[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkInPlaceFastestLeft_Step0, +u8 (*const gMovementActionFuncs_WalkInPlaceFasterLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkInPlaceFasterLeft_Step0, MovementAction_WalkInPlace_Step1, MovementAction_PauseSpriteAnim, }; -u8 (*const gMovementActionFuncs_WalkInPlaceFastestRight[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkInPlaceFastestRight_Step0, +u8 (*const gMovementActionFuncs_WalkInPlaceFasterRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkInPlaceFasterRight_Step0, MovementAction_WalkInPlace_Step1, MovementAction_PauseSpriteAnim, }; @@ -907,27 +915,27 @@ u8 (*const gMovementActionFuncs_RideWaterCurrentRight[])(struct ObjectEvent *, s MovementAction_PauseSpriteAnim, }; -u8 (*const gMovementActionFuncs_WalkFastestDown[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkFastestDown_Step0, - MovementAction_WalkFastestDown_Step1, +u8 (*const gMovementActionFuncs_WalkFasterDown[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkFasterDown_Step0, + MovementAction_WalkFasterDown_Step1, MovementAction_PauseSpriteAnim, }; -u8 (*const gMovementActionFuncs_WalkFastestUp[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkFastestUp_Step0, - MovementAction_WalkFastestUp_Step1, +u8 (*const gMovementActionFuncs_WalkFasterUp[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkFasterUp_Step0, + MovementAction_WalkFasterUp_Step1, MovementAction_PauseSpriteAnim, }; -u8 (*const gMovementActionFuncs_WalkFastestLeft[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkFastestLeft_Step0, - MovementAction_WalkFastestLeft_Step1, +u8 (*const gMovementActionFuncs_WalkFasterLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkFasterLeft_Step0, + MovementAction_WalkFasterLeft_Step1, MovementAction_PauseSpriteAnim, }; -u8 (*const gMovementActionFuncs_WalkFastestRight[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkFastestRight_Step0, - MovementAction_WalkFastestRight_Step1, +u8 (*const gMovementActionFuncs_WalkFasterRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkFasterRight_Step0, + MovementAction_WalkFasterRight_Step1, MovementAction_PauseSpriteAnim, }; diff --git a/src/data/object_events/movement_type_func_tables.h b/src/data/object_events/movement_type_func_tables.h index f4890d6846..f5189d838f 100755 --- a/src/data/object_events/movement_type_func_tables.h +++ b/src/data/object_events/movement_type_func_tables.h @@ -388,17 +388,17 @@ u8 (*const gMovementTypeFuncs_CopyPlayer[])(struct ObjectEvent *, struct Sprite }; bool8 (*const gCopyPlayerMovementFuncs[])(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)) = { - CopyablePlayerMovement_None, - CopyablePlayerMovement_FaceDirection, - CopyablePlayerMovement_GoSpeed0, - CopyablePlayerMovement_GoSpeed1, - CopyablePlayerMovement_GoSpeed2, - CopyablePlayerMovement_Slide, - cph_IM_DIFFERENT, - CopyablePlayerMovement_GoSpeed4, - CopyablePlayerMovement_Jump, - CopyablePlayerMovement_None, - CopyablePlayerMovement_None, + [COPY_MOVE_NONE] = CopyablePlayerMovement_None, + [COPY_MOVE_FACE] = CopyablePlayerMovement_FaceDirection, + [COPY_MOVE_WALK] = CopyablePlayerMovement_WalkNormal, + [COPY_MOVE_WALK_FAST] = CopyablePlayerMovement_WalkFast, + [COPY_MOVE_WALK_FASTER] = CopyablePlayerMovement_WalkFaster, + [COPY_MOVE_SLIDE] = CopyablePlayerMovement_Slide, + [COPY_MOVE_JUMP_IN_PLACE] = CopyablePlayerMovement_JumpInPlace, + [COPY_MOVE_JUMP] = CopyablePlayerMovement_Jump, + [COPY_MOVE_JUMP2] = CopyablePlayerMovement_Jump2, + [COPY_MOVE_EMPTY_1] = CopyablePlayerMovement_None, + [COPY_MOVE_EMPTY_2] = CopyablePlayerMovement_None, }; u8 (*const gMovementTypeFuncs_CopyPlayerInGrass[])(struct ObjectEvent *, struct Sprite *) = { diff --git a/src/data/object_events/object_event_anims.h b/src/data/object_events/object_event_anims.h index 93f4022583..f96e52de53 100755 --- a/src/data/object_events/object_event_anims.h +++ b/src/data/object_events/object_event_anims.h @@ -413,56 +413,56 @@ static const union AnimCmd sAnim_GetOnOffSurfBlobEast[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd sAnim_BunnyHoppyBackWheelSouth[] = +static const union AnimCmd sAnim_BunnyHopBackWheelSouth[] = { ANIMCMD_FRAME(9, 4), ANIMCMD_FRAME(10, 4), ANIMCMD_END, }; -static const union AnimCmd sAnim_BunnyHoppyBackWheelNorth[] = +static const union AnimCmd sAnim_BunnyHopBackWheelNorth[] = { ANIMCMD_FRAME(13, 4), ANIMCMD_FRAME(14, 4), ANIMCMD_END, }; -static const union AnimCmd sAnim_BunnyHoppyBackWheelWest[] = +static const union AnimCmd sAnim_BunnyHopBackWheelWest[] = { ANIMCMD_FRAME(17, 4), ANIMCMD_FRAME(18, 4), ANIMCMD_END, }; -static const union AnimCmd sAnim_BunnyHoppyBackWheelEast[] = +static const union AnimCmd sAnim_BunnyHopBackWheelEast[] = { ANIMCMD_FRAME(17, 4, .hFlip = TRUE), ANIMCMD_FRAME(18, 4, .hFlip = TRUE), ANIMCMD_END, }; -static const union AnimCmd sAnim_BunnyHoppyFrontWheelSouth[] = +static const union AnimCmd sAnim_BunnyHopFrontWheelSouth[] = { ANIMCMD_FRAME(11, 4), ANIMCMD_FRAME(12, 4), ANIMCMD_END, }; -static const union AnimCmd sAnim_BunnyHoppyFrontWheelNorth[] = +static const union AnimCmd sAnim_BunnyHopFrontWheelNorth[] = { ANIMCMD_FRAME(15, 4), ANIMCMD_FRAME(16, 4), ANIMCMD_END, }; -static const union AnimCmd sAnim_BunnyHoppyFrontWheelWest[] = +static const union AnimCmd sAnim_BunnyHopFrontWheelWest[] = { ANIMCMD_FRAME(19, 4), ANIMCMD_FRAME(20, 4), ANIMCMD_END, }; -static const union AnimCmd sAnim_BunnyHoppyFrontWheelEast[] = +static const union AnimCmd sAnim_BunnyHopFrontWheelEast[] = { ANIMCMD_FRAME(19, 4, .hFlip = TRUE), ANIMCMD_FRAME(20, 4, .hFlip = TRUE), @@ -796,99 +796,100 @@ static const union AnimCmd sAnim_HoOhStayStill[] = }; static const union AnimCmd *const sAnimTable_Inanimate[] = { - sAnim_StayStill, + [ANIM_STAY_STILL] = sAnim_StayStill, }; static const union AnimCmd *const sAnimTable_QuintyPlump[] = { - sAnim_QuintyPlumpFaceSouth, - sAnim_QuintyPlumpFaceNorth, - sAnim_QuintyPlumpFaceWest, - sAnim_QuintyPlumpFaceEast, - sAnim_QuintyPlumpGoSouth, - sAnim_QuintyPlumpGoNorth, - sAnim_QuintyPlumpGoWest, - sAnim_QuintyPlumpGoEast, - sAnim_QuintyPlumpGoFastSouth, - sAnim_QuintyPlumpGoFastNorth, - sAnim_QuintyPlumpGoFastWest, - sAnim_QuintyPlumpGoFastEast, - sAnim_QuintyPlumpGoFasterSouth, - sAnim_QuintyPlumpGoFasterNorth, - sAnim_QuintyPlumpGoFasterWest, - sAnim_QuintyPlumpGoFasterEast, - sAnim_QuintyPlumpGoFastestSouth, - sAnim_QuintyPlumpGoFastestNorth, - sAnim_QuintyPlumpGoFastestWest, - sAnim_QuintyPlumpGoFastestEast, + [ANIM_STD_FACE_SOUTH] = sAnim_QuintyPlumpFaceSouth, + [ANIM_STD_FACE_NORTH] = sAnim_QuintyPlumpFaceNorth, + [ANIM_STD_FACE_WEST] = sAnim_QuintyPlumpFaceWest, + [ANIM_STD_FACE_EAST] = sAnim_QuintyPlumpFaceEast, + [ANIM_STD_GO_SOUTH] = sAnim_QuintyPlumpGoSouth, + [ANIM_STD_GO_NORTH] = sAnim_QuintyPlumpGoNorth, + [ANIM_STD_GO_WEST] = sAnim_QuintyPlumpGoWest, + [ANIM_STD_GO_EAST] = sAnim_QuintyPlumpGoEast, + [ANIM_STD_GO_FAST_SOUTH] = sAnim_QuintyPlumpGoFastSouth, + [ANIM_STD_GO_FAST_NORTH] = sAnim_QuintyPlumpGoFastNorth, + [ANIM_STD_GO_FAST_WEST] = sAnim_QuintyPlumpGoFastWest, + [ANIM_STD_GO_FAST_EAST] = sAnim_QuintyPlumpGoFastEast, + [ANIM_STD_GO_FASTER_SOUTH] = sAnim_QuintyPlumpGoFasterSouth, + [ANIM_STD_GO_FASTER_NORTH] = sAnim_QuintyPlumpGoFasterNorth, + [ANIM_STD_GO_FASTER_WEST] = sAnim_QuintyPlumpGoFasterWest, + [ANIM_STD_GO_FASTER_EAST] = sAnim_QuintyPlumpGoFasterEast, + [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_QuintyPlumpGoFastestSouth, + [ANIM_STD_GO_FASTEST_NORTH] = sAnim_QuintyPlumpGoFastestNorth, + [ANIM_STD_GO_FASTEST_WEST] = sAnim_QuintyPlumpGoFastestWest, + [ANIM_STD_GO_FASTEST_EAST] = sAnim_QuintyPlumpGoFastestEast, }; static const union AnimCmd *const sAnimTable_Standard[] = { - sAnim_FaceSouth, - sAnim_FaceNorth, - sAnim_FaceWest, - sAnim_FaceEast, - sAnim_GoSouth, - sAnim_GoNorth, - sAnim_GoWest, - sAnim_GoEast, - sAnim_GoFastSouth, - sAnim_GoFastNorth, - sAnim_GoFastWest, - sAnim_GoFastEast, - sAnim_GoFasterSouth, - sAnim_GoFasterNorth, - sAnim_GoFasterWest, - sAnim_GoFasterEast, - sAnim_GoFastestSouth, - sAnim_GoFastestNorth, - sAnim_GoFastestWest, - sAnim_GoFastestEast, + [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth, + [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth, + [ANIM_STD_FACE_WEST] = sAnim_FaceWest, + [ANIM_STD_FACE_EAST] = sAnim_FaceEast, + [ANIM_STD_GO_SOUTH] = sAnim_GoSouth, + [ANIM_STD_GO_NORTH] = sAnim_GoNorth, + [ANIM_STD_GO_WEST] = sAnim_GoWest, + [ANIM_STD_GO_EAST] = sAnim_GoEast, + [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth, + [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth, + [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest, + [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast, + [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth, + [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth, + [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest, + [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast, + [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth, + [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth, + [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest, + [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast, }; static const union AnimCmd *const sAnimTable_HoOh[] = { - sAnim_FaceSouth, - sAnim_FaceNorth, - sAnim_FaceWest, - sAnim_FaceEast, - sAnim_HoOhFlapWings, - sAnim_HoOhStayStill, - sAnim_GoWest, - sAnim_GoEast, - sAnim_GoFastSouth, - sAnim_GoFastNorth, - sAnim_GoFastWest, - sAnim_GoFastEast, - sAnim_GoFasterSouth, - sAnim_GoFasterNorth, - sAnim_GoFasterWest, - sAnim_GoFasterEast, - sAnim_GoFastestSouth, - sAnim_GoFastestNorth, - sAnim_GoFastestWest, - sAnim_GoFastestEast, + [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth, + [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth, + [ANIM_STD_FACE_WEST] = sAnim_FaceWest, + [ANIM_STD_FACE_EAST] = sAnim_FaceEast, + [ANIM_STD_GO_SOUTH] = sAnim_HoOhFlapWings, + [ANIM_STD_GO_NORTH] = sAnim_HoOhStayStill, + [ANIM_STD_GO_WEST] = sAnim_GoWest, + [ANIM_STD_GO_EAST] = sAnim_GoEast, + [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth, + [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth, + [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest, + [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast, + [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth, + [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth, + [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest, + [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast, + [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth, + [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth, + [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest, + [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast, }; +// The movements for going up use the animations for going right instead. static const union AnimCmd *const sAnimTable_GroudonSide[] = { - sAnim_FaceSouth, - sAnim_FaceNorth, - sAnim_FaceWest, - sAnim_FaceEast, - sAnim_GoSouth, - sAnim_GoEast, - sAnim_GoWest, - sAnim_GoEast, - sAnim_GoFastSouth, - sAnim_GoFastEast, - sAnim_GoFastWest, - sAnim_GoFastEast, - sAnim_GoFasterSouth, - sAnim_GoFasterEast, - sAnim_GoFasterWest, - sAnim_GoFasterEast, - sAnim_GoFastestSouth, - sAnim_GoFastestEast, - sAnim_GoFastestWest, - sAnim_GoFastestEast, + [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth, + [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth, + [ANIM_STD_FACE_WEST] = sAnim_FaceWest, + [ANIM_STD_FACE_EAST] = sAnim_FaceEast, + [ANIM_STD_GO_SOUTH] = sAnim_GoSouth, + [ANIM_STD_GO_NORTH] = sAnim_GoEast, + [ANIM_STD_GO_WEST] = sAnim_GoWest, + [ANIM_STD_GO_EAST] = sAnim_GoEast, + [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth, + [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastEast, + [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest, + [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast, + [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth, + [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterEast, + [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest, + [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast, + [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth, + [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestEast, + [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest, + [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast, }; static const union AnimCmd sAnim_RayquazaCoiledAwake[] = @@ -950,188 +951,187 @@ static const union AnimCmd sAnim_RayquazaFaceEast[] = }; // Though they correspond to facing/walking movements, Rayquaza doesn't have -// equivalent images aside from flying up. Its other frames aside from the 'normal' +// equivalent images aside from flying up. Its other frames aside from the 'normal' // frame are for the sequence where it awakens on Sky Pillar. -// The corresponding facing/walking movements are commented alongside static const union AnimCmd *const sAnimTable_Rayquaza[] = { - sAnim_RayquazaFaceSouth, // Face South - sAnim_RayquazaFaceNorth, // Face North - sAnim_RayquazaFaceWest, // Face West - sAnim_RayquazaFaceEast, // Face East - sAnim_RayquazaCoiledAsleep, // Go South - sAnim_RayquazaFlyUp, // Go North - sAnim_RayquazaCoiledMouthOpen, // Go West - sAnim_RayquazaNormal, // Go East - sAnim_RayquazaCoiledAsleep, // Go fast South - sAnim_RayquazaFlyUp, // Go fast North - sAnim_RayquazaCoiledAwake, // Go fast West - sAnim_RayquazaNormal, // Go fast East - sAnim_RayquazaCoiledAsleep, // Go faster South - sAnim_RayquazaFlyUp, // Go faster North - sAnim_RayquazaCoiledMouthOpen, // Go faster West - sAnim_RayquazaNormal, // Go faster East - sAnim_RayquazaCoiledAsleep, // Go fastest South - sAnim_RayquazaFlyUp, // Go fastest North - sAnim_RayquazaCoiledMouthOpen, // Go fastest West - sAnim_RayquazaNormal, // Go fastest East + [ANIM_STD_FACE_SOUTH] = sAnim_RayquazaFaceSouth, + [ANIM_STD_FACE_NORTH] = sAnim_RayquazaFaceNorth, + [ANIM_STD_FACE_WEST] = sAnim_RayquazaFaceWest, + [ANIM_STD_FACE_EAST] = sAnim_RayquazaFaceEast, + [ANIM_STD_GO_SOUTH] = sAnim_RayquazaCoiledAsleep, + [ANIM_STD_GO_NORTH] = sAnim_RayquazaFlyUp, + [ANIM_STD_GO_WEST] = sAnim_RayquazaCoiledMouthOpen, + [ANIM_STD_GO_EAST] = sAnim_RayquazaNormal, + [ANIM_STD_GO_FAST_SOUTH] = sAnim_RayquazaCoiledAsleep, + [ANIM_STD_GO_FAST_NORTH] = sAnim_RayquazaFlyUp, + [ANIM_STD_GO_FAST_WEST] = sAnim_RayquazaCoiledAwake, + [ANIM_STD_GO_FAST_EAST] = sAnim_RayquazaNormal, + [ANIM_STD_GO_FASTER_SOUTH] = sAnim_RayquazaCoiledAsleep, + [ANIM_STD_GO_FASTER_NORTH] = sAnim_RayquazaFlyUp, + [ANIM_STD_GO_FASTER_WEST] = sAnim_RayquazaCoiledMouthOpen, + [ANIM_STD_GO_FASTER_EAST] = sAnim_RayquazaNormal, + [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_RayquazaCoiledAsleep, + [ANIM_STD_GO_FASTEST_NORTH] = sAnim_RayquazaFlyUp, + [ANIM_STD_GO_FASTEST_WEST] = sAnim_RayquazaCoiledMouthOpen, + [ANIM_STD_GO_FASTEST_EAST] = sAnim_RayquazaNormal, }; static const union AnimCmd *const sAnimTable_BrendanMayNormal[] = { - sAnim_FaceSouth, - sAnim_FaceNorth, - sAnim_FaceWest, - sAnim_FaceEast, - sAnim_GoSouth, - sAnim_GoNorth, - sAnim_GoWest, - sAnim_GoEast, - sAnim_GoFastSouth, - sAnim_GoFastNorth, - sAnim_GoFastWest, - sAnim_GoFastEast, - sAnim_GoFasterSouth, - sAnim_GoFasterNorth, - sAnim_GoFasterWest, - sAnim_GoFasterEast, - sAnim_GoFastestSouth, - sAnim_GoFastestNorth, - sAnim_GoFastestWest, - sAnim_GoFastestEast, - sAnim_RunSouth, - sAnim_RunNorth, - sAnim_RunWest, - sAnim_RunEast, + [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth, + [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth, + [ANIM_STD_FACE_WEST] = sAnim_FaceWest, + [ANIM_STD_FACE_EAST] = sAnim_FaceEast, + [ANIM_STD_GO_SOUTH] = sAnim_GoSouth, + [ANIM_STD_GO_NORTH] = sAnim_GoNorth, + [ANIM_STD_GO_WEST] = sAnim_GoWest, + [ANIM_STD_GO_EAST] = sAnim_GoEast, + [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth, + [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth, + [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest, + [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast, + [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth, + [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth, + [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest, + [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast, + [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth, + [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth, + [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest, + [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast, + [ANIM_RUN_SOUTH] = sAnim_RunSouth, + [ANIM_RUN_NORTH] = sAnim_RunNorth, + [ANIM_RUN_WEST] = sAnim_RunWest, + [ANIM_RUN_EAST] = sAnim_RunEast, }; static const union AnimCmd *const sAnimTable_AcroBike[] = { - sAnim_FaceSouth, - sAnim_FaceNorth, - sAnim_FaceWest, - sAnim_FaceEast, - sAnim_GoSouth, - sAnim_GoNorth, - sAnim_GoWest, - sAnim_GoEast, - sAnim_GoFastSouth, - sAnim_GoFastNorth, - sAnim_GoFastWest, - sAnim_GoFastEast, - sAnim_GoFasterSouth, - sAnim_GoFasterNorth, - sAnim_GoFasterWest, - sAnim_GoFasterEast, - sAnim_GoFastestSouth, - sAnim_GoFastestNorth, - sAnim_GoFastestWest, - sAnim_GoFastestEast, - sAnim_BunnyHoppyBackWheelSouth, - sAnim_BunnyHoppyBackWheelNorth, - sAnim_BunnyHoppyBackWheelWest, - sAnim_BunnyHoppyBackWheelEast, - sAnim_BunnyHoppyFrontWheelSouth, - sAnim_BunnyHoppyFrontWheelNorth, - sAnim_BunnyHoppyFrontWheelWest, - sAnim_BunnyHoppyFrontWheelEast, - sAnim_StandingWheelieBackWheelSouth, - sAnim_StandingWheelieBackWheelNorth, - sAnim_StandingWheelieBackWheelWest, - sAnim_StandingWheelieBackWheelEast, - sAnim_StandingWheelieFrontWheelSouth, - sAnim_StandingWheelieFrontWheelNorth, - sAnim_StandingWheelieFrontWheelWest, - sAnim_StandingWheelieFrontWheelEast, - sAnim_MovingWheelieSouth, - sAnim_MovingWheelieNorth, - sAnim_MovingWheelieWest, - sAnim_MovingWheelieEast, + [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth, + [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth, + [ANIM_STD_FACE_WEST] = sAnim_FaceWest, + [ANIM_STD_FACE_EAST] = sAnim_FaceEast, + [ANIM_STD_GO_SOUTH] = sAnim_GoSouth, + [ANIM_STD_GO_NORTH] = sAnim_GoNorth, + [ANIM_STD_GO_WEST] = sAnim_GoWest, + [ANIM_STD_GO_EAST] = sAnim_GoEast, + [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth, + [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth, + [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest, + [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast, + [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth, + [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth, + [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest, + [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast, + [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth, + [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth, + [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest, + [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast, + [ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH] = sAnim_BunnyHopBackWheelSouth, + [ANIM_BUNNY_HOP_BACK_WHEEL_NORTH] = sAnim_BunnyHopBackWheelNorth, + [ANIM_BUNNY_HOP_BACK_WHEEL_WEST] = sAnim_BunnyHopBackWheelWest, + [ANIM_BUNNY_HOP_BACK_WHEEL_EAST] = sAnim_BunnyHopBackWheelEast, + [ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH] = sAnim_BunnyHopFrontWheelSouth, + [ANIM_BUNNY_HOP_FRONT_WHEEL_NORTH] = sAnim_BunnyHopFrontWheelNorth, + [ANIM_BUNNY_HOP_FRONT_WHEEL_WEST] = sAnim_BunnyHopFrontWheelWest, + [ANIM_BUNNY_HOP_FRONT_WHEEL_EAST] = sAnim_BunnyHopFrontWheelEast, + [ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH] = sAnim_StandingWheelieBackWheelSouth, + [ANIM_STANDING_WHEELIE_BACK_WHEEL_NORTH] = sAnim_StandingWheelieBackWheelNorth, + [ANIM_STANDING_WHEELIE_BACK_WHEEL_WEST] = sAnim_StandingWheelieBackWheelWest, + [ANIM_STANDING_WHEELIE_BACK_WHEEL_EAST] = sAnim_StandingWheelieBackWheelEast, + [ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH] = sAnim_StandingWheelieFrontWheelSouth, + [ANIM_STANDING_WHEELIE_FRONT_WHEEL_NORTH] = sAnim_StandingWheelieFrontWheelNorth, + [ANIM_STANDING_WHEELIE_FRONT_WHEEL_WEST] = sAnim_StandingWheelieFrontWheelWest, + [ANIM_STANDING_WHEELIE_FRONT_WHEEL_EAST] = sAnim_StandingWheelieFrontWheelEast, + [ANIM_MOVING_WHEELIE_SOUTH] = sAnim_MovingWheelieSouth, + [ANIM_MOVING_WHEELIE_NORTH] = sAnim_MovingWheelieNorth, + [ANIM_MOVING_WHEELIE_WEST] = sAnim_MovingWheelieWest, + [ANIM_MOVING_WHEELIE_EAST] = sAnim_MovingWheelieEast, }; static const union AnimCmd *const sAnimTable_Surfing[] = { - sAnim_FaceSouth, - sAnim_FaceNorth, - sAnim_FaceWest, - sAnim_FaceEast, - sAnim_GoSouth, - sAnim_GoNorth, - sAnim_GoWest, - sAnim_GoEast, - sAnim_GoFastSouth, - sAnim_GoFastNorth, - sAnim_GoFastWest, - sAnim_GoFastEast, - sAnim_GoFasterSouth, - sAnim_GoFasterNorth, - sAnim_GoFasterWest, - sAnim_GoFasterEast, - sAnim_GoFastestSouth, - sAnim_GoFastestNorth, - sAnim_GoFastestWest, - sAnim_GoFastestEast, - sAnim_GetOnOffSurfBlobSouth, - sAnim_GetOnOffSurfBlobNorth, - sAnim_GetOnOffSurfBlobWest, - sAnim_GetOnOffSurfBlobEast, + [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth, + [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth, + [ANIM_STD_FACE_WEST] = sAnim_FaceWest, + [ANIM_STD_FACE_EAST] = sAnim_FaceEast, + [ANIM_STD_GO_SOUTH] = sAnim_GoSouth, + [ANIM_STD_GO_NORTH] = sAnim_GoNorth, + [ANIM_STD_GO_WEST] = sAnim_GoWest, + [ANIM_STD_GO_EAST] = sAnim_GoEast, + [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth, + [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth, + [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest, + [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast, + [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth, + [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth, + [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest, + [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast, + [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth, + [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth, + [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest, + [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast, + [ANIM_GET_ON_OFF_POKEMON_SOUTH] = sAnim_GetOnOffSurfBlobSouth, + [ANIM_GET_ON_OFF_POKEMON_NORTH] = sAnim_GetOnOffSurfBlobNorth, + [ANIM_GET_ON_OFF_POKEMON_WEST] = sAnim_GetOnOffSurfBlobWest, + [ANIM_GET_ON_OFF_POKEMON_EAST] = sAnim_GetOnOffSurfBlobEast, }; static const union AnimCmd *const sAnimTable_Nurse[] = { - sAnim_FaceSouth, - sAnim_FaceNorth, - sAnim_FaceWest, - sAnim_FaceEast, - sAnim_GoSouth, - sAnim_GoNorth, - sAnim_GoWest, - sAnim_GoEast, - sAnim_GoFastSouth, - sAnim_GoFastNorth, - sAnim_GoFastWest, - sAnim_GoFastEast, - sAnim_GoFasterSouth, - sAnim_GoFasterNorth, - sAnim_GoFasterWest, - sAnim_GoFasterEast, - sAnim_GoFastestSouth, - sAnim_GoFastestNorth, - sAnim_GoFastestWest, - sAnim_GoFastestEast, - sAnim_NurseBow, + [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth, + [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth, + [ANIM_STD_FACE_WEST] = sAnim_FaceWest, + [ANIM_STD_FACE_EAST] = sAnim_FaceEast, + [ANIM_STD_GO_SOUTH] = sAnim_GoSouth, + [ANIM_STD_GO_NORTH] = sAnim_GoNorth, + [ANIM_STD_GO_WEST] = sAnim_GoWest, + [ANIM_STD_GO_EAST] = sAnim_GoEast, + [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth, + [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth, + [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest, + [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast, + [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth, + [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth, + [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest, + [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast, + [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth, + [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth, + [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest, + [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast, + [ANIM_NURSE_BOW] = sAnim_NurseBow, }; static const union AnimCmd *const sAnimTable_FieldMove[] = { - sAnim_FieldMove, + [ANIM_FIELD_MOVE] = sAnim_FieldMove, }; static const union AnimCmd *const sAnimTable_BerryTree[] = { - sAnim_BerryTreeStage0, - sAnim_BerryTreeStage1, - sAnim_BerryTreeStage2, - sAnim_BerryTreeStage3, - sAnim_BerryTreeStage4, + [BERRY_STAGE_PLANTED - 1] = sAnim_BerryTreeStage0, + [BERRY_STAGE_SPROUTED - 1] = sAnim_BerryTreeStage1, + [BERRY_STAGE_TALLER - 1] = sAnim_BerryTreeStage2, + [BERRY_STAGE_FLOWERING - 1] = sAnim_BerryTreeStage3, + [BERRY_STAGE_BERRIES - 1] = sAnim_BerryTreeStage4, }; static const union AnimCmd *const sAnimTable_BreakableRock[] = { - sAnim_StayStill, - sAnim_RockBreak, + [ANIM_STAY_STILL] = sAnim_StayStill, + [ANIM_REMOVE_OBSTACLE] = sAnim_RockBreak, }; static const union AnimCmd *const sAnimTable_CuttableTree[] = { - sAnim_StayStill, - sAnim_TreeCut, + [ANIM_STAY_STILL] = sAnim_StayStill, + [ANIM_REMOVE_OBSTACLE] = sAnim_TreeCut, }; static const union AnimCmd *const sAnimTable_Fishing[] = { - sAnim_TakeOutRodSouth, - sAnim_TakeOutRodNorth, - sAnim_TakeOutRodWest, - sAnim_TakeOutRodEast, - sAnim_PutAwayRodSouth, - sAnim_PutAwayRodNorth, - sAnim_PutAwayRodWest, - sAnim_PutAwayRodEast, - sAnim_HookedPokemonSouth, - sAnim_HookedPokemonNorth, - sAnim_HookedPokemonWest, - sAnim_HookedPokemonEast, + [ANIM_TAKE_OUT_ROD_SOUTH] = sAnim_TakeOutRodSouth, + [ANIM_TAKE_OUT_ROD_NORTH] = sAnim_TakeOutRodNorth, + [ANIM_TAKE_OUT_ROD_WEST] = sAnim_TakeOutRodWest, + [ANIM_TAKE_OUT_ROD_EAST] = sAnim_TakeOutRodEast, + [ANIM_PUT_AWAY_ROD_SOUTH] = sAnim_PutAwayRodSouth, + [ANIM_PUT_AWAY_ROD_NORTH] = sAnim_PutAwayRodNorth, + [ANIM_PUT_AWAY_ROD_WEST] = sAnim_PutAwayRodWest, + [ANIM_PUT_AWAY_ROD_EAST] = sAnim_PutAwayRodEast, + [ANIM_HOOKED_POKEMON_SOUTH] = sAnim_HookedPokemonSouth, + [ANIM_HOOKED_POKEMON_NORTH] = sAnim_HookedPokemonNorth, + [ANIM_HOOKED_POKEMON_WEST] = sAnim_HookedPokemonWest, + [ANIM_HOOKED_POKEMON_EAST] = sAnim_HookedPokemonEast, }; static const union AffineAnimCmd *const sAffineAnimTable_KyogreGroudon[] = { diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 81d83a8563..2f2cf689be 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -255,36 +255,51 @@ const u16 gObjectEventPal_SSTidal[] = INCBIN_U16("graphics/object_events/palette const u32 gFieldEffectObjectPic_Sparkle[] = INCBIN_U32("graphics/field_effects/pics/sparkle.4bpp"); const u32 gObjectEventPic_BerryTreeDirtPile[] = INCBIN_U32("graphics/object_events/pics/berry_trees/dirt_pile.4bpp"); const u32 gObjectEventPic_BerryTreeSprout[] = INCBIN_U32("graphics/object_events/pics/berry_trees/sprout.4bpp"); -const u32 gObjectEventPic_PechaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pecha.4bpp"); -const u32 gObjectEventPic_KelpsyBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/kelpsy.4bpp"); -const u32 gObjectEventPic_WepearBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/wepear.4bpp"); -const u32 gObjectEventPic_IapapaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/iapapa.4bpp"); const u32 gObjectEventPic_CheriBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/cheri.4bpp"); -const u32 gObjectEventPic_FigyBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/figy.4bpp"); -const u32 gObjectEventPic_MagoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/mago.4bpp"); -const u32 gObjectEventPic_LumBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/lum.4bpp"); -const u32 gObjectEventPic_RazzBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/razz.4bpp"); -const u32 gObjectEventPic_GrepaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/grepa.4bpp"); -const u32 gObjectEventPic_RabutaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/rabuta.4bpp"); -const u32 gObjectEventPic_NomelBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/nomel.4bpp"); -const u32 gObjectEventPic_LeppaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/leppa.4bpp"); -const u32 gObjectEventPic_LiechiBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/liechi.4bpp"); -const u32 gObjectEventPic_HondewBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/hondew.4bpp"); -const u32 gObjectEventPic_AguavBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/aguav.4bpp"); -const u32 gObjectEventPic_WikiBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/wiki.4bpp"); -const u32 gObjectEventPic_PomegBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pomeg.4bpp"); -const u32 gObjectEventPic_RawstBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/rawst.4bpp"); -const u32 gObjectEventPic_SpelonBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/spelon.4bpp"); const u32 gObjectEventPic_ChestoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/chesto.4bpp"); +const u32 gObjectEventPic_PechaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pecha.4bpp"); +const u32 gObjectEventPic_RawstBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/rawst.4bpp"); +const u32 gObjectEventPic_AspearBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/aspear.4bpp"); +const u32 gObjectEventPic_LeppaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/leppa.4bpp"); const u32 gObjectEventPic_OranBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/oran.4bpp"); const u32 gObjectEventPic_PersimBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/persim.4bpp"); +const u32 gObjectEventPic_LumBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/lum.4bpp"); const u32 gObjectEventPic_SitrusBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/sitrus.4bpp"); -const u32 gObjectEventPic_AspearBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/aspear.4bpp"); -const u32 gObjectEventPic_PamtreBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pamtre.4bpp"); -const u32 gObjectEventPic_CornnBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/cornn.4bpp"); -const u32 gObjectEventPic_LansatBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/lansat.4bpp"); -const u32 gObjectEventPic_DurinBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/durin.4bpp"); +const u32 gObjectEventPic_FigyBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/figy.4bpp"); +const u32 gObjectEventPic_WikiBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/wiki.4bpp"); +const u32 gObjectEventPic_MagoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/mago.4bpp"); +const u32 gObjectEventPic_AguavBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/aguav.4bpp"); +const u32 gObjectEventPic_IapapaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/iapapa.4bpp"); +const u32 gObjectEventPic_RazzBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/razz.4bpp"); +const u32 gObjectEventPic_WepearBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/wepear.4bpp"); +const u32 gObjectEventPic_PomegBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pomeg.4bpp"); +const u32 gObjectEventPic_KelpsyBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/kelpsy.4bpp"); +const u32 gObjectEventPic_HondewBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/hondew.4bpp"); +const u32 gObjectEventPic_GrepaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/grepa.4bpp"); const u32 gObjectEventPic_TamatoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/tamato.4bpp"); +const u32 gObjectEventPic_CornnBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/cornn.4bpp"); +const u32 gObjectEventPic_RabutaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/rabuta.4bpp"); +const u32 gObjectEventPic_NomelBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/nomel.4bpp"); +const u32 gObjectEventPic_SpelonBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/spelon.4bpp"); +const u32 gObjectEventPic_PamtreBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pamtre.4bpp"); +const u32 gObjectEventPic_DurinBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/durin.4bpp"); +const u32 gObjectEventPic_OccaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/occa.4bpp"); +const u32 gObjectEventPic_YacheBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/yache.4bpp"); +const u32 gObjectEventPic_ChopleBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/chople.4bpp"); +const u32 gObjectEventPic_KebiaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/kebia.4bpp"); +const u32 gObjectEventPic_ShucaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/shuca.4bpp"); +const u32 gObjectEventPic_PayapaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/payapa.4bpp"); +const u32 gObjectEventPic_TangaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/tanga.4bpp"); +const u32 gObjectEventPic_KasibBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/kasib.4bpp"); +const u32 gObjectEventPic_HabanBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/haban.4bpp"); +const u32 gObjectEventPic_ColburBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/colbur.4bpp"); +const u32 gObjectEventPic_RoseliBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/roseli.4bpp"); +const u32 gObjectEventPic_LiechiBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/liechi.4bpp"); +const u32 gObjectEventPic_LansatBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/lansat.4bpp"); +const u32 gObjectEventPic_MicleBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/micle.4bpp"); +const u32 gObjectEventPic_CustapBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/custap.4bpp"); +const u32 gObjectEventPic_JabocaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/jaboca.4bpp"); +const u32 gObjectEventPic_RowapBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/rowap.4bpp"); const u32 gFieldEffectObjectPic_SurfBlob[] = INCBIN_U32("graphics/field_effects/pics/surf_blob.4bpp"); const u32 gObjectEventPic_QuintyPlump[] = INCBIN_U32("graphics/object_events/pics/people/quinty_plump.4bpp"); const u16 gObjectEventPal_QuintyPlump[] = INCBIN_U16("graphics/object_events/palettes/quinty_plump.gbapal"); @@ -305,7 +320,7 @@ const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/pale const u32 gFieldEffectObjectPic_GroundImpactDust[] = INCBIN_U32("graphics/field_effects/pics/ground_impact_dust.4bpp"); const u32 gFieldEffectObjectPic_JumpTallGrass[] = INCBIN_U32("graphics/field_effects/pics/jump_tall_grass.4bpp"); const u32 gUnusedGrass3[] = INCBIN_U32("graphics/field_effects/pics/unused_grass_3.4bpp"); -const u32 gFieldEffectObjectPic_JumpLongGrass[] = INCBIN_U32("graphics/field_effects/pics/unknown_16.4bpp"); +const u32 gFieldEffectObjectPic_JumpLongGrass[] = INCBIN_U32("graphics/field_effects/pics/jump_long_grass.4bpp"); const u32 gFieldEffectObjectPic_Unknown17[] = INCBIN_U32("graphics/field_effects/pics/unknown_17.4bpp"); const u32 gFieldEffectObjectPic_UnusedGrass2[] = INCBIN_U32("graphics/field_effects/pics/unused_grass_2.4bpp"); const u32 gFieldEffectObjectPic_LongGrass[] = INCBIN_U32("graphics/field_effects/pics/long_grass.4bpp"); diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h index ddc6a1cad3..ea424090a5 100755 --- a/src/data/object_events/object_event_graphics_info.h +++ b/src/data/object_events/object_event_graphics_info.h @@ -1,245 +1,245 @@ -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanSurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Surfing, sPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_FieldMove, sPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_QuintyPlump = {0xFFFF, OBJ_EVENT_PAL_TAG_QUINTY_PLUMP, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_L, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_QuintyPlump, sPicTable_QuintyPlump, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_NinjaBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_NinjaBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Twin = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Twin, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Boy1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Girl1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Boy2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Girl2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_LittleBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleGirl = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_LittleGirl, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Boy3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Girl3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RichBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RichBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Woman1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FatMan = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_FatMan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_PokefanF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Man1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Woman2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ExpertM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ExpertF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Man2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Woman3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_PokefanM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman4 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Woman4, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cook = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Cook, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkReceptionist = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_LinkReceptionist, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldMan = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_OldMan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_OldWoman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Camper = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Camper, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Picnicker = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Picnicker, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Man3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman5 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Woman5, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Youngster = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Youngster, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BugCatcher = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_BugCatcher, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PsychicM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_PsychicM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SchoolKidM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_SchoolKidM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maniac = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Maniac, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HexManiac = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_HexManiac, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RayquazaStill = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, sOamTables_64x64, sAnimTable_Standard, sPicTable_RayquazaStill, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_SwimmerM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_SwimmerF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BlackBelt = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_BlackBelt, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Beauty = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Beauty, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Scientist1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lass = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Lass, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gentleman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Gentleman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sailor = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Sailor, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fisherman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Fisherman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RunningTriathleteM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RunningTriathleteF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_TuberF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_TuberM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hiker = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Hiker, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_CyclingTriathleteM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_CyclingTriathleteF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nurse = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Nurse, sPicTable_Nurse, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ItemBall = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_ItemBall, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTree = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, NULL, sAnimTable_BerryTree, sPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeEarlyStages = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_BerryTree, sPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeLateStages = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BerryTree, sPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ProfBirch = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ProfBirch, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man4 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Man4, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man5 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Man5, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ReporterM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ReporterF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Trader = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Storyteller = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Giddy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedNatuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedNatuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMagnemiteDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedMagnemiteDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedSquirtleDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedSquirtleDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedWooperDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedWooperDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPikachuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedPikachuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPorygon2Doll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedPorygon2Doll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CuttableTree = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_CuttableTree, sPicTable_CuttableTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MartEmployee = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MartEmployee, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RooftopSaleWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RooftopSaleWoman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Teala = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Teala, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BreakableRock = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_BreakableRock, sPicTable_BreakableRock, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PushableBoulder = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_PushableBoulder, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MrBrineysBoat = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_MrBrineysBoat, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_MayNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_MayMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MaySurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Surfing, sPicTable_MaySurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_FieldMove, sPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Truck = {0xFFFF, OBJ_EVENT_PAL_TAG_TRUCK, OBJ_EVENT_PAL_TAG_NONE, 1152, 48, 48, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_48x48, sAnimTable_Inanimate, sPicTable_Truck, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothCarryingBox = {0xFFFF, OBJ_EVENT_PAL_TAG_VIGOROTH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_VigorothCarryingBox, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothFacingAway = {0xFFFF, OBJ_EVENT_PAL_TAG_VIGOROTH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_VigorothFacingAway, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirchsBag = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_BirchsBag, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_EnemyZigzagoon = {0xFFFF, OBJ_EVENT_PAL_TAG_ZIGZAGOON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_EnemyZigzagoon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poochyena = {0xFFFF, OBJ_EVENT_PAL_TAG_POOCHYENA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Poochyena, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Artist = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Artist, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanSurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Surfing, sPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_FieldMove, sPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_MayNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_MayMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMaySurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Surfing, sPicTable_MaySurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_FieldMove, sPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cameraman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Cameraman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanUnderwater = {0xFFFF, OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_BrendanUnderwater, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayUnderwater = {0xFFFF, OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_MayUnderwater, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MovingBox = {0xFFFF, OBJ_EVENT_PAL_TAG_MOVING_BOX, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 10, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_MovingBox, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CableCar = {0xFFFF, OBJ_EVENT_PAL_TAG_CABLE_CAR, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_64x64, sOamTables_64x64, sAnimTable_Inanimate, sPicTable_CableCar, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Scientist2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DevonEmployee = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_DevonEmployee, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_AquaMemberM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_AquaMemberF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MagmaMemberM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MagmaMemberF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sidney = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Sidney, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Phoebe = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Phoebe, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Glacia = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Glacia, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Drake = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Drake, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Roxanne = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Roxanne, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brawly = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Brawly, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wattson = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Wattson, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Flannery = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Flannery, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Norman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Norman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Winona = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Winona, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Liza = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Liza, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tate = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Tate, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wallace = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Wallace, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Steven = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Steven, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wally = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Wally, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireLittleBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_RubySapphireLittleBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFishing = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Fishing, sPicTable_BrendanFishing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFishing = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Fishing, sPicTable_MayFishing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HotSpringsOldWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_HotSpringsOldWoman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SSTidal = {0xFFFF, OBJ_EVENT_PAL_TAG_SSTIDAL, OBJ_EVENT_PAL_TAG_NONE, 1920, 96, 40, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, sOamTables_96x40, sAnimTable_Standard, sPicTable_SSTidal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SubmarineShadow = {0xFFFF, OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, OBJ_EVENT_PAL_TAG_NONE, 1408, 88, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, sOamTables_88x32, sAnimTable_Standard, sPicTable_SubmarineShadow, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PichuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_PichuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikachuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_PikachuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MarillDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_MarillDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TogepiDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_TogepiDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyndaquilDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_CyndaquilDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ChikoritaDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_ChikoritaDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TotodileDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_TotodileDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_JigglypuffDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_JigglypuffDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MeowthDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_MeowthDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ClefairyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_ClefairyDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DittoDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_DittoDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SmoochumDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_SmoochumDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TreeckoDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_TreeckoDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TorchicDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_TorchicDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MudkipDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_MudkipDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DuskullDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_DuskullDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WynautDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_WynautDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BaltoyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_BaltoyDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_KecleonDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AzurillDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_AzurillDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SkittyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_SkittyDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwabluDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_SwabluDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GulpinDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_GulpinDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LotadDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_LotadDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SeedotDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_SeedotDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikaCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_PikaCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RoundCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_RoundCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KissCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_KissCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ZigzagCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_ZigzagCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SpinCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_SpinCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DiamondCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_DiamondCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BallCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_BallCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GrassCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_GrassCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FireCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_FireCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WaterCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_WaterCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigSnorlaxDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigSnorlaxDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRhydonDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigRhydonDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigLaprasDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigLaprasDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigVenusaurDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigVenusaurDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigCharizardDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigCharizardDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigBlastoiseDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigBlastoiseDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigWailmerDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigWailmerDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegirockDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigRegirockDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegiceDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigRegiceDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegisteelDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigRegisteelDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latias = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latios = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GameboyKid = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_GameboyKid, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ContestJudge = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ContestJudge, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanWatering = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_BrendanWatering, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayWatering = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_MayWatering, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanDecorating = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Inanimate, sPicTable_BrendanDecorating, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayDecorating = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Inanimate, sPicTable_MayDecorating, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Archie = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Archie, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maxie = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Maxie, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KyogreFront = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_KyogreFront, sAffineAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GroudonFront = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_GroudonFront, sAffineAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KyogreSide = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_KyogreSide, sAffineAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GroudonSide = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_GroudonSide, sPicTable_GroudonSide, sAffineAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fossil = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_Fossil, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regirock = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Regi, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regice = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Regi, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Registeel = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Regi, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Skitty, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Kecleon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KyogreAsleep = {0xFFFF, OBJ_EVENT_PAL_TAG_KYOGRE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_KyogreFront, sAffineAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GroudonAsleep = {0xFFFF, OBJ_EVENT_PAL_TAG_GROUDON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_GroudonFront, sAffineAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, sOamTables_64x64, sAnimTable_Rayquaza, sPicTable_Rayquaza, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Zigzagoon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Pikachu, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Azumarill, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Wingull, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonBridgeShadow = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Kecleon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_TuberMSwimming, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Azurill, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Mom, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkBrendan = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkMay = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_MayNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Juan = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Juan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scott = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Scott, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MysteryEventDeliveryman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MysteryEventDeliveryman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Statue = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Inanimate, sPicTable_Statue, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kirlia = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_S, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Kirlia, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dusclops = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Dusclops, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnionRoomAttendant = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_UnionRoomAttendant, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Red = {0xFFFF, OBJ_EVENT_PAL_TAG_RED_LEAF, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Red, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Leaf = {0xFFFF, OBJ_EVENT_PAL_TAG_RED_LEAF, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Leaf, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sudowoodo = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Sudowoodo, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mew = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Mew, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Deoxys = {0xFFFF, OBJ_EVENT_PAL_TAG_DEOXYS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Deoxys, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirthIslandStone = {0xFFFF, OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BirthIslandStone, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Anabel = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Anabel, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tucker = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Tucker, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Greta = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Greta, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Spenser = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Spenser, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Noland = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Noland, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lucy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Lucy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brandon = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Brandon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireBrendan = {0xFFFF, OBJ_EVENT_PAL_TAG_RS_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RubySapphireBrendan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay = {0xFFFF, OBJ_EVENT_PAL_TAG_RS_MAY, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RubySapphireMay, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = {0xFFFF, OBJ_EVENT_PAL_TAG_LUGIA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Lugia, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = {0xFFFF, OBJ_EVENT_PAL_TAG_HO_OH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_HoOh, sPicTable_HoOh, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanNormal = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanMachBike = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanAcroBike = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanSurfing = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Surfing, sPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFieldMove = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_FieldMove, sPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_QuintyPlump = {TAG_NONE, OBJ_EVENT_PAL_TAG_QUINTY_PLUMP, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_L, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_QuintyPlump, sPicTable_QuintyPlump, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_NinjaBoy = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_NinjaBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Twin = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Twin, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy1 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Boy1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl1 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Girl1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy2 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Boy2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl2 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Girl2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleBoy = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_LittleBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleGirl = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_LittleGirl, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy3 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Boy3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl3 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Girl3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RichBoy = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RichBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman1 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Woman1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FatMan = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_FatMan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanF = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_PokefanF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man1 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Man1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman2 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Woman2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ExpertM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertF = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ExpertF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man2 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Man2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman3 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Woman3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_PokefanM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman4 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Woman4, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cook = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Cook, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkReceptionist = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_LinkReceptionist, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldMan = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_OldMan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldWoman = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_OldWoman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Camper = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Camper, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Picnicker = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Picnicker, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man3 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Man3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman5 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Woman5, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Youngster = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Youngster, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BugCatcher = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_BugCatcher, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PsychicM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_PsychicM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SchoolKidM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_SchoolKidM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maniac = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Maniac, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HexManiac = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_HexManiac, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RayquazaStill = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, sOamTables_64x64, sAnimTable_Standard, sPicTable_RayquazaStill, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_SwimmerM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerF = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_SwimmerF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BlackBelt = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_BlackBelt, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Beauty = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Beauty, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist1 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Scientist1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lass = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Lass, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gentleman = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Gentleman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sailor = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Sailor, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fisherman = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Fisherman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RunningTriathleteM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteF = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RunningTriathleteF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberF = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_TuberF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_TuberM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hiker = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Hiker, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_CyclingTriathleteM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteF = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_CyclingTriathleteF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nurse = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Nurse, sPicTable_Nurse, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ItemBall = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_ItemBall, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTree = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, NULL, sAnimTable_BerryTree, sPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeEarlyStages = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_BerryTree, sPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeLateStages = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BerryTree, sPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ProfBirch = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ProfBirch, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man4 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Man4, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man5 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Man5, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ReporterM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterF = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ReporterF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Trader = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Storyteller = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Giddy = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan1 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan2 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedNatuDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedNatuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMagnemiteDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedMagnemiteDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedSquirtleDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedSquirtleDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedWooperDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedWooperDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPikachuDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedPikachuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPorygon2Doll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_UnusedPorygon2Doll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CuttableTree = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_CuttableTree, sPicTable_CuttableTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MartEmployee = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MartEmployee, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RooftopSaleWoman = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RooftopSaleWoman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Teala = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Teala, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BreakableRock = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_BreakableRock, sPicTable_BreakableRock, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PushableBoulder = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_PushableBoulder, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MrBrineysBoat = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_MrBrineysBoat, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayNormal = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayMachBike = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_MayMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayAcroBike = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MaySurfing = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Surfing, sPicTable_MaySurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFieldMove = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_FieldMove, sPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Truck = {TAG_NONE, OBJ_EVENT_PAL_TAG_TRUCK, OBJ_EVENT_PAL_TAG_NONE, 1152, 48, 48, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_48x48, sAnimTable_Inanimate, sPicTable_Truck, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothCarryingBox = {TAG_NONE, OBJ_EVENT_PAL_TAG_VIGOROTH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_VigorothCarryingBox, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothFacingAway = {TAG_NONE, OBJ_EVENT_PAL_TAG_VIGOROTH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_VigorothFacingAway, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirchsBag = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_BirchsBag, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_EnemyZigzagoon = {TAG_NONE, OBJ_EVENT_PAL_TAG_ZIGZAGOON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_EnemyZigzagoon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poochyena = {TAG_NONE, OBJ_EVENT_PAL_TAG_POOCHYENA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Poochyena, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Artist = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Artist, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanNormal = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanMachBike = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanAcroBike = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanSurfing = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Surfing, sPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanFieldMove = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_FieldMove, sPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayNormal = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayMachBike = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_MayMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayAcroBike = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_AcroBike, sPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMaySurfing = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Surfing, sPicTable_MaySurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayFieldMove = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_FieldMove, sPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cameraman = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Cameraman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanUnderwater = {TAG_NONE, OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_BrendanUnderwater, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayUnderwater = {TAG_NONE, OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_MayUnderwater, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MovingBox = {TAG_NONE, OBJ_EVENT_PAL_TAG_MOVING_BOX, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 10, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_MovingBox, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CableCar = {TAG_NONE, OBJ_EVENT_PAL_TAG_CABLE_CAR, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_64x64, sOamTables_64x64, sAnimTable_Inanimate, sPicTable_CableCar, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist2 = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Scientist2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DevonEmployee = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_DevonEmployee, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_AquaMemberM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberF = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_AquaMemberF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberM = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MagmaMemberM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberF = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MagmaMemberF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sidney = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Sidney, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Phoebe = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Phoebe, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Glacia = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Glacia, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Drake = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Drake, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Roxanne = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Roxanne, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brawly = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Brawly, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wattson = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Wattson, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Flannery = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Flannery, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Norman = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Norman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Winona = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Winona, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Liza = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Liza, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tate = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Tate, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wallace = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Wallace, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Steven = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Steven, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wally = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Wally, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireLittleBoy = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_RubySapphireLittleBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFishing = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Fishing, sPicTable_BrendanFishing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFishing = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Fishing, sPicTable_MayFishing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HotSpringsOldWoman = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_HotSpringsOldWoman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SSTidal = {TAG_NONE, OBJ_EVENT_PAL_TAG_SSTIDAL, OBJ_EVENT_PAL_TAG_NONE, 1920, 96, 40, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, sOamTables_96x40, sAnimTable_Standard, sPicTable_SSTidal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SubmarineShadow = {TAG_NONE, OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, OBJ_EVENT_PAL_TAG_NONE, 1408, 88, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, sOamTables_88x32, sAnimTable_Standard, sPicTable_SubmarineShadow, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PichuDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_PichuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikachuDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_PikachuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MarillDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_MarillDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TogepiDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_TogepiDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyndaquilDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_CyndaquilDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ChikoritaDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_ChikoritaDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TotodileDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_TotodileDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_JigglypuffDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_JigglypuffDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MeowthDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_MeowthDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ClefairyDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_ClefairyDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DittoDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_DittoDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SmoochumDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_SmoochumDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TreeckoDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_TreeckoDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TorchicDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_TorchicDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MudkipDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_MudkipDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DuskullDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_DuskullDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WynautDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_WynautDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BaltoyDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_BaltoyDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_KecleonDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AzurillDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_AzurillDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SkittyDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_SkittyDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwabluDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_SwabluDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GulpinDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_GulpinDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LotadDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_LotadDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SeedotDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_SeedotDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikaCushion = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_PikaCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RoundCushion = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_RoundCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KissCushion = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_KissCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ZigzagCushion = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_ZigzagCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SpinCushion = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_SpinCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DiamondCushion = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_DiamondCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BallCushion = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_BallCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GrassCushion = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_GrassCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FireCushion = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_FireCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WaterCushion = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_WaterCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigSnorlaxDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigSnorlaxDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRhydonDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigRhydonDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigLaprasDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigLaprasDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigVenusaurDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigVenusaurDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigCharizardDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigCharizardDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigBlastoiseDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigBlastoiseDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigWailmerDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigWailmerDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegirockDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigRegirockDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegiceDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigRegiceDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegisteelDoll = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BigRegisteelDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latias = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latios = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GameboyKid = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_GameboyKid, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ContestJudge = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_ContestJudge, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanWatering = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_BrendanWatering, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayWatering = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_MayWatering, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanDecorating = {TAG_NONE, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Inanimate, sPicTable_BrendanDecorating, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayDecorating = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Inanimate, sPicTable_MayDecorating, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Archie = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Archie, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maxie = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Maxie, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KyogreFront = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_KyogreFront, sAffineAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GroudonFront = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_GroudonFront, sAffineAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KyogreSide = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_KyogreSide, sAffineAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GroudonSide = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_GroudonSide, sPicTable_GroudonSide, sAffineAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fossil = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Inanimate, sPicTable_Fossil, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regirock = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regice = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Registeel = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Skitty, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KyogreAsleep = {TAG_NONE, OBJ_EVENT_PAL_TAG_KYOGRE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_KyogreFront, sAffineAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GroudonAsleep = {TAG_NONE, OBJ_EVENT_PAL_TAG_GROUDON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_GroudonFront, sAffineAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, sOamTables_64x64, sAnimTable_Rayquaza, sPicTable_Rayquaza, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Zigzagoon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Pikachu, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Azumarill, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Wingull, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonBridgeShadow = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_TuberMSwimming, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, sOamTables_16x16, sAnimTable_Standard, sPicTable_Azurill, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Mom, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkBrendan = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkMay = {TAG_NONE, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_BrendanMayNormal, sPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Juan = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Juan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scott = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Scott, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MysteryEventDeliveryman = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_MysteryEventDeliveryman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Statue = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Inanimate, sPicTable_Statue, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kirlia = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_S, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Kirlia, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dusclops = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Dusclops, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnionRoomAttendant = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_UnionRoomAttendant, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Red = {TAG_NONE, OBJ_EVENT_PAL_TAG_RED_LEAF, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Red, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Leaf = {TAG_NONE, OBJ_EVENT_PAL_TAG_RED_LEAF, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Leaf, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sudowoodo = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Sudowoodo, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mew = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Mew, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Deoxys = {TAG_NONE, OBJ_EVENT_PAL_TAG_DEOXYS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Deoxys, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirthIslandStone = {TAG_NONE, OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, sPicTable_BirthIslandStone, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Anabel = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Anabel, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tucker = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Tucker, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Greta = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Greta, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Spenser = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Spenser, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Noland = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Noland, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lucy = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Lucy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brandon = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_Brandon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireBrendan = {TAG_NONE, OBJ_EVENT_PAL_TAG_RS_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RubySapphireBrendan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay = {TAG_NONE, OBJ_EVENT_PAL_TAG_RS_MAY, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RubySapphireMay, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = {TAG_NONE, OBJ_EVENT_PAL_TAG_LUGIA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Lugia, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = {TAG_NONE, OBJ_EVENT_PAL_TAG_HO_OH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_HoOh, sPicTable_HoOh, gDummySpriteAffineAnimTable}; diff --git a/src/data/object_events/object_event_subsprites.h b/src/data/object_events/object_event_subsprites.h index 0d55c2df28..8084919927 100755 --- a/src/data/object_events/object_event_subsprites.h +++ b/src/data/object_events/object_event_subsprites.h @@ -1,1530 +1,1530 @@ static const struct Subsprite sOamTable_16x16_0[] = { - { - .x = -8, - .y = -8, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .tileOffset = 0, + { + .x = -8, + .y = -8, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileOffset = 0, .priority = 2 } }; static const struct Subsprite sOamTable_16x16_1[] = { - { - .x = -8, - .y = -8, - .shape = SPRITE_SHAPE(16x16), + { + .x = -8, + .y = -8, + .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), - .tileOffset = 0, + .tileOffset = 0, .priority = 1 } }; static const struct Subsprite sOamTable_16x16_2[] = { - { - .x = -8, - .y = -8, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 0, + { + .x = -8, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 0, .priority = 2 }, - { - .x = -8, - .y = 0, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 2, + { + .x = -8, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 2, .priority = 3 } }; static const struct Subsprite sOamTable_16x16_3[] = { - { - .x = -8, - .y = -8, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .tileOffset = 0, + { + .x = -8, + .y = -8, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileOffset = 0, .priority = 2 }, - { - .x = -8, - .y = -8, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .tileOffset = 0, + { + .x = -8, + .y = -8, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileOffset = 0, .priority = 3 } }; static const struct Subsprite sOamTable_16x16_4[] = { - { - .x = -8, - .y = -8, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .tileOffset = 0, + { + .x = -8, + .y = -8, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileOffset = 0, .priority = 1 }, - { - .x = -8, - .y = -8, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .tileOffset = 0, + { + .x = -8, + .y = -8, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileOffset = 0, .priority = 3 } }; static const struct SubspriteTable sOamTables_16x16[] = { - {0, NULL}, - {1, sOamTable_16x16_0}, - {1, sOamTable_16x16_1}, - {2, sOamTable_16x16_2}, - {2, sOamTable_16x16_3}, - {2, sOamTable_16x16_4} + {}, + {ARRAY_COUNT(sOamTable_16x16_0), sOamTable_16x16_0}, + {ARRAY_COUNT(sOamTable_16x16_1), sOamTable_16x16_1}, + {ARRAY_COUNT(sOamTable_16x16_2), sOamTable_16x16_2}, + {ARRAY_COUNT(sOamTable_16x16_3), sOamTable_16x16_3}, + {ARRAY_COUNT(sOamTable_16x16_4), sOamTable_16x16_4} }; static const struct Subsprite sOamTable_16x32_0[] = { - { - .x = -8, - .y = -16, - .shape = SPRITE_SHAPE(16x32), - .size = SPRITE_SIZE(16x32), - .tileOffset = 0, + { + .x = -8, + .y = -16, + .shape = SPRITE_SHAPE(16x32), + .size = SPRITE_SIZE(16x32), + .tileOffset = 0, .priority = 2 } }; static const struct Subsprite sOamTable_16x32_1[] = { - { - .x = -8, - .y = -16, - .shape = SPRITE_SHAPE(16x32), + { + .x = -8, + .y = -16, + .shape = SPRITE_SHAPE(16x32), .size = SPRITE_SIZE(16x32), - .tileOffset = 0, + .tileOffset = 0, .priority = 1 } }; static const struct Subsprite sOamTable_16x32_2[] = { - { - .x = -8, - .y = -16, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .tileOffset = 0, + { + .x = -8, + .y = -16, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileOffset = 0, .priority = 2 }, - { - .x = -8, - .y = 0, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 4, + { + .x = -8, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 4, .priority = 2 }, - { - .x = -8, - .y = 8, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 6, + { + .x = -8, + .y = 8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 6, .priority = 3 } }; static const struct Subsprite sOamTable_16x32_3[] = { - { - .x = -8, - .y = -16, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .tileOffset = 0, + { + .x = -8, + .y = -16, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileOffset = 0, .priority = 2 }, - { - .x = -8, - .y = 0, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .tileOffset = 4, + { + .x = -8, + .y = 0, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileOffset = 4, .priority = 3 } }; static const struct Subsprite sOamTable_16x32_4[] = { - { - .x = -8, - .y = -16, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .tileOffset = 0, + { + .x = -8, + .y = -16, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileOffset = 0, .priority = 1 }, - { - .x = -8, - .y = 0, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .tileOffset = 4, + { + .x = -8, + .y = 0, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileOffset = 4, .priority = 3 } }; static const struct SubspriteTable sOamTables_16x32[] = { - {0, NULL}, - {1, sOamTable_16x32_0}, - {1, sOamTable_16x32_1}, - {3, sOamTable_16x32_2}, - {2, sOamTable_16x32_3}, - {2, sOamTable_16x32_4} + {}, + {ARRAY_COUNT(sOamTable_16x32_0), sOamTable_16x32_0}, + {ARRAY_COUNT(sOamTable_16x32_1), sOamTable_16x32_1}, + {ARRAY_COUNT(sOamTable_16x32_2), sOamTable_16x32_2}, + {ARRAY_COUNT(sOamTable_16x32_3), sOamTable_16x32_3}, + {ARRAY_COUNT(sOamTable_16x32_4), sOamTable_16x32_4} }; static const struct Subsprite sOamTable_32x32_0[] = { { - .x = -16, - .y = -16, - .shape = SPRITE_SHAPE(32x32), - .size = SPRITE_SIZE(32x32), - .tileOffset = 0, + .x = -16, + .y = -16, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileOffset = 0, .priority = 2 } }; static const struct Subsprite sOamTable_32x32_1[] = { { - .x = -16, - .y = -16, - .shape = SPRITE_SHAPE(32x32), + .x = -16, + .y = -16, + .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileOffset = 0, + .tileOffset = 0, .priority = 1 } }; static const struct Subsprite sOamTable_32x32_2[] = { { - .x = -16, - .y = -16, - .shape = SPRITE_SHAPE(32x16), - .size = SPRITE_SIZE(32x16), - .tileOffset = 0, + .x = -16, + .y = -16, + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .tileOffset = 0, .priority = 2 }, { - .x = -16, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 8, + .x = -16, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, .priority = 2 }, { - .x = -16, - .y = 8, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 12, + .x = -16, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, .priority = 3 } }; static const struct Subsprite sOamTable_32x32_3[] = { { - .x = -16, - .y = -16, - .shape = SPRITE_SHAPE(32x16), - .size = SPRITE_SIZE(32x16), - .tileOffset = 0, + .x = -16, + .y = -16, + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .tileOffset = 0, .priority = 2 }, { - .x = -16, - .y = 0, - .shape = SPRITE_SHAPE(32x16), + .x = -16, + .y = 0, + .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), - .tileOffset = 8, + .tileOffset = 8, .priority = 3 } }; static const struct Subsprite sOamTable_32x32_4[] = { { - .x = -16, - .y = -16, - .shape = SPRITE_SHAPE(32x16), + .x = -16, + .y = -16, + .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), - .tileOffset = 0, + .tileOffset = 0, .priority = 1 }, { - .x = -16, - .y = 0, - .shape = SPRITE_SHAPE(32x16), + .x = -16, + .y = 0, + .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), - .tileOffset = 8, + .tileOffset = 8, .priority = 3 } }; static const struct SubspriteTable sOamTables_32x32[] = { - {0, NULL}, - {1, sOamTable_32x32_0}, - {1, sOamTable_32x32_1}, - {3, sOamTable_32x32_2}, - {2, sOamTable_32x32_3}, - {2, sOamTable_32x32_4} + {}, + {ARRAY_COUNT(sOamTable_32x32_0), sOamTable_32x32_0}, + {ARRAY_COUNT(sOamTable_32x32_1), sOamTable_32x32_1}, + {ARRAY_COUNT(sOamTable_32x32_2), sOamTable_32x32_2}, + {ARRAY_COUNT(sOamTable_32x32_3), sOamTable_32x32_3}, + {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, + .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, + .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, + .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, + .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, + .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, + .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, + .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, + .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, + .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, + .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, + .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, + .x = 8, + .y = 16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 34, .priority = 2 } }; static const struct SubspriteTable sOamTables_48x48[] = { - {12, sOamTable_48x48}, - {12, sOamTable_48x48}, - {12, sOamTable_48x48}, - {12, sOamTable_48x48}, - {12, sOamTable_48x48}, - {12, 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}, + {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), - .tileOffset = 0, + .x = -32, + .y = -16, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, .priority = 2 } }; static const struct Subsprite sOamTable_64x32_1[] = { { - .x = -32, - .y = -16, - .shape = SPRITE_SHAPE(64x32), - .size = SPRITE_SIZE(64x32), - .tileOffset = 0, + .x = -32, + .y = -16, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, .priority = 1 } }; static const struct Subsprite sOamTable_64x32_2[] = { { - .x = -32, - .y = -16, - .shape = SPRITE_SHAPE(64x32), - .size = SPRITE_SIZE(64x32), - .tileOffset = 0, + .x = -32, + .y = -16, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, .priority = 2 } }; static const struct Subsprite sOamTable_64x32_3[] = { { - .x = -32, - .y = -16, - .shape = SPRITE_SHAPE(64x32), - .size = SPRITE_SIZE(64x32), - .tileOffset = 0, + .x = -32, + .y = -16, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, .priority = 2 } }; // Unused static const struct SubspriteTable sOamTables_64x32[] = { - {0, NULL}, - {1, sOamTable_64x32_0}, - {1, sOamTable_64x32_1}, - {1, sOamTable_64x32_2}, - {1, sOamTable_64x32_3}, - {1, sOamTable_64x32_3} + {}, + {ARRAY_COUNT(sOamTable_64x32_0), sOamTable_64x32_0}, + {ARRAY_COUNT(sOamTable_64x32_1), sOamTable_64x32_1}, + {ARRAY_COUNT(sOamTable_64x32_2), sOamTable_64x32_2}, + {ARRAY_COUNT(sOamTable_64x32_3), sOamTable_64x32_3}, + {ARRAY_COUNT(sOamTable_64x32_3), sOamTable_64x32_3} }; static const struct Subsprite sOamTable_64x64_0[] = { { - .x = -32, - .y = -32, - .shape = SPRITE_SHAPE(64x64), - .size = SPRITE_SIZE(64x64), - .tileOffset = 0, + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileOffset = 0, .priority = 2 } }; static const struct Subsprite sOamTable_64x64_1[] = { { - .x = -32, - .y = -32, - .shape = SPRITE_SHAPE(64x64), - .size = SPRITE_SIZE(64x64), - .tileOffset = 0, + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileOffset = 0, .priority = 1 } }; static const struct Subsprite sOamTable_64x64_2[] = { { - .x = -32, - .y = -32, - .shape = SPRITE_SHAPE(64x64), - .size = SPRITE_SIZE(64x64), - .tileOffset = 0, + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileOffset = 0, .priority = 2 } }; static const struct Subsprite sOamTable_64x64_3[] = { { - .x = -32, - .y = -32, - .shape = SPRITE_SHAPE(64x64), - .size = SPRITE_SIZE(64x64), - .tileOffset = 0, + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileOffset = 0, .priority = 2 } }; static const struct SubspriteTable sOamTables_64x64[] = { - {0, NULL}, - {1, sOamTable_64x64_0}, - {1, sOamTable_64x64_1}, - {1, sOamTable_64x64_2}, - {1, sOamTable_64x64_3}, - {1, sOamTable_64x64_3} + {}, + {ARRAY_COUNT(sOamTable_64x64_0), sOamTable_64x64_0}, + {ARRAY_COUNT(sOamTable_64x64_1), sOamTable_64x64_1}, + {ARRAY_COUNT(sOamTable_64x64_2), sOamTable_64x64_2}, + {ARRAY_COUNT(sOamTable_64x64_3), sOamTable_64x64_3}, + {ARRAY_COUNT(sOamTable_64x64_3), sOamTable_64x64_3} }; static const struct Subsprite sOamTable_96x40_0[] = { { - .x = -48, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .x = -48, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 2 }, { - .x = -16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, + .x = -16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, .priority = 2 }, { - .x = 16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 8, + .x = 16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, .priority = 2 }, { - .x = -48, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 12, + .x = -48, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, .priority = 2 }, { - .x = -16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 16, + .x = -16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 16, .priority = 2 }, { - .x = 16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 20, + .x = 16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 20, .priority = 2 }, { - .x = -48, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 24, + .x = -48, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, .priority = 2 }, { - .x = -16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 28, + .x = -16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 28, .priority = 2 }, { - .x = 16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 32, + .x = 16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 32, .priority = 2 }, { - .x = -48, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 36, + .x = -48, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 36, .priority = 2 }, { - .x = -16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 40, + .x = -16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 40, .priority = 2 }, { - .x = 16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 44, + .x = 16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 44, .priority = 2 }, { - .x = -48, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 48, + .x = -48, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 48, .priority = 2 }, { - .x = -16, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 52, + .x = -16, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 52, .priority = 2 }, { - .x = 16, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 56, + .x = 16, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 56, .priority = 2 } }; static const struct Subsprite sOamTable_96x40_1[] = { { - .x = -48, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .x = -48, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 1 }, { - .x = -16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, + .x = -16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, .priority = 1 }, { - .x = 16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 8, + .x = 16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, .priority = 1 }, { - .x = -48, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 12, + .x = -48, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, .priority = 1 }, { - .x = -16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 16, + .x = -16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 16, .priority = 1 }, { - .x = 16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 20, + .x = 16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 20, .priority = 1 }, { - .x = -48, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 24, + .x = -48, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, .priority = 1 }, { - .x = -16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 28, + .x = -16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 28, .priority = 1 }, { - .x = 16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 32, + .x = 16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 32, .priority = 1 }, { - .x = -48, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 36, + .x = -48, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 36, .priority = 1 }, { - .x = -16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 40, + .x = -16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 40, .priority = 1 }, { - .x = 16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 44, + .x = 16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 44, .priority = 1 }, { - .x = -48, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 48, + .x = -48, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 48, .priority = 1 }, { - .x = -16, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 52, + .x = -16, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 52, .priority = 1 }, { - .x = 16, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 56, + .x = 16, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 56, .priority = 1 } }; static const struct Subsprite sOamTable_96x40_2[] = { { - .x = -48, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .x = -48, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 2 }, { - .x = -16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, + .x = -16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, .priority = 2 }, { - .x = 16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 8, + .x = 16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, .priority = 2 }, { - .x = -48, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 12, + .x = -48, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, .priority = 2 }, { - .x = -16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 16, + .x = -16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 16, .priority = 2 }, { - .x = 16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 20, + .x = 16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 20, .priority = 2 }, { - .x = -48, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 24, + .x = -48, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, .priority = 2 }, { - .x = -16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 28, + .x = -16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 28, .priority = 2 }, { - .x = 16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 32, + .x = 16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 32, .priority = 2 }, { - .x = -48, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 36, + .x = -48, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 36, .priority = 2 }, { - .x = -16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 40, + .x = -16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 40, .priority = 2 }, { - .x = 16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 44, + .x = 16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 44, .priority = 2 }, { - .x = -48, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 48, + .x = -48, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 48, .priority = 2 }, { - .x = -16, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 52, + .x = -16, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 52, .priority = 2 }, { - .x = 16, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 56, + .x = 16, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 56, .priority = 2 } }; static const struct Subsprite sOamTable_96x40_3[] = { { - .x = -48, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .x = -48, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 1 }, { - .x = -16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, + .x = -16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, .priority = 1 }, { - .x = 16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 8, + .x = 16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, .priority = 1 }, { - .x = -48, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 12, + .x = -48, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, .priority = 1 }, { - .x = -16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 16, + .x = -16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 16, .priority = 1 }, { - .x = 16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 20, + .x = 16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 20, .priority = 1 }, { - .x = -48, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 24, + .x = -48, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, .priority = 2 }, { - .x = -16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 28, + .x = -16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 28, .priority = 2 }, { - .x = 16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 32, + .x = 16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 32, .priority = 2 }, { - .x = -48, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 36, + .x = -48, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 36, .priority = 2 }, { - .x = -16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 40, + .x = -16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 40, .priority = 2 }, { - .x = 16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 44, + .x = 16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 44, .priority = 2 }, { - .x = -48, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 48, + .x = -48, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 48, .priority = 2 }, { - .x = -16, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 52, + .x = -16, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 52, .priority = 2 }, { - .x = 16, - .y = 12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 56, + .x = 16, + .y = 12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 56, .priority = 2 } }; // Used by SS Tidal static const struct SubspriteTable sOamTables_96x40[] = { - {15, sOamTable_96x40_0}, - {15, sOamTable_96x40_0}, - {15, sOamTable_96x40_1}, - {15, sOamTable_96x40_2}, - {15, sOamTable_96x40_3}, - {15, sOamTable_96x40_3} + {ARRAY_COUNT(sOamTable_96x40_0), sOamTable_96x40_0}, + {ARRAY_COUNT(sOamTable_96x40_0), sOamTable_96x40_0}, + {ARRAY_COUNT(sOamTable_96x40_1), sOamTable_96x40_1}, + {ARRAY_COUNT(sOamTable_96x40_2), sOamTable_96x40_2}, + {ARRAY_COUNT(sOamTable_96x40_3), sOamTable_96x40_3}, + {ARRAY_COUNT(sOamTable_96x40_3), sOamTable_96x40_3} }; static const struct Subsprite sOamTable_88x32_0[] = { { - .x = -48, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .x = -48, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 2 }, { - .x = -16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, + .x = -16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, .priority = 2 }, { - .x = 16, - .y = -20, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 8, + .x = 16, + .y = -20, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 8, .priority = 2 }, { - .x = 32, - .y = -20, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 10, + .x = 32, + .y = -20, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 10, .priority = 2 }, { - .x = -48, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 11, + .x = -48, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 11, .priority = 2 }, { - .x = -16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 15, + .x = -16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 15, .priority = 2 }, { - .x = 16, - .y = -12, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 19, + .x = 16, + .y = -12, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 19, .priority = 2 }, { - .x = 32, - .y = -12, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 21, + .x = 32, + .y = -12, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 21, .priority = 2 }, { - .x = -48, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 22, + .x = -48, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 22, .priority = 2 }, { - .x = -16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 26, + .x = -16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 26, .priority = 2 }, { - .x = 16, - .y = -4, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 30, + .x = 16, + .y = -4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 30, .priority = 2 }, { - .x = 32, - .y = -4, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 32, + .x = 32, + .y = -4, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 32, .priority = 2 }, { - .x = -48, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 33, + .x = -48, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 33, .priority = 2 }, { - .x = -16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 37, + .x = -16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 37, .priority = 2 }, { - .x = 16, - .y = 4, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 41, + .x = 16, + .y = 4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 41, .priority = 2 }, { - .x = 32, - .y = 4, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 43, + .x = 32, + .y = 4, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 43, .priority = 2 } }; static const struct Subsprite sOamTable_88x32_1[] = { { - .x = -48, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .x = -48, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 1 }, { - .x = -16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, + .x = -16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, .priority = 1 }, { - .x = 16, - .y = -20, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 8, + .x = 16, + .y = -20, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 8, .priority = 1 }, { - .x = 32, - .y = -20, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 10, + .x = 32, + .y = -20, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 10, .priority = 1 }, { - .x = -48, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 11, + .x = -48, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 11, .priority = 1 }, { - .x = -16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 15, + .x = -16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 15, .priority = 1 }, { - .x = 16, - .y = -12, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 19, + .x = 16, + .y = -12, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 19, .priority = 1 }, { - .x = 32, - .y = -12, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 21, + .x = 32, + .y = -12, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 21, .priority = 1 }, { - .x = -48, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 22, + .x = -48, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 22, .priority = 1 }, { - .x = -16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 26, + .x = -16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 26, .priority = 1 }, { - .x = 16, - .y = -4, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 30, + .x = 16, + .y = -4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 30, .priority = 1 }, { - .x = 32, - .y = -4, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 32, + .x = 32, + .y = -4, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 32, .priority = 1 }, { - .x = -48, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 33, + .x = -48, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 33, .priority = 1 }, { - .x = -16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 37, + .x = -16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 37, .priority = 1 }, { - .x = 16, - .y = 4, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 41, + .x = 16, + .y = 4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 41, .priority = 1 }, { - .x = 32, - .y = 4, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 43, + .x = 32, + .y = 4, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 43, .priority = 1 } }; static const struct Subsprite sOamTable_88x32_2[] = { { - .x = -48, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .x = -48, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 2 }, { - .x = -16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, + .x = -16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, .priority = 2 }, { - .x = 16, - .y = -20, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 8, + .x = 16, + .y = -20, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 8, .priority = 2 }, { - .x = 32, - .y = -20, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 10, + .x = 32, + .y = -20, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 10, .priority = 2 }, { - .x = -48, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 11, + .x = -48, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 11, .priority = 2 }, { - .x = -16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 15, + .x = -16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 15, .priority = 2 }, { - .x = 16, - .y = -12, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 19, + .x = 16, + .y = -12, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 19, .priority = 2 }, { - .x = 32, - .y = -12, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 21, + .x = 32, + .y = -12, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 21, .priority = 2 }, { - .x = -48, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 22, + .x = -48, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 22, .priority = 2 }, { - .x = -16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 26, + .x = -16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 26, .priority = 2 }, { - .x = 16, - .y = -4, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 30, + .x = 16, + .y = -4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 30, .priority = 2 }, { - .x = 32, - .y = -4, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 32, + .x = 32, + .y = -4, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 32, .priority = 2 }, { - .x = -48, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 33, + .x = -48, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 33, .priority = 2 }, { - .x = -16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 37, + .x = -16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 37, .priority = 2 }, { - .x = 16, - .y = 4, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 41, + .x = 16, + .y = 4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 41, .priority = 2 }, { - .x = 32, - .y = 4, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 43, + .x = 32, + .y = 4, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 43, .priority = 2 } }; static const struct Subsprite sOamTable_88x32_3[] = { { - .x = -48, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .x = -48, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 1 }, { - .x = -16, - .y = -20, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 4, + .x = -16, + .y = -20, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, .priority = 1 }, { - .x = 16, - .y = -20, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 8, + .x = 16, + .y = -20, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 8, .priority = 1 }, { - .x = 32, - .y = -20, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 10, + .x = 32, + .y = -20, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 10, .priority = 1 }, { - .x = -48, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 11, + .x = -48, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 11, .priority = 1 }, { - .x = -16, - .y = -12, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 15, + .x = -16, + .y = -12, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 15, .priority = 1 }, { - .x = 16, - .y = -12, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 19, + .x = 16, + .y = -12, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 19, .priority = 1 }, { - .x = 32, - .y = -12, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 21, + .x = 32, + .y = -12, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 21, .priority = 1 }, { - .x = -48, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 22, + .x = -48, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 22, .priority = 2 }, { - .x = -16, - .y = -4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 26, + .x = -16, + .y = -4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 26, .priority = 2 }, { - .x = 16, - .y = -4, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 30, + .x = 16, + .y = -4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 30, .priority = 2 }, { - .x = 32, - .y = -4, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 32, + .x = 32, + .y = -4, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 32, .priority = 2 }, { - .x = -48, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 33, + .x = -48, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 33, .priority = 2 }, { - .x = -16, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 37, + .x = -16, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 37, .priority = 2 }, { - .x = 16, - .y = 4, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 41, + .x = 16, + .y = 4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 41, .priority = 2 }, { - .x = 32, - .y = 4, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 43, + .x = 32, + .y = 4, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 43, .priority = 2 } }; // Used by Submarine Shadow static const struct SubspriteTable sOamTables_88x32[] = { - {16, sOamTable_88x32_0}, - {16, sOamTable_88x32_0}, - {16, sOamTable_88x32_1}, - {16, sOamTable_88x32_2}, - {16, sOamTable_88x32_3}, - {16, sOamTable_88x32_3} + {ARRAY_COUNT(sOamTable_88x32_0), sOamTable_88x32_0}, + {ARRAY_COUNT(sOamTable_88x32_0), sOamTable_88x32_0}, + {ARRAY_COUNT(sOamTable_88x32_1), sOamTable_88x32_1}, + {ARRAY_COUNT(sOamTable_88x32_2), sOamTable_88x32_2}, + {ARRAY_COUNT(sOamTable_88x32_3), sOamTable_88x32_3}, + {ARRAY_COUNT(sOamTable_88x32_3), sOamTable_88x32_3} }; diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 3f19e80f37..9411ec3bb7 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -29,17 +29,11 @@ static const struct BgTemplate sPartyMenuBgTemplates[] = }, }; -enum -{ - PARTY_BOX_LEFT_COLUMN, - PARTY_BOX_RIGHT_COLUMN -}; - static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] = { - [PARTY_BOX_LEFT_COLUMN] = + [PARTY_BOX_LEFT_COLUMN] = { - BlitBitmapToPartyWindow_LeftColumn, + BlitBitmapToPartyWindow_LeftColumn, { //The below are the x, y, width, and height for each of the following info 24, 11, 40, 13, // Nickname @@ -48,12 +42,12 @@ static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] = 38, 37, 24, 8, // HP 53, 37, 24, 8, // Max HP 24, 35, 48, 3 // HP bar - }, + }, 12, 34, 64, 16 // Description text (e.g. NO USE) }, - [PARTY_BOX_RIGHT_COLUMN] = + [PARTY_BOX_RIGHT_COLUMN] = { - BlitBitmapToPartyWindow_RightColumn, + BlitBitmapToPartyWindow_RightColumn, { // See above comment 22, 3, 40, 13, // Nickname @@ -62,7 +56,7 @@ static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] = 102, 12, 24, 8, // HP 117, 12, 24, 8, // Max HP 88, 10, 48, 3 // HP bar - }, + }, 77, 4, 64, 16 // Description text }, }; @@ -73,7 +67,7 @@ static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] = // Pokemon icon (x, y), held item (x, y), status condition (x, y), menu pokeball (x, y) static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] = { - [PARTY_LAYOUT_SINGLE] = + [PARTY_LAYOUT_SINGLE] = { { 16, 40, 20, 50, 50, 52, 16, 34}, {104, 18, 108, 28, 136, 27, 102, 25}, @@ -82,7 +76,7 @@ static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] = {104, 90, 108, 100, 136, 99, 102, 97}, {104, 114, 108, 124, 136, 123, 102, 121}, }, - [PARTY_LAYOUT_DOUBLE] = + [PARTY_LAYOUT_DOUBLE] = { {16, 24, 20, 34, 50, 36, 16, 18}, {16, 80, 20, 90, 50, 92, 16, 74}, @@ -91,7 +85,7 @@ static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] = {104, 82, 108, 92, 136, 91, 102, 89}, {104, 114, 108, 124, 136, 123, 102, 121}, }, - [PARTY_LAYOUT_MULTI] = + [PARTY_LAYOUT_MULTI] = { {16, 24, 20, 34, 50, 36, 16, 18}, {16, 80, 20, 90, 50, 92, 16, 74}, @@ -100,7 +94,7 @@ static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] = {104, 82, 106, 92, 136, 91, 102, 89}, {104, 106, 106, 116, 136, 115, 102, 113}, }, - [PARTY_LAYOUT_MULTI_SHOWCASE] = + [PARTY_LAYOUT_MULTI_SHOWCASE] = { {16, 32, 20, 42, 50, 44, 16, 26}, {104, 34, 106, 44, 136, 43, 102, 41}, @@ -112,8 +106,8 @@ static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] = }; // Used only when both Cancel and Confirm are present -static const u32 sConfirmButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_confirm_button.bin"); -static const u32 sCancelButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_cancel_button.bin"); +static const u32 sConfirmButton_Tilemap[] = INCBIN_U32("graphics/party_menu/confirm_button.bin"); +static const u32 sCancelButton_Tilemap[] = INCBIN_U32("graphics/party_menu/cancel_button.bin"); // Text colors for BG, FG, and Shadow in that order static const u8 sFontColorTable[][3] = @@ -565,34 +559,14 @@ static const struct WindowTemplate sUnusedWindowTemplate2 = .baseBlock = 0x39D, }; -// Tile nums -static const u8 sMainSlotTileNums[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 40, 59, 60, 58, 58, 58, 58, 58, 58, 61, - 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, - 46, 47, 47, 47, 47, 47, 47, 47, 47, 48}; - -static const u8 sMainSlotTileNums_Egg[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, - 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, - 46, 47, 47, 47, 47, 47, 47, 47, 47, 48}; - -static const u8 sOtherSlotsTileNums[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, - 49, 33, 33, 33, 33, 33, 33, 33, 33, 52, 53, 51, 51, 51, 51, 51, 51, 54, - 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57}; - -static const u8 sOtherSlotsTileNums_Egg[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, - 49, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 50, - 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57}; - -static const u8 sEmptySlotTileNums[] = {21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, - 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39}; +// Plain tilemaps for party menu slots. +// The versions with no HP bar are used by eggs, and in certain displays like registering at a battle facility. +// There is no empty version of the main slot because it shouldn't ever be empty. +static const u8 sSlotTilemap_Main[] = INCBIN_U8("graphics/party_menu/slot_main.bin"); +static const u8 sSlotTilemap_MainNoHP[] = INCBIN_U8("graphics/party_menu/slot_main_no_hp.bin"); +static const u8 sSlotTilemap_Wide[] = INCBIN_U8("graphics/party_menu/slot_wide.bin"); +static const u8 sSlotTilemap_WideNoHP[] = INCBIN_U8("graphics/party_menu/slot_wide_no_hp.bin"); +static const u8 sSlotTilemap_WideEmpty[] = INCBIN_U8("graphics/party_menu/slot_wide_empty.bin"); // Palette offsets static const u8 sGenderPalOffsets[] = {11, 12}; @@ -677,51 +651,6 @@ static const u16 sUnusedData[] = 0x0121, 0x013b, 0x000f, 0x0013, 0x0039, 0x0046, 0x0094, 0x00f9, 0x007f, 0x0123, }; -enum -{ - MENU_SUMMARY, - MENU_SWITCH, - MENU_CANCEL1, - MENU_ITEM, - MENU_GIVE, - MENU_TAKE_ITEM, - MENU_MAIL, - MENU_TAKE_MAIL, - MENU_READ, - MENU_CANCEL2, - MENU_SHIFT, - MENU_SEND_OUT, - MENU_ENTER, - MENU_NO_ENTRY, - MENU_STORE, - MENU_REGISTER, - MENU_TRADE1, - MENU_TRADE2, - MENU_TOSS, - MENU_FIELD_MOVES, -}; - -enum -{ - FIELD_MOVE_CUT, - FIELD_MOVE_FLASH, - FIELD_MOVE_ROCK_SMASH, - FIELD_MOVE_STRENGTH, - FIELD_MOVE_SURF, - FIELD_MOVE_FLY, - FIELD_MOVE_DIVE, - FIELD_MOVE_WATERFALL, - FIELD_MOVE_TELEPORT, - FIELD_MOVE_DIG, - FIELD_MOVE_SECRET_POWER, - FIELD_MOVE_MILK_DRINK, - FIELD_MOVE_SOFT_BOILED, - FIELD_MOVE_SWEET_SCENT, -}; - -// What a weird choice of table termination; -#define FIELD_MOVE_TERMINATOR MOVE_SWORDS_DANCE - struct { const u8 *text; @@ -777,25 +706,6 @@ static const u8 sPartyMenuAction_TradeSummaryCancel1[] = {MENU_TRADE1, MENU_SUMM static const u8 sPartyMenuAction_TradeSummaryCancel2[] = {MENU_TRADE2, MENU_SUMMARY, MENU_CANCEL1}; static const u8 sPartyMenuAction_TakeItemTossCancel[] = {MENU_TAKE_ITEM, MENU_TOSS, MENU_CANCEL1}; -// IDs for the action lists that appear when a party mon is selected -enum -{ - ACTIONS_NONE, - ACTIONS_SWITCH, - ACTIONS_SHIFT, - ACTIONS_SEND_OUT, - ACTIONS_ENTER, - ACTIONS_NO_ENTRY, - ACTIONS_STORE, - ACTIONS_SUMMARY_ONLY, - ACTIONS_ITEM, - ACTIONS_MAIL, - ACTIONS_REGISTER, - ACTIONS_TRADE, - ACTIONS_SPIN_TRADE, - ACTIONS_TAKEITEM_TOSS -}; - static const u8 *const sPartyMenuActions[] = { [ACTIONS_NONE] = NULL, @@ -832,17 +742,32 @@ static const u8 sPartyMenuActionCounts[] = [ACTIONS_TAKEITEM_TOSS] = ARRAY_COUNT(sPartyMenuAction_TakeItemTossCancel) }; -static const u16 sFieldMoves[] = +static const u16 sFieldMoves[FIELD_MOVES_COUNT + 1] = { - MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH, MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, MOVE_TELEPORT, - MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, FIELD_MOVE_TERMINATOR + [FIELD_MOVE_CUT] = MOVE_CUT, + [FIELD_MOVE_FLASH] = MOVE_FLASH, + [FIELD_MOVE_ROCK_SMASH] = MOVE_ROCK_SMASH, + [FIELD_MOVE_STRENGTH] = MOVE_STRENGTH, + [FIELD_MOVE_SURF] = MOVE_SURF, + [FIELD_MOVE_FLY] = MOVE_FLY, + [FIELD_MOVE_DIVE] = MOVE_DIVE, + [FIELD_MOVE_WATERFALL] = MOVE_WATERFALL, + [FIELD_MOVE_TELEPORT] = MOVE_TELEPORT, + [FIELD_MOVE_DIG] = MOVE_DIG, + [FIELD_MOVE_SECRET_POWER] = MOVE_SECRET_POWER, + [FIELD_MOVE_MILK_DRINK] = MOVE_MILK_DRINK, + [FIELD_MOVE_SOFT_BOILED] = MOVE_SOFT_BOILED, + [FIELD_MOVE_SWEET_SCENT] = MOVE_SWEET_SCENT, + // NOTE: This value is used as the terminal value for the table. There's no reason to do this, as the size of the table is known. + // Whichever move shares this value (MOVE_SWORDS_DANCE by default) if present will be treated as the end of the array rather than a field move. + [FIELD_MOVES_COUNT] = FIELD_MOVES_COUNT }; struct { bool8 (*fieldMoveFunc)(void); u8 msgId; -} static const sFieldMoveCursorCallbacks[] = +} static const sFieldMoveCursorCallbacks[FIELD_MOVES_COUNT] = { [FIELD_MOVE_CUT] = {SetUpFieldMove_Cut, PARTY_MSG_NOTHING_TO_CUT}, [FIELD_MOVE_FLASH] = {SetUpFieldMove_Flash, PARTY_MSG_CANT_USE_HERE}, @@ -873,15 +798,15 @@ static const u8 *const sUnionRoomTradeMessages[] = [UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2 - 1] = gText_CantTradeWithTrainer, }; -static const u32 sHeldItemGfx[] = INCBIN_U32("graphics/interface/hold_icons.4bpp"); -static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.gbapal"); +static const u32 sHeldItemGfx[] = INCBIN_U32("graphics/party_menu/hold_icons.4bpp"); +static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/party_menu/hold_icons.gbapal"); static const struct OamData sOamData_HeldItem = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -913,23 +838,23 @@ static const union AnimCmd *const sSpriteAnimTable_HeldItem[] = static const struct SpriteSheet sSpriteSheet_HeldItem = { - sHeldItemGfx, sizeof(sHeldItemGfx), 0xd750 + .data = sHeldItemGfx, .size = sizeof(sHeldItemGfx), .tag = TAG_HELD_ITEM }; static const struct SpritePalette sSpritePalette_HeldItem = { - sHeldItemPalette, 0xd750 + .data = sHeldItemPalette, .tag = TAG_HELD_ITEM }; static const struct SpriteTemplate sSpriteTemplate_HeldItem = { - 0xd750, - 0xd750, - &sOamData_HeldItem, - sSpriteAnimTable_HeldItem, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy + .tileTag = TAG_HELD_ITEM, + .paletteTag = TAG_HELD_ITEM, + .oam = &sOamData_HeldItem, + .anims = sSpriteAnimTable_HeldItem, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy }; static const struct OamData sOamData_MenuPokeball = @@ -937,7 +862,7 @@ static const struct OamData sOamData_MenuPokeball = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -969,19 +894,19 @@ static const union AnimCmd *const sSpriteAnimTable_MenuPokeball[] = static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeball = { - gPartyMenuPokeball_Gfx, 0x400, 0x04b0 + gPartyMenuPokeball_Gfx, 0x400, TAG_POKEBALL }; static const struct CompressedSpritePalette sSpritePalette_MenuPokeball = { - gPartyMenuPokeball_Pal, 0x04b0 + gPartyMenuPokeball_Pal, TAG_POKEBALL }; // Used for the pokeball sprite on each party slot / Cancel button static const struct SpriteTemplate sSpriteTemplate_MenuPokeball = { - .tileTag = 0x04b0, - .paletteTag = 0x04b0, + .tileTag = TAG_POKEBALL, + .paletteTag = TAG_POKEBALL, .oam = &sOamData_MenuPokeball, .anims = sSpriteAnimTable_MenuPokeball, .images = NULL, @@ -994,7 +919,7 @@ static const struct OamData sOamData_MenuPokeballSmall = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -1055,14 +980,14 @@ static const union AnimCmd *const sSpriteAnimTable_MenuPokeballSmall[] = static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeballSmall = { - gPartyMenuPokeballSmall_Gfx, 0x0300, 0x04b1 + gPartyMenuPokeballSmall_Gfx, 0x0300, TAG_POKEBALL_SMALL }; // Used for the pokeball sprite next to Cancel and Confirm when both are present, otherwise sSpriteTemplate_MenuPokeball is used static const struct SpriteTemplate sSpriteTemplate_MenuPokeballSmall = { - .tileTag = 1201, - .paletteTag = 1200, + .tileTag = TAG_POKEBALL_SMALL, + .paletteTag = TAG_POKEBALL, .oam = &sOamData_MenuPokeballSmall, .anims = sSpriteAnimTable_MenuPokeballSmall, .images = NULL, @@ -1075,7 +1000,7 @@ static const struct OamData sOamData_StatusCondition = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), .x = 0, @@ -1149,18 +1074,18 @@ static const union AnimCmd *const sSpriteTemplate_StatusCondition[] = static const struct CompressedSpriteSheet sSpriteSheet_StatusIcons = { - gStatusGfx_Icons, 0x400, 1202 + gStatusGfx_Icons, 0x400, TAG_STATUS_ICONS }; static const struct CompressedSpritePalette sSpritePalette_StatusIcons = { - gStatusPal_Icons, 1202 + gStatusPal_Icons, TAG_STATUS_ICONS }; static const struct SpriteTemplate sSpriteTemplate_StatusIcons = { - .tileTag = 1202, - .paletteTag = 1202, + .tileTag = TAG_STATUS_ICONS, + .paletteTag = TAG_STATUS_ICONS, .oam = &sOamData_StatusCondition, .anims = sSpriteTemplate_StatusCondition, .images = NULL, @@ -1230,6 +1155,56 @@ static const u16 sTMHMMoves[] = [ITEM_TM48 - ITEM_TM01] = MOVE_SKILL_SWAP, [ITEM_TM49 - ITEM_TM01] = MOVE_SNATCH, [ITEM_TM50 - ITEM_TM01] = MOVE_OVERHEAT, + [ITEM_TM51 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM52 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM53 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM54 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM55 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM56 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM57 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM58 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM59 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM60 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM61 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM62 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM63 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM64 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM65 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM66 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM67 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM68 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM69 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM70 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM71 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM72 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM73 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM74 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM75 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM76 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM77 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM78 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM79 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM80 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM81 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM82 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM83 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM84 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM85 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM86 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM87 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM88 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM89 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM90 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM91 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM92 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM93 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM94 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM95 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM96 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM97 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM98 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM99 - ITEM_TM01] = MOVE_NONE, // Todo + [ITEM_TM100 - ITEM_TM01] = MOVE_NONE, // Todo [ITEM_HM01 - ITEM_TM01] = MOVE_CUT, [ITEM_HM02 - ITEM_TM01] = MOVE_FLY, [ITEM_HM03 - ITEM_TM01] = MOVE_SURF, diff --git a/src/data/pokedex_area_glow.h b/src/data/pokedex_area_glow.h new file mode 100644 index 0000000000..ff24d8d6c0 --- /dev/null +++ b/src/data/pokedex_area_glow.h @@ -0,0 +1,315 @@ +// These tile numbers correspond to the 8x8 tiles in graphics/pokedex/area_glow.png +// Left/Right/Top/Bottom are shortened to L/R/T/B +enum { + GLOW_TILE_EMPTY, + GLOW_TILE_EDGE_R, + GLOW_TILE_EDGE_L, + GLOW_TILE_EDGE_L_R, + GLOW_TILE_EDGE_B, + GLOW_TILE_EDGE_B_R, + GLOW_TILE_EDGE_B_L, + GLOW_TILE_EDGE_B_L_R, + GLOW_TILE_EDGE_T, + GLOW_TILE_EDGE_T_R, + GLOW_TILE_EDGE_T_L, + GLOW_TILE_EDGE_T_L_R, + GLOW_TILE_EDGE_T_B, + GLOW_TILE_EDGE_T_B_R, + GLOW_TILE_EDGE_T_B_L, + GLOW_TILE_EDGE_T_B_L_R, // This tile has a misplaced pixel in the top-left corner + GLOW_TILE_FULL, + GLOW_TILE_CORNER_TL, + GLOW_TILE_CORNER_BL, + GLOW_TILE_CORNER_BL_TL, + GLOW_TILE_CORNER_TR, + GLOW_TILE_CORNER_TR_TL, + GLOW_TILE_CORNER_TR_BL, + GLOW_TILE_CORNER_TR_BL_TL, + GLOW_TILE_CORNER_BR, + GLOW_TILE_CORNER_BR_TL, + GLOW_TILE_CORNER_BR_BL, + GLOW_TILE_CORNER_BR_BL_TL, + GLOW_TILE_CORNER_BR_TR, + GLOW_TILE_CORNER_BR_TR_TL, + GLOW_TILE_CORNER_BR_TR_BL, + GLOW_TILE_CORNER_BR_TR_BL_TL, + GLOW_TILE_EDGE_R_CORNER_TL, + GLOW_TILE_EDGE_R_CORNER_BL, + GLOW_TILE_EDGE_R_CORNER_BL_TL, + GLOW_TILE_EDGE_L_CORNER_TR, + GLOW_TILE_EDGE_L_CORNER_BR, + GLOW_TILE_EDGE_L_CORNER_BR_TR, + GLOW_TILE_EDGE_B_CORNER_TR, + GLOW_TILE_EDGE_B_CORNER_TL, + GLOW_TILE_EDGE_B_CORNER_TL_TR, + GLOW_TILE_EDGE_T_CORNER_BR, + GLOW_TILE_EDGE_T_CORNER_BL, + GLOW_TILE_EDGE_T_CORNER_BL_BR, + GLOW_TILE_EDGE_B_L_CORNER_TR, + GLOW_TILE_EDGE_B_R_CORNER_TL, + GLOW_TILE_EDGE_T_R_CORNER_BL, + GLOW_TILE_EDGE_T_L_CORNER_BR +}; + +// This array converts a set of glow position flags to one of the above tile values. +// Only some parts of this array are actually used, because corner flags that overlap +// with edge flags are cancelled out before lookup. For example, GLOW_CORNER_TL | GLOW_EDGE_L +// will never be read, and has the same value as GLOW_EDGE_L. +static const u8 sAreaGlowTilemapMapping[] = { + [0] = GLOW_TILE_EMPTY, + [GLOW_EDGE_R] = GLOW_TILE_EDGE_R, + [GLOW_EDGE_L] = GLOW_TILE_EDGE_L, + [GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_EDGE_B] = GLOW_TILE_EDGE_B, + [GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R, + [GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L, + [GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_EDGE_T] = GLOW_TILE_EDGE_T, + [GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R, + [GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L, + [GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_TL] = GLOW_TILE_CORNER_TL, + [GLOW_CORNER_TL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_TL, + [GLOW_CORNER_TL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L, + [GLOW_CORNER_TL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_TL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TL, + [GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R_CORNER_TL, + [GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L, + [GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_TL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T, + [GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R, + [GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L, + [GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_BL] = GLOW_TILE_CORNER_BL, + [GLOW_CORNER_BL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_BL, + [GLOW_CORNER_BL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L, + [GLOW_CORNER_BL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_BL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B, + [GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R, + [GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L, + [GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_BL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BL, + [GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R_CORNER_BL, + [GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L, + [GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_BL | GLOW_CORNER_TL] = GLOW_TILE_CORNER_BL_TL, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_BL_TL, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TL, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R_CORNER_TL, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BL, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R_CORNER_BL, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_TR] = GLOW_TILE_CORNER_TR, + [GLOW_CORNER_TR | GLOW_EDGE_R] = GLOW_TILE_EDGE_R, + [GLOW_CORNER_TR | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_TR, + [GLOW_CORNER_TR | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_TR | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TR, + [GLOW_CORNER_TR | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R, + [GLOW_CORNER_TR | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L_CORNER_TR, + [GLOW_CORNER_TR | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_TR | GLOW_EDGE_T] = GLOW_TILE_EDGE_T, + [GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R, + [GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L, + [GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_TL] = GLOW_TILE_CORNER_TR_TL, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_TL, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_TR, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TL_TR, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R_CORNER_TL, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L_CORNER_TR, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL] = GLOW_TILE_CORNER_TR_BL, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_BL, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_TR, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TR, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L_CORNER_TR, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BL, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R_CORNER_BL, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL] = GLOW_TILE_CORNER_TR_BL_TL, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_BL_TL, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_TR, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TL_TR, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R_CORNER_TL, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L_CORNER_TR, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BL, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R_CORNER_BL, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_BR] = GLOW_TILE_CORNER_BR, + [GLOW_CORNER_BR | GLOW_EDGE_R] = GLOW_TILE_EDGE_R, + [GLOW_CORNER_BR | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_BR | GLOW_EDGE_B] = GLOW_TILE_EDGE_B, + [GLOW_CORNER_BR | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R, + [GLOW_CORNER_BR | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L, + [GLOW_CORNER_BR | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_BR | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BR, + [GLOW_CORNER_BR | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R, + [GLOW_CORNER_BR | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_BR | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_BR | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_BR | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_BR | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TL] = GLOW_TILE_CORNER_BR_TL, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_TL, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TL, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R_CORNER_TL, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_BR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL] = GLOW_TILE_CORNER_BR_BL, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_BL, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BL_BR, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R_CORNER_BL, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL] = GLOW_TILE_CORNER_BR_BL_TL, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_BL_TL, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TL, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R_CORNER_TL, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BL_BR, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R_CORNER_BL, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_BR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR] = GLOW_TILE_CORNER_BR_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_R] = GLOW_TILE_EDGE_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_BR_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L_CORNER_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL] = GLOW_TILE_CORNER_BR_TR_TL, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_TL, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_BR_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TL_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R_CORNER_TL, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L_CORNER_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL] = GLOW_TILE_CORNER_BR_TR_BL, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_BL, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_BR_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L_CORNER_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BL_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R_CORNER_BL, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL] = GLOW_TILE_CORNER_BR_TR_BL_TL, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_R] = GLOW_TILE_EDGE_R_CORNER_BL_TL, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_L] = GLOW_TILE_EDGE_L_CORNER_BR_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B] = GLOW_TILE_EDGE_B_CORNER_TL_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_R_CORNER_TL, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_B_L_CORNER_TR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_B_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T] = GLOW_TILE_EDGE_T_CORNER_BL_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_R_CORNER_BL, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_L_CORNER_BR, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_L_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B] = GLOW_TILE_EDGE_T_B, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_R, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L] = GLOW_TILE_EDGE_T_B_L, + [GLOW_CORNER_BR | GLOW_CORNER_TR | GLOW_CORNER_BL | GLOW_CORNER_TL | GLOW_EDGE_T | GLOW_EDGE_B | GLOW_EDGE_L | GLOW_EDGE_R] = GLOW_TILE_EDGE_T_B_L_R, +}; diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h index 15e406ae21..41b5143cf1 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/base_stats.h @@ -2,6 +2,913 @@ // 255 (MON_GENDERLESS) is reserved for genderless Pokémon. #define PERCENT_FEMALE(percent) min(254, ((percent * 255) / 100)) +// Macros to allow editing every form at once +#define FLIP 0 +#define NO_FLIP 1 + +#if P_UPDATED_STATS >= GEN_6 + #define PIKACHU_BASE_DEFENSES\ + .baseDefense = 40, \ + .baseSpDefense = 50 +#else + #define PIKACHU_BASE_DEFENSES\ + .baseDefense = 30, \ + .baseSpDefense = 40 +#endif + +#define PIKACHU_BASE_STATS(gender, flip) \ + { \ + .baseHP = 35, \ + .baseAttack = 55, \ + .baseSpeed = 90, \ + .baseSpAttack = 50, \ + PIKACHU_BASE_DEFENSES, \ + .type1 = TYPE_ELECTRIC, \ + .type2 = TYPE_ELECTRIC, \ + .catchRate = 190, \ + .expYield = 112, \ + .evYield_Speed = 2, \ + .itemRare = ITEM_LIGHT_BALL, \ + .genderRatio = gender, \ + .eggCycles = 10, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FIELD, \ + .eggGroup2 = EGG_GROUP_FAIRY, \ + .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD},\ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = flip, \ + } + +#define COSPLAY_PIKACHU_BASE_STATS(flip) PIKACHU_BASE_STATS(MON_FEMALE, flip) +#define CAP_PIKACHU_BASE_STATS(flip) PIKACHU_BASE_STATS(MON_MALE, flip) + +#define PICHU_BASE_STATS(flip) \ + { \ + .baseHP = 20, \ + .baseAttack = 40, \ + .baseDefense = 15, \ + .baseSpeed = 60, \ + .baseSpAttack = 35, \ + .baseSpDefense = 35, \ + .type1 = TYPE_ELECTRIC, \ + .type2 = TYPE_ELECTRIC, \ + .catchRate = 190, \ + .expYield = 41, \ + .evYield_Speed = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 10, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ + .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD},\ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = flip, \ + } + +#define UNOWN_BASE_STATS(flip) \ + { \ + .baseHP = 48, \ + .baseAttack = 72, \ + .baseDefense = 48, \ + .baseSpeed = 48, \ + .baseSpAttack = 72, \ + .baseSpDefense = 48, \ + .type1 = TYPE_PSYCHIC, \ + .type2 = TYPE_PSYCHIC, \ + .catchRate = 225, \ + .expYield = 118, \ + .evYield_Attack = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 40, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ + .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .abilities = {ABILITY_LEVITATE, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = flip, \ + } + +#define CASTFORM_BASE_STATS(type, color) \ + { \ + .baseHP = 70, \ + .baseAttack = 70, \ + .baseDefense = 70, \ + .baseSpeed = 70, \ + .baseSpAttack = 70, \ + .baseSpDefense = 70, \ + .type1 = type, \ + .type2 = type, \ + .catchRate = 45, \ + .expYield = 147, \ + .evYield_HP = 1, \ + .itemCommon = ITEM_MYSTIC_WATER, \ + .itemRare = ITEM_MYSTIC_WATER, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FAIRY, \ + .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .abilities = {ABILITY_FORECAST, ABILITY_NONE},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } + +#define BURMY_BASE_STATS(color) \ + { \ + .baseHP = 40, \ + .baseAttack = 29, \ + .baseDefense = 45, \ + .baseSpeed = 36, \ + .baseSpAttack = 29, \ + .baseSpDefense = 45, \ + .type1 = TYPE_BUG, \ + .type2 = TYPE_BUG, \ + .catchRate = 120, \ + .expYield = 45, \ + .evYield_SpDefense = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_BUG, \ + .eggGroup2 = EGG_GROUP_BUG, \ + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_OVERCOAT},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } + +#define CHERRIM_BASE_STATS(color) \ + { \ + .baseHP = 70, \ + .baseAttack = 60, \ + .baseDefense = 70, \ + .baseSpeed = 85, \ + .baseSpAttack = 87, \ + .baseSpDefense = 78, \ + .type1 = TYPE_GRASS, \ + .type2 = TYPE_GRASS, \ + .catchRate = 75, \ + .expYield = 158, \ + .evYield_SpAttack = 2, \ + .itemRare = ITEM_MIRACLE_SEED, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FAIRY, \ + .eggGroup2 = EGG_GROUP_GRASS, \ + .abilities = {ABILITY_FLOWER_GIFT, ABILITY_NONE},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } + +#define SHELLOS_BASE_STATS(color) \ + { \ + .baseHP = 76, \ + .baseAttack = 48, \ + .baseDefense = 48, \ + .baseSpeed = 34, \ + .baseSpAttack = 57, \ + .baseSpDefense = 62, \ + .type1 = TYPE_WATER, \ + .type2 = TYPE_WATER, \ + .catchRate = 190, \ + .expYield = 65, \ + .evYield_HP = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_WATER_1, \ + .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } + +#define GASTRODON_BASE_STATS(color) \ + { \ + .baseHP = 111, \ + .baseAttack = 83, \ + .baseDefense = 68, \ + .baseSpeed = 39, \ + .baseSpAttack = 92, \ + .baseSpDefense = 82, \ + .type1 = TYPE_WATER, \ + .type2 = TYPE_GROUND, \ + .catchRate = 75, \ + .expYield = 166, \ + .evYield_HP = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_WATER_1, \ + .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } + +#define ROTOM_FORM_BASE_STATS(type, flip) \ + { \ + .baseHP = 50, \ + .baseAttack = 65, \ + .baseDefense = 107, \ + .baseSpeed = 86, \ + .baseSpAttack = 105, \ + .baseSpDefense = 107, \ + .type1 = TYPE_ELECTRIC, \ + .type2 = type, \ + .catchRate = 45, \ + .expYield = 182, \ + .evYield_Speed = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_AMORPHOUS, \ + .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .abilities = {ABILITY_LEVITATE, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = flip, \ + } + +#define ARCEUS_BASE_STATS(type) \ + { \ + .baseHP = 120, \ + .baseAttack = 120, \ + .baseDefense = 120, \ + .baseSpeed = 120, \ + .baseSpAttack = 120, \ + .baseSpDefense = 120, \ + .type1 = type, \ + .type2 = type, \ + .catchRate = 3, \ + .expYield = 324, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ + .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .abilities = {ABILITY_MULTITYPE, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE, \ + .flags = FLAG_MYTHICAL, \ + } + +#define DEERLING_BASE_STATS(color) \ + { \ + .baseHP = 60, \ + .baseAttack = 60, \ + .baseDefense = 50, \ + .baseSpeed = 75, \ + .baseSpAttack = 40, \ + .baseSpDefense = 50, \ + .type1 = TYPE_NORMAL, \ + .type2 = TYPE_GRASS, \ + .catchRate = 190, \ + .expYield = 67, \ + .evYield_Speed = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FIELD, \ + .eggGroup2 = EGG_GROUP_FIELD, \ + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } + +#define SAWSBUCK_BASE_STATS \ + { \ + .baseHP = 80, \ + .baseAttack = 100, \ + .baseDefense = 70, \ + .baseSpeed = 95, \ + .baseSpAttack = 60, \ + .baseSpDefense = 70, \ + .type1 = TYPE_NORMAL, \ + .type2 = TYPE_GRASS, \ + .catchRate = 75, \ + .expYield = 166, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FIELD, \ + .eggGroup2 = EGG_GROUP_FIELD, \ + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE},\ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE, \ + } + +#define GENESECT_BASE_STATS \ + { \ + .baseHP = 71, \ + .baseAttack = 120, \ + .baseDefense = 95, \ + .baseSpeed = 99, \ + .baseSpAttack = 120, \ + .baseSpDefense = 95, \ + .type1 = TYPE_BUG, \ + .type2 = TYPE_STEEL, \ + .catchRate = 3, \ + .expYield = 270, \ + .evYield_Attack = 1, \ + .evYield_Speed = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ + .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .abilities = {ABILITY_DOWNLOAD, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE, \ + .flags = FLAG_MYTHICAL, \ + } + +#define VIVILLON_BASE_STATS(color) \ + { \ + .baseHP = 80, \ + .baseAttack = 52, \ + .baseDefense = 50, \ + .baseSpeed = 89, \ + .baseSpAttack = 90, \ + .baseSpDefense = 50, \ + .type1 = TYPE_BUG, \ + .type2 = TYPE_FLYING, \ + .catchRate = 45, \ + .expYield = 185, \ + .evYield_HP = 1, \ + .evYield_Speed = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_BUG, \ + .eggGroup2 = EGG_GROUP_BUG, \ + .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } + +#define FLABEBE_BASE_STATS \ + { \ + .baseHP = 44, \ + .baseAttack = 38, \ + .baseDefense = 39, \ + .baseSpeed = 42, \ + .baseSpAttack = 61, \ + .baseSpDefense = 79, \ + .type1 = TYPE_FAIRY, \ + .type2 = TYPE_FAIRY, \ + .catchRate = 225, \ + .expYield = 61, \ + .evYield_SpDefense = 1, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FAIRY, \ + .eggGroup2 = EGG_GROUP_FAIRY, \ + .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE, \ + } + +#define FLOETTE_BASE_STATS \ + { \ + .baseHP = 54, \ + .baseAttack = 45, \ + .baseDefense = 47, \ + .baseSpeed = 52, \ + .baseSpAttack = 75, \ + .baseSpDefense = 98, \ + .type1 = TYPE_FAIRY, \ + .type2 = TYPE_FAIRY, \ + .catchRate = 120, \ + .expYield = 130, \ + .evYield_SpDefense = 2, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FAIRY, \ + .eggGroup2 = EGG_GROUP_FAIRY, \ + .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE, \ + } + +#define FLORGES_BASE_STATS \ + { \ + .baseHP = 78, \ + .baseAttack = 65, \ + .baseDefense = 68, \ + .baseSpeed = 75, \ + .baseSpAttack = 112, \ + .baseSpDefense = 154, \ + .type1 = TYPE_FAIRY, \ + .type2 = TYPE_FAIRY, \ + .catchRate = 45, \ + .expYield = 248, \ + .evYield_SpDefense = 3, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FAIRY, \ + .eggGroup2 = EGG_GROUP_FAIRY, \ + .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE, \ + } + +#define FURFROU_BASE_STATS(flip) \ + { \ + .baseHP = 75, \ + .baseAttack = 80, \ + .baseDefense = 60, \ + .baseSpeed = 102, \ + .baseSpAttack = 65, \ + .baseSpDefense = 90, \ + .type1 = TYPE_NORMAL, \ + .type2 = TYPE_NORMAL, \ + .catchRate = 160, \ + .expYield = 165, \ + .evYield_Speed = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FIELD, \ + .eggGroup2 = EGG_GROUP_FIELD, \ + .abilities = {ABILITY_FUR_COAT, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = flip, \ + } + +#define PUMKPABOO_MISC_STATS \ + .type1 = TYPE_GHOST, \ + .type2 = TYPE_GRASS, \ + .catchRate = 120, \ + .expYield = 67, \ + .evYield_Defense = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_AMORPHOUS, \ + .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA},\ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + +#define GOURGEIST_MISC_STATS \ + .type1 = TYPE_GHOST, \ + .type2 = TYPE_GRASS, \ + .catchRate = 60, \ + .expYield = 173, \ + .evYield_Defense = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_AMORPHOUS, \ + .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA},\ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + +#define XERNEAS_BASE_STATS \ + { \ + .baseHP = 126, \ + .baseAttack = 131, \ + .baseDefense = 95, \ + .baseSpeed = 99, \ + .baseSpAttack = 131, \ + .baseSpDefense = 98, \ + .type1 = TYPE_FAIRY, \ + .type2 = TYPE_FAIRY, \ + .catchRate = 45, \ + .expYield = 306, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ + .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .abilities = {ABILITY_FAIRY_AURA, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE, \ + .flags = FLAG_LEGENDARY, \ + } + +#define ZYGARDE_50_BASE_STATS(ability) \ + { \ + .baseHP = 108, \ + .baseAttack = 100, \ + .baseDefense = 121, \ + .baseSpeed = 95, \ + .baseSpAttack = 81, \ + .baseSpDefense = 95, \ + .type1 = TYPE_DRAGON, \ + .type2 = TYPE_GROUND, \ + .catchRate = 3, \ + .expYield = 270, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ + .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .abilities = {ability, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = TRUE, \ + .flags = FLAG_LEGENDARY, \ + } + +#define ZYGARDE_10_BASE_STATS(ability) \ + { \ + .baseHP = 54, \ + .baseAttack = 100, \ + .baseDefense = 71, \ + .baseSpeed = 115, \ + .baseSpAttack = 61, \ + .baseSpDefense = 85, \ + .type1 = TYPE_DRAGON, \ + .type2 = TYPE_GROUND, \ + .catchRate = 3, \ + .expYield = 219, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ + .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .abilities = {ability, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = TRUE, \ + .flags = FLAG_LEGENDARY, \ + } + +#define ORICORIO_BASE_STATS(type, color) \ +{ \ + .baseHP = 75, \ + .baseAttack = 70, \ + .baseDefense = 70, \ + .baseSpeed = 93, \ + .baseSpAttack = 98, \ + .baseSpDefense = 70, \ + .type1 = type, \ + .type2 = TYPE_FLYING, \ + .catchRate = 45, \ + .expYield = 167, \ + .evYield_SpAttack = 2, \ + .itemRare = ITEM_HONEY, \ + .genderRatio = PERCENT_FEMALE(75), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FLYING, \ + .eggGroup2 = EGG_GROUP_FLYING, \ + .abilities = {ABILITY_DANCER, ABILITY_NONE},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } + +#define ROCKRUFF_BASE_STATS(ability1, ability2, hiddenAbility)\ + { \ + .baseHP = 45, \ + .baseAttack = 65, \ + .baseDefense = 40, \ + .baseSpeed = 60, \ + .baseSpAttack = 30, \ + .baseSpDefense = 40, \ + .type1 = TYPE_ROCK, \ + .type2 = TYPE_ROCK, \ + .catchRate = 190, \ + .expYield = 56, \ + .evYield_Attack = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FIELD, \ + .eggGroup2 = EGG_GROUP_FIELD, \ + .abilities = {ability1, ability2, hiddenAbility}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE, \ + } + +#define SILVALLY_BASE_STATS(type) \ + { \ + .baseHP = 95, \ + .baseAttack = 95, \ + .baseDefense = 95, \ + .baseSpeed = 95, \ + .baseSpAttack = 95, \ + .baseSpDefense = 95, \ + .type1 = type, \ + .type2 = type, \ + .catchRate = 3, \ + .expYield = 257, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ + .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE, \ + .flags = FLAG_LEGENDARY, \ + } + +#define MINIOR_METEOR_ATTRIBUTES\ + .baseHP = 60, \ + .baseAttack = 60, \ + .baseDefense = 100, \ + .baseSpeed = 60, \ + .baseSpAttack = 60, \ + .baseSpDefense = 100 + +#define MINIOR_CORE_ATTRIBUTES\ + .baseHP = 60, \ + .baseAttack = 100, \ + .baseDefense = 60, \ + .baseSpeed = 120, \ + .baseSpAttack = 100, \ + .baseSpDefense = 60 + +#define MINIOR_MISC_STATS(color) \ + .type1 = TYPE_ROCK, \ + .type2 = TYPE_FLYING, \ + .catchRate = 30, \ + .expYield = 154, \ + .evYield_Defense = 1, \ + .evYield_SpDefense = 1, \ + .itemRare = ITEM_STAR_PIECE, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 25, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroup1 = EGG_GROUP_MINERAL, \ + .eggGroup2 = EGG_GROUP_MINERAL, \ + .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE},\ + .bodyColor = color, \ + .noFlip = TRUE + +#define MINIOR_METEOR_BASE_STATS \ + { \ + MINIOR_METEOR_ATTRIBUTES, \ + MINIOR_MISC_STATS(BODY_COLOR_BROWN),\ + } + + +#define MINIOR_CORE_BASE_STATS(color)\ + { \ + MINIOR_CORE_ATTRIBUTES, \ + MINIOR_MISC_STATS(color), \ + } + +#define MIMIKYU_BASE_STATS \ + { \ + .baseHP = 55, \ + .baseAttack = 90, \ + .baseDefense = 80, \ + .baseSpeed = 96, \ + .baseSpAttack = 50, \ + .baseSpDefense = 105, \ + .type1 = TYPE_GHOST, \ + .type2 = TYPE_FAIRY, \ + .catchRate = 45, \ + .expYield = 167, \ + .evYield_SpDefense = 2, \ + .itemRare = ITEM_CHESTO_BERRY, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_AMORPHOUS, \ + .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .abilities = {ABILITY_DISGUISE, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE, \ + } + +#define MAGEARNA_BASE_STATS(color) \ + { \ + .baseHP = 80, \ + .baseAttack = 95, \ + .baseDefense = 115, \ + .baseSpeed = 65, \ + .baseSpAttack = 130, \ + .baseSpDefense = 115, \ + .type1 = TYPE_STEEL, \ + .type2 = TYPE_FAIRY, \ + .catchRate = 3, \ + .expYield = 270, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ + .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .abilities = {ABILITY_SOUL_HEART, ABILITY_NONE},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + .flags = FLAG_MYTHICAL, \ + } + +#define CRAMORANT_BASE_STATS \ + { \ + .baseHP = 70, \ + .baseAttack = 85, \ + .baseDefense = 55, \ + .baseSpeed = 85, \ + .baseSpAttack = 85, \ + .baseSpDefense = 95, \ + .type1 = TYPE_FLYING, \ + .type2 = TYPE_WATER, \ + .catchRate = 45, \ + .expYield = 166, \ + .evYield_SpDefense = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_WATER_1, \ + .eggGroup2 = EGG_GROUP_FLYING, \ + .abilities = {ABILITY_GULP_MISSILE, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE, \ + } + +#define TOXTRICITY_BASE_STATS(ability2) \ + { \ + .baseHP = 75, \ + .baseAttack = 98, \ + .baseDefense = 70, \ + .baseSpeed = 75, \ + .baseSpAttack = 114, \ + .baseSpDefense = 70, \ + .type1 = TYPE_ELECTRIC, \ + .type2 = TYPE_POISON, \ + .catchRate = 45, \ + .expYield = 176, \ + .evYield_SpAttack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroup1 = EGG_GROUP_HUMAN_LIKE, \ + .eggGroup2 = EGG_GROUP_HUMAN_LIKE, \ + .abilities = {ABILITY_PUNK_ROCK, ability2, ABILITY_TECHNICIAN},\ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE, \ + } + +#define SINISTEA_BASE_STATS \ + { \ + .baseHP = 40, \ + .baseAttack = 45, \ + .baseDefense = 45, \ + .baseSpeed = 50, \ + .baseSpAttack = 74, \ + .baseSpDefense = 54, \ + .type1 = TYPE_GHOST, \ + .type2 = TYPE_GHOST, \ + .catchRate = 120, \ + .expYield = 62, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_MINERAL, \ + .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY},\ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE, \ + } + +#define POLTEAGEIST_BASE_STATS \ + { \ + .baseHP = 60, \ + .baseAttack = 65, \ + .baseDefense = 65, \ + .baseSpeed = 70, \ + .baseSpAttack = 134, \ + .baseSpDefense = 114, \ + .type1 = TYPE_GHOST, \ + .type2 = TYPE_GHOST, \ + .catchRate = 60, \ + .expYield = 178, \ + .evYield_SpAttack = 2, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_MINERAL, \ + .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY},\ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE, \ + } + +#define ALCREMIE_BASE_STATS(color) \ + { \ + .baseHP = 65, \ + .baseAttack = 60, \ + .baseDefense = 75, \ + .baseSpeed = 64, \ + .baseSpAttack = 110, \ + .baseSpDefense = 121, \ + .type1 = TYPE_FAIRY, \ + .type2 = TYPE_FAIRY, \ + .catchRate = 100, \ + .expYield = 173, \ + .evYield_SpDefense = 2, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FAIRY, \ + .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } + +#define MORPEKO_BASE_STATS \ + { \ + .baseHP = 58, \ + .baseAttack = 95, \ + .baseDefense = 58, \ + .baseSpeed = 97, \ + .baseSpAttack = 70, \ + .baseSpDefense = 58, \ + .type1 = TYPE_ELECTRIC, \ + .type2 = TYPE_DARK, \ + .catchRate = 180, \ + .expYield = 153, \ + .evYield_Speed = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 10, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroup1 = EGG_GROUP_FIELD, \ + .eggGroup2 = EGG_GROUP_FAIRY, \ + .abilities = {ABILITY_HUNGER_SWITCH, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE, \ + } + +#define ZARUDE_BASE_STATS \ + { \ + .baseHP = 105, \ + .baseAttack = 120, \ + .baseDefense = 105, \ + .baseSpeed = 105, \ + .baseSpAttack = 70, \ + .baseSpDefense = 95, \ + .type1 = TYPE_DARK, \ + .type2 = TYPE_GRASS, \ + .catchRate = 3, \ + .expYield = 300, \ + .evYield_Attack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ + .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE, \ + .flags = FLAG_MYTHICAL, \ + } + const struct BaseStats gBaseStats[] = { [SPECIES_NONE] = {0}, @@ -99,11 +1006,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -128,11 +1031,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -156,11 +1055,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -304,18 +1199,14 @@ const struct BaseStats gBaseStats[] = .expYield = 178, .evYield_SpAttack = 2, .evYield_SpDefense = 1, - .item2 = ITEM_SILVER_POWDER, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_TINTED_LENS}, - #else - .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, - #endif + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_TINTED_LENS}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -386,18 +1277,14 @@ const struct BaseStats gBaseStats[] = .expYield = 178, .evYield_Attack = 2, .evYield_SpDefense = 1, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_SNIPER}, - #else - .abilities = {ABILITY_SWARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -421,11 +1308,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -449,11 +1332,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -481,11 +1360,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -551,18 +1426,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 52, .evYield_Speed = 1, - .item2 = ITEM_SHARP_BEAK, + .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_SNIPER}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -580,18 +1451,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 155, .evYield_Speed = 2, - .item2 = ITEM_SHARP_BEAK, + .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_SNIPER}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -615,11 +1482,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -647,44 +1510,12 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, - [SPECIES_PIKACHU] = - { - .baseHP = 35, - .baseAttack = 55, - .baseSpeed = 90, - .baseSpAttack = 50, - #if P_UPDATED_STATS >= GEN_6 - .baseDefense = 40, - .baseSpDefense = 50, - #else - .baseDefense = 30, - .baseSpDefense = 40, - #endif - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, + [SPECIES_PIKACHU] = PIKACHU_BASE_STATS(PERCENT_FEMALE(50), FLIP), [SPECIES_RAICHU] = { @@ -727,20 +1558,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 60, .evYield_Defense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_GRIP_CLAW, - #endif + .itemRare = ITEM_GRIP_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_SAND_RUSH}, - #else - .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_SAND_RUSH}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -758,20 +1583,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 158, .evYield_Defense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_GRIP_CLAW, - #endif + .itemRare = ITEM_GRIP_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_SAND_RUSH}, - #else - .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_SAND_RUSH}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -795,11 +1614,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -823,11 +1638,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -855,11 +1666,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -883,11 +1690,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -911,11 +1714,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -943,11 +1742,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -970,18 +1765,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 150, .expYield = 113, .evYield_HP = 2, - .item2 = ITEM_MOON_STONE, + .itemRare = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 140, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, }, @@ -1008,18 +1799,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 25, .expYield = 217, .evYield_HP = 3, - .item2 = ITEM_MOON_STONE, + .itemRare = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 140, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_UNAWARE}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_UNAWARE}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, }, @@ -1037,7 +1824,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 60, .evYield_Speed = 1, - .item2 = ITEM_CHARCOAL, + .itemRare = ITEM_CHARCOAL, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, @@ -1063,7 +1850,7 @@ const struct BaseStats gBaseStats[] = .expYield = 177, .evYield_Speed = 1, .evYield_SpDefense = 1, - .item2 = ITEM_CHARCOAL, + .itemRare = ITEM_CHARCOAL, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, @@ -1093,18 +1880,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 170, .expYield = 95, .evYield_HP = 2, - .item2 = ITEM_MOON_STONE, + .itemRare = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, }, @@ -1131,18 +1914,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 50, .expYield = 196, .evYield_HP = 3, - .item2 = ITEM_MOON_STONE, + .itemRare = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRISK}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, }, @@ -1166,11 +1945,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -1194,11 +1969,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -1216,9 +1987,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 64, .evYield_SpAttack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ABSORB_BULB, - #endif + .itemRare = ITEM_ABSORB_BULB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1243,9 +2012,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 138, .evYield_SpAttack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ABSORB_BULB, - #endif + .itemRare = ITEM_ABSORB_BULB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1274,9 +2041,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 221, .evYield_SpAttack = 3, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ABSORB_BULB, - #endif + .itemRare = ITEM_ABSORB_BULB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1301,19 +2066,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 57, .evYield_Attack = 1, - .item1 = ITEM_TINY_MUSHROOM, - .item2 = ITEM_BIG_MUSHROOM, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_DRY_SKIN, ABILITY_DAMP}, - #else - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_DAMP}, - #endif + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_DRY_SKIN, ABILITY_DAMP}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -1332,19 +2093,15 @@ const struct BaseStats gBaseStats[] = .expYield = 142, .evYield_Attack = 2, .evYield_Defense = 1, - .item1 = ITEM_TINY_MUSHROOM, - .item2 = ITEM_BIG_MUSHROOM, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_DRY_SKIN, ABILITY_DAMP}, - #else - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_DAMP}, - #endif + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_DRY_SKIN, ABILITY_DAMP}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -1368,11 +2125,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_COMPOUND_EYES, ABILITY_TINTED_LENS, ABILITY_RUN_AWAY}, - #else - .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_RUN_AWAY}, - #endif + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_TINTED_LENS, ABILITY_RUN_AWAY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -1391,20 +2144,14 @@ const struct BaseStats gBaseStats[] = .expYield = 158, .evYield_Speed = 1, .evYield_SpAttack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SHED_SHELL, - #endif + .itemRare = ITEM_SHED_SHELL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_TINTED_LENS, ABILITY_WONDER_SKIN}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHIELD_DUST, ABILITY_TINTED_LENS, ABILITY_WONDER_SKIN}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -1422,18 +2169,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 53, .evYield_Speed = 1, - .item2 = ITEM_SOFT_SAND, + .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, - #endif + .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -1455,18 +2198,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 50, .expYield = 149, .evYield_Speed = 2, - .item2 = ITEM_SOFT_SAND, + .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, - #endif + .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -1484,18 +2223,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 58, .evYield_Speed = 1, - .item2 = ITEM_QUICK_CLAW, + .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -1513,18 +2248,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 154, .evYield_Speed = 2, - .item2 = ITEM_QUICK_CLAW, + .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIMBER, ABILITY_TECHNICIAN, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_LIMBER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIMBER, ABILITY_TECHNICIAN, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -1596,11 +2327,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_ANGER_POINT, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_ANGER_POINT, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -1624,11 +2351,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_ANGER_POINT, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_ANGER_POINT, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -1652,11 +2375,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -1680,11 +2399,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -1726,7 +2441,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 135, .evYield_Speed = 2, - .item2 = ITEM_KINGS_ROCK, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1755,7 +2470,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 230, .evYield_Defense = 3, - .item2 = ITEM_KINGS_ROCK, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1780,18 +2495,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 200, .expYield = 62, .evYield_SpAttack = 1, - .item2 = ITEM_TWISTED_SPOON, + .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS, ABILITY_MAGIC_GUARD}, - #else - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS, ABILITY_MAGIC_GUARD}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -1809,18 +2520,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 100, .expYield = 140, .evYield_SpAttack = 2, - .item2 = ITEM_TWISTED_SPOON, + .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS, ABILITY_MAGIC_GUARD}, - #else - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS, ABILITY_MAGIC_GUARD}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, }, @@ -1842,18 +2549,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 50, .expYield = 225, .evYield_SpAttack = 3, - .item2 = ITEM_TWISTED_SPOON, + .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS, ABILITY_MAGIC_GUARD}, - #else - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS, ABILITY_MAGIC_GUARD}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -1871,18 +2574,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 180, .expYield = 61, .evYield_Attack = 1, - .item2 = ITEM_FOCUS_BAND, + .itemRare = ITEM_FOCUS_BAND, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, - #else - .abilities = {ABILITY_GUTS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -1900,18 +2599,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 142, .evYield_Attack = 2, - .item2 = ITEM_FOCUS_BAND, + .itemRare = ITEM_FOCUS_BAND, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, - #else - .abilities = {ABILITY_GUTS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, }, @@ -1929,18 +2624,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 227, .evYield_Attack = 3, - .item2 = ITEM_FOCUS_BAND, + .itemRare = ITEM_FOCUS_BAND, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, - #else - .abilities = {ABILITY_GUTS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -1964,11 +2655,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -1992,11 +2679,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -2024,11 +2707,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -2046,7 +2725,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 67, .evYield_SpDefense = 1, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2071,7 +2750,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 180, .evYield_SpDefense = 2, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2096,7 +2775,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 60, .evYield_Defense = 1, - .item2 = ITEM_EVERSTONE, + .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -2121,7 +2800,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 137, .evYield_Defense = 2, - .item2 = ITEM_EVERSTONE, + .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -2150,7 +2829,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 223, .evYield_Defense = 3, - .item2 = ITEM_EVERSTONE, + .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -2223,20 +2902,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 63, .evYield_HP = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LAGGING_TAIL, - #endif + .itemRare = ITEM_LAGGING_TAIL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -2254,18 +2927,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 172, .evYield_Defense = 2, - .item2 = ITEM_KINGS_ROCK, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -2283,18 +2952,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 65, .evYield_SpAttack = 1, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -2312,18 +2977,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 163, .evYield_SpAttack = 2, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -2345,18 +3006,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 132, .evYield_Attack = 1, - .item2 = ITEM_STICK, + .itemRare = ITEM_LEEK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -2374,18 +3031,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 62, .evYield_Attack = 1, - .item2 = ITEM_SHARP_BEAK, + .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD, ABILITY_TANGLED_FEET}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD, ABILITY_TANGLED_FEET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -2407,18 +3060,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 165, .evYield_Attack = 2, - .item2 = ITEM_SHARP_BEAK, + .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD, ABILITY_TANGLED_FEET}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD, ABILITY_TANGLED_FEET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -2442,11 +3091,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_HYDRATION, ABILITY_ICE_BODY}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_HYDRATION, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -2470,11 +3115,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_HYDRATION, ABILITY_ICE_BODY}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_HYDRATION, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -2492,20 +3133,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 65, .evYield_HP = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_BLACK_SLUDGE, - #endif + .itemRare = ITEM_BLACK_SLUDGE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_POISON_TOUCH}, - #else - .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, - #endif + .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_POISON_TOUCH}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -2524,20 +3159,14 @@ const struct BaseStats gBaseStats[] = .expYield = 175, .evYield_HP = 1, .evYield_Attack = 1, - #ifdef ITEM_EXPANSION - .item1 = ITEM_BLACK_SLUDGE, - #endif + .itemCommon = ITEM_BLACK_SLUDGE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_POISON_TOUCH}, - #else - .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, - #endif + .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_POISON_TOUCH}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -2555,19 +3184,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 61, .evYield_Defense = 1, - .item1 = ITEM_PEARL, - .item2 = ITEM_BIG_PEARL, + .itemCommon = ITEM_PEARL, + .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHELL_ARMOR, ABILITY_SKILL_LINK, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHELL_ARMOR, ABILITY_SKILL_LINK, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -2585,19 +3210,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 184, .evYield_Defense = 2, - .item1 = ITEM_PEARL, - .item2 = ITEM_BIG_PEARL, + .itemCommon = ITEM_PEARL, + .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHELL_ARMOR, ABILITY_SKILL_LINK, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHELL_ARMOR, ABILITY_SKILL_LINK, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -2670,11 +3291,7 @@ const struct BaseStats gBaseStats[] = .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, #if P_UPDATED_ABILITIES >= GEN_7 - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CURSED_BODY, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CURSED_BODY, ABILITY_NONE}, #else .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, #endif @@ -2701,11 +3318,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -2729,11 +3342,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INSOMNIA, ABILITY_FOREWARN, ABILITY_INNER_FOCUS}, - #else - .abilities = {ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_INSOMNIA, ABILITY_FOREWARN, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -2757,11 +3366,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INSOMNIA, ABILITY_FOREWARN, ABILITY_INNER_FOCUS}, - #else - .abilities = {ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_INSOMNIA, ABILITY_FOREWARN, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -2785,11 +3390,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -2813,11 +3414,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, }, @@ -2841,11 +3438,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, - #else - .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, - #endif + .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -2873,11 +3466,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, - #else - .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, - #endif + .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -2895,20 +3484,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 65, .evYield_Defense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_PSYCHIC_SEED, - #endif + .itemRare = ITEM_PSYCHIC_SEED, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -2936,11 +3519,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -2958,7 +3537,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 64, .evYield_Defense = 1, - .item2 = ITEM_THICK_CLUB, + .itemRare = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2983,7 +3562,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 149, .evYield_Defense = 2, - .item2 = ITEM_THICK_CLUB, + .itemRare = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3014,11 +3593,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIMBER, ABILITY_RECKLESS, ABILITY_UNBURDEN}, - #else - .abilities = {ABILITY_LIMBER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIMBER, ABILITY_RECKLESS, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -3042,11 +3617,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_IRON_FIST, ABILITY_INNER_FOCUS}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_IRON_FIST, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -3064,9 +3635,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 77, .evYield_HP = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LAGGING_TAIL, - #endif + .itemRare = ITEM_LAGGING_TAIL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3091,18 +3660,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 68, .evYield_Defense = 1, - .item2 = ITEM_SMOKE_BALL, + .itemRare = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_STENCH}, - #else - .abilities = {ABILITY_LEVITATE, ABILITY_NONE, ABILITY_STENCH}, - #endif + .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_STENCH}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -3120,18 +3685,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 172, .evYield_Defense = 2, - .item2 = ITEM_SMOKE_BALL, + .itemRare = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_STENCH}, - #else - .abilities = {ABILITY_LEVITATE, ABILITY_NONE, ABILITY_STENCH}, - #endif + .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_STENCH}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = TRUE, }, @@ -3155,11 +3716,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD, ABILITY_RECKLESS}, - #else - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, - #endif + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -3183,11 +3740,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD, ABILITY_RECKLESS}, - #else - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, - #endif + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -3205,18 +3758,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 30, .expYield = 395, .evYield_HP = 2, - .item1 = ITEM_LUCKY_PUNCH, + .itemCommon = ITEM_LUCKY_PUNCH, .genderRatio = MON_FEMALE, .eggCycles = 40, .friendship = 140, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_HEALER}, - #else - .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE}, - #endif + .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_HEALER}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -3240,11 +3789,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -3268,11 +3813,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_EARLY_BIRD, ABILITY_SCRAPPY, ABILITY_INNER_FOCUS}, - #else - .abilities = {ABILITY_EARLY_BIRD, ABILITY_NONE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_EARLY_BIRD, ABILITY_SCRAPPY, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -3290,18 +3831,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 225, .expYield = 59, .evYield_SpAttack = 1, - .item2 = ITEM_DRAGON_SCALE, + .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_DAMP}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -3320,18 +3857,14 @@ const struct BaseStats gBaseStats[] = .expYield = 154, .evYield_Defense = 1, .evYield_SpAttack = 1, - .item2 = ITEM_DRAGON_SCALE, + .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_SNIPER, ABILITY_DAMP}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_DAMP}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_SNIPER, ABILITY_DAMP}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -3349,7 +3882,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 225, .expYield = 64, .evYield_Attack = 1, - .item2 = ITEM_MYSTIC_WATER, + .itemRare = ITEM_MYSTIC_WATER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3374,7 +3907,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 158, .evYield_Attack = 2, - .item2 = ITEM_MYSTIC_WATER, + .itemRare = ITEM_MYSTIC_WATER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3399,19 +3932,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 225, .expYield = 68, .evYield_Speed = 1, - .item1 = ITEM_STARDUST, - .item2 = ITEM_STAR_PIECE, + .itemCommon = ITEM_STARDUST, + .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, - #endif + .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, }, @@ -3429,19 +3958,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 182, .evYield_Speed = 2, - .item1 = ITEM_STARDUST, - .item2 = ITEM_STAR_PIECE, + .itemCommon = ITEM_STARDUST, + .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, - #endif + .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -3470,11 +3995,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN}, - #else - .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -3498,11 +4019,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_STEADFAST}, - #else - .abilities = {ABILITY_SWARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -3526,11 +4043,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_DRY_SKIN}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_DRY_SKIN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -3548,9 +4061,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 172, .evYield_Speed = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ELECTIRIZER, - #endif + .itemRare = ITEM_ELECTIRIZER, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, @@ -3575,9 +4086,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 173, .evYield_SpAttack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_MAGMARIZER, - #endif + .itemRare = ITEM_MAGMARIZER, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, @@ -3608,11 +4117,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_MOLD_BREAKER, ABILITY_MOXIE}, - #else - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_MOLD_BREAKER, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -3637,11 +4142,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -3665,11 +4166,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -3693,11 +4190,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_MOXIE}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -3715,19 +4208,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 187, .evYield_HP = 2, - .item1 = ITEM_MYSTIC_WATER, - .item2 = ITEM_MYSTIC_WATER, + .itemCommon = ITEM_MYSTIC_WATER, + .itemRare = ITEM_MYSTIC_WATER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR, ABILITY_HYDRATION}, - #else - .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -3745,21 +4234,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 35, .expYield = 101, .evYield_HP = 1, - #ifdef ITEM_EXPANSION - .item1 = ITEM_QUICK_POWDER, - #endif - .item2 = ITEM_METAL_POWDER, + .itemCommon = ITEM_QUICK_POWDER, + .itemRare = ITEM_METAL_POWDER, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_DITTO, .eggGroup2 = EGG_GROUP_DITTO, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIMBER, ABILITY_NONE, ABILITY_IMPOSTER}, - #else - .abilities = {ABILITY_LIMBER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIMBER, ABILITY_NONE, ABILITY_IMPOSTER}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -3783,13 +4266,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_ADAPTABILITY, ABILITY_ANTICIPATION}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_ADAPTABILITY, ABILITY_ANTICIPATION}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_VAPOREON] = @@ -3811,11 +4291,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_ABSORB, ABILITY_WATER_ABSORB, ABILITY_HYDRATION}, - #else - .abilities = {ABILITY_WATER_ABSORB, ABILITY_WATER_ABSORB}, - #endif + .abilities = {ABILITY_WATER_ABSORB, ABILITY_WATER_ABSORB, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -3839,11 +4315,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_VOLT_ABSORB, ABILITY_VOLT_ABSORB, ABILITY_QUICK_FEET}, - #else - .abilities = {ABILITY_VOLT_ABSORB, ABILITY_VOLT_ABSORB}, - #endif + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_VOLT_ABSORB, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -3891,11 +4363,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_TRACE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -3919,11 +4387,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -3947,11 +4411,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -3975,11 +4435,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -4003,11 +4459,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -4031,11 +4483,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ROCK_HEAD, ABILITY_PRESSURE, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_ROCK_HEAD, ABILITY_PRESSURE}, - #endif + .abilities = {ABILITY_ROCK_HEAD, ABILITY_PRESSURE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -4053,19 +4501,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 25, .expYield = 189, .evYield_HP = 2, - .item1 = ITEM_LEFTOVERS, - .item2 = ITEM_LEFTOVERS, + .itemCommon = ITEM_LEFTOVERS, + .itemRare = ITEM_LEFTOVERS, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT}, - #endif + .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -4089,13 +4533,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_SNOW_CLOAK}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_SNOW_CLOAK}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_ZAPDOS] = @@ -4124,6 +4565,7 @@ const struct BaseStats gBaseStats[] = #endif .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_MOLTRES] = @@ -4148,6 +4590,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FLAME_BODY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_DRATINI] = @@ -4163,7 +4606,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 60, .evYield_Attack = 1, - .item2 = ITEM_DRAGON_SCALE, + .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -4188,7 +4631,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 147, .evYield_Attack = 2, - .item2 = ITEM_DRAGON_SCALE, + .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -4213,18 +4656,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 270, .evYield_Attack = 3, - .item2 = ITEM_DRAGON_SCALE, + .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_MULTISCALE}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_MULTISCALE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -4248,13 +4687,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_MEW] = @@ -4270,8 +4706,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 270, .evYield_HP = 3, - .item1 = ITEM_LUM_BERRY, - .item2 = ITEM_LUM_BERRY, + .itemCommon = ITEM_LUM_BERRY, + .itemRare = ITEM_LUM_BERRY, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, @@ -4281,6 +4717,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_CHIKORITA] = @@ -4302,11 +4739,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LEAF_GUARD}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -4331,11 +4764,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LEAF_GUARD}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -4360,11 +4789,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LEAF_GUARD}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -4461,11 +4886,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -4490,11 +4911,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, }, @@ -4519,11 +4936,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -4547,11 +4960,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE, ABILITY_FRISK}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -4575,11 +4984,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE, ABILITY_FRISK}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -4603,11 +5008,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE, ABILITY_TINTED_LENS}, - #else - .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE, ABILITY_TINTED_LENS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -4635,11 +5036,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE, ABILITY_TINTED_LENS}, - #else - .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE, ABILITY_TINTED_LENS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -4663,11 +5060,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -4691,11 +5084,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD, ABILITY_IRON_FIST}, - #else - .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -4719,11 +5108,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA, ABILITY_SNIPER}, - #else - .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -4751,11 +5136,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA, ABILITY_SNIPER}, - #else - .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -4779,11 +5160,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -4801,7 +5178,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 66, .evYield_HP = 1, - .item2 = ITEM_DEEP_SEA_SCALE, + .itemRare = ITEM_DEEP_SEA_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -4826,7 +5203,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 161, .evYield_HP = 2, - .item2 = ITEM_DEEP_SEA_SCALE, + .itemRare = ITEM_DEEP_SEA_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -4838,29 +5215,7 @@ const struct BaseStats gBaseStats[] = .noFlip = FALSE, }, - [SPECIES_PICHU] = - { - .baseHP = 20, - .baseAttack = 40, - .baseDefense = 15, - .baseSpeed = 60, - .baseSpAttack = 35, - .baseSpDefense = 35, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 41, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, + [SPECIES_PICHU] = PICHU_BASE_STATS(FLIP), [SPECIES_CLEFFA] = { @@ -4880,18 +5235,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 150, .expYield = 44, .evYield_SpDefense = 1, - .item2 = ITEM_MOON_STONE, + .itemRare = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 140, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, }, @@ -4920,11 +5271,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, }, @@ -4953,11 +5300,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, - #else - .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, - #endif + .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -4986,11 +5329,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, - #else - .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, - #endif + .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -5014,11 +5353,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD, ABILITY_MAGIC_BOUNCE}, - #else - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -5043,11 +5378,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD, ABILITY_MAGIC_BOUNCE}, - #else - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -5145,20 +5476,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 221, .evYield_SpDefense = 3, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ABSORB_BULB, - #endif + .itemRare = ITEM_ABSORB_BULB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HEALER}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HEALER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -5187,11 +5512,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -5224,11 +5545,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -5252,11 +5569,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -5274,7 +5587,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 225, .evYield_SpDefense = 3, - .item2 = ITEM_KINGS_ROCK, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -5305,11 +5618,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -5333,11 +5642,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -5365,11 +5670,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -5393,11 +5694,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP, ABILITY_SKILL_LINK}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP, ABILITY_SKILL_LINK}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -5421,11 +5718,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_EARLY_BIRD}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_EARLY_BIRD}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -5449,11 +5742,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_EARLY_BIRD}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_EARLY_BIRD}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -5471,20 +5760,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 78, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_WIDE_LENS, - #endif + .itemRare = ITEM_WIDE_LENS, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SPEED_BOOST, ABILITY_COMPOUND_EYES, ABILITY_FRISK}, - #else - .abilities = {ABILITY_SPEED_BOOST, ABILITY_COMPOUND_EYES}, - #endif + .abilities = {ABILITY_SPEED_BOOST, ABILITY_COMPOUND_EYES, ABILITY_FRISK}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -5508,11 +5791,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB, ABILITY_UNAWARE}, - #else - .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, - #endif + .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB, ABILITY_UNAWARE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -5536,11 +5815,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB, ABILITY_UNAWARE}, - #else - .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, - #endif + .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB, ABILITY_UNAWARE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -5564,11 +5839,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_SYNCHRONIZE, ABILITY_MAGIC_BOUNCE}, - #else - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_SYNCHRONIZE}, - #endif + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_SYNCHRONIZE, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -5616,11 +5887,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INSOMNIA, ABILITY_SUPER_LUCK, ABILITY_PRANKSTER}, - #else - .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INSOMNIA, ABILITY_SUPER_LUCK, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -5638,18 +5905,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 70, .expYield = 172, .evYield_SpDefense = 3, - .item2 = ITEM_KINGS_ROCK, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -5678,30 +5941,7 @@ const struct BaseStats gBaseStats[] = .noFlip = FALSE, }, - [SPECIES_UNOWN] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, + [SPECIES_UNOWN] = UNOWN_BASE_STATS(FLIP), [SPECIES_WOBBUFFET] = { @@ -5722,11 +5962,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -5750,11 +5986,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_EARLY_BIRD, ABILITY_SAP_SIPPER}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_EARLY_BIRD, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -5778,11 +6010,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_NONE, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_STURDY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -5806,11 +6034,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_NONE, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_STURDY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -5834,11 +6058,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY}, - #endif + .abilities = {ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -5880,18 +6100,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 25, .expYield = 179, .evYield_Defense = 2, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -5920,11 +6136,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_RUN_AWAY, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_RUN_AWAY}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_RUN_AWAY, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -5953,11 +6165,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_QUICK_FEET, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_QUICK_FEET, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -5979,7 +6187,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 88, .evYield_Attack = 1, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6010,11 +6218,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_LIGHT_METAL}, - #else - .abilities = {ABILITY_SWARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_LIGHT_METAL}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -6033,19 +6237,15 @@ const struct BaseStats gBaseStats[] = .expYield = 177, .evYield_Defense = 1, .evYield_SpDefense = 1, - .item1 = ITEM_BERRY_JUICE, - .item2 = ITEM_BERRY_JUICE, + .itemCommon = ITEM_BERRY_JUICE, + .itemRare = ITEM_BERRY_JUICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_GLUTTONY, ABILITY_CONTRARY}, - #else - .abilities = {ABILITY_STURDY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_GLUTTONY, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -6069,11 +6269,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_GUTS, ABILITY_MOXIE}, - #else - .abilities = {ABILITY_SWARM, ABILITY_GUTS}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_GUTS, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -6091,18 +6287,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 86, .evYield_Speed = 1, - .item2 = ITEM_QUICK_CLAW, + .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE, ABILITY_PICKPOCKET}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, }, @@ -6126,11 +6318,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_QUICK_FEET, ABILITY_HONEY_GATHER}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_QUICK_FEET, ABILITY_HONEY_GATHER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, }, @@ -6154,11 +6342,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_QUICK_FEET, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_GUTS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_QUICK_FEET, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -6182,11 +6366,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, - #endif + .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -6215,11 +6395,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, - #endif + .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, }, @@ -6243,11 +6419,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_THICK_FAT}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -6272,11 +6444,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_THICK_FAT}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -6301,20 +6469,14 @@ const struct BaseStats gBaseStats[] = .expYield = 144, .evYield_Defense = 1, .evYield_SpDefense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LUMINOUS_MOSS, - #endif + .itemRare = ITEM_LUMINOUS_MOSS, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE}, - #endif + .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -6338,11 +6500,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HUSTLE, ABILITY_SNIPER, ABILITY_MOODY}, - #else - .abilities = {ABILITY_HUSTLE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HUSTLE, ABILITY_SNIPER, ABILITY_MOODY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -6367,11 +6525,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SUCTION_CUPS, ABILITY_SNIPER, ABILITY_MOODY}, - #else - .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SUCTION_CUPS, ABILITY_SNIPER, ABILITY_MOODY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -6441,18 +6595,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 25, .expYield = 163, .evYield_Defense = 2, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -6476,11 +6626,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE}, - #endif + .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -6504,11 +6650,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE}, - #endif + .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -6528,18 +6670,14 @@ const struct BaseStats gBaseStats[] = .evYield_Attack = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .item2 = ITEM_DRAGON_SCALE, + .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_DAMP}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -6612,11 +6750,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_TRACE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -6640,11 +6774,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_FRISK, ABILITY_SAP_SIPPER}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_FRISK, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -6668,11 +6798,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OWN_TEMPO, ABILITY_TECHNICIAN, ABILITY_MOODY}, - #else - .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OWN_TEMPO, ABILITY_TECHNICIAN, ABILITY_MOODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -6696,11 +6822,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_STEADFAST, ABILITY_VITAL_SPIRIT}, - #else - .abilities = {ABILITY_GUTS, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_STEADFAST, ABILITY_VITAL_SPIRIT}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -6724,11 +6846,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_TECHNICIAN, ABILITY_STEADFAST}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_TECHNICIAN, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -6752,11 +6870,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_HYDRATION}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -6774,9 +6888,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 72, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ELECTIRIZER, - #endif + .itemRare = ITEM_ELECTIRIZER, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, @@ -6801,9 +6913,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 73, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_MAGMARIZER, - #endif + .itemRare = ITEM_MAGMARIZER, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, @@ -6828,19 +6938,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 172, .evYield_Defense = 2, - .item1 = ITEM_MOOMOO_MILK, - .item2 = ITEM_MOOMOO_MILK, + .itemCommon = ITEM_MOOMOO_MILK, + .itemRare = ITEM_MOOMOO_MILK, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_SCRAPPY, ABILITY_SAP_SIPPER}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_SCRAPPY, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -6858,18 +6964,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 30, .expYield = 608, .evYield_HP = 3, - .item2 = ITEM_LUCKY_EGG, + .itemRare = ITEM_LUCKY_EGG, .genderRatio = MON_FEMALE, .eggCycles = 40, .friendship = 140, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_HEALER}, - #else - .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE}, - #endif + .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_HEALER}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -6901,6 +7003,7 @@ const struct BaseStats gBaseStats[] = #endif .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_ENTEI] = @@ -6930,6 +7033,7 @@ const struct BaseStats gBaseStats[] = #endif .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_SUICUNE] = @@ -6959,6 +7063,7 @@ const struct BaseStats gBaseStats[] = #endif .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_LARVITAR] = @@ -7028,11 +7133,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -7056,13 +7157,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_MULTISCALE}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_MULTISCALE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_HO_OH] = @@ -7078,21 +7176,18 @@ const struct BaseStats gBaseStats[] = .catchRate = 3, .expYield = 306, .evYield_SpDefense = 3, - .item1 = ITEM_SACRED_ASH, - .item2 = ITEM_SACRED_ASH, + .itemCommon = ITEM_SACRED_ASH, + .itemRare = ITEM_SACRED_ASH, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_CELEBI] = @@ -7108,8 +7203,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 270, .evYield_HP = 3, - .item1 = ITEM_LUM_BERRY, - .item2 = ITEM_LUM_BERRY, + .itemCommon = ITEM_LUM_BERRY, + .itemRare = ITEM_LUM_BERRY, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, @@ -7119,6 +7214,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_TREECKO] = @@ -7140,11 +7236,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_UNBURDEN}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -7168,11 +7260,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_UNBURDEN}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -7196,11 +7284,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_UNBURDEN}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -7369,11 +7453,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_QUICK_FEET, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_QUICK_FEET, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -7397,11 +7477,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_QUICK_FEET, ABILITY_MOXIE}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_QUICK_FEET, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -7419,19 +7495,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 56, .evYield_Speed = 1, - .item1 = ITEM_POTION, - .item2 = ITEM_REVIVE, + .itemCommon = ITEM_POTION, + .itemRare = ITEM_REVIVE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -7449,19 +7521,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 147, .evYield_Speed = 2, - .item1 = ITEM_POTION, - .item2 = ITEM_MAX_REVIVE, + .itemCommon = ITEM_POTION, + .itemRare = ITEM_MAX_REVIVE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -7479,8 +7547,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 56, .evYield_HP = 1, - .item1 = ITEM_PECHA_BERRY, - .item2 = ITEM_BRIGHT_POWDER, + .itemCommon = ITEM_PECHA_BERRY, + .itemRare = ITEM_BRIGHT_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -7533,20 +7601,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 178, .evYield_SpAttack = 3, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SHED_SHELL, - #endif + .itemRare = ITEM_SHED_SHELL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_RIVALRY}, - #else - .abilities = {ABILITY_SWARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_RIVALRY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -7588,9 +7650,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 173, .evYield_SpDefense = 3, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SHED_SHELL, - #endif + .itemRare = ITEM_SHED_SHELL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -7615,7 +7675,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 44, .evYield_SpDefense = 1, - .item2 = ITEM_MENTAL_HERB, + .itemRare = ITEM_MENTAL_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -7640,7 +7700,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 119, .evYield_SpDefense = 2, - .item2 = ITEM_MENTAL_HERB, + .itemRare = ITEM_MENTAL_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -7665,7 +7725,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 216, .evYield_SpDefense = 3, - .item2 = ITEM_MENTAL_HERB, + .itemRare = ITEM_MENTAL_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -7690,20 +7750,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 44, .evYield_Defense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_POWER_HERB, - #endif + .itemRare = ITEM_POWER_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD, ABILITY_PICKPOCKET}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -7721,20 +7775,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 119, .evYield_Attack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_POWER_HERB, - #endif + .itemRare = ITEM_POWER_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD, ABILITY_PICKPOCKET}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -7752,20 +7800,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 216, .evYield_Attack = 3, - #ifdef ITEM_EXPANSION - .item2 = ITEM_POWER_HERB, - #endif + .itemRare = ITEM_POWER_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD, ABILITY_PICKPOCKET}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -7789,11 +7831,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_NONE, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_GUTS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -7821,11 +7859,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_NONE, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_GUTS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -7843,20 +7877,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 54, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item1 = ITEM_PRETTY_FEATHER, - #endif + .itemCommon = ITEM_PRETTY_FEATHER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_HYDRATION, ABILITY_RAIN_DISH}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RAIN_DISH}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_HYDRATION, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -7878,9 +7906,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 154, .evYield_Defense = 2, - #ifdef ITEM_EXPANSION - .item1 = ITEM_PRETTY_FEATHER, - #endif + .itemCommon = ITEM_PRETTY_FEATHER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7920,11 +7946,7 @@ const struct BaseStats gBaseStats[] = .eggGroup1 = EGG_GROUP_AMORPHOUS, #endif .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE}, - #endif + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -7957,11 +7979,7 @@ const struct BaseStats gBaseStats[] = .eggGroup1 = EGG_GROUP_AMORPHOUS, #endif .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE}, - #endif + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -7994,11 +8012,7 @@ const struct BaseStats gBaseStats[] = .eggGroup1 = EGG_GROUP_AMORPHOUS, #endif .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE}, - #endif + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -8016,9 +8030,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 200, .expYield = 54, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item1 = ITEM_HONEY, - #endif + .itemCommon = ITEM_HONEY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8049,18 +8061,14 @@ const struct BaseStats gBaseStats[] = .expYield = 159, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .item2 = ITEM_SILVER_POWDER, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -8078,19 +8086,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 59, .evYield_HP = 1, - .item1 = ITEM_TINY_MUSHROOM, - .item2 = ITEM_BIG_MUSHROOM, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_POISON_HEAL, ABILITY_QUICK_FEET}, - #else - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_POISON_HEAL, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -8108,19 +8112,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 161, .evYield_Attack = 2, - .item1 = ITEM_TINY_MUSHROOM, - .item2 = ITEM_BIG_MUSHROOM, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_POISON_HEAL, ABILITY_TECHNICIAN}, - #else - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_POISON_HEAL, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -8210,7 +8210,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 53, .evYield_Defense = 1, - .item2 = ITEM_SOFT_SAND, + .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8241,11 +8241,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SPEED_BOOST, ABILITY_NONE, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_SPEED_BOOST, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SPEED_BOOST, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -8293,11 +8289,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -8321,11 +8313,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -8353,11 +8341,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -8375,18 +8359,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 180, .expYield = 47, .evYield_HP = 1, - .item2 = ITEM_BLACK_BELT, + .itemRare = ITEM_BLACK_BELT, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -8404,18 +8384,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 200, .expYield = 166, .evYield_HP = 2, - .item2 = ITEM_KINGS_ROCK, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -8444,11 +8420,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -8466,18 +8438,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 75, .evYield_Defense = 1, - .item2 = ITEM_MAGNET, + .itemRare = ITEM_MAGNET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -8501,11 +8469,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NORMALIZE, ABILITY_WONDER_SKIN}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NORMALIZE, ABILITY_WONDER_SKIN}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -8534,11 +8498,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NORMALIZE, ABILITY_WONDER_SKIN}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NORMALIZE, ABILITY_WONDER_SKIN}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -8557,20 +8517,14 @@ const struct BaseStats gBaseStats[] = .expYield = 133, .evYield_Attack = 1, .evYield_Defense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_WIDE_LENS, - #endif + .itemRare = ITEM_WIDE_LENS, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_STALL, ABILITY_PRANKSTER}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_STALL, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -8594,20 +8548,14 @@ const struct BaseStats gBaseStats[] = .expYield = 133, .evYield_Attack = 1, .evYield_Defense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_IRON_BALL, - #endif + .itemRare = ITEM_IRON_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE}, - #endif + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -8625,18 +8573,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 180, .expYield = 66, .evYield_Defense = 1, - .item2 = ITEM_HARD_STONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_HEAVY_METAL}, - #else - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -8654,18 +8598,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 151, .evYield_Defense = 2, - .item2 = ITEM_HARD_STONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_HEAVY_METAL}, - #else - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -8683,18 +8623,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 239, .evYield_Defense = 3, - .item2 = ITEM_HARD_STONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_HEAVY_METAL}, - #else - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -8718,11 +8654,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PURE_POWER, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PURE_POWER, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -8746,11 +8678,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PURE_POWER, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PURE_POWER, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -8816,9 +8744,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 200, .expYield = 142, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_CELL_BATTERY, - #endif + .itemRare = ITEM_CELL_BATTERY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -8843,9 +8769,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 200, .expYield = 142, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_CELL_BATTERY, - #endif + .itemRare = ITEM_CELL_BATTERY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -8875,18 +8799,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 150, .expYield = 151, .evYield_Speed = 1, - .item2 = ITEM_BRIGHT_POWDER, + .itemRare = ITEM_BRIGHT_POWDER, .genderRatio = MON_MALE, .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ILLUMINATE, ABILITY_SWARM, ABILITY_PRANKSTER}, - #else - .abilities = {ABILITY_ILLUMINATE, ABILITY_SWARM}, - #endif + .abilities = {ABILITY_ILLUMINATE, ABILITY_SWARM, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -8909,18 +8829,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 150, .expYield = 151, .evYield_Speed = 1, - .item2 = ITEM_BRIGHT_POWDER, + .itemRare = ITEM_BRIGHT_POWDER, .genderRatio = MON_FEMALE, .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_TINTED_LENS, ABILITY_PRANKSTER}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_TINTED_LENS, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -8938,18 +8854,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 150, .expYield = 140, .evYield_SpAttack = 2, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_LEAF_GUARD}, - #else - .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT}, - #endif + .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, @@ -8967,19 +8879,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 225, .expYield = 60, .evYield_HP = 1, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_SITRUS_BERRY, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, - #endif + .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -8997,19 +8905,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 163, .evYield_HP = 2, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_SITRUS_BERRY, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, - #endif + .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -9027,7 +8931,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 225, .expYield = 61, .evYield_Attack = 1, - .item2 = ITEM_DEEP_SEA_TOOTH, + .itemRare = ITEM_DEEP_SEA_TOOTH, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -9052,7 +8956,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 161, .evYield_Attack = 2, - .item2 = ITEM_DEEP_SEA_TOOTH, + .itemRare = ITEM_DEEP_SEA_TOOTH, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -9131,11 +9035,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_SIMPLE, ABILITY_OWN_TEMPO}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_SIMPLE, ABILITY_OWN_TEMPO}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -9160,11 +9060,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_SOLID_ROCK, ABILITY_ANGER_POINT}, - #else - .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_SOLID_ROCK, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -9182,7 +9078,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 165, .evYield_Defense = 2, - .item2 = ITEM_CHARCOAL, + .itemRare = ITEM_CHARCOAL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9213,11 +9109,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -9241,11 +9133,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -9269,11 +9157,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OWN_TEMPO, ABILITY_TANGLED_FEET, ABILITY_CONTRARY}, - #else - .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OWN_TEMPO, ABILITY_TANGLED_FEET, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, }, @@ -9291,7 +9175,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 58, .evYield_Attack = 1, - .item2 = ITEM_SOFT_SAND, + .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9302,11 +9186,7 @@ const struct BaseStats gBaseStats[] = #else .eggGroup2 = EGG_GROUP_BUG, #endif - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP}, - #endif + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -9382,9 +9262,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 67, .evYield_SpAttack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_STICKY_BARB, - #endif + .itemRare = ITEM_STICKY_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -9410,9 +9288,7 @@ const struct BaseStats gBaseStats[] = .expYield = 166, .evYield_Attack = 1, .evYield_SpAttack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_STICKY_BARB, - #endif + .itemRare = ITEM_STICKY_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -9485,18 +9361,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 160, .evYield_Attack = 2, - .item2 = ITEM_QUICK_CLAW, + .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_IMMUNITY, ABILITY_NONE, ABILITY_TOXIC_BOOST}, - #else - .abilities = {ABILITY_IMMUNITY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_IMMUNITY, ABILITY_NONE, ABILITY_TOXIC_BOOST}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, }, @@ -9515,20 +9387,14 @@ const struct BaseStats gBaseStats[] = .expYield = 160, .evYield_Attack = 1, .evYield_SpAttack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SHED_SHELL, - #endif + .itemRare = ITEM_SHED_SHELL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, }, @@ -9550,8 +9416,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 161, .evYield_SpAttack = 2, - .item1 = ITEM_STARDUST, - .item2 = ITEM_MOON_STONE, + .itemCommon = ITEM_STARDUST, + .itemRare = ITEM_MOON_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, .friendship = 70, @@ -9580,8 +9446,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 161, .evYield_Attack = 2, - .item1 = ITEM_STARDUST, - .item2 = ITEM_SUN_STONE, + .itemCommon = ITEM_STARDUST, + .itemRare = ITEM_SUN_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, .friendship = 70, @@ -9612,11 +9478,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_ANTICIPATION, ABILITY_HYDRATION}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_ANTICIPATION, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -9640,11 +9502,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_ANTICIPATION, ABILITY_HYDRATION}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_ANTICIPATION, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -9668,11 +9526,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_ADAPTABILITY}, - #else - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -9696,11 +9550,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_ADAPTABILITY}, - #else - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -9718,9 +9568,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 60, .evYield_SpDefense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LIGHT_CLAY, - #endif + .itemRare = ITEM_LIGHT_CLAY, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -9745,9 +9593,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 175, .evYield_SpDefense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LIGHT_CLAY, - #endif + .itemRare = ITEM_LIGHT_CLAY, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -9772,20 +9618,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 71, .evYield_SpDefense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_BIG_ROOT, - #endif + .itemRare = ITEM_BIG_ROOT, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE, ABILITY_STORM_DRAIN}, - #else - .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE, ABILITY_STORM_DRAIN}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -9803,20 +9643,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 173, .evYield_SpDefense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_BIG_ROOT, - #endif + .itemRare = ITEM_BIG_ROOT, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE, ABILITY_STORM_DRAIN}, - #else - .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE, ABILITY_STORM_DRAIN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -9888,11 +9722,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_OBLIVIOUS, ABILITY_ADAPTABILITY}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_OBLIVIOUS}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_OBLIVIOUS, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -9916,40 +9746,12 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MARVEL_SCALE, ABILITY_COMPETITIVE, ABILITY_CUTE_CHARM}, - #else - .abilities = {ABILITY_MARVEL_SCALE, ABILITY_NONE, ABILITY_CUTE_CHARM}, - #endif + .abilities = {ABILITY_MARVEL_SCALE, ABILITY_COMPETITIVE, ABILITY_CUTE_CHARM}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, - [SPECIES_CASTFORM] = - { - .baseHP = 70, - .baseAttack = 70, - .baseDefense = 70, - .baseSpeed = 70, - .baseSpAttack = 70, - .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 45, - .expYield = 147, - .evYield_HP = 1, - .item1 = ITEM_MYSTIC_WATER, - .item2 = ITEM_MYSTIC_WATER, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = {ABILITY_FORECAST, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, + [SPECIES_CASTFORM] = CASTFORM_BASE_STATS(TYPE_NORMAL, BODY_COLOR_GRAY), [SPECIES_KECLEON] = { @@ -9970,11 +9772,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_COLOR_CHANGE, ABILITY_NONE, ABILITY_PROTEAN}, - #else - .abilities = {ABILITY_COLOR_CHANGE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_COLOR_CHANGE, ABILITY_NONE, ABILITY_PROTEAN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -9992,18 +9790,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 225, .expYield = 59, .evYield_Attack = 1, - .item2 = ITEM_SPELL_TAG, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INSOMNIA, ABILITY_FRISK, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INSOMNIA, ABILITY_FRISK, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -10021,18 +9815,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 159, .evYield_Attack = 2, - .item2 = ITEM_SPELL_TAG, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INSOMNIA, ABILITY_FRISK, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INSOMNIA, ABILITY_FRISK, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -10050,18 +9840,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 59, .evYield_SpDefense = 1, - .item2 = ITEM_SPELL_TAG, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEVITATE, ABILITY_NONE, ABILITY_FRISK}, - #else - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LEVITATE, ABILITY_NONE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -10080,18 +9866,14 @@ const struct BaseStats gBaseStats[] = .expYield = 159, .evYield_Defense = 1, .evYield_SpDefense = 1, - .item2 = ITEM_SPELL_TAG, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FRISK}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -10115,11 +9897,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_HARVEST}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -10144,7 +9922,7 @@ const struct BaseStats gBaseStats[] = .expYield = 159, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .item2 = ITEM_CLEANSE_TAG, + .itemRare = ITEM_CLEANSE_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -10175,11 +9953,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_SUPER_LUCK, ABILITY_JUSTIFIED}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_SUPER_LUCK, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, }, @@ -10203,11 +9977,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -10225,20 +9995,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 60, .evYield_HP = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SNOWBALL, - #endif + .itemRare = ITEM_SNOWBALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -10262,11 +10026,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -10290,11 +10050,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_OBLIVIOUS}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -10318,11 +10074,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_OBLIVIOUS}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -10346,11 +10098,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_OBLIVIOUS}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -10368,19 +10116,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 69, .evYield_Defense = 1, - .item1 = ITEM_PEARL, - .item2 = ITEM_BIG_PEARL, + .itemCommon = ITEM_PEARL, + .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -10399,7 +10143,7 @@ const struct BaseStats gBaseStats[] = .expYield = 170, .evYield_Attack = 1, .evYield_Defense = 1, - .item2 = ITEM_DEEP_SEA_TOOTH, + .itemRare = ITEM_DEEP_SEA_TOOTH, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10424,18 +10168,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 170, .evYield_SpAttack = 2, - .item2 = ITEM_DEEP_SEA_SCALE, + .itemRare = ITEM_DEEP_SEA_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_HYDRATION}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -10454,7 +10194,7 @@ const struct BaseStats gBaseStats[] = .expYield = 170, .evYield_HP = 1, .evYield_Defense = 1, - .item2 = ITEM_DEEP_SEA_SCALE, + .itemRare = ITEM_DEEP_SEA_SCALE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, .friendship = 70, @@ -10479,18 +10219,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 225, .expYield = 116, .evYield_Speed = 1, - .item1 = ITEM_HEART_SCALE, + .itemCommon = ITEM_HEART_SCALE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_HYDRATION}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -10508,18 +10244,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 60, .evYield_Attack = 1, - .item2 = ITEM_DRAGON_FANG, + .itemRare = ITEM_DRAGON_FANG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -10537,18 +10269,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 147, .evYield_Defense = 2, - .item2 = ITEM_DRAGON_FANG, + .itemRare = ITEM_DRAGON_FANG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -10566,18 +10294,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 270, .evYield_Attack = 3, - .item2 = ITEM_DRAGON_FANG, + .itemRare = ITEM_DRAGON_FANG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_MOXIE}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -10595,18 +10319,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 3, .expYield = 60, .evYield_Defense = 1, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, - #else - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -10624,18 +10344,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 3, .expYield = 147, .evYield_Defense = 2, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, - #else - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -10653,18 +10369,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 3, .expYield = 270, .evYield_Defense = 3, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, - #else - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -10691,6 +10403,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_STURDY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, + .flags = FLAG_LEGENDARY, }, [SPECIES_REGICE] = @@ -10712,13 +10425,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_ICE_BODY}, - #else - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_REGISTEEL] = @@ -10741,13 +10451,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, - #else - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_LATIAS] = @@ -10772,6 +10479,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_LATIOS] = @@ -10796,6 +10504,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_KYOGRE] = @@ -10820,6 +10529,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_DRIZZLE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_GROUDON] = @@ -10844,6 +10554,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_DROUGHT, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_RAYQUAZA] = @@ -10869,6 +10580,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_AIR_LOCK, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_JIRACHI] = @@ -10884,8 +10596,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 3, .expYield = 270, .evYield_HP = 3, - .item1 = ITEM_STAR_PIECE, - .item2 = ITEM_STAR_PIECE, + .itemCommon = ITEM_STAR_PIECE, + .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, @@ -10895,6 +10607,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_DEOXYS] = @@ -10921,8 +10634,10 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, +#if P_NEW_POKEMON == TRUE [SPECIES_TURTWIG] = { .baseHP = 55, @@ -11016,11 +10731,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_IRON_FIST}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, }, @@ -11045,11 +10756,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_IRON_FIST}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, }, @@ -11075,11 +10782,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_IRON_FIST}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -11103,11 +10806,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -11131,11 +10830,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -11159,11 +10854,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -11187,13 +10878,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RECKLESS}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_STARAVIA] = @@ -11215,13 +10903,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_RECKLESS}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_STARAPTOR] = @@ -11247,11 +10932,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_RECKLESS}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -11275,13 +10956,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SIMPLE, ABILITY_UNAWARE, ABILITY_MOODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SIMPLE, ABILITY_UNAWARE, ABILITY_MOODY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_BIBAREL] = @@ -11303,11 +10981,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SIMPLE, ABILITY_UNAWARE, ABILITY_MOODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SIMPLE, ABILITY_UNAWARE, ABILITY_MOODY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -11325,9 +10999,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 39, .evYield_Defense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_METRONOME, - #endif + .itemRare = ITEM_METRONOME, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -11337,6 +11009,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_RUN_AWAY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_KRICKETUNE] = @@ -11352,22 +11025,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 134, .evYield_Attack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_METRONOME, - #endif + .itemRare = ITEM_METRONOME, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_TECHNICIAN}, - #else - .abilities = {ABILITY_SWARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_SHINX] = @@ -11389,13 +11057,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIVALRY, ABILITY_INTIMIDATE, ABILITY_GUTS}, - #else - .abilities = {ABILITY_NONE, ABILITY_INTIMIDATE, ABILITY_GUTS}, - #endif + .abilities = {ABILITY_RIVALRY, ABILITY_INTIMIDATE, ABILITY_GUTS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_LUXIO] = @@ -11417,11 +11082,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIVALRY, ABILITY_INTIMIDATE, ABILITY_GUTS}, - #else - .abilities = {ABILITY_NONE, ABILITY_INTIMIDATE, ABILITY_GUTS}, - #endif + .abilities = {ABILITY_RIVALRY, ABILITY_INTIMIDATE, ABILITY_GUTS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -11445,11 +11106,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIVALRY, ABILITY_INTIMIDATE, ABILITY_GUTS}, - #else - .abilities = {ABILITY_NONE, ABILITY_INTIMIDATE, ABILITY_GUTS}, - #endif + .abilities = {ABILITY_RIVALRY, ABILITY_INTIMIDATE, ABILITY_GUTS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -11467,18 +11124,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 56, .evYield_SpAttack = 1, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_LEAF_GUARD}, - #else - .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT}, - #endif + .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, @@ -11500,18 +11153,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 232, .evYield_SpAttack = 3, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_TECHNICIAN}, - #else - .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT}, - #endif + .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, @@ -11535,11 +11184,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MOLD_BREAKER, ABILITY_NONE, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MOLD_BREAKER, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -11563,11 +11208,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MOLD_BREAKER, ABILITY_NONE, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MOLD_BREAKER, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -11620,33 +11261,7 @@ const struct BaseStats gBaseStats[] = .noFlip = FALSE, }, - [SPECIES_BURMY] = - { - .baseHP = 40, - .baseAttack = 29, - .baseDefense = 45, - .baseSpeed = 36, - .baseSpAttack = 29, - .baseSpDefense = 45, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, - .catchRate = 120, - .expYield = 45, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, + [SPECIES_BURMY] = BURMY_BASE_STATS(BODY_COLOR_GREEN), [SPECIES_WORMADAM] = { @@ -11661,18 +11276,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 148, .evYield_SpDefense = 2, - .item2 = ITEM_SILVER_POWDER, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = MON_FEMALE, .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -11691,18 +11302,14 @@ const struct BaseStats gBaseStats[] = .expYield = 148, .evYield_Attack = 1, .evYield_SpAttack = 1, - .item2 = ITEM_SILVER_POWDER, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = MON_MALE, .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_TINTED_LENS}, - #else - .abilities = {ABILITY_SWARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_TINTED_LENS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -11720,22 +11327,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 49, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_HONEY, - #endif + .itemRare = ITEM_HONEY, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HONEY_GATHER, ABILITY_NONE, ABILITY_HUSTLE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_HUSTLE}, - #endif + .abilities = {ABILITY_HONEY_GATHER, ABILITY_NONE, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_VESPIQUEN] = @@ -11752,18 +11354,14 @@ const struct BaseStats gBaseStats[] = .expYield = 166, .evYield_Defense = 1, .evYield_SpDefense = 1, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = MON_FEMALE, .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -11853,7 +11451,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 55, .evYield_SpAttack = 1, - .item2 = ITEM_MIRACLE_SEED, + .itemRare = ITEM_MIRACLE_SEED, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11865,90 +11463,11 @@ const struct BaseStats gBaseStats[] = .noFlip = FALSE, }, - [SPECIES_CHERRIM] = - { - .baseHP = 70, - .baseAttack = 60, - .baseDefense = 70, - .baseSpeed = 85, - .baseSpAttack = 87, - .baseSpDefense = 78, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, - .catchRate = 75, - .expYield = 158, - .evYield_SpAttack = 2, - .item2 = ITEM_MIRACLE_SEED, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_GIFT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, + [SPECIES_CHERRIM] = CHERRIM_BASE_STATS(BODY_COLOR_PURPLE), - [SPECIES_SHELLOS] = - { - .baseHP = 76, - .baseAttack = 48, - .baseDefense = 48, - .baseSpeed = 34, - .baseSpAttack = 57, - .baseSpDefense = 62, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, - .catchRate = 190, - .expYield = 65, - .evYield_HP = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_STICKY_HOLD, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, + [SPECIES_SHELLOS] = SHELLOS_BASE_STATS(BODY_COLOR_PURPLE), - [SPECIES_GASTRODON] = - { - .baseHP = 111, - .baseAttack = 83, - .baseDefense = 68, - .baseSpeed = 39, - .baseSpAttack = 92, - .baseSpDefense = 82, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, - .catchRate = 75, - .expYield = 166, - .evYield_HP = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_STICKY_HOLD, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, + [SPECIES_GASTRODON] = GASTRODON_BASE_STATS(BODY_COLOR_PURPLE), [SPECIES_AMBIPOM] = { @@ -11969,11 +11488,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TECHNICIAN, ABILITY_PICKUP, ABILITY_SKILL_LINK}, - #else - .abilities = {ABILITY_NONE, ABILITY_PICKUP}, - #endif + .abilities = {ABILITY_TECHNICIAN, ABILITY_PICKUP, ABILITY_SKILL_LINK}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -11997,11 +11512,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_AFTERMATH, ABILITY_UNBURDEN, ABILITY_FLARE_BOOST}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_AFTERMATH, ABILITY_UNBURDEN, ABILITY_FLARE_BOOST}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -12025,11 +11536,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_AFTERMATH, ABILITY_UNBURDEN, ABILITY_FLARE_BOOST}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_AFTERMATH, ABILITY_UNBURDEN, ABILITY_FLARE_BOOST}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -12053,11 +11560,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_KLUTZ, ABILITY_LIMBER}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE, ABILITY_LIMBER}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_KLUTZ, ABILITY_LIMBER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -12081,11 +11584,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_KLUTZ, ABILITY_LIMBER}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_LIMBER}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_KLUTZ, ABILITY_LIMBER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -12134,11 +11633,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INSOMNIA, ABILITY_SUPER_LUCK, ABILITY_MOXIE}, - #else - .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INSOMNIA, ABILITY_SUPER_LUCK, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -12186,11 +11681,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -12208,7 +11699,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 57, .evYield_SpAttack = 1, - .item2 = ITEM_CLEANSE_TAG, + .itemRare = ITEM_CLEANSE_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -12239,11 +11730,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STENCH, ABILITY_AFTERMATH, ABILITY_KEEN_EYE}, - #else - .abilities = {ABILITY_STENCH, ABILITY_NONE, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_STENCH, ABILITY_AFTERMATH, ABILITY_KEEN_EYE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -12267,11 +11754,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STENCH, ABILITY_AFTERMATH, ABILITY_KEEN_EYE}, - #else - .abilities = {ABILITY_STENCH, ABILITY_NONE, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_STENCH, ABILITY_AFTERMATH, ABILITY_KEEN_EYE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -12289,18 +11772,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 60, .evYield_Defense = 1, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEVITATE, ABILITY_HEATPROOF, ABILITY_HEAVY_METAL}, - #else - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LEVITATE, ABILITY_HEATPROOF, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -12319,18 +11798,14 @@ const struct BaseStats gBaseStats[] = .expYield = 175, .evYield_Defense = 1, .evYield_SpDefense = 1, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEVITATE, ABILITY_HEATPROOF, ABILITY_HEAVY_METAL}, - #else - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LEVITATE, ABILITY_HEATPROOF, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -12354,11 +11829,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -12387,11 +11858,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN}, - #else - .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -12409,20 +11876,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 130, .expYield = 110, .evYield_HP = 1, - #ifdef ITEM_EXPANSION - .item1 = ITEM_OVAL_STONE, - #endif + .itemCommon = ITEM_OVAL_STONE, .genderRatio = MON_FEMALE, .eggCycles = 40, .friendship = 140, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE}, - #endif + .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -12440,20 +11901,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 30, .expYield = 144, .evYield_Attack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_METRONOME, - #endif + .itemRare = ITEM_METRONOME, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -12478,11 +11933,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -12572,19 +12023,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 50, .expYield = 78, .evYield_HP = 1, - .item1 = ITEM_LEFTOVERS, - .item2 = ITEM_LEFTOVERS, + .itemCommon = ITEM_LEFTOVERS, + .itemRare = ITEM_LEFTOVERS, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_THICK_FAT, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_THICK_FAT}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_THICK_FAT, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -12608,11 +12055,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STEADFAST, ABILITY_INNER_FOCUS, ABILITY_PRANKSTER}, - #else - .abilities = {ABILITY_NONE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_STEADFAST, ABILITY_INNER_FOCUS, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -12637,11 +12080,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STEADFAST, ABILITY_INNER_FOCUS, ABILITY_JUSTIFIED}, - #else - .abilities = {ABILITY_NONE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_STEADFAST, ABILITY_INNER_FOCUS, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -12665,13 +12104,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_HIPPOWDON] = @@ -12693,13 +12129,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_SKORUPI] = @@ -12715,18 +12148,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 66, .evYield_Defense = 1, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_SNIPER, ABILITY_KEEN_EYE}, - #else - .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_SNIPER, ABILITY_KEEN_EYE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -12744,18 +12173,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 175, .evYield_Defense = 2, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_SNIPER, ABILITY_KEEN_EYE}, - #else - .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_SNIPER, ABILITY_KEEN_EYE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -12773,20 +12198,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 140, .expYield = 60, .evYield_Attack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_BLACK_SLUDGE, - #endif + .itemRare = ITEM_BLACK_SLUDGE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 100, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ANTICIPATION, ABILITY_DRY_SKIN, ABILITY_POISON_TOUCH}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ANTICIPATION, ABILITY_DRY_SKIN, ABILITY_POISON_TOUCH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -12804,20 +12223,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 172, .evYield_Attack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_BLACK_SLUDGE, - #endif + .itemRare = ITEM_BLACK_SLUDGE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ANTICIPATION, ABILITY_DRY_SKIN, ABILITY_POISON_TOUCH}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ANTICIPATION, ABILITY_DRY_SKIN, ABILITY_POISON_TOUCH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -12865,11 +12278,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_STORM_DRAIN, ABILITY_WATER_VEIL}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_WATER_VEIL}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_STORM_DRAIN, ABILITY_WATER_VEIL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -12893,11 +12302,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_STORM_DRAIN, ABILITY_WATER_VEIL}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_WATER_VEIL}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_STORM_DRAIN, ABILITY_WATER_VEIL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -12939,18 +12344,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 67, .evYield_Attack = 1, - .item2 = ITEM_NEVER_MELT_ICE, + .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_WARNING, ABILITY_NONE, ABILITY_SOUNDPROOF}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_SOUNDPROOF}, - #endif + .abilities = {ABILITY_SNOW_WARNING, ABILITY_NONE, ABILITY_SOUNDPROOF}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -12969,18 +12370,14 @@ const struct BaseStats gBaseStats[] = .expYield = 173, .evYield_Attack = 1, .evYield_SpAttack = 1, - .item2 = ITEM_NEVER_MELT_ICE, + .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_WARNING, ABILITY_NONE, ABILITY_SOUNDPROOF}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_SOUNDPROOF}, - #endif + .abilities = {ABILITY_SNOW_WARNING, ABILITY_NONE, ABILITY_SOUNDPROOF}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -12999,18 +12396,14 @@ const struct BaseStats gBaseStats[] = .expYield = 179, .evYield_Attack = 1, .evYield_Speed = 1, - .item2 = ITEM_QUICK_CLAW, + .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_PICKPOCKET}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -13028,18 +12421,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 30, .expYield = 241, .evYield_SpAttack = 3, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -13057,9 +12446,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 30, .expYield = 180, .evYield_HP = 3, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LAGGING_TAIL, - #endif + .itemRare = ITEM_LAGGING_TAIL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -13090,11 +12477,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_SOLID_ROCK, ABILITY_RECKLESS}, - #else - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_SOLID_ROCK, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -13118,11 +12501,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -13140,20 +12519,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 30, .expYield = 243, .evYield_Attack = 3, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ELECTIRIZER, - #endif + .itemRare = ITEM_ELECTIRIZER, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MOTOR_DRIVE, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, - #endif + .abilities = {ABILITY_MOTOR_DRIVE, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -13171,9 +12544,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 30, .expYield = 243, .evYield_SpAttack = 3, - #ifdef ITEM_EXPANSION - .item2 = ITEM_MAGMARIZER, - #endif + .itemRare = ITEM_MAGMARIZER, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, @@ -13210,11 +12581,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, - #else - .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, - #endif + .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, }, @@ -13232,20 +12599,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 30, .expYield = 180, .evYield_Attack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_WIDE_LENS, - #endif + .itemRare = ITEM_WIDE_LENS, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SPEED_BOOST, ABILITY_TINTED_LENS, ABILITY_FRISK}, - #else - .abilities = {ABILITY_SPEED_BOOST, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SPEED_BOOST, ABILITY_TINTED_LENS, ABILITY_FRISK}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -13269,11 +12630,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEAF_GUARD, ABILITY_LEAF_GUARD, ABILITY_CHLOROPHYLL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_CHLOROPHYLL}, - #endif + .abilities = {ABILITY_LEAF_GUARD, ABILITY_LEAF_GUARD, ABILITY_CHLOROPHYLL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -13297,11 +12654,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SNOW_CLOAK, ABILITY_ICE_BODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SNOW_CLOAK, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -13325,11 +12678,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL, ABILITY_POISON_HEAL}, - #else - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL}, - #endif + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL, ABILITY_POISON_HEAL}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -13353,11 +12702,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, - #else - .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_THICK_FAT}, - #endif + .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -13381,11 +12726,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ADAPTABILITY, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ADAPTABILITY, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -13413,11 +12754,7 @@ const struct BaseStats gBaseStats[] = .eggGroup1 = EGG_GROUP_AMORPHOUS, #endif .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_JUSTIFIED}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -13436,18 +12773,14 @@ const struct BaseStats gBaseStats[] = .expYield = 184, .evYield_Defense = 1, .evYield_SpDefense = 2, - .item2 = ITEM_MAGNET, + .itemRare = ITEM_MAGNET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -13466,18 +12799,14 @@ const struct BaseStats gBaseStats[] = .expYield = 236, .evYield_Defense = 1, .evYield_SpDefense = 2, - .item2 = ITEM_SPELL_TAG, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FRISK}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -13501,11 +12830,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -13558,6 +12883,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_MESPRIT] = @@ -13584,6 +12910,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_AZELF] = @@ -13609,6 +12936,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_DIALGA] = @@ -13630,13 +12958,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_PALKIA] = @@ -13658,13 +12983,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_HEATRAN] = @@ -13689,6 +13011,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE, ABILITY_FLAME_BODY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_REGIGIGAS] = @@ -13710,13 +13033,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SLOW_START, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SLOW_START, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_GIRATINA] = @@ -13738,13 +13058,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_CRESSELIA] = @@ -13769,6 +13086,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_PHIONE] = @@ -13790,13 +13108,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYDRATION, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HYDRATION, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_MANAPHY] = @@ -13818,13 +13133,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYDRATION, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HYDRATION, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_DARKRAI] = @@ -13847,13 +13159,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BAD_DREAMS, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BAD_DREAMS, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_SHAYMIN] = @@ -13869,8 +13178,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 270, .evYield_HP = 3, - .item1 = ITEM_LUM_BERRY, - .item2 = ITEM_LUM_BERRY, + .itemCommon = ITEM_LUM_BERRY, + .itemRare = ITEM_LUM_BERRY, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, @@ -13880,6 +13189,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_ARCEUS] = @@ -13901,13 +13211,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_VICTINI] = @@ -13929,13 +13236,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_VICTORY_STAR, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_VICTORY_STAR, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_SNIVY] = @@ -13957,11 +13261,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CONTRARY}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -13985,11 +13285,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CONTRARY}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -14013,11 +13309,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CONTRARY}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -14089,11 +13381,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_RECKLESS}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, }, @@ -14189,11 +13477,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -14217,11 +13501,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ILLUMINATE, ABILITY_KEEN_EYE, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_ILLUMINATE, ABILITY_KEEN_EYE}, - #endif + .abilities = {ABILITY_ILLUMINATE, ABILITY_KEEN_EYE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -14269,11 +13549,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_SAND_RUSH, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_SAND_RUSH, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -14301,11 +13577,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_SAND_RUSH, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_SAND_RUSH, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -14329,11 +13601,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIMBER, ABILITY_UNBURDEN, ABILITY_PRANKSTER}, - #else - .abilities = {ABILITY_LIMBER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIMBER, ABILITY_UNBURDEN, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -14357,11 +13625,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIMBER, ABILITY_UNBURDEN, ABILITY_PRANKSTER}, - #else - .abilities = {ABILITY_LIMBER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIMBER, ABILITY_UNBURDEN, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -14385,11 +13649,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_OVERGROW}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_OVERGROW}, - #endif + .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_OVERGROW}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -14413,11 +13673,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_OVERGROW}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_OVERGROW}, - #endif + .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_OVERGROW}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -14441,11 +13697,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_BLAZE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_BLAZE}, - #endif + .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_BLAZE}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, }, @@ -14469,11 +13721,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_BLAZE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_BLAZE}, - #endif + .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_BLAZE}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, }, @@ -14497,11 +13745,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_TORRENT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_TORRENT}, - #endif + .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_TORRENT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -14525,11 +13769,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_TORRENT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_TORRENT}, - #endif + .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_TORRENT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -14553,11 +13793,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FOREWARN, ABILITY_SYNCHRONIZE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_NONE, ABILITY_SYNCHRONIZE}, - #endif + .abilities = {ABILITY_FOREWARN, ABILITY_SYNCHRONIZE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -14581,11 +13817,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FOREWARN, ABILITY_SYNCHRONIZE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_NONE, ABILITY_SYNCHRONIZE}, - #endif + .abilities = {ABILITY_FOREWARN, ABILITY_SYNCHRONIZE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -14609,11 +13841,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BIG_PECKS, ABILITY_SUPER_LUCK, ABILITY_RIVALRY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BIG_PECKS, ABILITY_SUPER_LUCK, ABILITY_RIVALRY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -14637,11 +13865,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BIG_PECKS, ABILITY_SUPER_LUCK, ABILITY_RIVALRY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BIG_PECKS, ABILITY_SUPER_LUCK, ABILITY_RIVALRY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -14669,13 +13893,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BIG_PECKS, ABILITY_SUPER_LUCK, ABILITY_RIVALRY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BIG_PECKS, ABILITY_SUPER_LUCK, ABILITY_RIVALRY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_BLITZLE] = @@ -14697,11 +13918,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_MOTOR_DRIVE, ABILITY_SAP_SIPPER}, - #else - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_MOTOR_DRIVE, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -14725,11 +13942,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_MOTOR_DRIVE, ABILITY_SAP_SIPPER}, - #else - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_MOTOR_DRIVE, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -14747,19 +13960,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 56, .evYield_Defense = 1, - .item1 = ITEM_EVERSTONE, - .item2 = ITEM_HARD_STONE, + .itemCommon = ITEM_EVERSTONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_WEAK_ARMOR, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_STURDY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_WEAK_ARMOR, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -14778,19 +13987,15 @@ const struct BaseStats gBaseStats[] = .expYield = 137, .evYield_Attack = 1, .evYield_Defense = 1, - .item1 = ITEM_EVERSTONE, - .item2 = ITEM_HARD_STONE, + .itemCommon = ITEM_EVERSTONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_WEAK_ARMOR, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_STURDY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_WEAK_ARMOR, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -14812,19 +14017,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 232, .evYield_Attack = 3, - .item1 = ITEM_EVERSTONE, - .item2 = ITEM_HARD_STONE, + .itemCommon = ITEM_EVERSTONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_SAND_STREAM, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_STURDY, ABILITY_SAND_STREAM}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_SAND_STREAM, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -14852,11 +14053,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_UNAWARE, ABILITY_KLUTZ, ABILITY_SIMPLE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_UNAWARE, ABILITY_KLUTZ, ABILITY_SIMPLE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -14880,11 +14077,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_UNAWARE, ABILITY_KLUTZ, ABILITY_SIMPLE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_UNAWARE, ABILITY_KLUTZ, ABILITY_SIMPLE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -14908,11 +14101,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_RUSH, ABILITY_SAND_FORCE, ABILITY_MOLD_BREAKER}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_RUSH, ABILITY_SAND_FORCE, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, }, @@ -14936,11 +14125,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_RUSH, ABILITY_SAND_FORCE, ABILITY_MOLD_BREAKER}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_RUSH, ABILITY_SAND_FORCE, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, }, @@ -14958,19 +14143,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 390, .evYield_HP = 2, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_SITRUS_BERRY, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HEALER, ABILITY_REGENERATOR, ABILITY_KLUTZ}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HEALER, ABILITY_REGENERATOR, ABILITY_KLUTZ}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -14994,11 +14175,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, - #else - .abilities = {ABILITY_GUTS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -15022,11 +14199,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, - #else - .abilities = {ABILITY_GUTS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -15050,11 +14223,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, - #else - .abilities = {ABILITY_GUTS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -15078,11 +14247,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_HYDRATION, ABILITY_WATER_ABSORB}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_WATER_ABSORB}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_HYDRATION, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -15106,11 +14271,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_HYDRATION, ABILITY_WATER_ABSORB}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_WATER_ABSORB}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_HYDRATION, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -15138,11 +14299,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_POISON_TOUCH, ABILITY_WATER_ABSORB}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_WATER_ABSORB}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_POISON_TOUCH, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -15160,18 +14317,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 163, .evYield_HP = 2, - .item2 = ITEM_BLACK_BELT, + .itemRare = ITEM_BLACK_BELT, .genderRatio = MON_MALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GUTS, ABILITY_INNER_FOCUS, ABILITY_MOLD_BREAKER}, - #else - .abilities = {ABILITY_GUTS, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_GUTS, ABILITY_INNER_FOCUS, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -15189,18 +14342,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 163, .evYield_Attack = 2, - .item2 = ITEM_BLACK_BELT, + .itemRare = ITEM_BLACK_BELT, .genderRatio = MON_MALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_INNER_FOCUS, ABILITY_MOLD_BREAKER}, - #else - .abilities = {ABILITY_STURDY, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_INNER_FOCUS, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, }, @@ -15218,18 +14367,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 62, .evYield_Defense = 1, - .item2 = ITEM_MENTAL_HERB, + .itemRare = ITEM_MENTAL_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_CHLOROPHYLL, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_SWARM, ABILITY_CHLOROPHYLL}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_CHLOROPHYLL, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -15247,18 +14392,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 133, .evYield_Defense = 2, - .item2 = ITEM_MENTAL_HERB, + .itemRare = ITEM_MENTAL_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEAF_GUARD, ABILITY_CHLOROPHYLL, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_CHLOROPHYLL}, - #endif + .abilities = {ABILITY_LEAF_GUARD, ABILITY_CHLOROPHYLL, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -15280,18 +14421,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 225, .evYield_Attack = 3, - .item2 = ITEM_MENTAL_HERB, + .itemRare = ITEM_MENTAL_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_CHLOROPHYLL, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_SWARM, ABILITY_CHLOROPHYLL}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_CHLOROPHYLL, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -15309,7 +14446,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 52, .evYield_Defense = 1, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -15319,11 +14456,7 @@ const struct BaseStats gBaseStats[] = #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_SPEED_BOOST}, #else - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_QUICK_FEET}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_QUICK_FEET}, #endif .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -15342,7 +14475,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 126, .evYield_Defense = 2, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -15352,11 +14485,7 @@ const struct BaseStats gBaseStats[] = #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_SPEED_BOOST}, #else - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_QUICK_FEET}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_QUICK_FEET}, #endif .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -15379,7 +14508,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 218, .evYield_Speed = 3, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -15389,11 +14518,7 @@ const struct BaseStats gBaseStats[] = #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_SPEED_BOOST}, #else - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_QUICK_FEET}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_QUICK_FEET}, #endif .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -15417,20 +14542,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 56, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ABSORB_BULB, - #endif + .itemRare = ITEM_ABSORB_BULB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRANKSTER, ABILITY_INFILTRATOR, ABILITY_CHLOROPHYLL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_CHLOROPHYLL}, - #endif + .abilities = {ABILITY_PRANKSTER, ABILITY_INFILTRATOR, ABILITY_CHLOROPHYLL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -15453,20 +14572,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 168, .evYield_Speed = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ABSORB_BULB, - #endif + .itemRare = ITEM_ABSORB_BULB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRANKSTER, ABILITY_INFILTRATOR, ABILITY_CHLOROPHYLL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_CHLOROPHYLL}, - #endif + .abilities = {ABILITY_PRANKSTER, ABILITY_INFILTRATOR, ABILITY_CHLOROPHYLL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -15484,20 +14597,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 56, .evYield_SpAttack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ABSORB_BULB, - #endif + .itemRare = ITEM_ABSORB_BULB, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_OWN_TEMPO, ABILITY_LEAF_GUARD}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_OWN_TEMPO, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -15515,20 +14622,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 168, .evYield_SpAttack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ABSORB_BULB, - #endif + .itemRare = ITEM_ABSORB_BULB, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_OWN_TEMPO, ABILITY_LEAF_GUARD}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_OWN_TEMPO, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, @@ -15546,18 +14647,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 25, .expYield = 161, .evYield_Speed = 2, - .item2 = ITEM_DEEP_SEA_TOOTH, + .itemRare = ITEM_DEEP_SEA_TOOTH, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RECKLESS, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RECKLESS, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -15575,18 +14672,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 180, .expYield = 58, .evYield_Attack = 1, - .item2 = ITEM_BLACK_GLASSES, + .itemRare = ITEM_BLACK_GLASSES, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_MOXIE, ABILITY_ANGER_POINT}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_MOXIE, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -15604,18 +14697,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 123, .evYield_Attack = 2, - .item2 = ITEM_BLACK_GLASSES, + .itemRare = ITEM_BLACK_GLASSES, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_MOXIE, ABILITY_ANGER_POINT}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_MOXIE, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -15637,18 +14726,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 234, .evYield_Attack = 3, - .item1 = ITEM_BLACK_GLASSES, + .itemCommon = ITEM_BLACK_GLASSES, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTIMIDATE, ABILITY_MOXIE, ABILITY_ANGER_POINT}, - #else - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTIMIDATE, ABILITY_MOXIE, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -15696,11 +14781,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_ZEN_MODE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_ZEN_MODE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -15718,18 +14799,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 161, .evYield_SpAttack = 2, - .item2 = ITEM_MIRACLE_SEED, + .itemRare = ITEM_MIRACLE_SEED, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_ABSORB, ABILITY_CHLOROPHYLL, ABILITY_STORM_DRAIN}, - #else - .abilities = {ABILITY_WATER_ABSORB, ABILITY_CHLOROPHYLL}, - #endif + .abilities = {ABILITY_WATER_ABSORB, ABILITY_CHLOROPHYLL, ABILITY_STORM_DRAIN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -15747,18 +14824,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 65, .evYield_Defense = 1, - .item2 = ITEM_HARD_STONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_STURDY, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -15780,18 +14853,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 170, .evYield_Defense = 2, - .item2 = ITEM_HARD_STONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STURDY, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_STURDY, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_STURDY, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -15809,20 +14878,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 180, .expYield = 70, .evYield_Attack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SHED_SHELL, - #endif + .itemRare = ITEM_SHED_SHELL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 35, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHED_SKIN, ABILITY_MOXIE, ABILITY_INTIMIDATE}, - #else - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_INTIMIDATE}, - #endif + .abilities = {ABILITY_SHED_SKIN, ABILITY_MOXIE, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -15841,20 +14904,14 @@ const struct BaseStats gBaseStats[] = .expYield = 171, .evYield_Defense = 1, .evYield_SpDefense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SHED_SHELL, - #endif + .itemRare = ITEM_SHED_SHELL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHED_SKIN, ABILITY_MOXIE, ABILITY_INTIMIDATE}, - #else - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_INTIMIDATE}, - #endif + .abilities = {ABILITY_SHED_SKIN, ABILITY_MOXIE, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -15878,11 +14935,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WONDER_SKIN, ABILITY_MAGIC_GUARD, ABILITY_TINTED_LENS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_WONDER_SKIN, ABILITY_MAGIC_GUARD, ABILITY_TINTED_LENS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -15900,18 +14953,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 61, .evYield_Defense = 1, - .item2 = ITEM_SPELL_TAG, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MUMMY, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MUMMY, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -15929,18 +14978,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 169, .evYield_Defense = 2, - .item2 = ITEM_SPELL_TAG, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MUMMY, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MUMMY, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -15964,11 +15009,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOLID_ROCK, ABILITY_STURDY, ABILITY_SWIFT_SWIM}, - #else - .abilities = {ABILITY_NONE, ABILITY_STURDY, ABILITY_SWIFT_SWIM}, - #endif + .abilities = {ABILITY_SOLID_ROCK, ABILITY_STURDY, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -15992,11 +15033,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOLID_ROCK, ABILITY_STURDY, ABILITY_SWIFT_SWIM}, - #else - .abilities = {ABILITY_NONE, ABILITY_STURDY, ABILITY_SWIFT_SWIM}, - #endif + .abilities = {ABILITY_SOLID_ROCK, ABILITY_STURDY, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -16020,11 +15057,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DEFEATIST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_DEFEATIST, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -16048,11 +15081,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DEFEATIST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_DEFEATIST, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -16070,18 +15099,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 66, .evYield_Speed = 1, - .item2 = ITEM_SILK_SCARF, + .itemRare = ITEM_SILK_SCARF, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_AFTERMATH}, - #else - .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, - #endif + .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -16099,21 +15124,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 166, .evYield_Attack = 2, - .item1 = ITEM_SILK_SCARF, - #ifdef ITEM_EXPANSION - .item2 = ITEM_BLACK_SLUDGE, - #endif + .itemCommon = ITEM_SILK_SCARF, + .itemRare = ITEM_BLACK_SLUDGE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STENCH, ABILITY_WEAK_ARMOR, ABILITY_AFTERMATH}, - #else - .abilities = {ABILITY_STENCH, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STENCH, ABILITY_WEAK_ARMOR, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, @@ -16137,11 +15156,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -16165,11 +15180,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -16193,11 +15204,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_TECHNICIAN, ABILITY_SKILL_LINK}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_TECHNICIAN, ABILITY_SKILL_LINK}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -16221,11 +15228,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_TECHNICIAN, ABILITY_SKILL_LINK}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_TECHNICIAN, ABILITY_SKILL_LINK}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, }, @@ -16249,11 +15252,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_SHADOW_TAG}, - #endif + .abilities = {ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -16277,11 +15276,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_SHADOW_TAG}, - #endif + .abilities = {ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -16305,11 +15300,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_SHADOW_TAG}, - #endif + .abilities = {ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -16333,11 +15324,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERCOAT, ABILITY_MAGIC_GUARD, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERCOAT, ABILITY_MAGIC_GUARD, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, @@ -16361,11 +15348,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERCOAT, ABILITY_MAGIC_GUARD, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERCOAT, ABILITY_MAGIC_GUARD, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -16389,11 +15372,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERCOAT, ABILITY_MAGIC_GUARD, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERCOAT, ABILITY_MAGIC_GUARD, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -16417,11 +15396,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_BIG_PECKS, ABILITY_HYDRATION}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_BIG_PECKS, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -16445,11 +15420,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_BIG_PECKS, ABILITY_HYDRATION}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_BIG_PECKS, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -16467,18 +15438,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 61, .evYield_SpAttack = 1, - .item2 = ITEM_NEVER_MELT_ICE, + .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ICE_BODY, ABILITY_SNOW_CLOAK, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ICE_BODY, ABILITY_SNOW_CLOAK, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -16496,18 +15463,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 138, .evYield_SpAttack = 2, - .item2 = ITEM_NEVER_MELT_ICE, + .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ICE_BODY, ABILITY_SNOW_CLOAK, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ICE_BODY, ABILITY_SNOW_CLOAK, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -16525,77 +15488,21 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 241, .evYield_SpAttack = 3, - .item1 = ITEM_NEVER_MELT_ICE, + .itemCommon = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ICE_BODY, ABILITY_SNOW_WARNING, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ICE_BODY, ABILITY_SNOW_WARNING, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, - [SPECIES_DEERLING] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 50, - .baseSpeed = 75, - .baseSpAttack = 40, - .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GRASS, - .catchRate = 190, - .expYield = 67, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_SERENE_GRACE}, - #endif - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - }, + [SPECIES_DEERLING] = DEERLING_BASE_STATS(BODY_COLOR_PINK), - [SPECIES_SAWSBUCK] = - { - .baseHP = 80, - .baseAttack = 100, - .baseDefense = 70, - .baseSpeed = 95, - .baseSpAttack = 60, - .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GRASS, - .catchRate = 75, - .expYield = 166, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_SERENE_GRACE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, + [SPECIES_SAWSBUCK] = SAWSBUCK_BASE_STATS, [SPECIES_EMOLGA] = { @@ -16616,11 +15523,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_MOTOR_DRIVE}, - #else - .abilities = {ABILITY_STATIC, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_MOTOR_DRIVE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -16644,11 +15547,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_SHED_SKIN, ABILITY_NO_GUARD}, - #else - .abilities = {ABILITY_SWARM, ABILITY_SHED_SKIN}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_SHED_SKIN, ABILITY_NO_GUARD}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -16672,11 +15571,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_SHELL_ARMOR, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_SWARM, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_SHELL_ARMOR, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -16694,19 +15589,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 59, .evYield_HP = 1, - .item1 = ITEM_TINY_MUSHROOM, - .item2 = ITEM_BIG_MUSHROOM, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -16724,19 +15615,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 162, .evYield_HP = 2, - .item1 = ITEM_TINY_MUSHROOM, - .item2 = ITEM_BIG_MUSHROOM, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, }, @@ -16760,13 +15647,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_ABSORB, ABILITY_CURSED_BODY, ABILITY_DAMP}, - #else - .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE, ABILITY_DAMP}, - #endif + .abilities = {ABILITY_WATER_ABSORB, ABILITY_CURSED_BODY, ABILITY_DAMP}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_JELLICENT] = @@ -16788,13 +15672,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_ABSORB, ABILITY_CURSED_BODY, ABILITY_DAMP}, - #else - .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE, ABILITY_DAMP}, - #endif + .abilities = {ABILITY_WATER_ABSORB, ABILITY_CURSED_BODY, ABILITY_DAMP}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, [SPECIES_ALOMOMOLA] = @@ -16816,11 +15697,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HEALER, ABILITY_HYDRATION, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HEALER, ABILITY_HYDRATION, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -16844,11 +15721,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_COMPOUND_EYES, ABILITY_UNNERVE, ABILITY_SWARM}, - #else - .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_SWARM}, - #endif + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_UNNERVE, ABILITY_SWARM}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -16872,11 +15745,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_COMPOUND_EYES, ABILITY_UNNERVE, ABILITY_SWARM}, - #else - .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_SWARM}, - #endif + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_UNNERVE, ABILITY_SWARM}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -16894,20 +15763,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 61, .evYield_Defense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_STICKY_BARB, - #endif + .itemRare = ITEM_STICKY_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_IRON_BARBS, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_IRON_BARBS, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -16925,20 +15788,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 171, .evYield_Defense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_STICKY_BARB, - #endif + .itemRare = ITEM_STICKY_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_IRON_BARBS, ABILITY_NONE, ABILITY_ANTICIPATION}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_IRON_BARBS, ABILITY_NONE, ABILITY_ANTICIPATION}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -17106,11 +15963,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TELEPATHY, ABILITY_SYNCHRONIZE, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_NONE, ABILITY_SYNCHRONIZE}, - #endif + .abilities = {ABILITY_TELEPATHY, ABILITY_SYNCHRONIZE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -17134,11 +15987,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TELEPATHY, ABILITY_SYNCHRONIZE, ABILITY_ANALYTIC}, - #else - .abilities = {ABILITY_NONE, ABILITY_SYNCHRONIZE}, - #endif + .abilities = {ABILITY_TELEPATHY, ABILITY_SYNCHRONIZE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -17163,11 +16012,7 @@ const struct BaseStats gBaseStats[] = .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, #if P_UPDATED_ABILITIES >= GEN_6 - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY}, - #endif + .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_INFILTRATOR}, #else .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_SHADOW_TAG}, #endif @@ -17195,11 +16040,7 @@ const struct BaseStats gBaseStats[] = .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, #if P_UPDATED_ABILITIES >= GEN_6 - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY}, - #endif + .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_INFILTRATOR}, #else .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_SHADOW_TAG}, #endif @@ -17227,11 +16068,7 @@ const struct BaseStats gBaseStats[] = .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, #if P_UPDATED_ABILITIES >= GEN_6 - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY}, - #endif + .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_INFILTRATOR}, #else .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_SHADOW_TAG}, #endif @@ -17258,11 +16095,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIVALRY, ABILITY_MOLD_BREAKER, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RIVALRY, ABILITY_MOLD_BREAKER, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -17286,11 +16119,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIVALRY, ABILITY_MOLD_BREAKER, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RIVALRY, ABILITY_MOLD_BREAKER, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -17314,11 +16143,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIVALRY, ABILITY_MOLD_BREAKER, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RIVALRY, ABILITY_MOLD_BREAKER, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -17342,11 +16167,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SLUSH_RUSH, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SLUSH_RUSH, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -17374,11 +16195,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SLUSH_RUSH, ABILITY_SWIFT_SWIM}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_SWIFT_SWIM}, - #endif + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SLUSH_RUSH, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -17401,7 +16218,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 25, .expYield = 180, .evYield_SpDefense = 2, - .item2 = ITEM_NEVER_MELT_ICE, + .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, .friendship = 70, @@ -17432,11 +16249,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYDRATION, ABILITY_SHELL_ARMOR, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_SHELL_ARMOR}, - #endif + .abilities = {ABILITY_HYDRATION, ABILITY_SHELL_ARMOR, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -17460,11 +16273,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYDRATION, ABILITY_STICKY_HOLD, ABILITY_UNBURDEN}, - #else - .abilities = {ABILITY_NONE, ABILITY_STICKY_HOLD}, - #endif + .abilities = {ABILITY_HYDRATION, ABILITY_STICKY_HOLD, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -17482,7 +16291,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 165, .evYield_HP = 2, - .item2 = ITEM_SOFT_SAND, + .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -17513,11 +16322,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_REGENERATOR, ABILITY_RECKLESS}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_REGENERATOR, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -17541,11 +16346,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_REGENERATOR, ABILITY_RECKLESS}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_REGENERATOR, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -17563,18 +16364,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 170, .evYield_Attack = 2, - .item2 = ITEM_DRAGON_FANG, + .itemRare = ITEM_DRAGON_FANG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ROUGH_SKIN, ABILITY_SHEER_FORCE, ABILITY_MOLD_BREAKER}, - #else - .abilities = {ABILITY_ROUGH_SKIN, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ROUGH_SKIN, ABILITY_SHEER_FORCE, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -17592,20 +16389,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 61, .evYield_Attack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LIGHT_CLAY, - #endif + .itemRare = ITEM_LIGHT_CLAY, .genderRatio = MON_GENDERLESS, .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_IRON_FIST, ABILITY_KLUTZ, ABILITY_NO_GUARD}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_IRON_FIST, ABILITY_KLUTZ, ABILITY_NO_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, @@ -17623,20 +16414,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 169, .evYield_Attack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LIGHT_CLAY, - #endif + .itemRare = ITEM_LIGHT_CLAY, .genderRatio = MON_GENDERLESS, .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_IRON_FIST, ABILITY_KLUTZ, ABILITY_NO_GUARD}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_IRON_FIST, ABILITY_KLUTZ, ABILITY_NO_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, @@ -17660,11 +16445,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DEFIANT, ABILITY_INNER_FOCUS, ABILITY_PRESSURE}, - #else - .abilities = {ABILITY_NONE, ABILITY_INNER_FOCUS, ABILITY_PRESSURE}, - #endif + .abilities = {ABILITY_DEFIANT, ABILITY_INNER_FOCUS, ABILITY_PRESSURE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -17688,11 +16469,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DEFIANT, ABILITY_INNER_FOCUS, ABILITY_PRESSURE}, - #else - .abilities = {ABILITY_NONE, ABILITY_INNER_FOCUS, ABILITY_PRESSURE}, - #endif + .abilities = {ABILITY_DEFIANT, ABILITY_INNER_FOCUS, ABILITY_PRESSURE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -17716,11 +16493,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RECKLESS, ABILITY_SAP_SIPPER, ABILITY_SOUNDPROOF}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_SOUNDPROOF}, - #endif + .abilities = {ABILITY_RECKLESS, ABILITY_SAP_SIPPER, ABILITY_SOUNDPROOF}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -17744,11 +16517,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_HUSTLE}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_HUSTLE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -17772,11 +16541,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -17800,11 +16565,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BIG_PECKS, ABILITY_OVERCOAT, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BIG_PECKS, ABILITY_OVERCOAT, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -17828,11 +16589,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BIG_PECKS, ABILITY_OVERCOAT, ABILITY_WEAK_ARMOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BIG_PECKS, ABILITY_OVERCOAT, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -17856,11 +16613,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GLUTTONY, ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE}, - #else - .abilities = {ABILITY_NONE, ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE}, - #endif + .abilities = {ABILITY_GLUTTONY, ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -17998,8 +16751,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 15, .expYield = 248, .evYield_SpAttack = 3, - .item1 = ITEM_SILVER_POWDER, - .item2 = ITEM_SILVER_POWDER, + .itemCommon = ITEM_SILVER_POWDER, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, @@ -18030,13 +16783,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_TERRAKION] = @@ -18058,13 +16808,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_VIRIZION] = @@ -18086,13 +16833,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_TORNADUS] = @@ -18114,13 +16858,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_THUNDURUS] = @@ -18142,13 +16883,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_RESHIRAM] = @@ -18170,13 +16908,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TURBOBLAZE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TURBOBLAZE, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_ZEKROM] = @@ -18198,13 +16933,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TERAVOLT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TERAVOLT, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_LANDORUS] = @@ -18226,13 +16958,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_FORCE, ABILITY_NONE, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_FORCE, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_KYUREM] = @@ -18259,6 +16988,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, + .flags = FLAG_LEGENDARY, }, [SPECIES_KELDEO] = @@ -18280,13 +17010,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_MELOETTA] = @@ -18304,8 +17031,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .item1 = ITEM_STAR_PIECE, - .item2 = ITEM_STAR_PIECE, + .itemCommon = ITEM_STAR_PIECE, + .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, @@ -18315,37 +17042,10 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, + .flags = FLAG_MYTHICAL, }, - [SPECIES_GENESECT] = - { - .baseHP = 71, - .baseAttack = 120, - .baseDefense = 95, - .baseSpeed = 99, - .baseSpAttack = 120, - .baseSpDefense = 95, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, - .catchRate = 3, - .expYield = 270, - .evYield_Attack = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DOWNLOAD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, + [SPECIES_GENESECT] = GENESECT_BASE_STATS, [SPECIES_CHESPIN] = { @@ -18366,11 +17066,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_BULLETPROOF}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -18394,11 +17090,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_BULLETPROOF}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -18422,11 +17114,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_BULLETPROOF}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -18450,11 +17138,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_MAGICIAN}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_MAGICIAN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -18478,11 +17162,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_MAGICIAN}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_MAGICIAN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -18506,11 +17186,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_MAGICIAN}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_MAGICIAN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -18534,11 +17210,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_PROTEAN}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_PROTEAN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -18562,11 +17234,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_PROTEAN}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_PROTEAN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -18590,11 +17258,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_PROTEAN}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_PROTEAN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, }, @@ -18618,11 +17282,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_CHEEK_POUCH, ABILITY_HUGE_POWER}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_HUGE_POWER}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_CHEEK_POUCH, ABILITY_HUGE_POWER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -18646,11 +17306,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_CHEEK_POUCH, ABILITY_HUGE_POWER}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_HUGE_POWER}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_CHEEK_POUCH, ABILITY_HUGE_POWER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -18674,11 +17330,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BIG_PECKS, ABILITY_NONE, ABILITY_GALE_WINGS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BIG_PECKS, ABILITY_NONE, ABILITY_GALE_WINGS}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -18702,11 +17354,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_GALE_WINGS}, - #else - .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_GALE_WINGS}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -18730,11 +17378,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_GALE_WINGS}, - #else - .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_GALE_WINGS}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -18758,11 +17402,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif + .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -18786,44 +17426,12 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, - [SPECIES_VIVILLON] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, + [SPECIES_VIVILLON] = VIVILLON_BASE_STATS(BODY_COLOR_WHITE), [SPECIES_LITLEO] = { @@ -18844,11 +17452,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIVALRY, ABILITY_UNNERVE, ABILITY_MOXIE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RIVALRY, ABILITY_UNNERVE, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -18872,98 +17476,17 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIVALRY, ABILITY_UNNERVE, ABILITY_MOXIE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RIVALRY, ABILITY_UNNERVE, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, }, - [SPECIES_FLABEBE] = - { - .baseHP = 44, - .baseAttack = 38, - .baseDefense = 39, - .baseSpeed = 42, - .baseSpAttack = 61, - .baseSpDefense = 79, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 225, - .expYield = 61, - .evYield_SpDefense = 1, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, + [SPECIES_FLABEBE] = FLABEBE_BASE_STATS, - [SPECIES_FLOETTE] = - { - .baseHP = 54, - .baseAttack = 45, - .baseDefense = 47, - .baseSpeed = 52, - .baseSpAttack = 75, - .baseSpDefense = 98, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 120, - .expYield = 130, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, + [SPECIES_FLOETTE] = FLOETTE_BASE_STATS, - [SPECIES_FLORGES] = - { - .baseHP = 78, - .baseAttack = 65, - .baseDefense = 68, - .baseSpeed = 75, - .baseSpAttack = 112, - .baseSpDefense = 154, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 45, - .expYield = 248, - .evYield_SpDefense = 3, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, + [SPECIES_FLORGES] = FLORGES_BASE_STATS, [SPECIES_SKIDDO] = { @@ -18984,11 +17507,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAP_SIPPER, ABILITY_NONE, ABILITY_GRASS_PELT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAP_SIPPER, ABILITY_NONE, ABILITY_GRASS_PELT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -19012,11 +17531,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAP_SIPPER, ABILITY_NONE, ABILITY_GRASS_PELT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAP_SIPPER, ABILITY_NONE, ABILITY_GRASS_PELT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -19034,18 +17549,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 220, .expYield = 70, .evYield_Attack = 1, - .item2 = ITEM_MENTAL_HERB, + .itemRare = ITEM_MENTAL_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_IRON_FIST, ABILITY_MOLD_BREAKER, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_IRON_FIST, ABILITY_MOLD_BREAKER, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -19063,49 +17574,19 @@ const struct BaseStats gBaseStats[] = .catchRate = 65, .expYield = 173, .evYield_Attack = 2, - .item2 = ITEM_MENTAL_HERB, + .itemRare = ITEM_MENTAL_HERB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_IRON_FIST, ABILITY_MOLD_BREAKER, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_IRON_FIST, ABILITY_MOLD_BREAKER, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, - [SPECIES_FURFROU] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 60, - .baseSpeed = 102, - .baseSpAttack = 65, - .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 160, - .expYield = 165, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, + [SPECIES_FURFROU] = FURFROU_BASE_STATS(FLIP), [SPECIES_ESPURR] = { @@ -19126,11 +17607,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_OWN_TEMPO}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_OWN_TEMPO}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -19154,11 +17631,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_PRANKSTER}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -19182,11 +17655,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NO_GUARD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_NO_GUARD, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -19210,11 +17679,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NO_GUARD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_NO_GUARD, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -19244,11 +17709,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STANCE_CHANGE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STANCE_CHANGE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -19272,11 +17733,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HEALER, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HEALER, ABILITY_NONE, ABILITY_AROMA_VEIL}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -19300,11 +17757,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HEALER, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HEALER, ABILITY_NONE, ABILITY_AROMA_VEIL}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -19328,11 +17781,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_UNBURDEN}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -19356,11 +17805,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_UNBURDEN}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -19384,11 +17829,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CONTRARY, ABILITY_SUCTION_CUPS, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_SUCTION_CUPS}, - #endif + .abilities = {ABILITY_CONTRARY, ABILITY_SUCTION_CUPS, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -19412,11 +17853,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CONTRARY, ABILITY_SUCTION_CUPS, ABILITY_INFILTRATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_SUCTION_CUPS}, - #endif + .abilities = {ABILITY_CONTRARY, ABILITY_SUCTION_CUPS, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -19440,11 +17877,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_SNIPER, ABILITY_PICKPOCKET}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_SNIPER, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -19468,11 +17901,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_SNIPER, ABILITY_PICKPOCKET}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_SNIPER, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, }, @@ -19496,11 +17925,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_POISON_TOUCH, ABILITY_ADAPTABILITY}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_POISON_TOUCH, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -19524,11 +17949,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_POINT, ABILITY_POISON_TOUCH, ABILITY_ADAPTABILITY}, - #else - .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_POISON_POINT, ABILITY_POISON_TOUCH, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -19552,11 +17973,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, }, @@ -19580,11 +17997,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, }, @@ -19608,11 +18021,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DRY_SKIN, ABILITY_SAND_VEIL, ABILITY_SOLAR_POWER}, - #else - .abilities = {ABILITY_NONE, ABILITY_SAND_VEIL}, - #endif + .abilities = {ABILITY_DRY_SKIN, ABILITY_SAND_VEIL, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -19637,11 +18046,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DRY_SKIN, ABILITY_SAND_VEIL, ABILITY_SOLAR_POWER}, - #else - .abilities = {ABILITY_NONE, ABILITY_SAND_VEIL}, - #endif + .abilities = {ABILITY_DRY_SKIN, ABILITY_SAND_VEIL, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -19665,11 +18070,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STRONG_JAW, ABILITY_NONE, ABILITY_STURDY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_STRONG_JAW, ABILITY_NONE, ABILITY_STURDY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -19693,11 +18094,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STRONG_JAW, ABILITY_NONE, ABILITY_ROCK_HEAD}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_ROCK_HEAD}, - #endif + .abilities = {ABILITY_STRONG_JAW, ABILITY_NONE, ABILITY_ROCK_HEAD}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -19721,11 +18118,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_REFRIGERATE, ABILITY_NONE, ABILITY_SNOW_WARNING}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_REFRIGERATE, ABILITY_NONE, ABILITY_SNOW_WARNING}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -19749,11 +18142,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_REFRIGERATE, ABILITY_NONE, ABILITY_SNOW_WARNING}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_REFRIGERATE, ABILITY_NONE, ABILITY_SNOW_WARNING}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -19777,11 +18166,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CUTE_CHARM, ABILITY_CUTE_CHARM, ABILITY_PIXILATE}, - #else - .abilities = {ABILITY_CUTE_CHARM, ABILITY_CUTE_CHARM}, - #endif + .abilities = {ABILITY_CUTE_CHARM, ABILITY_CUTE_CHARM, ABILITY_PIXILATE}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, }, @@ -19799,7 +18184,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 100, .expYield = 175, .evYield_Attack = 2, - .item2 = ITEM_KINGS_ROCK, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -19810,11 +18195,7 @@ const struct BaseStats gBaseStats[] = .eggGroup1 = EGG_GROUP_HUMAN_LIKE, #endif .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIMBER, ABILITY_UNBURDEN, ABILITY_MOLD_BREAKER}, - #else - .abilities = {ABILITY_LIMBER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIMBER, ABILITY_UNBURDEN, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -19838,11 +18219,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHEEK_POUCH, ABILITY_PICKUP, ABILITY_PLUS}, - #else - .abilities = {ABILITY_NONE, ABILITY_PICKUP, ABILITY_PLUS}, - #endif + .abilities = {ABILITY_CHEEK_POUCH, ABILITY_PICKUP, ABILITY_PLUS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -19885,20 +18262,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 60, .evYield_SpDefense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SHED_SHELL, - #endif + .itemRare = ITEM_SHED_SHELL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -19916,20 +18287,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 158, .evYield_SpDefense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SHED_SHELL, - #endif + .itemRare = ITEM_SHED_SHELL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -19953,11 +18318,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -19981,11 +18342,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_MAGICIAN}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_MAGICIAN}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, }, @@ -20009,11 +18366,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NATURAL_CURE, ABILITY_FRISK, ABILITY_HARVEST}, - #else - .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_NATURAL_CURE, ABILITY_FRISK, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -20037,11 +18390,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NATURAL_CURE, ABILITY_FRISK, ABILITY_HARVEST}, - #else - .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_NATURAL_CURE, ABILITY_FRISK, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -20054,24 +18403,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 51, .baseSpAttack = 44, .baseSpDefense = 55, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, - .catchRate = 120, - .expYield = 67, - .evYield_Defense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_INSOMNIA}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + PUMKPABOO_MISC_STATS, }, [SPECIES_GOURGEIST] = @@ -20082,24 +18414,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 84, .baseSpAttack = 58, .baseSpDefense = 75, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, - .catchRate = 60, - .expYield = 173, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_INSOMNIA}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + GOURGEIST_MISC_STATS, }, [SPECIES_BERGMITE] = @@ -20125,11 +18440,7 @@ const struct BaseStats gBaseStats[] = #else .eggGroup2 = EGG_GROUP_MINERAL, #endif - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OWN_TEMPO, ABILITY_ICE_BODY, ABILITY_STURDY}, - #else - .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_OWN_TEMPO, ABILITY_ICE_BODY, ABILITY_STURDY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -20157,11 +18468,7 @@ const struct BaseStats gBaseStats[] = #else .eggGroup2 = EGG_GROUP_MINERAL, #endif - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OWN_TEMPO, ABILITY_ICE_BODY, ABILITY_STURDY}, - #else - .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_OWN_TEMPO, ABILITY_ICE_BODY, ABILITY_STURDY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -20189,11 +18496,7 @@ const struct BaseStats gBaseStats[] = #else .eggGroup2 = EGG_GROUP_FLYING, #endif - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FRISK, ABILITY_INFILTRATOR, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FRISK, ABILITY_INFILTRATOR, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -20221,42 +18524,12 @@ const struct BaseStats gBaseStats[] = #else .eggGroup2 = EGG_GROUP_FLYING, #endif - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FRISK, ABILITY_INFILTRATOR, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FRISK, ABILITY_INFILTRATOR, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, - [SPECIES_XERNEAS] = - { - .baseHP = 126, - .baseAttack = 131, - .baseDefense = 95, - .baseSpeed = 99, - .baseSpAttack = 131, - .baseSpDefense = 98, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 45, - .expYield = 306, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FAIRY_AURA, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, + [SPECIES_XERNEAS] = XERNEAS_BASE_STATS, [SPECIES_YVELTAL] = { @@ -20277,42 +18550,13 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DARK_AURA, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_DARK_AURA, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, - [SPECIES_ZYGARDE] = - { - .baseHP = 108, - .baseAttack = 100, - .baseDefense = 121, - .baseSpeed = 95, - .baseSpAttack = 81, - .baseSpDefense = 95, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GROUND, - .catchRate = 3, - .expYield = 270, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_AURA_BREAK, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, - }, + [SPECIES_ZYGARDE] = ZYGARDE_50_BASE_STATS(ABILITY_AURA_BREAK), [SPECIES_DIANCIE] = { @@ -20337,6 +18581,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_HOOPA] = @@ -20358,13 +18603,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGICIAN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MAGICIAN, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_VOLCANION] = @@ -20389,6 +18631,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_ROWLET] = @@ -20410,11 +18653,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -20438,11 +18677,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, }, @@ -20466,11 +18701,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -20566,11 +18797,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_LIQUID_VOICE}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_LIQUID_VOICE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -20594,11 +18821,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_LIQUID_VOICE}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_LIQUID_VOICE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -20622,11 +18845,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_LIQUID_VOICE}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_LIQUID_VOICE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -20644,18 +18863,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 53, .evYield_Attack = 1, - .item2 = ITEM_ORAN_BERRY, + .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_SKILL_LINK, ABILITY_PICKUP}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_PICKUP}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_SKILL_LINK, ABILITY_PICKUP}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -20673,18 +18888,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 124, .evYield_Attack = 2, - .item2 = ITEM_SITRUS_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_SKILL_LINK, ABILITY_PICKUP}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_PICKUP}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_SKILL_LINK, ABILITY_PICKUP}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -20702,18 +18913,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 218, .evYield_Attack = 3, - .item2 = ITEM_RAWST_BERRY, + .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_SKILL_LINK, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_SKILL_LINK, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -20731,18 +18938,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 51, .evYield_Attack = 1, - .item2 = ITEM_PECHA_BERRY, + .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STAKEOUT, ABILITY_STRONG_JAW, ABILITY_ADAPTABILITY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STAKEOUT, ABILITY_STRONG_JAW, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -20760,18 +18963,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 127, .expYield = 146, .evYield_Attack = 2, - .item2 = ITEM_PECHA_BERRY, + .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STAKEOUT, ABILITY_STRONG_JAW, ABILITY_ADAPTABILITY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STAKEOUT, ABILITY_STRONG_JAW, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -20813,20 +19012,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 140, .evYield_Defense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_CELL_BATTERY, - #endif + .itemRare = ITEM_CELL_BATTERY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BATTERY, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BATTERY, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -20868,18 +19061,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 225, .expYield = 68, .evYield_Attack = 1, - .item2 = ITEM_ASPEAR_BERRY, + .itemRare = ITEM_ASPEAR_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_IRON_FIST, ABILITY_ANGER_POINT}, - #else - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_IRON_FIST, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -20897,52 +19086,19 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 167, .evYield_Attack = 2, - .item2 = ITEM_CHERI_BERRY, + .itemRare = ITEM_CHERI_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_IRON_FIST, ABILITY_ANGER_POINT}, - #else - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_IRON_FIST, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, - [SPECIES_ORICORIO] = - { - .baseHP = 75, - .baseAttack = 70, - .baseDefense = 70, - .baseSpeed = 93, - .baseSpAttack = 98, - .baseSpDefense = 70, - .type1 = TYPE_FIRE, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 167, - .evYield_SpAttack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_HONEY, - #endif - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DANCER, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, + [SPECIES_ORICORIO] = ORICORIO_BASE_STATS(TYPE_FIRE, BODY_COLOR_RED), [SPECIES_CUTIEFLY] = { @@ -20957,20 +19113,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 61, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_HONEY, - #endif + .itemRare = ITEM_HONEY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HONEY_GATHER, ABILITY_SHIELD_DUST, ABILITY_SWEET_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_SHIELD_DUST}, - #endif + .abilities = {ABILITY_HONEY_GATHER, ABILITY_SHIELD_DUST, ABILITY_SWEET_VEIL}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -20988,51 +19138,19 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 162, .evYield_Speed = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_HONEY, - #endif + .itemRare = ITEM_HONEY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HONEY_GATHER, ABILITY_SHIELD_DUST, ABILITY_SWEET_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_SHIELD_DUST}, - #endif + .abilities = {ABILITY_HONEY_GATHER, ABILITY_SHIELD_DUST, ABILITY_SWEET_VEIL}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, - [SPECIES_ROCKRUFF] = - { - .baseHP = 45, - .baseAttack = 65, - .baseDefense = 40, - .baseSpeed = 60, - .baseSpAttack = 30, - .baseSpDefense = 40, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, - .catchRate = 190, - .expYield = 56, - .evYield_Attack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_STEADFAST}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, + [SPECIES_ROCKRUFF] = ROCKRUFF_BASE_STATS(ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_STEADFAST), [SPECIES_LYCANROC] = { @@ -21053,11 +19171,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_SAND_RUSH, ABILITY_STEADFAST}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_SAND_RUSH, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -21081,11 +19195,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SCHOOLING, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SCHOOLING, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -21103,18 +19213,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 61, .evYield_Defense = 1, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MERCILESS, ABILITY_LIMBER, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_LIMBER}, - #endif + .abilities = {ABILITY_MERCILESS, ABILITY_LIMBER, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -21132,18 +19238,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 173, .evYield_Defense = 2, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MERCILESS, ABILITY_LIMBER, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_LIMBER}, - #endif + .abilities = {ABILITY_MERCILESS, ABILITY_LIMBER, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -21161,20 +19263,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 77, .evYield_Attack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LIGHT_CLAY, - #endif + .itemRare = ITEM_LIGHT_CLAY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OWN_TEMPO, ABILITY_STAMINA, ABILITY_INNER_FOCUS}, - #else - .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_OWN_TEMPO, ABILITY_STAMINA, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -21192,20 +19288,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 175, .evYield_Attack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LIGHT_CLAY, - #endif + .itemRare = ITEM_LIGHT_CLAY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OWN_TEMPO, ABILITY_STAMINA, ABILITY_INNER_FOCUS}, - #else - .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_INNER_FOCUS}, - #endif + .abilities = {ABILITY_OWN_TEMPO, ABILITY_STAMINA, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -21223,18 +19313,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 200, .expYield = 54, .evYield_SpDefense = 1, - .item2 = ITEM_MYSTIC_WATER, + .itemRare = ITEM_MYSTIC_WATER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_BUBBLE, ABILITY_NONE, ABILITY_WATER_ABSORB}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_WATER_ABSORB}, - #endif + .abilities = {ABILITY_WATER_BUBBLE, ABILITY_NONE, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -21252,18 +19338,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 100, .expYield = 159, .evYield_SpDefense = 2, - .item2 = ITEM_MYSTIC_WATER, + .itemRare = ITEM_MYSTIC_WATER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_BUBBLE, ABILITY_NONE, ABILITY_WATER_ABSORB}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_WATER_ABSORB}, - #endif + .abilities = {ABILITY_WATER_BUBBLE, ABILITY_NONE, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -21281,18 +19363,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 50, .evYield_Attack = 1, - .item2 = ITEM_MIRACLE_SEED, + .itemRare = ITEM_MIRACLE_SEED, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE, ABILITY_CONTRARY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -21310,18 +19388,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 168, .evYield_Attack = 2, - .item2 = ITEM_MIRACLE_SEED, + .itemRare = ITEM_MIRACLE_SEED, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE, ABILITY_CONTRARY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -21339,8 +19413,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 57, .evYield_SpDefense = 1, - .item1 = ITEM_TINY_MUSHROOM, - .item2 = ITEM_BIG_MUSHROOM, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -21365,8 +19439,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 142, .evYield_SpDefense = 2, - .item1 = ITEM_TINY_MUSHROOM, - .item2 = ITEM_BIG_MUSHROOM, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -21391,18 +19465,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 64, .evYield_Speed = 1, - .item2 = ITEM_SMOKE_BALL, + .itemRare = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CORROSION, ABILITY_NONE, ABILITY_OBLIVIOUS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_OBLIVIOUS}, - #endif + .abilities = {ABILITY_CORROSION, ABILITY_NONE, ABILITY_OBLIVIOUS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -21420,18 +19490,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 168, .evYield_Speed = 2, - .item2 = ITEM_SMOKE_BALL, + .itemRare = ITEM_SMOKE_BALL, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CORROSION, ABILITY_NONE, ABILITY_OBLIVIOUS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_OBLIVIOUS}, - #endif + .abilities = {ABILITY_CORROSION, ABILITY_NONE, ABILITY_OBLIVIOUS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -21455,11 +19521,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLUFFY, ABILITY_KLUTZ, ABILITY_CUTE_CHARM}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_CUTE_CHARM}, - #endif + .abilities = {ABILITY_FLUFFY, ABILITY_KLUTZ, ABILITY_CUTE_CHARM}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -21483,11 +19545,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLUFFY, ABILITY_KLUTZ, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FLUFFY, ABILITY_KLUTZ, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -21505,20 +19563,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 235, .expYield = 42, .evYield_HP = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_GRASSY_SEED, - #endif + .itemRare = ITEM_GRASSY_SEED, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEAF_GUARD, ABILITY_OBLIVIOUS, ABILITY_SWEET_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_OBLIVIOUS}, - #endif + .abilities = {ABILITY_LEAF_GUARD, ABILITY_OBLIVIOUS, ABILITY_SWEET_VEIL}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -21536,20 +19588,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 102, .evYield_Speed = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_GRASSY_SEED, - #endif + .itemRare = ITEM_GRASSY_SEED, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEAF_GUARD, ABILITY_OBLIVIOUS, ABILITY_SWEET_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_OBLIVIOUS}, - #endif + .abilities = {ABILITY_LEAF_GUARD, ABILITY_OBLIVIOUS, ABILITY_SWEET_VEIL}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = TRUE, }, @@ -21567,20 +19613,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 230, .evYield_Attack = 3, - #ifdef ITEM_EXPANSION - .item1 = ITEM_GRASSY_SEED, - #endif + .itemCommon = ITEM_GRASSY_SEED, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEAF_GUARD, ABILITY_QUEENLY_MAJESTY, ABILITY_SWEET_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LEAF_GUARD, ABILITY_QUEENLY_MAJESTY, ABILITY_SWEET_VEIL}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = TRUE, }, @@ -21598,20 +19638,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 170, .evYield_SpDefense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_MISTY_SEED, - #endif + .itemRare = ITEM_MISTY_SEED, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_TRIAGE, ABILITY_NATURAL_CURE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_NATURAL_CURE}, - #endif + .abilities = {ABILITY_FLOWER_VEIL, ABILITY_TRIAGE, ABILITY_NATURAL_CURE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, @@ -21635,11 +19669,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_TELEPATHY, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_TELEPATHY, ABILITY_SYMBIOSIS}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -21663,11 +19693,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RECEIVER, ABILITY_NONE, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RECEIVER, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -21691,11 +19717,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WIMP_OUT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_WIMP_OUT, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -21719,11 +19741,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_EMERGENCY_EXIT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_EMERGENCY_EXIT, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -21741,18 +19759,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 140, .expYield = 64, .evYield_Defense = 1, - .item2 = ITEM_SPELL_TAG, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_COMPACTION, ABILITY_NONE, ABILITY_SAND_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_SAND_VEIL}, - #endif + .abilities = {ABILITY_WATER_COMPACTION, ABILITY_NONE, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -21770,18 +19784,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 168, .evYield_Defense = 2, - .item2 = ITEM_SPELL_TAG, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_COMPACTION, ABILITY_NONE, ABILITY_SAND_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_SAND_VEIL}, - #endif + .abilities = {ABILITY_WATER_COMPACTION, ABILITY_NONE, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -21805,11 +19815,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNARDS_OUT, ABILITY_NONE, ABILITY_UNAWARE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INNARDS_OUT, ABILITY_NONE, ABILITY_UNAWARE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -21836,65 +19842,12 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, - [SPECIES_SILVALLY] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, + [SPECIES_SILVALLY] = SILVALLY_BASE_STATS(TYPE_NORMAL), - [SPECIES_MINIOR] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 100, - .baseSpeed = 60, - .baseSpAttack = 60, - .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = TRUE, - }, + [SPECIES_MINIOR] = MINIOR_METEOR_BASE_STATS, [SPECIES_KOMALA] = { @@ -21915,11 +19868,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_COMATOSE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_COMATOSE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -21937,7 +19886,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 70, .expYield = 170, .evYield_Defense = 2, - .item2 = ITEM_CHARCOAL, + .itemRare = ITEM_CHARCOAL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -21962,52 +19911,19 @@ const struct BaseStats gBaseStats[] = .catchRate = 180, .expYield = 152, .evYield_Attack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_ELECTRIC_SEED, - #endif + .itemRare = ITEM_ELECTRIC_SEED, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_IRON_BARBS, ABILITY_LIGHTNING_ROD, ABILITY_STURDY}, - #else - .abilities = {ABILITY_NONE, ABILITY_LIGHTNING_ROD, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_IRON_BARBS, ABILITY_LIGHTNING_ROD, ABILITY_STURDY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, - [SPECIES_MIMIKYU] = - { - .baseHP = 55, - .baseAttack = 90, - .baseDefense = 80, - .baseSpeed = 96, - .baseSpAttack = 50, - .baseSpDefense = 105, - .type1 = TYPE_GHOST, - .type2 = TYPE_FAIRY, - .catchRate = 45, - .expYield = 167, - .evYield_SpDefense = 2, - .item2 = ITEM_CHESTO_BERRY, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DISGUISE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, + [SPECIES_MIMIKYU] = MIMIKYU_BASE_STATS, [SPECIES_BRUXISH] = { @@ -22022,20 +19938,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 80, .expYield = 166, .evYield_Attack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_RAZOR_FANG, - #endif + .itemRare = ITEM_RAZOR_FANG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DAZZLING, ABILITY_STRONG_JAW, ABILITY_WONDER_SKIN}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_DAZZLING, ABILITY_STRONG_JAW, ABILITY_WONDER_SKIN}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -22053,18 +19963,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 70, .expYield = 170, .evYield_SpAttack = 2, - .item2 = ITEM_PERSIM_BERRY, + .itemRare = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BERSERK, ABILITY_SAP_SIPPER, ABILITY_CLOUD_NINE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_CLOUD_NINE}, - #endif + .abilities = {ABILITY_BERSERK, ABILITY_SAP_SIPPER, ABILITY_CLOUD_NINE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -22088,11 +19994,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STEELWORKER, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STEELWORKER, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, @@ -22110,20 +20012,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 60, .evYield_Defense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_RAZOR_CLAW, - #endif + .itemRare = ITEM_RAZOR_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BULLETPROOF, ABILITY_SOUNDPROOF, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_SOUNDPROOF}, - #endif + .abilities = {ABILITY_BULLETPROOF, ABILITY_SOUNDPROOF, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -22141,20 +20037,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 147, .evYield_Defense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_RAZOR_CLAW, - #endif + .itemRare = ITEM_RAZOR_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BULLETPROOF, ABILITY_SOUNDPROOF, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_SOUNDPROOF}, - #endif + .abilities = {ABILITY_BULLETPROOF, ABILITY_SOUNDPROOF, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -22172,20 +20062,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 270, .evYield_Defense = 3, - #ifdef ITEM_EXPANSION - .item1 = ITEM_RAZOR_CLAW, - #endif + .itemCommon = ITEM_RAZOR_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BULLETPROOF, ABILITY_SOUNDPROOF, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_SOUNDPROOF}, - #endif + .abilities = {ABILITY_BULLETPROOF, ABILITY_SOUNDPROOF, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -22209,13 +20093,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ELECTRIC_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ELECTRIC_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_TAPU_LELE] = @@ -22237,13 +20118,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PSYCHIC_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PSYCHIC_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_TAPU_BULU] = @@ -22265,13 +20143,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GRASSY_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GRASSY_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_TAPU_FINI] = @@ -22293,13 +20168,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MISTY_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MISTY_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_COSMOG] = @@ -22321,13 +20193,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_UNAWARE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_UNAWARE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_COSMOEM] = @@ -22353,6 +20222,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_STURDY, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_SOLGALEO] = @@ -22374,13 +20244,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FULL_METAL_BODY, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FULL_METAL_BODY, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_LUNALA] = @@ -22402,13 +20269,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHADOW_SHIELD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHADOW_SHIELD, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_NIHILEGO] = @@ -22430,14 +20294,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_BUZZWOLE] = @@ -22460,14 +20320,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_PHEROMOSA] = @@ -22489,14 +20345,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_XURKITREE] = @@ -22518,14 +20370,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_CELESTEELA] = @@ -22549,14 +20397,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_KARTANA] = @@ -22578,14 +20422,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_GUZZLORD] = @@ -22607,14 +20447,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_NECROZMA] = @@ -22637,42 +20473,13 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, + .flags = FLAG_LEGENDARY, }, - [SPECIES_MAGEARNA] = - { - .baseHP = 80, - .baseAttack = 95, - .baseDefense = 115, - .baseSpeed = 65, - .baseSpAttack = 130, - .baseSpDefense = 115, - .type1 = TYPE_STEEL, - .type2 = TYPE_FAIRY, - .catchRate = 3, - .expYield = 270, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOUL_HEART, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, + [SPECIES_MAGEARNA] = MAGEARNA_BASE_STATS(BODY_COLOR_GRAY), [SPECIES_MARSHADOW] = { @@ -22694,13 +20501,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TECHNICIAN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TECHNICIAN, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, + .flags = FLAG_MYTHICAL, }, [SPECIES_POIPOLE] = @@ -22722,14 +20526,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_NAGANADEL] = @@ -22751,14 +20551,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_STAKATAKA] = @@ -22780,14 +20576,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_BLACEPHALON] = @@ -22809,14 +20601,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, - .flags = F_ULTRA_BEAST, + .flags = FLAG_ULTRA_BEAST, }, [SPECIES_ZERAORA] = @@ -22841,6 +20629,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_MELTAN] = @@ -22865,6 +20654,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_MAGNET_PULL, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_MELMETAL] = @@ -22886,13 +20676,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_IRON_FIST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_IRON_FIST, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_GROOKEY] = @@ -22914,11 +20701,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -22942,11 +20725,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -22970,11 +20749,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE}, - #else - .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, - #endif + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -22998,11 +20773,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -23026,11 +20797,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -23054,11 +20821,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, - #else - .abilities = {ABILITY_BLAZE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -23083,11 +20846,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -23111,11 +20870,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -23139,11 +20894,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, - #else - .abilities = {ABILITY_TORRENT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -23161,18 +20912,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 55, .evYield_HP = 1, - .item2 = ITEM_ORAN_BERRY, + .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHEEK_POUCH, ABILITY_NONE, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHEEK_POUCH, ABILITY_NONE, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -23190,18 +20937,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 161, .evYield_HP = 2, - .item2 = ITEM_SITRUS_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHEEK_POUCH, ABILITY_NONE, ABILITY_GLUTTONY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHEEK_POUCH, ABILITY_NONE, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -23225,11 +20968,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_UNNERVE, ABILITY_BIG_PECKS}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_UNNERVE, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -23253,11 +20992,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_UNNERVE, ABILITY_BIG_PECKS}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_UNNERVE, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -23281,11 +21016,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRESSURE, ABILITY_UNNERVE, ABILITY_MIRROR_ARMOR}, - #else - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRESSURE, ABILITY_UNNERVE, ABILITY_MIRROR_ARMOR}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -23309,11 +21040,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_COMPOUND_EYES, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_SWARM, ABILITY_COMPOUND_EYES}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_COMPOUND_EYES, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -23331,20 +21058,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 117, .evYield_SpDefense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_PSYCHIC_SEED, - #endif + .itemRare = ITEM_PSYCHIC_SEED, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_COMPOUND_EYES, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_SWARM, ABILITY_COMPOUND_EYES}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_COMPOUND_EYES, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -23362,20 +21083,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 253, .evYield_SpDefense = 3, - #ifdef ITEM_EXPANSION - .item2 = ITEM_PSYCHIC_SEED, - #endif + .itemRare = ITEM_PSYCHIC_SEED, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWARM, ABILITY_FRISK, ABILITY_TELEPATHY}, - #else - .abilities = {ABILITY_SWARM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWARM, ABILITY_FRISK, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -23399,11 +21114,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_UNBURDEN, ABILITY_STAKEOUT}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_UNBURDEN, ABILITY_STAKEOUT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -23427,11 +21138,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_UNBURDEN, ABILITY_STAKEOUT}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_UNBURDEN, ABILITY_STAKEOUT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -23455,11 +21162,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_COTTON_DOWN, ABILITY_REGENERATOR, ABILITY_EFFECT_SPORE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_EFFECT_SPORE}, - #endif + .abilities = {ABILITY_COTTON_DOWN, ABILITY_REGENERATOR, ABILITY_EFFECT_SPORE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -23483,11 +21186,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_COTTON_DOWN, ABILITY_REGENERATOR, ABILITY_EFFECT_SPORE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_EFFECT_SPORE}, - #endif + .abilities = {ABILITY_COTTON_DOWN, ABILITY_REGENERATOR, ABILITY_EFFECT_SPORE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -23511,11 +21210,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLUFFY, ABILITY_RUN_AWAY, ABILITY_BULLETPROOF}, - #else - .abilities = {ABILITY_NONE, ABILITY_RUN_AWAY}, - #endif + .abilities = {ABILITY_FLUFFY, ABILITY_RUN_AWAY, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -23539,11 +21234,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLUFFY, ABILITY_STEADFAST, ABILITY_BULLETPROOF}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FLUFFY, ABILITY_STEADFAST, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -23567,11 +21258,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STRONG_JAW, ABILITY_SHELL_ARMOR, ABILITY_SWIFT_SWIM}, - #else - .abilities = {ABILITY_NONE, ABILITY_SHELL_ARMOR, ABILITY_SWIFT_SWIM}, - #endif + .abilities = {ABILITY_STRONG_JAW, ABILITY_SHELL_ARMOR, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -23595,11 +21282,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STRONG_JAW, ABILITY_SHELL_ARMOR, ABILITY_SWIFT_SWIM}, - #else - .abilities = {ABILITY_NONE, ABILITY_SHELL_ARMOR, ABILITY_SWIFT_SWIM}, - #endif + .abilities = {ABILITY_STRONG_JAW, ABILITY_SHELL_ARMOR, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -23623,11 +21306,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BALL_FETCH, ABILITY_NONE, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BALL_FETCH, ABILITY_NONE, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -23651,11 +21330,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STRONG_JAW, ABILITY_NONE, ABILITY_COMPETITIVE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STRONG_JAW, ABILITY_NONE, ABILITY_COMPETITIVE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -23679,11 +21354,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STEAM_ENGINE, ABILITY_HEATPROOF, ABILITY_FLASH_FIRE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_FLASH_FIRE}, - #endif + .abilities = {ABILITY_STEAM_ENGINE, ABILITY_HEATPROOF, ABILITY_FLASH_FIRE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -23707,11 +21378,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STEAM_ENGINE, ABILITY_FLAME_BODY, ABILITY_FLASH_FIRE}, - #else - .abilities = {ABILITY_NONE, ABILITY_FLAME_BODY, ABILITY_FLASH_FIRE}, - #endif + .abilities = {ABILITY_STEAM_ENGINE, ABILITY_FLAME_BODY, ABILITY_FLASH_FIRE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -23735,11 +21402,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STEAM_ENGINE, ABILITY_FLAME_BODY, ABILITY_FLASH_FIRE}, - #else - .abilities = {ABILITY_NONE, ABILITY_FLAME_BODY, ABILITY_FLASH_FIRE}, - #endif + .abilities = {ABILITY_STEAM_ENGINE, ABILITY_FLAME_BODY, ABILITY_FLASH_FIRE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -23763,11 +21426,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_BULLETPROOF}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -23791,11 +21450,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_HUSTLE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_HUSTLE}, - #endif + .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -23819,11 +21474,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_THICK_FAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE, ABILITY_THICK_FAT}, - #endif + .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -23847,11 +21498,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_SPIT, ABILITY_SHED_SKIN, ABILITY_SAND_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_SHED_SKIN, ABILITY_SAND_VEIL}, - #endif + .abilities = {ABILITY_SAND_SPIT, ABILITY_SHED_SKIN, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -23875,42 +21522,12 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_SPIT, ABILITY_SHED_SKIN, ABILITY_SAND_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_SHED_SKIN, ABILITY_SAND_VEIL}, - #endif + .abilities = {ABILITY_SAND_SPIT, ABILITY_SHED_SKIN, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, - [SPECIES_CRAMORANT] = - { - .baseHP = 70, - .baseAttack = 85, - .baseDefense = 55, - .baseSpeed = 85, - .baseSpAttack = 85, - .baseSpDefense = 95, - .type1 = TYPE_FLYING, - .type2 = TYPE_WATER, - .catchRate = 45, - .expYield = 166, - .evYield_SpDefense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GULP_MISSILE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, + [SPECIES_CRAMORANT] = CRAMORANT_BASE_STATS, [SPECIES_ARROKUDA] = { @@ -23931,11 +21548,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_PROPELLER_TAIL}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_PROPELLER_TAIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -23959,11 +21572,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_PROPELLER_TAIL}, - #else - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_PROPELLER_TAIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -23987,42 +21596,12 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RATTLED, ABILITY_STATIC, ABILITY_KLUTZ}, - #else - .abilities = {ABILITY_NONE, ABILITY_STATIC}, - #endif + .abilities = {ABILITY_RATTLED, ABILITY_STATIC, ABILITY_KLUTZ}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, - [SPECIES_TOXTRICITY] = - { - .baseHP = 75, - .baseAttack = 98, - .baseDefense = 70, - .baseSpeed = 75, - .baseSpAttack = 114, - .baseSpDefense = 70, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_POISON, - .catchRate = 45, - .expYield = 176, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PUNK_ROCK, ABILITY_PLUS, ABILITY_TECHNICIAN}, - #else - .abilities = {ABILITY_NONE, ABILITY_PLUS}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, + [SPECIES_TOXTRICITY] = TOXTRICITY_BASE_STATS(ABILITY_PLUS), [SPECIES_SIZZLIPEDE] = { @@ -24091,11 +21670,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIMBER, ABILITY_NONE, ABILITY_TECHNICIAN}, - #else - .abilities = {ABILITY_LIMBER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIMBER, ABILITY_NONE, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -24119,70 +21694,14 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIMBER, ABILITY_NONE, ABILITY_TECHNICIAN}, - #else - .abilities = {ABILITY_LIMBER, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIMBER, ABILITY_NONE, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, - [SPECIES_SINISTEA] = - { - .baseHP = 40, - .baseAttack = 45, - .baseDefense = 45, - .baseSpeed = 50, - .baseSpAttack = 74, - .baseSpDefense = 54, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, - .catchRate = 120, - .expYield = 62, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, + [SPECIES_SINISTEA] = SINISTEA_BASE_STATS, - [SPECIES_POLTEAGEIST] = - { - .baseHP = 60, - .baseAttack = 65, - .baseDefense = 65, - .baseSpeed = 70, - .baseSpAttack = 134, - .baseSpDefense = 114, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, - .catchRate = 60, - .expYield = 178, - .evYield_SpAttack = 2, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, + [SPECIES_POLTEAGEIST] = POLTEAGEIST_BASE_STATS, [SPECIES_HATENNA] = { @@ -24203,11 +21722,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -24231,11 +21746,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -24259,11 +21770,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -24287,11 +21794,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -24315,11 +21818,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, @@ -24343,11 +21842,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -24371,11 +21866,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RECKLESS, ABILITY_GUTS, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_NONE, ABILITY_GUTS}, - #endif + .abilities = {ABILITY_RECKLESS, ABILITY_GUTS, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -24399,11 +21890,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_TOUGH_CLAWS, ABILITY_STEELY_SPIRIT}, - #else - .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_TOUGH_CLAWS, ABILITY_STEELY_SPIRIT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -24427,11 +21914,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_PERISH_BODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_PERISH_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -24449,18 +21932,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 177, .evYield_Attack = 2, - .item2 = ITEM_STICK, + .itemRare = ITEM_LEEK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -24484,11 +21963,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TANGLED_FEET, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TANGLED_FEET, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -24512,11 +21987,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WANDERING_SPIRIT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_WANDERING_SPIRIT, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -24540,42 +22011,12 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, - [SPECIES_ALCREMIE] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 75, - .baseSpeed = 64, - .baseSpAttack = 110, - .baseSpDefense = 121, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 100, - .expYield = 173, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, + [SPECIES_ALCREMIE] = ALCREMIE_BASE_STATS(BODY_COLOR_WHITE), [SPECIES_FALINKS] = { @@ -24597,11 +22038,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE, ABILITY_DEFIANT}, - #else - .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -24625,11 +22062,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_NONE, ABILITY_ELECTRIC_SURGE}, - #else - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_NONE, ABILITY_ELECTRIC_SURGE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -24647,20 +22080,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 37, .evYield_SpAttack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SNOWBALL, - #endif + .itemRare = ITEM_SNOWBALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_ICE_SCALES}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_ICE_SCALES}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -24684,11 +22111,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_ICE_SCALES}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_ICE_SCALES}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -24712,11 +22135,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POWER_SPOT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_POWER_SPOT, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -24740,11 +22159,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ICE_FACE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ICE_FACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -24768,42 +22183,12 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INNER_FOCUS, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE}, - #else - .abilities = {ABILITY_INNER_FOCUS, ABILITY_SYNCHRONIZE}, - #endif + .abilities = {ABILITY_INNER_FOCUS, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, - [SPECIES_MORPEKO] = - { - .baseHP = 58, - .baseAttack = 95, - .baseDefense = 58, - .baseSpeed = 97, - .baseSpAttack = 70, - .baseSpDefense = 58, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_DARK, - .catchRate = 180, - .expYield = 153, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HUNGER_SWITCH, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, + [SPECIES_MORPEKO] = MORPEKO_BASE_STATS, [SPECIES_CUFANT] = { @@ -24818,20 +22203,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 66, .evYield_Attack = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LAGGING_TAIL, - #endif + .itemRare = ITEM_LAGGING_TAIL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_HEAVY_METAL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -24849,20 +22228,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 175, .evYield_Attack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_LAGGING_TAIL, - #endif + .itemRare = ITEM_LAGGING_TAIL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_HEAVY_METAL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -24886,11 +22259,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_VOLT_ABSORB, ABILITY_HUSTLE, ABILITY_SAND_RUSH}, - #else - .abilities = {ABILITY_VOLT_ABSORB, ABILITY_HUSTLE}, - #endif + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_HUSTLE, ABILITY_SAND_RUSH}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -24914,11 +22283,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_VOLT_ABSORB, ABILITY_STATIC, ABILITY_SLUSH_RUSH}, - #else - .abilities = {ABILITY_VOLT_ABSORB, ABILITY_STATIC}, - #endif + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_STATIC, ABILITY_SLUSH_RUSH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -24942,11 +22307,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_ABSORB, ABILITY_STRONG_JAW, ABILITY_SAND_RUSH}, - #else - .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE}, - #endif + .abilities = {ABILITY_WATER_ABSORB, ABILITY_STRONG_JAW, ABILITY_SAND_RUSH}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -24970,11 +22331,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WATER_ABSORB, ABILITY_ICE_BODY, ABILITY_SLUSH_RUSH}, - #else - .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE}, - #endif + .abilities = {ABILITY_WATER_ABSORB, ABILITY_ICE_BODY, ABILITY_SLUSH_RUSH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -24998,11 +22355,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LIGHT_METAL, ABILITY_HEAVY_METAL, ABILITY_STALWART}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LIGHT_METAL, ABILITY_HEAVY_METAL, ABILITY_STALWART}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -25026,11 +22379,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CLEAR_BODY, ABILITY_INFILTRATOR, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CLEAR_BODY, ABILITY_INFILTRATOR, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -25054,11 +22403,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CLEAR_BODY, ABILITY_INFILTRATOR, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CLEAR_BODY, ABILITY_INFILTRATOR, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -25082,11 +22427,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CLEAR_BODY, ABILITY_INFILTRATOR, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CLEAR_BODY, ABILITY_INFILTRATOR, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -25110,13 +22451,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTREPID_SWORD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTREPID_SWORD, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_ZAMAZENTA] = @@ -25138,13 +22476,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DAUNTLESS_SHIELD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_DAUNTLESS_SHIELD, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_ETERNATUS] = @@ -25169,6 +22504,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_KUBFU] = @@ -25193,6 +22529,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_URSHIFU] = @@ -25214,42 +22551,13 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_UNSEEN_FIST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_UNSEEN_FIST, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, - [SPECIES_ZARUDE] = - { - .baseHP = 105, - .baseAttack = 120, - .baseDefense = 105, - .baseSpeed = 105, - .baseSpAttack = 70, - .baseSpDefense = 95, - .type1 = TYPE_DARK, - .type2 = TYPE_GRASS, - .catchRate = 3, - .expYield = 300, - .evYield_Attack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, + [SPECIES_ZARUDE] = ZARUDE_BASE_STATS, [SPECIES_REGIELEKI] = { @@ -25270,13 +22578,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TRANSISTOR, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TRANSISTOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_REGIDRAGO] = @@ -25298,13 +22603,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DRAGONS_MAW, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_DRAGONS_MAW, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_GLASTRIER] = @@ -25326,13 +22628,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHILLING_NEIGH, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_CHILLING_NEIGH, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_SPECTRIER] = @@ -25354,13 +22653,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GRIM_NEIGH, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GRIM_NEIGH, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_CALYREX] = @@ -25382,13 +22678,181 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_UNNERVE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_UNNERVE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, + }, + + [SPECIES_WYRDEER] = + { + .baseHP = 103, + .baseAttack = 105, + .baseDefense = 72, + .baseSpeed = 65, + .baseSpAttack = 105, + .baseSpDefense = 75, + .type1 = TYPE_NORMAL, + .type2 = TYPE_PSYCHIC, + .catchRate = 45, + .expYield = 184, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_SLOW, + .eggGroup1 = EGG_GROUP_FIELD, + .eggGroup2 = EGG_GROUP_FIELD, + .abilities = {ABILITY_INTIMIDATE, ABILITY_FRISK, ABILITY_SAP_SIPPER}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, + + [SPECIES_KLEAVOR] = + { + .baseHP = 70, + .baseAttack = 135, + .baseDefense = 95, + .baseSpeed = 85, + .baseSpAttack = 45, + .baseSpDefense = 70, + .type1 = TYPE_BUG, + .type2 = TYPE_ROCK, + .catchRate = 25, + .expYield = 175, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 25, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroup1 = EGG_GROUP_BUG, + .eggGroup2 = EGG_GROUP_BUG, + .abilities = {ABILITY_SWARM, ABILITY_SHEER_FORCE, ABILITY_STEADFAST}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, + + [SPECIES_URSALUNA] = + { + .baseHP = 130, + .baseAttack = 140, + .baseDefense = 105, + .baseSpeed = 50, + .baseSpAttack = 45, + .baseSpDefense = 80, + .type1 = TYPE_GROUND, + .type2 = TYPE_NORMAL, + .catchRate = 75, + .expYield = 194, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroup1 = EGG_GROUP_FIELD, + .eggGroup2 = EGG_GROUP_FIELD, + .abilities = {ABILITY_GUTS, ABILITY_BULLETPROOF, ABILITY_UNNERVE}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, + + [SPECIES_BASCULEGION] = + { + .baseHP = 120, + .baseAttack = 112, + .baseDefense = 65, + .baseSpeed = 78, + .baseSpAttack = 80, + .baseSpDefense = 75, + .type1 = TYPE_WATER, + .type2 = TYPE_GHOST, + .catchRate = 25, + .expYield = 186, + .evYield_HP = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 40, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroup1 = EGG_GROUP_WATER_2, + .eggGroup2 = EGG_GROUP_WATER_2, + .abilities = {ABILITY_RATTLED, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + .flags = FLAG_GENDER_DIFFERENCE, + }, + + [SPECIES_SNEASLER] = + { + .baseHP = 80, + .baseAttack = 130, + .baseDefense = 60, + .baseSpeed = 120, + .baseSpAttack = 40, + .baseSpDefense = 80, + .type1 = TYPE_FIGHTING, + .type2 = TYPE_POISON, + .catchRate = 135, + .expYield = 179, + .evYield_Attack = 1, + .evYield_Speed = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = 35, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroup1 = EGG_GROUP_FIELD, + .eggGroup2 = EGG_GROUP_FIELD, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_POISON_TOUCH}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, + + [SPECIES_OVERQWIL] = + { + .baseHP = 85, + .baseAttack = 115, + .baseDefense = 95, + .baseSpeed = 85, + .baseSpAttack = 65, + .baseSpDefense = 65, + .type1 = TYPE_DARK, + .type2 = TYPE_POISON, + .catchRate = 135, + .expYield = 180, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroup1 = EGG_GROUP_WATER_2, + .eggGroup2 = EGG_GROUP_WATER_2, + .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE}, + .bodyColor = BODY_COLOR_BLACK, + .noFlip = FALSE, + }, + + [SPECIES_ENAMORUS] = + { + .baseHP = 74, + .baseAttack = 115, + .baseDefense = 70, + .baseSpeed = 106, + .baseSpAttack = 135, + .baseSpDefense = 80, + .type1 = TYPE_FAIRY, + .type2 = TYPE_FLYING, + .catchRate = 3, + .expYield = 261, + .evYield_SpAttack = 3, + .genderRatio = MON_FEMALE, + .eggCycles = 120, + .friendship = 90, + .growthRate = GROWTH_SLOW, + .eggGroup1 = EGG_GROUP_UNDISCOVERED, + .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .abilities = {ABILITY_HEALER, ABILITY_NONE, ABILITY_CONTRARY}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_VENUSAUR_MEGA] = @@ -25435,11 +22899,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -25487,11 +22947,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_MEGA_LAUNCHER}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_MEGA_LAUNCHER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -25510,18 +22966,14 @@ const struct BaseStats gBaseStats[] = .expYield = 223, .evYield_Attack = 2, .evYield_SpDefense = 1, - .item2 = ITEM_POISON_BARB, + .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -25545,11 +22997,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NO_GUARD, ABILITY_NO_GUARD}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_NO_GUARD, ABILITY_NO_GUARD}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -25571,7 +23019,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 50, .expYield = 270, .evYield_SpAttack = 3, - .item2 = ITEM_TWISTED_SPOON, + .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -25596,7 +23044,7 @@ const struct BaseStats gBaseStats[] = .catchRate = 75, .expYield = 207, .evYield_Defense = 2, - .item2 = ITEM_KINGS_ROCK, + .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -25651,11 +23099,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PARENTAL_BOND, ABILITY_PARENTAL_BOND}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PARENTAL_BOND, ABILITY_PARENTAL_BOND}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -25679,11 +23123,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_AERILATE, ABILITY_AERILATE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_AERILATE, ABILITY_AERILATE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -25707,11 +23147,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -25735,11 +23171,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -25763,13 +23195,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STEADFAST, ABILITY_STEADFAST}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STEADFAST, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_MEWTWO_MEGA_Y] = @@ -25794,6 +23223,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_INSOMNIA, ABILITY_INSOMNIA}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_AMPHAROS_MEGA] = @@ -25815,11 +23245,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, @@ -25837,18 +23263,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 25, .expYield = 214, .evYield_Defense = 2, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_FORCE, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_FORCE, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -25872,11 +23294,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TECHNICIAN, ABILITY_TECHNICIAN}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TECHNICIAN, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -25900,11 +23318,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SKILL_LINK, ABILITY_SKILL_LINK}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SKILL_LINK, ABILITY_SKILL_LINK}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -25928,11 +23342,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOLAR_POWER, ABILITY_SOLAR_POWER}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SOLAR_POWER, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -26052,11 +23462,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PIXILATE, ABILITY_PIXILATE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PIXILATE, ABILITY_PIXILATE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -26081,11 +23487,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -26128,18 +23530,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 284, .evYield_Defense = 3, - .item2 = ITEM_HARD_STONE, + .itemRare = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FILTER, ABILITY_FILTER}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FILTER, ABILITY_FILTER}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -26205,18 +23603,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 196, .evYield_Attack = 2, - .item2 = ITEM_DEEP_SEA_TOOTH, + .itemRare = ITEM_DEEP_SEA_TOOTH, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STRONG_JAW, ABILITY_STRONG_JAW}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STRONG_JAW, ABILITY_STRONG_JAW}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -26241,11 +23635,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHEER_FORCE, ABILITY_SHEER_FORCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHEER_FORCE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -26269,11 +23659,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PIXILATE, ABILITY_PIXILATE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PIXILATE, ABILITY_PIXILATE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -26291,18 +23677,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 194, .evYield_Attack = 2, - .item2 = ITEM_SPELL_TAG, + .itemRare = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRANKSTER, ABILITY_PRANKSTER}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRANKSTER, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, @@ -26326,11 +23708,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, }, @@ -26354,11 +23732,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_REFRIGERATE, ABILITY_REFRIGERATE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_REFRIGERATE, ABILITY_REFRIGERATE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, @@ -26376,18 +23750,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 315, .evYield_Attack = 3, - .item2 = ITEM_DRAGON_FANG, + .itemRare = ITEM_DRAGON_FANG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_AERILATE, ABILITY_AERILATE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_AERILATE, ABILITY_AERILATE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -26405,18 +23775,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 3, .expYield = 315, .evYield_Defense = 3, - .item2 = ITEM_METAL_COAT, + .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -26443,6 +23809,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_LATIOS_MEGA] = @@ -26467,6 +23834,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_LOPUNNY_MEGA] = @@ -26488,11 +23856,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SCRAPPY, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SCRAPPY, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -26516,11 +23880,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_FORCE, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_FORCE, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -26545,11 +23905,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -26568,18 +23924,14 @@ const struct BaseStats gBaseStats[] = .expYield = 208, .evYield_Attack = 1, .evYield_SpAttack = 1, - .item2 = ITEM_NEVER_MELT_ICE, + .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_WARNING, ABILITY_SNOW_WARNING}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SNOW_WARNING, ABILITY_SNOW_WARNING}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -26621,19 +23973,15 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 425, .evYield_HP = 2, - .item1 = ITEM_ORAN_BERRY, - .item2 = ITEM_SITRUS_BERRY, + .itemCommon = ITEM_ORAN_BERRY, + .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HEALER, ABILITY_HEALER}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_HEALER, ABILITY_HEALER}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -26658,13 +24006,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, [SPECIES_RAYQUAZA_MEGA] = @@ -26687,13 +24032,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DELTA_STREAM, ABILITY_DELTA_STREAM}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_DELTA_STREAM, ABILITY_DELTA_STREAM}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_KYOGRE_PRIMAL] = @@ -26715,13 +24057,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRIMORDIAL_SEA, ABILITY_PRIMORDIAL_SEA}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRIMORDIAL_SEA, ABILITY_PRIMORDIAL_SEA}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_GROUDON_PRIMAL] = @@ -26743,13 +24082,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DESOLATE_LAND, ABILITY_DESOLATE_LAND}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_DESOLATE_LAND, ABILITY_DESOLATE_LAND}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_RATTATA_ALOLAN] = @@ -26765,21 +24101,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 51, .evYield_Speed = 1, - .item2 = ITEM_PECHA_BERRY, + .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GLUTTONY, ABILITY_HUSTLE, ABILITY_THICK_FAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_HUSTLE, ABILITY_THICK_FAT}, - #endif + .abilities = {ABILITY_GLUTTONY, ABILITY_HUSTLE, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_RATICATE_ALOLAN] = @@ -26795,21 +24127,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 127, .expYield = 145, .evYield_Speed = 2, - .item2 = ITEM_PECHA_BERRY, + .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GLUTTONY, ABILITY_HUSTLE, ABILITY_THICK_FAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_HUSTLE, ABILITY_THICK_FAT}, - #endif + .abilities = {ABILITY_GLUTTONY, ABILITY_HUSTLE, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_RAICHU_ALOLAN] = @@ -26831,14 +24159,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SURGE_SURFER, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SURGE_SURFER, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_SANDSHREW_ALOLAN] = @@ -26854,23 +24178,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 60, .evYield_Defense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_GRIP_CLAW, - #endif + .itemRare = ITEM_GRIP_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SLUSH_RUSH}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SLUSH_RUSH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_SANDSLASH_ALOLAN] = @@ -26892,14 +24210,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SLUSH_RUSH}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SLUSH_RUSH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_VULPIX_ALOLAN] = @@ -26915,23 +24229,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 60, .evYield_Speed = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_SNOWBALL, - #endif + .itemRare = ITEM_SNOWBALL, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_NINETALES_ALOLAN] = @@ -26954,14 +24262,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_DIGLETT_ALOLAN] = @@ -26977,21 +24281,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 53, .evYield_Speed = 1, - .item2 = ITEM_SOFT_SAND, + .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_VEIL, ABILITY_TANGLING_HAIR, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_VEIL, ABILITY_TANGLING_HAIR, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_DUGTRIO_ALOLAN] = @@ -27007,21 +24307,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 50, .expYield = 149, .evYield_Speed = 2, - .item2 = ITEM_SOFT_SAND, + .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SAND_VEIL, ABILITY_TANGLING_HAIR, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SAND_VEIL, ABILITY_TANGLING_HAIR, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_MEOWTH_ALOLAN] = @@ -27037,21 +24333,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 58, .evYield_Speed = 1, - .item2 = ITEM_QUICK_CLAW, + .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_PERSIAN_ALOLAN] = @@ -27067,21 +24359,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 90, .expYield = 154, .evYield_Speed = 2, - .item2 = ITEM_QUICK_CLAW, + .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_TECHNICIAN, ABILITY_RATTLED}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FUR_COAT, ABILITY_TECHNICIAN, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_GEODUDE_ALOLAN] = @@ -27097,23 +24385,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 255, .expYield = 60, .evYield_Defense = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_CELL_BATTERY, - #endif + .itemRare = ITEM_CELL_BATTERY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, - #else - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_GRAVELER_ALOLAN] = @@ -27129,23 +24411,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 120, .expYield = 137, .evYield_Defense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_CELL_BATTERY, - #endif + .itemRare = ITEM_CELL_BATTERY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, - #else - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_GOLEM_ALOLAN] = @@ -27167,14 +24443,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, - #else - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, - #endif + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_GRIMER_ALOLAN] = @@ -27190,23 +24462,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 190, .expYield = 65, .evYield_HP = 1, - #ifdef ITEM_EXPANSION - .item2 = ITEM_BLACK_SLUDGE, - #endif + .itemRare = ITEM_BLACK_SLUDGE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_TOUCH, ABILITY_GLUTTONY, ABILITY_POWER_OF_ALCHEMY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_POISON_TOUCH, ABILITY_GLUTTONY, ABILITY_POWER_OF_ALCHEMY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_MUK_ALOLAN] = @@ -27229,14 +24495,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POISON_TOUCH, ABILITY_GLUTTONY, ABILITY_POWER_OF_ALCHEMY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_POISON_TOUCH, ABILITY_GLUTTONY, ABILITY_POWER_OF_ALCHEMY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_EXEGGUTOR_ALOLAN] = @@ -27258,14 +24520,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FRISK, ABILITY_NONE, ABILITY_HARVEST}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FRISK, ABILITY_NONE, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_MAROWAK_ALOLAN] = @@ -27287,14 +24545,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CURSED_BODY, ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, - #else - .abilities = {ABILITY_NONE, ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, - #endif + .abilities = {ABILITY_CURSED_BODY, ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, - .flags = F_ALOLAN_FORM, + .flags = FLAG_ALOLAN_FORM, }, [SPECIES_MEOWTH_GALARIAN] = @@ -27316,14 +24570,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_TOUGH_CLAWS, ABILITY_UNNERVE}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_TOUGH_CLAWS, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_PONYTA_GALARIAN] = @@ -27345,14 +24595,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_PASTEL_VEIL, ABILITY_ANTICIPATION}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_PASTEL_VEIL, ABILITY_ANTICIPATION}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_RAPIDASH_GALARIAN] = @@ -27374,14 +24620,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RUN_AWAY, ABILITY_PASTEL_VEIL, ABILITY_ANTICIPATION}, - #else - .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, - #endif + .abilities = {ABILITY_RUN_AWAY, ABILITY_PASTEL_VEIL, ABILITY_ANTICIPATION}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_SLOWPOKE_GALARIAN] = @@ -27403,17 +24645,12 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GLUTTONY, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_GLUTTONY, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, - [SPECIES_SLOWBRO_GALARIAN] = { .baseHP = 95, @@ -27433,14 +24670,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_QUICK_DRAW, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_QUICK_DRAW, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_FARFETCHD_GALARIAN] = @@ -27456,21 +24689,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 132, .evYield_Attack = 1, - .item1 = ITEM_STICK, + .itemCommon = ITEM_LEEK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_WEEZING_GALARIAN] = @@ -27486,23 +24715,17 @@ const struct BaseStats gBaseStats[] = .catchRate = 60, .expYield = 172, .evYield_Defense = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_MISTY_SEED, - #endif + .itemRare = ITEM_MISTY_SEED, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_MISTY_SURGE}, - #else - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_MISTY_SURGE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_MR_MIME_GALARIAN] = @@ -27524,14 +24747,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY}, - #else - .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, - #endif + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_ARTICUNO_GALARIAN] = @@ -27553,14 +24772,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_COMPETITIVE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_COMPETITIVE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_LEGENDARY | FLAG_GALARIAN_FORM, }, [SPECIES_ZAPDOS_GALARIAN] = @@ -27582,14 +24797,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DEFIANT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_DEFIANT, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_LEGENDARY | FLAG_GALARIAN_FORM, }, [SPECIES_MOLTRES_GALARIAN] = @@ -27611,14 +24822,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BERSERK, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BERSERK, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_LEGENDARY | FLAG_GALARIAN_FORM, }, [SPECIES_SLOWKING_GALARIAN] = @@ -27640,14 +24847,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CURIOUS_MEDICINE, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - #else - .abilities = {ABILITY_NONE, ABILITY_OWN_TEMPO}, - #endif + .abilities = {ABILITY_CURIOUS_MEDICINE, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_CORSOLA_GALARIAN] = @@ -27669,14 +24872,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_ZIGZAGOON_GALARIAN] = @@ -27698,14 +24897,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_LINOONE_GALARIAN] = @@ -27727,14 +24922,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_DARUMAKA_GALARIAN] = @@ -27759,7 +24950,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_HUSTLE, ABILITY_NONE, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_DARMANITAN_GALARIAN] = @@ -27781,14 +24972,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GORILLA_TACTICS, ABILITY_NONE, ABILITY_ZEN_MODE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GORILLA_TACTICS, ABILITY_NONE, ABILITY_ZEN_MODE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_YAMASK_GALARIAN] = @@ -27810,14 +24997,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WANDERING_SPIRIT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_WANDERING_SPIRIT, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, [SPECIES_STUNFISK_GALARIAN] = @@ -27839,1143 +25022,470 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MIMICRY, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MIMICRY, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, - [SPECIES_PIKACHU_COSPLAY] = + [SPECIES_GROWLITHE_HISUIAN] = { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, + .baseHP = 60, + .baseAttack = 75, + .baseDefense = 45, + .baseSpeed = 55, + .baseSpAttack = 65, .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_PIKACHU_ROCK_STAR] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_PIKACHU_BELLE] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = TRUE, - }, - - [SPECIES_PIKACHU_POP_STAR] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = TRUE, - }, - - [SPECIES_PIKACHU_PH_D] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_PIKACHU_LIBRE] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_PIKACHU_ORIGINAL_CAP] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = MON_MALE, - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = TRUE, - }, - - [SPECIES_PIKACHU_HOENN_CAP] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = MON_MALE, - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_PIKACHU_SINNOH_CAP] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = MON_MALE, - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_PIKACHU_UNOVA_CAP] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = MON_MALE, - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_PIKACHU_KALOS_CAP] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = MON_MALE, - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_PIKACHU_ALOLA_CAP] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = MON_MALE, - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_PIKACHU_PARTNER_CAP] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = MON_MALE, - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = TRUE, - }, - - [SPECIES_PIKACHU_WORLD_CAP] = - { - .baseHP = 35, - .baseAttack = 55, - .baseDefense = 40, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 112, - .evYield_Speed = 2, - .item2 = ITEM_LIGHT_BALL, - .genderRatio = MON_MALE, - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_PICHU_SPIKY_EARED] = - { - .baseHP = 20, - .baseAttack = 40, - .baseDefense = 15, - .baseSpeed = 60, - .baseSpAttack = 35, - .baseSpDefense = 35, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 190, - .expYield = 41, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_B] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_C] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_D] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_E] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_F] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_G] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_H] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_I] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_UNOWN_J] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_K] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_L] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_M] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_UNOWN_N] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_O] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_UNOWN_P] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_Q] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_R] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_S] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_T] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_UNOWN_U] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_UNOWN_V] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_W] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_UNOWN_X] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_UNOWN_Y] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_UNOWN_Z] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_UNOWN_EMARK] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_UNOWN_QMARK] = - { - .baseHP = 48, - .baseAttack = 72, - .baseDefense = 48, - .baseSpeed = 48, - .baseSpAttack = 72, - .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 225, - .expYield = 118, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_CASTFORM_SUNNY] = - { - .baseHP = 70, - .baseAttack = 70, - .baseDefense = 70, - .baseSpeed = 70, - .baseSpAttack = 70, - .baseSpDefense = 70, .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, - .catchRate = 45, - .expYield = 147, - .evYield_HP = 1, - .item1 = ITEM_MYSTIC_WATER, - .item2 = ITEM_MYSTIC_WATER, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, + .type2 = TYPE_ROCK, + .catchRate = 190, + .expYield = 70, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(25), + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_SLOW, + .eggGroup1 = EGG_GROUP_FIELD, + .eggGroup2 = EGG_GROUP_FIELD, + .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_ARCANINE_HISUIAN] = + { + .baseHP = 95, + .baseAttack = 115, + .baseDefense = 80, + .baseSpeed = 90, + .baseSpAttack = 95, + .baseSpDefense = 80, + .type1 = TYPE_FIRE, + .type2 = TYPE_ROCK, + .catchRate = 75, + .expYield = 194, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(25), + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_SLOW, + .eggGroup1 = EGG_GROUP_FIELD, + .eggGroup2 = EGG_GROUP_FIELD, + .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_VOLTORB_HISUIAN] = + { + .baseHP = 40, + .baseAttack = 30, + .baseDefense = 50, + .baseSpeed = 100, + .baseSpAttack = 55, + .baseSpDefense = 55, + .type1 = TYPE_ELECTRIC, + .type2 = TYPE_GRASS, + .catchRate = 190, + .expYield = 66, + .evYield_Speed = 1, + .genderRatio = MON_GENDERLESS, + .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = {ABILITY_FORECAST, ABILITY_NONE}, + .eggGroup1 = EGG_GROUP_MINERAL, + .eggGroup2 = EGG_GROUP_MINERAL, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, }, - [SPECIES_CASTFORM_RAINY] = + [SPECIES_ELECTRODE_HISUIAN] = { - .baseHP = 70, - .baseAttack = 70, + .baseHP = 60, + .baseAttack = 50, .baseDefense = 70, - .baseSpeed = 70, - .baseSpAttack = 70, - .baseSpDefense = 70, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, - .catchRate = 45, - .expYield = 147, - .evYield_HP = 1, - .item1 = ITEM_MYSTIC_WATER, - .item2 = ITEM_MYSTIC_WATER, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, + .baseSpAttack = 80, + .baseSpDefense = 80, + .baseSpeed = 150, + .type1 = TYPE_ELECTRIC, + .type2 = TYPE_GRASS, + .catchRate = 60, + .expYield = 172, + .evYield_Speed = 2, + .genderRatio = MON_GENDERLESS, + .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = {ABILITY_FORECAST, ABILITY_NONE}, + .eggGroup1 = EGG_GROUP_MINERAL, + .eggGroup2 = EGG_GROUP_MINERAL, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_TYPHLOSION_HISUIAN] = + { + .baseHP = 73, + .baseAttack = 84, + .baseDefense = 78, + .baseSpeed = 95, + .baseSpAttack = 119, + .baseSpDefense = 85, + .type1 = TYPE_FIRE, + .type2 = TYPE_GHOST, + .catchRate = 45, + .expYield = 240, + .evYield_SpAttack = 3, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroup1 = EGG_GROUP_FIELD, + .eggGroup2 = EGG_GROUP_FIELD, + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_FLASH_FIRE}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_QWILFISH_HISUIAN] = + { + .baseHP = 65, + .baseAttack = 95, + .baseDefense = 85, + .baseSpeed = 85, + .baseSpAttack = 55, + .baseSpDefense = 55, + .type1 = TYPE_DARK, + .type2 = TYPE_POISON, + .catchRate = 45, + .expYield = 88, + .evYield_Attack = 1, + .itemRare = ITEM_POISON_BARB, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroup1 = EGG_GROUP_WATER_2, + .eggGroup2 = EGG_GROUP_WATER_2, + .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_SNEASEL_HISUIAN] = + { + .baseHP = 55, + .baseAttack = 95, + .baseDefense = 55, + .baseSpeed = 115, + .baseSpAttack = 35, + .baseSpDefense = 75, + .type1 = TYPE_POISON, + .type2 = TYPE_FIGHTING, + .catchRate = 60, + .expYield = 86, + .evYield_Speed = 1, + .itemRare = ITEM_QUICK_CLAW, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = 35, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroup1 = EGG_GROUP_FIELD, + .eggGroup2 = EGG_GROUP_FIELD, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE, ABILITY_POISON_TOUCH}, + .bodyColor = BODY_COLOR_BLACK, + .noFlip = TRUE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_SAMUROTT_HISUIAN] = + { + .baseHP = 90, + .baseAttack = 108, + .baseDefense = 80, + .baseSpeed = 85, + .baseSpAttack = 100, + .baseSpDefense = 65, + .type1 = TYPE_WATER, + .type2 = TYPE_DARK, + .catchRate = 45, + .expYield = 238, + .evYield_SpAttack = 3, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroup1 = EGG_GROUP_FIELD, + .eggGroup2 = EGG_GROUP_FIELD, + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHELL_ARMOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, }, - [SPECIES_CASTFORM_SNOWY] = + [SPECIES_LILLIGANT_HISUIAN] = { .baseHP = 70, - .baseAttack = 70, - .baseDefense = 70, - .baseSpeed = 70, - .baseSpAttack = 70, - .baseSpDefense = 70, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, - .catchRate = 45, - .expYield = 147, - .evYield_HP = 1, - .item1 = ITEM_MYSTIC_WATER, - .item2 = ITEM_MYSTIC_WATER, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, + .baseAttack = 105, + .baseDefense = 75, + .baseSpeed = 105, + .baseSpAttack = 50, + .baseSpDefense = 75, + .type1 = TYPE_GRASS, + .type2 = TYPE_FIGHTING, + .catchRate = 75, + .expYield = 168, + .evYield_Attack = 2, + #ifdef ITEM_EXPANSION + .itemRare = ITEM_ABSORB_BULB, + #endif + .genderRatio = MON_FEMALE, + .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = {ABILITY_FORECAST, ABILITY_NONE}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, + .eggGroup1 = EGG_GROUP_GRASS, + .eggGroup2 = EGG_GROUP_GRASS, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_HUSTLE, ABILITY_LEAF_GUARD}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = TRUE, + .flags = FLAG_HISUIAN_FORM, }, + [SPECIES_ZORUA_HISUIAN] = + { + .baseHP = 35, + .baseAttack = 60, + .baseDefense = 40, + .baseSpeed = 70, + .baseSpAttack = 85, + .baseSpDefense = 40, + .type1 = TYPE_NORMAL, + .type2 = TYPE_GHOST, + .catchRate = 75, + .expYield = 66, + .evYield_SpAttack = 1, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 25, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroup1 = EGG_GROUP_FIELD, + .eggGroup2 = EGG_GROUP_FIELD, + .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_ZOROARK_HISUIAN] = + { + .baseHP = 55, + .baseAttack = 100, + .baseDefense = 60, + .baseSpeed = 110, + .baseSpAttack = 125, + .baseSpDefense = 60, + .type1 = TYPE_NORMAL, + .type2 = TYPE_GHOST, + .catchRate = 45, + .expYield = 179, + .evYield_SpAttack = 2, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroup1 = EGG_GROUP_FIELD, + .eggGroup2 = EGG_GROUP_FIELD, + .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_BRAVIARY_HISUIAN] = + { + .baseHP = 110, + .baseAttack = 83, + .baseDefense = 70, + .baseSpeed = 65, + .baseSpAttack = 112, + .baseSpDefense = 70, + .type1 = TYPE_PSYCHIC, + .type2 = TYPE_FLYING, + .catchRate = 60, + .expYield = 179, + .evYield_SpAttack = 2, + .genderRatio = MON_MALE, + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_SLOW, + .eggGroup1 = EGG_GROUP_FLYING, + .eggGroup2 = EGG_GROUP_FLYING, + .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_DEFIANT}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_SLIGGOO_HISUIAN] = + { + .baseHP = 58, + .baseAttack = 75, + .baseDefense = 83, + .baseSpeed = 40, + .baseSpAttack = 83, + .baseSpDefense = 113, + .type1 = TYPE_DRAGON, + .type2 = TYPE_STEEL, + .catchRate = 45, + .expYield = 158, + .evYield_SpDefense = 2, + #ifdef ITEM_EXPANSION + .itemRare = ITEM_SHED_SHELL, + #endif + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 40, + .friendship = 35, + .growthRate = GROWTH_SLOW, + .eggGroup1 = EGG_GROUP_DRAGON, + .eggGroup2 = EGG_GROUP_DRAGON, + .abilities = {ABILITY_SAP_SIPPER, ABILITY_OVERCOAT, ABILITY_GOOEY}, + .bodyColor = BODY_COLOR_PURPLE, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_GOODRA_HISUIAN] = + { + .baseHP = 80, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 60, + .baseSpAttack = 110, + .baseSpDefense = 150, + .type1 = TYPE_DRAGON, + .type2 = TYPE_STEEL, + .catchRate = 45, + .expYield = 270, + .evYield_SpDefense = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 40, + .friendship = 35, + .growthRate = GROWTH_SLOW, + .eggGroup1 = EGG_GROUP_DRAGON, + .eggGroup2 = EGG_GROUP_DRAGON, + .abilities = {ABILITY_SAP_SIPPER, ABILITY_OVERCOAT, ABILITY_GOOEY}, + .bodyColor = BODY_COLOR_PURPLE, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_AVALUGG_HISUIAN] = + { + .baseHP = 95, + .baseAttack = 127, + .baseDefense = 184, + .baseSpeed = 38, + .baseSpAttack = 34, + .baseSpDefense = 36, + .type1 = TYPE_ICE, + .type2 = TYPE_ROCK, + .catchRate = 55, + .expYield = 180, + .evYield_Defense = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroup1 = EGG_GROUP_MONSTER, + .eggGroup2 = EGG_GROUP_MINERAL, + .abilities = {ABILITY_STRONG_JAW, ABILITY_ICE_BODY, ABILITY_STURDY}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_DECIDUEYE_HISUIAN] = + { + .baseHP = 88, + .baseAttack = 112, + .baseDefense = 80, + .baseSpeed = 60, + .baseSpAttack = 95, + .baseSpDefense = 95, + .type1 = TYPE_GRASS, + .type2 = TYPE_FIGHTING, + .catchRate = 45, + .expYield = 239, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 15, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroup1 = EGG_GROUP_FLYING, + .eggGroup2 = EGG_GROUP_FLYING, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + .flags = FLAG_HISUIAN_FORM, + }, + + [SPECIES_PIKACHU_COSPLAY] = COSPLAY_PIKACHU_BASE_STATS(FLIP), + [SPECIES_PIKACHU_ROCK_STAR] = COSPLAY_PIKACHU_BASE_STATS(FLIP), + [SPECIES_PIKACHU_BELLE] = COSPLAY_PIKACHU_BASE_STATS(NO_FLIP), + [SPECIES_PIKACHU_POP_STAR] = COSPLAY_PIKACHU_BASE_STATS(NO_FLIP), + [SPECIES_PIKACHU_PH_D] = COSPLAY_PIKACHU_BASE_STATS(FLIP), + [SPECIES_PIKACHU_LIBRE] = COSPLAY_PIKACHU_BASE_STATS(FLIP), + + [SPECIES_PIKACHU_ORIGINAL_CAP] = CAP_PIKACHU_BASE_STATS(NO_FLIP), + [SPECIES_PIKACHU_HOENN_CAP] = CAP_PIKACHU_BASE_STATS(FLIP), + [SPECIES_PIKACHU_SINNOH_CAP] = CAP_PIKACHU_BASE_STATS(FLIP), + [SPECIES_PIKACHU_UNOVA_CAP] = CAP_PIKACHU_BASE_STATS(FLIP), + [SPECIES_PIKACHU_KALOS_CAP] = CAP_PIKACHU_BASE_STATS(FLIP), + [SPECIES_PIKACHU_ALOLA_CAP] = CAP_PIKACHU_BASE_STATS(FLIP), + [SPECIES_PIKACHU_PARTNER_CAP] = CAP_PIKACHU_BASE_STATS(NO_FLIP), + [SPECIES_PIKACHU_WORLD_CAP] = CAP_PIKACHU_BASE_STATS(FLIP), + + [SPECIES_PICHU_SPIKY_EARED] = PICHU_BASE_STATS(NO_FLIP), +#endif + [SPECIES_UNOWN_B] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_C] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_D] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_E] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_F] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_G] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_H] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_I] = UNOWN_BASE_STATS(FLIP), + [SPECIES_UNOWN_J] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_K] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_L] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_M] = UNOWN_BASE_STATS(FLIP), + [SPECIES_UNOWN_N] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_O] = UNOWN_BASE_STATS(FLIP), + [SPECIES_UNOWN_P] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_Q] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_R] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_S] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_T] = UNOWN_BASE_STATS(FLIP), + [SPECIES_UNOWN_U] = UNOWN_BASE_STATS(FLIP), + [SPECIES_UNOWN_V] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_W] = UNOWN_BASE_STATS(FLIP), + [SPECIES_UNOWN_X] = UNOWN_BASE_STATS(FLIP), + [SPECIES_UNOWN_Y] = UNOWN_BASE_STATS(FLIP), + [SPECIES_UNOWN_Z] = UNOWN_BASE_STATS(NO_FLIP), + [SPECIES_UNOWN_EMARK] = UNOWN_BASE_STATS(FLIP), + [SPECIES_UNOWN_QMARK] = UNOWN_BASE_STATS(NO_FLIP), + + [SPECIES_CASTFORM_SUNNY] = CASTFORM_BASE_STATS(TYPE_FIRE, BODY_COLOR_RED), + [SPECIES_CASTFORM_RAINY] = CASTFORM_BASE_STATS(TYPE_WATER, BODY_COLOR_BLUE), + [SPECIES_CASTFORM_SNOWY] = CASTFORM_BASE_STATS(TYPE_ICE, BODY_COLOR_WHITE), + [SPECIES_DEOXYS_ATTACK] = { .baseHP = 50, @@ -29050,53 +25560,9 @@ const struct BaseStats gBaseStats[] = .noFlip = TRUE, }, - [SPECIES_BURMY_SANDY_CLOAK] = - { - .baseHP = 40, - .baseAttack = 29, - .baseDefense = 45, - .baseSpeed = 36, - .baseSpAttack = 29, - .baseSpDefense = 45, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, - .catchRate = 120, - .expYield = 45, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_BURMY_TRASH_CLOAK] = - { - .baseHP = 40, - .baseAttack = 29, - .baseDefense = 45, - .baseSpeed = 36, - .baseSpAttack = 29, - .baseSpDefense = 45, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, - .catchRate = 120, - .expYield = 45, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, +#if P_NEW_POKEMON == TRUE + [SPECIES_BURMY_SANDY_CLOAK] = BURMY_BASE_STATS(BODY_COLOR_BROWN), + [SPECIES_BURMY_TRASH_CLOAK] = BURMY_BASE_STATS(BODY_COLOR_RED), [SPECIES_WORMADAM_SANDY_CLOAK] = { @@ -29111,18 +25577,14 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 148, .evYield_Defense = 2, - .item2 = ITEM_SILVER_POWDER, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = MON_FEMALE, .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -29141,230 +25603,78 @@ const struct BaseStats gBaseStats[] = .expYield = 148, .evYield_Defense = 1, .evYield_SpDefense = 1, - .item2 = ITEM_SILVER_POWDER, + .itemRare = ITEM_SILVER_POWDER, .genderRatio = MON_FEMALE, .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, - [SPECIES_CHERRIM_SUNSHINE] = + [SPECIES_CHERRIM_SUNSHINE] = CHERRIM_BASE_STATS(BODY_COLOR_PINK), + + [SPECIES_SHELLOS_EAST_SEA] = SHELLOS_BASE_STATS(BODY_COLOR_BLUE), + + [SPECIES_GASTRODON_EAST_SEA] = GASTRODON_BASE_STATS(BODY_COLOR_BLUE), + + [SPECIES_ROTOM_HEAT] = ROTOM_FORM_BASE_STATS(TYPE_FIRE, FLIP), + [SPECIES_ROTOM_WASH] = ROTOM_FORM_BASE_STATS(TYPE_WATER, NO_FLIP), + [SPECIES_ROTOM_FROST] = ROTOM_FORM_BASE_STATS(TYPE_ICE, FLIP), + [SPECIES_ROTOM_FAN] = ROTOM_FORM_BASE_STATS(TYPE_FLYING, FLIP), + [SPECIES_ROTOM_MOW] = ROTOM_FORM_BASE_STATS(TYPE_GRASS, FLIP), + + [SPECIES_DIALGA_ORIGIN] = { - .baseHP = 70, - .baseAttack = 60, - .baseDefense = 70, - .baseSpeed = 85, - .baseSpAttack = 87, - .baseSpDefense = 78, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, - .catchRate = 75, - .expYield = 158, - .evYield_SpAttack = 2, - .item2 = ITEM_MIRACLE_SEED, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_GIFT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PINK, + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 120, + .baseSpeed = 90, + .baseSpAttack = 150, + .baseSpDefense = 120, + .type1 = TYPE_STEEL, + .type2 = TYPE_DRAGON, + .catchRate = 3, + .expYield = 306, + .evYield_SpAttack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 120, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroup1 = EGG_GROUP_UNDISCOVERED, + .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, + .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, - [SPECIES_SHELLOS_EAST_SEA] = + [SPECIES_PALKIA_ORIGIN] = { - .baseHP = 76, - .baseAttack = 48, - .baseDefense = 48, - .baseSpeed = 34, - .baseSpAttack = 57, - .baseSpDefense = 62, + .baseHP = 90, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 120, + .baseSpAttack = 150, + .baseSpDefense = 120, .type1 = TYPE_WATER, - .type2 = TYPE_WATER, - .catchRate = 190, - .expYield = 65, - .evYield_HP = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_STICKY_HOLD, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - - [SPECIES_GASTRODON_EAST_SEA] = - { - .baseHP = 111, - .baseAttack = 83, - .baseDefense = 68, - .baseSpeed = 39, - .baseSpAttack = 92, - .baseSpDefense = 82, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, - .catchRate = 75, - .expYield = 166, - .evYield_HP = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE}, - #else - .abilities = {ABILITY_STICKY_HOLD, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - - [SPECIES_ROTOM_HEAT] = - { - .baseHP = 50, - .baseAttack = 65, - .baseDefense = 107, - .baseSpeed = 86, - .baseSpAttack = 105, - .baseSpDefense = 107, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_FIRE, - .catchRate = 45, - .expYield = 182, - .evYield_Speed = 1, - .evYield_SpAttack = 1, + .type2 = TYPE_DRAGON, + .catchRate = 3, + .expYield = 306, + .evYield_SpAttack = 3, .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_ROTOM_WASH] = - { - .baseHP = 50, - .baseAttack = 65, - .baseDefense = 107, - .baseSpeed = 86, - .baseSpAttack = 105, - .baseSpDefense = 107, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_WATER, - .catchRate = 45, - .expYield = 182, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = TRUE, - }, - - [SPECIES_ROTOM_FROST] = - { - .baseHP = 50, - .baseAttack = 65, - .baseDefense = 107, - .baseSpeed = 86, - .baseSpAttack = 105, - .baseSpDefense = 107, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ICE, - .catchRate = 45, - .expYield = 182, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_ROTOM_FAN] = - { - .baseHP = 50, - .baseAttack = 65, - .baseDefense = 107, - .baseSpeed = 86, - .baseSpAttack = 105, - .baseSpDefense = 107, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 182, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_ROTOM_MOW] = - { - .baseHP = 50, - .baseAttack = 65, - .baseDefense = 107, - .baseSpeed = 86, - .baseSpAttack = 105, - .baseSpDefense = 107, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_GRASS, - .catchRate = 45, - .expYield = 182, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, + .eggCycles = 120, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroup1 = EGG_GROUP_UNDISCOVERED, + .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, + .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_GIRATINA_ORIGIN] = @@ -29404,8 +25714,8 @@ const struct BaseStats gBaseStats[] = .catchRate = 45, .expYield = 270, .evYield_HP = 3, - .item1 = ITEM_LUM_BERRY, - .item2 = ITEM_LUM_BERRY, + .itemCommon = ITEM_LUM_BERRY, + .itemRare = ITEM_LUM_BERRY, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, @@ -29417,481 +25727,23 @@ const struct BaseStats gBaseStats[] = .noFlip = TRUE, }, - [SPECIES_ARCEUS_FIGHTING] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_FLYING] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_FLYING, - .type2 = TYPE_FLYING, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_POISON] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_GROUND] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_ROCK] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_BUG] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_GHOST] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_STEEL] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_FIRE] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_WATER] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_GRASS] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_ELECTRIC] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_PSYCHIC] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_ICE] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_DRAGON] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_DARK] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ARCEUS_FAIRY] = - { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 120, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, + [SPECIES_ARCEUS_FIGHTING] = ARCEUS_BASE_STATS(TYPE_FIGHTING), + [SPECIES_ARCEUS_FLYING] = ARCEUS_BASE_STATS(TYPE_FLYING), + [SPECIES_ARCEUS_POISON] = ARCEUS_BASE_STATS(TYPE_POISON), + [SPECIES_ARCEUS_GROUND] = ARCEUS_BASE_STATS(TYPE_GROUND), + [SPECIES_ARCEUS_ROCK] = ARCEUS_BASE_STATS(TYPE_ROCK), + [SPECIES_ARCEUS_BUG] = ARCEUS_BASE_STATS(TYPE_BUG), + [SPECIES_ARCEUS_GHOST] = ARCEUS_BASE_STATS(TYPE_GHOST), + [SPECIES_ARCEUS_STEEL] = ARCEUS_BASE_STATS(TYPE_STEEL), + [SPECIES_ARCEUS_FIRE] = ARCEUS_BASE_STATS(TYPE_FIRE), + [SPECIES_ARCEUS_WATER] = ARCEUS_BASE_STATS(TYPE_WATER), + [SPECIES_ARCEUS_GRASS] = ARCEUS_BASE_STATS(TYPE_GRASS), + [SPECIES_ARCEUS_ELECTRIC] = ARCEUS_BASE_STATS(TYPE_ELECTRIC), + [SPECIES_ARCEUS_PSYCHIC] = ARCEUS_BASE_STATS(TYPE_PSYCHIC), + [SPECIES_ARCEUS_ICE] = ARCEUS_BASE_STATS(TYPE_ICE), + [SPECIES_ARCEUS_DRAGON] = ARCEUS_BASE_STATS(TYPE_DRAGON), + [SPECIES_ARCEUS_DARK] = ARCEUS_BASE_STATS(TYPE_DARK), + [SPECIES_ARCEUS_FAIRY] = ARCEUS_BASE_STATS(TYPE_FAIRY), [SPECIES_BASCULIN_BLUE_STRIPED] = { @@ -29906,18 +25758,39 @@ const struct BaseStats gBaseStats[] = .catchRate = 25, .expYield = 161, .evYield_Speed = 2, - .item2 = ITEM_DEEP_SEA_SCALE, + .itemRare = ITEM_DEEP_SEA_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ROCK_HEAD, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, - #else - .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ROCK_HEAD, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, + + [SPECIES_BASCULIN_WHITE_STRIPED] = + { + .baseHP = 70, + .baseAttack = 92, + .baseDefense = 65, + .baseSpeed = 98, + .baseSpAttack = 80, + .baseSpDefense = 55, + .type1 = TYPE_WATER, + .type2 = TYPE_WATER, + .catchRate = 25, + .expYield = 161, + .evYield_Speed = 2, + .itemRare = ITEM_DEEP_SEA_SCALE, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 40, + .friendship = 70, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroup1 = EGG_GROUP_WATER_2, + .eggGroup2 = EGG_GROUP_WATER_2, + .abilities = {ABILITY_RATTLED, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, @@ -29941,11 +25814,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_ZEN_MODE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_ZEN_MODE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -29969,183 +25838,19 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GORILLA_TACTICS, ABILITY_NONE, ABILITY_ZEN_MODE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_GORILLA_TACTICS, ABILITY_NONE, ABILITY_ZEN_MODE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, - .flags = F_GALARIAN_FORM, + .flags = FLAG_GALARIAN_FORM, }, - [SPECIES_DEERLING_SUMMER] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 50, - .baseSpeed = 75, - .baseSpAttack = 40, - .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GRASS, - .catchRate = 190, - .expYield = 67, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_SERENE_GRACE}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, + [SPECIES_DEERLING_SUMMER] = DEERLING_BASE_STATS(BODY_COLOR_GREEN), + [SPECIES_DEERLING_AUTUMN] = DEERLING_BASE_STATS(BODY_COLOR_RED), + [SPECIES_DEERLING_WINTER] = DEERLING_BASE_STATS(BODY_COLOR_BROWN), - [SPECIES_DEERLING_AUTUMN] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 50, - .baseSpeed = 75, - .baseSpAttack = 40, - .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GRASS, - .catchRate = 190, - .expYield = 67, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_SERENE_GRACE}, - #endif - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_DEERLING_WINTER] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 50, - .baseSpeed = 75, - .baseSpAttack = 40, - .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GRASS, - .catchRate = 190, - .expYield = 67, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_SERENE_GRACE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_SAWSBUCK_SUMMER] = - { - .baseHP = 80, - .baseAttack = 100, - .baseDefense = 70, - .baseSpeed = 95, - .baseSpAttack = 60, - .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GRASS, - .catchRate = 75, - .expYield = 166, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_SERENE_GRACE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_SAWSBUCK_AUTUMN] = - { - .baseHP = 80, - .baseAttack = 100, - .baseDefense = 70, - .baseSpeed = 95, - .baseSpAttack = 60, - .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GRASS, - .catchRate = 75, - .expYield = 166, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_SERENE_GRACE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_SAWSBUCK_WINTER] = - { - .baseHP = 80, - .baseAttack = 100, - .baseDefense = 70, - .baseSpeed = 95, - .baseSpAttack = 60, - .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GRASS, - .catchRate = 75, - .expYield = 166, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE}, - #else - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_SERENE_GRACE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, + [SPECIES_SAWSBUCK_SUMMER] = SAWSBUCK_BASE_STATS, + [SPECIES_SAWSBUCK_AUTUMN] = SAWSBUCK_BASE_STATS, + [SPECIES_SAWSBUCK_WINTER] = SAWSBUCK_BASE_STATS, [SPECIES_TORNADUS_THERIAN] = { @@ -30166,13 +25871,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_REGENERATOR, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_REGENERATOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_THUNDURUS_THERIAN] = @@ -30197,6 +25899,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_LANDORUS_THERIAN] = @@ -30221,6 +25924,32 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, + }, + + [SPECIES_ENAMORUS_THERIAN] = + { + .baseHP = 74, + .baseAttack = 115, + .baseDefense = 110, + .baseSpeed = 46, + .baseSpAttack = 135, + .baseSpDefense = 100, + .type1 = TYPE_FAIRY, + .type2 = TYPE_FLYING, + .catchRate = 3, + .expYield = 270, + .evYield_SpAttack = 3, + .genderRatio = MON_FEMALE, + .eggCycles = 120, + .friendship = 90, + .growthRate = GROWTH_SLOW, + .eggGroup1 = EGG_GROUP_UNDISCOVERED, + .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .abilities = {ABILITY_OVERCOAT, ABILITY_NONE}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_KYUREM_WHITE] = @@ -30242,13 +25971,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TURBOBLAZE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TURBOBLAZE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, + .flags = FLAG_LEGENDARY, }, [SPECIES_KYUREM_BLACK] = @@ -30270,13 +25996,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TERAVOLT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TERAVOLT, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, + .flags = FLAG_LEGENDARY, }, [SPECIES_KELDEO_RESOLUTE] = @@ -30298,13 +26021,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, + .flags = FLAG_MYTHICAL, }, [SPECIES_MELOETTA_PIROUETTE] = @@ -30322,8 +26042,8 @@ const struct BaseStats gBaseStats[] = .evYield_Attack = 1, .evYield_Defense = 1, .evYield_Speed = 1, - .item1 = ITEM_STAR_PIECE, - .item2 = ITEM_STAR_PIECE, + .itemCommon = ITEM_STAR_PIECE, + .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, @@ -30333,127 +26053,13 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, + .flags = FLAG_MYTHICAL, }, - [SPECIES_GENESECT_DOUSE_DRIVE] = - { - .baseHP = 71, - .baseAttack = 120, - .baseDefense = 95, - .baseSpeed = 99, - .baseSpAttack = 120, - .baseSpDefense = 95, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, - .catchRate = 3, - .expYield = 270, - .evYield_Attack = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DOWNLOAD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_GENESECT_SHOCK_DRIVE] = - { - .baseHP = 71, - .baseAttack = 120, - .baseDefense = 95, - .baseSpeed = 99, - .baseSpAttack = 120, - .baseSpDefense = 95, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, - .catchRate = 3, - .expYield = 270, - .evYield_Attack = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DOWNLOAD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_GENESECT_BURN_DRIVE] = - { - .baseHP = 71, - .baseAttack = 120, - .baseDefense = 95, - .baseSpeed = 99, - .baseSpAttack = 120, - .baseSpDefense = 95, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, - .catchRate = 3, - .expYield = 270, - .evYield_Attack = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DOWNLOAD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_GENESECT_CHILL_DRIVE] = - { - .baseHP = 71, - .baseAttack = 120, - .baseDefense = 95, - .baseSpeed = 99, - .baseSpAttack = 120, - .baseSpDefense = 95, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, - .catchRate = 3, - .expYield = 270, - .evYield_Attack = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DOWNLOAD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, + [SPECIES_GENESECT_DOUSE_DRIVE] = GENESECT_BASE_STATS, + [SPECIES_GENESECT_SHOCK_DRIVE] = GENESECT_BASE_STATS, + [SPECIES_GENESECT_BURN_DRIVE] = GENESECT_BASE_STATS, + [SPECIES_GENESECT_CHILL_DRIVE] = GENESECT_BASE_STATS, [SPECIES_GRENINJA_BATTLE_BOND] = { @@ -30474,11 +26080,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BATTLE_BOND, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BATTLE_BOND, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, }, @@ -30502,808 +26104,40 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_BATTLE_BOND, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_BATTLE_BOND, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, }, - [SPECIES_VIVILLON_POLAR] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, + [SPECIES_VIVILLON_POLAR] = VIVILLON_BASE_STATS(BODY_COLOR_BLUE), + [SPECIES_VIVILLON_TUNDRA] = VIVILLON_BASE_STATS(BODY_COLOR_BLUE), + [SPECIES_VIVILLON_CONTINENTAL] = VIVILLON_BASE_STATS(BODY_COLOR_YELLOW), + [SPECIES_VIVILLON_GARDEN] = VIVILLON_BASE_STATS(BODY_COLOR_GREEN), + [SPECIES_VIVILLON_ELEGANT] = VIVILLON_BASE_STATS(BODY_COLOR_PURPLE), + [SPECIES_VIVILLON_MEADOW] = VIVILLON_BASE_STATS(BODY_COLOR_PINK), + [SPECIES_VIVILLON_MODERN] = VIVILLON_BASE_STATS(BODY_COLOR_RED), + [SPECIES_VIVILLON_MARINE] = VIVILLON_BASE_STATS(BODY_COLOR_BLUE), + [SPECIES_VIVILLON_ARCHIPELAGO] = VIVILLON_BASE_STATS(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_HIGH_PLAINS] = VIVILLON_BASE_STATS(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_SANDSTORM] = VIVILLON_BASE_STATS(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_RIVER] = VIVILLON_BASE_STATS(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_MONSOON] = VIVILLON_BASE_STATS(BODY_COLOR_GRAY), + [SPECIES_VIVILLON_SAVANNA] = VIVILLON_BASE_STATS(BODY_COLOR_GREEN), + [SPECIES_VIVILLON_SUN] = VIVILLON_BASE_STATS(BODY_COLOR_RED), + [SPECIES_VIVILLON_OCEAN] = VIVILLON_BASE_STATS(BODY_COLOR_RED), + [SPECIES_VIVILLON_JUNGLE] = VIVILLON_BASE_STATS(BODY_COLOR_GREEN), + [SPECIES_VIVILLON_FANCY] = VIVILLON_BASE_STATS(BODY_COLOR_PINK), + [SPECIES_VIVILLON_POKE_BALL] = VIVILLON_BASE_STATS(BODY_COLOR_RED), - [SPECIES_VIVILLON_TUNDRA] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, + [SPECIES_FLABEBE_YELLOW_FLOWER] = FLABEBE_BASE_STATS, + [SPECIES_FLABEBE_ORANGE_FLOWER] = FLABEBE_BASE_STATS, + [SPECIES_FLABEBE_BLUE_FLOWER] = FLABEBE_BASE_STATS, + [SPECIES_FLABEBE_WHITE_FLOWER] = FLABEBE_BASE_STATS, - [SPECIES_VIVILLON_CONTINENTAL] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_GARDEN] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_ELEGANT] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_MEADOW] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_MODERN] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_MARINE] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_ARCHIPELAGO] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_HIGH_PLAINS] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_SANDSTORM] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_RIVER] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_MONSOON] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_SAVANNA] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_SUN] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_OCEAN] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_JUNGLE] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_FANCY] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - }, - - [SPECIES_VIVILLON_POKE_BALL] = - { - .baseHP = 80, - .baseAttack = 52, - .baseDefense = 50, - .baseSpeed = 89, - .baseSpAttack = 90, - .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 185, - .evYield_HP = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, - #else - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES}, - #endif - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_FLABEBE_YELLOW_FLOWER] = - { - .baseHP = 44, - .baseAttack = 38, - .baseDefense = 39, - .baseSpeed = 42, - .baseSpAttack = 61, - .baseSpDefense = 79, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 225, - .expYield = 61, - .evYield_SpDefense = 1, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FLABEBE_ORANGE_FLOWER] = - { - .baseHP = 44, - .baseAttack = 38, - .baseDefense = 39, - .baseSpeed = 42, - .baseSpAttack = 61, - .baseSpDefense = 79, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 225, - .expYield = 61, - .evYield_SpDefense = 1, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FLABEBE_BLUE_FLOWER] = - { - .baseHP = 44, - .baseAttack = 38, - .baseDefense = 39, - .baseSpeed = 42, - .baseSpAttack = 61, - .baseSpDefense = 79, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 225, - .expYield = 61, - .evYield_SpDefense = 1, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FLABEBE_WHITE_FLOWER] = - { - .baseHP = 44, - .baseAttack = 38, - .baseDefense = 39, - .baseSpeed = 42, - .baseSpAttack = 61, - .baseSpDefense = 79, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 225, - .expYield = 61, - .evYield_SpDefense = 1, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FLOETTE_YELLOW_FLOWER] = - { - .baseHP = 54, - .baseAttack = 45, - .baseDefense = 47, - .baseSpeed = 52, - .baseSpAttack = 75, - .baseSpDefense = 98, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 120, - .expYield = 130, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FLOETTE_ORANGE_FLOWER] = - { - .baseHP = 54, - .baseAttack = 45, - .baseDefense = 47, - .baseSpeed = 52, - .baseSpAttack = 75, - .baseSpDefense = 98, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 120, - .expYield = 130, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FLOETTE_BLUE_FLOWER] = - { - .baseHP = 54, - .baseAttack = 45, - .baseDefense = 47, - .baseSpeed = 52, - .baseSpAttack = 75, - .baseSpDefense = 98, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 120, - .expYield = 130, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FLOETTE_WHITE_FLOWER] = - { - .baseHP = 54, - .baseAttack = 45, - .baseDefense = 47, - .baseSpeed = 52, - .baseSpAttack = 75, - .baseSpDefense = 98, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 120, - .expYield = 130, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, + [SPECIES_FLOETTE_YELLOW_FLOWER] = FLOETTE_BASE_STATS, + [SPECIES_FLOETTE_ORANGE_FLOWER] = FLOETTE_BASE_STATS, + [SPECIES_FLOETTE_BLUE_FLOWER] = FLOETTE_BASE_STATS, + [SPECIES_FLOETTE_WHITE_FLOWER] = FLOETTE_BASE_STATS, [SPECIES_FLOETTE_ETERNAL_FLOWER] = { @@ -31324,378 +26158,25 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, - [SPECIES_FLORGES_YELLOW_FLOWER] = - { - .baseHP = 78, - .baseAttack = 65, - .baseDefense = 68, - .baseSpeed = 75, - .baseSpAttack = 112, - .baseSpDefense = 154, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 45, - .expYield = 248, - .evYield_SpDefense = 3, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, + [SPECIES_FLORGES_YELLOW_FLOWER] = FLORGES_BASE_STATS, + [SPECIES_FLORGES_ORANGE_FLOWER] = FLORGES_BASE_STATS, + [SPECIES_FLORGES_BLUE_FLOWER] = FLORGES_BASE_STATS, + [SPECIES_FLORGES_WHITE_FLOWER] = FLORGES_BASE_STATS, - [SPECIES_FLORGES_ORANGE_FLOWER] = - { - .baseHP = 78, - .baseAttack = 65, - .baseDefense = 68, - .baseSpeed = 75, - .baseSpAttack = 112, - .baseSpDefense = 154, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 45, - .expYield = 248, - .evYield_SpDefense = 3, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FLORGES_BLUE_FLOWER] = - { - .baseHP = 78, - .baseAttack = 65, - .baseDefense = 68, - .baseSpeed = 75, - .baseSpAttack = 112, - .baseSpDefense = 154, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 45, - .expYield = 248, - .evYield_SpDefense = 3, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FLORGES_WHITE_FLOWER] = - { - .baseHP = 78, - .baseAttack = 65, - .baseDefense = 68, - .baseSpeed = 75, - .baseSpAttack = 112, - .baseSpDefense = 154, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 45, - .expYield = 248, - .evYield_SpDefense = 3, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FURFROU_HEART_TRIM] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 60, - .baseSpeed = 102, - .baseSpAttack = 65, - .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 160, - .expYield = 165, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FURFROU_STAR_TRIM] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 60, - .baseSpeed = 102, - .baseSpAttack = 65, - .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 160, - .expYield = 165, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FURFROU_DIAMOND_TRIM] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 60, - .baseSpeed = 102, - .baseSpAttack = 65, - .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 160, - .expYield = 165, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FURFROU_DEBUTANTE_TRIM] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 60, - .baseSpeed = 102, - .baseSpAttack = 65, - .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 160, - .expYield = 165, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = TRUE, - }, - - [SPECIES_FURFROU_MATRON_TRIM] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 60, - .baseSpeed = 102, - .baseSpAttack = 65, - .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 160, - .expYield = 165, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FURFROU_DANDY_TRIM] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 60, - .baseSpeed = 102, - .baseSpAttack = 65, - .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 160, - .expYield = 165, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FURFROU_LA_REINE_TRIM] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 60, - .baseSpeed = 102, - .baseSpAttack = 65, - .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 160, - .expYield = 165, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FURFROU_KABUKI_TRIM] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 60, - .baseSpeed = 102, - .baseSpAttack = 65, - .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 160, - .expYield = 165, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FURFROU_PHARAOH_TRIM] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 60, - .baseSpeed = 102, - .baseSpAttack = 65, - .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, - .catchRate = 160, - .expYield = 165, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, + [SPECIES_FURFROU_HEART_TRIM] = FURFROU_BASE_STATS(FLIP), + [SPECIES_FURFROU_STAR_TRIM] = FURFROU_BASE_STATS(FLIP), + [SPECIES_FURFROU_DIAMOND_TRIM] = FURFROU_BASE_STATS(FLIP), + [SPECIES_FURFROU_DEBUTANTE_TRIM] = FURFROU_BASE_STATS(NO_FLIP), + [SPECIES_FURFROU_MATRON_TRIM] = FURFROU_BASE_STATS(FLIP), + [SPECIES_FURFROU_DANDY_TRIM] = FURFROU_BASE_STATS(FLIP), + [SPECIES_FURFROU_LA_REINE_TRIM] = FURFROU_BASE_STATS(FLIP), + [SPECIES_FURFROU_KABUKI_TRIM] = FURFROU_BASE_STATS(FLIP), + [SPECIES_FURFROU_PHARAOH_TRIM] = FURFROU_BASE_STATS(FLIP), [SPECIES_MEOWSTIC_FEMALE] = { @@ -31716,11 +26197,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_COMPETITIVE}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_COMPETITIVE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -31750,11 +26227,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_STANCE_CHANGE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_STANCE_CHANGE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -31767,24 +26240,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 56, .baseSpAttack = 44, .baseSpDefense = 55, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, - .catchRate = 120, - .expYield = 67, - .evYield_Defense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_INSOMNIA}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + PUMKPABOO_MISC_STATS, }, [SPECIES_PUMPKABOO_LARGE] = @@ -31795,24 +26251,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 46, .baseSpAttack = 44, .baseSpDefense = 55, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, - .catchRate = 120, - .expYield = 67, - .evYield_Defense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_INSOMNIA}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + PUMKPABOO_MISC_STATS, }, [SPECIES_PUMPKABOO_SUPER] = @@ -31823,24 +26262,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 41, .baseSpAttack = 44, .baseSpDefense = 55, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, - .catchRate = 120, - .expYield = 67, - .evYield_Defense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_INSOMNIA}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + PUMKPABOO_MISC_STATS, }, [SPECIES_GOURGEIST_SMALL] = @@ -31851,24 +26273,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 99, .baseSpAttack = 58, .baseSpDefense = 75, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, - .catchRate = 60, - .expYield = 173, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_INSOMNIA}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + GOURGEIST_MISC_STATS, }, [SPECIES_GOURGEIST_LARGE] = @@ -31879,24 +26284,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 69, .baseSpAttack = 58, .baseSpDefense = 75, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, - .catchRate = 60, - .expYield = 173, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_INSOMNIA}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + GOURGEIST_MISC_STATS, }, [SPECIES_GOURGEIST_SUPER] = @@ -31907,137 +26295,14 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 54, .baseSpAttack = 58, .baseSpDefense = 75, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, - .catchRate = 60, - .expYield = 173, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA}, - #else - .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_INSOMNIA}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + GOURGEIST_MISC_STATS, }, - [SPECIES_XERNEAS_ACTIVE] = - { - .baseHP = 126, - .baseAttack = 131, - .baseDefense = 95, - .baseSpeed = 99, - .baseSpAttack = 131, - .baseSpDefense = 98, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 45, - .expYield = 306, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_FAIRY_AURA, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, + [SPECIES_XERNEAS_ACTIVE] = XERNEAS_BASE_STATS, - [SPECIES_ZYGARDE_10] = - { - .baseHP = 54, - .baseAttack = 100, - .baseDefense = 71, - .baseSpeed = 115, - .baseSpAttack = 61, - .baseSpDefense = 85, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GROUND, - .catchRate = 3, - .expYield = 219, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_AURA_BREAK, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = - { - .baseHP = 54, - .baseAttack = 100, - .baseDefense = 71, - .baseSpeed = 115, - .baseSpAttack = 61, - .baseSpDefense = 85, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GROUND, - .catchRate = 3, - .expYield = 219, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POWER_CONSTRUCT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - }, - - [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = - { - .baseHP = 108, - .baseAttack = 100, - .baseDefense = 121, - .baseSpeed = 95, - .baseSpAttack = 81, - .baseSpDefense = 95, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GROUND, - .catchRate = 3, - .expYield = 270, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POWER_CONSTRUCT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, - }, + [SPECIES_ZYGARDE_10] = ZYGARDE_10_BASE_STATS(ABILITY_AURA_BREAK), + [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = ZYGARDE_50_BASE_STATS(ABILITY_POWER_CONSTRUCT), + [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = ZYGARDE_50_BASE_STATS(ABILITY_POWER_CONSTRUCT), [SPECIES_ZYGARDE_COMPLETE] = { @@ -32058,13 +26323,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_POWER_CONSTRUCT, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_POWER_CONSTRUCT, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, + .flags = FLAG_LEGENDARY, }, [SPECIES_HOOPA_UNBOUND] = @@ -32086,131 +26348,17 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_MAGICIAN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_MAGICIAN, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_MYTHICAL, }, - [SPECIES_ORICORIO_POM_POM] = - { - .baseHP = 75, - .baseAttack = 70, - .baseDefense = 70, - .baseSpeed = 93, - .baseSpAttack = 98, - .baseSpDefense = 70, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 167, - .evYield_SpAttack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_HONEY, - #endif - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DANCER, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, + [SPECIES_ORICORIO_POM_POM] = ORICORIO_BASE_STATS(TYPE_ELECTRIC, BODY_COLOR_YELLOW), + [SPECIES_ORICORIO_PAU] = ORICORIO_BASE_STATS(TYPE_PSYCHIC, BODY_COLOR_PINK), + [SPECIES_ORICORIO_SENSU] = ORICORIO_BASE_STATS(TYPE_GHOST, BODY_COLOR_PURPLE), - [SPECIES_ORICORIO_PAU] = - { - .baseHP = 75, - .baseAttack = 70, - .baseDefense = 70, - .baseSpeed = 93, - .baseSpAttack = 98, - .baseSpDefense = 70, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 167, - .evYield_SpAttack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_HONEY, - #endif - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DANCER, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - }, - - [SPECIES_ORICORIO_SENSU] = - { - .baseHP = 75, - .baseAttack = 70, - .baseDefense = 70, - .baseSpeed = 93, - .baseSpAttack = 98, - .baseSpDefense = 70, - .type1 = TYPE_GHOST, - .type2 = TYPE_FLYING, - .catchRate = 45, - .expYield = 167, - .evYield_SpAttack = 2, - #ifdef ITEM_EXPANSION - .item2 = ITEM_HONEY, - #endif - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DANCER, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_ROCKRUFF_OWN_TEMPO] = - { - .baseHP = 45, - .baseAttack = 65, - .baseDefense = 40, - .baseSpeed = 60, - .baseSpAttack = 30, - .baseSpDefense = 40, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, - .catchRate = 190, - .expYield = 56, - .evYield_Attack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, - .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, + [SPECIES_ROCKRUFF_OWN_TEMPO] = ROCKRUFF_BASE_STATS(ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_NONE), [SPECIES_LYCANROC_MIDNIGHT] = { @@ -32231,11 +26379,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_NO_GUARD}, - #else - .abilities = {ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT}, - #endif + .abilities = {ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_NO_GUARD}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, @@ -32259,11 +26403,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, @@ -32287,908 +26427,45 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SCHOOLING, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_SCHOOLING, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, - [SPECIES_SILVALLY_FIGHTING] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, + [SPECIES_SILVALLY_FIGHTING] = SILVALLY_BASE_STATS(TYPE_FIGHTING), + [SPECIES_SILVALLY_FLYING] = SILVALLY_BASE_STATS(TYPE_FLYING), + [SPECIES_SILVALLY_POISON] = SILVALLY_BASE_STATS(TYPE_POISON), + [SPECIES_SILVALLY_GROUND] = SILVALLY_BASE_STATS(TYPE_GROUND), + [SPECIES_SILVALLY_ROCK] = SILVALLY_BASE_STATS(TYPE_ROCK), + [SPECIES_SILVALLY_BUG] = SILVALLY_BASE_STATS(TYPE_BUG), + [SPECIES_SILVALLY_GHOST] = SILVALLY_BASE_STATS(TYPE_GHOST), + [SPECIES_SILVALLY_STEEL] = SILVALLY_BASE_STATS(TYPE_STEEL), + [SPECIES_SILVALLY_FIRE] = SILVALLY_BASE_STATS(TYPE_FIRE), + [SPECIES_SILVALLY_WATER] = SILVALLY_BASE_STATS(TYPE_WATER), + [SPECIES_SILVALLY_GRASS] = SILVALLY_BASE_STATS(TYPE_GRASS), + [SPECIES_SILVALLY_ELECTRIC] = SILVALLY_BASE_STATS(TYPE_ELECTRIC), + [SPECIES_SILVALLY_PSYCHIC] = SILVALLY_BASE_STATS(TYPE_PSYCHIC), + [SPECIES_SILVALLY_ICE] = SILVALLY_BASE_STATS(TYPE_ICE), + [SPECIES_SILVALLY_DRAGON] = SILVALLY_BASE_STATS(TYPE_DRAGON), + [SPECIES_SILVALLY_DARK] = SILVALLY_BASE_STATS(TYPE_DARK), + [SPECIES_SILVALLY_FAIRY] = SILVALLY_BASE_STATS(TYPE_FAIRY), - [SPECIES_SILVALLY_FLYING] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_FLYING, - .type2 = TYPE_FLYING, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, + [SPECIES_MINIOR_METEOR_ORANGE] = MINIOR_METEOR_BASE_STATS, + [SPECIES_MINIOR_METEOR_YELLOW] = MINIOR_METEOR_BASE_STATS, + [SPECIES_MINIOR_METEOR_GREEN] = MINIOR_METEOR_BASE_STATS, + [SPECIES_MINIOR_METEOR_BLUE] = MINIOR_METEOR_BASE_STATS, + [SPECIES_MINIOR_METEOR_INDIGO] = MINIOR_METEOR_BASE_STATS, + [SPECIES_MINIOR_METEOR_VIOLET] = MINIOR_METEOR_BASE_STATS, - [SPECIES_SILVALLY_POISON] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_GROUND] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_ROCK] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_BUG] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_GHOST] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_STEEL] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_FIRE] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_WATER] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_GRASS] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_ELECTRIC] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_PSYCHIC] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_ICE] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_DRAGON] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_DARK] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_FAIRY] = - { - .baseHP = 95, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 95, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 3, - .expYield = 257, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_MINIOR_METEOR_ORANGE] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 100, - .baseSpeed = 60, - .baseSpAttack = 60, - .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_METEOR_YELLOW] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 100, - .baseSpeed = 60, - .baseSpAttack = 60, - .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_METEOR_GREEN] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 100, - .baseSpeed = 60, - .baseSpAttack = 60, - .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_METEOR_BLUE] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 100, - .baseSpeed = 60, - .baseSpAttack = 60, - .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_METEOR_INDIGO] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 100, - .baseSpeed = 60, - .baseSpAttack = 60, - .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_METEOR_VIOLET] = - { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 100, - .baseSpeed = 60, - .baseSpAttack = 60, - .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_CORE_RED] = - { - .baseHP = 60, - .baseAttack = 100, - .baseDefense = 60, - .baseSpeed = 120, - .baseSpAttack = 100, - .baseSpDefense = 60, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_RED, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_CORE_ORANGE] = - { - .baseHP = 60, - .baseAttack = 100, - .baseDefense = 60, - .baseSpeed = 120, - .baseSpAttack = 100, - .baseSpDefense = 60, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_RED, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_CORE_YELLOW] = - { - .baseHP = 60, - .baseAttack = 100, - .baseDefense = 60, - .baseSpeed = 120, - .baseSpAttack = 100, - .baseSpDefense = 60, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_CORE_GREEN] = - { - .baseHP = 60, - .baseAttack = 100, - .baseDefense = 60, - .baseSpeed = 120, - .baseSpAttack = 100, - .baseSpDefense = 60, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_CORE_BLUE] = - { - .baseHP = 60, - .baseAttack = 100, - .baseDefense = 60, - .baseSpeed = 120, - .baseSpAttack = 100, - .baseSpDefense = 60, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_CORE_INDIGO] = - { - .baseHP = 60, - .baseAttack = 100, - .baseDefense = 60, - .baseSpeed = 120, - .baseSpAttack = 100, - .baseSpDefense = 60, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = TRUE, - }, - - [SPECIES_MINIOR_CORE_VIOLET] = - { - .baseHP = 60, - .baseAttack = 100, - .baseDefense = 60, - .baseSpeed = 120, - .baseSpAttack = 100, - .baseSpDefense = 60, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, - .catchRate = 30, - .expYield = 154, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .item2 = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = TRUE, - }, - - [SPECIES_MIMIKYU_BUSTED] = - { - .baseHP = 55, - .baseAttack = 90, - .baseDefense = 80, - .baseSpeed = 96, - .baseSpAttack = 50, - .baseSpDefense = 105, - .type1 = TYPE_GHOST, - .type2 = TYPE_FAIRY, - .catchRate = 45, - .expYield = 167, - .evYield_SpDefense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DISGUISE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, + [SPECIES_MINIOR_CORE_RED] = MINIOR_CORE_BASE_STATS(BODY_COLOR_RED), + [SPECIES_MINIOR_CORE_ORANGE] = MINIOR_CORE_BASE_STATS(BODY_COLOR_RED), + [SPECIES_MINIOR_CORE_YELLOW] = MINIOR_CORE_BASE_STATS(BODY_COLOR_YELLOW), + [SPECIES_MINIOR_CORE_GREEN] = MINIOR_CORE_BASE_STATS(BODY_COLOR_GREEN), + [SPECIES_MINIOR_CORE_BLUE] = MINIOR_CORE_BASE_STATS(BODY_COLOR_BLUE), + [SPECIES_MINIOR_CORE_INDIGO] = MINIOR_CORE_BASE_STATS(BODY_COLOR_BLUE), + [SPECIES_MINIOR_CORE_VIOLET] = MINIOR_CORE_BASE_STATS(BODY_COLOR_PURPLE), + + [SPECIES_MIMIKYU_BUSTED] = MIMIKYU_BASE_STATS, [SPECIES_NECROZMA_DUSK_MANE] = { @@ -33209,13 +26486,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, + .flags = FLAG_LEGENDARY, }, [SPECIES_NECROZMA_DAWN_WINGS] = @@ -33237,13 +26511,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, + .flags = FLAG_LEGENDARY, }, [SPECIES_NECROZMA_ULTRA] = @@ -33267,407 +26538,32 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_NEUROFORCE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_NEUROFORCE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, + .flags = FLAG_LEGENDARY, }, - [SPECIES_MAGEARNA_ORIGINAL_COLOR] = - { - .baseHP = 80, - .baseAttack = 95, - .baseDefense = 115, - .baseSpeed = 65, - .baseSpAttack = 130, - .baseSpDefense = 115, - .type1 = TYPE_STEEL, - .type2 = TYPE_FAIRY, - .catchRate = 3, - .expYield = 270, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SOUL_HEART, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, + [SPECIES_MAGEARNA_ORIGINAL_COLOR] = MAGEARNA_BASE_STATS(BODY_COLOR_RED), - [SPECIES_CRAMORANT_GULPING] = - { - .baseHP = 70, - .baseAttack = 85, - .baseDefense = 55, - .baseSpeed = 85, - .baseSpAttack = 85, - .baseSpDefense = 95, - .type1 = TYPE_FLYING, - .type2 = TYPE_WATER, - .catchRate = 45, - .expYield = 166, - .evYield_SpDefense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GULP_MISSILE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, + [SPECIES_CRAMORANT_GULPING] = CRAMORANT_BASE_STATS, + [SPECIES_CRAMORANT_GORGING] = CRAMORANT_BASE_STATS, - [SPECIES_CRAMORANT_GORGING] = - { - .baseHP = 70, - .baseAttack = 85, - .baseDefense = 55, - .baseSpeed = 85, - .baseSpAttack = 85, - .baseSpDefense = 95, - .type1 = TYPE_FLYING, - .type2 = TYPE_WATER, - .catchRate = 45, - .expYield = 166, - .evYield_SpDefense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FLYING, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_GULP_MISSILE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, + [SPECIES_TOXTRICITY_LOW_KEY] = TOXTRICITY_BASE_STATS(ABILITY_MINUS), - [SPECIES_TOXTRICITY_LOW_KEY] = - { - .baseHP = 75, - .baseAttack = 98, - .baseDefense = 70, - .baseSpeed = 75, - .baseSpAttack = 114, - .baseSpDefense = 70, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_POISON, - .catchRate = 45, - .expYield = 176, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_PUNK_ROCK, ABILITY_MINUS, ABILITY_TECHNICIAN}, - #else - .abilities = {ABILITY_NONE, ABILITY_MINUS}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, + [SPECIES_SINISTEA_ANTIQUE] = SINISTEA_BASE_STATS, - [SPECIES_SINISTEA_ANTIQUE] = - { - .baseHP = 40, - .baseAttack = 45, - .baseDefense = 45, - .baseSpeed = 50, - .baseSpAttack = 74, - .baseSpDefense = 54, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, - .catchRate = 120, - .expYield = 62, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_POLTEAGEIST_ANTIQUE] = - { - .baseHP = 60, - .baseAttack = 65, - .baseDefense = 65, - .baseSpeed = 70, - .baseSpAttack = 134, - .baseSpDefense = 114, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, - .catchRate = 60, - .expYield = 178, - .evYield_SpAttack = 2, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_ALCREMIE_RUBY_CREAM] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 75, - .baseSpeed = 64, - .baseSpAttack = 110, - .baseSpDefense = 121, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 100, - .expYield = 173, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - }, - - [SPECIES_ALCREMIE_MATCHA_CREAM] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 75, - .baseSpeed = 64, - .baseSpAttack = 110, - .baseSpDefense = 121, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 100, - .expYield = 173, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, - - [SPECIES_ALCREMIE_MINT_CREAM] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 75, - .baseSpeed = 64, - .baseSpAttack = 110, - .baseSpDefense = 121, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 100, - .expYield = 173, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - - [SPECIES_ALCREMIE_LEMON_CREAM] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 75, - .baseSpeed = 64, - .baseSpAttack = 110, - .baseSpDefense = 121, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 100, - .expYield = 173, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_ALCREMIE_SALTED_CREAM] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 75, - .baseSpeed = 64, - .baseSpAttack = 110, - .baseSpDefense = 121, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 100, - .expYield = 173, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_ALCREMIE_RUBY_SWIRL] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 75, - .baseSpeed = 64, - .baseSpAttack = 110, - .baseSpDefense = 121, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 100, - .expYield = 173, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 75, - .baseSpeed = 64, - .baseSpAttack = 110, - .baseSpDefense = 121, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 100, - .expYield = 173, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 75, - .baseSpeed = 64, - .baseSpAttack = 110, - .baseSpDefense = 121, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, - .catchRate = 100, - .expYield = 173, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, + [SPECIES_POLTEAGEIST_ANTIQUE] = POLTEAGEIST_BASE_STATS, + [SPECIES_ALCREMIE_RUBY_CREAM] = ALCREMIE_BASE_STATS(BODY_COLOR_PINK), + [SPECIES_ALCREMIE_MATCHA_CREAM] = ALCREMIE_BASE_STATS(BODY_COLOR_GREEN), + [SPECIES_ALCREMIE_MINT_CREAM] = ALCREMIE_BASE_STATS(BODY_COLOR_BLUE), + [SPECIES_ALCREMIE_LEMON_CREAM] = ALCREMIE_BASE_STATS(BODY_COLOR_YELLOW), + [SPECIES_ALCREMIE_SALTED_CREAM] = ALCREMIE_BASE_STATS(BODY_COLOR_WHITE), + [SPECIES_ALCREMIE_RUBY_SWIRL] = ALCREMIE_BASE_STATS(BODY_COLOR_YELLOW), + [SPECIES_ALCREMIE_CARAMEL_SWIRL] = ALCREMIE_BASE_STATS(BODY_COLOR_BROWN), + [SPECIES_ALCREMIE_RAINBOW_SWIRL] = ALCREMIE_BASE_STATS(BODY_COLOR_YELLOW), + [SPECIES_EISCUE_NOICE_FACE] = { .baseHP = 75, @@ -33687,11 +26583,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_ICE_FACE, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_ICE_FACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -33715,42 +26607,12 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_OWN_TEMPO, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE}, - #else - .abilities = {ABILITY_OWN_TEMPO, ABILITY_SYNCHRONIZE}, - #endif + .abilities = {ABILITY_OWN_TEMPO, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, - [SPECIES_MORPEKO_HANGRY] = - { - .baseHP = 58, - .baseAttack = 95, - .baseDefense = 58, - .baseSpeed = 97, - .baseSpAttack = 70, - .baseSpDefense = 58, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_DARK, - .catchRate = 180, - .expYield = 153, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_HUNGER_SWITCH, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, + [SPECIES_MORPEKO_HANGRY] = MORPEKO_BASE_STATS, [SPECIES_ZACIAN_CROWNED_SWORD] = { @@ -33771,13 +26633,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_INTREPID_SWORD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_INTREPID_SWORD, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = @@ -33799,13 +26658,10 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_DAUNTLESS_SHIELD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_DAUNTLESS_SHIELD, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_ETERNATUS_ETERNAMAX] = @@ -33830,6 +26686,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = @@ -33851,42 +26708,13 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_UNSEEN_FIST, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_UNSEEN_FIST, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, + .flags = FLAG_LEGENDARY, }, - [SPECIES_ZARUDE_DADA] = - { - .baseHP = 105, - .baseAttack = 120, - .baseDefense = 105, - .baseSpeed = 105, - .baseSpAttack = 70, - .baseSpDefense = 95, - .type1 = TYPE_DARK, - .type2 = TYPE_GRASS, - .catchRate = 3, - .expYield = 300, - .evYield_Attack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, + [SPECIES_ZARUDE_DADA] = ZARUDE_BASE_STATS, [SPECIES_CALYREX_ICE_RIDER] = { @@ -33907,11 +26735,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_AS_ONE_ICE_RIDER, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_AS_ONE_ICE_RIDER, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, @@ -33935,12 +26759,9 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - #ifdef BATTLE_ENGINE - .abilities = {ABILITY_AS_ONE_SHADOW_RIDER, ABILITY_NONE}, - #else - .abilities = {ABILITY_NONE, ABILITY_NONE}, - #endif + .abilities = {ABILITY_AS_ONE_SHADOW_RIDER, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif }; diff --git a/src/data/pokemon/egg_moves.h b/src/data/pokemon/egg_moves.h index 18853e0c87..3a5f3c332c 100644 --- a/src/data/pokemon/egg_moves.h +++ b/src/data/pokemon/egg_moves.h @@ -2387,6 +2387,7 @@ const u16 gEggMoves[] = { MOVE_ENDURE, MOVE_DEFENSE_CURL), +#if P_NEW_POKEMON == TRUE egg_moves(TURTWIG, MOVE_WORRY_SEED, MOVE_GROWTH, @@ -4409,6 +4410,7 @@ const u16 gEggMoves[] = { MOVE_FAKE_OUT, MOVE_PSYCHO_SHIFT, MOVE_HEAL_PULSE), +#endif EGG_MOVES_TERMINATOR }; diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h index bc7cce52c3..bf15638f2a 100644 --- a/src/data/pokemon/evolution.h +++ b/src/data/pokemon/evolution.h @@ -105,7 +105,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = {EVO_SPECIFIC_MAP, MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM, SPECIES_GLACEON}, {EVO_ITEM, ITEM_ICE_STONE, SPECIES_GLACEON}, {EVO_MOVE_TYPE, TYPE_FAIRY, SPECIES_SYLVEON}}, - [SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UP_GRADE, SPECIES_PORYGON2}}, + [SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UPGRADE, SPECIES_PORYGON2}}, [SPECIES_OMANYTE] = {{EVO_LEVEL, 40, SPECIES_OMASTAR}}, [SPECIES_KABUTO] = {{EVO_LEVEL, 40, SPECIES_KABUTOPS}}, [SPECIES_AERODACTYL] = {{EVO_MEGA_EVOLUTION, ITEM_AERODACTYLITE, SPECIES_AERODACTYL_MEGA}}, @@ -467,15 +467,15 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_YAMPER] = {{EVO_LEVEL, 25, SPECIES_BOLTUND}}, [SPECIES_ROLYCOLY] = {{EVO_LEVEL, 18, SPECIES_CARKOL}}, [SPECIES_CARKOL] = {{EVO_LEVEL, 34, SPECIES_COALOSSAL}}, - [SPECIES_APPLIN] = {{EVO_ITEM, ITEM_NONE, SPECIES_FLAPPLE}, - {EVO_ITEM, ITEM_NONE, SPECIES_APPLETUN}}, + [SPECIES_APPLIN] = {{EVO_ITEM, ITEM_TART_APPLE, SPECIES_FLAPPLE}, + {EVO_ITEM, ITEM_SWEET_APPLE, SPECIES_APPLETUN}}, [SPECIES_SILICOBRA] = {{EVO_LEVEL, 36, SPECIES_SANDACONDA}}, [SPECIES_ARROKUDA] = {{EVO_LEVEL, 26, SPECIES_BARRASKEWDA}}, - [SPECIES_TOXEL] = {{EVO_LEVEL, 30, SPECIES_TOXTRICITY}, - {EVO_LEVEL, 30, SPECIES_TOXTRICITY_LOW_KEY}}, + [SPECIES_TOXEL] = {{EVO_LEVEL_NATURE_AMPED, 30, SPECIES_TOXTRICITY}, + {EVO_LEVEL_NATURE_LOW_KEY, 30, SPECIES_TOXTRICITY_LOW_KEY}}, [SPECIES_SIZZLIPEDE] = {{EVO_LEVEL, 28, SPECIES_CENTISKORCH}}, [SPECIES_CLOBBOPUS] = {{EVO_MOVE, MOVE_TAUNT, SPECIES_GRAPPLOCT}}, - [SPECIES_SINISTEA] = {{EVO_ITEM, ITEM_NONE, SPECIES_POLTEAGEIST}}, + [SPECIES_SINISTEA] = {{EVO_ITEM, ITEM_CRACKED_POT, SPECIES_POLTEAGEIST}}, [SPECIES_HATENNA] = {{EVO_LEVEL, 32, SPECIES_HATTREM}}, [SPECIES_HATTREM] = {{EVO_LEVEL, 42, SPECIES_HATTERENE}}, [SPECIES_IMPIDIMP] = {{EVO_LEVEL, 32, SPECIES_MORGREM}}, @@ -493,8 +493,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_CUFANT] = {{EVO_LEVEL, 34, SPECIES_COPPERAJAH}}, [SPECIES_DREEPY] = {{EVO_LEVEL, 50, SPECIES_DRAKLOAK}}, [SPECIES_DRAKLOAK] = {{EVO_LEVEL, 60, SPECIES_DRAGAPULT}}, - [SPECIES_KUBFU] = {{EVO_LEVEL, 0, SPECIES_URSHIFU}, - {EVO_LEVEL, 0, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}}, + [SPECIES_KUBFU] = {{EVO_DARK_SCROLL, 0, SPECIES_URSHIFU}, + {EVO_WATER_SCROLL, 0, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}}, [SPECIES_RATTATA_ALOLAN] = {{EVO_LEVEL_NIGHT, 20, SPECIES_RATICATE_ALOLAN}}, [SPECIES_SANDSHREW_ALOLAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_SANDSLASH_ALOLAN}}, [SPECIES_VULPIX_ALOLAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_NINETALES_ALOLAN}}, @@ -505,15 +505,15 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_GRIMER_ALOLAN] = {{EVO_LEVEL, 38, SPECIES_MUK_ALOLAN}}, [SPECIES_MEOWTH_GALARIAN] = {{EVO_LEVEL, 28, SPECIES_PERRSERKER}}, [SPECIES_PONYTA_GALARIAN] = {{EVO_LEVEL, 40, SPECIES_RAPIDASH_GALARIAN}}, - [SPECIES_SLOWPOKE_GALARIAN] = {{EVO_ITEM, ITEM_NONE, SPECIES_SLOWBRO_GALARIAN}, - {EVO_ITEM, ITEM_NONE, SPECIES_SLOWKING_GALARIAN}}, - [SPECIES_FARFETCHD_GALARIAN] = {{EVO_LEVEL, 0, SPECIES_SIRFETCHD}}, + [SPECIES_SLOWPOKE_GALARIAN] = {{EVO_ITEM, ITEM_GALARICA_CUFF, SPECIES_SLOWBRO_GALARIAN}, + {EVO_ITEM, ITEM_GALARICA_WREATH, SPECIES_SLOWKING_GALARIAN}}, + [SPECIES_FARFETCHD_GALARIAN] = {{EVO_CRITICAL_HITS, 3, SPECIES_SIRFETCHD}}, [SPECIES_MR_MIME_GALARIAN] = {{EVO_LEVEL, 42, SPECIES_MR_RIME}}, [SPECIES_CORSOLA_GALARIAN] = {{EVO_LEVEL, 38, SPECIES_CURSOLA}}, [SPECIES_ZIGZAGOON_GALARIAN] = {{EVO_LEVEL, 20, SPECIES_LINOONE_GALARIAN}}, [SPECIES_LINOONE_GALARIAN] = {{EVO_LEVEL_NIGHT, 35, SPECIES_OBSTAGOON}}, [SPECIES_DARUMAKA_GALARIAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_DARMANITAN_GALARIAN}}, - [SPECIES_YAMASK_GALARIAN] = {{EVO_LEVEL, 0, SPECIES_RUNERIGUS}}, + [SPECIES_YAMASK_GALARIAN] = {{EVO_SCRIPT_TRIGGER_DMG, 49, SPECIES_RUNERIGUS}}, [SPECIES_BURMY_SANDY_CLOAK] = {{EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM_SANDY_CLOAK}, {EVO_LEVEL_MALE, 20, SPECIES_MOTHIM}}, [SPECIES_BURMY_TRASH_CLOAK] = {{EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM_TRASH_CLOAK}, @@ -534,5 +534,5 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_PUMPKABOO_LARGE] = {{EVO_TRADE, 0, SPECIES_GOURGEIST_LARGE}}, [SPECIES_PUMPKABOO_SUPER] = {{EVO_TRADE, 0, SPECIES_GOURGEIST_SUPER}}, [SPECIES_ROCKRUFF_OWN_TEMPO] = {{EVO_LEVEL_DUSK, 25, SPECIES_LYCANROC_DUSK}}, - [SPECIES_SINISTEA_ANTIQUE] = {{EVO_ITEM, ITEM_NONE, SPECIES_POLTEAGEIST_ANTIQUE}}, + [SPECIES_SINISTEA_ANTIQUE] = {{EVO_ITEM, ITEM_CHIPPED_POT, SPECIES_POLTEAGEIST_ANTIQUE}}, }; diff --git a/src/data/pokemon/evolution_old.h b/src/data/pokemon/evolution_old.h new file mode 100644 index 0000000000..0a604defb3 --- /dev/null +++ b/src/data/pokemon/evolution_old.h @@ -0,0 +1,188 @@ +const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = +{ + [SPECIES_BULBASAUR] = {{EVO_LEVEL, 16, SPECIES_IVYSAUR}}, + [SPECIES_IVYSAUR] = {{EVO_LEVEL, 32, SPECIES_VENUSAUR}}, + [SPECIES_CHARMANDER] = {{EVO_LEVEL, 16, SPECIES_CHARMELEON}}, + [SPECIES_CHARMELEON] = {{EVO_LEVEL, 36, SPECIES_CHARIZARD}}, + [SPECIES_SQUIRTLE] = {{EVO_LEVEL, 16, SPECIES_WARTORTLE}}, + [SPECIES_WARTORTLE] = {{EVO_LEVEL, 36, SPECIES_BLASTOISE}}, + [SPECIES_CATERPIE] = {{EVO_LEVEL, 7, SPECIES_METAPOD}}, + [SPECIES_METAPOD] = {{EVO_LEVEL, 10, SPECIES_BUTTERFREE}}, + [SPECIES_WEEDLE] = {{EVO_LEVEL, 7, SPECIES_KAKUNA}}, + [SPECIES_KAKUNA] = {{EVO_LEVEL, 10, SPECIES_BEEDRILL}}, + [SPECIES_PIDGEY] = {{EVO_LEVEL, 18, SPECIES_PIDGEOTTO}}, + [SPECIES_PIDGEOTTO] = {{EVO_LEVEL, 36, SPECIES_PIDGEOT}}, + [SPECIES_RATTATA] = {{EVO_LEVEL, 20, SPECIES_RATICATE}}, + [SPECIES_SPEAROW] = {{EVO_LEVEL, 20, SPECIES_FEAROW}}, + [SPECIES_EKANS] = {{EVO_LEVEL, 22, SPECIES_ARBOK}}, + [SPECIES_PIKACHU] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}}, + [SPECIES_SANDSHREW] = {{EVO_LEVEL, 22, SPECIES_SANDSLASH}}, + [SPECIES_NIDORAN_F] = {{EVO_LEVEL, 16, SPECIES_NIDORINA}}, + [SPECIES_NIDORINA] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOQUEEN}}, + [SPECIES_NIDORAN_M] = {{EVO_LEVEL, 16, SPECIES_NIDORINO}}, + [SPECIES_NIDORINO] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOKING}}, + [SPECIES_CLEFAIRY] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_CLEFABLE}}, + [SPECIES_VULPIX] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_NINETALES}}, + [SPECIES_JIGGLYPUFF] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_WIGGLYTUFF}}, + [SPECIES_ZUBAT] = {{EVO_LEVEL, 22, SPECIES_GOLBAT}}, + [SPECIES_GOLBAT] = {{EVO_FRIENDSHIP, 0, SPECIES_CROBAT}}, + [SPECIES_ODDISH] = {{EVO_LEVEL, 21, SPECIES_GLOOM}}, + [SPECIES_GLOOM] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VILEPLUME}, + {EVO_ITEM, ITEM_SUN_STONE, SPECIES_BELLOSSOM}}, + [SPECIES_PARAS] = {{EVO_LEVEL, 24, SPECIES_PARASECT}}, + [SPECIES_VENONAT] = {{EVO_LEVEL, 31, SPECIES_VENOMOTH}}, + [SPECIES_DIGLETT] = {{EVO_LEVEL, 26, SPECIES_DUGTRIO}}, + [SPECIES_MEOWTH] = {{EVO_LEVEL, 28, SPECIES_PERSIAN}}, + [SPECIES_PSYDUCK] = {{EVO_LEVEL, 33, SPECIES_GOLDUCK}}, + [SPECIES_MANKEY] = {{EVO_LEVEL, 28, SPECIES_PRIMEAPE}}, + [SPECIES_GROWLITHE] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE}}, + [SPECIES_POLIWAG] = {{EVO_LEVEL, 25, SPECIES_POLIWHIRL}}, + [SPECIES_POLIWHIRL] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_POLIWRATH}, + {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED}}, + [SPECIES_ABRA] = {{EVO_LEVEL, 16, SPECIES_KADABRA}}, + [SPECIES_KADABRA] = {{EVO_TRADE, 0, SPECIES_ALAKAZAM}}, + [SPECIES_MACHOP] = {{EVO_LEVEL, 28, SPECIES_MACHOKE}}, + [SPECIES_MACHOKE] = {{EVO_TRADE, 0, SPECIES_MACHAMP}}, + [SPECIES_BELLSPROUT] = {{EVO_LEVEL, 21, SPECIES_WEEPINBELL}}, + [SPECIES_WEEPINBELL] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VICTREEBEL}}, + [SPECIES_TENTACOOL] = {{EVO_LEVEL, 30, SPECIES_TENTACRUEL}}, + [SPECIES_GEODUDE] = {{EVO_LEVEL, 25, SPECIES_GRAVELER}}, + [SPECIES_GRAVELER] = {{EVO_TRADE, 0, SPECIES_GOLEM}}, + [SPECIES_PONYTA] = {{EVO_LEVEL, 40, SPECIES_RAPIDASH}}, + [SPECIES_SLOWPOKE] = {{EVO_LEVEL, 37, SPECIES_SLOWBRO}, + {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING}}, + [SPECIES_MAGNEMITE] = {{EVO_LEVEL, 30, SPECIES_MAGNETON}}, + [SPECIES_DODUO] = {{EVO_LEVEL, 31, SPECIES_DODRIO}}, + [SPECIES_SEEL] = {{EVO_LEVEL, 34, SPECIES_DEWGONG}}, + [SPECIES_GRIMER] = {{EVO_LEVEL, 38, SPECIES_MUK}}, + [SPECIES_SHELLDER] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_CLOYSTER}}, + [SPECIES_GASTLY] = {{EVO_LEVEL, 25, SPECIES_HAUNTER}}, + [SPECIES_HAUNTER] = {{EVO_TRADE, 0, SPECIES_GENGAR}}, + [SPECIES_ONIX] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX}}, + [SPECIES_DROWZEE] = {{EVO_LEVEL, 26, SPECIES_HYPNO}}, + [SPECIES_KRABBY] = {{EVO_LEVEL, 28, SPECIES_KINGLER}}, + [SPECIES_VOLTORB] = {{EVO_LEVEL, 30, SPECIES_ELECTRODE}}, + [SPECIES_EXEGGCUTE] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_EXEGGUTOR}}, + [SPECIES_CUBONE] = {{EVO_LEVEL, 28, SPECIES_MAROWAK}}, + [SPECIES_KOFFING] = {{EVO_LEVEL, 35, SPECIES_WEEZING}}, + [SPECIES_RHYHORN] = {{EVO_LEVEL, 42, SPECIES_RHYDON}}, + [SPECIES_CHANSEY] = {{EVO_FRIENDSHIP, 0, SPECIES_BLISSEY}}, + [SPECIES_HORSEA] = {{EVO_LEVEL, 32, SPECIES_SEADRA}}, + [SPECIES_SEADRA] = {{EVO_TRADE_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA}}, + [SPECIES_GOLDEEN] = {{EVO_LEVEL, 33, SPECIES_SEAKING}}, + [SPECIES_STARYU] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_STARMIE}}, + [SPECIES_SCYTHER] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_SCIZOR}}, + [SPECIES_MAGIKARP] = {{EVO_LEVEL, 20, SPECIES_GYARADOS}}, + [SPECIES_EEVEE] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_JOLTEON}, + {EVO_ITEM, ITEM_WATER_STONE, SPECIES_VAPOREON}, + {EVO_ITEM, ITEM_FIRE_STONE, SPECIES_FLAREON}, + {EVO_FRIENDSHIP_DAY, 0, SPECIES_ESPEON}, + {EVO_FRIENDSHIP_NIGHT, 0, SPECIES_UMBREON}}, + [SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UPGRADE, SPECIES_PORYGON2}}, + [SPECIES_OMANYTE] = {{EVO_LEVEL, 40, SPECIES_OMASTAR}}, + [SPECIES_KABUTO] = {{EVO_LEVEL, 40, SPECIES_KABUTOPS}}, + [SPECIES_DRATINI] = {{EVO_LEVEL, 30, SPECIES_DRAGONAIR}}, + [SPECIES_DRAGONAIR] = {{EVO_LEVEL, 55, SPECIES_DRAGONITE}}, + [SPECIES_CHIKORITA] = {{EVO_LEVEL, 16, SPECIES_BAYLEEF}}, + [SPECIES_BAYLEEF] = {{EVO_LEVEL, 32, SPECIES_MEGANIUM}}, + [SPECIES_CYNDAQUIL] = {{EVO_LEVEL, 14, SPECIES_QUILAVA}}, + [SPECIES_QUILAVA] = {{EVO_LEVEL, 36, SPECIES_TYPHLOSION}}, + [SPECIES_TOTODILE] = {{EVO_LEVEL, 18, SPECIES_CROCONAW}}, + [SPECIES_CROCONAW] = {{EVO_LEVEL, 30, SPECIES_FERALIGATR}}, + [SPECIES_SENTRET] = {{EVO_LEVEL, 15, SPECIES_FURRET}}, + [SPECIES_HOOTHOOT] = {{EVO_LEVEL, 20, SPECIES_NOCTOWL}}, + [SPECIES_LEDYBA] = {{EVO_LEVEL, 18, SPECIES_LEDIAN}}, + [SPECIES_SPINARAK] = {{EVO_LEVEL, 22, SPECIES_ARIADOS}}, + [SPECIES_CHINCHOU] = {{EVO_LEVEL, 27, SPECIES_LANTURN}}, + [SPECIES_PICHU] = {{EVO_FRIENDSHIP, 0, SPECIES_PIKACHU}}, + [SPECIES_CLEFFA] = {{EVO_FRIENDSHIP, 0, SPECIES_CLEFAIRY}}, + [SPECIES_IGGLYBUFF] = {{EVO_FRIENDSHIP, 0, SPECIES_JIGGLYPUFF}}, + [SPECIES_TOGEPI] = {{EVO_FRIENDSHIP, 0, SPECIES_TOGETIC}}, + [SPECIES_NATU] = {{EVO_LEVEL, 25, SPECIES_XATU}}, + [SPECIES_MAREEP] = {{EVO_LEVEL, 15, SPECIES_FLAAFFY}}, + [SPECIES_FLAAFFY] = {{EVO_LEVEL, 30, SPECIES_AMPHAROS}}, + [SPECIES_MARILL] = {{EVO_LEVEL, 18, SPECIES_AZUMARILL}}, + [SPECIES_HOPPIP] = {{EVO_LEVEL, 18, SPECIES_SKIPLOOM}}, + [SPECIES_SKIPLOOM] = {{EVO_LEVEL, 27, SPECIES_JUMPLUFF}}, + [SPECIES_SUNKERN] = {{EVO_ITEM, ITEM_SUN_STONE, SPECIES_SUNFLORA}}, + [SPECIES_WOOPER] = {{EVO_LEVEL, 20, SPECIES_QUAGSIRE}}, + [SPECIES_PINECO] = {{EVO_LEVEL, 31, SPECIES_FORRETRESS}}, + [SPECIES_SNUBBULL] = {{EVO_LEVEL, 23, SPECIES_GRANBULL}}, + [SPECIES_TEDDIURSA] = {{EVO_LEVEL, 30, SPECIES_URSARING}}, + [SPECIES_SLUGMA] = {{EVO_LEVEL, 38, SPECIES_MAGCARGO}}, + [SPECIES_SWINUB] = {{EVO_LEVEL, 33, SPECIES_PILOSWINE}}, + [SPECIES_REMORAID] = {{EVO_LEVEL, 25, SPECIES_OCTILLERY}}, + [SPECIES_HOUNDOUR] = {{EVO_LEVEL, 24, SPECIES_HOUNDOOM}}, + [SPECIES_PHANPY] = {{EVO_LEVEL, 25, SPECIES_DONPHAN}}, + [SPECIES_TYROGUE] = {{EVO_LEVEL_ATK_LT_DEF, 20, SPECIES_HITMONCHAN}, + {EVO_LEVEL_ATK_GT_DEF, 20, SPECIES_HITMONLEE}, + {EVO_LEVEL_ATK_EQ_DEF, 20, SPECIES_HITMONTOP}}, + [SPECIES_SMOOCHUM] = {{EVO_LEVEL, 30, SPECIES_JYNX}}, + [SPECIES_ELEKID] = {{EVO_LEVEL, 30, SPECIES_ELECTABUZZ}}, + [SPECIES_MAGBY] = {{EVO_LEVEL, 30, SPECIES_MAGMAR}}, + [SPECIES_LARVITAR] = {{EVO_LEVEL, 30, SPECIES_PUPITAR}}, + [SPECIES_PUPITAR] = {{EVO_LEVEL, 55, SPECIES_TYRANITAR}}, + [SPECIES_TREECKO] = {{EVO_LEVEL, 16, SPECIES_GROVYLE}}, + [SPECIES_GROVYLE] = {{EVO_LEVEL, 36, SPECIES_SCEPTILE}}, + [SPECIES_TORCHIC] = {{EVO_LEVEL, 16, SPECIES_COMBUSKEN}}, + [SPECIES_COMBUSKEN] = {{EVO_LEVEL, 36, SPECIES_BLAZIKEN}}, + [SPECIES_MUDKIP] = {{EVO_LEVEL, 16, SPECIES_MARSHTOMP}}, + [SPECIES_MARSHTOMP] = {{EVO_LEVEL, 36, SPECIES_SWAMPERT}}, + [SPECIES_POOCHYENA] = {{EVO_LEVEL, 18, SPECIES_MIGHTYENA}}, + [SPECIES_ZIGZAGOON] = {{EVO_LEVEL, 20, SPECIES_LINOONE}}, + [SPECIES_WURMPLE] = {{EVO_LEVEL_SILCOON, 7, SPECIES_SILCOON}, + {EVO_LEVEL_CASCOON, 7, SPECIES_CASCOON}}, + [SPECIES_SILCOON] = {{EVO_LEVEL, 10, SPECIES_BEAUTIFLY}}, + [SPECIES_CASCOON] = {{EVO_LEVEL, 10, SPECIES_DUSTOX}}, + [SPECIES_LOTAD] = {{EVO_LEVEL, 14, SPECIES_LOMBRE}}, + [SPECIES_LOMBRE] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_LUDICOLO}}, + [SPECIES_SEEDOT] = {{EVO_LEVEL, 14, SPECIES_NUZLEAF}}, + [SPECIES_NUZLEAF] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_SHIFTRY}}, + [SPECIES_NINCADA] = {{EVO_LEVEL_NINJASK, 20, SPECIES_NINJASK}, + {EVO_LEVEL_SHEDINJA, 20, SPECIES_SHEDINJA}}, + [SPECIES_TAILLOW] = {{EVO_LEVEL, 22, SPECIES_SWELLOW}}, + [SPECIES_SHROOMISH] = {{EVO_LEVEL, 23, SPECIES_BRELOOM}}, + [SPECIES_WINGULL] = {{EVO_LEVEL, 25, SPECIES_PELIPPER}}, + [SPECIES_SURSKIT] = {{EVO_LEVEL, 22, SPECIES_MASQUERAIN}}, + [SPECIES_WAILMER] = {{EVO_LEVEL, 40, SPECIES_WAILORD}}, + [SPECIES_SKITTY] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_DELCATTY}}, + [SPECIES_BALTOY] = {{EVO_LEVEL, 36, SPECIES_CLAYDOL}}, + [SPECIES_BARBOACH] = {{EVO_LEVEL, 30, SPECIES_WHISCASH}}, + [SPECIES_CORPHISH] = {{EVO_LEVEL, 30, SPECIES_CRAWDAUNT}}, + [SPECIES_FEEBAS] = {{EVO_BEAUTY, 170, SPECIES_MILOTIC}, + {EVO_TRADE_ITEM, ITEM_PRISM_SCALE, SPECIES_MILOTIC}}, + [SPECIES_CARVANHA] = {{EVO_LEVEL, 30, SPECIES_SHARPEDO}}, + [SPECIES_TRAPINCH] = {{EVO_LEVEL, 35, SPECIES_VIBRAVA}}, + [SPECIES_VIBRAVA] = {{EVO_LEVEL, 45, SPECIES_FLYGON}}, + [SPECIES_MAKUHITA] = {{EVO_LEVEL, 24, SPECIES_HARIYAMA}}, + [SPECIES_ELECTRIKE] = {{EVO_LEVEL, 26, SPECIES_MANECTRIC}}, + [SPECIES_NUMEL] = {{EVO_LEVEL, 33, SPECIES_CAMERUPT}}, + [SPECIES_SPHEAL] = {{EVO_LEVEL, 32, SPECIES_SEALEO}}, + [SPECIES_SEALEO] = {{EVO_LEVEL, 44, SPECIES_WALREIN}}, + [SPECIES_CACNEA] = {{EVO_LEVEL, 32, SPECIES_CACTURNE}}, + [SPECIES_SNORUNT] = {{EVO_LEVEL, 42, SPECIES_GLALIE}}, + [SPECIES_AZURILL] = {{EVO_FRIENDSHIP, 0, SPECIES_MARILL}}, + [SPECIES_SPOINK] = {{EVO_LEVEL, 32, SPECIES_GRUMPIG}}, + [SPECIES_MEDITITE] = {{EVO_LEVEL, 37, SPECIES_MEDICHAM}}, + [SPECIES_SWABLU] = {{EVO_LEVEL, 35, SPECIES_ALTARIA}}, + [SPECIES_WYNAUT] = {{EVO_LEVEL, 15, SPECIES_WOBBUFFET}}, + [SPECIES_DUSKULL] = {{EVO_LEVEL, 37, SPECIES_DUSCLOPS}}, + [SPECIES_SLAKOTH] = {{EVO_LEVEL, 18, SPECIES_VIGOROTH}}, + [SPECIES_VIGOROTH] = {{EVO_LEVEL, 36, SPECIES_SLAKING}}, + [SPECIES_GULPIN] = {{EVO_LEVEL, 26, SPECIES_SWALOT}}, + [SPECIES_WHISMUR] = {{EVO_LEVEL, 20, SPECIES_LOUDRED}}, + [SPECIES_LOUDRED] = {{EVO_LEVEL, 40, SPECIES_EXPLOUD}}, + [SPECIES_CLAMPERL] = {{EVO_TRADE_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL}, + {EVO_TRADE_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS}}, + [SPECIES_SHUPPET] = {{EVO_LEVEL, 37, SPECIES_BANETTE}}, + [SPECIES_ARON] = {{EVO_LEVEL, 32, SPECIES_LAIRON}}, + [SPECIES_LAIRON] = {{EVO_LEVEL, 42, SPECIES_AGGRON}}, + [SPECIES_LILEEP] = {{EVO_LEVEL, 40, SPECIES_CRADILY}}, + [SPECIES_ANORITH] = {{EVO_LEVEL, 40, SPECIES_ARMALDO}}, + [SPECIES_RALTS] = {{EVO_LEVEL, 20, SPECIES_KIRLIA}}, + [SPECIES_KIRLIA] = {{EVO_LEVEL, 30, SPECIES_GARDEVOIR}}, + [SPECIES_BAGON] = {{EVO_LEVEL, 30, SPECIES_SHELGON}}, + [SPECIES_SHELGON] = {{EVO_LEVEL, 50, SPECIES_SALAMENCE}}, + [SPECIES_BELDUM] = {{EVO_LEVEL, 20, SPECIES_METANG}}, + [SPECIES_METANG] = {{EVO_LEVEL, 45, SPECIES_METAGROSS}}, +}; diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 777b174a4e..a324fd55a8 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -1,8 +1,10 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = { +#if P_NEW_POKEMON == TRUE [SPECIES_GIRATINA] = sGiratinaFormChangeTable, + [SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable, [SPECIES_SHAYMIN] = sShayminFormChangeTable, - [SPECIES_SHAYMIN_SKY] = sShayminSkyFormChangeTable, + [SPECIES_SHAYMIN_SKY] = sShayminFormChangeTable, [SPECIES_ARCEUS] = sArceusFormChangeTable, [SPECIES_ARCEUS_FIGHTING] = sArceusFormChangeTable, [SPECIES_ARCEUS_FLYING] = sArceusFormChangeTable, @@ -27,6 +29,8 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_THUNDURUS_THERIAN] = sThundurusTherianFormChangeTable, [SPECIES_LANDORUS] = sLandorusFormChangeTable, [SPECIES_LANDORUS_THERIAN] = sLandorusTherianFormChangeTable, + [SPECIES_ENAMORUS] = sEnamorusFormChangeTable, + [SPECIES_ENAMORUS_THERIAN] = sEnamorusTherianFormChangeTable, [SPECIES_KELDEO] = sKeldeoFormChangeTable, [SPECIES_KELDEO_RESOLUTE] = sKeldeoResoluteFormChangeTable, [SPECIES_GENESECT] = sGenesectFormChangeTable, @@ -58,4 +62,5 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_SILVALLY_ROCK] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_STEEL] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_WATER] = sSilvallyFormChangeTable, +#endif }; diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index a84d376b04..5f8541c402 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -1,4 +1,8 @@ /* +For cycling between forms with the same method and parameters but different target species (eg. Tornadus using the +Reveal Glass to change between its two forms), a separate form change table is required for each form. +Otherwise, only the last form change on the table will trigger. + FORM_ITEM_HOLD: Form change activates when the item is given to or taken from the selected Pokémon. param1 = item to hold @@ -39,17 +43,15 @@ FORM_ITEM_USE_TIME: #define DAY 0 #define NIGHT 1 +#if P_NEW_POKEMON == TRUE static const struct FormChange sGiratinaFormChangeTable[] = { + {FORM_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, {FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, {FORM_CHANGE_END}, }; static const struct FormChange sShayminFormChangeTable[] = { {FORM_ITEM_USE_TIME, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY}, - {FORM_CHANGE_END}, -}; - -static const struct FormChange sShayminSkyFormChangeTable[] = { {FORM_WITHDRAW, SPECIES_SHAYMIN}, {FORM_CHANGE_END}, }; @@ -94,32 +96,42 @@ static const struct FormChange sArceusFormChangeTable[] = { }; static const struct FormChange sTornadusFormChangeTable[] = { - // {FORM_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS}, {FORM_CHANGE_END}, }; static const struct FormChange sTornadusTherianFormChangeTable[] = { - // {FORM_ITEM_USE, SPECIES_TORNADUS, ITEM_REVEAL_GLASS}, + {FORM_ITEM_USE, SPECIES_TORNADUS, ITEM_REVEAL_GLASS}, {FORM_CHANGE_END}, }; static const struct FormChange sThundurusFormChangeTable[] = { - // {FORM_ITEM_USE, SPECIES_THUNDURUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_ITEM_USE, SPECIES_THUNDURUS_THERIAN, ITEM_REVEAL_GLASS}, {FORM_CHANGE_END}, }; static const struct FormChange sThundurusTherianFormChangeTable[] = { - // {FORM_ITEM_USE, SPECIES_THUNDURUS, ITEM_REVEAL_GLASS}, + {FORM_ITEM_USE, SPECIES_THUNDURUS, ITEM_REVEAL_GLASS}, {FORM_CHANGE_END}, }; static const struct FormChange sLandorusFormChangeTable[] = { - // {FORM_ITEM_USE, SPECIES_LANDORUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_ITEM_USE, SPECIES_LANDORUS_THERIAN, ITEM_REVEAL_GLASS}, {FORM_CHANGE_END}, }; static const struct FormChange sLandorusTherianFormChangeTable[] = { - // {FORM_ITEM_USE, SPECIES_LANDORUS, ITEM_REVEAL_GLASS}, + {FORM_ITEM_USE, SPECIES_LANDORUS, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sEnamorusFormChangeTable[] = { + {FORM_ITEM_USE, SPECIES_ENAMORUS, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sEnamorusTherianFormChangeTable[] = { + {FORM_ITEM_USE, SPECIES_ENAMORUS_THERIAN, ITEM_REVEAL_GLASS}, {FORM_CHANGE_END}, }; @@ -181,6 +193,7 @@ static const struct FormChange sSilvallyFormChangeTable[] = { {FORM_ITEM_HOLD_ABILITY, SPECIES_SILVALLY_FAIRY, ITEM_FAIRY_MEMORY, ABILITY_RKS_SYSTEM}, {FORM_CHANGE_END}, }; +#endif #undef WHEN_LEARNED #undef WHEN_FORGOTTEN diff --git a/src/data/pokemon/form_species_table_pointers.h b/src/data/pokemon/form_species_table_pointers.h index 7c7c56b0e3..71a210e402 100644 --- a/src/data/pokemon/form_species_table_pointers.h +++ b/src/data/pokemon/form_species_table_pointers.h @@ -1,5 +1,6 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = { +#if P_NEW_POKEMON == TRUE [SPECIES_VENUSAUR] = sVenusaurFormSpeciesIdTable, [SPECIES_CHARIZARD] = sCharizardFormSpeciesIdTable, [SPECIES_BLASTOISE] = sBlastoiseFormSpeciesIdTable, @@ -18,6 +19,8 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_MEOWTH] = sMeowthFormSpeciesIdTable, [SPECIES_PERSIAN] = sPersianFormSpeciesIdTable, [SPECIES_ALAKAZAM] = sAlakazamFormSpeciesIdTable, + [SPECIES_GROWLITHE] = sGrowlitheFormSpeciesIdTable, + [SPECIES_ARCANINE] = sArcanineFormSpeciesIdTable, [SPECIES_GEODUDE] = sGeodudeFormSpeciesIdTable, [SPECIES_GRAVELER] = sGravelerFormSpeciesIdTable, [SPECIES_GOLEM] = sGolemFormSpeciesIdTable, @@ -29,6 +32,8 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_GRIMER] = sGrimerFormSpeciesIdTable, [SPECIES_MUK] = sMukFormSpeciesIdTable, [SPECIES_GENGAR] = sGengarFormSpeciesIdTable, + [SPECIES_VOLTORB] = sVoltorbFormSpeciesIdTable, + [SPECIES_ELECTRODE] = sElectrodeFormSpeciesIdTable, [SPECIES_EXEGGUTOR] = sExeggutorFormSpeciesIdTable, [SPECIES_MAROWAK] = sMarowakFormSpeciesIdTable, [SPECIES_WEEZING] = sWeezingFormSpeciesIdTable, @@ -41,10 +46,15 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_ZAPDOS] = sZapdosFormSpeciesIdTable, [SPECIES_MOLTRES] = sMoltresFormSpeciesIdTable, [SPECIES_MEWTWO] = sMewtwoFormSpeciesIdTable, + [SPECIES_TYPHLOSION] = sTyphlosionFormSpeciesIdTable, [SPECIES_PICHU] = sPichuFormSpeciesIdTable, [SPECIES_AMPHAROS] = sAmpharosFormSpeciesIdTable, [SPECIES_SLOWKING] = sSlowkingFormSpeciesIdTable, + [SPECIES_QWILFISH] = sQwilfishFormSpeciesIdTable, + [SPECIES_SNEASEL] = sSneaselFormSpeciesIdTable, +#endif [SPECIES_UNOWN] = sUnownFormSpeciesIdTable, +#if P_NEW_POKEMON == TRUE [SPECIES_STEELIX] = sSteelixFormSpeciesIdTable, [SPECIES_SCIZOR] = sScizorFormSpeciesIdTable, [SPECIES_HERACROSS] = sHeracrossFormSpeciesIdTable, @@ -65,7 +75,9 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_SHARPEDO] = sSharpedoFormSpeciesIdTable, [SPECIES_CAMERUPT] = sCameruptFormSpeciesIdTable, [SPECIES_ALTARIA] = sAltariaFormSpeciesIdTable, +#endif [SPECIES_CASTFORM] = sCastformFormSpeciesIdTable, +#if P_NEW_POKEMON == TRUE [SPECIES_BANETTE] = sBanetteFormSpeciesIdTable, [SPECIES_ABSOL] = sAbsolFormSpeciesIdTable, [SPECIES_GLALIE] = sGlalieFormSpeciesIdTable, @@ -76,7 +88,9 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_KYOGRE] = sKyogreFormSpeciesIdTable, [SPECIES_GROUDON] = sGroudonFormSpeciesIdTable, [SPECIES_RAYQUAZA] = sRayquazaFormSpeciesIdTable, +#endif [SPECIES_DEOXYS] = sDeoxysFormSpeciesIdTable, +#if P_NEW_POKEMON == TRUE [SPECIES_BURMY] = sBurmyFormSpeciesIdTable, [SPECIES_WORMADAM] = sWormadamFormSpeciesIdTable, [SPECIES_CHERRIM] = sCherrimFormSpeciesIdTable, @@ -88,17 +102,24 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_ABOMASNOW] = sAbomasnowFormSpeciesIdTable, [SPECIES_GALLADE] = sGalladeFormSpeciesIdTable, [SPECIES_ROTOM] = sRotomFormSpeciesIdTable, + [SPECIES_DIALGA] = sDialgaFormSpeciesIdTable, + [SPECIES_PALKIA] = sPalkiaFormSpeciesIdTable, [SPECIES_GIRATINA] = sGiratinaFormSpeciesIdTable, + [SPECIES_SAMUROTT] = sSamurottFormSpeciesIdTable, [SPECIES_SHAYMIN] = sShayminFormSpeciesIdTable, [SPECIES_ARCEUS] = sArceusFormSpeciesIdTable, [SPECIES_AUDINO] = sAudinoFormSpeciesIdTable, [SPECIES_BASCULIN] = sBasculinFormSpeciesIdTable, + [SPECIES_LILLIGANT] = sLilligantFormSpeciesIdTable, [SPECIES_DARUMAKA] = sDarumakaFormSpeciesIdTable, [SPECIES_DARMANITAN] = sDarmanitanFormSpeciesIdTable, - [SPECIES_YAMASK] = sYamaskFormSpeciesIdTable, + [SPECIES_YAMASK] = sYamaskFormSpeciesIdTable, + [SPECIES_ZORUA] = sZoruaFormSpeciesIdTable, + [SPECIES_ZOROARK] = sZoroarkFormSpeciesIdTable, [SPECIES_DEERLING] = sDeerlingFormSpeciesIdTable, [SPECIES_SAWSBUCK] = sSawsbuckFormSpeciesIdTable, [SPECIES_STUNFISK] = sStunfiskFormSpeciesIdTable, + [SPECIES_BRAVIARY] = sBraviaryFormSpeciesIdTable, [SPECIES_TORNADUS] = sTornadusFormSpeciesIdTable, [SPECIES_THUNDURUS] = sThundurusFormSpeciesIdTable, [SPECIES_LANDORUS] = sLandorusFormSpeciesIdTable, @@ -114,12 +135,16 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_FURFROU] = sFurfrouFormSpeciesIdTable, [SPECIES_MEOWSTIC] = sMeowsticFormSpeciesIdTable, [SPECIES_AEGISLASH] = sAegislashFormSpeciesIdTable, + [SPECIES_SLIGGOO] = sSliggooFormSpeciesIdTable, + [SPECIES_GOODRA] = sGoodraFormSpeciesIdTable, [SPECIES_PUMPKABOO] = sPumpkabooFormSpeciesIdTable, [SPECIES_GOURGEIST] = sGourgeistFormSpeciesIdTable, + [SPECIES_AVALUGG] = sAvaluggFormSpeciesIdTable, [SPECIES_XERNEAS] = sXerneasFormSpeciesIdTable, [SPECIES_ZYGARDE] = sZygardeFormSpeciesIdTable, [SPECIES_DIANCIE] = sDiancieFormSpeciesIdTable, [SPECIES_HOOPA] = sHoopaFormSpeciesIdTable, + [SPECIES_DECIDUEYE] = sDecidueyeFormSpeciesIdTable, [SPECIES_ORICORIO] = sOricorioFormSpeciesIdTable, [SPECIES_ROCKRUFF] = sRockruffFormSpeciesIdTable, [SPECIES_LYCANROC] = sLycanrocFormSpeciesIdTable, @@ -143,6 +168,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_URSHIFU] = sUrshifuFormSpeciesIdTable, [SPECIES_ZARUDE] = sZarudeFormSpeciesIdTable, [SPECIES_CALYREX] = sCalyrexFormSpeciesIdTable, + [SPECIES_ENAMORUS] = sEnamorusFormSpeciesIdTable, // Megas [SPECIES_VENUSAUR_MEGA] = sVenusaurFormSpeciesIdTable, [SPECIES_CHARIZARD_MEGA_X] = sCharizardFormSpeciesIdTable, @@ -234,6 +260,23 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_DARMANITAN_GALARIAN] = sDarmanitanFormSpeciesIdTable, [SPECIES_YAMASK_GALARIAN] = sYamaskFormSpeciesIdTable, [SPECIES_STUNFISK_GALARIAN] = sStunfiskFormSpeciesIdTable, + //Hisuian Forms + [SPECIES_GROWLITHE_HISUIAN] = sGrowlitheFormSpeciesIdTable, + [SPECIES_ARCANINE_HISUIAN] = sArcanineFormSpeciesIdTable, + [SPECIES_VOLTORB_HISUIAN] = sVoltorbFormSpeciesIdTable, + [SPECIES_ELECTRODE_HISUIAN] = sElectrodeFormSpeciesIdTable, + [SPECIES_TYPHLOSION_HISUIAN] = sTyphlosionFormSpeciesIdTable, + [SPECIES_QWILFISH_HISUIAN] = sQwilfishFormSpeciesIdTable, + [SPECIES_SNEASEL_HISUIAN] = sSneaselFormSpeciesIdTable, + [SPECIES_SAMUROTT_HISUIAN] = sSamurottFormSpeciesIdTable, + [SPECIES_LILLIGANT_HISUIAN] = sLilligantFormSpeciesIdTable, + [SPECIES_ZORUA_HISUIAN] = sZoruaFormSpeciesIdTable, + [SPECIES_ZOROARK_HISUIAN] = sZoroarkFormSpeciesIdTable, + [SPECIES_BRAVIARY_HISUIAN] = sBraviaryFormSpeciesIdTable, + [SPECIES_SLIGGOO_HISUIAN] = sSliggooFormSpeciesIdTable, + [SPECIES_GOODRA_HISUIAN] = sGoodraFormSpeciesIdTable, + [SPECIES_AVALUGG_HISUIAN] = sAvaluggFormSpeciesIdTable, + [SPECIES_DECIDUEYE_HISUIAN] = sDecidueyeFormSpeciesIdTable, // Misc Forms // Cosplay Pikachu [SPECIES_PIKACHU_COSPLAY] = sPikachuFormSpeciesIdTable, @@ -253,6 +296,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_PIKACHU_WORLD_CAP] = sPikachuFormSpeciesIdTable, // Pichu [SPECIES_PICHU_SPIKY_EARED] = sPichuFormSpeciesIdTable, +#endif // Unown [SPECIES_UNOWN_B] = sUnownFormSpeciesIdTable, [SPECIES_UNOWN_C] = sUnownFormSpeciesIdTable, @@ -289,6 +333,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_DEOXYS_ATTACK] = sDeoxysFormSpeciesIdTable, [SPECIES_DEOXYS_DEFENSE] = sDeoxysFormSpeciesIdTable, [SPECIES_DEOXYS_SPEED] = sDeoxysFormSpeciesIdTable, +#if P_NEW_POKEMON == TRUE // Burmy [SPECIES_BURMY_SANDY_CLOAK] = sBurmyFormSpeciesIdTable, [SPECIES_BURMY_TRASH_CLOAK] = sBurmyFormSpeciesIdTable, @@ -307,7 +352,9 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_ROTOM_FROST] = sRotomFormSpeciesIdTable, [SPECIES_ROTOM_FAN] = sRotomFormSpeciesIdTable, [SPECIES_ROTOM_MOW] = sRotomFormSpeciesIdTable, - // Giratina + // Origin Forme + [SPECIES_DIALGA_ORIGIN] = sDialgaFormSpeciesIdTable, + [SPECIES_PALKIA_ORIGIN] = sPalkiaFormSpeciesIdTable, [SPECIES_GIRATINA_ORIGIN] = sGiratinaFormSpeciesIdTable, // Shaymin [SPECIES_SHAYMIN_SKY] = sShayminFormSpeciesIdTable, @@ -331,6 +378,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_ARCEUS_FAIRY] = sArceusFormSpeciesIdTable, // Basculin [SPECIES_BASCULIN_BLUE_STRIPED] = sBasculinFormSpeciesIdTable, + [SPECIES_BASCULIN_WHITE_STRIPED] = sBasculinFormSpeciesIdTable, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = sDarmanitanFormSpeciesIdTable, [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sDarmanitanFormSpeciesIdTable, @@ -346,6 +394,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_TORNADUS_THERIAN] = sTornadusFormSpeciesIdTable, [SPECIES_THUNDURUS_THERIAN] = sThundurusFormSpeciesIdTable, [SPECIES_LANDORUS_THERIAN] = sLandorusFormSpeciesIdTable, + [SPECIES_ENAMORUS_THERIAN] = sEnamorusFormSpeciesIdTable, // Kyurem [SPECIES_KYUREM_WHITE] = sKyuremFormSpeciesIdTable, [SPECIES_KYUREM_BLACK] = sKyuremFormSpeciesIdTable, @@ -516,4 +565,5 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = // Calyrex [SPECIES_CALYREX_ICE_RIDER] = sCalyrexFormSpeciesIdTable, [SPECIES_CALYREX_SHADOW_RIDER] = sCalyrexFormSpeciesIdTable, +#endif }; diff --git a/src/data/pokemon/form_species_tables.h b/src/data/pokemon/form_species_tables.h index 89b3f4eec1..8e89a3836a 100644 --- a/src/data/pokemon/form_species_tables.h +++ b/src/data/pokemon/form_species_tables.h @@ -1,5 +1,4 @@ -#define FORM_SPECIES_END (0xffff) - +#if P_NEW_POKEMON == TRUE static const u16 sVenusaurFormSpeciesIdTable[] = { SPECIES_VENUSAUR, SPECIES_VENUSAUR_MEGA, @@ -123,6 +122,18 @@ static const u16 sAlakazamFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sGrowlitheFormSpeciesIdTable[] = { + SPECIES_GROWLITHE, + SPECIES_GROWLITHE_HISUIAN, + FORM_SPECIES_END, +}; + +static const u16 sArcanineFormSpeciesIdTable[] = { + SPECIES_ARCANINE, + SPECIES_ARCANINE_HISUIAN, + FORM_SPECIES_END, +}; + static const u16 sGeodudeFormSpeciesIdTable[] = { SPECIES_GEODUDE, SPECIES_GEODUDE_ALOLAN, @@ -190,6 +201,18 @@ static const u16 sGengarFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sVoltorbFormSpeciesIdTable[] = { + SPECIES_VOLTORB, + SPECIES_VOLTORB_HISUIAN, + FORM_SPECIES_END, +}; + +static const u16 sElectrodeFormSpeciesIdTable[] = { + SPECIES_ELECTRODE, + SPECIES_ELECTRODE_HISUIAN, + FORM_SPECIES_END, +}; + static const u16 sExeggutorFormSpeciesIdTable[] = { SPECIES_EXEGGUTOR, SPECIES_EXEGGUTOR_ALOLAN, @@ -256,6 +279,12 @@ static const u16 sMoltresFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sTyphlosionFormSpeciesIdTable[] = { + SPECIES_TYPHLOSION, + SPECIES_TYPHLOSION_HISUIAN, + FORM_SPECIES_END, +}; + static const u16 sMewtwoFormSpeciesIdTable[] = { SPECIES_MEWTWO, SPECIES_MEWTWO_MEGA_X, @@ -281,6 +310,18 @@ static const u16 sSlowkingFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sQwilfishFormSpeciesIdTable[] = { + SPECIES_QWILFISH, + SPECIES_QWILFISH_HISUIAN, + FORM_SPECIES_END, +}; + +static const u16 sSneaselFormSpeciesIdTable[] = { + SPECIES_SNEASEL, + SPECIES_SNEASEL_HISUIAN, + FORM_SPECIES_END, +}; +#endif static const u16 sUnownFormSpeciesIdTable[] = { SPECIES_UNOWN, SPECIES_UNOWN_B, @@ -313,6 +354,7 @@ static const u16 sUnownFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +#if P_NEW_POKEMON == TRUE static const u16 sSteelixFormSpeciesIdTable[] = { SPECIES_STEELIX, SPECIES_STEELIX_MEGA, @@ -432,7 +474,7 @@ static const u16 sAltariaFormSpeciesIdTable[] = { SPECIES_ALTARIA_MEGA, FORM_SPECIES_END, }; - +#endif static const u16 sCastformFormSpeciesIdTable[] = { SPECIES_CASTFORM, SPECIES_CASTFORM_SUNNY, @@ -441,6 +483,7 @@ static const u16 sCastformFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +#if P_NEW_POKEMON == TRUE static const u16 sBanetteFormSpeciesIdTable[] = { SPECIES_BANETTE, SPECIES_BANETTE_MEGA, @@ -500,7 +543,7 @@ static const u16 sRayquazaFormSpeciesIdTable[] = { SPECIES_RAYQUAZA_MEGA, FORM_SPECIES_END, }; - +#endif static const u16 sDeoxysFormSpeciesIdTable[] = { SPECIES_DEOXYS, SPECIES_DEOXYS_ATTACK, @@ -508,7 +551,7 @@ static const u16 sDeoxysFormSpeciesIdTable[] = { SPECIES_DEOXYS_SPEED, FORM_SPECIES_END, }; - +#if P_NEW_POKEMON == TRUE static const u16 sBurmyFormSpeciesIdTable[] = { SPECIES_BURMY, SPECIES_BURMY_SANDY_CLOAK, @@ -581,12 +624,30 @@ static const u16 sRotomFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sDialgaFormSpeciesIdTable[] = { + SPECIES_DIALGA, + SPECIES_DIALGA_ORIGIN, + FORM_SPECIES_END, +}; + +static const u16 sPalkiaFormSpeciesIdTable[] = { + SPECIES_PALKIA, + SPECIES_PALKIA_ORIGIN, + FORM_SPECIES_END, +}; + static const u16 sGiratinaFormSpeciesIdTable[] = { SPECIES_GIRATINA, SPECIES_GIRATINA_ORIGIN, FORM_SPECIES_END, }; +static const u16 sSamurottFormSpeciesIdTable[] = { + SPECIES_SAMUROTT, + SPECIES_SAMUROTT_HISUIAN, + FORM_SPECIES_END, +}; + static const u16 sShayminFormSpeciesIdTable[] = { SPECIES_SHAYMIN, SPECIES_SHAYMIN_SKY, @@ -624,6 +685,13 @@ static const u16 sAudinoFormSpeciesIdTable[] = { static const u16 sBasculinFormSpeciesIdTable[] = { SPECIES_BASCULIN, SPECIES_BASCULIN_BLUE_STRIPED, + SPECIES_BASCULIN_WHITE_STRIPED, + FORM_SPECIES_END, +}; + +static const u16 sLilligantFormSpeciesIdTable[] = { + SPECIES_LILLIGANT, + SPECIES_LILLIGANT_HISUIAN, FORM_SPECIES_END, }; @@ -647,6 +715,18 @@ static const u16 sYamaskFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sZoruaFormSpeciesIdTable[] = { + SPECIES_ZORUA, + SPECIES_ZORUA_HISUIAN, + FORM_SPECIES_END, +}; + +static const u16 sZoroarkFormSpeciesIdTable[] = { + SPECIES_ZOROARK, + SPECIES_ZOROARK_HISUIAN, + FORM_SPECIES_END, +}; + static const u16 sDeerlingFormSpeciesIdTable[] = { SPECIES_DEERLING, SPECIES_DEERLING_SUMMER, @@ -669,6 +749,12 @@ static const u16 sStunfiskFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sBraviaryFormSpeciesIdTable[] = { + SPECIES_BRAVIARY, + SPECIES_BRAVIARY_HISUIAN, + FORM_SPECIES_END, +}; + static const u16 sTornadusFormSpeciesIdTable[] = { SPECIES_TORNADUS, SPECIES_TORNADUS_THERIAN, @@ -687,6 +773,12 @@ static const u16 sLandorusFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sEnamorusFormSpeciesIdTable[] = { + SPECIES_ENAMORUS, + SPECIES_ENAMORUS_THERIAN, + FORM_SPECIES_END, +}; + static const u16 sKyuremFormSpeciesIdTable[] = { SPECIES_KYUREM, SPECIES_KYUREM_WHITE, @@ -800,6 +892,18 @@ static const u16 sAegislashFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sSliggooFormSpeciesIdTable[] = { + SPECIES_SLIGGOO, + SPECIES_SLIGGOO_HISUIAN, + FORM_SPECIES_END, +}; + +static const u16 sGoodraFormSpeciesIdTable[] = { + SPECIES_GOODRA, + SPECIES_GOODRA_HISUIAN, + FORM_SPECIES_END, +}; + static const u16 sPumpkabooFormSpeciesIdTable[] = { SPECIES_PUMPKABOO, SPECIES_PUMPKABOO_SMALL, @@ -816,6 +920,12 @@ static const u16 sGourgeistFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sAvaluggFormSpeciesIdTable[] = { + SPECIES_AVALUGG, + SPECIES_AVALUGG_HISUIAN, + FORM_SPECIES_END, +}; + static const u16 sXerneasFormSpeciesIdTable[] = { SPECIES_XERNEAS, SPECIES_XERNEAS_ACTIVE, @@ -843,6 +953,12 @@ static const u16 sHoopaFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sDecidueyeFormSpeciesIdTable[] = { + SPECIES_DECIDUEYE, + SPECIES_DECIDUEYE_HISUIAN, + FORM_SPECIES_END, +}; + static const u16 sOricorioFormSpeciesIdTable[] = { SPECIES_ORICORIO, SPECIES_ORICORIO_POM_POM, @@ -1022,3 +1138,4 @@ static const u16 sCalyrexFormSpeciesIdTable[] = { SPECIES_CALYREX_SHADOW_RIDER, FORM_SPECIES_END, }; +#endif diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 00872a9b26..2651b4daf7 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -36,12 +36,20 @@ const u8 gItemEffect_MaxPotion[7] = { const u8 gItemEffect_HyperPotion[7] = { [4] = ITEM4_HEAL_HP, +#if I_HEALTH_RECOVERY >= GEN_7 + [6] = 120, // Amount of HP to recover +#else [6] = 200, // Amount of HP to recover +#endif }; const u8 gItemEffect_SuperPotion[7] = { [4] = ITEM4_HEAL_HP, +#if I_HEALTH_RECOVERY >= GEN_7 + [6] = 60, // Amount of HP to recover +#else [6] = 50, // Amount of HP to recover +#endif }; const u8 gItemEffect_FullHeal[6] = { @@ -60,17 +68,29 @@ const u8 gItemEffect_MaxRevive[7] = { const u8 gItemEffect_FreshWater[7] = { [4] = ITEM4_HEAL_HP, +#if I_HEALTH_RECOVERY >= GEN_7 + [6] = 30, // Amount of HP to recover +#else [6] = 50, // Amount of HP to recover +#endif }; const u8 gItemEffect_SodaPop[7] = { [4] = ITEM4_HEAL_HP, +#if I_HEALTH_RECOVERY >= GEN_7 + [6] = 50, // Amount of HP to recover +#else [6] = 60, // Amount of HP to recover +#endif }; const u8 gItemEffect_Lemonade[7] = { [4] = ITEM4_HEAL_HP, +#if I_HEALTH_RECOVERY >= GEN_7 + [6] = 70, // Amount of HP to recover +#else [6] = 80, // Amount of HP to recover +#endif }; const u8 gItemEffect_MoomooMilk[7] = { @@ -81,16 +101,24 @@ const u8 gItemEffect_MoomooMilk[7] = { const u8 gItemEffect_EnergyPowder[10] = { [4] = ITEM4_HEAL_HP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = 50, // Amount of HP to recover - [7] = -5, // Friendship change, low - [8] = -5, // Friendship change, mid +#if I_HEALTH_RECOVERY >= GEN_7 + [6] = 60, // Amount of HP to recover +#else + [6] = 50, // Amount of HP to recover +#endif + [7] = -5, // Friendship change, low + [8] = -5, // Friendship change, mid [9] = -10, // Friendship change, high }; const u8 gItemEffect_EnergyRoot[10] = { [4] = ITEM4_HEAL_HP, [5] = ITEM5_FRIENDSHIP_ALL, +#if I_HEALTH_RECOVERY >= GEN_7 + [6] = 120, // Amount of HP to recover +#else [6] = 200, // Amount of HP to recover +#endif [7] = -10, // Friendship change, low [8] = -10, // Friendship change, mid [9] = -15, // Friendship change, high @@ -133,10 +161,6 @@ const u8 gItemEffect_MaxElixir[7] = { [6] = ITEM6_HEAL_PP_FULL, }; -const u8 gItemEffect_LavaCookie[6] = { - [3] = ITEM3_STATUS_ALL, -}; - const u8 gItemEffect_BlueFlute[6] = { [3] = ITEM3_SLEEP, }; @@ -165,36 +189,97 @@ const u8 gItemEffect_SacredAsh[7] = { [(i) + 1] = 3, /* Friendship change, mid */ \ [(i) + 2] = 2 /* Friendship change, high */ -const u8 gItemEffect_HPUp[10] = { +const u8 gItemEffect_HPUp[11] = { [4] = ITEM4_EV_HP, [5] = ITEM5_FRIENDSHIP_ALL, [6] = ITEM6_ADD_EV, VITAMIN_FRIENDSHIP_CHANGE(7), + [10] = ITEM10_IS_VITAMIN, }; -const u8 gItemEffect_Protein[10] = { +const u8 gItemEffect_Protein[11] = { [4] = ITEM4_EV_ATK, [5] = ITEM5_FRIENDSHIP_ALL, [6] = ITEM6_ADD_EV, VITAMIN_FRIENDSHIP_CHANGE(7), + [10] = ITEM10_IS_VITAMIN, }; -const u8 gItemEffect_Iron[10] = { +const u8 gItemEffect_Iron[11] = { [5] = ITEM5_EV_DEF | ITEM5_FRIENDSHIP_ALL, [6] = ITEM6_ADD_EV, VITAMIN_FRIENDSHIP_CHANGE(7), + [10] = ITEM10_IS_VITAMIN, }; -const u8 gItemEffect_Carbos[10] = { +const u8 gItemEffect_Carbos[11] = { [5] = ITEM5_EV_SPEED | ITEM5_FRIENDSHIP_ALL, [6] = ITEM6_ADD_EV, VITAMIN_FRIENDSHIP_CHANGE(7), + [10] = ITEM10_IS_VITAMIN, }; -const u8 gItemEffect_Calcium[10] = { +const u8 gItemEffect_Calcium[11] = { [5] = ITEM5_EV_SPATK | ITEM5_FRIENDSHIP_ALL, [6] = ITEM6_ADD_EV, VITAMIN_FRIENDSHIP_CHANGE(7), + [10] = ITEM10_IS_VITAMIN, +}; + +const u8 gItemEffect_Zinc[11] = { + [5] = ITEM5_EV_SPDEF | ITEM5_FRIENDSHIP_ALL, + [6] = ITEM6_ADD_EV, + VITAMIN_FRIENDSHIP_CHANGE(7), + [10] = ITEM10_IS_VITAMIN, +}; + +#define FEATHER_FRIENDSHIP_CHANGE(i) \ + [(i) + 0] = 3, /* Friendship change, low */ \ + [(i) + 1] = 2, /* Friendship change, mid */ \ + [(i) + 2] = 1 /* Friendship change, high */ + +const u8 gItemEffect_HpFeather[11] = { + [4] = ITEM4_EV_HP, + [5] = ITEM5_FRIENDSHIP_ALL, + [6] = ITEM6_ADD_ONE_EV, + FEATHER_FRIENDSHIP_CHANGE(7), + [10] = 0, +}; + +const u8 gItemEffect_AtkFeather[11] = { + [4] = ITEM4_EV_ATK, + [5] = ITEM5_FRIENDSHIP_ALL, + [6] = ITEM6_ADD_ONE_EV, + FEATHER_FRIENDSHIP_CHANGE(7), + [10] = 0, +}; + +const u8 gItemEffect_DefFeather[11] = { + [5] = ITEM5_EV_DEF | ITEM5_FRIENDSHIP_ALL, + [6] = ITEM6_ADD_ONE_EV, + FEATHER_FRIENDSHIP_CHANGE(7), + [10] = 0, +}; + +const u8 gItemEffect_SpeedFeather[11] = { + [5] = ITEM5_EV_SPEED | ITEM5_FRIENDSHIP_ALL, + [6] = ITEM6_ADD_ONE_EV, + FEATHER_FRIENDSHIP_CHANGE(7), + [10] = 0, +}; + +const u8 gItemEffect_SpatkFeather[11] = { + [5] = ITEM5_EV_SPATK | ITEM5_FRIENDSHIP_ALL, + [6] = ITEM6_ADD_ONE_EV, + FEATHER_FRIENDSHIP_CHANGE(7), + [10] = 0, +}; + +const u8 gItemEffect_SpdefFeather[11] = { + [5] = ITEM5_EV_SPDEF | ITEM5_FRIENDSHIP_ALL, + [6] = ITEM6_ADD_ONE_EV, + FEATHER_FRIENDSHIP_CHANGE(7), + [10] = 0, }; const u8 gItemEffect_RareCandy[10] = { @@ -211,12 +296,6 @@ const u8 gItemEffect_PPUp[9] = { VITAMIN_FRIENDSHIP_CHANGE(6), }; -const u8 gItemEffect_Zinc[10] = { - [5] = ITEM5_EV_SPDEF | ITEM5_FRIENDSHIP_ALL, - [6] = ITEM6_ADD_EV, - VITAMIN_FRIENDSHIP_CHANGE(7), -}; - const u8 gItemEffect_PPMax[9] = { [5] = ITEM5_PP_MAX | ITEM5_FRIENDSHIP_ALL, VITAMIN_FRIENDSHIP_CHANGE(6), @@ -243,56 +322,42 @@ const u8 gItemEffect_DireHit[8] = { }; const u8 gItemEffect_XAttack[8] = { - [0] = 1, // ITEM0_X_ATTACK + [1] = ITEM1_X_ATTACK, [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, STAT_BOOST_FRIENDSHIP_CHANGE, }; -const u8 gItemEffect_XDefend[8] = { - [1] = 1 << 4, /// ITEM1_X_DEFEND +const u8 gItemEffect_XDefense[8] = { + [1] = ITEM1_X_DEFENSE, [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, STAT_BOOST_FRIENDSHIP_CHANGE, }; const u8 gItemEffect_XSpeed[8] = { - [1] = 1, // ITEM1_X_SPEED + [1] = ITEM1_X_SPEED, [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, STAT_BOOST_FRIENDSHIP_CHANGE, }; const u8 gItemEffect_XAccuracy[8] = { - [2] = 1 << 4, // ITEM2_X_ACCURACY + [1] = ITEM1_X_ACCURACY, [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, STAT_BOOST_FRIENDSHIP_CHANGE, }; -const u8 gItemEffect_XSpecial[8] = { - [2] = 1, // ITEM2_X_SPATK +const u8 gItemEffect_XSpecialAttack[8] = { + [1] = ITEM1_X_SPATK, [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, STAT_BOOST_FRIENDSHIP_CHANGE, }; -const u8 gItemEffect_SunStone[6] = { - [4] = ITEM4_EVO_STONE, +const u8 gItemEffect_XSpecialDefense[8] = { + [1] = ITEM1_X_SPDEF, + [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, + STAT_BOOST_FRIENDSHIP_CHANGE, }; -const u8 gItemEffect_MoonStone[6] = { - [4] = ITEM4_EVO_STONE, -}; - -const u8 gItemEffect_FireStone[6] = { - [4] = ITEM4_EVO_STONE, -}; - -const u8 gItemEffect_ThunderStone[6] = { - [4] = ITEM4_EVO_STONE, -}; - -const u8 gItemEffect_WaterStone[6] = { - [4] = ITEM4_EVO_STONE, -}; - -const u8 gItemEffect_LeafStone[6] = { +const u8 gItemEffect_EvoItem[6] = { [4] = ITEM4_EVO_STONE, }; @@ -330,13 +395,13 @@ const u8 gItemEffect_PersimBerry[6] = { [3] = ITEM3_CONFUSION, }; -const u8 gItemEffect_LumBerry[6] = { - [3] = ITEM3_STATUS_ALL, -}; - const u8 gItemEffect_SitrusBerry[7] = { [4] = ITEM4_HEAL_HP, +#if I_SITRUS_BERRY_HEAL >= GEN_4 + [6] = ITEM6_HEAL_HP_QUARTER, +#else [6] = 30, // Amount of HP to recover +#endif }; #define EV_BERRY_FRIENDSHIP_CHANGE \ @@ -384,74 +449,126 @@ const u8 gItemEffect_TamatoBerry[10] = { const u8 *const gItemEffectTable[] = { - [ITEM_POTION - ITEM_POTION] = gItemEffect_Potion, - [ITEM_ANTIDOTE - ITEM_POTION] = gItemEffect_Antidote, - [ITEM_BURN_HEAL - ITEM_POTION] = gItemEffect_BurnHeal, - [ITEM_ICE_HEAL - ITEM_POTION] = gItemEffect_IceHeal, - [ITEM_AWAKENING - ITEM_POTION] = gItemEffect_Awakening, - [ITEM_PARALYZE_HEAL - ITEM_POTION] = gItemEffect_ParalyzeHeal, - [ITEM_FULL_RESTORE - ITEM_POTION] = gItemEffect_FullRestore, - [ITEM_MAX_POTION - ITEM_POTION] = gItemEffect_MaxPotion, - [ITEM_HYPER_POTION - ITEM_POTION] = gItemEffect_HyperPotion, - [ITEM_SUPER_POTION - ITEM_POTION] = gItemEffect_SuperPotion, - [ITEM_FULL_HEAL - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_REVIVE - ITEM_POTION] = gItemEffect_Revive, - [ITEM_MAX_REVIVE - ITEM_POTION] = gItemEffect_MaxRevive, - [ITEM_FRESH_WATER - ITEM_POTION] = gItemEffect_FreshWater, - [ITEM_SODA_POP - ITEM_POTION] = gItemEffect_SodaPop, - [ITEM_LEMONADE - ITEM_POTION] = gItemEffect_Lemonade, - [ITEM_MOOMOO_MILK - ITEM_POTION] = gItemEffect_MoomooMilk, - [ITEM_ENERGY_POWDER - ITEM_POTION] = gItemEffect_EnergyPowder, - [ITEM_ENERGY_ROOT - ITEM_POTION] = gItemEffect_EnergyRoot, - [ITEM_HEAL_POWDER - ITEM_POTION] = gItemEffect_HealPowder, - [ITEM_REVIVAL_HERB - ITEM_POTION] = gItemEffect_RevivalHerb, - [ITEM_ETHER - ITEM_POTION] = gItemEffect_Ether, - [ITEM_MAX_ETHER - ITEM_POTION] = gItemEffect_MaxEther, - [ITEM_ELIXIR - ITEM_POTION] = gItemEffect_Elixir, - [ITEM_MAX_ELIXIR - ITEM_POTION] = gItemEffect_MaxElixir, - [ITEM_LAVA_COOKIE - ITEM_POTION] = gItemEffect_LavaCookie, - [ITEM_BLUE_FLUTE - ITEM_POTION] = gItemEffect_BlueFlute, - [ITEM_YELLOW_FLUTE - ITEM_POTION] = gItemEffect_YellowFlute, - [ITEM_RED_FLUTE - ITEM_POTION] = gItemEffect_RedFlute, - [ITEM_BERRY_JUICE - ITEM_POTION] = gItemEffect_BerryJuice, - [ITEM_SACRED_ASH - ITEM_POTION] = gItemEffect_SacredAsh, - [ITEM_HP_UP - ITEM_POTION] = gItemEffect_HPUp, - [ITEM_PROTEIN - ITEM_POTION] = gItemEffect_Protein, - [ITEM_IRON - ITEM_POTION] = gItemEffect_Iron, - [ITEM_CARBOS - ITEM_POTION] = gItemEffect_Carbos, - [ITEM_CALCIUM - ITEM_POTION] = gItemEffect_Calcium, - [ITEM_RARE_CANDY - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_PP_UP - ITEM_POTION] = gItemEffect_PPUp, - [ITEM_ZINC - ITEM_POTION] = gItemEffect_Zinc, - [ITEM_PP_MAX - ITEM_POTION] = gItemEffect_PPMax, - [ITEM_GUARD_SPEC - ITEM_POTION] = gItemEffect_GuardSpec, - [ITEM_DIRE_HIT - ITEM_POTION] = gItemEffect_DireHit, - [ITEM_X_ATTACK - ITEM_POTION] = gItemEffect_XAttack, - [ITEM_X_DEFEND - ITEM_POTION] = gItemEffect_XDefend, - [ITEM_X_SPEED - ITEM_POTION] = gItemEffect_XSpeed, - [ITEM_X_ACCURACY - ITEM_POTION] = gItemEffect_XAccuracy, - [ITEM_X_SPECIAL - ITEM_POTION] = gItemEffect_XSpecial, - [ITEM_SUN_STONE - ITEM_POTION] = gItemEffect_SunStone, - [ITEM_MOON_STONE - ITEM_POTION] = gItemEffect_MoonStone, - [ITEM_FIRE_STONE - ITEM_POTION] = gItemEffect_FireStone, - [ITEM_THUNDER_STONE - ITEM_POTION] = gItemEffect_ThunderStone, - [ITEM_WATER_STONE - ITEM_POTION] = gItemEffect_WaterStone, - [ITEM_LEAF_STONE - ITEM_POTION] = gItemEffect_LeafStone, - [ITEM_CHERI_BERRY - ITEM_POTION] = gItemEffect_CheriBerry, - [ITEM_CHESTO_BERRY - ITEM_POTION] = gItemEffect_ChestoBerry, - [ITEM_PECHA_BERRY - ITEM_POTION] = gItemEffect_PechaBerry, - [ITEM_RAWST_BERRY - ITEM_POTION] = gItemEffect_RawstBerry, - [ITEM_ASPEAR_BERRY - ITEM_POTION] = gItemEffect_AspearBerry, - [ITEM_LEPPA_BERRY - ITEM_POTION] = gItemEffect_LeppaBerry, - [ITEM_ORAN_BERRY - ITEM_POTION] = gItemEffect_OranBerry, - [ITEM_PERSIM_BERRY - ITEM_POTION] = gItemEffect_PersimBerry, - [ITEM_LUM_BERRY - ITEM_POTION] = gItemEffect_LumBerry, - [ITEM_SITRUS_BERRY - ITEM_POTION] = gItemEffect_SitrusBerry, - [ITEM_POMEG_BERRY - ITEM_POTION] = gItemEffect_PomegBerry, - [ITEM_KELPSY_BERRY - ITEM_POTION] = gItemEffect_KelpsyBerry, - [ITEM_QUALOT_BERRY - ITEM_POTION] = gItemEffect_QualotBerry, - [ITEM_HONDEW_BERRY - ITEM_POTION] = gItemEffect_HondewBerry, - [ITEM_GREPA_BERRY - ITEM_POTION] = gItemEffect_GrepaBerry, - [ITEM_TAMATO_BERRY - ITEM_POTION] = gItemEffect_TamatoBerry, - [LAST_BERRY_INDEX - ITEM_POTION] = NULL + // Medicine + [ITEM_POTION - ITEM_POTION] = gItemEffect_Potion, + [ITEM_SUPER_POTION - ITEM_POTION] = gItemEffect_SuperPotion, + [ITEM_HYPER_POTION - ITEM_POTION] = gItemEffect_HyperPotion, + [ITEM_MAX_POTION - ITEM_POTION] = gItemEffect_MaxPotion, + [ITEM_FULL_RESTORE - ITEM_POTION] = gItemEffect_FullRestore, + [ITEM_REVIVE - ITEM_POTION] = gItemEffect_Revive, + [ITEM_MAX_REVIVE - ITEM_POTION] = gItemEffect_MaxRevive, + [ITEM_FRESH_WATER - ITEM_POTION] = gItemEffect_FreshWater, + [ITEM_SODA_POP - ITEM_POTION] = gItemEffect_SodaPop, + [ITEM_LEMONADE - ITEM_POTION] = gItemEffect_Lemonade, + [ITEM_MOOMOO_MILK - ITEM_POTION] = gItemEffect_MoomooMilk, + [ITEM_ENERGY_POWDER - ITEM_POTION] = gItemEffect_EnergyPowder, + [ITEM_ENERGY_ROOT - ITEM_POTION] = gItemEffect_EnergyRoot, + [ITEM_HEAL_POWDER - ITEM_POTION] = gItemEffect_HealPowder, + [ITEM_REVIVAL_HERB - ITEM_POTION] = gItemEffect_RevivalHerb, + [ITEM_ANTIDOTE - ITEM_POTION] = gItemEffect_Antidote, + [ITEM_PARALYZE_HEAL - ITEM_POTION] = gItemEffect_ParalyzeHeal, + [ITEM_BURN_HEAL - ITEM_POTION] = gItemEffect_BurnHeal, + [ITEM_ICE_HEAL - ITEM_POTION] = gItemEffect_IceHeal, + [ITEM_AWAKENING - ITEM_POTION] = gItemEffect_Awakening, + [ITEM_FULL_HEAL - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_ETHER - ITEM_POTION] = gItemEffect_Ether, + [ITEM_MAX_ETHER - ITEM_POTION] = gItemEffect_MaxEther, + [ITEM_ELIXIR - ITEM_POTION] = gItemEffect_Elixir, + [ITEM_MAX_ELIXIR - ITEM_POTION] = gItemEffect_MaxElixir, + [ITEM_BERRY_JUICE - ITEM_POTION] = gItemEffect_BerryJuice, + [ITEM_SACRED_ASH - ITEM_POTION] = gItemEffect_SacredAsh, + [ITEM_SWEET_HEART - ITEM_POTION] = gItemEffect_Potion, + [ITEM_MAX_HONEY - ITEM_POTION] = gItemEffect_MaxRevive, + + // Regional Specialties + [ITEM_PEWTER_CRUNCHIES - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_RAGE_CANDY_BAR - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_LAVA_COOKIE - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_OLD_GATEAU - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_CASTELIACONE - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_LUMIOSE_GALETTE - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_SHALOUR_SABLE - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_BIG_MALASADA - ITEM_POTION] = gItemEffect_FullHeal, + + // Vitamins + [ITEM_HP_UP - ITEM_POTION] = gItemEffect_HPUp, + [ITEM_PROTEIN - ITEM_POTION] = gItemEffect_Protein, + [ITEM_IRON - ITEM_POTION] = gItemEffect_Iron, + [ITEM_CALCIUM - ITEM_POTION] = gItemEffect_Calcium, + [ITEM_ZINC - ITEM_POTION] = gItemEffect_Zinc, + [ITEM_CARBOS - ITEM_POTION] = gItemEffect_Carbos, + [ITEM_PP_UP - ITEM_POTION] = gItemEffect_PPUp, + [ITEM_PP_MAX - ITEM_POTION] = gItemEffect_PPMax, + + // EV Feathers + [ITEM_HEALTH_FEATHER - ITEM_POTION] = gItemEffect_HpFeather, + [ITEM_MUSCLE_FEATHER - ITEM_POTION] = gItemEffect_AtkFeather, + [ITEM_RESIST_FEATHER - ITEM_POTION] = gItemEffect_DefFeather, + [ITEM_GENIUS_FEATHER - ITEM_POTION] = gItemEffect_SpatkFeather, + [ITEM_CLEVER_FEATHER - ITEM_POTION] = gItemEffect_SpdefFeather, + [ITEM_SWIFT_FEATHER - ITEM_POTION] = gItemEffect_SpeedFeather, + + // Candy + [ITEM_RARE_CANDY - ITEM_POTION] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XS - ITEM_POTION] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_S - ITEM_POTION] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_M - ITEM_POTION] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_L - ITEM_POTION] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XL - ITEM_POTION] = gItemEffect_RareCandy, + //[ITEM_DYNAMAX_CANDY - ITEM_POTION] = gItemEffect_DynamaxCandy, // Todo + + // Medicinal Flutes + [ITEM_BLUE_FLUTE - ITEM_POTION] = gItemEffect_BlueFlute, + [ITEM_YELLOW_FLUTE - ITEM_POTION] = gItemEffect_YellowFlute, + [ITEM_RED_FLUTE - ITEM_POTION] = gItemEffect_RedFlute, + + // X Items + [ITEM_X_ATTACK - ITEM_POTION] = gItemEffect_XAttack, + [ITEM_X_DEFENSE - ITEM_POTION] = gItemEffect_XDefense, + [ITEM_X_SPEED - ITEM_POTION] = gItemEffect_XSpeed, + [ITEM_X_ACCURACY - ITEM_POTION] = gItemEffect_XAccuracy, + [ITEM_X_SP_ATK - ITEM_POTION] = gItemEffect_XSpecialAttack, + [ITEM_X_SP_DEF - ITEM_POTION] = gItemEffect_XSpecialDefense, + + [ITEM_DIRE_HIT - ITEM_POTION] = gItemEffect_DireHit, + [ITEM_GUARD_SPEC - ITEM_POTION] = gItemEffect_GuardSpec, + + //[ITEM_MAX_MUSHROOMS - ITEM_POTION] = gItemEffect_MaxMushrooms, // Todo + + // Evolution Items + [ITEM_FIRE_STONE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_WATER_STONE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_THUNDER_STONE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_LEAF_STONE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_ICE_STONE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_SUN_STONE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_MOON_STONE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_SHINY_STONE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_DUSK_STONE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_DAWN_STONE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_SWEET_APPLE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_TART_APPLE - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_CRACKED_POT - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_CHIPPED_POT - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_GALARICA_CUFF - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_GALARICA_WREATH - ITEM_POTION] = gItemEffect_EvoItem, + + // Berries + [ITEM_CHERI_BERRY - ITEM_POTION] = gItemEffect_CheriBerry, + [ITEM_CHESTO_BERRY - ITEM_POTION] = gItemEffect_ChestoBerry, + [ITEM_PECHA_BERRY - ITEM_POTION] = gItemEffect_PechaBerry, + [ITEM_RAWST_BERRY - ITEM_POTION] = gItemEffect_RawstBerry, + [ITEM_ASPEAR_BERRY - ITEM_POTION] = gItemEffect_AspearBerry, + [ITEM_LEPPA_BERRY - ITEM_POTION] = gItemEffect_LeppaBerry, + [ITEM_ORAN_BERRY - ITEM_POTION] = gItemEffect_OranBerry, + [ITEM_PERSIM_BERRY - ITEM_POTION] = gItemEffect_PersimBerry, + [ITEM_LUM_BERRY - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_SITRUS_BERRY - ITEM_POTION] = gItemEffect_SitrusBerry, + [ITEM_POMEG_BERRY - ITEM_POTION] = gItemEffect_PomegBerry, + [ITEM_KELPSY_BERRY - ITEM_POTION] = gItemEffect_KelpsyBerry, + [ITEM_QUALOT_BERRY - ITEM_POTION] = gItemEffect_QualotBerry, + [ITEM_HONDEW_BERRY - ITEM_POTION] = gItemEffect_HondewBerry, + [ITEM_GREPA_BERRY - ITEM_POTION] = gItemEffect_GrepaBerry, + [ITEM_TAMATO_BERRY - ITEM_POTION] = gItemEffect_TamatoBerry, + [LAST_BERRY_INDEX - ITEM_POTION] = NULL, }; diff --git a/src/data/pokemon/level_up_learnset_pointers.h b/src/data/pokemon/level_up_learnset_pointers.h index 6cd308aa7d..27c7b522f8 100644 --- a/src/data/pokemon/level_up_learnset_pointers.h +++ b/src/data/pokemon/level_up_learnset_pointers.h @@ -387,6 +387,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_JIRACHI] = sJirachiLevelUpLearnset, [SPECIES_DEOXYS] = sDeoxysLevelUpLearnset, [SPECIES_CHIMECHO] = sChimechoLevelUpLearnset, +#if P_NEW_POKEMON == TRUE [SPECIES_TURTWIG] = sTurtwigLevelUpLearnset, [SPECIES_GROTLE] = sGrotleLevelUpLearnset, [SPECIES_TORTERRA] = sTorterraLevelUpLearnset, @@ -899,6 +900,13 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_GLASTRIER] = sGlastrierLevelUpLearnset, [SPECIES_SPECTRIER] = sSpectrierLevelUpLearnset, [SPECIES_CALYREX] = sCalyrexLevelUpLearnset, + [SPECIES_WYRDEER] = sWyrdeerLevelUpLearnset, + [SPECIES_KLEAVOR] = sKleavorLevelUpLearnset, + [SPECIES_URSALUNA] = sUrsalunaLevelUpLearnset, + [SPECIES_BASCULEGION] = sBasculegionLevelUpLearnset, + [SPECIES_SNEASLER] = sSneaslerLevelUpLearnset, + [SPECIES_OVERQWIL] = sOverqwilLevelUpLearnset, + [SPECIES_ENAMORUS] = sEnamorusLevelUpLearnset, // Megas [SPECIES_VENUSAUR_MEGA] = sVenusaurLevelUpLearnset, [SPECIES_CHARIZARD_MEGA_X] = sCharizardLevelUpLearnset, @@ -990,6 +998,23 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_DARMANITAN_GALARIAN] = sDarmanitanGalarianLevelUpLearnset, [SPECIES_YAMASK_GALARIAN] = sYamaskGalarianLevelUpLearnset, [SPECIES_STUNFISK_GALARIAN] = sStunfiskGalarianLevelUpLearnset, + // Hisuian Forms + [SPECIES_GROWLITHE_HISUIAN] = sGrowlitheHisuianLevelUpLearnset, + [SPECIES_ARCANINE_HISUIAN] = sArcanineHisuianLevelUpLearnset, + [SPECIES_VOLTORB_HISUIAN] = sVoltorbHisuianLevelUpLearnset, + [SPECIES_ELECTRODE_HISUIAN] = sElectrodeHisuianLevelUpLearnset, + [SPECIES_TYPHLOSION_HISUIAN] = sTyphlosionHisuianLevelUpLearnset, + [SPECIES_QWILFISH_HISUIAN] = sQwilfishHisuianLevelUpLearnset, + [SPECIES_SNEASEL_HISUIAN] = sSneaselHisuianLevelUpLearnset, + [SPECIES_SAMUROTT_HISUIAN] = sSamurottHisuianLevelUpLearnset, + [SPECIES_LILLIGANT_HISUIAN] = sLilligantHisuianLevelUpLearnset, + [SPECIES_ZORUA_HISUIAN] = sZoruaHisuianLevelUpLearnset, + [SPECIES_ZOROARK_HISUIAN] = sZoroarkHisuianLevelUpLearnset, + [SPECIES_BRAVIARY_HISUIAN] = sBraviaryHisuianLevelUpLearnset, + [SPECIES_SLIGGOO_HISUIAN] = sSliggooHisuianLevelUpLearnset, + [SPECIES_GOODRA_HISUIAN] = sGoodraHisuianLevelUpLearnset, + [SPECIES_AVALUGG_HISUIAN] = sAvaluggHisuianLevelUpLearnset, + [SPECIES_DECIDUEYE_HISUIAN] = sDecidueyeHisuianLevelUpLearnset, // Misc Forms // Cosplay Pikachu [SPECIES_PIKACHU_COSPLAY] = sPikachuLevelUpLearnset, @@ -1009,6 +1034,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_PIKACHU_WORLD_CAP] = sPikachuLevelUpLearnset, // Pichu [SPECIES_PICHU_SPIKY_EARED] = sPichuLevelUpLearnset, +#endif // Unown [SPECIES_UNOWN_B] = sUnownLevelUpLearnset, [SPECIES_UNOWN_C] = sUnownLevelUpLearnset, @@ -1045,6 +1071,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_DEOXYS_ATTACK] = sDeoxysAttackLevelUpLearnset, [SPECIES_DEOXYS_DEFENSE] = sDeoxysDefenseLevelUpLearnset, [SPECIES_DEOXYS_SPEED] = sDeoxysSpeedLevelUpLearnset, +#if P_NEW_POKEMON == TRUE // Burmy [SPECIES_BURMY_SANDY_CLOAK] = sBurmyLevelUpLearnset, [SPECIES_BURMY_TRASH_CLOAK] = sBurmyLevelUpLearnset, @@ -1063,7 +1090,9 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_ROTOM_FROST] = sRotomLevelUpLearnset, [SPECIES_ROTOM_FAN] = sRotomLevelUpLearnset, [SPECIES_ROTOM_MOW] = sRotomLevelUpLearnset, - // Giratina + // Origin Forme + [SPECIES_DIALGA_ORIGIN] = sDialgaLevelUpLearnset, + [SPECIES_PALKIA_ORIGIN] = sPalkiaLevelUpLearnset, [SPECIES_GIRATINA_ORIGIN] = sGiratinaLevelUpLearnset, // Shaymin [SPECIES_SHAYMIN_SKY] = sShayminSkyLevelUpLearnset, @@ -1087,6 +1116,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_ARCEUS_FAIRY] = sArceusLevelUpLearnset, // Basculin [SPECIES_BASCULIN_BLUE_STRIPED] = sBasculinLevelUpLearnset, + [SPECIES_BASCULIN_WHITE_STRIPED] = sBasculinLevelUpLearnset, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = sDarmanitanLevelUpLearnset, [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sDarmanitanGalarianLevelUpLearnset, @@ -1102,6 +1132,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_TORNADUS_THERIAN] = sTornadusLevelUpLearnset, [SPECIES_THUNDURUS_THERIAN] = sThundurusLevelUpLearnset, [SPECIES_LANDORUS_THERIAN] = sLandorusLevelUpLearnset, + [SPECIES_ENAMORUS_THERIAN] = sEnamorusLevelUpLearnset, // Kyurem [SPECIES_KYUREM_WHITE] = sKyuremWhiteLevelUpLearnset, [SPECIES_KYUREM_BLACK] = sKyuremBlackLevelUpLearnset, @@ -1272,4 +1303,5 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = // Calyrex [SPECIES_CALYREX_ICE_RIDER] = sCalyrexIceRiderLevelUpLearnset, [SPECIES_CALYREX_SHADOW_RIDER] = sCalyrexShadowRiderLevelUpLearnset, +#endif }; diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h index c774cc3127..a8c696f1f4 100644 --- a/src/data/pokemon/level_up_learnsets.h +++ b/src/data/pokemon/level_up_learnsets.h @@ -1,5 +1,4 @@ #define LEVEL_UP_MOVE(lvl, moveLearned) {.move = moveLearned, .level = lvl} -#define LEVEL_UP_END (0xffff) static const struct LevelUpMove sBulbasaurLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -13,9 +12,9 @@ static const struct LevelUpMove sBulbasaurLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(25, MOVE_GROWTH), LEVEL_UP_MOVE(27, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(31, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(31, MOVE_WORRY_SEED), LEVEL_UP_MOVE(33, MOVE_SYNTHESIS), - //LEVEL_UP_MOVE(37, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(37, MOVE_SEED_BOMB), LEVEL_UP_END }; @@ -33,14 +32,14 @@ static const struct LevelUpMove sIvysaurLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(28, MOVE_GROWTH), LEVEL_UP_MOVE(31, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(36, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(36, MOVE_WORRY_SEED), LEVEL_UP_MOVE(39, MOVE_SYNTHESIS), LEVEL_UP_MOVE(44, MOVE_SOLAR_BEAM), LEVEL_UP_END }; static const struct LevelUpMove sVenusaurLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE), + //LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE), LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -56,9 +55,9 @@ static const struct LevelUpMove sVenusaurLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(28, MOVE_GROWTH), LEVEL_UP_MOVE(31, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(39, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(39, MOVE_WORRY_SEED), LEVEL_UP_MOVE(45, MOVE_SYNTHESIS), - //LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE(53, MOVE_SOLAR_BEAM), LEVEL_UP_END }; @@ -70,12 +69,12 @@ static const struct LevelUpMove sCharmanderLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(16, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE(19, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(25, MOVE_FIRE_FANG), - //LEVEL_UP_MOVE(28, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(25, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(28, MOVE_FLAME_BURST), LEVEL_UP_MOVE(34, MOVE_SLASH), LEVEL_UP_MOVE(37, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(43, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(46, MOVE_INFERNO), + LEVEL_UP_MOVE(46, MOVE_INFERNO), LEVEL_UP_END }; @@ -87,23 +86,23 @@ static const struct LevelUpMove sCharmeleonLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(17, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE(21, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(28, MOVE_FIRE_FANG), - //LEVEL_UP_MOVE(32, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(28, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(32, MOVE_FLAME_BURST), LEVEL_UP_MOVE(39, MOVE_SLASH), LEVEL_UP_MOVE(43, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(50, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(54, MOVE_INFERNO), + LEVEL_UP_MOVE(54, MOVE_INFERNO), LEVEL_UP_END }; static const struct LevelUpMove sCharizardLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK), + //LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK), LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE), LEVEL_UP_MOVE( 1, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW), - //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -111,14 +110,14 @@ static const struct LevelUpMove sCharizardLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(17, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE(21, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(28, MOVE_FIRE_FANG), - //LEVEL_UP_MOVE(32, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(28, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(32, MOVE_FLAME_BURST), LEVEL_UP_MOVE(41, MOVE_SLASH), LEVEL_UP_MOVE(47, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(56, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(62, MOVE_INFERNO), + LEVEL_UP_MOVE(62, MOVE_INFERNO), LEVEL_UP_MOVE(71, MOVE_HEAT_WAVE), - //LEVEL_UP_MOVE(77, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(77, MOVE_FLARE_BLITZ), LEVEL_UP_END }; @@ -132,7 +131,7 @@ static const struct LevelUpMove sSquirtleLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_RAPID_SPIN), LEVEL_UP_MOVE(22, MOVE_PROTECT), LEVEL_UP_MOVE(25, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(31, MOVE_SKULL_BASH), LEVEL_UP_MOVE(34, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(37, MOVE_RAIN_DANCE), @@ -152,7 +151,7 @@ static const struct LevelUpMove sWartortleLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_RAPID_SPIN), LEVEL_UP_MOVE(25, MOVE_PROTECT), LEVEL_UP_MOVE(29, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(37, MOVE_SKULL_BASH), LEVEL_UP_MOVE(41, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(45, MOVE_RAIN_DANCE), @@ -161,7 +160,7 @@ static const struct LevelUpMove sWartortleLevelUpLearnset[] = { }; static const struct LevelUpMove sBlastoiseLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, 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), @@ -174,7 +173,7 @@ static const struct LevelUpMove sBlastoiseLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_RAPID_SPIN), LEVEL_UP_MOVE(25, MOVE_PROTECT), LEVEL_UP_MOVE(29, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(40, MOVE_SKULL_BASH), LEVEL_UP_MOVE(47, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(54, MOVE_RAIN_DANCE), @@ -185,18 +184,18 @@ static const struct LevelUpMove sBlastoiseLevelUpLearnset[] = { static const struct LevelUpMove sCaterpieLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), - //LEVEL_UP_MOVE( 9, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 9, MOVE_BUG_BITE), LEVEL_UP_END }; static const struct LevelUpMove sMetapodLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_HARDEN), + //LEVEL_UP_MOVE( 0, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_END }; static const struct LevelUpMove sButterfreeLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_GUST), + //LEVEL_UP_MOVE( 0, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE(11, MOVE_CONFUSION), @@ -208,44 +207,44 @@ static const struct LevelUpMove sButterfreeLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_SUPERSONIC), LEVEL_UP_MOVE(25, MOVE_SAFEGUARD), LEVEL_UP_MOVE(29, MOVE_WHIRLWIND), - //LEVEL_UP_MOVE(31, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE(35, MOVE_RAGE_POWDER), - //LEVEL_UP_MOVE(37, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(41, MOVE_TAILWIND), - //LEVEL_UP_MOVE(43, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(47, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(31, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(35, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(37, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(41, MOVE_TAILWIND), + LEVEL_UP_MOVE(43, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(47, MOVE_QUIVER_DANCE), LEVEL_UP_END }; static const struct LevelUpMove sWeedleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POISON_STING), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), - //LEVEL_UP_MOVE( 9, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 9, MOVE_BUG_BITE), LEVEL_UP_END }; static const struct LevelUpMove sKakunaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_HARDEN), + //LEVEL_UP_MOVE( 0, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_END }; static const struct LevelUpMove sBeedrillLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_TWINEEDLE), + //LEVEL_UP_MOVE( 0, MOVE_TWINEEDLE), LEVEL_UP_MOVE( 1, MOVE_TWINEEDLE), LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(11, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(14, MOVE_RAGE), LEVEL_UP_MOVE(17, MOVE_PURSUIT), LEVEL_UP_MOVE(20, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(23, MOVE_VENOSHOCK), - //LEVEL_UP_MOVE(26, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(29, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(23, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(26, MOVE_ASSURANCE), + LEVEL_UP_MOVE(29, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE(32, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(35, MOVE_POISON_JAB), + LEVEL_UP_MOVE(35, MOVE_POISON_JAB), LEVEL_UP_MOVE(38, MOVE_AGILITY), LEVEL_UP_MOVE(41, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(44, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(44, MOVE_FELL_STINGER), LEVEL_UP_END }; @@ -259,11 +258,11 @@ static const struct LevelUpMove sPidgeyLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE(29, MOVE_AGILITY), LEVEL_UP_MOVE(33, MOVE_WING_ATTACK), - //LEVEL_UP_MOVE(37, MOVE_ROOST), - //LEVEL_UP_MOVE(41, MOVE_TAILWIND), + LEVEL_UP_MOVE(37, MOVE_ROOST), + LEVEL_UP_MOVE(41, MOVE_TAILWIND), LEVEL_UP_MOVE(45, MOVE_MIRROR_MOVE), - //LEVEL_UP_MOVE(49, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(53, MOVE_HURRICANE), + LEVEL_UP_MOVE(49, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(53, MOVE_HURRICANE), LEVEL_UP_END }; @@ -279,16 +278,16 @@ static const struct LevelUpMove sPidgeottoLevelUpLearnset[] = { LEVEL_UP_MOVE(27, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE(32, MOVE_AGILITY), LEVEL_UP_MOVE(37, MOVE_WING_ATTACK), - //LEVEL_UP_MOVE(42, MOVE_ROOST), - //LEVEL_UP_MOVE(47, MOVE_TAILWIND), + LEVEL_UP_MOVE(42, MOVE_ROOST), + LEVEL_UP_MOVE(47, MOVE_TAILWIND), LEVEL_UP_MOVE(52, MOVE_MIRROR_MOVE), - //LEVEL_UP_MOVE(57, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(62, MOVE_HURRICANE), + LEVEL_UP_MOVE(57, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(62, MOVE_HURRICANE), LEVEL_UP_END }; static const struct LevelUpMove sPidgeotLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HURRICANE), + LEVEL_UP_MOVE( 1, MOVE_HURRICANE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_GUST), @@ -301,11 +300,11 @@ static const struct LevelUpMove sPidgeotLevelUpLearnset[] = { LEVEL_UP_MOVE(27, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE(32, MOVE_AGILITY), LEVEL_UP_MOVE(38, MOVE_WING_ATTACK), - //LEVEL_UP_MOVE(44, MOVE_ROOST), - //LEVEL_UP_MOVE(50, MOVE_TAILWIND), + LEVEL_UP_MOVE(44, MOVE_ROOST), + LEVEL_UP_MOVE(50, MOVE_TAILWIND), LEVEL_UP_MOVE(56, MOVE_MIRROR_MOVE), - //LEVEL_UP_MOVE(62, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(68, MOVE_HURRICANE), + LEVEL_UP_MOVE(62, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(68, MOVE_HURRICANE), LEVEL_UP_END }; @@ -317,9 +316,9 @@ static const struct LevelUpMove sRattataLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_BITE), LEVEL_UP_MOVE(13, MOVE_PURSUIT), LEVEL_UP_MOVE(16, MOVE_HYPER_FANG), - //LEVEL_UP_MOVE(19, MOVE_ASSURANCE), + LEVEL_UP_MOVE(19, MOVE_ASSURANCE), LEVEL_UP_MOVE(22, MOVE_CRUNCH), - //LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(28, MOVE_SUPER_FANG), LEVEL_UP_MOVE(31, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(34, MOVE_ENDEAVOR), @@ -327,7 +326,7 @@ static const struct LevelUpMove sRattataLevelUpLearnset[] = { }; static const struct LevelUpMove sRaticateLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE), + //LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -339,9 +338,9 @@ static const struct LevelUpMove sRaticateLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_BITE), LEVEL_UP_MOVE(13, MOVE_PURSUIT), LEVEL_UP_MOVE(16, MOVE_HYPER_FANG), - //LEVEL_UP_MOVE(19, MOVE_ASSURANCE), + LEVEL_UP_MOVE(19, MOVE_ASSURANCE), LEVEL_UP_MOVE(24, MOVE_CRUNCH), - //LEVEL_UP_MOVE(29, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(29, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(34, MOVE_SUPER_FANG), LEVEL_UP_MOVE(39, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(44, MOVE_ENDEAVOR), @@ -356,17 +355,17 @@ static const struct LevelUpMove sSpearowLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(15, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(18, MOVE_MIRROR_MOVE), - //LEVEL_UP_MOVE(22, MOVE_ASSURANCE), + LEVEL_UP_MOVE(22, MOVE_ASSURANCE), LEVEL_UP_MOVE(25, MOVE_AGILITY), LEVEL_UP_MOVE(29, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(32, MOVE_ROOST), + LEVEL_UP_MOVE(32, MOVE_ROOST), LEVEL_UP_MOVE(36, MOVE_DRILL_PECK), LEVEL_UP_END }; static const struct LevelUpMove sFearowLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_DRILL_RUN), - //LEVEL_UP_MOVE( 1, MOVE_PLUCK), + LEVEL_UP_MOVE( 1, MOVE_DRILL_RUN), + LEVEL_UP_MOVE( 1, MOVE_PLUCK), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -376,12 +375,12 @@ static const struct LevelUpMove sFearowLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(15, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(18, MOVE_MIRROR_MOVE), - //LEVEL_UP_MOVE(23, MOVE_ASSURANCE), + LEVEL_UP_MOVE(23, MOVE_ASSURANCE), LEVEL_UP_MOVE(27, MOVE_AGILITY), LEVEL_UP_MOVE(32, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(36, MOVE_ROOST), + LEVEL_UP_MOVE(36, MOVE_ROOST), LEVEL_UP_MOVE(41, MOVE_DRILL_PECK), - //LEVEL_UP_MOVE(45, MOVE_DRILL_RUN), + LEVEL_UP_MOVE(45, MOVE_DRILL_RUN), LEVEL_UP_END }; @@ -396,22 +395,22 @@ static const struct LevelUpMove sEkansLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_STOCKPILE), LEVEL_UP_MOVE(25, MOVE_SWALLOW), LEVEL_UP_MOVE(25, MOVE_SPIT_UP), - //LEVEL_UP_MOVE(28, MOVE_ACID_SPRAY), - //LEVEL_UP_MOVE(33, MOVE_MUD_BOMB), - //LEVEL_UP_MOVE(36, MOVE_GASTRO_ACID), - //LEVEL_UP_MOVE(38, MOVE_BELCH), + LEVEL_UP_MOVE(28, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(33, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(36, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(38, MOVE_BELCH), LEVEL_UP_MOVE(41, MOVE_HAZE), - //LEVEL_UP_MOVE(44, MOVE_COIL), - //LEVEL_UP_MOVE(49, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE(44, MOVE_COIL), + LEVEL_UP_MOVE(49, MOVE_GUNK_SHOT), LEVEL_UP_END }; static const struct LevelUpMove sArbokLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_CRUNCH), + //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_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), @@ -424,13 +423,13 @@ static const struct LevelUpMove sArbokLevelUpLearnset[] = { LEVEL_UP_MOVE(27, MOVE_STOCKPILE), LEVEL_UP_MOVE(27, MOVE_SWALLOW), LEVEL_UP_MOVE(27, MOVE_SPIT_UP), - //LEVEL_UP_MOVE(32, MOVE_ACID_SPRAY), - //LEVEL_UP_MOVE(39, MOVE_MUD_BOMB), - //LEVEL_UP_MOVE(44, MOVE_GASTRO_ACID), - //LEVEL_UP_MOVE(48, MOVE_BELCH), + LEVEL_UP_MOVE(32, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(39, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(44, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(48, MOVE_BELCH), LEVEL_UP_MOVE(51, MOVE_HAZE), - //LEVEL_UP_MOVE(56, MOVE_COIL), - //LEVEL_UP_MOVE(63, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE(56, MOVE_COIL), + LEVEL_UP_MOVE(63, MOVE_GUNK_SHOT), LEVEL_UP_END }; @@ -438,19 +437,19 @@ static const struct LevelUpMove sPikachuLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 5, MOVE_GROWL), - //LEVEL_UP_MOVE( 7, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 7, MOVE_PLAY_NICE), LEVEL_UP_MOVE(10, MOVE_QUICK_ATTACK), - //LEVEL_UP_MOVE(13, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(13, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(18, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE(21, MOVE_FEINT), + LEVEL_UP_MOVE(21, MOVE_FEINT), LEVEL_UP_MOVE(23, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(26, MOVE_SPARK), - //LEVEL_UP_MOVE(29, MOVE_NUZZLE), - //LEVEL_UP_MOVE(34, MOVE_DISCHARGE), + LEVEL_UP_MOVE(29, MOVE_NUZZLE), + LEVEL_UP_MOVE(34, MOVE_DISCHARGE), LEVEL_UP_MOVE(37, MOVE_SLAM), LEVEL_UP_MOVE(42, MOVE_THUNDERBOLT), LEVEL_UP_MOVE(45, MOVE_AGILITY), - //LEVEL_UP_MOVE(50, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(50, MOVE_WILD_CHARGE), LEVEL_UP_MOVE(53, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(58, MOVE_THUNDER), LEVEL_UP_END @@ -478,7 +477,7 @@ static const struct LevelUpMove sSandshrewLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_SAND_TOMB), LEVEL_UP_MOVE(26, MOVE_SLASH), LEVEL_UP_MOVE(30, MOVE_DIG), - //LEVEL_UP_MOVE(34, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(34, MOVE_GYRO_BALL), LEVEL_UP_MOVE(38, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(42, MOVE_SANDSTORM), LEVEL_UP_MOVE(46, MOVE_EARTHQUAKE), @@ -486,7 +485,7 @@ static const struct LevelUpMove sSandshrewLevelUpLearnset[] = { }; static const struct LevelUpMove sSandslashLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_CRUSH_CLAW), + //LEVEL_UP_MOVE( 0, MOVE_CRUSH_CLAW), LEVEL_UP_MOVE( 1, MOVE_CRUSH_CLAW), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), @@ -503,7 +502,7 @@ static const struct LevelUpMove sSandslashLevelUpLearnset[] = { LEVEL_UP_MOVE(24, MOVE_SAND_TOMB), LEVEL_UP_MOVE(28, MOVE_SLASH), LEVEL_UP_MOVE(33, MOVE_DIG), - //LEVEL_UP_MOVE(38, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(38, MOVE_GYRO_BALL), LEVEL_UP_MOVE(43, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(48, MOVE_SANDSTORM), LEVEL_UP_MOVE(53, MOVE_EARTHQUAKE), @@ -519,10 +518,10 @@ static const struct LevelUpMove sNidoranFLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(21, MOVE_BITE), LEVEL_UP_MOVE(25, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(31, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(31, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE(33, MOVE_FLATTER), LEVEL_UP_MOVE(37, MOVE_CRUNCH), - //LEVEL_UP_MOVE(43, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(43, MOVE_CAPTIVATE), LEVEL_UP_MOVE(45, MOVE_POISON_FANG), LEVEL_UP_END }; @@ -536,10 +535,10 @@ static const struct LevelUpMove sNidorinaLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(23, MOVE_BITE), LEVEL_UP_MOVE(28, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(35, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(35, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE(38, MOVE_FLATTER), LEVEL_UP_MOVE(43, MOVE_CRUNCH), - //LEVEL_UP_MOVE(50, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(50, MOVE_CAPTIVATE), LEVEL_UP_MOVE(58, MOVE_POISON_FANG), LEVEL_UP_END }; @@ -550,9 +549,9 @@ static const struct LevelUpMove sNidoqueenLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_POISON_STING), - //LEVEL_UP_MOVE(23, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(23, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(35, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(43, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(43, MOVE_EARTH_POWER), LEVEL_UP_MOVE(58, MOVE_SUPERPOWER), LEVEL_UP_END }; @@ -566,10 +565,10 @@ static const struct LevelUpMove sNidoranMLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(21, MOVE_HORN_ATTACK), LEVEL_UP_MOVE(25, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(31, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(31, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE(33, MOVE_FLATTER), - //LEVEL_UP_MOVE(37, MOVE_POISON_JAB), - //LEVEL_UP_MOVE(43, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(37, MOVE_POISON_JAB), + LEVEL_UP_MOVE(43, MOVE_CAPTIVATE), LEVEL_UP_MOVE(45, MOVE_HORN_DRILL), LEVEL_UP_END }; @@ -583,10 +582,10 @@ static const struct LevelUpMove sNidorinoLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(23, MOVE_HORN_ATTACK), LEVEL_UP_MOVE(28, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(35, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(35, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE(38, MOVE_FLATTER), - //LEVEL_UP_MOVE(43, MOVE_POISON_JAB), - //LEVEL_UP_MOVE(50, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(43, MOVE_POISON_JAB), + LEVEL_UP_MOVE(50, MOVE_CAPTIVATE), LEVEL_UP_MOVE(58, MOVE_HORN_DRILL), LEVEL_UP_END }; @@ -597,16 +596,16 @@ static const struct LevelUpMove sNidokingLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_POISON_STING), - //LEVEL_UP_MOVE(23, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(23, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(35, MOVE_THRASH), - //LEVEL_UP_MOVE(43, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(43, MOVE_EARTH_POWER), LEVEL_UP_MOVE(58, MOVE_MEGAHORN), LEVEL_UP_END }; static const struct LevelUpMove sClefairyLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT), - //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_ENCORE), @@ -614,26 +613,26 @@ static const struct LevelUpMove sClefairyLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE(16, MOVE_FOLLOW_ME), - //LEVEL_UP_MOVE(19, MOVE_BESTOW), - //LEVEL_UP_MOVE(22, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(19, MOVE_BESTOW), + LEVEL_UP_MOVE(22, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE(25, MOVE_MINIMIZE), - //LEVEL_UP_MOVE(28, MOVE_STORED_POWER), + LEVEL_UP_MOVE(28, MOVE_STORED_POWER), LEVEL_UP_MOVE(31, MOVE_METRONOME), LEVEL_UP_MOVE(34, MOVE_COSMIC_POWER), - //LEVEL_UP_MOVE(37, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(37, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(40, MOVE_BODY_SLAM), LEVEL_UP_MOVE(43, MOVE_MOONLIGHT), - //LEVEL_UP_MOVE(46, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(49, MOVE_GRAVITY), + LEVEL_UP_MOVE(46, MOVE_MOONBLAST), + LEVEL_UP_MOVE(49, MOVE_GRAVITY), LEVEL_UP_MOVE(50, MOVE_METEOR_MASH), - //LEVEL_UP_MOVE(55, MOVE_HEALING_WISH), - //LEVEL_UP_MOVE(58, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(55, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(58, MOVE_AFTER_YOU), LEVEL_UP_END }; static const struct LevelUpMove sClefableLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT), - //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE( 1, MOVE_MINIMIZE), @@ -645,29 +644,29 @@ static const struct LevelUpMove sVulpixLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 7, MOVE_ROAR), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(10, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(15, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(18, MOVE_PAYBACK), + LEVEL_UP_MOVE(18, MOVE_PAYBACK), LEVEL_UP_MOVE(20, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(23, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(26, MOVE_HEX), - //LEVEL_UP_MOVE(28, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(26, MOVE_HEX), + LEVEL_UP_MOVE(28, MOVE_FLAME_BURST), LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(34, MOVE_SAFEGUARD), LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(39, MOVE_IMPRISON), LEVEL_UP_MOVE(42, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(44, MOVE_GRUDGE), - //LEVEL_UP_MOVE(47, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(50, MOVE_INFERNO), + LEVEL_UP_MOVE(47, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(50, MOVE_INFERNO), LEVEL_UP_END }; static const struct LevelUpMove sNinetalesLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_IMPRISON), - //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), @@ -679,19 +678,19 @@ static const struct LevelUpMove sJigglypuffLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 3, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 5, MOVE_POUND), - //LEVEL_UP_MOVE( 9, MOVE_PLAY_NICE), - //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 9, MOVE_PLAY_NICE), + LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(14, MOVE_DISABLE), LEVEL_UP_MOVE(17, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(20, MOVE_ROLLOUT), - //LEVEL_UP_MOVE(22, MOVE_ROUND), + LEVEL_UP_MOVE(22, MOVE_ROUND), LEVEL_UP_MOVE(25, MOVE_STOCKPILE), LEVEL_UP_MOVE(25, MOVE_SWALLOW), LEVEL_UP_MOVE(25, MOVE_SPIT_UP), - //LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE(30, MOVE_REST), LEVEL_UP_MOVE(32, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(35, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(35, MOVE_GYRO_BALL), LEVEL_UP_MOVE(38, MOVE_MIMIC), LEVEL_UP_MOVE(41, MOVE_HYPER_VOICE), LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE), @@ -700,7 +699,7 @@ static const struct LevelUpMove sJigglypuffLevelUpLearnset[] = { static const struct LevelUpMove sWigglytuffLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -721,9 +720,9 @@ static const struct LevelUpMove sZubatLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_MEAN_LOOK), LEVEL_UP_MOVE(31, MOVE_LEECH_LIFE), LEVEL_UP_MOVE(35, MOVE_HAZE), - //LEVEL_UP_MOVE(37, MOVE_VENOSHOCK), - //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(43, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(37, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(43, MOVE_QUICK_GUARD), LEVEL_UP_END }; @@ -744,9 +743,9 @@ static const struct LevelUpMove sGolbatLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_MEAN_LOOK), LEVEL_UP_MOVE(35, MOVE_LEECH_LIFE), LEVEL_UP_MOVE(40, MOVE_HAZE), - //LEVEL_UP_MOVE(43, MOVE_VENOSHOCK), - //LEVEL_UP_MOVE(48, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(51, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(43, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(48, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(51, MOVE_QUICK_GUARD), LEVEL_UP_END }; @@ -759,13 +758,13 @@ static const struct LevelUpMove sOddishLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_STUN_SPORE), LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE(19, MOVE_MEGA_DRAIN), - //LEVEL_UP_MOVE(23, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(23, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(27, MOVE_MOONLIGHT), LEVEL_UP_MOVE(31, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(35, MOVE_TOXIC), - //LEVEL_UP_MOVE(39, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE(43, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(47, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(39, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(43, MOVE_MOONBLAST), + LEVEL_UP_MOVE(47, MOVE_GRASSY_TERRAIN), LEVEL_UP_MOVE(51, MOVE_PETAL_DANCE), LEVEL_UP_END }; @@ -781,13 +780,13 @@ static const struct LevelUpMove sGloomLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_STUN_SPORE), LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE(19, MOVE_MEGA_DRAIN), - //LEVEL_UP_MOVE(24, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(24, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(29, MOVE_MOONLIGHT), LEVEL_UP_MOVE(34, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(39, MOVE_TOXIC), - //LEVEL_UP_MOVE(44, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD), - //LEVEL_UP_MOVE(54, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(44, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(54, MOVE_GRASSY_TERRAIN), LEVEL_UP_MOVE(59, MOVE_PETAL_DANCE), LEVEL_UP_END }; @@ -797,7 +796,7 @@ static const struct LevelUpMove sVileplumeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY), LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), - //LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE(59, MOVE_PETAL_DANCE), LEVEL_UP_MOVE(69, MOVE_SOLAR_BEAM), LEVEL_UP_END @@ -814,13 +813,13 @@ static const struct LevelUpMove sParasLevelUpLearnset[] = { LEVEL_UP_MOVE(33, MOVE_GROWTH), LEVEL_UP_MOVE(38, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(43, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(49, MOVE_RAGE_POWDER), - //LEVEL_UP_MOVE(54, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(49, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(54, MOVE_X_SCISSOR), LEVEL_UP_END }; static const struct LevelUpMove sParasectLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_CROSS_POISON), + LEVEL_UP_MOVE( 1, MOVE_CROSS_POISON), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), @@ -834,8 +833,8 @@ static const struct LevelUpMove sParasectLevelUpLearnset[] = { LEVEL_UP_MOVE(37, MOVE_GROWTH), LEVEL_UP_MOVE(44, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(51, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(59, MOVE_RAGE_POWDER), - //LEVEL_UP_MOVE(66, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(59, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(66, MOVE_X_SCISSOR), LEVEL_UP_END }; @@ -851,17 +850,17 @@ static const struct LevelUpMove sVenonatLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(29, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE(35, MOVE_LEECH_LIFE), - //LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(41, MOVE_POISON_FANG), LEVEL_UP_MOVE(47, MOVE_PSYCHIC), LEVEL_UP_END }; static const struct LevelUpMove sVenomothLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_GUST), + //LEVEL_UP_MOVE( 0, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_GUST), - //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ), LEVEL_UP_MOVE( 1, MOVE_SILVER_WIND), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -875,11 +874,11 @@ static const struct LevelUpMove sVenomothLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(29, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE(37, MOVE_LEECH_LIFE), - //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(47, MOVE_POISON_FANG), LEVEL_UP_MOVE(55, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(59, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE(63, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(59, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(63, MOVE_QUIVER_DANCE), LEVEL_UP_END }; @@ -890,10 +889,10 @@ static const struct LevelUpMove sDiglettLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_ASTONISH), LEVEL_UP_MOVE(10, MOVE_MUD_SLAP), LEVEL_UP_MOVE(14, MOVE_MAGNITUDE), - //LEVEL_UP_MOVE(18, MOVE_BULLDOZE), - //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(25, MOVE_MUD_BOMB), - //LEVEL_UP_MOVE(28, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(18, MOVE_BULLDOZE), + LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(25, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(28, MOVE_EARTH_POWER), LEVEL_UP_MOVE(31, MOVE_DIG), LEVEL_UP_MOVE(35, MOVE_SLASH), LEVEL_UP_MOVE(39, MOVE_EARTHQUAKE), @@ -902,10 +901,10 @@ static const struct LevelUpMove sDiglettLevelUpLearnset[] = { }; static const struct LevelUpMove sDugtrioLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SAND_TOMB), + //LEVEL_UP_MOVE( 0, MOVE_SAND_TOMB), LEVEL_UP_MOVE( 1, MOVE_SAND_TOMB), - //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), @@ -914,10 +913,10 @@ static const struct LevelUpMove sDugtrioLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_ASTONISH), LEVEL_UP_MOVE(10, MOVE_MUD_SLAP), LEVEL_UP_MOVE(14, MOVE_MAGNITUDE), - //LEVEL_UP_MOVE(18, MOVE_BULLDOZE), - //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(25, MOVE_MUD_BOMB), - //LEVEL_UP_MOVE(30, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(18, MOVE_BULLDOZE), + LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(25, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(30, MOVE_EARTH_POWER), LEVEL_UP_MOVE(35, MOVE_DIG), LEVEL_UP_MOVE(41, MOVE_SLASH), LEVEL_UP_MOVE(47, MOVE_EARTHQUAKE), @@ -936,19 +935,19 @@ static const struct LevelUpMove sMeowthLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_TAUNT), LEVEL_UP_MOVE(30, MOVE_PAY_DAY), LEVEL_UP_MOVE(33, MOVE_SLASH), - //LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(41, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(46, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(50, MOVE_FEINT), + LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(41, MOVE_ASSURANCE), + LEVEL_UP_MOVE(46, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(50, MOVE_FEINT), LEVEL_UP_END }; static const struct LevelUpMove sPersianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SWIFT), + //LEVEL_UP_MOVE( 0, MOVE_SWIFT), LEVEL_UP_MOVE( 1, MOVE_SWIFT), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), + LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -959,13 +958,13 @@ static const struct LevelUpMove sPersianLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_SCREECH), LEVEL_UP_MOVE(22, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(25, MOVE_TAUNT), - //LEVEL_UP_MOVE(32, MOVE_POWER_GEM), + LEVEL_UP_MOVE(32, MOVE_POWER_GEM), LEVEL_UP_MOVE(37, MOVE_SLASH), - //LEVEL_UP_MOVE(44, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(49, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(56, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(61, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(65, MOVE_FEINT), + LEVEL_UP_MOVE(44, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(49, MOVE_ASSURANCE), + LEVEL_UP_MOVE(56, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(61, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(65, MOVE_FEINT), LEVEL_UP_END }; @@ -979,19 +978,19 @@ static const struct LevelUpMove sPsyduckLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_WATER_PULSE), LEVEL_UP_MOVE(19, MOVE_DISABLE), LEVEL_UP_MOVE(22, MOVE_SCREECH), - //LEVEL_UP_MOVE(25, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(31, MOVE_SOAK), + LEVEL_UP_MOVE(25, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(31, MOVE_SOAK), LEVEL_UP_MOVE(34, MOVE_PSYCH_UP), LEVEL_UP_MOVE(37, MOVE_AMNESIA), LEVEL_UP_MOVE(40, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(43, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(43, MOVE_WONDER_ROOM), LEVEL_UP_END }; static const struct LevelUpMove sGolduckLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ME_FIRST), - //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 1, MOVE_ME_FIRST), + LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -1003,13 +1002,13 @@ static const struct LevelUpMove sGolduckLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_WATER_PULSE), LEVEL_UP_MOVE(19, MOVE_DISABLE), LEVEL_UP_MOVE(22, MOVE_SCREECH), - //LEVEL_UP_MOVE(25, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(31, MOVE_SOAK), + LEVEL_UP_MOVE(25, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(31, MOVE_SOAK), LEVEL_UP_MOVE(36, MOVE_PSYCH_UP), LEVEL_UP_MOVE(41, MOVE_AMNESIA), LEVEL_UP_MOVE(46, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(51, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(51, MOVE_WONDER_ROOM), LEVEL_UP_END }; @@ -1025,22 +1024,22 @@ static const struct LevelUpMove sMankeyLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_SEISMIC_TOSS), LEVEL_UP_MOVE(19, MOVE_SWAGGER), LEVEL_UP_MOVE(22, MOVE_CROSS_CHOP), - //LEVEL_UP_MOVE(26, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(29, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(26, MOVE_ASSURANCE), + LEVEL_UP_MOVE(29, MOVE_PUNISHMENT), LEVEL_UP_MOVE(33, MOVE_THRASH), - //LEVEL_UP_MOVE(36, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(36, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(40, MOVE_SCREECH), - //LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM), LEVEL_UP_MOVE(47, MOVE_OUTRAGE), - //LEVEL_UP_MOVE(50, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(50, MOVE_FINAL_GAMBIT), LEVEL_UP_END }; static const struct LevelUpMove sPrimeapeLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_RAGE), + //LEVEL_UP_MOVE( 0, MOVE_RAGE), LEVEL_UP_MOVE( 1, MOVE_RAGE), - //LEVEL_UP_MOVE( 1, MOVE_FINAL_GAMBIT), - //LEVEL_UP_MOVE( 1, MOVE_FLING), + LEVEL_UP_MOVE( 1, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE( 1, MOVE_FLING), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -1051,14 +1050,14 @@ static const struct LevelUpMove sPrimeapeLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_SEISMIC_TOSS), LEVEL_UP_MOVE(19, MOVE_SWAGGER), LEVEL_UP_MOVE(22, MOVE_CROSS_CHOP), - //LEVEL_UP_MOVE(26, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(30, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(26, MOVE_ASSURANCE), + LEVEL_UP_MOVE(30, MOVE_PUNISHMENT), LEVEL_UP_MOVE(35, MOVE_THRASH), - //LEVEL_UP_MOVE(39, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(39, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(44, MOVE_SCREECH), - //LEVEL_UP_MOVE(48, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(48, MOVE_STOMPING_TANTRUM), LEVEL_UP_MOVE(53, MOVE_OUTRAGE), - //LEVEL_UP_MOVE(57, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(57, MOVE_FINAL_GAMBIT), LEVEL_UP_END }; @@ -1071,25 +1070,25 @@ static const struct LevelUpMove sGrowlitheLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_HELPING_HAND), LEVEL_UP_MOVE(17, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(19, MOVE_REVERSAL), - //LEVEL_UP_MOVE(21, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(21, MOVE_FIRE_FANG), LEVEL_UP_MOVE(23, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(28, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(28, MOVE_FLAME_BURST), LEVEL_UP_MOVE(30, MOVE_AGILITY), - //LEVEL_UP_MOVE(32, MOVE_RETALIATE), + LEVEL_UP_MOVE(32, MOVE_RETALIATE), LEVEL_UP_MOVE(34, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(39, MOVE_CRUNCH), LEVEL_UP_MOVE(41, MOVE_HEAT_WAVE), LEVEL_UP_MOVE(43, MOVE_OUTRAGE), - //LEVEL_UP_MOVE(45, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(45, MOVE_FLARE_BLITZ), LEVEL_UP_END }; static const struct LevelUpMove sArcanineLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_ROAR), LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE(34, MOVE_EXTREME_SPEED), LEVEL_UP_END }; @@ -1105,9 +1104,9 @@ static const struct LevelUpMove sPoliwagLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(28, MOVE_MUD_SHOT), LEVEL_UP_MOVE(31, MOVE_BELLY_DRUM), - //LEVEL_UP_MOVE(35, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(35, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE(38, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(41, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(41, MOVE_MUD_BOMB), LEVEL_UP_END }; @@ -1124,22 +1123,22 @@ static const struct LevelUpMove sPoliwhirlLevelUpLearnset[] = { LEVEL_UP_MOVE(27, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(32, MOVE_MUD_SHOT), LEVEL_UP_MOVE(37, MOVE_BELLY_DRUM), - //LEVEL_UP_MOVE(43, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(43, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE(48, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(53, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(53, MOVE_MUD_BOMB), LEVEL_UP_END }; static const struct LevelUpMove sPoliwrathLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SUBMISSION), + //LEVEL_UP_MOVE( 0, MOVE_SUBMISSION), LEVEL_UP_MOVE( 1, MOVE_SUBMISSION), - //LEVEL_UP_MOVE( 1, MOVE_CIRCLE_THROW), + LEVEL_UP_MOVE( 1, MOVE_CIRCLE_THROW), LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(32, MOVE_DYNAMIC_PUNCH), LEVEL_UP_MOVE(43, MOVE_MIND_READER), - //LEVEL_UP_MOVE(53, MOVE_CIRCLE_THROW), + LEVEL_UP_MOVE(53, MOVE_CIRCLE_THROW), LEVEL_UP_END }; @@ -1149,19 +1148,19 @@ static const struct LevelUpMove sAbraLevelUpLearnset[] = { }; static const struct LevelUpMove sKadabraLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_KINESIS), + //LEVEL_UP_MOVE( 0, MOVE_KINESIS), LEVEL_UP_MOVE( 1, MOVE_KINESIS), LEVEL_UP_MOVE( 1, MOVE_TELEPORT), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE(16, MOVE_CONFUSION), LEVEL_UP_MOVE(18, MOVE_DISABLE), LEVEL_UP_MOVE(21, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(23, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE(23, MOVE_MIRACLE_EYE), LEVEL_UP_MOVE(26, MOVE_REFLECT), - //LEVEL_UP_MOVE(28, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(28, MOVE_PSYCHO_CUT), LEVEL_UP_MOVE(31, MOVE_RECOVER), - //LEVEL_UP_MOVE(33, MOVE_TELEKINESIS), - //LEVEL_UP_MOVE(36, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE(33, MOVE_TELEKINESIS), + LEVEL_UP_MOVE(36, MOVE_ALLY_SWITCH), LEVEL_UP_MOVE(38, MOVE_PSYCHIC), LEVEL_UP_MOVE(41, MOVE_ROLE_PLAY), LEVEL_UP_MOVE(43, MOVE_FUTURE_SIGHT), @@ -1170,19 +1169,19 @@ static const struct LevelUpMove sKadabraLevelUpLearnset[] = { }; static const struct LevelUpMove sAlakazamLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_KINESIS), + //LEVEL_UP_MOVE( 0, MOVE_KINESIS), LEVEL_UP_MOVE( 1, MOVE_KINESIS), LEVEL_UP_MOVE( 1, MOVE_TELEPORT), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE(16, MOVE_CONFUSION), LEVEL_UP_MOVE(18, MOVE_DISABLE), LEVEL_UP_MOVE(21, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(23, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE(23, MOVE_MIRACLE_EYE), LEVEL_UP_MOVE(26, MOVE_REFLECT), - //LEVEL_UP_MOVE(28, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(28, MOVE_PSYCHO_CUT), LEVEL_UP_MOVE(31, MOVE_RECOVER), - //LEVEL_UP_MOVE(33, MOVE_TELEKINESIS), - //LEVEL_UP_MOVE(36, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE(33, MOVE_TELEKINESIS), + LEVEL_UP_MOVE(36, MOVE_ALLY_SWITCH), LEVEL_UP_MOVE(38, MOVE_PSYCHIC), LEVEL_UP_MOVE(41, MOVE_CALM_MIND), LEVEL_UP_MOVE(43, MOVE_FUTURE_SIGHT), @@ -1196,13 +1195,13 @@ static const struct LevelUpMove sMachopLevelUpLearnset[] = { LEVEL_UP_MOVE( 3, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 7, MOVE_KARATE_CHOP), LEVEL_UP_MOVE( 9, MOVE_FORESIGHT), - //LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP), LEVEL_UP_MOVE(15, MOVE_SEISMIC_TOSS), LEVEL_UP_MOVE(19, MOVE_REVENGE), LEVEL_UP_MOVE(21, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(25, MOVE_VITAL_THROW), - //LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP), - //LEVEL_UP_MOVE(31, MOVE_DUAL_CHOP), + LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(31, MOVE_DUAL_CHOP), LEVEL_UP_MOVE(33, MOVE_SUBMISSION), LEVEL_UP_MOVE(37, MOVE_BULK_UP), LEVEL_UP_MOVE(39, MOVE_CROSS_CHOP), @@ -1219,13 +1218,13 @@ static const struct LevelUpMove sMachokeLevelUpLearnset[] = { LEVEL_UP_MOVE( 3, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 7, MOVE_KARATE_CHOP), LEVEL_UP_MOVE( 9, MOVE_FORESIGHT), - //LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP), LEVEL_UP_MOVE(15, MOVE_SEISMIC_TOSS), LEVEL_UP_MOVE(19, MOVE_REVENGE), LEVEL_UP_MOVE(21, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(25, MOVE_VITAL_THROW), - //LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP), - //LEVEL_UP_MOVE(33, MOVE_DUAL_CHOP), + LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(33, MOVE_DUAL_CHOP), LEVEL_UP_MOVE(37, MOVE_SUBMISSION), LEVEL_UP_MOVE(43, MOVE_BULK_UP), LEVEL_UP_MOVE(47, MOVE_CROSS_CHOP), @@ -1235,9 +1234,9 @@ static const struct LevelUpMove sMachokeLevelUpLearnset[] = { }; static const struct LevelUpMove sMachampLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_STRENGTH), + //LEVEL_UP_MOVE( 0, MOVE_STRENGTH), LEVEL_UP_MOVE( 1, MOVE_STRENGTH), - //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -1245,13 +1244,13 @@ static const struct LevelUpMove sMachampLevelUpLearnset[] = { LEVEL_UP_MOVE( 3, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 7, MOVE_KARATE_CHOP), LEVEL_UP_MOVE( 9, MOVE_FORESIGHT), - //LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP), LEVEL_UP_MOVE(15, MOVE_SEISMIC_TOSS), LEVEL_UP_MOVE(19, MOVE_REVENGE), LEVEL_UP_MOVE(21, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(25, MOVE_VITAL_THROW), - //LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP), - //LEVEL_UP_MOVE(33, MOVE_DUAL_CHOP), + LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(33, MOVE_DUAL_CHOP), LEVEL_UP_MOVE(37, MOVE_SUBMISSION), LEVEL_UP_MOVE(43, MOVE_BULK_UP), LEVEL_UP_MOVE(47, MOVE_CROSS_CHOP), @@ -1270,11 +1269,11 @@ static const struct LevelUpMove sBellsproutLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_ACID), LEVEL_UP_MOVE(27, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(29, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE(35, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(35, MOVE_GASTRO_ACID), LEVEL_UP_MOVE(39, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(41, MOVE_POISON_JAB), + LEVEL_UP_MOVE(41, MOVE_POISON_JAB), LEVEL_UP_MOVE(47, MOVE_SLAM), - //LEVEL_UP_MOVE(50, MOVE_WRING_OUT), + LEVEL_UP_MOVE(50, MOVE_WRING_OUT), LEVEL_UP_END }; @@ -1290,17 +1289,17 @@ static const struct LevelUpMove sWeepinbellLevelUpLearnset[] = { LEVEL_UP_MOVE(24, MOVE_ACID), LEVEL_UP_MOVE(29, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(32, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE(39, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(39, MOVE_GASTRO_ACID), LEVEL_UP_MOVE(44, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(47, MOVE_POISON_JAB), + LEVEL_UP_MOVE(47, MOVE_POISON_JAB), LEVEL_UP_MOVE(54, MOVE_SLAM), - //LEVEL_UP_MOVE(58, MOVE_WRING_OUT), + LEVEL_UP_MOVE(58, MOVE_WRING_OUT), 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( 1, MOVE_LEAF_TORNADO), LEVEL_UP_MOVE( 1, MOVE_STOCKPILE), LEVEL_UP_MOVE( 1, MOVE_SWALLOW), LEVEL_UP_MOVE( 1, MOVE_SPIT_UP), @@ -1308,7 +1307,7 @@ static const struct LevelUpMove sVictreebelLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(32, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(32, MOVE_LEAF_STORM), LEVEL_UP_MOVE(44, MOVE_LEAF_BLADE), LEVEL_UP_END }; @@ -1318,25 +1317,25 @@ static const struct LevelUpMove sTentacoolLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 7, MOVE_CONSTRICT), LEVEL_UP_MOVE(10, MOVE_ACID), - //LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE(16, MOVE_WATER_PULSE), LEVEL_UP_MOVE(19, MOVE_WRAP), - //LEVEL_UP_MOVE(22, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(22, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(28, MOVE_BARRIER), - //LEVEL_UP_MOVE(31, MOVE_POISON_JAB), - //LEVEL_UP_MOVE(34, MOVE_BRINE), + LEVEL_UP_MOVE(31, MOVE_POISON_JAB), + LEVEL_UP_MOVE(34, MOVE_BRINE), LEVEL_UP_MOVE(37, MOVE_SCREECH), - //LEVEL_UP_MOVE(40, MOVE_HEX), - //LEVEL_UP_MOVE(43, MOVE_SLUDGE_WAVE), + LEVEL_UP_MOVE(40, MOVE_HEX), + LEVEL_UP_MOVE(43, MOVE_SLUDGE_WAVE), LEVEL_UP_MOVE(46, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(49, MOVE_WRING_OUT), + LEVEL_UP_MOVE(49, MOVE_WRING_OUT), LEVEL_UP_END }; static const struct LevelUpMove sTentacruelLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE), - //LEVEL_UP_MOVE( 1, MOVE_WRING_OUT), + LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE), + LEVEL_UP_MOVE( 1, MOVE_WRING_OUT), LEVEL_UP_MOVE( 1, MOVE_POISON_STING), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), @@ -1344,19 +1343,19 @@ static const struct LevelUpMove sTentacruelLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 7, MOVE_CONSTRICT), LEVEL_UP_MOVE(10, MOVE_ACID), - //LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE(16, MOVE_WATER_PULSE), LEVEL_UP_MOVE(19, MOVE_WRAP), - //LEVEL_UP_MOVE(22, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(22, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(28, MOVE_BARRIER), - //LEVEL_UP_MOVE(32, MOVE_POISON_JAB), - //LEVEL_UP_MOVE(36, MOVE_BRINE), + LEVEL_UP_MOVE(32, MOVE_POISON_JAB), + LEVEL_UP_MOVE(36, MOVE_BRINE), LEVEL_UP_MOVE(40, MOVE_SCREECH), - //LEVEL_UP_MOVE(44, MOVE_HEX), - //LEVEL_UP_MOVE(48, MOVE_SLUDGE_WAVE), + 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 }; @@ -1364,19 +1363,19 @@ static const struct LevelUpMove sGeodudeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 4, MOVE_MUD_SPORT), - //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(10, MOVE_ROLLOUT), LEVEL_UP_MOVE(12, MOVE_MAGNITUDE), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), - //LEVEL_UP_MOVE(22, MOVE_BULLDOZE), + 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(28, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(30, MOVE_ROCK_BLAST), LEVEL_UP_MOVE(34, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(36, MOVE_EXPLOSION), LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(42, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(42, MOVE_STONE_EDGE), LEVEL_UP_END }; @@ -1384,45 +1383,45 @@ static const struct LevelUpMove sGravelerLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), - //LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH), LEVEL_UP_MOVE( 4, MOVE_MUD_SPORT), - //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(10, MOVE_ROLLOUT), LEVEL_UP_MOVE(12, MOVE_MAGNITUDE), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), - //LEVEL_UP_MOVE(22, MOVE_BULLDOZE), + 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(30, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST), LEVEL_UP_MOVE(40, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(44, MOVE_EXPLOSION), LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(54, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(54, MOVE_STONE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sGolemLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), + 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_MUD_SPORT), - //LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH), LEVEL_UP_MOVE( 4, MOVE_MUD_SPORT), - //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), - //LEVEL_UP_MOVE(10, MOVE_STEAMROLLER), + LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(10, MOVE_STEAMROLLER), LEVEL_UP_MOVE(12, MOVE_MAGNITUDE), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), - //LEVEL_UP_MOVE(22, MOVE_BULLDOZE), + 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(30, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST), LEVEL_UP_MOVE(40, MOVE_EARTHQUAKE), 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_MOVE(54, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(60, MOVE_HEAVY_SLAM), LEVEL_UP_END }; @@ -1433,21 +1432,21 @@ static const struct LevelUpMove sPonytaLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_EMBER), LEVEL_UP_MOVE(13, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(17, MOVE_STOMP), - //LEVEL_UP_MOVE(21, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(21, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(25, MOVE_FIRE_SPIN), LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(33, MOVE_INFERNO), + LEVEL_UP_MOVE(33, MOVE_INFERNO), LEVEL_UP_MOVE(37, MOVE_AGILITY), LEVEL_UP_MOVE(41, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(45, MOVE_BOUNCE), - //LEVEL_UP_MOVE(49, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(49, MOVE_FLARE_BLITZ), LEVEL_UP_END }; static const struct LevelUpMove sRapidashLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK), + //LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), + LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), LEVEL_UP_MOVE( 1, MOVE_MEGAHORN), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -1457,14 +1456,14 @@ static const struct LevelUpMove sRapidashLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_EMBER), LEVEL_UP_MOVE(13, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(17, MOVE_STOMP), - //LEVEL_UP_MOVE(21, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(21, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(25, MOVE_FIRE_SPIN), LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(33, MOVE_INFERNO), + LEVEL_UP_MOVE(33, MOVE_INFERNO), LEVEL_UP_MOVE(37, MOVE_AGILITY), LEVEL_UP_MOVE(41, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(45, MOVE_BOUNCE), - //LEVEL_UP_MOVE(49, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(49, MOVE_FLARE_BLITZ), LEVEL_UP_END }; @@ -1478,20 +1477,20 @@ static const struct LevelUpMove sSlowpokeLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_DISABLE), LEVEL_UP_MOVE(23, MOVE_HEADBUTT), LEVEL_UP_MOVE(28, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(36, MOVE_SLACK_OFF), LEVEL_UP_MOVE(41, MOVE_AMNESIA), LEVEL_UP_MOVE(45, MOVE_PSYCHIC), LEVEL_UP_MOVE(49, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(54, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(58, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(58, MOVE_HEAL_PULSE), LEVEL_UP_END }; static const struct LevelUpMove sSlowbroLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_WITHDRAW), + //LEVEL_UP_MOVE( 0, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), - //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), LEVEL_UP_MOVE( 1, MOVE_CURSE), LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -1502,13 +1501,13 @@ static const struct LevelUpMove sSlowbroLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_DISABLE), LEVEL_UP_MOVE(23, MOVE_HEADBUTT), LEVEL_UP_MOVE(28, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(36, MOVE_SLACK_OFF), LEVEL_UP_MOVE(43, MOVE_AMNESIA), LEVEL_UP_MOVE(49, MOVE_PSYCHIC), LEVEL_UP_MOVE(55, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(62, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(68, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(68, MOVE_HEAL_PULSE), LEVEL_UP_END }; @@ -1517,54 +1516,54 @@ static const struct LevelUpMove sMagnemiteLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 5, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 7, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB), + LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB), LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(17, MOVE_SONIC_BOOM), LEVEL_UP_MOVE(19, MOVE_SPARK), - //LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(25, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL), - //LEVEL_UP_MOVE(31, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(31, MOVE_FLASH_CANNON), LEVEL_UP_MOVE(35, MOVE_SCREECH), - //LEVEL_UP_MOVE(37, MOVE_DISCHARGE), + LEVEL_UP_MOVE(37, MOVE_DISCHARGE), LEVEL_UP_MOVE(41, MOVE_LOCK_ON), - //LEVEL_UP_MOVE(43, MOVE_MAGNET_RISE), - //LEVEL_UP_MOVE(47, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(43, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(47, MOVE_GYRO_BALL), LEVEL_UP_MOVE(49, MOVE_ZAP_CANNON), LEVEL_UP_END }; static const struct LevelUpMove sMagnetonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK), + //LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON), - //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 5, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 7, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB), + LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB), LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(17, MOVE_SONIC_BOOM), LEVEL_UP_MOVE(19, MOVE_SPARK), - //LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(25, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL), - //LEVEL_UP_MOVE(33, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(33, MOVE_FLASH_CANNON), LEVEL_UP_MOVE(39, MOVE_SCREECH), - //LEVEL_UP_MOVE(43, MOVE_DISCHARGE), + LEVEL_UP_MOVE(43, MOVE_DISCHARGE), LEVEL_UP_MOVE(49, MOVE_LOCK_ON), - //LEVEL_UP_MOVE(53, MOVE_MAGNET_RISE), - //LEVEL_UP_MOVE(59, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(53, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(59, MOVE_GYRO_BALL), LEVEL_UP_MOVE(63, MOVE_ZAP_CANNON), LEVEL_UP_END }; static const struct LevelUpMove sFarfetchdLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), + LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -1576,12 +1575,12 @@ static const struct LevelUpMove sFarfetchdLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_AIR_CUTTER), LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(31, MOVE_AGILITY), - //LEVEL_UP_MOVE(33, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(37, MOVE_ACROBATICS), - //LEVEL_UP_MOVE(43, MOVE_FEINT), + LEVEL_UP_MOVE(33, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(37, MOVE_ACROBATICS), + LEVEL_UP_MOVE(43, MOVE_FEINT), LEVEL_UP_MOVE(45, MOVE_FALSE_SWIPE), - //LEVEL_UP_MOVE(49, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(55, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(49, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(55, MOVE_BRAVE_BIRD), LEVEL_UP_END }; @@ -1592,11 +1591,11 @@ static const struct LevelUpMove sDoduoLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_RAGE), LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(15, MOVE_PURSUIT), - //LEVEL_UP_MOVE(19, MOVE_PLUCK), - //LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT), + 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(33, MOVE_ACUPRESSURE), LEVEL_UP_MOVE(36, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(40, MOVE_JUMP_KICK), LEVEL_UP_MOVE(43, MOVE_DRILL_PECK), @@ -1606,7 +1605,7 @@ static const struct LevelUpMove sDoduoLevelUpLearnset[] = { }; static const struct LevelUpMove sDodrioLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK), + //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), @@ -1616,11 +1615,11 @@ static const struct LevelUpMove sDodrioLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_RAGE), LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(15, MOVE_PURSUIT), - //LEVEL_UP_MOVE(19, MOVE_PLUCK), - //LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT), + 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(34, MOVE_ACUPRESSURE), LEVEL_UP_MOVE(38, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(43, MOVE_JUMP_KICK), LEVEL_UP_MOVE(47, MOVE_DRILL_PECK), @@ -1635,15 +1634,15 @@ static const struct LevelUpMove sSeelLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_WATER_SPORT), LEVEL_UP_MOVE(11, MOVE_ICY_WIND), LEVEL_UP_MOVE(13, MOVE_ENCORE), - //LEVEL_UP_MOVE(17, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(17, MOVE_ICE_SHARD), LEVEL_UP_MOVE(21, MOVE_REST), - //LEVEL_UP_MOVE(23, MOVE_AQUA_RING), + LEVEL_UP_MOVE(23, MOVE_AQUA_RING), LEVEL_UP_MOVE(27, MOVE_AURORA_BEAM), - //LEVEL_UP_MOVE(31, MOVE_AQUA_JET), - //LEVEL_UP_MOVE(33, MOVE_BRINE), + LEVEL_UP_MOVE(31, MOVE_AQUA_JET), + LEVEL_UP_MOVE(33, MOVE_BRINE), LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(41, MOVE_DIVE), - //LEVEL_UP_MOVE(43, MOVE_AQUA_TAIL), + 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), @@ -1651,7 +1650,7 @@ static const struct LevelUpMove sSeelLevelUpLearnset[] = { }; static const struct LevelUpMove sDewgongLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SHEER_COLD), + //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), @@ -1661,15 +1660,15 @@ static const struct LevelUpMove sDewgongLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(11, MOVE_ICY_WIND), LEVEL_UP_MOVE(13, MOVE_ENCORE), - //LEVEL_UP_MOVE(17, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(17, MOVE_ICE_SHARD), LEVEL_UP_MOVE(21, MOVE_REST), - //LEVEL_UP_MOVE(23, MOVE_AQUA_RING), + LEVEL_UP_MOVE(23, MOVE_AQUA_RING), LEVEL_UP_MOVE(27, MOVE_AURORA_BEAM), - //LEVEL_UP_MOVE(31, MOVE_AQUA_JET), - //LEVEL_UP_MOVE(33, MOVE_BRINE), + LEVEL_UP_MOVE(31, MOVE_AQUA_JET), + LEVEL_UP_MOVE(33, MOVE_BRINE), LEVEL_UP_MOVE(39, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(45, MOVE_DIVE), - //LEVEL_UP_MOVE(49, MOVE_AQUA_TAIL), + 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), @@ -1683,22 +1682,22 @@ static const struct LevelUpMove sGrimerLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), LEVEL_UP_MOVE(12, MOVE_DISABLE), LEVEL_UP_MOVE(15, MOVE_SLUDGE), - //LEVEL_UP_MOVE(18, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(18, MOVE_MUD_BOMB), LEVEL_UP_MOVE(21, MOVE_MINIMIZE), - //LEVEL_UP_MOVE(26, MOVE_FLING), + LEVEL_UP_MOVE(26, MOVE_FLING), LEVEL_UP_MOVE(29, MOVE_SLUDGE_BOMB), - //LEVEL_UP_MOVE(32, MOVE_SLUDGE_WAVE), + LEVEL_UP_MOVE(32, MOVE_SLUDGE_WAVE), LEVEL_UP_MOVE(37, MOVE_SCREECH), - //LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT), LEVEL_UP_MOVE(43, MOVE_ACID_ARMOR), - //LEVEL_UP_MOVE(46, MOVE_BELCH), + LEVEL_UP_MOVE(46, MOVE_BELCH), LEVEL_UP_MOVE(48, MOVE_MEMENTO), LEVEL_UP_END }; static const struct LevelUpMove sMukLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_HARDEN), @@ -1707,15 +1706,15 @@ static const struct LevelUpMove sMukLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), LEVEL_UP_MOVE(12, MOVE_DISABLE), LEVEL_UP_MOVE(15, MOVE_SLUDGE), - //LEVEL_UP_MOVE(18, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(18, MOVE_MUD_BOMB), LEVEL_UP_MOVE(21, MOVE_MINIMIZE), - //LEVEL_UP_MOVE(26, MOVE_FLING), + LEVEL_UP_MOVE(26, MOVE_FLING), LEVEL_UP_MOVE(29, MOVE_SLUDGE_BOMB), - //LEVEL_UP_MOVE(32, MOVE_SLUDGE_WAVE), + LEVEL_UP_MOVE(32, MOVE_SLUDGE_WAVE), LEVEL_UP_MOVE(37, MOVE_SCREECH), - //LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT), LEVEL_UP_MOVE(46, MOVE_ACID_ARMOR), - //LEVEL_UP_MOVE(52, MOVE_BELCH), + LEVEL_UP_MOVE(52, MOVE_BELCH), LEVEL_UP_MOVE(57, MOVE_MEMENTO), LEVEL_UP_END }; @@ -1729,29 +1728,29 @@ static const struct LevelUpMove sShellderLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_PROTECT), LEVEL_UP_MOVE(20, MOVE_LEER), LEVEL_UP_MOVE(25, MOVE_CLAMP), - //LEVEL_UP_MOVE(28, MOVE_ICE_SHARD), - //LEVEL_UP_MOVE(32, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE(28, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(32, MOVE_RAZOR_SHELL), LEVEL_UP_MOVE(37, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(40, MOVE_WHIRLPOOL), - //LEVEL_UP_MOVE(44, MOVE_BRINE), + LEVEL_UP_MOVE(44, MOVE_BRINE), LEVEL_UP_MOVE(49, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(52, MOVE_ICE_BEAM), - //LEVEL_UP_MOVE(56, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(56, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(61, MOVE_HYDRO_PUMP), LEVEL_UP_END }; static const struct LevelUpMove sCloysterLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH), - //LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(13, MOVE_SPIKE_CANNON), LEVEL_UP_MOVE(28, MOVE_SPIKES), - //LEVEL_UP_MOVE(50, MOVE_ICICLE_CRASH), + LEVEL_UP_MOVE(50, MOVE_ICICLE_CRASH), LEVEL_UP_END }; @@ -1763,19 +1762,19 @@ static const struct LevelUpMove sGastlyLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_CURSE), LEVEL_UP_MOVE(15, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(19, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(26, MOVE_PAYBACK), + LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(26, MOVE_PAYBACK), LEVEL_UP_MOVE(29, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(33, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(36, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(36, MOVE_DARK_PULSE), LEVEL_UP_MOVE(40, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE(43, MOVE_HEX), + LEVEL_UP_MOVE(43, MOVE_HEX), LEVEL_UP_MOVE(47, MOVE_NIGHTMARE), LEVEL_UP_END }; static const struct LevelUpMove sHaunterLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH), + //LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 1, MOVE_LICK), @@ -1785,19 +1784,19 @@ static const struct LevelUpMove sHaunterLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_CURSE), LEVEL_UP_MOVE(15, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(19, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(28, MOVE_PAYBACK), + LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(28, MOVE_PAYBACK), LEVEL_UP_MOVE(33, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(39, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(44, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(44, MOVE_DARK_PULSE), LEVEL_UP_MOVE(50, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE(55, MOVE_HEX), + LEVEL_UP_MOVE(55, MOVE_HEX), LEVEL_UP_MOVE(61, MOVE_NIGHTMARE), LEVEL_UP_END }; static const struct LevelUpMove sGengarLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH), + //LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 1, MOVE_LICK), @@ -1807,13 +1806,13 @@ static const struct LevelUpMove sGengarLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_CURSE), LEVEL_UP_MOVE(15, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(19, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(28, MOVE_PAYBACK), + LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(28, MOVE_PAYBACK), LEVEL_UP_MOVE(33, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(39, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(44, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(44, MOVE_DARK_PULSE), LEVEL_UP_MOVE(50, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE(55, MOVE_HEX), + LEVEL_UP_MOVE(55, MOVE_HEX), LEVEL_UP_MOVE(61, MOVE_NIGHTMARE), LEVEL_UP_END }; @@ -1827,10 +1826,10 @@ static const struct LevelUpMove sOnixLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_ROCK_THROW), LEVEL_UP_MOVE(10, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(13, MOVE_RAGE), - //LEVEL_UP_MOVE(16, MOVE_STEALTH_ROCK), - //LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH), - //LEVEL_UP_MOVE(20, MOVE_GYRO_BALL), - //LEVEL_UP_MOVE(22, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(16, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(20, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(22, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(25, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(28, MOVE_SLAM), LEVEL_UP_MOVE(31, MOVE_SCREECH), @@ -1838,7 +1837,7 @@ static const struct LevelUpMove sOnixLevelUpLearnset[] = { LEVEL_UP_MOVE(37, MOVE_SAND_TOMB), LEVEL_UP_MOVE(40, MOVE_IRON_TAIL), LEVEL_UP_MOVE(43, MOVE_DIG), - //LEVEL_UP_MOVE(46, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(46, MOVE_STONE_EDGE), LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(52, MOVE_SANDSTORM), LEVEL_UP_END @@ -1853,23 +1852,23 @@ static const struct LevelUpMove sDrowzeeLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_POISON_GAS), LEVEL_UP_MOVE(21, MOVE_MEDITATE), LEVEL_UP_MOVE(25, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(37, MOVE_SYNCHRONOISE), - //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(37, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(45, MOVE_SWAGGER), LEVEL_UP_MOVE(49, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(53, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(57, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(53, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(57, MOVE_PSYSHOCK), LEVEL_UP_MOVE(61, MOVE_FUTURE_SIGHT), LEVEL_UP_END }; static const struct LevelUpMove sHypnoLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), LEVEL_UP_MOVE( 1, MOVE_NIGHTMARE), - //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), + LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -1880,14 +1879,14 @@ static const struct LevelUpMove sHypnoLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_POISON_GAS), LEVEL_UP_MOVE(21, MOVE_MEDITATE), LEVEL_UP_MOVE(25, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(37, MOVE_SYNCHRONOISE), - //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(37, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(45, MOVE_SWAGGER), LEVEL_UP_MOVE(49, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(53, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(57, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(53, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(57, MOVE_PSYSHOCK), LEVEL_UP_MOVE(61, MOVE_FUTURE_SIGHT), LEVEL_UP_END }; @@ -1905,14 +1904,14 @@ static const struct LevelUpMove sKrabbyLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_PROTECT), LEVEL_UP_MOVE(31, MOVE_GUILLOTINE), LEVEL_UP_MOVE(35, MOVE_SLAM), - //LEVEL_UP_MOVE(39, MOVE_BRINE), + LEVEL_UP_MOVE(39, MOVE_BRINE), LEVEL_UP_MOVE(41, MOVE_CRABHAMMER), LEVEL_UP_MOVE(45, MOVE_FLAIL), LEVEL_UP_END }; static const struct LevelUpMove sKinglerLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP), @@ -1927,7 +1926,7 @@ static const struct LevelUpMove sKinglerLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_PROTECT), LEVEL_UP_MOVE(37, MOVE_GUILLOTINE), LEVEL_UP_MOVE(44, MOVE_SLAM), - //LEVEL_UP_MOVE(51, MOVE_BRINE), + LEVEL_UP_MOVE(51, MOVE_BRINE), LEVEL_UP_MOVE(56, MOVE_CRABHAMMER), LEVEL_UP_MOVE(63, MOVE_FLAIL), LEVEL_UP_END @@ -1937,43 +1936,43 @@ static const struct LevelUpMove sVoltorbLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 4, MOVE_SONIC_BOOM), - //LEVEL_UP_MOVE( 6, MOVE_EERIE_IMPULSE), + LEVEL_UP_MOVE( 6, MOVE_EERIE_IMPULSE), LEVEL_UP_MOVE( 9, MOVE_SPARK), LEVEL_UP_MOVE(11, MOVE_ROLLOUT), LEVEL_UP_MOVE(13, MOVE_SCREECH), - //LEVEL_UP_MOVE(16, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(16, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE(20, MOVE_SWIFT), - //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(26, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(29, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(34, MOVE_MAGNET_RISE), - //LEVEL_UP_MOVE(37, MOVE_DISCHARGE), + LEVEL_UP_MOVE(34, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(37, MOVE_DISCHARGE), LEVEL_UP_MOVE(41, MOVE_EXPLOSION), - //LEVEL_UP_MOVE(46, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(46, MOVE_GYRO_BALL), LEVEL_UP_MOVE(48, MOVE_MIRROR_COAT), LEVEL_UP_END }; static const struct LevelUpMove sElectrodeLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), + LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_SONIC_BOOM), - //LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), + LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), LEVEL_UP_MOVE( 4, MOVE_SONIC_BOOM), - //LEVEL_UP_MOVE( 6, MOVE_EERIE_IMPULSE), + LEVEL_UP_MOVE( 6, MOVE_EERIE_IMPULSE), LEVEL_UP_MOVE( 9, MOVE_SPARK), LEVEL_UP_MOVE(11, MOVE_ROLLOUT), LEVEL_UP_MOVE(13, MOVE_SCREECH), - //LEVEL_UP_MOVE(16, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(16, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE(20, MOVE_SWIFT), - //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(26, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(29, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(36, MOVE_MAGNET_RISE), - //LEVEL_UP_MOVE(41, MOVE_DISCHARGE), + LEVEL_UP_MOVE(36, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(41, MOVE_DISCHARGE), LEVEL_UP_MOVE(47, MOVE_EXPLOSION), - //LEVEL_UP_MOVE(54, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(54, MOVE_GYRO_BALL), LEVEL_UP_MOVE(58, MOVE_MIRROR_COAT), LEVEL_UP_END }; @@ -1989,25 +1988,25 @@ static const struct LevelUpMove sExeggcuteLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_POISON_POWDER), LEVEL_UP_MOVE(23, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE(27, MOVE_CONFUSION), - //LEVEL_UP_MOVE(33, MOVE_WORRY_SEED), - //LEVEL_UP_MOVE(37, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(33, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(37, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(43, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE(47, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE(50, MOVE_BESTOW), + LEVEL_UP_MOVE(50, MOVE_BESTOW), LEVEL_UP_END }; static const struct LevelUpMove sExeggutorLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_STOMP), + //LEVEL_UP_MOVE( 0, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_STOMP), - //LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB), + LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB), LEVEL_UP_MOVE( 1, MOVE_BARRAGE), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE(17, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(17, MOVE_PSYSHOCK), LEVEL_UP_MOVE(27, MOVE_EGG_BOMB), - //LEVEL_UP_MOVE(37, MOVE_WOOD_HAMMER), - //LEVEL_UP_MOVE(47, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(37, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(47, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -2022,11 +2021,11 @@ static const struct LevelUpMove sCuboneLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_RAGE), LEVEL_UP_MOVE(27, MOVE_FALSE_SWIPE), LEVEL_UP_MOVE(31, MOVE_THRASH), - //LEVEL_UP_MOVE(33, MOVE_FLING), - //LEVEL_UP_MOVE(37, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(33, MOVE_FLING), + LEVEL_UP_MOVE(37, MOVE_STOMPING_TANTRUM), LEVEL_UP_MOVE(41, MOVE_ENDEAVOR), LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(47, MOVE_RETALIATE), + LEVEL_UP_MOVE(47, MOVE_RETALIATE), LEVEL_UP_MOVE(51, MOVE_BONE_RUSH), LEVEL_UP_END }; @@ -2045,20 +2044,20 @@ static const struct LevelUpMove sMarowakLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_RAGE), LEVEL_UP_MOVE(27, MOVE_FALSE_SWIPE), LEVEL_UP_MOVE(33, MOVE_THRASH), - //LEVEL_UP_MOVE(37, MOVE_FLING), - //LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(37, MOVE_FLING), + LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM), LEVEL_UP_MOVE(49, MOVE_ENDEAVOR), LEVEL_UP_MOVE(53, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(59, MOVE_RETALIATE), + LEVEL_UP_MOVE(59, MOVE_RETALIATE), LEVEL_UP_MOVE(65, MOVE_BONE_RUSH), LEVEL_UP_END }; static const struct LevelUpMove sHitmonleeLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_DOUBLE_KICK), + //LEVEL_UP_MOVE( 0, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_REVERSAL), - //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE( 1, MOVE_MEGA_KICK), LEVEL_UP_MOVE( 1, MOVE_REVENGE), LEVEL_UP_MOVE( 1, MOVE_MEDITATE), @@ -2069,23 +2068,23 @@ static const struct LevelUpMove sHitmonleeLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_JUMP_KICK), LEVEL_UP_MOVE(17, MOVE_BRICK_BREAK), LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(25, MOVE_FEINT), + LEVEL_UP_MOVE(25, MOVE_FEINT), LEVEL_UP_MOVE(29, MOVE_HIGH_JUMP_KICK), LEVEL_UP_MOVE(33, MOVE_MIND_READER), LEVEL_UP_MOVE(37, MOVE_FORESIGHT), - //LEVEL_UP_MOVE(41, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(41, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(45, MOVE_BLAZE_KICK), LEVEL_UP_MOVE(49, MOVE_ENDURE), LEVEL_UP_MOVE(53, MOVE_MEGA_KICK), - //LEVEL_UP_MOVE(57, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(57, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(61, MOVE_REVERSAL), LEVEL_UP_END }; static const struct LevelUpMove sHitmonchanLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_COMET_PUNCH), + //LEVEL_UP_MOVE( 0, MOVE_COMET_PUNCH), LEVEL_UP_MOVE( 1, MOVE_COMET_PUNCH), - //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_FOCUS_PUNCH), LEVEL_UP_MOVE( 1, MOVE_REVENGE), @@ -2095,10 +2094,10 @@ static const struct LevelUpMove sHitmonchanLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_AGILITY), LEVEL_UP_MOVE(11, MOVE_PURSUIT), LEVEL_UP_MOVE(16, MOVE_MACH_PUNCH), - //LEVEL_UP_MOVE(16, MOVE_BULLET_PUNCH), - //LEVEL_UP_MOVE(21, MOVE_FEINT), - //LEVEL_UP_MOVE(26, MOVE_VACUUM_WAVE), - //LEVEL_UP_MOVE(31, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(16, MOVE_BULLET_PUNCH), + LEVEL_UP_MOVE(21, MOVE_FEINT), + LEVEL_UP_MOVE(26, MOVE_VACUUM_WAVE), + LEVEL_UP_MOVE(31, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(36, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE(36, MOVE_ICE_PUNCH), LEVEL_UP_MOVE(36, MOVE_FIRE_PUNCH), @@ -2107,7 +2106,7 @@ static const struct LevelUpMove sHitmonchanLevelUpLearnset[] = { LEVEL_UP_MOVE(50, MOVE_DETECT), LEVEL_UP_MOVE(56, MOVE_FOCUS_PUNCH), LEVEL_UP_MOVE(61, MOVE_COUNTER), - //LEVEL_UP_MOVE(66, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(66, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; @@ -2121,12 +2120,12 @@ static const struct LevelUpMove sLickitungLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_DISABLE), LEVEL_UP_MOVE(29, MOVE_SLAM), LEVEL_UP_MOVE(33, MOVE_ROLLOUT), - //LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY), - //LEVEL_UP_MOVE(41, MOVE_ME_FIRST), + LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(41, MOVE_ME_FIRST), LEVEL_UP_MOVE(45, MOVE_REFRESH), LEVEL_UP_MOVE(49, MOVE_SCREECH), - //LEVEL_UP_MOVE(53, MOVE_POWER_WHIP), - //LEVEL_UP_MOVE(57, MOVE_WRING_OUT), + LEVEL_UP_MOVE(53, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(57, MOVE_WRING_OUT), LEVEL_UP_END }; @@ -2135,39 +2134,39 @@ static const struct LevelUpMove sKoffingLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 4, MOVE_SMOG), LEVEL_UP_MOVE( 7, MOVE_SMOKESCREEN), - //LEVEL_UP_MOVE(12, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(15, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(12, MOVE_ASSURANCE), + LEVEL_UP_MOVE(15, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(18, MOVE_SLUDGE), LEVEL_UP_MOVE(23, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(26, MOVE_HAZE), - //LEVEL_UP_MOVE(29, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(29, MOVE_GYRO_BALL), LEVEL_UP_MOVE(34, MOVE_SLUDGE_BOMB), LEVEL_UP_MOVE(37, MOVE_EXPLOSION), LEVEL_UP_MOVE(40, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE(42, MOVE_BELCH), + LEVEL_UP_MOVE(42, MOVE_BELCH), LEVEL_UP_MOVE(45, MOVE_MEMENTO), LEVEL_UP_END }; static const struct LevelUpMove sWeezingLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), 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( 4, MOVE_SMOG), LEVEL_UP_MOVE( 7, MOVE_SMOKESCREEN), - //LEVEL_UP_MOVE(12, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(15, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(12, MOVE_ASSURANCE), + LEVEL_UP_MOVE(15, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(18, MOVE_SLUDGE), LEVEL_UP_MOVE(23, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(26, MOVE_HAZE), - //LEVEL_UP_MOVE(29, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(29, MOVE_GYRO_BALL), LEVEL_UP_MOVE(34, MOVE_SLUDGE_BOMB), LEVEL_UP_MOVE(40, MOVE_EXPLOSION), LEVEL_UP_MOVE(46, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE(51, MOVE_BELCH), + LEVEL_UP_MOVE(51, MOVE_BELCH), LEVEL_UP_MOVE(57, MOVE_MEMENTO), LEVEL_UP_END }; @@ -2177,14 +2176,14 @@ static const struct LevelUpMove sRhyhornLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 9, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(17, MOVE_STOMP), - //LEVEL_UP_MOVE(21, MOVE_BULLDOZE), - //LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(21, MOVE_BULLDOZE), + LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(29, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(33, MOVE_DRILL_RUN), + LEVEL_UP_MOVE(33, MOVE_DRILL_RUN), LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(41, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(41, MOVE_STONE_EDGE), LEVEL_UP_MOVE(45, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(49, MOVE_MEGAHORN), LEVEL_UP_MOVE(53, MOVE_HORN_DRILL), @@ -2193,7 +2192,7 @@ 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_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_HORN_DRILL), LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -2201,14 +2200,14 @@ static const struct LevelUpMove sRhydonLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 9, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(17, MOVE_STOMP), - //LEVEL_UP_MOVE(21, MOVE_BULLDOZE), - //LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(21, MOVE_BULLDOZE), + LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(29, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(33, MOVE_DRILL_RUN), + LEVEL_UP_MOVE(33, MOVE_DRILL_RUN), LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(41, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(41, MOVE_STONE_EDGE), LEVEL_UP_MOVE(48, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(55, MOVE_MEGAHORN), LEVEL_UP_MOVE(62, MOVE_HORN_DRILL), @@ -2224,15 +2223,15 @@ static const struct LevelUpMove sChanseyLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_REFRESH), LEVEL_UP_MOVE(12, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(16, MOVE_SOFT_BOILED), - //LEVEL_UP_MOVE(20, MOVE_BESTOW), + LEVEL_UP_MOVE(20, MOVE_BESTOW), LEVEL_UP_MOVE(23, MOVE_MINIMIZE), LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(31, MOVE_SING), - //LEVEL_UP_MOVE(35, MOVE_FLING), - //LEVEL_UP_MOVE(39, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(35, MOVE_FLING), + LEVEL_UP_MOVE(39, MOVE_HEAL_PULSE), LEVEL_UP_MOVE(44, MOVE_EGG_BOMB), LEVEL_UP_MOVE(50, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(57, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(57, MOVE_HEALING_WISH), LEVEL_UP_MOVE(65, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; @@ -2249,14 +2248,14 @@ static const struct LevelUpMove sTangelaLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(27, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(30, MOVE_STUN_SPORE), - //LEVEL_UP_MOVE(33, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(33, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(38, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(41, MOVE_SLAM), LEVEL_UP_MOVE(44, MOVE_TICKLE), - //LEVEL_UP_MOVE(46, MOVE_WRING_OUT), - //LEVEL_UP_MOVE(48, MOVE_GRASSY_TERRAIN), - //LEVEL_UP_MOVE(50, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(46, MOVE_WRING_OUT), + LEVEL_UP_MOVE(48, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(50, MOVE_POWER_WHIP), LEVEL_UP_END }; @@ -2266,15 +2265,15 @@ static const struct LevelUpMove sKangaskhanLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_FAKE_OUT), LEVEL_UP_MOVE(10, MOVE_TAIL_WHIP), LEVEL_UP_MOVE(13, MOVE_BITE), - //LEVEL_UP_MOVE(19, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(19, MOVE_DOUBLE_HIT), LEVEL_UP_MOVE(22, MOVE_RAGE), LEVEL_UP_MOVE(25, MOVE_MEGA_PUNCH), - //LEVEL_UP_MOVE(31, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(31, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(34, MOVE_DIZZY_PUNCH), LEVEL_UP_MOVE(37, MOVE_CRUNCH), LEVEL_UP_MOVE(43, MOVE_ENDURE), LEVEL_UP_MOVE(46, MOVE_OUTRAGE), - //LEVEL_UP_MOVE(49, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(49, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(50, MOVE_REVERSAL), LEVEL_UP_END }; @@ -2287,9 +2286,9 @@ static const struct LevelUpMove sHorseaLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_TWISTER), LEVEL_UP_MOVE(21, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(26, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(31, MOVE_BRINE), + LEVEL_UP_MOVE(31, MOVE_BRINE), LEVEL_UP_MOVE(36, MOVE_AGILITY), - //LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(46, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(52, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -2307,9 +2306,9 @@ static const struct LevelUpMove sSeadraLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_TWISTER), LEVEL_UP_MOVE(21, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(26, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(31, MOVE_BRINE), + LEVEL_UP_MOVE(31, MOVE_BRINE), LEVEL_UP_MOVE(38, MOVE_AGILITY), - //LEVEL_UP_MOVE(45, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(45, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(52, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(60, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -2323,19 +2322,19 @@ static const struct LevelUpMove sGoldeenLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_HORN_ATTACK), LEVEL_UP_MOVE(13, MOVE_FLAIL), LEVEL_UP_MOVE(16, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(21, MOVE_AQUA_RING), + LEVEL_UP_MOVE(21, MOVE_AQUA_RING), LEVEL_UP_MOVE(24, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(29, MOVE_AGILITY), LEVEL_UP_MOVE(32, MOVE_WATERFALL), LEVEL_UP_MOVE(37, MOVE_HORN_DRILL), - //LEVEL_UP_MOVE(40, MOVE_SOAK), + LEVEL_UP_MOVE(40, MOVE_SOAK), LEVEL_UP_MOVE(45, MOVE_MEGAHORN), LEVEL_UP_END }; static const struct LevelUpMove sSeakingLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MEGAHORN), - //LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), + LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), @@ -2344,12 +2343,12 @@ static const struct LevelUpMove sSeakingLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_HORN_ATTACK), LEVEL_UP_MOVE(13, MOVE_FLAIL), LEVEL_UP_MOVE(16, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(21, MOVE_AQUA_RING), + LEVEL_UP_MOVE(21, MOVE_AQUA_RING), LEVEL_UP_MOVE(24, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(29, MOVE_AGILITY), LEVEL_UP_MOVE(32, MOVE_WATERFALL), LEVEL_UP_MOVE(40, MOVE_HORN_DRILL), - //LEVEL_UP_MOVE(46, MOVE_SOAK), + LEVEL_UP_MOVE(46, MOVE_SOAK), LEVEL_UP_MOVE(54, MOVE_MEGAHORN), LEVEL_UP_END }; @@ -2364,11 +2363,11 @@ static const struct LevelUpMove sStaryuLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_SWIFT), LEVEL_UP_MOVE(18, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(22, MOVE_CAMOUFLAGE), - //LEVEL_UP_MOVE(24, MOVE_GYRO_BALL), - //LEVEL_UP_MOVE(28, MOVE_BRINE), + LEVEL_UP_MOVE(24, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(28, MOVE_BRINE), LEVEL_UP_MOVE(31, MOVE_MINIMIZE), - //LEVEL_UP_MOVE(35, MOVE_REFLECT_TYPE), - //LEVEL_UP_MOVE(37, MOVE_POWER_GEM), + LEVEL_UP_MOVE(35, MOVE_REFLECT_TYPE), + LEVEL_UP_MOVE(37, MOVE_POWER_GEM), LEVEL_UP_MOVE(40, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(42, MOVE_PSYCHIC), LEVEL_UP_MOVE(46, MOVE_LIGHT_SCREEN), @@ -2379,7 +2378,7 @@ static const struct LevelUpMove sStaryuLevelUpLearnset[] = { static const struct LevelUpMove sStarmieLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT), + LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 1, MOVE_RECOVER), @@ -2389,16 +2388,16 @@ static const struct LevelUpMove sStarmieLevelUpLearnset[] = { }; static const struct LevelUpMove sMrMimeLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP), - //LEVEL_UP_MOVE( 1, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP), + LEVEL_UP_MOVE( 1, MOVE_GUARD_SWAP), LEVEL_UP_MOVE( 1, MOVE_BARRIER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE( 4, MOVE_COPYCAT), + LEVEL_UP_MOVE( 4, MOVE_COPYCAT), LEVEL_UP_MOVE( 8, MOVE_MEDITATE), LEVEL_UP_MOVE(11, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(15, MOVE_MIMIC), @@ -2418,7 +2417,7 @@ static const struct LevelUpMove sMrMimeLevelUpLearnset[] = { }; static const struct LevelUpMove sScytherLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_VACUUM_WAVE), + LEVEL_UP_MOVE( 1, MOVE_VACUUM_WAVE), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_FOCUS_ENERGY), @@ -2430,17 +2429,17 @@ static const struct LevelUpMove sScytherLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_SLASH), LEVEL_UP_MOVE(33, MOVE_RAZOR_WIND), LEVEL_UP_MOVE(37, MOVE_DOUBLE_TEAM), - //LEVEL_UP_MOVE(41, MOVE_X_SCISSOR), - //LEVEL_UP_MOVE(45, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(49, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE(50, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(41, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(45, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(49, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(50, MOVE_AIR_SLASH), LEVEL_UP_MOVE(57, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(61, MOVE_FEINT), + LEVEL_UP_MOVE(61, MOVE_FEINT), LEVEL_UP_END }; static const struct LevelUpMove sJynxLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE( 1, MOVE_DRAINING_KISS), LEVEL_UP_MOVE( 1, MOVE_PERISH_SONG), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_LICK), @@ -2451,13 +2450,13 @@ static const struct LevelUpMove sJynxLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(15, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(18, MOVE_ICE_PUNCH), - //LEVEL_UP_MOVE(21, MOVE_HEART_STAMP), + LEVEL_UP_MOVE(21, MOVE_HEART_STAMP), LEVEL_UP_MOVE(25, MOVE_MEAN_LOOK), LEVEL_UP_MOVE(28, MOVE_FAKE_TEARS), - //LEVEL_UP_MOVE(33, MOVE_WAKE_UP_SLAP), - //LEVEL_UP_MOVE(39, MOVE_AVALANCHE), + LEVEL_UP_MOVE(33, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(39, MOVE_AVALANCHE), LEVEL_UP_MOVE(44, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(49, MOVE_WRING_OUT), + LEVEL_UP_MOVE(49, MOVE_WRING_OUT), LEVEL_UP_MOVE(55, MOVE_PERISH_SONG), LEVEL_UP_MOVE(60, MOVE_BLIZZARD), LEVEL_UP_END @@ -2472,10 +2471,10 @@ static const struct LevelUpMove sElectabuzzLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_SWIFT), LEVEL_UP_MOVE(15, MOVE_SHOCK_WAVE), LEVEL_UP_MOVE(19, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(26, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(29, MOVE_THUNDER_PUNCH), - //LEVEL_UP_MOVE(36, MOVE_DISCHARGE), + LEVEL_UP_MOVE(36, MOVE_DISCHARGE), LEVEL_UP_MOVE(42, MOVE_SCREECH), LEVEL_UP_MOVE(49, MOVE_THUNDERBOLT), LEVEL_UP_MOVE(55, MOVE_THUNDER), @@ -2490,11 +2489,11 @@ static const struct LevelUpMove sMagmarLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(12, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(15, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG), - //LEVEL_UP_MOVE(22, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(22, MOVE_FLAME_BURST), LEVEL_UP_MOVE(26, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(29, MOVE_FIRE_PUNCH), - //LEVEL_UP_MOVE(36, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(36, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(42, MOVE_SUNNY_DAY), LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(55, MOVE_FIRE_BLAST), @@ -2509,11 +2508,11 @@ static const struct LevelUpMove sPinsirLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_HARDEN), LEVEL_UP_MOVE(15, MOVE_REVENGE), LEVEL_UP_MOVE(18, MOVE_VITAL_THROW), - //LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT), LEVEL_UP_MOVE(26, MOVE_BRICK_BREAK), - //LEVEL_UP_MOVE(29, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(29, MOVE_X_SCISSOR), LEVEL_UP_MOVE(33, MOVE_SUBMISSION), - //LEVEL_UP_MOVE(36, MOVE_STORM_THROW), + LEVEL_UP_MOVE(36, MOVE_STORM_THROW), LEVEL_UP_MOVE(40, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(43, MOVE_THRASH), LEVEL_UP_MOVE(47, MOVE_SUPERPOWER), @@ -2529,14 +2528,14 @@ static const struct LevelUpMove sTaurosLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_SCARY_FACE), LEVEL_UP_MOVE(15, MOVE_PURSUIT), LEVEL_UP_MOVE(19, MOVE_REST), - //LEVEL_UP_MOVE(24, MOVE_PAYBACK), - //LEVEL_UP_MOVE(29, MOVE_WORK_UP), + LEVEL_UP_MOVE(24, MOVE_PAYBACK), + LEVEL_UP_MOVE(29, MOVE_WORK_UP), LEVEL_UP_MOVE(35, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(48, MOVE_SWAGGER), LEVEL_UP_MOVE(55, MOVE_THRASH), LEVEL_UP_MOVE(63, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(71, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(71, MOVE_GIGA_IMPACT), LEVEL_UP_END }; @@ -2548,19 +2547,19 @@ static const struct LevelUpMove sMagikarpLevelUpLearnset[] = { }; static const struct LevelUpMove sGyaradosLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_BITE), + //LEVEL_UP_MOVE( 0, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_THRASH), LEVEL_UP_MOVE(21, MOVE_LEER), LEVEL_UP_MOVE(24, MOVE_TWISTER), - //LEVEL_UP_MOVE(27, MOVE_ICE_FANG), - //LEVEL_UP_MOVE(30, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(27, MOVE_ICE_FANG), + LEVEL_UP_MOVE(30, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(33, MOVE_SCARY_FACE), LEVEL_UP_MOVE(36, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE(39, MOVE_CRUNCH), LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(45, MOVE_DRAGON_DANCE), - //LEVEL_UP_MOVE(48, MOVE_HURRICANE), + LEVEL_UP_MOVE(48, MOVE_HURRICANE), LEVEL_UP_MOVE(51, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(54, MOVE_HYPER_BEAM), LEVEL_UP_END @@ -2572,13 +2571,13 @@ static const struct LevelUpMove sLaprasLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 4, MOVE_MIST), LEVEL_UP_MOVE( 7, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE(10, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(10, MOVE_ICE_SHARD), LEVEL_UP_MOVE(14, MOVE_WATER_PULSE), LEVEL_UP_MOVE(18, MOVE_BODY_SLAM), LEVEL_UP_MOVE(22, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(27, MOVE_PERISH_SONG), LEVEL_UP_MOVE(32, MOVE_ICE_BEAM), - //LEVEL_UP_MOVE(37, MOVE_BRINE), + LEVEL_UP_MOVE(37, MOVE_BRINE), LEVEL_UP_MOVE(43, MOVE_SAFEGUARD), LEVEL_UP_MOVE(47, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(50, MOVE_SHEER_COLD), @@ -2597,7 +2596,7 @@ static const struct LevelUpMove sEeveeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(17, MOVE_BITE), LEVEL_UP_MOVE(17, MOVE_SWIFT), @@ -2606,68 +2605,68 @@ static const struct LevelUpMove sEeveeLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_CHARM), LEVEL_UP_MOVE(33, MOVE_BATON_PASS), LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(45, MOVE_TRUMP_CARD), + LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(45, MOVE_TRUMP_CARD), LEVEL_UP_END }; static const struct LevelUpMove sVaporeonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_WATER_GUN), + //LEVEL_UP_MOVE( 0, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(17, MOVE_WATER_PULSE), LEVEL_UP_MOVE(20, MOVE_AURORA_BEAM), - //LEVEL_UP_MOVE(25, MOVE_AQUA_RING), + LEVEL_UP_MOVE(25, MOVE_AQUA_RING), LEVEL_UP_MOVE(29, MOVE_ACID_ARMOR), LEVEL_UP_MOVE(33, MOVE_HAZE), LEVEL_UP_MOVE(37, MOVE_MUDDY_WATER), - //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP), LEVEL_UP_END }; static const struct LevelUpMove sJolteonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_THUNDER_SHOCK), + //LEVEL_UP_MOVE( 0, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(17, MOVE_DOUBLE_KICK), - //LEVEL_UP_MOVE(20, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE(20, MOVE_THUNDER_FANG), LEVEL_UP_MOVE(25, MOVE_PIN_MISSILE), LEVEL_UP_MOVE(29, MOVE_AGILITY), LEVEL_UP_MOVE(33, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE(37, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(37, MOVE_DISCHARGE), + LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), LEVEL_UP_MOVE(45, MOVE_THUNDER), LEVEL_UP_END }; static const struct LevelUpMove sFlareonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_EMBER), + //LEVEL_UP_MOVE( 0, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(17, MOVE_BITE), - //LEVEL_UP_MOVE(20, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(20, MOVE_FIRE_FANG), LEVEL_UP_MOVE(25, MOVE_FIRE_SPIN), LEVEL_UP_MOVE(29, MOVE_SCARY_FACE), LEVEL_UP_MOVE(33, MOVE_SMOG), - //LEVEL_UP_MOVE(37, MOVE_LAVA_PLUME), - //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(45, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(37, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(45, MOVE_FLARE_BLITZ), LEVEL_UP_END }; @@ -2679,10 +2678,10 @@ static const struct LevelUpMove sPorygonLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_PSYBEAM), LEVEL_UP_MOVE(12, MOVE_AGILITY), LEVEL_UP_MOVE(18, MOVE_RECOVER), - //LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE), LEVEL_UP_MOVE(29, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(34, MOVE_RECYCLE), - //LEVEL_UP_MOVE(40, MOVE_DISCHARGE), + LEVEL_UP_MOVE(40, MOVE_DISCHARGE), LEVEL_UP_MOVE(45, MOVE_LOCK_ON), LEVEL_UP_MOVE(50, MOVE_TRI_ATTACK), LEVEL_UP_MOVE(56, MOVE_MAGIC_COAT), @@ -2698,18 +2697,18 @@ static const struct LevelUpMove sOmanyteLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_ROLLOUT), LEVEL_UP_MOVE(19, MOVE_LEER), LEVEL_UP_MOVE(25, MOVE_MUD_SHOT), - //LEVEL_UP_MOVE(28, MOVE_BRINE), + LEVEL_UP_MOVE(28, MOVE_BRINE), LEVEL_UP_MOVE(34, MOVE_PROTECT), LEVEL_UP_MOVE(37, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(43, MOVE_TICKLE), LEVEL_UP_MOVE(46, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(50, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(50, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(55, MOVE_HYDRO_PUMP), LEVEL_UP_END }; static const struct LevelUpMove sOmastarLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SPIKE_CANNON), + //LEVEL_UP_MOVE( 0, MOVE_SPIKE_CANNON), LEVEL_UP_MOVE( 1, MOVE_SPIKE_CANNON), LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), @@ -2720,12 +2719,12 @@ static const struct LevelUpMove sOmastarLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_ROLLOUT), LEVEL_UP_MOVE(19, MOVE_LEER), LEVEL_UP_MOVE(25, MOVE_MUD_SHOT), - //LEVEL_UP_MOVE(28, MOVE_BRINE), + LEVEL_UP_MOVE(28, MOVE_BRINE), LEVEL_UP_MOVE(34, MOVE_PROTECT), LEVEL_UP_MOVE(37, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(48, MOVE_TICKLE), LEVEL_UP_MOVE(56, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(67, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(67, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(75, MOVE_HYDRO_PUMP), LEVEL_UP_END }; @@ -2738,19 +2737,19 @@ static const struct LevelUpMove sKabutoLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_MUD_SHOT), LEVEL_UP_MOVE(21, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(26, MOVE_ENDURE), - //LEVEL_UP_MOVE(31, MOVE_AQUA_JET), + LEVEL_UP_MOVE(31, MOVE_AQUA_JET), LEVEL_UP_MOVE(36, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(41, MOVE_METAL_SOUND), LEVEL_UP_MOVE(46, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(50, MOVE_WRING_OUT), + LEVEL_UP_MOVE(50, MOVE_WRING_OUT), LEVEL_UP_END }; static const struct LevelUpMove sKabutopsLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SLASH), + //LEVEL_UP_MOVE( 0, MOVE_SLASH), LEVEL_UP_MOVE( 1, MOVE_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_FEINT), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_ABSORB), @@ -2760,20 +2759,20 @@ static const struct LevelUpMove sKabutopsLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_MUD_SHOT), LEVEL_UP_MOVE(21, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(26, MOVE_ENDURE), - //LEVEL_UP_MOVE(31, MOVE_AQUA_JET), + LEVEL_UP_MOVE(31, MOVE_AQUA_JET), LEVEL_UP_MOVE(36, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(45, MOVE_METAL_SOUND), LEVEL_UP_MOVE(54, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(63, MOVE_WRING_OUT), - //LEVEL_UP_MOVE(72, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(63, MOVE_WRING_OUT), + LEVEL_UP_MOVE(72, MOVE_NIGHT_SLASH), LEVEL_UP_END }; static const struct LevelUpMove sAerodactylLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), - //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_IRON_HEAD), + 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_WING_ATTACK), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -2783,11 +2782,11 @@ static const struct LevelUpMove sAerodactylLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(33, MOVE_CRUNCH), LEVEL_UP_MOVE(41, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(49, MOVE_SKY_DROP), - //LEVEL_UP_MOVE(57, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(49, MOVE_SKY_DROP), + LEVEL_UP_MOVE(57, MOVE_IRON_HEAD), LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM), LEVEL_UP_MOVE(73, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(81, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(81, MOVE_GIGA_IMPACT), LEVEL_UP_END }; @@ -2796,19 +2795,19 @@ static const struct LevelUpMove sSnorlaxLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 9, MOVE_AMNESIA), LEVEL_UP_MOVE(12, MOVE_LICK), - //LEVEL_UP_MOVE(17, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(17, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(20, MOVE_YAWN), LEVEL_UP_MOVE(25, MOVE_BODY_SLAM), LEVEL_UP_MOVE(28, MOVE_REST), LEVEL_UP_MOVE(28, MOVE_SNORE), LEVEL_UP_MOVE(33, MOVE_SLEEP_TALK), - //LEVEL_UP_MOVE(35, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(35, MOVE_GIGA_IMPACT), LEVEL_UP_MOVE(36, MOVE_ROLLOUT), LEVEL_UP_MOVE(41, MOVE_BLOCK), LEVEL_UP_MOVE(44, MOVE_BELLY_DRUM), LEVEL_UP_MOVE(49, MOVE_CRUNCH), - //LEVEL_UP_MOVE(50, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE(57, MOVE_HIGH_HORSEPOWER), + LEVEL_UP_MOVE(50, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(57, MOVE_HIGH_HORSEPOWER), LEVEL_UP_END }; @@ -2816,18 +2815,18 @@ static const struct LevelUpMove sArticunoLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 8, MOVE_MIST), - //LEVEL_UP_MOVE(15, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(15, MOVE_ICE_SHARD), LEVEL_UP_MOVE(22, MOVE_MIND_READER), LEVEL_UP_MOVE(29, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(36, MOVE_AGILITY), - //LEVEL_UP_MOVE(43, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE(43, MOVE_FREEZE_DRY), LEVEL_UP_MOVE(50, MOVE_REFLECT), LEVEL_UP_MOVE(57, MOVE_HAIL), - //LEVEL_UP_MOVE(64, MOVE_TAILWIND), + LEVEL_UP_MOVE(64, MOVE_TAILWIND), LEVEL_UP_MOVE(71, MOVE_ICE_BEAM), LEVEL_UP_MOVE(78, MOVE_BLIZZARD), - //LEVEL_UP_MOVE(85, MOVE_ROOST), - //LEVEL_UP_MOVE(92, MOVE_HURRICANE), + LEVEL_UP_MOVE(85, MOVE_ROOST), + LEVEL_UP_MOVE(92, MOVE_HURRICANE), LEVEL_UP_MOVE(99, MOVE_SHEER_COLD), LEVEL_UP_END }; @@ -2837,17 +2836,17 @@ static const struct LevelUpMove sZapdosLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 8, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE(15, MOVE_DETECT), - //LEVEL_UP_MOVE(22, MOVE_PLUCK), + LEVEL_UP_MOVE(22, MOVE_PLUCK), LEVEL_UP_MOVE(29, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(36, MOVE_CHARGE), LEVEL_UP_MOVE(43, MOVE_AGILITY), - //LEVEL_UP_MOVE(50, MOVE_DISCHARGE), + LEVEL_UP_MOVE(50, MOVE_DISCHARGE), LEVEL_UP_MOVE(57, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(64, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(71, MOVE_DRILL_PECK), LEVEL_UP_MOVE(78, MOVE_THUNDER), - //LEVEL_UP_MOVE(85, MOVE_ROOST), - //LEVEL_UP_MOVE(92, MOVE_MAGNETIC_FLUX), + LEVEL_UP_MOVE(85, MOVE_ROOST), + LEVEL_UP_MOVE(92, MOVE_MAGNETIC_FLUX), LEVEL_UP_MOVE(99, MOVE_ZAP_CANNON), LEVEL_UP_END }; @@ -2861,14 +2860,14 @@ static const struct LevelUpMove sMoltresLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(43, MOVE_SAFEGUARD), - //LEVEL_UP_MOVE(50, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(50, MOVE_AIR_SLASH), LEVEL_UP_MOVE(57, MOVE_SUNNY_DAY), LEVEL_UP_MOVE(64, MOVE_HEAT_WAVE), LEVEL_UP_MOVE(71, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE(78, MOVE_SKY_ATTACK), - //LEVEL_UP_MOVE(85, MOVE_ROOST), - //LEVEL_UP_MOVE(92, MOVE_HURRICANE), - //LEVEL_UP_MOVE(99, MOVE_BURN_UP), + LEVEL_UP_MOVE(85, MOVE_ROOST), + LEVEL_UP_MOVE(92, MOVE_HURRICANE), + LEVEL_UP_MOVE(99, MOVE_BURN_UP), LEVEL_UP_END }; @@ -2880,9 +2879,9 @@ static const struct LevelUpMove sDratiniLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE(21, MOVE_SLAM), LEVEL_UP_MOVE(25, MOVE_AGILITY), - //LEVEL_UP_MOVE(31, MOVE_DRAGON_TAIL), - //LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(41, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(31, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(41, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE(45, MOVE_SAFEGUARD), LEVEL_UP_MOVE(51, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(55, MOVE_OUTRAGE), @@ -2900,9 +2899,9 @@ static const struct LevelUpMove sDragonairLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE(21, MOVE_SLAM), LEVEL_UP_MOVE(25, MOVE_AGILITY), - //LEVEL_UP_MOVE(33, MOVE_DRAGON_TAIL), - //LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(33, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE(53, MOVE_SAFEGUARD), LEVEL_UP_MOVE(61, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(67, MOVE_OUTRAGE), @@ -2911,12 +2910,12 @@ static const struct LevelUpMove sDragonairLevelUpLearnset[] = { }; static const struct LevelUpMove sDragoniteLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK), + //LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK), LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_HURRICANE), + LEVEL_UP_MOVE( 1, MOVE_HURRICANE), LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), - //LEVEL_UP_MOVE( 1, MOVE_ROOST), + LEVEL_UP_MOVE( 1, MOVE_ROOST), LEVEL_UP_MOVE( 1, MOVE_WRAP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), @@ -2926,19 +2925,19 @@ static const struct LevelUpMove sDragoniteLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE(21, MOVE_SLAM), LEVEL_UP_MOVE(25, MOVE_AGILITY), - //LEVEL_UP_MOVE(33, MOVE_DRAGON_TAIL), - //LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(33, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE(53, MOVE_SAFEGUARD), LEVEL_UP_MOVE(61, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(67, MOVE_OUTRAGE), LEVEL_UP_MOVE(75, MOVE_HYPER_BEAM), - //LEVEL_UP_MOVE(81, MOVE_HURRICANE), + LEVEL_UP_MOVE(81, MOVE_HURRICANE), LEVEL_UP_END }; static const struct LevelUpMove sMewtwoLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS), LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -2946,24 +2945,24 @@ static const struct LevelUpMove sMewtwoLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_SWIFT), LEVEL_UP_MOVE(15, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(22, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE), - //LEVEL_UP_MOVE(36, MOVE_PSYCHO_CUT), - //LEVEL_UP_MOVE(43, MOVE_POWER_SWAP), - //LEVEL_UP_MOVE(43, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE(36, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(43, MOVE_POWER_SWAP), + LEVEL_UP_MOVE(43, MOVE_GUARD_SWAP), LEVEL_UP_MOVE(50, MOVE_RECOVER), LEVEL_UP_MOVE(57, MOVE_PSYCHIC), LEVEL_UP_MOVE(64, MOVE_BARRIER), - //LEVEL_UP_MOVE(70, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE(70, MOVE_AURA_SPHERE), LEVEL_UP_MOVE(79, MOVE_AMNESIA), LEVEL_UP_MOVE(86, MOVE_MIST), - //LEVEL_UP_MOVE(93, MOVE_ME_FIRST), - //LEVEL_UP_MOVE(100, MOVE_PSYSTRIKE), + LEVEL_UP_MOVE(93, MOVE_ME_FIRST), + LEVEL_UP_MOVE(100, MOVE_PSYSTRIKE), LEVEL_UP_END }; static const struct LevelUpMove sMewLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), - //LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE), + LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE), LEVEL_UP_MOVE( 1, MOVE_TRANSFORM), LEVEL_UP_MOVE(10, MOVE_MEGA_PUNCH), LEVEL_UP_MOVE(20, MOVE_METRONOME), @@ -2971,10 +2970,10 @@ static const struct LevelUpMove sMewLevelUpLearnset[] = { LEVEL_UP_MOVE(40, MOVE_BARRIER), LEVEL_UP_MOVE(50, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(60, MOVE_AMNESIA), - //LEVEL_UP_MOVE(70, MOVE_ME_FIRST), + LEVEL_UP_MOVE(70, MOVE_ME_FIRST), LEVEL_UP_MOVE(80, MOVE_BATON_PASS), - //LEVEL_UP_MOVE(90, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(100, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE(90, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(100, MOVE_AURA_SPHERE), LEVEL_UP_END }; @@ -2986,7 +2985,7 @@ 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_NATURAL_GIFT), + LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(28, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(34, MOVE_BODY_SLAM), @@ -3006,7 +3005,7 @@ static const struct LevelUpMove sBayleefLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_SYNTHESIS), LEVEL_UP_MOVE(18, MOVE_REFLECT), LEVEL_UP_MOVE(22, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE(26, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(26, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(32, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(36, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(40, MOVE_BODY_SLAM), @@ -3017,9 +3016,9 @@ static const struct LevelUpMove sBayleefLevelUpLearnset[] = { }; static const struct LevelUpMove sMeganiumLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE), + //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_PETAL_BLIZZARD), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), @@ -3029,14 +3028,14 @@ static const struct LevelUpMove sMeganiumLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_SYNTHESIS), LEVEL_UP_MOVE(18, MOVE_REFLECT), LEVEL_UP_MOVE(22, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE(26, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(26, MOVE_NATURAL_GIFT), 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(70, MOVE_PETAL_BLIZZARD), LEVEL_UP_END }; @@ -3048,14 +3047,14 @@ static const struct LevelUpMove sCyndaquilLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(19, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(22, MOVE_DEFENSE_CURL), - //LEVEL_UP_MOVE(28, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(28, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(31, MOVE_SWIFT), - //LEVEL_UP_MOVE(37, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(37, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(40, MOVE_FLAMETHROWER), - //LEVEL_UP_MOVE(46, MOVE_INFERNO), + LEVEL_UP_MOVE(46, MOVE_INFERNO), LEVEL_UP_MOVE(49, MOVE_ROLLOUT), LEVEL_UP_MOVE(55, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(58, MOVE_BURN_UP), + LEVEL_UP_MOVE(58, MOVE_BURN_UP), LEVEL_UP_MOVE(64, MOVE_ERUPTION), LEVEL_UP_END }; @@ -3070,13 +3069,13 @@ static const struct LevelUpMove sQuilavaLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(24, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE(31, MOVE_SWIFT), - //LEVEL_UP_MOVE(35, MOVE_FLAME_CHARGE), - //LEVEL_UP_MOVE(42, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(35, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(42, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(46, MOVE_FLAMETHROWER), - //LEVEL_UP_MOVE(53, MOVE_INFERNO), + LEVEL_UP_MOVE(53, MOVE_INFERNO), LEVEL_UP_MOVE(57, MOVE_ROLLOUT), LEVEL_UP_MOVE(64, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(68, MOVE_BURN_UP), + LEVEL_UP_MOVE(68, MOVE_BURN_UP), LEVEL_UP_MOVE(75, MOVE_ERUPTION), LEVEL_UP_END }; @@ -3084,7 +3083,7 @@ static const struct LevelUpMove sQuilavaLevelUpLearnset[] = { static const struct LevelUpMove sTyphlosionLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ERUPTION), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE( 1, MOVE_GYRO_BALL), + LEVEL_UP_MOVE( 1, MOVE_GYRO_BALL), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), @@ -3095,13 +3094,13 @@ static const struct LevelUpMove sTyphlosionLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(24, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE(31, MOVE_SWIFT), - //LEVEL_UP_MOVE(35, MOVE_FLAME_CHARGE), - //LEVEL_UP_MOVE(43, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(35, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(43, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(48, MOVE_FLAMETHROWER), - //LEVEL_UP_MOVE(56, MOVE_INFERNO), + LEVEL_UP_MOVE(56, MOVE_INFERNO), LEVEL_UP_MOVE(61, MOVE_ROLLOUT), LEVEL_UP_MOVE(69, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(74, MOVE_BURN_UP), + LEVEL_UP_MOVE(74, MOVE_BURN_UP), LEVEL_UP_MOVE(82, MOVE_ERUPTION), LEVEL_UP_END }; @@ -3113,14 +3112,14 @@ static const struct LevelUpMove sTotodileLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_RAGE), LEVEL_UP_MOVE(13, MOVE_BITE), LEVEL_UP_MOVE(15, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(20, MOVE_ICE_FANG), + LEVEL_UP_MOVE(20, MOVE_ICE_FANG), LEVEL_UP_MOVE(22, MOVE_FLAIL), LEVEL_UP_MOVE(27, MOVE_CRUNCH), - //LEVEL_UP_MOVE(29, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(29, MOVE_CHIP_AWAY), 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(43, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(48, MOVE_SUPERPOWER), LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -3134,14 +3133,14 @@ static const struct LevelUpMove sCroconawLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_RAGE), LEVEL_UP_MOVE(13, MOVE_BITE), LEVEL_UP_MOVE(15, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(21, MOVE_ICE_FANG), + LEVEL_UP_MOVE(21, MOVE_ICE_FANG), LEVEL_UP_MOVE(24, MOVE_FLAIL), LEVEL_UP_MOVE(30, MOVE_CRUNCH), - //LEVEL_UP_MOVE(33, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(33, MOVE_CHIP_AWAY), 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(51, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(57, MOVE_SUPERPOWER), LEVEL_UP_MOVE(60, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -3157,14 +3156,14 @@ static const struct LevelUpMove sFeraligatrLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_RAGE), LEVEL_UP_MOVE(13, MOVE_BITE), LEVEL_UP_MOVE(15, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(21, MOVE_ICE_FANG), + LEVEL_UP_MOVE(21, MOVE_ICE_FANG), LEVEL_UP_MOVE(24, MOVE_FLAIL), LEVEL_UP_MOVE(32, MOVE_CRUNCH), - //LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY), 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(63, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(71, MOVE_SUPERPOWER), LEVEL_UP_MOVE(76, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -3180,18 +3179,18 @@ static const struct LevelUpMove sSentretLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_FOLLOW_ME), LEVEL_UP_MOVE(25, MOVE_SLAM), LEVEL_UP_MOVE(28, MOVE_REST), - //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), + 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_ME_FIRST), + LEVEL_UP_MOVE(42, MOVE_ME_FIRST), LEVEL_UP_MOVE(47, MOVE_HYPER_VOICE), LEVEL_UP_END }; static const struct LevelUpMove sFurretLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_AGILITY), + //LEVEL_UP_MOVE( 0, MOVE_AGILITY), LEVEL_UP_MOVE( 1, MOVE_AGILITY), - //LEVEL_UP_MOVE( 1, MOVE_COIL), + LEVEL_UP_MOVE( 1, MOVE_COIL), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_FORESIGHT), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), @@ -3203,10 +3202,10 @@ static const struct LevelUpMove sFurretLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_FOLLOW_ME), LEVEL_UP_MOVE(28, MOVE_SLAM), LEVEL_UP_MOVE(32, MOVE_REST), - //LEVEL_UP_MOVE(36, MOVE_SUCKER_PUNCH), + 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_ME_FIRST), + LEVEL_UP_MOVE(50, MOVE_ME_FIRST), LEVEL_UP_MOVE(56, MOVE_HYPER_VOICE), LEVEL_UP_END }; @@ -3218,17 +3217,17 @@ static const struct LevelUpMove sHoothootLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 7, MOVE_PECK), LEVEL_UP_MOVE(10, MOVE_CONFUSION), - //LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE), - //LEVEL_UP_MOVE(16, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(19, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(16, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(19, MOVE_PSYCHO_SHIFT), LEVEL_UP_MOVE(22, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(28, MOVE_REFLECT), - //LEVEL_UP_MOVE(31, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(31, MOVE_AIR_SLASH), LEVEL_UP_MOVE(34, MOVE_UPROAR), - //LEVEL_UP_MOVE(37, MOVE_ROOST), - //LEVEL_UP_MOVE(40, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(43, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(37, MOVE_ROOST), + LEVEL_UP_MOVE(40, MOVE_MOONBLAST), + LEVEL_UP_MOVE(43, MOVE_SYNCHRONOISE), LEVEL_UP_MOVE(46, MOVE_DREAM_EATER), LEVEL_UP_END }; @@ -3243,17 +3242,17 @@ static const struct LevelUpMove sNoctowlLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 7, MOVE_PECK), LEVEL_UP_MOVE(10, MOVE_CONFUSION), - //LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE), - //LEVEL_UP_MOVE(16, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(19, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(16, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(19, MOVE_PSYCHO_SHIFT), LEVEL_UP_MOVE(23, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(31, MOVE_REFLECT), - //LEVEL_UP_MOVE(35, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(35, MOVE_AIR_SLASH), LEVEL_UP_MOVE(39, MOVE_UPROAR), - //LEVEL_UP_MOVE(43, MOVE_ROOST), - //LEVEL_UP_MOVE(47, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(51, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(43, MOVE_ROOST), + LEVEL_UP_MOVE(47, MOVE_MOONBLAST), + LEVEL_UP_MOVE(51, MOVE_SYNCHRONOISE), LEVEL_UP_MOVE(55, MOVE_DREAM_EATER), LEVEL_UP_END }; @@ -3270,8 +3269,8 @@ static const struct LevelUpMove sLedybaLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_COMET_PUNCH), LEVEL_UP_MOVE(26, MOVE_BATON_PASS), LEVEL_UP_MOVE(29, MOVE_AGILITY), - //LEVEL_UP_MOVE(33, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE(36, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(33, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(36, MOVE_AIR_SLASH), LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; @@ -3290,8 +3289,8 @@ static const struct LevelUpMove sLedianLevelUpLearnset[] = { LEVEL_UP_MOVE(24, MOVE_COMET_PUNCH), LEVEL_UP_MOVE(29, MOVE_BATON_PASS), LEVEL_UP_MOVE(33, MOVE_AGILITY), - //LEVEL_UP_MOVE(38, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE(42, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(38, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(42, MOVE_AIR_SLASH), LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; @@ -3301,55 +3300,55 @@ static const struct LevelUpMove sSpinarakLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), LEVEL_UP_MOVE( 5, MOVE_ABSORB), - //LEVEL_UP_MOVE( 8, MOVE_INFESTATION), + 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(19, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(22, MOVE_FURY_SWIPES), - //LEVEL_UP_MOVE(26, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(26, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(29, MOVE_SPIDER_WEB), 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(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_END }; static const struct LevelUpMove sAriadosLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SWORDS_DANCE), + //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_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_CONSTRICT), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 5, MOVE_ABSORB), - //LEVEL_UP_MOVE( 8, MOVE_INFESTATION), + 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(19, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(23, MOVE_FURY_SWIPES), - //LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(32, MOVE_SPIDER_WEB), 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(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_END }; static const struct LevelUpMove sCrobatLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_CROSS_POISON), - //LEVEL_UP_MOVE( 1, MOVE_CROSS_POISON), + LEVEL_UP_MOVE( 1, MOVE_CROSS_POISON), LEVEL_UP_MOVE( 1, MOVE_SCREECH), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -3366,9 +3365,9 @@ static const struct LevelUpMove sCrobatLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_MEAN_LOOK), LEVEL_UP_MOVE(35, MOVE_LEECH_LIFE), LEVEL_UP_MOVE(40, MOVE_HAZE), - //LEVEL_UP_MOVE(43, MOVE_VENOSHOCK), - //LEVEL_UP_MOVE(48, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(51, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(43, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(48, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(51, MOVE_QUICK_GUARD), LEVEL_UP_END }; @@ -3376,48 +3375,48 @@ static const struct LevelUpMove sChinchouLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 6, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE( 9, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE( 9, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(12, MOVE_WATER_GUN), LEVEL_UP_MOVE(17, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(20, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(23, MOVE_SPARK), LEVEL_UP_MOVE(28, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(31, MOVE_FLAIL), - //LEVEL_UP_MOVE(34, MOVE_DISCHARGE), + LEVEL_UP_MOVE(34, MOVE_DISCHARGE), LEVEL_UP_MOVE(39, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(42, MOVE_AQUA_RING), + LEVEL_UP_MOVE(42, MOVE_AQUA_RING), LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(47, MOVE_ION_DELUGE), + LEVEL_UP_MOVE(47, MOVE_ION_DELUGE), LEVEL_UP_MOVE(50, MOVE_CHARGE), LEVEL_UP_END }; static const struct LevelUpMove sLanturnLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_STOCKPILE), - LEVEL_UP_MOVE( 0, MOVE_SWALLOW), - LEVEL_UP_MOVE( 0, MOVE_SPIT_UP), + //LEVEL_UP_MOVE( 0, MOVE_STOCKPILE), + //LEVEL_UP_MOVE( 0, MOVE_SWALLOW), + //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( 1, MOVE_EERIE_IMPULSE), - //LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT), + LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), + LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE( 1, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE( 1, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE( 6, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE( 9, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE( 9, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(12, MOVE_WATER_GUN), LEVEL_UP_MOVE(17, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(20, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(23, MOVE_SPARK), LEVEL_UP_MOVE(29, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(33, MOVE_FLAIL), - //LEVEL_UP_MOVE(37, MOVE_DISCHARGE), + LEVEL_UP_MOVE(37, MOVE_DISCHARGE), LEVEL_UP_MOVE(43, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(47, MOVE_AQUA_RING), + LEVEL_UP_MOVE(47, MOVE_AQUA_RING), LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(54, MOVE_ION_DELUGE), + LEVEL_UP_MOVE(54, MOVE_ION_DELUGE), LEVEL_UP_MOVE(58, MOVE_CHARGE), LEVEL_UP_END }; @@ -3427,7 +3426,7 @@ static const struct LevelUpMove sPichuLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CHARM), LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), LEVEL_UP_MOVE(10, MOVE_SWEET_KISS), - //LEVEL_UP_MOVE(13, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(13, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(18, MOVE_THUNDER_WAVE), LEVEL_UP_END }; @@ -3438,7 +3437,7 @@ static const struct LevelUpMove sCleffaLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_ENCORE), LEVEL_UP_MOVE( 7, MOVE_SING), LEVEL_UP_MOVE(10, MOVE_SWEET_KISS), - //LEVEL_UP_MOVE(13, MOVE_COPYCAT), + LEVEL_UP_MOVE(13, MOVE_COPYCAT), LEVEL_UP_MOVE(16, MOVE_MAGICAL_LEAF), LEVEL_UP_END }; @@ -3449,7 +3448,7 @@ static const struct LevelUpMove sIgglybuffLevelUpLearnset[] = { LEVEL_UP_MOVE( 3, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 5, MOVE_POUND), LEVEL_UP_MOVE( 9, MOVE_SWEET_KISS), - //LEVEL_UP_MOVE(11, MOVE_COPYCAT), + LEVEL_UP_MOVE(11, MOVE_COPYCAT), LEVEL_UP_END }; @@ -3461,14 +3460,14 @@ static const struct LevelUpMove sTogepiLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_YAWN), LEVEL_UP_MOVE(17, MOVE_ENCORE), LEVEL_UP_MOVE(21, MOVE_FOLLOW_ME), - //LEVEL_UP_MOVE(25, MOVE_BESTOW), + LEVEL_UP_MOVE(25, MOVE_BESTOW), LEVEL_UP_MOVE(29, MOVE_WISH), LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(37, MOVE_SAFEGUARD), LEVEL_UP_MOVE(41, MOVE_BATON_PASS), LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(49, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(53, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(49, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(53, MOVE_AFTER_YOU), LEVEL_UP_END }; @@ -3481,17 +3480,17 @@ static const struct LevelUpMove sTogeticLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_METRONOME), LEVEL_UP_MOVE( 9, MOVE_SWEET_KISS), LEVEL_UP_MOVE(13, MOVE_YAWN), - //LEVEL_UP_MOVE(14, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE(14, MOVE_FAIRY_WIND), LEVEL_UP_MOVE(17, MOVE_ENCORE), LEVEL_UP_MOVE(21, MOVE_FOLLOW_ME), - //LEVEL_UP_MOVE(25, MOVE_BESTOW), + LEVEL_UP_MOVE(25, MOVE_BESTOW), LEVEL_UP_MOVE(29, MOVE_WISH), LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(37, MOVE_SAFEGUARD), LEVEL_UP_MOVE(41, MOVE_BATON_PASS), LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(49, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(53, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(49, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(53, MOVE_AFTER_YOU), LEVEL_UP_END }; @@ -3500,43 +3499,43 @@ static const struct LevelUpMove sNatuLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 6, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE( 9, MOVE_TELEPORT), - //LEVEL_UP_MOVE(12, MOVE_LUCKY_CHANT), - //LEVEL_UP_MOVE(17, MOVE_STORED_POWER), - //LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(12, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(17, MOVE_STORED_POWER), + LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(23, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(28, MOVE_WISH), LEVEL_UP_MOVE(33, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(36, MOVE_MIRACLE_EYE), - //LEVEL_UP_MOVE(39, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(36, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE(39, MOVE_PSYCHO_SHIFT), LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(47, MOVE_POWER_SWAP), - //LEVEL_UP_MOVE(47, MOVE_GUARD_SWAP), - //LEVEL_UP_MOVE(50, MOVE_ME_FIRST), + LEVEL_UP_MOVE(47, MOVE_POWER_SWAP), + LEVEL_UP_MOVE(47, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE(50, MOVE_ME_FIRST), LEVEL_UP_END }; static const struct LevelUpMove sXatuLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_TAILWIND), + LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), + LEVEL_UP_MOVE( 1, MOVE_TAILWIND), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE( 1, MOVE_TELEPORT), LEVEL_UP_MOVE( 6, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE( 9, MOVE_TELEPORT), - //LEVEL_UP_MOVE(12, MOVE_LUCKY_CHANT), - //LEVEL_UP_MOVE(17, MOVE_STORED_POWER), - //LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(12, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(17, MOVE_STORED_POWER), + LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(23, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(29, MOVE_WISH), LEVEL_UP_MOVE(35, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(39, MOVE_MIRACLE_EYE), - //LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(39, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), LEVEL_UP_MOVE(49, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(53, MOVE_POWER_SWAP), - //LEVEL_UP_MOVE(53, MOVE_GUARD_SWAP), - //LEVEL_UP_MOVE(57, MOVE_ME_FIRST), + LEVEL_UP_MOVE(53, MOVE_POWER_SWAP), + LEVEL_UP_MOVE(53, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE(57, MOVE_ME_FIRST), LEVEL_UP_END }; @@ -3548,11 +3547,11 @@ static const struct LevelUpMove sMareepLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_COTTON_SPORE), LEVEL_UP_MOVE(15, MOVE_CHARGE), LEVEL_UP_MOVE(18, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(25, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE(29, MOVE_POWER_GEM), - //LEVEL_UP_MOVE(32, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(36, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(29, MOVE_POWER_GEM), + LEVEL_UP_MOVE(32, MOVE_DISCHARGE), + LEVEL_UP_MOVE(36, MOVE_COTTON_GUARD), LEVEL_UP_MOVE(39, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(43, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(46, MOVE_THUNDER), @@ -3569,11 +3568,11 @@ static const struct LevelUpMove sFlaaffyLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_COTTON_SPORE), LEVEL_UP_MOVE(16, MOVE_CHARGE), LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(29, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE(34, MOVE_POWER_GEM), - //LEVEL_UP_MOVE(38, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(43, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(34, MOVE_POWER_GEM), + LEVEL_UP_MOVE(38, MOVE_DISCHARGE), + LEVEL_UP_MOVE(43, MOVE_COTTON_GUARD), LEVEL_UP_MOVE(47, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(52, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(56, MOVE_THUNDER), @@ -3581,12 +3580,12 @@ static const struct LevelUpMove sFlaaffyLevelUpLearnset[] = { }; static const struct LevelUpMove sAmpharosLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_THUNDER_PUNCH), + //LEVEL_UP_MOVE( 0, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON), - //LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), - //LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE), - //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), + LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -3597,31 +3596,31 @@ static const struct LevelUpMove sAmpharosLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_COTTON_SPORE), LEVEL_UP_MOVE(16, MOVE_CHARGE), LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(29, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE(35, MOVE_POWER_GEM), - //LEVEL_UP_MOVE(40, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(46, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(35, MOVE_POWER_GEM), + LEVEL_UP_MOVE(40, MOVE_DISCHARGE), + LEVEL_UP_MOVE(46, MOVE_COTTON_GUARD), LEVEL_UP_MOVE(51, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(57, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(62, MOVE_THUNDER), - //LEVEL_UP_MOVE(65, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(65, MOVE_DRAGON_PULSE), LEVEL_UP_END }; static const struct LevelUpMove sBellossomLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_MAGICAL_LEAF), + //LEVEL_UP_MOVE( 0, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), + LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), LEVEL_UP_MOVE( 1, MOVE_LEAF_BLADE), LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(39, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(39, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE(59, MOVE_PETAL_DANCE), - //LEVEL_UP_MOVE(69, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(69, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -3635,9 +3634,9 @@ static const struct LevelUpMove sMarillLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_ROLLOUT), LEVEL_UP_MOVE(13, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(16, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(20, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(23, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(28, MOVE_AQUA_RING), + LEVEL_UP_MOVE(20, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(23, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(28, MOVE_AQUA_RING), LEVEL_UP_MOVE(31, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(40, MOVE_SUPERPOWER), @@ -3657,9 +3656,9 @@ static const struct LevelUpMove sAzumarillLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_ROLLOUT), LEVEL_UP_MOVE(13, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(16, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(21, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(25, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(31, MOVE_AQUA_RING), + LEVEL_UP_MOVE(21, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(25, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(31, MOVE_AQUA_RING), LEVEL_UP_MOVE(35, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(42, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(46, MOVE_SUPERPOWER), @@ -3668,10 +3667,10 @@ static const struct LevelUpMove sAzumarillLevelUpLearnset[] = { }; static const struct LevelUpMove sSudowoodoLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SLAM), + //LEVEL_UP_MOVE( 0, MOVE_SLAM), LEVEL_UP_MOVE( 1, MOVE_SLAM), - //LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), - //LEVEL_UP_MOVE( 1, MOVE_COPYCAT), + LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE( 1, MOVE_COPYCAT), LEVEL_UP_MOVE( 1, MOVE_FLAIL), LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), @@ -3680,16 +3679,16 @@ static const struct LevelUpMove sSudowoodoLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_ROCK_THROW), LEVEL_UP_MOVE(15, MOVE_MIMIC), LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK), + LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK), LEVEL_UP_MOVE(26, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(29, MOVE_BLOCK), LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(36, MOVE_COUNTER), - //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(47, MOVE_STONE_EDGE), - //LEVEL_UP_MOVE(50, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE(54, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(47, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(50, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(54, MOVE_HEAD_SMASH), LEVEL_UP_END }; @@ -3710,18 +3709,18 @@ static const struct LevelUpMove sHoppipLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_SYNTHESIS), LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 8, MOVE_TACKLE), - //LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND), LEVEL_UP_MOVE(12, MOVE_POISON_POWDER), LEVEL_UP_MOVE(14, MOVE_STUN_SPORE), LEVEL_UP_MOVE(16, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE(19, MOVE_BULLET_SEED), LEVEL_UP_MOVE(22, MOVE_LEECH_SEED), LEVEL_UP_MOVE(25, MOVE_MEGA_DRAIN), - //LEVEL_UP_MOVE(28, MOVE_ACROBATICS), - //LEVEL_UP_MOVE(31, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(28, MOVE_ACROBATICS), + LEVEL_UP_MOVE(31, MOVE_RAGE_POWDER), LEVEL_UP_MOVE(34, MOVE_COTTON_SPORE), - //LEVEL_UP_MOVE(37, MOVE_U_TURN), - //LEVEL_UP_MOVE(40, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(37, MOVE_U_TURN), + LEVEL_UP_MOVE(40, MOVE_WORRY_SEED), LEVEL_UP_MOVE(43, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(46, MOVE_BOUNCE), LEVEL_UP_MOVE(49, MOVE_MEMENTO), @@ -3736,18 +3735,18 @@ static const struct LevelUpMove sSkiploomLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_SYNTHESIS), LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 8, MOVE_TACKLE), - //LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND), LEVEL_UP_MOVE(12, MOVE_POISON_POWDER), LEVEL_UP_MOVE(14, MOVE_STUN_SPORE), LEVEL_UP_MOVE(16, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE(20, MOVE_BULLET_SEED), LEVEL_UP_MOVE(24, MOVE_LEECH_SEED), LEVEL_UP_MOVE(28, MOVE_MEGA_DRAIN), - //LEVEL_UP_MOVE(32, MOVE_ACROBATICS), - //LEVEL_UP_MOVE(36, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(32, MOVE_ACROBATICS), + LEVEL_UP_MOVE(36, MOVE_RAGE_POWDER), LEVEL_UP_MOVE(40, MOVE_COTTON_SPORE), - //LEVEL_UP_MOVE(44, MOVE_U_TURN), - //LEVEL_UP_MOVE(48, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(44, MOVE_U_TURN), + LEVEL_UP_MOVE(48, MOVE_WORRY_SEED), LEVEL_UP_MOVE(52, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(56, MOVE_BOUNCE), LEVEL_UP_MOVE(60, MOVE_MEMENTO), @@ -3762,18 +3761,18 @@ static const struct LevelUpMove sJumpluffLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_SYNTHESIS), LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 8, MOVE_TACKLE), - //LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND), LEVEL_UP_MOVE(12, MOVE_POISON_POWDER), LEVEL_UP_MOVE(14, MOVE_STUN_SPORE), LEVEL_UP_MOVE(16, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE(20, MOVE_BULLET_SEED), LEVEL_UP_MOVE(24, MOVE_LEECH_SEED), LEVEL_UP_MOVE(29, MOVE_MEGA_DRAIN), - //LEVEL_UP_MOVE(34, MOVE_ACROBATICS), - //LEVEL_UP_MOVE(39, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(34, MOVE_ACROBATICS), + LEVEL_UP_MOVE(39, MOVE_RAGE_POWDER), LEVEL_UP_MOVE(44, MOVE_COTTON_SPORE), - //LEVEL_UP_MOVE(49, MOVE_U_TURN), - //LEVEL_UP_MOVE(54, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(49, MOVE_U_TURN), + LEVEL_UP_MOVE(54, MOVE_WORRY_SEED), LEVEL_UP_MOVE(59, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(64, MOVE_BOUNCE), LEVEL_UP_MOVE(69, MOVE_MEMENTO), @@ -3791,10 +3790,10 @@ static const struct LevelUpMove sAipomLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_SWIFT), LEVEL_UP_MOVE(25, MOVE_SCREECH), LEVEL_UP_MOVE(29, MOVE_AGILITY), - //LEVEL_UP_MOVE(32, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE(36, MOVE_FLING), - //LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(43, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(32, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(36, MOVE_FLING), + LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(43, MOVE_LAST_RESORT), LEVEL_UP_END }; @@ -3806,20 +3805,20 @@ static const struct LevelUpMove sSunkernLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(13, MOVE_LEECH_SEED), LEVEL_UP_MOVE(16, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(19, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(19, MOVE_WORRY_SEED), LEVEL_UP_MOVE(22, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(25, MOVE_ENDEAVOR), LEVEL_UP_MOVE(28, MOVE_SYNTHESIS), - //LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(34, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(40, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(43, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(43, MOVE_SEED_BOMB), LEVEL_UP_END }; static const struct LevelUpMove sSunfloraLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD), + LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWTH), @@ -3828,16 +3827,16 @@ static const struct LevelUpMove sSunfloraLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(13, MOVE_LEECH_SEED), LEVEL_UP_MOVE(16, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(19, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(19, MOVE_WORRY_SEED), LEVEL_UP_MOVE(22, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(25, MOVE_BULLET_SEED), LEVEL_UP_MOVE(28, MOVE_PETAL_DANCE), - //LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(34, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(40, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(43, MOVE_LEAF_STORM), - //LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(43, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD), LEVEL_UP_END }; @@ -3855,9 +3854,9 @@ static const struct LevelUpMove sYanmaLevelUpLearnset[] = { LEVEL_UP_MOVE(38, MOVE_HYPNOSIS), LEVEL_UP_MOVE(43, MOVE_WING_ATTACK), 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_MOVE(49, MOVE_U_TURN), + LEVEL_UP_MOVE(54, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(57, MOVE_BUG_BUZZ), LEVEL_UP_END }; @@ -3867,7 +3866,7 @@ static const struct LevelUpMove sWooperLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 9, MOVE_MUD_SHOT), LEVEL_UP_MOVE(15, MOVE_SLAM), - //LEVEL_UP_MOVE(19, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(19, MOVE_MUD_BOMB), LEVEL_UP_MOVE(23, MOVE_AMNESIA), LEVEL_UP_MOVE(29, MOVE_YAWN), LEVEL_UP_MOVE(33, MOVE_EARTHQUAKE), @@ -3885,7 +3884,7 @@ static const struct LevelUpMove sQuagsireLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 9, MOVE_MUD_SHOT), LEVEL_UP_MOVE(15, MOVE_SLAM), - //LEVEL_UP_MOVE(19, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(19, MOVE_MUD_BOMB), LEVEL_UP_MOVE(24, MOVE_AMNESIA), LEVEL_UP_MOVE(31, MOVE_YAWN), LEVEL_UP_MOVE(36, MOVE_EARTHQUAKE), @@ -3897,13 +3896,13 @@ static const struct LevelUpMove sQuagsireLevelUpLearnset[] = { }; static const struct LevelUpMove sEspeonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_CONFUSION), + //LEVEL_UP_MOVE( 0, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(17, MOVE_SWIFT), LEVEL_UP_MOVE(20, MOVE_PSYBEAM), @@ -3911,28 +3910,28 @@ static const struct LevelUpMove sEspeonLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_PSYCH_UP), LEVEL_UP_MOVE(33, MOVE_MORNING_SUN), LEVEL_UP_MOVE(37, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(45, MOVE_POWER_SWAP), + LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(45, MOVE_POWER_SWAP), LEVEL_UP_END }; static const struct LevelUpMove sUmbreonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_PURSUIT), + //LEVEL_UP_MOVE( 0, MOVE_PURSUIT), LEVEL_UP_MOVE( 1, MOVE_PURSUIT), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(17, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(20, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(25, MOVE_ASSURANCE), + LEVEL_UP_MOVE(25, MOVE_ASSURANCE), LEVEL_UP_MOVE(29, MOVE_SCREECH), LEVEL_UP_MOVE(33, MOVE_MOONLIGHT), LEVEL_UP_MOVE(37, MOVE_MEAN_LOOK), - //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(45, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(45, MOVE_GUARD_SWAP), LEVEL_UP_END }; @@ -3943,21 +3942,21 @@ static const struct LevelUpMove sMurkrowLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_HAZE), LEVEL_UP_MOVE(15, MOVE_WING_ATTACK), LEVEL_UP_MOVE(21, MOVE_NIGHT_SHADE), - //LEVEL_UP_MOVE(25, MOVE_ASSURANCE), + LEVEL_UP_MOVE(25, MOVE_ASSURANCE), LEVEL_UP_MOVE(31, MOVE_TAUNT), LEVEL_UP_MOVE(35, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(41, MOVE_MEAN_LOOK), - //LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY), - //LEVEL_UP_MOVE(50, MOVE_TAILWIND), - //LEVEL_UP_MOVE(55, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(50, MOVE_TAILWIND), + LEVEL_UP_MOVE(55, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(61, MOVE_TORMENT), - //LEVEL_UP_MOVE(65, MOVE_QUASH), + LEVEL_UP_MOVE(65, MOVE_QUASH), LEVEL_UP_END }; static const struct LevelUpMove sSlowkingLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), - //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), + LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), LEVEL_UP_MOVE( 1, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE( 1, MOVE_CURSE), LEVEL_UP_MOVE( 1, MOVE_YAWN), @@ -3968,13 +3967,13 @@ static const struct LevelUpMove sSlowkingLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_DISABLE), LEVEL_UP_MOVE(23, MOVE_HEADBUTT), LEVEL_UP_MOVE(28, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(36, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(36, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(41, MOVE_SWAGGER), LEVEL_UP_MOVE(45, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(49, MOVE_TRUMP_CARD), + LEVEL_UP_MOVE(49, MOVE_TRUMP_CARD), LEVEL_UP_MOVE(54, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(58, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(58, MOVE_HEAL_PULSE), LEVEL_UP_END }; @@ -3985,14 +3984,14 @@ static const struct LevelUpMove sMisdreavusLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_ASTONISH), LEVEL_UP_MOVE(14, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(19, MOVE_MEAN_LOOK), - //LEVEL_UP_MOVE(23, MOVE_HEX), + LEVEL_UP_MOVE(23, MOVE_HEX), LEVEL_UP_MOVE(28, MOVE_PSYBEAM), LEVEL_UP_MOVE(32, MOVE_PAIN_SPLIT), - //LEVEL_UP_MOVE(37, MOVE_PAYBACK), + LEVEL_UP_MOVE(37, MOVE_PAYBACK), LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(46, MOVE_PERISH_SONG), LEVEL_UP_MOVE(50, MOVE_GRUDGE), - //LEVEL_UP_MOVE(55, MOVE_POWER_GEM), + LEVEL_UP_MOVE(55, MOVE_POWER_GEM), LEVEL_UP_END }; @@ -4010,22 +4009,22 @@ static const struct LevelUpMove sWobbuffetLevelUpLearnset[] = { }; static const struct LevelUpMove sGirafarigLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP), - //LEVEL_UP_MOVE( 1, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP), + LEVEL_UP_MOVE( 1, MOVE_GUARD_SWAP), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 5, MOVE_ODOR_SLEUTH), - //LEVEL_UP_MOVE(10, MOVE_ASSURANCE), + LEVEL_UP_MOVE(10, MOVE_ASSURANCE), LEVEL_UP_MOVE(14, MOVE_STOMP), LEVEL_UP_MOVE(19, MOVE_PSYBEAM), LEVEL_UP_MOVE(23, MOVE_AGILITY), - //LEVEL_UP_MOVE(28, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(28, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(37, MOVE_CRUNCH), LEVEL_UP_MOVE(41, MOVE_BATON_PASS), - //LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(50, MOVE_PSYCHIC), LEVEL_UP_END }; @@ -4034,16 +4033,16 @@ static const struct LevelUpMove sPinecoLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 6, MOVE_SELF_DESTRUCT), - //LEVEL_UP_MOVE( 9, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 9, MOVE_BUG_BITE), LEVEL_UP_MOVE(12, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(17, MOVE_RAPID_SPIN), LEVEL_UP_MOVE(20, MOVE_BIDE), - //LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(28, MOVE_SPIKES), - //LEVEL_UP_MOVE(31, MOVE_PAYBACK), + LEVEL_UP_MOVE(31, MOVE_PAYBACK), LEVEL_UP_MOVE(34, MOVE_EXPLOSION), LEVEL_UP_MOVE(39, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(42, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(42, MOVE_GYRO_BALL), LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; @@ -4051,31 +4050,31 @@ static const struct LevelUpMove sPinecoLevelUpLearnset[] = { static const struct LevelUpMove sForretressLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_MIRROR_SHOT), //LEVEL_UP_MOVE( 0, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE( 1, MOVE_MIRROR_SHOT), - //LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE( 1, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON), - //LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), - //LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_SELF_DESTRUCT), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE( 6, MOVE_SELF_DESTRUCT), - //LEVEL_UP_MOVE( 9, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 9, MOVE_BUG_BITE), LEVEL_UP_MOVE(12, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(17, MOVE_RAPID_SPIN), LEVEL_UP_MOVE(20, MOVE_BIDE), - //LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(28, MOVE_SPIKES), - //LEVEL_UP_MOVE(32, MOVE_PAYBACK), + LEVEL_UP_MOVE(32, MOVE_PAYBACK), LEVEL_UP_MOVE(36, MOVE_EXPLOSION), LEVEL_UP_MOVE(42, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(46, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(46, MOVE_GYRO_BALL), LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(56, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(56, MOVE_MAGNET_RISE), LEVEL_UP_MOVE(60, MOVE_ZAP_CANNON), - //LEVEL_UP_MOVE(64, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(64, MOVE_HEAVY_SLAM), LEVEL_UP_END }; @@ -4090,16 +4089,16 @@ static const struct LevelUpMove sDunsparceLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_YAWN), LEVEL_UP_MOVE(18, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(21, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(23, MOVE_DRILL_RUN), - //LEVEL_UP_MOVE(26, MOVE_ROOST), + LEVEL_UP_MOVE(23, MOVE_DRILL_RUN), + LEVEL_UP_MOVE(26, MOVE_ROOST), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(31, MOVE_COIL), + LEVEL_UP_MOVE(31, MOVE_COIL), LEVEL_UP_MOVE(33, MOVE_DIG), LEVEL_UP_MOVE(36, MOVE_GLARE), LEVEL_UP_MOVE(38, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(41, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(43, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(46, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(43, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(46, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE(48, MOVE_ENDURE), LEVEL_UP_MOVE(51, MOVE_FLAIL), LEVEL_UP_END @@ -4113,11 +4112,11 @@ static const struct LevelUpMove sGligarLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(16, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(22, MOVE_ACROBATICS), + LEVEL_UP_MOVE(22, MOVE_ACROBATICS), LEVEL_UP_MOVE(27, MOVE_SLASH), - //LEVEL_UP_MOVE(30, MOVE_U_TURN), + LEVEL_UP_MOVE(30, MOVE_U_TURN), LEVEL_UP_MOVE(35, MOVE_SCREECH), - //LEVEL_UP_MOVE(40, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(40, MOVE_X_SCISSOR), LEVEL_UP_MOVE(45, MOVE_SKY_UPPERCUT), LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(55, MOVE_GUILLOTINE), @@ -4125,9 +4124,9 @@ static const struct LevelUpMove sGligarLevelUpLearnset[] = { }; static const struct LevelUpMove sSteelixLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), - //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_HARDEN), @@ -4136,10 +4135,10 @@ static const struct LevelUpMove sSteelixLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_ROCK_THROW), LEVEL_UP_MOVE(10, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(13, MOVE_RAGE), - //LEVEL_UP_MOVE(16, MOVE_STEALTH_ROCK), - //LEVEL_UP_MOVE(19, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(20, MOVE_GYRO_BALL), - //LEVEL_UP_MOVE(22, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(16, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(19, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(20, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(22, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(25, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(28, MOVE_SLAM), LEVEL_UP_MOVE(31, MOVE_SCREECH), @@ -4147,16 +4146,16 @@ static const struct LevelUpMove sSteelixLevelUpLearnset[] = { LEVEL_UP_MOVE(37, MOVE_CRUNCH), LEVEL_UP_MOVE(40, MOVE_IRON_TAIL), LEVEL_UP_MOVE(43, MOVE_DIG), - //LEVEL_UP_MOVE(46, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(46, MOVE_STONE_EDGE), LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(52, MOVE_SANDSTORM), LEVEL_UP_END }; 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_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), @@ -4166,17 +4165,17 @@ static const struct LevelUpMove sSnubbullLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_HEADBUTT), LEVEL_UP_MOVE(25, MOVE_ROAR), LEVEL_UP_MOVE(31, MOVE_RAGE), - //LEVEL_UP_MOVE(37, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(43, MOVE_PAYBACK), + LEVEL_UP_MOVE(37, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(43, MOVE_PAYBACK), LEVEL_UP_MOVE(49, MOVE_CRUNCH), LEVEL_UP_END }; 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_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), @@ -4186,15 +4185,15 @@ static const struct LevelUpMove sGranbullLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_HEADBUTT), LEVEL_UP_MOVE(27, MOVE_ROAR), LEVEL_UP_MOVE(35, MOVE_RAGE), - //LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(51, MOVE_PAYBACK), + 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 }; static const struct LevelUpMove sQwilfishLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), + LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -4205,24 +4204,24 @@ static const struct LevelUpMove sQwilfishLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_MINIMIZE), LEVEL_UP_MOVE(13, MOVE_BUBBLE), LEVEL_UP_MOVE(17, MOVE_ROLLOUT), - //LEVEL_UP_MOVE(21, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(21, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE(25, MOVE_STOCKPILE), LEVEL_UP_MOVE(25, MOVE_SPIT_UP), LEVEL_UP_MOVE(29, MOVE_REVENGE), - //LEVEL_UP_MOVE(33, MOVE_BRINE), + LEVEL_UP_MOVE(33, MOVE_BRINE), LEVEL_UP_MOVE(37, MOVE_PIN_MISSILE), LEVEL_UP_MOVE(41, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(45, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(49, MOVE_POISON_JAB), + LEVEL_UP_MOVE(45, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(49, MOVE_POISON_JAB), LEVEL_UP_MOVE(53, MOVE_DESTINY_BOND), LEVEL_UP_MOVE(57, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(60, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(60, MOVE_FELL_STINGER), LEVEL_UP_END }; static const struct LevelUpMove sScizorLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_FEINT), - //LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_FOCUS_ENERGY), @@ -4234,57 +4233,57 @@ static const struct LevelUpMove sScizorLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_SLASH), LEVEL_UP_MOVE(33, MOVE_RAZOR_WIND), LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(41, MOVE_X_SCISSOR), - //LEVEL_UP_MOVE(45, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(49, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE(50, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(41, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(45, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(49, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(50, MOVE_IRON_HEAD), LEVEL_UP_MOVE(57, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(61, MOVE_FEINT), + LEVEL_UP_MOVE(61, MOVE_FEINT), LEVEL_UP_END }; static const struct LevelUpMove sShuckleLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_STICKY_WEB), + LEVEL_UP_MOVE( 1, MOVE_STICKY_WEB), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), LEVEL_UP_MOVE( 1, MOVE_BIDE), LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), LEVEL_UP_MOVE( 5, MOVE_ENCORE), LEVEL_UP_MOVE( 9, MOVE_WRAP), - //LEVEL_UP_MOVE(12, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(12, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE(16, MOVE_SAFEGUARD), LEVEL_UP_MOVE(20, MOVE_REST), LEVEL_UP_MOVE(23, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE(27, MOVE_GASTRO_ACID), - //LEVEL_UP_MOVE(31, MOVE_POWER_TRICK), - //LEVEL_UP_MOVE(34, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(27, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(31, MOVE_POWER_TRICK), + LEVEL_UP_MOVE(34, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(38, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(42, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(45, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(45, MOVE_GUARD_SPLIT), - //LEVEL_UP_MOVE(49, MOVE_STONE_EDGE), - //LEVEL_UP_MOVE(53, MOVE_STICKY_WEB), + LEVEL_UP_MOVE(42, MOVE_BUG_BITE), + LEVEL_UP_MOVE(45, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(45, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(49, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(53, MOVE_STICKY_WEB), LEVEL_UP_END }; static const struct LevelUpMove sHeracrossLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST), LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK), LEVEL_UP_MOVE( 1, MOVE_ENDURE), - //LEVEL_UP_MOVE( 7, MOVE_FEINT), + LEVEL_UP_MOVE( 7, MOVE_FEINT), LEVEL_UP_MOVE(10, MOVE_AERIAL_ACE), - //LEVEL_UP_MOVE(16, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(16, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(19, MOVE_COUNTER), LEVEL_UP_MOVE(25, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(28, MOVE_BRICK_BREAK), LEVEL_UP_MOVE(31, MOVE_PIN_MISSILE), LEVEL_UP_MOVE(34, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(37, MOVE_MEGAHORN), - //LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(46, MOVE_REVERSAL), LEVEL_UP_END }; @@ -4299,38 +4298,38 @@ static const struct LevelUpMove sSneaselLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(20, MOVE_AGILITY), LEVEL_UP_MOVE(22, MOVE_METAL_CLAW), - //LEVEL_UP_MOVE(25, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(25, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(28, MOVE_BEAT_UP), LEVEL_UP_MOVE(32, MOVE_SCREECH), LEVEL_UP_MOVE(35, MOVE_SLASH), LEVEL_UP_MOVE(40, MOVE_SNATCH), - //LEVEL_UP_MOVE(44, MOVE_PUNISHMENT), - //LEVEL_UP_MOVE(47, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(44, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(47, MOVE_ICE_SHARD), LEVEL_UP_END }; static const struct LevelUpMove sTeddiursaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_FLING), + LEVEL_UP_MOVE( 1, MOVE_FLING), LEVEL_UP_MOVE( 1, MOVE_COVET), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - //LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE( 1, MOVE_LICK), LEVEL_UP_MOVE( 1, MOVE_FAKE_TEARS), LEVEL_UP_MOVE( 8, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(15, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(22, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE(25, MOVE_PLAY_NICE), + LEVEL_UP_MOVE(25, MOVE_PLAY_NICE), LEVEL_UP_MOVE(29, MOVE_SLASH), LEVEL_UP_MOVE(36, MOVE_CHARM), LEVEL_UP_MOVE(43, MOVE_REST), LEVEL_UP_MOVE(43, MOVE_SNORE), LEVEL_UP_MOVE(50, MOVE_THRASH), - //LEVEL_UP_MOVE(57, MOVE_FLING), + LEVEL_UP_MOVE(57, MOVE_FLING), LEVEL_UP_END }; static const struct LevelUpMove sUrsaringLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_COVET), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -4339,13 +4338,13 @@ static const struct LevelUpMove sUrsaringLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(15, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(22, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE(25, MOVE_PLAY_NICE), + LEVEL_UP_MOVE(25, MOVE_PLAY_NICE), LEVEL_UP_MOVE(29, MOVE_SLASH), LEVEL_UP_MOVE(38, MOVE_SCARY_FACE), LEVEL_UP_MOVE(47, MOVE_REST), LEVEL_UP_MOVE(49, MOVE_SNORE), LEVEL_UP_MOVE(58, MOVE_THRASH), - //LEVEL_UP_MOVE(67, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(67, MOVE_HAMMER_ARM), LEVEL_UP_END }; @@ -4355,24 +4354,24 @@ static const struct LevelUpMove sSlugmaLevelUpLearnset[] = { 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(15, MOVE_INCINERATE), + LEVEL_UP_MOVE(20, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(22, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(27, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(27, MOVE_FLAME_BURST), LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(36, MOVE_AMNESIA), LEVEL_UP_MOVE(41, MOVE_BODY_SLAM), LEVEL_UP_MOVE(43, MOVE_RECOVER), LEVEL_UP_MOVE(48, MOVE_FLAMETHROWER), - //LEVEL_UP_MOVE(50, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(50, MOVE_EARTH_POWER), LEVEL_UP_END }; 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_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), @@ -4380,17 +4379,17 @@ static const struct LevelUpMove sMagcargoLevelUpLearnset[] = { 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(15, MOVE_INCINERATE), + LEVEL_UP_MOVE(20, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(22, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(27, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(27, MOVE_FLAME_BURST), LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME), + 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_MOVE(58, MOVE_EARTH_POWER), LEVEL_UP_END }; @@ -4401,9 +4400,9 @@ static const struct LevelUpMove sSwinubLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(11, MOVE_MUD_SLAP), LEVEL_UP_MOVE(14, MOVE_ENDURE), - //LEVEL_UP_MOVE(18, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(18, MOVE_MUD_BOMB), LEVEL_UP_MOVE(21, MOVE_ICY_WIND), - //LEVEL_UP_MOVE(24, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(24, MOVE_ICE_SHARD), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(35, MOVE_MIST), LEVEL_UP_MOVE(37, MOVE_EARTHQUAKE), @@ -4414,7 +4413,7 @@ static const struct LevelUpMove sSwinubLevelUpLearnset[] = { }; static const struct LevelUpMove sPiloswineLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK), + //LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_PECK), @@ -4425,9 +4424,9 @@ static const struct LevelUpMove sPiloswineLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(11, MOVE_MUD_SLAP), LEVEL_UP_MOVE(14, MOVE_ENDURE), - //LEVEL_UP_MOVE(18, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(18, MOVE_MUD_BOMB), LEVEL_UP_MOVE(21, MOVE_ICY_WIND), - //LEVEL_UP_MOVE(24, MOVE_ICE_FANG), + LEVEL_UP_MOVE(24, MOVE_ICE_FANG), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(37, MOVE_MIST), LEVEL_UP_MOVE(41, MOVE_THRASH), @@ -4446,15 +4445,15 @@ static const struct LevelUpMove sCorsolaLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_REFRESH), LEVEL_UP_MOVE(17, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(20, MOVE_SPIKE_CANNON), - //LEVEL_UP_MOVE(23, MOVE_LUCKY_CHANT), - //LEVEL_UP_MOVE(27, MOVE_BRINE), + LEVEL_UP_MOVE(23, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(27, MOVE_BRINE), LEVEL_UP_MOVE(29, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(31, MOVE_ROCK_BLAST), LEVEL_UP_MOVE(35, MOVE_ENDURE), - //LEVEL_UP_MOVE(38, MOVE_AQUA_RING), - //LEVEL_UP_MOVE(41, MOVE_POWER_GEM), + LEVEL_UP_MOVE(38, MOVE_AQUA_RING), + LEVEL_UP_MOVE(41, MOVE_POWER_GEM), LEVEL_UP_MOVE(45, MOVE_MIRROR_COAT), - //LEVEL_UP_MOVE(47, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(47, MOVE_EARTH_POWER), LEVEL_UP_MOVE(50, MOVE_FLAIL), LEVEL_UP_END }; @@ -4472,14 +4471,14 @@ static const struct LevelUpMove sRemoraidLevelUpLearnset[] = { LEVEL_UP_MOVE(38, MOVE_BULLET_SEED), LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(46, MOVE_HYPER_BEAM), - //LEVEL_UP_MOVE(50, MOVE_SOAK), + LEVEL_UP_MOVE(50, MOVE_SOAK), LEVEL_UP_END }; static const struct LevelUpMove sOctilleryLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_OCTAZOOKA), + //LEVEL_UP_MOVE( 0, MOVE_OCTAZOOKA), LEVEL_UP_MOVE( 1, MOVE_OCTAZOOKA), - //LEVEL_UP_MOVE( 1, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE( 1, MOVE_GUNK_SHOT), LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), @@ -4490,13 +4489,13 @@ static const struct LevelUpMove sOctilleryLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(18, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(22, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(28, MOVE_WRING_OUT), + LEVEL_UP_MOVE(28, MOVE_WRING_OUT), LEVEL_UP_MOVE(34, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(40, MOVE_ICE_BEAM), LEVEL_UP_MOVE(46, MOVE_BULLET_SEED), LEVEL_UP_MOVE(52, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(58, MOVE_HYPER_BEAM), - //LEVEL_UP_MOVE(64, MOVE_SOAK), + LEVEL_UP_MOVE(64, MOVE_SOAK), LEVEL_UP_END }; @@ -4510,7 +4509,7 @@ static const struct LevelUpMove sMantineLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PSYBEAM), LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED), LEVEL_UP_MOVE( 1, MOVE_SIGNAL_BEAM), - //LEVEL_UP_MOVE( 1, MOVE_ROOST), + LEVEL_UP_MOVE( 1, MOVE_ROOST), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -4521,11 +4520,11 @@ static const struct LevelUpMove sMantineLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_WING_ATTACK), LEVEL_UP_MOVE(16, MOVE_HEADBUTT), LEVEL_UP_MOVE(19, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(32, MOVE_AGILITY), - //LEVEL_UP_MOVE(36, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(39, MOVE_AQUA_RING), + LEVEL_UP_MOVE(36, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(39, MOVE_AQUA_RING), LEVEL_UP_MOVE(46, MOVE_BOUNCE), LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -4538,16 +4537,16 @@ static const struct LevelUpMove sSkarmoryLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_METAL_CLAW), LEVEL_UP_MOVE(12, MOVE_AIR_CUTTER), LEVEL_UP_MOVE(17, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(20, MOVE_FEINT), + LEVEL_UP_MOVE(20, MOVE_FEINT), LEVEL_UP_MOVE(23, MOVE_SWIFT), LEVEL_UP_MOVE(28, MOVE_SPIKES), LEVEL_UP_MOVE(31, MOVE_AGILITY), LEVEL_UP_MOVE(34, MOVE_STEEL_WING), LEVEL_UP_MOVE(39, MOVE_SLASH), LEVEL_UP_MOVE(42, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(45, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(50, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(53, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(45, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(50, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(53, MOVE_NIGHT_SLASH), LEVEL_UP_END }; @@ -4560,21 +4559,21 @@ static const struct LevelUpMove sHoundourLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_BITE), LEVEL_UP_MOVE(20, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(25, MOVE_BEAT_UP), - //LEVEL_UP_MOVE(28, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(28, MOVE_FIRE_FANG), LEVEL_UP_MOVE(32, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(37, MOVE_EMBARGO), - //LEVEL_UP_MOVE(40, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(37, MOVE_EMBARGO), + LEVEL_UP_MOVE(40, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(44, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(49, MOVE_CRUNCH), - //LEVEL_UP_MOVE(52, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(56, MOVE_INFERNO), + LEVEL_UP_MOVE(52, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(56, MOVE_INFERNO), LEVEL_UP_END }; static const struct LevelUpMove sHoundoomLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_INFERNO), - //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_INFERNO), + LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_HOWL), @@ -4585,14 +4584,14 @@ static const struct LevelUpMove sHoundoomLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_BITE), LEVEL_UP_MOVE(20, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(26, MOVE_BEAT_UP), - //LEVEL_UP_MOVE(30, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(30, MOVE_FIRE_FANG), LEVEL_UP_MOVE(35, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(41, MOVE_EMBARGO), - //LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(41, MOVE_EMBARGO), + LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(50, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(56, MOVE_CRUNCH), - //LEVEL_UP_MOVE(60, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(65, MOVE_INFERNO), + LEVEL_UP_MOVE(60, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(65, MOVE_INFERNO), LEVEL_UP_END }; @@ -4609,9 +4608,9 @@ static const struct LevelUpMove sKingdraLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_TWISTER), LEVEL_UP_MOVE(21, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(26, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(31, MOVE_BRINE), + LEVEL_UP_MOVE(31, MOVE_BRINE), LEVEL_UP_MOVE(38, MOVE_AGILITY), - //LEVEL_UP_MOVE(45, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(45, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(52, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(60, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -4624,34 +4623,34 @@ static const struct LevelUpMove sPhanpyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 6, MOVE_FLAIL), LEVEL_UP_MOVE(10, MOVE_ROLLOUT), - //LEVEL_UP_MOVE(15, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(15, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(19, MOVE_ENDURE), LEVEL_UP_MOVE(24, MOVE_SLAM), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(33, MOVE_CHARM), - //LEVEL_UP_MOVE(37, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(37, MOVE_LAST_RESORT), LEVEL_UP_MOVE(42, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sDonphanLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK), + //LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), - //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 6, MOVE_RAPID_SPIN), LEVEL_UP_MOVE(10, MOVE_ROLLOUT), - //LEVEL_UP_MOVE(15, MOVE_ASSURANCE), + LEVEL_UP_MOVE(15, MOVE_ASSURANCE), LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(24, MOVE_SLAM), LEVEL_UP_MOVE(30, MOVE_MAGNITUDE), LEVEL_UP_MOVE(37, MOVE_SCARY_FACE), LEVEL_UP_MOVE(43, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE(50, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(50, MOVE_GIGA_IMPACT), LEVEL_UP_END }; @@ -4665,10 +4664,10 @@ static const struct LevelUpMove sPorygon2LevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_PSYBEAM), LEVEL_UP_MOVE(12, MOVE_AGILITY), LEVEL_UP_MOVE(18, MOVE_RECOVER), - //LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE), LEVEL_UP_MOVE(29, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(34, MOVE_RECYCLE), - //LEVEL_UP_MOVE(40, MOVE_DISCHARGE), + LEVEL_UP_MOVE(40, MOVE_DISCHARGE), LEVEL_UP_MOVE(45, MOVE_LOCK_ON), LEVEL_UP_MOVE(50, MOVE_TRI_ATTACK), LEVEL_UP_MOVE(56, MOVE_MAGIC_COAT), @@ -4678,7 +4677,7 @@ static const struct LevelUpMove sPorygon2LevelUpLearnset[] = { }; static const struct LevelUpMove sStantlerLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ME_FIRST), + LEVEL_UP_MOVE( 1, MOVE_ME_FIRST), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 3, MOVE_LEER), LEVEL_UP_MOVE( 7, MOVE_ASTONISH), @@ -4689,11 +4688,11 @@ static const struct LevelUpMove sStantlerLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(27, MOVE_CALM_MIND), LEVEL_UP_MOVE(33, MOVE_ROLE_PLAY), - //LEVEL_UP_MOVE(38, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(38, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(43, MOVE_JUMP_KICK), LEVEL_UP_MOVE(49, MOVE_IMPRISON), - //LEVEL_UP_MOVE(50, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(55, MOVE_ME_FIRST), + LEVEL_UP_MOVE(50, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(55, MOVE_ME_FIRST), LEVEL_UP_END }; @@ -4720,10 +4719,10 @@ static const struct LevelUpMove sTyrogueLevelUpLearnset[] = { }; static const struct LevelUpMove sHitmontopLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ROLLING_KICK), + //LEVEL_UP_MOVE( 0, MOVE_ROLLING_KICK), LEVEL_UP_MOVE( 1, MOVE_ROLLING_KICK), LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE( 1, MOVE_DETECT), LEVEL_UP_MOVE( 1, MOVE_REVENGE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -4733,15 +4732,15 @@ static const struct LevelUpMove sHitmontopLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_PURSUIT), LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(19, MOVE_RAPID_SPIN), - //LEVEL_UP_MOVE(24, MOVE_FEINT), + LEVEL_UP_MOVE(24, MOVE_FEINT), LEVEL_UP_MOVE(28, MOVE_COUNTER), LEVEL_UP_MOVE(33, MOVE_TRIPLE_KICK), LEVEL_UP_MOVE(37, MOVE_AGILITY), - //LEVEL_UP_MOVE(42, MOVE_GYRO_BALL), - //LEVEL_UP_MOVE(46, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE(46, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(42, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(46, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(46, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(50, MOVE_DETECT), - //LEVEL_UP_MOVE(55, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(55, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(60, MOVE_ENDEAVOR), LEVEL_UP_END }; @@ -4753,13 +4752,13 @@ static const struct LevelUpMove sSmoochumLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(15, MOVE_CONFUSION), LEVEL_UP_MOVE(18, MOVE_SING), - //LEVEL_UP_MOVE(21, MOVE_HEART_STAMP), + LEVEL_UP_MOVE(21, MOVE_HEART_STAMP), LEVEL_UP_MOVE(25, MOVE_MEAN_LOOK), LEVEL_UP_MOVE(28, MOVE_FAKE_TEARS), - //LEVEL_UP_MOVE(31, MOVE_LUCKY_CHANT), - //LEVEL_UP_MOVE(35, MOVE_AVALANCHE), + LEVEL_UP_MOVE(31, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(35, MOVE_AVALANCHE), LEVEL_UP_MOVE(38, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(41, MOVE_COPYCAT), + LEVEL_UP_MOVE(41, MOVE_COPYCAT), LEVEL_UP_MOVE(45, MOVE_PERISH_SONG), LEVEL_UP_MOVE(48, MOVE_BLIZZARD), LEVEL_UP_END @@ -4773,10 +4772,10 @@ static const struct LevelUpMove sElekidLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_SWIFT), LEVEL_UP_MOVE(15, MOVE_SHOCK_WAVE), LEVEL_UP_MOVE(19, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(26, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(29, MOVE_THUNDER_PUNCH), - //LEVEL_UP_MOVE(33, MOVE_DISCHARGE), + LEVEL_UP_MOVE(33, MOVE_DISCHARGE), LEVEL_UP_MOVE(36, MOVE_SCREECH), LEVEL_UP_MOVE(40, MOVE_THUNDERBOLT), LEVEL_UP_MOVE(43, MOVE_THUNDER), @@ -4790,11 +4789,11 @@ static const struct LevelUpMove sMagbyLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(12, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(15, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG), - //LEVEL_UP_MOVE(22, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(22, MOVE_FLAME_BURST), LEVEL_UP_MOVE(26, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(29, MOVE_FIRE_PUNCH), - //LEVEL_UP_MOVE(33, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(33, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(36, MOVE_SUNNY_DAY), LEVEL_UP_MOVE(40, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(43, MOVE_FIRE_BLAST), @@ -4810,11 +4809,11 @@ static const struct LevelUpMove sMiltankLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_BIDE), LEVEL_UP_MOVE(19, MOVE_ROLLOUT), LEVEL_UP_MOVE(24, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(29, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(35, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(41, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(29, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(35, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(41, MOVE_GYRO_BALL), LEVEL_UP_MOVE(48, MOVE_HEAL_BELL), - //LEVEL_UP_MOVE(50, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(50, MOVE_WAKE_UP_SLAP), LEVEL_UP_END }; @@ -4827,22 +4826,22 @@ static const struct LevelUpMove sBlisseyLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_REFRESH), LEVEL_UP_MOVE(12, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(16, MOVE_SOFT_BOILED), - //LEVEL_UP_MOVE(20, MOVE_BESTOW), + LEVEL_UP_MOVE(20, MOVE_BESTOW), LEVEL_UP_MOVE(23, MOVE_MINIMIZE), LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(31, MOVE_SING), - //LEVEL_UP_MOVE(34, MOVE_FLING), - //LEVEL_UP_MOVE(39, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(34, MOVE_FLING), + LEVEL_UP_MOVE(39, MOVE_HEAL_PULSE), LEVEL_UP_MOVE(44, MOVE_EGG_BOMB), LEVEL_UP_MOVE(50, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(57, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(57, MOVE_HEALING_WISH), LEVEL_UP_MOVE(65, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sRaikouLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE( 1, MOVE_DISCHARGE), + LEVEL_UP_MOVE( 1, MOVE_DISCHARGE), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 8, MOVE_THUNDER_SHOCK), @@ -4851,8 +4850,8 @@ static const struct LevelUpMove sRaikouLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_SPARK), LEVEL_UP_MOVE(36, MOVE_REFLECT), LEVEL_UP_MOVE(43, MOVE_CRUNCH), - //LEVEL_UP_MOVE(50, MOVE_THUNDER_FANG), - //LEVEL_UP_MOVE(57, MOVE_DISCHARGE), + LEVEL_UP_MOVE(50, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE(57, MOVE_DISCHARGE), LEVEL_UP_MOVE(64, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(71, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(78, MOVE_CALM_MIND), @@ -4864,7 +4863,7 @@ static const struct LevelUpMove sEnteiLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SACRED_FIRE), LEVEL_UP_MOVE( 1, MOVE_ERUPTION), LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE( 1, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE( 1, MOVE_LAVA_PLUME), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 8, MOVE_EMBER), @@ -4873,8 +4872,8 @@ static const struct LevelUpMove sEnteiLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_STOMP), LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(43, MOVE_SWAGGER), - //LEVEL_UP_MOVE(50, MOVE_FIRE_FANG), - //LEVEL_UP_MOVE(57, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(50, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(57, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(64, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(71, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(78, MOVE_CALM_MIND), @@ -4894,8 +4893,8 @@ static const struct LevelUpMove sSuicuneLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(36, MOVE_MIST), LEVEL_UP_MOVE(43, MOVE_MIRROR_COAT), - //LEVEL_UP_MOVE(50, MOVE_ICE_FANG), - //LEVEL_UP_MOVE(57, MOVE_TAILWIND), + LEVEL_UP_MOVE(50, MOVE_ICE_FANG), + LEVEL_UP_MOVE(57, MOVE_TAILWIND), LEVEL_UP_MOVE(64, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(71, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(78, MOVE_CALM_MIND), @@ -4908,15 +4907,15 @@ static const struct LevelUpMove sLarvitarLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_SANDSTORM), LEVEL_UP_MOVE(10, MOVE_SCREECH), - //LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(19, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(23, MOVE_SCARY_FACE), LEVEL_UP_MOVE(28, MOVE_THRASH), - //LEVEL_UP_MOVE(32, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(37, MOVE_PAYBACK), + LEVEL_UP_MOVE(32, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(37, MOVE_PAYBACK), LEVEL_UP_MOVE(41, MOVE_CRUNCH), LEVEL_UP_MOVE(46, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE(50, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(50, MOVE_STONE_EDGE), LEVEL_UP_MOVE(55, MOVE_HYPER_BEAM), LEVEL_UP_END }; @@ -4928,40 +4927,40 @@ static const struct LevelUpMove sPupitarLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCREECH), LEVEL_UP_MOVE( 5, MOVE_SANDSTORM), LEVEL_UP_MOVE(10, MOVE_SCREECH), - //LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(19, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(23, MOVE_SCARY_FACE), LEVEL_UP_MOVE(28, MOVE_THRASH), - //LEVEL_UP_MOVE(34, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(41, MOVE_PAYBACK), + LEVEL_UP_MOVE(34, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(41, MOVE_PAYBACK), LEVEL_UP_MOVE(47, MOVE_CRUNCH), LEVEL_UP_MOVE(54, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE(60, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(60, MOVE_STONE_EDGE), LEVEL_UP_MOVE(67, MOVE_HYPER_BEAM), LEVEL_UP_END }; static const struct LevelUpMove sTyranitarLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), - //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_SANDSTORM), LEVEL_UP_MOVE( 1, MOVE_SCREECH), LEVEL_UP_MOVE( 5, MOVE_SANDSTORM), LEVEL_UP_MOVE(10, MOVE_SCREECH), - //LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(19, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(23, MOVE_SCARY_FACE), LEVEL_UP_MOVE(28, MOVE_THRASH), - //LEVEL_UP_MOVE(34, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(41, MOVE_PAYBACK), + LEVEL_UP_MOVE(34, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(41, MOVE_PAYBACK), LEVEL_UP_MOVE(47, MOVE_CRUNCH), LEVEL_UP_MOVE(54, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE(63, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(63, MOVE_STONE_EDGE), LEVEL_UP_MOVE(73, MOVE_HYPER_BEAM), - //LEVEL_UP_MOVE(82, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(82, MOVE_GIGA_IMPACT), LEVEL_UP_END }; @@ -4969,17 +4968,17 @@ static const struct LevelUpMove sLugiaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL), LEVEL_UP_MOVE( 9, MOVE_GUST), - //LEVEL_UP_MOVE(15, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(15, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE(23, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(29, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(37, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(43, MOVE_AEROBLAST), - //LEVEL_UP_MOVE(50, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(50, MOVE_PUNISHMENT), LEVEL_UP_MOVE(57, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(65, MOVE_SAFEGUARD), LEVEL_UP_MOVE(71, MOVE_RECOVER), LEVEL_UP_MOVE(79, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(85, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(85, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(93, MOVE_CALM_MIND), LEVEL_UP_MOVE(99, MOVE_SKY_ATTACK), LEVEL_UP_END @@ -4989,17 +4988,17 @@ static const struct LevelUpMove sHoOhLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL), LEVEL_UP_MOVE( 9, MOVE_GUST), - //LEVEL_UP_MOVE(15, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(15, MOVE_BRAVE_BIRD), LEVEL_UP_MOVE(23, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(29, MOVE_SUNNY_DAY), LEVEL_UP_MOVE(37, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(43, MOVE_SACRED_FIRE), - //LEVEL_UP_MOVE(50, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(50, MOVE_PUNISHMENT), LEVEL_UP_MOVE(57, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(65, MOVE_SAFEGUARD), LEVEL_UP_MOVE(71, MOVE_RECOVER), LEVEL_UP_MOVE(79, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(85, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(85, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(93, MOVE_CALM_MIND), LEVEL_UP_MOVE(99, MOVE_SKY_ATTACK), LEVEL_UP_END @@ -5014,11 +5013,11 @@ static const struct LevelUpMove sCelebiLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(28, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(37, MOVE_BATON_PASS), - //LEVEL_UP_MOVE(46, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE(55, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(46, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(55, MOVE_HEAL_BLOCK), LEVEL_UP_MOVE(64, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(73, MOVE_HEALING_WISH), - //LEVEL_UP_MOVE(82, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(73, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(82, MOVE_LEAF_STORM), LEVEL_UP_MOVE(91, MOVE_PERISH_SONG), LEVEL_UP_END }; @@ -5159,15 +5158,15 @@ static const struct LevelUpMove sTreeckoLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_AGILITY), LEVEL_UP_MOVE(29, MOVE_SLAM), LEVEL_UP_MOVE(33, MOVE_DETECT), - //LEVEL_UP_MOVE(37, MOVE_ENERGY_BALL), - //LEVEL_UP_MOVE(41, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(37, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(41, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(45, MOVE_ENDEAVOR), LEVEL_UP_MOVE(49, MOVE_SCREECH), LEVEL_UP_END }; static const struct LevelUpMove sGrovyleLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER), + //LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -5181,20 +5180,20 @@ static const struct LevelUpMove sGrovyleLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_AGILITY), LEVEL_UP_MOVE(33, MOVE_SLAM), LEVEL_UP_MOVE(38, MOVE_DETECT), - //LEVEL_UP_MOVE(43, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(43, MOVE_X_SCISSOR), LEVEL_UP_MOVE(48, MOVE_FALSE_SWIPE), - //LEVEL_UP_MOVE(53, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(58, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(53, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(58, MOVE_LEAF_STORM), LEVEL_UP_MOVE(63, MOVE_SCREECH), LEVEL_UP_END }; static const struct LevelUpMove sSceptileLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_DUAL_CHOP), - //LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP), + LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), - //LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ABSORB), @@ -5207,10 +5206,10 @@ static const struct LevelUpMove sSceptileLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_AGILITY), LEVEL_UP_MOVE(33, MOVE_SLAM), LEVEL_UP_MOVE(39, MOVE_DETECT), - //LEVEL_UP_MOVE(45, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(45, MOVE_X_SCISSOR), LEVEL_UP_MOVE(51, MOVE_FALSE_SWIPE), - //LEVEL_UP_MOVE(57, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(63, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(57, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(63, MOVE_LEAF_STORM), LEVEL_UP_MOVE(69, MOVE_SCREECH), LEVEL_UP_END }; @@ -5223,7 +5222,7 @@ static const struct LevelUpMove sTorchicLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_PECK), LEVEL_UP_MOVE(19, MOVE_FIRE_SPIN), LEVEL_UP_MOVE(23, MOVE_QUICK_ATTACK), - //LEVEL_UP_MOVE(28, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(28, MOVE_FLAME_BURST), LEVEL_UP_MOVE(32, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(37, MOVE_SLASH), LEVEL_UP_MOVE(41, MOVE_MIRROR_MOVE), @@ -5232,7 +5231,7 @@ static const struct LevelUpMove sTorchicLevelUpLearnset[] = { }; static const struct LevelUpMove sCombuskenLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_DOUBLE_KICK), + //LEVEL_UP_MOVE( 0, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -5241,22 +5240,22 @@ static const struct LevelUpMove sCombuskenLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_EMBER), LEVEL_UP_MOVE(10, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(14, MOVE_PECK), - //LEVEL_UP_MOVE(20, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(20, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(25, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(31, MOVE_BULK_UP), LEVEL_UP_MOVE(36, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(42, MOVE_SLASH), LEVEL_UP_MOVE(47, MOVE_MIRROR_MOVE), LEVEL_UP_MOVE(53, MOVE_SKY_UPPERCUT), - //LEVEL_UP_MOVE(58, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(58, MOVE_FLARE_BLITZ), LEVEL_UP_END }; static const struct LevelUpMove sBlazikenLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_BLAZE_KICK), + //LEVEL_UP_MOVE( 0, MOVE_BLAZE_KICK), LEVEL_UP_MOVE( 1, MOVE_BLAZE_KICK), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), - //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_HIGH_JUMP_KICK), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), @@ -5266,14 +5265,14 @@ static const struct LevelUpMove sBlazikenLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_EMBER), LEVEL_UP_MOVE(10, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(14, MOVE_PECK), - //LEVEL_UP_MOVE(20, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(20, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(25, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(31, MOVE_BULK_UP), LEVEL_UP_MOVE(37, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(44, MOVE_SLASH), - //LEVEL_UP_MOVE(50, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(50, MOVE_BRAVE_BIRD), LEVEL_UP_MOVE(57, MOVE_SKY_UPPERCUT), - //LEVEL_UP_MOVE(63, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(63, MOVE_FLARE_BLITZ), LEVEL_UP_END }; @@ -5295,7 +5294,7 @@ static const struct LevelUpMove sMudkipLevelUpLearnset[] = { }; static const struct LevelUpMove sMarshtompLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_MUD_SHOT), + //LEVEL_UP_MOVE( 0, MOVE_MUD_SHOT), LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -5305,7 +5304,7 @@ static const struct LevelUpMove sMarshtompLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_MUD_SLAP), LEVEL_UP_MOVE(12, MOVE_FORESIGHT), LEVEL_UP_MOVE(18, MOVE_BIDE), - //LEVEL_UP_MOVE(22, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(22, MOVE_MUD_BOMB), LEVEL_UP_MOVE(28, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(32, MOVE_PROTECT), LEVEL_UP_MOVE(38, MOVE_MUDDY_WATER), @@ -5317,7 +5316,7 @@ 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_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -5326,14 +5325,14 @@ static const struct LevelUpMove sSwampertLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_MUD_SLAP), LEVEL_UP_MOVE(12, MOVE_FORESIGHT), LEVEL_UP_MOVE(18, MOVE_BIDE), - //LEVEL_UP_MOVE(22, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(22, MOVE_MUD_BOMB), LEVEL_UP_MOVE(28, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(32, MOVE_PROTECT), LEVEL_UP_MOVE(39, MOVE_MUDDY_WATER), LEVEL_UP_MOVE(44, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(51, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(56, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(63, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(63, MOVE_HAMMER_ARM), LEVEL_UP_END }; @@ -5345,24 +5344,24 @@ static const struct LevelUpMove sPoochyenaLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(16, MOVE_ROAR), LEVEL_UP_MOVE(19, MOVE_SWAGGER), - //LEVEL_UP_MOVE(22, MOVE_ASSURANCE), + LEVEL_UP_MOVE(22, MOVE_ASSURANCE), LEVEL_UP_MOVE(25, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(28, MOVE_EMBARGO), + LEVEL_UP_MOVE(28, MOVE_EMBARGO), 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(43, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH), LEVEL_UP_END }; static const struct LevelUpMove sMightyenaLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SNARL), - //LEVEL_UP_MOVE( 1, MOVE_SNARL), - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), - //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), - //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), + LEVEL_UP_MOVE( 1, MOVE_SNARL), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_THIEF), LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -5375,15 +5374,15 @@ static const struct LevelUpMove sMightyenaLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(16, MOVE_ROAR), LEVEL_UP_MOVE(20, MOVE_SWAGGER), - //LEVEL_UP_MOVE(24, MOVE_ASSURANCE), + LEVEL_UP_MOVE(24, MOVE_ASSURANCE), LEVEL_UP_MOVE(28, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(32, MOVE_EMBARGO), + LEVEL_UP_MOVE(32, MOVE_EMBARGO), 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), - //LEVEL_UP_MOVE(56, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(52, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(56, MOVE_PLAY_ROUGH), LEVEL_UP_END }; @@ -5393,24 +5392,24 @@ static const struct LevelUpMove sZigzagoonLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(11, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(12, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(12, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(17, MOVE_MUD_SPORT), LEVEL_UP_MOVE(19, MOVE_PIN_MISSILE), LEVEL_UP_MOVE(23, MOVE_COVET), - //LEVEL_UP_MOVE(25, MOVE_BESTOW), + LEVEL_UP_MOVE(25, MOVE_BESTOW), LEVEL_UP_MOVE(29, MOVE_FLAIL), LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(35, MOVE_REST), LEVEL_UP_MOVE(37, MOVE_BELLY_DRUM), - //LEVEL_UP_MOVE(41, MOVE_FLING), + LEVEL_UP_MOVE(41, MOVE_FLING), LEVEL_UP_END }; static const struct LevelUpMove sLinooneLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), - //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), + LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), + LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -5422,12 +5421,12 @@ static const struct LevelUpMove sLinooneLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_MUD_SPORT), LEVEL_UP_MOVE(19, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(24, MOVE_COVET), - //LEVEL_UP_MOVE(27, MOVE_BESTOW), + LEVEL_UP_MOVE(27, MOVE_BESTOW), LEVEL_UP_MOVE(32, MOVE_SLASH), LEVEL_UP_MOVE(35, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(40, MOVE_REST), LEVEL_UP_MOVE(43, MOVE_BELLY_DRUM), - //LEVEL_UP_MOVE(48, MOVE_FLING), + LEVEL_UP_MOVE(48, MOVE_FLING), LEVEL_UP_END }; @@ -5435,18 +5434,18 @@ static const struct LevelUpMove sWurmpleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), LEVEL_UP_MOVE( 5, MOVE_POISON_STING), - //LEVEL_UP_MOVE(15, MOVE_BUG_BITE), + LEVEL_UP_MOVE(15, MOVE_BUG_BITE), LEVEL_UP_END }; static const struct LevelUpMove sSilcoonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_HARDEN), + //LEVEL_UP_MOVE( 0, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_END }; static const struct LevelUpMove sBeautiflyLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_GUST), + //LEVEL_UP_MOVE( 0, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE(12, MOVE_ABSORB), LEVEL_UP_MOVE(15, MOVE_STUN_SPORE), @@ -5457,33 +5456,33 @@ static const struct LevelUpMove sBeautiflyLevelUpLearnset[] = { LEVEL_UP_MOVE(27, MOVE_ATTRACT), LEVEL_UP_MOVE(30, MOVE_WHIRLWIND), LEVEL_UP_MOVE(32, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(37, MOVE_RAGE), - //LEVEL_UP_MOVE(40, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(40, MOVE_QUIVER_DANCE), LEVEL_UP_END }; static const struct LevelUpMove sCascoonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_HARDEN), + //LEVEL_UP_MOVE( 0, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_END }; static const struct LevelUpMove sDustoxLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_GUST), + //LEVEL_UP_MOVE( 0, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE(12, MOVE_CONFUSION), LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), LEVEL_UP_MOVE(17, MOVE_MOONLIGHT), - //LEVEL_UP_MOVE(20, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(20, MOVE_VENOSHOCK), LEVEL_UP_MOVE(22, MOVE_PSYBEAM), LEVEL_UP_MOVE(25, MOVE_SILVER_WIND), LEVEL_UP_MOVE(27, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(30, MOVE_WHIRLWIND), LEVEL_UP_MOVE(32, MOVE_TOXIC), - //LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(37, MOVE_PROTECT), - //LEVEL_UP_MOVE(40, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(40, MOVE_QUIVER_DANCE), LEVEL_UP_END }; @@ -5492,15 +5491,15 @@ static const struct LevelUpMove sLotadLevelUpLearnset[] = { LEVEL_UP_MOVE( 3, MOVE_GROWL), LEVEL_UP_MOVE( 6, MOVE_ABSORB), LEVEL_UP_MOVE( 9, MOVE_BUBBLE), - //LEVEL_UP_MOVE(12, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(12, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(15, MOVE_MIST), LEVEL_UP_MOVE(18, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(21, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(24, MOVE_NATURE_POWER), LEVEL_UP_MOVE(27, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(30, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL), LEVEL_UP_END }; @@ -5516,7 +5515,7 @@ static const struct LevelUpMove sLombreLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_NATURE_POWER), LEVEL_UP_MOVE(32, MOVE_UPROAR), LEVEL_UP_MOVE(36, MOVE_KNOCK_OFF), - //LEVEL_UP_MOVE(40, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(40, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(44, MOVE_HYDRO_PUMP), LEVEL_UP_END }; @@ -5541,7 +5540,7 @@ static const struct LevelUpMove sSeedotLevelUpLearnset[] = { }; static const struct LevelUpMove sNuzleafLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_RAZOR_LEAF), + //LEVEL_UP_MOVE( 0, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 3, MOVE_HARDEN), @@ -5561,10 +5560,10 @@ static const struct LevelUpMove sShiftryLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), - //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(20, MOVE_LEAF_TORNADO), - //LEVEL_UP_MOVE(32, MOVE_HURRICANE), - //LEVEL_UP_MOVE(44, MOVE_LEAF_STORM), + LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(20, MOVE_LEAF_TORNADO), + LEVEL_UP_MOVE(32, MOVE_HURRICANE), + LEVEL_UP_MOVE(44, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -5584,13 +5583,13 @@ static const struct LevelUpMove sNincadaLevelUpLearnset[] = { }; static const struct LevelUpMove sNinjaskLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_DOUBLE_TEAM), - LEVEL_UP_MOVE( 0, MOVE_SCREECH), - LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER), + //LEVEL_UP_MOVE( 0, MOVE_DOUBLE_TEAM), + //LEVEL_UP_MOVE( 0, MOVE_SCREECH), + //LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_SCREECH), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_ABSORB), @@ -5603,7 +5602,7 @@ static const struct LevelUpMove sNinjaskLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_MIND_READER), LEVEL_UP_MOVE(35, MOVE_BATON_PASS), LEVEL_UP_MOVE(41, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(47, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(47, MOVE_X_SCISSOR), LEVEL_UP_END }; @@ -5616,13 +5615,13 @@ static const struct LevelUpMove sShedinjaLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(17, MOVE_SPITE), - //LEVEL_UP_MOVE(21, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(21, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(25, MOVE_MIND_READER), LEVEL_UP_MOVE(29, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(33, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(37, MOVE_GRUDGE), - //LEVEL_UP_MOVE(41, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(41, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE), LEVEL_UP_END }; @@ -5634,19 +5633,19 @@ static const struct LevelUpMove sTaillowLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_WING_ATTACK), LEVEL_UP_MOVE(17, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(21, MOVE_AERIAL_ACE), - //LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(29, MOVE_AGILITY), - //LEVEL_UP_MOVE(33, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(33, MOVE_AIR_SLASH), LEVEL_UP_MOVE(37, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(41, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(41, MOVE_BRAVE_BIRD), LEVEL_UP_MOVE(45, MOVE_REVERSAL), LEVEL_UP_END }; static const struct LevelUpMove sSwellowLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_PLUCK), + LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), + LEVEL_UP_MOVE( 1, MOVE_PLUCK), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -5656,11 +5655,11 @@ static const struct LevelUpMove sSwellowLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_WING_ATTACK), LEVEL_UP_MOVE(17, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(21, MOVE_AERIAL_ACE), - //LEVEL_UP_MOVE(27, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(27, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(33, MOVE_AGILITY), - //LEVEL_UP_MOVE(39, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(39, MOVE_AIR_SLASH), LEVEL_UP_MOVE(45, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(51, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(51, MOVE_BRAVE_BIRD), LEVEL_UP_MOVE(57, MOVE_REVERSAL), LEVEL_UP_END }; @@ -5673,17 +5672,17 @@ static const struct LevelUpMove sShroomishLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(15, MOVE_HEADBUTT), LEVEL_UP_MOVE(19, MOVE_POISON_POWDER), - //LEVEL_UP_MOVE(22, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(22, MOVE_WORRY_SEED), LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(29, MOVE_GROWTH), LEVEL_UP_MOVE(33, MOVE_TOXIC), - //LEVEL_UP_MOVE(36, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(36, MOVE_SEED_BOMB), LEVEL_UP_MOVE(40, MOVE_SPORE), LEVEL_UP_END }; static const struct LevelUpMove sBreloomLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH), + //LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH), LEVEL_UP_MOVE( 1, MOVE_MACH_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -5693,24 +5692,24 @@ static const struct LevelUpMove sBreloomLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_LEECH_SEED), LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(15, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(19, MOVE_FEINT), + LEVEL_UP_MOVE(19, MOVE_FEINT), LEVEL_UP_MOVE(22, MOVE_COUNTER), - //LEVEL_UP_MOVE(28, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(28, MOVE_FORCE_PALM), LEVEL_UP_MOVE(33, MOVE_MIND_READER), LEVEL_UP_MOVE(39, MOVE_SKY_UPPERCUT), - //LEVEL_UP_MOVE(44, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(44, MOVE_SEED_BOMB), LEVEL_UP_MOVE(50, MOVE_DYNAMIC_PUNCH), LEVEL_UP_END }; static const struct LevelUpMove sSpindaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 5, MOVE_COPYCAT), + LEVEL_UP_MOVE( 5, MOVE_COPYCAT), LEVEL_UP_MOVE(10, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(14, MOVE_PSYBEAM), LEVEL_UP_MOVE(19, MOVE_HYPNOSIS), LEVEL_UP_MOVE(23, MOVE_DIZZY_PUNCH), - //LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(32, MOVE_TEETER_DANCE), LEVEL_UP_MOVE(37, MOVE_UPROAR), LEVEL_UP_MOVE(41, MOVE_PSYCH_UP), @@ -5731,20 +5730,20 @@ static const struct LevelUpMove sWingullLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_AIR_CUTTER), LEVEL_UP_MOVE(26, MOVE_PURSUIT), LEVEL_UP_MOVE(29, MOVE_AERIAL_ACE), - //LEVEL_UP_MOVE(33, MOVE_ROOST), + LEVEL_UP_MOVE(33, MOVE_ROOST), LEVEL_UP_MOVE(36, MOVE_AGILITY), - //LEVEL_UP_MOVE(40, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(43, MOVE_HURRICANE), + LEVEL_UP_MOVE(40, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(43, MOVE_HURRICANE), LEVEL_UP_END }; static const struct LevelUpMove sPelipperLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_PROTECT), + //LEVEL_UP_MOVE( 0, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_PROTECT), - //LEVEL_UP_MOVE( 1, MOVE_HURRICANE), + LEVEL_UP_MOVE( 1, MOVE_HURRICANE), LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE( 1, MOVE_TAILWIND), - //LEVEL_UP_MOVE( 1, MOVE_SOAK), + LEVEL_UP_MOVE( 1, MOVE_TAILWIND), + LEVEL_UP_MOVE( 1, MOVE_SOAK), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), @@ -5753,16 +5752,16 @@ static const struct LevelUpMove sPelipperLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_WING_ATTACK), LEVEL_UP_MOVE(12, MOVE_MIST), LEVEL_UP_MOVE(15, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(19, MOVE_PAYBACK), - //LEVEL_UP_MOVE(22, MOVE_BRINE), - //LEVEL_UP_MOVE(28, MOVE_FLING), + LEVEL_UP_MOVE(19, MOVE_PAYBACK), + LEVEL_UP_MOVE(22, MOVE_BRINE), + LEVEL_UP_MOVE(28, MOVE_FLING), LEVEL_UP_MOVE(33, MOVE_STOCKPILE), LEVEL_UP_MOVE(33, MOVE_SWALLOW), LEVEL_UP_MOVE(33, MOVE_SPIT_UP), - //LEVEL_UP_MOVE(39, MOVE_ROOST), - //LEVEL_UP_MOVE(44, MOVE_TAILWIND), + LEVEL_UP_MOVE(39, MOVE_ROOST), + LEVEL_UP_MOVE(44, MOVE_TAILWIND), LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(55, MOVE_HURRICANE), + LEVEL_UP_MOVE(55, MOVE_HURRICANE), LEVEL_UP_END }; @@ -5775,17 +5774,17 @@ static const struct LevelUpMove sSurskitLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_AGILITY), LEVEL_UP_MOVE(25, MOVE_MIST), LEVEL_UP_MOVE(25, MOVE_HAZE), - //LEVEL_UP_MOVE(30, MOVE_AQUA_JET), + LEVEL_UP_MOVE(30, MOVE_AQUA_JET), LEVEL_UP_MOVE(35, MOVE_BATON_PASS), - //LEVEL_UP_MOVE(38, MOVE_STICKY_WEB), + LEVEL_UP_MOVE(38, MOVE_STICKY_WEB), LEVEL_UP_END }; static const struct LevelUpMove sMasquerainLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), @@ -5798,10 +5797,10 @@ static const struct LevelUpMove sMasquerainLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_AIR_CUTTER), LEVEL_UP_MOVE(26, MOVE_STUN_SPORE), LEVEL_UP_MOVE(32, MOVE_SILVER_WIND), - //LEVEL_UP_MOVE(38, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(42, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(38, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(42, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(48, MOVE_WHIRLWIND), - //LEVEL_UP_MOVE(52, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(52, MOVE_QUIVER_DANCE), LEVEL_UP_END }; @@ -5814,21 +5813,21 @@ static const struct LevelUpMove sWailmerLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_ASTONISH), LEVEL_UP_MOVE(19, MOVE_WATER_PULSE), LEVEL_UP_MOVE(22, MOVE_MIST), - //LEVEL_UP_MOVE(25, MOVE_BRINE), + LEVEL_UP_MOVE(25, MOVE_BRINE), LEVEL_UP_MOVE(29, MOVE_REST), LEVEL_UP_MOVE(33, MOVE_WATER_SPOUT), LEVEL_UP_MOVE(37, MOVE_AMNESIA), LEVEL_UP_MOVE(41, MOVE_DIVE), LEVEL_UP_MOVE(45, MOVE_BOUNCE), LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(53, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(53, MOVE_HEAVY_SLAM), LEVEL_UP_END }; static const struct LevelUpMove sWailordLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SOAK), - //LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), - //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE( 1, MOVE_SOAK), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE( 1, MOVE_SPLASH), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -5840,14 +5839,14 @@ static const struct LevelUpMove sWailordLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_ASTONISH), LEVEL_UP_MOVE(19, MOVE_WATER_PULSE), LEVEL_UP_MOVE(22, MOVE_MIST), - //LEVEL_UP_MOVE(25, MOVE_BRINE), + LEVEL_UP_MOVE(25, MOVE_BRINE), LEVEL_UP_MOVE(29, MOVE_REST), LEVEL_UP_MOVE(33, MOVE_WATER_SPOUT), LEVEL_UP_MOVE(37, MOVE_AMNESIA), LEVEL_UP_MOVE(44, MOVE_DIVE), LEVEL_UP_MOVE(51, MOVE_BOUNCE), LEVEL_UP_MOVE(58, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(65, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(65, MOVE_HEAVY_SLAM), LEVEL_UP_END }; @@ -5859,18 +5858,18 @@ static const struct LevelUpMove sSkittyLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_FORESIGHT), LEVEL_UP_MOVE( 7, MOVE_SING), LEVEL_UP_MOVE(10, MOVE_ATTRACT), - //LEVEL_UP_MOVE(13, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(13, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(16, MOVE_DOUBLE_SLAP), - //LEVEL_UP_MOVE(19, MOVE_COPYCAT), + LEVEL_UP_MOVE(19, MOVE_COPYCAT), LEVEL_UP_MOVE(22, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(25, MOVE_CHARM), - //LEVEL_UP_MOVE(28, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(28, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE(31, MOVE_ASSIST), LEVEL_UP_MOVE(34, MOVE_COVET), LEVEL_UP_MOVE(37, MOVE_HEAL_BELL), LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(43, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(43, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH), LEVEL_UP_END }; @@ -5889,19 +5888,19 @@ static const struct LevelUpMove sKecleonLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LICK), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 4, MOVE_BIND), - //LEVEL_UP_MOVE( 7, MOVE_SHADOW_SNEAK), - //LEVEL_UP_MOVE(10, MOVE_FEINT), + LEVEL_UP_MOVE( 7, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(10, MOVE_FEINT), LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(16, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(18, MOVE_PSYBEAM), LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(25, MOVE_SLASH), LEVEL_UP_MOVE(30, MOVE_CAMOUFLAGE), - //LEVEL_UP_MOVE(33, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE(33, MOVE_SHADOW_CLAW), LEVEL_UP_MOVE(38, MOVE_SCREECH), LEVEL_UP_MOVE(42, MOVE_SUBSTITUTE), - //LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(50, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(50, MOVE_SYNCHRONOISE), LEVEL_UP_END }; @@ -5910,17 +5909,17 @@ static const struct LevelUpMove sBaltoyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 4, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), - //LEVEL_UP_MOVE(10, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(10, MOVE_HEAL_BLOCK), LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(16, MOVE_PSYBEAM), LEVEL_UP_MOVE(19, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(22, MOVE_COSMIC_POWER), - //LEVEL_UP_MOVE(25, MOVE_POWER_TRICK), + LEVEL_UP_MOVE(25, MOVE_POWER_TRICK), LEVEL_UP_MOVE(28, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE(34, MOVE_GUARD_SPLIT), - //LEVEL_UP_MOVE(34, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(37, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(34, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(34, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(37, MOVE_EARTH_POWER), LEVEL_UP_MOVE(40, MOVE_SANDSTORM), LEVEL_UP_MOVE(43, MOVE_IMPRISON), LEVEL_UP_MOVE(46, MOVE_EXPLOSION), @@ -5928,7 +5927,7 @@ static const struct LevelUpMove sBaltoyLevelUpLearnset[] = { }; static const struct LevelUpMove sClaydolLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_HYPER_BEAM), + //LEVEL_UP_MOVE( 0, MOVE_HYPER_BEAM), LEVEL_UP_MOVE( 1, MOVE_HYPER_BEAM), LEVEL_UP_MOVE( 1, MOVE_TELEPORT), LEVEL_UP_MOVE( 1, MOVE_HARDEN), @@ -5936,17 +5935,17 @@ static const struct LevelUpMove sClaydolLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 4, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), - //LEVEL_UP_MOVE(10, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(10, MOVE_HEAL_BLOCK), LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(16, MOVE_PSYBEAM), LEVEL_UP_MOVE(19, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(22, MOVE_COSMIC_POWER), - //LEVEL_UP_MOVE(25, MOVE_POWER_TRICK), + LEVEL_UP_MOVE(25, MOVE_POWER_TRICK), LEVEL_UP_MOVE(28, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE(34, MOVE_GUARD_SPLIT), - //LEVEL_UP_MOVE(34, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(40, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(34, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(34, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(40, MOVE_EARTH_POWER), LEVEL_UP_MOVE(46, MOVE_SANDSTORM), LEVEL_UP_MOVE(52, MOVE_IMPRISON), LEVEL_UP_MOVE(58, MOVE_EXPLOSION), @@ -5962,12 +5961,12 @@ static const struct LevelUpMove sNosepassLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_REST), LEVEL_UP_MOVE(19, MOVE_SPARK), LEVEL_UP_MOVE(22, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(25, MOVE_POWER_GEM), + LEVEL_UP_MOVE(25, MOVE_POWER_GEM), LEVEL_UP_MOVE(28, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(31, MOVE_DISCHARGE), + LEVEL_UP_MOVE(31, MOVE_DISCHARGE), LEVEL_UP_MOVE(34, MOVE_SANDSTORM), - //LEVEL_UP_MOVE(37, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(40, MOVE_STONE_EDGE), + 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_END @@ -5982,7 +5981,7 @@ static const struct LevelUpMove sTorkoalLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(18, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(22, MOVE_CURSE), - //LEVEL_UP_MOVE(25, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(25, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(27, MOVE_BODY_SLAM), LEVEL_UP_MOVE(30, MOVE_PROTECT), LEVEL_UP_MOVE(34, MOVE_FLAMETHROWER), @@ -5990,8 +5989,8 @@ static const struct LevelUpMove sTorkoalLevelUpLearnset[] = { LEVEL_UP_MOVE(40, MOVE_AMNESIA), LEVEL_UP_MOVE(42, MOVE_FLAIL), LEVEL_UP_MOVE(45, MOVE_HEAT_WAVE), - //LEVEL_UP_MOVE(47, MOVE_SHELL_SMASH), - //LEVEL_UP_MOVE(50, MOVE_INFERNO), + LEVEL_UP_MOVE(47, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(50, MOVE_INFERNO), LEVEL_UP_END }; @@ -6003,18 +6002,18 @@ static const struct LevelUpMove sSableyeLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_ASTONISH), LEVEL_UP_MOVE(11, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(14, MOVE_DETECT), - //LEVEL_UP_MOVE(16, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(16, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(21, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE(24, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(24, MOVE_PUNISHMENT), LEVEL_UP_MOVE(26, MOVE_KNOCK_OFF), - //LEVEL_UP_MOVE(29, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE(29, MOVE_SHADOW_CLAW), LEVEL_UP_MOVE(31, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE(34, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(36, MOVE_POWER_GEM), + LEVEL_UP_MOVE(34, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(36, MOVE_POWER_GEM), LEVEL_UP_MOVE(39, MOVE_SHADOW_BALL), - //LEVEL_UP_MOVE(41, MOVE_FOUL_PLAY), - //LEVEL_UP_MOVE(44, MOVE_QUASH), + LEVEL_UP_MOVE(41, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(44, MOVE_QUASH), LEVEL_UP_MOVE(46, MOVE_MEAN_LOOK), LEVEL_UP_END }; @@ -6024,13 +6023,13 @@ static const struct LevelUpMove sBarboachLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 6, MOVE_WATER_SPORT), LEVEL_UP_MOVE( 9, MOVE_WATER_GUN), - //LEVEL_UP_MOVE(13, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(13, MOVE_MUD_BOMB), LEVEL_UP_MOVE(15, MOVE_AMNESIA), LEVEL_UP_MOVE(17, MOVE_WATER_PULSE), LEVEL_UP_MOVE(20, MOVE_MAGNITUDE), LEVEL_UP_MOVE(25, MOVE_REST), LEVEL_UP_MOVE(25, MOVE_SNORE), - //LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(32, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(35, MOVE_MUDDY_WATER), LEVEL_UP_MOVE(39, MOVE_FUTURE_SIGHT), @@ -6039,10 +6038,10 @@ static const struct LevelUpMove sBarboachLevelUpLearnset[] = { }; static const struct LevelUpMove sWhiscashLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_THRASH), + //LEVEL_UP_MOVE( 0, MOVE_THRASH), LEVEL_UP_MOVE( 1, MOVE_THRASH), - //LEVEL_UP_MOVE( 1, MOVE_BELCH), - //LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE( 1, MOVE_BELCH), + LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_TICKLE), LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), @@ -6051,13 +6050,13 @@ static const struct LevelUpMove sWhiscashLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 6, MOVE_WATER_SPORT), LEVEL_UP_MOVE( 9, MOVE_WATER_GUN), - //LEVEL_UP_MOVE(13, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(13, MOVE_MUD_BOMB), LEVEL_UP_MOVE(15, MOVE_AMNESIA), LEVEL_UP_MOVE(17, MOVE_WATER_PULSE), LEVEL_UP_MOVE(20, MOVE_MAGNITUDE), LEVEL_UP_MOVE(25, MOVE_REST), LEVEL_UP_MOVE(25, MOVE_SNORE), - //LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(34, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(39, MOVE_MUDDY_WATER), LEVEL_UP_MOVE(45, MOVE_FUTURE_SIGHT), @@ -6070,17 +6069,17 @@ static const struct LevelUpMove sLuvdiscLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CHARM), LEVEL_UP_MOVE( 4, MOVE_WATER_GUN), LEVEL_UP_MOVE( 7, MOVE_AGILITY), - //LEVEL_UP_MOVE( 9, MOVE_DRAINING_KISS), - //LEVEL_UP_MOVE(13, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE( 9, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(13, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(17, MOVE_WATER_PULSE), LEVEL_UP_MOVE(20, MOVE_ATTRACT), - //LEVEL_UP_MOVE(22, MOVE_HEART_STAMP), + LEVEL_UP_MOVE(22, MOVE_HEART_STAMP), LEVEL_UP_MOVE(26, MOVE_FLAIL), LEVEL_UP_MOVE(31, MOVE_SWEET_KISS), LEVEL_UP_MOVE(34, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(37, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(40, MOVE_AQUA_RING), - //LEVEL_UP_MOVE(42, MOVE_SOAK), + LEVEL_UP_MOVE(37, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(40, MOVE_AQUA_RING), + LEVEL_UP_MOVE(42, MOVE_SOAK), LEVEL_UP_MOVE(46, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(49, MOVE_SAFEGUARD), LEVEL_UP_END @@ -6093,10 +6092,10 @@ static const struct LevelUpMove sCorphishLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_LEER), LEVEL_UP_MOVE(14, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(17, MOVE_PROTECT), - //LEVEL_UP_MOVE(20, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(20, MOVE_DOUBLE_HIT), LEVEL_UP_MOVE(23, MOVE_KNOCK_OFF), - //LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(31, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(31, MOVE_RAZOR_SHELL), LEVEL_UP_MOVE(34, MOVE_TAUNT), LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(39, MOVE_CRUNCH), @@ -6106,7 +6105,7 @@ static const struct LevelUpMove sCorphishLevelUpLearnset[] = { }; static const struct LevelUpMove sCrawdauntLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SWIFT), + //LEVEL_UP_MOVE( 0, MOVE_SWIFT), LEVEL_UP_MOVE( 1, MOVE_SWIFT), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_HARDEN), @@ -6117,10 +6116,10 @@ static const struct LevelUpMove sCrawdauntLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_LEER), LEVEL_UP_MOVE(14, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(17, MOVE_PROTECT), - //LEVEL_UP_MOVE(20, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(20, MOVE_DOUBLE_HIT), LEVEL_UP_MOVE(23, MOVE_KNOCK_OFF), - //LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(32, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(32, MOVE_RAZOR_SHELL), LEVEL_UP_MOVE(36, MOVE_TAUNT), LEVEL_UP_MOVE(40, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(43, MOVE_CRUNCH), @@ -6137,7 +6136,7 @@ static const struct LevelUpMove sFeebasLevelUpLearnset[] = { }; static const struct LevelUpMove sMiloticLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_WATER_PULSE), + //LEVEL_UP_MOVE( 0, MOVE_WATER_PULSE), LEVEL_UP_MOVE( 1, MOVE_WATER_PULSE), LEVEL_UP_MOVE( 1, MOVE_WRAP), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -6145,16 +6144,16 @@ static const struct LevelUpMove sMiloticLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_REFRESH), LEVEL_UP_MOVE( 4, MOVE_WATER_SPORT), LEVEL_UP_MOVE( 7, MOVE_REFRESH), - //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(14, MOVE_TWISTER), - //LEVEL_UP_MOVE(17, MOVE_AQUA_RING), - //LEVEL_UP_MOVE(21, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(24, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(17, MOVE_AQUA_RING), + LEVEL_UP_MOVE(21, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(24, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE(27, MOVE_RECOVER), - //LEVEL_UP_MOVE(31, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(31, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(34, MOVE_ATTRACT), LEVEL_UP_MOVE(37, MOVE_SAFEGUARD), - //LEVEL_UP_MOVE(41, MOVE_COIL), + LEVEL_UP_MOVE(41, MOVE_COIL), LEVEL_UP_MOVE(44, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(47, MOVE_RAIN_DANCE), LEVEL_UP_END @@ -6165,11 +6164,11 @@ static const struct LevelUpMove sCarvanhaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 4, MOVE_RAGE), LEVEL_UP_MOVE( 8, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(11, MOVE_AQUA_JET), - //LEVEL_UP_MOVE(15, MOVE_ASSURANCE), + LEVEL_UP_MOVE(11, MOVE_AQUA_JET), + LEVEL_UP_MOVE(15, MOVE_ASSURANCE), LEVEL_UP_MOVE(18, MOVE_SCREECH), LEVEL_UP_MOVE(22, MOVE_SWAGGER), - //LEVEL_UP_MOVE(25, MOVE_ICE_FANG), + LEVEL_UP_MOVE(25, MOVE_ICE_FANG), LEVEL_UP_MOVE(29, MOVE_SCARY_FACE), LEVEL_UP_MOVE(32, MOVE_POISON_FANG), LEVEL_UP_MOVE(36, MOVE_CRUNCH), @@ -6179,28 +6178,28 @@ static const struct LevelUpMove sCarvanhaLevelUpLearnset[] = { }; static const struct LevelUpMove sSharpedoLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SLASH), + //LEVEL_UP_MOVE( 0, MOVE_SLASH), LEVEL_UP_MOVE( 1, MOVE_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_FEINT), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_RAGE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 4, MOVE_RAGE), LEVEL_UP_MOVE( 8, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(11, MOVE_AQUA_JET), - //LEVEL_UP_MOVE(15, MOVE_ASSURANCE), + LEVEL_UP_MOVE(11, MOVE_AQUA_JET), + LEVEL_UP_MOVE(15, MOVE_ASSURANCE), LEVEL_UP_MOVE(18, MOVE_SCREECH), LEVEL_UP_MOVE(22, MOVE_SWAGGER), - //LEVEL_UP_MOVE(25, MOVE_ICE_FANG), + LEVEL_UP_MOVE(25, MOVE_ICE_FANG), LEVEL_UP_MOVE(29, MOVE_SCARY_FACE), LEVEL_UP_MOVE(34, MOVE_POISON_FANG), LEVEL_UP_MOVE(40, MOVE_CRUNCH), LEVEL_UP_MOVE(45, MOVE_AGILITY), LEVEL_UP_MOVE(51, MOVE_SKULL_BASH), LEVEL_UP_MOVE(56, MOVE_TAUNT), - //LEVEL_UP_MOVE(62, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(62, MOVE_NIGHT_SLASH), LEVEL_UP_END }; @@ -6210,13 +6209,13 @@ static const struct LevelUpMove sTrapinchLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BIDE), LEVEL_UP_MOVE( 5, MOVE_MUD_SLAP), - //LEVEL_UP_MOVE( 8, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 8, MOVE_BULLDOZE), LEVEL_UP_MOVE(12, MOVE_SAND_TOMB), LEVEL_UP_MOVE(15, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(19, MOVE_DIG), LEVEL_UP_MOVE(22, MOVE_CRUNCH), - //LEVEL_UP_MOVE(26, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(29, MOVE_FEINT), + LEVEL_UP_MOVE(26, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(29, MOVE_FEINT), LEVEL_UP_MOVE(33, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(36, MOVE_SANDSTORM), LEVEL_UP_MOVE(40, MOVE_SUPERPOWER), @@ -6226,30 +6225,30 @@ static const struct LevelUpMove sTrapinchLevelUpLearnset[] = { }; static const struct LevelUpMove sVibravaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_DRAGON_BREATH), + //LEVEL_UP_MOVE( 0, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_SONIC_BOOM), LEVEL_UP_MOVE( 1, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BIDE), LEVEL_UP_MOVE( 5, MOVE_MUD_SLAP), - //LEVEL_UP_MOVE( 8, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 8, MOVE_BULLDOZE), LEVEL_UP_MOVE(12, MOVE_SAND_TOMB), LEVEL_UP_MOVE(15, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(19, MOVE_SUPERSONIC), LEVEL_UP_MOVE(22, MOVE_SCREECH), - //LEVEL_UP_MOVE(26, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(29, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(26, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(29, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(33, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(36, MOVE_SANDSTORM), LEVEL_UP_MOVE(40, MOVE_UPROAR), LEVEL_UP_MOVE(43, MOVE_HYPER_BEAM), - //LEVEL_UP_MOVE(47, MOVE_BOOMBURST), + LEVEL_UP_MOVE(47, MOVE_BOOMBURST), LEVEL_UP_END }; static const struct LevelUpMove sFlygonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_DRAGON_CLAW), + //LEVEL_UP_MOVE( 0, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE( 1, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_DRAGON_DANCE), @@ -6258,18 +6257,18 @@ static const struct LevelUpMove sFlygonLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BIDE), LEVEL_UP_MOVE( 5, MOVE_MUD_SLAP), - //LEVEL_UP_MOVE( 8, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 8, MOVE_BULLDOZE), LEVEL_UP_MOVE(12, MOVE_SAND_TOMB), LEVEL_UP_MOVE(15, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(19, MOVE_SUPERSONIC), LEVEL_UP_MOVE(22, MOVE_SCREECH), - //LEVEL_UP_MOVE(26, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(29, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(26, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(29, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE(33, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(36, MOVE_SANDSTORM), LEVEL_UP_MOVE(40, MOVE_UPROAR), LEVEL_UP_MOVE(43, MOVE_HYPER_BEAM), - //LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH), LEVEL_UP_END }; @@ -6279,23 +6278,23 @@ static const struct LevelUpMove sMakuhitaLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 7, MOVE_ARM_THRUST), LEVEL_UP_MOVE(10, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE(13, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(13, MOVE_FORCE_PALM), LEVEL_UP_MOVE(16, MOVE_WHIRLWIND), LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(22, MOVE_VITAL_THROW), LEVEL_UP_MOVE(25, MOVE_BELLY_DRUM), LEVEL_UP_MOVE(28, MOVE_SMELLING_SALTS), LEVEL_UP_MOVE(31, MOVE_SEISMIC_TOSS), - //LEVEL_UP_MOVE(34, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(34, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE(37, MOVE_ENDURE), - //LEVEL_UP_MOVE(40, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(40, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(43, MOVE_REVERSAL), - //LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM), LEVEL_UP_END }; static const struct LevelUpMove sHariyamaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_BRINE), + LEVEL_UP_MOVE( 1, MOVE_BRINE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), @@ -6303,18 +6302,18 @@ static const struct LevelUpMove sHariyamaLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 7, MOVE_ARM_THRUST), LEVEL_UP_MOVE(10, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE(13, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(13, MOVE_FORCE_PALM), LEVEL_UP_MOVE(16, MOVE_WHIRLWIND), LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(22, MOVE_VITAL_THROW), LEVEL_UP_MOVE(26, MOVE_BELLY_DRUM), LEVEL_UP_MOVE(30, MOVE_SMELLING_SALTS), LEVEL_UP_MOVE(34, MOVE_SEISMIC_TOSS), - //LEVEL_UP_MOVE(38, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(38, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE(42, MOVE_ENDURE), - //LEVEL_UP_MOVE(46, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(46, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(50, MOVE_REVERSAL), - //LEVEL_UP_MOVE(54, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(54, MOVE_HEAVY_SLAM), LEVEL_UP_END }; @@ -6326,19 +6325,19 @@ static const struct LevelUpMove sElectrikeLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(13, MOVE_SPARK), LEVEL_UP_MOVE(16, MOVE_ODOR_SLEUTH), - //LEVEL_UP_MOVE(19, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE(19, MOVE_THUNDER_FANG), LEVEL_UP_MOVE(24, MOVE_BITE), - //LEVEL_UP_MOVE(29, MOVE_DISCHARGE), + LEVEL_UP_MOVE(29, MOVE_DISCHARGE), LEVEL_UP_MOVE(34, MOVE_ROAR), - //LEVEL_UP_MOVE(39, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(39, MOVE_WILD_CHARGE), LEVEL_UP_MOVE(44, MOVE_CHARGE), LEVEL_UP_MOVE(49, MOVE_THUNDER), LEVEL_UP_END }; static const struct LevelUpMove sManectricLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -6348,14 +6347,14 @@ static const struct LevelUpMove sManectricLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(13, MOVE_SPARK), LEVEL_UP_MOVE(16, MOVE_ODOR_SLEUTH), - //LEVEL_UP_MOVE(19, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE(19, MOVE_THUNDER_FANG), LEVEL_UP_MOVE(24, MOVE_BITE), - //LEVEL_UP_MOVE(30, MOVE_DISCHARGE), + LEVEL_UP_MOVE(30, MOVE_DISCHARGE), LEVEL_UP_MOVE(36, MOVE_ROAR), - //LEVEL_UP_MOVE(42, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(42, MOVE_WILD_CHARGE), LEVEL_UP_MOVE(48, MOVE_CHARGE), LEVEL_UP_MOVE(54, MOVE_THUNDER), - //LEVEL_UP_MOVE(60, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE(60, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_END }; @@ -6365,10 +6364,10 @@ static const struct LevelUpMove sNumelLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_EMBER), LEVEL_UP_MOVE( 8, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(12, MOVE_MAGNITUDE), - //LEVEL_UP_MOVE(15, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(15, MOVE_FLAME_BURST), LEVEL_UP_MOVE(19, MOVE_AMNESIA), - //LEVEL_UP_MOVE(22, MOVE_LAVA_PLUME), - //LEVEL_UP_MOVE(26, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(22, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(26, MOVE_EARTH_POWER), LEVEL_UP_MOVE(29, MOVE_CURSE), LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(36, MOVE_YAWN), @@ -6379,7 +6378,7 @@ static const struct LevelUpMove sNumelLevelUpLearnset[] = { }; static const struct LevelUpMove sCameruptLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ROCK_SLIDE), + //LEVEL_UP_MOVE( 0, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE( 1, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE( 1, MOVE_FISSURE), LEVEL_UP_MOVE( 1, MOVE_ERUPTION), @@ -6390,10 +6389,10 @@ static const struct LevelUpMove sCameruptLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_EMBER), LEVEL_UP_MOVE( 8, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(12, MOVE_MAGNITUDE), - //LEVEL_UP_MOVE(15, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(15, MOVE_FLAME_BURST), LEVEL_UP_MOVE(19, MOVE_AMNESIA), - //LEVEL_UP_MOVE(22, MOVE_LAVA_PLUME), - //LEVEL_UP_MOVE(26, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(22, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(26, MOVE_EARTH_POWER), LEVEL_UP_MOVE(29, MOVE_CURSE), LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(39, MOVE_YAWN), @@ -6411,7 +6410,7 @@ static const struct LevelUpMove sSphealLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_ROLLOUT), LEVEL_UP_MOVE( 9, MOVE_ENCORE), LEVEL_UP_MOVE(13, MOVE_ICE_BALL), - //LEVEL_UP_MOVE(17, MOVE_BRINE), + LEVEL_UP_MOVE(17, MOVE_BRINE), LEVEL_UP_MOVE(21, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(26, MOVE_BODY_SLAM), LEVEL_UP_MOVE(31, MOVE_REST), @@ -6423,7 +6422,7 @@ static const struct LevelUpMove sSphealLevelUpLearnset[] = { }; static const struct LevelUpMove sSealeoLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SWAGGER), + //LEVEL_UP_MOVE( 0, MOVE_SWAGGER), LEVEL_UP_MOVE( 1, MOVE_SWAGGER), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), @@ -6432,7 +6431,7 @@ static const struct LevelUpMove sSealeoLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_ROLLOUT), LEVEL_UP_MOVE( 9, MOVE_ENCORE), LEVEL_UP_MOVE(13, MOVE_ICE_BALL), - //LEVEL_UP_MOVE(17, MOVE_BRINE), + LEVEL_UP_MOVE(17, MOVE_BRINE), LEVEL_UP_MOVE(21, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(26, MOVE_BODY_SLAM), LEVEL_UP_MOVE(31, MOVE_REST), @@ -6445,7 +6444,7 @@ static const struct LevelUpMove sSealeoLevelUpLearnset[] = { static const struct LevelUpMove sWalreinLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_ICE_FANG), - //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), + LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), LEVEL_UP_MOVE( 1, MOVE_SWAGGER), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), @@ -6455,7 +6454,7 @@ static const struct LevelUpMove sWalreinLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_ROLLOUT), LEVEL_UP_MOVE( 7, MOVE_ENCORE), LEVEL_UP_MOVE(13, MOVE_ICE_BALL), - //LEVEL_UP_MOVE(19, MOVE_BRINE), + LEVEL_UP_MOVE(19, MOVE_BRINE), LEVEL_UP_MOVE(19, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(25, MOVE_BODY_SLAM), LEVEL_UP_MOVE(31, MOVE_REST), @@ -6476,11 +6475,11 @@ static const struct LevelUpMove sCacneaLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_NEEDLE_ARM), LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(22, MOVE_INGRAIN), - //LEVEL_UP_MOVE(26, MOVE_PAYBACK), + LEVEL_UP_MOVE(26, MOVE_PAYBACK), LEVEL_UP_MOVE(30, MOVE_SPIKES), - //LEVEL_UP_MOVE(34, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(34, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(38, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(42, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(42, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(46, MOVE_COTTON_SPORE), LEVEL_UP_MOVE(50, MOVE_SANDSTORM), LEVEL_UP_MOVE(54, MOVE_DESTINY_BOND), @@ -6489,7 +6488,7 @@ static const struct LevelUpMove sCacneaLevelUpLearnset[] = { static const struct LevelUpMove sCacturneLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SPIKY_SHIELD), - //LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD), + LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD), LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND), LEVEL_UP_MOVE( 1, MOVE_REVENGE), LEVEL_UP_MOVE( 1, MOVE_POISON_STING), @@ -6503,11 +6502,11 @@ static const struct LevelUpMove sCacturneLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_NEEDLE_ARM), LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(22, MOVE_INGRAIN), - //LEVEL_UP_MOVE(26, MOVE_PAYBACK), + LEVEL_UP_MOVE(26, MOVE_PAYBACK), LEVEL_UP_MOVE(30, MOVE_SPIKES), - //LEVEL_UP_MOVE(35, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(35, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(38, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(49, MOVE_COTTON_SPORE), LEVEL_UP_MOVE(54, MOVE_SANDSTORM), LEVEL_UP_MOVE(59, MOVE_DESTINY_BOND), @@ -6518,13 +6517,13 @@ static const struct LevelUpMove sSnoruntLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM), - //LEVEL_UP_MOVE(10, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(10, MOVE_ICE_SHARD), LEVEL_UP_MOVE(14, MOVE_ICY_WIND), LEVEL_UP_MOVE(19, MOVE_BITE), - //LEVEL_UP_MOVE(23, MOVE_ICE_FANG), + LEVEL_UP_MOVE(23, MOVE_ICE_FANG), LEVEL_UP_MOVE(28, MOVE_HEADBUTT), LEVEL_UP_MOVE(32, MOVE_PROTECT), - //LEVEL_UP_MOVE(37, MOVE_FROST_BREATH), + LEVEL_UP_MOVE(37, MOVE_FROST_BREATH), LEVEL_UP_MOVE(41, MOVE_CRUNCH), LEVEL_UP_MOVE(46, MOVE_BLIZZARD), LEVEL_UP_MOVE(50, MOVE_HAIL), @@ -6533,20 +6532,20 @@ static const struct LevelUpMove sSnoruntLevelUpLearnset[] = { static const struct LevelUpMove sGlalieLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_FREEZE_DRY), - //LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY), LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD), LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), - //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), + LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM), - //LEVEL_UP_MOVE(10, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(10, MOVE_ICE_SHARD), LEVEL_UP_MOVE(14, MOVE_ICY_WIND), LEVEL_UP_MOVE(19, MOVE_BITE), - //LEVEL_UP_MOVE(23, MOVE_ICE_FANG), + LEVEL_UP_MOVE(23, MOVE_ICE_FANG), LEVEL_UP_MOVE(28, MOVE_HEADBUTT), LEVEL_UP_MOVE(32, MOVE_PROTECT), - //LEVEL_UP_MOVE(37, MOVE_FROST_BREATH), + LEVEL_UP_MOVE(37, MOVE_FROST_BREATH), LEVEL_UP_MOVE(41, MOVE_CRUNCH), LEVEL_UP_MOVE(48, MOVE_BLIZZARD), LEVEL_UP_MOVE(54, MOVE_HAIL), @@ -6555,46 +6554,46 @@ static const struct LevelUpMove sGlalieLevelUpLearnset[] = { }; static const struct LevelUpMove sLunatoneLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), - //LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK), - //LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), + LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), + LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK), + LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 5, MOVE_HYPNOSIS), - //LEVEL_UP_MOVE( 9, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE( 9, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(13, MOVE_PSYWAVE), - //LEVEL_UP_MOVE(17, MOVE_EMBARGO), + LEVEL_UP_MOVE(17, MOVE_EMBARGO), LEVEL_UP_MOVE(21, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(25, MOVE_COSMIC_POWER), LEVEL_UP_MOVE(29, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE(37, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(37, MOVE_STONE_EDGE), LEVEL_UP_MOVE(41, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(45, MOVE_EXPLOSION), - //LEVEL_UP_MOVE(49, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE(49, MOVE_MAGIC_ROOM), LEVEL_UP_END }; static const struct LevelUpMove sSolrockLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 5, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE( 9, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE( 9, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(13, MOVE_PSYWAVE), - //LEVEL_UP_MOVE(17, MOVE_EMBARGO), + LEVEL_UP_MOVE(17, MOVE_EMBARGO), LEVEL_UP_MOVE(21, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(25, MOVE_COSMIC_POWER), LEVEL_UP_MOVE(29, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE(37, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(37, MOVE_STONE_EDGE), LEVEL_UP_MOVE(41, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE(45, MOVE_EXPLOSION), - //LEVEL_UP_MOVE(49, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(49, MOVE_WONDER_ROOM), LEVEL_UP_END }; @@ -6620,21 +6619,21 @@ static const struct LevelUpMove sSpoinkLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_PSYCH_UP), LEVEL_UP_MOVE(18, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(21, MOVE_MAGIC_COAT), - //LEVEL_UP_MOVE(26, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(29, MOVE_POWER_GEM), + LEVEL_UP_MOVE(26, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(29, MOVE_POWER_GEM), LEVEL_UP_MOVE(29, MOVE_REST), LEVEL_UP_MOVE(33, MOVE_SNORE), - //LEVEL_UP_MOVE(38, MOVE_PSYSHOCK), - //LEVEL_UP_MOVE(40, MOVE_PAYBACK), + LEVEL_UP_MOVE(38, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(40, MOVE_PAYBACK), LEVEL_UP_MOVE(44, MOVE_PSYCHIC), LEVEL_UP_MOVE(50, MOVE_BOUNCE), LEVEL_UP_END }; static const struct LevelUpMove sGrumpigLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_TEETER_DANCE), + //LEVEL_UP_MOVE( 0, MOVE_TEETER_DANCE), LEVEL_UP_MOVE( 1, MOVE_TEETER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_BELCH), + LEVEL_UP_MOVE( 1, MOVE_BELCH), LEVEL_UP_MOVE( 1, MOVE_SPLASH), LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), @@ -6645,73 +6644,73 @@ static const struct LevelUpMove sGrumpigLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_PSYCH_UP), LEVEL_UP_MOVE(18, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(21, MOVE_MAGIC_COAT), - //LEVEL_UP_MOVE(26, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(29, MOVE_POWER_GEM), + LEVEL_UP_MOVE(26, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(29, MOVE_POWER_GEM), LEVEL_UP_MOVE(35, MOVE_REST), LEVEL_UP_MOVE(35, MOVE_SNORE), - //LEVEL_UP_MOVE(42, MOVE_PSYSHOCK), - //LEVEL_UP_MOVE(46, MOVE_PAYBACK), + LEVEL_UP_MOVE(42, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(46, MOVE_PAYBACK), LEVEL_UP_MOVE(52, MOVE_PSYCHIC), LEVEL_UP_MOVE(60, MOVE_BOUNCE), LEVEL_UP_END }; static const struct LevelUpMove sPlusleLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_NUZZLE), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_NUZZLE), + 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_BESTOW), + LEVEL_UP_MOVE(13, MOVE_BESTOW), LEVEL_UP_MOVE(16, MOVE_SWIFT), - //LEVEL_UP_MOVE(19, MOVE_ELECTRO_BALL), - //LEVEL_UP_MOVE(22, MOVE_COPYCAT), + 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(31, MOVE_DISCHARGE), + LEVEL_UP_MOVE(31, MOVE_DISCHARGE), LEVEL_UP_MOVE(34, MOVE_BATON_PASS), LEVEL_UP_MOVE(37, MOVE_AGILITY), - //LEVEL_UP_MOVE(40, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(40, MOVE_LAST_RESORT), LEVEL_UP_MOVE(43, MOVE_THUNDER), - //LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(49, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(49, MOVE_ENTRAINMENT), LEVEL_UP_END }; static const struct LevelUpMove sMinunLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_NUZZLE), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_NUZZLE), + 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_SWITCHEROO), + 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(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(31, MOVE_DISCHARGE), + LEVEL_UP_MOVE(31, MOVE_DISCHARGE), LEVEL_UP_MOVE(34, MOVE_BATON_PASS), LEVEL_UP_MOVE(37, MOVE_AGILITY), - //LEVEL_UP_MOVE(40, MOVE_TRUMP_CARD), + LEVEL_UP_MOVE(40, MOVE_TRUMP_CARD), LEVEL_UP_MOVE(43, MOVE_THUNDER), - //LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(49, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(49, MOVE_ENTRAINMENT), LEVEL_UP_END }; static const struct LevelUpMove sMawileLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE( 1, MOVE_TAUNT), + LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), + LEVEL_UP_MOVE( 1, MOVE_TAUNT), LEVEL_UP_MOVE( 1, MOVE_GROWL), - //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 5, MOVE_FAKE_TEARS), LEVEL_UP_MOVE( 9, MOVE_BITE), @@ -6721,12 +6720,12 @@ static const struct LevelUpMove sMawileLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_BATON_PASS), LEVEL_UP_MOVE(29, MOVE_CRUNCH), LEVEL_UP_MOVE(33, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(37, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(37, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(41, MOVE_STOCKPILE), LEVEL_UP_MOVE(41, MOVE_SWALLOW), LEVEL_UP_MOVE(41, MOVE_SPIT_UP), - //LEVEL_UP_MOVE(45, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(45, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH), LEVEL_UP_END }; @@ -6736,15 +6735,15 @@ static const struct LevelUpMove sMedititeLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_CONFUSION), LEVEL_UP_MOVE( 9, MOVE_DETECT), LEVEL_UP_MOVE(12, MOVE_ENDURE), - //LEVEL_UP_MOVE(15, MOVE_FEINT), - //LEVEL_UP_MOVE(17, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(15, MOVE_FEINT), + LEVEL_UP_MOVE(17, MOVE_FORCE_PALM), LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE(23, MOVE_CALM_MIND), LEVEL_UP_MOVE(25, MOVE_MIND_READER), LEVEL_UP_MOVE(28, MOVE_HIGH_JUMP_KICK), LEVEL_UP_MOVE(31, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE), - //LEVEL_UP_MOVE(36, MOVE_POWER_TRICK), + LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE), + LEVEL_UP_MOVE(36, MOVE_POWER_TRICK), LEVEL_UP_MOVE(39, MOVE_REVERSAL), LEVEL_UP_MOVE(41, MOVE_RECOVER), LEVEL_UP_MOVE(44, MOVE_COUNTER), @@ -6752,7 +6751,7 @@ static const struct LevelUpMove sMedititeLevelUpLearnset[] = { }; static const struct LevelUpMove sMedichamLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH), @@ -6764,15 +6763,15 @@ static const struct LevelUpMove sMedichamLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_CONFUSION), LEVEL_UP_MOVE( 9, MOVE_DETECT), LEVEL_UP_MOVE(12, MOVE_ENDURE), - //LEVEL_UP_MOVE(15, MOVE_FEINT), - //LEVEL_UP_MOVE(17, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(15, MOVE_FEINT), + LEVEL_UP_MOVE(17, MOVE_FORCE_PALM), LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE(23, MOVE_CALM_MIND), LEVEL_UP_MOVE(25, MOVE_MIND_READER), LEVEL_UP_MOVE(28, MOVE_HIGH_JUMP_KICK), LEVEL_UP_MOVE(31, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE), - //LEVEL_UP_MOVE(36, MOVE_POWER_TRICK), + LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE), + LEVEL_UP_MOVE(36, MOVE_POWER_TRICK), LEVEL_UP_MOVE(42, MOVE_REVERSAL), LEVEL_UP_MOVE(47, MOVE_RECOVER), LEVEL_UP_MOVE(53, MOVE_COUNTER), @@ -6786,25 +6785,25 @@ static const struct LevelUpMove sSwabluLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_SING), LEVEL_UP_MOVE( 7, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 9, MOVE_SAFEGUARD), - //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(14, MOVE_MIST), - //LEVEL_UP_MOVE(17, MOVE_ROUND), - //LEVEL_UP_MOVE(20, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(17, MOVE_ROUND), + LEVEL_UP_MOVE(20, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(23, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(26, MOVE_REFRESH), LEVEL_UP_MOVE(30, MOVE_MIRROR_MOVE), - //LEVEL_UP_MOVE(34, MOVE_COTTON_GUARD), - //LEVEL_UP_MOVE(38, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(34, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(38, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(42, MOVE_PERISH_SONG), - //LEVEL_UP_MOVE(46, MOVE_MOONBLAST), + LEVEL_UP_MOVE(46, MOVE_MOONBLAST), LEVEL_UP_END }; static const struct LevelUpMove sAltariaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_DRAGON_BREATH), + //LEVEL_UP_MOVE( 0, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_PLUCK), + LEVEL_UP_MOVE( 1, MOVE_PLUCK), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -6813,17 +6812,17 @@ static const struct LevelUpMove sAltariaLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_SING), LEVEL_UP_MOVE( 7, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 9, MOVE_SAFEGUARD), - //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(14, MOVE_MIST), - //LEVEL_UP_MOVE(17, MOVE_ROUND), - //LEVEL_UP_MOVE(20, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(17, MOVE_ROUND), + LEVEL_UP_MOVE(20, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(23, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(26, MOVE_REFRESH), LEVEL_UP_MOVE(30, MOVE_DRAGON_DANCE), - //LEVEL_UP_MOVE(34, MOVE_COTTON_GUARD), - //LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(34, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(46, MOVE_PERISH_SONG), - //LEVEL_UP_MOVE(52, MOVE_MOONBLAST), + LEVEL_UP_MOVE(52, MOVE_MOONBLAST), LEVEL_UP_MOVE(59, MOVE_SKY_ATTACK), LEVEL_UP_END }; @@ -6845,27 +6844,27 @@ static const struct LevelUpMove sDuskullLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_DISABLE), LEVEL_UP_MOVE( 9, MOVE_ASTONISH), LEVEL_UP_MOVE(14, MOVE_FORESIGHT), - //LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(22, MOVE_PURSUIT), LEVEL_UP_MOVE(25, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(30, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(33, MOVE_CURSE), - //LEVEL_UP_MOVE(38, MOVE_HEX), + LEVEL_UP_MOVE(38, MOVE_HEX), LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(46, MOVE_MEAN_LOOK), - //LEVEL_UP_MOVE(49, MOVE_PAYBACK), + LEVEL_UP_MOVE(49, MOVE_PAYBACK), LEVEL_UP_MOVE(54, MOVE_FUTURE_SIGHT), LEVEL_UP_END }; static const struct LevelUpMove sDusclopsLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH), + //LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT), 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_GRAVITY), LEVEL_UP_MOVE( 1, MOVE_BIND), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE), @@ -6874,15 +6873,15 @@ static const struct LevelUpMove sDusclopsLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_DISABLE), LEVEL_UP_MOVE( 9, MOVE_ASTONISH), LEVEL_UP_MOVE(14, MOVE_FORESIGHT), - //LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(22, MOVE_PURSUIT), LEVEL_UP_MOVE(25, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(30, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(33, MOVE_CURSE), - //LEVEL_UP_MOVE(40, MOVE_HEX), + LEVEL_UP_MOVE(40, MOVE_HEX), LEVEL_UP_MOVE(45, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(52, MOVE_MEAN_LOOK), - //LEVEL_UP_MOVE(57, MOVE_PAYBACK), + LEVEL_UP_MOVE(57, MOVE_PAYBACK), LEVEL_UP_MOVE(64, MOVE_FUTURE_SIGHT), LEVEL_UP_END }; @@ -6897,10 +6896,10 @@ static const struct LevelUpMove sRoseliaLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(22, MOVE_GRASS_WHISTLE), LEVEL_UP_MOVE(25, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(28, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(28, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE(31, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(34, MOVE_INGRAIN), - //LEVEL_UP_MOVE(37, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(37, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE(40, MOVE_TOXIC), LEVEL_UP_MOVE(43, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(46, MOVE_SYNTHESIS), @@ -6916,10 +6915,10 @@ static const struct LevelUpMove sSlakothLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(17, MOVE_AMNESIA), LEVEL_UP_MOVE(22, MOVE_COVET), - //LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(30, MOVE_COUNTER), LEVEL_UP_MOVE(33, MOVE_FLAIL), - //LEVEL_UP_MOVE(38, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(38, MOVE_PLAY_ROUGH), LEVEL_UP_END }; @@ -6934,7 +6933,7 @@ static const struct LevelUpMove sVigorothLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(17, MOVE_ENDURE), LEVEL_UP_MOVE(23, MOVE_SLASH), - //LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(33, MOVE_COUNTER), LEVEL_UP_MOVE(37, MOVE_FOCUS_PUNCH), LEVEL_UP_MOVE(43, MOVE_REVERSAL), @@ -6942,11 +6941,11 @@ static const struct LevelUpMove sVigorothLevelUpLearnset[] = { }; static const struct LevelUpMove sSlakingLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SWAGGER), + //LEVEL_UP_MOVE( 0, MOVE_SWAGGER), LEVEL_UP_MOVE( 1, MOVE_SWAGGER), - //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT), - //LEVEL_UP_MOVE( 1, MOVE_FLING), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT), + LEVEL_UP_MOVE( 1, MOVE_FLING), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_ENCORE), @@ -6956,12 +6955,12 @@ static const struct LevelUpMove sSlakingLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(17, MOVE_AMNESIA), LEVEL_UP_MOVE(23, MOVE_COVET), - //LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(33, MOVE_COUNTER), LEVEL_UP_MOVE(39, MOVE_FLAIL), - //LEVEL_UP_MOVE(47, MOVE_FLING), - //LEVEL_UP_MOVE(53, MOVE_PUNISHMENT), - //LEVEL_UP_MOVE(61, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(47, MOVE_FLING), + LEVEL_UP_MOVE(53, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(61, MOVE_HAMMER_ARM), LEVEL_UP_END }; @@ -6971,26 +6970,26 @@ static const struct LevelUpMove sGulpinLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_POISON_GAS), LEVEL_UP_MOVE(10, MOVE_SLUDGE), LEVEL_UP_MOVE(12, MOVE_AMNESIA), - //LEVEL_UP_MOVE(17, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(17, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(20, MOVE_ENCORE), LEVEL_UP_MOVE(25, MOVE_TOXIC), LEVEL_UP_MOVE(28, MOVE_STOCKPILE), LEVEL_UP_MOVE(28, MOVE_SPIT_UP), LEVEL_UP_MOVE(28, MOVE_SWALLOW), LEVEL_UP_MOVE(33, MOVE_SLUDGE_BOMB), - //LEVEL_UP_MOVE(36, MOVE_GASTRO_ACID), - //LEVEL_UP_MOVE(41, MOVE_BELCH), - //LEVEL_UP_MOVE(44, MOVE_WRING_OUT), - //LEVEL_UP_MOVE(49, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE(36, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(41, MOVE_BELCH), + LEVEL_UP_MOVE(44, MOVE_WRING_OUT), + LEVEL_UP_MOVE(49, MOVE_GUNK_SHOT), LEVEL_UP_END }; static const struct LevelUpMove sSwalotLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_BODY_SLAM), + //LEVEL_UP_MOVE( 0, MOVE_BODY_SLAM), LEVEL_UP_MOVE( 1, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE( 1, MOVE_GUNK_SHOT), - //LEVEL_UP_MOVE( 1, MOVE_WRING_OUT), + LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE( 1, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE( 1, MOVE_WRING_OUT), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), @@ -6999,22 +6998,22 @@ static const struct LevelUpMove sSwalotLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_POISON_GAS), LEVEL_UP_MOVE(10, MOVE_SLUDGE), LEVEL_UP_MOVE(12, MOVE_AMNESIA), - //LEVEL_UP_MOVE(17, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(17, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(20, MOVE_ENCORE), LEVEL_UP_MOVE(25, MOVE_TOXIC), LEVEL_UP_MOVE(30, MOVE_STOCKPILE), LEVEL_UP_MOVE(30, MOVE_SPIT_UP), LEVEL_UP_MOVE(30, MOVE_SWALLOW), LEVEL_UP_MOVE(37, MOVE_SLUDGE_BOMB), - //LEVEL_UP_MOVE(42, MOVE_GASTRO_ACID), - //LEVEL_UP_MOVE(49, MOVE_BELCH), - //LEVEL_UP_MOVE(54, MOVE_WRING_OUT), - //LEVEL_UP_MOVE(61, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE(42, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(49, MOVE_BELCH), + LEVEL_UP_MOVE(54, MOVE_WRING_OUT), + LEVEL_UP_MOVE(61, MOVE_GUNK_SHOT), LEVEL_UP_END }; static const struct LevelUpMove sTropiusLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), + LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_GROWTH), @@ -7023,20 +7022,20 @@ static const struct LevelUpMove sTropiusLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_STOMP), LEVEL_UP_MOVE(16, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(21, MOVE_WHIRLWIND), - //LEVEL_UP_MOVE(26, MOVE_LEAF_TORNADO), - //LEVEL_UP_MOVE(30, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE(36, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(26, MOVE_LEAF_TORNADO), + LEVEL_UP_MOVE(30, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(36, MOVE_AIR_SLASH), LEVEL_UP_MOVE(41, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(46, MOVE_BESTOW), + LEVEL_UP_MOVE(46, MOVE_BESTOW), LEVEL_UP_MOVE(50, MOVE_SYNTHESIS), LEVEL_UP_MOVE(56, MOVE_SOLAR_BEAM), - //LEVEL_UP_MOVE(61, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(61, MOVE_LEAF_STORM), LEVEL_UP_END }; static const struct LevelUpMove sWhismurLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), - //LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 8, MOVE_ASTONISH), LEVEL_UP_MOVE(11, MOVE_HOWL), LEVEL_UP_MOVE(15, MOVE_SCREECH), @@ -7047,18 +7046,18 @@ static const struct LevelUpMove sWhismurLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_REST), LEVEL_UP_MOVE(36, MOVE_SLEEP_TALK), LEVEL_UP_MOVE(39, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(43, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(43, MOVE_SYNCHRONOISE), LEVEL_UP_END }; static const struct LevelUpMove sLoudredLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_BITE), + //LEVEL_UP_MOVE( 0, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_POUND), - //LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_HOWL), - //LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 9, MOVE_ASTONISH), LEVEL_UP_MOVE(11, MOVE_HOWL), LEVEL_UP_MOVE(15, MOVE_SCREECH), @@ -7069,23 +7068,23 @@ static const struct LevelUpMove sLoudredLevelUpLearnset[] = { LEVEL_UP_MOVE(36, MOVE_REST), LEVEL_UP_MOVE(41, MOVE_SLEEP_TALK), LEVEL_UP_MOVE(45, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(50, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(50, MOVE_SYNCHRONOISE), LEVEL_UP_END }; static const struct LevelUpMove sExploudLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_CRUNCH), + //LEVEL_UP_MOVE( 0, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_BITE), - //LEVEL_UP_MOVE( 1, MOVE_BOOMBURST), - //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_BOOMBURST), + 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_POUND), - //LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_HOWL), - //LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 9, MOVE_ASTONISH), LEVEL_UP_MOVE(11, MOVE_HOWL), LEVEL_UP_MOVE(15, MOVE_SCREECH), @@ -7096,8 +7095,8 @@ static const struct LevelUpMove sExploudLevelUpLearnset[] = { LEVEL_UP_MOVE(36, MOVE_REST), LEVEL_UP_MOVE(42, MOVE_SLEEP_TALK), LEVEL_UP_MOVE(47, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(53, MOVE_SYNCHRONOISE), - //LEVEL_UP_MOVE(58, MOVE_BOOMBURST), + LEVEL_UP_MOVE(53, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(58, MOVE_BOOMBURST), LEVEL_UP_MOVE(64, MOVE_HYPER_BEAM), LEVEL_UP_END }; @@ -7107,7 +7106,7 @@ static const struct LevelUpMove sClamperlLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_WHIRLPOOL), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(50, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(50, MOVE_SHELL_SMASH), LEVEL_UP_END }; @@ -7118,14 +7117,14 @@ static const struct LevelUpMove sHuntailLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_SCARY_FACE), LEVEL_UP_MOVE(11, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(14, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(16, MOVE_ICE_FANG), - //LEVEL_UP_MOVE(19, MOVE_BRINE), - //LEVEL_UP_MOVE(23, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(16, MOVE_ICE_FANG), + LEVEL_UP_MOVE(19, MOVE_BRINE), + LEVEL_UP_MOVE(23, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(26, MOVE_DIVE), LEVEL_UP_MOVE(29, MOVE_BATON_PASS), LEVEL_UP_MOVE(34, MOVE_CRUNCH), - //LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(45, MOVE_COIL), + LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(45, MOVE_COIL), LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), LEVEL_UP_END }; @@ -7135,16 +7134,16 @@ static const struct LevelUpMove sGorebyssLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 5, MOVE_WATER_SPORT), LEVEL_UP_MOVE( 9, MOVE_AGILITY), - //LEVEL_UP_MOVE(11, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(11, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(14, MOVE_WATER_PULSE), LEVEL_UP_MOVE(16, MOVE_AMNESIA), - //LEVEL_UP_MOVE(19, MOVE_AQUA_RING), - //LEVEL_UP_MOVE(23, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(19, MOVE_AQUA_RING), + LEVEL_UP_MOVE(23, MOVE_CAPTIVATE), LEVEL_UP_MOVE(26, MOVE_DIVE), LEVEL_UP_MOVE(29, MOVE_BATON_PASS), LEVEL_UP_MOVE(34, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(45, MOVE_COIL), + LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(45, MOVE_COIL), LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), LEVEL_UP_END }; @@ -7153,7 +7152,7 @@ static const struct LevelUpMove sAbsolLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PERISH_SONG), LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - //LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_FEINT), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 4, MOVE_LEER), @@ -7164,11 +7163,11 @@ static const struct LevelUpMove sAbsolLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(22, MOVE_SLASH), LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(29, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(29, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(33, MOVE_DETECT), - //LEVEL_UP_MOVE(37, MOVE_PSYCHO_CUT), - //LEVEL_UP_MOVE(41, MOVE_ME_FIRST), - //LEVEL_UP_MOVE(45, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(37, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(41, MOVE_ME_FIRST), + LEVEL_UP_MOVE(45, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(49, MOVE_RAZOR_WIND), LEVEL_UP_MOVE(53, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(57, MOVE_PERISH_SONG), @@ -7180,23 +7179,23 @@ static const struct LevelUpMove sShuppetLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_SCREECH), LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(10, MOVE_SPITE), - //LEVEL_UP_MOVE(13, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(13, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(22, MOVE_HEX), + LEVEL_UP_MOVE(22, MOVE_HEX), LEVEL_UP_MOVE(26, MOVE_CURSE), LEVEL_UP_MOVE(30, MOVE_SHADOW_BALL), - //LEVEL_UP_MOVE(34, MOVE_EMBARGO), - //LEVEL_UP_MOVE(38, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(34, MOVE_EMBARGO), + LEVEL_UP_MOVE(38, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(42, MOVE_SNATCH), LEVEL_UP_MOVE(46, MOVE_GRUDGE), LEVEL_UP_MOVE(50, MOVE_TRICK), - //LEVEL_UP_MOVE(54, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(54, MOVE_PHANTOM_FORCE), LEVEL_UP_END }; static const struct LevelUpMove sBanetteLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF), LEVEL_UP_MOVE( 1, MOVE_SCREECH), LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE), @@ -7204,18 +7203,18 @@ static const struct LevelUpMove sBanetteLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_SCREECH), LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(10, MOVE_SPITE), - //LEVEL_UP_MOVE(13, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(13, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(22, MOVE_HEX), + LEVEL_UP_MOVE(22, MOVE_HEX), LEVEL_UP_MOVE(26, MOVE_CURSE), LEVEL_UP_MOVE(30, MOVE_SHADOW_BALL), - //LEVEL_UP_MOVE(34, MOVE_EMBARGO), - //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(34, MOVE_EMBARGO), + LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(46, MOVE_SNATCH), LEVEL_UP_MOVE(52, MOVE_GRUDGE), LEVEL_UP_MOVE(58, MOVE_TRICK), - //LEVEL_UP_MOVE(64, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(64, MOVE_PHANTOM_FORCE), LEVEL_UP_END }; @@ -7225,21 +7224,21 @@ static const struct LevelUpMove sSeviperLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_BITE), LEVEL_UP_MOVE( 6, MOVE_LICK), LEVEL_UP_MOVE( 9, MOVE_POISON_TAIL), - //LEVEL_UP_MOVE(11, MOVE_FEINT), + LEVEL_UP_MOVE(11, MOVE_FEINT), LEVEL_UP_MOVE(14, MOVE_SCREECH), - //LEVEL_UP_MOVE(16, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(16, MOVE_VENOSHOCK), LEVEL_UP_MOVE(19, MOVE_GLARE), LEVEL_UP_MOVE(21, MOVE_POISON_FANG), - //LEVEL_UP_MOVE(24, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(29, MOVE_GASTRO_ACID), - //LEVEL_UP_MOVE(31, MOVE_POISON_JAB), + LEVEL_UP_MOVE(24, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(29, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(31, MOVE_POISON_JAB), LEVEL_UP_MOVE(34, MOVE_HAZE), LEVEL_UP_MOVE(36, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(39, MOVE_CRUNCH), - //LEVEL_UP_MOVE(41, MOVE_BELCH), - //LEVEL_UP_MOVE(44, MOVE_COIL), - //LEVEL_UP_MOVE(46, MOVE_WRING_OUT), + LEVEL_UP_MOVE(41, MOVE_BELCH), + LEVEL_UP_MOVE(44, MOVE_COIL), + LEVEL_UP_MOVE(46, MOVE_WRING_OUT), LEVEL_UP_END }; @@ -7249,23 +7248,23 @@ static const struct LevelUpMove sZangooseLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 8, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(12, MOVE_PURSUIT), - //LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(19, MOVE_SLASH), LEVEL_UP_MOVE(22, MOVE_REVENGE), LEVEL_UP_MOVE(26, MOVE_CRUSH_CLAW), LEVEL_UP_MOVE(29, MOVE_FALSE_SWIPE), - //LEVEL_UP_MOVE(33, MOVE_EMBARGO), + LEVEL_UP_MOVE(33, MOVE_EMBARGO), LEVEL_UP_MOVE(36, MOVE_DETECT), - //LEVEL_UP_MOVE(40, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(40, MOVE_X_SCISSOR), LEVEL_UP_MOVE(43, MOVE_TAUNT), LEVEL_UP_MOVE(47, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; static const struct LevelUpMove sRelicanthLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FLAIL), - //LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), @@ -7280,7 +7279,7 @@ static const struct LevelUpMove sRelicanthLevelUpLearnset[] = { LEVEL_UP_MOVE(41, MOVE_REST), LEVEL_UP_MOVE(46, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(56, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(56, MOVE_HEAD_SMASH), LEVEL_UP_END }; @@ -7293,16 +7292,16 @@ static const struct LevelUpMove sAronLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(16, MOVE_PROTECT), LEVEL_UP_MOVE(19, MOVE_ROAR), - //LEVEL_UP_MOVE(22, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(22, MOVE_IRON_HEAD), LEVEL_UP_MOVE(25, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(31, MOVE_METAL_SOUND), LEVEL_UP_MOVE(34, MOVE_IRON_TAIL), LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(43, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE(49, MOVE_METAL_BURST), + LEVEL_UP_MOVE(43, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(49, MOVE_METAL_BURST), LEVEL_UP_END }; @@ -7317,16 +7316,16 @@ static const struct LevelUpMove sLaironLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(16, MOVE_PROTECT), LEVEL_UP_MOVE(19, MOVE_ROAR), - //LEVEL_UP_MOVE(22, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(22, MOVE_IRON_HEAD), LEVEL_UP_MOVE(25, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(31, MOVE_METAL_SOUND), LEVEL_UP_MOVE(35, MOVE_IRON_TAIL), LEVEL_UP_MOVE(39, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(47, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(51, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE(55, MOVE_METAL_BURST), + LEVEL_UP_MOVE(47, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(51, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(55, MOVE_METAL_BURST), LEVEL_UP_END }; @@ -7341,16 +7340,16 @@ static const struct LevelUpMove sAggronLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(16, MOVE_PROTECT), LEVEL_UP_MOVE(19, MOVE_ROAR), - //LEVEL_UP_MOVE(22, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(22, MOVE_IRON_HEAD), LEVEL_UP_MOVE(25, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(31, MOVE_METAL_SOUND), LEVEL_UP_MOVE(35, MOVE_IRON_TAIL), LEVEL_UP_MOVE(39, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(51, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(57, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE(63, MOVE_METAL_BURST), + LEVEL_UP_MOVE(51, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(57, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(63, MOVE_METAL_BURST), LEVEL_UP_END }; @@ -7367,7 +7366,7 @@ static const struct LevelUpMove sCastformLevelUpLearnset[] = { LEVEL_UP_MOVE(35, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(35, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(35, MOVE_BLIZZARD), - //LEVEL_UP_MOVE(45, MOVE_HURRICANE), + LEVEL_UP_MOVE(45, MOVE_HURRICANE), LEVEL_UP_END }; @@ -7377,37 +7376,37 @@ static const struct LevelUpMove sVolbeatLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 8, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(12, MOVE_QUICK_ATTACK), - //LEVEL_UP_MOVE(15, MOVE_STRUGGLE_BUG), + 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_SIGNAL_BEAM), LEVEL_UP_MOVE(29, MOVE_PROTECT), - //LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT), + 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(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(50, MOVE_INFESTATION), LEVEL_UP_END }; static const struct LevelUpMove sIllumiseLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_SWEET_SCENT), LEVEL_UP_MOVE( 9, MOVE_CHARM), LEVEL_UP_MOVE(12, MOVE_QUICK_ATTACK), - //LEVEL_UP_MOVE(15, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(15, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE(19, MOVE_MOONLIGHT), LEVEL_UP_MOVE(22, MOVE_WISH), LEVEL_UP_MOVE(26, MOVE_ENCORE), LEVEL_UP_MOVE(29, MOVE_FLATTER), - //LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT), + 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(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(50, MOVE_INFESTATION), LEVEL_UP_END }; @@ -7418,20 +7417,20 @@ static const struct LevelUpMove sLileepLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_INGRAIN), LEVEL_UP_MOVE(13, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(17, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(21, MOVE_BRINE), + LEVEL_UP_MOVE(21, MOVE_BRINE), LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(31, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(31, MOVE_GASTRO_ACID), LEVEL_UP_MOVE(36, MOVE_AMNESIA), - //LEVEL_UP_MOVE(41, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(41, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(46, MOVE_STOCKPILE), LEVEL_UP_MOVE(46, MOVE_SPIT_UP), LEVEL_UP_MOVE(46, MOVE_SWALLOW), - //LEVEL_UP_MOVE(52, MOVE_WRING_OUT), + LEVEL_UP_MOVE(52, MOVE_WRING_OUT), LEVEL_UP_END }; static const struct LevelUpMove sCradilyLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_WRING_OUT), + LEVEL_UP_MOVE( 1, MOVE_WRING_OUT), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), LEVEL_UP_MOVE( 1, MOVE_ACID), @@ -7440,15 +7439,15 @@ static const struct LevelUpMove sCradilyLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_INGRAIN), LEVEL_UP_MOVE(13, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(17, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(21, MOVE_BRINE), + LEVEL_UP_MOVE(21, MOVE_BRINE), LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(31, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(31, MOVE_GASTRO_ACID), LEVEL_UP_MOVE(36, MOVE_AMNESIA), - //LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(52, MOVE_STOCKPILE), LEVEL_UP_MOVE(52, MOVE_SPIT_UP), LEVEL_UP_MOVE(52, MOVE_SWALLOW), - //LEVEL_UP_MOVE(61, MOVE_WRING_OUT), + LEVEL_UP_MOVE(61, MOVE_WRING_OUT), LEVEL_UP_END }; @@ -7458,14 +7457,14 @@ static const struct LevelUpMove sAnorithLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 7, MOVE_WATER_GUN), LEVEL_UP_MOVE(10, MOVE_FURY_CUTTER), - //LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(17, MOVE_METAL_CLAW), LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(25, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(29, MOVE_BRINE), + LEVEL_UP_MOVE(25, MOVE_BUG_BITE), + LEVEL_UP_MOVE(29, MOVE_BRINE), LEVEL_UP_MOVE(34, MOVE_SLASH), LEVEL_UP_MOVE(39, MOVE_CRUSH_CLAW), - //LEVEL_UP_MOVE(44, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(44, MOVE_X_SCISSOR), LEVEL_UP_MOVE(49, MOVE_PROTECT), LEVEL_UP_MOVE(55, MOVE_ROCK_BLAST), LEVEL_UP_END @@ -7479,14 +7478,14 @@ static const struct LevelUpMove sArmaldoLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 7, MOVE_WATER_GUN), LEVEL_UP_MOVE(10, MOVE_FURY_CUTTER), - //LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(17, MOVE_METAL_CLAW), LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(25, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(29, MOVE_BRINE), + LEVEL_UP_MOVE(25, MOVE_BUG_BITE), + LEVEL_UP_MOVE(29, MOVE_BRINE), LEVEL_UP_MOVE(34, MOVE_SLASH), LEVEL_UP_MOVE(39, MOVE_CRUSH_CLAW), - //LEVEL_UP_MOVE(46, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(46, MOVE_X_SCISSOR), LEVEL_UP_MOVE(53, MOVE_PROTECT), LEVEL_UP_MOVE(61, MOVE_ROCK_BLAST), LEVEL_UP_END @@ -7497,11 +7496,11 @@ static const struct LevelUpMove sRaltsLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_CONFUSION), LEVEL_UP_MOVE( 6, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 9, MOVE_TELEPORT), - //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), - //LEVEL_UP_MOVE(14, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(14, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(17, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE), - //LEVEL_UP_MOVE(22, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(22, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(24, MOVE_CALM_MIND), LEVEL_UP_MOVE(27, MOVE_PSYCHIC), LEVEL_UP_MOVE(29, MOVE_IMPRISON), @@ -7509,7 +7508,7 @@ static const struct LevelUpMove sRaltsLevelUpLearnset[] = { LEVEL_UP_MOVE(34, MOVE_CHARM), LEVEL_UP_MOVE(37, MOVE_HYPNOSIS), LEVEL_UP_MOVE(39, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(42, MOVE_STORED_POWER), + LEVEL_UP_MOVE(42, MOVE_STORED_POWER), LEVEL_UP_END }; @@ -7521,11 +7520,11 @@ static const struct LevelUpMove sKirliaLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_CONFUSION), LEVEL_UP_MOVE( 6, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 9, MOVE_TELEPORT), - //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), - //LEVEL_UP_MOVE(14, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(14, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(17, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE), - //LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(26, MOVE_CALM_MIND), LEVEL_UP_MOVE(30, MOVE_PSYCHIC), LEVEL_UP_MOVE(33, MOVE_IMPRISON), @@ -7533,15 +7532,15 @@ static const struct LevelUpMove sKirliaLevelUpLearnset[] = { LEVEL_UP_MOVE(40, MOVE_CHARM), LEVEL_UP_MOVE(44, MOVE_HYPNOSIS), LEVEL_UP_MOVE(47, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(51, MOVE_STORED_POWER), + LEVEL_UP_MOVE(51, MOVE_STORED_POWER), LEVEL_UP_END }; static const struct LevelUpMove sGardevoirLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), - //LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), - //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), + LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), + LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), + LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), @@ -7549,20 +7548,20 @@ static const struct LevelUpMove sGardevoirLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_CONFUSION), LEVEL_UP_MOVE( 6, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 9, MOVE_TELEPORT), - //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(14, MOVE_WISH), LEVEL_UP_MOVE(17, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE), - //LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(26, MOVE_CALM_MIND), LEVEL_UP_MOVE(31, MOVE_PSYCHIC), LEVEL_UP_MOVE(35, MOVE_IMPRISON), LEVEL_UP_MOVE(40, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(44, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(44, MOVE_CAPTIVATE), LEVEL_UP_MOVE(49, MOVE_HYPNOSIS), LEVEL_UP_MOVE(53, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(58, MOVE_STORED_POWER), - //LEVEL_UP_MOVE(62, MOVE_MOONBLAST), + LEVEL_UP_MOVE(58, MOVE_STORED_POWER), + LEVEL_UP_MOVE(62, MOVE_MOONBLAST), LEVEL_UP_END }; @@ -7576,7 +7575,7 @@ static const struct LevelUpMove sBagonLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(25, MOVE_CRUNCH), LEVEL_UP_MOVE(29, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(34, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(34, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(39, MOVE_SCARY_FACE), LEVEL_UP_MOVE(44, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), @@ -7584,7 +7583,7 @@ static const struct LevelUpMove sBagonLevelUpLearnset[] = { }; static const struct LevelUpMove sShelgonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_PROTECT), + //LEVEL_UP_MOVE( 0, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_RAGE), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -7598,7 +7597,7 @@ static const struct LevelUpMove sShelgonLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(25, MOVE_CRUNCH), LEVEL_UP_MOVE(29, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(42, MOVE_SCARY_FACE), LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(56, MOVE_DOUBLE_EDGE), @@ -7606,12 +7605,12 @@ static const struct LevelUpMove sShelgonLevelUpLearnset[] = { }; static const struct LevelUpMove sSalamenceLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_FLY), + //LEVEL_UP_MOVE( 0, MOVE_FLY), LEVEL_UP_MOVE( 1, MOVE_FLY), LEVEL_UP_MOVE( 1, MOVE_PROTECT), - //LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL), - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), - //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_RAGE), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -7624,7 +7623,7 @@ static const struct LevelUpMove sSalamenceLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(25, MOVE_CRUNCH), LEVEL_UP_MOVE(29, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(42, MOVE_SCARY_FACE), LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(63, MOVE_DOUBLE_EDGE), @@ -7637,16 +7636,16 @@ static const struct LevelUpMove sBeldumLevelUpLearnset[] = { }; static const struct LevelUpMove sMetangLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_CONFUSION), - LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW), + //LEVEL_UP_MOVE( 0, MOVE_CONFUSION), + //LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), - //LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(23, MOVE_PURSUIT), - //LEVEL_UP_MOVE(26, MOVE_BULLET_PUNCH), - //LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE), - //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(26, MOVE_BULLET_PUNCH), + LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(35, MOVE_SCARY_FACE), LEVEL_UP_MOVE(38, MOVE_PSYCHIC), LEVEL_UP_MOVE(41, MOVE_AGILITY), @@ -7658,15 +7657,15 @@ 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_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), - //LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(23, MOVE_PURSUIT), - //LEVEL_UP_MOVE(26, MOVE_BULLET_PUNCH), - //LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE), - //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(26, MOVE_BULLET_PUNCH), + LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(35, MOVE_SCARY_FACE), LEVEL_UP_MOVE(38, MOVE_PSYCHIC), LEVEL_UP_MOVE(41, MOVE_AGILITY), @@ -7680,16 +7679,16 @@ static const struct LevelUpMove sRegirockLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), LEVEL_UP_MOVE( 7, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE(19, MOVE_BULLDOZE), + LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(19, MOVE_BULLDOZE), LEVEL_UP_MOVE(25, MOVE_CURSE), LEVEL_UP_MOVE(31, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(43, MOVE_STONE_EDGE), - //LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(43, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(55, MOVE_LOCK_ON), LEVEL_UP_MOVE(55, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(61, MOVE_SUPERPOWER), @@ -7701,16 +7700,16 @@ static const struct LevelUpMove sRegiceLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_ICY_WIND), - //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), LEVEL_UP_MOVE( 7, MOVE_ICY_WIND), - //LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE(19, MOVE_BULLDOZE), + LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(19, MOVE_BULLDOZE), LEVEL_UP_MOVE(25, MOVE_CURSE), LEVEL_UP_MOVE(31, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(37, MOVE_AMNESIA), LEVEL_UP_MOVE(43, MOVE_ICE_BEAM), - //LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(55, MOVE_LOCK_ON), LEVEL_UP_MOVE(55, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(61, MOVE_SUPERPOWER), @@ -7722,18 +7721,18 @@ static const struct LevelUpMove sRegisteelLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), - //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), LEVEL_UP_MOVE( 7, MOVE_METAL_CLAW), - //LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE(19, MOVE_BULLDOZE), + LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(19, MOVE_BULLDOZE), LEVEL_UP_MOVE(25, MOVE_CURSE), LEVEL_UP_MOVE(31, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(37, MOVE_AMNESIA), - //LEVEL_UP_MOVE(43, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(43, MOVE_FLASH_CANNON), - //LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(43, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(43, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(55, MOVE_LOCK_ON), LEVEL_UP_MOVE(55, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(61, MOVE_SUPERPOWER), @@ -7745,11 +7744,11 @@ static const struct LevelUpMove sKyogreLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_WATER_PULSE), LEVEL_UP_MOVE( 5, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(15, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(15, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(20, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(30, MOVE_AQUA_RING), + LEVEL_UP_MOVE(30, MOVE_AQUA_RING), LEVEL_UP_MOVE(35, MOVE_ICE_BEAM), - //LEVEL_UP_MOVE(45, MOVE_ORIGIN_PULSE), + LEVEL_UP_MOVE(45, MOVE_ORIGIN_PULSE), LEVEL_UP_MOVE(50, MOVE_CALM_MIND), LEVEL_UP_MOVE(60, MOVE_MUDDY_WATER), LEVEL_UP_MOVE(65, MOVE_SHEER_COLD), @@ -7763,16 +7762,16 @@ static const struct LevelUpMove sGroudonLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), LEVEL_UP_MOVE( 5, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(15, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(20, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(15, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(20, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(30, MOVE_REST), LEVEL_UP_MOVE(35, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE(45, MOVE_PRECIPICE_BLADES), + LEVEL_UP_MOVE(45, MOVE_PRECIPICE_BLADES), LEVEL_UP_MOVE(50, MOVE_BULK_UP), LEVEL_UP_MOVE(60, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE(65, MOVE_FISSURE), LEVEL_UP_MOVE(75, MOVE_FIRE_BLAST), - //LEVEL_UP_MOVE(80, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(80, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(90, MOVE_ERUPTION), LEVEL_UP_END }; @@ -7782,10 +7781,10 @@ static const struct LevelUpMove sRayquazaLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_SCARY_FACE), LEVEL_UP_MOVE(15, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(20, MOVE_CRUNCH), - //LEVEL_UP_MOVE(30, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(30, MOVE_AIR_SLASH), LEVEL_UP_MOVE(35, MOVE_REST), LEVEL_UP_MOVE(45, MOVE_EXTREME_SPEED), - //LEVEL_UP_MOVE(50, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(50, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(60, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(65, MOVE_FLY), LEVEL_UP_MOVE(75, MOVE_HYPER_VOICE), @@ -7795,49 +7794,49 @@ static const struct LevelUpMove sRayquazaLevelUpLearnset[] = { }; static const struct LevelUpMove sLatiasLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), + LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_WISH), LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), LEVEL_UP_MOVE( 4, MOVE_WATER_SPORT), LEVEL_UP_MOVE( 7, MOVE_CHARM), - //LEVEL_UP_MOVE(10, MOVE_STORED_POWER), + LEVEL_UP_MOVE(10, MOVE_STORED_POWER), LEVEL_UP_MOVE(13, MOVE_REFRESH), - //LEVEL_UP_MOVE(16, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(16, MOVE_HEAL_PULSE), LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(24, MOVE_MIST_BALL), - //LEVEL_UP_MOVE(28, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(28, MOVE_PSYCHO_SHIFT), LEVEL_UP_MOVE(32, MOVE_RECOVER), - //LEVEL_UP_MOVE(36, MOVE_REFLECT_TYPE), - //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(46, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(36, MOVE_REFLECT_TYPE), + LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(46, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(51, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(61, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(61, MOVE_HEALING_WISH), LEVEL_UP_END }; static const struct LevelUpMove sLatiosLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MEMENTO), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK), LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), LEVEL_UP_MOVE( 4, MOVE_PROTECT), LEVEL_UP_MOVE( 7, MOVE_DRAGON_DANCE), - //LEVEL_UP_MOVE(10, MOVE_STORED_POWER), + LEVEL_UP_MOVE(10, MOVE_STORED_POWER), LEVEL_UP_MOVE(13, MOVE_REFRESH), - //LEVEL_UP_MOVE(16, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(16, MOVE_HEAL_PULSE), LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(24, MOVE_LUSTER_PURGE), - //LEVEL_UP_MOVE(28, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(28, MOVE_PSYCHO_SHIFT), LEVEL_UP_MOVE(32, MOVE_RECOVER), - //LEVEL_UP_MOVE(36, MOVE_TELEKINESIS), - //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(46, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(36, MOVE_TELEKINESIS), + LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(46, MOVE_POWER_SPLIT), LEVEL_UP_MOVE(51, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(61, MOVE_MEMENTO), LEVEL_UP_END }; @@ -7850,14 +7849,14 @@ static const struct LevelUpMove sJirachiLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_HELPING_HAND), LEVEL_UP_MOVE(20, MOVE_PSYCHIC), LEVEL_UP_MOVE(25, MOVE_REFRESH), - //LEVEL_UP_MOVE(30, MOVE_LUCKY_CHANT), - //LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(30, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(45, MOVE_GRAVITY), - //LEVEL_UP_MOVE(50, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(45, MOVE_GRAVITY), + LEVEL_UP_MOVE(50, MOVE_HEALING_WISH), LEVEL_UP_MOVE(55, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(60, MOVE_COSMIC_POWER), - //LEVEL_UP_MOVE(65, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(65, MOVE_LAST_RESORT), LEVEL_UP_MOVE(70, MOVE_DOOM_DESIRE), LEVEL_UP_END }; @@ -7871,8 +7870,8 @@ static const struct LevelUpMove sDeoxysLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_PURSUIT), LEVEL_UP_MOVE(31, MOVE_PSYCHIC), LEVEL_UP_MOVE(37, MOVE_SNATCH), - //LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), - //LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(55, MOVE_COSMIC_POWER), LEVEL_UP_MOVE(61, MOVE_RECOVER), LEVEL_UP_MOVE(67, MOVE_PSYCHO_BOOST), @@ -7881,8 +7880,8 @@ static const struct LevelUpMove sDeoxysLevelUpLearnset[] = { }; static const struct LevelUpMove sChimechoLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), - //LEVEL_UP_MOVE( 1, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), + LEVEL_UP_MOVE( 1, MOVE_SYNCHRONOISE), LEVEL_UP_MOVE( 1, MOVE_WRAP), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -7898,12 +7897,13 @@ static const struct LevelUpMove sChimechoLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_UPROAR), 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_SYNCHRONOISE), - //LEVEL_UP_MOVE(57, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(47, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(52, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(57, MOVE_HEALING_WISH), LEVEL_UP_END }; +#if P_NEW_POKEMON == TRUE static const struct LevelUpMove sTurtwigLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_WITHDRAW), @@ -7916,7 +7916,7 @@ static const struct LevelUpMove sTurtwigLevelUpLearnset[] = { LEVEL_UP_MOVE(33, MOVE_SYNTHESIS), LEVEL_UP_MOVE(37, MOVE_CRUNCH), LEVEL_UP_MOVE(41, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(45, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(45, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -7934,14 +7934,14 @@ static const struct LevelUpMove sGrotleLevelUpLearnset[] = { LEVEL_UP_MOVE(37, MOVE_SYNTHESIS), LEVEL_UP_MOVE(42, MOVE_CRUNCH), LEVEL_UP_MOVE(47, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(52, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(52, MOVE_LEAF_STORM), LEVEL_UP_END }; static const struct LevelUpMove sTorterraLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_EARTHQUAKE), + //LEVEL_UP_MOVE( 0, MOVE_EARTHQUAKE), LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), + 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), @@ -7956,7 +7956,7 @@ static const struct LevelUpMove sTorterraLevelUpLearnset[] = { LEVEL_UP_MOVE(39, MOVE_SYNTHESIS), LEVEL_UP_MOVE(45, MOVE_CRUNCH), LEVEL_UP_MOVE(51, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(57, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(57, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -7967,18 +7967,18 @@ static const struct LevelUpMove sChimcharLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_TAUNT), LEVEL_UP_MOVE(15, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(17, MOVE_FLAME_WHEEL), - //LEVEL_UP_MOVE(23, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(23, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(25, MOVE_TORMENT), LEVEL_UP_MOVE(31, MOVE_FACADE), LEVEL_UP_MOVE(33, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(39, MOVE_ACROBATICS), + LEVEL_UP_MOVE(39, MOVE_ACROBATICS), LEVEL_UP_MOVE(41, MOVE_SLACK_OFF), LEVEL_UP_MOVE(47, MOVE_FLAMETHROWER), LEVEL_UP_END }; static const struct LevelUpMove sMonfernoLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH), + //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), @@ -7987,21 +7987,21 @@ static const struct LevelUpMove sMonfernoLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_TAUNT), LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(19, MOVE_FLAME_WHEEL), - //LEVEL_UP_MOVE(26, MOVE_FEINT), + LEVEL_UP_MOVE(26, MOVE_FEINT), LEVEL_UP_MOVE(29, MOVE_TORMENT), - //LEVEL_UP_MOVE(36, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(36, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(39, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(46, MOVE_ACROBATICS), + LEVEL_UP_MOVE(46, MOVE_ACROBATICS), LEVEL_UP_MOVE(49, MOVE_SLACK_OFF), - //LEVEL_UP_MOVE(56, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(56, MOVE_FLARE_BLITZ), LEVEL_UP_END }; static const struct LevelUpMove sInfernapeLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_CLOSE_COMBAT), - //LEVEL_UP_MOVE( 1, 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_FLARE_BLITZ), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -8010,12 +8010,12 @@ static const struct LevelUpMove sInfernapeLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_TAUNT), 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_PUNISHMENT), + LEVEL_UP_MOVE(26, MOVE_FEINT), + LEVEL_UP_MOVE(29, MOVE_PUNISHMENT), LEVEL_UP_MOVE(42, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(52, MOVE_ACROBATICS), + LEVEL_UP_MOVE(52, MOVE_ACROBATICS), LEVEL_UP_MOVE(58, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(68, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(68, MOVE_FLARE_BLITZ), LEVEL_UP_END }; @@ -8028,7 +8028,7 @@ static const struct LevelUpMove sPiplupLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(22, MOVE_BIDE), LEVEL_UP_MOVE(25, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(29, MOVE_BRINE), + LEVEL_UP_MOVE(29, MOVE_BRINE), LEVEL_UP_MOVE(32, MOVE_WHIRLPOOL), LEVEL_UP_MOVE(36, MOVE_MIST), LEVEL_UP_MOVE(39, MOVE_DRILL_PECK), @@ -8037,7 +8037,7 @@ static const struct LevelUpMove sPiplupLevelUpLearnset[] = { }; static const struct LevelUpMove sPrinplupLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW), + //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), @@ -8049,7 +8049,7 @@ static const struct LevelUpMove sPrinplupLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(24, MOVE_BIDE), LEVEL_UP_MOVE(28, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(33, MOVE_BRINE), + LEVEL_UP_MOVE(33, MOVE_BRINE), LEVEL_UP_MOVE(37, MOVE_WHIRLPOOL), LEVEL_UP_MOVE(42, MOVE_MIST), LEVEL_UP_MOVE(46, MOVE_DRILL_PECK), @@ -8059,7 +8059,7 @@ 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_AQUA_JET), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -8071,7 +8071,7 @@ static const struct LevelUpMove sEmpoleonLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(24, MOVE_SWAGGER), LEVEL_UP_MOVE(28, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(33, MOVE_BRINE), + LEVEL_UP_MOVE(33, MOVE_BRINE), LEVEL_UP_MOVE(39, MOVE_WHIRLPOOL), LEVEL_UP_MOVE(46, MOVE_MIST), LEVEL_UP_MOVE(52, MOVE_DRILL_PECK), @@ -8090,8 +8090,8 @@ static const struct LevelUpMove sStarlyLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(33, MOVE_AGILITY), - //LEVEL_UP_MOVE(37, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE(41, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(37, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(41, MOVE_FINAL_GAMBIT), LEVEL_UP_END }; @@ -8107,14 +8107,14 @@ static const struct LevelUpMove sStaraviaLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(33, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(38, MOVE_AGILITY), - //LEVEL_UP_MOVE(43, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE(48, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(43, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(48, MOVE_FINAL_GAMBIT), LEVEL_UP_END }; static const struct LevelUpMove sStaraptorLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_CLOSE_COMBAT), - //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -8127,8 +8127,8 @@ static const struct LevelUpMove sStaraptorLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(33, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(41, MOVE_AGILITY), - //LEVEL_UP_MOVE(49, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE(57, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(49, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(57, MOVE_FINAL_GAMBIT), LEVEL_UP_END }; @@ -8151,10 +8151,10 @@ static const struct LevelUpMove sBidoofLevelUpLearnset[] = { }; static const struct LevelUpMove sBibarelLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_WATER_GUN), + //LEVEL_UP_MOVE( 0, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), - //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), + LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 5, MOVE_DEFENSE_CURL), @@ -8175,13 +8175,13 @@ static const struct LevelUpMove sBibarelLevelUpLearnset[] = { static const struct LevelUpMove sKricketotLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_BIDE), - //LEVEL_UP_MOVE( 6, MOVE_STRUGGLE_BUG), - //LEVEL_UP_MOVE(16, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 6, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(16, MOVE_BUG_BITE), LEVEL_UP_END }; static const struct LevelUpMove sKricketuneLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER), + //LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_BIDE), @@ -8189,13 +8189,13 @@ static const struct LevelUpMove sKricketuneLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_SING), LEVEL_UP_MOVE(22, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(26, MOVE_SLASH), - //LEVEL_UP_MOVE(30, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(30, MOVE_X_SCISSOR), LEVEL_UP_MOVE(34, MOVE_SCREECH), - //LEVEL_UP_MOVE(36, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(36, MOVE_FELL_STINGER), LEVEL_UP_MOVE(38, MOVE_TAUNT), - //LEVEL_UP_MOVE(42, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(44, MOVE_STICKY_WEB), - //LEVEL_UP_MOVE(46, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(42, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(44, MOVE_STICKY_WEB), + LEVEL_UP_MOVE(46, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(50, MOVE_PERISH_SONG), LEVEL_UP_END }; @@ -8204,16 +8204,16 @@ static const struct LevelUpMove sShinxLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_LEER), LEVEL_UP_MOVE( 9, MOVE_CHARGE), - //LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_SPARK), LEVEL_UP_MOVE(17, MOVE_BITE), LEVEL_UP_MOVE(21, MOVE_ROAR), LEVEL_UP_MOVE(25, MOVE_SWAGGER), - //LEVEL_UP_MOVE(29, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE(29, MOVE_THUNDER_FANG), LEVEL_UP_MOVE(33, MOVE_CRUNCH), LEVEL_UP_MOVE(37, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(41, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(45, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(41, MOVE_DISCHARGE), + LEVEL_UP_MOVE(45, MOVE_WILD_CHARGE), LEVEL_UP_END }; @@ -8226,16 +8226,16 @@ static const struct LevelUpMove sLuxioLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_BITE), LEVEL_UP_MOVE(23, MOVE_ROAR), LEVEL_UP_MOVE(28, MOVE_SWAGGER), - //LEVEL_UP_MOVE(33, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE(33, MOVE_THUNDER_FANG), LEVEL_UP_MOVE(38, MOVE_CRUNCH), LEVEL_UP_MOVE(43, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(48, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(53, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(48, MOVE_DISCHARGE), + LEVEL_UP_MOVE(53, MOVE_WILD_CHARGE), LEVEL_UP_END }; static const struct LevelUpMove sLuxrayLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_CHARGE), @@ -8245,12 +8245,12 @@ static const struct LevelUpMove sLuxrayLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_BITE), LEVEL_UP_MOVE(23, MOVE_ROAR), LEVEL_UP_MOVE(28, MOVE_SWAGGER), - //LEVEL_UP_MOVE(35, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE(35, MOVE_THUNDER_FANG), LEVEL_UP_MOVE(42, MOVE_CRUNCH), LEVEL_UP_MOVE(49, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(56, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(63, MOVE_WILD_CHARGE), - //LEVEL_UP_MOVE(67, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE(56, MOVE_DISCHARGE), + LEVEL_UP_MOVE(63, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(67, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_END }; @@ -8260,13 +8260,13 @@ static const struct LevelUpMove sBudewLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_WATER_SPORT), LEVEL_UP_MOVE(10, MOVE_STUN_SPORE), LEVEL_UP_MOVE(13, MOVE_MEGA_DRAIN), - //LEVEL_UP_MOVE(16, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(16, MOVE_WORRY_SEED), LEVEL_UP_END }; static const struct LevelUpMove sRoseradeLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL), LEVEL_UP_MOVE( 1, MOVE_POISON_STING), LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), @@ -8282,17 +8282,17 @@ static const struct LevelUpMove sCranidosLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_PURSUIT), 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_CHIP_AWAY), + LEVEL_UP_MOVE(24, MOVE_ASSURANCE), + LEVEL_UP_MOVE(28, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(42, MOVE_SCREECH), - //LEVEL_UP_MOVE(46, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(46, MOVE_HEAD_SMASH), LEVEL_UP_END }; static const struct LevelUpMove sRampardosLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ENDEAVOR), + //LEVEL_UP_MOVE( 0, MOVE_ENDEAVOR), LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR), LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -8302,12 +8302,12 @@ static const struct LevelUpMove sRampardosLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_PURSUIT), 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_CHIP_AWAY), + LEVEL_UP_MOVE(24, MOVE_ASSURANCE), + LEVEL_UP_MOVE(28, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(36, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(43, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(43, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(51, MOVE_SCREECH), - //LEVEL_UP_MOVE(58, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(58, MOVE_HEAD_SMASH), LEVEL_UP_END }; @@ -8321,14 +8321,14 @@ static const struct LevelUpMove sShieldonLevelUpLearnset[] = { LEVEL_UP_MOVE(24, MOVE_SWAGGER), LEVEL_UP_MOVE(28, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(33, MOVE_ENDURE), - //LEVEL_UP_MOVE(37, MOVE_METAL_BURST), - //LEVEL_UP_MOVE(42, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(37, MOVE_METAL_BURST), + LEVEL_UP_MOVE(42, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM), LEVEL_UP_END }; static const struct LevelUpMove sBastiodonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_BLOCK), + //LEVEL_UP_MOVE( 0, MOVE_BLOCK), LEVEL_UP_MOVE( 1, MOVE_BLOCK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_PROTECT), @@ -8341,51 +8341,51 @@ static const struct LevelUpMove sBastiodonLevelUpLearnset[] = { LEVEL_UP_MOVE(24, MOVE_SWAGGER), LEVEL_UP_MOVE(28, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(36, MOVE_ENDURE), - //LEVEL_UP_MOVE(43, MOVE_METAL_BURST), - //LEVEL_UP_MOVE(51, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(58, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(43, MOVE_METAL_BURST), + LEVEL_UP_MOVE(51, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(58, MOVE_HEAVY_SLAM), LEVEL_UP_END }; static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE(10, MOVE_TACKLE), - //LEVEL_UP_MOVE(15, MOVE_BUG_BITE), + LEVEL_UP_MOVE(15, MOVE_BUG_BITE), LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER), LEVEL_UP_END }; static const struct LevelUpMove sWormadamLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_PROTECT), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE(10, MOVE_PROTECT), - //LEVEL_UP_MOVE(15, MOVE_BUG_BITE), + LEVEL_UP_MOVE(15, MOVE_BUG_BITE), LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE(23, MOVE_CONFUSION), LEVEL_UP_MOVE(26, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(29, MOVE_GROWTH), LEVEL_UP_MOVE(32, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(35, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(35, MOVE_CAPTIVATE), LEVEL_UP_MOVE(38, MOVE_FLAIL), LEVEL_UP_MOVE(41, MOVE_ATTRACT), LEVEL_UP_MOVE(44, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(47, MOVE_LEAF_STORM), - //LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(47, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ), LEVEL_UP_END }; static const struct LevelUpMove sMothimLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_PROTECT), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE(10, MOVE_PROTECT), - //LEVEL_UP_MOVE(15, MOVE_BUG_BITE), + LEVEL_UP_MOVE(15, MOVE_BUG_BITE), LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE(23, MOVE_CONFUSION), LEVEL_UP_MOVE(26, MOVE_GUST), @@ -8393,25 +8393,25 @@ static const struct LevelUpMove sMothimLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_PSYBEAM), LEVEL_UP_MOVE(35, MOVE_CAMOUFLAGE), LEVEL_UP_MOVE(38, MOVE_SILVER_WIND), - //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), LEVEL_UP_MOVE(44, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(47, MOVE_LUNGE), - //LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(47, MOVE_LUNGE), + LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ), LEVEL_UP_END }; static const struct LevelUpMove sCombeeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), LEVEL_UP_MOVE( 1, MOVE_GUST), - //LEVEL_UP_MOVE(13, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(29, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(13, MOVE_BUG_BITE), + LEVEL_UP_MOVE(29, MOVE_BUG_BUZZ), LEVEL_UP_END }; static const struct LevelUpMove sVespiquenLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SLASH), + //LEVEL_UP_MOVE( 0, MOVE_SLASH), LEVEL_UP_MOVE( 1, MOVE_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), + LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), LEVEL_UP_MOVE( 1, MOVE_GUST), @@ -8420,16 +8420,16 @@ static const struct LevelUpMove sVespiquenLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 9, MOVE_PURSUIT), LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), - //LEVEL_UP_MOVE(17, MOVE_DEFEND_ORDER), - //LEVEL_UP_MOVE(25, MOVE_POWER_GEM), - //LEVEL_UP_MOVE(29, MOVE_HEAL_ORDER), + LEVEL_UP_MOVE(17, MOVE_DEFEND_ORDER), + LEVEL_UP_MOVE(25, MOVE_POWER_GEM), + LEVEL_UP_MOVE(29, MOVE_HEAL_ORDER), LEVEL_UP_MOVE(33, MOVE_TOXIC), - //LEVEL_UP_MOVE(37, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(41, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(45, MOVE_ATTACK_ORDER), + LEVEL_UP_MOVE(37, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(41, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(45, MOVE_ATTACK_ORDER), LEVEL_UP_MOVE(49, MOVE_SWAGGER), LEVEL_UP_MOVE(53, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE(57, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(57, MOVE_FELL_STINGER), LEVEL_UP_END }; @@ -8440,14 +8440,14 @@ static const struct LevelUpMove sPachirisuLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_CHARM), LEVEL_UP_MOVE(13, MOVE_SPARK), LEVEL_UP_MOVE(17, MOVE_ENDURE), - //LEVEL_UP_MOVE(19, MOVE_NUZZLE), + LEVEL_UP_MOVE(19, MOVE_NUZZLE), LEVEL_UP_MOVE(21, MOVE_SWIFT), - //LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(29, MOVE_SWEET_KISS), LEVEL_UP_MOVE(33, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE(37, MOVE_SUPER_FANG), - //LEVEL_UP_MOVE(41, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(45, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(41, MOVE_DISCHARGE), + LEVEL_UP_MOVE(45, MOVE_LAST_RESORT), LEVEL_UP_MOVE(49, MOVE_HYPER_FANG), LEVEL_UP_END }; @@ -8460,18 +8460,18 @@ static const struct LevelUpMove sBuizelLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_WATER_GUN), LEVEL_UP_MOVE(18, MOVE_PURSUIT), LEVEL_UP_MOVE(21, MOVE_SWIFT), - //LEVEL_UP_MOVE(24, MOVE_AQUA_JET), - //LEVEL_UP_MOVE(27, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(24, MOVE_AQUA_JET), + LEVEL_UP_MOVE(27, MOVE_DOUBLE_HIT), LEVEL_UP_MOVE(31, MOVE_WHIRLPOOL), LEVEL_UP_MOVE(35, MOVE_RAZOR_WIND), - //LEVEL_UP_MOVE(38, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(38, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(41, MOVE_AGILITY), LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP), LEVEL_UP_END }; static const struct LevelUpMove sFloatzelLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), + LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_SONIC_BOOM), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -8483,11 +8483,11 @@ static const struct LevelUpMove sFloatzelLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_WATER_GUN), LEVEL_UP_MOVE(18, MOVE_PURSUIT), LEVEL_UP_MOVE(21, MOVE_SWIFT), - //LEVEL_UP_MOVE(24, MOVE_AQUA_JET), - //LEVEL_UP_MOVE(29, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(24, MOVE_AQUA_JET), + LEVEL_UP_MOVE(29, MOVE_DOUBLE_HIT), LEVEL_UP_MOVE(35, MOVE_WHIRLPOOL), LEVEL_UP_MOVE(41, MOVE_RAZOR_WIND), - //LEVEL_UP_MOVE(46, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(46, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(51, MOVE_AGILITY), LEVEL_UP_MOVE(57, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -8501,16 +8501,16 @@ static const struct LevelUpMove sCherubiLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_HELPING_HAND), LEVEL_UP_MOVE(19, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(22, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(28, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(28, MOVE_WORRY_SEED), LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(37, MOVE_SOLAR_BEAM), - //LEVEL_UP_MOVE(40, MOVE_LUCKY_CHANT), - //LEVEL_UP_MOVE(47, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(40, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(47, MOVE_PETAL_BLIZZARD), LEVEL_UP_END }; static const struct LevelUpMove sCherrimLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE), + //LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE), LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE), LEVEL_UP_MOVE( 1, MOVE_MORNING_SUN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -8521,11 +8521,11 @@ static const struct LevelUpMove sCherrimLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_HELPING_HAND), LEVEL_UP_MOVE(19, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(22, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(30, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(30, MOVE_WORRY_SEED), LEVEL_UP_MOVE(35, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(43, MOVE_SOLAR_BEAM), - //LEVEL_UP_MOVE(48, MOVE_LUCKY_CHANT), - //LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(48, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD), LEVEL_UP_END }; @@ -8534,7 +8534,7 @@ static const struct LevelUpMove sShellosLevelUpLearnset[] = { LEVEL_UP_MOVE( 2, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 4, MOVE_HARDEN), LEVEL_UP_MOVE( 7, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(11, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(11, MOVE_MUD_BOMB), LEVEL_UP_MOVE(16, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE(22, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(29, MOVE_BODY_SLAM), @@ -8551,7 +8551,7 @@ static const struct LevelUpMove sGastrodonLevelUpLearnset[] = { LEVEL_UP_MOVE( 2, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 4, MOVE_HARDEN), LEVEL_UP_MOVE( 7, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(11, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(11, MOVE_MUD_BOMB), LEVEL_UP_MOVE(16, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE(22, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(29, MOVE_BODY_SLAM), @@ -8561,7 +8561,7 @@ static const struct LevelUpMove sGastrodonLevelUpLearnset[] = { }; static const struct LevelUpMove sAmbipomLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP), + 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), @@ -8574,10 +8574,10 @@ static const struct LevelUpMove sAmbipomLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_SWIFT), LEVEL_UP_MOVE(25, MOVE_SCREECH), LEVEL_UP_MOVE(29, MOVE_AGILITY), - //LEVEL_UP_MOVE(32, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE(36, MOVE_FLING), - //LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(43, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(32, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(36, MOVE_FLING), + LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(43, MOVE_LAST_RESORT), LEVEL_UP_END }; @@ -8587,10 +8587,10 @@ static const struct LevelUpMove sDrifloonLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_ASTONISH), LEVEL_UP_MOVE( 8, MOVE_GUST), LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(16, MOVE_PAYBACK), - //LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(16, MOVE_PAYBACK), + LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(25, MOVE_STOCKPILE), - //LEVEL_UP_MOVE(27, MOVE_HEX), + LEVEL_UP_MOVE(27, MOVE_HEX), LEVEL_UP_MOVE(32, MOVE_SWALLOW), LEVEL_UP_MOVE(32, MOVE_SPIT_UP), LEVEL_UP_MOVE(36, MOVE_SHADOW_BALL), @@ -8601,7 +8601,7 @@ static const struct LevelUpMove sDrifloonLevelUpLearnset[] = { }; static const struct LevelUpMove sDrifblimLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), LEVEL_UP_MOVE( 1, MOVE_MINIMIZE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -8609,17 +8609,17 @@ static const struct LevelUpMove sDrifblimLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_ASTONISH), LEVEL_UP_MOVE( 8, MOVE_GUST), LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(16, MOVE_PAYBACK), - //LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(16, MOVE_PAYBACK), + LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(25, MOVE_STOCKPILE), - //LEVEL_UP_MOVE(27, MOVE_HEX), + LEVEL_UP_MOVE(27, MOVE_HEX), LEVEL_UP_MOVE(34, MOVE_SWALLOW), LEVEL_UP_MOVE(34, MOVE_SPIT_UP), LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(46, MOVE_AMNESIA), LEVEL_UP_MOVE(52, MOVE_BATON_PASS), LEVEL_UP_MOVE(60, MOVE_EXPLOSION), - //LEVEL_UP_MOVE(65, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(65, MOVE_PHANTOM_FORCE), LEVEL_UP_END }; @@ -8630,26 +8630,26 @@ static const struct LevelUpMove sBunearyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_FORESIGHT), LEVEL_UP_MOVE( 6, MOVE_ENDURE), - //LEVEL_UP_MOVE(13, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(13, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(16, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(23, MOVE_JUMP_KICK), LEVEL_UP_MOVE(26, MOVE_BATON_PASS), LEVEL_UP_MOVE(33, MOVE_AGILITY), LEVEL_UP_MOVE(36, MOVE_DIZZY_PUNCH), - //LEVEL_UP_MOVE(43, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(43, MOVE_AFTER_YOU), LEVEL_UP_MOVE(46, MOVE_CHARM), - //LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT), LEVEL_UP_MOVE(56, MOVE_BOUNCE), - //LEVEL_UP_MOVE(63, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(63, MOVE_HEALING_WISH), LEVEL_UP_END }; static const struct LevelUpMove sLopunnyLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_RETURN), + //LEVEL_UP_MOVE( 0, MOVE_RETURN), LEVEL_UP_MOVE( 1, MOVE_RETURN), - //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), + LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), LEVEL_UP_MOVE( 1, MOVE_BOUNCE), - //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), + LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), LEVEL_UP_MOVE( 1, MOVE_MIRROR_COAT), LEVEL_UP_MOVE( 1, MOVE_MAGIC_COAT), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), @@ -8657,26 +8657,26 @@ static const struct LevelUpMove sLopunnyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_FORESIGHT), LEVEL_UP_MOVE( 6, MOVE_ENDURE), - //LEVEL_UP_MOVE(13, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(13, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(16, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(23, MOVE_JUMP_KICK), LEVEL_UP_MOVE(26, MOVE_BATON_PASS), LEVEL_UP_MOVE(33, MOVE_AGILITY), LEVEL_UP_MOVE(36, MOVE_DIZZY_PUNCH), - //LEVEL_UP_MOVE(43, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(43, MOVE_AFTER_YOU), LEVEL_UP_MOVE(46, MOVE_CHARM), - //LEVEL_UP_MOVE(53, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(53, MOVE_ENTRAINMENT), LEVEL_UP_MOVE(56, MOVE_BOUNCE), - //LEVEL_UP_MOVE(63, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(63, MOVE_HEALING_WISH), LEVEL_UP_MOVE(66, MOVE_HIGH_JUMP_KICK), LEVEL_UP_END }; static const struct LevelUpMove sMismagiusLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_MYSTICAL_FIRE), - //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), - //LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), - //LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE( 1, MOVE_MYSTICAL_FIRE), + LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), + LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), @@ -8686,18 +8686,18 @@ static const struct LevelUpMove sMismagiusLevelUpLearnset[] = { }; static const struct LevelUpMove sHonchkrowLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_PURSUIT), LEVEL_UP_MOVE( 1, MOVE_HAZE), LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), LEVEL_UP_MOVE(25, MOVE_SWAGGER), - //LEVEL_UP_MOVE(35, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY), - //LEVEL_UP_MOVE(55, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(65, MOVE_QUASH), - //LEVEL_UP_MOVE(75, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(35, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(55, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(65, MOVE_QUASH), + LEVEL_UP_MOVE(75, MOVE_DARK_PULSE), LEVEL_UP_END }; @@ -8710,17 +8710,17 @@ static const struct LevelUpMove sGlameowLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(25, MOVE_CHARM), LEVEL_UP_MOVE(29, MOVE_ASSIST), - //LEVEL_UP_MOVE(32, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(32, MOVE_CAPTIVATE), LEVEL_UP_MOVE(37, MOVE_SLASH), - //LEVEL_UP_MOVE(41, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(41, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(44, MOVE_ATTRACT), - //LEVEL_UP_MOVE(48, MOVE_HONE_CLAWS), - //LEVEL_UP_MOVE(50, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(48, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(50, MOVE_PLAY_ROUGH), LEVEL_UP_END }; static const struct LevelUpMove sPuruglyLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SWAGGER), + //LEVEL_UP_MOVE( 0, MOVE_SWAGGER), LEVEL_UP_MOVE( 1, MOVE_SWAGGER), LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), @@ -8732,11 +8732,11 @@ static const struct LevelUpMove sPuruglyLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(25, MOVE_CHARM), LEVEL_UP_MOVE(29, MOVE_ASSIST), - //LEVEL_UP_MOVE(32, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(32, MOVE_CAPTIVATE), LEVEL_UP_MOVE(37, MOVE_SLASH), LEVEL_UP_MOVE(45, MOVE_BODY_SLAM), LEVEL_UP_MOVE(52, MOVE_ATTRACT), - //LEVEL_UP_MOVE(60, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(60, MOVE_HONE_CLAWS), LEVEL_UP_END }; @@ -8746,8 +8746,8 @@ static const struct LevelUpMove sChinglingLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_ASTONISH), LEVEL_UP_MOVE(10, MOVE_CONFUSION), LEVEL_UP_MOVE(13, MOVE_YAWN), - //LEVEL_UP_MOVE(16, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(19, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(16, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(19, MOVE_ENTRAINMENT), LEVEL_UP_MOVE(32, MOVE_UPROAR), LEVEL_UP_END }; @@ -8759,22 +8759,22 @@ static const struct LevelUpMove sStunkyLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE( 9, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(13, MOVE_SMOKESCREEN), - //LEVEL_UP_MOVE(15, MOVE_FEINT), - //LEVEL_UP_MOVE(19, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(15, MOVE_FEINT), + LEVEL_UP_MOVE(19, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(21, MOVE_BITE), LEVEL_UP_MOVE(25, MOVE_SLASH), LEVEL_UP_MOVE(27, MOVE_TOXIC), - //LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(33, MOVE_MEMENTO), - //LEVEL_UP_MOVE(37, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(39, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(43, MOVE_BELCH), + LEVEL_UP_MOVE(37, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(39, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(43, MOVE_BELCH), LEVEL_UP_MOVE(45, MOVE_EXPLOSION), LEVEL_UP_END }; static const struct LevelUpMove sSkuntankLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_FLAMETHROWER), + //LEVEL_UP_MOVE( 0, MOVE_FLAMETHROWER), LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -8784,16 +8784,16 @@ static const struct LevelUpMove sSkuntankLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE( 9, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(13, MOVE_SMOKESCREEN), - //LEVEL_UP_MOVE(15, MOVE_FEINT), - //LEVEL_UP_MOVE(19, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(15, MOVE_FEINT), + LEVEL_UP_MOVE(19, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(21, MOVE_BITE), LEVEL_UP_MOVE(25, MOVE_SLASH), LEVEL_UP_MOVE(27, MOVE_TOXIC), - //LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(33, MOVE_MEMENTO), - //LEVEL_UP_MOVE(37, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(39, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(43, MOVE_BELCH), + LEVEL_UP_MOVE(37, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(39, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(43, MOVE_BELCH), LEVEL_UP_MOVE(45, MOVE_EXPLOSION), LEVEL_UP_END }; @@ -8810,16 +8810,16 @@ static const struct LevelUpMove sBronzorLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_SAFEGUARD), LEVEL_UP_MOVE(29, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(31, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(35, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(35, MOVE_GYRO_BALL), LEVEL_UP_MOVE(39, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE(41, MOVE_PAYBACK), - //LEVEL_UP_MOVE(45, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE(49, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(41, MOVE_PAYBACK), + LEVEL_UP_MOVE(45, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(49, MOVE_HEAVY_SLAM), LEVEL_UP_END }; static const struct LevelUpMove sBronzongLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_BLOCK), + //LEVEL_UP_MOVE( 0, MOVE_BLOCK), LEVEL_UP_MOVE( 1, MOVE_BLOCK), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE), @@ -8836,28 +8836,28 @@ static const struct LevelUpMove sBronzongLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_SAFEGUARD), LEVEL_UP_MOVE(29, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(31, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(36, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(36, MOVE_GYRO_BALL), LEVEL_UP_MOVE(42, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE(46, MOVE_PAYBACK), - //LEVEL_UP_MOVE(52, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE(58, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(46, MOVE_PAYBACK), + LEVEL_UP_MOVE(52, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(58, MOVE_HEAVY_SLAM), LEVEL_UP_END }; static const struct LevelUpMove sBonslyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FAKE_TEARS), - //LEVEL_UP_MOVE( 1, MOVE_COPYCAT), + LEVEL_UP_MOVE( 1, MOVE_COPYCAT), LEVEL_UP_MOVE( 5, MOVE_FLAIL), LEVEL_UP_MOVE( 8, MOVE_LOW_KICK), LEVEL_UP_MOVE(12, MOVE_ROCK_THROW), LEVEL_UP_MOVE(15, MOVE_MIMIC), LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK), + LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK), LEVEL_UP_MOVE(26, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(29, MOVE_BLOCK), LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(36, MOVE_COUNTER), - //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; @@ -8867,7 +8867,7 @@ static const struct LevelUpMove sMimeJrLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_BARRIER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE( 4, MOVE_COPYCAT), + LEVEL_UP_MOVE( 4, MOVE_COPYCAT), LEVEL_UP_MOVE( 8, MOVE_MEDITATE), LEVEL_UP_MOVE(11, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(15, MOVE_MIMIC), @@ -8888,7 +8888,7 @@ static const struct LevelUpMove sMimeJrLevelUpLearnset[] = { static const struct LevelUpMove sHappinyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_CHARM), - //LEVEL_UP_MOVE( 5, MOVE_COPYCAT), + LEVEL_UP_MOVE( 5, MOVE_COPYCAT), LEVEL_UP_MOVE( 9, MOVE_REFRESH), LEVEL_UP_MOVE(12, MOVE_SWEET_KISS), LEVEL_UP_END @@ -8896,22 +8896,22 @@ static const struct LevelUpMove sHappinyLevelUpLearnset[] = { static const struct LevelUpMove sChatotLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE( 1, MOVE_CHATTER), - //LEVEL_UP_MOVE( 1, MOVE_CONFIDE), + LEVEL_UP_MOVE( 1, MOVE_CHATTER), + LEVEL_UP_MOVE( 1, MOVE_CONFIDE), LEVEL_UP_MOVE( 1, MOVE_TAUNT), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 5, MOVE_GROWL), LEVEL_UP_MOVE( 9, MOVE_MIRROR_MOVE), LEVEL_UP_MOVE(13, MOVE_SING), LEVEL_UP_MOVE(17, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(21, MOVE_CHATTER), + LEVEL_UP_MOVE(21, MOVE_CHATTER), LEVEL_UP_MOVE(25, MOVE_TAUNT), - //LEVEL_UP_MOVE(29, MOVE_ROUND), + LEVEL_UP_MOVE(29, MOVE_ROUND), LEVEL_UP_MOVE(33, MOVE_MIMIC), - //LEVEL_UP_MOVE(37, MOVE_ECHOED_VOICE), - //LEVEL_UP_MOVE(41, MOVE_ROOST), + LEVEL_UP_MOVE(37, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(41, MOVE_ROOST), LEVEL_UP_MOVE(45, MOVE_UPROAR), - //LEVEL_UP_MOVE(49, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(49, MOVE_SYNCHRONOISE), LEVEL_UP_MOVE(50, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE(57, MOVE_HYPER_VOICE), LEVEL_UP_END @@ -8922,15 +8922,15 @@ static const struct LevelUpMove sSpiritombLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PURSUIT), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SPITE), - //LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE( 7, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(13, MOVE_HYPNOSIS), LEVEL_UP_MOVE(19, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND), - //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(37, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(37, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(43, MOVE_MEMENTO), - //LEVEL_UP_MOVE(49, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(49, MOVE_DARK_PULSE), LEVEL_UP_END }; @@ -8944,13 +8944,13 @@ static const struct LevelUpMove sGibleLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_SLASH), LEVEL_UP_MOVE(27, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE(31, MOVE_DIG), - //LEVEL_UP_MOVE(37, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(37, MOVE_DRAGON_RUSH), LEVEL_UP_END }; static const struct LevelUpMove sGabiteLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_DUAL_CHOP), - //LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP), + LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE), @@ -8962,15 +8962,15 @@ static const struct LevelUpMove sGabiteLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_SLASH), LEVEL_UP_MOVE(33, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE(40, MOVE_DIG), - //LEVEL_UP_MOVE(49, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(49, MOVE_DRAGON_RUSH), LEVEL_UP_END }; static const struct LevelUpMove sGarchompLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_CRUNCH), + //LEVEL_UP_MOVE( 0, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), - //LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP), - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE), @@ -8983,12 +8983,12 @@ static const struct LevelUpMove sGarchompLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_SLASH), LEVEL_UP_MOVE(33, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE(40, MOVE_DIG), - //LEVEL_UP_MOVE(55, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(55, MOVE_DRAGON_RUSH), LEVEL_UP_END }; static const struct LevelUpMove sMunchlaxLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), + LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), LEVEL_UP_MOVE( 1, MOVE_RECYCLE), LEVEL_UP_MOVE( 1, MOVE_LICK), LEVEL_UP_MOVE( 1, MOVE_METRONOME), @@ -8997,17 +8997,17 @@ static const struct LevelUpMove sMunchlaxLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 9, MOVE_AMNESIA), LEVEL_UP_MOVE(12, MOVE_LICK), - //LEVEL_UP_MOVE(17, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(17, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(20, MOVE_SCREECH), LEVEL_UP_MOVE(25, MOVE_BODY_SLAM), LEVEL_UP_MOVE(28, MOVE_STOCKPILE), LEVEL_UP_MOVE(33, MOVE_SWALLOW), LEVEL_UP_MOVE(36, MOVE_ROLLOUT), - //LEVEL_UP_MOVE(41, MOVE_FLING), + LEVEL_UP_MOVE(41, MOVE_FLING), LEVEL_UP_MOVE(44, MOVE_BELLY_DRUM), - //LEVEL_UP_MOVE(49, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(49, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(50, MOVE_SNATCH), - //LEVEL_UP_MOVE(57, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(57, MOVE_LAST_RESORT), LEVEL_UP_END }; @@ -9016,37 +9016,37 @@ static const struct LevelUpMove sRioluLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_ENDURE), LEVEL_UP_MOVE( 6, MOVE_COUNTER), - //LEVEL_UP_MOVE(11, MOVE_FEINT), - //LEVEL_UP_MOVE(15, MOVE_FORCE_PALM), - //LEVEL_UP_MOVE(19, MOVE_COPYCAT), + LEVEL_UP_MOVE(11, MOVE_FEINT), + LEVEL_UP_MOVE(15, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(19, MOVE_COPYCAT), LEVEL_UP_MOVE(24, MOVE_SCREECH), LEVEL_UP_MOVE(29, MOVE_REVERSAL), - //LEVEL_UP_MOVE(47, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(50, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(47, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(50, MOVE_FINAL_GAMBIT), LEVEL_UP_END }; static const struct LevelUpMove sLucarioLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_AURA_SPHERE), - //LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE), - //LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS), LEVEL_UP_MOVE( 1, MOVE_FORESIGHT), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_DETECT), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 6, MOVE_COUNTER), - //LEVEL_UP_MOVE(11, MOVE_FEINT), - //LEVEL_UP_MOVE(15, MOVE_POWER_UP_PUNCH), + LEVEL_UP_MOVE(11, MOVE_FEINT), + LEVEL_UP_MOVE(15, MOVE_POWER_UP_PUNCH), LEVEL_UP_MOVE(19, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(24, MOVE_METAL_SOUND), LEVEL_UP_MOVE(29, MOVE_BONE_RUSH), - //LEVEL_UP_MOVE(33, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(37, MOVE_ME_FIRST), - //LEVEL_UP_MOVE(42, MOVE_WORK_UP), + LEVEL_UP_MOVE(33, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(37, MOVE_ME_FIRST), + LEVEL_UP_MOVE(42, MOVE_WORK_UP), LEVEL_UP_MOVE(47, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(51, MOVE_HEAL_PULSE), - //LEVEL_UP_MOVE(55, MOVE_CLOSE_COMBAT), - //LEVEL_UP_MOVE(60, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(51, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(55, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(60, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(65, MOVE_EXTREME_SPEED), LEVEL_UP_END }; @@ -9067,9 +9067,9 @@ static const struct LevelUpMove sHippopotasLevelUpLearnset[] = { }; static const struct LevelUpMove sHippowdonLevelUpLearnset[] = { - //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_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_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -9092,43 +9092,43 @@ static const struct LevelUpMove sSkorupiLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_KNOCK_OFF), LEVEL_UP_MOVE( 9, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(13, MOVE_ACUPRESSURE), + LEVEL_UP_MOVE(13, MOVE_ACUPRESSURE), LEVEL_UP_MOVE(16, MOVE_PURSUIT), - //LEVEL_UP_MOVE(20, MOVE_BUG_BITE), + LEVEL_UP_MOVE(20, MOVE_BUG_BITE), LEVEL_UP_MOVE(23, MOVE_POISON_FANG), - //LEVEL_UP_MOVE(27, MOVE_VENOSHOCK), - //LEVEL_UP_MOVE(30, MOVE_HONE_CLAWS), - //LEVEL_UP_MOVE(34, MOVE_TOXIC_SPIKES), - //LEVEL_UP_MOVE(38, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(27, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(30, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(34, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(38, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(41, MOVE_SCARY_FACE), LEVEL_UP_MOVE(45, MOVE_CRUNCH), - //LEVEL_UP_MOVE(47, MOVE_FELL_STINGER), - //LEVEL_UP_MOVE(49, MOVE_CROSS_POISON), + LEVEL_UP_MOVE(47, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(49, MOVE_CROSS_POISON), LEVEL_UP_END }; static const struct LevelUpMove sDrapionLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), - //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_POISON_STING), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF), LEVEL_UP_MOVE( 5, MOVE_KNOCK_OFF), LEVEL_UP_MOVE( 9, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(13, MOVE_ACUPRESSURE), + LEVEL_UP_MOVE(13, MOVE_ACUPRESSURE), LEVEL_UP_MOVE(16, MOVE_PURSUIT), - //LEVEL_UP_MOVE(20, MOVE_BUG_BITE), + LEVEL_UP_MOVE(20, MOVE_BUG_BITE), LEVEL_UP_MOVE(23, MOVE_POISON_FANG), - //LEVEL_UP_MOVE(27, MOVE_VENOSHOCK), - //LEVEL_UP_MOVE(30, MOVE_HONE_CLAWS), - //LEVEL_UP_MOVE(34, MOVE_TOXIC_SPIKES), - //LEVEL_UP_MOVE(38, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(27, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(30, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(34, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(38, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(43, MOVE_SCARY_FACE), LEVEL_UP_MOVE(49, MOVE_CRUNCH), - //LEVEL_UP_MOVE(53, MOVE_FELL_STINGER), - //LEVEL_UP_MOVE(57, MOVE_CROSS_POISON), + LEVEL_UP_MOVE(53, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(57, MOVE_CROSS_POISON), LEVEL_UP_END }; @@ -9141,13 +9141,13 @@ static const struct LevelUpMove sCroagunkLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(22, MOVE_REVENGE), LEVEL_UP_MOVE(24, MOVE_SWAGGER), - //LEVEL_UP_MOVE(29, MOVE_MUD_BOMB), - //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(36, MOVE_VENOSHOCK), - //LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(43, MOVE_POISON_JAB), + LEVEL_UP_MOVE(29, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(36, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(43, MOVE_POISON_JAB), LEVEL_UP_MOVE(45, MOVE_SLUDGE_BOMB), - //LEVEL_UP_MOVE(47, MOVE_BELCH), + LEVEL_UP_MOVE(47, MOVE_BELCH), LEVEL_UP_MOVE(50, MOVE_FLATTER), LEVEL_UP_END }; @@ -9163,13 +9163,13 @@ static const struct LevelUpMove sToxicroakLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(22, MOVE_REVENGE), LEVEL_UP_MOVE(24, MOVE_SWAGGER), - //LEVEL_UP_MOVE(29, MOVE_MUD_BOMB), - //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(36, MOVE_VENOSHOCK), - //LEVEL_UP_MOVE(41, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(49, MOVE_POISON_JAB), + LEVEL_UP_MOVE(29, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(36, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(41, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(49, MOVE_POISON_JAB), LEVEL_UP_MOVE(54, MOVE_SLUDGE_BOMB), - //LEVEL_UP_MOVE(58, MOVE_BELCH), + LEVEL_UP_MOVE(58, MOVE_BELCH), LEVEL_UP_MOVE(62, MOVE_FLATTER), LEVEL_UP_END }; @@ -9182,13 +9182,13 @@ static const struct LevelUpMove sCarnivineLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(21, MOVE_INGRAIN), LEVEL_UP_MOVE(27, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(31, MOVE_LEAF_TORNADO), + LEVEL_UP_MOVE(31, MOVE_LEAF_TORNADO), LEVEL_UP_MOVE(37, MOVE_STOCKPILE), LEVEL_UP_MOVE(37, MOVE_SPIT_UP), LEVEL_UP_MOVE(37, MOVE_SWALLOW), LEVEL_UP_MOVE(41, MOVE_CRUNCH), - //LEVEL_UP_MOVE(47, MOVE_WRING_OUT), - //LEVEL_UP_MOVE(50, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(47, MOVE_WRING_OUT), + LEVEL_UP_MOVE(50, MOVE_POWER_WHIP), LEVEL_UP_END }; @@ -9199,19 +9199,19 @@ static const struct LevelUpMove sFinneonLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(17, MOVE_GUST), LEVEL_UP_MOVE(22, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(26, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(26, MOVE_CAPTIVATE), LEVEL_UP_MOVE(29, MOVE_SAFEGUARD), - //LEVEL_UP_MOVE(33, MOVE_AQUA_RING), + LEVEL_UP_MOVE(33, MOVE_AQUA_RING), LEVEL_UP_MOVE(38, MOVE_WHIRLPOOL), - //LEVEL_UP_MOVE(42, MOVE_U_TURN), + LEVEL_UP_MOVE(42, MOVE_U_TURN), LEVEL_UP_MOVE(45, MOVE_BOUNCE), LEVEL_UP_MOVE(49, MOVE_SILVER_WIND), - //LEVEL_UP_MOVE(54, MOVE_SOAK), + LEVEL_UP_MOVE(54, MOVE_SOAK), LEVEL_UP_END }; static const struct LevelUpMove sLumineonLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SOAK), + LEVEL_UP_MOVE( 1, MOVE_SOAK), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -9221,14 +9221,14 @@ static const struct LevelUpMove sLumineonLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(17, MOVE_GUST), LEVEL_UP_MOVE(22, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(26, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(26, MOVE_CAPTIVATE), LEVEL_UP_MOVE(29, MOVE_SAFEGUARD), - //LEVEL_UP_MOVE(35, MOVE_AQUA_RING), + LEVEL_UP_MOVE(35, MOVE_AQUA_RING), LEVEL_UP_MOVE(42, MOVE_WHIRLPOOL), - //LEVEL_UP_MOVE(48, MOVE_U_TURN), + LEVEL_UP_MOVE(48, MOVE_U_TURN), LEVEL_UP_MOVE(53, MOVE_BOUNCE), LEVEL_UP_MOVE(59, MOVE_SILVER_WIND), - //LEVEL_UP_MOVE(66, MOVE_SOAK), + LEVEL_UP_MOVE(66, MOVE_SOAK), LEVEL_UP_END }; @@ -9241,11 +9241,11 @@ static const struct LevelUpMove sMantykeLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_WING_ATTACK), LEVEL_UP_MOVE(16, MOVE_HEADBUTT), LEVEL_UP_MOVE(19, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(32, MOVE_AGILITY), - //LEVEL_UP_MOVE(36, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(39, MOVE_AQUA_RING), + LEVEL_UP_MOVE(36, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(39, MOVE_AQUA_RING), LEVEL_UP_MOVE(46, MOVE_BOUNCE), LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -9259,9 +9259,9 @@ static const struct LevelUpMove sSnoverLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_GRASS_WHISTLE), LEVEL_UP_MOVE(17, MOVE_SWAGGER), LEVEL_UP_MOVE(21, MOVE_MIST), - //LEVEL_UP_MOVE(26, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(26, MOVE_ICE_SHARD), LEVEL_UP_MOVE(31, MOVE_INGRAIN), - //LEVEL_UP_MOVE(36, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(36, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE(41, MOVE_BLIZZARD), LEVEL_UP_MOVE(46, MOVE_SHEER_COLD), LEVEL_UP_END @@ -9278,18 +9278,18 @@ static const struct LevelUpMove sAbomasnowLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_GRASS_WHISTLE), LEVEL_UP_MOVE(17, MOVE_SWAGGER), LEVEL_UP_MOVE(21, MOVE_MIST), - //LEVEL_UP_MOVE(26, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(26, MOVE_ICE_SHARD), LEVEL_UP_MOVE(31, MOVE_INGRAIN), - //LEVEL_UP_MOVE(36, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(36, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE(47, MOVE_BLIZZARD), LEVEL_UP_MOVE(58, MOVE_SHEER_COLD), LEVEL_UP_END }; static const struct LevelUpMove sWeavileLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_EMBARGO), + LEVEL_UP_MOVE( 1, MOVE_EMBARGO), LEVEL_UP_MOVE( 1, MOVE_REVENGE), - //LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), + LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_TAUNT), @@ -9298,51 +9298,51 @@ static const struct LevelUpMove sWeavileLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(14, MOVE_ICY_WIND), LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES), - //LEVEL_UP_MOVE(20, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(20, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(22, MOVE_METAL_CLAW), - //LEVEL_UP_MOVE(25, MOVE_HONE_CLAWS), - //LEVEL_UP_MOVE(28, MOVE_FLING), + LEVEL_UP_MOVE(25, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(28, MOVE_FLING), LEVEL_UP_MOVE(32, MOVE_SCREECH), - //LEVEL_UP_MOVE(35, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(35, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(40, MOVE_SNATCH), - //LEVEL_UP_MOVE(44, MOVE_PUNISHMENT), - //LEVEL_UP_MOVE(47, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(44, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(47, MOVE_DARK_PULSE), LEVEL_UP_END }; static const struct LevelUpMove sMagnezoneLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON), - //LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), + LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), LEVEL_UP_MOVE( 1, MOVE_MIRROR_COAT), LEVEL_UP_MOVE( 1, MOVE_BARRIER), - //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 5, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 7, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB), + LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB), LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(17, MOVE_SONIC_BOOM), LEVEL_UP_MOVE(19, MOVE_SPARK), - //LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(25, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL), - //LEVEL_UP_MOVE(33, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(33, MOVE_FLASH_CANNON), LEVEL_UP_MOVE(39, MOVE_SCREECH), - //LEVEL_UP_MOVE(43, MOVE_DISCHARGE), + LEVEL_UP_MOVE(43, MOVE_DISCHARGE), LEVEL_UP_MOVE(49, MOVE_LOCK_ON), - //LEVEL_UP_MOVE(53, MOVE_MAGNET_RISE), - //LEVEL_UP_MOVE(59, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(53, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(59, MOVE_GYRO_BALL), LEVEL_UP_MOVE(63, MOVE_ZAP_CANNON), LEVEL_UP_END }; static const struct LevelUpMove sLickilickyLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_WRING_OUT), - //LEVEL_UP_MOVE( 1, MOVE_POWER_WHIP), + LEVEL_UP_MOVE( 1, MOVE_WRING_OUT), + LEVEL_UP_MOVE( 1, MOVE_POWER_WHIP), LEVEL_UP_MOVE( 1, MOVE_LICK), LEVEL_UP_MOVE( 5, MOVE_SUPERSONIC), LEVEL_UP_MOVE( 9, MOVE_DEFENSE_CURL), @@ -9352,39 +9352,39 @@ static const struct LevelUpMove sLickilickyLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_DISABLE), LEVEL_UP_MOVE(29, MOVE_SLAM), LEVEL_UP_MOVE(33, MOVE_ROLLOUT), - //LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY), - //LEVEL_UP_MOVE(41, MOVE_ME_FIRST), + LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(41, MOVE_ME_FIRST), LEVEL_UP_MOVE(45, MOVE_REFRESH), LEVEL_UP_MOVE(49, MOVE_SCREECH), - //LEVEL_UP_MOVE(53, MOVE_POWER_WHIP), - //LEVEL_UP_MOVE(57, MOVE_WRING_OUT), - //LEVEL_UP_MOVE(61, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(53, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(57, MOVE_WRING_OUT), + LEVEL_UP_MOVE(61, MOVE_GYRO_BALL), LEVEL_UP_END }; static const struct LevelUpMove sRhyperiorLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE( 1, MOVE_ROCK_WRECKER), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_ROCK_WRECKER), LEVEL_UP_MOVE( 1, MOVE_HORN_DRILL), - //LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), + LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 9, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(17, MOVE_STOMP), - //LEVEL_UP_MOVE(21, MOVE_BULLDOZE), - //LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(21, MOVE_BULLDOZE), + LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(29, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(33, MOVE_DRILL_RUN), + LEVEL_UP_MOVE(33, MOVE_DRILL_RUN), LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(41, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(41, MOVE_STONE_EDGE), LEVEL_UP_MOVE(48, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(55, MOVE_MEGAHORN), LEVEL_UP_MOVE(62, MOVE_HORN_DRILL), - //LEVEL_UP_MOVE(69, MOVE_ROCK_WRECKER), + LEVEL_UP_MOVE(69, MOVE_ROCK_WRECKER), LEVEL_UP_END }; @@ -9401,21 +9401,21 @@ static const struct LevelUpMove sTangrowthLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(27, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(30, MOVE_STUN_SPORE), - //LEVEL_UP_MOVE(33, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(33, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(40, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(43, MOVE_SLAM), LEVEL_UP_MOVE(46, MOVE_TICKLE), - //LEVEL_UP_MOVE(49, MOVE_WRING_OUT), - //LEVEL_UP_MOVE(50, MOVE_GRASSY_TERRAIN), - //LEVEL_UP_MOVE(53, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(49, MOVE_WRING_OUT), + LEVEL_UP_MOVE(50, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(53, MOVE_POWER_WHIP), LEVEL_UP_MOVE(56, MOVE_BLOCK), LEVEL_UP_END }; static const struct LevelUpMove sElectivireLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE), LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -9426,15 +9426,15 @@ static const struct LevelUpMove sElectivireLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_SWIFT), LEVEL_UP_MOVE(15, MOVE_SHOCK_WAVE), LEVEL_UP_MOVE(19, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(26, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(29, MOVE_THUNDER_PUNCH), - //LEVEL_UP_MOVE(36, MOVE_DISCHARGE), + LEVEL_UP_MOVE(36, MOVE_DISCHARGE), LEVEL_UP_MOVE(42, MOVE_SCREECH), LEVEL_UP_MOVE(49, MOVE_THUNDERBOLT), LEVEL_UP_MOVE(55, MOVE_THUNDER), - //LEVEL_UP_MOVE(62, MOVE_GIGA_IMPACT), - //LEVEL_UP_MOVE(65, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE(62, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(65, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_END }; @@ -9448,11 +9448,11 @@ static const struct LevelUpMove sMagmortarLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(12, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(15, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG), - //LEVEL_UP_MOVE(22, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(22, MOVE_FLAME_BURST), LEVEL_UP_MOVE(26, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(29, MOVE_FIRE_PUNCH), - //LEVEL_UP_MOVE(36, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(36, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(42, MOVE_SUNNY_DAY), LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(55, MOVE_FIRE_BLAST), @@ -9461,19 +9461,19 @@ static const struct LevelUpMove sMagmortarLevelUpLearnset[] = { }; static const struct LevelUpMove sTogekissLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), + LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK), LEVEL_UP_MOVE( 1, MOVE_EXTREME_SPEED), - //LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE), - //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), + LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), LEVEL_UP_END }; 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_BUG_BUZZ), + LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FORESIGHT), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -9486,23 +9486,23 @@ static const struct LevelUpMove sYanmegaLevelUpLearnset[] = { LEVEL_UP_MOVE(27, MOVE_UPROAR), LEVEL_UP_MOVE(30, MOVE_PURSUIT), LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(38, MOVE_FEINT), + 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_MOVE(49, MOVE_U_TURN), + LEVEL_UP_MOVE(54, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(57, MOVE_BUG_BUZZ), LEVEL_UP_END }; static const struct LevelUpMove sLeafeonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_RAZOR_LEAF), + //LEVEL_UP_MOVE( 0, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(17, MOVE_GRASS_WHISTLE), LEVEL_UP_MOVE(20, MOVE_MAGICAL_LEAF), @@ -9510,37 +9510,37 @@ static const struct LevelUpMove sLeafeonLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(33, MOVE_SYNTHESIS), LEVEL_UP_MOVE(37, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), LEVEL_UP_MOVE(45, MOVE_LEAF_BLADE), LEVEL_UP_END }; static const struct LevelUpMove sGlaceonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ICY_WIND), + //LEVEL_UP_MOVE( 0, MOVE_ICY_WIND), LEVEL_UP_MOVE( 1, MOVE_ICY_WIND), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(17, MOVE_BITE), - //LEVEL_UP_MOVE(20, MOVE_ICE_FANG), - //LEVEL_UP_MOVE(25, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(20, MOVE_ICE_FANG), + LEVEL_UP_MOVE(25, MOVE_ICE_SHARD), LEVEL_UP_MOVE(29, MOVE_BARRIER), LEVEL_UP_MOVE(33, MOVE_MIRROR_COAT), LEVEL_UP_MOVE(37, MOVE_HAIL), - //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), LEVEL_UP_MOVE(45, MOVE_BLIZZARD), LEVEL_UP_END }; static const struct LevelUpMove sGliscorLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GUILLOTINE), - //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_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), @@ -9550,11 +9550,11 @@ static const struct LevelUpMove sGliscorLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(16, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(22, MOVE_ACROBATICS), - //LEVEL_UP_MOVE(27, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(30, MOVE_U_TURN), + 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(40, MOVE_X_SCISSOR), LEVEL_UP_MOVE(45, MOVE_SKY_UPPERCUT), LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(55, MOVE_GUILLOTINE), @@ -9573,11 +9573,11 @@ static const struct LevelUpMove sMamoswineLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(11, MOVE_MUD_SLAP), LEVEL_UP_MOVE(14, MOVE_ENDURE), - //LEVEL_UP_MOVE(18, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(18, MOVE_MUD_BOMB), LEVEL_UP_MOVE(21, MOVE_HAIL), - //LEVEL_UP_MOVE(24, MOVE_ICE_FANG), + LEVEL_UP_MOVE(24, MOVE_ICE_FANG), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(33, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(33, MOVE_DOUBLE_HIT), LEVEL_UP_MOVE(37, MOVE_MIST), LEVEL_UP_MOVE(41, MOVE_THRASH), LEVEL_UP_MOVE(46, MOVE_EARTHQUAKE), @@ -9587,20 +9587,20 @@ static const struct LevelUpMove sMamoswineLevelUpLearnset[] = { }; static const struct LevelUpMove sPorygonZLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_TRICK_ROOM), + LEVEL_UP_MOVE( 1, MOVE_TRICK_ROOM), LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON), LEVEL_UP_MOVE( 1, MOVE_MAGIC_COAT), LEVEL_UP_MOVE( 1, MOVE_CONVERSION_2), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_CONVERSION), - //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), LEVEL_UP_MOVE( 7, MOVE_PSYBEAM), LEVEL_UP_MOVE(12, MOVE_AGILITY), LEVEL_UP_MOVE(18, MOVE_RECOVER), - //LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE), LEVEL_UP_MOVE(29, MOVE_SIGNAL_BEAM), - //LEVEL_UP_MOVE(34, MOVE_EMBARGO), - //LEVEL_UP_MOVE(40, MOVE_DISCHARGE), + LEVEL_UP_MOVE(34, MOVE_EMBARGO), + LEVEL_UP_MOVE(40, MOVE_DISCHARGE), LEVEL_UP_MOVE(45, MOVE_LOCK_ON), LEVEL_UP_MOVE(50, MOVE_TRI_ATTACK), LEVEL_UP_MOVE(56, MOVE_MAGIC_COAT), @@ -9610,12 +9610,12 @@ static const struct LevelUpMove sPorygonZLevelUpLearnset[] = { }; static const struct LevelUpMove sGalladeLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SLASH), + //LEVEL_UP_MOVE( 0, MOVE_SLASH), LEVEL_UP_MOVE( 1, MOVE_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), - //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), + LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE( 1, MOVE_LEAF_BLADE), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), @@ -9623,46 +9623,46 @@ static const struct LevelUpMove sGalladeLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_CONFUSION), LEVEL_UP_MOVE( 6, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 9, MOVE_TELEPORT), - //LEVEL_UP_MOVE(11, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(11, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(14, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(17, MOVE_AERIAL_ACE), - //LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE), - //LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(26, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(31, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(31, MOVE_PSYCHO_CUT), LEVEL_UP_MOVE(35, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(40, MOVE_FEINT), + LEVEL_UP_MOVE(40, MOVE_FEINT), LEVEL_UP_MOVE(44, MOVE_FALSE_SWIPE), LEVEL_UP_MOVE(49, MOVE_PROTECT), - //LEVEL_UP_MOVE(53, MOVE_CLOSE_COMBAT), - //LEVEL_UP_MOVE(58, MOVE_STORED_POWER), + LEVEL_UP_MOVE(53, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(58, MOVE_STORED_POWER), LEVEL_UP_END }; static const struct LevelUpMove sProbopassLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK), + //LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), - //LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), - //LEVEL_UP_MOVE( 1, MOVE_GRAVITY), - //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), + LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE( 1, MOVE_GRAVITY), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE( 1, MOVE_BLOCK), - //LEVEL_UP_MOVE( 1, MOVE_MAGNET_BOMB), + LEVEL_UP_MOVE( 1, MOVE_MAGNET_BOMB), LEVEL_UP_MOVE( 4, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE( 7, MOVE_BLOCK), - //LEVEL_UP_MOVE(10, MOVE_MAGNET_BOMB), + LEVEL_UP_MOVE(10, MOVE_MAGNET_BOMB), LEVEL_UP_MOVE(13, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE(16, MOVE_REST), LEVEL_UP_MOVE(19, MOVE_SPARK), LEVEL_UP_MOVE(22, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(25, MOVE_POWER_GEM), + LEVEL_UP_MOVE(25, MOVE_POWER_GEM), LEVEL_UP_MOVE(28, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(31, MOVE_DISCHARGE), + LEVEL_UP_MOVE(31, MOVE_DISCHARGE), LEVEL_UP_MOVE(34, MOVE_SANDSTORM), - //LEVEL_UP_MOVE(37, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(40, MOVE_STONE_EDGE), + 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_END @@ -9674,7 +9674,7 @@ static const struct LevelUpMove sDusknoirLevelUpLearnset[] = { 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_GRAVITY), LEVEL_UP_MOVE( 1, MOVE_BIND), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE), @@ -9683,36 +9683,36 @@ static const struct LevelUpMove sDusknoirLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_DISABLE), LEVEL_UP_MOVE( 9, MOVE_ASTONISH), LEVEL_UP_MOVE(14, MOVE_FORESIGHT), - //LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(22, MOVE_PURSUIT), LEVEL_UP_MOVE(25, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(30, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(33, MOVE_CURSE), - //LEVEL_UP_MOVE(40, MOVE_HEX), + LEVEL_UP_MOVE(40, MOVE_HEX), LEVEL_UP_MOVE(45, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(52, MOVE_MEAN_LOOK), - //LEVEL_UP_MOVE(57, MOVE_PAYBACK), + LEVEL_UP_MOVE(57, MOVE_PAYBACK), LEVEL_UP_MOVE(64, MOVE_FUTURE_SIGHT), LEVEL_UP_END }; static const struct LevelUpMove sFroslassLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_OMINOUS_WIND), - //LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND), LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), - //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), + LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM), - //LEVEL_UP_MOVE(10, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(10, MOVE_ICE_SHARD), LEVEL_UP_MOVE(14, MOVE_ICY_WIND), LEVEL_UP_MOVE(19, MOVE_ASTONISH), - //LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(28, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(32, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE(37, MOVE_WAKE_UP_SLAP), - //LEVEL_UP_MOVE(41, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(37, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(41, MOVE_CAPTIVATE), LEVEL_UP_MOVE(42, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(48, MOVE_BLIZZARD), LEVEL_UP_MOVE(54, MOVE_HAIL), @@ -9721,7 +9721,7 @@ static const struct LevelUpMove sFroslassLevelUpLearnset[] = { }; static const struct LevelUpMove sRotomLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_DISCHARGE), + LEVEL_UP_MOVE( 1, MOVE_DISCHARGE), LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -9731,18 +9731,18 @@ static const struct LevelUpMove sRotomLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_UPROAR), LEVEL_UP_MOVE(15, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(22, MOVE_SHOCK_WAVE), - //LEVEL_UP_MOVE(29, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(29, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(36, MOVE_SUBSTITUTE), - //LEVEL_UP_MOVE(43, MOVE_ELECTRO_BALL), - //LEVEL_UP_MOVE(50, MOVE_HEX), + LEVEL_UP_MOVE(43, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(50, MOVE_HEX), LEVEL_UP_MOVE(57, MOVE_CHARGE), - //LEVEL_UP_MOVE(64, MOVE_DISCHARGE), + LEVEL_UP_MOVE(64, MOVE_DISCHARGE), LEVEL_UP_END }; static const struct LevelUpMove sUxieLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MEMENTO), - //LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE( 1, MOVE_FLAIL), LEVEL_UP_MOVE( 1, MOVE_REST), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -9754,33 +9754,33 @@ static const struct LevelUpMove sUxieLevelUpLearnset[] = { LEVEL_UP_MOVE(46, MOVE_AMNESIA), LEVEL_UP_MOVE(50, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(61, MOVE_FLAIL), - //LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(76, MOVE_MEMENTO), LEVEL_UP_END }; static const struct LevelUpMove sMespritLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), - //LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE( 1, MOVE_COPYCAT), + LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), + LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE( 1, MOVE_COPYCAT), LEVEL_UP_MOVE( 1, MOVE_REST), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 6, MOVE_IMPRISON), LEVEL_UP_MOVE(16, MOVE_PROTECT), LEVEL_UP_MOVE(21, MOVE_SWIFT), - //LEVEL_UP_MOVE(31, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(31, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(36, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(46, MOVE_CHARM), LEVEL_UP_MOVE(50, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE(61, MOVE_COPYCAT), - //LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE(76, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(61, MOVE_COPYCAT), + LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(76, MOVE_HEALING_WISH), LEVEL_UP_END }; static const struct LevelUpMove sAzelfLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), + LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), LEVEL_UP_MOVE( 1, MOVE_REST), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 6, MOVE_IMPRISON), @@ -9788,10 +9788,10 @@ static const struct LevelUpMove sAzelfLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_SWIFT), LEVEL_UP_MOVE(31, MOVE_UPROAR), LEVEL_UP_MOVE(36, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(50, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE(61, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(61, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(76, MOVE_EXPLOSION), LEVEL_UP_END }; @@ -9802,14 +9802,14 @@ static const struct LevelUpMove sDialgaLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_METAL_CLAW), LEVEL_UP_MOVE(10, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(15, MOVE_SLASH), - //LEVEL_UP_MOVE(19, MOVE_POWER_GEM), - //LEVEL_UP_MOVE(24, MOVE_METAL_BURST), + LEVEL_UP_MOVE(19, MOVE_POWER_GEM), + LEVEL_UP_MOVE(24, MOVE_METAL_BURST), LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(33, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE(33, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE), LEVEL_UP_MOVE(42, MOVE_IRON_TAIL), - //LEVEL_UP_MOVE(46, MOVE_ROAR_OF_TIME), - //LEVEL_UP_MOVE(50, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(46, MOVE_ROAR_OF_TIME), + LEVEL_UP_MOVE(50, MOVE_FLASH_CANNON), LEVEL_UP_END }; @@ -9819,42 +9819,42 @@ static const struct LevelUpMove sPalkiaLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_WATER_PULSE), LEVEL_UP_MOVE(10, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(15, MOVE_SLASH), - //LEVEL_UP_MOVE(19, MOVE_POWER_GEM), - //LEVEL_UP_MOVE(24, MOVE_AQUA_RING), + LEVEL_UP_MOVE(19, MOVE_POWER_GEM), + LEVEL_UP_MOVE(24, MOVE_AQUA_RING), LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(33, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE), - //LEVEL_UP_MOVE(42, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(46, MOVE_SPACIAL_REND), + LEVEL_UP_MOVE(33, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE(42, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(46, MOVE_SPACIAL_REND), LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), LEVEL_UP_END }; static const struct LevelUpMove sHeatranLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_MAGMA_STORM), + LEVEL_UP_MOVE( 1, MOVE_MAGMA_STORM), LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE), - //LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), + LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER), + LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), LEVEL_UP_MOVE( 1, MOVE_FIRE_SPIN), LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 9, MOVE_LEER), - //LEVEL_UP_MOVE(17, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(17, MOVE_FIRE_FANG), LEVEL_UP_MOVE(25, MOVE_METAL_SOUND), LEVEL_UP_MOVE(33, MOVE_CRUNCH), LEVEL_UP_MOVE(41, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(49, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(49, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(57, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(65, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(73, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(65, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(73, MOVE_EARTH_POWER), LEVEL_UP_MOVE(81, MOVE_HEAT_WAVE), - //LEVEL_UP_MOVE(88, MOVE_STONE_EDGE), - //LEVEL_UP_MOVE(96, MOVE_MAGMA_STORM), + LEVEL_UP_MOVE(88, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(96, MOVE_MAGMA_STORM), LEVEL_UP_END }; static const struct LevelUpMove sRegigigasLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE( 1, MOVE_CRUSH_GRIP), + LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE( 1, MOVE_CRUSH_GRIP), LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), @@ -9863,36 +9863,36 @@ static const struct LevelUpMove sRegigigasLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_FORESIGHT), LEVEL_UP_MOVE(25, MOVE_REVENGE), - //LEVEL_UP_MOVE(40, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE(50, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(65, MOVE_PAYBACK), - //LEVEL_UP_MOVE(75, MOVE_CRUSH_GRIP), - //LEVEL_UP_MOVE(90, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE(100, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(40, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(50, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(65, MOVE_PAYBACK), + LEVEL_UP_MOVE(75, MOVE_CRUSH_GRIP), + LEVEL_UP_MOVE(90, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(100, MOVE_GIGA_IMPACT), LEVEL_UP_END }; static const struct LevelUpMove sGiratinaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE( 6, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE( 6, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(10, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(15, MOVE_SLASH), - //LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(24, MOVE_DESTINY_BOND), LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(33, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE), - //LEVEL_UP_MOVE(42, MOVE_SHADOW_CLAW), - //LEVEL_UP_MOVE(46, MOVE_SHADOW_FORCE), - //LEVEL_UP_MOVE(50, MOVE_HEX), + LEVEL_UP_MOVE(33, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE(42, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE(46, MOVE_SHADOW_FORCE), + LEVEL_UP_MOVE(50, MOVE_HEX), LEVEL_UP_END }; static const struct LevelUpMove sCresseliaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_LUNAR_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_PSYCHO_SHIFT), - //LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE( 1, MOVE_LUNAR_DANCE), + LEVEL_UP_MOVE( 1, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT), LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), @@ -9902,11 +9902,11 @@ static const struct LevelUpMove sCresseliaLevelUpLearnset[] = { LEVEL_UP_MOVE(38, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(47, MOVE_SLASH), LEVEL_UP_MOVE(57, MOVE_MOONLIGHT), - //LEVEL_UP_MOVE(66, MOVE_PSYCHO_CUT), - //LEVEL_UP_MOVE(75, MOVE_PSYCHO_SHIFT), - //LEVEL_UP_MOVE(84, MOVE_LUNAR_DANCE), + LEVEL_UP_MOVE(66, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(75, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(84, MOVE_LUNAR_DANCE), LEVEL_UP_MOVE(93, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(99, MOVE_MOONBLAST), + LEVEL_UP_MOVE(99, MOVE_MOONBLAST), LEVEL_UP_END }; @@ -9919,7 +9919,7 @@ static const struct LevelUpMove sPhioneLevelUpLearnset[] = { LEVEL_UP_MOVE(31, MOVE_ACID_ARMOR), LEVEL_UP_MOVE(39, MOVE_WHIRLPOOL), LEVEL_UP_MOVE(46, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(54, MOVE_AQUA_RING), + LEVEL_UP_MOVE(54, MOVE_AQUA_RING), LEVEL_UP_MOVE(61, MOVE_DIVE), LEVEL_UP_MOVE(69, MOVE_RAIN_DANCE), LEVEL_UP_END @@ -9935,15 +9935,15 @@ static const struct LevelUpMove sManaphyLevelUpLearnset[] = { LEVEL_UP_MOVE(31, MOVE_ACID_ARMOR), LEVEL_UP_MOVE(39, MOVE_WHIRLPOOL), LEVEL_UP_MOVE(46, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(54, MOVE_AQUA_RING), + 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_HEART_SWAP), LEVEL_UP_END }; static const struct LevelUpMove sDarkraiLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(20, MOVE_HYPNOSIS), @@ -9951,10 +9951,10 @@ static const struct LevelUpMove sDarkraiLevelUpLearnset[] = { LEVEL_UP_MOVE(38, MOVE_NIGHTMARE), LEVEL_UP_MOVE(47, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(57, MOVE_HAZE), - //LEVEL_UP_MOVE(66, MOVE_DARK_VOID), - //LEVEL_UP_MOVE(75, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(66, MOVE_DARK_VOID), + LEVEL_UP_MOVE(75, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(84, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(93, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(93, MOVE_DARK_PULSE), LEVEL_UP_END }; @@ -9964,23 +9964,23 @@ static const struct LevelUpMove sShayminLevelUpLearnset[] = { 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_NATURAL_GIFT), - //LEVEL_UP_MOVE(55, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(46, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(55, MOVE_WORRY_SEED), LEVEL_UP_MOVE(64, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL), + 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_MOVE(91, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(100, MOVE_SEED_FLARE), LEVEL_UP_END }; static const struct LevelUpMove sArceusLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SEISMIC_TOSS), LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER), - //LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT), - //LEVEL_UP_MOVE(10, MOVE_GRAVITY), - //LEVEL_UP_MOVE(20, MOVE_EARTH_POWER), + LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(10, MOVE_GRAVITY), + LEVEL_UP_MOVE(20, MOVE_EARTH_POWER), LEVEL_UP_MOVE(30, MOVE_HYPER_VOICE), LEVEL_UP_MOVE(40, MOVE_EXTREME_SPEED), LEVEL_UP_MOVE(50, MOVE_REFRESH), @@ -9988,27 +9988,27 @@ static const struct LevelUpMove sArceusLevelUpLearnset[] = { LEVEL_UP_MOVE(70, MOVE_RECOVER), LEVEL_UP_MOVE(80, MOVE_HYPER_BEAM), LEVEL_UP_MOVE(90, MOVE_PERISH_SONG), - //LEVEL_UP_MOVE(100, MOVE_JUDGMENT), + LEVEL_UP_MOVE(100, MOVE_JUDGMENT), LEVEL_UP_END }; static const struct LevelUpMove sVictiniLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SEARING_SHOT), + LEVEL_UP_MOVE( 1, MOVE_SEARING_SHOT), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE( 1, MOVE_INCINERATE), + LEVEL_UP_MOVE( 1, MOVE_INCINERATE), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 9, MOVE_ENDURE), LEVEL_UP_MOVE(17, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(25, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(25, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(33, MOVE_REVERSAL), - //LEVEL_UP_MOVE(41, MOVE_FLAME_BURST), - //LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(57, MOVE_INFERNO), + LEVEL_UP_MOVE(41, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(57, MOVE_INFERNO), LEVEL_UP_MOVE(65, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(73, MOVE_FLARE_BLITZ), - //LEVEL_UP_MOVE(81, MOVE_FINAL_GAMBIT), - //LEVEL_UP_MOVE(89, MOVE_STORED_POWER), + LEVEL_UP_MOVE(73, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(81, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(89, MOVE_STORED_POWER), LEVEL_UP_MOVE(97, MOVE_OVERHEAT), LEVEL_UP_END }; @@ -10019,16 +10019,16 @@ 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_LEAF_TORNADO), 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(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_WRING_OUT), + LEVEL_UP_MOVE(40, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(43, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -10041,16 +10041,16 @@ static const struct LevelUpMove sServineLevelUpLearnset[] = { 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_LEAF_TORNADO), 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(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_WRING_OUT), + LEVEL_UP_MOVE(48, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(52, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -10063,16 +10063,16 @@ static const struct LevelUpMove sSerperiorLevelUpLearnset[] = { 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_LEAF_TORNADO), 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(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_WRING_OUT), + LEVEL_UP_MOVE(56, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(62, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -10082,21 +10082,21 @@ static const struct LevelUpMove sTepigLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_EMBER), LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL), - //LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(19, MOVE_SMOG), LEVEL_UP_MOVE(21, MOVE_ROLLOUT), LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(27, MOVE_HEAT_CRASH), - //LEVEL_UP_MOVE(31, MOVE_ASSURANCE), + LEVEL_UP_MOVE(27, MOVE_HEAT_CRASH), + LEVEL_UP_MOVE(31, MOVE_ASSURANCE), LEVEL_UP_MOVE(33, MOVE_FLAMETHROWER), - //LEVEL_UP_MOVE(37, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(37, MOVE_HEAD_SMASH), LEVEL_UP_MOVE(39, MOVE_ROAR), - //LEVEL_UP_MOVE(43, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(43, MOVE_FLARE_BLITZ), LEVEL_UP_END }; static const struct LevelUpMove sPigniteLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ARM_THRUST), + //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), @@ -10106,22 +10106,22 @@ static const struct LevelUpMove sPigniteLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_EMBER), LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL), - //LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(20, MOVE_SMOG), LEVEL_UP_MOVE(23, MOVE_ROLLOUT), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(31, MOVE_HEAT_CRASH), - //LEVEL_UP_MOVE(36, MOVE_ASSURANCE), + LEVEL_UP_MOVE(31, MOVE_HEAT_CRASH), + LEVEL_UP_MOVE(36, MOVE_ASSURANCE), LEVEL_UP_MOVE(39, MOVE_FLAMETHROWER), - //LEVEL_UP_MOVE(44, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(44, MOVE_HEAD_SMASH), LEVEL_UP_MOVE(47, MOVE_ROAR), - //LEVEL_UP_MOVE(52, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(52, MOVE_FLARE_BLITZ), LEVEL_UP_END }; static const struct LevelUpMove sEmboarLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST), - //LEVEL_UP_MOVE( 1, 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_EMBER), @@ -10130,16 +10130,16 @@ static const struct LevelUpMove sEmboarLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_EMBER), LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL), - //LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(20, MOVE_SMOG), LEVEL_UP_MOVE(23, MOVE_ROLLOUT), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(31, MOVE_HEAT_CRASH), - //LEVEL_UP_MOVE(38, MOVE_ASSURANCE), + LEVEL_UP_MOVE(31, MOVE_HEAT_CRASH), + LEVEL_UP_MOVE(38, MOVE_ASSURANCE), LEVEL_UP_MOVE(43, MOVE_FLAMETHROWER), - //LEVEL_UP_MOVE(50, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(50, MOVE_HEAD_SMASH), LEVEL_UP_MOVE(55, MOVE_ROAR), - //LEVEL_UP_MOVE(62, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(62, MOVE_FLARE_BLITZ), LEVEL_UP_END }; @@ -10149,14 +10149,14 @@ static const struct LevelUpMove sOshawottLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_WATER_GUN), LEVEL_UP_MOVE(11, MOVE_WATER_SPORT), LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(17, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE(17, MOVE_RAZOR_SHELL), LEVEL_UP_MOVE(19, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(23, MOVE_WATER_PULSE), LEVEL_UP_MOVE(25, MOVE_REVENGE), - //LEVEL_UP_MOVE(29, MOVE_AQUA_JET), + LEVEL_UP_MOVE(29, MOVE_AQUA_JET), LEVEL_UP_MOVE(31, MOVE_ENCORE), - //LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(37, MOVE_RETALIATE), + LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(37, MOVE_RETALIATE), LEVEL_UP_MOVE(41, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -10171,21 +10171,21 @@ static const struct LevelUpMove sDewottLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_WATER_GUN), LEVEL_UP_MOVE(11, MOVE_WATER_SPORT), LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(18, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE(18, MOVE_RAZOR_SHELL), LEVEL_UP_MOVE(21, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(26, MOVE_WATER_PULSE), LEVEL_UP_MOVE(29, MOVE_REVENGE), - //LEVEL_UP_MOVE(34, MOVE_AQUA_JET), + LEVEL_UP_MOVE(34, MOVE_AQUA_JET), LEVEL_UP_MOVE(37, MOVE_ENCORE), - //LEVEL_UP_MOVE(42, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(45, MOVE_RETALIATE), + LEVEL_UP_MOVE(42, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(45, MOVE_RETALIATE), LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(53, MOVE_HYDRO_PUMP), LEVEL_UP_END }; static const struct LevelUpMove sSamurottLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SLASH), + //LEVEL_UP_MOVE( 0, MOVE_SLASH), LEVEL_UP_MOVE( 1, MOVE_SLASH), LEVEL_UP_MOVE( 1, MOVE_MEGAHORN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -10196,14 +10196,14 @@ static const struct LevelUpMove sSamurottLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_WATER_GUN), LEVEL_UP_MOVE(11, MOVE_WATER_SPORT), LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(18, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE(18, MOVE_RAZOR_SHELL), LEVEL_UP_MOVE(21, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(25, MOVE_WATER_PULSE), LEVEL_UP_MOVE(29, MOVE_REVENGE), - //LEVEL_UP_MOVE(34, MOVE_AQUA_JET), + LEVEL_UP_MOVE(34, MOVE_AQUA_JET), LEVEL_UP_MOVE(39, MOVE_ENCORE), - //LEVEL_UP_MOVE(46, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(51, MOVE_RETALIATE), + LEVEL_UP_MOVE(46, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(51, MOVE_RETALIATE), LEVEL_UP_MOVE(58, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(63, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -10219,11 +10219,11 @@ static const struct LevelUpMove sPatratLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_CRUNCH), LEVEL_UP_MOVE(18, MOVE_HYPNOSIS), LEVEL_UP_MOVE(21, MOVE_SUPER_FANG), - //LEVEL_UP_MOVE(23, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(23, MOVE_AFTER_YOU), LEVEL_UP_MOVE(26, MOVE_FOCUS_ENERGY), - //LEVEL_UP_MOVE(28, MOVE_WORK_UP), + LEVEL_UP_MOVE(28, MOVE_WORK_UP), LEVEL_UP_MOVE(31, MOVE_HYPER_FANG), - //LEVEL_UP_MOVE(33, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(33, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(36, MOVE_MEAN_LOOK), LEVEL_UP_MOVE(38, MOVE_BATON_PASS), LEVEL_UP_MOVE(41, MOVE_SLAM), @@ -10231,9 +10231,9 @@ static const struct LevelUpMove sPatratLevelUpLearnset[] = { }; static const struct LevelUpMove sWatchogLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_CONFUSE_RAY), + //LEVEL_UP_MOVE( 0, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), + LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -10246,11 +10246,11 @@ static const struct LevelUpMove sWatchogLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_CRUNCH), LEVEL_UP_MOVE(18, MOVE_HYPNOSIS), LEVEL_UP_MOVE(22, MOVE_SUPER_FANG), - //LEVEL_UP_MOVE(25, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(25, MOVE_AFTER_YOU), LEVEL_UP_MOVE(29, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(32, MOVE_PSYCH_UP), LEVEL_UP_MOVE(36, MOVE_HYPER_FANG), - //LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(43, MOVE_MEAN_LOOK), LEVEL_UP_MOVE(46, MOVE_BATON_PASS), LEVEL_UP_MOVE(50, MOVE_SLAM), @@ -10262,17 +10262,17 @@ static const struct LevelUpMove sLillipupLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE( 8, MOVE_BITE), - //LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(12, MOVE_HELPING_HAND), LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(19, MOVE_WORK_UP), + LEVEL_UP_MOVE(19, MOVE_WORK_UP), LEVEL_UP_MOVE(22, MOVE_CRUNCH), LEVEL_UP_MOVE(26, MOVE_ROAR), - //LEVEL_UP_MOVE(29, MOVE_RETALIATE), + LEVEL_UP_MOVE(29, MOVE_RETALIATE), LEVEL_UP_MOVE(33, MOVE_REVERSAL), - //LEVEL_UP_MOVE(36, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(40, MOVE_GIGA_IMPACT), - //LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(36, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(40, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH), LEVEL_UP_END }; @@ -10285,21 +10285,21 @@ static const struct LevelUpMove sHerdierLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_BITE), LEVEL_UP_MOVE(12, MOVE_HELPING_HAND), LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(20, MOVE_WORK_UP), + LEVEL_UP_MOVE(20, MOVE_WORK_UP), LEVEL_UP_MOVE(24, MOVE_CRUNCH), LEVEL_UP_MOVE(29, MOVE_ROAR), - //LEVEL_UP_MOVE(33, MOVE_RETALIATE), + LEVEL_UP_MOVE(33, MOVE_RETALIATE), LEVEL_UP_MOVE(38, MOVE_REVERSAL), - //LEVEL_UP_MOVE(42, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(47, MOVE_GIGA_IMPACT), - //LEVEL_UP_MOVE(52, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(42, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(47, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(52, MOVE_PLAY_ROUGH), LEVEL_UP_END }; static const struct LevelUpMove sStoutlandLevelUpLearnset[] = { - //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_ICE_FANG), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), @@ -10308,14 +10308,14 @@ static const struct LevelUpMove sStoutlandLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_BITE), LEVEL_UP_MOVE(12, MOVE_HELPING_HAND), LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(20, MOVE_WORK_UP), + LEVEL_UP_MOVE(20, MOVE_WORK_UP), LEVEL_UP_MOVE(24, MOVE_CRUNCH), LEVEL_UP_MOVE(29, MOVE_ROAR), - //LEVEL_UP_MOVE(36, MOVE_RETALIATE), + LEVEL_UP_MOVE(36, MOVE_RETALIATE), LEVEL_UP_MOVE(42, MOVE_REVERSAL), - //LEVEL_UP_MOVE(51, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(59, MOVE_GIGA_IMPACT), - //LEVEL_UP_MOVE(63, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(51, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(59, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(63, MOVE_PLAY_ROUGH), LEVEL_UP_END }; @@ -10328,15 +10328,15 @@ static const struct LevelUpMove sPurrloinLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_PURSUIT), LEVEL_UP_MOVE(19, MOVE_TORMENT), LEVEL_UP_MOVE(21, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE(24, MOVE_HONE_CLAWS), - //LEVEL_UP_MOVE(28, MOVE_ASSURANCE), + LEVEL_UP_MOVE(24, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(28, MOVE_ASSURANCE), LEVEL_UP_MOVE(30, MOVE_SLASH), - //LEVEL_UP_MOVE(33, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(37, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(33, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(37, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(39, MOVE_SNATCH), - //LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH), LEVEL_UP_END }; @@ -10352,34 +10352,34 @@ static const struct LevelUpMove sLiepardLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_PURSUIT), LEVEL_UP_MOVE(19, MOVE_TORMENT), LEVEL_UP_MOVE(22, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE(26, MOVE_HONE_CLAWS), - //LEVEL_UP_MOVE(31, MOVE_ASSURANCE), + LEVEL_UP_MOVE(26, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(31, MOVE_ASSURANCE), LEVEL_UP_MOVE(34, MOVE_SLASH), LEVEL_UP_MOVE(38, MOVE_TAUNT), - //LEVEL_UP_MOVE(43, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(43, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(47, MOVE_SNATCH), - //LEVEL_UP_MOVE(50, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(55, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(58, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(50, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(55, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(58, MOVE_PLAY_ROUGH), LEVEL_UP_END }; static const struct LevelUpMove sPansageLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 4, MOVE_LEER), LEVEL_UP_MOVE( 7, MOVE_LICK), LEVEL_UP_MOVE(10, MOVE_VINE_WHIP), LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(16, MOVE_LEECH_SEED), LEVEL_UP_MOVE(19, MOVE_BITE), - //LEVEL_UP_MOVE(22, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(22, MOVE_SEED_BOMB), LEVEL_UP_MOVE(25, MOVE_TORMENT), - //LEVEL_UP_MOVE(28, MOVE_FLING), - //LEVEL_UP_MOVE(31, MOVE_ACROBATICS), - //LEVEL_UP_MOVE(34, MOVE_GRASS_KNOT), + LEVEL_UP_MOVE(28, MOVE_FLING), + LEVEL_UP_MOVE(31, MOVE_ACROBATICS), + LEVEL_UP_MOVE(34, MOVE_GRASS_KNOT), LEVEL_UP_MOVE(37, MOVE_RECYCLE), - //LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(43, MOVE_CRUNCH), LEVEL_UP_END }; @@ -10388,26 +10388,26 @@ static const struct LevelUpMove sSimisageLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_LICK), LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES), - //LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB), + LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB), LEVEL_UP_END }; static const struct LevelUpMove sPansearLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 4, MOVE_LEER), LEVEL_UP_MOVE( 7, MOVE_LICK), - //LEVEL_UP_MOVE(10, MOVE_INCINERATE), + LEVEL_UP_MOVE(10, MOVE_INCINERATE), LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(16, MOVE_YAWN), LEVEL_UP_MOVE(19, MOVE_BITE), - //LEVEL_UP_MOVE(22, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(22, MOVE_FLAME_BURST), LEVEL_UP_MOVE(25, MOVE_AMNESIA), - //LEVEL_UP_MOVE(28, MOVE_FLING), - //LEVEL_UP_MOVE(31, MOVE_ACROBATICS), + LEVEL_UP_MOVE(28, MOVE_FLING), + LEVEL_UP_MOVE(31, MOVE_ACROBATICS), LEVEL_UP_MOVE(34, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(37, MOVE_RECYCLE), - //LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(43, MOVE_CRUNCH), LEVEL_UP_END }; @@ -10416,26 +10416,26 @@ static const struct LevelUpMove sSimisearLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_LICK), LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES), - //LEVEL_UP_MOVE( 1, MOVE_FLAME_BURST), + LEVEL_UP_MOVE( 1, MOVE_FLAME_BURST), LEVEL_UP_END }; static const struct LevelUpMove sPanpourLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 4, MOVE_LEER), LEVEL_UP_MOVE( 7, MOVE_LICK), LEVEL_UP_MOVE(10, MOVE_WATER_GUN), LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(16, MOVE_WATER_SPORT), LEVEL_UP_MOVE(19, MOVE_BITE), - //LEVEL_UP_MOVE(22, MOVE_SCALD), + LEVEL_UP_MOVE(22, MOVE_SCALD), LEVEL_UP_MOVE(25, MOVE_TAUNT), - //LEVEL_UP_MOVE(28, MOVE_FLING), - //LEVEL_UP_MOVE(31, MOVE_ACROBATICS), - //LEVEL_UP_MOVE(34, MOVE_BRINE), + LEVEL_UP_MOVE(28, MOVE_FLING), + LEVEL_UP_MOVE(31, MOVE_ACROBATICS), + LEVEL_UP_MOVE(34, MOVE_BRINE), LEVEL_UP_MOVE(37, MOVE_RECYCLE), - //LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(43, MOVE_CRUNCH), LEVEL_UP_END }; @@ -10444,35 +10444,35 @@ static const struct LevelUpMove sSimipourLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_LICK), LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES), - //LEVEL_UP_MOVE( 1, MOVE_SCALD), + LEVEL_UP_MOVE( 1, MOVE_SCALD), LEVEL_UP_END }; static const struct LevelUpMove sMunnaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), - //LEVEL_UP_MOVE( 5, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE( 5, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE( 7, MOVE_YAWN), LEVEL_UP_MOVE(11, MOVE_PSYBEAM), LEVEL_UP_MOVE(13, MOVE_IMPRISON), LEVEL_UP_MOVE(17, MOVE_MOONLIGHT), LEVEL_UP_MOVE(19, MOVE_HYPNOSIS), - //LEVEL_UP_MOVE(23, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(25, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(23, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(25, MOVE_SYNCHRONOISE), LEVEL_UP_MOVE(29, MOVE_NIGHTMARE), LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(35, MOVE_CALM_MIND), LEVEL_UP_MOVE(37, MOVE_PSYCHIC), LEVEL_UP_MOVE(41, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(43, MOVE_TELEKINESIS), - //LEVEL_UP_MOVE(47, MOVE_STORED_POWER), + LEVEL_UP_MOVE(43, MOVE_TELEKINESIS), + LEVEL_UP_MOVE(47, MOVE_STORED_POWER), LEVEL_UP_END }; static const struct LevelUpMove sMusharnaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), - //LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE( 1, MOVE_PSYBEAM), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), LEVEL_UP_END @@ -10484,15 +10484,15 @@ static const struct LevelUpMove sPidoveLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_LEER), LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(15, MOVE_AIR_CUTTER), - //LEVEL_UP_MOVE(18, MOVE_ROOST), + LEVEL_UP_MOVE(18, MOVE_ROOST), LEVEL_UP_MOVE(22, MOVE_DETECT), LEVEL_UP_MOVE(25, MOVE_TAUNT), - //LEVEL_UP_MOVE(29, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(29, MOVE_AIR_SLASH), LEVEL_UP_MOVE(32, MOVE_RAZOR_WIND), LEVEL_UP_MOVE(36, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE(39, MOVE_SWAGGER), LEVEL_UP_MOVE(43, MOVE_FACADE), - //LEVEL_UP_MOVE(46, MOVE_TAILWIND), + LEVEL_UP_MOVE(46, MOVE_TAILWIND), LEVEL_UP_MOVE(50, MOVE_SKY_ATTACK), LEVEL_UP_END }; @@ -10506,15 +10506,15 @@ static const struct LevelUpMove sTranquillLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_LEER), LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(15, MOVE_AIR_CUTTER), - //LEVEL_UP_MOVE(18, MOVE_ROOST), + LEVEL_UP_MOVE(18, MOVE_ROOST), LEVEL_UP_MOVE(23, MOVE_DETECT), LEVEL_UP_MOVE(27, MOVE_TAUNT), - //LEVEL_UP_MOVE(32, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(32, MOVE_AIR_SLASH), LEVEL_UP_MOVE(36, MOVE_RAZOR_WIND), LEVEL_UP_MOVE(41, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE(45, MOVE_SWAGGER), LEVEL_UP_MOVE(50, MOVE_FACADE), - //LEVEL_UP_MOVE(54, MOVE_TAILWIND), + LEVEL_UP_MOVE(54, MOVE_TAILWIND), LEVEL_UP_MOVE(59, MOVE_SKY_ATTACK), LEVEL_UP_END }; @@ -10528,15 +10528,15 @@ static const struct LevelUpMove sUnfezantLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_LEER), LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(15, MOVE_AIR_CUTTER), - //LEVEL_UP_MOVE(18, MOVE_ROOST), + LEVEL_UP_MOVE(18, MOVE_ROOST), LEVEL_UP_MOVE(23, MOVE_DETECT), LEVEL_UP_MOVE(27, MOVE_TAUNT), - //LEVEL_UP_MOVE(33, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(33, MOVE_AIR_SLASH), LEVEL_UP_MOVE(38, MOVE_RAZOR_WIND), LEVEL_UP_MOVE(44, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE(49, MOVE_SWAGGER), LEVEL_UP_MOVE(55, MOVE_FACADE), - //LEVEL_UP_MOVE(60, MOVE_TAILWIND), + LEVEL_UP_MOVE(60, MOVE_TAILWIND), LEVEL_UP_MOVE(66, MOVE_SKY_ATTACK), LEVEL_UP_END }; @@ -10547,19 +10547,19 @@ static const struct LevelUpMove sBlitzleLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, 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(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(32, MOVE_DISCHARGE), LEVEL_UP_MOVE(36, MOVE_AGILITY), - //LEVEL_UP_MOVE(39, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(39, MOVE_WILD_CHARGE), LEVEL_UP_MOVE(43, MOVE_THRASH), LEVEL_UP_END }; static const struct LevelUpMove sZebstrikaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE), + 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), @@ -10568,15 +10568,15 @@ static const struct LevelUpMove sZebstrikaLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, 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(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(36, MOVE_DISCHARGE), LEVEL_UP_MOVE(42, MOVE_AGILITY), - //LEVEL_UP_MOVE(47, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(47, MOVE_WILD_CHARGE), LEVEL_UP_MOVE(53, MOVE_THRASH), - //LEVEL_UP_MOVE(58, MOVE_ION_DELUGE), + LEVEL_UP_MOVE(58, MOVE_ION_DELUGE), LEVEL_UP_END }; @@ -10588,18 +10588,18 @@ static const struct LevelUpMove sRoggenrolaLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_ROCK_BLAST), LEVEL_UP_MOVE(17, MOVE_MUD_SLAP), LEVEL_UP_MOVE(20, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(27, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(33, MOVE_SANDSTORM), - //LEVEL_UP_MOVE(36, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(36, MOVE_STONE_EDGE), LEVEL_UP_MOVE(40, MOVE_EXPLOSION), LEVEL_UP_END }; static const struct LevelUpMove sBoldoreLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_POWER_GEM), - //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), + LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), @@ -10610,17 +10610,17 @@ static const struct LevelUpMove sBoldoreLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_ROCK_BLAST), LEVEL_UP_MOVE(17, MOVE_MUD_SLAP), LEVEL_UP_MOVE(20, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(30, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(36, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(36, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(42, MOVE_SANDSTORM), - //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), LEVEL_UP_MOVE(55, MOVE_EXPLOSION), LEVEL_UP_END }; static const struct LevelUpMove sGigalithLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), + LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), @@ -10631,11 +10631,11 @@ static const struct LevelUpMove sGigalithLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_ROCK_BLAST), LEVEL_UP_MOVE(17, MOVE_MUD_SLAP), LEVEL_UP_MOVE(20, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(30, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(36, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(36, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(42, MOVE_SANDSTORM), - //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), LEVEL_UP_MOVE(55, MOVE_EXPLOSION), LEVEL_UP_END }; @@ -10644,14 +10644,14 @@ static const struct LevelUpMove sWoobatLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 4, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE( 8, MOVE_GUST), - //LEVEL_UP_MOVE(12, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(15, MOVE_HEART_STAMP), + LEVEL_UP_MOVE(12, MOVE_ASSURANCE), + LEVEL_UP_MOVE(15, MOVE_HEART_STAMP), LEVEL_UP_MOVE(19, MOVE_IMPRISON), LEVEL_UP_MOVE(21, MOVE_AIR_CUTTER), LEVEL_UP_MOVE(25, MOVE_ATTRACT), LEVEL_UP_MOVE(29, MOVE_AMNESIA), LEVEL_UP_MOVE(29, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(32, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(32, MOVE_AIR_SLASH), LEVEL_UP_MOVE(36, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(41, MOVE_PSYCHIC), LEVEL_UP_MOVE(47, MOVE_ENDEAVOR), @@ -10662,17 +10662,17 @@ static const struct LevelUpMove sSwoobatLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE( 1, MOVE_GUST), - //LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), + LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), LEVEL_UP_MOVE( 4, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE( 8, MOVE_GUST), - //LEVEL_UP_MOVE(12, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(15, MOVE_HEART_STAMP), + LEVEL_UP_MOVE(12, MOVE_ASSURANCE), + LEVEL_UP_MOVE(15, MOVE_HEART_STAMP), LEVEL_UP_MOVE(19, MOVE_IMPRISON), LEVEL_UP_MOVE(21, MOVE_AIR_CUTTER), LEVEL_UP_MOVE(25, MOVE_ATTRACT), LEVEL_UP_MOVE(29, MOVE_AMNESIA), LEVEL_UP_MOVE(29, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(32, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(32, MOVE_AIR_SLASH), LEVEL_UP_MOVE(36, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(41, MOVE_PSYCHIC), LEVEL_UP_MOVE(47, MOVE_ENDEAVOR), @@ -10687,21 +10687,21 @@ static const struct LevelUpMove sDrilburLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(15, MOVE_METAL_CLAW), LEVEL_UP_MOVE(19, MOVE_DIG), - //LEVEL_UP_MOVE(22, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(22, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(26, MOVE_SLASH), LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(33, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(36, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(40, MOVE_SANDSTORM), - //LEVEL_UP_MOVE(43, MOVE_DRILL_RUN), + LEVEL_UP_MOVE(43, MOVE_DRILL_RUN), LEVEL_UP_MOVE(47, MOVE_FISSURE), LEVEL_UP_END }; static const struct LevelUpMove sExcadrillLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_HORN_DRILL), + //LEVEL_UP_MOVE( 0, MOVE_HORN_DRILL), LEVEL_UP_MOVE( 1, MOVE_HORN_DRILL), - //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), + LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), @@ -10711,39 +10711,39 @@ static const struct LevelUpMove sExcadrillLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(15, MOVE_METAL_CLAW), LEVEL_UP_MOVE(19, MOVE_DIG), - //LEVEL_UP_MOVE(22, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(22, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(26, MOVE_SLASH), LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(36, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(42, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(49, MOVE_SANDSTORM), - //LEVEL_UP_MOVE(55, MOVE_DRILL_RUN), + LEVEL_UP_MOVE(55, MOVE_DRILL_RUN), LEVEL_UP_MOVE(62, MOVE_FISSURE), LEVEL_UP_END }; static const struct LevelUpMove sAudinoLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), + LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE( 5, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 5, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE( 9, MOVE_REFRESH), - //LEVEL_UP_MOVE(13, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(13, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(17, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(21, MOVE_ATTRACT), LEVEL_UP_MOVE(25, MOVE_SECRET_POWER), - //LEVEL_UP_MOVE(29, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(29, MOVE_ENTRAINMENT), LEVEL_UP_MOVE(33, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(37, MOVE_HEAL_PULSE), - //LEVEL_UP_MOVE(41, MOVE_AFTER_YOU), - //LEVEL_UP_MOVE(45, MOVE_SIMPLE_BEAM), + LEVEL_UP_MOVE(37, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(41, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(45, MOVE_SIMPLE_BEAM), LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(53, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(57, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(57, MOVE_LAST_RESORT), LEVEL_UP_END }; @@ -10754,14 +10754,14 @@ static const struct LevelUpMove sTimburrLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_BIDE), LEVEL_UP_MOVE(12, MOVE_LOW_KICK), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP), - //LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(28, MOVE_BULK_UP), LEVEL_UP_MOVE(31, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(34, MOVE_DYNAMIC_PUNCH), LEVEL_UP_MOVE(37, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(40, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE(43, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(40, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(43, MOVE_STONE_EDGE), LEVEL_UP_MOVE(46, MOVE_FOCUS_PUNCH), LEVEL_UP_MOVE(49, MOVE_SUPERPOWER), LEVEL_UP_END @@ -10776,14 +10776,14 @@ static const struct LevelUpMove sGurdurrLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_BIDE), LEVEL_UP_MOVE(12, MOVE_LOW_KICK), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP), - //LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(29, MOVE_BULK_UP), LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(37, MOVE_DYNAMIC_PUNCH), LEVEL_UP_MOVE(41, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(45, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE(49, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(45, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(49, MOVE_STONE_EDGE), LEVEL_UP_MOVE(53, MOVE_FOCUS_PUNCH), LEVEL_UP_MOVE(57, MOVE_SUPERPOWER), LEVEL_UP_END @@ -10798,14 +10798,14 @@ static const struct LevelUpMove sConkeldurrLevelUpLearnset[] = { LEVEL_UP_MOVE( 8, MOVE_BIDE), LEVEL_UP_MOVE(12, MOVE_LOW_KICK), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP), - //LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(29, MOVE_BULK_UP), LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(37, MOVE_DYNAMIC_PUNCH), LEVEL_UP_MOVE(41, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(45, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE(49, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(45, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(49, MOVE_STONE_EDGE), LEVEL_UP_MOVE(53, MOVE_FOCUS_PUNCH), LEVEL_UP_MOVE(57, MOVE_SUPERPOWER), LEVEL_UP_END @@ -10815,15 +10815,15 @@ static const struct LevelUpMove sTympoleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 5, MOVE_SUPERSONIC), - //LEVEL_UP_MOVE( 9, MOVE_ROUND), + LEVEL_UP_MOVE( 9, MOVE_ROUND), LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(16, MOVE_MUD_SHOT), - //LEVEL_UP_MOVE(20, MOVE_AQUA_RING), + LEVEL_UP_MOVE(20, MOVE_AQUA_RING), LEVEL_UP_MOVE(23, MOVE_UPROAR), LEVEL_UP_MOVE(27, MOVE_MUDDY_WATER), LEVEL_UP_MOVE(31, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(34, MOVE_FLAIL), - //LEVEL_UP_MOVE(38, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(38, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(45, MOVE_HYPER_VOICE), LEVEL_UP_END @@ -10833,47 +10833,47 @@ static const struct LevelUpMove sPalpitoadLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), - //LEVEL_UP_MOVE( 1, MOVE_ROUND), + LEVEL_UP_MOVE( 1, MOVE_ROUND), LEVEL_UP_MOVE( 5, MOVE_SUPERSONIC), - //LEVEL_UP_MOVE( 9, MOVE_ROUND), + LEVEL_UP_MOVE( 9, MOVE_ROUND), LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(16, MOVE_MUD_SHOT), - //LEVEL_UP_MOVE(20, MOVE_AQUA_RING), + LEVEL_UP_MOVE(20, MOVE_AQUA_RING), LEVEL_UP_MOVE(23, MOVE_UPROAR), LEVEL_UP_MOVE(28, MOVE_MUDDY_WATER), LEVEL_UP_MOVE(33, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(37, MOVE_FLAIL), - //LEVEL_UP_MOVE(42, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(42, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE(47, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(51, MOVE_HYPER_VOICE), LEVEL_UP_END }; static const struct LevelUpMove sSeismitoadLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ACID), + //LEVEL_UP_MOVE( 0, MOVE_ACID), LEVEL_UP_MOVE( 1, MOVE_ACID), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), - //LEVEL_UP_MOVE( 1, MOVE_ROUND), + LEVEL_UP_MOVE( 1, MOVE_ROUND), LEVEL_UP_MOVE( 5, MOVE_SUPERSONIC), - //LEVEL_UP_MOVE( 9, MOVE_ROUND), + LEVEL_UP_MOVE( 9, MOVE_ROUND), LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(16, MOVE_MUD_SHOT), - //LEVEL_UP_MOVE(20, MOVE_AQUA_RING), + LEVEL_UP_MOVE(20, MOVE_AQUA_RING), LEVEL_UP_MOVE(23, MOVE_UPROAR), LEVEL_UP_MOVE(28, MOVE_MUDDY_WATER), LEVEL_UP_MOVE(33, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(39, MOVE_FLAIL), - //LEVEL_UP_MOVE(44, MOVE_DRAIN_PUNCH), - //LEVEL_UP_MOVE(49, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(44, MOVE_DRAIN_PUNCH), + LEVEL_UP_MOVE(49, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE(53, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(59, MOVE_HYPER_VOICE), LEVEL_UP_END }; static const struct LevelUpMove sThrohLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_MAT_BLOCK), + LEVEL_UP_MOVE( 1, MOVE_MAT_BLOCK), LEVEL_UP_MOVE( 1, MOVE_BIND), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BIDE), @@ -10881,12 +10881,12 @@ static const struct LevelUpMove sThrohLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_SEISMIC_TOSS), LEVEL_UP_MOVE( 9, MOVE_VITAL_THROW), LEVEL_UP_MOVE(13, MOVE_REVENGE), - //LEVEL_UP_MOVE(17, MOVE_STORM_THROW), + LEVEL_UP_MOVE(17, MOVE_STORM_THROW), LEVEL_UP_MOVE(21, MOVE_BODY_SLAM), LEVEL_UP_MOVE(25, MOVE_BULK_UP), - //LEVEL_UP_MOVE(29, MOVE_CIRCLE_THROW), + LEVEL_UP_MOVE(29, MOVE_CIRCLE_THROW), LEVEL_UP_MOVE(33, MOVE_ENDURE), - //LEVEL_UP_MOVE(37, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(37, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(41, MOVE_SUPERPOWER), LEVEL_UP_MOVE(45, MOVE_REVERSAL), LEVEL_UP_END @@ -10898,15 +10898,15 @@ static const struct LevelUpMove sSawkLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_BIDE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 5, MOVE_DOUBLE_KICK), - //LEVEL_UP_MOVE( 9, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE( 9, MOVE_LOW_SWEEP), LEVEL_UP_MOVE(13, MOVE_COUNTER), LEVEL_UP_MOVE(17, MOVE_KARATE_CHOP), LEVEL_UP_MOVE(21, MOVE_BRICK_BREAK), LEVEL_UP_MOVE(25, MOVE_BULK_UP), - //LEVEL_UP_MOVE(29, MOVE_RETALIATE), + LEVEL_UP_MOVE(29, MOVE_RETALIATE), LEVEL_UP_MOVE(33, MOVE_ENDURE), - //LEVEL_UP_MOVE(37, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(41, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(37, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(41, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(45, MOVE_REVERSAL), LEVEL_UP_END }; @@ -10914,45 +10914,45 @@ static const struct LevelUpMove sSawkLevelUpLearnset[] = { static const struct LevelUpMove sSewaddleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), - //LEVEL_UP_MOVE( 8, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 8, MOVE_BUG_BITE), LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG), + 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(31, MOVE_STICKY_WEB), + LEVEL_UP_MOVE(36, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(43, MOVE_FLAIL), LEVEL_UP_END }; static const struct LevelUpMove sSwadloonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_PROTECT), + //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_STRING_SHOT), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), LEVEL_UP_END }; static const struct LevelUpMove sLeavannyLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SLASH), + //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_BUG_BITE), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE( 8, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 8, MOVE_BUG_BITE), LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG), - //LEVEL_UP_MOVE(29, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(29, MOVE_FELL_STINGER), LEVEL_UP_MOVE(32, MOVE_HELPING_HAND), LEVEL_UP_MOVE(36, MOVE_LEAF_BLADE), - //LEVEL_UP_MOVE(39, MOVE_X_SCISSOR), - //LEVEL_UP_MOVE(43, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(39, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(43, MOVE_ENTRAINMENT), LEVEL_UP_MOVE(46, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(50, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(50, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -10964,19 +10964,19 @@ static const struct LevelUpMove sVenipedeLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_PURSUIT), LEVEL_UP_MOVE(15, MOVE_PROTECT), LEVEL_UP_MOVE(19, MOVE_POISON_TAIL), - //LEVEL_UP_MOVE(22, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(26, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(22, MOVE_BUG_BITE), + LEVEL_UP_MOVE(26, MOVE_VENOSHOCK), LEVEL_UP_MOVE(29, MOVE_AGILITY), - //LEVEL_UP_MOVE(33, MOVE_STEAMROLLER), + LEVEL_UP_MOVE(33, MOVE_STEAMROLLER), LEVEL_UP_MOVE(36, MOVE_TOXIC), - //LEVEL_UP_MOVE(38, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(40, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE(38, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(40, MOVE_ROCK_CLIMB), LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sWhirlipedeLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_IRON_DEFENSE), + //LEVEL_UP_MOVE( 0, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), @@ -10987,19 +10987,19 @@ static const struct LevelUpMove sWhirlipedeLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_PURSUIT), LEVEL_UP_MOVE(15, MOVE_PROTECT), LEVEL_UP_MOVE(19, MOVE_POISON_TAIL), - //LEVEL_UP_MOVE(23, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(28, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(23, MOVE_BUG_BITE), + LEVEL_UP_MOVE(28, MOVE_VENOSHOCK), LEVEL_UP_MOVE(32, MOVE_AGILITY), - //LEVEL_UP_MOVE(37, MOVE_STEAMROLLER), + LEVEL_UP_MOVE(37, MOVE_STEAMROLLER), LEVEL_UP_MOVE(41, MOVE_TOXIC), - //LEVEL_UP_MOVE(43, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(46, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE(43, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(46, MOVE_ROCK_CLIMB), LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sScolipedeLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_BATON_PASS), + //LEVEL_UP_MOVE( 0, MOVE_BATON_PASS), LEVEL_UP_MOVE( 1, MOVE_BATON_PASS), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE( 1, MOVE_MEGAHORN), @@ -11012,13 +11012,13 @@ static const struct LevelUpMove sScolipedeLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_PURSUIT), LEVEL_UP_MOVE(15, MOVE_PROTECT), LEVEL_UP_MOVE(19, MOVE_POISON_TAIL), - //LEVEL_UP_MOVE(23, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(28, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(23, MOVE_BUG_BITE), + LEVEL_UP_MOVE(28, MOVE_VENOSHOCK), LEVEL_UP_MOVE(33, MOVE_AGILITY), - //LEVEL_UP_MOVE(39, MOVE_STEAMROLLER), + LEVEL_UP_MOVE(39, MOVE_STEAMROLLER), LEVEL_UP_MOVE(44, MOVE_TOXIC), - //LEVEL_UP_MOVE(47, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(50, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE(47, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(50, MOVE_ROCK_CLIMB), LEVEL_UP_MOVE(55, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(65, MOVE_MEGAHORN), LEVEL_UP_END @@ -11026,7 +11026,7 @@ static const struct LevelUpMove sScolipedeLevelUpLearnset[] = { static const struct LevelUpMove sCottoneeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ABSORB), - //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), LEVEL_UP_MOVE( 4, MOVE_GROWTH), LEVEL_UP_MOVE( 8, MOVE_LEECH_SEED), LEVEL_UP_MOVE(10, MOVE_STUN_SPORE), @@ -11037,8 +11037,8 @@ static const struct LevelUpMove sCottoneeLevelUpLearnset[] = { LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(28, MOVE_CHARM), LEVEL_UP_MOVE(31, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(35, MOVE_ENERGY_BALL), - //LEVEL_UP_MOVE(37, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(35, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(37, MOVE_COTTON_GUARD), LEVEL_UP_MOVE(40, MOVE_SUNNY_DAY), LEVEL_UP_MOVE(44, MOVE_ENDEAVOR), LEVEL_UP_MOVE(46, MOVE_SOLAR_BEAM), @@ -11051,9 +11051,9 @@ static const struct LevelUpMove sWhimsicottLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_COTTON_SPORE), LEVEL_UP_MOVE(10, MOVE_GUST), - //LEVEL_UP_MOVE(28, MOVE_TAILWIND), - //LEVEL_UP_MOVE(46, MOVE_HURRICANE), - //LEVEL_UP_MOVE(50, MOVE_MOONBLAST), + LEVEL_UP_MOVE(28, MOVE_TAILWIND), + LEVEL_UP_MOVE(46, MOVE_HURRICANE), + LEVEL_UP_MOVE(50, MOVE_MOONBLAST), LEVEL_UP_END }; @@ -11069,11 +11069,11 @@ static const struct LevelUpMove sPetililLevelUpLearnset[] = { LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(28, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(31, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(35, MOVE_ENERGY_BALL), - //LEVEL_UP_MOVE(37, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(35, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(37, MOVE_ENTRAINMENT), LEVEL_UP_MOVE(40, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(44, MOVE_AFTER_YOU), - //LEVEL_UP_MOVE(46, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(44, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(46, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -11083,9 +11083,9 @@ static const struct LevelUpMove sLilligantLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), LEVEL_UP_MOVE(10, MOVE_TEETER_DANCE), - //LEVEL_UP_MOVE(28, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(28, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE(46, MOVE_PETAL_DANCE), - //LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD), LEVEL_UP_END }; @@ -11096,18 +11096,18 @@ static const struct LevelUpMove sBasculinLevelUpLearnset[] = { LEVEL_UP_MOVE( 3, MOVE_UPROAR), LEVEL_UP_MOVE( 5, MOVE_HEADBUTT), LEVEL_UP_MOVE( 7, MOVE_BITE), - //LEVEL_UP_MOVE( 9, MOVE_AQUA_JET), - //LEVEL_UP_MOVE(11, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE( 9, MOVE_AQUA_JET), + LEVEL_UP_MOVE(11, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(14, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(17, MOVE_CRUNCH), - //LEVEL_UP_MOVE(20, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(23, MOVE_SOAK), + LEVEL_UP_MOVE(20, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(23, MOVE_SOAK), LEVEL_UP_MOVE(26, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(30, MOVE_SCARY_FACE), LEVEL_UP_MOVE(34, MOVE_FLAIL), - //LEVEL_UP_MOVE(38, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(38, MOVE_FINAL_GAMBIT), LEVEL_UP_MOVE(42, MOVE_THRASH), - //LEVEL_UP_MOVE(46, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(46, MOVE_HEAD_SMASH), LEVEL_UP_END }; @@ -11118,14 +11118,14 @@ static const struct LevelUpMove sSandileLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(10, MOVE_TORMENT), LEVEL_UP_MOVE(13, MOVE_SAND_TOMB), - //LEVEL_UP_MOVE(16, MOVE_ASSURANCE), + LEVEL_UP_MOVE(16, MOVE_ASSURANCE), LEVEL_UP_MOVE(19, MOVE_MUD_SLAP), - //LEVEL_UP_MOVE(22, MOVE_EMBARGO), + LEVEL_UP_MOVE(22, MOVE_EMBARGO), LEVEL_UP_MOVE(25, MOVE_SWAGGER), LEVEL_UP_MOVE(28, MOVE_CRUNCH), LEVEL_UP_MOVE(31, MOVE_DIG), LEVEL_UP_MOVE(34, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(37, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(37, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(40, MOVE_SANDSTORM), LEVEL_UP_MOVE(43, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(46, MOVE_THRASH), @@ -11141,14 +11141,14 @@ static const struct LevelUpMove sKrokorokLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(10, MOVE_TORMENT), LEVEL_UP_MOVE(13, MOVE_SAND_TOMB), - //LEVEL_UP_MOVE(16, MOVE_ASSURANCE), + LEVEL_UP_MOVE(16, MOVE_ASSURANCE), LEVEL_UP_MOVE(19, MOVE_MUD_SLAP), - //LEVEL_UP_MOVE(22, MOVE_EMBARGO), + LEVEL_UP_MOVE(22, MOVE_EMBARGO), LEVEL_UP_MOVE(25, MOVE_SWAGGER), LEVEL_UP_MOVE(28, MOVE_CRUNCH), LEVEL_UP_MOVE(32, MOVE_DIG), LEVEL_UP_MOVE(36, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(40, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(40, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(44, MOVE_SANDSTORM), LEVEL_UP_MOVE(48, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(52, MOVE_THRASH), @@ -11156,7 +11156,7 @@ static const struct LevelUpMove sKrokorokLevelUpLearnset[] = { }; static const struct LevelUpMove sKrookodileLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP), + LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_RAGE), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -11165,14 +11165,14 @@ static const struct LevelUpMove sKrookodileLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(10, MOVE_TORMENT), LEVEL_UP_MOVE(13, MOVE_SAND_TOMB), - //LEVEL_UP_MOVE(16, MOVE_ASSURANCE), + LEVEL_UP_MOVE(16, MOVE_ASSURANCE), LEVEL_UP_MOVE(19, MOVE_MUD_SLAP), - //LEVEL_UP_MOVE(22, MOVE_EMBARGO), + LEVEL_UP_MOVE(22, MOVE_EMBARGO), LEVEL_UP_MOVE(25, MOVE_SWAGGER), LEVEL_UP_MOVE(28, MOVE_CRUNCH), LEVEL_UP_MOVE(32, MOVE_DIG), LEVEL_UP_MOVE(36, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(42, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(42, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(48, MOVE_SANDSTORM), LEVEL_UP_MOVE(54, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(60, MOVE_OUTRAGE), @@ -11182,17 +11182,17 @@ static const struct LevelUpMove sKrookodileLevelUpLearnset[] = { static const struct LevelUpMove sDarumakaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 3, MOVE_ROLLOUT), - //LEVEL_UP_MOVE( 6, MOVE_INCINERATE), + LEVEL_UP_MOVE( 6, MOVE_INCINERATE), LEVEL_UP_MOVE( 9, MOVE_RAGE), - //LEVEL_UP_MOVE(11, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(11, MOVE_FIRE_FANG), LEVEL_UP_MOVE(14, MOVE_HEADBUTT), LEVEL_UP_MOVE(17, MOVE_UPROAR), LEVEL_UP_MOVE(19, MOVE_FACADE), LEVEL_UP_MOVE(22, MOVE_FIRE_PUNCH), - //LEVEL_UP_MOVE(25, MOVE_WORK_UP), + LEVEL_UP_MOVE(25, MOVE_WORK_UP), LEVEL_UP_MOVE(27, MOVE_THRASH), LEVEL_UP_MOVE(30, MOVE_BELLY_DRUM), - //LEVEL_UP_MOVE(33, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(33, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE(35, MOVE_TAUNT), LEVEL_UP_MOVE(39, MOVE_SUPERPOWER), LEVEL_UP_MOVE(42, MOVE_OVERHEAT), @@ -11201,23 +11201,23 @@ static const struct LevelUpMove sDarumakaLevelUpLearnset[] = { static const struct LevelUpMove sDarmanitanLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), - //LEVEL_UP_MOVE( 1, MOVE_INCINERATE), + LEVEL_UP_MOVE( 1, MOVE_INCINERATE), LEVEL_UP_MOVE( 1, MOVE_RAGE), LEVEL_UP_MOVE( 3, MOVE_ROLLOUT), - //LEVEL_UP_MOVE( 6, MOVE_INCINERATE), + LEVEL_UP_MOVE( 6, MOVE_INCINERATE), LEVEL_UP_MOVE( 9, MOVE_RAGE), - //LEVEL_UP_MOVE(11, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(11, MOVE_FIRE_FANG), LEVEL_UP_MOVE(14, MOVE_HEADBUTT), LEVEL_UP_MOVE(17, MOVE_SWAGGER), LEVEL_UP_MOVE(19, MOVE_FACADE), LEVEL_UP_MOVE(22, MOVE_FIRE_PUNCH), - //LEVEL_UP_MOVE(25, MOVE_WORK_UP), + LEVEL_UP_MOVE(25, MOVE_WORK_UP), LEVEL_UP_MOVE(27, MOVE_THRASH), LEVEL_UP_MOVE(30, MOVE_BELLY_DRUM), - //LEVEL_UP_MOVE(33, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(33, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE(39, MOVE_TAUNT), LEVEL_UP_MOVE(47, MOVE_SUPERPOWER), LEVEL_UP_MOVE(54, MOVE_OVERHEAT), @@ -11225,9 +11225,9 @@ static const struct LevelUpMove sDarmanitanLevelUpLearnset[] = { }; static const struct LevelUpMove sMaractusLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD), - //LEVEL_UP_MOVE( 1, MOVE_COTTON_GUARD), - //LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), + LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD), + LEVEL_UP_MOVE( 1, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 3, MOVE_SWEET_SCENT), @@ -11238,15 +11238,15 @@ static const struct LevelUpMove sMaractusLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_COTTON_SPORE), LEVEL_UP_MOVE(22, MOVE_NEEDLE_ARM), LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(29, MOVE_ACUPRESSURE), + LEVEL_UP_MOVE(29, MOVE_ACUPRESSURE), LEVEL_UP_MOVE(33, MOVE_INGRAIN), LEVEL_UP_MOVE(38, MOVE_PETAL_DANCE), - //LEVEL_UP_MOVE(42, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(42, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(45, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(48, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(48, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE(50, MOVE_SOLAR_BEAM), - //LEVEL_UP_MOVE(55, MOVE_COTTON_GUARD), - //LEVEL_UP_MOVE(57, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(55, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(57, MOVE_AFTER_YOU), LEVEL_UP_END }; @@ -11256,21 +11256,21 @@ static const struct LevelUpMove sDwebbleLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_WITHDRAW), LEVEL_UP_MOVE(11, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(13, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(17, MOVE_SMACK_DOWN), - //LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH), - //LEVEL_UP_MOVE(23, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(17, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(23, MOVE_BUG_BITE), + LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(31, MOVE_SLASH), - //LEVEL_UP_MOVE(35, MOVE_X_SCISSOR), - //LEVEL_UP_MOVE(37, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(35, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(37, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(41, MOVE_FLAIL), - //LEVEL_UP_MOVE(43, MOVE_ROCK_WRECKER), + LEVEL_UP_MOVE(43, MOVE_ROCK_WRECKER), LEVEL_UP_END }; static const struct LevelUpMove sCrustleLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH), LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), @@ -11278,16 +11278,16 @@ static const struct LevelUpMove sCrustleLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_WITHDRAW), LEVEL_UP_MOVE(11, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(13, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(17, MOVE_SMACK_DOWN), - //LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH), - //LEVEL_UP_MOVE(23, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(17, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(23, MOVE_BUG_BITE), + LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(31, MOVE_SLASH), - //LEVEL_UP_MOVE(38, MOVE_X_SCISSOR), - //LEVEL_UP_MOVE(43, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(38, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(43, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(50, MOVE_FLAIL), - //LEVEL_UP_MOVE(55, MOVE_ROCK_WRECKER), + LEVEL_UP_MOVE(55, MOVE_ROCK_WRECKER), LEVEL_UP_END }; @@ -11298,16 +11298,16 @@ static const struct LevelUpMove sScraggyLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(12, MOVE_SWAGGER), LEVEL_UP_MOVE(16, MOVE_LOW_KICK), - //LEVEL_UP_MOVE(20, MOVE_PAYBACK), + LEVEL_UP_MOVE(20, MOVE_PAYBACK), LEVEL_UP_MOVE(23, MOVE_BRICK_BREAK), - //LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(31, MOVE_HIGH_JUMP_KICK), LEVEL_UP_MOVE(34, MOVE_SCARY_FACE), LEVEL_UP_MOVE(38, MOVE_CRUNCH), LEVEL_UP_MOVE(42, MOVE_FACADE), - //LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB), LEVEL_UP_MOVE(48, MOVE_FOCUS_PUNCH), - //LEVEL_UP_MOVE(50, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(50, MOVE_HEAD_SMASH), LEVEL_UP_END }; @@ -11320,34 +11320,34 @@ static const struct LevelUpMove sScraftyLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(12, MOVE_SWAGGER), LEVEL_UP_MOVE(16, MOVE_LOW_KICK), - //LEVEL_UP_MOVE(20, MOVE_PAYBACK), + LEVEL_UP_MOVE(20, MOVE_PAYBACK), LEVEL_UP_MOVE(23, MOVE_BRICK_BREAK), - //LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(31, MOVE_HIGH_JUMP_KICK), LEVEL_UP_MOVE(34, MOVE_SCARY_FACE), LEVEL_UP_MOVE(38, MOVE_CRUNCH), LEVEL_UP_MOVE(45, MOVE_FACADE), - //LEVEL_UP_MOVE(51, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE(51, MOVE_ROCK_CLIMB), LEVEL_UP_MOVE(58, MOVE_FOCUS_PUNCH), - //LEVEL_UP_MOVE(65, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(65, MOVE_HEAD_SMASH), LEVEL_UP_END }; static const struct LevelUpMove sSigilyphLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GUST), - //LEVEL_UP_MOVE( 1, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE( 1, MOVE_MIRACLE_EYE), LEVEL_UP_MOVE( 4, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 8, MOVE_PSYWAVE), - //LEVEL_UP_MOVE(11, MOVE_TAILWIND), + LEVEL_UP_MOVE(11, MOVE_TAILWIND), LEVEL_UP_MOVE(14, MOVE_WHIRLWIND), LEVEL_UP_MOVE(18, MOVE_PSYBEAM), LEVEL_UP_MOVE(21, MOVE_AIR_CUTTER), LEVEL_UP_MOVE(24, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(28, MOVE_REFLECT), - //LEVEL_UP_MOVE(31, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(31, MOVE_SYNCHRONOISE), LEVEL_UP_MOVE(34, MOVE_MIRROR_MOVE), - //LEVEL_UP_MOVE(38, MOVE_GRAVITY), - //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(38, MOVE_GRAVITY), + LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), LEVEL_UP_MOVE(44, MOVE_PSYCHIC), LEVEL_UP_MOVE(48, MOVE_COSMIC_POWER), LEVEL_UP_MOVE(50, MOVE_SKY_ATTACK), @@ -11360,12 +11360,12 @@ static const struct LevelUpMove sYamaskLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_DISABLE), LEVEL_UP_MOVE( 9, MOVE_HAZE), LEVEL_UP_MOVE(13, MOVE_NIGHT_SHADE), - //LEVEL_UP_MOVE(17, MOVE_HEX), + LEVEL_UP_MOVE(17, MOVE_HEX), LEVEL_UP_MOVE(21, MOVE_WILL_O_WISP), - //LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(29, MOVE_CURSE), - //LEVEL_UP_MOVE(33, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(33, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(33, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(33, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(37, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(41, MOVE_GRUDGE), LEVEL_UP_MOVE(45, MOVE_MEAN_LOOK), @@ -11374,7 +11374,7 @@ static const struct LevelUpMove sYamaskLevelUpLearnset[] = { }; static const struct LevelUpMove sCofagrigusLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE), + //LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_PROTECT), @@ -11383,12 +11383,12 @@ static const struct LevelUpMove sCofagrigusLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_DISABLE), LEVEL_UP_MOVE( 9, MOVE_HAZE), LEVEL_UP_MOVE(13, MOVE_NIGHT_SHADE), - //LEVEL_UP_MOVE(17, MOVE_HEX), + LEVEL_UP_MOVE(17, MOVE_HEX), LEVEL_UP_MOVE(21, MOVE_WILL_O_WISP), - //LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(29, MOVE_CURSE), - //LEVEL_UP_MOVE(33, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(33, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(33, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(33, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(39, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(45, MOVE_GRUDGE), LEVEL_UP_MOVE(51, MOVE_MEAN_LOOK), @@ -11403,15 +11403,15 @@ static const struct LevelUpMove sTirtougaLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_ROLLOUT), LEVEL_UP_MOVE( 8, MOVE_BITE), LEVEL_UP_MOVE(11, MOVE_PROTECT), - //LEVEL_UP_MOVE(15, MOVE_AQUA_JET), + LEVEL_UP_MOVE(15, MOVE_AQUA_JET), LEVEL_UP_MOVE(18, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(21, MOVE_CRUNCH), - //LEVEL_UP_MOVE(25, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE(28, MOVE_BRINE), - //LEVEL_UP_MOVE(31, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(25, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(28, MOVE_BRINE), + LEVEL_UP_MOVE(31, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(35, MOVE_CURSE), - //LEVEL_UP_MOVE(38, MOVE_SHELL_SMASH), - //LEVEL_UP_MOVE(41, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(38, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(41, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(45, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(48, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), @@ -11426,15 +11426,15 @@ static const struct LevelUpMove sCarracostaLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_ROLLOUT), LEVEL_UP_MOVE( 8, MOVE_BITE), LEVEL_UP_MOVE(11, MOVE_PROTECT), - //LEVEL_UP_MOVE(15, MOVE_AQUA_JET), + LEVEL_UP_MOVE(15, MOVE_AQUA_JET), LEVEL_UP_MOVE(18, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(21, MOVE_CRUNCH), - //LEVEL_UP_MOVE(25, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE(28, MOVE_BRINE), - //LEVEL_UP_MOVE(31, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(25, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(28, MOVE_BRINE), + LEVEL_UP_MOVE(31, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(35, MOVE_CURSE), - //LEVEL_UP_MOVE(40, MOVE_SHELL_SMASH), - //LEVEL_UP_MOVE(45, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(40, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(45, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(51, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(56, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(61, MOVE_HYDRO_PUMP), @@ -11448,15 +11448,15 @@ static const struct LevelUpMove sArchenLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 8, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(11, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(15, MOVE_PLUCK), + LEVEL_UP_MOVE(15, MOVE_PLUCK), LEVEL_UP_MOVE(18, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(21, MOVE_AGILITY), - //LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(28, MOVE_ACROBATICS), + LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(28, MOVE_ACROBATICS), LEVEL_UP_MOVE(31, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(35, MOVE_CRUNCH), LEVEL_UP_MOVE(38, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(41, MOVE_U_TURN), + LEVEL_UP_MOVE(41, MOVE_U_TURN), LEVEL_UP_MOVE(45, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(48, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE(50, MOVE_THRASH), @@ -11471,15 +11471,15 @@ static const struct LevelUpMove sArcheopsLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 8, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(11, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(15, MOVE_PLUCK), + LEVEL_UP_MOVE(15, MOVE_PLUCK), LEVEL_UP_MOVE(18, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(21, MOVE_AGILITY), - //LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(28, MOVE_ACROBATICS), + LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(28, MOVE_ACROBATICS), LEVEL_UP_MOVE(31, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(35, MOVE_CRUNCH), LEVEL_UP_MOVE(40, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(45, MOVE_U_TURN), + LEVEL_UP_MOVE(45, MOVE_U_TURN), LEVEL_UP_MOVE(51, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(56, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE(61, MOVE_THRASH), @@ -11490,19 +11490,19 @@ static const struct LevelUpMove sTrubbishLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 3, MOVE_RECYCLE), - //LEVEL_UP_MOVE( 7, MOVE_TOXIC_SPIKES), - //LEVEL_UP_MOVE(12, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 7, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(12, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(14, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(18, MOVE_SLUDGE), LEVEL_UP_MOVE(23, MOVE_STOCKPILE), LEVEL_UP_MOVE(23, MOVE_SWALLOW), LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(29, MOVE_SLUDGE_BOMB), - //LEVEL_UP_MOVE(34, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(34, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(36, MOVE_TOXIC), LEVEL_UP_MOVE(40, MOVE_AMNESIA), - //LEVEL_UP_MOVE(42, MOVE_BELCH), - //LEVEL_UP_MOVE(45, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE(42, MOVE_BELCH), + LEVEL_UP_MOVE(45, MOVE_GUNK_SHOT), LEVEL_UP_MOVE(47, MOVE_EXPLOSION), LEVEL_UP_END }; @@ -11511,21 +11511,21 @@ static const struct LevelUpMove sGarbodorLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_RECYCLE), - //LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE( 3, MOVE_RECYCLE), - //LEVEL_UP_MOVE( 7, MOVE_TOXIC_SPIKES), - //LEVEL_UP_MOVE(12, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 7, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(12, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(14, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(18, MOVE_SLUDGE), LEVEL_UP_MOVE(23, MOVE_STOCKPILE), LEVEL_UP_MOVE(23, MOVE_SWALLOW), LEVEL_UP_MOVE(25, MOVE_BODY_SLAM), LEVEL_UP_MOVE(29, MOVE_SLUDGE_BOMB), - //LEVEL_UP_MOVE(34, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(34, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(39, MOVE_TOXIC), LEVEL_UP_MOVE(46, MOVE_AMNESIA), - //LEVEL_UP_MOVE(49, MOVE_BELCH), - //LEVEL_UP_MOVE(54, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE(49, MOVE_BELCH), + LEVEL_UP_MOVE(54, MOVE_GUNK_SHOT), LEVEL_UP_MOVE(59, MOVE_EXPLOSION), LEVEL_UP_END }; @@ -11539,62 +11539,62 @@ static const struct LevelUpMove sZoruaLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(21, MOVE_SCARY_FACE), LEVEL_UP_MOVE(25, MOVE_TAUNT), - //LEVEL_UP_MOVE(29, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(29, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(33, MOVE_TORMENT), LEVEL_UP_MOVE(37, MOVE_AGILITY), - //LEVEL_UP_MOVE(41, MOVE_EMBARGO), - //LEVEL_UP_MOVE(45, MOVE_PUNISHMENT), - //LEVEL_UP_MOVE(49, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(41, MOVE_EMBARGO), + LEVEL_UP_MOVE(45, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(49, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(53, MOVE_IMPRISON), - //LEVEL_UP_MOVE(57, MOVE_NIGHT_DAZE), + LEVEL_UP_MOVE(57, MOVE_NIGHT_DAZE), LEVEL_UP_END }; static const struct LevelUpMove sZoroarkLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_DAZE), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_DAZE), LEVEL_UP_MOVE( 1, MOVE_IMPRISON), - //LEVEL_UP_MOVE( 1, MOVE_U_TURN), + LEVEL_UP_MOVE( 1, MOVE_U_TURN), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_PURSUIT), - //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 5, MOVE_PURSUIT), - //LEVEL_UP_MOVE( 9, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 9, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(17, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(21, MOVE_SCARY_FACE), LEVEL_UP_MOVE(25, MOVE_TAUNT), - //LEVEL_UP_MOVE(29, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(29, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(34, MOVE_TORMENT), LEVEL_UP_MOVE(39, MOVE_AGILITY), - //LEVEL_UP_MOVE(44, MOVE_EMBARGO), - //LEVEL_UP_MOVE(49, MOVE_PUNISHMENT), - //LEVEL_UP_MOVE(54, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(44, MOVE_EMBARGO), + LEVEL_UP_MOVE(49, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(54, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(59, MOVE_IMPRISON), - //LEVEL_UP_MOVE(64, MOVE_NIGHT_DAZE), + LEVEL_UP_MOVE(64, MOVE_NIGHT_DAZE), LEVEL_UP_END }; static const struct LevelUpMove sMinccinoLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), - //LEVEL_UP_MOVE( 3, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 3, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE( 7, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 9, MOVE_TICKLE), LEVEL_UP_MOVE(13, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(15, MOVE_ENCORE), LEVEL_UP_MOVE(19, MOVE_SWIFT), LEVEL_UP_MOVE(21, MOVE_SING), - //LEVEL_UP_MOVE(25, MOVE_TAIL_SLAP), + LEVEL_UP_MOVE(25, MOVE_TAIL_SLAP), LEVEL_UP_MOVE(27, MOVE_CHARM), - //LEVEL_UP_MOVE(31, MOVE_WAKE_UP_SLAP), - //LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(31, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE(37, MOVE_SLAM), - //LEVEL_UP_MOVE(39, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(39, MOVE_CAPTIVATE), LEVEL_UP_MOVE(43, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(45, MOVE_LAST_RESORT), - //LEVEL_UP_MOVE(49, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(45, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(49, MOVE_AFTER_YOU), LEVEL_UP_END }; @@ -11604,7 +11604,7 @@ static const struct LevelUpMove sCinccinoLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_TICKLE), LEVEL_UP_MOVE( 1, MOVE_SING), - //LEVEL_UP_MOVE( 1, MOVE_TAIL_SLAP), + LEVEL_UP_MOVE( 1, MOVE_TAIL_SLAP), LEVEL_UP_END }; @@ -11612,20 +11612,20 @@ static const struct LevelUpMove sGothitaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 3, MOVE_CONFUSION), LEVEL_UP_MOVE( 7, MOVE_TICKLE), - //LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE), LEVEL_UP_MOVE(10, MOVE_FAKE_TEARS), LEVEL_UP_MOVE(14, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(16, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(19, MOVE_EMBARGO), + LEVEL_UP_MOVE(19, MOVE_EMBARGO), LEVEL_UP_MOVE(24, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), LEVEL_UP_MOVE(28, MOVE_FLATTER), LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK), LEVEL_UP_MOVE(37, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(40, MOVE_TELEKINESIS), + LEVEL_UP_MOVE(40, MOVE_TELEKINESIS), LEVEL_UP_MOVE(46, MOVE_CHARM), - //LEVEL_UP_MOVE(48, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE(48, MOVE_MAGIC_ROOM), LEVEL_UP_END }; @@ -11633,22 +11633,22 @@ static const struct LevelUpMove sGothoritaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_TICKLE), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 3, MOVE_CONFUSION), LEVEL_UP_MOVE( 7, MOVE_TICKLE), LEVEL_UP_MOVE(10, MOVE_FAKE_TEARS), LEVEL_UP_MOVE(14, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(16, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(19, MOVE_EMBARGO), + LEVEL_UP_MOVE(19, MOVE_EMBARGO), LEVEL_UP_MOVE(24, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), LEVEL_UP_MOVE(28, MOVE_FLATTER), LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(34, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(34, MOVE_HEAL_BLOCK), LEVEL_UP_MOVE(39, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(43, MOVE_TELEKINESIS), + LEVEL_UP_MOVE(43, MOVE_TELEKINESIS), LEVEL_UP_MOVE(50, MOVE_CHARM), - //LEVEL_UP_MOVE(53, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE(53, MOVE_MAGIC_ROOM), LEVEL_UP_END }; @@ -11656,22 +11656,22 @@ static const struct LevelUpMove sGothitelleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_TICKLE), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 3, MOVE_CONFUSION), LEVEL_UP_MOVE( 7, MOVE_TICKLE), LEVEL_UP_MOVE(10, MOVE_FAKE_TEARS), LEVEL_UP_MOVE(14, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(16, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(19, MOVE_EMBARGO), + LEVEL_UP_MOVE(19, MOVE_EMBARGO), LEVEL_UP_MOVE(24, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), LEVEL_UP_MOVE(28, MOVE_FLATTER), LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(34, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(34, MOVE_HEAL_BLOCK), LEVEL_UP_MOVE(39, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(45, MOVE_TELEKINESIS), + LEVEL_UP_MOVE(45, MOVE_TELEKINESIS), LEVEL_UP_MOVE(54, MOVE_CHARM), - //LEVEL_UP_MOVE(59, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE(59, MOVE_MAGIC_ROOM), LEVEL_UP_END }; @@ -11684,14 +11684,14 @@ static const struct LevelUpMove sSolosisLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(19, MOVE_CHARM), LEVEL_UP_MOVE(24, MOVE_RECOVER), - //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), LEVEL_UP_MOVE(28, MOVE_ENDEAVOR), LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(33, MOVE_PAIN_SPLIT), LEVEL_UP_MOVE(37, MOVE_PSYCHIC), LEVEL_UP_MOVE(40, MOVE_SKILL_SWAP), - //LEVEL_UP_MOVE(46, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE(48, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(46, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(48, MOVE_WONDER_ROOM), LEVEL_UP_END }; @@ -11707,19 +11707,19 @@ static const struct LevelUpMove sDuosionLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(19, MOVE_CHARM), LEVEL_UP_MOVE(24, MOVE_RECOVER), - //LEVEL_UP_MOVE (25, MOVE_PSYSHOCK), + LEVEL_UP_MOVE (25, MOVE_PSYSHOCK), LEVEL_UP_MOVE(28, MOVE_ENDEAVOR), LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(34, MOVE_PAIN_SPLIT), LEVEL_UP_MOVE(39, MOVE_PSYCHIC), LEVEL_UP_MOVE(43, MOVE_SKILL_SWAP), - //LEVEL_UP_MOVE(50, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE(53, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(50, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(53, MOVE_WONDER_ROOM), LEVEL_UP_END }; static const struct LevelUpMove sReuniclusLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_DIZZY_PUNCH), + //LEVEL_UP_MOVE( 0, MOVE_DIZZY_PUNCH), LEVEL_UP_MOVE( 1, MOVE_DIZZY_PUNCH), LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), LEVEL_UP_MOVE( 1, MOVE_REFLECT), @@ -11732,55 +11732,55 @@ static const struct LevelUpMove sReuniclusLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(19, MOVE_CHARM), LEVEL_UP_MOVE(24, MOVE_RECOVER), - //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), LEVEL_UP_MOVE(28, MOVE_ENDEAVOR), LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(34, MOVE_PAIN_SPLIT), LEVEL_UP_MOVE(39, MOVE_PSYCHIC), LEVEL_UP_MOVE(45, MOVE_SKILL_SWAP), - //LEVEL_UP_MOVE(54, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE(59, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(54, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(59, MOVE_WONDER_ROOM), LEVEL_UP_END }; 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( 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), LEVEL_UP_MOVE(21, MOVE_FEATHER_DANCE), - //LEVEL_UP_MOVE(24, MOVE_AQUA_RING), - //LEVEL_UP_MOVE(27, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(30, MOVE_ROOST), + LEVEL_UP_MOVE(24, MOVE_AQUA_RING), + LEVEL_UP_MOVE(27, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(30, MOVE_ROOST), LEVEL_UP_MOVE(34, MOVE_RAIN_DANCE), - //LEVEL_UP_MOVE(37, MOVE_TAILWIND), - //LEVEL_UP_MOVE(41, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE(46, MOVE_HURRICANE), + LEVEL_UP_MOVE(37, MOVE_TAILWIND), + LEVEL_UP_MOVE(41, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(46, MOVE_HURRICANE), LEVEL_UP_END }; static const struct LevelUpMove sSwannaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), - //LEVEL_UP_MOVE( 1, MOVE_DEFOG), + LEVEL_UP_MOVE( 1, MOVE_DEFOG), LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), LEVEL_UP_MOVE( 3, MOVE_WATER_SPORT), - //LEVEL_UP_MOVE( 6, MOVE_DEFOG), + 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), LEVEL_UP_MOVE(21, MOVE_FEATHER_DANCE), - //LEVEL_UP_MOVE(24, MOVE_AQUA_RING), - //LEVEL_UP_MOVE(27, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(30, MOVE_ROOST), + LEVEL_UP_MOVE(24, MOVE_AQUA_RING), + LEVEL_UP_MOVE(27, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(30, MOVE_ROOST), LEVEL_UP_MOVE(34, MOVE_RAIN_DANCE), - //LEVEL_UP_MOVE(40, MOVE_TAILWIND), - //LEVEL_UP_MOVE(47, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE(55, MOVE_HURRICANE), + LEVEL_UP_MOVE(40, MOVE_TAILWIND), + LEVEL_UP_MOVE(47, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(55, MOVE_HURRICANE), LEVEL_UP_END }; @@ -11791,9 +11791,9 @@ static const struct LevelUpMove sVanilliteLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_UPROAR), LEVEL_UP_MOVE(13, MOVE_ICY_WIND), LEVEL_UP_MOVE(16, MOVE_MIST), - //LEVEL_UP_MOVE(19, MOVE_AVALANCHE), + LEVEL_UP_MOVE(19, MOVE_AVALANCHE), LEVEL_UP_MOVE(22, MOVE_TAUNT), - //LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(31, MOVE_ACID_ARMOR), LEVEL_UP_MOVE(35, MOVE_ICE_BEAM), LEVEL_UP_MOVE(40, MOVE_HAIL), @@ -11813,9 +11813,9 @@ static const struct LevelUpMove sVanillishLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_UPROAR), LEVEL_UP_MOVE(13, MOVE_ICY_WIND), LEVEL_UP_MOVE(16, MOVE_MIST), - //LEVEL_UP_MOVE(19, MOVE_AVALANCHE), + LEVEL_UP_MOVE(19, MOVE_AVALANCHE), LEVEL_UP_MOVE(22, MOVE_TAUNT), - //LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(31, MOVE_ACID_ARMOR), LEVEL_UP_MOVE(36, MOVE_ICE_BEAM), LEVEL_UP_MOVE(42, MOVE_HAIL), @@ -11827,7 +11827,7 @@ static const struct LevelUpMove sVanillishLevelUpLearnset[] = { static const struct LevelUpMove sVanilluxeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD), - //LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY), LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL), LEVEL_UP_MOVE( 1, MOVE_ICICLE_SPEAR), LEVEL_UP_MOVE( 1, MOVE_HARDEN), @@ -11838,9 +11838,9 @@ static const struct LevelUpMove sVanilluxeLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_UPROAR), LEVEL_UP_MOVE(13, MOVE_ICY_WIND), LEVEL_UP_MOVE(16, MOVE_MIST), - //LEVEL_UP_MOVE(19, MOVE_AVALANCHE), + LEVEL_UP_MOVE(19, MOVE_AVALANCHE), LEVEL_UP_MOVE(22, MOVE_TAUNT), - //LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(31, MOVE_ACID_ARMOR), LEVEL_UP_MOVE(36, MOVE_ICE_BEAM), LEVEL_UP_MOVE(42, MOVE_HAIL), @@ -11861,7 +11861,7 @@ static const struct LevelUpMove sDeerlingLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(24, MOVE_JUMP_KICK), LEVEL_UP_MOVE(28, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(32, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(32, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(36, MOVE_CHARM), LEVEL_UP_MOVE(41, MOVE_NATURE_POWER), LEVEL_UP_MOVE(46, MOVE_DOUBLE_EDGE), @@ -11871,7 +11871,7 @@ static const struct LevelUpMove sDeerlingLevelUpLearnset[] = { static const struct LevelUpMove sSawsbuckLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_HORN_LEECH), - //LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_MEGAHORN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_CAMOUFLAGE), @@ -11885,7 +11885,7 @@ static const struct LevelUpMove sSawsbuckLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(24, MOVE_JUMP_KICK), LEVEL_UP_MOVE(28, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(32, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(32, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(36, MOVE_CHARM), LEVEL_UP_MOVE(44, MOVE_NATURE_POWER), LEVEL_UP_MOVE(52, MOVE_DOUBLE_EDGE), @@ -11899,17 +11899,17 @@ static const struct LevelUpMove sEmolgaLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_TAIL_WHIP), LEVEL_UP_MOVE(10, MOVE_CHARGE), LEVEL_UP_MOVE(13, MOVE_SPARK), - //LEVEL_UP_MOVE(15, MOVE_NUZZLE), + LEVEL_UP_MOVE(15, MOVE_NUZZLE), LEVEL_UP_MOVE(16, MOVE_PURSUIT), LEVEL_UP_MOVE(19, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(22, MOVE_SHOCK_WAVE), - //LEVEL_UP_MOVE(26, MOVE_ELECTRO_BALL), - //LEVEL_UP_MOVE(30, MOVE_ACROBATICS), + LEVEL_UP_MOVE(26, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(30, MOVE_ACROBATICS), LEVEL_UP_MOVE(34, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(38, MOVE_ENCORE), - //LEVEL_UP_MOVE(42, MOVE_VOLT_SWITCH), + LEVEL_UP_MOVE(42, MOVE_VOLT_SWITCH), LEVEL_UP_MOVE(46, MOVE_AGILITY), - //LEVEL_UP_MOVE(50, MOVE_DISCHARGE), + LEVEL_UP_MOVE(50, MOVE_DISCHARGE), LEVEL_UP_END }; @@ -11921,11 +11921,11 @@ static const struct LevelUpMove sKarrablastLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(20, MOVE_HEADBUTT), LEVEL_UP_MOVE(25, MOVE_FALSE_SWIPE), - //LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(32, MOVE_SLASH), LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(40, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(44, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(44, MOVE_X_SCISSOR), LEVEL_UP_MOVE(49, MOVE_FLAIL), LEVEL_UP_MOVE(52, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(56, MOVE_DOUBLE_EDGE), @@ -11934,26 +11934,26 @@ static const struct LevelUpMove sKarrablastLevelUpLearnset[] = { static const struct LevelUpMove sEscavalierLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), + LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), LEVEL_UP_MOVE( 1, MOVE_TWINEEDLE), LEVEL_UP_MOVE( 4, MOVE_LEER), - //LEVEL_UP_MOVE( 8, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 8, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(13, MOVE_TWINEEDLE), LEVEL_UP_MOVE(16, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(20, MOVE_HEADBUTT), LEVEL_UP_MOVE(25, MOVE_FALSE_SWIPE), - //LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(32, MOVE_SLASH), - //LEVEL_UP_MOVE(37, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(37, MOVE_IRON_HEAD), LEVEL_UP_MOVE(40, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(44, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(44, MOVE_X_SCISSOR), LEVEL_UP_MOVE(49, MOVE_REVERSAL), LEVEL_UP_MOVE(52, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(56, MOVE_GIGA_IMPACT), - //LEVEL_UP_MOVE(60, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(56, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(60, MOVE_FELL_STINGER), LEVEL_UP_END }; @@ -11969,9 +11969,9 @@ static const struct LevelUpMove sFoongusLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(32, MOVE_TOXIC), LEVEL_UP_MOVE(35, MOVE_SYNTHESIS), - //LEVEL_UP_MOVE(39, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(39, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(43, MOVE_SOLAR_BEAM), - //LEVEL_UP_MOVE(45, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(45, MOVE_RAGE_POWDER), LEVEL_UP_MOVE(50, MOVE_SPORE), LEVEL_UP_END }; @@ -11991,9 +11991,9 @@ static const struct LevelUpMove sAmoongussLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(32, MOVE_TOXIC), LEVEL_UP_MOVE(35, MOVE_SYNTHESIS), - //LEVEL_UP_MOVE(43, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(43, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(49, MOVE_SOLAR_BEAM), - //LEVEL_UP_MOVE(54, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(54, MOVE_RAGE_POWDER), LEVEL_UP_MOVE(62, MOVE_SPORE), LEVEL_UP_END }; @@ -12006,19 +12006,19 @@ static const struct LevelUpMove sFrillishLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(17, MOVE_RECOVER), LEVEL_UP_MOVE(22, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(27, MOVE_OMINOUS_WIND), - //LEVEL_UP_MOVE(32, MOVE_BRINE), + LEVEL_UP_MOVE(27, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(32, MOVE_BRINE), LEVEL_UP_MOVE(37, MOVE_RAIN_DANCE), - //LEVEL_UP_MOVE(43, MOVE_HEX), + LEVEL_UP_MOVE(43, MOVE_HEX), LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(55, MOVE_WRING_OUT), + LEVEL_UP_MOVE(55, MOVE_WRING_OUT), LEVEL_UP_MOVE(61, MOVE_WATER_SPOUT), LEVEL_UP_END }; static const struct LevelUpMove sJellicentLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WATER_SPOUT), - //LEVEL_UP_MOVE( 1, MOVE_WRING_OUT), + LEVEL_UP_MOVE( 1, MOVE_WRING_OUT), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), LEVEL_UP_MOVE( 1, MOVE_ABSORB), @@ -12028,39 +12028,39 @@ static const struct LevelUpMove sJellicentLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(17, MOVE_RECOVER), LEVEL_UP_MOVE(22, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(27, MOVE_OMINOUS_WIND), - //LEVEL_UP_MOVE(32, MOVE_BRINE), + LEVEL_UP_MOVE(27, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(32, MOVE_BRINE), LEVEL_UP_MOVE(37, MOVE_RAIN_DANCE), - //LEVEL_UP_MOVE(45, MOVE_HEX), + LEVEL_UP_MOVE(45, MOVE_HEX), LEVEL_UP_MOVE(53, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(61, MOVE_WRING_OUT), + LEVEL_UP_MOVE(61, MOVE_WRING_OUT), LEVEL_UP_MOVE(69, MOVE_WATER_SPOUT), LEVEL_UP_END }; static const struct LevelUpMove sAlomomolaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), - //LEVEL_UP_MOVE( 5, MOVE_AQUA_RING), - //LEVEL_UP_MOVE( 9, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 5, MOVE_AQUA_RING), + LEVEL_UP_MOVE( 9, MOVE_AQUA_JET), LEVEL_UP_MOVE(13, MOVE_DOUBLE_SLAP), - //LEVEL_UP_MOVE(17, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(17, MOVE_HEAL_PULSE), LEVEL_UP_MOVE(21, MOVE_PROTECT), LEVEL_UP_MOVE(25, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP), - //LEVEL_UP_MOVE(33, MOVE_SOAK), + LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(33, MOVE_SOAK), LEVEL_UP_MOVE(37, MOVE_WISH), - //LEVEL_UP_MOVE(41, MOVE_BRINE), + LEVEL_UP_MOVE(41, MOVE_BRINE), LEVEL_UP_MOVE(45, MOVE_SAFEGUARD), LEVEL_UP_MOVE(49, MOVE_WHIRLPOOL), LEVEL_UP_MOVE(53, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(57, MOVE_HEALING_WISH), - //LEVEL_UP_MOVE(61, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(57, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(61, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(65, MOVE_HYDRO_PUMP), LEVEL_UP_END }; @@ -12072,22 +12072,22 @@ static const struct LevelUpMove sJoltikLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(12, MOVE_FURY_CUTTER), - //LEVEL_UP_MOVE(15, MOVE_ELECTROWEB), - //LEVEL_UP_MOVE(18, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(23, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(15, MOVE_ELECTROWEB), + LEVEL_UP_MOVE(18, MOVE_BUG_BITE), + LEVEL_UP_MOVE(23, MOVE_GASTRO_ACID), LEVEL_UP_MOVE(26, MOVE_SLASH), - //LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(34, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(37, MOVE_AGILITY), - //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(45, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(48, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(45, MOVE_DISCHARGE), + LEVEL_UP_MOVE(48, MOVE_BUG_BUZZ), LEVEL_UP_END }; static const struct LevelUpMove sGalvantulaLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_STICKY_WEB), - //LEVEL_UP_MOVE( 1, MOVE_STICKY_WEB), + LEVEL_UP_MOVE( 1, MOVE_STICKY_WEB), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_SPIDER_WEB), @@ -12095,16 +12095,16 @@ static const struct LevelUpMove sGalvantulaLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(12, MOVE_FURY_CUTTER), - //LEVEL_UP_MOVE(15, MOVE_ELECTROWEB), - //LEVEL_UP_MOVE(18, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(23, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(15, MOVE_ELECTROWEB), + LEVEL_UP_MOVE(18, MOVE_BUG_BITE), + LEVEL_UP_MOVE(23, MOVE_GASTRO_ACID), LEVEL_UP_MOVE(26, MOVE_SLASH), - //LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(34, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(40, MOVE_AGILITY), - //LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(54, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(60, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(54, MOVE_DISCHARGE), + LEVEL_UP_MOVE(60, MOVE_BUG_BUZZ), LEVEL_UP_END }; @@ -12115,22 +12115,22 @@ static const struct LevelUpMove sFerroseedLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_CURSE), LEVEL_UP_MOVE(14, MOVE_METAL_CLAW), LEVEL_UP_MOVE(18, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(21, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(21, MOVE_GYRO_BALL), LEVEL_UP_MOVE(26, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(30, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(30, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(35, MOVE_INGRAIN), LEVEL_UP_MOVE(38, MOVE_SELF_DESTRUCT), - //LEVEL_UP_MOVE(43, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(47, MOVE_PAYBACK), - //LEVEL_UP_MOVE(52, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(43, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(47, MOVE_PAYBACK), + LEVEL_UP_MOVE(52, MOVE_FLASH_CANNON), LEVEL_UP_MOVE(55, MOVE_EXPLOSION), LEVEL_UP_END }; static const struct LevelUpMove sFerrothornLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_POWER_WHIP), - //LEVEL_UP_MOVE( 1, MOVE_POWER_WHIP), - //LEVEL_UP_MOVE( 1, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE( 1, MOVE_POWER_WHIP), + LEVEL_UP_MOVE( 1, MOVE_ROCK_CLIMB), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), @@ -12139,14 +12139,14 @@ static const struct LevelUpMove sFerrothornLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_CURSE), LEVEL_UP_MOVE(14, MOVE_METAL_CLAW), LEVEL_UP_MOVE(18, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(21, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(21, MOVE_GYRO_BALL), LEVEL_UP_MOVE(26, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(30, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(30, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(35, MOVE_INGRAIN), LEVEL_UP_MOVE(38, MOVE_SELF_DESTRUCT), - //LEVEL_UP_MOVE(46, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(53, MOVE_PAYBACK), - //LEVEL_UP_MOVE(61, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(46, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(53, MOVE_PAYBACK), + LEVEL_UP_MOVE(61, MOVE_FLASH_CANNON), LEVEL_UP_MOVE(67, MOVE_EXPLOSION), LEVEL_UP_END }; @@ -12155,15 +12155,15 @@ static const struct LevelUpMove sKlinkLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP), LEVEL_UP_MOVE( 6, MOVE_CHARGE), LEVEL_UP_MOVE(11, MOVE_THUNDER_SHOCK), - //LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND), + LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND), LEVEL_UP_MOVE(21, MOVE_BIND), - //LEVEL_UP_MOVE(26, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(26, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(39, MOVE_SCREECH), - //LEVEL_UP_MOVE(42, MOVE_DISCHARGE), + LEVEL_UP_MOVE(42, MOVE_DISCHARGE), LEVEL_UP_MOVE(45, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(48, MOVE_SHIFT_GEAR), + LEVEL_UP_MOVE(48, MOVE_SHIFT_GEAR), LEVEL_UP_MOVE(50, MOVE_LOCK_ON), LEVEL_UP_MOVE(54, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(57, MOVE_HYPER_BEAM), @@ -12174,18 +12174,18 @@ static const struct LevelUpMove sKlangLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP), LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), - //LEVEL_UP_MOVE( 1, MOVE_GEAR_GRIND), + LEVEL_UP_MOVE( 1, MOVE_GEAR_GRIND), LEVEL_UP_MOVE( 6, MOVE_CHARGE), LEVEL_UP_MOVE(11, MOVE_THUNDER_SHOCK), - //LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND), + LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND), LEVEL_UP_MOVE(21, MOVE_BIND), - //LEVEL_UP_MOVE(26, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(26, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(40, MOVE_SCREECH), - //LEVEL_UP_MOVE(44, MOVE_DISCHARGE), + LEVEL_UP_MOVE(44, MOVE_DISCHARGE), LEVEL_UP_MOVE(48, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(52, MOVE_SHIFT_GEAR), + LEVEL_UP_MOVE(52, MOVE_SHIFT_GEAR), LEVEL_UP_MOVE(56, MOVE_LOCK_ON), LEVEL_UP_MOVE(60, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(64, MOVE_HYPER_BEAM), @@ -12194,23 +12194,23 @@ static const struct LevelUpMove sKlangLevelUpLearnset[] = { static const struct LevelUpMove sKlinklangLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_MAGNETIC_FLUX), - //LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), - //LEVEL_UP_MOVE( 1, MOVE_GEAR_UP), + LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), + LEVEL_UP_MOVE( 1, MOVE_GEAR_UP), LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP), LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), - //LEVEL_UP_MOVE( 1, MOVE_GEAR_GRIND), + LEVEL_UP_MOVE( 1, MOVE_GEAR_GRIND), LEVEL_UP_MOVE( 6, MOVE_CHARGE), LEVEL_UP_MOVE(11, MOVE_THUNDER_SHOCK), - //LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND), + LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND), LEVEL_UP_MOVE(21, MOVE_BIND), - //LEVEL_UP_MOVE(25, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(25, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(40, MOVE_SCREECH), - //LEVEL_UP_MOVE(44, MOVE_DISCHARGE), + LEVEL_UP_MOVE(44, MOVE_DISCHARGE), LEVEL_UP_MOVE(48, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(54, MOVE_SHIFT_GEAR), + LEVEL_UP_MOVE(54, MOVE_SHIFT_GEAR), LEVEL_UP_MOVE(60, MOVE_LOCK_ON), LEVEL_UP_MOVE(66, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(72, MOVE_HYPER_BEAM), @@ -12221,25 +12221,25 @@ static const struct LevelUpMove sTynamoLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_SPARK), - //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), LEVEL_UP_END }; static const struct LevelUpMove sEelektrikLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_CRUNCH), + //LEVEL_UP_MOVE( 0, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_SPARK), - //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE( 9, MOVE_BIND), LEVEL_UP_MOVE(19, MOVE_ACID), - //LEVEL_UP_MOVE(29, MOVE_DISCHARGE), + LEVEL_UP_MOVE(29, MOVE_DISCHARGE), LEVEL_UP_MOVE(44, MOVE_THUNDERBOLT), - //LEVEL_UP_MOVE(49, MOVE_ACID_SPRAY), - //LEVEL_UP_MOVE(54, MOVE_COIL), - //LEVEL_UP_MOVE(59, MOVE_WILD_CHARGE), - //LEVEL_UP_MOVE(64, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(49, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(54, MOVE_COIL), + LEVEL_UP_MOVE(59, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(64, MOVE_GASTRO_ACID), LEVEL_UP_MOVE(69, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(74, MOVE_THRASH), LEVEL_UP_END @@ -12249,63 +12249,63 @@ static const struct LevelUpMove sEelektrossLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_THRASH), LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON), - //LEVEL_UP_MOVE( 1, MOVE_GASTRO_ACID), - //LEVEL_UP_MOVE( 1, MOVE_COIL), - //LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE), + LEVEL_UP_MOVE( 1, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE( 1, MOVE_COIL), + LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE), LEVEL_UP_MOVE( 1, MOVE_CRUSH_CLAW), LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_ACID), - //LEVEL_UP_MOVE( 1, MOVE_DISCHARGE), + LEVEL_UP_MOVE( 1, MOVE_DISCHARGE), LEVEL_UP_END }; static const struct LevelUpMove sElgyemLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 4, MOVE_GROWL), - //LEVEL_UP_MOVE( 8, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE(11, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE( 8, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(11, MOVE_MIRACLE_EYE), LEVEL_UP_MOVE(15, MOVE_PSYBEAM), LEVEL_UP_MOVE(18, MOVE_HEADBUTT), LEVEL_UP_MOVE(22, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE(25, MOVE_IMPRISON), - //LEVEL_UP_MOVE(29, MOVE_SIMPLE_BEAM), - //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(29, MOVE_SIMPLE_BEAM), + LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(36, MOVE_PSYCH_UP), LEVEL_UP_MOVE(39, MOVE_PSYCHIC), LEVEL_UP_MOVE(43, MOVE_CALM_MIND), LEVEL_UP_MOVE(46, MOVE_RECOVER), - //LEVEL_UP_MOVE(50, MOVE_GUARD_SPLIT), - //LEVEL_UP_MOVE(50, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(53, MOVE_SYNCHRONOISE), - //LEVEL_UP_MOVE(56, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(50, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(50, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(53, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(56, MOVE_WONDER_ROOM), LEVEL_UP_END }; static const struct LevelUpMove sBeheeyemLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_WONDER_ROOM), - //LEVEL_UP_MOVE( 1, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE( 1, MOVE_SYNCHRONOISE), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_GROWL), - //LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE( 1, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE( 1, MOVE_MIRACLE_EYE), LEVEL_UP_MOVE( 4, MOVE_GROWL), - //LEVEL_UP_MOVE( 8, MOVE_HEAL_BLOCK), - //LEVEL_UP_MOVE(11, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE( 8, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(11, MOVE_MIRACLE_EYE), LEVEL_UP_MOVE(15, MOVE_PSYBEAM), LEVEL_UP_MOVE(18, MOVE_HEADBUTT), LEVEL_UP_MOVE(22, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE(25, MOVE_IMPRISON), - //LEVEL_UP_MOVE(29, MOVE_SIMPLE_BEAM), - //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(29, MOVE_SIMPLE_BEAM), + LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(36, MOVE_PSYCH_UP), LEVEL_UP_MOVE(39, MOVE_PSYCHIC), LEVEL_UP_MOVE(45, MOVE_CALM_MIND), LEVEL_UP_MOVE(50, MOVE_RECOVER), - //LEVEL_UP_MOVE(56, MOVE_GUARD_SPLIT), - //LEVEL_UP_MOVE(58, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(63, MOVE_SYNCHRONOISE), - //LEVEL_UP_MOVE(68, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(56, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(58, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(63, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(68, MOVE_WONDER_ROOM), LEVEL_UP_END }; @@ -12318,11 +12318,11 @@ static const struct LevelUpMove sLitwickLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(13, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP), - //LEVEL_UP_MOVE(20, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(20, MOVE_FLAME_BURST), LEVEL_UP_MOVE(24, MOVE_IMPRISON), - //LEVEL_UP_MOVE(28, MOVE_HEX), + LEVEL_UP_MOVE(28, MOVE_HEX), LEVEL_UP_MOVE(33, MOVE_MEMENTO), - //LEVEL_UP_MOVE(38, MOVE_INFERNO), + LEVEL_UP_MOVE(38, MOVE_INFERNO), LEVEL_UP_MOVE(43, MOVE_CURSE), LEVEL_UP_MOVE(49, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(55, MOVE_PAIN_SPLIT), @@ -12341,11 +12341,11 @@ static const struct LevelUpMove sLampentLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(13, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP), - //LEVEL_UP_MOVE(20, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(20, MOVE_FLAME_BURST), LEVEL_UP_MOVE(24, MOVE_IMPRISON), - //LEVEL_UP_MOVE(28, MOVE_HEX), + LEVEL_UP_MOVE(28, MOVE_HEX), LEVEL_UP_MOVE(33, MOVE_MEMENTO), - //LEVEL_UP_MOVE(38, MOVE_INFERNO), + LEVEL_UP_MOVE(38, MOVE_INFERNO), LEVEL_UP_MOVE(45, MOVE_CURSE), LEVEL_UP_MOVE(53, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(61, MOVE_PAIN_SPLIT), @@ -12357,51 +12357,51 @@ static const struct LevelUpMove sChandelureLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PAIN_SPLIT), LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE( 1, MOVE_FLAME_BURST), - //LEVEL_UP_MOVE( 1, MOVE_HEX), + LEVEL_UP_MOVE( 1, MOVE_FLAME_BURST), + LEVEL_UP_MOVE( 1, MOVE_HEX), LEVEL_UP_END }; static const struct LevelUpMove sAxewLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 4, MOVE_LEER), - //LEVEL_UP_MOVE( 7, MOVE_ASSURANCE), + LEVEL_UP_MOVE( 7, MOVE_ASSURANCE), LEVEL_UP_MOVE(10, MOVE_DRAGON_RAGE), - //LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP), + LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP), LEVEL_UP_MOVE(16, MOVE_SCARY_FACE), LEVEL_UP_MOVE(20, MOVE_SLASH), LEVEL_UP_MOVE(24, MOVE_FALSE_SWIPE), LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE(32, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(36, MOVE_TAUNT), - //LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(46, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(50, MOVE_GUILLOTINE), LEVEL_UP_MOVE(56, MOVE_OUTRAGE), - //LEVEL_UP_MOVE(61, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(61, MOVE_GIGA_IMPACT), LEVEL_UP_END }; static const struct LevelUpMove sFraxureLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), + LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE( 4, MOVE_LEER), - //LEVEL_UP_MOVE( 7, MOVE_ASSURANCE), + LEVEL_UP_MOVE( 7, MOVE_ASSURANCE), LEVEL_UP_MOVE(10, MOVE_DRAGON_RAGE), - //LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP), + LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP), LEVEL_UP_MOVE(16, MOVE_SCARY_FACE), LEVEL_UP_MOVE(20, MOVE_SLASH), LEVEL_UP_MOVE(24, MOVE_FALSE_SWIPE), LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE(32, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(36, MOVE_TAUNT), - //LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(48, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(54, MOVE_GUILLOTINE), LEVEL_UP_MOVE(60, MOVE_OUTRAGE), - //LEVEL_UP_MOVE(66, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(66, MOVE_GIGA_IMPACT), LEVEL_UP_END }; @@ -12409,23 +12409,23 @@ static const struct LevelUpMove sHaxorusLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_OUTRAGE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), + LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE( 4, MOVE_LEER), - //LEVEL_UP_MOVE( 7, MOVE_ASSURANCE), + LEVEL_UP_MOVE( 7, MOVE_ASSURANCE), LEVEL_UP_MOVE(10, MOVE_DRAGON_RAGE), - //LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP), + LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP), LEVEL_UP_MOVE(16, MOVE_SCARY_FACE), LEVEL_UP_MOVE(20, MOVE_SLASH), LEVEL_UP_MOVE(24, MOVE_FALSE_SWIPE), LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE(32, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(36, MOVE_TAUNT), - //LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(58, MOVE_GUILLOTINE), LEVEL_UP_MOVE(66, MOVE_OUTRAGE), - //LEVEL_UP_MOVE(74, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(74, MOVE_GIGA_IMPACT), LEVEL_UP_END }; @@ -12434,9 +12434,9 @@ static const struct LevelUpMove sCubchooLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 9, MOVE_BIDE), LEVEL_UP_MOVE(13, MOVE_ICY_WIND), - //LEVEL_UP_MOVE(15, MOVE_PLAY_NICE), + LEVEL_UP_MOVE(15, MOVE_PLAY_NICE), LEVEL_UP_MOVE(17, MOVE_FURY_SWIPES), - //LEVEL_UP_MOVE(21, MOVE_BRINE), + LEVEL_UP_MOVE(21, MOVE_BRINE), LEVEL_UP_MOVE(25, MOVE_ENDURE), LEVEL_UP_MOVE(29, MOVE_CHARM), LEVEL_UP_MOVE(33, MOVE_SLASH), @@ -12451,11 +12451,11 @@ static const struct LevelUpMove sCubchooLevelUpLearnset[] = { static const struct LevelUpMove sBearticLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_ICICLE_CRASH), - //LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH), + LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH), LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD), LEVEL_UP_MOVE( 1, MOVE_THRASH), LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER), - //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_BIDE), @@ -12463,9 +12463,9 @@ static const struct LevelUpMove sBearticLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 9, MOVE_BIDE), LEVEL_UP_MOVE(13, MOVE_ICY_WIND), - //LEVEL_UP_MOVE(15, MOVE_PLAY_NICE), + LEVEL_UP_MOVE(15, MOVE_PLAY_NICE), LEVEL_UP_MOVE(17, MOVE_FURY_SWIPES), - //LEVEL_UP_MOVE(21, MOVE_BRINE), + LEVEL_UP_MOVE(21, MOVE_BRINE), LEVEL_UP_MOVE(25, MOVE_ENDURE), LEVEL_UP_MOVE(29, MOVE_SWAGGER), LEVEL_UP_MOVE(33, MOVE_SLASH), @@ -12480,9 +12480,9 @@ static const struct LevelUpMove sBearticLevelUpLearnset[] = { static const struct LevelUpMove sCryogonalLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE( 1, MOVE_BIND), - //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), + LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), LEVEL_UP_MOVE( 1, MOVE_SHARPEN), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 5, MOVE_ICY_WIND), @@ -12497,9 +12497,9 @@ static const struct LevelUpMove sCryogonalLevelUpLearnset[] = { LEVEL_UP_MOVE(37, MOVE_SLASH), LEVEL_UP_MOVE(41, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(45, MOVE_RECOVER), - //LEVEL_UP_MOVE(49, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE(49, MOVE_FREEZE_DRY), LEVEL_UP_MOVE(50, MOVE_SOLAR_BEAM), - //LEVEL_UP_MOVE(53, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(53, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(57, MOVE_SHEER_COLD), LEVEL_UP_END }; @@ -12509,42 +12509,42 @@ static const struct LevelUpMove sShelmetLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_ACID), LEVEL_UP_MOVE( 8, MOVE_BIDE), LEVEL_UP_MOVE(13, MOVE_CURSE), - //LEVEL_UP_MOVE(16, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(16, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE(20, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(25, MOVE_YAWN), LEVEL_UP_MOVE(28, MOVE_PROTECT), LEVEL_UP_MOVE(32, MOVE_ACID_ARMOR), LEVEL_UP_MOVE(37, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(40, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(44, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(44, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(49, MOVE_RECOVER), - //LEVEL_UP_MOVE(50, MOVE_GUARD_SWAP), - //LEVEL_UP_MOVE(56, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(50, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE(56, MOVE_FINAL_GAMBIT), LEVEL_UP_END }; static const struct LevelUpMove sAccelgorLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_WATER_SHURIKEN), - //LEVEL_UP_MOVE( 1, MOVE_FINAL_GAMBIT), - //LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP), + LEVEL_UP_MOVE( 1, MOVE_WATER_SHURIKEN), + LEVEL_UP_MOVE( 1, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP), LEVEL_UP_MOVE( 1, MOVE_ABSORB), - //LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), - //LEVEL_UP_MOVE( 4, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 4, MOVE_ACID_SPRAY), LEVEL_UP_MOVE( 8, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), - //LEVEL_UP_MOVE(16, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(16, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE(20, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(25, MOVE_SWIFT), - //LEVEL_UP_MOVE(28, MOVE_ME_FIRST), + LEVEL_UP_MOVE(28, MOVE_ME_FIRST), LEVEL_UP_MOVE(32, MOVE_AGILITY), LEVEL_UP_MOVE(37, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(40, MOVE_U_TURN), - //LEVEL_UP_MOVE(44, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(40, MOVE_U_TURN), + LEVEL_UP_MOVE(44, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(49, MOVE_RECOVER), - //LEVEL_UP_MOVE(52, MOVE_POWER_SWAP), - //LEVEL_UP_MOVE(56, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(52, MOVE_POWER_SWAP), + LEVEL_UP_MOVE(56, MOVE_FINAL_GAMBIT), LEVEL_UP_END }; @@ -12559,8 +12559,8 @@ static const struct LevelUpMove sStunfiskLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE(13, MOVE_MUD_SHOT), LEVEL_UP_MOVE(17, MOVE_CAMOUFLAGE), - //LEVEL_UP_MOVE(21, MOVE_MUD_BOMB), - //LEVEL_UP_MOVE(25, MOVE_DISCHARGE), + LEVEL_UP_MOVE(21, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(25, MOVE_DISCHARGE), LEVEL_UP_MOVE(30, MOVE_ENDURE), LEVEL_UP_MOVE(35, MOVE_BOUNCE), LEVEL_UP_MOVE(40, MOVE_MUDDY_WATER), @@ -12579,20 +12579,20 @@ static const struct LevelUpMove sMienfooLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(21, MOVE_SWIFT), LEVEL_UP_MOVE(25, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(29, MOVE_FORCE_PALM), - //LEVEL_UP_MOVE(33, MOVE_DRAIN_PUNCH), + LEVEL_UP_MOVE(29, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(33, MOVE_DRAIN_PUNCH), LEVEL_UP_MOVE(37, MOVE_JUMP_KICK), - //LEVEL_UP_MOVE(41, MOVE_U_TURN), - //LEVEL_UP_MOVE(45, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(41, MOVE_U_TURN), + LEVEL_UP_MOVE(45, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(49, MOVE_BOUNCE), LEVEL_UP_MOVE(50, MOVE_HIGH_JUMP_KICK), LEVEL_UP_MOVE(57, MOVE_REVERSAL), - //LEVEL_UP_MOVE(61, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE(61, MOVE_AURA_SPHERE), LEVEL_UP_END }; static const struct LevelUpMove sMienshaoLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE), LEVEL_UP_MOVE( 1, MOVE_REVERSAL), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_MEDITATE), @@ -12604,33 +12604,33 @@ static const struct LevelUpMove sMienshaoLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(21, MOVE_SWIFT), LEVEL_UP_MOVE(25, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(29, MOVE_FORCE_PALM), - //LEVEL_UP_MOVE(33, MOVE_DRAIN_PUNCH), + LEVEL_UP_MOVE(29, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(33, MOVE_DRAIN_PUNCH), LEVEL_UP_MOVE(37, MOVE_JUMP_KICK), - //LEVEL_UP_MOVE(41, MOVE_U_TURN), - //LEVEL_UP_MOVE(45, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(41, MOVE_U_TURN), + LEVEL_UP_MOVE(45, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(49, MOVE_BOUNCE), LEVEL_UP_MOVE(56, MOVE_HIGH_JUMP_KICK), LEVEL_UP_MOVE(63, MOVE_REVERSAL), - //LEVEL_UP_MOVE(70, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE(70, MOVE_AURA_SPHERE), LEVEL_UP_END }; static const struct LevelUpMove sDruddigonLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - //LEVEL_UP_MOVE( 5, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 5, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 9, MOVE_BITE), LEVEL_UP_MOVE(13, MOVE_SCARY_FACE), LEVEL_UP_MOVE(18, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE(21, MOVE_SLASH), LEVEL_UP_MOVE(25, MOVE_CRUNCH), LEVEL_UP_MOVE(27, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(31, MOVE_CHIP_AWAY), + LEVEL_UP_MOVE(31, MOVE_CHIP_AWAY), LEVEL_UP_MOVE(35, MOVE_REVENGE), - //LEVEL_UP_MOVE(40, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(45, MOVE_DRAGON_TAIL), - //LEVEL_UP_MOVE(49, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE(40, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(45, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(49, MOVE_ROCK_CLIMB), LEVEL_UP_MOVE(55, MOVE_SUPERPOWER), LEVEL_UP_MOVE(62, MOVE_OUTRAGE), LEVEL_UP_END @@ -12644,22 +12644,22 @@ static const struct LevelUpMove sGolettLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_ROLLOUT), LEVEL_UP_MOVE(13, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE(17, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(21, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(21, MOVE_STOMPING_TANTRUM), LEVEL_UP_MOVE(25, MOVE_MEGA_PUNCH), LEVEL_UP_MOVE(30, MOVE_MAGNITUDE), LEVEL_UP_MOVE(35, MOVE_DYNAMIC_PUNCH), LEVEL_UP_MOVE(40, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(45, MOVE_CURSE), LEVEL_UP_MOVE(50, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE(55, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(55, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(61, MOVE_FOCUS_PUNCH), LEVEL_UP_END }; static const struct LevelUpMove sGolurkLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE( 1, MOVE_HIGH_HORSEPOWER), + LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE( 1, MOVE_HIGH_HORSEPOWER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), @@ -12668,16 +12668,16 @@ static const struct LevelUpMove sGolurkLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_ROLLOUT), LEVEL_UP_MOVE(13, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE(17, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(21, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(21, MOVE_STOMPING_TANTRUM), LEVEL_UP_MOVE(25, MOVE_MEGA_PUNCH), LEVEL_UP_MOVE(30, MOVE_MAGNITUDE), LEVEL_UP_MOVE(35, MOVE_DYNAMIC_PUNCH), LEVEL_UP_MOVE(40, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(47, MOVE_CURSE), LEVEL_UP_MOVE(54, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE(61, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(61, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(69, MOVE_FOCUS_PUNCH), - //LEVEL_UP_MOVE(76, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(76, MOVE_PHANTOM_FORCE), LEVEL_UP_END }; @@ -12690,12 +12690,12 @@ static const struct LevelUpMove sPawniardLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_SCARY_FACE), LEVEL_UP_MOVE(25, MOVE_METAL_CLAW), LEVEL_UP_MOVE(30, MOVE_SLASH), - //LEVEL_UP_MOVE(33, MOVE_ASSURANCE), + LEVEL_UP_MOVE(33, MOVE_ASSURANCE), LEVEL_UP_MOVE(38, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(41, MOVE_EMBARGO), + LEVEL_UP_MOVE(41, MOVE_EMBARGO), LEVEL_UP_MOVE(46, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(54, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(54, MOVE_IRON_HEAD), LEVEL_UP_MOVE(57, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(62, MOVE_GUILLOTINE), LEVEL_UP_END @@ -12703,8 +12703,8 @@ static const struct LevelUpMove sPawniardLevelUpLearnset[] = { static const struct LevelUpMove sBisharpLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GUILLOTINE), - //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), + LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), + LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), @@ -12716,12 +12716,12 @@ static const struct LevelUpMove sBisharpLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_SCARY_FACE), LEVEL_UP_MOVE(25, MOVE_METAL_CLAW), LEVEL_UP_MOVE(30, MOVE_SLASH), - //LEVEL_UP_MOVE(33, MOVE_ASSURANCE), + LEVEL_UP_MOVE(33, MOVE_ASSURANCE), LEVEL_UP_MOVE(38, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(41, MOVE_EMBARGO), + LEVEL_UP_MOVE(41, MOVE_EMBARGO), LEVEL_UP_MOVE(46, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(57, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(57, MOVE_IRON_HEAD), LEVEL_UP_MOVE(63, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(71, MOVE_GUILLOTINE), LEVEL_UP_END @@ -12735,13 +12735,13 @@ static const struct LevelUpMove sBouffalantLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_HORN_ATTACK), LEVEL_UP_MOVE(21, MOVE_SCARY_FACE), LEVEL_UP_MOVE(26, MOVE_REVENGE), - //LEVEL_UP_MOVE(31, MOVE_HEAD_CHARGE), + LEVEL_UP_MOVE(31, MOVE_HEAD_CHARGE), LEVEL_UP_MOVE(36, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(41, MOVE_MEGAHORN), LEVEL_UP_MOVE(46, MOVE_REVERSAL), LEVEL_UP_MOVE(50, MOVE_THRASH), LEVEL_UP_MOVE(56, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(61, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(61, MOVE_GIGA_IMPACT), LEVEL_UP_END }; @@ -12750,26 +12750,26 @@ static const struct LevelUpMove sRuffletLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(10, MOVE_WING_ATTACK), - //LEVEL_UP_MOVE(14, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(14, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(19, MOVE_SCARY_FACE), LEVEL_UP_MOVE(23, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(28, MOVE_SLASH), - //LEVEL_UP_MOVE(32, MOVE_DEFOG), - //LEVEL_UP_MOVE(37, MOVE_TAILWIND), - //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(32, MOVE_DEFOG), + LEVEL_UP_MOVE(37, MOVE_TAILWIND), + LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), LEVEL_UP_MOVE(46, MOVE_CRUSH_CLAW), - //LEVEL_UP_MOVE(50, MOVE_SKY_DROP), + LEVEL_UP_MOVE(50, MOVE_SKY_DROP), LEVEL_UP_MOVE(55, MOVE_WHIRLWIND), - //LEVEL_UP_MOVE(59, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(59, MOVE_BRAVE_BIRD), LEVEL_UP_MOVE(64, MOVE_THRASH), LEVEL_UP_END }; static const struct LevelUpMove sBraviaryLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SUPERPOWER), + //LEVEL_UP_MOVE( 0, MOVE_SUPERPOWER), LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER), LEVEL_UP_MOVE( 1, MOVE_THRASH), - //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -12777,17 +12777,17 @@ static const struct LevelUpMove sBraviaryLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(10, MOVE_WING_ATTACK), - //LEVEL_UP_MOVE(14, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(14, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(19, MOVE_SCARY_FACE), LEVEL_UP_MOVE(23, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(28, MOVE_SLASH), - //LEVEL_UP_MOVE(32, MOVE_DEFOG), - //LEVEL_UP_MOVE(37, MOVE_TAILWIND), - //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(32, MOVE_DEFOG), + LEVEL_UP_MOVE(37, MOVE_TAILWIND), + LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), LEVEL_UP_MOVE(46, MOVE_CRUSH_CLAW), - //LEVEL_UP_MOVE(50, MOVE_SKY_DROP), + LEVEL_UP_MOVE(50, MOVE_SKY_DROP), LEVEL_UP_MOVE(57, MOVE_WHIRLWIND), - //LEVEL_UP_MOVE(63, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(63, MOVE_BRAVE_BIRD), LEVEL_UP_MOVE(70, MOVE_THRASH), LEVEL_UP_END }; @@ -12796,70 +12796,70 @@ static const struct LevelUpMove sVullabyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(10, MOVE_PLUCK), - //LEVEL_UP_MOVE(14, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(10, MOVE_PLUCK), + LEVEL_UP_MOVE(14, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(19, MOVE_FLATTER), LEVEL_UP_MOVE(23, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(28, MOVE_PUNISHMENT), - //LEVEL_UP_MOVE(32, MOVE_DEFOG), - //LEVEL_UP_MOVE(37, MOVE_TAILWIND), - //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(46, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(50, MOVE_EMBARGO), + LEVEL_UP_MOVE(28, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(32, MOVE_DEFOG), + LEVEL_UP_MOVE(37, MOVE_TAILWIND), + LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(46, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(50, MOVE_EMBARGO), LEVEL_UP_MOVE(55, MOVE_WHIRLWIND), - //LEVEL_UP_MOVE(59, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(59, MOVE_BRAVE_BIRD), LEVEL_UP_MOVE(64, MOVE_MIRROR_MOVE), LEVEL_UP_END }; static const struct LevelUpMove sMandibuzzLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_BONE_RUSH), + //LEVEL_UP_MOVE( 0, MOVE_BONE_RUSH), LEVEL_UP_MOVE( 1, MOVE_BONE_RUSH), LEVEL_UP_MOVE( 1, MOVE_MIRROR_MOVE), - //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_PLUCK), + LEVEL_UP_MOVE( 1, MOVE_PLUCK), LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(10, MOVE_PLUCK), - //LEVEL_UP_MOVE(14, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(10, MOVE_PLUCK), + LEVEL_UP_MOVE(14, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(19, MOVE_FLATTER), LEVEL_UP_MOVE(23, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(28, MOVE_PUNISHMENT), - //LEVEL_UP_MOVE(32, MOVE_DEFOG), - //LEVEL_UP_MOVE(37, MOVE_TAILWIND), - //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(46, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(50, MOVE_EMBARGO), + LEVEL_UP_MOVE(28, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(32, MOVE_DEFOG), + LEVEL_UP_MOVE(37, MOVE_TAILWIND), + LEVEL_UP_MOVE(41, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(46, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(50, MOVE_EMBARGO), LEVEL_UP_MOVE(57, MOVE_WHIRLWIND), - //LEVEL_UP_MOVE(63, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(63, MOVE_BRAVE_BIRD), LEVEL_UP_MOVE(70, MOVE_MIRROR_MOVE), LEVEL_UP_END }; static const struct LevelUpMove sHeatmorLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 1, MOVE_INCINERATE), + LEVEL_UP_MOVE( 1, MOVE_INCINERATE), LEVEL_UP_MOVE( 1, MOVE_LICK), LEVEL_UP_MOVE( 6, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(11, MOVE_BIND), LEVEL_UP_MOVE(16, MOVE_FIRE_SPIN), LEVEL_UP_MOVE(21, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(26, MOVE_SNATCH), - //LEVEL_UP_MOVE(31, MOVE_FLAME_BURST), - //LEVEL_UP_MOVE(36, MOVE_BUG_BITE), + LEVEL_UP_MOVE(31, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(36, MOVE_BUG_BITE), LEVEL_UP_MOVE(41, MOVE_SLASH), - //LEVEL_UP_MOVE(44, MOVE_FIRE_LASH), + LEVEL_UP_MOVE(44, MOVE_FIRE_LASH), LEVEL_UP_MOVE(47, MOVE_AMNESIA), LEVEL_UP_MOVE(50, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(56, MOVE_STOCKPILE), LEVEL_UP_MOVE(56, MOVE_SPIT_UP), LEVEL_UP_MOVE(56, MOVE_SWALLOW), - //LEVEL_UP_MOVE(61, MOVE_FLARE_BLITZ), - //LEVEL_UP_MOVE(66, MOVE_INFERNO), + LEVEL_UP_MOVE(61, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(66, MOVE_INFERNO), LEVEL_UP_END }; @@ -12872,12 +12872,12 @@ static const struct LevelUpMove sDurantLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 6, MOVE_AGILITY), LEVEL_UP_MOVE(11, MOVE_METAL_CLAW), - //LEVEL_UP_MOVE(16, MOVE_BUG_BITE), + LEVEL_UP_MOVE(16, MOVE_BUG_BITE), LEVEL_UP_MOVE(21, MOVE_CRUNCH), - //LEVEL_UP_MOVE(26, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(26, MOVE_IRON_HEAD), LEVEL_UP_MOVE(31, MOVE_DIG), - //LEVEL_UP_MOVE(36, MOVE_ENTRAINMENT), - //LEVEL_UP_MOVE(41, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(36, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(41, MOVE_X_SCISSOR), LEVEL_UP_MOVE(46, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(51, MOVE_GUILLOTINE), LEVEL_UP_MOVE(56, MOVE_METAL_SOUND), @@ -12894,9 +12894,9 @@ static const struct LevelUpMove sDeinoLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_ROAR), LEVEL_UP_MOVE(25, MOVE_CRUNCH), LEVEL_UP_MOVE(28, MOVE_SLAM), - //LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(38, MOVE_WORK_UP), - //LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(38, MOVE_WORK_UP), + LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE(48, MOVE_BODY_SLAM), LEVEL_UP_MOVE(50, MOVE_SCARY_FACE), LEVEL_UP_MOVE(58, MOVE_HYPER_VOICE), @@ -12905,7 +12905,7 @@ static const struct LevelUpMove sDeinoLevelUpLearnset[] = { }; static const struct LevelUpMove sZweilousLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -12916,9 +12916,9 @@ static const struct LevelUpMove sZweilousLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_ROAR), LEVEL_UP_MOVE(25, MOVE_CRUNCH), LEVEL_UP_MOVE(28, MOVE_SLAM), - //LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(38, MOVE_WORK_UP), - //LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(38, MOVE_WORK_UP), + LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE(48, MOVE_BODY_SLAM), LEVEL_UP_MOVE(55, MOVE_SCARY_FACE), LEVEL_UP_MOVE(64, MOVE_HYPER_VOICE), @@ -12940,9 +12940,9 @@ static const struct LevelUpMove sHydreigonLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_ROAR), LEVEL_UP_MOVE(25, MOVE_CRUNCH), LEVEL_UP_MOVE(28, MOVE_SLAM), - //LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(38, MOVE_WORK_UP), - //LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(38, MOVE_WORK_UP), + LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE(48, MOVE_BODY_SLAM), LEVEL_UP_MOVE(55, MOVE_SCARY_FACE), LEVEL_UP_MOVE(68, MOVE_HYPER_VOICE), @@ -12955,28 +12955,28 @@ static const struct LevelUpMove sLarvestaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), LEVEL_UP_MOVE(10, MOVE_ABSORB), LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(30, MOVE_FLAME_CHARGE), - //LEVEL_UP_MOVE(40, MOVE_BUG_BITE), + LEVEL_UP_MOVE(30, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(40, MOVE_BUG_BITE), LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(60, MOVE_FLAME_WHEEL), - //LEVEL_UP_MOVE(70, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(70, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(80, MOVE_AMNESIA), LEVEL_UP_MOVE(90, MOVE_THRASH), - //LEVEL_UP_MOVE(100, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(100, MOVE_FLARE_BLITZ), LEVEL_UP_END }; static const struct LevelUpMove sVolcaronaLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_FIERY_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_HURRICANE), - //LEVEL_UP_MOVE( 1, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_FIERY_DANCE), + LEVEL_UP_MOVE( 1, MOVE_HURRICANE), + LEVEL_UP_MOVE( 1, MOVE_RAGE_POWDER), LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE), - //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE( 1, MOVE_THRASH), LEVEL_UP_MOVE( 1, MOVE_AMNESIA), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ), LEVEL_UP_MOVE( 1, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), @@ -12988,54 +12988,54 @@ static const struct LevelUpMove sVolcaronaLevelUpLearnset[] = { LEVEL_UP_MOVE(40, MOVE_WHIRLWIND), LEVEL_UP_MOVE(50, MOVE_SILVER_WIND), LEVEL_UP_MOVE(60, MOVE_HEAT_WAVE), - //LEVEL_UP_MOVE(70, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE(80, MOVE_RAGE_POWDER), - //LEVEL_UP_MOVE(90, MOVE_HURRICANE), - //LEVEL_UP_MOVE(100, MOVE_FIERY_DANCE), + LEVEL_UP_MOVE(70, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(80, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(90, MOVE_HURRICANE), + LEVEL_UP_MOVE(100, MOVE_FIERY_DANCE), LEVEL_UP_END }; static const struct LevelUpMove sCobalionLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), - //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), + LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 7, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(13, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(19, MOVE_RETALIATE), - //LEVEL_UP_MOVE(25, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE(19, MOVE_RETALIATE), + LEVEL_UP_MOVE(25, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD), LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(49, MOVE_WORK_UP), - //LEVEL_UP_MOVE(55, MOVE_METAL_BURST), - //LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(49, MOVE_WORK_UP), + LEVEL_UP_MOVE(55, MOVE_METAL_BURST), + LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; static const struct LevelUpMove sTerrakionLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), - //LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN), LEVEL_UP_MOVE( 7, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(13, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(19, MOVE_RETALIATE), + LEVEL_UP_MOVE(19, MOVE_RETALIATE), LEVEL_UP_MOVE(25, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD), LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(49, MOVE_WORK_UP), - //LEVEL_UP_MOVE(55, MOVE_STONE_EDGE), - //LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(49, MOVE_WORK_UP), + LEVEL_UP_MOVE(55, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; static const struct LevelUpMove sVirizionLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE( 1, MOVE_LEAF_BLADE), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -13043,21 +13043,21 @@ static const struct LevelUpMove sVirizionLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE( 7, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(13, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(19, MOVE_RETALIATE), + LEVEL_UP_MOVE(19, MOVE_RETALIATE), LEVEL_UP_MOVE(25, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD), LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(49, MOVE_WORK_UP), + LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(49, MOVE_WORK_UP), LEVEL_UP_MOVE(55, MOVE_LEAF_BLADE), - //LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; static const struct LevelUpMove sTornadusLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_THRASH), - //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE( 1, MOVE_HURRICANE), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_HURRICANE), LEVEL_UP_MOVE( 1, MOVE_UPROAR), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_GUST), @@ -13067,21 +13067,21 @@ static const struct LevelUpMove sTornadusLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_AIR_CUTTER), LEVEL_UP_MOVE(25, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(31, MOVE_AGILITY), - //LEVEL_UP_MOVE(37, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(37, MOVE_AIR_SLASH), LEVEL_UP_MOVE(43, MOVE_CRUNCH), - //LEVEL_UP_MOVE(49, MOVE_TAILWIND), + LEVEL_UP_MOVE(49, MOVE_TAILWIND), LEVEL_UP_MOVE(55, MOVE_RAIN_DANCE), - //LEVEL_UP_MOVE(61, MOVE_HURRICANE), - //LEVEL_UP_MOVE(67, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(61, MOVE_HURRICANE), + LEVEL_UP_MOVE(67, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(79, MOVE_THRASH), LEVEL_UP_END }; static const struct LevelUpMove sThundurusLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_THRASH), - //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), LEVEL_UP_MOVE( 1, MOVE_UPROAR), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), @@ -13089,21 +13089,21 @@ static const struct LevelUpMove sThundurusLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_BITE), LEVEL_UP_MOVE(13, MOVE_REVENGE), LEVEL_UP_MOVE(19, MOVE_SHOCK_WAVE), - //LEVEL_UP_MOVE(25, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(25, MOVE_HEAL_BLOCK), LEVEL_UP_MOVE(31, MOVE_AGILITY), - //LEVEL_UP_MOVE(37, MOVE_DISCHARGE), + LEVEL_UP_MOVE(37, MOVE_DISCHARGE), LEVEL_UP_MOVE(43, MOVE_CRUNCH), LEVEL_UP_MOVE(49, MOVE_CHARGE), - //LEVEL_UP_MOVE(55, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(55, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(61, MOVE_THUNDER), - //LEVEL_UP_MOVE(67, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(67, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(79, MOVE_THRASH), LEVEL_UP_END }; static const struct LevelUpMove sReshiramLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE( 8, MOVE_IMPRISON), LEVEL_UP_MOVE(15, MOVE_ANCIENT_POWER), @@ -13111,57 +13111,57 @@ static const struct LevelUpMove sReshiramLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(36, MOVE_SLASH), LEVEL_UP_MOVE(43, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE(50, MOVE_FUSION_FLARE), - //LEVEL_UP_MOVE(54, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(50, MOVE_FUSION_FLARE), + LEVEL_UP_MOVE(54, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE(71, MOVE_CRUNCH), LEVEL_UP_MOVE(78, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(85, MOVE_OUTRAGE), LEVEL_UP_MOVE(92, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(100, MOVE_BLUE_FLARE), + LEVEL_UP_MOVE(100, MOVE_BLUE_FLARE), LEVEL_UP_END }; static const struct LevelUpMove sZekromLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE( 8, MOVE_IMPRISON), LEVEL_UP_MOVE(15, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(22, MOVE_THUNDERBOLT), LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(36, MOVE_SLASH), - //LEVEL_UP_MOVE(43, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(50, MOVE_FUSION_BOLT), + LEVEL_UP_MOVE(43, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(50, MOVE_FUSION_BOLT), LEVEL_UP_MOVE(54, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE(71, MOVE_CRUNCH), LEVEL_UP_MOVE(78, MOVE_THUNDER), LEVEL_UP_MOVE(85, MOVE_OUTRAGE), LEVEL_UP_MOVE(92, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(100, MOVE_BOLT_STRIKE), + LEVEL_UP_MOVE(100, MOVE_BOLT_STRIKE), LEVEL_UP_END }; static const struct LevelUpMove sLandorusLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_OUTRAGE), - //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_FISSURE), LEVEL_UP_MOVE( 1, MOVE_BLOCK), LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), LEVEL_UP_MOVE( 1, MOVE_ROCK_TOMB), LEVEL_UP_MOVE( 1, MOVE_IMPRISON), - //LEVEL_UP_MOVE( 7, MOVE_PUNISHMENT), - //LEVEL_UP_MOVE(13, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 7, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(13, MOVE_BULLDOZE), LEVEL_UP_MOVE(19, MOVE_ROCK_THROW), LEVEL_UP_MOVE(25, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(31, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(37, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(37, MOVE_EARTH_POWER), LEVEL_UP_MOVE(43, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(49, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(55, MOVE_SANDSTORM), LEVEL_UP_MOVE(61, MOVE_FISSURE), - //LEVEL_UP_MOVE(67, MOVE_STONE_EDGE), - //LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(67, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(79, MOVE_OUTRAGE), LEVEL_UP_END }; @@ -13175,9 +13175,9 @@ static const struct LevelUpMove sKyuremLevelUpLearnset[] = { LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(36, MOVE_SLASH), LEVEL_UP_MOVE(43, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(50, MOVE_GLACIATE), - //LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(50, MOVE_GLACIATE), + LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE(71, MOVE_ENDEAVOR), LEVEL_UP_MOVE(78, MOVE_BLIZZARD), LEVEL_UP_MOVE(85, MOVE_OUTRAGE), @@ -13186,7 +13186,7 @@ static const struct LevelUpMove sKyuremLevelUpLearnset[] = { }; static const struct LevelUpMove sKeldeoLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM), @@ -13194,19 +13194,19 @@ static const struct LevelUpMove sKeldeoLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(19, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(25, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(31, MOVE_RETALIATE), - //LEVEL_UP_MOVE(37, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE(43, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE(31, MOVE_RETALIATE), + LEVEL_UP_MOVE(37, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(43, MOVE_SACRED_SWORD), LEVEL_UP_MOVE(49, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(55, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(61, MOVE_WORK_UP), + LEVEL_UP_MOVE(55, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(61, MOVE_WORK_UP), LEVEL_UP_MOVE(67, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(73, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(73, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; static const struct LevelUpMove sMeloettaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ROUND), + LEVEL_UP_MOVE( 1, MOVE_ROUND), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_SING), @@ -13214,37 +13214,37 @@ static const struct LevelUpMove sMeloettaLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_CONFUSION), LEVEL_UP_MOVE(16, MOVE_SING), LEVEL_UP_MOVE(21, MOVE_TEETER_DANCE), - //LEVEL_UP_MOVE(26, MOVE_ACROBATICS), + LEVEL_UP_MOVE(26, MOVE_ACROBATICS), LEVEL_UP_MOVE(31, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(36, MOVE_ECHOED_VOICE), - //LEVEL_UP_MOVE(43, MOVE_U_TURN), - //LEVEL_UP_MOVE(50, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE(36, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(43, MOVE_U_TURN), + LEVEL_UP_MOVE(50, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE(57, MOVE_PSYCHIC), LEVEL_UP_MOVE(64, MOVE_HYPER_VOICE), LEVEL_UP_MOVE(71, MOVE_ROLE_PLAY), - //LEVEL_UP_MOVE(78, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(78, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(85, MOVE_PERISH_SONG), LEVEL_UP_END }; static const struct LevelUpMove sGenesectLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), - //LEVEL_UP_MOVE( 1, MOVE_TECHNO_BLAST), + LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), + LEVEL_UP_MOVE( 1, MOVE_TECHNO_BLAST), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_SCREECH), LEVEL_UP_MOVE( 7, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(11, MOVE_LOCK_ON), - //LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE), - //LEVEL_UP_MOVE(22, MOVE_MAGNET_BOMB), + LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(22, MOVE_MAGNET_BOMB), LEVEL_UP_MOVE(29, MOVE_SLASH), LEVEL_UP_MOVE(33, MOVE_METAL_SOUND), LEVEL_UP_MOVE(40, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(44, MOVE_TRI_ATTACK), - //LEVEL_UP_MOVE(51, MOVE_X_SCISSOR), - //LEVEL_UP_MOVE(55, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE(62, MOVE_SIMPLE_BEAM), + LEVEL_UP_MOVE(51, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(55, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(62, MOVE_SIMPLE_BEAM), LEVEL_UP_MOVE(66, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(73, MOVE_HYPER_BEAM), LEVEL_UP_MOVE(77, MOVE_SELF_DESTRUCT), @@ -13260,17 +13260,17 @@ static const struct LevelUpMove sChespinLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_LEECH_SEED), LEVEL_UP_MOVE(18, MOVE_PIN_MISSILE), LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(32, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(32, MOVE_SEED_BOMB), LEVEL_UP_MOVE(35, MOVE_MUD_SHOT), LEVEL_UP_MOVE(39, MOVE_BULK_UP), LEVEL_UP_MOVE(42, MOVE_BODY_SLAM), LEVEL_UP_MOVE(45, MOVE_PAIN_SPLIT), - //LEVEL_UP_MOVE(48, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(48, MOVE_WOOD_HAMMER), LEVEL_UP_END }; static const struct LevelUpMove sQuilladinLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_NEEDLE_ARM), + //LEVEL_UP_MOVE( 0, MOVE_NEEDLE_ARM), LEVEL_UP_MOVE( 1, MOVE_NEEDLE_ARM), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), @@ -13280,21 +13280,21 @@ static const struct LevelUpMove sQuilladinLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_LEECH_SEED), LEVEL_UP_MOVE(19, MOVE_PIN_MISSILE), LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(35, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(35, MOVE_SEED_BOMB), LEVEL_UP_MOVE(39, MOVE_MUD_SHOT), LEVEL_UP_MOVE(44, MOVE_BULK_UP), LEVEL_UP_MOVE(48, MOVE_BODY_SLAM), LEVEL_UP_MOVE(52, MOVE_PAIN_SPLIT), - //LEVEL_UP_MOVE(56, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(56, MOVE_WOOD_HAMMER), LEVEL_UP_END }; static const struct LevelUpMove sChesnaughtLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SPIKY_SHIELD), - //LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD), + LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD), LEVEL_UP_MOVE( 1, MOVE_NEEDLE_ARM), - //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_FEINT), LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -13306,14 +13306,14 @@ static const struct LevelUpMove sChesnaughtLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_LEECH_SEED), LEVEL_UP_MOVE(19, MOVE_PIN_MISSILE), LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(35, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(35, MOVE_SEED_BOMB), LEVEL_UP_MOVE(41, MOVE_MUD_SHOT), LEVEL_UP_MOVE(48, MOVE_BULK_UP), LEVEL_UP_MOVE(54, MOVE_BODY_SLAM), LEVEL_UP_MOVE(60, MOVE_PAIN_SPLIT), - //LEVEL_UP_MOVE(66, MOVE_WOOD_HAMMER), - //LEVEL_UP_MOVE(72, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE(78, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(66, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(72, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(78, MOVE_GIGA_IMPACT), LEVEL_UP_END }; @@ -13322,17 +13322,17 @@ static const struct LevelUpMove sFennekinLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_EMBER), LEVEL_UP_MOVE(11, MOVE_HOWL), - //LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(17, MOVE_PSYBEAM), LEVEL_UP_MOVE(20, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(25, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(25, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(27, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(31, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(31, MOVE_PSYSHOCK), LEVEL_UP_MOVE(35, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(38, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(41, MOVE_PSYCHIC), LEVEL_UP_MOVE(43, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(46, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE(46, MOVE_MAGIC_ROOM), LEVEL_UP_MOVE(48, MOVE_FIRE_BLAST), LEVEL_UP_END }; @@ -13343,27 +13343,27 @@ static const struct LevelUpMove sBraixenLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 5, MOVE_EMBER), LEVEL_UP_MOVE(11, MOVE_HOWL), - //LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(18, MOVE_PSYBEAM), LEVEL_UP_MOVE(22, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(28, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(28, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(36, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(36, MOVE_PSYSHOCK), LEVEL_UP_MOVE(41, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(45, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(49, MOVE_PSYCHIC), LEVEL_UP_MOVE(52, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(56, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE(56, MOVE_MAGIC_ROOM), LEVEL_UP_MOVE(59, MOVE_FIRE_BLAST), LEVEL_UP_END }; static const struct LevelUpMove sDelphoxLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_MYSTICAL_FIRE), - //LEVEL_UP_MOVE( 1, MOVE_MYSTICAL_FIRE), + LEVEL_UP_MOVE( 1, MOVE_MYSTICAL_FIRE), LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE( 1, MOVE_ROLE_PLAY), - //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), + LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -13371,17 +13371,17 @@ static const struct LevelUpMove sDelphoxLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HOWL), LEVEL_UP_MOVE( 5, MOVE_EMBER), LEVEL_UP_MOVE(11, MOVE_HOWL), - //LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(18, MOVE_PSYBEAM), LEVEL_UP_MOVE(22, MOVE_FIRE_SPIN), - //LEVEL_UP_MOVE(28, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE(28, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(38, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(38, MOVE_PSYSHOCK), LEVEL_UP_MOVE(45, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(51, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(57, MOVE_PSYCHIC), LEVEL_UP_MOVE(62, MOVE_SUNNY_DAY), - //LEVEL_UP_MOVE(68, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE(68, MOVE_MAGIC_ROOM), LEVEL_UP_MOVE(74, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(80, MOVE_FUTURE_SIGHT), LEVEL_UP_END @@ -13395,9 +13395,9 @@ static const struct LevelUpMove sFroakieLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_LICK), LEVEL_UP_MOVE(14, MOVE_WATER_PULSE), LEVEL_UP_MOVE(18, MOVE_SMOKESCREEN), - //LEVEL_UP_MOVE(21, MOVE_ROUND), - //LEVEL_UP_MOVE(25, MOVE_FLING), - //LEVEL_UP_MOVE(29, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(21, MOVE_ROUND), + LEVEL_UP_MOVE(25, MOVE_FLING), + LEVEL_UP_MOVE(29, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(35, MOVE_SUBSTITUTE), LEVEL_UP_MOVE(39, MOVE_BOUNCE), LEVEL_UP_MOVE(43, MOVE_DOUBLE_TEAM), @@ -13414,9 +13414,9 @@ static const struct LevelUpMove sFrogadierLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_LICK), LEVEL_UP_MOVE(14, MOVE_WATER_PULSE), LEVEL_UP_MOVE(19, MOVE_SMOKESCREEN), - //LEVEL_UP_MOVE(23, MOVE_ROUND), - //LEVEL_UP_MOVE(28, MOVE_FLING), - //LEVEL_UP_MOVE(33, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(23, MOVE_ROUND), + LEVEL_UP_MOVE(28, MOVE_FLING), + LEVEL_UP_MOVE(33, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(40, MOVE_SUBSTITUTE), LEVEL_UP_MOVE(45, MOVE_BOUNCE), LEVEL_UP_MOVE(50, MOVE_DOUBLE_TEAM), @@ -13426,11 +13426,11 @@ static const struct LevelUpMove sFrogadierLevelUpLearnset[] = { static const struct LevelUpMove sGreninjaLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_WATER_SHURIKEN), - //LEVEL_UP_MOVE( 1, MOVE_WATER_SHURIKEN), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_WATER_SHURIKEN), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE( 1, MOVE_HAZE), LEVEL_UP_MOVE( 1, MOVE_ROLE_PLAY), - //LEVEL_UP_MOVE( 1, MOVE_MAT_BLOCK), + LEVEL_UP_MOVE( 1, MOVE_MAT_BLOCK), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), @@ -13440,7 +13440,7 @@ static const struct LevelUpMove sGreninjaLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_LICK), LEVEL_UP_MOVE(14, MOVE_WATER_PULSE), LEVEL_UP_MOVE(19, MOVE_SMOKESCREEN), - //LEVEL_UP_MOVE(23, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(23, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(28, MOVE_SPIKES), LEVEL_UP_MOVE(33, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(42, MOVE_SUBSTITUTE), @@ -13448,7 +13448,7 @@ static const struct LevelUpMove sGreninjaLevelUpLearnset[] = { LEVEL_UP_MOVE(56, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(68, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(70, MOVE_HAZE), - //LEVEL_UP_MOVE(77, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(77, MOVE_NIGHT_SLASH), LEVEL_UP_END }; @@ -13473,9 +13473,9 @@ static const struct LevelUpMove sBunnelbyLevelUpLearnset[] = { }; static const struct LevelUpMove sDiggersbyLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), - //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), + LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_AGILITY), @@ -13493,7 +13493,7 @@ static const struct LevelUpMove sDiggersbyLevelUpLearnset[] = { LEVEL_UP_MOVE(48, MOVE_SUPER_FANG), LEVEL_UP_MOVE(54, MOVE_FACADE), LEVEL_UP_MOVE(57, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE(60, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(60, MOVE_HAMMER_ARM), LEVEL_UP_END }; @@ -13504,19 +13504,19 @@ static const struct LevelUpMove sFletchlingLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_PECK), LEVEL_UP_MOVE(13, MOVE_AGILITY), LEVEL_UP_MOVE(16, MOVE_FLAIL), - //LEVEL_UP_MOVE(21, MOVE_ROOST), + LEVEL_UP_MOVE(21, MOVE_ROOST), LEVEL_UP_MOVE(25, MOVE_RAZOR_WIND), - //LEVEL_UP_MOVE(29, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE(34, MOVE_FLAME_CHARGE), - //LEVEL_UP_MOVE(39, MOVE_ACROBATICS), - //LEVEL_UP_MOVE(41, MOVE_ME_FIRST), - //LEVEL_UP_MOVE(45, MOVE_TAILWIND), + LEVEL_UP_MOVE(29, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(34, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(39, MOVE_ACROBATICS), + LEVEL_UP_MOVE(41, MOVE_ME_FIRST), + LEVEL_UP_MOVE(45, MOVE_TAILWIND), LEVEL_UP_MOVE(48, MOVE_STEEL_WING), LEVEL_UP_END }; static const struct LevelUpMove sFletchinderLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_EMBER), + //LEVEL_UP_MOVE( 0, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -13525,21 +13525,21 @@ static const struct LevelUpMove sFletchinderLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_PECK), LEVEL_UP_MOVE(13, MOVE_AGILITY), LEVEL_UP_MOVE(16, MOVE_FLAIL), - //LEVEL_UP_MOVE(25, MOVE_ROOST), + LEVEL_UP_MOVE(25, MOVE_ROOST), LEVEL_UP_MOVE(27, MOVE_RAZOR_WIND), - //LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE(38, MOVE_FLAME_CHARGE), - //LEVEL_UP_MOVE(42, MOVE_ACROBATICS), - //LEVEL_UP_MOVE(46, MOVE_ME_FIRST), - //LEVEL_UP_MOVE(51, MOVE_TAILWIND), + LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(38, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(42, MOVE_ACROBATICS), + LEVEL_UP_MOVE(46, MOVE_ME_FIRST), + LEVEL_UP_MOVE(51, MOVE_TAILWIND), LEVEL_UP_MOVE(55, MOVE_STEEL_WING), LEVEL_UP_END }; static const struct LevelUpMove sTalonflameLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_EMBER), - //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -13548,15 +13548,15 @@ static const struct LevelUpMove sTalonflameLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_PECK), LEVEL_UP_MOVE(13, MOVE_AGILITY), LEVEL_UP_MOVE(16, MOVE_FLAIL), - //LEVEL_UP_MOVE(25, MOVE_ROOST), + LEVEL_UP_MOVE(25, MOVE_ROOST), LEVEL_UP_MOVE(27, MOVE_RAZOR_WIND), - //LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE(39, MOVE_FLAME_CHARGE), - //LEVEL_UP_MOVE(44, MOVE_ACROBATICS), - //LEVEL_UP_MOVE(49, MOVE_ME_FIRST), - //LEVEL_UP_MOVE(55, MOVE_TAILWIND), + LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(39, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(44, MOVE_ACROBATICS), + LEVEL_UP_MOVE(49, MOVE_ME_FIRST), + LEVEL_UP_MOVE(55, MOVE_TAILWIND), LEVEL_UP_MOVE(60, MOVE_STEEL_WING), - //LEVEL_UP_MOVE(64, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(64, MOVE_BRAVE_BIRD), LEVEL_UP_END }; @@ -13564,35 +13564,35 @@ static const struct LevelUpMove sScatterbugLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), LEVEL_UP_MOVE( 6, MOVE_STUN_SPORE), - //LEVEL_UP_MOVE(15, MOVE_BUG_BITE), + LEVEL_UP_MOVE(15, MOVE_BUG_BITE), LEVEL_UP_END }; static const struct LevelUpMove sSpewpaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_PROTECT), + //LEVEL_UP_MOVE( 0, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_END }; static const struct LevelUpMove sVivillonLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_GUST), + //LEVEL_UP_MOVE( 0, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_GUST), - //LEVEL_UP_MOVE( 1, MOVE_POWDER), + LEVEL_UP_MOVE( 1, MOVE_POWDER), LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), - //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE(12, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(17, MOVE_PSYBEAM), LEVEL_UP_MOVE(21, MOVE_SUPERSONIC), - //LEVEL_UP_MOVE(25, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(25, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(31, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(41, MOVE_SAFEGUARD), - //LEVEL_UP_MOVE(45, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE(50, MOVE_HURRICANE), - //LEVEL_UP_MOVE(55, MOVE_POWDER), + LEVEL_UP_MOVE(45, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(50, MOVE_HURRICANE), + LEVEL_UP_MOVE(55, MOVE_POWDER), LEVEL_UP_END }; @@ -13600,17 +13600,17 @@ static const struct LevelUpMove sLitleoLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_EMBER), - //LEVEL_UP_MOVE( 8, MOVE_WORK_UP), + LEVEL_UP_MOVE( 8, MOVE_WORK_UP), LEVEL_UP_MOVE(11, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(15, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(15, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(23, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(23, MOVE_FIRE_FANG), LEVEL_UP_MOVE(28, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(39, MOVE_CRUNCH), LEVEL_UP_MOVE(43, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(46, MOVE_INCINERATE), + LEVEL_UP_MOVE(46, MOVE_INCINERATE), LEVEL_UP_MOVE(50, MOVE_OVERHEAT), LEVEL_UP_END }; @@ -13620,19 +13620,19 @@ static const struct LevelUpMove sPyroarLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), - //LEVEL_UP_MOVE( 1, MOVE_WORK_UP), + LEVEL_UP_MOVE( 1, MOVE_WORK_UP), LEVEL_UP_MOVE( 5, MOVE_EMBER), - //LEVEL_UP_MOVE( 8, MOVE_WORK_UP), + LEVEL_UP_MOVE( 8, MOVE_WORK_UP), LEVEL_UP_MOVE(11, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(15, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(15, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(23, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(23, MOVE_FIRE_FANG), LEVEL_UP_MOVE(28, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE(38, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(42, MOVE_CRUNCH), LEVEL_UP_MOVE(48, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(51, MOVE_INCINERATE), + LEVEL_UP_MOVE(51, MOVE_INCINERATE), LEVEL_UP_MOVE(57, MOVE_OVERHEAT), LEVEL_UP_END }; @@ -13640,16 +13640,16 @@ static const struct LevelUpMove sPyroarLevelUpLearnset[] = { static const struct LevelUpMove sFlabebeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), - //LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND), - //LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(20, MOVE_WISH), LEVEL_UP_MOVE(22, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE(24, MOVE_GRASSY_TERRAIN), - //LEVEL_UP_MOVE(28, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(24, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(28, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE(33, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(37, MOVE_MISTY_TERRAIN), - //LEVEL_UP_MOVE(41, MOVE_MOONBLAST), + LEVEL_UP_MOVE(37, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(41, MOVE_MOONBLAST), LEVEL_UP_MOVE(45, MOVE_PETAL_DANCE), LEVEL_UP_MOVE(48, MOVE_SOLAR_BEAM), LEVEL_UP_END @@ -13658,33 +13658,33 @@ static const struct LevelUpMove sFlabebeLevelUpLearnset[] = { static const struct LevelUpMove sFloetteLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), - //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), - //LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND), - //LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(20, MOVE_WISH), LEVEL_UP_MOVE(25, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE(27, MOVE_GRASSY_TERRAIN), - //LEVEL_UP_MOVE(33, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(27, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(33, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE(38, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(43, MOVE_MISTY_TERRAIN), - //LEVEL_UP_MOVE(46, MOVE_MOONBLAST), + LEVEL_UP_MOVE(43, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(46, MOVE_MOONBLAST), LEVEL_UP_MOVE(51, MOVE_PETAL_DANCE), LEVEL_UP_MOVE(58, MOVE_SOLAR_BEAM), LEVEL_UP_END }; static const struct LevelUpMove sFlorgesLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), - //LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE( 1, MOVE_WISH), LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD), - //LEVEL_UP_MOVE( 1, MOVE_GRASS_KNOT), - //LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD), - //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), + LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD), + LEVEL_UP_MOVE( 1, MOVE_GRASS_KNOT), + LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE), LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY), LEVEL_UP_END @@ -13697,21 +13697,21 @@ static const struct LevelUpMove sSkiddoLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_TAIL_WHIP), LEVEL_UP_MOVE(12, MOVE_LEECH_SEED), LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(16, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(16, MOVE_WORRY_SEED), LEVEL_UP_MOVE(20, MOVE_SYNTHESIS), LEVEL_UP_MOVE(22, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(26, MOVE_BULLDOZE), - //LEVEL_UP_MOVE(30, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(26, MOVE_BULLDOZE), + LEVEL_UP_MOVE(30, MOVE_SEED_BOMB), LEVEL_UP_MOVE(34, MOVE_BULK_UP), LEVEL_UP_MOVE(38, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(42, MOVE_HORN_LEECH), + LEVEL_UP_MOVE(42, MOVE_HORN_LEECH), LEVEL_UP_MOVE(45, MOVE_LEAF_BLADE), LEVEL_UP_MOVE(50, MOVE_MILK_DRINK), LEVEL_UP_END }; static const struct LevelUpMove sGogoatLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_AERIAL_ACE), + //LEVEL_UP_MOVE( 0, MOVE_AERIAL_ACE), LEVEL_UP_MOVE( 1, MOVE_AERIAL_ACE), LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -13722,14 +13722,14 @@ static const struct LevelUpMove sGogoatLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_TAIL_WHIP), LEVEL_UP_MOVE(12, MOVE_LEECH_SEED), LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(16, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(16, MOVE_WORRY_SEED), LEVEL_UP_MOVE(20, MOVE_SYNTHESIS), LEVEL_UP_MOVE(22, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(26, MOVE_BULLDOZE), - //LEVEL_UP_MOVE(30, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(26, MOVE_BULLDOZE), + LEVEL_UP_MOVE(30, MOVE_SEED_BOMB), LEVEL_UP_MOVE(34, MOVE_BULK_UP), LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(47, MOVE_HORN_LEECH), + LEVEL_UP_MOVE(47, MOVE_HORN_LEECH), LEVEL_UP_MOVE(55, MOVE_LEAF_BLADE), LEVEL_UP_MOVE(58, MOVE_MILK_DRINK), LEVEL_UP_END @@ -13739,45 +13739,45 @@ static const struct LevelUpMove sPanchamLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 7, MOVE_ARM_THRUST), - //LEVEL_UP_MOVE(10, MOVE_WORK_UP), + LEVEL_UP_MOVE(10, MOVE_WORK_UP), LEVEL_UP_MOVE(12, MOVE_KARATE_CHOP), LEVEL_UP_MOVE(15, MOVE_COMET_PUNCH), LEVEL_UP_MOVE(20, MOVE_SLASH), - //LEVEL_UP_MOVE(25, MOVE_CIRCLE_THROW), + LEVEL_UP_MOVE(25, MOVE_CIRCLE_THROW), LEVEL_UP_MOVE(27, MOVE_VITAL_THROW), LEVEL_UP_MOVE(33, MOVE_BODY_SLAM), LEVEL_UP_MOVE(39, MOVE_CRUNCH), - //LEVEL_UP_MOVE(42, MOVE_ENTRAINMENT), - //LEVEL_UP_MOVE(45, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE(42, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(45, MOVE_PARTING_SHOT), LEVEL_UP_MOVE(48, MOVE_SKY_UPPERCUT), LEVEL_UP_END }; static const struct LevelUpMove sPangoroLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_BULLET_PUNCH), - //LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH), - //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE( 1, MOVE_LOW_SWEEP), - //LEVEL_UP_MOVE( 1, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE( 1, MOVE_ENTRAINMENT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST), - //LEVEL_UP_MOVE( 1, MOVE_WORK_UP), + LEVEL_UP_MOVE( 1, MOVE_WORK_UP), LEVEL_UP_MOVE( 7, MOVE_ARM_THRUST), - //LEVEL_UP_MOVE(10, MOVE_WORK_UP), + LEVEL_UP_MOVE(10, MOVE_WORK_UP), LEVEL_UP_MOVE(12, MOVE_KARATE_CHOP), LEVEL_UP_MOVE(15, MOVE_COMET_PUNCH), LEVEL_UP_MOVE(20, MOVE_SLASH), - //LEVEL_UP_MOVE(25, MOVE_CIRCLE_THROW), + LEVEL_UP_MOVE(25, MOVE_CIRCLE_THROW), LEVEL_UP_MOVE(27, MOVE_VITAL_THROW), LEVEL_UP_MOVE(35, MOVE_BODY_SLAM), LEVEL_UP_MOVE(42, MOVE_CRUNCH), - //LEVEL_UP_MOVE(45, MOVE_ENTRAINMENT), - //LEVEL_UP_MOVE(48, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE(45, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(48, MOVE_PARTING_SHOT), LEVEL_UP_MOVE(52, MOVE_SKY_UPPERCUT), - //LEVEL_UP_MOVE(57, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE(57, MOVE_LOW_SWEEP), LEVEL_UP_MOVE(65, MOVE_TAUNT), - //LEVEL_UP_MOVE(70, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(70, MOVE_HAMMER_ARM), LEVEL_UP_END }; @@ -13785,16 +13785,16 @@ static const struct LevelUpMove sFurfrouLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(12, MOVE_HEADBUTT), LEVEL_UP_MOVE(15, MOVE_TAIL_WHIP), LEVEL_UP_MOVE(22, MOVE_BITE), LEVEL_UP_MOVE(27, MOVE_ODOR_SLEUTH), - //LEVEL_UP_MOVE(33, MOVE_RETALIATE), + LEVEL_UP_MOVE(33, MOVE_RETALIATE), LEVEL_UP_MOVE(35, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(38, MOVE_CHARM), - //LEVEL_UP_MOVE(42, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(48, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(42, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(48, MOVE_COTTON_GUARD), LEVEL_UP_END }; @@ -13806,13 +13806,13 @@ static const struct LevelUpMove sEspurrLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(17, MOVE_PSYBEAM), LEVEL_UP_MOVE(19, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE), - //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), LEVEL_UP_END }; static const struct LevelUpMove sMeowsticLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), @@ -13824,17 +13824,17 @@ static const struct LevelUpMove sMeowsticLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(17, MOVE_PSYBEAM), LEVEL_UP_MOVE(19, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE), - //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), LEVEL_UP_MOVE(28, MOVE_CHARM), - //LEVEL_UP_MOVE(31, MOVE_MIRACLE_EYE), + LEVEL_UP_MOVE(31, MOVE_MIRACLE_EYE), LEVEL_UP_MOVE(35, MOVE_REFLECT), LEVEL_UP_MOVE(40, MOVE_PSYCHIC), LEVEL_UP_MOVE(43, MOVE_ROLE_PLAY), LEVEL_UP_MOVE(45, MOVE_IMPRISON), - //LEVEL_UP_MOVE(48, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(50, MOVE_MISTY_TERRAIN), - //LEVEL_UP_MOVE(53, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(48, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(50, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(53, MOVE_QUICK_GUARD), LEVEL_UP_END }; @@ -13844,16 +13844,16 @@ static const struct LevelUpMove sHonedgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 8, MOVE_METAL_SOUND), LEVEL_UP_MOVE(13, MOVE_PURSUIT), - //LEVEL_UP_MOVE(18, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(20, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(18, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(20, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(22, MOVE_AERIAL_ACE), - //LEVEL_UP_MOVE(26, MOVE_RETALIATE), + LEVEL_UP_MOVE(26, MOVE_RETALIATE), LEVEL_UP_MOVE(29, MOVE_SLASH), LEVEL_UP_MOVE(32, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(35, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(39, MOVE_POWER_TRICK), - //LEVEL_UP_MOVE(42, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(47, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE(35, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(39, MOVE_POWER_TRICK), + LEVEL_UP_MOVE(42, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(47, MOVE_SACRED_SWORD), LEVEL_UP_END }; @@ -13864,78 +13864,78 @@ static const struct LevelUpMove sDoubladeLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 8, MOVE_METAL_SOUND), LEVEL_UP_MOVE(13, MOVE_PURSUIT), - //LEVEL_UP_MOVE(18, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(20, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(18, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(20, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(22, MOVE_AERIAL_ACE), - //LEVEL_UP_MOVE(26, MOVE_RETALIATE), + LEVEL_UP_MOVE(26, MOVE_RETALIATE), LEVEL_UP_MOVE(29, MOVE_SLASH), LEVEL_UP_MOVE(32, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(36, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(41, MOVE_POWER_TRICK), - //LEVEL_UP_MOVE(45, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(51, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE(36, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(41, MOVE_POWER_TRICK), + LEVEL_UP_MOVE(45, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(51, MOVE_SACRED_SWORD), LEVEL_UP_END }; static const struct LevelUpMove sAegislashLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_PURSUIT), - //LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE( 1, MOVE_SLASH), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_POWER_TRICK), - //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_POWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), + LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH), LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE( 1, MOVE_AERIAL_ACE), - //LEVEL_UP_MOVE( 1, MOVE_KINGS_SHIELD), - //LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE( 1, MOVE_KINGS_SHIELD), + LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD), LEVEL_UP_END }; static const struct LevelUpMove sSpritzeeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), LEVEL_UP_MOVE( 6, MOVE_SWEET_KISS), LEVEL_UP_MOVE( 8, MOVE_ODOR_SLEUTH), - //LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE(17, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(21, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(21, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(25, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(29, MOVE_ATTRACT), - //LEVEL_UP_MOVE(31, MOVE_MOONBLAST), + LEVEL_UP_MOVE(31, MOVE_MOONBLAST), LEVEL_UP_MOVE(35, MOVE_CHARM), LEVEL_UP_MOVE(38, MOVE_FLAIL), - //LEVEL_UP_MOVE(42, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(42, MOVE_MISTY_TERRAIN), LEVEL_UP_MOVE(44, MOVE_SKILL_SWAP), LEVEL_UP_MOVE(48, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(50, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(50, MOVE_DISARMING_VOICE), LEVEL_UP_END }; static const struct LevelUpMove sAromatisseLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), - //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), + LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS), LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE( 6, MOVE_SWEET_KISS), LEVEL_UP_MOVE( 8, MOVE_ODOR_SLEUTH), - //LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE(17, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(21, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(21, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(25, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(29, MOVE_ATTRACT), - //LEVEL_UP_MOVE(31, MOVE_MOONBLAST), + LEVEL_UP_MOVE(31, MOVE_MOONBLAST), LEVEL_UP_MOVE(35, MOVE_CHARM), LEVEL_UP_MOVE(38, MOVE_FLAIL), - //LEVEL_UP_MOVE(42, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(42, MOVE_MISTY_TERRAIN), LEVEL_UP_MOVE(44, MOVE_SKILL_SWAP), LEVEL_UP_MOVE(48, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(53, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(53, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(57, MOVE_REFLECT), LEVEL_UP_MOVE(64, MOVE_PSYCH_UP), LEVEL_UP_END @@ -13944,18 +13944,18 @@ static const struct LevelUpMove sAromatisseLevelUpLearnset[] = { static const struct LevelUpMove sSwirlixLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND), - //LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE), LEVEL_UP_MOVE(10, MOVE_FAKE_TEARS), - //LEVEL_UP_MOVE(13, MOVE_ROUND), + LEVEL_UP_MOVE(13, MOVE_ROUND), LEVEL_UP_MOVE(17, MOVE_COTTON_SPORE), LEVEL_UP_MOVE(21, MOVE_ENDEAVOR), LEVEL_UP_MOVE(26, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(31, MOVE_DRAINING_KISS), - //LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL), - //LEVEL_UP_MOVE(41, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(31, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(41, MOVE_COTTON_GUARD), LEVEL_UP_MOVE(45, MOVE_WISH), - //LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH), LEVEL_UP_MOVE(58, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(67, MOVE_SAFEGUARD), LEVEL_UP_END @@ -13964,20 +13964,20 @@ static const struct LevelUpMove sSwirlixLevelUpLearnset[] = { static const struct LevelUpMove sSlurpuffLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), - //LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND), - //LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE), LEVEL_UP_MOVE(10, MOVE_FAKE_TEARS), - //LEVEL_UP_MOVE(13, MOVE_ROUND), + LEVEL_UP_MOVE(13, MOVE_ROUND), LEVEL_UP_MOVE(17, MOVE_COTTON_SPORE), LEVEL_UP_MOVE(21, MOVE_ENDEAVOR), LEVEL_UP_MOVE(26, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(31, MOVE_DRAINING_KISS), - //LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL), - //LEVEL_UP_MOVE(41, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(31, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(41, MOVE_COTTON_GUARD), LEVEL_UP_MOVE(45, MOVE_WISH), - //LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH), LEVEL_UP_MOVE(58, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(67, MOVE_SAFEGUARD), LEVEL_UP_END @@ -13988,19 +13988,19 @@ static const struct LevelUpMove sInkayLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), LEVEL_UP_MOVE( 4, MOVE_REFLECT), - //LEVEL_UP_MOVE( 8, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE( 8, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(12, MOVE_SWAGGER), LEVEL_UP_MOVE(13, MOVE_PSYWAVE), - //LEVEL_UP_MOVE(15, MOVE_TOPSY_TURVY), + LEVEL_UP_MOVE(15, MOVE_TOPSY_TURVY), LEVEL_UP_MOVE(18, MOVE_HYPNOSIS), LEVEL_UP_MOVE(21, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(23, MOVE_SWITCHEROO), - //LEVEL_UP_MOVE(27, MOVE_PAYBACK), + LEVEL_UP_MOVE(23, MOVE_SWITCHEROO), + LEVEL_UP_MOVE(27, MOVE_PAYBACK), LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(35, MOVE_PLUCK), - //LEVEL_UP_MOVE(39, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(35, MOVE_PLUCK), + LEVEL_UP_MOVE(39, MOVE_PSYCHO_CUT), LEVEL_UP_MOVE(43, MOVE_SLASH), - //LEVEL_UP_MOVE(46, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(46, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(48, MOVE_SUPERPOWER), LEVEL_UP_END }; @@ -14012,25 +14012,25 @@ static const struct LevelUpMove sMalamarLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), LEVEL_UP_MOVE( 1, MOVE_REFLECT), LEVEL_UP_MOVE( 4, MOVE_REFLECT), - //LEVEL_UP_MOVE( 8, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE( 8, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(12, MOVE_SWAGGER), LEVEL_UP_MOVE(13, MOVE_PSYWAVE), - //LEVEL_UP_MOVE(15, MOVE_TOPSY_TURVY), + LEVEL_UP_MOVE(15, MOVE_TOPSY_TURVY), LEVEL_UP_MOVE(18, MOVE_HYPNOSIS), LEVEL_UP_MOVE(21, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(23, MOVE_SWITCHEROO), - //LEVEL_UP_MOVE(27, MOVE_PAYBACK), + LEVEL_UP_MOVE(23, MOVE_SWITCHEROO), + LEVEL_UP_MOVE(27, MOVE_PAYBACK), LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(35, MOVE_PLUCK), - //LEVEL_UP_MOVE(39, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(35, MOVE_PLUCK), + LEVEL_UP_MOVE(39, MOVE_PSYCHO_CUT), LEVEL_UP_MOVE(43, MOVE_SLASH), - //LEVEL_UP_MOVE(46, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(46, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(48, MOVE_SUPERPOWER), LEVEL_UP_END }; static const struct LevelUpMove sBinacleLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 4, MOVE_WATER_GUN), @@ -14039,20 +14039,20 @@ static const struct LevelUpMove sBinacleLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_SLASH), LEVEL_UP_MOVE(18, MOVE_MUD_SLAP), LEVEL_UP_MOVE(20, MOVE_CLAMP), - //LEVEL_UP_MOVE(24, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(24, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(28, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(32, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(32, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(37, MOVE_FURY_CUTTER), - //LEVEL_UP_MOVE(41, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(45, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE(41, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(45, MOVE_RAZOR_SHELL), LEVEL_UP_MOVE(49, MOVE_CROSS_CHOP), LEVEL_UP_END }; static const struct LevelUpMove sBarbaracleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SKULL_BASH), - //LEVEL_UP_MOVE( 1, MOVE_STONE_EDGE), - //LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE( 1, MOVE_STONE_EDGE), + LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -14062,14 +14062,14 @@ static const struct LevelUpMove sBarbaracleLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_SLASH), LEVEL_UP_MOVE(18, MOVE_MUD_SLAP), LEVEL_UP_MOVE(20, MOVE_CLAMP), - //LEVEL_UP_MOVE(24, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(24, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(28, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(32, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(32, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(37, MOVE_FURY_CUTTER), - //LEVEL_UP_MOVE(44, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(48, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE(44, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(48, MOVE_RAZOR_SHELL), LEVEL_UP_MOVE(55, MOVE_CROSS_CHOP), - //LEVEL_UP_MOVE(60, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(60, MOVE_STONE_EDGE), LEVEL_UP_MOVE(65, MOVE_SKULL_BASH), LEVEL_UP_END }; @@ -14087,17 +14087,17 @@ static const struct LevelUpMove sSkrelpLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_WATER_PULSE), LEVEL_UP_MOVE(28, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(32, MOVE_TOXIC), - //LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(38, MOVE_SLUDGE_BOMB), LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(49, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(49, MOVE_DRAGON_PULSE), LEVEL_UP_END }; static const struct LevelUpMove sDragalgeLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_TWISTER), + //LEVEL_UP_MOVE( 0, MOVE_TWISTER), LEVEL_UP_MOVE( 1, MOVE_TWISTER), - //LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -14111,11 +14111,11 @@ static const struct LevelUpMove sDragalgeLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_WATER_PULSE), LEVEL_UP_MOVE(28, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(32, MOVE_TOXIC), - //LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(38, MOVE_SLUDGE_BOMB), LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(53, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(59, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(53, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(59, MOVE_DRAGON_TAIL), LEVEL_UP_END }; @@ -14130,18 +14130,18 @@ static const struct LevelUpMove sClauncherLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(30, MOVE_CRABHAMMER), LEVEL_UP_MOVE(34, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(39, MOVE_SMACK_DOWN), - //LEVEL_UP_MOVE(43, MOVE_AQUA_JET), + LEVEL_UP_MOVE(39, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(43, MOVE_AQUA_JET), LEVEL_UP_MOVE(48, MOVE_MUDDY_WATER), LEVEL_UP_END }; static const struct LevelUpMove sClawitzerLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_AURA_SPHERE), - //LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE), - //LEVEL_UP_MOVE( 1, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE( 1, MOVE_DARK_PULSE), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), LEVEL_UP_MOVE( 1, MOVE_SPLASH), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), @@ -14154,8 +14154,8 @@ static const struct LevelUpMove sClawitzerLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(30, MOVE_CRABHAMMER), LEVEL_UP_MOVE(34, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(42, MOVE_SMACK_DOWN), - //LEVEL_UP_MOVE(49, MOVE_AQUA_JET), + LEVEL_UP_MOVE(42, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(49, MOVE_AQUA_JET), LEVEL_UP_MOVE(57, MOVE_MUDDY_WATER), LEVEL_UP_END }; @@ -14168,23 +14168,23 @@ static const struct LevelUpMove sHelioptileLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_MUD_SLAP), LEVEL_UP_MOVE(17, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(22, MOVE_RAZOR_WIND), - //LEVEL_UP_MOVE(25, MOVE_PARABOLIC_CHARGE), + LEVEL_UP_MOVE(25, MOVE_PARABOLIC_CHARGE), LEVEL_UP_MOVE(31, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE(35, MOVE_BULLDOZE), - //LEVEL_UP_MOVE(40, MOVE_VOLT_SWITCH), - //LEVEL_UP_MOVE(45, MOVE_ELECTRIFY), + LEVEL_UP_MOVE(35, MOVE_BULLDOZE), + LEVEL_UP_MOVE(40, MOVE_VOLT_SWITCH), + LEVEL_UP_MOVE(45, MOVE_ELECTRIFY), LEVEL_UP_MOVE(49, MOVE_THUNDERBOLT), LEVEL_UP_END }; static const struct LevelUpMove sHelioliskLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), - //LEVEL_UP_MOVE( 1, MOVE_ELECTRIFY), + LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIFY), LEVEL_UP_MOVE( 1, MOVE_RAZOR_WIND), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_THUNDER), LEVEL_UP_MOVE( 1, MOVE_CHARGE), - //LEVEL_UP_MOVE( 1, MOVE_PARABOLIC_CHARGE), + LEVEL_UP_MOVE( 1, MOVE_PARABOLIC_CHARGE), LEVEL_UP_END }; @@ -14194,11 +14194,11 @@ static const struct LevelUpMove sTyruntLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_ROAR), LEVEL_UP_MOVE(10, MOVE_STOMP), LEVEL_UP_MOVE(12, MOVE_BIDE), - //LEVEL_UP_MOVE(15, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(15, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(17, MOVE_BITE), LEVEL_UP_MOVE(20, MOVE_CHARM), LEVEL_UP_MOVE(26, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE(34, MOVE_CRUNCH), LEVEL_UP_MOVE(37, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE(40, MOVE_THRASH), @@ -14208,9 +14208,9 @@ static const struct LevelUpMove sTyruntLevelUpLearnset[] = { }; static const struct LevelUpMove sTyrantrumLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ROCK_SLIDE), + //LEVEL_UP_MOVE( 0, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE( 1, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_ROAR), @@ -14218,18 +14218,18 @@ static const struct LevelUpMove sTyrantrumLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_ROAR), LEVEL_UP_MOVE(10, MOVE_STOMP), LEVEL_UP_MOVE(12, MOVE_BIDE), - //LEVEL_UP_MOVE(15, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(15, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(17, MOVE_BITE), LEVEL_UP_MOVE(20, MOVE_CHARM), LEVEL_UP_MOVE(26, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE(34, MOVE_CRUNCH), LEVEL_UP_MOVE(37, MOVE_DRAGON_CLAW), LEVEL_UP_MOVE(42, MOVE_THRASH), LEVEL_UP_MOVE(47, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(53, MOVE_HORN_DRILL), - //LEVEL_UP_MOVE(58, MOVE_HEAD_SMASH), - //LEVEL_UP_MOVE(68, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(58, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(68, MOVE_GIGA_IMPACT), LEVEL_UP_END }; @@ -14243,8 +14243,8 @@ static const struct LevelUpMove sAmauraLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_MIST), LEVEL_UP_MOVE(20, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(26, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(30, MOVE_ROUND), - //LEVEL_UP_MOVE(34, MOVE_AVALANCHE), + LEVEL_UP_MOVE(30, MOVE_ROUND), + LEVEL_UP_MOVE(34, MOVE_AVALANCHE), LEVEL_UP_MOVE(38, MOVE_HAIL), LEVEL_UP_MOVE(41, MOVE_NATURE_POWER), LEVEL_UP_MOVE(44, MOVE_ENCORE), @@ -14257,7 +14257,7 @@ static const struct LevelUpMove sAmauraLevelUpLearnset[] = { static const struct LevelUpMove sAurorusLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_FREEZE_DRY), - //LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), @@ -14269,8 +14269,8 @@ static const struct LevelUpMove sAurorusLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_MIST), LEVEL_UP_MOVE(20, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(26, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(30, MOVE_ROUND), - //LEVEL_UP_MOVE(34, MOVE_AVALANCHE), + LEVEL_UP_MOVE(30, MOVE_ROUND), + LEVEL_UP_MOVE(34, MOVE_AVALANCHE), LEVEL_UP_MOVE(38, MOVE_HAIL), LEVEL_UP_MOVE(43, MOVE_NATURE_POWER), LEVEL_UP_MOVE(46, MOVE_ENCORE), @@ -14283,21 +14283,21 @@ static const struct LevelUpMove sAurorusLevelUpLearnset[] = { static const struct LevelUpMove sSylveonLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_FAIRY_WIND), - //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), - //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(17, MOVE_SWIFT), - //LEVEL_UP_MOVE(20, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(20, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(25, MOVE_SKILL_SWAP), - //LEVEL_UP_MOVE(29, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(29, MOVE_MISTY_TERRAIN), LEVEL_UP_MOVE(33, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(37, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(37, MOVE_MOONBLAST), + LEVEL_UP_MOVE(41, MOVE_LAST_RESORT), LEVEL_UP_MOVE(45, MOVE_PSYCH_UP), LEVEL_UP_END }; @@ -14305,20 +14305,20 @@ static const struct LevelUpMove sSylveonLevelUpLearnset[] = { static const struct LevelUpMove sHawluchaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DETECT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 4, MOVE_KARATE_CHOP), LEVEL_UP_MOVE( 8, MOVE_WING_ATTACK), - //LEVEL_UP_MOVE(12, MOVE_ROOST), + LEVEL_UP_MOVE(12, MOVE_ROOST), LEVEL_UP_MOVE(16, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(20, MOVE_ENCORE), - //LEVEL_UP_MOVE(24, MOVE_FLING), - //LEVEL_UP_MOVE(28, MOVE_FLYING_PRESS), + LEVEL_UP_MOVE(24, MOVE_FLING), + LEVEL_UP_MOVE(28, MOVE_FLYING_PRESS), LEVEL_UP_MOVE(32, MOVE_BOUNCE), LEVEL_UP_MOVE(36, MOVE_ENDEAVOR), LEVEL_UP_MOVE(40, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE(44, MOVE_HIGH_JUMP_KICK), LEVEL_UP_MOVE(48, MOVE_SKY_ATTACK), - //LEVEL_UP_MOVE(55, MOVE_SKY_DROP), + LEVEL_UP_MOVE(55, MOVE_SKY_DROP), LEVEL_UP_MOVE(60, MOVE_SWORDS_DANCE), LEVEL_UP_END }; @@ -14329,17 +14329,17 @@ static const struct LevelUpMove sDedenneLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE(11, MOVE_CHARGE), LEVEL_UP_MOVE(14, MOVE_CHARM), - //LEVEL_UP_MOVE(17, MOVE_PARABOLIC_CHARGE), - //LEVEL_UP_MOVE(20, MOVE_NUZZLE), + LEVEL_UP_MOVE(17, MOVE_PARABOLIC_CHARGE), + LEVEL_UP_MOVE(20, MOVE_NUZZLE), LEVEL_UP_MOVE(23, MOVE_THUNDER_WAVE), - //LEVEL_UP_MOVE(26, MOVE_VOLT_SWITCH), + LEVEL_UP_MOVE(26, MOVE_VOLT_SWITCH), LEVEL_UP_MOVE(30, MOVE_REST), LEVEL_UP_MOVE(31, MOVE_SNORE), - //LEVEL_UP_MOVE(34, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE(39, MOVE_ENTRAINMENT), - //LEVEL_UP_MOVE(42, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(34, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(39, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(42, MOVE_PLAY_ROUGH), LEVEL_UP_MOVE(45, MOVE_THUNDER), - //LEVEL_UP_MOVE(50, MOVE_DISCHARGE), + LEVEL_UP_MOVE(50, MOVE_DISCHARGE), LEVEL_UP_END }; @@ -14348,16 +14348,16 @@ static const struct LevelUpMove sCarbinkLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 5, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 8, MOVE_SHARPEN), - //LEVEL_UP_MOVE(12, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(12, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(18, MOVE_REFLECT), - //LEVEL_UP_MOVE(21, MOVE_STEALTH_ROCK), - //LEVEL_UP_MOVE(27, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(21, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(27, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(31, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(35, MOVE_FLAIL), LEVEL_UP_MOVE(40, MOVE_SKILL_SWAP), - //LEVEL_UP_MOVE(46, MOVE_POWER_GEM), - //LEVEL_UP_MOVE(49, MOVE_STONE_EDGE), - //LEVEL_UP_MOVE(50, MOVE_MOONBLAST), + LEVEL_UP_MOVE(46, MOVE_POWER_GEM), + LEVEL_UP_MOVE(49, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(50, MOVE_MOONBLAST), LEVEL_UP_MOVE(60, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(70, MOVE_SAFEGUARD), LEVEL_UP_END @@ -14374,7 +14374,7 @@ static const struct LevelUpMove sGoomyLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_FLAIL), LEVEL_UP_MOVE(32, MOVE_BODY_SLAM), LEVEL_UP_MOVE(38, MOVE_MUDDY_WATER), - //LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE), LEVEL_UP_END }; @@ -14390,15 +14390,15 @@ static const struct LevelUpMove sSliggooLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_FLAIL), LEVEL_UP_MOVE(32, MOVE_BODY_SLAM), LEVEL_UP_MOVE(38, MOVE_MUDDY_WATER), - //LEVEL_UP_MOVE(47, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(47, MOVE_DRAGON_PULSE), LEVEL_UP_END }; static const struct LevelUpMove sGoodraLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_AQUA_TAIL), - //LEVEL_UP_MOVE( 1, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE( 1, MOVE_AQUA_TAIL), LEVEL_UP_MOVE( 1, MOVE_OUTRAGE), - //LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_FEINT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_ABSORB), @@ -14411,29 +14411,29 @@ static const struct LevelUpMove sGoodraLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_FLAIL), LEVEL_UP_MOVE(32, MOVE_BODY_SLAM), LEVEL_UP_MOVE(38, MOVE_MUDDY_WATER), - //LEVEL_UP_MOVE(47, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(50, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(47, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(50, MOVE_POWER_WHIP), LEVEL_UP_MOVE(55, MOVE_OUTRAGE), LEVEL_UP_END }; static const struct LevelUpMove sKlefkiLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_FAIRY_LOCK), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_LOCK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND), LEVEL_UP_MOVE( 8, MOVE_ASTONISH), LEVEL_UP_MOVE(12, MOVE_METAL_SOUND), LEVEL_UP_MOVE(15, MOVE_SPIKES), - //LEVEL_UP_MOVE(18, MOVE_DRAINING_KISS), - //LEVEL_UP_MOVE(23, MOVE_CRAFTY_SHIELD), - //LEVEL_UP_MOVE(27, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(18, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(23, MOVE_CRAFTY_SHIELD), + LEVEL_UP_MOVE(27, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(32, MOVE_TORMENT), - //LEVEL_UP_MOVE(34, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(34, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(36, MOVE_IMPRISON), LEVEL_UP_MOVE(40, MOVE_RECYCLE), - //LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(44, MOVE_MAGIC_ROOM), - //LEVEL_UP_MOVE(50, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(44, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE(50, MOVE_HEAL_BLOCK), LEVEL_UP_END }; @@ -14447,18 +14447,18 @@ static const struct LevelUpMove sPhantumpLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_LEECH_SEED), LEVEL_UP_MOVE(28, MOVE_CURSE), LEVEL_UP_MOVE(31, MOVE_WILL_O_WISP), - //LEVEL_UP_MOVE(35, MOVE_FORESTS_CURSE), + LEVEL_UP_MOVE(35, MOVE_FORESTS_CURSE), LEVEL_UP_MOVE(39, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE), - //LEVEL_UP_MOVE(49, MOVE_WOOD_HAMMER), - //LEVEL_UP_MOVE(54, MOVE_HORN_LEECH), + LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(49, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(54, MOVE_HORN_LEECH), LEVEL_UP_END }; static const struct LevelUpMove sTrevenantLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), - //LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW), - //LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -14470,11 +14470,11 @@ static const struct LevelUpMove sTrevenantLevelUpLearnset[] = { LEVEL_UP_MOVE(23, MOVE_LEECH_SEED), LEVEL_UP_MOVE(28, MOVE_CURSE), LEVEL_UP_MOVE(31, MOVE_WILL_O_WISP), - //LEVEL_UP_MOVE(35, MOVE_FORESTS_CURSE), + LEVEL_UP_MOVE(35, MOVE_FORESTS_CURSE), LEVEL_UP_MOVE(39, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE), - //LEVEL_UP_MOVE(49, MOVE_WOOD_HAMMER), - //LEVEL_UP_MOVE(54, MOVE_HORN_LEECH), + LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(49, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(54, MOVE_HORN_LEECH), LEVEL_UP_END }; @@ -14483,41 +14483,41 @@ static const struct LevelUpMove sPumpkabooLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 4, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE( 6, MOVE_TRICK_OR_TREAT), - //LEVEL_UP_MOVE(11, MOVE_WORRY_SEED), + LEVEL_UP_MOVE( 6, MOVE_TRICK_OR_TREAT), + LEVEL_UP_MOVE(11, MOVE_WORRY_SEED), LEVEL_UP_MOVE(16, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(20, MOVE_LEECH_SEED), - //LEVEL_UP_MOVE(23, MOVE_TRICK_OR_TREAT), + LEVEL_UP_MOVE(23, MOVE_TRICK_OR_TREAT), LEVEL_UP_MOVE(26, MOVE_BULLET_SEED), - //LEVEL_UP_MOVE(30, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(30, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(36, MOVE_SHADOW_BALL), - //LEVEL_UP_MOVE(40, MOVE_TRICK_OR_TREAT), + LEVEL_UP_MOVE(40, MOVE_TRICK_OR_TREAT), LEVEL_UP_MOVE(42, MOVE_PAIN_SPLIT), - //LEVEL_UP_MOVE(48, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(48, MOVE_SEED_BOMB), LEVEL_UP_END }; static const struct LevelUpMove sGourgeistLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), - //LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 4, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE( 6, MOVE_TRICK_OR_TREAT), - //LEVEL_UP_MOVE(11, MOVE_WORRY_SEED), + LEVEL_UP_MOVE( 6, MOVE_TRICK_OR_TREAT), + LEVEL_UP_MOVE(11, MOVE_WORRY_SEED), LEVEL_UP_MOVE(16, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(20, MOVE_LEECH_SEED), - //LEVEL_UP_MOVE(23, MOVE_TRICK_OR_TREAT), + LEVEL_UP_MOVE(23, MOVE_TRICK_OR_TREAT), LEVEL_UP_MOVE(26, MOVE_BULLET_SEED), - //LEVEL_UP_MOVE(30, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(30, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(36, MOVE_SHADOW_BALL), - //LEVEL_UP_MOVE(40, MOVE_TRICK_OR_TREAT), + LEVEL_UP_MOVE(40, MOVE_TRICK_OR_TREAT), LEVEL_UP_MOVE(42, MOVE_PAIN_SPLIT), - //LEVEL_UP_MOVE(48, MOVE_SEED_BOMB), - //LEVEL_UP_MOVE(57, MOVE_PHANTOM_FORCE), - //LEVEL_UP_MOVE(63, MOVE_TRICK_OR_TREAT), + LEVEL_UP_MOVE(48, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(57, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(63, MOVE_TRICK_OR_TREAT), LEVEL_UP_MOVE(70, MOVE_EXPLOSION), LEVEL_UP_END }; @@ -14531,10 +14531,10 @@ static const struct LevelUpMove sBergmiteLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(20, MOVE_SHARPEN), LEVEL_UP_MOVE(22, MOVE_CURSE), - //LEVEL_UP_MOVE(26, MOVE_ICE_FANG), + LEVEL_UP_MOVE(26, MOVE_ICE_FANG), LEVEL_UP_MOVE(30, MOVE_ICE_BALL), LEVEL_UP_MOVE(35, MOVE_RAPID_SPIN), - //LEVEL_UP_MOVE(39, MOVE_AVALANCHE), + LEVEL_UP_MOVE(39, MOVE_AVALANCHE), LEVEL_UP_MOVE(43, MOVE_BLIZZARD), LEVEL_UP_MOVE(47, MOVE_RECOVER), LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), @@ -14542,9 +14542,9 @@ static const struct LevelUpMove sBergmiteLevelUpLearnset[] = { }; static const struct LevelUpMove sAvaluggLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_BODY_SLAM), + //LEVEL_UP_MOVE( 0, MOVE_BODY_SLAM), LEVEL_UP_MOVE( 1, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_SKULL_BASH), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), @@ -14557,10 +14557,10 @@ static const struct LevelUpMove sAvaluggLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(20, MOVE_SHARPEN), LEVEL_UP_MOVE(22, MOVE_CURSE), - //LEVEL_UP_MOVE(26, MOVE_ICE_FANG), + LEVEL_UP_MOVE(26, MOVE_ICE_FANG), LEVEL_UP_MOVE(30, MOVE_ICE_BALL), LEVEL_UP_MOVE(35, MOVE_RAPID_SPIN), - //LEVEL_UP_MOVE(42, MOVE_AVALANCHE), + LEVEL_UP_MOVE(42, MOVE_AVALANCHE), LEVEL_UP_MOVE(46, MOVE_BLIZZARD), LEVEL_UP_MOVE(51, MOVE_RECOVER), LEVEL_UP_MOVE(56, MOVE_DOUBLE_EDGE), @@ -14579,20 +14579,20 @@ static const struct LevelUpMove sNoibatLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_WING_ATTACK), LEVEL_UP_MOVE(18, MOVE_AGILITY), LEVEL_UP_MOVE(23, MOVE_AIR_CUTTER), - //LEVEL_UP_MOVE(27, MOVE_ROOST), + LEVEL_UP_MOVE(27, MOVE_ROOST), LEVEL_UP_MOVE(31, MOVE_RAZOR_WIND), - //LEVEL_UP_MOVE(35, MOVE_TAILWIND), + LEVEL_UP_MOVE(35, MOVE_TAILWIND), LEVEL_UP_MOVE(40, MOVE_WHIRLWIND), LEVEL_UP_MOVE(43, MOVE_SUPER_FANG), - //LEVEL_UP_MOVE(48, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(58, MOVE_HURRICANE), + LEVEL_UP_MOVE(48, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(58, MOVE_HURRICANE), LEVEL_UP_END }; static const struct LevelUpMove sNoivernLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_BOOMBURST), - //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE( 1, MOVE_HURRICANE), + LEVEL_UP_MOVE( 1, MOVE_BOOMBURST), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE( 1, MOVE_HURRICANE), LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), LEVEL_UP_MOVE( 1, MOVE_SCREECH), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -14604,57 +14604,57 @@ static const struct LevelUpMove sNoivernLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_WING_ATTACK), LEVEL_UP_MOVE(18, MOVE_AGILITY), LEVEL_UP_MOVE(23, MOVE_AIR_CUTTER), - //LEVEL_UP_MOVE(27, MOVE_ROOST), + LEVEL_UP_MOVE(27, MOVE_ROOST), LEVEL_UP_MOVE(31, MOVE_RAZOR_WIND), - //LEVEL_UP_MOVE(35, MOVE_TAILWIND), + LEVEL_UP_MOVE(35, MOVE_TAILWIND), LEVEL_UP_MOVE(40, MOVE_WHIRLWIND), LEVEL_UP_MOVE(43, MOVE_SUPER_FANG), - //LEVEL_UP_MOVE(53, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(62, MOVE_HURRICANE), - //LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(75, MOVE_BOOMBURST), + LEVEL_UP_MOVE(53, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(62, MOVE_HURRICANE), + LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(75, MOVE_BOOMBURST), LEVEL_UP_END }; static const struct LevelUpMove sXerneasLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY), LEVEL_UP_MOVE( 1, MOVE_INGRAIN), LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), LEVEL_UP_MOVE( 5, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(10, MOVE_AURORA_BEAM), - //LEVEL_UP_MOVE(18, MOVE_GRAVITY), - //LEVEL_UP_MOVE(26, MOVE_GEOMANCY), - //LEVEL_UP_MOVE(35, MOVE_MOONBLAST), + LEVEL_UP_MOVE(18, MOVE_GRAVITY), + LEVEL_UP_MOVE(26, MOVE_GEOMANCY), + LEVEL_UP_MOVE(35, MOVE_MOONBLAST), LEVEL_UP_MOVE(44, MOVE_MEGAHORN), - //LEVEL_UP_MOVE(51, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(55, MOVE_HORN_LEECH), + LEVEL_UP_MOVE(51, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(55, MOVE_HORN_LEECH), LEVEL_UP_MOVE(59, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(63, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(63, MOVE_MISTY_TERRAIN), LEVEL_UP_MOVE(72, MOVE_NATURE_POWER), - //LEVEL_UP_MOVE(80, MOVE_CLOSE_COMBAT), - //LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(80, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT), LEVEL_UP_MOVE(93, MOVE_OUTRAGE), LEVEL_UP_END }; static const struct LevelUpMove sYveltalLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HURRICANE), + LEVEL_UP_MOVE( 1, MOVE_HURRICANE), LEVEL_UP_MOVE( 1, MOVE_RAZOR_WIND), LEVEL_UP_MOVE( 1, MOVE_TAUNT), - //LEVEL_UP_MOVE( 1, MOVE_ROOST), + LEVEL_UP_MOVE( 1, MOVE_ROOST), LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM), - //LEVEL_UP_MOVE(10, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(18, MOVE_SNARL), - //LEVEL_UP_MOVE(26, MOVE_OBLIVION_WING), + LEVEL_UP_MOVE(10, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(18, MOVE_SNARL), + LEVEL_UP_MOVE(26, MOVE_OBLIVION_WING), LEVEL_UP_MOVE(35, MOVE_DISABLE), - //LEVEL_UP_MOVE(44, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(51, MOVE_FOUL_PLAY), - //LEVEL_UP_MOVE(55, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(44, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(51, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(55, MOVE_PHANTOM_FORCE), LEVEL_UP_MOVE(59, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(63, MOVE_DRAGON_RUSH), - //LEVEL_UP_MOVE(72, MOVE_FOCUS_BLAST), - //LEVEL_UP_MOVE(80, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(63, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(72, MOVE_FOCUS_BLAST), + LEVEL_UP_MOVE(80, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(88, MOVE_HYPER_BEAM), LEVEL_UP_MOVE(93, MOVE_SKY_ATTACK), LEVEL_UP_END @@ -14662,20 +14662,20 @@ static const struct LevelUpMove sYveltalLevelUpLearnset[] = { static const struct LevelUpMove sZygardeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GLARE), - //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 5, MOVE_SAFEGUARD), LEVEL_UP_MOVE(10, MOVE_DIG), LEVEL_UP_MOVE(18, MOVE_BIND), - //LEVEL_UP_MOVE(26, MOVE_LANDS_WRATH), + LEVEL_UP_MOVE(26, MOVE_LANDS_WRATH), LEVEL_UP_MOVE(35, MOVE_SANDSTORM), LEVEL_UP_MOVE(44, MOVE_HAZE), LEVEL_UP_MOVE(51, MOVE_CRUNCH), LEVEL_UP_MOVE(55, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(59, MOVE_CAMOUFLAGE), - //LEVEL_UP_MOVE(63, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(72, MOVE_COIL), + LEVEL_UP_MOVE(63, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(72, MOVE_COIL), LEVEL_UP_MOVE(80, MOVE_OUTRAGE), LEVEL_UP_END }; @@ -14685,134 +14685,134 @@ static const struct LevelUpMove sDiancieLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 5, MOVE_SHARPEN), - //LEVEL_UP_MOVE( 8, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE( 8, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(12, MOVE_REFLECT), - //LEVEL_UP_MOVE(18, MOVE_STEALTH_ROCK), - //LEVEL_UP_MOVE(21, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(18, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(21, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(27, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(31, MOVE_FLAIL), LEVEL_UP_MOVE(35, MOVE_SKILL_SWAP), - //LEVEL_UP_MOVE(40, MOVE_POWER_GEM), - //LEVEL_UP_MOVE(46, MOVE_TRICK_ROOM), - //LEVEL_UP_MOVE(49, MOVE_STONE_EDGE), - //LEVEL_UP_MOVE(50, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(50, MOVE_DIAMOND_STORM), + LEVEL_UP_MOVE(40, MOVE_POWER_GEM), + LEVEL_UP_MOVE(46, MOVE_TRICK_ROOM), + LEVEL_UP_MOVE(49, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(50, MOVE_MOONBLAST), + LEVEL_UP_MOVE(50, MOVE_DIAMOND_STORM), LEVEL_UP_MOVE(60, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(70, MOVE_SAFEGUARD), LEVEL_UP_END }; static const struct LevelUpMove sHoopaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HYPERSPACE_HOLE), + LEVEL_UP_MOVE( 1, MOVE_HYPERSPACE_HOLE), LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 6, MOVE_ASTONISH), LEVEL_UP_MOVE(10, MOVE_MAGIC_COAT), LEVEL_UP_MOVE(15, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(19, MOVE_PSYBEAM), LEVEL_UP_MOVE(25, MOVE_SKILL_SWAP), - //LEVEL_UP_MOVE(29, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(29, MOVE_GUARD_SPLIT), - //LEVEL_UP_MOVE(35, MOVE_PHANTOM_FORCE), - //LEVEL_UP_MOVE(46, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(50, MOVE_WONDER_ROOM), - //LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM), + LEVEL_UP_MOVE(29, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(29, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(35, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(46, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(50, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM), LEVEL_UP_MOVE(55, MOVE_SHADOW_BALL), - //LEVEL_UP_MOVE(68, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(68, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(75, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(85, MOVE_HYPERSPACE_HOLE), + LEVEL_UP_MOVE(85, MOVE_HYPERSPACE_HOLE), LEVEL_UP_END }; static const struct LevelUpMove sVolcanionLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_STEAM_ERUPTION), - //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE( 1, MOVE_STEAM_ERUPTION), + LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), LEVEL_UP_MOVE( 8, MOVE_MIST), LEVEL_UP_MOVE(11, MOVE_HAZE), - //LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(21, MOVE_WATER_PULSE), LEVEL_UP_MOVE(28, MOVE_STOMP), - //LEVEL_UP_MOVE(32, MOVE_SCALD), + LEVEL_UP_MOVE(32, MOVE_SCALD), LEVEL_UP_MOVE(40, MOVE_WEATHER_BALL), LEVEL_UP_MOVE(46, MOVE_BODY_SLAM), LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(58, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(58, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE(65, MOVE_OVERHEAT), LEVEL_UP_MOVE(76, MOVE_EXPLOSION), - //LEVEL_UP_MOVE(85, MOVE_STEAM_ERUPTION), + LEVEL_UP_MOVE(85, MOVE_STEAM_ERUPTION), LEVEL_UP_END }; static const struct LevelUpMove sRowletLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 4, MOVE_GROWL), LEVEL_UP_MOVE( 8, MOVE_PECK), LEVEL_UP_MOVE(11, MOVE_ASTONISH), LEVEL_UP_MOVE(14, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(18, MOVE_FORESIGHT), - //LEVEL_UP_MOVE(22, MOVE_PLUCK), + LEVEL_UP_MOVE(22, MOVE_PLUCK), LEVEL_UP_MOVE(25, MOVE_SYNTHESIS), LEVEL_UP_MOVE(29, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(32, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(32, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(36, MOVE_LEAF_BLADE), LEVEL_UP_MOVE(39, MOVE_FEATHER_DANCE), - //LEVEL_UP_MOVE(43, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(43, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), LEVEL_UP_END }; static const struct LevelUpMove sDartrixLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 4, MOVE_GROWL), LEVEL_UP_MOVE( 8, MOVE_PECK), LEVEL_UP_MOVE(11, MOVE_ASTONISH), LEVEL_UP_MOVE(14, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(19, MOVE_FORESIGHT), - //LEVEL_UP_MOVE(24, MOVE_PLUCK), + LEVEL_UP_MOVE(24, MOVE_PLUCK), LEVEL_UP_MOVE(28, MOVE_SYNTHESIS), LEVEL_UP_MOVE(33, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(37, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(37, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(42, MOVE_LEAF_BLADE), LEVEL_UP_MOVE(46, MOVE_FEATHER_DANCE), - //LEVEL_UP_MOVE(51, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE(55, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(51, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(55, MOVE_NASTY_PLOT), LEVEL_UP_END }; static const struct LevelUpMove sDecidueyeLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SPIRIT_SHACKLE), - //LEVEL_UP_MOVE( 1, MOVE_SPIRIT_SHACKLE), - //LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), - //LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), - //LEVEL_UP_MOVE( 1, MOVE_U_TURN), - //LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_SPIRIT_SHACKLE), + LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), + LEVEL_UP_MOVE( 1, MOVE_U_TURN), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 4, MOVE_GROWL), LEVEL_UP_MOVE( 8, MOVE_PECK), LEVEL_UP_MOVE(11, MOVE_ASTONISH), LEVEL_UP_MOVE(14, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND), + LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND), LEVEL_UP_MOVE(19, MOVE_FORESIGHT), - //LEVEL_UP_MOVE(24, MOVE_PLUCK), + LEVEL_UP_MOVE(24, MOVE_PLUCK), LEVEL_UP_MOVE(28, MOVE_SYNTHESIS), LEVEL_UP_MOVE(33, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(38, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(38, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(44, MOVE_LEAF_BLADE), LEVEL_UP_MOVE(49, MOVE_FEATHER_DANCE), - //LEVEL_UP_MOVE(55, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE(60, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(55, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(60, MOVE_NASTY_PLOT), LEVEL_UP_END }; @@ -14822,7 +14822,7 @@ static const struct LevelUpMove sLittenLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_GROWL), LEVEL_UP_MOVE( 8, MOVE_LICK), LEVEL_UP_MOVE(11, MOVE_LEER), - //LEVEL_UP_MOVE(14, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(14, MOVE_FIRE_FANG), LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE(18, MOVE_ROAR), LEVEL_UP_MOVE(22, MOVE_BITE), @@ -14831,7 +14831,7 @@ static const struct LevelUpMove sLittenLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_THRASH), LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(39, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(43, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(43, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE(46, MOVE_OUTRAGE), LEVEL_UP_END }; @@ -14844,7 +14844,7 @@ static const struct LevelUpMove sTorracatLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_GROWL), LEVEL_UP_MOVE( 8, MOVE_LICK), LEVEL_UP_MOVE(11, MOVE_LEER), - //LEVEL_UP_MOVE(14, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(14, MOVE_FIRE_FANG), LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE(19, MOVE_ROAR), LEVEL_UP_MOVE(24, MOVE_BITE), @@ -14853,16 +14853,16 @@ static const struct LevelUpMove sTorracatLevelUpLearnset[] = { LEVEL_UP_MOVE(37, MOVE_THRASH), LEVEL_UP_MOVE(42, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(46, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(51, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(51, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE(55, MOVE_OUTRAGE), LEVEL_UP_END }; static const struct LevelUpMove sIncineroarLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_DARKEST_LARIAT), - //LEVEL_UP_MOVE( 1, MOVE_DARKEST_LARIAT), + LEVEL_UP_MOVE( 1, MOVE_DARKEST_LARIAT), LEVEL_UP_MOVE( 1, MOVE_BULK_UP), - //LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -14870,7 +14870,7 @@ static const struct LevelUpMove sIncineroarLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_GROWL), LEVEL_UP_MOVE( 8, MOVE_LICK), LEVEL_UP_MOVE(11, MOVE_LEER), - //LEVEL_UP_MOVE(14, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(14, MOVE_FIRE_FANG), LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE(19, MOVE_ROAR), LEVEL_UP_MOVE(24, MOVE_BITE), @@ -14879,7 +14879,7 @@ static const struct LevelUpMove sIncineroarLevelUpLearnset[] = { LEVEL_UP_MOVE(38, MOVE_THRASH), LEVEL_UP_MOVE(44, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(49, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(55, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(55, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE(60, MOVE_OUTRAGE), LEVEL_UP_MOVE(66, MOVE_CROSS_CHOP), LEVEL_UP_END @@ -14889,19 +14889,19 @@ static const struct LevelUpMove sPopplioLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 4, MOVE_GROWL), - //LEVEL_UP_MOVE( 8, MOVE_DISARMING_VOICE), - //LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES), - //LEVEL_UP_MOVE(14, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 8, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(14, MOVE_AQUA_JET), LEVEL_UP_MOVE(16, MOVE_ICY_WIND), LEVEL_UP_MOVE(18, MOVE_ENCORE), LEVEL_UP_MOVE(22, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(25, MOVE_SING), LEVEL_UP_MOVE(29, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(32, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(36, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(39, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(36, MOVE_MOONBLAST), + LEVEL_UP_MOVE(39, MOVE_CAPTIVATE), LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(46, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(46, MOVE_MISTY_TERRAIN), LEVEL_UP_END }; @@ -14909,56 +14909,56 @@ static const struct LevelUpMove sBrionneLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_GROWL), - //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE( 4, MOVE_GROWL), - //LEVEL_UP_MOVE( 8, MOVE_DISARMING_VOICE), - //LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES), - //LEVEL_UP_MOVE(14, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 8, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(14, MOVE_AQUA_JET), LEVEL_UP_MOVE(16, MOVE_ICY_WIND), LEVEL_UP_MOVE(19, MOVE_ENCORE), LEVEL_UP_MOVE(24, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(28, MOVE_SING), LEVEL_UP_MOVE(33, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(37, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(42, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(46, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(42, MOVE_MOONBLAST), + LEVEL_UP_MOVE(46, MOVE_CAPTIVATE), LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(55, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(55, MOVE_MISTY_TERRAIN), LEVEL_UP_END }; static const struct LevelUpMove sPrimarinaLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SPARKLING_ARIA), - //LEVEL_UP_MOVE( 1, MOVE_SPARKLING_ARIA), + LEVEL_UP_MOVE( 1, MOVE_SPARKLING_ARIA), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_GROWL), - //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE( 4, MOVE_GROWL), - //LEVEL_UP_MOVE( 9, MOVE_DISARMING_VOICE), - //LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES), - //LEVEL_UP_MOVE(14, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 9, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(14, MOVE_AQUA_JET), LEVEL_UP_MOVE(16, MOVE_ICY_WIND), LEVEL_UP_MOVE(19, MOVE_ENCORE), LEVEL_UP_MOVE(24, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(28, MOVE_SING), LEVEL_UP_MOVE(33, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(38, MOVE_HYPER_VOICE), - //LEVEL_UP_MOVE(44, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(49, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(44, MOVE_MOONBLAST), + LEVEL_UP_MOVE(49, MOVE_CAPTIVATE), LEVEL_UP_MOVE(55, MOVE_HYDRO_PUMP), - //LEVEL_UP_MOVE(60, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(60, MOVE_MISTY_TERRAIN), LEVEL_UP_END }; static const struct LevelUpMove sPikipekLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 3, MOVE_GROWL), - //LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH), LEVEL_UP_MOVE(13, MOVE_SUPERSONIC), - //LEVEL_UP_MOVE(15, MOVE_PLUCK), - //LEVEL_UP_MOVE(19, MOVE_ROOST), + LEVEL_UP_MOVE(15, MOVE_PLUCK), + LEVEL_UP_MOVE(19, MOVE_ROOST), LEVEL_UP_MOVE(21, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(25, MOVE_SCREECH), LEVEL_UP_MOVE(27, MOVE_DRILL_PECK), @@ -14972,14 +14972,14 @@ 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_ECHOED_VOICE), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), LEVEL_UP_MOVE( 3, MOVE_GROWL), - //LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH), LEVEL_UP_MOVE(13, MOVE_SUPERSONIC), - //LEVEL_UP_MOVE(16, MOVE_PLUCK), - //LEVEL_UP_MOVE(21, MOVE_ROOST), + LEVEL_UP_MOVE(16, MOVE_PLUCK), + LEVEL_UP_MOVE(21, MOVE_ROOST), LEVEL_UP_MOVE(24, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(29, MOVE_SCREECH), LEVEL_UP_MOVE(32, MOVE_DRILL_PECK), @@ -14991,18 +14991,18 @@ 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_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_ECHOED_VOICE), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), LEVEL_UP_MOVE( 3, MOVE_GROWL), - //LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH), LEVEL_UP_MOVE(13, MOVE_SUPERSONIC), - //LEVEL_UP_MOVE(16, MOVE_PLUCK), - //LEVEL_UP_MOVE(21, MOVE_ROOST), + LEVEL_UP_MOVE(16, MOVE_PLUCK), + LEVEL_UP_MOVE(21, MOVE_ROOST), LEVEL_UP_MOVE(24, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(30, MOVE_SCREECH), LEVEL_UP_MOVE(34, MOVE_DRILL_PECK), @@ -15060,17 +15060,17 @@ static const struct LevelUpMove sGrubbinLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_STRING_SHOT), LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), LEVEL_UP_MOVE(10, MOVE_BITE), - //LEVEL_UP_MOVE(13, MOVE_BUG_BITE), + LEVEL_UP_MOVE(13, MOVE_BUG_BITE), LEVEL_UP_MOVE(16, MOVE_SPARK), - //LEVEL_UP_MOVE(19, MOVE_ACROBATICS), + LEVEL_UP_MOVE(19, MOVE_ACROBATICS), LEVEL_UP_MOVE(22, MOVE_CRUNCH), - //LEVEL_UP_MOVE(25, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(25, MOVE_X_SCISSOR), LEVEL_UP_MOVE(28, MOVE_DIG), LEVEL_UP_END }; static const struct LevelUpMove sCharjabugLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_CHARGE), + //LEVEL_UP_MOVE( 0, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), @@ -15079,21 +15079,21 @@ static const struct LevelUpMove sCharjabugLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_STRING_SHOT), LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), LEVEL_UP_MOVE(10, MOVE_BITE), - //LEVEL_UP_MOVE(13, MOVE_BUG_BITE), + LEVEL_UP_MOVE(13, MOVE_BUG_BITE), LEVEL_UP_MOVE(16, MOVE_SPARK), - //LEVEL_UP_MOVE(19, MOVE_ACROBATICS), + LEVEL_UP_MOVE(19, MOVE_ACROBATICS), LEVEL_UP_MOVE(25, MOVE_CRUNCH), - //LEVEL_UP_MOVE(31, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(31, MOVE_X_SCISSOR), LEVEL_UP_MOVE(37, MOVE_DIG), - //LEVEL_UP_MOVE(43, MOVE_DISCHARGE), + LEVEL_UP_MOVE(43, MOVE_DISCHARGE), LEVEL_UP_MOVE(49, MOVE_IRON_DEFENSE), LEVEL_UP_END }; static const struct LevelUpMove sVikavoltLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_THUNDERBOLT), + //LEVEL_UP_MOVE( 0, MOVE_THUNDERBOLT), LEVEL_UP_MOVE( 1, MOVE_THUNDERBOLT), - //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), + LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), @@ -15102,11 +15102,11 @@ static const struct LevelUpMove sVikavoltLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_STRING_SHOT), LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), LEVEL_UP_MOVE(10, MOVE_BITE), - //LEVEL_UP_MOVE(13, MOVE_BUG_BITE), + LEVEL_UP_MOVE(13, MOVE_BUG_BITE), LEVEL_UP_MOVE(16, MOVE_SPARK), - //LEVEL_UP_MOVE(19, MOVE_ACROBATICS), + LEVEL_UP_MOVE(19, MOVE_ACROBATICS), LEVEL_UP_MOVE(25, MOVE_GUILLOTINE), - //LEVEL_UP_MOVE(31, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(31, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(37, MOVE_DIG), LEVEL_UP_MOVE(41, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(49, MOVE_AGILITY), @@ -15119,19 +15119,19 @@ static const struct LevelUpMove sCrabrawlerLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_LEER), LEVEL_UP_MOVE(13, MOVE_PURSUIT), LEVEL_UP_MOVE(17, MOVE_BUBBLE_BEAM), - //LEVEL_UP_MOVE(22, MOVE_POWER_UP_PUNCH), + LEVEL_UP_MOVE(22, MOVE_POWER_UP_PUNCH), LEVEL_UP_MOVE(25, MOVE_DIZZY_PUNCH), - //LEVEL_UP_MOVE(29, MOVE_PAYBACK), + LEVEL_UP_MOVE(29, MOVE_PAYBACK), LEVEL_UP_MOVE(33, MOVE_REVERSAL), LEVEL_UP_MOVE(37, MOVE_CRABHAMMER), LEVEL_UP_MOVE(42, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(45, MOVE_DYNAMIC_PUNCH), - //LEVEL_UP_MOVE(49, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(49, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; static const struct LevelUpMove sCrabominableLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ICE_PUNCH), + //LEVEL_UP_MOVE( 0, MOVE_ICE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), @@ -15141,14 +15141,14 @@ static const struct LevelUpMove sCrabominableLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_LEER), LEVEL_UP_MOVE(13, MOVE_PURSUIT), LEVEL_UP_MOVE(17, MOVE_BUBBLE_BEAM), - //LEVEL_UP_MOVE(22, MOVE_POWER_UP_PUNCH), + LEVEL_UP_MOVE(22, MOVE_POWER_UP_PUNCH), LEVEL_UP_MOVE(25, MOVE_DIZZY_PUNCH), - //LEVEL_UP_MOVE(29, MOVE_AVALANCHE), + LEVEL_UP_MOVE(29, MOVE_AVALANCHE), LEVEL_UP_MOVE(33, MOVE_REVERSAL), - //LEVEL_UP_MOVE(37, MOVE_ICE_HAMMER), + LEVEL_UP_MOVE(37, MOVE_ICE_HAMMER), LEVEL_UP_MOVE(42, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(45, MOVE_DYNAMIC_PUNCH), - //LEVEL_UP_MOVE(49, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(49, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; @@ -15162,48 +15162,48 @@ static const struct LevelUpMove sOricorioLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE(23, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE(26, MOVE_TEETER_DANCE), - //LEVEL_UP_MOVE(30, MOVE_ROOST), - //LEVEL_UP_MOVE(33, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(36, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(40, MOVE_REVELATION_DANCE), + LEVEL_UP_MOVE(30, MOVE_ROOST), + LEVEL_UP_MOVE(33, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(36, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(40, MOVE_REVELATION_DANCE), LEVEL_UP_MOVE(43, MOVE_MIRROR_MOVE), LEVEL_UP_MOVE(46, MOVE_AGILITY), - //LEVEL_UP_MOVE(50, MOVE_HURRICANE), + LEVEL_UP_MOVE(50, MOVE_HURRICANE), LEVEL_UP_END }; static const struct LevelUpMove sCutieflyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ABSORB), - //LEVEL_UP_MOVE( 4, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 4, MOVE_FAIRY_WIND), LEVEL_UP_MOVE( 7, MOVE_STUN_SPORE), - //LEVEL_UP_MOVE(10, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(10, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE(13, MOVE_SILVER_WIND), - //LEVEL_UP_MOVE(16, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(16, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(21, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE(26, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE(31, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(26, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(31, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(36, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(41, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(41, MOVE_QUIVER_DANCE), LEVEL_UP_END }; static const struct LevelUpMove sRibombeeLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_POLLEN_PUFF), - //LEVEL_UP_MOVE( 1, MOVE_POLLEN_PUFF), + LEVEL_UP_MOVE( 1, MOVE_POLLEN_PUFF), LEVEL_UP_MOVE( 1, MOVE_ABSORB), - //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), - //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), - //LEVEL_UP_MOVE( 4, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 4, MOVE_FAIRY_WIND), LEVEL_UP_MOVE( 7, MOVE_STUN_SPORE), - //LEVEL_UP_MOVE(10, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(10, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE(13, MOVE_SILVER_WIND), - //LEVEL_UP_MOVE(16, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(16, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(21, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(42, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(49, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(49, MOVE_QUIVER_DANCE), LEVEL_UP_END }; @@ -15217,19 +15217,19 @@ static const struct LevelUpMove sRockruffLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(23, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(26, MOVE_ROAR), - //LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(34, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(37, MOVE_SCARY_FACE), LEVEL_UP_MOVE(40, MOVE_CRUNCH), - //LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB), - //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sLycanrocLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_ACCELEROCK), - //LEVEL_UP_MOVE( 1, MOVE_ACCELEROCK), - //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_ACCELEROCK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -15242,12 +15242,12 @@ static const struct LevelUpMove sLycanrocLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(23, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(26, MOVE_ROAR), - //LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(34, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(37, MOVE_SCARY_FACE), LEVEL_UP_MOVE(40, MOVE_CRUNCH), - //LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB), - //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), LEVEL_UP_END }; @@ -15256,15 +15256,15 @@ static const struct LevelUpMove sWishiwashiLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 6, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 9, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(14, MOVE_BRINE), - //LEVEL_UP_MOVE(17, MOVE_AQUA_RING), - //LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK), + LEVEL_UP_MOVE(14, MOVE_BRINE), + LEVEL_UP_MOVE(17, MOVE_AQUA_RING), + LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK), LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(30, MOVE_DIVE), LEVEL_UP_MOVE(33, MOVE_BEAT_UP), - //LEVEL_UP_MOVE(38, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(38, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(41, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(46, MOVE_SOAK), + LEVEL_UP_MOVE(46, MOVE_SOAK), LEVEL_UP_MOVE(49, MOVE_ENDEAVOR), LEVEL_UP_MOVE(54, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -15274,52 +15274,52 @@ static const struct LevelUpMove sMareanieLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POISON_STING), LEVEL_UP_MOVE( 5, MOVE_PECK), LEVEL_UP_MOVE( 9, MOVE_BITE), - //LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES), - //LEVEL_UP_MOVE(17, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(17, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(21, MOVE_TOXIC), - //LEVEL_UP_MOVE(25, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(25, MOVE_VENOSHOCK), LEVEL_UP_MOVE(29, MOVE_SPIKE_CANNON), LEVEL_UP_MOVE(33, MOVE_RECOVER), - //LEVEL_UP_MOVE(37, MOVE_POISON_JAB), - //LEVEL_UP_MOVE(41, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(37, MOVE_POISON_JAB), + LEVEL_UP_MOVE(41, MOVE_VENOM_DRENCH), LEVEL_UP_MOVE(45, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(49, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(49, MOVE_LIQUIDATION), LEVEL_UP_END }; static const struct LevelUpMove sToxapexLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_BANEFUL_BUNKER), - //LEVEL_UP_MOVE( 1, MOVE_BANEFUL_BUNKER), + LEVEL_UP_MOVE( 1, MOVE_BANEFUL_BUNKER), LEVEL_UP_MOVE( 1, MOVE_POISON_STING), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_BITE), - //LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE( 5, MOVE_PECK), LEVEL_UP_MOVE( 9, MOVE_BITE), - //LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES), - //LEVEL_UP_MOVE(17, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(17, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(21, MOVE_TOXIC), - //LEVEL_UP_MOVE(25, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(25, MOVE_VENOSHOCK), LEVEL_UP_MOVE(29, MOVE_SPIKE_CANNON), LEVEL_UP_MOVE(33, MOVE_RECOVER), - //LEVEL_UP_MOVE(37, MOVE_POISON_JAB), - //LEVEL_UP_MOVE(44, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(37, MOVE_POISON_JAB), + LEVEL_UP_MOVE(44, MOVE_VENOM_DRENCH), LEVEL_UP_MOVE(51, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(58, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(58, MOVE_LIQUIDATION), LEVEL_UP_END }; static const struct LevelUpMove sMudbrayLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), LEVEL_UP_MOVE( 3, MOVE_MUD_SPORT), - //LEVEL_UP_MOVE( 8, MOVE_ROTOTILLER), - //LEVEL_UP_MOVE(10, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 8, MOVE_ROTOTILLER), + LEVEL_UP_MOVE(10, MOVE_BULLDOZE), LEVEL_UP_MOVE(15, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE(17, MOVE_STOMP), LEVEL_UP_MOVE(22, MOVE_BIDE), - //LEVEL_UP_MOVE(24, MOVE_HIGH_HORSEPOWER), + LEVEL_UP_MOVE(24, MOVE_HIGH_HORSEPOWER), LEVEL_UP_MOVE(29, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(31, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(31, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE(36, MOVE_COUNTER), LEVEL_UP_MOVE(38, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(43, MOVE_MEGA_KICK), @@ -15330,17 +15330,17 @@ static const struct LevelUpMove sMudbrayLevelUpLearnset[] = { static const struct LevelUpMove sMudsdaleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), - //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), - //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), + LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), LEVEL_UP_MOVE( 3, MOVE_MUD_SPORT), - //LEVEL_UP_MOVE( 8, MOVE_ROTOTILLER), - //LEVEL_UP_MOVE(10, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 8, MOVE_ROTOTILLER), + LEVEL_UP_MOVE(10, MOVE_BULLDOZE), LEVEL_UP_MOVE(15, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE(17, MOVE_STOMP), LEVEL_UP_MOVE(22, MOVE_BIDE), - //LEVEL_UP_MOVE(24, MOVE_HIGH_HORSEPOWER), + LEVEL_UP_MOVE(24, MOVE_HIGH_HORSEPOWER), LEVEL_UP_MOVE(29, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(34, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(34, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE(42, MOVE_COUNTER), LEVEL_UP_MOVE(47, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(55, MOVE_MEGA_KICK), @@ -15351,46 +15351,46 @@ static const struct LevelUpMove sMudsdaleLevelUpLearnset[] = { static const struct LevelUpMove sDewpiderLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), - //LEVEL_UP_MOVE( 5, MOVE_INFESTATION), + LEVEL_UP_MOVE( 5, MOVE_INFESTATION), LEVEL_UP_MOVE( 8, MOVE_SPIDER_WEB), - //LEVEL_UP_MOVE(13, MOVE_BUG_BITE), + LEVEL_UP_MOVE(13, MOVE_BUG_BITE), LEVEL_UP_MOVE(16, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(21, MOVE_BITE), - //LEVEL_UP_MOVE(24, MOVE_AQUA_RING), + LEVEL_UP_MOVE(24, MOVE_AQUA_RING), LEVEL_UP_MOVE(29, MOVE_LEECH_LIFE), LEVEL_UP_MOVE(32, MOVE_CRUNCH), - //LEVEL_UP_MOVE(37, MOVE_LUNGE), + LEVEL_UP_MOVE(37, MOVE_LUNGE), LEVEL_UP_MOVE(40, MOVE_MIRROR_COAT), - //LEVEL_UP_MOVE(45, MOVE_LIQUIDATION), - //LEVEL_UP_MOVE(48, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(45, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(48, MOVE_ENTRAINMENT), LEVEL_UP_END }; static const struct LevelUpMove sAraquanidLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE( 1, MOVE_SOAK), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SOAK), LEVEL_UP_MOVE( 1, MOVE_BUBBLE), - //LEVEL_UP_MOVE( 1, MOVE_INFESTATION), + LEVEL_UP_MOVE( 1, MOVE_INFESTATION), LEVEL_UP_MOVE( 1, MOVE_SPIDER_WEB), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), - //LEVEL_UP_MOVE( 5, MOVE_INFESTATION), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 5, MOVE_INFESTATION), LEVEL_UP_MOVE( 8, MOVE_SPIDER_WEB), - //LEVEL_UP_MOVE(13, MOVE_BUG_BITE), + LEVEL_UP_MOVE(13, MOVE_BUG_BITE), LEVEL_UP_MOVE(16, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(21, MOVE_BITE), - //LEVEL_UP_MOVE(26, MOVE_AQUA_RING), + LEVEL_UP_MOVE(26, MOVE_AQUA_RING), LEVEL_UP_MOVE(33, MOVE_LEECH_LIFE), LEVEL_UP_MOVE(38, MOVE_CRUNCH), - //LEVEL_UP_MOVE(45, MOVE_LUNGE), + LEVEL_UP_MOVE(45, MOVE_LUNGE), LEVEL_UP_MOVE(50, MOVE_MIRROR_COAT), - //LEVEL_UP_MOVE(57, MOVE_LIQUIDATION), - //LEVEL_UP_MOVE(62, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(57, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(62, MOVE_ENTRAINMENT), LEVEL_UP_END }; static const struct LevelUpMove sFomantisLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), - //LEVEL_UP_MOVE( 5, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 5, MOVE_LEAFAGE), LEVEL_UP_MOVE(10, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(14, MOVE_GROWTH), LEVEL_UP_MOVE(19, MOVE_INGRAIN), @@ -15405,14 +15405,14 @@ static const struct LevelUpMove sFomantisLevelUpLearnset[] = { static const struct LevelUpMove sLurantisLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_PETAL_BLIZZARD), - //LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD), - //LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), - //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_GROWTH), - //LEVEL_UP_MOVE( 5, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 5, MOVE_LEAFAGE), LEVEL_UP_MOVE(10, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(14, MOVE_GROWTH), LEVEL_UP_MOVE(19, MOVE_INGRAIN), @@ -15420,7 +15420,7 @@ static const struct LevelUpMove sLurantisLevelUpLearnset[] = { LEVEL_UP_MOVE(28, MOVE_SYNTHESIS), LEVEL_UP_MOVE(32, MOVE_SLASH), LEVEL_UP_MOVE(40, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE(47, MOVE_SOLAR_BLADE), + LEVEL_UP_MOVE(47, MOVE_SOLAR_BLADE), LEVEL_UP_MOVE(55, MOVE_SUNNY_DAY), LEVEL_UP_END }; @@ -15435,11 +15435,11 @@ static const struct LevelUpMove sMorelullLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_INGRAIN), LEVEL_UP_MOVE(25, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(29, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(32, MOVE_STRENGTH_SAP), + LEVEL_UP_MOVE(32, MOVE_STRENGTH_SAP), LEVEL_UP_MOVE(36, MOVE_SPORE), - //LEVEL_UP_MOVE(39, MOVE_MOONBLAST), + LEVEL_UP_MOVE(39, MOVE_MOONBLAST), LEVEL_UP_MOVE(43, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(46, MOVE_SPOTLIGHT), + LEVEL_UP_MOVE(46, MOVE_SPOTLIGHT), LEVEL_UP_END }; @@ -15456,11 +15456,11 @@ static const struct LevelUpMove sShiinoticLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_INGRAIN), LEVEL_UP_MOVE(26, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(31, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP), + LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP), LEVEL_UP_MOVE(40, MOVE_SPORE), - //LEVEL_UP_MOVE(44, MOVE_MOONBLAST), + LEVEL_UP_MOVE(44, MOVE_MOONBLAST), LEVEL_UP_MOVE(49, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(53, MOVE_SPOTLIGHT), + LEVEL_UP_MOVE(53, MOVE_SPOTLIGHT), LEVEL_UP_END }; @@ -15472,19 +15472,19 @@ static const struct LevelUpMove sSalanditLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE(16, MOVE_SMOG), LEVEL_UP_MOVE(21, MOVE_DOUBLE_SLAP), - //LEVEL_UP_MOVE(24, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(24, MOVE_FLAME_BURST), LEVEL_UP_MOVE(29, MOVE_TOXIC), - //LEVEL_UP_MOVE(32, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(37, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(32, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(37, MOVE_VENOSHOCK), LEVEL_UP_MOVE(40, MOVE_FLAMETHROWER), - //LEVEL_UP_MOVE(45, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(48, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(45, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(48, MOVE_DRAGON_PULSE), LEVEL_UP_END }; static const struct LevelUpMove sSalazzleLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE( 1, MOVE_CAPTIVATE), + LEVEL_UP_MOVE( 1, MOVE_CAPTIVATE), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_ENCORE), LEVEL_UP_MOVE( 1, MOVE_TORMENT), @@ -15498,13 +15498,13 @@ static const struct LevelUpMove sSalazzleLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE(16, MOVE_SMOG), LEVEL_UP_MOVE(21, MOVE_DOUBLE_SLAP), - //LEVEL_UP_MOVE(24, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(24, MOVE_FLAME_BURST), LEVEL_UP_MOVE(29, MOVE_TOXIC), - //LEVEL_UP_MOVE(32, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(39, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(32, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(39, MOVE_VENOSHOCK), LEVEL_UP_MOVE(44, MOVE_FLAMETHROWER), - //LEVEL_UP_MOVE(51, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(51, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE), LEVEL_UP_END }; @@ -15512,12 +15512,12 @@ static const struct LevelUpMove sStuffulLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_BIDE), - //LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES), - //LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING), LEVEL_UP_MOVE(19, MOVE_FLAIL), - //LEVEL_UP_MOVE(23, MOVE_PAYBACK), + LEVEL_UP_MOVE(23, MOVE_PAYBACK), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(32, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(32, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(37, MOVE_THRASH), LEVEL_UP_MOVE(41, MOVE_PAIN_SPLIT), LEVEL_UP_MOVE(46, MOVE_DOUBLE_EDGE), @@ -15526,17 +15526,17 @@ static const struct LevelUpMove sStuffulLevelUpLearnset[] = { }; static const struct LevelUpMove sBewearLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_BIND), + //LEVEL_UP_MOVE( 0, MOVE_BIND), LEVEL_UP_MOVE( 1, MOVE_BIND), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_BIDE), - //LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES), - //LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING), LEVEL_UP_MOVE(19, MOVE_FLAIL), - //LEVEL_UP_MOVE(23, MOVE_PAYBACK), + LEVEL_UP_MOVE(23, MOVE_PAYBACK), LEVEL_UP_MOVE(30, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(36, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(36, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(43, MOVE_THRASH), LEVEL_UP_MOVE(49, MOVE_PAIN_SPLIT), LEVEL_UP_MOVE(56, MOVE_DOUBLE_EDGE), @@ -15546,42 +15546,42 @@ static const struct LevelUpMove sBewearLevelUpLearnset[] = { static const struct LevelUpMove sBounsweetLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SPLASH), - //LEVEL_UP_MOVE( 5, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 5, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 9, MOVE_RAPID_SPIN), LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(17, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(21, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(25, MOVE_TEETER_DANCE), LEVEL_UP_MOVE(29, MOVE_FLAIL), - //LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST), + LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST), LEVEL_UP_END }; static const struct LevelUpMove sSteeneeLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_DOUBLE_SLAP), + //LEVEL_UP_MOVE( 0, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE( 1, MOVE_SPLASH), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE( 5, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 5, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 9, MOVE_RAPID_SPIN), LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(17, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(21, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(25, MOVE_TEETER_DANCE), LEVEL_UP_MOVE(29, MOVE_STOMP), - //LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST), - //LEVEL_UP_MOVE(37, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST), + LEVEL_UP_MOVE(37, MOVE_CAPTIVATE), LEVEL_UP_MOVE(41, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(45, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(45, MOVE_LEAF_STORM), LEVEL_UP_END }; static const struct LevelUpMove sTsareenaLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_TROP_KICK), - //LEVEL_UP_MOVE( 1, MOVE_TROP_KICK), - //LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT), + LEVEL_UP_MOVE( 1, MOVE_TROP_KICK), + LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP), LEVEL_UP_MOVE( 1, MOVE_SPLASH), LEVEL_UP_MOVE( 1, MOVE_SWAGGER), @@ -15594,54 +15594,54 @@ static const struct LevelUpMove sTsareenaLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(25, MOVE_TEETER_DANCE), LEVEL_UP_MOVE(29, MOVE_STOMP), - //LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST), - //LEVEL_UP_MOVE(37, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST), + LEVEL_UP_MOVE(37, MOVE_CAPTIVATE), LEVEL_UP_MOVE(41, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(45, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(45, MOVE_LEAF_STORM), LEVEL_UP_MOVE(49, MOVE_HIGH_JUMP_KICK), - //LEVEL_UP_MOVE(53, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(53, MOVE_POWER_WHIP), LEVEL_UP_END }; static const struct LevelUpMove sComfeyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), - //LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD), + LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD), LEVEL_UP_MOVE( 4, MOVE_LEECH_SEED), - //LEVEL_UP_MOVE( 7, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE( 7, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(10, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(13, MOVE_GROWTH), LEVEL_UP_MOVE(16, MOVE_WRAP), LEVEL_UP_MOVE(19, MOVE_SWEET_KISS), - //LEVEL_UP_MOVE(22, MOVE_NATURAL_GIFT), - //LEVEL_UP_MOVE(25, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(22, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(25, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE(28, MOVE_SYNTHESIS), LEVEL_UP_MOVE(31, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE(34, MOVE_GRASS_KNOT), - //LEVEL_UP_MOVE(37, MOVE_FLORAL_HEALING), + LEVEL_UP_MOVE(34, MOVE_GRASS_KNOT), + LEVEL_UP_MOVE(37, MOVE_FLORAL_HEALING), LEVEL_UP_MOVE(40, MOVE_PETAL_DANCE), LEVEL_UP_MOVE(43, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(46, MOVE_GRASSY_TERRAIN), - //LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(46, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH), LEVEL_UP_END }; static const struct LevelUpMove sOranguruLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE( 4, MOVE_AFTER_YOU), + LEVEL_UP_MOVE( 4, MOVE_AFTER_YOU), LEVEL_UP_MOVE( 8, MOVE_TAUNT), - //LEVEL_UP_MOVE(11, MOVE_QUASH), - //LEVEL_UP_MOVE(15, MOVE_STORED_POWER), + LEVEL_UP_MOVE(11, MOVE_QUASH), + LEVEL_UP_MOVE(15, MOVE_STORED_POWER), LEVEL_UP_MOVE(18, MOVE_PSYCH_UP), LEVEL_UP_MOVE(22, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(25, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(29, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(32, MOVE_INSTRUCT), - //LEVEL_UP_MOVE(36, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(25, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(29, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(32, MOVE_INSTRUCT), + LEVEL_UP_MOVE(36, MOVE_FOUL_PLAY), LEVEL_UP_MOVE(39, MOVE_CALM_MIND), LEVEL_UP_MOVE(43, MOVE_PSYCHIC), LEVEL_UP_MOVE(46, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM), + LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM), LEVEL_UP_END }; @@ -15653,41 +15653,41 @@ static const struct LevelUpMove sPassimianLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_BEAT_UP), LEVEL_UP_MOVE(18, MOVE_SCARY_FACE), LEVEL_UP_MOVE(22, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(25, MOVE_BESTOW), + LEVEL_UP_MOVE(25, MOVE_BESTOW), LEVEL_UP_MOVE(29, MOVE_THRASH), LEVEL_UP_MOVE(32, MOVE_BULK_UP), LEVEL_UP_MOVE(36, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(39, MOVE_FLING), - //LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(39, MOVE_FLING), + LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(46, MOVE_REVERSAL), - //LEVEL_UP_MOVE(50, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(50, MOVE_GIGA_IMPACT), LEVEL_UP_END }; static const struct LevelUpMove sWimpodLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_END }; static const struct LevelUpMove sGolisopodLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_FIRST_IMPRESSION), - //LEVEL_UP_MOVE( 1, MOVE_FIRST_IMPRESSION), - //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 1, MOVE_FIRST_IMPRESSION), + LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), LEVEL_UP_MOVE( 4, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 7, MOVE_ROCK_SMASH), - //LEVEL_UP_MOVE(10, MOVE_BUG_BITE), + LEVEL_UP_MOVE(10, MOVE_BUG_BITE), LEVEL_UP_MOVE(13, MOVE_SPITE), LEVEL_UP_MOVE(16, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(21, MOVE_SLASH), - //LEVEL_UP_MOVE(26, MOVE_RAZOR_SHELL), - //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(26, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(41, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(48, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(48, MOVE_LIQUIDATION), LEVEL_UP_END }; @@ -15698,13 +15698,13 @@ static const struct LevelUpMove sSandygastLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(14, MOVE_SAND_TOMB), LEVEL_UP_MOVE(18, MOVE_MEGA_DRAIN), - //LEVEL_UP_MOVE(23, MOVE_BULLDOZE), + LEVEL_UP_MOVE(23, MOVE_BULLDOZE), LEVEL_UP_MOVE(27, MOVE_HYPNOSIS), LEVEL_UP_MOVE(32, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL), - //LEVEL_UP_MOVE(45, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(50, MOVE_SHORE_UP), + LEVEL_UP_MOVE(45, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(50, MOVE_SHORE_UP), LEVEL_UP_MOVE(54, MOVE_SANDSTORM), LEVEL_UP_END }; @@ -15718,13 +15718,13 @@ static const struct LevelUpMove sPalossandLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(14, MOVE_SAND_TOMB), LEVEL_UP_MOVE(18, MOVE_MEGA_DRAIN), - //LEVEL_UP_MOVE(23, MOVE_BULLDOZE), + LEVEL_UP_MOVE(23, MOVE_BULLDOZE), LEVEL_UP_MOVE(27, MOVE_HYPNOSIS), LEVEL_UP_MOVE(32, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL), - //LEVEL_UP_MOVE(47, MOVE_EARTH_POWER), - //LEVEL_UP_MOVE(54, MOVE_SHORE_UP), + LEVEL_UP_MOVE(47, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(54, MOVE_SHORE_UP), LEVEL_UP_MOVE(60, MOVE_SANDSTORM), LEVEL_UP_END }; @@ -15739,12 +15739,12 @@ static const struct LevelUpMove sPyukumukuLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_TAUNT), LEVEL_UP_MOVE(13, MOVE_SAFEGUARD), LEVEL_UP_MOVE(17, MOVE_COUNTER), - //LEVEL_UP_MOVE(21, MOVE_PURIFY), + LEVEL_UP_MOVE(21, MOVE_PURIFY), LEVEL_UP_MOVE(25, MOVE_CURSE), - //LEVEL_UP_MOVE(29, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(29, MOVE_GASTRO_ACID), LEVEL_UP_MOVE(33, MOVE_PAIN_SPLIT), LEVEL_UP_MOVE(37, MOVE_RECOVER), - //LEVEL_UP_MOVE(41, MOVE_SOAK), + LEVEL_UP_MOVE(41, MOVE_SOAK), LEVEL_UP_MOVE(45, MOVE_TOXIC), LEVEL_UP_MOVE(49, MOVE_MEMENTO), LEVEL_UP_END @@ -15758,30 +15758,30 @@ static const struct LevelUpMove sTypeNullLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(25, MOVE_CRUSH_CLAW), LEVEL_UP_MOVE(30, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(35, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(35, MOVE_X_SCISSOR), LEVEL_UP_MOVE(40, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(45, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(50, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(55, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE(60, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(65, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(50, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(55, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(60, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(65, MOVE_PUNISHMENT), LEVEL_UP_MOVE(70, MOVE_RAZOR_WIND), LEVEL_UP_MOVE(75, MOVE_TRI_ATTACK), LEVEL_UP_MOVE(80, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(85, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE(85, MOVE_HEAL_BLOCK), LEVEL_UP_END }; static const struct LevelUpMove sSilvallyLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_MULTI_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_MULTI_ATTACK), - //LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK), + LEVEL_UP_MOVE( 1, MOVE_MULTI_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK), LEVEL_UP_MOVE( 1, MOVE_IMPRISON), - //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), + LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), LEVEL_UP_MOVE( 1, MOVE_POISON_FANG), - //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), - //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_RAGE), LEVEL_UP_MOVE(10, MOVE_PURSUIT), @@ -15789,17 +15789,17 @@ static const struct LevelUpMove sSilvallyLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(25, MOVE_CRUSH_CLAW), LEVEL_UP_MOVE(30, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(35, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(35, MOVE_X_SCISSOR), LEVEL_UP_MOVE(40, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(45, MOVE_METAL_SOUND), LEVEL_UP_MOVE(50, MOVE_CRUNCH), - //LEVEL_UP_MOVE(55, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE(60, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(65, MOVE_PUNISHMENT), + LEVEL_UP_MOVE(55, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(60, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(65, MOVE_PUNISHMENT), LEVEL_UP_MOVE(70, MOVE_RAZOR_WIND), LEVEL_UP_MOVE(75, MOVE_TRI_ATTACK), LEVEL_UP_MOVE(80, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(85, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE(85, MOVE_PARTING_SHOT), LEVEL_UP_END }; @@ -15811,13 +15811,13 @@ static const struct LevelUpMove sMiniorLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_SWIFT), LEVEL_UP_MOVE(17, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(22, MOVE_SELF_DESTRUCT), - //LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK), + 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_AUTOTOMIZE), LEVEL_UP_MOVE(36, MOVE_COSMIC_POWER), - //LEVEL_UP_MOVE(38, MOVE_POWER_GEM), + LEVEL_UP_MOVE(38, MOVE_POWER_GEM), LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(45, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(45, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(50, MOVE_EXPLOSION), LEVEL_UP_END }; @@ -15832,9 +15832,9 @@ static const struct LevelUpMove sKomalaLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_YAWN), LEVEL_UP_MOVE(21, MOVE_SLAM), LEVEL_UP_MOVE(26, MOVE_FLAIL), - //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(36, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(41, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(41, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE(46, MOVE_THRASH), LEVEL_UP_END }; @@ -15844,15 +15844,15 @@ static const struct LevelUpMove sTurtonatorLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_SMOG), LEVEL_UP_MOVE( 9, MOVE_PROTECT), - //LEVEL_UP_MOVE(13, MOVE_INCINERATE), + LEVEL_UP_MOVE(13, MOVE_INCINERATE), LEVEL_UP_MOVE(17, MOVE_FLAIL), LEVEL_UP_MOVE(21, MOVE_ENDURE), LEVEL_UP_MOVE(25, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(29, MOVE_FLAMETHROWER), LEVEL_UP_MOVE(33, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(37, MOVE_SHELL_SMASH), - //LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(45, MOVE_SHELL_TRAP), + LEVEL_UP_MOVE(37, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(45, MOVE_SHELL_TRAP), LEVEL_UP_MOVE(49, MOVE_OVERHEAT), LEVEL_UP_MOVE(53, MOVE_EXPLOSION), LEVEL_UP_END @@ -15865,34 +15865,34 @@ static const struct LevelUpMove sTogedemaruLevelUpLearnset[] = { LEVEL_UP_MOVE( 9, MOVE_ROLLOUT), LEVEL_UP_MOVE(13, MOVE_CHARGE), LEVEL_UP_MOVE(17, MOVE_SPARK), - //LEVEL_UP_MOVE(21, MOVE_NUZZLE), - //LEVEL_UP_MOVE(25, MOVE_MAGNET_RISE), - //LEVEL_UP_MOVE(29, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(33, MOVE_ZING_ZAP), - //LEVEL_UP_MOVE(37, MOVE_ELECTRIC_TERRAIN), - //LEVEL_UP_MOVE(41, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(21, MOVE_NUZZLE), + LEVEL_UP_MOVE(25, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(29, MOVE_DISCHARGE), + LEVEL_UP_MOVE(33, MOVE_ZING_ZAP), + LEVEL_UP_MOVE(37, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE(41, MOVE_WILD_CHARGE), LEVEL_UP_MOVE(45, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE(49, MOVE_SPIKY_SHIELD), - //LEVEL_UP_MOVE(53, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(49, MOVE_SPIKY_SHIELD), + LEVEL_UP_MOVE(53, MOVE_FELL_STINGER), LEVEL_UP_END }; static const struct LevelUpMove sMimikyuLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE( 1, MOVE_SPLASH), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - //LEVEL_UP_MOVE( 1, MOVE_COPYCAT), + LEVEL_UP_MOVE( 1, MOVE_COPYCAT), LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM), - //LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES), - //LEVEL_UP_MOVE(14, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(14, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(19, MOVE_MIMIC), LEVEL_UP_MOVE(23, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(28, MOVE_CHARM), LEVEL_UP_MOVE(32, MOVE_SLASH), - //LEVEL_UP_MOVE(37, MOVE_SHADOW_CLAW), - //LEVEL_UP_MOVE(41, MOVE_HONE_CLAWS), - //LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(37, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE(41, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH), LEVEL_UP_MOVE(50, MOVE_PAIN_SPLIT), LEVEL_UP_END }; @@ -15902,30 +15902,30 @@ static const struct LevelUpMove sBruxishLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_ASTONISH), LEVEL_UP_MOVE( 9, MOVE_CONFUSION), LEVEL_UP_MOVE(12, MOVE_BITE), - //LEVEL_UP_MOVE(17, MOVE_AQUA_JET), + LEVEL_UP_MOVE(17, MOVE_AQUA_JET), LEVEL_UP_MOVE(20, MOVE_DISABLE), LEVEL_UP_MOVE(25, MOVE_PSYWAVE), LEVEL_UP_MOVE(28, MOVE_CRUNCH), - //LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(36, MOVE_SCREECH), - //LEVEL_UP_MOVE(41, MOVE_PSYCHIC_FANGS), - //LEVEL_UP_MOVE(44, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(41, MOVE_PSYCHIC_FANGS), + LEVEL_UP_MOVE(44, MOVE_SYNCHRONOISE), LEVEL_UP_END }; static const struct LevelUpMove sDrampaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), - //LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 5, MOVE_TWISTER), LEVEL_UP_MOVE( 9, MOVE_PROTECT), LEVEL_UP_MOVE(13, MOVE_GLARE), LEVEL_UP_MOVE(17, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(21, MOVE_DRAGON_RAGE), - //LEVEL_UP_MOVE(25, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(25, MOVE_NATURAL_GIFT), LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(33, MOVE_SAFEGUARD), LEVEL_UP_MOVE(37, MOVE_EXTRASENSORY), - //LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(45, MOVE_FLY), LEVEL_UP_MOVE(49, MOVE_HYPER_VOICE), LEVEL_UP_MOVE(53, MOVE_OUTRAGE), @@ -15933,24 +15933,24 @@ static const struct LevelUpMove sDrampaLevelUpLearnset[] = { }; static const struct LevelUpMove sDhelmiseLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), + LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 5, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE( 9, MOVE_WRAP), - //LEVEL_UP_MOVE(14, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(14, MOVE_GYRO_BALL), LEVEL_UP_MOVE(18, MOVE_METAL_SOUND), LEVEL_UP_MOVE(23, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(27, MOVE_WHIRLPOOL), - //LEVEL_UP_MOVE(32, MOVE_ANCHOR_SHOT), + LEVEL_UP_MOVE(32, MOVE_ANCHOR_SHOT), LEVEL_UP_MOVE(36, MOVE_SHADOW_BALL), - //LEVEL_UP_MOVE(41, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(41, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(45, MOVE_SLAM), - //LEVEL_UP_MOVE(50, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE(54, MOVE_PHANTOM_FORCE), - //LEVEL_UP_MOVE(59, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(50, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(54, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(59, MOVE_POWER_WHIP), LEVEL_UP_END }; @@ -15959,23 +15959,23 @@ static const struct LevelUpMove sJangmooLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_LEER), LEVEL_UP_MOVE( 9, MOVE_BIDE), LEVEL_UP_MOVE(13, MOVE_PROTECT), - //LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE(21, MOVE_SCARY_FACE), LEVEL_UP_MOVE(25, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(29, MOVE_WORK_UP), + LEVEL_UP_MOVE(29, MOVE_WORK_UP), LEVEL_UP_MOVE(33, MOVE_SCREECH), LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(41, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(45, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(45, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE(49, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(53, MOVE_OUTRAGE), LEVEL_UP_END }; static const struct LevelUpMove sHakamooLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SKY_UPPERCUT), + //LEVEL_UP_MOVE( 0, MOVE_SKY_UPPERCUT), LEVEL_UP_MOVE( 1, MOVE_SKY_UPPERCUT), - //LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BIDE), @@ -15983,26 +15983,26 @@ static const struct LevelUpMove sHakamooLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_LEER), LEVEL_UP_MOVE( 9, MOVE_BIDE), LEVEL_UP_MOVE(13, MOVE_PROTECT), - //LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE(21, MOVE_SCARY_FACE), LEVEL_UP_MOVE(25, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(29, MOVE_WORK_UP), + LEVEL_UP_MOVE(29, MOVE_WORK_UP), LEVEL_UP_MOVE(33, MOVE_SCREECH), LEVEL_UP_MOVE(38, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(43, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(48, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(48, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE(53, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(58, MOVE_OUTRAGE), - //LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; static const struct LevelUpMove sKommooLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_CLANGING_SCALES), - //LEVEL_UP_MOVE( 1, MOVE_CLANGING_SCALES), + LEVEL_UP_MOVE( 1, MOVE_CLANGING_SCALES), LEVEL_UP_MOVE( 1, MOVE_SKY_UPPERCUT), LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM), - //LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BIDE), @@ -16010,24 +16010,24 @@ static const struct LevelUpMove sKommooLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_LEER), LEVEL_UP_MOVE( 9, MOVE_BIDE), LEVEL_UP_MOVE(13, MOVE_PROTECT), - //LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE(21, MOVE_SCARY_FACE), LEVEL_UP_MOVE(25, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(29, MOVE_WORK_UP), + LEVEL_UP_MOVE(29, MOVE_WORK_UP), LEVEL_UP_MOVE(33, MOVE_SCREECH), LEVEL_UP_MOVE(38, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(43, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(51, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(51, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE(59, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(67, MOVE_OUTRAGE), - //LEVEL_UP_MOVE(75, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(75, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; static const struct LevelUpMove sTapuKokoLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP), LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE), @@ -16037,21 +16037,21 @@ static const struct LevelUpMove sTapuKokoLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_SHOCK_WAVE), LEVEL_UP_MOVE(20, MOVE_SCREECH), LEVEL_UP_MOVE(26, MOVE_CHARGE), - //LEVEL_UP_MOVE(32, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(32, MOVE_WILD_CHARGE), LEVEL_UP_MOVE(38, MOVE_MIRROR_MOVE), - //LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS), - //LEVEL_UP_MOVE(48, MOVE_DISCHARGE), + LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS), + LEVEL_UP_MOVE(48, MOVE_DISCHARGE), LEVEL_UP_MOVE(53, MOVE_AGILITY), - //LEVEL_UP_MOVE(58, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(58, MOVE_ELECTRO_BALL), LEVEL_UP_END }; static const struct LevelUpMove sTapuLeleLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), + LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY), LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), - //LEVEL_UP_MOVE( 1, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE( 1, MOVE_DRAINING_KISS), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -16059,41 +16059,41 @@ static const struct LevelUpMove sTapuLeleLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_PSYBEAM), LEVEL_UP_MOVE(20, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(26, MOVE_SKILL_SWAP), - //LEVEL_UP_MOVE(32, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(32, MOVE_PSYSHOCK), LEVEL_UP_MOVE(38, MOVE_TICKLE), - //LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS), + LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS), LEVEL_UP_MOVE(48, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(53, MOVE_FLATTER), - //LEVEL_UP_MOVE(58, MOVE_MOONBLAST), + LEVEL_UP_MOVE(58, MOVE_MOONBLAST), LEVEL_UP_END }; static const struct LevelUpMove sTapuBuluLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER), LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), - //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 8, MOVE_HORN_ATTACK), LEVEL_UP_MOVE(14, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(20, MOVE_SCARY_FACE), LEVEL_UP_MOVE(26, MOVE_LEECH_SEED), - //LEVEL_UP_MOVE(32, MOVE_HORN_LEECH), - //LEVEL_UP_MOVE(38, MOVE_ROTOTILLER), - //LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS), - //LEVEL_UP_MOVE(48, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(32, MOVE_HORN_LEECH), + LEVEL_UP_MOVE(38, MOVE_ROTOTILLER), + LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS), + LEVEL_UP_MOVE(48, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(53, MOVE_MEGAHORN), LEVEL_UP_MOVE(58, MOVE_SKULL_BASH), LEVEL_UP_END }; static const struct LevelUpMove sTapuFiniLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), - //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), + LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE), LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_HAZE), LEVEL_UP_MOVE( 1, MOVE_MIST), @@ -16101,13 +16101,13 @@ static const struct LevelUpMove sTapuFiniLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 8, MOVE_WATER_PULSE), LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), - //LEVEL_UP_MOVE(20, MOVE_SOAK), + LEVEL_UP_MOVE(20, MOVE_SOAK), LEVEL_UP_MOVE(26, MOVE_REFRESH), - //LEVEL_UP_MOVE(32, MOVE_BRINE), - //LEVEL_UP_MOVE(38, MOVE_DEFOG), - //LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS), + LEVEL_UP_MOVE(32, MOVE_BRINE), + LEVEL_UP_MOVE(38, MOVE_DEFOG), + LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS), LEVEL_UP_MOVE(48, MOVE_MUDDY_WATER), - //LEVEL_UP_MOVE(53, MOVE_AQUA_RING), + LEVEL_UP_MOVE(53, MOVE_AQUA_RING), LEVEL_UP_MOVE(58, MOVE_HYDRO_PUMP), LEVEL_UP_END }; @@ -16119,7 +16119,7 @@ static const struct LevelUpMove sCosmogLevelUpLearnset[] = { }; static const struct LevelUpMove sCosmoemLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_COSMIC_POWER), + //LEVEL_UP_MOVE( 0, MOVE_COSMIC_POWER), LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER), LEVEL_UP_MOVE( 1, MOVE_TELEPORT), LEVEL_UP_END @@ -16127,78 +16127,78 @@ static const struct LevelUpMove sCosmoemLevelUpLearnset[] = { static const struct LevelUpMove sSolgaleoLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SUNSTEEL_STRIKE), - //LEVEL_UP_MOVE( 1, MOVE_SUNSTEEL_STRIKE), + LEVEL_UP_MOVE( 1, MOVE_SUNSTEEL_STRIKE), LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER), - //LEVEL_UP_MOVE( 1, MOVE_WAKE_UP_SLAP), + LEVEL_UP_MOVE( 1, MOVE_WAKE_UP_SLAP), LEVEL_UP_MOVE( 1, MOVE_TELEPORT), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), - //LEVEL_UP_MOVE( 7, MOVE_IRON_HEAD), + LEVEL_UP_MOVE( 7, MOVE_IRON_HEAD), LEVEL_UP_MOVE(13, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(19, MOVE_ZEN_HEADBUTT), - //LEVEL_UP_MOVE(23, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(19, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(23, MOVE_FLASH_CANNON), LEVEL_UP_MOVE(31, MOVE_MORNING_SUN), LEVEL_UP_MOVE(37, MOVE_CRUNCH), - //LEVEL_UP_MOVE(43, MOVE_METAL_BURST), + LEVEL_UP_MOVE(43, MOVE_METAL_BURST), LEVEL_UP_MOVE(47, MOVE_SOLAR_BEAM), - //LEVEL_UP_MOVE(59, MOVE_NOBLE_ROAR), - //LEVEL_UP_MOVE(61, MOVE_FLARE_BLITZ), - //LEVEL_UP_MOVE(67, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE(73, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(59, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(61, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(67, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(73, MOVE_GIGA_IMPACT), LEVEL_UP_END }; static const struct LevelUpMove sLunalaLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_MOONGEIST_BEAM), - //LEVEL_UP_MOVE( 1, MOVE_MOONGEIST_BEAM), + LEVEL_UP_MOVE( 1, MOVE_MOONGEIST_BEAM), LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 1, MOVE_TELEPORT), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(13, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE(19, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(19, MOVE_AIR_SLASH), LEVEL_UP_MOVE(23, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(31, MOVE_MOONLIGHT), - //LEVEL_UP_MOVE(37, MOVE_NIGHT_DAZE), + LEVEL_UP_MOVE(37, MOVE_NIGHT_DAZE), LEVEL_UP_MOVE(43, MOVE_MAGIC_COAT), - //LEVEL_UP_MOVE(47, MOVE_MOONBLAST), + LEVEL_UP_MOVE(47, MOVE_MOONBLAST), LEVEL_UP_MOVE(59, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(61, MOVE_PHANTOM_FORCE), - //LEVEL_UP_MOVE(67, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(61, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(67, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(73, MOVE_HYPER_BEAM), LEVEL_UP_END }; static const struct LevelUpMove sNihilegoLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE( 1, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE( 1, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE( 1, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE( 1, MOVE_TICKLE), LEVEL_UP_MOVE( 1, MOVE_ACID), LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), LEVEL_UP_MOVE( 1, MOVE_POUND), - //LEVEL_UP_MOVE( 7, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE( 7, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(13, MOVE_PSYWAVE), LEVEL_UP_MOVE(19, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(23, MOVE_VENOSHOCK), - //LEVEL_UP_MOVE(29, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(23, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(29, MOVE_TOXIC_SPIKES), LEVEL_UP_MOVE(31, MOVE_SAFEGUARD), - //LEVEL_UP_MOVE(37, MOVE_POWER_GEM), + LEVEL_UP_MOVE(37, MOVE_POWER_GEM), LEVEL_UP_MOVE(43, MOVE_MIRROR_COAT), - //LEVEL_UP_MOVE(47, MOVE_ACID_SPRAY), - //LEVEL_UP_MOVE(53, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(59, MOVE_STEALTH_ROCK), - //LEVEL_UP_MOVE(67, MOVE_WONDER_ROOM), - //LEVEL_UP_MOVE(73, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(47, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(53, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(59, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(67, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(73, MOVE_HEAD_SMASH), LEVEL_UP_END }; static const struct LevelUpMove sBuzzwoleLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), + LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_REVERSAL), LEVEL_UP_MOVE( 1, MOVE_HARDEN), - //LEVEL_UP_MOVE( 1, MOVE_POWER_UP_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_POWER_UP_PUNCH), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 7, MOVE_COMET_PUNCH), LEVEL_UP_MOVE(13, MOVE_BULK_UP), @@ -16208,8 +16208,8 @@ static const struct LevelUpMove sBuzzwoleLevelUpLearnset[] = { LEVEL_UP_MOVE(31, MOVE_TAUNT), LEVEL_UP_MOVE(37, MOVE_MEGA_PUNCH), LEVEL_UP_MOVE(43, MOVE_COUNTER), - //LEVEL_UP_MOVE(47, MOVE_HAMMER_ARM), - //LEVEL_UP_MOVE(53, MOVE_LUNGE), + LEVEL_UP_MOVE(47, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(53, MOVE_LUNGE), LEVEL_UP_MOVE(59, MOVE_DYNAMIC_PUNCH), LEVEL_UP_MOVE(67, MOVE_SUPERPOWER), LEVEL_UP_MOVE(73, MOVE_FOCUS_PUNCH), @@ -16217,25 +16217,25 @@ static const struct LevelUpMove sBuzzwoleLevelUpLearnset[] = { }; static const struct LevelUpMove sPheromosaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 7, MOVE_SWIFT), LEVEL_UP_MOVE(13, MOVE_STOMP), - //LEVEL_UP_MOVE(19, MOVE_FEINT), + LEVEL_UP_MOVE(19, MOVE_FEINT), LEVEL_UP_MOVE(23, MOVE_SILVER_WIND), LEVEL_UP_MOVE(29, MOVE_BOUNCE), LEVEL_UP_MOVE(31, MOVE_JUMP_KICK), LEVEL_UP_MOVE(37, MOVE_AGILITY), LEVEL_UP_MOVE(43, MOVE_TRIPLE_KICK), - //LEVEL_UP_MOVE(47, MOVE_LUNGE), - //LEVEL_UP_MOVE(53, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE(59, MOVE_ME_FIRST), + LEVEL_UP_MOVE(47, MOVE_LUNGE), + LEVEL_UP_MOVE(53, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(59, MOVE_ME_FIRST), LEVEL_UP_MOVE(67, MOVE_HIGH_JUMP_KICK), - //LEVEL_UP_MOVE(73, MOVE_SPEED_SWAP), + LEVEL_UP_MOVE(73, MOVE_SPEED_SWAP), LEVEL_UP_END }; @@ -16249,45 +16249,45 @@ static const struct LevelUpMove sXurkitreeLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_SHOCK_WAVE), LEVEL_UP_MOVE(19, MOVE_INGRAIN), LEVEL_UP_MOVE(23, MOVE_THUNDER_PUNCH), - //LEVEL_UP_MOVE(29, MOVE_EERIE_IMPULSE), + LEVEL_UP_MOVE(29, MOVE_EERIE_IMPULSE), LEVEL_UP_MOVE(31, MOVE_SIGNAL_BEAM), LEVEL_UP_MOVE(37, MOVE_THUNDERBOLT), LEVEL_UP_MOVE(43, MOVE_HYPNOSIS), - //LEVEL_UP_MOVE(47, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(53, MOVE_ELECTRIC_TERRAIN), - //LEVEL_UP_MOVE(59, MOVE_POWER_WHIP), - //LEVEL_UP_MOVE(67, MOVE_ION_DELUGE), + LEVEL_UP_MOVE(47, MOVE_DISCHARGE), + LEVEL_UP_MOVE(53, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE(59, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(67, MOVE_ION_DELUGE), LEVEL_UP_MOVE(73, MOVE_ZAP_CANNON), LEVEL_UP_END }; static const struct LevelUpMove sCelesteelaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), LEVEL_UP_MOVE( 1, MOVE_INGRAIN), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 7, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE( 7, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(13, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(19, MOVE_LEECH_SEED), LEVEL_UP_MOVE(23, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(29, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(29, MOVE_IRON_HEAD), LEVEL_UP_MOVE(31, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(37, MOVE_FLASH_CANNON), - //LEVEL_UP_MOVE(43, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(47, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(37, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(43, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(47, MOVE_SEED_BOMB), LEVEL_UP_MOVE(53, MOVE_SKULL_BASH), LEVEL_UP_MOVE(59, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(67, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(67, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE(73, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sKartanaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD), - //LEVEL_UP_MOVE( 1, MOVE_DEFOG), - //LEVEL_UP_MOVE( 1, MOVE_VACUUM_WAVE), + LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE( 1, MOVE_DEFOG), + LEVEL_UP_MOVE( 1, MOVE_VACUUM_WAVE), LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_CUT), @@ -16295,148 +16295,148 @@ static const struct LevelUpMove sKartanaLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(19, MOVE_SYNTHESIS), LEVEL_UP_MOVE(23, MOVE_AERIAL_ACE), - //LEVEL_UP_MOVE(29, MOVE_LASER_FOCUS), - //LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(29, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(43, MOVE_LEAF_BLADE), - //LEVEL_UP_MOVE(47, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(47, MOVE_X_SCISSOR), LEVEL_UP_MOVE(53, MOVE_DETECT), - //LEVEL_UP_MOVE(59, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(67, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(59, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(67, MOVE_PSYCHO_CUT), LEVEL_UP_MOVE(73, MOVE_GUILLOTINE), LEVEL_UP_END }; static const struct LevelUpMove sGuzzlordLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_BELCH), - //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_BELCH), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), LEVEL_UP_MOVE( 1, MOVE_SWALLOW), LEVEL_UP_MOVE( 1, MOVE_STOCKPILE), LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 7, MOVE_STOMP), - //LEVEL_UP_MOVE(13, MOVE_BRUTAL_SWING), - //LEVEL_UP_MOVE(19, MOVE_STEAMROLLER), - //LEVEL_UP_MOVE(23, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(13, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(19, MOVE_STEAMROLLER), + LEVEL_UP_MOVE(23, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE(29, MOVE_IRON_TAIL), - //LEVEL_UP_MOVE(31, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(31, MOVE_STOMPING_TANTRUM), LEVEL_UP_MOVE(37, MOVE_CRUNCH), - //LEVEL_UP_MOVE(43, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(43, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(47, MOVE_THRASH), - //LEVEL_UP_MOVE(53, MOVE_GASTRO_ACID), - //LEVEL_UP_MOVE(59, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE(67, MOVE_WRING_OUT), - //LEVEL_UP_MOVE(73, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(53, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(59, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(67, MOVE_WRING_OUT), + LEVEL_UP_MOVE(73, MOVE_DRAGON_RUSH), LEVEL_UP_END }; static const struct LevelUpMove sNecrozmaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), LEVEL_UP_MOVE( 1, MOVE_MORNING_SUN), - //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), - //LEVEL_UP_MOVE( 1, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE( 1, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 7, MOVE_SLASH), - //LEVEL_UP_MOVE(13, MOVE_STORED_POWER), + LEVEL_UP_MOVE(13, MOVE_STORED_POWER), LEVEL_UP_MOVE(19, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(23, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(31, MOVE_GRAVITY), - //LEVEL_UP_MOVE(37, MOVE_PSYCHO_CUT), - //LEVEL_UP_MOVE(43, MOVE_POWER_GEM), - //LEVEL_UP_MOVE(47, MOVE_AUTOTOMIZE), - //LEVEL_UP_MOVE(50, MOVE_PHOTON_GEYSER), - //LEVEL_UP_MOVE(53, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(23, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(31, MOVE_GRAVITY), + LEVEL_UP_MOVE(37, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(43, MOVE_POWER_GEM), + LEVEL_UP_MOVE(47, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(50, MOVE_PHOTON_GEYSER), + LEVEL_UP_MOVE(53, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(59, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(67, MOVE_WRING_OUT), - //LEVEL_UP_MOVE(73, MOVE_PRISMATIC_LASER), + LEVEL_UP_MOVE(67, MOVE_WRING_OUT), + LEVEL_UP_MOVE(73, MOVE_PRISMATIC_LASER), LEVEL_UP_END }; static const struct LevelUpMove sMagearnaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_CRAFTY_SHIELD), - //LEVEL_UP_MOVE( 1, MOVE_GEAR_UP), - //LEVEL_UP_MOVE( 1, MOVE_SHIFT_GEAR), - //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), + LEVEL_UP_MOVE( 1, MOVE_CRAFTY_SHIELD), + LEVEL_UP_MOVE( 1, MOVE_GEAR_UP), + LEVEL_UP_MOVE( 1, MOVE_SHIFT_GEAR), + LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_SONIC_BOOM), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_PSYBEAM), - //LEVEL_UP_MOVE( 9, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE( 9, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(17, MOVE_AURORA_BEAM), - //LEVEL_UP_MOVE(25, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(25, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(33, MOVE_MIND_READER), - //LEVEL_UP_MOVE(41, MOVE_FLASH_CANNON), - //LEVEL_UP_MOVE(49, MOVE_FLEUR_CANNON), + LEVEL_UP_MOVE(41, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(49, MOVE_FLEUR_CANNON), LEVEL_UP_MOVE(57, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(65, MOVE_PAIN_SPLIT), - //LEVEL_UP_MOVE(73, MOVE_SYNCHRONOISE), - //LEVEL_UP_MOVE(81, MOVE_AURA_SPHERE), - //LEVEL_UP_MOVE(89, MOVE_HEART_SWAP), - //LEVEL_UP_MOVE(97, MOVE_TRUMP_CARD), + LEVEL_UP_MOVE(73, MOVE_SYNCHRONOISE), + LEVEL_UP_MOVE(81, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE(89, MOVE_HEART_SWAP), + LEVEL_UP_MOVE(97, MOVE_TRUMP_CARD), LEVEL_UP_END }; static const struct LevelUpMove sMarshadowLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS), - //LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), + LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH), - //LEVEL_UP_MOVE( 1, MOVE_DRAIN_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_DRAIN_PUNCH), LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_PURSUIT), - //LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), - //LEVEL_UP_MOVE( 5, MOVE_FORCE_PALM), - //LEVEL_UP_MOVE(11, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 5, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(11, MOVE_FEINT), LEVEL_UP_MOVE(15, MOVE_ROLLING_KICK), - //LEVEL_UP_MOVE(20, MOVE_COPYCAT), + LEVEL_UP_MOVE(20, MOVE_COPYCAT), LEVEL_UP_MOVE(26, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE(30, MOVE_ROLE_PLAY), LEVEL_UP_MOVE(35, MOVE_JUMP_KICK), LEVEL_UP_MOVE(41, MOVE_PSYCH_UP), - //LEVEL_UP_MOVE(45, MOVE_SPECTRAL_THIEF), - //LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT), - //LEVEL_UP_MOVE(56, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(45, MOVE_SPECTRAL_THIEF), + LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(56, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(60, MOVE_ENDEAVOR), LEVEL_UP_END }; static const struct LevelUpMove sPoipoleLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_ACID), LEVEL_UP_MOVE( 7, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(13, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(13, MOVE_VENOSHOCK), LEVEL_UP_MOVE(19, MOVE_CHARM), - //LEVEL_UP_MOVE(23, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(31, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(37, MOVE_POISON_JAB), + LEVEL_UP_MOVE(23, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(31, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(37, MOVE_POISON_JAB), LEVEL_UP_MOVE(41, MOVE_TOXIC), - //LEVEL_UP_MOVE(47, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(47, MOVE_FELL_STINGER), LEVEL_UP_END }; static const struct LevelUpMove sNaganadelLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_AIR_CUTTER), + //LEVEL_UP_MOVE( 0, MOVE_AIR_CUTTER), LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER), - //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_ACID), LEVEL_UP_MOVE( 7, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(13, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(13, MOVE_VENOSHOCK), LEVEL_UP_MOVE(19, MOVE_CHARM), - //LEVEL_UP_MOVE(23, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE(31, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(37, MOVE_POISON_JAB), + LEVEL_UP_MOVE(23, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(31, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(37, MOVE_POISON_JAB), LEVEL_UP_MOVE(41, MOVE_TOXIC), - //LEVEL_UP_MOVE(47, MOVE_FELL_STINGER), - //LEVEL_UP_MOVE(53, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(61, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(47, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(53, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(61, MOVE_DRAGON_PULSE), LEVEL_UP_END }; @@ -16444,15 +16444,15 @@ static const struct LevelUpMove sStakatakaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_ROCK_SLIDE), - //LEVEL_UP_MOVE(11, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(11, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(17, MOVE_BIDE), LEVEL_UP_MOVE(19, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(23, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE), LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(43, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(43, MOVE_IRON_HEAD), LEVEL_UP_MOVE(47, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(53, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(53, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(61, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; @@ -16461,35 +16461,35 @@ static const struct LevelUpMove sBlacephalonLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 7, MOVE_MAGIC_COAT), - //LEVEL_UP_MOVE(13, MOVE_STORED_POWER), - //LEVEL_UP_MOVE(17, MOVE_FLAME_BURST), + LEVEL_UP_MOVE(13, MOVE_STORED_POWER), + LEVEL_UP_MOVE(17, MOVE_FLAME_BURST), LEVEL_UP_MOVE(23, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(29, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(31, MOVE_CALM_MIND), LEVEL_UP_MOVE(37, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(47, MOVE_TRICK), - //LEVEL_UP_MOVE(59, MOVE_MIND_BLOWN), + LEVEL_UP_MOVE(59, MOVE_MIND_BLOWN), LEVEL_UP_END }; static const struct LevelUpMove sZeraoraLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_SPARK), - //LEVEL_UP_MOVE( 5, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 5, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 8, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES), - //LEVEL_UP_MOVE(15, MOVE_VOLT_SWITCH), - //LEVEL_UP_MOVE(19, MOVE_SNARL), + LEVEL_UP_MOVE(15, MOVE_VOLT_SWITCH), + LEVEL_UP_MOVE(19, MOVE_SNARL), LEVEL_UP_MOVE(22, MOVE_FAKE_OUT), LEVEL_UP_MOVE(26, MOVE_CHARGE), LEVEL_UP_MOVE(29, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE(33, MOVE_SLASH), - //LEVEL_UP_MOVE(36, MOVE_WILD_CHARGE), - //LEVEL_UP_MOVE(40, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(43, MOVE_PLASMA_FISTS), - //LEVEL_UP_MOVE(47, MOVE_CLOSE_COMBAT), - //LEVEL_UP_MOVE(50, MOVE_DISCHARGE), + LEVEL_UP_MOVE(36, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(40, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(43, MOVE_PLASMA_FISTS), + LEVEL_UP_MOVE(47, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(50, MOVE_DISCHARGE), LEVEL_UP_END }; @@ -16500,12 +16500,12 @@ static const struct LevelUpMove sMeltanLevelUpLearnset[] = { LEVEL_UP_MOVE( 18, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 27, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 36, MOVE_ACID_ARMOR), - //LEVEL_UP_MOVE( 45, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE( 45, MOVE_FLASH_CANNON), LEVEL_UP_END }; static const struct LevelUpMove sMelmetalLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_THUNDER_PUNCH), + //LEVEL_UP_MOVE( 0, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_HARDEN), @@ -16515,10 +16515,10 @@ static const struct LevelUpMove sMelmetalLevelUpLearnset[] = { LEVEL_UP_MOVE( 18, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 27, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 36, MOVE_ACID_ARMOR), - //LEVEL_UP_MOVE( 45, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE( 45, MOVE_FLASH_CANNON), LEVEL_UP_MOVE( 54, MOVE_MEGA_PUNCH), LEVEL_UP_MOVE( 64, MOVE_PROTECT), - //LEVEL_UP_MOVE( 72, MOVE_DOUBLE_IRON_BASH), + LEVEL_UP_MOVE( 72, MOVE_DOUBLE_IRON_BASH), LEVEL_UP_MOVE( 81, MOVE_SUPERPOWER), LEVEL_UP_MOVE( 90, MOVE_HYPER_BEAM), LEVEL_UP_END @@ -16526,53 +16526,53 @@ static const struct LevelUpMove sMelmetalLevelUpLearnset[] = { static const struct LevelUpMove sGrookeyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_GROWL), - //LEVEL_UP_MOVE( 6, MOVE_BRANCH_POKE), + LEVEL_UP_MOVE( 6, MOVE_BRANCH_POKE), LEVEL_UP_MOVE( 8, MOVE_TAUNT), LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(17, MOVE_SCREECH), LEVEL_UP_MOVE(20, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(24, MOVE_SLAM), LEVEL_UP_MOVE(28, MOVE_UPROAR), - //LEVEL_UP_MOVE(32, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(32, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE(36, MOVE_ENDEAVOR), LEVEL_UP_END }; static const struct LevelUpMove sThwackeyLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_GROWL), - //LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE), + LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE), LEVEL_UP_MOVE( 1, MOVE_TAUNT), LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(19, MOVE_SCREECH), LEVEL_UP_MOVE(24, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(30, MOVE_SLAM), LEVEL_UP_MOVE(36, MOVE_UPROAR), - //LEVEL_UP_MOVE(42, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(42, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE(48, MOVE_ENDEAVOR), LEVEL_UP_END }; static const struct LevelUpMove sRillaboomLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_DRUM_BEATING), - //LEVEL_UP_MOVE( 1, MOVE_DRUM_BEATING), - //LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), - //LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE( 1, MOVE_DRUM_BEATING), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_GROWL), - //LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE), + LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE), LEVEL_UP_MOVE( 1, MOVE_TAUNT), LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(19, MOVE_SCREECH), LEVEL_UP_MOVE(24, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(30, MOVE_SLAM), LEVEL_UP_MOVE(38, MOVE_UPROAR), - //LEVEL_UP_MOVE(46, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(46, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE(54, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(62, MOVE_BOOMBURST), + LEVEL_UP_MOVE(62, MOVE_BOOMBURST), LEVEL_UP_END }; @@ -16582,7 +16582,7 @@ static const struct LevelUpMove sScorbunnyLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_EMBER), LEVEL_UP_MOVE( 8, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(12, MOVE_DOUBLE_KICK), - //LEVEL_UP_MOVE(17, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(17, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(20, MOVE_AGILITY), LEVEL_UP_MOVE(24, MOVE_HEADBUTT), LEVEL_UP_MOVE(28, MOVE_COUNTER), @@ -16597,7 +16597,7 @@ static const struct LevelUpMove sRabootLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(12, MOVE_DOUBLE_KICK), - //LEVEL_UP_MOVE(19, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(19, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(24, MOVE_AGILITY), LEVEL_UP_MOVE(30, MOVE_HEADBUTT), LEVEL_UP_MOVE(36, MOVE_COUNTER), @@ -16608,20 +16608,20 @@ static const struct LevelUpMove sRabootLevelUpLearnset[] = { static const struct LevelUpMove sCinderaceLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_PYRO_BALL), - //LEVEL_UP_MOVE( 1, MOVE_PYRO_BALL), - //LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_PYRO_BALL), + LEVEL_UP_MOVE( 1, MOVE_FEINT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(12, MOVE_DOUBLE_KICK), - //LEVEL_UP_MOVE(19, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(19, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(24, MOVE_AGILITY), LEVEL_UP_MOVE(30, MOVE_HEADBUTT), LEVEL_UP_MOVE(38, MOVE_COUNTER), LEVEL_UP_MOVE(46, MOVE_BOUNCE), LEVEL_UP_MOVE(54, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(62, MOVE_COURT_CHANGE), + LEVEL_UP_MOVE(62, MOVE_COURT_CHANGE), LEVEL_UP_END }; @@ -16631,11 +16631,11 @@ static const struct LevelUpMove sSobbleLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_WATER_GUN), LEVEL_UP_MOVE( 8, MOVE_BIND), LEVEL_UP_MOVE(12, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(17, MOVE_TEARFUL_LOOK), - //LEVEL_UP_MOVE(20, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(24, MOVE_U_TURN), - //LEVEL_UP_MOVE(28, MOVE_LIQUIDATION), - //LEVEL_UP_MOVE(32, MOVE_SOAK), + LEVEL_UP_MOVE(17, MOVE_TEARFUL_LOOK), + LEVEL_UP_MOVE(20, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(24, MOVE_U_TURN), + LEVEL_UP_MOVE(28, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(32, MOVE_SOAK), LEVEL_UP_MOVE(36, MOVE_RAIN_DANCE), LEVEL_UP_END }; @@ -16646,29 +16646,29 @@ static const struct LevelUpMove sDrizzileLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_BIND), LEVEL_UP_MOVE(12, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(19, MOVE_TEARFUL_LOOK), - //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(30, MOVE_U_TURN), - //LEVEL_UP_MOVE(36, MOVE_LIQUIDATION), - //LEVEL_UP_MOVE(42, MOVE_SOAK), + LEVEL_UP_MOVE(19, MOVE_TEARFUL_LOOK), + LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(30, MOVE_U_TURN), + LEVEL_UP_MOVE(36, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(42, MOVE_SOAK), LEVEL_UP_MOVE(48, MOVE_RAIN_DANCE), LEVEL_UP_END }; static const struct LevelUpMove sInteleonLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SNIPE_SHOT), - //LEVEL_UP_MOVE( 1, MOVE_SNIPE_SHOT), - //LEVEL_UP_MOVE( 1, MOVE_ACROBATICS), + LEVEL_UP_MOVE( 1, MOVE_SNIPE_SHOT), + LEVEL_UP_MOVE( 1, MOVE_ACROBATICS), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_BIND), LEVEL_UP_MOVE(12, MOVE_WATER_PULSE), - //LEVEL_UP_MOVE(19, MOVE_TEARFUL_LOOK), - //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(30, MOVE_U_TURN), - //LEVEL_UP_MOVE(38, MOVE_LIQUIDATION), - //LEVEL_UP_MOVE(46, MOVE_SOAK), + LEVEL_UP_MOVE(19, MOVE_TEARFUL_LOOK), + LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(30, MOVE_U_TURN), + LEVEL_UP_MOVE(38, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(46, MOVE_SOAK), LEVEL_UP_MOVE(54, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(62, MOVE_HYDRO_PUMP), LEVEL_UP_END @@ -16678,7 +16678,7 @@ static const struct LevelUpMove sSkwovetLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_BITE), - //LEVEL_UP_MOVE(10, MOVE_STUFF_CHEEKS), + LEVEL_UP_MOVE(10, MOVE_STUFF_CHEEKS), LEVEL_UP_MOVE(15, MOVE_STOCKPILE), LEVEL_UP_MOVE(15, MOVE_SWALLOW), LEVEL_UP_MOVE(15, MOVE_SPIT_UP), @@ -16687,17 +16687,17 @@ static const struct LevelUpMove sSkwovetLevelUpLearnset[] = { LEVEL_UP_MOVE(30, MOVE_COUNTER), LEVEL_UP_MOVE(35, MOVE_BULLET_SEED), LEVEL_UP_MOVE(40, MOVE_SUPER_FANG), - //LEVEL_UP_MOVE(45, MOVE_BELCH), + LEVEL_UP_MOVE(45, MOVE_BELCH), LEVEL_UP_END }; static const struct LevelUpMove sGreedentLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_COVET), + //LEVEL_UP_MOVE( 0, MOVE_COVET), LEVEL_UP_MOVE( 1, MOVE_COVET), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_BITE), - //LEVEL_UP_MOVE( 1, MOVE_STUFF_CHEEKS), + LEVEL_UP_MOVE( 1, MOVE_STUFF_CHEEKS), LEVEL_UP_MOVE(15, MOVE_STOCKPILE), LEVEL_UP_MOVE(15, MOVE_SWALLOW), LEVEL_UP_MOVE(15, MOVE_SPIT_UP), @@ -16706,72 +16706,72 @@ static const struct LevelUpMove sGreedentLevelUpLearnset[] = { LEVEL_UP_MOVE(34, MOVE_COUNTER), LEVEL_UP_MOVE(41, MOVE_BULLET_SEED), LEVEL_UP_MOVE(48, MOVE_SUPER_FANG), - //LEVEL_UP_MOVE(55, MOVE_BELCH), + LEVEL_UP_MOVE(55, MOVE_BELCH), LEVEL_UP_END }; static const struct LevelUpMove sRookideeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 4, MOVE_POWER_TRIP), - //LEVEL_UP_MOVE( 8, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 4, MOVE_POWER_TRIP), + LEVEL_UP_MOVE( 8, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(16, MOVE_PLUCK), + LEVEL_UP_MOVE(16, MOVE_PLUCK), LEVEL_UP_MOVE(20, MOVE_TAUNT), LEVEL_UP_MOVE(24, MOVE_SCARY_FACE), LEVEL_UP_MOVE(28, MOVE_DRILL_PECK), LEVEL_UP_MOVE(32, MOVE_SWAGGER), - //LEVEL_UP_MOVE(36, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(36, MOVE_BRAVE_BIRD), LEVEL_UP_END }; static const struct LevelUpMove sCorvisquireLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP), - //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(16, MOVE_PLUCK), + LEVEL_UP_MOVE(16, MOVE_PLUCK), LEVEL_UP_MOVE(22, MOVE_TAUNT), LEVEL_UP_MOVE(28, MOVE_SCARY_FACE), LEVEL_UP_MOVE(34, MOVE_DRILL_PECK), LEVEL_UP_MOVE(40, MOVE_SWAGGER), - //LEVEL_UP_MOVE(46, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(46, MOVE_BRAVE_BIRD), LEVEL_UP_END }; static const struct LevelUpMove sCorviknightLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_STEEL_WING), + //LEVEL_UP_MOVE( 0, MOVE_STEEL_WING), LEVEL_UP_MOVE( 1, MOVE_STEEL_WING), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE( 1, MOVE_METAL_SOUND), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP), - //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(16, MOVE_PLUCK), + LEVEL_UP_MOVE(16, MOVE_PLUCK), LEVEL_UP_MOVE(22, MOVE_TAUNT), LEVEL_UP_MOVE(28, MOVE_SCARY_FACE), LEVEL_UP_MOVE(34, MOVE_DRILL_PECK), LEVEL_UP_MOVE(42, MOVE_SWAGGER), - //LEVEL_UP_MOVE(50, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(50, MOVE_BRAVE_BIRD), LEVEL_UP_END }; static const struct LevelUpMove sBlipbugLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), LEVEL_UP_END }; static const struct LevelUpMove sDottlerLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_REFLECT), - LEVEL_UP_MOVE( 0, MOVE_LIGHT_SCREEN), - LEVEL_UP_MOVE( 0, MOVE_CONFUSION), + //LEVEL_UP_MOVE( 0, MOVE_REFLECT), + //LEVEL_UP_MOVE( 0, MOVE_LIGHT_SCREEN), + //LEVEL_UP_MOVE( 0, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_REFLECT), LEVEL_UP_MOVE( 1, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), LEVEL_UP_END }; @@ -16779,19 +16779,19 @@ static const struct LevelUpMove sOrbeetleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_REFLECT), LEVEL_UP_MOVE( 1, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE( 4, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 8, MOVE_MAGIC_COAT), LEVEL_UP_MOVE(12, MOVE_AGILITY), LEVEL_UP_MOVE(16, MOVE_PSYBEAM), LEVEL_UP_MOVE(20, MOVE_HYPNOSIS), - //LEVEL_UP_MOVE(24, MOVE_ALLY_SWITCH), - //LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(24, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(32, MOVE_MIRROR_COAT), LEVEL_UP_MOVE(36, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(40, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(40, MOVE_AFTER_YOU), LEVEL_UP_MOVE(44, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(48, MOVE_PSYCHIC_TERRAIN), + LEVEL_UP_MOVE(48, MOVE_PSYCHIC_TERRAIN), LEVEL_UP_END }; @@ -16799,65 +16799,65 @@ static const struct LevelUpMove sNickitLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 4, MOVE_BEAT_UP), - //LEVEL_UP_MOVE( 8, MOVE_HONE_CLAWS), - //LEVEL_UP_MOVE(12, MOVE_SNARL), - //LEVEL_UP_MOVE(16, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(20, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(28, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(32, MOVE_TAIL_SLAP), - //LEVEL_UP_MOVE(36, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE( 8, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(12, MOVE_SNARL), + LEVEL_UP_MOVE(16, MOVE_ASSURANCE), + LEVEL_UP_MOVE(20, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(28, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(32, MOVE_TAIL_SLAP), + LEVEL_UP_MOVE(36, MOVE_FOUL_PLAY), LEVEL_UP_END }; static const struct LevelUpMove sThievulLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_THIEF), + //LEVEL_UP_MOVE( 0, MOVE_THIEF), LEVEL_UP_MOVE( 1, MOVE_THIEF), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_BEAT_UP), - //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), - //LEVEL_UP_MOVE(12, MOVE_SNARL), - //LEVEL_UP_MOVE(16, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(22, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(34, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), - //LEVEL_UP_MOVE(46, MOVE_FOUL_PLAY), - //LEVEL_UP_MOVE(52, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(12, MOVE_SNARL), + LEVEL_UP_MOVE(16, MOVE_ASSURANCE), + LEVEL_UP_MOVE(22, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(34, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), + LEVEL_UP_MOVE(46, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(52, MOVE_PARTING_SHOT), LEVEL_UP_END }; static const struct LevelUpMove sGossifleurLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 4, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 8, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(16, MOVE_ROUND), - //LEVEL_UP_MOVE(21, MOVE_LEAF_TORNADO), + LEVEL_UP_MOVE(16, MOVE_ROUND), + LEVEL_UP_MOVE(21, MOVE_LEAF_TORNADO), LEVEL_UP_MOVE(24, MOVE_SYNTHESIS), LEVEL_UP_MOVE(28, MOVE_HYPER_VOICE), LEVEL_UP_MOVE(32, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(36, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(36, MOVE_LEAF_STORM), LEVEL_UP_END }; static const struct LevelUpMove sEldegossLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_COTTON_SPORE), + //LEVEL_UP_MOVE( 0, MOVE_COTTON_SPORE), LEVEL_UP_MOVE( 1, MOVE_COTTON_SPORE), - //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF), - //LEVEL_UP_MOVE(16, MOVE_ROUND), - //LEVEL_UP_MOVE(23, MOVE_LEAF_TORNADO), + LEVEL_UP_MOVE(16, MOVE_ROUND), + LEVEL_UP_MOVE(23, MOVE_LEAF_TORNADO), LEVEL_UP_MOVE(28, MOVE_SYNTHESIS), LEVEL_UP_MOVE(34, MOVE_HYPER_VOICE), LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(46, MOVE_LEAF_STORM), - //LEVEL_UP_MOVE(52, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(46, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(52, MOVE_COTTON_GUARD), LEVEL_UP_END }; @@ -16865,14 +16865,14 @@ static const struct LevelUpMove sWoolooLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), - //LEVEL_UP_MOVE( 8, MOVE_COPYCAT), - //LEVEL_UP_MOVE(12, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE( 8, MOVE_COPYCAT), + LEVEL_UP_MOVE(12, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE(21, MOVE_HEADBUTT), LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(28, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE(28, MOVE_GUARD_SWAP), LEVEL_UP_MOVE(32, MOVE_REVERSAL), - //LEVEL_UP_MOVE(36, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(36, MOVE_COTTON_GUARD), LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; @@ -16881,16 +16881,16 @@ static const struct LevelUpMove sDubwoolLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), - //LEVEL_UP_MOVE( 1, MOVE_COPYCAT), - //LEVEL_UP_MOVE(12, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE( 1, MOVE_COPYCAT), + LEVEL_UP_MOVE(12, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE(21, MOVE_HEADBUTT), LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(32, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE(32, MOVE_GUARD_SWAP), LEVEL_UP_MOVE(38, MOVE_REVERSAL), - //LEVEL_UP_MOVE(44, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE(44, MOVE_COTTON_GUARD), LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(56, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(56, MOVE_LAST_RESORT), LEVEL_UP_END }; @@ -16901,60 +16901,60 @@ static const struct LevelUpMove sChewtleLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_PROTECT), LEVEL_UP_MOVE(21, MOVE_HEADBUTT), LEVEL_UP_MOVE(28, MOVE_COUNTER), - //LEVEL_UP_MOVE(35, MOVE_JAW_LOCK), - //LEVEL_UP_MOVE(42, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(35, MOVE_JAW_LOCK), + LEVEL_UP_MOVE(42, MOVE_LIQUIDATION), LEVEL_UP_MOVE(49, MOVE_BODY_SLAM), LEVEL_UP_END }; static const struct LevelUpMove sDrednawLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ROCK_TOMB), + //LEVEL_UP_MOVE( 0, MOVE_ROCK_TOMB), LEVEL_UP_MOVE( 1, MOVE_ROCK_TOMB), - //LEVEL_UP_MOVE( 1, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE( 1, MOVE_RAZOR_SHELL), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), - //LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE(21, MOVE_HEADBUTT), LEVEL_UP_MOVE(30, MOVE_COUNTER), - //LEVEL_UP_MOVE(39, MOVE_JAW_LOCK), - //LEVEL_UP_MOVE(48, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(39, MOVE_JAW_LOCK), + LEVEL_UP_MOVE(48, MOVE_LIQUIDATION), LEVEL_UP_MOVE(57, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(66, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(66, MOVE_HEAD_SMASH), LEVEL_UP_END }; static const struct LevelUpMove sYamperLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), - //LEVEL_UP_MOVE( 5, MOVE_NUZZLE), + LEVEL_UP_MOVE( 5, MOVE_NUZZLE), LEVEL_UP_MOVE(10, MOVE_BITE), LEVEL_UP_MOVE(15, MOVE_ROAR), LEVEL_UP_MOVE(20, MOVE_SPARK), LEVEL_UP_MOVE(26, MOVE_CHARM), LEVEL_UP_MOVE(30, MOVE_CRUNCH), LEVEL_UP_MOVE(35, MOVE_CHARGE), - //LEVEL_UP_MOVE(40, MOVE_WILD_CHARGE), - //LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(40, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH), LEVEL_UP_END }; static const struct LevelUpMove sBoltundLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ELECTRIFY), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIFY), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), - //LEVEL_UP_MOVE( 1, MOVE_NUZZLE), + LEVEL_UP_MOVE( 1, MOVE_NUZZLE), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE(15, MOVE_ROAR), LEVEL_UP_MOVE(20, MOVE_SPARK), LEVEL_UP_MOVE(28, MOVE_CHARM), LEVEL_UP_MOVE(34, MOVE_CRUNCH), LEVEL_UP_MOVE(41, MOVE_CHARGE), - //LEVEL_UP_MOVE(48, MOVE_WILD_CHARGE), - //LEVEL_UP_MOVE(55, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(62, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE(48, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(55, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(62, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_END }; @@ -16962,48 +16962,48 @@ static const struct LevelUpMove sRolycolyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), LEVEL_UP_MOVE( 5, MOVE_RAPID_SPIN), - //LEVEL_UP_MOVE(10, MOVE_SMACK_DOWN), - //LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(10, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(25, MOVE_INCINERATE), - //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), - //LEVEL_UP_MOVE(35, MOVE_HEAT_CRASH), + LEVEL_UP_MOVE(25, MOVE_INCINERATE), + LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(35, MOVE_HEAT_CRASH), LEVEL_UP_MOVE(40, MOVE_ROCK_BLAST), LEVEL_UP_END }; static const struct LevelUpMove sCarkolLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_FLAME_CHARGE), - //LEVEL_UP_MOVE( 1, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE( 1, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), - //LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN), - //LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(27, MOVE_INCINERATE), - //LEVEL_UP_MOVE(35, MOVE_STEALTH_ROCK), - //LEVEL_UP_MOVE(41, MOVE_HEAT_CRASH), + LEVEL_UP_MOVE(27, MOVE_INCINERATE), + LEVEL_UP_MOVE(35, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(41, MOVE_HEAT_CRASH), LEVEL_UP_MOVE(48, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(55, MOVE_BURN_UP), + LEVEL_UP_MOVE(55, MOVE_BURN_UP), LEVEL_UP_END }; static const struct LevelUpMove sCoalossalLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_TAR_SHOT), - //LEVEL_UP_MOVE( 1, MOVE_TAR_SHOT), - //LEVEL_UP_MOVE( 1, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE( 1, MOVE_TAR_SHOT), + LEVEL_UP_MOVE( 1, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), - //LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN), - //LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(27, MOVE_INCINERATE), - //LEVEL_UP_MOVE(37, MOVE_STEALTH_ROCK), - //LEVEL_UP_MOVE(45, MOVE_HEAT_CRASH), + LEVEL_UP_MOVE(27, MOVE_INCINERATE), + LEVEL_UP_MOVE(37, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(45, MOVE_HEAT_CRASH), LEVEL_UP_MOVE(54, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(63, MOVE_BURN_UP), + LEVEL_UP_MOVE(63, MOVE_BURN_UP), LEVEL_UP_END }; @@ -17014,29 +17014,29 @@ static const struct LevelUpMove sApplinLevelUpLearnset[] = { }; static const struct LevelUpMove sFlappleLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK), + //LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK), LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), LEVEL_UP_MOVE( 1, MOVE_RECYCLE), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_TWISTER), - //LEVEL_UP_MOVE( 4, MOVE_ACID_SPRAY), - //LEVEL_UP_MOVE( 8, MOVE_ACROBATICS), + LEVEL_UP_MOVE( 4, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 8, MOVE_ACROBATICS), LEVEL_UP_MOVE(12, MOVE_LEECH_SEED), LEVEL_UP_MOVE(16, MOVE_PROTECT), LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(24, MOVE_DRAGON_DANCE), - //LEVEL_UP_MOVE(28, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(32, MOVE_GRAV_APPLE), + LEVEL_UP_MOVE(28, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(32, MOVE_GRAV_APPLE), LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(40, MOVE_FLY), - //LEVEL_UP_MOVE(44, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(44, MOVE_DRAGON_RUSH), LEVEL_UP_END }; static const struct LevelUpMove sAppletunLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_HEADBUTT), + //LEVEL_UP_MOVE( 0, MOVE_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_RECYCLE), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), @@ -17049,11 +17049,11 @@ static const struct LevelUpMove sAppletunLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_PROTECT), LEVEL_UP_MOVE(20, MOVE_BULLET_SEED), LEVEL_UP_MOVE(24, MOVE_RECOVER), - //LEVEL_UP_MOVE(28, MOVE_APPLE_ACID), + LEVEL_UP_MOVE(28, MOVE_APPLE_ACID), LEVEL_UP_MOVE(32, MOVE_BODY_SLAM), LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL), LEVEL_UP_END }; @@ -17061,14 +17061,14 @@ static const struct LevelUpMove sSilicobraLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WRAP), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 5, MOVE_MINIMIZE), - //LEVEL_UP_MOVE(10, MOVE_BRUTAL_SWING), - //LEVEL_UP_MOVE(15, MOVE_BULLDOZE), + LEVEL_UP_MOVE(10, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(15, MOVE_BULLDOZE), LEVEL_UP_MOVE(20, MOVE_HEADBUTT), LEVEL_UP_MOVE(25, MOVE_GLARE), LEVEL_UP_MOVE(30, MOVE_DIG), LEVEL_UP_MOVE(35, MOVE_SANDSTORM), LEVEL_UP_MOVE(40, MOVE_SLAM), - //LEVEL_UP_MOVE(45, MOVE_COIL), + LEVEL_UP_MOVE(45, MOVE_COIL), LEVEL_UP_MOVE(50, MOVE_SAND_TOMB), LEVEL_UP_END }; @@ -17078,27 +17078,27 @@ static const struct LevelUpMove sSandacondaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WRAP), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_MINIMIZE), - //LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING), - //LEVEL_UP_MOVE(15, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(15, MOVE_BULLDOZE), LEVEL_UP_MOVE(20, MOVE_HEADBUTT), LEVEL_UP_MOVE(25, MOVE_GLARE), LEVEL_UP_MOVE(30, MOVE_DIG), LEVEL_UP_MOVE(35, MOVE_SANDSTORM), LEVEL_UP_MOVE(42, MOVE_SLAM), - //LEVEL_UP_MOVE(49, MOVE_COIL), + LEVEL_UP_MOVE(49, MOVE_COIL), LEVEL_UP_MOVE(51, MOVE_SAND_TOMB), LEVEL_UP_END }; static const struct LevelUpMove sCramorantLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_BELCH), + 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( 7, MOVE_WATER_GUN), LEVEL_UP_MOVE(14, MOVE_FURY_ATTACK), - //LEVEL_UP_MOVE(21, MOVE_PLUCK), + LEVEL_UP_MOVE(21, MOVE_PLUCK), LEVEL_UP_MOVE(28, MOVE_DIVE), LEVEL_UP_MOVE(35, MOVE_DRILL_PECK), LEVEL_UP_MOVE(42, MOVE_AMNESIA), @@ -17109,37 +17109,37 @@ static const struct LevelUpMove sCramorantLevelUpLearnset[] = { static const struct LevelUpMove sArrokudaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_PECK), - //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), LEVEL_UP_MOVE( 6, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(12, MOVE_BITE), LEVEL_UP_MOVE(18, MOVE_AGILITY), LEVEL_UP_MOVE(24, MOVE_DIVE), - //LEVEL_UP_MOVE(30, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE(30, MOVE_LASER_FOCUS), LEVEL_UP_MOVE(36, MOVE_CRUNCH), - //LEVEL_UP_MOVE(42, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(42, MOVE_LIQUIDATION), LEVEL_UP_MOVE(48, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sBarraskewdaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP), LEVEL_UP_MOVE( 1, MOVE_PECK), - //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE(18, MOVE_AGILITY), LEVEL_UP_MOVE(24, MOVE_DIVE), - //LEVEL_UP_MOVE(32, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE(32, MOVE_LASER_FOCUS), LEVEL_UP_MOVE(40, MOVE_CRUNCH), - //LEVEL_UP_MOVE(48, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(48, MOVE_LIQUIDATION), LEVEL_UP_MOVE(56, MOVE_DOUBLE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sToxelLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_BELCH), - //LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK), - //LEVEL_UP_MOVE( 1, MOVE_NUZZLE), + LEVEL_UP_MOVE( 1, MOVE_BELCH), + LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK), + LEVEL_UP_MOVE( 1, MOVE_NUZZLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_FLAIL), LEVEL_UP_MOVE( 1, MOVE_ACID), @@ -17147,32 +17147,32 @@ static const struct LevelUpMove sToxelLevelUpLearnset[] = { }; static const struct LevelUpMove sToxtricityLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SPARK), + //LEVEL_UP_MOVE( 0, MOVE_SPARK), LEVEL_UP_MOVE( 1, MOVE_SPARK), - //LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), - //LEVEL_UP_MOVE( 1, MOVE_BELCH), - //LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK), - //LEVEL_UP_MOVE( 1, MOVE_NUZZLE), + LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), + LEVEL_UP_MOVE( 1, MOVE_BELCH), + LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK), + LEVEL_UP_MOVE( 1, MOVE_NUZZLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_FLAIL), LEVEL_UP_MOVE( 1, MOVE_ACID), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), - //LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 4, MOVE_CHARGE), LEVEL_UP_MOVE( 8, MOVE_SHOCK_WAVE), LEVEL_UP_MOVE(12, MOVE_SCARY_FACE), LEVEL_UP_MOVE(16, MOVE_TAUNT), - //LEVEL_UP_MOVE(20, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(20, MOVE_VENOSHOCK), LEVEL_UP_MOVE(24, MOVE_SCREECH), LEVEL_UP_MOVE(28, MOVE_SWAGGER), LEVEL_UP_MOVE(32, MOVE_TOXIC), - //LEVEL_UP_MOVE(36, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(40, MOVE_POISON_JAB), - //LEVEL_UP_MOVE(44, MOVE_OVERDRIVE), - //LEVEL_UP_MOVE(48, MOVE_BOOMBURST), - //LEVEL_UP_MOVE(52, MOVE_SHIFT_GEAR), + LEVEL_UP_MOVE(36, MOVE_DISCHARGE), + LEVEL_UP_MOVE(40, MOVE_POISON_JAB), + LEVEL_UP_MOVE(44, MOVE_OVERDRIVE), + LEVEL_UP_MOVE(48, MOVE_BOOMBURST), + LEVEL_UP_MOVE(52, MOVE_SHIFT_GEAR), LEVEL_UP_END }; @@ -17182,39 +17182,39 @@ static const struct LevelUpMove sSizzlipedeLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_WRAP), LEVEL_UP_MOVE(10, MOVE_BITE), LEVEL_UP_MOVE(15, MOVE_FLAME_WHEEL), - //LEVEL_UP_MOVE(20, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(25, MOVE_COIL), + LEVEL_UP_MOVE(20, MOVE_BUG_BITE), + LEVEL_UP_MOVE(25, MOVE_COIL), LEVEL_UP_MOVE(30, MOVE_SLAM), LEVEL_UP_MOVE(35, MOVE_FIRE_SPIN), LEVEL_UP_MOVE(40, MOVE_CRUNCH), - //LEVEL_UP_MOVE(45, MOVE_FIRE_LASH), - //LEVEL_UP_MOVE(50, MOVE_LUNGE), - //LEVEL_UP_MOVE(55, MOVE_BURN_UP), + LEVEL_UP_MOVE(45, MOVE_FIRE_LASH), + LEVEL_UP_MOVE(50, MOVE_LUNGE), + LEVEL_UP_MOVE(55, MOVE_BURN_UP), LEVEL_UP_END }; static const struct LevelUpMove sCentiskorchLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_INFERNO), + LEVEL_UP_MOVE( 1, MOVE_INFERNO), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), LEVEL_UP_MOVE( 1, MOVE_WRAP), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE(15, MOVE_FLAME_WHEEL), - //LEVEL_UP_MOVE(20, MOVE_BUG_BITE), - //LEVEL_UP_MOVE(25, MOVE_COIL), + LEVEL_UP_MOVE(20, MOVE_BUG_BITE), + LEVEL_UP_MOVE(25, MOVE_COIL), LEVEL_UP_MOVE(32, MOVE_SLAM), LEVEL_UP_MOVE(39, MOVE_FIRE_SPIN), LEVEL_UP_MOVE(46, MOVE_CRUNCH), - //LEVEL_UP_MOVE(53, MOVE_FIRE_LASH), - //LEVEL_UP_MOVE(60, MOVE_LUNGE), - //LEVEL_UP_MOVE(67, MOVE_BURN_UP), + LEVEL_UP_MOVE(53, MOVE_FIRE_LASH), + LEVEL_UP_MOVE(60, MOVE_LUNGE), + LEVEL_UP_MOVE(67, MOVE_BURN_UP), LEVEL_UP_END }; static const struct LevelUpMove sClobbopusLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 5, MOVE_FEINT), + LEVEL_UP_MOVE( 5, MOVE_FEINT), LEVEL_UP_MOVE(10, MOVE_BIND), LEVEL_UP_MOVE(15, MOVE_DETECT), LEVEL_UP_MOVE(20, MOVE_BRICK_BREAK), @@ -17228,11 +17228,11 @@ static const struct LevelUpMove sClobbopusLevelUpLearnset[] = { static const struct LevelUpMove sGrapploctLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_OCTOLOCK), - //LEVEL_UP_MOVE( 1, MOVE_OCTOLOCK), + LEVEL_UP_MOVE( 1, MOVE_OCTOLOCK), LEVEL_UP_MOVE( 1, MOVE_OCTAZOOKA), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_FEINT), LEVEL_UP_MOVE( 1, MOVE_BIND), LEVEL_UP_MOVE(15, MOVE_DETECT), LEVEL_UP_MOVE(20, MOVE_BRICK_BREAK), @@ -17241,172 +17241,172 @@ static const struct LevelUpMove sGrapploctLevelUpLearnset[] = { LEVEL_UP_MOVE(35, MOVE_TAUNT), LEVEL_UP_MOVE(40, MOVE_REVERSAL), LEVEL_UP_MOVE(45, MOVE_SUPERPOWER), - //LEVEL_UP_MOVE(50, MOVE_TOPSY_TURVY), + LEVEL_UP_MOVE(50, MOVE_TOPSY_TURVY), LEVEL_UP_END }; static const struct LevelUpMove sSinisteaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), - //LEVEL_UP_MOVE( 6, MOVE_AROMATIC_MIST), + LEVEL_UP_MOVE( 6, MOVE_AROMATIC_MIST), LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(18, MOVE_PROTECT), - //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(30, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(48, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(54, MOVE_MEMENTO), - //LEVEL_UP_MOVE(60, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(60, MOVE_SHELL_SMASH), LEVEL_UP_END }; static const struct LevelUpMove sPolteageistLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_TEATIME), - //LEVEL_UP_MOVE( 1, MOVE_TEATIME), - //LEVEL_UP_MOVE( 1, MOVE_STRENGTH_SAP), + LEVEL_UP_MOVE( 1, MOVE_TEATIME), + LEVEL_UP_MOVE( 1, MOVE_STRENGTH_SAP), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), - //LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), + LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(18, MOVE_PROTECT), - //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(30, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT), LEVEL_UP_MOVE(48, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(54, MOVE_MEMENTO), - //LEVEL_UP_MOVE(60, MOVE_SHELL_SMASH), + LEVEL_UP_MOVE(60, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(66, MOVE_CURSE), LEVEL_UP_END }; static const struct LevelUpMove sHatennaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), - //LEVEL_UP_MOVE( 5, MOVE_LIFE_DEW), - //LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 5, MOVE_LIFE_DEW), + LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(15, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(20, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE), - //LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(35, MOVE_CALM_MIND), LEVEL_UP_MOVE(40, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(45, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(45, MOVE_HEALING_WISH), LEVEL_UP_END }; static const struct LevelUpMove sHattremLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_BRUTAL_SWING), - //LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), - //LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW), - //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(15, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(20, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE), - //LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(37, MOVE_CALM_MIND), LEVEL_UP_MOVE(44, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(51, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(51, MOVE_HEALING_WISH), LEVEL_UP_END }; static const struct LevelUpMove sHattereneLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_PSYCHO_CUT), - //LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT), - //LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), - //LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW), - //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(15, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(20, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE), - //LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(37, MOVE_CALM_MIND), LEVEL_UP_MOVE(46, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(55, MOVE_HEALING_WISH), - //LEVEL_UP_MOVE(64, MOVE_MAGIC_POWDER), + LEVEL_UP_MOVE(55, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(64, MOVE_MAGIC_POWDER), LEVEL_UP_END }; static const struct LevelUpMove sImpidimpLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE( 1, MOVE_CONFIDE), + LEVEL_UP_MOVE( 1, MOVE_CONFIDE), LEVEL_UP_MOVE( 4, MOVE_BITE), LEVEL_UP_MOVE( 8, MOVE_FLATTER), LEVEL_UP_MOVE(12, MOVE_FAKE_TEARS), - //LEVEL_UP_MOVE(16, MOVE_ASSURANCE), + LEVEL_UP_MOVE(16, MOVE_ASSURANCE), LEVEL_UP_MOVE(20, MOVE_SWAGGER), - //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(28, MOVE_TORMENT), - //LEVEL_UP_MOVE(33, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(36, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(40, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(44, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(33, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(36, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(40, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(44, MOVE_FOUL_PLAY), LEVEL_UP_END }; static const struct LevelUpMove sMorgremLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_FALSE_SURRENDER), - //LEVEL_UP_MOVE( 1, MOVE_FALSE_SURRENDER), + LEVEL_UP_MOVE( 1, MOVE_FALSE_SURRENDER), LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE( 1, MOVE_CONFIDE), + LEVEL_UP_MOVE( 1, MOVE_CONFIDE), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_FLATTER), LEVEL_UP_MOVE(12, MOVE_FAKE_TEARS), - //LEVEL_UP_MOVE(16, MOVE_ASSURANCE), + LEVEL_UP_MOVE(16, MOVE_ASSURANCE), LEVEL_UP_MOVE(20, MOVE_SWAGGER), - //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(28, MOVE_TORMENT), - //LEVEL_UP_MOVE(35, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(40, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(52, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(35, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(40, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(52, MOVE_FOUL_PLAY), LEVEL_UP_END }; static const struct LevelUpMove sGrimmsnarlLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SPIRIT_BREAK), - //LEVEL_UP_MOVE( 1, MOVE_SPIRIT_BREAK), - //LEVEL_UP_MOVE( 1, MOVE_FALSE_SURRENDER), + LEVEL_UP_MOVE( 1, MOVE_SPIRIT_BREAK), + LEVEL_UP_MOVE( 1, MOVE_FALSE_SURRENDER), LEVEL_UP_MOVE( 1, MOVE_BULK_UP), - //LEVEL_UP_MOVE( 1, MOVE_POWER_UP_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_POWER_UP_PUNCH), LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE( 1, MOVE_CONFIDE), + LEVEL_UP_MOVE( 1, MOVE_CONFIDE), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 1, MOVE_FLATTER), LEVEL_UP_MOVE(12, MOVE_FAKE_TEARS), - //LEVEL_UP_MOVE(16, MOVE_ASSURANCE), + LEVEL_UP_MOVE(16, MOVE_ASSURANCE), LEVEL_UP_MOVE(20, MOVE_SWAGGER), - //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(28, MOVE_TORMENT), - //LEVEL_UP_MOVE(35, MOVE_DARK_PULSE), - //LEVEL_UP_MOVE(40, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(48, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(56, MOVE_FOUL_PLAY), - //LEVEL_UP_MOVE(64, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(35, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(40, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(48, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(56, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(64, MOVE_HAMMER_ARM), LEVEL_UP_END }; static const struct LevelUpMove sObstagoonLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_OBSTRUCT), - //LEVEL_UP_MOVE( 1, MOVE_OBSTRUCT), + LEVEL_UP_MOVE( 1, MOVE_OBSTRUCT), LEVEL_UP_MOVE( 1, MOVE_CROSS_CHOP), LEVEL_UP_MOVE( 1, MOVE_SUBMISSION), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), LEVEL_UP_MOVE( 1, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LICK), - //LEVEL_UP_MOVE( 9, MOVE_SNARL), + LEVEL_UP_MOVE( 9, MOVE_SNARL), LEVEL_UP_MOVE(12, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(18, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(23, MOVE_REST), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), @@ -17419,12 +17419,12 @@ static const struct LevelUpMove sObstagoonLevelUpLearnset[] = { static const struct LevelUpMove sPerrserkerLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), + LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), + LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 1, MOVE_GROWL), - //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE(12, MOVE_PAY_DAY), LEVEL_UP_MOVE(16, MOVE_METAL_CLAW), @@ -17446,10 +17446,10 @@ static const struct LevelUpMove sCursolaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE(15, MOVE_SPITE), LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(25, MOVE_HEX), + LEVEL_UP_MOVE(25, MOVE_HEX), LEVEL_UP_MOVE(30, MOVE_CURSE), - //LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP), - //LEVEL_UP_MOVE(40, MOVE_POWER_GEM), + LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP), + LEVEL_UP_MOVE(40, MOVE_POWER_GEM), LEVEL_UP_MOVE(45, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(50, MOVE_GRUDGE), LEVEL_UP_MOVE(55, MOVE_MIRROR_COAT), @@ -17457,34 +17457,34 @@ static const struct LevelUpMove sCursolaLevelUpLearnset[] = { }; static const struct LevelUpMove sSirfetchdLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_IRON_DEFENSE), + //LEVEL_UP_MOVE( 0, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE( 1, MOVE_FIRST_IMPRESSION), + LEVEL_UP_MOVE( 1, MOVE_FIRST_IMPRESSION), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(15, MOVE_ROCK_SMASH), - //LEVEL_UP_MOVE(20, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(20, MOVE_BRUTAL_SWING), LEVEL_UP_MOVE(25, MOVE_DETECT), LEVEL_UP_MOVE(30, MOVE_KNOCK_OFF), - //LEVEL_UP_MOVE(35, MOVE_DEFOG), + LEVEL_UP_MOVE(35, MOVE_DEFOG), LEVEL_UP_MOVE(40, MOVE_BRICK_BREAK), LEVEL_UP_MOVE(45, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(50, MOVE_SLAM), LEVEL_UP_MOVE(55, MOVE_LEAF_BLADE), - //LEVEL_UP_MOVE(60, MOVE_FINAL_GAMBIT), - //LEVEL_UP_MOVE(65, MOVE_BRAVE_BIRD), - //LEVEL_UP_MOVE(70, MOVE_METEOR_ASSAULT), + LEVEL_UP_MOVE(60, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(65, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(70, MOVE_METEOR_ASSAULT), LEVEL_UP_END }; static const struct LevelUpMove sMrRimeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FAKE_TEARS), LEVEL_UP_MOVE( 1, MOVE_SLACK_OFF), - //LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), + LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), LEVEL_UP_MOVE( 1, MOVE_BLOCK), - //LEVEL_UP_MOVE( 1, MOVE_COPYCAT), + LEVEL_UP_MOVE( 1, MOVE_COPYCAT), LEVEL_UP_MOVE( 1, MOVE_ENCORE), LEVEL_UP_MOVE( 1, MOVE_ROLE_PLAY), LEVEL_UP_MOVE( 1, MOVE_PROTECT), @@ -17493,21 +17493,21 @@ static const struct LevelUpMove sMrRimeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE( 1, MOVE_REFLECT), LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), - //LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM), - //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 1, MOVE_BATON_PASS), - //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), + LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), LEVEL_UP_MOVE(12, MOVE_CONFUSION), - //LEVEL_UP_MOVE(16, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE(16, MOVE_ALLY_SWITCH), LEVEL_UP_MOVE(20, MOVE_ICY_WIND), LEVEL_UP_MOVE(24, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE(28, MOVE_PSYBEAM), LEVEL_UP_MOVE(32, MOVE_HYPNOSIS), LEVEL_UP_MOVE(36, MOVE_MIRROR_COAT), - //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(44, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(44, MOVE_FREEZE_DRY), LEVEL_UP_MOVE(48, MOVE_PSYCHIC), LEVEL_UP_MOVE(52, MOVE_TEETER_DANCE), LEVEL_UP_END @@ -17515,58 +17515,58 @@ static const struct LevelUpMove sMrRimeLevelUpLearnset[] = { static const struct LevelUpMove sRunerigusLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), - //LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW), LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_HAZE), LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(12, MOVE_DISABLE), - //LEVEL_UP_MOVE(16, MOVE_BRUTAL_SWING), - //LEVEL_UP_MOVE(20, MOVE_CRAFTY_SHIELD), - //LEVEL_UP_MOVE(24, MOVE_HEX), + LEVEL_UP_MOVE(16, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(20, MOVE_CRAFTY_SHIELD), + LEVEL_UP_MOVE(24, MOVE_HEX), LEVEL_UP_MOVE(28, MOVE_MEAN_LOOK), LEVEL_UP_MOVE(32, MOVE_SLAM), LEVEL_UP_MOVE(38, MOVE_CURSE), LEVEL_UP_MOVE(44, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(50, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE(56, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(56, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(56, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(56, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(62, MOVE_DESTINY_BOND), LEVEL_UP_END }; static const struct LevelUpMove sMilceryLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), - //LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), + LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), LEVEL_UP_MOVE( 5, MOVE_SWEET_KISS), LEVEL_UP_MOVE(10, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(20, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(25, MOVE_ATTRACT), LEVEL_UP_MOVE(30, MOVE_ACID_ARMOR), - //LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(40, MOVE_RECOVER), - //LEVEL_UP_MOVE(45, MOVE_MISTY_TERRAIN), - //LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(45, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT), LEVEL_UP_END }; static const struct LevelUpMove sAlcremieLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_DECORATE), - //LEVEL_UP_MOVE( 1, 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_AROMATIC_MIST), LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), - //LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(20, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(25, MOVE_ATTRACT), LEVEL_UP_MOVE(30, MOVE_ACID_ARMOR), - //LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(40, MOVE_RECOVER), - //LEVEL_UP_MOVE(45, MOVE_MISTY_TERRAIN), - //LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(45, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT), LEVEL_UP_END }; @@ -17579,10 +17579,10 @@ static const struct LevelUpMove sFalinksLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_BULK_UP), LEVEL_UP_MOVE(25, MOVE_ENDURE), LEVEL_UP_MOVE(30, MOVE_REVERSAL), - //LEVEL_UP_MOVE(35, MOVE_FIRST_IMPRESSION), - //LEVEL_UP_MOVE(40, MOVE_NO_RETREAT), + LEVEL_UP_MOVE(35, MOVE_FIRST_IMPRESSION), + LEVEL_UP_MOVE(40, MOVE_NO_RETREAT), LEVEL_UP_MOVE(45, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(55, MOVE_MEGAHORN), LEVEL_UP_MOVE(60, MOVE_COUNTER), LEVEL_UP_END @@ -17598,56 +17598,56 @@ static const struct LevelUpMove sPincurchinLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(30, MOVE_RECOVER), LEVEL_UP_MOVE(35, MOVE_CURSE), - //LEVEL_UP_MOVE(40, MOVE_ELECTRIC_TERRAIN), - //LEVEL_UP_MOVE(45, MOVE_POISON_JAB), - //LEVEL_UP_MOVE(50, MOVE_ZING_ZAP), - //LEVEL_UP_MOVE(55, MOVE_ACUPRESSURE), - //LEVEL_UP_MOVE(60, MOVE_DISCHARGE), + LEVEL_UP_MOVE(40, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE(45, MOVE_POISON_JAB), + LEVEL_UP_MOVE(50, MOVE_ZING_ZAP), + LEVEL_UP_MOVE(55, MOVE_ACUPRESSURE), + LEVEL_UP_MOVE(60, MOVE_DISCHARGE), LEVEL_UP_END }; static const struct LevelUpMove sSnomLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), - //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), LEVEL_UP_END }; static const struct LevelUpMove sFrosmothLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ICY_WIND), + //LEVEL_UP_MOVE( 0, MOVE_ICY_WIND), LEVEL_UP_MOVE( 1, MOVE_ICY_WIND), LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), - //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_ATTRACT), LEVEL_UP_MOVE( 4, MOVE_STUN_SPORE), - //LEVEL_UP_MOVE( 8, MOVE_INFESTATION), + LEVEL_UP_MOVE( 8, MOVE_INFESTATION), LEVEL_UP_MOVE(12, MOVE_MIST), - //LEVEL_UP_MOVE(16, MOVE_DEFOG), + LEVEL_UP_MOVE(16, MOVE_DEFOG), LEVEL_UP_MOVE(21, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE(24, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(28, MOVE_HAIL), - //LEVEL_UP_MOVE(32, MOVE_BUG_BUZZ), - //LEVEL_UP_MOVE(36, MOVE_AURORA_VEIL), + LEVEL_UP_MOVE(32, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(36, MOVE_AURORA_VEIL), LEVEL_UP_MOVE(40, MOVE_BLIZZARD), - //LEVEL_UP_MOVE(44, MOVE_TAILWIND), - //LEVEL_UP_MOVE(48, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE(52, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE(44, MOVE_TAILWIND), + LEVEL_UP_MOVE(48, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(52, MOVE_QUIVER_DANCE), LEVEL_UP_END }; static const struct LevelUpMove sStonjournerLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 1, MOVE_BLOCK), - //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(12, MOVE_ROCK_TOMB), - //LEVEL_UP_MOVE(18, MOVE_GRAVITY), + LEVEL_UP_MOVE(18, MOVE_GRAVITY), LEVEL_UP_MOVE(24, MOVE_STOMP), - //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(36, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(42, MOVE_BODY_SLAM), - //LEVEL_UP_MOVE(48, MOVE_WIDE_GUARD), - //LEVEL_UP_MOVE(54, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE(60, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(48, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(54, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(60, MOVE_STONE_EDGE), LEVEL_UP_MOVE(66, MOVE_MEGA_KICK), LEVEL_UP_END }; @@ -17660,28 +17660,28 @@ static const struct LevelUpMove sEiscueLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_ICY_WIND), LEVEL_UP_MOVE(24, MOVE_HEADBUTT), LEVEL_UP_MOVE(30, MOVE_AMNESIA), - //LEVEL_UP_MOVE(36, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE(36, MOVE_FREEZE_DRY), LEVEL_UP_MOVE(42, MOVE_HAIL), - //LEVEL_UP_MOVE(48, MOVE_AURORA_VEIL), + LEVEL_UP_MOVE(48, MOVE_AURORA_VEIL), LEVEL_UP_MOVE(54, MOVE_SURF), LEVEL_UP_MOVE(60, MOVE_BLIZZARD), LEVEL_UP_END }; static const struct LevelUpMove sIndeedeeLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 5, MOVE_ENCORE), - //LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(15, MOVE_PSYBEAM), LEVEL_UP_MOVE(20, MOVE_HELPING_HAND), - //LEVEL_UP_MOVE(25, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(25, MOVE_AFTER_YOU), LEVEL_UP_MOVE(30, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(35, MOVE_PSYCHIC), LEVEL_UP_MOVE(40, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(45, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(50, MOVE_PSYCHIC_TERRAIN), - //LEVEL_UP_MOVE(55, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(45, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(50, MOVE_PSYCHIC_TERRAIN), + LEVEL_UP_MOVE(55, MOVE_LAST_RESORT), LEVEL_UP_END }; @@ -17689,7 +17689,7 @@ static const struct LevelUpMove sMorpekoLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 5, MOVE_LEER), - //LEVEL_UP_MOVE(10, MOVE_POWER_TRIP), + LEVEL_UP_MOVE(10, MOVE_POWER_TRIP), LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(20, MOVE_FLATTER), LEVEL_UP_MOVE(25, MOVE_BITE), @@ -17698,7 +17698,7 @@ static const struct LevelUpMove sMorpekoLevelUpLearnset[] = { LEVEL_UP_MOVE(40, MOVE_AGILITY), LEVEL_UP_MOVE(45, MOVE_BULLET_SEED), LEVEL_UP_MOVE(50, MOVE_CRUNCH), - //LEVEL_UP_MOVE(55, MOVE_AURA_WHEEL), + LEVEL_UP_MOVE(55, MOVE_AURA_WHEEL), LEVEL_UP_MOVE(60, MOVE_THRASH), LEVEL_UP_END }; @@ -17708,33 +17708,33 @@ static const struct LevelUpMove sCufantLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 5, MOVE_ROLLOUT), LEVEL_UP_MOVE(10, MOVE_ROCK_SMASH), - //LEVEL_UP_MOVE(15, MOVE_BULLDOZE), + LEVEL_UP_MOVE(15, MOVE_BULLDOZE), LEVEL_UP_MOVE(20, MOVE_STOMP), LEVEL_UP_MOVE(25, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(30, MOVE_DIG), LEVEL_UP_MOVE(35, MOVE_STRENGTH), - //LEVEL_UP_MOVE(40, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(50, MOVE_HIGH_HORSEPOWER), + LEVEL_UP_MOVE(40, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(50, MOVE_HIGH_HORSEPOWER), LEVEL_UP_MOVE(55, MOVE_SUPERPOWER), LEVEL_UP_END }; static const struct LevelUpMove sCopperajahLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_HEAVY_SLAM), - //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), - //LEVEL_UP_MOVE(15, MOVE_BULLDOZE), + LEVEL_UP_MOVE(15, MOVE_BULLDOZE), LEVEL_UP_MOVE(20, MOVE_STOMP), LEVEL_UP_MOVE(25, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(30, MOVE_DIG), LEVEL_UP_MOVE(37, MOVE_STRENGTH), - //LEVEL_UP_MOVE(44, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(51, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE(58, MOVE_HIGH_HORSEPOWER), + LEVEL_UP_MOVE(44, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(51, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(58, MOVE_HIGH_HORSEPOWER), LEVEL_UP_MOVE(65, MOVE_SUPERPOWER), LEVEL_UP_END }; @@ -17745,14 +17745,14 @@ static const struct LevelUpMove sDracozoltLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_CHARGE), LEVEL_UP_MOVE(14, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(28, MOVE_PLUCK), - //LEVEL_UP_MOVE(35, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(28, MOVE_PLUCK), + LEVEL_UP_MOVE(35, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE(42, MOVE_STOMP), LEVEL_UP_MOVE(49, MOVE_SLAM), - //LEVEL_UP_MOVE(56, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(63, MOVE_BOLT_BEAK), - //LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(77, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(56, MOVE_DISCHARGE), + LEVEL_UP_MOVE(63, MOVE_BOLT_BEAK), + LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(77, MOVE_DRAGON_RUSH), LEVEL_UP_END }; @@ -17760,15 +17760,15 @@ static const struct LevelUpMove sArctozoltLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 7, MOVE_CHARGE), - //LEVEL_UP_MOVE(14, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(14, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(28, MOVE_PLUCK), - //LEVEL_UP_MOVE(35, MOVE_AVALANCHE), - //LEVEL_UP_MOVE(42, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE(28, MOVE_PLUCK), + LEVEL_UP_MOVE(35, MOVE_AVALANCHE), + LEVEL_UP_MOVE(42, MOVE_FREEZE_DRY), LEVEL_UP_MOVE(49, MOVE_SLAM), - //LEVEL_UP_MOVE(56, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(63, MOVE_BOLT_BEAK), - //LEVEL_UP_MOVE(70, MOVE_ICICLE_CRASH), + LEVEL_UP_MOVE(56, MOVE_DISCHARGE), + LEVEL_UP_MOVE(63, MOVE_BOLT_BEAK), + LEVEL_UP_MOVE(70, MOVE_ICICLE_CRASH), LEVEL_UP_MOVE(77, MOVE_BLIZZARD), LEVEL_UP_END }; @@ -17777,16 +17777,16 @@ static const struct LevelUpMove sDracovishLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 7, MOVE_PROTECT), - //LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING), LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(28, MOVE_BITE), LEVEL_UP_MOVE(35, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(42, MOVE_STOMP), LEVEL_UP_MOVE(49, MOVE_SUPER_FANG), LEVEL_UP_MOVE(56, MOVE_CRUNCH), - //LEVEL_UP_MOVE(63, MOVE_FISHIOUS_REND), - //LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(77, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(63, MOVE_FISHIOUS_REND), + LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(77, MOVE_DRAGON_RUSH), LEVEL_UP_END }; @@ -17797,12 +17797,12 @@ static const struct LevelUpMove sArctovishLevelUpLearnset[] = { LEVEL_UP_MOVE(14, MOVE_ICY_WIND), LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(28, MOVE_BITE), - //LEVEL_UP_MOVE(35, MOVE_AURORA_VEIL), - //LEVEL_UP_MOVE(42, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE(35, MOVE_AURORA_VEIL), + LEVEL_UP_MOVE(42, MOVE_FREEZE_DRY), LEVEL_UP_MOVE(49, MOVE_SUPER_FANG), LEVEL_UP_MOVE(56, MOVE_CRUNCH), - //LEVEL_UP_MOVE(63, MOVE_FISHIOUS_REND), - //LEVEL_UP_MOVE(70, MOVE_ICICLE_CRASH), + LEVEL_UP_MOVE(63, MOVE_FISHIOUS_REND), + LEVEL_UP_MOVE(70, MOVE_ICICLE_CRASH), LEVEL_UP_MOVE(77, MOVE_BLIZZARD), LEVEL_UP_END }; @@ -17811,22 +17811,22 @@ static const struct LevelUpMove sDuraludonLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 6, MOVE_ROCK_SMASH), - //LEVEL_UP_MOVE(12, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(12, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(18, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(24, MOVE_BREAKING_SWIPE), - //LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE(24, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(42, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE(42, MOVE_LASER_FOCUS), LEVEL_UP_MOVE(48, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(54, MOVE_FLASH_CANNON), - //LEVEL_UP_MOVE(60, MOVE_METAL_BURST), + LEVEL_UP_MOVE(54, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(60, MOVE_METAL_BURST), LEVEL_UP_MOVE(66, MOVE_HYPER_BEAM), LEVEL_UP_END }; static const struct LevelUpMove sDreepyLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - //LEVEL_UP_MOVE( 1, MOVE_INFESTATION), + LEVEL_UP_MOVE( 1, MOVE_INFESTATION), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_END @@ -17834,102 +17834,102 @@ static const struct LevelUpMove sDreepyLevelUpLearnset[] = { static const struct LevelUpMove sDrakloakLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - //LEVEL_UP_MOVE( 1, MOVE_INFESTATION), + LEVEL_UP_MOVE( 1, MOVE_INFESTATION), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 6, MOVE_LOCK_ON), - //LEVEL_UP_MOVE(12, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(18, MOVE_HEX), + LEVEL_UP_MOVE(12, MOVE_ASSURANCE), + LEVEL_UP_MOVE(18, MOVE_HEX), LEVEL_UP_MOVE(24, MOVE_AGILITY), - //LEVEL_UP_MOVE(30, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE(36, MOVE_U_TURN), + LEVEL_UP_MOVE(30, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(36, MOVE_U_TURN), LEVEL_UP_MOVE(42, MOVE_DRAGON_DANCE), - //LEVEL_UP_MOVE(48, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(48, MOVE_PHANTOM_FORCE), LEVEL_UP_MOVE(54, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(61, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(61, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE(66, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(72, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(72, MOVE_LAST_RESORT), LEVEL_UP_END }; static const struct LevelUpMove sDragapultLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_DRAGON_DARTS), - //LEVEL_UP_MOVE( 1, MOVE_DRAGON_DARTS), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_DARTS), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), - //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - //LEVEL_UP_MOVE( 1, MOVE_INFESTATION), + LEVEL_UP_MOVE( 1, MOVE_INFESTATION), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE( 6, MOVE_LOCK_ON), - //LEVEL_UP_MOVE(12, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(18, MOVE_HEX), + LEVEL_UP_MOVE(12, MOVE_ASSURANCE), + LEVEL_UP_MOVE(18, MOVE_HEX), LEVEL_UP_MOVE(24, MOVE_AGILITY), - //LEVEL_UP_MOVE(30, MOVE_DOUBLE_HIT), - //LEVEL_UP_MOVE(36, MOVE_U_TURN), + LEVEL_UP_MOVE(30, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(36, MOVE_U_TURN), LEVEL_UP_MOVE(42, MOVE_DRAGON_DANCE), - //LEVEL_UP_MOVE(48, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(48, MOVE_PHANTOM_FORCE), LEVEL_UP_MOVE(54, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(63, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(63, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE(70, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(78, MOVE_LAST_RESORT), + LEVEL_UP_MOVE(78, MOVE_LAST_RESORT), LEVEL_UP_END }; static const struct LevelUpMove sZacianLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD), - //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_HOWL), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE(11, MOVE_SLASH), LEVEL_UP_MOVE(22, MOVE_SWORDS_DANCE), - //LEVEL_UP_MOVE(33, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(44, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE(33, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(44, MOVE_LASER_FOCUS), LEVEL_UP_MOVE(55, MOVE_CRUNCH), - //LEVEL_UP_MOVE(66, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(77, MOVE_CLOSE_COMBAT), - //LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(66, MOVE_MOONBLAST), + LEVEL_UP_MOVE(77, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT), LEVEL_UP_END }; static const struct LevelUpMove sZamazentaLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), - //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_HOWL), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BITE), LEVEL_UP_MOVE(11, MOVE_SLASH), LEVEL_UP_MOVE(22, MOVE_IRON_DEFENSE), - //LEVEL_UP_MOVE(33, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(44, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE(33, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(44, MOVE_LASER_FOCUS), LEVEL_UP_MOVE(55, MOVE_CRUNCH), - //LEVEL_UP_MOVE(66, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(77, MOVE_CLOSE_COMBAT), - //LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(66, MOVE_MOONBLAST), + LEVEL_UP_MOVE(77, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT), LEVEL_UP_END }; static const struct LevelUpMove sEternatusLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POISON_TAIL), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), - //LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL), LEVEL_UP_MOVE( 1, MOVE_AGILITY), LEVEL_UP_MOVE( 8, MOVE_TOXIC), - //LEVEL_UP_MOVE(16, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(16, MOVE_VENOSHOCK), LEVEL_UP_MOVE(24, MOVE_DRAGON_DANCE), - //LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), - //LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), + LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(48, MOVE_FLAMETHROWER), - //LEVEL_UP_MOVE(56, MOVE_DYNAMAX_CANNON), + LEVEL_UP_MOVE(56, MOVE_DYNAMAX_CANNON), LEVEL_UP_MOVE(64, MOVE_COSMIC_POWER), LEVEL_UP_MOVE(72, MOVE_RECOVER), LEVEL_UP_MOVE(80, MOVE_HYPER_BEAM), - //LEVEL_UP_MOVE(88, MOVE_ETERNABEAM), + LEVEL_UP_MOVE(88, MOVE_ETERNABEAM), LEVEL_UP_END }; @@ -17944,18 +17944,18 @@ static const struct LevelUpMove sKubfuLevelUpLearnset[] = { LEVEL_UP_MOVE(24, MOVE_BRICK_BREAK), LEVEL_UP_MOVE(28, MOVE_DETECT), LEVEL_UP_MOVE(32, MOVE_BULK_UP), - //LEVEL_UP_MOVE(36, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(36, MOVE_IRON_HEAD), LEVEL_UP_MOVE(40, MOVE_DYNAMIC_PUNCH), LEVEL_UP_MOVE(44, MOVE_COUNTER), - //LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(52, MOVE_FOCUS_PUNCH), LEVEL_UP_END }; static const struct LevelUpMove sUrshifuLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_WICKED_BLOW), - //LEVEL_UP_MOVE( 1, MOVE_WICKED_BLOW), - //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_WICKED_BLOW), + LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ENDURE), @@ -17966,10 +17966,10 @@ static const struct LevelUpMove sUrshifuLevelUpLearnset[] = { LEVEL_UP_MOVE(24, MOVE_BRICK_BREAK), LEVEL_UP_MOVE(28, MOVE_DETECT), LEVEL_UP_MOVE(32, MOVE_BULK_UP), - //LEVEL_UP_MOVE(36, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(36, MOVE_IRON_HEAD), LEVEL_UP_MOVE(40, MOVE_DYNAMIC_PUNCH), LEVEL_UP_MOVE(44, MOVE_COUNTER), - //LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(52, MOVE_FOCUS_PUNCH), LEVEL_UP_END }; @@ -17982,30 +17982,30 @@ static const struct LevelUpMove sZarudeLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_GROWTH), LEVEL_UP_MOVE(24, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(30, MOVE_SCARY_FACE), - //LEVEL_UP_MOVE(36, MOVE_GRASS_KNOT), + LEVEL_UP_MOVE(36, MOVE_GRASS_KNOT), LEVEL_UP_MOVE(42, MOVE_BITE), - //LEVEL_UP_MOVE(48, MOVE_U_TURN), + LEVEL_UP_MOVE(48, MOVE_U_TURN), LEVEL_UP_MOVE(54, MOVE_SWAGGER), - //LEVEL_UP_MOVE(60, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(60, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(66, MOVE_SYNTHESIS), - //LEVEL_UP_MOVE(72, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(72, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(78, MOVE_THRASH), - //LEVEL_UP_MOVE(84, MOVE_POWER_WHIP), - //LEVEL_UP_MOVE(90, MOVE_JUNGLE_HEALING), + LEVEL_UP_MOVE(84, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(90, MOVE_JUNGLE_HEALING), LEVEL_UP_END }; static const struct LevelUpMove sRegielekiLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), - //LEVEL_UP_MOVE( 6, MOVE_ELECTROWEB), + LEVEL_UP_MOVE( 6, MOVE_ELECTROWEB), LEVEL_UP_MOVE(12, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(18, MOVE_SHOCK_WAVE), LEVEL_UP_MOVE(24, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE(30, MOVE_EXTREME_SPEED), - //LEVEL_UP_MOVE(36, MOVE_THUNDER_CAGE), + LEVEL_UP_MOVE(36, MOVE_THUNDER_CAGE), LEVEL_UP_MOVE(42, MOVE_THUNDERBOLT), - //LEVEL_UP_MOVE(48, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE(48, MOVE_MAGNET_RISE), LEVEL_UP_MOVE(54, MOVE_THRASH), LEVEL_UP_MOVE(60, MOVE_LOCK_ON), LEVEL_UP_MOVE(66, MOVE_ZAP_CANNON), @@ -18023,11 +18023,11 @@ static const struct LevelUpMove sRegidragoLevelUpLearnset[] = { LEVEL_UP_MOVE(24, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(30, MOVE_CRUNCH), LEVEL_UP_MOVE(36, MOVE_DRAGON_CLAW), - //LEVEL_UP_MOVE(42, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(42, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(48, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(54, MOVE_THRASH), - //LEVEL_UP_MOVE(60, MOVE_LASER_FOCUS), - //LEVEL_UP_MOVE(66, MOVE_DRAGON_ENERGY), + LEVEL_UP_MOVE(60, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE(66, MOVE_DRAGON_ENERGY), LEVEL_UP_MOVE(72, MOVE_HYPER_BEAM), LEVEL_UP_MOVE(78, MOVE_EXPLOSION), LEVEL_UP_END @@ -18037,11 +18037,11 @@ static const struct LevelUpMove sGlastrierLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 6, MOVE_DOUBLE_KICK), - //LEVEL_UP_MOVE(12, MOVE_AVALANCHE), + LEVEL_UP_MOVE(12, MOVE_AVALANCHE), LEVEL_UP_MOVE(18, MOVE_STOMP), LEVEL_UP_MOVE(24, MOVE_TORMENT), LEVEL_UP_MOVE(30, MOVE_MIST), - //LEVEL_UP_MOVE(36, MOVE_ICICLE_CRASH), + LEVEL_UP_MOVE(36, MOVE_ICICLE_CRASH), LEVEL_UP_MOVE(42, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(48, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(54, MOVE_THRASH), @@ -18055,7 +18055,7 @@ static const struct LevelUpMove sSpectrierLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 6, MOVE_DOUBLE_KICK), - //LEVEL_UP_MOVE(12, MOVE_HEX), + LEVEL_UP_MOVE(12, MOVE_HEX), LEVEL_UP_MOVE(18, MOVE_STOMP), LEVEL_UP_MOVE(24, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(30, MOVE_HAZE), @@ -18065,7 +18065,7 @@ static const struct LevelUpMove sSpectrierLevelUpLearnset[] = { LEVEL_UP_MOVE(54, MOVE_THRASH), LEVEL_UP_MOVE(60, MOVE_DISABLE), LEVEL_UP_MOVE(66, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(72, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(72, MOVE_NASTY_PLOT), LEVEL_UP_END }; @@ -18074,20 +18074,110 @@ static const struct LevelUpMove sCalyrexLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_GROWTH), - //LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW), + LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW), LEVEL_UP_MOVE(16, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(24, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(24, MOVE_PSYSHOCK), LEVEL_UP_MOVE(32, MOVE_HELPING_HAND), LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(56, MOVE_PSYCHIC), LEVEL_UP_MOVE(64, MOVE_LEECH_SEED), - //LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE), LEVEL_UP_MOVE(80, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE(88, MOVE_FUTURE_SIGHT), LEVEL_UP_END }; +static const struct LevelUpMove sWyrdeerLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_CONFUSION), + LEVEL_UP_MOVE( 9, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(15, MOVE_CALM_MIND), + //LEVEL_UP_MOVE(21, MOVE_PSYSHIELD_BASH), + LEVEL_UP_MOVE(29, MOVE_EXTRASENSORY), + //LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sKleavorLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 6, MOVE_SILVER_WIND), + LEVEL_UP_MOVE(11, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE(14, MOVE_DOUBLE_HIT), + //LEVEL_UP_MOVE(14, MOVE_STEALTH_ROCK), + //LEVEL_UP_MOVE(18, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE), + //LEVEL_UP_MOVE(29, MOVE_STONE_AXE), + //LEVEL_UP_MOVE(34, MOVE_X_SCISSOR), + //LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sUrsalunaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + //LEVEL_UP_MOVE( 6, MOVE_BABY_DOLL_EYES), + //LEVEL_UP_MOVE(11, MOVE_BULLDOZE), + LEVEL_UP_MOVE(18, MOVE_SLASH), + //LEVEL_UP_MOVE(25, MOVE_PLAY_ROUGH), + //LEVEL_UP_MOVE(34, MOVE_HIGH_HORSEPOWER), + LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), + //LEVEL_UP_MOVE(47, MOVE_HEADLONG_RUSH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sBasculegionLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + //LEVEL_UP_MOVE( 6, MOVE_AQUA_JET), + LEVEL_UP_MOVE(11, MOVE_BITE), + LEVEL_UP_MOVE(11, MOVE_HEX), + //LEVEL_UP_MOVE(18, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(25, MOVE_CRUNCH), + LEVEL_UP_MOVE(25, MOVE_SHADOW_BALL), + //LEVEL_UP_MOVE(34, MOVE_WAVE_CRASH), + LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSneaslerLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 6, MOVE_ROCK_SMASH), + //LEVEL_UP_MOVE(11, MOVE_DIRE_CLAW), + LEVEL_UP_MOVE(11, MOVE_SWIFT), + LEVEL_UP_MOVE(18, MOVE_SLASH), + //LEVEL_UP_MOVE(25, MOVE_POISON_JAB), + LEVEL_UP_MOVE(34, MOVE_SWORDS_DANCE), + //LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sOverqwilLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 5, MOVE_SPIKES), + LEVEL_UP_MOVE( 9, MOVE_PIN_MISSILE), + //LEVEL_UP_MOVE(15, MOVE_BARB_BARRAGE), + LEVEL_UP_MOVE(21, MOVE_WATER_PULSE), + //LEVEL_UP_MOVE(26, MOVE_DARK_PULSE), + //LEVEL_UP_MOVE(29, MOVE_POISON_JAB), + //LEVEL_UP_MOVE(37, MOVE_AQUA_TAIL, + LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(57, MOVE_SELF_DESTRUCT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sEnamorusLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 7, MOVE_BITE), + LEVEL_UP_MOVE(11, MOVE_TWISTER), + //LEVEL_UP_MOVE(14, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(22, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY), + LEVEL_UP_MOVE(41, MOVE_CRUNCH), + //LEVEL_UP_MOVE(47, MOVE_MOONBLAST), + //LEVEL_UP_MOVE( 1, MOVE_SPRINGTIDE_STORM), + LEVEL_UP_END +}; + static const struct LevelUpMove sRattataAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -18096,9 +18186,9 @@ static const struct LevelUpMove sRattataAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_BITE), LEVEL_UP_MOVE(13, MOVE_PURSUIT), LEVEL_UP_MOVE(16, MOVE_HYPER_FANG), - //LEVEL_UP_MOVE(19, MOVE_ASSURANCE), + LEVEL_UP_MOVE(19, MOVE_ASSURANCE), LEVEL_UP_MOVE(22, MOVE_CRUNCH), - //LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(28, MOVE_SUPER_FANG), LEVEL_UP_MOVE(31, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(34, MOVE_ENDEAVOR), @@ -18106,7 +18196,7 @@ static const struct LevelUpMove sRattataAlolanLevelUpLearnset[] = { }; static const struct LevelUpMove sRaticateAlolanLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE), + //LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -18118,9 +18208,9 @@ static const struct LevelUpMove sRaticateAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_BITE), LEVEL_UP_MOVE(13, MOVE_PURSUIT), LEVEL_UP_MOVE(16, MOVE_HYPER_FANG), - //LEVEL_UP_MOVE(19, MOVE_ASSURANCE), + LEVEL_UP_MOVE(19, MOVE_ASSURANCE), LEVEL_UP_MOVE(24, MOVE_CRUNCH), - //LEVEL_UP_MOVE(29, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(29, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(34, MOVE_SUPER_FANG), LEVEL_UP_MOVE(39, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(44, MOVE_ENDEAVOR), @@ -18128,9 +18218,9 @@ static const struct LevelUpMove sRaticateAlolanLevelUpLearnset[] = { }; static const struct LevelUpMove sRaichuAlolanLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_PSYCHIC), + //LEVEL_UP_MOVE( 0, MOVE_PSYCHIC), LEVEL_UP_MOVE( 1, MOVE_PSYCHIC), - //LEVEL_UP_MOVE( 1, MOVE_SPEED_SWAP), + LEVEL_UP_MOVE( 1, MOVE_SPEED_SWAP), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -18151,8 +18241,8 @@ static const struct LevelUpMove sSandshrewAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(23, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(26, MOVE_SLASH), - //LEVEL_UP_MOVE(30, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(34, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(30, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(34, MOVE_GYRO_BALL), LEVEL_UP_MOVE(38, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(42, MOVE_HAIL), LEVEL_UP_MOVE(46, MOVE_BLIZZARD), @@ -18160,10 +18250,10 @@ static const struct LevelUpMove sSandshrewAlolanLevelUpLearnset[] = { }; static const struct LevelUpMove sSandslashAlolanLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ICICLE_SPEAR), + //LEVEL_UP_MOVE( 0, MOVE_ICICLE_SPEAR), LEVEL_UP_MOVE( 1, MOVE_ICICLE_SPEAR), - //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), - //LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH), + LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), + LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH), LEVEL_UP_MOVE( 1, MOVE_SLASH), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_ICE_BALL), @@ -18175,14 +18265,14 @@ static const struct LevelUpMove sVulpixAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 7, MOVE_ROAR), - //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), - //LEVEL_UP_MOVE(10, MOVE_ICE_SHARD), + LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(10, MOVE_ICE_SHARD), LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(15, MOVE_ICY_WIND), - //LEVEL_UP_MOVE(18, MOVE_PAYBACK), + LEVEL_UP_MOVE(18, MOVE_PAYBACK), LEVEL_UP_MOVE(20, MOVE_MIST), LEVEL_UP_MOVE(23, MOVE_FEINT_ATTACK), - //LEVEL_UP_MOVE(26, MOVE_HEX), + LEVEL_UP_MOVE(26, MOVE_HEX), LEVEL_UP_MOVE(28, MOVE_AURORA_BEAM), LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(34, MOVE_SAFEGUARD), @@ -18190,18 +18280,18 @@ static const struct LevelUpMove sVulpixAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE(39, MOVE_IMPRISON), LEVEL_UP_MOVE(42, MOVE_BLIZZARD), LEVEL_UP_MOVE(44, MOVE_GRUDGE), - //LEVEL_UP_MOVE(47, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(47, MOVE_CAPTIVATE), LEVEL_UP_MOVE(50, MOVE_SHEER_COLD), 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_DAZZLING_GLEAM), LEVEL_UP_MOVE( 1, MOVE_IMPRISON), - //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), LEVEL_UP_MOVE( 1, MOVE_ICE_BEAM), - //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), + LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), LEVEL_UP_END @@ -18214,22 +18304,22 @@ static const struct LevelUpMove sDiglettAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_ASTONISH), LEVEL_UP_MOVE(10, MOVE_MUD_SLAP), LEVEL_UP_MOVE(14, MOVE_MAGNITUDE), - //LEVEL_UP_MOVE(18, MOVE_BULLDOZE), - //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(25, MOVE_MUD_BOMB), - //LEVEL_UP_MOVE(28, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(18, MOVE_BULLDOZE), + LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(25, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(28, MOVE_EARTH_POWER), LEVEL_UP_MOVE(31, MOVE_DIG), - //LEVEL_UP_MOVE(35, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(35, MOVE_IRON_HEAD), LEVEL_UP_MOVE(39, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(43, MOVE_FISSURE), LEVEL_UP_END }; static const struct LevelUpMove sDugtrioAlolanLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SAND_TOMB), + //LEVEL_UP_MOVE( 0, MOVE_SAND_TOMB), LEVEL_UP_MOVE( 1, MOVE_SAND_TOMB), - //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), @@ -18238,12 +18328,12 @@ static const struct LevelUpMove sDugtrioAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_ASTONISH), LEVEL_UP_MOVE(10, MOVE_MUD_SLAP), LEVEL_UP_MOVE(14, MOVE_MAGNITUDE), - //LEVEL_UP_MOVE(18, MOVE_BULLDOZE), - //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(25, MOVE_MUD_BOMB), - //LEVEL_UP_MOVE(30, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(18, MOVE_BULLDOZE), + LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(25, MOVE_MUD_BOMB), + LEVEL_UP_MOVE(30, MOVE_EARTH_POWER), LEVEL_UP_MOVE(35, MOVE_DIG), - //LEVEL_UP_MOVE(41, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(41, MOVE_IRON_HEAD), LEVEL_UP_MOVE(47, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(53, MOVE_FISSURE), LEVEL_UP_END @@ -18260,21 +18350,21 @@ static const struct LevelUpMove sMeowthAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_TAUNT), LEVEL_UP_MOVE(30, MOVE_PAY_DAY), LEVEL_UP_MOVE(33, MOVE_SLASH), - //LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(41, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(46, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(50, MOVE_FEINT), - //LEVEL_UP_MOVE(55, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(41, MOVE_ASSURANCE), + LEVEL_UP_MOVE(46, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(50, MOVE_FEINT), + LEVEL_UP_MOVE(55, MOVE_DARK_PULSE), LEVEL_UP_END }; static const struct LevelUpMove sPersianAlolanLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SWIFT), + //LEVEL_UP_MOVE( 0, MOVE_SWIFT), LEVEL_UP_MOVE( 1, MOVE_SWIFT), - //LEVEL_UP_MOVE( 1, MOVE_QUASH), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH), - //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), + LEVEL_UP_MOVE( 1, MOVE_QUASH), + LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -18285,14 +18375,14 @@ static const struct LevelUpMove sPersianAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE(17, MOVE_SCREECH), LEVEL_UP_MOVE(22, MOVE_FEINT_ATTACK), LEVEL_UP_MOVE(25, MOVE_TAUNT), - //LEVEL_UP_MOVE(32, MOVE_POWER_GEM), + LEVEL_UP_MOVE(32, MOVE_POWER_GEM), LEVEL_UP_MOVE(37, MOVE_SLASH), - //LEVEL_UP_MOVE(44, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(49, MOVE_ASSURANCE), - //LEVEL_UP_MOVE(56, MOVE_CAPTIVATE), - //LEVEL_UP_MOVE(61, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE(65, MOVE_FEINT), - //LEVEL_UP_MOVE(69, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(44, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(49, MOVE_ASSURANCE), + LEVEL_UP_MOVE(56, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(61, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(65, MOVE_FEINT), + LEVEL_UP_MOVE(69, MOVE_DARK_PULSE), LEVEL_UP_END }; @@ -18300,19 +18390,19 @@ static const struct LevelUpMove sGeodudeAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 4, MOVE_CHARGE), - //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), + 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), - //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(22, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT), - //LEVEL_UP_MOVE(28, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(28, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(30, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(34, MOVE_DISCHARGE), + LEVEL_UP_MOVE(34, MOVE_DISCHARGE), LEVEL_UP_MOVE(36, MOVE_EXPLOSION), LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(42, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(42, MOVE_STONE_EDGE), LEVEL_UP_END }; @@ -18320,45 +18410,45 @@ static const struct LevelUpMove sGravelerAlolanLevelUpLearnset[] = { 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( 1, MOVE_ROCK_POLISH), LEVEL_UP_MOVE( 4, MOVE_CHARGE), - //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), + 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), - //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(22, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT), - //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(40, MOVE_DISCHARGE), + LEVEL_UP_MOVE(40, MOVE_DISCHARGE), LEVEL_UP_MOVE(44, MOVE_EXPLOSION), LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE(54, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(54, MOVE_STONE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sGolemAlolanLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), + 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( 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( 6, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(10, MOVE_STEAMROLLER), LEVEL_UP_MOVE(12, MOVE_SPARK), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), - //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(22, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT), - //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST), - //LEVEL_UP_MOVE(40, MOVE_DISCHARGE), + LEVEL_UP_MOVE(40, MOVE_DISCHARGE), 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_MOVE(54, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(60, MOVE_HEAVY_SLAM), LEVEL_UP_END }; @@ -18368,23 +18458,23 @@ static const struct LevelUpMove sGrimerAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_HARDEN), LEVEL_UP_MOVE( 7, MOVE_BITE), LEVEL_UP_MOVE(12, MOVE_DISABLE), - //LEVEL_UP_MOVE(15, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(15, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(18, MOVE_POISON_FANG), LEVEL_UP_MOVE(21, MOVE_MINIMIZE), - //LEVEL_UP_MOVE(26, MOVE_FLING), + LEVEL_UP_MOVE(26, MOVE_FLING), LEVEL_UP_MOVE(29, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(32, MOVE_CRUNCH), LEVEL_UP_MOVE(37, MOVE_SCREECH), - //LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT), LEVEL_UP_MOVE(43, MOVE_ACID_ARMOR), - //LEVEL_UP_MOVE(46, MOVE_BELCH), + LEVEL_UP_MOVE(46, MOVE_BELCH), LEVEL_UP_MOVE(48, MOVE_MEMENTO), LEVEL_UP_END }; static const struct LevelUpMove sMukAlolanLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_VENOM_DRENCH), - //LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_HARDEN), @@ -18392,31 +18482,31 @@ static const struct LevelUpMove sMukAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_HARDEN), LEVEL_UP_MOVE( 7, MOVE_BITE), LEVEL_UP_MOVE(12, MOVE_DISABLE), - //LEVEL_UP_MOVE(15, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(15, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(18, MOVE_POISON_FANG), LEVEL_UP_MOVE(21, MOVE_MINIMIZE), - //LEVEL_UP_MOVE(26, MOVE_FLING), + LEVEL_UP_MOVE(26, MOVE_FLING), LEVEL_UP_MOVE(29, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(32, MOVE_CRUNCH), LEVEL_UP_MOVE(37, MOVE_SCREECH), - //LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT), + LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT), LEVEL_UP_MOVE(46, MOVE_ACID_ARMOR), - //LEVEL_UP_MOVE(52, MOVE_BELCH), + LEVEL_UP_MOVE(52, MOVE_BELCH), LEVEL_UP_MOVE(57, MOVE_MEMENTO), LEVEL_UP_END }; 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_DRAGON_HAMMER), + LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB), LEVEL_UP_MOVE( 1, MOVE_BARRAGE), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE(17, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(17, MOVE_PSYSHOCK), LEVEL_UP_MOVE(27, MOVE_EGG_BOMB), - //LEVEL_UP_MOVE(37, MOVE_WOOD_HAMMER), - //LEVEL_UP_MOVE(47, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(37, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE(47, MOVE_LEAF_STORM), LEVEL_UP_END }; @@ -18429,16 +18519,16 @@ static const struct LevelUpMove sMarowakAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_BONE_CLUB), LEVEL_UP_MOVE(11, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(13, MOVE_LEER), - //LEVEL_UP_MOVE(17, MOVE_HEX), + LEVEL_UP_MOVE(17, MOVE_HEX), LEVEL_UP_MOVE(21, MOVE_BONEMERANG), LEVEL_UP_MOVE(23, MOVE_WILL_O_WISP), - //LEVEL_UP_MOVE(27, MOVE_SHADOW_BONE), + LEVEL_UP_MOVE(27, MOVE_SHADOW_BONE), LEVEL_UP_MOVE(33, MOVE_THRASH), - //LEVEL_UP_MOVE(37, MOVE_FLING), - //LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(37, MOVE_FLING), + LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM), LEVEL_UP_MOVE(49, MOVE_ENDEAVOR), - //LEVEL_UP_MOVE(53, MOVE_FLARE_BLITZ), - //LEVEL_UP_MOVE(59, MOVE_RETALIATE), + LEVEL_UP_MOVE(53, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(59, MOVE_RETALIATE), LEVEL_UP_MOVE(65, MOVE_BONE_RUSH), LEVEL_UP_END }; @@ -18447,7 +18537,7 @@ static const struct LevelUpMove sMarowakAlolanLevelUpLearnset[] = { static const struct LevelUpMove sMeowthGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 1, MOVE_GROWL), - //LEVEL_UP_MOVE( 4, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 4, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 8, MOVE_SCRATCH), LEVEL_UP_MOVE(12, MOVE_PAY_DAY), LEVEL_UP_MOVE(16, MOVE_METAL_CLAW), @@ -18466,36 +18556,36 @@ static const struct LevelUpMove sPonytaGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), LEVEL_UP_MOVE(10, MOVE_CONFUSION), - //LEVEL_UP_MOVE(15, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE(15, MOVE_FAIRY_WIND), LEVEL_UP_MOVE(20, MOVE_AGILITY), LEVEL_UP_MOVE(25, MOVE_PSYBEAM), LEVEL_UP_MOVE(30, MOVE_STOMP), - //LEVEL_UP_MOVE(35, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(35, MOVE_HEAL_PULSE), LEVEL_UP_MOVE(41, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(45, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(45, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(50, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(55, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(55, MOVE_HEALING_WISH), LEVEL_UP_END }; static const struct LevelUpMove sRapidashGalarianLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_PSYCHO_CUT), - //LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT), LEVEL_UP_MOVE( 1, MOVE_MEGAHORN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - //LEVEL_UP_MOVE(15, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE(15, MOVE_FAIRY_WIND), LEVEL_UP_MOVE(20, MOVE_AGILITY), LEVEL_UP_MOVE(25, MOVE_PSYBEAM), LEVEL_UP_MOVE(30, MOVE_STOMP), - //LEVEL_UP_MOVE(35, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(35, MOVE_HEAL_PULSE), LEVEL_UP_MOVE(43, MOVE_TAKE_DOWN), - //LEVEL_UP_MOVE(49, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(49, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(56, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(63, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(63, MOVE_HEALING_WISH), LEVEL_UP_END }; @@ -18509,20 +18599,20 @@ static const struct LevelUpMove sSlowpokeGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_DISABLE), LEVEL_UP_MOVE(18, MOVE_WATER_PULSE), LEVEL_UP_MOVE(21, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(27, MOVE_AMNESIA), LEVEL_UP_MOVE(30, MOVE_SURF), LEVEL_UP_MOVE(33, MOVE_SLACK_OFF), LEVEL_UP_MOVE(36, MOVE_PSYCHIC), LEVEL_UP_MOVE(39, MOVE_PSYCH_UP), LEVEL_UP_MOVE(42, MOVE_RAIN_DANCE), - //LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE), LEVEL_UP_END }; static const struct LevelUpMove sSlowbroGalarianLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SHELL_SIDE_ARM), - //LEVEL_UP_MOVE( 1, MOVE_SHELL_SIDE_ARM), + LEVEL_UP_MOVE( 1, MOVE_SHELL_SIDE_ARM), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_CURSE), @@ -18533,14 +18623,14 @@ static const struct LevelUpMove sSlowbroGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_DISABLE), LEVEL_UP_MOVE(18, MOVE_WATER_PULSE), LEVEL_UP_MOVE(21, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(27, MOVE_AMNESIA), LEVEL_UP_MOVE(30, MOVE_SURF), LEVEL_UP_MOVE(33, MOVE_SLACK_OFF), LEVEL_UP_MOVE(36, MOVE_PSYCHIC), LEVEL_UP_MOVE(39, MOVE_PSYCH_UP), LEVEL_UP_MOVE(42, MOVE_RAIN_DANCE), - //LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE), LEVEL_UP_END }; @@ -18550,49 +18640,49 @@ static const struct LevelUpMove sFarfetchdGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_LEER), LEVEL_UP_MOVE(10, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(15, MOVE_ROCK_SMASH), - //LEVEL_UP_MOVE(20, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(20, MOVE_BRUTAL_SWING), LEVEL_UP_MOVE(25, MOVE_DETECT), LEVEL_UP_MOVE(30, MOVE_KNOCK_OFF), - //LEVEL_UP_MOVE(35, MOVE_DEFOG), + LEVEL_UP_MOVE(35, MOVE_DEFOG), LEVEL_UP_MOVE(40, MOVE_BRICK_BREAK), LEVEL_UP_MOVE(45, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(50, MOVE_SLAM), LEVEL_UP_MOVE(55, MOVE_LEAF_BLADE), - //LEVEL_UP_MOVE(60, MOVE_FINAL_GAMBIT), - //LEVEL_UP_MOVE(65, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(60, MOVE_FINAL_GAMBIT), + LEVEL_UP_MOVE(65, MOVE_BRAVE_BIRD), LEVEL_UP_END }; 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_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_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(12, MOVE_CLEAR_SMOG), - //LEVEL_UP_MOVE(16, MOVE_ASSURANCE), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), + 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(28, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(32, MOVE_SLUDGE_BOMB), LEVEL_UP_MOVE(38, MOVE_TOXIC), - //LEVEL_UP_MOVE(44, MOVE_BELCH), + LEVEL_UP_MOVE(44, MOVE_BELCH), LEVEL_UP_MOVE(50, MOVE_EXPLOSION), LEVEL_UP_MOVE(56, MOVE_MEMENTO), LEVEL_UP_MOVE(62, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE(68, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE(68, MOVE_MISTY_TERRAIN), LEVEL_UP_END }; static const struct LevelUpMove sMrMimeGalarianLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_COPYCAT), + LEVEL_UP_MOVE( 1, MOVE_COPYCAT), LEVEL_UP_MOVE( 1, MOVE_ENCORE), LEVEL_UP_MOVE( 1, MOVE_ROLE_PLAY), LEVEL_UP_MOVE( 1, MOVE_PROTECT), @@ -18601,21 +18691,21 @@ static const struct LevelUpMove sMrMimeGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE( 1, MOVE_REFLECT), LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), - //LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM), - //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 1, MOVE_BATON_PASS), - //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), + LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), LEVEL_UP_MOVE(12, MOVE_CONFUSION), - //LEVEL_UP_MOVE(16, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE(16, MOVE_ALLY_SWITCH), LEVEL_UP_MOVE(20, MOVE_ICY_WIND), LEVEL_UP_MOVE(24, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE(28, MOVE_PSYBEAM), LEVEL_UP_MOVE(32, MOVE_HYPNOSIS), LEVEL_UP_MOVE(36, MOVE_MIRROR_COAT), - //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(44, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(44, MOVE_FREEZE_DRY), LEVEL_UP_MOVE(48, MOVE_PSYCHIC), LEVEL_UP_MOVE(52, MOVE_TEETER_DANCE), LEVEL_UP_END @@ -18623,21 +18713,21 @@ static const struct LevelUpMove sMrMimeGalarianLevelUpLearnset[] = { static const struct LevelUpMove sArticunoGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GUST), - //LEVEL_UP_MOVE( 1, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE( 1, MOVE_PSYCHO_SHIFT), LEVEL_UP_MOVE( 5, MOVE_CONFUSION), LEVEL_UP_MOVE(10, MOVE_REFLECT), LEVEL_UP_MOVE(15, MOVE_HYPNOSIS), LEVEL_UP_MOVE(20, MOVE_AGILITY), LEVEL_UP_MOVE(25, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(30, MOVE_TAILWIND), - //LEVEL_UP_MOVE(35, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(30, MOVE_TAILWIND), + LEVEL_UP_MOVE(35, MOVE_PSYCHO_CUT), LEVEL_UP_MOVE(40, MOVE_RECOVER), - //LEVEL_UP_MOVE(45, MOVE_FREEZING_GLARE), + LEVEL_UP_MOVE(45, MOVE_FREEZING_GLARE), LEVEL_UP_MOVE(50, MOVE_DREAM_EATER), - //LEVEL_UP_MOVE(55, MOVE_HURRICANE), + LEVEL_UP_MOVE(55, MOVE_HURRICANE), LEVEL_UP_MOVE(60, MOVE_MIND_READER), LEVEL_UP_MOVE(65, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(70, MOVE_TRICK_ROOM), + LEVEL_UP_MOVE(70, MOVE_TRICK_ROOM), LEVEL_UP_END }; @@ -18646,17 +18736,17 @@ static const struct LevelUpMove sZapdosGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 5, MOVE_ROCK_SMASH), LEVEL_UP_MOVE(10, MOVE_LIGHT_SCREEN), - //LEVEL_UP_MOVE(15, MOVE_PLUCK), + LEVEL_UP_MOVE(15, MOVE_PLUCK), LEVEL_UP_MOVE(20, MOVE_AGILITY), LEVEL_UP_MOVE(25, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(30, MOVE_BRICK_BREAK), LEVEL_UP_MOVE(35, MOVE_DRILL_PECK), - //LEVEL_UP_MOVE(40, MOVE_QUICK_GUARD), - //LEVEL_UP_MOVE(45, MOVE_THUNDEROUS_KICK), + LEVEL_UP_MOVE(40, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(45, MOVE_THUNDEROUS_KICK), LEVEL_UP_MOVE(50, MOVE_BULK_UP), LEVEL_UP_MOVE(55, MOVE_COUNTER), LEVEL_UP_MOVE(60, MOVE_DETECT), - //LEVEL_UP_MOVE(65, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(65, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(70, MOVE_REVERSAL), LEVEL_UP_END }; @@ -18664,17 +18754,17 @@ static const struct LevelUpMove sZapdosGalarianLevelUpLearnset[] = { static const struct LevelUpMove sMoltresGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 5, MOVE_PAYBACK), + LEVEL_UP_MOVE( 5, MOVE_PAYBACK), LEVEL_UP_MOVE(10, MOVE_SAFEGUARD), LEVEL_UP_MOVE(15, MOVE_WING_ATTACK), LEVEL_UP_MOVE(20, MOVE_AGILITY), LEVEL_UP_MOVE(25, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(30, MOVE_SUCKER_PUNCH), - //LEVEL_UP_MOVE(35, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(40, MOVE_AFTER_YOU), - //LEVEL_UP_MOVE(45, MOVE_FIERY_WRATH), - //LEVEL_UP_MOVE(50, MOVE_NASTY_PLOT), - //LEVEL_UP_MOVE(55, MOVE_HURRICANE), + LEVEL_UP_MOVE(30, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(35, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(40, MOVE_AFTER_YOU), + LEVEL_UP_MOVE(45, MOVE_FIERY_WRATH), + LEVEL_UP_MOVE(50, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(55, MOVE_HURRICANE), LEVEL_UP_MOVE(60, MOVE_ENDURE), LEVEL_UP_MOVE(65, MOVE_MEMENTO), LEVEL_UP_MOVE(70, MOVE_SKY_ATTACK), @@ -18683,9 +18773,9 @@ static const struct LevelUpMove sMoltresGalarianLevelUpLearnset[] = { static const struct LevelUpMove sSlowkingGalarianLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_EERIE_SPELL), - //LEVEL_UP_MOVE( 1, MOVE_EERIE_SPELL), - //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), - //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE( 1, MOVE_EERIE_SPELL), + LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), + LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), LEVEL_UP_MOVE( 1, MOVE_SWAGGER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_CURSE), @@ -18696,14 +18786,14 @@ static const struct LevelUpMove sSlowkingGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_DISABLE), LEVEL_UP_MOVE(18, MOVE_WATER_PULSE), LEVEL_UP_MOVE(21, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(27, MOVE_AMNESIA), LEVEL_UP_MOVE(30, MOVE_SURF), LEVEL_UP_MOVE(33, MOVE_SLACK_OFF), LEVEL_UP_MOVE(36, MOVE_PSYCHIC), LEVEL_UP_MOVE(39, MOVE_PSYCH_UP), LEVEL_UP_MOVE(42, MOVE_RAIN_DANCE), - //LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE), LEVEL_UP_END }; @@ -18714,10 +18804,10 @@ static const struct LevelUpMove sCorsolaGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_DISABLE), LEVEL_UP_MOVE(15, MOVE_SPITE), LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER), - //LEVEL_UP_MOVE(25, MOVE_HEX), + LEVEL_UP_MOVE(25, MOVE_HEX), LEVEL_UP_MOVE(30, MOVE_CURSE), - //LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP), - //LEVEL_UP_MOVE(40, MOVE_POWER_GEM), + LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP), + LEVEL_UP_MOVE(40, MOVE_POWER_GEM), LEVEL_UP_MOVE(45, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(50, MOVE_GRUDGE), LEVEL_UP_MOVE(55, MOVE_MIRROR_COAT), @@ -18729,9 +18819,9 @@ static const struct LevelUpMove sZigzagoonGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 3, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 6, MOVE_LICK), - //LEVEL_UP_MOVE( 9, MOVE_SNARL), + LEVEL_UP_MOVE( 9, MOVE_SNARL), LEVEL_UP_MOVE(12, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(15, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(15, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE(18, MOVE_PIN_MISSILE), LEVEL_UP_MOVE(21, MOVE_REST), LEVEL_UP_MOVE(24, MOVE_TAKE_DOWN), @@ -18744,17 +18834,17 @@ static const struct LevelUpMove sZigzagoonGalarianLevelUpLearnset[] = { static const struct LevelUpMove sLinooneGalarianLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), - //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO), LEVEL_UP_MOVE( 1, MOVE_PIN_MISSILE), - //LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LICK), - //LEVEL_UP_MOVE( 9, MOVE_SNARL), + LEVEL_UP_MOVE( 9, MOVE_SNARL), LEVEL_UP_MOVE(12, MOVE_HEADBUTT), - //LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(18, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(23, MOVE_REST), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), @@ -18770,9 +18860,9 @@ static const struct LevelUpMove sDarumakaGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 4, MOVE_TAUNT), LEVEL_UP_MOVE( 8, MOVE_BITE), - //LEVEL_UP_MOVE(12, MOVE_AVALANCHE), - //LEVEL_UP_MOVE(16, MOVE_WORK_UP), - //LEVEL_UP_MOVE(20, MOVE_ICE_FANG), + LEVEL_UP_MOVE(12, MOVE_AVALANCHE), + LEVEL_UP_MOVE(16, MOVE_WORK_UP), + LEVEL_UP_MOVE(20, MOVE_ICE_FANG), LEVEL_UP_MOVE(24, MOVE_HEADBUTT), LEVEL_UP_MOVE(28, MOVE_ICE_PUNCH), LEVEL_UP_MOVE(32, MOVE_UPROAR), @@ -18785,14 +18875,14 @@ static const struct LevelUpMove sDarumakaGalarianLevelUpLearnset[] = { static const struct LevelUpMove sDarmanitanGalarianLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_ICICLE_CRASH), - //LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH), + LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH), LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAUNT), LEVEL_UP_MOVE( 1, MOVE_BITE), - //LEVEL_UP_MOVE(12, MOVE_AVALANCHE), - //LEVEL_UP_MOVE(16, MOVE_WORK_UP), - //LEVEL_UP_MOVE(20, MOVE_ICE_FANG), + LEVEL_UP_MOVE(12, MOVE_AVALANCHE), + LEVEL_UP_MOVE(16, MOVE_WORK_UP), + LEVEL_UP_MOVE(20, MOVE_ICE_FANG), LEVEL_UP_MOVE(24, MOVE_HEADBUTT), LEVEL_UP_MOVE(28, MOVE_ICE_PUNCH), LEVEL_UP_MOVE(32, MOVE_UPROAR), @@ -18809,16 +18899,16 @@ static const struct LevelUpMove sYamaskGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_HAZE), LEVEL_UP_MOVE( 8, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(12, MOVE_DISABLE), - //LEVEL_UP_MOVE(16, MOVE_BRUTAL_SWING), - //LEVEL_UP_MOVE(20, MOVE_CRAFTY_SHIELD), - //LEVEL_UP_MOVE(24, MOVE_HEX), + LEVEL_UP_MOVE(16, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(20, MOVE_CRAFTY_SHIELD), + LEVEL_UP_MOVE(24, MOVE_HEX), LEVEL_UP_MOVE(28, MOVE_MEAN_LOOK), LEVEL_UP_MOVE(32, MOVE_SLAM), LEVEL_UP_MOVE(36, MOVE_CURSE), LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(44, MOVE_EARTHQUAKE), - //LEVEL_UP_MOVE(48, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(48, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(48, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(48, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(52, MOVE_DESTINY_BOND), LEVEL_UP_END }; @@ -18832,16 +18922,231 @@ static const struct LevelUpMove sStunfiskGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_MUD_SHOT), LEVEL_UP_MOVE(15, MOVE_REVENGE), LEVEL_UP_MOVE(20, MOVE_METAL_SOUND), - //LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(30, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(35, MOVE_BOUNCE), LEVEL_UP_MOVE(40, MOVE_MUDDY_WATER), - //LEVEL_UP_MOVE(45, MOVE_SNAP_TRAP), + LEVEL_UP_MOVE(45, MOVE_SNAP_TRAP), LEVEL_UP_MOVE(50, MOVE_FLAIL), LEVEL_UP_MOVE(55, MOVE_FISSURE), LEVEL_UP_END }; +static const struct LevelUpMove sGrowlitheHisuianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_EMBER), + LEVEL_UP_MOVE( 9, MOVE_BITE), + //LEVEL_UP_MOVE(15, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(21, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(29, MOVE_CRUNCH), + LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE), + //LEVEL_UP_MOVE(47, MOVE_FLARE_BLITZ), + LEVEL_UP_END +}; + +static const struct LevelUpMove sArcanineHisuianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_EMBER), + LEVEL_UP_MOVE( 9, MOVE_BITE), + //LEVEL_UP_MOVE(15, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(21, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(29, MOVE_CRUNCH), + //LEVEL_UP_MOVE(29, MOVE_RAGING_FURY), + LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE), + //LEVEL_UP_MOVE(47, MOVE_FLARE_BLITZ), + LEVEL_UP_END +}; + +static const struct LevelUpMove sVoltorbHisuianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 5, MOVE_TACKLE), + LEVEL_UP_MOVE( 9, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(15, MOVE_SPARK), + //LEVEL_UP_MOVE(21, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(29, MOVE_THUNDERBOLT), + LEVEL_UP_MOVE(37, MOVE_THUNDER), + LEVEL_UP_MOVE(47, MOVE_SELF_DESTRUCT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sElectrodeHisuianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 5, MOVE_TACKLE), + LEVEL_UP_MOVE( 9, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(15, MOVE_SPARK), + //LEVEL_UP_MOVE(21, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(29, MOVE_THUNDERBOLT), + LEVEL_UP_MOVE(37, MOVE_THUNDER), + //LEVEL_UP_MOVE(47, MOVE_CHLOROBLAST), + LEVEL_UP_MOVE(47, MOVE_SELF_DESTRUCT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTyphlosionHisuianLevelUpLearnset[] = { + //LEVEL_UP_MOVE( 0, MOVE_HEX), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 6, MOVE_EMBER), + LEVEL_UP_MOVE(11, MOVE_ROLLOUT), + LEVEL_UP_MOVE(18, MOVE_FLAME_WHEEL), + LEVEL_UP_MOVE(25, MOVE_SWIFT), + LEVEL_UP_MOVE(34, MOVE_FLAMETHROWER), + //LEVEL_UP_MOVE(40, MOVE_INFERNAL_PARADE), + LEVEL_UP_MOVE(43, MOVE_OVERHEAT), + LEVEL_UP_MOVE(43, MOVE_SHADOW_BALL), + LEVEL_UP_END +}; + +static const struct LevelUpMove sQwilfishHisuianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 5, MOVE_SPIKES), + LEVEL_UP_MOVE( 9, MOVE_PIN_MISSILE), + //LEVEL_UP_MOVE(15, MOVE_BARB_BARRAGE), + LEVEL_UP_MOVE(21, MOVE_WATER_PULSE), + //LEVEL_UP_MOVE(26, MOVE_DARK_PULSE), + //LEVEL_UP_MOVE(29, MOVE_POISON_JAB), + //LEVEL_UP_MOVE(37, MOVE_AQUA_TAIL, + LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(57, MOVE_SELF_DESTRUCT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSneaselHisuianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 6, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE(11, MOVE_SWIFT), + LEVEL_UP_MOVE(18, MOVE_SLASH), + //LEVEL_UP_MOVE(25, MOVE_POISON_JAB), + LEVEL_UP_MOVE(34, MOVE_SWORDS_DANCE), + //LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSamurottHisuianLevelUpLearnset[] = { + //LEVEL_UP_MOVE( 0, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + //LEVEL_UP_MOVE( 6, MOVE_AQUA_JET), + LEVEL_UP_MOVE(11, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(18, MOVE_WATER_PULSE), + //LEVEL_UP_MOVE(21, MOVE_CEASELESS_EDGE), + LEVEL_UP_MOVE(25, MOVE_SLASH), + //LEVEL_UP_MOVE(34, MOVE_AQUA_TAIL), + //LEVEL_UP_MOVE(40, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +static const struct LevelUpMove sLilligantHisuianLevelUpLearnset[] = { + //LEVEL_UP_MOVE( 0, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + //LEVEL_UP_MOVE( 5, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 9, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), + //LEVEL_UP_MOVE(21, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(29, MOVE_SLEEP_POWDER), + //LEVEL_UP_MOVE(34, MOVE_DRAIN_PUNCH), + LEVEL_UP_MOVE(37, MOVE_LEAF_BLADE), + LEVEL_UP_MOVE(37, MOVE_RECOVER), + //LEVEL_UP_MOVE(42, MOVE_VICTORY_DANCE), + //LEVEL_UP_MOVE(47, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(53, MOVE_PETAL_DANCE), + LEVEL_UP_MOVE(57, MOVE_CLOSE_COMBAT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sZoruaHisuianLevelUpLearnset[] = { + //LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + //LEVEL_UP_MOVE( 6, MOVE_SNARL), + LEVEL_UP_MOVE(11, MOVE_SWIFT), + //LEVEL_UP_MOVE(18, MOVE_BITTER_MALICE), + LEVEL_UP_MOVE(25, MOVE_SLASH), + //LEVEL_UP_MOVE(34, MOVE_SHADOW_CLAW), + //LEVEL_UP_MOVE(43, MOVE_NASTY_PLOT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sZoroarkHisuianLevelUpLearnset[] = { + //LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + //LEVEL_UP_MOVE( 6, MOVE_SNARL), + LEVEL_UP_MOVE(11, MOVE_SWIFT), + //LEVEL_UP_MOVE(18, MOVE_BITTER_MALICE), + LEVEL_UP_MOVE(25, MOVE_SLASH), + //LEVEL_UP_MOVE(34, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), + //LEVEL_UP_MOVE(43, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(52, MOVE_EXTRASENSORY), + LEVEL_UP_END +}; + +static const struct LevelUpMove sBraviaryHisuianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 6, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE(11, MOVE_TWISTER), + LEVEL_UP_MOVE(18, MOVE_SLASH), + //LEVEL_UP_MOVE(20, MOVE_AIR_SLASH), + //LEVEL_UP_MOVE(25, MOVE_ESPER_WING), + LEVEL_UP_MOVE(25, MOVE_ROOST), + LEVEL_UP_MOVE(34, MOVE_DOUBLE_EDGE), + //LEVEL_UP_MOVE(43, MOVE_BRAVE_BIRD), + //LEVEL_UP_MOVE(52, MOVE_HURRICANE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSliggooHisuianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + //LEVEL_UP_MOVE( 6, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(11, MOVE_ACID_ARMOR), + LEVEL_UP_MOVE(18, MOVE_WATER_PULSE), + //LEVEL_UP_MOVE(25, MOVE_DRAGON_PULSE), + //LEVEL_UP_MOVE(25, MOVE_IRON_HEAD), + //LEVEL_UP_MOVE(34, MOVE_SHELTER), + LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +static const struct LevelUpMove sGoodraHisuianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + //LEVEL_UP_MOVE( 6, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(11, MOVE_ACID_ARMOR), + LEVEL_UP_MOVE(18, MOVE_WATER_PULSE), + //LEVEL_UP_MOVE(25, MOVE_DRAGON_PULSE), + //LEVEL_UP_MOVE(25, MOVE_IRON_HEAD), + //LEVEL_UP_MOVE(34, MOVE_SHELTER), + LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +static const struct LevelUpMove sAvaluggHisuianLevelUpLearnset[] = { + //LEVEL_UP_MOVE( 0, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_POWDER_SNOW), + //LEVEL_UP_MOVE( 9, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(15, MOVE_BITE), + LEVEL_UP_MOVE(21, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(29, MOVE_CRUNCH), + //LEVEL_UP_MOVE(29, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(37, MOVE_BLIZZARD), + //LEVEL_UP_MOVE(37, MOVE_MOUNTAIN_GALE), + LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sDecidueyeHisuianLevelUpLearnset[] = { + //LEVEL_UP_MOVE( 0, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE( 1, MOVE_GUST), + //LEVEL_UP_MOVE( 6, MOVE_LEAFAGE), + LEVEL_UP_MOVE(11, MOVE_ROOST), + LEVEL_UP_MOVE(18, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE(21, MOVE_MAGICAL_LEAF), + //LEVEL_UP_MOVE(25, MOVE_AIR_SLASH), + //LEVEL_UP_MOVE(30, MOVE_AURA_SPHERE), + LEVEL_UP_MOVE(34, MOVE_LEAF_BLADE), + //LEVEL_UP_MOVE(34, MOVE_TRIPLE_ARROWS), + //LEVEL_UP_MOVE(40, MOVE_BRAVE_BIRD), + //LEVEL_UP_MOVE(43, MOVE_LEAF_STORM), + LEVEL_UP_END +}; +#endif + static const struct LevelUpMove sDeoxysAttackLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_WRAP), @@ -18851,8 +19156,8 @@ static const struct LevelUpMove sDeoxysAttackLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_PURSUIT), LEVEL_UP_MOVE(31, MOVE_PSYCHIC), LEVEL_UP_MOVE(37, MOVE_SUPERPOWER), - //LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), - //LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(55, MOVE_COSMIC_POWER), LEVEL_UP_MOVE(61, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(67, MOVE_PSYCHO_BOOST), @@ -18869,8 +19174,8 @@ static const struct LevelUpMove sDeoxysDefenseLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_SPIKES), LEVEL_UP_MOVE(31, MOVE_PSYCHIC), LEVEL_UP_MOVE(37, MOVE_SNATCH), - //LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), - //LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(55, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(55, MOVE_AMNESIA), LEVEL_UP_MOVE(61, MOVE_RECOVER), @@ -18889,8 +19194,8 @@ static const struct LevelUpMove sDeoxysSpeedLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_PURSUIT), LEVEL_UP_MOVE(31, MOVE_PSYCHIC), LEVEL_UP_MOVE(37, MOVE_SWIFT), - //LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), - //LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(55, MOVE_AGILITY), LEVEL_UP_MOVE(61, MOVE_RECOVER), LEVEL_UP_MOVE(67, MOVE_PSYCHO_BOOST), @@ -18898,50 +19203,51 @@ static const struct LevelUpMove sDeoxysSpeedLevelUpLearnset[] = { LEVEL_UP_END }; +#if P_NEW_POKEMON == TRUE static const struct LevelUpMove sWormadamSandyCloakLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_PROTECT), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE(10, MOVE_PROTECT), - //LEVEL_UP_MOVE(15, MOVE_BUG_BITE), + LEVEL_UP_MOVE(15, MOVE_BUG_BITE), LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE(23, MOVE_CONFUSION), LEVEL_UP_MOVE(26, MOVE_ROCK_BLAST), LEVEL_UP_MOVE(29, MOVE_HARDEN), LEVEL_UP_MOVE(32, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(35, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(35, MOVE_CAPTIVATE), LEVEL_UP_MOVE(38, MOVE_FLAIL), LEVEL_UP_MOVE(41, MOVE_ATTRACT), LEVEL_UP_MOVE(44, MOVE_PSYCHIC), LEVEL_UP_MOVE(47, MOVE_FISSURE), - //LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ), LEVEL_UP_END }; static const struct LevelUpMove sWormadamTrashCloakLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), - //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), - //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), + LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_PROTECT), - //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE(10, MOVE_PROTECT), - //LEVEL_UP_MOVE(15, MOVE_BUG_BITE), + LEVEL_UP_MOVE(15, MOVE_BUG_BITE), LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER), LEVEL_UP_MOVE(23, MOVE_CONFUSION), - //LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT), + LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT), LEVEL_UP_MOVE(29, MOVE_METAL_SOUND), LEVEL_UP_MOVE(32, MOVE_PSYBEAM), - //LEVEL_UP_MOVE(35, MOVE_CAPTIVATE), + LEVEL_UP_MOVE(35, MOVE_CAPTIVATE), LEVEL_UP_MOVE(38, MOVE_FLAIL), LEVEL_UP_MOVE(41, MOVE_ATTRACT), LEVEL_UP_MOVE(44, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(47, MOVE_IRON_HEAD), - //LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(47, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ), LEVEL_UP_END }; @@ -18951,13 +19257,13 @@ 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_NATURAL_GIFT), - //LEVEL_UP_MOVE(55, MOVE_WORRY_SEED), - //LEVEL_UP_MOVE(64, MOVE_AIR_SLASH), - //LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(46, MOVE_NATURAL_GIFT), + LEVEL_UP_MOVE(55, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(64, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(82, MOVE_SWEET_KISS), - //LEVEL_UP_MOVE(91, MOVE_LEAF_STORM), - //LEVEL_UP_MOVE(100, MOVE_SEED_FLARE), + LEVEL_UP_MOVE(91, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(100, MOVE_SEED_FLARE), LEVEL_UP_END }; @@ -18969,10 +19275,10 @@ static const struct LevelUpMove sKyuremWhiteLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_ICE_BEAM), LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(36, MOVE_SLASH), - //LEVEL_UP_MOVE(43, MOVE_FUSION_FLARE), - //LEVEL_UP_MOVE(50, MOVE_ICE_BURN), - //LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(43, MOVE_FUSION_FLARE), + LEVEL_UP_MOVE(50, MOVE_ICE_BURN), + LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE(71, MOVE_ENDEAVOR), LEVEL_UP_MOVE(78, MOVE_BLIZZARD), LEVEL_UP_MOVE(85, MOVE_OUTRAGE), @@ -18988,10 +19294,10 @@ static const struct LevelUpMove sKyuremBlackLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_ICE_BEAM), LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(36, MOVE_SLASH), - //LEVEL_UP_MOVE(43, MOVE_FUSION_BOLT), - //LEVEL_UP_MOVE(50, MOVE_FREEZE_SHOCK), - //LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE), - //LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(43, MOVE_FUSION_BOLT), + LEVEL_UP_MOVE(50, MOVE_FREEZE_SHOCK), + LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE(71, MOVE_ENDEAVOR), LEVEL_UP_MOVE(78, MOVE_BLIZZARD), LEVEL_UP_MOVE(85, MOVE_OUTRAGE), @@ -19002,26 +19308,26 @@ static const struct LevelUpMove sKyuremBlackLevelUpLearnset[] = { static const struct LevelUpMove sFloetteEternalFlowerLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), - //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), - //LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND), - //LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT), LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(20, MOVE_WISH), LEVEL_UP_MOVE(25, MOVE_MAGICAL_LEAF), - //LEVEL_UP_MOVE(27, MOVE_GRASSY_TERRAIN), - //LEVEL_UP_MOVE(33, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(27, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(33, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE(38, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(43, MOVE_MISTY_TERRAIN), - //LEVEL_UP_MOVE(46, MOVE_MOONBLAST), - //LEVEL_UP_MOVE(50, MOVE_LIGHT_OF_RUIN), + 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 }; static const struct LevelUpMove sMeowsticFemaleLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), - //LEVEL_UP_MOVE( 1, MOVE_ME_FIRST), + LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), + LEVEL_UP_MOVE( 1, MOVE_ME_FIRST), LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -19032,44 +19338,44 @@ static const struct LevelUpMove sMeowsticFemaleLevelUpLearnset[] = { LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(17, MOVE_PSYBEAM), LEVEL_UP_MOVE(19, MOVE_FAKE_OUT), - //LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE), - //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), - //LEVEL_UP_MOVE(28, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(28, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE(31, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(35, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(40, MOVE_PSYCHIC), LEVEL_UP_MOVE(43, MOVE_ROLE_PLAY), LEVEL_UP_MOVE(45, MOVE_SIGNAL_BEAM), - //LEVEL_UP_MOVE(48, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(48, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(50, MOVE_FUTURE_SIGHT), - //LEVEL_UP_MOVE(53, MOVE_STORED_POWER), + LEVEL_UP_MOVE(53, MOVE_STORED_POWER), LEVEL_UP_END }; static const struct LevelUpMove sHoopaUnboundLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_HYPERSPACE_HOLE), + LEVEL_UP_MOVE( 1, MOVE_HYPERSPACE_HOLE), LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND), - //LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 6, MOVE_ASTONISH), LEVEL_UP_MOVE(10, MOVE_MAGIC_COAT), LEVEL_UP_MOVE(15, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(19, MOVE_PSYBEAM), LEVEL_UP_MOVE(25, MOVE_SKILL_SWAP), - //LEVEL_UP_MOVE(29, MOVE_POWER_SPLIT), - //LEVEL_UP_MOVE(29, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(29, MOVE_POWER_SPLIT), + LEVEL_UP_MOVE(29, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(46, MOVE_KNOCK_OFF), - //LEVEL_UP_MOVE(50, MOVE_WONDER_ROOM), - //LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM), - //LEVEL_UP_MOVE(55, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(50, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM), + LEVEL_UP_MOVE(55, MOVE_DARK_PULSE), LEVEL_UP_MOVE(75, MOVE_PSYCHIC), - //LEVEL_UP_MOVE(85, MOVE_HYPERSPACE_FURY), + LEVEL_UP_MOVE(85, MOVE_HYPERSPACE_FURY), LEVEL_UP_END }; static const struct LevelUpMove sLycanrocMidnightLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_COUNTER), + //LEVEL_UP_MOVE( 0, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_REVERSAL), LEVEL_UP_MOVE( 1, MOVE_TAUNT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -19081,18 +19387,18 @@ static const struct LevelUpMove sLycanrocMidnightLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(23, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(26, MOVE_ROAR), - //LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(34, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(37, MOVE_SCARY_FACE), LEVEL_UP_MOVE(40, MOVE_CRUNCH), - //LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB), - //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sLycanrocDuskLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_THRASH), - //LEVEL_UP_MOVE( 1, MOVE_ACCELEROCK), + //LEVEL_UP_MOVE( 0, MOVE_THRASH), + LEVEL_UP_MOVE( 1, MOVE_ACCELEROCK), LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -19103,66 +19409,66 @@ static const struct LevelUpMove sLycanrocDuskLevelUpLearnset[] = { LEVEL_UP_MOVE(18, MOVE_ODOR_SLEUTH), LEVEL_UP_MOVE(23, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(26, MOVE_ROAR), - //LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(34, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(37, MOVE_SCARY_FACE), LEVEL_UP_MOVE(40, MOVE_CRUNCH), - //LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB), - //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB), + LEVEL_UP_MOVE(48, MOVE_STONE_EDGE), LEVEL_UP_END }; static const struct LevelUpMove sToxtricityLowKeyLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SPARK), + //LEVEL_UP_MOVE( 0, MOVE_SPARK), LEVEL_UP_MOVE( 1, MOVE_SPARK), - //LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), - //LEVEL_UP_MOVE( 1, MOVE_BELCH), - //LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK), - //LEVEL_UP_MOVE( 1, MOVE_NUZZLE), + LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), + LEVEL_UP_MOVE( 1, MOVE_BELCH), + LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK), + LEVEL_UP_MOVE( 1, MOVE_NUZZLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_FLAIL), LEVEL_UP_MOVE( 1, MOVE_ACID), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), - //LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY), LEVEL_UP_MOVE( 1, MOVE_LEER), - //LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 4, MOVE_CHARGE), LEVEL_UP_MOVE( 8, MOVE_SHOCK_WAVE), LEVEL_UP_MOVE(12, MOVE_SCARY_FACE), LEVEL_UP_MOVE(16, MOVE_TAUNT), - //LEVEL_UP_MOVE(20, MOVE_VENOM_DRENCH), + LEVEL_UP_MOVE(20, MOVE_VENOM_DRENCH), LEVEL_UP_MOVE(24, MOVE_SCREECH), LEVEL_UP_MOVE(28, MOVE_SWAGGER), LEVEL_UP_MOVE(32, MOVE_TOXIC), - //LEVEL_UP_MOVE(36, MOVE_DISCHARGE), - //LEVEL_UP_MOVE(40, MOVE_POISON_JAB), - //LEVEL_UP_MOVE(44, MOVE_OVERDRIVE), - //LEVEL_UP_MOVE(48, MOVE_BOOMBURST), - //LEVEL_UP_MOVE(52, MOVE_MAGNETIC_FLUX), + LEVEL_UP_MOVE(36, MOVE_DISCHARGE), + LEVEL_UP_MOVE(40, MOVE_POISON_JAB), + LEVEL_UP_MOVE(44, MOVE_OVERDRIVE), + LEVEL_UP_MOVE(48, MOVE_BOOMBURST), + LEVEL_UP_MOVE(52, MOVE_MAGNETIC_FLUX), LEVEL_UP_END }; static const struct LevelUpMove sIndeedeeFemaleLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), - //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), + LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 5, MOVE_BATON_PASS), - //LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE(15, MOVE_PSYBEAM), LEVEL_UP_MOVE(20, MOVE_HELPING_HAND), LEVEL_UP_MOVE(25, MOVE_FOLLOW_ME), LEVEL_UP_MOVE(30, MOVE_AROMATHERAPY), LEVEL_UP_MOVE(35, MOVE_PSYCHIC), LEVEL_UP_MOVE(40, MOVE_CALM_MIND), - //LEVEL_UP_MOVE(45, MOVE_GUARD_SPLIT), - //LEVEL_UP_MOVE(50, MOVE_PSYCHIC_TERRAIN), - //LEVEL_UP_MOVE(55, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(45, MOVE_GUARD_SPLIT), + LEVEL_UP_MOVE(50, MOVE_PSYCHIC_TERRAIN), + LEVEL_UP_MOVE(55, MOVE_HEALING_WISH), LEVEL_UP_END }; static const struct LevelUpMove sUrshifuRapidStrikeStyleLevelUpLearnset[] = { //LEVEL_UP_MOVE( 0, MOVE_SURGING_STRIKES), - //LEVEL_UP_MOVE( 1, MOVE_SURGING_STRIKES), - //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 1, MOVE_SURGING_STRIKES), + LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ENDURE), @@ -19173,24 +19479,24 @@ static const struct LevelUpMove sUrshifuRapidStrikeStyleLevelUpLearnset[] = { LEVEL_UP_MOVE(24, MOVE_BRICK_BREAK), LEVEL_UP_MOVE(28, MOVE_DETECT), LEVEL_UP_MOVE(32, MOVE_BULK_UP), - //LEVEL_UP_MOVE(36, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(36, MOVE_IRON_HEAD), LEVEL_UP_MOVE(40, MOVE_DYNAMIC_PUNCH), LEVEL_UP_MOVE(44, MOVE_COUNTER), - //LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(52, MOVE_FOCUS_PUNCH), LEVEL_UP_END }; static const struct LevelUpMove sCalyrexIceRiderLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_GLACIAL_LANCE), + 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_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_ICICLE_CRASH), LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE( 1, MOVE_THRASH), @@ -19201,26 +19507,26 @@ static const struct LevelUpMove sCalyrexIceRiderLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_GROWTH), - //LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW), + LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW), LEVEL_UP_MOVE(16, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(24, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(24, MOVE_PSYSHOCK), LEVEL_UP_MOVE(32, MOVE_HELPING_HAND), LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(56, MOVE_PSYCHIC), LEVEL_UP_MOVE(64, MOVE_LEECH_SEED), - //LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE), LEVEL_UP_MOVE(80, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE(88, MOVE_FUTURE_SIGHT), LEVEL_UP_END }; static const struct LevelUpMove sCalyrexShadowRiderLevelUpLearnset[] = { - //LEVEL_UP_MOVE( 1, MOVE_ASTRAL_BARRAGE), + 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_HEX), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_HAZE), @@ -19230,21 +19536,22 @@ static const struct LevelUpMove sCalyrexShadowRiderLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_THRASH), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), - //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), 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( 8, MOVE_LIFE_DEW), + LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW), LEVEL_UP_MOVE(16, MOVE_GIGA_DRAIN), - //LEVEL_UP_MOVE(24, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(24, MOVE_PSYSHOCK), LEVEL_UP_MOVE(32, MOVE_HELPING_HAND), LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY), - //LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(56, MOVE_PSYCHIC), LEVEL_UP_MOVE(64, MOVE_LEECH_SEED), - //LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE), + LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE), LEVEL_UP_MOVE(80, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE(88, MOVE_FUTURE_SIGHT), LEVEL_UP_END }; +#endif diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 6ceff22eec..38bbdb5a87 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -4644,6 +4644,7 @@ const struct PokedexEntry gPokedexEntries[] = .trainerOffset = 2, }, +#if P_NEW_POKEMON == TRUE [NATIONAL_DEX_TURTWIG] = { .categoryName = _("Tiny Leaf"), @@ -10787,4 +10788,89 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 256, .trainerOffset = 0, }, + + [NATIONAL_DEX_WYRDEER] = + { + .categoryName = _("Big Horn"), + .height = 18, + .weight = 951, + .description = gWyrdeerPokedexText, + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + }, + + [NATIONAL_DEX_KLEAVOR] = + { + .categoryName = _("Axe"), + .height = 18, + .weight = 890, + .description = gKleavorPokedexText, + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + }, + + [NATIONAL_DEX_URSALUNA] = + { + .categoryName = _("Peat"), + .height = 24, + .weight = 2900, + .description = gUrsalunaPokedexText, + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + }, + + [NATIONAL_DEX_BASCULEGION] = + { + .categoryName = _("Big Fish"), + .height = 30, + .weight = 1100, + .description = gBasculegionPokedexText, + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + }, + + [NATIONAL_DEX_SNEASLER] = + { + .categoryName = _("Free Climb"), + .height = 13, + .weight = 430, + .description = gSneaslerPokedexText, + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + }, + + [NATIONAL_DEX_OVERQWIL] = + { + .categoryName = _("Pin Cluster"), + .height = 25, + .weight = 605, + .description = gOverqwilPokedexText, + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + }, + + [NATIONAL_DEX_ENAMORUS] = + { + .categoryName = _("Love-Hate"), + .height = 16, + .weight = 480, + .description = gEnamorusPokedexText, + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + }, +#endif }; diff --git a/src/data/pokemon/pokedex_orders.h b/src/data/pokemon/pokedex_orders.h index 68b09bf9ec..0ca5ccb417 100644 --- a/src/data/pokemon/pokedex_orders.h +++ b/src/data/pokemon/pokedex_orders.h @@ -47,6 +47,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_BARBARACLE, NATIONAL_DEX_BARBOACH, NATIONAL_DEX_BARRASKEWDA, + NATIONAL_DEX_BASCULEGION, NATIONAL_DEX_BASCULIN, NATIONAL_DEX_BASTIODON, NATIONAL_DEX_BAYLEEF, @@ -239,6 +240,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_EMBOAR, NATIONAL_DEX_EMOLGA, NATIONAL_DEX_EMPOLEON, + NATIONAL_DEX_ENAMORUS, NATIONAL_DEX_ENTEI, NATIONAL_DEX_ESCAVALIER, NATIONAL_DEX_ESPEON, @@ -403,6 +405,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_KINGLER, NATIONAL_DEX_KIRLIA, NATIONAL_DEX_KLANG, + NATIONAL_DEX_KLEAVOR, NATIONAL_DEX_KLEFKI, NATIONAL_DEX_KLINK, NATIONAL_DEX_KLINKLANG, @@ -562,6 +565,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_ORBEETLE, NATIONAL_DEX_ORICORIO, NATIONAL_DEX_OSHAWOTT, + NATIONAL_DEX_OVERQWIL, NATIONAL_DEX_PACHIRISU, NATIONAL_DEX_PALKIA, @@ -738,6 +742,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_SMEARGLE, NATIONAL_DEX_SMOOCHUM, NATIONAL_DEX_SNEASEL, + NATIONAL_DEX_SNEASLER, NATIONAL_DEX_SNIVY, NATIONAL_DEX_SNOM, NATIONAL_DEX_SNORLAX, @@ -845,6 +850,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_UMBREON, NATIONAL_DEX_UNFEZANT, NATIONAL_DEX_UNOWN, + NATIONAL_DEX_URSALUNA, NATIONAL_DEX_URSARING, NATIONAL_DEX_URSHIFU, NATIONAL_DEX_UXIE, @@ -897,6 +903,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_WORMADAM, NATIONAL_DEX_WURMPLE, NATIONAL_DEX_WYNAUT, + NATIONAL_DEX_WYRDEER, NATIONAL_DEX_XATU, NATIONAL_DEX_XERNEAS, @@ -927,6 +934,7 @@ const u16 gPokedexOrder_Alphabetical[] = const u16 gPokedexOrder_Weight[] = { + // 0.0 - 21.8 lbs / 0.0 - 9.9 kg NATIONAL_DEX_GASTLY, NATIONAL_DEX_HAUNTER, NATIONAL_DEX_FLABEBE, @@ -1195,7 +1203,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_VULPIX, //NATIONAL_DEX_VULPIX, // Alolan Form NATIONAL_DEX_TEPIG, - + // 22.0 - 44.1 lbs / 10.0 - 20.0 kg NATIONAL_DEX_KAKUNA, NATIONAL_DEX_MAGIKARP, NATIONAL_DEX_SILCOON, @@ -1247,6 +1255,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_GOURGEIST, // Average Size NATIONAL_DEX_MORGREM, NATIONAL_DEX_IVYSAUR, + //NATIONAL_DEX_VOLTORB, //Hisuian Form //NATIONAL_DEX_BANETTE, // Mega NATIONAL_DEX_MIME_JR, NATIONAL_DEX_LAMPENT, @@ -1323,6 +1332,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_QUILAVA, NATIONAL_DEX_BRUXISH, NATIONAL_DEX_STUNKY, + //NATIONAL_DEX_LILLIGANT, // Hisuian Form NATIONAL_DEX_NIDORINO, NATIONAL_DEX_ABRA, NATIONAL_DEX_MACHOP, @@ -1339,7 +1349,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_GEODUDE, NATIONAL_DEX_BIDOOF, NATIONAL_DEX_MIENFOO, - + // 44.3 - 54.9 lbs / 20.1 - 24.9 kg NATIONAL_DEX_REUNICLUS, NATIONAL_DEX_KIRLIA, NATIONAL_DEX_RIOLU, @@ -1372,6 +1382,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_WARTORTLE, NATIONAL_DEX_LANTURN, NATIONAL_DEX_GOREBYSS, + //NATIONAL_DEX_GROWLITHE, //Hisuian Form NATIONAL_DEX_PRINPLUP, NATIONAL_DEX_CROAGUNK, NATIONAL_DEX_MOTHIM, @@ -1392,7 +1403,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_DEWOTT, NATIONAL_DEX_TALONFLAME, NATIONAL_DEX_STARAPTOR, - + // 55.1 - 110.0 lbs / 25.0 - 49.9 kg NATIONAL_DEX_SEADRA, NATIONAL_DEX_FLAREON, NATIONAL_DEX_CROCONAW, @@ -1412,6 +1423,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_ESPEON, NATIONAL_DEX_FROSLASS, NATIONAL_DEX_UMBREON, + //NATIONAL_DEX_SNEASEL, //Hisuian Form NATIONAL_DEX_HUNTAIL, NATIONAL_DEX_CARNIVINE, NATIONAL_DEX_WATCHOG, @@ -1515,6 +1527,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_PORYGON, NATIONAL_DEX_DECIDUEYE, NATIONAL_DEX_MIGHTYENA, + //NATIONAL_DEX_DECIDUEYE, //Hisuian Form NATIONAL_DEX_LIEPARD, NATIONAL_DEX_DARUMAKA, NATIONAL_DEX_FEAROW, @@ -1563,6 +1576,8 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_DIGGERSBY, NATIONAL_DEX_GLISCOR, NATIONAL_DEX_DUBWOOL, + NATIONAL_DEX_SNEASLER, + //NATIONAL_DEX_BRAVIARY, //Hisuian Form NATIONAL_DEX_PURUGLY, //NATIONAL_DEX_MANECTRIC, // Mega NATIONAL_DEX_GOTHITELLE, @@ -1585,6 +1600,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_HAKAMO_O, NATIONAL_DEX_ALAKAZAM, NATIONAL_DEX_HITMONTOP, + NATIONAL_DEX_ENAMORUS, NATIONAL_DEX_GARDEVOIR, NATIONAL_DEX_KELDEO, NATIONAL_DEX_GRANBULL, @@ -1592,7 +1608,7 @@ const u16 gPokedexOrder_Weight[] = //NATIONAL_DEX_HOUNDOOM, // Mega NATIONAL_DEX_HIPPOPOTAS, NATIONAL_DEX_HITMONLEE, - + // 110.2 - 132.1 lbs / 50.0 - 59.9 kg NATIONAL_DEX_ZWEILOUS, NATIONAL_DEX_DRAGAPULT, NATIONAL_DEX_HITMONCHAN, @@ -1644,12 +1660,13 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_HEATMOR, //NATIONAL_DEX_LURANTIS, // Totem-sized //NATIONAL_DEX_ZAPDOS, // Galarian Form + //NATIONAL_DEX_SAMUROTT, // Hisuian Form NATIONAL_DEX_MR_RIME, NATIONAL_DEX_WHIRLIPEDE, //NATIONAL_DEX_PINSIR, // Mega NATIONAL_DEX_AERODACTYL, NATIONAL_DEX_SHIFTRY, - + // 132.3 - 218.0 lbs / 60.0 - 98.9 kg NATIONAL_DEX_NIDOQUEEN, NATIONAL_DEX_MAGNETON, NATIONAL_DEX_KINGLER, @@ -1660,6 +1677,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_CRADILY, NATIONAL_DEX_BRONZOR, NATIONAL_DEX_MUSHARNA, + NATIONAL_DEX_OVERQWIL, NATIONAL_DEX_DEOXYS, // Normal Forme //NATIONAL_DEX_DEOXYS, // Attack Forme //NATIONAL_DEX_DEOXYS, // Defense Forme @@ -1687,16 +1705,20 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_MAGMORTAR, NATIONAL_DEX_LANDORUS, NATIONAL_DEX_ARMALDO, + //NATIONAL_DEX_SLIGGOO, //Hisuian Form + //NATIONAL_DEX_TYPHLOSION, //Hisuian Form //NATIONAL_DEX_LATIOS, // Mega NATIONAL_DEX_BISHARP, NATIONAL_DEX_SANDYGAST, NATIONAL_DEX_ZARUDE, NATIONAL_DEX_MACHOKE, //NATIONAL_DEX_SLOWBRO, // Galarian Form + //NATIONAL_DEX_ELECTRODE //Hisuian Form NATIONAL_DEX_TREVENANT, NATIONAL_DEX_STANTLER, NATIONAL_DEX_GRUMPIG, NATIONAL_DEX_LARVITAR, + //NATIONAL_DEX_ZOROARK, //Hisuian Form NATIONAL_DEX_CROBAT, NATIONAL_DEX_QUAGSIRE, NATIONAL_DEX_CORVIKNIGHT, @@ -1748,6 +1770,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_FERALIGATR, NATIONAL_DEX_SHARPEDO, NATIONAL_DEX_EISCUE, + NATIONAL_DEX_KLEAVOR, NATIONAL_DEX_SEEL, NATIONAL_DEX_CHESNAUGHT, NATIONAL_DEX_RILLABOOM, @@ -1761,15 +1784,16 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_SAMUROTT, NATIONAL_DEX_RAPIDASH, NATIONAL_DEX_GARCHOMP, + NATIONAL_DEX_WYRDEER, NATIONAL_DEX_BELDUM, NATIONAL_DEX_BARBARACLE, NATIONAL_DEX_KROOKODILE, NATIONAL_DEX_NOSEPASS, NATIONAL_DEX_GROTLE, //NATIONAL_DEX_MAROWAK, // Alolan Form, Totem-sized - + // 218.3 - 220.2 lbs / 99.0 - 99.9 kg NATIONAL_DEX_BERGMITE, - + // 220.5 - 225.5 lbs / 100.0 - 102.3 kg NATIONAL_DEX_VENUSAUR, //NATIONAL_DEX_KANGASKHAN, // Mega NATIONAL_DEX_TROPIUS, @@ -1781,7 +1805,7 @@ const u16 gPokedexOrder_Weight[] = //NATIONAL_DEX_BLASTOISE, // Mega //NATIONAL_DEX_SWAMPERT, // Mega NATIONAL_DEX_BOLDORE, - + // 225.8 - 330.5 lbs / 102.4 - 149.9 kg NATIONAL_DEX_RAMPARDOS, NATIONAL_DEX_SALAMENCE, NATIONAL_DEX_GRAVELER, @@ -1799,6 +1823,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_FERROTHORN, NATIONAL_DEX_MUDBRAY, NATIONAL_DEX_ZACIAN, // Hero of Many Battles + NATIONAL_DEX_BASCULEGION, //NATIONAL_DEX_CHARIZARD, // Mega X NATIONAL_DEX_SHELGON, //NATIONAL_DEX_SALAMENCE, // Mega @@ -1838,7 +1863,7 @@ const u16 gPokedexOrder_Weight[] = //NATIONAL_DEX_VIKAVOLT, // Totem-sized NATIONAL_DEX_CRYOGONAL, NATIONAL_DEX_BASTIODON, - + // 330.7 - 440.7 lbs / 150.0 - 199.9 kg NATIONAL_DEX_EMBOAR, NATIONAL_DEX_NAGANADEL, NATIONAL_DEX_ARCTOZOLT, @@ -1852,6 +1877,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_HYDREIGON, //NATIONAL_DEX_SABLEYE, // Mega NATIONAL_DEX_MILOTIC, + //NATIONAL_DEX_ARCANINE, //Hisuian Form NATIONAL_DEX_LUNATONE, NATIONAL_DEX_REGICE, NATIONAL_DEX_ARCTOVISH, @@ -1866,7 +1892,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_VOLCANION, NATIONAL_DEX_ENTEI, NATIONAL_DEX_HO_OH, - + // 440.9 - 451.3 lbs / 200.0 - 204.7 kg NATIONAL_DEX_CRUSTLE, NATIONAL_DEX_VIRIZION, NATIONAL_DEX_REGIDRAGO, @@ -1874,11 +1900,10 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_TYRANITAR, NATIONAL_DEX_METANG, NATIONAL_DEX_YVELTAL, - + // 451.5 - 661.2 lbs / 204.8 - 299.9 kg NATIONAL_DEX_REGISTEEL, NATIONAL_DEX_RAYQUAZA, //NATIONAL_DEX_KOMMO_O, // Totem-sized - NATIONAL_DEX_ONIX, NATIONAL_DEX_DRAGONITE, NATIONAL_DEX_DHELMISE, @@ -1905,16 +1930,17 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_GIGALITH, NATIONAL_DEX_BEARTIC, NATIONAL_DEX_TERRAKION, + //NATIONAL_DEX_AVALUGG, //Hisuian Form NATIONAL_DEX_TYRANTRUM, - NATIONAL_DEX_RHYPERIOR, + NATIONAL_DEX_URSALUNA, NATIONAL_DEX_MAMOSWINE, - + // 661.4 - 667.0 lbs / 300.0 - 307.1 kg NATIONAL_DEX_GOLEM, NATIONAL_DEX_HIPPOWDON, //NATIONAL_DEX_GYARADOS, // Mega NATIONAL_DEX_ZYGARDE, // 50% Forme - + // 677.3 - 667.0 lbs / 307.2 - 359.9 kg NATIONAL_DEX_TORTERRA, NATIONAL_DEX_COALOSSAL, //NATIONAL_DEX_GOLEM, // Alolan Form @@ -1924,6 +1950,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_GOLURK, NATIONAL_DEX_RESHIRAM, NATIONAL_DEX_BUZZWOLE, + //NATIONAL_DEX_GOODRA, //Hisuian Form NATIONAL_DEX_PALKIA, NATIONAL_DEX_PROBOPASS, NATIONAL_DEX_ZEKROM, @@ -1931,13 +1958,13 @@ const u16 gPokedexOrder_Weight[] = //NATIONAL_DEX_GLALIE, // Mega NATIONAL_DEX_KYOGRE, //NATIONAL_DEX_ZACIAN, // Crowned Sword - + // 793.7 - 902.8 lbs / 360.0 - 409.5 kg NATIONAL_DEX_AGGRON, //NATIONAL_DEX_RAYQUAZA, // Mega //NATIONAL_DEX_AGGRON, // Mega NATIONAL_DEX_WAILORD, NATIONAL_DEX_STEELIX, - + // 903.0 - 2204.4 lbs / 409.6 - 999.9 kg //NATIONAL_DEX_EXEGGUTOR, // Alolan Form NATIONAL_DEX_REGIGIGAS, //NATIONAL_DEX_KYOGRE, // Primal @@ -1950,6 +1977,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_METAGROSS, //NATIONAL_DEX_ZYGARDE, // Complete Forme //NATIONAL_DEX_GIRATINA, // Origin Forme + //NATIONAL_DEX_PALKIA, // Origin Form NATIONAL_DEX_DIALGA, //NATIONAL_DEX_STEELIX, // Mega NATIONAL_DEX_GIRATINA, // Altered Forme @@ -1958,6 +1986,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_GLASTRIER, //NATIONAL_DEX_CALYREX, // Ice Rider NATIONAL_DEX_STAKATAKA, + //NATIONAL_DEX_DIALGA, // Origin Form NATIONAL_DEX_GUZZLORD, NATIONAL_DEX_MUDSDALE, //NATIONAL_DEX_METAGROSS, // Mega @@ -1970,12 +1999,14 @@ const u16 gPokedexOrder_Weight[] = const u16 gPokedexOrder_Height[] = { + // 0'04" / 0.1m NATIONAL_DEX_JOLTIK, NATIONAL_DEX_FLABEBE, NATIONAL_DEX_CUTIEFLY, NATIONAL_DEX_COMFEY, NATIONAL_DEX_COSMOEM, NATIONAL_DEX_SINISTEA, + // 0'08" / 0.2m NATIONAL_DEX_DIGLETT, //NATIONAL_DEX_DIGLETT, // Alolan Form NATIONAL_DEX_NATU, @@ -2000,7 +2031,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_APPLIN, NATIONAL_DEX_POLTEAGEIST, NATIONAL_DEX_MILCERY, - + // 1'00" / 0.3m NATIONAL_DEX_CATERPIE, NATIONAL_DEX_WEEDLE, NATIONAL_DEX_PIDGEY, @@ -2147,13 +2178,14 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_TOXEL, NATIONAL_DEX_HATENNA, NATIONAL_DEX_IMPIDIMP, - + // 1'08" / 0.5m NATIONAL_DEX_SQUIRTLE, NATIONAL_DEX_NIDORAN_M, NATIONAL_DEX_JIGGLYPUFF, NATIONAL_DEX_ODDISH, NATIONAL_DEX_MANKEY, NATIONAL_DEX_VOLTORB, + //NATIONAL_DEX_VOLTORB, //Hisuian Form NATIONAL_DEX_KABUTO, NATIONAL_DEX_CYNDAQUIL, NATIONAL_DEX_SPINARAK, @@ -2161,6 +2193,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_MURKROW, NATIONAL_DEX_UNOWN, NATIONAL_DEX_QWILFISH, + //NATIONAL_DEX_QWILFISH, //Hisuian Form NATIONAL_DEX_PHANPY, NATIONAL_DEX_TREECKO, NATIONAL_DEX_POOCHYENA, @@ -2217,7 +2250,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_ELDEGOSS, NATIONAL_DEX_ARROKUDA, NATIONAL_DEX_DREEPY, - + // 2'00" / 0.6m NATIONAL_DEX_CHARMANDER, NATIONAL_DEX_KAKUNA, NATIONAL_DEX_SANDSHREW, @@ -2303,7 +2336,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_CLOBBOPUS, NATIONAL_DEX_HATTREM, NATIONAL_DEX_KUBFU, - + // 2'04" / 0.7m NATIONAL_DEX_BULBASAUR, NATIONAL_DEX_METAPOD, NATIONAL_DEX_RATICATE, @@ -2339,11 +2372,13 @@ const u16 gPokedexOrder_Height[] = //NATIONAL_DEX_DARUMAKA, // Galarian Form NATIONAL_DEX_TIRTOUGA, NATIONAL_DEX_ZORUA, + //NATIONAL_DEX_ZORUA, // Hisuian Form NATIONAL_DEX_GOTHORITA, NATIONAL_DEX_STUNFISK, //NATIONAL_DEX_STUNFISK, // Galarian Form NATIONAL_DEX_QUILLADIN, NATIONAL_DEX_FLETCHINDER, + //NATIONAL_DEX_SLIGGOO, // Hisuian Form //NATIONAL_DEX_GOURGEIST, // Small Size NATIONAL_DEX_DIANCIE, NATIONAL_DEX_DARTRIX, @@ -2355,7 +2390,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_THWACKEY, NATIONAL_DEX_DRIZZILE, NATIONAL_DEX_SIZZLIPEDE, - + // 2'07" / 0.8m NATIONAL_DEX_RAICHU, NATIONAL_DEX_NIDORINA, NATIONAL_DEX_ZUBAT, @@ -2409,6 +2444,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_MORGREM, NATIONAL_DEX_PERRSERKER, NATIONAL_DEX_SIRFETCHD, + // 2'11" / 0.9m NATIONAL_DEX_NIDORINO, NATIONAL_DEX_ABRA, NATIONAL_DEX_TENTACOOL, @@ -2419,6 +2455,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_QUILAVA, NATIONAL_DEX_ESPEON, NATIONAL_DEX_SNEASEL, + //NATIONAL_DEX_SNEASEL, //Hisuian Form NATIONAL_DEX_OCTILLERY, NATIONAL_DEX_DELIBIRD, NATIONAL_DEX_GROVYLE, @@ -2445,7 +2482,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_LURANTIS, NATIONAL_DEX_BRUXISH, NATIONAL_DEX_INDEEDEE, - + // 3'03" / 1.0m NATIONAL_DEX_IVYSAUR, NATIONAL_DEX_WARTORTLE, NATIONAL_DEX_BEEDRILL, @@ -2516,6 +2553,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_DREDNAW, NATIONAL_DEX_BOLTUND, NATIONAL_DEX_CURSOLA, + // 3'07" / 1.1m NATIONAL_DEX_CHARMELEON, NATIONAL_DEX_BUTTERFREE, NATIONAL_DEX_PIDGEOTTO, @@ -2560,6 +2598,7 @@ const u16 gPokedexOrder_Height[] = //NATIONAL_DEX_LYCANROC, // Midnight Form NATIONAL_DEX_CARKOL, NATIONAL_DEX_CALYREX, + // 3'11" / 1.2m NATIONAL_DEX_FEAROW, //NATIONAL_DEX_SANDSLASH, // Alolan Form NATIONAL_DEX_VILEPLUME, @@ -2568,6 +2607,7 @@ const u16 gPokedexOrder_Height[] = //NATIONAL_DEX_SLOWPOKE, // Galarian Form NATIONAL_DEX_MUK, NATIONAL_DEX_ELECTRODE, + //NATIONAL_DEX_ELECTRODE, //Hisuian Form NATIONAL_DEX_LICKITUNG, NATIONAL_DEX_WEEZING, NATIONAL_DEX_SEADRA, @@ -2602,6 +2642,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_GURDURR, NATIONAL_DEX_LEAVANNY, NATIONAL_DEX_WHIRLIPEDE, + //NATIONAL_DEX_LILLIGANT, //Hisuian Form NATIONAL_DEX_CARRACOSTA, NATIONAL_DEX_FRILLISH, NATIONAL_DEX_ALOMOMOLA, @@ -2619,7 +2660,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_THIEVUL, NATIONAL_DEX_CUFANT, NATIONAL_DEX_REGIELEKI, - + // 4'03" / 1.3m NATIONAL_DEX_NIDOQUEEN, NATIONAL_DEX_CLEFABLE, NATIONAL_DEX_POLIWRATH, @@ -2656,6 +2697,8 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_DUBWOOL, NATIONAL_DEX_BARRASKEWDA, NATIONAL_DEX_FROSMOTH, + NATIONAL_DEX_SNEASLER, + // 4'07" / 1.4m //NATIONAL_DEX_BEEDRILL, // Mega //NATIONAL_DEX_RATICATE, // Alolan Form, Totem-sized NATIONAL_DEX_NIDOKING, @@ -2691,10 +2734,12 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_ZWEILOUS, //NATIONAL_DEX_TORNADUS, // Therian Forme NATIONAL_DEX_KELDEO, + //NATIONAL_DEX_AVALUGG, // Hisuian Form //NATIONAL_DEX_GUMSHOOS, // Totem-sized NATIONAL_DEX_CINDERACE, NATIONAL_DEX_EISCUE, NATIONAL_DEX_DRAKLOAK, + // 4'11" / 1.5m NATIONAL_DEX_PIDGEOT, NATIONAL_DEX_VENOMOTH, NATIONAL_DEX_ALAKAZAM, @@ -2724,6 +2769,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_CRESSELIA, NATIONAL_DEX_DARKRAI, NATIONAL_DEX_SAMUROTT, + //NATIONAL_DEX_SAMUROTT, // Hisuian Form //NATIONAL_DEX_AUDINO, // Mega NATIONAL_DEX_CONKELDURR, NATIONAL_DEX_SEISMITOAD, @@ -2747,7 +2793,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_ZERAORA, NATIONAL_DEX_GRIMMSNARL, NATIONAL_DEX_MR_RIME, - + // 5'03" / 1.6m NATIONAL_DEX_BLASTOISE, //NATIONAL_DEX_BLASTOISE, // Mega NATIONAL_DEX_GOLBAT, @@ -2759,6 +2805,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_HYPNO, NATIONAL_DEX_ZAPDOS, //NATIONAL_DEX_ZAPDOS, // Galarian Form + //NATIONAL_DEX_TYPHLOSION, // Hisuian Form NATIONAL_DEX_NOCTOWL, NATIONAL_DEX_GARDEVOIR, //NATIONAL_DEX_GARDEVOIR, // Mega @@ -2771,17 +2818,23 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_EMBOAR, NATIONAL_DEX_ZEBSTRIKA, NATIONAL_DEX_ZOROARK, + //NATIONAL_DEX_ZOROARK, // Hisuian Form NATIONAL_DEX_DRUDDIGON, NATIONAL_DEX_BISHARP, NATIONAL_DEX_BOUFFALANT, + //NATIONAL_DEX_BRAVIARY, // Hisuian Form NATIONAL_DEX_VOLCARONA, NATIONAL_DEX_CHESNAUGHT, NATIONAL_DEX_DECIDUEYE, + //NATIONAL_DEX_DECIDUEYE, // Hisuian Form NATIONAL_DEX_KOMMO_O, NATIONAL_DEX_TOXTRICITY, NATIONAL_DEX_GRAPPLOCT, NATIONAL_DEX_OBSTAGOON, NATIONAL_DEX_RUNERIGUS, + NATIONAL_DEX_ENAMORUS, + //NATIONAL_DEX_ENAMORUS, //Therian Form + // 5'07" / 1.7m NATIONAL_DEX_CHARIZARD, //NATIONAL_DEX_CHARIZARD, // Mega X //NATIONAL_DEX_CHARIZARD, // Mega Y @@ -2813,9 +2866,11 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_COFAGRIGUS, NATIONAL_DEX_GOGOAT, NATIONAL_DEX_AEGISLASH, + //NATIONAL_DEX_GOODRA, //Hisuian Form //NATIONAL_DEX_GOURGEIST, // Super Size NATIONAL_DEX_VOLCANION, NATIONAL_DEX_CRABOMINABLE, + // 5'11" / 1.8m NATIONAL_DEX_DODRIO, NATIONAL_DEX_AERODACTYL, NATIONAL_DEX_DRATINI, @@ -2845,7 +2900,9 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_DRACOZOLT, NATIONAL_DEX_DURALUDON, NATIONAL_DEX_ZARUDE, - + NATIONAL_DEX_WYRDEER, + NATIONAL_DEX_KLEAVOR, + // 6'03" / 1.9m NATIONAL_DEX_ARCANINE, NATIONAL_DEX_RHYDON, //NATIONAL_DEX_HOUNDOOM, // Mega @@ -2867,8 +2924,10 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_INTELEON, NATIONAL_DEX_URSHIFU, // Single Strike Style //NATIONAL_DEX_URSHIFU, // Rapid Strike Style + // 6'07" / 2.0m NATIONAL_DEX_VENUSAUR, NATIONAL_DEX_EKANS, + //NATIONAL_DEX_ARCANINE, //Hisuian Form //NATIONAL_DEX_SLOWBRO, // Mega NATIONAL_DEX_EXEGGUTOR, NATIONAL_DEX_MOLTRES, @@ -2894,6 +2953,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_TURTONATOR, NATIONAL_DEX_ARCTOVISH, NATIONAL_DEX_SPECTRIER, + // 6'11" / 2.1m //NATIONAL_DEX_AERODACTYL, // Mega NATIONAL_DEX_SNORLAX, NATIONAL_DEX_MANTINE, @@ -2908,7 +2968,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_RILLABOOM, NATIONAL_DEX_HATTERENE, NATIONAL_DEX_REGIDRAGO, - + // 7'03" / 2.2m //NATIONAL_DEX_PIDGEOT, // Mega NATIONAL_DEX_KANGASKHAN, //NATIONAL_DEX_KANGASKHAN, // Mega @@ -2922,6 +2982,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_CORVIKNIGHT, NATIONAL_DEX_SILICOBRA, NATIONAL_DEX_GLASTRIER, + // 7'07" / 2.3m //NATIONAL_DEX_MEWTWO, // Mega X NATIONAL_DEX_FERALIGATR, NATIONAL_DEX_HARIYAMA, @@ -2929,13 +2990,15 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_SILVALLY, NATIONAL_DEX_ARCTOZOLT, NATIONAL_DEX_DRACOVISH, + // 7'10" / 2.4m //NATIONAL_DEX_VENUSAUR, // Mega NATIONAL_DEX_RHYPERIOR, NATIONAL_DEX_BUZZWOLE, NATIONAL_DEX_NECROZMA, //NATIONAL_DEX_CALYREX, // Ice Rider //NATIONAL_DEX_CALYREX, // Shadow Rider - + NATIONAL_DEX_URSALUNA, + // 8'02" / 2.5m NATIONAL_DEX_LAPRAS, //NATIONAL_DEX_TYRANITAR, // Mega //NATIONAL_DEX_SHARPEDO, // Mega @@ -2947,19 +3010,24 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_MUDSDALE, NATIONAL_DEX_MELMETAL, NATIONAL_DEX_STONJOURNER, + NATIONAL_DEX_OVERQWIL, + // 8'06" / 2.6m NATIONAL_DEX_BEARTIC, //NATIONAL_DEX_VIKAVOLT, // Totem-sized + // 8'10" / 2.7m NATIONAL_DEX_SEVIPER, //NATIONAL_DEX_ABOMASNOW, // Mega NATIONAL_DEX_AURORUS, - + // 9'02" / 2.8m NATIONAL_DEX_GOLURK, NATIONAL_DEX_COALOSSAL, NATIONAL_DEX_ZACIAN, // Hero of Many Battles //NATIONAL_DEX_ZACIAN, // Crowned Sword + // 9'06" / 2.9m NATIONAL_DEX_ZEKROM, NATIONAL_DEX_ZAMAZENTA, // Hero of Many Battles //NATIONAL_DEX_ZAMAZENTA, // Crowned Shield + // 9'10" / 3.0m //NATIONAL_DEX_WEEZING, // Galarian Form //NATIONAL_DEX_THUNDURUS, // Therian Form NATIONAL_DEX_KYUREM, @@ -2969,74 +3037,87 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_FALINKS, NATIONAL_DEX_COPPERAJAH, NATIONAL_DEX_DRAGAPULT, - + NATIONAL_DEX_BASCULEGION, + // 10'02" / 3.1m //NATIONAL_DEX_ARAQUANID, // Totem-sized + // 10'06" / 3.2m NATIONAL_DEX_ARCEUS, NATIONAL_DEX_RESHIRAM, + // 10'10" / 3.3m NATIONAL_DEX_SERPERIOR, //NATIONAL_DEX_KYUREM, // Black - + // 11'02" / 3.4m NATIONAL_DEX_SOLGALEO, + // 11'06" / 3.5m NATIONAL_DEX_ARBOK, NATIONAL_DEX_GROUDON, + // 11'10" / 3.6m //NATIONAL_DEX_KYUREM, // White NATIONAL_DEX_NAGANADEL, - + // 12'02" / 3.7m NATIONAL_DEX_REGIGIGAS, + // 12'06" / 3.8m NATIONAL_DEX_HO_OH, NATIONAL_DEX_XURKITREE, //NATIONAL_DEX_NECROZMA, // Dusk Mane NATIONAL_DEX_SANDACONDA, + // 12'10" / 3.9m NATIONAL_DEX_DHELMISE, - + // 13'01" / 4.0m NATIONAL_DEX_DRAGONAIR, NATIONAL_DEX_LUNALA, + // 13'09" / 4.2m NATIONAL_DEX_PALKIA, //NATIONAL_DEX_NECROZMA, // Dawn Wings - + // 14'09" / 4.5m NATIONAL_DEX_KYOGRE, NATIONAL_DEX_GIRATINA, // Altered Forme //NATIONAL_DEX_ZYGARDE, // Complete Forme - + // 16'05" / 5.0m //NATIONAL_DEX_GROUDON, // Primal NATIONAL_DEX_ZYGARDE, // 50% Forme - + // 17'01" / 5.2m NATIONAL_DEX_LUGIA, + // 17'09" / 5.4m NATIONAL_DEX_DIALGA, - + // 18'01" / 5.5m NATIONAL_DEX_GUZZLORD, NATIONAL_DEX_STAKATAKA, - + // 19'00" / 5.8m NATIONAL_DEX_YVELTAL, - + // 20'04" / 6.2m NATIONAL_DEX_MILOTIC, - + //NATIONAL_DEX_PALKIA, //Origin Forme + // 21'04" / 6.5m NATIONAL_DEX_GYARADOS, //NATIONAL_DEX_GYARADOS, // Mega //NATIONAL_DEX_HOOPA, // Unbound - + // 22'08" / 6.9m //NATIONAL_DEX_GIRATINA, // Origin Forme - + // 23'00" / 7.0m NATIONAL_DEX_RAYQUAZA, - + //NATIONAL_DEX_DIALGA, //Origin Forme + // 24'07" / 7.5m //NATIONAL_DEX_NECROZMA, // Ultra - + // 26'11" / 8.2m //NATIONAL_DEX_WISHIWASHI, // School Form - + // 28'10" / 8.8m NATIONAL_DEX_ONIX, - + // 30'02" / 9.2m NATIONAL_DEX_STEELIX, NATIONAL_DEX_CELESTEELA, - + // 32'02" / 9.8m //NATIONAL_DEX_KYOGRE, // Primal - + // 34'05" / 10.5m //NATIONAL_DEX_STEELIX, // Mega - + // 35'05" / 10.8m //NATIONAL_DEX_RAYQUAZA, // Mega - + // 35'09" / 10.9m //NATIONAL_DEX_EXEGGUTOR, // Alolan Form - + // 47'07" / 14.5m NATIONAL_DEX_WAILORD, - + // 65'07" / 20m NATIONAL_DEX_ETERNATUS, + // 328'01" / 100m + //NATIONAL_DEX_ETERNATUS, // Eternamax }; diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h index 4403a62927..bf32932032 100644 --- a/src/data/pokemon/pokedex_text.h +++ b/src/data/pokemon/pokedex_text.h @@ -2320,6 +2320,7 @@ const u8 gChimechoPokedexText[] = _( "themselves using seven different and\n" "distinguishing cries."); +#if P_NEW_POKEMON == TRUE const u8 gTurtwigPokedexText[] = _( "The shell on its back is made of soil. \n" "On a very healthy Turtwig, the shell \n" @@ -2546,8 +2547,7 @@ const u8 gAmbipomPokedexText[] = _( "They live on large trees. Split into two,\n" "the tails are so adept at handling and\n" "doing things, Ambipom rarely uses\n" - "its hands now.\n" - ""); + "its hands now."); const u8 gDrifloonPokedexText[] = _( "Because of the way it floats aimlessly,\n" @@ -3045,8 +3045,7 @@ const u8 gHerdierPokedexText[] = _( "Its dense black fur grows continuously.\n" "The high cost of keeping its hard fur\n" "properly groomed makes this a\n" - "troublesome Pokémon to train.\n" - ""); + "troublesome Pokémon to train."); const u8 gStoutlandPokedexText[] = _( "Intelligent, good-natured, and valiant,\n" @@ -3190,8 +3189,7 @@ const u8 gAudinoPokedexText[] = _( "Its auditory sense is astounding.\n" "Using the feelers on its ears, it can tell\n" "how someone is feeling or when an egg\n" - "might hatch.\n" - ""); + "might hatch."); const u8 gTimburrPokedexText[] = _( "These Pokémon appear at building\n" @@ -3383,8 +3381,7 @@ const u8 gCofagrigusPokedexText[] = _( "Grave robbers who mistake them for\n" "real coffins and get too close end up\n" "trapped inside their bodies. Their bodies\n" - "are covered in pure gold.\n" - ""); + "are covered in pure gold."); const u8 gTirtougaPokedexText[] = _( "Reputed to be the ancestor of most\n" @@ -4260,15 +4257,13 @@ const u8 gTrevenantPokedexText[] = _( "Through its roots, it exerts control over\n" "other trees. A deadly curse falls upon\n" "anyone cutting down trees in forests\n" - "where Trevenant dwell.\n" - ""); + "where Trevenant dwell."); const u8 gPumpkabooPokedexText[] = _( "It is said to carry wandering spirits to\n" "the place where they belong so they can\n" "move on. As the sun sets, it becomes\n" - "restless and active.\n" - ""); + "restless and active."); const u8 gGourgeistPokedexText[] = _( "Singing in eerie voices, they wander town\n" @@ -4514,8 +4509,7 @@ const u8 gDewpiderPokedexText[] = _( "It crawls onto the land in search of food.\n" "When it comes across enemies or potential\n" "prey, this Pokémon smashes its\n" - "water-bubble-covered head into them.\n" - ""); + "water-bubble-covered head into them."); const u8 gAraquanidPokedexText[] = _( "Despite what its appearance suggests,\n" @@ -5355,3 +5349,45 @@ const u8 gCalyrexPokedexText[] = _( "providing healing and blessings. It\n" "reigned over the Galar region in times\n" "of yore."); + +const u8 gWyrdeerPokedexText[] = _( + "The black orbs shine with an uncanny light\n" + "when it is erecting invisible barriers.\n" + "The fur shed from its beard retains heat\n" + "and is useful for winter clothing."); + +const u8 gKleavorPokedexText[] = _( + "A violent creature that fells trees with\n" + "its crude axes and shields itself with hard\n" + "stone. Should one encounter this Pokémon\n" + "in the wild, one's only recourse is to flee."); + +const u8 gUrsalunaPokedexText[] = _( + "Swampy terrain gives Ursaluna its burly\n" + "physique and newfound capacity to\n" + "manipulate peat at will."); + +const u8 gBasculegionPokedexText[] = _( + "Clads itself in the souls of comrades that\n" + "perished before fulfilling their goals of\n" + "journeying upstream. No other species in\n" + "all Hisui's rivers is Basculegion's equal."); + +const u8 gSneaslerPokedexText[] = _( + "Because of its wicked poison and daunting\n" + "physical prowess, no other species could\n" + "hope to best it on frozen highlands. It\n" + "prefers solitude and doesn't form packs."); + +const u8 gOverqwilPokedexText[] = _( + "Its lancelike spikes and savage\n" + "temperament have earned it the\n" + "nickname “Sea Fiend”.\n" + "It slurps up poison to nourish itself."); + +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."); +#endif diff --git a/src/data/pokemon/teachable_learnset_pointers.h b/src/data/pokemon/teachable_learnset_pointers.h new file mode 100644 index 0000000000..7727cde825 --- /dev/null +++ b/src/data/pokemon/teachable_learnset_pointers.h @@ -0,0 +1,1307 @@ +const u16 *const gTeachableLearnsets[NUM_SPECIES] = +{ + [SPECIES_NONE] = sBulbasaurTeachableLearnset, + [SPECIES_BULBASAUR] = sBulbasaurTeachableLearnset, + [SPECIES_IVYSAUR] = sIvysaurTeachableLearnset, + [SPECIES_VENUSAUR] = sVenusaurTeachableLearnset, + [SPECIES_CHARMANDER] = sCharmanderTeachableLearnset, + [SPECIES_CHARMELEON] = sCharmeleonTeachableLearnset, + [SPECIES_CHARIZARD] = sCharizardTeachableLearnset, + [SPECIES_SQUIRTLE] = sSquirtleTeachableLearnset, + [SPECIES_WARTORTLE] = sWartortleTeachableLearnset, + [SPECIES_BLASTOISE] = sBlastoiseTeachableLearnset, + [SPECIES_CATERPIE] = sCaterpieTeachableLearnset, + [SPECIES_METAPOD] = sMetapodTeachableLearnset, + [SPECIES_BUTTERFREE] = sButterfreeTeachableLearnset, + [SPECIES_WEEDLE] = sWeedleTeachableLearnset, + [SPECIES_KAKUNA] = sKakunaTeachableLearnset, + [SPECIES_BEEDRILL] = sBeedrillTeachableLearnset, + [SPECIES_PIDGEY] = sPidgeyTeachableLearnset, + [SPECIES_PIDGEOTTO] = sPidgeottoTeachableLearnset, + [SPECIES_PIDGEOT] = sPidgeotTeachableLearnset, + [SPECIES_RATTATA] = sRattataTeachableLearnset, + [SPECIES_RATICATE] = sRaticateTeachableLearnset, + [SPECIES_SPEAROW] = sSpearowTeachableLearnset, + [SPECIES_FEAROW] = sFearowTeachableLearnset, + [SPECIES_EKANS] = sEkansTeachableLearnset, + [SPECIES_ARBOK] = sArbokTeachableLearnset, + [SPECIES_PIKACHU] = sPikachuTeachableLearnset, + [SPECIES_RAICHU] = sRaichuTeachableLearnset, + [SPECIES_SANDSHREW] = sSandshrewTeachableLearnset, + [SPECIES_SANDSLASH] = sSandslashTeachableLearnset, + [SPECIES_NIDORAN_F] = sNidoranFTeachableLearnset, + [SPECIES_NIDORINA] = sNidorinaTeachableLearnset, + [SPECIES_NIDOQUEEN] = sNidoqueenTeachableLearnset, + [SPECIES_NIDORAN_M] = sNidoranMTeachableLearnset, + [SPECIES_NIDORINO] = sNidorinoTeachableLearnset, + [SPECIES_NIDOKING] = sNidokingTeachableLearnset, + [SPECIES_CLEFAIRY] = sClefairyTeachableLearnset, + [SPECIES_CLEFABLE] = sClefableTeachableLearnset, + [SPECIES_VULPIX] = sVulpixTeachableLearnset, + [SPECIES_NINETALES] = sNinetalesTeachableLearnset, + [SPECIES_JIGGLYPUFF] = sJigglypuffTeachableLearnset, + [SPECIES_WIGGLYTUFF] = sWigglytuffTeachableLearnset, + [SPECIES_ZUBAT] = sZubatTeachableLearnset, + [SPECIES_GOLBAT] = sGolbatTeachableLearnset, + [SPECIES_ODDISH] = sOddishTeachableLearnset, + [SPECIES_GLOOM] = sGloomTeachableLearnset, + [SPECIES_VILEPLUME] = sVileplumeTeachableLearnset, + [SPECIES_PARAS] = sParasTeachableLearnset, + [SPECIES_PARASECT] = sParasectTeachableLearnset, + [SPECIES_VENONAT] = sVenonatTeachableLearnset, + [SPECIES_VENOMOTH] = sVenomothTeachableLearnset, + [SPECIES_DIGLETT] = sDiglettTeachableLearnset, + [SPECIES_DUGTRIO] = sDugtrioTeachableLearnset, + [SPECIES_MEOWTH] = sMeowthTeachableLearnset, + [SPECIES_PERSIAN] = sPersianTeachableLearnset, + [SPECIES_PSYDUCK] = sPsyduckTeachableLearnset, + [SPECIES_GOLDUCK] = sGolduckTeachableLearnset, + [SPECIES_MANKEY] = sMankeyTeachableLearnset, + [SPECIES_PRIMEAPE] = sPrimeapeTeachableLearnset, + [SPECIES_GROWLITHE] = sGrowlitheTeachableLearnset, + [SPECIES_ARCANINE] = sArcanineTeachableLearnset, + [SPECIES_POLIWAG] = sPoliwagTeachableLearnset, + [SPECIES_POLIWHIRL] = sPoliwhirlTeachableLearnset, + [SPECIES_POLIWRATH] = sPoliwrathTeachableLearnset, + [SPECIES_ABRA] = sAbraTeachableLearnset, + [SPECIES_KADABRA] = sKadabraTeachableLearnset, + [SPECIES_ALAKAZAM] = sAlakazamTeachableLearnset, + [SPECIES_MACHOP] = sMachopTeachableLearnset, + [SPECIES_MACHOKE] = sMachokeTeachableLearnset, + [SPECIES_MACHAMP] = sMachampTeachableLearnset, + [SPECIES_BELLSPROUT] = sBellsproutTeachableLearnset, + [SPECIES_WEEPINBELL] = sWeepinbellTeachableLearnset, + [SPECIES_VICTREEBEL] = sVictreebelTeachableLearnset, + [SPECIES_TENTACOOL] = sTentacoolTeachableLearnset, + [SPECIES_TENTACRUEL] = sTentacruelTeachableLearnset, + [SPECIES_GEODUDE] = sGeodudeTeachableLearnset, + [SPECIES_GRAVELER] = sGravelerTeachableLearnset, + [SPECIES_GOLEM] = sGolemTeachableLearnset, + [SPECIES_PONYTA] = sPonytaTeachableLearnset, + [SPECIES_RAPIDASH] = sRapidashTeachableLearnset, + [SPECIES_SLOWPOKE] = sSlowpokeTeachableLearnset, + [SPECIES_SLOWBRO] = sSlowbroTeachableLearnset, + [SPECIES_MAGNEMITE] = sMagnemiteTeachableLearnset, + [SPECIES_MAGNETON] = sMagnetonTeachableLearnset, + [SPECIES_FARFETCHD] = sFarfetchdTeachableLearnset, + [SPECIES_DODUO] = sDoduoTeachableLearnset, + [SPECIES_DODRIO] = sDodrioTeachableLearnset, + [SPECIES_SEEL] = sSeelTeachableLearnset, + [SPECIES_DEWGONG] = sDewgongTeachableLearnset, + [SPECIES_GRIMER] = sGrimerTeachableLearnset, + [SPECIES_MUK] = sMukTeachableLearnset, + [SPECIES_SHELLDER] = sShellderTeachableLearnset, + [SPECIES_CLOYSTER] = sCloysterTeachableLearnset, + [SPECIES_GASTLY] = sGastlyTeachableLearnset, + [SPECIES_HAUNTER] = sHaunterTeachableLearnset, + [SPECIES_GENGAR] = sGengarTeachableLearnset, + [SPECIES_ONIX] = sOnixTeachableLearnset, + [SPECIES_DROWZEE] = sDrowzeeTeachableLearnset, + [SPECIES_HYPNO] = sHypnoTeachableLearnset, + [SPECIES_KRABBY] = sKrabbyTeachableLearnset, + [SPECIES_KINGLER] = sKinglerTeachableLearnset, + [SPECIES_VOLTORB] = sVoltorbTeachableLearnset, + [SPECIES_ELECTRODE] = sElectrodeTeachableLearnset, + [SPECIES_EXEGGCUTE] = sExeggcuteTeachableLearnset, + [SPECIES_EXEGGUTOR] = sExeggutorTeachableLearnset, + [SPECIES_CUBONE] = sCuboneTeachableLearnset, + [SPECIES_MAROWAK] = sMarowakTeachableLearnset, + [SPECIES_HITMONLEE] = sHitmonleeTeachableLearnset, + [SPECIES_HITMONCHAN] = sHitmonchanTeachableLearnset, + [SPECIES_LICKITUNG] = sLickitungTeachableLearnset, + [SPECIES_KOFFING] = sKoffingTeachableLearnset, + [SPECIES_WEEZING] = sWeezingTeachableLearnset, + [SPECIES_RHYHORN] = sRhyhornTeachableLearnset, + [SPECIES_RHYDON] = sRhydonTeachableLearnset, + [SPECIES_CHANSEY] = sChanseyTeachableLearnset, + [SPECIES_TANGELA] = sTangelaTeachableLearnset, + [SPECIES_KANGASKHAN] = sKangaskhanTeachableLearnset, + [SPECIES_HORSEA] = sHorseaTeachableLearnset, + [SPECIES_SEADRA] = sSeadraTeachableLearnset, + [SPECIES_GOLDEEN] = sGoldeenTeachableLearnset, + [SPECIES_SEAKING] = sSeakingTeachableLearnset, + [SPECIES_STARYU] = sStaryuTeachableLearnset, + [SPECIES_STARMIE] = sStarmieTeachableLearnset, + [SPECIES_MR_MIME] = sMrMimeTeachableLearnset, + [SPECIES_SCYTHER] = sScytherTeachableLearnset, + [SPECIES_JYNX] = sJynxTeachableLearnset, + [SPECIES_ELECTABUZZ] = sElectabuzzTeachableLearnset, + [SPECIES_MAGMAR] = sMagmarTeachableLearnset, + [SPECIES_PINSIR] = sPinsirTeachableLearnset, + [SPECIES_TAUROS] = sTaurosTeachableLearnset, + [SPECIES_MAGIKARP] = sMagikarpTeachableLearnset, + [SPECIES_GYARADOS] = sGyaradosTeachableLearnset, + [SPECIES_LAPRAS] = sLaprasTeachableLearnset, + [SPECIES_DITTO] = sDittoTeachableLearnset, + [SPECIES_EEVEE] = sEeveeTeachableLearnset, + [SPECIES_VAPOREON] = sVaporeonTeachableLearnset, + [SPECIES_JOLTEON] = sJolteonTeachableLearnset, + [SPECIES_FLAREON] = sFlareonTeachableLearnset, + [SPECIES_PORYGON] = sPorygonTeachableLearnset, + [SPECIES_OMANYTE] = sOmanyteTeachableLearnset, + [SPECIES_OMASTAR] = sOmastarTeachableLearnset, + [SPECIES_KABUTO] = sKabutoTeachableLearnset, + [SPECIES_KABUTOPS] = sKabutopsTeachableLearnset, + [SPECIES_AERODACTYL] = sAerodactylTeachableLearnset, + [SPECIES_SNORLAX] = sSnorlaxTeachableLearnset, + [SPECIES_ARTICUNO] = sArticunoTeachableLearnset, + [SPECIES_ZAPDOS] = sZapdosTeachableLearnset, + [SPECIES_MOLTRES] = sMoltresTeachableLearnset, + [SPECIES_DRATINI] = sDratiniTeachableLearnset, + [SPECIES_DRAGONAIR] = sDragonairTeachableLearnset, + [SPECIES_DRAGONITE] = sDragoniteTeachableLearnset, + [SPECIES_MEWTWO] = sMewtwoTeachableLearnset, + [SPECIES_MEW] = sMewTeachableLearnset, + [SPECIES_CHIKORITA] = sChikoritaTeachableLearnset, + [SPECIES_BAYLEEF] = sBayleefTeachableLearnset, + [SPECIES_MEGANIUM] = sMeganiumTeachableLearnset, + [SPECIES_CYNDAQUIL] = sCyndaquilTeachableLearnset, + [SPECIES_QUILAVA] = sQuilavaTeachableLearnset, + [SPECIES_TYPHLOSION] = sTyphlosionTeachableLearnset, + [SPECIES_TOTODILE] = sTotodileTeachableLearnset, + [SPECIES_CROCONAW] = sCroconawTeachableLearnset, + [SPECIES_FERALIGATR] = sFeraligatrTeachableLearnset, + [SPECIES_SENTRET] = sSentretTeachableLearnset, + [SPECIES_FURRET] = sFurretTeachableLearnset, + [SPECIES_HOOTHOOT] = sHoothootTeachableLearnset, + [SPECIES_NOCTOWL] = sNoctowlTeachableLearnset, + [SPECIES_LEDYBA] = sLedybaTeachableLearnset, + [SPECIES_LEDIAN] = sLedianTeachableLearnset, + [SPECIES_SPINARAK] = sSpinarakTeachableLearnset, + [SPECIES_ARIADOS] = sAriadosTeachableLearnset, + [SPECIES_CROBAT] = sCrobatTeachableLearnset, + [SPECIES_CHINCHOU] = sChinchouTeachableLearnset, + [SPECIES_LANTURN] = sLanturnTeachableLearnset, + [SPECIES_PICHU] = sPichuTeachableLearnset, + [SPECIES_CLEFFA] = sCleffaTeachableLearnset, + [SPECIES_IGGLYBUFF] = sIgglybuffTeachableLearnset, + [SPECIES_TOGEPI] = sTogepiTeachableLearnset, + [SPECIES_TOGETIC] = sTogeticTeachableLearnset, + [SPECIES_NATU] = sNatuTeachableLearnset, + [SPECIES_XATU] = sXatuTeachableLearnset, + [SPECIES_MAREEP] = sMareepTeachableLearnset, + [SPECIES_FLAAFFY] = sFlaaffyTeachableLearnset, + [SPECIES_AMPHAROS] = sAmpharosTeachableLearnset, + [SPECIES_BELLOSSOM] = sBellossomTeachableLearnset, + [SPECIES_MARILL] = sMarillTeachableLearnset, + [SPECIES_AZUMARILL] = sAzumarillTeachableLearnset, + [SPECIES_SUDOWOODO] = sSudowoodoTeachableLearnset, + [SPECIES_POLITOED] = sPolitoedTeachableLearnset, + [SPECIES_HOPPIP] = sHoppipTeachableLearnset, + [SPECIES_SKIPLOOM] = sSkiploomTeachableLearnset, + [SPECIES_JUMPLUFF] = sJumpluffTeachableLearnset, + [SPECIES_AIPOM] = sAipomTeachableLearnset, + [SPECIES_SUNKERN] = sSunkernTeachableLearnset, + [SPECIES_SUNFLORA] = sSunfloraTeachableLearnset, + [SPECIES_YANMA] = sYanmaTeachableLearnset, + [SPECIES_WOOPER] = sWooperTeachableLearnset, + [SPECIES_QUAGSIRE] = sQuagsireTeachableLearnset, + [SPECIES_ESPEON] = sEspeonTeachableLearnset, + [SPECIES_UMBREON] = sUmbreonTeachableLearnset, + [SPECIES_MURKROW] = sMurkrowTeachableLearnset, + [SPECIES_SLOWKING] = sSlowkingTeachableLearnset, + [SPECIES_MISDREAVUS] = sMisdreavusTeachableLearnset, + [SPECIES_UNOWN] = sUnownTeachableLearnset, + [SPECIES_WOBBUFFET] = sWobbuffetTeachableLearnset, + [SPECIES_GIRAFARIG] = sGirafarigTeachableLearnset, + [SPECIES_PINECO] = sPinecoTeachableLearnset, + [SPECIES_FORRETRESS] = sForretressTeachableLearnset, + [SPECIES_DUNSPARCE] = sDunsparceTeachableLearnset, + [SPECIES_GLIGAR] = sGligarTeachableLearnset, + [SPECIES_STEELIX] = sSteelixTeachableLearnset, + [SPECIES_SNUBBULL] = sSnubbullTeachableLearnset, + [SPECIES_GRANBULL] = sGranbullTeachableLearnset, + [SPECIES_QWILFISH] = sQwilfishTeachableLearnset, + [SPECIES_SCIZOR] = sScizorTeachableLearnset, + [SPECIES_SHUCKLE] = sShuckleTeachableLearnset, + [SPECIES_HERACROSS] = sHeracrossTeachableLearnset, + [SPECIES_SNEASEL] = sSneaselTeachableLearnset, + [SPECIES_TEDDIURSA] = sTeddiursaTeachableLearnset, + [SPECIES_URSARING] = sUrsaringTeachableLearnset, + [SPECIES_SLUGMA] = sSlugmaTeachableLearnset, + [SPECIES_MAGCARGO] = sMagcargoTeachableLearnset, + [SPECIES_SWINUB] = sSwinubTeachableLearnset, + [SPECIES_PILOSWINE] = sPiloswineTeachableLearnset, + [SPECIES_CORSOLA] = sCorsolaTeachableLearnset, + [SPECIES_REMORAID] = sRemoraidTeachableLearnset, + [SPECIES_OCTILLERY] = sOctilleryTeachableLearnset, + [SPECIES_DELIBIRD] = sDelibirdTeachableLearnset, + [SPECIES_MANTINE] = sMantineTeachableLearnset, + [SPECIES_SKARMORY] = sSkarmoryTeachableLearnset, + [SPECIES_HOUNDOUR] = sHoundourTeachableLearnset, + [SPECIES_HOUNDOOM] = sHoundoomTeachableLearnset, + [SPECIES_KINGDRA] = sKingdraTeachableLearnset, + [SPECIES_PHANPY] = sPhanpyTeachableLearnset, + [SPECIES_DONPHAN] = sDonphanTeachableLearnset, + [SPECIES_PORYGON2] = sPorygon2TeachableLearnset, + [SPECIES_STANTLER] = sStantlerTeachableLearnset, + [SPECIES_SMEARGLE] = sSmeargleTeachableLearnset, + [SPECIES_TYROGUE] = sTyrogueTeachableLearnset, + [SPECIES_HITMONTOP] = sHitmontopTeachableLearnset, + [SPECIES_SMOOCHUM] = sSmoochumTeachableLearnset, + [SPECIES_ELEKID] = sElekidTeachableLearnset, + [SPECIES_MAGBY] = sMagbyTeachableLearnset, + [SPECIES_MILTANK] = sMiltankTeachableLearnset, + [SPECIES_BLISSEY] = sBlisseyTeachableLearnset, + [SPECIES_RAIKOU] = sRaikouTeachableLearnset, + [SPECIES_ENTEI] = sEnteiTeachableLearnset, + [SPECIES_SUICUNE] = sSuicuneTeachableLearnset, + [SPECIES_LARVITAR] = sLarvitarTeachableLearnset, + [SPECIES_PUPITAR] = sPupitarTeachableLearnset, + [SPECIES_TYRANITAR] = sTyranitarTeachableLearnset, + [SPECIES_LUGIA] = sLugiaTeachableLearnset, + [SPECIES_HO_OH] = sHoOhTeachableLearnset, + [SPECIES_CELEBI] = sCelebiTeachableLearnset, + [SPECIES_TREECKO] = sTreeckoTeachableLearnset, + [SPECIES_GROVYLE] = sGrovyleTeachableLearnset, + [SPECIES_SCEPTILE] = sSceptileTeachableLearnset, + [SPECIES_TORCHIC] = sTorchicTeachableLearnset, + [SPECIES_COMBUSKEN] = sCombuskenTeachableLearnset, + [SPECIES_BLAZIKEN] = sBlazikenTeachableLearnset, + [SPECIES_MUDKIP] = sMudkipTeachableLearnset, + [SPECIES_MARSHTOMP] = sMarshtompTeachableLearnset, + [SPECIES_SWAMPERT] = sSwampertTeachableLearnset, + [SPECIES_POOCHYENA] = sPoochyenaTeachableLearnset, + [SPECIES_MIGHTYENA] = sMightyenaTeachableLearnset, + [SPECIES_ZIGZAGOON] = sZigzagoonTeachableLearnset, + [SPECIES_LINOONE] = sLinooneTeachableLearnset, + [SPECIES_WURMPLE] = sWurmpleTeachableLearnset, + [SPECIES_SILCOON] = sSilcoonTeachableLearnset, + [SPECIES_BEAUTIFLY] = sBeautiflyTeachableLearnset, + [SPECIES_CASCOON] = sCascoonTeachableLearnset, + [SPECIES_DUSTOX] = sDustoxTeachableLearnset, + [SPECIES_LOTAD] = sLotadTeachableLearnset, + [SPECIES_LOMBRE] = sLombreTeachableLearnset, + [SPECIES_LUDICOLO] = sLudicoloTeachableLearnset, + [SPECIES_SEEDOT] = sSeedotTeachableLearnset, + [SPECIES_NUZLEAF] = sNuzleafTeachableLearnset, + [SPECIES_SHIFTRY] = sShiftryTeachableLearnset, + [SPECIES_NINCADA] = sNincadaTeachableLearnset, + [SPECIES_NINJASK] = sNinjaskTeachableLearnset, + [SPECIES_SHEDINJA] = sShedinjaTeachableLearnset, + [SPECIES_TAILLOW] = sTaillowTeachableLearnset, + [SPECIES_SWELLOW] = sSwellowTeachableLearnset, + [SPECIES_SHROOMISH] = sShroomishTeachableLearnset, + [SPECIES_BRELOOM] = sBreloomTeachableLearnset, + [SPECIES_SPINDA] = sSpindaTeachableLearnset, + [SPECIES_WINGULL] = sWingullTeachableLearnset, + [SPECIES_PELIPPER] = sPelipperTeachableLearnset, + [SPECIES_SURSKIT] = sSurskitTeachableLearnset, + [SPECIES_MASQUERAIN] = sMasquerainTeachableLearnset, + [SPECIES_WAILMER] = sWailmerTeachableLearnset, + [SPECIES_WAILORD] = sWailordTeachableLearnset, + [SPECIES_SKITTY] = sSkittyTeachableLearnset, + [SPECIES_DELCATTY] = sDelcattyTeachableLearnset, + [SPECIES_KECLEON] = sKecleonTeachableLearnset, + [SPECIES_BALTOY] = sBaltoyTeachableLearnset, + [SPECIES_CLAYDOL] = sClaydolTeachableLearnset, + [SPECIES_NOSEPASS] = sNosepassTeachableLearnset, + [SPECIES_TORKOAL] = sTorkoalTeachableLearnset, + [SPECIES_SABLEYE] = sSableyeTeachableLearnset, + [SPECIES_BARBOACH] = sBarboachTeachableLearnset, + [SPECIES_WHISCASH] = sWhiscashTeachableLearnset, + [SPECIES_LUVDISC] = sLuvdiscTeachableLearnset, + [SPECIES_CORPHISH] = sCorphishTeachableLearnset, + [SPECIES_CRAWDAUNT] = sCrawdauntTeachableLearnset, + [SPECIES_FEEBAS] = sFeebasTeachableLearnset, + [SPECIES_MILOTIC] = sMiloticTeachableLearnset, + [SPECIES_CARVANHA] = sCarvanhaTeachableLearnset, + [SPECIES_SHARPEDO] = sSharpedoTeachableLearnset, + [SPECIES_TRAPINCH] = sTrapinchTeachableLearnset, + [SPECIES_VIBRAVA] = sVibravaTeachableLearnset, + [SPECIES_FLYGON] = sFlygonTeachableLearnset, + [SPECIES_MAKUHITA] = sMakuhitaTeachableLearnset, + [SPECIES_HARIYAMA] = sHariyamaTeachableLearnset, + [SPECIES_ELECTRIKE] = sElectrikeTeachableLearnset, + [SPECIES_MANECTRIC] = sManectricTeachableLearnset, + [SPECIES_NUMEL] = sNumelTeachableLearnset, + [SPECIES_CAMERUPT] = sCameruptTeachableLearnset, + [SPECIES_SPHEAL] = sSphealTeachableLearnset, + [SPECIES_SEALEO] = sSealeoTeachableLearnset, + [SPECIES_WALREIN] = sWalreinTeachableLearnset, + [SPECIES_CACNEA] = sCacneaTeachableLearnset, + [SPECIES_CACTURNE] = sCacturneTeachableLearnset, + [SPECIES_SNORUNT] = sSnoruntTeachableLearnset, + [SPECIES_GLALIE] = sGlalieTeachableLearnset, + [SPECIES_LUNATONE] = sLunatoneTeachableLearnset, + [SPECIES_SOLROCK] = sSolrockTeachableLearnset, + [SPECIES_AZURILL] = sAzurillTeachableLearnset, + [SPECIES_SPOINK] = sSpoinkTeachableLearnset, + [SPECIES_GRUMPIG] = sGrumpigTeachableLearnset, + [SPECIES_PLUSLE] = sPlusleTeachableLearnset, + [SPECIES_MINUN] = sMinunTeachableLearnset, + [SPECIES_MAWILE] = sMawileTeachableLearnset, + [SPECIES_MEDITITE] = sMedititeTeachableLearnset, + [SPECIES_MEDICHAM] = sMedichamTeachableLearnset, + [SPECIES_SWABLU] = sSwabluTeachableLearnset, + [SPECIES_ALTARIA] = sAltariaTeachableLearnset, + [SPECIES_WYNAUT] = sWynautTeachableLearnset, + [SPECIES_DUSKULL] = sDuskullTeachableLearnset, + [SPECIES_DUSCLOPS] = sDusclopsTeachableLearnset, + [SPECIES_ROSELIA] = sRoseliaTeachableLearnset, + [SPECIES_SLAKOTH] = sSlakothTeachableLearnset, + [SPECIES_VIGOROTH] = sVigorothTeachableLearnset, + [SPECIES_SLAKING] = sSlakingTeachableLearnset, + [SPECIES_GULPIN] = sGulpinTeachableLearnset, + [SPECIES_SWALOT] = sSwalotTeachableLearnset, + [SPECIES_TROPIUS] = sTropiusTeachableLearnset, + [SPECIES_WHISMUR] = sWhismurTeachableLearnset, + [SPECIES_LOUDRED] = sLoudredTeachableLearnset, + [SPECIES_EXPLOUD] = sExploudTeachableLearnset, + [SPECIES_CLAMPERL] = sClamperlTeachableLearnset, + [SPECIES_HUNTAIL] = sHuntailTeachableLearnset, + [SPECIES_GOREBYSS] = sGorebyssTeachableLearnset, + [SPECIES_ABSOL] = sAbsolTeachableLearnset, + [SPECIES_SHUPPET] = sShuppetTeachableLearnset, + [SPECIES_BANETTE] = sBanetteTeachableLearnset, + [SPECIES_SEVIPER] = sSeviperTeachableLearnset, + [SPECIES_ZANGOOSE] = sZangooseTeachableLearnset, + [SPECIES_RELICANTH] = sRelicanthTeachableLearnset, + [SPECIES_ARON] = sAronTeachableLearnset, + [SPECIES_LAIRON] = sLaironTeachableLearnset, + [SPECIES_AGGRON] = sAggronTeachableLearnset, + [SPECIES_CASTFORM] = sCastformTeachableLearnset, + [SPECIES_VOLBEAT] = sVolbeatTeachableLearnset, + [SPECIES_ILLUMISE] = sIllumiseTeachableLearnset, + [SPECIES_LILEEP] = sLileepTeachableLearnset, + [SPECIES_CRADILY] = sCradilyTeachableLearnset, + [SPECIES_ANORITH] = sAnorithTeachableLearnset, + [SPECIES_ARMALDO] = sArmaldoTeachableLearnset, + [SPECIES_RALTS] = sRaltsTeachableLearnset, + [SPECIES_KIRLIA] = sKirliaTeachableLearnset, + [SPECIES_GARDEVOIR] = sGardevoirTeachableLearnset, + [SPECIES_BAGON] = sBagonTeachableLearnset, + [SPECIES_SHELGON] = sShelgonTeachableLearnset, + [SPECIES_SALAMENCE] = sSalamenceTeachableLearnset, + [SPECIES_BELDUM] = sBeldumTeachableLearnset, + [SPECIES_METANG] = sMetangTeachableLearnset, + [SPECIES_METAGROSS] = sMetagrossTeachableLearnset, + [SPECIES_REGIROCK] = sRegirockTeachableLearnset, + [SPECIES_REGICE] = sRegiceTeachableLearnset, + [SPECIES_REGISTEEL] = sRegisteelTeachableLearnset, + [SPECIES_KYOGRE] = sKyogreTeachableLearnset, + [SPECIES_GROUDON] = sGroudonTeachableLearnset, + [SPECIES_RAYQUAZA] = sRayquazaTeachableLearnset, + [SPECIES_LATIAS] = sLatiasTeachableLearnset, + [SPECIES_LATIOS] = sLatiosTeachableLearnset, + [SPECIES_JIRACHI] = sJirachiTeachableLearnset, + [SPECIES_DEOXYS] = sDeoxysTeachableLearnset, + [SPECIES_CHIMECHO] = sChimechoTeachableLearnset, +#if P_NEW_POKEMON == TRUE + [SPECIES_TURTWIG] = sTurtwigTeachableLearnset, + [SPECIES_GROTLE] = sGrotleTeachableLearnset, + [SPECIES_TORTERRA] = sTorterraTeachableLearnset, + [SPECIES_CHIMCHAR] = sChimcharTeachableLearnset, + [SPECIES_MONFERNO] = sMonfernoTeachableLearnset, + [SPECIES_INFERNAPE] = sInfernapeTeachableLearnset, + [SPECIES_PIPLUP] = sPiplupTeachableLearnset, + [SPECIES_PRINPLUP] = sPrinplupTeachableLearnset, + [SPECIES_EMPOLEON] = sEmpoleonTeachableLearnset, + [SPECIES_STARLY] = sStarlyTeachableLearnset, + [SPECIES_STARAVIA] = sStaraviaTeachableLearnset, + [SPECIES_STARAPTOR] = sStaraptorTeachableLearnset, + [SPECIES_BIDOOF] = sBidoofTeachableLearnset, + [SPECIES_BIBAREL] = sBibarelTeachableLearnset, + [SPECIES_KRICKETOT] = sKricketotTeachableLearnset, + [SPECIES_KRICKETUNE] = sKricketuneTeachableLearnset, + [SPECIES_SHINX] = sShinxTeachableLearnset, + [SPECIES_LUXIO] = sLuxioTeachableLearnset, + [SPECIES_LUXRAY] = sLuxrayTeachableLearnset, + [SPECIES_BUDEW] = sBudewTeachableLearnset, + [SPECIES_ROSERADE] = sRoseradeTeachableLearnset, + [SPECIES_CRANIDOS] = sCranidosTeachableLearnset, + [SPECIES_RAMPARDOS] = sRampardosTeachableLearnset, + [SPECIES_SHIELDON] = sShieldonTeachableLearnset, + [SPECIES_BASTIODON] = sBastiodonTeachableLearnset, + [SPECIES_BURMY] = sBurmyTeachableLearnset, + [SPECIES_WORMADAM] = sWormadamTeachableLearnset, + [SPECIES_MOTHIM] = sMothimTeachableLearnset, + [SPECIES_COMBEE] = sCombeeTeachableLearnset, + [SPECIES_VESPIQUEN] = sVespiquenTeachableLearnset, + [SPECIES_PACHIRISU] = sPachirisuTeachableLearnset, + [SPECIES_BUIZEL] = sBuizelTeachableLearnset, + [SPECIES_FLOATZEL] = sFloatzelTeachableLearnset, + [SPECIES_CHERUBI] = sCherubiTeachableLearnset, + [SPECIES_CHERRIM] = sCherrimTeachableLearnset, + [SPECIES_SHELLOS] = sShellosTeachableLearnset, + [SPECIES_GASTRODON] = sGastrodonTeachableLearnset, + [SPECIES_AMBIPOM] = sAmbipomTeachableLearnset, + [SPECIES_DRIFLOON] = sDrifloonTeachableLearnset, + [SPECIES_DRIFBLIM] = sDrifblimTeachableLearnset, + [SPECIES_BUNEARY] = sBunearyTeachableLearnset, + [SPECIES_LOPUNNY] = sLopunnyTeachableLearnset, + [SPECIES_MISMAGIUS] = sMismagiusTeachableLearnset, + [SPECIES_HONCHKROW] = sHonchkrowTeachableLearnset, + [SPECIES_GLAMEOW] = sGlameowTeachableLearnset, + [SPECIES_PURUGLY] = sPuruglyTeachableLearnset, + [SPECIES_CHINGLING] = sChinglingTeachableLearnset, + [SPECIES_STUNKY] = sStunkyTeachableLearnset, + [SPECIES_SKUNTANK] = sSkuntankTeachableLearnset, + [SPECIES_BRONZOR] = sBronzorTeachableLearnset, + [SPECIES_BRONZONG] = sBronzongTeachableLearnset, + [SPECIES_BONSLY] = sBonslyTeachableLearnset, + [SPECIES_MIME_JR] = sMimeJrTeachableLearnset, + [SPECIES_HAPPINY] = sHappinyTeachableLearnset, + [SPECIES_CHATOT] = sChatotTeachableLearnset, + [SPECIES_SPIRITOMB] = sSpiritombTeachableLearnset, + [SPECIES_GIBLE] = sGibleTeachableLearnset, + [SPECIES_GABITE] = sGabiteTeachableLearnset, + [SPECIES_GARCHOMP] = sGarchompTeachableLearnset, + [SPECIES_MUNCHLAX] = sMunchlaxTeachableLearnset, + [SPECIES_RIOLU] = sRioluTeachableLearnset, + [SPECIES_LUCARIO] = sLucarioTeachableLearnset, + [SPECIES_HIPPOPOTAS] = sHippopotasTeachableLearnset, + [SPECIES_HIPPOWDON] = sHippowdonTeachableLearnset, + [SPECIES_SKORUPI] = sSkorupiTeachableLearnset, + [SPECIES_DRAPION] = sDrapionTeachableLearnset, + [SPECIES_CROAGUNK] = sCroagunkTeachableLearnset, + [SPECIES_TOXICROAK] = sToxicroakTeachableLearnset, + [SPECIES_CARNIVINE] = sCarnivineTeachableLearnset, + [SPECIES_FINNEON] = sFinneonTeachableLearnset, + [SPECIES_LUMINEON] = sLumineonTeachableLearnset, + [SPECIES_MANTYKE] = sMantykeTeachableLearnset, + [SPECIES_SNOVER] = sSnoverTeachableLearnset, + [SPECIES_ABOMASNOW] = sAbomasnowTeachableLearnset, + [SPECIES_WEAVILE] = sWeavileTeachableLearnset, + [SPECIES_MAGNEZONE] = sMagnezoneTeachableLearnset, + [SPECIES_LICKILICKY] = sLickilickyTeachableLearnset, + [SPECIES_RHYPERIOR] = sRhyperiorTeachableLearnset, + [SPECIES_TANGROWTH] = sTangrowthTeachableLearnset, + [SPECIES_ELECTIVIRE] = sElectivireTeachableLearnset, + [SPECIES_MAGMORTAR] = sMagmortarTeachableLearnset, + [SPECIES_TOGEKISS] = sTogekissTeachableLearnset, + [SPECIES_YANMEGA] = sYanmegaTeachableLearnset, + [SPECIES_LEAFEON] = sLeafeonTeachableLearnset, + [SPECIES_GLACEON] = sGlaceonTeachableLearnset, + [SPECIES_GLISCOR] = sGliscorTeachableLearnset, + [SPECIES_MAMOSWINE] = sMamoswineTeachableLearnset, + [SPECIES_PORYGON_Z] = sPorygonZTeachableLearnset, + [SPECIES_GALLADE] = sGalladeTeachableLearnset, + [SPECIES_PROBOPASS] = sProbopassTeachableLearnset, + [SPECIES_DUSKNOIR] = sDusknoirTeachableLearnset, + [SPECIES_FROSLASS] = sFroslassTeachableLearnset, + [SPECIES_ROTOM] = sRotomTeachableLearnset, + [SPECIES_UXIE] = sUxieTeachableLearnset, + [SPECIES_MESPRIT] = sMespritTeachableLearnset, + [SPECIES_AZELF] = sAzelfTeachableLearnset, + [SPECIES_DIALGA] = sDialgaTeachableLearnset, + [SPECIES_PALKIA] = sPalkiaTeachableLearnset, + [SPECIES_HEATRAN] = sHeatranTeachableLearnset, + [SPECIES_REGIGIGAS] = sRegigigasTeachableLearnset, + [SPECIES_GIRATINA] = sGiratinaTeachableLearnset, + [SPECIES_CRESSELIA] = sCresseliaTeachableLearnset, + [SPECIES_PHIONE] = sPhioneTeachableLearnset, + [SPECIES_MANAPHY] = sManaphyTeachableLearnset, + [SPECIES_DARKRAI] = sDarkraiTeachableLearnset, + [SPECIES_SHAYMIN] = sShayminTeachableLearnset, + [SPECIES_ARCEUS] = sArceusTeachableLearnset, + [SPECIES_VICTINI] = sVictiniTeachableLearnset, + [SPECIES_SNIVY] = sSnivyTeachableLearnset, + [SPECIES_SERVINE] = sServineTeachableLearnset, + [SPECIES_SERPERIOR] = sSerperiorTeachableLearnset, + [SPECIES_TEPIG] = sTepigTeachableLearnset, + [SPECIES_PIGNITE] = sPigniteTeachableLearnset, + [SPECIES_EMBOAR] = sEmboarTeachableLearnset, + [SPECIES_OSHAWOTT] = sOshawottTeachableLearnset, + [SPECIES_DEWOTT] = sDewottTeachableLearnset, + [SPECIES_SAMUROTT] = sSamurottTeachableLearnset, + [SPECIES_PATRAT] = sPatratTeachableLearnset, + [SPECIES_WATCHOG] = sWatchogTeachableLearnset, + [SPECIES_LILLIPUP] = sLillipupTeachableLearnset, + [SPECIES_HERDIER] = sHerdierTeachableLearnset, + [SPECIES_STOUTLAND] = sStoutlandTeachableLearnset, + [SPECIES_PURRLOIN] = sPurrloinTeachableLearnset, + [SPECIES_LIEPARD] = sLiepardTeachableLearnset, + [SPECIES_PANSAGE] = sPansageTeachableLearnset, + [SPECIES_SIMISAGE] = sSimisageTeachableLearnset, + [SPECIES_PANSEAR] = sPansearTeachableLearnset, + [SPECIES_SIMISEAR] = sSimisearTeachableLearnset, + [SPECIES_PANPOUR] = sPanpourTeachableLearnset, + [SPECIES_SIMIPOUR] = sSimipourTeachableLearnset, + [SPECIES_MUNNA] = sMunnaTeachableLearnset, + [SPECIES_MUSHARNA] = sMusharnaTeachableLearnset, + [SPECIES_PIDOVE] = sPidoveTeachableLearnset, + [SPECIES_TRANQUILL] = sTranquillTeachableLearnset, + [SPECIES_UNFEZANT] = sUnfezantTeachableLearnset, + [SPECIES_BLITZLE] = sBlitzleTeachableLearnset, + [SPECIES_ZEBSTRIKA] = sZebstrikaTeachableLearnset, + [SPECIES_ROGGENROLA] = sRoggenrolaTeachableLearnset, + [SPECIES_BOLDORE] = sBoldoreTeachableLearnset, + [SPECIES_GIGALITH] = sGigalithTeachableLearnset, + [SPECIES_WOOBAT] = sWoobatTeachableLearnset, + [SPECIES_SWOOBAT] = sSwoobatTeachableLearnset, + [SPECIES_DRILBUR] = sDrilburTeachableLearnset, + [SPECIES_EXCADRILL] = sExcadrillTeachableLearnset, + [SPECIES_AUDINO] = sAudinoTeachableLearnset, + [SPECIES_TIMBURR] = sTimburrTeachableLearnset, + [SPECIES_GURDURR] = sGurdurrTeachableLearnset, + [SPECIES_CONKELDURR] = sConkeldurrTeachableLearnset, + [SPECIES_TYMPOLE] = sTympoleTeachableLearnset, + [SPECIES_PALPITOAD] = sPalpitoadTeachableLearnset, + [SPECIES_SEISMITOAD] = sSeismitoadTeachableLearnset, + [SPECIES_THROH] = sThrohTeachableLearnset, + [SPECIES_SAWK] = sSawkTeachableLearnset, + [SPECIES_SEWADDLE] = sSewaddleTeachableLearnset, + [SPECIES_SWADLOON] = sSwadloonTeachableLearnset, + [SPECIES_LEAVANNY] = sLeavannyTeachableLearnset, + [SPECIES_VENIPEDE] = sVenipedeTeachableLearnset, + [SPECIES_WHIRLIPEDE] = sWhirlipedeTeachableLearnset, + [SPECIES_SCOLIPEDE] = sScolipedeTeachableLearnset, + [SPECIES_COTTONEE] = sCottoneeTeachableLearnset, + [SPECIES_WHIMSICOTT] = sWhimsicottTeachableLearnset, + [SPECIES_PETILIL] = sPetililTeachableLearnset, + [SPECIES_LILLIGANT] = sLilligantTeachableLearnset, + [SPECIES_BASCULIN] = sBasculinTeachableLearnset, + [SPECIES_SANDILE] = sSandileTeachableLearnset, + [SPECIES_KROKOROK] = sKrokorokTeachableLearnset, + [SPECIES_KROOKODILE] = sKrookodileTeachableLearnset, + [SPECIES_DARUMAKA] = sDarumakaTeachableLearnset, + [SPECIES_DARMANITAN] = sDarmanitanTeachableLearnset, + [SPECIES_MARACTUS] = sMaractusTeachableLearnset, + [SPECIES_DWEBBLE] = sDwebbleTeachableLearnset, + [SPECIES_CRUSTLE] = sCrustleTeachableLearnset, + [SPECIES_SCRAGGY] = sScraggyTeachableLearnset, + [SPECIES_SCRAFTY] = sScraftyTeachableLearnset, + [SPECIES_SIGILYPH] = sSigilyphTeachableLearnset, + [SPECIES_YAMASK] = sYamaskTeachableLearnset, + [SPECIES_COFAGRIGUS] = sCofagrigusTeachableLearnset, + [SPECIES_TIRTOUGA] = sTirtougaTeachableLearnset, + [SPECIES_CARRACOSTA] = sCarracostaTeachableLearnset, + [SPECIES_ARCHEN] = sArchenTeachableLearnset, + [SPECIES_ARCHEOPS] = sArcheopsTeachableLearnset, + [SPECIES_TRUBBISH] = sTrubbishTeachableLearnset, + [SPECIES_GARBODOR] = sGarbodorTeachableLearnset, + [SPECIES_ZORUA] = sZoruaTeachableLearnset, + [SPECIES_ZOROARK] = sZoroarkTeachableLearnset, + [SPECIES_MINCCINO] = sMinccinoTeachableLearnset, + [SPECIES_CINCCINO] = sCinccinoTeachableLearnset, + [SPECIES_GOTHITA] = sGothitaTeachableLearnset, + [SPECIES_GOTHORITA] = sGothoritaTeachableLearnset, + [SPECIES_GOTHITELLE] = sGothitelleTeachableLearnset, + [SPECIES_SOLOSIS] = sSolosisTeachableLearnset, + [SPECIES_DUOSION] = sDuosionTeachableLearnset, + [SPECIES_REUNICLUS] = sReuniclusTeachableLearnset, + [SPECIES_DUCKLETT] = sDucklettTeachableLearnset, + [SPECIES_SWANNA] = sSwannaTeachableLearnset, + [SPECIES_VANILLITE] = sVanilliteTeachableLearnset, + [SPECIES_VANILLISH] = sVanillishTeachableLearnset, + [SPECIES_VANILLUXE] = sVanilluxeTeachableLearnset, + [SPECIES_DEERLING] = sDeerlingTeachableLearnset, + [SPECIES_SAWSBUCK] = sSawsbuckTeachableLearnset, + [SPECIES_EMOLGA] = sEmolgaTeachableLearnset, + [SPECIES_KARRABLAST] = sKarrablastTeachableLearnset, + [SPECIES_ESCAVALIER] = sEscavalierTeachableLearnset, + [SPECIES_FOONGUS] = sFoongusTeachableLearnset, + [SPECIES_AMOONGUSS] = sAmoongussTeachableLearnset, + [SPECIES_FRILLISH] = sFrillishTeachableLearnset, + [SPECIES_JELLICENT] = sJellicentTeachableLearnset, + [SPECIES_ALOMOMOLA] = sAlomomolaTeachableLearnset, + [SPECIES_JOLTIK] = sJoltikTeachableLearnset, + [SPECIES_GALVANTULA] = sGalvantulaTeachableLearnset, + [SPECIES_FERROSEED] = sFerroseedTeachableLearnset, + [SPECIES_FERROTHORN] = sFerrothornTeachableLearnset, + [SPECIES_KLINK] = sKlinkTeachableLearnset, + [SPECIES_KLANG] = sKlangTeachableLearnset, + [SPECIES_KLINKLANG] = sKlinklangTeachableLearnset, + [SPECIES_TYNAMO] = sTynamoTeachableLearnset, + [SPECIES_EELEKTRIK] = sEelektrikTeachableLearnset, + [SPECIES_EELEKTROSS] = sEelektrossTeachableLearnset, + [SPECIES_ELGYEM] = sElgyemTeachableLearnset, + [SPECIES_BEHEEYEM] = sBeheeyemTeachableLearnset, + [SPECIES_LITWICK] = sLitwickTeachableLearnset, + [SPECIES_LAMPENT] = sLampentTeachableLearnset, + [SPECIES_CHANDELURE] = sChandelureTeachableLearnset, + [SPECIES_AXEW] = sAxewTeachableLearnset, + [SPECIES_FRAXURE] = sFraxureTeachableLearnset, + [SPECIES_HAXORUS] = sHaxorusTeachableLearnset, + [SPECIES_CUBCHOO] = sCubchooTeachableLearnset, + [SPECIES_BEARTIC] = sBearticTeachableLearnset, + [SPECIES_CRYOGONAL] = sCryogonalTeachableLearnset, + [SPECIES_SHELMET] = sShelmetTeachableLearnset, + [SPECIES_ACCELGOR] = sAccelgorTeachableLearnset, + [SPECIES_STUNFISK] = sStunfiskTeachableLearnset, + [SPECIES_MIENFOO] = sMienfooTeachableLearnset, + [SPECIES_MIENSHAO] = sMienshaoTeachableLearnset, + [SPECIES_DRUDDIGON] = sDruddigonTeachableLearnset, + [SPECIES_GOLETT] = sGolettTeachableLearnset, + [SPECIES_GOLURK] = sGolurkTeachableLearnset, + [SPECIES_PAWNIARD] = sPawniardTeachableLearnset, + [SPECIES_BISHARP] = sBisharpTeachableLearnset, + [SPECIES_BOUFFALANT] = sBouffalantTeachableLearnset, + [SPECIES_RUFFLET] = sRuffletTeachableLearnset, + [SPECIES_BRAVIARY] = sBraviaryTeachableLearnset, + [SPECIES_VULLABY] = sVullabyTeachableLearnset, + [SPECIES_MANDIBUZZ] = sMandibuzzTeachableLearnset, + [SPECIES_HEATMOR] = sHeatmorTeachableLearnset, + [SPECIES_DURANT] = sDurantTeachableLearnset, + [SPECIES_DEINO] = sDeinoTeachableLearnset, + [SPECIES_ZWEILOUS] = sZweilousTeachableLearnset, + [SPECIES_HYDREIGON] = sHydreigonTeachableLearnset, + [SPECIES_LARVESTA] = sLarvestaTeachableLearnset, + [SPECIES_VOLCARONA] = sVolcaronaTeachableLearnset, + [SPECIES_COBALION] = sCobalionTeachableLearnset, + [SPECIES_TERRAKION] = sTerrakionTeachableLearnset, + [SPECIES_VIRIZION] = sVirizionTeachableLearnset, + [SPECIES_TORNADUS] = sTornadusTeachableLearnset, + [SPECIES_THUNDURUS] = sThundurusTeachableLearnset, + [SPECIES_RESHIRAM] = sReshiramTeachableLearnset, + [SPECIES_ZEKROM] = sZekromTeachableLearnset, + [SPECIES_LANDORUS] = sLandorusTeachableLearnset, + [SPECIES_KYUREM] = sKyuremTeachableLearnset, + [SPECIES_KELDEO] = sKeldeoTeachableLearnset, + [SPECIES_MELOETTA] = sMeloettaTeachableLearnset, + [SPECIES_GENESECT] = sGenesectTeachableLearnset, + [SPECIES_CHESPIN] = sChespinTeachableLearnset, + [SPECIES_QUILLADIN] = sQuilladinTeachableLearnset, + [SPECIES_CHESNAUGHT] = sChesnaughtTeachableLearnset, + [SPECIES_FENNEKIN] = sFennekinTeachableLearnset, + [SPECIES_BRAIXEN] = sBraixenTeachableLearnset, + [SPECIES_DELPHOX] = sDelphoxTeachableLearnset, + [SPECIES_FROAKIE] = sFroakieTeachableLearnset, + [SPECIES_FROGADIER] = sFrogadierTeachableLearnset, + [SPECIES_GRENINJA] = sGreninjaTeachableLearnset, + [SPECIES_BUNNELBY] = sBunnelbyTeachableLearnset, + [SPECIES_DIGGERSBY] = sDiggersbyTeachableLearnset, + [SPECIES_FLETCHLING] = sFletchlingTeachableLearnset, + [SPECIES_FLETCHINDER] = sFletchinderTeachableLearnset, + [SPECIES_TALONFLAME] = sTalonflameTeachableLearnset, + [SPECIES_SCATTERBUG] = sScatterbugTeachableLearnset, + [SPECIES_SPEWPA] = sSpewpaTeachableLearnset, + [SPECIES_VIVILLON] = sVivillonTeachableLearnset, + [SPECIES_LITLEO] = sLitleoTeachableLearnset, + [SPECIES_PYROAR] = sPyroarTeachableLearnset, + [SPECIES_FLABEBE] = sFlabebeTeachableLearnset, + [SPECIES_FLOETTE] = sFloetteTeachableLearnset, + [SPECIES_FLORGES] = sFlorgesTeachableLearnset, + [SPECIES_SKIDDO] = sSkiddoTeachableLearnset, + [SPECIES_GOGOAT] = sGogoatTeachableLearnset, + [SPECIES_PANCHAM] = sPanchamTeachableLearnset, + [SPECIES_PANGORO] = sPangoroTeachableLearnset, + [SPECIES_FURFROU] = sFurfrouTeachableLearnset, + [SPECIES_ESPURR] = sEspurrTeachableLearnset, + [SPECIES_MEOWSTIC] = sMeowsticTeachableLearnset, + [SPECIES_HONEDGE] = sHonedgeTeachableLearnset, + [SPECIES_DOUBLADE] = sDoubladeTeachableLearnset, + [SPECIES_AEGISLASH] = sAegislashTeachableLearnset, + [SPECIES_SPRITZEE] = sSpritzeeTeachableLearnset, + [SPECIES_AROMATISSE] = sAromatisseTeachableLearnset, + [SPECIES_SWIRLIX] = sSwirlixTeachableLearnset, + [SPECIES_SLURPUFF] = sSlurpuffTeachableLearnset, + [SPECIES_INKAY] = sInkayTeachableLearnset, + [SPECIES_MALAMAR] = sMalamarTeachableLearnset, + [SPECIES_BINACLE] = sBinacleTeachableLearnset, + [SPECIES_BARBARACLE] = sBarbaracleTeachableLearnset, + [SPECIES_SKRELP] = sSkrelpTeachableLearnset, + [SPECIES_DRAGALGE] = sDragalgeTeachableLearnset, + [SPECIES_CLAUNCHER] = sClauncherTeachableLearnset, + [SPECIES_CLAWITZER] = sClawitzerTeachableLearnset, + [SPECIES_HELIOPTILE] = sHelioptileTeachableLearnset, + [SPECIES_HELIOLISK] = sHelioliskTeachableLearnset, + [SPECIES_TYRUNT] = sTyruntTeachableLearnset, + [SPECIES_TYRANTRUM] = sTyrantrumTeachableLearnset, + [SPECIES_AMAURA] = sAmauraTeachableLearnset, + [SPECIES_AURORUS] = sAurorusTeachableLearnset, + [SPECIES_SYLVEON] = sSylveonTeachableLearnset, + [SPECIES_HAWLUCHA] = sHawluchaTeachableLearnset, + [SPECIES_DEDENNE] = sDedenneTeachableLearnset, + [SPECIES_CARBINK] = sCarbinkTeachableLearnset, + [SPECIES_GOOMY] = sGoomyTeachableLearnset, + [SPECIES_SLIGGOO] = sSliggooTeachableLearnset, + [SPECIES_GOODRA] = sGoodraTeachableLearnset, + [SPECIES_KLEFKI] = sKlefkiTeachableLearnset, + [SPECIES_PHANTUMP] = sPhantumpTeachableLearnset, + [SPECIES_TREVENANT] = sTrevenantTeachableLearnset, + [SPECIES_PUMPKABOO] = sPumpkabooTeachableLearnset, + [SPECIES_GOURGEIST] = sGourgeistTeachableLearnset, + [SPECIES_BERGMITE] = sBergmiteTeachableLearnset, + [SPECIES_AVALUGG] = sAvaluggTeachableLearnset, + [SPECIES_NOIBAT] = sNoibatTeachableLearnset, + [SPECIES_NOIVERN] = sNoivernTeachableLearnset, + [SPECIES_XERNEAS] = sXerneasTeachableLearnset, + [SPECIES_YVELTAL] = sYveltalTeachableLearnset, + [SPECIES_ZYGARDE] = sZygardeTeachableLearnset, + [SPECIES_DIANCIE] = sDiancieTeachableLearnset, + [SPECIES_HOOPA] = sHoopaTeachableLearnset, + [SPECIES_VOLCANION] = sVolcanionTeachableLearnset, + [SPECIES_ROWLET] = sRowletTeachableLearnset, + [SPECIES_DARTRIX] = sDartrixTeachableLearnset, + [SPECIES_DECIDUEYE] = sDecidueyeTeachableLearnset, + [SPECIES_LITTEN] = sLittenTeachableLearnset, + [SPECIES_TORRACAT] = sTorracatTeachableLearnset, + [SPECIES_INCINEROAR] = sIncineroarTeachableLearnset, + [SPECIES_POPPLIO] = sPopplioTeachableLearnset, + [SPECIES_BRIONNE] = sBrionneTeachableLearnset, + [SPECIES_PRIMARINA] = sPrimarinaTeachableLearnset, + [SPECIES_PIKIPEK] = sPikipekTeachableLearnset, + [SPECIES_TRUMBEAK] = sTrumbeakTeachableLearnset, + [SPECIES_TOUCANNON] = sToucannonTeachableLearnset, + [SPECIES_YUNGOOS] = sYungoosTeachableLearnset, + [SPECIES_GUMSHOOS] = sGumshoosTeachableLearnset, + [SPECIES_GRUBBIN] = sGrubbinTeachableLearnset, + [SPECIES_CHARJABUG] = sCharjabugTeachableLearnset, + [SPECIES_VIKAVOLT] = sVikavoltTeachableLearnset, + [SPECIES_CRABRAWLER] = sCrabrawlerTeachableLearnset, + [SPECIES_CRABOMINABLE] = sCrabominableTeachableLearnset, + [SPECIES_ORICORIO] = sOricorioTeachableLearnset, + [SPECIES_CUTIEFLY] = sCutieflyTeachableLearnset, + [SPECIES_RIBOMBEE] = sRibombeeTeachableLearnset, + [SPECIES_ROCKRUFF] = sRockruffTeachableLearnset, + [SPECIES_LYCANROC] = sLycanrocTeachableLearnset, + [SPECIES_WISHIWASHI] = sWishiwashiTeachableLearnset, + [SPECIES_MAREANIE] = sMareanieTeachableLearnset, + [SPECIES_TOXAPEX] = sToxapexTeachableLearnset, + [SPECIES_MUDBRAY] = sMudbrayTeachableLearnset, + [SPECIES_MUDSDALE] = sMudsdaleTeachableLearnset, + [SPECIES_DEWPIDER] = sDewpiderTeachableLearnset, + [SPECIES_ARAQUANID] = sAraquanidTeachableLearnset, + [SPECIES_FOMANTIS] = sFomantisTeachableLearnset, + [SPECIES_LURANTIS] = sLurantisTeachableLearnset, + [SPECIES_MORELULL] = sMorelullTeachableLearnset, + [SPECIES_SHIINOTIC] = sShiinoticTeachableLearnset, + [SPECIES_SALANDIT] = sSalanditTeachableLearnset, + [SPECIES_SALAZZLE] = sSalazzleTeachableLearnset, + [SPECIES_STUFFUL] = sStuffulTeachableLearnset, + [SPECIES_BEWEAR] = sBewearTeachableLearnset, + [SPECIES_BOUNSWEET] = sBounsweetTeachableLearnset, + [SPECIES_STEENEE] = sSteeneeTeachableLearnset, + [SPECIES_TSAREENA] = sTsareenaTeachableLearnset, + [SPECIES_COMFEY] = sComfeyTeachableLearnset, + [SPECIES_ORANGURU] = sOranguruTeachableLearnset, + [SPECIES_PASSIMIAN] = sPassimianTeachableLearnset, + [SPECIES_WIMPOD] = sWimpodTeachableLearnset, + [SPECIES_GOLISOPOD] = sGolisopodTeachableLearnset, + [SPECIES_SANDYGAST] = sSandygastTeachableLearnset, + [SPECIES_PALOSSAND] = sPalossandTeachableLearnset, + [SPECIES_PYUKUMUKU] = sPyukumukuTeachableLearnset, + [SPECIES_TYPE_NULL] = sTypeNullTeachableLearnset, + [SPECIES_SILVALLY] = sSilvallyTeachableLearnset, + [SPECIES_MINIOR] = sMiniorTeachableLearnset, + [SPECIES_KOMALA] = sKomalaTeachableLearnset, + [SPECIES_TURTONATOR] = sTurtonatorTeachableLearnset, + [SPECIES_TOGEDEMARU] = sTogedemaruTeachableLearnset, + [SPECIES_MIMIKYU] = sMimikyuTeachableLearnset, + [SPECIES_BRUXISH] = sBruxishTeachableLearnset, + [SPECIES_DRAMPA] = sDrampaTeachableLearnset, + [SPECIES_DHELMISE] = sDhelmiseTeachableLearnset, + [SPECIES_JANGMO_O] = sJangmooTeachableLearnset, + [SPECIES_HAKAMO_O] = sHakamooTeachableLearnset, + [SPECIES_KOMMO_O] = sKommooTeachableLearnset, + [SPECIES_TAPU_KOKO] = sTapuKokoTeachableLearnset, + [SPECIES_TAPU_LELE] = sTapuLeleTeachableLearnset, + [SPECIES_TAPU_BULU] = sTapuBuluTeachableLearnset, + [SPECIES_TAPU_FINI] = sTapuFiniTeachableLearnset, + [SPECIES_COSMOG] = sCosmogTeachableLearnset, + [SPECIES_COSMOEM] = sCosmoemTeachableLearnset, + [SPECIES_SOLGALEO] = sSolgaleoTeachableLearnset, + [SPECIES_LUNALA] = sLunalaTeachableLearnset, + [SPECIES_NIHILEGO] = sNihilegoTeachableLearnset, + [SPECIES_BUZZWOLE] = sBuzzwoleTeachableLearnset, + [SPECIES_PHEROMOSA] = sPheromosaTeachableLearnset, + [SPECIES_XURKITREE] = sXurkitreeTeachableLearnset, + [SPECIES_CELESTEELA] = sCelesteelaTeachableLearnset, + [SPECIES_KARTANA] = sKartanaTeachableLearnset, + [SPECIES_GUZZLORD] = sGuzzlordTeachableLearnset, + [SPECIES_NECROZMA] = sNecrozmaTeachableLearnset, + [SPECIES_MAGEARNA] = sMagearnaTeachableLearnset, + [SPECIES_MARSHADOW] = sMarshadowTeachableLearnset, + [SPECIES_POIPOLE] = sPoipoleTeachableLearnset, + [SPECIES_NAGANADEL] = sNaganadelTeachableLearnset, + [SPECIES_STAKATAKA] = sStakatakaTeachableLearnset, + [SPECIES_BLACEPHALON] = sBlacephalonTeachableLearnset, + [SPECIES_ZERAORA] = sZeraoraTeachableLearnset, + [SPECIES_MELTAN] = sMeltanTeachableLearnset, + [SPECIES_MELMETAL] = sMelmetalTeachableLearnset, + [SPECIES_GROOKEY] = sGrookeyTeachableLearnset, + [SPECIES_THWACKEY] = sThwackeyTeachableLearnset, + [SPECIES_RILLABOOM] = sRillaboomTeachableLearnset, + [SPECIES_SCORBUNNY] = sScorbunnyTeachableLearnset, + [SPECIES_RABOOT] = sRabootTeachableLearnset, + [SPECIES_CINDERACE] = sCinderaceTeachableLearnset, + [SPECIES_SOBBLE] = sSobbleTeachableLearnset, + [SPECIES_DRIZZILE] = sDrizzileTeachableLearnset, + [SPECIES_INTELEON] = sInteleonTeachableLearnset, + [SPECIES_SKWOVET] = sSkwovetTeachableLearnset, + [SPECIES_GREEDENT] = sGreedentTeachableLearnset, + [SPECIES_ROOKIDEE] = sRookideeTeachableLearnset, + [SPECIES_CORVISQUIRE] = sCorvisquireTeachableLearnset, + [SPECIES_CORVIKNIGHT] = sCorviknightTeachableLearnset, + [SPECIES_BLIPBUG] = sBlipbugTeachableLearnset, + [SPECIES_DOTTLER] = sDottlerTeachableLearnset, + [SPECIES_ORBEETLE] = sOrbeetleTeachableLearnset, + [SPECIES_NICKIT] = sNickitTeachableLearnset, + [SPECIES_THIEVUL] = sThievulTeachableLearnset, + [SPECIES_GOSSIFLEUR] = sGossifleurTeachableLearnset, + [SPECIES_ELDEGOSS] = sEldegossTeachableLearnset, + [SPECIES_WOOLOO] = sWoolooTeachableLearnset, + [SPECIES_DUBWOOL] = sDubwoolTeachableLearnset, + [SPECIES_CHEWTLE] = sChewtleTeachableLearnset, + [SPECIES_DREDNAW] = sDrednawTeachableLearnset, + [SPECIES_YAMPER] = sYamperTeachableLearnset, + [SPECIES_BOLTUND] = sBoltundTeachableLearnset, + [SPECIES_ROLYCOLY] = sRolycolyTeachableLearnset, + [SPECIES_CARKOL] = sCarkolTeachableLearnset, + [SPECIES_COALOSSAL] = sCoalossalTeachableLearnset, + [SPECIES_APPLIN] = sApplinTeachableLearnset, + [SPECIES_FLAPPLE] = sFlappleTeachableLearnset, + [SPECIES_APPLETUN] = sAppletunTeachableLearnset, + [SPECIES_SILICOBRA] = sSilicobraTeachableLearnset, + [SPECIES_SANDACONDA] = sSandacondaTeachableLearnset, + [SPECIES_CRAMORANT] = sCramorantTeachableLearnset, + [SPECIES_ARROKUDA] = sArrokudaTeachableLearnset, + [SPECIES_BARRASKEWDA] = sBarraskewdaTeachableLearnset, + [SPECIES_TOXEL] = sToxelTeachableLearnset, + [SPECIES_TOXTRICITY] = sToxtricityTeachableLearnset, + [SPECIES_SIZZLIPEDE] = sSizzlipedeTeachableLearnset, + [SPECIES_CENTISKORCH] = sCentiskorchTeachableLearnset, + [SPECIES_CLOBBOPUS] = sClobbopusTeachableLearnset, + [SPECIES_GRAPPLOCT] = sGrapploctTeachableLearnset, + [SPECIES_SINISTEA] = sSinisteaTeachableLearnset, + [SPECIES_POLTEAGEIST] = sPolteageistTeachableLearnset, + [SPECIES_HATENNA] = sHatennaTeachableLearnset, + [SPECIES_HATTREM] = sHattremTeachableLearnset, + [SPECIES_HATTERENE] = sHattereneTeachableLearnset, + [SPECIES_IMPIDIMP] = sImpidimpTeachableLearnset, + [SPECIES_MORGREM] = sMorgremTeachableLearnset, + [SPECIES_GRIMMSNARL] = sGrimmsnarlTeachableLearnset, + [SPECIES_OBSTAGOON] = sObstagoonTeachableLearnset, + [SPECIES_PERRSERKER] = sPerrserkerTeachableLearnset, + [SPECIES_CURSOLA] = sCursolaTeachableLearnset, + [SPECIES_SIRFETCHD] = sSirfetchdTeachableLearnset, + [SPECIES_MR_RIME] = sMrRimeTeachableLearnset, + [SPECIES_RUNERIGUS] = sRunerigusTeachableLearnset, + [SPECIES_MILCERY] = sMilceryTeachableLearnset, + [SPECIES_ALCREMIE] = sAlcremieTeachableLearnset, + [SPECIES_FALINKS] = sFalinksTeachableLearnset, + [SPECIES_PINCURCHIN] = sPincurchinTeachableLearnset, + [SPECIES_SNOM] = sSnomTeachableLearnset, + [SPECIES_FROSMOTH] = sFrosmothTeachableLearnset, + [SPECIES_STONJOURNER] = sStonjournerTeachableLearnset, + [SPECIES_EISCUE] = sEiscueTeachableLearnset, + [SPECIES_INDEEDEE] = sIndeedeeTeachableLearnset, + [SPECIES_MORPEKO] = sMorpekoTeachableLearnset, + [SPECIES_CUFANT] = sCufantTeachableLearnset, + [SPECIES_COPPERAJAH] = sCopperajahTeachableLearnset, + [SPECIES_DRACOZOLT] = sDracozoltTeachableLearnset, + [SPECIES_ARCTOZOLT] = sArctozoltTeachableLearnset, + [SPECIES_DRACOVISH] = sDracovishTeachableLearnset, + [SPECIES_ARCTOVISH] = sArctovishTeachableLearnset, + [SPECIES_DURALUDON] = sDuraludonTeachableLearnset, + [SPECIES_DREEPY] = sDreepyTeachableLearnset, + [SPECIES_DRAKLOAK] = sDrakloakTeachableLearnset, + [SPECIES_DRAGAPULT] = sDragapultTeachableLearnset, + [SPECIES_ZACIAN] = sZacianTeachableLearnset, + [SPECIES_ZAMAZENTA] = sZamazentaTeachableLearnset, + [SPECIES_ETERNATUS] = sEternatusTeachableLearnset, + [SPECIES_KUBFU] = sKubfuTeachableLearnset, + [SPECIES_URSHIFU] = sUrshifuTeachableLearnset, + [SPECIES_ZARUDE] = sZarudeTeachableLearnset, + [SPECIES_REGIELEKI] = sRegielekiTeachableLearnset, + [SPECIES_REGIDRAGO] = sRegidragoTeachableLearnset, + [SPECIES_GLASTRIER] = sGlastrierTeachableLearnset, + [SPECIES_SPECTRIER] = sSpectrierTeachableLearnset, + [SPECIES_CALYREX] = sCalyrexTeachableLearnset, + [SPECIES_WYRDEER] = sWyrdeerTeachableLearnset, + [SPECIES_KLEAVOR] = sKleavorTeachableLearnset, + [SPECIES_URSALUNA] = sUrsalunaTeachableLearnset, + [SPECIES_BASCULEGION] = sBasculegionTeachableLearnset, + [SPECIES_SNEASLER] = sSneaslerTeachableLearnset, + [SPECIES_OVERQWIL] = sOverqwilTeachableLearnset, + [SPECIES_ENAMORUS] = sEnamorusTeachableLearnset, + // Megas + [SPECIES_VENUSAUR_MEGA] = sVenusaurTeachableLearnset, + [SPECIES_CHARIZARD_MEGA_X] = sCharizardTeachableLearnset, + [SPECIES_CHARIZARD_MEGA_Y] = sCharizardTeachableLearnset, + [SPECIES_BLASTOISE_MEGA] = sBlastoiseTeachableLearnset, + [SPECIES_BEEDRILL_MEGA] = sBeedrillTeachableLearnset, + [SPECIES_PIDGEOT_MEGA] = sPidgeotTeachableLearnset, + [SPECIES_ALAKAZAM_MEGA] = sAlakazamTeachableLearnset, + [SPECIES_SLOWBRO_MEGA] = sSlowbroTeachableLearnset, + [SPECIES_GENGAR_MEGA] = sGengarTeachableLearnset, + [SPECIES_KANGASKHAN_MEGA] = sKangaskhanTeachableLearnset, + [SPECIES_PINSIR_MEGA] = sPinsirTeachableLearnset, + [SPECIES_GYARADOS_MEGA] = sGyaradosTeachableLearnset, + [SPECIES_AERODACTYL_MEGA] = sAerodactylTeachableLearnset, + [SPECIES_MEWTWO_MEGA_X] = sMewtwoTeachableLearnset, + [SPECIES_MEWTWO_MEGA_Y] = sMewtwoTeachableLearnset, + [SPECIES_AMPHAROS_MEGA] = sAmpharosTeachableLearnset, + [SPECIES_STEELIX_MEGA] = sSteelixTeachableLearnset, + [SPECIES_SCIZOR_MEGA] = sScizorTeachableLearnset, + [SPECIES_HERACROSS_MEGA] = sHeracrossTeachableLearnset, + [SPECIES_HOUNDOOM_MEGA] = sHoundoomTeachableLearnset, + [SPECIES_TYRANITAR_MEGA] = sTyranitarTeachableLearnset, + [SPECIES_SCEPTILE_MEGA] = sSceptileTeachableLearnset, + [SPECIES_BLAZIKEN_MEGA] = sBlazikenTeachableLearnset, + [SPECIES_SWAMPERT_MEGA] = sSwampertTeachableLearnset, + [SPECIES_GARDEVOIR_MEGA] = sGardevoirTeachableLearnset, + [SPECIES_SABLEYE_MEGA] = sSableyeTeachableLearnset, + [SPECIES_MAWILE_MEGA] = sMawileTeachableLearnset, + [SPECIES_AGGRON_MEGA] = sAggronTeachableLearnset, + [SPECIES_MEDICHAM_MEGA] = sMedichamTeachableLearnset, + [SPECIES_MANECTRIC_MEGA] = sManectricTeachableLearnset, + [SPECIES_SHARPEDO_MEGA] = sSharpedoTeachableLearnset, + [SPECIES_CAMERUPT_MEGA] = sCameruptTeachableLearnset, + [SPECIES_ALTARIA_MEGA] = sAltariaTeachableLearnset, + [SPECIES_BANETTE_MEGA] = sBanetteTeachableLearnset, + [SPECIES_ABSOL_MEGA] = sAbsolTeachableLearnset, + [SPECIES_GLALIE_MEGA] = sGlalieTeachableLearnset, + [SPECIES_SALAMENCE_MEGA] = sSalamenceTeachableLearnset, + [SPECIES_METAGROSS_MEGA] = sMetagrossTeachableLearnset, + [SPECIES_LATIAS_MEGA] = sLatiasTeachableLearnset, + [SPECIES_LATIOS_MEGA] = sLatiosTeachableLearnset, + [SPECIES_LOPUNNY_MEGA] = sLopunnyTeachableLearnset, + [SPECIES_GARCHOMP_MEGA] = sGarchompTeachableLearnset, + [SPECIES_LUCARIO_MEGA] = sLucarioTeachableLearnset, + [SPECIES_ABOMASNOW_MEGA] = sAbomasnowTeachableLearnset, + [SPECIES_GALLADE_MEGA] = sGalladeTeachableLearnset, + [SPECIES_AUDINO_MEGA] = sAudinoTeachableLearnset, + [SPECIES_DIANCIE_MEGA] = sDiancieTeachableLearnset, + // Special Mega + Primals + [SPECIES_RAYQUAZA_MEGA] = sRayquazaTeachableLearnset, + [SPECIES_KYOGRE_PRIMAL] = sKyogreTeachableLearnset, + [SPECIES_GROUDON_PRIMAL] = sGroudonTeachableLearnset, + // Alolan Forms + [SPECIES_RATTATA_ALOLAN] = sRattataAlolanTeachableLearnset, + [SPECIES_RATICATE_ALOLAN] = sRaticateAlolanTeachableLearnset, + [SPECIES_RAICHU_ALOLAN] = sRaichuAlolanTeachableLearnset, + [SPECIES_SANDSHREW_ALOLAN] = sSandshrewAlolanTeachableLearnset, + [SPECIES_SANDSLASH_ALOLAN] = sSandslashAlolanTeachableLearnset, + [SPECIES_VULPIX_ALOLAN] = sVulpixAlolanTeachableLearnset, + [SPECIES_NINETALES_ALOLAN] = sNinetalesAlolanTeachableLearnset, + [SPECIES_DIGLETT_ALOLAN] = sDiglettAlolanTeachableLearnset, + [SPECIES_DUGTRIO_ALOLAN] = sDugtrioAlolanTeachableLearnset, + [SPECIES_MEOWTH_ALOLAN] = sMeowthAlolanTeachableLearnset, + [SPECIES_PERSIAN_ALOLAN] = sPersianAlolanTeachableLearnset, + [SPECIES_GEODUDE_ALOLAN] = sGeodudeAlolanTeachableLearnset, + [SPECIES_GRAVELER_ALOLAN] = sGravelerAlolanTeachableLearnset, + [SPECIES_GOLEM_ALOLAN] = sGolemAlolanTeachableLearnset, + [SPECIES_GRIMER_ALOLAN] = sGrimerAlolanTeachableLearnset, + [SPECIES_MUK_ALOLAN] = sMukAlolanTeachableLearnset, + [SPECIES_EXEGGUTOR_ALOLAN] = sExeggutorAlolanTeachableLearnset, + [SPECIES_MAROWAK_ALOLAN] = sMarowakAlolanTeachableLearnset, + // Galarian Forms + [SPECIES_MEOWTH_GALARIAN] = sMeowthGalarianTeachableLearnset, + [SPECIES_PONYTA_GALARIAN] = sPonytaGalarianTeachableLearnset, + [SPECIES_RAPIDASH_GALARIAN] = sRapidashGalarianTeachableLearnset, + [SPECIES_SLOWPOKE_GALARIAN] = sSlowpokeGalarianTeachableLearnset, + [SPECIES_SLOWBRO_GALARIAN] = sSlowbroGalarianTeachableLearnset, + [SPECIES_FARFETCHD_GALARIAN] = sFarfetchdGalarianTeachableLearnset, + [SPECIES_WEEZING_GALARIAN] = sWeezingGalarianTeachableLearnset, + [SPECIES_MR_MIME_GALARIAN] = sMrMimeGalarianTeachableLearnset, + [SPECIES_ARTICUNO_GALARIAN] = sArticunoGalarianTeachableLearnset, + [SPECIES_ZAPDOS_GALARIAN] = sZapdosGalarianTeachableLearnset, + [SPECIES_MOLTRES_GALARIAN] = sMoltresGalarianTeachableLearnset, + [SPECIES_SLOWKING_GALARIAN] = sSlowkingGalarianTeachableLearnset, + [SPECIES_CORSOLA_GALARIAN] = sCorsolaGalarianTeachableLearnset, + [SPECIES_ZIGZAGOON_GALARIAN] = sZigzagoonGalarianTeachableLearnset, + [SPECIES_LINOONE_GALARIAN] = sLinooneGalarianTeachableLearnset, + [SPECIES_DARUMAKA_GALARIAN] = sDarumakaGalarianTeachableLearnset, + [SPECIES_DARMANITAN_GALARIAN] = sDarmanitanGalarianTeachableLearnset, + [SPECIES_YAMASK_GALARIAN] = sYamaskGalarianTeachableLearnset, + [SPECIES_STUNFISK_GALARIAN] = sStunfiskGalarianTeachableLearnset, + // Hisuian Forms + [SPECIES_GROWLITHE_HISUIAN] = sGrowlitheHisuianTeachableLearnset, + [SPECIES_ARCANINE_HISUIAN] = sArcanineHisuianTeachableLearnset, + [SPECIES_VOLTORB_HISUIAN] = sVoltorbHisuianTeachableLearnset, + [SPECIES_ELECTRODE_HISUIAN] = sElectrodeHisuianTeachableLearnset, + [SPECIES_TYPHLOSION_HISUIAN] = sTyphlosionHisuianTeachableLearnset, + [SPECIES_QWILFISH_HISUIAN] = sQwilfishHisuianTeachableLearnset, + [SPECIES_SNEASEL_HISUIAN] = sSneaselHisuianTeachableLearnset, + [SPECIES_SAMUROTT_HISUIAN] = sSamurottHisuianTeachableLearnset, + [SPECIES_LILLIGANT_HISUIAN] = sLilligantHisuianTeachableLearnset, + [SPECIES_ZORUA_HISUIAN] = sZoruaHisuianTeachableLearnset, + [SPECIES_ZOROARK_HISUIAN] = sZoroarkHisuianTeachableLearnset, + [SPECIES_BRAVIARY_HISUIAN] = sBraviaryHisuianTeachableLearnset, + [SPECIES_SLIGGOO_HISUIAN] = sSliggooHisuianTeachableLearnset, + [SPECIES_GOODRA_HISUIAN] = sGoodraHisuianTeachableLearnset, + [SPECIES_AVALUGG_HISUIAN] = sAvaluggHisuianTeachableLearnset, + [SPECIES_DECIDUEYE_HISUIAN] = sDecidueyeHisuianTeachableLearnset, + // Misc Forms + // Cosplay Pikachu + [SPECIES_PIKACHU_COSPLAY] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_ROCK_STAR] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_BELLE] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_POP_STAR] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_PH_D] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_LIBRE] = sPikachuTeachableLearnset, + // Cap Pikachu + [SPECIES_PIKACHU_ORIGINAL_CAP] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_HOENN_CAP] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_SINNOH_CAP] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_UNOVA_CAP] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_KALOS_CAP] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_ALOLA_CAP] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_PARTNER_CAP] = sPikachuTeachableLearnset, + [SPECIES_PIKACHU_WORLD_CAP] = sPikachuTeachableLearnset, + // Pichu + [SPECIES_PICHU_SPIKY_EARED] = sPichuTeachableLearnset, +#endif + // Unown + [SPECIES_UNOWN_B] = sUnownTeachableLearnset, + [SPECIES_UNOWN_C] = sUnownTeachableLearnset, + [SPECIES_UNOWN_D] = sUnownTeachableLearnset, + [SPECIES_UNOWN_E] = sUnownTeachableLearnset, + [SPECIES_UNOWN_F] = sUnownTeachableLearnset, + [SPECIES_UNOWN_G] = sUnownTeachableLearnset, + [SPECIES_UNOWN_H] = sUnownTeachableLearnset, + [SPECIES_UNOWN_I] = sUnownTeachableLearnset, + [SPECIES_UNOWN_J] = sUnownTeachableLearnset, + [SPECIES_UNOWN_K] = sUnownTeachableLearnset, + [SPECIES_UNOWN_L] = sUnownTeachableLearnset, + [SPECIES_UNOWN_M] = sUnownTeachableLearnset, + [SPECIES_UNOWN_N] = sUnownTeachableLearnset, + [SPECIES_UNOWN_O] = sUnownTeachableLearnset, + [SPECIES_UNOWN_P] = sUnownTeachableLearnset, + [SPECIES_UNOWN_Q] = sUnownTeachableLearnset, + [SPECIES_UNOWN_R] = sUnownTeachableLearnset, + [SPECIES_UNOWN_S] = sUnownTeachableLearnset, + [SPECIES_UNOWN_T] = sUnownTeachableLearnset, + [SPECIES_UNOWN_U] = sUnownTeachableLearnset, + [SPECIES_UNOWN_V] = sUnownTeachableLearnset, + [SPECIES_UNOWN_W] = sUnownTeachableLearnset, + [SPECIES_UNOWN_X] = sUnownTeachableLearnset, + [SPECIES_UNOWN_Y] = sUnownTeachableLearnset, + [SPECIES_UNOWN_Z] = sUnownTeachableLearnset, + [SPECIES_UNOWN_EMARK] = sUnownTeachableLearnset, + [SPECIES_UNOWN_QMARK] = sUnownTeachableLearnset, + // Castform + [SPECIES_CASTFORM_SUNNY] = sCastformTeachableLearnset, + [SPECIES_CASTFORM_RAINY] = sCastformTeachableLearnset, + [SPECIES_CASTFORM_SNOWY] = sCastformTeachableLearnset, + // Deoxys + [SPECIES_DEOXYS_ATTACK] = sDeoxysAttackTeachableLearnset, + [SPECIES_DEOXYS_DEFENSE] = sDeoxysDefenseTeachableLearnset, + [SPECIES_DEOXYS_SPEED] = sDeoxysSpeedTeachableLearnset, +#if P_NEW_POKEMON == TRUE + // Burmy + [SPECIES_BURMY_SANDY_CLOAK] = sBurmyTeachableLearnset, + [SPECIES_BURMY_TRASH_CLOAK] = sBurmyTeachableLearnset, + // Wormadam + [SPECIES_WORMADAM_SANDY_CLOAK] = sWormadamSandyCloakTeachableLearnset, + [SPECIES_WORMADAM_TRASH_CLOAK] = sWormadamTrashCloakTeachableLearnset, + // Cherrim + [SPECIES_CHERRIM_SUNSHINE] = sCherrimTeachableLearnset, + // Shellos + [SPECIES_SHELLOS_EAST_SEA] = sShellosTeachableLearnset, + // Gastrodon + [SPECIES_GASTRODON_EAST_SEA] = sGastrodonTeachableLearnset, + // Rotom + [SPECIES_ROTOM_HEAT] = sRotomTeachableLearnset, + [SPECIES_ROTOM_WASH] = sRotomTeachableLearnset, + [SPECIES_ROTOM_FROST] = sRotomTeachableLearnset, + [SPECIES_ROTOM_FAN] = sRotomTeachableLearnset, + [SPECIES_ROTOM_MOW] = sRotomTeachableLearnset, + // Origin Forme + [SPECIES_DIALGA_ORIGIN] = sDialgaTeachableLearnset, + [SPECIES_PALKIA_ORIGIN] = sPalkiaTeachableLearnset, + [SPECIES_GIRATINA_ORIGIN] = sGiratinaTeachableLearnset, + // Shaymin + [SPECIES_SHAYMIN_SKY] = sShayminSkyTeachableLearnset, + // Arceus + [SPECIES_ARCEUS_FIGHTING] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_FLYING] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_POISON] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_GROUND] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_ROCK] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_BUG] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_GHOST] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_STEEL] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_FIRE] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_WATER] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_GRASS] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_ELECTRIC] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_PSYCHIC] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_ICE] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_DRAGON] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_DARK] = sArceusTeachableLearnset, + [SPECIES_ARCEUS_FAIRY] = sArceusTeachableLearnset, + // Basculin + [SPECIES_BASCULIN_BLUE_STRIPED] = sBasculinTeachableLearnset, + [SPECIES_BASCULIN_WHITE_STRIPED] = sBasculinTeachableLearnset, + // Darmanitan + [SPECIES_DARMANITAN_ZEN_MODE] = sDarmanitanTeachableLearnset, + [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sDarmanitanGalarianTeachableLearnset, + // Deerling + [SPECIES_DEERLING_SUMMER] = sDeerlingTeachableLearnset, + [SPECIES_DEERLING_AUTUMN] = sDeerlingTeachableLearnset, + [SPECIES_DEERLING_WINTER] = sDeerlingTeachableLearnset, + // Sawsbuck + [SPECIES_SAWSBUCK_SUMMER] = sSawsbuckTeachableLearnset, + [SPECIES_SAWSBUCK_AUTUMN] = sSawsbuckTeachableLearnset, + [SPECIES_SAWSBUCK_WINTER] = sSawsbuckTeachableLearnset, + // Therian Forms + [SPECIES_TORNADUS_THERIAN] = sTornadusTeachableLearnset, + [SPECIES_THUNDURUS_THERIAN] = sThundurusTeachableLearnset, + [SPECIES_LANDORUS_THERIAN] = sLandorusTeachableLearnset, + [SPECIES_ENAMORUS_THERIAN] = sEnamorusTeachableLearnset, + // Kyurem + [SPECIES_KYUREM_WHITE] = sKyuremTeachableLearnset, + [SPECIES_KYUREM_BLACK] = sKyuremTeachableLearnset, + // Keldeo + [SPECIES_KELDEO_RESOLUTE] = sKeldeoTeachableLearnset, + // Meloetta + [SPECIES_MELOETTA_PIROUETTE] = sMeloettaTeachableLearnset, + // Genesect + [SPECIES_GENESECT_DOUSE_DRIVE] = sGenesectTeachableLearnset, + [SPECIES_GENESECT_SHOCK_DRIVE] = sGenesectTeachableLearnset, + [SPECIES_GENESECT_BURN_DRIVE] = sGenesectTeachableLearnset, + [SPECIES_GENESECT_CHILL_DRIVE] = sGenesectTeachableLearnset, + // Greninja + [SPECIES_GRENINJA_BATTLE_BOND] = sGreninjaTeachableLearnset, + [SPECIES_GRENINJA_ASH] = sGreninjaTeachableLearnset, + // Vivillon + [SPECIES_VIVILLON_POLAR] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_TUNDRA] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_CONTINENTAL] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_GARDEN] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_ELEGANT] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_MEADOW] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_MODERN] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_MARINE] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_ARCHIPELAGO] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_HIGH_PLAINS] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_SANDSTORM] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_RIVER] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_MONSOON] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_SAVANNA] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_SUN] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_OCEAN] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_JUNGLE] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_FANCY] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_POKE_BALL] = sVivillonTeachableLearnset, + // Flabébé + [SPECIES_FLABEBE_YELLOW_FLOWER] = sFlabebeTeachableLearnset, + [SPECIES_FLABEBE_ORANGE_FLOWER] = sFlabebeTeachableLearnset, + [SPECIES_FLABEBE_BLUE_FLOWER] = sFlabebeTeachableLearnset, + [SPECIES_FLABEBE_WHITE_FLOWER] = sFlabebeTeachableLearnset, + // Floette + [SPECIES_FLOETTE_YELLOW_FLOWER] = sFloetteTeachableLearnset, + [SPECIES_FLOETTE_ORANGE_FLOWER] = sFloetteTeachableLearnset, + [SPECIES_FLOETTE_BLUE_FLOWER] = sFloetteTeachableLearnset, + [SPECIES_FLOETTE_WHITE_FLOWER] = sFloetteTeachableLearnset, + [SPECIES_FLOETTE_ETERNAL_FLOWER] = sFloetteEternalFlowerTeachableLearnset, + // Florges + [SPECIES_FLORGES_YELLOW_FLOWER] = sFlorgesTeachableLearnset, + [SPECIES_FLORGES_ORANGE_FLOWER] = sFlorgesTeachableLearnset, + [SPECIES_FLORGES_BLUE_FLOWER] = sFlorgesTeachableLearnset, + [SPECIES_FLORGES_WHITE_FLOWER] = sFlorgesTeachableLearnset, + //Furfrou + [SPECIES_FURFROU_HEART_TRIM] = sFurfrouTeachableLearnset, + [SPECIES_FURFROU_STAR_TRIM] = sFurfrouTeachableLearnset, + [SPECIES_FURFROU_DIAMOND_TRIM] = sFurfrouTeachableLearnset, + [SPECIES_FURFROU_DEBUTANTE_TRIM] = sFurfrouTeachableLearnset, + [SPECIES_FURFROU_MATRON_TRIM] = sFurfrouTeachableLearnset, + [SPECIES_FURFROU_DANDY_TRIM] = sFurfrouTeachableLearnset, + [SPECIES_FURFROU_LA_REINE_TRIM] = sFurfrouTeachableLearnset, + [SPECIES_FURFROU_KABUKI_TRIM] = sFurfrouTeachableLearnset, + [SPECIES_FURFROU_PHARAOH_TRIM] = sFurfrouTeachableLearnset, + // Meowstic + [SPECIES_MEOWSTIC_FEMALE] = sMeowsticFemaleTeachableLearnset, + // Aegislash + [SPECIES_AEGISLASH_BLADE] = sAegislashTeachableLearnset, + // Pumpkaboo + [SPECIES_PUMPKABOO_SMALL] = sPumpkabooTeachableLearnset, + [SPECIES_PUMPKABOO_LARGE] = sPumpkabooTeachableLearnset, + [SPECIES_PUMPKABOO_SUPER] = sPumpkabooTeachableLearnset, + // Gourgeist + [SPECIES_GOURGEIST_SMALL] = sGourgeistTeachableLearnset, + [SPECIES_GOURGEIST_LARGE] = sGourgeistTeachableLearnset, + [SPECIES_GOURGEIST_SUPER] = sGourgeistTeachableLearnset, + // Xerneas + [SPECIES_XERNEAS_ACTIVE] = sXerneasTeachableLearnset, + // Zygarde + [SPECIES_ZYGARDE_10] = sZygardeTeachableLearnset, + [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sZygardeTeachableLearnset, + [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = sZygardeTeachableLearnset, + [SPECIES_ZYGARDE_COMPLETE] = sZygardeTeachableLearnset, + // Hoopa + [SPECIES_HOOPA_UNBOUND] = sHoopaUnboundTeachableLearnset, + // Oricorio + [SPECIES_ORICORIO_POM_POM] = sOricorioTeachableLearnset, + [SPECIES_ORICORIO_PAU] = sOricorioTeachableLearnset, + [SPECIES_ORICORIO_SENSU] = sOricorioTeachableLearnset, + // Rockruff + [SPECIES_ROCKRUFF_OWN_TEMPO] = sRockruffTeachableLearnset, + // Lycanroc + [SPECIES_LYCANROC_MIDNIGHT] = sLycanrocMidnightTeachableLearnset, + [SPECIES_LYCANROC_DUSK] = sLycanrocDuskTeachableLearnset, + // Wishiwashi + [SPECIES_WISHIWASHI_SCHOOL] = sWishiwashiTeachableLearnset, + // Silvally + [SPECIES_SILVALLY_FIGHTING] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_FLYING] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_POISON] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_GROUND] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_ROCK] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_BUG] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_GHOST] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_STEEL] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_FIRE] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_WATER] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_GRASS] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_ELECTRIC] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_PSYCHIC] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_ICE] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_DRAGON] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_DARK] = sSilvallyTeachableLearnset, + [SPECIES_SILVALLY_FAIRY] = sSilvallyTeachableLearnset, + // Minior + [SPECIES_MINIOR_METEOR_ORANGE] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_METEOR_YELLOW] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_METEOR_GREEN] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_METEOR_BLUE] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_METEOR_INDIGO] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_METEOR_VIOLET] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_CORE_RED] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_CORE_ORANGE] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_CORE_YELLOW] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_CORE_GREEN] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_CORE_BLUE] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_CORE_INDIGO] = sMiniorTeachableLearnset, + [SPECIES_MINIOR_CORE_VIOLET] = sMiniorTeachableLearnset, + // Mimikyu + [SPECIES_MIMIKYU_BUSTED] = sMimikyuTeachableLearnset, + // Necrozma + [SPECIES_NECROZMA_DUSK_MANE] = sNecrozmaTeachableLearnset, + [SPECIES_NECROZMA_DAWN_WINGS] = sNecrozmaTeachableLearnset, + [SPECIES_NECROZMA_ULTRA] = sNecrozmaTeachableLearnset, + // Magearna + [SPECIES_MAGEARNA_ORIGINAL_COLOR] = sMagearnaTeachableLearnset, + // Cramorant + [SPECIES_CRAMORANT_GULPING] = sCramorantTeachableLearnset, + [SPECIES_CRAMORANT_GORGING] = sCramorantTeachableLearnset, + // Toxtricity + [SPECIES_TOXTRICITY_LOW_KEY] = sToxtricityLowKeyTeachableLearnset, + // Sinistea + [SPECIES_SINISTEA_ANTIQUE] = sSinisteaTeachableLearnset, + // Polteageist + [SPECIES_POLTEAGEIST_ANTIQUE] = sPolteageistTeachableLearnset, + // Alcremie + [SPECIES_ALCREMIE_RUBY_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_MATCHA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_MINT_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_LEMON_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_SALTED_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RUBY_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_CARAMEL_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RAINBOW_SWIRL] = sAlcremieTeachableLearnset, + // Eiscue + [SPECIES_EISCUE_NOICE_FACE] = sEiscueTeachableLearnset, + // Indeedee + [SPECIES_INDEEDEE_FEMALE] = sIndeedeeFemaleTeachableLearnset, + // Morpeko + [SPECIES_MORPEKO_HANGRY] = sMorpekoTeachableLearnset, + // Zacian + [SPECIES_ZACIAN_CROWNED_SWORD] = sZacianTeachableLearnset, + // Zamazenta + [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = sZamazentaTeachableLearnset, + // Eternatus + [SPECIES_ETERNATUS_ETERNAMAX] = sEternatusTeachableLearnset, + // Urshifu + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = sUrshifuRapidStrikeStyleTeachableLearnset, + // Zarude + [SPECIES_ZARUDE_DADA] = sZarudeTeachableLearnset, + // Calyrex + [SPECIES_CALYREX_ICE_RIDER] = sCalyrexIceRiderTeachableLearnset, + [SPECIES_CALYREX_SHADOW_RIDER] = sCalyrexShadowRiderTeachableLearnset, +#endif +}; diff --git a/src/data/pokemon/teachable_learnsets.h b/src/data/pokemon/teachable_learnsets.h new file mode 100644 index 0000000000..30405b0441 --- /dev/null +++ b/src/data/pokemon/teachable_learnsets.h @@ -0,0 +1,33556 @@ +static const u16 sBulbasaurTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sIvysaurTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVenusaurTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCharmanderTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sCharmeleonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sCharizardTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSquirtleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWartortleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBlastoiseTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sCaterpieTeachableLearnset[] = { + MOVE_SNORE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMetapodTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sButterfreeTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sWeedleTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sKakunaTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sBeedrillTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPidgeyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPidgeottoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPidgeotTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sRattataTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRaticateTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSpearowTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sFearowTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sEkansTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sArbokTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPikachuTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRaichuTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSandshrewTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSandslashTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sNidoranFTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sNidorinaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sNidoqueenTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sNidoranMTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sNidorinoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sNidokingTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sClefairyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SOFT_BOILED, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sClefableTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SOFT_BOILED, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVulpixTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sNinetalesTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sJigglypuffTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWigglytuffTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sZubatTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGolbatTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sOddishTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGloomTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVileplumeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sParasTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sParasectTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVenonatTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sVenomothTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sDiglettTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDugtrioTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMeowthTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPersianTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPsyduckTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGolduckTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sMankeyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sPrimeapeTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrowlitheTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sArcanineTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPoliwagTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPoliwhirlTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPoliwrathTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAbraTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKadabraTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAlakazamTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMachopTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMachokeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMachampTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sBellsproutTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWeepinbellTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVictreebelTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTentacoolTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTentacruelTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGeodudeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sGravelerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sGolemTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sPonytaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sRapidashTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlowpokeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlowbroTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMagnemiteTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMagnetonTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFarfetchdTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDoduoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDodrioTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSeelTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDewgongTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrimerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMukTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sShellderTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCloysterTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGastlyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sHaunterTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sGengarTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sOnixTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDrowzeeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHypnoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKrabbyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKinglerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVoltorbTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sElectrodeTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sExeggcuteTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sExeggutorTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCuboneTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMarowakTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sHitmonleeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sHitmonchanTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sLickitungTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sKoffingTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWeezingTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sRhyhornTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRhydonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sChanseyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SOFT_BOILED, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTangelaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKangaskhanTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sHorseaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSeadraTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGoldeenTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSeakingTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sStaryuTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sStarmieTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SKILL_SWAP, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMrMimeTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sScytherTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sJynxTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sElectabuzzTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMagmarTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sPinsirTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTaurosTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMagikarpTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sGyaradosTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLaprasTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDittoTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sEeveeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sVaporeonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sJolteonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFlareonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPorygonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sOmanyteTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sOmastarTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sKabutoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sKabutopsTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAerodactylTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSnorlaxTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sArticunoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sZapdosTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMoltresTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sDratiniTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDragonairTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDragoniteTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMewtwoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMewTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_BULLET_SEED, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FLY, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SOFT_BOILED, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sChikoritaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBayleefTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMeganiumTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCyndaquilTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sQuilavaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sTyphlosionTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sTotodileTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCroconawTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFeraligatrTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSentretTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sFurretTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sHoothootTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sNoctowlTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sLedybaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sLedianTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSpinarakTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAriadosTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCrobatTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sChinchouTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLanturnTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPichuTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCleffaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SOFT_BOILED, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sIgglybuffTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTogepiTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SOFT_BOILED, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTogeticTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FLY, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SOFT_BOILED, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sNatuTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sXatuTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMareepTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFlaaffyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAmpharosTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBellossomTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMarillTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sAzumarillTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSudowoodoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sPolitoedTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sHoppipTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSkiploomTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sJumpluffTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAipomTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSunkernTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSunfloraTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sYanmaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sWooperTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sQuagsireTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sEspeonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sUmbreonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sMurkrowTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlowkingTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMisdreavusTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sUnownTeachableLearnset[] = { + MOVE_HIDDEN_POWER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWobbuffetTeachableLearnset[] = { + MOVE_SAFEGUARD, + MOVE_COUNTER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGirafarigTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPinecoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sForretressTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDunsparceTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGligarTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSteelixTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSnubbullTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGranbullTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sQwilfishTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sScizorTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sShuckleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sHeracrossTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSneaselTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTeddiursaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sUrsaringTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlugmaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMagcargoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSwinubTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPiloswineTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sCorsolaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sRemoraidTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BULLET_SEED, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sOctilleryTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BULLET_SEED, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDelibirdTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sMantineTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BULLET_SEED, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSkarmoryTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHoundourTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sHoundoomTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sKingdraTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPhanpyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDonphanTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPorygon2TeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sStantlerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSmeargleTeachableLearnset[] = { + MOVE_FLAMETHROWER, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_UNAVAILABLE, +}; + +static const u16 sTyrogueTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sHitmontopTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSmoochumTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sElekidTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMagbyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMiltankTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBlisseyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SOFT_BOILED, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRaikouTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sEnteiTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSuicuneTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sLarvitarTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPupitarTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTyranitarTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLugiaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHoOhTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCelebiTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTreeckoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrovyleTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSceptileTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sTorchicTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCombuskenTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sBlazikenTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMudkipTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMarshtompTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSwampertTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPoochyenaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMightyenaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sZigzagoonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLinooneTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWurmpleTeachableLearnset[] = { + MOVE_SNORE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSilcoonTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sBeautiflyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCascoonTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sDustoxTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sLotadTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLombreTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sLudicoloTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSeedotTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sNuzleafTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sShiftryTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTaillowTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSwellowTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sWingullTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STEEL_WING, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPelipperTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STEEL_WING, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sRaltsTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKirliaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGardevoirTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSurskitTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sMasquerainTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sShroomishTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBreloomTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlakothTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sVigorothTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlakingTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sNincadaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sNinjaskTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sShedinjaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWhismurTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sLoudredTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sExploudTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMakuhitaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sHariyamaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sAzurillTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sNosepassTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSkittyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDelcattyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSableyeTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMawileTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sAronTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sLaironTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAggronTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMedititeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMedichamTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sElectrikeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sManectricTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPlusleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMinunTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVolbeatTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sIllumiseTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRoseliaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGulpinTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSwalotTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sCarvanhaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSharpedoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sWailmerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWailordTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sNumelTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sCameruptTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTorkoalTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSpoinkTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrumpigTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSpindaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sTrapinchTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sVibravaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sFlygonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sCacneaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sCacturneTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSwabluTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sAltariaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sZangooseTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSeviperTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLunatoneTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSolrockTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sBarboachTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWhiscashTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sCorphishTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCrawdauntTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBaltoyTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sClaydolTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sLileepTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCradilyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAnorithTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sArmaldoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFeebasTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sMiloticTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCastformTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKecleonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sShuppetTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBanetteTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDuskullTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDusclopsTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sTropiusTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sChimechoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAbsolTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWynautTeachableLearnset[] = { + MOVE_SAFEGUARD, + MOVE_COUNTER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSnoruntTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGlalieTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSphealTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSealeoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWalreinTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sClamperlTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sHuntailTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGorebyssTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sRelicanthTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sLuvdiscTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sBagonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sShelgonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSalamenceTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sBeldumTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sMetangTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMetagrossTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sRegirockTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRegiceTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRegisteelTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLatiasTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLatiosTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKyogreTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGroudonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRayquazaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sJirachiTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDeoxysTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +#if P_NEW_POKEMON == TRUE + +static const u16 sTurtwigTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrotleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTorterraTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sChimcharTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sMonfernoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sInfernapeTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sPiplupTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPrinplupTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sEmpoleonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sStarlyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sStaraviaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sStaraptorTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sBidoofTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBibarelTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKricketotTeachableLearnset[] = { + MOVE_MUD_SLAP, + MOVE_SNORE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKricketuneTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sShinxTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLuxioTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLuxrayTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBudewTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRoseradeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCranidosTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sRampardosTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sShieldonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBastiodonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBurmyTeachableLearnset[] = { + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_SNORE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWormadamTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMothimTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCombeeTeachableLearnset[] = { + MOVE_MUD_SLAP, + MOVE_SNORE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sVespiquenTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPachirisuTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBuizelTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sFloatzelTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCherubiTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCherrimTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sShellosTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGastrodonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAmbipomTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDrifloonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDrifblimTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBunearyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLopunnyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMismagiusTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHonchkrowTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGlameowTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPuruglyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sChinglingTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sStunkyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSkuntankTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sBronzorTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBronzongTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBonslyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMimeJrTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHappinyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_COUNTER, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_METRONOME, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sChatotTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MIMIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSpiritombTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGibleTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGabiteTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGarchompTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMunchlaxTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_METRONOME, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sRioluTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sLucarioTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sHippopotasTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sHippowdonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSkorupiTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDrapionTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCroagunkTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sToxicroakTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sCarnivineTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFinneonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sLumineonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sMantykeTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSnoverTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAbomasnowTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWeavileTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMagnezoneTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLickilickyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DEFENSE_CURL, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sRhyperiorTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sTangrowthTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sElectivireTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMagmortarTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sTogekissTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FLY, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sYanmegaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sLeafeonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGlaceonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGliscorTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMamoswineTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPorygonZTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGalladeTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sProbopassTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDusknoirTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sFroslassTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRotomTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sUxieTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMespritTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAzelfTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDialgaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPalkiaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHeatranTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sRegigigasTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_RAIN_DANCE, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGiratinaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCresseliaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPhioneTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sManaphyTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sDarkraiTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sShayminTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sArceusTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVictiniTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSnivyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sServineTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSerperiorTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTepigTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPigniteTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_FIRE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sEmboarTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_FIRE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sOshawottTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDewottTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSamurottTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPatratTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWatchogTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLillipupTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHerdierTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sStoutlandTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPurrloinTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLiepardTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPansageTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSimisageTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPansearTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSimisearTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPanpourTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSimipourTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMunnaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMusharnaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPidoveTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTranquillTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sUnfezantTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBlitzleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sZebstrikaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRoggenrolaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBoldoreTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGigalithTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWoobatTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_STEEL_WING, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSwoobatTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_STEEL_WING, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDrilburTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sExcadrillTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAudinoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_DREAM_EATER, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTimburrTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sGurdurrTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_DYNAMIC_PUNCH, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sConkeldurrTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_DYNAMIC_PUNCH, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sTympoleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPalpitoadTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSeismitoadTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sThrohTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSawkTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSewaddleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSwadloonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sLeavannyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVenipedeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWhirlipedeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sScolipedeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCottoneeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWhimsicottTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPetililTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sLilligantTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBasculinTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_DOUBLE_EDGE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSandileTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sKrokorokTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sKrookodileTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDarumakaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDarmanitanTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMaractusTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDwebbleTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCrustleTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sScraggyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sScraftyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sSigilyphTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sYamaskTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sCofagrigusTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTirtougaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sCarracostaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sArchenTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sArcheopsTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTrubbishTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGarbodorTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_EXPLOSION, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sZoruaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sZoroarkTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMinccinoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCinccinoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGothitaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGothoritaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGothitelleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSolosisTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_THUNDER, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_EXPLOSION, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDuosionTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_THUNDER, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_EXPLOSION, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sReuniclusTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_THUNDER, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_EXPLOSION, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDucklettTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSwannaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sVanilliteTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sVanillishTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sVanilluxeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDeerlingTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSawsbuckTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sEmolgaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKarrablastTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sEscavalierTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFoongusTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAmoongussTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sFrillishTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sJellicentTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAlomomolaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sJoltikTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGalvantulaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFerroseedTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFerrothornTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKlinkTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKlangTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKlinklangTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTynamoTeachableLearnset[] = { + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sEelektrikTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sEelektrossTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sElgyemTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBeheeyemTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLitwickTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sLampentTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sChandelureTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAxewTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFraxureTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHaxorusTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCubchooTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBearticTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCryogonalTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sShelmetTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAccelgorTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sStunfiskTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMienfooTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMienshaoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDruddigonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sGolettTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DYNAMIC_PUNCH, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sGolurkTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DYNAMIC_PUNCH, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sPawniardTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBisharpTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBouffalantTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRuffletTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBraviaryTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sVullabyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMandibuzzTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sHeatmorTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_FIRE_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sDurantTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDeinoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sZweilousTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHydreigonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLarvestaTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sVolcaronaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sCobalionTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTerrakionTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVirizionTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTornadusTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sThundurusTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sReshiramTeachableLearnset[] = { + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sZekromTeachableLearnset[] = { + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLandorusTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKyuremTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sKeldeoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMeloettaTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGenesectTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sChespinTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sQuilladinTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sChesnaughtTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sFennekinTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBraixenTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_FIRE_PUNCH, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sDelphoxTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_FIRE_PUNCH, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sFroakieTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sFrogadierTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGreninjaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBunnelbyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDiggersbyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sFletchlingTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFletchinderTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTalonflameTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sScatterbugTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sSpewpaTeachableLearnset[] = { + MOVE_PROTECT, + MOVE_UNAVAILABLE, +}; + +static const u16 sVivillonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sLitleoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPyroarTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sFlabebeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sFloetteTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sFlorgesTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSkiddoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGogoatTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPanchamTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sPangoroTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sFurfrouTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TOXIC, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sEspurrTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMeowsticTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHonedgeTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_TOXIC, + MOVE_FURY_CUTTER, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDoubladeTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_TOXIC, + MOVE_FURY_CUTTER, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAegislashTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_FURY_CUTTER, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSpritzeeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAromatisseTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSwirlixTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlurpuffTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sInkayTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMalamarTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBinacleTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBarbaracleTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSkrelpTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDragalgeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sClauncherTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sClawitzerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHelioptileTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHelioliskTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTyruntTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTyrantrumTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAmauraTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAurorusTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSylveonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sHawluchaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SECRET_POWER, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sDedenneTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCarbinkTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGoomyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSliggooTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGoodraTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_FIRE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sKlefkiTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPhantumpTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTrevenantTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPumpkabooTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_EXPLOSION, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGourgeistTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_EXPLOSION, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBergmiteTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAvaluggTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_STRENGTH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sNoibatTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sNoivernTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sXerneasTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SECRET_POWER, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sYveltalTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sZygardeTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHOCK_WAVE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDiancieTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sHoopaTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVolcanionTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_EXPLOSION, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sRowletTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDartrixTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDecidueyeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLittenTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTorracatTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sIncineroarTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sPopplioTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sBrionneTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPrimarinaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SHADOW_BALL, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPikipekTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTrumbeakTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sToucannonTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sYungoosTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SHOCK_WAVE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGumshoosTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SHOCK_WAVE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrubbinTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SHOCK_WAVE, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCharjabugTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SHOCK_WAVE, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVikavoltTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCrabrawlerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DYNAMIC_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sCrabominableTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DYNAMIC_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sOricorioTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_STEEL_WING, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCutieflyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sRibombeeTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sRockruffTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sLycanrocTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWishiwashiTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DOUBLE_EDGE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMareanieTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sToxapexTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMudbrayTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_MEGA_KICK, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMudsdaleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_MEGA_KICK, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sDewpiderTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sAraquanidTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SURF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sFomantisTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLurantisTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMorelullTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sShiinoticTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSalanditTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSalazzleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sStuffulTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sBewearTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sBounsweetTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sSteeneeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTsareenaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sComfeyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sOranguruTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPassimianTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ROCK_SLIDE, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWimpodTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGolisopodTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_FURY_CUTTER, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSandygastTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPalossandTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sPyukumukuTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_HAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTypeNullTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SANDSTORM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSilvallyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HAIL, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_EXPLOSION, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMiniorTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SOLAR_BEAM, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_EXPLOSION, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sKomalaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_RETURN, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTurtonatorTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTogedemaruTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SHOCK_WAVE, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DEFENSE_CURL, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMimikyuTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBruxishTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SNATCH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_DREAM_EATER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDrampaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDhelmiseTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sJangmooTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHakamooTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKommooTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SHOCK_WAVE, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sTapuKokoTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SAFEGUARD, + MOVE_SHOCK_WAVE, + MOVE_STEEL_WING, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTapuLeleTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sTapuBuluTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTapuFiniTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SURF, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sCosmogTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sCosmoemTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sSolgaleoTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLunalaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sNihilegoTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SLUDGE_BOMB, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBuzzwoleTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sPheromosaTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sXurkitreeTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCelesteelaTeachableLearnset[] = { + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_EXPLOSION, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sKartanaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_TOXIC, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGuzzlordTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sNecrozmaTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMagearnaTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_RETURN, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SOLAR_BEAM, + MOVE_THUNDERBOLT, + MOVE_DEFENSE_CURL, + MOVE_EXPLOSION, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMarshadowTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_COUNTER, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_PSYCH_UP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sPoipoleTeachableLearnset[] = { + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sNaganadelTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sStakatakaTeachableLearnset[] = { + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SKILL_SWAP, + MOVE_TOXIC, + MOVE_DOUBLE_EDGE, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBlacephalonTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_EXPLOSION, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sZeraoraTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SHOCK_WAVE, + MOVE_SNATCH, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_FIRE_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMeltanTeachableLearnset[] = { + MOVE_HIDDEN_POWER, + MOVE_UNAVAILABLE, +}; + +static const u16 sMelmetalTeachableLearnset[] = { + MOVE_HIDDEN_POWER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrookeyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_PROTECT, + MOVE_REST, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sThwackeyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_PROTECT, + MOVE_REST, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRillaboomTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_BULLET_SEED, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sScorbunnyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sRabootTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCinderaceTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MEGA_KICK, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSobbleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIVE, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SURF, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sDrizzileTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIVE, + MOVE_FACADE, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SURF, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sInteleonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SURF, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_METRONOME, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSkwovetTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DIG, + MOVE_FACADE, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_THIEF, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGreedentTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_THIEF, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRookideeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_FLY, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCorvisquireTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_FLY, + MOVE_PROTECT, + MOVE_REST, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCorviknightTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_FACADE, + MOVE_FLY, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_STEEL_WING, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sBlipbugTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sDottlerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sOrbeetleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sNickitTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sThievulTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGossifleurTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sEldegossTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWoolooTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDubwoolTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sChewtleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIVE, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SURF, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDrednawTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_DIVE, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SURF, + MOVE_WATERFALL, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sYamperTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBoltundTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRolycolyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCarkolTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_ENDURE, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCoalossalTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SOLAR_BEAM, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sApplinTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DEFENSE_CURL, + MOVE_ROLLOUT, + MOVE_UNAVAILABLE, +}; + +static const u16 sFlappleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_FACADE, + MOVE_FLY, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAppletunTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BULLET_SEED, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSilicobraTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSandacondaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_ENDURE, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCramorantTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_FACADE, + MOVE_FLY, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_STEEL_WING, + MOVE_SURF, + MOVE_THIEF, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sArrokudaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIVE, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_WATERFALL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sBarraskewdaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIVE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SURF, + MOVE_WATERFALL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sToxelTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sToxtricityTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSizzlipedeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_SUNNY_DAY, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCentiskorchTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sClobbopusTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIVE, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_TAUNT, + MOVE_WATERFALL, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_MEGA_PUNCH, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrapploctTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DIVE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_SURF, + MOVE_TAUNT, + MOVE_WATERFALL, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_MEGA_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSinisteaTeachableLearnset[] = { + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_ENDURE, + MOVE_METRONOME, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPolteageistTeachableLearnset[] = { + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_ENDURE, + MOVE_METRONOME, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHatennaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SKILL_SWAP, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHattremTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SKILL_SWAP, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sHattereneTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sImpidimpTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMorgremTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrimmsnarlTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sObstagoonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPerrserkerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCursolaTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSirfetchdTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMrRimeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRunerigusTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_ENDURE, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMilceryTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAlcremieTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_ENDURE, + MOVE_METRONOME, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFalinksTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPincurchinTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SURF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSnomTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFrosmothTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sStonjournerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sEiscueTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_FACADE, + MOVE_HAIL, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SURF, + MOVE_WATERFALL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sIndeedeeTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_ENDURE, + MOVE_METRONOME, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sMorpekoTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCufantTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_STRENGTH, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sCopperajahTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_ROCK_SLIDE, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDracozoltTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sArctozoltTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_FACADE, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDracovishTeachableLearnset[] = { + MOVE_DIVE, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SURF, + MOVE_WATERFALL, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sArctovishTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_DIVE, + MOVE_FACADE, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SURF, + MOVE_WATERFALL, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDuraludonTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SOLAR_BEAM, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDreepyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDrakloakTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIVE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_STEEL_WING, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDragapultTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIVE, + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SURF, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sZacianTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sZamazentaTeachableLearnset[] = { + MOVE_DIG, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SOLAR_BEAM, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sEternatusTeachableLearnset[] = { + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKubfuTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sUrshifuTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_TAUNT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sZarudeTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_BULLET_SEED, + MOVE_DIG, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sRegielekiTeachableLearnset[] = { + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SHOCK_WAVE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sRegidragoTeachableLearnset[] = { + MOVE_DRAGON_CLAW, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGlastrierTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_FACADE, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSpectrierTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_TAUNT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCalyrexTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_ENDURE, + MOVE_METRONOME, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sWyrdeerTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sKleavorTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sUrsalunaTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sBasculegionTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sSneaslerTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sOverqwilTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sEnamorusTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sRattataAlolanTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_CUT, + MOVE_DIG, + MOVE_FACADE, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sRaticateAlolanTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_BULK_UP, + MOVE_CUT, + MOVE_DIG, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sRaichuAlolanTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_FACADE, + MOVE_FLASH, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_STRENGTH, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sSandshrewAlolanTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sSandslashAlolanTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CUT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sVulpixAlolanTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_FACADE, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sNinetalesAlolanTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sDiglettAlolanTeachableLearnset[] = { + MOVE_CUT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_SLUDGE_BOMB, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sDugtrioAlolanTeachableLearnset[] = { + MOVE_CUT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_SLUDGE_BOMB, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sMeowthAlolanTeachableLearnset[] = { + MOVE_CUT, + MOVE_FACADE, + MOVE_FLASH, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_TAUNT, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sPersianAlolanTeachableLearnset[] = { + MOVE_CUT, + MOVE_FACADE, + MOVE_FLASH, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_TAUNT, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sGeodudeAlolanTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_EARTHQUAKE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_STRENGTH, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sGravelerAlolanTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_STRENGTH, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sGolemAlolanTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_STRENGTH, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrimerAlolanTeachableLearnset[] = { + MOVE_DIG, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_PROTECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sMukAlolanTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sExeggutorAlolanTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLAMETHROWER, + MOVE_FLASH, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_SOLAR_BEAM, + MOVE_SLUDGE_BOMB, + MOVE_STRENGTH, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sMarowakAlolanTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_SHADOW_BALL, + MOVE_STRENGTH, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sMeowthGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_FACADE, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPonytaGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sRapidashGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlowpokeGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DIVE, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HAIL, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlowbroGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DIVE, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFarfetchdGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_FURY_CUTTER, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWeezingGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HYPER_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_EXPLOSION, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMrMimeGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MIMIC, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sArticunoGalarianTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_FLY, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_STEEL_WING, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sZapdosGalarianTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_FACADE, + MOVE_FLY, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_STEEL_WING, + MOVE_TAUNT, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_MEGA_KICK, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sMoltresGalarianTeachableLearnset[] = { + MOVE_FACADE, + MOVE_FLY, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_STEEL_WING, + MOVE_TAUNT, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlowkingGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_DIVE, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLUDGE_BOMB, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCorsolaGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_CALM_MIND, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_WATER_PULSE, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sZigzagoonGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_FACADE, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLinooneGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_DIG, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDarumakaGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_DIG, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, + MOVE_ICE_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDarmanitanGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sYamaskGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_THIEF, + MOVE_ENDURE, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_UNAVAILABLE, +}; + +static const u16 sStunfiskGalarianTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SLUDGE_BOMB, + MOVE_SURF, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrowlitheHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sArcanineHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sVoltorbHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sElectrodeHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sTyphlosionHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sQwilfishHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sSneaselHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sSamurottHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sLilligantHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sZoruaHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sZoroarkHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sBraviaryHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sSliggooHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sGoodraHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sAvaluggHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sDecidueyeHisuianTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +#endif + +static const u16 sDeoxysAttackTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDeoxysDefenseTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDeoxysSpeedTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +#if P_NEW_POKEMON == TRUE + +static const u16 sBurmySandyCloakTeachableLearnset[] = { + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_SNORE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBurmyTrashCloakTeachableLearnset[] = { + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_SNORE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWormadamSandyCloakTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_MUD_SLAP, + MOVE_PSYCH_UP, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sWormadamTrashCloakTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SUNNY_DAY, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_UNAVAILABLE, +}; + +static const u16 sGiratinaOriginTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DOUBLE_TEAM, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FLY, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_SMASH, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sShayminSkyTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sFloetteEternalFlowerTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_HIDDEN_POWER, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sHoopaUnboundTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sMeowsticFemaleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_CUT, + MOVE_DIG, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_RETURN, + MOVE_SAFEGUARD, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_SUNNY_DAY, + MOVE_THUNDERBOLT, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_DREAM_EATER, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLycanrocMidnightTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sLycanrocDuskTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DOUBLE_TEAM, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HIDDEN_POWER, + MOVE_IRON_TAIL, + MOVE_PROTECT, + MOVE_REST, + MOVE_RETURN, + MOVE_ROAR, + MOVE_ROCK_TOMB, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_UNAVAILABLE, +}; + +static const u16 sToxtricityLowKeyTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_FACADE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_SHOCK_WAVE, + MOVE_SLUDGE_BOMB, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sIndeedeeFemaleTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_ENDURE, + MOVE_METRONOME, + MOVE_PSYCH_UP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +static const u16 sUrshifuRapidStrikeStyleTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_ATTRACT, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_DIG, + MOVE_DIVE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_TAUNT, + MOVE_WATERFALL, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_THUNDER_PUNCH, + MOVE_UNAVAILABLE, +}; + +static const u16 sCalyrexIceRiderTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_BULLET_SEED, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_ICY_WIND, + MOVE_METRONOME, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCalyrexShadowRiderTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_CALM_MIND, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_METRONOME, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_UNAVAILABLE, +}; + +#endif diff --git a/src/data/pokemon/tmhm_learnsets.h b/src/data/pokemon/tmhm_learnsets.h deleted file mode 100644 index 30d46d59c3..0000000000 --- a/src/data/pokemon/tmhm_learnsets.h +++ /dev/null @@ -1,24754 +0,0 @@ -#define TMHM_LEARNSET(moves) {(u32)(moves), ((u64)(moves) >> 32)} -#define TMHM(tmhm) ((u64)1 << (ITEM_##tmhm - ITEM_TM01_FOCUS_PUNCH)) - -// This table determines which TMs and HMs a species is capable of learning. -// Each entry is a 64-bit bit array spread across two 32-bit values, with -// each bit corresponding to a TM or HM. -const u32 gTMHMLearnsets[][2] = -{ - [SPECIES_NONE] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM26_EARTHQUAKE) - | TMHM(HM02_FLY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_BULBASAUR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_IVYSAUR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_VENUSAUR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHARMANDER] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHARMELEON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHARIZARD] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SQUIRTLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_WARTORTLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_BLASTOISE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CATERPIE] = TMHM_LEARNSET(0), - - [SPECIES_METAPOD] = TMHM_LEARNSET(0), - - [SPECIES_BUTTERFREE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_WEEDLE] = TMHM_LEARNSET(0), - - [SPECIES_KAKUNA] = TMHM_LEARNSET(0), - - [SPECIES_BEEDRILL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIDGEY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIDGEOTTO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIDGEOT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_RATTATA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_RATICATE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SPEAROW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FEAROW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_EKANS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ARBOK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_RAICHU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SANDSHREW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_SANDSLASH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_NIDORAN_F] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NIDORINA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NIDOQUEEN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NIDORAN_M] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NIDORINO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NIDOKING] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CLEFAIRY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CLEFABLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_VULPIX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_NINETALES] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_JIGGLYPUFF] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_WIGGLYTUFF] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ZUBAT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOLBAT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ODDISH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_GLOOM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_VILEPLUME] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_PARAS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PARASECT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VENONAT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VENOMOTH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_DIGLETT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_DUGTRIO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MEOWTH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PERSIAN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PSYDUCK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GOLDUCK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MANKEY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PRIMEAPE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GROWLITHE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_ARCANINE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_POLIWAG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_POLIWHIRL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_POLIWRATH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ABRA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KADABRA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ALAKAZAM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MACHOP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MACHOKE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MACHAMP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_BELLSPROUT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_WEEPINBELL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VICTREEBEL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_TENTACOOL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_TENTACRUEL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GEODUDE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_GRAVELER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOLEM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_PONYTA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_RAPIDASH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SLOWPOKE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SLOWBRO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MAGNEMITE] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAGNETON] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_FARFETCHD] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_DODUO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_DODRIO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SEEL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DEWGONG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GRIMER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MUK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHELLDER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CLOYSTER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GASTLY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HAUNTER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GENGAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ONIX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DROWZEE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HYPNO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KRABBY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_KINGLER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_VOLTORB] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ELECTRODE] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_EXEGGCUTE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_EXEGGUTOR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_CUBONE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAROWAK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_HITMONLEE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_HITMONCHAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_LICKITUNG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_KOFFING] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_WEEZING] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_RHYHORN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_RHYDON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHANSEY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_TANGELA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_KANGASKHAN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_HORSEA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SEADRA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GOLDEEN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SEAKING] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_STARYU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_STARMIE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MR_MIME] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SCYTHER] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_JYNX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ELECTABUZZ] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAGMAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PINSIR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_TAUROS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MAGIKARP] = TMHM_LEARNSET(0), - - [SPECIES_GYARADOS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LAPRAS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DITTO] = TMHM_LEARNSET(0), - - [SPECIES_EEVEE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_VAPOREON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_JOLTEON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLAREON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_PORYGON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_OMANYTE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_OMASTAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_KABUTO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_KABUTOPS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_AERODACTYL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SNORLAX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARTICUNO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ZAPDOS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MOLTRES] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_DRATINI] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DRAGONAIR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DRAGONITE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MEWTWO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MEW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CHIKORITA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_BAYLEEF] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_MEGANIUM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CYNDAQUIL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_QUILAVA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_TYPHLOSION] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_TOTODILE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CROCONAW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_FERALIGATR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SENTRET] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_FURRET] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_HOOTHOOT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_NOCTOWL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_LEDYBA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_LEDIAN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_SPINARAK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_ARIADOS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_CROBAT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHINCHOU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LANTURN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PICHU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CLEFFA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_IGGLYBUFF] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_TOGEPI] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_TOGETIC] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NATU] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_XATU] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAREEP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLAAFFY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_AMPHAROS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BELLOSSOM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_MARILL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_AZUMARILL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SUDOWOODO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_POLITOED] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_HOPPIP] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SKIPLOOM] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_JUMPLUFF] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_AIPOM] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SUNKERN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SUNFLORA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_YANMA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_WOOPER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_QUAGSIRE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ESPEON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_UMBREON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MURKROW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SLOWKING] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MISDREAVUS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_UNOWN] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_WOBBUFFET] = TMHM_LEARNSET(TMHM(TM20_SAFEGUARD)), - - [SPECIES_GIRAFARIG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PINECO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FORRETRESS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_DUNSPARCE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GLIGAR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_STEELIX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SNUBBULL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GRANBULL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_QWILFISH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SCIZOR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHUCKLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_HERACROSS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_SNEASEL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TEDDIURSA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_URSARING] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SLUGMA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAGCARGO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SWINUB] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_PILOSWINE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_CORSOLA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_REMORAID] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_OCTILLERY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DELIBIRD] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MANTINE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SKARMORY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HOUNDOUR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HOUNDOOM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KINGDRA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PHANPY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_DONPHAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_PORYGON2] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_STANTLER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SMEARGLE] = TMHM_LEARNSET(TMHM(TM35_FLAMETHROWER)), - - [SPECIES_TYROGUE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_HITMONTOP] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_SMOOCHUM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ELEKID] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAGBY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MILTANK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_BLISSEY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_RAIKOU] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ENTEI] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SUICUNE] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LARVITAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PUPITAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TYRANITAR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LUGIA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_HO_OH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CELEBI] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_TREECKO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_GROVYLE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SCEPTILE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_TORCHIC] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_COMBUSKEN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_BLAZIKEN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_MUDKIP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MARSHTOMP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SWAMPERT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_POOCHYENA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MIGHTYENA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZIGZAGOON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LINOONE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_WURMPLE] = TMHM_LEARNSET(0), - - [SPECIES_SILCOON] = TMHM_LEARNSET(0), - - [SPECIES_BEAUTIFLY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_CASCOON] = TMHM_LEARNSET(0), - - [SPECIES_DUSTOX] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_LOTAD] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LOMBRE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LUDICOLO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SEEDOT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_NUZLEAF] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHIFTRY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TAILLOW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_SWELLOW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_WINGULL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM47_STEEL_WING) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PELIPPER] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM47_STEEL_WING) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_RALTS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KIRLIA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GARDEVOIR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SURSKIT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MASQUERAIN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SHROOMISH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_BRELOOM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SLAKOTH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_VIGOROTH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SLAKING] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NINCADA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_NINJASK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHEDINJA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_WHISMUR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LOUDRED] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_EXPLOUD] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MAKUHITA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_HARIYAMA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_AZURILL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NOSEPASS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SKITTY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DELCATTY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SABLEYE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MAWILE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ARON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LAIRON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_AGGRON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MEDITITE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_MEDICHAM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_ELECTRIKE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MANECTRIC] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PLUSLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MINUN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_VOLBEAT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ILLUMISE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ROSELIA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_GULPIN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SWALOT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CARVANHA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SHARPEDO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_WAILMER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_WAILORD] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NUMEL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CAMERUPT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_TORKOAL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SPOINK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GRUMPIG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SPINDA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_TRAPINCH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIBRAVA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLYGON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CACNEA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CACTURNE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SWABLU] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_ALTARIA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZANGOOSE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SEVIPER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_LUNATONE] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM06_TOXIC)), - - [SPECIES_SOLROCK] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_BARBOACH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_WHISCASH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CORPHISH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CRAWDAUNT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_BALTOY] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CLAYDOL] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_LILEEP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CRADILY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_ANORITH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARMALDO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_FEEBAS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MILOTIC] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CASTFORM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_KECLEON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SHUPPET] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BANETTE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DUSKULL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DUSCLOPS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TROPIUS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHIMECHO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ABSOL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_WYNAUT] = TMHM_LEARNSET(TMHM(TM20_SAFEGUARD)), - - [SPECIES_SNORUNT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GLALIE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SPHEAL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SEALEO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_WALREIN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CLAMPERL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_HUNTAIL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GOREBYSS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_RELICANTH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LUVDISC] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_BAGON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHELGON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SALAMENCE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_BELDUM] = TMHM_LEARNSET(0), - - [SPECIES_METANG] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_METAGROSS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_REGIROCK] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_REGICE] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_REGISTEEL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LATIAS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LATIOS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_KYOGRE] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GROUDON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_RAYQUAZA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_JIRACHI] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DEOXYS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_TURTWIG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_GROTLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_TORTERRA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHIMCHAR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MONFERNO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_INFERNAPE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIPLUP] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PRINPLUP] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_EMPOLEON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_STARLY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_STARAVIA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_STARAPTOR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_BIDOOF] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BIBAREL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_KRICKETOT] = TMHM_LEARNSET(0), - - [SPECIES_KRICKETUNE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHINX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LUXIO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LUXRAY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BUDEW] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_ROSERADE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CRANIDOS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_RAMPARDOS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHIELDON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BASTIODON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BURMY] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT)), - - [SPECIES_WORMADAM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MOTHIM] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_COMBEE] = TMHM_LEARNSET(0), - - [SPECIES_VESPIQUEN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PACHIRISU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BUIZEL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_FLOATZEL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CHERUBI] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHERRIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHELLOS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GASTRODON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_AMBIPOM] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DRIFLOON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DRIFBLIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BUNEARY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LOPUNNY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MISMAGIUS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HONCHKROW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GLAMEOW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PURUGLY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CHINGLING] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_STUNKY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SKUNTANK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BRONZOR] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_BRONZONG] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_BONSLY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MIME_JR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HAPPINY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CHATOT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SPIRITOMB] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GIBLE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_GABITE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_GARCHOMP] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MUNCHLAX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_RIOLU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_LUCARIO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_HIPPOPOTAS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_HIPPOWDON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SKORUPI] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DRAPION] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CROAGUNK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TOXICROAK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CARNIVINE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FINNEON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_LUMINEON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MANTYKE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SNOVER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ABOMASNOW] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_WEAVILE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAGNEZONE] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LICKILICKY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_RHYPERIOR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TANGROWTH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_ELECTIVIRE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAGMORTAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TOGEKISS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_YANMEGA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_LEAFEON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_GLACEON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GLISCOR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAMOSWINE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_PORYGON_Z] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GALLADE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PROBOPASS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DUSKNOIR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_FROSLASS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ROTOM] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_UXIE] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MESPRIT] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_AZELF] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DIALGA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PALKIA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_HEATRAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_REGIGIGAS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GIRATINA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CRESSELIA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_PHIONE] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MANAPHY] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DARKRAI] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHAYMIN] = TMHM_LEARNSET(TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_ARCEUS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_VICTINI] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SNIVY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SERVINE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SERPERIOR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TEPIG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIGNITE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_EMBOAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_OSHAWOTT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DEWOTT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SAMUROTT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PATRAT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_WATCHOG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LILLIPUP] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HERDIER] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_STOUTLAND] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PURRLOIN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LIEPARD] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PANSAGE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SIMISAGE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PANSEAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SIMISEAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PANPOUR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SIMIPOUR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MUNNA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MUSHARNA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIDOVE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TRANQUILL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_UNFEZANT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BLITZLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZEBSTRIKA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ROGGENROLA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_BOLDORE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_GIGALITH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_WOOBAT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SWOOBAT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DRILBUR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_EXCADRILL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_AUDINO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TIMBURR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GURDURR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CONKELDURR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TYMPOLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PALPITOAD] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SEISMITOAD] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_THROH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SAWK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SEWADDLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SWADLOON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_LEAVANNY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_VENIPEDE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_WHIRLIPEDE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SCOLIPEDE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_COTTONEE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_WHIMSICOTT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PETILIL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_LILLIGANT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_BASCULIN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL)), - - [SPECIES_SANDILE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KROKOROK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KROOKODILE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DARUMAKA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_DARMANITAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MARACTUS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_DWEBBLE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_CRUSTLE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_SCRAGGY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SCRAFTY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SIGILYPH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_YAMASK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_COFAGRIGUS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_TIRTOUGA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CARRACOSTA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCHEN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ARCHEOPS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TRUBBISH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_GARBODOR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZORUA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZOROARK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MINCCINO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CINCCINO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOTHITA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOTHORITA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOTHITELLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SOLOSIS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_DUOSION] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_REUNICLUS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_DUCKLETT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SWANNA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_VANILLITE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_VANILLISH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_VANILLUXE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DEERLING] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SAWSBUCK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_EMOLGA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KARRABLAST] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM06_TOXIC)), - - [SPECIES_ESCAVALIER] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM06_TOXIC)), - - [SPECIES_FOONGUS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_AMOONGUSS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FRILLISH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_JELLICENT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ALOMOMOLA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_JOLTIK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GALVANTULA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_FERROSEED] = TMHM_LEARNSET(TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_FERROTHORN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KLINK] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KLANG] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KLINKLANG] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TYNAMO] = TMHM_LEARNSET(0), - - [SPECIES_EELEKTRIK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_EELEKTROSS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ELGYEM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BEHEEYEM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LITWICK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_LAMPENT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHANDELURE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_AXEW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_FRAXURE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HAXORUS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CUBCHOO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_BEARTIC] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CRYOGONAL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SHELMET] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM06_TOXIC)), - - [SPECIES_ACCELGOR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM06_TOXIC)), - - [SPECIES_STUNFISK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MIENFOO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MIENSHAO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DRUDDIGON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOLETT] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOLURK] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PAWNIARD] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BISHARP] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BOUFFALANT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_RUFFLET] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_BRAVIARY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_VULLABY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MANDIBUZZ] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HEATMOR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_DURANT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_DEINO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZWEILOUS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HYDREIGON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LARVESTA] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_VOLCARONA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_COBALION] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TERRAKION] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIRIZION] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TORNADUS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_THUNDURUS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_RESHIRAM] = TMHM_LEARNSET(TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZEKROM] = TMHM_LEARNSET(TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LANDORUS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_KYUREM] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_KELDEO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MELOETTA] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GENESECT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHESPIN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_QUILLADIN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHESNAUGHT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_FENNEKIN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_BRAIXEN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_DELPHOX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FROAKIE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_FROGADIER] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GRENINJA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_BUNNELBY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DIGGERSBY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLETCHLING] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLETCHINDER] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_TALONFLAME] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_SCATTERBUG] = TMHM_LEARNSET(0), - - [SPECIES_SPEWPA] = TMHM_LEARNSET(TMHM(TM17_PROTECT)), - - [SPECIES_VIVILLON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_LITLEO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PYROAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLABEBE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLOETTE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLORGES] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SKIDDO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOGOAT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PANCHAM] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PANGORO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_FURFROU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_ESPURR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MEOWSTIC] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HONEDGE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM06_TOXIC)), - - [SPECIES_DOUBLADE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM06_TOXIC)), - - [SPECIES_AEGISLASH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SPRITZEE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_AROMATISSE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SWIRLIX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SLURPUFF] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_INKAY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MALAMAR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BINACLE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_BARBARACLE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SKRELP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DRAGALGE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CLAUNCHER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CLAWITZER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_HELIOPTILE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HELIOLISK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TYRUNT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_TYRANTRUM] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_AMAURA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_AURORUS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SYLVEON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_HAWLUCHA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_DEDENNE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CARBINK] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOOMY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SLIGGOO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GOODRA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_KLEFKI] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PHANTUMP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_TREVENANT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PUMPKABOO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOURGEIST] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_BERGMITE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_AVALUGG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NOIBAT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_NOIVERN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_XERNEAS] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_YVELTAL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZYGARDE] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_DIANCIE] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_HOOPA] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_VOLCANION] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ROWLET] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_DARTRIX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_DECIDUEYE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_LITTEN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TORRACAT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_INCINEROAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_POPPLIO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_BRIONNE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PRIMARINA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_PIKIPEK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_TRUMBEAK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_TOUCANNON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_YUNGOOS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GUMSHOOS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GRUBBIN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CHARJABUG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIKAVOLT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CRABRAWLER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_CRABOMINABLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_ORICORIO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CUTIEFLY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_RIBOMBEE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_ROCKRUFF] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LYCANROC] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_WISHIWASHI] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MAREANIE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_TOXAPEX] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_MUDBRAY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM06_TOXIC)), - - [SPECIES_MUDSDALE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM06_TOXIC)), - - [SPECIES_DEWPIDER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARAQUANID] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_FOMANTIS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_LURANTIS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_MORELULL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHIINOTIC] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SALANDIT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SALAZZLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_STUFFUL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BEWEAR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BOUNSWEET] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_STEENEE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_TSAREENA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_COMFEY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_ORANGURU] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PASSIMIAN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_WIMPOD] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL)), - - [SPECIES_GOLISOPOD] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SANDYGAST] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM06_TOXIC)), - - [SPECIES_PALOSSAND] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM06_TOXIC)), - - [SPECIES_PYUKUMUKU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM07_HAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TYPE_NULL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MINIOR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC)), - - [SPECIES_KOMALA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM27_RETURN) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_TURTONATOR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TOGEDEMARU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MIMIKYU] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BRUXISH] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM49_SNATCH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DRAMPA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DHELMISE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_JANGMO_O] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_HAKAMO_O] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_KOMMO_O] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_TAPU_KOKO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TAPU_LELE] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TAPU_BULU] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_TAPU_FINI] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_COSMOG] = TMHM_LEARNSET(0), - - [SPECIES_COSMOEM] = TMHM_LEARNSET(0), - - [SPECIES_SOLGALEO] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LUNALA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_NIHILEGO] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_BUZZWOLE] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PHEROMOSA] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_XURKITREE] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_CELESTEELA] = TMHM_LEARNSET(TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC)), - - [SPECIES_KARTANA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM06_TOXIC)), - - [SPECIES_GUZZLORD] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_NECROZMA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAGEARNA] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_MARSHADOW] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM49_SNATCH) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_POIPOLE] = TMHM_LEARNSET(TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM06_TOXIC)), - - [SPECIES_NAGANADEL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM49_SNATCH) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_STAKATAKA] = TMHM_LEARNSET(TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM06_TOXIC)), - - [SPECIES_BLACEPHALON] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZERAORA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM49_SNATCH) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - //TMs of LGPE don't match with USUM - [SPECIES_MELTAN] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_MELMETAL] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_GROOKEY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT)), - - [SPECIES_THWACKEY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT)), - - [SPECIES_RILLABOOM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT)), - - [SPECIES_SCORBUNNY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT)), - - [SPECIES_RABOOT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT)), - - [SPECIES_CINDERACE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT)), - - [SPECIES_SOBBLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(HM03_SURF) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DRIZZILE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(HM03_SURF) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_INTELEON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SKWOVET] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF)), - - [SPECIES_GREEDENT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF)), - - [SPECIES_ROOKIDEE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF)), - - [SPECIES_CORVISQUIRE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF)), - - [SPECIES_CORVIKNIGHT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF)), - - [SPECIES_BLIPBUG] = TMHM_LEARNSET(0), - - [SPECIES_DOTTLER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_ORBEETLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_NICKIT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT)), - - [SPECIES_THIEVUL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF)), - - [SPECIES_GOSSIFLEUR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY)), - - [SPECIES_ELDEGOSS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY)), - - [SPECIES_WOOLOO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST)), - - [SPECIES_DUBWOOL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST)), - - [SPECIES_CHEWTLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(HM03_SURF)), - - [SPECIES_DREDNAW] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_YAMPER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM05_ROAR) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_BOLTUND] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM05_ROAR) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_ROLYCOLY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM)), - - [SPECIES_CARKOL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM)), - - [SPECIES_COALOSSAL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_APPLIN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT)), - - [SPECIES_FLAPPLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY)), - - [SPECIES_APPLETUN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY)), - - [SPECIES_SILICOBRA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM37_SANDSTORM)), - - [SPECIES_SANDACONDA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM)), - - [SPECIES_CRAMORANT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF)), - - [SPECIES_ARROKUDA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(HM07_WATERFALL)), - - [SPECIES_BARRASKEWDA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_TOXEL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST)), - - [SPECIES_TOXTRICITY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SIZZLIPEDE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM11_SUNNY_DAY)), - - [SPECIES_CENTISKORCH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY)), - - [SPECIES_CLOBBOPUS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM12_TAUNT) - | TMHM(HM07_WATERFALL)), - - [SPECIES_GRAPPLOCT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(HM07_WATERFALL)), - - [SPECIES_SINISTEA] = TMHM_LEARNSET(TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL)), - - [SPECIES_POLTEAGEIST] = TMHM_LEARNSET(TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL)), - - [SPECIES_HATENNA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM48_SKILL_SWAP)), - - [SPECIES_HATTREM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM48_SKILL_SWAP)), - - [SPECIES_HATTERENE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP)), - - [SPECIES_IMPIDIMP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT)), - - [SPECIES_MORGREM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT)), - - [SPECIES_GRIMMSNARL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT)), - - [SPECIES_OBSTAGOON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_PERRSERKER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_CURSOLA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF)), - - [SPECIES_SIRFETCHD] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY)), - - [SPECIES_MR_RIME] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM07_HAIL) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_RUNERIGUS] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF)), - - [SPECIES_MILCERY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST)), - - [SPECIES_ALCREMIE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_FALINKS] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB)), - - [SPECIES_PINCURCHIN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_SNOM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST)), - - [SPECIES_FROSMOTH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD)), - - [SPECIES_STONJOURNER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM)), - - [SPECIES_EISCUE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM07_HAIL) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_INDEEDEE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL)), - - [SPECIES_MORPEKO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT)), - - [SPECIES_CUFANT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(HM04_STRENGTH)), - - [SPECIES_COPPERAJAH] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT)), - - [SPECIES_DRACOZOLT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_ARCTOZOLT] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM42_FACADE) - | TMHM(TM07_HAIL) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_DRACOVISH] = TMHM_LEARNSET(TMHM(HM08_DIVE) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_ARCTOVISH] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM07_HAIL) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_DURALUDON] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_DREEPY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST)), - - [SPECIES_DRAKLOAK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_DRAGAPULT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM08_DIVE) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM47_STEEL_WING) - | TMHM(HM03_SURF) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_ZACIAN] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST)), - - [SPECIES_ZAMAZENTA] = TMHM_LEARNSET(TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_ETERNATUS] = TMHM_LEARNSET(TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM02_FLY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC)), - - [SPECIES_KUBFU] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_URSHIFU] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM12_TAUNT)), - - [SPECIES_ZARUDE] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF)), - - [SPECIES_REGIELEKI] = TMHM_LEARNSET(TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_REGIDRAGO] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST)), - - [SPECIES_GLASTRIER] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM42_FACADE) - | TMHM(TM07_HAIL) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT)), - - [SPECIES_SPECTRIER] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM12_TAUNT)), - - [SPECIES_CALYREX] = TMHM_LEARNSET(TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY)), - - [SPECIES_RATTATA_ALOLAN] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_RATICATE_ALOLAN] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM08_BULK_UP) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_RAICHU_ALOLAN] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM04_STRENGTH) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_SANDSHREW_ALOLAN] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_SANDSLASH_ALOLAN] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_VULPIX_ALOLAN] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM06_TOXIC)), - - [SPECIES_NINETALES_ALOLAN] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM06_TOXIC)), - - [SPECIES_DIGLETT_ALOLAN] = TMHM_LEARNSET(TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM06_TOXIC)), - - [SPECIES_DUGTRIO_ALOLAN] = TMHM_LEARNSET(TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM06_TOXIC)), - - [SPECIES_MEOWTH_ALOLAN] = TMHM_LEARNSET(TMHM(HM01_CUT) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM12_TAUNT) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_PERSIAN_ALOLAN] = TMHM_LEARNSET(TMHM(HM01_CUT) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM12_TAUNT) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_GEODUDE_ALOLAN] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM04_STRENGTH) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_GRAVELER_ALOLAN] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM04_STRENGTH) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOLEM_ALOLAN] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM04_STRENGTH) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_GRIMER_ALOLAN] = TMHM_LEARNSET(TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MUK_ALOLAN] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_EXEGGUTOR_ALOLAN] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAROWAK_ALOLAN] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM30_SHADOW_BALL) - | TMHM(HM04_STRENGTH) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM06_TOXIC)), - - [SPECIES_MEOWTH_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_PONYTA_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST)), - - [SPECIES_RAPIDASH_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST)), - - [SPECIES_SLOWPOKE_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM07_HAIL) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_SLOWBRO_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM07_HAIL) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_FARFETCHD_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY)), - - [SPECIES_WEEZING_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MR_MIME_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM07_HAIL) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_ARTICUNO_GALARIAN] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM47_STEEL_WING)), - - [SPECIES_ZAPDOS_GALARIAN] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT)), - - [SPECIES_MOLTRES_GALARIAN] = TMHM_LEARNSET(TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT)), - - [SPECIES_SLOWKING_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM07_HAIL) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_CORSOLA_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ZIGZAGOON_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_LINOONE_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_DARUMAKA_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF)), - - [SPECIES_DARMANITAN_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF)), - - [SPECIES_YAMASK_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM46_THIEF)), - - [SPECIES_STUNFISK_GALARIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM03_SURF)), - - [SPECIES_PIKACHU_COSPLAY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_ROCK_STAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_BELLE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_POP_STAR] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_PH_D] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_LIBRE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_ORIGINAL_CAP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_HOENN_CAP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_SINNOH_CAP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_UNOVA_CAP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_KALOS_CAP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_ALOLA_CAP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PIKACHU_PARTNER_CAP] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PICHU_SPIKY_EARED] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_UNOWN_B] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_C] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_D] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_E] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_F] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_G] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_H] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_I] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_J] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_K] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_L] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_M] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_N] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_O] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_P] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_Q] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_R] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_S] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_T] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_U] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_V] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_W] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_X] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_Y] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_Z] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_EMARK] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_UNOWN_QMARK] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)), - - [SPECIES_DEOXYS_ATTACK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DEOXYS_DEFENSE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_DEOXYS_SPEED] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_BURMY_SANDY_CLOAK] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT)), - - [SPECIES_BURMY_TRASH_CLOAK] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT)), - - [SPECIES_WORMADAM_SANDY_CLOAK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_WORMADAM_TRASH_CLOAK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHELLOS_EAST_SEA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GASTRODON_EAST_SEA] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ROTOM_HEAT] = TMHM_LEARNSET(TMHM(TM50_OVERHEAT)), - - [SPECIES_ROTOM_WASH] = TMHM_LEARNSET(0), - - [SPECIES_ROTOM_FROST] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD)), - - [SPECIES_ROTOM_FAN] = TMHM_LEARNSET(0), - - [SPECIES_ROTOM_MOW] = TMHM_LEARNSET(0), - - [SPECIES_GIRATINA_ORIGIN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SHAYMIN_SKY] = TMHM_LEARNSET(TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_ARCEUS_FIGHTING] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_FLYING] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_POISON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_GROUND] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_ROCK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_BUG] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_GHOST] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_STEEL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_FIRE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_WATER] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_GRASS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_ELECTRIC] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_PSYCHIC] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_ICE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_DRAGON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_DARK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_ARCEUS_FAIRY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM50_OVERHEAT) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_BASCULIN_BLUE_STRIPED] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL)), - - [SPECIES_DEERLING_SUMMER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_DEERLING_AUTUMN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_DEERLING_WINTER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SAWSBUCK_SUMMER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SAWSBUCK_AUTUMN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_SAWSBUCK_WINTER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_TORNADUS_THERIAN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_THUNDURUS_THERIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LANDORUS_THERIAN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM04_CALM_MIND) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(HM04_STRENGTH) - | TMHM(TM06_TOXIC)), - - [SPECIES_KYUREM_WHITE] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_KYUREM_BLACK] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_KELDEO_RESOLUTE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_GENESECT_DOUSE_DRIVE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GENESECT_SHOCK_DRIVE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GENESECT_BURN_DRIVE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GENESECT_CHILL_DRIVE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM14_BLIZZARD) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_GRENINJA_BATTLE_BOND] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM14_BLIZZARD) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM03_SURF) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC) - | TMHM(HM07_WATERFALL) - | TMHM(TM03_WATER_PULSE)), - - [SPECIES_VIVILLON_POLAR] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_TUNDRA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_CONTINENTAL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_GARDEN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_ELEGANT] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_MEADOW] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_MODERN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_MARINE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_ARCHIPELAGO] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_HIGH_PLAINS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_SANDSTORM] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_RIVER] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_MONSOON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_SAVANNA] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_SUN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_OCEAN] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_JUNGLE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_FANCY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_VIVILLON_POKE_BALL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLABEBE_YELLOW_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLABEBE_ORANGE_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLABEBE_BLUE_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLABEBE_WHITE_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLOETTE_YELLOW_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLOETTE_ORANGE_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLOETTE_BLUE_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLOETTE_WHITE_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLOETTE_ETERNAL_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLORGES_YELLOW_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLORGES_ORANGE_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLORGES_BLUE_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FLORGES_WHITE_FLOWER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_FURFROU_HEART_TRIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FURFROU_STAR_TRIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FURFROU_DIAMOND_TRIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FURFROU_DEBUTANTE_TRIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FURFROU_MATRON_TRIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FURFROU_DANDY_TRIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FURFROU_LA_REINE_TRIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FURFROU_KABUKI_TRIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_FURFROU_PHARAOH_TRIM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MEOWSTIC_FEMALE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(HM01_CUT) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_PUMPKABOO_SMALL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PUMPKABOO_LARGE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_PUMPKABOO_SUPER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOURGEIST_SMALL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOURGEIST_LARGE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_GOURGEIST_SUPER] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM35_FLAMETHROWER) - | TMHM(HM05_FLASH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZYGARDE_10] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_ZYGARDE_COMPLETE] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(HM04_STRENGTH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM06_TOXIC)), - - [SPECIES_HOOPA_UNBOUND] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM05_FLASH) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM41_TORMENT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ORICORIO_POM_POM] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ORICORIO_PAU] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ORICORIO_SENSU] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(HM02_FLY) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM47_STEEL_WING) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_ROCKRUFF_OWN_TEMPO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LYCANROC_MIDNIGHT] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_LYCANROC_DUSK] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_FIGHTING] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_FLYING] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_POISON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_GROUND] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_ROCK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_BUG] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_GHOST] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_STEEL] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_FIRE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_WATER] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_GRASS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_ELECTRIC] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_PSYCHIC] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_ICE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_DRAGON] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_DARK] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SILVALLY_FAIRY] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM42_FACADE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM05_ROAR) - | TMHM(TM37_SANDSTORM) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM47_STEEL_WING) - | TMHM(TM11_SUNNY_DAY) - | TMHM(HM03_SURF) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_MINIOR_CORE_RED] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC)), - - [SPECIES_MINIOR_CORE_ORANGE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC)), - - [SPECIES_MINIOR_CORE_YELLOW] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC)), - - [SPECIES_MINIOR_CORE_GREEN] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC)), - - [SPECIES_MINIOR_CORE_BLUE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC)), - - [SPECIES_MINIOR_CORE_INDIGO] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC)), - - [SPECIES_MINIOR_CORE_VIOLET] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM37_SANDSTORM) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM06_TOXIC)), - - [SPECIES_NECROZMA_DUSK_MANE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_NECROZMA_DAWN_WINGS] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM42_FACADE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM27_RETURN) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM46_THIEF) - | TMHM(TM06_TOXIC)), - - [SPECIES_MAGEARNA_ORIGINAL_COLOR] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM04_CALM_MIND) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM33_REFLECT) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM24_THUNDERBOLT)), - - [SPECIES_TOXTRICITY_LOW_KEY] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM42_FACADE) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM12_TAUNT) - | TMHM(TM25_THUNDER) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM06_TOXIC)), - - [SPECIES_SINISTEA_ANTIQUE] = TMHM_LEARNSET(TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL)), - - [SPECIES_POLTEAGEIST_ANTIQUE] = TMHM_LEARNSET(TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM30_SHADOW_BALL)), - - [SPECIES_ALCREMIE_RUBY_CREAM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_ALCREMIE_MATCHA_CREAM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_ALCREMIE_MINT_CREAM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_ALCREMIE_LEMON_CREAM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_ALCREMIE_SALTED_CREAM] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_ALCREMIE_RUBY_SWIRL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM22_SOLARBEAM)), - - [SPECIES_INDEEDEE_FEMALE] = TMHM_LEARNSET(TMHM(TM45_ATTRACT) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL)), - - [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = TMHM_LEARNSET(TMHM(TM40_AERIAL_ACE) - | TMHM(TM45_ATTRACT) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM28_DIG) - | TMHM(HM08_DIVE) - | TMHM(TM42_FACADE) - | TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM44_REST) - | TMHM(HM06_ROCK_SMASH) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM12_TAUNT) - | TMHM(HM07_WATERFALL)), - - [SPECIES_ZARUDE_DADA] = TMHM_LEARNSET(TMHM(TM31_BRICK_BREAK) - | TMHM(TM08_BULK_UP) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM28_DIG) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM17_PROTECT) - | TMHM(TM44_REST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM46_THIEF)), - - [SPECIES_CALYREX_ICE_RIDER] = TMHM_LEARNSET(TMHM(TM14_BLIZZARD) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM07_HAIL) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM41_TORMENT)), - - [SPECIES_CALYREX_SHADOW_RIDER] = TMHM_LEARNSET(TMHM(TM09_BULLET_SEED) - | TMHM(TM04_CALM_MIND) - | TMHM(TM42_FACADE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM29_PSYCHIC) - | TMHM(TM33_REFLECT) - | TMHM(TM44_REST) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM22_SOLARBEAM) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT)), -}; diff --git a/src/data/pokemon/trainer_class_lookups.h b/src/data/pokemon/trainer_class_lookups.h index 2edefb274c..909d3d7dcb 100644 --- a/src/data/pokemon/trainer_class_lookups.h +++ b/src/data/pokemon/trainer_class_lookups.h @@ -145,13 +145,13 @@ const u8 gFacilityClassToTrainerClass[] = [FACILITY_CLASS_SWIMMER_F] = TRAINER_CLASS_SWIMMER_F, [FACILITY_CLASS_TWINS] = TRAINER_CLASS_TWINS, [FACILITY_CLASS_SAILOR] = TRAINER_CLASS_SAILOR, - [FACILITY_CLASS_WALLY] = TRAINER_CLASS_PKMN_TRAINER_3, - [FACILITY_CLASS_BRENDAN] = TRAINER_CLASS_PKMN_TRAINER_3, - [FACILITY_CLASS_BRENDAN_2] = TRAINER_CLASS_PKMN_TRAINER_3, - [FACILITY_CLASS_BRENDAN_3] = TRAINER_CLASS_PKMN_TRAINER_3, - [FACILITY_CLASS_MAY] = TRAINER_CLASS_PKMN_TRAINER_3, - [FACILITY_CLASS_MAY_2] = TRAINER_CLASS_PKMN_TRAINER_3, - [FACILITY_CLASS_MAY_3] = TRAINER_CLASS_PKMN_TRAINER_3, + [FACILITY_CLASS_WALLY] = TRAINER_CLASS_RIVAL, + [FACILITY_CLASS_BRENDAN] = TRAINER_CLASS_RIVAL, + [FACILITY_CLASS_BRENDAN_2] = TRAINER_CLASS_RIVAL, + [FACILITY_CLASS_BRENDAN_3] = TRAINER_CLASS_RIVAL, + [FACILITY_CLASS_MAY] = TRAINER_CLASS_RIVAL, + [FACILITY_CLASS_MAY_2] = TRAINER_CLASS_RIVAL, + [FACILITY_CLASS_MAY_3] = TRAINER_CLASS_RIVAL, [FACILITY_CLASS_PKMN_BREEDER_M] = TRAINER_CLASS_PKMN_BREEDER, [FACILITY_CLASS_BUG_CATCHER] = TRAINER_CLASS_BUG_CATCHER, [FACILITY_CLASS_PKMN_RANGER_M] = TRAINER_CLASS_PKMN_RANGER, @@ -161,11 +161,11 @@ const u8 gFacilityClassToTrainerClass[] = [FACILITY_CLASS_YOUNG_COUPLE] = TRAINER_CLASS_YOUNG_COUPLE, [FACILITY_CLASS_OLD_COUPLE] = TRAINER_CLASS_OLD_COUPLE, [FACILITY_CLASS_SIS_AND_BRO] = TRAINER_CLASS_SIS_AND_BRO, - [FACILITY_CLASS_STEVEN] = TRAINER_CLASS_PKMN_TRAINER_3, + [FACILITY_CLASS_STEVEN] = TRAINER_CLASS_RIVAL, [FACILITY_CLASS_SALON_MAIDEN_ANABEL] = TRAINER_CLASS_SALON_MAIDEN, [FACILITY_CLASS_DOME_ACE_TUCKER] = TRAINER_CLASS_DOME_ACE, - [FACILITY_CLASS_RED] = TRAINER_CLASS_PKMN_TRAINER_3, - [FACILITY_CLASS_LEAF] = TRAINER_CLASS_PKMN_TRAINER_3, + [FACILITY_CLASS_RED] = TRAINER_CLASS_RIVAL, + [FACILITY_CLASS_LEAF] = TRAINER_CLASS_RIVAL, [FACILITY_CLASS_RS_BRENDAN] = TRAINER_CLASS_RS_PROTAG, [FACILITY_CLASS_RS_MAY] = TRAINER_CLASS_RS_PROTAG, }; diff --git a/src/data/pokemon/tutor_learnsets.h b/src/data/pokemon/tutor_learnsets.h deleted file mode 100644 index 0e63c8d58f..0000000000 --- a/src/data/pokemon/tutor_learnsets.h +++ /dev/null @@ -1,10598 +0,0 @@ -const u16 gTutorMoves[] = -{ - [TUTOR_MOVE_MEGA_PUNCH] = MOVE_MEGA_PUNCH, - [TUTOR_MOVE_SWORDS_DANCE] = MOVE_SWORDS_DANCE, - [TUTOR_MOVE_MEGA_KICK] = MOVE_MEGA_KICK, - [TUTOR_MOVE_BODY_SLAM] = MOVE_BODY_SLAM, - [TUTOR_MOVE_DOUBLE_EDGE] = MOVE_DOUBLE_EDGE, - [TUTOR_MOVE_COUNTER] = MOVE_COUNTER, - [TUTOR_MOVE_SEISMIC_TOSS] = MOVE_SEISMIC_TOSS, - [TUTOR_MOVE_MIMIC] = MOVE_MIMIC, - [TUTOR_MOVE_METRONOME] = MOVE_METRONOME, - [TUTOR_MOVE_SOFT_BOILED] = MOVE_SOFT_BOILED, - [TUTOR_MOVE_DREAM_EATER] = MOVE_DREAM_EATER, - [TUTOR_MOVE_THUNDER_WAVE] = MOVE_THUNDER_WAVE, - [TUTOR_MOVE_EXPLOSION] = MOVE_EXPLOSION, - [TUTOR_MOVE_ROCK_SLIDE] = MOVE_ROCK_SLIDE, - [TUTOR_MOVE_SUBSTITUTE] = MOVE_SUBSTITUTE, - [TUTOR_MOVE_DYNAMIC_PUNCH] = MOVE_DYNAMIC_PUNCH, - [TUTOR_MOVE_ROLLOUT] = MOVE_ROLLOUT, - [TUTOR_MOVE_PSYCH_UP] = MOVE_PSYCH_UP, - [TUTOR_MOVE_SNORE] = MOVE_SNORE, - [TUTOR_MOVE_ICY_WIND] = MOVE_ICY_WIND, - [TUTOR_MOVE_ENDURE] = MOVE_ENDURE, - [TUTOR_MOVE_MUD_SLAP] = MOVE_MUD_SLAP, - [TUTOR_MOVE_ICE_PUNCH] = MOVE_ICE_PUNCH, - [TUTOR_MOVE_SWAGGER] = MOVE_SWAGGER, - [TUTOR_MOVE_SLEEP_TALK] = MOVE_SLEEP_TALK, - [TUTOR_MOVE_SWIFT] = MOVE_SWIFT, - [TUTOR_MOVE_DEFENSE_CURL] = MOVE_DEFENSE_CURL, - [TUTOR_MOVE_THUNDER_PUNCH] = MOVE_THUNDER_PUNCH, - [TUTOR_MOVE_FIRE_PUNCH] = MOVE_FIRE_PUNCH, - [TUTOR_MOVE_FURY_CUTTER] = MOVE_FURY_CUTTER, -}; - -#define TUTOR_LEARNSET(moves) ((u32)(moves)) -#define TUTOR(move) ((u64)1 << (TUTOR_##move)) - -static const u32 sTutorLearnsets[] = -{ - [SPECIES_NONE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BULBASAUR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_IVYSAUR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_VENUSAUR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CHARMANDER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CHARMELEON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CHARIZARD] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SQUIRTLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_WARTORTLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BLASTOISE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_CATERPIE] = TUTOR_LEARNSET(TUTOR(MOVE_SNORE)), - - [SPECIES_METAPOD] = TUTOR_LEARNSET(0), - - [SPECIES_BUTTERFREE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_WEEDLE] = TUTOR_LEARNSET(0), - - [SPECIES_KAKUNA] = TUTOR_LEARNSET(0), - - [SPECIES_BEEDRILL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_PIDGEY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PIDGEOTTO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PIDGEOT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_RATTATA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_RATICATE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SPEAROW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_FEAROW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_EKANS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ARBOK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PIKACHU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_RAICHU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SANDSHREW] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SANDSLASH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_NIDORAN_F] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_NIDORINA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_NIDOQUEEN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_NIDORAN_M] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_NIDORINO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_NIDOKING] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CLEFAIRY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CLEFABLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_VULPIX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_NINETALES] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_JIGGLYPUFF] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_WIGGLYTUFF] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ZUBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GOLBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ODDISH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_GLOOM] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_VILEPLUME] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_PARAS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_PARASECT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_VENONAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_VENOMOTH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_DIGLETT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DUGTRIO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MEOWTH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PERSIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PSYDUCK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GOLDUCK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MANKEY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_PRIMEAPE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_GROWLITHE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ARCANINE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_POLIWAG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_POLIWHIRL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_POLIWRATH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ABRA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KADABRA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ALAKAZAM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MACHOP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MACHOKE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MACHAMP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_BELLSPROUT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_WEEPINBELL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_VICTREEBEL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TENTACOOL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TENTACRUEL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_GEODUDE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_GRAVELER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_GOLEM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_PONYTA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_RAPIDASH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SLOWPOKE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SLOWBRO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MAGNEMITE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MAGNETON] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_FARFETCHD] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_DODUO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_DODRIO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SEEL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DEWGONG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GRIMER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MUK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SHELLDER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CLOYSTER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GASTLY] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_HAUNTER] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_GENGAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_ONIX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DROWZEE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HYPNO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KRABBY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_KINGLER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_VOLTORB] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ELECTRODE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_EXEGGCUTE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_EXEGGUTOR] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CUBONE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MAROWAK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_HITMONLEE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_HITMONCHAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_LICKITUNG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_KOFFING] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_WEEZING] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_RHYHORN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_RHYDON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CHANSEY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TANGELA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_KANGASKHAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_HORSEA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SEADRA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GOLDEEN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SEAKING] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_STARYU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_STARMIE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MR_MIME] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SCYTHER] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_JYNX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ELECTABUZZ] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MAGMAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_PINSIR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TAUROS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MAGIKARP] = TUTOR_LEARNSET(0), - - [SPECIES_GYARADOS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LAPRAS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DITTO] = TUTOR_LEARNSET(0), - - [SPECIES_EEVEE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_VAPOREON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_JOLTEON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_FLAREON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PORYGON] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_OMANYTE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_OMASTAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_KABUTO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_KABUTOPS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_AERODACTYL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SNORLAX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_ARTICUNO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ZAPDOS] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MOLTRES] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_DRATINI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DRAGONAIR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DRAGONITE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MEWTWO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MEW] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CHIKORITA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_BAYLEEF] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_MEGANIUM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CYNDAQUIL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_QUILAVA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_TYPHLOSION] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_TOTODILE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CROCONAW] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_FERALIGATR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SENTRET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_FURRET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_HOOTHOOT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_NOCTOWL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_LEDYBA] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_LEDIAN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SPINARAK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ARIADOS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CROBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CHINCHOU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LANTURN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PICHU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CLEFFA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_IGGLYBUFF] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TOGEPI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TOGETIC] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_NATU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_XATU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MAREEP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_FLAAFFY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_AMPHAROS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BELLOSSOM] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_MARILL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_AZUMARILL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SUDOWOODO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_POLITOED] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_HOPPIP] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SKIPLOOM] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_JUMPLUFF] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_AIPOM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SUNKERN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SUNFLORA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_YANMA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_WOOPER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_QUAGSIRE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ESPEON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_UMBREON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MURKROW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SLOWKING] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MISDREAVUS] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_UNOWN] = TUTOR_LEARNSET(0), - - [SPECIES_WOBBUFFET] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER)), - - [SPECIES_GIRAFARIG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PINECO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_FORRETRESS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DUNSPARCE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GLIGAR] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_STEELIX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SNUBBULL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GRANBULL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_QWILFISH] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SCIZOR] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SHUCKLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_HERACROSS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SNEASEL] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TEDDIURSA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_URSARING] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SLUGMA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MAGCARGO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SWINUB] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PILOSWINE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_CORSOLA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_REMORAID] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_OCTILLERY] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DELIBIRD] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MANTINE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SKARMORY] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_HOUNDOUR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_HOUNDOOM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_KINGDRA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PHANPY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DONPHAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PORYGON2] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_STANTLER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SMEARGLE] = TUTOR_LEARNSET(TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_TYROGUE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_HITMONTOP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SMOOCHUM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ELEKID] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MAGBY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MILTANK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BLISSEY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_RAIKOU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ENTEI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SUICUNE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_LARVITAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PUPITAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TYRANITAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LUGIA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HO_OH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CELEBI] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TREECKO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_GROVYLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SCEPTILE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_TORCHIC] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_COMBUSKEN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_BLAZIKEN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MUDKIP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MARSHTOMP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SWAMPERT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_POOCHYENA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MIGHTYENA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ZIGZAGOON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LINOONE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_WURMPLE] = TUTOR_LEARNSET(TUTOR(MOVE_SNORE)), - - [SPECIES_SILCOON] = TUTOR_LEARNSET(0), - - [SPECIES_BEAUTIFLY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CASCOON] = TUTOR_LEARNSET(0), - - [SPECIES_DUSTOX] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_LOTAD] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_LOMBRE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_LUDICOLO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SEEDOT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_NUZLEAF] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SHIFTRY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TAILLOW] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SWELLOW] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_WINGULL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PELIPPER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_RALTS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KIRLIA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GARDEVOIR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SURSKIT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MASQUERAIN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SHROOMISH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_BRELOOM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SLAKOTH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_VIGOROTH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SLAKING] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_NINCADA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_NINJASK] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SHEDINJA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_WHISMUR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_LOUDRED] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_EXPLOUD] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MAKUHITA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_HARIYAMA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_AZURILL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_NOSEPASS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SKITTY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DELCATTY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SABLEYE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MAWILE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_ARON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_LAIRON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_AGGRON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MEDITITE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MEDICHAM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_ELECTRIKE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MANECTRIC] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PLUSLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MINUN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_VOLBEAT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ILLUMISE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ROSELIA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_GULPIN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SWALOT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CARVANHA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SHARPEDO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_WAILMER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_WAILORD] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_NUMEL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_CAMERUPT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TORKOAL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SPOINK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GRUMPIG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SPINDA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_TRAPINCH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_VIBRAVA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_FLYGON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CACNEA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CACTURNE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SWABLU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ALTARIA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ZANGOOSE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SEVIPER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_LUNATONE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SOLROCK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_BARBOACH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_WHISCASH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_CORPHISH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CRAWDAUNT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_BALTOY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_CLAYDOL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_LILEEP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CRADILY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_ANORITH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_ARMALDO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_FEEBAS] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MILOTIC] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CASTFORM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KECLEON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SHUPPET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BANETTE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DUSKULL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DUSCLOPS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_TROPIUS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CHIMECHO] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ABSOL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_WYNAUT] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER)), - - [SPECIES_SNORUNT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GLALIE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SPHEAL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SEALEO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_WALREIN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_CLAMPERL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_HUNTAIL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GOREBYSS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_RELICANTH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_LUVDISC] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_BAGON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SHELGON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SALAMENCE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_BELDUM] = TUTOR_LEARNSET(0), - - [SPECIES_METANG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_METAGROSS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_REGIROCK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_REGICE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_REGISTEEL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LATIAS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LATIOS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KYOGRE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GROUDON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_RAYQUAZA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_JIRACHI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DEOXYS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TURTWIG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_GROTLE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TORTERRA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CHIMCHAR] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MONFERNO] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_INFERNAPE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_PIPLUP] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PRINPLUP] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_EMPOLEON] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_STARLY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_STARAVIA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_STARAPTOR] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_BIDOOF] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BIBAREL] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KRICKETOT] = TUTOR_LEARNSET(TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SNORE)), - - [SPECIES_KRICKETUNE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SHINX] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LUXIO] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LUXRAY] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BUDEW] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_ROSERADE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CRANIDOS] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_RAMPARDOS] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SHIELDON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BASTIODON] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BURMY] = TUTOR_LEARNSET(TUTOR(MOVE_SNORE)), - - [SPECIES_WORMADAM] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MOTHIM] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_COMBEE] = TUTOR_LEARNSET(TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_VESPIQUEN] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PACHIRISU] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BUIZEL] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_FLOATZEL] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CHERUBI] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CHERRIM] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SHELLOS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GASTRODON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_AMBIPOM] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DRIFLOON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DRIFBLIM] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BUNEARY] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LOPUNNY] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MISMAGIUS] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HONCHKROW] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GLAMEOW] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PURUGLY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CHINGLING] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_STUNKY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SKUNTANK] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_BRONZOR] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BRONZONG] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BONSLY] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MIME_JR] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HAPPINY] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CHATOT] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SPIRITOMB] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GIBLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GABITE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GARCHOMP] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_MUNCHLAX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_RIOLU] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_LUCARIO] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_HIPPOPOTAS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_HIPPOWDON] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SKORUPI] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_DRAPION] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CROAGUNK] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_TOXICROAK] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CARNIVINE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_FINNEON] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_LUMINEON] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MANTYKE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SNOVER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_ABOMASNOW] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_WEAVILE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_MAGNEZONE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LICKILICKY] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_RHYPERIOR] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_TANGROWTH] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_ELECTIVIRE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MAGMORTAR] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_TOGEKISS] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_YANMEGA] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_LEAFEON] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_GLACEON] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GLISCOR] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_MAMOSWINE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PORYGON_Z] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GALLADE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PROBOPASS] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DUSKNOIR] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_FROSLASS] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ROTOM] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_UXIE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MESPRIT] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_AZELF] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DIALGA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PALKIA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HEATRAN] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_REGIGIGAS] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GIRATINA] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CRESSELIA] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PHIONE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MANAPHY] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_DARKRAI] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SHAYMIN] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_ARCEUS] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_VICTINI] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SNIVY] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SERVINE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SERPERIOR] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TEPIG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PIGNITE] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_EMBOAR] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_OSHAWOTT] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_DEWOTT] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SAMUROTT] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_PATRAT] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_WATCHOG] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LILLIPUP] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HERDIER] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_STOUTLAND] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PURRLOIN] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LIEPARD] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PANSAGE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SIMISAGE] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PANSEAR] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SIMISEAR] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PANPOUR] = TUTOR_LEARNSET(TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SIMIPOUR] = TUTOR_LEARNSET(TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MUNNA] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MUSHARNA] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PIDOVE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TRANQUILL] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_UNFEZANT] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BLITZLE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ZEBSTRIKA] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ROGGENROLA] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BOLDORE] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GIGALITH] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_WOOBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SWOOBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DRILBUR] = TUTOR_LEARNSET(TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_EXCADRILL] = TUTOR_LEARNSET(TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_AUDINO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TIMBURR] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_GURDURR] = TUTOR_LEARNSET(TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CONKELDURR] = TUTOR_LEARNSET(TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_TYMPOLE] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PALPITOAD] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SEISMITOAD] = TUTOR_LEARNSET(TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_THROH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SAWK] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SEWADDLE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SWADLOON] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_LEAVANNY] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_VENIPEDE] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_WHIRLIPEDE] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SCOLIPEDE] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_COTTONEE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_WHIMSICOTT] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PETILIL] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_LILLIGANT] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_BASCULIN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SANDILE] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_KROKOROK] = TUTOR_LEARNSET(TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_KROOKODILE] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DARUMAKA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DARMANITAN] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MARACTUS] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DWEBBLE] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CRUSTLE] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SCRAGGY] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SCRAFTY] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SIGILYPH] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_YAMASK] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_COFAGRIGUS] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TIRTOUGA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_CARRACOSTA] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ARCHEN] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ARCHEOPS] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TRUBBISH] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GARBODOR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ZORUA] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_ZOROARK] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_MINCCINO] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CINCCINO] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GOTHITA] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GOTHORITA] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GOTHITELLE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SOLOSIS] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DUOSION] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_REUNICLUS] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DUCKLETT] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SWANNA] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_VANILLITE] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_VANILLISH] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_VANILLUXE] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DEERLING] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SAWSBUCK] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_EMOLGA] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KARRABLAST] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_ESCAVALIER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_FOONGUS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_AMOONGUSS] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_FRILLISH] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_JELLICENT] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ALOMOMOLA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_JOLTIK] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GALVANTULA] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_FERROSEED] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_FERROTHORN] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KLINK] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KLANG] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KLINKLANG] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TYNAMO] = TUTOR_LEARNSET(TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_EELEKTRIK] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_EELEKTROSS] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ELGYEM] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BEHEEYEM] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LITWICK] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_LAMPENT] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_CHANDELURE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_AXEW] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_FRAXURE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_HAXORUS] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CUBCHOO] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BEARTIC] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CRYOGONAL] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SHELMET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ACCELGOR] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_STUNFISK] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MIENFOO] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_MIENSHAO] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_DRUDDIGON] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_GOLETT] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_GOLURK] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_PAWNIARD] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BISHARP] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BOUFFALANT] = TUTOR_LEARNSET(TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_RUFFLET] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BRAVIARY] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_VULLABY] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MANDIBUZZ] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_HEATMOR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_DURANT] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DEINO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ZWEILOUS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HYDREIGON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LARVESTA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_VOLCARONA] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_COBALION] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TERRAKION] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_VIRIZION] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TORNADUS] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_THUNDURUS] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_RESHIRAM] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ZEKROM] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LANDORUS] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_KYUREM] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_KELDEO] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_MELOETTA] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GENESECT] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CHESPIN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_QUILLADIN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CHESNAUGHT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_FENNEKIN] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BRAIXEN] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_DELPHOX] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_FROAKIE] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_FROGADIER] = TUTOR_LEARNSET(TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GRENINJA] = TUTOR_LEARNSET(TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BUNNELBY] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DIGGERSBY] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_FLETCHLING] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_FLETCHINDER] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TALONFLAME] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SCATTERBUG] = TUTOR_LEARNSET(0), - - [SPECIES_SPEWPA] = TUTOR_LEARNSET(0), - - [SPECIES_VIVILLON] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_LITLEO] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PYROAR] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_FLABEBE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_FLOETTE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_FLORGES] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SKIDDO] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GOGOAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PANCHAM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_PANGORO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_FURFROU] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ESPURR] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MEOWSTIC] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HONEDGE] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_DOUBLADE] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_AEGISLASH] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SPRITZEE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_AROMATISSE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SWIRLIX] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SLURPUFF] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_INKAY] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MALAMAR] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BINACLE] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_BARBARACLE] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SKRELP] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DRAGALGE] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_CLAUNCHER] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CLAWITZER] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_HELIOPTILE] = TUTOR_LEARNSET(TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HELIOLISK] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TYRUNT] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TYRANTRUM] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_AMAURA] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_AURORUS] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SYLVEON] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_HAWLUCHA] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_DEDENNE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CARBINK] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GOOMY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SLIGGOO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GOODRA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_KLEFKI] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PHANTUMP] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TREVENANT] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PUMPKABOO] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GOURGEIST] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BERGMITE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_AVALUGG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_NOIBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_NOIVERN] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_XERNEAS] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_YVELTAL] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ZYGARDE] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DIANCIE] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_HOOPA] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_VOLCANION] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ROWLET] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_DARTRIX] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_DECIDUEYE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_LITTEN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TORRACAT] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_INCINEROAR] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_POPPLIO] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_BRIONNE] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PRIMARINA] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PIKIPEK] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TRUMBEAK] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TOUCANNON] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_YUNGOOS] = TUTOR_LEARNSET(TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GUMSHOOS] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_GRUBBIN] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CHARJABUG] = TUTOR_LEARNSET(TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_VIKAVOLT] = TUTOR_LEARNSET(TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CRABRAWLER] = TUTOR_LEARNSET(TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_CRABOMINABLE] = TUTOR_LEARNSET(TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_ORICORIO] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CUTIEFLY] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_RIBOMBEE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ROCKRUFF] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_LYCANROC] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_WISHIWASHI] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MAREANIE] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TOXAPEX] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MUDBRAY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MUDSDALE] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_DEWPIDER] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ARAQUANID] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_FOMANTIS] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_LURANTIS] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_MORELULL] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SHIINOTIC] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SALANDIT] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_SALAZZLE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_STUFFUL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_BEWEAR] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_BOUNSWEET] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_STEENEE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TSAREENA] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_COMFEY] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ORANGURU] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PASSIMIAN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_WIMPOD] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_GOLISOPOD] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SANDYGAST] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PALOSSAND] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_PYUKUMUKU] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TYPE_NULL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SILVALLY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MINIOR] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_KOMALA] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TURTONATOR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TOGEDEMARU] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MIMIKYU] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BRUXISH] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_DRAMPA] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DHELMISE] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_JANGMO_O] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_HAKAMO_O] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_KOMMO_O] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_TAPU_KOKO] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TAPU_LELE] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_TAPU_BULU] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_TAPU_FINI] = TUTOR_LEARNSET(TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_COSMOG] = TUTOR_LEARNSET(0), - - [SPECIES_COSMOEM] = TUTOR_LEARNSET(0), - - [SPECIES_SOLGALEO] = TUTOR_LEARNSET(TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LUNALA] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_NIHILEGO] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BUZZWOLE] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_PHEROMOSA] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_XURKITREE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CELESTEELA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_KARTANA] = TUTOR_LEARNSET(TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_GUZZLORD] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_NECROZMA] = TUTOR_LEARNSET(TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MAGEARNA] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MARSHADOW] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_POIPOLE] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_NAGANADEL] = TUTOR_LEARNSET(TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_STAKATAKA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_BLACEPHALON] = TUTOR_LEARNSET(TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ZERAORA] = TUTOR_LEARNSET(TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GROOKEY] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_THWACKEY] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_RILLABOOM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SCORBUNNY] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_RABOOT] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CINDERACE] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SOBBLE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_DRIZZILE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_INTELEON] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SKWOVET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_GREEDENT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_ROOKIDEE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CORVISQUIRE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CORVIKNIGHT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_BLIPBUG] = TUTOR_LEARNSET(0), - - [SPECIES_DOTTLER] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ORBEETLE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_NICKIT] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_THIEVUL] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GOSSIFLEUR] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ELDEGOSS] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_WOOLOO] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DUBWOOL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CHEWTLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_DREDNAW] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_YAMPER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BOLTUND] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ROLYCOLY] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_CARKOL] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_COALOSSAL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_APPLIN] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ROLLOUT)), - - [SPECIES_FLAPPLE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_APPLETUN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_SILICOBRA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_SANDACONDA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_CRAMORANT] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ARROKUDA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_BARRASKEWDA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_TOXEL] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_TOXTRICITY] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SIZZLIPEDE] = TUTOR_LEARNSET(TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_CENTISKORCH] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_CLOBBOPUS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_GRAPPLOCT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_SINISTEA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_POLTEAGEIST] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_HATENNA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HATTREM] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_HATTERENE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_IMPIDIMP] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_MORGREM] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_GRIMMSNARL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_OBSTAGOON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_PERRSERKER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CURSOLA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_SIRFETCHD] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_MR_RIME] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_RUNERIGUS] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_MILCERY] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ALCREMIE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_FALINKS] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_PINCURCHIN] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SNOM] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_FROSMOTH] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_STONJOURNER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_EISCUE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_INDEEDEE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MORPEKO] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CUFANT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_COPPERAJAH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_DRACOZOLT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ARCTOZOLT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DRACOVISH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ARCTOVISH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_DURALUDON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DREEPY] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DRAKLOAK] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DRAGAPULT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ZACIAN] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_ZAMAZENTA] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ETERNATUS] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_KUBFU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_URSHIFU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_ZARUDE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_REGIELEKI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_REGIDRAGO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_GLASTRIER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SPECTRIER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CALYREX] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MEOWTH_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_PONYTA_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_RAPIDASH_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_SLOWPOKE_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SLOWBRO_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_FARFETCHD_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FURY_CUTTER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_WEEZING_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_MR_MIME_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ARTICUNO_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ZAPDOS_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MOLTRES_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SLOWKING_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_CORSOLA_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ZIGZAGOON_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_LINOONE_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_DARUMAKA_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_DARMANITAN_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_YAMASK_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_STUNFISK_GALARIAN] = TUTOR_LEARNSET(TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_BURMY_SANDY_CLOAK] = TUTOR_LEARNSET(TUTOR(MOVE_SNORE)), - - [SPECIES_BURMY_TRASH_CLOAK] = TUTOR_LEARNSET(TUTOR(MOVE_SNORE)), - - [SPECIES_WORMADAM_SANDY_CLOAK] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_WORMADAM_TRASH_CLOAK] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_ROTOM_HEAT] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ROTOM_WASH] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ROTOM_FROST] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ROTOM_FAN] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_ROTOM_MOW] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_KYUREM_WHITE] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_KYUREM_BLACK] = TUTOR_LEARNSET(TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER)), - - [SPECIES_MEOWSTIC_FEMALE] = TUTOR_LEARNSET(TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_TOXTRICITY_LOW_KEY] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_THUNDER_WAVE)), - - [SPECIES_SINISTEA_ANTIQUE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_POLTEAGEIST_ANTIQUE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ALCREMIE_RUBY_CREAM] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ALCREMIE_MATCHA_CREAM] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ALCREMIE_MINT_CREAM] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ALCREMIE_LEMON_CREAM] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ALCREMIE_SALTED_CREAM] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ALCREMIE_RUBY_SWIRL] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE)), - - [SPECIES_INDEEDEE_FEMALE] = TUTOR_LEARNSET(TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_ZARUDE_DADA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CALYREX_ICE_RIDER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_SWORDS_DANCE)), - - [SPECIES_CALYREX_SHADOW_RIDER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SWIFT)), -}; diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h index 376725c902..e04afe339b 100644 --- a/src/data/pokemon_graphics/back_pic_coordinates.h +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -1,6109 +1,6253 @@ +// All Pokémon pics are 64x64, but this data table defines where in this 64x64 frame +// the sprite's non-transparent pixels actually are. +// .size is the dimensions of this drawn pixel area. +// .y_offset is the number of pixels between the drawn pixel area and the bottom edge. const struct MonCoords gMonBackPicCoords[] = { [SPECIES_NONE] = { - .size = 0x88, - .y_offset = 0, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_BULBASAUR] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_IVYSAUR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_VENUSAUR] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_CHARMANDER] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_CHARMELEON] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_CHARIZARD] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SQUIRTLE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_WARTORTLE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_BLASTOISE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_CATERPIE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_METAPOD] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_BUTTERFREE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_WEEDLE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_KAKUNA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_BEEDRILL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_PIDGEY] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_PIDGEOTTO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_PIDGEOT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_RATTATA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_RATICATE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_SPEAROW] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_FEAROW] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_EKANS] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_ARBOK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_PIKACHU] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_RAICHU] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SANDSHREW] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_SANDSLASH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_NIDORAN_F] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_NIDORINA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_NIDOQUEEN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_NIDORAN_M] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_NIDORINO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_NIDOKING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_CLEFAIRY] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_CLEFABLE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_VULPIX] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_NINETALES] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_JIGGLYPUFF] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 12, }, [SPECIES_WIGGLYTUFF] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_ZUBAT] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_GOLBAT] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_ODDISH] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_GLOOM] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_VILEPLUME] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_PARAS] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 18, }, [SPECIES_PARASECT] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_VENONAT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_VENOMOTH] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_DIGLETT] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_DUGTRIO] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 17, }, [SPECIES_MEOWTH] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_PERSIAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_PSYDUCK] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_GOLDUCK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_MANKEY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_PRIMEAPE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_GROWLITHE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_ARCANINE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_POLIWAG] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 18, }, [SPECIES_POLIWHIRL] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_POLIWRATH] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_ABRA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 12, }, [SPECIES_KADABRA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_ALAKAZAM] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_MACHOP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_MACHOKE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_MACHAMP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_BELLSPROUT] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_WEEPINBELL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_VICTREEBEL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_TENTACOOL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_TENTACRUEL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_GEODUDE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_GRAVELER] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_GOLEM] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_PONYTA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_RAPIDASH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SLOWPOKE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_SLOWBRO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_MAGNEMITE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_MAGNETON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_FARFETCHD] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_DODUO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_DODRIO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SEEL] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_DEWGONG] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_GRIMER] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_MUK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_SHELLDER] = { - .size = 0x63, + .size = MON_COORDS_SIZE(48, 24), .y_offset = 21, }, [SPECIES_CLOYSTER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_GASTLY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_HAUNTER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_GENGAR] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_ONIX] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_DROWZEE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_HYPNO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_KRABBY] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 15, }, [SPECIES_KINGLER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_VOLTORB] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_ELECTRODE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_EXEGGCUTE] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 18, }, [SPECIES_EXEGGUTOR] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_CUBONE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_MAROWAK] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_HITMONLEE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_HITMONCHAN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_LICKITUNG] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_KOFFING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_WEEZING] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_RHYHORN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_RHYDON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_CHANSEY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_TANGELA] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_KANGASKHAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_HORSEA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_SEADRA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GOLDEEN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_SEAKING] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_STARYU] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_STARMIE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_MR_MIME] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_SCYTHER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_JYNX] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_ELECTABUZZ] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_MAGMAR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_PINSIR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_TAUROS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 13, }, [SPECIES_MAGIKARP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GYARADOS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_LAPRAS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_DITTO] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 17, }, [SPECIES_EEVEE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_VAPOREON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_JOLTEON] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_FLAREON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_PORYGON] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_OMANYTE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_OMASTAR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_KABUTO] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_KABUTOPS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_AERODACTYL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_SNORLAX] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_ARTICUNO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_ZAPDOS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_MOLTRES] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_DRATINI] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_DRAGONAIR] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 4, }, [SPECIES_DRAGONITE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_MEWTWO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_MEW] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CHIKORITA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_BAYLEEF] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_MEGANIUM] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_CYNDAQUIL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_QUILAVA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TYPHLOSION] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_TOTODILE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_CROCONAW] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_FERALIGATR] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_SENTRET] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_FURRET] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_HOOTHOOT] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 4, }, [SPECIES_NOCTOWL] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_LEDYBA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_LEDIAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SPINARAK] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_ARIADOS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_CROBAT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_CHINCHOU] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_LANTURN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_PICHU] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_CLEFFA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_IGGLYBUFF] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_TOGEPI] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_TOGETIC] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_NATU] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_XATU] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_MAREEP] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 15, }, [SPECIES_FLAAFFY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_AMPHAROS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_BELLOSSOM] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_MARILL] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_AZUMARILL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SUDOWOODO] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_POLITOED] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_HOPPIP] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_SKIPLOOM] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_JUMPLUFF] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_AIPOM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SUNKERN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_SUNFLORA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_YANMA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_WOOPER] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_QUAGSIRE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_ESPEON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_UMBREON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_MURKROW] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 10, }, [SPECIES_SLOWKING] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_MISDREAVUS] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_UNOWN] = { - .size = 0x36, + .size = MON_COORDS_SIZE(24, 48), .y_offset = 8, }, [SPECIES_WOBBUFFET] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 10, }, [SPECIES_GIRAFARIG] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_PINECO] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_FORRETRESS] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_DUNSPARCE] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 17, }, [SPECIES_GLIGAR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_STEELIX] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_SNUBBULL] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_GRANBULL] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_QWILFISH] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_SCIZOR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_SHUCKLE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_HERACROSS] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 2, }, [SPECIES_SNEASEL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_TEDDIURSA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_URSARING] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_SLUGMA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_MAGCARGO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_SWINUB] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 15, }, [SPECIES_PILOSWINE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_CORSOLA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_REMORAID] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_OCTILLERY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_DELIBIRD] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_MANTINE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_SKARMORY] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 1, }, [SPECIES_HOUNDOUR] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_HOUNDOOM] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_KINGDRA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_PHANPY] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_DONPHAN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_PORYGON2] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_STANTLER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SMEARGLE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_TYROGUE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_HITMONTOP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SMOOCHUM] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_ELEKID] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_MAGBY] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_MILTANK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_BLISSEY] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_RAIKOU] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_ENTEI] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_SUICUNE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_LARVITAR] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 8, }, [SPECIES_PUPITAR] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_TYRANITAR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_LUGIA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_HO_OH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_CELEBI] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_TREECKO] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_GROVYLE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_SCEPTILE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_TORCHIC] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_COMBUSKEN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_BLAZIKEN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MUDKIP] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_MARSHTOMP] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SWAMPERT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_POOCHYENA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_MIGHTYENA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ZIGZAGOON] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_LINOONE] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_WURMPLE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SILCOON] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_BEAUTIFLY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CASCOON] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 15, }, [SPECIES_DUSTOX] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_LOTAD] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_LOMBRE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_LUDICOLO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SEEDOT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_NUZLEAF] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_SHIFTRY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_NINCADA] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 18, }, [SPECIES_NINJASK] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_SHEDINJA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_TAILLOW] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 15, }, [SPECIES_SWELLOW] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_SHROOMISH] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_BRELOOM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SPINDA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_WINGULL] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_PELIPPER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SURSKIT] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_MASQUERAIN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_WAILMER] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_WAILORD] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_SKITTY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_DELCATTY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_KECLEON] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_BALTOY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_CLAYDOL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_NOSEPASS] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_TORKOAL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_SABLEYE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 13, }, [SPECIES_BARBOACH] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_WHISCASH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_LUVDISC] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_CORPHISH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_CRAWDAUNT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_FEEBAS] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_MILOTIC] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CARVANHA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_SHARPEDO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_TRAPINCH] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_VIBRAVA] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_FLYGON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_MAKUHITA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 8, }, [SPECIES_HARIYAMA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_ELECTRIKE] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_MANECTRIC] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_NUMEL] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_CAMERUPT] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_SPHEAL] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_SEALEO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_WALREIN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CACNEA] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_CACTURNE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SNORUNT] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_GLALIE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_LUNATONE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_SOLROCK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_AZURILL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SPOINK] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 4, }, [SPECIES_GRUMPIG] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_PLUSLE] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_MINUN] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 4, }, [SPECIES_MAWILE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_MEDITITE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_MEDICHAM] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SWABLU] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_ALTARIA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_WYNAUT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_DUSKULL] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 8, }, [SPECIES_DUSCLOPS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_ROSELIA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_SLAKOTH] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_VIGOROTH] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SLAKING] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GULPIN] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_SWALOT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_TROPIUS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_WHISMUR] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_LOUDRED] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_EXPLOUD] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CLAMPERL] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_HUNTAIL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_GOREBYSS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_ABSOL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SHUPPET] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_BANETTE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_SEVIPER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_ZANGOOSE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_RELICANTH] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_ARON] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_LAIRON] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_AGGRON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_CASTFORM] = { - .size = 0x48, + .size = MON_COORDS_SIZE(32, 64), .y_offset = 0, }, [SPECIES_VOLBEAT] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_ILLUMISE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_LILEEP] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_CRADILY] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_ANORITH] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 19, }, [SPECIES_ARMALDO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_RALTS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 13, }, [SPECIES_KIRLIA] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_GARDEVOIR] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_BAGON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_SHELGON] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_SALAMENCE] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 4, }, [SPECIES_BELDUM] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_METANG] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_METAGROSS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_REGIROCK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 10, }, [SPECIES_REGICE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_REGISTEEL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_KYOGRE] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 18, }, [SPECIES_GROUDON] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_RAYQUAZA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LATIAS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_LATIOS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_JIRACHI] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_DEOXYS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_CHIMECHO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, +#if P_NEW_POKEMON == TRUE [SPECIES_TURTWIG] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_GROTLE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_TORTERRA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_CHIMCHAR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_MONFERNO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_INFERNAPE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PIPLUP] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_PRINPLUP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_EMPOLEON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_STARLY] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_STARAVIA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_STARAPTOR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_BIDOOF] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_BIBAREL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_KRICKETOT] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_KRICKETUNE] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_SHINX] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_LUXIO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_LUXRAY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BUDEW] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 11, }, [SPECIES_ROSERADE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_CRANIDOS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_RAMPARDOS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_SHIELDON] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_BASTIODON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_BURMY] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 6, }, [SPECIES_WORMADAM] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_MOTHIM] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_COMBEE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 22, }, [SPECIES_VESPIQUEN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PACHIRISU] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_BUIZEL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_FLOATZEL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_CHERUBI] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_CHERRIM] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 9, }, [SPECIES_SHELLOS] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 8, }, [SPECIES_GASTRODON] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_AMBIPOM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_DRIFLOON] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 0, }, [SPECIES_DRIFBLIM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_BUNEARY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_LOPUNNY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_MISMAGIUS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_HONCHKROW] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_GLAMEOW] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_PURUGLY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_CHINGLING] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 13, }, [SPECIES_STUNKY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_SKUNTANK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_BRONZOR] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_BRONZONG] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_BONSLY] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 6, }, [SPECIES_MIME_JR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_HAPPINY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_CHATOT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SPIRITOMB] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_GIBLE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_GABITE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_GARCHOMP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_MUNCHLAX] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_RIOLU] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 8, }, [SPECIES_LUCARIO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_HIPPOPOTAS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_HIPPOWDON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SKORUPI] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_DRAPION] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_CROAGUNK] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_TOXICROAK] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_CARNIVINE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_FINNEON] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_LUMINEON] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_MANTYKE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SNOVER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_ABOMASNOW] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_WEAVILE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_MAGNEZONE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_LICKILICKY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_RHYPERIOR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TANGROWTH] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_ELECTIVIRE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_MAGMORTAR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_TOGEKISS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_YANMEGA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_LEAFEON] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_GLACEON] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 6, }, [SPECIES_GLISCOR] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_MAMOSWINE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_PORYGON_Z] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GALLADE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_PROBOPASS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_DUSKNOIR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_FROSLASS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ROTOM] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_UXIE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_MESPRIT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_AZELF] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_DIALGA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PALKIA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_HEATRAN] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_REGIGIGAS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_GIRATINA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_CRESSELIA] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_PHIONE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_MANAPHY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 10, }, [SPECIES_DARKRAI] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SHAYMIN] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 15, }, [SPECIES_ARCEUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_VICTINI] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 7, }, [SPECIES_SNIVY] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_SERVINE] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 5, }, [SPECIES_SERPERIOR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_TEPIG] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_PIGNITE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 9, }, [SPECIES_EMBOAR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_OSHAWOTT] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 14, }, [SPECIES_DEWOTT] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 5, }, [SPECIES_SAMUROTT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_PATRAT] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_WATCHOG] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_LILLIPUP] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 12, }, [SPECIES_HERDIER] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 10, }, [SPECIES_STOUTLAND] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_PURRLOIN] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_LIEPARD] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_PANSAGE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SIMISAGE] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 6, }, [SPECIES_PANSEAR] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 10, }, [SPECIES_SIMISEAR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_PANPOUR] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SIMIPOUR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_MUNNA] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 16, }, [SPECIES_MUSHARNA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 8, }, [SPECIES_PIDOVE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_TRANQUILL] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_UNFEZANT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_BLITZLE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_ZEBSTRIKA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 7, }, [SPECIES_ROGGENROLA] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 13, }, [SPECIES_BOLDORE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 16, }, [SPECIES_GIGALITH] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_WOOBAT] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_SWOOBAT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 7, }, [SPECIES_DRILBUR] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_EXCADRILL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 11, }, [SPECIES_AUDINO] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 9, }, [SPECIES_TIMBURR] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_GURDURR] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_CONKELDURR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 13, }, [SPECIES_TYMPOLE] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 17, }, [SPECIES_PALPITOAD] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_SEISMITOAD] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_THROH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_SAWK] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_SEWADDLE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 13, }, [SPECIES_SWADLOON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_LEAVANNY] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_VENIPEDE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_WHIRLIPEDE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_SCOLIPEDE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_COTTONEE] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 18, }, [SPECIES_WHIMSICOTT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_PETILIL] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 9, }, [SPECIES_LILLIGANT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_BASCULIN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 16, }, [SPECIES_SANDILE] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 18, }, [SPECIES_KROKOROK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_KROOKODILE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_DARUMAKA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 12, }, [SPECIES_DARMANITAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_MARACTUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_DWEBBLE] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 17, }, [SPECIES_CRUSTLE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_SCRAGGY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_SCRAFTY] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 5, }, [SPECIES_SIGILYPH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 7, }, [SPECIES_YAMASK] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_COFAGRIGUS] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_TIRTOUGA] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_CARRACOSTA] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_ARCHEN] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_ARCHEOPS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_TRUBBISH] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 13, }, [SPECIES_GARBODOR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_ZORUA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_ZOROARK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 10, }, [SPECIES_MINCCINO] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_CINCCINO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_GOTHITA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_GOTHORITA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_GOTHITELLE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SOLOSIS] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 19, }, [SPECIES_DUOSION] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 13, }, [SPECIES_REUNICLUS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 13, }, [SPECIES_DUCKLETT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_SWANNA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_VANILLITE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_VANILLISH] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_VANILLUXE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_DEERLING] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_SAWSBUCK] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 5, }, [SPECIES_EMOLGA] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 16, }, [SPECIES_KARRABLAST] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 14, }, [SPECIES_ESCAVALIER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_FOONGUS] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_AMOONGUSS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 12, }, [SPECIES_FRILLISH] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_JELLICENT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_ALOMOMOLA] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_JOLTIK] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 19, }, [SPECIES_GALVANTULA] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 18, }, [SPECIES_FERROSEED] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_FERROTHORN] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_KLINK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 17, }, [SPECIES_KLANG] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 7, }, [SPECIES_KLINKLANG] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 7, }, [SPECIES_TYNAMO] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 21, }, [SPECIES_EELEKTRIK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 4, }, [SPECIES_EELEKTROSS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ELGYEM] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 10, }, [SPECIES_BEHEEYEM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LITWICK] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_LAMPENT] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 12, }, [SPECIES_CHANDELURE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_AXEW] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_FRAXURE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 13, }, [SPECIES_HAXORUS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_CUBCHOO] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_BEARTIC] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_CRYOGONAL] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 4, }, [SPECIES_SHELMET] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 19, }, [SPECIES_ACCELGOR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_STUNFISK] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 22, }, [SPECIES_MIENFOO] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_MIENSHAO] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_DRUDDIGON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_GOLETT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_GOLURK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_PAWNIARD] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_BISHARP] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_BOUFFALANT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_RUFFLET] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_BRAVIARY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_VULLABY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 14, }, [SPECIES_MANDIBUZZ] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_HEATMOR] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 21, }, [SPECIES_DURANT] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 17, }, [SPECIES_DEINO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 14, }, [SPECIES_ZWEILOUS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_HYDREIGON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 11, }, [SPECIES_LARVESTA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 12, }, [SPECIES_VOLCARONA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_COBALION] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 6, }, [SPECIES_TERRAKION] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_VIRIZION] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_TORNADUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_THUNDURUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_RESHIRAM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 7, }, [SPECIES_ZEKROM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_LANDORUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_KYUREM] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_KELDEO] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 4, }, [SPECIES_MELOETTA] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_GENESECT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_CHESPIN] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 6, }, [SPECIES_QUILLADIN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_CHESNAUGHT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 10, }, [SPECIES_FENNEKIN] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_BRAIXEN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 10, }, [SPECIES_DELPHOX] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_FROAKIE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_FROGADIER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GRENINJA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_BUNNELBY] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_DIGGERSBY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_FLETCHLING] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_FLETCHINDER] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_TALONFLAME] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_SCATTERBUG] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 12, }, [SPECIES_SPEWPA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 12, }, [SPECIES_VIVILLON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LITLEO] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_PYROAR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_FLABEBE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_FLOETTE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_FLORGES] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_SKIDDO] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_GOGOAT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_PANCHAM] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_PANGORO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_FURFROU] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_ESPURR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_MEOWSTIC] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 9, }, [SPECIES_HONEDGE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_DOUBLADE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 7, }, [SPECIES_AEGISLASH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 9, }, [SPECIES_SPRITZEE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_AROMATISSE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_SWIRLIX] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_SLURPUFF] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_INKAY] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 9, }, [SPECIES_MALAMAR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_BINACLE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_BARBARACLE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SKRELP] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_DRAGALGE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CLAUNCHER] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_CLAWITZER] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_HELIOPTILE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_HELIOLISK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_TYRUNT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_TYRANTRUM] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 11, }, [SPECIES_AMAURA] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 3, }, [SPECIES_AURORUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SYLVEON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_HAWLUCHA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_DEDENNE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 12, }, [SPECIES_CARBINK] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_GOOMY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_SLIGGOO] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_GOODRA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_KLEFKI] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 8, }, [SPECIES_PHANTUMP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_TREVENANT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_PUMPKABOO] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 13, }, [SPECIES_GOURGEIST] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_BERGMITE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 13, }, [SPECIES_AVALUGG] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_NOIBAT] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 7, }, [SPECIES_NOIVERN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_XERNEAS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_YVELTAL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_ZYGARDE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_DIANCIE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 7, }, [SPECIES_HOOPA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_VOLCANION] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ROWLET] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_DARTRIX] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_DECIDUEYE] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_LITTEN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_TORRACAT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_INCINEROAR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_POPPLIO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_BRIONNE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_PRIMARINA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PIKIPEK] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_TRUMBEAK] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_TOUCANNON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_YUNGOOS] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_GUMSHOOS] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_GRUBBIN] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_CHARJABUG] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_VIKAVOLT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_CRABRAWLER] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_CRABOMINABLE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ORICORIO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CUTIEFLY] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 15, }, [SPECIES_RIBOMBEE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_ROCKRUFF] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_LYCANROC] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_WISHIWASHI] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 18, }, [SPECIES_MAREANIE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 15, }, [SPECIES_TOXAPEX] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_MUDBRAY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_MUDSDALE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_DEWPIDER] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_ARAQUANID] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 12, }, [SPECIES_FOMANTIS] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 5, }, [SPECIES_LURANTIS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_MORELULL] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_SHIINOTIC] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_SALANDIT] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_SALAZZLE] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_STUFFUL] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_BEWEAR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_BOUNSWEET] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_STEENEE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 8, }, [SPECIES_TSAREENA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_COMFEY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 11, }, [SPECIES_ORANGURU] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 12, }, [SPECIES_PASSIMIAN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_WIMPOD] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_GOLISOPOD] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_SANDYGAST] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_PALOSSAND] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_PYUKUMUKU] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 16, }, [SPECIES_TYPE_NULL] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_SILVALLY] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_MINIOR] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_KOMALA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_TURTONATOR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_TOGEDEMARU] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 13, }, [SPECIES_MIMIKYU] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_BRUXISH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 14, }, [SPECIES_DRAMPA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_DHELMISE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_JANGMO_O] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_HAKAMO_O] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 5, }, [SPECIES_KOMMO_O] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_TAPU_KOKO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_TAPU_LELE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_TAPU_BULU] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_TAPU_FINI] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_COSMOG] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_COSMOEM] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 17, }, [SPECIES_SOLGALEO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_LUNALA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_NIHILEGO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_BUZZWOLE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 14, }, [SPECIES_PHEROMOSA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_XURKITREE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_CELESTEELA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_KARTANA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_GUZZLORD] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 10, }, [SPECIES_NECROZMA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_MAGEARNA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_MARSHADOW] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 6, }, [SPECIES_POIPOLE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_NAGANADEL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_STAKATAKA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 12, }, [SPECIES_BLACEPHALON] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_ZERAORA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 11, }, [SPECIES_MELTAN] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_MELMETAL] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_GROOKEY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_THWACKEY] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_RILLABOOM] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_SCORBUNNY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_RABOOT] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_CINDERACE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_SOBBLE] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 8, }, [SPECIES_DRIZZILE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_INTELEON] = { - .size = 0x85, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 4, }, [SPECIES_SKWOVET] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_GREEDENT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_ROOKIDEE] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 17, }, [SPECIES_CORVISQUIRE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_CORVIKNIGHT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_BLIPBUG] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_DOTTLER] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 17, }, [SPECIES_ORBEETLE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_NICKIT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_THIEVUL] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_GOSSIFLEUR] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 15, }, [SPECIES_ELDEGOSS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_WOOLOO] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 18, }, [SPECIES_DUBWOOL] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_CHEWTLE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 8, }, [SPECIES_DREDNAW] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 18, }, [SPECIES_YAMPER] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 13, }, [SPECIES_BOLTUND] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_ROLYCOLY] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 17, }, [SPECIES_CARKOL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_COALOSSAL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_APPLIN] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 15, }, [SPECIES_FLAPPLE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_APPLETUN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 11, }, [SPECIES_SILICOBRA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_SANDACONDA] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_CRAMORANT] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_ARROKUDA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_BARRASKEWDA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_TOXEL] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_TOXTRICITY] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SIZZLIPEDE] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_CENTISKORCH] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_CLOBBOPUS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_GRAPPLOCT] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_SINISTEA] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 16, }, [SPECIES_POLTEAGEIST] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_HATENNA] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_HATTREM] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_HATTERENE] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_IMPIDIMP] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_MORGREM] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_GRIMMSNARL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_OBSTAGOON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_PERRSERKER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_CURSOLA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_SIRFETCHD] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_MR_RIME] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_RUNERIGUS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_MILCERY] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 16, }, [SPECIES_ALCREMIE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_FALINKS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_PINCURCHIN] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_SNOM] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 17, }, [SPECIES_FROSMOTH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_STONJOURNER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_EISCUE] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_INDEEDEE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_MORPEKO] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_CUFANT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_COPPERAJAH] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_DRACOZOLT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_ARCTOZOLT] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_DRACOVISH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_ARCTOVISH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_DURALUDON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_DREEPY] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 15, }, [SPECIES_DRAKLOAK] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_DRAGAPULT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_ZACIAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_ZAMAZENTA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_ETERNATUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_KUBFU] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_URSHIFU] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_ZARUDE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_REGIELEKI] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_REGIDRAGO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_GLASTRIER] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 5, }, [SPECIES_SPECTRIER] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_CALYREX] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, + [SPECIES_WYRDEER] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_KLEAVOR] = + { + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, + }, + [SPECIES_URSALUNA] = + { + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 14, + }, + [SPECIES_BASCULEGION] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_SNEASLER] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_OVERQWIL] = + { + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, + }, + [SPECIES_ENAMORUS] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, // Megas [SPECIES_VENUSAUR_MEGA] = { - .size = 0, - .y_offset = 10, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 8, }, [SPECIES_CHARIZARD_MEGA_X] = { - .size = 0, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_CHARIZARD_MEGA_Y] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_BLASTOISE_MEGA] = { - .size = 0, - .y_offset = 3, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_BEEDRILL_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_PIDGEOT_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 7, }, [SPECIES_ALAKAZAM_MEGA] = { - .size = 0, - .y_offset = 8, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SLOWBRO_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_GENGAR_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_KANGASKHAN_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_PINSIR_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_GYARADOS_MEGA] = { - .size = 0, - .y_offset = 3, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_AERODACTYL_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 8, }, [SPECIES_MEWTWO_MEGA_X] = { - .size = 0, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_MEWTWO_MEGA_Y] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_AMPHAROS_MEGA] = { - .size = 0, - .y_offset = 1, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_STEELIX_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SCIZOR_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_HERACROSS_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_HOUNDOOM_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TYRANITAR_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SCEPTILE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_BLAZIKEN_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SWAMPERT_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GARDEVOIR_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_SABLEYE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 13, }, [SPECIES_MAWILE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_AGGRON_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_MEDICHAM_MEGA] = { - .size = 0, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_MANECTRIC_MEGA] = { - .size = 0, - .y_offset = 1, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SHARPEDO_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_CAMERUPT_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 9, }, [SPECIES_ALTARIA_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_BANETTE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ABSOL_MEGA] = { - .size = 0, - .y_offset = 1, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_GLALIE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_SALAMENCE_MEGA] = { - .size = 0, - .y_offset = 4, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_METAGROSS_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_LATIAS_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_LATIOS_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_LOPUNNY_MEGA] = { - .size = 0, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_GARCHOMP_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_LUCARIO_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ABOMASNOW_MEGA] = { - .size = 0, - .y_offset = 1, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_GALLADE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_AUDINO_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_DIANCIE_MEGA] = { - .size = 0, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, // Special Mega + Primals [SPECIES_RAYQUAZA_MEGA] = { - .size = 0, - .y_offset = 1, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_KYOGRE_PRIMAL] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 18, }, [SPECIES_GROUDON_PRIMAL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, // Alolan Forms [SPECIES_RATTATA_ALOLAN] = { - .size = 0x65, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_RATICATE_ALOLAN] = { - .size = 0x75, - .y_offset = 10, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_RAICHU_ALOLAN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_SANDSHREW_ALOLAN] = { - .size = 0x65, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_SANDSLASH_ALOLAN] = { - .size = 0x86, - .y_offset = 11, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_VULPIX_ALOLAN] = { - .size = 0x76, - .y_offset = 9, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_NINETALES_ALOLAN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_DIGLETT_ALOLAN] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 14, }, [SPECIES_DUGTRIO_ALOLAN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 17, }, [SPECIES_MEOWTH_ALOLAN] = { - .size = 0x65, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_PERSIAN_ALOLAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_GEODUDE_ALOLAN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 13, }, [SPECIES_GRAVELER_ALOLAN] = { - .size = 0x75, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_GOLEM_ALOLAN] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 13, }, [SPECIES_GRIMER_ALOLAN] = { - .size = 0x75, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_MUK_ALOLAN] = { - .size = 0x87, - .y_offset = 9, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_EXEGGUTOR_ALOLAN] = { - .size = 0x87, - .y_offset = 8, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_MAROWAK_ALOLAN] = { - .size = 0x66, - .y_offset = 8, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, // Galarian Forms [SPECIES_MEOWTH_GALARIAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_PONYTA_GALARIAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_RAPIDASH_GALARIAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SLOWPOKE_GALARIAN] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_SLOWBRO_GALARIAN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_FARFETCHD_GALARIAN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_WEEZING_GALARIAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MR_MIME_GALARIAN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_ARTICUNO_GALARIAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_ZAPDOS_GALARIAN] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_MOLTRES_GALARIAN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_SLOWKING_GALARIAN] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_CORSOLA_GALARIAN] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_ZIGZAGOON_GALARIAN] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 12, }, [SPECIES_LINOONE_GALARIAN] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_DARUMAKA_GALARIAN] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_DARMANITAN_GALARIAN] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_YAMASK_GALARIAN] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_STUNFISK_GALARIAN] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 23, + }, + // Hisuian Forms + [SPECIES_GROWLITHE_HISUIAN] = + { + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 8, + }, + [SPECIES_ARCANINE_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, + }, + [SPECIES_VOLTORB_HISUIAN] = + { + .size = MON_COORDS_SIZE(48, 32), + .y_offset = 10, + }, + [SPECIES_ELECTRODE_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 7, + }, + [SPECIES_TYPHLOSION_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 3, + }, + [SPECIES_QWILFISH_HISUIAN] = + { + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, + }, + [SPECIES_SNEASEL_HISUIAN] = + { + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, + }, + [SPECIES_SAMUROTT_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_LILLIGANT_HISUIAN] = + { + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, + }, + [SPECIES_ZORUA_HISUIAN] = + { + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, + }, + [SPECIES_ZOROARK_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_BRAVIARY_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 0, + }, + [SPECIES_SLIGGOO_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_GOODRA_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_AVALUGG_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 32), + .y_offset = 17, + }, + [SPECIES_DECIDUEYE_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Misc Forms // Cosplay Pikachu [SPECIES_PIKACHU_COSPLAY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_ROCK_STAR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_BELLE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_POP_STAR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_PH_D] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_LIBRE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, // Cap Pikachu [SPECIES_PIKACHU_ORIGINAL_CAP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_HOENN_CAP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_SINNOH_CAP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_UNOVA_CAP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_KALOS_CAP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_ALOLA_CAP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_PARTNER_CAP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PIKACHU_WORLD_CAP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, // Pichu [SPECIES_PICHU_SPIKY_EARED] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, +#endif // Unown [SPECIES_UNOWN_B] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_UNOWN_C] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_UNOWN_D] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_UNOWN_E] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_UNOWN_F] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_UNOWN_G] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 5, }, [SPECIES_UNOWN_H] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_UNOWN_I] = { - .size = 0x37, + .size = MON_COORDS_SIZE(24, 56), .y_offset = 7, }, [SPECIES_UNOWN_J] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_UNOWN_K] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_UNOWN_L] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_UNOWN_M] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_UNOWN_N] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_UNOWN_O] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_UNOWN_P] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_UNOWN_Q] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_UNOWN_R] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_UNOWN_S] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 4, }, [SPECIES_UNOWN_T] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 13, }, [SPECIES_UNOWN_U] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_UNOWN_V] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_UNOWN_W] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_UNOWN_X] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_UNOWN_Y] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_UNOWN_Z] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_UNOWN_EMARK] = { - .size = 0x37, + .size = MON_COORDS_SIZE(24, 56), .y_offset = 6, }, [SPECIES_UNOWN_QMARK] = { - .size = 0x47, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 6, }, // Castform [SPECIES_CASTFORM_SUNNY] = { - .size = 0x48, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_CASTFORM_RAINY] = { - .size = 0x48, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 0, }, [SPECIES_CASTFORM_SNOWY] = { - .size = 0x48, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, // Deoxys [SPECIES_DEOXYS_ATTACK] = { - .size = 0x87, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_DEOXYS_DEFENSE] = { - .size = 0x87, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 8, }, [SPECIES_DEOXYS_SPEED] = { - .size = 0x87, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, +#if P_NEW_POKEMON == TRUE // Burmy [SPECIES_BURMY_SANDY_CLOAK] = { - .size = 0x57, - .y_offset = 6, + .size = MON_COORDS_SIZE(32, 56), + .y_offset = 7, }, [SPECIES_BURMY_TRASH_CLOAK] = { - .size = 0x57, - .y_offset = 6, + .size = MON_COORDS_SIZE(40, 64), + .y_offset = 0, }, // Wormadam [SPECIES_WORMADAM_SANDY_CLOAK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_WORMADAM_TRASH_CLOAK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, // Cherrim [SPECIES_CHERRIM_SUNSHINE] = { - .size = 0x57, - .y_offset = 9, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, // Shellos [SPECIES_SHELLOS_EAST_SEA] = { - .size = 0x57, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, // Gastrodon [SPECIES_GASTRODON_EAST_SEA] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, // Rotom [SPECIES_ROTOM_HEAT] = { - .size = 0x77, - .y_offset = 5, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 12, }, [SPECIES_ROTOM_WASH] = { - .size = 0x77, - .y_offset = 5, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 11, }, [SPECIES_ROTOM_FROST] = { - .size = 0x77, - .y_offset = 5, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_ROTOM_FAN] = { - .size = 0x77, - .y_offset = 5, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_ROTOM_MOW] = { - .size = 0x77, - .y_offset = 5, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, + }, + // Origin Forme + [SPECIES_DIALGA_ORIGIN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_PALKIA_ORIGIN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, - // Giratina [SPECIES_GIRATINA_ORIGIN] = { - .size = 0x65, - .y_offset = 5, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, // Shaymin [SPECIES_SHAYMIN_SKY] = { - .size = 0x65, - .y_offset = 5, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 2, }, // Arceus [SPECIES_ARCEUS_FIGHTING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_FLYING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_POISON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_GROUND] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_ROCK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_BUG] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_GHOST] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_STEEL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_FIRE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_WATER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_GRASS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_ELECTRIC] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_PSYCHIC] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_ICE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_DRAGON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_DARK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ARCEUS_FAIRY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, // Basculin [SPECIES_BASCULIN_BLUE_STRIPED] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 16, + }, + [SPECIES_BASCULIN_WHITE_STRIPED] = + { + .size = MON_COORDS_SIZE(64, 40), .y_offset = 16, }, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = { - .size = 0x66, - .y_offset = 18, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, // Deerling [SPECIES_DEERLING_SUMMER] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_DEERLING_AUTUMN] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_DEERLING_WINTER] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, // Sawsbuck [SPECIES_SAWSBUCK_SUMMER] = { - .size = 0x68, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_SAWSBUCK_AUTUMN] = { - .size = 0x68, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_SAWSBUCK_WINTER] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 5, }, // Therian Forms [SPECIES_TORNADUS_THERIAN] = { - .size = 0x66, - .y_offset = 3, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 0, }, [SPECIES_THUNDURUS_THERIAN] = { - .size = 0x66, - .y_offset = 7, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 5, }, [SPECIES_LANDORUS_THERIAN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, + [SPECIES_ENAMORUS_THERIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, // Kyurem [SPECIES_KYUREM_WHITE] = { - .size = 0x66, - .y_offset = 3, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_KYUREM_BLACK] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, // Keldeo [SPECIES_KELDEO_RESOLUTE] = { - .size = 0x78, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, // Meloetta [SPECIES_MELOETTA_PIROUETTE] = { - .size = 0x66, - .y_offset = 8, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 4, }, // Genesect [SPECIES_GENESECT_DOUSE_DRIVE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_GENESECT_SHOCK_DRIVE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_GENESECT_BURN_DRIVE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_GENESECT_CHILL_DRIVE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, // Greninja [SPECIES_GRENINJA_BATTLE_BOND] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_GRENINJA_ASH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, // Vivillon [SPECIES_VIVILLON_POLAR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_TUNDRA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_CONTINENTAL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_GARDEN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_ELEGANT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_MEADOW] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_MODERN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_MARINE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_ARCHIPELAGO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_HIGH_PLAINS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_SANDSTORM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_RIVER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_MONSOON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_SAVANNA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_SUN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_OCEAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_JUNGLE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_FANCY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_POKE_BALL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Flabébé [SPECIES_FLABEBE_YELLOW_FLOWER] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_FLABEBE_ORANGE_FLOWER] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_FLABEBE_BLUE_FLOWER] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_FLABEBE_WHITE_FLOWER] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, // Floette [SPECIES_FLOETTE_YELLOW_FLOWER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_FLOETTE_ORANGE_FLOWER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_FLOETTE_BLUE_FLOWER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_FLOETTE_WHITE_FLOWER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_FLOETTE_ETERNAL_FLOWER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, // Florges [SPECIES_FLORGES_YELLOW_FLOWER] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_FLORGES_ORANGE_FLOWER] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_FLORGES_BLUE_FLOWER] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_FLORGES_WHITE_FLOWER] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, // Furfrou [SPECIES_FURFROU_HEART_TRIM] = { - .size = 0x78, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_FURFROU_STAR_TRIM] = { - .size = 0x78, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_FURFROU_DIAMOND_TRIM] = { - .size = 0x78, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_FURFROU_DEBUTANTE_TRIM] = { - .size = 0x78, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_FURFROU_MATRON_TRIM] = { - .size = 0x78, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_FURFROU_DANDY_TRIM] = { - .size = 0x78, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_FURFROU_LA_REINE_TRIM] = { - .size = 0x78, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_FURFROU_KABUKI_TRIM] = { - .size = 0x78, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_FURFROU_PHARAOH_TRIM] = { - .size = 0x78, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, // Meowstic [SPECIES_MEOWSTIC_FEMALE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 9, }, // Aegislash [SPECIES_AEGISLASH_BLADE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 9, }, // Pumpkaboo [SPECIES_PUMPKABOO_SMALL] = { - .size = 0x76, - .y_offset = 13, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 14, }, [SPECIES_PUMPKABOO_LARGE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 13, }, [SPECIES_PUMPKABOO_SUPER] = { - .size = 0x76, - .y_offset = 13, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 12, }, // Gourgeist [SPECIES_GOURGEIST_SMALL] = { - .size = 0x68, - .y_offset = 3, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 4, }, [SPECIES_GOURGEIST_LARGE] = { - .size = 0x68, - .y_offset = 3, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, }, [SPECIES_GOURGEIST_SUPER] = { - .size = 0x68, - .y_offset = 3, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, // Xerneas [SPECIES_XERNEAS_ACTIVE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Zygarde [SPECIES_ZYGARDE_10] = { - .size = 0x77, - .y_offset = 9, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 8, }, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = { - .size = 0x77, - .y_offset = 9, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 8, }, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_ZYGARDE_COMPLETE] = { - .size = 0x88, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Hoopa [SPECIES_HOOPA_UNBOUND] = { - .size = 0x66, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Oricorio [SPECIES_ORICORIO_POM_POM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ORICORIO_PAU] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ORICORIO_SENSU] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Rockruff [SPECIES_ROCKRUFF_OWN_TEMPO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, // Lycanroc [SPECIES_LYCANROC_MIDNIGHT] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_LYCANROC_DUSK] = { - .size = 0x77, - .y_offset = 7, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, // Wishiwashi [SPECIES_WISHIWASHI_SCHOOL] = { - .size = 0x66, - .y_offset = 8, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, // Silvally [SPECIES_SILVALLY_FIGHTING] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_FLYING] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_POISON] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_GROUND] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_ROCK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_BUG] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_GHOST] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_STEEL] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_FIRE] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_WATER] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_GRASS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_ELECTRIC] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_PSYCHIC] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_ICE] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_DRAGON] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_DARK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SILVALLY_FAIRY] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, // Minior [SPECIES_MINIOR_METEOR_ORANGE] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_MINIOR_METEOR_YELLOW] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_MINIOR_METEOR_GREEN] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_MINIOR_METEOR_BLUE] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_MINIOR_METEOR_INDIGO] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_MINIOR_METEOR_VIOLET] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_MINIOR_CORE_RED] = { - .size = 0x66, - .y_offset = 18, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_MINIOR_CORE_ORANGE] = { - .size = 0x66, - .y_offset = 18, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_MINIOR_CORE_YELLOW] = { - .size = 0x66, - .y_offset = 18, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_MINIOR_CORE_GREEN] = { - .size = 0x66, - .y_offset = 18, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_MINIOR_CORE_BLUE] = { - .size = 0x66, - .y_offset = 18, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_MINIOR_CORE_INDIGO] = { - .size = 0x66, - .y_offset = 18, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_MINIOR_CORE_VIOLET] = { - .size = 0x66, - .y_offset = 18, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, // Mimikyu [SPECIES_MIMIKYU_BUSTED] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, // Necrozma [SPECIES_NECROZMA_DUSK_MANE] = { - .size = 0x88, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_NECROZMA_DAWN_WINGS] = { - .size = 0x88, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_NECROZMA_ULTRA] = { - .size = 0x88, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, // Magearna [SPECIES_MAGEARNA_ORIGINAL_COLOR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, // Cramorant [SPECIES_CRAMORANT_GULPING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_CRAMORANT_GORGING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, // Toxtricity [SPECIES_TOXTRICITY_LOW_KEY] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, // Sinistea [SPECIES_SINISTEA_ANTIQUE] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 16, }, // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, // Alcremie [SPECIES_ALCREMIE_RUBY_CREAM] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_ALCREMIE_MATCHA_CREAM] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_ALCREMIE_MINT_CREAM] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_ALCREMIE_LEMON_CREAM] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_ALCREMIE_SALTED_CREAM] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_ALCREMIE_RUBY_SWIRL] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_ALCREMIE_CARAMEL_SWIRL] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_ALCREMIE_RAINBOW_SWIRL] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, // Eiscue [SPECIES_EISCUE_NOICE_FACE] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 0, }, // Indeedee [SPECIES_INDEEDEE_FEMALE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, // Morpeko [SPECIES_MORPEKO_HANGRY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, // Zacian [SPECIES_ZACIAN_CROWNED_SWORD] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, // Zamazenta [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, // Eternatus [SPECIES_ETERNATUS_ETERNAMAX] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, // Urshifu [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, // Zarude [SPECIES_ZARUDE_DADA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, // Calyrex [SPECIES_CALYREX_ICE_RIDER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 7, }, [SPECIES_CALYREX_SHADOW_RIDER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, +#endif // Egg [SPECIES_EGG] = { - .size = 0x36, - .y_offset = 10, + .size = MON_COORDS_SIZE(24, 24), + .y_offset = 20, }, }; diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index 9d108ce836..30a711fc4e 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -387,6 +387,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(JIRACHI, gMonBackPic_Jirachi), SPECIES_SPRITE(DEOXYS, gMonBackPic_Deoxys), SPECIES_SPRITE(CHIMECHO, gMonBackPic_Chimecho), +#if P_NEW_POKEMON == TRUE SPECIES_SPRITE(TURTWIG, gMonBackPic_Turtwig), SPECIES_SPRITE(GROTLE, gMonBackPic_Grotle), SPECIES_SPRITE(TORTERRA, gMonBackPic_Torterra), @@ -899,6 +900,13 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(GLASTRIER, gMonBackPic_Glastrier), SPECIES_SPRITE(SPECTRIER, gMonBackPic_Spectrier), SPECIES_SPRITE(CALYREX, gMonBackPic_Calyrex), + SPECIES_SPRITE(WYRDEER, gMonBackPic_CircledQuestionMark), //gMonBackPic_Wyrdeer), + SPECIES_SPRITE(KLEAVOR, gMonBackPic_Kleavor), + SPECIES_SPRITE(URSALUNA, gMonBackPic_Ursaluna), + SPECIES_SPRITE(BASCULEGION, gMonBackPic_CircledQuestionMark), //gMonBackPic_Basculegion), + SPECIES_SPRITE(SNEASLER, gMonBackPic_CircledQuestionMark), //gMonBackPic_Sneasler), + SPECIES_SPRITE(OVERQWIL, gMonBackPic_Overqwil), + SPECIES_SPRITE(ENAMORUS, gMonBackPic_CircledQuestionMark), //gMonBackPic_Enamorus), SPECIES_SPRITE(VENUSAUR_MEGA, gMonBackPic_VenusaurMega), SPECIES_SPRITE(CHARIZARD_MEGA_X, gMonBackPic_CharizardMegaX), @@ -991,6 +999,23 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(YAMASK_GALARIAN, gMonBackPic_YamaskGalarian), SPECIES_SPRITE(STUNFISK_GALARIAN, gMonBackPic_StunfiskGalarian), + SPECIES_SPRITE(GROWLITHE_HISUIAN, gMonBackPic_GrowlitheHisuian), + SPECIES_SPRITE(ARCANINE_HISUIAN, gMonBackPic_ArcanineHisuian), + SPECIES_SPRITE(VOLTORB_HISUIAN, gMonBackPic_VoltorbHisuian), + SPECIES_SPRITE(ELECTRODE_HISUIAN, gMonBackPic_ElectrodeHisuian), + SPECIES_SPRITE(TYPHLOSION_HISUIAN, gMonBackPic_TyphlosionHisuian), + SPECIES_SPRITE(QWILFISH_HISUIAN, gMonBackPic_QwilfishHisuian), + SPECIES_SPRITE(SNEASEL_HISUIAN, gMonBackPic_SneaselHisuian), + SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_SamurottHisuian), + SPECIES_SPRITE(LILLIGANT_HISUIAN, gMonBackPic_LilligantHisuian), + SPECIES_SPRITE(ZORUA_HISUIAN, gMonBackPic_ZoruaHisuian), + SPECIES_SPRITE(ZOROARK_HISUIAN, gMonBackPic_ZoroarkHisuian), + SPECIES_SPRITE(BRAVIARY_HISUIAN, gMonBackPic_BraviaryHisuian), + SPECIES_SPRITE(SLIGGOO_HISUIAN, gMonBackPic_SliggooHisuian), + SPECIES_SPRITE(GOODRA_HISUIAN, gMonBackPic_GoodraHisuian), + SPECIES_SPRITE(AVALUGG_HISUIAN, gMonBackPic_AvaluggHisuian), + SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_DecidueyeHisuian), + SPECIES_SPRITE(PIKACHU_COSPLAY, gMonBackPic_PikachuCosplay), SPECIES_SPRITE(PIKACHU_ROCK_STAR, gMonBackPic_PikachuRockStar), SPECIES_SPRITE(PIKACHU_BELLE, gMonBackPic_PikachuBelle), @@ -1008,7 +1033,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(PIKACHU_WORLD_CAP, gMonBackPic_PikachuWorldCap), SPECIES_SPRITE(PICHU_SPIKY_EARED, gMonBackPic_PichuSpikyEared), - +#endif SPECIES_SPRITE(UNOWN_B, gMonBackPic_UnownB), SPECIES_SPRITE(UNOWN_C, gMonBackPic_UnownC), SPECIES_SPRITE(UNOWN_D, gMonBackPic_UnownD), @@ -1044,7 +1069,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(DEOXYS_ATTACK, gMonBackPic_DeoxysAttack), SPECIES_SPRITE(DEOXYS_DEFENSE, gMonBackPic_DeoxysDefense), SPECIES_SPRITE(DEOXYS_SPEED, gMonBackPic_DeoxysSpeed), - +#if P_NEW_POKEMON == TRUE SPECIES_SPRITE(BURMY_SANDY_CLOAK, gMonBackPic_BurmySandyCloak), SPECIES_SPRITE(BURMY_TRASH_CLOAK, gMonBackPic_BurmyTrashCloak), @@ -1063,6 +1088,8 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(ROTOM_FAN, gMonBackPic_RotomFan), SPECIES_SPRITE(ROTOM_MOW, gMonBackPic_RotomMow), + SPECIES_SPRITE(DIALGA_ORIGIN, gMonBackPic_DialgaOrigin), + SPECIES_SPRITE(PALKIA_ORIGIN, gMonBackPic_PalkiaOrigin), SPECIES_SPRITE(GIRATINA_ORIGIN, gMonBackPic_GiratinaOrigin), SPECIES_SPRITE(SHAYMIN_SKY, gMonBackPic_ShayminSky), @@ -1086,6 +1113,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(ARCEUS_FAIRY, gMonBackPic_Arceus), SPECIES_SPRITE(BASCULIN_BLUE_STRIPED, gMonBackPic_BasculinBlueStriped), + SPECIES_SPRITE(BASCULIN_WHITE_STRIPED, gMonBackPic_BasculinWhiteStriped), SPECIES_SPRITE(DARMANITAN_ZEN_MODE, gMonBackPic_DarmanitanZenMode), SPECIES_SPRITE(DARMANITAN_ZEN_MODE_GALARIAN, gMonBackPic_DarmanitanZenModeGalarian), @@ -1101,6 +1129,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(TORNADUS_THERIAN, gMonBackPic_TornadusTherian), SPECIES_SPRITE(THUNDURUS_THERIAN, gMonBackPic_ThundurusTherian), SPECIES_SPRITE(LANDORUS_THERIAN, gMonBackPic_LandorusTherian), + SPECIES_SPRITE(ENAMORUS_THERIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_EnamorusTherian), SPECIES_SPRITE(KYUREM_WHITE, gMonBackPic_KyuremWhite), SPECIES_SPRITE(KYUREM_BLACK, gMonBackPic_KyuremBlack), @@ -1271,13 +1300,21 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(CALYREX_ICE_RIDER, gMonBackPic_CalyrexIceRider), SPECIES_SPRITE(CALYREX_SHADOW_RIDER, gMonBackPic_CalyrexShadowRider), - +#endif SPECIES_SPRITE(EGG, gMonFrontPic_Egg), }; const struct CompressedSpriteSheet gMonBackPicTableFemale[] = { SPECIES_SPRITE(EEVEE, gMonBackPic_EeveeF), +#if P_NEW_POKEMON == TRUE + SPECIES_SPRITE(STARLY, gMonBackPic_StarlyF), + SPECIES_SPRITE(STARAVIA, gMonBackPic_StaraviaF), + SPECIES_SPRITE(STARAPTOR, gMonBackPic_Staraptor), + SPECIES_SPRITE(BIDOOF, gMonBackPic_BidoofF), + SPECIES_SPRITE(KRICKETOT, gMonBackPic_KricketotF), + SPECIES_SPRITE(KRICKETUNE, gMonBackPic_KricketuneF), + SPECIES_SPRITE(SHINX, gMonBackPic_ShinxF), SPECIES_SPRITE(COMBEE, gMonBackPic_Combee), SPECIES_SPRITE(HIPPOPOTAS, gMonBackPic_HippopotasF), SPECIES_SPRITE(HIPPOWDON, gMonBackPic_HippowdonF), @@ -1285,4 +1322,6 @@ const struct CompressedSpriteSheet gMonBackPicTableFemale[] = SPECIES_SPRITE(FRILLISH, gMonBackPic_FrillishF), SPECIES_SPRITE(JELLICENT, gMonBackPic_JellicentF), SPECIES_SPRITE(PYROAR, gMonBackPic_PyroarF), + SPECIES_SPRITE(BASCULEGION, gMonBackPic_CircledQuestionMark), //gMonBackPic_BasculegionF), +#endif }; diff --git a/src/data/pokemon_graphics/enemy_mon_elevation.h b/src/data/pokemon_graphics/enemy_mon_elevation.h index c0896e3feb..8499650e06 100644 --- a/src/data/pokemon_graphics/enemy_mon_elevation.h +++ b/src/data/pokemon_graphics/enemy_mon_elevation.h @@ -14,8 +14,6 @@ const u8 gEnemyMonElevation[NUM_SPECIES] = [SPECIES_MAGNETON] = 9, [SPECIES_GASTLY] = 10, [SPECIES_HAUNTER] = 11, - [SPECIES_VOLTORB] = 11, - [SPECIES_ELECTRODE] = 12, [SPECIES_KOFFING] = 14, [SPECIES_WEEZING] = 6, [SPECIES_AERODACTYL] = 9, @@ -31,6 +29,8 @@ const u8 gEnemyMonElevation[NUM_SPECIES] = [SPECIES_MISDREAVUS] = 12, [SPECIES_UNOWN] = 8, [SPECIES_GLIGAR] = 8, + [SPECIES_MANTINE] = 6, + [SPECIES_PORYGON2] = 9, [SPECIES_LUGIA] = 6, [SPECIES_HO_OH] = 6, [SPECIES_CELEBI] = 15, @@ -41,13 +41,12 @@ const u8 gEnemyMonElevation[NUM_SPECIES] = [SPECIES_WINGULL] = 15, [SPECIES_PELIPPER] = 8, [SPECIES_MASQUERAIN] = 10, - [SPECIES_BALTOY] = 1, + [SPECIES_BALTOY] = 5, [SPECIES_CLAYDOL] = 10, [SPECIES_FLYGON] = 7, [SPECIES_GLALIE] = 12, [SPECIES_LUNATONE] = 13, [SPECIES_SOLROCK] = 4, - [SPECIES_SWABLU] = 12, [SPECIES_ALTARIA] = 8, [SPECIES_DUSKULL] = 13, [SPECIES_SHUPPET] = 14, @@ -59,6 +58,7 @@ const u8 gEnemyMonElevation[NUM_SPECIES] = [SPECIES_LATIOS] = 6, [SPECIES_JIRACHI] = 14, [SPECIES_CHIMECHO] = 16, +#if P_NEW_POKEMON == TRUE // Gen 4 [SPECIES_MOTHIM] = 10, [SPECIES_COMBEE] = 8, @@ -66,11 +66,14 @@ const u8 gEnemyMonElevation[NUM_SPECIES] = [SPECIES_DRIFLOON] = 5, [SPECIES_DRIFBLIM] = 7, [SPECIES_MISMAGIUS] = 3, + [SPECIES_CHINGLING] = 5, [SPECIES_BRONZONG] = 4, [SPECIES_MAGNEZONE] = 4, [SPECIES_TOGEKISS] = 14, [SPECIES_YANMEGA] = 6, - [SPECIES_GLISCOR] = 6, + [SPECIES_GLISCOR] = 9, + [SPECIES_PORYGON_Z] = 12, + [SPECIES_PROBOPASS] = 6, [SPECIES_ROTOM] = 10, [SPECIES_UXIE] = 6, [SPECIES_MESPRIT] = 6, @@ -78,6 +81,8 @@ const u8 gEnemyMonElevation[NUM_SPECIES] = [SPECIES_CRESSELIA] = 3, [SPECIES_DARKRAI] = 4, // Gen 5 + [SPECIES_MUNNA] = 7, + [SPECIES_MUSHARNA] = 5, [SPECIES_WOOBAT] = 19, [SPECIES_SWOOBAT] = 12, [SPECIES_PETILIL] = 7, @@ -86,50 +91,185 @@ const u8 gEnemyMonElevation[NUM_SPECIES] = [SPECIES_ARCHEOPS] = 8, [SPECIES_SOLOSIS] = 14, [SPECIES_DUOSION] = 7, - [SPECIES_REUNICLUS] = 3, + [SPECIES_REUNICLUS] = 8, [SPECIES_EMOLGA] = 19, [SPECIES_TYNAMO] = 16, [SPECIES_EELEKTRIK] = 8, [SPECIES_EELEKTROSS] = 8, + [SPECIES_CRYOGONAL] = 3, [SPECIES_BRAVIARY] = 8, [SPECIES_HYDREIGON] = 3, + [SPECIES_VOLCARONA] = 6, [SPECIES_TORNADUS] = 7, [SPECIES_THUNDURUS] = 7, [SPECIES_LANDORUS] = 7, + [SPECIES_MELOETTA] = 8, // Gen 6 [SPECIES_FLETCHINDER] = 9, [SPECIES_TALONFLAME] = 7, [SPECIES_VIVILLON] = 9, + [SPECIES_FLABEBE] = 6, + [SPECIES_FLOETTE] = 4, + [SPECIES_HONEDGE] = 4, + [SPECIES_DOUBLADE] = 5, + [SPECIES_AEGISLASH] = 3, + [SPECIES_SPRITZEE] = 14, + [SPECIES_INKAY] = 14, + [SPECIES_CARBINK] = 4, + [SPECIES_KLEFKI] = 5, + [SPECIES_PHANTUMP] = 5, [SPECIES_NOIBAT] = 8, + [SPECIES_YVELTAL] = 5, [SPECIES_HOOPA] = 13, // Gen 7 [SPECIES_VIKAVOLT] = 8, [SPECIES_CUTIEFLY] = 10, + [SPECIES_RIBOMBEE] = 6, + [SPECIES_COMFEY] = 8, [SPECIES_MINIOR] = 17, + [SPECIES_DHELMISE] = 2, + [SPECIES_TAPU_KOKO] = 9, + [SPECIES_TAPU_LELE] = 8, + [SPECIES_TAPU_BULU] = 5, + [SPECIES_TAPU_FINI] = 6, + [SPECIES_COSMOG] = 7, + [SPECIES_COSMOEM] = 3, + [SPECIES_LUNALA] = 6, + [SPECIES_NIHILEGO] = 6, + [SPECIES_KARTANA] = 3, + [SPECIES_NECROZMA] = 6, + [SPECIES_POIPOLE] = 9, + [SPECIES_NAGANADEL] = 7, // Gen 8 - [SPECIES_CORVISQUIRE] = 6, + [SPECIES_CORVISQUIRE] = 10, + [SPECIES_ORBEETLE] = 8, + [SPECIES_FLAPPLE] = 9, + [SPECIES_SINISTEA] = 9, + [SPECIES_POLTEAGEIST] = 11, + [SPECIES_RUNERIGUS] = 5, + [SPECIES_MILCERY] = 10, + [SPECIES_FROSMOTH] = 7, + [SPECIES_DREEPY] = 5, + [SPECIES_DRAKLOAK] = 5, [SPECIES_DRAGAPULT] = 3, - [SPECIES_FROSMOTH] = 3, + [SPECIES_ETERNATUS] = 4, + [SPECIES_REGIELEKI] = 8, + [SPECIES_REGIDRAGO] = 5, // Megas + [SPECIES_BEEDRILL_MEGA] = 5, + [SPECIES_PIDGEOT_MEGA] = 8, + [SPECIES_ALAKAZAM_MEGA] = 7, + [SPECIES_PINSIR_MEGA] = 4, + [SPECIES_GYARADOS_MEGA] = 6, + [SPECIES_AERODACTYL_MEGA] = 7, + [SPECIES_MEWTWO_MEGA_Y] = 3, + [SPECIES_SHARPEDO_MEGA] = 1, + [SPECIES_ALTARIA_MEGA] = 6, + [SPECIES_BANETTE_MEGA] = 5, + [SPECIES_GLALIE_MEGA] = 8, + [SPECIES_METAGROSS_MEGA] = 4, [SPECIES_LATIAS_MEGA] = 8, [SPECIES_LATIOS_MEGA] = 8, - [SPECIES_METAGROSS_MEGA] = 4, - [SPECIES_GLALIE_MEGA] = 8, - [SPECIES_ALTARIA_MEGA] = 6, - [SPECIES_SHARPEDO_MEGA] = 1, - [SPECIES_PIDGEOT_MEGA] = 8, - [SPECIES_BEEDRILL_MEGA] = 5, - [SPECIES_BANETTE_MEGA] = 5, - [SPECIES_MEWTWO_MEGA_Y] = 3, - [SPECIES_AERODACTYL_MEGA] = 3, - [SPECIES_GYARADOS_MEGA] = 6, - [SPECIES_PINSIR_MEGA] = 4, - [SPECIES_ALAKAZAM_MEGA] = 7, + [SPECIES_RAYQUAZA_MEGA] = 4, + // Alolan Forms + [SPECIES_RAICHU_ALOLAN] = 4, + [SPECIES_GEODUDE_ALOLAN] = 16, // Galarian Forms - [SPECIES_WEEZING_GALARIAN] = 3, + [SPECIES_WEEZING_GALARIAN] = 6, + [SPECIES_ARTICUNO_GALARIAN] = 10, [SPECIES_YAMASK_GALARIAN] = 4, - // Misc Forms + // Hisuian Forms + [SPECIES_VOLTORB_HISUIAN] = 1, + [SPECIES_ELECTRODE_HISUIAN] = 4, + [SPECIES_BRAVIARY_HISUIAN] = 3, +#endif + // Other Forms + [SPECIES_UNOWN_B] = 8, + [SPECIES_UNOWN_C] = 8, + [SPECIES_UNOWN_D] = 8, + [SPECIES_UNOWN_E] = 8, + [SPECIES_UNOWN_F] = 8, + [SPECIES_UNOWN_G] = 8, + [SPECIES_UNOWN_H] = 8, + [SPECIES_UNOWN_I] = 8, + [SPECIES_UNOWN_J] = 8, + [SPECIES_UNOWN_K] = 8, + [SPECIES_UNOWN_L] = 8, + [SPECIES_UNOWN_M] = 8, + [SPECIES_UNOWN_N] = 8, + [SPECIES_UNOWN_O] = 8, + [SPECIES_UNOWN_P] = 8, + [SPECIES_UNOWN_Q] = 8, + [SPECIES_UNOWN_R] = 8, + [SPECIES_UNOWN_S] = 8, + [SPECIES_UNOWN_T] = 8, + [SPECIES_UNOWN_U] = 8, + [SPECIES_UNOWN_V] = 8, + [SPECIES_UNOWN_W] = 8, + [SPECIES_UNOWN_X] = 8, + [SPECIES_UNOWN_Y] = 8, + [SPECIES_UNOWN_Z] = 8, + [SPECIES_UNOWN_QMARK] = 8, + [SPECIES_UNOWN_EMARK] = 8, + [SPECIES_CASTFORM_SUNNY] = 5, + [SPECIES_CASTFORM_RAINY] = 5, + [SPECIES_CASTFORM_SNOWY] = 5, +#if P_NEW_POKEMON == TRUE + [SPECIES_ROTOM_HEAT] = 6, + [SPECIES_ROTOM_WASH] = 6, + [SPECIES_ROTOM_FROST] = 6, + [SPECIES_ROTOM_FAN] = 6, + [SPECIES_ROTOM_MOW] = 6, [SPECIES_GIRATINA_ORIGIN] = 7, [SPECIES_THUNDURUS_THERIAN] = 7, - [SPECIES_ETERNATUS_ETERNAMAX] = 4, + [SPECIES_MELOETTA_PIROUETTE] = 5, + [SPECIES_VIVILLON_POLAR] = 9, + [SPECIES_VIVILLON_TUNDRA] = 9, + [SPECIES_VIVILLON_CONTINENTAL] = 9, + [SPECIES_VIVILLON_GARDEN] = 9, + [SPECIES_VIVILLON_ELEGANT] = 9, + [SPECIES_VIVILLON_MEADOW] = 9, + [SPECIES_VIVILLON_MODERN] = 9, + [SPECIES_VIVILLON_MARINE] = 9, + [SPECIES_VIVILLON_ARCHIPELAGO] = 9, + [SPECIES_VIVILLON_HIGH_PLAINS] = 9, + [SPECIES_VIVILLON_SANDSTORM] = 9, + [SPECIES_VIVILLON_RIVER] = 9, + [SPECIES_VIVILLON_MONSOON] = 9, + [SPECIES_VIVILLON_SAVANNA] = 9, + [SPECIES_VIVILLON_SUN] = 9, + [SPECIES_VIVILLON_OCEAN] = 9, + [SPECIES_VIVILLON_JUNGLE] = 9, + [SPECIES_VIVILLON_FANCY] = 9, + [SPECIES_VIVILLON_POKE_BALL] = 9, + [SPECIES_FLABEBE_YELLOW_FLOWER] = 6, + [SPECIES_FLABEBE_ORANGE_FLOWER] = 6, + [SPECIES_FLABEBE_BLUE_FLOWER] = 6, + [SPECIES_FLABEBE_WHITE_FLOWER] = 6, + [SPECIES_FLOETTE_YELLOW_FLOWER] = 4, + [SPECIES_FLOETTE_ORANGE_FLOWER] = 4, + [SPECIES_FLOETTE_BLUE_FLOWER] = 4, + [SPECIES_FLOETTE_WHITE_FLOWER] = 4, + [SPECIES_FLOETTE_ETERNAL_FLOWER] = 4, + [SPECIES_AEGISLASH_BLADE] = 3, + [SPECIES_HOOPA_UNBOUND] = 3, + [SPECIES_MINIOR_METEOR_ORANGE] = 17, + [SPECIES_MINIOR_METEOR_YELLOW] = 17, + [SPECIES_MINIOR_METEOR_GREEN] = 17, + [SPECIES_MINIOR_METEOR_BLUE] = 17, + [SPECIES_MINIOR_METEOR_INDIGO] = 17, + [SPECIES_MINIOR_METEOR_VIOLET] = 17, + [SPECIES_MINIOR_CORE_RED] = 17, + [SPECIES_MINIOR_CORE_ORANGE] = 17, + [SPECIES_MINIOR_CORE_YELLOW] = 17, + [SPECIES_MINIOR_CORE_GREEN] = 17, + [SPECIES_MINIOR_CORE_BLUE] = 17, + [SPECIES_MINIOR_CORE_INDIGO] = 17, + [SPECIES_MINIOR_CORE_VIOLET] = 17, + [SPECIES_NECROZMA_DAWN_WINGS] = 6, + [SPECIES_NECROZMA_ULTRA] = 5, + [SPECIES_SINISTEA_ANTIQUE] = 10, + [SPECIES_POLTEAGEIST_ANTIQUE] = 12, + [SPECIES_ETERNATUS_ETERNAMAX] = 13, +#endif }; diff --git a/src/data/pokemon_graphics/footprint_table.h b/src/data/pokemon_graphics/footprint_table.h index 6ba0e7fccc..cacf582ca5 100644 --- a/src/data/pokemon_graphics/footprint_table.h +++ b/src/data/pokemon_graphics/footprint_table.h @@ -387,6 +387,7 @@ const u8 *const gMonFootprintTable[] = [SPECIES_JIRACHI] = gMonFootprint_Jirachi, [SPECIES_DEOXYS] = gMonFootprint_Deoxys, [SPECIES_CHIMECHO] = gMonFootprint_Chimecho, +#if P_NEW_POKEMON == TRUE [SPECIES_TURTWIG] = gMonFootprint_Turtwig, [SPECIES_GROTLE] = gMonFootprint_Grotle, [SPECIES_TORTERRA] = gMonFootprint_Torterra, @@ -722,5 +723,183 @@ const u8 *const gMonFootprintTable[] = [SPECIES_DIANCIE] = gMonFootprint_Diancie, [SPECIES_HOOPA] = gMonFootprint_Hoopa, [SPECIES_VOLCANION] = gMonFootprint_Volcanion, + [SPECIES_ROWLET] = gMonFootprint_Rowlet, + [SPECIES_DARTRIX] = gMonFootprint_Dartrix, + [SPECIES_DECIDUEYE] = gMonFootprint_Decidueye, + [SPECIES_LITTEN] = gMonFootprint_Litten, + [SPECIES_TORRACAT] = gMonFootprint_Torracat, + [SPECIES_INCINEROAR] = gMonFootprint_Incineroar, + [SPECIES_POPPLIO] = gMonFootprint_Popplio, + [SPECIES_BRIONNE] = gMonFootprint_Brionne, + [SPECIES_PRIMARINA] = gMonFootprint_Primarina, + [SPECIES_PIKIPEK] = gMonFootprint_Pikipek, + [SPECIES_TRUMBEAK] = gMonFootprint_Trumbeak, + [SPECIES_TOUCANNON] = gMonFootprint_Toucannon, + [SPECIES_YUNGOOS] = gMonFootprint_Yungoos, + [SPECIES_GUMSHOOS] = gMonFootprint_Gumshoos, + [SPECIES_GRUBBIN] = gMonFootprint_Grubbin, + [SPECIES_CHARJABUG] = gMonFootprint_Charjabug, + [SPECIES_VIKAVOLT] = gMonFootprint_Vikavolt, + [SPECIES_CRABRAWLER] = gMonFootprint_Crabrawler, + [SPECIES_CRABOMINABLE] = gMonFootprint_Crabominable, + [SPECIES_ORICORIO] = gMonFootprint_Oricorio, + [SPECIES_CUTIEFLY] = gMonFootprint_Cutiefly, + [SPECIES_RIBOMBEE] = gMonFootprint_Ribombee, + [SPECIES_ROCKRUFF] = gMonFootprint_Rockruff, + [SPECIES_LYCANROC] = gMonFootprint_Lycanroc, + [SPECIES_WISHIWASHI] = gMonFootprint_Wishiwashi, + [SPECIES_MAREANIE] = gMonFootprint_Mareanie, + [SPECIES_TOXAPEX] = gMonFootprint_Toxapex, + [SPECIES_MUDBRAY] = gMonFootprint_Mudbray, + [SPECIES_MUDSDALE] = gMonFootprint_Mudsdale, + [SPECIES_DEWPIDER] = gMonFootprint_Dewpider, + [SPECIES_ARAQUANID] = gMonFootprint_Araquanid, + [SPECIES_FOMANTIS] = gMonFootprint_Fomantis, + [SPECIES_LURANTIS] = gMonFootprint_Lurantis, + [SPECIES_MORELULL] = gMonFootprint_Morelull, + [SPECIES_SHIINOTIC] = gMonFootprint_Shiinotic, + [SPECIES_SALANDIT] = gMonFootprint_Salandit, + [SPECIES_SALAZZLE] = gMonFootprint_Salazzle, + [SPECIES_STUFFUL] = gMonFootprint_Stufful, + [SPECIES_BEWEAR] = gMonFootprint_Bewear, + [SPECIES_BOUNSWEET] = gMonFootprint_Bounsweet, + [SPECIES_STEENEE] = gMonFootprint_Steenee, + [SPECIES_TSAREENA] = gMonFootprint_Tsareena, + [SPECIES_COMFEY] = gMonFootprint_Comfey, + [SPECIES_ORANGURU] = gMonFootprint_Oranguru, + [SPECIES_PASSIMIAN] = gMonFootprint_Passimian, + [SPECIES_WIMPOD] = gMonFootprint_Wimpod, + [SPECIES_GOLISOPOD] = gMonFootprint_Golisopod, + [SPECIES_SANDYGAST] = gMonFootprint_Sandygast, + [SPECIES_PALOSSAND] = gMonFootprint_Palossand, + [SPECIES_PYUKUMUKU] = gMonFootprint_Pyukumuku, + [SPECIES_TYPE_NULL] = gMonFootprint_Type_Null, + [SPECIES_SILVALLY] = gMonFootprint_Silvally, + [SPECIES_MINIOR] = gMonFootprint_Minior, + [SPECIES_KOMALA] = gMonFootprint_Komala, + [SPECIES_TURTONATOR] = gMonFootprint_Turtonator, + [SPECIES_TOGEDEMARU] = gMonFootprint_Togedemaru, + [SPECIES_MIMIKYU] = gMonFootprint_Mimikyu, + [SPECIES_BRUXISH] = gMonFootprint_Bruxish, + [SPECIES_DRAMPA] = gMonFootprint_Drampa, + [SPECIES_DHELMISE] = gMonFootprint_Dhelmise, + [SPECIES_JANGMO_O] = gMonFootprint_Jangmo_o, + [SPECIES_HAKAMO_O] = gMonFootprint_Hakamo_o, + [SPECIES_KOMMO_O] = gMonFootprint_Kommo_o, + [SPECIES_TAPU_KOKO] = gMonFootprint_Tapu_Koko, + [SPECIES_TAPU_LELE] = gMonFootprint_Tapu_Lele, + [SPECIES_TAPU_BULU] = gMonFootprint_Tapu_Bulu, + [SPECIES_TAPU_FINI] = gMonFootprint_Tapu_Fini, + [SPECIES_COSMOG] = gMonFootprint_Cosmog, + [SPECIES_COSMOEM] = gMonFootprint_Cosmoem, + [SPECIES_SOLGALEO] = gMonFootprint_Solgaleo, + [SPECIES_LUNALA] = gMonFootprint_Lunala, + [SPECIES_NIHILEGO] = gMonFootprint_Nihilego, + [SPECIES_BUZZWOLE] = gMonFootprint_Buzzwole, + [SPECIES_PHEROMOSA] = gMonFootprint_Pheromosa, + [SPECIES_XURKITREE] = gMonFootprint_Xurkitree, + [SPECIES_CELESTEELA] = gMonFootprint_Celesteela, + [SPECIES_KARTANA] = gMonFootprint_Kartana, + [SPECIES_GUZZLORD] = gMonFootprint_Guzzlord, + [SPECIES_NECROZMA] = gMonFootprint_Necrozma, + [SPECIES_MAGEARNA] = gMonFootprint_Magearna, + [SPECIES_MARSHADOW] = gMonFootprint_Marshadow, + [SPECIES_POIPOLE] = gMonFootprint_Poipole, + [SPECIES_NAGANADEL] = gMonFootprint_Naganadel, + [SPECIES_STAKATAKA] = gMonFootprint_Stakataka, + [SPECIES_BLACEPHALON] = gMonFootprint_Blacephalon, + [SPECIES_ZERAORA] = gMonFootprint_Zeraora, + [SPECIES_MELTAN] = gMonFootprint_Meltan, + [SPECIES_MELMETAL] = gMonFootprint_Melmetal, + [SPECIES_GROOKEY] = gMonFootprint_Grookey, + [SPECIES_THWACKEY] = gMonFootprint_Thwackey, + [SPECIES_RILLABOOM] = gMonFootprint_Rillaboom, + [SPECIES_SCORBUNNY] = gMonFootprint_Scorbunny, + [SPECIES_RABOOT] = gMonFootprint_Raboot, + [SPECIES_CINDERACE] = gMonFootprint_Cinderace, + [SPECIES_SOBBLE] = gMonFootprint_Sobble, + [SPECIES_DRIZZILE] = gMonFootprint_Drizzile, + [SPECIES_INTELEON] = gMonFootprint_Inteleon, + [SPECIES_SKWOVET] = gMonFootprint_Skwovet, + [SPECIES_GREEDENT] = gMonFootprint_Greedent, + [SPECIES_ROOKIDEE] = gMonFootprint_Rookidee, + [SPECIES_CORVISQUIRE] = gMonFootprint_Corvisquire, + [SPECIES_CORVIKNIGHT] = gMonFootprint_Corviknight, + [SPECIES_BLIPBUG] = gMonFootprint_Blipbug, + [SPECIES_DOTTLER] = gMonFootprint_Dottler, + [SPECIES_ORBEETLE] = gMonFootprint_Orbeetle, + [SPECIES_NICKIT] = gMonFootprint_Nickit, + [SPECIES_THIEVUL] = gMonFootprint_Thievul, + [SPECIES_GOSSIFLEUR] = gMonFootprint_Gossifleur, + [SPECIES_ELDEGOSS] = gMonFootprint_Eldegoss, + [SPECIES_WOOLOO] = gMonFootprint_Wooloo, + [SPECIES_DUBWOOL] = gMonFootprint_Dubwool, + [SPECIES_CHEWTLE] = gMonFootprint_Chewtle, + [SPECIES_DREDNAW] = gMonFootprint_Drednaw, + [SPECIES_YAMPER] = gMonFootprint_Yamper, + [SPECIES_BOLTUND] = gMonFootprint_Boltund, + [SPECIES_ROLYCOLY] = gMonFootprint_Rolycoly, + [SPECIES_CARKOL] = gMonFootprint_Carkol, + [SPECIES_COALOSSAL] = gMonFootprint_Coalossal, + [SPECIES_APPLIN] = gMonFootprint_Applin, + [SPECIES_FLAPPLE] = gMonFootprint_Flapple, + [SPECIES_APPLETUN] = gMonFootprint_Appletun, + [SPECIES_SILICOBRA] = gMonFootprint_Silicobra, + [SPECIES_SANDACONDA] = gMonFootprint_Sandaconda, + [SPECIES_CRAMORANT] = gMonFootprint_Cramorant, + [SPECIES_ARROKUDA] = gMonFootprint_Arrokuda, + [SPECIES_BARRASKEWDA] = gMonFootprint_Barraskewda, + [SPECIES_TOXEL] = gMonFootprint_Toxel, + [SPECIES_TOXTRICITY] = gMonFootprint_Toxtricity, + [SPECIES_SIZZLIPEDE] = gMonFootprint_Sizzlipede, + [SPECIES_CENTISKORCH] = gMonFootprint_Centiskorch, + [SPECIES_CLOBBOPUS] = gMonFootprint_Clobbopus, + [SPECIES_GRAPPLOCT] = gMonFootprint_Grapploct, + [SPECIES_SINISTEA] = gMonFootprint_Sinistea, + [SPECIES_POLTEAGEIST] = gMonFootprint_Polteageist, + [SPECIES_HATENNA] = gMonFootprint_Hatenna, + [SPECIES_HATTREM] = gMonFootprint_Hattrem, + [SPECIES_HATTERENE] = gMonFootprint_Hatterene, + [SPECIES_IMPIDIMP] = gMonFootprint_Impidimp, + [SPECIES_MORGREM] = gMonFootprint_Morgrem, + [SPECIES_GRIMMSNARL] = gMonFootprint_Grimmsnarl, + [SPECIES_OBSTAGOON] = gMonFootprint_Obstagoon, + [SPECIES_PERRSERKER] = gMonFootprint_Perrserker, + [SPECIES_CURSOLA] = gMonFootprint_Cursola, + [SPECIES_SIRFETCHD] = gMonFootprint_Sirfetchd, + [SPECIES_MR_RIME] = gMonFootprint_Mr_Rime, + [SPECIES_RUNERIGUS] = gMonFootprint_Runerigus, + [SPECIES_MILCERY] = gMonFootprint_Milcery, + [SPECIES_ALCREMIE] = gMonFootprint_Alcremie, + [SPECIES_FALINKS] = gMonFootprint_Falinks, + [SPECIES_PINCURCHIN] = gMonFootprint_Pincurchin, + [SPECIES_SNOM] = gMonFootprint_Snom, + [SPECIES_FROSMOTH] = gMonFootprint_Frosmoth, + [SPECIES_STONJOURNER] = gMonFootprint_Stonjourner, + [SPECIES_EISCUE] = gMonFootprint_Eiscue, + [SPECIES_INDEEDEE] = gMonFootprint_Indeedee, + [SPECIES_MORPEKO] = gMonFootprint_Morpeko, + [SPECIES_CUFANT] = gMonFootprint_Cufant, + [SPECIES_COPPERAJAH] = gMonFootprint_Copperajah, + [SPECIES_DRACOZOLT] = gMonFootprint_Dracozolt, + [SPECIES_ARCTOZOLT] = gMonFootprint_Arctozolt, + [SPECIES_DRACOVISH] = gMonFootprint_Dracovish, + [SPECIES_ARCTOVISH] = gMonFootprint_Arctovish, + [SPECIES_DURALUDON] = gMonFootprint_Duraludon, + [SPECIES_DREEPY] = gMonFootprint_Dreepy, + [SPECIES_DRAKLOAK] = gMonFootprint_Drakloak, + [SPECIES_DRAGAPULT] = gMonFootprint_Dragapult, + [SPECIES_ZACIAN] = gMonFootprint_Zacian, + [SPECIES_ZAMAZENTA] = gMonFootprint_Zamazenta, + [SPECIES_ETERNATUS] = gMonFootprint_Eternatus, + [SPECIES_KUBFU] = gMonFootprint_Kubfu, + [SPECIES_URSHIFU] = gMonFootprint_Urshifu, + [SPECIES_ZARUDE] = gMonFootprint_Zarude, + [SPECIES_REGIELEKI] = gMonFootprint_Regieleki, + [SPECIES_REGIDRAGO] = gMonFootprint_Regidrago, + [SPECIES_GLASTRIER] = gMonFootprint_Glastrier, + [SPECIES_SPECTRIER] = gMonFootprint_Spectrier, + [SPECIES_CALYREX] = gMonFootprint_Calyrex, +#endif [SPECIES_EGG] = gMonFootprint_Bulbasaur, }; diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index c676e39104..9e0297c66d 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -4741,6 +4741,7 @@ static const union AnimCmd sAnim_UNOWN_QMARK_1[] = ANIMCMD_END, }; +#if P_NEW_POKEMON == TRUE static const union AnimCmd sAnim_TURTWIG_1[] = { ANIMCMD_FRAME(0, 15), @@ -9463,6 +9464,48 @@ static const union AnimCmd sAnim_CALYREX_1[] = ANIMCMD_END, }; +static const union AnimCmd sAnim_WYRDEER_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_KLEAVOR_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_URSALUNA_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_BASCULEGION_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_SNEASLER_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_OVERQWIL_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_ENAMORUS_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + static const union AnimCmd sAnim_VENUSAUR_MEGA_1[] = { ANIMCMD_FRAME(0, 1), @@ -9985,6 +10028,102 @@ static const union AnimCmd sAnim_STUNFISK_GALARIAN_1[] = ANIMCMD_END, }; +static const union AnimCmd sAnim_GROWLITHE_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_ARCANINE_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_VOLTORB_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_ELECTRODE_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_TYPHLOSION_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_QWILFISH_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_SNEASEL_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_SAMUROTT_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_LILLIGANT_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_ZORUA_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_ZOROARK_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_BRAVIARY_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_SLIGGOO_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_GOODRA_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_AVALUGG_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_DECIDUEYE_HISUIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + static const union AnimCmd sAnim_SHAYMIN_SKY_1[] = { ANIMCMD_FRAME(0, 1), @@ -9993,6 +10132,18 @@ static const union AnimCmd sAnim_SHAYMIN_SKY_1[] = ANIMCMD_END, }; +static const union AnimCmd sAnim_DIALGA_ORIGIN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_PALKIA_ORIGIN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + static const union AnimCmd sAnim_GIRATINA_ORIGIN_1[] = { ANIMCMD_FRAME(0, 11), @@ -10066,6 +10217,12 @@ static const union AnimCmd sAnim_LANDORUS_THERIAN_1[] = ANIMCMD_END, }; +static const union AnimCmd sAnim_ENAMORUS_THERIAN_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + static const union AnimCmd sAnim_KELDEO_RESOLUTE_1[] = { ANIMCMD_FRAME(0, 1), @@ -10161,7 +10318,7 @@ static const union AnimCmd sAnim_ZYGARDE_COMPLETE_1[] = ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; - +#endif static const union AnimCmd sAnim_DEOXYS_ATTACK_1[] = { ANIMCMD_FRAME(0, 16), @@ -10219,6 +10376,7 @@ static const union AnimCmd sAnim_DEOXYS_SPEED_2[] = ANIMCMD_END, }; +#if P_NEW_POKEMON == TRUE static const union AnimCmd sAnim_PIKACHU_COSPLAY_1[] = { ANIMCMD_FRAME(0, 1), @@ -10308,6 +10466,7 @@ static const union AnimCmd sAnim_PICHU_SPIKY_EARED_1[] = ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; +#endif static const union AnimCmd *const sAnims_NONE[] ={ sAnim_GeneralFrame0, @@ -12446,6 +12605,7 @@ static const union AnimCmd *const sAnims_UNOWN_QMARK[] ={ sAnim_UNOWN_QMARK_1, }; +#if P_NEW_POKEMON == TRUE static const union AnimCmd *const sAnims_TURTWIG[] ={ sAnim_GeneralFrame0, sAnim_TURTWIG_1, @@ -15067,6 +15227,41 @@ static const union AnimCmd *const sAnims_CALYREX[] ={ sAnim_CALYREX_1, }; +static const union AnimCmd *const sAnims_WYRDEER[] ={ + sAnim_GeneralFrame0, + sAnim_WYRDEER_1, +}; + +static const union AnimCmd *const sAnims_KLEAVOR[] ={ + sAnim_GeneralFrame0, + sAnim_KLEAVOR_1, +}; + +static const union AnimCmd *const sAnims_URSALUNA[] ={ + sAnim_GeneralFrame0, + sAnim_URSALUNA_1, +}; + +static const union AnimCmd *const sAnims_BASCULEGION[] ={ + sAnim_GeneralFrame0, + sAnim_BASCULEGION_1, +}; + +static const union AnimCmd *const sAnims_SNEASLER[] ={ + sAnim_GeneralFrame0, + sAnim_SNEASLER_1, +}; + +static const union AnimCmd *const sAnims_OVERQWIL[] ={ + sAnim_GeneralFrame0, + sAnim_OVERQWIL_1, +}; + +static const union AnimCmd *const sAnims_ENAMORUS[] ={ + sAnim_GeneralFrame0, + sAnim_ENAMORUS_1, +}; + static const union AnimCmd *const sAnims_VENUSAUR_MEGA[] ={ sAnim_GeneralFrame0, sAnim_VENUSAUR_MEGA_1, @@ -15502,11 +15697,101 @@ static const union AnimCmd *const sAnims_STUNFISK_GALARIAN[] ={ sAnim_STUNFISK_GALARIAN_1, }; +static const union AnimCmd *const sAnims_GROWLITHE_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_GROWLITHE_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_ARCANINE_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_ARCANINE_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_VOLTORB_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_VOLTORB_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_ELECTRODE_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_ELECTRODE_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_TYPHLOSION_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_TYPHLOSION_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_QWILFISH_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_QWILFISH_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_SNEASEL_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_SNEASEL_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_SAMUROTT_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_SAMUROTT_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_LILLIGANT_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_LILLIGANT_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_ZORUA_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_ZORUA_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_ZOROARK_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_ZOROARK_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_BRAVIARY_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_BRAVIARY_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_SLIGGOO_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_SLIGGOO_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_GOODRA_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_GOODRA_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_AVALUGG_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_AVALUGG_HISUIAN_1, +}; + +static const union AnimCmd *const sAnims_DECIDUEYE_HISUIAN[] ={ + sAnim_GeneralFrame0, + sAnim_DECIDUEYE_HISUIAN_1, +}; + static const union AnimCmd *const sAnims_SHAYMIN_SKY[] ={ sAnim_GeneralFrame0, sAnim_SHAYMIN_SKY_1, }; +static const union AnimCmd *const sAnims_DIALGA_ORIGIN[] ={ + sAnim_GeneralFrame0, + sAnim_DIALGA_ORIGIN_1, +}; + +static const union AnimCmd *const sAnims_PALKIA_ORIGIN[] ={ + sAnim_GeneralFrame0, + sAnim_PALKIA_ORIGIN_1, +}; + static const union AnimCmd *const sAnims_GIRATINA_ORIGIN[] ={ sAnim_GeneralFrame0, sAnim_GIRATINA_ORIGIN_1, @@ -15538,6 +15823,11 @@ static const union AnimCmd *const sAnims_LANDORUS_THERIAN[] ={ sAnim_LANDORUS_THERIAN_1, }; +static const union AnimCmd *const sAnims_ENAMORUS_THERIAN[] ={ + sAnim_GeneralFrame0, + sAnim_ENAMORUS_THERIAN_1, +}; + static const union AnimCmd *const sAnims_KELDEO_RESOLUTE[] ={ sAnim_GeneralFrame0, sAnim_KELDEO_RESOLUTE_1, @@ -15602,7 +15892,7 @@ static const union AnimCmd *const sAnims_ZYGARDE_COMPLETE[] ={ sAnim_GeneralFrame0, sAnim_ZYGARDE_COMPLETE_1, }; - +#endif static const union AnimCmd *const sAnims_DEOXYS_ATTACK[] ={ sAnim_GeneralFrame0, sAnim_DEOXYS_ATTACK_1, @@ -15621,6 +15911,7 @@ static const union AnimCmd *const sAnims_DEOXYS_SPEED[] ={ sAnim_DEOXYS_SPEED_2, }; +#if P_NEW_POKEMON == TRUE static const union AnimCmd *const sAnims_PIKACHU_COSPLAY[] ={ sAnim_GeneralFrame0, sAnim_PIKACHU_COSPLAY_1, @@ -15695,6 +15986,7 @@ static const union AnimCmd *const sAnims_PICHU_SPIKY_EARED[] ={ sAnim_GeneralFrame0, sAnim_PICHU_SPIKY_EARED_1, }; +#endif #define ANIM_CMD(name) [SPECIES_##name] = sAnims_##name #define ANIM_CMD_FULL(name, anims) [SPECIES_##name] = anims @@ -16088,6 +16380,7 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = ANIM_CMD(JIRACHI), ANIM_CMD(DEOXYS), ANIM_CMD(CHIMECHO), +#if P_NEW_POKEMON == TRUE ANIM_CMD(TURTWIG), ANIM_CMD(GROTLE), ANIM_CMD(TORTERRA), @@ -16600,6 +16893,13 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = ANIM_CMD(GLASTRIER), ANIM_CMD(SPECTRIER), ANIM_CMD(CALYREX), + ANIM_CMD(WYRDEER), + ANIM_CMD(KLEAVOR), + ANIM_CMD(URSALUNA), + ANIM_CMD(BASCULEGION), + ANIM_CMD(SNEASLER), + ANIM_CMD(OVERQWIL), + ANIM_CMD(ENAMORUS), ANIM_CMD(VENUSAUR_MEGA), ANIM_CMD(CHARIZARD_MEGA_X), ANIM_CMD(CHARIZARD_MEGA_Y), @@ -16687,6 +16987,22 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = ANIM_CMD(DARMANITAN_GALARIAN), ANIM_CMD(YAMASK_GALARIAN), ANIM_CMD(STUNFISK_GALARIAN), + ANIM_CMD(GROWLITHE_HISUIAN), + ANIM_CMD(ARCANINE_HISUIAN), + ANIM_CMD(VOLTORB_HISUIAN), + ANIM_CMD(ELECTRODE_HISUIAN), + ANIM_CMD(TYPHLOSION_HISUIAN), + ANIM_CMD(QWILFISH_HISUIAN), + ANIM_CMD(SNEASEL_HISUIAN), + ANIM_CMD(SAMUROTT_HISUIAN), + ANIM_CMD(LILLIGANT_HISUIAN), + ANIM_CMD(ZORUA_HISUIAN), + ANIM_CMD(ZOROARK_HISUIAN), + ANIM_CMD(BRAVIARY_HISUIAN), + ANIM_CMD(SLIGGOO_HISUIAN), + ANIM_CMD(GOODRA_HISUIAN), + ANIM_CMD(AVALUGG_HISUIAN), + ANIM_CMD(DECIDUEYE_HISUIAN), ANIM_CMD(PIKACHU_COSPLAY), ANIM_CMD(PIKACHU_ROCK_STAR), ANIM_CMD(PIKACHU_BELLE), @@ -16702,6 +17018,7 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = ANIM_CMD(PIKACHU_PARTNER_CAP), ANIM_CMD(PIKACHU_WORLD_CAP), ANIM_CMD(PICHU_SPIKY_EARED), +#endif ANIM_CMD(UNOWN_B), ANIM_CMD(UNOWN_C), ANIM_CMD(UNOWN_D), @@ -16735,6 +17052,7 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = ANIM_CMD(DEOXYS_ATTACK), ANIM_CMD(DEOXYS_DEFENSE), ANIM_CMD(DEOXYS_SPEED), +#if P_NEW_POKEMON == TRUE ANIM_CMD_FULL(BURMY_SANDY_CLOAK, sAnims_BURMY), ANIM_CMD_FULL(BURMY_TRASH_CLOAK, sAnims_BURMY), ANIM_CMD_FULL(WORMADAM_SANDY_CLOAK, sAnims_WORMADAM), @@ -16747,6 +17065,8 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = ANIM_CMD(ROTOM_FROST), ANIM_CMD(ROTOM_FAN), ANIM_CMD(ROTOM_MOW), + ANIM_CMD(DIALGA_ORIGIN), + ANIM_CMD(PALKIA_ORIGIN), ANIM_CMD(GIRATINA_ORIGIN), ANIM_CMD(SHAYMIN_SKY), ANIM_CMD_FULL(ARCEUS_FIGHTING, sAnims_ARCEUS), @@ -16767,6 +17087,7 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = ANIM_CMD_FULL(ARCEUS_DARK, sAnims_ARCEUS), ANIM_CMD_FULL(ARCEUS_FAIRY, sAnims_ARCEUS), ANIM_CMD_FULL(BASCULIN_BLUE_STRIPED, sAnims_BASCULIN), + ANIM_CMD_FULL(BASCULIN_WHITE_STRIPED, sAnims_BASCULIN), ANIM_CMD(DARMANITAN_ZEN_MODE), ANIM_CMD(DARMANITAN_ZEN_MODE_GALARIAN), ANIM_CMD_FULL(DEERLING_SUMMER, sAnims_DEERLING), @@ -16778,6 +17099,7 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = ANIM_CMD(TORNADUS_THERIAN), ANIM_CMD(THUNDURUS_THERIAN), ANIM_CMD(LANDORUS_THERIAN), + ANIM_CMD(ENAMORUS_THERIAN), ANIM_CMD(KYUREM_WHITE), ANIM_CMD(KYUREM_BLACK), ANIM_CMD(KELDEO_RESOLUTE), @@ -16908,6 +17230,7 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = ANIM_CMD_FULL(ZARUDE_DADA, sAnims_ZARUDE), ANIM_CMD_FULL(CALYREX_ICE_RIDER, sAnims_CALYREX), ANIM_CMD_FULL(CALYREX_SHADOW_RIDER, sAnims_CALYREX), +#endif ANIM_CMD(EGG), }; diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h index a344842029..4c41a50e1b 100644 --- a/src/data/pokemon_graphics/front_pic_coordinates.h +++ b/src/data/pokemon_graphics/front_pic_coordinates.h @@ -1,6110 +1,6253 @@ +// All Pokémon pics are 64x64, but this data table defines where in this 64x64 frame +// the sprite's non-transparent pixels actually are. +// .size is the dimensions of this drawn pixel area. +// .y_offset is the number of pixels between the drawn pixel area and the bottom edge. const struct MonCoords gMonFrontPicCoords[] = { [SPECIES_NONE] = { - .size = 0x88, - .y_offset = 0, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_BULBASAUR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_IVYSAUR] = { - .size = 0x56, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_VENUSAUR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_CHARMANDER] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_CHARMELEON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_CHARIZARD] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SQUIRTLE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_WARTORTLE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_BLASTOISE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_CATERPIE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_METAPOD] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_BUTTERFREE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 10, }, [SPECIES_WEEDLE] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_KAKUNA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(24, 48), .y_offset = 11, }, [SPECIES_BEEDRILL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_PIDGEY] = { - .size = 0x65, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_PIDGEOTTO] = { - .size = 0x67, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_PIDGEOT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_RATTATA] = { - .size = 0x44, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_RATICATE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SPEAROW] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_FEAROW] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_EKANS] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_ARBOK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_PIKACHU] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_RAICHU] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SANDSHREW] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_SANDSLASH] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_NIDORAN_F] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_NIDORINA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_NIDOQUEEN] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_NIDORAN_M] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_NIDORINO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_NIDOKING] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_CLEFAIRY] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_CLEFABLE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_VULPIX] = { - .size = 0x65, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_NINETALES] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_JIGGLYPUFF] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_WIGGLYTUFF] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 4, }, [SPECIES_ZUBAT] = { - .size = 0x67, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 16, }, [SPECIES_GOLBAT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_ODDISH] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_GLOOM] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_VILEPLUME] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_PARAS] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_PARASECT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_VENONAT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 8, }, [SPECIES_VENOMOTH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_DIGLETT] = { - .size = 0x54, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_DUGTRIO] = { - .size = 0x75, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_MEOWTH] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_PERSIAN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PSYDUCK] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_GOLDUCK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_MANKEY] = { - .size = 0x65, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_PRIMEAPE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GROWLITHE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_ARCANINE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_POLIWAG] = { - .size = 0x74, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_POLIWHIRL] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_POLIWRATH] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_ABRA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_KADABRA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_ALAKAZAM] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_MACHOP] = { - .size = 0x56, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_MACHOKE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_MACHAMP] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BELLSPROUT] = { - .size = 0x65, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_WEEPINBELL] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_VICTREEBEL] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_TENTACOOL] = { - .size = 0x46, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_TENTACRUEL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_GEODUDE] = { - .size = 0x54, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 19, }, [SPECIES_GRAVELER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_GOLEM] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_PONYTA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_RAPIDASH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SLOWPOKE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_SLOWBRO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_MAGNEMITE] = { - .size = 0x43, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 20, }, [SPECIES_MAGNETON] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_FARFETCHD] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_DODUO] = { - .size = 0x57, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_DODRIO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SEEL] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_DEWGONG] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_GRIMER] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_MUK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_SHELLDER] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_CLOYSTER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_GASTLY] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 13, }, [SPECIES_HAUNTER] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 13, }, [SPECIES_GENGAR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_ONIX] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_DROWZEE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_HYPNO] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_KRABBY] = { - .size = 0x65, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 14, }, [SPECIES_KINGLER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_VOLTORB] = { - .size = 0x44, - .y_offset = 15, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 11, }, [SPECIES_ELECTRODE] = { - .size = 0x55, - .y_offset = 11, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_EXEGGCUTE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_EXEGGUTOR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CUBONE] = { - .size = 0x55, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_MAROWAK] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 8, }, [SPECIES_HITMONLEE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_HITMONCHAN] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_LICKITUNG] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_KOFFING] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_WEEZING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_RHYHORN] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_RHYDON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_CHANSEY] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_TANGELA] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_KANGASKHAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_HORSEA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_SEADRA] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GOLDEEN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_SEAKING] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_STARYU] = { - .size = 0x66, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_STARMIE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_MR_MIME] = { - .size = 0x66, - .y_offset = 8, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_SCYTHER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_JYNX] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_ELECTABUZZ] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_MAGMAR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PINSIR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_TAUROS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_MAGIKARP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_GYARADOS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_LAPRAS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_DITTO] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_EEVEE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_VAPOREON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_JOLTEON] = { - .size = 0x76, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_FLAREON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 11, }, [SPECIES_PORYGON] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_OMANYTE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_OMASTAR] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_KABUTO] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_KABUTOPS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_AERODACTYL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_SNORLAX] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_ARTICUNO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_ZAPDOS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_MOLTRES] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_DRATINI] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_DRAGONAIR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_DRAGONITE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MEWTWO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MEW] = { - .size = 0x55, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_CHIKORITA] = { - .size = 0x75, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_BAYLEEF] = { - .size = 0x77, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_MEGANIUM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_CYNDAQUIL] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_QUILAVA] = { - .size = 0x76, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_TYPHLOSION] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_TOTODILE] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_CROCONAW] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_FERALIGATR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SENTRET] = { - .size = 0x47, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 2, }, [SPECIES_FURRET] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_HOOTHOOT] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_NOCTOWL] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 2, }, [SPECIES_LEDYBA] = { - .size = 0x56, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_LEDIAN] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_SPINARAK] = { - .size = 0x54, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 16, }, [SPECIES_ARIADOS] = { - .size = 0x87, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_CROBAT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_CHINCHOU] = { - .size = 0x75, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 12, }, [SPECIES_LANTURN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_PICHU] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_CLEFFA] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 18, }, [SPECIES_IGGLYBUFF] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_TOGEPI] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 16, }, [SPECIES_TOGETIC] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 8, }, [SPECIES_NATU] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_XATU] = { - .size = 0x47, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 5, }, [SPECIES_MAREEP] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 12, }, [SPECIES_FLAAFFY] = { - .size = 0x56, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_AMPHAROS] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_BELLOSSOM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_MARILL] = { - .size = 0x65, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_AZUMARILL] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 6, }, [SPECIES_SUDOWOODO] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_POLITOED] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_HOPPIP] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 14, }, [SPECIES_SKIPLOOM] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_JUMPLUFF] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_AIPOM] = { - .size = 0x58, + .size = MON_COORDS_SIZE(32, 64), .y_offset = 1, }, [SPECIES_SUNKERN] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 17, }, [SPECIES_SUNFLORA] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_YANMA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_WOOPER] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_QUAGSIRE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_ESPEON] = { - .size = 0x66, - .y_offset = 8, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 9, }, [SPECIES_UMBREON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_MURKROW] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_SLOWKING] = { - .size = 0x58, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 1, }, [SPECIES_MISDREAVUS] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 13, }, [SPECIES_UNOWN] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 15, }, [SPECIES_WOBBUFFET] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_GIRAFARIG] = { - .size = 0x88, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_PINECO] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_FORRETRESS] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_DUNSPARCE] = { - .size = 0x74, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_GLIGAR] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_STEELIX] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SNUBBULL] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_GRANBULL] = { - .size = 0x57, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_QWILFISH] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_SCIZOR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_SHUCKLE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_HERACROSS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SNEASEL] = { - .size = 0x67, - .y_offset = 7, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_TEDDIURSA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_URSARING] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SLUGMA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 12, }, [SPECIES_MAGCARGO] = { - .size = 0x57, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 6, }, [SPECIES_SWINUB] = { - .size = 0x43, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 18, }, [SPECIES_PILOSWINE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_CORSOLA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_REMORAID] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_OCTILLERY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_DELIBIRD] = { - .size = 0x56, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_MANTINE] = { - .size = 0x88, - .y_offset = 5, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 9, }, [SPECIES_SKARMORY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_HOUNDOUR] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_HOUNDOOM] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_KINGDRA] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_PHANPY] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_DONPHAN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_PORYGON2] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_STANTLER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_SMEARGLE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_TYROGUE] = { - .size = 0x46, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_HITMONTOP] = { - .size = 0x67, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_SMOOCHUM] = { - .size = 0x35, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 13, }, [SPECIES_ELEKID] = { - .size = 0x76, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_MAGBY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 11, }, [SPECIES_MILTANK] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_BLISSEY] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_RAIKOU] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_ENTEI] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_SUICUNE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_LARVITAR] = { - .size = 0x46, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_PUPITAR] = { - .size = 0x56, - .y_offset = 11, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 9, }, [SPECIES_TYRANITAR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LUGIA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_HO_OH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CELEBI] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_TREECKO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_GROVYLE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_SCEPTILE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TORCHIC] = { - .size = 0x56, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 12, }, [SPECIES_COMBUSKEN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_BLAZIKEN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_MUDKIP] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_MARSHTOMP] = { - .size = 0x67, - .y_offset = 5, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_SWAMPERT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_POOCHYENA] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_MIGHTYENA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ZIGZAGOON] = { - .size = 0x85, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_LINOONE] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_WURMPLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_SILCOON] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_BEAUTIFLY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_CASCOON] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_DUSTOX] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 12, }, [SPECIES_LOTAD] = { - .size = 0x65, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_LOMBRE] = { - .size = 0x66, - .y_offset = 8, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_LUDICOLO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SEEDOT] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_NUZLEAF] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_SHIFTRY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_NINCADA] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 16, }, [SPECIES_NINJASK] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_SHEDINJA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_TAILLOW] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_SWELLOW] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_SHROOMISH] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_BRELOOM] = { - .size = 0x77, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_SPINDA] = { - .size = 0x68, - .y_offset = 8, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 1, }, [SPECIES_WINGULL] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_PELIPPER] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_SURSKIT] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_MASQUERAIN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_WAILMER] = { - .size = 0x75, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_WAILORD] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_SKITTY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_DELCATTY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_KECLEON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_BALTOY] = { - .size = 0x55, - .y_offset = 8, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 11, }, [SPECIES_CLAYDOL] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_NOSEPASS] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_TORKOAL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SABLEYE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_BARBOACH] = { - .size = 0x46, - .y_offset = 12, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 11, }, [SPECIES_WHISCASH] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_LUVDISC] = { - .size = 0x46, - .y_offset = 14, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 11, }, [SPECIES_CORPHISH] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_CRAWDAUNT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_FEEBAS] = { - .size = 0x46, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_MILOTIC] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_CARVANHA] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_SHARPEDO] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TRAPINCH] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_VIBRAVA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_FLYGON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_MAKUHITA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_HARIYAMA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ELECTRIKE] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_MANECTRIC] = { - .size = 0x67, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_NUMEL] = { - .size = 0x65, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_CAMERUPT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SPHEAL] = { - .size = 0x65, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_SEALEO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_WALREIN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_CACNEA] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_CACTURNE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SNORUNT] = { - .size = 0x56, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_GLALIE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 8, }, [SPECIES_LUNATONE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SOLROCK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_AZURILL] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_SPOINK] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_GRUMPIG] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_PLUSLE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_MINUN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_MAWILE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_MEDITITE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_MEDICHAM] = { - .size = 0x68, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 0, }, [SPECIES_SWABLU] = { - .size = 0x76, - .y_offset = 14, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_ALTARIA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_WYNAUT] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_DUSKULL] = { - .size = 0x66, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 12, }, [SPECIES_DUSCLOPS] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ROSELIA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_SLAKOTH] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 15, }, [SPECIES_VIGOROTH] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_SLAKING] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_GULPIN] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 15, }, [SPECIES_SWALOT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_TROPIUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_WHISMUR] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_LOUDRED] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_EXPLOUD] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CLAMPERL] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_HUNTAIL] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_GOREBYSS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_ABSOL] = { - .size = 0x68, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_SHUPPET] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_BANETTE] = { - .size = 0x55, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_SEVIPER] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_ZANGOOSE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_RELICANTH] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 10, }, [SPECIES_ARON] = { - .size = 0x43, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_LAIRON] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_AGGRON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CASTFORM] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 17, }, [SPECIES_VOLBEAT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_ILLUMISE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_LILEEP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_CRADILY] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_ANORITH] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_ARMALDO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_RALTS] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 12, }, [SPECIES_KIRLIA] = { - .size = 0x47, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 6, }, [SPECIES_GARDEVOIR] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BAGON] = { - .size = 0x56, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_SHELGON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SALAMENCE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_BELDUM] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_METANG] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_METAGROSS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_REGIROCK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_REGICE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_REGISTEEL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_KYOGRE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_GROUDON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_RAYQUAZA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LATIAS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_LATIOS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_JIRACHI] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 13, }, [SPECIES_DEOXYS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CHIMECHO] = { - .size = 0x37, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, +#if P_NEW_POKEMON == TRUE [SPECIES_TURTWIG] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_GROTLE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_TORTERRA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CHIMCHAR] = { - .size = 0x55, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_MONFERNO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 8, }, [SPECIES_INFERNAPE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_PIPLUP] = { - .size = 0x65, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 14, }, [SPECIES_PRINPLUP] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_EMPOLEON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_STARLY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_STARAVIA] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_STARAPTOR] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_BIDOOF] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_BIBAREL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_KRICKETOT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_KRICKETUNE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_SHINX] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_LUXIO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_LUXRAY] = { - .size = 0x44, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_BUDEW] = { - .size = 0x66, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_ROSERADE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_CRANIDOS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_RAMPARDOS] = { - .size = 0x65, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SHIELDON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_BASTIODON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_BURMY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 13, }, [SPECIES_WORMADAM] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 10, }, [SPECIES_MOTHIM] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 12, }, [SPECIES_COMBEE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 16, }, [SPECIES_VESPIQUEN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_PACHIRISU] = { - .size = 0x78, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 12, }, [SPECIES_BUIZEL] = { - .size = 0x55, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_FLOATZEL] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_CHERUBI] = { - .size = 0x78, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_CHERRIM] = { - .size = 0x55, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 8, }, [SPECIES_SHELLOS] = { - .size = 0x66, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_GASTRODON] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_AMBIPOM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_DRIFLOON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 7, }, [SPECIES_DRIFBLIM] = { - .size = 0x67, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_BUNEARY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(32, 64), .y_offset = 9, }, [SPECIES_LOPUNNY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_MISMAGIUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_HONCHKROW] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GLAMEOW] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 8, }, [SPECIES_PURUGLY] = { - .size = 0x55, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_CHINGLING] = { - .size = 0x86, - .y_offset = 15, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_STUNKY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 13, }, [SPECIES_SKUNTANK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_BRONZOR] = { - .size = 0x54, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_BRONZONG] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_BONSLY] = { - .size = 0x55, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_MIME_JR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 9, }, [SPECIES_HAPPINY] = { - .size = 0x56, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 12, }, [SPECIES_CHATOT] = { - .size = 0x78, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_SPIRITOMB] = { - .size = 0x65, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_GIBLE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_GABITE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_GARCHOMP] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MUNCHLAX] = { - .size = 0x74, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_RIOLU] = { - .size = 0x76, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_LUCARIO] = { - .size = 0x76, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_HIPPOPOTAS] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_HIPPOWDON] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SKORUPI] = { - .size = 0x87, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_DRAPION] = { - .size = 0x56, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_CROAGUNK] = { - .size = 0x67, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_TOXICROAK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_CARNIVINE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_FINNEON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_LUMINEON] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_MANTYKE] = { - .size = 0x46, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 12, }, [SPECIES_SNOVER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_ABOMASNOW] = { - .size = 0x54, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_WEAVILE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_MAGNEZONE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_LICKILICKY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_RHYPERIOR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_TANGROWTH] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_ELECTIVIRE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MAGMORTAR] = { - .size = 0x43, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TOGEKISS] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 10, }, [SPECIES_YANMEGA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_LEAFEON] = { - .size = 0x57, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_GLACEON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 10, }, [SPECIES_GLISCOR] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_MAMOSWINE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PORYGON_Z] = { - .size = 0x65, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 6, }, [SPECIES_GALLADE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_PROBOPASS] = { - .size = 0x55, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_DUSKNOIR] = { - .size = 0x87, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_FROSLASS] = { - .size = 0x77, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_ROTOM] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_UXIE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_MESPRIT] = { - .size = 0x78, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_AZELF] = { - .size = 0x77, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_DIALGA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PALKIA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_HEATRAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_REGIGIGAS] = { - .size = 0x44, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_GIRATINA] = { - .size = 0x55, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CRESSELIA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_PHIONE] = { - .size = 0x88, - .y_offset = 9, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 8, }, [SPECIES_MANAPHY] = { - .size = 0x55, - .y_offset = 13, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 10, }, [SPECIES_DARKRAI] = { - .size = 0x76, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SHAYMIN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_ARCEUS] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VICTINI] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 10, }, [SPECIES_SNIVY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_SERVINE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_SERPERIOR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_TEPIG] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 15, }, [SPECIES_PIGNITE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 8, }, [SPECIES_EMBOAR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_OSHAWOTT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_DEWOTT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_SAMUROTT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PATRAT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_WATCHOG] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 64), .y_offset = 2, }, [SPECIES_LILLIPUP] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_HERDIER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_STOUTLAND] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_PURRLOIN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_LIEPARD] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_PANSAGE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_SIMISAGE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_PANSEAR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_SIMISEAR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_PANPOUR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_SIMIPOUR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_MUNNA] = { - .size = 0x45, - .y_offset = 16, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 14, }, [SPECIES_MUSHARNA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_PIDOVE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_TRANQUILL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_UNFEZANT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_BLITZLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 5, }, [SPECIES_ZEBSTRIKA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ROGGENROLA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 14, }, [SPECIES_BOLDORE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_GIGALITH] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_WOOBAT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_SWOOBAT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_DRILBUR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_EXCADRILL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_AUDINO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_TIMBURR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_GURDURR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CONKELDURR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_TYMPOLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_PALPITOAD] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_SEISMITOAD] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_THROH] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_SAWK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_SEWADDLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_SWADLOON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 12, }, [SPECIES_LEAVANNY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_VENIPEDE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 16, }, [SPECIES_WHIRLIPEDE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_SCOLIPEDE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_COTTONEE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 18, }, [SPECIES_WHIMSICOTT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_PETILIL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 12, }, [SPECIES_LILLIGANT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_BASCULIN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_SANDILE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 18, }, [SPECIES_KROKOROK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_KROOKODILE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_DARUMAKA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_DARMANITAN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_MARACTUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_DWEBBLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_CRUSTLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_SCRAGGY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_SCRAFTY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_SIGILYPH] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_YAMASK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_COFAGRIGUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TIRTOUGA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 16, }, [SPECIES_CARRACOSTA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_ARCHEN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_ARCHEOPS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_TRUBBISH] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_GARBODOR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_ZORUA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_ZOROARK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_MINCCINO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_CINCCINO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_GOTHITA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_GOTHORITA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_GOTHITELLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_SOLOSIS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_DUOSION] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 12, }, [SPECIES_REUNICLUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_DUCKLETT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_SWANNA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_VANILLITE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_VANILLISH] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 5, }, [SPECIES_VANILLUXE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_DEERLING] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 11, }, [SPECIES_SAWSBUCK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_EMOLGA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 17, }, [SPECIES_KARRABLAST] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 13, }, [SPECIES_ESCAVALIER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_FOONGUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_AMOONGUSS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 8, }, [SPECIES_FRILLISH] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_JELLICENT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_ALOMOMOLA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 64), .y_offset = 0, }, [SPECIES_JOLTIK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_GALVANTULA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_FERROSEED] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_FERROTHORN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_KLINK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_KLANG] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_KLINKLANG] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_TYNAMO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 24), .y_offset = 22, }, [SPECIES_EELEKTRIK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 6, }, [SPECIES_EELEKTROSS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_ELGYEM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 11, }, [SPECIES_BEHEEYEM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_LITWICK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_LAMPENT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_CHANDELURE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_AXEW] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 12, }, [SPECIES_FRAXURE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_HAXORUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CUBCHOO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_BEARTIC] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_CRYOGONAL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SHELMET] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_ACCELGOR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_STUNFISK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 14, }, [SPECIES_MIENFOO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_MIENSHAO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_DRUDDIGON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_GOLETT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_GOLURK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PAWNIARD] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_BISHARP] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_BOUFFALANT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_RUFFLET] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_BRAVIARY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_VULLABY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_MANDIBUZZ] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 1, }, [SPECIES_HEATMOR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_DURANT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 17, }, [SPECIES_DEINO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_ZWEILOUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_HYDREIGON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LARVESTA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 13, }, [SPECIES_VOLCARONA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_COBALION] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_TERRAKION] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_VIRIZION] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 2, }, [SPECIES_TORNADUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_THUNDURUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_RESHIRAM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_ZEKROM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LANDORUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_KYUREM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 6, }, [SPECIES_KELDEO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_MELOETTA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_GENESECT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, - // Gen 6 and 7 [SPECIES_CHESPIN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_QUILLADIN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_CHESNAUGHT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_FENNEKIN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_BRAIXEN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 4, }, [SPECIES_DELPHOX] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_FROAKIE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_FROGADIER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_GRENINJA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_BUNNELBY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 5, }, [SPECIES_DIGGERSBY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_FLETCHLING] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_FLETCHINDER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_TALONFLAME] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SCATTERBUG] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 13, }, [SPECIES_SPEWPA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_VIVILLON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LITLEO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_PYROAR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_FLABEBE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_FLOETTE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_FLORGES] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SKIDDO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_GOGOAT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_PANCHAM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 12, }, [SPECIES_PANGORO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_FURFROU] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_ESPURR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_MEOWSTIC] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_HONEDGE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_DOUBLADE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_AEGISLASH] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SPRITZEE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 12, }, [SPECIES_AROMATISSE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_SWIRLIX] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_SLURPUFF] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_INKAY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 14, }, [SPECIES_MALAMAR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BINACLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_BARBARACLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SKRELP] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_DRAGALGE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CLAUNCHER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_CLAWITZER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 10, }, [SPECIES_HELIOPTILE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_HELIOLISK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_TYRUNT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_TYRANTRUM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_AMAURA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 8, }, [SPECIES_AURORUS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SYLVEON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_HAWLUCHA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_DEDENNE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_CARBINK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_GOOMY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 13, }, [SPECIES_SLIGGOO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 64), .y_offset = 6, }, [SPECIES_GOODRA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_KLEFKI] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 4, }, [SPECIES_PHANTUMP] = { - .size = 0x45, - .y_offset = 10, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_TREVENANT] = { - .size = 0x45, - .y_offset = 0, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_PUMPKABOO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_GOURGEIST] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 4, }, [SPECIES_BERGMITE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_AVALUGG] = { - .size = 0x45, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_NOIBAT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_NOIVERN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_XERNEAS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_YVELTAL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ZYGARDE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_DIANCIE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 1, }, [SPECIES_HOOPA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_VOLCANION] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ROWLET] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_DARTRIX] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_DECIDUEYE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_LITTEN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_TORRACAT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_INCINEROAR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_POPPLIO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_BRIONNE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_PRIMARINA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PIKIPEK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_TRUMBEAK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_TOUCANNON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_YUNGOOS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_GUMSHOOS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_GRUBBIN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 17, }, [SPECIES_CHARJABUG] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_VIKAVOLT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_CRABRAWLER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_CRABOMINABLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ORICORIO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_CUTIEFLY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 16, }, [SPECIES_RIBOMBEE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_ROCKRUFF] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_LYCANROC] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_WISHIWASHI] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 24), .y_offset = 15, }, [SPECIES_MAREANIE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_TOXAPEX] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_MUDBRAY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_MUDSDALE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_DEWPIDER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 13, }, [SPECIES_ARAQUANID] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_FOMANTIS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_LURANTIS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 2, }, [SPECIES_MORELULL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(24, 48), .y_offset = 10, }, [SPECIES_SHIINOTIC] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_SALANDIT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_SALAZZLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_STUFFUL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_BEWEAR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_BOUNSWEET] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 16, }, [SPECIES_STEENEE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_TSAREENA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_COMFEY] = { - .size = 0x45, - .y_offset = 3, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_ORANGURU] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_PASSIMIAN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_WIMPOD] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_GOLISOPOD] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SANDYGAST] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_PALOSSAND] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PYUKUMUKU] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_TYPE_NULL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_SILVALLY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MINIOR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_KOMALA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_TURTONATOR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TOGEDEMARU] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_MIMIKYU] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_BRUXISH] = { - .size = 0x45, - .y_offset = 10, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_DRAMPA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_DHELMISE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 1, }, [SPECIES_JANGMO_O] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_HAKAMO_O] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_KOMMO_O] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TAPU_KOKO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_TAPU_LELE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_TAPU_BULU] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_TAPU_FINI] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_COSMOG] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_COSMOEM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SOLGALEO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LUNALA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_NIHILEGO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_BUZZWOLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PHEROMOSA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_XURKITREE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CELESTEELA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_KARTANA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_GUZZLORD] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_NECROZMA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_MAGEARNA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_MARSHADOW] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 9, }, [SPECIES_POIPOLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 8, }, [SPECIES_NAGANADEL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_STAKATAKA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BLACEPHALON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_ZERAORA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_MELTAN] = { - .size = 0x45, - .y_offset = 8, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 11, }, [SPECIES_MELMETAL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_GROOKEY] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 12, }, [SPECIES_THWACKEY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_RILLABOOM] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SCORBUNNY] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 8, }, [SPECIES_RABOOT] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_CINDERACE] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 0, }, [SPECIES_SOBBLE] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 11, }, [SPECIES_DRIZZILE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_INTELEON] = { - .size = 0x86, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 1, }, [SPECIES_SKWOVET] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_GREEDENT] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 4, }, [SPECIES_ROOKIDEE] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 16, }, [SPECIES_CORVISQUIRE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_CORVIKNIGHT] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_BLIPBUG] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_DOTTLER] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_ORBEETLE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_NICKIT] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_THIEVUL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_GOSSIFLEUR] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 11, }, [SPECIES_ELDEGOSS] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_WOOLOO] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_DUBWOOL] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_CHEWTLE] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 13, }, [SPECIES_DREDNAW] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_YAMPER] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_BOLTUND] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_ROLYCOLY] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 16, }, [SPECIES_CARKOL] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_COALOSSAL] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_APPLIN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 16, }, [SPECIES_FLAPPLE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_APPLETUN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_SILICOBRA] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_SANDACONDA] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_CRAMORANT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARROKUDA] = { - .size = 0x74, - .y_offset = 17, + .size = MON_COORDS_SIZE(56, 32), + .y_offset = 13, }, [SPECIES_BARRASKEWDA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_TOXEL] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_TOXTRICITY] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 1, }, [SPECIES_SIZZLIPEDE] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 17, }, [SPECIES_CENTISKORCH] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_CLOBBOPUS] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_GRAPPLOCT] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_SINISTEA] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 17, }, [SPECIES_POLTEAGEIST] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_HATENNA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 12, }, [SPECIES_HATTREM] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_HATTERENE] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_IMPIDIMP] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_MORGREM] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_GRIMMSNARL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OBSTAGOON] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_PERRSERKER] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 2, }, [SPECIES_CURSOLA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SIRFETCHD] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MR_RIME] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 4, }, [SPECIES_RUNERIGUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_MILCERY] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_ALCREMIE] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_FALINKS] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_PINCURCHIN] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_SNOM] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 20, }, [SPECIES_FROSMOTH] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_STONJOURNER] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 2, }, [SPECIES_EISCUE] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 0, }, [SPECIES_INDEEDEE] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 9, }, [SPECIES_MORPEKO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_CUFANT] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_COPPERAJAH] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_DRACOZOLT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_ARCTOZOLT] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_DRACOVISH] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_ARCTOVISH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_DURALUDON] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_DREEPY] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_DRAKLOAK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_DRAGAPULT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_ZACIAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ZAMAZENTA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ETERNATUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_KUBFU] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_URSHIFU] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_ZARUDE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_REGIELEKI] = { - .size = 0x86, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_REGIDRAGO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_GLASTRIER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SPECTRIER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CALYREX] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 2, }, + [SPECIES_WYRDEER] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_KLEAVOR] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, + }, + [SPECIES_URSALUNA] = + { + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, + }, + [SPECIES_BASCULEGION] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_SNEASLER] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_OVERQWIL] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_ENAMORUS] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, // Megas [SPECIES_VENUSAUR_MEGA] = { - .size = 0, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_CHARIZARD_MEGA_X] = { - .size = 0, - .y_offset = 1, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_CHARIZARD_MEGA_Y] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BLASTOISE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BEEDRILL_MEGA] = { - .size = 0, - .y_offset = 0, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_PIDGEOT_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ALAKAZAM_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SLOWBRO_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_GENGAR_MEGA] = { - .size = 0, - .y_offset = 8, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 7, }, [SPECIES_KANGASKHAN_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_PINSIR_MEGA] = { - .size = 0, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_GYARADOS_MEGA] = { - .size = 0, - .y_offset = 1, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_AERODACTYL_MEGA] = { - .size = 0, - .y_offset = 0, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_MEWTWO_MEGA_X] = { - .size = 0, - .y_offset = 1, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 0, }, [SPECIES_MEWTWO_MEGA_Y] = { - .size = 0, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 0, }, [SPECIES_AMPHAROS_MEGA] = { - .size = 0, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_STEELIX_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SCIZOR_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_HERACROSS_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_HOUNDOOM_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TYRANITAR_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SCEPTILE_MEGA] = { - .size = 0, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_BLAZIKEN_MEGA] = { - .size = 0, - .y_offset = 1, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SWAMPERT_MEGA] = { - .size = 0, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_GARDEVOIR_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SABLEYE_MEGA] = { - .size = 0, - .y_offset = 7, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 5, }, [SPECIES_MAWILE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 5, }, [SPECIES_AGGRON_MEGA] = { - .size = 0, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_MEDICHAM_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MANECTRIC_MEGA] = { - .size = 0, - .y_offset = 3, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_SHARPEDO_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CAMERUPT_MEGA] = { - .size = 0, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 4, }, [SPECIES_ALTARIA_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BANETTE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ABSOL_MEGA] = { - .size = 0, - .y_offset = 5, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_GLALIE_MEGA] = { - .size = 0, - .y_offset = 4, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_SALAMENCE_MEGA] = { - .size = 0, - .y_offset = 5, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_METAGROSS_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LATIAS_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LATIOS_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LOPUNNY_MEGA] = { - .size = 0, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_GARCHOMP_MEGA] = { - .size = 0, - .y_offset = 3, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_LUCARIO_MEGA] = { - .size = 0, - .y_offset = 0, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, }, [SPECIES_ABOMASNOW_MEGA] = { - .size = 0, - .y_offset = 0, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_GALLADE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_AUDINO_MEGA] = { - .size = 0, - .y_offset = 5, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 6, }, [SPECIES_DIANCIE_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Special Mega + Primals [SPECIES_RAYQUAZA_MEGA] = { - .size = 0, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_KYOGRE_PRIMAL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_GROUDON_PRIMAL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Alolan Forms [SPECIES_RATTATA_ALOLAN] = { - .size = 0x44, - .y_offset = 13, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 11, }, [SPECIES_RATICATE_ALOLAN] = { - .size = 0x66, - .y_offset = 6, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_RAICHU_ALOLAN] = { - .size = 0x67, - .y_offset = 3, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SANDSHREW_ALOLAN] = { - .size = 0x55, - .y_offset = 11, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 13, }, [SPECIES_SANDSLASH_ALOLAN] = { - .size = 0x76, - .y_offset = 6, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_VULPIX_ALOLAN] = { - .size = 0x65, - .y_offset = 11, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_NINETALES_ALOLAN] = { - .size = 0x88, - .y_offset = 3, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_DIGLETT_ALOLAN] = { - .size = 0x54, - .y_offset = 17, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 19, }, [SPECIES_DUGTRIO_ALOLAN] = { - .size = 0x75, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_MEOWTH_ALOLAN] = { - .size = 0x55, - .y_offset = 10, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_PERSIAN_ALOLAN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_GEODUDE_ALOLAN] = { - .size = 0x54, - .y_offset = 19, + .size = MON_COORDS_SIZE(48, 32), + .y_offset = 17, }, [SPECIES_GRAVELER_ALOLAN] = { - .size = 0x87, - .y_offset = 9, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 8, }, [SPECIES_GOLEM_ALOLAN] = { - .size = 0x77, - .y_offset = 6, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_GRIMER_ALOLAN] = { - .size = 0x65, - .y_offset = 9, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_MUK_ALOLAN] = { - .size = 0x87, - .y_offset = 7, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_EXEGGUTOR_ALOLAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MAROWAK_ALOLAN] = { - .size = 0x76, - .y_offset = 8, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, // Galarian Forms [SPECIES_MEOWTH_GALARIAN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PONYTA_GALARIAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 8, }, [SPECIES_RAPIDASH_GALARIAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SLOWPOKE_GALARIAN] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 19, }, [SPECIES_SLOWBRO_GALARIAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_FARFETCHD_GALARIAN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_WEEZING_GALARIAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MR_MIME_GALARIAN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_ARTICUNO_GALARIAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_ZAPDOS_GALARIAN] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_MOLTRES_GALARIAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SLOWKING_GALARIAN] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_CORSOLA_GALARIAN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_ZIGZAGOON_GALARIAN] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_LINOONE_GALARIAN] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_DARUMAKA_GALARIAN] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_DARMANITAN_GALARIAN] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_YAMASK_GALARIAN] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_STUNFISK_GALARIAN] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, + }, + // Hisuian Forms + [SPECIES_GROWLITHE_HISUIAN] = + { + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 6, + }, + [SPECIES_ARCANINE_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, + }, + [SPECIES_VOLTORB_HISUIAN] = + { + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 0, + }, + [SPECIES_ELECTRODE_HISUIAN] = + { + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 0, + }, + [SPECIES_TYPHLOSION_HISUIAN] = + { + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 0, + }, + [SPECIES_QWILFISH_HISUIAN] = + { + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 8, + }, + [SPECIES_SNEASEL_HISUIAN] = + { + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, + }, + [SPECIES_SAMUROTT_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_LILLIGANT_HISUIAN] = + { + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, + }, + [SPECIES_ZORUA_HISUIAN] = + { + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, + }, + [SPECIES_ZOROARK_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, + }, + [SPECIES_BRAVIARY_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_SLIGGOO_HISUIAN] = + { + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 6, + }, + [SPECIES_GOODRA_HISUIAN] = + { + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 0, + }, + [SPECIES_AVALUGG_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 5, + }, + [SPECIES_DECIDUEYE_HISUIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Misc Forms // Cosplay Pikachu [SPECIES_PIKACHU_COSPLAY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_ROCK_STAR] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_BELLE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_POP_STAR] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_PH_D] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_LIBRE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, // Cap Pikachu [SPECIES_PIKACHU_ORIGINAL_CAP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_HOENN_CAP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_SINNOH_CAP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_UNOVA_CAP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_KALOS_CAP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_ALOLA_CAP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_PARTNER_CAP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_PIKACHU_WORLD_CAP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, // Pichu [SPECIES_PICHU_SPIKY_EARED] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, +#endif // Unown [SPECIES_UNOWN_B] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 16, }, [SPECIES_UNOWN_C] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_UNOWN_D] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_UNOWN_E] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_UNOWN_F] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_UNOWN_G] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 14, }, [SPECIES_UNOWN_H] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_UNOWN_I] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 16, }, [SPECIES_UNOWN_J] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 17, }, [SPECIES_UNOWN_K] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_UNOWN_L] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 19, }, [SPECIES_UNOWN_M] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 19, }, [SPECIES_UNOWN_N] = { - .size = 0x43, + .size = MON_COORDS_SIZE(32, 24), .y_offset = 20, }, [SPECIES_UNOWN_O] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_UNOWN_P] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 19, }, [SPECIES_UNOWN_Q] = { - .size = 0x43, + .size = MON_COORDS_SIZE(32, 24), .y_offset = 21, }, [SPECIES_UNOWN_R] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 19, }, [SPECIES_UNOWN_S] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_UNOWN_T] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 18, }, [SPECIES_UNOWN_U] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 18, }, [SPECIES_UNOWN_V] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 18, }, [SPECIES_UNOWN_W] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 19, }, [SPECIES_UNOWN_X] = { - .size = 0x33, + .size = MON_COORDS_SIZE(24, 24), .y_offset = 21, }, [SPECIES_UNOWN_Y] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 17, }, [SPECIES_UNOWN_Z] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 16, }, [SPECIES_UNOWN_EMARK] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 15, }, [SPECIES_UNOWN_QMARK] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 13, }, // Castform [SPECIES_CASTFORM_SUNNY] = { - .size = 0x34, - .y_offset = 17, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 9, }, [SPECIES_CASTFORM_RAINY] = { - .size = 0x34, - .y_offset = 17, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 9, }, [SPECIES_CASTFORM_SNOWY] = { - .size = 0x34, - .y_offset = 17, + .size = MON_COORDS_SIZE(40, 56), + .y_offset = 8, }, // Deoxys [SPECIES_DEOXYS_ATTACK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_DEOXYS_DEFENSE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_DEOXYS_SPEED] = { - .size = 0x88, - .y_offset = 0, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, +#if P_NEW_POKEMON == TRUE // Burmy [SPECIES_BURMY_SANDY_CLOAK] = { - .size = 0x67, - .y_offset = 13, + .size = MON_COORDS_SIZE(32, 56), + .y_offset = 12, }, [SPECIES_BURMY_TRASH_CLOAK] = { - .size = 0x67, - .y_offset = 13, + .size = MON_COORDS_SIZE(32, 56), + .y_offset = 8, }, // Wormadam [SPECIES_WORMADAM_SANDY_CLOAK] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 10, }, [SPECIES_WORMADAM_TRASH_CLOAK] = { - .size = 0x55, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 10, }, // Cherrim [SPECIES_CHERRIM_SUNSHINE] = { - .size = 0x55, - .y_offset = 8, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, // Shellos [SPECIES_SHELLOS_EAST_SEA] = { - .size = 0x66, - .y_offset = 13, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 14, }, // Gastrodon [SPECIES_GASTRODON_EAST_SEA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, // Rotom [SPECIES_ROTOM_HEAT] = { - .size = 0x77, - .y_offset = 11, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_ROTOM_WASH] = { - .size = 0x77, - .y_offset = 11, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_ROTOM_FROST] = { - .size = 0x77, - .y_offset = 11, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 4, }, [SPECIES_ROTOM_FAN] = { - .size = 0x77, - .y_offset = 11, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 8, }, [SPECIES_ROTOM_MOW] = { - .size = 0x77, - .y_offset = 11, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 12, + }, + // Origin Forme + [SPECIES_DIALGA_ORIGIN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_PALKIA_ORIGIN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, - // Giratina [SPECIES_GIRATINA_ORIGIN] = { - .size = 0x87, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Shaymin [SPECIES_SHAYMIN_SKY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, // Arceus [SPECIES_ARCEUS_FIGHTING] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_FLYING] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_POISON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_GROUND] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_ROCK] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_BUG] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_GHOST] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_STEEL] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_FIRE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_WATER] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_GRASS] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_ELECTRIC] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_PSYCHIC] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_ICE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_DRAGON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_DARK] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ARCEUS_FAIRY] = { - .size = 0x67, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Basculin [SPECIES_BASCULIN_BLUE_STRIPED] = { - .size = 0x45, - .y_offset = 13, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 16, + }, + [SPECIES_BASCULIN_WHITE_STRIPED] = + { + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 10, }, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = { - .size = 0x87, - .y_offset = 9, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 14, }, [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 2, }, // Deerling [SPECIES_DEERLING_SUMMER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 11, }, [SPECIES_DEERLING_AUTUMN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 11, }, [SPECIES_DEERLING_WINTER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 11, }, // Sawsbuck [SPECIES_SAWSBUCK_SUMMER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SAWSBUCK_AUTUMN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SAWSBUCK_WINTER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, // Therian Forms [SPECIES_TORNADUS_THERIAN] = { - .size = 0x87, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_THUNDURUS_THERIAN] = { - .size = 0x87, - .y_offset = 0, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_LANDORUS_THERIAN] = { - .size = 0x87, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, + }, + [SPECIES_ENAMORUS_THERIAN] = + { + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Kyurem [SPECIES_KYUREM_WHITE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_KYUREM_BLACK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Keldeo [SPECIES_KELDEO_RESOLUTE] = { - .size = 0x45, - .y_offset = 5, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, // Meloetta [SPECIES_MELOETTA_PIROUETTE] = { - .size = 0x87, - .y_offset = 3, + .size = MON_COORDS_SIZE(40, 64), + .y_offset = 2, }, // Genesect [SPECIES_GENESECT_DOUSE_DRIVE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_GENESECT_SHOCK_DRIVE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_GENESECT_BURN_DRIVE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_GENESECT_CHILL_DRIVE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, // Greninja [SPECIES_GRENINJA_BATTLE_BOND] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_GRENINJA_ASH] = { - .size = 0x45, - .y_offset = 7, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Vivillon [SPECIES_VIVILLON_POLAR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_TUNDRA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_CONTINENTAL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_GARDEN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_ELEGANT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_MEADOW] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_MODERN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_MARINE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_ARCHIPELAGO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_HIGH_PLAINS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_SANDSTORM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_RIVER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_MONSOON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_SAVANNA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_SUN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_OCEAN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_JUNGLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_FANCY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_VIVILLON_POKE_BALL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Flabébé [SPECIES_FLABEBE_YELLOW_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_FLABEBE_ORANGE_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_FLABEBE_BLUE_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_FLABEBE_WHITE_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, // Floette [SPECIES_FLOETTE_YELLOW_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_FLOETTE_ORANGE_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_FLOETTE_BLUE_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_FLOETTE_WHITE_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_FLOETTE_ETERNAL_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, // Florges [SPECIES_FLORGES_YELLOW_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_FLORGES_ORANGE_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_FLORGES_BLUE_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_FLORGES_WHITE_FLOWER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Furfrou [SPECIES_FURFROU_HEART_TRIM] = { - .size = 0x45, - .y_offset = 3, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 2, }, [SPECIES_FURFROU_STAR_TRIM] = { - .size = 0x45, - .y_offset = 3, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 2, }, [SPECIES_FURFROU_DIAMOND_TRIM] = { - .size = 0x45, - .y_offset = 3, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, }, [SPECIES_FURFROU_DEBUTANTE_TRIM] = { - .size = 0x45, - .y_offset = 3, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, }, [SPECIES_FURFROU_MATRON_TRIM] = { - .size = 0x45, - .y_offset = 3, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, }, [SPECIES_FURFROU_DANDY_TRIM] = { - .size = 0x45, - .y_offset = 3, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, }, [SPECIES_FURFROU_LA_REINE_TRIM] = { - .size = 0x45, - .y_offset = 3, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, }, [SPECIES_FURFROU_KABUKI_TRIM] = { - .size = 0x45, - .y_offset = 3, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 2, }, [SPECIES_FURFROU_PHARAOH_TRIM] = { - .size = 0x45, - .y_offset = 3, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, }, // Meowstic [SPECIES_MEOWSTIC_FEMALE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, // Aegislash [SPECIES_AEGISLASH_BLADE] = { - .size = 0x87, - .y_offset = 1, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Pumpkaboo [SPECIES_PUMPKABOO_SMALL] = { - .size = 0x45, - .y_offset = 13, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 15, }, [SPECIES_PUMPKABOO_LARGE] = { - .size = 0x45, - .y_offset = 13, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 12, }, [SPECIES_PUMPKABOO_SUPER] = { - .size = 0x45, - .y_offset = 13, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, // Gourgeist [SPECIES_GOURGEIST_SMALL] = { - .size = 0x45, - .y_offset = 4, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 5, }, [SPECIES_GOURGEIST_LARGE] = { - .size = 0x45, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_GOURGEIST_SUPER] = { - .size = 0x45, - .y_offset = 4, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Xerneas [SPECIES_XERNEAS_ACTIVE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Zygarde [SPECIES_ZYGARDE_10] = { - .size = 0x45, - .y_offset = 0, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 2, }, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = { - .size = 0x45, - .y_offset = 0, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 2, }, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ZYGARDE_COMPLETE] = { - .size = 0x55, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Hoopa [SPECIES_HOOPA_UNBOUND] = { - .size = 0x87, - .y_offset = 1, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Oricorio [SPECIES_ORICORIO_POM_POM] = { - .size = 0x45, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_ORICORIO_PAU] = { - .size = 0x45, - .y_offset = 2, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, }, [SPECIES_ORICORIO_SENSU] = { - .size = 0x45, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, // Rockruff [SPECIES_ROCKRUFF_OWN_TEMPO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, // Lycanroc [SPECIES_LYCANROC_MIDNIGHT] = { - .size = 0x45, - .y_offset = 0, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_LYCANROC_DUSK] = { - .size = 0x45, - .y_offset = 0, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, // Wishiwashi [SPECIES_WISHIWASHI_SCHOOL] = { - .size = 0x87, - .y_offset = 3, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 4, }, // Silvally [SPECIES_SILVALLY_FIGHTING] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_FLYING] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_POISON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_GROUND] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_ROCK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_BUG] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_GHOST] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_STEEL] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_FIRE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_WATER] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_GRASS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_ELECTRIC] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_PSYCHIC] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_ICE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_DRAGON] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_DARK] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SILVALLY_FAIRY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Minior [SPECIES_MINIOR_METEOR_ORANGE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_MINIOR_METEOR_YELLOW] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_MINIOR_METEOR_GREEN] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_MINIOR_METEOR_BLUE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_MINIOR_METEOR_INDIGO] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_MINIOR_METEOR_VIOLET] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_MINIOR_CORE_RED] = { - .size = 0x87, - .y_offset = 9, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, [SPECIES_MINIOR_CORE_ORANGE] = { - .size = 0x87, - .y_offset = 9, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, [SPECIES_MINIOR_CORE_YELLOW] = { - .size = 0x87, - .y_offset = 9, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, [SPECIES_MINIOR_CORE_GREEN] = { - .size = 0x87, - .y_offset = 9, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, [SPECIES_MINIOR_CORE_BLUE] = { - .size = 0x87, - .y_offset = 9, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, [SPECIES_MINIOR_CORE_INDIGO] = { - .size = 0x87, - .y_offset = 9, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, [SPECIES_MINIOR_CORE_VIOLET] = { - .size = 0x87, - .y_offset = 9, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, // Mimikyu [SPECIES_MIMIKYU_BUSTED] = { - .size = 0x45, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, // Necrozma [SPECIES_NECROZMA_DUSK_MANE] = { - .size = 0x45, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_NECROZMA_DAWN_WINGS] = { - .size = 0x45, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_NECROZMA_ULTRA] = { - .size = 0x45, - .y_offset = 2, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, // Magearna [SPECIES_MAGEARNA_ORIGINAL_COLOR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, // Cramorant [SPECIES_CRAMORANT_GULPING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CRAMORANT_GORGING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Toxtricity [SPECIES_TOXTRICITY_LOW_KEY] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 2, }, // Sinistea [SPECIES_SINISTEA_ANTIQUE] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 17, }, // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, // Alcremie [SPECIES_ALCREMIE_RUBY_CREAM] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_ALCREMIE_MATCHA_CREAM] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_ALCREMIE_MINT_CREAM] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_ALCREMIE_LEMON_CREAM] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_ALCREMIE_SALTED_CREAM] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_ALCREMIE_RUBY_SWIRL] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_ALCREMIE_CARAMEL_SWIRL] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_ALCREMIE_RAINBOW_SWIRL] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, // Eiscue [SPECIES_EISCUE_NOICE_FACE] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 0, }, // Indeedee [SPECIES_INDEEDEE_FEMALE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, // Morpeko [SPECIES_MORPEKO_HANGRY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, // Zacian [SPECIES_ZACIAN_CROWNED_SWORD] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, // Zamazenta [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, // Eternatus [SPECIES_ETERNATUS_ETERNAMAX] = { - .size = 0x86, - .y_offset = 0, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, // Urshifu [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, // Zarude [SPECIES_ZARUDE_DADA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, // Calyrex [SPECIES_CALYREX_ICE_RIDER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CALYREX_SHADOW_RIDER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, +#endif // Egg [SPECIES_EGG] = { - .size = 0x33, + .size = MON_COORDS_SIZE(24, 24), .y_offset = 20, }, }; diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index 788afc7447..d94162a4b3 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -387,6 +387,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(JIRACHI, gMonFrontPic_Jirachi), SPECIES_SPRITE(DEOXYS, gMonFrontPic_Deoxys), SPECIES_SPRITE(CHIMECHO, gMonFrontPic_Chimecho), +#if P_NEW_POKEMON == TRUE SPECIES_SPRITE(TURTWIG, gMonFrontPic_Turtwig), SPECIES_SPRITE(GROTLE, gMonFrontPic_Grotle), SPECIES_SPRITE(TORTERRA, gMonFrontPic_Torterra), @@ -899,6 +900,13 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(GLASTRIER, gMonFrontPic_Glastrier), SPECIES_SPRITE(SPECTRIER, gMonFrontPic_Spectrier), SPECIES_SPRITE(CALYREX, gMonFrontPic_Calyrex), + SPECIES_SPRITE(WYRDEER, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Wyrdeer), + SPECIES_SPRITE(KLEAVOR, gMonFrontPic_Kleavor), + SPECIES_SPRITE(URSALUNA, gMonFrontPic_Ursaluna), + SPECIES_SPRITE(BASCULEGION, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Basculegion), + SPECIES_SPRITE(SNEASLER, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Sneasler), + SPECIES_SPRITE(OVERQWIL, gMonFrontPic_Overqwil), + SPECIES_SPRITE(ENAMORUS, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Enamorus), SPECIES_SPRITE(VENUSAUR_MEGA, gMonFrontPic_VenusaurMega), SPECIES_SPRITE(CHARIZARD_MEGA_X, gMonFrontPic_CharizardMegaX), @@ -991,6 +999,23 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(YAMASK_GALARIAN, gMonFrontPic_YamaskGalarian), SPECIES_SPRITE(STUNFISK_GALARIAN, gMonFrontPic_StunfiskGalarian), + SPECIES_SPRITE(GROWLITHE_HISUIAN, gMonFrontPic_GrowlitheHisuian), + SPECIES_SPRITE(ARCANINE_HISUIAN, gMonFrontPic_ArcanineHisuian), + SPECIES_SPRITE(VOLTORB_HISUIAN, gMonFrontPic_VoltorbHisuian), + SPECIES_SPRITE(ELECTRODE_HISUIAN, gMonFrontPic_ElectrodeHisuian), + SPECIES_SPRITE(TYPHLOSION_HISUIAN, gMonFrontPic_TyphlosionHisuian), + SPECIES_SPRITE(QWILFISH_HISUIAN, gMonFrontPic_QwilfishHisuian), + SPECIES_SPRITE(SNEASEL_HISUIAN, gMonFrontPic_SneaselHisuian), + SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_SamurottHisuian), + SPECIES_SPRITE(LILLIGANT_HISUIAN, gMonFrontPic_LilligantHisuian), + SPECIES_SPRITE(ZORUA_HISUIAN, gMonFrontPic_ZoruaHisuian), + SPECIES_SPRITE(ZOROARK_HISUIAN, gMonFrontPic_ZoroarkHisuian), + SPECIES_SPRITE(BRAVIARY_HISUIAN, gMonFrontPic_BraviaryHisuian), + SPECIES_SPRITE(SLIGGOO_HISUIAN, gMonFrontPic_SliggooHisuian), + SPECIES_SPRITE(GOODRA_HISUIAN, gMonFrontPic_GoodraHisuian), + SPECIES_SPRITE(AVALUGG_HISUIAN, gMonFrontPic_AvaluggHisuian), + SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_DecidueyeHisuian), + SPECIES_SPRITE(PIKACHU_COSPLAY, gMonFrontPic_PikachuCosplay), SPECIES_SPRITE(PIKACHU_ROCK_STAR, gMonFrontPic_PikachuRockStar), SPECIES_SPRITE(PIKACHU_BELLE, gMonFrontPic_PikachuBelle), @@ -1008,7 +1033,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(PIKACHU_WORLD_CAP, gMonFrontPic_PikachuWorldCap), SPECIES_SPRITE(PICHU_SPIKY_EARED, gMonFrontPic_PichuSpikyEared), - +#endif SPECIES_SPRITE(UNOWN_B, gMonFrontPic_UnownB), SPECIES_SPRITE(UNOWN_C, gMonFrontPic_UnownC), SPECIES_SPRITE(UNOWN_D, gMonFrontPic_UnownD), @@ -1044,7 +1069,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(DEOXYS_ATTACK, gMonFrontPic_DeoxysAttack), SPECIES_SPRITE(DEOXYS_DEFENSE, gMonFrontPic_DeoxysDefense), SPECIES_SPRITE(DEOXYS_SPEED, gMonFrontPic_DeoxysSpeed), - +#if P_NEW_POKEMON == TRUE SPECIES_SPRITE(BURMY_SANDY_CLOAK, gMonFrontPic_BurmySandyCloak), SPECIES_SPRITE(BURMY_TRASH_CLOAK, gMonFrontPic_BurmyTrashCloak), @@ -1063,6 +1088,8 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(ROTOM_FAN, gMonFrontPic_RotomFan), SPECIES_SPRITE(ROTOM_MOW, gMonFrontPic_RotomMow), + SPECIES_SPRITE(DIALGA_ORIGIN, gMonFrontPic_DialgaOrigin), + SPECIES_SPRITE(PALKIA_ORIGIN, gMonFrontPic_PalkiaOrigin), SPECIES_SPRITE(GIRATINA_ORIGIN, gMonFrontPic_GiratinaOrigin), SPECIES_SPRITE(SHAYMIN_SKY, gMonFrontPic_ShayminSky), @@ -1086,6 +1113,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(ARCEUS_FAIRY, gMonFrontPic_Arceus), SPECIES_SPRITE(BASCULIN_BLUE_STRIPED, gMonFrontPic_BasculinBlueStriped), + SPECIES_SPRITE(BASCULIN_WHITE_STRIPED, gMonFrontPic_BasculinWhiteStriped), SPECIES_SPRITE(DARMANITAN_ZEN_MODE, gMonFrontPic_DarmanitanZenMode), SPECIES_SPRITE(DARMANITAN_ZEN_MODE_GALARIAN, gMonFrontPic_DarmanitanZenModeGalarian), @@ -1101,6 +1129,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(TORNADUS_THERIAN, gMonFrontPic_TornadusTherian), SPECIES_SPRITE(THUNDURUS_THERIAN, gMonFrontPic_ThundurusTherian), SPECIES_SPRITE(LANDORUS_THERIAN, gMonFrontPic_LandorusTherian), + SPECIES_SPRITE(ENAMORUS_THERIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_EnamorusTherian), SPECIES_SPRITE(KYUREM_WHITE, gMonFrontPic_KyuremWhite), SPECIES_SPRITE(KYUREM_BLACK, gMonFrontPic_KyuremBlack), @@ -1271,13 +1300,21 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(CALYREX_ICE_RIDER, gMonFrontPic_CalyrexIceRider), SPECIES_SPRITE(CALYREX_SHADOW_RIDER, gMonFrontPic_CalyrexShadowRider), - +#endif SPECIES_SPRITE(EGG, gMonFrontPic_Egg), }; const struct CompressedSpriteSheet gMonFrontPicTableFemale[] = { SPECIES_SPRITE(EEVEE, gMonFrontPic_EeveeF), +#if P_NEW_POKEMON == TRUE + SPECIES_SPRITE(STARLY, gMonFrontPic_StarlyF), + SPECIES_SPRITE(STARAVIA, gMonFrontPic_StaraviaF), + SPECIES_SPRITE(STARAPTOR, gMonFrontPic_StaraptorF), + SPECIES_SPRITE(BIDOOF, gMonFrontPic_BidoofF), + SPECIES_SPRITE(KRICKETOT, gMonFrontPic_KricketotF), + SPECIES_SPRITE(KRICKETUNE, gMonFrontPic_KricketuneF), + SPECIES_SPRITE(SHINX, gMonFrontPic_ShinxF), SPECIES_SPRITE(COMBEE, gMonFrontPic_CombeeF), SPECIES_SPRITE(HIPPOPOTAS, gMonFrontPic_HippopotasF), SPECIES_SPRITE(HIPPOWDON, gMonFrontPic_Hippowdon), @@ -1285,4 +1322,6 @@ const struct CompressedSpriteSheet gMonFrontPicTableFemale[] = SPECIES_SPRITE(FRILLISH, gMonFrontPic_FrillishF), SPECIES_SPRITE(JELLICENT, gMonFrontPic_JellicentF), SPECIES_SPRITE(PYROAR, gMonFrontPic_PyroarF), + SPECIES_SPRITE(BASCULEGION, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_BasculegionF), +#endif }; diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index cc8717e905..65fbf835b4 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -387,6 +387,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(JIRACHI, gMonPalette_Jirachi), SPECIES_PAL(DEOXYS, gMonPalette_Deoxys), SPECIES_PAL(CHIMECHO, gMonPalette_Chimecho), +#if P_NEW_POKEMON == TRUE SPECIES_PAL(TURTWIG, gMonPalette_Turtwig), SPECIES_PAL(GROTLE, gMonPalette_Grotle), SPECIES_PAL(TORTERRA, gMonPalette_Torterra), @@ -899,6 +900,13 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(GLASTRIER, gMonPalette_Glastrier), SPECIES_PAL(SPECTRIER, gMonPalette_Spectrier), SPECIES_PAL(CALYREX, gMonPalette_Calyrex), + SPECIES_PAL(WYRDEER, gMonPalette_CircledQuestionMark), // gMonPalette_Wyrdeer), + SPECIES_PAL(KLEAVOR, gMonPalette_Kleavor), + SPECIES_PAL(URSALUNA, gMonPalette_Ursaluna), + SPECIES_PAL(BASCULEGION, gMonPalette_CircledQuestionMark), // gMonPalette_Basculegion), + SPECIES_PAL(SNEASLER, gMonPalette_CircledQuestionMark), // gMonPalette_Sneasler), + SPECIES_PAL(OVERQWIL, gMonPalette_Overqwil), + SPECIES_PAL(ENAMORUS, gMonPalette_CircledQuestionMark), // gMonPalette_Enamorus), SPECIES_PAL(VENUSAUR_MEGA, gMonPalette_VenusaurMega), SPECIES_PAL(CHARIZARD_MEGA_X, gMonPalette_CharizardMegaX), @@ -991,6 +999,23 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(YAMASK_GALARIAN, gMonPalette_YamaskGalarian), SPECIES_PAL(STUNFISK_GALARIAN, gMonPalette_StunfiskGalarian), + SPECIES_PAL(GROWLITHE_HISUIAN, gMonPalette_GrowlitheHisuian), + SPECIES_PAL(ARCANINE_HISUIAN, gMonPalette_ArcanineHisuian), + SPECIES_PAL(VOLTORB_HISUIAN, gMonPalette_VoltorbHisuian), + SPECIES_PAL(ELECTRODE_HISUIAN, gMonPalette_ElectrodeHisuian), + SPECIES_PAL(TYPHLOSION_HISUIAN, gMonPalette_TyphlosionHisuian), + SPECIES_PAL(QWILFISH_HISUIAN, gMonPalette_QwilfishHisuian), + SPECIES_PAL(SNEASEL_HISUIAN, gMonPalette_SneaselHisuian), + SPECIES_PAL(SAMUROTT_HISUIAN, gMonPalette_CircledQuestionMark), //gMonPalette_SamurottHisuian), + SPECIES_PAL(LILLIGANT_HISUIAN, gMonPalette_LilligantHisuian), + SPECIES_PAL(ZORUA_HISUIAN, gMonPalette_ZoruaHisuian), + SPECIES_PAL(ZOROARK_HISUIAN, gMonPalette_ZoroarkHisuian), + SPECIES_PAL(BRAVIARY_HISUIAN, gMonPalette_BraviaryHisuian), + SPECIES_PAL(SLIGGOO_HISUIAN, gMonPalette_SliggooHisuian), + SPECIES_PAL(GOODRA_HISUIAN, gMonPalette_GoodraHisuian), + SPECIES_PAL(AVALUGG_HISUIAN, gMonPalette_AvaluggHisuian), + SPECIES_PAL(DECIDUEYE_HISUIAN, gMonPalette_CircledQuestionMark), //gMonPalette_DecidueyeHisuian), + SPECIES_PAL(PIKACHU_COSPLAY, gMonPalette_PikachuCosplay), SPECIES_PAL(PIKACHU_ROCK_STAR, gMonPalette_PikachuRockStar), SPECIES_PAL(PIKACHU_BELLE, gMonPalette_PikachuBelle), @@ -1008,7 +1033,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(PIKACHU_WORLD_CAP, gMonPalette_PikachuWorldCap), SPECIES_PAL(PICHU_SPIKY_EARED, gMonPalette_PichuSpikyEared), - +#endif SPECIES_PAL(UNOWN_B, gMonPalette_Unown), SPECIES_PAL(UNOWN_C, gMonPalette_Unown), SPECIES_PAL(UNOWN_D, gMonPalette_Unown), @@ -1044,7 +1069,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(DEOXYS_ATTACK, gMonPalette_DeoxysAttack), SPECIES_PAL(DEOXYS_DEFENSE, gMonPalette_DeoxysDefense), SPECIES_PAL(DEOXYS_SPEED, gMonPalette_DeoxysSpeed), - +#if P_NEW_POKEMON == TRUE SPECIES_PAL(BURMY_SANDY_CLOAK, gMonPalette_BurmySandyCloak), SPECIES_PAL(BURMY_TRASH_CLOAK, gMonPalette_BurmyTrashCloak), @@ -1063,6 +1088,8 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(ROTOM_FAN, gMonPalette_RotomFan), SPECIES_PAL(ROTOM_MOW, gMonPalette_RotomMow), + SPECIES_PAL(DIALGA_ORIGIN, gMonPalette_DialgaOrigin), + SPECIES_PAL(PALKIA_ORIGIN, gMonPalette_PalkiaOrigin), SPECIES_PAL(GIRATINA_ORIGIN, gMonPalette_GiratinaOrigin), SPECIES_PAL(SHAYMIN_SKY, gMonPalette_ShayminSky), @@ -1086,6 +1113,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(ARCEUS_FAIRY, gMonPalette_ArceusFairy), SPECIES_PAL(BASCULIN_BLUE_STRIPED, gMonPalette_BasculinBlueStriped), + SPECIES_PAL(BASCULIN_WHITE_STRIPED, gMonPalette_BasculinWhiteStriped), SPECIES_PAL(DARMANITAN_ZEN_MODE, gMonPalette_DarmanitanZenMode), SPECIES_PAL(DARMANITAN_ZEN_MODE_GALARIAN, gMonPalette_DarmanitanZenModeGalarian), @@ -1101,6 +1129,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(TORNADUS_THERIAN, gMonPalette_TornadusTherian), SPECIES_PAL(THUNDURUS_THERIAN, gMonPalette_ThundurusTherian), SPECIES_PAL(LANDORUS_THERIAN, gMonPalette_LandorusTherian), + SPECIES_PAL(ENAMORUS_THERIAN, gMonPalette_CircledQuestionMark), // gMonPalette_EnamorusTherian), SPECIES_PAL(KYUREM_WHITE, gMonPalette_KyuremWhite), SPECIES_PAL(KYUREM_BLACK, gMonPalette_KyuremBlack), @@ -1271,18 +1300,28 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(CALYREX_ICE_RIDER, gMonPalette_CalyrexIceRider), SPECIES_PAL(CALYREX_SHADOW_RIDER, gMonPalette_CalyrexShadowRider), - +#endif SPECIES_PAL(EGG, gMonPalette_Egg), }; const struct CompressedSpritePalette gMonPaletteTableFemale[] = { SPECIES_PAL(EEVEE, gMonPalette_Eevee), +#if P_NEW_POKEMON == TRUE SPECIES_PAL(COMBEE, gMonPalette_Combee), + SPECIES_PAL(STARLY, gMonPalette_Starly), + SPECIES_PAL(STARAVIA, gMonPalette_Staravia), + SPECIES_PAL(STARAPTOR, gMonPalette_Staraptor), + SPECIES_PAL(BIDOOF, gMonPalette_Bidoof), + SPECIES_PAL(KRICKETOT, gMonPalette_Kricketot), + SPECIES_PAL(KRICKETUNE, gMonPalette_Kricketune), + SPECIES_PAL(SHINX, gMonPalette_Shinx), SPECIES_PAL(HIPPOPOTAS, gMonPalette_HippopotasF), SPECIES_PAL(HIPPOWDON, gMonPalette_HippowdonF), SPECIES_PAL(UNFEZANT, gMonPalette_UnfezantF), SPECIES_PAL(FRILLISH, gMonPalette_FrillishF), SPECIES_PAL(JELLICENT, gMonPalette_JellicentF), SPECIES_PAL(PYROAR, gMonPalette_PyroarF), + SPECIES_PAL(BASCULEGION, gMonPalette_CircledQuestionMark), // gMonPalette_BasculegionF), +#endif }; diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index b8324bdd5f..c029e91e1e 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -387,6 +387,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(JIRACHI, gMonShinyPalette_Jirachi), SPECIES_SHINY_PAL(DEOXYS, gMonShinyPalette_Deoxys), SPECIES_SHINY_PAL(CHIMECHO, gMonShinyPalette_Chimecho), +#if P_NEW_POKEMON == TRUE SPECIES_SHINY_PAL(TURTWIG, gMonShinyPalette_Turtwig), SPECIES_SHINY_PAL(GROTLE, gMonShinyPalette_Grotle), SPECIES_SHINY_PAL(TORTERRA, gMonShinyPalette_Torterra), @@ -899,6 +900,13 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(GLASTRIER, gMonShinyPalette_Glastrier), SPECIES_SHINY_PAL(SPECTRIER, gMonShinyPalette_Spectrier), SPECIES_SHINY_PAL(CALYREX, gMonShinyPalette_Calyrex), + SPECIES_SHINY_PAL(WYRDEER, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Wyrdeer), + SPECIES_SHINY_PAL(KLEAVOR, gMonShinyPalette_Kleavor), + SPECIES_SHINY_PAL(URSALUNA, gMonShinyPalette_Ursaluna), + SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Basculegion), + SPECIES_SHINY_PAL(SNEASLER, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Sneasler), + SPECIES_SHINY_PAL(OVERQWIL, gMonShinyPalette_Overqwil), + SPECIES_SHINY_PAL(ENAMORUS, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Enamorus), SPECIES_SHINY_PAL(VENUSAUR_MEGA, gMonShinyPalette_VenusaurMega), SPECIES_SHINY_PAL(CHARIZARD_MEGA_X, gMonShinyPalette_CharizardMegaX), @@ -991,6 +999,23 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(YAMASK_GALARIAN, gMonShinyPalette_YamaskGalarian), SPECIES_SHINY_PAL(STUNFISK_GALARIAN, gMonShinyPalette_StunfiskGalarian), + SPECIES_SHINY_PAL(GROWLITHE_HISUIAN, gMonShinyPalette_GrowlitheHisuian), + SPECIES_SHINY_PAL(ARCANINE_HISUIAN, gMonShinyPalette_ArcanineHisuian), + SPECIES_SHINY_PAL(VOLTORB_HISUIAN, gMonShinyPalette_VoltorbHisuian), + SPECIES_SHINY_PAL(ELECTRODE_HISUIAN, gMonShinyPalette_ElectrodeHisuian), + SPECIES_SHINY_PAL(TYPHLOSION_HISUIAN, gMonShinyPalette_TyphlosionHisuian), + SPECIES_SHINY_PAL(QWILFISH_HISUIAN, gMonShinyPalette_QwilfishHisuian), + SPECIES_SHINY_PAL(SNEASEL_HISUIAN, gMonShinyPalette_SneaselHisuian), + SPECIES_SHINY_PAL(SAMUROTT_HISUIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_SamurottHisuian), + SPECIES_SHINY_PAL(LILLIGANT_HISUIAN, gMonShinyPalette_LilligantHisuian), + SPECIES_SHINY_PAL(ZORUA_HISUIAN, gMonShinyPalette_ZoruaHisuian), + SPECIES_SHINY_PAL(ZOROARK_HISUIAN, gMonShinyPalette_ZoroarkHisuian), + SPECIES_SHINY_PAL(BRAVIARY_HISUIAN, gMonShinyPalette_BraviaryHisuian), + SPECIES_SHINY_PAL(SLIGGOO_HISUIAN, gMonShinyPalette_SliggooHisuian), + SPECIES_SHINY_PAL(GOODRA_HISUIAN, gMonShinyPalette_GoodraHisuian), + SPECIES_SHINY_PAL(AVALUGG_HISUIAN, gMonShinyPalette_AvaluggHisuian), + SPECIES_SHINY_PAL(DECIDUEYE_HISUIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_DecidueyeHisuian), + SPECIES_SHINY_PAL(PIKACHU_COSPLAY, gMonShinyPalette_PikachuCosplay), SPECIES_SHINY_PAL(PIKACHU_ROCK_STAR, gMonShinyPalette_PikachuRockStar), SPECIES_SHINY_PAL(PIKACHU_BELLE, gMonShinyPalette_PikachuBelle), @@ -1008,7 +1033,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(PIKACHU_WORLD_CAP, gMonShinyPalette_PikachuWorldCap), SPECIES_SHINY_PAL(PICHU_SPIKY_EARED, gMonShinyPalette_PichuSpikyEared), - +#endif SPECIES_SHINY_PAL(UNOWN_B, gMonShinyPalette_Unown), SPECIES_SHINY_PAL(UNOWN_C, gMonShinyPalette_Unown), SPECIES_SHINY_PAL(UNOWN_D, gMonShinyPalette_Unown), @@ -1044,7 +1069,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(DEOXYS_ATTACK, gMonShinyPalette_DeoxysAttack), SPECIES_SHINY_PAL(DEOXYS_DEFENSE, gMonShinyPalette_DeoxysDefense), SPECIES_SHINY_PAL(DEOXYS_SPEED, gMonShinyPalette_DeoxysSpeed), - +#if P_NEW_POKEMON == TRUE SPECIES_SHINY_PAL(BURMY_SANDY_CLOAK, gMonShinyPalette_BurmySandyCloak), SPECIES_SHINY_PAL(BURMY_TRASH_CLOAK, gMonShinyPalette_BurmyTrashCloak), @@ -1063,6 +1088,8 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(ROTOM_FAN, gMonShinyPalette_RotomFan), SPECIES_SHINY_PAL(ROTOM_MOW, gMonShinyPalette_RotomMow), + SPECIES_SHINY_PAL(DIALGA_ORIGIN, gMonShinyPalette_DialgaOrigin), + SPECIES_SHINY_PAL(PALKIA_ORIGIN, gMonShinyPalette_PalkiaOrigin), SPECIES_SHINY_PAL(GIRATINA_ORIGIN, gMonShinyPalette_GiratinaOrigin), SPECIES_SHINY_PAL(SHAYMIN_SKY, gMonShinyPalette_ShayminSky), @@ -1086,6 +1113,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(ARCEUS_FAIRY, gMonShinyPalette_ArceusFairy), SPECIES_SHINY_PAL(BASCULIN_BLUE_STRIPED, gMonShinyPalette_BasculinBlueStriped), + SPECIES_SHINY_PAL(BASCULIN_WHITE_STRIPED, gMonShinyPalette_BasculinWhiteStriped), SPECIES_SHINY_PAL(DARMANITAN_ZEN_MODE, gMonShinyPalette_DarmanitanZenMode), SPECIES_SHINY_PAL(DARMANITAN_ZEN_MODE_GALARIAN, gMonShinyPalette_DarmanitanZenModeGalarian), @@ -1101,6 +1129,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(TORNADUS_THERIAN, gMonShinyPalette_TornadusTherian), SPECIES_SHINY_PAL(THUNDURUS_THERIAN, gMonShinyPalette_ThundurusTherian), SPECIES_SHINY_PAL(LANDORUS_THERIAN, gMonShinyPalette_LandorusTherian), + SPECIES_SHINY_PAL(ENAMORUS_THERIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_EnamorusTherian), SPECIES_SHINY_PAL(KYUREM_WHITE, gMonShinyPalette_KyuremWhite), SPECIES_SHINY_PAL(KYUREM_BLACK, gMonShinyPalette_KyuremBlack), @@ -1271,13 +1300,21 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(CALYREX_ICE_RIDER, gMonShinyPalette_CalyrexIceRider), SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider), - +#endif SPECIES_SHINY_PAL(EGG, gMonPalette_Egg), }; const struct CompressedSpritePalette gMonShinyPaletteTableFemale[] = { SPECIES_SHINY_PAL(EEVEE, gMonShinyPalette_Eevee), +#if P_NEW_POKEMON == TRUE + SPECIES_SHINY_PAL(STARLY, gMonShinyPalette_Starly), + SPECIES_SHINY_PAL(STARAVIA, gMonShinyPalette_Staravia), + SPECIES_SHINY_PAL(STARAPTOR, gMonShinyPalette_Staraptor), + SPECIES_SHINY_PAL(BIDOOF, gMonShinyPalette_Bidoof), + SPECIES_SHINY_PAL(KRICKETOT, gMonShinyPalette_Kricketot), + SPECIES_SHINY_PAL(KRICKETUNE, gMonShinyPalette_Kricketune), + SPECIES_SHINY_PAL(SHINX, gMonShinyPalette_Shinx), SPECIES_SHINY_PAL(COMBEE, gMonShinyPalette_Combee), SPECIES_SHINY_PAL(HIPPOPOTAS, gMonShinyPalette_HippopotasF), SPECIES_SHINY_PAL(HIPPOWDON, gMonShinyPalette_HippowdonF), @@ -1285,4 +1322,6 @@ const struct CompressedSpritePalette gMonShinyPaletteTableFemale[] = SPECIES_SHINY_PAL(FRILLISH, gMonShinyPalette_FrillishF), SPECIES_SHINY_PAL(JELLICENT, gMonShinyPalette_JellicentF), SPECIES_SHINY_PAL(PYROAR, gMonShinyPalette_PyroarF), + SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_BasculegionF), +#endif }; diff --git a/src/data/region_map/city_map_entries.h b/src/data/region_map/city_map_entries.h index d5478c7b49..8ff4530593 100644 --- a/src/data/region_map/city_map_entries.h +++ b/src/data/region_map/city_map_entries.h @@ -1,4 +1,4 @@ -static const struct CityMapEntry sPokenavCityMaps[NUM_CITY_MAPS] = +static const struct CityMapEntry sPokenavCityMaps[NUM_CITY_MAPS] = { { .mapSecId = MAPSEC_LITTLEROOT_TOWN, diff --git a/src/data/region_map/region_map_entries.h b/src/data/region_map/region_map_entries.h index 6b433f90fa..d1913cd8a0 100644 --- a/src/data/region_map/region_map_entries.h +++ b/src/data/region_map/region_map_entries.h @@ -299,8 +299,8 @@ const struct RegionMapLocation gRegionMapEntries[] = { [MAPSEC_CINNABAR_ISLAND] = { 0, 0, 1, 1, sMapName_CinnabarIsland}, [MAPSEC_INDIGO_PLATEAU] = { 0, 0, 1, 1, sMapName_IndigoPlateau}, [MAPSEC_SAFFRON_CITY] = { 0, 0, 1, 1, sMapName_SaffronCity}, - [MAPSEC_ROUTE_4_FLYDUP] = { 0, 0, 1, 1, sMapName_Route4}, - [MAPSEC_ROUTE_10_FLYDUP] = { 0, 0, 1, 1, sMapName_Route10}, + [MAPSEC_ROUTE_4_POKECENTER] = { 0, 0, 1, 1, sMapName_Route4}, + [MAPSEC_ROUTE_10_POKECENTER] = { 0, 0, 1, 1, sMapName_Route10}, [MAPSEC_ROUTE_1] = { 0, 0, 1, 1, sMapName_Route1}, [MAPSEC_ROUTE_2] = { 0, 0, 1, 1, sMapName_Route2}, [MAPSEC_ROUTE_3] = { 0, 0, 1, 1, sMapName_Route3}, diff --git a/src/data/script_menu.h b/src/data/script_menu.h index 3880c3c0c8..79355748c7 100644 --- a/src/data/script_menu.h +++ b/src/data/script_menu.h @@ -110,35 +110,35 @@ static const struct MenuAction MultichoiceList_Mechadoll1_Q1[] = {gTrickHouse_Mechadoll_Taillow}, }; -static const struct MenuAction MultichoiceList_Mechadoll1_Q2[] = +static const struct MenuAction MultichoiceList_Mechadoll1_Q2[] = { {gTrickHouse_Mechadoll_Azurill}, {gTrickHouse_Mechadoll_Lotad}, {gTrickHouse_Mechadoll_Wingull}, }; -static const struct MenuAction MultichoiceList_Mechadoll1_Q3[] = +static const struct MenuAction MultichoiceList_Mechadoll1_Q3[] = { {gTrickHouse_Mechadoll_Dustox}, {gTrickHouse_Mechadoll_Zubat}, {gTrickHouse_Mechadoll_Nincada}, }; -static const struct MenuAction MultichoiceList_Mechadoll2_Q1[] = +static const struct MenuAction MultichoiceList_Mechadoll2_Q1[] = { {gTrickHouse_Mechadoll_Ralts}, {gTrickHouse_Mechadoll_Zigzagoon}, {gTrickHouse_Mechadoll_Slakoth}, }; -static const struct MenuAction MultichoiceList_Mechadoll2_Q2[] = +static const struct MenuAction MultichoiceList_Mechadoll2_Q2[] = { {gTrickHouse_Mechadoll_Poochyena2}, {gTrickHouse_Mechadoll_Shroomish}, {gTrickHouse_Mechadoll_Zigzagoon2}, }; -static const struct MenuAction MultichoiceList_Mechadoll2_Q3[] = +static const struct MenuAction MultichoiceList_Mechadoll2_Q3[] = { {gTrickHouse_Mechadoll_Poochyena3}, {gTrickHouse_Mechadoll_Zubat2}, @@ -152,56 +152,56 @@ static const struct MenuAction MultichoiceList_Mechadoll3_Q1[] = {gTrickHouse_Mechadoll_SamePrice}, }; -static const struct MenuAction MultichoiceList_Mechadoll3_Q2[] = +static const struct MenuAction MultichoiceList_Mechadoll3_Q2[] = { {gTrickHouse_Mechadoll_60Yen}, {gTrickHouse_Mechadoll_55Yen}, {gTrickHouse_Mechadoll_Nothing}, }; -static const struct MenuAction MultichoiceList_Mechadoll3_Q3[] = +static const struct MenuAction MultichoiceList_Mechadoll3_Q3[] = { {gTrickHouse_Mechadoll_CostMore}, {gTrickHouse_Mechadoll_CostLess}, {gTrickHouse_Mechadoll_SamePrice2}, }; -static const struct MenuAction MultichoiceList_Mechadoll4_Q1[] = +static const struct MenuAction MultichoiceList_Mechadoll4_Q1[] = { {gTrickHouse_Mechadoll_Male}, {gTrickHouse_Mechadoll_Female}, {gTrickHouse_Mechadoll_Neither}, }; -static const struct MenuAction MultichoiceList_Mechadoll4_Q2[] = +static const struct MenuAction MultichoiceList_Mechadoll4_Q2[] = { {gTrickHouse_Mechadoll_ElderlyMen}, {gTrickHouse_Mechadoll_ElderlyLadies}, {gTrickHouse_Mechadoll_SameNumber}, }; -static const struct MenuAction MultichoiceList_Mechadoll4_Q3[] = +static const struct MenuAction MultichoiceList_Mechadoll4_Q3[] = { {gTrickHouse_Mechadoll_None}, {gTrickHouse_Mechadoll_One}, {gTrickHouse_Mechadoll_Two}, }; -static const struct MenuAction MultichoiceList_Mechadoll5_Q1[] = +static const struct MenuAction MultichoiceList_Mechadoll5_Q1[] = { {gTrickHouse_Mechadoll_Two2}, {gTrickHouse_Mechadoll_Three}, {gTrickHouse_Mechadoll_Four}, }; -static const struct MenuAction MultichoiceList_Mechadoll5_Q2[] = +static const struct MenuAction MultichoiceList_Mechadoll5_Q2[] = { {gTrickHouse_Mechadoll_Six}, {gTrickHouse_Mechadoll_Seven}, {gTrickHouse_Mechadoll_Eight}, }; -static const struct MenuAction MultichoiceList_Mechadoll5_Q3[] = +static const struct MenuAction MultichoiceList_Mechadoll5_Q3[] = { {gTrickHouse_Mechadoll_Six2}, {gTrickHouse_Mechadoll_Seven2}, @@ -934,14 +934,14 @@ const u8 *const gStdStrings[] = [STDSTRING_BATTLE_PYRAMID] = gText_BattlePyramid, }; -static const u8 sLinkServicesMultichoiceIds[] = -{ - MULTI_CABLE_CLUB_NO_RECORD_MIX, - MULTI_WIRELESS_NO_RECORD_BERRY, - MULTI_CABLE_CLUB_WITH_RECORD_MIX, - MULTI_WIRELESS_NO_BERRY, - MULTI_WIRELESS_NO_RECORD, - MULTI_WIRELESS_ALL_SERVICES +static const u8 sLinkServicesMultichoiceIds[] = +{ + MULTI_CABLE_CLUB_NO_RECORD_MIX, + MULTI_WIRELESS_NO_RECORD_BERRY, + MULTI_CABLE_CLUB_WITH_RECORD_MIX, + MULTI_WIRELESS_NO_BERRY, + MULTI_WIRELESS_NO_RECORD, + MULTI_WIRELESS_ALL_SERVICES }; static const u8 *const sPCNameStrings[] = diff --git a/src/data/text/abilities.h b/src/data/text/abilities.h index aa6f829062..cdc3276082 100644 --- a/src/data/text/abilities.h +++ b/src/data/text/abilities.h @@ -1,7 +1,7 @@ static const u8 sNoneDescription[] = _("No special ability."); -static const u8 sStenchDescription[] = _("Helps repel wild POKéMON."); +static const u8 sStenchDescription[] = _("May cause a foe to flinch."); static const u8 sDrizzleDescription[] = _("Summons rain in battle."); -static const u8 sSpeedBoostDescription[] = _("Gradually boosts SPEED."); +static const u8 sSpeedBoostDescription[] = _("Gradually boosts Speed."); static const u8 sBattleArmorDescription[] = _("Blocks critical hits."); static const u8 sSturdyDescription[] = _("Negates 1-hit KO attacks."); static const u8 sDampDescription[] = _("Prevents self-destruction."); @@ -20,27 +20,27 @@ static const u8 sFlashFireDescription[] = _("Powers up if hit by fire."); static const u8 sShieldDustDescription[] = _("Prevents added effects."); static const u8 sOwnTempoDescription[] = _("Prevents confusion."); static const u8 sSuctionCupsDescription[] = _("Firmly anchors the body."); -static const u8 sIntimidateDescription[] = _("Lowers the foe's ATTACK."); +static const u8 sIntimidateDescription[] = _("Lowers the foe's Attack."); static const u8 sShadowTagDescription[] = _("Prevents the foe's escape."); static const u8 sRoughSkinDescription[] = _("Hurts to touch."); -static const u8 sWonderGuardDescription[] = _("“Super effective” hits."); -static const u8 sLevitateDescription[] = _("Not hit by GROUND attacks."); +static const u8 sWonderGuardDescription[] = _("“Supereffective” hits."); +static const u8 sLevitateDescription[] = _("Not hit by Ground attacks."); static const u8 sEffectSporeDescription[] = _("Leaves spores on contact."); static const u8 sSynchronizeDescription[] = _("Passes on status problems."); static const u8 sClearBodyDescription[] = _("Prevents ability reduction."); static const u8 sNaturalCureDescription[] = _("Heals upon switching out."); static const u8 sLightningRodDescription[] = _("Draws electrical moves."); static const u8 sSereneGraceDescription[] = _("Promotes added effects."); -static const u8 sSwiftSwimDescription[] = _("Raises SPEED in rain."); -static const u8 sChlorophyllDescription[] = _("Raises SPEED in sunshine."); +static const u8 sSwiftSwimDescription[] = _("Raises Speed in rain."); +static const u8 sChlorophyllDescription[] = _("Raises Speed in sunshine."); static const u8 sIlluminateDescription[] = _("Encounter rate increases."); static const u8 sTraceDescription[] = _("Copies special ability."); -static const u8 sHugePowerDescription[] = _("Raises ATTACK."); +static const u8 sHugePowerDescription[] = _("Raises Attack."); static const u8 sPoisonPointDescription[] = _("Poisons foe on contact."); static const u8 sInnerFocusDescription[] = _("Prevents flinching."); static const u8 sMagmaArmorDescription[] = _("Prevents freezing."); static const u8 sWaterVeilDescription[] = _("Prevents burns."); -static const u8 sMagnetPullDescription[] = _("Traps STEEL-type POKéMON."); +static const u8 sMagnetPullDescription[] = _("Traps Steel-type Pokémon."); static const u8 sSoundproofDescription[] = _("Avoids sound-based moves."); static const u8 sRainDishDescription[] = _("Slight HP recovery in rain."); static const u8 sSandStreamDescription[] = _("Summons a sandstorm."); @@ -50,114 +50,756 @@ static const u8 sEarlyBirdDescription[] = _("Awakens quickly from sleep."); static const u8 sFlameBodyDescription[] = _("Burns the foe on contact."); static const u8 sRunAwayDescription[] = _("Makes escaping easier."); static const u8 sKeenEyeDescription[] = _("Prevents loss of accuracy."); -static const u8 sHyperCutterDescription[] = _("Prevents ATTACK reduction."); +static const u8 sHyperCutterDescription[] = _("Prevents Attack reduction."); static const u8 sPickupDescription[] = _("May pick up items."); static const u8 sTruantDescription[] = _("Moves only every two turns."); static const u8 sHustleDescription[] = _("Trades accuracy for power."); static const u8 sCuteCharmDescription[] = _("Infatuates on contact."); -static const u8 sPlusDescription[] = _("Powers up with MINUS."); -static const u8 sMinusDescription[] = _("Powers up with PLUS."); +static const u8 sPlusDescription[] = _("Powers up with Minus."); +static const u8 sMinusDescription[] = _("Powers up with Plus."); static const u8 sForecastDescription[] = _("Changes with the weather."); static const u8 sStickyHoldDescription[] = _("Prevents item theft."); static const u8 sShedSkinDescription[] = _("Heals the body by shedding."); -static const u8 sGutsDescription[] = _("Ups ATTACK if suffering."); -static const u8 sMarvelScaleDescription[] = _("Ups DEFENSE if suffering."); +static const u8 sGutsDescription[] = _("Ups Attack if suffering."); +static const u8 sMarvelScaleDescription[] = _("Ups Defense if suffering."); static const u8 sLiquidOozeDescription[] = _("Draining causes injury."); -static const u8 sOvergrowDescription[] = _("Ups GRASS moves in a pinch."); -static const u8 sBlazeDescription[] = _("Ups FIRE moves in a pinch."); -static const u8 sTorrentDescription[] = _("Ups WATER moves in a pinch."); -static const u8 sSwarmDescription[] = _("Ups BUG moves in a pinch."); +static const u8 sOvergrowDescription[] = _("Ups Grass moves in a pinch."); +static const u8 sBlazeDescription[] = _("Ups Fire moves in a pinch."); +static const u8 sTorrentDescription[] = _("Ups Water moves in a pinch."); +static const u8 sSwarmDescription[] = _("Ups Bug moves in a pinch."); static const u8 sRockHeadDescription[] = _("Prevents recoil damage."); static const u8 sDroughtDescription[] = _("Summons sunlight in battle."); static const u8 sArenaTrapDescription[] = _("Prevents fleeing."); static const u8 sVitalSpiritDescription[] = _("Prevents sleep."); static const u8 sWhiteSmokeDescription[] = _("Prevents ability reduction."); -static const u8 sPurePowerDescription[] = _("Raises ATTACK."); +static const u8 sPurePowerDescription[] = _("Raises Attack."); static const u8 sShellArmorDescription[] = _("Blocks critical hits."); -static const u8 sCacophonyDescription[] = _("Avoids sound-based moves."); static const u8 sAirLockDescription[] = _("Negates weather effects."); +static const u8 sTangledFeetDescription[] = _("Ups evasion if confused."); +static const u8 sMotorDriveDescription[] = _("Electricity raises Speed."); +static const u8 sRivalryDescription[] = _("Powers up against rivals."); +static const u8 sSteadfastDescription[] = _("Flinching raises Speed."); +static const u8 sSnowCloakDescription[] = _("Ups evasion in Hail."); +static const u8 sGluttonyDescription[] = _("Eats Berries early."); +static const u8 sAngerPointDescription[] = _("Critical hits raise Attack."); +static const u8 sUnburdenDescription[] = _("Using a hold item ups Speed."); +static const u8 sHeatproofDescription[] = _("Heat and burn protection."); +static const u8 sSimpleDescription[] = _("Prone to wild stat changes."); +static const u8 sDrySkinDescription[] = _("Prefers moisture to heat."); +static const u8 sDownloadDescription[] = _("Adjusts power favorably."); +static const u8 sIronFistDescription[] = _("Boosts punching moves."); +static const u8 sPoisonHealDescription[] = _("Restores HP if poisoned."); +static const u8 sAdaptabilityDescription[] = _("Boosts same type attacks."); +static const u8 sSkillLinkDescription[] = _("Multi-hit moves hit 5 times."); +static const u8 sHydrationDescription[] = _("Cures status in rain."); +static const u8 sSolarPowerDescription[] = _("Powers up in sunshine."); +static const u8 sQuickFeetDescription[] = _("Ups Speed if suffering."); +static const u8 sNormalizeDescription[] = _("Moves become Normal-type."); +static const u8 sSniperDescription[] = _("Boosts critical hits."); +static const u8 sMagicGuardDescription[] = _("Only damaged by attacks."); +static const u8 sNoGuardDescription[] = _("Ensures that all moves hit."); +static const u8 sStallDescription[] = _("Always moves last."); +static const u8 sTechnicianDescription[] = _("Boosts weaker moves."); +static const u8 sLeafGuardDescription[] = _("Blocks status in sunshine."); +static const u8 sKlutzDescription[] = _("Can't use hold items."); +static const u8 sMoldBreakerDescription[] = _("Moves hit through abilities."); +static const u8 sSuperLuckDescription[] = _("Critical hits land often."); +static const u8 sAftermathDescription[] = _("Fainting damages the foe."); +static const u8 sAnticipationDescription[] = _("Senses dangerous moves."); +static const u8 sForewarnDescription[] = _("Determines a foe's move."); +static const u8 sUnawareDescription[] = _("Ignores stat changes."); +static const u8 sTintedLensDescription[] = _("Ups “not very effective”."); +static const u8 sFilterDescription[] = _("Weakens “supereffective”."); +static const u8 sSlowStartDescription[] = _("Takes a while to get going."); +static const u8 sScrappyDescription[] = _("Hits Ghost-type Pokémon."); +static const u8 sStormDrainDescription[] = _("Draws in Water moves."); +static const u8 sIceBodyDescription[] = _("Slight HP recovery in Hail."); +static const u8 sSnowWarningDescription[] = _("Summons a hailstorm."); +static const u8 sHoneyGatherDescription[] = _("May gather Honey."); +static const u8 sFriskDescription[] = _("Checks a foe's item."); +static const u8 sRecklessDescription[] = _("Boosts moves with recoil."); +static const u8 sMultitypeDescription[] = _("Changes type to its Plate."); +static const u8 sFlowerGiftDescription[] = _("Transforms in sunshine."); +static const u8 sBadDreamsDescription[] = _("Damages sleeping Pokémon."); +static const u8 sPickpocketDescription[] = _("Steals the foe's held item."); +static const u8 sSheerForceDescription[] = _("Trades effects for power."); +static const u8 sContraryDescription[] = _("Inverts stat changes."); +static const u8 sUnnerveDescription[] = _("Foes can't eat Berries."); +static const u8 sDefiantDescription[] = _("Lowered stats up Attack."); +static const u8 sDefeatistDescription[] = _("Gives up at half HP."); +static const u8 sCursedBodyDescription[] = _("Disables moves on contact."); +static const u8 sHealerDescription[] = _("Heals partner Pokémon."); +static const u8 sFriendGuardDescription[] = _("Lowers damage to partner."); +static const u8 sWeakArmorDescription[] = _("Its stats change when hit."); +static const u8 sHeavyMetalDescription[] = _("Doubles weight."); +static const u8 sLightMetalDescription[] = _("Halves weight."); +static const u8 sMultiscaleDescription[] = _("Halves damage at full HP."); +static const u8 sToxicBoostDescription[] = _("Ups Attack if poisoned."); +static const u8 sFlareBoostDescription[] = _("Ups Sp. Atk if burned."); +static const u8 sHarvestDescription[] = _("May recycle a used Berry."); +static const u8 sTelepathyDescription[] = _("Can't be damaged by an ally."); +static const u8 sMoodyDescription[] = _("Stats change gradually."); +static const u8 sOvercoatDescription[] = _("Blocks weather and powder."); +static const u8 sBigPecksDescription[] = _("Prevents Defense loss."); +static const u8 sSandRushDescription[] = _("Ups Speed in a sandstorm."); +static const u8 sWonderSkinDescription[] = _("May avoid status problems."); +static const u8 sAnalyticDescription[] = _("Moving last boosts power."); +static const u8 sIllusionDescription[] = _("Appears as a partner."); +static const u8 sImposterDescription[] = _("Transforms into the foe."); +static const u8 sInfiltratorDescription[] = _("Passes through barriers."); +static const u8 sMummyDescription[] = _("Spreads with contact."); +static const u8 sMoxieDescription[] = _("KOs raise Attack."); +static const u8 sJustifiedDescription[] = _("Dark hits raise Attack."); +static const u8 sRattledDescription[] = _("Raises Speed when scared."); +static const u8 sMagicBounceDescription[] = _("Reflects status moves."); +static const u8 sSapSipperDescription[] = _("Grass increases Attack."); +static const u8 sPranksterDescription[] = _("Status moves go first."); +static const u8 sSandForceDescription[] = _("Powers up in a sandstorm."); +static const u8 sZenModeDescription[] = _("Transforms at half HP."); +static const u8 sVictoryStarDescription[] = _("Raises party accuracy."); +static const u8 sAromaVeilDescription[] = _("Prevents limiting of moves."); +static const u8 sFlowerVeilDescription[] = _("Protects Grass-types."); +static const u8 sCheekPouchDescription[] = _("Eating Berries restores HP."); +static const u8 sProteanDescription[] = _("Changes type to used move."); +static const u8 sFurCoatDescription[] = _("Raises Defense."); +static const u8 sBulletproofDescription[] = _("Avoids some projectiles."); +static const u8 sCompetitiveDescription[] = _("Lowered stats up Sp. Atk."); +static const u8 sStrongJawDescription[] = _("Boosts biting moves."); +static const u8 sRefrigerateDescription[] = _("Normal moves become Ice."); +static const u8 sSweetVeilDescription[] = _("Prevents party from sleep."); +static const u8 sStanceChangeDescription[] = _("Transforms as it battles."); +static const u8 sGaleWingsDescription[] = _("Flying moves go first."); +static const u8 sMegaLauncherDescription[] = _("Boosts pulse moves."); +static const u8 sGrassPeltDescription[] = _("Ups Defense in grass."); +static const u8 sSymbiosisDescription[] = _("Passes its item to an ally."); +static const u8 sToughClawsDescription[] = _("Boosts contact moves."); +static const u8 sPixilateDescription[] = _("Normal moves become Fairy."); +static const u8 sGooeyDescription[] = _("Lowers Speed on contact."); +static const u8 sAerilateDescription[] = _("Normal moves become Flying."); +static const u8 sParentalBondDescription[] = _("Moves hit twice."); +static const u8 sDarkAuraDescription[] = _("Boosts Dark moves."); +static const u8 sFairyAuraDescription[] = _("Boosts Fairy moves."); +static const u8 sAuraBreakDescription[] = _("Reverse aura abilities."); +static const u8 sPrimordialSeaDescription[] = _("Summons heavy rain."); +static const u8 sDesolateLandDescription[] = _("Summons intense sunlight."); +static const u8 sDeltaStreamDescription[] = _("Summons strong winds."); +static const u8 sStaminaDescription[] = _("Boosts Defense when hit."); +static const u8 sWimpOutDescription[] = _("Flees at half HP."); +static const u8 sWaterCompactionDescription[] = _("Water boosts Defense."); +static const u8 sMercilessDescription[] = _("Criticals poisoned foes."); +static const u8 sShieldsDownDescription[] = _("Shell breaks at half HP."); +static const u8 sStakeoutDescription[] = _("Stronger as foes switch in."); +static const u8 sWaterBubbleDescription[] = _("Guards from fire and burns."); +static const u8 sSteelworkerDescription[] = _("Powers up Steel moves."); +static const u8 sBerserkDescription[] = _("Boosts Sp. Atk at low HP."); +static const u8 sSlushRushDescription[] = _("Raises Speed in hail."); +static const u8 sLongReachDescription[] = _("Never makes contact."); +static const u8 sLiquidVoiceDescription[] = _("Makes sound moves Water."); +static const u8 sTriageDescription[] = _("Healing moves go first."); +static const u8 sGalvanizeDescription[] = _("Normal moves turn Electric."); +static const u8 sSurgeSurferDescription[] = _("Faster on electricity."); +static const u8 sSchoolingDescription[] = _("Forms a school when strong."); +static const u8 sDisguiseDescription[] = _("Decoy protects it once."); +static const u8 sBattleBondDescription[] = _("Changes form after a KO."); +static const u8 sPowerConstructDescription[] = _("Cells aid it when weakened."); +static const u8 sCorrosionDescription[] = _("Poisons any type."); +static const u8 sComatoseDescription[] = _("Always drowsing."); +static const u8 sQueenlyMajestyDescription[] = _("Protects from priority."); +static const u8 sInnardsOutDescription[] = _("Hurts foe when defeated."); +static const u8 sDancerDescription[] = _("Dances along with others."); +static const u8 sBatteryDescription[] = _("Boosts ally's Sp. Atk."); +static const u8 sFluffyDescription[] = _("Tougher but flammable."); +static const u8 sSoulHeartDescription[] = _("KOs raise Sp. Atk."); +static const u8 sTanglingHairDescription[] = _("Contact lowers Speed."); +static const u8 sReceiverDescription[] = _("Copies ally's ability."); +static const u8 sBeastBoostDescription[] = _("KOs boost best stat."); +static const u8 sRKSSystemDescription[] = _("Memories change its type."); +static const u8 sElectricSurgeDescription[] = _("Field becomes Electric."); +static const u8 sPsychicSurgeDescription[] = _("Field becomes weird."); +static const u8 sMistySurgeDescription[] = _("Field becomes misty."); +static const u8 sGrassySurgeDescription[] = _("Field becomes grassy."); +static const u8 sFullMetalBodyDescription[] = _("Prevents stat reduction."); +static const u8 sNeuroforceDescription[] = _("Ups “supereffective”."); +static const u8 sIntrepidSwordDescription[] = _("Ups Attack on entry."); +static const u8 sDauntlessShieldDescription[] = _("Ups Defense on entry."); +static const u8 sLiberoDescription[] = _("Changes type to move's."); +static const u8 sBallFetchDescription[] = _("Fetches failed Poké Ball."); +static const u8 sCottonDownDescription[] = _("Lower Speed of all when hit."); +static const u8 sPropellerTailDescription[] = _("Ignores foe's redirection."); +static const u8 sMirrorArmorDescription[] = _("Reflect stat decreases."); +static const u8 sGulpMissileDescription[] = _("If hit, spits prey from sea."); +static const u8 sStalwartDescription[] = _("Ignores foe's redirection."); +static const u8 sSteamEngineDescription[] = _("Fire or Water hits up Speed."); +static const u8 sPunkRockDescription[] = _("Ups and resists sound."); +static const u8 sSandSpitDescription[] = _("Creates a sandstorm if hit."); +static const u8 sIceScalesDescription[] = _("Halves special damage."); +static const u8 sRipenDescription[] = _("Doubles effect of Berries."); +static const u8 sIceFaceDescription[] = _("Take a free hit. Hail renews."); +static const u8 sPowerSpotDescription[] = _("Powers up ally moves."); +static const u8 sMimicryDescription[] = _("Changes type on terrain."); +static const u8 sScreenCleanerDescription[] = _("Removes walls of light."); +static const u8 sSteelySpiritDescription[] = _("Boosts ally's Steel moves."); +static const u8 sPerishBodyDescription[] = _("Foe faints in 3 turns if hit."); +static const u8 sWanderingSpiritDescription[] = _("Trade abilities on contact."); +static const u8 sGorillaTacticsDescription[] = _("Ups Attack and locks move."); +static const u8 sNeutralizingGasDescription[] = _("All Abilities are nullified."); +static const u8 sPastelVeilDescription[] = _("Protects team from poison."); +static const u8 sHungerSwitchDescription[] = _("Changes form each turn.");; +static const u8 sQuickDrawDescription[] = _("Moves first occasionally."); +static const u8 sUnseenFistDescription[] = _("Contact evades protection."); +static const u8 sCuriousMedicineDescription[] = _("Remove ally's stat changes."); +static const u8 sTransistorDescription[] = _("Ups Electric-type moves."); +static const u8 sDragonsMawDescription[] = _("Ups Dragon-type moves."); +static const u8 sChillingNeighDescription[] = _("KOs boost Attack stat."); +static const u8 sGrimNeighDescription[] = _("KOs boost Sp. Atk stat."); +static const u8 sAsOneIceRiderDescription[] = _("Unnerve and Chilling Neigh."); +static const u8 sAsOneShadowRiderDescription[] = _("Unnerve and Grim Neigh."); +#if B_EXPANDED_ABILITY_NAMES == TRUE const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = { [ABILITY_NONE] = _("-------"), - [ABILITY_STENCH] = _("STENCH"), - [ABILITY_DRIZZLE] = _("DRIZZLE"), - [ABILITY_SPEED_BOOST] = _("SPEED BOOST"), - [ABILITY_BATTLE_ARMOR] = _("BATTLE ARMOR"), - [ABILITY_STURDY] = _("STURDY"), - [ABILITY_DAMP] = _("DAMP"), - [ABILITY_LIMBER] = _("LIMBER"), - [ABILITY_SAND_VEIL] = _("SAND VEIL"), - [ABILITY_STATIC] = _("STATIC"), - [ABILITY_VOLT_ABSORB] = _("VOLT ABSORB"), - [ABILITY_WATER_ABSORB] = _("WATER ABSORB"), - [ABILITY_OBLIVIOUS] = _("OBLIVIOUS"), - [ABILITY_CLOUD_NINE] = _("CLOUD NINE"), - [ABILITY_COMPOUND_EYES] = _("COMPOUNDEYES"), - [ABILITY_INSOMNIA] = _("INSOMNIA"), - [ABILITY_COLOR_CHANGE] = _("COLOR CHANGE"), - [ABILITY_IMMUNITY] = _("IMMUNITY"), - [ABILITY_FLASH_FIRE] = _("FLASH FIRE"), - [ABILITY_SHIELD_DUST] = _("SHIELD DUST"), - [ABILITY_OWN_TEMPO] = _("OWN TEMPO"), - [ABILITY_SUCTION_CUPS] = _("SUCTION CUPS"), - [ABILITY_INTIMIDATE] = _("INTIMIDATE"), - [ABILITY_SHADOW_TAG] = _("SHADOW TAG"), - [ABILITY_ROUGH_SKIN] = _("ROUGH SKIN"), - [ABILITY_WONDER_GUARD] = _("WONDER GUARD"), - [ABILITY_LEVITATE] = _("LEVITATE"), - [ABILITY_EFFECT_SPORE] = _("EFFECT SPORE"), - [ABILITY_SYNCHRONIZE] = _("SYNCHRONIZE"), - [ABILITY_CLEAR_BODY] = _("CLEAR BODY"), - [ABILITY_NATURAL_CURE] = _("NATURAL CURE"), - [ABILITY_LIGHTNING_ROD] = _("LIGHTNINGROD"), - [ABILITY_SERENE_GRACE] = _("SERENE GRACE"), - [ABILITY_SWIFT_SWIM] = _("SWIFT SWIM"), - [ABILITY_CHLOROPHYLL] = _("CHLOROPHYLL"), - [ABILITY_ILLUMINATE] = _("ILLUMINATE"), - [ABILITY_TRACE] = _("TRACE"), - [ABILITY_HUGE_POWER] = _("HUGE POWER"), - [ABILITY_POISON_POINT] = _("POISON POINT"), - [ABILITY_INNER_FOCUS] = _("INNER FOCUS"), - [ABILITY_MAGMA_ARMOR] = _("MAGMA ARMOR"), - [ABILITY_WATER_VEIL] = _("WATER VEIL"), - [ABILITY_MAGNET_PULL] = _("MAGNET PULL"), - [ABILITY_SOUNDPROOF] = _("SOUNDPROOF"), - [ABILITY_RAIN_DISH] = _("RAIN DISH"), - [ABILITY_SAND_STREAM] = _("SAND STREAM"), - [ABILITY_PRESSURE] = _("PRESSURE"), - [ABILITY_THICK_FAT] = _("THICK FAT"), - [ABILITY_EARLY_BIRD] = _("EARLY BIRD"), - [ABILITY_FLAME_BODY] = _("FLAME BODY"), - [ABILITY_RUN_AWAY] = _("RUN AWAY"), - [ABILITY_KEEN_EYE] = _("KEEN EYE"), - [ABILITY_HYPER_CUTTER] = _("HYPER CUTTER"), - [ABILITY_PICKUP] = _("PICKUP"), - [ABILITY_TRUANT] = _("TRUANT"), - [ABILITY_HUSTLE] = _("HUSTLE"), - [ABILITY_CUTE_CHARM] = _("CUTE CHARM"), - [ABILITY_PLUS] = _("PLUS"), - [ABILITY_MINUS] = _("MINUS"), - [ABILITY_FORECAST] = _("FORECAST"), - [ABILITY_STICKY_HOLD] = _("STICKY HOLD"), - [ABILITY_SHED_SKIN] = _("SHED SKIN"), - [ABILITY_GUTS] = _("GUTS"), - [ABILITY_MARVEL_SCALE] = _("MARVEL SCALE"), - [ABILITY_LIQUID_OOZE] = _("LIQUID OOZE"), - [ABILITY_OVERGROW] = _("OVERGROW"), - [ABILITY_BLAZE] = _("BLAZE"), - [ABILITY_TORRENT] = _("TORRENT"), - [ABILITY_SWARM] = _("SWARM"), - [ABILITY_ROCK_HEAD] = _("ROCK HEAD"), - [ABILITY_DROUGHT] = _("DROUGHT"), - [ABILITY_ARENA_TRAP] = _("ARENA TRAP"), - [ABILITY_VITAL_SPIRIT] = _("VITAL SPIRIT"), - [ABILITY_WHITE_SMOKE] = _("WHITE SMOKE"), - [ABILITY_PURE_POWER] = _("PURE POWER"), - [ABILITY_SHELL_ARMOR] = _("SHELL ARMOR"), -// [ABILITY_CACOPHONY] = _("CACOPHONY"), - [ABILITY_AIR_LOCK] = _("AIR LOCK"), + [ABILITY_STENCH] = _("Stench"), + [ABILITY_DRIZZLE] = _("Drizzle"), + [ABILITY_SPEED_BOOST] = _("Speed Boost"), + [ABILITY_BATTLE_ARMOR] = _("Battle Armor"), + [ABILITY_STURDY] = _("Sturdy"), + [ABILITY_DAMP] = _("Damp"), + [ABILITY_LIMBER] = _("Limber"), + [ABILITY_SAND_VEIL] = _("Sand Veil"), + [ABILITY_STATIC] = _("Static"), + [ABILITY_VOLT_ABSORB] = _("Volt Absorb"), + [ABILITY_WATER_ABSORB] = _("Water Absorb"), + [ABILITY_OBLIVIOUS] = _("Oblivious"), + [ABILITY_CLOUD_NINE] = _("Cloud Nine"), + [ABILITY_COMPOUND_EYES] = _("Compound Eyes"), + [ABILITY_INSOMNIA] = _("Insomnia"), + [ABILITY_COLOR_CHANGE] = _("Color Change"), + [ABILITY_IMMUNITY] = _("Immunity"), + [ABILITY_FLASH_FIRE] = _("Flash Fire"), + [ABILITY_SHIELD_DUST] = _("Shield Dust"), + [ABILITY_OWN_TEMPO] = _("Own Tempo"), + [ABILITY_SUCTION_CUPS] = _("Suction Cups"), + [ABILITY_INTIMIDATE] = _("Intimidate"), + [ABILITY_SHADOW_TAG] = _("Shadow Tag"), + [ABILITY_ROUGH_SKIN] = _("Rough Skin"), + [ABILITY_WONDER_GUARD] = _("Wonder Guard"), + [ABILITY_LEVITATE] = _("Levitate"), + [ABILITY_EFFECT_SPORE] = _("Effect Spore"), + [ABILITY_SYNCHRONIZE] = _("Synchronize"), + [ABILITY_CLEAR_BODY] = _("Clear Body"), + [ABILITY_NATURAL_CURE] = _("Natural Cure"), + [ABILITY_LIGHTNING_ROD] = _("Lightning Rod"), + [ABILITY_SERENE_GRACE] = _("Serene Grace"), + [ABILITY_SWIFT_SWIM] = _("Swift Swim"), + [ABILITY_CHLOROPHYLL] = _("Chlorophyll"), + [ABILITY_ILLUMINATE] = _("Illuminate"), + [ABILITY_TRACE] = _("Trace"), + [ABILITY_HUGE_POWER] = _("Huge Power"), + [ABILITY_POISON_POINT] = _("Poison Point"), + [ABILITY_INNER_FOCUS] = _("Inner Focus"), + [ABILITY_MAGMA_ARMOR] = _("Magma Armor"), + [ABILITY_WATER_VEIL] = _("Water Veil"), + [ABILITY_MAGNET_PULL] = _("Magnet Pull"), + [ABILITY_SOUNDPROOF] = _("Soundproof"), + [ABILITY_RAIN_DISH] = _("Rain Dish"), + [ABILITY_SAND_STREAM] = _("Sand Stream"), + [ABILITY_PRESSURE] = _("Pressure"), + [ABILITY_THICK_FAT] = _("Thick Fat"), + [ABILITY_EARLY_BIRD] = _("Early Bird"), + [ABILITY_FLAME_BODY] = _("Flame Body"), + [ABILITY_RUN_AWAY] = _("Run Away"), + [ABILITY_KEEN_EYE] = _("Keen Eye"), + [ABILITY_HYPER_CUTTER] = _("Hyper Cutter"), + [ABILITY_PICKUP] = _("Pickup"), + [ABILITY_TRUANT] = _("Truant"), + [ABILITY_HUSTLE] = _("Hustle"), + [ABILITY_CUTE_CHARM] = _("Cute Charm"), + [ABILITY_PLUS] = _("Plus"), + [ABILITY_MINUS] = _("Minus"), + [ABILITY_FORECAST] = _("Forecast"), + [ABILITY_STICKY_HOLD] = _("Sticky Hold"), + [ABILITY_SHED_SKIN] = _("Shed Skin"), + [ABILITY_GUTS] = _("Guts"), + [ABILITY_MARVEL_SCALE] = _("Marvel Scale"), + [ABILITY_LIQUID_OOZE] = _("Liquid Ooze"), + [ABILITY_OVERGROW] = _("Overgrow"), + [ABILITY_BLAZE] = _("Blaze"), + [ABILITY_TORRENT] = _("Torrent"), + [ABILITY_SWARM] = _("Swarm"), + [ABILITY_ROCK_HEAD] = _("Rock Head"), + [ABILITY_DROUGHT] = _("Drought"), + [ABILITY_ARENA_TRAP] = _("Arena Trap"), + [ABILITY_VITAL_SPIRIT] = _("Vital Spirit"), + [ABILITY_WHITE_SMOKE] = _("White Smoke"), + [ABILITY_PURE_POWER] = _("Pure Power"), + [ABILITY_SHELL_ARMOR] = _("Shell Armor"), + [ABILITY_AIR_LOCK] = _("Air Lock"), + [ABILITY_TANGLED_FEET] = _("Tangled Feet"), + [ABILITY_MOTOR_DRIVE] = _("Motor Drive"), + [ABILITY_RIVALRY] = _("Rivalry"), + [ABILITY_STEADFAST] = _("Steadfast"), + [ABILITY_SNOW_CLOAK] = _("Snow Cloak"), + [ABILITY_GLUTTONY] = _("Gluttony"), + [ABILITY_ANGER_POINT] = _("Anger Point"), + [ABILITY_UNBURDEN] = _("Unburden"), + [ABILITY_HEATPROOF] = _("Heatproof"), + [ABILITY_SIMPLE] = _("Simple"), + [ABILITY_DRY_SKIN] = _("Dry Skin"), + [ABILITY_DOWNLOAD] = _("Download"), + [ABILITY_IRON_FIST] = _("Iron Fist"), + [ABILITY_POISON_HEAL] = _("Poison Heal"), + [ABILITY_ADAPTABILITY] = _("Adaptability"), + [ABILITY_SKILL_LINK] = _("Skill Link"), + [ABILITY_HYDRATION] = _("Hydration"), + [ABILITY_SOLAR_POWER] = _("Solar Power"), + [ABILITY_QUICK_FEET] = _("Quick Feet"), + [ABILITY_NORMALIZE] = _("Normalize"), + [ABILITY_SNIPER] = _("Sniper"), + [ABILITY_MAGIC_GUARD] = _("Magic Guard"), + [ABILITY_NO_GUARD] = _("No Guard"), + [ABILITY_STALL] = _("Stall"), + [ABILITY_TECHNICIAN] = _("Technician"), + [ABILITY_LEAF_GUARD] = _("Leaf Guard"), + [ABILITY_KLUTZ] = _("Klutz"), + [ABILITY_MOLD_BREAKER] = _("Mold Breaker"), + [ABILITY_SUPER_LUCK] = _("Super Luck"), + [ABILITY_AFTERMATH] = _("Aftermath"), + [ABILITY_ANTICIPATION] = _("Anticipation"), + [ABILITY_FOREWARN] = _("Forewarn"), + [ABILITY_UNAWARE] = _("Unaware"), + [ABILITY_TINTED_LENS] = _("Tinted Lens"), + [ABILITY_FILTER] = _("Filter"), + [ABILITY_SLOW_START] = _("Slow Start"), + [ABILITY_SCRAPPY] = _("Scrappy"), + [ABILITY_STORM_DRAIN] = _("Storm Drain"), + [ABILITY_ICE_BODY] = _("Ice Body"), + [ABILITY_SOLID_ROCK] = _("Solid Rock"), + [ABILITY_SNOW_WARNING] = _("Snow Warning"), + [ABILITY_HONEY_GATHER] = _("Honey Gather"), + [ABILITY_FRISK] = _("Frisk"), + [ABILITY_RECKLESS] = _("Reckless"), + [ABILITY_MULTITYPE] = _("Multitype"), + [ABILITY_FLOWER_GIFT] = _("Flower Gift"), + [ABILITY_BAD_DREAMS] = _("Bad Dreams"), + [ABILITY_PICKPOCKET] = _("Pickpocket"), + [ABILITY_SHEER_FORCE] = _("Sheer Force"), + [ABILITY_CONTRARY] = _("Contrary"), + [ABILITY_UNNERVE] = _("Unnerve"), + [ABILITY_DEFIANT] = _("Defiant"), + [ABILITY_DEFEATIST] = _("Defeatist"), + [ABILITY_CURSED_BODY] = _("Cursed Body"), + [ABILITY_HEALER] = _("Healer"), + [ABILITY_FRIEND_GUARD] = _("Friend Guard"), + [ABILITY_WEAK_ARMOR] = _("Weak Armor"), + [ABILITY_HEAVY_METAL] = _("Heavy Metal"), + [ABILITY_LIGHT_METAL] = _("Light Metal"), + [ABILITY_MULTISCALE] = _("Multiscale"), + [ABILITY_TOXIC_BOOST] = _("Toxic Boost"), + [ABILITY_FLARE_BOOST] = _("Flare Boost"), + [ABILITY_HARVEST] = _("Harvest"), + [ABILITY_TELEPATHY] = _("Telepathy"), + [ABILITY_MOODY] = _("Moody"), + [ABILITY_OVERCOAT] = _("Overcoat"), + [ABILITY_POISON_TOUCH] = _("Poison Touch"), + [ABILITY_REGENERATOR] = _("Regenerator"), + [ABILITY_BIG_PECKS] = _("Big Pecks"), + [ABILITY_SAND_RUSH] = _("Sand Rush"), + [ABILITY_WONDER_SKIN] = _("Wonder Skin"), + [ABILITY_ANALYTIC] = _("Analytic"), + [ABILITY_ILLUSION] = _("Illusion"), + [ABILITY_IMPOSTER] = _("Imposter"), + [ABILITY_INFILTRATOR] = _("Infiltrator"), + [ABILITY_MUMMY] = _("Mummy"), + [ABILITY_MOXIE] = _("Moxie"), + [ABILITY_JUSTIFIED] = _("Justified"), + [ABILITY_RATTLED] = _("Rattled"), + [ABILITY_MAGIC_BOUNCE] = _("Magic Bounce"), + [ABILITY_SAP_SIPPER] = _("Sap Sipper"), + [ABILITY_PRANKSTER] = _("Prankster"), + [ABILITY_SAND_FORCE] = _("Sand Force"), + [ABILITY_IRON_BARBS] = _("Iron Barbs"), + [ABILITY_ZEN_MODE] = _("Zen Mode"), + [ABILITY_VICTORY_STAR] = _("Victory Star"), + [ABILITY_TURBOBLAZE] = _("Turboblaze"), + [ABILITY_TERAVOLT] = _("Teravolt"), + [ABILITY_AROMA_VEIL] = _("Aroma Veil"), + [ABILITY_FLOWER_VEIL] = _("Flower Veil"), + [ABILITY_CHEEK_POUCH] = _("Cheek Pouch"), + [ABILITY_PROTEAN] = _("Protean"), + [ABILITY_FUR_COAT] = _("Fur Coat"), + [ABILITY_MAGICIAN] = _("Magician"), + [ABILITY_BULLETPROOF] = _("Bulletproof"), + [ABILITY_COMPETITIVE] = _("Competitive"), + [ABILITY_STRONG_JAW] = _("Strong Jaw"), + [ABILITY_REFRIGERATE] = _("Refrigerate"), + [ABILITY_SWEET_VEIL] = _("Sweet Veil"), + [ABILITY_STANCE_CHANGE] = _("Stance Change"), + [ABILITY_GALE_WINGS] = _("Gale Wings"), + [ABILITY_MEGA_LAUNCHER] = _("Mega Launcher"), + [ABILITY_GRASS_PELT] = _("Grass Pelt"), + [ABILITY_SYMBIOSIS] = _("Symbiosis"), + [ABILITY_TOUGH_CLAWS] = _("Tough Claws"), + [ABILITY_PIXILATE] = _("Pixilate"), + [ABILITY_GOOEY] = _("Gooey"), + [ABILITY_AERILATE] = _("Aerilate"), + [ABILITY_PARENTAL_BOND] = _("Parental Bond"), + [ABILITY_DARK_AURA] = _("Dark Aura"), + [ABILITY_FAIRY_AURA] = _("Fairy Aura"), + [ABILITY_AURA_BREAK] = _("Aura Break"), + [ABILITY_PRIMORDIAL_SEA] = _("Primordial Sea"), + [ABILITY_DESOLATE_LAND] = _("Desolate Land"), + [ABILITY_DELTA_STREAM] = _("Delta Stream"), + [ABILITY_STAMINA] = _("Stamina"), + [ABILITY_WIMP_OUT] = _("Wimp Out"), + [ABILITY_EMERGENCY_EXIT] = _("Emergency Exit"), + [ABILITY_WATER_COMPACTION] = _("Water Compaction"), + [ABILITY_MERCILESS] = _("Merciless"), + [ABILITY_SHIELDS_DOWN] = _("Shields Down"), + [ABILITY_STAKEOUT] = _("Stakeout"), + [ABILITY_WATER_BUBBLE] = _("Water Bubble"), + [ABILITY_STEELWORKER] = _("Steelworker"), + [ABILITY_BERSERK] = _("Berserk"), + [ABILITY_SLUSH_RUSH] = _("Slush Rush"), + [ABILITY_LONG_REACH] = _("Long Reach"), + [ABILITY_LIQUID_VOICE] = _("Liquid Voice"), + [ABILITY_TRIAGE] = _("Triage"), + [ABILITY_GALVANIZE] = _("Galvanize"), + [ABILITY_SURGE_SURFER] = _("Surge Surfer"), + [ABILITY_SCHOOLING] = _("Schooling"), + [ABILITY_DISGUISE] = _("Disguise"), + [ABILITY_BATTLE_BOND] = _("Battle Bond"), + [ABILITY_POWER_CONSTRUCT] = _("Power Construct"), + [ABILITY_CORROSION] = _("Corrosion"), + [ABILITY_COMATOSE] = _("Comatose"), + [ABILITY_QUEENLY_MAJESTY] = _("Queenly Majesty"), + [ABILITY_INNARDS_OUT] = _("Innards Out"), + [ABILITY_DANCER] = _("Dancer"), + [ABILITY_BATTERY] = _("Battery"), + [ABILITY_FLUFFY] = _("Fluffy"), + [ABILITY_DAZZLING] = _("Dazzling"), + [ABILITY_SOUL_HEART] = _("Soul-Heart"), + [ABILITY_TANGLING_HAIR] = _("Tangling Hair"), + [ABILITY_RECEIVER] = _("Receiver"), + [ABILITY_POWER_OF_ALCHEMY] = _("Power Of Alchemy"), + [ABILITY_BEAST_BOOST] = _("Beast Boost"), + [ABILITY_RKS_SYSTEM] = _("RKS System"), + [ABILITY_ELECTRIC_SURGE] = _("Electric Surge"), + [ABILITY_PSYCHIC_SURGE] = _("Psychic Surge"), + [ABILITY_MISTY_SURGE] = _("Misty Surge"), + [ABILITY_GRASSY_SURGE] = _("Grassy Surge"), + [ABILITY_FULL_METAL_BODY] = _("Full Metal Body"), + [ABILITY_SHADOW_SHIELD] = _("Shadow Shield"), + [ABILITY_PRISM_ARMOR] = _("Prism Armor"), + [ABILITY_NEUROFORCE] = _("Neuroforce"), + [ABILITY_INTREPID_SWORD] = _("Intrepid Sword"), + [ABILITY_DAUNTLESS_SHIELD] = _("Dauntless Shield"), + [ABILITY_LIBERO] = _("Libero"), + [ABILITY_BALL_FETCH] = _("Ball Fetch"), + [ABILITY_COTTON_DOWN] = _("Cotton Down"), + [ABILITY_PROPELLER_TAIL] = _("Propeller Tail"), + [ABILITY_MIRROR_ARMOR] = _("Mirror Armor"), + [ABILITY_GULP_MISSILE] = _("Gulp Missile"), + [ABILITY_STALWART] = _("Stalwart"), + [ABILITY_STEAM_ENGINE] = _("Steam Engine"), + [ABILITY_PUNK_ROCK] = _("Punk Rock"), + [ABILITY_SAND_SPIT] = _("Sand Spit"), + [ABILITY_ICE_SCALES] = _("Ice Scales"), + [ABILITY_RIPEN] = _("Ripen"), + [ABILITY_ICE_FACE] = _("Ice Face"), + [ABILITY_POWER_SPOT] = _("Power Spot"), + [ABILITY_MIMICRY] = _("Mimicry"), + [ABILITY_SCREEN_CLEANER] = _("Screen Cleaner"), + [ABILITY_STEELY_SPIRIT] = _("Steely Spirit"), + [ABILITY_PERISH_BODY] = _("Perish Body"), + [ABILITY_WANDERING_SPIRIT] = _("Wandering Spirit"), + [ABILITY_GORILLA_TACTICS] = _("Gorilla Tactics"), + [ABILITY_NEUTRALIZING_GAS] = _("Neutralizing Gas"), + [ABILITY_PASTEL_VEIL] = _("Pastel Veil"), + [ABILITY_HUNGER_SWITCH] = _("Hunger Switch"), + [ABILITY_QUICK_DRAW] = _("Quick Draw"), + [ABILITY_UNSEEN_FIST] = _("Unseen Fist"), + [ABILITY_CURIOUS_MEDICINE] = _("Curious Medicine"), + [ABILITY_TRANSISTOR] = _("Transistor"), + [ABILITY_DRAGONS_MAW] = _("Dragon's Maw"), + [ABILITY_CHILLING_NEIGH] = _("Chilling Neigh"), + [ABILITY_GRIM_NEIGH] = _("Grim Neigh"), + [ABILITY_AS_ONE_ICE_RIDER] = _("As One"), + [ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"), }; +#else // 12 characters +const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = +{ + [ABILITY_NONE] = _("-------"), + [ABILITY_STENCH] = _("Stench"), + [ABILITY_DRIZZLE] = _("Drizzle"), + [ABILITY_SPEED_BOOST] = _("Speed Boost"), + [ABILITY_BATTLE_ARMOR] = _("Battle Armor"), + [ABILITY_STURDY] = _("Sturdy"), + [ABILITY_DAMP] = _("Damp"), + [ABILITY_LIMBER] = _("Limber"), + [ABILITY_SAND_VEIL] = _("Sand Veil"), + [ABILITY_STATIC] = _("Static"), + [ABILITY_VOLT_ABSORB] = _("Volt Absorb"), + [ABILITY_WATER_ABSORB] = _("Water Absorb"), + [ABILITY_OBLIVIOUS] = _("Oblivious"), + [ABILITY_CLOUD_NINE] = _("Cloud Nine"), + [ABILITY_COMPOUND_EYES] = _("CompoundEyes"), + [ABILITY_INSOMNIA] = _("Insomnia"), + [ABILITY_COLOR_CHANGE] = _("Color Change"), + [ABILITY_IMMUNITY] = _("Immunity"), + [ABILITY_FLASH_FIRE] = _("Flash Fire"), + [ABILITY_SHIELD_DUST] = _("Shield Dust"), + [ABILITY_OWN_TEMPO] = _("Own Tempo"), + [ABILITY_SUCTION_CUPS] = _("Suction Cups"), + [ABILITY_INTIMIDATE] = _("Intimidate"), + [ABILITY_SHADOW_TAG] = _("Shadow Tag"), + [ABILITY_ROUGH_SKIN] = _("Rough Skin"), + [ABILITY_WONDER_GUARD] = _("Wonder Guard"), + [ABILITY_LEVITATE] = _("Levitate"), + [ABILITY_EFFECT_SPORE] = _("Effect Spore"), + [ABILITY_SYNCHRONIZE] = _("Synchronize"), + [ABILITY_CLEAR_BODY] = _("Clear Body"), + [ABILITY_NATURAL_CURE] = _("Natural Cure"), + [ABILITY_LIGHTNING_ROD] = _("LightningRod"), + [ABILITY_SERENE_GRACE] = _("Serene Grace"), + [ABILITY_SWIFT_SWIM] = _("Swift Swim"), + [ABILITY_CHLOROPHYLL] = _("Chlorophyll"), + [ABILITY_ILLUMINATE] = _("Illuminate"), + [ABILITY_TRACE] = _("Trace"), + [ABILITY_HUGE_POWER] = _("Huge Power"), + [ABILITY_POISON_POINT] = _("Poison Point"), + [ABILITY_INNER_FOCUS] = _("Inner Focus"), + [ABILITY_MAGMA_ARMOR] = _("Magma Armor"), + [ABILITY_WATER_VEIL] = _("Water Veil"), + [ABILITY_MAGNET_PULL] = _("Magnet Pull"), + [ABILITY_SOUNDPROOF] = _("Soundproof"), + [ABILITY_RAIN_DISH] = _("Rain Dish"), + [ABILITY_SAND_STREAM] = _("Sand Stream"), + [ABILITY_PRESSURE] = _("Pressure"), + [ABILITY_THICK_FAT] = _("Thick Fat"), + [ABILITY_EARLY_BIRD] = _("Early Bird"), + [ABILITY_FLAME_BODY] = _("Flame Body"), + [ABILITY_RUN_AWAY] = _("Run Away"), + [ABILITY_KEEN_EYE] = _("Keen Eye"), + [ABILITY_HYPER_CUTTER] = _("Hyper Cutter"), + [ABILITY_PICKUP] = _("Pickup"), + [ABILITY_TRUANT] = _("Truant"), + [ABILITY_HUSTLE] = _("Hustle"), + [ABILITY_CUTE_CHARM] = _("Cute Charm"), + [ABILITY_PLUS] = _("Plus"), + [ABILITY_MINUS] = _("Minus"), + [ABILITY_FORECAST] = _("Forecast"), + [ABILITY_STICKY_HOLD] = _("Sticky Hold"), + [ABILITY_SHED_SKIN] = _("Shed Skin"), + [ABILITY_GUTS] = _("Guts"), + [ABILITY_MARVEL_SCALE] = _("Marvel Scale"), + [ABILITY_LIQUID_OOZE] = _("Liquid Ooze"), + [ABILITY_OVERGROW] = _("Overgrow"), + [ABILITY_BLAZE] = _("Blaze"), + [ABILITY_TORRENT] = _("Torrent"), + [ABILITY_SWARM] = _("Swarm"), + [ABILITY_ROCK_HEAD] = _("Rock Head"), + [ABILITY_DROUGHT] = _("Drought"), + [ABILITY_ARENA_TRAP] = _("Arena Trap"), + [ABILITY_VITAL_SPIRIT] = _("Vital Spirit"), + [ABILITY_WHITE_SMOKE] = _("White Smoke"), + [ABILITY_PURE_POWER] = _("Pure Power"), + [ABILITY_SHELL_ARMOR] = _("Shell Armor"), + [ABILITY_AIR_LOCK] = _("Air Lock"), + [ABILITY_TANGLED_FEET] = _("Tangled Feet"), + [ABILITY_MOTOR_DRIVE] = _("Motor Drive"), + [ABILITY_RIVALRY] = _("Rivalry"), + [ABILITY_STEADFAST] = _("Steadfast"), + [ABILITY_SNOW_CLOAK] = _("Snow Cloak"), + [ABILITY_GLUTTONY] = _("Gluttony"), + [ABILITY_ANGER_POINT] = _("Anger Point"), + [ABILITY_UNBURDEN] = _("Unburden"), + [ABILITY_HEATPROOF] = _("Heatproof"), + [ABILITY_SIMPLE] = _("Simple"), + [ABILITY_DRY_SKIN] = _("Dry Skin"), + [ABILITY_DOWNLOAD] = _("Download"), + [ABILITY_IRON_FIST] = _("Iron Fist"), + [ABILITY_POISON_HEAL] = _("Poison Heal"), + [ABILITY_ADAPTABILITY] = _("Adaptability"), + [ABILITY_SKILL_LINK] = _("Skill Link"), + [ABILITY_HYDRATION] = _("Hydration"), + [ABILITY_SOLAR_POWER] = _("Solar Power"), + [ABILITY_QUICK_FEET] = _("Quick Feet"), + [ABILITY_NORMALIZE] = _("Normalize"), + [ABILITY_SNIPER] = _("Sniper"), + [ABILITY_MAGIC_GUARD] = _("Magic Guard"), + [ABILITY_NO_GUARD] = _("No Guard"), + [ABILITY_STALL] = _("Stall"), + [ABILITY_TECHNICIAN] = _("Technician"), + [ABILITY_LEAF_GUARD] = _("Leaf Guard"), + [ABILITY_KLUTZ] = _("Klutz"), + [ABILITY_MOLD_BREAKER] = _("Mold Breaker"), + [ABILITY_SUPER_LUCK] = _("Super Luck"), + [ABILITY_AFTERMATH] = _("Aftermath"), + [ABILITY_ANTICIPATION] = _("Anticipation"), + [ABILITY_FOREWARN] = _("Forewarn"), + [ABILITY_UNAWARE] = _("Unaware"), + [ABILITY_TINTED_LENS] = _("Tinted Lens"), + [ABILITY_FILTER] = _("Filter"), + [ABILITY_SLOW_START] = _("Slow Start"), + [ABILITY_SCRAPPY] = _("Scrappy"), + [ABILITY_STORM_DRAIN] = _("Storm Drain"), + [ABILITY_ICE_BODY] = _("Ice Body"), + [ABILITY_SOLID_ROCK] = _("Solid Rock"), + [ABILITY_SNOW_WARNING] = _("Snow Warning"), + [ABILITY_HONEY_GATHER] = _("Honey Gather"), + [ABILITY_FRISK] = _("Frisk"), + [ABILITY_RECKLESS] = _("Reckless"), + [ABILITY_MULTITYPE] = _("Multitype"), + [ABILITY_FLOWER_GIFT] = _("Flower Gift"), + [ABILITY_BAD_DREAMS] = _("Bad Dreams"), + [ABILITY_PICKPOCKET] = _("Pickpocket"), + [ABILITY_SHEER_FORCE] = _("Sheer Force"), + [ABILITY_CONTRARY] = _("Contrary"), + [ABILITY_UNNERVE] = _("Unnerve"), + [ABILITY_DEFIANT] = _("Defiant"), + [ABILITY_DEFEATIST] = _("Defeatist"), + [ABILITY_CURSED_BODY] = _("Cursed Body"), + [ABILITY_HEALER] = _("Healer"), + [ABILITY_FRIEND_GUARD] = _("Friend Guard"), + [ABILITY_WEAK_ARMOR] = _("Weak Armor"), + [ABILITY_HEAVY_METAL] = _("Heavy Metal"), + [ABILITY_LIGHT_METAL] = _("Light Metal"), + [ABILITY_MULTISCALE] = _("Multiscale"), + [ABILITY_TOXIC_BOOST] = _("Toxic Boost"), + [ABILITY_FLARE_BOOST] = _("Flare Boost"), + [ABILITY_HARVEST] = _("Harvest"), + [ABILITY_TELEPATHY] = _("Telepathy"), + [ABILITY_MOODY] = _("Moody"), + [ABILITY_OVERCOAT] = _("Overcoat"), + [ABILITY_POISON_TOUCH] = _("Poison Touch"), + [ABILITY_REGENERATOR] = _("Regenerator"), + [ABILITY_BIG_PECKS] = _("Big Pecks"), + [ABILITY_SAND_RUSH] = _("Sand Rush"), + [ABILITY_WONDER_SKIN] = _("Wonder Skin"), + [ABILITY_ANALYTIC] = _("Analytic"), + [ABILITY_ILLUSION] = _("Illusion"), + [ABILITY_IMPOSTER] = _("Imposter"), + [ABILITY_INFILTRATOR] = _("Infiltrator"), + [ABILITY_MUMMY] = _("Mummy"), + [ABILITY_MOXIE] = _("Moxie"), + [ABILITY_JUSTIFIED] = _("Justified"), + [ABILITY_RATTLED] = _("Rattled"), + [ABILITY_MAGIC_BOUNCE] = _("Magic Bounce"), + [ABILITY_SAP_SIPPER] = _("Sap Sipper"), + [ABILITY_PRANKSTER] = _("Prankster"), + [ABILITY_SAND_FORCE] = _("Sand Force"), + [ABILITY_IRON_BARBS] = _("Iron Barbs"), + [ABILITY_ZEN_MODE] = _("Zen Mode"), + [ABILITY_VICTORY_STAR] = _("Victory Star"), + [ABILITY_TURBOBLAZE] = _("Turboblaze"), + [ABILITY_TERAVOLT] = _("Teravolt"), + [ABILITY_AROMA_VEIL] = _("Aroma Veil"), + [ABILITY_FLOWER_VEIL] = _("Flower Veil"), + [ABILITY_CHEEK_POUCH] = _("Cheek Pouch"), + [ABILITY_PROTEAN] = _("Protean"), + [ABILITY_FUR_COAT] = _("Fur Coat"), + [ABILITY_MAGICIAN] = _("Magician"), + [ABILITY_BULLETPROOF] = _("Bulletproof"), + [ABILITY_COMPETITIVE] = _("Competitive"), + [ABILITY_STRONG_JAW] = _("Strong Jaw"), + [ABILITY_REFRIGERATE] = _("Refrigerate"), + [ABILITY_SWEET_VEIL] = _("Sweet Veil"), + [ABILITY_STANCE_CHANGE] = _("StanceChange"), + [ABILITY_GALE_WINGS] = _("Gale Wings"), + [ABILITY_MEGA_LAUNCHER] = _("MegaLauncher"), + [ABILITY_GRASS_PELT] = _("Grass Pelt"), + [ABILITY_SYMBIOSIS] = _("Symbiosis"), + [ABILITY_TOUGH_CLAWS] = _("Tough Claws"), + [ABILITY_PIXILATE] = _("Pixilate"), + [ABILITY_GOOEY] = _("Gooey"), + [ABILITY_AERILATE] = _("Aerilate"), + [ABILITY_PARENTAL_BOND] = _("ParentalBond"), + [ABILITY_DARK_AURA] = _("Dark Aura"), + [ABILITY_FAIRY_AURA] = _("Fairy Aura"), + [ABILITY_AURA_BREAK] = _("Aura Break"), + [ABILITY_PRIMORDIAL_SEA] = _("PrimrdialSea"), + [ABILITY_DESOLATE_LAND] = _("DesolateLand"), + [ABILITY_DELTA_STREAM] = _("Delta Stream"), + [ABILITY_STAMINA] = _("Stamina"), + [ABILITY_WIMP_OUT] = _("Wimp Out"), + [ABILITY_EMERGENCY_EXIT] = _("EmergncyExit"), + [ABILITY_WATER_COMPACTION] = _("WtrCmpaction"), + [ABILITY_MERCILESS] = _("Merciless"), + [ABILITY_SHIELDS_DOWN] = _("Shields Down"), + [ABILITY_STAKEOUT] = _("Stakeout"), + [ABILITY_WATER_BUBBLE] = _("Water Bubble"), + [ABILITY_STEELWORKER] = _("Steelworker"), + [ABILITY_BERSERK] = _("Berserk"), + [ABILITY_SLUSH_RUSH] = _("Slush Rush"), + [ABILITY_LONG_REACH] = _("Long Reach"), + [ABILITY_LIQUID_VOICE] = _("Liquid Voice"), + [ABILITY_TRIAGE] = _("Triage"), + [ABILITY_GALVANIZE] = _("Galvanize"), + [ABILITY_SURGE_SURFER] = _("Surge Surfer"), + [ABILITY_SCHOOLING] = _("Schooling"), + [ABILITY_DISGUISE] = _("Disguise"), + [ABILITY_BATTLE_BOND] = _("Battle Bond"), + [ABILITY_POWER_CONSTRUCT] = _("PwrConstruct"), + [ABILITY_CORROSION] = _("Corrosion"), + [ABILITY_COMATOSE] = _("Comatose"), + [ABILITY_QUEENLY_MAJESTY] = _("QueenlyMjsty"), + [ABILITY_INNARDS_OUT] = _("Innards Out"), + [ABILITY_DANCER] = _("Dancer"), + [ABILITY_BATTERY] = _("Battery"), + [ABILITY_FLUFFY] = _("Fluffy"), + [ABILITY_DAZZLING] = _("Dazzling"), + [ABILITY_SOUL_HEART] = _("Soul-Heart"), + [ABILITY_TANGLING_HAIR] = _("TanglingHair"), + [ABILITY_RECEIVER] = _("Receiver"), + [ABILITY_POWER_OF_ALCHEMY] = _("PwrOfAlchemy"), + [ABILITY_BEAST_BOOST] = _("Beast Boost"), + [ABILITY_RKS_SYSTEM] = _("RKS System"), + [ABILITY_ELECTRIC_SURGE] = _("ElectrcSurge"), + [ABILITY_PSYCHIC_SURGE] = _("PsychicSurge"), + [ABILITY_MISTY_SURGE] = _("Misty Surge"), + [ABILITY_GRASSY_SURGE] = _("Grassy Surge"), + [ABILITY_FULL_METAL_BODY] = _("FullMetalBdy"), + [ABILITY_SHADOW_SHIELD] = _("ShadowShield"), + [ABILITY_PRISM_ARMOR] = _("Prism Armor"), + [ABILITY_NEUROFORCE] = _("Neuroforce"), + [ABILITY_INTREPID_SWORD] = _("IntrepidSwrd"), + [ABILITY_DAUNTLESS_SHIELD] = _("DauntlssShld"), + [ABILITY_LIBERO] = _("Libero"), + [ABILITY_BALL_FETCH] = _("Ball Fetch"), + [ABILITY_COTTON_DOWN] = _("Cotton Down"), + [ABILITY_PROPELLER_TAIL] = _("PropellrTail"), + [ABILITY_MIRROR_ARMOR] = _("Mirror Armor"), + [ABILITY_GULP_MISSILE] = _("Gulp Missile"), + [ABILITY_STALWART] = _("Stalwart"), + [ABILITY_STEAM_ENGINE] = _("Steam Engine"), + [ABILITY_PUNK_ROCK] = _("Punk Rock"), + [ABILITY_SAND_SPIT] = _("Sand Spit"), + [ABILITY_ICE_SCALES] = _("Ice Scales"), + [ABILITY_RIPEN] = _("Ripen"), + [ABILITY_ICE_FACE] = _("Ice Face"), + [ABILITY_POWER_SPOT] = _("Power Spot"), + [ABILITY_MIMICRY] = _("Mimicry"), + [ABILITY_SCREEN_CLEANER] = _("ScreenCleanr"), + [ABILITY_STEELY_SPIRIT] = _("SteelySpirit"), + [ABILITY_PERISH_BODY] = _("Perish Body"), + [ABILITY_WANDERING_SPIRIT] = _("WandrngSprit"), + [ABILITY_GORILLA_TACTICS] = _("GorillaTacti"), + [ABILITY_NEUTRALIZING_GAS] = _("NeutrlzngGas"), + [ABILITY_PASTEL_VEIL] = _("Pastel Veil"), + [ABILITY_HUNGER_SWITCH] = _("HungerSwitch"), + [ABILITY_QUICK_DRAW] = _("Quick Draw"), + [ABILITY_UNSEEN_FIST] = _("Unseen Fist"), + [ABILITY_CURIOUS_MEDICINE] = _("CuriusMedicn"), + [ABILITY_TRANSISTOR] = _("Transistor"), + [ABILITY_DRAGONS_MAW] = _("Dragon's Maw"), + [ABILITY_CHILLING_NEIGH] = _("ChillngNeigh"), + [ABILITY_GRIM_NEIGH] = _("Grim Neigh"), + [ABILITY_AS_ONE_ICE_RIDER] = _("As One"), + [ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"), +}; +#endif const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] = { @@ -237,6 +879,196 @@ const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] = [ABILITY_WHITE_SMOKE] = sWhiteSmokeDescription, [ABILITY_PURE_POWER] = sPurePowerDescription, [ABILITY_SHELL_ARMOR] = sShellArmorDescription, -// [ABILITY_CACOPHONY] = sCacophonyDescription, [ABILITY_AIR_LOCK] = sAirLockDescription, + [ABILITY_TANGLED_FEET] = sTangledFeetDescription, + [ABILITY_MOTOR_DRIVE] = sMotorDriveDescription, + [ABILITY_RIVALRY] = sRivalryDescription, + [ABILITY_STEADFAST] = sSteadfastDescription, + [ABILITY_SNOW_CLOAK] = sSnowCloakDescription, + [ABILITY_GLUTTONY] = sGluttonyDescription, + [ABILITY_ANGER_POINT] = sAngerPointDescription, + [ABILITY_UNBURDEN] = sUnburdenDescription, + [ABILITY_HEATPROOF] = sHeatproofDescription, + [ABILITY_SIMPLE] = sSimpleDescription, + [ABILITY_DRY_SKIN] = sDrySkinDescription, + [ABILITY_DOWNLOAD] = sDownloadDescription, + [ABILITY_IRON_FIST] = sIronFistDescription, + [ABILITY_POISON_HEAL] = sPoisonHealDescription, + [ABILITY_ADAPTABILITY] = sAdaptabilityDescription, + [ABILITY_SKILL_LINK] = sSkillLinkDescription, + [ABILITY_HYDRATION] = sHydrationDescription, + [ABILITY_SOLAR_POWER] = sSolarPowerDescription, + [ABILITY_QUICK_FEET] = sQuickFeetDescription, + [ABILITY_NORMALIZE] = sNormalizeDescription, + [ABILITY_SNIPER] = sSniperDescription, + [ABILITY_MAGIC_GUARD] = sMagicGuardDescription, + [ABILITY_NO_GUARD] = sNoGuardDescription, + [ABILITY_STALL] = sStallDescription, + [ABILITY_TECHNICIAN] = sTechnicianDescription, + [ABILITY_LEAF_GUARD] = sLeafGuardDescription, + [ABILITY_KLUTZ] = sKlutzDescription, + [ABILITY_MOLD_BREAKER] = sMoldBreakerDescription, + [ABILITY_SUPER_LUCK] = sSuperLuckDescription, + [ABILITY_AFTERMATH] = sAftermathDescription, + [ABILITY_ANTICIPATION] = sAnticipationDescription, + [ABILITY_FOREWARN] = sForewarnDescription, + [ABILITY_UNAWARE] = sUnawareDescription, + [ABILITY_TINTED_LENS] = sTintedLensDescription, + [ABILITY_FILTER] = sFilterDescription, + [ABILITY_SLOW_START] = sSlowStartDescription, + [ABILITY_SCRAPPY] = sScrappyDescription, + [ABILITY_STORM_DRAIN] = sStormDrainDescription, + [ABILITY_ICE_BODY] = sIceBodyDescription, + [ABILITY_SOLID_ROCK] = sFilterDescription, + [ABILITY_SNOW_WARNING] = sSnowWarningDescription, + [ABILITY_HONEY_GATHER] = sHoneyGatherDescription, + [ABILITY_FRISK] = sFriskDescription, + [ABILITY_RECKLESS] = sRecklessDescription, + [ABILITY_MULTITYPE] = sMultitypeDescription, + [ABILITY_FLOWER_GIFT] = sFlowerGiftDescription, + [ABILITY_BAD_DREAMS] = sBadDreamsDescription, + [ABILITY_PICKPOCKET] = sPickpocketDescription, + [ABILITY_SHEER_FORCE] = sSheerForceDescription, + [ABILITY_CONTRARY] = sContraryDescription, + [ABILITY_UNNERVE] = sUnnerveDescription, + [ABILITY_DEFIANT] = sDefiantDescription, + [ABILITY_DEFEATIST] = sDefeatistDescription, + [ABILITY_CURSED_BODY] = sCursedBodyDescription, + [ABILITY_HEALER] = sHealerDescription, + [ABILITY_FRIEND_GUARD] = sFriendGuardDescription, + [ABILITY_WEAK_ARMOR] = sWeakArmorDescription, + [ABILITY_HEAVY_METAL] = sHeavyMetalDescription, + [ABILITY_LIGHT_METAL] = sLightMetalDescription, + [ABILITY_MULTISCALE] = sMultiscaleDescription, + [ABILITY_TOXIC_BOOST] = sToxicBoostDescription, + [ABILITY_FLARE_BOOST] = sFlareBoostDescription, + [ABILITY_HARVEST] = sHarvestDescription, + [ABILITY_TELEPATHY] = sTelepathyDescription, + [ABILITY_MOODY] = sMoodyDescription, + [ABILITY_OVERCOAT] = sOvercoatDescription, + [ABILITY_POISON_TOUCH] = sPoisonPointDescription, + [ABILITY_REGENERATOR] = sNaturalCureDescription, + [ABILITY_BIG_PECKS] = sBigPecksDescription, + [ABILITY_SAND_RUSH] = sSandRushDescription, + [ABILITY_WONDER_SKIN] = sWonderSkinDescription, + [ABILITY_ANALYTIC] = sAnalyticDescription, + [ABILITY_ILLUSION] = sIllusionDescription, + [ABILITY_IMPOSTER] = sImposterDescription, + [ABILITY_INFILTRATOR] = sInfiltratorDescription, + [ABILITY_MUMMY] = sMummyDescription, + [ABILITY_MOXIE] = sMoxieDescription, + [ABILITY_JUSTIFIED] = sJustifiedDescription, + [ABILITY_RATTLED] = sRattledDescription, + [ABILITY_MAGIC_BOUNCE] = sMagicBounceDescription, + [ABILITY_SAP_SIPPER] = sSapSipperDescription, + [ABILITY_PRANKSTER] = sPranksterDescription, + [ABILITY_SAND_FORCE] = sSandForceDescription, + [ABILITY_IRON_BARBS] = sRoughSkinDescription, + [ABILITY_ZEN_MODE] = sZenModeDescription, + [ABILITY_VICTORY_STAR] = sVictoryStarDescription, + [ABILITY_TURBOBLAZE] = sMoldBreakerDescription, + [ABILITY_TERAVOLT] = sMoldBreakerDescription, + [ABILITY_AROMA_VEIL] = sAromaVeilDescription, + [ABILITY_FLOWER_VEIL] = sFlowerVeilDescription, + [ABILITY_CHEEK_POUCH] = sCheekPouchDescription, + [ABILITY_PROTEAN] = sProteanDescription, + [ABILITY_FUR_COAT] = sFurCoatDescription, + [ABILITY_MAGICIAN] = sPickpocketDescription, + [ABILITY_BULLETPROOF] = sBulletproofDescription, + [ABILITY_COMPETITIVE] = sCompetitiveDescription, + [ABILITY_STRONG_JAW] = sStrongJawDescription, + [ABILITY_REFRIGERATE] = sRefrigerateDescription, + [ABILITY_SWEET_VEIL] = sSweetVeilDescription, + [ABILITY_STANCE_CHANGE] = sStanceChangeDescription, + [ABILITY_GALE_WINGS] = sGaleWingsDescription, + [ABILITY_MEGA_LAUNCHER] = sMegaLauncherDescription, + [ABILITY_GRASS_PELT] = sGrassPeltDescription, + [ABILITY_SYMBIOSIS] = sSymbiosisDescription, + [ABILITY_TOUGH_CLAWS] = sToughClawsDescription, + [ABILITY_PIXILATE] = sPixilateDescription, + [ABILITY_GOOEY] = sGooeyDescription, + [ABILITY_AERILATE] = sAerilateDescription, + [ABILITY_PARENTAL_BOND] = sParentalBondDescription, + [ABILITY_DARK_AURA] = sDarkAuraDescription, + [ABILITY_FAIRY_AURA] = sFairyAuraDescription, + [ABILITY_AURA_BREAK] = sAuraBreakDescription, + [ABILITY_PRIMORDIAL_SEA] = sPrimordialSeaDescription, + [ABILITY_DESOLATE_LAND] = sDesolateLandDescription, + [ABILITY_DELTA_STREAM] = sDeltaStreamDescription, + [ABILITY_STAMINA] = sStaminaDescription, + [ABILITY_WIMP_OUT] = sWimpOutDescription, + [ABILITY_EMERGENCY_EXIT] = sWimpOutDescription, + [ABILITY_WATER_COMPACTION] = sWaterCompactionDescription, + [ABILITY_MERCILESS] = sMercilessDescription, + [ABILITY_SHIELDS_DOWN] = sShieldsDownDescription, + [ABILITY_STAKEOUT] = sStakeoutDescription, + [ABILITY_WATER_BUBBLE] = sWaterBubbleDescription, + [ABILITY_STEELWORKER] = sSteelworkerDescription, + [ABILITY_BERSERK] = sBerserkDescription, + [ABILITY_SLUSH_RUSH] = sSlushRushDescription, + [ABILITY_LONG_REACH] = sLongReachDescription, + [ABILITY_LIQUID_VOICE] = sLiquidVoiceDescription, + [ABILITY_TRIAGE] = sTriageDescription, + [ABILITY_GALVANIZE] = sGalvanizeDescription, + [ABILITY_SURGE_SURFER] = sSurgeSurferDescription, + [ABILITY_SCHOOLING] = sSchoolingDescription, + [ABILITY_DISGUISE] = sDisguiseDescription, + [ABILITY_BATTLE_BOND] = sBattleBondDescription, + [ABILITY_POWER_CONSTRUCT] = sPowerConstructDescription, + [ABILITY_CORROSION] = sCorrosionDescription, + [ABILITY_COMATOSE] = sComatoseDescription, + [ABILITY_QUEENLY_MAJESTY] = sQueenlyMajestyDescription, + [ABILITY_INNARDS_OUT] = sInnardsOutDescription, + [ABILITY_DANCER] = sDancerDescription, + [ABILITY_BATTERY] = sBatteryDescription, + [ABILITY_FLUFFY] = sFluffyDescription, + [ABILITY_DAZZLING] = sQueenlyMajestyDescription, + [ABILITY_SOUL_HEART] = sSoulHeartDescription, + [ABILITY_TANGLING_HAIR] = sGooeyDescription, + [ABILITY_RECEIVER] = sReceiverDescription, + [ABILITY_POWER_OF_ALCHEMY] = sReceiverDescription, + [ABILITY_BEAST_BOOST] = sBeastBoostDescription, + [ABILITY_RKS_SYSTEM] = sRKSSystemDescription, + [ABILITY_ELECTRIC_SURGE] = sElectricSurgeDescription, + [ABILITY_PSYCHIC_SURGE] = sPsychicSurgeDescription, + [ABILITY_MISTY_SURGE] = sMistySurgeDescription, + [ABILITY_GRASSY_SURGE] = sGrassySurgeDescription, + [ABILITY_FULL_METAL_BODY] = sFullMetalBodyDescription, + [ABILITY_SHADOW_SHIELD] = sMultiscaleDescription, + [ABILITY_PRISM_ARMOR] = sFilterDescription, + [ABILITY_NEUROFORCE] = sNeuroforceDescription, + [ABILITY_INTREPID_SWORD] = sIntrepidSwordDescription, + [ABILITY_DAUNTLESS_SHIELD] = sDauntlessShieldDescription, + [ABILITY_LIBERO] = sLiberoDescription, + [ABILITY_BALL_FETCH] = sBallFetchDescription, + [ABILITY_COTTON_DOWN] = sCottonDownDescription, + [ABILITY_PROPELLER_TAIL] = sPropellerTailDescription, + [ABILITY_MIRROR_ARMOR] = sMirrorArmorDescription, + [ABILITY_GULP_MISSILE] = sGulpMissileDescription, + [ABILITY_STALWART] = sStalwartDescription, + [ABILITY_STEAM_ENGINE] = sSteamEngineDescription, + [ABILITY_PUNK_ROCK] = sPunkRockDescription, + [ABILITY_SAND_SPIT] = sSandSpitDescription, + [ABILITY_ICE_SCALES] = sIceScalesDescription, + [ABILITY_RIPEN] = sRipenDescription, + [ABILITY_ICE_FACE] = sIceFaceDescription, + [ABILITY_POWER_SPOT] = sPowerSpotDescription, + [ABILITY_MIMICRY] = sMimicryDescription, + [ABILITY_SCREEN_CLEANER] = sScreenCleanerDescription, + [ABILITY_STEELY_SPIRIT] = sSteelySpiritDescription, + [ABILITY_PERISH_BODY] = sPerishBodyDescription, + [ABILITY_WANDERING_SPIRIT] = sWanderingSpiritDescription, + [ABILITY_GORILLA_TACTICS] = sGorillaTacticsDescription, + [ABILITY_NEUTRALIZING_GAS] = sNeutralizingGasDescription, + [ABILITY_PASTEL_VEIL] = sPastelVeilDescription, + [ABILITY_HUNGER_SWITCH] = sHungerSwitchDescription, + [ABILITY_QUICK_DRAW] = sQuickDrawDescription, + [ABILITY_UNSEEN_FIST] = sUnseenFistDescription, + [ABILITY_CURIOUS_MEDICINE] = sCuriousMedicineDescription, + [ABILITY_TRANSISTOR] = sTransistorDescription, + [ABILITY_DRAGONS_MAW] = sDragonsMawDescription, + [ABILITY_CHILLING_NEIGH] = sChillingNeighDescription, + [ABILITY_GRIM_NEIGH] = sGrimNeighDescription, + [ABILITY_AS_ONE_ICE_RIDER] = sAsOneIceRiderDescription, + [ABILITY_AS_ONE_SHADOW_RIDER] = sAsOneShadowRiderDescription, }; diff --git a/src/data/text/gift_ribbon_descriptions.h b/src/data/text/gift_ribbon_descriptions.h index a95f9729d9..0ba7a33d50 100644 --- a/src/data/text/gift_ribbon_descriptions.h +++ b/src/data/text/gift_ribbon_descriptions.h @@ -46,7 +46,7 @@ const u8 gGiftRibbonDescriptionPart2_LovedPokemon[] = _("for a loved POKéMON.") const u8 gGiftRibbonDescriptionPart1_LoveForPokemon[] = _("RIBBON that shows"); const u8 gGiftRibbonDescriptionPart2_LoveForPokemon[] = _("love for POKéMON."); -const u8 *const gGiftRibbonDescriptionPointers[MAX_GIFT_RIBBON][2] = +const u8 *const gGiftRibbonDescriptionPointers[MAX_GIFT_RIBBON][2] = { {gGiftRibbonDescriptionPart1_2003RegionalTourney, gGiftRibbonDescriptionPart2_Champion}, {gGiftRibbonDescriptionPart1_2003NationalTourney, gGiftRibbonDescriptionPart2_Champion}, diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index 5f79efc57a..08e5fc8468 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -1,141 +1,214 @@ static const u8 sDummyDesc[] = _( "?????"); -// Pokeballs -static const u8 sMasterBallDesc[] = _( - "The best BALL that\n" - "catches a POKéMON\n" - "without fail."); - -static const u8 sUltraBallDesc[] = _( - "A better BALL with\n" - "a higher catch rate\n" - "than a GREAT BALL."); - -static const u8 sGreatBallDesc[] = _( - "A good BALL with a\n" - "higher catch rate\n" - "than a POKé BALL."); - +// Poké Balls static const u8 sPokeBallDesc[] = _( "A tool used for\n" "catching wild\n" - "POKéMON."); + "Pokémon."); -static const u8 sSafariBallDesc[] = _( - "A special BALL that\n" - "is used only in the\n" - "SAFARI ZONE."); +static const u8 sGreatBallDesc[] = _( + "A good Ball with a\n" + "higher catch rate\n" + "than a Poké Ball."); + +static const u8 sUltraBallDesc[] = _( + "A better Ball with\n" + "a higher catch rate\n" + "than a Great Ball."); + +static const u8 sMasterBallDesc[] = _( + "The best Ball that\n" + "catches a Pokémon\n" + "without fail."); + +static const u8 sPremierBallDesc[] = _( + "A rare Ball made\n" + "in commemoration\n" + "of some event."); + +static const u8 sHealBallDesc[] = _( + "A remedial Ball\n" + "that restores\n" + "caught Pokémon."); static const u8 sNetBallDesc[] = _( - "A BALL that works\n" - "well on WATER- and\n" - "BUG-type POKéMON."); - -static const u8 sDiveBallDesc[] = _( - "A BALL that works\n" - "better on POKéMON\n" - "on the ocean floor."); + "A Ball that works\n" + "well on Water- and\n" + "Bug-type Pokémon."); static const u8 sNestBallDesc[] = _( - "A BALL that works\n" + "A Ball that works\n" "better on weaker\n" - "POKéMON."); + "Pokémon."); -static const u8 sRepeatBallDesc[] = _( - "A BALL that works\n" - "better on POKéMON\n" - "caught before."); +static const u8 sDiveBallDesc[] = _( + "A Ball that works\n" + "better on Pokémon\n" + "on the ocean floor."); + +static const u8 sDuskBallDesc[] = _( + "Works well if\n" + "used in a\n" + "dark place."); static const u8 sTimerBallDesc[] = _( - "A BALL that gains\n" + "A Ball that gains\n" "power in battles\n" "taking many turns."); +static const u8 sQuickBallDesc[] = _( + "Works well if\n" + "used on the\n" + "first turn."); + +static const u8 sRepeatBallDesc[] = _( + "A Ball that works\n" + "better on Pokémon\n" + "caught before."); + static const u8 sLuxuryBallDesc[] = _( - "A cozy BALL that\n" - "makes POKéMON\n" + "A cozy Ball that\n" + "makes Pokémon\n" "more friendly."); -static const u8 sPremierBallDesc[] = _( - "A rare BALL made\n" +static const u8 sLevelBallDesc[] = _( + "A Ball that works\n" + "well on lower\n" + "level Pokémon."); + +static const u8 sLureBallDesc[] = _( + "A Ball that works\n" + "well on fished\n" + "up Pokémon."); + +static const u8 sMoonBallDesc[] = _( + "A Ball that works\n" + "well on Moon\n" + "Stone users."); + +static const u8 sFriendBallDesc[] = _( + "A Ball that makes\n" + "a Pokémon friendly\n" + "when caught."); + +static const u8 sLoveBallDesc[] = _( + "Works well on\n" + "Pokémon of the\n" + "opposite gender."); + +static const u8 sFastBallDesc[] = _( + "Works well on\n" + "very fast\n" + "Pokémon."); + +static const u8 sHeavyBallDesc[] = _( + "Works well on\n" + "very heavy\n" + "Pokémon."); + +static const u8 sDreamBallDesc[] = _( +#if B_DREAM_BALL_MODIFIER >= GEN_8 + "A Ball that works\n" + "well on sleeping\n" + "Pokémon."); +#else + "A Poké Ball used in\n" + "the Entree Forest."); +#endif + +static const u8 sSafariBallDesc[] = _( + "A special Ball that\n" + "is used only in the\n" + "Safari Zone."); + +static const u8 sSportBallDesc[] = _( + "A special Ball used\n" + "in the Bug-Catching\n" + "Contest."); + +static const u8 sParkBallDesc[] = _( + "A special Ball for\n" + "the Pal Park."); + +static const u8 sBeastBallDesc[] = _( + "A Ball designed to\n" + "catch Ultra Beasts."); + +static const u8 sCherishBallDesc[] = _( + "A rare Ball made\n" "in commemoration\n" "of some event."); // Medicine static const u8 sPotionDesc[] = _( "Restores the HP of\n" - "a POKéMON by\n" + "a Pokémon by\n" "20 points."); -static const u8 sAntidoteDesc[] = _( - "Heals a poisoned\n" - "POKéMON."); +static const u8 sSuperPotionDesc[] = _( + "Restores the HP of\n" + "a Pokémon by\n" +#if I_HEALTH_RECOVERY >= GEN_7 + "60 points."); +#else + "50 points."); +#endif -static const u8 sBurnHealDesc[] = _( - "Heals POKéMON\n" - "of a burn."); +static const u8 sHyperPotionDesc[] = _( + "Restores the HP of\n" + "a Pokémon by\n" +#if I_HEALTH_RECOVERY >= GEN_7 + "120 points."); +#else + "200 points."); +#endif -static const u8 sIceHealDesc[] = _( - "Defrosts a frozen\n" - "POKéMON."); - -static const u8 sAwakeningDesc[] = _( - "Awakens a sleeping\n" - "POKéMON."); - -static const u8 sParalyzeHealDesc[] = _( - "Heals a paralyzed\n" - "POKéMON."); +static const u8 sMaxPotionDesc[] = _( + "Fully restores the\n" + "HP of a Pokémon."); static const u8 sFullRestoreDesc[] = _( "Fully restores the\n" "HP and status of a\n" - "POKéMON."); - -static const u8 sMaxPotionDesc[] = _( - "Fully restores the\n" - "HP of a POKéMON."); - -static const u8 sHyperPotionDesc[] = _( - "Restores the HP of\n" - "a POKéMON by\n" - "200 points."); - -static const u8 sSuperPotionDesc[] = _( - "Restores the HP of\n" - "a POKéMON by\n" - "50 points."); - -static const u8 sFullHealDesc[] = _( - "Heals all the\n" - "status problems of\n" - "one POKéMON."); + "Pokémon."); static const u8 sReviveDesc[] = _( "Revives a fainted\n" - "POKéMON with half\n" + "Pokémon with half\n" "its HP."); static const u8 sMaxReviveDesc[] = _( "Revives a fainted\n" - "POKéMON with all\n" + "Pokémon with all\n" "its HP."); static const u8 sFreshWaterDesc[] = _( "A mineral water\n" "that restores HP\n" +#if I_HEALTH_RECOVERY >= GEN_7 + "by 30 points."); +#else "by 50 points."); +#endif static const u8 sSodaPopDesc[] = _( "A fizzy soda drink\n" "that restores HP\n" +#if I_HEALTH_RECOVERY >= GEN_7 + "by 50 points."); +#else "by 60 points."); +#endif static const u8 sLemonadeDesc[] = _( "A very sweet drink\n" "that restores HP\n" +#if I_HEALTH_RECOVERY >= GEN_7 + "by 70 points."); +#else "by 80 points."); +#endif static const u8 sMoomooMilkDesc[] = _( "A nutritious milk\n" @@ -145,12 +218,20 @@ static const u8 sMoomooMilkDesc[] = _( static const u8 sEnergyPowderDesc[] = _( "A bitter powder\n" "that restores HP\n" +#if I_HEALTH_RECOVERY >= GEN_7 + "by 60 points."); +#else "by 50 points."); +#endif static const u8 sEnergyRootDesc[] = _( "A bitter root\n" "that restores HP\n" +#if I_HEALTH_RECOVERY >= GEN_7 + "by 120 points."); +#else "by 200 points."); +#endif static const u8 sHealPowderDesc[] = _( "A bitter powder\n" @@ -160,7 +241,32 @@ static const u8 sHealPowderDesc[] = _( static const u8 sRevivalHerbDesc[] = _( "A very bitter herb\n" "that revives a\n" - "fainted POKéMON."); + "fainted Pokémon."); + +static const u8 sAntidoteDesc[] = _( + "Heals a poisoned\n" + "Pokémon."); + +static const u8 sParalyzeHealDesc[] = _( + "Heals a paralyzed\n" + "Pokémon."); + +static const u8 sBurnHealDesc[] = _( + "Heals Pokémon\n" + "of a burn."); + +static const u8 sIceHealDesc[] = _( + "Defrosts a frozen\n" + "Pokémon."); + +static const u8 sAwakeningDesc[] = _( + "Awakens a sleeping\n" + "Pokémon."); + +static const u8 sFullHealDesc[] = _( + "Heals all the\n" + "status problems of\n" + "one Pokémon."); static const u8 sEtherDesc[] = _( "Restores the PP\n" @@ -178,38 +284,9 @@ static const u8 sElixirDesc[] = _( static const u8 sMaxElixirDesc[] = _( "Fully restores the\n" - "PP of a POKéMON's\n" + "PP of a Pokémon's\n" "moves."); -static const u8 sLavaCookieDesc[] = _( - "A local specialty\n" - "that heals all\n" - "status problems."); - -static const u8 sBlueFluteDesc[] = _( - "A glass flute that\n" - "awakens sleeping\n" - "POKéMON."); - -static const u8 sYellowFluteDesc[] = _( - "A glass flute that\n" - "snaps POKéMON\n" - "out of confusion."); - -static const u8 sRedFluteDesc[] = _( - "A glass flute that\n" - "snaps POKéMON\n" - "out of attraction."); - -static const u8 sBlackFluteDesc[] = _( - "A glass flute that\n" - "keeps away wild\n" - "POKéMON."); - -static const u8 sWhiteFluteDesc[] = _( - "A glass flute that\n" - "lures wild POKéMON."); - static const u8 sBerryJuiceDesc[] = _( "A 100% pure juice\n" "that restores HP\n" @@ -218,18 +295,516 @@ static const u8 sBerryJuiceDesc[] = _( static const u8 sSacredAshDesc[] = _( "Fully revives and\n" "restores all\n" - "fainted POKéMON."); + "fainted Pokémon."); + +static const u8 sSweetHeartDesc[] = _( + "A sweet chocolate\n" + "that restores HP\n" + "by 20 points."); + +static const u8 sMaxHoneyDesc[] = _( + "Revives a fainted\n" + "Pokémon with all\n" + "its HP."); + +static const u8 sPewterCrunchiesDesc[] = _( + "Heals all the\n" + "status problems of\n" + "one Pokémon."); + +static const u8 sRageCandyBarDesc[] = _( + "Heals all the\n" + "status problems of\n" + "one Pokémon."); + +static const u8 sLavaCookieDesc[] = _( + "A local specialty\n" + "that heals all\n" + "status problems."); + +static const u8 sOldGateauDesc[] = _( + "Heals all the\n" + "status problems of\n" + "one Pokémon."); + +static const u8 sCasteliaconeDesc[] = _( + "Heals all the\n" + "status problems of\n" + "one Pokémon."); + +static const u8 sLumioseGaletteDesc[] = _( + "Heals all the\n" + "status problems of\n" + "one Pokémon."); + +static const u8 sShalourSableDesc[] = _( + "Heals all the\n" + "status problems of\n" + "one Pokémon."); + +static const u8 sBigMalasadaDesc[] = _( + "Heals all the\n" + "status problems of\n" + "one Pokémon."); + +// Vitamins +static const u8 sHPUpDesc[] = _( + "Raises the base HP\n" + "of one Pokémon."); + +static const u8 sProteinDesc[] = _( + "Raises the base\n" + "Attack stat of one\n" + "Pokémon."); + +static const u8 sIronDesc[] = _( + "Raises the base\n" + "Defense stat of\n" + "one Pokémon."); + +static const u8 sCalciumDesc[] = _( + "Raises the base\n" + "Sp. Atk stat of one\n" + "Pokémon."); + +static const u8 sZincDesc[] = _( + "Raises the base\n" + "Sp. Def stat of one\n" + "Pokémon."); + +static const u8 sCarbosDesc[] = _( + "Raises the base\n" + "Speed stat of one\n" + "Pokémon."); + +static const u8 sPPUpDesc[] = _( + "Raises the maximum\n" + "PP of a selected\n" + "move."); + +static const u8 sPPMaxDesc[] = _( + "Raises the PP of a\n" + "move to its maximum\n" + "points."); + +// EV Feathers +static const u8 sHealthFeatherDesc[] = _( + "An item that raises\n" + "the base HP of\n" + "a Pokémon."); + +static const u8 sMuscleFeatherDesc[] = _( + "An item that raises\n" + "the base Attack of\n" + "a Pokémon."); + +static const u8 sResistFeatherDesc[] = _( + "An item that raises\n" + "the base Defense\n" + "of a Pokémon."); + +static const u8 sGeniusFeatherDesc[] = _( + "An item that raises\n" + "the base Sp. Atk.\n" + "of a Pokémon."); + +static const u8 sCleverFeatherDesc[] = _( + "An item that raises\n" + "the base Sp. Def.\n" + "of a Pokémon."); + +static const u8 sSwiftFeatherDesc[] = _( + "An item that raises\n" + "the base Speed of\n" + "a Pokémon."); + +// Ability Modifiers +static const u8 sAbilityCapsuleDesc[] = _( + "Switches a Poké-\n" + "mon's ability."); + +static const u8 sAbilityPatchDesc[] = _( + "Turns the ability\n" + "of a Pokémon into\n" + "a rare ability."); + +// Mints +static const u8 sLonelyMintDesc[] = _( + "Can be smelled. It\n" + "ups Attack, but\n" + "reduces Defense."); + +static const u8 sAdamantMintDesc[] = _( + "Can be smelled. It\n" + "ups Attack, but\n" + "reduces Sp. Atk."); + +static const u8 sNaughtyMintDesc[] = _( + "Can be smelled. It\n" + "ups Attack, but\n" + "reduces Sp. Def."); + +static const u8 sBraveMintDesc[] = _( + "Can be smelled. It\n" + "ups Attack, but\n" + "reduces Speed."); + +static const u8 sBoldMintDesc[] = _( + "Can be smelled. It\n" + "ups Defense, but\n" + "reduces Attack."); + +static const u8 sImpishMintDesc[] = _( + "Can be smelled. It\n" + "ups Defense, but\n" + "reduces Sp. Atk."); + +static const u8 sLaxMintDesc[] = _( + "Can be smelled. It\n" + "ups Defense, but\n" + "reduces Sp. Def."); + +static const u8 sRelaxedMintDesc[] = _( + "Can be smelled. It\n" + "ups Defense, but\n" + "reduces Speed."); + +static const u8 sModestMintDesc[] = _( + "Can be smelled. It\n" + "ups Sp. Atk, but\n" + "reduces Attack."); + +static const u8 sMildMintDesc[] = _( + "Can be smelled. It\n" + "ups Sp. Atk, but\n" + "reduces Defense."); + +static const u8 sRashMintDesc[] = _( + "Can be smelled. It\n" + "ups Sp. Atk, but\n" + "reduces Sp. Def."); + +static const u8 sQuietMintDesc[] = _( + "Can be smelled. It\n" + "ups Sp. Atk, but\n" + "reduces Speed."); + +static const u8 sCalmMintDesc[] = _( + "Can be smelled. It\n" + "ups Sp. Def, but\n" + "reduces Attack."); + +static const u8 sGentleMintDesc[] = _( + "Can be smelled. It\n" + "ups Sp. Def, but\n" + "reduces Defense."); + +static const u8 sCarefulMintDesc[] = _( + "Can be smelled. It\n" + "ups Sp. Def, but\n" + "reduces Sp. Atk."); + +static const u8 sSassyMintDesc[] = _( + "Can be smelled. It\n" + "ups Sp. Def, but\n" + "reduces Speed."); + +static const u8 sTimidMintDesc[] = _( + "Can be smelled. It\n" + "ups Speed, but\n" + "reduces Attack."); + +static const u8 sHastyMintDesc[] = _( + "Can be smelled. It\n" + "ups Speed, but\n" + "reduces Defense."); + +static const u8 sJollyMintDesc[] = _( + "Can be smelled. It\n" + "ups Speed, but\n" + "reduces Sp. Atk."); + +static const u8 sNaiveMintDesc[] = _( + "Can be smelled. It\n" + "ups Speed, but\n" + "reduces Sp. Def."); + +static const u8 sSeriousMintDesc[] = _( + "Can be smelled. It\n" + "ups Speed, but\n" + "reduces Attack."); + +// Candy +static const u8 sRareCandyDesc[] = _( + "Raises the level\n" + "of a Pokémon by\n" + "one."); + +static const u8 sExpCandyXSDesc[] = _( + "Gives a very small\n" + "amount of Exp. to\n" + "a single Pokémon."); + +static const u8 sExpCandySDesc[] = _( + "Gives a small\n" + "amount of Exp. to\n" + "a single Pokémon."); + +static const u8 sExpCandyMDesc[] = _( + "Gives a moderate\n" + "amount of Exp. to\n" + "a single Pokémon."); + +static const u8 sExpCandyLDesc[] = _( + "Gives a large\n" + "amount of Exp. to\n" + "a single Pokémon."); + +static const u8 sExpCandyXLDesc[] = _( + "Gives a very large\n" + "amount of Exp. to\n" + "a single Pokémon."); + +static const u8 sDynamaxCandyDesc[] = _( + "Raises the Dynamax\n" + "Level of a single\n" + "Pokémon by one."); + +// Medicinal Flutes +static const u8 sBlueFluteDesc[] = _( + "A glass flute that\n" + "awakens sleeping\n" + "Pokémon."); + +static const u8 sYellowFluteDesc[] = _( + "A glass flute that\n" + "snaps Pokémon\n" + "out of confusion."); + +static const u8 sRedFluteDesc[] = _( + "A glass flute that\n" + "snaps Pokémon\n" + "out of attraction."); + +// Encounter-modifying Flutes +static const u8 sBlackFluteDesc[] = _( + "A glass flute that\n" + "keeps away wild\n" + "Pokémon."); + +static const u8 sWhiteFluteDesc[] = _( + "A glass flute that\n" + "lures wild Pokémon."); + +// Encounter Modifiers +static const u8 sRepelDesc[] = _( + "Repels weak wild\n" + "Pokémon for 100\n" + "steps."); + +static const u8 sSuperRepelDesc[] = _( + "Repels weak wild\n" + "Pokémon for 200\n" + "steps."); + +static const u8 sMaxRepelDesc[] = _( + "Repels weak wild\n" + "Pokémon for 250\n" + "steps."); + +static const u8 sLureDesc[] = _( + "Makes Pokémon more\n" + "likely to appear\n" + "for 100 steps."); + +static const u8 sSuperLureDesc[] = _( + "Makes Pokémon more\n" + "likely to appear\n" + "for 200 steps."); + +static const u8 sMaxLureDesc[] = _( + "Makes Pokémon more\n" + "likely to appear\n" + "for 250 steps."); + +static const u8 sEscapeRopeDesc[] = _( + "Use to escape\n" + "instantly from a\n" + "cave or a dungeon."); + +// Battle items +static const u8 sXAttackDesc[] = _( +#if B_X_ITEMS_BUFF >= GEN_7 + "Sharply raises stat\n" + "Attack during\n" + "one battle."); +#else + "Raises the stat\n" + "Attack during one\n" + "battle."); +#endif + +static const u8 sXDefenseDesc[] = _( +#if B_X_ITEMS_BUFF >= GEN_7 + "Sharply raises stat\n" + "Defense during\n" + "one battle."); +#else + "Raises the stat\n" + "Defense during one\n" + "battle."); +#endif + +static const u8 sXSpAtkDesc[] = _( +#if B_X_ITEMS_BUFF >= GEN_7 + "Sharply raises stat\n" + "Sp. Atk during\n" + "one battle."); +#else + "Raises the stat\n" + "Sp. Atk during one\n" + "battle."); +#endif + +static const u8 sXSpDefDesc[] = _( +#if B_X_ITEMS_BUFF >= GEN_7 + "Sharply raises stat\n" + "Sp. Def during\n" + "one battle."); +#else + "Raises the stat\n" + "Sp. Def during one\n" + "battle."); +#endif + +static const u8 sXSpeedDesc[] = _( +#if B_X_ITEMS_BUFF >= GEN_7 + "Sharply raises stat\n" + "Speed during\n" + "one battle."); +#else + "Raises the stat\n" + "Speed during one\n" + "battle."); +#endif + +static const u8 sXAccuracyDesc[] = _( +#if B_X_ITEMS_BUFF >= GEN_7 + "Sharply raises move\n" + "accuracy during\n" + "one battle."); +#else + "Raises accuracy\n" + "of attack moves\n" + "during one battle."); +#endif + +static const u8 sDireHitDesc[] = _( + "Raises the\n" + "critical-hit ratio\n" + "during one battle."); + +static const u8 sGuardSpecDesc[] = _( + "Prevents stat\n" + "reduction when\n" + "used in battle."); + +// Escape Items +static const u8 sPokeDollDesc[] = _( + "Use to flee from\n" + "any battle with\n" + "a wild Pokémon."); + +static const u8 sFluffyTailDesc[] = _( + "Use to flee from\n" + "any battle with\n" + "a wild Pokémon."); + +static const u8 sPokeToyDesc[] = _( + "Use to flee from\n" + "any battle with\n" + "a wild Pokémon."); + +static const u8 sMaxMushroomsDesc[] = _( + "Raises every stat\n" + "during one battle\n" + "by one stage."); + +// Treasures +static const u8 sBottleCapDesc[] = _( + "A beautiful bottle\n" + "cap that gives off\n" + "a silver gleam."); + +static const u8 sGoldBottleCapDesc[] = _( + "A beautiful bottle\n" + "cap that gives off\n" + "a golden gleam."); + +static const u8 sNuggetDesc[] = _( + "A nugget of pure\n" + "gold. Can be sold at\n" + "a high price."); + +static const u8 sBigNuggetDesc[] = _( + "A big nugget made\n" + "of gold, sellable\n" + "at a high price."); + +static const u8 sTinyMushroomDesc[] = _( + "A plain mushroom\n" + "that would sell\n" + "at a cheap price."); + +static const u8 sBigMushroomDesc[] = _( + "A rare mushroom\n" + "that would sell at a\n" + "high price."); + +static const u8 sBalmMushroomDesc[] = _( + "A rare mushroom\n" + "that would sell at a\n" + "high price."); + +static const u8 sPearlDesc[] = _( + "A pretty pearl\n" + "that would sell at a\n" + "cheap price."); + +static const u8 sBigPearlDesc[] = _( + "A lovely large pearl\n" + "that would sell at a\n" + "high price."); + +static const u8 sPearlStringDesc[] = _( + "Very large pearls\n" + "that would sell at a\n" + "high price."); + +static const u8 sStardustDesc[] = _( + "Beautiful red sand.\n" + "Can be sold at a\n" + "high price."); + +static const u8 sStarPieceDesc[] = _( + "A red gem shard.\n" + "It would sell for a\n" + "very high price."); + +static const u8 sCometShardDesc[] = _( + "A comet's shard.\n" + "It would sell for a\n" + "high price."); -// Collectibles static const u8 sShoalSaltDesc[] = _( "Salt obtained from\n" "deep inside the\n" - "SHOAL CAVE."); + "Shoal Cave."); static const u8 sShoalShellDesc[] = _( "A seashell found\n" "deep inside the\n" - "SHOAL CAVE."); + "Shoal Cave."); static const u8 sRedShardDesc[] = _( "A shard from an\n" @@ -251,250 +826,1841 @@ static const u8 sGreenShardDesc[] = _( "ancient item. Can\n" "be sold cheaply."); -// Vitamins -static const u8 sHPUpDesc[] = _( - "Raises the base HP\n" - "of one POKéMON."); - -static const u8 sProteinDesc[] = _( - "Raises the base\n" - "ATTACK stat of one\n" - "POKéMON."); - -static const u8 sIronDesc[] = _( - "Raises the base\n" - "DEFENSE stat of\n" - "one POKéMON."); - -static const u8 sCarbosDesc[] = _( - "Raises the base\n" - "SPEED stat of one\n" - "POKéMON."); - -static const u8 sCalciumDesc[] = _( - "Raises the base\n" - "SP. ATK stat of one\n" - "POKéMON."); - -static const u8 sRareCandyDesc[] = _( - "Raises the level\n" - "of a POKéMON by\n" - "one."); - -static const u8 sPPUpDesc[] = _( - "Raises the maximum\n" - "PP of a selected\n" - "move."); - -static const u8 sZincDesc[] = _( - "Raises the base\n" - "SP. DEF stat of one\n" - "POKéMON."); - -static const u8 sPPMaxDesc[] = _( - "Raises the PP of a\n" - "move to its maximum\n" - "points."); - -// Battle items -static const u8 sGuardSpecDesc[] = _( - "Prevents stat\n" - "reduction when\n" - "used in battle."); - -static const u8 sDireHitDesc[] = _( - "Raises the\n" - "critical-hit ratio\n" - "during one battle."); - -static const u8 sXAttackDesc[] = _( - "Raises the stat\n" - "ATTACK during one\n" - "battle."); - -static const u8 sXDefendDesc[] = _( - "Raises the stat\n" - "DEFENSE during one\n" - "battle."); - -static const u8 sXSpeedDesc[] = _( - "Raises the stat\n" - "SPEED during one\n" - "battle."); - -static const u8 sXAccuracyDesc[] = _( - "Raises accuracy\n" - "of attack moves\n" - "during one battle."); - -static const u8 sXSpecialDesc[] = _( - "Raises the stat\n" - "SP. ATK during one\n" - "battle."); - -static const u8 sPokeDollDesc[] = _( - "Use to flee from\n" - "any battle with\n" - "a wild POKéMON."); - -static const u8 sFluffyTailDesc[] = _( - "Use to flee from\n" - "any battle with\n" - "a wild POKéMON."); - -// Field items -static const u8 sSuperRepelDesc[] = _( - "Repels weak wild\n" - "POKéMON for 200\n" - "steps."); - -static const u8 sMaxRepelDesc[] = _( - "Repels weak wild\n" - "POKéMON for 250\n" - "steps."); - -static const u8 sEscapeRopeDesc[] = _( - "Use to escape\n" - "instantly from a\n" - "cave or a dungeon."); - -static const u8 sRepelDesc[] = _( - "Repels weak wild\n" - "POKéMON for 100\n" - "steps."); - -// Evolution stones -static const u8 sSunStoneDesc[] = _( - "Makes certain\n" - "species of POKéMON\n" - "evolve."); - -static const u8 sMoonStoneDesc[] = _( - "Makes certain\n" - "species of POKéMON\n" - "evolve."); - -static const u8 sFireStoneDesc[] = _( - "Makes certain\n" - "species of POKéMON\n" - "evolve."); - -static const u8 sThunderStoneDesc[] = _( - "Makes certain\n" - "species of POKéMON\n" - "evolve."); - -static const u8 sWaterStoneDesc[] = _( - "Makes certain\n" - "species of POKéMON\n" - "evolve."); - -static const u8 sLeafStoneDesc[] = _( - "Makes certain\n" - "species of POKéMON\n" - "evolve."); - -// Valuable items -static const u8 sTinyMushroomDesc[] = _( - "A plain mushroom\n" - "that would sell\n" - "at a cheap price."); - -static const u8 sBigMushroomDesc[] = _( - "A rare mushroom\n" - "that would sell at a\n" - "high price."); - -static const u8 sPearlDesc[] = _( - "A pretty pearl\n" - "that would sell at a\n" - "cheap price."); - -static const u8 sBigPearlDesc[] = _( - "A lovely large pearl\n" - "that would sell at a\n" - "high price."); - -static const u8 sStardustDesc[] = _( - "Beautiful red sand.\n" - "Can be sold at a\n" - "high price."); - -static const u8 sStarPieceDesc[] = _( - "A red gem shard.\n" - "It would sell for a\n" - "very high price."); - -static const u8 sNuggetDesc[] = _( - "A nugget of pure\n" - "gold. Can be sold at\n" - "a high price."); - static const u8 sHeartScaleDesc[] = _( "A lovely scale.\n" "It is coveted by\n" "collectors."); +static const u8 sHoneyDesc[] = _( + "Sweet honey that\n" + "attracts wild\n" + "Pokémon when used."); + +static const u8 sRareBoneDesc[] = _( + "A very rare bone.\n" + "It can be sold at\n" + "a high price."); + +static const u8 sOddKeystoneDesc[] = _( + "Voices can be heard\n" + "from this odd stone\n" + "occasionally."); + +static const u8 sPrettyFeatherDesc[] = _( + "A beautiful yet\n" + "plain feather that\n" + "does nothing."); + +static const u8 sRelicCopperDesc[] = _( + "A copper coin used\n" + "long ago. It sells\n" + "at a high price."); + +static const u8 sRelicSilverDesc[] = _( + "A silver coin used\n" + "long ago. It sells\n" + "at a high price."); + +static const u8 sRelicGoldDesc[] = _( + "A gold coin used\n" + "long ago. It sells\n" + "at a high price."); + +static const u8 sRelicVaseDesc[] = _( + "A vase made long\n" + "ago. It sells at\n" + "a high price."); + +static const u8 sRelicBandDesc[] = _( + "An old bracelet.\n" + "It sells at a\n" + "high price."); + +static const u8 sRelicStatueDesc[] = _( + "An old statue.\n" + "It sells at a\n" + "high price."); + +static const u8 sRelicCrownDesc[] = _( + "An old crown.\n" + "It sells at a\n" + "high price."); + +static const u8 sStrangeSouvenirDesc[] = _( + "An ornament that\n" + "depicts a Pokémon\n" + "from Alola."); + +// Fossils +static const u8 sHelixFossilDesc[] = _( + "A piece of an\n" + "ancient marine\n" + "Pokémon's seashell."); + +static const u8 sDomeFossilDesc[] = _( + "A piece of an\n" + "ancient marine\n" + "Pokémon's shell."); + +static const u8 sOldAmberDesc[] = _( + "A stone containing\n" + "the genes of an\n" + "ancient Pokémon."); + +static const u8 sRootFossilDesc[] = _( + "A fossil of an\n" + "ancient, seafloor-\n" + "dwelling Pokémon."); + +static const u8 sClawFossilDesc[] = _( + "A fossil of an\n" + "ancient, seafloor-\n" + "dwelling Pokémon."); + +static const u8 sArmorFossilDesc[] = _( + "A piece of a\n" + "prehistoric Poké-\n" + "mon's head."); + +static const u8 sSkullFossilDesc[] = _( + "A piece of a\n" + "prehistoric Poké-\n" + "mon's head."); + +static const u8 sCoverFossilDesc[] = _( + "A piece of a\n" + "prehistoric Poké-\n" + "mon's back."); + +static const u8 sPlumeFossilDesc[] = _( + "A piece of a\n" + "prehistoric Poké-\n" + "mon's wing."); + +static const u8 sJawFossilDesc[] = _( + "A piece of a prehis-\n" + "toric Pokémon's\n" + "large jaw."); + +static const u8 sSailFossilDesc[] = _( + "A piece of a prehis-\n" + "toric Pokémon's\n" + "skin sail."); + +static const u8 sFossilizedBirdDesc[] = _( + "A fossil of an\n" + "ancient, sky-\n" + "soaring Pokémon."); + +static const u8 sFossilizedFishDesc[] = _( + "A fossil of an\n" + "ancient, sea-\n" + "dwelling Pokémon."); + +static const u8 sFossilizedDrakeDesc[] = _( + "A fossil of an\n" + "ancient, land-\n" + "roaming Pokémon."); + +static const u8 sFossilizedDinoDesc[] = _( + "A fossil of an\n" + "ancient, sea-\n" + "dwelling Pokémon."); + +// Mulch +static const u8 sGrowthMulchDesc[] = _( + "A fertilizer that\n" + "accelerates the\n" + "growth of Berries."); + +static const u8 sDampMulchDesc[] = _( + "A fertilizer that\n" + "decelerates the\n" + "growth of Berries."); + +static const u8 sStableMulchDesc[] = _( + "A fertilizer that\n" + "ups the life time\n" + "of Berry trees."); + +static const u8 sGooeyMulchDesc[] = _( + "A fertilizer that\n" + "makes more Berries\n" + "regrow after fall."); + +static const u8 sRichMulchDesc[] = _( + "A fertilizer that\n" + "ups the number of\n" + "Berries harvested."); + +static const u8 sSurpriseMulchDesc[] = _( + "A fertilizer that\n" + "ups the chance of\n" + "Berry mutations."); + +static const u8 sBoostMulchDesc[] = _( + "A fertilizer that\n" + "ups the dry speed\n" + "of soft soil."); + +static const u8 sAmazeMulchDesc[] = _( + "A fertilizer Rich\n" + "Surprising and\n" + "Boosting as well."); + +// Apricorns +static const u8 sRedApricornDesc[] = _( + "A red apricorn.\n" + "It assails your\n" + "nostrils."); + +static const u8 sBlueApricornDesc[] = _( + "A blue apricorn.\n" + "It smells a bit\n" + "like grass."); + +static const u8 sYellowApricornDesc[] = _( + "A yellow apricorn.\n" + "It has an invigor-\n" + "ating scent."); + +static const u8 sGreenApricornDesc[] = _( + "A green apricorn.\n" + "It has a strange,\n" + "aromatic scent."); + +static const u8 sPinkApricornDesc[] = _( + "A pink apricorn.\n" + "It has a nice,\n" + "sweet scent."); + +static const u8 sWhiteApricornDesc[] = _( + "A white apricorn.\n" + "It doesn't smell\n" + "like anything."); + +static const u8 sBlackApricornDesc[] = _( + "A black apricorn.\n" + "It has an inde-\n" + "scribable scent."); + +static const u8 sWishingPieceDesc[] = _( + "Throw into a\n" + "{PKMN} Den to attract\n" + "Dynamax Pokémon."); + +static const u8 sGalaricaTwigDesc[] = _( + "A twig from a tree\n" + "in Galar called\n" + "Galarica."); + +static const u8 sArmoriteOreDesc[] = _( + "A rare ore. Can be\n" + "found in the Isle\n" + "of Armor at Galar."); + +static const u8 sDyniteOreDesc[] = _( + "A mysterious ore.\n" + "It can be found in\n" + "Galar's Max Lair."); + // Mail static const u8 sOrangeMailDesc[] = _( - "A ZIGZAGOON-print\n" - "MAIL to be held by\n" - "a POKéMON."); + "A Zigzagoon-print\n" + "Mail to be held by\n" + "a Pokémon."); static const u8 sHarborMailDesc[] = _( - "A WINGULL-print\n" - "MAIL to be held by\n" - "a POKéMON."); + "A Wingull-print\n" + "Mail to be held by\n" + "a Pokémon."); static const u8 sGlitterMailDesc[] = _( - "A PIKACHU-print\n" - "MAIL to be held by\n" - "a POKéMON."); + "A Pikachu-print\n" + "Mail to be held by\n" + "a Pokémon."); static const u8 sMechMailDesc[] = _( - "A MAGNEMITE-print\n" - "MAIL to be held by\n" - "a POKéMON."); + "A Magnemite-print\n" + "Mail to be held by\n" + "a Pokémon."); static const u8 sWoodMailDesc[] = _( - "A SLAKOTH-print\n" - "MAIL to be held by\n" - "a POKéMON."); + "A Slakoth-print\n" + "Mail to be held by\n" + "a Pokémon."); static const u8 sWaveMailDesc[] = _( - "A WAILMER-print\n" - "MAIL to be held by\n" - "a POKéMON."); + "A Wailmer-print\n" + "Mail to be held by\n" + "a Pokémon."); static const u8 sBeadMailDesc[] = _( - "MAIL featuring a\n" + "Mail featuring a\n" "sketch of the\n" - "holding POKéMON."); + "holding Pokémon."); static const u8 sShadowMailDesc[] = _( - "A DUSKULL-print\n" - "MAIL to be held by\n" - "a POKéMON."); + "A Duskull-print\n" + "Mail to be held by\n" + "a Pokémon."); static const u8 sTropicMailDesc[] = _( - "A BELLOSSOM-print\n" - "MAIL to be held by\n" - "a POKéMON."); + "A Bellossom-print\n" + "Mail to be held by\n" + "a Pokémon."); static const u8 sDreamMailDesc[] = _( - "MAIL featuring a\n" + "Mail featuring a\n" "sketch of the\n" - "holding POKéMON."); + "holding Pokémon."); static const u8 sFabMailDesc[] = _( "A gorgeous-print\n" - "MAIL to be held\n" - "by a POKéMON."); + "Mail to be held\n" + "by a Pokémon."); static const u8 sRetroMailDesc[] = _( - "MAIL featuring the\n" + "Mail featuring the\n" "drawings of three\n" - "POKéMON."); + "Pokémon."); + +// Evolution Items +static const u8 sFireStoneDesc[] = _( + "Makes certain\n" + "species of Pokémon\n" + "evolve."); + +static const u8 sWaterStoneDesc[] = _( + "Makes certain\n" + "species of Pokémon\n" + "evolve."); + +static const u8 sThunderStoneDesc[] = _( + "Makes certain\n" + "species of Pokémon\n" + "evolve."); + +static const u8 sLeafStoneDesc[] = _( + "Makes certain\n" + "species of Pokémon\n" + "evolve."); + +static const u8 sIceStoneDesc[] = _( + "Makes certain\n" + "species of Pokémon\n" + "evolve."); + +static const u8 sSunStoneDesc[] = _( + "Makes certain\n" + "species of Pokémon\n" + "evolve."); + +static const u8 sMoonStoneDesc[] = _( + "Makes certain\n" + "species of Pokémon\n" + "evolve."); + +static const u8 sShinyStoneDesc[] = _( + "Makes certain\n" + "species of Pokémon\n" + "evolve."); + +static const u8 sDuskStoneDesc[] = _( + "Makes certain\n" + "species of Pokémon\n" + "evolve."); + +static const u8 sDawnStoneDesc[] = _( + "Makes certain\n" + "species of Pokémon\n" + "evolve."); + +static const u8 sSweetAppleDesc[] = _( + "A very sweet apple\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sTartAppleDesc[] = _( + "A very tart apple\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sCrackedPotDesc[] = _( + "A cracked teapot\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sChippedPotDesc[] = _( + "A chipped teapot\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sGalaricaCuffDesc[] = _( + "A cuff from Galar\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sGalaricaWreathDesc[] = _( + "A wreath made in\n" + "Galar. Makes some\n" + "Pokémon evolve."); + +static const u8 sDragonScaleDesc[] = _( + "A strange scale\n" + "held by Dragon-\n" + "type Pokémon."); + +static const u8 sUpgradeDesc[] = _( + "A peculiar box made\n" + "by Silph Co."); + +static const u8 sProtectorDesc[] = _( + "Loved by a certain\n" + "Pokémon. It's stiff\n" + "and heavy."); + +static const u8 sElectirizerDesc[] = _( + "Loved by a certain\n" + "Pokémon. It's full\n" + "of electric energy."); + +static const u8 sMagmarizerDesc[] = _( + "Loved by a certain\n" + "Pokémon. It's full\n" + "of magma energy."); + +static const u8 sDubiousDiscDesc[] = _( + "A transparent device\n" + "overflowing with\n" + "dubious data."); + +static const u8 sReaperClothDesc[] = _( + "Loved by a certain\n" + "Pokémon. Imbued with\n" + "spiritual energy."); + +static const u8 sPrismScaleDesc[] = _( + "A mysterious scale\n" + "that evolves certain\n" + "Pokémon. It shines."); + +static const u8 sWhippedDreamDesc[] = _( + "A soft and sweet\n" + "treat loved by\n" + "a certain Pokémon."); + +static const u8 sSachetDesc[] = _( + "A sachet filled with\n" + "perfumes loved by\n" + "a certain Pokémon."); + +static const u8 sOvalStoneDesc[] = _( + "Makes a certain\n" + "Pokémon evolve. It's\n" + "shaped like an egg."); + +static const u8 sStrawberrySweetDesc[] = _( + "Strawberry-shaped\n" + "sweet loved by\n" + "Milcery."); + +static const u8 sLoveSweetDesc[] = _( + "A heart-shaped\n" + "sweet loved by\n" + "Milcery."); + +static const u8 sBerrySweetDesc[] = _( + "A berry-shaped\n" + "sweet loved by\n" + "Milcery."); + +static const u8 sCloverSweetDesc[] = _( + "A clover-shaped\n" + "sweet loved by\n" + "Milcery."); + +static const u8 sFlowerSweetDesc[] = _( + "A flower-shaped\n" + "sweet loved by\n" + "Milcery."); + +static const u8 sStarSweetDesc[] = _( + "A star-shaped\n" + "sweet loved by\n" + "Milcery."); + +static const u8 sRibbonSweetDesc[] = _( + "A ribbon-shaped\n" + "sweet loved by\n" + "Milcery."); + +static const u8 sEverstoneDesc[] = _( + "A wondrous hold\n" + "item that prevents\n" + "evolution."); + +// Nectars +static const u8 sRedNectarDesc[] = _( + "Flower nectar that\n" + "changes the form\n" + "of certain Pokémon."); + +static const u8 sYellowNectarDesc[] = _( + "Flower nectar that\n" + "changes the form\n" + "of certain Pokémon."); + +static const u8 sPinkNectarDesc[] = _( + "Flower nectar that\n" + "changes the form\n" + "of certain Pokémon."); + +static const u8 sPurpleNectarDesc[] = _( + "Flower nectar that\n" + "changes the form\n" + "of certain Pokémon."); + +// Plates +static const u8 sFlamePlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Fire-type moves."); + +static const u8 sSplashPlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Water-type moves."); + +static const u8 sZapPlateDesc[] = _( + "A tablet that ups\n" + "the power of Elec-\n" + "tric-type moves."); + +static const u8 sMeadowPlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Grass-type moves."); + +static const u8 sIciclePlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Ice-type moves."); + +static const u8 sFistPlateDesc[] = _( + "A tablet that ups\n" + "the power of Fight-\n" + "ing-type moves."); + +static const u8 sToxicPlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Poison-type moves."); + +static const u8 sEarthPlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Ground-type moves."); + +static const u8 sSkyPlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Flying-type moves."); + +static const u8 sMindPlateDesc[] = _( + "A tablet that ups\n" + "the power of Psy\n" + "chic-type moves."); + +static const u8 sInsectPlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Bug-type moves."); + +static const u8 sStonePlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Rock-type moves."); + +static const u8 sSpookyPlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Ghost-type moves."); + +static const u8 sDracoPlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Dragon-type moves."); + +static const u8 sDreadPlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Dark-type moves."); + +static const u8 sIronPlateDesc[] = _( + "A tablet that ups\n" + "the power of\n" + "Steel-type moves."); + +static const u8 sPixiePlateDesc[] = _( + "A stone tablet that\n" + "boosts the power of\n" + "Fairy-type moves."); + +// Drives +static const u8 sDouseDriveDesc[] = _( + "Changes Genesect's\n" + "Techno Blast to\n" + "Water-type."); + +static const u8 sShockDriveDesc[] = _( + "Changes Genesect's\n" + "Techno Blast to\n" + "Electric-type."); + +static const u8 sBurnDriveDesc[] = _( + "Changes Genesect's\n" + "Techno Blast to\n" + "Fire-type."); + +static const u8 sChillDriveDesc[] = _( + "Changes Genesect's\n" + "Techno Blast to\n" + "Ice-type."); + +// Memories +static const u8 sFireMemoryDesc[] = _( + "A disc with Fire\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sWaterMemoryDesc[] = _( + "A disc with Water\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sElectricMemoryDesc[] = _( + "A disc with Electric\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sGrassMemoryDesc[] = _( + "A disc with Grass\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sIceMemoryDesc[] = _( + "A disc with Ice\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sFightingMemoryDesc[] = _( + "A disc with Fighting\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sPoisonMemoryDesc[] = _( + "A disc with Poison\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sGroundMemoryDesc[] = _( + "A disc with Ground\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sFlyingMemoryDesc[] = _( + "A disc with Flying\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sPsychicMemoryDesc[] = _( + "A disc with Psychic\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sBugMemoryDesc[] = _( + "A disc with Bug\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sRockMemoryDesc[] = _( + "A disc with Rock\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sGhostMemoryDesc[] = _( + "A disc with Ghost\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sDragonMemoryDesc[] = _( + "A disc with Dragon\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sDarkMemoryDesc[] = _( + "A disc with Dark\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sSteelMemoryDesc[] = _( + "A disc with Steel\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sFairyMemoryDesc[] = _( + "A disc with Fairy\n" + "type data. It swaps\n" + "Silvally's type."); + +static const u8 sRustedSwordDesc[] = _( + "A rusty sword. A\n" + "hero used it to\n" + "halt a disaster."); + +static const u8 sRustedShieldDesc[] = _( + "A rusty shield. A\n" + "hero used it to\n" + "halt a disaster."); + +// Colored Orbs +static const u8 sRedOrbDesc[] = _( + "A red, glowing orb\n" + "said to contain an\n" + "ancient power."); + +static const u8 sBlueOrbDesc[] = _( + "A blue, glowing orb\n" + "said to contain an\n" + "ancient power."); + +// Mega Stones +static const u8 sVenusauriteDesc[] = _( + "This stone enables\n" + "Venusaur to Mega\n" + "Evolve in battle."); + +static const u8 sCharizarditeDesc[] = _( + "This stone enables\n" + "Charizard to Mega\n" + "Evolve in battle."); + +static const u8 sBlastoisiniteDesc[] = _( + "This stone enables\n" + "Blastoise to Mega\n" + "Evolve in battle."); + +static const u8 sBeedrilliteDesc[] = _( + "This stone enables\n" + "Beedrill to Mega\n" + "Evolve in battle."); + +static const u8 sPidgeotiteDesc[] = _( + "This stone enables\n" + "Pidgeot to Mega\n" + "Evolve in battle."); + +static const u8 sAlakaziteDesc[] = _( + "This stone enables\n" + "Alakazam to Mega\n" + "Evolve in battle."); + +static const u8 sSlowbroniteDesc[] = _( + "This stone enables\n" + "Slowbro to Mega\n" + "Evolve in battle."); + +static const u8 sGengariteDesc[] = _( + "This stone enables\n" + "Gengar to Mega\n" + "Evolve in battle."); + +static const u8 sKangaskhaniteDesc[] = _( + "This stone enables\n" + "Kangaskhan to Mega\n" + "Evolve in battle."); + +static const u8 sPinsiriteDesc[] = _( + "This stone enables\n" + "Pinsir to Mega\n" + "Evolve in battle."); + +static const u8 sGyaradositeDesc[] = _( + "This stone enables\n" + "Gyarados to Mega\n" + "Evolve in battle."); + +static const u8 sAerodactyliteDesc[] = _( + "This stone enables\n" + "Aerodactyl to Mega\n" + "Evolve in battle."); + +static const u8 sMewtwoniteDesc[] = _( + "This stone enables\n" + "Mewtwo to Mega\n" + "Evolve in battle."); + +static const u8 sAmpharositeDesc[] = _( + "This stone enables\n" + "Ampharos to Mega\n" + "Evolve in battle."); + +static const u8 sSteelixiteDesc[] = _( + "This stone enables\n" + "Steelix to Mega\n" + "Evolve in battle."); + +static const u8 sScizoriteDesc[] = _( + "This stone enables\n" + "Scizor to Mega\n" + "Evolve in battle."); + +static const u8 sHeracroniteDesc[] = _( + "This stone enables\n" + "Heracross to Mega\n" + "Evolve in battle."); + +static const u8 sHoundoominiteDesc[] = _( + "This stone enables\n" + "Houndoom to Mega\n" + "Evolve in battle."); + +static const u8 sTyranitariteDesc[] = _( + "This stone enables\n" + "Tyranitar to Mega\n" + "Evolve in battle."); + +static const u8 sSceptiliteDesc[] = _( + "This stone enables\n" + "Sceptile to Mega\n" + "Evolve in battle."); + +static const u8 sBlazikeniteDesc[] = _( + "This stone enables\n" + "Blaziken to Mega\n" + "Evolve in battle."); + +static const u8 sSwampertiteDesc[] = _( + "This stone enables\n" + "Swampert to Mega\n" + "Evolve in battle."); + +static const u8 sGardevoiriteDesc[] = _( + "This stone enables\n" + "Gardevoir to Mega\n" + "Evolve in battle."); + +static const u8 sSableniteDesc[] = _( + "This stone enables\n" + "Sableye to Mega\n" + "Evolve in battle."); + +static const u8 sMawiliteDesc[] = _( + "This stone enables\n" + "Mawile to Mega\n" + "Evolve in battle."); + +static const u8 sAggroniteDesc[] = _( + "This stone enables\n" + "Aggron to Mega\n" + "Evolve in battle."); + +static const u8 sMedichamiteDesc[] = _( + "This stone enables\n" + "Medicham to Mega\n" + "Evolve in battle."); + +static const u8 sManectiteDesc[] = _( + "This stone enables\n" + "Manectric to Mega\n" + "Evolve in battle."); + +static const u8 sSharpedoniteDesc[] = _( + "This stone enables\n" + "Sharpedo to Mega\n" + "Evolve in battle."); + +static const u8 sCameruptiteDesc[] = _( + "This stone enables\n" + "Camerupt to Mega\n" + "Evolve in battle."); + +static const u8 sAltarianiteDesc[] = _( + "This stone enables\n" + "Altaria to Mega\n" + "Evolve in battle."); + +static const u8 sBanettiteDesc[] = _( + "This stone enables\n" + "Banette to Mega\n" + "Evolve in battle."); + +static const u8 sAbsoliteDesc[] = _( + "This stone enables\n" + "Absol to Mega\n" + "Evolve in battle."); + +static const u8 sGlalititeDesc[] = _( + "This stone enables\n" + "Glalie to Mega\n" + "Evolve in battle."); + +static const u8 sSalamenciteDesc[] = _( + "This stone enables\n" + "Salamence to Mega\n" + "Evolve in battle."); + +static const u8 sMetagrossiteDesc[] = _( + "This stone enables\n" + "Metagross to Mega\n" + "Evolve in battle."); + +static const u8 sLatiasiteDesc[] = _( + "This stone enables\n" + "Latias to Mega\n" + "Evolve in battle."); + +static const u8 sLatiositeDesc[] = _( + "This stone enables\n" + "Latios to Mega\n" + "Evolve in battle."); + +static const u8 sLopunniteDesc[] = _( + "This stone enables\n" + "Lopunny to Mega\n" + "Evolve in battle."); + +static const u8 sGarchompiteDesc[] = _( + "This stone enables\n" + "Garchomp to Mega\n" + "Evolve in battle."); + +static const u8 sLucarioniteDesc[] = _( + "This stone enables\n" + "Lucario to Mega\n" + "Evolve in battle."); + +static const u8 sAbomasiteDesc[] = _( + "This stone enables\n" + "Abomasnow to Mega\n" + "Evolve in battle."); + +static const u8 sGalladiteDesc[] = _( + "This stone enables\n" + "Gallade to Mega\n" + "Evolve in battle."); + +static const u8 sAudiniteDesc[] = _( + "This stone enables\n" + "Audino to Mega\n" + "Evolve in battle."); + +static const u8 sDianciteDesc[] = _( + "This stone enables\n" + "Diancie to Mega\n" + "Evolve in battle."); + +// Gems +static const u8 sNormalGemDesc[] = _( + "Increases the\n" + "power of Normal\n" + "Type moves."); + +static const u8 sFireGemDesc[] = _( + "Increases the\n" + "power of Fire\n" + "Type moves."); + +static const u8 sWaterGemDesc[] = _( + "Increases the\n" + "power of Water\n" + "Type moves."); + +static const u8 sElectricGemDesc[] = _( + "Increases the\n" + "power of Electric\n" + "Type moves."); + +static const u8 sGrassGemDesc[] = _( + "Increases the\n" + "power of Grass\n" + "Type moves."); + +static const u8 sIceGemDesc[] = _( + "Increases the\n" + "power of Ice\n" + "Type moves."); + +static const u8 sFightingGemDesc[] = _( + "Increases the\n" + "power of Fighting\n" + "Type moves."); + +static const u8 sPoisonGemDesc[] = _( + "Increases the\n" + "power of Poison\n" + "Type moves."); + +static const u8 sGroundGemDesc[] = _( + "Increases the\n" + "power of Ground\n" + "Type moves."); + +static const u8 sFlyingGemDesc[] = _( + "Increases the\n" + "power of Flying\n" + "Type moves."); + +static const u8 sPsychicGemDesc[] = _( + "Increases the\n" + "power of Psychic\n" + "Type moves."); + +static const u8 sBugGemDesc[] = _( + "Increases the\n" + "power of Bug\n" + "Type moves."); + +static const u8 sRockGemDesc[] = _( + "Increases the\n" + "power of Rock\n" + "Type moves."); + +static const u8 sGhostGemDesc[] = _( + "Increases the\n" + "power of Ghost\n" + "Type moves."); + +static const u8 sDragonGemDesc[] = _( + "Increases the\n" + "power of Dragon\n" + "Type moves."); + +static const u8 sDarkGemDesc[] = _( + "Increases the\n" + "power of Dark\n" + "Type moves."); + +static const u8 sSteelGemDesc[] = _( + "Increases the\n" + "power of Steel\n" + "Type moves."); + +static const u8 sFairyGemDesc[] = _( + "Increases the\n" + "power of Fairy\n" + "Type moves."); + +// Z-Crystals +static const u8 sNormaliumZDesc[] = _( + "Upgrade Normal-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sFiriumZDesc[] = _( + "Upgrade Fire-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sWateriumZDesc[] = _( + "Upgrade Water-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sElectriumZDesc[] = _( + "Upgrade Electric-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sGrassiumZDesc[] = _( + "Upgrade Grass-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sIciumZDesc[] = _( + "Upgrade Ice-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sFightiniumZDesc[] = _( + "Upgrade Fighting-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sPoisoniumZDesc[] = _( + "Upgrade Poison-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sGroundiumZDesc[] = _( + "Upgrade Ground-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sFlyiniumZDesc[] = _( + "Upgrade Flying-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sPsychiumZDesc[] = _( + "Upgrade Psychic-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sBuginiumZDesc[] = _( + "Upgrade Bug-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sRockiumZDesc[] = _( + "Upgrade Rock-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sGhostiumZDesc[] = _( + "Upgrade Ghost-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sDragoniumZDesc[] = _( + "Upgrade Dragon-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sDarkiniumZDesc[] = _( + "Upgrade Dark-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sSteeliumZDesc[] = _( + "Upgrade Steel-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sFairiumZDesc[] = _( + "Upgrade Fairy-\n" + "type moves into\n" + "Z-Moves."); + +static const u8 sPikaniumZDesc[] = _( + "Upgrade Pikachu's\n" + "Volt Tackle\n" + "into a Z-Move."); + +static const u8 sEeviumZDesc[] = _( + "Upgrade Eevee's\n" + "Last Resort\n" + "into a Z-Move."); + +static const u8 sSnorliumZDesc[] = _( + "Upgrade Snorlax's\n" + "Giga Impact\n" + "into a Z-Move."); + +static const u8 sMewniumZDesc[] = _( + "Upgrade Mew's\n" + "Psychic into\n" + "a Z-Move."); + +static const u8 sDecidiumZDesc[] = _( + "Upgrade Decidu-\n" + "eye's Spirit Sha-\n" + "ckle into a Z-Move."); + +static const u8 sInciniumZDesc[] = _( + "Upgrade Incine-\n" + "roar's Darkest La-\n" + "riat into a Z-Move."); + +static const u8 sPrimariumZDesc[] = _( + "Upgrade Primarina's\n" + "Sparkling Aria\n" + "into a Z-Move."); + +static const u8 sLycaniumZDesc[] = _( + "Upgrade Lycanroc's\n" + "Stone Edge\n" + "into a Z-Move."); + +static const u8 sMimikiumZDesc[] = _( + "Upgrade Mimikyu's\n" + "Play Rough\n" + "into a Z-Move."); + +static const u8 sKommoniumZDesc[] = _( + "Upgrade Kommo-o's\n" + "Clanging Scales\n" + "into a Z-Move."); + +static const u8 sTapuniumZDesc[] = _( + "Upgrade the tapu's\n" + "Nature's Madness\n" + "into a Z-Move."); + +static const u8 sSolganiumZDesc[] = _( + "Upgrade Solgaleo's\n" + "Sunsteel Strike\n" + "into a Z-Move."); + +static const u8 sLunaliumZDesc[] = _( + "Upgrade Lunala's\n" + "Moongeist Beam\n" + "into a Z-Move."); + +static const u8 sMarshadiumZDesc[] = _( + "Upgrade Marsha-\n" + "dow's Spectral Thi-\n" + "ef into a Z-Move."); + +static const u8 sAloraichiumZDesc[] = _( + "Upgrade Alolan\n" + "Raichu's Thunder-\n" + "bolt into a Z-Move."); + +static const u8 sPikashuniumZDesc[] = _( + "Upgrade Pikachu w/\n" + "a cap's Thunderbolt\n" + "into a Z-Move."); + +static const u8 sUltranecroziumZDesc[] = _( + "A crystal to turn\n" + "fused Necrozma\n" + "into a new form."); + +// Species-specific Held Items +static const u8 sLightBallDesc[] = _( + "A hold item that\n" + "raises the Atk and\n" + "Sp. Atk of Pikachu."); + +static const u8 sLeekDesc[] = _( + "A hold item that\n" + "raises Farfetch'd's\n" + "critical-hit ratio."); + +static const u8 sThickClubDesc[] = _( + "A hold item that \n" + "raises Cubone or\n" + "Marowak's Attack."); + +static const u8 sLuckyPunchDesc[] = _( + "A hold item that\n" + "raises Chansey's\n" + "critical-hit rate."); + +static const u8 sMetalPowderDesc[] = _( + "A hold item that\n" + "raises Ditto's\n" + "Defense."); + +static const u8 sQuickPowderDesc[] = _( + "An item to be held\n" + "by Ditto. This odd\n" + "powder boosts Speed."); + +static const u8 sDeepSeaScaleDesc[] = _( + "A hold item that\n" + "raises the Sp. Def\n" + "of Clamperl."); + +static const u8 sDeepSeaToothDesc[] = _( + "A hold item that\n" + "raises the Sp. Atk\n" + "of Clamperl."); + +static const u8 sSoulDewDesc[] = _( +#if B_SOUL_DEW_BOOST >= GEN_7 + "Powers up Latios' &\n" + "Latias' Psychic and\n" + "Dragon-type moves."); +#else + "Hold item: raises\n" + "Sp. Atk & Sp. Def of\n" + "Latios & Latias."); +#endif + +static const u8 sAdamantOrbDesc[] = _( + "Boosts the power of\n" + "Dialga's Dragon and\n" + "Steel-type moves."); + +static const u8 sLustrousOrbDesc[] = _( + "Boosts the power of\n" + "Palkia's Dragon and\n" + "Water-type moves."); + +static const u8 sGriseousOrbDesc[] = _( + "Powers up Giratina's\n" + "Dragon and Ghost-\n" + "type moves."); + +// Incenses +static const u8 sSeaIncenseDesc[] = _( + "A hold item that\n" + "slightly boosts\n" + "Water-type moves."); + +static const u8 sLaxIncenseDesc[] = _( + "A hold item that\n" + "slightly lowers the\n" + "foe's accuracy."); + +static const u8 sOddIncenseDesc[] = _( + "A hold item that\n" + "boosts Psychic-\n" + "type moves."); + +static const u8 sRockIncenseDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Rock-type moves."); + +static const u8 sFullIncenseDesc[] = _( + "A held item that\n" + "makes the holder\n" + "move slower."); + +static const u8 sWaveIncenseDesc[] = _( + "A hold item that\n" + "slightly boosts\n" + "Water-type moves."); + +static const u8 sRoseIncenseDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Grass-type moves."); + +static const u8 sLuckIncenseDesc[] = _( + "Doubles money in\n" + "battle if the\n" + "holder takes part."); + +static const u8 sPureIncenseDesc[] = _( + "A hold item that\n" + "helps repel wild\n" + "Pokémon."); + +// Contest Scarves +static const u8 sRedScarfDesc[] = _( + "A hold item that\n" + "raises Cool in\n" + "Contests."); + +static const u8 sBlueScarfDesc[] = _( + "A hold item that\n" + "raises Beauty in\n" + "Contests."); + +static const u8 sPinkScarfDesc[] = _( + "A hold item that\n" + "raises Cute in\n" + "Contests."); + +static const u8 sGreenScarfDesc[] = _( + "A hold item that\n" + "raises Smart in\n" + "Contests."); + +static const u8 sYellowScarfDesc[] = _( + "A hold item that\n" + "raises Tough in\n" + "Contests."); + +// EV Gain Modifiers +static const u8 sMachoBraceDesc[] = _( + "A hold item that\n" + "promotes growth,\n" + "but reduces Speed."); + +static const u8 sPowerWeightDesc[] = _( + "A hold item that\n" + "promotes HP gain,\n" + "but reduces Speed."); + +static const u8 sPowerBracerDesc[] = _( + "A hold item that\n" + "promotes Atk gain,\n" + "but reduces Speed."); + +static const u8 sPowerBeltDesc[] = _( + "A hold item that\n" + "promotes Def gain,\n" + "but reduces Speed."); + +static const u8 sPowerLensDesc[] = _( + "Hold item that pro-\n" + "motes Sp. Atk gain,\n" + "but reduces Speed."); + +static const u8 sPowerBandDesc[] = _( + "Hold item that pro-\n" + "motes Sp. Def gain,\n" + "but reduces Speed."); + +static const u8 sPowerAnkletDesc[] = _( + "A hold item that\n" + "promotes Spd gain,\n" + "but reduces Speed."); + +// Type-boosting Held Items +static const u8 sSilkScarfDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Normal-type moves."); + +static const u8 sCharcoalDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Fire-type moves."); + +static const u8 sMysticWaterDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Water-type moves."); + +static const u8 sMagnetDesc[] = _( + "A hold item that\n" + "boosts Electric-\n" + "type moves."); + +static const u8 sMiracleSeedDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Grass-type moves."); + +static const u8 sNeverMeltIceDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Ice-type moves."); + +static const u8 sBlackBeltDesc[] = _( + "A hold item that\n" + "boosts Fighting-\n" + "type moves."); + +static const u8 sPoisonBarbDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Poison-type moves."); + +static const u8 sSoftSandDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Ground-type moves."); + +static const u8 sSharpBeakDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Flying-type moves."); + +static const u8 sTwistedSpoonDesc[] = _( + "A hold item that\n" + "boosts Psychic-\n" + "type moves."); + +static const u8 sSilverPowderDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Bug-type moves."); + +static const u8 sHardStoneDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Rock-type moves."); + +static const u8 sSpellTagDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Ghost-type moves."); + +static const u8 sDragonFangDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Dragon-type moves."); + +static const u8 sBlackGlassesDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Dark-type moves."); + +static const u8 sMetalCoatDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Steel-type moves."); + +// Choice Items +static const u8 sChoiceBandDesc[] = _( + "Raises a move's\n" + "power, but permits\n" + "only that move."); + +static const u8 sChoiceSpecsDesc[] = _( + "Boosts Sp. Atk, but\n" + "allows the use of\n" + "only one move."); + +static const u8 sChoiceScarfDesc[] = _( + "Boosts Speed, but\n" + "allows the use of\n" + "only one move."); + +// Status Orbs +static const u8 sFlameOrbDesc[] = _( + "A bizarre orb that\n" + "inflicts a burn on\n" + "holder in battle."); + +static const u8 sToxicOrbDesc[] = _( + "A bizarre orb that\n" + "badly poisons the\n" + "holder in battle."); + +// Weather Rocks +static const u8 sDampRockDesc[] = _( + "Extends the length\n" + "of Rain Dance if\n" + "used by the holder."); + +static const u8 sHeatRockDesc[] = _( + "Extends the length\n" + "of Sunny Day if\n" + "used by the holder."); + +static const u8 sSmoothRockDesc[] = _( + "Extends the length\n" + "of Sandstorm if\n" + "used by the holder."); + +static const u8 sIcyRockDesc[] = _( + "Extends the length\n" + "of the move Hail\n" + "used by the holder."); + +// Terrain Seeds +static const u8 sElectricSeedDesc[] = _( + "Boosts Defense on\n" + "Electric Terrain,\n" + "but only one time."); + +static const u8 sPsychicSeedDesc[] = _( + "Boosts Sp. Def. on\n" + "Psychic Terrain,\n" + "but only one time."); + +static const u8 sMistySeedDesc[] = _( + "Boosts Sp. Def. on\n" + "Misty Terrain,\n" + "but only one time."); + +static const u8 sGrassySeedDesc[] = _( + "Boosts Defense on\n" + "Grassy Terrain,\n" + "but only one time."); + +// Type-activated Stat Modifiers +static const u8 sAbsorbBulbDesc[] = _( + "Raises Sp. Atk if\n" + "the holder is hit by\n" + "a Water-type move."); + +static const u8 sCellBatteryDesc[] = _( + "Raises Atk if the\n" + "holder is hit by an\n" + "Electric-type move."); + +static const u8 sLuminousMossDesc[] = _( + "Raises Sp. Def if\n" + "the holder is hit by\n" + "a Water-type move."); + +static const u8 sSnowballDesc[] = _( + "Raises Atk if its\n" + "holder is hit by an\n" + "Ice-type move."); + +// Misc. Held Items +static const u8 sBrightPowderDesc[] = _( + "A hold item that\n" + "casts a glare to\n" + "reduce accuracy."); + +static const u8 sWhiteHerbDesc[] = _( + "A hold item that\n" + "restores any\n" + "lowered stat."); + +static const u8 sExpShareDesc[] = _( + "A hold item that\n" + "gets Exp. points\n" + "from battles."); + +static const u8 sQuickClawDesc[] = _( + "A hold item that\n" + "occasionally allows\n" + "the first strike."); + +static const u8 sSootheBellDesc[] = _( + "A hold item that\n" + "calms spirits and\n" + "fosters friendship."); + +#if B_MENTAL_HERB >= GEN_5 +static const u8 sMentalHerbDesc[] = _( + "Snaps Pokémon out\n" + "of move-binding\n" + "effects."); +#else +static const u8 sMentalHerbDesc[] = _( + "A hold item that\n" + "snaps Pokémon out\n" + "of infatuation."); +#endif + +static const u8 sKingsRockDesc[] = _( + "A hold item that\n" + "may cause flinching\n" + "when the foe is hit."); + +static const u8 sAmuletCoinDesc[] = _( + "Doubles money in\n" + "battle if the\n" + "holder takes part."); + +static const u8 sCleanseTagDesc[] = _( + "A hold item that\n" + "helps repel wild\n" + "Pokémon."); + +static const u8 sSmokeBallDesc[] = _( + "A hold item that\n" + "assures fleeing\n" + "from wild Pokémon."); + +static const u8 sFocusBandDesc[] = _( + "A hold item that\n" + "occasionally\n" + "prevents fainting."); + +static const u8 sLuckyEggDesc[] = _( + "A hold item that\n" + "boosts Exp. points\n" + "earned in battle."); + +static const u8 sScopeLensDesc[] = _( + "A hold item that\n" + "improves the\n" + "critical-hit rate."); + +static const u8 sLeftoversDesc[] = _( + "A hold item that\n" + "gradually restores\n" + "HP in battle."); + +static const u8 sShellBellDesc[] = _( + "A hold item that\n" + "restores HP upon\n" + "striking the foe."); + +static const u8 sWideLensDesc[] = _( + "A magnifying lens\n" + "that boosts the\n" + "accuracy of moves."); + +static const u8 sMuscleBandDesc[] = _( + "A headband that\n" + "boosts the power of\n" + "physical moves."); + +static const u8 sWiseGlassesDesc[] = _( + "A pair of glasses\n" + "that ups the power\n" + "of special moves."); + +static const u8 sExpertBeltDesc[] = _( + "A belt that boosts\n" + "the power of super\n" + "effective moves."); + +static const u8 sLightClayDesc[] = _( + "Extends the length\n" + "of barrier moves\n" + "used by the holder."); + +static const u8 sLifeOrbDesc[] = _( + "Boosts the power of\n" + "moves at the cost\n" + "of some HP per turn."); + +static const u8 sPowerHerbDesc[] = _( + "Allows immediate\n" + "use of a move that\n" + "charges first."); + +static const u8 sFocusSashDesc[] = _( + "If the holder has\n" + "full HP, it endures\n" + "KO hits with 1 HP."); + +static const u8 sZoomLensDesc[] = _( + "If the holder moves\n" + "after the foe, it'll\n" + "boost accuracy."); + +static const u8 sMetronomeDesc[] = _( + "A held item that\n" + "boosts a move used\n" + "consecutively."); + +static const u8 sIronBallDesc[] = _( + "Cuts Speed and lets\n" + "Flying-types be hit\n" + "by Ground moves."); + +static const u8 sLaggingTailDesc[] = _( + "A held item that\n" + "makes the holder\n" + "move slower."); + +static const u8 sDestinyKnotDesc[] = _( + "If the holder falls\n" + "in love, the foe\n" + "does too."); + +static const u8 sBlackSludgeDesc[] = _( + "Gradually restores\n" + "HP of Poison-types.\n" + "Damages others."); + +static const u8 sGripClawDesc[] = _( + "Makes binding moves\n" + "used by the holder\n" + "go on for 7 turns."); + +static const u8 sStickyBarbDesc[] = _( + "Damages the holder\n" + "each turn. May latch\n" + "on to foes."); + +static const u8 sShedShellDesc[] = _( + "Enables the holder\n" + "to switch out of\n" + "battle without fail."); + +static const u8 sBigRootDesc[] = _( + "A held item that\n" + "boosts the power of\n" + "HP-stealing moves."); + +static const u8 sRazorClawDesc[] = _( + "A hooked claw that\n" + "ups the holder's\n" + "critical-hit ratio."); + +static const u8 sRazorFangDesc[] = _( + "A hold item that\n" + "may cause flinching\n" + "when the foe is hit."); + +static const u8 sEvioliteDesc[] = _( + "Raises the Def and\n" + "Sp. Def of Pokémon\n" + "that can evolve."); + +static const u8 sFloatStoneDesc[] = _( + "It's so light that\n" + "when held, it halves\n" + "a Pokémon's weight."); + +static const u8 sRockyHelmetDesc[] = _( + "Hurts the foe if\n" + "they touch its\n" + "holder."); + +static const u8 sAirBalloonDesc[] = _( + "Elevates the holder\n" + "in the air. If hit,\n" + "this item will burst."); + +static const u8 sRedCardDesc[] = _( + "Switches out the\n" + "foe if they hit the\n" + "holder."); + +static const u8 sRingTargetDesc[] = _( + "Moves that wouldn't\n" + "have effect will\n" + "land on its holder."); + +static const u8 sBindingBandDesc[] = _( + "Increases the\n" + "power of binding\n" + "moves when held."); + +static const u8 sEjectButtonDesc[] = _( + "Switches out the\n" + "user if they're hit\n" + "by the foe."); + +static const u8 sWeaknessPolicyDesc[] = _( + "If hit by a Super\n" + "Effective move, ups\n" + "Atk and Sp. Atk."); + +static const u8 sAssaultVestDesc[] = _( + "Raises Sp. Def but\n" + "prevents the use\n" + "of status moves."); + +static const u8 sSafetyGogglesDesc[] = _( + "Protect from\n" + "weather damage and\n" + "powder moves."); + +static const u8 sAdrenalineOrbDesc[] = _( + "Boosts Speed if the\n" + "user is intimidated,\n" + "but only one time."); + +static const u8 sTerrainExtenderDesc[] = _( + "Extends the length\n" + "of the active\n" + "battle terrain."); + +static const u8 sProtectivePadsDesc[] = _( + "Guard the holder\n" + "from contact move\n" + "effects."); + +static const u8 sThroatSprayDesc[] = _( + "Raises Sp. Atk. if\n" + "a Pokémon is hit by\n" + "a sound-based move."); + +static const u8 sEjectPackDesc[] = _( + "Forces the user to\n" + "switch if its stats\n" + "are lowered."); + +static const u8 sHeavyDutyBootsDesc[] = _( + "Boots that prevent\n" + "effects of traps\n" + "set in the field."); + +static const u8 sBlunderPolicyDesc[] = _( + "Raises Speed if\n" + "the user misses\n" + "due to Accuracy."); + +static const u8 sRoomServiceDesc[] = _( + "Lowers Speed if\n" + "Trick Room is\n" + "active."); + +static const u8 sUtilityUmbrellaDesc[] = _( + "An umbrella that\n" + "protects from\n" + "weather effects."); // Berries static const u8 sCheriBerryDesc[] = _( @@ -504,7 +2670,7 @@ static const u8 sCheriBerryDesc[] = _( static const u8 sChestoBerryDesc[] = _( "A hold item that\n" - "awakens POKéMON\n" + "awakens Pokémon\n" "in battle."); static const u8 sPechaBerryDesc[] = _( @@ -519,7 +2685,7 @@ static const u8 sRawstBerryDesc[] = _( static const u8 sAspearBerryDesc[] = _( "A hold item that\n" - "defrosts POKéMON\n" + "defrosts Pokémon\n" "in battle."); static const u8 sLeppaBerryDesc[] = _( @@ -543,9 +2709,15 @@ static const u8 sLumBerryDesc[] = _( "problem in battle."); static const u8 sSitrusBerryDesc[] = _( +#if I_SITRUS_BERRY_HEAL >= GEN_4 + "A hold item that\n" + "restores the user's\n" + "HP a little."); +#else "A hold item that\n" "restores 30 HP in\n" "battle."); +#endif static const u8 sFigyBerryDesc[] = _( "A hold item that\n" @@ -575,126 +2747,216 @@ static const u8 sIapapaBerryDesc[] = _( static const u8 sRazzBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow RAZZ."); + "to grow Razz."); static const u8 sBlukBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow BLUK."); + "to grow Bluk."); static const u8 sNanabBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow NANAB."); + "to grow Nanab."); static const u8 sWepearBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow WEPEAR."); + "to grow Wepear."); static const u8 sPinapBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow PINAP."); + "to grow Pinap."); static const u8 sPomegBerryDesc[] = _( - "Makes a POKéMON\n" + "Makes a Pokémon\n" "friendly but lowers\n" "base HP."); static const u8 sKelpsyBerryDesc[] = _( - "Makes a POKéMON\n" + "Makes a Pokémon\n" "friendly but lowers\n" - "base ATTACK."); + "base Attack."); static const u8 sQualotBerryDesc[] = _( - "Makes a POKéMON\n" + "Makes a Pokémon\n" "friendly but lowers\n" - "base DEFENSE."); + "base Defense."); static const u8 sHondewBerryDesc[] = _( - "Makes a POKéMON\n" + "Makes a Pokémon\n" "friendly but lowers\n" - "base SP. ATK."); + "base Sp. Atk."); static const u8 sGrepaBerryDesc[] = _( - "Makes a POKéMON\n" + "Makes a Pokémon\n" "friendly but lowers\n" - "base SP. DEF."); + "base Sp. Def."); static const u8 sTamatoBerryDesc[] = _( - "Makes a POKéMON\n" + "Makes a Pokémon\n" "friendly but lowers\n" - "base SPEED."); + "base Speed."); static const u8 sCornnBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow CORNN."); + "to grow Cornn."); static const u8 sMagostBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow MAGOST."); + "to grow Magost."); static const u8 sRabutaBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow RABUTA."); + "to grow Rabuta."); static const u8 sNomelBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow NOMEL."); + "to grow Nomel."); static const u8 sSpelonBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow SPELON."); + "to grow Spelon."); static const u8 sPamtreBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow PAMTRE."); + "to grow Pamtre."); static const u8 sWatmelBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow WATMEL."); + "to grow Watmel."); static const u8 sDurinBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow DURIN."); + "to grow Durin."); static const u8 sBelueBerryDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" - "to grow BELUE."); + "to grow Belue."); + +static const u8 sChilanBerryDesc[] = _( + "A hold item that\n" + "weakens a Normal\n" + "move."); + +static const u8 sOccaBerryDesc[] = _( + "A hold item that\n" + "weakens a Fire\n" + "move if weak to it."); + +static const u8 sPasshoBerryDesc[] = _( + "A hold item that\n" + "weakens a Water\n" + "move if weak to it."); + +static const u8 sWacanBerryDesc[] = _( + "A hold item that\n" + "weakens a Electric\n" + "move if weak to it."); + +static const u8 sRindoBerryDesc[] = _( + "A hold item that\n" + "weakens a Grass\n" + "move if weak to it."); + +static const u8 sYacheBerryDesc[] = _( + "A hold item that\n" + "weakens a Ice\n" + "move if weak to it."); + +static const u8 sChopleBerryDesc[] = _( + "A hold item that\n" + "weakens a Fighting\n" + "move if weak to it."); + +static const u8 sKebiaBerryDesc[] = _( + "A hold item that\n" + "weakens a Poison\n" + "move if weak to it."); + +static const u8 sShucaBerryDesc[] = _( + "A hold item that\n" + "weakens a Ground\n" + "move if weak to it."); + +static const u8 sCobaBerryDesc[] = _( + "A hold item that\n" + "weakens a Flying\n" + "move if weak to it."); + +static const u8 sPayapaBerryDesc[] = _( + "A hold item that\n" + "weakens a Psychic\n" + "move if weak to it."); + +static const u8 sTangaBerryDesc[] = _( + "A hold item that\n" + "weakens a Bug\n" + "move if weak to it."); + +static const u8 sChartiBerryDesc[] = _( + "A hold item that\n" + "weakens a Rock\n" + "move if weak to it."); + +static const u8 sKasibBerryDesc[] = _( + "A hold item that\n" + "weakens a Ghost\n" + "move if weak to it."); + +static const u8 sHabanBerryDesc[] = _( + "A hold item that\n" + "weakens a Dragon\n" + "move if weak to it."); + +static const u8 sColburBerryDesc[] = _( + "A hold item that\n" + "weakens a Dark\n" + "move if weak to it."); + +static const u8 sBabiriBerryDesc[] = _( + "A hold item that\n" + "weakens a Steel\n" + "move if weak to it."); + +static const u8 sRoseliBerryDesc[] = _( + "A hold item that\n" + "weakens a Fairy\n" + "move if weak to it."); static const u8 sLiechiBerryDesc[] = _( "A hold item that\n" - "raises ATTACK in\n" + "raises Attack in\n" "a pinch."); static const u8 sGanlonBerryDesc[] = _( "A hold item that\n" - "raises DEFENSE in\n" + "raises Defense in\n" "a pinch."); static const u8 sSalacBerryDesc[] = _( "A hold item that\n" - "raises SPEED in\n" + "raises Speed in\n" "a pinch."); static const u8 sPetayaBerryDesc[] = _( "A hold item that\n" - "raises SP. ATK in\n" + "raises Sp. Atk in\n" "a pinch."); static const u8 sApicotBerryDesc[] = _( "A hold item that\n" - "raises SP. DEF in\n" + "raises Sp. Def in\n" "a pinch."); static const u8 sLansatBerryDesc[] = _( @@ -708,414 +2970,45 @@ static const u8 sStarfBerryDesc[] = _( "stat in a pinch."); static const u8 sEnigmaBerryDesc[] = _( + "A hold item that\n" + "heals from super\n" + "effective moves."); + +static const u8 sMicleBerryDesc[] = _( + "When held, it ups\n" + "the Accuracy of a\n" + "move in a pinch."); + +static const u8 sCustapBerryDesc[] = _( + "It allows a Pokémon\n" + "in a pinch to move\n" + "first just once."); + +static const u8 sJabocaBerryDesc[] = _( + "If hit by a physical\n" + "move, it will hurt\n" + "the attacker a bit."); + +static const u8 sRowapBerryDesc[] = _( + "If hit by a special\n" + "move, it will hurt\n" + "the attacker a bit."); + +static const u8 sKeeBerryDesc[] = _( + "If hit by a physical\n" + "move, it raises the\n" + "Defense a bit."); + +static const u8 sMarangaBerryDesc[] = _( + "If hit by a special\n" + "move, it raises the\n" + "Sp. Def. a bit."); + +static const u8 sEnigmaBerryEReaderDesc[] = _( "{POKEBLOCK} ingredient.\n" "Plant in loamy soil\n" "to grow a mystery."); -// Hold items -static const u8 sBrightPowderDesc[] = _( - "A hold item that\n" - "casts a glare to\n" - "reduce accuracy."); - -static const u8 sWhiteHerbDesc[] = _( - "A hold item that\n" - "restores any\n" - "lowered stat."); - -static const u8 sMachoBraceDesc[] = _( - "A hold item that\n" - "promotes growth,\n" - "but reduces SPEED."); - -static const u8 sExpShareDesc[] = _( - "A hold item that\n" - "gets EXP. points\n" - "from battles."); - -static const u8 sQuickClawDesc[] = _( - "A hold item that\n" - "occasionally allows\n" - "the first strike."); - -static const u8 sSootheBellDesc[] = _( - "A hold item that\n" - "calms spirits and\n" - "fosters friendship."); - -static const u8 sMentalHerbDesc[] = _( - "A hold item that\n" - "snaps POKéMON out\n" - "of infatuation."); - -static const u8 sChoiceBandDesc[] = _( - "Raises a move's\n" - "power, but permits\n" - "only that move."); - -static const u8 sKingsRockDesc[] = _( - "A hold item that\n" - "may cause flinching\n" - "when the foe is hit."); - -static const u8 sSilverPowderDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "BUG-type moves."); - -static const u8 sAmuletCoinDesc[] = _( - "Doubles money in\n" - "battle if the\n" - "holder takes part."); - -static const u8 sCleanseTagDesc[] = _( - "A hold item that\n" - "helps repel wild\n" - "POKéMON."); - -static const u8 sSoulDewDesc[] = _( - "Hold item: raises\n" - "SP. ATK & SP. DEF of\n" - "LATIOS & LATIAS."); - -static const u8 sDeepSeaToothDesc[] = _( - "A hold item that\n" - "raises the SP. ATK\n" - "of CLAMPERL."); - -static const u8 sDeepSeaScaleDesc[] = _( - "A hold item that\n" - "raises the SP. DEF\n" - "of CLAMPERL."); - -static const u8 sSmokeBallDesc[] = _( - "A hold item that\n" - "assures fleeing\n" - "from wild POKéMON."); - -static const u8 sEverstoneDesc[] = _( - "A wondrous hold\n" - "item that prevents\n" - "evolution."); - -static const u8 sFocusBandDesc[] = _( - "A hold item that\n" - "occasionally\n" - "prevents fainting."); - -static const u8 sLuckyEggDesc[] = _( - "A hold item that\n" - "boosts EXP. points\n" - "earned in battle."); - -static const u8 sScopeLensDesc[] = _( - "A hold item that\n" - "improves the\n" - "critical-hit rate."); - -static const u8 sMetalCoatDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "STEEL-type moves."); - -static const u8 sLeftoversDesc[] = _( - "A hold item that\n" - "gradually restores\n" - "HP in battle."); - -static const u8 sDragonScaleDesc[] = _( - "A strange scale\n" - "held by DRAGON-\n" - "type POKéMON."); - -static const u8 sLightBallDesc[] = _( - "A hold item that\n" - "raises the SP. ATK\n" - "of PIKACHU."); - -static const u8 sSoftSandDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "GROUND-type moves."); - -static const u8 sHardStoneDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "ROCK-type moves."); - -static const u8 sMiracleSeedDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "GRASS-type moves."); - -static const u8 sBlackGlassesDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "DARK-type moves."); - -static const u8 sBlackBeltDesc[] = _( - "A hold item that\n" - "boosts FIGHTING-\n" - "type moves."); - -static const u8 sMagnetDesc[] = _( - "A hold item that\n" - "boosts ELECTRIC-\n" - "type moves."); - -static const u8 sMysticWaterDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "WATER-type moves."); - -static const u8 sSharpBeakDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "FLYING-type moves."); - -static const u8 sPoisonBarbDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "POISON-type moves."); - -static const u8 sNeverMeltIceDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "ICE-type moves."); - -static const u8 sSpellTagDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "GHOST-type moves."); - -static const u8 sTwistedSpoonDesc[] = _( - "A hold item that\n" - "boosts PSYCHIC-\n" - "type moves."); - -static const u8 sCharcoalDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "FIRE-type moves."); - -static const u8 sDragonFangDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "DRAGON-type moves."); - -static const u8 sSilkScarfDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "NORMAL-type moves."); - -static const u8 sUpGradeDesc[] = _( - "A peculiar box made\n" - "by SILPH CO."); - -static const u8 sShellBellDesc[] = _( - "A hold item that\n" - "restores HP upon\n" - "striking the foe."); - -static const u8 sSeaIncenseDesc[] = _( - "A hold item that\n" - "slightly boosts\n" - "WATER-type moves."); - -static const u8 sLaxIncenseDesc[] = _( - "A hold item that\n" - "slightly lowers the\n" - "foe's accuracy."); - -static const u8 sLuckyPunchDesc[] = _( - "A hold item that\n" - "raises CHANSEY's\n" - "critical-hit rate."); - -static const u8 sMetalPowderDesc[] = _( - "A hold item that\n" - "raises DITTO's\n" - "DEFENSE."); - -static const u8 sThickClubDesc[] = _( - "A hold item that \n" - "raises CUBONE or\n" - "MAROWAK's ATTACK."); - -static const u8 sStickDesc[] = _( - "A hold item that\n" - "raises FARFETCH'D's\n" - "critical-hit ratio."); - -static const u8 sRedScarfDesc[] = _( - "A hold item that\n" - "raises COOL in\n" - "CONTESTS."); - -static const u8 sBlueScarfDesc[] = _( - "A hold item that\n" - "raises BEAUTY in\n" - "CONTESTS."); - -static const u8 sPinkScarfDesc[] = _( - "A hold item that\n" - "raises CUTE in\n" - "CONTESTS."); - -static const u8 sGreenScarfDesc[] = _( - "A hold item that\n" - "raises SMART in\n" - "CONTESTS."); - -static const u8 sYellowScarfDesc[] = _( - "A hold item that\n" - "raises TOUGH in\n" - "CONTESTS."); - -// Key items -static const u8 sMachBikeDesc[] = _( - "A folding bicycle\n" - "that doubles your\n" - "speed or better."); - -static const u8 sCoinCaseDesc[] = _( - "A case that holds\n" - "up to 9,999 COINS."); - -static const u8 sItemfinderDesc[] = _( - "A device that\n" - "signals an invisible\n" - "item by sound."); - -static const u8 sOldRodDesc[] = _( - "Use by any body of\n" - "water to fish for\n" - "wild POKéMON."); - -static const u8 sGoodRodDesc[] = _( - "A decent fishing\n" - "rod for catching\n" - "wild POKéMON."); - -static const u8 sSuperRodDesc[] = _( - "The best fishing\n" - "rod for catching\n" - "wild POKéMON."); - -static const u8 sSSTicketDesc[] = _( - "The ticket required\n" - "for sailing on a\n" - "ferry."); - -static const u8 sContestPassDesc[] = _( - "The pass required\n" - "for entering\n" - "POKéMON CONTESTS."); - -static const u8 sWailmerPailDesc[] = _( - "A tool used for\n" - "watering BERRIES\n" - "and plants."); - -static const u8 sDevonGoodsDesc[] = _( - "A package that\n" - "contains DEVON's\n" - "machine parts."); - -static const u8 sSootSackDesc[] = _( - "A sack used to\n" - "gather and hold\n" - "volcanic ash."); - -static const u8 sBasementKeyDesc[] = _( - "The key for NEW\n" - "MAUVILLE beneath\n" - "MAUVILLE CITY."); - -static const u8 sAcroBikeDesc[] = _( - "A folding bicycle\n" - "capable of jumps\n" - "and wheelies."); - -static const u8 sPokeblockCaseDesc[] = _( - "A case for holding\n" - "{POKEBLOCK}S made with\n" - "a BERRY BLENDER."); - -static const u8 sLetterDesc[] = _( - "A letter to STEVEN\n" - "from the PRESIDENT\n" - "of the DEVON CORP."); - -static const u8 sEonTicketDesc[] = _( - "The ticket for a\n" - "ferry to a distant\n" - "southern island."); - -static const u8 sRedOrbDesc[] = _( - "A red, glowing orb\n" - "said to contain an\n" - "ancient power."); - -static const u8 sBlueOrbDesc[] = _( - "A blue, glowing orb\n" - "said to contain an\n" - "ancient power."); - -static const u8 sScannerDesc[] = _( - "A device found\n" - "inside the\n" - "ABANDONED SHIP."); - -static const u8 sGoGogglesDesc[] = _( - "Nifty goggles that\n" - "protect eyes from\n" - "desert sandstorms."); - -static const u8 sMeteoriteDesc[] = _( - "A meteorite found\n" - "at METEOR FALLS."); - -static const u8 sRoom1KeyDesc[] = _( - "A key that opens a\n" - "door inside the\n" - "ABANDONED SHIP."); - -static const u8 sRoom2KeyDesc[] = _( - "A key that opens a\n" - "door inside the\n" - "ABANDONED SHIP."); - -static const u8 sRoom4KeyDesc[] = _( - "A key that opens a\n" - "door inside the\n" - "ABANDONED SHIP."); - -static const u8 sRoom6KeyDesc[] = _( - "A key that opens a\n" - "door inside the\n" - "ABANDONED SHIP."); - -static const u8 sStorageKeyDesc[] = _( - "The key to the\n" - "storage inside the\n" - "ABANDONED SHIP."); - -static const u8 sRootFossilDesc[] = _( - "A fossil of an\n" - "ancient, seafloor-\n" - "dwelling POKéMON."); - -static const u8 sClawFossilDesc[] = _( - "A fossil of an\n" - "ancient, seafloor-\n" - "dwelling POKéMON."); - -static const u8 sDevonScopeDesc[] = _( - "A device by DEVON\n" - "that signals any\n" - "unseeable POKéMON."); - // TMs/HMs static const u8 sTM01Desc[] = _( "Powerful, but makes\n" @@ -1133,8 +3026,8 @@ static const u8 sTM03Desc[] = _( "that may confuse."); static const u8 sTM04Desc[] = _( - "Raises SP. ATK and\n" - "SP. DEF by focusing\n" + "Raises Sp. Atk and\n" + "Sp. Def by focusing\n" "the mind."); static const u8 sTM05Desc[] = _( @@ -1150,12 +3043,12 @@ static const u8 sTM06Desc[] = _( static const u8 sTM07Desc[] = _( "Creates a hailstorm\n" "that damages all\n" - "types except ICE."); + "types except Ice."); static const u8 sTM08Desc[] = _( "Bulks up the body\n" "to boost both\n" - "ATTACK & DEFENSE."); + "Attack & Defense."); static const u8 sTM09Desc[] = _( "Shoots 2 to 5 seeds\n" @@ -1165,11 +3058,11 @@ static const u8 sTM09Desc[] = _( static const u8 sTM10Desc[] = _( "The attack power\n" "varies among\n" - "different POKéMON."); + "different Pokémon."); static const u8 sTM11Desc[] = _( "Raises the power of\n" - "FIRE-type moves\n" + "Fire-type moves\n" "for 5 turns."); static const u8 sTM12Desc[] = _( @@ -1195,7 +3088,7 @@ static const u8 sTM15Desc[] = _( static const u8 sTM16Desc[] = _( "Creates a wall of\n" "light that lowers\n" - "SP. ATK damage."); + "Sp. Atk damage."); static const u8 sTM17Desc[] = _( "Negates all damage,\n" @@ -1204,7 +3097,7 @@ static const u8 sTM17Desc[] = _( static const u8 sTM18Desc[] = _( "Raises the power of\n" - "WATER-type moves\n" + "Water-type moves\n" "for 5 turns."); static const u8 sTM19Desc[] = _( @@ -1230,7 +3123,7 @@ static const u8 sTM22Desc[] = _( static const u8 sTM23Desc[] = _( "Slams the foe with\n" "a hard tail. It may\n" - "lower DEFENSE."); + "lower Defense."); static const u8 sTM24Desc[] = _( "A powerful electric\n" @@ -1260,16 +3153,16 @@ static const u8 sTM28Desc[] = _( static const u8 sTM29Desc[] = _( "A powerful psychic\n" "attack that may\n" - "lower SP. DEF."); + "lower Sp. Def."); static const u8 sTM30Desc[] = _( "Hurls a dark lump\n" "at the foe. It may\n" - "lower SP. DEF."); + "lower Sp. Def."); static const u8 sTM31Desc[] = _( "Destroys barriers\n" - "like LIGHT SCREEN\n" + "like Light Screen\n" "and causes damage."); static const u8 sTM32Desc[] = _( @@ -1310,7 +3203,7 @@ static const u8 sTM38Desc[] = _( static const u8 sTM39Desc[] = _( "Stops the foe from\n" "moving with rocks.\n" - "May lower SPEED."); + "May lower Speed."); static const u8 sTM40Desc[] = _( "An extremely fast\n" @@ -1323,7 +3216,7 @@ static const u8 sTM41Desc[] = _( "move in a row."); static const u8 sTM42Desc[] = _( - "Raises ATTACK when\n" + "Raises Attack when\n" "poisoned, burned,\n" "or paralyzed."); @@ -1365,8 +3258,157 @@ static const u8 sTM49Desc[] = _( static const u8 sTM50Desc[] = _( "Enables full-power\n" "attack, but sharply\n" - "lowers SP. ATK."); + "lowers Sp. Atk."); +static const u8 sTM51Desc[] = _( // Todo + "?????"); + +static const u8 sTM52Desc[] = _( // Todo + "?????"); + +static const u8 sTM53Desc[] = _( // Todo + "?????"); + +static const u8 sTM54Desc[] = _( // Todo + "?????"); + +static const u8 sTM55Desc[] = _( // Todo + "?????"); + +static const u8 sTM56Desc[] = _( // Todo + "?????"); + +static const u8 sTM57Desc[] = _( // Todo + "?????"); + +static const u8 sTM58Desc[] = _( // Todo + "?????"); + +static const u8 sTM59Desc[] = _( // Todo + "?????"); + +static const u8 sTM60Desc[] = _( // Todo + "?????"); + +static const u8 sTM61Desc[] = _( // Todo + "?????"); + +static const u8 sTM62Desc[] = _( // Todo + "?????"); + +static const u8 sTM63Desc[] = _( // Todo + "?????"); + +static const u8 sTM64Desc[] = _( // Todo + "?????"); + +static const u8 sTM65Desc[] = _( // Todo + "?????"); + +static const u8 sTM66Desc[] = _( // Todo + "?????"); + +static const u8 sTM67Desc[] = _( // Todo + "?????"); + +static const u8 sTM68Desc[] = _( // Todo + "?????"); + +static const u8 sTM69Desc[] = _( // Todo + "?????"); + +static const u8 sTM70Desc[] = _( // Todo + "?????"); + +static const u8 sTM71Desc[] = _( // Todo + "?????"); + +static const u8 sTM72Desc[] = _( // Todo + "?????"); + +static const u8 sTM73Desc[] = _( // Todo + "?????"); + +static const u8 sTM74Desc[] = _( // Todo + "?????"); + +static const u8 sTM75Desc[] = _( // Todo + "?????"); + +static const u8 sTM76Desc[] = _( // Todo + "?????"); + +static const u8 sTM77Desc[] = _( // Todo + "?????"); + +static const u8 sTM78Desc[] = _( // Todo + "?????"); + +static const u8 sTM79Desc[] = _( // Todo + "?????"); + +static const u8 sTM80Desc[] = _( // Todo + "?????"); + +static const u8 sTM81Desc[] = _( // Todo + "?????"); + +static const u8 sTM82Desc[] = _( // Todo + "?????"); + +static const u8 sTM83Desc[] = _( // Todo + "?????"); + +static const u8 sTM84Desc[] = _( // Todo + "?????"); + +static const u8 sTM85Desc[] = _( // Todo + "?????"); + +static const u8 sTM86Desc[] = _( // Todo + "?????"); + +static const u8 sTM87Desc[] = _( // Todo + "?????"); + +static const u8 sTM88Desc[] = _( // Todo + "?????"); + +static const u8 sTM89Desc[] = _( // Todo + "?????"); + +static const u8 sTM90Desc[] = _( // Todo + "?????"); + +static const u8 sTM91Desc[] = _( // Todo + "?????"); + +static const u8 sTM92Desc[] = _( // Todo + "?????"); + +static const u8 sTM93Desc[] = _( // Todo + "?????"); + +static const u8 sTM94Desc[] = _( // Todo + "?????"); + +static const u8 sTM95Desc[] = _( // Todo + "?????"); + +static const u8 sTM96Desc[] = _( // Todo + "?????"); + +static const u8 sTM97Desc[] = _( // Todo + "?????"); + +static const u8 sTM98Desc[] = _( // Todo + "?????"); + +static const u8 sTM99Desc[] = _( // Todo + "?????"); + +static const u8 sTM100Desc[] = _( // Todo + "?????"); static const u8 sHM01Desc[] = _( "Attacks the foe\n" @@ -1396,7 +3438,7 @@ static const u8 sHM05Desc[] = _( static const u8 sHM06Desc[] = _( "A rock-crushingly\n" "tough attack that\n" - "may lower DEFENSE."); + "may lower Defense."); static const u8 sHM07Desc[] = _( "Attacks the foe\n" @@ -1408,81 +3450,134 @@ static const u8 sHM08Desc[] = _( "the 1st turn, then\n" "attacks next turn."); -// FireRed/LeafGreen key items -static const u8 sOaksParcelDesc[] = _( - "A parcel for PROF.\n" - "OAK from a POKéMON\n" - "MART's clerk."); +// Charms +static const u8 sOvalCharmDesc[] = _( + "Raises the chance\n" + "of finding eggs\n" + "at the daycare."); -static const u8 sPokeFluteDesc[] = _( - "A sweet-sounding\n" - "flute that awakens\n" - "POKéMON."); +static const u8 sShinyCharmDesc[] = _( + "A charm that will\n" + "raise the chance\n" + "of Shiny Pokémon."); -static const u8 sSecretKeyDesc[] = _( - "The key to the\n" - "CINNABAR ISLAND\n" - "GYM's entrance."); +static const u8 sCatchingCharmDesc[] = _( + "A charm that raises\n" + "the chance of\n" + "Critical Captures."); -static const u8 sBikeVoucherDesc[] = _( - "A voucher for\n" - "obtaining a bicycle\n" - "from the BIKE SHOP."); +static const u8 sExpCharmDesc[] = _( + "A charm that raises\n" + "the amount of Exp.\n" + "earned in battle."); -static const u8 sGoldTeethDesc[] = _( - "Gold dentures lost\n" - "by the SAFARI\n" - "ZONE's WARDEN."); +// Form-changing Key Items +static const u8 sRotomCatalogDesc[] = _( + "A catalog full of\n" + "deviced liked by\n" + "Rotom."); -static const u8 sOldAmberDesc[] = _( - "A stone containing\n" - "the genes of an\n" - "ancient POKéMON."); +static const u8 sGracideaDesc[] = _( + "Bouquets made with\n" + "it are offered as a\n" + "token of gratitude."); -static const u8 sCardKeyDesc[] = _( - "A card-type door\n" - "key used in SILPH\n" - "CO's office."); +static const u8 sRevealGlassDesc[] = _( + "This glass returns\n" + "a Pokémon back to\n" + "its original form."); -static const u8 sLiftKeyDesc[] = _( - "An elevator key\n" - "used in TEAM\n" - "ROCKET's HIDEOUT."); +static const u8 sDNASplicersDesc[] = _( + "Splicer that fuses\n" + "Kyurem and a\n" + "certain Pokémon."); -static const u8 sHelixFossilDesc[] = _( - "A piece of an\n" - "ancient marine\n" - "POKéMON's seashell."); +static const u8 sZygardeCubeDesc[] = _( + "An item to store\n" + "Zygarde Cores and\n" + "Cells."); -static const u8 sDomeFossilDesc[] = _( - "A piece of an\n" - "ancient marine\n" - "POKéMON's shell."); +static const u8 sPrisonBottleDesc[] = _( + "A bottle used to\n" + "seal a certain\n" + "Pokémon long ago."); -static const u8 sSilphScopeDesc[] = _( - "SILPH CO's scope\n" - "makes unseeable\n" - "POKéMON visible."); +static const u8 sNSolarizerDesc[] = _( + "A device to fuse\n" + "and split Necrozma\n" + "using a Solgaleo."); +static const u8 sNLunarizerDesc[] = _( + "A device to fuse\n" + "and split Necrozma\n" + "using a Lunala."); + +static const u8 sReinsOfUnityDesc[] = _( + "Reins that unite\n" + "Calyrex with its\n" + "beloved steed."); + +// Battle Mechanic Key Items +static const u8 sMegaRingDesc[] = _( + "Enables {PKMN} holding\n" + "their Mega Stone to\n" + "Mega Evolve."); + +static const u8 sZPowerRingDesc[] = _( + "A strange ring\n" + "that enables\n" + "Z-Move usage."); + +static const u8 sDynamaxBandDesc[] = _( + "A band carrying a\n" + "Wishing Star that\n" + "allows Dynamaxing."); + +// Misc. Key Items static const u8 sBicycleDesc[] = _( "A folding bicycle\n" "that is faster than\n" - "the RUNNING SHOES."); + "the Running Shoes."); + +static const u8 sMachBikeDesc[] = _( + "A folding bicycle\n" + "that doubles your\n" + "speed or better."); + +static const u8 sAcroBikeDesc[] = _( + "A folding bicycle\n" + "capable of jumps\n" + "and wheelies."); + +static const u8 sOldRodDesc[] = _( + "Use by any body of\n" + "water to fish for\n" + "wild Pokémon."); + +static const u8 sGoodRodDesc[] = _( + "A decent fishing\n" + "rod for catching\n" + "wild Pokémon."); + +static const u8 sSuperRodDesc[] = _( + "The best fishing\n" + "rod for catching\n" + "wild Pokémon."); + +static const u8 sDowsingMachineDesc[] = _( + "A device that\n" + "signals an invisible\n" + "item by sound."); static const u8 sTownMapDesc[] = _( "Can be viewed\n" "anytime. Shows your\n" "present location."); -static const u8 sVSSeekerDesc[] = _( +static const u8 sVsSeekerDesc[] = _( "A rechargeable unit\n" "that flags battle-\n" - "ready TRAINERS."); - -static const u8 sFameCheckerDesc[] = _( - "Stores information\n" - "on famous people\n" - "for instant recall."); + "ready Trainers."); static const u8 sTMCaseDesc[] = _( "A convenient case \n" @@ -1492,43 +3587,202 @@ static const u8 sTMCaseDesc[] = _( static const u8 sBerryPouchDesc[] = _( "A convenient\n" "container that\n" - "holds BERRIES."); + "holds Berries."); + +static const u8 sPokemonBoxLinkDesc[] = _( + "This device grants\n" + "access to the {PKMN}\n" + "Storage System."); + +static const u8 sCoinCaseDesc[] = _( + "A case that holds\n" + "up to 9,999 Coins."); + +static const u8 sPowderJarDesc[] = _( + "Stores Berry\n" + "Powder made using\n" + "a Berry Crusher."); + +static const u8 sWailmerPailDesc[] = _( + "A tool used for\n" + "watering Berries\n" + "and plants."); + +static const u8 sPokeRadarDesc[] = _( + "A tool used to\n" + "search out Pokémon\n" + "hiding in grass."); + +static const u8 sPokeblockCaseDesc[] = _( + "A case for holding\n" + "{POKEBLOCK}s made with\n" + "a Berry Blender."); + +static const u8 sSootSackDesc[] = _( + "A sack used to\n" + "gather and hold\n" + "volcanic ash."); + +static const u8 sPokeFluteDesc[] = _( + "A sweet-sounding\n" + "flute that awakens\n" + "Pokémon."); + +static const u8 sFameCheckerDesc[] = _( + "Stores information\n" + "on famous people\n" + "for instant recall."); static const u8 sTeachyTVDesc[] = _( "A TV set tuned to\n" "an advice program\n" - "for TRAINERS."); + "for Trainers."); + +// Story Key Items +static const u8 sSSTicketDesc[] = _( + "The ticket required\n" + "for sailing on a\n" + "ferry."); + +static const u8 sEonTicketDesc[] = _( + "The ticket for a\n" + "ferry to a distant\n" + "southern island."); + +static const u8 sMysticTicketDesc[] = _( + "A ticket required\n" + "to board the ship\n" + "to Navel Rock."); + +static const u8 sAuroraTicketDesc[] = _( + "A ticket required\n" + "to board the ship\n" + "to Birth Island."); + +static const u8 sOldSeaMapDesc[] = _( + "A faded sea chart\n" + "that shows the way\n" + "to a certain island."); + +static const u8 sLetterDesc[] = _( + "A letter to Steven\n" + "from the President\n" + "of the Devon Corp."); + +static const u8 sDevonPartsDesc[] = _( + "A package that\n" + "contains Devon's\n" + "machine parts."); + +static const u8 sGoGogglesDesc[] = _( + "Nifty goggles that\n" + "protect eyes from\n" + "desert sandstorms."); + +static const u8 sDevonScopeDesc[] = _( + "A device by Devon\n" + "that signals any\n" + "unseeable Pokémon."); + +static const u8 sBasementKeyDesc[] = _( + "The key for New\n" + "Mauville beneath\n" + "Mauville City."); + +static const u8 sScannerDesc[] = _( + "A device found\n" + "inside the\n" + "Abandoned Ship."); + +static const u8 sStorageKeyDesc[] = _( + "The key to the\n" + "storage inside the\n" + "Abandoned Ship."); + +static const u8 sKeyToRoom1Desc[] = _( + "A key that opens a\n" + "door inside the\n" + "Abandoned Ship."); + +static const u8 sKeyToRoom2Desc[] = _( + "A key that opens a\n" + "door inside the\n" + "Abandoned Ship."); + +static const u8 sKeyToRoom4Desc[] = _( + "A key that opens a\n" + "door inside the\n" + "Abandoned Ship."); + +static const u8 sKeyToRoom6Desc[] = _( + "A key that opens a\n" + "door inside the\n" + "Abandoned Ship."); + +static const u8 sMeteoriteDesc[] = _( + "A meteorite found\n" + "at Meteor Falls."); + +static const u8 sMagmaEmblemDesc[] = _( + "A medal-like item in\n" + "the same shape as\n" + "Team Magma's mark."); + +static const u8 sContestPassDesc[] = _( + "The pass required\n" + "for entering\n" + "Pokémon Contests."); + +static const u8 sOaksParcelDesc[] = _( + "A parcel for Prof.\n" + "Oak from a Pokémon\n" + "Mart's clerk."); + +static const u8 sSecretKeyDesc[] = _( + "The key to the\n" + "Cinnabar Island\n" + "Gym's entrance."); + +static const u8 sBikeVoucherDesc[] = _( + "A voucher for\n" + "obtaining a bicycle\n" + "from the Bike Shop."); + +static const u8 sGoldTeethDesc[] = _( + "Gold dentures lost\n" + "by the Safari\n" + "Zone's Warden."); + +static const u8 sCardKeyDesc[] = _( + "A card-type door\n" + "key used in Silph\n" + "Co's office."); + +static const u8 sLiftKeyDesc[] = _( + "An elevator key\n" + "used in Team\n" + "Rocket's Hideout."); + +static const u8 sSilphScopeDesc[] = _( + "Silph Co's scope\n" + "makes unseeable\n" + "POKéMON visible."); static const u8 sTriPassDesc[] = _( "A pass for ferries\n" - "between ONE, TWO,\n" - "and THREE ISLAND."); + "between One, Two,\n" + "and Three Island."); static const u8 sRainbowPassDesc[] = _( "For ferries serving\n" - "VERMILION and the\n" - "SEVII ISLANDS."); + "Vermilion and the\n" + "Sevii Islands."); static const u8 sTeaDesc[] = _( "A thirst-quenching\n" "tea prepared by an\n" "old lady."); -static const u8 sMysticTicketDesc[] = _( - "A ticket required\n" - "to board the ship\n" - "to NAVEL ROCK."); - -static const u8 sAuroraTicketDesc[] = _( - "A ticket required\n" - "to board the ship\n" - "to BIRTH ISLAND."); - -static const u8 sPowderJarDesc[] = _( - "Stores BERRY\n" - "POWDER made using\n" - "a BERRY CRUSHER."); - static const u8 sRubyDesc[] = _( "An exquisite, red-\n" "glowing gem that\n" @@ -1538,14 +3792,3 @@ static const u8 sSapphireDesc[] = _( "A brilliant blue gem\n" "that symbolizes\n" "honesty."); - -// Emerald-specific key items -static const u8 sMagmaEmblemDesc[] = _( - "A medal-like item in\n" - "the same shape as\n" - "TEAM MAGMA's mark."); - -static const u8 sOldSeaMapDesc[] = _( - "A faded sea chart\n" - "that shows the way\n" - "to a certain island."); diff --git a/src/data/text/match_call_messages.h b/src/data/text/match_call_messages.h index 6ea3b549f0..22790c5fb5 100644 --- a/src/data/text/match_call_messages.h +++ b/src/data/text/match_call_messages.h @@ -388,7 +388,7 @@ const u8 gText_MatchCallChampion_Wallace_Pokemon[] = _("I prefer POKéMON of gra const u8 gText_MatchCallChampion_Wallace_Intro1[] = _("I represent beauty as"); const u8 gText_MatchCallChampion_Wallace_Intro2[] = _("well as intelligence."); -const u8 *const gMatchCallFlavorTexts[REMATCH_TABLE_ENTRIES][CHECK_PAGE_ENTRY_COUNT] = +const u8 *const gMatchCallFlavorTexts[REMATCH_TABLE_ENTRIES][CHECK_PAGE_ENTRY_COUNT] = { [REMATCH_ROSE] = MCFLAVOR(AromaLady_Rose), [REMATCH_ANDRES] = MCFLAVOR(RuinManiac_Andres), @@ -454,7 +454,7 @@ const u8 *const gMatchCallFlavorTexts[REMATCH_TABLE_ENTRIES][CHECK_PAGE_ENTRY_CO [REMATCH_TRENT] = MCFLAVOR(Hiker_Trent), [REMATCH_SAWYER] = MCFLAVOR(Hiker_Sawyer), [REMATCH_KIRA_AND_DAN] = MCFLAVOR(YoungCouple_LoisAndHal), - [REMATCH_WALLY_3] = MCFLAVOR(PkmnTrainer_Wally), + [REMATCH_WALLY_VR] = MCFLAVOR(PkmnTrainer_Wally), [REMATCH_ROXANNE] = MCFLAVOR(RockinWhiz_Roxanne), [REMATCH_BRAWLY] = MCFLAVOR(TheBigHit_Brawly), [REMATCH_WATTSON] = MCFLAVOR(SwellShock_Wattson), diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h index e3c548e2d3..06c50f36d4 100644 --- a/src/data/text/move_descriptions.h +++ b/src/data/text/move_descriptions.h @@ -55,7 +55,7 @@ static const u8 sRazorWindDescription[] = _( static const u8 sSwordsDanceDescription[] = _( "A fighting dance that\n" - "sharply raises ATTACK."); + "sharply raises Attack."); static const u8 sCutDescription[] = _( "Cuts the foe with sharp\n" @@ -79,7 +79,11 @@ static const u8 sFlyDescription[] = _( static const u8 sBindDescription[] = _( "Binds and squeezes the foe\n" +#if B_BINDING_TURNS >= GEN_5 + "for 4 or 5 turns."); +#else "for 2 to 5 turns."); +#endif static const u8 sSlamDescription[] = _( "Slams the foe with a long\n" @@ -139,7 +143,11 @@ static const u8 sBodySlamDescription[] = _( static const u8 sWrapDescription[] = _( "Wraps and squeezes the foe\n" +#if B_BINDING_TURNS >= GEN_5 + "4 or 5 times with vines, etc."); +#else "2 to 5 times with vines, etc."); +#endif static const u8 sTakeDownDescription[] = _( "A reckless charge attack\n" @@ -155,7 +163,7 @@ static const u8 sDoubleEdgeDescription[] = _( static const u8 sTailWhipDescription[] = _( "Wags the tail to lower the\n" - "foe's DEFENSE."); + "foe's Defense."); static const u8 sPoisonStingDescription[] = _( "A toxic attack with barbs,\n" @@ -171,7 +179,7 @@ static const u8 sPinMissileDescription[] = _( static const u8 sLeerDescription[] = _( "Frightens the foe with a\n" - "leer to lower DEFENSE."); + "leer to lower Defense."); static const u8 sBiteDescription[] = _( "Bites with vicious fangs.\n" @@ -179,7 +187,7 @@ static const u8 sBiteDescription[] = _( static const u8 sGrowlDescription[] = _( "Growls cutely to reduce the\n" - "foe's ATTACK."); + "foe's Attack."); static const u8 sRoarDescription[] = _( "Makes the foe flee to end\n" @@ -203,7 +211,7 @@ static const u8 sDisableDescription[] = _( static const u8 sAcidDescription[] = _( "Sprays a hide-melting acid.\n" - "May lower DEFENSE."); + "May lower Defense."); static const u8 sEmberDescription[] = _( "A weak fire attack that may\n" @@ -243,11 +251,11 @@ static const u8 sPsybeamDescription[] = _( static const u8 sBubbleBeamDescription[] = _( "Forcefully sprays bubbles\n" - "that may lower SPEED."); + "that may lower Speed."); static const u8 sAuroraBeamDescription[] = _( "Fires a rainbow-colored\n" - "beam that may lower ATTACK."); + "beam that may lower Attack."); static const u8 sHyperBeamDescription[] = _( "Powerful, but leaves the\n" @@ -295,7 +303,7 @@ static const u8 sLeechSeedDescription[] = _( static const u8 sGrowthDescription[] = _( "Forces the body to grow\n" - "and heightens SP. ATK."); + "and heightens Sp. Atk."); static const u8 sRazorLeafDescription[] = _( "Cuts the enemy with leaves.\n" @@ -323,7 +331,7 @@ static const u8 sPetalDanceDescription[] = _( static const u8 sStringShotDescription[] = _( "Binds the foe with string\n" - "to reduce its SPEED."); + "to reduce its Speed."); static const u8 sDragonRageDescription[] = _( "Launches shock waves that\n" @@ -331,7 +339,11 @@ static const u8 sDragonRageDescription[] = _( static const u8 sFireSpinDescription[] = _( "Traps the foe in a ring of\n" +#if B_BINDING_TURNS >= GEN_5 + "fire for 4 or 5 turns."); +#else "fire for 2 to 5 turns."); +#endif static const u8 sThunderShockDescription[] = _( "An electrical attack that\n" @@ -375,7 +387,7 @@ static const u8 sConfusionDescription[] = _( static const u8 sPsychicDescription[] = _( "A powerful psychic attack\n" - "that may lower SP. DEF."); + "that may lower Sp. Def."); static const u8 sHypnosisDescription[] = _( "A hypnotizing move that\n" @@ -383,18 +395,18 @@ static const u8 sHypnosisDescription[] = _( static const u8 sMeditateDescription[] = _( "Meditates in a peaceful\n" - "fashion to raise ATTACK."); + "fashion to raise Attack."); static const u8 sAgilityDescription[] = _( "Relaxes the body to sharply\n" - "boost SPEED."); + "boost Speed."); static const u8 sQuickAttackDescription[] = _( "An extremely fast attack\n" "that always strikes first."); static const u8 sRageDescription[] = _( - "Raises the user's ATTACK\n" + "Raises the user's Attack\n" "every time it is hit."); static const u8 sTeleportDescription[] = _( @@ -411,7 +423,7 @@ static const u8 sMimicDescription[] = _( static const u8 sScreechDescription[] = _( "Emits a screech to sharply\n" - "reduce the foe's DEFENSE."); + "reduce the foe's Defense."); static const u8 sDoubleTeamDescription[] = _( "Creates illusory copies to\n" @@ -423,7 +435,7 @@ static const u8 sRecoverDescription[] = _( static const u8 sHardenDescription[] = _( "Stiffens the body's \n" - "muscles to raise DEFENSE."); + "muscles to raise Defense."); static const u8 sMinimizeDescription[] = _( "Minimizes the user's size\n" @@ -439,19 +451,19 @@ static const u8 sConfuseRayDescription[] = _( static const u8 sWithdrawDescription[] = _( "Withdraws the body into its\n" - "hard shell to raise DEFENSE."); + "hard shell to raise Defense."); static const u8 sDefenseCurlDescription[] = _( "Curls up to conceal weak\n" - "spots and raise DEFENSE."); + "spots and raise Defense."); static const u8 sBarrierDescription[] = _( "Creates a barrier that\n" - "sharply raises DEFENSE."); + "sharply raises Defense."); static const u8 sLightScreenDescription[] = _( "Creates a wall of light that\n" - "lowers SP. ATK damage."); + "lowers Sp. Atk damage."); static const u8 sHazeDescription[] = _( "Creates a black haze that\n" @@ -471,7 +483,7 @@ static const u8 sBideDescription[] = _( static const u8 sMetronomeDescription[] = _( "Waggles a finger to use any\n" - "POKéMON move at random."); + "Pokémon move at random."); static const u8 sMirrorMoveDescription[] = _( "Counters the foe's attack\n" @@ -511,7 +523,11 @@ static const u8 sWaterfallDescription[] = _( static const u8 sClampDescription[] = _( "Traps and squeezes the\n" +#if B_BINDING_TURNS >= GEN_5 + "foe for 4 or 5 turns."); +#else "foe for 2 to 5 turns."); +#endif static const u8 sSwiftDescription[] = _( "Sprays star-shaped rays\n" @@ -527,11 +543,11 @@ static const u8 sSpikeCannonDescription[] = _( static const u8 sConstrictDescription[] = _( "Constricts to inflict pain.\n" - "May lower SPEED."); + "May lower Speed."); static const u8 sAmnesiaDescription[] = _( "Forgets about something\n" - "and sharply raises SP. DEF."); + "and sharply raises Sp. Def."); static const u8 sKinesisDescription[] = _( "Distracts the foe.\n" @@ -579,7 +595,7 @@ static const u8 sTransformDescription[] = _( static const u8 sBubbleDescription[] = _( "An attack using bubbles.\n" - "May lower the foe's SPEED."); + "May lower the foe's Speed."); static const u8 sDizzyPunchDescription[] = _( "A rhythmic punch that may\n" @@ -603,7 +619,7 @@ static const u8 sSplashDescription[] = _( static const u8 sAcidArmorDescription[] = _( "Liquifies the user's body\n" - "to sharply raise DEFENSE."); + "to sharply raise Defense."); static const u8 sCrabhammerDescription[] = _( "Hammers with a pincer. Has a\n" @@ -635,7 +651,7 @@ static const u8 sHyperFangDescription[] = _( static const u8 sSharpenDescription[] = _( "Reduces the polygon count\n" - "and raises ATTACK."); + "and raises Attack."); static const u8 sConversionDescription[] = _( "Changes the user's type\n" @@ -711,7 +727,7 @@ static const u8 sAeroblastDescription[] = _( static const u8 sCottonSporeDescription[] = _( "Spores cling to the foe,\n" - "sharply reducing SPEED."); + "sharply reducing Speed."); static const u8 sReversalDescription[] = _( "Inflicts more damage when\n" @@ -735,7 +751,7 @@ static const u8 sMachPunchDescription[] = _( static const u8 sScaryFaceDescription[] = _( "Frightens with a scary face\n" - "to sharply reduce SPEED."); + "to sharply reduce Speed."); static const u8 sFeintAttackDescription[] = _( "Draws the foe close, then\n" @@ -746,7 +762,7 @@ static const u8 sSweetKissDescription[] = _( "look. May cause confusion."); static const u8 sBellyDrumDescription[] = _( - "Maximizes ATTACK while\n" + "Maximizes Attack while\n" "sacrificing HP."); static const u8 sSludgeBombDescription[] = _( @@ -778,12 +794,12 @@ static const u8 sDestinyBondDescription[] = _( "is also made to faint."); static const u8 sPerishSongDescription[] = _( - "Any POKéMON hearing this\n" + "Any Pokémon hearing this\n" "song faints in 3 turns."); static const u8 sIcyWindDescription[] = _( "A chilling attack that\n" - "lowers the foe's SPEED."); + "lowers the foe's Speed."); static const u8 sDetectDescription[] = _( "Evades attack, but may fail\n" @@ -815,7 +831,7 @@ static const u8 sEndureDescription[] = _( static const u8 sCharmDescription[] = _( "Charms the foe and sharply\n" - "reduces its ATTACK."); + "reduces its Attack."); static const u8 sRolloutDescription[] = _( "An attack lasting 5 turns\n" @@ -827,7 +843,7 @@ static const u8 sFalseSwipeDescription[] = _( static const u8 sSwaggerDescription[] = _( "Confuses the foe, but also\n" - "sharply raises ATTACK."); + "sharply raises Attack."); static const u8 sMilkDrinkDescription[] = _( "Recovers up to half the\n" @@ -871,7 +887,7 @@ static const u8 sPresentDescription[] = _( static const u8 sFrustrationDescription[] = _( "An attack that is stronger\n" - "if the TRAINER is disliked."); + "if the Trainer is disliked."); static const u8 sSafeguardDescription[] = _( "A mystical force prevents\n" @@ -923,11 +939,11 @@ static const u8 sSweetScentDescription[] = _( static const u8 sIronTailDescription[] = _( "Attacks with a rock-hard\n" - "tail. May lower DEFENSE."); + "tail. May lower Defense."); static const u8 sMetalClawDescription[] = _( "A claw attack that may\n" - "raise the user's ATTACK."); + "raise the user's Attack."); static const u8 sVitalThrowDescription[] = _( "Makes the user's move last,\n" @@ -958,16 +974,16 @@ static const u8 sTwisterDescription[] = _( "to tear at the foe."); static const u8 sRainDanceDescription[] = _( - "Boosts the power of WATER-\n" + "Boosts the power of Water-\n" "type moves for 5 turns."); static const u8 sSunnyDayDescription[] = _( - "Boosts the power of FIRE-\n" + "Boosts the power of Fire-\n" "type moves for 5 turns."); static const u8 sCrunchDescription[] = _( "Crunches with sharp fangs.\n" - "May lower SP. DEF."); + "May lower Defense."); static const u8 sMirrorCoatDescription[] = _( "Counters the foe's special\n" @@ -987,7 +1003,7 @@ static const u8 sAncientPowerDescription[] = _( static const u8 sShadowBallDescription[] = _( "Hurls a black blob that may\n" - "lower the foe's SP. DEF."); + "lower the foe's Sp. Def."); static const u8 sFutureSightDescription[] = _( "Heightens inner power to\n" @@ -995,14 +1011,18 @@ static const u8 sFutureSightDescription[] = _( static const u8 sRockSmashDescription[] = _( "A rock-crushing attack\n" - "that may lower DEFENSE."); + "that may lower Defense."); static const u8 sWhirlpoolDescription[] = _( "Traps and hurts the foe in\n" +#if B_BINDING_TURNS >= GEN_5 + "a whirlpool for 4 or 5 turns."); +#else "a whirlpool for 2 to 5 turns."); +#endif static const u8 sBeatUpDescription[] = _( - "Summons party POKéMON to\n" + "Summons party Pokémon to\n" "join in the attack."); static const u8 sFakeOutDescription[] = _( @@ -1039,7 +1059,7 @@ static const u8 sTormentDescription[] = _( static const u8 sFlatterDescription[] = _( "Confuses the foe, but\n" - "raises its SP. ATK."); + "raises its Sp. Atk."); static const u8 sWillOWispDescription[] = _( "Inflicts a burn on the foe\n" @@ -1050,7 +1070,7 @@ static const u8 sMementoDescription[] = _( "the foe's abilities."); static const u8 sFacadeDescription[] = _( - "Boosts ATTACK when burned,\n" + "Boosts Attack when burned,\n" "paralyzed, or poisoned."); static const u8 sFocusPunchDescription[] = _( @@ -1170,27 +1190,27 @@ static const u8 sArmThrustDescription[] = _( "strike the foe 2 to 5 times."); static const u8 sCamouflageDescription[] = _( - "Alters the POKéMON's type\n" + "Alters the Pokémon's type\n" "depending on the location."); static const u8 sTailGlowDescription[] = _( "Flashes a light that sharply\n" - "raises SP. ATK."); + "raises Sp. Atk."); static const u8 sLusterPurgeDescription[] = _( "Attacks with a burst of\n" - "light. May lower SP. DEF."); + "light. May lower Sp. Def."); static const u8 sMistBallDescription[] = _( "Attacks with a flurry of\n" - "down. May lower SP. ATK."); + "down. May lower Sp. Atk."); static const u8 sFeatherDanceDescription[] = _( "Envelops the foe with down\n" - "to sharply reduce ATTACK."); + "to sharply reduce Attack."); static const u8 sTeeterDanceDescription[] = _( - "Confuses all POKéMON on\n" + "Confuses all Pokémon on\n" "the scene."); static const u8 sBlazeKickDescription[] = _( @@ -1223,7 +1243,7 @@ static const u8 sPoisonFangDescription[] = _( static const u8 sCrushClawDescription[] = _( "Tears at the foe with sharp\n" - "claws. May lower DEFENSE."); + "claws. May lower Defense."); static const u8 sBlastBurnDescription[] = _( "Powerful, but leaves the\n" @@ -1235,7 +1255,7 @@ static const u8 sHydroCannonDescription[] = _( static const u8 sMeteorMashDescription[] = _( "Fires a meteor-like punch.\n" - "May raise ATTACK."); + "May raise Attack."); static const u8 sAstonishDescription[] = _( "An attack that may shock\n" @@ -1251,7 +1271,7 @@ static const u8 sAromatherapyDescription[] = _( static const u8 sFakeTearsDescription[] = _( "Feigns crying to sharply\n" - "lower the foe's SP. DEF."); + "lower the foe's Sp. Def."); static const u8 sAirCutterDescription[] = _( "Hacks with razorlike wind.\n" @@ -1259,7 +1279,7 @@ static const u8 sAirCutterDescription[] = _( static const u8 sOverheatDescription[] = _( "Allows a full-power attack,\n" - "but sharply lowers SP. ATK."); + "but sharply lowers Sp. Atk."); static const u8 sOdorSleuthDescription[] = _( "Negates the foe's efforts\n" @@ -1267,7 +1287,7 @@ static const u8 sOdorSleuthDescription[] = _( static const u8 sRockTombDescription[] = _( "Stops the foe from moving\n" - "with rocks and cuts SPEED."); + "with rocks and cuts Speed."); static const u8 sSilverWindDescription[] = _( "A powdery attack that may\n" @@ -1275,7 +1295,7 @@ static const u8 sSilverWindDescription[] = _( static const u8 sMetalSoundDescription[] = _( "Emits a horrible screech\n" - "that sharply lowers SP. DEF."); + "that sharply lowers Sp. Def."); static const u8 sGrassWhistleDescription[] = _( "Lulls the foe into sleep\n" @@ -1283,10 +1303,10 @@ static const u8 sGrassWhistleDescription[] = _( static const u8 sTickleDescription[] = _( "Makes the foe laugh to\n" - "lower ATTACK and DEFENSE."); + "lower Attack and Defense."); static const u8 sCosmicPowerDescription[] = _( - "Raises DEFENSE and SP. DEF\n" + "Raises Defense and Sp. Def\n" "with a mystic power."); static const u8 sWaterSpoutDescription[] = _( @@ -1311,7 +1331,11 @@ static const u8 sSkyUppercutDescription[] = _( static const u8 sSandTombDescription[] = _( "Traps and hurts the foe in\n" +#if B_BINDING_TURNS >= GEN_5 + "quicksand for 4 or 5 turns."); +#else "quicksand for 2 to 5 turns."); +#endif static const u8 sSheerColdDescription[] = _( "A chilling attack that\n" @@ -1335,7 +1359,7 @@ static const u8 sIcicleSpearDescription[] = _( static const u8 sIronDefenseDescription[] = _( "Hardens the body's surface\n" - "to sharply raise DEFENSE."); + "to sharply raise Defense."); static const u8 sBlockDescription[] = _( "Blocks the foe's way to\n" @@ -1343,7 +1367,7 @@ static const u8 sBlockDescription[] = _( static const u8 sHowlDescription[] = _( "Howls to raise the spirit\n" - "and boosts ATTACK."); + "and boosts Attack."); static const u8 sDragonClawDescription[] = _( "Slashes the foe with sharp\n" @@ -1355,7 +1379,7 @@ static const u8 sFrenzyPlantDescription[] = _( static const u8 sBulkUpDescription[] = _( "Bulks up the body to boost\n" - "both ATTACK and DEFENSE."); + "both Attack and Defense."); static const u8 sBounceDescription[] = _( "Bounces up, then down the\n" @@ -1363,7 +1387,7 @@ static const u8 sBounceDescription[] = _( static const u8 sMudShotDescription[] = _( "Hurls mud at the foe and\n" - "reduces SPEED."); + "reduces Speed."); static const u8 sPoisonTailDescription[] = _( "Has a high critical-hit\n" @@ -1386,7 +1410,7 @@ static const u8 sWaterSportDescription[] = _( "raise resistance to fire."); static const u8 sCalmMindDescription[] = _( - "Raises SP. ATK and SP. DEF\n" + "Raises Sp. Atk and Sp. Def\n" "by focusing the mind."); static const u8 sLeafBladeDescription[] = _( @@ -1395,7 +1419,7 @@ static const u8 sLeafBladeDescription[] = _( static const u8 sDragonDanceDescription[] = _( "A mystical dance that ups\n" - "ATTACK and SPEED."); + "Attack and Speed."); static const u8 sRockBlastDescription[] = _( "Hurls boulders at the foe\n" @@ -1415,7 +1439,1644 @@ static const u8 sDoomDesireDescription[] = _( static const u8 sPsychoBoostDescription[] = _( "Allows a full-power attack,\n" - "but sharply lowers SP. ATK."); + "but sharply lowers Sp. Atk."); + +static const u8 sRoostDescription[] = _( + "Restores the user's HP by\n" + "half of its max HP."); + +static const u8 sGravityDescription[] = _( + "Gravity is intensified\n" + "negating levitation."); + +static const u8 sMiracleEyeDescription[] = _( + "Negate evasiveness and\n" + "Dark-type's immunities."); + +static const u8 sWakeUpSlapDescription[] = _( + "Powerful against sleeping\n" + "foes, but also heals them."); + +static const u8 sHammerArmDescription[] = _( + "A swinging fist attack\n" + "that also lowers Speed."); + +static const u8 sGyroBallDescription[] = _( + "A high-speed spin that does\n" + "more damage to faster foes."); + +static const u8 sHealingWishDescription[] = _( + "The user faints to heal up\n" + "the recipient."); + +static const u8 sBrineDescription[] = _( + "Does double damage to foes\n" + "with half HP."); + +static const u8 sNaturalGiftDescription[] = _( + "The effectiveness varies\n" + "with the held Berry."); + +static const u8 sFeintDescription[] = _( + "An attack that hits foes\n" + "using moves like Protect."); + +static const u8 sPluckDescription[] = _( + "Eats the foe's held Berry\n" + "gaining its effect."); + +static const u8 sTailwindDescription[] = _( + "Whips up a turbulent breeze\n" + "that raises Speed."); + +static const u8 sAcupressureDescription[] = _( + "The user sharply raises\n" + "one of its stats."); + +static const u8 sMetalBurstDescription[] = _( + "Retaliates any hit with\n" + "greater power."); + +static const u8 sUTurnDescription[] = _( + "Does damage then switches\n" + "out the user."); + +static const u8 sCloseCombatDescription[] = _( + "A strong attack but lowers\n" + "the defensive stats."); + +static const u8 sPaybackDescription[] = _( + "An attack that gains power\n" + "if the user moves last."); + +static const u8 sAssuranceDescription[] = _( + "An attack that gains power\n" + "if the foe has been hurt."); + +static const u8 sEmbargoDescription[] = _( + "Prevents the foe from\n" + "using any items."); + +static const u8 sFlingDescription[] = _( + "The effectiveness varies\n" + "with the held item."); + +static const u8 sPsychoShiftDescription[] = _( + "Transfers status problems\n" + "to the foe."); + +static const u8 sTrumpCardDescription[] = _( + "The less PP the move has\n" + "the more damage it does."); + +static const u8 sHealBlockDescription[] = _( + "Prevents the foe from\n" + "recovering any HP."); + +static const u8 sWringOutDescription[] = _( + "The higher the foe's HP\n" + "the more damage caused."); + +static const u8 sPowerTrickDescription[] = _( + "The user swaps its Attack\n" + "and Defense stats."); + +static const u8 sGastroAcidDescription[] = _( + "Stomach acid suppresses\n" + "the foe's ability."); + +static const u8 sLuckyChantDescription[] = _( + "Prevents the foe from\n" + "landing critical hits."); + +static const u8 sMeFirstDescription[] = _( + "Executes the foe's attack\n" + "with greater power."); + +static const u8 sCopycatDescription[] = _( + "The user mimics the last\n" + "move used by a foe."); + +static const u8 sPowerSwapDescription[] = _( + "Swaps changes to Attack\n" + "and Sp. Atk with the foe."); + +static const u8 sGuardSwapDescription[] = _( + "Swaps changes to Defense\n" + "and Sp. Def with the foe."); + +static const u8 sPunishmentDescription[] = _( + "Does more damage if the\n" + "foe has powered up."); + +static const u8 sLastResortDescription[] = _( + "Can only be used if every\n" + "other move has been used."); + +static const u8 sWorrySeedDescription[] = _( + "Plants a seed on the foe\n" + "giving it Insomnia."); + +static const u8 sSuckerPunchDescription[] = _( + "Strikes first if the foe\n" + "is preparing an attack."); + +static const u8 sToxicSpikesDescription[] = _( + "Sets spikes that poison a\n" + "foe switching in."); + +static const u8 sHeartSwapDescription[] = _( + "Swaps any stat changes\n" + "with the foe."); + +static const u8 sAquaRingDescription[] = _( + "Forms a veil of water\n" + "that restores HP."); + +static const u8 sMagnetRiseDescription[] = _( + "The user levitates with\n" + "electromagnetism."); + +static const u8 sFlareBlitzDescription[] = _( + "A charge that may burn the\n" + "foe. Also hurts the user."); + +static const u8 sForcePalmDescription[] = _( + "A shock wave attack that\n" + "may paralyze the foe."); + +static const u8 sAuraSphereDescription[] = _( + "Attacks with an aura blast\n" + "that cannot be evaded."); + +static const u8 sRockPolishDescription[] = _( + "Polishes the body to\n" + "sharply raise Speed."); + +static const u8 sPoisonJabDescription[] = _( + "A stabbing attack that\n" + "may poison the foe."); + +static const u8 sDarkPulseDescription[] = _( + "Attacks with a horrible\n" + "aura. May cause flinching."); + +static const u8 sNightSlashDescription[] = _( + "Hits as soon as possible.\n" + "High critical-hit ratio."); + +static const u8 sAquaTailDescription[] = _( + "The user swings its tail\n" + "like a wave to attack."); + +static const u8 sSeedBombDescription[] = _( + "A barrage of hard seeds\n" + "is fired at the foe."); + +static const u8 sAirSlashDescription[] = _( + "Attacks with a blade of\n" + "air. May cause flinching."); + +static const u8 sXScissorDescription[] = _( + "Slashes the foe with crossed\n" + "scythes, claws, etc."); + +static const u8 sBugBuzzDescription[] = _( + "A damaging sound wave that\n" + "may lower Sp. Def."); + +static const u8 sDragonPulseDescription[] = _( + "Generates a shock wave to\n" + "damage the foe."); + +static const u8 sDragonRushDescription[] = _( + "Tackles the foe with menace.\n" + "May cause flinching."); + +static const u8 sPowerGemDescription[] = _( + "Attacks with rays of light\n" + "that sparkle like diamonds."); + +static const u8 sVacuumWaveDescription[] = _( + "Whirls its fists to send\n" + "a wave that strikes first."); + +static const u8 sFocusBlastDescription[] = _( + "Attacks at full power.\n" + "May lower Sp. Def."); + +static const u8 sEnergyBallDescription[] = _( + "Draws power from nature to\n" + "attack. May lower Sp. Def."); + +static const u8 sBraveBirdDescription[] = _( + "A low altitude charge that\n" + "also hurts the user."); + +static const u8 sEarthPowerDescription[] = _( + "Makes the ground erupt with\n" + "power. May lower Sp. Def."); + +static const u8 sSwitcherooDescription[] = _( + "Swaps items with the foe\n" + "faster than the eye can see."); + +static const u8 sNastyPlotDescription[] = _( + "Thinks bad thoughts to\n" + "sharply boost Sp. Atk."); + +static const u8 sBulletPunchDescription[] = _( + "Punches as fast as a bul-\n" + "let. It always hits first."); + +static const u8 sIceShardDescription[] = _( + "Hurls a chunk of ice that\n" + "always strike first."); + +static const u8 sShadowClawDescription[] = _( + "Strikes with a shadow claw.\n" + "High critical-hit ratio."); + +static const u8 sThunderFangDescription[] = _( + "May cause flinching or\n" + "leave the foe paralyzed."); + +static const u8 sIceFangDescription[] = _( + "May cause flinching or\n" + "leave the foe frozen."); + +static const u8 sFireFangDescription[] = _( + "May cause flinching or\n" + "leave the foe with a burn."); + +static const u8 sShadowSneakDescription[] = _( + "Extends the user's shadow\n" + "to strike first."); + +static const u8 sMudBombDescription[] = _( + "Throws a blob of mud to\n" + "damage and cut accuracy."); + +static const u8 sPsychoCutDescription[] = _( + "Tears with psychic blades.\n" + "High critical-hit ratio."); + +static const u8 sZenHeadbuttDescription[] = _( + "Hits with a strong head-\n" + "butt. May cause flinching."); + +static const u8 sMirrorShotDescription[] = _( + "Emits a flash of energy to\n" + "damage and cut accuracy."); + +static const u8 sFlashCannonDescription[] = _( + "Releases a blast of light\n" + "that may lower Sp. Def."); + +static const u8 sRockClimbDescription[] = _( + "A charging attack that may\n" + "confuse the foe."); + +static const u8 sDefogDescription[] = _( + "Removes obstacles and\n" + "lowers evasion."); + +static const u8 sTrickRoomDescription[] = _( + "Slower Pokémon get to move\n" + "first for 5 turns."); + +static const u8 sDracoMeteorDescription[] = _( + "Casts comets onto the foe.\n" + "Harshly lowers the Sp. Atk."); + +static const u8 sDischargeDescription[] = _( + "Zaps the foes with electri-\n" + "city. May paralyze them."); + +static const u8 sPowerWhipDescription[] = _( + "Violently lashes the foe\n" + "with vines or tentacles."); + +static const u8 sCrossPoisonDescription[] = _( + "A slash that may poison a\n" + "foe and do critical damage."); + +static const u8 sGunkShotDescription[] = _( + "Shoots filthy garbage at\n" + "the foe. May also poison."); + +static const u8 sIronHeadDescription[] = _( + "Slams the foe with a hard\n" + "head. May cause flinching."); + +static const u8 sMagnetBombDescription[] = _( + "Launches a magnet that\n" + "strikes without fail."); + +static const u8 sStoneEdgeDescription[] = _( + "Stabs the foe with stones.\n" + "High critical-hit ratio."); + +static const u8 sCaptivateDescription[] = _( + "Makes the opposite gender\n" + "sharply reduce its Sp. Atk."); + +static const u8 sStealthRockDescription[] = _( + "Sets floating stones that\n" + "hurt a foe switching in."); + +static const u8 sGrassKnotDescription[] = _( + "A snare attack that does\n" + "more damage to heavier foes."); + +static const u8 sChatterDescription[] = _( + "Attacks with a sound wave\n" + "that causes confusion."); + +static const u8 sJudgmentDescription[] = _( + "The type varies with the\n" + "kind of Plate held."); + +static const u8 sChargeBeamDescription[] = _( + "Fires a beam of electricity.\n" + "May raise Sp. Atk."); + +static const u8 sWoodHammerDescription[] = _( + "Slams the body into a foe.\n" + "The user gets hurt too."); + +static const u8 sAquaJetDescription[] = _( + "Strikes first by dashing\n" + "at the foe at a high speed."); + +static const u8 sAttackOrderDescription[] = _( + "Underlings pummel the foe.\n" + "High critical-hit ratio."); + +static const u8 sDefendOrderDescription[] = _( + "Raises Defense and Sp. Def\n" + "with a living shield."); + +static const u8 sHealOrderDescription[] = _( + "The user's underlings show\n" + "up to heal half its max HP."); + +static const u8 sHeadSmashDescription[] = _( + "A life-risking headbutt that\n" + "seriously hurts the user."); + +static const u8 sDoubleHitDescription[] = _( + "Slams the foe with a tail\n" + "etc. Strikes twice."); + +static const u8 sRoarOfTimeDescription[] = _( + "Powerful, but leaves the\n" + "user immobile the next turn."); + +static const u8 sSpacialRendDescription[] = _( + "Tears the foe, and space.\n" + "High critical-hit ratio."); + +static const u8 sMagmaStormDescription[] = _( + "Traps the foe in a vortex\n" +#if B_BINDING_TURNS >= GEN_5 + "of fire for 4 or 5 turns."); +#else + "of fire for 2 to 5 turns."); +#endif + +static const u8 sDarkVoidDescription[] = _( + "Drags the foe into total\n" + "darkness, inducing Sleep."); + +static const u8 sSeedFlareDescription[] = _( + "Generates a shock wave that\n" + "sharply reduces Sp. Def."); + +static const u8 sOminousWindDescription[] = _( + "A repulsive attack that may\n" + "raise all stats."); + +static const u8 sShadowForceDescription[] = _( + "Vanishes on the first turn\n" + "then strikes the next turn."); + +static const u8 sHoneClawsDescription[] = _( + "Sharpens its claws to raise\n" + "Attack and Accuracy."); + +static const u8 sWideGuardDescription[] = _( + "Evades wide-ranging attacks\n" + "for one turn."); + +static const u8 sGuardSplitDescription[] = _( + "Averages changes to Defense\n" + "and Sp. Def with the foe."); + +static const u8 sPowerSplitDescription[] = _( + "Averages changes to Attack\n" + "and Sp. Atk with the foe."); + +static const u8 sWonderRoomDescription[] = _( + "Defense and Sp. Def stats\n" + "are swapped for 5 turns."); + +static const u8 sPsyshockDescription[] = _( + "Attacks with a psychic wave\n" + "that does physical damage."); + +static const u8 sTailSlapDescription[] = _( + "Strikes the foe with its\n" + "tail 2 to 5 times."); + +static const u8 sVenoshockDescription[] = _( + "Does double damage if the\n" + "foe is poisoned."); + +static const u8 sAutotomizeDescription[] = _( + "Sheds additional weight to\n" + "sharply boost Speed."); + +static const u8 sRagePowderDescription[] = _( + "Scatters powder to make\n" + "foes attack only the user."); + +static const u8 sTelekinesisDescription[] = _( + "Makes the foe float. It is\n" + "easier to hit for 3 turns."); + +static const u8 sMagicRoomDescription[] = _( + "Hold items lose their\n" + "effects for 5 turns."); + +static const u8 sSmackDownDescription[] = _( + "Throws a rock to knock the\n" + "foe down to the ground."); + +static const u8 sStormThrowDescription[] = _( + "This attack always results\n" + "in a critical hit."); + +static const u8 sFlameBurstDescription[] = _( + "A bursting flame that does\n" + "damage to all foes."); + +static const u8 sSludgeWaveDescription[] = _( + "Swamps the foe with a wave\n" + "of sludge. May also poison."); + +static const u8 sQuiverDanceDescription[] = _( + "Dances to raise Sp. Atk\n" + "Sp. Def and Speed."); + +static const u8 sHeavySlamDescription[] = _( + "Does more damage if the\n" + "user outweighs the foe."); + +static const u8 sSynchronoiseDescription[] = _( + "An odd shock wave that only\n" + "damages same-type foes."); + +static const u8 sElectroBallDescription[] = _( + "Hurls an orb that does more\n" + "damage to slower foes."); + +static const u8 sSoakDescription[] = _( + "Sprays water at the foe\n" + "making it Water-type."); + +static const u8 sFlameChargeDescription[] = _( + "Attacks in a cloak of\n" + "flames. Raises Speed."); + +static const u8 sCoilDescription[] = _( + "Coils up to raise Attack\n" + "Defense and Accuracy."); + +static const u8 sLowSweepDescription[] = _( + "Attacks the foe's legs\n" + "lowering its Speed."); + +static const u8 sAcidSprayDescription[] = _( + "Sprays a hide-melting acid.\n" + "Sharply reduces Sp. Def."); + +static const u8 sFoulPlayDescription[] = _( + "The higher the foe's Attack\n" + "the more damage caused."); + +static const u8 sSimpleBeamDescription[] = _( + "A beam that changes the\n" + "foe's ability to Simple."); + +static const u8 sEntrainmentDescription[] = _( + "Makes the foe mimic the\n" + "user, gaining its ability."); + +static const u8 sAfterYouDescription[] = _( + "Helps out the foe, letting\n" + "it move next."); + +static const u8 sRoundDescription[] = _( + "A song that inflicts damage.\n" + "Others can join in too."); + +static const u8 sEchoedVoiceDescription[] = _( + "Does more damage every turn\n" + "it is used."); + +static const u8 sChipAwayDescription[] = _( + "Strikes through the foe's\n" + "stat changes."); + +static const u8 sClearSmogDescription[] = _( + "Attacks with white haze that\n" + "eliminates all stat changes."); + +static const u8 sStoredPowerDescription[] = _( + "The higher the user's stats\n" + "the more damage caused."); + +static const u8 sQuickGuardDescription[] = _( + "Evades priority attacks\n" + "for one turn."); + +static const u8 sAllySwitchDescription[] = _( + "The user switches places\n" + "with its partner."); + +static const u8 sScaldDescription[] = _( + "Shoots boiling water at the\n" + "foe. May inflict a burn."); + +static const u8 sShellSmashDescription[] = _( + "Raises offensive stats, but\n" + "lowers defensive stats."); + +static const u8 sHealPulseDescription[] = _( + "Recovers up to half the\n" + "target's maximum HP."); + +static const u8 sHexDescription[] = _( + "Does double damage if the\n" + "foe has a status problem."); + +static const u8 sSkyDropDescription[] = _( + "Takes the foe into the sky\n" + "then drops it the next turn."); + +static const u8 sShiftGearDescription[] = _( + "Rotates its gears to raise\n" + "Attack and Speed."); + +static const u8 sCircleThrowDescription[] = _( + "Knocks the foe away to end\n" + "the battle."); + +static const u8 sIncinerateDescription[] = _( + "Burns up Berries and Gems\n" + "preventing their use."); + +static const u8 sQuashDescription[] = _( + "Suppresses the foe, making\n" + "it move last."); + +static const u8 sAcrobaticsDescription[] = _( + "Does double damage if the\n" + "user has no item."); + +static const u8 sReflectTypeDescription[] = _( + "The user reflects the foe's\n" + "type, copying it."); + +static const u8 sRetaliateDescription[] = _( + "An attack that does more\n" + "damage if an ally fainted."); + +static const u8 sFinalGambitDescription[] = _( + "The user faints to damage\n" + "the foe equal to its HP."); + +static const u8 sBestowDescription[] = _( + "The user gives its held\n" + "item to the foe."); + +static const u8 sInfernoDescription[] = _( + "Powerful and sure to inflict\n" + "a burn, but inaccurate."); + +static const u8 sWaterPledgeDescription[] = _( + "Attacks with a column of\n" + "water. May make a rainbow."); + +static const u8 sFirePledgeDescription[] = _( + "Attacks with a column of\n" + "fire. May burn the grass."); + +static const u8 sGrassPledgeDescription[] = _( + "Attacks with a column of\n" + "grass. May create a swamp."); + +static const u8 sStruggleBugDescription[] = _( + "Resisting, the user attacks\n" + "the foe. Lowers Sp. Atk."); + +static const u8 sBulldozeDescription[] = _( + "Stomps down on the ground.\n" + "Lowers Speed."); + +static const u8 sWorkUpDescription[] = _( + "The user is roused.\n" + "Ups Attack and Sp. Atk."); + +static const u8 sElectrowebDescription[] = _( + "Snares the foe with an\n" + "electric net. Lowers Speed."); + +static const u8 sWildChargeDescription[] = _( + "An electrical tackle that\n" + "also hurts the user."); + +static const u8 sDrillRunDescription[] = _( + "Spins its body like a drill.\n" + "High critical-hit ratio."); + +static const u8 sDualChopDescription[] = _( + "Attacks with brutal hits\n" + "that strike twice."); + +static const u8 sHeartStampDescription[] = _( + "A sudden blow after a cute\n" + "act. May cause flinching."); + +static const u8 sRazorShellDescription[] = _( + "Tears at the foe with sharp\n" + "shells. May lower Defense."); + +static const u8 sLeafTornadoDescription[] = _( + "Circles the foe with leaves\n" + "to damage and cut accuracy."); + +static const u8 sSteamrollerDescription[] = _( + "Crushes the foe with its\n" + "body. May cause flinching."); + +static const u8 sCottonGuardDescription[] = _( + "Wraps its body in cotton.\n" + "Drastically raises Defense."); + +static const u8 sNightDazeDescription[] = _( + "Looses a pitch-black shock\n" + "wave. May lower accuracy."); + +static const u8 sHurricaneDescription[] = _( + "Traps the foe in a fierce\n" + "wind. May cause confusion."); + +static const u8 sHeadChargeDescription[] = _( + "A charge using guard hair.\n" + "It hurts the user a little."); + +static const u8 sGearGrindDescription[] = _( + "Throws two steel gears\n" + "that strike twice."); + +static const u8 sTechnoBlastDescription[] = _( + "The type varies with the\n" + "kind of Drive held."); + +static const u8 sRelicSongDescription[] = _( + "Attacks with an ancient\n" + "song. May induce sleep."); + +static const u8 sSecretSwordDescription[] = _( + "Cuts with a long horn that\n" + "does physical damage."); + +static const u8 sGlaciateDescription[] = _( + "Blows very cold air at the\n" + "foe. It lowers their Speed."); + +static const u8 sBoltStrikeDescription[] = _( + "Strikes with a great amount\n" + "of lightning. May paralyze."); + +static const u8 sBlueFlareDescription[] = _( + "Engulfs the foe in a blue\n" + "flame. May inflict a burn."); + +static const u8 sFieryDanceDescription[] = _( + "Dances cloaked in flames.\n" + "May raise Sp. Atk."); + +static const u8 sFreezeShockDescription[] = _( + "A powerful 2-turn move that\n" + "may paralyze the foe."); + +static const u8 sIceBurnDescription[] = _( + "A powerful 2-turn move that\n" + "may inflict a burn."); + +static const u8 sSnarlDescription[] = _( + "Yells and rants at the foe\n" + "lowering its Sp. Atk."); + +static const u8 sIcicleCrashDescription[] = _( + "Drops large icicles on the\n" + "foe. May cause flinching."); + +static const u8 sVCreateDescription[] = _( + "Very powerful, but lowers\n" + "Defense, Sp. Def and Speed."); + +static const u8 sFusionFlareDescription[] = _( + "Summons a fireball. Works\n" + "well with a thunderbolt."); + +static const u8 sFusionBoltDescription[] = _( + "Summons a thunderbolt.\n" + "Works well with a fireball."); + +static const u8 sFlyingPressDescription[] = _( + "This attack does Fighting\n" + "and Flying-type damage."); + +static const u8 sMatBlockDescription[] = _( + "Evades damaging moves\n" + "for one turn."); + +static const u8 sBelchDescription[] = _( + "Lets out a loud belch.\n" + "Must eat a Berry to use it."); + +static const u8 sRototillerDescription[] = _( + "Ups the Attack and Sp. Atk\n" + "of Grass-type Pokémon."); + +static const u8 sStickyWebDescription[] = _( + "Weaves a sticky net that\n" + "slows foes switching in."); + +static const u8 sFellStingerDescription[] = _( + "If it knocks out a foe\n" + "the Attack stat is raised."); + +static const u8 sTrickOrTreatDescription[] = _( + "Goes trick-or-treating\n" + "making the foe Ghost-type."); + +static const u8 sNobleRoarDescription[] = _( + "Intimidates the foe, to cut\n" + "Attack and Sp. Atk."); + +static const u8 sIonDelugeDescription[] = _( + "Electrifies Normal-type\n" + "moves with charged atoms."); + +static const u8 sParabolicChargeDescription[] = _( + "Damages adjacent Pokémon and\n" + "heals up by half of it."); + +static const u8 sForestsCurseDescription[] = _( + "Puts a curse on the foe\n" + "making the foe Grass-type."); + +static const u8 sPetalBlizzardDescription[] = _( + "Stirs up a violent storm\n" + "of petals to attack."); + +static const u8 sFreezeDryDescription[] = _( + "Super effective on Water-\n" + "types. May cause freezing."); + +static const u8 sDisarmingVoiceDescription[] = _( + "Lets out a charming cry\n" + "that cannot be evaded."); + +static const u8 sPartingShotDescription[] = _( + "Lowers the foe's Attack and\n" + "Sp. Atk, then switches out."); + +static const u8 sTopsyTurvyDescription[] = _( + "Swaps all stat changes that\n" + "affect the target."); + +static const u8 sDrainingKissDescription[] = _( + "An attack that absorbs over\n" + "half the damage inflicted."); + +static const u8 sCraftyShieldDescription[] = _( + "Evades status moves for\n" + "one turn."); + +static const u8 sFlowerShieldDescription[] = _( + "Raises the Defense of\n" + "Grass-type Pokémon."); + +static const u8 sGrassyTerrainDescription[] = _( + "The ground turns to grass\n" + "for 5 turns. Restores HP."); + +static const u8 sMistyTerrainDescription[] = _( + "Covers the ground with mist\n" + "for 5 turns. Blocks status."); + +static const u8 sElectrifyDescription[] = _( + "Electrifies the foe, making\n" + "its next move Electric-type."); + +static const u8 sPlayRoughDescription[] = _( + "Plays rough with the foe.\n" + "May lower Attack."); + +static const u8 sFairyWindDescription[] = _( + "Stirs up a fairy wind to\n" + "strike the foe."); + +static const u8 sMoonblastDescription[] = _( + "Attacks with the power of\n" + "the moon. May lower Sp. Atk."); + +static const u8 sBoomburstDescription[] = _( + "Attacks everything with a\n" + "destructive sound wave."); + +static const u8 sFairyLockDescription[] = _( + "Locks down the battlefield\n" + "preventing escape next turn."); + +static const u8 sKingsShieldDescription[] = _( + "Evades damage, and sharply\n" + "reduces Attack if struck."); + +static const u8 sPlayNiceDescription[] = _( + "Befriend the foe, lowering\n" + "its Attack without fail."); + +static const u8 sConfideDescription[] = _( + "Shares a secret with the\n" + "foe, lowering Sp. Atk."); + +static const u8 sDiamondStormDescription[] = _( + "Whips up a storm of\n" + "diamonds. May up Defense."); + +static const u8 sSteamEruptionDescription[] = _( + "Immerses the foe in heated\n" + "steam. May inflict a burn."); + +static const u8 sHyperspaceHoleDescription[] = _( + "Uses a warp hole to attack.\n" + "Can't be evaded."); + +static const u8 sWaterShurikenDescription[] = _( + "Throws 2 to 5 stars that\n" + "are sure to strike first."); + +static const u8 sMysticalFireDescription[] = _( + "Breathes a special, hot\n" + "fire. Lowers Sp. Atk."); + +static const u8 sSpikyShieldDescription[] = _( + "Evades attack, and damages\n" + "the foe if struck."); + +static const u8 sAromaticMistDescription[] = _( + "Raises the Sp. Def of a\n" + "partner Pokémon."); + +static const u8 sEerieImpulseDescription[] = _( + "Exposes the foe to a pulse\n" + "that sharply cuts Sp. Atk."); + +static const u8 sVenomDrenchDescription[] = _( + "Lowers the Attack, Sp. Atk\n" + "and Speed of a poisoned foe."); + +static const u8 sPowderDescription[] = _( + "Damages the foe if it uses\n" + "a Fire-type move."); + +static const u8 sGeomancyDescription[] = _( + "Raises Sp. Atk, Sp. Def and\n" + "Speed on the 2nd turn."); + +static const u8 sMagneticFluxDescription[] = _( + "Boosts the defenses of\n" + "those with Plus or Minus."); + +static const u8 sHappyHourDescription[] = _( + "Doubles the amount of\n" + "Prize Money received."); + +static const u8 sElectricTerrainDescription[] = _( + "Electrifies the ground for\n" + "5 turns. Prevents sleep."); + +static const u8 sDazzlingGleamDescription[] = _( + "Damages foes by emitting\n" + "a bright flash."); + +static const u8 sCelebrateDescription[] = _( + "Congratulates you on your\n" + "special day."); + +static const u8 sHoldHandsDescription[] = _( + "The user and ally hold hands\n" + "making them happy."); + +static const u8 sBabyDollEyesDescription[] = _( + "Lowers the foe's Attack\n" + "before it can move."); + +static const u8 sNuzzleDescription[] = _( + "Rubs its cheecks against\n" + "the foe, paralyzing it."); + +static const u8 sInfestationDescription[] = _( + "The foe is infested and\n" +#if B_BINDING_TURNS >= GEN_5 + "attacked for 4 or 5 turns."); +#else + "attacked for 2 to 5 turns."); +#endif + +static const u8 sPowerUpPunchDescription[] = _( + "A hard punch that raises\n" + "the user's Attack."); + +static const u8 sThousandArrowsDescription[] = _( + "Can hit Flying foes, then\n" + "knocks them to the ground."); + +static const u8 sThousandWavesDescription[] = _( + "Those hit by the wave can\n" + "no longer escape."); + +static const u8 sLandsWrathDescription[] = _( + "Gathers the energy of the\n" + "land to attack every foe."); + +static const u8 sLightOfRuinDescription[] = _( + "Fires a great beam of light\n" + "that also hurts the user."); + +static const u8 sOriginPulseDescription[] = _( + "Beams of glowing blue light\n" + "blast both foes."); + +static const u8 sPrecipiceBladesDescription[] = _( + "Fearsome blades of stone\n" + "attack both foes."); + +static const u8 sLavaPlumeDescription[] = _( + "Scarlet flames torch\n" + "everything around the user."); + +static const u8 sLeafStormDescription[] = _( + "Whips up a storm of leaves.\n" + "Harshly lowers the Sp. Atk."); + +static const u8 sShoreUpDescription[] = _( + "Restores the user's HP.\n" + "More HP in a sandstorm."); + +static const u8 sFirstImpressionDescription[] = _( + "Hits hard and first.\n" + "Only works first turn."); + +static const u8 sBanefulBunkerDescription[] = _( + "Protects user and poisons\n" + "foes on contact."); + +static const u8 sSpiritShackleDescription[] = _( + "After being hit, foes can\n" + "no longer escape."); + +static const u8 sDarkestLariatDescription[] = _( + "Swings the arms to strike\n" + "It ignores stat changes."); + +static const u8 sSparklingAriaDescription[] = _( + "Sings with bubbles. Cures\n" + "burns on contact."); + +static const u8 sIceHammerDescription[] = _( + "Swings the fist to strike.\n" + "Lowers the user's Speed."); + +static const u8 sFloralHealingDescription[] = _( + "Restores an ally's HP.\n" + "Heals more on grass."); + +static const u8 sHighHorsepowerDescription[] = _( + "Slams hard into the foe with\n" + "its entire body."); + +static const u8 sStrengthSapDescription[] = _( + "Saps the foe's Attack to\n" + "heal HP, then drops Attack."); + +static const u8 sSolarBladeDescription[] = _( + "Charges first turn, then\n" + "chops with a blade of light."); + +static const u8 sLeafageDescription[] = _( + "Attacks with a flurry of\n" + "small leaves."); + +static const u8 sSpotlightDescription[] = _( + "Makes the foe attack the\n" + "spotlighted Pokémon."); + +static const u8 sToxicThreadDescription[] = _( + "Attacks with a thread that\n" + "poisons and drops Speed."); + +static const u8 sLaserFocusDescription[] = _( + "Guarantees the next move\n" + "will be a critical hit."); + +static const u8 sGearUpDescription[] = _( + "Boosts the attacks of\n" + "those with Plus or Minus."); + +static const u8 sThroatChopDescription[] = _( + "Chops the throat to disable\n" + "sound moves for a while."); + +static const u8 sPollenPuffDescription[] = _( + "Explodes on foes, but\n" + "restores ally's HP."); + +static const u8 sAnchorShotDescription[] = _( + "Strangles the foe with a\n" + "chain. The foe can't escape."); + +static const u8 sPsychicTerrainDescription[] = _( + "The ground turns weird for\n" + "5 turns. Blocks priority."); + +static const u8 sLungeDescription[] = _( + "Lunges at the foe to lower\n" + "its Attack stat."); + +static const u8 sFireLashDescription[] = _( + "Whips the foe with fire\n" + "lowering its Defense."); + +static const u8 sPowerTripDescription[] = _( + "It hits harder the more\n" + "stat boosts the user has."); + +static const u8 sBurnUpDescription[] = _( + "Burns out the user fully\n" + "removing the Fire type."); + +static const u8 sSpeedSwapDescription[] = _( + "Swaps user's Speed with\n" + "the target's."); + +static const u8 sSmartStrikeDescription[] = _( + "Hits with an accurate\n" + "horn that never misses."); + +static const u8 sPurifyDescription[] = _( + "Cures the foe's status\n" + "to restore HP."); + +static const u8 sRevelationDanceDescription[] = _( + "Dances with mystical power.\n" + "Matches user's first type."); + +static const u8 sCoreEnforcerDescription[] = _( + "Hits with a ray that\n" + "nullifies the foe's ability."); + +static const u8 sTropKickDescription[] = _( + "An intense kick from the\n" + "tropics. Lowers Attack."); + +static const u8 sInstructDescription[] = _( + "Orders the target to use\n" + "its last move again."); + +static const u8 sBeakBlastDescription[] = _( + "Heats up beak to attack.\n" + "Burns foe on contact."); + +static const u8 sClangingScalesDescription[] = _( + "Makes a big noise with\n" + "its scales. Drops Defense."); + +static const u8 sDragonHammerDescription[] = _( + "Swings its whole body\n" + "like a hammer to damage."); + +static const u8 sBrutalSwingDescription[] = _( + "Violently swings around\n" + "to hurt everyone nearby."); + +static const u8 sAuroraVeilDescription[] = _( + "Weakens all attacks, but\n" + "only usable with hail."); + +static const u8 sShellTrapDescription[] = _( + "Sets a shell trap that\n" + "damages on contact."); + +static const u8 sFleurCannonDescription[] = _( + "A strong ray that harshly\n" + "lowers Sp. Attack."); + +static const u8 sPsychicFangsDescription[] = _( + "Chomps with psychic fangs.\n" + "Destroys any barriers."); + +static const u8 sStompingTantrumDescription[] = _( + "Stomps around angrily.\n" + "Stronger after a failure."); + +static const u8 sShadowBoneDescription[] = _( + "Strikes with a haunted\n" + "bone. Might drop Defense."); + +static const u8 sAccelerockDescription[] = _( + "Hits with a high-speed\n" + "rock that always goes first."); + +static const u8 sLiquidationDescription[] = _( + "Slams the foe with water.\n" + "Can lower Defense."); + +static const u8 sPrismaticLaserDescription[] = _( + "A high power laser that\n" + "forces recharge next turn."); + +static const u8 sSpectralThiefDescription[] = _( + "Steals the target's stat\n" + "boosts, then attacks."); + +static const u8 sSunsteelStrikeDescription[] = _( + "A sun-fueled strike that\n" + "ignores abilities."); + +static const u8 sMoongeistBeamDescription[] = _( + "A moon-powered beam that\n" + "ignores abilities."); + +static const u8 sTearfulLookDescription[] = _( + "The user tears up, dropping\n" + "Attack and Sp. Attack."); + +static const u8 sZingZapDescription[] = _( + "An electrified impact that\n" + "can cause flinching."); + +static const u8 sNaturesMadnessDescription[] = _( + "Halves the foe's HP with\n" + "the power of nature."); + +static const u8 sMultiAttackDescription[] = _( + "An attack that changes\n" + "with Memories."); + +static const u8 sMindBlownDescription[] = _( + "It explodes the user's head\n" + "to damage everything around."); + +static const u8 sPlasmaFistsDescription[] = _( + "Hits with electrical fists.\n" + "Normal moves become Electric."); + +static const u8 sPhotonGeyserDescription[] = _( + "User's highest attack stat\n" + "determines its category."); + +static const u8 sZippyZapDescription[] = _( + "Electric bursts always go\n" + "first and land a critical hit."); + +static const u8 sSplishySplashDescription[] = _( + "A huge electrified wave that\n" + "may paralyze the foe."); + +static const u8 sFloatyFallDescription[] = _( + "Floats in air and dives at\n" + "angle. May cause flinching."); + +static const u8 sPikaPapowDescription[] = _( + "Pikachu's love increases its\n" + "power. It never misses."); + +static const u8 sBouncyBubbleDescription[] = _( + "An attack that absorbs\n" +#if B_UPDATED_MOVE_DATA >= GEN_8 + "all the damage inflicted."); +#else + "half the damage inflicted."); +#endif + +static const u8 sBuzzyBuzzDescription[] = _( + "Shoots a jolt of electricity\n" + "that always paralyzes."); + +static const u8 sSizzlySlideDescription[] = _( + "User cloaked in fire charges.\n" + "Leaves the foe with a burn."); + +static const u8 sGlitzyGlowDescription[] = _( + "Telekinetic force that sets\n" + "wall, lowering Sp. Atk damage."); + +static const u8 sBaddyBadDescription[] = _( + "Acting badly, attacks. Sets\n" + "wall, lowering Attack damage."); + +static const u8 sSappySeedDescription[] = _( + "Giant stalk scatters seeds\n" + "that drain HP every turn."); + +static const u8 sFreezyFrostDescription[] = _( + "Crystal from cold haze hits.\n" + "Eliminates all stat changes."); + +static const u8 sSparklySwirlDescription[] = _( + "Wrap foe with whirlwind of\n" + "scent. Heals party's status."); + +static const u8 sVeeveeVolleyDescription[] = _( + "Eevee's love increases its\n" + "power. It never misses."); + +static const u8 sDoubleIronBashDescription[] = _( + "The user spins and hits with\n" + "its arms. May cause flinch."); + +// GEN 8 +static const u8 sDynamaxCannonDescription[] = _( + "Fires a strong beam. Deals\n" + "2x damage to Dynamaxed foes."); + +static const u8 sSnipeShotDescription[] = _( + "The user ignores effects\n" + "that draw in moves."); + +static const u8 sJawLockDescription[] = _( + "Prevents the user and\n" + "the target from escaping."); + +static const u8 sStuffCheeksDescription[] = _( + "Consumes the user's Berry,\n" + "then sharply raises Def."); + +static const u8 sNoRetreatDescription[] = _( + "Raises all of the user's\n" + "stats but prevents escape."); + +static const u8 sTarShotDescription[] = _( + "Lowers the foe's Speed and\n" + "makes it weak to Fire."); + +static const u8 sMagicPowderDescription[] = _( + "Magic powder changes the\n" + "target into a Psychic-type."); + +static const u8 sDragonDartsDescription[] = _( + "The user attacks twice. Two\n" + "targets are hit once each."); + +static const u8 sTeatimeDescription[] = _( + "All Pokémon have teatime\n" + "and eat their Berries."); + +static const u8 sOctolockDescription[] = _( + "Traps the foe to lower Def\n" + "and Sp. Def fall each turn."); + +static const u8 sBoltBeakDescription[] = _( + "Double power if the user\n" + "moves before the target."); + +static const u8 sFishiousRendDescription[] = _( + "Double power if the user\n" + "moves before the target."); + +static const u8 sCourtChangeDescription[] = _( + "The user swaps effects on\n" + "either side of the field."); + +static const u8 sClangorousSoulDescription[] = _( + "The user uses some of its\n" + "HP to raise all its stats."); + +static const u8 sBodyPressDescription[] = _( + "Does more damage the\n" + "higher the user's Def."); + +static const u8 sDecorateDescription[] = _( + "The user sharply raises\n" + "the target's Atk and Sp.Atk"); + +static const u8 sDrumBeatingDescription[] = _( + "Plays a drum to attack.\n" + "The foe's Speed is lowered."); + +static const u8 sSnapTrapDescription[] = _( + "Snares the target in a snap\n" + "trap for four to five turns."); + +static const u8 sPyroBallDescription[] = _( + "Launches a fiery ball at the\n" + "target. It may cause a burn."); + +static const u8 sBehemothBladeDescription[] = _( + "Strikes as a sword. It deals\n" + "2x damage to Dynamaxed foes."); + +static const u8 sBehemothBashDescription[] = _( + "Attacks as a shield. Deals\n" + "2x damage to Dynamaxed foes."); + +static const u8 sAuraWheelDescription[] = _( + "Raises Speed to attack. The\n" + "Type is based on its form."); + +static const u8 sBreakingSwipeDescription[] = _( + "Swings its tail to attack.\n" + "Lowers the Atk of those hit."); + +static const u8 sBranchPokeDescription[] = _( + "The user pokes the target\n" + "with a pointed branch."); + +static const u8 sOverdriveDescription[] = _( + "The user twangs its guitar,\n" + "causing strong vibrations."); + +static const u8 sAppleAcidDescription[] = _( + "Attacks with tart apple acid\n" + "to lower the foe's Sp. Def."); + +static const u8 sGravAppleDescription[] = _( + "Drops an apple from above.\n" + "Lowers the foe's Defense."); + +static const u8 sSpiritBreakDescription[] = _( + "Attacks with spirit-breaking\n" + "force. Lowers Sp. Atk."); + +static const u8 sStrangeSteamDescription[] = _( + "Emits a strange steam to\n" + "potentially confuse the foe."); + +static const u8 sLifeDewDescription[] = _( + "Scatters water to restore\n" + "the HP of itself and allies."); + +static const u8 sObstructDescription[] = _( + "Protects itself, harshly\n" + "lowering Def on contact."); + +static const u8 sFalseSurrenderDescription[] = _( + "Bows to stab the foe\n" + "with hair. It never misses."); + +static const u8 sMeteorAssaultDescription[] = _( + "Attacks with a thick leek.\n" + "The user must then rest."); + +static const u8 sEternabeamDescription[] = _( + "Eternatus' strongest move.\n" + "The user rests next turn."); + +static const u8 sSteelBeamDescription[] = _( + "Fires a beam of steel from\n" + "its body. It hurts the user."); + +static const u8 sExpandingForceDescription[] = _( + "Power goes up and damages\n" + "all foes on Psychic Terrain."); + +static const u8 sSteelRollerDescription[] = _( + "Destroys terrain. Fails if\n" + "ground isn't terrain."); + +static const u8 sScaleShotDescription[] = _( + "Shoots scales 2 to 5 times.\n" + "Ups Speed, lowers defense."); + +static const u8 sMeteorBeamDescription[] = _( + "A 2-turn move that raises\n" + "Sp. Attack before attacking."); + +static const u8 sShellSideArmDescription[] = _( + "Deals better of physical and\n" + "special damage. May poison."); + +static const u8 sMistyExplosionDescription[] = _( + "Hit everything and faint.\n" + "Powers up on Misty Terrain."); + +static const u8 sGrassyGlideDescription[] = _( + "Gliding on ground, hits. Goes\n" + "first on Grassy Terrain."); + +static const u8 sRisingVoltageDescription[] = _( + "This move's power doubles\n" + "when on Electric Terrain."); + +static const u8 sTerrainPulseDescription[] = _( + "Type and power changes\n" + "depending on the terrain."); + +static const u8 sSkitterSmackDescription[] = _( + "User skitters behind foe to\n" + "attack. Lowers foe's Sp. Atk."); + +static const u8 sBurningJealousyDescription[] = _( + "Foes that have stats upped\n" + "during the turn get burned."); + +static const u8 sLashOutDescription[] = _( + "If stats lowered during this\n" + "turn, power is doubled."); + +static const u8 sPoltergeistDescription[] = _( + "Control foe's item to attack.\n" + "Fails if foe has no item."); + +static const u8 sCorrosiveGasDescription[] = _( + "Highly acidic gas melts items\n" + "held by surrounding Pokémon."); + +static const u8 sCoachingDescription[] = _( + "Properly coaches allies to\n" + "up their Attack and Defense."); + +static const u8 sFlipTurnDescription[] = _( + "Attacks and rushes back to\n" + "switch with a party Pokémon."); + +static const u8 sTripleAxelDescription[] = _( + "A 3-kick attack that gets\n" + "more powerful with each hit."); + +static const u8 sDualWingbeatDescription[] = _( + "User slams the target with\n" + "wings and hits twice in a row."); + +static const u8 sScorchingSandsDescription[] = _( + "Throws scorching sand at\n" + "the target. May leave a burn."); + +static const u8 sJungleHealingDescription[] = _( + "Heals HP and status of\n" + "itself and allies in battle."); + +static const u8 sWickedBlowDescription[] = _( + "Mastering the Dark style,\n" + "strikes with a critical hit."); + +static const u8 sSurgingStrikesDescription[] = _( + "Mastering the Water style,\n" + "strikes with 3 critical hits."); + +static const u8 sThunderCageDescription[] = _( + "Traps the foe in a cage of\n" +#if B_BINDING_TURNS >= GEN_5 + "electricity for 4 or 5 turns."); +#else + "electricity for 2 to 5 turns."); +#endif + +static const u8 sDragonEnergyDescription[] = _( + "The higher the user's HP\n" + "the more damage caused."); + +static const u8 sFreezingGlareDescription[] = _( + "Shoots psychic power from\n" + "the eyes. May freeze the foe."); + +static const u8 sFieryWrathDescription[] = _( + "An attack fueled by your\n" + "wrath. May cause flinching."); + +static const u8 sThunderousKickDescription[] = _( + "Uses a lightning-like kick\n" + "to hit. Lowers foe's Defense."); + +static const u8 sGlacialLanceDescription[] = _( + "Strikes by hurling a blizzard-\n" + "cloaked icicle lance at foes."); + +static const u8 sAstralBarrageDescription[] = _( + "Strikes by sending a frightful\n" + "amount of ghosts at foes."); + +static const u8 sEerieSpellDescription[] = _( + "Attacks with psychic power.\n" + "Foe's last move has 3 PP cut."); + +static const u8 sDireClawDescription[] = _( + "High critical hit chance. May\n" + "paralyze, poison or drowse."); + +static const u8 sPsyshieldBashDescription[] = _( + "Hits a foe with psychic\n" + "energy. May raise Defense."); + +static const u8 sPowerShiftDescription[] = _( + "The user swaps its offensive\n" + "and defensive stats."); + +static const u8 sStoneAxeDescription[] = _( + "High critical hit ratio. Sets\n" + "Splinters that hurt the foe."); + +static const u8 sSpringtideStormDescription[] = _( + "Wraps a foe in fierce winds.\n" + "Varies with the user's form."); + +static const u8 sMysticalPowerDescription[] = _( + "Increases the user's better\n" + "of Atk. and Def. stats."); + +static const u8 sRagingFuryDescription[] = _( + "Viciously spews flames at\n" + "a foe, becoming fixated."); + +static const u8 sWaveCrashDescription[] = _( + "A water slam. Hurts the user\n" + "and raises its Action Speed."); + +static const u8 sChloroblastDescription[] = _( + "An blast that hurts the user\n" + "and lowers its Action Speed."); + +static const u8 sMountainGaleDescription[] = _( + "The user hurls giant chunks\n" + "of ice to damage the foe."); + +static const u8 sVictoryDanceDescription[] = _( + "Dances to raise damage 50%,\n" + "plus offenses and defenses."); + +static const u8 sHeadlongRushDescription[] = _( + "Hits with a full-body tackle,\n" + "lowering the foe's Defense."); + +static const u8 sBarbBarrageDescription[] = _( + "Can poison on impact. Powers\n" + "up if the foe has an ailment."); + +static const u8 sEsperWingDescription[] = _( + "High critical hit ratio.\n" + "Ups the user's Action Speed."); + +static const u8 sBitterMaliceDescription[] = _( + "Hurts a foe harder if it has\n" + "an ailment. Can give FrstBte."); + +static const u8 sShelterDescription[] = _( + "The user hardens their skin\n" + "and obscures itself."); + +static const u8 sTripleArrowsDescription[] = _( + "Ups critical-hit ratio for 3\n" + "turns. Lowers foe Defenses."); + +static const u8 sInfernalParadeDescription[] = _( + "Hurts a foe harder if it has\n" + "an ailment. May leave a burn."); + +static const u8 sCeaselessEdgeDescription[] = _( + "High critical hit ratio. Sets\n" + "Splinters that hurt the foe."); + +static const u8 sBleakwindStormDescription[] = _( + "Hits with brutal, cold winds.\n" + "May inflict frostbite."); + +static const u8 sWildboltStormDescription[] = _( + "Hits with a brutal tempest.\n" + "May inflict paralysis."); + +static const u8 sSandsearStormDescription[] = _( + "Hits with brutally hot sand.\n" + "May inflict a burn."); + +static const u8 sLunarBlessingDescription[] = _( + "The user heals themself and\n" + "conceals their presence."); + +static const u8 sTakeHeartDescription[] = _( + "The user lifts its spirits to\n" + "heal and strengthen itself."); + +const u8 gNotDoneYetDescription[] = _( + "This move can't be used. Its\n" + "effect is in development."); // MOVE_NONE is ignored in this table. Make sure to always subtract 1 before getting the right pointer. const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] = @@ -1774,4 +3435,430 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] = [MOVE_WATER_PULSE - 1] = sWaterPulseDescription, [MOVE_DOOM_DESIRE - 1] = sDoomDesireDescription, [MOVE_PSYCHO_BOOST - 1] = sPsychoBoostDescription, + [MOVE_ROOST - 1] = sRoostDescription, + [MOVE_GRAVITY - 1] = sGravityDescription, + [MOVE_MIRACLE_EYE - 1] = sMiracleEyeDescription, + [MOVE_WAKE_UP_SLAP - 1] = sWakeUpSlapDescription, + [MOVE_HAMMER_ARM - 1] = sHammerArmDescription, + [MOVE_GYRO_BALL - 1] = sGyroBallDescription, + [MOVE_HEALING_WISH - 1] = sHealingWishDescription, + [MOVE_BRINE - 1] = sBrineDescription, + [MOVE_NATURAL_GIFT - 1] = sNaturalGiftDescription, + [MOVE_FEINT - 1] = sFeintDescription, + [MOVE_PLUCK - 1] = sPluckDescription, + [MOVE_TAILWIND - 1] = sTailwindDescription, + [MOVE_ACUPRESSURE - 1] = sAcupressureDescription, + [MOVE_METAL_BURST - 1] = sMetalBurstDescription, + [MOVE_U_TURN - 1] = sUTurnDescription, + [MOVE_CLOSE_COMBAT - 1] = sCloseCombatDescription, + [MOVE_PAYBACK - 1] = sPaybackDescription, + [MOVE_ASSURANCE - 1] = sAssuranceDescription, + [MOVE_EMBARGO - 1] = sEmbargoDescription, + [MOVE_FLING - 1] = sFlingDescription, + [MOVE_PSYCHO_SHIFT - 1] = sPsychoShiftDescription, + [MOVE_TRUMP_CARD - 1] = sTrumpCardDescription, + [MOVE_HEAL_BLOCK - 1] = sHealBlockDescription, + [MOVE_WRING_OUT - 1] = sWringOutDescription, + [MOVE_POWER_TRICK - 1] = sPowerTrickDescription, + [MOVE_GASTRO_ACID - 1] = sGastroAcidDescription, + [MOVE_LUCKY_CHANT - 1] = sLuckyChantDescription, + [MOVE_ME_FIRST - 1] = sMeFirstDescription, + [MOVE_COPYCAT - 1] = sCopycatDescription, + [MOVE_POWER_SWAP - 1] = sPowerSwapDescription, + [MOVE_GUARD_SWAP - 1] = sGuardSwapDescription, + [MOVE_PUNISHMENT - 1] = sPunishmentDescription, + [MOVE_LAST_RESORT - 1] = sLastResortDescription, + [MOVE_WORRY_SEED - 1] = sWorrySeedDescription, + [MOVE_SUCKER_PUNCH - 1] = sSuckerPunchDescription, + [MOVE_TOXIC_SPIKES - 1] = sToxicSpikesDescription, + [MOVE_HEART_SWAP - 1] = sHeartSwapDescription, + [MOVE_AQUA_RING - 1] = sAquaRingDescription, + [MOVE_MAGNET_RISE - 1] = sMagnetRiseDescription, + [MOVE_FLARE_BLITZ - 1] = sFlareBlitzDescription, + [MOVE_FORCE_PALM - 1] = sForcePalmDescription, + [MOVE_AURA_SPHERE - 1] = sAuraSphereDescription, + [MOVE_ROCK_POLISH - 1] = sRockPolishDescription, + [MOVE_POISON_JAB - 1] = sPoisonJabDescription, + [MOVE_DARK_PULSE - 1] = sDarkPulseDescription, + [MOVE_NIGHT_SLASH - 1] = sNightSlashDescription, + [MOVE_AQUA_TAIL - 1] = sAquaTailDescription, + [MOVE_SEED_BOMB - 1] = sSeedBombDescription, + [MOVE_AIR_SLASH - 1] = sAirSlashDescription, + [MOVE_X_SCISSOR - 1] = sXScissorDescription, + [MOVE_BUG_BUZZ - 1] = sBugBuzzDescription, + [MOVE_DRAGON_PULSE - 1] = sDragonPulseDescription, + [MOVE_DRAGON_RUSH - 1] = sDragonRushDescription, + [MOVE_POWER_GEM - 1] = sPowerGemDescription, + [MOVE_DRAIN_PUNCH - 1] = sMegaDrainDescription, + [MOVE_VACUUM_WAVE - 1] = sVacuumWaveDescription, + [MOVE_FOCUS_BLAST - 1] = sFocusBlastDescription, + [MOVE_ENERGY_BALL - 1] = sEnergyBallDescription, + [MOVE_BRAVE_BIRD - 1] = sBraveBirdDescription, + [MOVE_EARTH_POWER - 1] = sEarthPowerDescription, + [MOVE_SWITCHEROO - 1] = sSwitcherooDescription, + [MOVE_GIGA_IMPACT - 1] = sHyperBeamDescription, + [MOVE_NASTY_PLOT - 1] = sNastyPlotDescription, + [MOVE_BULLET_PUNCH - 1] = sBulletPunchDescription, + [MOVE_AVALANCHE - 1] = sRevengeDescription, + [MOVE_ICE_SHARD - 1] = sIceShardDescription, + [MOVE_SHADOW_CLAW - 1] = sShadowClawDescription, + [MOVE_THUNDER_FANG - 1] = sThunderFangDescription, + [MOVE_ICE_FANG - 1] = sIceFangDescription, + [MOVE_FIRE_FANG - 1] = sFireFangDescription, + [MOVE_SHADOW_SNEAK - 1] = sShadowSneakDescription, + [MOVE_MUD_BOMB - 1] = sMudBombDescription, + [MOVE_PSYCHO_CUT - 1] = sPsychoCutDescription, + [MOVE_ZEN_HEADBUTT - 1] = sZenHeadbuttDescription, + [MOVE_MIRROR_SHOT - 1] = sMirrorShotDescription, + [MOVE_FLASH_CANNON - 1] = sFlashCannonDescription, + [MOVE_ROCK_CLIMB - 1] = sRockClimbDescription, + [MOVE_DEFOG - 1] = sDefogDescription, + [MOVE_TRICK_ROOM - 1] = sTrickRoomDescription, + [MOVE_DRACO_METEOR - 1] = sDracoMeteorDescription, + [MOVE_DISCHARGE - 1] = sDischargeDescription, + [MOVE_LAVA_PLUME - 1] = sLavaPlumeDescription, + [MOVE_LEAF_STORM - 1] = sLeafStormDescription, + [MOVE_POWER_WHIP - 1] = sPowerWhipDescription, + [MOVE_ROCK_WRECKER - 1] = sHyperBeamDescription, + [MOVE_CROSS_POISON - 1] = sCrossPoisonDescription, + [MOVE_GUNK_SHOT - 1] = sGunkShotDescription, + [MOVE_IRON_HEAD - 1] = sIronHeadDescription, + [MOVE_MAGNET_BOMB - 1] = sMagnetBombDescription, + [MOVE_STONE_EDGE - 1] = sStoneEdgeDescription, + [MOVE_CAPTIVATE - 1] = sCaptivateDescription, + [MOVE_STEALTH_ROCK - 1] = sStealthRockDescription, + [MOVE_GRASS_KNOT - 1] = sGrassKnotDescription, + [MOVE_CHATTER - 1] = sChatterDescription, + [MOVE_JUDGMENT - 1] = sJudgmentDescription, + [MOVE_BUG_BITE - 1] = sPluckDescription, + [MOVE_CHARGE_BEAM - 1] = sChargeBeamDescription, + [MOVE_WOOD_HAMMER - 1] = sWoodHammerDescription, + [MOVE_AQUA_JET - 1] = sAquaJetDescription, + [MOVE_ATTACK_ORDER - 1] = sAttackOrderDescription, + [MOVE_DEFEND_ORDER - 1] = sDefendOrderDescription, + [MOVE_HEAL_ORDER - 1] = sHealOrderDescription, + [MOVE_HEAD_SMASH - 1] = sHeadSmashDescription, + [MOVE_DOUBLE_HIT - 1] = sDoubleHitDescription, + [MOVE_ROAR_OF_TIME - 1] = sRoarOfTimeDescription, + [MOVE_SPACIAL_REND - 1] = sSpacialRendDescription, + [MOVE_LUNAR_DANCE - 1] = sHealingWishDescription, + [MOVE_CRUSH_GRIP - 1] = sWringOutDescription, + [MOVE_MAGMA_STORM - 1] = sMagmaStormDescription, + [MOVE_DARK_VOID - 1] = sDarkVoidDescription, + [MOVE_SEED_FLARE - 1] = sSeedFlareDescription, + [MOVE_OMINOUS_WIND - 1] = sOminousWindDescription, + [MOVE_SHADOW_FORCE - 1] = sShadowForceDescription, + [MOVE_HONE_CLAWS - 1] = sHoneClawsDescription, + [MOVE_WIDE_GUARD - 1] = sWideGuardDescription, + [MOVE_GUARD_SPLIT - 1] = sGuardSplitDescription, + [MOVE_POWER_SPLIT - 1] = sPowerSplitDescription, + [MOVE_WONDER_ROOM - 1] = sWonderRoomDescription, + [MOVE_PSYSHOCK - 1] = sPsyshockDescription, + [MOVE_VENOSHOCK - 1] = sVenoshockDescription, + [MOVE_AUTOTOMIZE - 1] = sAutotomizeDescription, + [MOVE_RAGE_POWDER - 1] = sRagePowderDescription, + [MOVE_TELEKINESIS - 1] = sTelekinesisDescription, + [MOVE_MAGIC_ROOM - 1] = sMagicRoomDescription, + [MOVE_SMACK_DOWN - 1] = sSmackDownDescription, + [MOVE_STORM_THROW - 1] = sStormThrowDescription, + [MOVE_FLAME_BURST - 1] = sFlameBurstDescription, + [MOVE_SLUDGE_WAVE - 1] = sSludgeWaveDescription, + [MOVE_QUIVER_DANCE - 1] = sQuiverDanceDescription, + [MOVE_HEAVY_SLAM - 1] = sHeavySlamDescription, + [MOVE_SYNCHRONOISE - 1] = sSynchronoiseDescription, + [MOVE_ELECTRO_BALL - 1] = sElectroBallDescription, + [MOVE_SOAK - 1] = sSoakDescription, + [MOVE_FLAME_CHARGE - 1] = sFlameChargeDescription, + [MOVE_COIL - 1] = sCoilDescription, + [MOVE_LOW_SWEEP - 1] = sLowSweepDescription, + [MOVE_ACID_SPRAY - 1] = sAcidSprayDescription, + [MOVE_FOUL_PLAY - 1] = sFoulPlayDescription, + [MOVE_SIMPLE_BEAM - 1] = sSimpleBeamDescription, + [MOVE_ENTRAINMENT - 1] = sEntrainmentDescription, + [MOVE_AFTER_YOU - 1] = sAfterYouDescription, + [MOVE_ROUND - 1] = sRoundDescription, + [MOVE_ECHOED_VOICE - 1] = sEchoedVoiceDescription, + [MOVE_CHIP_AWAY - 1] = sChipAwayDescription, + [MOVE_CLEAR_SMOG - 1] = sClearSmogDescription, + [MOVE_STORED_POWER - 1] = sStoredPowerDescription, + [MOVE_QUICK_GUARD - 1] = sQuickGuardDescription, + [MOVE_ALLY_SWITCH - 1] = sAllySwitchDescription, + [MOVE_SCALD - 1] = sScaldDescription, + [MOVE_SHELL_SMASH - 1] = sShellSmashDescription, + [MOVE_HEAL_PULSE - 1] = sHealPulseDescription, + [MOVE_HEX - 1] = sHexDescription, + [MOVE_SKY_DROP - 1] = sSkyDropDescription, + [MOVE_SHIFT_GEAR - 1] = sShiftGearDescription, + [MOVE_CIRCLE_THROW - 1] = sCircleThrowDescription, + [MOVE_INCINERATE - 1] = sIncinerateDescription, + [MOVE_QUASH - 1] = sQuashDescription, + [MOVE_ACROBATICS - 1] = sAcrobaticsDescription, + [MOVE_REFLECT_TYPE - 1] = sReflectTypeDescription, + [MOVE_RETALIATE - 1] = sRetaliateDescription, + [MOVE_FINAL_GAMBIT - 1] = sFinalGambitDescription, + [MOVE_BESTOW - 1] = sBestowDescription, + [MOVE_INFERNO - 1] = sInfernoDescription, + [MOVE_WATER_PLEDGE - 1] = sWaterPledgeDescription, + [MOVE_FIRE_PLEDGE - 1] = sFirePledgeDescription, + [MOVE_GRASS_PLEDGE - 1] = sGrassPledgeDescription, + [MOVE_VOLT_SWITCH - 1] = sUTurnDescription, + [MOVE_STRUGGLE_BUG - 1] = sStruggleBugDescription, + [MOVE_BULLDOZE - 1] = sBulldozeDescription, + [MOVE_FROST_BREATH - 1] = sStormThrowDescription, + [MOVE_DRAGON_TAIL - 1] = sCircleThrowDescription, + [MOVE_WORK_UP - 1] = sWorkUpDescription, + [MOVE_ELECTROWEB - 1] = sElectrowebDescription, + [MOVE_WILD_CHARGE - 1] = sWildChargeDescription, + [MOVE_DRILL_RUN - 1] = sDrillRunDescription, + [MOVE_DUAL_CHOP - 1] = sDualChopDescription, + [MOVE_HEART_STAMP - 1] = sHeartStampDescription, + [MOVE_HORN_LEECH - 1] = sMegaDrainDescription, + [MOVE_SACRED_SWORD - 1] = sChipAwayDescription, + [MOVE_RAZOR_SHELL - 1] = sRazorShellDescription, + [MOVE_HEAT_CRASH - 1] = sHeavySlamDescription, + [MOVE_LEAF_TORNADO - 1] = sLeafTornadoDescription, + [MOVE_STEAMROLLER - 1] = sSteamrollerDescription, + [MOVE_COTTON_GUARD - 1] = sCottonGuardDescription, + [MOVE_NIGHT_DAZE - 1] = sNightDazeDescription, + [MOVE_PSYSTRIKE - 1] = sPsyshockDescription, + [MOVE_TAIL_SLAP - 1] = sTailSlapDescription, + [MOVE_HURRICANE - 1] = sHurricaneDescription, + [MOVE_HEAD_CHARGE - 1] = sHeadChargeDescription, + [MOVE_GEAR_GRIND - 1] = sGearGrindDescription, + [MOVE_SEARING_SHOT - 1] = sLavaPlumeDescription, + [MOVE_TECHNO_BLAST - 1] = sTechnoBlastDescription, + [MOVE_RELIC_SONG - 1] = sRelicSongDescription, + [MOVE_SECRET_SWORD - 1] = sSecretSwordDescription, + [MOVE_GLACIATE - 1] = sGlaciateDescription, + [MOVE_BOLT_STRIKE - 1] = sBoltStrikeDescription, + [MOVE_BLUE_FLARE - 1] = sBlueFlareDescription, + [MOVE_FIERY_DANCE - 1] = sFieryDanceDescription, + [MOVE_FREEZE_SHOCK - 1] = sFreezeShockDescription, + [MOVE_ICE_BURN - 1] = sIceBurnDescription, + [MOVE_SNARL - 1] = sSnarlDescription, + [MOVE_ICICLE_CRASH - 1] = sIcicleCrashDescription, + [MOVE_V_CREATE - 1] = sVCreateDescription, + [MOVE_FUSION_FLARE - 1] = sFusionFlareDescription, + [MOVE_FUSION_BOLT - 1] = sFusionBoltDescription, + [MOVE_FLYING_PRESS - 1] = sFlyingPressDescription, + [MOVE_MAT_BLOCK - 1] = sMatBlockDescription, + [MOVE_BELCH - 1] = sBelchDescription, + [MOVE_ROTOTILLER - 1] = sRototillerDescription, + [MOVE_STICKY_WEB - 1] = sStickyWebDescription, + [MOVE_FELL_STINGER - 1] = sFellStingerDescription, + [MOVE_PHANTOM_FORCE - 1] = sShadowForceDescription, + [MOVE_TRICK_OR_TREAT - 1] = sTrickOrTreatDescription, + [MOVE_NOBLE_ROAR - 1] = sNobleRoarDescription, + [MOVE_ION_DELUGE - 1] = sIonDelugeDescription, + [MOVE_PARABOLIC_CHARGE - 1] = sParabolicChargeDescription, + [MOVE_FORESTS_CURSE - 1] = sForestsCurseDescription, + [MOVE_PETAL_BLIZZARD - 1] = sPetalBlizzardDescription, + [MOVE_FREEZE_DRY - 1] = sFreezeDryDescription, + [MOVE_DISARMING_VOICE - 1] = sDisarmingVoiceDescription, + [MOVE_PARTING_SHOT - 1] = sPartingShotDescription, + [MOVE_TOPSY_TURVY - 1] = sTopsyTurvyDescription, + [MOVE_DRAINING_KISS - 1] = sDrainingKissDescription, + [MOVE_CRAFTY_SHIELD - 1] = sCraftyShieldDescription, + [MOVE_FLOWER_SHIELD - 1] = sFlowerShieldDescription, + [MOVE_GRASSY_TERRAIN - 1] = sGrassyTerrainDescription, + [MOVE_MISTY_TERRAIN - 1] = sMistyTerrainDescription, + [MOVE_ELECTRIFY - 1] = sElectrifyDescription, + [MOVE_PLAY_ROUGH - 1] = sPlayRoughDescription, + [MOVE_FAIRY_WIND - 1] = sFairyWindDescription, + [MOVE_MOONBLAST - 1] = sMoonblastDescription, + [MOVE_BOOMBURST - 1] = sBoomburstDescription, + [MOVE_FAIRY_LOCK - 1] = sFairyLockDescription, + [MOVE_KINGS_SHIELD - 1] = sKingsShieldDescription, + [MOVE_PLAY_NICE - 1] = sPlayNiceDescription, + [MOVE_CONFIDE - 1] = sConfideDescription, + [MOVE_DIAMOND_STORM - 1] = sDiamondStormDescription, + [MOVE_STEAM_ERUPTION - 1] = sSteamEruptionDescription, + [MOVE_HYPERSPACE_HOLE - 1] = sHyperspaceHoleDescription, + [MOVE_WATER_SHURIKEN - 1] = sWaterShurikenDescription, + [MOVE_MYSTICAL_FIRE - 1] = sMysticalFireDescription, + [MOVE_SPIKY_SHIELD - 1] = sSpikyShieldDescription, + [MOVE_AROMATIC_MIST - 1] = sAromaticMistDescription, + [MOVE_EERIE_IMPULSE - 1] = sEerieImpulseDescription, + [MOVE_VENOM_DRENCH - 1] = sVenomDrenchDescription, + [MOVE_POWDER - 1] = sPowderDescription, + [MOVE_GEOMANCY - 1] = sGeomancyDescription, + [MOVE_MAGNETIC_FLUX - 1] = sMagneticFluxDescription, + [MOVE_HAPPY_HOUR - 1] = sHappyHourDescription, + [MOVE_ELECTRIC_TERRAIN - 1] = sElectricTerrainDescription, + [MOVE_DAZZLING_GLEAM - 1] = sDazzlingGleamDescription, + [MOVE_CELEBRATE - 1] = sCelebrateDescription, + [MOVE_HOLD_HANDS - 1] = sHoldHandsDescription, + [MOVE_BABY_DOLL_EYES - 1] = sBabyDollEyesDescription, + [MOVE_NUZZLE - 1] = sNuzzleDescription, + [MOVE_HOLD_BACK - 1] = sFalseSwipeDescription, + [MOVE_INFESTATION - 1] = sInfestationDescription, + [MOVE_POWER_UP_PUNCH - 1] = sPowerUpPunchDescription, + [MOVE_OBLIVION_WING - 1] = sDrainingKissDescription, + [MOVE_THOUSAND_ARROWS - 1] = sThousandArrowsDescription, + [MOVE_THOUSAND_WAVES - 1] = sThousandWavesDescription, + [MOVE_LANDS_WRATH - 1] = sLandsWrathDescription, + [MOVE_LIGHT_OF_RUIN - 1] = sLightOfRuinDescription, + [MOVE_ORIGIN_PULSE - 1] = sOriginPulseDescription, + [MOVE_PRECIPICE_BLADES - 1] = sPrecipiceBladesDescription, + [MOVE_DRAGON_ASCENT - 1] = sCloseCombatDescription, + [MOVE_HYPERSPACE_FURY - 1] = sHyperspaceHoleDescription, + [MOVE_SHORE_UP - 1] = sShoreUpDescription, + [MOVE_FIRST_IMPRESSION - 1] = sFirstImpressionDescription, + [MOVE_BANEFUL_BUNKER - 1] = sBanefulBunkerDescription, + [MOVE_SPIRIT_SHACKLE - 1] = sSpiritShackleDescription, + [MOVE_DARKEST_LARIAT - 1] = sDarkestLariatDescription, + [MOVE_SPARKLING_ARIA - 1] = sSparklingAriaDescription, + [MOVE_ICE_HAMMER - 1] = sIceHammerDescription, + [MOVE_FLORAL_HEALING - 1] = sFloralHealingDescription, + [MOVE_HIGH_HORSEPOWER - 1] = sHighHorsepowerDescription, + [MOVE_STRENGTH_SAP - 1] = sStrengthSapDescription, + [MOVE_SOLAR_BLADE - 1] = sSolarBladeDescription, + [MOVE_LEAFAGE - 1] = sLeafageDescription, + [MOVE_SPOTLIGHT - 1] = sSpotlightDescription, + [MOVE_TOXIC_THREAD - 1] = sToxicThreadDescription, + [MOVE_LASER_FOCUS - 1] = sLaserFocusDescription, + [MOVE_GEAR_UP - 1] = sGearUpDescription, + [MOVE_THROAT_CHOP - 1] = sThroatChopDescription, + [MOVE_POLLEN_PUFF - 1] = sPollenPuffDescription, + [MOVE_ANCHOR_SHOT - 1] = sAnchorShotDescription, + [MOVE_PSYCHIC_TERRAIN - 1] = sPsychicTerrainDescription, + [MOVE_LUNGE - 1] = sLungeDescription, + [MOVE_FIRE_LASH - 1] = sFireLashDescription, + [MOVE_POWER_TRIP - 1] = sPowerTripDescription, + [MOVE_BURN_UP - 1] = sBurnUpDescription, + [MOVE_SPEED_SWAP - 1] = sSpeedSwapDescription, + [MOVE_SMART_STRIKE - 1] = sSmartStrikeDescription, + [MOVE_PURIFY - 1] = sPurifyDescription, + [MOVE_REVELATION_DANCE - 1] = sRevelationDanceDescription, + [MOVE_CORE_ENFORCER - 1] = sCoreEnforcerDescription, + [MOVE_TROP_KICK - 1] = sTropKickDescription, + [MOVE_INSTRUCT - 1] = sInstructDescription, + [MOVE_BEAK_BLAST - 1] = sBeakBlastDescription, + [MOVE_CLANGING_SCALES - 1] = sClangingScalesDescription, + [MOVE_DRAGON_HAMMER - 1] = sDragonHammerDescription, + [MOVE_BRUTAL_SWING - 1] = sBrutalSwingDescription, + [MOVE_AURORA_VEIL - 1] = sAuroraVeilDescription, + [MOVE_SHELL_TRAP - 1] = sShellTrapDescription, + [MOVE_FLEUR_CANNON - 1] = sFleurCannonDescription, + [MOVE_PSYCHIC_FANGS - 1] = sPsychicFangsDescription, + [MOVE_STOMPING_TANTRUM - 1] = sStompingTantrumDescription, + [MOVE_SHADOW_BONE - 1] = sShadowBoneDescription, + [MOVE_ACCELEROCK - 1] = sAccelerockDescription, + [MOVE_LIQUIDATION - 1] = sLiquidationDescription, + [MOVE_PRISMATIC_LASER - 1] = sPrismaticLaserDescription, + [MOVE_SPECTRAL_THIEF - 1] = sSpectralThiefDescription, + [MOVE_SUNSTEEL_STRIKE - 1] = sSunsteelStrikeDescription, + [MOVE_MOONGEIST_BEAM - 1] = sMoongeistBeamDescription, + [MOVE_TEARFUL_LOOK - 1] = sTearfulLookDescription, + [MOVE_ZING_ZAP - 1] = sZingZapDescription, + [MOVE_NATURES_MADNESS - 1] = sNaturesMadnessDescription, + [MOVE_MULTI_ATTACK - 1] = sMultiAttackDescription, + [MOVE_MIND_BLOWN - 1] = sMindBlownDescription, + [MOVE_PLASMA_FISTS - 1] = sPlasmaFistsDescription, + [MOVE_PHOTON_GEYSER - 1] = sPhotonGeyserDescription, + [MOVE_ZIPPY_ZAP - 1] = sZippyZapDescription, + [MOVE_SPLISHY_SPLASH - 1] = sSplishySplashDescription, + [MOVE_FLOATY_FALL - 1] = sFloatyFallDescription, + [MOVE_PIKA_PAPOW - 1] = sPikaPapowDescription, + [MOVE_BOUNCY_BUBBLE - 1] = sBouncyBubbleDescription, + [MOVE_BUZZY_BUZZ - 1] = sBuzzyBuzzDescription, + [MOVE_SIZZLY_SLIDE - 1] = sSizzlySlideDescription, + [MOVE_GLITZY_GLOW - 1] = sGlitzyGlowDescription, + [MOVE_BADDY_BAD - 1] = sBaddyBadDescription, + [MOVE_SAPPY_SEED - 1] = sSappySeedDescription, + [MOVE_FREEZY_FROST - 1] = sFreezyFrostDescription, + [MOVE_SPARKLY_SWIRL - 1] = sSparklySwirlDescription, + [MOVE_VEEVEE_VOLLEY - 1] = sVeeveeVolleyDescription, + [MOVE_DOUBLE_IRON_BASH - 1] = sDoubleIronBashDescription, + + //GEN 8 + [MOVE_DYNAMAX_CANNON - 1] = sDynamaxCannonDescription, + [MOVE_SNIPE_SHOT - 1] = sSnipeShotDescription, + [MOVE_JAW_LOCK - 1] = sJawLockDescription, + [MOVE_STUFF_CHEEKS - 1] = sStuffCheeksDescription, + [MOVE_NO_RETREAT - 1] = sNoRetreatDescription, + [MOVE_TAR_SHOT - 1] = sTarShotDescription, + [MOVE_MAGIC_POWDER - 1] = sMagicPowderDescription, + [MOVE_DRAGON_DARTS - 1] = sDragonDartsDescription, + [MOVE_TEATIME - 1] = sTeatimeDescription, + [MOVE_OCTOLOCK - 1] = sOctolockDescription, + [MOVE_BOLT_BEAK - 1] = sBoltBeakDescription, + [MOVE_FISHIOUS_REND - 1] = sFishiousRendDescription, + [MOVE_COURT_CHANGE - 1] = sCourtChangeDescription, + [MOVE_CLANGOROUS_SOUL - 1] = sClangorousSoulDescription, + [MOVE_BODY_PRESS - 1] = sBodyPressDescription, + [MOVE_DECORATE - 1] = sDecorateDescription, + [MOVE_DRUM_BEATING - 1] = sDrumBeatingDescription, + [MOVE_SNAP_TRAP - 1] = sSnapTrapDescription, + [MOVE_PYRO_BALL - 1] = sPyroBallDescription, + [MOVE_BEHEMOTH_BLADE - 1] = sBehemothBladeDescription, + [MOVE_BEHEMOTH_BASH - 1] = sBehemothBashDescription, + [MOVE_AURA_WHEEL - 1] = sAuraWheelDescription, + [MOVE_BREAKING_SWIPE - 1] = sBreakingSwipeDescription, + [MOVE_BRANCH_POKE - 1] = sBranchPokeDescription, + [MOVE_OVERDRIVE - 1] = sOverdriveDescription, + [MOVE_APPLE_ACID - 1] = sAppleAcidDescription, + [MOVE_GRAV_APPLE - 1] = sGravAppleDescription, + [MOVE_SPIRIT_BREAK - 1] = sSpiritBreakDescription, + [MOVE_STRANGE_STEAM - 1] = sStrangeSteamDescription, + [MOVE_LIFE_DEW - 1] = sLifeDewDescription, + [MOVE_OBSTRUCT - 1] = sObstructDescription, + [MOVE_FALSE_SURRENDER - 1] = sFalseSurrenderDescription, + [MOVE_METEOR_ASSAULT - 1] = sMeteorAssaultDescription, + [MOVE_ETERNABEAM - 1] = sEternabeamDescription, + [MOVE_STEEL_BEAM - 1] = sSteelBeamDescription, + [MOVE_EXPANDING_FORCE - 1] = sExpandingForceDescription, + [MOVE_STEEL_ROLLER - 1] = sSteelRollerDescription, + [MOVE_SCALE_SHOT - 1] = sScaleShotDescription, + [MOVE_METEOR_BEAM - 1] = sMeteorBeamDescription, + [MOVE_SHELL_SIDE_ARM - 1] = sShellSideArmDescription, + [MOVE_MISTY_EXPLOSION - 1] = sMistyExplosionDescription, + [MOVE_GRASSY_GLIDE - 1] = sGrassyGlideDescription, + [MOVE_RISING_VOLTAGE - 1] = sRisingVoltageDescription, + [MOVE_TERRAIN_PULSE - 1] = sTerrainPulseDescription, + [MOVE_SKITTER_SMACK - 1] = sSkitterSmackDescription, + [MOVE_BURNING_JEALOUSY - 1] = sBurningJealousyDescription, + [MOVE_LASH_OUT - 1] = sLashOutDescription, + [MOVE_POLTERGEIST - 1] = sPoltergeistDescription, + [MOVE_CORROSIVE_GAS - 1] = sCorrosiveGasDescription, + [MOVE_COACHING - 1] = sCoachingDescription, + [MOVE_FLIP_TURN - 1] = sFlipTurnDescription, + [MOVE_TRIPLE_AXEL - 1] = sTripleAxelDescription, + [MOVE_DUAL_WINGBEAT - 1] = sDualWingbeatDescription, + [MOVE_SCORCHING_SANDS - 1] = sScorchingSandsDescription, + [MOVE_JUNGLE_HEALING - 1] = sJungleHealingDescription, + [MOVE_WICKED_BLOW - 1] = sWickedBlowDescription, + [MOVE_SURGING_STRIKES - 1] = sSurgingStrikesDescription, + [MOVE_THUNDER_CAGE - 1] = sThunderCageDescription, + [MOVE_DRAGON_ENERGY - 1] = sDragonEnergyDescription, + [MOVE_FREEZING_GLARE - 1] = sFreezingGlareDescription, + [MOVE_FIERY_WRATH - 1] = sFieryWrathDescription, + [MOVE_THUNDEROUS_KICK - 1] = sThunderousKickDescription, + [MOVE_GLACIAL_LANCE - 1] = sGlacialLanceDescription, + [MOVE_ASTRAL_BARRAGE - 1] = sAstralBarrageDescription, + [MOVE_EERIE_SPELL - 1] = sEerieSpellDescription, + [MOVE_DIRE_CLAW - 1] = sDireClawDescription, + [MOVE_PSYSHIELD_BASH - 1] = sPsyshieldBashDescription, + [MOVE_POWER_SHIFT - 1] = sPowerShiftDescription, + [MOVE_STONE_AXE - 1] = sStoneAxeDescription, + [MOVE_SPRINGTIDE_STORM - 1] = sSpringtideStormDescription, + [MOVE_MYSTICAL_POWER - 1] = sMysticalPowerDescription, + [MOVE_RAGING_FURY - 1] = sRagingFuryDescription, + [MOVE_WAVE_CRASH - 1] = sWaveCrashDescription, + [MOVE_CHLOROBLAST - 1] = sChloroblastDescription, + [MOVE_MOUNTAIN_GALE - 1] = sMountainGaleDescription, + [MOVE_VICTORY_DANCE - 1] = sVictoryDanceDescription, + [MOVE_HEADLONG_RUSH - 1] = sHeadlongRushDescription, + [MOVE_BARB_BARRAGE - 1] = sBarbBarrageDescription, + [MOVE_ESPER_WING - 1] = sEsperWingDescription, + [MOVE_BITTER_MALICE - 1] = sBitterMaliceDescription, + [MOVE_SHELTER - 1] = sShelterDescription, + [MOVE_TRIPLE_ARROWS - 1] = sTripleArrowsDescription, + [MOVE_INFERNAL_PARADE - 1] = sInfernalParadeDescription, + [MOVE_CEASELESS_EDGE - 1] = sCeaselessEdgeDescription, + [MOVE_BLEAKWIND_STORM - 1] = sBleakwindStormDescription, + [MOVE_WILDBOLT_STORM - 1] = sWildboltStormDescription, + [MOVE_SANDSEAR_STORM - 1] = sSandsearStormDescription, + [MOVE_LUNAR_BLESSING - 1] = sLunarBlessingDescription, + [MOVE_TAKE_HEART - 1] = sTakeHeartDescription, }; diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h index fba9e57d38..ffa00e3f63 100644 --- a/src/data/text/move_names.h +++ b/src/data/text/move_names.h @@ -1,358 +1,1644 @@ +#if B_EXPANDED_MOVE_NAMES == TRUE +// 16 letters const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = { [MOVE_NONE] = _("-"), - [MOVE_POUND] = _("POUND"), - [MOVE_KARATE_CHOP] = _("KARATE CHOP"), - [MOVE_DOUBLE_SLAP] = _("DOUBLESLAP"), - [MOVE_COMET_PUNCH] = _("COMET PUNCH"), - [MOVE_MEGA_PUNCH] = _("MEGA PUNCH"), - [MOVE_PAY_DAY] = _("PAY DAY"), - [MOVE_FIRE_PUNCH] = _("FIRE PUNCH"), - [MOVE_ICE_PUNCH] = _("ICE PUNCH"), - [MOVE_THUNDER_PUNCH] = _("THUNDERPUNCH"), - [MOVE_SCRATCH] = _("SCRATCH"), - [MOVE_VISE_GRIP] = _("VICEGRIP"), - [MOVE_GUILLOTINE] = _("GUILLOTINE"), - [MOVE_RAZOR_WIND] = _("RAZOR WIND"), - [MOVE_SWORDS_DANCE] = _("SWORDS DANCE"), - [MOVE_CUT] = _("CUT"), - [MOVE_GUST] = _("GUST"), - [MOVE_WING_ATTACK] = _("WING ATTACK"), - [MOVE_WHIRLWIND] = _("WHIRLWIND"), - [MOVE_FLY] = _("FLY"), - [MOVE_BIND] = _("BIND"), - [MOVE_SLAM] = _("SLAM"), - [MOVE_VINE_WHIP] = _("VINE WHIP"), - [MOVE_STOMP] = _("STOMP"), - [MOVE_DOUBLE_KICK] = _("DOUBLE KICK"), - [MOVE_MEGA_KICK] = _("MEGA KICK"), - [MOVE_JUMP_KICK] = _("JUMP KICK"), - [MOVE_ROLLING_KICK] = _("ROLLING KICK"), - [MOVE_SAND_ATTACK] = _("SAND-ATTACK"), - [MOVE_HEADBUTT] = _("HEADBUTT"), - [MOVE_HORN_ATTACK] = _("HORN ATTACK"), - [MOVE_FURY_ATTACK] = _("FURY ATTACK"), - [MOVE_HORN_DRILL] = _("HORN DRILL"), - [MOVE_TACKLE] = _("TACKLE"), - [MOVE_BODY_SLAM] = _("BODY SLAM"), - [MOVE_WRAP] = _("WRAP"), - [MOVE_TAKE_DOWN] = _("TAKE DOWN"), - [MOVE_THRASH] = _("THRASH"), - [MOVE_DOUBLE_EDGE] = _("DOUBLE-EDGE"), - [MOVE_TAIL_WHIP] = _("TAIL WHIP"), - [MOVE_POISON_STING] = _("POISON STING"), - [MOVE_TWINEEDLE] = _("TWINEEDLE"), - [MOVE_PIN_MISSILE] = _("PIN MISSILE"), - [MOVE_LEER] = _("LEER"), - [MOVE_BITE] = _("BITE"), - [MOVE_GROWL] = _("GROWL"), - [MOVE_ROAR] = _("ROAR"), - [MOVE_SING] = _("SING"), - [MOVE_SUPERSONIC] = _("SUPERSONIC"), - [MOVE_SONIC_BOOM] = _("SONICBOOM"), - [MOVE_DISABLE] = _("DISABLE"), - [MOVE_ACID] = _("ACID"), - [MOVE_EMBER] = _("EMBER"), - [MOVE_FLAMETHROWER] = _("FLAMETHROWER"), - [MOVE_MIST] = _("MIST"), - [MOVE_WATER_GUN] = _("WATER GUN"), - [MOVE_HYDRO_PUMP] = _("HYDRO PUMP"), - [MOVE_SURF] = _("SURF"), - [MOVE_ICE_BEAM] = _("ICE BEAM"), - [MOVE_BLIZZARD] = _("BLIZZARD"), - [MOVE_PSYBEAM] = _("PSYBEAM"), - [MOVE_BUBBLE_BEAM] = _("BUBBLEBEAM"), - [MOVE_AURORA_BEAM] = _("AURORA BEAM"), - [MOVE_HYPER_BEAM] = _("HYPER BEAM"), - [MOVE_PECK] = _("PECK"), - [MOVE_DRILL_PECK] = _("DRILL PECK"), - [MOVE_SUBMISSION] = _("SUBMISSION"), - [MOVE_LOW_KICK] = _("LOW KICK"), - [MOVE_COUNTER] = _("COUNTER"), - [MOVE_SEISMIC_TOSS] = _("SEISMIC TOSS"), - [MOVE_STRENGTH] = _("STRENGTH"), - [MOVE_ABSORB] = _("ABSORB"), - [MOVE_MEGA_DRAIN] = _("MEGA DRAIN"), - [MOVE_LEECH_SEED] = _("LEECH SEED"), - [MOVE_GROWTH] = _("GROWTH"), - [MOVE_RAZOR_LEAF] = _("RAZOR LEAF"), - [MOVE_SOLAR_BEAM] = _("SOLARBEAM"), - [MOVE_POISON_POWDER] = _("POISONPOWDER"), - [MOVE_STUN_SPORE] = _("STUN SPORE"), - [MOVE_SLEEP_POWDER] = _("SLEEP POWDER"), - [MOVE_PETAL_DANCE] = _("PETAL DANCE"), - [MOVE_STRING_SHOT] = _("STRING SHOT"), - [MOVE_DRAGON_RAGE] = _("DRAGON RAGE"), - [MOVE_FIRE_SPIN] = _("FIRE SPIN"), - [MOVE_THUNDER_SHOCK] = _("THUNDERSHOCK"), - [MOVE_THUNDERBOLT] = _("THUNDERBOLT"), - [MOVE_THUNDER_WAVE] = _("THUNDER WAVE"), - [MOVE_THUNDER] = _("THUNDER"), - [MOVE_ROCK_THROW] = _("ROCK THROW"), - [MOVE_EARTHQUAKE] = _("EARTHQUAKE"), - [MOVE_FISSURE] = _("FISSURE"), - [MOVE_DIG] = _("DIG"), - [MOVE_TOXIC] = _("TOXIC"), - [MOVE_CONFUSION] = _("CONFUSION"), - [MOVE_PSYCHIC] = _("PSYCHIC"), - [MOVE_HYPNOSIS] = _("HYPNOSIS"), - [MOVE_MEDITATE] = _("MEDITATE"), - [MOVE_AGILITY] = _("AGILITY"), - [MOVE_QUICK_ATTACK] = _("QUICK ATTACK"), - [MOVE_RAGE] = _("RAGE"), - [MOVE_TELEPORT] = _("TELEPORT"), - [MOVE_NIGHT_SHADE] = _("NIGHT SHADE"), - [MOVE_MIMIC] = _("MIMIC"), - [MOVE_SCREECH] = _("SCREECH"), - [MOVE_DOUBLE_TEAM] = _("DOUBLE TEAM"), - [MOVE_RECOVER] = _("RECOVER"), - [MOVE_HARDEN] = _("HARDEN"), - [MOVE_MINIMIZE] = _("MINIMIZE"), - [MOVE_SMOKESCREEN] = _("SMOKESCREEN"), - [MOVE_CONFUSE_RAY] = _("CONFUSE RAY"), - [MOVE_WITHDRAW] = _("WITHDRAW"), - [MOVE_DEFENSE_CURL] = _("DEFENSE CURL"), - [MOVE_BARRIER] = _("BARRIER"), - [MOVE_LIGHT_SCREEN] = _("LIGHT SCREEN"), - [MOVE_HAZE] = _("HAZE"), - [MOVE_REFLECT] = _("REFLECT"), - [MOVE_FOCUS_ENERGY] = _("FOCUS ENERGY"), - [MOVE_BIDE] = _("BIDE"), - [MOVE_METRONOME] = _("METRONOME"), - [MOVE_MIRROR_MOVE] = _("MIRROR MOVE"), - [MOVE_SELF_DESTRUCT] = _("SELFDESTRUCT"), - [MOVE_EGG_BOMB] = _("EGG BOMB"), - [MOVE_LICK] = _("LICK"), - [MOVE_SMOG] = _("SMOG"), - [MOVE_SLUDGE] = _("SLUDGE"), - [MOVE_BONE_CLUB] = _("BONE CLUB"), - [MOVE_FIRE_BLAST] = _("FIRE BLAST"), - [MOVE_WATERFALL] = _("WATERFALL"), - [MOVE_CLAMP] = _("CLAMP"), - [MOVE_SWIFT] = _("SWIFT"), - [MOVE_SKULL_BASH] = _("SKULL BASH"), - [MOVE_SPIKE_CANNON] = _("SPIKE CANNON"), - [MOVE_CONSTRICT] = _("CONSTRICT"), - [MOVE_AMNESIA] = _("AMNESIA"), - [MOVE_KINESIS] = _("KINESIS"), - [MOVE_SOFT_BOILED] = _("SOFTBOILED"), - [MOVE_HIGH_JUMP_KICK] = _("HI JUMP KICK"), - [MOVE_GLARE] = _("GLARE"), - [MOVE_DREAM_EATER] = _("DREAM EATER"), - [MOVE_POISON_GAS] = _("POISON GAS"), - [MOVE_BARRAGE] = _("BARRAGE"), - [MOVE_LEECH_LIFE] = _("LEECH LIFE"), - [MOVE_LOVELY_KISS] = _("LOVELY KISS"), - [MOVE_SKY_ATTACK] = _("SKY ATTACK"), - [MOVE_TRANSFORM] = _("TRANSFORM"), - [MOVE_BUBBLE] = _("BUBBLE"), - [MOVE_DIZZY_PUNCH] = _("DIZZY PUNCH"), - [MOVE_SPORE] = _("SPORE"), - [MOVE_FLASH] = _("FLASH"), - [MOVE_PSYWAVE] = _("PSYWAVE"), - [MOVE_SPLASH] = _("SPLASH"), - [MOVE_ACID_ARMOR] = _("ACID ARMOR"), - [MOVE_CRABHAMMER] = _("CRABHAMMER"), - [MOVE_EXPLOSION] = _("EXPLOSION"), - [MOVE_FURY_SWIPES] = _("FURY SWIPES"), - [MOVE_BONEMERANG] = _("BONEMERANG"), - [MOVE_REST] = _("REST"), - [MOVE_ROCK_SLIDE] = _("ROCK SLIDE"), - [MOVE_HYPER_FANG] = _("HYPER FANG"), - [MOVE_SHARPEN] = _("SHARPEN"), - [MOVE_CONVERSION] = _("CONVERSION"), - [MOVE_TRI_ATTACK] = _("TRI ATTACK"), - [MOVE_SUPER_FANG] = _("SUPER FANG"), - [MOVE_SLASH] = _("SLASH"), - [MOVE_SUBSTITUTE] = _("SUBSTITUTE"), - [MOVE_STRUGGLE] = _("STRUGGLE"), - [MOVE_SKETCH] = _("SKETCH"), - [MOVE_TRIPLE_KICK] = _("TRIPLE KICK"), - [MOVE_THIEF] = _("THIEF"), - [MOVE_SPIDER_WEB] = _("SPIDER WEB"), - [MOVE_MIND_READER] = _("MIND READER"), - [MOVE_NIGHTMARE] = _("NIGHTMARE"), - [MOVE_FLAME_WHEEL] = _("FLAME WHEEL"), - [MOVE_SNORE] = _("SNORE"), - [MOVE_CURSE] = _("CURSE"), - [MOVE_FLAIL] = _("FLAIL"), - [MOVE_CONVERSION_2] = _("CONVERSION 2"), - [MOVE_AEROBLAST] = _("AEROBLAST"), - [MOVE_COTTON_SPORE] = _("COTTON SPORE"), - [MOVE_REVERSAL] = _("REVERSAL"), - [MOVE_SPITE] = _("SPITE"), - [MOVE_POWDER_SNOW] = _("POWDER SNOW"), - [MOVE_PROTECT] = _("PROTECT"), - [MOVE_MACH_PUNCH] = _("MACH PUNCH"), - [MOVE_SCARY_FACE] = _("SCARY FACE"), - [MOVE_FEINT_ATTACK] = _("FAINT ATTACK"), - [MOVE_SWEET_KISS] = _("SWEET KISS"), - [MOVE_BELLY_DRUM] = _("BELLY DRUM"), - [MOVE_SLUDGE_BOMB] = _("SLUDGE BOMB"), - [MOVE_MUD_SLAP] = _("MUD-SLAP"), - [MOVE_OCTAZOOKA] = _("OCTAZOOKA"), - [MOVE_SPIKES] = _("SPIKES"), - [MOVE_ZAP_CANNON] = _("ZAP CANNON"), - [MOVE_FORESIGHT] = _("FORESIGHT"), - [MOVE_DESTINY_BOND] = _("DESTINY BOND"), - [MOVE_PERISH_SONG] = _("PERISH SONG"), - [MOVE_ICY_WIND] = _("ICY WIND"), - [MOVE_DETECT] = _("DETECT"), - [MOVE_BONE_RUSH] = _("BONE RUSH"), - [MOVE_LOCK_ON] = _("LOCK-ON"), - [MOVE_OUTRAGE] = _("OUTRAGE"), - [MOVE_SANDSTORM] = _("SANDSTORM"), - [MOVE_GIGA_DRAIN] = _("GIGA DRAIN"), - [MOVE_ENDURE] = _("ENDURE"), - [MOVE_CHARM] = _("CHARM"), - [MOVE_ROLLOUT] = _("ROLLOUT"), - [MOVE_FALSE_SWIPE] = _("FALSE SWIPE"), - [MOVE_SWAGGER] = _("SWAGGER"), - [MOVE_MILK_DRINK] = _("MILK DRINK"), - [MOVE_SPARK] = _("SPARK"), - [MOVE_FURY_CUTTER] = _("FURY CUTTER"), - [MOVE_STEEL_WING] = _("STEEL WING"), - [MOVE_MEAN_LOOK] = _("MEAN LOOK"), - [MOVE_ATTRACT] = _("ATTRACT"), - [MOVE_SLEEP_TALK] = _("SLEEP TALK"), - [MOVE_HEAL_BELL] = _("HEAL BELL"), - [MOVE_RETURN] = _("RETURN"), - [MOVE_PRESENT] = _("PRESENT"), - [MOVE_FRUSTRATION] = _("FRUSTRATION"), - [MOVE_SAFEGUARD] = _("SAFEGUARD"), - [MOVE_PAIN_SPLIT] = _("PAIN SPLIT"), - [MOVE_SACRED_FIRE] = _("SACRED FIRE"), - [MOVE_MAGNITUDE] = _("MAGNITUDE"), - [MOVE_DYNAMIC_PUNCH] = _("DYNAMICPUNCH"), - [MOVE_MEGAHORN] = _("MEGAHORN"), - [MOVE_DRAGON_BREATH] = _("DRAGONBREATH"), - [MOVE_BATON_PASS] = _("BATON PASS"), - [MOVE_ENCORE] = _("ENCORE"), - [MOVE_PURSUIT] = _("PURSUIT"), - [MOVE_RAPID_SPIN] = _("RAPID SPIN"), - [MOVE_SWEET_SCENT] = _("SWEET SCENT"), - [MOVE_IRON_TAIL] = _("IRON TAIL"), - [MOVE_METAL_CLAW] = _("METAL CLAW"), - [MOVE_VITAL_THROW] = _("VITAL THROW"), - [MOVE_MORNING_SUN] = _("MORNING SUN"), - [MOVE_SYNTHESIS] = _("SYNTHESIS"), - [MOVE_MOONLIGHT] = _("MOONLIGHT"), - [MOVE_HIDDEN_POWER] = _("HIDDEN POWER"), - [MOVE_CROSS_CHOP] = _("CROSS CHOP"), - [MOVE_TWISTER] = _("TWISTER"), - [MOVE_RAIN_DANCE] = _("RAIN DANCE"), - [MOVE_SUNNY_DAY] = _("SUNNY DAY"), - [MOVE_CRUNCH] = _("CRUNCH"), - [MOVE_MIRROR_COAT] = _("MIRROR COAT"), - [MOVE_PSYCH_UP] = _("PSYCH UP"), - [MOVE_EXTREME_SPEED] = _("EXTREMESPEED"), - [MOVE_ANCIENT_POWER] = _("ANCIENTPOWER"), - [MOVE_SHADOW_BALL] = _("SHADOW BALL"), - [MOVE_FUTURE_SIGHT] = _("FUTURE SIGHT"), - [MOVE_ROCK_SMASH] = _("ROCK SMASH"), - [MOVE_WHIRLPOOL] = _("WHIRLPOOL"), - [MOVE_BEAT_UP] = _("BEAT UP"), - [MOVE_FAKE_OUT] = _("FAKE OUT"), - [MOVE_UPROAR] = _("UPROAR"), - [MOVE_STOCKPILE] = _("STOCKPILE"), - [MOVE_SPIT_UP] = _("SPIT UP"), - [MOVE_SWALLOW] = _("SWALLOW"), - [MOVE_HEAT_WAVE] = _("HEAT WAVE"), - [MOVE_HAIL] = _("HAIL"), - [MOVE_TORMENT] = _("TORMENT"), - [MOVE_FLATTER] = _("FLATTER"), - [MOVE_WILL_O_WISP] = _("WILL-O-WISP"), - [MOVE_MEMENTO] = _("MEMENTO"), - [MOVE_FACADE] = _("FACADE"), - [MOVE_FOCUS_PUNCH] = _("FOCUS PUNCH"), - [MOVE_SMELLING_SALTS] = _("SMELLINGSALT"), - [MOVE_FOLLOW_ME] = _("FOLLOW ME"), - [MOVE_NATURE_POWER] = _("NATURE POWER"), - [MOVE_CHARGE] = _("CHARGE"), - [MOVE_TAUNT] = _("TAUNT"), - [MOVE_HELPING_HAND] = _("HELPING HAND"), - [MOVE_TRICK] = _("TRICK"), - [MOVE_ROLE_PLAY] = _("ROLE PLAY"), - [MOVE_WISH] = _("WISH"), - [MOVE_ASSIST] = _("ASSIST"), - [MOVE_INGRAIN] = _("INGRAIN"), - [MOVE_SUPERPOWER] = _("SUPERPOWER"), - [MOVE_MAGIC_COAT] = _("MAGIC COAT"), - [MOVE_RECYCLE] = _("RECYCLE"), - [MOVE_REVENGE] = _("REVENGE"), - [MOVE_BRICK_BREAK] = _("BRICK BREAK"), - [MOVE_YAWN] = _("YAWN"), - [MOVE_KNOCK_OFF] = _("KNOCK OFF"), - [MOVE_ENDEAVOR] = _("ENDEAVOR"), - [MOVE_ERUPTION] = _("ERUPTION"), - [MOVE_SKILL_SWAP] = _("SKILL SWAP"), - [MOVE_IMPRISON] = _("IMPRISON"), - [MOVE_REFRESH] = _("REFRESH"), - [MOVE_GRUDGE] = _("GRUDGE"), - [MOVE_SNATCH] = _("SNATCH"), - [MOVE_SECRET_POWER] = _("SECRET POWER"), - [MOVE_DIVE] = _("DIVE"), - [MOVE_ARM_THRUST] = _("ARM THRUST"), - [MOVE_CAMOUFLAGE] = _("CAMOUFLAGE"), - [MOVE_TAIL_GLOW] = _("TAIL GLOW"), - [MOVE_LUSTER_PURGE] = _("LUSTER PURGE"), - [MOVE_MIST_BALL] = _("MIST BALL"), - [MOVE_FEATHER_DANCE] = _("FEATHERDANCE"), - [MOVE_TEETER_DANCE] = _("TEETER DANCE"), - [MOVE_BLAZE_KICK] = _("BLAZE KICK"), - [MOVE_MUD_SPORT] = _("MUD SPORT"), - [MOVE_ICE_BALL] = _("ICE BALL"), - [MOVE_NEEDLE_ARM] = _("NEEDLE ARM"), - [MOVE_SLACK_OFF] = _("SLACK OFF"), - [MOVE_HYPER_VOICE] = _("HYPER VOICE"), - [MOVE_POISON_FANG] = _("POISON FANG"), - [MOVE_CRUSH_CLAW] = _("CRUSH CLAW"), - [MOVE_BLAST_BURN] = _("BLAST BURN"), - [MOVE_HYDRO_CANNON] = _("HYDRO CANNON"), - [MOVE_METEOR_MASH] = _("METEOR MASH"), - [MOVE_ASTONISH] = _("ASTONISH"), - [MOVE_WEATHER_BALL] = _("WEATHER BALL"), - [MOVE_AROMATHERAPY] = _("AROMATHERAPY"), - [MOVE_FAKE_TEARS] = _("FAKE TEARS"), - [MOVE_AIR_CUTTER] = _("AIR CUTTER"), - [MOVE_OVERHEAT] = _("OVERHEAT"), - [MOVE_ODOR_SLEUTH] = _("ODOR SLEUTH"), - [MOVE_ROCK_TOMB] = _("ROCK TOMB"), - [MOVE_SILVER_WIND] = _("SILVER WIND"), - [MOVE_METAL_SOUND] = _("METAL SOUND"), - [MOVE_GRASS_WHISTLE] = _("GRASSWHISTLE"), - [MOVE_TICKLE] = _("TICKLE"), - [MOVE_COSMIC_POWER] = _("COSMIC POWER"), - [MOVE_WATER_SPOUT] = _("WATER SPOUT"), - [MOVE_SIGNAL_BEAM] = _("SIGNAL BEAM"), - [MOVE_SHADOW_PUNCH] = _("SHADOW PUNCH"), - [MOVE_EXTRASENSORY] = _("EXTRASENSORY"), - [MOVE_SKY_UPPERCUT] = _("SKY UPPERCUT"), - [MOVE_SAND_TOMB] = _("SAND TOMB"), - [MOVE_SHEER_COLD] = _("SHEER COLD"), - [MOVE_MUDDY_WATER] = _("MUDDY WATER"), - [MOVE_BULLET_SEED] = _("BULLET SEED"), - [MOVE_AERIAL_ACE] = _("AERIAL ACE"), - [MOVE_ICICLE_SPEAR] = _("ICICLE SPEAR"), - [MOVE_IRON_DEFENSE] = _("IRON DEFENSE"), - [MOVE_BLOCK] = _("BLOCK"), - [MOVE_HOWL] = _("HOWL"), - [MOVE_DRAGON_CLAW] = _("DRAGON CLAW"), - [MOVE_FRENZY_PLANT] = _("FRENZY PLANT"), - [MOVE_BULK_UP] = _("BULK UP"), - [MOVE_BOUNCE] = _("BOUNCE"), - [MOVE_MUD_SHOT] = _("MUD SHOT"), - [MOVE_POISON_TAIL] = _("POISON TAIL"), - [MOVE_COVET] = _("COVET"), - [MOVE_VOLT_TACKLE] = _("VOLT TACKLE"), - [MOVE_MAGICAL_LEAF] = _("MAGICAL LEAF"), - [MOVE_WATER_SPORT] = _("WATER SPORT"), - [MOVE_CALM_MIND] = _("CALM MIND"), - [MOVE_LEAF_BLADE] = _("LEAF BLADE"), - [MOVE_DRAGON_DANCE] = _("DRAGON DANCE"), - [MOVE_ROCK_BLAST] = _("ROCK BLAST"), - [MOVE_SHOCK_WAVE] = _("SHOCK WAVE"), - [MOVE_WATER_PULSE] = _("WATER PULSE"), - [MOVE_DOOM_DESIRE] = _("DOOM DESIRE"), - [MOVE_PSYCHO_BOOST] = _("PSYCHO BOOST"), + [MOVE_POUND] = _("Pound"), + [MOVE_KARATE_CHOP] = _("Karate Chop"), + [MOVE_DOUBLE_SLAP] = _("Double Slap"), + [MOVE_COMET_PUNCH] = _("Comet Punch"), + [MOVE_MEGA_PUNCH] = _("Mega Punch"), + [MOVE_PAY_DAY] = _("Pay Day"), + [MOVE_FIRE_PUNCH] = _("Fire Punch"), + [MOVE_ICE_PUNCH] = _("Ice Punch"), + [MOVE_THUNDER_PUNCH] = _("Thunder Punch"), + [MOVE_SCRATCH] = _("Scratch"), + [MOVE_VISE_GRIP] = _("Vise Grip"), + [MOVE_GUILLOTINE] = _("Guillotine"), + [MOVE_RAZOR_WIND] = _("Razor Wind"), + [MOVE_SWORDS_DANCE] = _("Swords Dance"), + [MOVE_CUT] = _("Cut"), + [MOVE_GUST] = _("Gust"), + [MOVE_WING_ATTACK] = _("Wing Attack"), + [MOVE_WHIRLWIND] = _("Whirlwind"), + [MOVE_FLY] = _("Fly"), + [MOVE_BIND] = _("Bind"), + [MOVE_SLAM] = _("Slam"), + [MOVE_VINE_WHIP] = _("Vine Whip"), + [MOVE_STOMP] = _("Stomp"), + [MOVE_DOUBLE_KICK] = _("Double Kick"), + [MOVE_MEGA_KICK] = _("Mega Kick"), + [MOVE_JUMP_KICK] = _("Jump Kick"), + [MOVE_ROLLING_KICK] = _("Rolling Kick"), + [MOVE_SAND_ATTACK] = _("Sand Attack"), + [MOVE_HEADBUTT] = _("Headbutt"), + [MOVE_HORN_ATTACK] = _("Horn Attack"), + [MOVE_FURY_ATTACK] = _("Fury Attack"), + [MOVE_HORN_DRILL] = _("Horn Drill"), + [MOVE_TACKLE] = _("Tackle"), + [MOVE_BODY_SLAM] = _("Body Slam"), + [MOVE_WRAP] = _("Wrap"), + [MOVE_TAKE_DOWN] = _("Take Down"), + [MOVE_THRASH] = _("Thrash"), + [MOVE_DOUBLE_EDGE] = _("Double-Edge"), + [MOVE_TAIL_WHIP] = _("Tail Whip"), + [MOVE_POISON_STING] = _("Poison Sting"), + [MOVE_TWINEEDLE] = _("Twineedle"), + [MOVE_PIN_MISSILE] = _("Pin Missile"), + [MOVE_LEER] = _("Leer"), + [MOVE_BITE] = _("Bite"), + [MOVE_GROWL] = _("Growl"), + [MOVE_ROAR] = _("Roar"), + [MOVE_SING] = _("Sing"), + [MOVE_SUPERSONIC] = _("Supersonic"), + [MOVE_SONIC_BOOM] = _("Sonic Boom"), + [MOVE_DISABLE] = _("Disable"), + [MOVE_ACID] = _("Acid"), + [MOVE_EMBER] = _("Ember"), + [MOVE_FLAMETHROWER] = _("Flamethrower"), + [MOVE_MIST] = _("Mist"), + [MOVE_WATER_GUN] = _("Water Gun"), + [MOVE_HYDRO_PUMP] = _("Hydro Pump"), + [MOVE_SURF] = _("Surf"), + [MOVE_ICE_BEAM] = _("Ice Beam"), + [MOVE_BLIZZARD] = _("Blizzard"), + [MOVE_PSYBEAM] = _("Psybeam"), + [MOVE_BUBBLE_BEAM] = _("Bubble Beam"), + [MOVE_AURORA_BEAM] = _("Aurora Beam"), + [MOVE_HYPER_BEAM] = _("Hyper Beam"), + [MOVE_PECK] = _("Peck"), + [MOVE_DRILL_PECK] = _("Drill Peck"), + [MOVE_SUBMISSION] = _("Submission"), + [MOVE_LOW_KICK] = _("Low Kick"), + [MOVE_COUNTER] = _("Counter"), + [MOVE_SEISMIC_TOSS] = _("Seismic Toss"), + [MOVE_STRENGTH] = _("Strength"), + [MOVE_ABSORB] = _("Absorb"), + [MOVE_MEGA_DRAIN] = _("Mega Drain"), + [MOVE_LEECH_SEED] = _("Leech Seed"), + [MOVE_GROWTH] = _("Growth"), + [MOVE_RAZOR_LEAF] = _("Razor Leaf"), + [MOVE_SOLAR_BEAM] = _("Solar Beam"), + [MOVE_POISON_POWDER] = _("Poison Powder"), + [MOVE_STUN_SPORE] = _("Stun Spore"), + [MOVE_SLEEP_POWDER] = _("Sleep Powder"), + [MOVE_PETAL_DANCE] = _("Petal Dance"), + [MOVE_STRING_SHOT] = _("String Shot"), + [MOVE_DRAGON_RAGE] = _("Dragon Rage"), + [MOVE_FIRE_SPIN] = _("Fire Spin"), + [MOVE_THUNDER_SHOCK] = _("Thunder Shock"), + [MOVE_THUNDERBOLT] = _("Thunderbolt"), + [MOVE_THUNDER_WAVE] = _("Thunder Wave"), + [MOVE_THUNDER] = _("Thunder"), + [MOVE_ROCK_THROW] = _("Rock Throw"), + [MOVE_EARTHQUAKE] = _("Earthquake"), + [MOVE_FISSURE] = _("Fissure"), + [MOVE_DIG] = _("Dig"), + [MOVE_TOXIC] = _("Toxic"), + [MOVE_CONFUSION] = _("Confusion"), + [MOVE_PSYCHIC] = _("Psychic"), + [MOVE_HYPNOSIS] = _("Hypnosis"), + [MOVE_MEDITATE] = _("Meditate"), + [MOVE_AGILITY] = _("Agility"), + [MOVE_QUICK_ATTACK] = _("Quick Attack"), + [MOVE_RAGE] = _("Rage"), + [MOVE_TELEPORT] = _("Teleport"), + [MOVE_NIGHT_SHADE] = _("Night Shade"), + [MOVE_MIMIC] = _("Mimic"), + [MOVE_SCREECH] = _("Screech"), + [MOVE_DOUBLE_TEAM] = _("Double Team"), + [MOVE_RECOVER] = _("Recover"), + [MOVE_HARDEN] = _("Harden"), + [MOVE_MINIMIZE] = _("Minimize"), + [MOVE_SMOKESCREEN] = _("Smokescreen"), + [MOVE_CONFUSE_RAY] = _("Confuse Ray"), + [MOVE_WITHDRAW] = _("Withdraw"), + [MOVE_DEFENSE_CURL] = _("Defense Curl"), + [MOVE_BARRIER] = _("Barrier"), + [MOVE_LIGHT_SCREEN] = _("Light Screen"), + [MOVE_HAZE] = _("Haze"), + [MOVE_REFLECT] = _("Reflect"), + [MOVE_FOCUS_ENERGY] = _("Focus Energy"), + [MOVE_BIDE] = _("Bide"), + [MOVE_METRONOME] = _("Metronome"), + [MOVE_MIRROR_MOVE] = _("Mirror Move"), + [MOVE_SELF_DESTRUCT] = _("Self-Destruct"), + [MOVE_EGG_BOMB] = _("Egg Bomb"), + [MOVE_LICK] = _("Lick"), + [MOVE_SMOG] = _("Smog"), + [MOVE_SLUDGE] = _("Sludge"), + [MOVE_BONE_CLUB] = _("Bone Club"), + [MOVE_FIRE_BLAST] = _("Fire Blast"), + [MOVE_WATERFALL] = _("Waterfall"), + [MOVE_CLAMP] = _("Clamp"), + [MOVE_SWIFT] = _("Swift"), + [MOVE_SKULL_BASH] = _("Skull Bash"), + [MOVE_SPIKE_CANNON] = _("Spike Cannon"), + [MOVE_CONSTRICT] = _("Constrict"), + [MOVE_AMNESIA] = _("Amnesia"), + [MOVE_KINESIS] = _("Kinesis"), + [MOVE_SOFT_BOILED] = _("Soft-Boiled"), + [MOVE_HIGH_JUMP_KICK] = _("High Jump Kick"), + [MOVE_GLARE] = _("Glare"), + [MOVE_DREAM_EATER] = _("Dream Eater"), + [MOVE_POISON_GAS] = _("Poison Gas"), + [MOVE_BARRAGE] = _("Barrage"), + [MOVE_LEECH_LIFE] = _("Leech Life"), + [MOVE_LOVELY_KISS] = _("Lovely Kiss"), + [MOVE_SKY_ATTACK] = _("Sky Attack"), + [MOVE_TRANSFORM] = _("Transform"), + [MOVE_BUBBLE] = _("Bubble"), + [MOVE_DIZZY_PUNCH] = _("Dizzy Punch"), + [MOVE_SPORE] = _("Spore"), + [MOVE_FLASH] = _("Flash"), + [MOVE_PSYWAVE] = _("Psywave"), + [MOVE_SPLASH] = _("Splash"), + [MOVE_ACID_ARMOR] = _("Acid Armor"), + [MOVE_CRABHAMMER] = _("Crabhammer"), + [MOVE_EXPLOSION] = _("Explosion"), + [MOVE_FURY_SWIPES] = _("Fury Swipes"), + [MOVE_BONEMERANG] = _("Bonemerang"), + [MOVE_REST] = _("Rest"), + [MOVE_ROCK_SLIDE] = _("Rock Slide"), + [MOVE_HYPER_FANG] = _("Hyper Fang"), + [MOVE_SHARPEN] = _("Sharpen"), + [MOVE_CONVERSION] = _("Conversion"), + [MOVE_TRI_ATTACK] = _("Tri Attack"), + [MOVE_SUPER_FANG] = _("Super Fang"), + [MOVE_SLASH] = _("Slash"), + [MOVE_SUBSTITUTE] = _("Substitute"), + [MOVE_STRUGGLE] = _("Struggle"), + [MOVE_SKETCH] = _("Sketch"), + [MOVE_TRIPLE_KICK] = _("Triple Kick"), + [MOVE_THIEF] = _("Thief"), + [MOVE_SPIDER_WEB] = _("Spider Web"), + [MOVE_MIND_READER] = _("Mind Reader"), + [MOVE_NIGHTMARE] = _("Nightmare"), + [MOVE_FLAME_WHEEL] = _("Flame Wheel"), + [MOVE_SNORE] = _("Snore"), + [MOVE_CURSE] = _("Curse"), + [MOVE_FLAIL] = _("Flail"), + [MOVE_CONVERSION_2] = _("Conversion 2"), + [MOVE_AEROBLAST] = _("Aeroblast"), + [MOVE_COTTON_SPORE] = _("Cotton Spore"), + [MOVE_REVERSAL] = _("Reversal"), + [MOVE_SPITE] = _("Spite"), + [MOVE_POWDER_SNOW] = _("Powder Snow"), + [MOVE_PROTECT] = _("Protect"), + [MOVE_MACH_PUNCH] = _("Mach Punch"), + [MOVE_SCARY_FACE] = _("Scary Face"), + [MOVE_FEINT_ATTACK] = _("Feint Attack"), + [MOVE_SWEET_KISS] = _("Sweet Kiss"), + [MOVE_BELLY_DRUM] = _("Belly Drum"), + [MOVE_SLUDGE_BOMB] = _("Sludge Bomb"), + [MOVE_MUD_SLAP] = _("Mud-Slap"), + [MOVE_OCTAZOOKA] = _("Octazooka"), + [MOVE_SPIKES] = _("Spikes"), + [MOVE_ZAP_CANNON] = _("Zap Cannon"), + [MOVE_FORESIGHT] = _("Foresight"), + [MOVE_DESTINY_BOND] = _("Destiny Bond"), + [MOVE_PERISH_SONG] = _("Perish Song"), + [MOVE_ICY_WIND] = _("Icy Wind"), + [MOVE_DETECT] = _("Detect"), + [MOVE_BONE_RUSH] = _("Bone Rush"), + [MOVE_LOCK_ON] = _("Lock-On"), + [MOVE_OUTRAGE] = _("Outrage"), + [MOVE_SANDSTORM] = _("Sandstorm"), + [MOVE_GIGA_DRAIN] = _("Giga Drain"), + [MOVE_ENDURE] = _("Endure"), + [MOVE_CHARM] = _("Charm"), + [MOVE_ROLLOUT] = _("Rollout"), + [MOVE_FALSE_SWIPE] = _("False Swipe"), + [MOVE_SWAGGER] = _("Swagger"), + [MOVE_MILK_DRINK] = _("Milk Drink"), + [MOVE_SPARK] = _("Spark"), + [MOVE_FURY_CUTTER] = _("Fury Cutter"), + [MOVE_STEEL_WING] = _("Steel Wing"), + [MOVE_MEAN_LOOK] = _("Mean Look"), + [MOVE_ATTRACT] = _("Attract"), + [MOVE_SLEEP_TALK] = _("Sleep Talk"), + [MOVE_HEAL_BELL] = _("Heal Bell"), + [MOVE_RETURN] = _("Return"), + [MOVE_PRESENT] = _("Present"), + [MOVE_FRUSTRATION] = _("Frustration"), + [MOVE_SAFEGUARD] = _("Safeguard"), + [MOVE_PAIN_SPLIT] = _("Pain Split"), + [MOVE_SACRED_FIRE] = _("Sacred Fire"), + [MOVE_MAGNITUDE] = _("Magnitude"), + [MOVE_DYNAMIC_PUNCH] = _("Dynamic Punch"), + [MOVE_MEGAHORN] = _("Megahorn"), + [MOVE_DRAGON_BREATH] = _("Dragon Breath"), + [MOVE_BATON_PASS] = _("Baton Pass"), + [MOVE_ENCORE] = _("Encore"), + [MOVE_PURSUIT] = _("Pursuit"), + [MOVE_RAPID_SPIN] = _("Rapid Spin"), + [MOVE_SWEET_SCENT] = _("Sweet Scent"), + [MOVE_IRON_TAIL] = _("Iron Tail"), + [MOVE_METAL_CLAW] = _("Metal Claw"), + [MOVE_VITAL_THROW] = _("Vital Throw"), + [MOVE_MORNING_SUN] = _("Morning Sun"), + [MOVE_SYNTHESIS] = _("Synthesis"), + [MOVE_MOONLIGHT] = _("Moonlight"), + [MOVE_HIDDEN_POWER] = _("Hidden Power"), + [MOVE_CROSS_CHOP] = _("Cross Chop"), + [MOVE_TWISTER] = _("Twister"), + [MOVE_RAIN_DANCE] = _("Rain Dance"), + [MOVE_SUNNY_DAY] = _("Sunny Day"), + [MOVE_CRUNCH] = _("Crunch"), + [MOVE_MIRROR_COAT] = _("Mirror Coat"), + [MOVE_PSYCH_UP] = _("Psych Up"), + [MOVE_EXTREME_SPEED] = _("Extreme Speed"), + [MOVE_ANCIENT_POWER] = _("Ancient Power"), + [MOVE_SHADOW_BALL] = _("Shadow Ball"), + [MOVE_FUTURE_SIGHT] = _("Future Sight"), + [MOVE_ROCK_SMASH] = _("Rock Smash"), + [MOVE_WHIRLPOOL] = _("Whirlpool"), + [MOVE_BEAT_UP] = _("Beat Up"), + [MOVE_FAKE_OUT] = _("Fake Out"), + [MOVE_UPROAR] = _("Uproar"), + [MOVE_STOCKPILE] = _("Stockpile"), + [MOVE_SPIT_UP] = _("Spit Up"), + [MOVE_SWALLOW] = _("Swallow"), + [MOVE_HEAT_WAVE] = _("Heat Wave"), + [MOVE_HAIL] = _("Hail"), + [MOVE_TORMENT] = _("Torment"), + [MOVE_FLATTER] = _("Flatter"), + [MOVE_WILL_O_WISP] = _("Will-o-Wisp"), + [MOVE_MEMENTO] = _("Memento"), + [MOVE_FACADE] = _("Facade"), + [MOVE_FOCUS_PUNCH] = _("Focus Punch"), + [MOVE_SMELLING_SALTS] = _("Smelling Salts"), + [MOVE_FOLLOW_ME] = _("Follow Me"), + [MOVE_NATURE_POWER] = _("Nature Power"), + [MOVE_CHARGE] = _("Charge"), + [MOVE_TAUNT] = _("Taunt"), + [MOVE_HELPING_HAND] = _("Helping Hand"), + [MOVE_TRICK] = _("Trick"), + [MOVE_ROLE_PLAY] = _("Role Play"), + [MOVE_WISH] = _("Wish"), + [MOVE_ASSIST] = _("Assist"), + [MOVE_INGRAIN] = _("Ingrain"), + [MOVE_SUPERPOWER] = _("Superpower"), + [MOVE_MAGIC_COAT] = _("Magic Coat"), + [MOVE_RECYCLE] = _("Recycle"), + [MOVE_REVENGE] = _("Revenge"), + [MOVE_BRICK_BREAK] = _("Brick Break"), + [MOVE_YAWN] = _("Yawn"), + [MOVE_KNOCK_OFF] = _("Knock Off"), + [MOVE_ENDEAVOR] = _("Endeavor"), + [MOVE_ERUPTION] = _("Eruption"), + [MOVE_SKILL_SWAP] = _("Skill Swap"), + [MOVE_IMPRISON] = _("Imprison"), + [MOVE_REFRESH] = _("Refresh"), + [MOVE_GRUDGE] = _("Grudge"), + [MOVE_SNATCH] = _("Snatch"), + [MOVE_SECRET_POWER] = _("Secret Power"), + [MOVE_DIVE] = _("Dive"), + [MOVE_ARM_THRUST] = _("Arm Thrust"), + [MOVE_CAMOUFLAGE] = _("Camouflage"), + [MOVE_TAIL_GLOW] = _("Tail Glow"), + [MOVE_LUSTER_PURGE] = _("Luster Purge"), + [MOVE_MIST_BALL] = _("Mist Ball"), + [MOVE_FEATHER_DANCE] = _("Feather Dance"), + [MOVE_TEETER_DANCE] = _("Teeter Dance"), + [MOVE_BLAZE_KICK] = _("Blaze Kick"), + [MOVE_MUD_SPORT] = _("Mud Sport"), + [MOVE_ICE_BALL] = _("Ice Ball"), + [MOVE_NEEDLE_ARM] = _("Needle Arm"), + [MOVE_SLACK_OFF] = _("Slack Off"), + [MOVE_HYPER_VOICE] = _("Hyper Voice"), + [MOVE_POISON_FANG] = _("Poison Fang"), + [MOVE_CRUSH_CLAW] = _("Crush Claw"), + [MOVE_BLAST_BURN] = _("Blast Burn"), + [MOVE_HYDRO_CANNON] = _("Hydro Cannon"), + [MOVE_METEOR_MASH] = _("Meteor Mash"), + [MOVE_ASTONISH] = _("Astonish"), + [MOVE_WEATHER_BALL] = _("Weather Ball"), + [MOVE_AROMATHERAPY] = _("Aromatherapy"), + [MOVE_FAKE_TEARS] = _("Fake Tears"), + [MOVE_AIR_CUTTER] = _("Air Cutter"), + [MOVE_OVERHEAT] = _("Overheat"), + [MOVE_ODOR_SLEUTH] = _("Odor Sleuth"), + [MOVE_ROCK_TOMB] = _("Rock Tomb"), + [MOVE_SILVER_WIND] = _("Silver Wind"), + [MOVE_METAL_SOUND] = _("Metal Sound"), + [MOVE_GRASS_WHISTLE] = _("Grass Whistle"), + [MOVE_TICKLE] = _("Tickle"), + [MOVE_COSMIC_POWER] = _("Cosmic Power"), + [MOVE_WATER_SPOUT] = _("Water Spout"), + [MOVE_SIGNAL_BEAM] = _("Signal Beam"), + [MOVE_SHADOW_PUNCH] = _("Shadow Punch"), + [MOVE_EXTRASENSORY] = _("Extrasensory"), + [MOVE_SKY_UPPERCUT] = _("Sky Uppercut"), + [MOVE_SAND_TOMB] = _("Sand Tomb"), + [MOVE_SHEER_COLD] = _("Sheer Cold"), + [MOVE_MUDDY_WATER] = _("Muddy Water"), + [MOVE_BULLET_SEED] = _("Bullet Seed"), + [MOVE_AERIAL_ACE] = _("Aerial Ace"), + [MOVE_ICICLE_SPEAR] = _("Icicle Spear"), + [MOVE_IRON_DEFENSE] = _("Iron Defense"), + [MOVE_BLOCK] = _("Block"), + [MOVE_HOWL] = _("Howl"), + [MOVE_DRAGON_CLAW] = _("Dragon Claw"), + [MOVE_FRENZY_PLANT] = _("Frenzy Plant"), + [MOVE_BULK_UP] = _("Bulk Up"), + [MOVE_BOUNCE] = _("Bounce"), + [MOVE_MUD_SHOT] = _("Mud Shot"), + [MOVE_POISON_TAIL] = _("Poison Tail"), + [MOVE_COVET] = _("Covet"), + [MOVE_VOLT_TACKLE] = _("Volt Tackle"), + [MOVE_MAGICAL_LEAF] = _("Magical Leaf"), + [MOVE_WATER_SPORT] = _("Water Sport"), + [MOVE_CALM_MIND] = _("Calm Mind"), + [MOVE_LEAF_BLADE] = _("Leaf Blade"), + [MOVE_DRAGON_DANCE] = _("Dragon Dance"), + [MOVE_ROCK_BLAST] = _("Rock Blast"), + [MOVE_SHOCK_WAVE] = _("Shock Wave"), + [MOVE_WATER_PULSE] = _("Water Pulse"), + [MOVE_DOOM_DESIRE] = _("Doom Desire"), + [MOVE_PSYCHO_BOOST] = _("Psycho Boost"), + [MOVE_ROOST] = _("Roost"), + [MOVE_GRAVITY] = _("Gravity"), + [MOVE_MIRACLE_EYE] = _("Miracle Eye"), + [MOVE_WAKE_UP_SLAP] = _("Wake-Up Slap"), + [MOVE_HAMMER_ARM] = _("Hammer Arm"), + [MOVE_GYRO_BALL] = _("Gyro Ball"), + [MOVE_HEALING_WISH] = _("Healing Wish"), + [MOVE_BRINE] = _("Brine"), + [MOVE_NATURAL_GIFT] = _("Natural Gift"), + [MOVE_FEINT] = _("Feint"), + [MOVE_PLUCK] = _("Pluck"), + [MOVE_TAILWIND] = _("Tailwind"), + [MOVE_ACUPRESSURE] = _("Acupressure"), + [MOVE_METAL_BURST] = _("Metal Burst"), + [MOVE_U_TURN] = _("U-turn"), + [MOVE_CLOSE_COMBAT] = _("Close Combat"), + [MOVE_PAYBACK] = _("Payback"), + [MOVE_ASSURANCE] = _("Assurance"), + [MOVE_EMBARGO] = _("Embargo"), + [MOVE_FLING] = _("Fling"), + [MOVE_PSYCHO_SHIFT] = _("Psycho Shift"), + [MOVE_TRUMP_CARD] = _("Trump Card"), + [MOVE_HEAL_BLOCK] = _("Heal Block"), + [MOVE_WRING_OUT] = _("Wring Out"), + [MOVE_POWER_TRICK] = _("Power Trick"), + [MOVE_GASTRO_ACID] = _("Gastro Acid"), + [MOVE_LUCKY_CHANT] = _("Lucky Chant"), + [MOVE_ME_FIRST] = _("Me First"), + [MOVE_COPYCAT] = _("Copycat"), + [MOVE_POWER_SWAP] = _("Power Swap"), + [MOVE_GUARD_SWAP] = _("Guard Swap"), + [MOVE_PUNISHMENT] = _("Punishment"), + [MOVE_LAST_RESORT] = _("Last Resort"), + [MOVE_WORRY_SEED] = _("Worry Seed"), + [MOVE_SUCKER_PUNCH] = _("Sucker Punch"), + [MOVE_TOXIC_SPIKES] = _("Toxic Spikes"), + [MOVE_HEART_SWAP] = _("Heart Swap"), + [MOVE_AQUA_RING] = _("Aqua Ring"), + [MOVE_MAGNET_RISE] = _("Magnet Rise"), + [MOVE_FLARE_BLITZ] = _("Flare Blitz"), + [MOVE_FORCE_PALM] = _("Force Palm"), + [MOVE_AURA_SPHERE] = _("Aura Sphere"), + [MOVE_ROCK_POLISH] = _("Rock Polish"), + [MOVE_POISON_JAB] = _("Poison Jab"), + [MOVE_DARK_PULSE] = _("Dark Pulse"), + [MOVE_NIGHT_SLASH] = _("Night Slash"), + [MOVE_AQUA_TAIL] = _("Aqua Tail"), + [MOVE_SEED_BOMB] = _("Seed Bomb"), + [MOVE_AIR_SLASH] = _("Air Slash"), + [MOVE_X_SCISSOR] = _("X-Scissor"), + [MOVE_BUG_BUZZ] = _("Bug Buzz"), + [MOVE_DRAGON_PULSE] = _("Dragon Pulse"), + [MOVE_DRAGON_RUSH] = _("Dragon Rush"), + [MOVE_POWER_GEM] = _("Power Gem"), + [MOVE_DRAIN_PUNCH] = _("Drain Punch"), + [MOVE_VACUUM_WAVE] = _("Vacuum Wave"), + [MOVE_FOCUS_BLAST] = _("Focus Blast"), + [MOVE_ENERGY_BALL] = _("Energy Ball"), + [MOVE_BRAVE_BIRD] = _("Brave Bird"), + [MOVE_EARTH_POWER] = _("Earth Power"), + [MOVE_SWITCHEROO] = _("Switcheroo"), + [MOVE_GIGA_IMPACT] = _("Giga Impact"), + [MOVE_NASTY_PLOT] = _("Nasty Plot"), + [MOVE_BULLET_PUNCH] = _("Bullet Punch"), + [MOVE_AVALANCHE] = _("Avalanche"), + [MOVE_ICE_SHARD] = _("Ice Shard"), + [MOVE_SHADOW_CLAW] = _("Shadow Claw"), + [MOVE_THUNDER_FANG] = _("Thunder Fang"), + [MOVE_ICE_FANG] = _("Ice Fang"), + [MOVE_FIRE_FANG] = _("Fire Fang"), + [MOVE_SHADOW_SNEAK] = _("Shadow Sneak"), + [MOVE_MUD_BOMB] = _("Mud Bomb"), + [MOVE_PSYCHO_CUT] = _("Psycho Cut"), + [MOVE_ZEN_HEADBUTT] = _("Zen Headbutt"), + [MOVE_MIRROR_SHOT] = _("Mirror Shot"), + [MOVE_FLASH_CANNON] = _("Flash Cannon"), + [MOVE_ROCK_CLIMB] = _("Rock Climb"), + [MOVE_DEFOG] = _("Defog"), + [MOVE_TRICK_ROOM] = _("Trick Room"), + [MOVE_DRACO_METEOR] = _("Draco Meteor"), + [MOVE_DISCHARGE] = _("Discharge"), + [MOVE_LAVA_PLUME] = _("Lava Plume"), + [MOVE_LEAF_STORM] = _("Leaf Storm"), + [MOVE_POWER_WHIP] = _("Power Whip"), + [MOVE_ROCK_WRECKER] = _("Rock Wrecker"), + [MOVE_CROSS_POISON] = _("Cross Poison"), + [MOVE_GUNK_SHOT] = _("Gunk Shot"), + [MOVE_IRON_HEAD] = _("Iron Head"), + [MOVE_MAGNET_BOMB] = _("Magnet Bomb"), + [MOVE_STONE_EDGE] = _("Stone Edge"), + [MOVE_CAPTIVATE] = _("Captivate"), + [MOVE_STEALTH_ROCK] = _("Stealth Rock"), + [MOVE_GRASS_KNOT] = _("Grass Knot"), + [MOVE_CHATTER] = _("Chatter"), + [MOVE_JUDGMENT] = _("Judgment"), + [MOVE_BUG_BITE] = _("Bug Bite"), + [MOVE_CHARGE_BEAM] = _("Charge Beam"), + [MOVE_WOOD_HAMMER] = _("Wood Hammer"), + [MOVE_AQUA_JET] = _("Aqua Jet"), + [MOVE_ATTACK_ORDER] = _("Attack Order"), + [MOVE_DEFEND_ORDER] = _("Defend Order"), + [MOVE_HEAL_ORDER] = _("Heal Order"), + [MOVE_HEAD_SMASH] = _("Head Smash"), + [MOVE_DOUBLE_HIT] = _("Double Hit"), + [MOVE_ROAR_OF_TIME] = _("Roar of Time"), + [MOVE_SPACIAL_REND] = _("Spacial Rend"), + [MOVE_LUNAR_DANCE] = _("Lunar Dance"), + [MOVE_CRUSH_GRIP] = _("Crush Grip"), + [MOVE_MAGMA_STORM] = _("Magma Storm"), + [MOVE_DARK_VOID] = _("Dark Void"), + [MOVE_SEED_FLARE] = _("Seed Flare"), + [MOVE_OMINOUS_WIND] = _("Ominous Wind"), + [MOVE_SHADOW_FORCE] = _("Shadow Force"), + [MOVE_HONE_CLAWS] = _("Hone Claws"), + [MOVE_WIDE_GUARD] = _("Wide Guard"), + [MOVE_GUARD_SPLIT] = _("Guard Split"), + [MOVE_POWER_SPLIT] = _("Power Split"), + [MOVE_WONDER_ROOM] = _("Wonder Room"), + [MOVE_PSYSHOCK] = _("Psyshock"), + [MOVE_VENOSHOCK] = _("Venoshock"), + [MOVE_AUTOTOMIZE] = _("Autotomize"), + [MOVE_RAGE_POWDER] = _("Rage Powder"), + [MOVE_TELEKINESIS] = _("Telekinesis"), + [MOVE_MAGIC_ROOM] = _("Magic Room"), + [MOVE_SMACK_DOWN] = _("Smack Down"), + [MOVE_STORM_THROW] = _("Storm Throw"), + [MOVE_FLAME_BURST] = _("Flame Burst"), + [MOVE_SLUDGE_WAVE] = _("Sludge Wave"), + [MOVE_QUIVER_DANCE] = _("Quiver Dance"), + [MOVE_HEAVY_SLAM] = _("Heavy Slam"), + [MOVE_SYNCHRONOISE] = _("Synchronoise"), + [MOVE_ELECTRO_BALL] = _("Electro Ball"), + [MOVE_SOAK] = _("Soak"), + [MOVE_FLAME_CHARGE] = _("Flame Charge"), + [MOVE_COIL] = _("Coil"), + [MOVE_LOW_SWEEP] = _("Low Sweep"), + [MOVE_ACID_SPRAY] = _("Acid Spray"), + [MOVE_FOUL_PLAY] = _("Foul Play"), + [MOVE_SIMPLE_BEAM] = _("Simple Beam"), + [MOVE_ENTRAINMENT] = _("Entrainment"), + [MOVE_AFTER_YOU] = _("After You"), + [MOVE_ROUND] = _("Round"), + [MOVE_ECHOED_VOICE] = _("Echoed Voice"), + [MOVE_CHIP_AWAY] = _("Chip Away"), + [MOVE_CLEAR_SMOG] = _("Clear Smog"), + [MOVE_STORED_POWER] = _("Stored Power"), + [MOVE_QUICK_GUARD] = _("Quick Guard"), + [MOVE_ALLY_SWITCH] = _("Ally Switch"), + [MOVE_SCALD] = _("Scald"), + [MOVE_SHELL_SMASH] = _("Shell Smash"), + [MOVE_HEAL_PULSE] = _("Heal Pulse"), + [MOVE_HEX] = _("Hex"), + [MOVE_SKY_DROP] = _("Sky Drop"), + [MOVE_SHIFT_GEAR] = _("Shift Gear"), + [MOVE_CIRCLE_THROW] = _("Circle Throw"), + [MOVE_INCINERATE] = _("Incinerate"), + [MOVE_QUASH] = _("Quash"), + [MOVE_ACROBATICS] = _("Acrobatics"), + [MOVE_REFLECT_TYPE] = _("Reflect Type"), + [MOVE_RETALIATE] = _("Retaliate"), + [MOVE_FINAL_GAMBIT] = _("Final Gambit"), + [MOVE_BESTOW] = _("Bestow"), + [MOVE_INFERNO] = _("Inferno"), + [MOVE_WATER_PLEDGE] = _("Water Pledge"), + [MOVE_FIRE_PLEDGE] = _("Fire Pledge"), + [MOVE_GRASS_PLEDGE] = _("Grass Pledge"), + [MOVE_VOLT_SWITCH] = _("Volt Switch"), + [MOVE_STRUGGLE_BUG] = _("Struggle Bug"), + [MOVE_BULLDOZE] = _("Bulldoze"), + [MOVE_FROST_BREATH] = _("Frost Breath"), + [MOVE_DRAGON_TAIL] = _("Dragon Tail"), + [MOVE_WORK_UP] = _("Work Up"), + [MOVE_ELECTROWEB] = _("Electroweb"), + [MOVE_WILD_CHARGE] = _("Wild Charge"), + [MOVE_DRILL_RUN] = _("Drill Run"), + [MOVE_DUAL_CHOP] = _("Dual Chop"), + [MOVE_HEART_STAMP] = _("Heart Stamp"), + [MOVE_HORN_LEECH] = _("Horn Leech"), + [MOVE_SACRED_SWORD] = _("Sacred Sword"), + [MOVE_RAZOR_SHELL] = _("Razor Shell"), + [MOVE_HEAT_CRASH] = _("Heat Crash"), + [MOVE_LEAF_TORNADO] = _("Leaf Tornado"), + [MOVE_STEAMROLLER] = _("Steamroller"), + [MOVE_COTTON_GUARD] = _("Cotton Guard"), + [MOVE_NIGHT_DAZE] = _("Night Daze"), + [MOVE_PSYSTRIKE] = _("Psystrike"), + [MOVE_TAIL_SLAP] = _("Tail Slap"), + [MOVE_HURRICANE] = _("Hurricane"), + [MOVE_HEAD_CHARGE] = _("Head Charge"), + [MOVE_GEAR_GRIND] = _("Gear Grind"), + [MOVE_SEARING_SHOT] = _("Searing Shot"), + [MOVE_TECHNO_BLAST] = _("Techno Blast"), + [MOVE_RELIC_SONG] = _("Relic Song"), + [MOVE_SECRET_SWORD] = _("Secret Sword"), + [MOVE_GLACIATE] = _("Glaciate"), + [MOVE_BOLT_STRIKE] = _("Bolt Strike"), + [MOVE_BLUE_FLARE] = _("Blue Flare"), + [MOVE_FIERY_DANCE] = _("Fiery Dance"), + [MOVE_FREEZE_SHOCK] = _("Freeze Shock"), + [MOVE_ICE_BURN] = _("Ice Burn"), + [MOVE_SNARL] = _("Snarl"), + [MOVE_ICICLE_CRASH] = _("Icicle Crash"), + [MOVE_V_CREATE] = _("V-create"), + [MOVE_FUSION_FLARE] = _("Fusion Flare"), + [MOVE_FUSION_BOLT] = _("Fusion Bolt"), + [MOVE_FLYING_PRESS] = _("Flying Press"), + [MOVE_MAT_BLOCK] = _("Mat Block"), + [MOVE_BELCH] = _("Belch"), + [MOVE_ROTOTILLER] = _("Rototiller"), + [MOVE_STICKY_WEB] = _("Sticky Web"), + [MOVE_FELL_STINGER] = _("Fell Stinger"), + [MOVE_PHANTOM_FORCE] = _("Phantom Force"), + [MOVE_TRICK_OR_TREAT] = _("Trick-Or-Treat"), + [MOVE_NOBLE_ROAR] = _("Noble Roar"), + [MOVE_ION_DELUGE] = _("Ion Deluge"), + [MOVE_PARABOLIC_CHARGE] = _("Parabolic Charge"), + [MOVE_FORESTS_CURSE] = _("Forest's Curse"), + [MOVE_PETAL_BLIZZARD] = _("Petal Blizzard"), + [MOVE_FREEZE_DRY] = _("Freeze-Dry"), + [MOVE_DISARMING_VOICE] = _("Disarming Voice"), + [MOVE_PARTING_SHOT] = _("Parting Shot"), + [MOVE_TOPSY_TURVY] = _("Topsy-Turvy"), + [MOVE_DRAINING_KISS] = _("Draining Kiss"), + [MOVE_CRAFTY_SHIELD] = _("Crafty Shield"), + [MOVE_FLOWER_SHIELD] = _("Flower Shield"), + [MOVE_GRASSY_TERRAIN] = _("Grassy Terrain"), + [MOVE_MISTY_TERRAIN] = _("Misty Terrain"), + [MOVE_ELECTRIFY] = _("Electrify"), + [MOVE_PLAY_ROUGH] = _("Play Rough"), + [MOVE_FAIRY_WIND] = _("Fairy Wind"), + [MOVE_MOONBLAST] = _("Moonblast"), + [MOVE_BOOMBURST] = _("Boomburst"), + [MOVE_FAIRY_LOCK] = _("Fairy Lock"), + [MOVE_KINGS_SHIELD] = _("King's Shield"), + [MOVE_PLAY_NICE] = _("Play Nice"), + [MOVE_CONFIDE] = _("Confide"), + [MOVE_DIAMOND_STORM] = _("Diamond Storm"), + [MOVE_STEAM_ERUPTION] = _("Steam Eruption"), + [MOVE_HYPERSPACE_HOLE] = _("Hyprspace Hole"), + [MOVE_WATER_SHURIKEN] = _("Water Shuriken"), + [MOVE_MYSTICAL_FIRE] = _("Mystical Fire"), + [MOVE_SPIKY_SHIELD] = _("Spiky Shield"), + [MOVE_AROMATIC_MIST] = _("Aromatic Mist"), + [MOVE_EERIE_IMPULSE] = _("Eerie Impulse"), + [MOVE_VENOM_DRENCH] = _("Venom Drench"), + [MOVE_POWDER] = _("Powder"), + [MOVE_GEOMANCY] = _("Geomancy"), + [MOVE_MAGNETIC_FLUX] = _("Magnetic Flux"), + [MOVE_HAPPY_HOUR] = _("Happy Hour"), + [MOVE_ELECTRIC_TERRAIN] = _("Electric Terrain"), + [MOVE_DAZZLING_GLEAM] = _("Dazzling Gleam"), + [MOVE_CELEBRATE] = _("Celebrate"), + [MOVE_HOLD_HANDS] = _("Hold Hands"), + [MOVE_BABY_DOLL_EYES] = _("Baby-Doll Eyes"), + [MOVE_NUZZLE] = _("Nuzzle"), + [MOVE_HOLD_BACK] = _("Hold Back"), + [MOVE_INFESTATION] = _("Infestation"), + [MOVE_POWER_UP_PUNCH] = _("Power-Up Punch"), + [MOVE_OBLIVION_WING] = _("Oblivion Wing"), + [MOVE_THOUSAND_ARROWS] = _("Thousand Arrows"), + [MOVE_THOUSAND_WAVES] = _("Thousand Waves"), + [MOVE_LANDS_WRATH] = _("Land's Wrath"), + [MOVE_LIGHT_OF_RUIN] = _("Light Of Ruin"), + [MOVE_ORIGIN_PULSE] = _("Origin Pulse"), + [MOVE_PRECIPICE_BLADES] = _("Precipice Blades"), + [MOVE_DRAGON_ASCENT] = _("Dragon Ascent"), + [MOVE_HYPERSPACE_FURY] = _("Hyperspace Fury"), + [MOVE_SHORE_UP] = _("Shore Up"), + [MOVE_FIRST_IMPRESSION] = _("First Impression"), + [MOVE_BANEFUL_BUNKER] = _("Baneful Bunker"), + [MOVE_SPIRIT_SHACKLE] = _("Spirit Shackle"), + [MOVE_DARKEST_LARIAT] = _("Darkest Lariat"), + [MOVE_SPARKLING_ARIA] = _("Sparkling Aria"), + [MOVE_ICE_HAMMER] = _("Ice Hammer"), + [MOVE_FLORAL_HEALING] = _("Floral Healng"), + [MOVE_HIGH_HORSEPOWER] = _("High Horsepower"), + [MOVE_STRENGTH_SAP] = _("Strength Sap"), + [MOVE_SOLAR_BLADE] = _("Solar Blade"), + [MOVE_LEAFAGE] = _("Leafage"), + [MOVE_SPOTLIGHT] = _("Spotlight"), + [MOVE_TOXIC_THREAD] = _("Toxic Thread"), + [MOVE_LASER_FOCUS] = _("Laser Focus"), + [MOVE_GEAR_UP] = _("Gear Up"), + [MOVE_THROAT_CHOP] = _("Throat Chop"), + [MOVE_POLLEN_PUFF] = _("Pollen Puff"), + [MOVE_ANCHOR_SHOT] = _("Anchor Shot"), + [MOVE_PSYCHIC_TERRAIN] = _("Psychic Terrain"), + [MOVE_LUNGE] = _("Lunge"), + [MOVE_FIRE_LASH] = _("Fire Lash"), + [MOVE_POWER_TRIP] = _("Power Trip"), + [MOVE_BURN_UP] = _("Burn Up"), + [MOVE_SPEED_SWAP] = _("Speed Swap"), + [MOVE_SMART_STRIKE] = _("Smart Strike"), + [MOVE_PURIFY] = _("Purify"), + [MOVE_REVELATION_DANCE] = _("Revelation Dance"), + [MOVE_CORE_ENFORCER] = _("Core Enforcer"), + [MOVE_TROP_KICK] = _("Trop Kick"), + [MOVE_INSTRUCT] = _("Instruct"), + [MOVE_BEAK_BLAST] = _("Beak Blast"), + [MOVE_CLANGING_SCALES] = _("Clanging Scales"), + [MOVE_DRAGON_HAMMER] = _("Dragon Hammer"), + [MOVE_BRUTAL_SWING] = _("Brutal Swing"), + [MOVE_AURORA_VEIL] = _("Aurora Veil"), + [MOVE_SHELL_TRAP] = _("Shell Trap"), + [MOVE_FLEUR_CANNON] = _("Fleur Cannon"), + [MOVE_PSYCHIC_FANGS] = _("Psychic Fangs"), + [MOVE_STOMPING_TANTRUM] = _("Stomping Tantrum"), + [MOVE_SHADOW_BONE] = _("Shadow Bone"), + [MOVE_ACCELEROCK] = _("Accelerock"), + [MOVE_LIQUIDATION] = _("Liquidation"), + [MOVE_PRISMATIC_LASER] = _("Prismatic Laser"), + [MOVE_SPECTRAL_THIEF] = _("Spectral Thief"), + [MOVE_SUNSTEEL_STRIKE] = _("Sunsteel Strike"), + [MOVE_MOONGEIST_BEAM] = _("Moongeist Beam"), + [MOVE_TEARFUL_LOOK] = _("Tearful Look"), + [MOVE_ZING_ZAP] = _("Zing Zap"), + [MOVE_NATURES_MADNESS] = _("Nature's Madness"), + [MOVE_MULTI_ATTACK] = _("Multi-Attack"), + [MOVE_MIND_BLOWN] = _("Mind Blown"), + [MOVE_PLASMA_FISTS] = _("Plasma Fists"), + [MOVE_PHOTON_GEYSER] = _("Photon Geyser"), + [MOVE_ZIPPY_ZAP] = _("Zippy Zap"), + [MOVE_SPLISHY_SPLASH] = _("Splishy Splash"), + [MOVE_FLOATY_FALL] = _("Floaty Fall"), + [MOVE_PIKA_PAPOW] = _("Pika Papow"), + [MOVE_BOUNCY_BUBBLE] = _("Bouncy Bubble"), + [MOVE_BUZZY_BUZZ] = _("Buzzy Buzz"), + [MOVE_SIZZLY_SLIDE] = _("Sizzly Slide"), + [MOVE_GLITZY_GLOW] = _("Glitzy Glow"), + [MOVE_BADDY_BAD] = _("Baddy Bad"), + [MOVE_SAPPY_SEED] = _("Sappy Seed"), + [MOVE_FREEZY_FROST] = _("Freezy Frost"), + [MOVE_SPARKLY_SWIRL] = _("Sparkly Swirl"), + [MOVE_VEEVEE_VOLLEY] = _("Veevee Volley"), + [MOVE_DOUBLE_IRON_BASH] = _("Double Iron Bash"), + [MOVE_DYNAMAX_CANNON] = _("Dynamax Cannon"), + [MOVE_SNIPE_SHOT] = _("Snipe Shot"), + [MOVE_JAW_LOCK] = _("Jaw Lock"), + [MOVE_STUFF_CHEEKS] = _("Stuff Cheeks"), + [MOVE_NO_RETREAT] = _("No Retreat"), + [MOVE_TAR_SHOT] = _("Tar Shot"), + [MOVE_MAGIC_POWDER] = _("Magic Powder"), + [MOVE_DRAGON_DARTS] = _("Dragon Darts"), + [MOVE_TEATIME] = _("Teatime"), + [MOVE_OCTOLOCK] = _("Octolock"), + [MOVE_BOLT_BEAK] = _("Bolt Beak"), + [MOVE_FISHIOUS_REND] = _("Fishious Rend"), + [MOVE_COURT_CHANGE] = _("Court Change"), + [MOVE_CLANGOROUS_SOUL] = _("Clangorous Soul"), + [MOVE_BODY_PRESS] = _("Body Press"), + [MOVE_DECORATE] = _("Decorate"), + [MOVE_DRUM_BEATING] = _("Drum Beating"), + [MOVE_SNAP_TRAP] = _("Snap Trap"), + [MOVE_PYRO_BALL] = _("Pyro Ball"), + [MOVE_BEHEMOTH_BLADE] = _("Behemoth Blade"), + [MOVE_BEHEMOTH_BASH] = _("Behemoth Bash"), + [MOVE_AURA_WHEEL] = _("Aura Wheel"), + [MOVE_BREAKING_SWIPE] = _("Breaking Swipe"), + [MOVE_BRANCH_POKE] = _("Branch Poke"), + [MOVE_OVERDRIVE] = _("Overdrive"), + [MOVE_APPLE_ACID] = _("Apple Acid"), + [MOVE_GRAV_APPLE] = _("Grav Apple"), + [MOVE_SPIRIT_BREAK] = _("Spirit Break"), + [MOVE_STRANGE_STEAM] = _("Strange Steam"), + [MOVE_LIFE_DEW] = _("Life Dew"), + [MOVE_OBSTRUCT] = _("Obstruct"), + [MOVE_FALSE_SURRENDER] = _("False Surrender"), + [MOVE_METEOR_ASSAULT] = _("Meteor Assault"), + [MOVE_ETERNABEAM] = _("Eternabeam"), + [MOVE_STEEL_BEAM] = _("Steel Beam"), + [MOVE_EXPANDING_FORCE] = _("Expanding Force"), + [MOVE_STEEL_ROLLER] = _("Steel Roller"), + [MOVE_SCALE_SHOT] = _("Scale Shot"), + [MOVE_METEOR_BEAM] = _("Meteor Beam"), + [MOVE_SHELL_SIDE_ARM] = _("Shell Side Arm"), + [MOVE_MISTY_EXPLOSION] = _("Misty Explosion"), + [MOVE_GRASSY_GLIDE] = _("Grassy Glide"), + [MOVE_RISING_VOLTAGE] = _("Rising Voltage"), + [MOVE_TERRAIN_PULSE] = _("Terrain Pulse"), + [MOVE_SKITTER_SMACK] = _("Skitter Smack"), + [MOVE_BURNING_JEALOUSY] = _("Burning Jealousy"), + [MOVE_LASH_OUT] = _("Lash Out"), + [MOVE_POLTERGEIST] = _("Poltergeist"), + [MOVE_CORROSIVE_GAS] = _("Corrosive Gas"), + [MOVE_COACHING] = _("Coaching"), + [MOVE_FLIP_TURN] = _("Flip Turn"), + [MOVE_TRIPLE_AXEL] = _("Triple Axel"), + [MOVE_DUAL_WINGBEAT] = _("Dual Wingbeat"), + [MOVE_SCORCHING_SANDS] = _("Scorching Sands"), + [MOVE_JUNGLE_HEALING] = _("Jungle Healng"), + [MOVE_WICKED_BLOW] = _("Wicked Blow"), + [MOVE_SURGING_STRIKES] = _("Surging Strikes"), + [MOVE_THUNDER_CAGE] = _("Thunder Cage"), + [MOVE_DRAGON_ENERGY] = _("Dragon Energy"), + [MOVE_FREEZING_GLARE] = _("Freezing Glare"), + [MOVE_FIERY_WRATH] = _("Fiery Wrath"), + [MOVE_THUNDEROUS_KICK] = _("Thunderous Kick"), + [MOVE_GLACIAL_LANCE] = _("Glacial Lance"), + [MOVE_ASTRAL_BARRAGE] = _("Astral Barrage"), + [MOVE_EERIE_SPELL] = _("Eerie Spell"), + [MOVE_DIRE_CLAW] = _("Dire Claw"), + [MOVE_PSYSHIELD_BASH] = _("Psyshield Bash"), + [MOVE_POWER_SHIFT] = _("Power Shift"), + [MOVE_STONE_AXE] = _("Stone Axe"), + [MOVE_SPRINGTIDE_STORM] = _("Springtide Storm"), + [MOVE_MYSTICAL_POWER] = _("Mystical Power"), + [MOVE_RAGING_FURY] = _("Raging Fury"), + [MOVE_WAVE_CRASH] = _("Wave Crash"), + [MOVE_CHLOROBLAST] = _("Chloroblast"), + [MOVE_MOUNTAIN_GALE] = _("Mountain Gale"), + [MOVE_VICTORY_DANCE] = _("Victory Dance"), + [MOVE_HEADLONG_RUSH] = _("Headlong Rush"), + [MOVE_BARB_BARRAGE] = _("Barb Barrage"), + [MOVE_ESPER_WING] = _("Esper Wing"), + [MOVE_BITTER_MALICE] = _("Bitter Malice"), + [MOVE_SHELTER] = _("Shelter"), + [MOVE_TRIPLE_ARROWS] = _("Triple Arrows"), + [MOVE_INFERNAL_PARADE] = _("Infernal Parade"), + [MOVE_CEASELESS_EDGE] = _("Ceaseless Edge"), + [MOVE_BLEAKWIND_STORM] = _("Bleakwind Storm"), + [MOVE_WILDBOLT_STORM] = _("Wildbolt Storm"), + [MOVE_SANDSEAR_STORM] = _("Sandsear Storm"), + [MOVE_LUNAR_BLESSING] = _("Lunar Blessing"), + [MOVE_TAKE_HEART] = _("Take Heart"), +}; +#else +// 12 letters +const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = +{ + [MOVE_NONE] = _("-"), + [MOVE_POUND] = _("Pound"), + [MOVE_KARATE_CHOP] = _("Karate Chop"), + [MOVE_DOUBLE_SLAP] = _("Double Slap"), + [MOVE_COMET_PUNCH] = _("Comet Punch"), + [MOVE_MEGA_PUNCH] = _("Mega Punch"), + [MOVE_PAY_DAY] = _("Pay Day"), + [MOVE_FIRE_PUNCH] = _("Fire Punch"), + [MOVE_ICE_PUNCH] = _("Ice Punch"), + [MOVE_THUNDER_PUNCH] = _("ThunderPunch"), + [MOVE_SCRATCH] = _("Scratch"), + [MOVE_VISE_GRIP] = _("Vise Grip"), + [MOVE_GUILLOTINE] = _("Guillotine"), + [MOVE_RAZOR_WIND] = _("Razor Wind"), + [MOVE_SWORDS_DANCE] = _("Swords Dance"), + [MOVE_CUT] = _("Cut"), + [MOVE_GUST] = _("Gust"), + [MOVE_WING_ATTACK] = _("Wing Attack"), + [MOVE_WHIRLWIND] = _("Whirlwind"), + [MOVE_FLY] = _("Fly"), + [MOVE_BIND] = _("Bind"), + [MOVE_SLAM] = _("Slam"), + [MOVE_VINE_WHIP] = _("Vine Whip"), + [MOVE_STOMP] = _("Stomp"), + [MOVE_DOUBLE_KICK] = _("Double Kick"), + [MOVE_MEGA_KICK] = _("Mega Kick"), + [MOVE_JUMP_KICK] = _("Jump Kick"), + [MOVE_ROLLING_KICK] = _("Rolling Kick"), + [MOVE_SAND_ATTACK] = _("Sand Attack"), + [MOVE_HEADBUTT] = _("Headbutt"), + [MOVE_HORN_ATTACK] = _("Horn Attack"), + [MOVE_FURY_ATTACK] = _("Fury Attack"), + [MOVE_HORN_DRILL] = _("Horn Drill"), + [MOVE_TACKLE] = _("Tackle"), + [MOVE_BODY_SLAM] = _("Body Slam"), + [MOVE_WRAP] = _("Wrap"), + [MOVE_TAKE_DOWN] = _("Take Down"), + [MOVE_THRASH] = _("Thrash"), + [MOVE_DOUBLE_EDGE] = _("Double-Edge"), + [MOVE_TAIL_WHIP] = _("Tail Whip"), + [MOVE_POISON_STING] = _("Poison Sting"), + [MOVE_TWINEEDLE] = _("Twineedle"), + [MOVE_PIN_MISSILE] = _("Pin Missile"), + [MOVE_LEER] = _("Leer"), + [MOVE_BITE] = _("Bite"), + [MOVE_GROWL] = _("Growl"), + [MOVE_ROAR] = _("Roar"), + [MOVE_SING] = _("Sing"), + [MOVE_SUPERSONIC] = _("Supersonic"), + [MOVE_SONIC_BOOM] = _("Sonic Boom"), + [MOVE_DISABLE] = _("Disable"), + [MOVE_ACID] = _("Acid"), + [MOVE_EMBER] = _("Ember"), + [MOVE_FLAMETHROWER] = _("Flamethrower"), + [MOVE_MIST] = _("Mist"), + [MOVE_WATER_GUN] = _("Water Gun"), + [MOVE_HYDRO_PUMP] = _("Hydro Pump"), + [MOVE_SURF] = _("Surf"), + [MOVE_ICE_BEAM] = _("Ice Beam"), + [MOVE_BLIZZARD] = _("Blizzard"), + [MOVE_PSYBEAM] = _("Psybeam"), + [MOVE_BUBBLE_BEAM] = _("Bubble Beam"), + [MOVE_AURORA_BEAM] = _("Aurora Beam"), + [MOVE_HYPER_BEAM] = _("Hyper Beam"), + [MOVE_PECK] = _("Peck"), + [MOVE_DRILL_PECK] = _("Drill Peck"), + [MOVE_SUBMISSION] = _("Submission"), + [MOVE_LOW_KICK] = _("Low Kick"), + [MOVE_COUNTER] = _("Counter"), + [MOVE_SEISMIC_TOSS] = _("Seismic Toss"), + [MOVE_STRENGTH] = _("Strength"), + [MOVE_ABSORB] = _("Absorb"), + [MOVE_MEGA_DRAIN] = _("Mega Drain"), + [MOVE_LEECH_SEED] = _("Leech Seed"), + [MOVE_GROWTH] = _("Growth"), + [MOVE_RAZOR_LEAF] = _("Razor Leaf"), + [MOVE_SOLAR_BEAM] = _("Solar Beam"), + [MOVE_POISON_POWDER] = _("PoisonPowder"), + [MOVE_STUN_SPORE] = _("Stun Spore"), + [MOVE_SLEEP_POWDER] = _("Sleep Powder"), + [MOVE_PETAL_DANCE] = _("Petal Dance"), + [MOVE_STRING_SHOT] = _("String Shot"), + [MOVE_DRAGON_RAGE] = _("Dragon Rage"), + [MOVE_FIRE_SPIN] = _("Fire Spin"), + [MOVE_THUNDER_SHOCK] = _("ThunderShock"), + [MOVE_THUNDERBOLT] = _("Thunderbolt"), + [MOVE_THUNDER_WAVE] = _("Thunder Wave"), + [MOVE_THUNDER] = _("Thunder"), + [MOVE_ROCK_THROW] = _("Rock Throw"), + [MOVE_EARTHQUAKE] = _("Earthquake"), + [MOVE_FISSURE] = _("Fissure"), + [MOVE_DIG] = _("Dig"), + [MOVE_TOXIC] = _("Toxic"), + [MOVE_CONFUSION] = _("Confusion"), + [MOVE_PSYCHIC] = _("Psychic"), + [MOVE_HYPNOSIS] = _("Hypnosis"), + [MOVE_MEDITATE] = _("Meditate"), + [MOVE_AGILITY] = _("Agility"), + [MOVE_QUICK_ATTACK] = _("Quick Attack"), + [MOVE_RAGE] = _("Rage"), + [MOVE_TELEPORT] = _("Teleport"), + [MOVE_NIGHT_SHADE] = _("Night Shade"), + [MOVE_MIMIC] = _("Mimic"), + [MOVE_SCREECH] = _("Screech"), + [MOVE_DOUBLE_TEAM] = _("Double Team"), + [MOVE_RECOVER] = _("Recover"), + [MOVE_HARDEN] = _("Harden"), + [MOVE_MINIMIZE] = _("Minimize"), + [MOVE_SMOKESCREEN] = _("Smokescreen"), + [MOVE_CONFUSE_RAY] = _("Confuse Ray"), + [MOVE_WITHDRAW] = _("Withdraw"), + [MOVE_DEFENSE_CURL] = _("Defense Curl"), + [MOVE_BARRIER] = _("Barrier"), + [MOVE_LIGHT_SCREEN] = _("Light Screen"), + [MOVE_HAZE] = _("Haze"), + [MOVE_REFLECT] = _("Reflect"), + [MOVE_FOCUS_ENERGY] = _("Focus Energy"), + [MOVE_BIDE] = _("Bide"), + [MOVE_METRONOME] = _("Metronome"), + [MOVE_MIRROR_MOVE] = _("Mirror Move"), + [MOVE_SELF_DESTRUCT] = _("SelfDestruct"), + [MOVE_EGG_BOMB] = _("Egg Bomb"), + [MOVE_LICK] = _("Lick"), + [MOVE_SMOG] = _("Smog"), + [MOVE_SLUDGE] = _("Sludge"), + [MOVE_BONE_CLUB] = _("Bone Club"), + [MOVE_FIRE_BLAST] = _("Fire Blast"), + [MOVE_WATERFALL] = _("Waterfall"), + [MOVE_CLAMP] = _("Clamp"), + [MOVE_SWIFT] = _("Swift"), + [MOVE_SKULL_BASH] = _("Skull Bash"), + [MOVE_SPIKE_CANNON] = _("Spike Cannon"), + [MOVE_CONSTRICT] = _("Constrict"), + [MOVE_AMNESIA] = _("Amnesia"), + [MOVE_KINESIS] = _("Kinesis"), + [MOVE_SOFT_BOILED] = _("Soft-Boiled"), + [MOVE_HIGH_JUMP_KICK] = _("HighJumpKick"), + [MOVE_GLARE] = _("Glare"), + [MOVE_DREAM_EATER] = _("Dream Eater"), + [MOVE_POISON_GAS] = _("Poison Gas"), + [MOVE_BARRAGE] = _("Barrage"), + [MOVE_LEECH_LIFE] = _("Leech Life"), + [MOVE_LOVELY_KISS] = _("Lovely Kiss"), + [MOVE_SKY_ATTACK] = _("Sky Attack"), + [MOVE_TRANSFORM] = _("Transform"), + [MOVE_BUBBLE] = _("Bubble"), + [MOVE_DIZZY_PUNCH] = _("Dizzy Punch"), + [MOVE_SPORE] = _("Spore"), + [MOVE_FLASH] = _("Flash"), + [MOVE_PSYWAVE] = _("Psywave"), + [MOVE_SPLASH] = _("Splash"), + [MOVE_ACID_ARMOR] = _("Acid Armor"), + [MOVE_CRABHAMMER] = _("Crabhammer"), + [MOVE_EXPLOSION] = _("Explosion"), + [MOVE_FURY_SWIPES] = _("Fury Swipes"), + [MOVE_BONEMERANG] = _("Bonemerang"), + [MOVE_REST] = _("Rest"), + [MOVE_ROCK_SLIDE] = _("Rock Slide"), + [MOVE_HYPER_FANG] = _("Hyper Fang"), + [MOVE_SHARPEN] = _("Sharpen"), + [MOVE_CONVERSION] = _("Conversion"), + [MOVE_TRI_ATTACK] = _("Tri Attack"), + [MOVE_SUPER_FANG] = _("Super Fang"), + [MOVE_SLASH] = _("Slash"), + [MOVE_SUBSTITUTE] = _("Substitute"), + [MOVE_STRUGGLE] = _("Struggle"), + [MOVE_SKETCH] = _("Sketch"), + [MOVE_TRIPLE_KICK] = _("Triple Kick"), + [MOVE_THIEF] = _("Thief"), + [MOVE_SPIDER_WEB] = _("Spider Web"), + [MOVE_MIND_READER] = _("Mind Reader"), + [MOVE_NIGHTMARE] = _("Nightmare"), + [MOVE_FLAME_WHEEL] = _("Flame Wheel"), + [MOVE_SNORE] = _("Snore"), + [MOVE_CURSE] = _("Curse"), + [MOVE_FLAIL] = _("Flail"), + [MOVE_CONVERSION_2] = _("Conversion 2"), + [MOVE_AEROBLAST] = _("Aeroblast"), + [MOVE_COTTON_SPORE] = _("Cotton Spore"), + [MOVE_REVERSAL] = _("Reversal"), + [MOVE_SPITE] = _("Spite"), + [MOVE_POWDER_SNOW] = _("Powder Snow"), + [MOVE_PROTECT] = _("Protect"), + [MOVE_MACH_PUNCH] = _("Mach Punch"), + [MOVE_SCARY_FACE] = _("Scary Face"), + [MOVE_FEINT_ATTACK] = _("Feint Attack"), + [MOVE_SWEET_KISS] = _("Sweet Kiss"), + [MOVE_BELLY_DRUM] = _("Belly Drum"), + [MOVE_SLUDGE_BOMB] = _("Sludge Bomb"), + [MOVE_MUD_SLAP] = _("Mud-Slap"), + [MOVE_OCTAZOOKA] = _("Octazooka"), + [MOVE_SPIKES] = _("Spikes"), + [MOVE_ZAP_CANNON] = _("Zap Cannon"), + [MOVE_FORESIGHT] = _("Foresight"), + [MOVE_DESTINY_BOND] = _("Destiny Bond"), + [MOVE_PERISH_SONG] = _("Perish Song"), + [MOVE_ICY_WIND] = _("Icy Wind"), + [MOVE_DETECT] = _("Detect"), + [MOVE_BONE_RUSH] = _("Bone Rush"), + [MOVE_LOCK_ON] = _("Lock-On"), + [MOVE_OUTRAGE] = _("Outrage"), + [MOVE_SANDSTORM] = _("Sandstorm"), + [MOVE_GIGA_DRAIN] = _("Giga Drain"), + [MOVE_ENDURE] = _("Endure"), + [MOVE_CHARM] = _("Charm"), + [MOVE_ROLLOUT] = _("Rollout"), + [MOVE_FALSE_SWIPE] = _("False Swipe"), + [MOVE_SWAGGER] = _("Swagger"), + [MOVE_MILK_DRINK] = _("Milk Drink"), + [MOVE_SPARK] = _("Spark"), + [MOVE_FURY_CUTTER] = _("Fury Cutter"), + [MOVE_STEEL_WING] = _("Steel Wing"), + [MOVE_MEAN_LOOK] = _("Mean Look"), + [MOVE_ATTRACT] = _("Attract"), + [MOVE_SLEEP_TALK] = _("Sleep Talk"), + [MOVE_HEAL_BELL] = _("Heal Bell"), + [MOVE_RETURN] = _("Return"), + [MOVE_PRESENT] = _("Present"), + [MOVE_FRUSTRATION] = _("Frustration"), + [MOVE_SAFEGUARD] = _("Safeguard"), + [MOVE_PAIN_SPLIT] = _("Pain Split"), + [MOVE_SACRED_FIRE] = _("Sacred Fire"), + [MOVE_MAGNITUDE] = _("Magnitude"), + [MOVE_DYNAMIC_PUNCH] = _("DynamicPunch"), + [MOVE_MEGAHORN] = _("Megahorn"), + [MOVE_DRAGON_BREATH] = _("DragonBreath"), + [MOVE_BATON_PASS] = _("Baton Pass"), + [MOVE_ENCORE] = _("Encore"), + [MOVE_PURSUIT] = _("Pursuit"), + [MOVE_RAPID_SPIN] = _("Rapid Spin"), + [MOVE_SWEET_SCENT] = _("Sweet Scent"), + [MOVE_IRON_TAIL] = _("Iron Tail"), + [MOVE_METAL_CLAW] = _("Metal Claw"), + [MOVE_VITAL_THROW] = _("Vital Throw"), + [MOVE_MORNING_SUN] = _("Morning Sun"), + [MOVE_SYNTHESIS] = _("Synthesis"), + [MOVE_MOONLIGHT] = _("Moonlight"), + [MOVE_HIDDEN_POWER] = _("Hidden Power"), + [MOVE_CROSS_CHOP] = _("Cross Chop"), + [MOVE_TWISTER] = _("Twister"), + [MOVE_RAIN_DANCE] = _("Rain Dance"), + [MOVE_SUNNY_DAY] = _("Sunny Day"), + [MOVE_CRUNCH] = _("Crunch"), + [MOVE_MIRROR_COAT] = _("Mirror Coat"), + [MOVE_PSYCH_UP] = _("Psych Up"), + [MOVE_EXTREME_SPEED] = _("ExtremeSpeed"), + [MOVE_ANCIENT_POWER] = _("AncientPower"), + [MOVE_SHADOW_BALL] = _("Shadow Ball"), + [MOVE_FUTURE_SIGHT] = _("Future Sight"), + [MOVE_ROCK_SMASH] = _("Rock Smash"), + [MOVE_WHIRLPOOL] = _("Whirlpool"), + [MOVE_BEAT_UP] = _("Beat Up"), + [MOVE_FAKE_OUT] = _("Fake Out"), + [MOVE_UPROAR] = _("Uproar"), + [MOVE_STOCKPILE] = _("Stockpile"), + [MOVE_SPIT_UP] = _("Spit Up"), + [MOVE_SWALLOW] = _("Swallow"), + [MOVE_HEAT_WAVE] = _("Heat Wave"), + [MOVE_HAIL] = _("Hail"), + [MOVE_TORMENT] = _("Torment"), + [MOVE_FLATTER] = _("Flatter"), + [MOVE_WILL_O_WISP] = _("Will-o-Wisp"), + [MOVE_MEMENTO] = _("Memento"), + [MOVE_FACADE] = _("Facade"), + [MOVE_FOCUS_PUNCH] = _("Focus Punch"), + [MOVE_SMELLING_SALTS] = _("SmellngSalts"), + [MOVE_FOLLOW_ME] = _("Follow Me"), + [MOVE_NATURE_POWER] = _("Nature Power"), + [MOVE_CHARGE] = _("Charge"), + [MOVE_TAUNT] = _("Taunt"), + [MOVE_HELPING_HAND] = _("Helping Hand"), + [MOVE_TRICK] = _("Trick"), + [MOVE_ROLE_PLAY] = _("Role Play"), + [MOVE_WISH] = _("Wish"), + [MOVE_ASSIST] = _("Assist"), + [MOVE_INGRAIN] = _("Ingrain"), + [MOVE_SUPERPOWER] = _("Superpower"), + [MOVE_MAGIC_COAT] = _("Magic Coat"), + [MOVE_RECYCLE] = _("Recycle"), + [MOVE_REVENGE] = _("Revenge"), + [MOVE_BRICK_BREAK] = _("Brick Break"), + [MOVE_YAWN] = _("Yawn"), + [MOVE_KNOCK_OFF] = _("Knock Off"), + [MOVE_ENDEAVOR] = _("Endeavor"), + [MOVE_ERUPTION] = _("Eruption"), + [MOVE_SKILL_SWAP] = _("Skill Swap"), + [MOVE_IMPRISON] = _("Imprison"), + [MOVE_REFRESH] = _("Refresh"), + [MOVE_GRUDGE] = _("Grudge"), + [MOVE_SNATCH] = _("Snatch"), + [MOVE_SECRET_POWER] = _("Secret Power"), + [MOVE_DIVE] = _("Dive"), + [MOVE_ARM_THRUST] = _("Arm Thrust"), + [MOVE_CAMOUFLAGE] = _("Camouflage"), + [MOVE_TAIL_GLOW] = _("Tail Glow"), + [MOVE_LUSTER_PURGE] = _("Luster Purge"), + [MOVE_MIST_BALL] = _("Mist Ball"), + [MOVE_FEATHER_DANCE] = _("FeatherDance"), + [MOVE_TEETER_DANCE] = _("Teeter Dance"), + [MOVE_BLAZE_KICK] = _("Blaze Kick"), + [MOVE_MUD_SPORT] = _("Mud Sport"), + [MOVE_ICE_BALL] = _("Ice Ball"), + [MOVE_NEEDLE_ARM] = _("Needle Arm"), + [MOVE_SLACK_OFF] = _("Slack Off"), + [MOVE_HYPER_VOICE] = _("Hyper Voice"), + [MOVE_POISON_FANG] = _("Poison Fang"), + [MOVE_CRUSH_CLAW] = _("Crush Claw"), + [MOVE_BLAST_BURN] = _("Blast Burn"), + [MOVE_HYDRO_CANNON] = _("Hydro Cannon"), + [MOVE_METEOR_MASH] = _("Meteor Mash"), + [MOVE_ASTONISH] = _("Astonish"), + [MOVE_WEATHER_BALL] = _("Weather Ball"), + [MOVE_AROMATHERAPY] = _("Aromatherapy"), + [MOVE_FAKE_TEARS] = _("Fake Tears"), + [MOVE_AIR_CUTTER] = _("Air Cutter"), + [MOVE_OVERHEAT] = _("Overheat"), + [MOVE_ODOR_SLEUTH] = _("Odor Sleuth"), + [MOVE_ROCK_TOMB] = _("Rock Tomb"), + [MOVE_SILVER_WIND] = _("Silver Wind"), + [MOVE_METAL_SOUND] = _("Metal Sound"), + [MOVE_GRASS_WHISTLE] = _("GrassWhistle"), + [MOVE_TICKLE] = _("Tickle"), + [MOVE_COSMIC_POWER] = _("Cosmic Power"), + [MOVE_WATER_SPOUT] = _("Water Spout"), + [MOVE_SIGNAL_BEAM] = _("Signal Beam"), + [MOVE_SHADOW_PUNCH] = _("Shadow Punch"), + [MOVE_EXTRASENSORY] = _("Extrasensory"), + [MOVE_SKY_UPPERCUT] = _("Sky Uppercut"), + [MOVE_SAND_TOMB] = _("Sand Tomb"), + [MOVE_SHEER_COLD] = _("Sheer Cold"), + [MOVE_MUDDY_WATER] = _("Muddy Water"), + [MOVE_BULLET_SEED] = _("Bullet Seed"), + [MOVE_AERIAL_ACE] = _("Aerial Ace"), + [MOVE_ICICLE_SPEAR] = _("Icicle Spear"), + [MOVE_IRON_DEFENSE] = _("Iron Defense"), + [MOVE_BLOCK] = _("Block"), + [MOVE_HOWL] = _("Howl"), + [MOVE_DRAGON_CLAW] = _("Dragon Claw"), + [MOVE_FRENZY_PLANT] = _("Frenzy Plant"), + [MOVE_BULK_UP] = _("Bulk Up"), + [MOVE_BOUNCE] = _("Bounce"), + [MOVE_MUD_SHOT] = _("Mud Shot"), + [MOVE_POISON_TAIL] = _("Poison Tail"), + [MOVE_COVET] = _("Covet"), + [MOVE_VOLT_TACKLE] = _("Volt Tackle"), + [MOVE_MAGICAL_LEAF] = _("Magical Leaf"), + [MOVE_WATER_SPORT] = _("Water Sport"), + [MOVE_CALM_MIND] = _("Calm Mind"), + [MOVE_LEAF_BLADE] = _("Leaf Blade"), + [MOVE_DRAGON_DANCE] = _("Dragon Dance"), + [MOVE_ROCK_BLAST] = _("Rock Blast"), + [MOVE_SHOCK_WAVE] = _("Shock Wave"), + [MOVE_WATER_PULSE] = _("Water Pulse"), + [MOVE_DOOM_DESIRE] = _("Doom Desire"), + [MOVE_PSYCHO_BOOST] = _("Psycho Boost"), + [MOVE_ROOST] = _("Roost"), + [MOVE_GRAVITY] = _("Gravity"), + [MOVE_MIRACLE_EYE] = _("Miracle Eye"), + [MOVE_WAKE_UP_SLAP] = _("Wake-Up Slap"), + [MOVE_HAMMER_ARM] = _("Hammer Arm"), + [MOVE_GYRO_BALL] = _("Gyro Ball"), + [MOVE_HEALING_WISH] = _("Healing Wish"), + [MOVE_BRINE] = _("Brine"), + [MOVE_NATURAL_GIFT] = _("Natural Gift"), + [MOVE_FEINT] = _("Feint"), + [MOVE_PLUCK] = _("Pluck"), + [MOVE_TAILWIND] = _("Tailwind"), + [MOVE_ACUPRESSURE] = _("Acupressure"), + [MOVE_METAL_BURST] = _("Metal Burst"), + [MOVE_U_TURN] = _("U-turn"), + [MOVE_CLOSE_COMBAT] = _("Close Combat"), + [MOVE_PAYBACK] = _("Payback"), + [MOVE_ASSURANCE] = _("Assurance"), + [MOVE_EMBARGO] = _("Embargo"), + [MOVE_FLING] = _("Fling"), + [MOVE_PSYCHO_SHIFT] = _("Psycho Shift"), + [MOVE_TRUMP_CARD] = _("Trump Card"), + [MOVE_HEAL_BLOCK] = _("Heal Block"), + [MOVE_WRING_OUT] = _("Wring Out"), + [MOVE_POWER_TRICK] = _("Power Trick"), + [MOVE_GASTRO_ACID] = _("Gastro Acid"), + [MOVE_LUCKY_CHANT] = _("Lucky Chant"), + [MOVE_ME_FIRST] = _("Me First"), + [MOVE_COPYCAT] = _("Copycat"), + [MOVE_POWER_SWAP] = _("Power Swap"), + [MOVE_GUARD_SWAP] = _("Guard Swap"), + [MOVE_PUNISHMENT] = _("Punishment"), + [MOVE_LAST_RESORT] = _("Last Resort"), + [MOVE_WORRY_SEED] = _("Worry Seed"), + [MOVE_SUCKER_PUNCH] = _("Sucker Punch"), + [MOVE_TOXIC_SPIKES] = _("Toxic Spikes"), + [MOVE_HEART_SWAP] = _("Heart Swap"), + [MOVE_AQUA_RING] = _("Aqua Ring"), + [MOVE_MAGNET_RISE] = _("Magnet Rise"), + [MOVE_FLARE_BLITZ] = _("Flare Blitz"), + [MOVE_FORCE_PALM] = _("Force Palm"), + [MOVE_AURA_SPHERE] = _("Aura Sphere"), + [MOVE_ROCK_POLISH] = _("Rock Polish"), + [MOVE_POISON_JAB] = _("Poison Jab"), + [MOVE_DARK_PULSE] = _("Dark Pulse"), + [MOVE_NIGHT_SLASH] = _("Night Slash"), + [MOVE_AQUA_TAIL] = _("Aqua Tail"), + [MOVE_SEED_BOMB] = _("Seed Bomb"), + [MOVE_AIR_SLASH] = _("Air Slash"), + [MOVE_X_SCISSOR] = _("X-Scissor"), + [MOVE_BUG_BUZZ] = _("Bug Buzz"), + [MOVE_DRAGON_PULSE] = _("Dragon Pulse"), + [MOVE_DRAGON_RUSH] = _("Dragon Rush"), + [MOVE_POWER_GEM] = _("Power Gem"), + [MOVE_DRAIN_PUNCH] = _("Drain Punch"), + [MOVE_VACUUM_WAVE] = _("Vacuum Wave"), + [MOVE_FOCUS_BLAST] = _("Focus Blast"), + [MOVE_ENERGY_BALL] = _("Energy Ball"), + [MOVE_BRAVE_BIRD] = _("Brave Bird"), + [MOVE_EARTH_POWER] = _("Earth Power"), + [MOVE_SWITCHEROO] = _("Switcheroo"), + [MOVE_GIGA_IMPACT] = _("Giga Impact"), + [MOVE_NASTY_PLOT] = _("Nasty Plot"), + [MOVE_BULLET_PUNCH] = _("Bullet Punch"), + [MOVE_AVALANCHE] = _("Avalanche"), + [MOVE_ICE_SHARD] = _("Ice Shard"), + [MOVE_SHADOW_CLAW] = _("Shadow Claw"), + [MOVE_THUNDER_FANG] = _("Thunder Fang"), + [MOVE_ICE_FANG] = _("Ice Fang"), + [MOVE_FIRE_FANG] = _("Fire Fang"), + [MOVE_SHADOW_SNEAK] = _("Shadow Sneak"), + [MOVE_MUD_BOMB] = _("Mud Bomb"), + [MOVE_PSYCHO_CUT] = _("Psycho Cut"), + [MOVE_ZEN_HEADBUTT] = _("Zen Headbutt"), + [MOVE_MIRROR_SHOT] = _("Mirror Shot"), + [MOVE_FLASH_CANNON] = _("Flash Cannon"), + [MOVE_ROCK_CLIMB] = _("Rock Climb"), + [MOVE_DEFOG] = _("Defog"), + [MOVE_TRICK_ROOM] = _("Trick Room"), + [MOVE_DRACO_METEOR] = _("Draco Meteor"), + [MOVE_DISCHARGE] = _("Discharge"), + [MOVE_LAVA_PLUME] = _("Lava Plume"), + [MOVE_LEAF_STORM] = _("Leaf Storm"), + [MOVE_POWER_WHIP] = _("Power Whip"), + [MOVE_ROCK_WRECKER] = _("Rock Wrecker"), + [MOVE_CROSS_POISON] = _("Cross Poison"), + [MOVE_GUNK_SHOT] = _("Gunk Shot"), + [MOVE_IRON_HEAD] = _("Iron Head"), + [MOVE_MAGNET_BOMB] = _("Magnet Bomb"), + [MOVE_STONE_EDGE] = _("Stone Edge"), + [MOVE_CAPTIVATE] = _("Captivate"), + [MOVE_STEALTH_ROCK] = _("Stealth Rock"), + [MOVE_GRASS_KNOT] = _("Grass Knot"), + [MOVE_CHATTER] = _("Chatter"), + [MOVE_JUDGMENT] = _("Judgment"), + [MOVE_BUG_BITE] = _("Bug Bite"), + [MOVE_CHARGE_BEAM] = _("Charge Beam"), + [MOVE_WOOD_HAMMER] = _("Wood Hammer"), + [MOVE_AQUA_JET] = _("Aqua Jet"), + [MOVE_ATTACK_ORDER] = _("Attack Order"), + [MOVE_DEFEND_ORDER] = _("Defend Order"), + [MOVE_HEAL_ORDER] = _("Heal Order"), + [MOVE_HEAD_SMASH] = _("Head Smash"), + [MOVE_DOUBLE_HIT] = _("Double Hit"), + [MOVE_ROAR_OF_TIME] = _("Roar of Time"), + [MOVE_SPACIAL_REND] = _("Spacial Rend"), + [MOVE_LUNAR_DANCE] = _("Lunar Dance"), + [MOVE_CRUSH_GRIP] = _("Crush Grip"), + [MOVE_MAGMA_STORM] = _("Magma Storm"), + [MOVE_DARK_VOID] = _("Dark Void"), + [MOVE_SEED_FLARE] = _("Seed Flare"), + [MOVE_OMINOUS_WIND] = _("Ominous Wind"), + [MOVE_SHADOW_FORCE] = _("Shadow Force"), + [MOVE_HONE_CLAWS] = _("Hone Claws"), + [MOVE_WIDE_GUARD] = _("Wide Guard"), + [MOVE_GUARD_SPLIT] = _("Guard Split"), + [MOVE_POWER_SPLIT] = _("Power Split"), + [MOVE_WONDER_ROOM] = _("Wonder Room"), + [MOVE_PSYSHOCK] = _("Psyshock"), + [MOVE_VENOSHOCK] = _("Venoshock"), + [MOVE_AUTOTOMIZE] = _("Autotomize"), + [MOVE_RAGE_POWDER] = _("Rage Powder"), + [MOVE_TELEKINESIS] = _("Telekinesis"), + [MOVE_MAGIC_ROOM] = _("Magic Room"), + [MOVE_SMACK_DOWN] = _("Smack Down"), + [MOVE_STORM_THROW] = _("Storm Throw"), + [MOVE_FLAME_BURST] = _("Flame Burst"), + [MOVE_SLUDGE_WAVE] = _("Sludge Wave"), + [MOVE_QUIVER_DANCE] = _("Quiver Dance"), + [MOVE_HEAVY_SLAM] = _("Heavy Slam"), + [MOVE_SYNCHRONOISE] = _("Synchronoise"), + [MOVE_ELECTRO_BALL] = _("Electro Ball"), + [MOVE_SOAK] = _("Soak"), + [MOVE_FLAME_CHARGE] = _("Flame Charge"), + [MOVE_COIL] = _("Coil"), + [MOVE_LOW_SWEEP] = _("Low Sweep"), + [MOVE_ACID_SPRAY] = _("Acid Spray"), + [MOVE_FOUL_PLAY] = _("Foul Play"), + [MOVE_SIMPLE_BEAM] = _("Simple Beam"), + [MOVE_ENTRAINMENT] = _("Entrainment"), + [MOVE_AFTER_YOU] = _("After You"), + [MOVE_ROUND] = _("Round"), + [MOVE_ECHOED_VOICE] = _("Echoed Voice"), + [MOVE_CHIP_AWAY] = _("Chip Away"), + [MOVE_CLEAR_SMOG] = _("Clear Smog"), + [MOVE_STORED_POWER] = _("Stored Power"), + [MOVE_QUICK_GUARD] = _("Quick Guard"), + [MOVE_ALLY_SWITCH] = _("Ally Switch"), + [MOVE_SCALD] = _("Scald"), + [MOVE_SHELL_SMASH] = _("Shell Smash"), + [MOVE_HEAL_PULSE] = _("Heal Pulse"), + [MOVE_HEX] = _("Hex"), + [MOVE_SKY_DROP] = _("Sky Drop"), + [MOVE_SHIFT_GEAR] = _("Shift Gear"), + [MOVE_CIRCLE_THROW] = _("Circle Throw"), + [MOVE_INCINERATE] = _("Incinerate"), + [MOVE_QUASH] = _("Quash"), + [MOVE_ACROBATICS] = _("Acrobatics"), + [MOVE_REFLECT_TYPE] = _("Reflect Type"), + [MOVE_RETALIATE] = _("Retaliate"), + [MOVE_FINAL_GAMBIT] = _("Final Gambit"), + [MOVE_BESTOW] = _("Bestow"), + [MOVE_INFERNO] = _("Inferno"), + [MOVE_WATER_PLEDGE] = _("Water Pledge"), + [MOVE_FIRE_PLEDGE] = _("Fire Pledge"), + [MOVE_GRASS_PLEDGE] = _("Grass Pledge"), + [MOVE_VOLT_SWITCH] = _("Volt Switch"), + [MOVE_STRUGGLE_BUG] = _("Struggle Bug"), + [MOVE_BULLDOZE] = _("Bulldoze"), + [MOVE_FROST_BREATH] = _("Frost Breath"), + [MOVE_DRAGON_TAIL] = _("Dragon Tail"), + [MOVE_WORK_UP] = _("Work Up"), + [MOVE_ELECTROWEB] = _("Electroweb"), + [MOVE_WILD_CHARGE] = _("Wild Charge"), + [MOVE_DRILL_RUN] = _("Drill Run"), + [MOVE_DUAL_CHOP] = _("Dual Chop"), + [MOVE_HEART_STAMP] = _("Heart Stamp"), + [MOVE_HORN_LEECH] = _("Horn Leech"), + [MOVE_SACRED_SWORD] = _("Sacred Sword"), + [MOVE_RAZOR_SHELL] = _("Razor Shell"), + [MOVE_HEAT_CRASH] = _("Heat Crash"), + [MOVE_LEAF_TORNADO] = _("Leaf Tornado"), + [MOVE_STEAMROLLER] = _("Steamroller"), + [MOVE_COTTON_GUARD] = _("Cotton Guard"), + [MOVE_NIGHT_DAZE] = _("Night Daze"), + [MOVE_PSYSTRIKE] = _("Psystrike"), + [MOVE_TAIL_SLAP] = _("Tail Slap"), + [MOVE_HURRICANE] = _("Hurricane"), + [MOVE_HEAD_CHARGE] = _("Head Charge"), + [MOVE_GEAR_GRIND] = _("Gear Grind"), + [MOVE_SEARING_SHOT] = _("Searing Shot"), + [MOVE_TECHNO_BLAST] = _("Techno Blast"), + [MOVE_RELIC_SONG] = _("Relic Song"), + [MOVE_SECRET_SWORD] = _("Secret Sword"), + [MOVE_GLACIATE] = _("Glaciate"), + [MOVE_BOLT_STRIKE] = _("Bolt Strike"), + [MOVE_BLUE_FLARE] = _("Blue Flare"), + [MOVE_FIERY_DANCE] = _("Fiery Dance"), + [MOVE_FREEZE_SHOCK] = _("Freeze Shock"), + [MOVE_ICE_BURN] = _("Ice Burn"), + [MOVE_SNARL] = _("Snarl"), + [MOVE_ICICLE_CRASH] = _("Icicle Crash"), + [MOVE_V_CREATE] = _("V-create"), + [MOVE_FUSION_FLARE] = _("Fusion Flare"), + [MOVE_FUSION_BOLT] = _("Fusion Bolt"), + [MOVE_FLYING_PRESS] = _("Flying Press"), + [MOVE_MAT_BLOCK] = _("Mat Block"), + [MOVE_BELCH] = _("Belch"), + [MOVE_ROTOTILLER] = _("Rototiller"), + [MOVE_STICKY_WEB] = _("Sticky Web"), + [MOVE_FELL_STINGER] = _("Fell Stinger"), + [MOVE_PHANTOM_FORCE] = _("PhantomForce"), + [MOVE_TRICK_OR_TREAT] = _("TrickOrTreat"), + [MOVE_NOBLE_ROAR] = _("Noble Roar"), + [MOVE_ION_DELUGE] = _("Ion Deluge"), + [MOVE_PARABOLIC_CHARGE] = _("ParabolcChrg"), + [MOVE_FORESTS_CURSE] = _("Forest'sCurs"), + [MOVE_PETAL_BLIZZARD] = _("PetalBlizzrd"), + [MOVE_FREEZE_DRY] = _("Freeze-Dry"), + [MOVE_DISARMING_VOICE] = _("DisrmngVoice"), + [MOVE_PARTING_SHOT] = _("Parting Shot"), + [MOVE_TOPSY_TURVY] = _("Topsy-Turvy"), + [MOVE_DRAINING_KISS] = _("DrainingKiss"), + [MOVE_CRAFTY_SHIELD] = _("CraftyShield"), + [MOVE_FLOWER_SHIELD] = _("FlowerShield"), + [MOVE_GRASSY_TERRAIN] = _("GrssyTerrain"), + [MOVE_MISTY_TERRAIN] = _("MistyTerrain"), + [MOVE_ELECTRIFY] = _("Electrify"), + [MOVE_PLAY_ROUGH] = _("Play Rough"), + [MOVE_FAIRY_WIND] = _("Fairy Wind"), + [MOVE_MOONBLAST] = _("Moonblast"), + [MOVE_BOOMBURST] = _("Boomburst"), + [MOVE_FAIRY_LOCK] = _("Fairy Lock"), + [MOVE_KINGS_SHIELD] = _("King'sShield"), + [MOVE_PLAY_NICE] = _("Play Nice"), + [MOVE_CONFIDE] = _("Confide"), + [MOVE_DIAMOND_STORM] = _("DiamondStorm"), + [MOVE_STEAM_ERUPTION] = _("SteamErption"), + [MOVE_HYPERSPACE_HOLE] = _("HyprspceHole"), + [MOVE_WATER_SHURIKEN] = _("WatrShuriken"), + [MOVE_MYSTICAL_FIRE] = _("MysticalFire"), + [MOVE_SPIKY_SHIELD] = _("Spiky Shield"), + [MOVE_AROMATIC_MIST] = _("AromaticMist"), + [MOVE_EERIE_IMPULSE] = _("EerieImpulse"), + [MOVE_VENOM_DRENCH] = _("Venom Drench"), + [MOVE_POWDER] = _("Powder"), + [MOVE_GEOMANCY] = _("Geomancy"), + [MOVE_MAGNETIC_FLUX] = _("MagneticFlux"), + [MOVE_HAPPY_HOUR] = _("Happy Hour"), + [MOVE_ELECTRIC_TERRAIN] = _("ElctrcTrrain"), + [MOVE_DAZZLING_GLEAM] = _("DazzlngGleam"), + [MOVE_CELEBRATE] = _("Celebrate"), + [MOVE_HOLD_HANDS] = _("Hold Hands"), + [MOVE_BABY_DOLL_EYES] = _("BabyDollEyes"), + [MOVE_NUZZLE] = _("Nuzzle"), + [MOVE_HOLD_BACK] = _("Hold Back"), + [MOVE_INFESTATION] = _("Infestation"), + [MOVE_POWER_UP_PUNCH] = _("PowerUpPunch"), + [MOVE_OBLIVION_WING] = _("OblivionWing"), + [MOVE_THOUSAND_ARROWS] = _("ThousndArrws"), + [MOVE_THOUSAND_WAVES] = _("ThousndWaves"), + [MOVE_LANDS_WRATH] = _("Land's Wrath"), + [MOVE_LIGHT_OF_RUIN] = _("LightOfRuin"), + [MOVE_ORIGIN_PULSE] = _("Origin Pulse"), + [MOVE_PRECIPICE_BLADES] = _("PrcipceBldes"), + [MOVE_DRAGON_ASCENT] = _("DragonAscent"), + [MOVE_HYPERSPACE_FURY] = _("HyprspceFury"), + [MOVE_SHORE_UP] = _("Shore Up"), + [MOVE_FIRST_IMPRESSION] = _("FrstImpressn"), + [MOVE_BANEFUL_BUNKER] = _("BanefulBunkr"), + [MOVE_SPIRIT_SHACKLE] = _("SpiritShackl"), + [MOVE_DARKEST_LARIAT] = _("DarkstLariat"), + [MOVE_SPARKLING_ARIA] = _("SparklngAria"), + [MOVE_ICE_HAMMER] = _("Ice Hammer"), + [MOVE_FLORAL_HEALING] = _("FloralHealng"), + [MOVE_HIGH_HORSEPOWER] = _("HighHorsepwr"), + [MOVE_STRENGTH_SAP] = _("Strength Sap"), + [MOVE_SOLAR_BLADE] = _("Solar Blade"), + [MOVE_LEAFAGE] = _("Leafage"), + [MOVE_SPOTLIGHT] = _("Spotlight"), + [MOVE_TOXIC_THREAD] = _("Toxic Thread"), + [MOVE_LASER_FOCUS] = _("Laser Focus"), + [MOVE_GEAR_UP] = _("Gear Up"), + [MOVE_THROAT_CHOP] = _("Throat Chop"), + [MOVE_POLLEN_PUFF] = _("Pollen Puff"), + [MOVE_ANCHOR_SHOT] = _("Anchor Shot"), + [MOVE_PSYCHIC_TERRAIN] = _("PsychcTrrain"), + [MOVE_LUNGE] = _("Lunge"), + [MOVE_FIRE_LASH] = _("Fire Lash"), + [MOVE_POWER_TRIP] = _("Power Trip"), + [MOVE_BURN_UP] = _("Burn Up"), + [MOVE_SPEED_SWAP] = _("Speed Swap"), + [MOVE_SMART_STRIKE] = _("Smart Strike"), + [MOVE_PURIFY] = _("Purify"), + [MOVE_REVELATION_DANCE] = _("RvlationDnce"), + [MOVE_CORE_ENFORCER] = _("CoreEnforcer"), + [MOVE_TROP_KICK] = _("Trop Kick"), + [MOVE_INSTRUCT] = _("Instruct"), + [MOVE_BEAK_BLAST] = _("Beak Blast"), + [MOVE_CLANGING_SCALES] = _("ClngngScales"), + [MOVE_DRAGON_HAMMER] = _("DragonHammer"), + [MOVE_BRUTAL_SWING] = _("Brutal Swing"), + [MOVE_AURORA_VEIL] = _("Aurora Veil"), + [MOVE_SHELL_TRAP] = _("Shell Trap"), + [MOVE_FLEUR_CANNON] = _("Fleur Cannon"), + [MOVE_PSYCHIC_FANGS] = _("PsychicFangs"), + [MOVE_STOMPING_TANTRUM] = _("StmpngTantrm"), + [MOVE_SHADOW_BONE] = _("Shadow Bone"), + [MOVE_ACCELEROCK] = _("Accelerock"), + [MOVE_LIQUIDATION] = _("Liquidation"), + [MOVE_PRISMATIC_LASER] = _("PrsmaticLasr"), + [MOVE_SPECTRAL_THIEF] = _("SpectrlThief"), + [MOVE_SUNSTEEL_STRIKE] = _("SnsteelStrke"), + [MOVE_MOONGEIST_BEAM] = _("MoongestBeam"), + [MOVE_TEARFUL_LOOK] = _("Tearful Look"), + [MOVE_ZING_ZAP] = _("Zing Zap"), + [MOVE_NATURES_MADNESS] = _("Natur'sMadns"), + [MOVE_MULTI_ATTACK] = _("Multi-Attack"), + [MOVE_MIND_BLOWN] = _("Mind Blown"), + [MOVE_PLASMA_FISTS] = _("Plasma Fists"), + [MOVE_PHOTON_GEYSER] = _("PhotonGeyser"), + [MOVE_ZIPPY_ZAP] = _("Zippy Zap"), + [MOVE_SPLISHY_SPLASH] = _("SplishySplsh"), + [MOVE_FLOATY_FALL] = _("Floaty Fall"), + [MOVE_PIKA_PAPOW] = _("Pika Papow"), + [MOVE_BOUNCY_BUBBLE] = _("BouncyBubble"), + [MOVE_BUZZY_BUZZ] = _("Buzzy Buzz"), + [MOVE_SIZZLY_SLIDE] = _("Sizzly Slide"), + [MOVE_GLITZY_GLOW] = _("Glitzy Glow"), + [MOVE_BADDY_BAD] = _("Baddy Bad"), + [MOVE_SAPPY_SEED] = _("Sappy Seed"), + [MOVE_FREEZY_FROST] = _("Freezy Frost"), + [MOVE_SPARKLY_SWIRL] = _("SparklySwirl"), + [MOVE_VEEVEE_VOLLEY] = _("VeeveeVolley"), + [MOVE_DOUBLE_IRON_BASH] = _("DublIronBash"), + [MOVE_DYNAMAX_CANNON] = _("DynamxCannon"), + [MOVE_SNIPE_SHOT] = _("Snipe Shot"), + [MOVE_JAW_LOCK] = _("Jaw Lock"), + [MOVE_STUFF_CHEEKS] = _("Stuff Cheeks"), + [MOVE_NO_RETREAT] = _("No Retreat"), + [MOVE_TAR_SHOT] = _("Tar Shot"), + [MOVE_MAGIC_POWDER] = _("Magic Powder"), + [MOVE_DRAGON_DARTS] = _("Dragon Darts"), + [MOVE_TEATIME] = _("Teatime"), + [MOVE_OCTOLOCK] = _("Octolock"), + [MOVE_BOLT_BEAK] = _("Bolt Beak"), + [MOVE_FISHIOUS_REND] = _("FishiousRend"), + [MOVE_COURT_CHANGE] = _("Court Change"), + [MOVE_CLANGOROUS_SOUL] = _("ClngrousSoul"), + [MOVE_BODY_PRESS] = _("Body Press"), + [MOVE_DECORATE] = _("Decorate"), + [MOVE_DRUM_BEATING] = _("Drum Beating"), + [MOVE_SNAP_TRAP] = _("Snap Trap"), + [MOVE_PYRO_BALL] = _("Pyro Ball"), + [MOVE_BEHEMOTH_BLADE] = _("BehemthBlade"), + [MOVE_BEHEMOTH_BASH] = _("BehemothBash"), + [MOVE_AURA_WHEEL] = _("Aura Wheel"), + [MOVE_BREAKING_SWIPE] = _("BreakngSwipe"), + [MOVE_BRANCH_POKE] = _("Branch Poke"), + [MOVE_OVERDRIVE] = _("Overdrive"), + [MOVE_APPLE_ACID] = _("Apple Acid"), + [MOVE_GRAV_APPLE] = _("Grav Apple"), + [MOVE_SPIRIT_BREAK] = _("Spirit Break"), + [MOVE_STRANGE_STEAM] = _("StrangeSteam"), + [MOVE_LIFE_DEW] = _("Life Dew"), + [MOVE_OBSTRUCT] = _("Obstruct"), + [MOVE_FALSE_SURRENDER] = _("FalsSurrendr"), + [MOVE_METEOR_ASSAULT] = _("MeteorAssalt"), + [MOVE_ETERNABEAM] = _("Eternabeam"), + [MOVE_STEEL_BEAM] = _("Steel Beam"), + [MOVE_EXPANDING_FORCE] = _("ExpandngForc"), + [MOVE_STEEL_ROLLER] = _("Steel Roller"), + [MOVE_SCALE_SHOT] = _("Scale Shot"), + [MOVE_METEOR_BEAM] = _("Meteor Beam"), + [MOVE_SHELL_SIDE_ARM] = _("ShellSideArm"), + [MOVE_MISTY_EXPLOSION] = _("MstyExplsion"), + [MOVE_GRASSY_GLIDE] = _("Grassy Glide"), + [MOVE_RISING_VOLTAGE] = _("RisngVoltage"), + [MOVE_TERRAIN_PULSE] = _("TerrainPulse"), + [MOVE_SKITTER_SMACK] = _("SkitterSmack"), + [MOVE_BURNING_JEALOUSY] = _("BrningJelosy"), + [MOVE_LASH_OUT] = _("Lash Out"), + [MOVE_POLTERGEIST] = _("Poltergeist"), + [MOVE_CORROSIVE_GAS] = _("CorrosiveGas"), + [MOVE_COACHING] = _("Coaching"), + [MOVE_FLIP_TURN] = _("Flip Turn"), + [MOVE_TRIPLE_AXEL] = _("Triple Axel"), + [MOVE_DUAL_WINGBEAT] = _("DualWingbeat"), + [MOVE_SCORCHING_SANDS] = _("ScorchngSnds"), + [MOVE_JUNGLE_HEALING] = _("JungleHealng"), + [MOVE_WICKED_BLOW] = _("Wicked Blow"), + [MOVE_SURGING_STRIKES] = _("SurgngStrkes"), + [MOVE_THUNDER_CAGE] = _("Thunder Cage"), + [MOVE_DRAGON_ENERGY] = _("DragonEnergy"), + [MOVE_FREEZING_GLARE] = _("FreezngGlare"), + [MOVE_FIERY_WRATH] = _("Fiery Wrath"), + [MOVE_THUNDEROUS_KICK] = _("ThnderusKick"), + [MOVE_GLACIAL_LANCE] = _("GlacialLance"), + [MOVE_ASTRAL_BARRAGE] = _("AstrlBarrage"), + [MOVE_EERIE_SPELL] = _("Eerie Spell"), + [MOVE_DIRE_CLAW] = _("Dire Claw"), + [MOVE_PSYSHIELD_BASH] = _("PsyshieldBsh"), + [MOVE_POWER_SHIFT] = _("Power Shift"), + [MOVE_STONE_AXE] = _("Stone Axe"), + [MOVE_SPRINGTIDE_STORM] = _("SprngtdeStrm"), + [MOVE_MYSTICAL_POWER] = _("MystcalPower"), + [MOVE_RAGING_FURY] = _("Raging Fury"), + [MOVE_WAVE_CRASH] = _("Wave Crash"), + [MOVE_CHLOROBLAST] = _("Chloroblast"), + [MOVE_MOUNTAIN_GALE] = _("MountainGale"), + [MOVE_VICTORY_DANCE] = _("VictoryDance"), + [MOVE_HEADLONG_RUSH] = _("HeadlongRush"), + [MOVE_BARB_BARRAGE] = _("Barb Barrage"), + [MOVE_ESPER_WING] = _("Esper Wing"), + [MOVE_BITTER_MALICE] = _("BitterMalice"), + [MOVE_SHELTER] = _("Shelter"), + [MOVE_TRIPLE_ARROWS] = _("TripleArrows"), + [MOVE_INFERNAL_PARADE] = _("InfrnlParade"), + [MOVE_CEASELESS_EDGE] = _("CeaslessEdge"), + [MOVE_BLEAKWIND_STORM] = _("BlekwndStorm"), + [MOVE_WILDBOLT_STORM] = _("WildbltStorm"), + [MOVE_SANDSEAR_STORM] = _("SndsearStorm"), + [MOVE_LUNAR_BLESSING] = _("LunarBlessng"), + [MOVE_TAKE_HEART] = _("Take Heart"), +}; +#endif + +static const u8 sText_Breakneck_Blitz[] = _("Breakneck Blitz"); +static const u8 sText_All_Out_Pummeling[] = _("All Out Pummeling"); +static const u8 sText_Supersonic_Skystrike[] = _("Supersonic Skystrike"); +static const u8 sText_Acid_Downpour[] = _("Acid Downpour"); +static const u8 sText_Tectonic_Rage[] = _("Tectonic Rage"); +static const u8 sText_Continental_Crush[] = _("Continental Crush"); +static const u8 sText_Savage_Spin_Out[] = _("Savage Spin Out"); +static const u8 sText_Never_Ending_Nightmare[] = _("Never Ending Nightmare"); +static const u8 sText_Corkscrew_Crash[] = _("Corkscrew Crash"); +static const u8 sText_Inferno_Overdrive[] = _("Inferno Overdrive"); +static const u8 sText_Hydro_Vortex[] = _("Hydro Vortex"); +static const u8 sText_Bloom_Doom[] = _("Bloom Doom"); +static const u8 sText_Gigavolt_Havoc[] = _("Gigavolt Havoc"); +static const u8 sText_Shattered_Psyche[] = _("Shattered Psyche"); +static const u8 sText_Subzero_Slammer[] = _("Subzero Slammer"); +static const u8 sText_Devastating_Drake[] = _("Devastating Drake"); +static const u8 sText_Black_Hole_Eclipse[] = _("Black Hole Eclipse"); +static const u8 sText_Twinkle_Tackle[] = _("Twinkle Tackle"); +static const u8 sText_Catastropika[] = _("Catastropika"); +static const u8 sText_10000000_Volt_Thunderbolt[] = _("10000000 Volt Thunderbolt"); +static const u8 sText_Stoked_Sparksurfer[] = _("Stoked Sparksurfer"); +static const u8 sText_Extreme_Evoboost[] = _("Extreme Evoboost"); +static const u8 sText_Pulverizing_Pancake[] = _("Pulverizing Pancake"); +static const u8 sText_Genesis_Supernova[] = _("Genesis Supernova"); +static const u8 sText_Sinister_Arrow_Raid[] = _("Sinister Arrow Raid"); +static const u8 sText_Malicious_Moonsault[] = _("Malicious Moonsault"); +static const u8 sText_Oceanic_Operetta[] = _("Oceanic Operetta"); +static const u8 sText_Splintered_Stormshards[] = _("Splintered Stormshards"); +static const u8 sText_Lets_Snuggle_Forever[] = _("Let's Snuggle Forever"); +static const u8 sText_Clangorous_Soulblaze[] = _("Clangorous Soulblaze"); +static const u8 sText_Guardian_Of_Alola[] = _("Guardian Of Alola"); +static const u8 sText_Searing_Sunraze_Smash[] = _("Searing Sunraze Smash"); +static const u8 sText_Menacing_Moonraze_Maelstrom[] = _("Menacing Moonraze Maelstrom"); +static const u8 sText_Light_That_Burns_The_Sky[] = _("Light That Burns The Sky"); +static const u8 sText_Soul_Stealing_7_Star_Strike[] = _("Soul Stealing 7 Star Strike"); + +const u8 *const gZMoveNames[] = +{ + [MOVE_BREAKNECK_BLITZ - FIRST_Z_MOVE] = sText_Breakneck_Blitz, + [MOVE_ALL_OUT_PUMMELING - FIRST_Z_MOVE] = sText_All_Out_Pummeling, + [MOVE_SUPERSONIC_SKYSTRIKE - FIRST_Z_MOVE] = sText_Supersonic_Skystrike, + [MOVE_ACID_DOWNPOUR - FIRST_Z_MOVE] = sText_Acid_Downpour, + [MOVE_TECTONIC_RAGE - FIRST_Z_MOVE] = sText_Tectonic_Rage, + [MOVE_CONTINENTAL_CRUSH - FIRST_Z_MOVE] = sText_Continental_Crush, + [MOVE_SAVAGE_SPIN_OUT - FIRST_Z_MOVE] = sText_Savage_Spin_Out, + [MOVE_NEVER_ENDING_NIGHTMARE - FIRST_Z_MOVE] = sText_Never_Ending_Nightmare, + [MOVE_CORKSCREW_CRASH - FIRST_Z_MOVE] = sText_Corkscrew_Crash, + [MOVE_INFERNO_OVERDRIVE - FIRST_Z_MOVE] = sText_Inferno_Overdrive, + [MOVE_HYDRO_VORTEX - FIRST_Z_MOVE] = sText_Hydro_Vortex, + [MOVE_BLOOM_DOOM - FIRST_Z_MOVE] = sText_Bloom_Doom, + [MOVE_GIGAVOLT_HAVOC - FIRST_Z_MOVE] = sText_Gigavolt_Havoc, + [MOVE_SHATTERED_PSYCHE - FIRST_Z_MOVE] = sText_Shattered_Psyche, + [MOVE_SUBZERO_SLAMMER - FIRST_Z_MOVE] = sText_Subzero_Slammer, + [MOVE_DEVASTATING_DRAKE - FIRST_Z_MOVE] = sText_Devastating_Drake, + [MOVE_BLACK_HOLE_ECLIPSE - FIRST_Z_MOVE] = sText_Black_Hole_Eclipse, + [MOVE_TWINKLE_TACKLE - FIRST_Z_MOVE] = sText_Twinkle_Tackle, + [MOVE_CATASTROPIKA - FIRST_Z_MOVE] = sText_Catastropika, + [MOVE_10000000_VOLT_THUNDERBOLT - FIRST_Z_MOVE] = sText_10000000_Volt_Thunderbolt, + [MOVE_STOKED_SPARKSURFER - FIRST_Z_MOVE] = sText_Stoked_Sparksurfer, + [MOVE_EXTREME_EVOBOOST - FIRST_Z_MOVE] = sText_Extreme_Evoboost, + [MOVE_PULVERIZING_PANCAKE - FIRST_Z_MOVE] = sText_Pulverizing_Pancake, + [MOVE_GENESIS_SUPERNOVA - FIRST_Z_MOVE] = sText_Genesis_Supernova, + [MOVE_SINISTER_ARROW_RAID - FIRST_Z_MOVE] = sText_Sinister_Arrow_Raid, + [MOVE_MALICIOUS_MOONSAULT - FIRST_Z_MOVE] = sText_Malicious_Moonsault, + [MOVE_OCEANIC_OPERETTA - FIRST_Z_MOVE] = sText_Oceanic_Operetta, + [MOVE_SPLINTERED_STORMSHARDS - FIRST_Z_MOVE] = sText_Splintered_Stormshards, + [MOVE_LETS_SNUGGLE_FOREVER - FIRST_Z_MOVE] = sText_Lets_Snuggle_Forever, + [MOVE_CLANGOROUS_SOULBLAZE - FIRST_Z_MOVE] = sText_Clangorous_Soulblaze, + [MOVE_GUARDIAN_OF_ALOLA - FIRST_Z_MOVE] = sText_Guardian_Of_Alola, + [MOVE_SEARING_SUNRAZE_SMASH - FIRST_Z_MOVE] = sText_Searing_Sunraze_Smash, + [MOVE_MENACING_MOONRAZE_MAELSTROM - FIRST_Z_MOVE] = sText_Menacing_Moonraze_Maelstrom, + [MOVE_LIGHT_THAT_BURNS_THE_SKY - FIRST_Z_MOVE] = sText_Light_That_Burns_The_Sky, + [MOVE_SOUL_STEALING_7_STAR_STRIKE - FIRST_Z_MOVE] = sText_Soul_Stealing_7_Star_Strike, }; diff --git a/src/data/text/nature_names.h b/src/data/text/nature_names.h index f7f9e75c75..5cf2d8024c 100644 --- a/src/data/text/nature_names.h +++ b/src/data/text/nature_names.h @@ -24,7 +24,7 @@ static const u8 sSassyNatureName[] = _("Sassy"); static const u8 sCarefulNatureName[] = _("Careful"); static const u8 sQuirkyNatureName[] = _("Quirky"); -const u8 *const gNatureNamePointers[NUM_NATURES] = +const u8 *const gNatureNamePointers[NUM_NATURES] = { [NATURE_HARDY] = sHardyNatureName, [NATURE_LONELY] = sLonelyNatureName, diff --git a/src/data/text/ribbon_descriptions.h b/src/data/text/ribbon_descriptions.h index 5db52dcedf..4de90d2e46 100644 --- a/src/data/text/ribbon_descriptions.h +++ b/src/data/text/ribbon_descriptions.h @@ -18,7 +18,7 @@ const u8 gRibbonDescriptionPart2_Artist[] = _("as a super sketch model."); const u8 gRibbonDescriptionPart1_Effort[] = _("RIBBON awarded for"); const u8 gRibbonDescriptionPart2_Effort[] = _("being a hard worker."); -const u8 *const gRibbonDescriptionPointers[][2] = +const u8 *const gRibbonDescriptionPointers[][2] = { [CHAMPION_RIBBON] = {gRibbonDescriptionPart1_Champion, gRibbonDescriptionPart2_Champion}, [COOL_RIBBON_NORMAL] = {gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_NormalRank}, diff --git a/src/data/text/species_names.h b/src/data/text/species_names.h index 8129e2a602..ad0a1ba7c6 100644 --- a/src/data/text/species_names.h +++ b/src/data/text/species_names.h @@ -386,6 +386,7 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { [SPECIES_RAYQUAZA] = _("Rayquaza"), [SPECIES_JIRACHI] = _("Jirachi"), [SPECIES_DEOXYS] = _("Deoxys"), +#if P_NEW_POKEMON == TRUE [SPECIES_TURTWIG] = _("Turtwig"), [SPECIES_GROTLE] = _("Grotle"), [SPECIES_TORTERRA] = _("Torterra"), @@ -898,6 +899,13 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { [SPECIES_GLASTRIER] = _("Glastrier"), [SPECIES_SPECTRIER] = _("Spectrier"), [SPECIES_CALYREX] = _("Calyrex"), + [SPECIES_WYRDEER] = _("Wyrdeer"), + [SPECIES_KLEAVOR] = _("Kleavor"), + [SPECIES_URSALUNA] = _("Ursaluna"), + [SPECIES_BASCULEGION] = _("Bsculegion"), + [SPECIES_SNEASLER] = _("Sneasler"), + [SPECIES_OVERQWIL] = _("Overqwil"), + [SPECIES_ENAMORUS] = _("Enamorus"), // Megas [SPECIES_VENUSAUR_MEGA] = _("Venusaur"), @@ -993,6 +1001,24 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { [SPECIES_YAMASK_GALARIAN] = _("Yamask"), [SPECIES_STUNFISK_GALARIAN] = _("Stunfisk"), +//Hisuian Forms + [SPECIES_GROWLITHE_HISUIAN] = _("Growlithe"), + [SPECIES_ARCANINE_HISUIAN] = _("Arcanine"), + [SPECIES_VOLTORB_HISUIAN] = _("Voltorb"), + [SPECIES_ELECTRODE_HISUIAN] = _("Electrode"), + [SPECIES_TYPHLOSION_HISUIAN] = _("Typhlosion"), + [SPECIES_QWILFISH_HISUIAN] = _("Qwilfish"), + [SPECIES_SNEASEL_HISUIAN] = _("Sneasel"), + [SPECIES_SAMUROTT_HISUIAN] = _("Samurott"), + [SPECIES_LILLIGANT_HISUIAN] = _("Lilligant"), + [SPECIES_ZORUA_HISUIAN] = _("Zorua"), + [SPECIES_ZOROARK_HISUIAN] = _("Zoroark"), + [SPECIES_BRAVIARY_HISUIAN] = _("Braviary"), + [SPECIES_SLIGGOO_HISUIAN] = _("Sliggoo"), + [SPECIES_GOODRA_HISUIAN] = _("Goodra"), + [SPECIES_AVALUGG_HISUIAN] = _("Avalugg"), + [SPECIES_DECIDUEYE_HISUIAN] = _("Decidueye"), + // Cosplay Pikachu [SPECIES_PIKACHU_COSPLAY] = _("Pikachu"), [SPECIES_PIKACHU_ROCK_STAR] = _("Pikachu"), @@ -1011,6 +1037,7 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { [SPECIES_PIKACHU_WORLD_CAP] = _("Pikachu"), // Pichu [SPECIES_PICHU_SPIKY_EARED] = _("Pichu"), +#endif // Unown [SPECIES_UNOWN_B] = _("Unown"), [SPECIES_UNOWN_C] = _("Unown"), @@ -1047,6 +1074,7 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { [SPECIES_DEOXYS_ATTACK] = _("Deoxys"), [SPECIES_DEOXYS_DEFENSE] = _("Deoxys"), [SPECIES_DEOXYS_SPEED] = _("Deoxys"), +#if P_NEW_POKEMON == TRUE // Burmy [SPECIES_BURMY_SANDY_CLOAK] = _("Burmy"), [SPECIES_BURMY_TRASH_CLOAK] = _("Burmy"), @@ -1065,7 +1093,9 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { [SPECIES_ROTOM_FROST] = _("Rotom"), [SPECIES_ROTOM_MOW] = _("Rotom"), [SPECIES_ROTOM_WASH] = _("Rotom"), - // Giratina + // Origin Forme + [SPECIES_DIALGA_ORIGIN] = _("Dialga"), + [SPECIES_PALKIA_ORIGIN] = _("Palkia"), [SPECIES_GIRATINA_ORIGIN] = _("Giratina"), // Shaymin [SPECIES_SHAYMIN_SKY] = _("Shaymin"), @@ -1089,6 +1119,7 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { [SPECIES_ARCEUS_FAIRY] = _("Arceus"), // Basculin [SPECIES_BASCULIN_BLUE_STRIPED] = _("Basculin"), + [SPECIES_BASCULIN_WHITE_STRIPED] = _("Basculin"), // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = _("Darmanitan"), [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = _("Darmanitan"), @@ -1104,6 +1135,7 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { [SPECIES_TORNADUS_THERIAN] = _("Tornadus"), [SPECIES_THUNDURUS_THERIAN] = _("Thundurus"), [SPECIES_LANDORUS_THERIAN] = _("Landorus"), + [SPECIES_ENAMORUS_THERIAN] = _("Enamorus"), // Kyurem [SPECIES_KYUREM_BLACK] = _("Kyurem"), [SPECIES_KYUREM_WHITE] = _("Kyurem"), @@ -1274,4 +1306,5 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { // Calyrex [SPECIES_CALYREX_ICE_RIDER] = _("Calyrex"), [SPECIES_CALYREX_SHADOW_RIDER] = _("Calyrex"), +#endif }; diff --git a/src/data/text/trainer_class_names.h b/src/data/text/trainer_class_names.h index f012e877b6..63cc356b23 100644 --- a/src/data/text/trainer_class_names.h +++ b/src/data/text/trainer_class_names.h @@ -49,7 +49,7 @@ const u8 gTrainerClassNames[][13] = { [TRAINER_CLASS_SAILOR] = _("SAILOR"), [TRAINER_CLASS_COOLTRAINER_2] = _("COOLTRAINER"), [TRAINER_CLASS_MAGMA_ADMIN] = _("MAGMA ADMIN"), - [TRAINER_CLASS_PKMN_TRAINER_3] = _("{PKMN} TRAINER"), + [TRAINER_CLASS_RIVAL] = _("{PKMN} TRAINER"), [TRAINER_CLASS_BUG_CATCHER] = _("BUG CATCHER"), [TRAINER_CLASS_PKMN_RANGER] = _("{PKMN} RANGER"), [TRAINER_CLASS_MAGMA_LEADER] = _("MAGMA LEADER"), diff --git a/src/data/trade.h b/src/data/trade.h index 752971c112..80d17a49ba 100644 --- a/src/data/trade.h +++ b/src/data/trade.h @@ -1,4 +1,4 @@ -#define GFXTAG_MENU_TEXT 200 // Used as a base tag in CB2_CreateTradeMenu and CB2_ReturnToTradeMenu +#define GFXTAG_MENU_TEXT 200 // Used as a base tag in CB2_CreateTradeMenu and CB2_ReturnToTradeMenu #define GFXTAG_CURSOR 300 #define GFXTAG_LINK_MON_GLOW 5550 #define GFXTAG_LINK_MON_SHADOW 5552 @@ -19,7 +19,7 @@ static const u32 sUnusedStructSizes[] = sizeof(struct SaveBlock1), sizeof(struct MapHeader), // 0x00000530, in RS - sizeof(struct MailStruct), //or ObjectEvent / ObjectEventGraphicsInfo + sizeof(struct Mail), //or ObjectEvent / ObjectEventGraphicsInfo sizeof(struct Pokemon), //or TrainerCard 0x00000528 // 0x000004D8, in RS }; @@ -174,10 +174,10 @@ static const struct SpriteTemplate sSpriteTemplate_MenuText = .callback = SpriteCallbackDummy, }; -static const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal"); -static const struct SpritePalette gSpritePalette_TradeScreenText = +static const u16 sTradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal"); +static const struct SpritePalette sSpritePalette_TradeScreenText = { - .data = TradeScreenTextPalette, + .data = sTradeScreenTextPalette, .tag = PALTAG_MENU_TEXT }; @@ -395,7 +395,7 @@ static const struct MenuAction sSelectTradeMonActions[] = {sText_Trade2, Task_DrawSelectionTrade} }; -static const u8 *const sTradeMessages[] = +static const u8 *const sTradeMessages[] = { [TRADE_MSG_STANDBY] = sText_CommunicationStandby, [TRADE_MSG_CANCELED] = sText_TheTradeHasBeenCanceled, @@ -408,8 +408,8 @@ static const u8 *const sTradeMessages[] = [TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED] = gText_OtherTrainersPkmnCantBeTraded }; -static const u8 sTradeTextColors[] = -{ +static const u8 sTradeTextColors[] = +{ TEXT_COLOR_TRANSPARENT, //bg color TEXT_COLOR_WHITE, //fg color TEXT_COLOR_DARK_GRAY //shadow color @@ -1003,67 +1003,67 @@ static const union AffineAnimCmd *const sAffineAnims_CrossingMonPics[] = static const struct InGameTrade sIngameTrades[] = { - [INGAME_TRADE_SEEDOT] = + [INGAME_TRADE_SEEDOT] = { - .nickname = _("DOTS"), + .nickname = _("DOTS"), .species = SPECIES_SEEDOT, .ivs = {5, 4, 5, 4, 4, 4}, - .abilityNum = 1, + .abilityNum = 1, .otId = 38726, .conditions = {30, 5, 5, 5, 5}, .personality = 0x84, - .heldItem = ITEM_CHESTO_BERRY, + .heldItem = ITEM_CHESTO_BERRY, .mailNum = -1, - .otName = _("KOBE"), - .otGender = MALE, + .otName = _("KOBE"), + .otGender = MALE, .sheen = 10, .requestedSpecies = SPECIES_RALTS - }, - [INGAME_TRADE_PLUSLE] = + }, + [INGAME_TRADE_PLUSLE] = { - .nickname = _("PLUSES"), + .nickname = _("PLUSES"), .species = SPECIES_PLUSLE, .ivs = {4, 4, 4, 5, 5, 4}, - .abilityNum = 0, + .abilityNum = 0, .otId = 73996, .conditions = {5, 5, 30, 5, 5}, .personality = 0x6F, - .heldItem = ITEM_WOOD_MAIL, + .heldItem = ITEM_WOOD_MAIL, .mailNum = 0, - .otName = _("ROMAN"), - .otGender = MALE, + .otName = _("ROMAN"), + .otGender = MALE, .sheen = 10, .requestedSpecies = SPECIES_VOLBEAT - }, - [INGAME_TRADE_HORSEA] = + }, + [INGAME_TRADE_HORSEA] = { .nickname = _("SEASOR"), .species = SPECIES_HORSEA, .ivs = {5, 4, 4, 4, 5, 4}, - .abilityNum = 0, + .abilityNum = 0, .otId = 46285, .conditions = {5, 5, 5, 5, 30}, .personality = 0x7F, - .heldItem = ITEM_WAVE_MAIL, + .heldItem = ITEM_WAVE_MAIL, .mailNum = 1, - .otName = _("SKYLAR"), - .otGender = MALE, + .otName = _("SKYLAR"), + .otGender = MALE, .sheen = 10, .requestedSpecies = SPECIES_BAGON - }, - [INGAME_TRADE_MEOWTH] = + }, + [INGAME_TRADE_MEOWTH] = { .nickname = _("MEOWOW"), .species = SPECIES_MEOWTH, .ivs = {4, 5, 4, 5, 4, 4}, - .abilityNum = 0, + .abilityNum = 0, .otId = 91481, .conditions = {5, 5, 5, 30, 5}, .personality = 0x8B, - .heldItem = ITEM_RETRO_MAIL, + .heldItem = ITEM_RETRO_MAIL, .mailNum = 2, - .otName = _("ISIS"), - .otGender = FEMALE, + .otName = _("ISIS"), + .otGender = FEMALE, .sheen = 10, .requestedSpecies = SPECIES_SKITTY } diff --git a/src/data/trainer_graphics/back_pic_anims.h b/src/data/trainer_graphics/back_pic_anims.h index 821039cb3b..ed12e0cb41 100644 --- a/src/data/trainer_graphics/back_pic_anims.h +++ b/src/data/trainer_graphics/back_pic_anims.h @@ -1,4 +1,4 @@ -static const union AnimCmd gAnimCmd_Brendan_1[] = +static const union AnimCmd sAnimCmd_Brendan_1[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_FRAME(1, 9), @@ -8,7 +8,7 @@ static const union AnimCmd gAnimCmd_Brendan_1[] = ANIMCMD_END, }; -static const union AnimCmd gAnimCmd_May_Steven_1[] = +static const union AnimCmd sAnimCmd_May_Steven_1[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_FRAME(1, 9), @@ -18,7 +18,7 @@ static const union AnimCmd gAnimCmd_May_Steven_1[] = ANIMCMD_END, }; -static const union AnimCmd gAnimCmd_Wally_1[] = +static const union AnimCmd sAnimCmd_Wally_1[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_FRAME(1, 9), @@ -28,7 +28,7 @@ static const union AnimCmd gAnimCmd_Wally_1[] = ANIMCMD_END, }; -static const union AnimCmd gAnimCmd_Red_1[] = +static const union AnimCmd sAnimCmd_Red_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(2, 6), @@ -38,7 +38,7 @@ static const union AnimCmd gAnimCmd_Red_1[] = ANIMCMD_END, }; -static const union AnimCmd gAnimCmd_Leaf_1[] = +static const union AnimCmd sAnimCmd_Leaf_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(2, 6), @@ -48,7 +48,7 @@ static const union AnimCmd gAnimCmd_Leaf_1[] = ANIMCMD_END, }; -static const union AnimCmd gAnimCmd_RubySapphireBrendan_1[] = +static const union AnimCmd sAnimCmd_RubySapphireBrendan_1[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_FRAME(1, 9), @@ -58,7 +58,7 @@ static const union AnimCmd gAnimCmd_RubySapphireBrendan_1[] = ANIMCMD_END, }; -static const union AnimCmd gAnimCmd_RubySapphireMay_1[] = +static const union AnimCmd sAnimCmd_RubySapphireMay_1[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_FRAME(1, 9), @@ -71,49 +71,49 @@ static const union AnimCmd gAnimCmd_RubySapphireMay_1[] = static const union AnimCmd *const sBackAnims_Brendan[] = { sAnim_GeneralFrame3, - gAnimCmd_Brendan_1, + sAnimCmd_Brendan_1, }; static const union AnimCmd *const sBackAnims_May[] = { sAnim_GeneralFrame3, - gAnimCmd_May_Steven_1, + sAnimCmd_May_Steven_1, }; static const union AnimCmd *const sBackAnims_Red[] = { sAnim_GeneralFrame0, - gAnimCmd_Red_1, + sAnimCmd_Red_1, }; static const union AnimCmd *const sBackAnims_Leaf[] = { sAnim_GeneralFrame0, - gAnimCmd_Leaf_1, + sAnimCmd_Leaf_1, }; static const union AnimCmd *const sBackAnims_RubySapphireBrendan[] = { sAnim_GeneralFrame3, - gAnimCmd_RubySapphireBrendan_1, + sAnimCmd_RubySapphireBrendan_1, }; static const union AnimCmd *const sBackAnims_RubySapphireMay[] = { sAnim_GeneralFrame3, - gAnimCmd_RubySapphireMay_1, + sAnimCmd_RubySapphireMay_1, }; static const union AnimCmd *const sBackAnims_Wally[] = { sAnim_GeneralFrame3, - gAnimCmd_Wally_1, + sAnimCmd_Wally_1, }; static const union AnimCmd *const sBackAnims_Steven[] = { sAnim_GeneralFrame3, - gAnimCmd_May_Steven_1, + sAnimCmd_May_Steven_1, }; const union AnimCmd *const *const gTrainerBackAnimsPtrTable[] = diff --git a/src/data/trainers.h b/src/data/trainers.h index 163a8296db..75f7edc8b7 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -15,5831 +15,4998 @@ const struct Trainer gTrainers[] = { [TRAINER_SAWYER_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("SAWYER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Sawyer1), - .party = {.NoItemDefaultMoves = sParty_Sawyer1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer1), }, [TRAINER_GRUNT_AQUA_HIDEOUT_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntAquaHideout1), - .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout1), }, [TRAINER_GRUNT_AQUA_HIDEOUT_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntAquaHideout2), - .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout2), }, [TRAINER_GRUNT_AQUA_HIDEOUT_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntAquaHideout3), - .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout3), }, [TRAINER_GRUNT_AQUA_HIDEOUT_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntAquaHideout4), - .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout4), }, [TRAINER_GRUNT_SEAFLOOR_CAVERN_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern1), - .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern1), }, [TRAINER_GRUNT_SEAFLOOR_CAVERN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern2), - .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern2), }, [TRAINER_GRUNT_SEAFLOOR_CAVERN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern3), - .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern3), }, [TRAINER_GABRIELLE_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("GABRIELLE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Gabrielle1), - .party = {.NoItemDefaultMoves = sParty_Gabrielle1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle1), }, [TRAINER_GRUNT_PETALBURG_WOODS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntPetalburgWoods), - .party = {.NoItemDefaultMoves = sParty_GruntPetalburgWoods}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntPetalburgWoods), }, [TRAINER_MARCEL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("MARCEL"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Marcel), - .party = {.NoItemDefaultMoves = sParty_Marcel}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Marcel), }, [TRAINER_ALBERTO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("ALBERTO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Alberto), - .party = {.NoItemDefaultMoves = sParty_Alberto}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Alberto), }, [TRAINER_ED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COLLECTOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_COLLECTOR, .trainerName = _("ED"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ed), - .party = {.NoItemDefaultMoves = sParty_Ed}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ed), }, [TRAINER_GRUNT_SEAFLOOR_CAVERN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern4), - .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern4), }, [TRAINER_DECLAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("DECLAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Declan), - .party = {.NoItemDefaultMoves = sParty_Declan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Declan), }, [TRAINER_GRUNT_RUSTURF_TUNNEL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntRusturfTunnel), - .party = {.NoItemDefaultMoves = sParty_GruntRusturfTunnel}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntRusturfTunnel), }, [TRAINER_GRUNT_WEATHER_INST_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntWeatherInst1), - .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst1), }, [TRAINER_GRUNT_WEATHER_INST_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntWeatherInst2), - .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst2), }, [TRAINER_GRUNT_WEATHER_INST_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntWeatherInst3), - .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst3), }, [TRAINER_GRUNT_MUSEUM_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMuseum1), - .party = {.NoItemDefaultMoves = sParty_GruntMuseum1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMuseum1), }, [TRAINER_GRUNT_MUSEUM_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMuseum2), - .party = {.NoItemDefaultMoves = sParty_GruntMuseum2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMuseum2), }, [TRAINER_GRUNT_SPACE_CENTER_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter1), - .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter1), }, [TRAINER_GRUNT_MT_PYRE_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMtPyre1), - .party = {.NoItemDefaultMoves = sParty_GruntMtPyre1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre1), }, [TRAINER_GRUNT_MT_PYRE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMtPyre2), - .party = {.NoItemDefaultMoves = sParty_GruntMtPyre2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre2), }, [TRAINER_GRUNT_MT_PYRE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMtPyre3), - .party = {.NoItemDefaultMoves = sParty_GruntMtPyre3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre3), }, [TRAINER_GRUNT_WEATHER_INST_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntWeatherInst4), - .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst4), }, [TRAINER_GRUNT_AQUA_HIDEOUT_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntAquaHideout5), - .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout5), }, [TRAINER_GRUNT_AQUA_HIDEOUT_6] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntAquaHideout6), - .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout6}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout6), }, [TRAINER_FREDRICK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_M, .trainerName = _("FREDRICK"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Fredrick), - .party = {.NoItemDefaultMoves = sParty_Fredrick}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Fredrick), }, [TRAINER_MATT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AQUA_ADMIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_ADMIN_M, .trainerName = _("MATT"), .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Matt), - .party = {.NoItemDefaultMoves = sParty_Matt}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Matt), }, [TRAINER_ZANDER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("ZANDER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Zander), - .party = {.NoItemDefaultMoves = sParty_Zander}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Zander), }, [TRAINER_SHELLY_WEATHER_INSTITUTE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AQUA_ADMIN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, .trainerName = _("SHELLY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_ShellyWeatherInstitute), - .party = {.NoItemDefaultMoves = sParty_ShellyWeatherInstitute}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_ShellyWeatherInstitute), }, [TRAINER_SHELLY_SEAFLOOR_CAVERN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AQUA_ADMIN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, .trainerName = _("SHELLY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_ShellySeafloorCavern), - .party = {.NoItemDefaultMoves = sParty_ShellySeafloorCavern}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_ShellySeafloorCavern), }, [TRAINER_ARCHIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AQUA_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_LEADER_ARCHIE, .trainerName = _("ARCHIE"), .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Archie), - .party = {.NoItemDefaultMoves = sParty_Archie}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Archie), }, [TRAINER_LEAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("LEAH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Leah), - .party = {.NoItemDefaultMoves = sParty_Leah}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Leah), }, [TRAINER_DAISY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, .trainerName = _("DAISY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Daisy), - .party = {.NoItemDefaultMoves = sParty_Daisy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Daisy), }, [TRAINER_ROSE_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, .trainerName = _("ROSE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Rose1), - .party = {.NoItemDefaultMoves = sParty_Rose1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose1), }, [TRAINER_FELIX] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("FELIX"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Felix), - .party = {.NoItemCustomMoves = sParty_Felix}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Felix), }, [TRAINER_VIOLET] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, .trainerName = _("VIOLET"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Violet), - .party = {.NoItemDefaultMoves = sParty_Violet}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Violet), }, [TRAINER_ROSE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, .trainerName = _("ROSE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Rose2), - .party = {.NoItemDefaultMoves = sParty_Rose2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose2), }, [TRAINER_ROSE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, .trainerName = _("ROSE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Rose3), - .party = {.NoItemDefaultMoves = sParty_Rose3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose3), }, [TRAINER_ROSE_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, .trainerName = _("ROSE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Rose4), - .party = {.NoItemDefaultMoves = sParty_Rose4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose4), }, [TRAINER_ROSE_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, .trainerName = _("ROSE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Rose5), - .party = {.NoItemDefaultMoves = sParty_Rose5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose5), }, [TRAINER_DUSTY_1] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("DUSTY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dusty1), - .party = {.NoItemCustomMoves = sParty_Dusty1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty1), }, [TRAINER_CHIP] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("CHIP"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Chip), - .party = {.NoItemCustomMoves = sParty_Chip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Chip), }, [TRAINER_FOSTER] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("FOSTER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Foster), - .party = {.NoItemCustomMoves = sParty_Foster}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Foster), }, [TRAINER_DUSTY_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("DUSTY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dusty2), - .party = {.NoItemCustomMoves = sParty_Dusty2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty2), }, [TRAINER_DUSTY_3] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("DUSTY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dusty3), - .party = {.NoItemCustomMoves = sParty_Dusty3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty3), }, [TRAINER_DUSTY_4] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("DUSTY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dusty4), - .party = {.NoItemCustomMoves = sParty_Dusty4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty4), }, [TRAINER_DUSTY_5] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("DUSTY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dusty5), - .party = {.NoItemCustomMoves = sParty_Dusty5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty5), }, [TRAINER_GABBY_AND_TY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_INTERVIEWER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, .trainerPic = TRAINER_PIC_INTERVIEWER, .trainerName = _("GABBY & TY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GabbyAndTy1), - .party = {.NoItemDefaultMoves = sParty_GabbyAndTy1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy1), }, [TRAINER_GABBY_AND_TY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_INTERVIEWER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, .trainerPic = TRAINER_PIC_INTERVIEWER, .trainerName = _("GABBY & TY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GabbyAndTy2), - .party = {.NoItemDefaultMoves = sParty_GabbyAndTy2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy2), }, [TRAINER_GABBY_AND_TY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_INTERVIEWER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, .trainerPic = TRAINER_PIC_INTERVIEWER, .trainerName = _("GABBY & TY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GabbyAndTy3), - .party = {.NoItemDefaultMoves = sParty_GabbyAndTy3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy3), }, [TRAINER_GABBY_AND_TY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_INTERVIEWER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, .trainerPic = TRAINER_PIC_INTERVIEWER, .trainerName = _("GABBY & TY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GabbyAndTy4), - .party = {.NoItemDefaultMoves = sParty_GabbyAndTy4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy4), }, [TRAINER_GABBY_AND_TY_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_INTERVIEWER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, .trainerPic = TRAINER_PIC_INTERVIEWER, .trainerName = _("GABBY & TY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GabbyAndTy5), - .party = {.NoItemDefaultMoves = sParty_GabbyAndTy5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy5), }, [TRAINER_GABBY_AND_TY_6] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_INTERVIEWER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, .trainerPic = TRAINER_PIC_INTERVIEWER, .trainerName = _("GABBY & TY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GabbyAndTy6), - .party = {.NoItemCustomMoves = sParty_GabbyAndTy6}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_GabbyAndTy6), }, [TRAINER_LOLA_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, .trainerName = _("LOLA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lola1), - .party = {.NoItemDefaultMoves = sParty_Lola1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola1), }, [TRAINER_AUSTINA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, .trainerName = _("AUSTINA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Austina), - .party = {.NoItemDefaultMoves = sParty_Austina}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Austina), }, [TRAINER_GWEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, .trainerName = _("GWEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Gwen), - .party = {.NoItemDefaultMoves = sParty_Gwen}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Gwen), }, [TRAINER_LOLA_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, .trainerName = _("LOLA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lola2), - .party = {.NoItemDefaultMoves = sParty_Lola2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola2), }, [TRAINER_LOLA_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, .trainerName = _("LOLA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lola3), - .party = {.NoItemDefaultMoves = sParty_Lola3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola3), }, [TRAINER_LOLA_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, .trainerName = _("LOLA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lola4), - .party = {.NoItemDefaultMoves = sParty_Lola4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola4), }, [TRAINER_LOLA_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, .trainerName = _("LOLA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lola5), - .party = {.NoItemDefaultMoves = sParty_Lola5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola5), }, [TRAINER_RICKY_1] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TUBER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_M, .trainerName = _("RICKY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ricky1), - .party = {.NoItemCustomMoves = sParty_Ricky1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky1), }, [TRAINER_SIMON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_M, .trainerName = _("SIMON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Simon), - .party = {.NoItemDefaultMoves = sParty_Simon}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Simon), }, [TRAINER_CHARLIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_M, .trainerName = _("CHARLIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Charlie), - .party = {.NoItemDefaultMoves = sParty_Charlie}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Charlie), }, [TRAINER_RICKY_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TUBER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_M, .trainerName = _("RICKY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ricky2), - .party = {.NoItemCustomMoves = sParty_Ricky2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky2), }, [TRAINER_RICKY_3] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TUBER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_M, .trainerName = _("RICKY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ricky3), - .party = {.NoItemCustomMoves = sParty_Ricky3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky3), }, [TRAINER_RICKY_4] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TUBER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_M, .trainerName = _("RICKY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ricky4), - .party = {.NoItemCustomMoves = sParty_Ricky4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky4), }, [TRAINER_RICKY_5] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TUBER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_M, .trainerName = _("RICKY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ricky5), - .party = {.NoItemCustomMoves = sParty_Ricky5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky5), }, [TRAINER_RANDALL] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("RANDALL"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Randall), - .party = {.ItemCustomMoves = sParty_Randall}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Randall), }, [TRAINER_PARKER] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("PARKER"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Parker), - .party = {.ItemCustomMoves = sParty_Parker}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Parker), }, [TRAINER_GEORGE] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("GEORGE"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_George), - .party = {.ItemCustomMoves = sParty_George}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_George), }, [TRAINER_BERKE] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("BERKE"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Berke), - .party = {.ItemCustomMoves = sParty_Berke}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Berke), }, [TRAINER_BRAXTON] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("BRAXTON"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Braxton), - .party = {.NoItemCustomMoves = sParty_Braxton}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Braxton), }, [TRAINER_VINCENT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("VINCENT"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Vincent), - .party = {.NoItemDefaultMoves = sParty_Vincent}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Vincent), }, [TRAINER_LEROY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("LEROY"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Leroy), - .party = {.NoItemDefaultMoves = sParty_Leroy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Leroy), }, [TRAINER_WILTON_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("WILTON"), .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wilton1), - .party = {.NoItemDefaultMoves = sParty_Wilton1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton1), }, [TRAINER_EDGAR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("EDGAR"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Edgar), - .party = {.NoItemDefaultMoves = sParty_Edgar}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Edgar), }, [TRAINER_ALBERT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("ALBERT"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Albert), - .party = {.NoItemDefaultMoves = sParty_Albert}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Albert), }, [TRAINER_SAMUEL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("SAMUEL"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Samuel), - .party = {.NoItemDefaultMoves = sParty_Samuel}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Samuel), }, [TRAINER_VITO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("VITO"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Vito), - .party = {.NoItemDefaultMoves = sParty_Vito}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Vito), }, [TRAINER_OWEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("OWEN"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Owen), - .party = {.NoItemDefaultMoves = sParty_Owen}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Owen), }, [TRAINER_WILTON_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("WILTON"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wilton2), - .party = {.NoItemDefaultMoves = sParty_Wilton2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton2), }, [TRAINER_WILTON_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("WILTON"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wilton3), - .party = {.NoItemDefaultMoves = sParty_Wilton3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton3), }, [TRAINER_WILTON_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("WILTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wilton4), - .party = {.NoItemDefaultMoves = sParty_Wilton4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton4), }, [TRAINER_WILTON_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("WILTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wilton5), - .party = {.NoItemDefaultMoves = sParty_Wilton5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton5), }, [TRAINER_WARREN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("WARREN"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Warren), - .party = {.NoItemDefaultMoves = sParty_Warren}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Warren), }, [TRAINER_MARY] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("MARY"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Mary), - .party = {.ItemCustomMoves = sParty_Mary}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Mary), }, [TRAINER_ALEXIA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("ALEXIA"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Alexia), - .party = {.ItemCustomMoves = sParty_Alexia}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Alexia), }, [TRAINER_JODY] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("JODY"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Jody), - .party = {.ItemCustomMoves = sParty_Jody}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = ITEM_CUSTOM_MOVES(sParty_Jody), }, [TRAINER_WENDY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("WENDY"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Wendy), - .party = {.NoItemCustomMoves = sParty_Wendy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Wendy), }, [TRAINER_KEIRA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("KEIRA"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Keira), - .party = {.NoItemDefaultMoves = sParty_Keira}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Keira), }, [TRAINER_BROOKE_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("BROOKE"), .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brooke1), - .party = {.NoItemDefaultMoves = sParty_Brooke1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke1), }, [TRAINER_JENNIFER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("JENNIFER"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Jennifer), - .party = {.NoItemDefaultMoves = sParty_Jennifer}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jennifer), }, [TRAINER_HOPE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("HOPE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Hope), - .party = {.NoItemDefaultMoves = sParty_Hope}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Hope), }, [TRAINER_SHANNON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("SHANNON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Shannon), - .party = {.NoItemDefaultMoves = sParty_Shannon}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Shannon), }, [TRAINER_MICHELLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("MICHELLE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Michelle), - .party = {.NoItemDefaultMoves = sParty_Michelle}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Michelle), }, [TRAINER_CAROLINE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("CAROLINE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Caroline), - .party = {.NoItemDefaultMoves = sParty_Caroline}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Caroline), }, [TRAINER_JULIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("JULIE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Julie), - .party = {.NoItemDefaultMoves = sParty_Julie}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Julie), }, [TRAINER_BROOKE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("BROOKE"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brooke2), - .party = {.NoItemDefaultMoves = sParty_Brooke2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke2), }, [TRAINER_BROOKE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("BROOKE"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brooke3), - .party = {.NoItemDefaultMoves = sParty_Brooke3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke3), }, [TRAINER_BROOKE_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("BROOKE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brooke4), - .party = {.NoItemDefaultMoves = sParty_Brooke4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke4), }, [TRAINER_BROOKE_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("BROOKE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brooke5), - .party = {.NoItemDefaultMoves = sParty_Brooke5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke5), }, [TRAINER_PATRICIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("PATRICIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Patricia), - .party = {.NoItemDefaultMoves = sParty_Patricia}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Patricia), }, [TRAINER_KINDRA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("KINDRA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kindra), - .party = {.NoItemDefaultMoves = sParty_Kindra}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kindra), }, [TRAINER_TAMMY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("TAMMY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tammy), - .party = {.NoItemDefaultMoves = sParty_Tammy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tammy), }, [TRAINER_VALERIE_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("VALERIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Valerie1), - .party = {.NoItemDefaultMoves = sParty_Valerie1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie1), }, [TRAINER_TASHA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("TASHA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tasha), - .party = {.NoItemDefaultMoves = sParty_Tasha}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tasha), }, [TRAINER_VALERIE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("VALERIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Valerie2), - .party = {.NoItemDefaultMoves = sParty_Valerie2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie2), }, [TRAINER_VALERIE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("VALERIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Valerie3), - .party = {.NoItemDefaultMoves = sParty_Valerie3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie3), }, [TRAINER_VALERIE_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("VALERIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Valerie4), - .party = {.NoItemDefaultMoves = sParty_Valerie4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie4), }, [TRAINER_VALERIE_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("VALERIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Valerie5), - .party = {.NoItemDefaultMoves = sParty_Valerie5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie5), }, [TRAINER_CINDY_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, .trainerName = _("CINDY"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cindy1), - .party = {.ItemDefaultMoves = sParty_Cindy1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Cindy1), }, [TRAINER_DAPHNE] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, .trainerName = _("DAPHNE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Daphne), - .party = {.ItemCustomMoves = sParty_Daphne}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_CUSTOM_MOVES(sParty_Daphne), }, [TRAINER_GRUNT_SPACE_CENTER_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter2), - .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter2), }, [TRAINER_CINDY_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, .trainerName = _("CINDY"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cindy2), - .party = {.ItemCustomMoves = sParty_Cindy2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_CUSTOM_MOVES(sParty_Cindy2), }, [TRAINER_BRIANNA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, .trainerName = _("BRIANNA"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Brianna), - .party = {.ItemDefaultMoves = sParty_Brianna}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Brianna), }, [TRAINER_NAOMI] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, .trainerName = _("NAOMI"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Naomi), - .party = {.ItemDefaultMoves = sParty_Naomi}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Naomi), }, [TRAINER_CINDY_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, .trainerName = _("CINDY"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cindy3), - .party = {.ItemDefaultMoves = sParty_Cindy3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Cindy3), }, [TRAINER_CINDY_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, .trainerName = _("CINDY"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cindy4), - .party = {.ItemDefaultMoves = sParty_Cindy4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Cindy4), }, [TRAINER_CINDY_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, .trainerName = _("CINDY"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cindy5), - .party = {.ItemDefaultMoves = sParty_Cindy5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Cindy5), }, [TRAINER_CINDY_6] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, .trainerName = _("CINDY"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cindy6), - .party = {.ItemCustomMoves = sParty_Cindy6}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_CUSTOM_MOVES(sParty_Cindy6), }, [TRAINER_MELISSA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("MELISSA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Melissa), - .party = {.NoItemDefaultMoves = sParty_Melissa}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Melissa), }, [TRAINER_SHEILA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("SHEILA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Sheila), - .party = {.NoItemDefaultMoves = sParty_Sheila}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sheila), }, [TRAINER_SHIRLEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("SHIRLEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Shirley), - .party = {.NoItemDefaultMoves = sParty_Shirley}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Shirley), }, [TRAINER_JESSICA_1] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("JESSICA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jessica1), - .party = {.NoItemCustomMoves = sParty_Jessica1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica1), }, [TRAINER_CONNIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("CONNIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Connie), - .party = {.NoItemDefaultMoves = sParty_Connie}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Connie), }, [TRAINER_BRIDGET] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("BRIDGET"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Bridget), - .party = {.NoItemDefaultMoves = sParty_Bridget}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Bridget), }, [TRAINER_OLIVIA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("OLIVIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Olivia), - .party = {.NoItemCustomMoves = sParty_Olivia}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Olivia), }, [TRAINER_TIFFANY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("TIFFANY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tiffany), - .party = {.NoItemDefaultMoves = sParty_Tiffany}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tiffany), }, [TRAINER_JESSICA_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("JESSICA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jessica2), - .party = {.NoItemCustomMoves = sParty_Jessica2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica2), }, [TRAINER_JESSICA_3] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("JESSICA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jessica3), - .party = {.NoItemCustomMoves = sParty_Jessica3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica3), }, [TRAINER_JESSICA_4] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("JESSICA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jessica4), - .party = {.NoItemCustomMoves = sParty_Jessica4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica4), }, [TRAINER_JESSICA_5] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("JESSICA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jessica5), - .party = {.NoItemCustomMoves = sParty_Jessica5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica5), }, [TRAINER_WINSTON_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_RICH_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_RICH_BOY, .trainerName = _("WINSTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Winston1), - .party = {.ItemDefaultMoves = sParty_Winston1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Winston1), }, [TRAINER_MOLLIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_F, .trainerName = _("MOLLIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Mollie), - .party = {.NoItemDefaultMoves = sParty_Mollie}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Mollie), }, [TRAINER_GARRET] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_RICH_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_RICH_BOY, .trainerName = _("GARRET"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Garret), - .party = {.ItemDefaultMoves = sParty_Garret}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Garret), }, [TRAINER_WINSTON_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_RICH_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_RICH_BOY, .trainerName = _("WINSTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Winston2), - .party = {.ItemDefaultMoves = sParty_Winston2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Winston2), }, [TRAINER_WINSTON_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_RICH_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_RICH_BOY, .trainerName = _("WINSTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Winston3), - .party = {.ItemDefaultMoves = sParty_Winston3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Winston3), }, [TRAINER_WINSTON_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_RICH_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_RICH_BOY, .trainerName = _("WINSTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Winston4), - .party = {.ItemDefaultMoves = sParty_Winston4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Winston4), }, [TRAINER_WINSTON_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_RICH_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_RICH_BOY, .trainerName = _("WINSTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Winston5), - .party = {.ItemCustomMoves = sParty_Winston5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_CUSTOM_MOVES(sParty_Winston5), }, [TRAINER_STEVE_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, .trainerName = _("STEVE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Steve1), - .party = {.NoItemDefaultMoves = sParty_Steve1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve1), }, [TRAINER_THALIA_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("THALIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Thalia1), - .party = {.NoItemDefaultMoves = sParty_Thalia1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia1), }, [TRAINER_MARK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, .trainerName = _("MARK"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Mark), - .party = {.NoItemDefaultMoves = sParty_Mark}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Mark), }, [TRAINER_GRUNT_MT_CHIMNEY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMtChimney1), - .party = {.NoItemDefaultMoves = sParty_GruntMtChimney1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtChimney1), }, [TRAINER_STEVE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, .trainerName = _("STEVE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Steve2), - .party = {.NoItemDefaultMoves = sParty_Steve2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve2), }, [TRAINER_STEVE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, .trainerName = _("STEVE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Steve3), - .party = {.NoItemDefaultMoves = sParty_Steve3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve3), }, [TRAINER_STEVE_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, .trainerName = _("STEVE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Steve4), - .party = {.NoItemDefaultMoves = sParty_Steve4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve4), }, [TRAINER_STEVE_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, .trainerName = _("STEVE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Steve5), - .party = {.NoItemDefaultMoves = sParty_Steve5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve5), }, [TRAINER_LUIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("LUIS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Luis), - .party = {.NoItemDefaultMoves = sParty_Luis}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Luis), }, [TRAINER_DOMINIK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("DOMINIK"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dominik), - .party = {.NoItemDefaultMoves = sParty_Dominik}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dominik), }, [TRAINER_DOUGLAS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("DOUGLAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Douglas), - .party = {.NoItemDefaultMoves = sParty_Douglas}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Douglas), }, [TRAINER_DARRIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("DARRIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Darrin), - .party = {.NoItemDefaultMoves = sParty_Darrin}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Darrin), }, [TRAINER_TONY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("TONY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tony1), - .party = {.NoItemDefaultMoves = sParty_Tony1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony1), }, [TRAINER_JEROME] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("JEROME"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jerome), - .party = {.NoItemDefaultMoves = sParty_Jerome}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerome), }, [TRAINER_MATTHEW] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("MATTHEW"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Matthew), - .party = {.NoItemDefaultMoves = sParty_Matthew}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Matthew), }, [TRAINER_DAVID] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("DAVID"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_David), - .party = {.NoItemDefaultMoves = sParty_David}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_David), }, [TRAINER_SPENCER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("SPENCER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Spencer), - .party = {.NoItemDefaultMoves = sParty_Spencer}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Spencer), }, [TRAINER_ROLAND] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("ROLAND"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Roland), - .party = {.NoItemDefaultMoves = sParty_Roland}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Roland), }, [TRAINER_NOLEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("NOLEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nolen), - .party = {.NoItemDefaultMoves = sParty_Nolen}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nolen), }, [TRAINER_STAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("STAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Stan), - .party = {.NoItemDefaultMoves = sParty_Stan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Stan), }, [TRAINER_BARRY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("BARRY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Barry), - .party = {.NoItemDefaultMoves = sParty_Barry}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Barry), }, [TRAINER_DEAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("DEAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dean), - .party = {.NoItemDefaultMoves = sParty_Dean}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dean), }, [TRAINER_RODNEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("RODNEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Rodney), - .party = {.NoItemDefaultMoves = sParty_Rodney}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Rodney), }, [TRAINER_RICHARD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("RICHARD"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Richard), - .party = {.NoItemDefaultMoves = sParty_Richard}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Richard), }, [TRAINER_HERMAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("HERMAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Herman), - .party = {.NoItemDefaultMoves = sParty_Herman}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Herman), }, [TRAINER_SANTIAGO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("SANTIAGO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Santiago), - .party = {.NoItemDefaultMoves = sParty_Santiago}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Santiago), }, [TRAINER_GILBERT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("GILBERT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Gilbert), - .party = {.NoItemDefaultMoves = sParty_Gilbert}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Gilbert), }, [TRAINER_FRANKLIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("FRANKLIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Franklin), - .party = {.NoItemDefaultMoves = sParty_Franklin}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Franklin), }, [TRAINER_KEVIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("KEVIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kevin), - .party = {.NoItemDefaultMoves = sParty_Kevin}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kevin), }, [TRAINER_JACK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("JACK"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jack), - .party = {.NoItemDefaultMoves = sParty_Jack}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jack), }, [TRAINER_DUDLEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("DUDLEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dudley), - .party = {.NoItemDefaultMoves = sParty_Dudley}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dudley), }, [TRAINER_CHAD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("CHAD"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Chad), - .party = {.NoItemDefaultMoves = sParty_Chad}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Chad), }, [TRAINER_TONY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("TONY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tony2), - .party = {.NoItemDefaultMoves = sParty_Tony2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony2), }, [TRAINER_TONY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("TONY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tony3), - .party = {.NoItemDefaultMoves = sParty_Tony3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony3), }, [TRAINER_TONY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("TONY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tony4), - .party = {.NoItemDefaultMoves = sParty_Tony4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony4), }, [TRAINER_TONY_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("TONY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tony5), - .party = {.NoItemDefaultMoves = sParty_Tony5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony5), }, [TRAINER_TAKAO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("TAKAO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Takao), - .party = {.NoItemDefaultMoves = sParty_Takao}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Takao), }, [TRAINER_HITOSHI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("HITOSHI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Hitoshi), - .party = {.NoItemDefaultMoves = sParty_Hitoshi}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Hitoshi), }, [TRAINER_KIYO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("KIYO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kiyo), - .party = {.NoItemDefaultMoves = sParty_Kiyo}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kiyo), }, [TRAINER_KOICHI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("KOICHI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Koichi), - .party = {.NoItemDefaultMoves = sParty_Koichi}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Koichi), }, [TRAINER_NOB_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("NOB"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nob1), - .party = {.NoItemDefaultMoves = sParty_Nob1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob1), }, [TRAINER_NOB_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("NOB"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nob2), - .party = {.NoItemDefaultMoves = sParty_Nob2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob2), }, [TRAINER_NOB_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("NOB"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nob3), - .party = {.NoItemDefaultMoves = sParty_Nob3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob3), }, [TRAINER_NOB_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("NOB"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nob4), - .party = {.NoItemDefaultMoves = sParty_Nob4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob4), }, [TRAINER_NOB_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("NOB"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nob5), - .party = {.ItemDefaultMoves = sParty_Nob5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Nob5), }, [TRAINER_YUJI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("YUJI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Yuji), - .party = {.NoItemDefaultMoves = sParty_Yuji}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Yuji), }, [TRAINER_DAISUKE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("DAISUKE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Daisuke), - .party = {.NoItemDefaultMoves = sParty_Daisuke}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Daisuke), }, [TRAINER_ATSUSHI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("ATSUSHI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Atsushi), - .party = {.NoItemDefaultMoves = sParty_Atsushi}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Atsushi), }, [TRAINER_KIRK] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("KIRK"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kirk), - .party = {.NoItemCustomMoves = sParty_Kirk}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Kirk), }, [TRAINER_GRUNT_AQUA_HIDEOUT_7] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntAquaHideout7), - .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout7}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout7), }, [TRAINER_GRUNT_AQUA_HIDEOUT_8] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntAquaHideout8), - .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout8}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout8), }, [TRAINER_SHAWN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("SHAWN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Shawn), - .party = {.NoItemDefaultMoves = sParty_Shawn}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Shawn), }, [TRAINER_FERNANDO_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("FERNANDO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Fernando1), - .party = {.NoItemDefaultMoves = sParty_Fernando1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando1), }, [TRAINER_DALTON_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("DALTON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dalton1), - .party = {.NoItemDefaultMoves = sParty_Dalton1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton1), }, [TRAINER_DALTON_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("DALTON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dalton2), - .party = {.NoItemDefaultMoves = sParty_Dalton2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton2), }, [TRAINER_DALTON_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("DALTON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dalton3), - .party = {.NoItemDefaultMoves = sParty_Dalton3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton3), }, [TRAINER_DALTON_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("DALTON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dalton4), - .party = {.NoItemDefaultMoves = sParty_Dalton4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton4), }, [TRAINER_DALTON_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("DALTON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dalton5), - .party = {.NoItemDefaultMoves = sParty_Dalton5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton5), }, [TRAINER_COLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("COLE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cole), - .party = {.NoItemDefaultMoves = sParty_Cole}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cole), }, [TRAINER_JEFF] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("JEFF"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jeff), - .party = {.NoItemDefaultMoves = sParty_Jeff}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeff), }, [TRAINER_AXLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("AXLE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Axle), - .party = {.NoItemDefaultMoves = sParty_Axle}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Axle), }, [TRAINER_JACE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("JACE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jace), - .party = {.NoItemDefaultMoves = sParty_Jace}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jace), }, [TRAINER_KEEGAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("KEEGAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Keegan), - .party = {.NoItemDefaultMoves = sParty_Keegan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Keegan), }, [TRAINER_BERNIE_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("BERNIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Bernie1), - .party = {.NoItemDefaultMoves = sParty_Bernie1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie1), }, [TRAINER_BERNIE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("BERNIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Bernie2), - .party = {.NoItemDefaultMoves = sParty_Bernie2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie2), }, [TRAINER_BERNIE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("BERNIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Bernie3), - .party = {.NoItemDefaultMoves = sParty_Bernie3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie3), }, [TRAINER_BERNIE_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("BERNIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Bernie4), - .party = {.NoItemDefaultMoves = sParty_Bernie4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie4), }, [TRAINER_BERNIE_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("BERNIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Bernie5), - .party = {.NoItemDefaultMoves = sParty_Bernie5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie5), }, [TRAINER_DREW] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("DREW"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Drew), - .party = {.NoItemCustomMoves = sParty_Drew}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Drew), }, [TRAINER_BEAU] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("BEAU"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Beau), - .party = {.NoItemCustomMoves = sParty_Beau}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Beau), }, [TRAINER_LARRY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("LARRY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Larry), - .party = {.NoItemDefaultMoves = sParty_Larry}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Larry), }, [TRAINER_SHANE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("SHANE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Shane), - .party = {.NoItemDefaultMoves = sParty_Shane}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Shane), }, [TRAINER_JUSTIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("JUSTIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Justin), - .party = {.NoItemDefaultMoves = sParty_Justin}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Justin), }, [TRAINER_ETHAN_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("ETHAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ethan1), - .party = {.NoItemDefaultMoves = sParty_Ethan1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan1), }, [TRAINER_AUTUMN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("AUTUMN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Autumn), - .party = {.NoItemDefaultMoves = sParty_Autumn}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Autumn), }, [TRAINER_TRAVIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("TRAVIS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Travis), - .party = {.NoItemDefaultMoves = sParty_Travis}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Travis), }, [TRAINER_ETHAN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("ETHAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ethan2), - .party = {.NoItemDefaultMoves = sParty_Ethan2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan2), }, [TRAINER_ETHAN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("ETHAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ethan3), - .party = {.NoItemDefaultMoves = sParty_Ethan3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan3), }, [TRAINER_ETHAN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("ETHAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ethan4), - .party = {.NoItemDefaultMoves = sParty_Ethan4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan4), }, [TRAINER_ETHAN_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("ETHAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ethan5), - .party = {.NoItemDefaultMoves = sParty_Ethan5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan5), }, [TRAINER_BRENT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("BRENT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Brent), - .party = {.NoItemDefaultMoves = sParty_Brent}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brent), }, [TRAINER_DONALD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("DONALD"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Donald), - .party = {.NoItemDefaultMoves = sParty_Donald}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Donald), }, [TRAINER_TAYLOR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("TAYLOR"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Taylor), - .party = {.NoItemDefaultMoves = sParty_Taylor}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Taylor), }, [TRAINER_JEFFREY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("JEFFREY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jeffrey1), - .party = {.NoItemDefaultMoves = sParty_Jeffrey1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey1), }, [TRAINER_DEREK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("DEREK"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Derek), - .party = {.NoItemDefaultMoves = sParty_Derek}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Derek), }, [TRAINER_JEFFREY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("JEFFREY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jeffrey2), - .party = {.NoItemDefaultMoves = sParty_Jeffrey2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey2), }, [TRAINER_JEFFREY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("JEFFREY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jeffrey3), - .party = {.NoItemDefaultMoves = sParty_Jeffrey3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey3), }, [TRAINER_JEFFREY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("JEFFREY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jeffrey4), - .party = {.NoItemDefaultMoves = sParty_Jeffrey4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey4), }, [TRAINER_JEFFREY_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("JEFFREY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jeffrey5), - .party = {.ItemDefaultMoves = sParty_Jeffrey5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Jeffrey5), }, [TRAINER_EDWARD] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("EDWARD"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Edward), - .party = {.NoItemCustomMoves = sParty_Edward}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Edward), }, [TRAINER_PRESTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("PRESTON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Preston), - .party = {.NoItemDefaultMoves = sParty_Preston}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Preston), }, [TRAINER_VIRGIL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("VIRGIL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Virgil), - .party = {.NoItemDefaultMoves = sParty_Virgil}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Virgil), }, [TRAINER_BLAKE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("BLAKE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Blake), - .party = {.NoItemDefaultMoves = sParty_Blake}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Blake), }, [TRAINER_WILLIAM] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("WILLIAM"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_William), - .party = {.NoItemDefaultMoves = sParty_William}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_William), }, [TRAINER_JOSHUA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("JOSHUA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Joshua), - .party = {.NoItemDefaultMoves = sParty_Joshua}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Joshua), }, [TRAINER_CAMERON_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("CAMERON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cameron1), - .party = {.NoItemDefaultMoves = sParty_Cameron1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron1), }, [TRAINER_CAMERON_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("CAMERON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cameron2), - .party = {.NoItemDefaultMoves = sParty_Cameron2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron2), }, [TRAINER_CAMERON_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("CAMERON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cameron3), - .party = {.NoItemDefaultMoves = sParty_Cameron3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron3), }, [TRAINER_CAMERON_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("CAMERON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cameron4), - .party = {.NoItemDefaultMoves = sParty_Cameron4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron4), }, [TRAINER_CAMERON_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("CAMERON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cameron5), - .party = {.NoItemDefaultMoves = sParty_Cameron5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron5), }, [TRAINER_JACLYN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("JACLYN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jaclyn), - .party = {.NoItemCustomMoves = sParty_Jaclyn}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Jaclyn), }, [TRAINER_HANNAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("HANNAH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Hannah), - .party = {.NoItemDefaultMoves = sParty_Hannah}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Hannah), }, [TRAINER_SAMANTHA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("SAMANTHA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Samantha), - .party = {.NoItemDefaultMoves = sParty_Samantha}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Samantha), }, [TRAINER_MAURA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("MAURA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Maura), - .party = {.NoItemDefaultMoves = sParty_Maura}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Maura), }, [TRAINER_KAYLA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("KAYLA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kayla), - .party = {.NoItemDefaultMoves = sParty_Kayla}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kayla), }, [TRAINER_ALEXIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("ALEXIS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Alexis), - .party = {.NoItemDefaultMoves = sParty_Alexis}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Alexis), }, [TRAINER_JACKI_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("JACKI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jacki1), - .party = {.NoItemDefaultMoves = sParty_Jacki1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki1), }, [TRAINER_JACKI_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("JACKI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jacki2), - .party = {.NoItemDefaultMoves = sParty_Jacki2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki2), }, [TRAINER_JACKI_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("JACKI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jacki3), - .party = {.NoItemDefaultMoves = sParty_Jacki3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki3), }, [TRAINER_JACKI_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("JACKI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jacki4), - .party = {.NoItemDefaultMoves = sParty_Jacki4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki4), }, [TRAINER_JACKI_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("JACKI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jacki5), - .party = {.NoItemDefaultMoves = sParty_Jacki5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki5), }, [TRAINER_WALTER_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, .trainerName = _("WALTER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Walter1), - .party = {.NoItemDefaultMoves = sParty_Walter1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Walter1), }, [TRAINER_MICAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, .trainerName = _("MICAH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Micah), - .party = {.NoItemDefaultMoves = sParty_Micah}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Micah), }, [TRAINER_THOMAS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, .trainerName = _("THOMAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Thomas), - .party = {.NoItemDefaultMoves = sParty_Thomas}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Thomas), }, [TRAINER_WALTER_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, .trainerName = _("WALTER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Walter2), - .party = {.NoItemDefaultMoves = sParty_Walter2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Walter2), }, [TRAINER_WALTER_3] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, .trainerName = _("WALTER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Walter3), - .party = {.NoItemCustomMoves = sParty_Walter3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Walter3), }, [TRAINER_WALTER_4] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, .trainerName = _("WALTER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Walter4), - .party = {.NoItemCustomMoves = sParty_Walter4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Walter4), }, [TRAINER_WALTER_5] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, .trainerName = _("WALTER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Walter5), - .party = {.NoItemCustomMoves = sParty_Walter5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Walter5), }, [TRAINER_SIDNEY] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_SIDNEY, .trainerName = _("SIDNEY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Sidney), - .party = {.ItemCustomMoves = sParty_Sidney}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SETUP_FIRST_TURN, + .party = ITEM_CUSTOM_MOVES(sParty_Sidney), }, [TRAINER_PHOEBE] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_PHOEBE, .trainerName = _("PHOEBE"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Phoebe), - .party = {.ItemCustomMoves = sParty_Phoebe}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Phoebe), }, [TRAINER_GLACIA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_GLACIA, .trainerName = _("GLACIA"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Glacia), - .party = {.ItemCustomMoves = sParty_Glacia}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Glacia), }, [TRAINER_DRAKE] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_ELITE_FOUR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, .trainerPic = TRAINER_PIC_ELITE_FOUR_DRAKE, .trainerName = _("DRAKE"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Drake), - .party = {.ItemCustomMoves = sParty_Drake}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Drake), }, [TRAINER_ROXANNE_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .trainerName = _("ROXANNE"), .items = {ITEM_POTION, ITEM_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Roxanne1), - .party = {.ItemCustomMoves = sParty_Roxanne1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Roxanne1), }, [TRAINER_BRAWLY_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .trainerName = _("BRAWLY"), .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brawly1), - .party = {.ItemCustomMoves = sParty_Brawly1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Brawly1), }, [TRAINER_WATTSON_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_WATTSON, .trainerName = _("WATTSON"), .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wattson1), - .party = {.ItemCustomMoves = sParty_Wattson1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Wattson1), }, [TRAINER_FLANNERY_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .trainerName = _("FLANNERY"), .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Flannery1), - .party = {.ItemCustomMoves = sParty_Flannery1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Flannery1), }, [TRAINER_NORMAN_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_NORMAN, .trainerName = _("NORMAN"), .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Norman1), - .party = {.ItemCustomMoves = sParty_Norman1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Norman1), }, [TRAINER_WINONA_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_WINONA, .trainerName = _("WINONA"), .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY, - .partySize = ARRAY_COUNT(sParty_Winona1), - .party = {.ItemCustomMoves = sParty_Winona1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, + .party = ITEM_CUSTOM_MOVES(sParty_Winona1), }, [TRAINER_TATE_AND_LIZA_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .trainerName = _("TATE&LIZA"), .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_TateAndLiza1), - .party = {.ItemCustomMoves = sParty_TateAndLiza1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza1), }, [TRAINER_JUAN_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_JUAN, .trainerName = _("JUAN"), .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Juan1), - .party = {.ItemCustomMoves = sParty_Juan1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Juan1), }, [TRAINER_JERRY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .trainerName = _("JERRY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jerry1), - .party = {.NoItemDefaultMoves = sParty_Jerry1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry1), }, [TRAINER_TED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .trainerName = _("TED"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ted), - .party = {.NoItemDefaultMoves = sParty_Ted}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ted), }, [TRAINER_PAUL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .trainerName = _("PAUL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Paul), - .party = {.NoItemDefaultMoves = sParty_Paul}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Paul), }, [TRAINER_JERRY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .trainerName = _("JERRY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jerry2), - .party = {.NoItemDefaultMoves = sParty_Jerry2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry2), }, [TRAINER_JERRY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .trainerName = _("JERRY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jerry3), - .party = {.NoItemDefaultMoves = sParty_Jerry3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry3), }, [TRAINER_JERRY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .trainerName = _("JERRY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jerry4), - .party = {.NoItemDefaultMoves = sParty_Jerry4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry4), }, [TRAINER_JERRY_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .trainerName = _("JERRY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jerry5), - .party = {.NoItemDefaultMoves = sParty_Jerry5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry5), }, [TRAINER_KAREN_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .trainerName = _("KAREN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Karen1), - .party = {.NoItemDefaultMoves = sParty_Karen1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen1), }, [TRAINER_GEORGIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .trainerName = _("GEORGIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Georgia), - .party = {.NoItemDefaultMoves = sParty_Georgia}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Georgia), }, [TRAINER_KAREN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .trainerName = _("KAREN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Karen2), - .party = {.NoItemDefaultMoves = sParty_Karen2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen2), }, [TRAINER_KAREN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .trainerName = _("KAREN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Karen3), - .party = {.NoItemDefaultMoves = sParty_Karen3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen3), }, [TRAINER_KAREN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .trainerName = _("KAREN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Karen4), - .party = {.NoItemDefaultMoves = sParty_Karen4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen4), }, [TRAINER_KAREN_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SCHOOL_KID, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .trainerName = _("KAREN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Karen5), - .party = {.NoItemDefaultMoves = sParty_Karen5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen5), }, [TRAINER_KATE_AND_JOY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SR_AND_JR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_SR_AND_JR, .trainerName = _("KATE & JOY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_KateAndJoy), - .party = {.NoItemCustomMoves = sParty_KateAndJoy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_KateAndJoy), }, [TRAINER_ANNA_AND_MEG_1] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SR_AND_JR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_SR_AND_JR, .trainerName = _("ANNA & MEG"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AnnaAndMeg1), - .party = {.NoItemCustomMoves = sParty_AnnaAndMeg1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg1), }, [TRAINER_ANNA_AND_MEG_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SR_AND_JR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_SR_AND_JR, .trainerName = _("ANNA & MEG"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AnnaAndMeg2), - .party = {.NoItemCustomMoves = sParty_AnnaAndMeg2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg2), }, [TRAINER_ANNA_AND_MEG_3] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SR_AND_JR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_SR_AND_JR, .trainerName = _("ANNA & MEG"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AnnaAndMeg3), - .party = {.NoItemCustomMoves = sParty_AnnaAndMeg3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg3), }, [TRAINER_ANNA_AND_MEG_4] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SR_AND_JR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_SR_AND_JR, .trainerName = _("ANNA & MEG"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AnnaAndMeg4), - .party = {.NoItemCustomMoves = sParty_AnnaAndMeg4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg4), }, [TRAINER_ANNA_AND_MEG_5] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SR_AND_JR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_SR_AND_JR, .trainerName = _("ANNA & MEG"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AnnaAndMeg5), - .party = {.NoItemCustomMoves = sParty_AnnaAndMeg5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg5), }, [TRAINER_VICTOR] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_WINSTRATE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_M, .trainerName = _("VICTOR"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Victor), - .party = {.ItemDefaultMoves = sParty_Victor}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Victor), }, [TRAINER_MIGUEL_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_M, .trainerName = _("MIGUEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Miguel1), - .party = {.ItemDefaultMoves = sParty_Miguel1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Miguel1), }, [TRAINER_COLTON] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_M, .trainerName = _("COLTON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Colton), - .party = {.ItemCustomMoves = sParty_Colton}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_CUSTOM_MOVES(sParty_Colton), }, [TRAINER_MIGUEL_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_M, .trainerName = _("MIGUEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Miguel2), - .party = {.ItemDefaultMoves = sParty_Miguel2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Miguel2), }, [TRAINER_MIGUEL_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_M, .trainerName = _("MIGUEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Miguel3), - .party = {.ItemDefaultMoves = sParty_Miguel3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Miguel3), }, [TRAINER_MIGUEL_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_M, .trainerName = _("MIGUEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Miguel4), - .party = {.ItemDefaultMoves = sParty_Miguel4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Miguel4), }, [TRAINER_MIGUEL_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_M, .trainerName = _("MIGUEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Miguel5), - .party = {.ItemDefaultMoves = sParty_Miguel5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Miguel5), }, [TRAINER_VICTORIA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_WINSTRATE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_F, .trainerName = _("VICTORIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = ARRAY_COUNT(sParty_Victoria), - .party = {.ItemDefaultMoves = sParty_Victoria}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, + .party = ITEM_DEFAULT_MOVES(sParty_Victoria), }, [TRAINER_VANESSA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_F, .trainerName = _("VANESSA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Vanessa), - .party = {.ItemDefaultMoves = sParty_Vanessa}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Vanessa), }, [TRAINER_BETHANY] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_F, .trainerName = _("BETHANY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Bethany), - .party = {.ItemDefaultMoves = sParty_Bethany}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Bethany), }, [TRAINER_ISABEL_1] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_F, .trainerName = _("ISABEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isabel1), - .party = {.ItemDefaultMoves = sParty_Isabel1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Isabel1), }, [TRAINER_ISABEL_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_F, .trainerName = _("ISABEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isabel2), - .party = {.ItemDefaultMoves = sParty_Isabel2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Isabel2), }, [TRAINER_ISABEL_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_F, .trainerName = _("ISABEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isabel3), - .party = {.ItemDefaultMoves = sParty_Isabel3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Isabel3), }, [TRAINER_ISABEL_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_F, .trainerName = _("ISABEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isabel4), - .party = {.ItemDefaultMoves = sParty_Isabel4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Isabel4), }, [TRAINER_ISABEL_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_F, .trainerName = _("ISABEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isabel5), - .party = {.ItemDefaultMoves = sParty_Isabel5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Isabel5), }, [TRAINER_TIMOTHY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_M, .trainerName = _("TIMOTHY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Timothy1), - .party = {.NoItemDefaultMoves = sParty_Timothy1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Timothy1), }, [TRAINER_TIMOTHY_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_M, .trainerName = _("TIMOTHY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Timothy2), - .party = {.NoItemCustomMoves = sParty_Timothy2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy2), }, [TRAINER_TIMOTHY_3] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_M, .trainerName = _("TIMOTHY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Timothy3), - .party = {.NoItemCustomMoves = sParty_Timothy3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy3), }, [TRAINER_TIMOTHY_4] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_M, .trainerName = _("TIMOTHY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Timothy4), - .party = {.NoItemCustomMoves = sParty_Timothy4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy4), }, [TRAINER_TIMOTHY_5] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_M, .trainerName = _("TIMOTHY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Timothy5), - .party = {.NoItemCustomMoves = sParty_Timothy5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy5), }, [TRAINER_VICKY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_WINSTRATE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_F, .trainerName = _("VICKY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Vicky), - .party = {.NoItemCustomMoves = sParty_Vicky}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Vicky), }, [TRAINER_SHELBY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_F, .trainerName = _("SHELBY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Shelby1), - .party = {.NoItemDefaultMoves = sParty_Shelby1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby1), }, [TRAINER_SHELBY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_F, .trainerName = _("SHELBY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Shelby2), - .party = {.NoItemDefaultMoves = sParty_Shelby2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby2), }, [TRAINER_SHELBY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_F, .trainerName = _("SHELBY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Shelby3), - .party = {.NoItemDefaultMoves = sParty_Shelby3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby3), }, [TRAINER_SHELBY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_F, .trainerName = _("SHELBY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Shelby4), - .party = {.NoItemDefaultMoves = sParty_Shelby4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby4), }, [TRAINER_SHELBY_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_F, .trainerName = _("SHELBY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Shelby5), - .party = {.NoItemDefaultMoves = sParty_Shelby5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby5), }, [TRAINER_CALVIN_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("CALVIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Calvin1), - .party = {.NoItemDefaultMoves = sParty_Calvin1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin1), }, [TRAINER_BILLY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("BILLY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Billy), - .party = {.NoItemDefaultMoves = sParty_Billy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Billy), }, [TRAINER_JOSH] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("JOSH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Josh), - .party = {.NoItemCustomMoves = sParty_Josh}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Josh), }, [TRAINER_TOMMY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("TOMMY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tommy), - .party = {.NoItemDefaultMoves = sParty_Tommy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tommy), }, [TRAINER_JOEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("JOEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Joey), - .party = {.NoItemDefaultMoves = sParty_Joey}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Joey), }, [TRAINER_BEN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("BEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ben), - .party = {.NoItemCustomMoves = sParty_Ben}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Ben), }, [TRAINER_QUINCY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("QUINCY"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Quincy), - .party = {.NoItemCustomMoves = sParty_Quincy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Quincy), }, [TRAINER_KATELYNN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("KATELYNN"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Katelynn), - .party = {.NoItemCustomMoves = sParty_Katelynn}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Katelynn), }, [TRAINER_JAYLEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("JAYLEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jaylen), - .party = {.NoItemDefaultMoves = sParty_Jaylen}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jaylen), }, [TRAINER_DILLON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("DILLON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dillon), - .party = {.NoItemDefaultMoves = sParty_Dillon}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dillon), }, [TRAINER_CALVIN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("CALVIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Calvin2), - .party = {.NoItemDefaultMoves = sParty_Calvin2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin2), }, [TRAINER_CALVIN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("CALVIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Calvin3), - .party = {.NoItemDefaultMoves = sParty_Calvin3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin3), }, [TRAINER_CALVIN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("CALVIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Calvin4), - .party = {.NoItemDefaultMoves = sParty_Calvin4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin4), }, [TRAINER_CALVIN_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("CALVIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Calvin5), - .party = {.NoItemDefaultMoves = sParty_Calvin5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin5), }, [TRAINER_EDDIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("EDDIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Eddie), - .party = {.NoItemDefaultMoves = sParty_Eddie}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Eddie), }, [TRAINER_ALLEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("ALLEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Allen), - .party = {.NoItemDefaultMoves = sParty_Allen}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Allen), }, [TRAINER_TIMMY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("TIMMY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Timmy), - .party = {.NoItemDefaultMoves = sParty_Timmy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Timmy), }, [TRAINER_WALLACE] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_CHAMPION, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CHAMPION_WALLACE, .trainerName = _("WALLACE"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wallace), - .party = {.ItemCustomMoves = sParty_Wallace}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Wallace), }, [TRAINER_ANDREW] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("ANDREW"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Andrew), - .party = {.NoItemDefaultMoves = sParty_Andrew}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Andrew), }, [TRAINER_IVAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("IVAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ivan), - .party = {.NoItemDefaultMoves = sParty_Ivan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ivan), }, [TRAINER_CLAUDE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("CLAUDE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Claude), - .party = {.NoItemDefaultMoves = sParty_Claude}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Claude), }, [TRAINER_ELLIOT_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("ELLIOT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Elliot1), - .party = {.NoItemDefaultMoves = sParty_Elliot1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot1), }, [TRAINER_NED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("NED"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ned), - .party = {.NoItemDefaultMoves = sParty_Ned}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ned), }, [TRAINER_DALE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("DALE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dale), - .party = {.NoItemDefaultMoves = sParty_Dale}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dale), }, [TRAINER_NOLAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("NOLAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nolan), - .party = {.NoItemDefaultMoves = sParty_Nolan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nolan), }, [TRAINER_BARNY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("BARNY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Barny), - .party = {.NoItemDefaultMoves = sParty_Barny}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Barny), }, [TRAINER_WADE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("WADE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Wade), - .party = {.NoItemDefaultMoves = sParty_Wade}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Wade), }, [TRAINER_CARTER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("CARTER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Carter), - .party = {.NoItemDefaultMoves = sParty_Carter}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Carter), }, [TRAINER_ELLIOT_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("ELLIOT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Elliot2), - .party = {.NoItemDefaultMoves = sParty_Elliot2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot2), }, [TRAINER_ELLIOT_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("ELLIOT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Elliot3), - .party = {.NoItemDefaultMoves = sParty_Elliot3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot3), }, [TRAINER_ELLIOT_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("ELLIOT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Elliot4), - .party = {.NoItemDefaultMoves = sParty_Elliot4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot4), }, [TRAINER_ELLIOT_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("ELLIOT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = ARRAY_COUNT(sParty_Elliot5), - .party = {.NoItemDefaultMoves = sParty_Elliot5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot5), }, [TRAINER_RONALD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("RONALD"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ronald), - .party = {.NoItemDefaultMoves = sParty_Ronald}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ronald), }, [TRAINER_JACOB] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .trainerName = _("JACOB"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jacob), - .party = {.NoItemDefaultMoves = sParty_Jacob}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacob), }, [TRAINER_ANTHONY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .trainerName = _("ANTHONY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Anthony), - .party = {.NoItemDefaultMoves = sParty_Anthony}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Anthony), }, [TRAINER_BENJAMIN_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .trainerName = _("BENJAMIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Benjamin1), - .party = {.NoItemDefaultMoves = sParty_Benjamin1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin1), }, [TRAINER_BENJAMIN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .trainerName = _("BENJAMIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Benjamin2), - .party = {.NoItemDefaultMoves = sParty_Benjamin2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin2), }, [TRAINER_BENJAMIN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .trainerName = _("BENJAMIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Benjamin3), - .party = {.NoItemDefaultMoves = sParty_Benjamin3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin3), }, [TRAINER_BENJAMIN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .trainerName = _("BENJAMIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Benjamin4), - .party = {.NoItemDefaultMoves = sParty_Benjamin4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin4), }, [TRAINER_BENJAMIN_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .trainerName = _("BENJAMIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Benjamin5), - .party = {.NoItemDefaultMoves = sParty_Benjamin5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin5), }, [TRAINER_ABIGAIL_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .trainerName = _("ABIGAIL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Abigail1), - .party = {.NoItemDefaultMoves = sParty_Abigail1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail1), }, [TRAINER_JASMINE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .trainerName = _("JASMINE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jasmine), - .party = {.NoItemDefaultMoves = sParty_Jasmine}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jasmine), }, [TRAINER_ABIGAIL_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .trainerName = _("ABIGAIL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Abigail2), - .party = {.NoItemDefaultMoves = sParty_Abigail2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail2), }, [TRAINER_ABIGAIL_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .trainerName = _("ABIGAIL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Abigail3), - .party = {.NoItemDefaultMoves = sParty_Abigail3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail3), }, [TRAINER_ABIGAIL_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .trainerName = _("ABIGAIL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Abigail4), - .party = {.NoItemDefaultMoves = sParty_Abigail4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail4), }, [TRAINER_ABIGAIL_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .trainerName = _("ABIGAIL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Abigail5), - .party = {.NoItemDefaultMoves = sParty_Abigail5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail5), }, [TRAINER_DYLAN_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .trainerName = _("DYLAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dylan1), - .party = {.NoItemDefaultMoves = sParty_Dylan1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan1), }, [TRAINER_DYLAN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .trainerName = _("DYLAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dylan2), - .party = {.NoItemDefaultMoves = sParty_Dylan2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan2), }, [TRAINER_DYLAN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .trainerName = _("DYLAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dylan3), - .party = {.NoItemDefaultMoves = sParty_Dylan3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan3), }, [TRAINER_DYLAN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .trainerName = _("DYLAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dylan4), - .party = {.NoItemDefaultMoves = sParty_Dylan4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan4), }, [TRAINER_DYLAN_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .trainerName = _("DYLAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dylan5), - .party = {.NoItemDefaultMoves = sParty_Dylan5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan5), }, [TRAINER_MARIA_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .trainerName = _("MARIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Maria1), - .party = {.NoItemDefaultMoves = sParty_Maria1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria1), }, [TRAINER_MARIA_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .trainerName = _("MARIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Maria2), - .party = {.NoItemDefaultMoves = sParty_Maria2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria2), }, [TRAINER_MARIA_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .trainerName = _("MARIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Maria3), - .party = {.NoItemDefaultMoves = sParty_Maria3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria3), }, [TRAINER_MARIA_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .trainerName = _("MARIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Maria4), - .party = {.NoItemDefaultMoves = sParty_Maria4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria4), }, [TRAINER_MARIA_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .trainerName = _("MARIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Maria5), - .party = {.NoItemDefaultMoves = sParty_Maria5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria5), }, [TRAINER_CAMDEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("CAMDEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Camden), - .party = {.NoItemDefaultMoves = sParty_Camden}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Camden), }, [TRAINER_DEMETRIUS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("DEMETRIUS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Demetrius), - .party = {.NoItemDefaultMoves = sParty_Demetrius}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Demetrius), }, [TRAINER_ISAIAH_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("ISAIAH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isaiah1), - .party = {.NoItemDefaultMoves = sParty_Isaiah1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah1), }, [TRAINER_PABLO_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("PABLO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Pablo1), - .party = {.NoItemDefaultMoves = sParty_Pablo1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo1), }, [TRAINER_CHASE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("CHASE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Chase), - .party = {.NoItemDefaultMoves = sParty_Chase}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Chase), }, [TRAINER_ISAIAH_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("ISAIAH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isaiah2), - .party = {.NoItemDefaultMoves = sParty_Isaiah2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah2), }, [TRAINER_ISAIAH_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("ISAIAH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isaiah3), - .party = {.NoItemDefaultMoves = sParty_Isaiah3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah3), }, [TRAINER_ISAIAH_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("ISAIAH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isaiah4), - .party = {.NoItemDefaultMoves = sParty_Isaiah4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah4), }, [TRAINER_ISAIAH_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("ISAIAH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isaiah5), - .party = {.NoItemDefaultMoves = sParty_Isaiah5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah5), }, [TRAINER_ISOBEL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .trainerName = _("ISOBEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isobel), - .party = {.NoItemDefaultMoves = sParty_Isobel}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isobel), }, [TRAINER_DONNY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .trainerName = _("DONNY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Donny), - .party = {.NoItemDefaultMoves = sParty_Donny}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Donny), }, [TRAINER_TALIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .trainerName = _("TALIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Talia), - .party = {.NoItemDefaultMoves = sParty_Talia}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Talia), }, [TRAINER_KATELYN_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .trainerName = _("KATELYN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Katelyn1), - .party = {.NoItemDefaultMoves = sParty_Katelyn1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn1), }, [TRAINER_ALLISON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .trainerName = _("ALLISON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Allison), - .party = {.NoItemDefaultMoves = sParty_Allison}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Allison), }, [TRAINER_KATELYN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .trainerName = _("KATELYN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Katelyn2), - .party = {.NoItemDefaultMoves = sParty_Katelyn2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn2), }, [TRAINER_KATELYN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .trainerName = _("KATELYN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Katelyn3), - .party = {.NoItemDefaultMoves = sParty_Katelyn3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn3), }, [TRAINER_KATELYN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .trainerName = _("KATELYN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Katelyn4), - .party = {.NoItemDefaultMoves = sParty_Katelyn4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn4), }, [TRAINER_KATELYN_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .trainerName = _("KATELYN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Katelyn5), - .party = {.NoItemDefaultMoves = sParty_Katelyn5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn5), }, [TRAINER_NICOLAS_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_DRAGON_TAMER, .trainerName = _("NICOLAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nicolas1), - .party = {.NoItemDefaultMoves = sParty_Nicolas1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas1), }, [TRAINER_NICOLAS_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_DRAGON_TAMER, .trainerName = _("NICOLAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nicolas2), - .party = {.NoItemDefaultMoves = sParty_Nicolas2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas2), }, [TRAINER_NICOLAS_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_DRAGON_TAMER, .trainerName = _("NICOLAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nicolas3), - .party = {.NoItemDefaultMoves = sParty_Nicolas3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas3), }, [TRAINER_NICOLAS_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_DRAGON_TAMER, .trainerName = _("NICOLAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nicolas4), - .party = {.NoItemDefaultMoves = sParty_Nicolas4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas4), }, [TRAINER_NICOLAS_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_DRAGON_TAMER, .trainerName = _("NICOLAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nicolas5), - .party = {.ItemDefaultMoves = sParty_Nicolas5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Nicolas5), }, [TRAINER_AARON] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_DRAGON_TAMER, .trainerName = _("AARON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Aaron), - .party = {.NoItemCustomMoves = sParty_Aaron}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Aaron), }, [TRAINER_PERRY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("PERRY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Perry), - .party = {.NoItemDefaultMoves = sParty_Perry}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Perry), }, [TRAINER_HUGH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("HUGH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Hugh), - .party = {.NoItemDefaultMoves = sParty_Hugh}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Hugh), }, [TRAINER_PHIL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("PHIL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Phil), - .party = {.NoItemDefaultMoves = sParty_Phil}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Phil), }, [TRAINER_JARED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("JARED"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jared), - .party = {.NoItemDefaultMoves = sParty_Jared}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jared), }, [TRAINER_HUMBERTO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("HUMBERTO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Humberto), - .party = {.NoItemDefaultMoves = sParty_Humberto}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Humberto), }, [TRAINER_PRESLEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("PRESLEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Presley), - .party = {.NoItemDefaultMoves = sParty_Presley}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Presley), }, [TRAINER_EDWARDO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("EDWARDO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Edwardo), - .party = {.NoItemDefaultMoves = sParty_Edwardo}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwardo), }, [TRAINER_COLIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("COLIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Colin), - .party = {.NoItemDefaultMoves = sParty_Colin}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Colin), }, [TRAINER_ROBERT_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("ROBERT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Robert1), - .party = {.NoItemDefaultMoves = sParty_Robert1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert1), }, [TRAINER_BENNY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("BENNY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Benny), - .party = {.NoItemDefaultMoves = sParty_Benny}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Benny), }, [TRAINER_CHESTER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("CHESTER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Chester), - .party = {.NoItemDefaultMoves = sParty_Chester}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Chester), }, [TRAINER_ROBERT_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("ROBERT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Robert2), - .party = {.NoItemDefaultMoves = sParty_Robert2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert2), }, [TRAINER_ROBERT_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("ROBERT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Robert3), - .party = {.NoItemDefaultMoves = sParty_Robert3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert3), }, [TRAINER_ROBERT_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("ROBERT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Robert4), - .party = {.NoItemDefaultMoves = sParty_Robert4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert4), }, [TRAINER_ROBERT_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("ROBERT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Robert5), - .party = {.NoItemDefaultMoves = sParty_Robert5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert5), }, [TRAINER_ALEX] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("ALEX"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Alex), - .party = {.NoItemDefaultMoves = sParty_Alex}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Alex), }, [TRAINER_BECK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("BECK"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Beck), - .party = {.NoItemDefaultMoves = sParty_Beck}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Beck), }, [TRAINER_YASU] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, .trainerName = _("YASU"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = ARRAY_COUNT(sParty_Yasu), - .party = {.NoItemDefaultMoves = sParty_Yasu}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Yasu), }, [TRAINER_TAKASHI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, .trainerName = _("TAKASHI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = ARRAY_COUNT(sParty_Takashi), - .party = {.NoItemDefaultMoves = sParty_Takashi}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Takashi), }, [TRAINER_DIANNE] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, @@ -5847,13 +5014,11 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Dianne), - .party = {.ItemCustomMoves = sParty_Dianne}, + .party = ITEM_CUSTOM_MOVES(sParty_Dianne), }, [TRAINER_JANI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, @@ -5861,13 +5026,11 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Jani), - .party = {.NoItemDefaultMoves = sParty_Jani}, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jani), }, [TRAINER_LAO_1] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, @@ -5875,13 +5038,11 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Lao1), - .party = {.NoItemCustomMoves = sParty_Lao1}, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao1), }, [TRAINER_LUNG] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, @@ -5889,13 +5050,11 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Lung), - .party = {.NoItemDefaultMoves = sParty_Lung}, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lung), }, [TRAINER_LAO_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, @@ -5903,13 +5062,11 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Lao2), - .party = {.NoItemCustomMoves = sParty_Lao2}, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao2), }, [TRAINER_LAO_3] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, @@ -5917,13 +5074,11 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Lao3), - .party = {.NoItemCustomMoves = sParty_Lao3}, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao3), }, [TRAINER_LAO_4] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, @@ -5931,13 +5086,11 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Lao4), - .party = {.NoItemCustomMoves = sParty_Lao4}, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao4), }, [TRAINER_LAO_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, @@ -5945,5935 +5098,5087 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Lao5), - .party = {.ItemCustomMoves = sParty_Lao5}, + .party = ITEM_CUSTOM_MOVES(sParty_Lao5), }, [TRAINER_JOCELYN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("JOCELYN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jocelyn), - .party = {.NoItemDefaultMoves = sParty_Jocelyn}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jocelyn), }, [TRAINER_LAURA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("LAURA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Laura), - .party = {.NoItemDefaultMoves = sParty_Laura}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Laura), }, [TRAINER_CYNDY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("CYNDY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cyndy1), - .party = {.NoItemDefaultMoves = sParty_Cyndy1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy1), }, [TRAINER_CORA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("CORA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cora), - .party = {.NoItemDefaultMoves = sParty_Cora}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cora), }, [TRAINER_PAULA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("PAULA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Paula), - .party = {.NoItemDefaultMoves = sParty_Paula}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Paula), }, [TRAINER_CYNDY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("CYNDY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cyndy2), - .party = {.NoItemDefaultMoves = sParty_Cyndy2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy2), }, [TRAINER_CYNDY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("CYNDY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cyndy3), - .party = {.NoItemDefaultMoves = sParty_Cyndy3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy3), }, [TRAINER_CYNDY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("CYNDY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cyndy4), - .party = {.NoItemDefaultMoves = sParty_Cyndy4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy4), }, [TRAINER_CYNDY_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("CYNDY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cyndy5), - .party = {.NoItemDefaultMoves = sParty_Cyndy5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy5), }, [TRAINER_MADELINE_1] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PARASOL_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PARASOL_LADY, .trainerName = _("MADELINE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Madeline1), - .party = {.NoItemCustomMoves = sParty_Madeline1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline1), }, [TRAINER_CLARISSA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PARASOL_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PARASOL_LADY, .trainerName = _("CLARISSA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Clarissa), - .party = {.NoItemDefaultMoves = sParty_Clarissa}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Clarissa), }, [TRAINER_ANGELICA] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PARASOL_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PARASOL_LADY, .trainerName = _("ANGELICA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Angelica), - .party = {.NoItemCustomMoves = sParty_Angelica}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Angelica), }, [TRAINER_MADELINE_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PARASOL_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PARASOL_LADY, .trainerName = _("MADELINE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Madeline2), - .party = {.NoItemCustomMoves = sParty_Madeline2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline2), }, [TRAINER_MADELINE_3] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PARASOL_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PARASOL_LADY, .trainerName = _("MADELINE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Madeline3), - .party = {.NoItemCustomMoves = sParty_Madeline3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline3), }, [TRAINER_MADELINE_4] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PARASOL_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PARASOL_LADY, .trainerName = _("MADELINE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Madeline4), - .party = {.NoItemCustomMoves = sParty_Madeline4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline4), }, [TRAINER_MADELINE_5] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PARASOL_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PARASOL_LADY, .trainerName = _("MADELINE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Madeline5), - .party = {.NoItemCustomMoves = sParty_Madeline5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline5), }, [TRAINER_BEVERLY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("BEVERLY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Beverly), - .party = {.NoItemDefaultMoves = sParty_Beverly}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Beverly), }, [TRAINER_IMANI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("IMANI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Imani), - .party = {.NoItemDefaultMoves = sParty_Imani}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Imani), }, [TRAINER_KYLA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("KYLA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kyla), - .party = {.NoItemDefaultMoves = sParty_Kyla}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kyla), }, [TRAINER_DENISE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("DENISE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Denise), - .party = {.NoItemDefaultMoves = sParty_Denise}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Denise), }, [TRAINER_BETH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("BETH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Beth), - .party = {.NoItemDefaultMoves = sParty_Beth}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Beth), }, [TRAINER_TARA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("TARA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tara), - .party = {.NoItemDefaultMoves = sParty_Tara}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tara), }, [TRAINER_MISSY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("MISSY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Missy), - .party = {.NoItemDefaultMoves = sParty_Missy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Missy), }, [TRAINER_ALICE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("ALICE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Alice), - .party = {.NoItemDefaultMoves = sParty_Alice}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Alice), }, [TRAINER_JENNY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("JENNY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jenny1), - .party = {.NoItemDefaultMoves = sParty_Jenny1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny1), }, [TRAINER_GRACE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("GRACE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Grace), - .party = {.NoItemDefaultMoves = sParty_Grace}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Grace), }, [TRAINER_TANYA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("TANYA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tanya), - .party = {.NoItemDefaultMoves = sParty_Tanya}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tanya), }, [TRAINER_SHARON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("SHARON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Sharon), - .party = {.NoItemDefaultMoves = sParty_Sharon}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sharon), }, [TRAINER_NIKKI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("NIKKI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nikki), - .party = {.NoItemDefaultMoves = sParty_Nikki}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nikki), }, [TRAINER_BRENDA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("BRENDA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Brenda), - .party = {.NoItemDefaultMoves = sParty_Brenda}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brenda), }, [TRAINER_KATIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("KATIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Katie), - .party = {.NoItemDefaultMoves = sParty_Katie}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Katie), }, [TRAINER_SUSIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("SUSIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Susie), - .party = {.NoItemDefaultMoves = sParty_Susie}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Susie), }, [TRAINER_KARA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("KARA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kara), - .party = {.NoItemDefaultMoves = sParty_Kara}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kara), }, [TRAINER_DANA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("DANA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dana), - .party = {.NoItemDefaultMoves = sParty_Dana}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dana), }, [TRAINER_SIENNA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("SIENNA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Sienna), - .party = {.NoItemDefaultMoves = sParty_Sienna}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sienna), }, [TRAINER_DEBRA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("DEBRA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Debra), - .party = {.NoItemDefaultMoves = sParty_Debra}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Debra), }, [TRAINER_LINDA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("LINDA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Linda), - .party = {.NoItemDefaultMoves = sParty_Linda}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Linda), }, [TRAINER_KAYLEE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("KAYLEE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kaylee), - .party = {.NoItemDefaultMoves = sParty_Kaylee}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kaylee), }, [TRAINER_LAUREL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("LAUREL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Laurel), - .party = {.NoItemDefaultMoves = sParty_Laurel}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Laurel), }, [TRAINER_CARLEE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("CARLEE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Carlee), - .party = {.NoItemDefaultMoves = sParty_Carlee}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Carlee), }, [TRAINER_JENNY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("JENNY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jenny2), - .party = {.NoItemDefaultMoves = sParty_Jenny2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny2), }, [TRAINER_JENNY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("JENNY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jenny3), - .party = {.NoItemDefaultMoves = sParty_Jenny3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny3), }, [TRAINER_JENNY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("JENNY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jenny4), - .party = {.NoItemDefaultMoves = sParty_Jenny4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny4), }, [TRAINER_JENNY_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("JENNY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jenny5), - .party = {.NoItemDefaultMoves = sParty_Jenny5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny5), }, [TRAINER_HEIDI] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("HEIDI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Heidi), - .party = {.NoItemCustomMoves = sParty_Heidi}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Heidi), }, [TRAINER_BECKY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("BECKY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Becky), - .party = {.NoItemCustomMoves = sParty_Becky}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Becky), }, [TRAINER_CAROL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("CAROL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Carol), - .party = {.NoItemDefaultMoves = sParty_Carol}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Carol), }, [TRAINER_NANCY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("NANCY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nancy), - .party = {.NoItemDefaultMoves = sParty_Nancy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nancy), }, [TRAINER_MARTHA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("MARTHA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Martha), - .party = {.NoItemDefaultMoves = sParty_Martha}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Martha), }, [TRAINER_DIANA_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("DIANA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Diana1), - .party = {.NoItemDefaultMoves = sParty_Diana1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana1), }, [TRAINER_CEDRIC] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("CEDRIC"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cedric), - .party = {.NoItemCustomMoves = sParty_Cedric}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Cedric), }, [TRAINER_IRENE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("IRENE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Irene), - .party = {.NoItemDefaultMoves = sParty_Irene}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Irene), }, [TRAINER_DIANA_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("DIANA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Diana2), - .party = {.NoItemDefaultMoves = sParty_Diana2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana2), }, [TRAINER_DIANA_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("DIANA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Diana3), - .party = {.NoItemDefaultMoves = sParty_Diana3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana3), }, [TRAINER_DIANA_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("DIANA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Diana4), - .party = {.NoItemDefaultMoves = sParty_Diana4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana4), }, [TRAINER_DIANA_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("DIANA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Diana5), - .party = {.NoItemDefaultMoves = sParty_Diana5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana5), }, [TRAINER_AMY_AND_LIV_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, .trainerName = _("AMY & LIV"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AmyAndLiv1), - .party = {.NoItemDefaultMoves = sParty_AmyAndLiv1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv1), }, [TRAINER_AMY_AND_LIV_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, .trainerName = _("AMY & LIV"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AmyAndLiv2), - .party = {.NoItemDefaultMoves = sParty_AmyAndLiv2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv2), }, [TRAINER_GINA_AND_MIA_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, .trainerName = _("GINA & MIA"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GinaAndMia1), - .party = {.NoItemDefaultMoves = sParty_GinaAndMia1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GinaAndMia1), }, [TRAINER_MIU_AND_YUKI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, .trainerName = _("MIU & YUKI"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_MiuAndYuki), - .party = {.NoItemDefaultMoves = sParty_MiuAndYuki}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MiuAndYuki), }, [TRAINER_AMY_AND_LIV_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, .trainerName = _("AMY & LIV"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AmyAndLiv3), - .party = {.NoItemDefaultMoves = sParty_AmyAndLiv3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv3), }, [TRAINER_GINA_AND_MIA_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, .trainerName = _("GINA & MIA"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GinaAndMia2), - .party = {.NoItemCustomMoves = sParty_GinaAndMia2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_GinaAndMia2), }, [TRAINER_AMY_AND_LIV_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, .trainerName = _("AMY & LIV"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AmyAndLiv4), - .party = {.NoItemDefaultMoves = sParty_AmyAndLiv4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv4), }, [TRAINER_AMY_AND_LIV_5] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, .trainerName = _("AMY & LIV"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AmyAndLiv5), - .party = {.NoItemCustomMoves = sParty_AmyAndLiv5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_AmyAndLiv5), }, [TRAINER_AMY_AND_LIV_6] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, .trainerName = _("AMY & LIV"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_AmyAndLiv6), - .party = {.NoItemCustomMoves = sParty_AmyAndLiv6}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_AmyAndLiv6), }, [TRAINER_HUEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("HUEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Huey), - .party = {.NoItemDefaultMoves = sParty_Huey}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Huey), }, [TRAINER_EDMOND] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("EDMOND"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Edmond), - .party = {.NoItemDefaultMoves = sParty_Edmond}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Edmond), }, [TRAINER_ERNEST_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("ERNEST"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ernest1), - .party = {.NoItemDefaultMoves = sParty_Ernest1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest1), }, [TRAINER_DWAYNE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("DWAYNE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dwayne), - .party = {.NoItemDefaultMoves = sParty_Dwayne}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dwayne), }, [TRAINER_PHILLIP] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("PHILLIP"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Phillip), - .party = {.NoItemDefaultMoves = sParty_Phillip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Phillip), }, [TRAINER_LEONARD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("LEONARD"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Leonard), - .party = {.NoItemDefaultMoves = sParty_Leonard}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Leonard), }, [TRAINER_DUNCAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("DUNCAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Duncan), - .party = {.NoItemDefaultMoves = sParty_Duncan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Duncan), }, [TRAINER_ERNEST_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("ERNEST"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ernest2), - .party = {.NoItemDefaultMoves = sParty_Ernest2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest2), }, [TRAINER_ERNEST_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("ERNEST"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ernest3), - .party = {.NoItemDefaultMoves = sParty_Ernest3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest3), }, [TRAINER_ERNEST_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("ERNEST"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ernest4), - .party = {.NoItemDefaultMoves = sParty_Ernest4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest4), }, [TRAINER_ERNEST_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("ERNEST"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ernest5), - .party = {.NoItemDefaultMoves = sParty_Ernest5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest5), }, [TRAINER_ELI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("ELI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Eli), - .party = {.NoItemDefaultMoves = sParty_Eli}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Eli), }, [TRAINER_ANNIKA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_F, .trainerName = _("ANNIKA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Annika), - .party = {.ItemCustomMoves = sParty_Annika}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_CUSTOM_MOVES(sParty_Annika), }, [TRAINER_JAZMYN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER_2, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("JAZMYN"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Jazmyn), - .party = {.NoItemDefaultMoves = sParty_Jazmyn}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jazmyn), }, [TRAINER_JONAS] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, .trainerName = _("JONAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Jonas), - .party = {.NoItemCustomMoves = sParty_Jonas}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Jonas), }, [TRAINER_KAYLEY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_PARASOL_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PARASOL_LADY, .trainerName = _("KAYLEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kayley), - .party = {.NoItemCustomMoves = sParty_Kayley}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Kayley), }, [TRAINER_AURON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_M, .trainerName = _("AURON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Auron), - .party = {.NoItemDefaultMoves = sParty_Auron}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Auron), }, [TRAINER_KELVIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("KELVIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kelvin), - .party = {.NoItemDefaultMoves = sParty_Kelvin}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kelvin), }, [TRAINER_MARLEY] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("MARLEY"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Marley), - .party = {.ItemCustomMoves = sParty_Marley}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Marley), }, [TRAINER_REYNA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("REYNA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Reyna), - .party = {.NoItemDefaultMoves = sParty_Reyna}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Reyna), }, [TRAINER_HUDSON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("HUDSON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Hudson), - .party = {.NoItemDefaultMoves = sParty_Hudson}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Hudson), }, [TRAINER_CONOR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_M, .trainerName = _("CONOR"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Conor), - .party = {.NoItemDefaultMoves = sParty_Conor}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Conor), }, [TRAINER_EDWIN_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COLLECTOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_COLLECTOR, .trainerName = _("EDWIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Edwin1), - .party = {.NoItemDefaultMoves = sParty_Edwin1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin1), }, [TRAINER_HECTOR] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COLLECTOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_COLLECTOR, .trainerName = _("HECTOR"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Hector), - .party = {.NoItemDefaultMoves = sParty_Hector}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Hector), }, [TRAINER_TABITHA_MOSSDEEP] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .trainerName = _("TABITHA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_TabithaMossdeep), - .party = {.NoItemDefaultMoves = sParty_TabithaMossdeep}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_TabithaMossdeep), }, [TRAINER_EDWIN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COLLECTOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_COLLECTOR, .trainerName = _("EDWIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Edwin2), - .party = {.NoItemDefaultMoves = sParty_Edwin2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin2), }, [TRAINER_EDWIN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COLLECTOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_COLLECTOR, .trainerName = _("EDWIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Edwin3), - .party = {.NoItemDefaultMoves = sParty_Edwin3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin3), }, [TRAINER_EDWIN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COLLECTOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_COLLECTOR, .trainerName = _("EDWIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Edwin4), - .party = {.NoItemDefaultMoves = sParty_Edwin4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin4), }, [TRAINER_EDWIN_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COLLECTOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_COLLECTOR, .trainerName = _("EDWIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Edwin5), - .party = {.NoItemDefaultMoves = sParty_Edwin5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin5), }, [TRAINER_WALLY_VR_1] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_WALLY, .trainerName = _("WALLY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_WallyVR1), - .party = {.NoItemCustomMoves = sParty_WallyVR1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR1), }, [TRAINER_BRENDAN_ROUTE_103_MUDKIP] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanRoute103Mudkip), - .party = {.NoItemDefaultMoves = sParty_BrendanRoute103Mudkip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute103Mudkip), }, [TRAINER_BRENDAN_ROUTE_110_MUDKIP] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanRoute110Mudkip), - .party = {.NoItemDefaultMoves = sParty_BrendanRoute110Mudkip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute110Mudkip), }, [TRAINER_BRENDAN_ROUTE_119_MUDKIP] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanRoute119Mudkip), - .party = {.NoItemDefaultMoves = sParty_BrendanRoute119Mudkip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute119Mudkip), }, [TRAINER_BRENDAN_ROUTE_103_TREECKO] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_BrendanRoute103Treecko), - .party = {.NoItemDefaultMoves = sParty_BrendanRoute103Treecko}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute103Treecko), }, [TRAINER_BRENDAN_ROUTE_110_TREECKO] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanRoute110Treecko), - .party = {.NoItemDefaultMoves = sParty_BrendanRoute110Treecko}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute110Treecko), }, [TRAINER_BRENDAN_ROUTE_119_TREECKO] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanRoute119Treecko), - .party = {.NoItemDefaultMoves = sParty_BrendanRoute119Treecko}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute119Treecko), }, [TRAINER_BRENDAN_ROUTE_103_TORCHIC] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanRoute103Torchic), - .party = {.NoItemDefaultMoves = sParty_BrendanRoute103Torchic}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute103Torchic), }, [TRAINER_BRENDAN_ROUTE_110_TORCHIC] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanRoute110Torchic), - .party = {.NoItemDefaultMoves = sParty_BrendanRoute110Torchic}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute110Torchic), }, [TRAINER_BRENDAN_ROUTE_119_TORCHIC] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanRoute119Torchic), - .party = {.NoItemDefaultMoves = sParty_BrendanRoute119Torchic}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute119Torchic), }, [TRAINER_MAY_ROUTE_103_MUDKIP] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRoute103Mudkip), - .party = {.NoItemDefaultMoves = sParty_MayRoute103Mudkip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute103Mudkip), }, [TRAINER_MAY_ROUTE_110_MUDKIP] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRoute110Mudkip), - .party = {.NoItemDefaultMoves = sParty_MayRoute110Mudkip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute110Mudkip), }, [TRAINER_MAY_ROUTE_119_MUDKIP] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRoute119Mudkip), - .party = {.NoItemDefaultMoves = sParty_MayRoute119Mudkip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute119Mudkip), }, [TRAINER_MAY_ROUTE_103_TREECKO] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRoute103Treecko), - .party = {.NoItemDefaultMoves = sParty_MayRoute103Treecko}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute103Treecko), }, [TRAINER_MAY_ROUTE_110_TREECKO] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRoute110Treecko), - .party = {.NoItemDefaultMoves = sParty_MayRoute110Treecko}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute110Treecko), }, [TRAINER_MAY_ROUTE_119_TREECKO] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRoute119Treecko), - .party = {.NoItemDefaultMoves = sParty_MayRoute119Treecko}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute119Treecko), }, [TRAINER_MAY_ROUTE_103_TORCHIC] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRoute103Torchic), - .party = {.NoItemDefaultMoves = sParty_MayRoute103Torchic}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute103Torchic), }, [TRAINER_MAY_ROUTE_110_TORCHIC] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRoute110Torchic), - .party = {.NoItemDefaultMoves = sParty_MayRoute110Torchic}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute110Torchic), }, [TRAINER_MAY_ROUTE_119_TORCHIC] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRoute119Torchic), - .party = {.NoItemDefaultMoves = sParty_MayRoute119Torchic}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute119Torchic), }, [TRAINER_ISAAC_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .trainerName = _("ISAAC"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isaac1), - .party = {.NoItemDefaultMoves = sParty_Isaac1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac1), }, [TRAINER_DAVIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("DAVIS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Davis), - .party = {.NoItemDefaultMoves = sParty_Davis}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Davis), }, [TRAINER_MITCHELL] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("MITCHELL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Mitchell), - .party = {.NoItemCustomMoves = sParty_Mitchell}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Mitchell), }, [TRAINER_ISAAC_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .trainerName = _("ISAAC"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isaac2), - .party = {.NoItemDefaultMoves = sParty_Isaac2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac2), }, [TRAINER_ISAAC_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .trainerName = _("ISAAC"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isaac3), - .party = {.NoItemDefaultMoves = sParty_Isaac3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac3), }, [TRAINER_ISAAC_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .trainerName = _("ISAAC"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isaac4), - .party = {.NoItemDefaultMoves = sParty_Isaac4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac4), }, [TRAINER_ISAAC_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .trainerName = _("ISAAC"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isaac5), - .party = {.NoItemDefaultMoves = sParty_Isaac5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac5), }, [TRAINER_LYDIA_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("LYDIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lydia1), - .party = {.NoItemDefaultMoves = sParty_Lydia1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia1), }, [TRAINER_HALLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("HALLE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Halle), - .party = {.NoItemDefaultMoves = sParty_Halle}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Halle), }, [TRAINER_GARRISON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("GARRISON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Garrison), - .party = {.NoItemDefaultMoves = sParty_Garrison}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Garrison), }, [TRAINER_LYDIA_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("LYDIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lydia2), - .party = {.NoItemDefaultMoves = sParty_Lydia2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia2), }, [TRAINER_LYDIA_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("LYDIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lydia3), - .party = {.NoItemDefaultMoves = sParty_Lydia3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia3), }, [TRAINER_LYDIA_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("LYDIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lydia4), - .party = {.NoItemDefaultMoves = sParty_Lydia4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia4), }, [TRAINER_LYDIA_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("LYDIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lydia5), - .party = {.NoItemDefaultMoves = sParty_Lydia5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia5), }, [TRAINER_JACKSON_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .trainerName = _("JACKSON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Jackson1), - .party = {.NoItemDefaultMoves = sParty_Jackson1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson1), }, [TRAINER_LORENZO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .trainerName = _("LORENZO"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Lorenzo), - .party = {.NoItemDefaultMoves = sParty_Lorenzo}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lorenzo), }, [TRAINER_SEBASTIAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .trainerName = _("SEBASTIAN"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Sebastian), - .party = {.NoItemDefaultMoves = sParty_Sebastian}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sebastian), }, [TRAINER_JACKSON_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .trainerName = _("JACKSON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Jackson2), - .party = {.NoItemDefaultMoves = sParty_Jackson2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson2), }, [TRAINER_JACKSON_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .trainerName = _("JACKSON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Jackson3), - .party = {.NoItemDefaultMoves = sParty_Jackson3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson3), }, [TRAINER_JACKSON_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .trainerName = _("JACKSON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Jackson4), - .party = {.NoItemDefaultMoves = sParty_Jackson4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson4), }, [TRAINER_JACKSON_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .trainerName = _("JACKSON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Jackson5), - .party = {.NoItemDefaultMoves = sParty_Jackson5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson5), }, [TRAINER_CATHERINE_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .trainerName = _("CATHERINE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Catherine1), - .party = {.NoItemDefaultMoves = sParty_Catherine1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine1), }, [TRAINER_JENNA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .trainerName = _("JENNA"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Jenna), - .party = {.NoItemDefaultMoves = sParty_Jenna}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenna), }, [TRAINER_SOPHIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .trainerName = _("SOPHIA"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Sophia), - .party = {.NoItemDefaultMoves = sParty_Sophia}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sophia), }, [TRAINER_CATHERINE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .trainerName = _("CATHERINE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Catherine2), - .party = {.NoItemDefaultMoves = sParty_Catherine2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine2), }, [TRAINER_CATHERINE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .trainerName = _("CATHERINE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Catherine3), - .party = {.NoItemDefaultMoves = sParty_Catherine3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine3), }, [TRAINER_CATHERINE_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .trainerName = _("CATHERINE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Catherine4), - .party = {.NoItemDefaultMoves = sParty_Catherine4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine4), }, [TRAINER_CATHERINE_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_RANGER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .trainerName = _("CATHERINE"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Catherine5), - .party = {.NoItemDefaultMoves = sParty_Catherine5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine5), }, [TRAINER_JULIO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .trainerName = _("JULIO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Julio), - .party = {.NoItemDefaultMoves = sParty_Julio}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Julio), }, [TRAINER_GRUNT_SEAFLOOR_CAVERN_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern5), - .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern5), }, [TRAINER_GRUNT_UNUSED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntUnused), - .party = {.NoItemDefaultMoves = sParty_GruntUnused}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntUnused), }, [TRAINER_GRUNT_MT_PYRE_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMtPyre4), - .party = {.NoItemDefaultMoves = sParty_GruntMtPyre4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre4), }, [TRAINER_GRUNT_JAGGED_PASS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntJaggedPass), - .party = {.NoItemDefaultMoves = sParty_GruntJaggedPass}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntJaggedPass), }, [TRAINER_MARC] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("MARC"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Marc), - .party = {.NoItemDefaultMoves = sParty_Marc}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Marc), }, [TRAINER_BRENDEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("BRENDEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Brenden), - .party = {.NoItemDefaultMoves = sParty_Brenden}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brenden), }, [TRAINER_LILITH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("LILITH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lilith), - .party = {.NoItemDefaultMoves = sParty_Lilith}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lilith), }, [TRAINER_CRISTIAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("CRISTIAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cristian), - .party = {.NoItemDefaultMoves = sParty_Cristian}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristian), }, [TRAINER_SYLVIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("SYLVIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Sylvia), - .party = {.NoItemDefaultMoves = sParty_Sylvia}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sylvia), }, [TRAINER_LEONARDO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("LEONARDO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Leonardo), - .party = {.NoItemDefaultMoves = sParty_Leonardo}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Leonardo), }, [TRAINER_ATHENA] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("ATHENA"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Athena), - .party = {.ItemCustomMoves = sParty_Athena}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Athena), }, [TRAINER_HARRISON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("HARRISON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Harrison), - .party = {.NoItemDefaultMoves = sParty_Harrison}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Harrison), }, [TRAINER_GRUNT_MT_CHIMNEY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMtChimney2), - .party = {.NoItemDefaultMoves = sParty_GruntMtChimney2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtChimney2), }, [TRAINER_CLARENCE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("CLARENCE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Clarence), - .party = {.NoItemDefaultMoves = sParty_Clarence}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Clarence), }, [TRAINER_TERRY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("TERRY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Terry), - .party = {.NoItemDefaultMoves = sParty_Terry}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Terry), }, [TRAINER_NATE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, .trainerName = _("NATE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nate), - .party = {.NoItemDefaultMoves = sParty_Nate}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nate), }, [TRAINER_KATHLEEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HEX_MANIAC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_HEX_MANIAC, .trainerName = _("KATHLEEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kathleen), - .party = {.NoItemDefaultMoves = sParty_Kathleen}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kathleen), }, [TRAINER_CLIFFORD] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, .trainerName = _("CLIFFORD"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Clifford), - .party = {.NoItemDefaultMoves = sParty_Clifford}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Clifford), }, [TRAINER_NICHOLAS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, .trainerName = _("NICHOLAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Nicholas), - .party = {.NoItemDefaultMoves = sParty_Nicholas}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicholas), }, [TRAINER_GRUNT_SPACE_CENTER_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter3), - .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter3), }, [TRAINER_GRUNT_SPACE_CENTER_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter4), - .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter4), }, [TRAINER_GRUNT_SPACE_CENTER_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter5), - .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter5), }, [TRAINER_GRUNT_SPACE_CENTER_6] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter6), - .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter6}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter6), }, [TRAINER_GRUNT_SPACE_CENTER_7] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter7), - .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter7}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter7), }, [TRAINER_MACEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("MACEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Macey), - .party = {.NoItemDefaultMoves = sParty_Macey}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Macey), }, [TRAINER_BRENDAN_RUSTBORO_TREECKO] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_BrendanRustboroTreecko), - .party = {.NoItemDefaultMoves = sParty_BrendanRustboroTreecko}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRustboroTreecko), }, [TRAINER_BRENDAN_RUSTBORO_MUDKIP] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_BrendanRustboroMudkip), - .party = {.NoItemDefaultMoves = sParty_BrendanRustboroMudkip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRustboroMudkip), }, [TRAINER_PAXTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_M, .trainerName = _("PAXTON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Paxton), - .party = {.NoItemDefaultMoves = sParty_Paxton}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Paxton), }, [TRAINER_ISABELLA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .trainerName = _("ISABELLA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isabella), - .party = {.NoItemDefaultMoves = sParty_Isabella}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isabella), }, [TRAINER_GRUNT_WEATHER_INST_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_AQUA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA, .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntWeatherInst5), - .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst5), }, [TRAINER_TABITHA_MT_CHIMNEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .trainerName = _("TABITHA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_TabithaMtChimney), - .party = {.NoItemDefaultMoves = sParty_TabithaMtChimney}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_TabithaMtChimney), }, [TRAINER_JONATHAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("JONATHAN"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_Jonathan), - .party = {.NoItemDefaultMoves = sParty_Jonathan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jonathan), }, [TRAINER_BRENDAN_RUSTBORO_TORCHIC] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanRustboroTorchic), - .party = {.NoItemDefaultMoves = sParty_BrendanRustboroTorchic}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRustboroTorchic), }, [TRAINER_MAY_RUSTBORO_MUDKIP] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_MayRustboroMudkip), - .party = {.NoItemDefaultMoves = sParty_MayRustboroMudkip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRustboroMudkip), }, [TRAINER_MAXIE_MAGMA_HIDEOUT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_MAGMA_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .trainerName = _("MAXIE"), .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MaxieMagmaHideout), - .party = {.NoItemDefaultMoves = sParty_MaxieMagmaHideout}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MaxieMagmaHideout), }, [TRAINER_MAXIE_MT_CHIMNEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_MAGMA_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .trainerName = _("MAXIE"), .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MaxieMtChimney), - .party = {.NoItemDefaultMoves = sParty_MaxieMtChimney}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MaxieMtChimney), }, [TRAINER_TIANA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("TIANA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tiana), - .party = {.NoItemDefaultMoves = sParty_Tiana}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tiana), }, [TRAINER_HALEY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("HALEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Haley1), - .party = {.NoItemDefaultMoves = sParty_Haley1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley1), }, [TRAINER_JANICE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("JANICE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Janice), - .party = {.NoItemDefaultMoves = sParty_Janice}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Janice), }, [TRAINER_VIVI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_WINSTRATE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("VIVI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Vivi), - .party = {.NoItemDefaultMoves = sParty_Vivi}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Vivi), }, [TRAINER_HALEY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("HALEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Haley2), - .party = {.NoItemDefaultMoves = sParty_Haley2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley2), }, [TRAINER_HALEY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("HALEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Haley3), - .party = {.NoItemDefaultMoves = sParty_Haley3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley3), }, [TRAINER_HALEY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("HALEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Haley4), - .party = {.NoItemDefaultMoves = sParty_Haley4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley4), }, [TRAINER_HALEY_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("HALEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Haley5), - .party = {.NoItemDefaultMoves = sParty_Haley5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley5), }, [TRAINER_SALLY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("SALLY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Sally), - .party = {.NoItemDefaultMoves = sParty_Sally}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sally), }, [TRAINER_ROBIN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("ROBIN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Robin), - .party = {.NoItemDefaultMoves = sParty_Robin}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Robin), }, [TRAINER_ANDREA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("ANDREA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Andrea), - .party = {.NoItemDefaultMoves = sParty_Andrea}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Andrea), }, [TRAINER_CRISSY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_LASS, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LASS, .trainerName = _("CRISSY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Crissy), - .party = {.NoItemDefaultMoves = sParty_Crissy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Crissy), }, [TRAINER_RICK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("RICK"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Rick), - .party = {.NoItemDefaultMoves = sParty_Rick}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Rick), }, [TRAINER_LYLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("LYLE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lyle), - .party = {.NoItemDefaultMoves = sParty_Lyle}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lyle), }, [TRAINER_JOSE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("JOSE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jose), - .party = {.NoItemDefaultMoves = sParty_Jose}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jose), }, [TRAINER_DOUG] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("DOUG"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Doug), - .party = {.NoItemDefaultMoves = sParty_Doug}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Doug), }, [TRAINER_GREG] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("GREG"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Greg), - .party = {.NoItemDefaultMoves = sParty_Greg}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Greg), }, [TRAINER_KENT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("KENT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kent), - .party = {.NoItemDefaultMoves = sParty_Kent}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kent), }, [TRAINER_JAMES_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("JAMES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_James1), - .party = {.NoItemDefaultMoves = sParty_James1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_James1), }, [TRAINER_JAMES_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("JAMES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_James2), - .party = {.NoItemDefaultMoves = sParty_James2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_James2), }, [TRAINER_JAMES_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("JAMES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_James3), - .party = {.NoItemDefaultMoves = sParty_James3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_James3), }, [TRAINER_JAMES_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("JAMES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_James4), - .party = {.NoItemDefaultMoves = sParty_James4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_James4), }, [TRAINER_JAMES_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_CATCHER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BUG_CATCHER, .trainerName = _("JAMES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_James5), - .party = {.NoItemDefaultMoves = sParty_James5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_James5), }, [TRAINER_BRICE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("BRICE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Brice), - .party = {.NoItemDefaultMoves = sParty_Brice}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brice), }, [TRAINER_TRENT_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("TRENT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Trent1), - .party = {.NoItemDefaultMoves = sParty_Trent1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent1), }, [TRAINER_LENNY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("LENNY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lenny), - .party = {.NoItemDefaultMoves = sParty_Lenny}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lenny), }, [TRAINER_LUCAS_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("LUCAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lucas1), - .party = {.NoItemDefaultMoves = sParty_Lucas1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lucas1), }, [TRAINER_ALAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("ALAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Alan), - .party = {.NoItemDefaultMoves = sParty_Alan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Alan), }, [TRAINER_CLARK] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("CLARK"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Clark), - .party = {.NoItemDefaultMoves = sParty_Clark}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Clark), }, [TRAINER_ERIC] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("ERIC"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Eric), - .party = {.NoItemDefaultMoves = sParty_Eric}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Eric), }, [TRAINER_LUCAS_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("LUCAS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lucas2), - .party = {.NoItemCustomMoves = sParty_Lucas2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Lucas2), }, [TRAINER_MIKE_1] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("MIKE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Mike1), - .party = {.NoItemCustomMoves = sParty_Mike1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Mike1), }, [TRAINER_MIKE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("MIKE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Mike2), - .party = {.NoItemDefaultMoves = sParty_Mike2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Mike2), }, [TRAINER_TRENT_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("TRENT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Trent2), - .party = {.NoItemDefaultMoves = sParty_Trent2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent2), }, [TRAINER_TRENT_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("TRENT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Trent3), - .party = {.NoItemDefaultMoves = sParty_Trent3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent3), }, [TRAINER_TRENT_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("TRENT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Trent4), - .party = {.NoItemDefaultMoves = sParty_Trent4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent4), }, [TRAINER_TRENT_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("TRENT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Trent5), - .party = {.NoItemDefaultMoves = sParty_Trent5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent5), }, [TRAINER_DEZ_AND_LUKE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .trainerName = _("DEZ & LUKE"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_DezAndLuke), - .party = {.NoItemDefaultMoves = sParty_DezAndLuke}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_DezAndLuke), }, [TRAINER_LEA_AND_JED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .trainerName = _("LEA & JED"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_LeaAndJed), - .party = {.NoItemDefaultMoves = sParty_LeaAndJed}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaAndJed), }, [TRAINER_KIRA_AND_DAN_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .trainerName = _("KIRA & DAN"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_KiraAndDan1), - .party = {.NoItemDefaultMoves = sParty_KiraAndDan1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan1), }, [TRAINER_KIRA_AND_DAN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .trainerName = _("KIRA & DAN"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_KiraAndDan2), - .party = {.NoItemDefaultMoves = sParty_KiraAndDan2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan2), }, [TRAINER_KIRA_AND_DAN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .trainerName = _("KIRA & DAN"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_KiraAndDan3), - .party = {.NoItemDefaultMoves = sParty_KiraAndDan3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan3), }, [TRAINER_KIRA_AND_DAN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .trainerName = _("KIRA & DAN"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_KiraAndDan4), - .party = {.NoItemDefaultMoves = sParty_KiraAndDan4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan4), }, [TRAINER_KIRA_AND_DAN_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .trainerName = _("KIRA & DAN"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_KiraAndDan5), - .party = {.NoItemDefaultMoves = sParty_KiraAndDan5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan5), }, [TRAINER_JOHANNA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("JOHANNA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Johanna), - .party = {.NoItemDefaultMoves = sParty_Johanna}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Johanna), }, [TRAINER_GERALD] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("GERALD"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Gerald), - .party = {.NoItemCustomMoves = sParty_Gerald}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Gerald), }, [TRAINER_VIVIAN] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("VIVIAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Vivian), - .party = {.NoItemCustomMoves = sParty_Vivian}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Vivian), }, [TRAINER_DANIELLE] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("DANIELLE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Danielle), - .party = {.NoItemCustomMoves = sParty_Danielle}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Danielle), }, [TRAINER_HIDEO] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, .trainerName = _("HIDEO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = ARRAY_COUNT(sParty_Hideo), - .party = {.NoItemCustomMoves = sParty_Hideo}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Hideo), }, [TRAINER_KEIGO] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, .trainerName = _("KEIGO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = ARRAY_COUNT(sParty_Keigo), - .party = {.NoItemCustomMoves = sParty_Keigo}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Keigo), }, [TRAINER_RILEY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, .trainerName = _("RILEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = ARRAY_COUNT(sParty_Riley), - .party = {.NoItemCustomMoves = sParty_Riley}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Riley), }, [TRAINER_FLINT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("FLINT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Flint), - .party = {.NoItemDefaultMoves = sParty_Flint}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Flint), }, [TRAINER_ASHLEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("ASHLEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Ashley), - .party = {.NoItemDefaultMoves = sParty_Ashley}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ashley), }, [TRAINER_WALLY_MAUVILLE] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_WALLY, .trainerName = _("WALLY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_WallyMauville), - .party = {.NoItemDefaultMoves = sParty_WallyMauville}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_WallyMauville), }, [TRAINER_WALLY_VR_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_WALLY, .trainerName = _("WALLY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_WallyVR2), - .party = {.NoItemCustomMoves = sParty_WallyVR2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR2), }, [TRAINER_WALLY_VR_3] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_WALLY, .trainerName = _("WALLY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_WallyVR3), - .party = {.NoItemCustomMoves = sParty_WallyVR3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR3), }, [TRAINER_WALLY_VR_4] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_WALLY, .trainerName = _("WALLY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_WallyVR4), - .party = {.NoItemCustomMoves = sParty_WallyVR4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR4), }, [TRAINER_WALLY_VR_5] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_WALLY, .trainerName = _("WALLY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_WallyVR5), - .party = {.NoItemCustomMoves = sParty_WallyVR5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR5), }, [TRAINER_BRENDAN_LILYCOVE_MUDKIP] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanLilycoveMudkip), - .party = {.NoItemDefaultMoves = sParty_BrendanLilycoveMudkip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLilycoveMudkip), }, [TRAINER_BRENDAN_LILYCOVE_TREECKO] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanLilycoveTreecko), - .party = {.NoItemDefaultMoves = sParty_BrendanLilycoveTreecko}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLilycoveTreecko), }, [TRAINER_BRENDAN_LILYCOVE_TORCHIC] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_BrendanLilycoveTorchic), - .party = {.NoItemDefaultMoves = sParty_BrendanLilycoveTorchic}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLilycoveTorchic), }, [TRAINER_MAY_LILYCOVE_MUDKIP] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayLilycoveMudkip), - .party = {.NoItemDefaultMoves = sParty_MayLilycoveMudkip}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLilycoveMudkip), }, [TRAINER_MAY_LILYCOVE_TREECKO] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayLilycoveTreecko), - .party = {.NoItemDefaultMoves = sParty_MayLilycoveTreecko}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLilycoveTreecko), }, [TRAINER_MAY_LILYCOVE_TORCHIC] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayLilycoveTorchic), - .party = {.NoItemDefaultMoves = sParty_MayLilycoveTorchic}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLilycoveTorchic), }, [TRAINER_JONAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("JONAH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jonah), - .party = {.NoItemDefaultMoves = sParty_Jonah}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jonah), }, [TRAINER_HENRY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("HENRY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Henry), - .party = {.NoItemDefaultMoves = sParty_Henry}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Henry), }, [TRAINER_ROGER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("ROGER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Roger), - .party = {.NoItemDefaultMoves = sParty_Roger}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Roger), }, [TRAINER_ALEXA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("ALEXA"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Alexa), - .party = {.NoItemDefaultMoves = sParty_Alexa}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Alexa), }, [TRAINER_RUBEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("RUBEN"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Ruben), - .party = {.NoItemDefaultMoves = sParty_Ruben}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Ruben), }, [TRAINER_KOJI_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("KOJI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Koji1), - .party = {.NoItemDefaultMoves = sParty_Koji1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji1), }, [TRAINER_WAYNE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("WAYNE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Wayne), - .party = {.NoItemDefaultMoves = sParty_Wayne}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Wayne), }, [TRAINER_AIDAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("AIDAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Aidan), - .party = {.NoItemDefaultMoves = sParty_Aidan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Aidan), }, [TRAINER_REED] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("REED"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Reed), - .party = {.NoItemDefaultMoves = sParty_Reed}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Reed), }, [TRAINER_TISHA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("TISHA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tisha), - .party = {.NoItemDefaultMoves = sParty_Tisha}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tisha), }, [TRAINER_TORI_AND_TIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TWINS, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_TWINS, .trainerName = _("TORI & TIA"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_ToriAndTia), - .party = {.NoItemDefaultMoves = sParty_ToriAndTia}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_ToriAndTia), }, [TRAINER_KIM_AND_IRIS] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SR_AND_JR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_SR_AND_JR, .trainerName = _("KIM & IRIS"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_KimAndIris), - .party = {.NoItemCustomMoves = sParty_KimAndIris}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_KimAndIris), }, [TRAINER_TYRA_AND_IVY] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_SR_AND_JR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_SR_AND_JR, .trainerName = _("TYRA & IVY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_TyraAndIvy), - .party = {.NoItemCustomMoves = sParty_TyraAndIvy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_TyraAndIvy), }, [TRAINER_MEL_AND_PAUL] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .trainerName = _("MEL & PAUL"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_MelAndPaul), - .party = {.NoItemCustomMoves = sParty_MelAndPaul}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_CUSTOM_MOVES(sParty_MelAndPaul), }, [TRAINER_JOHN_AND_JAY_1] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_OLD_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_OLD_COUPLE, .trainerName = _("JOHN & JAY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_JohnAndJay1), - .party = {.NoItemCustomMoves = sParty_JohnAndJay1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay1), }, [TRAINER_JOHN_AND_JAY_2] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_OLD_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_OLD_COUPLE, .trainerName = _("JOHN & JAY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_JohnAndJay2), - .party = {.NoItemCustomMoves = sParty_JohnAndJay2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay2), }, [TRAINER_JOHN_AND_JAY_3] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_OLD_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_OLD_COUPLE, .trainerName = _("JOHN & JAY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_JohnAndJay3), - .party = {.NoItemCustomMoves = sParty_JohnAndJay3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay3), }, [TRAINER_JOHN_AND_JAY_4] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_OLD_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_OLD_COUPLE, .trainerName = _("JOHN & JAY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = ARRAY_COUNT(sParty_JohnAndJay4), - .party = {.NoItemCustomMoves = sParty_JohnAndJay4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay4), }, [TRAINER_JOHN_AND_JAY_5] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_OLD_COUPLE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_OLD_COUPLE, .trainerName = _("JOHN & JAY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_JohnAndJay5), - .party = {.NoItemCustomMoves = sParty_JohnAndJay5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay5), }, [TRAINER_RELI_AND_IAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, .trainerName = _("RELI & IAN"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_ReliAndIan), - .party = {.NoItemDefaultMoves = sParty_ReliAndIan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_ReliAndIan), }, [TRAINER_LILA_AND_ROY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, .trainerName = _("LILA & ROY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_LilaAndRoy1), - .party = {.NoItemDefaultMoves = sParty_LilaAndRoy1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy1), }, [TRAINER_LILA_AND_ROY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, .trainerName = _("LILA & ROY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_LilaAndRoy2), - .party = {.NoItemDefaultMoves = sParty_LilaAndRoy2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy2), }, [TRAINER_LILA_AND_ROY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, .trainerName = _("LILA & ROY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_LilaAndRoy3), - .party = {.NoItemDefaultMoves = sParty_LilaAndRoy3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy3), }, [TRAINER_LILA_AND_ROY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, .trainerName = _("LILA & ROY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_LilaAndRoy4), - .party = {.NoItemDefaultMoves = sParty_LilaAndRoy4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy4), }, [TRAINER_LILA_AND_ROY_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, .trainerName = _("LILA & ROY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_LilaAndRoy5), - .party = {.NoItemDefaultMoves = sParty_LilaAndRoy5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy5), }, [TRAINER_LISA_AND_RAY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SIS_AND_BRO, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SIS_AND_BRO, .trainerName = _("LISA & RAY"), .items = {}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_LisaAndRay), - .party = {.NoItemDefaultMoves = sParty_LisaAndRay}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_LisaAndRay), }, [TRAINER_CHRIS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("CHRIS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Chris), - .party = {.NoItemDefaultMoves = sParty_Chris}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Chris), }, [TRAINER_DAWSON] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_RICH_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_RICH_BOY, .trainerName = _("DAWSON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dawson), - .party = {.ItemDefaultMoves = sParty_Dawson}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Dawson), }, [TRAINER_SARAH] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LADY, .trainerName = _("SARAH"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Sarah), - .party = {.ItemDefaultMoves = sParty_Sarah}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Sarah), }, [TRAINER_DARIAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("DARIAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Darian), - .party = {.NoItemDefaultMoves = sParty_Darian}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Darian), }, [TRAINER_HAILEY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_F, .trainerName = _("HAILEY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Hailey), - .party = {.NoItemDefaultMoves = sParty_Hailey}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Hailey), }, [TRAINER_CHANDLER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TUBER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_TUBER_M, .trainerName = _("CHANDLER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Chandler), - .party = {.NoItemDefaultMoves = sParty_Chandler}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Chandler), }, [TRAINER_KALEB] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM, .trainerClass = TRAINER_CLASS_POKEFAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS, .trainerPic = TRAINER_PIC_POKEFAN_M, .trainerName = _("KALEB"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kaleb), - .party = {.ItemDefaultMoves = sParty_Kaleb}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Kaleb), }, [TRAINER_JOSEPH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("JOSEPH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Joseph), - .party = {.NoItemDefaultMoves = sParty_Joseph}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Joseph), }, [TRAINER_ALYSSA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .trainerName = _("ALYSSA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Alyssa), - .party = {.NoItemDefaultMoves = sParty_Alyssa}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Alyssa), }, [TRAINER_MARCOS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("MARCOS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Marcos), - .party = {.NoItemDefaultMoves = sParty_Marcos}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Marcos), }, [TRAINER_RHETT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("RHETT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Rhett), - .party = {.NoItemDefaultMoves = sParty_Rhett}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Rhett), }, [TRAINER_TYRON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("TYRON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Tyron), - .party = {.NoItemDefaultMoves = sParty_Tyron}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tyron), }, [TRAINER_CELINA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, .trainerName = _("CELINA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Celina), - .party = {.NoItemDefaultMoves = sParty_Celina}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Celina), }, [TRAINER_BIANCA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("BIANCA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Bianca), - .party = {.NoItemDefaultMoves = sParty_Bianca}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Bianca), }, [TRAINER_HAYDEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("HAYDEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Hayden), - .party = {.NoItemDefaultMoves = sParty_Hayden}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Hayden), }, [TRAINER_SOPHIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("SOPHIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Sophie), - .party = {.NoItemDefaultMoves = sParty_Sophie}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sophie), }, [TRAINER_COBY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("COBY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Coby), - .party = {.NoItemDefaultMoves = sParty_Coby}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Coby), }, [TRAINER_LAWRENCE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("LAWRENCE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Lawrence), - .party = {.NoItemDefaultMoves = sParty_Lawrence}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lawrence), }, [TRAINER_WYATT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_POKEMANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_POKEMANIAC, .trainerName = _("WYATT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Wyatt), - .party = {.NoItemDefaultMoves = sParty_Wyatt}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Wyatt), }, [TRAINER_ANGELINA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("ANGELINA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Angelina), - .party = {.NoItemDefaultMoves = sParty_Angelina}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Angelina), }, [TRAINER_KAI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FISHERMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_FISHERMAN, .trainerName = _("KAI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kai), - .party = {.NoItemDefaultMoves = sParty_Kai}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kai), }, [TRAINER_CHARLOTTE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("CHARLOTTE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Charlotte), - .party = {.NoItemDefaultMoves = sParty_Charlotte}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Charlotte), }, [TRAINER_DEANDRE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("DEANDRE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Deandre), - .party = {.NoItemDefaultMoves = sParty_Deandre}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Deandre), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout1), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout1), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout2), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout2), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout3), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout3), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout4), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout4), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout5), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout5), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_6] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout6), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout6}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout6), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_7] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout7), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout7}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout7), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_8] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout8), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout8}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout8), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_9] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout9), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout9}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout9), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_10] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout10), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout10}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout10), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_11] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout11), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout11}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout11), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_12] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout12), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout12}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout12), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_13] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout13), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout13}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout13), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_14] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout14), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout14}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout14), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_15] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout15), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout15}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout15), }, [TRAINER_GRUNT_MAGMA_HIDEOUT_16] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TEAM_MAGMA, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .trainerName = _("GRUNT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout16), - .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout16}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout16), }, [TRAINER_TABITHA_MAGMA_HIDEOUT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .trainerName = _("TABITHA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_TabithaMagmaHideout), - .party = {.NoItemDefaultMoves = sParty_TabithaMagmaHideout}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_TabithaMagmaHideout), }, [TRAINER_DARCY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("DARCY"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Darcy), - .party = {.NoItemDefaultMoves = sParty_Darcy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Darcy), }, [TRAINER_MAXIE_MOSSDEEP] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_MAGMA_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA, .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .trainerName = _("MAXIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MaxieMossdeep), - .party = {.NoItemDefaultMoves = sParty_MaxieMossdeep}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MaxieMossdeep), }, [TRAINER_PETE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_M, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_M, .trainerName = _("PETE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Pete), - .party = {.NoItemDefaultMoves = sParty_Pete}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Pete), }, [TRAINER_ISABELLE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SWIMMER_F, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMER_F, .trainerName = _("ISABELLE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Isabelle), - .party = {.NoItemDefaultMoves = sParty_Isabelle}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Isabelle), }, [TRAINER_ANDRES_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("ANDRES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Andres1), - .party = {.NoItemDefaultMoves = sParty_Andres1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres1), }, [TRAINER_JOSUE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("JOSUE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Josue), - .party = {.NoItemDefaultMoves = sParty_Josue}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Josue), }, [TRAINER_CAMRON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("CAMRON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Camron), - .party = {.NoItemDefaultMoves = sParty_Camron}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Camron), }, [TRAINER_CORY_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("CORY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cory1), - .party = {.NoItemDefaultMoves = sParty_Cory1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory1), }, [TRAINER_CAROLINA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("CAROLINA"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Carolina), - .party = {.NoItemDefaultMoves = sParty_Carolina}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Carolina), }, [TRAINER_ELIJAH] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("ELIJAH"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Elijah), - .party = {.NoItemDefaultMoves = sParty_Elijah}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Elijah), }, [TRAINER_CELIA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PICNICKER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL, .trainerPic = TRAINER_PIC_PICNICKER, .trainerName = _("CELIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Celia), - .party = {.NoItemDefaultMoves = sParty_Celia}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Celia), }, [TRAINER_BRYAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("BRYAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Bryan), - .party = {.NoItemDefaultMoves = sParty_Bryan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Bryan), }, [TRAINER_BRANDEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_CAMPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_CAMPER, .trainerName = _("BRANDEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Branden), - .party = {.NoItemDefaultMoves = sParty_Branden}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Branden), }, [TRAINER_BRYANT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("BRYANT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Bryant), - .party = {.NoItemDefaultMoves = sParty_Bryant}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Bryant), }, [TRAINER_SHAYLA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_AROMA_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_AROMA_LADY, .trainerName = _("SHAYLA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Shayla), - .party = {.NoItemDefaultMoves = sParty_Shayla}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Shayla), }, [TRAINER_KYRA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .trainerName = _("KYRA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Kyra), - .party = {.NoItemDefaultMoves = sParty_Kyra}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Kyra), }, [TRAINER_JAIDEN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_NINJA_BOY, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_NINJA_BOY, .trainerName = _("JAIDEN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Jaiden), - .party = {.NoItemDefaultMoves = sParty_Jaiden}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Jaiden), }, [TRAINER_ALIX] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("ALIX"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Alix), - .party = {.NoItemDefaultMoves = sParty_Alix}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Alix), }, [TRAINER_HELENE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("HELENE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Helene), - .party = {.NoItemDefaultMoves = sParty_Helene}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Helene), }, [TRAINER_MARLENE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("MARLENE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Marlene), - .party = {.NoItemDefaultMoves = sParty_Marlene}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Marlene), }, [TRAINER_DEVAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("DEVAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Devan), - .party = {.NoItemDefaultMoves = sParty_Devan}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Devan), }, [TRAINER_JOHNSON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_YOUNGSTER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_YOUNGSTER, .trainerName = _("JOHNSON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Johnson), - .party = {.NoItemDefaultMoves = sParty_Johnson}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Johnson), }, [TRAINER_MELINA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .trainerName = _("MELINA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Melina), - .party = {.NoItemDefaultMoves = sParty_Melina}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Melina), }, [TRAINER_BRANDI] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, .trainerName = _("BRANDI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Brandi), - .party = {.NoItemDefaultMoves = sParty_Brandi}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brandi), }, [TRAINER_AISHA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("AISHA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Aisha), - .party = {.NoItemDefaultMoves = sParty_Aisha}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Aisha), }, [TRAINER_MAKAYLA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_EXPERT, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_EXPERT_F, .trainerName = _("MAKAYLA"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Makayla), - .party = {.NoItemDefaultMoves = sParty_Makayla}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Makayla), }, [TRAINER_FABIAN] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("FABIAN"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Fabian), - .party = {.NoItemDefaultMoves = sParty_Fabian}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Fabian), }, [TRAINER_DAYTON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_KINDLER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_KINDLER, .trainerName = _("DAYTON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Dayton), - .party = {.NoItemDefaultMoves = sParty_Dayton}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Dayton), }, [TRAINER_RACHEL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PARASOL_LADY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_PARASOL_LADY, .trainerName = _("RACHEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Rachel), - .party = {.NoItemDefaultMoves = sParty_Rachel}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Rachel), }, [TRAINER_LEONEL] = { - .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_M, .trainerName = _("LEONEL"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Leonel), - .party = {.NoItemCustomMoves = sParty_Leonel}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_CUSTOM_MOVES(sParty_Leonel), }, [TRAINER_CALLIE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BATTLE_GIRL, .trainerName = _("CALLIE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Callie), - .party = {.NoItemDefaultMoves = sParty_Callie}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Callie), }, [TRAINER_CALE] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("CALE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cale), - .party = {.NoItemDefaultMoves = sParty_Cale}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cale), }, [TRAINER_MYLES] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .trainerName = _("MYLES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Myles), - .party = {.NoItemDefaultMoves = sParty_Myles}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Myles), }, [TRAINER_PAT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("PAT"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Pat), - .party = {.NoItemDefaultMoves = sParty_Pat}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Pat), }, [TRAINER_CRISTIN_1] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("CRISTIN"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Cristin1), - .party = {.NoItemDefaultMoves = sParty_Cristin1}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin1), }, [TRAINER_MAY_RUSTBORO_TREECKO] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRustboroTreecko), - .party = {.NoItemDefaultMoves = sParty_MayRustboroTreecko}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRustboroTreecko), }, [TRAINER_MAY_RUSTBORO_TORCHIC] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_MayRustboroTorchic), - .party = {.NoItemDefaultMoves = sParty_MayRustboroTorchic}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRustboroTorchic), }, [TRAINER_ROXANNE_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .trainerName = _("ROXANNE"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Roxanne2), - .party = {.ItemCustomMoves = sParty_Roxanne2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Roxanne2), }, [TRAINER_ROXANNE_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .trainerName = _("ROXANNE"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Roxanne3), - .party = {.ItemCustomMoves = sParty_Roxanne3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Roxanne3), }, [TRAINER_ROXANNE_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .trainerName = _("ROXANNE"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Roxanne4), - .party = {.ItemCustomMoves = sParty_Roxanne4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Roxanne4), }, [TRAINER_ROXANNE_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .trainerName = _("ROXANNE"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Roxanne5), - .party = {.ItemCustomMoves = sParty_Roxanne5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Roxanne5), }, [TRAINER_BRAWLY_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .trainerName = _("BRAWLY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brawly2), - .party = {.ItemCustomMoves = sParty_Brawly2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Brawly2), }, [TRAINER_BRAWLY_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .trainerName = _("BRAWLY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brawly3), - .party = {.ItemCustomMoves = sParty_Brawly3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Brawly3), }, [TRAINER_BRAWLY_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .trainerName = _("BRAWLY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brawly4), - .party = {.ItemCustomMoves = sParty_Brawly4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Brawly4), }, [TRAINER_BRAWLY_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .trainerName = _("BRAWLY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brawly5), - .party = {.ItemCustomMoves = sParty_Brawly5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Brawly5), }, [TRAINER_WATTSON_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_WATTSON, .trainerName = _("WATTSON"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wattson2), - .party = {.ItemCustomMoves = sParty_Wattson2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Wattson2), }, [TRAINER_WATTSON_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_WATTSON, .trainerName = _("WATTSON"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wattson3), - .party = {.ItemCustomMoves = sParty_Wattson3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Wattson3), }, [TRAINER_WATTSON_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_WATTSON, .trainerName = _("WATTSON"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wattson4), - .party = {.ItemCustomMoves = sParty_Wattson4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Wattson4), }, [TRAINER_WATTSON_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_WATTSON, .trainerName = _("WATTSON"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Wattson5), - .party = {.ItemCustomMoves = sParty_Wattson5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Wattson5), }, [TRAINER_FLANNERY_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .trainerName = _("FLANNERY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Flannery2), - .party = {.ItemCustomMoves = sParty_Flannery2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Flannery2), }, [TRAINER_FLANNERY_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .trainerName = _("FLANNERY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Flannery3), - .party = {.ItemCustomMoves = sParty_Flannery3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Flannery3), }, [TRAINER_FLANNERY_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .trainerName = _("FLANNERY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Flannery4), - .party = {.ItemCustomMoves = sParty_Flannery4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Flannery4), }, [TRAINER_FLANNERY_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .trainerName = _("FLANNERY"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Flannery5), - .party = {.ItemCustomMoves = sParty_Flannery5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Flannery5), }, [TRAINER_NORMAN_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_NORMAN, .trainerName = _("NORMAN"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Norman2), - .party = {.ItemCustomMoves = sParty_Norman2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Norman2), }, [TRAINER_NORMAN_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_NORMAN, .trainerName = _("NORMAN"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Norman3), - .party = {.ItemCustomMoves = sParty_Norman3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Norman3), }, [TRAINER_NORMAN_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_NORMAN, .trainerName = _("NORMAN"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Norman4), - .party = {.ItemCustomMoves = sParty_Norman4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Norman4), }, [TRAINER_NORMAN_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_NORMAN, .trainerName = _("NORMAN"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Norman5), - .party = {.ItemCustomMoves = sParty_Norman5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Norman5), }, [TRAINER_WINONA_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_WINONA, .trainerName = _("WINONA"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY, - .partySize = ARRAY_COUNT(sParty_Winona2), - .party = {.ItemCustomMoves = sParty_Winona2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, + .party = ITEM_CUSTOM_MOVES(sParty_Winona2), }, [TRAINER_WINONA_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_WINONA, .trainerName = _("WINONA"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY, - .partySize = ARRAY_COUNT(sParty_Winona3), - .party = {.ItemCustomMoves = sParty_Winona3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, + .party = ITEM_CUSTOM_MOVES(sParty_Winona3), }, [TRAINER_WINONA_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_WINONA, .trainerName = _("WINONA"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY, - .partySize = ARRAY_COUNT(sParty_Winona4), - .party = {.ItemCustomMoves = sParty_Winona4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, + .party = ITEM_CUSTOM_MOVES(sParty_Winona4), }, [TRAINER_WINONA_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_WINONA, .trainerName = _("WINONA"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY, - .partySize = ARRAY_COUNT(sParty_Winona5), - .party = {.ItemCustomMoves = sParty_Winona5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, + .party = ITEM_CUSTOM_MOVES(sParty_Winona5), }, [TRAINER_TATE_AND_LIZA_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .trainerName = _("TATE&LIZA"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_TateAndLiza2), - .party = {.ItemCustomMoves = sParty_TateAndLiza2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza2), }, [TRAINER_TATE_AND_LIZA_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .trainerName = _("TATE&LIZA"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_TateAndLiza3), - .party = {.ItemCustomMoves = sParty_TateAndLiza3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza3), }, [TRAINER_TATE_AND_LIZA_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .trainerName = _("TATE&LIZA"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_TateAndLiza4), - .party = {.ItemCustomMoves = sParty_TateAndLiza4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza4), }, [TRAINER_TATE_AND_LIZA_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .trainerName = _("TATE&LIZA"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_TateAndLiza5), - .party = {.ItemCustomMoves = sParty_TateAndLiza5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza5), }, [TRAINER_JUAN_2] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_JUAN, .trainerName = _("JUAN"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Juan2), - .party = {.ItemCustomMoves = sParty_Juan2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Juan2), }, [TRAINER_JUAN_3] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_JUAN, .trainerName = _("JUAN"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Juan3), - .party = {.ItemCustomMoves = sParty_Juan3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Juan3), }, [TRAINER_JUAN_4] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_JUAN, .trainerName = _("JUAN"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Juan4), - .party = {.ItemCustomMoves = sParty_Juan4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Juan4), }, [TRAINER_JUAN_5] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_LEADER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEADER_JUAN, .trainerName = _("JUAN"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Juan5), - .party = {.ItemCustomMoves = sParty_Juan5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Juan5), }, [TRAINER_ANGELO] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, .trainerClass = TRAINER_CLASS_BUG_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, .trainerPic = TRAINER_PIC_BUG_MANIAC, .trainerName = _("ANGELO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Angelo), - .party = {.ItemCustomMoves = sParty_Angelo}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Angelo), }, [TRAINER_DARIUS] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_BIRD_KEEPER, .trainerName = _("DARIUS"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Darius), - .party = {.NoItemDefaultMoves = sParty_Darius}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Darius), }, [TRAINER_STEVEN] = { - .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_STEVEN, .trainerName = _("STEVEN"), .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Steven), - .party = {.ItemCustomMoves = sParty_Steven}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = ITEM_CUSTOM_MOVES(sParty_Steven), }, [TRAINER_ANABEL] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SALON_MAIDEN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SALON_MAIDEN_ANABEL, .trainerName = _("ANABEL"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Anabel), - .party = {.NoItemDefaultMoves = sParty_Anabel}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Anabel), }, [TRAINER_TUCKER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_DOME_ACE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_DOME_ACE_TUCKER, .trainerName = _("TUCKER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Tucker), - .party = {.NoItemDefaultMoves = sParty_Tucker}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Tucker), }, [TRAINER_SPENSER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PALACE_MAVEN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_PALACE_MAVEN_SPENSER, .trainerName = _("SPENSER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Spenser), - .party = {.NoItemDefaultMoves = sParty_Spenser}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Spenser), }, [TRAINER_GRETA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_ARENA_TYCOON, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_ARENA_TYCOON_GRETA, .trainerName = _("GRETA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Greta), - .party = {.NoItemDefaultMoves = sParty_Greta}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Greta), }, [TRAINER_NOLAND] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_FACTORY_HEAD, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_FACTORY_HEAD_NOLAND, .trainerName = _("NOLAND"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Noland), - .party = {.NoItemDefaultMoves = sParty_Noland}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Noland), }, [TRAINER_LUCY] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PIKE_QUEEN, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_PIKE_QUEEN_LUCY, .trainerName = _("LUCY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Lucy), - .party = {.NoItemDefaultMoves = sParty_Lucy}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Lucy), }, [TRAINER_BRANDON] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PYRAMID_KING, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_PYRAMID_KING_BRANDON, .trainerName = _("BRANDON"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Brandon), - .party = {.NoItemDefaultMoves = sParty_Brandon}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Brandon), }, [TRAINER_ANDRES_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("ANDRES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Andres2), - .party = {.NoItemDefaultMoves = sParty_Andres2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres2), }, [TRAINER_ANDRES_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("ANDRES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Andres3), - .party = {.NoItemDefaultMoves = sParty_Andres3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres3), }, [TRAINER_ANDRES_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("ANDRES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Andres4), - .party = {.NoItemDefaultMoves = sParty_Andres4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres4), }, [TRAINER_ANDRES_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_RUIN_MANIAC, .trainerName = _("ANDRES"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Andres5), - .party = {.NoItemDefaultMoves = sParty_Andres5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres5), }, [TRAINER_CORY_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("CORY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cory2), - .party = {.NoItemDefaultMoves = sParty_Cory2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory2), }, [TRAINER_CORY_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("CORY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cory3), - .party = {.NoItemDefaultMoves = sParty_Cory3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory3), }, [TRAINER_CORY_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("CORY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cory4), - .party = {.NoItemDefaultMoves = sParty_Cory4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory4), }, [TRAINER_CORY_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_SAILOR, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_SAILOR, .trainerName = _("CORY"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Cory5), - .party = {.NoItemDefaultMoves = sParty_Cory5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory5), }, [TRAINER_PABLO_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("PABLO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Pablo2), - .party = {.NoItemDefaultMoves = sParty_Pablo2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo2), }, [TRAINER_PABLO_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("PABLO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Pablo3), - .party = {.NoItemDefaultMoves = sParty_Pablo3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo3), }, [TRAINER_PABLO_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("PABLO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Pablo4), - .party = {.NoItemDefaultMoves = sParty_Pablo4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo4), }, [TRAINER_PABLO_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_TRIATHLETE, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER, .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .trainerName = _("PABLO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Pablo5), - .party = {.NoItemDefaultMoves = sParty_Pablo5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo5), }, [TRAINER_KOJI_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("KOJI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Koji2), - .party = {.NoItemDefaultMoves = sParty_Koji2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji2), }, [TRAINER_KOJI_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("KOJI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Koji3), - .party = {.NoItemDefaultMoves = sParty_Koji3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji3), }, [TRAINER_KOJI_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("KOJI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Koji4), - .party = {.NoItemDefaultMoves = sParty_Koji4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji4), }, [TRAINER_KOJI_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BLACK_BELT, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_BLACK_BELT, .trainerName = _("KOJI"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Koji5), - .party = {.NoItemDefaultMoves = sParty_Koji5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji5), }, [TRAINER_CRISTIN_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("CRISTIN"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Cristin2), - .party = {.NoItemDefaultMoves = sParty_Cristin2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin2), }, [TRAINER_CRISTIN_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("CRISTIN"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Cristin3), - .party = {.NoItemDefaultMoves = sParty_Cristin3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin3), }, [TRAINER_CRISTIN_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("CRISTIN"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Cristin4), - .party = {.NoItemDefaultMoves = sParty_Cristin4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin4), }, [TRAINER_CRISTIN_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_COOLTRAINER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("CRISTIN"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Cristin5), - .party = {.NoItemDefaultMoves = sParty_Cristin5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin5), }, [TRAINER_FERNANDO_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("FERNANDO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Fernando2), - .party = {.NoItemDefaultMoves = sParty_Fernando2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando2), }, [TRAINER_FERNANDO_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("FERNANDO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Fernando3), - .party = {.NoItemDefaultMoves = sParty_Fernando3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando3), }, [TRAINER_FERNANDO_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("FERNANDO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Fernando4), - .party = {.NoItemDefaultMoves = sParty_Fernando4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando4), }, [TRAINER_FERNANDO_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GUITARIST, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_GUITARIST, .trainerName = _("FERNANDO"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Fernando5), - .party = {.NoItemDefaultMoves = sParty_Fernando5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando5), }, [TRAINER_SAWYER_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("SAWYER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Sawyer2), - .party = {.NoItemDefaultMoves = sParty_Sawyer2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer2), }, [TRAINER_SAWYER_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("SAWYER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Sawyer3), - .party = {.NoItemDefaultMoves = sParty_Sawyer3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer3), }, [TRAINER_SAWYER_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("SAWYER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Sawyer4), - .party = {.NoItemDefaultMoves = sParty_Sawyer4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer4), }, [TRAINER_SAWYER_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_HIKER, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER, .trainerPic = TRAINER_PIC_HIKER, .trainerName = _("SAWYER"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = ARRAY_COUNT(sParty_Sawyer5), - .party = {.NoItemDefaultMoves = sParty_Sawyer5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer5), }, [TRAINER_GABRIELLE_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("GABRIELLE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Gabrielle2), - .party = {.NoItemDefaultMoves = sParty_Gabrielle2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle2), }, [TRAINER_GABRIELLE_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("GABRIELLE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Gabrielle3), - .party = {.NoItemDefaultMoves = sParty_Gabrielle3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle3), }, [TRAINER_GABRIELLE_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("GABRIELLE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Gabrielle4), - .party = {.NoItemDefaultMoves = sParty_Gabrielle4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle4), }, [TRAINER_GABRIELLE_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PKMN_BREEDER, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .trainerName = _("GABRIELLE"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Gabrielle5), - .party = {.NoItemDefaultMoves = sParty_Gabrielle5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle5), }, [TRAINER_THALIA_2] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("THALIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Thalia2), - .party = {.NoItemDefaultMoves = sParty_Thalia2}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia2), }, [TRAINER_THALIA_3] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("THALIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Thalia3), - .party = {.NoItemDefaultMoves = sParty_Thalia3}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia3), }, [TRAINER_THALIA_4] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("THALIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Thalia4), - .party = {.NoItemDefaultMoves = sParty_Thalia4}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia4), }, [TRAINER_THALIA_5] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_BEAUTY, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE, .trainerPic = TRAINER_PIC_BEAUTY, .trainerName = _("THALIA"), .items = {}, .doubleBattle = FALSE, - .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = ARRAY_COUNT(sParty_Thalia5), - .party = {.NoItemDefaultMoves = sParty_Thalia5}, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia5), }, [TRAINER_MARIELA] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_F, @@ -11881,13 +10186,11 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Mariela), - .party = {.NoItemDefaultMoves = sParty_Mariela}, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Mariela), }, [TRAINER_ALVARO] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_PSYCHIC, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE, .trainerPic = TRAINER_PIC_PSYCHIC_M, @@ -11895,13 +10198,11 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Alvaro), - .party = {.NoItemDefaultMoves = sParty_Alvaro}, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Alvaro), }, [TRAINER_EVERETT] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_GENTLEMAN, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH, .trainerPic = TRAINER_PIC_GENTLEMAN, @@ -11909,41 +10210,35 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Everett), - .party = {.NoItemDefaultMoves = sParty_Everett}, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Everett), }, [TRAINER_RED] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RED, .trainerName = _("RED"), .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Red), - .party = {.NoItemDefaultMoves = sParty_Red}, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Red), }, [TRAINER_LEAF] = { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3, + .trainerClass = TRAINER_CLASS_RIVAL, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_LEAF, .trainerName = _("LEAF"), .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_Leaf), - .party = {.NoItemDefaultMoves = sParty_Leaf}, + .party = NO_ITEM_DEFAULT_MOVES(sParty_Leaf), }, [TRAINER_BRENDAN_PLACEHOLDER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_PROTAG, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_BRENDAN, @@ -11951,13 +10246,11 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_BrendanLinkPlaceholder), - .party = {.NoItemDefaultMoves = sParty_BrendanLinkPlaceholder}, + .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLinkPlaceholder), }, [TRAINER_MAY_PLACEHOLDER] = { - .partyFlags = 0, .trainerClass = TRAINER_CLASS_RS_PROTAG, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_MAY, @@ -11965,7 +10258,6 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_MayLinkPlaceholder), - .party = {.NoItemDefaultMoves = sParty_MayLinkPlaceholder}, + .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLinkPlaceholder), }, }; diff --git a/src/data/union_room.h b/src/data/union_room.h index be7bfae71e..cf4b12b5d5 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -1,29 +1,27 @@ -// const rom data - ALIGNED(4) static const u8 sText_EmptyString[] = _(""); -ALIGNED(4) const u8 sText_Colon[] = _(":"); -ALIGNED(4) const u8 sText_ID[] = _("{ID}"); -ALIGNED(4) const u8 sText_PleaseStartOver[] = _("Please start over from the beginning."); -ALIGNED(4) const u8 sText_WirelessSearchCanceled[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled."); -ALIGNED(4) const u8 sText_AwaitingCommunucation2[] = _("Awaiting communication\nfrom another player."); // Unused -ALIGNED(4) const u8 sText_AwaitingCommunication[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player."); -ALIGNED(4) const u8 sText_AwaitingLinkPressStart[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready."); -ALIGNED(4) const u8 sJPText_SingleBattle[] = _("シングルバトルを かいさいする"); -ALIGNED(4) const u8 sJPText_DoubleBattle[] = _("ダブルバトルを かいさいする"); -ALIGNED(4) const u8 sJPText_MultiBattle[] = _("マルチバトルを かいさいする"); -ALIGNED(4) const u8 sJPText_TradePokemon[] = _("ポケモンこうかんを かいさいする"); -ALIGNED(4) const u8 sJPText_Chat[] = _("チャットを かいさいする"); -ALIGNED(4) const u8 sJPText_DistWonderCard[] = _("ふしぎなカードをくばる"); -ALIGNED(4) const u8 sJPText_DistWonderNews[] = _("ふしぎなニュースをくばる"); -ALIGNED(4) const u8 sJPText_DistMysteryEvent[] = _("ふしぎなできごとを かいさいする"); // Unused -ALIGNED(4) const u8 sJPText_HoldPokemonJump[] = _("なわとびを かいさいする"); -ALIGNED(4) const u8 sJPText_HoldBerryCrush[] = _("きのみマッシャーを かいさいする"); -ALIGNED(4) const u8 sJPText_HoldBerryPicking[] = _("きのみどりを かいさいする"); -ALIGNED(4) const u8 sJPText_HoldSpinTrade[] = _("ぐるぐるこうかんを かいさいする"); -ALIGNED(4) const u8 sJPText_HoldSpinShop[] = _("ぐるぐるショップを かいさいする"); +ALIGNED(4) static const u8 sText_Colon[] = _(":"); +ALIGNED(4) static const u8 sText_ID[] = _("{ID}"); +ALIGNED(4) static const u8 sText_PleaseStartOver[] = _("Please start over from the beginning."); +ALIGNED(4) static const u8 sText_WirelessSearchCanceled[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled."); +ALIGNED(4) static const u8 sText_AwaitingCommunucation2[] = _("Awaiting communication\nfrom another player."); // Unused +ALIGNED(4) static const u8 sText_AwaitingCommunication[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player."); +ALIGNED(4) static const u8 sText_AwaitingLinkPressStart[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready."); +ALIGNED(4) static const u8 sJPText_SingleBattle[] = _("シングルバトルを かいさいする"); +ALIGNED(4) static const u8 sJPText_DoubleBattle[] = _("ダブルバトルを かいさいする"); +ALIGNED(4) static const u8 sJPText_MultiBattle[] = _("マルチバトルを かいさいする"); +ALIGNED(4) static const u8 sJPText_TradePokemon[] = _("ポケモンこうかんを かいさいする"); +ALIGNED(4) static const u8 sJPText_Chat[] = _("チャットを かいさいする"); +ALIGNED(4) static const u8 sJPText_DistWonderCard[] = _("ふしぎなカードをくばる"); +ALIGNED(4) static const u8 sJPText_DistWonderNews[] = _("ふしぎなニュースをくばる"); +ALIGNED(4) static const u8 sJPText_DistMysteryEvent[] = _("ふしぎなできごとを かいさいする"); // Unused +ALIGNED(4) static const u8 sJPText_HoldPokemonJump[] = _("なわとびを かいさいする"); +ALIGNED(4) static const u8 sJPText_HoldBerryCrush[] = _("きのみマッシャーを かいさいする"); +ALIGNED(4) static const u8 sJPText_HoldBerryPicking[] = _("きのみどりを かいさいする"); +ALIGNED(4) static const u8 sJPText_HoldSpinTrade[] = _("ぐるぐるこうかんを かいさいする"); +ALIGNED(4) static const u8 sJPText_HoldSpinShop[] = _("ぐるぐるショップを かいさいする"); // Unused -const u8 *const sJPLinkGroupActionTexts[] = { +static const u8 *const sJPLinkGroupActionTexts[] = { sJPText_SingleBattle, sJPText_DoubleBattle, sJPText_MultiBattle, @@ -40,28 +38,28 @@ const u8 *const sJPLinkGroupActionTexts[] = { sJPText_HoldSpinShop }; -const u8 sText_1PlayerNeeded[] = _("1 player\nneeded."); -const u8 sText_2PlayersNeeded[] = _("2 players\nneeded."); -const u8 sText_3PlayersNeeded[] = _("3 players\nneeded."); -const u8 sText_4PlayersNeeded[] = _("4 players\nneeded."); -const u8 sText_2PlayerMode[] = _("2-PLAYER\nMODE"); -const u8 sText_3PlayerMode[] = _("3-PLAYER\nMODE"); -const u8 sText_4PlayerMode[] = _("4-PLAYER\nMODE"); -const u8 sText_5PlayerMode[] = _("5-PLAYER\nMODE"); +static const u8 sText_1PlayerNeeded[] = _("1 player\nneeded."); +static const u8 sText_2PlayersNeeded[] = _("2 players\nneeded."); +static const u8 sText_3PlayersNeeded[] = _("3 players\nneeded."); +static const u8 sText_4PlayersNeeded[] = _("4 players\nneeded."); +static const u8 sText_2PlayerMode[] = _("2-PLAYER\nMODE"); +static const u8 sText_3PlayerMode[] = _("3-PLAYER\nMODE"); +static const u8 sText_4PlayerMode[] = _("4-PLAYER\nMODE"); +static const u8 sText_5PlayerMode[] = _("5-PLAYER\nMODE"); static const u8 *const sPlayersNeededOrModeTexts[][5] = { // 2 players required { sText_1PlayerNeeded, sText_2PlayerMode - }, + }, // 4 players required { sText_3PlayersNeeded, sText_2PlayersNeeded, sText_1PlayerNeeded, sText_4PlayerMode - }, + }, // 2-5 players required { sText_1PlayerNeeded, @@ -69,7 +67,7 @@ static const u8 *const sPlayersNeededOrModeTexts[][5] = { sText_3PlayerMode, sText_4PlayerMode, sText_5PlayerMode - }, + }, // 3-5 players required { sText_2PlayersNeeded, @@ -77,7 +75,7 @@ static const u8 *const sPlayersNeededOrModeTexts[][5] = { sText_3PlayerMode, sText_4PlayerMode, sText_5PlayerMode - }, + }, // 2-4 players required { sText_1PlayerNeeded, @@ -87,38 +85,38 @@ static const u8 *const sPlayersNeededOrModeTexts[][5] = { } }; -ALIGNED(4) const u8 sText_BButtonCancel[] = _("{B_BUTTON}CANCEL"); -ALIGNED(4) const u8 sJPText_SearchingForParticipants[] = _("ため\nさんかしゃ ぼしゅうちゅう です!"); // Unused, may have been cut off -ALIGNED(4) const u8 sText_PlayerContactedYouForXAccept[] = _("{STR_VAR_2} contacted you for\n{STR_VAR_1}. Accept?"); -ALIGNED(4) const u8 sText_PlayerContactedYouShareX[] = _("{STR_VAR_2} contacted you.\nWill you share {STR_VAR_1}?"); -ALIGNED(4) const u8 sText_PlayerContactedYouAddToMembers[] = _("{STR_VAR_2} contacted you.\nAdd to the members?"); -ALIGNED(4) const u8 sText_AreTheseMembersOK[] = _("{STR_VAR_1}!\nAre these members OK?"); -ALIGNED(4) const u8 sText_CancelModeWithTheseMembers[] = _("Cancel {STR_VAR_1} MODE\nwith these members?"); -ALIGNED(4) const u8 sText_AnOKWasSentToPlayer[] = _("An “OK” was sent\nto {STR_VAR_1}."); -ALIGNED(4) const u8 sText_OtherTrainerUnavailableNow[] = _("The other TRAINER doesn't appear\nto be available now…\p"); -ALIGNED(4) const u8 sText_CantTransmitTrainerTooFar[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); -ALIGNED(4) const u8 sText_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p"); +ALIGNED(4) static const u8 sText_BButtonCancel[] = _("{B_BUTTON}CANCEL"); +ALIGNED(4) static const u8 sJPText_SearchingForParticipants[] = _("ため\nさんかしゃ ぼしゅうちゅう です!"); // Unused, may have been cut off +ALIGNED(4) static const u8 sText_PlayerContactedYouForXAccept[] = _("{STR_VAR_2} contacted you for\n{STR_VAR_1}. Accept?"); +ALIGNED(4) static const u8 sText_PlayerContactedYouShareX[] = _("{STR_VAR_2} contacted you.\nWill you share {STR_VAR_1}?"); +ALIGNED(4) static const u8 sText_PlayerContactedYouAddToMembers[] = _("{STR_VAR_2} contacted you.\nAdd to the members?"); +ALIGNED(4) static const u8 sText_AreTheseMembersOK[] = _("{STR_VAR_1}!\nAre these members OK?"); +ALIGNED(4) static const u8 sText_CancelModeWithTheseMembers[] = _("Cancel {STR_VAR_1} MODE\nwith these members?"); +ALIGNED(4) static const u8 sText_AnOKWasSentToPlayer[] = _("An “OK” was sent\nto {STR_VAR_1}."); +ALIGNED(4) static const u8 sText_OtherTrainerUnavailableNow[] = _("The other TRAINER doesn't appear\nto be available now…\p"); +ALIGNED(4) static const u8 sText_CantTransmitTrainerTooFar[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); +ALIGNED(4) static const u8 sText_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p"); static const u8 *const sCantTransmitToTrainerTexts[] = { [UR_TRADE_PLAYER_NOT_READY - 1] = sText_CantTransmitTrainerTooFar, [UR_TRADE_PARTNER_NOT_READY - 1] = sText_TrainersNotReadyYet }; -ALIGNED(4) const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}"); -ALIGNED(4) const u8 sText_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p"); +ALIGNED(4) static const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}"); +ALIGNED(4) static const u8 sText_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p"); static const u8 *const sPlayerUnavailableTexts[] = { sText_OtherTrainerUnavailableNow, sText_MemberNoLongerAvailable }; -ALIGNED(4) const u8 sText_TrainerAppearsUnavailable[] = _("The other TRAINER appears\nunavailable…\p"); -ALIGNED(4) const u8 sText_PlayerSentBackOK[] = _("{STR_VAR_1} sent back an “OK”!"); -ALIGNED(4) const u8 sText_PlayerOKdRegistration[] = _("{STR_VAR_1} OK'd your registration as\na member."); -ALIGNED(4) const u8 sText_PlayerRepliedNo[] = _("{STR_VAR_1} replied, “No…”\p"); -ALIGNED(4) const u8 sText_AwaitingOtherMembers[] = _("{STR_VAR_1}!\nAwaiting other members!"); -ALIGNED(4) const u8 sText_QuitBeingMember[] = _("Quit being a member?"); -ALIGNED(4) const u8 sText_StoppedBeingMember[] = _("You stopped being a member.\p"); +ALIGNED(4) static const u8 sText_TrainerAppearsUnavailable[] = _("The other TRAINER appears\nunavailable…\p"); +ALIGNED(4) static const u8 sText_PlayerSentBackOK[] = _("{STR_VAR_1} sent back an “OK”!"); +ALIGNED(4) static const u8 sText_PlayerOKdRegistration[] = _("{STR_VAR_1} OK'd your registration as\na member."); +ALIGNED(4) static const u8 sText_PlayerRepliedNo[] = _("{STR_VAR_1} replied, “No…”\p"); +ALIGNED(4) static const u8 sText_AwaitingOtherMembers[] = _("{STR_VAR_1}!\nAwaiting other members!"); +ALIGNED(4) static const u8 sText_QuitBeingMember[] = _("Quit being a member?"); +ALIGNED(4) static const u8 sText_StoppedBeingMember[] = _("You stopped being a member.\p"); static const u8 *const sPlayerDisconnectedTexts[] = { [RFU_STATUS_OK] = NULL, @@ -133,12 +131,12 @@ static const u8 *const sPlayerDisconnectedTexts[] = { [RFU_STATUS_LEAVE_GROUP] = sText_StoppedBeingMember }; -ALIGNED(4) const u8 sText_WirelessLinkEstablished[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); -ALIGNED(4) const u8 sText_WirelessLinkDropped[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…"); -ALIGNED(4) const u8 sText_LinkWithFriendDropped[] = _("The link with your friend has been\ndropped…"); -ALIGNED(4) const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1} replied, “No…”"); +ALIGNED(4) static const u8 sText_WirelessLinkEstablished[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); +ALIGNED(4) static const u8 sText_WirelessLinkDropped[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…"); +ALIGNED(4) static const u8 sText_LinkWithFriendDropped[] = _("The link with your friend has been\ndropped…"); +ALIGNED(4) static const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1} replied, “No…”"); -const u8 *const sLinkDroppedTexts[] = { +static const u8 *const sLinkDroppedTexts[] = { [RFU_STATUS_OK] = NULL, [RFU_STATUS_FATAL_ERROR] = sText_LinkWithFriendDropped, [RFU_STATUS_CONNECTION_ERROR] = sText_LinkWithFriendDropped, @@ -151,8 +149,8 @@ const u8 *const sLinkDroppedTexts[] = { [RFU_STATUS_LEAVE_GROUP] = NULL }; -ALIGNED(4) const u8 sText_DoYouWantXMode[] = _("Do you want the {STR_VAR_2}\nMODE?"); -ALIGNED(4) const u8 sText_DoYouWantXMode2[] = _("Do you want the {STR_VAR_2}\nMODE?"); +ALIGNED(4) static const u8 sText_DoYouWantXMode[] = _("Do you want the {STR_VAR_2}\nMODE?"); +ALIGNED(4) static const u8 sText_DoYouWantXMode2[] = _("Do you want the {STR_VAR_2}\nMODE?"); // Unused static const u8 *const sDoYouWantModeTexts[] = { @@ -160,11 +158,14 @@ static const u8 *const sDoYouWantModeTexts[] = { sText_DoYouWantXMode2 }; -ALIGNED(4) const u8 sText_CommunicatingPleaseWait[] = _("Communicating…\nPlease wait."); // Unused -ALIGNED(4) const u8 sText_AwaitingPlayersResponseAboutTrade[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…"); -ALIGNED(4) const u8 sText_Communicating[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); -ALIGNED(4) const u8 sText_CommunicatingWithPlayer[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); -ALIGNED(4) const u8 sText_PleaseWaitAWhile[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); +ALIGNED(4) static const u8 sText_CommunicatingPleaseWait[] = _("Communicating…\nPlease wait."); // Unused +ALIGNED(4) static const u8 sText_AwaitingPlayersResponseAboutTrade[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…"); +ALIGNED(4) static const u8 sText_Communicating[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n" + "{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); +ALIGNED(4) static const u8 sText_CommunicatingWithPlayer[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n" + "{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); +ALIGNED(4) static const u8 sText_PleaseWaitAWhile[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n" + "{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); static const u8 *const sCommunicatingWaitTexts[] = { sText_Communicating, @@ -172,10 +173,10 @@ static const u8 *const sCommunicatingWaitTexts[] = { sText_PleaseWaitAWhile }; -ALIGNED(4) const u8 sText_HiDoSomethingMale[] = _("Hiya! Is there something that you\nwanted to do?"); -ALIGNED(4) const u8 sText_HiDoSomethingFemale[] = _("Hello!\nWould you like to do something?"); -ALIGNED(4) const u8 sText_HiDoSomethingAgainMale[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?"); -ALIGNED(4) const u8 sText_HiDoSomethingAgainFemale[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?"); +ALIGNED(4) static const u8 sText_HiDoSomethingMale[] = _("Hiya! Is there something that you\nwanted to do?"); +ALIGNED(4) static const u8 sText_HiDoSomethingFemale[] = _("Hello!\nWould you like to do something?"); +ALIGNED(4) static const u8 sText_HiDoSomethingAgainMale[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?"); +ALIGNED(4) static const u8 sText_HiDoSomethingAgainFemale[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?"); static const u8 *const sHiDoSomethingTexts[][GENDER_COUNT] = { { @@ -187,10 +188,10 @@ static const u8 *const sHiDoSomethingTexts[][GENDER_COUNT] = { } }; -ALIGNED(4) const u8 sText_DoSomethingMale[] = _("Want to do something?"); -ALIGNED(4) const u8 sText_DoSomethingFemale[] = _("Would you like to do something?"); -ALIGNED(4) const u8 sText_DoSomethingAgainMale[] = _("{STR_VAR_1}: What would you like to\ndo now?"); -ALIGNED(4) const u8 sText_DoSomethingAgainFemale[] = _("{STR_VAR_1}: Want to do anything else?"); // Unused +ALIGNED(4) static const u8 sText_DoSomethingMale[] = _("Want to do something?"); +ALIGNED(4) static const u8 sText_DoSomethingFemale[] = _("Would you like to do something?"); +ALIGNED(4) static const u8 sText_DoSomethingAgainMale[] = _("{STR_VAR_1}: What would you like to\ndo now?"); +ALIGNED(4) static const u8 sText_DoSomethingAgainFemale[] = _("{STR_VAR_1}: Want to do anything else?"); // Unused // Unused static const u8 *const sDoSomethingTexts[][GENDER_COUNT] = { @@ -203,31 +204,31 @@ static const u8 *const sDoSomethingTexts[][GENDER_COUNT] = { } }; -ALIGNED(4) const u8 sText_SomebodyHasContactedYou[] = _("Somebody has contacted you.{PAUSE 60}"); -ALIGNED(4) const u8 sText_PlayerHasContactedYou[] = _("{STR_VAR_1} has contacted you.{PAUSE 60}"); +ALIGNED(4) static const u8 sText_SomebodyHasContactedYou[] = _("Somebody has contacted you.{PAUSE 60}"); +ALIGNED(4) static const u8 sText_PlayerHasContactedYou[] = _("{STR_VAR_1} has contacted you.{PAUSE 60}"); static const u8 *const sPlayerContactedYouTexts[] = { sText_SomebodyHasContactedYou, sText_PlayerHasContactedYou }; -ALIGNED(4) const u8 sText_AwaitingResponseFromTrainer[] = _("Awaiting a response from\nthe other TRAINER…"); -ALIGNED(4) const u8 sText_AwaitingResponseFromPlayer[] = _("Awaiting a response from\n{STR_VAR_1}…"); +ALIGNED(4) static const u8 sText_AwaitingResponseFromTrainer[] = _("Awaiting a response from\nthe other TRAINER…"); +ALIGNED(4) static const u8 sText_AwaitingResponseFromPlayer[] = _("Awaiting a response from\n{STR_VAR_1}…"); static const u8 *const sAwaitingResponseTexts[] = { sText_AwaitingResponseFromTrainer, sText_AwaitingResponseFromPlayer }; -ALIGNED(4) const u8 sText_ShowTrainerCard[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?"); -ALIGNED(4) const u8 sText_BattleChallenge[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?"); -ALIGNED(4) const u8 sText_ChatInvitation[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?"); -ALIGNED(4) const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {DYNAMIC 0} {DYNAMIC 1}\pin exchange for a\nLv. {DYNAMIC 2} {DYNAMIC 3}.\pWill you accept this trade\noffer?"); -ALIGNED(4) const u8 sText_OfferToTradeEgg[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?"); -ALIGNED(4) const u8 sText_ChatDropped[] = _("The chat has been dropped.\p"); -ALIGNED(4) const u8 sText_OfferDeclined1[] = _("You declined the offer.\p"); -ALIGNED(4) const u8 sText_OfferDeclined2[] = _("You declined the offer.\p"); -ALIGNED(4) const u8 sText_ChatEnded[] = _("The chat was ended.\p"); +ALIGNED(4) static const u8 sText_ShowTrainerCard[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?"); +ALIGNED(4) static const u8 sText_BattleChallenge[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?"); +ALIGNED(4) static const u8 sText_ChatInvitation[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?"); +ALIGNED(4) static const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {DYNAMIC 0} {DYNAMIC 1}\pin exchange for a\nLv. {DYNAMIC 2} {DYNAMIC 3}.\pWill you accept this trade\noffer?"); +ALIGNED(4) static const u8 sText_OfferToTradeEgg[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?"); +ALIGNED(4) static const u8 sText_ChatDropped[] = _("The chat has been dropped.\p"); +ALIGNED(4) static const u8 sText_OfferDeclined1[] = _("You declined the offer.\p"); +ALIGNED(4) static const u8 sText_OfferDeclined2[] = _("You declined the offer.\p"); +ALIGNED(4) static const u8 sText_ChatEnded[] = _("The chat was ended.\p"); // Unused static const u8 *const sInvitationTexts[] = { @@ -237,10 +238,10 @@ static const u8 *const sInvitationTexts[] = { sText_OfferToTradeMon }; -ALIGNED(4) const u8 sText_JoinChatMale[] = _("Oh, hey! We're in a chat right now.\nWant to join us?"); -ALIGNED(4) const u8 sText_PlayerJoinChatMale[] = _("{STR_VAR_1}: Hey, {PLAYER}!\nWe're having a chat right now.\lWant to join us?"); -ALIGNED(4) const u8 sText_JoinChatFemale[] = _("Oh, hi! We're having a chat now.\nWould you like to join us?"); -ALIGNED(4) const u8 sText_PlayerJoinChatFemale[] = _("{STR_VAR_1}: Oh, hi, {PLAYER}!\nWe're having a chat now.\lWould you like to join us?"); +ALIGNED(4) static const u8 sText_JoinChatMale[] = _("Oh, hey! We're in a chat right now.\nWant to join us?"); +ALIGNED(4) static const u8 sText_PlayerJoinChatMale[] = _("{STR_VAR_1}: Hey, {PLAYER}!\nWe're having a chat right now.\lWant to join us?"); +ALIGNED(4) static const u8 sText_JoinChatFemale[] = _("Oh, hi! We're having a chat now.\nWould you like to join us?"); +ALIGNED(4) static const u8 sText_PlayerJoinChatFemale[] = _("{STR_VAR_1}: Oh, hi, {PLAYER}!\nWe're having a chat now.\lWould you like to join us?"); static const u8 *const sJoinChatTexts[][GENDER_COUNT] = { { @@ -252,13 +253,13 @@ static const u8 *const sJoinChatTexts[][GENDER_COUNT] = { } }; -ALIGNED(4) const u8 sText_TrainerAppearsBusy[] = _("……\nThe TRAINER appears to be busy…\p"); -ALIGNED(4) const u8 sText_WaitForBattleMale[] = _("A battle, huh?\nAll right, just give me some time."); -ALIGNED(4) const u8 sText_WaitForChatMale[] = _("You want to chat, huh?\nSure, just wait a little."); -ALIGNED(4) const u8 sText_ShowTrainerCardMale[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD."); -ALIGNED(4) const u8 sText_WaitForBattleFemale[] = _("A battle? Of course, but I need\ntime to get ready."); -ALIGNED(4) const u8 sText_WaitForChatFemale[] = _("Did you want to chat?\nOkay, but please wait a moment."); -ALIGNED(4) const u8 sText_ShowTrainerCardFemale[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); +ALIGNED(4) static const u8 sText_TrainerAppearsBusy[] = _("……\nThe TRAINER appears to be busy…\p"); +ALIGNED(4) static const u8 sText_WaitForBattleMale[] = _("A battle, huh?\nAll right, just give me some time."); +ALIGNED(4) static const u8 sText_WaitForChatMale[] = _("You want to chat, huh?\nSure, just wait a little."); +ALIGNED(4) static const u8 sText_ShowTrainerCardMale[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD."); +ALIGNED(4) static const u8 sText_WaitForBattleFemale[] = _("A battle? Of course, but I need\ntime to get ready."); +ALIGNED(4) static const u8 sText_WaitForChatFemale[] = _("Did you want to chat?\nOkay, but please wait a moment."); +ALIGNED(4) static const u8 sText_ShowTrainerCardFemale[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); static const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = { { @@ -274,14 +275,14 @@ static const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = { } }; -ALIGNED(4) const u8 sText_WaitForChatMale2[] = _("You want to chat, huh?\nSure, just wait a little."); // Unused -ALIGNED(4) const u8 sText_DoneWaitingBattleMale[] = _("Thanks for waiting!\nLet's get our battle started!{PAUSE 60}"); -ALIGNED(4) const u8 sText_DoneWaitingChatMale[] = _("All right!\nLet's chat!{PAUSE 60}"); -ALIGNED(4) const u8 sText_DoneWaitingBattleFemale[] = _("Sorry I made you wait!\nLet's get started!{PAUSE 60}"); -ALIGNED(4) const u8 sText_DoneWaitingChatFemale[] = _("Sorry I made you wait!\nLet's chat.{PAUSE 60}"); -ALIGNED(4) const u8 sText_TradeWillBeStarted[] = _("The trade will be started.{PAUSE 60}"); -ALIGNED(4) const u8 sText_BattleWillBeStarted[] = _("The battle will be started.{PAUSE 60}"); -ALIGNED(4) const u8 sText_EnteringChat[] = _("Entering the chat…{PAUSE 60}"); +ALIGNED(4) static const u8 sText_WaitForChatMale2[] = _("You want to chat, huh?\nSure, just wait a little."); // Unused +ALIGNED(4) static const u8 sText_DoneWaitingBattleMale[] = _("Thanks for waiting!\nLet's get our battle started!{PAUSE 60}"); +ALIGNED(4) static const u8 sText_DoneWaitingChatMale[] = _("All right!\nLet's chat!{PAUSE 60}"); +ALIGNED(4) static const u8 sText_DoneWaitingBattleFemale[] = _("Sorry I made you wait!\nLet's get started!{PAUSE 60}"); +ALIGNED(4) static const u8 sText_DoneWaitingChatFemale[] = _("Sorry I made you wait!\nLet's chat.{PAUSE 60}"); +ALIGNED(4) static const u8 sText_TradeWillBeStarted[] = _("The trade will be started.{PAUSE 60}"); +ALIGNED(4) static const u8 sText_BattleWillBeStarted[] = _("The battle will be started.{PAUSE 60}"); +ALIGNED(4) static const u8 sText_EnteringChat[] = _("Entering the chat…{PAUSE 60}"); static const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = { { @@ -307,36 +308,36 @@ static const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = { } }; -ALIGNED(4) const u8 sText_BattleDeclinedMale[] = _("Sorry! My POKéMON don't seem to\nbe feeling too well right now.\lLet me battle you another time.\p"); -ALIGNED(4) const u8 sText_BattleDeclinedFemale[] = _("I'm terribly sorry, but my POKéMON\naren't feeling well…\pLet's battle another time.\p"); +ALIGNED(4) static const u8 sText_BattleDeclinedMale[] = _("Sorry! My POKéMON don't seem to\nbe feeling too well right now.\lLet me battle you another time.\p"); +ALIGNED(4) static const u8 sText_BattleDeclinedFemale[] = _("I'm terribly sorry, but my POKéMON\naren't feeling well…\pLet's battle another time.\p"); -const u8 *const sBattleDeclinedTexts[GENDER_COUNT] = { +static const u8 *const sBattleDeclinedTexts[GENDER_COUNT] = { sText_BattleDeclinedMale, sText_BattleDeclinedFemale }; -ALIGNED(4) const u8 sText_ShowTrainerCardDeclinedMale[] = _("Huh? My TRAINER CARD…\nWhere'd it go now?\lSorry! I'll show you another time!\p"); -ALIGNED(4) const u8 sText_ShowTrainerCardDeclinedFemale[] = _("Oh? Now where did I put my\nTRAINER CARD?…\lSorry! I'll show you later!\p"); +ALIGNED(4) static const u8 sText_ShowTrainerCardDeclinedMale[] = _("Huh? My TRAINER CARD…\nWhere'd it go now?\lSorry! I'll show you another time!\p"); +ALIGNED(4) static const u8 sText_ShowTrainerCardDeclinedFemale[] = _("Oh? Now where did I put my\nTRAINER CARD?…\lSorry! I'll show you later!\p"); -const u8 *const sShowTrainerCardDeclinedTexts[GENDER_COUNT] = { +static const u8 *const sShowTrainerCardDeclinedTexts[GENDER_COUNT] = { sText_ShowTrainerCardDeclinedMale, sText_ShowTrainerCardDeclinedFemale }; -ALIGNED(4) const u8 sText_IfYouWantToDoSomethingMale[] = _("If you want to do something with\nme, just give me a shout!\p"); -ALIGNED(4) const u8 sText_IfYouWantToDoSomethingFemale[] = _("If you want to do something with\nme, don't be shy.\p"); +ALIGNED(4) static const u8 sText_IfYouWantToDoSomethingMale[] = _("If you want to do something with\nme, just give me a shout!\p"); +ALIGNED(4) static const u8 sText_IfYouWantToDoSomethingFemale[] = _("If you want to do something with\nme, don't be shy.\p"); -const u8 *const sIfYouWantToDoSomethingTexts[GENDER_COUNT] = { +static const u8 *const sIfYouWantToDoSomethingTexts[GENDER_COUNT] = { sText_IfYouWantToDoSomethingMale, sText_IfYouWantToDoSomethingFemale }; -ALIGNED(4) const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p"); -ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p"); -ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p"); +ALIGNED(4) static const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p"); +ALIGNED(4) static const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p"); +ALIGNED(4) static const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p"); -ALIGNED(4) const u8 sText_DeclineChatMale[] = _("Oh, all right.\nCome see me anytime, okay?\p"); -ALIGNED(4) const u8 stext_DeclineChatFemale[] = _("Oh…\nPlease come by anytime.\p"); +ALIGNED(4) static const u8 sText_DeclineChatMale[] = _("Oh, all right.\nCome see me anytime, okay?\p"); +ALIGNED(4) static const u8 stext_DeclineChatFemale[] = _("Oh…\nPlease come by anytime.\p"); // Response from partner when player declines chat static const u8 *const sDeclineChatTexts[GENDER_COUNT] = { @@ -344,8 +345,8 @@ static const u8 *const sDeclineChatTexts[GENDER_COUNT] = { stext_DeclineChatFemale }; -ALIGNED(4) const u8 sText_ChatDeclinedMale[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p"); -ALIGNED(4) const u8 sText_ChatDeclinedFemale[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p"); +ALIGNED(4) static const u8 sText_ChatDeclinedMale[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p"); +ALIGNED(4) static const u8 sText_ChatDeclinedFemale[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p"); // Response from partner when they decline chat static const u8 *const sChatDeclinedTexts[GENDER_COUNT] = { @@ -353,22 +354,22 @@ static const u8 *const sChatDeclinedTexts[GENDER_COUNT] = { sText_ChatDeclinedFemale }; -ALIGNED(4) const u8 sText_YoureToughMale[] = _("Whoa!\nI can tell you're pretty tough!\p"); -ALIGNED(4) const u8 sText_UsedGoodMoveMale[] = _("You used that move?\nThat's good strategy!\p"); -ALIGNED(4) const u8 sText_BattleSurpriseMale[] = _("Way to go!\nThat was an eye-opener!\p"); -ALIGNED(4) const u8 sText_SwitchedMonsMale[] = _("Oh! How could you use that\nPOKéMON in that situation?\p"); -ALIGNED(4) const u8 sText_YoureToughFemale[] = _("That POKéMON…\nIt's been raised really well!\p"); -ALIGNED(4) const u8 sText_UsedGoodMoveFemale[] = _("That's it!\nThis is the right move now!\p"); -ALIGNED(4) const u8 sText_BattleSurpriseFemale[] = _("That's awesome!\nYou can battle that way?\p"); -ALIGNED(4) const u8 sText_SwitchedMonsFemale[] = _("You have exquisite timing for\nswitching POKéMON!\p"); +ALIGNED(4) static const u8 sText_YoureToughMale[] = _("Whoa!\nI can tell you're pretty tough!\p"); +ALIGNED(4) static const u8 sText_UsedGoodMoveMale[] = _("You used that move?\nThat's good strategy!\p"); +ALIGNED(4) static const u8 sText_BattleSurpriseMale[] = _("Way to go!\nThat was an eye-opener!\p"); +ALIGNED(4) static const u8 sText_SwitchedMonsMale[] = _("Oh! How could you use that\nPOKéMON in that situation?\p"); +ALIGNED(4) static const u8 sText_YoureToughFemale[] = _("That POKéMON…\nIt's been raised really well!\p"); +ALIGNED(4) static const u8 sText_UsedGoodMoveFemale[] = _("That's it!\nThis is the right move now!\p"); +ALIGNED(4) static const u8 sText_BattleSurpriseFemale[] = _("That's awesome!\nYou can battle that way?\p"); +ALIGNED(4) static const u8 sText_SwitchedMonsFemale[] = _("You have exquisite timing for\nswitching POKéMON!\p"); -const u8 *const sBattleReactionTexts[GENDER_COUNT][4] = { +static const u8 *const sBattleReactionTexts[GENDER_COUNT][4] = { { sText_YoureToughMale, sText_UsedGoodMoveMale, sText_BattleSurpriseMale, sText_SwitchedMonsMale - }, + }, { sText_YoureToughFemale, sText_UsedGoodMoveFemale, @@ -377,22 +378,22 @@ const u8 *const sBattleReactionTexts[GENDER_COUNT][4] = { } }; -ALIGNED(4) const u8 sText_LearnedSomethingMale[] = _("Oh, I see!\nThis is educational!\p"); -ALIGNED(4) const u8 sText_ThatsFunnyMale[] = _("Don't say anything funny anymore!\nI'm sore from laughing!\p"); -ALIGNED(4) const u8 sText_RandomChatMale1[] = _("Oh?\nSomething like that happened.\p"); -ALIGNED(4) const u8 sText_RandomChatMale2[] = _("Hmhm… What?\nSo is this what you're saying?\p"); -ALIGNED(4) const u8 sText_LearnedSomethingFemale[] = _("Is that right?\nI didn't know that.\p"); -ALIGNED(4) const u8 sText_ThatsFunnyFemale[] = _("Ahaha!\nWhat is that about?\p"); -ALIGNED(4) const u8 sText_RandomChatFemale1[] = _("Yes, that's exactly it!\nThat's what I meant.\p"); -ALIGNED(4) const u8 sText_RandomChatFemale2[] = _("In other words…\nYes! That's right!\p"); +ALIGNED(4) static const u8 sText_LearnedSomethingMale[] = _("Oh, I see!\nThis is educational!\p"); +ALIGNED(4) static const u8 sText_ThatsFunnyMale[] = _("Don't say anything funny anymore!\nI'm sore from laughing!\p"); +ALIGNED(4) static const u8 sText_RandomChatMale1[] = _("Oh?\nSomething like that happened.\p"); +ALIGNED(4) static const u8 sText_RandomChatMale2[] = _("Hmhm… What?\nSo is this what you're saying?\p"); +ALIGNED(4) static const u8 sText_LearnedSomethingFemale[] = _("Is that right?\nI didn't know that.\p"); +ALIGNED(4) static const u8 sText_ThatsFunnyFemale[] = _("Ahaha!\nWhat is that about?\p"); +ALIGNED(4) static const u8 sText_RandomChatFemale1[] = _("Yes, that's exactly it!\nThat's what I meant.\p"); +ALIGNED(4) static const u8 sText_RandomChatFemale2[] = _("In other words…\nYes! That's right!\p"); -const u8 *const sChatReactionTexts[GENDER_COUNT][4] = { +static const u8 *const sChatReactionTexts[GENDER_COUNT][4] = { { sText_LearnedSomethingMale, sText_ThatsFunnyMale, sText_RandomChatMale1, sText_RandomChatMale2 - }, + }, { sText_LearnedSomethingFemale, sText_ThatsFunnyFemale, @@ -401,91 +402,100 @@ const u8 *const sChatReactionTexts[GENDER_COUNT][4] = { } }; -ALIGNED(4) const u8 sText_ShowedTrainerCardMale1[] = _("I'm just showing my TRAINER CARD\nas my way of greeting.\p"); -ALIGNED(4) const u8 sText_ShowedTrainerCardMale2[] = _("I hope I get to know you better!\p"); -ALIGNED(4) const u8 sText_ShowedTrainerCardFemale1[] = _("We're showing each other our\nTRAINER CARDS to get acquainted.\p"); -ALIGNED(4) const u8 sText_ShowedTrainerCardFemale2[] = _("Glad to meet you.\nPlease don't be a stranger!\p"); +ALIGNED(4) static const u8 sText_ShowedTrainerCardMale1[] = _("I'm just showing my TRAINER CARD\nas my way of greeting.\p"); +ALIGNED(4) static const u8 sText_ShowedTrainerCardMale2[] = _("I hope I get to know you better!\p"); +ALIGNED(4) static const u8 sText_ShowedTrainerCardFemale1[] = _("We're showing each other our\nTRAINER CARDS to get acquainted.\p"); +ALIGNED(4) static const u8 sText_ShowedTrainerCardFemale2[] = _("Glad to meet you.\nPlease don't be a stranger!\p"); -const u8 *const sTrainerCardReactionTexts[GENDER_COUNT][2] = { +static const u8 *const sTrainerCardReactionTexts[GENDER_COUNT][2] = { { sText_ShowedTrainerCardMale1, sText_ShowedTrainerCardMale2 - }, + }, { sText_ShowedTrainerCardFemale1, sText_ShowedTrainerCardFemale2 } }; -ALIGNED(4) const u8 sText_MaleTraded1[] = _("Yeahah!\nI really wanted this POKéMON!\p"); -ALIGNED(4) const u8 sText_MaleTraded2[] = _("Finally, a trade got me that\nPOKéMON I'd wanted a long time.\p"); -ALIGNED(4) const u8 sText_FemaleTraded1[] = _("I'm trading POKéMON right now.\p"); -ALIGNED(4) const u8 sText_FemaleTraded2[] = _("I finally got that POKéMON I\nwanted in a trade!\p"); +ALIGNED(4) static const u8 sText_MaleTraded1[] = _("Yeahah!\nI really wanted this POKéMON!\p"); +ALIGNED(4) static const u8 sText_MaleTraded2[] = _("Finally, a trade got me that\nPOKéMON I'd wanted a long time.\p"); +ALIGNED(4) static const u8 sText_FemaleTraded1[] = _("I'm trading POKéMON right now.\p"); +ALIGNED(4) static const u8 sText_FemaleTraded2[] = _("I finally got that POKéMON I\nwanted in a trade!\p"); -const u8 *const sTradeReactionTexts[GENDER_COUNT][4] = { +static const u8 *const sTradeReactionTexts[GENDER_COUNT][4] = { { sText_MaleTraded1, sText_MaleTraded2 - }, + }, { sText_FemaleTraded1, sText_FemaleTraded2 } }; -ALIGNED(4) const u8 sText_XCheckedTradingBoard[] = _("{STR_VAR_1} checked the\nTRADING BOARD.\p"); -ALIGNED(4) const u8 sText_RegisterMonAtTradingBoard[] = _("Welcome to the TRADING BOARD.\pYou may register your POKéMON\nand offer it up for a trade.\pWould you like to register one of\nyour POKéMON?"); -ALIGNED(4) const u8 sText_TradingBoardInfo[] = _("This TRADING BOARD is used for\noffering a POKéMON for a trade.\pAll you need to do is register a\nPOKéMON for a trade.\pAnother TRAINER may offer a party\nPOKéMON in return for the trade.\pWe hope you will register POKéMON\nand trade them with many, many\lother TRAINERS.\pWould you like to register one of\nyour POKéMON?"); -ALIGNED(4) const u8 sText_ThankYouForRegistering[] = _("We have registered your POKéMON for\ntrade on the TRADING BOARD.\pThank you for using this service!\p"); // unused -ALIGNED(4) const u8 sText_NobodyHasRegistered[] = _("Nobody has registered any POKéMON\nfor trade on the TRADING BOARD.\p\n"); // unused -ALIGNED(4) const u8 sText_ChooseRequestedMonType[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n"); -ALIGNED(4) const u8 sText_WhichMonWillYouOffer[] = _("Which of your party POKéMON will\nyou offer in trade?\p"); -ALIGNED(4) const u8 sText_RegistrationCanceled[] = _("Registration has been canceled.\p"); -ALIGNED(4) const u8 sText_RegistraionCompleted[] = _("Registration has been completed.\p"); -ALIGNED(4) const u8 sText_TradeCanceled[] = _("The trade has been canceled.\p"); -ALIGNED(4) const u8 sText_CancelRegistrationOfMon[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?"); -ALIGNED(4) const u8 sText_CancelRegistrationOfEgg[] = _("Cancel the registration of your\nEGG?"); -ALIGNED(4) const u8 sText_RegistrationCanceled2[] = _("The registration has been canceled.\p"); -ALIGNED(4) const u8 sText_TradeTrainersWillBeListed[] = _("TRAINERS wishing to make a trade\nwill be listed."); // unused -ALIGNED(4) const u8 sText_ChooseTrainerToTradeWith2[] = _("Please choose the TRAINER with whom\nyou would like to trade POKéMON."); // unused -ALIGNED(4) const u8 sText_AskTrainerToMakeTrade[] = _("Would you like to ask {STR_VAR_1} to\nmake a trade?"); -ALIGNED(4) const u8 sText_AwaitingResponseFromTrainer2[] = _("Awaiting a response from\nthe other TRAINER…"); // unused -ALIGNED(4) const u8 sText_NotRegisteredAMonForTrade[] = _("You have not registered a POKéMON\nfor trading.\p"); // unused -ALIGNED(4) const u8 sText_DontHaveTypeTrainerWants[] = _("You don't have a {STR_VAR_2}-type\nPOKéMON that {STR_VAR_1} wants.\p"); -ALIGNED(4) const u8 sText_DontHaveEggTrainerWants[] = _("You don't have an EGG that\n{STR_VAR_1} wants.\p"); -ALIGNED(4) const u8 sText_PlayerCantTradeForYourMon[] = _("{STR_VAR_1} can't make a trade for\nyour POKéMON right now.\p"); -ALIGNED(4) const u8 sText_CantTradeForPartnersMon[] = _("You can't make a trade for\n{STR_VAR_1}'s POKéMON right now.\p"); +ALIGNED(4) static const u8 sText_XCheckedTradingBoard[] = _("{STR_VAR_1} checked the\nTRADING BOARD.\p"); +ALIGNED(4) static const u8 sText_RegisterMonAtTradingBoard[] = _("Welcome to the TRADING BOARD.\pYou may register your POKéMON\nand offer it up for a trade.\pWould you like to register one of\nyour POKéMON?"); +ALIGNED(4) static const u8 sText_TradingBoardInfo[] = _("This TRADING BOARD is used for\n" + "offering a POKéMON for a trade.\p" + "All you need to do is register a\n" + "POKéMON for a trade.\p" + "Another TRAINER may offer a party\n" + "POKéMON in return for the trade.\p" + "We hope you will register POKéMON\n" + "and trade them with many, many\l" + "other TRAINERS.\p" + "Would you like to register one of\nyour POKéMON?"); +ALIGNED(4) static const u8 sText_ThankYouForRegistering[] = _("We have registered your POKéMON for\ntrade on the TRADING BOARD.\pThank you for using this service!\p"); // unused +ALIGNED(4) static const u8 sText_NobodyHasRegistered[] = _("Nobody has registered any POKéMON\nfor trade on the TRADING BOARD.\p\n"); // unused +ALIGNED(4) static const u8 sText_ChooseRequestedMonType[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n"); +ALIGNED(4) static const u8 sText_WhichMonWillYouOffer[] = _("Which of your party POKéMON will\nyou offer in trade?\p"); +ALIGNED(4) static const u8 sText_RegistrationCanceled[] = _("Registration has been canceled.\p"); +ALIGNED(4) static const u8 sText_RegistraionCompleted[] = _("Registration has been completed.\p"); +ALIGNED(4) static const u8 sText_TradeCanceled[] = _("The trade has been canceled.\p"); +ALIGNED(4) static const u8 sText_CancelRegistrationOfMon[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?"); +ALIGNED(4) static const u8 sText_CancelRegistrationOfEgg[] = _("Cancel the registration of your\nEGG?"); +ALIGNED(4) static const u8 sText_RegistrationCanceled2[] = _("The registration has been canceled.\p"); +ALIGNED(4) static const u8 sText_TradeTrainersWillBeListed[] = _("TRAINERS wishing to make a trade\nwill be listed."); // unused +ALIGNED(4) static const u8 sText_ChooseTrainerToTradeWith2[] = _("Please choose the TRAINER with whom\nyou would like to trade POKéMON."); // unused +ALIGNED(4) static const u8 sText_AskTrainerToMakeTrade[] = _("Would you like to ask {STR_VAR_1} to\nmake a trade?"); +ALIGNED(4) static const u8 sText_AwaitingResponseFromTrainer2[] = _("Awaiting a response from\nthe other TRAINER…"); // unused +ALIGNED(4) static const u8 sText_NotRegisteredAMonForTrade[] = _("You have not registered a POKéMON\nfor trading.\p"); // unused +ALIGNED(4) static const u8 sText_DontHaveTypeTrainerWants[] = _("You don't have a {STR_VAR_2}-type\nPOKéMON that {STR_VAR_1} wants.\p"); +ALIGNED(4) static const u8 sText_DontHaveEggTrainerWants[] = _("You don't have an EGG that\n{STR_VAR_1} wants.\p"); +ALIGNED(4) static const u8 sText_PlayerCantTradeForYourMon[] = _("{STR_VAR_1} can't make a trade for\nyour POKéMON right now.\p"); +ALIGNED(4) static const u8 sText_CantTradeForPartnersMon[] = _("You can't make a trade for\n{STR_VAR_1}'s POKéMON right now.\p"); // Unused -const u8 *const sCantTradeMonTexts[] = { +static const u8 *const sCantTradeMonTexts[] = { sText_PlayerCantTradeForYourMon, sText_CantTradeForPartnersMon }; -ALIGNED(4) const u8 sText_TradeOfferRejected[] = _("Your trade offer was rejected.\p"); -ALIGNED(4) const u8 sText_EggTrade[] = _("EGG TRADE"); -ALIGNED(4) const u8 sText_ChooseJoinCancel[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL"); -ALIGNED(4) const u8 sText_ChooseTrainer[] = _("Please choose a TRAINER."); -ALIGNED(4) const u8 sText_ChooseTrainerSingleBattle[] = _("Please choose a TRAINER for\na SINGLE BATTLE."); -ALIGNED(4) const u8 sText_ChooseTrainerDoubleBattle[] = _("Please choose a TRAINER for\na DOUBLE BATTLE."); -ALIGNED(4) const u8 sText_ChooseLeaderMultiBattle[] = _("Please choose the LEADER\nfor a MULTI BATTLE."); -ALIGNED(4) const u8 sText_ChooseTrainerToTradeWith[] = _("Please choose the TRAINER to\ntrade with."); -ALIGNED(4) const u8 sText_ChooseTrainerToShareWonderCards[] = _("Please choose the TRAINER who is\nsharing WONDER CARDS."); -ALIGNED(4) const u8 sText_ChooseTrainerToShareWonderNews[] = _("Please choose the TRAINER who is\nsharing WONDER NEWS."); -ALIGNED(4) const u8 sText_ChooseLeaderPokemonJump[] = _("Jump with mini POKéMON!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderBerryCrush[] = _("BERRY CRUSH!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderBerryPicking[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderBerryBlender[] = _("BERRY BLENDER!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderRecordCorner[] = _("RECORD CORNER!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderCoolContest[] = _("COOLNESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderBeautyContest[] = _("BEAUTY CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderCuteContest[] = _("CUTENESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderSmartContest[] = _("SMARTNESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderToughContest[] = _("TOUGHNESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderBattleTowerLv50[] = _("BATTLE TOWER LEVEL 50!\nPlease choose the LEADER."); -ALIGNED(4) const u8 sText_ChooseLeaderBattleTowerOpenLv[] = _("BATTLE TOWER OPEN LEVEL!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_TradeOfferRejected[] = _("Your trade offer was rejected.\p"); +ALIGNED(4) static const u8 sText_EggTrade[] = _("EGG TRADE"); +ALIGNED(4) static const u8 sText_ChooseJoinCancel[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL"); +ALIGNED(4) static const u8 sText_ChooseTrainer[] = _("Please choose a TRAINER."); +ALIGNED(4) static const u8 sText_ChooseTrainerSingleBattle[] = _("Please choose a TRAINER for\na SINGLE BATTLE."); +ALIGNED(4) static const u8 sText_ChooseTrainerDoubleBattle[] = _("Please choose a TRAINER for\na DOUBLE BATTLE."); +ALIGNED(4) static const u8 sText_ChooseLeaderMultiBattle[] = _("Please choose the LEADER\nfor a MULTI BATTLE."); +ALIGNED(4) static const u8 sText_ChooseTrainerToTradeWith[] = _("Please choose the TRAINER to\ntrade with."); +ALIGNED(4) static const u8 sText_ChooseTrainerToShareWonderCards[] = _("Please choose the TRAINER who is\nsharing WONDER CARDS."); +ALIGNED(4) static const u8 sText_ChooseTrainerToShareWonderNews[] = _("Please choose the TRAINER who is\nsharing WONDER NEWS."); +ALIGNED(4) static const u8 sText_ChooseLeaderPokemonJump[] = _("Jump with mini POKéMON!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderBerryCrush[] = _("BERRY CRUSH!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderBerryPicking[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderBerryBlender[] = _("BERRY BLENDER!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderRecordCorner[] = _("RECORD CORNER!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderCoolContest[] = _("COOLNESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderBeautyContest[] = _("BEAUTY CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderCuteContest[] = _("CUTENESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderSmartContest[] = _("SMARTNESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderToughContest[] = _("TOUGHNESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderBattleTowerLv50[] = _("BATTLE TOWER LEVEL 50!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_ChooseLeaderBattleTowerOpenLv[] = _("BATTLE TOWER OPEN LEVEL!\nPlease choose the LEADER."); -static const u8 *const sChooseTrainerTexts[NUM_LINK_GROUP_TYPES] = +static const u8 *const sChooseTrainerTexts[NUM_LINK_GROUP_TYPES] = { [LINK_GROUP_SINGLE_BATTLE] = sText_ChooseTrainerSingleBattle, [LINK_GROUP_DOUBLE_BATTLE] = sText_ChooseTrainerDoubleBattle, @@ -511,53 +521,53 @@ static const u8 *const sChooseTrainerTexts[NUM_LINK_GROUP_TYPES] = [LINK_GROUP_BATTLE_TOWER_OPEN] = sText_ChooseLeaderBattleTowerOpenLv }; -ALIGNED(4) const u8 sText_SearchingForWirelessSystemWait[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait..."); -ALIGNED(4) const u8 sText_MustHaveTwoMonsForDoubleBattle[] = _("For a DOUBLE BATTLE, you must have\nat least two POKéMON.\p"); // Unused -ALIGNED(4) const u8 sText_AwaitingPlayersResponse[] = _("Awaiting {STR_VAR_1}'s response…"); -ALIGNED(4) const u8 sText_PlayerHasBeenAskedToRegisterYouPleaseWait[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait."); -ALIGNED(4) const u8 sText_AwaitingResponseFromWirelessSystem[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM."); -ALIGNED(4) const u8 sText_PleaseWaitForOtherTrainersToGather[] = _("Please wait for other TRAINERS to\ngather and get ready."); // Unused -ALIGNED(4) const u8 sText_NoCardsSharedRightNow[] = _("No CARDS appear to be shared \nright now."); -ALIGNED(4) const u8 sText_NoNewsSharedRightNow[] = _("No NEWS appears to be shared\nright now."); +ALIGNED(4) static const u8 sText_SearchingForWirelessSystemWait[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait..."); +ALIGNED(4) static const u8 sText_MustHaveTwoMonsForDoubleBattle[] = _("For a DOUBLE BATTLE, you must have\nat least two POKéMON.\p"); // Unused +ALIGNED(4) static const u8 sText_AwaitingPlayersResponse[] = _("Awaiting {STR_VAR_1}'s response…"); +ALIGNED(4) static const u8 sText_PlayerHasBeenAskedToRegisterYouPleaseWait[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait."); +ALIGNED(4) static const u8 sText_AwaitingResponseFromWirelessSystem[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM."); +ALIGNED(4) static const u8 sText_PleaseWaitForOtherTrainersToGather[] = _("Please wait for other TRAINERS to\ngather and get ready."); // Unused +ALIGNED(4) static const u8 sText_NoCardsSharedRightNow[] = _("No CARDS appear to be shared \nright now."); +ALIGNED(4) static const u8 sText_NoNewsSharedRightNow[] = _("No NEWS appears to be shared\nright now."); -const u8 *const sNoWonderSharedTexts[] = { +static const u8 *const sNoWonderSharedTexts[] = { sText_NoCardsSharedRightNow, sText_NoNewsSharedRightNow }; -ALIGNED(4) const u8 sText_Battle[] = _("BATTLE"); -ALIGNED(4) const u8 sText_Chat2[] = _("CHAT"); -ALIGNED(4) const u8 sText_Greetings[] = _("GREETINGS"); -ALIGNED(4) const u8 sText_Exit[] = _("EXIT"); -ALIGNED(4) const u8 sText_Exit2[] = _("EXIT"); -ALIGNED(4) const u8 sText_Info[] = _("INFO"); -ALIGNED(4) const u8 sText_NameWantedOfferLv[] = _("NAME{CLEAR_TO 0x3C}WANTED{CLEAR_TO 0x6E}OFFER{CLEAR_TO 0xC6}LV."); -ALIGNED(4) const u8 sText_SingleBattle[] = _("SINGLE BATTLE"); -ALIGNED(4) const u8 sText_DoubleBattle[] = _("DOUBLE BATTLE"); -ALIGNED(4) const u8 sText_MultiBattle[] = _("MULTI BATTLE"); -ALIGNED(4) const u8 sText_PokemonTrades[] = _("POKéMON TRADES"); -ALIGNED(4) const u8 sText_Chat[] = _("CHAT"); -ALIGNED(4) const u8 sText_Cards[] = _("CARDS"); -ALIGNED(4) const u8 sText_WonderCards[] = _("WONDER CARDS"); -ALIGNED(4) const u8 sText_WonderNews[] = _("WONDER NEWS"); -ALIGNED(4) const u8 sText_PokemonJump[] = _("POKéMON JUMP"); -ALIGNED(4) const u8 sText_BerryCrush[] = _("BERRY CRUSH"); -ALIGNED(4) const u8 sText_BerryPicking[] = _("BERRY-PICKING"); -ALIGNED(4) const u8 sText_Search[] = _("SEARCH"); -ALIGNED(4) const u8 sText_BerryBlender[] = _("BERRY BLENDER"); -ALIGNED(4) const u8 sText_RecordCorner[] = _("RECORD CORNER"); -ALIGNED(4) const u8 sText_CoolContest[] = _("COOL CONTEST"); -ALIGNED(4) const u8 sText_BeautyContest[] = _("BEAUTY CONTEST"); -ALIGNED(4) const u8 sText_CuteContest[] = _("CUTE CONTEST"); -ALIGNED(4) const u8 sText_SmartContest[] = _("SMART CONTEST"); -ALIGNED(4) const u8 sText_ToughContest[] = _("TOUGH CONTEST"); -ALIGNED(4) const u8 sText_BattleTowerLv50[] = _("BATTLE TOWER LV. 50"); -ALIGNED(4) const u8 sText_BattleTowerOpenLv[] = _("BATTLE TOWER OPEN LEVEL"); -ALIGNED(4) const u8 sText_ItsNormalCard[] = _("It's a NORMAL CARD."); -ALIGNED(4) const u8 sText_ItsBronzeCard[] = _("It's a BRONZE CARD!"); -ALIGNED(4) const u8 sText_ItsCopperCard[] = _("It's a COPPER CARD!"); -ALIGNED(4) const u8 sText_ItsSilverCard[] = _("It's a SILVER CARD!"); -ALIGNED(4) const u8 sText_ItsGoldCard[] = _("It's a GOLD CARD!"); +ALIGNED(4) static const u8 sText_Battle[] = _("BATTLE"); +ALIGNED(4) static const u8 sText_Chat2[] = _("CHAT"); +ALIGNED(4) static const u8 sText_Greetings[] = _("GREETINGS"); +ALIGNED(4) static const u8 sText_Exit[] = _("EXIT"); +ALIGNED(4) static const u8 sText_Exit2[] = _("EXIT"); +ALIGNED(4) static const u8 sText_Info[] = _("INFO"); +ALIGNED(4) static const u8 sText_NameWantedOfferLv[] = _("NAME{CLEAR_TO 60}WANTED{CLEAR_TO 110}OFFER{CLEAR_TO 198}LV."); +ALIGNED(4) static const u8 sText_SingleBattle[] = _("SINGLE BATTLE"); +ALIGNED(4) static const u8 sText_DoubleBattle[] = _("DOUBLE BATTLE"); +ALIGNED(4) static const u8 sText_MultiBattle[] = _("MULTI BATTLE"); +ALIGNED(4) static const u8 sText_PokemonTrades[] = _("POKéMON TRADES"); +ALIGNED(4) static const u8 sText_Chat[] = _("CHAT"); +ALIGNED(4) static const u8 sText_Cards[] = _("CARDS"); +ALIGNED(4) static const u8 sText_WonderCards[] = _("WONDER CARDS"); +ALIGNED(4) static const u8 sText_WonderNews[] = _("WONDER NEWS"); +ALIGNED(4) static const u8 sText_PokemonJump[] = _("POKéMON JUMP"); +ALIGNED(4) static const u8 sText_BerryCrush[] = _("BERRY CRUSH"); +ALIGNED(4) static const u8 sText_BerryPicking[] = _("BERRY-PICKING"); +ALIGNED(4) static const u8 sText_Search[] = _("SEARCH"); +ALIGNED(4) static const u8 sText_BerryBlender[] = _("BERRY BLENDER"); +ALIGNED(4) static const u8 sText_RecordCorner[] = _("RECORD CORNER"); +ALIGNED(4) static const u8 sText_CoolContest[] = _("COOL CONTEST"); +ALIGNED(4) static const u8 sText_BeautyContest[] = _("BEAUTY CONTEST"); +ALIGNED(4) static const u8 sText_CuteContest[] = _("CUTE CONTEST"); +ALIGNED(4) static const u8 sText_SmartContest[] = _("SMART CONTEST"); +ALIGNED(4) static const u8 sText_ToughContest[] = _("TOUGH CONTEST"); +ALIGNED(4) static const u8 sText_BattleTowerLv50[] = _("BATTLE TOWER LV. 50"); +ALIGNED(4) static const u8 sText_BattleTowerOpenLv[] = _("BATTLE TOWER OPEN LEVEL"); +ALIGNED(4) static const u8 sText_ItsNormalCard[] = _("It's a NORMAL CARD."); +ALIGNED(4) static const u8 sText_ItsBronzeCard[] = _("It's a BRONZE CARD!"); +ALIGNED(4) static const u8 sText_ItsCopperCard[] = _("It's a COPPER CARD!"); +ALIGNED(4) static const u8 sText_ItsSilverCard[] = _("It's a SILVER CARD!"); +ALIGNED(4) static const u8 sText_ItsGoldCard[] = _("It's a GOLD CARD!"); static const u8 *const sCardColorTexts[] = { sText_ItsNormalCard, @@ -567,17 +577,17 @@ static const u8 *const sCardColorTexts[] = { sText_ItsGoldCard }; -ALIGNED(4) const u8 sText_TrainerCardInfoPage1[] = _("This is {DYNAMIC 0} {DYNAMIC 1}'s\nTRAINER CARD…\l{DYNAMIC 2}\pPOKéDEX: {DYNAMIC 3}\nTIME: {DYNAMIC 4}:{DYNAMIC 5}\p"); -ALIGNED(4) const u8 sText_TrainerCardInfoPage2[] = _("BATTLES: WINS: {DYNAMIC 0} LOSSES: {DYNAMIC 2}\nTRADES: {DYNAMIC 3}\p“{DYNAMIC 4} {DYNAMIC 5}\n{DYNAMIC 6} {DYNAMIC 7}”\p"); -ALIGNED(4) const u8 sText_GladToMeetYouMale[] = _("{DYNAMIC 1}: Glad to have met you!{PAUSE 60}"); -ALIGNED(4) const u8 sText_GladToMeetYouFemale[] = _("{DYNAMIC 1}: Glad to meet you!{PAUSE 60}"); +ALIGNED(4) static const u8 sText_TrainerCardInfoPage1[] = _("This is {DYNAMIC 0} {DYNAMIC 1}'s\nTRAINER CARD…\l{DYNAMIC 2}\pPOKéDEX: {DYNAMIC 3}\nTIME: {DYNAMIC 4}:{DYNAMIC 5}\p"); +ALIGNED(4) static const u8 sText_TrainerCardInfoPage2[] = _("BATTLES: WINS: {DYNAMIC 0} LOSSES: {DYNAMIC 2}\nTRADES: {DYNAMIC 3}\p“{DYNAMIC 4} {DYNAMIC 5}\n{DYNAMIC 6} {DYNAMIC 7}”\p"); +ALIGNED(4) static const u8 sText_GladToMeetYouMale[] = _("{DYNAMIC 1}: Glad to have met you!{PAUSE 60}"); +ALIGNED(4) static const u8 sText_GladToMeetYouFemale[] = _("{DYNAMIC 1}: Glad to meet you!{PAUSE 60}"); -const u8 *const sGladToMeetYouTexts[GENDER_COUNT] = { +static const u8 *const sGladToMeetYouTexts[GENDER_COUNT] = { sText_GladToMeetYouMale, sText_GladToMeetYouFemale }; -ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {DYNAMIC 1}'s\nTRAINER CARD.{PAUSE 60}"); +ALIGNED(4) static const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {DYNAMIC 1}'s\nTRAINER CARD.{PAUSE 60}"); static const u8 *const sLinkGroupActivityNameTexts[] = { [ACTIVITY_NONE] = sText_EmptyString, @@ -586,8 +596,8 @@ static const u8 *const sLinkGroupActivityNameTexts[] = { [ACTIVITY_BATTLE_MULTI] = sText_MultiBattle, [ACTIVITY_TRADE] = sText_PokemonTrades, [ACTIVITY_CHAT] = sText_Chat, - [ACTIVITY_WONDER_CARD] = sText_WonderCards, - [ACTIVITY_WONDER_NEWS] = sText_WonderNews, + [ACTIVITY_WONDER_CARD_DUP] = sText_WonderCards, + [ACTIVITY_WONDER_NEWS_DUP] = sText_WonderNews, [ACTIVITY_CARD] = sText_Cards, [ACTIVITY_POKEMON_JUMP] = sText_PokemonJump, [ACTIVITY_BERRY_CRUSH] = sText_BerryCrush, @@ -601,8 +611,8 @@ static const u8 *const sLinkGroupActivityNameTexts[] = { [ACTIVITY_DECLINE] = sText_EmptyString, [ACTIVITY_NPCTALK] = sText_EmptyString, [ACTIVITY_PLYRTALK] = sText_EmptyString, - [ACTIVITY_WONDER_CARD2] = sText_WonderCards, - [ACTIVITY_WONDER_NEWS2] = sText_WonderNews, + [ACTIVITY_WONDER_CARD] = sText_WonderCards, + [ACTIVITY_WONDER_NEWS] = sText_WonderNews, [ACTIVITY_CONTEST_COOL] = sText_CoolContest, [ACTIVITY_CONTEST_BEAUTY] = sText_BeautyContest, [ACTIVITY_CONTEST_CUTE] = sText_CuteContest, @@ -612,12 +622,12 @@ static const u8 *const sLinkGroupActivityNameTexts[] = { }; static const struct WindowTemplate sWindowTemplate_BButtonCancel = { - .bg = 0x00, - .tilemapLeft = 0x00, - .tilemapTop = 0x00, - .width = 0x1E, - .height = 0x02, - .paletteNum = 0x0F, + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 15, .baseBlock = 0x0008 }; @@ -712,27 +722,27 @@ static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = { .cursorKind = 1 }; -const struct WindowTemplate gUnknown_082F0174 = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x03, - .width = 0x11, - .height = 0x0a, - .paletteNum = 0x0f, +static const struct WindowTemplate sWindowTemplate_GroupList = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 17, + .height = 10, + .paletteNum = 15, .baseBlock = 0x0044 }; -const struct WindowTemplate gUnknown_082F017C = { - .bg = 0x00, - .tilemapLeft = 0x14, - .tilemapTop = 0x03, - .width = 0x07, - .height = 0x04, - .paletteNum = 0x0f, +static const struct WindowTemplate sWindowTemplate_PlayerNameAndId = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 3, + .width = 7, + .height = 4, + .paletteNum = 15, .baseBlock = 0x00ee }; -const struct ListMenuItem gUnknown_082F0184[] = { +static const struct ListMenuItem sUnionRoomGroupsMenuItems[] = { { sText_EmptyString, 0 }, { sText_EmptyString, 1 }, { sText_EmptyString, 2 }, @@ -752,10 +762,10 @@ const struct ListMenuItem gUnknown_082F0184[] = { }; static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = { - .items = gUnknown_082F0184, + .items = sUnionRoomGroupsMenuItems, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups, - .totalItems = ARRAY_COUNT(gUnknown_082F0184), + .totalItems = ARRAY_COUNT(sUnionRoomGroupsMenuItems), .maxShowed = 5, .windowId = 0, .header_X = 0, @@ -773,27 +783,27 @@ static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = { }; static const struct WindowTemplate sWindowTemplate_InviteToActivity = { - .bg = 0x00, - .tilemapLeft = 0x14, - .tilemapTop = 0x05, - .width = 0x10, - .height = 0x08, - .paletteNum = 0x0f, + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 5, + .width = 16, + .height = 8, + .paletteNum = 15, .baseBlock = 0x0001 }; -const struct ListMenuItem gUnknown_082F0224[] = { - { sText_Greetings, 0x208 }, - { sText_Battle, 0x241 }, - { sText_Chat2, 0x245 }, - { sText_Exit, 0x040 } +static const struct ListMenuItem sInviteToActivityMenuItems[] = { + { sText_Greetings, ACTIVITY_CARD | LINK_GROUP_CAPACITY(0, 2)}, + { sText_Battle, ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM | LINK_GROUP_CAPACITY(0, 2)}, + { sText_Chat2, ACTIVITY_CHAT | IN_UNION_ROOM | LINK_GROUP_CAPACITY(0, 2)}, + { sText_Exit, ACTIVITY_NONE | IN_UNION_ROOM } }; static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = { - .items = gUnknown_082F0224, + .items = sInviteToActivityMenuItems, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, - .totalItems = ARRAY_COUNT(gUnknown_082F0224), + .totalItems = ARRAY_COUNT(sInviteToActivityMenuItems), .maxShowed = 4, .windowId = 0, .header_X = 0, @@ -811,12 +821,12 @@ static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = { }; static const struct WindowTemplate sWindowTemplate_RegisterForTrade = { - .bg = 0x00, - .tilemapLeft = 0x12, - .tilemapTop = 0x07, - .width = 0x10, - .height = 0x06, - .paletteNum = 0x0f, + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 7, + .width = 16, + .height = 6, + .paletteNum = 15, .baseBlock = 0x0001 }; @@ -847,13 +857,13 @@ static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = { .cursorKind = 0 }; -const struct WindowTemplate gUnknown_082F0294 = { - .bg = 0x00, - .tilemapLeft = 0x14, - .tilemapTop = 0x01, - .width = 0x10, - .height = 0x0c, - .paletteNum = 0x0f, +static const struct WindowTemplate sWindowTemplate_TradingBoardRequestType = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 1, + .width = 16, + .height = 12, + .paletteNum = 15, .baseBlock = 0x0001 }; @@ -899,23 +909,23 @@ static const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = { .cursorKind = 0 }; -static const struct WindowTemplate sWindowTemplate_TradingBoard = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x01, - .width = 0x1c, - .height = 0x02, - .paletteNum = 0x0d, +static const struct WindowTemplate sWindowTemplate_TradingBoardHeader = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 2, + .paletteNum = 13, .baseBlock = 0x0001 }; -const struct WindowTemplate gUnknown_082F034C = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x05, - .width = 0x1c, - .height = 0x0c, - .paletteNum = 0x0d, +static const struct WindowTemplate sWindowTemplate_TradingBoardMain = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 12, + .paletteNum = 13, .baseBlock = 0x0039 }; @@ -953,13 +963,14 @@ static const struct ListMenuTemplate sTradeBoardListMenuTemplate = { .cursorKind = 0 }; -const struct WindowTemplate UnrefWindowTemplate_082F03B4 = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x05, - .width = 0x1c, - .height = 0x0c, - .paletteNum = 0x0d, +// Unused +static const struct WindowTemplate sWindowTemplate_Unused = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 12, + .paletteNum = 13, .baseBlock = 0x0039 }; @@ -983,10 +994,10 @@ static const struct ListMenuItem sEmptyListMenuItems[] = { }; // Unused -static const struct ListMenuTemplate sUnknownListMenuTemplate = { +static const struct ListMenuTemplate sEmptyListMenuTemplate = { .items = sEmptyListMenuItems, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = nullsub_14, + .itemPrintFunc = ItemPrintFunc_EmptyList, .totalItems = ARRAY_COUNT(sEmptyListMenuItems), .maxShowed = 4, .windowId = 0, @@ -1004,54 +1015,54 @@ static const struct ListMenuTemplate sUnknownListMenuTemplate = { .cursorKind = 0 }; -const struct WirelessGnameUnamePair sWirelessGnameUnamePair_Dummy = {0}; +static const struct RfuPlayerData sUnionRoomPlayer_DummyRfu = {0}; -ALIGNED(4) const u8 sAcceptedActivityIds_SingleBattle[] = {ACTIVITY_BATTLE_SINGLE, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_DoubleBattle[] = {ACTIVITY_BATTLE_DOUBLE, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_MultiBattle[] = {ACTIVITY_BATTLE_MULTI, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_Trade[] = {ACTIVITY_TRADE, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_PokemonJump[] = {ACTIVITY_POKEMON_JUMP, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_BerryCrush[] = {ACTIVITY_BERRY_CRUSH, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_BerryPicking[] = {ACTIVITY_BERRY_PICK, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_WonderCard[] = {ACTIVITY_WONDER_CARD2, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_WonderNews[] = {ACTIVITY_WONDER_NEWS2, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_Resume[] = { - IN_UNION_ROOM | ACTIVITY_NONE, - IN_UNION_ROOM | ACTIVITY_BATTLE_SINGLE, - IN_UNION_ROOM | ACTIVITY_TRADE, - IN_UNION_ROOM | ACTIVITY_CHAT, - IN_UNION_ROOM | ACTIVITY_CARD, - IN_UNION_ROOM | ACTIVITY_ACCEPT, - IN_UNION_ROOM | ACTIVITY_DECLINE, - IN_UNION_ROOM | ACTIVITY_NPCTALK, - IN_UNION_ROOM | ACTIVITY_PLYRTALK, +ALIGNED(4) static const u8 sAcceptedActivityIds_SingleBattle[] = {ACTIVITY_BATTLE_SINGLE, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_DoubleBattle[] = {ACTIVITY_BATTLE_DOUBLE, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_MultiBattle[] = {ACTIVITY_BATTLE_MULTI, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_Trade[] = {ACTIVITY_TRADE, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_PokemonJump[] = {ACTIVITY_POKEMON_JUMP, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_BerryCrush[] = {ACTIVITY_BERRY_CRUSH, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_BerryPicking[] = {ACTIVITY_BERRY_PICK, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_WonderCard[] = {ACTIVITY_WONDER_CARD, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_WonderNews[] = {ACTIVITY_WONDER_NEWS, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_Resume[] = { + IN_UNION_ROOM | ACTIVITY_NONE, + IN_UNION_ROOM | ACTIVITY_BATTLE_SINGLE, + IN_UNION_ROOM | ACTIVITY_TRADE, + IN_UNION_ROOM | ACTIVITY_CHAT, + IN_UNION_ROOM | ACTIVITY_CARD, + IN_UNION_ROOM | ACTIVITY_ACCEPT, + IN_UNION_ROOM | ACTIVITY_DECLINE, + IN_UNION_ROOM | ACTIVITY_NPCTALK, + IN_UNION_ROOM | ACTIVITY_PLYRTALK, 0xff }; -ALIGNED(4) const u8 sAcceptedActivityIds_Init[] = {ACTIVITY_SEARCH, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_Unk11[] = { - ACTIVITY_BATTLE_SINGLE, - ACTIVITY_BATTLE_DOUBLE, - ACTIVITY_BATTLE_MULTI, - ACTIVITY_TRADE, - ACTIVITY_POKEMON_JUMP, - ACTIVITY_BERRY_CRUSH, - ACTIVITY_BERRY_PICK, - ACTIVITY_WONDER_CARD2, - ACTIVITY_WONDER_NEWS2, - ACTIVITY_SPIN_TRADE, +ALIGNED(4) static const u8 sAcceptedActivityIds_Init[] = {ACTIVITY_SEARCH, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_Unk11[] = { + ACTIVITY_BATTLE_SINGLE, + ACTIVITY_BATTLE_DOUBLE, + ACTIVITY_BATTLE_MULTI, + ACTIVITY_TRADE, + ACTIVITY_POKEMON_JUMP, + ACTIVITY_BERRY_CRUSH, + ACTIVITY_BERRY_PICK, + ACTIVITY_WONDER_CARD, + ACTIVITY_WONDER_NEWS, + ACTIVITY_SPIN_TRADE, 0xff }; -ALIGNED(4) const u8 sAcceptedActivityIds_RecordCorner[] = {ACTIVITY_RECORD_CORNER, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_BerryBlender[] = {ACTIVITY_BERRY_BLENDER, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_CoolContest[] = {ACTIVITY_CONTEST_COOL, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_BeautyContest[] = {ACTIVITY_CONTEST_BEAUTY, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_CuteContest[] = {ACTIVITY_CONTEST_CUTE, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_SmartContest[] = {ACTIVITY_CONTEST_SMART, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_ToughContest[] = {ACTIVITY_CONTEST_TOUGH, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_BattleTower[] = {ACTIVITY_BATTLE_TOWER, 0xff}; -ALIGNED(4) const u8 sAcceptedActivityIds_BattleTowerOpen[] = {ACTIVITY_BATTLE_TOWER_OPEN, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_RecordCorner[] = {ACTIVITY_RECORD_CORNER, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_BerryBlender[] = {ACTIVITY_BERRY_BLENDER, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_CoolContest[] = {ACTIVITY_CONTEST_COOL, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_BeautyContest[] = {ACTIVITY_CONTEST_BEAUTY, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_CuteContest[] = {ACTIVITY_CONTEST_CUTE, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_SmartContest[] = {ACTIVITY_CONTEST_SMART, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_ToughContest[] = {ACTIVITY_CONTEST_TOUGH, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_BattleTower[] = {ACTIVITY_BATTLE_TOWER, 0xff}; +ALIGNED(4) static const u8 sAcceptedActivityIds_BattleTowerOpen[] = {ACTIVITY_BATTLE_TOWER_OPEN, 0xff}; -const u8 *const sAcceptedActivityIds[NUM_LINK_GROUP_TYPES] = { +static const u8 *const sAcceptedActivityIds[NUM_LINK_GROUP_TYPES] = { [LINK_GROUP_SINGLE_BATTLE] = sAcceptedActivityIds_SingleBattle, [LINK_GROUP_DOUBLE_BATTLE] = sAcceptedActivityIds_DoubleBattle, [LINK_GROUP_MULTI_BATTLE] = sAcceptedActivityIds_MultiBattle, @@ -1076,28 +1087,28 @@ const u8 *const sAcceptedActivityIds[NUM_LINK_GROUP_TYPES] = { [LINK_GROUP_BATTLE_TOWER_OPEN] = sAcceptedActivityIds_BattleTowerOpen }; -static const u8 sLinkGroupToURoomActivity[NUM_LINK_GROUP_TYPES + 2] = +static const u8 sLinkGroupToURoomActivity[NUM_LINK_GROUP_TYPES + 2] = { - [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE, - [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE, - [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI, - [LINK_GROUP_TRADE] = ACTIVITY_TRADE, - [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP, - [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH, - [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK, - [LINK_GROUP_WONDER_CARD] = ACTIVITY_WONDER_CARD2, - [LINK_GROUP_WONDER_NEWS] = ACTIVITY_WONDER_NEWS2, - [LINK_GROUP_UNION_ROOM_RESUME] = ACTIVITY_NONE, - [LINK_GROUP_UNION_ROOM_INIT] = ACTIVITY_NONE, - [LINK_GROUP_UNK_11] = ACTIVITY_NONE, - [LINK_GROUP_RECORD_CORNER] = ACTIVITY_RECORD_CORNER, - [LINK_GROUP_BERRY_BLENDER] = ACTIVITY_BERRY_BLENDER, - [LINK_GROUP_UNK_14] = ACTIVITY_NONE, + [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE, + [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE, + [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI, + [LINK_GROUP_TRADE] = ACTIVITY_TRADE, + [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP, + [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH, + [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK, + [LINK_GROUP_WONDER_CARD] = ACTIVITY_WONDER_CARD, + [LINK_GROUP_WONDER_NEWS] = ACTIVITY_WONDER_NEWS, + [LINK_GROUP_UNION_ROOM_RESUME] = ACTIVITY_NONE, + [LINK_GROUP_UNION_ROOM_INIT] = ACTIVITY_NONE, + [LINK_GROUP_UNK_11] = ACTIVITY_NONE, + [LINK_GROUP_RECORD_CORNER] = ACTIVITY_RECORD_CORNER, + [LINK_GROUP_BERRY_BLENDER] = ACTIVITY_BERRY_BLENDER, + [LINK_GROUP_UNK_14] = ACTIVITY_NONE, [LINK_GROUP_COOL_CONTEST] = ACTIVITY_CONTEST_COOL, - [LINK_GROUP_BEAUTY_CONTEST] = ACTIVITY_CONTEST_BEAUTY, - [LINK_GROUP_CUTE_CONTEST] = ACTIVITY_CONTEST_CUTE, - [LINK_GROUP_SMART_CONTEST] = ACTIVITY_CONTEST_SMART, - [LINK_GROUP_TOUGH_CONTEST] = ACTIVITY_CONTEST_TOUGH, - [LINK_GROUP_BATTLE_TOWER] = ACTIVITY_BATTLE_TOWER, + [LINK_GROUP_BEAUTY_CONTEST] = ACTIVITY_CONTEST_BEAUTY, + [LINK_GROUP_CUTE_CONTEST] = ACTIVITY_CONTEST_CUTE, + [LINK_GROUP_SMART_CONTEST] = ACTIVITY_CONTEST_SMART, + [LINK_GROUP_TOUGH_CONTEST] = ACTIVITY_CONTEST_TOUGH, + [LINK_GROUP_BATTLE_TOWER] = ACTIVITY_BATTLE_TOWER, [LINK_GROUP_BATTLE_TOWER_OPEN] = ACTIVITY_BATTLE_TOWER_OPEN }; diff --git a/src/daycare.c b/src/daycare.c index ecf4730472..ad599d9af3 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -19,17 +19,18 @@ #include "party_menu.h" #include "list_menu.h" #include "overworld.h" +#include "item.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/region_map_sections.h" extern const struct Evolution gEvolutionTable[][EVOS_PER_MON]; -// this file's functions static void ClearDaycareMonMail(struct DaycareMail *mail); static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare); static u8 GetDaycareCompatibilityScore(struct DayCare *daycare); static void DaycarePrintMonInfo(u8 windowId, u32 daycareSlotId, u8 y); +static u8 ModifyBreedingScoreForOvalCharm(u8 score); // RAM buffers used to assist with BuildEggMoveset() EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0}; @@ -78,7 +79,7 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate = .lettersSpacing = 1, .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 1, + .fontId = FONT_NORMAL, .cursorKind = 0 }; @@ -97,7 +98,7 @@ u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest) u8 nickname[POKEMON_NAME_LENGTH * 2]; GetMonData(mon, MON_DATA_NICKNAME, nickname); - return StringCopy10(dest, nickname); + return StringCopy_Nickname(dest, nickname); } u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest) @@ -105,7 +106,7 @@ u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest) u8 nickname[POKEMON_NAME_LENGTH * 2]; GetBoxMonData(mon, MON_DATA_NICKNAME, nickname); - return StringCopy10(dest, nickname); + return StringCopy_Nickname(dest, nickname); } u8 CountPokemonInDaycare(struct DayCare *daycare) @@ -122,7 +123,7 @@ u8 CountPokemonInDaycare(struct DayCare *daycare) return count; } -void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDaycareMail *daycareMail) +void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDaycareMail *mixMail) { u8 i; u8 numDaycareMons = 0; @@ -133,17 +134,18 @@ void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDay { numDaycareMons++; if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_HELD_ITEM) == ITEM_NONE) - daycareMail->holdsItem[i] = FALSE; + mixMail->cantHoldItem[i] = FALSE; else - daycareMail->holdsItem[i] = TRUE; + mixMail->cantHoldItem[i] = TRUE; } else { - daycareMail->holdsItem[i] = TRUE; + // Daycare slot empty + mixMail->cantHoldItem[i] = TRUE; } } - daycareMail->numDaycareMons = numDaycareMons; + mixMail->numDaycareMons = numDaycareMons; } static s8 Daycare_FindEmptySpot(struct DayCare *daycare) @@ -165,7 +167,7 @@ static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycar { u8 mailId; - StringCopy(daycareMon->mail.OT_name, gSaveBlock2Ptr->playerName); + StringCopy(daycareMon->mail.otName, gSaveBlock2Ptr->playerName); GetMonNickname2(mon, daycareMon->mail.monName); StripExtCtrlCodes(daycareMon->mail.monName); daycareMon->mail.gameLanguage = GAME_LANGUAGE; @@ -270,7 +272,7 @@ static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon) gPlayerParty[PARTY_SIZE - 1] = pokemon; if (daycareMon->mail.message.itemId) { - GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycareMon->mail.message); + GiveMailToMon(&gPlayerParty[PARTY_SIZE - 1], &daycareMon->mail.message); ClearDaycareMonMail(&daycareMon->mail); } @@ -360,11 +362,11 @@ static void ClearDaycareMonMail(struct DaycareMail *mail) s32 i; for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) - mail->OT_name[i] = 0; + mail->otName[i] = 0; for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++) mail->monName[i] = 0; - ClearMailStruct(&mail->message); + ClearMail(&mail->message); } static void ClearDaycareMon(struct DaycareMon *daycareMon) @@ -693,7 +695,8 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru { for (j = 0; j < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; j++) { - if (sHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01_FOCUS_PUNCH + j) && CanMonLearnTMHM(egg, j)) + u16 moveId = ItemIdToBattleMoveId(ITEM_TM01 + j); + if (sHatchedEggFatherMoves[i] == moveId && CanLearnTeachableMove(GetMonData(egg, MON_DATA_SPECIES2), moveId)) { if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]); @@ -742,20 +745,41 @@ void RejectEggFromDayCare(void) static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare) { u16 motherItem, fatherItem; - if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL) - { - motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM); - fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM); - if (*species == SPECIES_WYNAUT && motherItem != ITEM_LAX_INCENSE && fatherItem != ITEM_LAX_INCENSE) - { - *species = SPECIES_WOBBUFFET; - } + motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM); + fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM); - if (*species == SPECIES_AZURILL && motherItem != ITEM_SEA_INCENSE && fatherItem != ITEM_SEA_INCENSE) - { - *species = SPECIES_MARILL; - } - } + if (*species == SPECIES_WYNAUT && motherItem != ITEM_LAX_INCENSE && fatherItem != ITEM_LAX_INCENSE) + *species = SPECIES_WOBBUFFET; + else if (*species == SPECIES_AZURILL && motherItem != ITEM_SEA_INCENSE && fatherItem != ITEM_SEA_INCENSE) + *species = SPECIES_MARILL; + #ifdef SPECIES_MUNCHLAX + else if (*species == SPECIES_MUNCHLAX && motherItem != ITEM_FULL_INCENSE && fatherItem != ITEM_FULL_INCENSE) + *species = SPECIES_SNORLAX; + #endif + #ifdef SPECIES_HAPPINY + else if (*species == SPECIES_HAPPINY && motherItem != ITEM_LUCK_INCENSE && fatherItem != ITEM_LUCK_INCENSE) + *species = SPECIES_CHANSEY; + #endif + #ifdef SPECIES_MIME_JR + else if (*species == SPECIES_MIME_JR && motherItem != ITEM_ODD_INCENSE && fatherItem != ITEM_ODD_INCENSE) + *species = SPECIES_MR_MIME; + #endif + #ifdef SPECIES_CHINGLING + else if (*species == SPECIES_CHINGLING && motherItem != ITEM_PURE_INCENSE && fatherItem != ITEM_PURE_INCENSE) + *species = SPECIES_CHIMECHO; + #endif + #ifdef SPECIES_BONSLY + else if (*species == SPECIES_BONSLY && motherItem != ITEM_ROCK_INCENSE && fatherItem != ITEM_ROCK_INCENSE) + *species = SPECIES_SUDOWOODO; + #endif + #ifdef SPECIES_BUDEW + else if (*species == SPECIES_BUDEW && motherItem != ITEM_ROSE_INCENSE && fatherItem != ITEM_ROSE_INCENSE) + *species = SPECIES_ROSELIA; + #endif + #ifdef SPECIES_MANTYKE + else if (*species == SPECIES_MANTYKE && motherItem != ITEM_WAVE_INCENSE && fatherItem != ITEM_WAVE_INCENSE) + *species = SPECIES_MANTINE; + #endif } static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *daycare) @@ -793,13 +817,25 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent eggSpecies = GetEggSpecies(species[parentSlots[0]]); if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & EGG_GENDER_MALE) - { eggSpecies = SPECIES_NIDORAN_M; - } - if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE) - { + else if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE) eggSpecies = SPECIES_VOLBEAT; - } + #if P_NIDORAN_M_DITTO_BREED >= GEN_5 + else if (eggSpecies == SPECIES_NIDORAN_M && !(daycare->offspringPersonality & EGG_GENDER_MALE)) + eggSpecies = SPECIES_NIDORAN_F; + else if (eggSpecies == SPECIES_VOLBEAT && !(daycare->offspringPersonality & EGG_GENDER_MALE)) + eggSpecies = SPECIES_ILLUMISE; + #endif + else if (eggSpecies == SPECIES_MANAPHY) + eggSpecies = SPECIES_PHIONE; + else if (eggSpecies == SPECIES_SINISTEA_ANTIQUE) + eggSpecies = SPECIES_SINISTEA; + else if (GET_BASE_SPECIES_ID(eggSpecies) == SPECIES_VIVILLON) + eggSpecies = SPECIES_SCATTERBUG; + else if (GET_BASE_SPECIES_ID(eggSpecies) == SPECIES_ROTOM) + eggSpecies = SPECIES_ROTOM; + else if (GET_BASE_SPECIES_ID(eggSpecies) == SPECIES_FURFROU) + eggSpecies = SPECIES_FURFROU; // Make Ditto the "mother" slot if the other daycare mon is male. if (species[parentSlots[1]] == SPECIES_DITTO && GetBoxMonGender(&daycare->mons[parentSlots[0]].mon) != MON_FEMALE) @@ -900,7 +936,7 @@ static bool8 TryProduceOrHatchEgg(struct DayCare *daycare) // Check if an egg should be produced if (daycare->offspringPersonality == 0 && validEggs == DAYCARE_MON_COUNT && (daycare->mons[1].steps & 0xFF) == 0xFF) { - u8 compatibility = GetDaycareCompatibilityScore(daycare); + u8 compatibility = ModifyBreedingScoreForOvalCharm(GetDaycareCompatibilityScore(daycare)); if (compatibility > (Random() * 100u) / USHRT_MAX) TriggerPendingDaycareEgg(); } @@ -928,7 +964,7 @@ static bool8 TryProduceOrHatchEgg(struct DayCare *daycare) SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &eggCycles); } - else + else { gSpecialVar_0x8004 = i; return TRUE; @@ -1194,7 +1230,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y) printer.currentChar = text; printer.windowId = windowId; - printer.fontId = 1; + printer.fontId = FONT_NORMAL; printer.x = x; printer.y = y; printer.currentX = x; @@ -1207,7 +1243,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y) printer.bgColor = 1; printer.shadowColor = 3; - AddTextPrinter(&printer, 0xFF, NULL); + AddTextPrinter(&printer, TEXT_SKIP_DRAW, NULL); } static void DaycarePrintMonNickname(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y) @@ -1230,7 +1266,7 @@ static void DaycarePrintMonLvl(struct DayCare *daycare, u8 windowId, u32 daycare level = GetLevelAfterDaycareSteps(&daycare->mons[daycareSlotId].mon, daycare->mons[daycareSlotId].steps); ConvertIntToDecimalStringN(intText, level, STR_CONV_MODE_LEFT_ALIGN, 3); StringAppend(lvlText, intText); - x = GetStringRightAlignXOffset(1, lvlText, 112); + x = GetStringRightAlignXOffset(FONT_NORMAL, lvlText, 112); DaycareAddTextPrinter(windowId, lvlText, x, y); } @@ -1266,7 +1302,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } else if (JOY_NEW(B_BUTTON)) { @@ -1275,7 +1311,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } } @@ -1293,7 +1329,7 @@ void ShowDaycareLevelMenu(void) menuTemplate.windowId = windowId; listMenuTaskId = ListMenuInit(&menuTemplate, 0, 0); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); daycareMenuTaskId = CreateTask(Task_HandleDaycareLevelMenuInput, 3); gTasks[daycareMenuTaskId].tMenuListTaskId = listMenuTaskId; @@ -1308,3 +1344,22 @@ void ChooseSendDaycareMon(void) ChooseMonForDaycare(); gMain.savedCallback = CB2_ReturnToField; } + +static u8 ModifyBreedingScoreForOvalCharm(u8 score) +{ + if (CheckBagHasItem(ITEM_OVAL_CHARM, 1)) + { + switch (score) + { + case 20: + return 40; + case 50: + return 80; + case 70: + return 88; + } + } + + return score; +} + diff --git a/src/decompress.c b/src/decompress.c index 4d917e8d6a..c94f748629 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -3,6 +3,7 @@ #include "data.h" #include "decompress.h" #include "pokemon.h" +#include "pokemon_debug.h" #include "text.h" EWRAM_DATA ALIGNED(4) u8 gDecompressionBuffer[0x4000] = {0}; @@ -44,22 +45,22 @@ void LoadCompressedSpritePalette(const struct CompressedSpritePalette *src) struct SpritePalette dest; LZ77UnCompWram(src->data, gDecompressionBuffer); - dest.data = (void*) gDecompressionBuffer; + dest.data = (void *) gDecompressionBuffer; dest.tag = src->tag; LoadSpritePalette(&dest); } -void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer) +void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *src, void *buffer) { struct SpritePalette dest; - LZ77UnCompWram(a->data, buffer); + LZ77UnCompWram(src->data, buffer); dest.data = buffer; - dest.tag = a->tag; + dest.tag = src->tag; LoadSpritePalette(&dest); } -void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species) +void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void *buffer, s32 species) { if (species > NUM_SPECIES) LZ77UnCompWram(gMonFrontPicTable[0].data, buffer); @@ -69,25 +70,18 @@ void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffe void DecompressPicFromTableGender(void* buffer, s32 species, u32 personality) { - if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + if (ShouldShowFemaleDifferences(species, personality)) DecompressPicFromTable(&gMonFrontPicTableFemale[species], buffer, species); else DecompressPicFromTable(&gMonFrontPicTable[species], buffer, species); } -void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality) +void HandleLoadSpecialPokePic(bool32 isFrontPic, void *dest, s32 species, u32 personality) { - bool8 isFrontPic; - - if (src == &gMonFrontPicTable[species]) - isFrontPic = TRUE; // frontPic - else - isFrontPic = FALSE; // backPic - - LoadSpecialPokePic(src, dest, species, personality, isFrontPic); + LoadSpecialPokePic(dest, species, personality, isFrontPic); } -void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic) +void LoadSpecialPokePic(void *dest, s32 species, u32 personality, bool8 isFrontPic) { if (species == SPECIES_UNOWN) { @@ -99,8 +93,13 @@ void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 LZ77UnCompWram(gMonFrontPicTable[id].data, dest); } else if (species > NUM_SPECIES) // is species unknown? draw the ? icon - LZ77UnCompWram(gMonFrontPicTable[0].data, dest); - else if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + { + if (isFrontPic) + LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + else + LZ77UnCompWram(gMonBackPicTable[0].data, dest); + } + else if (ShouldShowFemaleDifferences(species, personality)) { if (isFrontPic) LZ77UnCompWram(gMonFrontPicTableFemale[species].data, dest); @@ -108,7 +107,12 @@ void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 LZ77UnCompWram(gMonBackPicTableFemale[species].data, dest); } else - LZ77UnCompWram(src->data, dest); + { + if (isFrontPic) + LZ77UnCompWram(gMonFrontPicTable[species].data, dest); + else + LZ77UnCompWram(gMonBackPicTable[species].data, dest); + } DrawSpindaSpots(species, personality, dest, isFrontPic); } @@ -118,7 +122,7 @@ void Unused_LZDecompressWramIndirect(const void **src, void *dest) LZ77UnCompWram(*src, dest); } -void sub_803471C(s32 object_size, s32 object_count, u8 *src_tiles, u8 *dest_tiles) +static void StitchObjectsOn8x8Canvas(s32 object_size, s32 object_count, u8 *src_tiles, u8 *dest_tiles) { /* This function appears to emulate behaviour found in the GB(C) versions regarding how the Pokemon images @@ -268,12 +272,12 @@ u32 GetDecompressedDataSize(const u32 *ptr) return (ptr8[3] << 16) | (ptr8[2] << 8) | (ptr8[1]); } -bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet* src) +bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet *src) { struct SpriteSheet dest; - void* buffer; + void *buffer; - buffer = AllocZeroed(*((u32*)(&src->data[0])) >> 8); + buffer = AllocZeroed(*((u32 *)(&src->data[0])) >> 8); LZ77UnCompWram(src->data, buffer); dest.data = buffer; @@ -288,9 +292,9 @@ bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet* src bool8 LoadCompressedSpritePaletteUsingHeap(const struct CompressedSpritePalette *src) { struct SpritePalette dest; - void* buffer; + void *buffer; - buffer = AllocZeroed(*((u32*)(&src->data[0])) >> 8); + buffer = AllocZeroed(*((u32 *)(&src->data[0])) >> 8); LZ77UnCompWram(src->data, buffer); dest.data = buffer; dest.tag = src->tag; diff --git a/src/decoration.c b/src/decoration.c index 39858e9578..cc740f189e 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -41,7 +41,7 @@ #define PLACE_DECORATION_SELECTOR_TAG 0xbe5 #define PLACE_DECORATION_PLAYER_TAG 0x008 -#define NUM_DECORATION_FLAGS (FLAG_DECORATION_14 - FLAG_DECORATION_0) +#define NUM_DECORATION_FLAGS (FLAG_DECORATION_14 - FLAG_DECORATION_1 + 1) #define tCursorX data[0] #define tCursorY data[1] @@ -315,7 +315,7 @@ static const struct ListMenuTemplate sDecorationItemsListMenuTemplate = .lettersSpacing = FALSE, .itemVerticalPadding = 0, .scrollMultiple = FALSE, - .fontId = 7 + .fontId = FONT_NARROW }; #include "data/decoration/icon.h" @@ -356,7 +356,7 @@ static const struct SpriteFrameImage sDecorSelectorSpriteFrameImages = static const struct SpriteTemplate sDecorationSelectorSpriteTemplate = { - 0xFFFF, + TAG_NONE, PLACE_DECORATION_SELECTOR_TAG, &sDecorSelectorOam, sDecorSelectorAnimCmds, @@ -440,7 +440,7 @@ static const struct YesNoFuncTable sStopPuttingAwayDecorationsYesNoFunctions = .noFunc = ContinuePuttingAwayDecorations, }; -static const u8 sDecorationPuttingAwayCursor[] = INCBIN_U8("graphics/misc/decoration_putting_away_cursor.4bpp"); +static const u8 sDecorationPuttingAwayCursor[] = INCBIN_U8("graphics/decorations/put_away_cursor.4bpp"); static const struct SpritePalette sSpritePal_PuttingAwayCursorBrendan = { @@ -487,7 +487,7 @@ static const struct SpriteFrameImage sPuttingAwayCursorPicTable = static const struct SpriteTemplate sPuttingAwayCursorSpriteTemplate = { - 0xFFFF, + TAG_NONE, PLACE_DECORATION_PLAYER_TAG, &sPuttingAwayCursorOamData, sPuttingAwayCursorAnimCmds, @@ -557,13 +557,13 @@ static void AddDecorationActionsWindow(void) { u8 windowId = AddDecorationWindow(WINDOW_MAIN_MENU); PrintMenuTable(windowId, ARRAY_COUNT(sDecorationMainMenuActions), sDecorationMainMenuActions); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, ARRAY_COUNT(sDecorationMainMenuActions), sDecorationActionsCursorPos); + InitMenuInUpperLeftCornerNormal(windowId, ARRAY_COUNT(sDecorationMainMenuActions), sDecorationActionsCursorPos); } static void InitDecorationActionsWindow(void) { sDecorationActionsCursorPos = 0; - ScriptContext2_Enable(); + LockPlayerFieldControls(); AddDecorationActionsWindow(); PrintCurMainMenuDescription(); } @@ -615,7 +615,7 @@ static void HandleDecorationActionsMenuInput(u8 taskId) static void PrintCurMainMenuDescription(void) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sSecretBasePCMenuItemDescriptions[sDecorationActionsCursorPos], 0, 0, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sSecretBasePCMenuItemDescriptions[sDecorationActionsCursorPos], 0, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } static void DecorationMenuAction_Decorate(u8 taskId) @@ -643,7 +643,7 @@ static void DecorationMenuAction_PutAway(u8 taskId) else { RemoveDecorationWindow(WINDOW_MAIN_MENU); - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); FadeScreen(FADE_TO_BLACK, 0); gTasks[taskId].tState = 0; gTasks[taskId].func = Task_ContinuePuttingAwayDecorations; @@ -670,7 +670,7 @@ static void DecorationMenuAction_Cancel(u8 taskId) RemoveDecorationWindow(WINDOW_MAIN_MENU); if (!sDecorationContext.isPlayerRoom) { - ScriptContext1_SetupScript(SecretBase_EventScript_PCCancel); + ScriptContext_SetupScript(SecretBase_EventScript_PCCancel); DestroyTask(taskId); } else @@ -688,7 +688,7 @@ static void ReturnToDecorationActionsAfterInvalidSelection(u8 taskId) static void SecretBasePC_PrepMenuForSelectingStoredDecors(u8 taskId) { LoadPalette(sDecorationMenuPalette, 0xd0, 0x20); - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); RemoveDecorationWindow(WINDOW_MAIN_MENU); InitDecorationCategoriesWindow(taskId); } @@ -697,7 +697,7 @@ static void InitDecorationCategoriesWindow(u8 taskId) { u8 windowId = AddDecorationWindow(WINDOW_DECORATION_CATEGORIES); PrintDecorationCategoryMenuItems(taskId); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, DECORCAT_COUNT + 1, sCurDecorationCategory); + InitMenuInUpperLeftCornerNormal(windowId, DECORCAT_COUNT + 1, sCurDecorationCategory); gTasks[taskId].func = HandleDecorationCategoriesMenuInput; } @@ -705,7 +705,7 @@ static void ReinitDecorationCategoriesWindow(u8 taskId) { FillWindowPixelBuffer(sDecorMenuWindowIds[WINDOW_DECORATION_CATEGORIES], PIXEL_FILL(1)); PrintDecorationCategoryMenuItems(taskId); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sDecorMenuWindowIds[WINDOW_DECORATION_CATEGORIES], DECORCAT_COUNT + 1, sCurDecorationCategory); + InitMenuInUpperLeftCornerNormal(sDecorMenuWindowIds[WINDOW_DECORATION_CATEGORIES], DECORCAT_COUNT + 1, sCurDecorationCategory); gTasks[taskId].func = HandleDecorationCategoriesMenuInput; } @@ -723,12 +723,12 @@ static void PrintDecorationCategoryMenuItems(u8 taskId) { // Only DOLL and CUSHION decorations are enabled when decorating the player's room. if (shouldDisable == TRUE && i != DECORCAT_DOLL && i != DECORCAT_CUSHION) - PrintDecorationCategoryMenuItem(windowId, i, 8, i * 16, TRUE, TEXT_SPEED_FF); + PrintDecorationCategoryMenuItem(windowId, i, 8, i * 16, TRUE, TEXT_SKIP_DRAW); else - PrintDecorationCategoryMenuItem(windowId, i, 8, i * 16, FALSE, TEXT_SPEED_FF); + PrintDecorationCategoryMenuItem(windowId, i, 8, i * 16, FALSE, TEXT_SKIP_DRAW); } - AddTextPrinterParameterized(windowId, 1, gTasks[taskId].tDecorationMenuCommand == DECOR_MENU_TRADE ? gText_Exit : gText_Cancel, 8, i * 16 + 1, 0, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gTasks[taskId].tDecorationMenuCommand == DECOR_MENU_TRADE ? gText_Exit : gText_Cancel, 8, i * 16 + 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); } @@ -742,12 +742,12 @@ static void PrintDecorationCategoryMenuItem(u8 winid, u8 category, u8 x, u8 y, b ColorMenuItemString(gStringVar4, disabled); str = StringLength(gStringVar4) + gStringVar4; StringCopy(str, sDecorationCategoryNames[category]); - AddTextPrinterParameterized(winid, 1, gStringVar4, x, y, speed, NULL); + AddTextPrinterParameterized(winid, FONT_NORMAL, gStringVar4, x, y, speed, NULL); str = ConvertIntToDecimalStringN(str, GetNumOwnedDecorationsInCategory(category), STR_CONV_MODE_RIGHT_ALIGN, 2); *(str++) = CHAR_SLASH; ConvertIntToDecimalStringN(str, gDecorationInventories[category].size, STR_CONV_MODE_RIGHT_ALIGN, 2); - x = GetStringRightAlignXOffset(1, gStringVar4, width); - AddTextPrinterParameterized(winid, 1, gStringVar4, x, y, speed, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, width); + AddTextPrinterParameterized(winid, FONT_NORMAL, gStringVar4, x, y, speed, NULL); } static void ColorMenuItemString(u8 *str, bool8 disabled) @@ -810,7 +810,7 @@ static void SelectDecorationCategory(u8 taskId) static void ReturnToDecorationCategoriesAfterInvalidSelection(u8 taskId) { - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); InitDecorationCategoriesWindow(taskId); } @@ -826,7 +826,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId) { RemoveDecorationWindow(WINDOW_DECORATION_CATEGORIES); AddDecorationActionsWindow(); - DrawDialogueFrame(0, 0); + DrawDialogueFrame(0, FALSE); PrintCurMainMenuDescription(); gTasks[taskId].func = HandleDecorationActionsMenuInput; } @@ -834,7 +834,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId) void ShowDecorationCategoriesWindow(u8 taskId) { LoadPalette(sDecorationMenuPalette, 0xd0, 0x20); - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); gTasks[taskId].tDecorationMenuCommand = DECOR_MENU_TRADE; sCurDecorationCategory = DECORCAT_DESK; InitDecorationCategoriesWindow(taskId); @@ -1024,7 +1024,7 @@ static void PrintDecorationItemDescription(s32 itemIndex) else str = gDecorations[gCurDecorationItems[itemIndex]].description; - AddTextPrinterParameterized(windowId, 1, str, 0, 1, 0, 0); + AddTextPrinterParameterized(windowId, FONT_NORMAL, str, 0, 1, 0, 0); } static void RemoveDecorationItemsOtherWindows(void) @@ -1141,7 +1141,7 @@ static void Task_ShowDecorationItemsWindow(u8 taskId) static void DontTossDecoration(u8 taskId) { - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); gTasks[taskId].func = Task_ShowDecorationItemsWindow; } @@ -1149,7 +1149,7 @@ static void ReturnToDecorationItemsAfterInvalidSelection(u8 taskId) { if (JOY_NEW(A_BUTTON | B_BUTTON)) { - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); AddDecorationWindow(WINDOW_DECORATION_CATEGORIES); ShowDecorationItemsWindow(taskId); } @@ -1175,7 +1175,7 @@ static void SetInitialPositions(u8 taskId) static void WarpToInitialPosition(u8 taskId) { DrawWholeMapView(); - SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, gTasks[taskId].tInitialX, gTasks[taskId].tInitialY); + SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE, gTasks[taskId].tInitialX, gTasks[taskId].tInitialY); WarpIntoMap(); } @@ -1185,10 +1185,10 @@ static u16 GetDecorationElevation(u8 decoration, u8 tileIndex) switch (decoration) { case DECOR_STAND: - elevation = sDecorationStandElevations[tileIndex] << METATILE_ELEVATION_SHIFT; + elevation = sDecorationStandElevations[tileIndex] << MAPGRID_ELEVATION_SHIFT; return elevation; case DECOR_SLIDE: - elevation = sDecorationSlideElevation[tileIndex] << METATILE_ELEVATION_SHIFT; + elevation = sDecorationSlideElevation[tileIndex] << MAPGRID_ELEVATION_SHIFT; return elevation; default: return elevation; @@ -1199,7 +1199,7 @@ static void ShowDecorationOnMap_(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight, { u16 i, j; s16 x, y; - u16 behavior; + u16 attributes; u16 impassableFlag; u16 overlapsWall; u16 elevation; @@ -1210,9 +1210,10 @@ static void ShowDecorationOnMap_(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight, for (i = 0; i < decWidth; i++) { x = mapX + i; - behavior = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + gDecorations[decoration].tiles[j * decWidth + i]); - if (MetatileBehavior_IsSecretBaseImpassable(behavior) == TRUE || (gDecorations[decoration].permission != DECORPERM_PASS_FLOOR && (behavior >> METATILE_ELEVATION_SHIFT))) - impassableFlag = METATILE_COLLISION_MASK; + attributes = GetMetatileAttributesById(NUM_TILES_IN_PRIMARY + gDecorations[decoration].tiles[j * decWidth + i]); + if (MetatileBehavior_IsSecretBaseImpassable(attributes & METATILE_ATTR_BEHAVIOR_MASK) == TRUE + || (gDecorations[decoration].permission != DECORPERM_PASS_FLOOR && (attributes >> METATILE_ATTR_LAYER_SHIFT) != METATILE_LAYER_TYPE_NORMAL)) + impassableFlag = MAPGRID_COLLISION_MASK; else impassableFlag = 0; @@ -1395,9 +1396,9 @@ static void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecoration x -= 8; if (gSaveBlock2Ptr->playerGender == MALE) - sDecor_CameraSpriteObjectIdx2 = AddPseudoObjectEvent(OBJ_EVENT_GFX_BRENDAN_DECORATING, SpriteCallbackDummy, x, 72, 0); + sDecor_CameraSpriteObjectIdx2 = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_BRENDAN_DECORATING, SpriteCallbackDummy, x, 72, 0); else - sDecor_CameraSpriteObjectIdx2 = AddPseudoObjectEvent(OBJ_EVENT_GFX_MAY_DECORATING, SpriteCallbackDummy, x, 72, 0); + sDecor_CameraSpriteObjectIdx2 = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MAY_DECORATING, SpriteCallbackDummy, x, 72, 0); gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1; DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]); @@ -1471,24 +1472,26 @@ static void AttemptCancelPlaceDecoration(u8 taskId) DisplayItemMessageOnField(taskId, gStringVar4, CancelDecoratingPrompt); } -// Note: behaviorBy is pre-anded with METATILE_ELEVATION_MASK. -static bool8 IsNonBlockNonElevated(u8 behaviorAt, u16 behaviorBy) +static bool8 IsSecretBaseTrainerSpot(u8 behaviorAt, u16 layerType) { - if (MetatileBehavior_IsBlockDecoration(behaviorAt) != TRUE || behaviorBy != 0) + if (!(MetatileBehavior_IsSecretBaseTrainerSpot(behaviorAt) == TRUE && layerType == METATILE_LAYER_TYPE_NORMAL)) return FALSE; return TRUE; } -static bool8 IsntInitialPosition(u8 taskId, s16 x, s16 y, u16 behaviorBy) +// Can't place decoration where the player was standing when they interacted with the PC +static bool8 IsntInitialPosition(u8 taskId, s16 x, s16 y, u16 layerType) { - if (x == gTasks[taskId].tInitialX + 7 && y == gTasks[taskId].tInitialY + 7 && behaviorBy != 0) + if (x == gTasks[taskId].tInitialX + MAP_OFFSET + && y == gTasks[taskId].tInitialY + MAP_OFFSET + && layerType != METATILE_LAYER_TYPE_NORMAL) return FALSE; return TRUE; } static bool8 IsFloorOrBoardAndHole(u16 behaviorAt, const struct Decoration *decoration) { - if (MetatileBehavior_IsBlockDecoration(behaviorAt) != TRUE) + if (MetatileBehavior_IsSecretBaseTrainerSpot(behaviorAt) != TRUE) { if (decoration->id == DECOR_SOLID_BOARD && MetatileBehavior_IsSecretBaseHole(behaviorAt) == TRUE) return TRUE; @@ -1505,7 +1508,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) u8 i; u8 j; u8 behaviorAt; - u16 behaviorBy; + u16 layerType; u8 mapY; u8 mapX; s16 curY; @@ -1524,15 +1527,15 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ELEVATION_MASK; + layerType = GetMetatileAttributesById(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ATTR_LAYER_MASK; if (!IsFloorOrBoardAndHole(behaviorAt, decoration)) return FALSE; - if (!IsntInitialPosition(taskId, curX, curY, behaviorBy)) + if (!IsntInitialPosition(taskId, curX, curY, layerType)) return FALSE; - behaviorAt = GetObjectEventIdByXYZ(curX, curY, 0); - if (behaviorAt != 0 && behaviorAt != 16) + behaviorAt = GetObjectEventIdByPosition(curX, curY, 0); + if (behaviorAt != 0 && behaviorAt != OBJECT_EVENTS_COUNT) return FALSE; } } @@ -1545,14 +1548,14 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ELEVATION_MASK; - if (!MetatileBehavior_IsNormal(behaviorAt) && !IsNonBlockNonElevated(behaviorAt, behaviorBy)) + layerType = GetMetatileAttributesById(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ATTR_LAYER_MASK; + if (!MetatileBehavior_IsNormal(behaviorAt) && !IsSecretBaseTrainerSpot(behaviorAt, layerType)) return FALSE; - if (!IsntInitialPosition(taskId, curX, curY, behaviorBy)) + if (!IsntInitialPosition(taskId, curX, curY, layerType)) return FALSE; - if (GetObjectEventIdByXYZ(curX, curY, 0) != 16) + if (GetObjectEventIdByPosition(curX, curY, 0) != OBJECT_EVENTS_COUNT) return FALSE; } } @@ -1562,15 +1565,15 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + decoration->tiles[j]) & METATILE_ELEVATION_MASK; + layerType = GetMetatileAttributesById(NUM_TILES_IN_PRIMARY + decoration->tiles[j]) & METATILE_ATTR_LAYER_MASK; if (!MetatileBehavior_IsNormal(behaviorAt) && !MetatileBehavior_IsSecretBaseNorthWall(behaviorAt)) return FALSE; - if (!IsntInitialPosition(taskId, curX, curY, behaviorBy)) + if (!IsntInitialPosition(taskId, curX, curY, layerType)) return FALSE; - behaviorAt = GetObjectEventIdByXYZ(curX, curY, 0); - if (behaviorAt != 0 && behaviorAt != 16) + behaviorAt = GetObjectEventIdByPosition(curX, curY, 0); + if (behaviorAt != 0 && behaviorAt != OBJECT_EVENTS_COUNT) return FALSE; } break; @@ -1606,7 +1609,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) return FALSE; } - if (GetObjectEventIdByXYZ(curX, curY, 0) != 16) + if (GetObjectEventIdByPosition(curX, curY, 0) != OBJECT_EVENTS_COUNT) return FALSE; } break; @@ -1637,7 +1640,7 @@ static void PlaceDecorationPrompt(u8 taskId) static void PlaceDecoration(u8 taskId) { - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); PlaceDecoration_(taskId); if (gDecorations[gCurDecorationItems[gCurDecorationIndex]].permission != DECORPERM_SPRITE) { @@ -1645,9 +1648,9 @@ static void PlaceDecoration(u8 taskId) } else { - sCurDecorMapX = gTasks[taskId].tCursorX - 7; - sCurDecorMapY = gTasks[taskId].tCursorY - 7; - ScriptContext1_SetupScript(SecretBase_EventScript_SetDecoration); + sCurDecorMapX = gTasks[taskId].tCursorX - MAP_OFFSET; + sCurDecorMapY = gTasks[taskId].tCursorY - MAP_OFFSET; + ScriptContext_SetupScript(SecretBase_EventScript_SetDecoration); } gSprites[sDecor_CameraSpriteObjectIdx1].y += 2; @@ -1666,7 +1669,7 @@ static void PlaceDecoration_(u8 taskId) if (sDecorationContext.items[i] == DECOR_NONE) { sDecorationContext.items[i] = gCurDecorationItems[gCurDecorationIndex]; - sDecorationContext.pos[i] = ((gTasks[taskId].tCursorX - 7) << 4) + (gTasks[taskId].tCursorY - 7); + sDecorationContext.pos[i] = ((gTasks[taskId].tCursorX - MAP_OFFSET) << 4) + (gTasks[taskId].tCursorY - MAP_OFFSET); break; } } @@ -1703,7 +1706,7 @@ static void CancelDecoratingPrompt(u8 taskId) static void CancelDecorating(u8 taskId) { - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); CancelDecorating_(taskId); } @@ -1719,7 +1722,7 @@ static void c1_overworld_prev_quest(u8 taskId) switch (gTasks[taskId].tState) { case 0: - ScriptContext2_Enable(); + LockPlayerFieldControls(); if (!gPaletteFade.active) { WarpToInitialPosition(taskId); @@ -1746,11 +1749,11 @@ static void Task_InitDecorationItemsWindow(u8 taskId) tState++; break; case 1: - ScriptContext1_SetupScript(SecretBase_EventScript_InitDecorations); + ScriptContext_SetupScript(SecretBase_EventScript_InitDecorations); tState++; break; case 2: - ScriptContext2_Enable(); + LockPlayerFieldControls(); tState++; break; case 3: @@ -1764,7 +1767,7 @@ static void FieldCB_InitDecorationItemsWindow(void) { u8 taskId; - ScriptContext2_Enable(); + LockPlayerFieldControls(); FadeInFromBlack(); taskId = CreateTask(Task_InitDecorationItemsWindow, 8); AddDecorationItemsWindow(taskId); @@ -1888,7 +1891,7 @@ static void Task_SelectLocation(u8 taskId) static void ContinueDecorating(u8 taskId) { - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(0, TRUE); gSprites[sDecor_CameraSpriteObjectIdx1].data[7] = 0; gTasks[taskId].tButton = 0; gTasks[taskId].func = Task_SelectLocation; @@ -1982,7 +1985,7 @@ static void SetDecorSelectionBoxOamAttributes(u8 decorShape) sDecorSelectorOam.y = 0; sDecorSelectorOam.affineMode = ST_OAM_AFFINE_OFF; sDecorSelectorOam.objMode = ST_OAM_OBJ_NORMAL; - sDecorSelectorOam.mosaic = 0; + sDecorSelectorOam.mosaic = FALSE; sDecorSelectorOam.bpp = ST_OAM_4BPP; sDecorSelectorOam.shape = sDecorationMovementInfo[decorShape].shape; sDecorSelectorOam.x = 0; @@ -2027,7 +2030,7 @@ static u8 gpu_pal_decompress_alloc_tag_and_upload(struct PlaceDecorationGraphics ClearPlaceDecorationGraphicsDataBuffer(data); data->decoration = &gDecorations[decor]; if (data->decoration->permission == DECORPERM_SPRITE) - return AddPseudoObjectEvent(data->decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1); + return CreateObjectGraphicsSprite(data->decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1); FreeSpritePaletteByTag(PLACE_DECORATION_SELECTOR_TAG); SetDecorSelectionMetatiles(data); @@ -2106,7 +2109,7 @@ static u8 AddDecorationIconObjectFromObjectEvent(u16 tilesTag, u16 paletteTag, u } else { - spriteId = AddPseudoObjectEvent(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1); + spriteId = CreateObjectGraphicsSprite(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1); } return spriteId; } @@ -2223,7 +2226,7 @@ static void ClearRearrangementNonSprites(void) { for (x = 0; x < sDecorRearrangementDataBuffer[i].width; x++) { - MapGridSetMetatileEntryAt(posX + 7 + x, posY + 7 - y, gMapHeader.mapLayout->map[posX + x + gMapHeader.mapLayout->width * (posY - y)] | 0x3000); + MapGridSetMetatileEntryAt(posX + MAP_OFFSET + x, posY + MAP_OFFSET - y, gMapHeader.mapLayout->map[posX + x + gMapHeader.mapLayout->width * (posY - y)] | 0x3000); } } @@ -2243,13 +2246,13 @@ static void Task_PutAwayDecoration(u8 taskId) case 1: if (!gPaletteFade.active) { DrawWholeMapView(); - ScriptContext1_SetupScript(SecretBase_EventScript_PutAwayDecoration); - ClearDialogWindowAndFrame(0, 1); + ScriptContext_SetupScript(SecretBase_EventScript_PutAwayDecoration); + ClearDialogWindowAndFrame(0, TRUE); gTasks[taskId].tState = 2; } break; case 2: - ScriptContext2_Enable(); + LockPlayerFieldControls(); IdentifyOwnedDecorationsCurrentlyInUseInternal(taskId); FadeInFromBlack(); gTasks[taskId].tState = 3; @@ -2285,9 +2288,9 @@ static void SetUpPuttingAwayDecorationPlayerAvatar(void) LoadPlayerSpritePalette(); gFieldCamera.spriteId = CreateSprite(&sPuttingAwayCursorSpriteTemplate, 120, 80, 0); if (gSaveBlock2Ptr->playerGender == MALE) - sDecor_CameraSpriteObjectIdx2 = AddPseudoObjectEvent(OBJ_EVENT_GFX_BRENDAN_DECORATING, SpriteCallbackDummy, 136, 72, 0); + sDecor_CameraSpriteObjectIdx2 = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_BRENDAN_DECORATING, SpriteCallbackDummy, 136, 72, 0); else - sDecor_CameraSpriteObjectIdx2 = AddPseudoObjectEvent(OBJ_EVENT_GFX_MAY_DECORATING, SpriteCallbackDummy, 136, 72, 0); + sDecor_CameraSpriteObjectIdx2 = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MAY_DECORATING, SpriteCallbackDummy, 136, 72, 0); gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1; DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]); @@ -2328,7 +2331,7 @@ static void Task_ContinuePuttingAwayDecorations(u8 taskId) static void ContinuePuttingAwayDecorations(u8 taskId) { - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(0, TRUE); gSprites[sDecor_CameraSpriteObjectIdx1].data[7] = 0; gSprites[sDecor_CameraSpriteObjectIdx1].invisible = FALSE; gSprites[sDecor_CameraSpriteObjectIdx1].callback = InitializeCameraSprite1; @@ -2461,12 +2464,12 @@ static bool8 DecorationIsUnderCursor(u8 taskId, u8 idx, struct DecorRearrangemen u8 yOff; u8 ht; - x = gTasks[taskId].tCursorX - 7; - y = gTasks[taskId].tCursorY - 7; + x = gTasks[taskId].tCursorX - MAP_OFFSET; + y = gTasks[taskId].tCursorY - MAP_OFFSET; xOff = sDecorationContext.pos[idx] >> 4; yOff = sDecorationContext.pos[idx] & 0x0F; ht = data->height; - if (sDecorationContext.items[idx] == DECOR_SAND_ORNAMENT && MapGridGetMetatileIdAt(xOff + 7, yOff + 7) == METATILE_SecretBase_SandOrnament_BrokenBase) + if (sDecorationContext.items[idx] == DECOR_SAND_ORNAMENT && MapGridGetMetatileIdAt(xOff + MAP_OFFSET, yOff + MAP_OFFSET) == METATILE_SecretBase_SandOrnament_BrokenBase) ht--; if (x >= xOff && x < xOff + data->width && y > yOff - ht && y <= yOff) @@ -2601,7 +2604,7 @@ static void StopPuttingAwayDecorationsPrompt(u8 taskId) static void StopPuttingAwayDecorations(u8 taskId) { - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); StopPuttingAwayDecorations_(taskId); } @@ -2642,11 +2645,11 @@ static void Task_ReinitializeDecorationMenuHandler(u8 taskId) tState++; break; case 1: - ScriptContext1_SetupScript(SecretBase_EventScript_InitDecorations); + ScriptContext_SetupScript(SecretBase_EventScript_InitDecorations); tState++; break; case 2: - ScriptContext2_Enable(); + LockPlayerFieldControls(); tState++; break; case 3: @@ -2661,7 +2664,7 @@ static void FieldCB_StopPuttingAwayDecorations(void) u8 taskId; FadeInFromBlack(); - DrawDialogueFrame(0, 1); + DrawDialogueFrame(0, TRUE); InitDecorationActionsWindow(); taskId = CreateTask(Task_ReinitializeDecorationMenuHandler, 8); gTasks[taskId].tState = 0; diff --git a/src/decoration_inventory.c b/src/decoration_inventory.c index af1071b1b1..c84ee69a46 100644 --- a/src/decoration_inventory.c +++ b/src/decoration_inventory.c @@ -33,7 +33,7 @@ static void ClearDecorationInventory(u8 category) void ClearDecorationInventories(void) { u8 category; - for (category = 0; category < 8; category++) + for (category = 0; category < DECORCAT_COUNT; category++) ClearDecorationInventory(category); } diff --git a/src/dewford_trend.c b/src/dewford_trend.c index 09a8d2afe9..08dd9afe0b 100644 --- a/src/dewford_trend.c +++ b/src/dewford_trend.c @@ -8,7 +8,6 @@ #include "text.h" #include "tv.h" #include "string_util.h" -#include "constants/easy_chat.h" /* ## Overview ## @@ -24,29 +23,29 @@ Information about a Dewford trend is stored in a struct DewfordTrend. In addition to the two easy chat words that make up the trend's phrase, each trend has a few randomly generated values associated with it. - - rand: + - rand: This is a 16 bit value generated once when the phrase is created. It's used in calculations for Feebas tiles, Slot Machines, and Match Call. - - trendiness / maxTrendiness: + - trendiness / maxTrendiness: Initialized as a random value between 30-127 inclusive. This is used to compare how trendy one phrase is vs another. If a submitted phrase is less trendy than the current one it won't be accepted. If the trend is - "boring" (see below) it will lose trendiness over time until it reaches 0, + "boring" (see below) it will lose trendiness over time until it reaches 0, at which point it will stop being boring and gain trendiness until it reaches maxTrendiness (then it becomes boring again and the cycle repeats). - - gainingTrendiness: + - gainingTrendiness: This is a flag that determines whether a phrase should be gaining or losing trendiness. An NPC in Dewford Hall will comment on whether the current phrase is "boring" or not, and if it is gaining trendiness (or if it is still trendier - than the last phrase) it is not boring. This field will always be TRUE for any + than the last phrase) it is not boring. This field will always be TRUE for any new phrase submitted after the 1st submission. ## Saving trends ## - Each time a potential trendy phrase is submitted, it is saved in gSaveBlock1Ptr->dewfordTrends[]. - Up to SAVED_TRENDS_COUNT (5) trends may be saved at one time. The trends in this array are kept - in sorted order from most trendy to least trendy. The current trendy phrase is always at - gSaveBlock1Ptr->dewfordTrends[0]. If the player mixes records with another player, their own - trends are replaced with their mixing partner's, unless the phrase is the same, in which case + Each time a potential trendy phrase is submitted, it is saved in gSaveBlock1Ptr->dewfordTrends[]. + Up to SAVED_TRENDS_COUNT (5) trends may be saved at one time. The trends in this array are kept + in sorted order from most trendy to least trendy. The current trendy phrase is always at + gSaveBlock1Ptr->dewfordTrends[0]. If the player mixes records with another player, their own + trends are replaced with their mixing partner's, unless the phrase is the same, in which case the version with a higher trendiness value is used (see ReceiveDewfordTrendData). ## TV Show ## @@ -247,7 +246,7 @@ void ReceiveDewfordTrendData(struct DewfordTrend *linkedTrends, size_t size, u8 players = GetLinkPlayerCount(); for (i = 0; i < players; i++) memcpy(&linkedTrendsBuffer[i * SAVED_TRENDS_COUNT], (u8 *)linkedTrends + i * size, SAVED_TRENDS_SIZE); - + // Determine which of the received trends should be saved. // savedTrendsBuffer starts empty, and when finished will contain // which of the linked trends to save in the saveblock. @@ -271,15 +270,13 @@ void ReceiveDewfordTrendData(struct DewfordTrend *linkedTrends, size_t size, u8 // Only overwrrite it if it's "trendier" temp = &savedTrendsBuffer[idx]; if (temp->trendiness < src->trendiness) - { *temp = *src; - } } src++; } } SortTrends(savedTrendsBuffer, numTrends, SORT_MODE_FULL); - + // Overwrite current saved trends with new saved trends src = savedTrendsBuffer; dst = gSaveBlock1Ptr->dewfordTrends; @@ -301,7 +298,7 @@ void BufferTrendyPhraseString(void) void IsTrendyPhraseBoring(void) { bool16 result = FALSE; - + do { if (gSaveBlock1Ptr->dewfordTrends[0].trendiness - gSaveBlock1Ptr->dewfordTrends[1].trendiness > 1) @@ -312,7 +309,7 @@ void IsTrendyPhraseBoring(void) break; result = TRUE; } while (0); - + gSpecialVar_Result = result; } diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c index f887dafb95..f68f0446c3 100644 --- a/src/digit_obj_util.c +++ b/src/digit_obj_util.c @@ -138,7 +138,7 @@ bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemp { struct CompressedSpriteSheet compSpriteSheet; - compSpriteSheet = *(struct CompressedSpriteSheet*)(template->spriteSheet); + compSpriteSheet = *(struct CompressedSpriteSheet *)(template->spriteSheet); compSpriteSheet.size = GetDecompressedDataSize(template->spriteSheet->data); sOamWork->array[id].tileStart = LoadCompressedSpriteSheet(&compSpriteSheet); } diff --git a/src/diploma.c b/src/diploma.c index dca0912e36..ce31578dcb 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -40,12 +40,12 @@ static void VBlankCB(void) static const u16 sDiplomaPalettes[][16] = { - INCBIN_U16("graphics/misc/diploma_national.gbapal"), - INCBIN_U16("graphics/misc/diploma_hoenn.gbapal"), + INCBIN_U16("graphics/diploma/national.gbapal"), + INCBIN_U16("graphics/diploma/hoenn.gbapal"), }; -static const u32 sDiplomaTilemap[] = INCBIN_U32("graphics/misc/diploma_map.bin.lz"); -static const u32 sDiplomaTiles[] = INCBIN_U32("graphics/misc/diploma.4bpp.lz"); +static const u32 sDiplomaTilemap[] = INCBIN_U32("graphics/diploma/tilemap.bin.lz"); +static const u32 sDiplomaTiles[] = INCBIN_U32("graphics/diploma/tiles.4bpp.lz"); void CB2_ShowDiploma(void) { @@ -83,7 +83,7 @@ void CB2_ShowDiploma(void) LZDecompressWram(sDiplomaTilemap, sDiplomaTilemapPtr); CopyBgTilemapBufferToVram(1); DisplayDiplomaText(); - BlendPalettes(-1, 16, 0); + BlendPalettes(PALETTES_ALL, 16, RGB_BLACK); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); EnableInterrupts(1); SetVBlankCallback(VBlankCB); @@ -140,7 +140,7 @@ static void DisplayDiplomaText(void) StringExpandPlaceholders(gStringVar4, gText_PokedexDiploma); PrintDiplomaText(gStringVar4, 0, 1); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); } static const struct BgTemplate sDiplomaBgTemplates[2] = @@ -196,7 +196,7 @@ static void InitDiplomaWindow(void) { InitWindows(sDiplomaWinTemplates); DeactivateAllTextPrinters(); - LoadPalette(gUnknown_0860F074, 0xF0, 0x20); + LoadPalette(gStandardMenuPalette, 0xF0, 0x20); FillWindowPixelBuffer(0, PIXEL_FILL(0)); PutWindowTilemap(0); } @@ -205,5 +205,5 @@ static void PrintDiplomaText(u8 *text, u8 var1, u8 var2) { u8 color[3] = {0, 2, 3}; - AddTextPrinterParameterized4(0, 1, var1, var2, 0, 0, color, -1, text); + AddTextPrinterParameterized4(0, FONT_NORMAL, var1, var2, 0, 0, color, TEXT_SKIP_DRAW, text); } diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 7a642968bb..11bf12925b 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -139,7 +139,7 @@ enum { #define NUM_STATUS_SQUARES 10 -// Berries fall in predefined columns. +// Berries fall in predefined columns. // A total of 10 are available, though fewer will be used with < 5 players // The 11th column is a repeat of the 1st column wrapped around, so only // the values 0-9 are unique 'valid' columns @@ -323,7 +323,7 @@ static bool32 TryPickBerry(u8, u8, u8); static void UpdateFallingBerries(void); static void UpdateGame_Leader(void); static void UpdateGame_Member(void); -static void GetActiveBerryColumns(u8, u8*, u8*); +static void GetActiveBerryColumns(u8, u8 *, u8 *); static bool32 AllPlayersReadyToStart(void); static void ResetReadyToStart(void); static bool32 ReadyToEndGame_Leader(void); @@ -342,20 +342,20 @@ static void HandleWaitPlayAgainInput(void); static void ResetPickState(void); static u32 GetHighestScore(void); static void SendPacket_ReadyToStart(bool32); -static void SendPacket_GameState(struct DodrioGame_Player *, - struct DodrioGame_PlayerCommData *, - struct DodrioGame_PlayerCommData *, - struct DodrioGame_PlayerCommData *, - struct DodrioGame_PlayerCommData *, - struct DodrioGame_PlayerCommData *, +static void SendPacket_GameState(struct DodrioGame_Player *, + struct DodrioGame_PlayerCommData *, + struct DodrioGame_PlayerCommData *, + struct DodrioGame_PlayerCommData *, + struct DodrioGame_PlayerCommData *, + struct DodrioGame_PlayerCommData *, u8 , bool32 , bool32 ); -static bool32 RecvPacket_GameState(u32, - struct DodrioGame_Player *, - struct DodrioGame_PlayerCommData *, - struct DodrioGame_PlayerCommData *, - struct DodrioGame_PlayerCommData *, - struct DodrioGame_PlayerCommData *, - struct DodrioGame_PlayerCommData *, +static bool32 RecvPacket_GameState(u32, + struct DodrioGame_Player *, + struct DodrioGame_PlayerCommData *, + struct DodrioGame_PlayerCommData *, + struct DodrioGame_PlayerCommData *, + struct DodrioGame_PlayerCommData *, + struct DodrioGame_PlayerCommData *, u8 *, bool32 *, bool32 *); static void SendPacket_PickState(u8); static bool32 RecvPacket_PickState(u32, u8 *); @@ -422,11 +422,11 @@ static void StopGfxFuncs(void); static void GfxIdle(void); // For each player, the array is a list of all the columns starting with the column to their left -// Only the range of active columns is read from the array (dependent on the number of players), +// Only the range of active columns is read from the array (dependent on the number of players), // so the arrays are spaced such that the numbers in the center are where the data that's read starts and end. static const u8 sActiveColumnMap[MAX_RFU_PLAYERS][MAX_RFU_PLAYERS][NUM_BERRY_COLUMNS] = { - { // 1 player (never used), columns 4-6. + { // 1 player (never used), columns 4-6. // Sometimes read to get default order regardless of the current number of players {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, }, @@ -517,21 +517,21 @@ static const u8 sDodrioNeighborMap[MAX_RFU_PLAYERS][MAX_RFU_PLAYERS][3] = }, }; -#define __ 9 // No player at this column. This may go out of bounds if this is returned +#define x 9 // No player at this column. This may go out of bounds if this is returned // Takes the number of players and a column and returns the player id at that column. // Note that the assignment is somewhat arbitrary as players share neighboring columns. ALIGNED(4) static const u8 sPlayerIdAtColumn[MAX_RFU_PLAYERS][NUM_BERRY_COLUMNS] = { - {__, __, __, __, 1, 1, 1, __, __, __, __}, // 1 player - {__, __, __, 0, 0, 1, 1, 0, __, __, __}, // 2 players - {__, __, 2, 2, 0, 0, 1, 1, 1, __, __}, // 3 players - {__, 3, 3, 0, 0, 1, 1, 2, 2, 3, __}, // 4 players - { 3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3}, // 5 players + {x, x, x, x, 1, 1, 1, x, x, x, x}, // 1 player + {x, x, x, 0, 0, 1, 1, 0, x, x, x}, // 2 players + {x, x, 2, 2, 0, 0, 1, 1, 1, x, x}, // 3 players + {x, 3, 3, 0, 0, 1, 1, 2, 2, 3, x}, // 4 players + {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3}, // 5 players }; -#undef __ +#undef x // Each array contains the columns that belong solely to one player, dependent on the number of players // When determing how difficult the berries in a column should be, the highest @@ -592,15 +592,15 @@ ALIGNED(4) static const u8 sPrizeBerryIds[][10] = { { // Possible prizes with 3 players - ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1, - ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1, - ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1, - ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1, - ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1, - ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1, - ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1, - ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1, - ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1, + ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1, + ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1, + ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1, + ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1, + ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1, + ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1, + ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1, + ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1, + ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1 }, { // Possible prizes with 4 players @@ -864,7 +864,7 @@ static void InitCountdown(void) default: sGame->startCountdown = TRUE; SetGameFunc(FUNC_COUNTDOWN); - break; + break; } } @@ -912,7 +912,7 @@ static void WaitGameStart(void) case 0: if (sGame->startGame) SetGameFunc(FUNC_PLAY_GAME); - break; + break; } } @@ -1352,14 +1352,14 @@ static void ResetGame(void) } break; case 2: - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); sGame->state++; break; case 3: @@ -1468,15 +1468,15 @@ static void RecvLinkData_Gameplay(void) u8 i; u8 numPlayers = sGame->numPlayers; - sGame->players[0].receivedGameStatePacket = RecvPacket_GameState(0, - &sGame->players[0], - &sGame->players[0].comm, - &sGame->players[1].comm, - &sGame->players[2].comm, - &sGame->players[3].comm, - &sGame->players[4].comm, - &sGame->numGraySquares, - &sGame->berriesFalling, + sGame->players[0].receivedGameStatePacket = RecvPacket_GameState(0, + &sGame->players[0], + &sGame->players[0].comm, + &sGame->players[1].comm, + &sGame->players[2].comm, + &sGame->players[3].comm, + &sGame->players[4].comm, + &sGame->numGraySquares, + &sGame->berriesFalling, &sGame->allReadyToEnd); sGame->clearRecvCmds = TRUE; @@ -1545,15 +1545,15 @@ static void RecvLinkData_ReadyToEnd(void) u8 i; u8 numPlayers = sGame->numPlayers; - sGame->players[0].receivedGameStatePacket = RecvPacket_GameState(0, - &sGame->players[0], - &sGame->players[0].comm, - &sGame->players[1].comm, - &sGame->players[2].comm, - &sGame->players[3].comm, - &sGame->players[4].comm, - &sGame->numGraySquares, - &sGame->berriesFalling, + sGame->players[0].receivedGameStatePacket = RecvPacket_GameState(0, + &sGame->players[0], + &sGame->players[0].comm, + &sGame->players[1].comm, + &sGame->players[2].comm, + &sGame->players[3].comm, + &sGame->players[4].comm, + &sGame->numGraySquares, + &sGame->berriesFalling, &sGame->allReadyToEnd); sGame->clearRecvCmds = TRUE; @@ -1605,25 +1605,25 @@ static void SendLinkData_Leader(void) switch (sGame->funcId) { case FUNC_PLAY_GAME: - SendPacket_GameState(&sGame->player, - &sGame->players[0].comm, - &sGame->players[1].comm, - &sGame->players[2].comm, - &sGame->players[3].comm, - &sGame->players[4].comm, - sGame->numGraySquares, - sGame->berriesFalling, + SendPacket_GameState(&sGame->player, + &sGame->players[0].comm, + &sGame->players[1].comm, + &sGame->players[2].comm, + &sGame->players[3].comm, + &sGame->players[4].comm, + sGame->numGraySquares, + sGame->berriesFalling, sGame->allReadyToEnd); break; case FUNC_WAIT_END_GAME: - SendPacket_GameState(&sGame->player, - &sGame->players[0].comm, - &sGame->players[1].comm, - &sGame->players[2].comm, - &sGame->players[3].comm, - &sGame->players[4].comm, - sGame->numGraySquares, - sGame->berriesFalling, + SendPacket_GameState(&sGame->player, + &sGame->players[0].comm, + &sGame->players[1].comm, + &sGame->players[2].comm, + &sGame->players[3].comm, + &sGame->players[4].comm, + sGame->numGraySquares, + sGame->berriesFalling, sGame->allReadyToEnd); break; } @@ -1634,27 +1634,27 @@ static void RecvLinkData_Member(void) switch (sGame->funcId) { case FUNC_PLAY_GAME: - RecvPacket_GameState(sGame->multiplayerId, - &sGame->players[sGame->multiplayerId], - &sGame->players[0].comm, - &sGame->players[1].comm, - &sGame->players[2].comm, - &sGame->players[3].comm, - &sGame->players[4].comm, - &sGame->numGraySquares, - &sGame->berriesFalling, + RecvPacket_GameState(sGame->multiplayerId, + &sGame->players[sGame->multiplayerId], + &sGame->players[0].comm, + &sGame->players[1].comm, + &sGame->players[2].comm, + &sGame->players[3].comm, + &sGame->players[4].comm, + &sGame->numGraySquares, + &sGame->berriesFalling, &sGame->allReadyToEnd); break; case FUNC_WAIT_END_GAME: - RecvPacket_GameState(sGame->multiplayerId, - &sGame->players[sGame->multiplayerId], - &sGame->players[0].comm, - &sGame->players[1].comm, - &sGame->players[2].comm, - &sGame->players[3].comm, - &sGame->players[4].comm, - &sGame->numGraySquares, - &sGame->berriesFalling, + RecvPacket_GameState(sGame->multiplayerId, + &sGame->players[sGame->multiplayerId], + &sGame->players[0].comm, + &sGame->players[1].comm, + &sGame->players[2].comm, + &sGame->players[3].comm, + &sGame->players[4].comm, + &sGame->numGraySquares, + &sGame->berriesFalling, &sGame->allReadyToEnd); break; } @@ -1728,7 +1728,7 @@ static void HandleSound_Member(void) u8 i; if (sGame->players[sGame->multiplayerId].comm.pickState == PICK_NONE) { - if (sGame->players[sGame->multiplayerId].comm.ateBerry != TRUE + if (sGame->players[sGame->multiplayerId].comm.ateBerry != TRUE && sGame->players[sGame->multiplayerId].comm.missedBerry != TRUE) sGame->playingPickSound = 0; } @@ -1795,7 +1795,7 @@ static void VBlankCB_DodrioGame(void) ProcessSpriteCopyRequests(); } -static void InitMonInfo(struct DodrioGame_MonInfo * monInfo, struct Pokemon * mon) +static void InitMonInfo(struct DodrioGame_MonInfo * monInfo, struct Pokemon *mon) { monInfo->isShiny = IsMonShiny(mon); } @@ -1885,7 +1885,7 @@ static void HandlePickBerries(void) column = sActiveColumnMap[0][0][j]; // Attempt has already been checked - if (sGame->playersAttemptingPick[column][0] == i + if (sGame->playersAttemptingPick[column][0] == i || sGame->playersAttemptingPick[column][1] == i) break; @@ -1929,14 +1929,14 @@ static void HandlePickBerries(void) if (++sGame->eatTimer[column] >= 6) { sGame->eatTimer[column] = 0; - - if (sGame->playersAttemptingPick[column][0] == PLAYER_NONE + + if (sGame->playersAttemptingPick[column][0] == PLAYER_NONE && sGame->playersAttemptingPick[column][1] == PLAYER_NONE) { // No players attempting to pick this berry continue; } - else if (sGame->playersAttemptingPick[column][0] != PLAYER_NONE + else if (sGame->playersAttemptingPick[column][0] != PLAYER_NONE && sGame->playersAttemptingPick[column][1] == PLAYER_NONE) { // One player attempting to pick this berry @@ -2003,7 +2003,7 @@ static bool32 TryPickBerry(u8 playerId, u8 pickState, u8 column) pick = 2; break; } - + // Check if berry is within range to be picked if (berries->fallDist[column] == EAT_FALL_DIST - 1 || berries->fallDist[column] == EAT_FALL_DIST) { @@ -2054,7 +2054,7 @@ static void UpdateFallingBerries(void) if (sGame->berryState[i] == BERRYSTATE_NONE || sGame->berryState[i] == BERRYSTATE_PICKED) { sGame->berriesFalling = TRUE; - + if (game->player.berries.fallDist[i] >= MAX_FALL_DIST) { // Berry hit the ground @@ -2591,9 +2591,9 @@ static void ResetForPlayAgainPrompt(void) } static const s16 sBerryScoreMultipliers[] = { - [BERRY_BLUE] = 10, - [BERRY_GREEN] = 30, - [BERRY_GOLD] = 50, + [BERRY_BLUE] = 10, + [BERRY_GREEN] = 30, + [BERRY_GOLD] = 50, [BERRY_MISSED] = 50 // Subtracted }; @@ -2788,7 +2788,7 @@ static u32 SetScoreResults(void) u8 numPlayers = sGame->numPlayers; GetHighestScore(); // Useless call - + if (GetHighestScore() == 0) { // No one scored any points, put everyone in last place with a score of 0. @@ -2810,7 +2810,7 @@ static u32 SetScoreResults(void) { u32 score = GetScoreByRanking(ranking); u8 curRanking = nextRanking; - + // Find all players with the score for this ranking. // Increment nextRanking but not curRanking to allow // for ties @@ -2879,10 +2879,10 @@ static u8 TryGivePrize(void) return PRIZE_RECEIVED; } -static u32 IncrementWithLimit(u32 a, u32 max) +static u32 IncrementWithLimit(u32 num, u32 max) { - if (a < max) - return a + 1; + if (num < max) + return num + 1; else return max; } @@ -2954,10 +2954,10 @@ static void Task_ShowDodrioBerryPickingRecords(u8 taskId) { case 0: window = sWindowTemplates_Records; - width = GetStringWidth(1, gText_BerryPickingRecords, 0); + width = GetStringWidth(FONT_NORMAL, gText_BerryPickingRecords, 0); for (i = 0; i < ARRAY_COUNT(sRecordsTexts); i++) { - widthCurr = GetStringWidth(1, sRecordsTexts[i], 0) + 50; + widthCurr = GetStringWidth(FONT_NORMAL, sRecordsTexts[i], 0) + 50; if (widthCurr > width) width = widthCurr; } @@ -2968,7 +2968,7 @@ static void Task_ShowDodrioBerryPickingRecords(u8 taskId) window.width = width; tWindowId = AddWindow(&window); PrintRecordsText(tWindowId, width); - CopyWindowToVram(tWindowId, 3); + CopyWindowToVram(tWindowId, COPYWIN_FULL); tState++; break; case 1: @@ -2979,7 +2979,7 @@ static void Task_ShowDodrioBerryPickingRecords(u8 taskId) if (JOY_NEW(A_BUTTON | B_BUTTON)) { rbox_fill_rectangle(tWindowId); - CopyWindowToVram(tWindowId, 1); + CopyWindowToVram(tWindowId, COPYWIN_MAP); tState++; } break; @@ -2988,7 +2988,7 @@ static void Task_ShowDodrioBerryPickingRecords(u8 taskId) { RemoveWindow(tWindowId); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } break; } @@ -3008,14 +3008,14 @@ static void PrintRecordsText(u8 windowId, s32 width) LoadUserWindowBorderGfx_(windowId, 0x21D, 0xD0); DrawTextBorderOuter(windowId, 0x21D, 0xD); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - AddTextPrinterParameterized(windowId, 1, gText_BerryPickingRecords, GetStringCenterAlignXOffset(1, gText_BerryPickingRecords, width * 8), 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_BerryPickingRecords, GetStringCenterAlignXOffset(FONT_NORMAL, gText_BerryPickingRecords, width * 8), 1, TEXT_SKIP_DRAW, NULL); for (i = 0; i < NUM_RECORD_TYPES; i++) { ConvertIntToDecimalStringN(gStringVar1, recordNums[i], STR_CONV_MODE_LEFT_ALIGN, sRecordNumMaxDigits[i]); - numWidth = GetStringWidth(1, gStringVar1, -1); - AddTextPrinterParameterized(windowId, 1, sRecordsTexts[i], 0, sRecordTextYCoords[i][0], TEXT_SPEED_FF, NULL); + numWidth = GetStringWidth(FONT_NORMAL, gStringVar1, -1); + AddTextPrinterParameterized(windowId, FONT_NORMAL, sRecordsTexts[i], 0, sRecordTextYCoords[i][0], TEXT_SKIP_DRAW, NULL); x = (width * 8) - numWidth; - AddTextPrinterParameterized(windowId, 1, gStringVar1, x, sRecordNumYCoords[i][0], TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar1, x, sRecordNumYCoords[i][0], TEXT_SKIP_DRAW, NULL); } PutWindowTilemap(windowId); } @@ -3028,19 +3028,19 @@ static const u16 sDebug_BerryResults[MAX_RFU_PLAYERS][4] = [BERRY_GREEN] = 0, [BERRY_GOLD] = 90, [BERRY_MISSED] = MAX_BERRIES - }, + }, { [BERRY_BLUE] = MAX_BERRIES, [BERRY_GREEN] = MAX_BERRIES, [BERRY_GOLD] = 70, [BERRY_MISSED] = MAX_BERRIES - }, + }, { [BERRY_BLUE] = MAX_BERRIES, [BERRY_GREEN] = 0, [BERRY_GOLD] = MAX_BERRIES, [BERRY_MISSED] = 0 - }, + }, { [BERRY_BLUE] = MAX_BERRIES, [BERRY_GREEN] = MAX_BERRIES, @@ -3048,7 +3048,7 @@ static const u16 sDebug_BerryResults[MAX_RFU_PLAYERS][4] = [BERRY_MISSED] = 0 }, { - [BERRY_BLUE] = MAX_BERRIES, + [BERRY_BLUE] = MAX_BERRIES, [BERRY_GREEN] = MAX_BERRIES, [BERRY_GOLD] = MAX_BERRIES, [BERRY_MISSED] = 0 @@ -3056,16 +3056,16 @@ static const u16 sDebug_BerryResults[MAX_RFU_PLAYERS][4] = }; static const u8 sJPText_Vowels[] = _("あいうえおかき"); -static const u8 sText_ABCDEFG[] = _("ABCDEFG"); -static const u8 sText_0123456[] = _("0123456"); +static const u8 sText_Letters[] = _("ABCDEFG"); +static const u8 sText_Digits[] = _("0123456"); static const u8 *const sDebug_PlayerNames[] = { sJPText_Vowels, sJPText_Vowels, sJPText_Vowels, - sText_ABCDEFG, - sText_0123456 + sText_Letters, + sText_Digits }; static void Debug_UpdateNumPlayers(void) @@ -3106,7 +3106,7 @@ static u32 RecvPacket_ReadyToStart(u32 playerId) { struct ReadyToStartPacket *packet; - if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET) + if ((gRecvCmds[0][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET) return FALSE; packet = (void *)&gRecvCmds[playerId][1]; @@ -3159,14 +3159,14 @@ struct GameStatePacket bool8 missedBerry_Player5:1; }; -static void SendPacket_GameState(struct DodrioGame_Player *player, - struct DodrioGame_PlayerCommData *player1, - struct DodrioGame_PlayerCommData *player2, - struct DodrioGame_PlayerCommData *player3, - struct DodrioGame_PlayerCommData *player4, - struct DodrioGame_PlayerCommData *player5, - u8 numGraySquares, - bool32 berriesFalling, +static void SendPacket_GameState(struct DodrioGame_Player *player, + struct DodrioGame_PlayerCommData *player1, + struct DodrioGame_PlayerCommData *player2, + struct DodrioGame_PlayerCommData *player3, + struct DodrioGame_PlayerCommData *player4, + struct DodrioGame_PlayerCommData *player5, + u8 numGraySquares, + bool32 berriesFalling, bool32 allReadyToEnd) { struct GameStatePacket packet; @@ -3219,21 +3219,21 @@ static void SendPacket_GameState(struct DodrioGame_Player *player, Rfu_SendPacket(&packet); } -static bool32 RecvPacket_GameState(u32 playerId, - struct DodrioGame_Player *player, - struct DodrioGame_PlayerCommData *player1, - struct DodrioGame_PlayerCommData *player2, - struct DodrioGame_PlayerCommData *player3, - struct DodrioGame_PlayerCommData *player4, - struct DodrioGame_PlayerCommData *player5, - u8 *numGraySquares, - bool32 *berriesFalling, +static bool32 RecvPacket_GameState(u32 playerId, + struct DodrioGame_Player *player, + struct DodrioGame_PlayerCommData *player1, + struct DodrioGame_PlayerCommData *player2, + struct DodrioGame_PlayerCommData *player3, + struct DodrioGame_PlayerCommData *player4, + struct DodrioGame_PlayerCommData *player5, + u8 *numGraySquares, + bool32 *berriesFalling, bool32 *allReadyToEnd) { struct GameStatePacket *packet; struct DodrioGame_Berries *berries = &player->berries; - if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET) + if ((gRecvCmds[0][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET) return FALSE; packet = (void *)&gRecvCmds[0][1]; @@ -3310,7 +3310,7 @@ static bool32 RecvPacket_PickState(u32 playerId, u8 *pickState) { struct PickStatePacket *packet; - if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET) + if ((gRecvCmds[0][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET) return FALSE; packet = (void *)&gRecvCmds[playerId][1]; @@ -3341,7 +3341,7 @@ static bool32 RecvPacket_ReadyToEnd(u32 playerId) { struct ReadyToEndPacket *packet; - if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET) + if ((gRecvCmds[0][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET) return FALSE; packet = (void *)&gRecvCmds[playerId][1]; @@ -3503,7 +3503,7 @@ static const u8 sActiveColumnMap_Duplicate[MAX_RFU_PLAYERS][MAX_RFU_PLAYERS][NUM {6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6}, {8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8}, }, -}; +}; // Unused duplicate of sDodrioHeadToColumnMap static const u8 sDodrioHeadToColumnMap_Duplicate[MAX_RFU_PLAYERS][MAX_RFU_PLAYERS][3] = @@ -3608,7 +3608,7 @@ static const struct OamData sOamData_Dodrio = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -3626,7 +3626,7 @@ static const struct OamData sOamData_16x16_Priority0 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -3643,7 +3643,7 @@ static const struct OamData sOamData_Berry = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -3660,7 +3660,7 @@ static const struct OamData sOamData_Cloud = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -4117,7 +4117,7 @@ static void UpdateStatusBarAnim(u8 numEmpty) StartSpriteAnim(&gSprites[sStatusBar->spriteIds[i]], STATUS_YELLOW); } } - + // Set remaining squares gray for (; i < NUM_STATUS_SQUARES; i++) StartSpriteAnim(&gSprites[sStatusBar->spriteIds[i]], STATUS_GRAY); @@ -4132,15 +4132,15 @@ static void SetStatusBarInvisibility(bool8 invisible) } static const u8 sUnusedSounds[] = { - SE_M_CHARM, - SE_NOTE_C, - SE_NOTE_D, - SE_NOTE_E, - SE_NOTE_F, - SE_NOTE_G, - SE_NOTE_A, - SE_NOTE_B, - SE_NOTE_C_HIGH, + SE_M_CHARM, + SE_NOTE_C, + SE_NOTE_D, + SE_NOTE_E, + SE_NOTE_F, + SE_NOTE_G, + SE_NOTE_A, + SE_NOTE_B, + SE_NOTE_C_HIGH, SE_RG_CARD_OPEN }; @@ -4286,9 +4286,9 @@ static void SpriteCB_Cloud(struct Sprite *sprite) } } -static const s16 sCloudStartCoords[NUM_CLOUDS][2] = +static const s16 sCloudStartCoords[NUM_CLOUDS][2] = { - {230, 55}, + {230, 55}, { 30, 74} }; @@ -4546,7 +4546,7 @@ struct { u8 id; void (*func)(void); -} const sGfxFuncs[] = +} static const sGfxFuncs[] = { {GFXFUNC_LOAD, LoadGfx}, // Element not used, LoadGfx is passed directly to SetGfxFunc {GFXFUNC_SHOW_NAMES, ShowNames}, @@ -4640,7 +4640,7 @@ static void ShowNames(void) { colorsId = COLORID_GRAY; playerId = GetPlayerIdByPos(i); - left = (56 - GetStringWidth(1, GetPlayerName(playerId), -1)) / 2u; + left = (56 - GetStringWidth(FONT_NORMAL, GetPlayerName(playerId), -1)) / 2u; window.tilemapLeft = coords->left; window.tilemapTop = coords->top; sGfx->windowIds[i] = AddWindow(&window); @@ -4649,8 +4649,8 @@ static void ShowNames(void) if (playerId == GetMultiplayerId()) colorsId = COLORID_BLUE; name = GetPlayerName(playerId); - AddTextPrinterParameterized3(sGfx->windowIds[i], 1, left, 1, sTextColorTable[colorsId], -1, name); - CopyWindowToVram(sGfx->windowIds[i], 2); + AddTextPrinterParameterized3(sGfx->windowIds[i], FONT_NORMAL, left, 1, sTextColorTable[colorsId], TEXT_SKIP_DRAW, name); + CopyWindowToVram(sGfx->windowIds[i], COPYWIN_GFX); window.baseBlock += 0xE; DrawMessageWindow(&window); } @@ -4726,22 +4726,22 @@ static void PrintRankedScores(u8 numPlayers_) } // Print text - x = 216 - GetStringWidth(1, gText_SpacePoints, 0); + x = 216 - GetStringWidth(FONT_NORMAL, gText_SpacePoints, 0); for (i = 0; i < numPlayers; i++) { u8 colorsId = COLORID_GRAY; u8 playerId = playersByRanking[i]; u32 points = scoreResults[playerId].score; - AddTextPrinterParameterized(sGfx->windowIds[1], 1, sRankingTexts[scoreResults[playerId].ranking], 8, sRankingYCoords[i], -1, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_NORMAL, sRankingTexts[scoreResults[playerId].ranking], 8, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL); if (playerId == GetMultiplayerId()) colorsId = COLORID_BLUE; name = GetPlayerName(playerId); - AddTextPrinterParameterized3(sGfx->windowIds[1], 1, 28, sRankingYCoords[i], sTextColorTable[colorsId], -1, name); + AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_NORMAL, 28, sRankingYCoords[i], sTextColorTable[colorsId], TEXT_SKIP_DRAW, name); ConvertIntToDecimalStringN(numString, points, STR_CONV_MODE_LEFT_ALIGN, 7); - numWidth = GetStringWidth(1, numString, -1); - AddTextPrinterParameterized(sGfx->windowIds[1], 1, numString, x - numWidth, sRankingYCoords[i], -1, NULL); - AddTextPrinterParameterized(sGfx->windowIds[1], 1, gText_SpacePoints, x, sRankingYCoords[i], -1, NULL); + numWidth = GetStringWidth(FONT_NORMAL, numString, -1); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_NORMAL, numString, x - numWidth, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_NORMAL, gText_SpacePoints, x, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL); } } @@ -4770,10 +4770,10 @@ static void ShowResults(void) case 2: FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1)); FillWindowPixelBuffer(sGfx->windowIds[1], PIXEL_FILL(1)); - strWidth = GetStringWidth(1, gText_BerryPickingResults, -1); + strWidth = GetStringWidth(FONT_NORMAL, gText_BerryPickingResults, -1); x = (224 - strWidth) / 2; - AddTextPrinterParameterized(sGfx->windowIds[0], 1, gText_BerryPickingResults, x, 1, -1, NULL); - AddTextPrinterParameterized(sGfx->windowIds[1], 1, gText_10P30P50P50P, 68, 17, -1, NULL); + AddTextPrinterParameterized(sGfx->windowIds[0], FONT_NORMAL, gText_BerryPickingResults, x, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_NORMAL, gText_10P30P50P50P, 68, 17, TEXT_SKIP_DRAW, NULL); for (i = 0; i < numPlayers; i++) { u8 colorsId = COLORID_GRAY; @@ -4781,7 +4781,7 @@ static void ShowResults(void) colorsId = COLORID_BLUE; name = GetPlayerName(i); - AddTextPrinterParameterized3(sGfx->windowIds[1], 1, 0, sResultsYCoords[i], sTextColorTable[colorsId], -1, name); + AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_NORMAL, 0, sResultsYCoords[i], sTextColorTable[colorsId], TEXT_SKIP_DRAW, name); for (j = 0; j < 4; j++) { u32 width; @@ -4789,17 +4789,17 @@ static void ShowResults(void) u16 maxBerriesPicked = Min(GetHighestBerryResult(j), MAX_BERRIES); ConvertIntToDecimalStringN(gStringVar4, berriesPicked, STR_CONV_MODE_LEFT_ALIGN, 4); - width = GetStringWidth(1, gStringVar4, -1); - - // If player got the most of a berry type, highlight their number in red + width = GetStringWidth(FONT_NORMAL, gStringVar4, -1); + + // If player got the most of a berry type, highlight their number in red if (maxBerriesPicked == berriesPicked && maxBerriesPicked != 0) - AddTextPrinterParameterized3(sGfx->windowIds[1], 1, sResultsXCoords[j] - width, sResultsYCoords[i], sTextColorTable[COLORID_RED], -1, gStringVar4); + AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_NORMAL, sResultsXCoords[j] - width, sResultsYCoords[i], sTextColorTable[COLORID_RED], TEXT_SKIP_DRAW, gStringVar4); else - AddTextPrinterParameterized(sGfx->windowIds[1], 1, gStringVar4, sResultsXCoords[j] - width, sResultsYCoords[i], -1, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_NORMAL, gStringVar4, sResultsXCoords[j] - width, sResultsYCoords[i], TEXT_SKIP_DRAW, NULL); } } - CopyWindowToVram(sGfx->windowIds[0], 2); - CopyWindowToVram(sGfx->windowIds[1], 2); + CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX); + CopyWindowToVram(sGfx->windowIds[1], COPYWIN_GFX); sGfx->state++; break; case 3: @@ -4824,15 +4824,15 @@ static void ShowResults(void) case 5: FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1)); FillWindowPixelBuffer(sGfx->windowIds[1], PIXEL_FILL(1)); - strWidth = GetStringWidth(1, gText_AnnouncingRankings, -1); + strWidth = GetStringWidth(FONT_NORMAL, gText_AnnouncingRankings, -1); x = (224 - strWidth) / 2; - AddTextPrinterParameterized(sGfx->windowIds[0], 1, gText_AnnouncingRankings, x, 1, -1, NULL); + AddTextPrinterParameterized(sGfx->windowIds[0], FONT_NORMAL, gText_AnnouncingRankings, x, 1, TEXT_SKIP_DRAW, NULL); sGfx->state++; break; case 6: PrintRankedScores(numPlayers); - CopyWindowToVram(sGfx->windowIds[0], 2); - CopyWindowToVram(sGfx->windowIds[1], 2); + CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX); + CopyWindowToVram(sGfx->windowIds[1], COPYWIN_GFX); sGfx->state++; break; case 7: @@ -4870,14 +4870,14 @@ static void ShowResults(void) PlayNewMapMusic(MUS_LEVEL_UP); FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1)); FillWindowPixelBuffer(sGfx->windowIds[1], PIXEL_FILL(1)); - strWidth = GetStringWidth(1, gText_AnnouncingPrizes, -1); + strWidth = GetStringWidth(FONT_NORMAL, gText_AnnouncingPrizes, -1); x = (224 - strWidth) / 2; - AddTextPrinterParameterized(sGfx->windowIds[0], 1, gText_AnnouncingPrizes, x, 1, -1, NULL); + AddTextPrinterParameterized(sGfx->windowIds[0], FONT_NORMAL, gText_AnnouncingPrizes, x, 1, TEXT_SKIP_DRAW, NULL); DynamicPlaceholderTextUtil_Reset(); CopyItemName(GetPrizeItemId(), gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_FirstPlacePrize); - AddTextPrinterParameterized(sGfx->windowIds[1], 1, gStringVar4, 0, 1, -1, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, NULL); prizeState = TryGivePrize(); if (prizeState != PRIZE_RECEIVED && prizeState != NO_PRIZE) { @@ -4888,10 +4888,10 @@ static void ShowResults(void) DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_CantHoldAnyMore); else if (prizeState == PRIZE_FILLED_BAG) DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_FilledStorageSpace); - AddTextPrinterParameterized(sGfx->windowIds[1], 1, gStringVar4, 0, 41, -1, NULL); + AddTextPrinterParameterized(sGfx->windowIds[1], FONT_NORMAL, gStringVar4, 0, 41, TEXT_SKIP_DRAW, NULL); } - CopyWindowToVram(sGfx->windowIds[0], 2); - CopyWindowToVram(sGfx->windowIds[1], 2); + CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX); + CopyWindowToVram(sGfx->windowIds[1], COPYWIN_GFX); sGfx->state++; break; case 10: @@ -4946,12 +4946,12 @@ static void Msg_WantToPlayAgain(void) // Print text FillWindowPixelBuffer(sGfx->windowIds[WIN_PLAY_AGAIN], PIXEL_FILL(1)); FillWindowPixelBuffer(sGfx->windowIds[WIN_YES_NO], PIXEL_FILL(1)); - AddTextPrinterParameterized(sGfx->windowIds[WIN_PLAY_AGAIN], 1, gText_WantToPlayAgain, 0, 5, -1, NULL); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], 1, gText_Yes, 8, 1, -1, NULL); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], 1, gText_No, 8, 17, -1, NULL); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], 1, gText_SelectorArrow2, 0, 1, -1, NULL); - CopyWindowToVram(sGfx->windowIds[WIN_PLAY_AGAIN], 2); - CopyWindowToVram(sGfx->windowIds[WIN_YES_NO], 2); + AddTextPrinterParameterized(sGfx->windowIds[WIN_PLAY_AGAIN], FONT_NORMAL, gText_WantToPlayAgain, 0, 5, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_Yes, 8, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_No, 8, 17, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_SelectorArrow2, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sGfx->windowIds[WIN_PLAY_AGAIN], COPYWIN_GFX); + CopyWindowToVram(sGfx->windowIds[WIN_YES_NO], COPYWIN_GFX); sGfx->state++; break; case 2: @@ -4970,11 +4970,11 @@ static void Msg_WantToPlayAgain(void) if (y == PLAY_AGAIN_NONE) y = PLAY_AGAIN_YES; FillWindowPixelBuffer(sGfx->windowIds[WIN_YES_NO], PIXEL_FILL(1)); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], 1, gText_Yes, 8, 1, -1, NULL); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], 1, gText_No, 8, 17, -1, NULL); - AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], 1, gText_SelectorArrow2, 0, ((y - 1) * 16) + 1, -1, NULL); - CopyWindowToVram(sGfx->windowIds[WIN_YES_NO], 3); - + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_Yes, 8, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_No, 8, 17, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_SelectorArrow2, 0, ((y - 1) * 16) + 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sGfx->windowIds[WIN_YES_NO], COPYWIN_FULL); + // Increment state only if A or B button have been pressed. if (JOY_NEW(A_BUTTON)) { @@ -5025,22 +5025,22 @@ static void Msg_SavingDontTurnOff(void) { case 0: DrawDialogueFrame(0, FALSE); - AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); sGfx->state++; break; case 1: - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); sGfx->state++; break; case 2: if (!IsDma3ManagerBusyWithBgCopy()) { - CreateTask(Task_LinkSave, 0); + CreateTask(Task_LinkFullSave, 0); sGfx->state++; } break; case 3: - if (!FuncIsActiveTask(Task_LinkSave)) + if (!FuncIsActiveTask(Task_LinkFullSave)) sGfx->state++; break; default: @@ -5063,8 +5063,8 @@ static void Msg_CommunicationStandby(void) break; case 1: FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1)); - AddTextPrinterParameterized(sGfx->windowIds[0], 1, gText_CommunicationStandby3, 0, 5, -1, NULL); - CopyWindowToVram(sGfx->windowIds[0], 2); + AddTextPrinterParameterized(sGfx->windowIds[0], FONT_NORMAL, gText_CommunicationStandby3, 0, 5, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX); sGfx->state++; break; case 2: @@ -5103,8 +5103,8 @@ static void Msg_SomeoneDroppedOut(void) break; case 1: FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1)); - AddTextPrinterParameterized(sGfx->windowIds[0], 1, gText_SomeoneDroppedOut, 0, 5, -1, NULL); - CopyWindowToVram(sGfx->windowIds[0], 2); + AddTextPrinterParameterized(sGfx->windowIds[0], FONT_NORMAL, gText_SomeoneDroppedOut, 0, 5, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX); sGfx->state++; break; case 2: @@ -5172,14 +5172,14 @@ static void InitBgs(void) SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); InitStandardTextBoxWindows(); InitTextBoxGfxAndPrinters(); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); diff --git a/src/easy_chat.c b/src/easy_chat.c index ad583839d7..91b44fb26b 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -15,7 +15,7 @@ #include "graphics.h" #include "international_string_util.h" #include "main.h" -#include "mevent.h" +#include "mystery_gift.h" #include "menu.h" #include "overworld.h" #include "palette.h" @@ -27,7 +27,6 @@ #include "task.h" #include "text_window.h" #include "window.h" -#include "constants/easy_chat.h" #include "constants/event_objects.h" #include "constants/lilycove_lady.h" #include "constants/mauville_old_man.h" @@ -857,7 +856,7 @@ static const struct WindowTemplate sEasyChatYesNoWindowTemplate = { static const u8 sText_Clear17[] = _("{CLEAR 17}"); -static const u8 *const sEasyChatKeyboardAlphabet[NUM_ALPHABET_ROWS] = +static const u8 *const sEasyChatKeyboardAlphabet[NUM_ALPHABET_ROWS] = { gText_EasyChatKeyboard_ABCDEFothers, gText_EasyChatKeyboard_GHIJKL, @@ -933,7 +932,7 @@ static const struct OamData sOamData_TriangleCursor = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -959,7 +958,7 @@ static const struct OamData sOamData_RectangleCursor = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -1020,7 +1019,7 @@ static const struct OamData sOamData_ModeWindow = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -1090,7 +1089,7 @@ static const struct OamData sOamData_ButtonWindow = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -1116,7 +1115,7 @@ static const struct OamData sOamData_StartSelectButton = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), .x = 0, @@ -1132,7 +1131,7 @@ static const struct OamData sOamData_ScrollIndicator = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -1310,7 +1309,7 @@ static void StartEasyChatScreen(u8 taskId, TaskFunc taskFunc) static void Task_InitEasyChatScreen(u8 taskId) { - if (!IsUpdateLinkStateCBActive()) + if (!IsOverworldLinkActive()) { while (InitEasyChatScreen(taskId)); } @@ -1493,7 +1492,7 @@ void ShowEasyChatScreen(void) displayedPersonType = EASY_CHAT_PERSON_REPORTER_MALE; break; case EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW: - words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].fanclubOpinions.words18; + words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].bravoTrainerTower.words; displayedPersonType = EASY_CHAT_PERSON_REPORTER_FEMALE; break; case EASY_CHAT_TYPE_GOOD_SAYING: @@ -1673,8 +1672,7 @@ static bool8 InitEasyChatScreenStruct(u8 type, u16 *words, u8 displayedPersonTyp static void FreeEasyChatScreenStruct(void) { - if (sEasyChatScreen != NULL) - FREE_AND_SET_NULL(sEasyChatScreen); + TRY_FREE_AND_SET_NULL(sEasyChatScreen); } // Returns the function ID of the action to take as a result of player's input. @@ -2908,7 +2906,7 @@ static void GetQuizTitle(u8 *dst) u8 name[32]; struct SaveBlock1 *saveBlock1 = gSaveBlock1Ptr; DynamicPlaceholderTextUtil_Reset(); - + // Buffer author's name if (StringLength(saveBlock1->lilycoveLady.quiz.playerName) != 0) { @@ -3076,8 +3074,7 @@ static bool8 LoadEasyChatScreen(void) static void FreeEasyChatScreenControl(void) { - if (sScreenControl) - FREE_AND_SET_NULL(sScreenControl); + TRY_FREE_AND_SET_NULL(sScreenControl); } static void StartEasyChatFunction(u16 funcId) @@ -3176,7 +3173,7 @@ static bool8 UpdateMainCursor(void) else { CopyEasyChatWord(str, *ecWord); - stringWidth = GetStringWidth(1, str, 0); + stringWidth = GetStringWidth(FONT_NORMAL, str, 0); } trueStringWidth = stringWidth + 17; @@ -3900,14 +3897,14 @@ static bool8 InitEasyChatScreenControl_(void) static void InitEasyChatBgs(void) { - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON); } @@ -3930,11 +3927,11 @@ static void PrintTitle(void) if (!titleText) return; - xOffset = GetStringCenterAlignXOffset(1, titleText, 144); + xOffset = GetStringCenterAlignXOffset(FONT_NORMAL, titleText, 144); FillWindowPixelBuffer(0, PIXEL_FILL(0)); - PrintEasyChatTextWithColors(0, 1, titleText, xOffset, 1, TEXT_SPEED_FF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); + PrintEasyChatTextWithColors(0, FONT_NORMAL, titleText, xOffset, 1, TEXT_SKIP_DRAW, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); } static void PrintEasyChatText(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) @@ -4003,12 +4000,12 @@ static void PrintEasyChatStdMessage(u8 msgId) FillWindowPixelBuffer(1, PIXEL_FILL(1)); if (text1) - PrintEasyChatText(1, 1, text1, 0, 1, TEXT_SPEED_FF, 0); + PrintEasyChatText(1, FONT_NORMAL, text1, 0, 1, TEXT_SKIP_DRAW, 0); if (text2) - PrintEasyChatText(1, 1, text2, 0, 17, TEXT_SPEED_FF, 0); + PrintEasyChatText(1, FONT_NORMAL, text2, 0, 17, TEXT_SKIP_DRAW, 0); - CopyWindowToVram(1, 3); + CopyWindowToVram(1, COPYWIN_FULL); } static void CreateEasyChatYesNoMenu(u8 initialCursorPos) @@ -4099,10 +4096,10 @@ static void PrintCurrentPhrase(void) } *str = EOS; - PrintEasyChatText(sScreenControl->windowId, 1, sScreenControl->phrasePrintBuffer, 0, i * 16 + 1, TEXT_SPEED_FF, 0); + PrintEasyChatText(sScreenControl->windowId, FONT_NORMAL, sScreenControl->phrasePrintBuffer, 0, i * 16 + 1, TEXT_SKIP_DRAW, 0); } - CopyWindowToVram(sScreenControl->windowId, 3); + CopyWindowToVram(sScreenControl->windowId, COPYWIN_FULL); } static void BufferFrameTilemap(u16 *tilemap) @@ -4118,7 +4115,7 @@ static void BufferFrameTilemap(u16 *tilemap) // These frames fill the screen, no need to draw top/bottom edges right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width; bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height; - + // Draw middle section for (y = sPhraseFrameDimensions[frameId].top; y < bottom; y++) { @@ -4216,7 +4213,7 @@ static void InitLowerWindowText(u32 whichText) break; } - CopyWindowToVram(2, 2); + CopyWindowToVram(2, COPYWIN_GFX); } static void PrintKeyboardText(void) @@ -4245,7 +4242,7 @@ static void PrintKeyboardGroupNames(void) return; } - PrintEasyChatText(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SPEED_FF, NULL); + PrintEasyChatText(2, FONT_NORMAL, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SKIP_DRAW, NULL); } y += 16; @@ -4257,7 +4254,7 @@ static void PrintKeyboardAlphabet(void) u32 i; for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardAlphabet); i++) - PrintEasyChatText(2, 1, sEasyChatKeyboardAlphabet[i], 10, 97 + i * 16, TEXT_SPEED_FF, NULL); + PrintEasyChatText(2, FONT_NORMAL, sEasyChatKeyboardAlphabet[i], 10, 97 + i * 16, TEXT_SKIP_DRAW, NULL); } static void PrintInitialWordSelectText(void) @@ -4328,16 +4325,16 @@ static void PrintWordSelectText(u8 scrollOffset, u8 numRows) { CopyEasyChatWordPadded(sScreenControl->wordSelectPrintBuffer, easyChatWord, 0); if (!DummyWordCheck(easyChatWord)) - PrintEasyChatText(2, 1, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SPEED_FF, NULL); + PrintEasyChatText(2, FONT_NORMAL, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SKIP_DRAW, NULL); else // Never reached - PrintEasyChatTextWithColors(2, 1, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SPEED_FF, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_LIGHT_GRAY); + PrintEasyChatTextWithColors(2, FONT_NORMAL, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SKIP_DRAW, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_LIGHT_GRAY); } } y += 16; } - CopyWindowToVram(2, 2); + CopyWindowToVram(2, COPYWIN_GFX); } static void EraseWordSelectRows(u8 scrollOffset, u8 numRows) @@ -4369,7 +4366,7 @@ static void EraseWordSelectRows(u8 scrollOffset, u8 numRows) static void ClearWordSelectWindow(void) { FillWindowPixelBuffer(2, PIXEL_FILL(1)); - CopyWindowToVram(2, 2); + CopyWindowToVram(2, COPYWIN_GFX); } static void InitLowerWindowAnim(int winAnimType) @@ -4516,7 +4513,7 @@ static void BufferLowerWindowFrame(int left, int top, int width, int height) bottom = top + height - 1; x = left; y = top; - + // Draw top edge tilemap[y * 32 + x] = FRAME_OFFSET_GREEN + FRAME_TILE_TOP_L_CORNER; x++; @@ -4550,7 +4547,7 @@ static void BufferLowerWindowFrame(int left, int top, int width, int height) static void ResetLowerWindowScroll(void) { - ChangeBgY(2, 0x800, 0); + ChangeBgY(2, 0x800, BG_COORD_SET); sScreenControl->scrollOffset = 0; } @@ -4572,7 +4569,7 @@ static void InitLowerWindowScroll(s16 scrollChange, u8 speed) } else { - ChangeBgY(2, bgY, 0); + ChangeBgY(2, bgY, BG_COORD_SET); } } @@ -4587,7 +4584,7 @@ static bool8 UpdateLowerWindowScroll(void) } else { - ChangeBgY(2, sScreenControl->scrollSpeed, 1); + ChangeBgY(2, sScreenControl->scrollSpeed, BG_COORD_ADD); return TRUE; } } @@ -4688,7 +4685,7 @@ static void UpdateRectangleCursorPos(void) s8 column; s8 row; - if (sScreenControl->rectangleCursorSpriteRight + if (sScreenControl->rectangleCursorSpriteRight && sScreenControl->rectangleCursorSpriteLeft) { GetKeyboardCursorColAndRow(&column, &row); @@ -5011,7 +5008,7 @@ static void TryAddInterviewObjectEvents(void) return; // Add object for reporter/interviewing fan (facing left) - spriteId = AddPseudoObjectEvent(graphicsId, SpriteCallbackDummy, 76, 40, 0); + spriteId = CreateObjectGraphicsSprite(graphicsId, SpriteCallbackDummy, 76, 40, 0); if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.priority = 0; @@ -5019,7 +5016,7 @@ static void TryAddInterviewObjectEvents(void) } // Add object for player (facing right) - spriteId = AddPseudoObjectEvent( + spriteId = CreateObjectGraphicsSprite( gSaveBlock2Ptr->playerGender == MALE ? OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL : OBJ_EVENT_GFX_RIVAL_MAY_NORMAL, SpriteCallbackDummy, 52, @@ -5082,7 +5079,7 @@ static void AddMainScreenButtonWindow(void) if (str) { int x = sFooterOptionXOffsets[footerIndex][i]; - PrintEasyChatText(windowId, 1, str, x, 1, 0, NULL); + PrintEasyChatText(windowId, FONT_NORMAL, str, x, 1, 0, NULL); } } @@ -5532,16 +5529,16 @@ void InitEasyChatPhrases(void) for (i = 0; i < ARRAY_COUNT(sDefaultProfileWords); i++) gSaveBlock1Ptr->easyChatProfile[i] = sDefaultProfileWords[i]; - + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) gSaveBlock1Ptr->easyChatBattleStart[i] = sDefaultBattleStartWords[i]; - + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) gSaveBlock1Ptr->easyChatBattleWon[i] = sDefaultBattleWonWords[i]; - + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) gSaveBlock1Ptr->easyChatBattleLost[i] = sDefaultBattleLostWords[i]; - + for (i = 0; i < MAIL_COUNT; i++) { for (j = 0; j < MAIL_WORDS_COUNT; j++) @@ -5574,8 +5571,7 @@ static bool8 InitEasyChatScreenWordData(void) static void FreeEasyChatScreenWordData(void) { - if (sWordData) - FREE_AND_SET_NULL(sWordData); + TRY_FREE_AND_SET_NULL(sWordData); } static void SetUnlockedEasyChatGroups(void) @@ -5585,11 +5581,11 @@ static void SetUnlockedEasyChatGroups(void) sWordData->numUnlockedGroups = 0; if (GetNationalPokedexCount(FLAG_GET_SEEN)) sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_POKEMON; - + // These groups are unlocked automatically for (i = EC_GROUP_TRAINER; i <= EC_GROUP_ADJECTIVES; i++) sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = i; - + if (FlagGet(FLAG_SYS_GAME_CLEAR)) { sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_EVENTS; @@ -5627,7 +5623,7 @@ static u8 *BufferEasyChatWordGroupName(u8 *dest, u8 groupId, u16 totalChars) *str = CHAR_SPACE; str++; } - + *str = EOS; return str; } @@ -5646,7 +5642,7 @@ static u8 *CopyEasyChatWordPadded(u8 *dest, u16 easyChatWord, u16 totalChars) *str = CHAR_SPACE; str++; } - + *str = EOS; return str; } diff --git a/src/egg_hatch.c b/src/egg_hatch.c index cf16eb3211..b7ae2e2ceb 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -37,16 +37,24 @@ #include "battle.h" // to get rid of later #include "constants/rgb.h" +#define GFXTAG_EGG 12345 +#define GFXTAG_EGG_SHARD 23456 + +#define PALTAG_EGG 54321 + +#define EGG_X (DISPLAY_WIDTH / 2) +#define EGG_Y (DISPLAY_HEIGHT / 2 - 5) + struct EggHatchData { - u8 eggSpriteID; - u8 pokeSpriteID; - u8 CB2_state; - u8 CB2_PalCounter; - u8 eggPartyID; + u8 eggSpriteId; + u8 monSpriteId; + u8 state; + u8 delayTimer; + u8 eggPartyId; u8 unused_5; u8 unused_6; - u8 eggShardVelocityID; + u8 eggShardVelocityId; u8 windowId; u8 unused_9; u8 unused_A; @@ -58,34 +66,32 @@ extern const u32 gTradePlatform_Tilemap[]; extern const u8 gText_HatchedFromEgg[]; extern const u8 gText_NicknameHatchPrompt[]; -static void Task_EggHatch(u8 taskID); -static void CB2_EggHatch_0(void); -static void CB2_EggHatch_1(void); -static void SpriteCB_Egg_0(struct Sprite* sprite); -static void SpriteCB_Egg_1(struct Sprite* sprite); -static void SpriteCB_Egg_2(struct Sprite* sprite); -static void SpriteCB_Egg_3(struct Sprite* sprite); -static void SpriteCB_Egg_4(struct Sprite* sprite); -static void SpriteCB_Egg_5(struct Sprite* sprite); -static void SpriteCB_EggShard(struct Sprite* sprite); -static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed); +static void Task_EggHatch(u8); +static void CB2_LoadEggHatch(void); +static void CB2_EggHatch(void); +static void SpriteCB_Egg_Shake1(struct Sprite *); +static void SpriteCB_Egg_Shake2(struct Sprite *); +static void SpriteCB_Egg_Shake3(struct Sprite *); +static void SpriteCB_Egg_WaitHatch(struct Sprite *); +static void SpriteCB_Egg_Hatch(struct Sprite *); +static void SpriteCB_Egg_Reveal(struct Sprite *); +static void SpriteCB_EggShard(struct Sprite *); +static void EggHatchPrintMessage(u8, u8 *, u8, u8, u8); static void CreateRandomEggShardSprite(void); -static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex); +static void CreateEggShardSprite(u8, u8, s16, s16, s16, u8); -// IWRAM bss static struct EggHatchData *sEggHatchData; -// rom data -static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/normal.gbapal"); -static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp"); -static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp"); +static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/normal.gbapal"); +static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/pokemon/egg/hatch.4bpp"); +static const u8 sEggShardTiles[] = INCBIN_U8("graphics/pokemon/egg/shard.4bpp"); -static const struct OamData sOamData_EggHatch = +static const struct OamData sOamData_Egg = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -97,64 +103,71 @@ static const struct OamData sOamData_EggHatch = .affineParam = 0, }; -static const union AnimCmd sSpriteAnim_EggHatch0[] = +static const union AnimCmd sSpriteAnim_Egg_Normal[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_EggHatch1[] = +static const union AnimCmd sSpriteAnim_Egg_Cracked1[] = { ANIMCMD_FRAME(16, 5), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_EggHatch2[] = +static const union AnimCmd sSpriteAnim_Egg_Cracked2[] = { ANIMCMD_FRAME(32, 5), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_EggHatch3[] = +static const union AnimCmd sSpriteAnim_Egg_Cracked3[] = { ANIMCMD_FRAME(48, 5), ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_EggHatch[] = +enum { + EGG_ANIM_NORMAL, + EGG_ANIM_CRACKED_1, + EGG_ANIM_CRACKED_2, + EGG_ANIM_CRACKED_3, +}; + +static const union AnimCmd *const sSpriteAnimTable_Egg[] = { - sSpriteAnim_EggHatch0, - sSpriteAnim_EggHatch1, - sSpriteAnim_EggHatch2, - sSpriteAnim_EggHatch3, + [EGG_ANIM_NORMAL] = sSpriteAnim_Egg_Normal, + [EGG_ANIM_CRACKED_1] = sSpriteAnim_Egg_Cracked1, + [EGG_ANIM_CRACKED_2] = sSpriteAnim_Egg_Cracked2, + [EGG_ANIM_CRACKED_3] = sSpriteAnim_Egg_Cracked3, }; static const struct SpriteSheet sEggHatch_Sheet = { .data = sEggHatchTiles, - .size = 2048, - .tag = 12345, + .size = 0x800, + .tag = GFXTAG_EGG, }; static const struct SpriteSheet sEggShards_Sheet = { .data = sEggShardTiles, - .size = 128, - .tag = 23456, + .size = 0x80, + .tag = GFXTAG_EGG_SHARD, }; static const struct SpritePalette sEgg_SpritePalette = { .data = sEggPalette, - .tag = 54321 + .tag = PALTAG_EGG }; -static const struct SpriteTemplate sSpriteTemplate_EggHatch = +static const struct SpriteTemplate sSpriteTemplate_Egg = { - .tileTag = 12345, - .paletteTag = 54321, - .oam = &sOamData_EggHatch, - .anims = sSpriteAnimTable_EggHatch, + .tileTag = GFXTAG_EGG, + .paletteTag = PALTAG_EGG, + .oam = &sOamData_Egg, + .anims = sSpriteAnimTable_Egg, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -165,7 +178,7 @@ static const struct OamData sOamData_EggShard = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -211,8 +224,8 @@ static const union AnimCmd *const sSpriteAnimTable_EggShard[] = static const struct SpriteTemplate sSpriteTemplate_EggShard = { - .tileTag = 23456, - .paletteTag = 54321, + .tileTag = GFXTAG_EGG_SHARD, + .paletteTag = PALTAG_EGG, .oam = &sOamData_EggShard, .anims = sSpriteAnimTable_EggShard, .images = NULL, @@ -220,7 +233,7 @@ static const struct SpriteTemplate sSpriteTemplate_EggShard = .callback = SpriteCB_EggShard }; -static const struct BgTemplate sBgTemplates_EggHatch[2] = +static const struct BgTemplate sBgTemplates_EggHatch[] = { { .bg = 0, @@ -243,7 +256,7 @@ static const struct BgTemplate sBgTemplates_EggHatch[2] = }, }; -static const struct WindowTemplate sWinTemplates_EggHatch[2] = +static const struct WindowTemplate sWinTemplates_EggHatch[] = { { .bg = 0, @@ -270,9 +283,14 @@ static const struct WindowTemplate sYesNoWinTemplate = static const s16 sEggShardVelocities[][2] = { + // First shake {Q_8_8(-1.5), Q_8_8(-3.75)}, + + // Third shake {Q_8_8(-5), Q_8_8(-3)}, {Q_8_8(3.5), Q_8_8(-3)}, + + // Hatching {Q_8_8(-4), Q_8_8(-3.75)}, {Q_8_8(2), Q_8_8(-1.5)}, {Q_8_8(-0.5), Q_8_8(-6.75)}, @@ -291,8 +309,6 @@ static const s16 sEggShardVelocities[][2] = {Q_8_8(2.5), Q_8_8(-7.5)}, }; -// code - static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; @@ -301,21 +317,17 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) u16 moves[MAX_MON_MOVES]; u32 ivs[NUM_STATS]; - species = GetMonData(egg, MON_DATA_SPECIES); for (i = 0; i < MAX_MON_MOVES; i++) - { moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i); - } personality = GetMonData(egg, MON_DATA_PERSONALITY); for (i = 0; i < NUM_STATS; i++) - { ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i); - } + // The language is initially read from the Egg but is later overwritten below language = GetMonData(egg, MON_DATA_LANGUAGE); gameMet = GetMonData(egg, MON_DATA_MET_GAME); markings = GetMonData(egg, MON_DATA_MARKINGS); @@ -325,14 +337,10 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); for (i = 0; i < MAX_MON_MOVES; i++) - { SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]); - } for (i = 0; i < NUM_STATS; i++) - { SetMonData(temp, MON_DATA_HP_IV + i, &ivs[i]); - } language = GAME_LANGUAGE; SetMonData(temp, MON_DATA_LANGUAGE, &language); @@ -350,34 +358,35 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) static void AddHatchedMonToParty(u8 id) { u8 isEgg = 0x46; // ? - u16 pokeNum; - u8 name[12]; + u16 species; + u8 name[POKEMON_NAME_LENGTH + 1]; u16 ball; - u16 caughtLvl; - u8 mapNameID; - struct Pokemon* mon = &gPlayerParty[id]; + u16 metLevel; + u8 metLocation; + struct Pokemon *mon = &gPlayerParty[id]; CreateHatchedMon(mon, &gEnemyParty[0]); SetMonData(mon, MON_DATA_IS_EGG, &isEgg); - pokeNum = GetMonData(mon, MON_DATA_SPECIES); - GetSpeciesName(name, pokeNum); + species = GetMonData(mon, MON_DATA_SPECIES); + GetSpeciesName(name, species); SetMonData(mon, MON_DATA_NICKNAME, name); - pokeNum = SpeciesToNationalPokedexNum(pokeNum); - GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN); - GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT); + species = SpeciesToNationalPokedexNum(species); + GetSetPokedexFlag(species, FLAG_SET_SEEN); + GetSetPokedexFlag(species, FLAG_SET_CAUGHT); GetMonNickname2(mon, gStringVar1); ball = ITEM_POKE_BALL; SetMonData(mon, MON_DATA_POKEBALL, &ball); - caughtLvl = 0; - SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl); + // A met level of 0 is interpreted on the summary screen as "hatched at" + metLevel = 0; + SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); - mapNameID = GetCurrentRegionMapSectionId(); - SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID); + metLocation = GetCurrentRegionMapSectionId(); + SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation); MonRestorePP(mon); CalculateMonStats(mon); @@ -396,10 +405,10 @@ static bool8 _CheckDaycareMonReceivedMail(struct DayCare *daycare, u8 daycareId) GetBoxMonNickname(&daycareMon->mon, nickname); if (daycareMon->mail.message.itemId != ITEM_NONE && (StringCompareWithoutExtCtrlCodes(nickname, daycareMon->mail.monName) != 0 - || StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0)) + || StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->mail.otName) != 0)) { StringCopy(gStringVar1, nickname); - TVShowConvertInternationalString(gStringVar2, daycareMon->mail.OT_name, daycareMon->mail.gameLanguage); + TVShowConvertInternationalString(gStringVar2, daycareMon->mail.otName, daycareMon->mail.gameLanguage); TVShowConvertInternationalString(gStringVar3, daycareMon->mail.monName, daycareMon->mail.monLanguage); return TRUE; } @@ -411,43 +420,46 @@ bool8 CheckDaycareMonReceivedMail(void) return _CheckDaycareMonReceivedMail(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004); } -static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc) +static u8 EggHatchCreateMonSprite(u8 useAlt, u8 state, u8 partyId, u16 *speciesLoc) { - u8 r5 = 0; - u8 spriteID = 0; - struct Pokemon* mon = NULL; + u8 position = 0; + u8 spriteId = 0; + struct Pokemon *mon = NULL; - if (a0 == 0) + if (useAlt == FALSE) { - mon = &gPlayerParty[pokeID]; - r5 = 1; + mon = &gPlayerParty[partyId]; + position = B_POSITION_OPPONENT_LEFT; } - if (a0 == 1) + if (useAlt == TRUE) { - mon = &gPlayerParty[pokeID]; - r5 = 3; + // Alternate sprite allocation position. Never reached. + mon = &gPlayerParty[partyId]; + position = B_POSITION_OPPONENT_RIGHT; } - switch (switchID) + switch (state) { case 0: + // Load mon sprite gfx { u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites.ptr[(a0 * 2) + 1], + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->sprites.ptr[(useAlt * 2) + B_POSITION_OPPONENT_LEFT], species, pid); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); *speciesLoc = species; } break; case 1: - SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, r5); - spriteID = CreateSprite(&gMultiuseSpriteTemplate, 120, 75, 6); - gSprites[spriteID].invisible = TRUE; - gSprites[spriteID].callback = SpriteCallbackDummy; + // Create mon sprite + SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, position); + spriteId = CreateSprite(&gMultiuseSpriteTemplate, EGG_X, EGG_Y, 6); + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].callback = SpriteCallbackDummy; break; } - return spriteID; + return spriteId; } static void VBlankCB_EggHatch(void) @@ -459,33 +471,33 @@ static void VBlankCB_EggHatch(void) void EggHatch(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); CreateTask(Task_EggHatch, 10); FadeScreen(FADE_TO_BLACK, 0); } -static void Task_EggHatch(u8 taskID) +static void Task_EggHatch(u8 taskId) { if (!gPaletteFade.active) { CleanupOverworldWindowsAndTilemaps(); - SetMainCallback2(CB2_EggHatch_0); + SetMainCallback2(CB2_LoadEggHatch); gFieldCallback = FieldCB_ContinueScriptHandleMusic; - DestroyTask(taskID); + DestroyTask(taskId); } } -static void CB2_EggHatch_0(void) +static void CB2_LoadEggHatch(void) { switch (gMain.state) { case 0: SetGpuReg(REG_OFFSET_DISPCNT, 0); - sEggHatchData = Alloc(sizeof(struct EggHatchData)); + sEggHatchData = Alloc(sizeof(*sEggHatchData)); AllocateMonSpritesGfx(); - sEggHatchData->eggPartyID = gSpecialVar_0x8004; - sEggHatchData->eggShardVelocityID = 0; + sEggHatchData->eggPartyId = gSpecialVar_0x8004; + sEggHatchData->eggShardVelocityId = 0; SetVBlankCallback(VBlankCB_EggHatch); gSpecialVar_0x8005 = GetCurrentMapMusic(); @@ -494,10 +506,10 @@ static void CB2_EggHatch_0(void) ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBgTemplates_EggHatch, ARRAY_COUNT(sBgTemplates_EggHatch)); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); SetBgAttribute(1, BG_ATTR_PRIORITY, 2); SetBgTilemapBuffer(1, Alloc(0x1000)); @@ -531,15 +543,15 @@ static void CB2_EggHatch_0(void) break; case 4: CopyBgTilemapBufferToVram(0); - AddHatchedMonToParty(sEggHatchData->eggPartyID); + AddHatchedMonToParty(sEggHatchData->eggPartyId); gMain.state++; break; case 5: - EggHatchCreateMonSprite(0, 0, sEggHatchData->eggPartyID, &sEggHatchData->species); + EggHatchCreateMonSprite(FALSE, 0, sEggHatchData->eggPartyId, &sEggHatchData->species); gMain.state++; break; case 6: - sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, sEggHatchData->eggPartyID, &sEggHatchData->species); + sEggHatchData->monSpriteId = EggHatchCreateMonSprite(FALSE, 1, sEggHatchData->eggPartyId, &sEggHatchData->species); gMain.state++; break; case 7: @@ -551,8 +563,8 @@ static void CB2_EggHatch_0(void) gMain.state++; break; case 8: - SetMainCallback2(CB2_EggHatch_1); - sEggHatchData->CB2_state = 0; + SetMainCallback2(CB2_EggHatch); + sEggHatchData->state = 0; break; } RunTasks(); @@ -570,121 +582,127 @@ static void EggHatchSetMonNickname(void) SetMainCallback2(CB2_ReturnToField); } -static void Task_EggHatchPlayBGM(u8 taskID) +#define tTimer data[0] + +static void Task_EggHatchPlayBGM(u8 taskId) { - if (gTasks[taskID].data[0] == 0) + if (gTasks[taskId].tTimer == 0) { StopMapMusic(); PlayRainStoppingSoundEffect(); } - if (gTasks[taskID].data[0] == 1) + + if (gTasks[taskId].tTimer == 1) PlayBGM(MUS_EVOLUTION_INTRO); - if (gTasks[taskID].data[0] > 60) + + if (gTasks[taskId].tTimer > 60) { PlayBGM(MUS_EVOLUTION); - DestroyTask(taskID); - // UB: task is destroyed, yet the value is incremented - #ifdef UBFIX - return; - #endif + DestroyTask(taskId); } - gTasks[taskID].data[0]++; + gTasks[taskId].tTimer++; } -static void CB2_EggHatch_1(void) +static void CB2_EggHatch(void) { u16 species; u8 gender; u32 personality; - switch (sEggHatchData->CB2_state) + switch (sEggHatchData->state) { case 0: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); - sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_EggHatch, 120, 75, 5); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); + sEggHatchData->eggSpriteId = CreateSprite(&sSpriteTemplate_Egg, EGG_X, EGG_Y, 5); ShowBg(0); ShowBg(1); - sEggHatchData->CB2_state++; + sEggHatchData->state++; CreateTask(Task_EggHatchPlayBGM, 5); break; case 1: if (!gPaletteFade.active) { FillWindowPixelBuffer(sEggHatchData->windowId, PIXEL_FILL(0)); - sEggHatchData->CB2_PalCounter = 0; - sEggHatchData->CB2_state++; + sEggHatchData->delayTimer = 0; + sEggHatchData->state++; } break; case 2: - if (++sEggHatchData->CB2_PalCounter > 30) + if (++sEggHatchData->delayTimer > 30) { - sEggHatchData->CB2_state++; - gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0; + // Start hatching animation + sEggHatchData->state++; + gSprites[sEggHatchData->eggSpriteId].callback = SpriteCB_Egg_Shake1; } break; case 3: - if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy) + // Wait for hatching animation to finish + if (gSprites[sEggHatchData->eggSpriteId].callback == SpriteCallbackDummy) { - species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); - DoMonFrontSpriteAnimation(&gSprites[sEggHatchData->pokeSpriteID], species, FALSE, 1); - sEggHatchData->CB2_state++; + species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyId], MON_DATA_SPECIES); + DoMonFrontSpriteAnimation(&gSprites[sEggHatchData->monSpriteId], species, FALSE, 1); + sEggHatchData->state++; } break; case 4: - if (gSprites[sEggHatchData->pokeSpriteID].callback == SpriteCallbackDummy) - { - sEggHatchData->CB2_state++; - } + // Wait for Pokémon's front sprite animation + if (gSprites[sEggHatchData->monSpriteId].callback == SpriteCallbackDummy) + sEggHatchData->state++; break; case 5: - GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); + // "{mon} hatched from egg" message/fanfare + GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg); - EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF); + EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, TEXT_SKIP_DRAW); PlayFanfare(MUS_EVOLVED); - sEggHatchData->CB2_state++; + sEggHatchData->state++; PutWindowTilemap(sEggHatchData->windowId); - CopyWindowToVram(sEggHatchData->windowId, 3); + CopyWindowToVram(sEggHatchData->windowId, COPYWIN_FULL); break; case 6: if (IsFanfareTaskInactive()) - sEggHatchData->CB2_state++; + sEggHatchData->state++; break; - case 7: + case 7: // Twice? if (IsFanfareTaskInactive()) - sEggHatchData->CB2_state++; + sEggHatchData->state++; break; case 8: - GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); + // Ready the nickname prompt + GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_NicknameHatchPrompt); EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1); - sEggHatchData->CB2_state++; + sEggHatchData->state++; break; case 9: + // Print the nickname prompt if (!IsTextPrinterActive(sEggHatchData->windowId)) { LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, 0xE0); CreateYesNoMenu(&sYesNoWinTemplate, 0x140, 0xE, 0); - sEggHatchData->CB2_state++; + sEggHatchData->state++; } break; case 10: + // Handle the nickname prompt input switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: - GetMonNickname2(&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); + case 0: // Yes + GetMonNickname2(&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); DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar3, species, gender, personality, EggHatchSetMonNickname); break; - case 1: - case -1: - sEggHatchData->CB2_state++; + case 1: // No + case MENU_B_PRESSED: + sEggHatchData->state++; + break; } break; case 11: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - sEggHatchData->CB2_state++; + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + sEggHatchData->state++; break; case 12: if (!gPaletteFade.active) @@ -706,136 +724,170 @@ static void CB2_EggHatch_1(void) UpdatePaletteFade(); } -static void SpriteCB_Egg_0(struct Sprite* sprite) +#define sTimer data[0] +#define sSinIdx data[1] +#define sDelayTimer data[2] + +static void SpriteCB_Egg_Shake1(struct Sprite *sprite) { - if (++sprite->data[0] > 20) + if (++sprite->sTimer > 20) { - sprite->callback = SpriteCB_Egg_1; - sprite->data[0] = 0; + sprite->callback = SpriteCB_Egg_Shake2; + sprite->sTimer = 0; } else { - sprite->data[1] = (sprite->data[1] + 20) & 0xFF; - sprite->x2 = Sin(sprite->data[1], 1); - if (sprite->data[0] == 15) + // Shake egg + sprite->sSinIdx = (sprite->sSinIdx + 20) & 0xFF; + sprite->x2 = Sin(sprite->sSinIdx, 1); + if (sprite->sTimer == 15) { + // First egg crack PlaySE(SE_BALL); - StartSpriteAnim(sprite, 1); + StartSpriteAnim(sprite, EGG_ANIM_CRACKED_1); CreateRandomEggShardSprite(); } } } -static void SpriteCB_Egg_1(struct Sprite* sprite) +static void SpriteCB_Egg_Shake2(struct Sprite *sprite) { - if (++sprite->data[2] > 30) + if (++sprite->sDelayTimer > 30) { - if (++sprite->data[0] > 20) + if (++sprite->sTimer > 20) { - sprite->callback = SpriteCB_Egg_2; - sprite->data[0] = 0; - sprite->data[2] = 0; + sprite->callback = SpriteCB_Egg_Shake3; + sprite->sTimer = 0; + sprite->sDelayTimer = 0; } else { - sprite->data[1] = (sprite->data[1] + 20) & 0xFF; - sprite->x2 = Sin(sprite->data[1], 2); - if (sprite->data[0] == 15) + // Shake egg + sprite->sSinIdx = (sprite->sSinIdx + 20) & 0xFF; + sprite->x2 = Sin(sprite->sSinIdx, 2); + if (sprite->sTimer == 15) { + // Second egg crack PlaySE(SE_BALL); - StartSpriteAnim(sprite, 2); + StartSpriteAnim(sprite, EGG_ANIM_CRACKED_2); } } } } -static void SpriteCB_Egg_2(struct Sprite* sprite) +static void SpriteCB_Egg_Shake3(struct Sprite *sprite) { - if (++sprite->data[2] > 30) + if (++sprite->sDelayTimer > 30) { - if (++sprite->data[0] > 38) + if (++sprite->sTimer > 38) { u16 species; - - sprite->callback = SpriteCB_Egg_3; - sprite->data[0] = 0; - species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); - gSprites[sEggHatchData->pokeSpriteID].x2 = 0; - gSprites[sEggHatchData->pokeSpriteID].y2 = 0; + sprite->callback = SpriteCB_Egg_WaitHatch; + sprite->sTimer = 0; + species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyId], MON_DATA_SPECIES); + gSprites[sEggHatchData->monSpriteId].x2 = 0; + gSprites[sEggHatchData->monSpriteId].y2 = 0; } else { - sprite->data[1] = (sprite->data[1] + 20) & 0xFF; - sprite->x2 = Sin(sprite->data[1], 2); - if (sprite->data[0] == 15) + // Shake egg + sprite->sSinIdx = (sprite->sSinIdx + 20) & 0xFF; + sprite->x2 = Sin(sprite->sSinIdx, 2); + if (sprite->sTimer == 15) { + // Third egg crack + // This ineffectually sets the animation to the frame it's already using. + // They likely meant to use the 3rd and final cracked frame of the egg, which goes unused as a result. PlaySE(SE_BALL); - StartSpriteAnim(sprite, 2); + #ifdef BUGFIX + StartSpriteAnim(sprite, EGG_ANIM_CRACKED_3); + #else + StartSpriteAnim(sprite, EGG_ANIM_CRACKED_2); + #endif CreateRandomEggShardSprite(); CreateRandomEggShardSprite(); } - if (sprite->data[0] == 30) + if (sprite->sTimer == 30) PlaySE(SE_BALL); } } } -static void SpriteCB_Egg_3(struct Sprite* sprite) +static void SpriteCB_Egg_WaitHatch(struct Sprite *sprite) { - if (++sprite->data[0] > 50) + if (++sprite->sTimer > 50) { - sprite->callback = SpriteCB_Egg_4; - sprite->data[0] = 0; + sprite->callback = SpriteCB_Egg_Hatch; + sprite->sTimer = 0; } } -static void SpriteCB_Egg_4(struct Sprite* sprite) +static void SpriteCB_Egg_Hatch(struct Sprite *sprite) { s16 i; - if (sprite->data[0] == 0) - BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 0x10, RGB_WHITEALPHA); - if (sprite->data[0] < 4u) + + // Fade to white to hide transition from egg to Pokémon + if (sprite->sTimer == 0) + BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_WHITEALPHA); + + // Create a shower of 16 egg shards in 4 groups of 4 + if ((u32)sprite->sTimer < 4) { - for (i = 0; i <= 3; i++) + for (i = 0; i < 4; i++) CreateRandomEggShardSprite(); } - sprite->data[0]++; + + sprite->sTimer++; + if (!gPaletteFade.active) { + // Screen is hidden by the fade to white, hide egg PlaySE(SE_EGG_HATCH); sprite->invisible = TRUE; - sprite->callback = SpriteCB_Egg_5; - sprite->data[0] = 0; + sprite->callback = SpriteCB_Egg_Reveal; + sprite->sTimer = 0; } } -static void SpriteCB_Egg_5(struct Sprite* sprite) +static void SpriteCB_Egg_Reveal(struct Sprite *sprite) { - if (sprite->data[0] == 0) + if (sprite->sTimer == 0) { - gSprites[sEggHatchData->pokeSpriteID].invisible = FALSE; - StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], BATTLER_AFFINE_EMERGE); + // Reveal hatched Pokémon + gSprites[sEggHatchData->monSpriteId].invisible = FALSE; + StartSpriteAffineAnim(&gSprites[sEggHatchData->monSpriteId], BATTLER_AFFINE_EMERGE); } - if (sprite->data[0] == 8) - BeginNormalPaletteFade(PALETTES_ALL, -1, 0x10, 0, RGB_WHITEALPHA); - if (sprite->data[0] <= 9) - gSprites[sEggHatchData->pokeSpriteID].y -= 1; - if (sprite->data[0] > 40) - sprite->callback = SpriteCallbackDummy; - sprite->data[0]++; + + // Fade back from white for reveal + if (sprite->sTimer == 8) + BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_WHITEALPHA); + + if (sprite->sTimer <= 9) + gSprites[sEggHatchData->monSpriteId].y--; + + if (sprite->sTimer > 40) + sprite->callback = SpriteCallbackDummy; // Finished + + sprite->sTimer++; } -static void SpriteCB_EggShard(struct Sprite* sprite) +#define sVelocX data[1] +#define sVelocY data[2] +#define sAccelY data[3] +#define sDeltaX data[4] +#define sDeltaY data[5] + +static void SpriteCB_EggShard(struct Sprite *sprite) { - sprite->data[4] += sprite->data[1]; - sprite->data[5] += sprite->data[2]; + sprite->sDeltaX += sprite->sVelocX; + sprite->sDeltaY += sprite->sVelocY; - sprite->x2 = sprite->data[4] / 256; - sprite->y2 = sprite->data[5] / 256; + sprite->x2 = sprite->sDeltaX / 256; + sprite->y2 = sprite->sDeltaY / 256; - sprite->data[2] += sprite->data[3]; + sprite->sVelocY += sprite->sAccelY; - if (sprite->y + sprite->y2 > sprite->y + 20 && sprite->data[2] > 0) + if (sprite->y + sprite->y2 > sprite->y + 20 && sprite->sVelocY > 0) DestroySprite(sprite); } @@ -843,29 +895,32 @@ static void CreateRandomEggShardSprite(void) { u16 spriteAnimIndex; - s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; - s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1]; - sEggHatchData->eggShardVelocityID++; - spriteAnimIndex = Random() % 4; - CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex); + s16 velocityX = sEggShardVelocities[sEggHatchData->eggShardVelocityId][0]; + s16 velocityY = sEggShardVelocities[sEggHatchData->eggShardVelocityId][1]; + sEggHatchData->eggShardVelocityId++; + + // Randomly choose one of the 4 shard images + spriteAnimIndex = Random() % ARRAY_COUNT(sSpriteAnimTable_EggShard); + + CreateEggShardSprite(EGG_X, EGG_Y - 15, velocityX, velocityY, 100, spriteAnimIndex); } -static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex) +static void CreateEggShardSprite(u8 x, u8 y, s16 velocityX, s16 velocityY, s16 acceleration, u8 spriteAnimIndex) { - u8 spriteID = CreateSprite(&sSpriteTemplate_EggShard, x, y, 4); - gSprites[spriteID].data[1] = data1; - gSprites[spriteID].data[2] = data2; - gSprites[spriteID].data[3] = data3; - StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex); + u8 spriteId = CreateSprite(&sSpriteTemplate_EggShard, x, y, 4); + gSprites[spriteId].sVelocX = velocityX; + gSprites[spriteId].sVelocY = velocityY; + gSprites[spriteId].sAccelY = acceleration; + StartSpriteAnim(&gSprites[spriteId], spriteAnimIndex); } -static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed) +static void EggHatchPrintMessage(u8 windowId, u8 *string, u8 x, u8 y, u8 speed) { FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); sEggHatchData->textColor[0] = 0; sEggHatchData->textColor[1] = 5; sEggHatchData->textColor[2] = 6; - AddTextPrinterParameterized4(windowId, 1, x, y, 0, 0, sEggHatchData->textColor, speed, string); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 0, 0, sEggHatchData->textColor, speed, string); } u8 GetEggCyclesToSubtract(void) @@ -875,8 +930,10 @@ u8 GetEggCyclesToSubtract(void) { if (!GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG)) { - u8 ability = GetMonAbility(&gPlayerParty[i]); - if (ability == ABILITY_MAGMA_ARMOR || ability == ABILITY_FLAME_BODY) + u16 ability = GetMonAbility(&gPlayerParty[i]); + if (ability == ABILITY_MAGMA_ARMOR + || ability == ABILITY_FLAME_BODY + || ability == ABILITY_STEAM_ENGINE) return 2; } } diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index 90e9caf4e3..aaaaf00eeb 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -10,36 +10,13 @@ #include "task.h" #include "util.h" #include "trainer_hill.h" -#include "constants/easy_chat.h" #include "constants/trainers.h" #include "constants/moves.h" #include "constants/items.h" #include "constants/trainer_hill.h" -enum { - EREADER_XFR_STATE_INIT = 0, - EREADER_XFR_STATE_HANDSHAKE, - EREADER_XFR_STATE_START, - EREADER_XFR_STATE_TRANSFER, - EREADER_XFR_STATE_TRANSFER_DONE, - EREADER_XFR_STATE_CHECKSUM, - EREADER_XFR_STATE_DONE -}; - -#define EREADER_XFER_EXE 1 -#define EREADER_XFER_CHK 2 -#define EREADER_XFER_SHIFT 0 -#define EREADER_XFER_MASK 3 - -#define EREADER_CANCEL_TIMEOUT 1 -#define EREADER_CANCEL_KEY 2 -#define EREADER_CANCEL_MASK 0xC -#define EREADER_CANCEL_SHIFT 2 - -#define EREADER_CHECKSUM_OK 1 -#define EREADER_CHECKSUM_ERR 2 -#define EREADER_CHECKSUM_MASK 0x30 -#define EREADER_CHECKSUM_SHIFT 4 +// Save data using TryWriteSpecialSaveSector is allowed to exceed SECTOR_DATA_SIZE (up to the counter field) +STATIC_ASSERT(sizeof(struct TrainerHillChallenge) <= SECTOR_COUNTER_OFFSET, TrainerHillChallengeFreeSpace); struct SendRecvMgr { @@ -83,22 +60,20 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .speechLose = { EC_WORD_TO_HER, EC_WORD_WIN, EC_WORD_JOKING, EC_WORD_HIGHS, EC_WORD_SCARY, EC_WORD_ELLIPSIS_EXCL }, .speechAfter = { EC_WORD_IGNORANT, EC_WORD_SO, EC_WORD_TODAY, EC_WORD_NIGHTTIME, EC_WORD_YOU_RE, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS }, .mons = { - [0] = NULL_BATTLE_TOWER_POKEMON, - [1] = NULL_BATTLE_TOWER_POKEMON, - [2] = NULL_BATTLE_TOWER_POKEMON, + [0] = DUMMY_HILL_MON, + [1] = DUMMY_HILL_MON, + [2] = DUMMY_HILL_MON, [3] = { .species = SPECIES_SWALOT, .heldItem = ITEM_SHELL_BELL, .moves = { MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_PAIN_SPLIT, MOVE_YAWN }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 55, .attackEV = 255, .defenseEV = 100, .speedEV = 0, .spAttackEV = 0, .spDefenseEV = 100, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -108,21 +83,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 1, .personality = 0x80, .nickname = __("マルノーム$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [4] = { .species = SPECIES_DUSTOX, .heldItem = ITEM_BRIGHT_POWDER, .moves = { MOVE_SILVER_WIND, MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_GIGA_DRAIN }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 0, .attackEV = 255, .defenseEV = 0, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 0, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -132,21 +105,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x6, .nickname = __("ドクケイル$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [5] = { .species = SPECIES_RELICANTH, .heldItem = ITEM_QUICK_CLAW, .moves = { MOVE_ANCIENT_POWER, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_AMNESIA }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 100, .attackEV = 0, .defenseEV = 0, .speedEV = 0, .spAttackEV = 155, .spDefenseEV = 255, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -156,7 +127,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x2f, .nickname = __("ジーランス$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, } }, @@ -169,22 +140,20 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .speechLose = { EC_MOVE2(MINIMIZE), EC_WORD_AS_MUCH_AS, EC_EMPTY_WORD, EC_WORD_THEY_RE, EC_WORD_SAD, EC_WORD_EXCL }, .speechAfter = { EC_MOVE(BITE), EC_WORD_AS_MUCH_AS, EC_EMPTY_WORD, EC_WORD_THEY_RE, EC_WORD_ANGRY, EC_WORD_EXCL }, .mons = { - [0] = NULL_BATTLE_TOWER_POKEMON, - [1] = NULL_BATTLE_TOWER_POKEMON, - [2] = NULL_BATTLE_TOWER_POKEMON, + [0] = DUMMY_HILL_MON, + [1] = DUMMY_HILL_MON, + [2] = DUMMY_HILL_MON, [3] = { .species = SPECIES_CACTURNE, .heldItem = ITEM_QUICK_CLAW, .moves = { MOVE_GIGA_DRAIN, MOVE_FEINT_ATTACK, MOVE_THUNDER_PUNCH, MOVE_GROWTH }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 55, .attackEV = 0, .defenseEV = 100, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 100, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -194,21 +163,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x8c, .nickname = __("ノクタス$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [4] = { .species = SPECIES_SWELLOW, .heldItem = ITEM_BRIGHT_POWDER, .moves = { MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 255, .attackEV = 255, .defenseEV = 0, .speedEV = 0, .spAttackEV = 0, .spDefenseEV = 0, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -218,21 +185,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x80, .nickname = __("オオスバメ$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [5] = { .species = SPECIES_WHISCASH, .heldItem = ITEM_CHESTO_BERRY, .moves = { MOVE_SURF, MOVE_EARTHQUAKE, MOVE_AMNESIA, MOVE_REST }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 0, .attackEV = 255, .defenseEV = 0, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 0, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -242,7 +207,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x0, .nickname = __("ナマズン$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, } }, @@ -255,22 +220,20 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .speechLose = { EC_WORD_THAT, EC_WORD_ABOVE, EC_WORD_LOST, EC_WORD_STORES, EC_WORD_JOKING, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS }, .speechAfter = { EC_WORD_ENTERTAINING, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_ALMOST, EC_WORD_EXCL, EC_EMPTY_WORD }, .mons = { - [0] = NULL_BATTLE_TOWER_POKEMON, - [1] = NULL_BATTLE_TOWER_POKEMON, - [2] = NULL_BATTLE_TOWER_POKEMON, + [0] = DUMMY_HILL_MON, + [1] = DUMMY_HILL_MON, + [2] = DUMMY_HILL_MON, [3] = { .species = SPECIES_DELCATTY, .heldItem = ITEM_LUM_BERRY, .moves = { MOVE_SING, MOVE_BODY_SLAM, MOVE_SHADOW_BALL, MOVE_IRON_TAIL }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 0, .attackEV = 255, .defenseEV = 0, .speedEV = 255, .spAttackEV = 0, .spDefenseEV = 0, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -280,21 +243,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x3, .nickname = __("エネコロロ$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [4] = { .species = SPECIES_ROSELIA, .heldItem = ITEM_LEFTOVERS, .moves = { MOVE_GIGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_TOXIC, MOVE_LEECH_SEED }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 255, .attackEV = 0, .defenseEV = 0, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 0, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -304,21 +265,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 1, .personality = 0x6, .nickname = __("ロゼリア$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [5] = { .species = SPECIES_BEAUTIFLY, .heldItem = ITEM_BRIGHT_POWDER, .moves = { MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_PSYCHIC }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 100, .attackEV = 200, .defenseEV = 0, .speedEV = 0, .spAttackEV = 200, .spDefenseEV = 0, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -328,7 +287,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x6, .nickname = __("アゲハント$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, } }, @@ -341,22 +300,20 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .speechLose = { EC_WORD_OUTSIDE, EC_WORD_UNCLE, EC_WORD_SURPRISE, EC_WORD_THESE, EC_WORD_HEY_QUES, EC_WORD_ELLIPSIS_EXCL }, .speechAfter = { EC_WORD_HE_S, EC_WORD_NO_1, EC_WORD_STRONG, EC_WORD_CHILDREN, EC_WORD_CAN_T, EC_WORD_EXCL_EXCL }, .mons = { - [0] = NULL_BATTLE_TOWER_POKEMON, - [1] = NULL_BATTLE_TOWER_POKEMON, - [2] = NULL_BATTLE_TOWER_POKEMON, + [0] = DUMMY_HILL_MON, + [1] = DUMMY_HILL_MON, + [2] = DUMMY_HILL_MON, [3] = { .species = SPECIES_MAWILE, .heldItem = ITEM_BRIGHT_POWDER, .moves = { MOVE_CRUNCH, MOVE_FLAMETHROWER, MOVE_THUNDER_PUNCH, MOVE_COMET_PUNCH }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 0, .attackEV = 0, .defenseEV = 100, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 155, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -366,21 +323,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 1, .personality = 0x0, .nickname = __("クチート$$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [4] = { .species = SPECIES_SHARPEDO, .heldItem = ITEM_SCOPE_LENS, .moves = { MOVE_SURF, MOVE_CRUNCH, MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 255, .attackEV = 0, .defenseEV = 0, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 0, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -390,21 +345,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x96, .nickname = __("サメハダー$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, [5] = { .species = SPECIES_BANETTE, .heldItem = ITEM_LUM_BERRY, .moves = { MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_WILL_O_WISP }, - .level = 0, - .ppBonuses = 0x0, .hpEV = 255, .attackEV = 0, .defenseEV = 0, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 0, - .otId = 0x10000000, + .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -414,7 +367,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x96, .nickname = __("ジュペッタ$$$$$$"), - .friendship = 255 + .friendship = MAX_FRIENDSHIP }, } }, @@ -473,40 +426,40 @@ static bool32 ValidateTrainerHillChecksum(struct EReaderTrainerHillSet *hillSet) return TRUE; } -static bool32 TryWriteTrainerHill_Internal(struct EReaderTrainerHillSet * hillSet, struct TrHillTag * hillTag) +static bool32 TryWriteTrainerHill_Internal(struct EReaderTrainerHillSet * hillSet, struct TrainerHillChallenge * challenge) { int i; AGB_ASSERT_EX(hillSet->dummy == 0, "cereader_tool.c", 450); AGB_ASSERT_EX(hillSet->id == 0, "cereader_tool.c", 452); - memset(hillTag, 0, SECTOR_SIZE); - hillTag->numTrainers = hillSet->numTrainers; - hillTag->unused1 = GetTrainerHillUnkVal(); - hillTag->numFloors = (hillSet->numTrainers + 1) / TRAINER_HILL_TRAINERS_PER_FLOOR; + memset(challenge, 0, SECTOR_SIZE); + challenge->numTrainers = hillSet->numTrainers; + challenge->unused1 = GetTrainerHillUnkVal(); + challenge->numFloors = (hillSet->numTrainers + 1) / HILL_TRAINERS_PER_FLOOR; for (i = 0; i < hillSet->numTrainers; i++) { if (!(i & 1)) { - hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainerNum1 = hillSet->trainers[i].trainerNum; - hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].display = hillSet->trainers[i].display; - hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[0] = hillSet->trainers[i].trainer; + challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainerNum1 = hillSet->trainers[i].trainerNum; + challenge->floors[i / HILL_TRAINERS_PER_FLOOR].map = hillSet->trainers[i].map; + challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainers[0] = hillSet->trainers[i].trainer; } else { - hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainerNum2 = hillSet->trainers[i].trainerNum; - hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[1] = hillSet->trainers[i].trainer; + challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainerNum2 = hillSet->trainers[i].trainerNum; + challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainers[1] = hillSet->trainers[i].trainer; } } if (i & 1) { - hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[1] = sTrainerHillTrainerTemplates_JP[i / TRAINER_HILL_TRAINERS_PER_FLOOR]; + challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainers[1] = sTrainerHillTrainerTemplates_JP[i / HILL_TRAINERS_PER_FLOOR]; } - hillTag->checksum = CalcByteArraySum((u8 *)hillTag->floors, NUM_TRAINER_HILL_FLOORS * sizeof(struct TrHillFloor)); - if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)hillTag) != SAVE_STATUS_OK) + challenge->checksum = CalcByteArraySum((u8 *)challenge->floors, NUM_TRAINER_HILL_FLOORS * sizeof(struct TrainerHillFloor)); + if (TryWriteSpecialSaveSector(SECTOR_ID_TRAINER_HILL, (u8 *)challenge) != SAVE_STATUS_OK) return FALSE; return TRUE; @@ -520,9 +473,9 @@ bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet * hillSet) return result; } -static bool32 TryReadTrainerHill_Internal(struct EReaderTrainerHillSet * dest, u8 * buffer) +static bool32 TryReadTrainerHill_Internal(struct EReaderTrainerHillSet * dest, u8 *buffer) { - if (TryReadSpecialSaveSection(SECTOR_ID_TRAINER_HILL, buffer) != SAVE_STATUS_OK) + if (TryReadSpecialSaveSector(SECTOR_ID_TRAINER_HILL, buffer) != SAVE_STATUS_OK) return FALSE; memcpy(dest, buffer, sizeof(struct EReaderTrainerHillSet)); @@ -562,17 +515,17 @@ int EReader_Send(int size, const void * src) sendStatus = EReaderHandleTransfer(1, size, src, NULL); sSendRecvStatus = sendStatus; - if ((sSendRecvStatus & 0x13) == 0x10) + if ((sSendRecvStatus & EREADER_XFER_MASK) == 0 && sSendRecvStatus & EREADER_CHECKSUM_OK_MASK) { result = 0; break; } - else if (sSendRecvStatus & 0x8) + else if (sSendRecvStatus & EREADER_CANCEL_KEY_MASK) { result = 1; break; } - else if (sSendRecvStatus & 0x4) + else if (sSendRecvStatus & EREADER_CANCEL_TIMEOUT_MASK) { result = 2; break; @@ -603,17 +556,17 @@ int EReader_Recv(void * dest) recvStatus = EReaderHandleTransfer(0, 0, NULL, dest); sSendRecvStatus = recvStatus; - if ((sSendRecvStatus & 0x13) == 0x10) + if ((sSendRecvStatus & EREADER_XFER_MASK) == 0 && sSendRecvStatus & EREADER_CHECKSUM_OK_MASK) { result = 0; break; } - else if (sSendRecvStatus & 0x8) + else if (sSendRecvStatus & EREADER_CANCEL_KEY_MASK) { result = 1; break; } - else if (sSendRecvStatus & 0x4) + else if (sSendRecvStatus & EREADER_CANCEL_TIMEOUT_MASK) { result = 2; break; @@ -745,7 +698,7 @@ int EReaderHandleTransfer(u8 mode, size_t size, const void * data, void * recvBu } return (sSendRecvMgr.xferState << EREADER_XFER_SHIFT) - | (sSendRecvMgr.cancellationReason << EREADER_CANCEL_SHIFT) + | (sSendRecvMgr.cancellationReason << EREADER_CANCEL_SHIFT) | (sSendRecvMgr.checksumResult << EREADER_CHECKSUM_SHIFT); } diff --git a/src/ereader_screen.c b/src/ereader_screen.c index 438c4bec9d..3baff84a85 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -4,7 +4,7 @@ #include "ereader_helpers.h" #include "link.h" #include "main.h" -#include "mystery_gift.h" +#include "mystery_gift_menu.h" #include "save.h" #include "sound.h" #include "sprite.h" @@ -13,37 +13,38 @@ #include "util.h" #include "constants/songs.h" -struct Unk81D5014 +// Equivalent to MysteryGiftTaskData +struct EReaderTaskData { - u16 unk0; - u16 unk2; - u16 unk4; - u16 unk6; - u8 unk8; - u8 unk9; - u8 unkA; - u8 unkB; - u8 unkC; - u8 unkD; - u8 unkE; - u8 *unk10; + u16 timer; + u16 unused1; + u16 unused2; + u16 unused3; + u8 state; + u8 textState; + u8 unused4; + u8 unused5; + u8 unused6; + u8 unused7; + u8 status; + u8 *unusedBuffer; }; -struct Unk03006370 +struct EReaderData { - u16 unk0; - u32 unk4; - u32 *unk8; + u16 status; + u32 size; + u32 *data; }; -static void sub_81D5084(u8); +static void Task_EReader(u8); -struct Unk03006370 gUnknown_03006370; +struct EReaderData gEReaderData; -extern const u8 gUnknown_089A3470[]; -extern const u8 gMultiBootProgram_BerryGlitchFix_Start[]; +extern const u8 gMultiBootProgram_EReader_Start[]; +extern const u8 gMultiBootProgram_EReader_End[]; -static void sub_81D4D50(struct Unk03006370 *arg0, int arg1, u32 *arg2) +static void EReader_Load(struct EReaderData *eReader, int size, u32 *data) { volatile u16 backupIME = REG_IME; REG_IME = 0; @@ -53,12 +54,12 @@ static void sub_81D4D50(struct Unk03006370 *arg0, int arg1, u32 *arg2) EReaderHelper_ClearSendRecvMgr(); REG_IE |= INTR_FLAG_VCOUNT; REG_IME = backupIME; - arg0->unk0 = 0; - arg0->unk4 = arg1; - arg0->unk8 = arg2; + eReader->status = 0; + eReader->size = size; + eReader->data = data; } -static void sub_81D4DB8(struct Unk03006370 *arg0) +static void EReader_Reset(struct EReaderData *eReader) { volatile u16 backupIME = REG_IME; REG_IME = 0; @@ -68,21 +69,30 @@ static void sub_81D4DB8(struct Unk03006370 *arg0) REG_IME = backupIME; } -static u8 sub_81D4DE8(struct Unk03006370 *arg0) +// Return values for EReader_Transfer +enum { + TRANSFER_ACTIVE, + TRANSFER_SUCCESS, + TRANSFER_CANCELED, + TRANSFER_TIMEOUT, +}; + +static u8 EReader_Transfer(struct EReaderData *eReader) { - u8 var0 = 0; - arg0->unk0 = EReaderHandleTransfer(1, arg0->unk4, arg0->unk8, NULL); - if ((arg0->unk0 & 0x13) == 0x10) - var0 = 1; + u8 transferStatus = TRANSFER_ACTIVE; + eReader->status = EReaderHandleTransfer(TRUE, eReader->size, eReader->data, NULL); - if (arg0->unk0 & 0x8) - var0 = 2; + if ((eReader->status & EREADER_XFER_MASK) == 0 && eReader->status & EREADER_CHECKSUM_OK_MASK) + transferStatus = TRANSFER_SUCCESS; - if (arg0->unk0 & 0x4) - var0 = 3; + if (eReader->status & EREADER_CANCEL_KEY_MASK) + transferStatus = TRANSFER_CANCELED; + + if (eReader->status & EREADER_CANCEL_TIMEOUT_MASK) + transferStatus = TRANSFER_TIMEOUT; gShouldAdvanceLinkState = 0; - return var0; + return transferStatus; } static void OpenEReaderLink(void) @@ -93,17 +103,20 @@ static void OpenEReaderLink(void) SetSuppressLinkErrorMessage(TRUE); } -static bool32 sub_81D4E60(void) +static bool32 ValidateEReaderConnection(void) { volatile u16 backupIME; - u16 sp4[4]; + u16 handshakes[MAX_LINK_PLAYERS]; backupIME = REG_IME; REG_IME = 0; - *(u64 *)sp4 = *(u64 *)gLink.tempRecvBuffer; + *(u64 *)handshakes = *(u64 *)gLink.handshakeBuffer; REG_IME = backupIME; - if (sp4[0] == 0xB9A0 && sp4[1] == 0xCCD0 - && sp4[2] == 0xFFFF && sp4[3] == 0xFFFF) + + // Validate that we are player 1, the EReader is player 2, + // and that players 3 and 4 are empty. + if (handshakes[0] == SLAVE_HANDSHAKE && handshakes[1] == EREADER_HANDSHAKE + && handshakes[2] == 0xFFFF && handshakes[3] == 0xFFFF) { return TRUE; } @@ -111,7 +124,7 @@ static bool32 sub_81D4E60(void) return FALSE; } -static bool32 sub_81D4EC0(void) +static bool32 IsChildConnected(void) { if (IsLinkMaster() && GetLinkPlayerCount_2() == 2) return TRUE; @@ -119,56 +132,77 @@ static bool32 sub_81D4EC0(void) return FALSE; } -static u32 sub_81D4EE4(u8 *arg0, u16 *arg1) -{ - u8 var0; +// States for TryReceiveCard +enum { + RECV_STATE_INIT, + RECV_STATE_WAIT_START, + RECV_STATE_START, + RECV_STATE_EXCHANGE, + RECV_STATE_START_DISCONNECT, + RECV_STATE_WAIT_DISCONNECT, +}; - var0 = *arg0 - 3; - if (var0 < 3 && HasLinkErrorOccurred()) +// Return values for TryReceiveCard +enum { + RECV_ACTIVE, + RECV_CANCELED, + RECV_SUCCESS, + RECV_ERROR, + RECV_DISCONNECTED, + RECV_TIMEOUT, +}; + +static u32 TryReceiveCard(u8 *state, u16 *timer) +{ + if (*state >= RECV_STATE_EXCHANGE + && *state <= RECV_STATE_WAIT_DISCONNECT + && HasLinkErrorOccurred()) { - *arg0 = 0; - return 3; + // Return error status if an error occurs + // during the link exchange. + *state = 0; + return RECV_ERROR; } - switch (*arg0) + switch (*state) { - case 0: + case RECV_STATE_INIT: if (IsLinkMaster() && GetLinkPlayerCount_2() > 1) { - *arg0 = 1; + *state = RECV_STATE_WAIT_START; } else if (JOY_NEW(B_BUTTON)) { - *arg0 = 0; - return 1; + *state = 0; + return RECV_CANCELED; } break; - case 1: - if (++(*arg1) > 5) + case RECV_STATE_WAIT_START: + if (++(*timer) > 5) { - *arg1 = 0; - *arg0 = 2; + *timer = 0; + *state = RECV_STATE_START; } break; - case 2: + case RECV_STATE_START: if (GetLinkPlayerCount_2() == 2) { PlaySE(SE_DING_DONG); CheckShouldAdvanceLinkState(); - *arg1 = 0; - *arg0 = 3; + *timer = 0; + *state = RECV_STATE_EXCHANGE; } else if (JOY_NEW(B_BUTTON)) { - *arg0 = 0; - return 1; + *state = 0; + return RECV_CANCELED; } break; - case 3: - if (++(*arg1) > 30) + case RECV_STATE_EXCHANGE: + if (++(*timer) > 30) { - *arg0 = 0; - return 5; + *state = 0; + return RECV_TIMEOUT; } if (IsLinkConnectionEstablished()) @@ -177,285 +211,320 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1) { if (IsLinkPlayerDataExchangeComplete()) { - *arg0 = 0; - return 2; + *state = 0; + return RECV_SUCCESS; } else { - *arg0 = 4; + *state = RECV_STATE_START_DISCONNECT; } } else { - *arg0 = 3; + *state = RECV_STATE_EXCHANGE; } } break; - case 4: + case RECV_STATE_START_DISCONNECT: SetCloseLinkCallbackAndType(0); - *arg0 = 5; + *state = RECV_STATE_WAIT_DISCONNECT; break; - case 5: + case RECV_STATE_WAIT_DISCONNECT: if (!gReceivedRemoteLinkPlayers) { - *arg0 = 0; - return 4; + *state = 0; + return RECV_DISCONNECTED; } break; default: - return 0; + return RECV_ACTIVE; } - return 0; + return RECV_ACTIVE; } -void task_add_00_ereader(void) +void CreateEReaderTask(void) { - struct Unk81D5014 *data; - u8 taskId = CreateTask(sub_81D5084, 0); - data = (struct Unk81D5014 *)gTasks[taskId].data; - data->unk8 = 0; - data->unk9 = 0; - data->unkA = 0; - data->unkB = 0; - data->unkC = 0; - data->unkD = 0; - data->unk0 = 0; - data->unk2 = 0; - data->unk4 = 0; - data->unk6 = 0; - data->unkE = 0; - data->unk10 = AllocZeroed(0x40); + struct EReaderTaskData *data; + u8 taskId = CreateTask(Task_EReader, 0); + data = (struct EReaderTaskData *)gTasks[taskId].data; + data->state = 0; + data->textState = 0; + data->unused4 = 0; + data->unused5 = 0; + data->unused6 = 0; + data->unused7 = 0; + data->timer = 0; + data->unused1 = 0; + data->unused2 = 0; + data->unused3 = 0; + data->status = 0; + data->unusedBuffer = AllocZeroed(0x40); } -static void sub_81D505C(u16 *arg0) +static void ResetTimer(u16 *timer) { - *arg0 = 0; + *timer = 0; } -static bool32 sub_81D5064(u16 *arg0, u16 arg1) +static bool32 UpdateTimer(u16 *timer, u16 time) { - if (++(*arg0) > arg1) + if (++(*timer) > time) { - *arg0 = 0; + // Timer has finished + *timer = 0; return TRUE; } - + return FALSE; } -static void sub_81D5084(u8 taskId) +// States for Task_EReader +enum { + ER_STATE_START, + ER_STATE_INIT_LINK, + ER_STATE_INIT_LINK_WAIT, + ER_STATE_INIT_LINK_CHECK, + ER_STATE_MSG_SELECT_CONNECT, + ER_STATE_MSG_SELECT_CONNECT_WAIT, + ER_STATE_TRY_LINK, + ER_STATE_INCORRECT_LINK, + ER_STATE_CONNECTING, + ER_STATE_TRANSFER, + ER_STATE_TRANSFER_END, + ER_STATE_TRANSFER_SUCCESS, + ER_STATE_LOAD_CARD_START, + ER_STATE_LOAD_CARD, + ER_STATE_WAIT_RECV_CARD, + ER_STATE_VALIDATE_CARD, + ER_STATE_WAIT_DISCONNECT, + ER_STATE_SAVE, + ER_STATE_SUCCESS_MSG, + ER_STATE_SUCCESS_END, + ER_STATE_LINK_ERROR, + ER_STATE_LINK_ERROR_TRY_AGAIN, + ER_STATE_SAVE_FAILED, + ER_STATE_CANCELED_CARD_READ, + ER_STATE_UNUSED_1, + ER_STATE_UNUSED_2, + ER_STATE_END, +}; + +static void Task_EReader(u8 taskId) { - struct Unk81D5014 *data = (struct Unk81D5014 *)gTasks[taskId].data; - switch (data->unk8) + struct EReaderTaskData *data = (struct EReaderTaskData *)gTasks[taskId].data; + switch (data->state) { - case 0: - if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_ReceiveMysteryGiftWithEReader)) - data->unk8 = 1; + case ER_STATE_START: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ReceiveMysteryGiftWithEReader)) + data->state = ER_STATE_INIT_LINK; break; - case 1: + case ER_STATE_INIT_LINK: OpenEReaderLink(); - sub_81D505C(&data->unk0); - data->unk8 = 2; + ResetTimer(&data->timer); + data->state = ER_STATE_INIT_LINK_WAIT; break; - case 2: - if (sub_81D5064(&data->unk0, 10)) - data->unk8 = 3; + case ER_STATE_INIT_LINK_WAIT: + if (UpdateTimer(&data->timer, 10)) + data->state = ER_STATE_INIT_LINK_CHECK; break; - case 3: - if (!sub_81D4EC0()) + case ER_STATE_INIT_LINK_CHECK: + if (!IsChildConnected()) { CloseLink(); - data->unk8 = 4; + data->state = ER_STATE_MSG_SELECT_CONNECT; } else { - data->unk8 = 13; + data->state = ER_STATE_LOAD_CARD; } break; - case 4: - if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_SelectConnectFromEReaderMenu)) + case ER_STATE_MSG_SELECT_CONNECT: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_SelectConnectFromEReaderMenu)) { AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA); - sub_81D505C(&data->unk0); - data->unk8 = 5; + ResetTimer(&data->timer); + data->state = ER_STATE_MSG_SELECT_CONNECT_WAIT; } break; - case 5: - if (sub_81D5064(&data->unk0, 90)) + case ER_STATE_MSG_SELECT_CONNECT_WAIT: + if (UpdateTimer(&data->timer, 90)) { OpenEReaderLink(); - data->unk8 = 6; + data->state = ER_STATE_TRY_LINK; } else if (JOY_NEW(B_BUTTON)) { - sub_81D505C(&data->unk0); + ResetTimer(&data->timer); PlaySE(SE_SELECT); - data->unk8 = 23; + data->state = ER_STATE_CANCELED_CARD_READ; } break; - case 6: + case ER_STATE_TRY_LINK: if (JOY_NEW(B_BUTTON)) { + // Canceled PlaySE(SE_SELECT); CloseLink(); - sub_81D505C(&data->unk0); - data->unk8 = 23; + ResetTimer(&data->timer); + data->state = ER_STATE_CANCELED_CARD_READ; } else if (GetLinkPlayerCount_2() > 1) { - sub_81D505C(&data->unk0); + ResetTimer(&data->timer); CloseLink(); - data->unk8 = 7; + data->state = ER_STATE_INCORRECT_LINK; } - else if (sub_81D4E60()) + else if (ValidateEReaderConnection()) { + // Successful connection PlaySE(SE_SELECT); CloseLink(); - sub_81D505C(&data->unk0); - data->unk8 = 8; + ResetTimer(&data->timer); + data->state = ER_STATE_CONNECTING; } - else if (sub_81D5064(&data->unk0, 10)) + else if (UpdateTimer(&data->timer, 10)) { + // Retry connection CloseLink(); OpenEReaderLink(); - sub_81D505C(&data->unk0); + ResetTimer(&data->timer); } break; - case 7: - if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_LinkIsIncorrect)) - data->unk8 = 4; + case ER_STATE_INCORRECT_LINK: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_LinkIsIncorrect)) + data->state = ER_STATE_MSG_SELECT_CONNECT; break; - case 8: + case ER_STATE_CONNECTING: AddTextPrinterToWindow1(gJPText_Connecting); - // XXX: This (u32*) cast is discarding the const qualifier from gUnknown_089A3470 - sub_81D4D50(&gUnknown_03006370, gMultiBootProgram_BerryGlitchFix_Start - gUnknown_089A3470, (u32*)gUnknown_089A3470); - data->unk8 = 9; + // XXX: This (u32 *) cast is discarding the const qualifier from gMultiBootProgram_EReader_Start + EReader_Load(&gEReaderData, gMultiBootProgram_EReader_End - gMultiBootProgram_EReader_Start, (u32 *)gMultiBootProgram_EReader_Start); + data->state = ER_STATE_TRANSFER; break; - case 9: - data->unkE = sub_81D4DE8(&gUnknown_03006370); - if (data->unkE) - data->unk8 = 10; + case ER_STATE_TRANSFER: + data->status = EReader_Transfer(&gEReaderData); + if (data->status != TRANSFER_ACTIVE) + data->state = ER_STATE_TRANSFER_END; break; - case 10: - sub_81D4DB8(&gUnknown_03006370); - if (data->unkE == 3) + case ER_STATE_TRANSFER_END: + EReader_Reset(&gEReaderData); + if (data->status == TRANSFER_TIMEOUT) { - data->unk8 = 20; + data->state = ER_STATE_LINK_ERROR; } - else if (data->unkE == 1) + else if (data->status == TRANSFER_SUCCESS) { - sub_81D505C(&data->unk0); + ResetTimer(&data->timer); AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment); - data->unk8 = 11; + data->state = ER_STATE_TRANSFER_SUCCESS; } - else + else // TRANSFER_CANCELED { - data->unk8 = 0; + data->state = ER_STATE_START; } break; - case 11: - if (sub_81D5064(&data->unk0, 840)) - data->unk8 = 12; + case ER_STATE_TRANSFER_SUCCESS: + if (UpdateTimer(&data->timer, 840)) + data->state = ER_STATE_LOAD_CARD_START; break; - case 12: + case ER_STATE_LOAD_CARD_START: OpenEReaderLink(); AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard); - data->unk8 = 13; + data->state = ER_STATE_LOAD_CARD; break; - case 13: - switch (sub_81D4EE4(&data->unk9, &data->unk0)) + case ER_STATE_LOAD_CARD: + switch (TryReceiveCard(&data->textState, &data->timer)) { - case 0: - break; - case 2: - AddTextPrinterToWindow1(gJPText_Connecting); - data->unk8 = 14; - break; - case 1: - PlaySE(SE_SELECT); - CloseLink(); - data->unk8 = 23; - break; - case 5: - CloseLink(); - data->unk8 = 21; - break; - case 3: - case 4: - CloseLink(); - data->unk8 = 20; - break; + case RECV_ACTIVE: + break; + case RECV_SUCCESS: + AddTextPrinterToWindow1(gJPText_Connecting); + data->state = ER_STATE_WAIT_RECV_CARD; + break; + case RECV_CANCELED: + PlaySE(SE_SELECT); + CloseLink(); + data->state = ER_STATE_CANCELED_CARD_READ; + break; + case RECV_TIMEOUT: + CloseLink(); + data->state = ER_STATE_LINK_ERROR_TRY_AGAIN; + break; + case RECV_ERROR: + case RECV_DISCONNECTED: + CloseLink(); + data->state = ER_STATE_LINK_ERROR; + break; } break; - case 14: + case ER_STATE_WAIT_RECV_CARD: if (HasLinkErrorOccurred()) { CloseLink(); - data->unk8 = 20; + data->state = ER_STATE_LINK_ERROR; } else if (GetBlockReceivedStatus()) { ResetBlockReceivedFlags(); - data->unk8 = 15; + data->state = ER_STATE_VALIDATE_CARD; } break; - case 15: - data->unkE = ValidateTrainerHillData((struct EReaderTrainerHillSet *)gDecompressionBuffer); - SetCloseLinkCallbackAndType(data->unkE); - data->unk8 = 16; + case ER_STATE_VALIDATE_CARD: + data->status = ValidateTrainerHillData((struct EReaderTrainerHillSet *)gDecompressionBuffer); + SetCloseLinkCallbackAndType(data->status); + data->state = ER_STATE_WAIT_DISCONNECT; break; - case 16: + case ER_STATE_WAIT_DISCONNECT: if (!gReceivedRemoteLinkPlayers) { - if (data->unkE == 1) - data->unk8 = 17; + if (data->status == TRUE) // Was data valid? + data->state = ER_STATE_SAVE; else - data->unk8 = 20; + data->state = ER_STATE_LINK_ERROR; } break; - case 17: + case ER_STATE_SAVE: if (TryWriteTrainerHill((struct EReaderTrainerHillSet *)&gDecompressionBuffer)) { AddTextPrinterToWindow1(gJPText_ConnectionComplete); - sub_81D505C(&data->unk0); - data->unk8 = 18; + ResetTimer(&data->timer); + data->state = ER_STATE_SUCCESS_MSG; } else { - data->unk8 = 22; + data->state = ER_STATE_SAVE_FAILED; } break; - case 18: - if (sub_81D5064(&data->unk0, 120)) + case ER_STATE_SUCCESS_MSG: + if (UpdateTimer(&data->timer, 120)) { AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToHoenn); PlayFanfare(MUS_OBTAIN_ITEM); - data->unk8 = 19; + data->state = ER_STATE_SUCCESS_END; } break; - case 19: + case ER_STATE_SUCCESS_END: if (IsFanfareTaskInactive() && (JOY_NEW(A_BUTTON | B_BUTTON))) - data->unk8 = 26; + data->state = ER_STATE_END; break; - case 23: - if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_CardReadingHasBeenHalted)) - data->unk8 = 26; + case ER_STATE_CANCELED_CARD_READ: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_CardReadingHasBeenHalted)) + data->state = ER_STATE_END; break; - case 20: - if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_ConnectionErrorCheckLink)) - data->unk8 = 0; + case ER_STATE_LINK_ERROR: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ConnectionErrorCheckLink)) + data->state = ER_STATE_START; break; - case 21: - if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_ConnectionErrorTryAgain)) - data->unk8 = 0; + case ER_STATE_LINK_ERROR_TRY_AGAIN: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ConnectionErrorTryAgain)) + data->state = ER_STATE_START; break; - case 22: - if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_WriteErrorUnableToSaveData)) - data->unk8 = 0; + case ER_STATE_SAVE_FAILED: + if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_WriteErrorUnableToSaveData)) + data->state = ER_STATE_START; break; - case 26: - Free(data->unk10); + case ER_STATE_END: + Free(data->unusedBuffer); DestroyTask(taskId); SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen); break; diff --git a/src/event_data.c b/src/event_data.c index 2bde09012d..22ebdb0d1d 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -30,7 +30,7 @@ EWRAM_DATA u16 gSpecialVar_Facing = 0; EWRAM_DATA u16 gSpecialVar_MonBoxId = 0; EWRAM_DATA u16 gSpecialVar_MonBoxPos = 0; EWRAM_DATA u16 gSpecialVar_Unused_0x8014 = 0; -EWRAM_DATA static u8 gSpecialFlags[SPECIAL_FLAGS_SIZE] = {0}; +EWRAM_DATA static u8 sSpecialFlags[SPECIAL_FLAGS_SIZE] = {0}; extern u16 *const gSpecialVars[]; @@ -38,7 +38,7 @@ void InitEventData(void) { memset(gSaveBlock1Ptr->flags, 0, sizeof(gSaveBlock1Ptr->flags)); memset(gSaveBlock1Ptr->vars, 0, sizeof(gSaveBlock1Ptr->vars)); - memset(gSpecialFlags, 0, sizeof(gSpecialFlags)); + memset(sSpecialFlags, 0, sizeof(sSpecialFlags)); } void ClearTempFieldEventData(void) @@ -114,36 +114,36 @@ bool32 IsMysteryGiftEnabled(void) return FlagGet(FLAG_SYS_MYSTERY_GIFT_ENABLE); } -void ClearMysteryEventFlags(void) +void ClearMysteryGiftFlags(void) { - FlagClear(FLAG_MYSTERY_EVENT_DONE); - FlagClear(FLAG_MYSTERY_EVENT_1); - FlagClear(FLAG_MYSTERY_EVENT_2); - FlagClear(FLAG_MYSTERY_EVENT_3); - FlagClear(FLAG_MYSTERY_EVENT_4); - FlagClear(FLAG_MYSTERY_EVENT_5); - FlagClear(FLAG_MYSTERY_EVENT_6); - FlagClear(FLAG_MYSTERY_EVENT_7); - FlagClear(FLAG_MYSTERY_EVENT_8); - FlagClear(FLAG_MYSTERY_EVENT_9); - FlagClear(FLAG_MYSTERY_EVENT_10); - FlagClear(FLAG_MYSTERY_EVENT_11); - FlagClear(FLAG_MYSTERY_EVENT_12); - FlagClear(FLAG_MYSTERY_EVENT_13); - FlagClear(FLAG_MYSTERY_EVENT_14); - FlagClear(FLAG_MYSTERY_EVENT_15); + FlagClear(FLAG_MYSTERY_GIFT_DONE); + FlagClear(FLAG_MYSTERY_GIFT_1); + FlagClear(FLAG_MYSTERY_GIFT_2); + FlagClear(FLAG_MYSTERY_GIFT_3); + FlagClear(FLAG_MYSTERY_GIFT_4); + FlagClear(FLAG_MYSTERY_GIFT_5); + FlagClear(FLAG_MYSTERY_GIFT_6); + FlagClear(FLAG_MYSTERY_GIFT_7); + FlagClear(FLAG_MYSTERY_GIFT_8); + FlagClear(FLAG_MYSTERY_GIFT_9); + FlagClear(FLAG_MYSTERY_GIFT_10); + FlagClear(FLAG_MYSTERY_GIFT_11); + FlagClear(FLAG_MYSTERY_GIFT_12); + FlagClear(FLAG_MYSTERY_GIFT_13); + FlagClear(FLAG_MYSTERY_GIFT_14); + FlagClear(FLAG_MYSTERY_GIFT_15); } -void ClearMysteryEventVars(void) +void ClearMysteryGiftVars(void) { - VarSet(VAR_EVENT_PICHU_SLOT, 0); - VarSet(VAR_NEVER_READ_0x40DE, 0); - VarSet(VAR_NEVER_READ_0x40DF, 0); - VarSet(VAR_NEVER_READ_0x40E0, 0); - VarSet(VAR_NEVER_READ_0x40E1, 0); - VarSet(VAR_NEVER_READ_0x40E2, 0); - VarSet(VAR_NEVER_READ_0x40E3, 0); - VarSet(VAR_NEVER_READ_0x40E4, 0); + VarSet(VAR_GIFT_PICHU_SLOT, 0); + VarSet(VAR_GIFT_UNUSED_1, 0); + VarSet(VAR_GIFT_UNUSED_2, 0); + VarSet(VAR_GIFT_UNUSED_3, 0); + VarSet(VAR_GIFT_UNUSED_4, 0); + VarSet(VAR_GIFT_UNUSED_5, 0); + VarSet(VAR_GIFT_UNUSED_6, 0); + VarSet(VAR_GIFT_UNUSED_7, 0); } void DisableResetRTC(void) @@ -205,7 +205,7 @@ u8 *GetFlagPointer(u16 id) else if (id < SPECIAL_FLAGS_START) return &gSaveBlock1Ptr->flags[id / 8]; else - return &gSpecialFlags[(id - SPECIAL_FLAGS_START) / 8]; + return &sSpecialFlags[(id - SPECIAL_FLAGS_START) / 8]; } u8 FlagSet(u16 id) diff --git a/src/event_object_lock.c b/src/event_object_lock.c index 179c728137..29575111fb 100644 --- a/src/event_object_lock.c +++ b/src/event_object_lock.c @@ -34,7 +34,7 @@ bool8 IsFreezePlayerFinished(void) } else { - sub_808BCF4(); + StopPlayerAvatar(); return TRUE; } } @@ -77,7 +77,7 @@ bool8 IsFreezeSelectedObjectAndPlayerFinished(void) } else { - sub_808BCF4(); + StopPlayerAvatar(); return TRUE; } } @@ -198,7 +198,7 @@ bool8 IsFreezeObjectAndPlayerFinished(void) } else { - sub_808BCF4(); + StopPlayerAvatar(); return TRUE; } } diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 36f7f0a3ef..87249af010 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -32,12 +32,25 @@ // this file was known as evobjmv.c in Game Freak's original source +enum { + MOVE_SPEED_NORMAL, // walking + MOVE_SPEED_FAST_1, // running / surfing / sliding (ice tile) + MOVE_SPEED_FAST_2, // water current / acro bike + MOVE_SPEED_FASTER, // mach bike's max speed + MOVE_SPEED_FASTEST, +}; + +enum { + JUMP_DISTANCE_IN_PLACE, + JUMP_DISTANCE_NORMAL, + JUMP_DISTANCE_FAR, +}; + // Sprite data used throughout #define sObjEventId data[0] #define sTypeFuncId data[1] // Index into corresponding gMovementTypeFuncs_* table #define sActionFuncId data[2] // Index into corresponding gMovementActionFuncs_* table #define sDirection data[3] -#define sSpeed data[4] #define movement_type_def(setup, table) \ @@ -71,7 +84,7 @@ static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *, struct Sp static void SetMovementDelay(struct Sprite *, s16); static bool8 WaitForMovementDelay(struct Sprite *); static u8 GetCollisionInDirection(struct ObjectEvent *, u8); -static u32 state_to_direction(u8, u32, u32); +static u32 GetCopyDirection(u8, u32, u32); static void TryEnableObjectEventAnim(struct ObjectEvent *, struct Sprite *); static void ObjectEventExecHeldMovementAction(struct ObjectEvent *, struct Sprite *); static void UpdateObjectEventSpriteAnimPause(struct ObjectEvent *, struct Sprite *); @@ -80,33 +93,33 @@ static bool8 IsMetatileDirectionallyImpassable(struct ObjectEvent *, s16, s16, u static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *, s16, s16); static void UpdateObjectEventOffscreen(struct ObjectEvent *, struct Sprite *); static void UpdateObjectEventSpriteVisibility(struct ObjectEvent *, struct Sprite *); -static void ObjectEventUpdateMetatileBehaviors(struct ObjectEvent*); -static void GetGroundEffectFlags_Reflection(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_TallGrassOnSpawn(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_LongGrassOnSpawn(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_SandHeap(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_ShortGrass(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_HotSprings(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_TallGrassOnBeginStep(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_LongGrassOnBeginStep(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_Tracks(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_Puddle(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_Ripple(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_Seaweed(struct ObjectEvent*, u32*); -static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent*, u32*); -static u8 ObjectEventGetNearbyReflectionType(struct ObjectEvent*); +static void ObjectEventUpdateMetatileBehaviors(struct ObjectEvent *); +static void GetGroundEffectFlags_Reflection(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_TallGrassOnSpawn(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_LongGrassOnSpawn(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_SandHeap(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_ShortGrass(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_HotSprings(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_TallGrassOnBeginStep(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_LongGrassOnBeginStep(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_Tracks(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_Puddle(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_Ripple(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_Seaweed(struct ObjectEvent *, u32 *); +static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent *, u32 *); +static u8 ObjectEventGetNearbyReflectionType(struct ObjectEvent *); static u8 GetReflectionTypeByMetatileBehavior(u32); -static void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z); -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_BikeTireTracks(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*); -static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*); -static void UpdateObjectEventSpritePosition(struct Sprite*); +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_BikeTireTracks(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 *); +static void DoGroundEffects_OnFinishStep(struct ObjectEvent *, struct Sprite *); +static void VirtualObject_UpdateAnim(struct Sprite *); static void ApplyLevitateMovement(u8); static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *); static bool8 MovementType_Buried_Callback(struct ObjectEvent *, struct Sprite *); @@ -118,7 +131,7 @@ static void SetObjectEventDynamicGraphicsId(struct ObjectEvent *); static void RemoveObjectEventInternal(struct ObjectEvent *); static u16 GetObjectEventFlagIdByObjectEventId(u8); static void UpdateObjectEventVisibility(struct ObjectEvent *, struct Sprite *); -static void MakeObjectTemplateFromObjectEventTemplate(struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); +static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); static void GetObjectEventMovingCameraOffset(s16 *, s16 *); static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); static void LoadObjectEventPalette(u16); @@ -129,27 +142,29 @@ static void ResetObjectEventFldEffData(struct ObjectEvent *); static u8 LoadSpritePaletteIfTagExists(const struct SpritePalette *); static u8 FindObjectEventPaletteIndexByTag(u16); static void _PatchObjectPalette(u16, u8); -static bool8 ObjectEventDoesZCoordMatch(struct ObjectEvent *, u8); +static bool8 ObjectEventDoesElevationMatch(struct ObjectEvent *, u8); static void SpriteCB_CameraObject(struct Sprite *); static void CameraObject_0(struct Sprite *); static void CameraObject_1(struct Sprite *); static void CameraObject_2(struct Sprite *); -static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, struct ObjectEventTemplate *templates, u8 count); +static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, 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 *sprite); -static bool8 AnimateSpriteInFigure8(struct Sprite *sprite); -static void UpdateObjectEventSprite(struct Sprite *); +static void InitSpriteForFigure8Anim(struct Sprite *); +static bool8 AnimateSpriteInFigure8(struct Sprite *); +static void SpriteCB_VirtualObject(struct Sprite *); static void DoShadowFieldEffect(struct ObjectEvent *); static void SetJumpSpriteData(struct Sprite *, u8, u8, u8); -static void SetWalkSlowSpriteData(struct Sprite *sprite, u8 direction); -static bool8 UpdateWalkSlowAnim(struct Sprite *sprite); -static u8 DoJumpSpriteMovement(struct Sprite *sprite); -static u8 DoJumpSpecialSpriteMovement(struct Sprite *sprite); +static void SetWalkSlowSpriteData(struct Sprite *, u8); +static bool8 UpdateWalkSlowAnim(struct Sprite *); +static u8 DoJumpSpriteMovement(struct Sprite *); +static u8 DoJumpSpecialSpriteMovement(struct Sprite *); static void CreateLevitateMovementTask(struct ObjectEvent *); static void DestroyLevitateMovementTask(u8); -static bool8 NpcTakeStep(struct Sprite *sprite); +static bool8 NpcTakeStep(struct Sprite *); +static bool8 IsElevationMismatchAt(u8, s16, s16); +static bool8 AreElevationsCompatible(u8, u8); static const struct SpriteFrameImage sPicTable_PechaBerryTree[]; @@ -157,7 +172,7 @@ const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, static const struct SpriteTemplate sCameraSpriteTemplate = { .tileTag = 0, - .paletteTag = 0xFFFF, + .paletteTag = TAG_NONE, .oam = &gDummyOamData, .anims = gDummySpriteAnimTable, .images = NULL, @@ -259,88 +274,48 @@ static void (*const sMovementTypeCallbacks[])(struct Sprite *) = [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = MovementType_WalkSlowlyInPlace, }; -const u8 gRangedMovementTypes[] = { - [MOVEMENT_TYPE_NONE] = 0, - [MOVEMENT_TYPE_LOOK_AROUND] = 0, - [MOVEMENT_TYPE_WANDER_AROUND] = 1, - [MOVEMENT_TYPE_WANDER_UP_AND_DOWN] = 1, - [MOVEMENT_TYPE_WANDER_DOWN_AND_UP] = 1, - [MOVEMENT_TYPE_WANDER_LEFT_AND_RIGHT] = 1, - [MOVEMENT_TYPE_WANDER_RIGHT_AND_LEFT] = 1, - [MOVEMENT_TYPE_FACE_UP] = 0, - [MOVEMENT_TYPE_FACE_DOWN] = 0, - [MOVEMENT_TYPE_FACE_LEFT] = 0, - [MOVEMENT_TYPE_FACE_RIGHT] = 0, - [MOVEMENT_TYPE_PLAYER] = 0, - [MOVEMENT_TYPE_BERRY_TREE_GROWTH] = 0, - [MOVEMENT_TYPE_FACE_DOWN_AND_UP] = 0, - [MOVEMENT_TYPE_FACE_LEFT_AND_RIGHT] = 0, - [MOVEMENT_TYPE_FACE_UP_AND_LEFT] = 0, - [MOVEMENT_TYPE_FACE_UP_AND_RIGHT] = 0, - [MOVEMENT_TYPE_FACE_DOWN_AND_LEFT] = 0, - [MOVEMENT_TYPE_FACE_DOWN_AND_RIGHT] = 0, - [MOVEMENT_TYPE_FACE_DOWN_UP_AND_LEFT] = 0, - [MOVEMENT_TYPE_FACE_DOWN_UP_AND_RIGHT] = 0, - [MOVEMENT_TYPE_FACE_UP_LEFT_AND_RIGHT] = 0, - [MOVEMENT_TYPE_FACE_DOWN_LEFT_AND_RIGHT] = 0, - [MOVEMENT_TYPE_ROTATE_COUNTERCLOCKWISE] = 0, - [MOVEMENT_TYPE_ROTATE_CLOCKWISE] = 0, - [MOVEMENT_TYPE_WALK_UP_AND_DOWN] = 1, - [MOVEMENT_TYPE_WALK_DOWN_AND_UP] = 1, - [MOVEMENT_TYPE_WALK_LEFT_AND_RIGHT] = 1, - [MOVEMENT_TYPE_WALK_RIGHT_AND_LEFT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_UP_RIGHT_LEFT_DOWN] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_LEFT_DOWN_UP] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_UP_RIGHT_LEFT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_DOWN_UP_RIGHT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_UP_LEFT_RIGHT_DOWN] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_RIGHT_DOWN_UP] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_UP_LEFT_RIGHT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_DOWN_UP_LEFT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_UP_DOWN_RIGHT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_UP_DOWN_RIGHT_LEFT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_LEFT_UP_DOWN] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_RIGHT_LEFT_UP] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_UP_DOWN_LEFT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_UP_DOWN_LEFT_RIGHT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_RIGHT_UP_DOWN] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_LEFT_RIGHT_UP] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_UP_LEFT_DOWN_RIGHT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_RIGHT_UP_LEFT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_DOWN_RIGHT_UP] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_UP_LEFT_DOWN] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_UP_RIGHT_DOWN_LEFT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_LEFT_UP_RIGHT] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_UP_RIGHT_DOWN] = 1, - [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_DOWN_LEFT_UP] = 1, - [MOVEMENT_TYPE_COPY_PLAYER] = 1, - [MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE] = 1, - [MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE] = 1, - [MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE] = 1, - [MOVEMENT_TYPE_TREE_DISGUISE] = 0, - [MOVEMENT_TYPE_MOUNTAIN_DISGUISE] = 0, - [MOVEMENT_TYPE_COPY_PLAYER_IN_GRASS] = 1, - [MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS] = 1, - [MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS] = 1, - [MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS] = 1, - [MOVEMENT_TYPE_BURIED] = 0, - [MOVEMENT_TYPE_WALK_IN_PLACE_DOWN] = 0, - [MOVEMENT_TYPE_WALK_IN_PLACE_UP] = 0, - [MOVEMENT_TYPE_WALK_IN_PLACE_LEFT] = 0, - [MOVEMENT_TYPE_WALK_IN_PLACE_RIGHT] = 0, - [MOVEMENT_TYPE_JOG_IN_PLACE_DOWN] = 0, - [MOVEMENT_TYPE_JOG_IN_PLACE_UP] = 0, - [MOVEMENT_TYPE_JOG_IN_PLACE_LEFT] = 0, - [MOVEMENT_TYPE_JOG_IN_PLACE_RIGHT] = 0, - [MOVEMENT_TYPE_RUN_IN_PLACE_DOWN] = 0, - [MOVEMENT_TYPE_RUN_IN_PLACE_UP] = 0, - [MOVEMENT_TYPE_RUN_IN_PLACE_LEFT] = 0, - [MOVEMENT_TYPE_RUN_IN_PLACE_RIGHT] = 0, - [MOVEMENT_TYPE_INVISIBLE] = 0, - [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_DOWN] = 0, - [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP] = 0, - [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT] = 0, - [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = 0, +static const bool8 sMovementTypeHasRange[NUM_MOVEMENT_TYPES] = { + [MOVEMENT_TYPE_WANDER_AROUND] = TRUE, + [MOVEMENT_TYPE_WANDER_UP_AND_DOWN] = TRUE, + [MOVEMENT_TYPE_WANDER_DOWN_AND_UP] = TRUE, + [MOVEMENT_TYPE_WANDER_LEFT_AND_RIGHT] = TRUE, + [MOVEMENT_TYPE_WANDER_RIGHT_AND_LEFT] = TRUE, + [MOVEMENT_TYPE_WALK_UP_AND_DOWN] = TRUE, + [MOVEMENT_TYPE_WALK_DOWN_AND_UP] = TRUE, + [MOVEMENT_TYPE_WALK_LEFT_AND_RIGHT] = TRUE, + [MOVEMENT_TYPE_WALK_RIGHT_AND_LEFT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_UP_RIGHT_LEFT_DOWN] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_LEFT_DOWN_UP] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_UP_RIGHT_LEFT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_DOWN_UP_RIGHT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_UP_LEFT_RIGHT_DOWN] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_RIGHT_DOWN_UP] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_UP_LEFT_RIGHT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_DOWN_UP_LEFT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_UP_DOWN_RIGHT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_UP_DOWN_RIGHT_LEFT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_LEFT_UP_DOWN] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_RIGHT_LEFT_UP] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_UP_DOWN_LEFT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_UP_DOWN_LEFT_RIGHT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_RIGHT_UP_DOWN] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_LEFT_RIGHT_UP] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_UP_LEFT_DOWN_RIGHT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_RIGHT_UP_LEFT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_DOWN_RIGHT_UP] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_UP_LEFT_DOWN] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_UP_RIGHT_DOWN_LEFT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_LEFT_UP_RIGHT] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_UP_RIGHT_DOWN] = TRUE, + [MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_DOWN_LEFT_UP] = TRUE, + [MOVEMENT_TYPE_COPY_PLAYER] = TRUE, + [MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE] = TRUE, + [MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE] = TRUE, + [MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE] = TRUE, + [MOVEMENT_TYPE_COPY_PLAYER_IN_GRASS] = TRUE, + [MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS] = TRUE, + [MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS] = TRUE, + [MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS] = TRUE, }; const u8 gInitialMovementTypeFacingDirections[] = { @@ -509,7 +484,7 @@ 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}, - {NULL, 0x0000}, + {}, }; static const u16 sReflectionPaletteTags_Brendan[] = { @@ -703,169 +678,169 @@ static const s16 sMovementDelaysShort[] = {32, 48, 64, 80}; #include "data/object_events/movement_type_func_tables.h" static const u8 sFaceDirectionAnimNums[] = { - [DIR_NONE] = 0, - [DIR_SOUTH] = 0, - [DIR_NORTH] = 1, - [DIR_WEST] = 2, - [DIR_EAST] = 3, - [DIR_SOUTHWEST] = 0, - [DIR_SOUTHEAST] = 0, - [DIR_NORTHWEST] = 1, - [DIR_NORTHEAST] = 1, + [DIR_NONE] = ANIM_STD_FACE_SOUTH, + [DIR_SOUTH] = ANIM_STD_FACE_SOUTH, + [DIR_NORTH] = ANIM_STD_FACE_NORTH, + [DIR_WEST] = ANIM_STD_FACE_WEST, + [DIR_EAST] = ANIM_STD_FACE_EAST, + [DIR_SOUTHWEST] = ANIM_STD_FACE_SOUTH, + [DIR_SOUTHEAST] = ANIM_STD_FACE_SOUTH, + [DIR_NORTHWEST] = ANIM_STD_FACE_NORTH, + [DIR_NORTHEAST] = ANIM_STD_FACE_NORTH, }; static const u8 sMoveDirectionAnimNums[] = { - [DIR_NONE] = 4, - [DIR_SOUTH] = 4, - [DIR_NORTH] = 5, - [DIR_WEST] = 6, - [DIR_EAST] = 7, - [DIR_SOUTHWEST] = 4, - [DIR_SOUTHEAST] = 4, - [DIR_NORTHWEST] = 5, - [DIR_NORTHEAST] = 5, + [DIR_NONE] = ANIM_STD_GO_SOUTH, + [DIR_SOUTH] = ANIM_STD_GO_SOUTH, + [DIR_NORTH] = ANIM_STD_GO_NORTH, + [DIR_WEST] = ANIM_STD_GO_WEST, + [DIR_EAST] = ANIM_STD_GO_EAST, + [DIR_SOUTHWEST] = ANIM_STD_GO_SOUTH, + [DIR_SOUTHEAST] = ANIM_STD_GO_SOUTH, + [DIR_NORTHWEST] = ANIM_STD_GO_NORTH, + [DIR_NORTHEAST] = ANIM_STD_GO_NORTH, }; static const u8 sMoveDirectionFastAnimNums[] = { - [DIR_NONE] = 8, - [DIR_SOUTH] = 8, - [DIR_NORTH] = 9, - [DIR_WEST] = 10, - [DIR_EAST] = 11, - [DIR_SOUTHWEST] = 8, - [DIR_SOUTHEAST] = 8, - [DIR_NORTHWEST] = 9, - [DIR_NORTHEAST] = 9, + [DIR_NONE] = ANIM_STD_GO_FAST_SOUTH, + [DIR_SOUTH] = ANIM_STD_GO_FAST_SOUTH, + [DIR_NORTH] = ANIM_STD_GO_FAST_NORTH, + [DIR_WEST] = ANIM_STD_GO_FAST_WEST, + [DIR_EAST] = ANIM_STD_GO_FAST_EAST, + [DIR_SOUTHWEST] = ANIM_STD_GO_FAST_SOUTH, + [DIR_SOUTHEAST] = ANIM_STD_GO_FAST_SOUTH, + [DIR_NORTHWEST] = ANIM_STD_GO_FAST_NORTH, + [DIR_NORTHEAST] = ANIM_STD_GO_FAST_NORTH, }; static const u8 sMoveDirectionFasterAnimNums[] = { - [DIR_NONE] = 12, - [DIR_SOUTH] = 12, - [DIR_NORTH] = 13, - [DIR_WEST] = 14, - [DIR_EAST] = 15, - [DIR_SOUTHWEST] = 12, - [DIR_SOUTHEAST] = 12, - [DIR_NORTHWEST] = 13, - [DIR_NORTHEAST] = 13, + [DIR_NONE] = ANIM_STD_GO_FASTER_SOUTH, + [DIR_SOUTH] = ANIM_STD_GO_FASTER_SOUTH, + [DIR_NORTH] = ANIM_STD_GO_FASTER_NORTH, + [DIR_WEST] = ANIM_STD_GO_FASTER_WEST, + [DIR_EAST] = ANIM_STD_GO_FASTER_EAST, + [DIR_SOUTHWEST] = ANIM_STD_GO_FASTER_SOUTH, + [DIR_SOUTHEAST] = ANIM_STD_GO_FASTER_SOUTH, + [DIR_NORTHWEST] = ANIM_STD_GO_FASTER_NORTH, + [DIR_NORTHEAST] = ANIM_STD_GO_FASTER_NORTH, }; static const u8 sMoveDirectionFastestAnimNums[] = { - [DIR_NONE] = 16, - [DIR_SOUTH] = 16, - [DIR_NORTH] = 17, - [DIR_WEST] = 18, - [DIR_EAST] = 19, - [DIR_SOUTHWEST] = 16, - [DIR_SOUTHEAST] = 16, - [DIR_NORTHWEST] = 17, - [DIR_NORTHEAST] = 17, + [DIR_NONE] = ANIM_STD_GO_FASTEST_SOUTH, + [DIR_SOUTH] = ANIM_STD_GO_FASTEST_SOUTH, + [DIR_NORTH] = ANIM_STD_GO_FASTEST_NORTH, + [DIR_WEST] = ANIM_STD_GO_FASTEST_WEST, + [DIR_EAST] = ANIM_STD_GO_FASTEST_EAST, + [DIR_SOUTHWEST] = ANIM_STD_GO_FASTEST_SOUTH, + [DIR_SOUTHEAST] = ANIM_STD_GO_FASTEST_SOUTH, + [DIR_NORTHWEST] = ANIM_STD_GO_FASTEST_NORTH, + [DIR_NORTHEAST] = ANIM_STD_GO_FASTEST_NORTH, }; static const u8 sJumpSpecialDirectionAnimNums[] = { // used for jumping onto surf mon - [DIR_NONE] = 20, - [DIR_SOUTH] = 20, - [DIR_NORTH] = 21, - [DIR_WEST] = 22, - [DIR_EAST] = 23, - [DIR_SOUTHWEST] = 20, - [DIR_SOUTHEAST] = 20, - [DIR_NORTHWEST] = 21, - [DIR_NORTHEAST] = 21, + [DIR_NONE] = ANIM_GET_ON_OFF_POKEMON_SOUTH, + [DIR_SOUTH] = ANIM_GET_ON_OFF_POKEMON_SOUTH, + [DIR_NORTH] = ANIM_GET_ON_OFF_POKEMON_NORTH, + [DIR_WEST] = ANIM_GET_ON_OFF_POKEMON_WEST, + [DIR_EAST] = ANIM_GET_ON_OFF_POKEMON_EAST, + [DIR_SOUTHWEST] = ANIM_GET_ON_OFF_POKEMON_SOUTH, + [DIR_SOUTHEAST] = ANIM_GET_ON_OFF_POKEMON_SOUTH, + [DIR_NORTHWEST] = ANIM_GET_ON_OFF_POKEMON_NORTH, + [DIR_NORTHEAST] = ANIM_GET_ON_OFF_POKEMON_NORTH, }; static const u8 sAcroWheelieDirectionAnimNums[] = { - [DIR_NONE] = 20, - [DIR_SOUTH] = 20, - [DIR_NORTH] = 21, - [DIR_WEST] = 22, - [DIR_EAST] = 23, - [DIR_SOUTHWEST] = 20, - [DIR_SOUTHEAST] = 20, - [DIR_NORTHWEST] = 21, - [DIR_NORTHEAST] = 21, + [DIR_NONE] = ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH, + [DIR_SOUTH] = ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH, + [DIR_NORTH] = ANIM_BUNNY_HOP_BACK_WHEEL_NORTH, + [DIR_WEST] = ANIM_BUNNY_HOP_BACK_WHEEL_WEST, + [DIR_EAST] = ANIM_BUNNY_HOP_BACK_WHEEL_EAST, + [DIR_SOUTHWEST] = ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH, + [DIR_SOUTHEAST] = ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH, + [DIR_NORTHWEST] = ANIM_BUNNY_HOP_BACK_WHEEL_NORTH, + [DIR_NORTHEAST] = ANIM_BUNNY_HOP_BACK_WHEEL_NORTH, }; static const u8 sAcroUnusedDirectionAnimNums[] = { - [DIR_NONE] = 24, - [DIR_SOUTH] = 24, - [DIR_NORTH] = 25, - [DIR_WEST] = 26, - [DIR_EAST] = 27, - [DIR_SOUTHWEST] = 24, - [DIR_SOUTHEAST] = 24, - [DIR_NORTHWEST] = 25, - [DIR_NORTHEAST] = 25, + [DIR_NONE] = ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH, + [DIR_SOUTH] = ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH, + [DIR_NORTH] = ANIM_BUNNY_HOP_FRONT_WHEEL_NORTH, + [DIR_WEST] = ANIM_BUNNY_HOP_FRONT_WHEEL_WEST, + [DIR_EAST] = ANIM_BUNNY_HOP_FRONT_WHEEL_EAST, + [DIR_SOUTHWEST] = ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH, + [DIR_SOUTHEAST] = ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH, + [DIR_NORTHWEST] = ANIM_BUNNY_HOP_FRONT_WHEEL_NORTH, + [DIR_NORTHEAST] = ANIM_BUNNY_HOP_FRONT_WHEEL_NORTH, }; static const u8 sAcroEndWheelieDirectionAnimNums[] = { - [DIR_NONE] = 28, - [DIR_SOUTH] = 28, - [DIR_NORTH] = 29, - [DIR_WEST] = 30, - [DIR_EAST] = 31, - [DIR_SOUTHWEST] = 28, - [DIR_SOUTHEAST] = 28, - [DIR_NORTHWEST] = 29, - [DIR_NORTHEAST] = 29, + [DIR_NONE] = ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH, + [DIR_SOUTH] = ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH, + [DIR_NORTH] = ANIM_STANDING_WHEELIE_BACK_WHEEL_NORTH, + [DIR_WEST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_WEST, + [DIR_EAST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_EAST, + [DIR_SOUTHWEST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH, + [DIR_SOUTHEAST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH, + [DIR_NORTHWEST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_NORTH, + [DIR_NORTHEAST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_NORTH, }; static const u8 sAcroUnusedActionDirectionAnimNums[] = { - [DIR_NONE] = 32, - [DIR_SOUTH] = 32, - [DIR_NORTH] = 33, - [DIR_WEST] = 34, - [DIR_EAST] = 35, - [DIR_SOUTHWEST] = 32, - [DIR_SOUTHEAST] = 32, - [DIR_NORTHWEST] = 33, - [DIR_NORTHEAST] = 33, + [DIR_NONE] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH, + [DIR_SOUTH] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH, + [DIR_NORTH] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_NORTH, + [DIR_WEST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_WEST, + [DIR_EAST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_EAST, + [DIR_SOUTHWEST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH, + [DIR_SOUTHEAST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH, + [DIR_NORTHWEST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_NORTH, + [DIR_NORTHEAST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_NORTH, }; static const u8 sAcroWheeliePedalDirectionAnimNums[] = { - [DIR_NONE] = 36, - [DIR_SOUTH] = 36, - [DIR_NORTH] = 37, - [DIR_WEST] = 38, - [DIR_EAST] = 39, - [DIR_SOUTHWEST] = 36, - [DIR_SOUTHEAST] = 36, - [DIR_NORTHWEST] = 37, - [DIR_NORTHEAST] = 37, + [DIR_NONE] = ANIM_MOVING_WHEELIE_SOUTH, + [DIR_SOUTH] = ANIM_MOVING_WHEELIE_SOUTH, + [DIR_NORTH] = ANIM_MOVING_WHEELIE_NORTH, + [DIR_WEST] = ANIM_MOVING_WHEELIE_WEST, + [DIR_EAST] = ANIM_MOVING_WHEELIE_EAST, + [DIR_SOUTHWEST] = ANIM_MOVING_WHEELIE_SOUTH, + [DIR_SOUTHEAST] = ANIM_MOVING_WHEELIE_SOUTH, + [DIR_NORTHWEST] = ANIM_MOVING_WHEELIE_NORTH, + [DIR_NORTHEAST] = ANIM_MOVING_WHEELIE_NORTH, }; static const u8 sFishingDirectionAnimNums[] = { - [DIR_NONE] = 0, - [DIR_SOUTH] = 0, - [DIR_NORTH] = 1, - [DIR_WEST] = 2, - [DIR_EAST] = 3, - [DIR_SOUTHWEST] = 0, - [DIR_SOUTHEAST] = 0, - [DIR_NORTHWEST] = 1, - [DIR_NORTHEAST] = 1, + [DIR_NONE] = ANIM_TAKE_OUT_ROD_SOUTH, + [DIR_SOUTH] = ANIM_TAKE_OUT_ROD_SOUTH, + [DIR_NORTH] = ANIM_TAKE_OUT_ROD_NORTH, + [DIR_WEST] = ANIM_TAKE_OUT_ROD_WEST, + [DIR_EAST] = ANIM_TAKE_OUT_ROD_EAST, + [DIR_SOUTHWEST] = ANIM_TAKE_OUT_ROD_SOUTH, + [DIR_SOUTHEAST] = ANIM_TAKE_OUT_ROD_SOUTH, + [DIR_NORTHWEST] = ANIM_TAKE_OUT_ROD_NORTH, + [DIR_NORTHEAST] = ANIM_TAKE_OUT_ROD_NORTH, }; static const u8 sFishingNoCatchDirectionAnimNums[] = { - [DIR_NONE] = 4, - [DIR_SOUTH] = 4, - [DIR_NORTH] = 5, - [DIR_WEST] = 6, - [DIR_EAST] = 7, - [DIR_SOUTHWEST] = 4, - [DIR_SOUTHEAST] = 4, - [DIR_NORTHWEST] = 5, - [DIR_NORTHEAST] = 5, + [DIR_NONE] = ANIM_PUT_AWAY_ROD_SOUTH, + [DIR_SOUTH] = ANIM_PUT_AWAY_ROD_SOUTH, + [DIR_NORTH] = ANIM_PUT_AWAY_ROD_NORTH, + [DIR_WEST] = ANIM_PUT_AWAY_ROD_WEST, + [DIR_EAST] = ANIM_PUT_AWAY_ROD_EAST, + [DIR_SOUTHWEST] = ANIM_PUT_AWAY_ROD_SOUTH, + [DIR_SOUTHEAST] = ANIM_PUT_AWAY_ROD_SOUTH, + [DIR_NORTHWEST] = ANIM_PUT_AWAY_ROD_NORTH, + [DIR_NORTHEAST] = ANIM_PUT_AWAY_ROD_NORTH, }; static const u8 sFishingBiteDirectionAnimNums[] = { - [DIR_NONE] = 8, - [DIR_SOUTH] = 8, - [DIR_NORTH] = 9, - [DIR_WEST] = 10, - [DIR_EAST] = 11, - [DIR_SOUTHWEST] = 8, - [DIR_SOUTHEAST] = 8, - [DIR_NORTHWEST] = 9, - [DIR_NORTHEAST] = 9, + [DIR_NONE] = ANIM_HOOKED_POKEMON_SOUTH, + [DIR_SOUTH] = ANIM_HOOKED_POKEMON_SOUTH, + [DIR_NORTH] = ANIM_HOOKED_POKEMON_NORTH, + [DIR_WEST] = ANIM_HOOKED_POKEMON_WEST, + [DIR_EAST] = ANIM_HOOKED_POKEMON_EAST, + [DIR_SOUTHWEST] = ANIM_HOOKED_POKEMON_SOUTH, + [DIR_SOUTHEAST] = ANIM_HOOKED_POKEMON_SOUTH, + [DIR_NORTHWEST] = ANIM_HOOKED_POKEMON_NORTH, + [DIR_NORTHEAST] = ANIM_HOOKED_POKEMON_NORTH, }; static const u8 sRunningDirectionAnimNums[] = { - [DIR_NONE] = 20, - [DIR_SOUTH] = 20, - [DIR_NORTH] = 21, - [DIR_WEST] = 22, - [DIR_EAST] = 23, - [DIR_SOUTHWEST] = 20, - [DIR_SOUTHEAST] = 20, - [DIR_NORTHWEST] = 21, - [DIR_NORTHEAST] = 21, + [DIR_NONE] = ANIM_RUN_SOUTH, + [DIR_SOUTH] = ANIM_RUN_SOUTH, + [DIR_NORTH] = ANIM_RUN_NORTH, + [DIR_WEST] = ANIM_RUN_WEST, + [DIR_EAST] = ANIM_RUN_EAST, + [DIR_SOUTHWEST] = ANIM_RUN_SOUTH, + [DIR_SOUTHEAST] = ANIM_RUN_SOUTH, + [DIR_NORTHWEST] = ANIM_RUN_NORTH, + [DIR_NORTHEAST] = ANIM_RUN_NORTH, }; const u8 gTrainerFacingDirectionMovementTypes[] = { @@ -941,12 +916,12 @@ const u8 gRideWaterCurrentMovementActions[] = { MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT, }; -const u8 gWalkFastestMovementActions[] = { - MOVEMENT_ACTION_WALK_FASTEST_DOWN, - MOVEMENT_ACTION_WALK_FASTEST_DOWN, - MOVEMENT_ACTION_WALK_FASTEST_UP, - MOVEMENT_ACTION_WALK_FASTEST_LEFT, - MOVEMENT_ACTION_WALK_FASTEST_RIGHT, +const u8 gWalkFasterMovementActions[] = { + MOVEMENT_ACTION_WALK_FASTER_DOWN, + MOVEMENT_ACTION_WALK_FASTER_DOWN, + MOVEMENT_ACTION_WALK_FASTER_UP, + MOVEMENT_ACTION_WALK_FASTER_LEFT, + MOVEMENT_ACTION_WALK_FASTER_RIGHT, }; const u8 gSlideMovementActions[] = { MOVEMENT_ACTION_SLIDE_DOWN, @@ -1018,12 +993,12 @@ const u8 gWalkInPlaceFastMovementActions[] = { MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT, MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT, }; -const u8 gWalkInPlaceFastestMovementActions[] = { - MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN, - MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN, - MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP, - MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT, - MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT, +const u8 gWalkInPlaceFasterMovementActions[] = { + MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_DOWN, + MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_DOWN, + MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_UP, + MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_LEFT, + MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_RIGHT, }; const u8 gAcroWheelieFaceDirectionMovementActions[] = { MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN, @@ -1107,31 +1082,75 @@ static const u8 sOppositeDirections[] = { DIR_SOUTHWEST, }; -const u8 gUnknown_0850DC2F[][4] = { - {2, 1, 4, 3}, - {1, 2, 3, 4}, - {3, 4, 2, 1}, - {4, 3, 1, 2} +// Takes the player's original and current facing direction to get the direction that should be considered to copy. +// Note that this means an NPC who copies the player's movement changes how they copy them based on how +// the player entered the area. For instance an NPC who does the same movements as the player when they +// entered the area facing South will do the opposite movements as the player if they enter facing North. +static const u8 sPlayerDirectionsForCopy[][4] = { + [DIR_SOUTH - 1] = { + [DIR_SOUTH - 1] = DIR_NORTH, + [DIR_NORTH - 1] = DIR_SOUTH, + [DIR_WEST - 1] = DIR_EAST, + [DIR_EAST - 1] = DIR_WEST + }, + [DIR_NORTH - 1] = { + [DIR_SOUTH - 1] = DIR_SOUTH, + [DIR_NORTH - 1] = DIR_NORTH, + [DIR_WEST - 1] = DIR_WEST, + [DIR_EAST - 1] = DIR_EAST + }, + [DIR_WEST - 1] = { + [DIR_SOUTH - 1] = DIR_WEST, + [DIR_NORTH - 1] = DIR_EAST, + [DIR_WEST - 1] = DIR_NORTH, + [DIR_EAST - 1] = DIR_SOUTH + }, + [DIR_EAST - 1] = { + [DIR_SOUTH - 1] = DIR_EAST, + [DIR_NORTH - 1] = DIR_WEST, + [DIR_WEST - 1] = DIR_SOUTH, + [DIR_EAST - 1] = DIR_NORTH + } }; -const u8 gUnknown_0850DC3F[][4] = { - {2, 1, 4, 3}, - {1, 2, 3, 4}, - {4, 3, 1, 2}, - {3, 4, 2, 1} +// Indexed first with the NPC's initial facing direction based on movement type, and secondly with the player direction to copy. +// Returns the direction the copy NPC should travel in. +static const u8 sPlayerDirectionToCopyDirection[][4] = { + [DIR_SOUTH - 1] = { // MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE(_IN_GRASS) + [DIR_SOUTH - 1] = DIR_NORTH, + [DIR_NORTH - 1] = DIR_SOUTH, + [DIR_WEST - 1] = DIR_EAST, + [DIR_EAST - 1] = DIR_WEST + }, + [DIR_NORTH - 1] = { // MOVEMENT_TYPE_COPY_PLAYER(_IN_GRASS) + [DIR_SOUTH - 1] = DIR_SOUTH, + [DIR_NORTH - 1] = DIR_NORTH, + [DIR_WEST - 1] = DIR_WEST, + [DIR_EAST - 1] = DIR_EAST + }, + [DIR_WEST - 1] = { // MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE(_IN_GRASS) + [DIR_SOUTH - 1] = DIR_EAST, + [DIR_NORTH - 1] = DIR_WEST, + [DIR_WEST - 1] = DIR_SOUTH, + [DIR_EAST - 1] = DIR_NORTH + }, + [DIR_EAST - 1] = { // MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE(_IN_GRASS) + [DIR_SOUTH - 1] = DIR_WEST, + [DIR_NORTH - 1] = DIR_EAST, + [DIR_WEST - 1] = DIR_NORTH, + [DIR_EAST - 1] = DIR_SOUTH + } }; #include "data/object_events/movement_action_func_tables.h" -// Code - static void ClearObjectEvent(struct ObjectEvent *objectEvent) { *objectEvent = (struct ObjectEvent){}; - objectEvent->localId = 0xFF; - objectEvent->mapNum = 0xFF; - objectEvent->mapGroup = 0xFF; - objectEvent->movementActionId = 0xFF; + objectEvent->localId = OBJ_EVENT_ID_PLAYER; + objectEvent->mapNum = MAP_NUM(UNDEFINED); + objectEvent->mapGroup = MAP_GROUP(UNDEFINED); + objectEvent->movementActionId = MOVEMENT_ACTION_NONE; } static void ClearAllObjectEvents(void) @@ -1180,9 +1199,8 @@ u8 GetFirstInactiveObjectEventId(void) u8 GetObjectEventIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId) { if (localId < OBJ_EVENT_ID_PLAYER) - { return GetObjectEventIdByLocalIdAndMapInternal(localId, mapNum, mapGroupId); - } + return GetObjectEventIdByLocalId(localId); } @@ -1242,8 +1260,8 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, return OBJECT_EVENTS_COUNT; objectEvent = &gObjectEvents[objectEventId]; ClearObjectEvent(objectEvent); - x = template->x + 7; - y = template->y + 7; + x = template->x + MAP_OFFSET; + y = template->y + MAP_OFFSET; objectEvent->active = TRUE; objectEvent->triggerGroundEffectsOnMove = TRUE; objectEvent->graphicsId = template->graphicsId; @@ -1267,16 +1285,12 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType]; SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection); SetObjectEventDynamicGraphicsId(objectEvent); - if (gRangedMovementTypes[objectEvent->movementType]) + if (sMovementTypeHasRange[objectEvent->movementType]) { if (objectEvent->rangeX == 0) - { objectEvent->rangeX++; - } if (objectEvent->rangeY == 0) - { objectEvent->rangeY++; - } } return objectEventId; } @@ -1290,24 +1304,17 @@ u8 Unref_TryInitLocalObjectEvent(u8 localId) if (gMapHeader.events != NULL) { if (InBattlePyramid()) - { objectEventCount = GetNumBattlePyramidObjectEvents(); - } else if (InTrainerHill()) - { objectEventCount = 2; - } else - { objectEventCount = gMapHeader.events->objectEventCount; - } + for (i = 0; i < objectEventCount; i++) { template = &gSaveBlock1Ptr->objectEventTemplates[i]; if (template->localId == localId && !FlagGet(template->flagId)) - { return InitObjectEventStateFromTemplate(template, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); - } } } return OBJECT_EVENTS_COUNT; @@ -1406,7 +1413,7 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl if (objectEvent->movementType == MOVEMENT_TYPE_INVISIBLE) objectEvent->invisible = TRUE; - *(u16 *)&spriteTemplate->paletteTag = 0xFFFF; + *(u16 *)&spriteTemplate->paletteTag = TAG_NONE; spriteId = CreateSprite(spriteTemplate, 0, 0, 0); if (spriteId == MAX_SPRITES) { @@ -1428,7 +1435,7 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl if (!objectEvent->inanimate) StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objectEvent->facingDirection)); - SetObjectSubpriorityByZCoord(objectEvent->previousElevation, sprite, 1); + SetObjectSubpriorityByElevation(objectEvent->previousElevation, sprite, 1); UpdateObjectEventVisibility(objectEvent, sprite); return objectEventId; } @@ -1442,7 +1449,7 @@ static u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTem const struct SubspriteTable *subspriteTables = NULL; graphicsInfo = GetObjectEventGraphicsInfo(objectEventTemplate->graphicsId); - MakeObjectTemplateFromObjectEventTemplate(objectEventTemplate, &spriteTemplate, &subspriteTables); + MakeSpriteTemplateFromObjectEventTemplate(objectEventTemplate, &spriteTemplate, &subspriteTables); spriteFrameImage.size = graphicsInfo->size; spriteTemplate.images = &spriteFrameImage; objectEventId = TrySetupObjectEventSprite(objectEventTemplate, &spriteTemplate, mapNum, mapGroup, cameraX, cameraY); @@ -1465,18 +1472,18 @@ 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 z) +u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation) { struct ObjectEventTemplate objectEventTemplate; - x -= 7; - y -= 7; + x -= MAP_OFFSET; + y -= MAP_OFFSET; objectEventTemplate.localId = localId; objectEventTemplate.graphicsId = graphicsId; objectEventTemplate.inConnection = 0; objectEventTemplate.x = x; objectEventTemplate.y = y; - objectEventTemplate.elevation = z; + objectEventTemplate.elevation = elevation; objectEventTemplate.movementType = movementBehavior; objectEventTemplate.movementRangeX = 0; objectEventTemplate.movementRangeY = 0; @@ -1498,7 +1505,7 @@ u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup) return TrySpawnObjectEventTemplate(objectEventTemplate, mapNum, mapGroup, cameraX, cameraY); } -static void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) +static void CopyObjectGraphicsInfoToSpriteTemplate(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) { const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); @@ -1512,17 +1519,18 @@ static void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void ( *subspriteTables = graphicsInfo->subspriteTables; } -static void MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex(u16 graphicsId, u16 callbackIndex, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) +static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphicsId, u16 movementType, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) { - MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, sMovementTypeCallbacks[callbackIndex], spriteTemplate, subspriteTables); + CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, sMovementTypeCallbacks[movementType], spriteTemplate, subspriteTables); } -static void MakeObjectTemplateFromObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) +static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) { - MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables); + CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables); } -u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) +// 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; @@ -1530,11 +1538,10 @@ u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x u8 spriteId; spriteTemplate = malloc(sizeof(struct SpriteTemplate)); - MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, callback, spriteTemplate, &subspriteTables); - if (spriteTemplate->paletteTag != 0xFFFF) - { + CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, callback, spriteTemplate, &subspriteTables); + if (spriteTemplate->paletteTag != TAG_NONE) LoadObjectEventPalette(spriteTemplate->paletteTag); - } + spriteId = CreateSprite(spriteTemplate, x, y, subpriority); free(spriteTemplate); @@ -1547,9 +1554,15 @@ u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x return spriteId; } -// Used to create sprite object events instead of a full object event -// Used when resources are limiting, e.g. for the audience in contests or group members in Union Room -u8 CreateObjectSprite(u8 graphicsId, u8 objectEventId, s16 x, s16 y, u8 z, u8 direction) +#define sVirtualObjId data[0] +#define sVirtualObjElev data[1] + +// "Virtual Objects" are a class of sprites used instead of a full object event. +// Used when more objects are needed than the object event limit (for Contest / Battle Dome audiences and group members in Union Room). +// 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 spriteId; struct Sprite *sprite; @@ -1558,10 +1571,10 @@ u8 CreateObjectSprite(u8 graphicsId, u8 objectEventId, s16 x, s16 y, u8 z, u8 di const struct ObjectEventGraphicsInfo *graphicsInfo; graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); - MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSprite, &spriteTemplate, &subspriteTables); - *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; - x += 7; - y += 7; + CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, SpriteCB_VirtualObject, &spriteTemplate, &subspriteTables); + *(u16 *)&spriteTemplate.paletteTag = TAG_NONE; + x += MAP_OFFSET; + y += MAP_OFFSET; SetSpritePosToOffsetMapCoords(&x, &y, 8, 16); spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0); if (spriteId != MAX_SPRITES) @@ -1572,27 +1585,23 @@ u8 CreateObjectSprite(u8 graphicsId, u8 objectEventId, s16 x, s16 y, u8 z, u8 di sprite->y += sprite->centerToCornerVecY; sprite->oam.paletteNum = graphicsInfo->paletteSlot; if (sprite->oam.paletteNum >= 16) - { sprite->oam.paletteNum -= 16; - } + sprite->coordOffsetEnabled = TRUE; - sprite->sObjEventId = objectEventId; - sprite->data[1] = z; + sprite->sVirtualObjId = virtualObjId; + sprite->sVirtualObjElev = elevation; if (graphicsInfo->paletteSlot == 10) - { LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); - } else if (graphicsInfo->paletteSlot >= 16) - { _PatchObjectPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot | 0xf0); - } + if (subspriteTables != NULL) { SetSubspriteTables(sprite, subspriteTables); sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; } - InitObjectPriorityByZCoord(sprite, z); - SetObjectSubpriorityByZCoord(z, sprite, 1); + InitObjectPriorityByElevation(sprite, elevation); + SetObjectSubpriorityByElevation(elevation, sprite, 1); StartSpriteAnim(sprite, GetFaceDirectionAnimNum(direction)); } return spriteId; @@ -1606,9 +1615,9 @@ void TrySpawnObjectEvents(s16 cameraX, s16 cameraY) if (gMapHeader.events != NULL) { s16 left = gSaveBlock1Ptr->pos.x - 2; - s16 right = gSaveBlock1Ptr->pos.x + 17; + s16 right = gSaveBlock1Ptr->pos.x + MAP_OFFSET_W + 2; s16 top = gSaveBlock1Ptr->pos.y; - s16 bottom = gSaveBlock1Ptr->pos.y + 16; + s16 bottom = gSaveBlock1Ptr->pos.y + MAP_OFFSET_H + 2; if (InBattlePyramid()) objectCount = GetNumBattlePyramidObjectEvents(); @@ -1620,8 +1629,8 @@ void TrySpawnObjectEvents(s16 cameraX, s16 cameraY) for (i = 0; i < objectCount; i++) { struct ObjectEventTemplate *template = &gSaveBlock1Ptr->objectEventTemplates[i]; - s16 npcX = template->x + 7; - s16 npcY = template->y + 7; + s16 npcX = template->x + MAP_OFFSET; + s16 npcY = template->y + MAP_OFFSET; if (top <= npcY && bottom >= npcY && left <= npcX && right >= npcX && !FlagGet(template->flagId)) @@ -1702,10 +1711,10 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) subspriteTables = NULL; graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); spriteFrameImage.size = graphicsInfo->size; - MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables); + CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables); spriteTemplate.images = &spriteFrameImage; - *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; + *(u16 *)&spriteTemplate.paletteTag = TAG_NONE; paletteSlot = graphicsInfo->paletteSlot; if (paletteSlot == 0) { @@ -1720,7 +1729,7 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) paletteSlot -= 16; _PatchObjectPalette(graphicsInfo->paletteTag, paletteSlot); } - *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; + *(u16 *)&spriteTemplate.paletteTag = TAG_NONE; i = CreateSprite(&spriteTemplate, 0, 0, 0); if (i != MAX_SPRITES) @@ -1748,7 +1757,7 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objectEvent->facingDirection)); ResetObjectEventFldEffData(objectEvent); - SetObjectSubpriorityByZCoord(objectEvent->previousElevation, sprite, 1); + SetObjectSubpriorityByElevation(objectEvent->previousElevation, sprite, 1); } } @@ -1770,7 +1779,7 @@ static void SetPlayerAvatarObjectEventIdAndObjectId(u8 objectEventId, u8 spriteI gPlayerAvatar.objectEventId = objectEventId; gPlayerAvatar.spriteId = spriteId; gPlayerAvatar.gender = GetPlayerAvatarGenderByGraphicsId(gObjectEvents[objectEventId].graphicsId); - SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, PLAYER_AVATAR_FLAG_5); + SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, PLAYER_AVATAR_FLAG_CONTROLLABLE); } void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) @@ -1809,9 +1818,7 @@ void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) sprite->x += 8; sprite->y += 16 + sprite->centerToCornerVecY; if (objectEvent->trackedByCamera) - { CameraObjectReset1(); - } } void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 graphicsId) @@ -1819,9 +1826,7 @@ void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 objectEventId; if (!TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId)) - { ObjectEventSetGraphicsId(&gObjectEvents[objectEventId], graphicsId); - } } void ObjectEventTurn(struct ObjectEvent *objectEvent, u8 direction) @@ -1839,9 +1844,7 @@ void ObjectEventTurnByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 direc u8 objectEventId; if (!TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId)) - { ObjectEventTurn(&gObjectEvents[objectEventId], direction); - } } void PlayerObjectTurn(struct PlayerAvatar *playerAvatar, u8 direction) @@ -1878,9 +1881,8 @@ const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId) u8 bard; if (graphicsId >= OBJ_EVENT_GFX_VARS) - { graphicsId = VarGetObjectEventGraphicsId(graphicsId - OBJ_EVENT_GFX_VARS); - } + if (graphicsId == OBJ_EVENT_GFX_BARD) { bard = GetCurrentMauvilleOldMan(); @@ -1888,19 +1890,15 @@ const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId) } if (graphicsId >= NUM_OBJ_EVENT_GFX) - { graphicsId = OBJ_EVENT_GFX_NINJA_BOY; - } - + return gObjectEventGraphicsInfoPointers[graphicsId]; } static void SetObjectEventDynamicGraphicsId(struct ObjectEvent *objectEvent) { if (objectEvent->graphicsId >= OBJ_EVENT_GFX_VARS) - { objectEvent->graphicsId = VarGetObjectEventGraphicsId(objectEvent->graphicsId - OBJ_EVENT_GFX_VARS); - } } void SetObjectInvisibility(u8 localId, u8 mapNum, u8 mapGroup, bool8 invisible) @@ -1908,16 +1906,14 @@ void SetObjectInvisibility(u8 localId, u8 mapNum, u8 mapGroup, bool8 invisible) u8 objectEventId; if (!TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId)) - { gObjectEvents[objectEventId].invisible = invisible; - } } void ObjectEventGetLocalIdAndMap(struct ObjectEvent *objectEvent, void *localId, void *mapNum, void *mapGroup) { - *(u8*)(localId) = objectEvent->localId; - *(u8*)(mapNum) = objectEvent->mapNum; - *(u8*)(mapGroup) = objectEvent->mapGroup; + *(u8 *)(localId) = objectEvent->localId; + *(u8 *)(mapNum) = objectEvent->mapNum; + *(u8 *)(mapGroup) = objectEvent->mapGroup; } void AllowObjectAtPosTriggerGroundEffects(s16 x, s16 y) @@ -1933,7 +1929,7 @@ void AllowObjectAtPosTriggerGroundEffects(s16 x, s16 y) } } -void SetObjectPriority(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority) +void SetObjectSubpriority(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority) { u8 objectEventId; struct ObjectEvent *objectEvent; @@ -1948,7 +1944,7 @@ void SetObjectPriority(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority) } } -void ResetObjectPriority(u8 localId, u8 mapNum, u8 mapGroup) +void ResetObjectSubpriority(u8 localId, u8 mapNum, u8 mapGroup) { u8 objectEventId; struct ObjectEvent *objectEvent; @@ -2029,9 +2025,7 @@ static u8 FindObjectEventPaletteIndexByTag(u16 tag) for (i = 0; sObjectEventSpritePalettes[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) { if (sObjectEventSpritePalettes[i].tag == tag) - { return i; - } } return 0xFF; } @@ -2120,8 +2114,8 @@ void TryMoveObjectEventToMapCoords(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s1 u8 objectEventId; if (!TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId)) { - x += 7; - y += 7; + x += MAP_OFFSET; + y += MAP_OFFSET; MoveObjectEventToMapCoords(&gObjectEvents[objectEventId], x, y); } } @@ -2156,7 +2150,7 @@ void UpdateObjectEventCoordsForCameraUpdate(void) } } -u8 GetObjectEventIdByXYZ(u16 x, u16 y, u8 z) +u8 GetObjectEventIdByPosition(u16 x, u16 y, u8 elevation) { u8 i; @@ -2164,21 +2158,20 @@ u8 GetObjectEventIdByXYZ(u16 x, u16 y, u8 z) { if (gObjectEvents[i].active) { - if (gObjectEvents[i].currentCoords.x == x && gObjectEvents[i].currentCoords.y == y && ObjectEventDoesZCoordMatch(&gObjectEvents[i], z)) - { + if (gObjectEvents[i].currentCoords.x == x + && gObjectEvents[i].currentCoords.y == y + && ObjectEventDoesElevationMatch(&gObjectEvents[i], elevation)) return i; - } } } return OBJECT_EVENTS_COUNT; } -static bool8 ObjectEventDoesZCoordMatch(struct ObjectEvent *objectEvent, u8 z) +static bool8 ObjectEventDoesElevationMatch(struct ObjectEvent *objectEvent, u8 elevation) { - if (objectEvent->currentElevation != 0 && z != 0 && objectEvent->currentElevation != z) - { + if (objectEvent->currentElevation != 0 && elevation != 0 && objectEvent->currentElevation != elevation) return FALSE; - } + return TRUE; } @@ -2280,9 +2273,8 @@ static u8 CameraObjectGetFollowedSpriteId(void) camera = FindCameraSprite(); if (camera == NULL) - { return MAX_SPRITES; - } + return camera->sLinkedSpriteId; } @@ -2290,13 +2282,9 @@ void CameraObjectReset2(void) { // UB: Possible null dereference #ifdef UBFIX - struct Sprite *camera; - - camera = FindCameraSprite(); - if (camera != NULL) - { + struct Sprite *camera = FindCameraSprite(); + if (camera) camera->sState = 2; - } #else FindCameraSprite()->sState = 2; #endif // UBFIX @@ -2382,9 +2370,8 @@ static u8 GetObjectTrainerTypeByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup u8 objectEventId; if (TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId)) - { return 0xFF; - } + return gObjectEvents[objectEventId].trainerType; } @@ -2400,9 +2387,8 @@ u8 GetObjectEventBerryTreeIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) u8 objectEventId; if (TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId)) - { return 0xFF; - } + return gObjectEvents[objectEventId].trainerRange_berryTreeId; } @@ -2438,9 +2424,7 @@ static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, for (i = 0; i < count; i++) { if (templates[i].localId == localId) - { return &templates[i]; - } } return NULL; } @@ -2449,16 +2433,14 @@ struct ObjectEventTemplate *GetBaseTemplateForObjectEvent(const struct ObjectEve { int i; - if (objectEvent->mapNum != gSaveBlock1Ptr->location.mapNum || objectEvent->mapGroup != gSaveBlock1Ptr->location.mapGroup) - { + if (objectEvent->mapNum != gSaveBlock1Ptr->location.mapNum + || objectEvent->mapGroup != gSaveBlock1Ptr->location.mapGroup) return NULL; - } + for (i = 0; i < OBJECT_EVENT_TEMPLATES_COUNT; i++) { if (objectEvent->localId == gSaveBlock1Ptr->objectEventTemplates[i].localId) - { return &gSaveBlock1Ptr->objectEventTemplates[i]; - } } return NULL; } @@ -2470,8 +2452,8 @@ void OverrideTemplateCoordsForObjectEvent(const struct ObjectEvent *objectEvent) objectEventTemplate = GetBaseTemplateForObjectEvent(objectEvent); if (objectEventTemplate != NULL) { - objectEventTemplate->x = objectEvent->currentCoords.x - 7; - objectEventTemplate->y = objectEvent->currentCoords.y - 7; + objectEventTemplate->x = objectEvent->currentCoords.x - MAP_OFFSET; + objectEventTemplate->y = objectEvent->currentCoords.y - MAP_OFFSET; } } @@ -2490,9 +2472,7 @@ void TryOverrideTemplateCoordsForObjectEvent(const struct ObjectEvent *objectEve objectEventTemplate = GetBaseTemplateForObjectEvent(objectEvent); if (objectEventTemplate != NULL) - { objectEventTemplate->movementType = movementType; - } } void TryOverrideObjectEventTemplateCoords(u8 localId, u8 mapNum, u8 mapGroup) @@ -2540,15 +2520,12 @@ u16 GetObjectPaletteTag(u8 palSlot) u8 i; if (palSlot < 10) - { return sObjectPaletteTagSets[sCurrentReflectionType][palSlot]; - } + for (i = 0; sSpecialObjectReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) { if (sSpecialObjectReflectionPaletteSets[i].tag == sCurrentSpecialObjectPaletteTag) - { return sSpecialObjectReflectionPaletteSets[i].data[sCurrentReflectionType]; - } } return OBJ_EVENT_PAL_TAG_NONE; } @@ -2573,9 +2550,7 @@ bool8 MovementType_WanderAround_Step1(struct ObjectEvent *objectEvent, struct Sp bool8 MovementType_WanderAround_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (!ObjectEventExecSingleMovementAction(objectEvent, sprite)) - { return FALSE; - } SetMovementDelay(sprite, sMovementDelaysMedium[Random() & 3]); sprite->sTypeFuncId = 3; return TRUE; @@ -2636,13 +2611,11 @@ bool8 ObjectEventIsTrainerAndCloseToPlayer(struct ObjectEvent *objectEvent) s16 maxY; if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) - { return FALSE; - } + if (objectEvent->trainerType != TRAINER_TYPE_NORMAL && objectEvent->trainerType != TRAINER_TYPE_BURIED) - { return FALSE; - } + PlayerGetDestCoords(&playerX, &playerY); objX = objectEvent->currentCoords.x; objY = objectEvent->currentCoords.y; @@ -2650,10 +2623,10 @@ bool8 ObjectEventIsTrainerAndCloseToPlayer(struct ObjectEvent *objectEvent) minY = objY - objectEvent->trainerRange_berryTreeId; maxX = objX + objectEvent->trainerRange_berryTreeId; maxY = objY + objectEvent->trainerRange_berryTreeId; - if (minX > playerX || maxX < playerX || minY > playerY || maxY < playerY) - { + if (minX > playerX || maxX < playerX + || minY > playerY || maxY < playerY) return FALSE; - } + return TRUE; } @@ -3221,10 +3194,8 @@ bool8 MovementType_FaceDownAndUp_Step4(struct ObjectEvent *objectEvent, struct S u8 directions[2]; memcpy(directions, gUpAndDownDirections, sizeof gUpAndDownDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_SOUTH); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[Random() & 1]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 1; return TRUE; @@ -3273,10 +3244,8 @@ bool8 MovementType_FaceLeftAndRight_Step4(struct ObjectEvent *objectEvent, struc u8 directions[2]; memcpy(directions, gLeftAndRightDirections, sizeof gLeftAndRightDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_EAST_WEST); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[Random() & 1]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 1; return TRUE; @@ -3325,10 +3294,8 @@ bool8 MovementType_FaceUpAndLeft_Step4(struct ObjectEvent *objectEvent, struct S u8 directions[2]; memcpy(directions, gUpAndLeftDirections, sizeof gUpAndLeftDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_WEST); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[Random() & 1]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 1; return TRUE; @@ -3377,10 +3344,8 @@ bool8 MovementType_FaceUpAndRight_Step4(struct ObjectEvent *objectEvent, struct u8 directions[2]; memcpy(directions, gUpAndRightDirections, sizeof gUpAndRightDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_EAST); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[Random() & 1]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 1; return TRUE; @@ -3429,10 +3394,8 @@ bool8 MovementType_FaceDownAndLeft_Step4(struct ObjectEvent *objectEvent, struct u8 directions[2]; memcpy(directions, gDownAndLeftDirections, sizeof gDownAndLeftDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_SOUTH_WEST); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[Random() & 1]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 1; return TRUE; @@ -3481,10 +3444,8 @@ bool8 MovementType_FaceDownAndRight_Step4(struct ObjectEvent *objectEvent, struc u8 directions[2]; memcpy(directions, gDownAndRightDirections, sizeof gDownAndRightDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_SOUTH_EAST); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[Random() & 1]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 1; return TRUE; @@ -3533,10 +3494,8 @@ bool8 MovementType_FaceDownUpAndLeft_Step4(struct ObjectEvent *objectEvent, stru u8 directions[4]; memcpy(directions, gDownUpAndLeftDirections, sizeof gDownUpAndLeftDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_SOUTH_WEST); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[Random() & 3]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 1; return TRUE; @@ -3585,10 +3544,8 @@ bool8 MovementType_FaceDownUpAndRight_Step4(struct ObjectEvent *objectEvent, str u8 directions[4]; memcpy(directions, gDownUpAndRightDirections, sizeof gDownUpAndRightDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_SOUTH_EAST); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[Random() & 3]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 1; return TRUE; @@ -3637,10 +3594,8 @@ bool8 MovementType_FaceUpLeftAndRight_Step4(struct ObjectEvent *objectEvent, str u8 directions[4]; memcpy(directions, gUpLeftAndRightDirections, sizeof gUpLeftAndRightDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_EAST_WEST); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[Random() & 3]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 1; return TRUE; @@ -3689,10 +3644,8 @@ bool8 MovementType_FaceDownLeftAndRight_Step4(struct ObjectEvent *objectEvent, s u8 directions[4]; memcpy(directions, gDownLeftAndRightDirections, sizeof gDownLeftAndRightDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_SOUTH_EAST_WEST); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[Random() & 3]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 1; return TRUE; @@ -3721,9 +3674,7 @@ bool8 MovementType_RotateCounterclockwise_Step1(struct ObjectEvent *objectEvent, bool8 MovementType_RotateCounterclockwise_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (WaitForMovementDelay(sprite) || ObjectEventIsTrainerAndCloseToPlayer(objectEvent)) - { sprite->sTypeFuncId = 3; - } return FALSE; } @@ -3733,10 +3684,8 @@ bool8 MovementType_RotateCounterclockwise_Step3(struct ObjectEvent *objectEvent, u8 directions[5]; memcpy(directions, gCounterclockwiseDirections, sizeof gCounterclockwiseDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_ANY); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[objectEvent->facingDirection]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 0; return TRUE; @@ -3765,9 +3714,7 @@ bool8 MovementType_RotateClockwise_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementType_RotateClockwise_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (WaitForMovementDelay(sprite) || ObjectEventIsTrainerAndCloseToPlayer(objectEvent)) - { sprite->sTypeFuncId = 3; - } return FALSE; } @@ -3777,10 +3724,8 @@ bool8 MovementType_RotateClockwise_Step3(struct ObjectEvent *objectEvent, struct u8 directions[5]; memcpy(directions, gClockwiseDirections, sizeof gClockwiseDirections); direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_ANY); - if (direction == 0) - { + if (direction == DIR_NONE) direction = directions[objectEvent->facingDirection]; - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 0; return TRUE; @@ -3801,9 +3746,7 @@ bool8 MovementType_WalkBackAndForth_Step1(struct ObjectEvent *objectEvent, struc direction = gInitialMovementTypeFacingDirections[objectEvent->movementType]; if (objectEvent->directionSequenceIndex) - { direction = GetOppositeDirection(direction); - } SetObjectEventDirection(objectEvent, direction); sprite->sTypeFuncId = 2; return TRUE; @@ -3900,9 +3843,8 @@ u8 MovementType_WalkSequenceUpRightLeftDown_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gUpRightLeftDownDirections)]; memcpy(directions, gUpRightLeftDownDirections, sizeof(gUpRightLeftDownDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -3913,9 +3855,8 @@ u8 MovementType_WalkSequenceRightLeftDownUp_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gRightLeftDownUpDirections)]; memcpy(directions, gRightLeftDownUpDirections, sizeof(gRightLeftDownUpDirections)); if (objectEvent->directionSequenceIndex == 1 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 2; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -3926,9 +3867,8 @@ u8 MovementType_WalkSequenceDownUpRightLeft_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gDownUpRightLeftDirections)]; memcpy(directions, gDownUpRightLeftDirections, sizeof(gDownUpRightLeftDirections)); if (objectEvent->directionSequenceIndex == 1 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 2; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -3939,9 +3879,8 @@ u8 MovementType_WalkSequenceLeftDownUpRight_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gLeftDownUpRightDirections)]; memcpy(directions, gLeftDownUpRightDirections, sizeof(gLeftDownUpRightDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -3952,9 +3891,8 @@ u8 MovementType_WalkSequenceUpLeftRightDown_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gUpLeftRightDownDirections)]; memcpy(directions, gUpLeftRightDownDirections, sizeof(gUpLeftRightDownDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -3965,9 +3903,8 @@ u8 MovementType_WalkSequenceLeftRightDownUp_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gLeftRightDownUpDirections)]; memcpy(directions, gLeftRightDownUpDirections, sizeof(gLeftRightDownUpDirections)); if (objectEvent->directionSequenceIndex == 1 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 2; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -3978,9 +3915,8 @@ u8 MovementType_WalkSequenceDownUpLeftRight_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gStandardDirections)]; memcpy(directions, gStandardDirections, sizeof(gStandardDirections)); if (objectEvent->directionSequenceIndex == 1 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 2; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -3991,9 +3927,8 @@ u8 MovementType_WalkSequenceRightDownUpLeft_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gRightDownUpLeftDirections)]; memcpy(directions, gRightDownUpLeftDirections, sizeof(gRightDownUpLeftDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4004,9 +3939,8 @@ u8 MovementType_WalkSequenceLeftUpDownRight_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gLeftUpDownRightDirections)]; memcpy(directions, gLeftUpDownRightDirections, sizeof(gLeftUpDownRightDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4017,9 +3951,8 @@ u8 MovementType_WalkSequenceUpDownRightLeft_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gUpDownRightLeftDirections)]; memcpy(directions, gUpDownRightLeftDirections, sizeof(gUpDownRightLeftDirections)); if (objectEvent->directionSequenceIndex == 1 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 2; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4030,9 +3963,8 @@ u8 MovementType_WalkSequenceRightLeftUpDown_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gRightLeftUpDownDirections)]; memcpy(directions, gRightLeftUpDownDirections, sizeof(gRightLeftUpDownDirections)); if (objectEvent->directionSequenceIndex == 1 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 2; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4043,9 +3975,8 @@ u8 MovementType_WalkSequenceDownRightLeftUp_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gDownRightLeftUpDirections)]; memcpy(directions, gDownRightLeftUpDirections, sizeof(gDownRightLeftUpDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4056,9 +3987,8 @@ u8 MovementType_WalkSequenceRightUpDownLeft_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gRightUpDownLeftDirections)]; memcpy(directions, gRightUpDownLeftDirections, sizeof(gRightUpDownLeftDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4069,9 +3999,8 @@ u8 MovementType_WalkSequenceUpDownLeftRight_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gUpDownLeftRightDirections)]; memcpy(directions, gUpDownLeftRightDirections, sizeof(gUpDownLeftRightDirections)); if (objectEvent->directionSequenceIndex == 1 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 2; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4082,9 +4011,8 @@ u8 MovementType_WalkSequenceLeftRightUpDown_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gLeftRightUpDownDirections)]; memcpy(directions, gLeftRightUpDownDirections, sizeof(gLeftRightUpDownDirections)); if (objectEvent->directionSequenceIndex == 1 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 2; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4095,9 +4023,8 @@ u8 MovementType_WalkSequenceDownLeftRightUp_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gDownLeftRightUpDirections)]; memcpy(directions, gDownLeftRightUpDirections, sizeof(gDownLeftRightUpDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4108,9 +4035,8 @@ u8 MovementType_WalkSequenceUpLeftDownRight_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gUpLeftDownRightDirections)]; memcpy(directions, gUpLeftDownRightDirections, sizeof(gUpLeftDownRightDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4121,9 +4047,8 @@ u8 MovementType_WalkSequenceDownRightUpLeft_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gDownRightUpLeftDirections)]; memcpy(directions, gDownRightUpLeftDirections, sizeof(gDownRightUpLeftDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4134,9 +4059,8 @@ u8 MovementType_WalkSequenceLeftDownRightUp_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gLeftDownRightUpDirections)]; memcpy(directions, gLeftDownRightUpDirections, sizeof(gLeftDownRightUpDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4147,9 +4071,8 @@ u8 MovementType_WalkSequenceRightUpLeftDown_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gRightUpLeftDownDirections)]; memcpy(directions, gRightUpLeftDownDirections, sizeof(gRightUpLeftDownDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4160,9 +4083,8 @@ u8 MovementType_WalkSequenceUpRightDownLeft_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gUpRightDownLeftDirections)]; memcpy(directions, gUpRightDownLeftDirections, sizeof(gUpRightDownLeftDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4173,9 +4095,8 @@ u8 MovementType_WalkSequenceDownLeftUpRight_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gDownLeftUpRightDirections)]; memcpy(directions, gDownLeftUpRightDirections, sizeof(gDownLeftUpRightDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.y == objectEvent->currentCoords.y) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4186,9 +4107,8 @@ u8 MovementType_WalkSequenceLeftUpRightDown_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gLeftUpRightDownDirections)]; memcpy(directions, gLeftUpRightDownDirections, sizeof(gLeftUpRightDownDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4199,9 +4119,8 @@ u8 MovementType_WalkSequenceRightDownLeftUp_Step1(struct ObjectEvent *objectEven u8 directions[sizeof(gRightDownLeftUpDirections)]; memcpy(directions, gRightDownLeftUpDirections, sizeof(gRightDownLeftUpDirections)); if (objectEvent->directionSequenceIndex == 2 && objectEvent->initialCoords.x == objectEvent->currentCoords.x) - { objectEvent->directionSequenceIndex = 3; - } + return MoveNextDirectionInSequence(objectEvent, sprite, directions); } @@ -4211,19 +4130,16 @@ bool8 MovementType_CopyPlayer_Step0(struct ObjectEvent *objectEvent, struct Spri { ClearObjectEventMovement(objectEvent, sprite); if (objectEvent->directionSequenceIndex == 0) - { objectEvent->directionSequenceIndex = GetPlayerFacingDirection(); - } sprite->sTypeFuncId = 1; return TRUE; } bool8 MovementType_CopyPlayer_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - if (gObjectEvents[gPlayerAvatar.objectEventId].movementActionId == 0xFF || gPlayerAvatar.tileTransitionState == T_TILE_CENTER) - { + if (gObjectEvents[gPlayerAvatar.objectEventId].movementActionId == MOVEMENT_ACTION_NONE || gPlayerAvatar.tileTransitionState == T_TILE_CENTER) return FALSE; - } + return gCopyPlayerMovementFuncs[PlayerGetCopyableMovement()](objectEvent, sprite, GetPlayerMovementDirection(), NULL); } @@ -4244,13 +4160,13 @@ bool8 CopyablePlayerMovement_None(struct ObjectEvent *objectEvent, struct Sprite bool8 CopyablePlayerMovement_FaceDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) { - ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(state_to_direction(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, playerDirection))); + ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, playerDirection))); objectEvent->singleMovementActive = TRUE; sprite->sTypeFuncId = 2; return TRUE; } -bool8 CopyablePlayerMovement_GoSpeed0(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +bool8 CopyablePlayerMovement_WalkNormal(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) { u32 direction; s16 x; @@ -4263,7 +4179,7 @@ bool8 CopyablePlayerMovement_GoSpeed0(struct ObjectEvent *objectEvent, struct Sp if (direction == DIR_NONE) { direction = playerDirection; - direction = state_to_direction(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); ObjectEventMoveDestCoords(objectEvent, direction, &x, &y); ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction)); objectEvent->singleMovementActive = TRUE; @@ -4273,52 +4189,52 @@ bool8 CopyablePlayerMovement_GoSpeed0(struct ObjectEvent *objectEvent, struct Sp } else { - direction = state_to_direction(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + 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_GoSpeed1(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +bool8 CopyablePlayerMovement_WalkFast(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) { u32 direction; s16 x; s16 y; direction = playerDirection; - direction = state_to_direction(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + 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_GoSpeed2(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +bool8 CopyablePlayerMovement_WalkFaster(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) { u32 direction; s16 x; s16 y; direction = playerDirection; - direction = state_to_direction(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); ObjectEventMoveDestCoords(objectEvent, direction, &x, &y); - ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkFastestMovementAction(direction)); + 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; @@ -4331,49 +4247,30 @@ bool8 CopyablePlayerMovement_Slide(struct ObjectEvent *objectEvent, struct Sprit s16 y; direction = playerDirection; - direction = state_to_direction(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + 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 cph_IM_DIFFERENT(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +bool8 CopyablePlayerMovement_JumpInPlace(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) { u32 direction; direction = playerDirection; - direction = state_to_direction(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); ObjectEventSetSingleMovement(objectEvent, sprite, GetJumpInPlaceMovementAction(direction)); objectEvent->singleMovementActive = TRUE; sprite->sTypeFuncId = 2; return TRUE; } -bool8 CopyablePlayerMovement_GoSpeed4(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) -{ - u32 direction; - s16 x; - s16 y; - - direction = playerDirection; - direction = state_to_direction(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_Jump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) { u32 direction; @@ -4381,15 +4278,34 @@ bool8 CopyablePlayerMovement_Jump(struct ObjectEvent *objectEvent, struct Sprite s16 y; direction = playerDirection; - direction = state_to_direction(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + 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; @@ -4467,9 +4383,7 @@ bool8 MovementType_Buried_Step0(struct ObjectEvent *objectEvent, struct Sprite * bool8 MovementType_MoveInPlace_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) - { sprite->sTypeFuncId = 0; - } return FALSE; } @@ -4508,7 +4422,7 @@ movement_type_def(MovementType_RunInPlace, gMovementTypeFuncs_RunInPlace) bool8 MovementType_RunInPlace_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { ClearObjectEventMovement(objectEvent, sprite); - ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkInPlaceFastestMovementAction(objectEvent->facingDirection)); + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkInPlaceFasterMovementAction(objectEvent->facingDirection)); sprite->sTypeFuncId = 1; return TRUE; } @@ -4544,7 +4458,7 @@ static void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Spr objectEvent->singleMovementActive = FALSE; objectEvent->heldMovementActive = FALSE; objectEvent->heldMovementFinished = FALSE; - objectEvent->movementActionId = 0xFF; + objectEvent->movementActionId = MOVEMENT_ACTION_NONE; sprite->sTypeFuncId = 0; } @@ -4716,11 +4630,11 @@ u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) u8 direction = dir; if (IsCoordOutsideObjectEventMovementRange(objectEvent, x, y)) return COLLISION_OUTSIDE_RANGE; - else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction)) + else if (MapGridGetCollisionAt(x, y) || GetMapBorderIdAt(x, y) == CONNECTION_INVALID || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction)) return COLLISION_IMPASSABLE; else if (objectEvent->trackedByCamera && !CanCameraMoveInDirection(direction)) return COLLISION_IMPASSABLE; - else if (IsZCoordMismatchAt(objectEvent->currentElevation, x, y)) + else if (IsElevationMismatchAt(objectEvent->currentElevation, x, y)) return COLLISION_ELEVATION_MISMATCH; else if (DoesObjectCollideWithObjectAt(objectEvent, x, y)) return COLLISION_OBJECT_EVENT; @@ -4732,13 +4646,13 @@ u8 GetCollisionFlagsAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 d u8 flags = 0; if (IsCoordOutsideObjectEventMovementRange(objectEvent, x, y)) - flags |= 1; - if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction) || (objectEvent->trackedByCamera && !CanCameraMoveInDirection(direction))) - flags |= 2; - if (IsZCoordMismatchAt(objectEvent->currentElevation, x, y)) - flags |= 4; + flags |= 1 << (COLLISION_OUTSIDE_RANGE - 1); + if (MapGridGetCollisionAt(x, y) || GetMapBorderIdAt(x, y) == CONNECTION_INVALID || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction) || (objectEvent->trackedByCamera && !CanCameraMoveInDirection(direction))) + flags |= 1 << (COLLISION_IMPASSABLE - 1); + if (IsElevationMismatchAt(objectEvent->currentElevation, x, y)) + flags |= 1 << (COLLISION_ELEVATION_MISMATCH - 1); if (DoesObjectCollideWithObjectAt(objectEvent, x, y)) - flags |= 8; + flags |= 1 << (COLLISION_OBJECT_EVENT - 1); return flags; } @@ -4772,9 +4686,8 @@ static bool8 IsMetatileDirectionallyImpassable(struct ObjectEvent *objectEvent, { if (gOppositeDirectionBlockedMetatileFuncs[direction - 1](objectEvent->currentMetatileBehavior) || gDirectionBlockedMetatileFuncs[direction - 1](MapGridGetMetatileBehaviorAt(x, y))) - { return TRUE; - } + return FALSE; } @@ -4790,10 +4703,8 @@ static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16 { if ((curObject->currentCoords.x == x && curObject->currentCoords.y == y) || (curObject->previousCoords.x == x && curObject->previousCoords.y == y)) { - if (AreZCoordsCompatible(objectEvent->currentElevation, curObject->currentElevation)) - { + if (AreElevationsCompatible(objectEvent->currentElevation, curObject->currentElevation)) return TRUE; - } } } } @@ -4806,9 +4717,7 @@ bool8 IsBerryTreeSparkling(u8 localId, u8 mapNum, u8 mapGroup) if (!TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId) && gSprites[gObjectEvents[objectEventId].spriteId].sBerryTreeFlags & BERRY_FLAG_SPARKLING) - { return TRUE; - } return FALSE; } @@ -4818,9 +4727,7 @@ void SetBerryTreeJustPicked(u8 localId, u8 mapNum, u8 mapGroup) u8 objectEventId; if (!TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId)) - { gSprites[gObjectEvents[objectEventId].spriteId].sBerryTreeFlags |= BERRY_FLAG_JUST_PICKED; - } } #undef sTimer @@ -4925,7 +4832,7 @@ bool8 ObjectEventIsMovementOverridden(struct ObjectEvent *objectEvent) bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *objectEvent) { - if (objectEvent->heldMovementActive && objectEvent->movementActionId != 0xFF) + if (objectEvent->heldMovementActive && objectEvent->movementActionId != MOVEMENT_ACTION_NONE) return TRUE; return FALSE; @@ -4958,7 +4865,7 @@ void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *objectEvent) void ObjectEventClearHeldMovement(struct ObjectEvent *objectEvent) { - objectEvent->movementActionId = 0xFF; + objectEvent->movementActionId = MOVEMENT_ACTION_NONE; objectEvent->heldMovementActive = FALSE; objectEvent->heldMovementFinished = FALSE; gSprites[objectEvent->spriteId].sTypeFuncId = 0; @@ -4994,14 +4901,12 @@ void UpdateObjectEventCurrentMovement(struct ObjectEvent *objectEvent, struct Sp { DoGroundEffects_OnSpawn(objectEvent, sprite); TryEnableObjectEventAnim(objectEvent, sprite); + if (ObjectEventIsHeldMovementActive(objectEvent)) - { ObjectEventExecHeldMovementAction(objectEvent, sprite); - } else if (!objectEvent->frozen) - { while (callback(objectEvent, sprite)); - } + DoGroundEffects_OnBeginStep(objectEvent, sprite); DoGroundEffects_OnFinishStep(objectEvent, sprite); UpdateObjectEventSpriteAnimPause(objectEvent, sprite); @@ -5025,7 +4930,7 @@ dirn_to_anim(GetWalkSlowMovementAction, gWalkSlowMovementActions); dirn_to_anim(GetWalkNormalMovementAction, gWalkNormalMovementActions); dirn_to_anim(GetWalkFastMovementAction, gWalkFastMovementActions); dirn_to_anim(GetRideWaterCurrentMovementAction, gRideWaterCurrentMovementActions); -dirn_to_anim(GetWalkFastestMovementAction, gWalkFastestMovementActions); +dirn_to_anim(GetWalkFasterMovementAction, gWalkFasterMovementActions); dirn_to_anim(GetSlideMovementAction, gSlideMovementActions); dirn_to_anim(GetPlayerRunMovementAction, gPlayerRunMovementActions); dirn_to_anim(GetJump2MovementAction, gJump2MovementActions); @@ -5036,7 +4941,7 @@ dirn_to_anim(GetJumpSpecialMovementAction, gJumpSpecialMovementActions); dirn_to_anim(GetWalkInPlaceSlowMovementAction, gWalkInPlaceSlowMovementActions); dirn_to_anim(GetWalkInPlaceNormalMovementAction, gWalkInPlaceNormalMovementActions); dirn_to_anim(GetWalkInPlaceFastMovementAction, gWalkInPlaceFastMovementActions); -dirn_to_anim(GetWalkInPlaceFastestMovementAction, gWalkInPlaceFastestMovementActions); +dirn_to_anim(GetWalkInPlaceFasterMovementAction, gWalkInPlaceFasterMovementActions); bool8 ObjectEventFaceOppositeDirection(struct ObjectEvent *objectEvent, u8 direction) { @@ -5060,46 +4965,45 @@ u8 GetOppositeDirection(u8 direction) memcpy(directions, sOppositeDirections, sizeof sOppositeDirections); if (direction <= DIR_NONE || direction > (sizeof sOppositeDirections)) - { return direction; - } + return directions[direction - 1]; } -static u32 zffu_offset_calc(u8 a0, u8 a1) +// Takes the player's original and current direction and gives a direction the copy NPC should consider as the player's direction. +// See comments at the table's definition. +static u32 GetPlayerDirectionForCopy(u8 initDir, u8 moveDir) { - return gUnknown_0850DC2F[a0 - 1][a1 - 1]; + return sPlayerDirectionsForCopy[initDir - 1][moveDir - 1]; } -static u32 state_to_direction(u8 a0, u32 a1, u32 a2) +// copyInitDir is the initial facing direction of the copying NPC. +// playerInitDir is the direction the player was facing when the copying NPC was spawned, as set by MovementType_CopyPlayer_Step0. +// playerMoveDir is the direction the player is currently moving. +static u32 GetCopyDirection(u8 copyInitDir, u32 playerInitDir, u32 playerMoveDir) { - u32 zffuOffset; - u8 a1_2; - u8 a2_2; + u32 dir; + u8 _playerInitDir = playerInitDir; + u8 _playerMoveDir = playerMoveDir; + if (_playerInitDir == DIR_NONE || _playerMoveDir == DIR_NONE + || _playerInitDir > DIR_EAST || _playerMoveDir > DIR_EAST) + return DIR_NONE; - a1_2 = a1; - a2_2 = a2; - if (a1_2 == 0 || a2_2 == 0 || a1_2 > DIR_EAST || a2_2 > DIR_EAST) - { - return 0; - } - zffuOffset = zffu_offset_calc(a1_2, a2); - return gUnknown_0850DC3F[a0 - 1][zffuOffset - 1]; + dir = GetPlayerDirectionForCopy(_playerInitDir, playerMoveDir); + return sPlayerDirectionToCopyDirection[copyInitDir - 1][dir - 1]; } static void ObjectEventExecHeldMovementAction(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (gMovementActionFuncs[objectEvent->movementActionId][sprite->sActionFuncId](objectEvent, sprite)) - { objectEvent->heldMovementFinished = TRUE; - } } static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (gMovementActionFuncs[objectEvent->movementActionId][sprite->sActionFuncId](objectEvent, sprite)) { - objectEvent->movementActionId = 0xFF; + objectEvent->movementActionId = MOVEMENT_ACTION_NONE; sprite->sActionFuncId = 0; return TRUE; } @@ -5176,7 +5080,7 @@ static void InitMovementNormal(struct ObjectEvent *objectEvent, struct Sprite *s static void StartRunningAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction) { - InitNpcForMovement(objectEvent, sprite, direction, 1); + InitNpcForMovement(objectEvent, sprite, direction, MOVE_SPEED_FAST_1); SetStepAnimHandleAlternation(objectEvent, sprite, GetRunningDirectionAnimNum(objectEvent->facingDirection)); } @@ -5356,7 +5260,7 @@ bool8 MovementAction_WalkSlowRight_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkNormalDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTHWEST, 0); + InitMovementNormal(objectEvent, sprite, DIR_NORTHWEST, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalDiagonalUpLeft_Step1(objectEvent, sprite); } @@ -5372,7 +5276,7 @@ bool8 MovementAction_WalkNormalDiagonalUpLeft_Step1(struct ObjectEvent *objectEv bool8 MovementAction_WalkNormalDiagonalUpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTHEAST, 0); + InitMovementNormal(objectEvent, sprite, DIR_NORTHEAST, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalDiagonalUpRight_Step1(objectEvent, sprite); } @@ -5388,7 +5292,7 @@ bool8 MovementAction_WalkNormalDiagonalUpRight_Step1(struct ObjectEvent *objectE bool8 MovementAction_WalkNormalDiagonalDownLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTHWEST, 0); + InitMovementNormal(objectEvent, sprite, DIR_SOUTHWEST, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalDiagonalDownLeft_Step1(objectEvent, sprite); } @@ -5404,7 +5308,7 @@ bool8 MovementAction_WalkNormalDiagonalDownLeft_Step1(struct ObjectEvent *object bool8 MovementAction_WalkNormalDiagonalDownRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTHEAST, 0); + InitMovementNormal(objectEvent, sprite, DIR_SOUTHEAST, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalDiagonalDownRight_Step1(objectEvent, sprite); } @@ -5420,7 +5324,7 @@ bool8 MovementAction_WalkNormalDiagonalDownRight_Step1(struct ObjectEvent *objec bool8 MovementAction_WalkNormalDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTH, 0); + InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalDown_Step1(objectEvent, sprite); } @@ -5436,7 +5340,7 @@ bool8 MovementAction_WalkNormalDown_Step1(struct ObjectEvent *objectEvent, struc bool8 MovementAction_WalkNormalUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTH, 0); + InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalUp_Step1(objectEvent, sprite); } @@ -5452,7 +5356,7 @@ bool8 MovementAction_WalkNormalUp_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkNormalLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_WEST, 0); + InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalLeft_Step1(objectEvent, sprite); } @@ -5468,7 +5372,7 @@ bool8 MovementAction_WalkNormalLeft_Step1(struct ObjectEvent *objectEvent, struc bool8 MovementAction_WalkNormalRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_EAST, 0); + InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalRight_Step1(objectEvent, sprite); } @@ -5491,7 +5395,7 @@ enum { JUMP_TYPE_NORMAL, }; -static void InitJump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 speed, u8 type) +static void InitJump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 distance, u8 type) { s16 displacements[ARRAY_COUNT(sJumpInitDisplacements)]; s16 x; @@ -5501,22 +5405,24 @@ static void InitJump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 x = 0; y = 0; SetObjectEventDirection(objectEvent, direction); - MoveCoordsInDirection(direction, &x, &y, displacements[speed], displacements[speed]); + MoveCoordsInDirection(direction, &x, &y, displacements[distance], displacements[distance]); ShiftObjectEventCoords(objectEvent, objectEvent->currentCoords.x + x, objectEvent->currentCoords.y + y); - SetJumpSpriteData(sprite, direction, speed, type); + SetJumpSpriteData(sprite, direction, distance, type); sprite->sActionFuncId = 1; sprite->animPaused = FALSE; objectEvent->triggerGroundEffectsOnMove = TRUE; objectEvent->disableCoveringGroundEffects = TRUE; } -static void InitJumpRegular(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 speed, u8 type) +static void InitJumpRegular(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 distance, u8 type) { - InitJump(objectEvent, sprite, direction, speed, type); + InitJump(objectEvent, sprite, direction, distance, type); SetStepAnimHandleAlternation(objectEvent, sprite, GetMoveDirectionAnimNum(objectEvent->facingDirection)); DoShadowFieldEffect(objectEvent); } +#define sDistance data[4] + static u8 UpdateJumpAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 callback(struct Sprite *)) { s16 displacements[ARRAY_COUNT(sJumpDisplacements)]; @@ -5526,11 +5432,11 @@ static u8 UpdateJumpAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, memcpy(displacements, sJumpDisplacements, sizeof sJumpDisplacements); result = callback(sprite); - if (result == JUMP_HALFWAY && displacements[sprite->sSpeed] != 0) + if (result == JUMP_HALFWAY && displacements[sprite->sDistance] != 0) { x = 0; y = 0; - MoveCoordsInDirection(objectEvent->movementDirection, &x, &y, displacements[sprite->sSpeed], displacements[sprite->sSpeed]); + MoveCoordsInDirection(objectEvent->movementDirection, &x, &y, displacements[sprite->sDistance], displacements[sprite->sDistance]); ShiftObjectEventCoords(objectEvent, objectEvent->currentCoords.x + x, objectEvent->currentCoords.y + y); objectEvent->triggerGroundEffectsOnMove = TRUE; objectEvent->disableCoveringGroundEffects = TRUE; @@ -5545,6 +5451,8 @@ static u8 UpdateJumpAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, return result; } +#undef sDistance + static u8 DoJumpAnimStep(struct ObjectEvent *objectEvent, struct Sprite *sprite) { return UpdateJumpAnim(objectEvent, sprite, DoJumpSpriteMovement); @@ -5587,7 +5495,7 @@ static bool8 DoJumpInPlaceAnim(struct ObjectEvent *objectEvent, struct Sprite *s bool8 MovementAction_Jump2Down_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_SOUTH, 2, JUMP_TYPE_HIGH); + InitJumpRegular(objectEvent, sprite, DIR_SOUTH, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Down_Step1(objectEvent, sprite); } @@ -5604,7 +5512,7 @@ bool8 MovementAction_Jump2Down_Step1(struct ObjectEvent *objectEvent, struct Spr bool8 MovementAction_Jump2Up_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_NORTH, 2, JUMP_TYPE_HIGH); + InitJumpRegular(objectEvent, sprite, DIR_NORTH, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Up_Step1(objectEvent, sprite); } @@ -5621,7 +5529,7 @@ bool8 MovementAction_Jump2Up_Step1(struct ObjectEvent *objectEvent, struct Sprit bool8 MovementAction_Jump2Left_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_WEST, 2, JUMP_TYPE_HIGH); + InitJumpRegular(objectEvent, sprite, DIR_WEST, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Left_Step1(objectEvent, sprite); } @@ -5638,7 +5546,7 @@ bool8 MovementAction_Jump2Left_Step1(struct ObjectEvent *objectEvent, struct Spr bool8 MovementAction_Jump2Right_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_EAST, 2, JUMP_TYPE_HIGH); + InitJumpRegular(objectEvent, sprite, DIR_EAST, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Right_Step1(objectEvent, sprite); } @@ -5701,7 +5609,7 @@ bool8 MovementAction_Delay16_Step0(struct ObjectEvent *objectEvent, struct Sprit bool8 MovementAction_WalkFastDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTH, 1); + InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_1); return MovementAction_WalkFastDown_Step1(objectEvent, sprite); } @@ -5717,7 +5625,7 @@ bool8 MovementAction_WalkFastDown_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkFastUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTH, 1); + InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_1); return MovementAction_WalkFastUp_Step1(objectEvent, sprite); } @@ -5733,7 +5641,7 @@ bool8 MovementAction_WalkFastUp_Step1(struct ObjectEvent *objectEvent, struct Sp bool8 MovementAction_WalkFastLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_WEST, 1); + InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1); return MovementAction_WalkFastLeft_Step1(objectEvent, sprite); } @@ -5749,7 +5657,7 @@ bool8 MovementAction_WalkFastLeft_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkFastRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_EAST, 1); + InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1); return MovementAction_WalkFastRight_Step1(objectEvent, sprite); } @@ -5787,9 +5695,8 @@ bool8 MovementAction_WalkInPlace_Step1(struct ObjectEvent *objectEvent, struct S bool8 MovementAction_WalkInPlaceSlow_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (sprite->data[3] & 1) - { sprite->animDelayCounter++; - } + return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } @@ -5865,25 +5772,25 @@ bool8 MovementAction_WalkInPlaceFastRight_Step0(struct ObjectEvent *objectEvent, return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } -bool8 MovementAction_WalkInPlaceFastestDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkInPlaceFasterDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { InitMoveInPlace(objectEvent, sprite, DIR_SOUTH, GetMoveDirectionFasterAnimNum(DIR_SOUTH), 4); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } -bool8 MovementAction_WalkInPlaceFastestUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkInPlaceFasterUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { InitMoveInPlace(objectEvent, sprite, DIR_NORTH, GetMoveDirectionFasterAnimNum(DIR_NORTH), 4); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } -bool8 MovementAction_WalkInPlaceFastestLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkInPlaceFasterLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { InitMoveInPlace(objectEvent, sprite, DIR_WEST, GetMoveDirectionFasterAnimNum(DIR_WEST), 4); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } -bool8 MovementAction_WalkInPlaceFastestRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkInPlaceFasterRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { InitMoveInPlace(objectEvent, sprite, DIR_EAST, GetMoveDirectionFasterAnimNum(DIR_EAST), 4); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); @@ -5891,7 +5798,7 @@ bool8 MovementAction_WalkInPlaceFastestRight_Step0(struct ObjectEvent *objectEve bool8 MovementAction_RideWaterCurrentDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTH, 2); + InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_2); return MovementAction_RideWaterCurrentDown_Step1(objectEvent, sprite); } @@ -5907,7 +5814,7 @@ bool8 MovementAction_RideWaterCurrentDown_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_RideWaterCurrentUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTH, 2); + InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_2); return MovementAction_RideWaterCurrentUp_Step1(objectEvent, sprite); } @@ -5923,7 +5830,7 @@ bool8 MovementAction_RideWaterCurrentUp_Step1(struct ObjectEvent *objectEvent, s bool8 MovementAction_RideWaterCurrentLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_WEST, 2); + InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_2); return MovementAction_RideWaterCurrentLeft_Step1(objectEvent, sprite); } @@ -5939,7 +5846,7 @@ bool8 MovementAction_RideWaterCurrentLeft_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_RideWaterCurrentRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_EAST, 2); + InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_2); return MovementAction_RideWaterCurrentRight_Step1(objectEvent, sprite); } @@ -5953,13 +5860,13 @@ bool8 MovementAction_RideWaterCurrentRight_Step1(struct ObjectEvent *objectEvent return FALSE; } -bool8 MovementAction_WalkFastestDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkFasterDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTH, 3); - return MovementAction_WalkFastestDown_Step1(objectEvent, sprite); + InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FASTER); + return MovementAction_WalkFasterDown_Step1(objectEvent, sprite); } -bool8 MovementAction_WalkFastestDown_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkFasterDown_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (UpdateMovementNormal(objectEvent, sprite)) { @@ -5969,13 +5876,13 @@ bool8 MovementAction_WalkFastestDown_Step1(struct ObjectEvent *objectEvent, stru return FALSE; } -bool8 MovementAction_WalkFastestUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkFasterUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTH, 3); - return MovementAction_WalkFastestUp_Step1(objectEvent, sprite); + InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FASTER); + return MovementAction_WalkFasterUp_Step1(objectEvent, sprite); } -bool8 MovementAction_WalkFastestUp_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkFasterUp_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (UpdateMovementNormal(objectEvent, sprite)) { @@ -5985,13 +5892,13 @@ bool8 MovementAction_WalkFastestUp_Step1(struct ObjectEvent *objectEvent, struct return FALSE; } -bool8 MovementAction_WalkFastestLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkFasterLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_WEST, 3); - return MovementAction_WalkFastestLeft_Step1(objectEvent, sprite); + InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FASTER); + return MovementAction_WalkFasterLeft_Step1(objectEvent, sprite); } -bool8 MovementAction_WalkFastestLeft_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkFasterLeft_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (UpdateMovementNormal(objectEvent, sprite)) { @@ -6001,13 +5908,13 @@ bool8 MovementAction_WalkFastestLeft_Step1(struct ObjectEvent *objectEvent, stru return FALSE; } -bool8 MovementAction_WalkFastestRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkFasterRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_EAST, 3); - return MovementAction_WalkFastestRight_Step1(objectEvent, sprite); + InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FASTER); + return MovementAction_WalkFasterRight_Step1(objectEvent, sprite); } -bool8 MovementAction_WalkFastestRight_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementAction_WalkFasterRight_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (UpdateMovementNormal(objectEvent, sprite)) { @@ -6019,7 +5926,7 @@ bool8 MovementAction_WalkFastestRight_Step1(struct ObjectEvent *objectEvent, str bool8 MovementAction_SlideDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTH, 4); + InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FASTEST); return MovementAction_SlideDown_Step1(objectEvent, sprite); } @@ -6035,7 +5942,7 @@ bool8 MovementAction_SlideDown_Step1(struct ObjectEvent *objectEvent, struct Spr bool8 MovementAction_SlideUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTH, 4); + InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FASTEST); return MovementAction_SlideUp_Step1(objectEvent, sprite); } @@ -6051,7 +5958,7 @@ bool8 MovementAction_SlideUp_Step1(struct ObjectEvent *objectEvent, struct Sprit bool8 MovementAction_SlideLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_WEST, 4); + InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FASTEST); return MovementAction_SlideLeft_Step1(objectEvent, sprite); } @@ -6067,7 +5974,7 @@ bool8 MovementAction_SlideLeft_Step1(struct ObjectEvent *objectEvent, struct Spr bool8 MovementAction_SlideRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_EAST, 4); + InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FASTEST); return MovementAction_SlideRight_Step1(objectEvent, sprite); } @@ -6170,7 +6077,7 @@ bool8 MovementAction_WaitSpriteAnim(struct ObjectEvent *objectEvent, struct Spri static void InitJumpSpecial(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction) { - InitJump(objectEvent, sprite, direction, 1, JUMP_TYPE_HIGH); + InitJump(objectEvent, sprite, direction, JUMP_DISTANCE_NORMAL, JUMP_TYPE_HIGH); StartSpriteAnim(sprite, GetJumpSpecialDirectionAnimNum(direction)); } @@ -6247,9 +6154,10 @@ bool8 MovementAction_FacePlayer_Step0(struct ObjectEvent *objectEvent, struct Sp u8 playerObjectId; if (!TryGetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0, &playerObjectId)) - { - FaceDirection(objectEvent, sprite, GetDirectionToFace(objectEvent->currentCoords.x, objectEvent->currentCoords.y, gObjectEvents[playerObjectId].currentCoords.x, gObjectEvents[playerObjectId].currentCoords.y)); - } + FaceDirection(objectEvent, sprite, GetDirectionToFace(objectEvent->currentCoords.x, + objectEvent->currentCoords.y, + gObjectEvents[playerObjectId].currentCoords.x, + gObjectEvents[playerObjectId].currentCoords.y)); sprite->sActionFuncId = 1; return TRUE; } @@ -6259,9 +6167,10 @@ bool8 MovementAction_FaceAwayPlayer_Step0(struct ObjectEvent *objectEvent, struc u8 playerObjectId; if (!TryGetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0, &playerObjectId)) - { - FaceDirection(objectEvent, sprite, GetOppositeDirection(GetDirectionToFace(objectEvent->currentCoords.x, objectEvent->currentCoords.y, gObjectEvents[playerObjectId].currentCoords.x, gObjectEvents[playerObjectId].currentCoords.y))); - } + FaceDirection(objectEvent, sprite, GetOppositeDirection(GetDirectionToFace(objectEvent->currentCoords.x, + objectEvent->currentCoords.y, + gObjectEvents[playerObjectId].currentCoords.x, + gObjectEvents[playerObjectId].currentCoords.y))); sprite->sActionFuncId = 1; return TRUE; } @@ -6282,7 +6191,7 @@ bool8 MovementAction_UnlockFacingDirection_Step0(struct ObjectEvent *objectEvent bool8 MovementAction_JumpDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_SOUTH, 1, JUMP_TYPE_NORMAL); + InitJumpRegular(objectEvent, sprite, DIR_SOUTH, JUMP_DISTANCE_NORMAL, JUMP_TYPE_NORMAL); return MovementAction_JumpDown_Step1(objectEvent, sprite); } @@ -6299,7 +6208,7 @@ bool8 MovementAction_JumpDown_Step1(struct ObjectEvent *objectEvent, struct Spri bool8 MovementAction_JumpUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_NORTH, 1, JUMP_TYPE_NORMAL); + InitJumpRegular(objectEvent, sprite, DIR_NORTH, JUMP_DISTANCE_NORMAL, JUMP_TYPE_NORMAL); return MovementAction_JumpUp_Step1(objectEvent, sprite); } @@ -6316,7 +6225,7 @@ bool8 MovementAction_JumpUp_Step1(struct ObjectEvent *objectEvent, struct Sprite bool8 MovementAction_JumpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_WEST, 1, JUMP_TYPE_NORMAL); + InitJumpRegular(objectEvent, sprite, DIR_WEST, JUMP_DISTANCE_NORMAL, JUMP_TYPE_NORMAL); return MovementAction_JumpLeft_Step1(objectEvent, sprite); } @@ -6333,7 +6242,7 @@ bool8 MovementAction_JumpLeft_Step1(struct ObjectEvent *objectEvent, struct Spri bool8 MovementAction_JumpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_EAST, 1, JUMP_TYPE_NORMAL); + InitJumpRegular(objectEvent, sprite, DIR_EAST, JUMP_DISTANCE_NORMAL, JUMP_TYPE_NORMAL); return MovementAction_JumpRight_Step1(objectEvent, sprite); } @@ -6350,7 +6259,7 @@ bool8 MovementAction_JumpRight_Step1(struct ObjectEvent *objectEvent, struct Spr bool8 MovementAction_JumpInPlaceDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_SOUTH, 0, JUMP_TYPE_HIGH); + InitJumpRegular(objectEvent, sprite, DIR_SOUTH, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_HIGH); return MovementAction_JumpInPlaceDown_Step1(objectEvent, sprite); } @@ -6367,7 +6276,7 @@ bool8 MovementAction_JumpInPlaceDown_Step1(struct ObjectEvent *objectEvent, stru bool8 MovementAction_JumpInPlaceUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_NORTH, 0, JUMP_TYPE_HIGH); + InitJumpRegular(objectEvent, sprite, DIR_NORTH, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_HIGH); return MovementAction_JumpInPlaceUp_Step1(objectEvent, sprite); } @@ -6384,7 +6293,7 @@ bool8 MovementAction_JumpInPlaceUp_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_JumpInPlaceLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_WEST, 0, JUMP_TYPE_HIGH); + InitJumpRegular(objectEvent, sprite, DIR_WEST, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_HIGH); return MovementAction_JumpInPlaceLeft_Step1(objectEvent, sprite); } @@ -6401,7 +6310,7 @@ bool8 MovementAction_JumpInPlaceLeft_Step1(struct ObjectEvent *objectEvent, stru bool8 MovementAction_JumpInPlaceRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_EAST, 0, JUMP_TYPE_HIGH); + InitJumpRegular(objectEvent, sprite, DIR_EAST, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_HIGH); return MovementAction_JumpInPlaceRight_Step1(objectEvent, sprite); } @@ -6418,7 +6327,7 @@ bool8 MovementAction_JumpInPlaceRight_Step1(struct ObjectEvent *objectEvent, str bool8 MovementAction_JumpInPlaceDownUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_SOUTH, 0, JUMP_TYPE_NORMAL); + InitJumpRegular(objectEvent, sprite, DIR_SOUTH, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_NORMAL); return MovementAction_JumpInPlaceDownUp_Step1(objectEvent, sprite); } @@ -6435,7 +6344,7 @@ bool8 MovementAction_JumpInPlaceDownUp_Step1(struct ObjectEvent *objectEvent, st bool8 MovementAction_JumpInPlaceUpDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_NORTH, 0, JUMP_TYPE_NORMAL); + InitJumpRegular(objectEvent, sprite, DIR_NORTH, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_NORMAL); return MovementAction_JumpInPlaceUpDown_Step1(objectEvent, sprite); } @@ -6452,7 +6361,7 @@ bool8 MovementAction_JumpInPlaceUpDown_Step1(struct ObjectEvent *objectEvent, st bool8 MovementAction_JumpInPlaceLeftRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_WEST, 0, JUMP_TYPE_NORMAL); + InitJumpRegular(objectEvent, sprite, DIR_WEST, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_NORMAL); return MovementAction_JumpInPlaceLeftRight_Step1(objectEvent, sprite); } @@ -6469,7 +6378,7 @@ bool8 MovementAction_JumpInPlaceLeftRight_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_JumpInPlaceRightLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitJumpRegular(objectEvent, sprite, DIR_EAST, 0, JUMP_TYPE_NORMAL); + InitJumpRegular(objectEvent, sprite, DIR_EAST, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_NORMAL); return MovementAction_JumpInPlaceRightLeft_Step1(objectEvent, sprite); } @@ -6492,7 +6401,7 @@ bool8 MovementAction_FaceOriginalDirection_Step0(struct ObjectEvent *objectEvent bool8 MovementAction_NurseJoyBowDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - StartSpriteAnimInDirection(objectEvent, sprite, DIR_SOUTH, 0x14); + StartSpriteAnimInDirection(objectEvent, sprite, DIR_SOUTH, ANIM_NURSE_BOW); return FALSE; } @@ -6591,7 +6500,7 @@ bool8 MovementAction_RevealTrainer_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_RockSmashBreak_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - SetAndStartSpriteAnim(sprite, 1, 0); + SetAndStartSpriteAnim(sprite, ANIM_REMOVE_OBSTACLE, 0); sprite->sActionFuncId = 1; return FALSE; } @@ -6619,7 +6528,7 @@ bool8 MovementAction_RockSmashBreak_Step2(struct ObjectEvent *objectEvent, struc bool8 MovementAction_CutTree_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - SetAndStartSpriteAnim(sprite, 1, 0); + SetAndStartSpriteAnim(sprite, ANIM_REMOVE_OBSTACLE, 0); sprite->sActionFuncId = 1; return FALSE; } @@ -6728,7 +6637,7 @@ bool8 MovementAction_WalkDownAffine_Step1(struct ObjectEvent *objectEvent, struc bool8 MovementAction_WalkLeftAffine_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_WEST, 1); + InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1); sprite->affineAnimPaused = FALSE; ChangeSpriteAffineAnimIfDifferent(sprite, 2); return MovementAction_WalkLeftAffine_Step1(objectEvent, sprite); @@ -6747,7 +6656,7 @@ bool8 MovementAction_WalkLeftAffine_Step1(struct ObjectEvent *objectEvent, struc bool8 MovementAction_WalkRightAffine_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_EAST, 1); + InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1); sprite->affineAnimPaused = FALSE; ChangeSpriteAffineAnimIfDifferent(sprite, 3); return MovementAction_WalkRightAffine_Step1(objectEvent, sprite); @@ -6904,16 +6813,16 @@ bool8 MovementAction_Figure8_Step1(struct ObjectEvent *objectEvent, struct Sprit return FALSE; } -static void InitAcroWheelieJump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 speed, u8 type) +static void InitAcroWheelieJump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 distance, u8 type) { - InitJump(objectEvent, sprite, direction, speed, type); + InitJump(objectEvent, sprite, direction, distance, type); StartSpriteAnimIfDifferent(sprite, GetAcroWheelieDirectionAnimNum(direction)); DoShadowFieldEffect(objectEvent); } bool8 MovementAction_AcroWheelieHopFaceDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_SOUTH, 0, JUMP_TYPE_LOW); + InitAcroWheelieJump(objectEvent, sprite, DIR_SOUTH, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_LOW); return MovementAction_AcroWheelieHopFaceDown_Step1(objectEvent, sprite); } @@ -6930,7 +6839,7 @@ bool8 MovementAction_AcroWheelieHopFaceDown_Step1(struct ObjectEvent *objectEven bool8 MovementAction_AcroWheelieHopFaceUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_NORTH, 0, JUMP_TYPE_LOW); + InitAcroWheelieJump(objectEvent, sprite, DIR_NORTH, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_LOW); return MovementAction_AcroWheelieHopFaceUp_Step1(objectEvent, sprite); } @@ -6947,7 +6856,7 @@ bool8 MovementAction_AcroWheelieHopFaceUp_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieHopFaceLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_WEST, 0, JUMP_TYPE_LOW); + InitAcroWheelieJump(objectEvent, sprite, DIR_WEST, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_LOW); return MovementAction_AcroWheelieHopFaceLeft_Step1(objectEvent, sprite); } @@ -6964,7 +6873,7 @@ bool8 MovementAction_AcroWheelieHopFaceLeft_Step1(struct ObjectEvent *objectEven bool8 MovementAction_AcroWheelieHopFaceRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_EAST, 0, JUMP_TYPE_LOW); + InitAcroWheelieJump(objectEvent, sprite, DIR_EAST, JUMP_DISTANCE_IN_PLACE, JUMP_TYPE_LOW); return MovementAction_AcroWheelieHopFaceRight_Step1(objectEvent, sprite); } @@ -6981,7 +6890,7 @@ bool8 MovementAction_AcroWheelieHopFaceRight_Step1(struct ObjectEvent *objectEve bool8 MovementAction_AcroWheelieHopDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_SOUTH, 1, JUMP_TYPE_LOW); + InitAcroWheelieJump(objectEvent, sprite, DIR_SOUTH, JUMP_DISTANCE_NORMAL, JUMP_TYPE_LOW); return MovementAction_AcroWheelieHopDown_Step1(objectEvent, sprite); } @@ -6998,7 +6907,7 @@ bool8 MovementAction_AcroWheelieHopDown_Step1(struct ObjectEvent *objectEvent, s bool8 MovementAction_AcroWheelieHopUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_NORTH, 1, JUMP_TYPE_LOW); + InitAcroWheelieJump(objectEvent, sprite, DIR_NORTH, JUMP_DISTANCE_NORMAL, JUMP_TYPE_LOW); return MovementAction_AcroWheelieHopUp_Step1(objectEvent, sprite); } @@ -7015,7 +6924,7 @@ bool8 MovementAction_AcroWheelieHopUp_Step1(struct ObjectEvent *objectEvent, str bool8 MovementAction_AcroWheelieHopLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_WEST, 1, JUMP_TYPE_LOW); + InitAcroWheelieJump(objectEvent, sprite, DIR_WEST, JUMP_DISTANCE_NORMAL, JUMP_TYPE_LOW); return MovementAction_AcroWheelieHopLeft_Step1(objectEvent, sprite); } @@ -7032,7 +6941,7 @@ bool8 MovementAction_AcroWheelieHopLeft_Step1(struct ObjectEvent *objectEvent, s bool8 MovementAction_AcroWheelieHopRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_EAST, 1, JUMP_TYPE_LOW); + InitAcroWheelieJump(objectEvent, sprite, DIR_EAST, JUMP_DISTANCE_NORMAL, JUMP_TYPE_LOW); return MovementAction_AcroWheelieHopRight_Step1(objectEvent, sprite); } @@ -7049,7 +6958,7 @@ bool8 MovementAction_AcroWheelieHopRight_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieJumpDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_SOUTH, 2, JUMP_TYPE_HIGH); + InitAcroWheelieJump(objectEvent, sprite, DIR_SOUTH, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_AcroWheelieJumpDown_Step1(objectEvent, sprite); } @@ -7066,7 +6975,7 @@ bool8 MovementAction_AcroWheelieJumpDown_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieJumpUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_NORTH, 2, JUMP_TYPE_HIGH); + InitAcroWheelieJump(objectEvent, sprite, DIR_NORTH, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_AcroWheelieJumpUp_Step1(objectEvent, sprite); } @@ -7083,7 +6992,7 @@ bool8 MovementAction_AcroWheelieJumpUp_Step1(struct ObjectEvent *objectEvent, st bool8 MovementAction_AcroWheelieJumpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_WEST, 2, JUMP_TYPE_HIGH); + InitAcroWheelieJump(objectEvent, sprite, DIR_WEST, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_AcroWheelieJumpLeft_Step1(objectEvent, sprite); } @@ -7100,7 +7009,7 @@ bool8 MovementAction_AcroWheelieJumpLeft_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieJumpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitAcroWheelieJump(objectEvent, sprite, DIR_EAST, 2, JUMP_TYPE_HIGH); + InitAcroWheelieJump(objectEvent, sprite, DIR_EAST, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_AcroWheelieJumpRight_Step1(objectEvent, sprite); } @@ -7391,9 +7300,7 @@ bool8 MovementAction_PauseSpriteAnim(struct ObjectEvent *objectEvent, struct Spr static void UpdateObjectEventSpriteAnimPause(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (objectEvent->disableAnim) - { sprite->animPaused = TRUE; - } } static void TryEnableObjectEventAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite) @@ -7497,7 +7404,7 @@ static void ObjectEventUpdateMetatileBehaviors(struct ObjectEvent *objEvent) static void GetGroundEffectFlags_Reflection(struct ObjectEvent *objEvent, u32 *flags) { - u32 reflectionFlags[NUM_REFLECTION_TYPES - 1] = { + u32 reflectionFlags[NUM_REFLECTION_TYPES - 1] = { [REFL_TYPE_ICE - 1] = GROUND_EFFECT_FLAG_ICE_REFLECTION, [REFL_TYPE_WATER - 1] = GROUND_EFFECT_FLAG_WATER_REFLECTION }; @@ -7544,14 +7451,10 @@ static void GetGroundEffectFlags_LongGrassOnBeginStep(struct ObjectEvent *objEve static void GetGroundEffectFlags_Tracks(struct ObjectEvent *objEvent, u32 *flags) { if (MetatileBehavior_IsDeepSand(objEvent->previousMetatileBehavior)) - { *flags |= GROUND_EFFECT_FLAG_DEEP_SAND; - } else if (MetatileBehavior_IsSandOrDeepSand(objEvent->previousMetatileBehavior) || MetatileBehavior_IsFootprints(objEvent->previousMetatileBehavior)) - { *flags |= GROUND_EFFECT_FLAG_SAND; - } } static void GetGroundEffectFlags_SandHeap(struct ObjectEvent *objEvent, u32 *flags) @@ -7561,14 +7464,14 @@ static void GetGroundEffectFlags_SandHeap(struct ObjectEvent *objEvent, u32 *fla { if (!objEvent->inSandPile) { - objEvent->inSandPile = 0; - objEvent->inSandPile = 1; + objEvent->inSandPile = FALSE; + objEvent->inSandPile = TRUE; *flags |= GROUND_EFFECT_FLAG_SAND_PILE; } } else { - objEvent->inSandPile = 0; + objEvent->inSandPile = FALSE; } } @@ -7581,14 +7484,14 @@ static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent *objEven { if (!objEvent->inShallowFlowingWater) { - objEvent->inShallowFlowingWater = 0; - objEvent->inShallowFlowingWater = 1; + objEvent->inShallowFlowingWater = FALSE; + objEvent->inShallowFlowingWater = TRUE; *flags |= GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER; } } else { - objEvent->inShallowFlowingWater = 0; + objEvent->inShallowFlowingWater = FALSE; } } @@ -7596,9 +7499,7 @@ static void GetGroundEffectFlags_Puddle(struct ObjectEvent *objEvent, u32 *flags { if (MetatileBehavior_IsPuddle(objEvent->currentMetatileBehavior) && MetatileBehavior_IsPuddle(objEvent->previousMetatileBehavior)) - { *flags |= GROUND_EFFECT_FLAG_PUDDLE; - } } static void GetGroundEffectFlags_Ripple(struct ObjectEvent *objEvent, u32 *flags) @@ -7614,14 +7515,14 @@ static void GetGroundEffectFlags_ShortGrass(struct ObjectEvent *objEvent, u32 *f { if (!objEvent->inShortGrass) { - objEvent->inShortGrass = 0; - objEvent->inShortGrass = 1; + objEvent->inShortGrass = FALSE; + objEvent->inShortGrass = TRUE; *flags |= GROUND_EFFECT_FLAG_SHORT_GRASS; } } else { - objEvent->inShortGrass = 0; + objEvent->inShortGrass = FALSE; } } @@ -7632,14 +7533,14 @@ static void GetGroundEffectFlags_HotSprings(struct ObjectEvent *objEvent, u32 *f { if (!objEvent->inHotSprings) { - objEvent->inHotSprings = 0; - objEvent->inHotSprings = 1; + objEvent->inHotSprings = FALSE; + objEvent->inHotSprings = TRUE; *flags |= GROUND_EFFECT_FLAG_HOT_SPRINGS; } } else { - objEvent->inHotSprings = 0; + objEvent->inHotSprings = FALSE; } } @@ -7715,7 +7616,7 @@ static u8 ObjectEventGetNearbyReflectionType(struct ObjectEvent *objEvent) RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x - j, objEvent->previousCoords.y + one + i) } } - + return REFL_TYPE_NONE; } @@ -7770,23 +7671,23 @@ static void SetObjectEventSpriteOamTableForLongGrass(struct ObjectEvent *objEven sprite->subspriteTableNum = 4; - if (ZCoordToPriority(objEvent->previousElevation) == 1) + if (ElevationToPriority(objEvent->previousElevation) == 1) sprite->subspriteTableNum = 5; } -bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y) +static bool8 IsElevationMismatchAt(u8 elevation, s16 x, s16 y) { - u8 mapZ; + u8 mapElevation; - if (z == 0) + if (elevation == 0) return FALSE; - mapZ = MapGridGetZCoordAt(x, y); + mapElevation = MapGridGetElevationAt(x, y); - if (mapZ == 0 || mapZ == 15) + if (mapElevation == 0 || mapElevation == 15) return FALSE; - if (mapZ != z) + if (mapElevation != elevation) return TRUE; return FALSE; @@ -7804,43 +7705,43 @@ static const u8 sElevationToSubspriteTableNum[] = { 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1, }; -void UpdateObjectEventZCoordAndPriority(struct ObjectEvent *objEvent, struct Sprite *sprite) +static void UpdateObjectEventElevationAndPriority(struct ObjectEvent *objEvent, struct Sprite *sprite) { if (objEvent->fixedPriority) return; - ObjectEventUpdateZCoord(objEvent); + ObjectEventUpdateElevation(objEvent); sprite->subspriteTableNum = sElevationToSubspriteTableNum[objEvent->previousElevation]; sprite->oam.priority = sElevationToPriority[objEvent->previousElevation]; } -static void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z) +static void InitObjectPriorityByElevation(struct Sprite *sprite, u8 elevation) { - sprite->subspriteTableNum = sElevationToSubspriteTableNum[z]; - sprite->oam.priority = sElevationToPriority[z]; + sprite->subspriteTableNum = sElevationToSubspriteTableNum[elevation]; + sprite->oam.priority = sElevationToPriority[elevation]; } -u8 ZCoordToPriority(u8 z) +u8 ElevationToPriority(u8 elevation) { - return sElevationToPriority[z]; + return sElevationToPriority[elevation]; } -void ObjectEventUpdateZCoord(struct ObjectEvent *objEvent) +void ObjectEventUpdateElevation(struct ObjectEvent *objEvent) { - u8 z = MapGridGetZCoordAt(objEvent->currentCoords.x, objEvent->currentCoords.y); - u8 z2 = MapGridGetZCoordAt(objEvent->previousCoords.x, objEvent->previousCoords.y); + u8 curElevation = MapGridGetElevationAt(objEvent->currentCoords.x, objEvent->currentCoords.y); + u8 prevElevation = MapGridGetElevationAt(objEvent->previousCoords.x, objEvent->previousCoords.y); - if (z == 0xF || z2 == 0xF) + if (curElevation == 15 || prevElevation == 15) return; - objEvent->currentElevation = z; + objEvent->currentElevation = curElevation; - if (z != 0 && z != 0xF) - objEvent->previousElevation = z; + if (curElevation != 0 && curElevation != 15) + objEvent->previousElevation = curElevation; } -void SetObjectSubpriorityByZCoord(u8 elevation, struct Sprite *sprite, u8 subpriority) +void SetObjectSubpriorityByElevation(u8 elevation, struct Sprite *sprite, u8 subpriority) { s32 tmp = sprite->centerToCornerVecY; u32 tmpa = *(u16 *)&sprite->y; @@ -7855,10 +7756,10 @@ static void ObjectEventUpdateSubpriority(struct ObjectEvent *objEvent, struct Sp if (objEvent->fixedPriority) return; - SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1); + SetObjectSubpriorityByElevation(objEvent->previousElevation, sprite, 1); } -bool8 AreZCoordsCompatible(u8 a, u8 b) +static bool8 AreElevationsCompatible(u8 a, u8 b) { if (a == 0 || b == 0) return TRUE; @@ -7936,29 +7837,29 @@ void GroundEffect_FlowingWater(struct ObjectEvent *objEvent, struct Sprite *spri StartFieldEffectForObjectEvent(FLDEFF_FEET_IN_FLOWING_WATER, objEvent); } -static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) = { - DoTracksGroundEffect_None, - DoTracksGroundEffect_Footprints, - DoTracksGroundEffect_BikeTireTracks, +static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) = { + [TRACKS_NONE] = DoTracksGroundEffect_None, + [TRACKS_FOOT] = DoTracksGroundEffect_Footprints, + [TRACKS_BIKE_TIRE] = DoTracksGroundEffect_BikeTireTracks, }; void GroundEffect_SandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite) { const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId); - sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 0); + sGroundEffectTracksFuncs[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, 1); + sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, TRUE); } -static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) +static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) { } -static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) +static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) { // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) u16 sandFootprints_FieldEffectData[2] = { @@ -7971,10 +7872,10 @@ static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct gFieldEffectArguments[2] = 149; gFieldEffectArguments[3] = 2; gFieldEffectArguments[4] = objEvent->facingDirection; - FieldEffectStart(sandFootprints_FieldEffectData[a]); + FieldEffectStart(sandFootprints_FieldEffectData[isDeepSand]); } -static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) +static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) { // Specifies which bike track shape to show next. // For example, when the bike turns from up to right, it will show @@ -8154,7 +8055,7 @@ static void DoGroundEffects_OnSpawn(struct ObjectEvent *objEvent, struct Sprite if (objEvent->triggerGroundEffectsOnMove) { flags = 0; - UpdateObjectEventZCoordAndPriority(objEvent, sprite); + UpdateObjectEventElevationAndPriority(objEvent, sprite); GetAllGroundEffectFlags_OnSpawn(objEvent, &flags); SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite); DoFlaggedGroundEffects(objEvent, sprite, flags); @@ -8170,7 +8071,7 @@ static void DoGroundEffects_OnBeginStep(struct ObjectEvent *objEvent, struct Spr if (objEvent->triggerGroundEffectsOnMove) { flags = 0; - UpdateObjectEventZCoordAndPriority(objEvent, sprite); + UpdateObjectEventElevationAndPriority(objEvent, sprite); GetAllGroundEffectFlags_OnBeginStep(objEvent, &flags); SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite); filters_out_some_ground_effects(objEvent, &flags); @@ -8187,7 +8088,7 @@ static void DoGroundEffects_OnFinishStep(struct ObjectEvent *objEvent, struct Sp if (objEvent->triggerGroundEffectsOnStop) { flags = 0; - UpdateObjectEventZCoordAndPriority(objEvent, sprite); + UpdateObjectEventElevationAndPriority(objEvent, sprite); GetAllGroundEffectFlags_OnFinishStep(objEvent, &flags); SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite); FilterOutStepOnPuddleGroundEffectIfJumping(objEvent, &flags); @@ -8205,11 +8106,11 @@ bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent) } else { - objectEvent->frozen = 1; + objectEvent->frozen = TRUE; objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused; objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused; - gSprites[objectEvent->spriteId].animPaused = 1; - gSprites[objectEvent->spriteId].affineAnimPaused = 1; + gSprites[objectEvent->spriteId].animPaused = TRUE; + gSprites[objectEvent->spriteId].affineAnimPaused = TRUE; return FALSE; } } @@ -8278,6 +8179,7 @@ static void Step8(struct Sprite *sprite, u8 dir) sprite->y += 8 * (u16) sDirectionToVectors[dir].y; } +#define sSpeed data[4] #define sTimer data[5] static void SetSpriteDataForNormalStep(struct Sprite *sprite, u8 direction, u8 speed) @@ -8341,15 +8243,19 @@ static const SpriteStepFunc sStep8Funcs[] = { }; static const SpriteStepFunc *const sNpcStepFuncTables[] = { - sStep1Funcs, - sStep2Funcs, - sStep3Funcs, - sStep4Funcs, - sStep8Funcs, + [MOVE_SPEED_NORMAL] = sStep1Funcs, + [MOVE_SPEED_FAST_1] = sStep2Funcs, + [MOVE_SPEED_FAST_2] = sStep3Funcs, + [MOVE_SPEED_FASTER] = sStep4Funcs, + [MOVE_SPEED_FASTEST] = sStep8Funcs, }; static const s16 sStepTimes[] = { - 16, 8, 6, 4, 2 + [MOVE_SPEED_NORMAL] = ARRAY_COUNT(sStep1Funcs), + [MOVE_SPEED_FAST_1] = ARRAY_COUNT(sStep2Funcs), + [MOVE_SPEED_FAST_2] = ARRAY_COUNT(sStep3Funcs), + [MOVE_SPEED_FASTER] = ARRAY_COUNT(sStep4Funcs), + [MOVE_SPEED_FASTEST] = ARRAY_COUNT(sStep8Funcs), }; static bool8 NpcTakeStep(struct Sprite *sprite) @@ -8367,6 +8273,7 @@ static bool8 NpcTakeStep(struct Sprite *sprite) return TRUE; } +#undef sSpeed #undef sTimer #define sTimer data[4] @@ -8501,34 +8408,43 @@ static s16 GetJumpY(s16 i, u8 type) return sJumpYTable[type][i]; } +#define sDistance data[4] #define sJumpType data[5] #define sTimer data[6] -static void SetJumpSpriteData(struct Sprite *sprite, u8 direction, u8 speed, u8 type) +static void SetJumpSpriteData(struct Sprite *sprite, u8 direction, u8 distance, u8 type) { sprite->sDirection = direction; - sprite->sSpeed = speed; + sprite->sDistance = distance; sprite->sJumpType = type; sprite->sTimer = 0; } static u8 DoJumpSpriteMovement(struct Sprite *sprite) { - s16 speedToTime[] = {16, 16, 32}; - u8 speedToShift[] = {0, 0, 1}; + s16 distanceToTime[] = { + [JUMP_DISTANCE_IN_PLACE] = 16, + [JUMP_DISTANCE_NORMAL] = 16, + [JUMP_DISTANCE_FAR] = 32, + }; + u8 distanceToShift[] = { + [JUMP_DISTANCE_IN_PLACE] = 0, + [JUMP_DISTANCE_NORMAL] = 0, + [JUMP_DISTANCE_FAR] = 1, + }; u8 result = 0; - if (sprite->sSpeed) + if (sprite->sDistance != JUMP_DISTANCE_IN_PLACE) Step1(sprite, sprite->sDirection); - sprite->y2 = GetJumpY(sprite->sTimer >> speedToShift[sprite->sSpeed], sprite->sJumpType); + sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sDistance], sprite->sJumpType); sprite->sTimer++; - if (sprite->sTimer == speedToTime[sprite->sSpeed] >> 1) + if (sprite->sTimer == distanceToTime[sprite->sDistance] >> 1) result = JUMP_HALFWAY; - if (sprite->sTimer >= speedToTime[sprite->sSpeed]) + if (sprite->sTimer >= distanceToTime[sprite->sDistance]) { sprite->y2 = 0; result = JUMP_FINISHED; @@ -8539,21 +8455,29 @@ static u8 DoJumpSpriteMovement(struct Sprite *sprite) static u8 DoJumpSpecialSpriteMovement(struct Sprite *sprite) { - s16 speedToTime[] = {32, 32, 64}; - u8 speedToShift[] = {1, 1, 2}; + s16 distanceToTime[] = { + [JUMP_DISTANCE_IN_PLACE] = 32, + [JUMP_DISTANCE_NORMAL] = 32, + [JUMP_DISTANCE_FAR] = 64, + }; + u8 distanceToShift[] = { + [JUMP_DISTANCE_IN_PLACE] = 1, + [JUMP_DISTANCE_NORMAL] = 1, + [JUMP_DISTANCE_FAR] = 2, + }; u8 result = 0; - if (sprite->sSpeed && !(sprite->sTimer & 1)) + if (sprite->sDistance != JUMP_DISTANCE_IN_PLACE && !(sprite->sTimer & 1)) Step1(sprite, sprite->sDirection); - sprite->y2 = GetJumpY(sprite->sTimer >> speedToShift[sprite->sSpeed], sprite->sJumpType); + sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sDistance], sprite->sJumpType); sprite->sTimer++; - if (sprite->sTimer == speedToTime[sprite->sSpeed] >> 1) + if (sprite->sTimer == distanceToTime[sprite->sDistance] >> 1) result = JUMP_HALFWAY; - if (sprite->sTimer >= speedToTime[sprite->sSpeed]) + if (sprite->sTimer >= distanceToTime[sprite->sDistance]) { sprite->y2 = 0; result = JUMP_FINISHED; @@ -8562,7 +8486,7 @@ static u8 DoJumpSpecialSpriteMovement(struct Sprite *sprite) return result; } -#undef sSpeed +#undef sDistance #undef sJumpType #undef sTimer @@ -8625,50 +8549,50 @@ void UpdateObjectEventSpriteInvisibility(struct Sprite *sprite, bool8 invisible) #define sAnimNum data[3] #define sAnimState data[4] -static void UpdateObjectEventSprite(struct Sprite *sprite) +static void SpriteCB_VirtualObject(struct Sprite *sprite) { - UpdateObjectEventSpritePosition(sprite); - SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1); + VirtualObject_UpdateAnim(sprite); + SetObjectSubpriorityByElevation(sprite->sVirtualObjElev, sprite, 1); UpdateObjectEventSpriteInvisibility(sprite, sprite->sInvisible); } // Unused -static void DestroyObjectEventSprites(void) +static void DestroyVirtualObjects(void) { int i; for (i = 0; i < MAX_SPRITES; i++) { struct Sprite *sprite = &gSprites[i]; - if(sprite->inUse && sprite->callback == UpdateObjectEventSprite) + if(sprite->inUse && sprite->callback == SpriteCB_VirtualObject) DestroySprite(sprite); } } -static int GetObjectEventSpriteId(u8 objectEventId) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end. +static int GetVirtualObjectSpriteId(u8 virtualObjId) { int i; for (i = 0; i < MAX_SPRITES; i++) { struct Sprite *sprite = &gSprites[i]; - if (sprite->inUse && sprite->callback == UpdateObjectEventSprite && (u8)sprite->sObjEventId == objectEventId) + if (sprite->inUse && sprite->callback == SpriteCB_VirtualObject && (u8)sprite->sVirtualObjId == virtualObjId) return i; } return MAX_SPRITES; } -void TurnObjectEventSprite(u8 objectEventId, u8 direction) +void TurnVirtualObject(u8 virtualObjId, u8 direction) { - u8 spriteId = GetObjectEventSpriteId(objectEventId); + u8 spriteId = GetVirtualObjectSpriteId(virtualObjId); if (spriteId != MAX_SPRITES) StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(direction)); } -void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId) +void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId) { - int spriteId = GetObjectEventSpriteId(objectEventId); + int spriteId = GetVirtualObjectSpriteId(virtualObjId); if (spriteId != MAX_SPRITES) { @@ -8696,9 +8620,9 @@ void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId) } } -void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible) +void SetVirtualObjectInvisibility(u8 virtualObjId, bool32 invisible) { - u8 spriteId = GetObjectEventSpriteId(objectEventId); + u8 spriteId = GetVirtualObjectSpriteId(virtualObjId); if (spriteId == MAX_SPRITES) return; @@ -8709,9 +8633,9 @@ void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible) gSprites[spriteId].sInvisible = FALSE; } -bool32 IsObjectEventSpriteInvisible(u8 objectEventId) +bool32 IsVirtualObjectInvisible(u8 virtualObjId) { - u8 spriteId = GetObjectEventSpriteId(objectEventId); + u8 spriteId = GetVirtualObjectSpriteId(virtualObjId); if (spriteId == MAX_SPRITES) return FALSE; @@ -8719,9 +8643,9 @@ bool32 IsObjectEventSpriteInvisible(u8 objectEventId) return (gSprites[spriteId].sInvisible == TRUE); } -void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum) +void SetVirtualObjectSpriteAnim(u8 virtualObjId, u8 animNum) { - u8 spriteId = GetObjectEventSpriteId(objectEventId); + u8 spriteId = GetVirtualObjectSpriteId(virtualObjId); if (spriteId != MAX_SPRITES) { @@ -8734,18 +8658,18 @@ static void MoveUnionRoomObjectUp(struct Sprite *sprite) { switch(sprite->sAnimState) { - case 0: + case 0: + sprite->y2 = 0; + sprite->sAnimState++; + case 1: + sprite->y2 -= 8; + if (sprite->y2 == -DISPLAY_HEIGHT) + { sprite->y2 = 0; - sprite->sAnimState++; - case 1: - sprite->y2 -= 8; - if (sprite->y2 == -DISPLAY_HEIGHT) - { - sprite->y2 = 0; - sprite->sInvisible = TRUE; - sprite->sAnimNum = 0; - sprite->sAnimState = 0; - } + sprite->sInvisible = TRUE; + sprite->sAnimNum = 0; + sprite->sAnimState = 0; + } } } @@ -8753,40 +8677,40 @@ static void MoveUnionRoomObjectDown(struct Sprite *sprite) { switch(sprite->sAnimState) { - case 0: - sprite->y2 = -DISPLAY_HEIGHT; - sprite->sAnimState++; - case 1: - sprite->y2 += 8; - if(sprite->y2 == 0) - { - sprite->sAnimNum = 0; - sprite->sAnimState = 0; - } + case 0: + sprite->y2 = -DISPLAY_HEIGHT; + sprite->sAnimState++; + case 1: + sprite->y2 += 8; + if(sprite->y2 == 0) + { + sprite->sAnimNum = 0; + sprite->sAnimState = 0; + } } } -static void UpdateObjectEventSpritePosition(struct Sprite *sprite) +static void VirtualObject_UpdateAnim(struct Sprite *sprite) { switch(sprite->sAnimNum) { - case UNION_ROOM_SPAWN_IN: - MoveUnionRoomObjectDown(sprite); - break; - case UNION_ROOM_SPAWN_OUT: - MoveUnionRoomObjectUp(sprite); - break; - case 0: - break; - default: - sprite->sAnimNum = 0; - break; + case UNION_ROOM_SPAWN_IN: + MoveUnionRoomObjectDown(sprite); + break; + case UNION_ROOM_SPAWN_OUT: + MoveUnionRoomObjectUp(sprite); + break; + case 0: + break; + default: + sprite->sAnimNum = 0; + break; } } -bool32 IsObjectEventSpriteAnimating(u8 objectEventId) +bool32 IsVirtualObjectAnimating(u8 virtualObjId) { - u8 spriteId = GetObjectEventSpriteId(objectEventId); + u8 spriteId = GetVirtualObjectSpriteId(virtualObjId); if (spriteId == MAX_SPRITES) return FALSE; @@ -8822,13 +8746,13 @@ static void DoRippleFieldEffect(struct ObjectEvent *objectEvent, struct Sprite * FieldEffectStart(FLDEFF_RIPPLE); } -u8 (*const gMovementActionFuncs_StoreAndLockAnim[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_StoreAndLockAnim_Step0, +u8 (*const gMovementActionFuncs_LockAnim[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_LockAnim_Step0, MovementAction_Finish, }; -u8 (*const gMovementActionFuncs_FreeAndUnlockAnim[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_FreeAndUnlockAnim_Step0, +u8 (*const gMovementActionFuncs_UnlockAnim[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_UnlockAnim_Step0, MovementAction_Finish, }; @@ -8844,36 +8768,36 @@ u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite * MovementAction_Fly_Finish, }; -u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +u8 MovementAction_LockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { bool32 ableToStore = FALSE; if (sLockedAnimObjectEvents == NULL) { sLockedAnimObjectEvents = AllocZeroed(sizeof(struct LockedAnimObjectEvents)); - sLockedAnimObjectEvents->objectEventIds[0] = objectEvent->localId; + sLockedAnimObjectEvents->localIds[0] = objectEvent->localId; sLockedAnimObjectEvents->count = 1; ableToStore = TRUE; } else { u8 i; - u8 firstFreeSlot; - bool32 found; - for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++) + u8 firstFreeSlot = OBJECT_EVENTS_COUNT; + bool32 found = FALSE; + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { - if (firstFreeSlot == 16 && sLockedAnimObjectEvents->objectEventIds[i] == 0) + if (firstFreeSlot == OBJECT_EVENTS_COUNT && sLockedAnimObjectEvents->localIds[i] == 0) firstFreeSlot = i; - if (sLockedAnimObjectEvents->objectEventIds[i] == objectEvent->localId) + if (sLockedAnimObjectEvents->localIds[i] == objectEvent->localId) { found = TRUE; break; } } - if (!found && firstFreeSlot != 16) + if (!found && firstFreeSlot != OBJECT_EVENTS_COUNT) { - sLockedAnimObjectEvents->objectEventIds[firstFreeSlot] = objectEvent->localId; + sLockedAnimObjectEvents->localIds[firstFreeSlot] = objectEvent->localId; sLockedAnimObjectEvents->count++; ableToStore = TRUE; } @@ -8889,7 +8813,7 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct return TRUE; } -u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +u8 MovementAction_UnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { bool32 ableToStore; u8 index; @@ -8899,9 +8823,9 @@ u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struc { ableToStore = FALSE; index = FindLockedObjectEventIndex(objectEvent); - if (index != 16) + if (index != OBJECT_EVENTS_COUNT) { - sLockedAnimObjectEvents->objectEventIds[index] = 0; + sLockedAnimObjectEvents->localIds[index] = 0; sLockedAnimObjectEvents->count--; ableToStore = TRUE; } @@ -8924,7 +8848,7 @@ u8 FindLockedObjectEventIndex(struct ObjectEvent *objectEvent) for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { - if (sLockedAnimObjectEvents->objectEventIds[i] == objectEvent->localId) + if (sLockedAnimObjectEvents->localIds[i] == objectEvent->localId) return i; } return OBJECT_EVENTS_COUNT; diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c index 50098743db..a86f16201f 100644 --- a/src/evolution_graphics.c +++ b/src/evolution_graphics.c @@ -10,7 +10,7 @@ #include "palette.h" #include "constants/rgb.h" -static void SpriteCB_Sparkle_Dummy(struct Sprite* sprite); +static void SpriteCB_Sparkle_Dummy(struct Sprite *sprite); static void Task_Sparkles_SpiralUpward_Init(u8 taskId); static void Task_Sparkles_SpiralUpward(u8 taskId); @@ -58,7 +58,7 @@ static const struct OamData sOamData_EvoSparkle = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -92,11 +92,22 @@ static const struct SpriteTemplate sEvoSparkleSpriteTemplate = .callback = SpriteCB_Sparkle_Dummy }; -static const s16 sEvoSparkleMatrices[] = +static const u16 sEvoSparkleMatrices[] = { - 0x3C0, 0x380, 0x340, 0x300, 0x2C0, 0x280, 0x240, 0x200, 0x1C0, - 0x180, 0x140, 0x100, -4, 0x10, -3, 0x30, -2, 0x50, - -1, 0x70, 0x1, 0x70, 0x2, 0x50, 0x3, 0x30, 0x4, 0x10 + 0x3C0, 0x380, 0x340, 0x300, 0x2C0, 0x280, + 0x240, 0x200, 0x1C0, 0x180, 0x140, 0x100 +}; + +static const s16 sUnused[] = +{ + -4, 0x10, + -3, 0x30, + -2, 0x50, + -1, 0x70, + 1, 0x70, + 2, 0x50, + 3, 0x30, + 4, 0x10 }; static void SpriteCB_Sparkle_Dummy(struct Sprite *sprite) @@ -107,30 +118,33 @@ static void SpriteCB_Sparkle_Dummy(struct Sprite *sprite) static void SetEvoSparklesMatrices(void) { u16 i; - for (i = 0; i < 12; i++) - { + for (i = 0; i < ARRAY_COUNT(sEvoSparkleMatrices); i++) SetOamMatrix(20 + i, sEvoSparkleMatrices[i], 0, 0, sEvoSparkleMatrices[i]); - } } -static void SpriteCB_Sparkle_SpiralUpward(struct Sprite* sprite) +#define sSpeed data[3] +#define sAmplitude data[5] +#define sTrigIdx data[6] +#define sTimer data[7] + +static void SpriteCB_Sparkle_SpiralUpward(struct Sprite *sprite) { if (sprite->y > 8) { u8 matrixNum; - sprite->y = 88 - (sprite->data[7] * sprite->data[7]) / 80; - sprite->y2 = Sin((u8)(sprite->data[6]), sprite->data[5]) / 4; - sprite->x2 = Cos((u8)(sprite->data[6]), sprite->data[5]); - sprite->data[6] += 4; - if (sprite->data[7] & 1) - sprite->data[5]--; - sprite->data[7]++; + sprite->y = 88 - (sprite->sTimer * sprite->sTimer) / 80; + sprite->y2 = Sin((u8)sprite->sTrigIdx, sprite->sAmplitude) / 4; + sprite->x2 = Cos((u8)sprite->sTrigIdx, sprite->sAmplitude); + sprite->sTrigIdx += 4; + if (sprite->sTimer & 1) + sprite->sAmplitude--; + sprite->sTimer++; if (sprite->y2 > 0) sprite->subpriority = 1; else sprite->subpriority = 20; - matrixNum = sprite->data[5] / 4 + 20; + matrixNum = sprite->sAmplitude / 4 + 20; if (matrixNum > 31) matrixNum = 31; sprite->oam.matrixNum = matrixNum; @@ -139,103 +153,103 @@ static void SpriteCB_Sparkle_SpiralUpward(struct Sprite* sprite) DestroySprite(sprite); } -static void CreateSparkle_SpiralUpward(u8 arg0) +static void CreateSparkle_SpiralUpward(u8 trigIdx) { - u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 88, 0); - if (spriteID != MAX_SPRITES) + u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 88, 0); + if (spriteId != MAX_SPRITES) { - gSprites[spriteID].data[5] = 48; - gSprites[spriteID].data[6] = arg0; - gSprites[spriteID].data[7] = 0; - gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteID].oam.matrixNum = 31; - gSprites[spriteID].callback = SpriteCB_Sparkle_SpiralUpward; + gSprites[spriteId].sAmplitude = 48; + gSprites[spriteId].sTrigIdx = trigIdx; + gSprites[spriteId].sTimer = 0; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 31; + gSprites[spriteId].callback = SpriteCB_Sparkle_SpiralUpward; } } -static void SpriteCB_Sparkle_ArcDown(struct Sprite* sprite) +static void SpriteCB_Sparkle_ArcDown(struct Sprite *sprite) { if (sprite->y < 88) { - sprite->y = 8 + (sprite->data[7] * sprite->data[7]) / 5; - sprite->y2 = Sin((u8)(sprite->data[6]), sprite->data[5]) / 4; - sprite->x2 = Cos((u8)(sprite->data[6]), sprite->data[5]); - sprite->data[5] = 8 + Sin((u8)(sprite->data[7] * 4), 40); - sprite->data[7]++; + sprite->y = 8 + (sprite->sTimer * sprite->sTimer) / 5; + sprite->y2 = Sin((u8)sprite->sTrigIdx, sprite->sAmplitude) / 4; + sprite->x2 = Cos((u8)sprite->sTrigIdx, sprite->sAmplitude); + sprite->sAmplitude = 8 + Sin((u8)(sprite->sTimer * 4), 40); + sprite->sTimer++; } else DestroySprite(sprite); } -static void CreateSparkle_ArcDown(u8 arg0) +static void CreateSparkle_ArcDown(u8 trigIdx) { - u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 8, 0); - if (spriteID != MAX_SPRITES) + u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 8, 0); + if (spriteId != MAX_SPRITES) { - gSprites[spriteID].data[5] = 8; - gSprites[spriteID].data[6] = arg0; - gSprites[spriteID].data[7] = 0; - gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteID].oam.matrixNum = 25; - gSprites[spriteID].subpriority = 1; - gSprites[spriteID].callback = SpriteCB_Sparkle_ArcDown; + gSprites[spriteId].sAmplitude = 8; + gSprites[spriteId].sTrigIdx = trigIdx; + gSprites[spriteId].sTimer = 0; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 25; + gSprites[spriteId].subpriority = 1; + gSprites[spriteId].callback = SpriteCB_Sparkle_ArcDown; } } -static void SpriteCB_Sparkle_CircleInward(struct Sprite* sprite) +static void SpriteCB_Sparkle_CircleInward(struct Sprite *sprite) { - if (sprite->data[5] > 8) + if (sprite->sAmplitude > 8) { - sprite->y2 = Sin((u8)(sprite->data[6]), sprite->data[5]); - sprite->x2 = Cos((u8)(sprite->data[6]), sprite->data[5]); - sprite->data[5] -= sprite->data[3]; - sprite->data[6] += 4; + sprite->y2 = Sin((u8)sprite->sTrigIdx, sprite->sAmplitude); + sprite->x2 = Cos((u8)sprite->sTrigIdx, sprite->sAmplitude); + sprite->sAmplitude -= sprite->sSpeed; + sprite->sTrigIdx += 4; } else DestroySprite(sprite); } -static void CreateSparkle_CircleInward(u8 arg0, u8 arg1) +static void CreateSparkle_CircleInward(u8 trigIdx, u8 speed) { - u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0); - if (spriteID != MAX_SPRITES) + u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 56, 0); + if (spriteId != MAX_SPRITES) { - gSprites[spriteID].data[3] = arg1; - gSprites[spriteID].data[5] = 120; - gSprites[spriteID].data[6] = arg0; - gSprites[spriteID].data[7] = 0; - gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteID].oam.matrixNum = 31; - gSprites[spriteID].subpriority = 1; - gSprites[spriteID].callback = SpriteCB_Sparkle_CircleInward; + gSprites[spriteId].sSpeed = speed; + gSprites[spriteId].sAmplitude = 120; + gSprites[spriteId].sTrigIdx = trigIdx; + gSprites[spriteId].sTimer = 0; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 31; + gSprites[spriteId].subpriority = 1; + gSprites[spriteId].callback = SpriteCB_Sparkle_CircleInward; } } -static void SpriteCB_Sparkle_Spray(struct Sprite* sprite) +static void SpriteCB_Sparkle_Spray(struct Sprite *sprite) { - if (!(sprite->data[7] & 3)) + if (!(sprite->sTimer & 3)) sprite->y++; - if (sprite->data[6] < 128) + if (sprite->sTrigIdx < 128) { u8 matrixNum; - sprite->y2 = -Sin((u8)(sprite->data[6]), sprite->data[5]); - sprite->x = 120 + (sprite->data[3] * sprite->data[7]) / 3; - sprite->data[6]++; - matrixNum = 31 - (sprite->data[6] * 12 / 128); - if (sprite->data[6] > 64) + sprite->y2 = -Sin((u8)sprite->sTrigIdx, sprite->sAmplitude); + sprite->x = (DISPLAY_WIDTH / 2) + (sprite->sSpeed * sprite->sTimer) / 3; + sprite->sTrigIdx++; + matrixNum = 31 - (sprite->sTrigIdx * 12 / 128); + if (sprite->sTrigIdx > 64) sprite->subpriority = 1; else { sprite->invisible = FALSE; sprite->subpriority = 20; - if (sprite->data[6] > 112 && sprite->data[6] & 1) + if (sprite->sTrigIdx > 112 && sprite->sTrigIdx & 1) sprite->invisible = TRUE; } if (matrixNum < 20) matrixNum = 20; sprite->oam.matrixNum = matrixNum; - sprite->data[7]++; + sprite->sTimer++; } else DestroySprite(sprite); @@ -243,16 +257,16 @@ static void SpriteCB_Sparkle_Spray(struct Sprite* sprite) static void CreateSparkle_Spray(u8 id) { - u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0); - if (spriteID != MAX_SPRITES) + u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 56, 0); + if (spriteId != MAX_SPRITES) { - gSprites[spriteID].data[3] = 3 - (Random() % 7); - gSprites[spriteID].data[5] = 48 + (Random() & 0x3F); - gSprites[spriteID].data[7] = 0; - gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteID].oam.matrixNum = 31; - gSprites[spriteID].subpriority = 20; - gSprites[spriteID].callback = SpriteCB_Sparkle_Spray; + gSprites[spriteId].sSpeed = 3 - (Random() % 7); + gSprites[spriteId].sAmplitude = 48 + (Random() & 0x3F); + gSprites[spriteId].sTimer = 0; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 31; + gSprites[spriteId].subpriority = 20; + gSprites[spriteId].callback = SpriteCB_Sparkle_Spray; } } @@ -289,7 +303,7 @@ static void Task_Sparkles_SpiralUpward(u8 taskId) { u8 i; for (i = 0; i < 4; i++) - CreateSparkle_SpiralUpward((0x78 & gTasks[taskId].tTimer) * 2 + i * 64); + CreateSparkle_SpiralUpward((gTasks[taskId].tTimer & 120) * 2 + i * 64); } gTasks[taskId].tTimer++; } @@ -478,7 +492,7 @@ static void Task_Sparkles_SprayAndFlashTrade(u8 taskId) #undef tTimer #undef tSpecies -static void SpriteCB_EvolutionMonSprite(struct Sprite* sprite) +static void SpriteCB_EvolutionMonSprite(struct Sprite *sprite) { } @@ -501,12 +515,12 @@ static void SpriteCB_EvolutionMonSprite(struct Sprite* sprite) u8 CycleEvolutionMonSprite(u8 preEvoSpriteId, u8 postEvoSpriteId) { u16 i; - u16 stack[16]; + u16 monPalette[16]; u8 taskId; s32 toDiv; - for (i = 0; i < ARRAY_COUNT(stack); i++) - stack[i] = 0x7FFF; + for (i = 0; i < ARRAY_COUNT(monPalette); i++) + monPalette[i] = RGB_WHITE; taskId = CreateTask(Task_CycleEvolutionMonSprite_Init, 0); gTasks[taskId].tPreEvoSpriteId = preEvoSpriteId; @@ -522,13 +536,13 @@ u8 CycleEvolutionMonSprite(u8 preEvoSpriteId, u8 postEvoSpriteId) gSprites[preEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[preEvoSpriteId].oam.matrixNum = MATRIX_PRE_EVO; gSprites[preEvoSpriteId].invisible = FALSE; - CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[preEvoSpriteId].oam.paletteNum * 16)], 16); + CpuSet(monPalette, &gPlttBufferFaded[0x100 + (gSprites[preEvoSpriteId].oam.paletteNum * 16)], 16); gSprites[postEvoSpriteId].callback = SpriteCB_EvolutionMonSprite; gSprites[postEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[postEvoSpriteId].oam.matrixNum = MATRIX_POST_EVO; gSprites[postEvoSpriteId].invisible = FALSE; - CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[postEvoSpriteId].oam.paletteNum * 16)], 16); + CpuSet(monPalette, &gPlttBufferFaded[0x100 + (gSprites[postEvoSpriteId].oam.paletteNum * 16)], 16); gTasks[taskId].tEvoStopped = FALSE; return taskId; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index d77b98a56a..c9c2641c67 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -83,7 +83,7 @@ static const u8 sText_ShedinjaJapaneseName[] = _("ヌケニン"); // The below table is used by Task_UpdateBgPalette to control the speed at which the bg color updates. // The first two values are indexes into sBgAnim_PalIndexes (indirectly, via sBgAnimPal), and are // the start and end of the range of colors in sBgAnim_PalIndexes it will move through incrementally -// before starting over. It will repeat this cycle x number of times, where x = the 3rd value, +// before starting over. It will repeat this cycle x number of times, where x = the 3rd value, // delaying each increment by y, where y = the 4th value. // Once it has cycled x number of times, it will move to the next array in this table. static const u8 sBgAnim_PaletteControl[][4] = @@ -171,7 +171,7 @@ static void CB2_BeginEvolutionScene(void) static void Task_BeginEvolutionScene(u8 taskId) { - struct Pokemon* mon = NULL; + struct Pokemon *mon = NULL; switch (gTasks[taskId].tState) { case 0: @@ -197,7 +197,7 @@ static void Task_BeginEvolutionScene(u8 taskId) } } -void BeginEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId) +void BeginEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId) { u8 taskId = CreateTask(Task_BeginEvolutionScene, 0); gTasks[taskId].tState = 0; @@ -207,17 +207,17 @@ void BeginEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopE SetMainCallback2(CB2_BeginEvolutionScene); } -void EvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId) +void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId) { u8 name[20]; u16 currSpecies; u32 trainerId, personality; const struct CompressedSpritePalette* pokePal; - u8 ID; + u8 id; SetHBlankCallback(NULL); SetVBlankCallback(NULL); - CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + CpuFill32(0, (void *)(VRAM), VRAM_SIZE); SetGpuReg(REG_OFFSET_MOSAIC, 0); SetGpuReg(REG_OFFSET_WIN0H, 0); @@ -253,51 +253,51 @@ void EvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopEvo, u AllocateMonSpritesGfx(); GetMonData(mon, MON_DATA_NICKNAME, name); - StringCopy10(gStringVar1, name); + StringCopy_Nickname(gStringVar1, name); StringCopy(gStringVar2, gSpeciesNames[postEvoSpecies]); // preEvo sprite currSpecies = GetMonData(mon, MON_DATA_SPECIES); trainerId = GetMonData(mon, MON_DATA_OT_ID); personality = GetMonData(mon, MON_DATA_PERSONALITY); - DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[1], + DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], currSpecies, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(currSpecies, trainerId, personality); LoadCompressedPalette(pokePal->data, 0x110, 0x20); - SetMultiuseSpriteTemplateToPokemon(currSpecies, 1); + SetMultiuseSpriteTemplateToPokemon(currSpecies, B_POSITION_OPPONENT_LEFT); gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; - sEvoStructPtr->preEvoSpriteId = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30); + sEvoStructPtr->preEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30); - gSprites[ID].callback = SpriteCallbackDummy_2; - gSprites[ID].oam.paletteNum = 1; - gSprites[ID].invisible = TRUE; + gSprites[id].callback = SpriteCallbackDummy_2; + gSprites[id].oam.paletteNum = 1; + gSprites[id].invisible = TRUE; // postEvo sprite - DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[3], + DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], postEvoSpecies, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); LoadCompressedPalette(pokePal->data, 0x120, 0x20); - SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 3); + SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_RIGHT); gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; - sEvoStructPtr->postEvoSpriteId = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30); - gSprites[ID].callback = SpriteCallbackDummy_2; - gSprites[ID].oam.paletteNum = 2; - gSprites[ID].invisible = TRUE; + sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30); + gSprites[id].callback = SpriteCallbackDummy_2; + gSprites[id].oam.paletteNum = 2; + gSprites[id].invisible = TRUE; LoadEvoSparkleSpriteAndPal(); - sEvoStructPtr->evoTaskId = ID = CreateTask(Task_EvolutionScene, 0); - gTasks[ID].tState = 0; - gTasks[ID].tPreEvoSpecies = currSpecies; - gTasks[ID].tPostEvoSpecies = postEvoSpecies; - gTasks[ID].tCanStop = canStopEvo; - gTasks[ID].tLearnsFirstMove = TRUE; - gTasks[ID].tEvoWasStopped = FALSE; - gTasks[ID].tPartyId = partyId; + sEvoStructPtr->evoTaskId = id = CreateTask(Task_EvolutionScene, 0); + gTasks[id].tState = 0; + gTasks[id].tPreEvoSpecies = currSpecies; + gTasks[id].tPostEvoSpecies = postEvoSpecies; + gTasks[id].tCanStop = canStopEvo; + gTasks[id].tLearnsFirstMove = TRUE; + gTasks[id].tEvoWasStopped = FALSE; + gTasks[id].tPartyId = partyId; memcpy(&sEvoStructPtr->savedPalette, &gPlttBufferUnfaded[0x20], sizeof(sEvoStructPtr->savedPalette)); @@ -311,11 +311,11 @@ void EvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopEvo, u static void CB2_EvolutionSceneLoadGraphics(void) { - u8 ID; + u8 id; const struct CompressedSpritePalette* pokePal; u16 postEvoSpecies; u32 trainerId, personality; - struct Pokemon* mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId]; + struct Pokemon *mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId]; postEvoSpecies = gTasks[sEvoStructPtr->evoTaskId].tPostEvoSpecies; trainerId = GetMonData(mon, MON_DATA_OT_ID); @@ -323,7 +323,7 @@ static void CB2_EvolutionSceneLoadGraphics(void) SetHBlankCallback(NULL); SetVBlankCallback(NULL); - CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + CpuFill32(0, (void *)(VRAM), VRAM_SIZE); SetGpuReg(REG_OFFSET_MOSAIC, 0); SetGpuReg(REG_OFFSET_WIN0H, 0); @@ -352,19 +352,19 @@ static void CB2_EvolutionSceneLoadGraphics(void) FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; - DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[3], + DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], postEvoSpecies, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); LoadCompressedPalette(pokePal->data, 0x120, 0x20); - SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 3); + SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_RIGHT); gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; - sEvoStructPtr->postEvoSpriteId = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30); + sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30); - gSprites[ID].callback = SpriteCallbackDummy_2; - gSprites[ID].oam.paletteNum = 2; + gSprites[id].callback = SpriteCallbackDummy_2; + gSprites[id].oam.paletteNum = 2; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP); @@ -382,7 +382,7 @@ static void CB2_EvolutionSceneLoadGraphics(void) static void CB2_TradeEvolutionSceneLoadGraphics(void) { - struct Pokemon* mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId]; + struct Pokemon *mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId]; u16 postEvoSpecies = gTasks[sEvoStructPtr->evoTaskId].tPostEvoSpecies; switch (gMain.state) @@ -411,7 +411,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) gMain.state++; break; case 2: - InitTradeBg(); + LoadTradeAnimGfx(); gMain.state++; break; case 3: @@ -424,7 +424,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) const struct CompressedSpritePalette* pokePal; u32 trainerId = GetMonData(mon, MON_DATA_OT_ID); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY); - DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[3], + DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], postEvoSpecies, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); @@ -434,14 +434,14 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) break; case 5: { - u8 ID; + u8 id; - SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 1); + SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_LEFT); gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; - sEvoStructPtr->postEvoSpriteId = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30); + sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30); - gSprites[ID].callback = SpriteCallbackDummy_2; - gSprites[ID].oam.paletteNum = 2; + gSprites[id].callback = SpriteCallbackDummy_2; + gSprites[id].oam.paletteNum = 2; gMain.state++; LinkTradeDrawWindow(); } @@ -452,7 +452,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); } - BlendPalettes(PALETTES_ALL, 0x10, 0); + BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK); gMain.state++; break; case 7: @@ -466,16 +466,16 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) } } -void TradeEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, u8 preEvoSpriteId, u8 partyId) +void TradeEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, u8 preEvoSpriteId, u8 partyId) { u8 name[20]; u16 currSpecies; u32 trainerId, personality; const struct CompressedSpritePalette* pokePal; - u8 ID; + u8 id; GetMonData(mon, MON_DATA_NICKNAME, name); - StringCopy10(gStringVar1, name); + StringCopy_Nickname(gStringVar1, name); StringCopy(gStringVar2, gSpeciesNames[postEvoSpecies]); gAffineAnimsDisabled = TRUE; @@ -488,30 +488,30 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, u8 preEvoSprit sEvoStructPtr = AllocZeroed(sizeof(struct EvoInfo)); sEvoStructPtr->preEvoSpriteId = preEvoSpriteId; - DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[1], + DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], postEvoSpecies, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); LoadCompressedPalette(pokePal->data, 0x120, 0x20); - SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 1); + SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_LEFT); gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; - sEvoStructPtr->postEvoSpriteId = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30); + sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30); - gSprites[ID].callback = SpriteCallbackDummy_2; - gSprites[ID].oam.paletteNum = 2; - gSprites[ID].invisible = TRUE; + gSprites[id].callback = SpriteCallbackDummy_2; + gSprites[id].oam.paletteNum = 2; + gSprites[id].invisible = TRUE; LoadEvoSparkleSpriteAndPal(); - sEvoStructPtr->evoTaskId = ID = CreateTask(Task_TradeEvolutionScene, 0); - gTasks[ID].tState = 0; - gTasks[ID].tPreEvoSpecies = currSpecies; - gTasks[ID].tPostEvoSpecies = postEvoSpecies; - gTasks[ID].tLearnsFirstMove = TRUE; - gTasks[ID].tEvoWasStopped = FALSE; - gTasks[ID].tPartyId = partyId; + sEvoStructPtr->evoTaskId = id = CreateTask(Task_TradeEvolutionScene, 0); + gTasks[id].tState = 0; + gTasks[id].tPreEvoSpecies = currSpecies; + gTasks[id].tPostEvoSpecies = postEvoSpecies; + gTasks[id].tLearnsFirstMove = TRUE; + gTasks[id].tEvoWasStopped = FALSE; + gTasks[id].tPartyId = partyId; gBattle_BG0_X = 0; gBattle_BG0_Y = 0; @@ -522,7 +522,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, u8 preEvoSprit gBattle_BG3_X = 256; gBattle_BG3_Y = 0; - gTextFlags.useAlternateDownArrow = 1; + gTextFlags.useAlternateDownArrow = TRUE; SetVBlankCallback(VBlankCB_TradeEvolutionScene); SetMainCallback2(CB2_TradeEvolutionSceneUpdate); @@ -546,7 +546,7 @@ static void CB2_TradeEvolutionSceneUpdate(void) RunTasks(); } -static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) +static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon) { u32 data = 0; u16 ball = ITEM_POKE_BALL; @@ -554,7 +554,7 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) && (P_SHEDINJA_BALL == GEN_3 || CheckBagHasItem(ball, 1))) { s32 i; - struct Pokemon* shedinja = &gPlayerParty[gPlayerPartyCount]; + struct Pokemon *shedinja = &gPlayerParty[gPlayerPartyCount]; CopyMon(&gPlayerParty[gPlayerPartyCount], mon, sizeof(struct Pokemon)); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, &gEvolutionTable[preEvoSpecies][1].targetSpecies); @@ -640,7 +640,7 @@ enum { static void Task_EvolutionScene(u8 taskId) { u32 var; - struct Pokemon* mon = &gPlayerParty[gTasks[taskId].tPartyId]; + struct Pokemon *mon = &gPlayerParty[gTasks[taskId].tPartyId]; // check if B Button was held, so the evolution gets stopped if (gMain.heldKeys == B_BUTTON @@ -669,7 +669,7 @@ static void Task_EvolutionScene(u8 taskId) if (!gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, gText_PkmnIsEvolving); - BattlePutTextOnWindow(gStringVar4, 0); + BattlePutTextOnWindow(gStringVar4, B_WIN_MSG); gTasks[taskId].tState++; } break; @@ -766,10 +766,10 @@ static void Task_EvolutionScene(u8 taskId) if (IsCryFinished()) { StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved); - BattlePutTextOnWindow(gStringVar4, 0); + BattlePutTextOnWindow(gStringVar4, B_WIN_MSG); PlayBGM(MUS_EVOLVED); gTasks[taskId].tState++; - SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskId].tPostEvoSpecies)); + SetMonData(mon, MON_DATA_SPECIES, (void *)(&gTasks[taskId].tPostEvoSpecies)); CalculateMonStats(mon); EvolutionRenameMon(mon, gTasks[taskId].tPreEvoSpecies, gTasks[taskId].tPostEvoSpecies); GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_SEEN); @@ -780,7 +780,7 @@ static void Task_EvolutionScene(u8 taskId) case EVOSTATE_TRY_LEARN_MOVE: if (!IsTextPrinterActive(0)) { - var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove); + var = MonTryLearningNewMoveEvolution(mon, gTasks[taskId].tLearnsFirstMove); if (var != MOVE_NONE && !gTasks[taskId].tEvoWasStopped) { u8 text[20]; @@ -795,7 +795,7 @@ static void Task_EvolutionScene(u8 taskId) gTasks[taskId].tLearnsFirstMove = FALSE; gTasks[taskId].tLearnMoveState = MVSTATE_INTRO_MSG_1; GetMonData(mon, MON_DATA_NICKNAME, text); - StringCopy10(gBattleTextBuff1, text); + StringCopy_Nickname(gBattleTextBuff1, text); if (var == MON_HAS_MAX_MOVES) gTasks[taskId].tState = EVOSTATE_REPLACE_MOVE; @@ -824,8 +824,7 @@ static void Task_EvolutionScene(u8 taskId) DestroyTask(taskId); FreeMonSpritesGfx(); - Free(sEvoStructPtr); - sEvoStructPtr = NULL; + FREE_AND_SET_NULL(sEvoStructPtr); FreeAllWindowBuffers(); SetMainCallback2(gCB2_AfterEvolution); } @@ -848,12 +847,12 @@ static void Task_EvolutionScene(u8 taskId) case EVOSTATE_CANCEL_MSG: if (EvoScene_IsMonAnimFinished(sEvoStructPtr->preEvoSpriteId)) { - if (gTasks[taskId].tEvoWasStopped) + if (gTasks[taskId].tEvoWasStopped) // FRLG auto cancellation StringExpandPlaceholders(gStringVar4, gText_EllipsisQuestionMark); - else // Fire Red leftover probably + else StringExpandPlaceholders(gStringVar4, gText_PkmnStoppedEvolving); - BattlePutTextOnWindow(gStringVar4, 0); + BattlePutTextOnWindow(gStringVar4, B_WIN_MSG); gTasks[taskId].tEvoWasStopped = TRUE; gTasks[taskId].tState = EVOSTATE_TRY_LEARN_MOVE; } @@ -863,8 +862,8 @@ static void Task_EvolutionScene(u8 taskId) { BufferMoveToLearnIntoBattleTextBuff2(); PlayFanfare(MUS_LEVEL_UP); - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_TABLE_START]); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gTasks[taskId].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskId].tState++; } @@ -881,8 +880,8 @@ static void Task_EvolutionScene(u8 taskId) { // "{mon} is trying to learn {move}" BufferMoveToLearnIntoBattleTextBuff2(); - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_TABLE_START]); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gTasks[taskId].tLearnMoveState++; } break; @@ -890,8 +889,8 @@ static void Task_EvolutionScene(u8 taskId) if (!IsTextPrinterActive(0) && !IsSEPlaying()) { // "But, {mon} can't learn more than four moves" - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_TABLE_START]); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gTasks[taskId].tLearnMoveState++; } break; @@ -899,8 +898,8 @@ static void Task_EvolutionScene(u8 taskId) if (!IsTextPrinterActive(0) && !IsSEPlaying()) { // "Delete a move to make room for {move}?" - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_TABLE_START]); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gTasks[taskId].tLearnMoveYesState = MVSTATE_SHOW_MOVE_SELECT; gTasks[taskId].tLearnMoveNoState = MVSTATE_ASK_CANCEL; gTasks[taskId].tLearnMoveState++; @@ -908,8 +907,8 @@ static void Task_EvolutionScene(u8 taskId) case MVSTATE_PRINT_YES_NO: if (!IsTextPrinterActive(0) && !IsSEPlaying()) { - HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); - BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC); + HandleBattleWindow(YESNOBOX_X_Y, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); gTasks[taskId].tLearnMoveState++; sEvoCursorPos = 0; BattleCreateYesNoCursorAt(0); @@ -937,7 +936,7 @@ static void Task_EvolutionScene(u8 taskId) } if (JOY_NEW(A_BUTTON)) { - HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); PlaySE(SE_SELECT); if (sEvoCursorPos != 0) @@ -956,7 +955,7 @@ static void Task_EvolutionScene(u8 taskId) if (JOY_NEW(B_BUTTON)) { // Equivalent to selecting NO - HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); + HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); PlaySE(SE_SELECT); gTasks[taskId].tLearnMoveState = gTasks[taskId].tLearnMoveNoState; } @@ -987,8 +986,8 @@ static void Task_EvolutionScene(u8 taskId) if (IsHMMove2(move)) { // Can't forget HMs - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_TABLE_START]); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gTasks[taskId].tLearnMoveState = MVSTATE_RETRY_AFTER_HM; } else @@ -1004,36 +1003,36 @@ static void Task_EvolutionScene(u8 taskId) } break; case MVSTATE_FORGET_MSG_1: - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_TABLE_START]); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gTasks[taskId].tLearnMoveState++; break; case MVSTATE_FORGET_MSG_2: if (!IsTextPrinterActive(0) && !IsSEPlaying()) { - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_TABLE_START]); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gTasks[taskId].tLearnMoveState++; } break; case MVSTATE_LEARNED_MOVE: if (!IsTextPrinterActive(0) && !IsSEPlaying()) { - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_TABLE_START]); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gTasks[taskId].tState = EVOSTATE_LEARNED_MOVE; } break; case MVSTATE_ASK_CANCEL: - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_TABLE_START]); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gTasks[taskId].tLearnMoveYesState = MVSTATE_CANCEL; gTasks[taskId].tLearnMoveNoState = MVSTATE_INTRO_MSG_1; gTasks[taskId].tLearnMoveState = MVSTATE_PRINT_YES_NO; break; case MVSTATE_CANCEL: - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]); - BattlePutTextOnWindow(gDisplayedStringBattle, 0); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_TABLE_START]); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gTasks[taskId].tState = EVOSTATE_TRY_LEARN_MOVE; break; case MVSTATE_RETRY_AFTER_HM: @@ -1090,7 +1089,7 @@ enum { static void Task_TradeEvolutionScene(u8 taskId) { u32 var = 0; - struct Pokemon* mon = &gPlayerParty[gTasks[taskId].tPartyId]; + struct Pokemon *mon = &gPlayerParty[gTasks[taskId].tPartyId]; switch (gTasks[taskId].tState) { @@ -1102,7 +1101,7 @@ static void Task_TradeEvolutionScene(u8 taskId) case T_EVOSTATE_INTRO_CRY: if (!IsTextPrinterActive(0)) { - PlayCry1(gTasks[taskId].tPreEvoSpecies, 0); + PlayCry_Normal(gTasks[taskId].tPreEvoSpecies, 0); gTasks[taskId].tState++; } break; @@ -1201,7 +1200,7 @@ static void Task_TradeEvolutionScene(u8 taskId) case T_EVOSTATE_TRY_LEARN_MOVE: if (!IsTextPrinterActive(0) && IsFanfareTaskInactive() == TRUE) { - var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove); + var = MonTryLearningNewMoveEvolution(mon, gTasks[taskId].tLearnsFirstMove); if (var != MOVE_NONE && !gTasks[taskId].tEvoWasStopped) { u8 text[20]; @@ -1210,7 +1209,7 @@ static void Task_TradeEvolutionScene(u8 taskId) gTasks[taskId].tLearnsFirstMove = FALSE; gTasks[taskId].tLearnMoveState = 0; GetMonData(mon, MON_DATA_NICKNAME, text); - StringCopy10(gBattleTextBuff1, text); + StringCopy_Nickname(gBattleTextBuff1, text); if (var == MON_HAS_MAX_MOVES) gTasks[taskId].tState = T_EVOSTATE_REPLACE_MOVE; @@ -1231,9 +1230,8 @@ static void Task_TradeEvolutionScene(u8 taskId) if (!IsTextPrinterActive(0)) { DestroyTask(taskId); - Free(sEvoStructPtr); - sEvoStructPtr = NULL; - gTextFlags.useAlternateDownArrow = 0; + FREE_AND_SET_NULL(sEvoStructPtr); + gTextFlags.useAlternateDownArrow = FALSE; SetMainCallback2(gCB2_AfterEvolution); } break; @@ -1266,7 +1264,7 @@ static void Task_TradeEvolutionScene(u8 taskId) { BufferMoveToLearnIntoBattleTextBuff2(); PlayFanfare(MUS_LEVEL_UP); - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskId].tState++; @@ -1284,7 +1282,7 @@ static void Task_TradeEvolutionScene(u8 taskId) { // "{mon} is trying to learn {move}" BufferMoveToLearnIntoBattleTextBuff2(); - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tLearnMoveState++; } @@ -1293,7 +1291,7 @@ static void Task_TradeEvolutionScene(u8 taskId) if (!IsTextPrinterActive(0) && !IsSEPlaying()) { // "But, {mon} can't learn more than four moves" - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tLearnMoveState++; } @@ -1302,7 +1300,7 @@ static void Task_TradeEvolutionScene(u8 taskId) if (!IsTextPrinterActive(0) && !IsSEPlaying()) { // "Delete a move to make room for {move}?" - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tLearnMoveYesState = T_MVSTATE_SHOW_MOVE_SELECT; gTasks[taskId].tLearnMoveNoState = T_MVSTATE_ASK_CANCEL; @@ -1323,7 +1321,7 @@ static void Task_TradeEvolutionScene(u8 taskId) { case 0: // YES sEvoCursorPos = 0; - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tLearnMoveState = gTasks[taskId].tLearnMoveYesState; if (gTasks[taskId].tLearnMoveState == T_MVSTATE_SHOW_MOVE_SELECT) @@ -1332,7 +1330,7 @@ static void Task_TradeEvolutionScene(u8 taskId) case 1: // NO case MENU_B_PRESSED: sEvoCursorPos = 1; - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tLearnMoveState = gTasks[taskId].tLearnMoveNoState; break; @@ -1371,7 +1369,7 @@ static void Task_TradeEvolutionScene(u8 taskId) if (IsHMMove2(move)) { // Can't forget HMs - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tLearnMoveState = T_MVSTATE_RETRY_AFTER_HM; } @@ -1382,7 +1380,7 @@ static void Task_TradeEvolutionScene(u8 taskId) RemoveMonPPBonus(mon, var); SetMonMoveSlot(mon, gMoveToLearn, var); - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tLearnMoveState++; } @@ -1392,7 +1390,7 @@ static void Task_TradeEvolutionScene(u8 taskId) case T_MVSTATE_FORGET_MSG: if (!IsTextPrinterActive(0) && !IsSEPlaying()) { - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tLearnMoveState++; } @@ -1400,20 +1398,20 @@ static void Task_TradeEvolutionScene(u8 taskId) case T_MVSTATE_LEARNED_MOVE: if (!IsTextPrinterActive(0) && !IsSEPlaying()) { - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tState = T_EVOSTATE_LEARNED_MOVE; } break; case T_MVSTATE_ASK_CANCEL: - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tLearnMoveYesState = T_MVSTATE_CANCEL; gTasks[taskId].tLearnMoveNoState = T_MVSTATE_INTRO_MSG_1; gTasks[taskId].tLearnMoveState = T_MVSTATE_PRINT_YES_NO; break; case T_MVSTATE_CANCEL: - BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]); + BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_TABLE_START]); DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskId].tState = T_EVOSTATE_TRY_LEARN_MOVE; break; @@ -1654,7 +1652,7 @@ static void PauseBgPaletteAnim(void) if (taskId != TASK_NONE) gTasks[taskId].tPaused = TRUE; - FillPalette(0, 0xA0, 0x20); + FillPalette(RGB_BLACK, 0xA0, 0x20); } #undef tPaused @@ -1668,7 +1666,7 @@ static void StopBgAnimation(void) if ((taskId = FindTaskIdByFunc(Task_AnimateBg)) != TASK_NONE) DestroyTask(taskId); - FillPalette(0, 0xA0, 0x20); + FillPalette(RGB_BLACK, 0xA0, 0x20); RestoreBgAfterAnim(); } diff --git a/src/faraway_island.c b/src/faraway_island.c index 51ab8def44..4f34cf30e6 100755 --- a/src/faraway_island.c +++ b/src/faraway_island.c @@ -7,14 +7,13 @@ #include "sprite.h" #include "constants/event_objects.h" #include "constants/field_effects.h" -#include "constants/maps.h" #include "constants/metatile_behaviors.h" static u8 GetValidMewMoveDirection(u8); -static bool8 ShouldMewMoveNorth(struct ObjectEvent*, u8); -static bool8 ShouldMewMoveSouth(struct ObjectEvent*, u8); -static bool8 ShouldMewMoveEast(struct ObjectEvent*, u8); -static bool8 ShouldMewMoveWest(struct ObjectEvent*, u8); +static bool8 ShouldMewMoveNorth(struct ObjectEvent *, u8); +static bool8 ShouldMewMoveSouth(struct ObjectEvent *, u8); +static bool8 ShouldMewMoveEast(struct ObjectEvent *, u8); +static bool8 ShouldMewMoveWest(struct ObjectEvent *, u8); static u8 GetRandomMewDirectionCandidate(u8); static bool8 CanMewMoveToCoords(s16, s16); @@ -29,10 +28,10 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; static const s16 sFarawayIslandRockCoords[4][2] = { - {14 + 7, 9 + 7}, - {18 + 7, 9 + 7}, - { 9 + 7, 10 + 7}, - {13 + 7, 13 + 7}, + {14 + MAP_OFFSET, 9 + MAP_OFFSET}, + {18 + MAP_OFFSET, 9 + MAP_OFFSET}, + { 9 + MAP_OFFSET, 10 + MAP_OFFSET}, + {13 + MAP_OFFSET, 13 + MAP_OFFSET}, }; static u8 GetMewObjectEventId(void) diff --git a/src/field_camera.c b/src/field_camera.c index a36b6883c1..9b129e6b26 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -14,7 +14,6 @@ EWRAM_DATA bool8 gUnusedBikeCameraAheadPanback = FALSE; -// Static type declarations struct FieldCameraOffset { u8 xPixelOffset; @@ -24,18 +23,16 @@ struct FieldCameraOffset bool8 copyBGToVRAM; }; -// static functions -static void RedrawMapSliceNorth(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout); -static void RedrawMapSliceSouth(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout); -static void RedrawMapSliceEast(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout); -static void RedrawMapSliceWest(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout); -static s32 MapPosToBgTilemapOffset(struct FieldCameraOffset *a, s32 x, s32 y); -static void DrawWholeMapViewInternal(int x, int y, const struct MapLayout *mapLayout); -static void DrawMetatileAt(const struct MapLayout *mapLayout, u16, int, int); -static void DrawMetatile(s32 a, u16 *b, u16 c); +static void RedrawMapSliceNorth(struct FieldCameraOffset *, const struct MapLayout *); +static void RedrawMapSliceSouth(struct FieldCameraOffset *, const struct MapLayout *); +static void RedrawMapSliceEast(struct FieldCameraOffset *, const struct MapLayout *); +static void RedrawMapSliceWest(struct FieldCameraOffset *, const struct MapLayout *); +static s32 MapPosToBgTilemapOffset(struct FieldCameraOffset *, s32, s32); +static void DrawWholeMapViewInternal(int, int, const struct MapLayout *); +static void DrawMetatileAt(const struct MapLayout *, u16, int, int); +static void DrawMetatile(s32, u16 *, u16); static void CameraPanningCB_PanAhead(void); -// IWRAM bss vars static struct FieldCameraOffset sFieldCameraOffset; static s16 sHorizontalCameraPan; static s16 sVerticalCameraPan; @@ -46,7 +43,6 @@ struct CameraObject gFieldCamera; u16 gTotalCameraPixelOffsetY; u16 gTotalCameraPixelOffsetX; -// text static void ResetCameraOffset(struct FieldCameraOffset *cameraOffset) { cameraOffset->xTileOffset = 0; @@ -216,13 +212,13 @@ void CurrentMapDrawMetatileAt(int x, int y) } } -void DrawDoorMetatileAt(int x, int y, u16 *arr) +void DrawDoorMetatileAt(int x, int y, u16 *tiles) { int offset = MapPosToBgTilemapOffset(&sFieldCameraOffset, x, y); if (offset >= 0) { - DrawMetatile(1, arr, offset); + DrawMetatile(METATILE_LAYER_TYPE_COVERED, tiles, offset); sFieldCameraOffset.copyBGToVRAM = TRUE; } } @@ -244,66 +240,66 @@ static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 offset, int x, DrawMetatile(MapGridGetMetatileLayerTypeAt(x, y), metatiles + metatileId * 8, offset); } -static void DrawMetatile(s32 metatileLayerType, u16 *metatiles, u16 offset) +static void DrawMetatile(s32 metatileLayerType, u16 *tiles, u16 offset) { switch (metatileLayerType) { - case 2: // LAYER_TYPE_ + case METATILE_LAYER_TYPE_SPLIT: // Draw metatile's bottom layer to the bottom background layer. - gBGTilemapBuffers3[offset] = metatiles[0]; - gBGTilemapBuffers3[offset + 1] = metatiles[1]; - gBGTilemapBuffers3[offset + 0x20] = metatiles[2]; - gBGTilemapBuffers3[offset + 0x21] = metatiles[3]; + gOverworldTilemapBuffer_Bg3[offset] = tiles[0]; + gOverworldTilemapBuffer_Bg3[offset + 1] = tiles[1]; + gOverworldTilemapBuffer_Bg3[offset + 0x20] = tiles[2]; + gOverworldTilemapBuffer_Bg3[offset + 0x21] = tiles[3]; // Draw transparent tiles to the middle background layer. - gBGTilemapBuffers1[offset] = 0; - gBGTilemapBuffers1[offset + 1] = 0; - gBGTilemapBuffers1[offset + 0x20] = 0; - gBGTilemapBuffers1[offset + 0x21] = 0; + gOverworldTilemapBuffer_Bg2[offset] = 0; + gOverworldTilemapBuffer_Bg2[offset + 1] = 0; + gOverworldTilemapBuffer_Bg2[offset + 0x20] = 0; + gOverworldTilemapBuffer_Bg2[offset + 0x21] = 0; // Draw metatile's top layer to the top background layer. - gBGTilemapBuffers2[offset] = metatiles[4]; - gBGTilemapBuffers2[offset + 1] = metatiles[5]; - gBGTilemapBuffers2[offset + 0x20] = metatiles[6]; - gBGTilemapBuffers2[offset + 0x21] = metatiles[7]; + gOverworldTilemapBuffer_Bg1[offset] = tiles[4]; + gOverworldTilemapBuffer_Bg1[offset + 1] = tiles[5]; + gOverworldTilemapBuffer_Bg1[offset + 0x20] = tiles[6]; + gOverworldTilemapBuffer_Bg1[offset + 0x21] = tiles[7]; break; - case 1: // LAYER_TYPE_COVERED_BY_OBJECTS + case METATILE_LAYER_TYPE_COVERED: // Draw metatile's bottom layer to the bottom background layer. - gBGTilemapBuffers3[offset] = metatiles[0]; - gBGTilemapBuffers3[offset + 1] = metatiles[1]; - gBGTilemapBuffers3[offset + 0x20] = metatiles[2]; - gBGTilemapBuffers3[offset + 0x21] = metatiles[3]; + gOverworldTilemapBuffer_Bg3[offset] = tiles[0]; + gOverworldTilemapBuffer_Bg3[offset + 1] = tiles[1]; + gOverworldTilemapBuffer_Bg3[offset + 0x20] = tiles[2]; + gOverworldTilemapBuffer_Bg3[offset + 0x21] = tiles[3]; // Draw metatile's top layer to the middle background layer. - gBGTilemapBuffers1[offset] = metatiles[4]; - gBGTilemapBuffers1[offset + 1] = metatiles[5]; - gBGTilemapBuffers1[offset + 0x20] = metatiles[6]; - gBGTilemapBuffers1[offset + 0x21] = metatiles[7]; + gOverworldTilemapBuffer_Bg2[offset] = tiles[4]; + gOverworldTilemapBuffer_Bg2[offset + 1] = tiles[5]; + gOverworldTilemapBuffer_Bg2[offset + 0x20] = tiles[6]; + gOverworldTilemapBuffer_Bg2[offset + 0x21] = tiles[7]; // Draw transparent tiles to the top background layer. - gBGTilemapBuffers2[offset] = 0; - gBGTilemapBuffers2[offset + 1] = 0; - gBGTilemapBuffers2[offset + 0x20] = 0; - gBGTilemapBuffers2[offset + 0x21] = 0; + gOverworldTilemapBuffer_Bg1[offset] = 0; + gOverworldTilemapBuffer_Bg1[offset + 1] = 0; + gOverworldTilemapBuffer_Bg1[offset + 0x20] = 0; + gOverworldTilemapBuffer_Bg1[offset + 0x21] = 0; break; - case 0: // LAYER_TYPE_NORMAL + case METATILE_LAYER_TYPE_NORMAL: // Draw garbage to the bottom background layer. - gBGTilemapBuffers3[offset] = 0x3014; - gBGTilemapBuffers3[offset + 1] = 0x3014; - gBGTilemapBuffers3[offset + 0x20] = 0x3014; - gBGTilemapBuffers3[offset + 0x21] = 0x3014; + gOverworldTilemapBuffer_Bg3[offset] = 0x3014; + gOverworldTilemapBuffer_Bg3[offset + 1] = 0x3014; + gOverworldTilemapBuffer_Bg3[offset + 0x20] = 0x3014; + gOverworldTilemapBuffer_Bg3[offset + 0x21] = 0x3014; // Draw metatile's bottom layer to the middle background layer. - gBGTilemapBuffers1[offset] = metatiles[0]; - gBGTilemapBuffers1[offset + 1] = metatiles[1]; - gBGTilemapBuffers1[offset + 0x20] = metatiles[2]; - gBGTilemapBuffers1[offset + 0x21] = metatiles[3]; + gOverworldTilemapBuffer_Bg2[offset] = tiles[0]; + gOverworldTilemapBuffer_Bg2[offset + 1] = tiles[1]; + gOverworldTilemapBuffer_Bg2[offset + 0x20] = tiles[2]; + gOverworldTilemapBuffer_Bg2[offset + 0x21] = tiles[3]; // Draw metatile's top layer to the top background layer, which covers object event sprites. - gBGTilemapBuffers2[offset] = metatiles[4]; - gBGTilemapBuffers2[offset + 1] = metatiles[5]; - gBGTilemapBuffers2[offset + 0x20] = metatiles[6]; - gBGTilemapBuffers2[offset + 0x21] = metatiles[7]; + gOverworldTilemapBuffer_Bg1[offset] = tiles[4]; + gOverworldTilemapBuffer_Bg1[offset + 1] = tiles[5]; + gOverworldTilemapBuffer_Bg1[offset + 0x20] = tiles[6]; + gOverworldTilemapBuffer_Bg1[offset + 0x21] = tiles[7]; break; } ScheduleBgCopyTilemapToVram(1); @@ -408,9 +404,9 @@ void CameraUpdate(void) } gFieldCamera.x += movementSpeedX; - gFieldCamera.x = gFieldCamera.x - 16 * (gFieldCamera.x / 16); + gFieldCamera.x %= 16; gFieldCamera.y += movementSpeedY; - gFieldCamera.y = gFieldCamera.y - 16 * (gFieldCamera.y / 16); + gFieldCamera.y %= 16; if (deltaX != 0 || deltaY != 0) { @@ -441,10 +437,10 @@ void SetCameraPanningCallback(void (*callback)(void)) sFieldCameraPanningCallback = callback; } -void SetCameraPanning(s16 a, s16 b) +void SetCameraPanning(s16 horizontal, s16 vertical) { - sHorizontalCameraPan = a; - sVerticalCameraPan = b + 32; + sHorizontalCameraPan = horizontal; + sVerticalCameraPan = vertical + 32; } void InstallCameraPanAheadCallback(void) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 6ec280fd0d..2ba4c29cd0 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -32,7 +32,6 @@ #include "constants/event_objects.h" #include "constants/field_poison.h" #include "constants/map_types.h" -#include "constants/maps.h" #include "constants/songs.h" #include "constants/trainer_hill.h" @@ -44,8 +43,8 @@ u8 gSelectedObjectEvent; static void GetPlayerPosition(struct MapPosition *); static void GetInFrontOfPlayerPosition(struct MapPosition *); static u16 GetPlayerCurMetatileBehavior(int); -static bool8 TryStartInteractionScript(struct MapPosition*, u16, u8); -static const u8 *GetInteractionScript(struct MapPosition*, u8, u8); +static bool8 TryStartInteractionScript(struct MapPosition *, u16, u8); +static const u8 *GetInteractionScript(struct MapPosition *, u8, u8); static const u8 *GetInteractedObjectEventScript(struct MapPosition *, u8, u8); static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *, u8, u8); static const u8 *GetInteractedMetatileScript(struct MapPosition *, u8, u8); @@ -95,7 +94,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) if ((tileTransitionState == T_TILE_CENTER && forcedMove == FALSE) || tileTransitionState == T_NOT_MOVING) { - if (GetPlayerSpeed() != 4) + if (GetPlayerSpeed() != PLAYER_SPEED_FASTEST) { if (newKeys & START_BUTTON) input->pressedStartButton = TRUE; @@ -195,7 +194,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input) static void GetPlayerPosition(struct MapPosition *position) { PlayerGetDestCoords(&position->x, &position->y); - position->height = PlayerGetZCoord(); + position->elevation = PlayerGetElevation(); } static void GetInFrontOfPlayerPosition(struct MapPosition *position) @@ -204,10 +203,10 @@ static void GetInFrontOfPlayerPosition(struct MapPosition *position) GetXYCoordsOneStepInFrontOfPlayer(&position->x, &position->y); PlayerGetDestCoords(&x, &y); - if (MapGridGetZCoordAt(x, y) != 0) - position->height = PlayerGetZCoord(); + if (MapGridGetElevationAt(x, y) != 0) + position->elevation = PlayerGetElevation(); else - position->height = 0; + position->elevation = 0; } static u16 GetPlayerCurMetatileBehavior(int runningState) @@ -234,7 +233,7 @@ static bool8 TryStartInteractionScript(struct MapPosition *position, u16 metatil && script != EventScript_PC) PlaySE(SE_SELECT); - ScriptContext1_SetupScript(script); + ScriptContext_SetupScript(script); return TRUE; } @@ -265,9 +264,9 @@ const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatil s32 i; if (!MetatileBehavior_IsCounter(MapGridGetMetatileBehaviorAt(position->x, position->y))) - objectEventId = GetObjectEventIdByXYZ(position->x, position->y, position->height); + objectEventId = GetObjectEventIdByPosition(position->x, position->y, position->elevation); else - objectEventId = GetObjectEventIdByXYZ(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->height); + objectEventId = GetObjectEventIdByPosition(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->elevation); if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER) return NULL; @@ -289,14 +288,14 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 u8 objectEventId; const u8 *script; - objectEventId = GetObjectEventIdByXYZ(position->x, position->y, position->height); + objectEventId = GetObjectEventIdByPosition(position->x, position->y, position->elevation); if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER) { if (MetatileBehavior_IsCounter(metatileBehavior) != TRUE) return NULL; // Look for an object event on the other side of the counter. - objectEventId = GetObjectEventIdByXYZ(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->height); + objectEventId = GetObjectEventIdByPosition(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->elevation); if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER) return NULL; } @@ -316,7 +315,7 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position, u8 metatileBehavior, u8 direction) { - struct BgEvent *bgEvent = GetBackgroundEventAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->height); + struct BgEvent *bgEvent = GetBackgroundEventAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); if (bgEvent == NULL) return NULL; @@ -367,7 +366,7 @@ static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 metatileBehavior, u8 direction) { - s8 height; + s8 elevation; if (MetatileBehavior_IsPlayerFacingTVScreen(metatileBehavior, direction) == TRUE) return EventScript_TV; @@ -410,8 +409,8 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me if (MetatileBehavior_IsTrainerHillTimer(metatileBehavior) == TRUE) return EventScript_TrainerHillTimer; - height = position->height; - if (height == MapGridGetZCoordAt(position->x, position->y)) + elevation = position->elevation; + if (elevation == MapGridGetElevationAt(position->x, position->y)) { if (MetatileBehavior_IsSecretBasePC(metatileBehavior) == TRUE) return SecretBase_EventScript_PC; @@ -421,7 +420,7 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me return SecretBase_EventScript_SandOrnament; if (MetatileBehavior_IsSecretBaseShieldOrToyTV(metatileBehavior) == TRUE) return SecretBase_EventScript_ShieldOrToyTV; - if (MetatileBehavior_IsMB_C6(metatileBehavior) == TRUE) + if (MetatileBehavior_IsSecretBaseDecorationBase(metatileBehavior) == TRUE) { CheckInteractedWithFriendsFurnitureBottom(); return NULL; @@ -465,7 +464,7 @@ static bool32 TrySetupDiveDownScript(void) { if (FlagGet(FLAG_BADGE07_GET) && TrySetDiveWarp() == 2) { - ScriptContext1_SetupScript(EventScript_UseDive); + ScriptContext_SetupScript(EventScript_UseDive); return TRUE; } return FALSE; @@ -475,7 +474,7 @@ static bool32 TrySetupDiveEmergeScript(void) { if (FlagGet(FLAG_BADGE07_GET) && gMapHeader.mapType == MAP_TYPE_UNDERWATER && TrySetDiveWarp() == 1) { - ScriptContext1_SetupScript(EventScript_UseDiveUnderwater); + ScriptContext_SetupScript(EventScript_UseDiveUnderwater); return TRUE; } return FALSE; @@ -498,11 +497,11 @@ static bool8 TryStartStepBasedScript(struct MapPosition *position, u16 metatileB static bool8 TryStartCoordEventScript(struct MapPosition *position) { - u8 *script = GetCoordEventScriptAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->height); + u8 *script = GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); if (script == NULL) return FALSE; - ScriptContext1_SetupScript(script); + ScriptContext_SetupScript(script); return TRUE; } @@ -512,12 +511,12 @@ static bool8 TryStartMiscWalkingScripts(u16 metatileBehavior) if (MetatileBehavior_IsCrackedFloorHole(metatileBehavior)) { - ScriptContext1_SetupScript(EventScript_FallDownHole); + ScriptContext_SetupScript(EventScript_FallDownHole); return TRUE; } else if (MetatileBehavior_IsBattlePyramidWarp(metatileBehavior)) { - ScriptContext1_SetupScript(BattlePyramid_WarpToNextFloor); + ScriptContext_SetupScript(BattlePyramid_WarpToNextFloor); return TRUE; } else if (MetatileBehavior_IsSecretBaseGlitterMat(metatileBehavior) == TRUE) @@ -549,48 +548,48 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) { if (UpdatePoisonStepCounter() == TRUE) { - ScriptContext1_SetupScript(EventScript_FieldPoison); + ScriptContext_SetupScript(EventScript_FieldPoison); return TRUE; } if (ShouldEggHatch()) { IncrementGameStat(GAME_STAT_HATCHED_EGGS); - ScriptContext1_SetupScript(EventScript_EggHatch); + ScriptContext_SetupScript(EventScript_EggHatch); return TRUE; } if (AbnormalWeatherHasExpired() == TRUE) { - ScriptContext1_SetupScript(AbnormalWeather_EventScript_EndEventAndCleanup_1); + ScriptContext_SetupScript(AbnormalWeather_EventScript_EndEventAndCleanup_1); return TRUE; } if (ShouldDoBrailleRegicePuzzle() == TRUE) { - ScriptContext1_SetupScript(IslandCave_EventScript_OpenRegiEntrance); + ScriptContext_SetupScript(IslandCave_EventScript_OpenRegiEntrance); return TRUE; } if (ShouldDoWallyCall() == TRUE) { - ScriptContext1_SetupScript(MauvilleCity_EventScript_RegisterWallyCall); + ScriptContext_SetupScript(MauvilleCity_EventScript_RegisterWallyCall); return TRUE; } if (ShouldDoScottFortreeCall() == TRUE) { - ScriptContext1_SetupScript(Route119_EventScript_ScottWonAtFortreeGymCall); + ScriptContext_SetupScript(Route119_EventScript_ScottWonAtFortreeGymCall); return TRUE; } if (ShouldDoScottBattleFrontierCall() == TRUE) { - ScriptContext1_SetupScript(LittlerootTown_ProfessorBirchsLab_EventScript_ScottAboardSSTidalCall); + ScriptContext_SetupScript(LittlerootTown_ProfessorBirchsLab_EventScript_ScottAboardSSTidalCall); return TRUE; } if (ShouldDoRoxanneCall() == TRUE) { - ScriptContext1_SetupScript(RustboroCity_Gym_EventScript_RegisterRoxanne); + ScriptContext_SetupScript(RustboroCity_Gym_EventScript_RegisterRoxanne); return TRUE; } if (ShouldDoRivalRayquazaCall() == TRUE) { - ScriptContext1_SetupScript(MossdeepCity_SpaceCenter_2F_EventScript_RivalRayquazaCall); + ScriptContext_SetupScript(MossdeepCity_SpaceCenter_2F_EventScript_RivalRayquazaCall); return TRUE; } } @@ -599,7 +598,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) return TRUE; if (CountSSTidalStep(1) == TRUE) { - ScriptContext1_SetupScript(SSTidalCorridor_EventScript_ReachedStepCount); + ScriptContext_SetupScript(SSTidalCorridor_EventScript_ReachedStepCount); return TRUE; } if (TryStartMatchCall()) @@ -691,7 +690,7 @@ static bool8 TryArrowWarp(struct MapPosition *position, u16 metatileBehavior, u8 { s8 warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position); - if (IsArrowWarpMetatileBehavior(metatileBehavior, direction) == TRUE && warpEventId != -1) + if (IsArrowWarpMetatileBehavior(metatileBehavior, direction) == TRUE && warpEventId != WARP_ID_NONE) { StoreInitialPlayerAvatarState(); SetupWarp(&gMapHeader, warpEventId, position); @@ -705,7 +704,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB { s8 warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position); - if (warpEventId != -1 && IsWarpMetatileBehavior(metatileBehavior) == TRUE) + if (warpEventId != WARP_ID_NONE && IsWarpMetatileBehavior(metatileBehavior) == TRUE) { StoreInitialPlayerAvatarState(); SetupWarp(&gMapHeader, warpEventId, position); @@ -729,15 +728,14 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB DoTeleportTileWarp(); return TRUE; } - if (MetatileBehavior_IsWarpOrBridge(metatileBehavior) == TRUE) + if (MetatileBehavior_IsUnionRoomWarp(metatileBehavior) == TRUE) { - // Maybe unused? This MB is used by log bridges, but there's never a warp event on them DoSpinExitWarp(); return TRUE; } if (MetatileBehavior_IsMtPyreHole(metatileBehavior) == TRUE) { - ScriptContext1_SetupScript(EventScript_FallDownHoleMtPyre); + ScriptContext_SetupScript(EventScript_FallDownHoleMtPyre); return TRUE; } if (MetatileBehavior_IsMossdeepGymWarp(metatileBehavior) == TRUE) @@ -762,7 +760,7 @@ static bool8 IsWarpMetatileBehavior(u16 metatileBehavior) && MetatileBehavior_IsAquaHideoutWarp(metatileBehavior) != TRUE && MetatileBehavior_IsMtPyreHole(metatileBehavior) != TRUE && MetatileBehavior_IsMossdeepGymWarp(metatileBehavior) != TRUE - && MetatileBehavior_IsWarpOrBridge(metatileBehavior) != TRUE) + && MetatileBehavior_IsUnionRoomWarp(metatileBehavior) != TRUE) return FALSE; return TRUE; } @@ -785,7 +783,7 @@ static bool8 IsArrowWarpMetatileBehavior(u16 metatileBehavior, u8 direction) static s8 GetWarpEventAtMapPosition(struct MapHeader *mapHeader, struct MapPosition *position) { - return GetWarpEventAtPosition(mapHeader, position->x - 7, position->y - 7, position->height); + return GetWarpEventAtPosition(mapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); } static void SetupWarp(struct MapHeader *unused, s8 warpEventId, struct MapPosition *position) @@ -848,7 +846,7 @@ static bool8 TryDoorWarp(struct MapPosition *position, u16 metatileBehavior, u8 if (MetatileBehavior_IsWarpDoor(metatileBehavior) == TRUE) { warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position); - if (warpEventId != -1 && IsWarpMetatileBehavior(metatileBehavior) == TRUE) + if (warpEventId != WARP_ID_NONE && IsWarpMetatileBehavior(metatileBehavior) == TRUE) { StoreInitialPlayerAvatarState(); SetupWarp(&gMapHeader, warpEventId, position); @@ -874,7 +872,7 @@ static s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 e return i; } } - return -1; + return WARP_ID_NONE; } static u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent) @@ -888,7 +886,7 @@ static u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent) } if (coordEvent->trigger == 0) { - ScriptContext2_RunNewScript(coordEvent->script); + RunScriptImmediately(coordEvent->script); return NULL; } if (VarGet(coordEvent->trigger) == (u8)coordEvent->index) @@ -920,7 +918,7 @@ static u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position) { - return GetCoordEventScriptAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->height); + return GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); } static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) @@ -944,7 +942,7 @@ bool8 TryDoDiveWarp(struct MapPosition *position, u16 metatileBehavior) { if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && !MetatileBehavior_IsUnableToEmerge(metatileBehavior)) { - if (SetDiveWarpEmerge(position->x - 7, position->y - 7)) + if (SetDiveWarpEmerge(position->x - MAP_OFFSET, position->y - MAP_OFFSET)) { StoreInitialPlayerAvatarState(); DoDiveWarp(); @@ -954,7 +952,7 @@ bool8 TryDoDiveWarp(struct MapPosition *position, u16 metatileBehavior) } else if (MetatileBehavior_IsDiveable(metatileBehavior) == TRUE) { - if (SetDiveWarpDive(position->x - 7, position->y - 7)) + if (SetDiveWarpDive(position->x - MAP_OFFSET, position->y - MAP_OFFSET)) { StoreInitialPlayerAvatarState(); DoDiveWarp(); @@ -974,12 +972,12 @@ u8 TrySetDiveWarp(void) metatileBehavior = MapGridGetMetatileBehaviorAt(x, y); if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && !MetatileBehavior_IsUnableToEmerge(metatileBehavior)) { - if (SetDiveWarpEmerge(x - 7, y - 7) == TRUE) + if (SetDiveWarpEmerge(x - MAP_OFFSET, y - MAP_OFFSET) == TRUE) return 1; } else if (MetatileBehavior_IsDiveable(metatileBehavior) == TRUE) { - if (SetDiveWarpDive(x - 7, y - 7) == TRUE) + if (SetDiveWarpDive(x - MAP_OFFSET, y - MAP_OFFSET) == TRUE) return 2; } return 0; diff --git a/src/field_door.c b/src/field_door.c index 8aeb1d4914..756d0dabf1 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -5,7 +5,6 @@ #include "fieldmap.h" #include "metatile_behavior.h" #include "task.h" -#include "constants/maps.h" #include "constants/songs.h" #include "constants/metatile_labels.h" @@ -19,7 +18,7 @@ struct DoorGraphics u8 sound; u8 size; const void *tiles; - const void *palette; + const void *palettes; }; struct DoorAnimFrame @@ -75,7 +74,7 @@ static const u8 sDoorAnimTiles_PokemonLeague[] = INCBIN_U8("graphics/door_anims/ static const u16 sDoorNullPalette20[16] = {}; static const u8 sDoorAnimTiles_Pacifidlog[] = INCBIN_U8("graphics/door_anims/pacifidlog.4bpp"); static const u16 sDoorNullPalette21[16] = {}; -static const u8 sDoorAnimTiles_BattleTowerCorridor[] = INCBIN_U8("graphics/door_anims/battle_tower_corridor.4bpp"); +static const u8 sDoorAnimTiles_PetalburgGym[] = INCBIN_U8("graphics/door_anims/petalburg_gym.4bpp"); static const u16 sDoorNullPalette22[16] = {}; static const u8 sDoorAnimTiles_CyclingRoad[] = INCBIN_U8("graphics/door_anims/cycling_road.4bpp"); static const u16 sDoorNullPalette23[16] = {}; @@ -99,7 +98,7 @@ static const u8 sDoorAnimTiles_BattleTowerOld[] = INCBIN_U8("graphics/door_anims static const u16 sDoorNullPalette32[16] = {}; static const u8 sDoorAnimTiles_BattleTowerElevator[] = INCBIN_U8("graphics/door_anims/battle_tower_elevator.4bpp"); static const u16 sDoorNullPalette33[16] = {}; -static const u8 sDoorAnimTiles_34[] = INCBIN_U8("graphics/door_anims/unknown.4bpp"); +static const u8 sDoorAnimTiles_UnusedBattleFrontier[] = INCBIN_U8("graphics/door_anims/unused_battle_frontier.4bpp"); static const u16 sDoorNullPalette34[16] = {}; static const u8 sDoorAnimTiles_BattleDome[] = INCBIN_U8("graphics/door_anims/battle_dome.4bpp"); static const u16 sDoorNullPalette35[16] = {}; @@ -191,7 +190,7 @@ static const u8 sDoorAnimPalettes_Mauville[] = {7, 7, 7, 7, 7, 7, 7, 7}; static const u8 sDoorAnimPalettes_Verdanturf[] = {6, 6, 5, 5, 5, 5, 5, 5}; static const u8 sDoorAnimPalettes_LilycoveWooden[] = {5, 5, 5, 5, 5, 5, 5, 5}; static const u8 sDoorAnimPalettes_Contest[] = {1, 1, 1, 1, 1, 1, 1, 1}; -static const u8 sDoorAnimPalettes_BattleTowerCorridor[] = {6, 6, 6, 6, 6, 6, 6, 6}; +static const u8 sDoorAnimPalettes_PetalburgGym[] = {6, 6, 6, 6, 6, 6, 6, 6}; static const u8 sDoorAnimPalettes_CyclingRoad[] = {7, 7, 7, 7, 7, 7, 7, 7}; static const u8 sDoorAnimPalettes_LilycoveDeptStore[] = {5, 5, 5, 5, 5, 5, 5, 5}; static const u8 sDoorAnimPalettes_SafariZone[] = {9, 9, 9, 9, 9, 9, 9, 9}; @@ -203,7 +202,7 @@ static const u8 sDoorAnimPalettes_AbandonedShipRoom[] = {7, 7, 7, 7, 7, 7, 7, 7} static const u8 sDoorAnimPalettes_LilycoveDeptStoreElevator[] = {6, 6, 7, 7, 7, 7, 7, 7}; static const u8 sDoorAnimPalettes_BattleTowerOld[] = {9, 9, 9, 9, 9, 9, 9, 9}; static const u8 sDoorAnimPalettes_BattleTowerElevator[] = {7, 7, 7, 7, 7, 7, 7, 7}; -static const u8 sDoorAnimPalettes_34[] = {9, 9, 9, 9, 9, 9, 9, 9}; +static const u8 sDoorAnimPalettes_UnusedBattleFrontier[] = {9, 9, 9, 9, 9, 9, 9, 9}; static const u8 sDoorAnimPalettes_BattleDome[] = {1, 1, 1, 1, 1, 1, 1, 1}; static const u8 sDoorAnimPalettes_BattleFactory[] = {9, 9, 9, 9, 9, 9, 9, 9}; static const u8 sDoorAnimPalettes_BattleTower[] = {0, 0, 0, 0, 0, 0, 0, 0}; @@ -245,7 +244,7 @@ static const struct DoorGraphics sDoorAnimGraphicsTable[] = {METATILE_Sootopolis_Door, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_Sootopolis, sDoorAnimPalettes_Sootopolis}, {METATILE_EverGrande_Door_PokemonLeague, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_PokemonLeague, sDoorAnimPalettes_PokemonLeague}, {METATILE_Pacifidlog_Door, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_Pacifidlog, sDoorAnimPalettes_Pacifidlog}, - {METATILE_BattleFrontier_Door_Corridor, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_BattleTowerCorridor, sDoorAnimPalettes_BattleTowerCorridor}, + {METATILE_PetalburgGym_Door, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_PetalburgGym, sDoorAnimPalettes_PetalburgGym}, {METATILE_Mauville_Door_CyclingRoad, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_CyclingRoad, sDoorAnimPalettes_CyclingRoad}, {METATILE_Lilycove_Door_DeptStore, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_LilycoveDeptStore, sDoorAnimPalettes_LilycoveDeptStore}, {METATILE_Lilycove_Door_SafariZone, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_SafariZone, sDoorAnimPalettes_SafariZone}, @@ -257,7 +256,9 @@ static const struct DoorGraphics sDoorAnimGraphicsTable[] = {METATILE_Shop_Door_Elevator, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_LilycoveDeptStoreElevator, sDoorAnimPalettes_LilycoveDeptStoreElevator}, {METATILE_Dewford_Door_BattleTower, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleTowerOld, sDoorAnimPalettes_BattleTowerOld}, {METATILE_BattleFrontier_Door_Elevator, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleTowerElevator, sDoorAnimPalettes_BattleTowerElevator}, - {0x3B0, /* TODO: Missing metatile ID */ DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_34, sDoorAnimPalettes_34}, + // The metatile for this door doesn't seem to correspond to a door in any Emerald tileset. Given the surrounding door animations, it was likely cut from the Battle Frontier. + // From the palettes array we know it uses palette 9, and the door's shadow looks correct using either the Battle Tent or Battle Frontier Outside's 9th palette. + {0x3B0, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_UnusedBattleFrontier, sDoorAnimPalettes_UnusedBattleFrontier}, {METATILE_BattleFrontierOutsideWest_Door_BattleDome, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleDome, sDoorAnimPalettes_BattleDome}, {METATILE_BattleFrontierOutsideWest_Door_BattleFactory, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleFactory, sDoorAnimPalettes_BattleFactory}, {METATILE_BattleFrontierOutsideEast_Door_BattleTower, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleTower, sDoorAnimPalettes_BattleTower}, @@ -279,52 +280,71 @@ static const struct DoorGraphics sDoorAnimGraphicsTable[] = {}, }; +// NOTE: The tiles of a door's animation must be copied to VRAM because they are not already part of any given tileset. +// This means that if there are any pre-existing tiles in this copied region that are visible when the door +// animation is played they will be overwritten. +#define DOOR_TILE_START_SIZE1 (NUM_TILES_TOTAL - 8) +#define DOOR_TILE_START_SIZE2 (NUM_TILES_TOTAL - 16) + static void CopyDoorTilesToVram(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frame) { if (gfx->size == 2) - CpuFastSet(gfx->tiles + frame->offset, (void *)(VRAM + 0x7E00), 0x80); + CpuFastCopy(gfx->tiles + frame->offset, (void *)(VRAM + TILE_OFFSET_4BPP(DOOR_TILE_START_SIZE2)), 16 * TILE_SIZE_4BPP); else - CpuFastSet(gfx->tiles + frame->offset, (void *)(VRAM + 0x7F00), 0x40); + CpuFastCopy(gfx->tiles + frame->offset, (void *)(VRAM + TILE_OFFSET_4BPP(DOOR_TILE_START_SIZE1)), 8 * TILE_SIZE_4BPP); } -static void door_build_blockdef(u16 *a, u16 b, const u8 *c) +static void BuildDoorTiles(u16 *tiles, u16 tileNum, const u8 *paletteNums) { int i; - u16 unk; + u16 tile; + // Only the first 4 tiles of each metatile (bottom layer) actually use the door tiles for (i = 0; i < 4; i++) { - unk = *(c++) << 12; - a[i] = unk | (b + i); + tile = *(paletteNums++) << 12; + tiles[i] = tile | (tileNum + i); } + + // The remaining layers are left as tile 0 (with the same palette) for (; i < 8; i++) { - unk = *(c++) << 12; - a[i] = unk; + tile = *(paletteNums++) << 12; + tiles[i] = tile; } } -static void DrawCurrentDoorAnimFrame(const struct DoorGraphics *gfx, u32 x, u32 y, const u8 *pal) +static void DrawCurrentDoorAnimFrame(const struct DoorGraphics *gfx, u32 x, u32 y, const u8 *paletteNums) { - u16 arr[24]; - + u16 tiles[24]; + if (gfx->size == 2) { - door_build_blockdef(&arr[8], 0x3F0, pal); - DrawDoorMetatileAt(x, y - 1, &arr[8]); - door_build_blockdef(&arr[8], 0x3F4, pal + 4); - DrawDoorMetatileAt(x, y, &arr[8]); - door_build_blockdef(&arr[8], 0x3F8, pal); - DrawDoorMetatileAt(x + 1, y - 1, &arr[8]); - door_build_blockdef(&arr[8], 0x3FC, pal + 4); - DrawDoorMetatileAt(x + 1, y, &arr[8]); + // Top left metatile + BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 0, &paletteNums[0]); + DrawDoorMetatileAt(x, y - 1, &tiles[8]); + + // Bottom left metatile + BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 4, &paletteNums[4]); + DrawDoorMetatileAt(x, y, &tiles[8]); + + // Top right metatile + BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 8, &paletteNums[0]); + DrawDoorMetatileAt(x + 1, y - 1, &tiles[8]); + + // Bottom right metatile + BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 12, &paletteNums[4]); + DrawDoorMetatileAt(x + 1, y, &tiles[8]); } else { - door_build_blockdef(&arr[0], 0x3F8, pal); - DrawDoorMetatileAt(x, y - 1, &arr[0]); - door_build_blockdef(&arr[0], 0x3FC, pal + 4); - DrawDoorMetatileAt(x, y, &arr[0]); + // Top metatile + BuildDoorTiles(&tiles[0], DOOR_TILE_START_SIZE1 + 0, &paletteNums[0]); + DrawDoorMetatileAt(x, y - 1, &tiles[0]); + + // Bottom metatile + BuildDoorTiles(&tiles[0], DOOR_TILE_START_SIZE1 + 4, &paletteNums[4]); + DrawDoorMetatileAt(x, y, &tiles[0]); } } @@ -346,14 +366,14 @@ static void DrawDoor(const struct DoorGraphics *gfx, const struct DoorAnimFrame { DrawClosedDoorTiles(gfx, x, y); if (ShouldUseMultiCorridorDoor()) - DrawClosedDoorTiles(gfx, gSpecialVar_0x8004 + 7, gSpecialVar_0x8005 + 7); + DrawClosedDoorTiles(gfx, gSpecialVar_0x8004 + MAP_OFFSET, gSpecialVar_0x8005 + MAP_OFFSET); } else { CopyDoorTilesToVram(gfx, frame); - DrawCurrentDoorAnimFrame(gfx, x, y, gfx->palette); + DrawCurrentDoorAnimFrame(gfx, x, y, gfx->palettes); if (ShouldUseMultiCorridorDoor()) - DrawCurrentDoorAnimFrame(gfx, gSpecialVar_0x8004 + 7, gSpecialVar_0x8005 + 7, gfx->palette); + DrawCurrentDoorAnimFrame(gfx, gSpecialVar_0x8004 + MAP_OFFSET, gSpecialVar_0x8005 + MAP_OFFSET, gfx->palettes); } } @@ -524,7 +544,7 @@ bool8 FieldIsDoorAnimationRunning(void) u32 GetDoorSoundEffect(u32 x, u32 y) { int sound = GetDoorSoundType(sDoorAnimGraphicsTable, x, y); - + if (sound == DOOR_SOUND_NORMAL) return SE_DOOR; else if (sound == DOOR_SOUND_SLIDING) @@ -540,7 +560,7 @@ static bool8 ShouldUseMultiCorridorDoor(void) { if (FlagGet(FLAG_ENABLE_MULTI_CORRIDOR_DOOR)) { - if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR) + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR)) { return TRUE; diff --git a/src/field_effect.c b/src/field_effect.c index 7fd63182e5..2a1937f205 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -146,10 +146,10 @@ static void EscapeRopeWarpInEffect_Init(struct Task *); static void EscapeRopeWarpInEffect_Spin(struct Task *); static void Task_TeleportWarpOut(u8); -static void TeleportWarpOutFieldEffect_Init(struct Task*); -static void TeleportWarpOutFieldEffect_SpinGround(struct Task*); -static void TeleportWarpOutFieldEffect_SpinExit(struct Task*); -static void TeleportWarpOutFieldEffect_End(struct Task*); +static void TeleportWarpOutFieldEffect_Init(struct Task *); +static void TeleportWarpOutFieldEffect_SpinGround(struct Task *); +static void TeleportWarpOutFieldEffect_SpinExit(struct Task *); +static void TeleportWarpOutFieldEffect_End(struct Task *); static void FieldCallback_TeleportWarpIn(void); static void Task_TeleportWarpIn(u8); @@ -223,11 +223,11 @@ static void FlyInFieldEffect_WaitBirdReturn(struct Task *); static void FlyInFieldEffect_End(struct Task *); static void Task_DestroyDeoxysRock(u8 taskId); -static void DestroyDeoxysRockEffect_CameraShake(s16*, u8); -static void DestroyDeoxysRockEffect_RockFragments(s16*, u8); -static void DestroyDeoxysRockEffect_WaitAndEnd(s16*, u8); -static void CreateDeoxysRockFragments(struct Sprite*); -static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite); +static void DestroyDeoxysRockEffect_CameraShake(s16 *, u8); +static void DestroyDeoxysRockEffect_RockFragments(s16 *, u8); +static void DestroyDeoxysRockEffect_WaitAndEnd(s16 *, u8); +static void CreateDeoxysRockFragments(struct Sprite *); +static void SpriteCB_DeoxysRockFragment(struct Sprite *sprite); static void Task_MoveDeoxysRock(u8 taskId); @@ -243,32 +243,33 @@ extern u8 *gFieldEffectScriptPointers[]; extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; static const u32 sNewGameBirch_Gfx[] = INCBIN_U32("graphics/birch_speech/birch.4bpp"); -static const u32 sUnusedBirchBeauty[] = INCBIN_U32("graphics/unused/intro_birch_beauty.4bpp"); +static const u32 sUnusedBirchBeauty[] = INCBIN_U32("graphics/birch_speech/unused_beauty.4bpp"); static const u16 sNewGameBirch_Pal[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal"); -static const u32 sPokeballGlow_Gfx[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp"); + +static const u32 sPokeballGlow_Gfx[] = INCBIN_U32("graphics/field_effects/pics/pokeball_glow.4bpp"); static const u16 sPokeballGlow_Pal[16] = INCBIN_U16("graphics/field_effects/palettes/pokeball_glow.gbapal"); -static const u32 sPokecenterMonitor0_Gfx[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp"); -static const u32 sPokecenterMonitor1_Gfx[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp"); -static const u32 sHofMonitorBig_Gfx[] = INCBIN_U32("graphics/misc/hof_monitor_big.4bpp"); -static const u8 sHofMonitorSmall_Gfx[] = INCBIN_U8("graphics/misc/hof_monitor_small.4bpp"); +static const u32 sPokecenterMonitor0_Gfx[] = INCBIN_U32("graphics/field_effects/pics/pokecenter_monitor/0.4bpp"); +static const u32 sPokecenterMonitor1_Gfx[] = INCBIN_U32("graphics/field_effects/pics/pokecenter_monitor/1.4bpp"); +static const u32 sHofMonitorBig_Gfx[] = INCBIN_U32("graphics/field_effects/pics/hof_monitor_big.4bpp"); +static const u8 sHofMonitorSmall_Gfx[] = INCBIN_U8("graphics/field_effects/pics/hof_monitor_small.4bpp"); static const u16 sHofMonitor_Pal[16] = INCBIN_U16("graphics/field_effects/palettes/hof_monitor.gbapal"); // Graphics for the lights streaking past your Pokemon when it uses a field move. -static const u32 sFieldMoveStreaksOutdoors_Gfx[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp"); -static const u16 sFieldMoveStreaksOutdoors_Pal[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal"); -static const u16 sFieldMoveStreaksOutdoors_Tilemap[320] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin"); +static const u32 sFieldMoveStreaksOutdoors_Gfx[] = INCBIN_U32("graphics/field_effects/pics/field_move_streaks.4bpp"); +static const u16 sFieldMoveStreaksOutdoors_Pal[16] = INCBIN_U16("graphics/field_effects/pics/field_move_streaks.gbapal"); +static const u16 sFieldMoveStreaksOutdoors_Tilemap[320] = INCBIN_U16("graphics/field_effects/pics/field_move_streaks.bin"); // The following light streaks effect is used when the map is indoors -static const u32 sFieldMoveStreaksIndoors_Gfx[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp"); -static const u16 sFieldMoveStreaksIndoors_Pal[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal"); -static const u16 sFieldMoveStreaksIndoors_Tilemap[320] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin"); +static const u32 sFieldMoveStreaksIndoors_Gfx[] = INCBIN_U32("graphics/field_effects/pics/field_move_streaks_indoors.4bpp"); +static const u16 sFieldMoveStreaksIndoors_Pal[16] = INCBIN_U16("graphics/field_effects/pics/field_move_streaks_indoors.gbapal"); +static const u16 sFieldMoveStreaksIndoors_Tilemap[320] = INCBIN_U16("graphics/field_effects/pics/field_move_streaks_indoors.bin"); -static const u16 sSpotlight_Pal[16] = INCBIN_U16("graphics/misc/spotlight.gbapal"); -static const u8 sSpotlight_Gfx[] = INCBIN_U8("graphics/misc/spotlight.4bpp"); -static const u8 sRockFragment_TopLeft[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_top_left.4bpp"); -static const u8 sRockFragment_TopRight[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_top_right.4bpp"); -static const u8 sRockFragment_BottomLeft[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_bottom_left.4bpp"); -static const u8 sRockFragment_BottomRight[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_bottom_right.4bpp"); +static const u16 sSpotlight_Pal[16] = INCBIN_U16("graphics/field_effects/pics/spotlight.gbapal"); +static const u8 sSpotlight_Gfx[] = INCBIN_U8("graphics/field_effects/pics/spotlight.4bpp"); +static const u8 sRockFragment_TopLeft[] = INCBIN_U8("graphics/field_effects/pics/deoxys_rock_fragment_top_left.4bpp"); +static const u8 sRockFragment_TopRight[] = INCBIN_U8("graphics/field_effects/pics/deoxys_rock_fragment_top_right.4bpp"); +static const u8 sRockFragment_BottomLeft[] = INCBIN_U8("graphics/field_effects/pics/deoxys_rock_fragment_bottom_left.4bpp"); +static const u8 sRockFragment_BottomRight[] = INCBIN_U8("graphics/field_effects/pics/deoxys_rock_fragment_bottom_right.4bpp"); bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) = { @@ -348,7 +349,7 @@ static const union AnimCmd *const sAnimTable_NewGameBirch[] = static const struct SpriteTemplate sSpriteTemplate_NewGameBirch = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0x1006, .oam = &sOam_64x64, .anims = sAnimTable_NewGameBirch, @@ -407,35 +408,35 @@ static const struct SpriteFrameImage sPicTable_HofMonitorSmall[] = static const struct Subsprite sSubsprites_PokecenterMonitor[] = { { - .x = -12, - .y = -8, - .shape = SPRITE_SHAPE(16x8), + .x = -12, + .y = -8, + .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), - .tileOffset = 0, + .tileOffset = 0, .priority = 2 }, { - .x = 4, + .x = 4, .y = -8, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 2, - .priority = 2 - }, - { - .x = -12, - .y = 0, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 3, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 2, .priority = 2 }, { - .x = 4, - .y = 0, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 5, + .x = -12, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 3, + .priority = 2 + }, + { + .x = 4, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 5, .priority = 2 } }; @@ -445,48 +446,48 @@ static const struct SubspriteTable sSubspriteTable_PokecenterMonitor = subsprite static const struct Subsprite sSubsprites_HofMonitorBig[] = { { - .x = -32, - .y = -8, - .shape = SPRITE_SHAPE(32x8), + .x = -32, + .y = -8, + .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .tileOffset = 0, .priority = 2 }, { - .x = 0, - .y = -8, - .shape = SPRITE_SHAPE(32x8), + .x = 0, + .y = -8, + .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileOffset = 4, + .tileOffset = 4, .priority = 2 }, { - .x = -32, - .y = 0, - .shape = SPRITE_SHAPE(32x8), + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileOffset = 8, + .tileOffset = 8, .priority = 2 }, { - .x = 0, - .y = 0, - .shape = SPRITE_SHAPE(32x8), + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileOffset = 12, + .tileOffset = 12, .priority = 2 } }; static const struct SubspriteTable sSubspriteTable_HofMonitorBig = subsprite_table(sSubsprites_HofMonitorBig); -const union AnimCmd sAnim_Static[] = +static const union AnimCmd sAnim_Static[] = { ANIMCMD_FRAME(.imageValue = 0, .duration = 1), ANIMCMD_JUMP(0) }; -const union AnimCmd sAnim_Flicker[] = +static const union AnimCmd sAnim_Flicker[] = { ANIMCMD_FRAME(.imageValue = 0, .duration = 16), ANIMCMD_FRAME(.imageValue = 1, .duration = 16), @@ -500,7 +501,7 @@ const union AnimCmd sAnim_Flicker[] = }; // Flicker on and off, for the Pokéballs / monitors during the PokéCenter heal effect -const union AnimCmd *const sAnims_Flicker[] = +static const union AnimCmd *const sAnims_Flicker[] = { sAnim_Static, sAnim_Flicker @@ -513,7 +514,7 @@ static const union AnimCmd *const sAnims_HofMonitor[] = static const struct SpriteTemplate sSpriteTemplate_PokeballGlow = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_POKEBALL_GLOW, .oam = &sOam_8x8, .anims = sAnims_Flicker, @@ -524,7 +525,7 @@ static const struct SpriteTemplate sSpriteTemplate_PokeballGlow = static const struct SpriteTemplate sSpriteTemplate_PokecenterMonitor = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &sOam_16x16, .anims = sAnims_Flicker, @@ -535,7 +536,7 @@ static const struct SpriteTemplate sSpriteTemplate_PokecenterMonitor = static const struct SpriteTemplate sSpriteTemplate_HofMonitorBig = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_HOF_MONITOR, .oam = &sOam_16x16, .anims = sAnims_HofMonitor, @@ -546,7 +547,7 @@ static const struct SpriteTemplate sSpriteTemplate_HofMonitorBig = static const struct SpriteTemplate sSpriteTemplate_HofMonitorSmall = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_HOF_MONITOR, .oam = &sOam_32x16, .anims = sAnims_HofMonitor, @@ -555,7 +556,7 @@ static const struct SpriteTemplate sSpriteTemplate_HofMonitorSmall = .callback = SpriteCB_HallOfFameMonitor }; -void (*const sPokecenterHealEffectFuncs[])(struct Task *) = +static void (*const sPokecenterHealEffectFuncs[])(struct Task *) = { PokecenterHealEffect_Init, PokecenterHealEffect_WaitForBallPlacement, @@ -563,7 +564,7 @@ void (*const sPokecenterHealEffectFuncs[])(struct Task *) = PokecenterHealEffect_WaitForSoundAndEnd }; -void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) = +static void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) = { HallOfFameRecordEffect_Init, HallOfFameRecordEffect_WaitForBallPlacement, @@ -571,7 +572,7 @@ void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) = HallOfFameRecordEffect_WaitForSoundAndEnd }; -void (*const sPokeballGlowEffectFuncs[])(struct Sprite *) = +static void (*const sPokeballGlowEffectFuncs[])(struct Sprite *) = { PokeballGlowEffect_PlaceBalls, PokeballGlowEffect_TryPlaySe, @@ -597,7 +598,7 @@ static const u8 sPokeballGlowReds[] = {16, 12, 8, 0}; static const u8 sPokeballGlowGreens[] = {16, 12, 8, 0}; static const u8 sPokeballGlowBlues[] = { 0, 0, 0, 0}; -bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) = +static bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) = { FallWarpEffect_Init, FallWarpEffect_WaitWeather, @@ -608,7 +609,7 @@ bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) = FallWarpEffect_End, }; -bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) = +static bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) = { EscalatorWarpOut_Init, EscalatorWarpOut_WaitForPlayer, @@ -618,7 +619,7 @@ bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) = EscalatorWarpOut_Down_End, }; -bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) = +static bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) = { EscalatorWarpIn_Init, EscalatorWarpIn_Down_Init, @@ -629,7 +630,7 @@ bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) = EscalatorWarpIn_End, }; -bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) = +static bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) = { WaterfallFieldEffect_Init, WaterfallFieldEffect_ShowMon, @@ -638,14 +639,14 @@ bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) WaterfallFieldEffect_ContinueRideOrEnd, }; -bool8 (*const sDiveFieldEffectFuncs[])(struct Task *) = +static bool8 (*const sDiveFieldEffectFuncs[])(struct Task *) = { DiveFieldEffect_Init, DiveFieldEffect_ShowMon, DiveFieldEffect_TryWarp, }; -bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = +static bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { LavaridgeGymB1FWarpEffect_Init, LavaridgeGymB1FWarpEffect_CameraShake, @@ -655,7 +656,7 @@ bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEve LavaridgeGymB1FWarpEffect_Warp, }; -bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = +static bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { LavaridgeGymB1FWarpExitEffect_Init, LavaridgeGymB1FWarpExitEffect_StartPopOut, @@ -663,7 +664,7 @@ bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct Objec LavaridgeGymB1FWarpExitEffect_End, }; -bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = +static bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { LavaridgeGym1FWarpEffect_Init, LavaridgeGym1FWarpEffect_AshPuff, @@ -672,7 +673,7 @@ bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEven LavaridgeGym1FWarpEffect_Warp, }; -void (*const sEscapeRopeWarpOutEffectFuncs[])(struct Task *) = +static void (*const sEscapeRopeWarpOutEffectFuncs[])(struct Task *) = { EscapeRopeWarpOutEffect_Init, EscapeRopeWarpOutEffect_Spin, @@ -809,7 +810,7 @@ void FieldEffectFreeTilesIfUnused(u16 tileStart) u8 i; u16 tag = GetSpriteTileTagByTileStart(tileStart); - if (tag != 0xFFFF) + if (tag != TAG_NONE) { for (i = 0; i < MAX_SPRITES; i++) if (gSprites[i].inUse && gSprites[i].usingSheet && tileStart == gSprites[i].sheetTileStart) @@ -823,7 +824,7 @@ void FieldEffectFreePaletteIfUnused(u8 paletteNum) u8 i; u16 tag = GetSpritePaletteTagByPaletteNum(paletteNum); - if (tag != 0xFFFF) + if (tag != TAG_NONE) { for (i = 0; i < MAX_SPRITES; i++) if (gSprites[i].inUse && gSprites[i].oam.paletteNum == paletteNum) @@ -903,7 +904,7 @@ u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority) u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) { - s32 spriteId = CreateMonPicSprite(species, 0, 0x8000, 1, x, y, 0, gMonPaletteTable[species].tag); + s32 spriteId = CreateMonPicSprite(species, 0, 0x8000, TRUE, x, y, 0, gMonPaletteTable[species].tag); PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10); if (spriteId == 0xFFFF) return MAX_SPRITES; @@ -914,7 +915,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) u8 CreateMonSprite_FieldMove(u16 species, u32 otId, u32 personality, s16 x, s16 y, u8 subpriority) { const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); - u16 spriteId = CreateMonPicSprite(species, otId, personality, 1, x, y, 0, spritePalette->tag); + u16 spriteId = CreateMonPicSprite(species, otId, personality, TRUE, x, y, 0, spritePalette->tag); PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); if (spriteId == 0xFFFF) return MAX_SPRITES; @@ -937,19 +938,19 @@ void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) { int curRed, curGreen, curBlue; u16 color = gPlttBufferUnfaded[i]; - + curRed = (color & RGB_RED); curGreen = (color & RGB_GREEN) >> 5; curBlue = (color & RGB_BLUE) >> 10; - + curRed += (((0x1F - curRed) * r) >> 4); curGreen += (((0x1F - curGreen) * g) >> 4); curBlue += (((0x1F - curBlue) * b) >> 4); - + color = curRed; color |= (curGreen << 5); color |= (curBlue << 10); - + gPlttBufferFaded[i] = color; } @@ -958,19 +959,19 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) { int curRed, curGreen, curBlue; u16 color = gPlttBufferUnfaded[i]; - + curRed = (color & RGB_RED); curGreen = (color & RGB_GREEN) >> 5; curBlue = (color & RGB_BLUE) >> 10; - + curRed -= ((curRed * r) >> 4); curGreen -= ((curGreen * g) >> 4); curBlue -= ((curBlue * b) >> 4); - + color = curRed; color |= (curGreen << 5); color |= (curBlue << 10); - + gPlttBufferFaded[i] = color; } @@ -1336,7 +1337,7 @@ static void FieldCallback_UseFly(void) { FadeInFromBlack(); CreateTask(Task_UseFly, 0); - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); gFieldCallback = NULL; } @@ -1377,7 +1378,7 @@ static void FieldCallback_FlyIntoMap(void) { ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_WEST); } - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); gFieldCallback = NULL; } @@ -1397,7 +1398,7 @@ static void Task_FlyIntoMap(u8 taskId) } if (!FieldEffectActiveListContains(FLDEFF_FLY_IN)) { - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); UnfreezeObjectEvents(); DestroyTask(taskId); } @@ -1416,7 +1417,7 @@ void FieldCB_FallWarpExit(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); CreateTask(Task_FallWarpFieldEffect, 0); gFieldCallback = NULL; @@ -1530,7 +1531,7 @@ static bool8 FallWarpEffect_CameraShake(struct Task *task) static bool8 FallWarpEffect_End(struct Task *task) { gPlayerAvatar.preventStep = FALSE; - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); CameraObjectReset1(); UnfreezeObjectEvents(); InstallCameraPanAheadCallback(); @@ -1682,7 +1683,7 @@ static void FieldCallback_EscalatorWarpIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); CreateTask(Task_EscalatorWarpIn, 0); gFieldCallback = NULL; } @@ -1715,7 +1716,7 @@ static bool8 EscalatorWarpIn_Init(struct Task *task) // If dest is down escalator tile, player is riding up behavior = TRUE; task->tState = 3; // jump to EscalatorWarpIn_Up_Init - } + } else // MB_UP_ESCALATOR { // If dest is up escalator tile, player is riding down @@ -1803,7 +1804,7 @@ static bool8 EscalatorWarpIn_End(struct Task *task) if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { CameraObjectReset1(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); ObjectEventSetHeldMovement(objectEvent, GetWalkNormalMovementAction(DIR_EAST)); DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpIn)); } @@ -1831,7 +1832,7 @@ static void Task_UseWaterfall(u8 taskId) static bool8 WaterfallFieldEffect_Init(struct Task *task, struct ObjectEvent *objectEvent) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); gPlayerAvatar.preventStep = TRUE; task->tState++; return FALSE; @@ -1839,7 +1840,7 @@ static bool8 WaterfallFieldEffect_Init(struct Task *task, struct ObjectEvent *ob static bool8 WaterfallFieldEffect_ShowMon(struct Task *task, struct ObjectEvent *objectEvent) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); if (!ObjectEventIsMovementOverridden(objectEvent)) { ObjectEventClearHeldMovementIfFinished(objectEvent); @@ -1879,7 +1880,7 @@ static bool8 WaterfallFieldEffect_ContinueRideOrEnd(struct Task *task, struct Ob return TRUE; } - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); gPlayerAvatar.preventStep = FALSE; DestroyTask(FindTaskIdByFunc(Task_UseWaterfall)); FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); @@ -1913,7 +1914,7 @@ static bool8 DiveFieldEffect_Init(struct Task *task) static bool8 DiveFieldEffect_ShowMon(struct Task *task) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); gFieldEffectArguments[0] = task->data[15]; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); task->data[0]++; @@ -2051,7 +2052,7 @@ static void FieldCB_LavaridgeGymB1FWarpExit(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); gFieldCallback = NULL; CreateTask(Task_LavaridgeGymB1FWarpExit, 0); } @@ -2104,7 +2105,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_End(struct Task *task, struct ObjectE if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { gPlayerAvatar.preventStep = FALSE; - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); UnfreezeObjectEvents(); DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarpExit)); } @@ -2163,7 +2164,7 @@ static bool8 LavaridgeGym1FWarpEffect_AshPuff(struct Task *task, struct ObjectEv } else { task->data[1]++; - ObjectEventSetHeldMovement(objectEvent, GetWalkInPlaceFastestMovementAction(objectEvent->facingDirection)); + ObjectEventSetHeldMovement(objectEvent, GetWalkInPlaceFasterMovementAction(objectEvent->facingDirection)); PlaySE(SE_LAVARIDGE_FALL_WARP); } } @@ -2228,7 +2229,7 @@ void SpriteCB_AshPuff(struct Sprite *sprite) void StartEscapeRopeFieldEffect(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); CreateTask(Task_EscapeRopeWarpOut, 80); } @@ -2265,7 +2266,7 @@ static void EscapeRopeWarpOutEffect_Spin(struct Task *task) gFieldCallback = FieldCallback_EscapeRopeWarpIn; SetMainCallback2(CB2_LoadMap); DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpOut)); - } + } else if (task->tSpinDelay == 0 || (--task->tSpinDelay) == 0) { ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(spinDirections[objectEvent->facingDirection])); @@ -2276,7 +2277,7 @@ static void EscapeRopeWarpOutEffect_Spin(struct Task *task) } } -void (*const sEscapeRopeWarpInEffectFuncs[])(struct Task *) = { +static void (*const sEscapeRopeWarpInEffectFuncs[])(struct Task *) = { EscapeRopeWarpInEffect_Init, EscapeRopeWarpInEffect_Spin }; @@ -2285,7 +2286,7 @@ static void FieldCallback_EscapeRopeWarpIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); gFieldCallback = NULL; gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; @@ -2319,7 +2320,7 @@ static void EscapeRopeWarpInEffect_Spin(struct Task *task) if (task->tNumTurns >= 32 && task->tStartDir == GetPlayerFacingDirection()) { objectEvent->invisible = FALSE; - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); UnfreezeObjectEvents(); DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpIn)); return; @@ -2359,7 +2360,7 @@ static void Task_TeleportWarpOut(u8 taskId) static void TeleportWarpOutFieldEffect_Init(struct Task *task) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); CameraObjectReset2(); task->data[15] = GetPlayerFacingDirection(); @@ -2439,7 +2440,7 @@ static void FieldCallback_TeleportWarpIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); gFieldCallback = NULL; gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; @@ -2447,7 +2448,7 @@ static void FieldCallback_TeleportWarpIn(void) CreateTask(Task_TeleportWarpIn, 0); } -void (*const sTeleportWarpInFieldEffectFuncs[])(struct Task *) = { +static void (*const sTeleportWarpInFieldEffectFuncs[])(struct Task *) = { TeleportWarpInFieldEffect_Init, TeleportWarpInFieldEffect_SpinEnter, TeleportWarpInFieldEffect_SpinGround @@ -2526,7 +2527,7 @@ static void TeleportWarpInFieldEffect_SpinGround(struct Task *task) task->data[1] = 8; if ((++task->data[2]) > 4 && task->data[14] == objectEvent->facingDirection) { - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); CameraObjectReset1(); UnfreezeObjectEvents(); DestroyTask(FindTaskIdByFunc(Task_TeleportWarpIn)); @@ -2565,21 +2566,23 @@ bool8 FldEff_FieldMoveShowMon(void) return FALSE; } +#define SHOW_MON_CRY_NO_DUCKING (1 << 31) + bool8 FldEff_FieldMoveShowMonInit(void) { struct Pokemon *pokemon; - u32 flag = gFieldEffectArguments[0] & 0x80000000; + bool32 noDucking = gFieldEffectArguments[0] & SHOW_MON_CRY_NO_DUCKING; pokemon = &gPlayerParty[(u8)gFieldEffectArguments[0]]; gFieldEffectArguments[0] = GetMonData(pokemon, MON_DATA_SPECIES); gFieldEffectArguments[1] = GetMonData(pokemon, MON_DATA_OT_ID); gFieldEffectArguments[2] = GetMonData(pokemon, MON_DATA_PERSONALITY); - gFieldEffectArguments[0] |= flag; + gFieldEffectArguments[0] |= noDucking; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON); FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); return FALSE; } -void (*const sFieldMoveShowMonOutdoorsEffectFuncs[])(struct Task *) = { +static void (*const sFieldMoveShowMonOutdoorsEffectFuncs[])(struct Task *) = { FieldMoveShowMonOutdoorsEffect_Init, FieldMoveShowMonOutdoorsEffect_LoadGfx, FieldMoveShowMonOutdoorsEffect_CreateBanner, @@ -2617,7 +2620,7 @@ static void FieldMoveShowMonOutdoorsEffect_LoadGfx(struct Task *task) u16 delta = ((REG_BG0CNT >> 8) << 11); CpuCopy16(sFieldMoveStreaksOutdoors_Gfx, (void *)(VRAM + offset), 0x200); CpuFill32(0, (void *)(VRAM + delta), 0x800); - LoadPalette(sFieldMoveStreaksOutdoors_Pal, 0xf0, 0x20); + LoadPalette(sFieldMoveStreaksOutdoors_Pal, 0xf0, sizeof(sFieldMoveStreaksOutdoors_Pal)); LoadFieldMoveOutdoorStreaksTilemap(delta); task->tState++; } @@ -2747,7 +2750,7 @@ static void LoadFieldMoveOutdoorStreaksTilemap(u16 offs) #define tBgOffset data[4] #define tMonSpriteId data[15] -void (*const sFieldMoveShowMonIndoorsEffectFuncs[])(struct Task *) = { +static void (*const sFieldMoveShowMonIndoorsEffectFuncs[])(struct Task *) = { FieldMoveShowMonIndoorsEffect_Init, FieldMoveShowMonIndoorsEffect_LoadGfx, FieldMoveShowMonIndoorsEffect_SlideBannerOn, @@ -2780,7 +2783,7 @@ static void FieldMoveShowMonIndoorsEffect_LoadGfx(struct Task *task) task->data[12] = delta; CpuCopy16(sFieldMoveStreaksIndoors_Gfx, (void *)(VRAM + offset), 0x80); CpuFill32(0, (void *)(VRAM + delta), 0x800); - LoadPalette(sFieldMoveStreaksIndoors_Pal, 0xf0, 0x20); + LoadPalette(sFieldMoveStreaksIndoors_Pal, 0xf0, sizeof(sFieldMoveStreaksIndoors_Pal)); task->tState++; } @@ -2913,17 +2916,17 @@ static bool8 SlideIndoorBannerOffscreen(struct Task *task) static u8 InitFieldMoveMonSprite(u32 species, u32 otId, u32 personality) { - u16 v0; + bool16 noDucking; u8 monSprite; struct Sprite *sprite; - v0 = (species & 0x80000000) >> 16; - species &= 0x7fffffff; + noDucking = (species & SHOW_MON_CRY_NO_DUCKING) >> 16; + species &= ~SHOW_MON_CRY_NO_DUCKING; monSprite = CreateMonSprite_FieldMove(species, otId, personality, 320, 80, 0); sprite = &gSprites[monSprite]; sprite->callback = SpriteCallbackDummy; sprite->oam.priority = 0; sprite->sSpecies = species; - sprite->data[6] = v0; + sprite->data[6] = noDucking; return monSprite; } @@ -2935,13 +2938,9 @@ static void SpriteCB_FieldMoveMonSlideOnscreen(struct Sprite *sprite) sprite->sOnscreenTimer = 30; sprite->callback = SpriteCB_FieldMoveMonWaitAfterCry; if (sprite->data[6]) - { - PlayCry2(sprite->sSpecies, 0, 0x7d, 0xa); - } + PlayCry_NormalNoDucking(sprite->sSpecies, 0, CRY_VOLUME_RS, CRY_PRIORITY_NORMAL); else - { - PlayCry1(sprite->sSpecies, 0); - } + PlayCry_Normal(sprite->sSpecies, 0); } } @@ -2979,7 +2978,7 @@ u8 FldEff_UseSurf(void) return FALSE; } -void (*const sSurfFieldEffectFuncs[])(struct Task *) = { +static void (*const sSurfFieldEffectFuncs[])(struct Task *) = { SurfFieldEffect_Init, SurfFieldEffect_FieldMovePose, SurfFieldEffect_ShowMon, @@ -2994,7 +2993,7 @@ static void Task_SurfFieldEffect(u8 taskId) static void SurfFieldEffect_Init(struct Task *task) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING); @@ -3021,7 +3020,7 @@ static void SurfFieldEffect_ShowMon(struct Task *task) objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventCheckHeldMovementStatus(objectEvent)) { - gFieldEffectArguments[0] = task->tMonId | 0x80000000; + gFieldEffectArguments[0] = task->tMonId | SHOW_MON_CRY_NO_DUCKING; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); task->tState++; } @@ -3051,11 +3050,11 @@ static void SurfFieldEffect_End(struct Task *task) if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { gPlayerAvatar.preventStep = FALSE; - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_CONTROLLABLE; ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection)); SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_PLAYER_AND_MON); UnfreezeObjectEvents(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); FieldEffectActiveListRemove(FLDEFF_USE_SURF); DestroyTask(FindTaskIdByFunc(Task_SurfFieldEffect)); } @@ -3089,15 +3088,15 @@ u8 FldEff_RayquazaSpotlight(void) { for (j = 12; j < 18; j++) { - ((u16*)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0xBFF4 + i * 6 + j + 1; + ((u16 *)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0xBFF4 + i * 6 + j + 1; } } for (k = 0; k < 90; k++) { for (i = 0; i < 8; i++) { - *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4) = (sSpotlight_Gfx[k * 32 + i * 4 + 1] << 8) + sSpotlight_Gfx[k * 32 + i * 4]; - *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4 + 2) = (sSpotlight_Gfx[k * 32 + i * 4 + 3] << 8) + sSpotlight_Gfx[k * 32 + i * 4 + 2]; + *(u16 *)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4) = (sSpotlight_Gfx[k * 32 + i * 4 + 1] << 8) + sSpotlight_Gfx[k * 32 + i * 4]; + *(u16 *)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4 + 2) = (sSpotlight_Gfx[k * 32 + i * 4 + 3] << 8) + sSpotlight_Gfx[k * 32 + i * 4 + 2]; } } return spriteId; @@ -3155,7 +3154,7 @@ u8 FldEff_UseFly(void) return 0; } -void (*const sFlyOutFieldEffectFuncs[])(struct Task *) = { +static void (*const sFlyOutFieldEffectFuncs[])(struct Task *) = { FlyOutFieldEffect_FieldMovePose, FlyOutFieldEffect_ShowMon, FlyOutFieldEffect_BirdLeaveBall, @@ -3240,7 +3239,7 @@ static void FlyOutFieldEffect_JumpOnBird(struct Task *task) { struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); - StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16); + StartSpriteAnim(&gSprites[objectEvent->spriteId], ANIM_GET_ON_OFF_POKEMON_WEST); objectEvent->inanimate = TRUE; ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT); if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING) @@ -3445,7 +3444,7 @@ u8 FldEff_FlyIn(void) return 0; } -void (*const sFlyInFieldEffectFuncs[])(struct Task *) = { +static void (*const sFlyInFieldEffectFuncs[])(struct Task *) = { FlyInFieldEffect_BirdSwoopDown, FlyInFieldEffect_FlyInWithBird, FlyInFieldEffect_JumpOffBird, @@ -3478,7 +3477,7 @@ static void FlyInFieldEffect_BirdSwoopDown(struct Task *task) ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); CameraObjectReset2(); ObjectEventTurn(objectEvent, DIR_WEST); - StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16); + StartSpriteAnim(&gSprites[objectEvent->spriteId], ANIM_GET_ON_OFF_POKEMON_WEST); objectEvent->invisible = FALSE; task->tBirdSpriteId = CreateFlyBirdSprite(); StartFlyBirdSwoopDown(task->tBirdSpriteId); @@ -3676,7 +3675,7 @@ static void StartEndingDeoxysRockCameraShake(u8 taskId) #undef tEndDelay #undef tEnding -void (*const sDestroyDeoxysRockEffectFuncs[])(s16*, u8) = { +static void (*const sDestroyDeoxysRockEffectFuncs[])(s16 *, u8) = { DestroyDeoxysRockEffect_CameraShake, DestroyDeoxysRockEffect_RockFragments, DestroyDeoxysRockEffect_WaitAndEnd, @@ -3690,7 +3689,7 @@ static void Task_DestroyDeoxysRock(u8 taskId) sDestroyDeoxysRockEffectFuncs[tState](data, taskId); } -static void DestroyDeoxysRockEffect_CameraShake(s16* data, u8 taskId) +static void DestroyDeoxysRockEffect_CameraShake(s16 *data, u8 taskId) { u8 newTaskId = CreateTask(Task_DeoxysRockCameraShake, 90); PlaySE(SE_THUNDER2); @@ -3698,7 +3697,7 @@ static void DestroyDeoxysRockEffect_CameraShake(s16* data, u8 taskId) tState++; } -static void DestroyDeoxysRockEffect_RockFragments(s16* data, u8 taskId) +static void DestroyDeoxysRockEffect_RockFragments(s16 *data, u8 taskId) { if (++tTimer > 120) { @@ -3714,7 +3713,7 @@ static void DestroyDeoxysRockEffect_RockFragments(s16* data, u8 taskId) } } -static void DestroyDeoxysRockEffect_WaitAndEnd(s16* data, u8 taskId) +static void DestroyDeoxysRockEffect_WaitAndEnd(s16 *data, u8 taskId) { if (!gPaletteFade.active && !FuncIsActiveTask(Task_DeoxysRockCameraShake)) { @@ -3768,7 +3767,7 @@ static const union AnimCmd *const sAnims_DeoxysRockFragment[] = { }; static const struct SpriteTemplate sSpriteTemplate_DeoxysRockFragment = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 4378, .oam = &sOam_8x8, .anims = sAnims_DeoxysRockFragment, @@ -3777,7 +3776,7 @@ static const struct SpriteTemplate sSpriteTemplate_DeoxysRockFragment = { .callback = SpriteCB_DeoxysRockFragment }; -static void CreateDeoxysRockFragments(struct Sprite* sprite) +static void CreateDeoxysRockFragments(struct Sprite *sprite) { int i; int xPos = (s16)gTotalCameraPixelOffsetX + sprite->x + sprite->x2; @@ -3795,7 +3794,7 @@ static void CreateDeoxysRockFragments(struct Sprite* sprite) } } -static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite) +static void SpriteCB_DeoxysRockFragment(struct Sprite *sprite) { // 1 case for each fragment, fly off in 4 different directions switch (sprite->data[0]) @@ -3817,11 +3816,11 @@ static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite) sprite->y += 12; break; } - if ((u16)(sprite->x + 4) > DISPLAY_WIDTH + 8 || sprite->y < -4 || sprite->y > DISPLAY_HEIGHT + 4) + if (sprite->x < -4 || sprite->x > DISPLAY_WIDTH + 4 || sprite->y < -4 || sprite->y > DISPLAY_HEIGHT + 4) DestroySprite(sprite); } -bool8 FldEff_MoveDeoxysRock(struct Sprite* sprite) +bool8 FldEff_MoveDeoxysRock(struct Sprite *sprite) { u8 objectEventIdBuffer; if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer)) @@ -3830,11 +3829,11 @@ bool8 FldEff_MoveDeoxysRock(struct Sprite* sprite) int xPos, yPos; u8 taskId; object = &gObjectEvents[objectEventIdBuffer]; - xPos = object->currentCoords.x - 7; - yPos = object->currentCoords.y - 7; + xPos = object->currentCoords.x - MAP_OFFSET; + yPos = object->currentCoords.y - MAP_OFFSET; xPos = (gFieldEffectArguments[3] - xPos) * 16; yPos = (gFieldEffectArguments[4] - yPos) * 16; - ShiftObjectEventCoords(object, gFieldEffectArguments[3] + 7, gFieldEffectArguments[4] + 7); + ShiftObjectEventCoords(object, gFieldEffectArguments[3] + MAP_OFFSET, gFieldEffectArguments[4] + MAP_OFFSET); taskId = CreateTask(Task_MoveDeoxysRock, 80); gTasks[taskId].data[1] = object->spriteId; gTasks[taskId].data[2] = gSprites[object->spriteId].x + xPos; diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index eab7d85ef0..5b8123a71d 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -37,7 +37,7 @@ static u32 ShowDisguiseFieldEffect(u8, u8, u8); #define sReflectionObjEventId data[0] #define sReflectionObjEventLocalId data[1] -#define sReflectionVerticalOffset data[2] +#define sReflectionVerticalOffset data[2] #define sIsStillReflection data[7] void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, bool8 stillReflection) @@ -71,9 +71,15 @@ static s16 GetReflectionVerticalOffset(struct ObjectEvent *objectEvent) static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *reflectionSprite) { u8 bridgeType; - u16 bridgeReflectionVerticalOffsets[] = { 12, 28, 44 }; + u16 bridgeReflectionVerticalOffsets[] = { + [BRIDGE_TYPE_POND_LOW - 1] = 12, + [BRIDGE_TYPE_POND_MED - 1] = 28, + [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 (!GetObjectEventGraphicsInfo(objectEvent->graphicsId)->disableReflectionPaletteLoad + && ((bridgeType = MetatileBehavior_GetBridgeType(objectEvent->previousMetatileBehavior)) + || (bridgeType = MetatileBehavior_GetBridgeType(objectEvent->currentMetatileBehavior)))) { reflectionSprite->sReflectionVerticalOffset = bridgeReflectionVerticalOffsets[bridgeType - 1]; LoadObjectHighBridgeReflectionPalette(objectEvent, reflectionSprite->oam.paletteNum); @@ -337,8 +343,8 @@ void UpdateTallGrassFieldEffect(struct Sprite *sprite) mapGroup = sprite->sMapGroup; metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->sX, sprite->sY); - if (TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId) - || !MetatileBehavior_IsTallGrass(metatileBehavior) + if (TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId) + || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->sObjectMoved && sprite->animEnded)) { FieldEffectStop(sprite, FLDEFF_TALL_GRASS); @@ -347,13 +353,13 @@ void UpdateTallGrassFieldEffect(struct Sprite *sprite) { // Check if the object that triggered the effect has moved away objectEvent = &gObjectEvents[objectEventId]; - if ((objectEvent->currentCoords.x != sprite->sX - || objectEvent->currentCoords.y != sprite->sY) + if ((objectEvent->currentCoords.x != sprite->sX + || objectEvent->currentCoords.y != sprite->sY) && (objectEvent->previousCoords.x != sprite->sX || objectEvent->previousCoords.y != sprite->sY)) sprite->sObjectMoved = TRUE; - // Metatile behavior var re-used + // Metatile behavior var re-used as subpriority metatileBehavior = 0; if (sprite->animCmdIndex == 0) metatileBehavior = 4; @@ -391,10 +397,10 @@ u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s if (gSprites[i].inUse) { sprite = &gSprites[i]; - if (sprite->callback == UpdateTallGrassFieldEffect - && (x == sprite->sX && y == sprite->sY) - && localId == (u8)(sprite->sLocalId) - && mapNum == (sprite->sMapNum & 0xFF) + if (sprite->callback == UpdateTallGrassFieldEffect + && (x == sprite->sX && y == sprite->sY) + && localId == (u8)(sprite->sLocalId) + && mapNum == (sprite->sMapNum & 0xFF) && mapGroup == sprite->sMapGroup) return i; } @@ -417,7 +423,7 @@ u32 FldEff_LongGrass(void) { sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; - sprite->oam.priority = ZCoordToPriority(gFieldEffectArguments[2]); + sprite->oam.priority = ElevationToPriority(gFieldEffectArguments[2]); sprite->sElevation = gFieldEffectArguments[2]; sprite->sX = gFieldEffectArguments[0]; sprite->sY = gFieldEffectArguments[1]; @@ -452,8 +458,8 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) mapNum = sprite->sMapNum; mapGroup = sprite->sMapGroup; metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]); - if (TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId) - || !MetatileBehavior_IsLongGrass(metatileBehavior) + if (TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId) + || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->sObjectMoved && sprite->animEnded)) { FieldEffectStop(sprite, FLDEFF_LONG_GRASS); @@ -462,9 +468,9 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) { // Check if the object that triggered the effect has moved away objectEvent = &gObjectEvents[objectEventId]; - if ((objectEvent->currentCoords.x != sprite->data[1] - || objectEvent->currentCoords.y != sprite->data[2]) - && (objectEvent->previousCoords.x != sprite->data[1] + if ((objectEvent->currentCoords.x != sprite->data[1] + || objectEvent->currentCoords.y != sprite->data[2]) + && (objectEvent->previousCoords.x != sprite->data[1] || objectEvent->previousCoords.y != sprite->data[2])) sprite->sObjectMoved = TRUE; @@ -481,6 +487,8 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) #undef sCurrentMap #undef sObjectMoved +// Effectively unused as it's not possible in vanilla to jump onto long grass (no adjacent ledges, and can't ride the Acro Bike in it). +// The graphics for this effect do not visually correspond to long grass either. Perhaps these graphics were its original design? u32 FldEff_JumpLongGrass(void) { u8 spriteId; @@ -1102,7 +1110,7 @@ void SynchroniseSurfPosition(struct ObjectEvent *playerObj, struct Sprite *sprit for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = sprite->data[6], y = sprite->data[7]) { MoveCoords(i, &x, &y); - if (MapGridGetZCoordAt(x, y) == 3) + if (MapGridGetElevationAt(x, y) == 3) { sprite->data[5]++; break; @@ -1416,8 +1424,8 @@ u32 FldEff_Sparkle(void) { u8 spriteId; - gFieldEffectArguments[0] += 7; - gFieldEffectArguments[1] += 7; + gFieldEffectArguments[0] += MAP_OFFSET; + gFieldEffectArguments[1] += MAP_OFFSET; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SMALL_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); if (spriteId != MAX_SPRITES) @@ -1517,7 +1525,7 @@ void UpdateRayquazaSpotlightEffect(struct Sprite *sprite) { for (j = 12; j < 18; j++) { - ((u16*)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0xBFF4 + i * 6 + j + 1; + ((u16 *)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0xBFF4 + i * 6 + j + 1; } } } @@ -1603,7 +1611,7 @@ void UpdateRayquazaSpotlightEffect(struct Sprite *sprite) { for (j = 12; j < 18; j++) { - ((u16*)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0; + ((u16 *)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0; } } SetGpuReg(REG_OFFSET_BG0VOFS, 0); @@ -1640,7 +1648,7 @@ void UpdateJumpImpactEffect(struct Sprite *sprite) else { UpdateObjectEventSpriteInvisibility(sprite, FALSE); - SetObjectSubpriorityByZCoord(sprite->sElevation, sprite, 0); + SetObjectSubpriorityByElevation(sprite->sElevation, sprite, 0); } } @@ -1652,14 +1660,14 @@ void WaitFieldEffectSpriteAnim(struct Sprite *sprite) UpdateObjectEventSpriteInvisibility(sprite, FALSE); } -static void UpdateGrassFieldEffectSubpriority(struct Sprite *sprite, u8 z, u8 offset) +static void UpdateGrassFieldEffectSubpriority(struct Sprite *sprite, u8 elevation, u8 subpriority) { u8 i; s16 var, xhi, lyhi, yhi, ylo; const struct ObjectEventGraphicsInfo *graphicsInfo; // Unused Variable struct Sprite *linkedSprite; - SetObjectSubpriorityByZCoord(z, sprite, offset); + SetObjectSubpriorityByElevation(elevation, sprite, subpriority); for (i = 0; i < OBJECT_EVENTS_COUNT; i ++) { struct ObjectEvent *objectEvent = &gObjectEvents[i]; diff --git a/src/field_message_box.c b/src/field_message_box.c index 69d470b84e..64734cc209 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -8,7 +8,7 @@ static EWRAM_DATA u8 sFieldMessageBoxMode = 0; -static void ExpandStringAndStartDrawFieldMessage(const u8*, bool32); +static void ExpandStringAndStartDrawFieldMessage(const u8 *, bool32); static void StartDrawFieldMessage(void); void InitFieldMessageBox(void) @@ -33,7 +33,7 @@ static void Task_DrawFieldMessage(u8 taskId) task->tState++; break; case 1: - DrawDialogueFrame(0, 1); + DrawDialogueFrame(0, TRUE); task->tState++; break; case 2: @@ -105,7 +105,7 @@ static bool8 ForceShowFieldAutoScrollMessage(const u8 *str) return TRUE; } -// Same as ShowFieldMessage, but instead of accepting a +// Same as ShowFieldMessage, but instead of accepting a // string arg it just prints whats already in gStringVar4 bool8 ShowFieldMessageFromBuffer(void) { @@ -116,7 +116,7 @@ bool8 ShowFieldMessageFromBuffer(void) return TRUE; } -static void ExpandStringAndStartDrawFieldMessage(const u8* str, bool32 allowSkippingDelayWithButtonPress) +static void ExpandStringAndStartDrawFieldMessage(const u8 *str, bool32 allowSkippingDelayWithButtonPress) { StringExpandPlaceholders(gStringVar4, str); AddTextPrinterForMessage(allowSkippingDelayWithButtonPress); @@ -132,7 +132,7 @@ static void StartDrawFieldMessage(void) void HideFieldMessageBox(void) { DestroyTask_DrawFieldMessage(); - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(0, TRUE); sFieldMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN; } @@ -152,7 +152,7 @@ bool8 IsFieldMessageBoxHidden(void) static void ReplaceFieldMessageWithFrame(void) { DestroyTask_DrawFieldMessage(); - DrawStdWindowFrame(0, 1); + DrawStdWindowFrame(0, TRUE); sFieldMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN; } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index e5f6007b5c..0f087799e3 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -26,11 +26,13 @@ #include "constants/event_object_movement.h" #include "constants/field_effects.h" #include "constants/items.h" -#include "constants/maps.h" #include "constants/moves.h" #include "constants/songs.h" #include "constants/trainer_types.h" +#define NUM_FORCED_MOVEMENTS 18 +#define NUM_ACRO_BIKE_COLLISIONS 5 + static EWRAM_DATA u8 sSpinStartFacingDir = 0; EWRAM_DATA struct ObjectEvent gObjectEvents[OBJECT_EVENTS_COUNT] = {}; EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {}; @@ -69,24 +71,24 @@ static void PlayerNotOnBikeNotMoving(u8, u16); static void PlayerNotOnBikeTurningInPlace(u8, u16); static void PlayerNotOnBikeMoving(u8, u16); static u8 CheckForPlayerAvatarCollision(u8); -static u8 sub_808B028(u8); -static u8 sub_808B164(struct ObjectEvent *, s16, s16, u8, u8); +static u8 CheckForPlayerAvatarStaticCollision(u8); +static u8 CheckForObjectEventStaticCollision(struct ObjectEvent *, s16, s16, u8, u8); static bool8 CanStopSurfing(s16, s16, u8); static bool8 ShouldJumpLedge(s16, s16, u8); static bool8 TryPushBoulder(s16, s16, u8); static void CheckAcroBikeCollision(s16, s16, u8, u8 *); static void DoPlayerAvatarTransition(void); -static void PlayerAvatarTransition_Dummy(struct ObjectEvent *a); -static void PlayerAvatarTransition_Normal(struct ObjectEvent *a); -static void PlayerAvatarTransition_MachBike(struct ObjectEvent *a); -static void PlayerAvatarTransition_AcroBike(struct ObjectEvent *a); -static void PlayerAvatarTransition_Surfing(struct ObjectEvent *a); -static void PlayerAvatarTransition_Underwater(struct ObjectEvent *a); -static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *a); +static void PlayerAvatarTransition_Dummy(struct ObjectEvent *); +static void PlayerAvatarTransition_Normal(struct ObjectEvent *); +static void PlayerAvatarTransition_MachBike(struct ObjectEvent *); +static void PlayerAvatarTransition_AcroBike(struct ObjectEvent *); +static void PlayerAvatarTransition_Surfing(struct ObjectEvent *); +static void PlayerAvatarTransition_Underwater(struct ObjectEvent *); +static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *); -static bool8 player_is_anim_in_certain_ranges(void); -static bool8 sub_808B618(void); +static bool8 PlayerAnimIsMultiFrameStationary(void); +static bool8 PlayerAnimIsMultiFrameStationaryAndStateNotTurning(void); static bool8 PlayerIsAnimActive(void); static bool8 PlayerCheckIfAnimFinishedOrInactive(void); @@ -94,55 +96,53 @@ static void PlayerRun(u8); static void PlayerNotOnBikeCollide(u8); static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8); -static void PlayCollisionSoundIfNotFacingWarp(u8 a); +static void PlayCollisionSoundIfNotFacingWarp(u8); static void HideShowWarpArrow(struct ObjectEvent *); static void StartStrengthAnim(u8, u8); -static void Task_PushBoulder(u8 taskId); -static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); -static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); -static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static void Task_PushBoulder(u8); +static bool8 PushBoulder_Start(struct Task *, struct ObjectEvent *, struct ObjectEvent *); +static bool8 PushBoulder_Move(struct Task *, struct ObjectEvent *, struct ObjectEvent *); +static bool8 PushBoulder_End(struct Task *, struct ObjectEvent *, struct ObjectEvent *); static void DoPlayerMatJump(void); -static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); -static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent *objectEvent); +static void DoPlayerAvatarSecretBaseMatJump(u8); +static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *, struct ObjectEvent *); static void DoPlayerMatSpin(void); -static void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId); -static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct ObjectEvent *objectEvent); -static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct ObjectEvent *objectEvent); -static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct ObjectEvent *objectEvent); -static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct ObjectEvent *objectEvent); +static void PlayerAvatar_DoSecretBaseMatSpin(u8); +static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *, struct ObjectEvent *); +static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *, struct ObjectEvent *); +static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *, struct ObjectEvent *); +static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *, struct ObjectEvent *); static void CreateStopSurfingTask(u8); -static void Task_StopSurfingInit(u8 taskId); -static void Task_WaitStopSurfing(u8 taskId); +static void Task_StopSurfingInit(u8); +static void Task_WaitStopSurfing(u8); -static void Task_Fishing(u8 taskId); -static u8 Fishing_Init(struct Task *task); -static u8 Fishing_GetRodOut(struct Task *task); -static u8 Fishing_WaitBeforeDots(struct Task *task); -static u8 Fishing_InitDots(struct Task *task); -static u8 Fishing_ShowDots(struct Task *task); -static u8 Fishing_CheckForBite(struct Task *task); -static u8 Fishing_GotBite(struct Task *task); -static u8 Fishing_WaitForA(struct Task *task); -static u8 Fishing_CheckMoreDots(struct Task *task); -static u8 Fishing_MonOnHook(struct Task *task); -static u8 Fishing_StartEncounter(struct Task *task); -static u8 Fishing_NotEvenNibble(struct Task *task); -static u8 Fishing_GotAway(struct Task *task); -static u8 Fishing_NoMon(struct Task *task); -static u8 Fishing_PutRodAway(struct Task *task); -static u8 Fishing_EndNoMon(struct Task *task); +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 void AlignFishingAnimationFrames(void); -static u8 TrySpinPlayerForWarp(struct ObjectEvent *object, s16 *a1); +static u8 TrySpinPlayerForWarp(struct ObjectEvent *, s16 *); -// .rodata - -static bool8 (*const sForcedMovementTestFuncs[])(u8) = +static bool8 (*const sForcedMovementTestFuncs[NUM_FORCED_MOVEMENTS])(u8) = { MetatileBehavior_IsTrickHouseSlipperyFloor, MetatileBehavior_IsIce_2, @@ -164,7 +164,8 @@ static bool8 (*const sForcedMovementTestFuncs[])(u8) = MetatileBehavior_IsMuddySlope, }; -static bool8 (*const sForcedMovementFuncs[])(void) = +// + 1 for ForcedMovement_None, which is excluded above +static bool8 (*const sForcedMovementFuncs[NUM_FORCED_MOVEMENTS + 1])(void) = { ForcedMovement_None, ForcedMovement_Slip, @@ -187,14 +188,14 @@ static bool8 (*const sForcedMovementFuncs[])(void) = ForcedMovement_MuddySlope, }; -static void (*const gUnknown_08497490[])(u8, u16) = +static void (*const sPlayerNotOnBikeFuncs[])(u8, u16) = { - PlayerNotOnBikeNotMoving, - PlayerNotOnBikeTurningInPlace, - PlayerNotOnBikeMoving, + [NOT_MOVING] = PlayerNotOnBikeNotMoving, + [TURN_DIRECTION] = PlayerNotOnBikeTurningInPlace, + [MOVING] = PlayerNotOnBikeMoving, }; -static bool8 (*const sAcroBikeTrickMetatiles[])(u8) = +static bool8 (*const sAcroBikeTrickMetatiles[NUM_ACRO_BIKE_COLLISIONS])(u8) = { MetatileBehavior_IsBumpySlope, MetatileBehavior_IsIsolatedVerticalRail, @@ -203,7 +204,7 @@ static bool8 (*const sAcroBikeTrickMetatiles[])(u8) = MetatileBehavior_IsHorizontalRail, }; -static const u8 sAcroBikeTrickCollisionTypes[] = { +static const u8 sAcroBikeTrickCollisionTypes[NUM_ACRO_BIKE_COLLISIONS] = { COLLISION_WHEELIE_HOP, COLLISION_ISOLATED_VERTICAL_RAIL, COLLISION_ISOLATED_HORIZONTAL_RAIL, @@ -225,41 +226,49 @@ static void (*const sPlayerAvatarTransitionFuncs[])(struct ObjectEvent *) = static bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) = { - MetatileBehavior_IsSouthArrowWarp, - MetatileBehavior_IsNorthArrowWarp, - MetatileBehavior_IsWestArrowWarp, - MetatileBehavior_IsEastArrowWarp, + [DIR_SOUTH - 1] = MetatileBehavior_IsSouthArrowWarp, + [DIR_NORTH - 1] = MetatileBehavior_IsNorthArrowWarp, + [DIR_WEST - 1] = MetatileBehavior_IsWestArrowWarp, + [DIR_EAST - 1] = MetatileBehavior_IsEastArrowWarp, }; static const u8 sRivalAvatarGfxIds[][2] = { - {OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL, OBJ_EVENT_GFX_RIVAL_MAY_NORMAL}, - {OBJ_EVENT_GFX_RIVAL_BRENDAN_MACH_BIKE, OBJ_EVENT_GFX_RIVAL_MAY_MACH_BIKE}, - {OBJ_EVENT_GFX_RIVAL_BRENDAN_ACRO_BIKE, OBJ_EVENT_GFX_RIVAL_MAY_ACRO_BIKE}, - {OBJ_EVENT_GFX_RIVAL_BRENDAN_SURFING, OBJ_EVENT_GFX_RIVAL_MAY_SURFING}, - {OBJ_EVENT_GFX_BRENDAN_UNDERWATER, OBJ_EVENT_GFX_MAY_UNDERWATER}, - {OBJ_EVENT_GFX_RIVAL_BRENDAN_FIELD_MOVE, OBJ_EVENT_GFX_RIVAL_MAY_FIELD_MOVE}, - {OBJ_EVENT_GFX_BRENDAN_FISHING, OBJ_EVENT_GFX_MAY_FISHING}, - {OBJ_EVENT_GFX_BRENDAN_WATERING, OBJ_EVENT_GFX_MAY_WATERING} + [PLAYER_AVATAR_STATE_NORMAL] = {OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL, OBJ_EVENT_GFX_RIVAL_MAY_NORMAL}, + [PLAYER_AVATAR_STATE_MACH_BIKE] = {OBJ_EVENT_GFX_RIVAL_BRENDAN_MACH_BIKE, OBJ_EVENT_GFX_RIVAL_MAY_MACH_BIKE}, + [PLAYER_AVATAR_STATE_ACRO_BIKE] = {OBJ_EVENT_GFX_RIVAL_BRENDAN_ACRO_BIKE, OBJ_EVENT_GFX_RIVAL_MAY_ACRO_BIKE}, + [PLAYER_AVATAR_STATE_SURFING] = {OBJ_EVENT_GFX_RIVAL_BRENDAN_SURFING, OBJ_EVENT_GFX_RIVAL_MAY_SURFING}, + [PLAYER_AVATAR_STATE_UNDERWATER] = {OBJ_EVENT_GFX_BRENDAN_UNDERWATER, OBJ_EVENT_GFX_MAY_UNDERWATER}, + [PLAYER_AVATAR_STATE_FIELD_MOVE] = {OBJ_EVENT_GFX_RIVAL_BRENDAN_FIELD_MOVE, OBJ_EVENT_GFX_RIVAL_MAY_FIELD_MOVE}, + [PLAYER_AVATAR_STATE_FISHING] = {OBJ_EVENT_GFX_BRENDAN_FISHING, OBJ_EVENT_GFX_MAY_FISHING}, + [PLAYER_AVATAR_STATE_WATERING] = {OBJ_EVENT_GFX_BRENDAN_WATERING, OBJ_EVENT_GFX_MAY_WATERING} }; static const u8 sPlayerAvatarGfxIds[][2] = { - {OBJ_EVENT_GFX_BRENDAN_NORMAL, OBJ_EVENT_GFX_MAY_NORMAL}, - {OBJ_EVENT_GFX_BRENDAN_MACH_BIKE, OBJ_EVENT_GFX_MAY_MACH_BIKE}, - {OBJ_EVENT_GFX_BRENDAN_ACRO_BIKE, OBJ_EVENT_GFX_MAY_ACRO_BIKE}, - {OBJ_EVENT_GFX_BRENDAN_SURFING, OBJ_EVENT_GFX_MAY_SURFING}, - {OBJ_EVENT_GFX_BRENDAN_UNDERWATER, OBJ_EVENT_GFX_MAY_UNDERWATER}, - {OBJ_EVENT_GFX_BRENDAN_FIELD_MOVE, OBJ_EVENT_GFX_MAY_FIELD_MOVE}, - {OBJ_EVENT_GFX_BRENDAN_FISHING, OBJ_EVENT_GFX_MAY_FISHING}, - {OBJ_EVENT_GFX_BRENDAN_WATERING, OBJ_EVENT_GFX_MAY_WATERING}, + [PLAYER_AVATAR_STATE_NORMAL] = {OBJ_EVENT_GFX_BRENDAN_NORMAL, OBJ_EVENT_GFX_MAY_NORMAL}, + [PLAYER_AVATAR_STATE_MACH_BIKE] = {OBJ_EVENT_GFX_BRENDAN_MACH_BIKE, OBJ_EVENT_GFX_MAY_MACH_BIKE}, + [PLAYER_AVATAR_STATE_ACRO_BIKE] = {OBJ_EVENT_GFX_BRENDAN_ACRO_BIKE, OBJ_EVENT_GFX_MAY_ACRO_BIKE}, + [PLAYER_AVATAR_STATE_SURFING] = {OBJ_EVENT_GFX_BRENDAN_SURFING, OBJ_EVENT_GFX_MAY_SURFING}, + [PLAYER_AVATAR_STATE_UNDERWATER] = {OBJ_EVENT_GFX_BRENDAN_UNDERWATER, OBJ_EVENT_GFX_MAY_UNDERWATER}, + [PLAYER_AVATAR_STATE_FIELD_MOVE] = {OBJ_EVENT_GFX_BRENDAN_FIELD_MOVE, OBJ_EVENT_GFX_MAY_FIELD_MOVE}, + [PLAYER_AVATAR_STATE_FISHING] = {OBJ_EVENT_GFX_BRENDAN_FISHING, OBJ_EVENT_GFX_MAY_FISHING}, + [PLAYER_AVATAR_STATE_WATERING] = {OBJ_EVENT_GFX_BRENDAN_WATERING, OBJ_EVENT_GFX_MAY_WATERING}, }; -static const u8 sFRLGAvatarGfxIds[] = {OBJ_EVENT_GFX_RED, OBJ_EVENT_GFX_LEAF}; +static const u8 sFRLGAvatarGfxIds[GENDER_COUNT] = +{ + [MALE] = OBJ_EVENT_GFX_RED, + [FEMALE] = OBJ_EVENT_GFX_LEAF +}; -static const u8 sRSAvatarGfxIds[] = {OBJ_EVENT_GFX_LINK_RS_BRENDAN, OBJ_EVENT_GFX_LINK_RS_MAY}; +static const u8 sRSAvatarGfxIds[GENDER_COUNT] = +{ + [MALE] = OBJ_EVENT_GFX_LINK_RS_BRENDAN, + [FEMALE] = OBJ_EVENT_GFX_LINK_RS_MAY +}; -static const u8 sPlayerAvatarGfxToStateFlag[2][5][2] = +static const u8 sPlayerAvatarGfxToStateFlag[GENDER_COUNT][5][2] = { [MALE] = { @@ -281,10 +290,10 @@ static const u8 sPlayerAvatarGfxToStateFlag[2][5][2] = static bool8 (*const sArrowWarpMetatileBehaviorChecks2[])(u8) = //Duplicate of sArrowWarpMetatileBehaviorChecks { - MetatileBehavior_IsSouthArrowWarp, - MetatileBehavior_IsNorthArrowWarp, - MetatileBehavior_IsWestArrowWarp, - MetatileBehavior_IsEastArrowWarp, + [DIR_SOUTH - 1] = MetatileBehavior_IsSouthArrowWarp, + [DIR_NORTH - 1] = MetatileBehavior_IsNorthArrowWarp, + [DIR_WEST - 1] = MetatileBehavior_IsWestArrowWarp, + [DIR_EAST - 1] = MetatileBehavior_IsEastArrowWarp, }; static bool8 (*const sPushBoulderFuncs[])(struct Task *, struct ObjectEvent *, struct ObjectEvent *) = @@ -307,8 +316,6 @@ static bool8 (*const sPlayerAvatarSecretBaseMatSpin[])(struct Task *, struct Obj PlayerAvatar_SecretBaseMatSpinStep3, }; -// .text - void MovementType_Player(struct Sprite *sprite) { UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, ObjectEventCB2_NoMovement2); @@ -359,7 +366,7 @@ static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEve return FALSE; } - if (!sub_808B028(direction)) + if (CheckForPlayerAvatarStaticCollision(direction) == COLLISION_NONE) { ObjectEventClearHeldMovement(playerObjEvent); return FALSE; @@ -391,7 +398,7 @@ static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 held static void PlayerAllowForcedMovementIfMovingSameDirection(void) { if (gPlayerAvatar.runningState == MOVING) - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_CONTROLLABLE; } static bool8 TryDoMetatileBehaviorForcedMovement(void) @@ -403,11 +410,11 @@ static u8 GetForcedMovementByMetatileBehavior(void) { u8 i; - if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_5)) + if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_CONTROLLABLE)) { u8 metatileBehavior = gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior; - for (i = 0; i < 18; i++) + for (i = 0; i < NUM_FORCED_MOVEMENTS; i++) { if (sForcedMovementTestFuncs[i](metatileBehavior)) return i + 1; @@ -430,7 +437,7 @@ static bool8 ForcedMovement_None(void) return FALSE; } -static u8 DoForcedMovement(u8 direction, void (*b)(u8)) +static bool8 DoForcedMovement(u8 direction, void (*moveFunc)(u8)) { struct PlayerAvatar *playerAvatar = &gPlayerAvatar; u8 collision = CheckForPlayerAvatarCollision(direction); @@ -441,7 +448,7 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8)) ForcedMovement_None(); if (collision < COLLISION_STOP_SURFING) { - return 0; + return FALSE; } else { @@ -449,48 +456,48 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8)) PlayerJumpLedge(direction); playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED_MOVE; playerAvatar->runningState = MOVING; - return 1; + return TRUE; } } else { playerAvatar->runningState = MOVING; - b(direction); - return 1; + moveFunc(direction); + return TRUE; } } -static u8 DoForcedMovementInCurrentDirection(void (*a)(u8)) +static bool8 DoForcedMovementInCurrentDirection(void (*moveFunc)(u8)) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; playerObjEvent->disableAnim = TRUE; - return DoForcedMovement(playerObjEvent->movementDirection, a); + return DoForcedMovement(playerObjEvent->movementDirection, moveFunc); } static bool8 ForcedMovement_Slip(void) { - return DoForcedMovementInCurrentDirection(PlayerGoSpeed2); + return DoForcedMovementInCurrentDirection(PlayerWalkFast); } static bool8 ForcedMovement_WalkSouth(void) { - return DoForcedMovement(DIR_SOUTH, PlayerGoSpeed1); + return DoForcedMovement(DIR_SOUTH, PlayerWalkNormal); } static bool8 ForcedMovement_WalkNorth(void) { - return DoForcedMovement(DIR_NORTH, PlayerGoSpeed1); + return DoForcedMovement(DIR_NORTH, PlayerWalkNormal); } static bool8 ForcedMovement_WalkWest(void) { - return DoForcedMovement(DIR_WEST, PlayerGoSpeed1); + return DoForcedMovement(DIR_WEST, PlayerWalkNormal); } static bool8 ForcedMovement_WalkEast(void) { - return DoForcedMovement(DIR_EAST, PlayerGoSpeed1); + return DoForcedMovement(DIR_EAST, PlayerWalkNormal); } static bool8 ForcedMovement_PushedSouthByCurrent(void) @@ -513,33 +520,33 @@ static bool8 ForcedMovement_PushedEastByCurrent(void) return DoForcedMovement(DIR_EAST, PlayerRideWaterCurrent); } -static u8 ForcedMovement_Slide(u8 direction, void (*b)(u8)) +static bool8 ForcedMovement_Slide(u8 direction, void (*moveFunc)(u8)) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; playerObjEvent->disableAnim = TRUE; playerObjEvent->facingDirectionLocked = TRUE; - return DoForcedMovement(direction, b); + return DoForcedMovement(direction, moveFunc); } static bool8 ForcedMovement_SlideSouth(void) { - return ForcedMovement_Slide(DIR_SOUTH, PlayerGoSpeed2); + return ForcedMovement_Slide(DIR_SOUTH, PlayerWalkFast); } static bool8 ForcedMovement_SlideNorth(void) { - return ForcedMovement_Slide(DIR_NORTH, PlayerGoSpeed2); + return ForcedMovement_Slide(DIR_NORTH, PlayerWalkFast); } static bool8 ForcedMovement_SlideWest(void) { - return ForcedMovement_Slide(DIR_WEST, PlayerGoSpeed2); + return ForcedMovement_Slide(DIR_WEST, PlayerWalkFast); } static bool8 ForcedMovement_SlideEast(void) { - return ForcedMovement_Slide(DIR_EAST, PlayerGoSpeed2); + return ForcedMovement_Slide(DIR_EAST, PlayerWalkFast); } static bool8 ForcedMovement_MatJump(void) @@ -558,11 +565,11 @@ static bool8 ForcedMovement_MuddySlope(void) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - if (playerObjEvent->movementDirection != DIR_NORTH || GetPlayerSpeed() <= 3) + if (playerObjEvent->movementDirection != DIR_NORTH || GetPlayerSpeed() < PLAYER_SPEED_FASTEST) { Bike_UpdateBikeCounterSpeed(0); playerObjEvent->facingDirectionLocked = TRUE; - return DoForcedMovement(DIR_SOUTH, PlayerGoSpeed2); + return DoForcedMovement(DIR_SOUTH, PlayerWalkFast); } else { @@ -572,26 +579,17 @@ static bool8 ForcedMovement_MuddySlope(void) static void MovePlayerNotOnBike(u8 direction, u16 heldKeys) { - gUnknown_08497490[CheckMovementInputNotOnBike(direction)](direction, heldKeys); + sPlayerNotOnBikeFuncs[CheckMovementInputNotOnBike(direction)](direction, heldKeys); } static u8 CheckMovementInputNotOnBike(u8 direction) { if (direction == DIR_NONE) - { - gPlayerAvatar.runningState = NOT_MOVING; - return 0; - } + return gPlayerAvatar.runningState = NOT_MOVING; else if (direction != GetPlayerMovementDirection() && gPlayerAvatar.runningState != MOVING) - { - gPlayerAvatar.runningState = TURN_DIRECTION; - return 1; - } + return gPlayerAvatar.runningState = TURN_DIRECTION; else - { - gPlayerAvatar.runningState = MOVING; - return 2; - } + return gPlayerAvatar.runningState = MOVING; } static void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys) @@ -631,8 +629,8 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) { - // speed 2 is fast, same speed as running - PlayerGoSpeed2(direction); + // same speed as running + PlayerWalkFast(direction); return; } @@ -645,7 +643,7 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) } else { - PlayerGoSpeed1(direction); + PlayerWalkNormal(direction); } } @@ -660,7 +658,7 @@ static u8 CheckForPlayerAvatarCollision(u8 direction) return CheckForObjectEventCollision(playerObjEvent, x, y, direction, MapGridGetMetatileBehaviorAt(x, y)); } -static u8 sub_808B028(u8 direction) +static u8 CheckForPlayerAvatarStaticCollision(u8 direction) { s16 x, y; struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -668,7 +666,7 @@ static u8 sub_808B028(u8 direction) x = playerObjEvent->currentCoords.x; y = playerObjEvent->currentCoords.y; MoveCoords(direction, &x, &y); - return sub_808B164(playerObjEvent, x, y, direction, MapGridGetMetatileBehaviorAt(x, y)); + return CheckForObjectEventStaticCollision(playerObjEvent, x, y, direction, MapGridGetMetatileBehaviorAt(x, y)); } u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) @@ -694,7 +692,7 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u return collision; } -static u8 sub_808B164(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) +static u8 CheckForObjectEventStaticCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) { u8 collision = GetCollisionAtCoords(objectEvent, x, y, direction); @@ -710,8 +708,8 @@ static u8 sub_808B164(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 directio static bool8 CanStopSurfing(s16 x, s16 y, u8 direction) { if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) - && MapGridGetZCoordAt(x, y) == 3 - && GetObjectEventIdByXYZ(x, y, 3) == OBJECT_EVENTS_COUNT) + && MapGridGetElevationAt(x, y) == 3 + && GetObjectEventIdByPosition(x, y, 3) == OBJECT_EVENTS_COUNT) { CreateStopSurfingTask(direction); return TRUE; @@ -736,13 +734,13 @@ static bool8 TryPushBoulder(s16 x, s16 y, u8 direction) { u8 objectEventId = GetObjectEventIdByXY(x, y); - if (objectEventId != 16 && gObjectEvents[objectEventId].graphicsId == OBJ_EVENT_GFX_PUSHABLE_BOULDER) + if (objectEventId != OBJECT_EVENTS_COUNT && gObjectEvents[objectEventId].graphicsId == OBJ_EVENT_GFX_PUSHABLE_BOULDER) { x = gObjectEvents[objectEventId].currentCoords.x; y = gObjectEvents[objectEventId].currentCoords.y; MoveCoords(direction, &x, &y); if (GetCollisionAtCoords(&gObjectEvents[objectEventId], x, y, direction) == COLLISION_NONE - && MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(x, y)) == 0) + && MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(x, y)) == FALSE) { StartStrengthAnim(objectEventId, direction); return TRUE; @@ -756,7 +754,7 @@ static void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collis { u8 i; - for (i = 0; i < ARRAY_COUNT(sAcroBikeTrickMetatiles); i++) + for (i = 0; i < NUM_ACRO_BIKE_COLLISIONS; i++) { if (sAcroBikeTrickMetatiles[i](metatileBehavior)) { @@ -876,7 +874,7 @@ static void PlayerAvatarTransition_Underwater(struct ObjectEvent *objEvent) static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *objEvent) { - gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_5; + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_CONTROLLABLE; } void UpdatePlayerAvatarTransitionState(void) @@ -886,24 +884,24 @@ void UpdatePlayerAvatarTransitionState(void) { if (!PlayerCheckIfAnimFinishedOrInactive()) { - if (!player_is_anim_in_certain_ranges()) + if (!PlayerAnimIsMultiFrameStationary()) gPlayerAvatar.tileTransitionState = T_TILE_TRANSITION; } else { - if (!sub_808B618()) + if (!PlayerAnimIsMultiFrameStationaryAndStateNotTurning()) gPlayerAvatar.tileTransitionState = T_TILE_CENTER; } } } -static bool8 player_is_anim_in_certain_ranges(void) +static bool8 PlayerAnimIsMultiFrameStationary(void) { u8 movementActionId = gObjectEvents[gPlayerAvatar.objectEventId].movementActionId; if (movementActionId <= MOVEMENT_ACTION_FACE_RIGHT || (movementActionId >= MOVEMENT_ACTION_DELAY_1 && movementActionId <= MOVEMENT_ACTION_DELAY_16) - || (movementActionId >= MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN && movementActionId <= MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT) + || (movementActionId >= MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN && movementActionId <= MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_RIGHT) || (movementActionId >= MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN && movementActionId <= MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT) || (movementActionId >= MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN && movementActionId <= MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT)) return TRUE; @@ -911,9 +909,9 @@ static bool8 player_is_anim_in_certain_ranges(void) return FALSE; } -static bool8 sub_808B618(void) +static bool8 PlayerAnimIsMultiFrameStationaryAndStateNotTurning(void) { - if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_DIRECTION) + if (PlayerAnimIsMultiFrameStationary() && gPlayerAvatar.runningState != TURN_DIRECTION) return TRUE; else return FALSE; @@ -929,9 +927,9 @@ static bool8 PlayerCheckIfAnimFinishedOrInactive(void) return ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]); } -static void PlayerSetCopyableMovement(u8 a) +static void PlayerSetCopyableMovement(u8 movement) { - gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement = a; + gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement = movement; } u8 PlayerGetCopyableMovement(void) @@ -953,70 +951,67 @@ void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement) } } -// normal speed (1 speed) -void PlayerGoSpeed1(u8 a) +void PlayerWalkNormal(u8 direction) { - PlayerSetAnimId(GetWalkNormalMovementAction(a), 2); + PlayerSetAnimId(GetWalkNormalMovementAction(direction), COPY_MOVE_WALK); } -// fast speed (2 speed) -void PlayerGoSpeed2(u8 a) +void PlayerWalkFast(u8 direction) { - PlayerSetAnimId(GetWalkFastMovementAction(a), 2); + PlayerSetAnimId(GetWalkFastMovementAction(direction), COPY_MOVE_WALK); } -void PlayerRideWaterCurrent(u8 a) +void PlayerRideWaterCurrent(u8 direction) { - PlayerSetAnimId(GetRideWaterCurrentMovementAction(a), 2); + PlayerSetAnimId(GetRideWaterCurrentMovementAction(direction), COPY_MOVE_WALK); } -// fastest speed (4 speed) -void PlayerGoSpeed4(u8 a) +void PlayerWalkFaster(u8 direction) { - PlayerSetAnimId(GetWalkFastestMovementAction(a), 2); + PlayerSetAnimId(GetWalkFasterMovementAction(direction), COPY_MOVE_WALK); } -static void PlayerRun(u8 a) +static void PlayerRun(u8 direction) { - PlayerSetAnimId(GetPlayerRunMovementAction(a), 2); + PlayerSetAnimId(GetPlayerRunMovementAction(direction), COPY_MOVE_WALK); } -void PlayerOnBikeCollide(u8 a) +void PlayerOnBikeCollide(u8 direction) { - PlayCollisionSoundIfNotFacingWarp(a); - PlayerSetAnimId(GetWalkInPlaceNormalMovementAction(a), 2); + PlayCollisionSoundIfNotFacingWarp(direction); + PlayerSetAnimId(GetWalkInPlaceNormalMovementAction(direction), COPY_MOVE_WALK); } -void PlayerOnBikeCollideWithFarawayIslandMew(u8 a) +void PlayerOnBikeCollideWithFarawayIslandMew(u8 direction) { - PlayerSetAnimId(GetWalkInPlaceNormalMovementAction(a), 2); + PlayerSetAnimId(GetWalkInPlaceNormalMovementAction(direction), COPY_MOVE_WALK); } -static void PlayerNotOnBikeCollide(u8 a) +static void PlayerNotOnBikeCollide(u8 direction) { - PlayCollisionSoundIfNotFacingWarp(a); - PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(a), 2); + PlayCollisionSoundIfNotFacingWarp(direction); + PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(direction), COPY_MOVE_WALK); } -static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8 a) +static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8 direction) { - PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(a), 2); + PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(direction), COPY_MOVE_WALK); } void PlayerFaceDirection(u8 direction) { - PlayerSetAnimId(GetFaceDirectionMovementAction(direction), 1); + PlayerSetAnimId(GetFaceDirectionMovementAction(direction), COPY_MOVE_FACE); } void PlayerTurnInPlace(u8 direction) { - PlayerSetAnimId(GetWalkInPlaceFastMovementAction(direction), 1); + PlayerSetAnimId(GetWalkInPlaceFastMovementAction(direction), COPY_MOVE_FACE); } void PlayerJumpLedge(u8 direction) { PlaySE(SE_LEDGE); - PlayerSetAnimId(GetJump2MovementAction(direction), 8); + PlayerSetAnimId(GetJump2MovementAction(direction), COPY_MOVE_JUMP2); } // Stop player on current facing direction once they're done moving and if they're not currently Acro Biking on bumpy slope @@ -1032,81 +1027,82 @@ void PlayerFreeze(void) // wheelie idle void PlayerIdleWheelie(u8 direction) { - PlayerSetAnimId(GetAcroWheelieFaceDirectionMovementAction(direction), 1); + PlayerSetAnimId(GetAcroWheelieFaceDirectionMovementAction(direction), COPY_MOVE_FACE); } // normal to wheelie void PlayerStartWheelie(u8 direction) { - PlayerSetAnimId(GetAcroPopWheelieFaceDirectionMovementAction(direction), 1); + PlayerSetAnimId(GetAcroPopWheelieFaceDirectionMovementAction(direction), COPY_MOVE_FACE); } // wheelie to normal void PlayerEndWheelie(u8 direction) { - PlayerSetAnimId(GetAcroEndWheelieFaceDirectionMovementAction(direction), 1); + PlayerSetAnimId(GetAcroEndWheelieFaceDirectionMovementAction(direction), COPY_MOVE_FACE); } // wheelie hopping standing -void PlayerStandingHoppingWheelie(u8 a) +void PlayerStandingHoppingWheelie(u8 direction) { PlaySE(SE_BIKE_HOP); - PlayerSetAnimId(GetAcroWheelieHopFaceDirectionMovementAction(a), 1); + PlayerSetAnimId(GetAcroWheelieHopFaceDirectionMovementAction(direction), COPY_MOVE_FACE); } // wheelie hopping moving -void PlayerMovingHoppingWheelie(u8 a) +void PlayerMovingHoppingWheelie(u8 direction) { PlaySE(SE_BIKE_HOP); - PlayerSetAnimId(GetAcroWheelieHopDirectionMovementAction(a), 2); + PlayerSetAnimId(GetAcroWheelieHopDirectionMovementAction(direction), COPY_MOVE_WALK); } // wheelie hopping ledge -void PlayerLedgeHoppingWheelie(u8 a) +void PlayerLedgeHoppingWheelie(u8 direction) { PlaySE(SE_BIKE_HOP); - PlayerSetAnimId(GetAcroWheelieJumpDirectionMovementAction(a), 8); + PlayerSetAnimId(GetAcroWheelieJumpDirectionMovementAction(direction), COPY_MOVE_JUMP2); } // acro turn jump void PlayerAcroTurnJump(u8 direction) { PlaySE(SE_BIKE_HOP); - PlayerSetAnimId(GetJumpInPlaceTurnAroundMovementAction(direction), 1); + PlayerSetAnimId(GetJumpInPlaceTurnAroundMovementAction(direction), COPY_MOVE_FACE); } void PlayerWheelieInPlace(u8 direction) { PlaySE(SE_WALL_HIT); - PlayerSetAnimId(GetAcroWheelieInPlaceDirectionMovementAction(direction), 2); + PlayerSetAnimId(GetAcroWheelieInPlaceDirectionMovementAction(direction), COPY_MOVE_WALK); } void PlayerPopWheelieWhileMoving(u8 direction) { - PlayerSetAnimId(GetAcroPopWheelieMoveDirectionMovementAction(direction), 2); + PlayerSetAnimId(GetAcroPopWheelieMoveDirectionMovementAction(direction), COPY_MOVE_WALK); } void PlayerWheelieMove(u8 direction) { - PlayerSetAnimId(GetAcroWheelieMoveDirectionMovementAction(direction), 2); + PlayerSetAnimId(GetAcroWheelieMoveDirectionMovementAction(direction), COPY_MOVE_WALK); } void PlayerEndWheelieWhileMoving(u8 direction) { - PlayerSetAnimId(GetAcroEndWheelieMoveDirectionMovementAction(direction), 2); + PlayerSetAnimId(GetAcroEndWheelieMoveDirectionMovementAction(direction), COPY_MOVE_WALK); } -static void PlayCollisionSoundIfNotFacingWarp(u8 a) +static void PlayCollisionSoundIfNotFacingWarp(u8 direction) { s16 x, y; u8 metatileBehavior = gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior; - if (!sArrowWarpMetatileBehaviorChecks[a - 1](metatileBehavior)) + if (!sArrowWarpMetatileBehaviorChecks[direction - 1](metatileBehavior)) { - if (a == 2) + // Check if walking up into a door + if (direction == DIR_NORTH) { PlayerGetDestCoords(&x, &y); - MoveCoords(2, &x, &y); + MoveCoords(direction, &x, &y); if (MetatileBehavior_IsWarpDoor(MapGridGetMetatileBehaviorAt(x, y))) return; } @@ -1138,22 +1134,22 @@ u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y) switch (object->movementActionId) { - case MOVEMENT_ACTION_WALK_NORMAL_DOWN: - case MOVEMENT_ACTION_PLAYER_RUN_DOWN: - (*y)++; - return TRUE; - case MOVEMENT_ACTION_WALK_NORMAL_UP: - case MOVEMENT_ACTION_PLAYER_RUN_UP: - (*y)--; - return TRUE; - case MOVEMENT_ACTION_WALK_NORMAL_LEFT: - case MOVEMENT_ACTION_PLAYER_RUN_LEFT: - (*x)--; - return TRUE; - case MOVEMENT_ACTION_WALK_NORMAL_RIGHT: - case MOVEMENT_ACTION_PLAYER_RUN_RIGHT: - (*x)++; - return TRUE; + case MOVEMENT_ACTION_WALK_NORMAL_DOWN: + case MOVEMENT_ACTION_PLAYER_RUN_DOWN: + (*y)++; + return TRUE; + case MOVEMENT_ACTION_WALK_NORMAL_UP: + case MOVEMENT_ACTION_PLAYER_RUN_UP: + (*y)--; + return TRUE; + case MOVEMENT_ACTION_WALK_NORMAL_LEFT: + case MOVEMENT_ACTION_PLAYER_RUN_LEFT: + (*x)--; + return TRUE; + case MOVEMENT_ACTION_WALK_NORMAL_RIGHT: + case MOVEMENT_ACTION_PLAYER_RUN_RIGHT: + (*x)++; + return TRUE; } } @@ -1172,12 +1168,13 @@ u8 GetPlayerMovementDirection(void) return gObjectEvents[gPlayerAvatar.objectEventId].movementDirection; } -u8 PlayerGetZCoord(void) +u8 PlayerGetElevation(void) { return gObjectEvents[gPlayerAvatar.objectEventId].previousElevation; } -void sub_808BC90(s16 x, s16 y) +// unused +void MovePlayerToMapCoords(s16 x, s16 y) { MoveObjectEventToMapCoords(&gObjectEvents[gPlayerAvatar.objectEventId], x, y); } @@ -1197,12 +1194,12 @@ u8 GetPlayerAvatarSpriteId(void) return gPlayerAvatar.spriteId; } -void sub_808BCE8(void) +void CancelPlayerForcedMovement(void) { ForcedMovement_None(); } -void sub_808BCF4(void) +void StopPlayerAvatar(void) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -1309,7 +1306,7 @@ bool8 IsPlayerFacingSurfableFishableWater(void) MoveCoords(playerObjEvent->facingDirection, &x, &y); if (GetCollisionAtCoords(playerObjEvent, x, y, playerObjEvent->facingDirection) == COLLISION_ELEVATION_MISMATCH - && PlayerGetZCoord() == 3 + && PlayerGetElevation() == 3 && MetatileBehavior_IsSurfableFishableWater(MapGridGetMetatileBehaviorAt(x, y))) return TRUE; else @@ -1323,7 +1320,7 @@ void ClearPlayerAvatarInfo(void) void SetPlayerAvatarStateMask(u8 flags) { - gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_FORCED_MOVE | PLAYER_AVATAR_FLAG_5); + gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_FORCED_MOVE | PLAYER_AVATAR_FLAG_CONTROLLABLE); gPlayerAvatar.flags |= flags; } @@ -1368,8 +1365,8 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) playerObjEventTemplate.localId = OBJ_EVENT_ID_PLAYER; playerObjEventTemplate.graphicsId = GetPlayerAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, gender); - playerObjEventTemplate.x = x - 7; - playerObjEventTemplate.y = y - 7; + playerObjEventTemplate.x = x - MAP_OFFSET; + playerObjEventTemplate.y = y - MAP_OFFSET; playerObjEventTemplate.elevation = 0; playerObjEventTemplate.movementType = MOVEMENT_TYPE_PLAYER; playerObjEventTemplate.movementRangeX = 0; @@ -1389,7 +1386,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) gPlayerAvatar.objectEventId = objectEventId; gPlayerAvatar.spriteId = objectEvent->spriteId; gPlayerAvatar.gender = gender; - SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_5 | PLAYER_AVATAR_FLAG_ON_FOOT); + SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_CONTROLLABLE | PLAYER_AVATAR_FLAG_ON_FOOT); } void SetPlayerInvisibility(bool8 invisible) @@ -1402,7 +1399,7 @@ void SetPlayerInvisibility(bool8 invisible) void SetPlayerAvatarFieldMove(void) { ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FIELD_MOVE)); - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], ANIM_FIELD_MOVE); } static void SetPlayerAvatarFishing(u8 direction) @@ -1448,75 +1445,79 @@ static void HideShowWarpArrow(struct ObjectEvent *objectEvent) /* Strength */ -static void StartStrengthAnim(u8 a, u8 b) +#define tState data[0] +#define tBoulderObjId data[1] +#define tDirection data[2] + +static void StartStrengthAnim(u8 objectEventId, u8 direction) { u8 taskId = CreateTask(Task_PushBoulder, 0xFF); - gTasks[taskId].data[1] = a; - gTasks[taskId].data[2] = b; + gTasks[taskId].tBoulderObjId = objectEventId; + gTasks[taskId].tDirection = direction; Task_PushBoulder(taskId); } static void Task_PushBoulder(u8 taskId) { - while (sPushBoulderFuncs[gTasks[taskId].data[0]](&gTasks[taskId], + while (sPushBoulderFuncs[gTasks[taskId].tState](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], - &gObjectEvents[gTasks[taskId].data[1]])) + &gObjectEvents[gTasks[taskId].tBoulderObjId])) ; } -static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) +static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *player, struct ObjectEvent *boulder) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); gPlayerAvatar.preventStep = TRUE; - task->data[0]++; + task->tState++; return FALSE; } -static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) +static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *player, struct ObjectEvent *boulder) { - if (ObjectEventIsHeldMovementActive(playerObject)) - { - ObjectEventClearHeldMovementIfFinished(playerObject); - } + if (ObjectEventIsHeldMovementActive(player)) + ObjectEventClearHeldMovementIfFinished(player); - if (ObjectEventIsHeldMovementActive(strengthObject)) - { - ObjectEventClearHeldMovementIfFinished(strengthObject); - } + if (ObjectEventIsHeldMovementActive(boulder)) + ObjectEventClearHeldMovementIfFinished(boulder); - if (!ObjectEventIsMovementOverridden(playerObject) - && !ObjectEventIsMovementOverridden(strengthObject)) + if (!ObjectEventIsMovementOverridden(player) + && !ObjectEventIsMovementOverridden(boulder)) { - ObjectEventClearHeldMovementIfFinished(playerObject); - ObjectEventClearHeldMovementIfFinished(strengthObject); - ObjectEventSetHeldMovement(playerObject, GetWalkInPlaceNormalMovementAction((u8)task->data[2])); - ObjectEventSetHeldMovement(strengthObject, GetWalkSlowMovementAction((u8)task->data[2])); - gFieldEffectArguments[0] = strengthObject->currentCoords.x; - gFieldEffectArguments[1] = strengthObject->currentCoords.y; - gFieldEffectArguments[2] = strengthObject->previousElevation; - gFieldEffectArguments[3] = gSprites[strengthObject->spriteId].oam.priority; + ObjectEventClearHeldMovementIfFinished(player); + ObjectEventClearHeldMovementIfFinished(boulder); + ObjectEventSetHeldMovement(player, GetWalkInPlaceNormalMovementAction((u8)task->tDirection)); + ObjectEventSetHeldMovement(boulder, GetWalkSlowMovementAction((u8)task->tDirection)); + gFieldEffectArguments[0] = boulder->currentCoords.x; + gFieldEffectArguments[1] = boulder->currentCoords.y; + gFieldEffectArguments[2] = boulder->previousElevation; + gFieldEffectArguments[3] = gSprites[boulder->spriteId].oam.priority; FieldEffectStart(FLDEFF_DUST); PlaySE(SE_M_STRENGTH); - task->data[0]++; + task->tState++; } return FALSE; } -static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) +static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *player, struct ObjectEvent *boulder) { - if (ObjectEventCheckHeldMovementStatus(playerObject) - && ObjectEventCheckHeldMovementStatus(strengthObject)) + if (ObjectEventCheckHeldMovementStatus(player) + && ObjectEventCheckHeldMovementStatus(boulder)) { - ObjectEventClearHeldMovementIfFinished(playerObject); - ObjectEventClearHeldMovementIfFinished(strengthObject); + ObjectEventClearHeldMovementIfFinished(player); + ObjectEventClearHeldMovementIfFinished(boulder); gPlayerAvatar.preventStep = FALSE; - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(FindTaskIdByFunc(Task_PushBoulder)); } return FALSE; } +#undef tState +#undef tBoulderObjId +#undef tDirection + /* Some field effect */ static void DoPlayerMatJump(void) @@ -1542,7 +1543,7 @@ static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent if (task->data[1] > 1) { gPlayerAvatar.preventStep = FALSE; - gPlayerAvatar.transitionFlags |= PLAYER_AVATAR_FLAG_5; + gPlayerAvatar.transitionFlags |= PLAYER_AVATAR_FLAG_CONTROLLABLE; DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump)); } } @@ -1569,7 +1570,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct Objec task->data[0]++; task->data[1] = objectEvent->movementDirection; gPlayerAvatar.preventStep = TRUE; - ScriptContext2_Enable(); + LockPlayerFieldControls(); PlaySE(SE_WARP_IN); return TRUE; } @@ -1615,7 +1616,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct Objec if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { ObjectEventSetHeldMovement(objectEvent, GetWalkSlowMovementAction(GetOppositeDirection(task->data[1]))); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); gPlayerAvatar.preventStep = FALSE; DestroyTask(FindTaskIdByFunc(PlayerAvatar_DoSecretBaseMatSpin)); } @@ -1626,7 +1627,7 @@ static void CreateStopSurfingTask(u8 direction) { u8 taskId; - ScriptContext2_Enable(); + LockPlayerFieldControls(); Overworld_ClearSavedMusic(); Overworld_ChangeMusicToDefault(); gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; @@ -1660,7 +1661,7 @@ static void Task_WaitStopSurfing(u8 taskId) ObjectEventSetGraphicsId(playerObjEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_NORMAL)); ObjectEventSetHeldMovement(playerObjEvent, GetFaceDirectionMovementAction(playerObjEvent->facingDirection)); gPlayerAvatar.preventStep = FALSE; - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroySprite(&gSprites[playerObjEvent->fieldEffectSpriteId]); DestroyTask(taskId); } @@ -1687,7 +1688,7 @@ static bool8 (*const sFishingStateFuncs[])(struct Task *) = { Fishing_Init, Fishing_GetRodOut, - Fishing_WaitBeforeDots, + Fishing_WaitBeforeDots, Fishing_InitDots, // FISHING_START_ROUND Fishing_ShowDots, Fishing_CheckForBite, @@ -1719,7 +1720,7 @@ static void Task_Fishing(u8 taskId) static bool8 Fishing_Init(struct Task *task) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); gPlayerAvatar.preventStep = TRUE; task->tStep++; return FALSE; @@ -1729,13 +1730,13 @@ static bool8 Fishing_GetRodOut(struct Task *task) { struct ObjectEvent *playerObjEvent; const s16 minRounds1[] = { - [OLD_ROD] = 1, - [GOOD_ROD] = 1, + [OLD_ROD] = 1, + [GOOD_ROD] = 1, [SUPER_ROD] = 1 }; const s16 minRounds2[] = { - [OLD_ROD] = 1, - [GOOD_ROD] = 3, + [OLD_ROD] = 1, + [GOOD_ROD] = 3, [SUPER_ROD] = 6 }; @@ -1765,7 +1766,7 @@ static bool8 Fishing_InitDots(struct Task *task) { u32 randVal; - sub_819786C(0, TRUE); + LoadMessageBoxAndFrameGfx(0, TRUE); task->tStep++; task->tFrameCounter = 0; task->tNumDots = 0; @@ -1806,7 +1807,7 @@ static bool8 Fishing_ShowDots(struct Task *task) } else { - AddTextPrinterParameterized(0, 1, dot, task->tNumDots * 8, 1, 0, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, dot, task->tNumDots * 8, 1, 0, NULL); task->tNumDots++; } } @@ -1830,7 +1831,7 @@ static bool8 Fishing_CheckForBite(struct Task *task) { if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) { - u8 ability = GetMonAbility(&gPlayerParty[0]); + u16 ability = GetMonAbility(&gPlayerParty[0]); if (ability == ABILITY_SUCTION_CUPS || ability == ABILITY_STICKY_HOLD) { if (Random() % 100 > 14) @@ -1855,7 +1856,7 @@ static bool8 Fishing_CheckForBite(struct Task *task) static bool8 Fishing_GotBite(struct Task *task) { AlignFishingAnimationFrames(); - AddTextPrinterParameterized(0, 1, gText_OhABite, 0, 17, 0, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_OhABite, 0, 17, 0, NULL); task->tStep++; task->tFrameCounter = 0; return FALSE; @@ -1865,8 +1866,8 @@ static bool8 Fishing_GotBite(struct Task *task) static bool8 Fishing_WaitForA(struct Task *task) { const s16 reelTimeouts[3] = { - [OLD_ROD] = 36, - [GOOD_ROD] = 33, + [OLD_ROD] = 36, + [GOOD_ROD] = 33, [SUPER_ROD] = 30 }; @@ -1910,7 +1911,7 @@ static bool8 Fishing_MonOnHook(struct Task *task) { AlignFishingAnimationFrames(); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gText_PokemonOnHook, 1, 0, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PokemonOnHook, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tStep++; task->tFrameCounter = 0; return FALSE; @@ -1944,7 +1945,7 @@ static bool8 Fishing_StartEncounter(struct Task *task) if (task->tFrameCounter != 0) { gPlayerAvatar.preventStep = FALSE; - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); FishingWildEncounter(task->tFishingRod); RecordFishingAttemptForTV(TRUE); DestroyTask(FindTaskIdByFunc(Task_Fishing)); @@ -1957,7 +1958,7 @@ static bool8 Fishing_NotEvenNibble(struct Task *task) AlignFishingAnimationFrames(); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gText_NotEvenANibble, 1, 0, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_NotEvenANibble, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tStep = FISHING_SHOW_RESULT; return TRUE; } @@ -1967,7 +1968,7 @@ static bool8 Fishing_GotAway(struct Task *task) AlignFishingAnimationFrames(); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gText_ItGotAway, 1, 0, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_ItGotAway, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tStep++; return TRUE; } @@ -2003,7 +2004,7 @@ static bool8 Fishing_EndNoMon(struct Task *task) if (!IsTextPrinterActive(0)) { gPlayerAvatar.preventStep = FALSE; - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); UnfreezeObjectEvents(); ClearDialogWindowAndFrame(0, TRUE); RecordFishingAttemptForTV(FALSE); @@ -2100,7 +2101,7 @@ static void Task_DoPlayerSpinExit(u8 taskId) tState++; case 1: // Spin while rising TrySpinPlayerForWarp(object, &tSpinDelayTimer); - + // Rise and accelerate tCurY -= tSpeed; tSpeed += 3; diff --git a/src/field_poison.c b/src/field_poison.c index 132ce571e1..fcb47acdb8 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -21,9 +21,8 @@ static bool32 IsMonValidSpecies(struct Pokemon *pokemon) { u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); if (species == SPECIES_NONE || species == SPECIES_EGG) - { return FALSE; - } + return TRUE; } @@ -35,84 +34,83 @@ static bool32 AllMonsFainted(void) for (i = 0; i < PARTY_SIZE; i++, pokemon++) { if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) != 0) - { return FALSE; - } } return TRUE; } static void FaintFromFieldPoison(u8 partyIdx) { - struct Pokemon *pokemon = gPlayerParty + partyIdx; + struct Pokemon *pokemon = &gPlayerParty[partyIdx]; u32 status = STATUS1_NONE; AdjustFriendship(pokemon, FRIENDSHIP_EVENT_FAINT_FIELD_PSN); SetMonData(pokemon, MON_DATA_STATUS, &status); GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1); - StringGetEnd10(gStringVar1); + StringGet_Nickname(gStringVar1); } static bool32 MonFaintedFromPoison(u8 partyIdx) { - struct Pokemon *pokemon = gPlayerParty + partyIdx; + struct Pokemon *pokemon = &gPlayerParty[partyIdx]; if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 0 && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) - { return TRUE; - } + return FALSE; } +#define tState data[0] +#define tPartyIdx data[1] + static void Task_TryFieldPoisonWhiteOut(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { - case 0: - for (; data[1] < PARTY_SIZE; data[1]++) + case 0: + for (; tPartyIdx < PARTY_SIZE; tPartyIdx++) + { + if (MonFaintedFromPoison(tPartyIdx)) { - if (MonFaintedFromPoison(data[1])) - { - FaintFromFieldPoison(data[1]); - ShowFieldMessage(gText_PkmnFainted3); - data[0]++; - return; - } - } - data[0] = 2; - break; - case 1: - if (IsFieldMessageBoxHidden()) - { - data[0]--; - } - break; - case 2: - if (AllMonsFainted()) - { - if (InBattlePyramid() | InBattlePike() || InTrainerHillChallenge()) - { - gSpecialVar_Result = FLDPSN_FRONTIER_WHITEOUT; - } - else - { - gSpecialVar_Result = FLDPSN_WHITEOUT; - } + FaintFromFieldPoison(tPartyIdx); + ShowFieldMessage(gText_PkmnFainted_FldPsn); + tState++; + return; } + } + tState = 2; // Finished checking party + break; + case 1: + // Wait for "{mon} fainted" message, then return to party loop + if (IsFieldMessageBoxHidden()) + tState--; + break; + case 2: + if (AllMonsFainted()) + { + // Battle facilities have their own white out script to handle the challenge loss + if (InBattlePyramid() | InBattlePike() || InTrainerHillChallenge()) + gSpecialVar_Result = FLDPSN_FRONTIER_WHITEOUT; else - { - gSpecialVar_Result = FLDPSN_NO_WHITEOUT; - } - EnableBothScriptContexts(); - DestroyTask(taskId); - break; + gSpecialVar_Result = FLDPSN_WHITEOUT; + } + else + { + gSpecialVar_Result = FLDPSN_NO_WHITEOUT; + } + ScriptContext_Enable(); + DestroyTask(taskId); + break; } } +#undef tState +#undef tPartyIdx + void TryFieldPoisonWhiteOut(void) { CreateTask(Task_TryFieldPoisonWhiteOut, 80); - ScriptContext1_Stop(); + ScriptContext_Stop(); } s32 DoPoisonFieldEffect(void) @@ -122,31 +120,31 @@ s32 DoPoisonFieldEffect(void) struct Pokemon *pokemon = gPlayerParty; u32 numPoisoned = 0; u32 numFainted = 0; + for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) { + // Apply poison damage hp = GetMonData(pokemon, MON_DATA_HP); if (hp == 0 || --hp == 0) - { numFainted++; - } + SetMonData(pokemon, MON_DATA_HP, &hp); numPoisoned++; } pokemon++; } + + // Do screen flash effect if (numFainted != 0 || numPoisoned != 0) - { FldEffPoison_Start(); - } + if (numFainted != 0) - { return FLDPSN_FNT; - } + if (numPoisoned != 0) - { return FLDPSN_PSN; - } + return FLDPSN_NONE; } diff --git a/src/field_region_map.c b/src/field_region_map.c index 99def49016..5e14920fba 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -150,11 +150,11 @@ static void FieldUpdateRegionMap(void) sFieldRegionMapHandler->state++; break; case 1: - DrawStdFrameWithCustomTileAndPalette(1, 0, 0x27, 0xd); - offset = GetStringCenterAlignXOffset(1, gText_Hoenn, 0x38); - AddTextPrinterParameterized(1, 1, gText_Hoenn, offset, 1, 0, NULL); + DrawStdFrameWithCustomTileAndPalette(1, FALSE, 0x27, 0xd); + offset = GetStringCenterAlignXOffset(FONT_NORMAL, gText_Hoenn, 0x38); + AddTextPrinterParameterized(1, FONT_NORMAL, gText_Hoenn, offset, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); - DrawStdFrameWithCustomTileAndPalette(0, 0, 0x27, 0xd); + DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x27, 0xd); PrintRegionMapSecName(); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); sFieldRegionMapHandler->state++; @@ -192,10 +192,7 @@ static void FieldUpdateRegionMap(void) { FreeRegionMapIconResources(); SetMainCallback2(sFieldRegionMapHandler->callback); - if (sFieldRegionMapHandler != NULL) - { - FREE_AND_SET_NULL(sFieldRegionMapHandler); - } + TRY_FREE_AND_SET_NULL(sFieldRegionMapHandler); FreeAllWindowBuffers(); } break; @@ -207,12 +204,12 @@ static void PrintRegionMapSecName(void) if (sFieldRegionMapHandler->regionMap.mapSecType != MAPSECTYPE_NONE) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, 1, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); } else { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); } } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index fbe725c0b1..948d812e81 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -35,7 +35,6 @@ #include "trainer_hill.h" #include "fldeff.h" -// This file's functions. static void Task_ExitNonAnimDoor(u8); static void Task_ExitNonDoor(u8); static void Task_DoContestHallWarp(u8); @@ -50,13 +49,13 @@ static void Task_EnableScriptAfterMusicFade(u8 taskId); // data[0] is used universally by tasks in this file as a state for switches #define tState data[0] -// const -static const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 }; -const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelPixelRadii) - 1; +// Smaller flash level -> larger flash radius +static const u16 sFlashLevelToRadius[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 }; +const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelToRadius) - 1; -const struct ScanlineEffectParams sFlashEffectParams = +static const struct ScanlineEffectParams sFlashEffectParams = { - (void *)REG_ADDR_WIN0H, + ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, 1 }; @@ -125,7 +124,7 @@ static void Task_WaitForUnionRoomFade(u8 taskId) void FieldCB_ContinueScriptUnionRoom(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); CreateTask(Task_WaitForUnionRoomFade, 10); @@ -136,13 +135,13 @@ static void Task_WaitForFadeAndEnableScriptCtx(u8 taskID) if (WaitForWeatherFadeIn() == TRUE) { DestroyTask(taskID); - EnableBothScriptContexts(); + ScriptContext_Enable(); } } void FieldCB_ContinueScriptHandleMusic(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); CreateTask(Task_WaitForFadeAndEnableScriptCtx, 10); @@ -150,7 +149,7 @@ void FieldCB_ContinueScriptHandleMusic(void) void FieldCB_ContinueScript(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FadeInFromBlack(); CreateTask(Task_WaitForFadeAndEnableScriptCtx, 10); } @@ -175,7 +174,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId) case 2: if (WaitForWeatherFadeIn() == TRUE) { - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); } break; @@ -184,7 +183,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId) void FieldCB_ReturnToFieldCableLink(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); Overworld_PlaySpecialMapMusic(); FillPalBufferBlack(); CreateTask(Task_ReturnToFieldCableLink, 10); @@ -204,7 +203,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId) if (!IsLinkTaskFinished()) { if (++task->data[1] > 1800) - GetLinkmanErrorParams(0x6000); + RfuSetErrorParams(F_RFU_ERROR_6 | F_RFU_ERROR_7); } else { @@ -216,7 +215,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId) if (WaitForWeatherFadeIn() == TRUE) { StartSendingKeysToLink(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); } break; @@ -235,14 +234,12 @@ void Task_ReturnToFieldRecordMixing(u8 taskId) break; case 1: if (IsLinkTaskFinished()) - { task->tState++; - } break; case 2: StartSendingKeysToLink(); ResetAllMultiplayerState(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); break; } @@ -250,7 +247,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId) void FieldCB_ReturnToFieldWirelessLink(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); Overworld_PlaySpecialMapMusic(); FillPalBufferBlack(); CreateTask(Task_ReturnToFieldWirelessLink, 10); @@ -278,7 +275,7 @@ void FieldCB_DefaultWarpExit(void) Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); SetUpWarpExitTask(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } void FieldCB_WarpExitFadeFromWhite(void) @@ -286,7 +283,7 @@ void FieldCB_WarpExitFadeFromWhite(void) Overworld_PlaySpecialMapMusic(); FadeInFromWhite(); SetUpWarpExitTask(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } void FieldCB_WarpExitFadeFromBlack(void) @@ -295,7 +292,7 @@ void FieldCB_WarpExitFadeFromBlack(void) Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); SetUpWarpExitTask(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } static void FieldCB_SpinEnterWarp(void) @@ -304,7 +301,7 @@ static void FieldCB_SpinEnterWarp(void) WarpFadeInScreen(); PlaySE(SE_WARP_OUT); CreateTask(Task_SpinEnterWarp, 10); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } static void FieldCB_MossdeepGymWarpExit(void) @@ -313,7 +310,7 @@ static void FieldCB_MossdeepGymWarpExit(void) WarpFadeInScreen(); PlaySE(SE_WARP_OUT); CreateTask(Task_ExitNonDoor, 10); - ScriptContext2_Enable(); + LockPlayerFieldControls(); SetObjectEventLoadFlag((~SKIP_OBJECT_EVENT_LOAD) & 0xF); } @@ -360,7 +357,7 @@ static void Task_ExitDoor(u8 taskId) } break; case 4: - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); break; } @@ -398,7 +395,7 @@ static void Task_ExitNonAnimDoor(u8 taskId) } break; case 3: - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); break; } @@ -410,14 +407,14 @@ static void Task_ExitNonDoor(u8 taskId) { case 0: FreezeObjectEvents(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); gTasks[taskId].tState++; break; case 1: if (WaitForWeatherFadeIn()) { UnfreezeObjectEvents(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); } break; @@ -437,7 +434,7 @@ void ReturnToFieldOpenStartMenu(void) { FadeInFromBlack(); CreateTask(Task_WaitForFadeShowStartMenu, 0x50); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } bool8 FieldCB_ReturnToFieldOpenStartMenu(void) @@ -450,7 +447,7 @@ static void Task_ReturnToFieldNoScript(u8 taskId) { if (WaitForWeatherFadeIn() == 1) { - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); ScriptUnfreezeObjectEvents(); } @@ -458,14 +455,14 @@ static void Task_ReturnToFieldNoScript(u8 taskId) void FieldCB_ReturnToFieldNoScript(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FadeInFromBlack(); CreateTask(Task_ReturnToFieldNoScript, 10); } void FieldCB_ReturnToFieldNoScriptCheckMusic(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); CreateTask(Task_ReturnToFieldNoScript, 10); @@ -486,7 +483,7 @@ static bool32 WaitForWeatherFadeIn(void) void DoWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); @@ -497,7 +494,7 @@ void DoWarp(void) void DoDiveWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); @@ -505,9 +502,9 @@ void DoDiveWarp(void) CreateTask(Task_WarpAndLoadMap, 10); } -void DoSootopolisLegendWarp(void) +void DoWhiteFadeWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); TryFadeOutOldMapMusic(); FadeScreen(FADE_TO_WHITE, 8); PlayRainStoppingSoundEffect(); @@ -517,7 +514,7 @@ void DoSootopolisLegendWarp(void) void DoDoorWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); gFieldCallback = FieldCB_DefaultWarpExit; CreateTask(Task_DoDoorWarp, 10); } @@ -530,19 +527,19 @@ void DoFallWarp(void) void DoEscalatorWarp(u8 metatileBehavior) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); StartEscalatorWarp(metatileBehavior, 10); } void DoLavaridgeGymB1FWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); StartLavaridgeGymB1FWarp(10); } void DoLavaridgeGym1FWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); StartLavaridgeGym1FWarp(10); } @@ -551,7 +548,7 @@ void DoLavaridgeGym1FWarp(void) // Used by teleporting tiles, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut) void DoTeleportTileWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlaySE(SE_WARP_IN); @@ -562,7 +559,7 @@ void DoTeleportTileWarp(void) void DoMossdeepGymWarp(void) { SetObjectEventLoadFlag(SKIP_OBJECT_EVENT_LOAD); - ScriptContext2_Enable(); + LockPlayerFieldControls(); SaveObjectEvents(); TryFadeOutOldMapMusic(); WarpFadeOutScreen(); @@ -573,7 +570,7 @@ void DoMossdeepGymWarp(void) void DoPortholeWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); WarpFadeOutScreen(); CreateTask(Task_WarpAndLoadMap, 10); gFieldCallback = FieldCB_ShowPortholeView; @@ -586,7 +583,7 @@ static void Task_DoCableClubWarp(u8 taskId) switch (task->tState) { case 0: - ScriptContext2_Enable(); + LockPlayerFieldControls(); task->tState++; break; case 1: @@ -603,7 +600,7 @@ static void Task_DoCableClubWarp(u8 taskId) void DoCableClubWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlaySE(SE_EXIT); @@ -654,7 +651,7 @@ static void Task_WarpAndLoadMap(u8 taskId) { case 0: FreezeObjectEvents(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); task->tState++; break; case 1: @@ -738,7 +735,7 @@ static void Task_DoContestHallWarp(u8 taskId) { case 0: FreezeObjectEvents(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); task->tState++; break; case 1: @@ -757,7 +754,7 @@ static void Task_DoContestHallWarp(u8 taskId) void DoContestHallWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); @@ -919,7 +916,7 @@ static void Task_WaitForFlashUpdate(u8 taskId) { if (!FuncIsActiveTask(UpdateFlashLevelEffect)) { - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } } @@ -973,23 +970,23 @@ static u8 StartUpdateOrbFlashEffect(s32 centerX, s32 centerY, s32 initialFlashRa #undef tFlashRadiusDelta #undef tClearScanlineEffect -// A higher flashLevel value is a smaller flash radius (more darkness). 0 is full brightness -void AnimateFlash(u8 flashLevel) +// A higher flash level is a smaller flash radius (more darkness). 0 is full brightness +void AnimateFlash(u8 newFlashLevel) { - u8 curFlashLevel = Overworld_GetFlashLevel(); + u8 curFlashLevel = GetFlashLevel(); bool8 fullBrightness = FALSE; - if (!flashLevel) + if (newFlashLevel == 0) fullBrightness = TRUE; - StartUpdateFlashLevelEffect(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], fullBrightness, 1); + StartUpdateFlashLevelEffect(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelToRadius[curFlashLevel], sFlashLevelToRadius[newFlashLevel], fullBrightness, 1); StartWaitForFlashUpdate(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } void WriteFlashScanlineEffectBuffer(u8 flashLevel) { if (flashLevel) { - SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[flashLevel]); + SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelToRadius[flashLevel]); CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480); } } @@ -1006,7 +1003,7 @@ static void Task_SpinEnterWarp(u8 taskId) { case 0: FreezeObjectEvents(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); DoPlayerSpinEntrance(); gTasks[taskId].tState++; break; @@ -1014,7 +1011,7 @@ static void Task_SpinEnterWarp(u8 taskId) if (WaitForWeatherFadeIn() && IsPlayerSpinEntranceActive() != TRUE) { UnfreezeObjectEvents(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); } break; @@ -1029,7 +1026,7 @@ static void Task_SpinExitWarp(u8 taskId) { case 0: FreezeObjectEvents(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); PlaySE(SE_WARP_IN); DoPlayerSpinExit(); task->tState++; @@ -1057,7 +1054,7 @@ static void Task_SpinExitWarp(u8 taskId) // DoTeleportTileWarp is used instead void DoSpinEnterWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); CreateTask(Task_WarpAndLoadMap, 10); gFieldCallback = FieldCB_SpinEnterWarp; } @@ -1066,7 +1063,7 @@ void DoSpinEnterWarp(void) // Player exits current map by spinning up offscreen, enters new map with a fade in void DoSpinExitWarp(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); gFieldCallback = FieldCB_DefaultWarpExit; CreateTask(Task_SpinExitWarp, 10); } @@ -1147,7 +1144,7 @@ static void Task_OrbEffect(u8 taskId) tState = 1; break; case 1: - sub_8199DF0(0, PIXEL_FILL(1), 0, 1); + BgDmaFill(0, PIXEL_FILL(1), 0, 1); LoadOrbEffectPalette(tBlueOrb); StartUpdateOrbFlashEffect(tCenterX, tCenterY, 1, 160, 1, 2); tState = 2; @@ -1155,7 +1152,7 @@ static void Task_OrbEffect(u8 taskId) case 2: if (!FuncIsActiveTask(UpdateOrbFlashEffect)) { - EnableBothScriptContexts(); + ScriptContext_Enable(); tState = 3; } break; @@ -1192,7 +1189,7 @@ static void Task_OrbEffect(u8 taskId) if (UpdateOrbEffectBlend(tShakeDir) == TRUE) { tState = 5; - sub_8199DF0(0, PIXEL_FILL(0), 0, 1); + BgDmaFill(0, PIXEL_FILL(0), 0, 1); } } break; @@ -1203,7 +1200,7 @@ static void Task_OrbEffect(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, tBldAlpha); SetGpuReg(REG_OFFSET_WININ, tWinIn); SetGpuReg(REG_OFFSET_WINOUT, tWinOut); - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); break; } @@ -1266,6 +1263,6 @@ static void Task_EnableScriptAfterMusicFade(u8 taskId) if (BGMusicStopped() == TRUE) { DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } } diff --git a/src/field_special_scene.c b/src/field_special_scene.c index 3c7016bd1b..7c98703c6b 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -19,7 +19,19 @@ #include "constants/songs.h" #include "constants/metatile_labels.h" -#define SECONDS(value) ((signed) (60.0 * value + 0.5)) +// Most of the boxes in the moving truck are map tiles, with the +// exception of three boxes that are map events that jostle around +// while the truck is driving. In addition, their sprite's placement +// is slightly offset to make them look less perfectly stacked. +// Box 1 (LOCALID_TRUCK_BOX_TOP) +#define BOX1_X_OFFSET 3 +#define BOX1_Y_OFFSET 3 +// Box 2 (LOCALID_TRUCK_BOX_BOTTOM_L) +#define BOX2_X_OFFSET 0 +#define BOX2_Y_OFFSET -3 +// Box 3 (LOCALID_TRUCK_BOX_BOTTOM_R) +#define BOX3_X_OFFSET -3 +#define BOX3_Y_OFFSET 0 // porthole states enum @@ -30,198 +42,216 @@ enum EXIT_PORTHOLE, }; -//. rodata -static const s8 gTruckCamera_HorizontalTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, -1, -1, -1, 0}; +static const s8 sTruckCamera_HorizontalTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, -1, -1, -1, 0}; -static const u8 sSSTidalSailEastMovementScript[] = +static const u8 sSSTidalSailEastMovementScript[] = { - MOVEMENT_ACTION_WALK_FAST_RIGHT, + MOVEMENT_ACTION_WALK_FAST_RIGHT, MOVEMENT_ACTION_STEP_END }; -static const u8 sSSTidalSailWestMovementScript[] = +static const u8 sSSTidalSailWestMovementScript[] = { - MOVEMENT_ACTION_WALK_FAST_LEFT, + MOVEMENT_ACTION_WALK_FAST_LEFT, MOVEMENT_ACTION_STEP_END }; -// .text static void Task_Truck3(u8); -s16 GetTruckCameraBobbingY(int a1) +static s16 GetTruckCameraBobbingY(int time) { - if (!(a1 % 120)) + if (!(time % 120)) return -1; - else if ((a1 % 10) <= 4) + else if ((time % 10) <= 4) return 1; return 0; } -s16 GetTruckBoxMovement(int a1) // for the box movement? +// Determines the frequency that the truck boxes bounce at. +// The return value of this function is multiplied and added +// to the boxes resting y offset, the result of which is that +// when it returns 0 they remain vertically still and when it +// returns -1 they jump upward. +// Box 1 has 30 added to the time so it jumps earlier, and +// box 2 has the return value multiplied by less, so it doesn't +// jump as high. +static s16 GetTruckBoxYMovement(int time) { - if (!((a1 + 120) % 180)) + if (!((time + 120) % 180)) return -1; return 0; } -void Task_Truck1(u8 taskId) +#define tTimer data[0] + +static void Task_Truck1(u8 taskId) { s16 *data = gTasks[taskId].data; s16 cameraXpan = 0, cameraYpan = 0; - s16 box1, box2, box3; + s16 yBox1, yBox2, yBox3; - box1 = GetTruckBoxMovement(data[0] + 30) * 4; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3); - box2 = GetTruckBoxMovement(data[0]) * 2; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3); - box3 = GetTruckBoxMovement(data[0]) * 4; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3); + yBox1 = GetTruckBoxYMovement(tTimer + 30) * 4; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET - cameraXpan, BOX1_Y_OFFSET + yBox1); + yBox2 = GetTruckBoxYMovement(tTimer) * 2; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET - cameraXpan, BOX2_Y_OFFSET + yBox2); + yBox3 = GetTruckBoxYMovement(tTimer) * 4; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET - cameraXpan, BOX3_Y_OFFSET + yBox3); - if (++data[0] == SECONDS(500)) // this will never run - data[0] = 0; // reset the timer if it gets stuck. + // Arbitrary timer limit that won't be reached + if (++tTimer == 30000) + tTimer = 0; - cameraYpan = GetTruckCameraBobbingY(data[0]); + cameraYpan = GetTruckCameraBobbingY(tTimer); SetCameraPanning(cameraXpan, cameraYpan); } -void Task_Truck2(u8 taskId) +#undef tTimer + +#define tTimerHorizontal data[0] +#define tMoveStep data[1] +#define tTimerVertical data[2] + +static void Task_Truck2(u8 taskId) { s16 *data = gTasks[taskId].data; - s16 cameraYpan; - s16 cameraXpan; - s16 box1; - s16 box2; - s16 box3; + s16 cameraYpan, cameraXpan; + s16 yBox1, yBox2, yBox3; - data[0]++; - data[2]++; + tTimerHorizontal++; + tTimerVertical++; - if (data[0] > 5) + if (tTimerHorizontal > 5) { - data[0] = 0; - data[1]++; + tTimerHorizontal = 0; + tMoveStep++; } - if ((u16)data[1] == 19) + if ((u16)tMoveStep == ARRAY_COUNT(sTruckCamera_HorizontalTable)) { + // Never reached, the task function is changed below before finishing the table DestroyTask(taskId); } else { - if (gTruckCamera_HorizontalTable[data[1]] == 2) + if (sTruckCamera_HorizontalTable[tMoveStep] == 2) gTasks[taskId].func = Task_Truck3; - cameraXpan = gTruckCamera_HorizontalTable[data[1]]; - cameraYpan = GetTruckCameraBobbingY(data[2]); + cameraXpan = sTruckCamera_HorizontalTable[tMoveStep]; + cameraYpan = GetTruckCameraBobbingY(tTimerVertical); SetCameraPanning(cameraXpan, cameraYpan); - box1 = GetTruckBoxMovement(data[2] + 30) * 4; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3); - box2 = GetTruckBoxMovement(data[2]) * 2; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3); - box3 = GetTruckBoxMovement(data[2]) * 4; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3); + yBox1 = GetTruckBoxYMovement(tTimerVertical + 30) * 4; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET - cameraXpan, BOX1_Y_OFFSET + yBox1); + yBox2 = GetTruckBoxYMovement(tTimerVertical) * 2; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET - cameraXpan, BOX2_Y_OFFSET + yBox2); + yBox3 = GetTruckBoxYMovement(tTimerVertical) * 4; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET - cameraXpan, BOX3_Y_OFFSET + yBox3); } } static void Task_Truck3(u8 taskId) { s16 *data = gTasks[taskId].data; - s16 cameraXpan; - s16 cameraYpan; + s16 cameraXpan, cameraYpan; - data[0]++; + tTimerHorizontal++; - if (data[0] > 5) + if (tTimerHorizontal > 5) { - data[0] = 0; - data[1]++; + tTimerHorizontal = 0; + tMoveStep++; } - if ((u16)data[1] == 19) + if ((u16)tMoveStep == ARRAY_COUNT(sTruckCamera_HorizontalTable)) { DestroyTask(taskId); } else { - cameraXpan = gTruckCamera_HorizontalTable[data[1]]; + cameraXpan = sTruckCamera_HorizontalTable[tMoveStep]; cameraYpan = 0; - SetCameraPanning(cameraXpan, 0); - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3); - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3); - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan); + SetCameraPanning(cameraXpan, cameraYpan); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET - cameraXpan, BOX1_Y_OFFSET + cameraYpan); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET - cameraXpan, BOX2_Y_OFFSET + cameraYpan); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET - cameraXpan, BOX3_Y_OFFSET + cameraYpan); } } -void Task_HandleTruckSequence(u8 taskId) +#undef tTimerHorizontal +#undef tMoveStep +#undef tTimerVertical + +#define tState data[0] +#define tTimer data[1] +#define tTaskId1 data[2] +#define tTaskId2 data[3] + +static void Task_HandleTruckSequence(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { - /* - Each case has a timer which is handled with data[1], incrementing - until it reaches the if function's condition, which sets the next task up. - */ case 0: - data[1]++; - if (data[1] == SECONDS(1.5)) + tTimer++; + if (tTimer == 90) { SetCameraPanningCallback(NULL); - data[1] = 0; // reset the timer. - data[2] = CreateTask(Task_Truck1, 0xA); - data[0] = 1; // run the next case. + tTimer = 0; + tTaskId1 = CreateTask(Task_Truck1, 0xA); + tState = 1; PlaySE(SE_TRUCK_MOVE); } break; case 1: - data[1]++; - if (data[1] == SECONDS(2.5)) + tTimer++; + if (tTimer == 150) { FadeInFromBlack(); - data[1] = 0; - data[0] = 2; + tTimer = 0; + tState = 2; } break; case 2: - data[1]++; - if (!gPaletteFade.active && data[1] > SECONDS(5)) + tTimer++; + if (!gPaletteFade.active && tTimer > 300) { - data[1] = 0; - DestroyTask(data[2]); - data[3] = CreateTask(Task_Truck2, 0xA); - data[0] = 3; + tTimer = 0; + DestroyTask(tTaskId1); + tTaskId2 = CreateTask(Task_Truck2, 0xA); + tState = 3; PlaySE(SE_TRUCK_STOP); } break; case 3: - if (!gTasks[data[3]].isActive) // is Truck2 no longer active (is Truck3 active?) + if (!gTasks[tTaskId2].isActive) { + // Task_Truck2 / Task_Truck3 has finished InstallCameraPanAheadCallback(); - data[1] = 0; - data[0] = 4; + tTimer = 0; + tState = 4; } break; case 4: - data[1]++; - if (data[1] == 90) + tTimer++; + if (tTimer == 90) { PlaySE(SE_TRUCK_UNLOAD); - data[1] = 0; - data[0] = 5; + tTimer = 0; + tState = 5; } break; case 5: - data[1]++; - if (data[1] == 120) + tTimer++; + if (tTimer == 120) { - MapGridSetMetatileIdAt(11, 8, METATILE_InsideOfTruck_ExitLight_Top); - MapGridSetMetatileIdAt(11, 9, METATILE_InsideOfTruck_ExitLight_Mid); - MapGridSetMetatileIdAt(11, 10, METATILE_InsideOfTruck_ExitLight_Bottom); + MapGridSetMetatileIdAt(4 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_InsideOfTruck_ExitLight_Top); + MapGridSetMetatileIdAt(4 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_InsideOfTruck_ExitLight_Mid); + MapGridSetMetatileIdAt(4 + MAP_OFFSET, 3 + MAP_OFFSET, METATILE_InsideOfTruck_ExitLight_Bottom); DrawWholeMapView(); PlaySE(SE_TRUCK_DOOR); DestroyTask(taskId); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); } break; } @@ -229,11 +259,11 @@ void Task_HandleTruckSequence(u8 taskId) void ExecuteTruckSequence(void) { - MapGridSetMetatileIdAt(11, 8, METATILE_InsideOfTruck_DoorClosedFloor_Top); - MapGridSetMetatileIdAt(11, 9, METATILE_InsideOfTruck_DoorClosedFloor_Mid); - MapGridSetMetatileIdAt(11, 10, METATILE_InsideOfTruck_DoorClosedFloor_Bottom); + MapGridSetMetatileIdAt(4 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_InsideOfTruck_DoorClosedFloor_Top); + MapGridSetMetatileIdAt(4 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_InsideOfTruck_DoorClosedFloor_Mid); + MapGridSetMetatileIdAt(4 + MAP_OFFSET, 3 + MAP_OFFSET, METATILE_InsideOfTruck_DoorClosedFloor_Bottom); DrawWholeMapView(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); CpuFastFill(0, gPlttBufferFaded, 0x400); CreateTask(Task_HandleTruckSequence, 0xA); } @@ -242,9 +272,9 @@ void EndTruckSequence(u8 taskId) { if (!FuncIsActiveTask(Task_HandleTruckSequence)) { - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3); - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3); - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET, BOX1_Y_OFFSET); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET, BOX2_Y_OFFSET); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET, BOX3_Y_OFFSET); } } @@ -259,7 +289,7 @@ bool8 TrySetPortholeWarpDestination(void) } else { - SetWarpDestination(mapGroup, mapNum, -1, x, y); + SetWarpDestination(mapGroup, mapNum, WARP_ID_NONE, x, y); return TRUE; } } @@ -325,7 +355,7 @@ void Task_HandlePorthole(u8 taskId) static void ShowSSTidalWhileSailing(void) { - u8 spriteId = AddPseudoObjectEvent(OBJ_EVENT_GFX_SS_TIDAL, SpriteCallbackDummy, 112, 80, 0); + u8 spriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_SS_TIDAL, SpriteCallbackDummy, 112, 80, 0); gSprites[spriteId].coordOffsetEnabled = FALSE; @@ -341,7 +371,7 @@ void FieldCB_ShowPortholeView(void) gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; FadeInFromBlack(); CreateTask(Task_HandlePorthole, 80); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } void LookThroughPorthole(void) @@ -349,7 +379,7 @@ void LookThroughPorthole(void) FlagSet(FLAG_SYS_CRUISE_MODE); FlagSet(FLAG_DONT_TRANSITION_MUSIC); FlagSet(FLAG_HIDE_MAP_NAME_POPUP); - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); TrySetPortholeWarpDestination(); DoPortholeWarp(); } diff --git a/src/field_specials.c b/src/field_specials.c index 46f8e7fe89..eb4db96f88 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -22,7 +22,7 @@ #include "link.h" #include "list_menu.h" #include "main.h" -#include "mevent.h" +#include "mystery_gift.h" #include "match_call.h" #include "menu.h" #include "overworld.h" @@ -55,8 +55,7 @@ #include "constants/items.h" #include "constants/heal_locations.h" #include "constants/map_types.h" -#include "constants/maps.h" -#include "constants/mevent.h" +#include "constants/mystery_gift.h" #include "constants/script_menu.h" #include "constants/slot_machine.h" #include "constants/songs.h" @@ -66,6 +65,7 @@ #include "constants/weather.h" #include "constants/metatile_labels.h" #include "palette.h" +#include "battle_util.h" EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE; EWRAM_DATA u8 gBikeCollisions = 0; @@ -91,56 +91,56 @@ void SetPlayerGotFirstFans(void); u16 GetNumFansOfPlayerInTrainerFanClub(void); static void RecordCyclingRoadResults(u32, u8); -static void LoadLinkPartnerObjectEventSpritePalette(u8 graphicsId, u8 localEventId, u8 paletteNum); -static void Task_PetalburgGymSlideOpenRoomDoors(u8 taskId); -static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId); +static void LoadLinkPartnerObjectEventSpritePalette(u8, u8, u8); +static void Task_PetalburgGymSlideOpenRoomDoors(u8); +static void PetalburgGymSetDoorMetatiles(u8, u16); static void Task_PCTurnOnEffect(u8); static void PCTurnOnEffect_0(struct Task *); static void PCTurnOnEffect_1(s16, s8, s8); static void PCTurnOffEffect(void); static void Task_LotteryCornerComputerEffect(u8); static void LotteryCornerComputerEffect(struct Task *); -static void Task_ShakeCamera(u8 taskId); -static void StopCameraShake(u8 taskId); -static void Task_MoveElevator(u8 taskId); -static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending); -static void Task_MoveElevatorWindowLights(u8 taskId); -static void Task_ShowScrollableMultichoice(u8 taskId); -static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection); -static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection); +static void Task_ShakeCamera(u8); +static void StopCameraShake(u8); +static void Task_MoveElevator(u8); +static void MoveElevatorWindowLights(u16, bool8); +static void Task_MoveElevatorWindowLights(u8); +static void Task_ShowScrollableMultichoice(u8); +static void FillFrontierExchangeCornerWindowAndItemIcon(u16, u16); +static void ShowBattleFrontierTutorWindow(u8, u16); static void InitScrollableMultichoice(void); -static void ScrollableMultichoice_ProcessInput(u8 taskId); -static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId); -static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list); -static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused); -static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection); -static void CloseScrollableMultichoice(u8 taskId); -static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId); -static void sub_813A600(u8 taskId); -static void sub_813A664(u8 taskId); -static void ShowFrontierExchangeCornerItemIcon(u16 item); -static void Task_DeoxysRockInteraction(u8 taskId); -static void ChangeDeoxysRockLevel(u8 a0); -static void WaitForDeoxysRockMovement(u8 taskId); -static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId); -static void Task_LoopWingFlapSE(u8 taskId); -static void Task_CloseBattlePikeCurtain(u8 taskId); +static void ScrollableMultichoice_ProcessInput(u8); +static void ScrollableMultichoice_UpdateScrollArrows(u8); +static void ScrollableMultichoice_MoveCursor(s32, bool8, struct ListMenu *); +static void HideFrontierExchangeCornerItemIcon(u16, u16); +static void ShowBattleFrontierTutorMoveDescription(u8, u16); +static void CloseScrollableMultichoice(u8); +static void ScrollableMultichoice_RemoveScrollArrows(u8); +static void Task_ScrollableMultichoice_WaitReturnToList(u8); +static void Task_ScrollableMultichoice_ReturnToList(u8); +static void ShowFrontierExchangeCornerItemIcon(u16); +static void Task_DeoxysRockInteraction(u8); +static void ChangeDeoxysRockLevel(u8); +static void WaitForDeoxysRockMovement(u8); +static void Task_LinkRetireStatusWithBattleTowerPartner(u8); +static void Task_LoopWingFlapSE(u8); +static void Task_CloseBattlePikeCurtain(u8); static u8 DidPlayerGetFirstFans(void); static void SetInitialFansOfPlayer(void); static u16 PlayerGainRandomTrainerFan(void); -static void BufferFanClubTrainerName_(struct LinkBattleRecords *linkRecords, u8 a, u8 b); +static void BufferFanClubTrainerName_(struct LinkBattleRecords *, u8, u8); void Special_ShowDiploma(void) { SetMainCallback2(CB2_ShowDiploma); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } void Special_ViewWallClock(void) { gMain.savedCallback = CB2_ReturnToField; SetMainCallback2(CB2_ViewWallClock); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } void ResetCyclingRoadChallengeData(void) @@ -183,7 +183,7 @@ static void DetermineCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) if (numFrames < 3600) { ConvertIntToDecimalStringN(gStringVar2, numFrames / 60, STR_CONV_MODE_RIGHT_ALIGN, 2); - gStringVar2[2] = CHAR_PERIOD; + gStringVar2[2] = CHAR_DEC_SEPARATOR; ConvertIntToDecimalStringN(&gStringVar2[3], ((numFrames % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar2, gText_SpaceSeconds); } @@ -194,59 +194,40 @@ static void DetermineCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) result = 0; if (numBikeCollisions == 0) - { result = 5; - } else if (numBikeCollisions < 4) - { result = 4; - } else if (numBikeCollisions < 10) - { result = 3; - } else if (numBikeCollisions < 20) - { result = 2; - } else if (numBikeCollisions < 100) - { result = 1; - } if (numFrames / 60 <= 10) - { result += 5; - } else if (numFrames / 60 <= 15) - { result += 4; - } else if (numFrames / 60 <= 20) - { result += 3; - } else if (numFrames / 60 <= 40) - { result += 2; - } else if (numFrames / 60 < 60) - { result += 1; - } - gSpecialVar_Result = result; } -void FinishCyclingRoadChallenge(void) { +void FinishCyclingRoadChallenge(void) +{ const u32 numFrames = gMain.vblankCounter1 - sBikeCyclingTimer; DetermineCyclingRoadResults(numFrames, gBikeCollisions); RecordCyclingRoadResults(numFrames, gBikeCollisions); } -static void RecordCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) { +static void RecordCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) +{ u16 low = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_L); u16 high = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_H); u32 framesRecord = low + (high << 16); @@ -259,25 +240,23 @@ static void RecordCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) { } } -u16 GetRecordedCyclingRoadResults(void) { +u16 GetRecordedCyclingRoadResults(void) +{ u16 low = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_L); u16 high = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_H); u32 framesRecord = low + (high << 16); if (framesRecord == 0) - { return FALSE; - } DetermineCyclingRoadResults(framesRecord, VarGet(VAR_CYCLING_ROAD_RECORD_COLLISIONS)); return TRUE; } -void UpdateCyclingRoadState(void) { +void UpdateCyclingRoadState(void) +{ if (gLastUsedWarp.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE) && gLastUsedWarp.mapGroup == MAP_GROUP(ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE)) - { return; - } if (VarGet(VAR_CYCLING_CHALLENGE_STATE) == 2 || VarGet(VAR_CYCLING_CHALLENGE_STATE) == 3) { @@ -301,9 +280,8 @@ void ResetSSTidalFlag(void) bool32 CountSSTidalStep(u16 delta) { if (!FlagGet(FLAG_SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) < SS_TIDAL_MAX_STEPS) - { return FALSE; - } + return TRUE; } @@ -312,51 +290,52 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y) u16 *varCruiseStepCount = GetVarPointer(VAR_CRUISE_STEP_COUNT); switch (*GetVarPointer(VAR_SS_TIDAL_STATE)) { - case SS_TIDAL_BOARD_SLATEPORT: - case SS_TIDAL_LAND_SLATEPORT: - return SS_TIDAL_LOCATION_SLATEPORT; - case SS_TIDAL_HALFWAY_LILYCOVE: - case SS_TIDAL_EXIT_CURRENTS_RIGHT: - return SS_TIDAL_LOCATION_ROUTE131; - case SS_TIDAL_LAND_LILYCOVE: - case SS_TIDAL_BOARD_LILYCOVE: - return SS_TIDAL_LOCATION_LILYCOVE; - case SS_TIDAL_DEPART_LILYCOVE: - case SS_TIDAL_EXIT_CURRENTS_LEFT: - return SS_TIDAL_LOCATION_ROUTE124; - case SS_TIDAL_DEPART_SLATEPORT: - if (*varCruiseStepCount < 60) - { - *mapNum = MAP_NUM(ROUTE134); - *x = *varCruiseStepCount + 19; - } - else if (*varCruiseStepCount < 140) - { - *mapNum = MAP_NUM(ROUTE133); - *x = *varCruiseStepCount - 60; - } - else - { - *mapNum = MAP_NUM(ROUTE132); - *x = *varCruiseStepCount - 140; - } - break; - case SS_TIDAL_HALFWAY_SLATEPORT: - if (*varCruiseStepCount < 66) - { - *mapNum = MAP_NUM(ROUTE132); - *x = 65 - *varCruiseStepCount; - } - else if (*varCruiseStepCount < 146) { - *mapNum = MAP_NUM(ROUTE133); - *x = 145 - *varCruiseStepCount; - } - else - { - *mapNum = MAP_NUM(ROUTE134); - *x = 224 - *varCruiseStepCount; - } - break; + case SS_TIDAL_BOARD_SLATEPORT: + case SS_TIDAL_LAND_SLATEPORT: + return SS_TIDAL_LOCATION_SLATEPORT; + case SS_TIDAL_HALFWAY_LILYCOVE: + case SS_TIDAL_EXIT_CURRENTS_RIGHT: + return SS_TIDAL_LOCATION_ROUTE131; + case SS_TIDAL_LAND_LILYCOVE: + case SS_TIDAL_BOARD_LILYCOVE: + return SS_TIDAL_LOCATION_LILYCOVE; + case SS_TIDAL_DEPART_LILYCOVE: + case SS_TIDAL_EXIT_CURRENTS_LEFT: + return SS_TIDAL_LOCATION_ROUTE124; + case SS_TIDAL_DEPART_SLATEPORT: + if (*varCruiseStepCount < 60) + { + *mapNum = MAP_NUM(ROUTE134); + *x = *varCruiseStepCount + 19; + } + else if (*varCruiseStepCount < 140) + { + *mapNum = MAP_NUM(ROUTE133); + *x = *varCruiseStepCount - 60; + } + else + { + *mapNum = MAP_NUM(ROUTE132); + *x = *varCruiseStepCount - 140; + } + break; + case SS_TIDAL_HALFWAY_SLATEPORT: + if (*varCruiseStepCount < 66) + { + *mapNum = MAP_NUM(ROUTE132); + *x = 65 - *varCruiseStepCount; + } + else if (*varCruiseStepCount < 146) + { + *mapNum = MAP_NUM(ROUTE133); + *x = 145 - *varCruiseStepCount; + } + else + { + *mapNum = MAP_NUM(ROUTE134); + *x = 224 - *varCruiseStepCount; + } + break; } *mapGroup = MAP_GROUP(ROUTE132); *y = 20; @@ -369,17 +348,15 @@ bool32 ShouldDoWallyCall(void) { switch (gMapHeader.mapType) { - case MAP_TYPE_TOWN: - case MAP_TYPE_CITY: - case MAP_TYPE_ROUTE: - case MAP_TYPE_OCEAN_ROUTE: - if (++(*GetVarPointer(VAR_WALLY_CALL_STEP_COUNTER)) < 250) - { - return FALSE; - } - break; - default: + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + case MAP_TYPE_OCEAN_ROUTE: + if (++(*GetVarPointer(VAR_WALLY_CALL_STEP_COUNTER)) < 250) return FALSE; + break; + default: + return FALSE; } } else @@ -396,17 +373,15 @@ bool32 ShouldDoScottFortreeCall(void) { switch (gMapHeader.mapType) { - case MAP_TYPE_TOWN: - case MAP_TYPE_CITY: - case MAP_TYPE_ROUTE: - case MAP_TYPE_OCEAN_ROUTE: - if (++(*GetVarPointer(VAR_SCOTT_FORTREE_CALL_STEP_COUNTER)) < 10) - { - return FALSE; - } - break; - default: + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + case MAP_TYPE_OCEAN_ROUTE: + if (++(*GetVarPointer(VAR_SCOTT_FORTREE_CALL_STEP_COUNTER)) < 10) return FALSE; + break; + default: + return FALSE; } } else @@ -423,17 +398,15 @@ bool32 ShouldDoScottBattleFrontierCall(void) { switch (gMapHeader.mapType) { - case MAP_TYPE_TOWN: - case MAP_TYPE_CITY: - case MAP_TYPE_ROUTE: - case MAP_TYPE_OCEAN_ROUTE: - if (++(*GetVarPointer(VAR_SCOTT_BF_CALL_STEP_COUNTER)) < 10) - { - return FALSE; - } - break; - default: + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + case MAP_TYPE_OCEAN_ROUTE: + if (++(*GetVarPointer(VAR_SCOTT_BF_CALL_STEP_COUNTER)) < 10) return FALSE; + break; + default: + return FALSE; } } else @@ -450,17 +423,15 @@ bool32 ShouldDoRoxanneCall(void) { switch (gMapHeader.mapType) { - case MAP_TYPE_TOWN: - case MAP_TYPE_CITY: - case MAP_TYPE_ROUTE: - case MAP_TYPE_OCEAN_ROUTE: - if (++(*GetVarPointer(VAR_ROXANNE_CALL_STEP_COUNTER)) < 250) - { - return FALSE; - } - break; - default: + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + case MAP_TYPE_OCEAN_ROUTE: + if (++(*GetVarPointer(VAR_ROXANNE_CALL_STEP_COUNTER)) < 250) return FALSE; + break; + default: + return FALSE; } } else @@ -477,17 +448,15 @@ bool32 ShouldDoRivalRayquazaCall(void) { switch (gMapHeader.mapType) { - case MAP_TYPE_TOWN: - case MAP_TYPE_CITY: - case MAP_TYPE_ROUTE: - case MAP_TYPE_OCEAN_ROUTE: - if (++(*GetVarPointer(VAR_RIVAL_RAYQUAZA_CALL_STEP_COUNTER)) < 250) - { - return FALSE; - } - break; - default: + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + case MAP_TYPE_OCEAN_ROUTE: + if (++(*GetVarPointer(VAR_RIVAL_RAYQUAZA_CALL_STEP_COUNTER)) < 250) return FALSE; + break; + default: + return FALSE; } } else @@ -521,9 +490,9 @@ void SpawnLinkPartnerObjectEvent(void) s16 x = 0; s16 y = 0; u8 movementTypes[] = { - MOVEMENT_TYPE_FACE_UP, - MOVEMENT_TYPE_FACE_LEFT, - MOVEMENT_TYPE_FACE_DOWN, + MOVEMENT_TYPE_FACE_UP, + MOVEMENT_TYPE_FACE_LEFT, + MOVEMENT_TYPE_FACE_DOWN, MOVEMENT_TYPE_FACE_RIGHT }; s8 coordOffsets[][2] = { @@ -541,24 +510,24 @@ void SpawnLinkPartnerObjectEvent(void) playerFacingDirection = GetPlayerFacingDirection(); switch (playerFacingDirection) { - case DIR_WEST: - j = 2; - x = gSaveBlock1Ptr->pos.x - 1; - y = gSaveBlock1Ptr->pos.y; - break; - case DIR_NORTH: - j = 1; - x = gSaveBlock1Ptr->pos.x; - y = gSaveBlock1Ptr->pos.y - 1; - break; - case DIR_EAST: - x = gSaveBlock1Ptr->pos.x + 1; - y = gSaveBlock1Ptr->pos.y; - break; - case DIR_SOUTH: - j = 3; - x = gSaveBlock1Ptr->pos.x; - y = gSaveBlock1Ptr->pos.y + 1; + case DIR_WEST: + j = 2; + x = gSaveBlock1Ptr->pos.x - 1; + y = gSaveBlock1Ptr->pos.y; + break; + case DIR_NORTH: + j = 1; + x = gSaveBlock1Ptr->pos.x; + y = gSaveBlock1Ptr->pos.y - 1; + break; + case DIR_EAST: + x = gSaveBlock1Ptr->pos.x + 1; + y = gSaveBlock1Ptr->pos.y; + break; + case DIR_SOUTH: + j = 3; + x = gSaveBlock1Ptr->pos.x; + y = gSaveBlock1Ptr->pos.y + 1; } for (i = 0; i < gSpecialVar_0x8004; i++) { @@ -566,33 +535,31 @@ void SpawnLinkPartnerObjectEvent(void) { switch ((u8)gLinkPlayers[i].version) { - case VERSION_RUBY: - case VERSION_SAPPHIRE: - if (gLinkPlayers[i].gender == 0) - linkSpriteId = OBJ_EVENT_GFX_LINK_RS_BRENDAN; - else - linkSpriteId = OBJ_EVENT_GFX_LINK_RS_MAY; - break; - case VERSION_EMERALD: - if (gLinkPlayers[i].gender == 0) - linkSpriteId = OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL; - else - linkSpriteId = OBJ_EVENT_GFX_RIVAL_MAY_NORMAL; - break; - default: - if (gLinkPlayers[i].gender == 0) - linkSpriteId = OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL; - else - linkSpriteId = OBJ_EVENT_GFX_RIVAL_MAY_NORMAL; - break; + case VERSION_RUBY: + case VERSION_SAPPHIRE: + if (gLinkPlayers[i].gender == 0) + linkSpriteId = OBJ_EVENT_GFX_LINK_RS_BRENDAN; + else + linkSpriteId = OBJ_EVENT_GFX_LINK_RS_MAY; + break; + case VERSION_EMERALD: + if (gLinkPlayers[i].gender == 0) + linkSpriteId = OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL; + else + linkSpriteId = OBJ_EVENT_GFX_RIVAL_MAY_NORMAL; + break; + default: + if (gLinkPlayers[i].gender == 0) + linkSpriteId = OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL; + else + linkSpriteId = OBJ_EVENT_GFX_RIVAL_MAY_NORMAL; + break; } - SpawnSpecialObjectEventParameterized(linkSpriteId, movementTypes[j], 240 - i, coordOffsets[j][0] + x + 7, coordOffsets[j][1] + y + 7, 0); + SpawnSpecialObjectEventParameterized(linkSpriteId, movementTypes[j], 240 - i, coordOffsets[j][0] + x + MAP_OFFSET, coordOffsets[j][1] + y + MAP_OFFSET, 0); LoadLinkPartnerObjectEventSpritePalette(linkSpriteId, 240 - i, i); j++; if (j == MAX_LINK_PLAYERS) - { j = 0; - } } } } @@ -633,13 +600,12 @@ static void LoadLinkPartnerObjectEventSpritePalette(u8 graphicsId, u8 localEvent } } -// NOTE: Coordinates are +7, +7 from actual in-map coordinates static const struct UCoords8 sMauvilleGymSwitchCoords[] = { - { 7, 22}, - {11, 19}, - {10, 16}, - {15, 16} + { 0 + MAP_OFFSET, 15 + MAP_OFFSET}, + { 4 + MAP_OFFSET, 12 + MAP_OFFSET}, + { 3 + MAP_OFFSET, 9 + MAP_OFFSET}, + { 8 + MAP_OFFSET, 9 + MAP_OFFSET} }; // Presses the stepped-on switch and raises the rest @@ -659,91 +625,91 @@ void MauvilleGymPressSwitch(void) void MauvilleGymSetDefaultBarriers(void) { int x, y; - // All switches/barriers are within these coord ranges -7 - for (y = 12; y < 24; y++) + // All switches/barriers are within these coord ranges + for (y = 5 + MAP_OFFSET; y < 17 + MAP_OFFSET; y++) { - for (x = 7; x < 16; x++) + for (x = 0 + MAP_OFFSET; x < 9 + MAP_OFFSET; x++) { switch (MapGridGetMetatileIdAt(x, y)) { - case METATILE_MauvilleGym_GreenBeamH1_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_Off); - break; - case METATILE_MauvilleGym_GreenBeamH2_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_Off); - break; - case METATILE_MauvilleGym_GreenBeamH3_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_Off); - break; - case METATILE_MauvilleGym_GreenBeamH4_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_Off); - break; - case METATILE_MauvilleGym_GreenBeamH1_Off: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_On); - break; - case METATILE_MauvilleGym_GreenBeamH2_Off: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_On); - break; - case METATILE_MauvilleGym_GreenBeamH3_Off: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_On | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_GreenBeamH4_Off: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_On | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_RedBeamH1_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off); - break; - case METATILE_MauvilleGym_RedBeamH2_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_Off); - break; - case METATILE_MauvilleGym_RedBeamH3_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_Off); - break; - case METATILE_MauvilleGym_RedBeamH4_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off); - break; - case METATILE_MauvilleGym_RedBeamH1_Off: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_On); - break; - case METATILE_MauvilleGym_RedBeamH2_Off: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_On); - break; - case METATILE_MauvilleGym_RedBeamH3_Off: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_On | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_RedBeamH4_Off: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_On | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_GreenBeamV1_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_GreenBeamV2_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); - break; - case METATILE_MauvilleGym_RedBeamV1_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_RedBeamV2_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); - break; - case METATILE_MauvilleGym_PoleBottom_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV1_On | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_FloorTile: - if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_MauvilleGym_GreenBeamV1_On) - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV2_On | METATILE_COLLISION_MASK); - else - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV2_On | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_PoleBottom_Off: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV1_On | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_PoleTop_Off: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_On | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_PoleTop_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off); - break; + case METATILE_MauvilleGym_GreenBeamH1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_Off); + break; + case METATILE_MauvilleGym_GreenBeamH2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_Off); + break; + case METATILE_MauvilleGym_GreenBeamH3_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_Off); + break; + case METATILE_MauvilleGym_GreenBeamH4_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_Off); + break; + case METATILE_MauvilleGym_GreenBeamH1_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_On); + break; + case METATILE_MauvilleGym_GreenBeamH2_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_On); + break; + case METATILE_MauvilleGym_GreenBeamH3_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_On | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_GreenBeamH4_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_On | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_RedBeamH1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off); + break; + case METATILE_MauvilleGym_RedBeamH2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_Off); + break; + case METATILE_MauvilleGym_RedBeamH3_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_Off); + break; + case METATILE_MauvilleGym_RedBeamH4_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off); + break; + case METATILE_MauvilleGym_RedBeamH1_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_On); + break; + case METATILE_MauvilleGym_RedBeamH2_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_On); + break; + case METATILE_MauvilleGym_RedBeamH3_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_On | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_RedBeamH4_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_On | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_GreenBeamV1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_GreenBeamV2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); + break; + case METATILE_MauvilleGym_RedBeamV1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_RedBeamV2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); + break; + case METATILE_MauvilleGym_PoleBottom_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV1_On | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_FloorTile: + if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_MauvilleGym_GreenBeamV1_On) + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV2_On | MAPGRID_COLLISION_MASK); + else + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV2_On | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_PoleBottom_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV1_On | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_PoleTop_Off: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_On | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_PoleTop_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off); + break; } } } @@ -759,49 +725,49 @@ void MauvilleGymDeactivatePuzzle(void) MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, METATILE_MauvilleGym_PressedSwitch); switchCoords++; } - for (y = 12; y < 24; y++) + for (y = 5 + MAP_OFFSET; y < 17 + MAP_OFFSET; y++) { - for (x = 7; x < 16; x++) + for (x = 0 + MAP_OFFSET; x < 9 + MAP_OFFSET; x++) { switch (MapGridGetMetatileIdAt(x, y)) { - case METATILE_MauvilleGym_GreenBeamH1_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_Off); - break; - case METATILE_MauvilleGym_GreenBeamH2_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_Off); - break; - case METATILE_MauvilleGym_GreenBeamH3_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_Off); - break; - case METATILE_MauvilleGym_GreenBeamH4_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_Off); - break; - case METATILE_MauvilleGym_RedBeamH1_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off); - break; - case METATILE_MauvilleGym_RedBeamH2_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_Off); - break; - case METATILE_MauvilleGym_RedBeamH3_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_Off); - break; - case METATILE_MauvilleGym_RedBeamH4_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off); - break; - case METATILE_MauvilleGym_GreenBeamV1_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_RedBeamV1_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | METATILE_COLLISION_MASK); - break; - case METATILE_MauvilleGym_GreenBeamV2_On: - case METATILE_MauvilleGym_RedBeamV2_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); - break; - case METATILE_MauvilleGym_PoleTop_On: - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off); - break; + case METATILE_MauvilleGym_GreenBeamH1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_Off); + break; + case METATILE_MauvilleGym_GreenBeamH2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_Off); + break; + case METATILE_MauvilleGym_GreenBeamH3_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_Off); + break; + case METATILE_MauvilleGym_GreenBeamH4_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_Off); + break; + case METATILE_MauvilleGym_RedBeamH1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off); + break; + case METATILE_MauvilleGym_RedBeamH2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_Off); + break; + case METATILE_MauvilleGym_RedBeamH3_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_Off); + break; + case METATILE_MauvilleGym_RedBeamH4_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off); + break; + case METATILE_MauvilleGym_GreenBeamV1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_RedBeamV1_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | MAPGRID_COLLISION_MASK); + break; + case METATILE_MauvilleGym_GreenBeamV2_On: + case METATILE_MauvilleGym_RedBeamV2_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); + break; + case METATILE_MauvilleGym_PoleTop_On: + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off); + break; } } } @@ -834,7 +800,7 @@ static void Task_PetalburgGymSlideOpenRoomDoors(u8 taskId) if ((++sSlidingDoorFrame) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles)) { DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } } else @@ -851,59 +817,59 @@ static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId) u8 nDoors = 0; switch (roomNumber) { - case 1: - nDoors = 2; - doorCoordsX[0] = 1; - doorCoordsX[1] = 7; - doorCoordsY[0] = 104; - doorCoordsY[1] = 104; - break; - case 2: - nDoors = 2; - doorCoordsX[0] = 1; - doorCoordsX[1] = 7; - doorCoordsY[0] = 78; - doorCoordsY[1] = 78; - break; - case 3: - nDoors = 2; - doorCoordsX[0] = 1; - doorCoordsX[1] = 7; - doorCoordsY[0] = 91; - doorCoordsY[1] = 91; - break; - case 4: - nDoors = 1; - doorCoordsX[0] = 7; - doorCoordsY[0] = 39; - break; - case 5: - nDoors = 2; - doorCoordsX[0] = 1; - doorCoordsX[1] = 7; - doorCoordsY[0] = 52; - doorCoordsY[1] = 52; - break; - case 6: - nDoors = 1; - doorCoordsX[0] = 1; - doorCoordsY[0] = 65; - break; - case 7: - nDoors = 1; - doorCoordsX[0] = 7; - doorCoordsY[0] = 13; - break; - case 8: - nDoors = 1; - doorCoordsX[0] = 1; - doorCoordsY[0] = 26; - break; + case 1: + nDoors = 2; + doorCoordsX[0] = 1; + doorCoordsX[1] = 7; + doorCoordsY[0] = 104; + doorCoordsY[1] = 104; + break; + case 2: + nDoors = 2; + doorCoordsX[0] = 1; + doorCoordsX[1] = 7; + doorCoordsY[0] = 78; + doorCoordsY[1] = 78; + break; + case 3: + nDoors = 2; + doorCoordsX[0] = 1; + doorCoordsX[1] = 7; + doorCoordsY[0] = 91; + doorCoordsY[1] = 91; + break; + case 4: + nDoors = 1; + doorCoordsX[0] = 7; + doorCoordsY[0] = 39; + break; + case 5: + nDoors = 2; + doorCoordsX[0] = 1; + doorCoordsX[1] = 7; + doorCoordsY[0] = 52; + doorCoordsY[1] = 52; + break; + case 6: + nDoors = 1; + doorCoordsX[0] = 1; + doorCoordsY[0] = 65; + break; + case 7: + nDoors = 1; + doorCoordsX[0] = 7; + doorCoordsY[0] = 13; + break; + case 8: + nDoors = 1; + doorCoordsX[0] = 1; + doorCoordsY[0] = 26; + break; } for (i = 0; i < nDoors; i++) { - MapGridSetMetatileIdAt(doorCoordsX[i] + 7, doorCoordsY[i] + 7, metatileId | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(doorCoordsX[i] + 7, doorCoordsY[i] + 8, (metatileId + 8) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(doorCoordsX[i] + MAP_OFFSET, doorCoordsY[i] + MAP_OFFSET, metatileId | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(doorCoordsX[i] + MAP_OFFSET, doorCoordsY[i] + MAP_OFFSET + 1, (metatileId + METATILE_ROW_WIDTH) | MAPGRID_COLLISION_MASK); } DrawWholeMapView(); } @@ -932,25 +898,17 @@ u8 GetPlayerTrainerIdOnesDigit(void) void GetPlayerBigGuyGirlString(void) { if (gSaveBlock2Ptr->playerGender == MALE) - { StringCopy(gStringVar1, gText_BigGuy); - } else - { StringCopy(gStringVar1, gText_BigGirl); - } } void GetRivalSonDaughterString(void) { if (gSaveBlock2Ptr->playerGender == MALE) - { StringCopy(gStringVar1, gText_Daughter); - } else - { StringCopy(gStringVar1, gText_Son); - } } u8 GetBattleOutcome(void) @@ -961,13 +919,9 @@ u8 GetBattleOutcome(void) void CableCarWarp(void) { if (gSpecialVar_0x8004 != 0) - { - SetWarpDestination(MAP_GROUP(ROUTE112_CABLE_CAR_STATION), MAP_NUM(ROUTE112_CABLE_CAR_STATION), -1, 6, 4); - } + SetWarpDestination(MAP_GROUP(ROUTE112_CABLE_CAR_STATION), MAP_NUM(ROUTE112_CABLE_CAR_STATION), WARP_ID_NONE, 6, 4); else - { - SetWarpDestination(MAP_GROUP(MT_CHIMNEY_CABLE_CAR_STATION), MAP_NUM(MT_CHIMNEY_CABLE_CAR_STATION), -1, 6, 4); - } + SetWarpDestination(MAP_GROUP(MT_CHIMNEY_CABLE_CAR_STATION), MAP_NUM(MT_CHIMNEY_CABLE_CAR_STATION), WARP_ID_NONE, 6, 4); } void SetHiddenItemFlag(void) @@ -979,40 +933,14 @@ u16 GetWeekCount(void) { u16 weekCount = gLocalTime.days / 7; if (weekCount > 9999) - { weekCount = 9999; - } + return weekCount; } u8 GetLeadMonFriendshipScore(void) { - struct Pokemon *pokemon = &gPlayerParty[GetLeadMonIndex()]; - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) == MAX_FRIENDSHIP) - { - return 6; - } - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 200) - { - return 5; - } - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 150) - { - return 4; - } - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 100) - { - return 3; - } - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 50) - { - return 2; - } - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 1) - { - return 1; - } - return 0; + return GetMonFriendshipScore(&gPlayerParty[GetLeadMonIndex()]); } static void CB2_FieldShowRegionMap(void) @@ -1042,9 +970,7 @@ static void Task_PCTurnOnEffect(u8 taskId) { struct Task *task = &gTasks[taskId]; if (task->data[0] == 0) - { PCTurnOnEffect_0(task); - } } static void PCTurnOnEffect_0(struct Task *task) @@ -1058,26 +984,24 @@ static void PCTurnOnEffect_0(struct Task *task) playerDirection = GetPlayerFacingDirection(); switch (playerDirection) { - case DIR_NORTH: - dx = 0; - dy = -1; - break; - case DIR_WEST: - dx = -1; - dy = -1; - break; - case DIR_EAST: - dx = 1; - dy = -1; - break; + case DIR_NORTH: + dx = 0; + dy = -1; + break; + case DIR_WEST: + dx = -1; + dy = -1; + break; + case DIR_EAST: + dx = 1; + dy = -1; + break; } PCTurnOnEffect_1(task->data[4], dx, dy); DrawWholeMapView(); task->data[4] ^= 1; if ((++task->data[2]) == 5) - { DestroyTask(task->data[1]); - } } task->data[3]++; } @@ -1088,34 +1012,22 @@ static void PCTurnOnEffect_1(s16 isPcTurnedOn, s8 dx, s8 dy) if (isPcTurnedOn) { if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) - { tileId = METATILE_Building_PC_Off; - } else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) - { tileId = METATILE_BrendansMaysHouse_BrendanPC_Off; - } else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) - { tileId = METATILE_BrendansMaysHouse_MayPC_Off; - } } else { if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) - { tileId = METATILE_Building_PC_On; - } else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) - { tileId = METATILE_BrendansMaysHouse_BrendanPC_On; - } else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) - { tileId = METATILE_BrendansMaysHouse_MayPC_On; - } } - MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + 7, gSaveBlock1Ptr->pos.y + dy + 7, tileId | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, tileId | MAPGRID_COLLISION_MASK); } void DoPCTurnOffEffect(void) @@ -1131,32 +1043,26 @@ static void PCTurnOffEffect(void) u8 playerDirection = GetPlayerFacingDirection(); switch (playerDirection) { - case DIR_NORTH: - dx = 0; - dy = -1; - break; - case DIR_WEST: - dx = -1; - dy = -1; - break; - case DIR_EAST: - dx = 1; - dy = -1; - break; + case DIR_NORTH: + dx = 0; + dy = -1; + break; + case DIR_WEST: + dx = -1; + dy = -1; + break; + case DIR_EAST: + dx = 1; + dy = -1; + break; } - if (gSpecialVar_0x8004 == 0) - { + if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) tileId = METATILE_Building_PC_Off; - } - else if (gSpecialVar_0x8004 == 1) - { + else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) tileId = METATILE_BrendansMaysHouse_BrendanPC_Off; - } - else if (gSpecialVar_0x8004 == 2) - { + else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) tileId = METATILE_BrendansMaysHouse_MayPC_Off; - } - MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + 7, gSaveBlock1Ptr->pos.y + dy + 7, tileId | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, tileId | MAPGRID_COLLISION_MASK); DrawWholeMapView(); } @@ -1177,9 +1083,7 @@ static void Task_LotteryCornerComputerEffect(u8 taskId) { struct Task *task = &gTasks[taskId]; if (task->data[0] == 0) - { LotteryCornerComputerEffect(task); - } } static void LotteryCornerComputerEffect(struct Task *task) @@ -1189,28 +1093,26 @@ static void LotteryCornerComputerEffect(struct Task *task) task->data[3] = 0; if (task->data[4] != 0) { - MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Normal | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Normal | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Normal | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Normal | MAPGRID_COLLISION_MASK); } else { - MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Flash | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Flash | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Flash | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Flash | MAPGRID_COLLISION_MASK); } DrawWholeMapView(); task->data[4] ^= 1; if ((++task->data[2]) == 5) - { DestroyTask(task->data[1]); - } } task->data[3]++; } void EndLotteryCornerComputerEffect(void) { - MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Normal | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Normal | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Normal | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Normal | MAPGRID_COLLISION_MASK); DrawWholeMapView(); } @@ -1233,45 +1135,40 @@ void ResetTrickHouseNuggetFlag(void) bool8 CheckLeadMonCool(void) { if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_COOL) < 200) - { return FALSE; - } + return TRUE; } bool8 CheckLeadMonBeauty(void) { if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_BEAUTY) < 200) - { return FALSE; - } + return TRUE; } bool8 CheckLeadMonCute(void) { if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_CUTE) < 200) - { return FALSE; - } + return TRUE; } bool8 CheckLeadMonSmart(void) { if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SMART) < 200) - { return FALSE; - } + return TRUE; } bool8 CheckLeadMonTough(void) { if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_TOUGH) < 200) - { return FALSE; - } + return TRUE; } @@ -1298,7 +1195,12 @@ void IsGrassTypeInParty(void) void SpawnCameraObject(void) { - u8 obj = SpawnSpecialObjectEventParameterized(OBJ_EVENT_GFX_BOY_1, MOVEMENT_TYPE_FACE_DOWN, OBJ_EVENT_ID_CAMERA, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3); + u8 obj = SpawnSpecialObjectEventParameterized(OBJ_EVENT_GFX_BOY_1, + MOVEMENT_TYPE_FACE_DOWN, + OBJ_EVENT_ID_CAMERA, + gSaveBlock1Ptr->pos.x + MAP_OFFSET, + gSaveBlock1Ptr->pos.y + MAP_OFFSET, + 3); gObjectEvents[obj].invisible = TRUE; CameraObjectSetFollowedSpriteId(gObjectEvents[obj].spriteId); } @@ -1331,15 +1233,40 @@ void BufferEReaderTrainerName(void) u16 GetSlotMachineId(void) { - static const u8 sSlotMachineRandomSeeds[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6}; - static const u8 sSlotMachineIds[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5}; - static const u8 sSlotMachineServiceDayIds[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5}; + static const u8 sSlotMachineRandomSeeds[SLOT_MACHINE_COUNT] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6}; + static const u8 sSlotMachineIds[SLOT_MACHINE_COUNT] = { + SLOT_MACHINE_UNLUCKIEST, + SLOT_MACHINE_UNLUCKIER, + SLOT_MACHINE_UNLUCKIER, + SLOT_MACHINE_UNLUCKY, + SLOT_MACHINE_UNLUCKY, + SLOT_MACHINE_UNLUCKY, + SLOT_MACHINE_LUCKY, + SLOT_MACHINE_LUCKY, + SLOT_MACHINE_LUCKY, + SLOT_MACHINE_LUCKIER, + SLOT_MACHINE_LUCKIER, + SLOT_MACHINE_LUCKIEST + }; + static const u8 sSlotMachineServiceDayIds[SLOT_MACHINE_COUNT] = { + SLOT_MACHINE_LUCKY, + SLOT_MACHINE_LUCKY, + SLOT_MACHINE_LUCKY, + SLOT_MACHINE_LUCKY, + SLOT_MACHINE_LUCKY, + SLOT_MACHINE_LUCKY, + SLOT_MACHINE_LUCKIER, + SLOT_MACHINE_LUCKIER, + SLOT_MACHINE_LUCKIER, + SLOT_MACHINE_LUCKIER, + SLOT_MACHINE_LUCKIEST, + SLOT_MACHINE_LUCKIEST + }; u32 rnd = gSaveBlock1Ptr->dewfordTrends[0].trendiness + gSaveBlock1Ptr->dewfordTrends[0].rand + sSlotMachineRandomSeeds[gSpecialVar_0x8004]; - if (GetPriceReduction(POKENEWS_GAME_CORNER)) - { + if (IsPokeNewsActive(POKENEWS_GAME_CORNER)) return sSlotMachineServiceDayIds[rnd % SLOT_MACHINE_COUNT]; - } + return sSlotMachineIds[rnd % SLOT_MACHINE_COUNT]; } @@ -1349,9 +1276,8 @@ bool8 FoundAbandonedShipRoom1Key(void) u16 flag = FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY; *specVar = flag; if (!FlagGet(flag)) - { return FALSE; - } + return TRUE; } @@ -1361,9 +1287,8 @@ bool8 FoundAbandonedShipRoom2Key(void) u16 flag = FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY; *specVar = flag; if (!FlagGet(flag)) - { return FALSE; - } + return TRUE; } @@ -1373,9 +1298,8 @@ bool8 FoundAbandonedShipRoom4Key(void) u16 flag = FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY; *specVar = flag; if (!FlagGet(flag)) - { return FALSE; - } + return TRUE; } @@ -1385,9 +1309,8 @@ bool8 FoundAbandonedShipRoom6Key(void) u16 flag = FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY; *specVar = flag; if (!FlagGet(flag)) - { return FALSE; - } + return TRUE; } @@ -1406,24 +1329,21 @@ void GiveLeadMonEffortRibbon(void) leadMon = &gPlayerParty[GetLeadMonIndex()]; SetMonData(leadMon, MON_DATA_EFFORT_RIBBON, &ribbonSet); if (GetRibbonCount(leadMon) > NUM_CUTIES_RIBBONS) - { TryPutSpotTheCutiesOnAir(leadMon, MON_DATA_EFFORT_RIBBON); - } } bool8 Special_AreLeadMonEVsMaxedOut(void) { if (GetMonEVCount(&gPlayerParty[GetLeadMonIndex()]) >= MAX_TOTAL_EVS) - { return TRUE; - } + return FALSE; } u8 TryUpdateRusturfTunnelState(void) { - if (!FlagGet(FLAG_RUSTURF_TUNNEL_OPENED) - && gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(RUSTURF_TUNNEL) + if (!FlagGet(FLAG_RUSTURF_TUNNEL_OPENED) + && gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(RUSTURF_TUNNEL) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(RUSTURF_TUNNEL)) { if (FlagGet(FLAG_HIDE_RUSTURF_TUNNEL_ROCK_1)) @@ -1467,9 +1387,7 @@ bool8 IsStarterInParty(void) for (i = 0; i < partyCount; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) == starter) - { return TRUE; - } } return FALSE; } @@ -1481,10 +1399,9 @@ bool8 ScriptCheckFreePokemonStorageSpace(void) bool8 IsPokerusInParty(void) { - if (!CheckPartyPokerus(gPlayerParty, 0x3f)) - { + if (!CheckPartyPokerus(gPlayerParty, (1 << PARTY_SIZE) - 1)) return FALSE; - } + return TRUE; } @@ -1529,7 +1446,7 @@ static void Task_ShakeCamera(u8 taskId) static void StopCameraShake(u8 taskId) { DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } #undef horizontalPan @@ -1546,17 +1463,13 @@ bool8 FoundBlackGlasses(void) void SetRoute119Weather(void) { if (IsMapTypeOutdoors(GetLastUsedWarpMapType()) != TRUE) - { - SetSav1Weather(WEATHER_ROUTE119_CYCLE); - } + SetSavedWeather(WEATHER_ROUTE119_CYCLE); } void SetRoute123Weather(void) { if (IsMapTypeOutdoors(GetLastUsedWarpMapType()) != TRUE) - { - SetSav1Weather(WEATHER_ROUTE123_CYCLE); - } + SetSavedWeather(WEATHER_ROUTE123_CYCLE); } u8 GetLeadMonIndex(void) @@ -1566,9 +1479,7 @@ u8 GetLeadMonIndex(void) for (i = 0; i < partyCount; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != 0) - { return i; - } } return 0; } @@ -1588,13 +1499,10 @@ u16 GetDaysUntilPacifidlogTMAvailable(void) { u16 tmReceivedDay = VarGet(VAR_PACIFIDLOG_TM_RECEIVED_DAY); if (gLocalTime.days - tmReceivedDay >= 7) - { return 0; - } else if (gLocalTime.days < 0) - { return 8; - } + return 7 - (gLocalTime.days - tmReceivedDay); } @@ -1651,22 +1559,22 @@ void BufferLottoTicketNumber(void) } } -u16 GetMysteryEventCardVal(void) +u16 GetMysteryGiftCardStat(void) { switch (gSpecialVar_Result) { - case GET_NUM_STAMPS: - return mevent_081445C0(GET_NUM_STAMPS_INTERNAL); - case GET_MAX_STAMPS: - return mevent_081445C0(GET_MAX_STAMPS_INTERNAL); - case GET_CARD_BATTLES_WON: - return mevent_081445C0(GET_CARD_BATTLES_WON_INTERNAL); - case 3: // Never occurs - return mevent_081445C0(1); - case 4: // Never occurs - return mevent_081445C0(2); - default: - return 0; + case GET_NUM_STAMPS: + return MysteryGift_GetCardStat(CARD_STAT_NUM_STAMPS); + case GET_MAX_STAMPS: + return MysteryGift_GetCardStat(CARD_STAT_MAX_STAMPS); + case GET_CARD_BATTLES_WON: + return MysteryGift_GetCardStat(CARD_STAT_BATTLES_WON); + case GET_CARD_BATTLES_LOST: // Never occurs + return MysteryGift_GetCardStat(CARD_STAT_BATTLES_LOST); + case GET_CARD_NUM_TRADES: // Never occurs + return MysteryGift_GetCardStat(CARD_STAT_NUM_TRADES); + default: + return 0; } } @@ -1710,7 +1618,7 @@ void OffsetCameraForBattle(void) SetCameraPanning(8, 0); } -const struct WindowTemplate gElevatorFloor_WindowTemplate = +const struct WindowTemplate gElevatorFloor_WindowTemplate = { .bg = 0, .tilemapLeft = 21, @@ -1784,27 +1692,27 @@ void SetDeptStoreFloor(void) u8 deptStoreFloor; switch (gSaveBlock1Ptr->dynamicWarp.mapNum) { - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F): - deptStoreFloor = DEPT_STORE_FLOORNUM_1F; - break; - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F): - deptStoreFloor = DEPT_STORE_FLOORNUM_2F; - break; - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F): - deptStoreFloor = DEPT_STORE_FLOORNUM_3F; - break; - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F): - deptStoreFloor = DEPT_STORE_FLOORNUM_4F; - break; - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F): - deptStoreFloor = DEPT_STORE_FLOORNUM_5F; - break; - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP): - deptStoreFloor = DEPT_STORE_FLOORNUM_ROOFTOP; - break; - default: - deptStoreFloor = DEPT_STORE_FLOORNUM_1F; - break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F): + deptStoreFloor = DEPT_STORE_FLOORNUM_1F; + break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F): + deptStoreFloor = DEPT_STORE_FLOORNUM_2F; + break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F): + deptStoreFloor = DEPT_STORE_FLOORNUM_3F; + break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F): + deptStoreFloor = DEPT_STORE_FLOORNUM_4F; + break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F): + deptStoreFloor = DEPT_STORE_FLOORNUM_5F; + break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP): + deptStoreFloor = DEPT_STORE_FLOORNUM_ROOFTOP; + break; + default: + deptStoreFloor = DEPT_STORE_FLOORNUM_1F; + break; } VarSet(VAR_DEPT_STORE_FLOOR, deptStoreFloor); } @@ -1818,26 +1726,26 @@ u16 GetDeptStoreDefaultFloorChoice(void) { switch (gSaveBlock1Ptr->dynamicWarp.mapNum) { - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F): - sLilycoveDeptStore_NeverRead = 0; - sLilycoveDeptStore_DefaultFloorChoice = 0; - break; - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F): - sLilycoveDeptStore_NeverRead = 0; - sLilycoveDeptStore_DefaultFloorChoice = 1; - break; - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F): - sLilycoveDeptStore_NeverRead = 0; - sLilycoveDeptStore_DefaultFloorChoice = 2; - break; - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F): - sLilycoveDeptStore_NeverRead = 0; - sLilycoveDeptStore_DefaultFloorChoice = 3; - break; - case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F): - sLilycoveDeptStore_NeverRead = 0; - sLilycoveDeptStore_DefaultFloorChoice = 4; - break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F): + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 0; + break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F): + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 1; + break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F): + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 2; + break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F): + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 3; + break; + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F): + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 4; + break; } } @@ -1893,7 +1801,7 @@ static void Task_MoveElevator(u8 taskId) { PlaySE(SE_DING_DONG); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); InstallCameraPanAheadCallback(); } } @@ -1904,16 +1812,16 @@ void ShowDeptStoreElevatorFloorSelect(void) int xPos; sTutorMoveAndElevatorWindowId = AddWindow(&gElevatorFloor_WindowTemplate); - SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, 0); + SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, FALSE); - xPos = GetStringCenterAlignXOffset(1, gText_ElevatorNowOn, 64); - AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gText_ElevatorNowOn, 64); + AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, gText_ElevatorNowOn, xPos, 1, TEXT_SKIP_DRAW, NULL); - xPos = GetStringCenterAlignXOffset(1, gDeptStoreFloorNames[gSpecialVar_0x8005], 64); - AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, gDeptStoreFloorNames[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gDeptStoreFloorNames[gSpecialVar_0x8005], 64); + AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, gDeptStoreFloorNames[gSpecialVar_0x8005], xPos, 17, TEXT_SKIP_DRAW, NULL); PutWindowTilemap(sTutorMoveAndElevatorWindowId); - CopyWindowToVram(sTutorMoveAndElevatorWindowId, 3); + CopyWindowToVram(sTutorMoveAndElevatorWindowId, COPYWIN_FULL); } void CloseDeptStoreElevatorWindow(void) @@ -1951,9 +1859,7 @@ static void Task_MoveElevatorWindowLights(u8 taskId) for (y = 0; y < 3; y++) { for (x = 0; x < 3; x++) - { - MapGridSetMetatileIdAt(x + 8, y + 7, sElevatorWindowTiles_Ascending[y][data[0] % 3] | METATILE_COLLISION_MASK); - } + MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Ascending[y][data[0] % 3] | MAPGRID_COLLISION_MASK); } } // descending @@ -1962,17 +1868,13 @@ static void Task_MoveElevatorWindowLights(u8 taskId) for (y = 0; y < 3; y++) { for (x = 0; x < 3; x++) - { - MapGridSetMetatileIdAt(x + 8, y + 7, sElevatorWindowTiles_Descending[y][data[0] % 3] | METATILE_COLLISION_MASK); - } + MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Descending[y][data[0] % 3] | MAPGRID_COLLISION_MASK); } } DrawWholeMapView(); data[1] = 0; if (data[0] == data[3]) - { DestroyTask(taskId); - } } data[1]++; } @@ -1992,9 +1894,7 @@ void BufferVarsForIVRater(void) gSpecialVar_0x8005 = 0; for (i = 0; i < NUM_STATS; i++) - { gSpecialVar_0x8005 += ivStorage[i]; - } gSpecialVar_0x8006 = 0; gSpecialVar_0x8007 = ivStorage[STAT_HP]; @@ -2020,27 +1920,27 @@ void BufferVarsForIVRater(void) bool8 UsedPokemonCenterWarp(void) { - static const u16 sPokemonCenters[] = - { - MAP_OLDALE_TOWN_POKEMON_CENTER_1F, - MAP_DEWFORD_TOWN_POKEMON_CENTER_1F, - MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F, - MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F, - MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F, - MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F, - MAP_PETALBURG_CITY_POKEMON_CENTER_1F, - MAP_SLATEPORT_CITY_POKEMON_CENTER_1F, - MAP_MAUVILLE_CITY_POKEMON_CENTER_1F, - MAP_RUSTBORO_CITY_POKEMON_CENTER_1F, - MAP_FORTREE_CITY_POKEMON_CENTER_1F, - MAP_LILYCOVE_CITY_POKEMON_CENTER_1F, - MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F, - MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F, - MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F, - MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F, - MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F, - MAP_UNION_ROOM, - 0xFFFF + static const u16 sPokemonCenters[] = + { + MAP_OLDALE_TOWN_POKEMON_CENTER_1F, + MAP_DEWFORD_TOWN_POKEMON_CENTER_1F, + MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F, + MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F, + MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F, + MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F, + MAP_PETALBURG_CITY_POKEMON_CENTER_1F, + MAP_SLATEPORT_CITY_POKEMON_CENTER_1F, + MAP_MAUVILLE_CITY_POKEMON_CENTER_1F, + MAP_RUSTBORO_CITY_POKEMON_CENTER_1F, + MAP_FORTREE_CITY_POKEMON_CENTER_1F, + MAP_LILYCOVE_CITY_POKEMON_CENTER_1F, + MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F, + MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F, + MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F, + MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F, + MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F, + MAP_UNION_ROOM, + 0xFFFF }; int i; @@ -2058,9 +1958,8 @@ bool8 UsedPokemonCenterWarp(void) bool32 PlayerNotAtTrainerHillEntrance(void) { if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_HILL_ENTRANCE) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_HILL_ENTRANCE)) - { return FALSE; - } + return TRUE; } @@ -2073,82 +1972,82 @@ void UpdateFrontierManiac(u16 daysSince) void ShowFrontierManiacMessage(void) { - static const u8 *const sFrontierManiacMessages[][FRONTIER_MANIAC_MESSAGE_COUNT] = + static const u8 *const sFrontierManiacMessages[][FRONTIER_MANIAC_MESSAGE_COUNT] = { - [FRONTIER_MANIAC_BATTLE_TOWER_SINGLES] = - { - BattleFrontier_Lounge2_Text_SalonMaidenIsThere, - BattleFrontier_Lounge2_Text_SalonMaidenSilverMons, - BattleFrontier_Lounge2_Text_SalonMaidenGoldMons + [FRONTIER_MANIAC_TOWER_SINGLES] = + { + BattleFrontier_Lounge2_Text_SalonMaidenIsThere, + BattleFrontier_Lounge2_Text_SalonMaidenSilverMons, + BattleFrontier_Lounge2_Text_SalonMaidenGoldMons }, - [FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES] = - { - BattleFrontier_Lounge2_Text_DoubleBattleAdvice1, - BattleFrontier_Lounge2_Text_DoubleBattleAdvice2, - BattleFrontier_Lounge2_Text_DoubleBattleAdvice3 + [FRONTIER_MANIAC_TOWER_DOUBLES] = + { + BattleFrontier_Lounge2_Text_DoubleBattleAdvice1, + BattleFrontier_Lounge2_Text_DoubleBattleAdvice2, + BattleFrontier_Lounge2_Text_DoubleBattleAdvice3 }, - [FRONTIER_MANIAC_BATTLE_TOWER_MULTIS] = - { - BattleFrontier_Lounge2_Text_MultiBattleAdvice, - BattleFrontier_Lounge2_Text_MultiBattleAdvice, - BattleFrontier_Lounge2_Text_MultiBattleAdvice + [FRONTIER_MANIAC_TOWER_MULTIS] = + { + BattleFrontier_Lounge2_Text_MultiBattleAdvice, + BattleFrontier_Lounge2_Text_MultiBattleAdvice, + BattleFrontier_Lounge2_Text_MultiBattleAdvice }, - [FRONTIER_MANIAC_BATTLE_TOWER_LINK] = - { - BattleFrontier_Lounge2_Text_LinkMultiBattleAdvice, - BattleFrontier_Lounge2_Text_LinkMultiBattleAdvice, - BattleFrontier_Lounge2_Text_LinkMultiBattleAdvice + [FRONTIER_MANIAC_TOWER_LINK] = + { + BattleFrontier_Lounge2_Text_LinkMultiBattleAdvice, + BattleFrontier_Lounge2_Text_LinkMultiBattleAdvice, + BattleFrontier_Lounge2_Text_LinkMultiBattleAdvice }, - [FRONTIER_MANIAC_BATTLE_DOME] = - { - BattleFrontier_Lounge2_Text_DomeAceIsThere, - BattleFrontier_Lounge2_Text_DomeAceSilverMons, - BattleFrontier_Lounge2_Text_DomeAceGoldMons + [FRONTIER_MANIAC_DOME] = + { + BattleFrontier_Lounge2_Text_DomeAceIsThere, + BattleFrontier_Lounge2_Text_DomeAceSilverMons, + BattleFrontier_Lounge2_Text_DomeAceGoldMons }, - [FRONTIER_MANIAC_BATTLE_FACTORY] = - { - BattleFrontier_Lounge2_Text_FactoryHeadIsThere, - BattleFrontier_Lounge2_Text_FactoryHeadSilverMons, - BattleFrontier_Lounge2_Text_FactoryHeadGoldMons + [FRONTIER_MANIAC_FACTORY] = + { + BattleFrontier_Lounge2_Text_FactoryHeadIsThere, + BattleFrontier_Lounge2_Text_FactoryHeadSilverMons, + BattleFrontier_Lounge2_Text_FactoryHeadGoldMons }, - [FRONTIER_MANIAC_BATTLE_PALACE] = - { - BattleFrontier_Lounge2_Text_PalaceMavenIsThere, - BattleFrontier_Lounge2_Text_PalaceMavenSilverMons, - BattleFrontier_Lounge2_Text_PalaceMavenGoldMons + [FRONTIER_MANIAC_PALACE] = + { + BattleFrontier_Lounge2_Text_PalaceMavenIsThere, + BattleFrontier_Lounge2_Text_PalaceMavenSilverMons, + BattleFrontier_Lounge2_Text_PalaceMavenGoldMons }, - [FRONTIER_MANIAC_BATTLE_ARENA] = - { - BattleFrontier_Lounge2_Text_ArenaTycoonIsThere, - BattleFrontier_Lounge2_Text_ArenaTycoonSilverMons, - BattleFrontier_Lounge2_Text_ArenaTycoonGoldMons + [FRONTIER_MANIAC_ARENA] = + { + BattleFrontier_Lounge2_Text_ArenaTycoonIsThere, + BattleFrontier_Lounge2_Text_ArenaTycoonSilverMons, + BattleFrontier_Lounge2_Text_ArenaTycoonGoldMons }, - [FRONTIER_MANIAC_BATTLE_PIKE] = - { - BattleFrontier_Lounge2_Text_PikeQueenIsThere, - BattleFrontier_Lounge2_Text_PikeQueenSilverMons, - BattleFrontier_Lounge2_Text_PikeQueenGoldMons + [FRONTIER_MANIAC_PIKE] = + { + BattleFrontier_Lounge2_Text_PikeQueenIsThere, + BattleFrontier_Lounge2_Text_PikeQueenSilverMons, + BattleFrontier_Lounge2_Text_PikeQueenGoldMons }, - [FRONTIER_MANIAC_BATTLE_PYRAMID] = - { - BattleFrontier_Lounge2_Text_PyramidKingIsThere, - BattleFrontier_Lounge2_Text_PyramidKingSilverMons, - BattleFrontier_Lounge2_Text_PyramidKingGoldMons + [FRONTIER_MANIAC_PYRAMID] = + { + BattleFrontier_Lounge2_Text_PyramidKingIsThere, + BattleFrontier_Lounge2_Text_PyramidKingSilverMons, + BattleFrontier_Lounge2_Text_PyramidKingGoldMons }, }; - static const u8 sFrontierManiacStreakThresholds[][FRONTIER_MANIAC_MESSAGE_COUNT - 1] = + static const u8 sFrontierManiacStreakThresholds[][FRONTIER_MANIAC_MESSAGE_COUNT - 1] = { - [FRONTIER_MANIAC_BATTLE_TOWER_SINGLES] = { 21, 56 }, - [FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES] = { 21, 35 }, - [FRONTIER_MANIAC_BATTLE_TOWER_MULTIS] = { 255, 255 }, - [FRONTIER_MANIAC_BATTLE_TOWER_LINK] = { 255, 255 }, - [FRONTIER_MANIAC_BATTLE_DOME] = { 2, 4 }, - [FRONTIER_MANIAC_BATTLE_FACTORY] = { 7, 21 }, - [FRONTIER_MANIAC_BATTLE_PALACE] = { 7, 21 }, - [FRONTIER_MANIAC_BATTLE_ARENA] = { 14, 28 }, - [FRONTIER_MANIAC_BATTLE_PIKE] = { 13, 112 }, //BUG: 112 (0x70) is probably a mistake; the Pike Queen is battled twice well before that - [FRONTIER_MANIAC_BATTLE_PYRAMID] = { 7, 56 } + [FRONTIER_MANIAC_TOWER_SINGLES] = { 21, 56 }, + [FRONTIER_MANIAC_TOWER_DOUBLES] = { 21, 35 }, + [FRONTIER_MANIAC_TOWER_MULTIS] = { 255, 255 }, + [FRONTIER_MANIAC_TOWER_LINK] = { 255, 255 }, + [FRONTIER_MANIAC_DOME] = { 2, 4 }, + [FRONTIER_MANIAC_FACTORY] = { 7, 21 }, + [FRONTIER_MANIAC_PALACE] = { 7, 21 }, + [FRONTIER_MANIAC_ARENA] = { 14, 28 }, + [FRONTIER_MANIAC_PIKE] = { 13, 112 }, //BUG: 112 (0x70) is probably a mistake; the Pike Queen is battled twice well before that + [FRONTIER_MANIAC_PYRAMID] = { 7, 56 } }; u8 i; @@ -2157,86 +2056,58 @@ void ShowFrontierManiacMessage(void) switch (facility) { - case FRONTIER_MANIAC_BATTLE_TOWER_SINGLES: - case FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES: - case FRONTIER_MANIAC_BATTLE_TOWER_MULTIS: - case FRONTIER_MANIAC_BATTLE_TOWER_LINK: - if (gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_50] - >= gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_OPEN]) - { - winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_50]; - } - else - { - winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_OPEN]; - } - break; - case FRONTIER_MANIAC_BATTLE_DOME: - if (gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50] - >= gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]) - { - winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]; - } - else - { - winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]; - } - break; - case FRONTIER_MANIAC_BATTLE_FACTORY: - if (gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50] - >= gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]) - { - winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]; - } - else - { - winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]; - } - break; - case FRONTIER_MANIAC_BATTLE_PALACE: - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50] - >= gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]) - { - winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]; - } - else - { - winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]; - } - break; - case FRONTIER_MANIAC_BATTLE_ARENA: - if (gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_50] - >= gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_OPEN]) - { - winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_50]; - } - else - { - winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_OPEN]; - } - break; - case FRONTIER_MANIAC_BATTLE_PIKE: - if (gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_50] - >= gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_OPEN]) - { - winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_50]; - } - else - { - winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_OPEN]; - } - break; - case FRONTIER_MANIAC_BATTLE_PYRAMID: - if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50] - >= gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN]) - { - winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50]; - } - else - { - winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN]; - } - break; + case FRONTIER_MANIAC_TOWER_SINGLES: + case FRONTIER_MANIAC_TOWER_DOUBLES: + case FRONTIER_MANIAC_TOWER_MULTIS: + case FRONTIER_MANIAC_TOWER_LINK: + if (gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_OPEN]) + winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_50]; + else + winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_OPEN]; + break; + case FRONTIER_MANIAC_DOME: + if (gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]) + winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]; + else + winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]; + break; + case FRONTIER_MANIAC_FACTORY: + if (gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]) + winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]; + else + winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]; + break; + case FRONTIER_MANIAC_PALACE: + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]) + winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]; + else + winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]; + break; + case FRONTIER_MANIAC_ARENA: + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_OPEN]) + winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_50]; + else + winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_OPEN]; + break; + case FRONTIER_MANIAC_PIKE: + if (gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_OPEN]) + winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_50]; + else + winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_OPEN]; + break; + case FRONTIER_MANIAC_PYRAMID: + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN]) + winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50]; + else + winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN]; + break; } for (i = 0; i < FRONTIER_MANIAC_MESSAGE_COUNT - 1 && sFrontierManiacStreakThresholds[facility][i] < winStreak; i++); @@ -2301,141 +2172,141 @@ void ShowScrollableMultichoice(void) switch (gSpecialVar_0x8004) { - case SCROLL_MULTI_NONE: - task->tMaxItemsOnScreen = 1; - task->tNumItems = 1; - task->tLeft = 1; - task->tTop = 1; - task->tWidth = 1; - task->tHeight = 1; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_GLASS_WORKSHOP_VENDOR: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN - 1; - task->tNumItems = 8; - task->tLeft = 1; - task->tTop = 1; - task->tWidth = 9; - task->tHeight = 10; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_POKEMON_FAN_CLUB_RATER: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; - task->tNumItems = 12; - task->tLeft = 1; - task->tTop = 1; - task->tWidth = 7; - task->tHeight = 12; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; - task->tNumItems = 11; - task->tLeft = 14; - task->tTop = 1; - task->tWidth = 15; - task->tHeight = 12; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; - task->tNumItems = 6; - task->tLeft = 14; - task->tTop = 1; - task->tWidth = 15; - task->tHeight = 12; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; - task->tNumItems = 7; - task->tLeft = 14; - task->tTop = 1; - task->tWidth = 15; - task->tHeight = 12; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; - task->tNumItems = 10; - task->tLeft = 14; - task->tTop = 1; - task->tWidth = 15; - task->tHeight = 12; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_BERRY_POWDER_VENDOR: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; - task->tNumItems = 12; - task->tLeft = 15; - task->tTop = 1; - task->tWidth = 14; - task->tHeight = 12; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_BF_RECEPTIONIST: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; - task->tNumItems = 10; - task->tLeft = 17; - task->tTop = 1; - task->tWidth = 11; - task->tHeight = 12; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_BF_MOVE_TUTOR_1: - case SCROLL_MULTI_BF_MOVE_TUTOR_2: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; - task->tNumItems = 11; - task->tLeft = 15; - task->tTop = 1; - task->tWidth = 14; - task->tHeight = 12; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_SS_TIDAL_DESTINATION: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; - task->tNumItems = 7; - task->tLeft = 19; - task->tTop = 1; - task->tWidth = 10; - task->tHeight = 12; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - case SCROLL_MULTI_BATTLE_TENT_RULES: - task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; - task->tNumItems = 7; - task->tLeft = 17; - task->tTop = 1; - task->tWidth = 12; - task->tHeight = 12; - task->tKeepOpenAfterSelect = FALSE; - task->tTaskId = taskId; - break; - default: - gSpecialVar_Result = MULTI_B_PRESSED; - DestroyTask(taskId); - break; + case SCROLL_MULTI_NONE: + task->tMaxItemsOnScreen = 1; + task->tNumItems = 1; + task->tLeft = 1; + task->tTop = 1; + task->tWidth = 1; + task->tHeight = 1; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_GLASS_WORKSHOP_VENDOR: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN - 1; + task->tNumItems = 8; + task->tLeft = 1; + task->tTop = 1; + task->tWidth = 9; + task->tHeight = 10; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_POKEMON_FAN_CLUB_RATER: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 12; + task->tLeft = 1; + task->tTop = 1; + task->tWidth = 7; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 11; + task->tLeft = 14; + task->tTop = 1; + task->tWidth = 15; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 6; + task->tLeft = 14; + task->tTop = 1; + task->tWidth = 15; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 7; + task->tLeft = 14; + task->tTop = 1; + task->tWidth = 15; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 10; + task->tLeft = 14; + task->tTop = 1; + task->tWidth = 15; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_BERRY_POWDER_VENDOR: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 12; + task->tLeft = 15; + task->tTop = 1; + task->tWidth = 14; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_BF_RECEPTIONIST: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 10; + task->tLeft = 17; + task->tTop = 1; + task->tWidth = 11; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_BF_MOVE_TUTOR_1: + case SCROLL_MULTI_BF_MOVE_TUTOR_2: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 11; + task->tLeft = 15; + task->tTop = 1; + task->tWidth = 14; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_SS_TIDAL_DESTINATION: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 7; + task->tLeft = 19; + task->tTop = 1; + task->tWidth = 10; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + case SCROLL_MULTI_BATTLE_TENT_RULES: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 7; + task->tLeft = 17; + task->tTop = 1; + task->tWidth = 12; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; + break; + default: + gSpecialVar_Result = MULTI_B_PRESSED; + DestroyTask(taskId); + break; } } -static const u8 *const sScrollableMultichoiceOptions[][MAX_SCROLL_MULTI_LENGTH] = +static const u8 *const sScrollableMultichoiceOptions[][MAX_SCROLL_MULTI_LENGTH] = { - [SCROLL_MULTI_NONE] = + [SCROLL_MULTI_NONE] = { gText_Exit }, - [SCROLL_MULTI_GLASS_WORKSHOP_VENDOR] = + [SCROLL_MULTI_GLASS_WORKSHOP_VENDOR] = { gText_BlueFlute, gText_YellowFlute, @@ -2446,7 +2317,7 @@ static const u8 *const sScrollableMultichoiceOptions[][MAX_SCROLL_MULTI_LENGTH] gText_PrettyDesk, gText_Exit }, - [SCROLL_MULTI_POKEMON_FAN_CLUB_RATER] = + [SCROLL_MULTI_POKEMON_FAN_CLUB_RATER] = { gText_0Pts, gText_10Pts, @@ -2461,7 +2332,7 @@ static const u8 *const sScrollableMultichoiceOptions[][MAX_SCROLL_MULTI_LENGTH] gText_100Pts, gText_QuestionMark }, - [SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1] = + [SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1] = { gText_KissPoster16BP, gText_KissCushion32BP, @@ -2535,7 +2406,7 @@ static const u8 *const sScrollableMultichoiceOptions[][MAX_SCROLL_MULTI_LENGTH] gText_ExchangeService, gText_Exit }, - [SCROLL_MULTI_BF_MOVE_TUTOR_1] = + [SCROLL_MULTI_BF_MOVE_TUTOR_1] = { gText_Softboiled16BP, gText_SeismicToss24BP, @@ -2549,7 +2420,7 @@ static const u8 *const sScrollableMultichoiceOptions[][MAX_SCROLL_MULTI_LENGTH] gText_SwordsDance48BP, gText_Exit }, - [SCROLL_MULTI_BF_MOVE_TUTOR_2] = + [SCROLL_MULTI_BF_MOVE_TUTOR_2] = { gText_DefenseCurl16BP, gText_Snore24BP, @@ -2592,7 +2463,7 @@ static void Task_ShowScrollableMultichoice(u8 taskId) struct WindowTemplate template; struct Task *task = &gTasks[taskId]; - ScriptContext2_Enable(); + LockPlayerFieldControls(); sScrollableMultichoice_ScrollOffset = 0; sScrollableMultichoice_ItemSpriteId = MAX_SPRITES; FillFrontierExchangeCornerWindowAndItemIcon(task->tScrollMultiId, 0); @@ -2615,19 +2486,15 @@ static void Task_ShowScrollableMultichoice(u8 taskId) { int adjustedLeft = MAX_MULTICHOICE_WIDTH + 1 - task->tWidth; if (adjustedLeft < 0) - { task->tLeft = 0; - } else - { task->tLeft = adjustedLeft; - } } template = CreateWindowTemplate(0, task->tLeft, task->tTop, task->tWidth, task->tHeight, 0xF, 0x64); windowId = AddWindow(&template); task->tWindowId = windowId; - SetStandardWindowBorderStyle(windowId, 0); + SetStandardWindowBorderStyle(windowId, FALSE); gScrollableMultichoice_ListMenuTemplate.totalItems = task->tNumItems; gScrollableMultichoice_ListMenuTemplate.maxShowed = task->tMaxItemsOnScreen; @@ -2657,7 +2524,7 @@ static void InitScrollableMultichoice(void) gScrollableMultichoice_ListMenuTemplate.lettersSpacing = 0; gScrollableMultichoice_ListMenuTemplate.itemVerticalPadding = 0; gScrollableMultichoice_ListMenuTemplate.scrollMultiple = 0; - gScrollableMultichoice_ListMenuTemplate.fontId = 1; + gScrollableMultichoice_ListMenuTemplate.fontId = FONT_NORMAL; gScrollableMultichoice_ListMenuTemplate.cursorKind = 0; } @@ -2701,16 +2568,17 @@ static void ScrollableMultichoice_ProcessInput(u8 taskId) { CloseScrollableMultichoice(taskId); } - // if selected option was the last one (Exit) else if (input == task->tNumItems - 1) { + // Selected option was the last one (Exit) CloseScrollableMultichoice(taskId); } else { + // Handle selection while keeping the menu open ScrollableMultichoice_RemoveScrollArrows(taskId); - task->func = sub_813A600; - EnableBothScriptContexts(); + task->func = Task_ScrollableMultichoice_WaitReturnToList; + ScriptContext_Enable(); } break; } @@ -2725,46 +2593,42 @@ static void CloseScrollableMultichoice(u8 taskId) ScrollableMultichoice_RemoveScrollArrows(taskId); DestroyListMenuTask(task->tListTaskId, NULL, NULL); Free(sScrollableMultichoice_ListMenuItem); - ClearStdWindowAndFrameToTransparent(task->tWindowId, 1); + ClearStdWindowAndFrameToTransparent(task->tWindowId, TRUE); FillWindowPixelBuffer(task->tWindowId, PIXEL_FILL(0)); - CopyWindowToVram(task->tWindowId, 2); + CopyWindowToVram(task->tWindowId, COPYWIN_GFX); RemoveWindow(task->tWindowId); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } -// Functionally unused; tKeepOpenAfterSelect is only != 0 in unused functions -static void sub_813A600(u8 taskId) +// Never run, tKeepOpenAfterSelect is FALSE for all scrollable multichoices. +static void Task_ScrollableMultichoice_WaitReturnToList(u8 taskId) { switch (gTasks[taskId].tKeepOpenAfterSelect) { - case 1: - default: - break; - case 2: - gTasks[taskId].tKeepOpenAfterSelect = 1; - gTasks[taskId].func = sub_813A664; - break; + case 1: + default: + break; + case 2: + gTasks[taskId].tKeepOpenAfterSelect = 1; + gTasks[taskId].func = Task_ScrollableMultichoice_ReturnToList; + break; } } // Never called -void sub_813A630(void) +void ScrollableMultichoice_TryReturnToList(void) { - u8 taskId = FindTaskIdByFunc(sub_813A600); + u8 taskId = FindTaskIdByFunc(Task_ScrollableMultichoice_WaitReturnToList); if (taskId == TASK_NONE) - { - EnableBothScriptContexts(); - } + ScriptContext_Enable(); else - { - gTasks[taskId].tKeepOpenAfterSelect++; - } + gTasks[taskId].tKeepOpenAfterSelect++; // Return to list } -static void sub_813A664(u8 taskId) +static void Task_ScrollableMultichoice_ReturnToList(u8 taskId) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); ScrollableMultichoice_UpdateScrollArrows(taskId); gTasks[taskId].func = ScrollableMultichoice_ProcessInput; } @@ -2811,23 +2675,7 @@ static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId) // Removed for Emerald (replaced by ShowScrollableMultichoice) void ShowGlassWorkshopMenu(void) { - /* - u8 i; - ScriptContext2_Enable(); - Menu_DrawStdWindowFrame(0, 0, 10, 11); - InitMenu(0, 1, 1, 5, 0, 9); - gUnknown_0203925C = 0; - ClearVerticalScrollIndicatorPalettes(); - LoadScrollIndicatorPalette(); - sub_810F2B4(); - for (i = 0; i < 5; i++) - { - Menu_PrintText(gUnknown_083F83C0[i], 1, 2 * i + 1); - } - gUnknown_0203925B = 0; - gUnknown_0203925A = ARRAY_COUNT(gUnknown_083F83C0); - CreateTask(sub_810F118, 8); - */ + } void SetBattleTowerLinkPlayerGfx(void) @@ -2836,13 +2684,9 @@ void SetBattleTowerLinkPlayerGfx(void) for (i = 0; i < 2; i++) { if (gLinkPlayers[i].gender == MALE) - { VarSet(VAR_OBJ_GFX_ID_F - i, OBJ_EVENT_GFX_BRENDAN_NORMAL); - } else - { VarSet(VAR_OBJ_GFX_ID_F - i, OBJ_EVENT_GFX_RIVAL_MAY_NORMAL); - } } } @@ -2879,9 +2723,7 @@ void ShowNatureGirlMessage(void) u8 nature; if (gSpecialVar_0x8004 >= PARTY_SIZE) - { gSpecialVar_0x8004 = 0; - } nature = GetNature(&gPlayerParty[gSpecialVar_0x8004]); ShowFieldMessage(sNatureGirlMessages[nature]); @@ -2896,7 +2738,7 @@ void UpdateFrontierGambler(u16 daysSince) void ShowFrontierGamblerLookingMessage(void) { - static const u8 *const sFrontierGamblerLookingMessages[] = + static const u8 *const sFrontierGamblerLookingMessages[] = { BattleFrontier_Lounge3_Text_ChallengeBattleTowerSingle, BattleFrontier_Lounge3_Text_ChallengeBattleTowerDouble, @@ -2919,7 +2761,7 @@ void ShowFrontierGamblerLookingMessage(void) void ShowFrontierGamblerGoMessage(void) { - static const u8 *const sFrontierGamblerGoMessages[] = + static const u8 *const sFrontierGamblerGoMessages[] = { BattleFrontier_Lounge3_Text_GetToBattleTowerSingle, BattleFrontier_Lounge3_Text_GetToBattleTowerDouble, @@ -2940,19 +2782,19 @@ void ShowFrontierGamblerGoMessage(void) void FrontierGamblerSetWonOrLost(bool8 won) { - static const u16 sFrontierChallenges[] = + static const u16 sFrontierChallenges[] = { FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_SINGLES), FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_DOUBLES), FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_MULTIS), FRONTIER_CHALLENGE(FRONTIER_FACILITY_DOME, FRONTIER_MODE_SINGLES), FRONTIER_CHALLENGE(FRONTIER_FACILITY_DOME, FRONTIER_MODE_DOUBLES), - FRONTIER_CHALLENGE(FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_SINGLES), - FRONTIER_CHALLENGE(FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_DOUBLES), - FRONTIER_CHALLENGE(FRONTIER_FACILITY_PALACE, FRONTIER_MODE_SINGLES), - FRONTIER_CHALLENGE(FRONTIER_FACILITY_PALACE, FRONTIER_MODE_DOUBLES), - FRONTIER_CHALLENGE(FRONTIER_FACILITY_ARENA, FRONTIER_MODE_SINGLES), - FRONTIER_CHALLENGE(FRONTIER_FACILITY_PIKE, FRONTIER_MODE_SINGLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_SINGLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_DOUBLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_PALACE, FRONTIER_MODE_SINGLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_PALACE, FRONTIER_MODE_DOUBLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_ARENA, FRONTIER_MODE_SINGLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_PIKE, FRONTIER_MODE_SINGLES), FRONTIER_CHALLENGE(FRONTIER_FACILITY_PYRAMID, FRONTIER_MODE_SINGLES) }; @@ -2965,13 +2807,9 @@ void FrontierGamblerSetWonOrLost(bool8 won) if (sFrontierChallenges[challenge] == FRONTIER_CHALLENGE(frontierFacilityId, battleMode)) { if (won) - { VarSet(VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WON); - } else - { VarSet(VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_LOST); - } } } } @@ -2981,13 +2819,14 @@ void UpdateBattlePointsWindow(void) u8 string[32]; u32 x; StringCopy(ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->frontier.battlePoints, STR_CONV_MODE_RIGHT_ALIGN, 4), gText_BP); - x = GetStringRightAlignXOffset(1, string, 48); - AddTextPrinterParameterized(sBattlePointsWindowId, 1, string, x, 1, 0, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, string, 48); + AddTextPrinterParameterized(sBattlePointsWindowId, FONT_NORMAL, string, x, 1, 0, NULL); } void ShowBattlePointsWindow(void) { - static const struct WindowTemplate sBattlePoints_WindowTemplate = { + static const struct WindowTemplate sBattlePoints_WindowTemplate = + { .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, @@ -2998,9 +2837,9 @@ void ShowBattlePointsWindow(void) }; sBattlePointsWindowId = AddWindow(&sBattlePoints_WindowTemplate); - SetStandardWindowBorderStyle(sBattlePointsWindowId, 0); + SetStandardWindowBorderStyle(sBattlePointsWindowId, FALSE); UpdateBattlePointsWindow(); - CopyWindowToVram(sBattlePointsWindowId, 2); + CopyWindowToVram(sBattlePointsWindowId, COPYWIN_GFX); } void CloseBattlePointsWindow(void) @@ -3012,25 +2851,17 @@ void CloseBattlePointsWindow(void) void TakeFrontierBattlePoints(void) { if (gSaveBlock2Ptr->frontier.battlePoints < gSpecialVar_0x8004) - { gSaveBlock2Ptr->frontier.battlePoints = 0; - } else - { gSaveBlock2Ptr->frontier.battlePoints -= gSpecialVar_0x8004; - } } void GiveFrontierBattlePoints(void) { if (gSaveBlock2Ptr->frontier.battlePoints + gSpecialVar_0x8004 > MAX_BATTLE_FRONTIER_POINTS) - { gSaveBlock2Ptr->frontier.battlePoints = MAX_BATTLE_FRONTIER_POINTS; - } else - { gSaveBlock2Ptr->frontier.battlePoints = gSaveBlock2Ptr->frontier.battlePoints + gSpecialVar_0x8004; - } } u16 GetFrontierBattlePoints(void) @@ -3040,7 +2871,8 @@ u16 GetFrontierBattlePoints(void) void ShowFrontierExchangeCornerItemIconWindow(void) { - static const struct WindowTemplate sFrontierExchangeCorner_ItemIconWindowTemplate = { + static const struct WindowTemplate sFrontierExchangeCorner_ItemIconWindowTemplate = + { .bg = 0, .tilemapLeft = 2, .tilemapTop = 9, @@ -3051,8 +2883,8 @@ void ShowFrontierExchangeCornerItemIconWindow(void) }; sFrontierExchangeCorner_ItemIconWindowId = AddWindow(&sFrontierExchangeCorner_ItemIconWindowTemplate); - SetStandardWindowBorderStyle(sFrontierExchangeCorner_ItemIconWindowId, 0); - CopyWindowToVram(sFrontierExchangeCorner_ItemIconWindowId, 2); + SetStandardWindowBorderStyle(sFrontierExchangeCorner_ItemIconWindowId, FALSE); + CopyWindowToVram(sFrontierExchangeCorner_ItemIconWindowId, COPYWIN_GFX); } void CloseFrontierExchangeCornerItemIconWindow(void) @@ -3061,6 +2893,8 @@ void CloseFrontierExchangeCornerItemIconWindow(void) RemoveWindow(sFrontierExchangeCorner_ItemIconWindowId); } +#define TAG_ITEM_ICON 5500 + static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection) { #include "data/battle_frontier/battle_frontier_exchange_corner.h" @@ -3070,49 +2904,49 @@ static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection) FillWindowPixelRect(0, PIXEL_FILL(1), 0, 0, 216, 32); switch (menu) { - case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1: - AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_Decor1Descriptions[selection], 0, NULL, 2, 1, 3); - if (sFrontierExchangeCorner_Decor1[selection] == 0xFFFF) - { - ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor1[selection]); - } - else - { - FreeSpriteTilesByTag(5500); - FreeSpritePaletteByTag(5500); - sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor1[selection], 33, 88, 0, 5500, 5500); - } - break; - case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2: - AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_Decor2Descriptions[selection], 0, NULL, 2, 1, 3); - if (sFrontierExchangeCorner_Decor2[selection] == 0xFFFF) - { - ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor2[selection]); - } - else - { - FreeSpriteTilesByTag(5500); - FreeSpritePaletteByTag(5500); - sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor2[selection], 33, 88, 0, 5500, 5500); - } - break; - case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR: - AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_VitaminsDescriptions[selection], 0, NULL, 2, 1, 3); - ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Vitamins[selection]); - break; - case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR: - AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_HoldItemsDescriptions[selection], 0, NULL, 2, 1, 3); - ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_HoldItems[selection]); - break; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1: + AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_Decor1Descriptions[selection], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + if (sFrontierExchangeCorner_Decor1[selection] == 0xFFFF) + { + ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor1[selection]); + } + else + { + FreeSpriteTilesByTag(TAG_ITEM_ICON); + FreeSpritePaletteByTag(TAG_ITEM_ICON); + sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor1[selection], 33, 88, 0, TAG_ITEM_ICON, TAG_ITEM_ICON); + } + break; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2: + AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_Decor2Descriptions[selection], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + if (sFrontierExchangeCorner_Decor2[selection] == 0xFFFF) + { + ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor2[selection]); + } + else + { + FreeSpriteTilesByTag(TAG_ITEM_ICON); + FreeSpritePaletteByTag(TAG_ITEM_ICON); + sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor2[selection], 33, 88, 0, TAG_ITEM_ICON, TAG_ITEM_ICON); + } + break; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR: + AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_VitaminsDescriptions[selection], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Vitamins[selection]); + break; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR: + AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_HoldItemsDescriptions[selection], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_HoldItems[selection]); + break; } } } static void ShowFrontierExchangeCornerItemIcon(u16 item) { - FreeSpriteTilesByTag(5500); - FreeSpritePaletteByTag(5500); - sScrollableMultichoice_ItemSpriteId = AddItemIconSprite(5500, 5500, item); + FreeSpriteTilesByTag(TAG_ITEM_ICON); + FreeSpritePaletteByTag(TAG_ITEM_ICON); + sScrollableMultichoice_ItemSpriteId = AddItemIconSprite(TAG_ITEM_ICON, TAG_ITEM_ICON, item); if (sScrollableMultichoice_ItemSpriteId != MAX_SPRITES) { @@ -3128,60 +2962,25 @@ static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused) { switch (menu) { - case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1: - 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]); - break; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1: + 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]); + break; } sScrollableMultichoice_ItemSpriteId = MAX_SPRITES; } } -static const u16 sBattleFrontier_TutorMoves1[] = -{ - MOVE_SOFT_BOILED, - MOVE_SEISMIC_TOSS, - MOVE_DREAM_EATER, - MOVE_MEGA_PUNCH, - MOVE_MEGA_KICK, - MOVE_BODY_SLAM, - MOVE_ROCK_SLIDE, - MOVE_COUNTER, - MOVE_THUNDER_WAVE, - MOVE_SWORDS_DANCE -}; - -static const u16 sBattleFrontier_TutorMoves2[] = -{ - MOVE_DEFENSE_CURL, - MOVE_SNORE, - MOVE_MUD_SLAP, - MOVE_SWIFT, - MOVE_ICY_WIND, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ICE_PUNCH, - MOVE_THUNDER_PUNCH, - MOVE_FIRE_PUNCH -}; - void BufferBattleFrontierTutorMoveName(void) { - if (gSpecialVar_0x8005 != 0) - { - StringCopy(gStringVar1, gMoveNames[sBattleFrontier_TutorMoves2[gSpecialVar_0x8004]]); - } - else - { - StringCopy(gStringVar1, gMoveNames[sBattleFrontier_TutorMoves1[gSpecialVar_0x8004]]); - } + StringCopy(gStringVar1, gMoveNames[gSpecialVar_0x8005]); } static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection) { - static const struct WindowTemplate sBattleFrontierTutor_WindowTemplate = + static const struct WindowTemplate sBattleFrontierTutor_WindowTemplate = { .bg = 0, .tilemapLeft = 1, @@ -3197,7 +2996,7 @@ static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection) if (gSpecialVar_0x8006 == 0) { sTutorMoveAndElevatorWindowId = AddWindow(&sBattleFrontierTutor_WindowTemplate); - SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, 0); + SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, FALSE); } ShowBattleFrontierTutorMoveDescription(menu, selection); } @@ -3205,7 +3004,7 @@ static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection) static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection) { - static const u8 *const sBattleFrontier_TutorMoveDescriptions1[] = + static const u8 *const sBattleFrontier_TutorMoveDescriptions1[] = { BattleFrontier_Lounge7_Text_SoftboiledDesc, BattleFrontier_Lounge7_Text_SeismicTossDesc, @@ -3220,7 +3019,7 @@ static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection) gText_Exit, }; - static const u8 *const sBattleFrontier_TutorMoveDescriptions2[] = + static const u8 *const sBattleFrontier_TutorMoveDescriptions2[] = { BattleFrontier_Lounge7_Text_DefenseCurlDesc, BattleFrontier_Lounge7_Text_SnoreDesc, @@ -3239,13 +3038,9 @@ static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection) { FillWindowPixelRect(sTutorMoveAndElevatorWindowId, PIXEL_FILL(1), 0, 0, 96, 48); if (menu == SCROLL_MULTI_BF_MOVE_TUTOR_2) - { - AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, sBattleFrontier_TutorMoveDescriptions2[selection], 0, 1, 0, NULL); - } + AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, sBattleFrontier_TutorMoveDescriptions2[selection], 0, 1, 0, NULL); else - { - AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, sBattleFrontier_TutorMoveDescriptions1[selection], 0, 1, 0, NULL); - } + AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, sBattleFrontier_TutorMoveDescriptions1[selection], 0, 1, 0, NULL); } } @@ -3256,70 +3051,31 @@ void CloseBattleFrontierTutorWindow(void) } // Never called -void sub_813ADD4(void) +void ScrollableMultichoice_RedrawPersistentMenu(void) { u16 scrollOffset, selectedRow; u8 i; - u8 taskId = FindTaskIdByFunc(sub_813A600); + u8 taskId = FindTaskIdByFunc(Task_ScrollableMultichoice_WaitReturnToList); if (taskId != TASK_NONE) { struct Task *task = &gTasks[taskId]; ListMenuGetScrollAndRow(task->tListTaskId, &scrollOffset, &selectedRow); - SetStandardWindowBorderStyle(task->tWindowId, 0); + SetStandardWindowBorderStyle(task->tWindowId, FALSE); for (i = 0; i < MAX_SCROLL_MULTI_ON_SCREEN; i++) - { - AddTextPrinterParameterized5(task->tWindowId, 1, sScrollableMultichoiceOptions[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0); - } + AddTextPrinterParameterized5(task->tWindowId, FONT_NORMAL, sScrollableMultichoiceOptions[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SKIP_DRAW, NULL, 0, 0); - AddTextPrinterParameterized(task->tWindowId, 1, gText_SelectorArrow, 0, selectedRow * 16, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(task->tWindowId, FONT_NORMAL, gText_SelectorArrow, 0, selectedRow * 16, TEXT_SKIP_DRAW, NULL); PutWindowTilemap(task->tWindowId); - CopyWindowToVram(task->tWindowId, 3); - } -} - -void GetBattleFrontierTutorMoveIndex(void) -{ - u8 i; - u16 moveTutor = 0; - u16 moveIndex = 0; - gSpecialVar_0x8005 = 0; - - moveTutor = VarGet(VAR_TEMP_E); - moveIndex = VarGet(VAR_TEMP_D); - - if (moveTutor != 0) - { - i = 0; - do - { - if (gTutorMoves[i] == sBattleFrontier_TutorMoves2[moveIndex]) - { - gSpecialVar_0x8005 = i; - break; - } - i++; - } while (i < TUTOR_MOVE_COUNT); - } - else - { - i = 0; - do - { - if (gTutorMoves[i] == sBattleFrontier_TutorMoves1[moveIndex]) - { - gSpecialVar_0x8005 = i; - break; - } - i++; - } while (i < TUTOR_MOVE_COUNT); + CopyWindowToVram(task->tWindowId, COPYWIN_FULL); } } // Never called -void sub_813AF48(void) +// Close a scrollable multichoice that stays open after selection +void ScrollableMultichoice_ClosePersistentMenu(void) { - u8 taskId = FindTaskIdByFunc(sub_813A600); + u8 taskId = FindTaskIdByFunc(Task_ScrollableMultichoice_WaitReturnToList); if (taskId != TASK_NONE) { struct Task *task = &gTasks[taskId]; @@ -3328,27 +3084,27 @@ void sub_813AF48(void) ClearStdWindowAndFrameToTransparent(task->tWindowId, TRUE); FillWindowPixelBuffer(task->tWindowId, PIXEL_FILL(0)); ClearWindowTilemap(task->tWindowId); - CopyWindowToVram(task->tWindowId, 2); + CopyWindowToVram(task->tWindowId, COPYWIN_GFX); RemoveWindow(task->tWindowId); DestroyTask(taskId); } } // Undefine Scrollable Multichoice task data macros -#undef tMaxItemsOnScreen -#undef tNumItems -#undef tLeft -#undef tTop -#undef tWidth -#undef tHeight -#undef tKeepOpenAfterSelect -#undef tScrollOffset -#undef tSelectedRow -#undef tScrollMultiId -#undef tScrollArrowId -#undef tWindowId -#undef tListTaskId -#undef tTaskId +#undef tMaxItemsOnScreen +#undef tNumItems +#undef tLeft +#undef tTop +#undef tWidth +#undef tHeight +#undef tKeepOpenAfterSelect +#undef tScrollOffset +#undef tSelectedRow +#undef tScrollMultiId +#undef tScrollArrowId +#undef tWindowId +#undef tListTaskId +#undef tTaskId void DoDeoxysRockInteraction(void) { @@ -3356,17 +3112,17 @@ void DoDeoxysRockInteraction(void) } static const u16 sDeoxysRockPalettes[][16] = { - INCBIN_U16("graphics/misc/deoxys1.gbapal"), - INCBIN_U16("graphics/misc/deoxys2.gbapal"), - INCBIN_U16("graphics/misc/deoxys3.gbapal"), - INCBIN_U16("graphics/misc/deoxys4.gbapal"), - INCBIN_U16("graphics/misc/deoxys5.gbapal"), - INCBIN_U16("graphics/misc/deoxys6.gbapal"), - INCBIN_U16("graphics/misc/deoxys7.gbapal"), - INCBIN_U16("graphics/misc/deoxys8.gbapal"), - INCBIN_U16("graphics/misc/deoxys9.gbapal"), - INCBIN_U16("graphics/misc/deoxys10.gbapal"), - INCBIN_U16("graphics/misc/deoxys11.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_1.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_2.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_3.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_4.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_5.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_6.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_7.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_8.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_9.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_10.gbapal"), + INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_11.gbapal"), }; static const u8 sDeoxysRockCoords[][2] = { @@ -3390,7 +3146,7 @@ static void Task_DeoxysRockInteraction(u8 taskId) if (FlagGet(FLAG_DEOXYS_ROCK_COMPLETE) == TRUE) { gSpecialVar_Result = 3; - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } else @@ -3411,7 +3167,7 @@ static void Task_DeoxysRockInteraction(u8 taskId) { FlagSet(FLAG_DEOXYS_ROCK_COMPLETE); gSpecialVar_Result = 2; - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } else @@ -3449,14 +3205,14 @@ static void ChangeDeoxysRockLevel(u8 rockLevel) gFieldEffectArguments[5] = 5; FieldEffectStart(FLDEFF_MOVE_DEOXYS_ROCK); - Overworld_SetObjEventTemplateCoords(1, sDeoxysRockCoords[rockLevel][0], sDeoxysRockCoords[rockLevel][1]); + SetObjEventTemplateCoords(LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK, sDeoxysRockCoords[rockLevel][0], sDeoxysRockCoords[rockLevel][1]); } static void WaitForDeoxysRockMovement(u8 taskId) { if (FieldEffectActiveListContains(FLDEFF_MOVE_DEOXYS_ROCK) == FALSE) { - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } } @@ -3468,13 +3224,9 @@ void IncrementBirthIslandRockStepCount(void) { var++; if (var > 99) - { VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, 0); - } else - { VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, var); - } } } @@ -3520,18 +3272,14 @@ bool8 IsDestinationBoxFull(void) if (GetBoxMonData(GetBoxedMonPtr(box, i), MON_DATA_SPECIES, 0) == SPECIES_NONE) { if (GetPCBoxToSendMon() != box) - { FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE); - } VarSet(VAR_PC_BOX_TO_SEND_MON, box); return ShouldShowBoxWasFullMessage(); } } if (++box == TOTAL_BOXES_COUNT) - { box = 0; - } } while (box != StorageGetCurrentBox()); return FALSE; } @@ -3597,7 +3345,8 @@ bool32 GetAbnormalWeatherMapNameAndType(void) bool8 AbnormalWeatherHasExpired(void) { // Duplicate array. - static const u8 sAbnormalWeatherMapNumbers[] = { + static const u8 sAbnormalWeatherMapNumbers[] = + { MAP_NUM(ROUTE114), MAP_NUM(ROUTE114), MAP_NUM(ROUTE115), @@ -3620,9 +3369,7 @@ bool8 AbnormalWeatherHasExpired(void) u16 abnormalWeather = VarGet(VAR_ABNORMAL_WEATHER_LOCATION); if (abnormalWeather == ABNORMAL_WEATHER_NONE) - { return FALSE; - } if (++steps > 999) { @@ -3631,15 +3378,15 @@ bool8 AbnormalWeatherHasExpired(void) { switch (gSaveBlock1Ptr->location.mapNum) { - case MAP_NUM(UNDERWATER_MARINE_CAVE): - case MAP_NUM(MARINE_CAVE_ENTRANCE): - case MAP_NUM(MARINE_CAVE_END): - case MAP_NUM(TERRA_CAVE_ENTRANCE): - case MAP_NUM(TERRA_CAVE_END): - VarSet(VAR_SHOULD_END_ABNORMAL_WEATHER, 1); - return FALSE; - default: - break; + case MAP_NUM(UNDERWATER_MARINE_CAVE): + case MAP_NUM(MARINE_CAVE_ENTRANCE): + case MAP_NUM(MARINE_CAVE_END): + case MAP_NUM(TERRA_CAVE_ENTRANCE): + case MAP_NUM(TERRA_CAVE_END): + VarSet(VAR_SHOULD_END_ABNORMAL_WEATHER, 1); + return FALSE; + default: + break; } } @@ -3647,14 +3394,14 @@ bool8 AbnormalWeatherHasExpired(void) { switch (gSaveBlock1Ptr->location.mapNum) { - case MAP_NUM(UNDERWATER_ROUTE127): - case MAP_NUM(UNDERWATER_ROUTE129): - case MAP_NUM(UNDERWATER_ROUTE105): - case MAP_NUM(UNDERWATER_ROUTE125): - VarSet(VAR_SHOULD_END_ABNORMAL_WEATHER, 1); - return FALSE; - default: - break; + case MAP_NUM(UNDERWATER_ROUTE127): + case MAP_NUM(UNDERWATER_ROUTE129): + case MAP_NUM(UNDERWATER_ROUTE105): + case MAP_NUM(UNDERWATER_ROUTE125): + VarSet(VAR_SHOULD_END_ABNORMAL_WEATHER, 1); + return FALSE; + default: + break; } } @@ -3706,9 +3453,7 @@ u32 GetMartEmployeeObjectEventId(void) if (gSaveBlock1Ptr->location.mapGroup == sPokeMarts[i][0]) { if (gSaveBlock1Ptr->location.mapNum == sPokeMarts[i][1]) - { return sPokeMarts[i][2]; - } } } return 1; @@ -3730,7 +3475,7 @@ bool32 ShouldDistributeEonTicket(void) { if (!VarGet(VAR_DISTRIBUTE_EON_TICKET)) return FALSE; - + return TRUE; } @@ -3763,9 +3508,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId) { case 0: if (!FuncIsActiveTask(Task_ReconnectWithLinkPlayers)) - { gTasks[taskId].tState++; - } break; case 1: if (IsLinkTaskFinished() == TRUE) @@ -3779,7 +3522,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId) { // Send value of gSpecialVar_0x8004 to leader // Will either be BATTLE_TOWER_LINK_CONTINUE or BATTLE_TOWER_LINK_RETIRE - SendBlock(bitmask_all_link_players_but_self(), &gSpecialVar_0x8004, sizeof(gSpecialVar_0x8004)); + SendBlock(BitmaskAllOtherLinkPlayers(), &gSpecialVar_0x8004, sizeof(gSpecialVar_0x8004)); gTasks[taskId].tState++; } } @@ -3794,25 +3537,17 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId) gSpecialVar_0x8005 = gBlockRecvBuffer[1][0]; ResetBlockReceivedFlag(1); - if (gSpecialVar_0x8004 == BATTLE_TOWER_LINK_RETIRE + if (gSpecialVar_0x8004 == BATTLE_TOWER_LINK_RETIRE && gSpecialVar_0x8005 == BATTLE_TOWER_LINK_RETIRE) - { gSpecialVar_Result = BATTLE_TOWER_LINKSTAT_BOTH_RETIRE; - } - else if (gSpecialVar_0x8004 == BATTLE_TOWER_LINK_CONTINUE + else if (gSpecialVar_0x8004 == BATTLE_TOWER_LINK_CONTINUE && gSpecialVar_0x8005 == BATTLE_TOWER_LINK_RETIRE) - { gSpecialVar_Result = BATTLE_TOWER_LINKSTAT_MEMBER_RETIRE; - } - else if (gSpecialVar_0x8004 == BATTLE_TOWER_LINK_RETIRE + else if (gSpecialVar_0x8004 == BATTLE_TOWER_LINK_RETIRE && gSpecialVar_0x8005 == BATTLE_TOWER_LINK_CONTINUE) - { gSpecialVar_Result = BATTLE_TOWER_LINKSTAT_LEADER_RETIRE; - } else - { gSpecialVar_Result = BATTLE_TOWER_LINKSTAT_CONTINUE; - } } gTasks[taskId].tState++; } @@ -3828,7 +3563,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId) else { // Send whether or not play should continue - SendBlock(bitmask_all_link_players_but_self(), &gSpecialVar_Result, sizeof(gSpecialVar_Result)); + SendBlock(BitmaskAllOtherLinkPlayers(), &gSpecialVar_Result, sizeof(gSpecialVar_Result)); gTasks[taskId].tState++; } } @@ -3883,7 +3618,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId) SetCloseLinkCallback(); gBattleTypeFlags = sBattleTowerMultiBattleTypeFlags; - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); break; } @@ -3927,21 +3662,24 @@ static void Task_LoopWingFlapSE(u8 taskId) } if (playCount == gSpecialVar_0x8004 - 1) - { DestroyTask(taskId); - } } #undef playCount #undef delay +#define CURTAIN_HEIGHT 4 +#define CURTAIN_WIDTH 3 +#define tFrameTimer data +#define tCurrentFrame data[3] + void CloseBattlePikeCurtain(void) { u8 taskId = CreateTask(Task_CloseBattlePikeCurtain, 8); - gTasks[taskId].data[0] = 4; - gTasks[taskId].data[1] = 4; - gTasks[taskId].data[2] = 4; - gTasks[taskId].data[3] = 0; + gTasks[taskId].tFrameTimer[0] = 4; + gTasks[taskId].tFrameTimer[1] = 4; + gTasks[taskId].tFrameTimer[2] = 4; + gTasks[taskId].tCurrentFrame = 0; } static void Task_CloseBattlePikeCurtain(u8 taskId) @@ -3949,26 +3687,33 @@ static void Task_CloseBattlePikeCurtain(u8 taskId) u8 x, y; s16 *data = gTasks[taskId].data; - data[data[3]]--; - if (data[data[3]] == 0) + tFrameTimer[tCurrentFrame]--; + if (tFrameTimer[tCurrentFrame] == 0) { - for (y = 0; y < 4; y++) + for (y = 0; y < CURTAIN_HEIGHT; y++) { - for (x = 0; x < 3; x++) + for (x = 0; x < CURTAIN_WIDTH; x++) { - MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + x + 6, gSaveBlock1Ptr->pos.y + y + 4, x + 513 + y * 8 + data[3] * 32); + MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + x + MAP_OFFSET - 1, + gSaveBlock1Ptr->pos.y + y + MAP_OFFSET - 3, + (x + METATILE_BattlePike_CurtainFrames_Start) + (y * METATILE_ROW_WIDTH) + (tCurrentFrame * CURTAIN_HEIGHT * METATILE_ROW_WIDTH)); } } DrawWholeMapView(); - data[3]++; - if (data[3] == 3) + tCurrentFrame++; + if (tCurrentFrame == 3) { DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } } } +#undef CURTAIN_HEIGHT +#undef CURTAIN_WIDTH +#undef tFrameTimer +#undef tCurrentFrame + void GetBattlePyramidHint(void) { gSpecialVar_Result = gSpecialVar_0x8004 / 7; @@ -3979,9 +3724,7 @@ void GetBattlePyramidHint(void) void ResetHealLocationFromDewford(void) { if (gSaveBlock1Ptr->lastHealLocation.mapGroup == MAP_GROUP(DEWFORD_TOWN) && gSaveBlock1Ptr->lastHealLocation.mapNum == MAP_NUM(DEWFORD_TOWN)) - { SetLastHealLocationWarp(HEAL_LOCATION_PETALBURG_CITY); - } } bool8 InPokemonCenter(void) @@ -4018,21 +3761,19 @@ bool8 InPokemonCenter(void) for (i = 0; sPokemonCenters[i] != 0xFFFF; i++) { if (sPokemonCenters[i] == map) - { return TRUE; - } } return FALSE; } /* Summary of the Lilycove Trainer Fan Club, because it's a little messy - + ## The Fan Club room itself There are initially 4 members of the Fan Club (+ an interviewer), none of whom are fans of the player After becoming the champion there will be 8 members of the Fan Club, 3 of whom are automatically fans of the player After this point, if a club member is a fan of the player they will sit at the front table and comment on the player If they are not fans of the player, they will sit at the far table and can make comments about a different trainer (see BufferFanClubTrainerName) - + ## Gaining/losing fans After every link battle the player will gain a fan if they won, or lose a fan if they lost If the player has at least 3 fans, this is the only way to gain fans @@ -4101,16 +3842,16 @@ void UpdateTrainerFanClubGameClear(void) } // If the player has < 3 fans, gain a new fan whenever the counter reaches 20+ -// Defeating Drake or participating in a Contest increments the counter by 2 +// Defeating Drake or participating in a Contest increments the counter by 2 // Participating at Battle Tower or in a Secret Base battle increments the counter by 1 u8 TryGainNewFanFromCounter(u8 incrementId) { - static const u8 sCounterIncrements[] = - { - [FANCOUNTER_DEFEATED_DRAKE] = 2, - [FANCOUNTER_BATTLED_AT_BASE] = 1, - [FANCOUNTER_FINISHED_CONTEST] = 2, - [FANCOUNTER_USED_BATTLE_TOWER] = 1 + static const u8 sCounterIncrements[] = + { + [FANCOUNTER_DEFEATED_DRAKE] = 2, + [FANCOUNTER_BATTLED_AT_BASE] = 1, + [FANCOUNTER_FINISHED_CONTEST] = 2, + [FANCOUNTER_USED_BATTLE_TOWER] = 1 }; if (VarGet(VAR_LILYCOVE_FAN_CLUB_STATE) == 2) @@ -4143,16 +3884,16 @@ u8 TryGainNewFanFromCounter(u8 incrementId) // If all the members are already fans of the player then this redundantly sets the first fan in the list to be a fan static u16 PlayerGainRandomTrainerFan(void) { - static const u8 sFanClubMemberIds[NUM_TRAINER_FAN_CLUB_MEMBERS] = - { - FANCLUB_MEMBER1, - FANCLUB_MEMBER2, - FANCLUB_MEMBER3, - FANCLUB_MEMBER4, - FANCLUB_MEMBER5, + static const u8 sFanClubMemberIds[NUM_TRAINER_FAN_CLUB_MEMBERS] = + { + FANCLUB_MEMBER1, + FANCLUB_MEMBER2, + FANCLUB_MEMBER3, + FANCLUB_MEMBER4, + FANCLUB_MEMBER5, FANCLUB_MEMBER6, - FANCLUB_MEMBER7, - FANCLUB_MEMBER8 + FANCLUB_MEMBER7, + FANCLUB_MEMBER8 }; u8 i; @@ -4179,25 +3920,23 @@ static u16 PlayerGainRandomTrainerFan(void) // If no fan was lost while looping, the last current fan in the list will stop being a fan static u16 PlayerLoseRandomTrainerFan(void) { - static const u8 sFanClubMemberIds[NUM_TRAINER_FAN_CLUB_MEMBERS] = - { - FANCLUB_MEMBER1, - FANCLUB_MEMBER6, - FANCLUB_MEMBER7, - FANCLUB_MEMBER4, - FANCLUB_MEMBER3, - FANCLUB_MEMBER5, - FANCLUB_MEMBER8, - FANCLUB_MEMBER2 + static const u8 sFanClubMemberIds[NUM_TRAINER_FAN_CLUB_MEMBERS] = + { + FANCLUB_MEMBER1, + FANCLUB_MEMBER6, + FANCLUB_MEMBER7, + FANCLUB_MEMBER4, + FANCLUB_MEMBER3, + FANCLUB_MEMBER5, + FANCLUB_MEMBER8, + FANCLUB_MEMBER2 }; u8 i; u8 idx = 0; if (GetNumFansOfPlayerInTrainerFanClub() == 1) - { return 0; - } for (i = 0; i < ARRAY_COUNT(sFanClubMemberIds); i++) { @@ -4213,9 +3952,7 @@ static u16 PlayerLoseRandomTrainerFan(void) } if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx])) - { FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]); - } return idx; } @@ -4280,32 +4017,32 @@ void BufferFanClubTrainerName(void) u8 whichNPCTrainer = 0; switch (gSpecialVar_0x8004) { - case FANCLUB_MEMBER1: - break; - case FANCLUB_MEMBER2: - break; - case FANCLUB_MEMBER3: - whichLinkTrainer = 0; - whichNPCTrainer = 3; - break; - case FANCLUB_MEMBER4: - whichLinkTrainer = 0; - whichNPCTrainer = 1; - break; - case FANCLUB_MEMBER5: - whichLinkTrainer = 1; - whichNPCTrainer = 0; - break; - case FANCLUB_MEMBER6: - whichLinkTrainer = 0; - whichNPCTrainer = 4; - break; - case FANCLUB_MEMBER7: - whichLinkTrainer = 1; - whichNPCTrainer = 5; - break; - case FANCLUB_MEMBER8: - break; + case FANCLUB_MEMBER1: + break; + case FANCLUB_MEMBER2: + break; + case FANCLUB_MEMBER3: + whichLinkTrainer = 0; + whichNPCTrainer = 3; + break; + case FANCLUB_MEMBER4: + whichLinkTrainer = 0; + whichNPCTrainer = 1; + break; + case FANCLUB_MEMBER5: + whichLinkTrainer = 1; + whichNPCTrainer = 0; + break; + case FANCLUB_MEMBER6: + whichLinkTrainer = 0; + whichNPCTrainer = 4; + break; + case FANCLUB_MEMBER7: + whichLinkTrainer = 1; + whichNPCTrainer = 5; + break; + case FANCLUB_MEMBER8: + break; } BufferFanClubTrainerName_(&gSaveBlock1Ptr->linkBattleRecords, whichLinkTrainer, whichNPCTrainer); } @@ -4317,27 +4054,27 @@ static void BufferFanClubTrainerName_(struct LinkBattleRecords *linkRecords, u8 { switch (whichNPCTrainer) { - case 0: - StringCopy(gStringVar1, gText_Wallace); - break; - case 1: - StringCopy(gStringVar1, gText_Steven); - break; - case 2: - StringCopy(gStringVar1, gText_Brawly); - break; - case 3: - StringCopy(gStringVar1, gText_Winona); - break; - case 4: - StringCopy(gStringVar1, gText_Phoebe); - break; - case 5: - StringCopy(gStringVar1, gText_Glacia); - break; - default: - StringCopy(gStringVar1, gText_Wallace); - break; + case 0: + StringCopy(gStringVar1, gText_Wallace); + break; + case 1: + StringCopy(gStringVar1, gText_Steven); + break; + case 2: + StringCopy(gStringVar1, gText_Brawly); + break; + case 3: + StringCopy(gStringVar1, gText_Winona); + break; + case 4: + StringCopy(gStringVar1, gText_Phoebe); + break; + case 5: + StringCopy(gStringVar1, gText_Glacia); + break; + default: + StringCopy(gStringVar1, gText_Wallace); + break; } } else diff --git a/src/field_tasks.c b/src/field_tasks.c index 676a9cfc7b..099014a4d4 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -21,20 +21,40 @@ #include "constants/songs.h" #include "constants/metatile_labels.h" +/* This file handles some persistent tasks that run in the overworld. + * - Task_RunTimeBasedEvents: Periodically updates local time and RTC events. Also triggers ambient cries. + * - Task_MuddySlope: Handles the metatile animation when the player steps on muddy slopes. + * - Task_RunPerStepCallback: Calls one of the functions in sPerStepCallbacks, listed below... + * . DummyPerStepCallback: Default, does nothing + * . AshGrassPerStepCallback: Removes the ash from ash-covered grass that the player steps on. + * . FortreeBridgePerStepCallback: Depresses Fortree log bridges that the player steps on. + * . PacifidlogBridgePerStepCallback: Submerges Pacifidlog log bridges that the player steps on. + * . SootopolisGymIcePerStepCallback: Cracks/breaks ice in Sootopolis Gym that the player steps on. + * . EndTruckSequence: Sets the moving truck boxes to their final position when the truck sequence ends. + * . SecretBasePerStepCallback: Records the decorations in a friend's secret base that the player steps on. + * . CrackedFloorPerStepCallback: Breaks cracked floors that the player steps on. + * + * NOTE: "PerStep" is perhaps misleading. One function in sPerStepCallbacks is called + * every frame while in the overworld by Task_RunPerStepCallback regardless of + * whether or not steps are being taken. However, nearly all of the functions in + * the table check if the player has moved from their previous position before + * doing anything else. + */ + struct PacifidlogMetatileOffsets { s8 x; s8 y; - u16 tileId; + u16 metatileId; }; -static void DummyPerStepCallback(u8 taskId); -static void AshGrassPerStepCallback(u8 taskId); -static void FortreeBridgePerStepCallback(u8 taskId); -static void PacifidlogBridgePerStepCallback(u8 taskId); -static void SootopolisGymIcePerStepCallback(u8 taskId); -static void CrackedFloorPerStepCallback(u8 taskId); -static void Task_MuddySlope(u8 taskId); +static void DummyPerStepCallback(u8); +static void AshGrassPerStepCallback(u8); +static void FortreeBridgePerStepCallback(u8); +static void PacifidlogBridgePerStepCallback(u8); +static void SootopolisGymIcePerStepCallback(u8); +static void CrackedFloorPerStepCallback(u8); +static void Task_MuddySlope(u8); static const TaskFunc sPerStepCallbacks[] = { @@ -48,29 +68,35 @@ static const TaskFunc sPerStepCallbacks[] = [STEP_CB_CRACKED_FLOOR] = CrackedFloorPerStepCallback }; -// they are in pairs but declared as 1D array +// Each array has 4 pairs of data, each pair representing two metatiles of a log and their relative position. +// The 4 pairs are for: +// 0: If the player is standing on the top of a vertical log +// 1: If the player is standing on the bottom of a vertical log +// 2: If the player is standing on the left of a horizontal log +// 3: If the player is standing on the right of a horizontal log +// i.e. the element with an offset of 0,0 is the one the player is standing on. static const struct PacifidlogMetatileOffsets sHalfSubmergedBridgeMetatileOffsets[] = { - { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1}, - { 0, -1, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1}, - { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1}, - {-1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1} + { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop}, {0, 1, METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom}, + { 0, -1, METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom}, + { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft}, {1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight}, + {-1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight} }; static const struct PacifidlogMetatileOffsets sFullySubmergedBridgeMetatileOffsets[] = { - { 0, 0, METATILE_Pacifidlog_SubmergedLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_SubmergedLogs_Vertical1}, - { 0, -1, METATILE_Pacifidlog_SubmergedLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_Vertical1}, - { 0, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal1}, - {-1, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal1} + { 0, 0, METATILE_Pacifidlog_SubmergedLogs_VerticalTop}, {0, 1, METATILE_Pacifidlog_SubmergedLogs_VerticalBottom}, + { 0, -1, METATILE_Pacifidlog_SubmergedLogs_VerticalTop}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_VerticalBottom}, + { 0, 0, METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft}, {1, 0, METATILE_Pacifidlog_SubmergedLogs_HorizontalRight}, + {-1, 0, METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_HorizontalRight} }; static const struct PacifidlogMetatileOffsets sFloatingBridgeMetatileOffsets[] = { - { 0, 0, METATILE_Pacifidlog_FloatingLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_FloatingLogs_Vertical1}, - { 0, -1, METATILE_Pacifidlog_FloatingLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_FloatingLogs_Vertical1}, - { 0, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal1}, - {-1, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal1} + { 0, 0, METATILE_Pacifidlog_FloatingLogs_VerticalTop}, {0, 1, METATILE_Pacifidlog_FloatingLogs_VerticalBottom}, + { 0, -1, METATILE_Pacifidlog_FloatingLogs_VerticalTop}, {0, 0, METATILE_Pacifidlog_FloatingLogs_VerticalBottom}, + { 0, 0, METATILE_Pacifidlog_FloatingLogs_HorizontalLeft}, {1, 0, METATILE_Pacifidlog_FloatingLogs_HorizontalRight}, + {-1, 0, METATILE_Pacifidlog_FloatingLogs_HorizontalLeft}, {0, 0, METATILE_Pacifidlog_FloatingLogs_HorizontalRight} }; // Each element corresponds to a y coordinate row in the sootopolis gym 1F map. @@ -104,16 +130,11 @@ static const u16 sSootopolisGymIceRowVars[] = 0 }; -static const u16 sMuddySlopeMetatiles[] = { - METATILE_General_MuddySlope_Frame0, - METATILE_General_MuddySlope_Frame3, - METATILE_General_MuddySlope_Frame2, - METATILE_General_MuddySlope_Frame1 -}; +#define tCallbackId data[0] static void Task_RunPerStepCallback(u8 taskId) { - int idx = gTasks[taskId].data[0]; + int idx = gTasks[taskId].tCallbackId; sPerStepCallbacks[idx](taskId); } @@ -121,23 +142,23 @@ static void Task_RunPerStepCallback(u8 taskId) #define tAmbientCryState data[1] #define tAmbientCryDelay data[2] +#define TIME_UPDATE_INTERVAL (1 << 12) + static void RunTimeBasedEvents(s16 *data) { switch (tState) { - case 0: - if (gMain.vblankCounter1 & 0x1000) - { - DoTimeBasedEvents(); - tState++; - } - break; - case 1: - if (!(gMain.vblankCounter1 & 0x1000)) - { - tState--; - } - break; + case 0: + if (gMain.vblankCounter1 & TIME_UPDATE_INTERVAL) + { + DoTimeBasedEvents(); + tState++; + } + break; + case 1: + if (!(gMain.vblankCounter1 & TIME_UPDATE_INTERVAL)) + tState--; + break; } } @@ -145,7 +166,7 @@ static void Task_RunTimeBasedEvents(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!ScriptContext2_IsEnabled()) + if (!ArePlayerFieldControlsLocked()) { RunTimeBasedEvents(data); UpdateAmbientCry(&tAmbientCryState, &tAmbientCryDelay); @@ -153,22 +174,20 @@ static void Task_RunTimeBasedEvents(u8 taskId) } #undef tState -#undef tAmbientCryState -#undef tAmbientCryDelay void SetUpFieldTasks(void) { if (!FuncIsActiveTask(Task_RunPerStepCallback)) { - u8 taskId = CreateTask(Task_RunPerStepCallback, 0x50); - gTasks[taskId].data[0] = 0; + u8 taskId = CreateTask(Task_RunPerStepCallback, 80); + gTasks[taskId].tCallbackId = STEP_CB_DUMMY; } if (!FuncIsActiveTask(Task_MuddySlope)) - CreateTask(Task_MuddySlope, 0x50); + CreateTask(Task_MuddySlope, 80); if (!FuncIsActiveTask(Task_RunTimeBasedEvents)) - CreateTask(Task_RunTimeBasedEvents, 0x50); + CreateTask(Task_RunTimeBasedEvents, 80); } void ActivatePerStepCallback(u8 callbackId) @@ -179,17 +198,13 @@ void ActivatePerStepCallback(u8 callbackId) s32 i; s16 *data = gTasks[taskId].data; - for (i = 0; i < 16; i++) + for (i = 0; i < NUM_TASK_DATA; i++) data[i] = 0; if (callbackId >= ARRAY_COUNT(sPerStepCallbacks)) - { - data[0] = 0; - } + tCallbackId = STEP_CB_DUMMY; else - { - data[0] = callbackId; - } + tCallbackId = callbackId; } } @@ -200,18 +215,20 @@ void ResetFieldTasksArgs(void) taskId = FindTaskIdByFunc(Task_RunPerStepCallback); if (taskId != TASK_NONE) - { data = gTasks[taskId].data; - } + taskId = FindTaskIdByFunc(Task_RunTimeBasedEvents); if (taskId != TASK_NONE) { data = gTasks[taskId].data; - data[1] = 0; - data[2] = 0; + tAmbientCryState = 0; + tAmbientCryDelay = 0; } } +#undef tAmbientCryState +#undef tAmbientCryDelay + static void DummyPerStepCallback(u8 taskId) { @@ -219,101 +236,129 @@ static void DummyPerStepCallback(u8 taskId) static const struct PacifidlogMetatileOffsets *GetPacifidlogBridgeMetatileOffsets(const struct PacifidlogMetatileOffsets *offsets, u16 metatileBehavior) { - if (MetatileBehavior_IsPacifidlogVerticalLog1(metatileBehavior)) + if (MetatileBehavior_IsPacifidlogVerticalLogTop(metatileBehavior)) return &offsets[0 * 2]; - else if (MetatileBehavior_IsPacifidlogVerticalLog2(metatileBehavior)) + else if (MetatileBehavior_IsPacifidlogVerticalLogBottom(metatileBehavior)) return &offsets[1 * 2]; - else if (MetatileBehavior_IsPacifidlogHorizontalLog1(metatileBehavior)) + else if (MetatileBehavior_IsPacifidlogHorizontalLogLeft(metatileBehavior)) return &offsets[2 * 2]; - else if (MetatileBehavior_IsPacifidlogHorizontalLog2(metatileBehavior)) + else if (MetatileBehavior_IsPacifidlogHorizontalLogRight(metatileBehavior)) return &offsets[3 * 2]; else return NULL; } -static void SetPacifidlogBridgeMetatiles(const struct PacifidlogMetatileOffsets *offsets, s16 x, s16 y, bool32 redrawMap) +static void TrySetPacifidlogBridgeMetatiles(const struct PacifidlogMetatileOffsets *offsets, s16 x, s16 y, bool32 redrawMap) { offsets = GetPacifidlogBridgeMetatileOffsets(offsets, MapGridGetMetatileBehaviorAt(x, y)); + + // If offsets is NULL, position is not a log (don't set it) if (offsets) { - MapGridSetMetatileIdAt(x + offsets[0].x, y + offsets[0].y, offsets[0].tileId); + // Set both metatiles of the log + MapGridSetMetatileIdAt(x + offsets[0].x, y + offsets[0].y, offsets[0].metatileId); if (redrawMap) CurrentMapDrawMetatileAt(x + offsets[0].x, y + offsets[0].y); - MapGridSetMetatileIdAt(x + offsets[1].x, y + offsets[1].y, offsets[1].tileId); + MapGridSetMetatileIdAt(x + offsets[1].x, y + offsets[1].y, offsets[1].metatileId); if (redrawMap) CurrentMapDrawMetatileAt(x + offsets[1].x, y + offsets[1].y); } } -static void UpdateHalfSubmergedBridgeMetatiles(s16 x, s16 y, bool32 redrawMap) +static void TrySetLogBridgeHalfSubmerged(s16 x, s16 y, bool32 redrawMap) { - SetPacifidlogBridgeMetatiles(sHalfSubmergedBridgeMetatileOffsets, x, y, redrawMap); + TrySetPacifidlogBridgeMetatiles(sHalfSubmergedBridgeMetatileOffsets, x, y, redrawMap); } -static void UpdateFullySubmergedBridgeMetatiles(s16 x, s16 y, bool32 redrawMap) +static void TrySetLogBridgeFullySubmerged(s16 x, s16 y, bool32 redrawMap) { - SetPacifidlogBridgeMetatiles(sFullySubmergedBridgeMetatileOffsets, x, y, redrawMap); + TrySetPacifidlogBridgeMetatiles(sFullySubmergedBridgeMetatileOffsets, x, y, redrawMap); } -static void UpdateFloatingBridgeMetatiles(s16 x, s16 y, bool32 redrawMap) +static void TrySetLogBridgeFloating(s16 x, s16 y, bool32 redrawMap) { - SetPacifidlogBridgeMetatiles(sFloatingBridgeMetatileOffsets, x, y, redrawMap); + TrySetPacifidlogBridgeMetatiles(sFloatingBridgeMetatileOffsets, x, y, redrawMap); } -static bool32 StandingOnNewPacifidlogBridge(s16 x1, s16 y1, s16 x2, s16 y2) +// Returns FALSE if player has moved from one end of a log to the other (log should remain submerged). +// Otherwise it returns TRUE. +static bool32 ShouldRaisePacifidlogLogs(s16 newX, s16 newY, s16 oldX, s16 oldY) { - u16 metatileBehavior = MapGridGetMetatileBehaviorAt(x2, y2); + u16 oldBehavior = MapGridGetMetatileBehaviorAt(oldX, oldY); - if (MetatileBehavior_IsPacifidlogVerticalLog1(metatileBehavior)) + if (MetatileBehavior_IsPacifidlogVerticalLogTop(oldBehavior)) { - if (y1 > y2) + // Still on same one if moved from top to bottom + if (newY > oldY) return FALSE; } - else if (MetatileBehavior_IsPacifidlogVerticalLog2(metatileBehavior)) + else if (MetatileBehavior_IsPacifidlogVerticalLogBottom(oldBehavior)) { - if (y1 < y2) + // Still on same one if moved from bottom to top + if (newY < oldY) return FALSE; } - else if (MetatileBehavior_IsPacifidlogHorizontalLog1(metatileBehavior)) + else if (MetatileBehavior_IsPacifidlogHorizontalLogLeft(oldBehavior)) { - if (x1 > x2) + // Still on same one if moved from left to right + if (newX > oldX) return FALSE; } - else if (MetatileBehavior_IsPacifidlogHorizontalLog2(metatileBehavior)) + else if (MetatileBehavior_IsPacifidlogHorizontalLogRight(oldBehavior)) { - if (x1 < x2) + // Still on same one if moved from right to left + if (newX < oldX) + return FALSE; + } + + // Player is either on a different log or no log at all + return TRUE; +} + +// Returns FALSE if player has moved from one end of a log to the other (log should remain submerged). +// Otherwise it returns TRUE. +// This is the effectively the same as ShouldRaisePacifidlogLogs, as it swaps both the conditions and which position's behavior to check. +// In effect the previous function asks "was the player's previous position not the other end of a log they're standing on?" +// while this function asks "is the player's current position not the other end of a log they were previously standing on?" +// and with the same positions both questions always have the same answer. +static bool32 ShouldSinkPacifidlogLogs(s16 newX, s16 newY, s16 oldX, s16 oldY) +{ + u16 newBehavior = MapGridGetMetatileBehaviorAt(newX, newY); + + if (MetatileBehavior_IsPacifidlogVerticalLogTop(newBehavior)) + { + // Still on same one if moved from bottom to top + if (newY < oldY) + return FALSE; + } + else if (MetatileBehavior_IsPacifidlogVerticalLogBottom(newBehavior)) + { + // Still on same one if moved from top to bottom + if (newY > oldY) + return FALSE; + } + else if (MetatileBehavior_IsPacifidlogHorizontalLogLeft(newBehavior)) + { + // Still on same one if moved from right to left + if (newX < oldX) + return FALSE; + } + else if (MetatileBehavior_IsPacifidlogHorizontalLogRight(newBehavior)) + { + // Still on same one if moved from left to right + if (newX > oldX) return FALSE; } return TRUE; } -static bool32 StandingOnSamePacifidlogBridge(s16 x1, s16 y1, s16 x2, s16 y2) -{ - u16 metatileBehavior = MapGridGetMetatileBehaviorAt(x1, y1); - - if (MetatileBehavior_IsPacifidlogVerticalLog1(metatileBehavior)) - { - if (y1 < y2) - return FALSE; - } - else if (MetatileBehavior_IsPacifidlogVerticalLog2(metatileBehavior)) - { - if (y1 > y2) - return FALSE; - } - else if (MetatileBehavior_IsPacifidlogHorizontalLog1(metatileBehavior)) - { - if (x1 < x2) - return FALSE; - } - else if (MetatileBehavior_IsPacifidlogHorizontalLog2(metatileBehavior)) - { - if (x1 > x2) - return FALSE; - } - return TRUE; -} +#define tState data[1] +#define tPrevX data[2] +#define tPrevY data[3] +#define tToRaiseX data[4] +#define tToRaiseY data[5] +#define tDelay data[6] static void PacifidlogBridgePerStepCallback(u8 taskId) { @@ -321,180 +366,247 @@ static void PacifidlogBridgePerStepCallback(u8 taskId) s16 x, y; data = gTasks[taskId].data; PlayerGetDestCoords(&x, &y); - switch (data[1]) + switch (tState) { - case 0: - data[2] = x; - data[3] = y; - UpdateFullySubmergedBridgeMetatiles(x, y, TRUE); - data[1] = 1; - break; - case 1: - if (x != data[2] || y != data[3]) - { - if (StandingOnNewPacifidlogBridge(x, y, data[2], data[3])) - { - UpdateHalfSubmergedBridgeMetatiles(data[2], data[3], TRUE); - UpdateFloatingBridgeMetatiles(data[2], data[3], FALSE); - data[4] = data[2]; - data[5] = data[3]; - data[1] = 2; - data[6] = 8; - } - else - { - data[4] = -1; - data[5] = -1; - } + case 0: + tPrevX = x; + tPrevY = y; + + // If player is already standing on a log when the callback + // is set then immediately set it to submerged + TrySetLogBridgeFullySubmerged(x, y, TRUE); + tState = 1; + break; + case 1: + // Skip if player hasn't moved + if (x == tPrevX && y == tPrevY) + return; - if (StandingOnSamePacifidlogBridge(x, y, data[2], data[3])) - { - UpdateHalfSubmergedBridgeMetatiles(x, y, TRUE); - data[1] = 2; - data[6] = 8; - } + if (ShouldRaisePacifidlogLogs(x, y, tPrevX, tPrevY)) + { + // Player's previous position is not the other end of a log + // they're standing on, try and set it half-submerged (rising to surface). + // The floating metatile is queued up by setting it but not drawing it, + // but this is pointless as state 2 will handle it in full anyway. + TrySetLogBridgeHalfSubmerged(tPrevX, tPrevY, TRUE); + TrySetLogBridgeFloating(tPrevX, tPrevY, FALSE); + tToRaiseX = tPrevX; + tToRaiseY = tPrevY; + tState = 2; + tDelay = 8; + } + else + { + // Player has moved but is still on the same log bridge section. + // Keep it submerged. + tToRaiseX = -1; + tToRaiseY = -1; + } - data[2] = x; - data[3] = y; - if (MetatileBehavior_IsPacifidlogLog(MapGridGetMetatileBehaviorAt(x, y))) - PlaySE(SE_PUDDLE); - } - break; - case 2: - if ((--data[6]) == 0) - { - UpdateFullySubmergedBridgeMetatiles(x, y, TRUE); - if (data[4] != -1 && data[5] != -1) - UpdateFloatingBridgeMetatiles(data[4], data[5], TRUE); + if (ShouldSinkPacifidlogLogs(x, y, tPrevX, tPrevY)) + { + // Player's current position is not the other end of a log + // they were previously standing on, try and set it half-submerged (sinking) + TrySetLogBridgeHalfSubmerged(x, y, TRUE); + tState = 2; + tDelay = 8; + } - data[1] = 1; - } - break; + tPrevX = x; + tPrevY = y; + + // If player's new position is a log play the puddle SE + if (MetatileBehavior_IsPacifidlogLog(MapGridGetMetatileBehaviorAt(x, y))) + PlaySE(SE_PUDDLE); + break; + case 2: + if (--tDelay == 0) + { + // If player's current position is a log submerge it fully. + TrySetLogBridgeFullySubmerged(x, y, TRUE); + + // Player's previous position is not the other end of a log + // they're standing on, try to raise their previous position. + if (tToRaiseX != -1 && tToRaiseY != -1) + TrySetLogBridgeFloating(tToRaiseX, tToRaiseY, TRUE); + + tState = 1; + } + break; } } -static void SetLoweredForetreeBridgeMetatile(s16 x, s16 y) +#undef tState +#undef tPrevX +#undef tPrevY +#undef tToRaiseX +#undef tToRaiseY +#undef tDelay + +static void TryLowerFortreeBridge(s16 x, s16 y) { - u8 z = PlayerGetZCoord(); - if (!(z & 1)) + u8 elevation = PlayerGetElevation(); + if (!(elevation & 1)) { switch (MapGridGetMetatileIdAt(x, y)) { - case METATILE_Fortree_BridgeOverGrass_Raised: - MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Lowered); - break; - case METATILE_Fortree_BridgeOverTrees_Raised: - MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Lowered); - break; + case METATILE_Fortree_BridgeOverGrass_Raised: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Lowered); + break; + case METATILE_Fortree_BridgeOverTrees_Raised: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Lowered); + break; } } } -static void SetNormalFortreeBridgeMetatile(s16 x, s16 y) +static void TryRaiseFortreeBridge(s16 x, s16 y) { - u8 z = PlayerGetZCoord(); - if (!(z & 1)) + u8 elevation = PlayerGetElevation(); + if (!(elevation & 1)) { switch (MapGridGetMetatileIdAt(x, y)) { - case METATILE_Fortree_BridgeOverGrass_Lowered: - MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Raised); - break; - case METATILE_Fortree_BridgeOverTrees_Lowered: - MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Raised); - break; + case METATILE_Fortree_BridgeOverGrass_Lowered: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Raised); + break; + case METATILE_Fortree_BridgeOverTrees_Lowered: + MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Raised); + break; } } } +#define tState data[1] +#define tPrevX data[2] +#define tPrevY data[3] +#define tOldBridgeX data[4] +#define tOldBridgeY data[5] +#define tBounceTime data[6] + static void FortreeBridgePerStepCallback(u8 taskId) { bool8 isFortreeBridgeCur; bool8 isFortreeBridgePrev; - u8 z, flag; - s16 x, y, x2, y2; + u8 elevation, onBridgeElevation; + s16 x, y, prevX, prevY; s16 *data = gTasks[taskId].data; PlayerGetDestCoords(&x, &y); - switch (data[1]) + switch (tState) { - default: + default: + break; + case 0: + tPrevX = x; + tPrevY = y; + + // If player is already on bridge when callback is set then lower it immediately. + if (MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y))) + { + TryLowerFortreeBridge(x, y); + CurrentMapDrawMetatileAt(x, y); + } + tState = 1; + break; + case 1: + prevX = tPrevX; + prevY = tPrevY; + + // Skip if player hasn't moved + if (x == prevX && y == prevY) break; + + isFortreeBridgeCur = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y)); + isFortreeBridgePrev = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(prevX, prevY)); + + // Make sure player isn't below bridge + elevation = PlayerGetElevation(); + onBridgeElevation = FALSE; + if ((u8)(elevation & 1) == 0) + onBridgeElevation = TRUE; + + if (onBridgeElevation && (isFortreeBridgeCur == TRUE || isFortreeBridgePrev == TRUE)) + PlaySE(SE_BRIDGE_WALK); + + // Because this doesn't check for isFortreeBridgeCur, bridge sections aren't + // lowered when first stepping onto them from anything other than another bridge. + #ifdef BUGFIX + if (isFortreeBridgePrev || isFortreeBridgeCur) + #else + if (isFortreeBridgePrev) + #endif + { + // Raise old bridge + TryRaiseFortreeBridge(prevX, prevY); + CurrentMapDrawMetatileAt(prevX, prevY); + + // Lower new bridge + TryLowerFortreeBridge(x, y); + CurrentMapDrawMetatileAt(x, y); + } + + // These should really be set below the !isFortreeBridgePrev conditional, + // but it doesn't matter because it's not read until case 2 anyway. + tOldBridgeX = prevX; + tOldBridgeY = prevY; + + tPrevX = x; + tPrevY = y; + if (!isFortreeBridgePrev) + break; + + tBounceTime = 16; + tState = 2; + // fallthrough + case 2: + tBounceTime--; + prevX = tOldBridgeX; + prevY = tOldBridgeY; + switch (tBounceTime % 7) + { case 0: - data[2] = x; - data[3] = y; - if (MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y))) - { - SetLoweredForetreeBridgeMetatile(x, y); - CurrentMapDrawMetatileAt(x, y); - } - data[1] = 1; - break; + CurrentMapDrawMetatileAt(prevX, prevY); case 1: - x2 = data[2]; - y2 = data[3]; - if (x == x2 && y == y2) - break; - - isFortreeBridgeCur = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y)); - isFortreeBridgePrev = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x2, y2)); - z = PlayerGetZCoord(); - flag = 0; - if ((u8)(z & 1) == 0) - flag = 1; - - if (flag && (isFortreeBridgeCur == 1 || isFortreeBridgePrev == 1)) - PlaySE(SE_BRIDGE_WALK); - - if (isFortreeBridgePrev) - { - SetNormalFortreeBridgeMetatile(x2, y2); - CurrentMapDrawMetatileAt(x2, y2); - SetLoweredForetreeBridgeMetatile(x, y); - CurrentMapDrawMetatileAt(x, y); - } - - data[4] = x2; - data[5] = y2; - data[2] = x; - data[3] = y; - if (!isFortreeBridgePrev) - break; - - data[6] = 16; - data[1] = 2; - // fallthrough case 2: - data[6]--; - x2 = data[4]; - y2 = data[5]; - switch (data[6] % 7) - { - case 0: - CurrentMapDrawMetatileAt(x2, y2); - case 1: - case 2: - case 3: - break; - case 4: - SetLoweredForetreeBridgeMetatile(x2, y2); - CurrentMapDrawMetatileAt(x2, y2); - SetNormalFortreeBridgeMetatile(x2, y2); - case 5: - case 6: - case 7: - break; - } - if (data[6] == 0) - { - data[1] = 1; - } + case 3: break; + case 4: + // Bounce bridge section that player has stepped off of + TryLowerFortreeBridge(prevX, prevY); + CurrentMapDrawMetatileAt(prevX, prevY); + TryRaiseFortreeBridge(prevX, prevY); + case 5: + case 6: + case 7: // Not possible with % 7 + break; + } + if (tBounceTime == 0) + tState = 1; + break; } } +#undef tState +#undef tPrevX +#undef tPrevY +#undef tOldBridgeX +#undef tOldBridgeY +#undef tBounceTime + +// Boundaries of the ice puzzle in Sootopolis Gym +#define ICE_PUZZLE_L 3 +#define ICE_PUZZLE_R 13 +#define ICE_PUZZLE_T 6 +#define ICE_PUZZLE_B 19 + +#define ICE_PUZZLE_WIDTH (ICE_PUZZLE_R - ICE_PUZZLE_L + 1) +#define ICE_PUZZLE_HEIGHT (ICE_PUZZLE_B - ICE_PUZZLE_T + 1) + static bool32 CoordInIcePuzzleRegion(s16 x, s16 y) { - if ((u16)(x - 3) < 11 && (u16)(y - 6) < 14 && sSootopolisGymIceRowVars[y]) + if ((u16)(x - ICE_PUZZLE_L) < ICE_PUZZLE_WIDTH + && (u16)(y - ICE_PUZZLE_T) < ICE_PUZZLE_HEIGHT + && sSootopolisGymIceRowVars[y]) return TRUE; else return FALSE; @@ -503,17 +615,17 @@ static bool32 CoordInIcePuzzleRegion(s16 x, s16 y) static void MarkIcePuzzleCoordVisited(s16 x, s16 y) { if (CoordInIcePuzzleRegion(x, y)) - *GetVarPointer(sSootopolisGymIceRowVars[y]) |= (1 << (x - 3)); + *GetVarPointer(sSootopolisGymIceRowVars[y]) |= (1 << (x - ICE_PUZZLE_L)); } static bool32 IsIcePuzzleCoordVisited(s16 x, s16 y) { - u32 var; + u16 var; if (!CoordInIcePuzzleRegion(x, y)) return FALSE; - var = VarGet(sSootopolisGymIceRowVars[y]) << 16; - if ((0x10000 << (x - 3)) & var) // TODO: fix that if + var = VarGet(sSootopolisGymIceRowVars[y]); + if (var &= (1 << (x - ICE_PUZZLE_L))) return TRUE; else return FALSE; @@ -529,121 +641,160 @@ void SetSootopolisGymCrackedIceMetatiles(void) for (y = 0; y < height; y++) { if (IsIcePuzzleCoordVisited(x, y) == TRUE) - MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_SootopolisGym_Ice_Cracked); + MapGridSetMetatileIdAt(x + MAP_OFFSET, y + MAP_OFFSET, METATILE_SootopolisGym_Ice_Cracked); } } } +#define tState data[1] +#define tPrevX data[2] +#define tPrevY data[3] +#define tIceX data[4] +#define tIceY data[5] +#define tDelay data[6] + static void SootopolisGymIcePerStepCallback(u8 taskId) { s16 x, y; u16 tileBehavior; u16 *iceStepCount; s16 *data = gTasks[taskId].data; - switch (data[1]) + switch (tState) { - case 0: - PlayerGetDestCoords(&x, &y); - data[2] = x; - data[3] = y; - data[1] = 1; - break; - case 1: - PlayerGetDestCoords(&x, &y); - if (x != data[2] || y != data[3]) - { - data[2] = x; - data[3] = y; - tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - iceStepCount = GetVarPointer(VAR_ICE_STEP_COUNT); - if (MetatileBehavior_IsThinIce(tileBehavior) == TRUE) - { - (*iceStepCount)++; - data[6] = 4; - data[1] = 2; - data[4] = x; - data[5] = y; - } - else if (MetatileBehavior_IsCrackedIce(tileBehavior) == TRUE) - { - *iceStepCount = 0; - data[6] = 4; - data[1] = 3; - data[4] = x; - data[5] = y; - } - } - break; - case 2: - if (data[6] != 0) - { - data[6]--; - } - else - { - x = data[4]; - y = data[5]; - PlaySE(SE_ICE_CRACK); - MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Cracked); - CurrentMapDrawMetatileAt(x, y); - MarkIcePuzzleCoordVisited(x - 7, y - 7); - data[1] = 1; - } - break; - case 3: - if (data[6] != 0) - { - data[6]--; - } - else - { - x = data[4]; - y = data[5]; - PlaySE(SE_ICE_BREAK); - MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Broken); - CurrentMapDrawMetatileAt(x, y); - data[1] = 1; - } - break; + case 0: + PlayerGetDestCoords(&x, &y); + tPrevX = x; + tPrevY = y; + tState = 1; + break; + case 1: + PlayerGetDestCoords(&x, &y); + // End if player hasn't moved + if (x == tPrevX && y == tPrevY) + return; + + tPrevX = x; + tPrevY = y; + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + iceStepCount = GetVarPointer(VAR_ICE_STEP_COUNT); + if (MetatileBehavior_IsThinIce(tileBehavior) == TRUE) + { + // Thin ice, set it to cracked ice + (*iceStepCount)++; + tDelay = 4; + tState = 2; + tIceX = x; + tIceY = y; + } + else if (MetatileBehavior_IsCrackedIce(tileBehavior) == TRUE) + { + // Cracked ice, set it to broken ice + *iceStepCount = 0; + tDelay = 4; + tState = 3; + tIceX = x; + tIceY = y; + } + break; + case 2: + if (tDelay != 0) + { + tDelay--; + } + else + { + // Crack ice + x = tIceX; + y = tIceY; + PlaySE(SE_ICE_CRACK); + MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Cracked); + CurrentMapDrawMetatileAt(x, y); + MarkIcePuzzleCoordVisited(x - MAP_OFFSET, y - MAP_OFFSET); + tState = 1; + } + break; + case 3: + if (tDelay != 0) + { + tDelay--; + } + else + { + // Break ice + x = tIceX; + y = tIceY; + PlaySE(SE_ICE_BREAK); + MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Broken); + CurrentMapDrawMetatileAt(x, y); + tState = 1; + } + break; } } +#undef tState +#undef tPrevX +#undef tPrevY +#undef tIceX +#undef tIceY +#undef tDelay + +#define tPrevX data[1] +#define tPrevY data[2] + static void AshGrassPerStepCallback(u8 taskId) { s16 x, y; u16 *ashGatherCount; s16 *data = gTasks[taskId].data; PlayerGetDestCoords(&x, &y); - if (x != data[1] || y != data[2]) - { - data[1] = x; - data[2] = y; - if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y))) - { - if (MapGridGetMetatileIdAt(x, y) == METATILE_Fallarbor_AshGrass) - StartAshFieldEffect(x, y, METATILE_Fallarbor_NormalGrass, 4); - else - StartAshFieldEffect(x, y, METATILE_Lavaridge_NormalGrass, 4); - if (CheckBagHasItem(ITEM_SOOT_SACK, 1)) - { - ashGatherCount = GetVarPointer(VAR_ASH_GATHER_COUNT); - if (*ashGatherCount < 9999) - (*ashGatherCount)++; - } + // End if player hasn't moved + if (x == tPrevX && y == tPrevY) + return; + + tPrevX = x; + tPrevY = y; + if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y))) + { + // Remove ash from grass + if (MapGridGetMetatileIdAt(x, y) == METATILE_Fallarbor_AshGrass) + StartAshFieldEffect(x, y, METATILE_Fallarbor_NormalGrass, 4); + else + StartAshFieldEffect(x, y, METATILE_Lavaridge_NormalGrass, 4); + + // Try to gather ash + if (CheckBagHasItem(ITEM_SOOT_SACK, 1)) + { + ashGatherCount = GetVarPointer(VAR_ASH_GATHER_COUNT); + if (*ashGatherCount < 9999) + (*ashGatherCount)++; } } } +#undef tPrevX +#undef tPrevY + // This function uses the constants for gTileset_Cave's metatile labels, but other tilesets with // the CrackedFloorPerStepCallback callback use the same metatile numbers for the cracked floor // and hole metatiles, such as gTileset_MirageTower. static void SetCrackedFloorHoleMetatile(s16 x, s16 y) { - MapGridSetMetatileIdAt(x, y, MapGridGetMetatileIdAt(x, y) == METATILE_Cave_CrackedFloor ? METATILE_Cave_CrackedFloor_Hole : METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole); + u16 metatileId = MapGridGetMetatileIdAt(x, y) == METATILE_Cave_CrackedFloor ? METATILE_Cave_CrackedFloor_Hole : METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole; + MapGridSetMetatileIdAt(x, y, metatileId); CurrentMapDrawMetatileAt(x, y); } +#define tPrevX data[2] +#define tPrevY data[3] +#define tFloor1Delay data[4] +#define tFloor1X data[5] +#define tFloor1Y data[6] +#define tFloor2Delay data[7] +#define tFloor2X data[8] +#define tFloor2Y data[9] + static void CrackedFloorPerStepCallback(u8 taskId) { s16 x, y; @@ -651,113 +802,153 @@ static void CrackedFloorPerStepCallback(u8 taskId) s16 *data = gTasks[taskId].data; PlayerGetDestCoords(&x, &y); behavior = MapGridGetMetatileBehaviorAt(x, y); - if (data[4] != 0 && (--data[4]) == 0) - SetCrackedFloorHoleMetatile(data[5], data[6]); - if (data[7] != 0 && (--data[7]) == 0) - SetCrackedFloorHoleMetatile(data[8], data[9]); + // Update up to 2 previous cracked floor spaces + if (tFloor1Delay != 0 && (--tFloor1Delay) == 0) + SetCrackedFloorHoleMetatile(tFloor1X, tFloor1Y); + if (tFloor2Delay != 0 && (--tFloor2Delay) == 0) + SetCrackedFloorHoleMetatile(tFloor2X, tFloor2Y); if (MetatileBehavior_IsCrackedFloorHole(behavior)) VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty - if ((x != data[2] || y != data[3])) - { - data[2] = x; - data[3] = y; - if (MetatileBehavior_IsCrackedFloor(behavior)) - { - if (GetPlayerSpeed() != 4) - VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty + // End if player hasn't moved + if (x == tPrevX && y == tPrevY) + return; - if (data[4] == 0) - { - data[4] = 3; - data[5] = x; - data[6] = y; - } - else if (data[7] == 0) - { - data[7] = 3; - data[8] = x; - data[9] = y; - } + tPrevX = x; + tPrevY = y; + if (MetatileBehavior_IsCrackedFloor(behavior)) + { + if (GetPlayerSpeed() != PLAYER_SPEED_FASTEST) + VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty + + if (tFloor1Delay == 0) + { + tFloor1Delay = 3; + tFloor1X = x; + tFloor1Y = y; + } + else if (tFloor2Delay == 0) + { + tFloor2Delay = 3; + tFloor2X = x; + tFloor2Y = y; } } } +#undef tPrevX +#undef tPrevY +#undef tFloor1Delay +#undef tFloor1X +#undef tFloor1Y +#undef tFloor2Delay +#undef tFloor2X +#undef tFloor2Y + +#define tMapId data[0] +#define tState data[1] +#define tPrevX data[2] +#define tPrevY data[3] +// data[4] - data[15] are data about up to 4 individual animating muddy slope metatiles +// They're divided into groups of 3, i.e data[4]-[6] track one metatile, data[7]-[9] another, and so on. +// For each data triplet, the 1sst is the animation time, and the 2nd/3rd are the x/y coordinates. +#define SLOPE_DATA_START 4 +#define SLOPE_DATA_END (3 * SLOPE_DATA_SIZE + SLOPE_DATA_START) // 13, which is the last slope data start point +enum { + SLOPE_TIME, + SLOPE_X, + SLOPE_Y, + SLOPE_DATA_SIZE +}; +#define tSlopeAnimTime(i) data[(i) * SLOPE_DATA_SIZE + SLOPE_DATA_START + SLOPE_TIME] + +static const u16 sMuddySlopeMetatiles[] = { + METATILE_General_MuddySlope_Frame0, + METATILE_General_MuddySlope_Frame3, + METATILE_General_MuddySlope_Frame2, + METATILE_General_MuddySlope_Frame1 +}; + +#define SLOPE_ANIM_TIME 32 +#define SLOPE_ANIM_STEP_TIME (SLOPE_ANIM_TIME / (int)ARRAY_COUNT(sMuddySlopeMetatiles)) + static void SetMuddySlopeMetatile(s16 *data, s16 x, s16 y) { - u16 tile; - if ((--data[0]) == 0) - tile = 0xe8; + u16 metatileId; + if ((--data[SLOPE_TIME]) == 0) + metatileId = METATILE_General_MuddySlope_Frame0; else - tile = sMuddySlopeMetatiles[data[0] / 8]; + metatileId = sMuddySlopeMetatiles[data[SLOPE_TIME] / SLOPE_ANIM_STEP_TIME]; - MapGridSetMetatileIdAt(x, y, tile); + MapGridSetMetatileIdAt(x, y, metatileId); CurrentMapDrawMetatileAt(x, y); MapGridSetMetatileIdAt(x, y, METATILE_General_MuddySlope_Frame0); } static void Task_MuddySlope(u8 taskId) { - s16 x, y, x2, y2; + s16 x, y, cameraOffsetX, cameraOffsetY; int i; u16 mapId; s16 *data = gTasks[taskId].data; PlayerGetDestCoords(&x, &y); mapId = (gSaveBlock1Ptr->location.mapGroup << 8) | gSaveBlock1Ptr->location.mapNum; - switch (data[1]) + switch (tState) { - case 0: - data[0] = mapId; - data[2] = x; - data[3] = y; - data[1] = 1; - data[4] = 0; - data[7] = 0; - data[10] = 0; - data[13] = 0; + case 0: + tMapId = mapId; + tPrevX = x; + tPrevY = y; + tState = 1; + tSlopeAnimTime(0) = 0; + tSlopeAnimTime(1) = 0; + tSlopeAnimTime(2) = 0; + tSlopeAnimTime(3) = 0; + break; + case 1: + // Skip if player hasn't moved + if (tPrevX == x && tPrevY == y) break; - case 1: - if (data[2] != x || data[3] != y) + + tPrevX = x; + tPrevY = y; + if (MetatileBehavior_IsMuddySlope(MapGridGetMetatileBehaviorAt(x, y))) + { + for (i = SLOPE_DATA_START; i <= SLOPE_DATA_END; i += SLOPE_DATA_SIZE) { - data[2] = x; - data[3] = y; - if (MetatileBehavior_IsMuddySlope(MapGridGetMetatileBehaviorAt(x, y))) + if (data[i] == 0) { - for (i = 4; i < 14; i += 3) - { - if (data[i] == 0) - { - data[i] = 32; - data[i + 1] = x; - data[i + 2] = y; - break; - } - } + data[i + SLOPE_TIME] = SLOPE_ANIM_TIME; + data[i + SLOPE_X] = x; + data[i + SLOPE_Y] = y; + break; } } - break; + } + break; } - if (gCamera.active && mapId != data[0]) + + if (gCamera.active && mapId != tMapId) { - data[0] = mapId; - x2 = gCamera.x; - y2 = gCamera.y; + tMapId = mapId; + cameraOffsetX = gCamera.x; + cameraOffsetY = gCamera.y; } else { - x2 = 0; - y2 = 0; + cameraOffsetX = 0; + cameraOffsetY = 0; } - for (i = 4; i < 14; i += 3) + for (i = SLOPE_DATA_START; i <= SLOPE_DATA_END; i += SLOPE_DATA_SIZE) { - if (data[i]) + if (data[i + SLOPE_TIME]) { - data[i + 1] -= x2; - data[i + 2] -= y2; - SetMuddySlopeMetatile(&data[i], data[i + 1], data[i + 2]); + data[i + SLOPE_X] -= cameraOffsetX; + data[i + SLOPE_Y] -= cameraOffsetY; + SetMuddySlopeMetatile(&data[i + SLOPE_TIME], data[i + SLOPE_X], data[i + SLOPE_Y]); } } } diff --git a/src/field_weather.c b/src/field_weather.c index 4b9c6a8630..f7a7f81291 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -72,7 +72,7 @@ static const u8 *sPaletteGammaTypes; // The drought weather effect uses a precalculated color lookup table. Presumably this // is because the underlying color shift calculation is slow. -const u16 sDroughtWeatherColors[][0x1000] = { +static const u16 sDroughtWeatherColors[][0x1000] = { INCBIN_U16("graphics/weather/drought/colors_0.bin"), INCBIN_U16("graphics/weather/drought/colors_1.bin"), INCBIN_U16("graphics/weather/drought/colors_2.bin"), @@ -110,8 +110,8 @@ void (*const gWeatherPalStateFuncs[])(void) = { [WEATHER_PAL_STATE_CHANGING_WEATHER] = UpdateWeatherGammaShift, [WEATHER_PAL_STATE_SCREEN_FADING_IN] = FadeInScreenWithWeather, - [WEATHER_PAL_STATE_SCREEN_FADING_OUT] = DoNothing, - [WEATHER_PAL_STATE_IDLE] = DoNothing, + [WEATHER_PAL_STATE_SCREEN_FADING_OUT] = DoNothing, + [WEATHER_PAL_STATE_IDLE] = DoNothing, }; // This table specifies which of the gamma shift tables should be @@ -719,7 +719,7 @@ void ApplyWeatherGammaShiftIfIdle(s8 gammaIndex) } } -void sub_80ABC7C(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay) +void ApplyWeatherGammaShiftIfIdle_Gradual(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay) { if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE) { @@ -779,7 +779,7 @@ void FadeScreen(u8 mode, s8 delay) if (fadeOut) { if (useWeatherPal) - CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); BeginNormalPaletteFade(PALETTES_ALL, delay, 0, 16, fadeColor); gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT; @@ -863,10 +863,10 @@ void LoadCustomWeatherSpritePalette(const u16 *palette) UpdateSpritePaletteWithWeather(gWeatherPtr->weatherPicSpritePalIndex); } -static void LoadDroughtWeatherPalette(u8 *gammaIndexPtr, u8 *a1) +static void LoadDroughtWeatherPalette(u8 *palsIndex, u8 *palsOffset) { - *gammaIndexPtr = 0x20; - *a1 = 0x20; + *palsIndex = 0x20; + *palsOffset = 0x20; } void ResetDroughtWeatherPaletteLoading(void) diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index 0c3256ab75..820628ff83 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle_anim.h" #include "event_object_movement.h" +#include "fieldmap.h" #include "field_weather.h" #include "overworld.h" #include "random.h" @@ -13,11 +14,9 @@ #include "trig.h" #include "gpu_regs.h" -// EWRAM -EWRAM_DATA static u8 gCurrentAbnormalWeather = 0; -EWRAM_DATA static u16 gUnusedWeatherRelated = 0; +EWRAM_DATA static u8 sCurrentAbnormalWeather = 0; +EWRAM_DATA static u16 sUnusedWeatherRelated = 0; -// CONST const u16 gCloudsWeatherPalette[] = INCBIN_U16("graphics/weather/cloud.gbapal"); const u16 gSandstormWeatherPalette[] = INCBIN_U16("graphics/weather/sandstorm.gbapal"); const u8 gWeatherFogDiagonalTiles[] = INCBIN_U8("graphics/weather/fog_diagonal.4bpp"); @@ -59,7 +58,7 @@ static const struct OamData sCloudSpriteOamData = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -189,7 +188,7 @@ static void CreateCloudSprites(void) { gWeatherPtr->sprites.s1.cloudSprites[i] = &gSprites[spriteId]; sprite = gWeatherPtr->sprites.s1.cloudSprites[i]; - SetSpritePosToMapCoords(sCloudSpriteMapCoords[i].x + 7, sCloudSpriteMapCoords[i].y + 7, &sprite->x, &sprite->y); + SetSpritePosToMapCoords(sCloudSpriteMapCoords[i].x + MAP_OFFSET, sCloudSpriteMapCoords[i].y + MAP_OFFSET, &sprite->x, &sprite->y); sprite->coordOffsetEnabled = TRUE; } else @@ -340,7 +339,7 @@ static void UpdateDroughtBlend(u8 taskId) task->tState++; break; case 4: - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); break; } @@ -394,7 +393,7 @@ static const struct OamData sRainSpriteOamData = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), .x = 0, @@ -840,7 +839,7 @@ static const struct OamData sSnowflakeSpriteOamData = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -878,7 +877,7 @@ static const union AnimCmd *const sSnowflakeAnimCmds[] = static const struct SpriteTemplate sSnowflakeSpriteTemplate = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = PALTAG_WEATHER, .oam = &sSnowflakeSpriteOamData, .anims = sSnowflakeAnimCmds, @@ -1180,7 +1179,7 @@ void Thunderstorm_Main(void) case TSTORM_STATE_FADE_THUNDER_LONG: if (--gWeatherPtr->thunderDelay == 0) { - sub_80ABC7C(19, 3, 5); + ApplyWeatherGammaShiftIfIdle_Gradual(19, 3, 5); gWeatherPtr->initStep++; } break; @@ -1273,7 +1272,7 @@ static const struct OamData sOamData_FogH = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -1814,7 +1813,7 @@ static void UpdateFogDiagonalMovement(void) gWeatherPtr->fogDPosY = gSpriteCoordOffsetY + gWeatherPtr->fogDYOffset; } -static const struct SpriteSheet gFogDiagonalSpriteSheet = +static const struct SpriteSheet sFogDiagonalSpriteSheet = { .data = gWeatherFogDiagonalTiles, .size = sizeof(gWeatherFogDiagonalTiles), @@ -1869,7 +1868,7 @@ static void CreateFogDiagonalSprites(void) if (!gWeatherPtr->fogDSpritesCreated) { - fogDiagonalSpriteSheet = gFogDiagonalSpriteSheet; + fogDiagonalSpriteSheet = sFogDiagonalSpriteSheet; LoadSpriteSheet(&fogDiagonalSpriteSheet); for (i = 0; i < NUM_FOG_DIAGONAL_SPRITES; i++) { @@ -2426,34 +2425,39 @@ static void UpdateBubbleSprite(struct Sprite *sprite) //------------------------------------------------------------------------------ // Unused function. -static void UnusedSetCurrentAbnormalWeather(u32 a0, u32 a1) +static void UnusedSetCurrentAbnormalWeather(u32 weather, u32 unknown) { - gCurrentAbnormalWeather = a0; - gUnusedWeatherRelated = a1; + sCurrentAbnormalWeather = weather; + sUnusedWeatherRelated = unknown; } +#define tState data[0] +#define tWeatherA data[1] +#define tWeatherB data[2] +#define tDelay data[15] + static void Task_DoAbnormalWeather(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: - if (data[15]-- <= 0) + if (tDelay-- <= 0) { - SetNextWeather(data[1]); - gCurrentAbnormalWeather = data[1]; - data[15] = 600; - data[0]++; + SetNextWeather(tWeatherA); + sCurrentAbnormalWeather = tWeatherA; + tDelay = 600; + tState++; } break; case 1: - if (data[15]-- <= 0) + if (tDelay-- <= 0) { - SetNextWeather(data[2]); - gCurrentAbnormalWeather = data[2]; - data[15] = 600; - data[0] = 0; + SetNextWeather(tWeatherB); + sCurrentAbnormalWeather = tWeatherB; + tDelay = 600; + tState = 0; } break; } @@ -2464,41 +2468,49 @@ static void CreateAbnormalWeatherTask(void) u8 taskId = CreateTask(Task_DoAbnormalWeather, 0); s16 *data = gTasks[taskId].data; - data[15] = 600; - if (gCurrentAbnormalWeather == WEATHER_DOWNPOUR) + tDelay = 600; + if (sCurrentAbnormalWeather == WEATHER_DOWNPOUR) { - data[1] = WEATHER_DROUGHT; - data[2] = WEATHER_DOWNPOUR; + // Currently Downpour, next will be Drought + tWeatherA = WEATHER_DROUGHT; + tWeatherB = WEATHER_DOWNPOUR; } - else if (gCurrentAbnormalWeather == WEATHER_DROUGHT) + else if (sCurrentAbnormalWeather == WEATHER_DROUGHT) { - data[1] = WEATHER_DOWNPOUR; - data[2] = WEATHER_DROUGHT; + // Currently Drought, next will be Downpour + tWeatherA = WEATHER_DOWNPOUR; + tWeatherB = WEATHER_DROUGHT; } else { - gCurrentAbnormalWeather = WEATHER_DOWNPOUR; - data[1] = WEATHER_DROUGHT; - data[2] = WEATHER_DOWNPOUR; + // Default to starting with Downpour + sCurrentAbnormalWeather = WEATHER_DOWNPOUR; + tWeatherA = WEATHER_DROUGHT; + tWeatherB = WEATHER_DOWNPOUR; } } +#undef tState +#undef tWeatherA +#undef tWeatherB +#undef tDelay + static u8 TranslateWeatherNum(u8); static void UpdateRainCounter(u8, u8); -void SetSav1Weather(u32 weather) +void SetSavedWeather(u32 weather) { u8 oldWeather = gSaveBlock1Ptr->weather; gSaveBlock1Ptr->weather = TranslateWeatherNum(weather); UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather); } -u8 GetSav1Weather(void) +u8 GetSavedWeather(void) { return gSaveBlock1Ptr->weather; } -void SetSav1WeatherFromCurrMapHeader(void) +void SetSavedWeatherFromCurrMapHeader(void) { u8 oldWeather = gSaveBlock1Ptr->weather; gSaveBlock1Ptr->weather = TranslateWeatherNum(gMapHeader.weather); @@ -2507,50 +2519,50 @@ void SetSav1WeatherFromCurrMapHeader(void) void SetWeather(u32 weather) { - SetSav1Weather(weather); - SetNextWeather(GetSav1Weather()); + SetSavedWeather(weather); + SetNextWeather(GetSavedWeather()); } void SetWeather_Unused(u32 weather) { - SetSav1Weather(weather); - SetCurrentAndNextWeather(GetSav1Weather()); + SetSavedWeather(weather); + SetCurrentAndNextWeather(GetSavedWeather()); } void DoCurrentWeather(void) { - u8 weather = GetSav1Weather(); + u8 weather = GetSavedWeather(); if (weather == WEATHER_ABNORMAL) { if (!FuncIsActiveTask(Task_DoAbnormalWeather)) CreateAbnormalWeatherTask(); - weather = gCurrentAbnormalWeather; + weather = sCurrentAbnormalWeather; } else { if (FuncIsActiveTask(Task_DoAbnormalWeather)) DestroyTask(FindTaskIdByFunc(Task_DoAbnormalWeather)); - gCurrentAbnormalWeather = WEATHER_DOWNPOUR; + sCurrentAbnormalWeather = WEATHER_DOWNPOUR; } SetNextWeather(weather); } void ResumePausedWeather(void) { - u8 weather = GetSav1Weather(); + u8 weather = GetSavedWeather(); if (weather == WEATHER_ABNORMAL) { if (!FuncIsActiveTask(Task_DoAbnormalWeather)) CreateAbnormalWeatherTask(); - weather = gCurrentAbnormalWeather; + weather = sCurrentAbnormalWeather; } else { if (FuncIsActiveTask(Task_DoAbnormalWeather)) DestroyTask(FindTaskIdByFunc(Task_DoAbnormalWeather)); - gCurrentAbnormalWeather = WEATHER_DOWNPOUR; + sCurrentAbnormalWeather = WEATHER_DOWNPOUR; } SetCurrentAndNextWeather(weather); } diff --git a/src/fieldmap.c b/src/fieldmap.c index e437ea7fc2..2b981dc6e5 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -25,10 +25,10 @@ struct ConnectionFlags u8 east:1; }; -EWRAM_DATA static u16 gBackupMapData[MAX_MAP_DATA_SIZE] = {0}; +EWRAM_DATA static u16 sBackupMapData[MAX_MAP_DATA_SIZE] = {0}; EWRAM_DATA struct MapHeader gMapHeader = {0}; EWRAM_DATA struct Camera gCamera = {0}; -EWRAM_DATA static struct ConnectionFlags gMapConnectionFlags = {0}; +EWRAM_DATA static struct ConnectionFlags sMapConnectionFlags = {0}; EWRAM_DATA static u32 sFiller = 0; // without this, the next file won't align properly struct BackupMapLayout gBackupMapLayout; @@ -43,12 +43,12 @@ static void FillWestConnection(struct MapHeader const *mapHeader, struct MapHead static void FillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader); static void LoadSavedMapView(void); -static bool8 SkipCopyingMetatileFromSavedMap(u16* mapMetatilePtr, u16 mapWidth, u8 yMode); +static bool8 SkipCopyingMetatileFromSavedMap(u16 *mapBlock, u16 mapWidth, u8 yMode); static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y); static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, struct MapConnection *connection); static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, int offset); -#define MapGridGetBorderTileAt(x, y) ({ \ +#define GetBorderBlockAt(x, y)({ \ u16 block; \ int i; \ u16 *border = gMapHeader.mapLayout->border; \ @@ -56,12 +56,12 @@ static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, i = (x + 1) & 1; \ i += ((y + 1) & 1) * 2; \ \ - block = gMapHeader.mapLayout->border[i] | METATILE_COLLISION_MASK; \ + block = gMapHeader.mapLayout->border[i] | MAPGRID_COLLISION_MASK; \ }) #define AreCoordsWithinMapGridBounds(x, y) (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height) -#define MapGridGetTileAt(x, y) (AreCoordsWithinMapGridBounds(x, y) ? gBackupMapLayout.map[x + gBackupMapLayout.width * y] : MapGridGetBorderTileAt(x, y)) +#define GetMapGridBlockAt(x, y) (AreCoordsWithinMapGridBounds(x, y) ? gBackupMapLayout.map[x + gBackupMapLayout.width * y] : GetBorderBlockAt(x, y)) struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection) { @@ -87,14 +87,14 @@ void InitMapFromSavedGame(void) void InitBattlePyramidMap(bool8 setPlayerPosition) { - CpuFastFill(METATILE_ID_UNDEFINED << 16 | METATILE_ID_UNDEFINED, gBackupMapData, sizeof(gBackupMapData)); - GenerateBattlePyramidFloorLayout(gBackupMapData, setPlayerPosition); + CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData)); + GenerateBattlePyramidFloorLayout(sBackupMapData, setPlayerPosition); } void InitTrainerHillMap(void) { - CpuFastFill(METATILE_ID_UNDEFINED << 16 | METATILE_ID_UNDEFINED, gBackupMapData, sizeof(gBackupMapData)); - GenerateTrainerHillFloorLayout(gBackupMapData); + CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData)); + GenerateTrainerHillFloorLayout(sBackupMapData); } static void InitMapLayoutData(struct MapHeader *mapHeader) @@ -103,11 +103,11 @@ static void InitMapLayoutData(struct MapHeader *mapHeader) int width; int height; mapLayout = mapHeader->mapLayout; - CpuFastFill16(METATILE_ID_UNDEFINED, gBackupMapData, sizeof(gBackupMapData)); - gBackupMapLayout.map = gBackupMapData; - width = mapLayout->width + 15; + CpuFastFill16(MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData)); + gBackupMapLayout.map = sBackupMapData; + width = mapLayout->width + MAP_OFFSET_W; gBackupMapLayout.width = width; - height = mapLayout->height + 14; + height = mapLayout->height + MAP_OFFSET_H; gBackupMapLayout.height = height; if (width * height <= MAX_MAP_DATA_SIZE) { @@ -121,11 +121,11 @@ static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height) u16 *dest; int y; dest = gBackupMapLayout.map; - dest += gBackupMapLayout.width * 7 + 7; + dest += gBackupMapLayout.width * 7 + MAP_OFFSET; for (y = 0; y < height; y++) { CpuCopy16(map, dest, width * 2); - dest += width + 15; + dest += width + MAP_OFFSET_W; map += width; } } @@ -140,7 +140,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) { count = mapHeader->connections->count; connection = mapHeader->connections->connections; - gMapConnectionFlags = sDummyConnectionFlags; + sMapConnectionFlags = sDummyConnectionFlags; for (i = 0; i < count; i++, connection++) { struct MapHeader const *cMap = GetMapHeaderFromConnection(connection); @@ -149,19 +149,19 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) { case CONNECTION_SOUTH: FillSouthConnection(mapHeader, cMap, offset); - gMapConnectionFlags.south = TRUE; + sMapConnectionFlags.south = TRUE; break; case CONNECTION_NORTH: FillNorthConnection(mapHeader, cMap, offset); - gMapConnectionFlags.north = TRUE; + sMapConnectionFlags.north = TRUE; break; case CONNECTION_WEST: FillWestConnection(mapHeader, cMap, offset); - gMapConnectionFlags.west = TRUE; + sMapConnectionFlags.west = TRUE; break; case CONNECTION_EAST: FillEastConnection(mapHeader, cMap, offset); - gMapConnectionFlags.east = TRUE; + sMapConnectionFlags.east = TRUE; break; } } @@ -197,8 +197,8 @@ static void FillSouthConnection(struct MapHeader const *mapHeader, struct MapHea if (connectedMapHeader) { cWidth = connectedMapHeader->mapLayout->width; - x = offset + 7; - y = mapHeader->mapLayout->height + 7; + x = offset + MAP_OFFSET; + y = mapHeader->mapLayout->height + MAP_OFFSET; if (x < 0) { x2 = -x; @@ -222,7 +222,7 @@ static void FillSouthConnection(struct MapHeader const *mapHeader, struct MapHea x, y, connectedMapHeader, x2, /*y2*/ 0, - width, /*height*/ 7); + width, /*height*/ MAP_OFFSET); } } @@ -237,8 +237,8 @@ static void FillNorthConnection(struct MapHeader const *mapHeader, struct MapHea { cWidth = connectedMapHeader->mapLayout->width; cHeight = connectedMapHeader->mapLayout->height; - x = offset + 7; - y2 = cHeight - 7; + x = offset + MAP_OFFSET; + y2 = cHeight - MAP_OFFSET; if (x < 0) { x2 = -x; @@ -262,7 +262,7 @@ static void FillNorthConnection(struct MapHeader const *mapHeader, struct MapHea x, /*y*/ 0, connectedMapHeader, x2, y2, - width, /*height*/ 7); + width, /*height*/ MAP_OFFSET); } } @@ -277,8 +277,8 @@ static void FillWestConnection(struct MapHeader const *mapHeader, struct MapHead { cWidth = connectedMapHeader->mapLayout->width; cHeight = connectedMapHeader->mapLayout->height; - y = offset + 7; - x2 = cWidth - 7; + y = offset + MAP_OFFSET; + x2 = cWidth - MAP_OFFSET; if (y < 0) { y2 = -y; @@ -301,7 +301,7 @@ static void FillWestConnection(struct MapHeader const *mapHeader, struct MapHead /*x*/ 0, y, connectedMapHeader, x2, y2, - /*width*/ 7, height); + /*width*/ MAP_OFFSET, height); } } @@ -314,8 +314,8 @@ static void FillEastConnection(struct MapHeader const *mapHeader, struct MapHead if (connectedMapHeader) { cHeight = connectedMapHeader->mapLayout->height; - x = mapHeader->mapLayout->width + 7; - y = offset + 7; + x = mapHeader->mapLayout->width + MAP_OFFSET; + y = offset + MAP_OFFSET; if (y < 0) { y2 = -y; @@ -338,50 +338,50 @@ static void FillEastConnection(struct MapHeader const *mapHeader, struct MapHead x, y, connectedMapHeader, /*x2*/ 0, y2, - /*width*/ 8, height); + /*width*/ MAP_OFFSET + 1, height); } } -u8 MapGridGetZCoordAt(int x, int y) +u8 MapGridGetElevationAt(int x, int y) { - u16 block = MapGridGetTileAt(x, y); + u16 block = GetMapGridBlockAt(x, y); - if (block == METATILE_ID_UNDEFINED) + if (block == MAPGRID_UNDEFINED) return 0; - return block >> METATILE_ELEVATION_SHIFT; + return block >> MAPGRID_ELEVATION_SHIFT; } -bool8 MapGridIsImpassableAt(int x, int y) +u8 MapGridGetCollisionAt(int x, int y) { - u16 block = MapGridGetTileAt(x, y); + u16 block = GetMapGridBlockAt(x, y); - if (block == METATILE_ID_UNDEFINED) + if (block == MAPGRID_UNDEFINED) return TRUE; - return (block & METATILE_COLLISION_MASK) >> METATILE_COLLISION_SHIFT; + return (block & MAPGRID_COLLISION_MASK) >> MAPGRID_COLLISION_SHIFT; } u32 MapGridGetMetatileIdAt(int x, int y) { - u16 block = MapGridGetTileAt(x, y); + u16 block = GetMapGridBlockAt(x, y); - if (block == METATILE_ID_UNDEFINED) - return MapGridGetBorderTileAt(x, y) & METATILE_ID_MASK; + if (block == MAPGRID_UNDEFINED) + return GetBorderBlockAt(x, y) & MAPGRID_METATILE_ID_MASK; - return block & METATILE_ID_MASK; + return block & MAPGRID_METATILE_ID_MASK; } u32 MapGridGetMetatileBehaviorAt(int x, int y) { u16 metatile = MapGridGetMetatileIdAt(x, y); - return GetBehaviorByMetatileId(metatile) & METATILE_BEHAVIOR_MASK; + return GetMetatileAttributesById(metatile) & METATILE_ATTR_BEHAVIOR_MASK; } u8 MapGridGetMetatileLayerTypeAt(int x, int y) { u16 metatile = MapGridGetMetatileIdAt(x, y); - return (GetBehaviorByMetatileId(metatile) & METATILE_ELEVATION_MASK) >> METATILE_ELEVATION_SHIFT; + return (GetMetatileAttributesById(metatile) & METATILE_ATTR_LAYER_MASK) >> METATILE_ATTR_LAYER_SHIFT; } void MapGridSetMetatileIdAt(int x, int y, u16 metatile) @@ -390,7 +390,7 @@ void MapGridSetMetatileIdAt(int x, int y, u16 metatile) if (AreCoordsWithinMapGridBounds(x, y)) { i = x + y * gBackupMapLayout.width; - gBackupMapLayout.map[i] = (gBackupMapLayout.map[i] & METATILE_ELEVATION_MASK) | (metatile & ~METATILE_ELEVATION_MASK); + gBackupMapLayout.map[i] = (gBackupMapLayout.map[i] & MAPGRID_ELEVATION_MASK) | (metatile & ~MAPGRID_ELEVATION_MASK); } } @@ -404,7 +404,7 @@ void MapGridSetMetatileEntryAt(int x, int y, u16 metatile) } } -u16 GetBehaviorByMetatileId(u16 metatile) +u16 GetMetatileAttributesById(u16 metatile) { u16 *attributes; if (metatile < NUM_METATILES_IN_PRIMARY) @@ -433,10 +433,10 @@ void SaveMapView(void) width = gBackupMapLayout.width; x = gSaveBlock1Ptr->pos.x; y = gSaveBlock1Ptr->pos.y; - for (i = y; i < y + 14; i++) + for (i = y; i < y + MAP_OFFSET_H; i++) { - for (j = x; j < x + 15; j++) - *mapView++ = gBackupMapData[width * i + j]; + for (j = x; j < x + MAP_OFFSET_W; j++) + *mapView++ = sBackupMapData[width * i + j]; } } @@ -480,28 +480,28 @@ static void LoadSavedMapView(void) width = gBackupMapLayout.width; x = gSaveBlock1Ptr->pos.x; y = gSaveBlock1Ptr->pos.y; - for (i = y; i < y + 14; i++) + for (i = y; i < y + MAP_OFFSET_H; i++) { if (i == y && i != 0) yMode = 0; - else if (i == y + 13 && i != gMapHeader.mapLayout->height - 1) + else if (i == y + MAP_OFFSET_H - 1 && i != gMapHeader.mapLayout->height - 1) yMode = 1; else yMode = 0xFF; - for (j = x; j < x + 15; j++) + for (j = x; j < x + MAP_OFFSET_W; j++) { - if (!SkipCopyingMetatileFromSavedMap(&gBackupMapData[j + width * i], width, yMode)) - gBackupMapData[j + width * i] = *mapView; + if (!SkipCopyingMetatileFromSavedMap(&sBackupMapData[j + width * i], width, yMode)) + sBackupMapData[j + width * i] = *mapView; mapView++; } } - for (j = x; j < x + 15; j++) + for (j = x; j < x + MAP_OFFSET_W; j++) { if (y != 0) FixLongGrassMetatilesWindowTop(j, y - 1); if (i < gMapHeader.mapLayout->height - 1) - FixLongGrassMetatilesWindowBottom(j, y + 13); + FixLongGrassMetatilesWindowBottom(j, y + MAP_OFFSET_H - 1); } ClearSavedMapView(); } @@ -524,25 +524,25 @@ static void MoveMapViewToBackup(u8 direction) r8 = 0; x0 = gSaveBlock1Ptr->pos.x; y0 = gSaveBlock1Ptr->pos.y; - x2 = 15; - y2 = 14; + x2 = MAP_OFFSET_W; + y2 = MAP_OFFSET_H; switch (direction) { case CONNECTION_NORTH: y0 += 1; - y2 = 13; + y2 = MAP_OFFSET_H - 1; break; case CONNECTION_SOUTH: r8 = 1; - y2 = 13; + y2 = MAP_OFFSET_H - 1; break; case CONNECTION_WEST: x0 += 1; - x2 = 14; + x2 = MAP_OFFSET_W - 1; break; case CONNECTION_EAST: r9 = 1; - x2 = 14; + x2 = MAP_OFFSET_W - 1; break; } for (y = 0; y < y2; y++) @@ -552,9 +552,9 @@ static void MoveMapViewToBackup(u8 direction) for (x = 0; x < x2; x++) { desti = width * (y + y0); - srci = (y + r8) * 15 + r9; + srci = (y + r8) * MAP_OFFSET_W + r9; src = &mapView[srci + i]; - dest = &gBackupMapData[x0 + desti + j]; + dest = &sBackupMapData[x0 + desti + j]; *dest = *src; i++; j++; @@ -565,33 +565,33 @@ static void MoveMapViewToBackup(u8 direction) int GetMapBorderIdAt(int x, int y) { - if (MapGridGetTileAt(x, y) == METATILE_ID_UNDEFINED) + if (GetMapGridBlockAt(x, y) == MAPGRID_UNDEFINED) return CONNECTION_INVALID; - if (x >= (gBackupMapLayout.width - 8)) + if (x >= (gBackupMapLayout.width - (MAP_OFFSET + 1))) { - if (!gMapConnectionFlags.east) + if (!sMapConnectionFlags.east) return CONNECTION_INVALID; return CONNECTION_EAST; } - else if (x < 7) + else if (x < MAP_OFFSET) { - if (!gMapConnectionFlags.west) + if (!sMapConnectionFlags.west) return CONNECTION_INVALID; return CONNECTION_WEST; } - else if (y >= (gBackupMapLayout.height - 7)) + else if (y >= (gBackupMapLayout.height - MAP_OFFSET)) { - if (!gMapConnectionFlags.south) + if (!sMapConnectionFlags.south) return CONNECTION_INVALID; return CONNECTION_SOUTH; } - else if (y < 7) + else if (y < MAP_OFFSET) { - if (!gMapConnectionFlags.north) + if (!sMapConnectionFlags.north) return CONNECTION_INVALID; return CONNECTION_NORTH; @@ -604,14 +604,14 @@ int GetMapBorderIdAt(int x, int y) int GetPostCameraMoveMapBorderId(int x, int y) { - return GetMapBorderIdAt(gSaveBlock1Ptr->pos.x + 7 + x, gSaveBlock1Ptr->pos.y + 7 + y); + return GetMapBorderIdAt(gSaveBlock1Ptr->pos.x + MAP_OFFSET + x, gSaveBlock1Ptr->pos.y + MAP_OFFSET + y); } bool32 CanCameraMoveInDirection(int direction) { int x, y; - x = gSaveBlock1Ptr->pos.x + 7 + gDirectionToVectors[direction].x; - y = gSaveBlock1Ptr->pos.y + 7 + gDirectionToVectors[direction].y; + x = gSaveBlock1Ptr->pos.x + MAP_OFFSET + gDirectionToVectors[direction].x; + y = gSaveBlock1Ptr->pos.y + MAP_OFFSET + gDirectionToVectors[direction].y; if (GetMapBorderIdAt(x, y) == CONNECTION_INVALID) return FALSE; @@ -771,14 +771,14 @@ struct MapConnection *GetConnectionAtCoords(s16 x, s16 y) { direction = connection->direction; if ((direction == CONNECTION_DIVE || direction == CONNECTION_EMERGE) - || (direction == CONNECTION_NORTH && y > 6) - || (direction == CONNECTION_SOUTH && y < gMapHeader.mapLayout->height + 7) - || (direction == CONNECTION_WEST && x > 6) - || (direction == CONNECTION_EAST && x < gMapHeader.mapLayout->width + 7)) + || (direction == CONNECTION_NORTH && y > MAP_OFFSET - 1) + || (direction == CONNECTION_SOUTH && y < gMapHeader.mapLayout->height + MAP_OFFSET) + || (direction == CONNECTION_WEST && x > MAP_OFFSET - 1) + || (direction == CONNECTION_EAST && x < gMapHeader.mapLayout->width + MAP_OFFSET)) { continue; } - if (IsPosInConnectingMap(connection, x - 7, y - 7) == TRUE) + if (IsPosInConnectingMap(connection, x - MAP_OFFSET, y - MAP_OFFSET) == TRUE) { return connection; } @@ -789,14 +789,14 @@ struct MapConnection *GetConnectionAtCoords(s16 x, s16 y) void SetCameraFocusCoords(u16 x, u16 y) { - gSaveBlock1Ptr->pos.x = x - 7; - gSaveBlock1Ptr->pos.y = y - 7; + gSaveBlock1Ptr->pos.x = x - MAP_OFFSET; + gSaveBlock1Ptr->pos.y = y - MAP_OFFSET; } void GetCameraFocusCoords(u16 *x, u16 *y) { - *x = gSaveBlock1Ptr->pos.x + 7; - *y = gSaveBlock1Ptr->pos.y + 7; + *x = gSaveBlock1Ptr->pos.x + MAP_OFFSET; + *y = gSaveBlock1Ptr->pos.y + MAP_OFFSET; } // Unused @@ -817,23 +817,23 @@ void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable) if (AreCoordsWithinMapGridBounds(x, y)) { if (impassable) - gBackupMapLayout.map[x + gBackupMapLayout.width * y] |= METATILE_COLLISION_MASK; + gBackupMapLayout.map[x + gBackupMapLayout.width * y] |= MAPGRID_COLLISION_MASK; else - gBackupMapLayout.map[x + gBackupMapLayout.width * y] &= ~METATILE_COLLISION_MASK; + gBackupMapLayout.map[x + gBackupMapLayout.width * y] &= ~MAPGRID_COLLISION_MASK; } } -static bool8 SkipCopyingMetatileFromSavedMap(u16* mapMetatilePtr, u16 mapWidth, u8 yMode) +static bool8 SkipCopyingMetatileFromSavedMap(u16 *mapBlock, u16 mapWidth, u8 yMode) { if (yMode == 0xFF) return FALSE; if (yMode == 0) - mapMetatilePtr -= mapWidth; + mapBlock -= mapWidth; else - mapMetatilePtr += mapWidth; + mapBlock += mapWidth; - if (IsLargeBreakableDecoration(*mapMetatilePtr & METATILE_ID_MASK, yMode) == TRUE) + if (IsLargeBreakableDecoration(*mapBlock & MAPGRID_METATILE_ID_MASK, yMode) == TRUE) return TRUE; return FALSE; } @@ -879,17 +879,17 @@ void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size) if (tileset->isSecondary == FALSE) { LoadPalette(&black, destOffset, 2); - LoadPalette(((u16*)tileset->palettes) + 1, destOffset + 1, size - 2); + LoadPalette(((u16 *)tileset->palettes) + 1, destOffset + 1, size - 2); FieldmapPaletteDummy(destOffset + 1, (size - 2) >> 1); } else if (tileset->isSecondary == TRUE) { - LoadPalette(((u16*)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), destOffset, size); + LoadPalette(((u16 *)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), destOffset, size); FieldmapPaletteDummy(destOffset, size >> 1); } else { - LoadCompressedPalette((u32*)tileset->palettes, destOffset, size); + LoadCompressedPalette((u32 *)tileset->palettes, destOffset, size); FieldmapPaletteDummy(destOffset, size >> 1); } } diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 164f9507b5..2304381673 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -93,7 +93,7 @@ static const struct OamData sOamData_CutGrass = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -125,7 +125,7 @@ const struct SpritePalette gSpritePalette_CutGrass = {gFieldEffectPal_CutGrass, static const struct SpriteTemplate sSpriteTemplate_CutGrass = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_CUT_GRASS, .oam = &sOamData_CutGrass, .anims = sSpriteAnimTable_CutGrass, @@ -140,7 +140,7 @@ bool8 SetUpFieldMove_Cut(void) s16 x, y; u8 i, j; u8 tileBehavior; - u8 userAbility; + u16 userAbility; bool8 cutTiles[CUT_NORMAL_AREA]; bool8 ret; @@ -181,7 +181,7 @@ bool8 SetUpFieldMove_Cut(void) for (j = 0; j < CUT_NORMAL_SIDE; j++) { x = j - 1 + gPlayerFacingPosition.x; - if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height) + if (MapGridGetElevationAt(x, y) == gPlayerFacingPosition.elevation) { tileBehavior = MapGridGetMetatileBehaviorAt(x, y); if (MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE @@ -191,7 +191,12 @@ bool8 SetUpFieldMove_Cut(void) sHyperCutTiles[6 + (i * 5) + j] = TRUE; ret = TRUE; } - if (MapGridIsImpassableAt(x, y) == TRUE) + #ifdef BUGFIX + // Collision has a range 0-3, any value != 0 is impassable + if (MapGridGetCollisionAt(x, y)) + #else + if (MapGridGetCollisionAt(x, y) == 1) + #endif { cutTiles[i * 3 + j] = FALSE; } @@ -238,7 +243,7 @@ bool8 SetUpFieldMove_Cut(void) if (tileCuttable == TRUE) { - if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height) + if (MapGridGetElevationAt(x, y) == gPlayerFacingPosition.elevation) { u8 tileArrayId = ((sHyperCutStruct[i].y * 5) + 12) + (sHyperCutStruct[i].x); tileBehavior = MapGridGetMetatileBehaviorAt(x, y); @@ -289,7 +294,7 @@ bool8 FldEff_UseCutOnGrass(void) static void FieldCallback_CutTree(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_UseCut); + ScriptContext_SetupScript(EventScript_UseCut); } bool8 FldEff_UseCutOnTree(void) @@ -578,10 +583,10 @@ static void CutGrassSpriteCallbackEnd(struct Sprite *sprite) FieldEffectStop(&gSprites[sCutGrassSpriteArrayPtr[0]], FLDEFF_CUT_GRASS); FREE_AND_SET_NULL(sCutGrassSpriteArrayPtr); ScriptUnfreezeObjectEvents(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); if (IsMewPlayingHideAndSeek() == TRUE) - ScriptContext1_SetupScript(FarawayIsland_Interior_EventScript_HideMewWhenGrassCut); + ScriptContext_SetupScript(FarawayIsland_Interior_EventScript_HideMewWhenGrassCut); } void FixLongGrassMetatilesWindowTop(s16 x, s16 y) @@ -638,5 +643,5 @@ static void StartCutTreeFieldEffect(void) { PlaySE(SE_M_CUT); FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_TREE); - EnableBothScriptContexts(); + ScriptContext_Enable(); } diff --git a/src/fldeff_escalator.c b/src/fldeff_escalator.c index 733dca722e..0dc98c319c 100644 --- a/src/fldeff_escalator.c +++ b/src/fldeff_escalator.c @@ -71,7 +71,7 @@ static void SetEscalatorMetatile(u8 taskId, const s16 *metatileIds, u16 metatile s16 i; s16 j; - // Check all the escalator sections and only progress the selected one to the next stage + // Check all the escalator sections and only progress the selected one to the next stage if (!gTasks[taskId].tGoingUp) { for (i = 0; i < 3; i++) @@ -126,13 +126,13 @@ static void Task_DrawEscalator(u8 taskId) SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_1, 0); break; case 2: - SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_2, METATILE_COLLISION_MASK); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_2, MAPGRID_COLLISION_MASK); break; case 3: SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_3, 0); break; case 4: - SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_0, METATILE_COLLISION_MASK); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_0, MAPGRID_COLLISION_MASK); break; case 5: SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_1, 0); @@ -178,7 +178,7 @@ void StopEscalator(void) bool8 IsEscalatorMoving(void) { - if (gTasks[sEscalatorAnim_TaskId].tDrawingEscalator == FALSE + if (gTasks[sEscalatorAnim_TaskId].tDrawingEscalator == FALSE && gTasks[sEscalatorAnim_TaskId].tTransitionStage == LAST_ESCALATOR_STAGE) return FALSE; else diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index 9c166d0085..abdca2a88a 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -61,13 +61,13 @@ static const struct FlashStruct sTransitionTypes[] = {}, }; -static const u16 sCaveTransitionPalette_White[] = INCBIN_U16("graphics/misc/cave_transition_white.gbapal"); -static const u16 sCaveTransitionPalette_Black[] = INCBIN_U16("graphics/misc/cave_transition_black.gbapal"); +static const u16 sCaveTransitionPalette_White[] = INCBIN_U16("graphics/cave_transition/white.gbapal"); +static const u16 sCaveTransitionPalette_Black[] = INCBIN_U16("graphics/cave_transition/black.gbapal"); -static const u16 sCaveTransitionPalette_Enter[] = INCBIN_U16("graphics/misc/cave_transition_enter.gbapal"); -static const u16 sCaveTransitionPalette_Exit[] = INCBIN_U16("graphics/misc/cave_transition_exit.gbapal"); -static const u32 sCaveTransitionTilemap[] = INCBIN_U32("graphics/misc/cave_transition_map.bin.lz"); -static const u32 sCaveTransitionTiles[] = INCBIN_U32("graphics/misc/cave_transition.4bpp.lz"); +static const u16 sCaveTransitionPalette_Enter[] = INCBIN_U16("graphics/cave_transition/enter.gbapal"); +static const u16 sCaveTransitionPalette_Exit[] = INCBIN_U16("graphics/cave_transition/exit.gbapal"); +static const u32 sCaveTransitionTilemap[] = INCBIN_U32("graphics/cave_transition/tilemap.bin.lz"); +static const u32 sCaveTransitionTiles[] = INCBIN_U32("graphics/cave_transition/tiles.4bpp.lz"); bool8 SetUpFieldMove_Flash(void) { @@ -102,7 +102,7 @@ static void FldEff_UseFlash(void) { PlaySE(SE_M_REFLECT); FlagSet(FLAG_SYS_USE_FLASH); - ScriptContext1_SetupScript(EventScript_UseFlash); + ScriptContext_SetupScript(EventScript_UseFlash); } static void CB2_ChangeMapMain(void) diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index 9a76ed7440..c01e88b512 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -193,7 +193,7 @@ static const struct SpriteFrameImage sPicTable_SecretPowerShrub[] = static const struct SpriteTemplate sSpriteTemplate_SecretPowerCave = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_TREE, .oam = &sOam_SecretPower, .anims = sAnimTable_SecretPowerCave, @@ -204,7 +204,7 @@ static const struct SpriteTemplate sSpriteTemplate_SecretPowerCave = static const struct SpriteTemplate sSpriteTemplate_SecretPowerTree = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_PLANT, .oam = &sOam_SecretPower, .anims = sAnimTable_SecretPowerTree, @@ -215,7 +215,7 @@ static const struct SpriteTemplate sSpriteTemplate_SecretPowerTree = static const struct SpriteTemplate sSpriteTemplate_SecretPowerShrub = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_PLANT, .oam = &sOam_SecretPower, .anims = sAnimTable_SecretPowerShrub, @@ -261,7 +261,7 @@ static const struct SpriteFrameImage sPicTable_SandPillar[] = static const struct SpriteTemplate sSpriteTemplate_SandPillar = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_SAND_PILLAR, .oam = &sOam_SandPillar, .anims = sAnimTable_SandPillar, @@ -299,7 +299,7 @@ static const union AnimCmd *const sAnimTable_RecordMixLights[] = static const struct SpriteTemplate sSpriteTemplate_RecordMixLights = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0x1000, .oam = &gObjectEventBaseOam_32x8, .anims = sAnimTable_RecordMixLights, @@ -586,7 +586,7 @@ bool8 SetUpFieldMove_SecretPower(void) static void FieldCallback_SecretBaseCave(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(SecretBase_EventScript_CaveUseSecretPower); + ScriptContext_SetupScript(SecretBase_EventScript_CaveUseSecretPower); } bool8 FldEff_UseSecretPowerCave(void) @@ -640,13 +640,13 @@ static void SpriteCB_CaveEntranceOpen(struct Sprite *sprite) static void SpriteCB_CaveEntranceEnd(struct Sprite *sprite) { FieldEffectStop(sprite, FLDEFF_SECRET_POWER_CAVE); - EnableBothScriptContexts(); + ScriptContext_Enable(); } static void FieldCallback_SecretBaseTree(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(SecretBase_EventScript_TreeUseSecretPower); + ScriptContext_SetupScript(SecretBase_EventScript_TreeUseSecretPower); } bool8 FldEff_UseSecretPowerTree(void) @@ -714,13 +714,13 @@ static void SpriteCB_TreeEntranceOpen(struct Sprite *sprite) static void SpriteCB_TreeEntranceEnd(struct Sprite *sprite) { FieldEffectStop(sprite, FLDEFF_SECRET_POWER_TREE); - EnableBothScriptContexts(); + ScriptContext_Enable(); } static void FieldCallback_SecretBaseShrub(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(SecretBase_EventScript_ShrubUseSecretPower); + ScriptContext_SetupScript(SecretBase_EventScript_ShrubUseSecretPower); } bool8 FldEff_UseSecretPowerShrub(void) @@ -778,7 +778,7 @@ static void SpriteCB_ShrubEntranceOpen(struct Sprite *sprite) static void SpriteCB_ShrubEntranceEnd(struct Sprite *sprite) { FieldEffectStop(sprite, FLDEFF_SECRET_POWER_SHRUB); - EnableBothScriptContexts(); + ScriptContext_Enable(); } #define tX data[0] @@ -820,7 +820,7 @@ static void Task_SecretBasePCTurnOn(u8 taskId) MapGridSetMetatileIdAt(tX, tY, METATILE_SecretBase_PC_On); CurrentMapDrawMetatileAt(tX, tY); FieldEffectActiveListRemove(FLDEFF_PCTURN_ON); - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); return; } @@ -840,9 +840,9 @@ void DoSecretBasePCTurnOffEffect(void) PlaySE(SE_PC_OFF); if (!VarGet(VAR_CURRENT_SECRET_BASE)) - MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | MAPGRID_COLLISION_MASK); else - MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_RegisterPC | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_RegisterPC | MAPGRID_COLLISION_MASK); CurrentMapDrawMetatileAt(x, y); } @@ -1034,7 +1034,7 @@ bool8 FldEff_SandPillar(void) { s16 x, y; - ScriptContext2_Enable(); + LockPlayerFieldControls(); GetXYCoordsOneStepInFrontOfPlayer(&x, &y); gFieldEffectArguments[5] = x; @@ -1083,7 +1083,7 @@ static void SpriteCB_SandPillar_BreakTop(struct Sprite *sprite) PlaySE(SE_M_ROCK_THROW); if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == METATILE_SecretBase_SandOrnament_TopWall) - MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_Wall_TopMid | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_Wall_TopMid | MAPGRID_COLLISION_MASK); else MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_SandOrnament_BrokenTop); @@ -1103,7 +1103,7 @@ static void SpriteCB_SandPillar_BreakBase(struct Sprite *sprite) } else { - MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], METATILE_SecretBase_SandOrnament_BrokenBase | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], METATILE_SecretBase_SandOrnament_BrokenBase | MAPGRID_COLLISION_MASK); CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]); sprite->data[0] = 0; sprite->callback = SpriteCB_SandPillar_End; @@ -1113,7 +1113,7 @@ static void SpriteCB_SandPillar_BreakBase(struct Sprite *sprite) static void SpriteCB_SandPillar_End(struct Sprite *sprite) { FieldEffectStop(sprite, FLDEFF_SAND_PILLAR); - EnableBothScriptContexts(); + ScriptContext_Enable(); } void InteractWithShieldOrTVDecoration(void) @@ -1200,29 +1200,35 @@ bool8 IsLargeBreakableDecoration(u16 metatileId, bool8 checkBase) return FALSE; } +#define tState data[0] +#define tMosaic data[1] + static void Task_FieldPoisonEffect(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: - data[1] += 2; - if (data[1] > 8) - data[0]++; + tMosaic += 2; + if (tMosaic > 8) + tState++; break; case 1: - data[1] -= 2; - if (data[1] == 0) - data[0]++; + tMosaic -= 2; + if (tMosaic == 0) + tState++; break; case 2: DestroyTask(taskId); return; } - SetGpuReg(REG_OFFSET_MOSAIC, (data[1] << 4) | data[1]); + SetGpuReg(REG_OFFSET_MOSAIC, (tMosaic << 4) | tMosaic); } +#undef tState +#undef tMosaic + void FldEffPoison_Start(void) { PlaySE(SE_FIELD_POISON); @@ -1273,7 +1279,7 @@ static void Task_WateringBerryTreeAnim_End(u8 taskId) { SetPlayerAvatarTransitionFlags(GetPlayerAvatarFlags()); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } void DoWateringBerryTreeAnim(void) diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 6f4ce8002b..27689b02e3 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -19,7 +19,6 @@ #include "constants/map_types.h" #include "constants/songs.h" -// static functions static void Task_DoFieldMove_Init(u8 taskId); static void Task_DoFieldMove_ShowMonAfterPose(u8 taskId); static void Task_DoFieldMove_WaitForMon(u8 taskId); @@ -28,14 +27,13 @@ static void Task_DoFieldMove_RunFunc(u8 taskId); static void FieldCallback_RockSmash(void); static void FieldMove_RockSmash(void); -// text bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) { u8 objEventId; GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); - gPlayerFacingPosition.height = PlayerGetZCoord(); - objEventId = GetObjectEventIdByXYZ(gPlayerFacingPosition.x, gPlayerFacingPosition.y, gPlayerFacingPosition.height); + gPlayerFacingPosition.elevation = PlayerGetElevation(); + objEventId = GetObjectEventIdByPosition(gPlayerFacingPosition.x, gPlayerFacingPosition.y, gPlayerFacingPosition.elevation); if (gObjectEvents[objEventId].graphicsId != graphicsId) { return FALSE; @@ -57,7 +55,7 @@ static void Task_DoFieldMove_Init(u8 taskId) { u8 objEventId; - ScriptContext2_Enable(); + LockPlayerFieldControls(); gPlayerAvatar.preventStep = TRUE; objEventId = gPlayerAvatar.objectEventId; if (!ObjectEventIsMovementOverridden(&gObjectEvents[objEventId]) @@ -146,7 +144,7 @@ bool8 SetUpFieldMove_RockSmash(void) static void FieldCallback_RockSmash(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_UseRockSmash); + ScriptContext_SetupScript(EventScript_UseRockSmash); } bool8 FldEff_UseRockSmash(void) @@ -164,5 +162,5 @@ static void FieldMove_RockSmash(void) { PlaySE(SE_M_ROCK_THROW); FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH); - EnableBothScriptContexts(); + ScriptContext_Enable(); } diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index 61960d0ffc..9312150403 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -30,7 +30,7 @@ bool8 SetUpFieldMove_Strength(void) static void FieldCallback_Strength(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_UseStrength); + ScriptContext_SetupScript(EventScript_UseStrength); } bool8 FldEff_UseStrength(void) @@ -46,5 +46,5 @@ bool8 FldEff_UseStrength(void) static void StartStrengthFieldEffect(void) { FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH); - EnableBothScriptContexts(); + ScriptContext_Enable(); } diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index e34d195045..7e93526094 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -93,7 +93,7 @@ static void FailSweetScentEncounter(u8 taskId) { CpuFastSet(gPaletteDecompressionBuffer, gPlttBufferUnfaded, 0x100); SetWeatherPalStateIdle(); - ScriptContext1_SetupScript(EventScript_FailSweetScent); + ScriptContext_SetupScript(EventScript_FailSweetScent); DestroyTask(taskId); } } diff --git a/src/fonts.c b/src/fonts.c new file mode 100644 index 0000000000..8ef32bfef2 --- /dev/null +++ b/src/fonts.c @@ -0,0 +1,292 @@ +#include "global.h" + +ALIGNED(4) const u16 gFontSmallNarrowLatinGlyphs[] = INCBIN_U16("graphics/fonts/small_narrow.latfont"); +ALIGNED(4) const u8 gFontSmallNarrowLatinGlyphWidths[] = { + 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 3, 4, 5, 5, 5, 5, 4, 3, + 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 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, 5, 3, 8, 8, 8, 8, 8, 8, 8, 4, 5, 4, 4, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 4, + 3, 3, 3, 3, 3, 3, 3, 5, 3, 8, 8, 8, 8, 1, 2, 3, + 4, 5, 6, 7, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 3, 5, 5, + 5, 5, 5, 3, 3, 5, 5, 5, 3, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, + 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 5, + 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, + 3, 5, 5, 5, 5, 5, 5, 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, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 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 gFontSmallLatinGlyphs[] = INCBIN_U16("graphics/fonts/small.latfont"); +ALIGNED(4) const u8 gFontSmallLatinGlyphWidths[] = { + 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 4, 3, + 4, 4, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 8, 7, 8, 3, + 3, 3, 3, 3, 8, 8, 7, 3, 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, 5, 8, 8, 8, 8, 8, 8, 8, 4, 7, 5, 5, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 4, + 3, 3, 3, 3, 3, 3, 3, 5, 3, 8, 8, 8, 8, 1, 2, 3, + 4, 5, 6, 7, 5, 7, 7, 3, 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, 4, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 8, 5, 8, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, + 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, + 7, 5, 5, 5, 5, 5, 5, 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, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 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 gFontNarrowLatinGlyphs[] = INCBIN_U16("graphics/fonts/narrow.latfont"); +ALIGNED(4) const u8 gFontNarrowLatinGlyphWidths[] = { + 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, 5, 6, 9, 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, 5, 3, 3, 3, 3, 3, 3, 4, + 3, 3, 3, 3, 3, 3, 3, 5, 3, 7, 7, 7, 7, 1, 2, 3, + 4, 5, 6, 7, 5, 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, + 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 3, 5, 3, + 5, 5, 5, 3, 3, 5, 5, 6, 3, 6, 6, 5, 5, 5, 5, 5, + 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, + 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, + 3, 5, 5, 5, 5, 5, 5, 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 gFontShortLatinGlyphs[] = INCBIN_U16("graphics/fonts/short.latfont"); +ALIGNED(4) const u8 gFontShortLatinGlyphWidths[] = { + 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, + 8, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 3, + 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 9, 8, 8, 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, 6, 3, 3, 3, 3, 3, 3, 6, + 3, 3, 3, 3, 3, 3, 3, 6, 3, 12, 12, 12, 12, 1, 2, 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, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 5, + 6, 6, 6, 3, 3, 6, 6, 8, 5, 9, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 4, 6, 5, + 5, 6, 5, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 6, 6, 8, + 5, 6, 6, 6, 6, 6, 6, 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 gFontNormalLatinGlyphs[] = INCBIN_U16("graphics/fonts/normal.latfont"); +ALIGNED(4) const u8 gFontNormalLatinGlyphWidths[] = { + 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, + 8, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 3, + 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 9, 7, 6, 3, + 3, 3, 3, 3, 10, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 6, 6, 4, 8, 8, 8, 7, 8, 8, 4, 6, 6, 4, 4, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, 3, 6, + 3, 3, 3, 3, 3, 3, 3, 6, 3, 7, 7, 7, 7, 1, 2, 3, + 4, 5, 6, 7, 6, 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, + 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 3, 6, 3, + 6, 6, 6, 3, 3, 6, 6, 6, 3, 7, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 6, + 4, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 8, + 3, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 10, 10, 10, 10, 8, 10, 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 gFontSmallJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/small.hwjpnfont"); +ALIGNED(4) const u16 gFontNormalJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/normal.hwjpnfont"); + +ALIGNED(4) const u16 gFontFRLGMaleJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/frlg_male.fwjpnfont"); +ALIGNED(4) const u8 gFontFRLGMaleJapaneseGlyphWidths[] = { + 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, + 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 9, 10, 10, 10, + 8, 10, 10, 10, 10, 8, 8, 8, 10, 10, 8, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 2, 4, 6, + 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 5, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, +}; + +ALIGNED(4) const u16 gFontFRLGFemaleJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/frlg_female.fwjpnfont"); +ALIGNED(4) const u8 gFontFRLGFemaleJapaneseGlyphWidths[] = { + 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, + 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, + 9, 9, 9, 9, 9, 9, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 9, 10, 10, 10, + 8, 10, 10, 10, 10, 8, 8, 8, 10, 10, 8, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 2, 4, 6, + 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 5, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, +}; + +ALIGNED(4) const u16 gFontShortJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/short.fwjpnfont"); +ALIGNED(4) const u8 gFontShortJapaneseGlyphWidths[] = { + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, + 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, + 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 9, 10, 10, 10, + 8, 10, 10, 10, 10, 8, 8, 8, 10, 10, 8, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 2, 4, 6, + 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 5, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, +}; diff --git a/src/frontier_pass.c b/src/frontier_pass.c index e3e5ee1f24..b143587415 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -26,7 +26,6 @@ #include "overworld.h" #include "math_util.h" #include "constants/battle_frontier.h" -#include "constants/maps.h" #include "constants/rgb.h" #include "constants/region_map_sections.h" #include "constants/songs.h" @@ -174,13 +173,13 @@ static const u32 sHeads_Gfx[] = INCBIN_U32("graphics/frontier static const u32 sMapCursor_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_cursor.4bpp.lz"); static const u32 sMapScreen_Tilemap[] = INCBIN_U32("graphics/frontier_pass/map_screen.bin.lz"); static const u32 sMapAndCard_ZoomedOut_Tilemap[] = INCBIN_U32("graphics/frontier_pass/small_map_and_card.bin.lz"); -static const u32 sUnusedData[] = INCBIN_U32("graphics/frontier_pass/unused.bin"); +static const u32 sCardBall_Filled_Tilemap[] = INCBIN_U32("graphics/frontier_pass/card_ball_filled.bin"); // Unused static const u32 sBattleRecord_Tilemap[] = INCBIN_U32("graphics/frontier_pass/record_frame.bin.lz"); static const u32 sMapAndCard_Zooming_Tilemap[] = INCBIN_U32("graphics/frontier_pass/small_map_and_card_affine.bin.lz"); -static const s16 sBgAffineCoords[][2] = +static const s16 sBgAffineCoords[][2] = { - [CURSOR_AREA_MAP - 1] = {216, 32}, + [CURSOR_AREA_MAP - 1] = {216, 32}, [CURSOR_AREA_CARD - 1] = {216, 128} }; @@ -561,14 +560,14 @@ static void ResetGpuRegsAndBgs(void) SetGpuReg(REG_OFFSET_BG2CNT, 0); SetGpuReg(REG_OFFSET_BG1CNT, 0); SetGpuReg(REG_OFFSET_BG0CNT, 0); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDY, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); @@ -1099,7 +1098,7 @@ static void Task_PassAreaZoom(u8 taskId) tScaleY += tScaleSpeedY; sPassGfx->scaleX = MathUtil_Inv16(tScaleX); sPassGfx->scaleY = MathUtil_Inv16(tScaleY); - + // Check if zoom hasn't reached target if (!tZoomOut) { @@ -1117,7 +1116,7 @@ static void Task_PassAreaZoom(u8 taskId) sPassGfx->zooming = FALSE; if (UpdatePaletteFade()) return; - + if (!tZoomOut) { // Zoomed in and faded out, switch to map or trainer card @@ -1150,23 +1149,23 @@ static void ShowAndPrintWindows(void) FillWindowPixelBuffer(i, PIXEL_FILL(0)); } - x = GetStringCenterAlignXOffset(1, gText_SymbolsEarned, 96); - AddTextPrinterParameterized3(WINDOW_EARNED_SYMBOLS, 1, x, 5, sTextColors[0], 0, gText_SymbolsEarned); + x = GetStringCenterAlignXOffset(FONT_NORMAL, gText_SymbolsEarned, 96); + AddTextPrinterParameterized3(WINDOW_EARNED_SYMBOLS, FONT_NORMAL, x, 5, sTextColors[0], 0, gText_SymbolsEarned); - x = GetStringCenterAlignXOffset(1, gText_BattleRecord, 96); - AddTextPrinterParameterized3(WINDOW_BATTLE_RECORD, 1, x, 5, sTextColors[0], 0, gText_BattleRecord); + x = GetStringCenterAlignXOffset(FONT_NORMAL, gText_BattleRecord, 96); + AddTextPrinterParameterized3(WINDOW_BATTLE_RECORD, FONT_NORMAL, x, 5, sTextColors[0], 0, gText_BattleRecord); - AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, 5, 4, sTextColors[0], 0, gText_BattlePoints); + AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, FONT_SMALL_NARROW, 5, 4, sTextColors[0], 0, gText_BattlePoints); ConvertIntToDecimalStringN(gStringVar4, sPassData->battlePoints, STR_CONV_MODE_LEFT_ALIGN, 5); - x = GetStringRightAlignXOffset(8, gStringVar4, 91); - AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, x, 16, sTextColors[0], 0, gStringVar4); + x = GetStringRightAlignXOffset(FONT_SMALL_NARROW, gStringVar4, 91); + AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, FONT_SMALL_NARROW, x, 16, sTextColors[0], 0, gStringVar4); sPassData->cursorArea = GetCursorAreaFromCoords(sPassData->cursorX - 5, sPassData->cursorY + 5); sPassData->previousCursorArea = CURSOR_AREA_NOTHING; PrintAreaDescription(sPassData->cursorArea); for (i = 0; i < WINDOW_COUNT; i++) - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); CopyBgTilemapBufferToVram(0); } @@ -1174,13 +1173,13 @@ static void ShowAndPrintWindows(void) static void PrintAreaDescription(u8 cursorArea) { FillWindowPixelBuffer(WINDOW_DESCRIPTION, PIXEL_FILL(0)); - - if (cursorArea == CURSOR_AREA_RECORD && !sPassData->hasBattleRecord) - AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, sTextColors[1], 0, sPassAreaDescriptions[CURSOR_AREA_NOTHING]); - else if (cursorArea != CURSOR_AREA_NOTHING) - AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, sTextColors[1], 0, sPassAreaDescriptions[cursorArea]); - CopyWindowToVram(WINDOW_DESCRIPTION, 3); + if (cursorArea == CURSOR_AREA_RECORD && !sPassData->hasBattleRecord) + AddTextPrinterParameterized3(WINDOW_DESCRIPTION, FONT_NORMAL, 2, 0, sTextColors[1], 0, sPassAreaDescriptions[CURSOR_AREA_NOTHING]); + else if (cursorArea != CURSOR_AREA_NOTHING) + AddTextPrinterParameterized3(WINDOW_DESCRIPTION, FONT_NORMAL, 2, 0, sTextColors[1], 0, sPassAreaDescriptions[cursorArea]); + + CopyWindowToVram(WINDOW_DESCRIPTION, COPYWIN_FULL); CopyBgTilemapBufferToVram(0); } @@ -1256,7 +1255,7 @@ static void UpdateAreaHighlight(u8 cursorArea, u8 previousCursorArea) return; break; } - + // If moving on to highlightable area, highlight it switch (cursorArea) { @@ -1715,15 +1714,15 @@ static void PrintOnFrontierMap(void) for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) { if (i == sMapData->cursorPos) - AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (i * 16) + 1, sTextColors[2], 0, sMapLandmarks[i].name); + AddTextPrinterParameterized3(MAP_WINDOW_NAME, FONT_NARROW, 4, (i * 16) + 1, sTextColors[2], 0, sMapLandmarks[i].name); else - AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (i * 16) + 1, sTextColors[1], 0, sMapLandmarks[i].name); + AddTextPrinterParameterized3(MAP_WINDOW_NAME, FONT_NARROW, 4, (i * 16) + 1, sTextColors[1], 0, sMapLandmarks[i].name); } - AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, 1, 4, 0, sTextColors[0], 0, sMapLandmarks[sMapData->cursorPos].description); + AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, FONT_NORMAL, 4, 0, sTextColors[0], 0, sMapLandmarks[sMapData->cursorPos].description); for (i = 0; i < MAP_WINDOW_COUNT; i++) - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); CopyBgTilemapBufferToVram(0); } @@ -1743,8 +1742,8 @@ static void HandleFrontierMapCursorMove(u8 direction) sMapData->cursorPos = (oldCursorPos + 1) % NUM_FRONTIER_FACILITIES; } - AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (oldCursorPos * 16) + 1, sTextColors[1], 0, sMapLandmarks[oldCursorPos].name); - AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (sMapData->cursorPos * 16) + 1, sTextColors[2], 0, sMapLandmarks[sMapData->cursorPos].name); + AddTextPrinterParameterized3(MAP_WINDOW_NAME, FONT_NARROW, 4, (oldCursorPos * 16) + 1, sTextColors[1], 0, sMapLandmarks[oldCursorPos].name); + AddTextPrinterParameterized3(MAP_WINDOW_NAME, FONT_NARROW, 4, (sMapData->cursorPos * 16) + 1, sTextColors[2], 0, sMapLandmarks[sMapData->cursorPos].name); sMapData->cursorSprite->y = (sMapData->cursorPos * 16) + 8; @@ -1752,10 +1751,10 @@ static void HandleFrontierMapCursorMove(u8 direction) sMapData->mapIndicatorSprite->x = sMapLandmarks[sMapData->cursorPos].x; sMapData->mapIndicatorSprite->y = sMapLandmarks[sMapData->cursorPos].y; FillWindowPixelBuffer(MAP_WINDOW_DESCRIPTION, PIXEL_FILL(0)); - AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, 1, 4, 0, sTextColors[0], 0, sMapLandmarks[sMapData->cursorPos].description); + AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, FONT_NORMAL, 4, 0, sTextColors[0], 0, sMapLandmarks[sMapData->cursorPos].description); for (i = 0; i < MAP_WINDOW_COUNT; i++) - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); CopyBgTilemapBufferToVram(0); PlaySE(SE_DEX_SCROLL); diff --git a/src/frontier_util.c b/src/frontier_util.c index 42271ec958..b1f12e18f5 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -29,6 +29,7 @@ #include "load_save.h" #include "battle_dome.h" #include "constants/battle_frontier.h" +#include "constants/battle_pike.h" #include "constants/frontier_util.h" #include "constants/trainers.h" #include "constants/game_stat.h" @@ -499,94 +500,94 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ static const u8 sBattlePointAwards[][NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT] = { { - {1, 2, 3, 3}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0} + {1, 2, 3, 3}, {1, 1}, {4, 5}, {1}, {3, 4}, {1}, {5} }, { - {2, 3, 4, 4}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0} + {2, 3, 4, 4}, {1, 1}, {4, 5}, {1}, {3, 4}, {1}, {5} }, { - {3, 4, 5, 5}, {2, 2, 0, 0}, {5, 6, 0, 0}, {1, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0} + {3, 4, 5, 5}, {2, 2}, {5, 6}, {1}, {4, 5}, {2}, {6} }, { - {4, 5, 6, 6}, {2, 2, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0} + {4, 5, 6, 6}, {2, 2}, {5, 6}, {2}, {4, 5}, {2}, {6} }, { - {5, 6, 7, 7}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {7, 0, 0, 0} + {5, 6, 7, 7}, {3, 3}, {6, 7}, {2}, {5, 6}, {2}, {7} }, { - {6, 7, 8, 8}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {4, 0, 0, 0}, {7, 0, 0, 0} + {6, 7, 8, 8}, {3, 3}, {6, 7}, {2}, {5, 6}, {4}, {7} }, { - {7, 8, 9, 9}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0}, {6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0} + {7, 8, 9, 9}, {4, 4}, {7, 8}, {3}, {6, 7}, {4}, {8} }, { - {8, 9, 10, 10}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0},{6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0} + {8, 9, 10, 10}, {4, 4}, {7, 8}, {3},{6, 7}, {4}, {8} }, { - {9, 10, 11, 11}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0} + {9, 10, 11, 11}, {5, 5}, {8, 9}, {4}, {7, 8}, {8}, {9} }, { - {10, 11, 12, 12}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0} + {10, 11, 12, 12}, {5, 5}, {8, 9}, {4}, {7, 8}, {8}, {9} }, { - {11, 12, 13, 13}, {6, 6, 0, 0}, {9, 10, 0, 0}, {5, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0} + {11, 12, 13, 13}, {6, 6}, {9, 10}, {5,0}, {8, 9}, {8}, {10} }, { - {12, 13, 14, 14}, {6, 6, 0, 0}, {9, 10, 0, 0}, {6, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0} + {12, 13, 14, 14}, {6, 6}, {9, 10}, {6,0}, {8, 9}, {8}, {10} }, { - {13, 14, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {7, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0} + {13, 14, 15, 15}, {7, 7}, {10, 11}, {7}, {9, 10}, {10}, {11} }, { - {14, 15, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {8, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0} + {14, 15, 15, 15}, {7, 7}, {10, 11}, {8}, {9, 10}, {10}, {11} }, { - {15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {9, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0} + {15, 15, 15, 15}, {8, 8}, {11, 12}, {9}, {10, 11}, {10}, {12} }, { - {15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {10, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0} + {15, 15, 15, 15}, {8, 8}, {11, 12}, {10}, {10, 11}, {10}, {12} }, { - {15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {11, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0} + {15, 15, 15, 15}, {9, 9}, {12, 13}, {11}, {11, 12}, {12}, {13} }, { - {15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0} + {15, 15, 15, 15}, {9, 9}, {12, 13}, {12}, {11, 12}, {12}, {13} }, { - {15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {13, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0} + {15, 15, 15, 15}, {10, 10}, {13, 14}, {13}, {12, 13}, {12}, {14} }, { - {15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0} + {15, 15, 15, 15}, {10, 10}, {13, 14}, {14}, {12, 13}, {12}, {14} }, { - {15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {12, 0, 0, 0}, {15, 0, 0, 0} + {15, 15, 15, 15}, {11, 11}, {14, 15}, {15}, {13, 14}, {12}, {15} }, { - {15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + {15, 15, 15, 15}, {11, 11}, {14, 15}, {15}, {13, 14}, {14}, {15} }, { - {15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + {15, 15, 15, 15}, {12, 12}, {15, 15}, {15}, {14, 15}, {14}, {15} }, { - {15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + {15, 15, 15, 15}, {12, 12}, {15, 15}, {15}, {14, 15}, {14}, {15} }, { - {15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + {15, 15, 15, 15}, {13, 13}, {15, 15}, {15}, {15, 15}, {14}, {15} }, { - {15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + {15, 15, 15, 15}, {13, 13}, {15, 15}, {15}, {15, 15}, {15}, {15} }, { - {15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + {15, 15, 15, 15}, {14, 14}, {15, 15}, {15}, {15, 15}, {15}, {15} }, { - {15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + {15, 15, 15, 15}, {14, 14}, {15, 15}, {15}, {15, 15}, {15}, {15} }, { - {15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + {15, 15, 15, 15}, {15, 15}, {15, 15}, {15}, {15, 15}, {15}, {15} }, { - {15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + {15, 15, 15, 15}, {15, 15}, {15, 15}, {15}, {15, 15}, {15}, {15} }, }; @@ -594,13 +595,13 @@ static const u8 sBattlePointAwards[][NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUN // First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) static const u16 sBattledBrainBitFlags[NUM_FRONTIER_FACILITIES][2] = { - [FRONTIER_FACILITY_TOWER] = {0x0001, 0x0002}, - [FRONTIER_FACILITY_DOME] = {0x0004, 0x0008}, - [FRONTIER_FACILITY_PALACE] = {0x0010, 0x0020}, - [FRONTIER_FACILITY_ARENA] = {0x0040, 0x0080}, - [FRONTIER_FACILITY_FACTORY] = {0x0100, 0x0200}, - [FRONTIER_FACILITY_PIKE] = {0x0400, 0x0800}, - [FRONTIER_FACILITY_PYRAMID] = {0x1000, 0x2000}, + [FRONTIER_FACILITY_TOWER] = {1 << 0, 1 << 1}, + [FRONTIER_FACILITY_DOME] = {1 << 2, 1 << 3}, + [FRONTIER_FACILITY_PALACE] = {1 << 4, 1 << 5}, + [FRONTIER_FACILITY_ARENA] = {1 << 6, 1 << 7}, + [FRONTIER_FACILITY_FACTORY] = {1 << 8, 1 << 9}, + [FRONTIER_FACILITY_PIKE] = {1 << 10, 1 << 11}, + [FRONTIER_FACILITY_PYRAMID] = {1 << 12, 1 << 13}, }; static void (* const sFrontierUtilFuncs[])(void) = @@ -635,8 +636,8 @@ static const struct WindowTemplate sFrontierResultsWindowTemplate = .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, - .width = 0x1c, - .height = 0x12, + .width = 28, + .height = 18, .paletteNum = 15, .baseBlock = 1 }; @@ -646,7 +647,7 @@ static const struct WindowTemplate sLinkContestResultsWindowTemplate = .bg = 0, .tilemapLeft = 2, .tilemapTop = 2, - .width = 0x1a, + .width = 26, .height = 15, .paletteNum = 15, .baseBlock = 1 @@ -657,7 +658,7 @@ static const struct WindowTemplate sRankingHallRecordsWindowTemplate = .bg = 0, .tilemapLeft = 2, .tilemapTop = 1, - .width = 0x1a, + .width = 26, .height = 17, .paletteNum = 15, .baseBlock = 1 @@ -683,16 +684,16 @@ const u16 gFrontierBannedSpecies[] = static const u8 *const sRecordsWindowChallengeTexts[][2] = { - [RANKING_HALL_BATTLE_TOWER_SINGLES] = {gText_BattleTower2, gText_FacilitySingle}, - [RANKING_HALL_BATTLE_TOWER_DOUBLES] = {gText_BattleTower2, gText_FacilityDouble}, - [RANKING_HALL_BATTLE_TOWER_MULTIS] = {gText_BattleTower2, gText_FacilityMulti}, - [RANKING_HALL_BATTLE_DOME] = {gText_BattleDome, gText_FacilitySingle}, - [RANKING_HALL_BATTLE_PALACE] = {gText_BattlePalace, gText_FacilitySingle}, - [RANKING_HALL_BATTLE_ARENA] = {gText_BattleArena, gText_Facility}, - [RANKING_HALL_BATTLE_FACTORY] = {gText_BattleFactory, gText_FacilitySingle}, - [RANKING_HALL_BATTLE_PIKE] = {gText_BattlePike, gText_Facility}, - [RANKING_HALL_BATTLE_PYRAMID] = {gText_BattlePyramid, gText_Facility}, - [RANKING_HALL_BATTLE_TOWER_LINK] = {gText_BattleTower2, gText_FacilityLink}, + [RANKING_HALL_TOWER_SINGLES] = {gText_BattleTower2, gText_FacilitySingle}, + [RANKING_HALL_TOWER_DOUBLES] = {gText_BattleTower2, gText_FacilityDouble}, + [RANKING_HALL_TOWER_MULTIS] = {gText_BattleTower2, gText_FacilityMulti}, + [RANKING_HALL_DOME] = {gText_BattleDome, gText_FacilitySingle}, + [RANKING_HALL_PALACE] = {gText_BattlePalace, gText_FacilitySingle}, + [RANKING_HALL_ARENA] = {gText_BattleArena, gText_Facility}, + [RANKING_HALL_FACTORY] = {gText_BattleFactory, gText_FacilitySingle}, + [RANKING_HALL_PIKE] = {gText_BattlePike, gText_Facility}, + [RANKING_HALL_PYRAMID] = {gText_BattlePyramid, gText_Facility}, + [RANKING_HALL_TOWER_LINK] = {gText_BattleTower2, gText_FacilityLink}, }; static const u8 *const sLevelModeText[] = @@ -703,16 +704,16 @@ static const u8 *const sLevelModeText[] = static const u8 *const sHallFacilityToRecordsText[] = { - [RANKING_HALL_BATTLE_TOWER_SINGLES] = gText_FrontierFacilityWinStreak, - [RANKING_HALL_BATTLE_TOWER_DOUBLES] = gText_FrontierFacilityWinStreak, - [RANKING_HALL_BATTLE_TOWER_MULTIS] = gText_FrontierFacilityWinStreak, - [RANKING_HALL_BATTLE_DOME] = gText_FrontierFacilityClearStreak, - [RANKING_HALL_BATTLE_PALACE] = gText_FrontierFacilityWinStreak, - [RANKING_HALL_BATTLE_ARENA] = gText_FrontierFacilityKOsStreak, - [RANKING_HALL_BATTLE_FACTORY] = gText_FrontierFacilityWinStreak, - [RANKING_HALL_BATTLE_PIKE] = gText_FrontierFacilityRoomsCleared, - [RANKING_HALL_BATTLE_PYRAMID] = gText_FrontierFacilityFloorsCleared, - [RANKING_HALL_BATTLE_TOWER_LINK] = gText_FrontierFacilityWinStreak, + [RANKING_HALL_TOWER_SINGLES] = gText_FrontierFacilityWinStreak, + [RANKING_HALL_TOWER_DOUBLES] = gText_FrontierFacilityWinStreak, + [RANKING_HALL_TOWER_MULTIS] = gText_FrontierFacilityWinStreak, + [RANKING_HALL_DOME] = gText_FrontierFacilityClearStreak, + [RANKING_HALL_PALACE] = gText_FrontierFacilityWinStreak, + [RANKING_HALL_ARENA] = gText_FrontierFacilityKOsStreak, + [RANKING_HALL_FACTORY] = gText_FrontierFacilityWinStreak, + [RANKING_HALL_PIKE] = gText_FrontierFacilityRoomsCleared, + [RANKING_HALL_PYRAMID] = gText_FrontierFacilityFloorsCleared, + [RANKING_HALL_TOWER_LINK] = gText_FrontierFacilityWinStreak, }; static const u16 sFrontierBrainTrainerIds[NUM_FRONTIER_FACILITIES] = @@ -958,9 +959,9 @@ static bool8 IsWinStreakActive(u32 challenge) static void PrintAligned(const u8 *str, s32 y) { - s32 x = GetStringCenterAlignXOffset(1, str, 224); + s32 x = GetStringCenterAlignXOffset(FONT_NORMAL, str, DISPLAY_WIDTH - 16); y = (y * 8) + 1; - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x, y, TEXT_SKIP_DRAW, NULL); } static void PrintHyphens(s32 y) @@ -968,23 +969,23 @@ static void PrintHyphens(s32 y) s32 i; u8 text[37]; - for (i = 0; i < 36; i++) + for (i = 0; i < (int)ARRAY_COUNT(text) - 1; i++) text[i] = CHAR_HYPHEN; text[i] = EOS; y = (y * 8) + 1; - AddTextPrinterParameterized(gRecordsWindowId, 1, text, 4, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, text, 4, y, TEXT_SKIP_DRAW, NULL); } // Battle Tower records. static void TowerPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) { - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x1, y, TEXT_SKIP_DRAW, NULL); if (num > MAX_STREAK) num = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_WinStreak); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x2, y, TEXT_SKIP_DRAW, NULL); } static void TowerPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) @@ -1056,15 +1057,15 @@ static void ShowTowerResultsWindow(u8 battleMode) StringExpandPlaceholders(gStringVar4, gText_LinkMultiBattleRoomResults); PrintAligned(gStringVar4, 2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Lv502, 16, 49, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_OpenLv, 16, 97, TEXT_SKIP_DRAW, NULL); PrintHyphens(10); TowerPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 72, 132, 49); TowerPrintRecordStreak(battleMode, FRONTIER_LVL_50, 72, 132, 65); TowerPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 72, 132, 97); TowerPrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 72, 132, 113); PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } // Battle Dome records. @@ -1079,10 +1080,10 @@ static u16 DomeGetWinStreak(u8 battleMode, u8 lvlMode) static void PrintTwoStrings(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) { - AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str1, x1, y, TEXT_SKIP_DRAW, NULL); ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, str2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x2, y, TEXT_SKIP_DRAW, NULL); } static void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) @@ -1123,8 +1124,8 @@ static void ShowDomeResultsWindow(u8 battleMode) StringExpandPlaceholders(gStringVar4, gText_DoubleBattleTourneyResults); PrintAligned(gStringVar4, 0); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Lv502, 8, 33, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_OpenLv, 8, 97, TEXT_SKIP_DRAW, NULL); PrintHyphens(10); DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 64, 121, 33); PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_50], 64, 121, 49); @@ -1133,18 +1134,18 @@ static void ShowDomeResultsWindow(u8 battleMode) PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_OPEN], 64, 121, 113); PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_OPEN], 64, 112, 129); PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } // Battle Palace records. static void PalacePrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) { - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x1, y, TEXT_SKIP_DRAW, NULL); if (num > MAX_STREAK) num = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_WinStreak); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x2, y, TEXT_SKIP_DRAW, NULL); } static void PalacePrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) @@ -1199,15 +1200,15 @@ static void ShowPalaceResultsWindow(u8 battleMode) StringExpandPlaceholders(gStringVar4, gText_DoubleBattleHallResults); PrintAligned(gStringVar4, 2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Lv502, 16, 49, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_OpenLv, 16, 97, TEXT_SKIP_DRAW, NULL); PrintHyphens(10); PalacePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 72, 131, 49); PalacePrintRecordStreak(battleMode, FRONTIER_LVL_50, 72, 131, 65); PalacePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 72, 131, 97); PalacePrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 72, 131, 113); PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } // Battle Pike records. @@ -1222,10 +1223,10 @@ static u16 PikeGetWinStreak(u8 lvlMode) static void PikePrintCleared(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) { - AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str1, x1, y, TEXT_SKIP_DRAW, NULL); ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, str2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x2, y, TEXT_SKIP_DRAW, NULL); } static void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) @@ -1251,8 +1252,8 @@ static void ShowPikeResultsWindow(void) FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults); PrintAligned(gStringVar4, 0); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Lv502, 8, 33, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_OpenLv, 8, 97, TEXT_SKIP_DRAW, NULL); PrintHyphens(10); PikePrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 114, 33); PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_50], 64, 114, 49); @@ -1261,18 +1262,18 @@ static void ShowPikeResultsWindow(void) PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_OPEN], 64, 114, 113); PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_OPEN], 64, 114, 129); PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } // Battle Arena records. static void ArenaPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) { - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x1, y, TEXT_SKIP_DRAW, NULL); if (num > MAX_STREAK) num = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_KOsInARow); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x2, y, TEXT_SKIP_DRAW, NULL); } static void ArenaPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) @@ -1314,29 +1315,29 @@ static void ShowArenaResultsWindow(void) PrintHyphens(10); StringExpandPlaceholders(gStringVar4, gText_SetKOTourneyResults); PrintAligned(gStringVar4, 2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Lv502, 16, 49, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_OpenLv, 16, 97, TEXT_SKIP_DRAW, NULL); ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 72, 126, 49); ArenaPrintRecordStreak(FRONTIER_LVL_50, 72, 126, 65); ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 72, 126, 97); ArenaPrintRecordStreak(FRONTIER_LVL_OPEN, 72, 126, 113); PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } // Battle Factory records. static void FactoryPrintStreak(const u8 *str, u16 num1, u16 num2, u8 x1, u8 x2, u8 x3, u8 y) { - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x1, y, TEXT_SKIP_DRAW, NULL); if (num1 > MAX_STREAK) num1 = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar1, num1, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_WinStreak); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x2, y, TEXT_SKIP_DRAW, NULL); ConvertIntToDecimalStringN(gStringVar1, num2, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_TimesVar1); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x3, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x3, y, TEXT_SKIP_DRAW, NULL); } static void FactoryPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) @@ -1403,27 +1404,27 @@ static void ShowFactoryResultsWindow(u8 battleMode) StringExpandPlaceholders(gStringVar4, gText_BattleSwapDoubleResults); PrintAligned(gStringVar4, 0); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_RentalSwap, 152, 33, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Lv502, 8, 33, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_RentalSwap, 152, 33, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_OpenLv, 8, 97, TEXT_SKIP_DRAW, NULL); PrintHyphens(10); FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 49); FactoryPrintRecordStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 65); FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 113); FactoryPrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 129); PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } // Battle Pyramid records. static void PyramidPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) { - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x1, y, TEXT_SKIP_DRAW, NULL); if (num > MAX_STREAK) num = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_FloorsCleared); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x2, y, TEXT_SKIP_DRAW, NULL); } static void PyramidPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) @@ -1464,15 +1465,15 @@ static void ShowPyramidResultsWindow(void) FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults); PrintAligned(gStringVar4, 2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 49, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Lv502, 8, 49, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_OpenLv, 8, 97, TEXT_SKIP_DRAW, NULL); PrintHyphens(10); PyramidPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 111, 49); PyramidPrintRecordStreak(FRONTIER_LVL_50, 64, 111, 65); PyramidPrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 111, 97); PyramidPrintRecordStreak(FRONTIER_LVL_OPEN, 64, 111, 113); PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } // Link contest records. Why is it in this file? @@ -1487,43 +1488,43 @@ static void ShowLinkContestResultsWindow(void) FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); StringExpandPlaceholders(gStringVar4, gText_LinkContestResults); - x = GetStringCenterAlignXOffset(1, gStringVar4, 208); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x, 1, TEXT_SPEED_FF, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 208); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, x, 1, TEXT_SKIP_DRAW, NULL); str = gText_1st; - x = GetStringRightAlignXOffset(1, str, 38) + 50; - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 38) + 50; + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x, 25, TEXT_SKIP_DRAW, NULL); str = gText_2nd; - x = GetStringRightAlignXOffset(1, str, 38) + 88; - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 38) + 88; + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x, 25, TEXT_SKIP_DRAW, NULL); str = gText_3rd; - x = GetStringRightAlignXOffset(1, str, 38) + 126; - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 38) + 126; + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x, 25, TEXT_SKIP_DRAW, NULL); str = gText_4th; - x = GetStringRightAlignXOffset(1, str, 38) + 164; - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 38) + 164; + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x, 25, TEXT_SKIP_DRAW, NULL); x = 6; - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Cool, x, 41, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Beauty, x, 57, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Cute, x, 73, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Smart, x, 89, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Tough, x, 105, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Cool, x, 41, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Beauty, x, 57, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Cute, x, 73, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Smart, x, 89, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Tough, x, 105, TEXT_SKIP_DRAW, NULL); for (i = 0; i < CONTEST_CATEGORIES_COUNT; i++) { for (j = 0; j < CONTESTANT_COUNT; j++) { ConvertIntToDecimalStringN(gStringVar4, gSaveBlock2Ptr->contestLinkResults[i][j], STR_CONV_MODE_RIGHT_ALIGN, 4); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, (j * 38) + 64, (i * 16) + 41, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, (j * 38) + 64, (i * 16) + 41, TEXT_SKIP_DRAW, NULL); } } PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } static void CheckPutFrontierTVShowOnAir(void) @@ -1860,25 +1861,25 @@ static void GiveBattlePoints(void) switch (facility) { case FRONTIER_FACILITY_TOWER: - challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; break; case FRONTIER_FACILITY_DOME: challengeNum = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; break; case FRONTIER_FACILITY_PALACE: - challengeNum = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; break; case FRONTIER_FACILITY_ARENA: - challengeNum = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; break; case FRONTIER_FACILITY_FACTORY: - challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; break; case FRONTIER_FACILITY_PIKE: - challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; + challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / NUM_PIKE_ROOMS; break; case FRONTIER_FACILITY_PYRAMID: - challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; break; } @@ -1982,7 +1983,7 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL if (gFrontierBannedSpecies[i] != 0xFFFF) return; - if (lvlMode == FRONTIER_LVL_50 && monLevel > 50) + if (lvlMode == FRONTIER_LVL_50 && monLevel > FRONTIER_MAX_LEVEL_50) return; for (i = 0; i < *count && speciesArray[i] != species; i++) @@ -2224,18 +2225,18 @@ static void Print1PRecord(s32 position, s32 x, s32 y, struct RankingHall1P *hall u8 text[32]; u16 winStreak; - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_123Dot[position], x * 8, (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_123Dot[position], x * 8, (8 * (y + 5 * position)) + 1, TEXT_SKIP_DRAW, NULL); hallRecord->name[PLAYER_NAME_LENGTH] = EOS; if (hallRecord->winStreak) { TVShowConvertInternationalString(text, hallRecord->name, hallRecord->language); - AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 2) * 8, (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, text, (x + 2) * 8, (8 * (y + 5 * position)) + 1, TEXT_SKIP_DRAW, NULL); winStreak = hallRecord->winStreak; if (winStreak > MAX_STREAK) winStreak = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, sHallFacilityToRecordsText[hallFacilityId]); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, sHallFacilityToRecordsText[hallFacilityId], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, GetStringRightAlignXOffset(FONT_NORMAL, sHallFacilityToRecordsText[hallFacilityId], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SKIP_DRAW, NULL); } } @@ -2244,45 +2245,45 @@ static void Print2PRecord(s32 position, s32 x, s32 y, struct RankingHall2P *hall u8 text[32]; u16 winStreak; - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_123Dot[position], x * 8, (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_123Dot[position], x * 8, (8 * (y + 5 * position)) + 1, TEXT_SKIP_DRAW, NULL); if (hallRecord->winStreak) { hallRecord->name1[PLAYER_NAME_LENGTH] = EOS; hallRecord->name2[PLAYER_NAME_LENGTH] = EOS; TVShowConvertInternationalString(text, hallRecord->name1, hallRecord->language); - AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 2) * 8, (8 * (y + 5 * position - 1)) + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, text, (x + 2) * 8, (8 * (y + 5 * position - 1)) + 1, TEXT_SKIP_DRAW, NULL); if (IsStringJapanese(hallRecord->name2)) TVShowConvertInternationalString(text, hallRecord->name2, LANGUAGE_JAPANESE); else StringCopy(text, hallRecord->name2); - AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 4) * 8, (8 * (y + 5 * position + 1)) + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, text, (x + 4) * 8, (8 * (y + 5 * position + 1)) + 1, TEXT_SKIP_DRAW, NULL); winStreak = hallRecord->winStreak; if (winStreak > MAX_STREAK) winStreak = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4); - StringExpandPlaceholders(gStringVar4, sHallFacilityToRecordsText[RANKING_HALL_BATTLE_TOWER_LINK]); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, sHallFacilityToRecordsText[RANKING_HALL_BATTLE_TOWER_LINK], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); + StringExpandPlaceholders(gStringVar4, sHallFacilityToRecordsText[RANKING_HALL_TOWER_LINK]); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, GetStringRightAlignXOffset(FONT_NORMAL, sHallFacilityToRecordsText[RANKING_HALL_TOWER_LINK], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SKIP_DRAW, NULL); } } static void Fill1PRecords(struct RankingHall1P *dst, s32 hallFacilityId, s32 lvlMode) { s32 i, j; - struct RankingHall1P record1P[4]; + struct RankingHall1P record1P[HALL_RECORDS_COUNT + 1]; struct PlayerHallRecords *playerHallRecords = calloc(1, sizeof(struct PlayerHallRecords)); GetPlayerHallRecords(playerHallRecords); - for (i = 0; i < 3; i++) + for (i = 0; i < HALL_RECORDS_COUNT; i++) record1P[i] = gSaveBlock2Ptr->hallRecords1P[hallFacilityId][lvlMode][i]; - record1P[3] = playerHallRecords->onePlayer[hallFacilityId][lvlMode]; + record1P[HALL_RECORDS_COUNT] = playerHallRecords->onePlayer[hallFacilityId][lvlMode]; - for (i = 0; i < 3; i++) + for (i = 0; i < HALL_RECORDS_COUNT; i++) { s32 highestWinStreak = 0; s32 highestId = 0; - for (j = 0; j < 4; j++) + for (j = 0; j < HALL_RECORDS_COUNT + 1; j++) { if (record1P[j].winStreak > highestWinStreak) { @@ -2290,8 +2291,8 @@ static void Fill1PRecords(struct RankingHall1P *dst, s32 hallFacilityId, s32 lvl highestWinStreak = record1P[j].winStreak; } } - if (record1P[3].winStreak >= highestWinStreak) - highestId = 3; + if (record1P[HALL_RECORDS_COUNT].winStreak >= highestWinStreak) + highestId = HALL_RECORDS_COUNT; dst[i] = record1P[highestId]; record1P[highestId].winStreak = 0; @@ -2303,20 +2304,20 @@ static void Fill1PRecords(struct RankingHall1P *dst, s32 hallFacilityId, s32 lvl static void Fill2PRecords(struct RankingHall2P *dst, s32 lvlMode) { s32 i, j; - struct RankingHall2P record2P[4]; + struct RankingHall2P record2P[HALL_RECORDS_COUNT + 1]; struct PlayerHallRecords *playerHallRecords = calloc(1, sizeof(struct PlayerHallRecords)); GetPlayerHallRecords(playerHallRecords); - for (i = 0; i < 3; i++) + for (i = 0; i < HALL_RECORDS_COUNT; i++) record2P[i] = gSaveBlock2Ptr->hallRecords2P[lvlMode][i]; - record2P[3] = playerHallRecords->twoPlayers[lvlMode]; + record2P[HALL_RECORDS_COUNT] = playerHallRecords->twoPlayers[lvlMode]; - for (i = 0; i < 3; i++) + for (i = 0; i < HALL_RECORDS_COUNT; i++) { s32 highestWinStreak = 0; s32 highestId = 0; - for (j = 0; j < 3; j++) + for (j = 0; j < HALL_RECORDS_COUNT; j++) { if (record2P[j].winStreak > highestWinStreak) { @@ -2324,8 +2325,8 @@ static void Fill2PRecords(struct RankingHall2P *dst, s32 lvlMode) highestWinStreak = record2P[j].winStreak; } } - if (record2P[3].winStreak >= highestWinStreak) - highestId = 3; + if (record2P[HALL_RECORDS_COUNT].winStreak >= highestWinStreak) + highestId = HALL_RECORDS_COUNT; dst[i] = record2P[highestId]; record2P[highestId].winStreak = 0; @@ -2338,26 +2339,26 @@ static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode) { s32 i; s32 x; - struct RankingHall1P records1P[3]; - struct RankingHall2P records2P[3]; + struct RankingHall1P records1P[HALL_RECORDS_COUNT]; + struct RankingHall2P records2P[HALL_RECORDS_COUNT]; StringCopy(gStringVar1, sRecordsWindowChallengeTexts[hallFacilityId][0]); StringExpandPlaceholders(gStringVar4, sRecordsWindowChallengeTexts[hallFacilityId][1]); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); - x = GetStringRightAlignXOffset(1, sLevelModeText[lvlMode], 0xD0); - AddTextPrinterParameterized(gRecordsWindowId, 1, sLevelModeText[lvlMode], x, 1, TEXT_SPEED_FF, NULL); - if (hallFacilityId == RANKING_HALL_BATTLE_TOWER_LINK) + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, sLevelModeText[lvlMode], DISPLAY_WIDTH - 32); + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, sLevelModeText[lvlMode], x, 1, TEXT_SKIP_DRAW, NULL); + if (hallFacilityId == RANKING_HALL_TOWER_LINK) { gSaveBlock2Ptr->frontier.opponentNames[0][PLAYER_NAME_LENGTH] = EOS; gSaveBlock2Ptr->frontier.opponentNames[1][PLAYER_NAME_LENGTH] = EOS; Fill2PRecords(records2P, lvlMode); - for (i = 0; i < 3; i++) + for (i = 0; i < HALL_RECORDS_COUNT; i++) Print2PRecord(i, 1, 4, &records2P[i]); } else { Fill1PRecords(records1P, hallFacilityId, lvlMode); - for (i = 0; i < 3; i++) + for (i = 0; i < HALL_RECORDS_COUNT; i++) Print1PRecord(i, 1, 4, &records1P[i], hallFacilityId); } } @@ -2369,14 +2370,14 @@ void ShowRankingHallRecordsWindow(void) FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); PrintHallRecords(gSpecialVar_0x8005, FRONTIER_LVL_50); PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); + CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } void ScrollRankingHallRecordsWindow(void) { FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); PrintHallRecords(gSpecialVar_0x8005, FRONTIER_LVL_OPEN); - CopyWindowToVram(gRecordsWindowId, 2); + CopyWindowToVram(gRecordsWindowId, COPYWIN_GFX); } void ClearRankingHallRecords(void) @@ -2393,20 +2394,20 @@ void ClearRankingHallRecords(void) for (i = 0; i < HALL_FACILITIES_COUNT; i++) { - for (j = 0; j < 2; j++) + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { - for (k = 0; k < 3; k++) + for (k = 0; k < HALL_RECORDS_COUNT; k++) { - CopyTrainerId(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, ZERO); + CopyTrainerId(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, ZERO); gSaveBlock2Ptr->hallRecords1P[i][j][k].name[0] = EOS; gSaveBlock2Ptr->hallRecords1P[i][j][k].winStreak = 0; } } } - for (j = 0; j < 2; j++) + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { - for (k = 0; k < 3; k++) + for (k = 0; k < HALL_RECORDS_COUNT; k++) { CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id1, ZERO); CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id2, ZERO); diff --git a/src/graphics.c b/src/graphics.c index 1f7d4ab237..7ccd0d5799 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -11,10 +11,286 @@ const u32 gUnusedPal_OldCharmap[] = INCBIN_U32("graphics/unused/old_charmap.gbap const u32 gSmokescreenImpactTiles[] = INCBIN_U32("graphics/battle_anims/sprites/smokescreen_impact.4bpp.lz"); const u32 gSmokescreenImpactPalette[] = INCBIN_U32("graphics/battle_anims/sprites/smokescreen_impact.gbapal.lz"); -#include "data/graphics/interface_pokeballs.h" +#include "data/graphics/pokeballs.h" const u32 gBlankGfxCompressed[] = INCBIN_U32("graphics/interface/blank.4bpp.lz"); +// New Battle anims Particles +const u32 gBattleAnimSpriteGfx_WhiteStreak[] = INCBIN_U32("graphics/battle_anims/sprites/white_streak.4bpp.lz"); +const u32 gBattleAnimSpritePal_WhiteStreak[] = INCBIN_U32("graphics/battle_anims/sprites/white_streak.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_PurpleJab[] = INCBIN_U32("graphics/battle_anims/sprites/purple_jab.4bpp.lz"); +const u32 gBattleAnimSpritePal_PurpleJab[] = INCBIN_U32("graphics/battle_anims/sprites/purple_jab.gbapal.lz"); + +const u32 gBattleAnimSpritePal_ToxicSpikes[] = INCBIN_U32("graphics/battle_anims/sprites/toxic_spikes.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_EnergyBall[] = INCBIN_U32("graphics/battle_anims/sprites/energy_ball.4bpp.lz"); +const u32 gBattleAnimSpritePal_EnergyBall[] = INCBIN_U32("graphics/battle_anims/sprites/energy_ball.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_MegaStone[] = INCBIN_U32("graphics/battle_anims/sprites/mega_stone.4bpp.lz"); +const u32 gBattleAnimSpritePal_MegaStone[] = INCBIN_U32("graphics/battle_anims/sprites/mega_stone.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_MegaParticles[] = INCBIN_U32("graphics/battle_anims/sprites/mega_particles.4bpp.lz"); +const u32 gBattleAnimSpritePal_MegaParticles[] = INCBIN_U32("graphics/battle_anims/sprites/mega_particles.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_MegaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/mega_symbol.4bpp.lz"); +const u32 gBattleAnimSpritePal_MegaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/mega_symbol.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_AlphaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/alpha_symbol.4bpp.lz"); +const u32 gBattleAnimSpritePal_AlphaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/alpha_symbol.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_OmegaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/omega_symbol.4bpp.lz"); +const u32 gBattleAnimSpritePal_OmegaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/omega_symbol.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_PrimalParticles[] = INCBIN_U32("graphics/battle_anims/sprites/primal_particles.4bpp.lz"); +const u32 gBattleAnimSpritePal_PrimalParticles[] = INCBIN_U32("graphics/battle_anims/sprites/primal_particles.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_FlashCannonBall[] = INCBIN_U32("graphics/battle_anims/sprites/flash_cannon_ball.4bpp.lz"); +const u32 gBattleAnimSpritePal_FlashCannonBall[] = INCBIN_U32("graphics/battle_anims/sprites/flash_cannon_ball.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_WaterGun[] = INCBIN_U32("graphics/battle_anims/sprites/water_gun.4bpp.lz"); +const u32 gBattleAnimSpritePal_WaterGun[] = INCBIN_U32("graphics/battle_anims/sprites/water_gun.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Punishment[] = INCBIN_U32("graphics/battle_anims/sprites/punishment.4bpp.lz"); +const u32 gBattleAnimSpritePal_Punishment[] = INCBIN_U32("graphics/battle_anims/sprites/punishment.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_QuickGuard[] = INCBIN_U32("graphics/battle_anims/sprites/quick_guard.4bpp.lz"); +const u32 gBattleAnimSpritePal_QuickGuard[] = INCBIN_U32("graphics/battle_anims/sprites/quick_guard.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_AcupressureFinger[] = INCBIN_U32("graphics/battle_anims/sprites/new/acupressure_finger.4bpp.lz"); +const u32 gBattleAnimSpritePal_AcupressureFinger[] = INCBIN_U32("graphics/battle_anims/sprites/new/acupressure_finger.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_AlphaStone[] = INCBIN_U32("graphics/battle_anims/sprites/new/alpha_stone.4bpp.lz"); +const u32 gBattleAnimSpritePal_AlphaStone[] = INCBIN_U32("graphics/battle_anims/sprites/new/alpha_stone.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Anchor[] = INCBIN_U32("graphics/battle_anims/sprites/new/anchor.4bpp.lz"); + +const u32 gBattleAnimSpriteGfx_Apple[] = INCBIN_U32("graphics/battle_anims/sprites/new/apple.4bpp.lz"); +const u32 gBattleAnimSpritePal_Apple[] = INCBIN_U32("graphics/battle_anims/sprites/new/apple.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Arrows[] = INCBIN_U32("graphics/battle_anims/sprites/new/arrows.4bpp.lz"); + +const u32 gBattleAnimSpriteGfx_AssuranceHand[] = INCBIN_U32("graphics/battle_anims/sprites/new/assurance_hand.4bpp.lz"); +const u32 gBattleAnimSpritePal_AssuranceHand[] = INCBIN_U32("graphics/battle_anims/sprites/new/assurance_hand.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_AuraSphere[] = INCBIN_U32("graphics/battle_anims/sprites/new/aura_sphere.4bpp.lz"); +const u32 gBattleAnimSpritePal_AuraSphere[] = INCBIN_U32("graphics/battle_anims/sprites/new/aura_sphere.gbapal.lz"); + +const u32 gBattleAnimSpritePal_AvalancheRocks[] = INCBIN_U32("graphics/battle_anims/sprites/new/avalanche_rocks.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewPokeball[] = INCBIN_U32("graphics/battle_anims/sprites/new/baton_pass_ball.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewPokeball[] = INCBIN_U32("graphics/battle_anims/sprites/new/baton_pass_ball.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_BerryEaten[] = INCBIN_U32("graphics/battle_anims/sprites/new/berry_eaten.4bpp.lz"); +const u32 gBattleAnimSpritePal_BerryEaten[] = INCBIN_U32("graphics/battle_anims/sprites/new/berry_eaten.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_BerryNormal[] = INCBIN_U32("graphics/battle_anims/sprites/new/berry_normal.4bpp.lz"); +const u32 gBattleAnimSpritePal_BerryNormal[] = INCBIN_U32("graphics/battle_anims/sprites/new/berry_normal.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_BigRock[] = INCBIN_U32("graphics/battle_anims/sprites/new/big_rock.4bpp.lz"); +const u32 gBattleAnimSpritePal_BigRock[] = INCBIN_U32("graphics/battle_anims/sprites/new/big_rock.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_BlacephalonHead[] = INCBIN_U32("graphics/battle_anims/sprites/new/blacephalon_head.4bpp.lz"); +const u32 gBattleAnimSpritePal_BlacephalonHead[] = INCBIN_U32("graphics/battle_anims/sprites/new/blacephalon_head.gbapal.lz"); + +const u32 gBattleAnimSpritePal_BlueFlare[] = INCBIN_U32("graphics/battle_anims/sprites/new/blue_flare.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Branch[] = INCBIN_U32("graphics/battle_anims/sprites/new/branch.4bpp.lz"); +const u32 gBattleAnimSpritePal_Branch[] = INCBIN_U32("graphics/battle_anims/sprites/new/branch.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Brine[] = INCBIN_U32("graphics/battle_anims/sprites/new/brine.4bpp.lz"); +const u32 gBattleAnimSpritePal_Brine[] = INCBIN_U32("graphics/battle_anims/sprites/new/brine.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_ChainLink[] = INCBIN_U32("graphics/battle_anims/sprites/new/chain_link.4bpp.lz"); +const u32 gBattleAnimSpritePal_ChainLink[] = INCBIN_U32("graphics/battle_anims/sprites/new/chain_link.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Chop[] = INCBIN_U32("graphics/battle_anims/sprites/new/chop.4bpp.lz"); +const u32 gBattleAnimSpritePal_Chop[] = INCBIN_U32("graphics/battle_anims/sprites/new/chop.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Cacoon[] = INCBIN_U32("graphics/battle_anims/sprites/new/cacoon.4bpp.lz"); +const u32 gBattleAnimSpritePal_Cacoon[] = INCBIN_U32("graphics/battle_anims/sprites/new/cacoon.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Confide[] = INCBIN_U32("graphics/battle_anims/sprites/new/confide.4bpp.lz"); +const u32 gBattleAnimSpritePal_Confide[] = INCBIN_U32("graphics/battle_anims/sprites/new/confide.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_CraftyShield[] = INCBIN_U32("graphics/battle_anims/sprites/new/crafty_shield.4bpp.lz"); +const u32 gBattleAnimSpritePal_CraftyShield[] = INCBIN_U32("graphics/battle_anims/sprites/new/crafty_shield.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewNail[] = INCBIN_U32("graphics/battle_anims/sprites/new/curse_nail.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewNail[] = INCBIN_U32("graphics/battle_anims/sprites/new/curse_nail.gbapal.lz"); + +const u32 gBattleAnimSpritePal_DracoMeteor[] = INCBIN_U32("graphics/battle_anims/sprites/new/draco_meteor.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_DragonPulseRing[] = INCBIN_U32("graphics/battle_anims/sprites/new/dragon_pulse_ring.4bpp.lz"); +const u32 gBattleAnimSpritePal_DragonPulseRing[] = INCBIN_U32("graphics/battle_anims/sprites/new/dragon_pulse_ring.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_DreepyMissile[] = INCBIN_U32("graphics/battle_anims/sprites/new/dreepy_missile.4bpp.lz"); +const u32 gBattleAnimSpritePal_DreepyMissile[] = INCBIN_U32("graphics/battle_anims/sprites/new/dreepy_missile.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Drill[] = INCBIN_U32("graphics/battle_anims/sprites/new/drill.4bpp.lz"); +const u32 gBattleAnimSpritePal_Drill[] = INCBIN_U32("graphics/battle_anims/sprites/new/drill.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewEmbers[] = INCBIN_U32("graphics/battle_anims/sprites/new/embers.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewEmbers[] = INCBIN_U32("graphics/battle_anims/sprites/new/embers.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_FairyLockChains[] = INCBIN_U32("graphics/battle_anims/sprites/new/fairy_lock_chains.4bpp.lz"); + +const u32 gBattleAnimSpriteGfx_Fishies[] = INCBIN_U32("graphics/battle_anims/sprites/new/fishies.4bpp.lz"); +const u32 gBattleAnimSpritePal_Fishies[] = INCBIN_U32("graphics/battle_anims/sprites/new/fishies.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewFly[] = INCBIN_U32("graphics/battle_anims/sprites/new/fly.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewFly[] = INCBIN_U32("graphics/battle_anims/sprites/new/fly.gbapal.lz"); + +const u32 gBattleAnimSpritePal_FusionFlare[] = INCBIN_U32("graphics/battle_anims/sprites/new/fusion_flare.gbapal.lz"); + +const u32 gBattleAnimSpritePal_GarbagePoisonPillar[] = INCBIN_U32("graphics/battle_anims/sprites/new/garbage_poison_column.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Gear[] = INCBIN_U32("graphics/battle_anims/sprites/new/gear.4bpp.lz"); +const u32 gBattleAnimSpritePal_Gear[] = INCBIN_U32("graphics/battle_anims/sprites/new/gear.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_GigavoltHavocSpear[] = INCBIN_U32("graphics/battle_anims/sprites/new/gigavolt_havoc_spear.4bpp.lz"); +const u32 gBattleAnimSpritePal_GigavoltHavocSpear[] = INCBIN_U32("graphics/battle_anims/sprites/new/gigavolt_havoc_spear.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_GoldenApple[] = INCBIN_U32("graphics/battle_anims/sprites/new/golden_apple.4bpp.lz"); +const u32 gBattleAnimSpritePal_GoldenApple[] = INCBIN_U32("graphics/battle_anims/sprites/new/golden_apple.gbapal.lz"); + +const u32 gBattleAnimSpritePal_GreenDrake[] = INCBIN_U32("graphics/battle_anims/sprites/new/green_drake.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewGreenStar[] = INCBIN_U32("graphics/battle_anims/sprites/new/green_star.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewGreenStar[] = INCBIN_U32("graphics/battle_anims/sprites/new/green_star.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_HeartStamp[] = INCBIN_U32("graphics/battle_anims/sprites/new/heart_stamp.4bpp.lz"); +const u32 gBattleAnimSpritePal_HeartStamp[] = INCBIN_U32("graphics/battle_anims/sprites/new/heart_stamp.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_ZygardeHexes[] = INCBIN_U32("graphics/battle_anims/sprites/new/hexes.4bpp.lz"); +const u32 gBattleAnimSpritePal_ZygardeHexes[] = INCBIN_U32("graphics/battle_anims/sprites/new/hexes.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_HoopaHand[] = INCBIN_U32("graphics/battle_anims/sprites/new/hoopa_hand.4bpp.lz"); +const u32 gBattleAnimSpritePal_HoopaHand[] = INCBIN_U32("graphics/battle_anims/sprites/new/hoopa_hand.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_HoopaRing[] = INCBIN_U32("graphics/battle_anims/sprites/new/hoopa_ring.4bpp.lz"); +const u32 gBattleAnimSpritePal_HoopaRing[] = INCBIN_U32("graphics/battle_anims/sprites/new/hoopa_ring.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewHornHit[] = INCBIN_U32("graphics/battle_anims/sprites/new/horn.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewHornHit[] = INCBIN_U32("graphics/battle_anims/sprites/new/horn.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_HornLeech[] = INCBIN_U32("graphics/battle_anims/sprites/new/horn_leech.4bpp.lz"); +const u32 gBattleAnimSpritePal_HornLeech[] = INCBIN_U32("graphics/battle_anims/sprites/new/horn_leech.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_HorseshoeFist[] = INCBIN_U32("graphics/battle_anims/sprites/new/horseshoe_fist.4bpp.lz"); +const u32 gBattleAnimSpritePal_HorseshoeFist[] = INCBIN_U32("graphics/battle_anims/sprites/new/horseshoe_fist.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_HydroPump[] = INCBIN_U32("graphics/battle_anims/sprites/new/hydro_pump.4bpp.lz"); +const u32 gBattleAnimSpritePal_HydroPump[] = INCBIN_U32("graphics/battle_anims/sprites/new/hydro_pump.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_IceRock[] = INCBIN_U32("graphics/battle_anims/sprites/new/ice_rock.4bpp.lz"); +const u32 gBattleAnimSpritePal_IceRock[] = INCBIN_U32("graphics/battle_anims/sprites/new/ice_rock.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_LargeSpike[] = INCBIN_U32("graphics/battle_anims/sprites/new/large_spike.4bpp.lz"); +const u32 gBattleAnimSpritePal_LargeSpike[] = INCBIN_U32("graphics/battle_anims/sprites/new/large_spike.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewLeaf[] = INCBIN_U32("graphics/battle_anims/sprites/new/leaves.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewLeaf[] = INCBIN_U32("graphics/battle_anims/sprites/new/leaves.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewLeechSeed[] = INCBIN_U32("graphics/battle_anims/sprites/new/leech_seed.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewLeechSeed[] = INCBIN_U32("graphics/battle_anims/sprites/new/leech_seed.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_LightningRain[] = INCBIN_U32("graphics/battle_anims/sprites/new/lightning_rain.4bpp.lz"); +const u32 gBattleAnimSpritePal_LightningRain[] = INCBIN_U32("graphics/battle_anims/sprites/new/lightning_rain.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewEye[] = INCBIN_U32("graphics/battle_anims/sprites/new/mean_look.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewEye[] = INCBIN_U32("graphics/battle_anims/sprites/new/mean_look.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_MetalBits[] = INCBIN_U32("graphics/battle_anims/sprites/new/metal_bits.4bpp.lz"); + +const u32 gBattleAnimSpriteGfx_MudBomb[] = INCBIN_U32("graphics/battle_anims/sprites/new/mud_bomb.4bpp.lz"); +const u32 gBattleAnimSpritePal_MudBomb[] = INCBIN_U32("graphics/battle_anims/sprites/new/mud_bomb.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Mushroom[] = INCBIN_U32("graphics/battle_anims/sprites/new/mushroom.4bpp.lz"); +const u32 gBattleAnimSpritePal_Mushroom[] = INCBIN_U32("graphics/battle_anims/sprites/new/mushroom.gbapal.lz"); + +const u32 gBattleAnimSpritePal_NaturalGiftRing[] = INCBIN_U32("graphics/battle_anims/sprites/new/natural_gift_ring.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NecrozmaStar[] = INCBIN_U32("graphics/battle_anims/sprites/new/necrozma_star.4bpp.lz"); +const u32 gBattleAnimSpritePal_NecrozmaStar[] = INCBIN_U32("graphics/battle_anims/sprites/new/necrozma_star.gbapal.lz"); + +const u32 gBattleAnimSpritePal_NewImpact[] = INCBIN_U32("graphics/battle_anims/sprites/new/impact.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Obstruct[] = INCBIN_U32("graphics/battle_anims/sprites/new/obstruct.4bpp.lz"); +const u32 gBattleAnimSpritePal_Obstruct[] = INCBIN_U32("graphics/battle_anims/sprites/new/obstruct.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_OmegaStone[] = INCBIN_U32("graphics/battle_anims/sprites/new/omega_stone.4bpp.lz"); +const u32 gBattleAnimSpritePal_OmegaStone[] = INCBIN_U32("graphics/battle_anims/sprites/new/omega_stone.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_PinkDiamond[] = INCBIN_U32("graphics/battle_anims/sprites/new/pink_diamond.4bpp.lz"); +const u32 gBattleAnimSpritePal_PinkDiamond[] = INCBIN_U32("graphics/battle_anims/sprites/new/pink_diamond.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_PoisonColumn[] = INCBIN_U32("graphics/battle_anims/sprites/new/poison_column.4bpp.lz"); +const u32 gBattleAnimSpritePal_PoisonColumn[] = INCBIN_U32("graphics/battle_anims/sprites/new/poison_column.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_PowerTrick[] = INCBIN_U32("graphics/battle_anims/sprites/new/power_trick.4bpp.lz"); +const u32 gBattleAnimSpritePal_PowerTrick[] = INCBIN_U32("graphics/battle_anims/sprites/new/power_trick.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_PurpleDrake[] = INCBIN_U32("graphics/battle_anims/sprites/new/purple_drake.4bpp.lz"); +const u32 gBattleAnimSpritePal_PurpleDrake[] = INCBIN_U32("graphics/battle_anims/sprites/new/purple_drake.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_RazorShell[] = INCBIN_U32("graphics/battle_anims/sprites/new/razor_shell.4bpp.lz"); +const u32 gBattleAnimSpritePal_RazorShell[] = INCBIN_U32("graphics/battle_anims/sprites/new/razor_shell.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_RocksSmall[] = INCBIN_U32("graphics/battle_anims/sprites/new/rock_small.4bpp.lz"); + +const u32 gBattleAnimSpriteGfx_NewRocks[] = INCBIN_U32("graphics/battle_anims/sprites/new/rocks.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewRocks[] = INCBIN_U32("graphics/battle_anims/sprites/new/rocks.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_ShellLeft[] = INCBIN_U32("graphics/battle_anims/sprites/new/shell_left.4bpp.lz"); +const u32 gBattleAnimSpritePal_ShellLeft[] = INCBIN_U32("graphics/battle_anims/sprites/new/shell_left.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_ShellRight[] = INCBIN_U32("graphics/battle_anims/sprites/new/shell_right.4bpp.lz"); + +const u32 gBattleAnimSpritePal_SpacialRendSlices[] = INCBIN_U32("graphics/battle_anims/sprites/new/spacial_rend_slices.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewSpikes[] = INCBIN_U32("graphics/battle_anims/sprites/new/spikes.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewSpikes[] = INCBIN_U32("graphics/battle_anims/sprites/new/spikes.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_SpiritShackleArrow[] = INCBIN_U32("graphics/battle_anims/sprites/new/spirit_shackle_arrow.4bpp.lz"); +const u32 gBattleAnimSpritePal_SpiritShackleArrow[] = INCBIN_U32("graphics/battle_anims/sprites/new/spirit_shackle_arrow.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_SteamEruption[] = INCBIN_U32("graphics/battle_anims/sprites/new/steam_eruption.4bpp.lz"); +const u32 gBattleAnimSpritePal_SteamEruption[] = INCBIN_U32("graphics/battle_anims/sprites/new/steam_eruption.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Steamroller[] = INCBIN_U32("graphics/battle_anims/sprites/new/steamroller.4bpp.lz"); +const u32 gBattleAnimSpritePal_Steamroller[] = INCBIN_U32("graphics/battle_anims/sprites/new/steamroller.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_StonePillar[] = INCBIN_U32("graphics/battle_anims/sprites/new/stone_pillar.4bpp.lz"); +const u32 gBattleAnimSpritePal_StonePillar[] = INCBIN_U32("graphics/battle_anims/sprites/new/stone_pillar.gbapal.lz"); + +const u32 gBattleAnimSpritePal_Poltergeist[] = INCBIN_U32("graphics/battle_anims/sprites/new/poltergeist.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_StraightBeam[] = INCBIN_U32("graphics/battle_anims/sprites/new/straight_beam.4bpp.lz"); +const u32 gBattleAnimSpritePal_StraightBeam[] = INCBIN_U32("graphics/battle_anims/sprites/new/straight_beam.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_SubstituteBack[] = INCBIN_U32("graphics/battle_anims/sprites/new/substitute_back.4bpp.lz"); +const u32 gBattleAnimSpriteGfx_NewSubstituteFront[] = INCBIN_U32("graphics/battle_anims/sprites/new/substitute_front.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewSubstituteFront[] = INCBIN_U32("graphics/battle_anims/sprites/new/substitute_front.gbapal.lz"); + +const u32 gBattleAnimSpritePal_NewSurf[] = INCBIN_U32("graphics/battle_anims/sprites/new/surf_new.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewSword[] = INCBIN_U32("graphics/battle_anims/sprites/new/sword.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewSword[] = INCBIN_U32("graphics/battle_anims/sprites/new/sword.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewTeeth[] = INCBIN_U32("graphics/battle_anims/sprites/new/teeth.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewTeeth[] = INCBIN_U32("graphics/battle_anims/sprites/new/teeth.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_NewHandsAndFeet[] = INCBIN_U32("graphics/battle_anims/sprites/new/thrash.4bpp.lz"); +const u32 gBattleAnimSpritePal_NewHandsAndFeet[] = INCBIN_U32("graphics/battle_anims/sprites/new/thrash.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Tornado[] = INCBIN_U32("graphics/battle_anims/sprites/new/tornado.4bpp.lz"); +const u32 gBattleAnimSpritePal_Tornado[] = INCBIN_U32("graphics/battle_anims/sprites/new/tornado.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_ZMoveSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/new/z_move_symbol.4bpp.lz"); +const u32 gBattleAnimSpritePal_ZMoveSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/new/z_move_symbol.gbapal.lz"); + + // Battle anims const u32 gBattleAnimSpriteGfx_Bubble[] = INCBIN_U32("graphics/battle_anims/sprites/bubble.4bpp.lz"); const u32 gBattleAnimSpriteGfx_Bone[] = INCBIN_U32("graphics/battle_anims/sprites/bone.4bpp.lz"); @@ -22,6 +298,7 @@ const u32 gBattleAnimSpriteGfx_AirWave[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimSpriteGfx_Orb[] = INCBIN_U32("graphics/battle_anims/sprites/orb.4bpp.lz"); const u32 gBattleAnimSpriteGfx_Sword[] = INCBIN_U32("graphics/battle_anims/sprites/sword.4bpp.lz"); const u32 gBattleAnimSpriteGfx_Seed[] = INCBIN_U32("graphics/battle_anims/sprites/seed.4bpp.lz"); +const u32 gBattleAnimSpriteGfx_SeedBrown[] = INCBIN_U32("graphics/battle_anims/sprites/seed_new.4bpp.lz"); const u32 gBattleAnimSpritePal_RainDrops[] = INCBIN_U32("graphics/battle_anims/sprites/rain_drops.gbapal.lz"); const u32 gBattleAnimSpritePal_Bone[] = INCBIN_U32("graphics/battle_anims/sprites/bone.gbapal.lz"); @@ -29,6 +306,7 @@ const u32 gBattleAnimSpritePal_AirWave[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimSpritePal_Orb[] = INCBIN_U32("graphics/battle_anims/sprites/orb.gbapal.lz"); const u32 gBattleAnimSpritePal_Sword[] = INCBIN_U32("graphics/battle_anims/sprites/sword.gbapal.lz"); const u32 gBattleAnimSpritePal_Seed[] = INCBIN_U32("graphics/battle_anims/sprites/seed.gbapal.lz"); +const u32 gBattleAnimSpritePal_SeedBrown[] = INCBIN_U32("graphics/battle_anims/sprites/seed_new.gbapal.lz"); const u32 gBattleAnimSpriteGfx_Needle[] = INCBIN_U32("graphics/battle_anims/sprites/needle.4bpp.lz"); const u32 gBattleAnimSpritePal_Needle[] = INCBIN_U32("graphics/battle_anims/sprites/needle.gbapal.lz"); @@ -64,8 +342,7 @@ const u32 gBattleAnimSpriteGfx_BlackSmoke[] = INCBIN_U32("graphics/battle_anims/ const u32 gBattleAnimSpritePal_BlackSmoke[] = INCBIN_U32("graphics/battle_anims/sprites/black_smoke.gbapal.lz"); const u32 gBattleAnimSpriteGfx_BlackBall[] = INCBIN_U32("graphics/battle_anims/sprites/black_ball.4bpp.lz"); - -const u32 gUnknownGfx_C035B8[] = INCBIN_U32("graphics/unknown/unknown_C035B8.4bpp.lz"); +const u32 gBattleAnimSpritePal_BlackBall[] = INCBIN_U32("graphics/battle_anims/sprites/black_ball.bin"); const u32 gBattleAnimSpritePal_Glass[] = INCBIN_U32("graphics/battle_anims/sprites/glass.gbapal.lz"); const u32 gBattleAnimSpriteGfx_Glass[] = INCBIN_U32("graphics/battle_anims/sprites/glass.4bpp.lz"); @@ -76,9 +353,8 @@ const u32 gBattleAnimSpritePal_HornHit[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimSpritePal_BlueShards[] = INCBIN_U32("graphics/battle_anims/sprites/blue_shards.gbapal.lz"); const u32 gBattleAnimSpriteGfx_BlueShards[] = INCBIN_U32("graphics/battle_anims/sprites/blue_shards.4bpp.lz"); -const u32 gUnused_BattleSpritePalette_023[] = INCBIN_U32("graphics/unused/battle_anim_023.gbapal.lz"); - -const u32 gUnusedGfx_MusicNotes[] = INCBIN_U32("graphics/unused/music_notes.4bpp.lz"); +const u32 gBattleAnimUnusedPal_MusicNotes[] = INCBIN_U32("graphics/battle_anims/unused/music_notes.gbapal.lz"); +const u32 gBattleAnimUnusedGfx_MusicNotes[] = INCBIN_U32("graphics/battle_anims/unused/music_notes.4bpp.lz"); const u32 gBattleAnimSpritePal_Hit[] = INCBIN_U32("graphics/battle_anims/sprites/hit.gbapal.lz"); const u32 gBattleAnimSpriteGfx_Hit[] = INCBIN_U32("graphics/battle_anims/sprites/hit.4bpp.lz"); @@ -88,6 +364,21 @@ const u32 gBattleAnimSpritePal_Hit2[] = INCBIN_U32("graphics/battle_anims/sprite const u32 gBattleAnimSpritePal_WavingHand[] = INCBIN_U32("graphics/battle_anims/sprites/waving_hand.gbapal.lz"); const u32 gBattleAnimSpriteGfx_WavingHand[] = INCBIN_U32("graphics/battle_anims/sprites/waving_hand.4bpp.lz"); +const u32 gBattleAnimSpriteGfx_Feint[] = INCBIN_U32("graphics/battle_anims/sprites/feint_punch.4bpp.lz"); +const u32 gBattleAnimSpritePal_Feint[] = INCBIN_U32("graphics/battle_anims/sprites/feint_punch.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_TrumpCard[] = INCBIN_U32("graphics/battle_anims/sprites/trump_cards.4bpp.lz"); +const u32 gBattleAnimSpritePal_TrumpCard[] = INCBIN_U32("graphics/battle_anims/sprites/trump_cards.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_TrumpCardParticles[] = INCBIN_U32("graphics/battle_anims/sprites/trump_card_particles.4bpp.lz"); +const u32 gBattleAnimSpritePal_TrumpCardParticles[] = INCBIN_U32("graphics/battle_anims/sprites/trump_card_particles.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_Accupressure[] = INCBIN_U32("graphics/battle_anims/sprites/accupressure.4bpp.lz"); +const u32 gBattleAnimSpritePal_Accupressure[] = INCBIN_U32("graphics/battle_anims/sprites/accupressure.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_WringOut[] = INCBIN_U32("graphics/battle_anims/sprites/wring_out.4bpp.lz"); +const u32 gBattleAnimSpritePal_WringOut[] = INCBIN_U32("graphics/battle_anims/sprites/wring_out.gbapal.lz"); + const u32 gBattleAnimSpriteGfx_ClosingEye[] = INCBIN_U32("graphics/battle_anims/sprites/closing_eye.4bpp.lz"); const u32 gBattleAnimSpritePal_ClosingEye[] = INCBIN_U32("graphics/battle_anims/sprites/closing_eye.gbapal.lz"); @@ -123,9 +414,42 @@ const u32 gBattleAnimSpriteGfx_Lightning2[] = INCBIN_U32("graphics/battle_anims/ const u32 gBattleAnimSpriteGfx_Lightning[] = INCBIN_U32("graphics/battle_anims/sprites/lightning.4bpp.lz"); -const u32 gUnknownGfx_C06D98[] = INCBIN_U32("graphics/unknown/unknown_C06D98.4bpp.lz"); -const u32 gUnknownPal_C06D98[] = INCBIN_U32("graphics/unknown/unknown_C06D98.gbapal.lz"); -const u32 gUnknownPal_C06D98_2[] = INCBIN_U32("graphics/unknown/unknown_C06D98_2.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_ColoredOrbs[] = INCBIN_U32("graphics/battle_anims/sprites/colored_orbs.4bpp.lz"); +const u32 gBattleAnimSpritePal_ColoredOrbs[] = INCBIN_U32("graphics/battle_anims/sprites/colored_orbs.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_WorrySeed[] = INCBIN_U32("graphics/battle_anims/sprites/worry_seed.4bpp.lz"); +const u32 gBattleAnimSpritePal_WorrySeed[] = INCBIN_U32("graphics/battle_anims/sprites/worry_seed.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_SmallCloud[] = INCBIN_U32("graphics/battle_anims/sprites/small_cloud.4bpp.lz"); +const u32 gBattleAnimSpritePal_SmallCloud[] = INCBIN_U32("graphics/battle_anims/sprites/small_cloud.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_AttackOrder[] = INCBIN_U32("graphics/battle_anims/sprites/attack_order.4bpp.lz"); +const u32 gBattleAnimSpritePal_AttackOrder[] = INCBIN_U32("graphics/battle_anims/sprites/attack_order.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_DragonPulse[] = INCBIN_U32("graphics/battle_anims/sprites/dragon_pulse.4bpp.lz"); +const u32 gBattleAnimSpritePal_DragonPulse[] = INCBIN_U32("graphics/battle_anims/sprites/dragon_pulse.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_WoodHammer[] = INCBIN_U32("graphics/battle_anims/sprites/wood_hammer.4bpp.lz"); +const u32 gBattleAnimSpritePal_WoodHammer[] = INCBIN_U32("graphics/battle_anims/sprites/wood_hammer.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_PsychoCut[] = INCBIN_U32("graphics/battle_anims/sprites/psycho_cut.4bpp.lz"); +const u32 gBattleAnimSpritePal_PsychoCut[] = INCBIN_U32("graphics/battle_anims/sprites/psycho_cut.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_PowerGem[] = INCBIN_U32("graphics/battle_anims/sprites/power_gem.4bpp.lz"); +const u32 gBattleAnimSpritePal_PowerGem[] = INCBIN_U32("graphics/battle_anims/sprites/power_gem.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_StoneEdge[] = INCBIN_U32("graphics/battle_anims/sprites/stone_edge.4bpp.lz"); +const u32 gBattleAnimSpritePal_StoneEdge[] = INCBIN_U32("graphics/battle_anims/sprites/stone_edge.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_StealthRock[] = INCBIN_U32("graphics/battle_anims/sprites/stealth_rock.4bpp.lz"); +const u32 gBattleAnimSpritePal_StealthRock[] = INCBIN_U32("graphics/battle_anims/sprites/stealth_rock.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_PoisonJab[] = INCBIN_U32("graphics/battle_anims/sprites/poison_jab.4bpp.lz"); +const u32 gBattleAnimSpritePal_PoisonJab[] = INCBIN_U32("graphics/battle_anims/sprites/poison_jab.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_SpinningBall[] = INCBIN_U32("graphics/battle_anims/unused/spinning_ball.4bpp.lz"); +const u32 gBattleAnimSpritePal_SpinningBall[] = INCBIN_U32("graphics/battle_anims/unused/spinning_ball.gbapal.lz"); +const u32 gBattleAnimSpritePal_SpinningBall2[] = INCBIN_U32("graphics/battle_anims/unused/spinning_ball_2.gbapal.lz"); // old battle interface data, unused @@ -144,7 +468,7 @@ const u32 gBattleAnimSpriteGfx_ClawSlash[] = INCBIN_U32("graphics/battle_anims/s const u32 gBattleAnimSpriteGfx_Scratch3[] = INCBIN_U32("graphics/battle_anims/sprites/scratch_3.4bpp.lz"); const u32 gBattleAnimSpriteGfx_Scratch2[] = INCBIN_U32("graphics/battle_anims/sprites/scratch_2.4bpp.lz"); -const u32 gPartyMenuHpBar_Gfx[] = INCBIN_U32("graphics/interface/party_menu_hpbar.4bpp.lz"); +const u32 gUnusedHpBar_Gfx[] = INCBIN_U32("graphics/battle_interface/hpbar_unused.4bpp.lz"); const u32 gBattleAnimSpriteGfx_BubbleBurst2[] = INCBIN_U32("graphics/battle_anims/sprites/bubble_burst_2.4bpp.lz"); @@ -159,18 +483,18 @@ const u32 gBattleAnimSpriteGfx_Glass2[] = INCBIN_U32("graphics/battle_anims/spri const u32 gBattleAnimSpritePal_PinkHeart2[] = INCBIN_U32("graphics/battle_anims/sprites/pink_heart_2.gbapal.lz"); const u32 gBattleAnimSpriteGfx_PinkHeart2[] = INCBIN_U32("graphics/battle_anims/sprites/pink_heart_2.4bpp.lz"); -const u32 gUnknown_08C08F0C[] = INCBIN_U32("graphics/battle_interface/unused_window.4bpp.lz"); -const u32 gUnknown_08C093C8[] = INCBIN_U32("graphics/battle_interface/unused_window.gbapal.lz"); +const u32 gBattleInterfaceGfx_UnusedWindow1[] = INCBIN_U32("graphics/battle_interface/unused_window.4bpp.lz"); +const u32 gBattleInterfacePal_UnusedWindow1[] = INCBIN_U32("graphics/battle_interface/unused_window.gbapal.lz"); -const u32 gUnknown_08C093F0[] = INCBIN_U32("graphics/interface/hp_numbers.4bpp.lz"); +const u32 gBattleInterfaceGfx_BattleBar[] = INCBIN_U32("graphics/battle_interface/battle_bar.4bpp.lz"); const u32 gBattleAnimSpriteGfx_SapDrip[] = INCBIN_U32("graphics/battle_anims/sprites/sap_drip.4bpp.lz"); const u32 gBattleAnimSpritePal_SapDrip[] = INCBIN_U32("graphics/battle_anims/sprites/sap_drip.gbapal.lz"); const u32 gBattleAnimSpritePal_SapDrip2[] = INCBIN_U32("graphics/battle_anims/sprites/sap_drip_2.gbapal.lz"); -const u32 gUnusedGfx_Window2[] = INCBIN_U32("graphics/battle_interface/unused_window2.4bpp.lz"); -const u32 gUnusedGfx_Window2Bar[] = INCBIN_U32("graphics/battle_interface/unused_window2bar.4bpp.lz"); +const u32 gBattleInterfaceGfx_UnusedWindow2[] = INCBIN_U32("graphics/battle_interface/unused_window2.4bpp.lz"); +const u32 gBattleInterfaceGfx_UnusedWindow2Bar[] = INCBIN_U32("graphics/battle_interface/unused_window2bar.4bpp.lz"); const u32 gBattleAnimSpriteGfx_Sparkle1[] = INCBIN_U32("graphics/battle_anims/sprites/sparkle_1.4bpp.lz"); const u32 gBattleAnimSpritePal_Sparkle1[] = INCBIN_U32("graphics/battle_anims/sprites/sparkle_1.gbapal.lz"); @@ -182,8 +506,8 @@ const u32 gBattleAnimSpriteGfx_HumanoidFoot[] = INCBIN_U32("graphics/battle_anim const u32 gBattleAnimSpriteGfx_MonsterFoot[] = INCBIN_U32("graphics/battle_anims/sprites/monster_foot.4bpp.lz"); const u32 gBattleAnimSpriteGfx_HumanoidHand[] = INCBIN_U32("graphics/battle_anims/sprites/humanoid_hand.4bpp.lz"); -const u32 gUnusedGfx_LineSketch[] = INCBIN_U32("graphics/unused/line_sketch.4bpp.lz"); -const u32 gUnusedPal_LineSketch[] = INCBIN_U32("graphics/unused/line_sketch.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_LineSketch[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch.4bpp.lz"); +const u32 gBattleAnimSpritePal_LineSketch[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch.gbapal.lz"); const u32 gBattleAnimSpriteGfx_YellowUnk[] = INCBIN_U32("graphics/battle_anims/sprites/yellow_unk.4bpp.lz"); const u32 gBattleAnimSpritePal_YellowUnk[] = INCBIN_U32("graphics/battle_anims/sprites/yellow_unk.gbapal.lz"); @@ -214,7 +538,7 @@ const u32 gBattleAnimSpritePal_SpinningGreenOrbs[] = INCBIN_U32("graphics/battle const u32 gBattleAnimSpriteGfx_Leaf[] = INCBIN_U32("graphics/battle_anims/sprites/leaf.4bpp.lz"); const u32 gBattleAnimSpritePal_Leaf[] = INCBIN_U32("graphics/battle_anims/sprites/leaf.gbapal.lz"); -const u32 gUnusedGfx_Metronome[] = INCBIN_U32("graphics/unused/metronome_hand_small.4bpp.lz"); // unused, was for metronome at one point +const u32 gBattleAnimSpriteGfx_MetronomeSmallHand[] = INCBIN_U32("graphics/battle_anims/unused/metronome_hand_small.4bpp.lz"); // unused, was for metronome at one point const u32 gBattleAnimSpritePal_Clapping[] = INCBIN_U32("graphics/battle_anims/sprites/clapping.gbapal.lz"); @@ -249,12 +573,13 @@ const u32 gBattleAnimSpritePal_Bell2[] = INCBIN_U32("graphics/battle_anims/sprit const u32 gBattleAnimSpriteGfx_PinkGlove[] = INCBIN_U32("graphics/battle_anims/sprites/pink_glove.4bpp.lz"); const u32 gBattleAnimSpritePal_PinkGlove[] = INCBIN_U32("graphics/battle_anims/sprites/pink_glove.gbapal.lz"); -const u16 gUnknown_C0CA1C[] = INCBIN_U16("graphics/unknown/unknown_C0CA1C.bin"); -const u16 gUnknown_C0CA40[] = INCBIN_U16("graphics/unknown/unknown_C0CA40.bin"); -const u16 gUnknown_C0CA64[] = INCBIN_U16("graphics/unknown/unknown_C0CA64.bin"); -const u32 gUnusedGfx8bpp_LineSketch2[] = INCBIN_U32("graphics/unused/line_sketch_2.8bpp.lz"); -const u16 gUnknown_C0CAE0[] = INCBIN_U16("graphics/unknown/unknown_C0CAE0.bin"); -const u32 gUnusedTilemap_LineSketch2[] = INCBIN_U32("graphics/unused/line_sketch_2.bin.lz"); +const u16 gBattleAnimUnused_Unknown1[] = INCBIN_U16("graphics/battle_anims/unused/unknown_1.bin"); +const u16 gBattleAnimUnused_Unknown2[] = INCBIN_U16("graphics/battle_anims/unused/unknown_2.bin"); +const u16 gBattleAnimUnused_Unknown3[] = INCBIN_U16("graphics/battle_anims/unused/unknown_3.bin"); + +const u32 gBattleAnimUnusedGfx_LineSketch2[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch_2.8bpp.lz"); +const u16 gBattleAnimUnusedPal_LineSketch2[] = INCBIN_U16("graphics/battle_anims/unused/line_sketch_2_pal.bin"); +const u32 gBattleAnimUnusedTilemap_LineSketch2[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch_2.bin.lz"); const u32 gBattleAnimSpriteGfx_BlueLines[] = INCBIN_U32("graphics/battle_anims/sprites/blue_lines.4bpp.lz"); const u32 gBattleAnimSpritePal_BlueLines[] = INCBIN_U32("graphics/battle_anims/sprites/blue_lines.gbapal.lz"); @@ -270,7 +595,7 @@ const u32 gBattleAnimSpritePal_RedTube[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimSpritePal_Amnesia[] = INCBIN_U32("graphics/battle_anims/sprites/amnesia.gbapal.lz"); const u32 gBattleAnimSpritePal_String2[] = INCBIN_U32("graphics/battle_anims/sprites/string_2.gbapal.lz"); -const u32 gUnknown_D0D2B4[] = INCBIN_U32("graphics/unknown/unknown_D0D2B4.bin.lz"); +const u32 gBattleAnimUnused_Unknown4[] = INCBIN_U32("graphics/battle_anims/unused/unknown_4.bin.lz"); const u32 gBattleAnimSpritePal_Pencil2[] = INCBIN_U32("graphics/battle_anims/sprites/pencil_2.gbapal.lz"); const u32 gBattleAnimSpritePal_Petal[] = INCBIN_U32("graphics/battle_anims/sprites/petal.gbapal.lz"); @@ -336,9 +661,9 @@ const u32 gUnusedPal_ColorFrames[] = INCBIN_U32("graphics/unused/color_frames.gb const u32 gBattleAnimSpriteGfx_RainDrops[] = INCBIN_U32("graphics/battle_anims/sprites/rain_drops.4bpp.lz"); -const u32 gUnusedGfx8bpp_WaterSplash [] = INCBIN_U32("graphics/unused/water_splash.8bpp.lz"); -const u32 gUnusedTilemap_WaterSplash[] = INCBIN_U32("graphics/unused/water_splash.bin.lz"); -const u32 gUnusedPalette_WaterSplash[] = INCBIN_U32("graphics/unused/water_splash.gbapal.lz"); +const u32 gBattleAnimUnusedGfx_WaterSplash[] = INCBIN_U32("graphics/battle_anims/unused/water_splash.8bpp.lz"); +const u32 gBattleAnimUnusedTilemap_WaterSplash[] = INCBIN_U32("graphics/battle_anims/unused/water_splash.bin.lz"); +const u32 gBattleAnimUnusedPal_WaterSplash[] = INCBIN_U32("graphics/battle_anims/unused/water_splash.gbapal.lz"); const u32 gUnusedGfx_BasicFrame[] = INCBIN_U32("graphics/unused/basic_frame.4bpp.lz"); const u32 gUnusedPal_BasicFrame[] = INCBIN_U32("graphics/unused/basic_frame.gbapal.lz"); @@ -350,7 +675,6 @@ const u16 gBattleInterface_BallStatusBarPal[] = INCBIN_U16("graphics/battle_inte const u16 gBattleInterface_BallDisplayPal[] = INCBIN_U16("graphics/battle_interface/ball_display.gbapal"); -//Originally an array? const u8 gHealthboxElementsGfxTable[] = INCBIN_U8("graphics/battle_interface/hpbar.4bpp", "graphics/battle_interface/expbar.4bpp", "graphics/battle_interface/status_psn.4bpp", @@ -360,17 +684,14 @@ const u8 gHealthboxElementsGfxTable[] = INCBIN_U8("graphics/battle_interface/hpb "graphics/battle_interface/status_brn.4bpp", "graphics/battle_interface/misc.4bpp", "graphics/battle_interface/hpbar_anim.4bpp", - "graphics/battle_interface/misc_frameend.4bpp"); - -const u8 gBattleInterface_BallDisplayGfx[] = INCBIN_U8("graphics/battle_interface/ball_display.4bpp"); - -//Originally an array? -const u8 gUnknown_08C1249C[] = INCBIN_U8("graphics/battle_interface/ball_display_unused_extra.4bpp"); -const u8 gBattleInterfaceGfx_Status2[] = INCBIN_U8("graphics/battle_interface/status2.4bpp"); // these three duplicate sets of graphics are for the opponent pokemon -const u8 gBattleInterfaceGfx_Status3[] = INCBIN_U8("graphics/battle_interface/status3.4bpp"); // and are also for use in double battles. they use dynamic palettes so -const u8 gBattleInterfaceGfx_Status4[] = INCBIN_U8("graphics/battle_interface/status4.4bpp"); // coloring them is an extreme headache and wont be done for now -const u8 gUnknown_D12FEC[] = INCBIN_U8("graphics/unknown/unknown_D12FEC.4bpp"); -const u8 gUnknown_D1300C[] = INCBIN_U8("graphics/unknown/unknown_D1300C.4bpp"); + "graphics/battle_interface/misc_frameend.4bpp", + "graphics/battle_interface/ball_display.4bpp", + "graphics/battle_interface/ball_display_unused_extra.4bpp", + "graphics/battle_interface/status2.4bpp", // these three duplicate sets of graphics are for the opponent pokemon + "graphics/battle_interface/status3.4bpp", // and are also for use in double battles. they use dynamic palettes so + "graphics/battle_interface/status4.4bpp", // coloring them is an extreme headache and wont be done for now + "graphics/battle_interface/healthbox_doubles_frameend.4bpp", + "graphics/battle_interface/healthbox_doubles_frameend_bar.4bpp"); const u32 gBattleInterfaceGfx_UnusedWindow3[] = INCBIN_U32("graphics/battle_interface/unused_window3.4bpp.lz"); const u32 gBattleInterfaceGfx_UnusedWindow4[] = INCBIN_U32("graphics/battle_interface/unused_window4.4bpp.lz"); @@ -433,39 +754,31 @@ const u32 gBattleAnimSpritePal_BlueFlames[] = INCBIN_U32("graphics/battle_anims/ const u32 gBattleAnimSpriteGfx_BlueFlames2[] = INCBIN_U32("graphics/battle_anims/sprites/blue_flames_2.4bpp.lz"); // Contest +const u32 gJPContestGfx1[] = INCBIN_U32("graphics/contest/japanese/composite_1.4bpp.lz"); +const u32 gJPContestPal[] = INCBIN_U32("graphics/contest/japanese/palette.gbapal.lz"); +const u32 gJPContestBgTilemap[] = INCBIN_U32("graphics/contest/japanese/bg.bin.lz"); +const u32 gJPContestWindowsTilemap[] = INCBIN_U32("graphics/contest/japanese/windows.bin.lz"); +const u32 gJPContestGfx2[] = INCBIN_U32("graphics/contest/japanese/composite_2.4bpp.lz"); -const u32 gUnusedGfx_OldContest[] = INCBIN_U32("graphics/unused/old_contest.4bpp.lz"); -const u32 gUnusedPal_OldContest[] = INCBIN_U32("graphics/unused/old_contest.gbapal.lz"); -const u32 gUnusedTilemap_OldContest[] = INCBIN_U32("graphics/unused/old_contest.bin.lz"); - -const u32 gUnknownTilemap_C15BC0[] = INCBIN_U32("graphics/unknown/unknown_C15BC0.bin.lz"); - -const u32 gUnusedGfx_OldContest2[] = INCBIN_U32("graphics/unused/old_contest_2.4bpp.lz"); -const u32 gOldContestPalette[] = INCBIN_U32("graphics/unused/old_contest_2.gbapal.lz"); -const u32 gOldContestGfx[] = INCBIN_U32("graphics/unused/old_contest_2.bin.lz"); - -const u32 gUnknown_08C17170[] = INCBIN_U32("graphics/unknown/unknown_C17170.bin.lz"); - -const u32 gUnknown_08C17410[] = INCBIN_U32("graphics/unknown/unknown_C17410.bin.lz"); - -const u32 gUnknown_08C1751C[] = INCBIN_U32("graphics/unknown/unknown_C1751C.bin.lz"); - -const u32 gUnknown_08C17980[] = INCBIN_U32("graphics/unknown/unknown_C17980.bin.lz"); - -const u32 gContestMiscGfx[] = INCBIN_U32("graphics/contest/misc.4bpp.lz"); +const u32 gContestInterfaceAudiencePalette[] = INCBIN_U32("graphics/contest/interface_audience.gbapal.lz"); +const u32 gContestAudienceTilemap[] = INCBIN_U32("graphics/contest/audience.bin.lz"); +const u32 gContestInterfaceTilemap[] = INCBIN_U32("graphics/contest/interface.bin.lz"); +const u32 gJPContestInterfaceTilemap[] = INCBIN_U32("graphics/contest/japanese/interface.bin.lz"); +const u32 gJPContestAudienceTilemap[] = INCBIN_U32("graphics/contest/japanese/audience.bin.lz"); +const u32 gContestCurtainTilemap[] = INCBIN_U32("graphics/contest/curtain.bin.lz"); +const u32 gContestInterfaceGfx[] = INCBIN_U32("graphics/contest/interface.4bpp.lz"); const u32 gContestAudienceGfx[] = INCBIN_U32("graphics/contest/audience.4bpp.lz"); - const u32 gContestFaces_Gfx[] = INCBIN_U32("graphics/contest/faces.4bpp.lz"); - const u32 gContestJudgeSymbolsGfx[] = INCBIN_U32("graphics/contest/judge_symbols.4bpp.lz"); -const u32 gContest3Pal[] = INCBIN_U32("graphics/contest/judge_symbols.gbapal.lz"); - +const u32 gContestJudgeSymbolsPal[] = INCBIN_U32("graphics/contest/judge_symbols.gbapal.lz"); const u8 gContestSliderHeart_Gfx[] = INCBIN_U8("graphics/contest/slider_heart.4bpp"); -const u32 gUnknownGfx_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.4bpp.lz"); -const u32 gUnknownPal_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.gbapal.lz"); +// JP equivalent of the Applause meter +const u32 gJPContestVoltageGfx[] = INCBIN_U32("graphics/contest/japanese/voltage.4bpp.lz"); +const u32 gJPContestVoltagePal[] = INCBIN_U32("graphics/contest/japanese/voltage.gbapal.lz"); +// Contest results const u32 gContestResults_Gfx[] = INCBIN_U32("graphics/contest/results_screen/tiles.4bpp.lz"); const u32 gContestResults_WinnerBanner_Tilemap[] = INCBIN_U32("graphics/contest/results_screen/winner_banner.bin.lz"); const u32 gContestResults_Interface_Tilemap[] = INCBIN_U32("graphics/contest/results_screen/interface.bin.lz"); @@ -477,6 +790,9 @@ const u32 gBattleAnimSpritePal_Impact[] = INCBIN_U32("graphics/battle_anims/spri const u32 gBattleAnimSpriteGfx_Particles[] = INCBIN_U32("graphics/battle_anims/sprites/particles.4bpp.lz"); +const u32 gBattleAnimSpriteGfx_Particles2[] = INCBIN_U32("graphics/battle_anims/sprites/particles2.4bpp.lz"); +const u32 gBattleAnimSpritePal_Particles2[] = INCBIN_U32("graphics/battle_anims/sprites/particles2.gbapal.lz"); + const u32 gBattleAnimSpriteGfx_CircleImpact[] = INCBIN_U32("graphics/battle_anims/sprites/circle_impact.4bpp.lz"); const u32 gBattleAnimSpritePal_CircleImpact[] = INCBIN_U32("graphics/battle_anims/sprites/circle_impact.gbapal.lz"); @@ -497,8 +813,8 @@ const u32 gBattleAnimSpritePal_IceCrystals[] = INCBIN_U32("graphics/battle_anims const u32 gBattleAnimSpriteGfx_IceSpikes[] = INCBIN_U32("graphics/battle_anims/sprites/ice_spikes.4bpp.lz"); -const u32 gUnusedGfx_OldBeatUp[] = INCBIN_U32("graphics/unused/old_beatup.4bpp.lz"); -const u32 gUnusedPal_OldBeatUp[] = INCBIN_U32("graphics/unused/old_beatup.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_OldBeatUp[] = INCBIN_U32("graphics/battle_anims/unused/old_beatup.4bpp.lz"); +const u32 gBattleAnimSpritePal_OldBeatUp[] = INCBIN_U32("graphics/battle_anims/unused/old_beatup.gbapal.lz"); const u32 gBattleAnimSpriteGfx_Orbs[] = INCBIN_U32("graphics/battle_anims/sprites/orbs.4bpp.lz"); const u32 gBattleAnimSpritePal_Orbs[] = INCBIN_U32("graphics/battle_anims/sprites/orbs.gbapal.lz"); @@ -546,9 +862,9 @@ const u32 gBattleAnimSpritePal_RazorLeaf[] = INCBIN_U32("graphics/battle_anims/s const u32 gBattleAnimSpriteGfx_MistCloud[] = INCBIN_U32("graphics/battle_anims/sprites/mist_cloud.4bpp.lz"); const u32 gBattleAnimSpritePal_MistCloud[] = INCBIN_U32("graphics/battle_anims/sprites/mist_cloud.gbapal.lz"); -const u32 gUnknownGfx_D1C060[] = INCBIN_U32("graphics/unknown/unknown_D1C060.4bpp.lz"); -const u32 gUnknownPal_D1C060[] = INCBIN_U32("graphics/unknown/unknown_D1C060.gbapal.lz"); -const u32 gUnknownTilemap_D1C060[] = INCBIN_U32("graphics/unknown/unknown_D1C060.bin.lz"); +const u32 gBattleAnimUnusedGfx_Lights[] = INCBIN_U32("graphics/battle_anims/unused/lights.4bpp.lz"); +const u32 gBattleAnimUnusedPal_Lights[] = INCBIN_U32("graphics/battle_anims/unused/lights.gbapal.lz"); +const u32 gBattleAnimUnusedTilemap_Lights[] = INCBIN_U32("graphics/battle_anims/unused/lights.bin.lz"); const u32 gBattleAnimSpriteGfx_WhirlwindLines[] = INCBIN_U32("graphics/battle_anims/sprites/whirlwind_lines.4bpp.lz"); const u32 gBattleAnimSpritePal_WhirlwindLines[] = INCBIN_U32("graphics/battle_anims/sprites/whirlwind_lines.gbapal.lz"); @@ -589,9 +905,9 @@ const u32 gMetalShineGfx[] = INCBIN_U32("graphics/battle_anims/masks/metal_shine const u32 gMetalShinePalette[] = INCBIN_U32("graphics/battle_anims/masks/metal_shine.gbapal.lz"); const u32 gMetalShineTilemap[] = INCBIN_U32("graphics/battle_anims/masks/metal_shine.bin.lz"); -const u32 gUnusedGfx_Goosuto[] = INCBIN_U32("graphics/unused/goosuto.4bpp.lz"); // ghost -const u32 gUnusedPal_Goosuto[] = INCBIN_U32("graphics/unused/goosuto.gbapal.lz"); -const u32 gUnusedTilemap_Goosuto[] = INCBIN_U32("graphics/unused/goosuto.bin.lz"); +const u32 gUnusedGfx_Goosuto[] = INCBIN_U32("graphics/battle_anims/unused/goosuto.4bpp.lz"); // ghost +const u32 gUnusedPal_Goosuto[] = INCBIN_U32("graphics/battle_anims/unused/goosuto.gbapal.lz"); +const u32 gUnusedTilemap_Goosuto[] = INCBIN_U32("graphics/battle_anims/unused/goosuto.bin.lz"); const u32 gBattleAnimSpriteGfx_YellowStar[] = INCBIN_U32("graphics/battle_anims/sprites/yellow_star.4bpp.lz"); const u32 gBattleAnimSpritePal_YellowStar[] = INCBIN_U32("graphics/battle_anims/sprites/yellow_star.gbapal.lz"); @@ -941,23 +1257,23 @@ const u32 gBattleAnimSpritePal_Meteor[] = INCBIN_U32("graphics/battle_anims/spri const u32 gBattleAnimSpriteGfx_FlatRock[] = INCBIN_U32("graphics/battle_anims/sprites/flat_rock.4bpp.lz"); const u32 gBattleAnimSpritePal_FlatRock[] = INCBIN_U32("graphics/battle_anims/sprites/flat_rock.gbapal.lz"); -const u32 gUnknownPal_C2F9E0[] = INCBIN_U32("graphics/unknown/unknown_C2F9E0.gbapal.lz"); +const u32 gBattleAnimUnusedPal_Unknown2[] = INCBIN_U32("graphics/battle_anims/unused/unknown_2.gbapal.lz"); #include "data/graphics/pokemon.h" #include "data/graphics/trainers.h" -const u32 gUnknown_08D778F0[] = INCBIN_U32("graphics/battle_transitions/vs_frame.4bpp.lz"); -const u32 gUnknown_08D779D8[] = INCBIN_U32("graphics/battle_transitions/vs_frame.bin.lz"); -const u32 gUnknown_08D77AE4[] = INCBIN_U32("graphics/battle_transitions/vs_frame.gbapal.lz"); +const u32 gBattleVSFrame_Gfx[] = INCBIN_U32("graphics/battle_transitions/vs_frame.4bpp.lz"); +const u32 gBattleVSFrame_Tilemap[] = INCBIN_U32("graphics/battle_transitions/vs_frame.bin.lz"); +const u32 gBattleVSFrame_Pal[] = INCBIN_U32("graphics/battle_transitions/vs_frame.gbapal.lz"); const u32 gVsLettersGfx[] = INCBIN_U32("graphics/battle_transitions/vs.4bpp.lz"); #include "data/graphics/battle_terrain.h" // Battle Dome -const u32 gDomeTourneyBg_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_bg.4bpp.lz"); +const u32 gDomeTourneyTree_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_tree.4bpp.lz"); const u32 gDomeTourneyLine_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_line.4bpp.lz"); // the red glow mask for the tourney advancement lines -const u32 gDomeTourneyLineMask_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_line_mask_map.bin.lz"); +const u32 gDomeTourneyTree_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_tree.bin.lz"); const u32 gDomeTourneyLineDown_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_line_down_map.bin.lz"); const u32 gDomeTourneyLineUp_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_line_up_map.bin.lz"); const u32 gDomeTourneyInfoCard_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_info_card.4bpp.lz"); @@ -972,7 +1288,7 @@ const u32 gBattleArenaJudgementSymbolsGfx[] = INCBIN_U32("graphics/battle_fronti const u32 gBattleArenaJudgementSymbolsPalette[] = INCBIN_U32("graphics/battle_frontier/arena_judgement_symbols.gbapal.lz"); const u32 gBattleWindowTextPalette[] = INCBIN_U32("graphics/battle_interface/text.gbapal.lz"); -const u16 gUnknown_08D85620[] = INCBIN_U16("graphics/battle_frontier/text_pp.gbapal"); +const u16 gPPTextPalette[] = INCBIN_U16("graphics/battle_interface/text_pp.gbapal"); const u16 gTilesetAnims_BattleDomePals0_0[] = INCBIN_U16("graphics/battle_frontier/dome_anim1.gbapal"); const u16 gTilesetAnims_BattleDomePals0_1[] = INCBIN_U16("graphics/battle_frontier/dome_anim2.gbapal"); @@ -981,19 +1297,22 @@ const u16 gTilesetAnims_BattleDomePals0_3[] = INCBIN_U16("graphics/battle_fronti static const u16 sUnused0[] = {0x13F, 0x119, 0x113, 0x10E}; -const u16 gUnknown_08D856C8[] = INCBIN_U16("graphics/battle_frontier/pyramid_light.gbapal"); // unfaded pal for the player light in battle pyramid +const u16 gBattlePyramidFloor_Pal[] = INCBIN_U16("graphics/battle_frontier/pyramid_floor.gbapal"); -const u32 gUnknown_08D857A8[] = INCBIN_U32("graphics/battle_frontier/battle_tilemap1.bin.lz"); -const u32 gUnknown_08D85A1C[] = INCBIN_U32("graphics/battle_frontier/battle_tilemap2.bin.lz"); +const u32 gMultiBattleIntroBg_Opponent_Tilemap[] = INCBIN_U32("graphics/battle_frontier/multi_battle_intro_bg_opponent.bin.lz"); +const u32 gMultiBattleIntroBg_Player_Tilemap[] = INCBIN_U32("graphics/battle_frontier/multi_battle_intro_bg_player.bin.lz"); #include "data/graphics/intro_scene.h" const u32 gBattleAnimSpriteGfx_FlyingDirt[] = INCBIN_U32("graphics/battle_anims/sprites/flying_dirt.4bpp.lz"); +const u32 gBattleAnimSpritePal_FlyingDirt[] = INCBIN_U32("graphics/battle_anims/sprites/flying_dirt.gbapal.lz"); const u32 gBattleAnimBgTilemap_Sandstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.bin.lz"); const u32 gBattleAnimBgImage_Sandstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.4bpp.lz"); -const u32 gBattleAnimSpritePal_FlyingDirt[] = INCBIN_U32("graphics/battle_anims/sprites/flying_dirt.gbapal.lz"); +const u32 gBattleAnimBgTilemap_Windstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.bin.lz"); +const u32 gBattleAnimBgImage_Windstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/windstorm_brew.4bpp.lz"); +const u32 gBattleAnimSpritePal_Windstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/windstorm_brew.gbapal.lz"); const u32 gBattleAnimSpriteGfx_MetalSoundWaves[] = INCBIN_U32("graphics/battle_anims/sprites/metal_sound_waves.4bpp.lz"); const u32 gBattleAnimSpritePal_MetalSoundWaves[] = INCBIN_U32("graphics/battle_anims/sprites/metal_sound_waves.gbapal.lz"); @@ -1053,10 +1372,181 @@ const u32 gBattleAnimBgTilemap_Ghost[] = INCBIN_U32("graphics/battle_anims/backg const u32 gBattleAnimSpritePal_WhipHit[] = INCBIN_U32("graphics/battle_anims/sprites/whip_hit.gbapal.lz"); -const u32 gBattleAnimBgPalette_Solarbeam[] = INCBIN_U32("graphics/battle_anims/backgrounds/solarbeam.gbapal.lz"); +const u32 gBattleAnimBgPalette_SolarBeam[] = INCBIN_U32("graphics/battle_anims/backgrounds/solarbeam.gbapal.lz"); +const u32 gBattleAnimBgTilemap_SolarBeam[] = INCBIN_U32("graphics/battle_anims/backgrounds/solarbeam.bin.lz"); // Unused -const u32 gUnknown_E6BC04[] = INCBIN_U32("graphics/unknown/unknown_E6BC04.bin.lz"); +const u32 gBattleAnimBgPalette_MagmaStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/magma_storm.gbapal.lz"); +//new battle bgs + +const u32 gBattleAnimBgImage_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.4bpp.lz"); +const u32 gBattleAnimBgPalette_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.gbapal.lz"); +const u32 gBattleAnimBgTilemap_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.bin.lz"); + +const u32 gBattleAnimBgPalette_RockWrecker[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/rock_wrecker.gbapal.lz"); + +const u32 gBattleAnimBgTilemap_GigaImpactPlayer[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/giga_impact_player.bin.lz"); +const u32 gBattleAnimBgTilemap_GigaImpactOpponent[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/giga_impact_opponent.bin.lz"); +const u32 gBattleAnimBgTilemap_GigaImpactContest[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/giga_impact_contest.bin.lz"); +const u32 gBattleAnimBgImage_GigaImpact[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/giga_impact.4bpp.lz"); +const u32 gBattleAnimBgPalette_GigaImpact[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/giga_impact.gbapal.lz"); + +const u32 gBattleAnimBgImage_SpacialRend[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/spacial_rend.4bpp.lz"); +const u32 gBattleAnimBgPalette_SpacialRend[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/spacial_rend.gbapal.lz"); + +const u32 gBattleAnimBgPalette_SludgeWave[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sludge_wave.gbapal.lz"); + +const u32 gBattleAnimBgImage_Aeroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aeroblast_tiles.4bpp.lz"); +const u32 gBattleAnimBgPalette_Aeroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aeroblast.gbapal.lz"); +const u32 gBattleAnimBgTilemap_Aeroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aeroblast_map.bin.lz"); + +const u32 gBattleAnimBgPalette_AuraSphere[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aura_sphere.gbapal.lz"); + +const u32 gBattleAnimBgImage_BlackholeEclipse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/blackhole_eclipse.4bpp.lz"); +const u32 gBattleAnimBgPalette_BlackholeEclipse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/blackhole_eclipse.gbapal.lz"); +const u32 gBattleAnimBgTilemap_BlackholeEclipse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/blackhole_eclipse.bin.lz"); + +const u32 gBattleAnimBgImage_BloomDoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bloom_doom.4bpp.lz"); +const u32 gBattleAnimBgPalette_BloomDoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bloom_doom.gbapal.lz"); +const u32 gBattleAnimBgTilemap_BloomDoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bloom_doom.bin.lz"); + +const u32 gBattleAnimBgImage_BoltStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bolt_strike.4bpp.lz"); +const u32 gBattleAnimBgPalette_BoltStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bolt_strike.gbapal.lz"); +const u32 gBattleAnimBgTilemap_BoltStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bolt_strike.bin.lz"); + +const u32 gBattleAnimBgImage_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.4bpp.lz"); +const u32 gBattleAnimBgPalette_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.gbapal.lz"); +const u32 gBattleAnimBgTilemap_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin.lz"); + +const u32 gBattleAnimBgPalette_DynamaxCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dynamax_cannon.gbapal.lz"); + +const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/electric_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/electric_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/electric_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/fire1.4bpp.lz"); +const u32 gBattleAnimBgPalette_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/fire1.gbapal.lz"); +const u32 gBattleAnimBgTilemap_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/fire1.bin.lz"); + +const u32 gBattleAnimBgPalette_Fire2[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/fire2.gbapal.lz"); + +const u32 gBattleAnimBgImage_FocusBlast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/focus_blast.4bpp.lz"); +const u32 gBattleAnimBgPalette_FocusBlast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/focus_blast.gbapal.lz"); +const u32 gBattleAnimBgTilemap_FocusBlast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/focus_blast.bin.lz"); + +const u32 gBattleAnimBgPalette_GarbageFalls[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/garbage_falls.gbapal.lz"); + +const u32 gBattleAnimBgImage_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/grassy_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/grassy_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/grassy_terrain.bin.lz"); + +const u32 gBattleAnimBgPalette_GunkShot[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/gunk_shot.gbapal.lz"); + +const u32 gBattleAnimBgImage_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_cannon.4bpp.lz"); +const u32 gBattleAnimBgPalette_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_cannon.gbapal.lz"); +const u32 gBattleAnimBgTilemap_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_cannon.bin.lz"); + +const u32 gBattleAnimBgImage_HydroPump[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_pump.4bpp.lz"); +const u32 gBattleAnimBgPalette_HydroPump[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_pump.gbapal.lz"); +const u32 gBattleAnimBgTilemap_HydroPump[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_pump.bin.lz"); + +const u32 gBattleAnimBgPalette_HyperBeam[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hyper_beam.gbapal.lz"); + +const u32 gBattleAnimBgPalette_HyperspaceFury[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hyperspace_fury.gbapal.lz"); + +const u32 gBattleAnimBgImage_InfernoOverdrive[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/inferno_overdrive.4bpp.lz"); +const u32 gBattleAnimBgPalette_InfernoOverdrive[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/inferno_overdrive.gbapal.lz"); +const u32 gBattleAnimBgTilemap_InfernoOverdrive[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/inferno_overdrive.bin.lz"); + +const u32 gBattleAnimBgImage_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.4bpp.lz"); +const u32 gBattleAnimBgPalette_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.gbapal.lz"); +const u32 gBattleAnimBgTilemap_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.bin.lz"); + +const u32 gBattleAnimBgImage_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.4bpp.lz"); +const u32 gBattleAnimBgPalette_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.gbapal.lz"); +const u32 gBattleAnimBgTilemap_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.bin.lz"); + +const u32 gBattleAnimBgImage_MaxLightning[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/max_lightning.4bpp.lz"); +const u32 gBattleAnimBgPalette_MaxLightning[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/max_lightning.gbapal.lz"); +const u32 gBattleAnimBgTilemap_MaxLightning[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/max_lightning.bin.lz"); + +const u32 gBattleAnimBgImage_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/misty_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/misty_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/misty_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/neverending_nightmare.4bpp.lz"); +const u32 gBattleAnimBgPalette_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/neverending_nightmare.gbapal.lz"); +const u32 gBattleAnimBgTilemap_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/neverending_nightmare.bin.lz"); + +const u32 gBattleAnimBgImage_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/nightmare.4bpp.lz"); +const u32 gBattleAnimBgPalette_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/nightmare.gbapal.lz"); +const u32 gBattleAnimBgTilemap_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/nightmare.bin.lz"); + +const u32 gBattleAnimBgPalette_PoisonFalls[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/poison_falls.gbapal.lz"); + +const u32 gBattleAnimBgPalette_PsychicNew[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/psychic.gbapal.lz"); + +const u32 gBattleAnimBgImage_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/psychic_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/psychic_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/psychic_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/shattered_psyche.4bpp.lz"); +const u32 gBattleAnimBgPalette_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/shattered_psyche.gbapal.lz"); +const u32 gBattleAnimBgTilemap_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/shattered_psyche.bin.lz"); + +const u32 gBattleAnimBgImage_SkyDay[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sky_day.4bpp.lz"); +const u32 gBattleAnimBgPalette_SkyDay[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sky_day.gbapal.lz"); +const u32 gBattleAnimBgTilemap_SkyDay[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sky_day.bin.lz"); + +const u32 gBattleAnimBgPalette_SkyAfternoon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sky_afternoon.gbapal.lz"); + +const u32 gBattleAnimBgPalette_SkyNight[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sky_night.gbapal.lz"); + +const u32 gBattleAnimBgImage_SnuggleForever[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/snuggle_forever.4bpp.lz"); +const u32 gBattleAnimBgPalette_SnuggleForever[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/snuggle_forever.gbapal.lz"); +const u32 gBattleAnimBgTilemap_SnuggleForever[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/snuggle_forever.bin.lz"); + +const u32 gBattleAnimBgImage_SoulStealing7StarStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.4bpp.lz"); +const u32 gBattleAnimBgPalette_SoulStealing7StarStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.gbapal.lz"); +const u32 gBattleAnimBgTilemap_SoulStealing7StarStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.bin.lz"); + +const u32 gBattleAnimBgPalette_TectonicRage[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/tectonic_rage.gbapal.lz"); + +const u32 gBattleAnimBgImage_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.4bpp.lz"); +const u32 gBattleAnimBgPalette_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.gbapal.lz"); +const u32 gBattleAnimBgTilemap_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.bin.lz"); + +const u32 gBattleAnimBgPalette_MagicRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/magic_room.gbapal.lz"); + +const u32 gBattleAnimBgPalette_WonderRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/wonder_room.gbapal.lz"); + +const u32 gBattleAnimBgImage_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.4bpp.lz"); +const u32 gBattleAnimBgPalette_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.gbapal.lz"); +const u32 gBattleAnimBgTilemap_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.bin.lz"); + +const u32 gBattleAnimBgImage_WaterPulse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/water_pulse.4bpp.lz"); +const u32 gBattleAnimBgPalette_WaterPulse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/water_pulse.gbapal.lz"); +const u32 gBattleAnimBgTilemap_WaterPulse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/water_pulse.bin.lz"); + +const u32 gBattleAnimBgImage_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.4bpp.lz"); +const u32 gBattleAnimBgPalette_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.gbapal.lz"); +const u32 gBattleAnimBgTilemap_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.bin.lz"); + +const u32 gBattleAnimBgPalette_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.gbapal.lz"); +const u32 gBattleAnimBgTilemap_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.bin.lz"); + +const u32 gBattleAnimBgImage_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.4bpp.lz"); +const u32 gBattleAnimBgPalette_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.gbapal.lz"); +const u32 gBattleAnimBgTilemap_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.bin.lz"); + +const u32 gBattleAnimBgImage_ZMoveMountain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_mountain.4bpp.lz"); +const u32 gBattleAnimBgPalette_ZMoveMountain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_mountain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_ZMoveMountain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_mountain.bin.lz"); + +const u32 gBattleAnimSpritePal_SteelBeam[] = INCBIN_U32("graphics/battle_anims/sprites/new/steel_beam.gbapal.lz"); +const u32 gBattleAnimBgPalette_SteelBeam[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/steel_beam_bg.gbapal.lz"); + +// misc const u32 gBerryBlenderCenter_Gfx[] = INCBIN_U32("graphics/berry_blender/center.8bpp.lz"); const u32 gBerryBlenderOuter_Gfx[] = INCBIN_U32("graphics/berry_blender/outer.4bpp.lz"); const u32 gBerryBlenderOuter_Tilemap[] = INCBIN_U32("graphics/berry_blender/outer_map.bin.lz"); @@ -1116,13 +1606,13 @@ const u32 gBattleAnimSpritePal_Slash2[] = INCBIN_U32("graphics/battle_anims/spri const u32 gBattleAnimSpriteGfx_WhiteShadow[] = INCBIN_U32("graphics/battle_anims/sprites/white_shadow.4bpp.lz"); const u32 gBattleAnimSpritePal_WhiteShadow[] = INCBIN_U32("graphics/battle_anims/sprites/white_shadow.gbapal.lz"); -const u32 gPartyMenuBg_Gfx[] = INCBIN_U32("graphics/interface/party_menu_bg.4bpp.lz"); -const u32 gPartyMenuBg_Pal[] = INCBIN_U32("graphics/interface/party_menu_bg.gbapal.lz"); -const u32 gPartyMenuBg_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_bg.bin.lz"); +const u32 gPartyMenuBg_Gfx[] = INCBIN_U32("graphics/party_menu/bg.4bpp.lz"); +const u32 gPartyMenuBg_Pal[] = INCBIN_U32("graphics/party_menu/bg.gbapal.lz"); +const u32 gPartyMenuBg_Tilemap[] = INCBIN_U32("graphics/party_menu/bg.bin.lz"); -const u32 gPartyMenuPokeball_Gfx[] = INCBIN_U32("graphics/interface/party_menu_pokeball.4bpp.lz"); -const u32 gPartyMenuPokeballSmall_Gfx[] = INCBIN_U32("graphics/interface/party_menu_pokeball_small.4bpp.lz"); //unused -const u32 gPartyMenuPokeball_Pal[] = INCBIN_U32("graphics/interface/party_menu_pokeball.gbapal.lz"); +const u32 gPartyMenuPokeball_Gfx[] = INCBIN_U32("graphics/party_menu/pokeball.4bpp.lz"); +const u32 gPartyMenuPokeballSmall_Gfx[] = INCBIN_U32("graphics/party_menu/pokeball_small.4bpp.lz"); //unused +const u32 gPartyMenuPokeball_Pal[] = INCBIN_U32("graphics/party_menu/pokeball.gbapal.lz"); const u32 gStatusGfx_Icons[] = INCBIN_U32("graphics/interface/status_icons.4bpp.lz"); const u32 gStatusPal_Icons[] = INCBIN_U32("graphics/interface/status_icons.gbapal.lz"); @@ -1130,51 +1620,50 @@ const u32 gStatusPal_Icons[] = INCBIN_U32("graphics/interface/status_icons.gbapa const u32 gMoveTypes_Gfx[] = INCBIN_U32("graphics/types/move_types.4bpp.lz"); const u32 gMoveTypes_Pal[] = INCBIN_U32("graphics/types/move_types.gbapal.lz"); -const u32 gSummaryMoveSelect_Gfx[] = INCBIN_U32("graphics/interface/summary_frames.4bpp.lz"); -const u32 gSummaryMoveSelect_Pal[] = INCBIN_U32("graphics/interface/summary_frames.gbapal.lz"); +const u32 gSummaryMoveSelect_Gfx[] = INCBIN_U32("graphics/summary_screen/move_select.4bpp.lz"); +const u32 gSummaryMoveSelect_Pal[] = INCBIN_U32("graphics/summary_screen/move_select.gbapal.lz"); -const u32 gStatusScreenBitmap[] = INCBIN_U32("graphics/interface/status_screen.4bpp.lz"); -const u32 gStatusScreenPalette[] = INCBIN_U32("graphics/interface/status_screen.gbapal.lz"); -const u32 gPageInfoTilemap[] = INCBIN_U32("graphics/interface/status_screen.bin.lz"); -const u32 gPageSkillsTilemap[] = INCBIN_U32("graphics/interface/status_tilemap1.bin.lz"); -const u32 gPageBattleMovesTilemap[] = INCBIN_U32("graphics/interface/status_tilemap2.bin.lz"); -const u32 gPageContestMovesTilemap[] = INCBIN_U32("graphics/interface/status_tilemap3.bin.lz"); -const u32 gUnknown_08D98CC8[] = INCBIN_U32("graphics/interface/status_tilemap0.bin.lz"); +const u32 gSummaryScreen_Gfx[] = INCBIN_U32("graphics/summary_screen/tiles.4bpp.lz"); +const u32 gSummaryScreen_Pal[] = INCBIN_U32("graphics/summary_screen/tiles.gbapal.lz"); +const u32 gSummaryPage_Info_Tilemap[] = INCBIN_U32("graphics/summary_screen/page_info.bin.lz"); +const u32 gSummaryPage_Skills_Tilemap[] = INCBIN_U32("graphics/summary_screen/page_skills.bin.lz"); +const u32 gSummaryPage_BattleMoves_Tilemap[] = INCBIN_U32("graphics/summary_screen/page_battle_moves.bin.lz"); +const u32 gSummaryPage_ContestMoves_Tilemap[] = INCBIN_U32("graphics/summary_screen/page_contest_moves.bin.lz"); +const u32 gSummaryPage_InfoEgg_Tilemap[] = INCBIN_U32("graphics/summary_screen/page_info_egg.bin.lz"); -const u32 gBagMaleTiles[] = INCBIN_U32("graphics/misc/bag_male.4bpp.lz"); -const u32 gBagFemaleTiles[] = INCBIN_U32("graphics/misc/bag_female.4bpp.lz"); -const u32 gBagPalette[] = INCBIN_U32("graphics/misc/bag.gbapal.lz"); +const u32 gBagMaleTiles[] = INCBIN_U32("graphics/bag/bag_male.4bpp.lz"); +const u32 gBagFemaleTiles[] = INCBIN_U32("graphics/bag/bag_female.4bpp.lz"); +const u32 gBagPalette[] = INCBIN_U32("graphics/bag/bag.gbapal.lz"); -const u32 gBagScreenMale_Pal[] = INCBIN_U32("graphics/interface/bag_screen_male.gbapal.lz"); -const u32 gBagScreenFemale_Pal[] = INCBIN_U32("graphics/interface/bag_screen_female.gbapal.lz"); +const u32 gBagScreenMale_Pal[] = INCBIN_U32("graphics/bag/menu_male.gbapal.lz"); +const u32 gBagScreenFemale_Pal[] = INCBIN_U32("graphics/bag/menu_female.gbapal.lz"); -const u32 gBagScreen_Gfx[] = INCBIN_U32("graphics/interface/bag_screen.4bpp.lz"); -const u32 gBagScreen_GfxTileMap[] = INCBIN_U32("graphics/interface/bag_screen_tilemap.bin.lz"); +const u32 gBagScreen_Gfx[] = INCBIN_U32("graphics/bag/menu.4bpp.lz"); +const u32 gBagScreen_GfxTileMap[] = INCBIN_U32("graphics/bag/menu.bin.lz"); -const u32 gBattleFrontierGfx_PyramidBag[] = INCBIN_U32("graphics/interface/bag_pyramid.4bpp.lz"); -const u32 gBattleFrontierGfx_PyramidBag_Pal[] = INCBIN_U32("graphics/interface/bag_pyramid.gbapal.lz"); // female palette is first and male is second. -const u32 gBattleFrontierGfx_PyramidBagTileMap[] = INCBIN_U32("graphics/interface/bag_pyramid_tilemap.bin.lz"); +const u32 gBattlePyramidBag_Gfx[] = INCBIN_U32("graphics/bag/bag_pyramid.4bpp.lz"); +const u32 gBattlePyramidBag_Pal[] = INCBIN_U32("graphics/bag/bag_pyramid.gbapal.lz"); // female palette is first and male is second. +const u32 gBattlePyramidBagTilemap[] = INCBIN_U32("graphics/bag/menu_pyramid.bin.lz"); +const u32 gBattlePyramidBagInterface_Pal[] = INCBIN_U32("graphics/bag/menu_pyramid.gbapal.lz"); -const u32 gUnknown_08D9AF44[] = INCBIN_U32("graphics/unknown/unknown_D9AF44.gbapal.lz"); +const u32 gSwapLineGfx[] = INCBIN_U32("graphics/interface/swap_line.4bpp.lz"); +const u32 gSwapLinePal[] = INCBIN_U32("graphics/interface/swap_line.gbapal.lz"); -const u32 gBagSwapLineGfx[] = INCBIN_U32("graphics/interface/bag_swap.4bpp.lz"); -const u32 gBagSwapLinePal[] = INCBIN_U32("graphics/interface/bag_swap.gbapal.lz"); - -const u32 gBuyMenuFrame_Gfx[] = INCBIN_U32("graphics/interface/mart_frame.4bpp.lz"); -const u32 gMenuMoneyPal[] = INCBIN_U32("graphics/interface/mart_frame.gbapal.lz"); -const u32 gBuyMenuFrame_Tilemap[] = INCBIN_U32("graphics/interface/mart_frame.bin.lz"); - -const u32 gMenuMoneyGfx[] = INCBIN_U32("graphics/interface/money.4bpp.lz"); +const u32 gShopMenu_Gfx[] = INCBIN_U32("graphics/shop/menu.4bpp.lz"); +const u32 gShopMenu_Pal[] = INCBIN_U32("graphics/shop/menu.gbapal.lz"); +const u32 gShopMenu_Tilemap[] = INCBIN_U32("graphics/shop/menu.bin.lz"); +const u32 gShopMenuMoney_Gfx[] = INCBIN_U32("graphics/shop/money.4bpp.lz"); // Pokeblock -const u32 gMenuPokeblock_Gfx[] = INCBIN_U32("graphics/interface/pokeblock_case_frame.4bpp.lz"); -const u32 gMenuPokeblock_Pal[] = INCBIN_U32("graphics/interface/pokeblock_case_frame.gbapal.lz"); +const u32 gMenuPokeblock_Gfx[] = INCBIN_U32("graphics/pokeblock/menu.4bpp.lz"); +const u32 gMenuPokeblock_Pal[] = INCBIN_U32("graphics/pokeblock/menu.gbapal.lz"); -const u32 gMenuPokeblockDevice_Gfx[] = INCBIN_U32("graphics/interface/pokeblock_device.4bpp.lz"); -const u32 gMenuPokeblockDevice_Pal[] = INCBIN_U32("graphics/interface/pokeblock_device.gbapal.lz"); +const u32 gMenuPokeblockDevice_Gfx[] = INCBIN_U32("graphics/pokeblock/device.4bpp.lz"); +const u32 gMenuPokeblockDevice_Pal[] = INCBIN_U32("graphics/pokeblock/device.gbapal.lz"); + +const u32 gMenuPokeblock_Tilemap[] = INCBIN_U32("graphics/pokeblock/menu.bin.lz"); -const u32 gMenuPokeblock_Tilemap[] = INCBIN_U32("graphics/interface/pokeblock.bin.lz"); const u32 gPokeblock_Gfx[] = INCBIN_U32("graphics/pokeblock/pokeblock.4bpp.lz"); const u32 gPokeblockRed_Pal[] = INCBIN_U32("graphics/pokeblock/red.gbapal.lz"); const u32 gPokeblockBlue_Pal[] = INCBIN_U32("graphics/pokeblock/blue.gbapal.lz"); @@ -1191,7 +1680,7 @@ const u32 gPokeblockBlack_Pal[] = INCBIN_U32("graphics/pokeblock/black.gbapal.lz const u32 gPokeblockWhite_Pal[] = INCBIN_U32("graphics/pokeblock/white.gbapal.lz"); const u32 gPokeblockGold_Pal[] = INCBIN_U32("graphics/pokeblock/gold.gbapal.lz"); -const u32 gPokeblockFeedBg_Tilemap[] = INCBIN_U32("graphics/interface/pokeblock_feeding_bg_map.bin.lz"); +const u32 gPokeblockFeedBg_Tilemap[] = INCBIN_U32("graphics/pokeblock/feeding_bg.bin.lz"); #include "data/graphics/berries.h" #include "data/graphics/rayquaza_scene.h" @@ -1264,9 +1753,9 @@ const u32 gPokedexSearchMenu_Gfx[] = INCBIN_U32("graphics/pokedex/search_menu.4b const u32 gPokedexSearchMenuNational_Tilemap[] = INCBIN_U32("graphics/pokedex/search_menu_national.bin.lz"); const u32 gPokedexSearchMenuHoenn_Tilemap[] = INCBIN_U32("graphics/pokedex/search_menu_hoenn.bin.lz"); -const u16 gSummaryScreenPowAcc_Tilemap[] = INCBIN_U16("graphics/interface/powacc_tilemap.bin"); -const u16 gSummaryScreenAppealJam_Tilemap[] = INCBIN_U16("graphics/interface/appealjam_tilemap.bin"); -const u16 gSummaryScreenWindow_Tilemap[] = INCBIN_U16("graphics/interface/summary.bin"); +const u16 gSummaryScreen_MoveEffect_Battle_Tilemap[] = INCBIN_U16("graphics/summary_screen/effect_battle.bin"); +const u16 gSummaryScreen_MoveEffect_Contest_Tilemap[] = INCBIN_U16("graphics/summary_screen/effect_contest.bin"); +const u16 gSummaryScreen_MoveEffect_Cancel_Tilemap[] = INCBIN_U16("graphics/summary_screen/effect_cancel.bin"); const u16 gIntroCopyright_Pal[] = INCBIN_U16("graphics/intro/copyright.gbapal"); const u32 gIntroCopyright_Gfx[] = INCBIN_U32("graphics/intro/copyright.4bpp.lz"); @@ -1275,14 +1764,12 @@ const u32 gIntroCopyright_Tilemap[] = INCBIN_U32("graphics/intro/copyright.bin.l const u16 gPokedexAreaScreenAreaUnknown_Pal[] = INCBIN_U16("graphics/pokedex/area_unknown.gbapal"); const u32 gPokedexAreaScreenAreaUnknown_Gfx[] = INCBIN_U32("graphics/pokedex/area_unknown.4bpp.lz"); -// seems to be fire red leftovers, but the menu elements is reused in the item menu for TM descriptions. +const u16 gMenuInfoElements1_Pal[] = INCBIN_U16("graphics/interface/menu_info1.gbapal"); +const u16 gMenuInfoElements2_Pal[] = INCBIN_U16("graphics/interface/menu_info2.gbapal"); +const u16 gMenuInfoElements3_Pal[] = INCBIN_U16("graphics/interface/menu_info3.gbapal"); +const u8 gMenuInfoElements_Gfx[] = INCBIN_U8("graphics/interface/menu_info.4bpp"); -const u16 gFireRedMenuElements1_Pal[] = INCBIN_U16("graphics/interface_fr/menu1.gbapal"); -const u16 gFireRedMenuElements2_Pal[] = INCBIN_U16("graphics/interface_fr/menu2.gbapal"); -const u16 gFireRedMenuElements3_Pal[] = INCBIN_U16("graphics/interface_fr/menu3.gbapal"); -const u8 gFireRedMenuElements_Gfx[] = INCBIN_U8("graphics/interface_fr/menu.4bpp"); //the types are reused for item menu - -const u8 gBagMenuHMIcon_Gfx[] = INCBIN_U8("graphics/interface/hm.4bpp"); +const u8 gBagMenuHMIcon_Gfx[] = INCBIN_U8("graphics/bag/hm.4bpp"); // contest results screen @@ -1336,8 +1823,8 @@ const u32 gRegionMapCityZoomText_Gfx[] = INCBIN_U32("graphics/pokenav/city_zoom_ const u16 gPokenavConditionCancel_Pal[] = INCBIN_U16("graphics/pokenav/condition/cancel.gbapal"); const u8 gPokenavConditionCancel_Gfx[] = INCBIN_U8("graphics/pokenav/condition/cancel.4bpp"); -const u16 gMonMarkingsMenu_Pal[] = INCBIN_U16("graphics/misc/mon_markings_menu.gbapal"); -const u8 gMonMarkingsMenu_Gfx[] = INCBIN_U8("graphics/misc/mon_markings_menu.4bpp"); +const u16 gMonMarkingsMenu_Pal[] = INCBIN_U16("graphics/interface/mon_markings_menu.gbapal"); +const u8 gMonMarkingsMenu_Gfx[] = INCBIN_U8("graphics/interface/mon_markings_menu.4bpp"); const u16 gBerryBlenderMiscPalette[] = INCBIN_U16("graphics/berry_blender/misc.gbapal"); const u16 gBerryBlenderArrowPalette[] = INCBIN_U16("graphics/berry_blender/arrow.gbapal"); @@ -1407,17 +1894,31 @@ const u32 gStorageSystemPartyMenu_Tilemap[] = INCBIN_U32("graphics/pokemon_stora // naming screen -const u16 gNamingScreenMenu_Pal[] = INCBIN_U16("graphics/naming_screen/menu.gbapal"); -const u32 gNamingScreenMenu_Gfx[] = INCBIN_U32("graphics/naming_screen/menu.4bpp.lz"); -const u8 gNamingScreenRWindow_Gfx[] = INCBIN_U8("graphics/naming_screen/rwindow.4bpp"); -const u8 gNamingScreenROptions_Gfx[] = INCBIN_U8("graphics/naming_screen/roptions.4bpp"); -const u8 gNamingScreenCursor_Gfx[] = INCBIN_U8("graphics/naming_screen/cursor.4bpp"); -const u8 gNamingScreenPageButton_Gfx[] = INCBIN_U8("graphics/naming_screen/page_button.4bpp"); -const u8 gNamingScreenInputArrow_Gfx[] = INCBIN_U8("graphics/naming_screen/input_arrow.4bpp"); -const u8 gNamingScreenUnderscore_Gfx[] = INCBIN_U8("graphics/naming_screen/underscore.4bpp"); -const u32 gNamingScreenBackground_Tilemap[] = INCBIN_U32("graphics/naming_screen/background.bin.lz"); -const u32 gNamingScreenKeyboardUpper_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_upper.bin.lz"); -const u32 gNamingScreenKeyboardLower_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_lower.bin.lz"); +const u16 gNamingScreenMenu_Pal[6][16] = +{ + INCBIN_U16("graphics/naming_screen/menu.gbapal"), + INCBIN_U16("graphics/naming_screen/page_swap_upper.gbapal"), + INCBIN_U16("graphics/naming_screen/page_swap_lower.gbapal"), + INCBIN_U16("graphics/naming_screen/page_swap_others.gbapal"), + INCBIN_U16("graphics/naming_screen/buttons.gbapal"), + INCBIN_U16("graphics/naming_screen/cursor.gbapal"), +}; +const u32 gNamingScreenMenu_Gfx[] = INCBIN_U32("graphics/naming_screen/menu.4bpp.lz"); +const u32 gNamingScreenPageSwapFrame_Gfx[] = INCBIN_U32("graphics/naming_screen/page_swap_frame.4bpp"); +const u32 gNamingScreenBackButton_Gfx[] = INCBIN_U32("graphics/naming_screen/back_button.4bpp"); +const u32 gNamingScreenOKButton_Gfx[] = INCBIN_U32("graphics/naming_screen/ok_button.4bpp"); +const u32 gNamingScreenPageSwapUpper_Gfx[] = INCBIN_U32("graphics/naming_screen/page_swap_upper.4bpp"); +const u32 gNamingScreenPageSwapLower_Gfx[] = INCBIN_U32("graphics/naming_screen/page_swap_lower.4bpp"); +const u32 gNamingScreenPageSwapOthers_Gfx[] = INCBIN_U32("graphics/naming_screen/page_swap_others.4bpp"); +const u32 gNamingScreenCursor_Gfx[] = INCBIN_U32("graphics/naming_screen/cursor.4bpp"); +const u32 gNamingScreenCursorSquished_Gfx[] = INCBIN_U32("graphics/naming_screen/cursor_squished.4bpp"); +const u32 gNamingScreenCursorFilled_Gfx[] = INCBIN_U32("graphics/naming_screen/cursor_filled.4bpp"); +const u32 gNamingScreenPageSwapButton_Gfx[] = INCBIN_U32("graphics/naming_screen/page_swap_button.4bpp"); +const u32 gNamingScreenInputArrow_Gfx[] = INCBIN_U32("graphics/naming_screen/input_arrow.4bpp"); +const u32 gNamingScreenUnderscore_Gfx[] = INCBIN_U32("graphics/naming_screen/underscore.4bpp"); +const u32 gNamingScreenBackground_Tilemap[] = INCBIN_U32("graphics/naming_screen/background.bin.lz"); +const u32 gNamingScreenKeyboardUpper_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_upper.bin.lz"); +const u32 gNamingScreenKeyboardLower_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_lower.bin.lz"); const u32 gNamingScreenKeyboardSymbols_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_symbols.bin.lz"); // union room chat @@ -1454,9 +1955,9 @@ const u32 gTilesetTiles_General[] = INCBIN_U32("data/tilesets/primary/general/ti // trade/egg hatch -const u16 gTradeGba_Pal[] = INCBIN_U16("graphics/link/gba.gbapal"); -const u16 gTradeGba2_Pal[] = INCBIN_U16("graphics/link/gba_pal2.gbapal"); -const u8 gTradeGba_Gfx[] = INCBIN_U8("graphics/link/gba.4bpp"); +const u16 gTradeGba_Pal[] = INCBIN_U16("graphics/trade/gba.gbapal"); +const u16 gTradeGba2_Pal[] = INCBIN_U16("graphics/trade/gba_pal2.gbapal"); +const u8 gTradeGba_Gfx[] = INCBIN_U8("graphics/trade/gba.4bpp"); static const u16 sEmptyPal[16] = {0}; @@ -1467,8 +1968,8 @@ const u16 gTradeMenu_Pal[] = INCBIN_U16("graphics/trade/menu.gbapal"); const u16 gTradeCursor_Pal[] = INCBIN_U16("graphics/trade/cursor.gbapal"); const u8 gTradeMenu_Gfx[] = INCBIN_U8("graphics/trade/menu.4bpp"); const u8 gTradeCursor_Gfx[] = INCBIN_U8("graphics/trade/cursor.4bpp"); -const u16 gUnused_DDCEE4[] = INCBIN_U16("graphics/unused/unused_DDCEE4.bin"); -const u16 gUnknown_08DDCF04[] = INCBIN_U16("graphics/trade/unknown_DDCF04.bin"); +const u16 gTradeUnused_Tilemap[] = INCBIN_U16("graphics/trade/unused.bin"); +const u16 gTradeMenu_Tilemap[] = INCBIN_U16("graphics/trade/menu.bin"); const u16 gTradeMenuMonBox_Tilemap[] = INCBIN_U16("graphics/trade/menu_mon_box.bin"); const u16 gMessageBox_Pal[] = INCBIN_U16("graphics/text_window/message_box.gbapal"); @@ -1510,39 +2011,25 @@ const u16 gMonIconPalettes[][16] = INCBIN_U16("graphics/pokemon/icon_palettes/pal5.gbapal"), }; -const u16 gTitleScreenBgPalettes[] = INCBIN_U16("graphics/title_screen/pokemon_logo.gbapal", - "graphics/title_screen/rayquaza_and_clouds.gbapal"); +const u16 gTitleScreenBgPalettes[] = INCBIN_U16("graphics/title_screen/pokemon_logo.gbapal", + "graphics/title_screen/rayquaza_and_clouds.gbapal"); +const u16 gTitleScreenEmeraldVersionPal[] = INCBIN_U16("graphics/title_screen/emerald_version.gbapal"); +const u32 gTitleScreenCloudsTilemap[] = INCBIN_U32("graphics/title_screen/clouds.bin.lz"); +const u32 gTitleScreenPokemonLogoGfx[] = INCBIN_U32("graphics/title_screen/pokemon_logo.8bpp.lz"); +const u32 gTitleScreenEmeraldVersionGfx[] = INCBIN_U32("graphics/title_screen/emerald_version.8bpp.lz"); +const u16 gTitleScreenPressStartPal[] = INCBIN_U16("graphics/title_screen/press_start.gbapal"); +const u32 gTitleScreenPressStartGfx[] = INCBIN_U32("graphics/title_screen/press_start.4bpp.lz"); +const u32 gTitleScreenPokemonLogoTilemap[] = INCBIN_U32("graphics/title_screen/pokemon_logo.bin.lz"); -const u16 gTitleScreenEmeraldVersionPal[] = INCBIN_U16("graphics/title_screen/emerald_version.gbapal"); - -const u32 gUnknown_08DDE458[] = INCBIN_U32("graphics/title_screen/title_screen1.bin.lz"); - -const u32 gTitleScreenPokemonLogoGfx[] = INCBIN_U32("graphics/title_screen/pokemon_logo.8bpp.lz"); - -const u32 gTitleScreenEmeraldVersionGfx[] = INCBIN_U32("graphics/title_screen/emerald_version.8bpp.lz"); - -const u16 gTitleScreenPressStartPal[] = INCBIN_U16("graphics/title_screen/press_start.gbapal"); -const u32 gTitleScreenPressStartGfx[] = INCBIN_U32("graphics/title_screen/press_start.4bpp.lz"); - -const u32 gUnknown_08DE0644[] = INCBIN_U32("graphics/title_screen/title_screen2.bin.lz"); - -const u16 gFrontierPassBg_Pal[][16] = INCBIN_U16("graphics/frontier_pass/bg.gbapal");// size in LoadPalette calls is reported as 0xD0 << 1, which is 0x1A0, but palette is only 0x100 bytes long so it loads garbage as well -const u32 gFrontierPassBg_Gfx[] = INCBIN_U32("graphics/frontier_pass/bg.4bpp.lz"); -const u32 gFrontierPassMapAndCard_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_and_card.8bpp.lz"); -const u32 gFrontierPassBg_Tilemap[] = INCBIN_U32("graphics/frontier_pass/bg.bin.lz"); +// size in LoadPalette calls is reported as 0xD0 << 1, which is 0x1A0, but palette is only 0x100 bytes long so it loads garbage as well +const u16 gFrontierPassBg_Pal[][16] = INCBIN_U16("graphics/frontier_pass/bg.gbapal"); +const u32 gFrontierPassBg_Gfx[] = INCBIN_U32("graphics/frontier_pass/bg.4bpp.lz"); +const u32 gFrontierPassMapAndCard_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_and_card.8bpp.lz"); +const u32 gFrontierPassBg_Tilemap[] = INCBIN_U32("graphics/frontier_pass/bg.bin.lz"); const u16 gFrontierPassCancelButton_Tilemap[] = INCBIN_U16("graphics/frontier_pass/cancel.bin"); const u16 gFrontierPassCancelButtonHighlighted_Tilemap[] = INCBIN_U16("graphics/frontier_pass/cancel_highlighted.bin"); // Berry Crush const u16 gBerryCrush_Crusher_Pal[] = INCBIN_U16("graphics/berry_crush/crusher.gbapal"); const u32 gBerryCrush_Crusher_Gfx[] = INCBIN_U32("graphics/berry_crush/crusher.4bpp.lz"); -const u32 gBerryCrush_Crusher_Tilemap[] = INCBIN_U32("graphics/berry_crush/crusher.bin.lz"); - -// random garbage at the end. -static const u8 sEmpty3[0x54BAC] = {0}; -static const u8 sUnused1[] = {0x0D, 0x00, 0x58, 0x02}; -static const u8 sEmpty4[0x1145] = {0}; -static const u8 sUnused2[] = {0x02}; -static const u8 sEmpty5[0x3242] = {0}; -static const u8 sUnused3[] = {0x40}; -static const u8 sEmpty6[0x13] = {0}; +const u32 gBerryCrush_TextWindows_Tilemap[] = INCBIN_U32("graphics/berry_crush/text_windows.bin.lz"); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 6c4f00ebaf..42e17e93db 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -52,6 +52,8 @@ struct HallofFameTeam struct HallofFameMon mon[PARTY_SIZE]; }; +STATIC_ASSERT(sizeof(struct HallofFameTeam) * HALL_OF_FAME_MAX_TEAMS <= SECTOR_DATA_SIZE * NUM_HOF_SECTORS, HallOfFameFreeSpace); + struct HofGfx { u16 state; @@ -64,8 +66,6 @@ static EWRAM_DATA u32 sHofFadePalettes = 0; static EWRAM_DATA struct HallofFameTeam *sHofMonPtr = NULL; static EWRAM_DATA struct HofGfx *sHofGfxPtr = NULL; -extern struct MusicPlayerInfo gMPlayInfo_BGM; - static void ClearVramOamPltt_LoadHofPal(void); static void LoadHofGfx(void); static void InitHofBgs(void); @@ -101,7 +101,7 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2); static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2); static void Task_DoDomeConfetti(u8 taskId); -static void SpriteCB_HofConfetti(struct Sprite* sprite); +static void SpriteCB_HofConfetti(struct Sprite *sprite); static const struct BgTemplate sHof_BgTemplates[] = { @@ -182,7 +182,7 @@ static const struct OamData sOamData_Confetti = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -345,7 +345,6 @@ static const struct HallofFameMon sDummyFameMon = static const u8 sHallOfFame_SlotOrder[] = { 2, 1, 3, 6, 4, 5, - 0, 0 }; // code @@ -485,16 +484,16 @@ static void Task_Hof_InitMonData(u8 taskId) static void Task_Hof_InitTeamSaveData(u8 taskId) { u16 i; - struct HallofFameTeam* lastSavedTeam = (struct HallofFameTeam*)(gDecompressionBuffer); + struct HallofFameTeam *lastSavedTeam = (struct HallofFameTeam *)(gDecompressionBuffer); if (!gHasHallOfFameRecords) { - memset(gDecompressionBuffer, 0, 0x2000); + memset(gDecompressionBuffer, 0, SECTOR_SIZE * NUM_HOF_SECTORS); } else { - if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK) - memset(gDecompressionBuffer, 0, 0x2000); + if (LoadGameSave(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK) + memset(gDecompressionBuffer, 0, SECTOR_SIZE * NUM_HOF_SECTORS); } for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++) @@ -504,8 +503,8 @@ static void Task_Hof_InitTeamSaveData(u8 taskId) } if (i >= HALL_OF_FAME_MAX_TEAMS) { - struct HallofFameTeam *afterTeam = (struct HallofFameTeam*)(gDecompressionBuffer); - struct HallofFameTeam *beforeTeam = (struct HallofFameTeam*)(gDecompressionBuffer); + struct HallofFameTeam *afterTeam = (struct HallofFameTeam *)(gDecompressionBuffer); + struct HallofFameTeam *beforeTeam = (struct HallofFameTeam *)(gDecompressionBuffer); afterTeam++; for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, beforeTeam++, afterTeam++) { @@ -515,9 +514,9 @@ static void Task_Hof_InitTeamSaveData(u8 taskId) } *lastSavedTeam = *sHofMonPtr; - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3); - CopyWindowToVram(0, 3); + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_Hof_TrySaveData; } @@ -530,10 +529,8 @@ static void Task_Hof_TrySaveData(u8 taskId) UnsetBgTilemapBuffer(3); FreeAllWindowBuffers(); - if (sHofGfxPtr != NULL) - FREE_AND_SET_NULL(sHofGfxPtr); - if (sHofMonPtr != NULL) - FREE_AND_SET_NULL(sHofMonPtr); + TRY_FREE_AND_SET_NULL(sHofGfxPtr); + TRY_FREE_AND_SET_NULL(sHofMonPtr); DestroyTask(taskId); } @@ -588,7 +585,7 @@ static void Task_Hof_DisplayMon(u8 taskId) if (currMon->species == SPECIES_EGG) destY += 10; - spriteId = CreatePicSprite2(currMon->species, currMon->tid, currMon->personality, 1, startX, startY, currMonId, 0xFFFF); + spriteId = CreateMonPicSprite_Affine(currMon->species, currMon->tid, currMon->personality, MON_PIC_AFFINE_FRONT, startX, startY, currMonId, TAG_NONE); gSprites[spriteId].tDestinationX = destX; gSprites[spriteId].tDestinationY = destY; gSprites[spriteId].data[0] = 0; @@ -678,7 +675,7 @@ static void Task_Hof_DoConfetti(u8 taskId) } BeginNormalPaletteFade(sHofFadePalettes, 0, 12, 12, RGB(16, 29, 24)); FillWindowPixelBuffer(0, PIXEL_FILL(0)); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].tFrameCount = 7; gTasks[taskId].func = Task_Hof_WaitToDisplayPlayer; } @@ -703,7 +700,7 @@ static void Task_Hof_DisplayPlayer(u8 taskId) ShowBg(0); ShowBg(1); ShowBg(3); - gTasks[taskId].tPlayerSpriteID = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 120, 72, 6, 0xFFFF); + gTasks[taskId].tPlayerSpriteID = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), TRUE, 120, 72, 6, TAG_NONE); AddWindow(&sHof_WindowTemplate); LoadWindowGfx(1, gSaveBlock2Ptr->optionsWindowFrameType, 0x21D, 0xD0); LoadPalette(GetTextWindowPalette(1), 0xE0, 0x20); @@ -725,9 +722,9 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); HallOfFame_PrintPlayerInfo(1, 2); - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized2(0, 1, gText_LeagueChamp, 0, NULL, 2, 1, 3); - CopyWindowToVram(0, 3); + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_LeagueChamp, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_Hof_ExitOnKeyPressed; } } @@ -774,10 +771,8 @@ static void Task_Hof_HandleExit(u8 taskId) ResetBgsAndClearDma3BusyFlags(0); DestroyTask(taskId); - if (sHofGfxPtr != NULL) - FREE_AND_SET_NULL(sHofGfxPtr); - if (sHofMonPtr != NULL) - FREE_AND_SET_NULL(sHofMonPtr); + TRY_FREE_AND_SET_NULL(sHofGfxPtr); + TRY_FREE_AND_SET_NULL(sHofMonPtr); StartCredits(); } @@ -826,7 +821,7 @@ void CB2_DoHallOfFamePC(void) case 3: if (!LoadHofBgs()) { - struct HallofFameTeam *fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer); + struct HallofFameTeam *fameTeam = (struct HallofFameTeam *)(gDecompressionBuffer); fameTeam->mon[0] = sDummyFameMon; ComputerScreenOpenEffect(0, 0, 0); SetVBlankCallback(VBlankCB_HallOfFame); @@ -855,7 +850,7 @@ void CB2_DoHallOfFamePC(void) gTasks[taskId].tMonSpriteId(i) = SPRITE_NONE; } - sHofMonPtr = AllocZeroed(0x2000); + sHofMonPtr = AllocZeroed(SECTOR_SIZE * NUM_HOF_SECTORS); SetMainCallback2(CB2_HallOfFame); } break; @@ -864,17 +859,17 @@ void CB2_DoHallOfFamePC(void) static void Task_HofPC_CopySaveData(u8 taskId) { - sub_81980F0(0, 0x1E, 0, 0xC, 0x226); - if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK) + HofPCTopBar_AddWindow(0, 30, 0, 12, 0x226); + if (LoadGameSave(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK) { gTasks[taskId].func = Task_HofPC_PrintDataIsCorrupted; } else { u16 i; - struct HallofFameTeam* savedTeams; + struct HallofFameTeam *savedTeams; - CpuCopy16(gDecompressionBuffer, sHofMonPtr, 0x2000); + CpuCopy16(gDecompressionBuffer, sHofMonPtr, SECTOR_SIZE * NUM_HOF_SECTORS); savedTeams = sHofMonPtr; for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++) { @@ -895,7 +890,7 @@ static void Task_HofPC_CopySaveData(u8 taskId) static void Task_HofPC_DrawSpritesPrintText(u8 taskId) { - struct HallofFameTeam* savedTeams = sHofMonPtr; + struct HallofFameTeam *savedTeams = sHofMonPtr; struct HallofFameMon* currMon; u16 i; @@ -936,7 +931,7 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId) if (currMon->species == SPECIES_EGG) posY += 10; - spriteId = CreateMonPicSprite(currMon->species, currMon->tid, currMon->personality, 1, posX, posY, i, 0xFFFF); + spriteId = CreateMonPicSprite(currMon->species, currMon->tid, currMon->personality, TRUE, posX, posY, i, TAG_NONE); gSprites[spriteId].oam.priority = 1; gTasks[taskId].tMonSpriteId(i) = spriteId; } @@ -952,16 +947,16 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_HOFNumber); if (gTasks[taskId].tCurrTeamNo <= 0) - sub_8198204(gStringVar4, gText_PickCancel, 0, 0, TRUE); + HofPCTopBar_PrintPair(gStringVar4, gText_PickCancel, FALSE, 0, TRUE); else - sub_8198204(gStringVar4, gText_PickNextCancel, 0, 0, TRUE); + HofPCTopBar_PrintPair(gStringVar4, gText_PickNextCancel, FALSE, 0, TRUE); gTasks[taskId].func = Task_HofPC_PrintMonInfo; } static void Task_HofPC_PrintMonInfo(u8 taskId) { - struct HallofFameTeam* savedTeams = sHofMonPtr; + struct HallofFameTeam *savedTeams = sHofMonPtr; struct HallofFameMon* currMon; u16 i; u16 currMonID; @@ -978,14 +973,14 @@ static void Task_HofPC_PrintMonInfo(u8 taskId) currMonID = gTasks[taskId].tMonSpriteId(gTasks[taskId].tCurrMonId); gSprites[currMonID].oam.priority = 0; - sHofFadePalettes = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; + sHofFadePalettes = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ PALETTES_OBJECTS; BlendPalettesUnfaded(sHofFadePalettes, 0xC, RGB(16, 29, 24)); currMon = &savedTeams->mon[gTasks[taskId].tCurrMonId]; if (currMon->species != SPECIES_EGG) { StopCryAndClearCrySongs(); - PlayCry1(currMon->species, 0); + PlayCry_Normal(currMon->species, 0); } HallOfFame_PrintMonInfo(currMon, 0, 14); @@ -1019,7 +1014,7 @@ static void Task_HofPC_HandleInput(u8 taskId) if (IsCryPlayingOrClearCrySongs()) { StopCryAndClearCrySongs(); - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } @@ -1029,7 +1024,7 @@ static void Task_HofPC_HandleInput(u8 taskId) if (IsCryPlayingOrClearCrySongs()) { StopCryAndClearCrySongs(); - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } @@ -1047,10 +1042,10 @@ static void Task_HofPC_HandleInput(u8 taskId) static void Task_HofPC_HandlePaletteOnExit(u8 taskId) { - struct HallofFameTeam* fameTeam; + struct HallofFameTeam *fameTeam; CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); - fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer); + fameTeam = (struct HallofFameTeam *)(gDecompressionBuffer); fameTeam->mon[0] = sDummyFameMon; ComputerScreenCloseEffect(0, 0, 0); gTasks[taskId].func = Task_HofPC_HandleExit; @@ -1075,17 +1070,15 @@ static void Task_HofPC_HandleExit(u8 taskId) HideBg(0); HideBg(1); HideBg(3); - sub_8198314(); + HofPCTopBar_RemoveWindow(); FreeAllWindowBuffers(); UnsetBgTilemapBuffer(1); UnsetBgTilemapBuffer(3); ResetBgsAndClearDma3BusyFlags(0); DestroyTask(taskId); - if (sHofGfxPtr != NULL) - FREE_AND_SET_NULL(sHofGfxPtr); - if (sHofMonPtr != NULL) - FREE_AND_SET_NULL(sHofMonPtr); + TRY_FREE_AND_SET_NULL(sHofGfxPtr); + TRY_FREE_AND_SET_NULL(sHofMonPtr); ReturnFromHallOfFamePC(); } @@ -1093,10 +1086,10 @@ static void Task_HofPC_HandleExit(u8 taskId) static void Task_HofPC_PrintDataIsCorrupted(u8 taskId) { - sub_8198180(gText_AButtonExit, 8, TRUE); - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized2(0, 1, gText_HOFCorrupted, 0, NULL, 2, 1, 3); - CopyWindowToVram(0, 3); + HofPCTopBar_Print(gText_AButtonExit, 8, TRUE); + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_HOFCorrupted, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_HofPC_ExitOnButtonPress; } @@ -1116,8 +1109,8 @@ static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2) { FillWindowPixelBuffer(0, PIXEL_FILL(0)); PutWindowTilemap(0); - AddTextPrinterParameterized3(0, 1, GetStringCenterAlignXOffset(1, gText_WelcomeToHOF, 0xD0), 1, sMonInfoTextColors, 0, gText_WelcomeToHOF); - CopyWindowToVram(0, 3); + AddTextPrinterParameterized3(0, FONT_NORMAL, GetStringCenterAlignXOffset(FONT_NORMAL, gText_WelcomeToHOF, 0xD0), 1, sMonInfoTextColors, 0, gText_WelcomeToHOF); + CopyWindowToVram(0, COPYWIN_FULL); } static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u8 unused2) @@ -1152,7 +1145,7 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u *(stringPtr)++ = CHAR_QUESTION_MARK; } stringPtr[0] = EOS; - AddTextPrinterParameterized3(0, 1, 0x10, 1, sMonInfoTextColors, -1, text); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0x10, 1, sMonInfoTextColors, TEXT_SKIP_DRAW, text); } // nick, species names, gender and level @@ -1160,14 +1153,14 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u text[POKEMON_NAME_LENGTH] = EOS; if (currMon->species == SPECIES_EGG) { - width = GetStringCenterAlignXOffset(1, text, 0xD0); - AddTextPrinterParameterized3(0, 1, width, 1, sMonInfoTextColors, -1, text); - CopyWindowToVram(0, 3); + width = GetStringCenterAlignXOffset(FONT_NORMAL, text, 0xD0); + AddTextPrinterParameterized3(0, FONT_NORMAL, width, 1, sMonInfoTextColors, TEXT_SKIP_DRAW, text); + CopyWindowToVram(0, COPYWIN_FULL); } else { - width = GetStringRightAlignXOffset(1, text, 0x80); - AddTextPrinterParameterized3(0, 1, width, 1, sMonInfoTextColors, -1, text); + width = GetStringRightAlignXOffset(FONT_NORMAL, text, 0x80); + AddTextPrinterParameterized3(0, FONT_NORMAL, width, 1, sMonInfoTextColors, TEXT_SKIP_DRAW, text); text[0] = CHAR_SLASH; stringPtr = StringCopy(text + 1, gSpeciesNames[currMon->species]); @@ -1188,17 +1181,17 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u } stringPtr[0] = EOS; - AddTextPrinterParameterized3(0, 1, 0x80, 1, sMonInfoTextColors, -1, text); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0x80, 1, sMonInfoTextColors, TEXT_SKIP_DRAW, text); stringPtr = StringCopy(text, gText_Level); ConvertIntToDecimalStringN(stringPtr, currMon->lvl, STR_CONV_MODE_LEFT_ALIGN, 3); - AddTextPrinterParameterized3(0, 1, 0x24, 0x11, sMonInfoTextColors, -1, text); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0x24, 0x11, sMonInfoTextColors, TEXT_SKIP_DRAW, text); stringPtr = StringCopy(text, gText_IDNumber); ConvertIntToDecimalStringN(stringPtr, (u16)(currMon->tid), STR_CONV_MODE_LEADING_ZEROS, 5); - AddTextPrinterParameterized3(0, 1, 0x68, 0x11, sMonInfoTextColors, -1, text); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0x68, 0x11, sMonInfoTextColors, TEXT_SKIP_DRAW, text); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); } } @@ -1211,23 +1204,23 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2) FillWindowPixelBuffer(1, PIXEL_FILL(1)); PutWindowTilemap(1); DrawStdFrameWithCustomTileAndPalette(1, FALSE, 0x21D, 0xD); - AddTextPrinterParameterized3(1, 1, 0, 1, sPlayerInfoTextColors, -1, gText_Name); + AddTextPrinterParameterized3(1, FONT_NORMAL, 0, 1, sPlayerInfoTextColors, TEXT_SKIP_DRAW, gText_Name); - width = GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 0x70); - AddTextPrinterParameterized3(1, 1, width, 1, sPlayerInfoTextColors, -1, gSaveBlock2Ptr->playerName); + width = GetStringRightAlignXOffset(FONT_NORMAL, gSaveBlock2Ptr->playerName, 0x70); + AddTextPrinterParameterized3(1, FONT_NORMAL, width, 1, sPlayerInfoTextColors, TEXT_SKIP_DRAW, gSaveBlock2Ptr->playerName); trainerId = (gSaveBlock2Ptr->playerTrainerId[0]) | (gSaveBlock2Ptr->playerTrainerId[1] << 8); - AddTextPrinterParameterized3(1, 1, 0, 0x11, sPlayerInfoTextColors, 0, gText_IDNumber); + AddTextPrinterParameterized3(1, FONT_NORMAL, 0, 0x11, sPlayerInfoTextColors, 0, gText_IDNumber); text[0] = (trainerId % 100000) / 10000 + CHAR_0; text[1] = (trainerId % 10000) / 1000 + CHAR_0; text[2] = (trainerId % 1000) / 100 + CHAR_0; text[3] = (trainerId % 100) / 10 + CHAR_0; text[4] = (trainerId % 10) / 1 + CHAR_0; text[5] = EOS; - width = GetStringRightAlignXOffset(1, text, 0x70); - AddTextPrinterParameterized3(1, 1, width, 0x11, sPlayerInfoTextColors, -1, text); + width = GetStringRightAlignXOffset(FONT_NORMAL, text, 0x70); + AddTextPrinterParameterized3(1, FONT_NORMAL, width, 0x11, sPlayerInfoTextColors, TEXT_SKIP_DRAW, text); - AddTextPrinterParameterized3(1, 1, 0, 0x21, sPlayerInfoTextColors, -1, gText_Time); + AddTextPrinterParameterized3(1, FONT_NORMAL, 0, 0x21, sPlayerInfoTextColors, TEXT_SKIP_DRAW, gText_Time); text[0] = (gSaveBlock2Ptr->playTimeHours / 100) + CHAR_0; text[1] = (gSaveBlock2Ptr->playTimeHours % 100) / 10 + CHAR_0; text[2] = (gSaveBlock2Ptr->playTimeHours % 10) + CHAR_0; @@ -1242,10 +1235,10 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2) text[5] = (gSaveBlock2Ptr->playTimeMinutes % 10) + CHAR_0; text[6] = EOS; - width = GetStringRightAlignXOffset(1, text, 0x70); - AddTextPrinterParameterized3(1, 1, width, 0x21, sPlayerInfoTextColors, -1, text); + width = GetStringRightAlignXOffset(FONT_NORMAL, text, 0x70); + AddTextPrinterParameterized3(1, FONT_NORMAL, width, 0x21, sPlayerInfoTextColors, TEXT_SKIP_DRAW, text); - CopyWindowToVram(1, 3); + CopyWindowToVram(1, COPYWIN_FULL); } static void ClearVramOamPltt_LoadHofPal(void) @@ -1298,12 +1291,12 @@ static void InitHofBgs(void) InitBgsFromTemplates(0, sHof_BgTemplates, ARRAY_COUNT(sHof_BgTemplates)); SetBgTilemapBuffer(1, sHofGfxPtr->tilemap1); SetBgTilemapBuffer(3, sHofGfxPtr->tilemap2); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); } static bool8 LoadHofBgs(void) @@ -1376,7 +1369,7 @@ static void SpriteCB_GetOnScreenAndAnimate(struct Sprite *sprite) #define sSineIdx data[0] #define sExtraY data[1] -static void SpriteCB_HofConfetti(struct Sprite* sprite) +static void SpriteCB_HofConfetti(struct Sprite *sprite) { if (sprite->y2 > 120) { @@ -1401,7 +1394,7 @@ static void SpriteCB_HofConfetti(struct Sprite* sprite) static bool8 CreateHofConfettiSprite(void) { u8 spriteID; - struct Sprite* sprite; + struct Sprite *sprite; s16 posX = Random() % DISPLAY_WIDTH; s16 posY = -(Random() % 8); diff --git a/src/heal_location.c b/src/heal_location.c index 5eda24d67a..ab8dc52650 100644 --- a/src/heal_location.c +++ b/src/heal_location.c @@ -1,6 +1,5 @@ #include "global.h" #include "heal_location.h" -#include "constants/maps.h" #include "constants/heal_locations.h" #include "data/heal_locations.h" diff --git a/src/hof_pc.c b/src/hof_pc.c index f74448cca6..79ba4b4b46 100644 --- a/src/hof_pc.c +++ b/src/hof_pc.c @@ -14,7 +14,7 @@ static void Task_WaitForPaletteFade(u8); void AccessHallOfFamePC(void) { SetMainCallback2(CB2_DoHallOfFamePC); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } void ReturnFromHallOfFamePC(void) @@ -25,7 +25,7 @@ void ReturnFromHallOfFamePC(void) static void ReshowPCMenuAfterHallOfFamePC(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); Overworld_PlaySpecialMapMusic(); ScriptMenu_CreatePCMultichoice(); ScriptMenu_DisplayPCStartupPrompt(); diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c index fa6867f2c5..51a5d13993 100644 --- a/src/image_processing_effects.c +++ b/src/image_processing_effects.c @@ -28,14 +28,14 @@ static void ApplyImageEffect_PersonalityColor(u8); static void ApplyImageEffect_RedChannelGrayscale(u8); static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8); static void AddPointillismPoints(u16); -static u16 ConvertColorToGrayscale(u16*); -static u16 QuantizePixel_Blur(u16*, u16*, u16*); -static u16 QuantizePixel_PersonalityColor(u16*, u8); -static u16 QuantizePixel_BlackAndWhite(u16*); -static u16 QuantizePixel_BlackOutline(u16*, u16*); -static u16 QuantizePixel_Invert(u16*); -static u16 QuantizePixel_BlurHard(u16*, u16*, u16*); -static u16 QuantizePixel_MotionBlur(u16*, u16*); +static u16 ConvertColorToGrayscale(u16 *); +static u16 QuantizePixel_Blur(u16 *, u16 *, u16 *); +static u16 QuantizePixel_PersonalityColor(u16 *, u8); +static u16 QuantizePixel_BlackAndWhite(u16 *); +static u16 QuantizePixel_BlackOutline(u16 *, u16 *); +static u16 QuantizePixel_Invert(u16 *); +static u16 QuantizePixel_BlurHard(u16 *, u16 *, u16 *); +static u16 QuantizePixel_MotionBlur(u16 *, u16 *); static u16 GetColorFromPersonality(u8); static void QuantizePalette_Standard(bool8); static void SetPresetPalette_PrimaryColors(void); @@ -46,10 +46,10 @@ static void SetPresetPalette_GrayscaleSmall(void); static void QuantizePalette_GrayscaleSmall(void); static void SetPresetPalette_BlackAndWhite(void); static void QuantizePalette_BlackAndWhite(void); -static u16 QuantizePixel_Standard(u16*); -static u16 QuantizePixel_GrayscaleSmall(u16*); -static u16 QuantizePixel_Grayscale(u16*); -static u16 QuantizePixel_PrimaryColors(u16*); +static u16 QuantizePixel_Standard(u16 *); +static u16 QuantizePixel_GrayscaleSmall(u16 *); +static u16 QuantizePixel_Grayscale(u16 *); +static u16 QuantizePixel_PrimaryColors(u16 *); #define MAX_DIMENSION 64 @@ -733,11 +733,11 @@ static u16 QuantizePixel_BlurHard(u16 *prevPixel, u16 *curPixel, u16 *nextPixel) red = GET_R(*curPixel); green = GET_G(*curPixel); blue = GET_B(*curPixel); - + prevAvg = (GET_R(*prevPixel) + GET_G(*prevPixel) + GET_B(*prevPixel)) / 3; curAvg = (GET_R(*curPixel) + GET_G(*curPixel) + GET_B(*curPixel)) / 3; nextAvg = (GET_R(*nextPixel) + GET_G(*nextPixel) + GET_B(*nextPixel)) / 3; - + if (prevAvg == curAvg && nextAvg == curAvg) return *curPixel; @@ -1091,12 +1091,12 @@ static u16 QuantizePixel_Standard(u16 *pixel) return RGB2(red, green, blue); } -static u16 QuantizePixel_PrimaryColors(u16* color) +static u16 QuantizePixel_PrimaryColors(u16 *color) { u16 red = GET_R(*color); u16 green = GET_G(*color); u16 blue = GET_B(*color); - + if (red < 12 && green < 11 && blue < 11) return 1; diff --git a/src/international_string_util.c b/src/international_string_util.c index eb2ec16e70..f71734fa7e 100644 --- a/src/international_string_util.c +++ b/src/international_string_util.c @@ -34,32 +34,32 @@ int GetStringWidthDifference(int fontId, const u8 *str, int totalWidth, int lett return 0; } -int GetMaxWidthInMenuTable(const struct MenuAction *str, int numActions) +int GetMaxWidthInMenuTable(const struct MenuAction *actions, int numActions) { - int i, var; + int i, maxWidth; - for (var = 0, i = 0; i < numActions; i++) + for (maxWidth = 0, i = 0; i < numActions; i++) { - int stringWidth = GetStringWidth(1, str[i].text, 0); - if (stringWidth > var) - var = stringWidth; + int stringWidth = GetStringWidth(FONT_NORMAL, actions[i].text, 0); + if (stringWidth > maxWidth) + maxWidth = stringWidth; } - return ConvertPixelWidthToTileWidth(var); + return ConvertPixelWidthToTileWidth(maxWidth); } -int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2) +int GetMaxWidthInSubsetOfMenuTable(const struct MenuAction *actions, const u8 *actionIds, int numActions) { - int i, var; + int i, maxWidth; - for (var = 0, i = 0; i < arg2; i++) + for (maxWidth = 0, i = 0; i < numActions; i++) { - int stringWidth = GetStringWidth(1, str[arg1[i]].text, 0); - if (stringWidth > var) - var = stringWidth; + int stringWidth = GetStringWidth(FONT_NORMAL, actions[actionIds[i]].text, 0); + if (stringWidth > maxWidth) + maxWidth = stringWidth; } - return ConvertPixelWidthToTileWidth(var); + return ConvertPixelWidthToTileWidth(maxWidth); } int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu) @@ -93,32 +93,29 @@ void CopyMonCategoryText(int dexNum, u8 *dest) StringCopy(str + 1, gText_Pokemon); } -u8 *sub_81DB494(u8 *str, int fontId, const u8 *str2, int totalStringWidth) +u8 *GetStringClearToWidth(u8 *dest, int fontId, const u8 *str, int totalStringWidth) { u8 *buffer; int width; int clearWidth; - if (str2) + if (str) { - buffer = StringCopy(str, str2); - width = GetStringWidth(fontId, str2, 0); + buffer = StringCopy(dest, str); + width = GetStringWidth(fontId, str, 0); } else { - buffer = str; + buffer = dest; width = 0; } clearWidth = totalStringWidth - width; if (clearWidth > 0) { - *buffer = EXT_CTRL_CODE_BEGIN; - buffer++; - *buffer = EXT_CTRL_CODE_CLEAR; - buffer++; - *buffer = clearWidth; - buffer++; + *(buffer++) = EXT_CTRL_CODE_BEGIN; + *(buffer++) = EXT_CTRL_CODE_CLEAR; + *(buffer++) = clearWidth; *buffer = EOS; } @@ -209,18 +206,20 @@ void TVShowConvertInternationalString(u8 *dest, const u8 *src, int language) ConvertInternationalString(dest, language); } -int sub_81DB604(u8 *str) +// It's impossible to distinguish between Latin languages just from a string alone, so the function defaults to LANGUAGE_ENGLISH. This is the case in all of the versions of the game. +int GetNicknameLanguage(u8 *str) { if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN) return LANGUAGE_JAPANESE; else - return GAME_LANGUAGE; + return LANGUAGE_ENGLISH; } -void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows) +// Used by Pokénav's Match Call to erase the previous trainer's flavor text when switching between their info pages. +void FillWindowTilesByRow(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows) { u8 *windowTileData; - int fillSize, windowRowSize, rowsToFill; + int fillSize, windowRowSize, i; struct Window *window = &gWindows[windowId]; fillSize = numFillTiles * TILE_SIZE_4BPP; @@ -228,12 +227,10 @@ void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, windowTileData = window->tileData + (rowStart * windowRowSize) + (columnStart * TILE_SIZE_4BPP); if (numRows > 0) { - rowsToFill = numRows; - while (rowsToFill) + for (i = numRows; i != 0; i--) { CpuFastFill8(0x11, windowTileData, fillSize); windowTileData += windowRowSize; - rowsToFill--; } } } diff --git a/src/intro.c b/src/intro.c index 9fe9169da8..7e9a751690 100644 --- a/src/intro.c +++ b/src/intro.c @@ -216,7 +216,7 @@ static const struct OamData sOamData_Sparkle = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -284,7 +284,7 @@ static const struct OamData sOamData_Volbeat = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -320,7 +320,7 @@ static const struct OamData sOamData_Torchic = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -380,7 +380,7 @@ static const struct OamData sOamData_Manectric = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -428,7 +428,7 @@ static const struct OamData sOamData_Lightning = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -519,7 +519,7 @@ static const struct OamData sOamData_Bubbles = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), .x = 0, @@ -558,7 +558,7 @@ static const struct OamData sOamData_WaterDrop = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -660,7 +660,7 @@ static const struct OamData sOamData_GameFreakLetter = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -676,7 +676,7 @@ static const struct OamData sOamData_PresentsLetter = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -692,7 +692,7 @@ static const struct OamData sOamData_GameFreakLogo = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x64), .x = 0, @@ -931,7 +931,7 @@ static const struct OamData sOamData_FlygonSilhouette = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -983,7 +983,7 @@ static const struct OamData sOamData_RayquazaOrb = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -1142,10 +1142,10 @@ void CB2_InitCopyrightScreenAfterBootup(void) { if (!SetUpCopyrightScreen()) { - SetSaveBlocksPointers(sub_815355C()); + SetSaveBlocksPointers(GetSaveBlocksPointersBaseOffset()); ResetMenuAndMonGlobals(); Save_ResetSaveCounters(); - Save_LoadGameData(SAVE_NORMAL); + LoadGameSave(SAVE_NORMAL); if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT) Sav2_ClearSetDefault(); SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); @@ -1421,7 +1421,7 @@ static void Task_Scene2_BikeRide(u8 taskId) gIntroCredits_MovingSceneryState = INTROCRED_SCENERY_FROZEN; DestroyTask(gTasks[taskId].tBgAnimTaskId); } - + if (gIntroFrameCounter > TIMER_END_SCENE_2) { // Fade out to next scene @@ -1671,7 +1671,7 @@ static void SpriteCB_Manectric(struct Sprite *sprite) sprite->x -= 2; if (gIntroFrameCounter != TIMER_MANECTRIC_RUN_CIRCULAR) break; - + // Initialize circular pattern running sprite->y -= 12; sprite->sSinIdx = 0x80; @@ -1848,7 +1848,7 @@ static void Task_Scene3_StartGroudon(u8 taskId) { gTasks[taskId].tState = 0; gTasks[taskId].func = Task_Scene3_Groudon; - ScanlineEffect_InitWave(0, 160, 4, 4, 1, 4, 0); + ScanlineEffect_InitWave(0, 160, 4, 4, 1, SCANLINE_EFFECT_REG_BG1HOFS, FALSE); } #define tScreenX data[1] @@ -1925,7 +1925,7 @@ static void Task_Scene3_Groudon(u8 taskId) tScreenX = 80; tScreenY = 41; tDelay = 16; - PlayCryInternal(SPECIES_GROUDON, 0, 100, 10, 0); + PlayCryInternal(SPECIES_GROUDON, 0, 100, CRY_PRIORITY_NORMAL, CRY_MODE_NORMAL); tState++; } break; @@ -2058,7 +2058,7 @@ static void Task_Scene3_LoadKyogre(u8 taskId) gTasks[taskId].tDelay = 16; gTasks[taskId].tZoom = 256; PanFadeAndZoomScreen(gTasks[taskId].tScreenX, gTasks[taskId].tScreenY, gTasks[taskId].tZoom, 0); - ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, 6, 0); + ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, SCANLINE_EFFECT_REG_BG1VOFS, FALSE); } static void Task_Scene3_Kyogre(u8 taskId) @@ -2127,7 +2127,7 @@ static void Task_Scene3_Kyogre(u8 taskId) { tDelay = 1; tState++; - PlayCryInternal(SPECIES_KYOGRE, 0, 120, 10, 0); + PlayCryInternal(SPECIES_KYOGRE, 0, 120, CRY_PRIORITY_NORMAL, CRY_MODE_NORMAL); } } break; @@ -2205,7 +2205,7 @@ static void Task_Scene3_Kyogre(u8 taskId) } } -#undef tScreenX +#undef tScreenX #undef tScreenY #undef tZoom #undef tDelay @@ -2219,7 +2219,7 @@ static void Task_Scene3_Kyogre(u8 taskId) #define sUnk data[7] // Never read // taskId is used inconsistently for these two functions. -// The sprite callback for the bubbles will always read it, unless delay is 0 to +// The sprite callback for the bubbles will always read it, unless delay is 0 to // start (it never is), but the first function is often passed 0 instead of a // taskId, and the second function doesn't take/assign a taskId at all. // The only time an actual taskId is given is when it actually needs the @@ -2233,9 +2233,9 @@ static void CreateKyogreBubbleSprites_Body(u8 taskId) for (i = 0; i < NUM_BUBBLES_IN_SET; i++) { - spriteId = CreateSprite(&sSpriteTemplate_Bubbles, - sKyogreBubbleData[i][0], - sKyogreBubbleData[i][1], + spriteId = CreateSprite(&sSpriteTemplate_Bubbles, + sKyogreBubbleData[i][0], + sKyogreBubbleData[i][1], i); gSprites[spriteId].invisible = TRUE; gSprites[spriteId].sTaskId = taskId; @@ -2252,14 +2252,14 @@ static void CreateKyogreBubbleSprites_Fins(void) for (i = 0; i < NUM_BUBBLES_IN_SET; i++) { - spriteId = CreateSprite(&sSpriteTemplate_Bubbles, - sKyogreBubbleData[i + NUM_BUBBLES_IN_SET][0], - sKyogreBubbleData[i + NUM_BUBBLES_IN_SET][1], + spriteId = CreateSprite(&sSpriteTemplate_Bubbles, + sKyogreBubbleData[i + NUM_BUBBLES_IN_SET][0], + sKyogreBubbleData[i + NUM_BUBBLES_IN_SET][1], i); gSprites[spriteId].invisible = TRUE; #ifdef BUGFIX gSprites[spriteId].sDelay = sKyogreBubbleData[i + NUM_BUBBLES_IN_SET][2]; -#else +#else gSprites[spriteId].sDelay = sKyogreBubbleData[i][2]; // Using the wrong set of delays here #endif gSprites[spriteId].sUnk = 64; diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index bceddd9b70..cf193018a4 100644 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -13,7 +13,7 @@ and the credit sequence, where the player bikes along a grassy path. These graphics are placed in graphics/intro/scene_2 to keep - all of the intro graphics files together, though it includes + all of the intro graphics files together, though it includes the related graphics that are used only by the credits. */ @@ -79,7 +79,7 @@ static void SpriteCB_FlygonLeftHalf(struct Sprite *sprite); static const struct SpriteTemplate sSpriteTemplate_MovingScenery = { .tileTag = TAG_MOVING_SCENERY, - .paletteTag = 0xFFFF, + .paletteTag = TAG_NONE, .oam = &gDummyOamData, .anims = gDummySpriteAnimTable, .images = NULL, @@ -757,10 +757,9 @@ void LoadIntroPart2Graphics(u8 scenery) gReservedSpritePaletteCount = 8; } -// Note: This is only called with a=1. +// Note: This is only called with scenery=1. void SetIntroPart2BgCnt(u8 scenery) { - // Only called with scenery = 1 switch (scenery) { default: @@ -1039,7 +1038,7 @@ static void SpriteCB_MovingScenery(struct Sprite *sprite) { s32 x; s16 state = gIntroCredits_MovingSceneryState; - + if (state != INTROCRED_SCENERY_FROZEN) { switch (state) @@ -1107,7 +1106,7 @@ static void SpriteCB_Player(struct Sprite *sprite) #define sPlayerSpriteId data[0] -static void SpriteCB_Bicycle(struct Sprite* sprite) +static void SpriteCB_Bicycle(struct Sprite *sprite) { sprite->invisible = gSprites[sprite->sPlayerSpriteId].invisible; sprite->x = gSprites[sprite->sPlayerSpriteId].x; @@ -1140,7 +1139,7 @@ static void SpriteCB_FlygonLeftHalf(struct Sprite *sprite) #define sLeftSpriteId data[0] -static void SpriteCB_FlygonRightHalf(struct Sprite* sprite) +static void SpriteCB_FlygonRightHalf(struct Sprite *sprite) { sprite->invisible = gSprites[sprite->sLeftSpriteId].invisible; sprite->y = gSprites[sprite->sLeftSpriteId].y; diff --git a/src/item.c b/src/item.c index 1560342629..c9f8de2b55 100644 --- a/src/item.c +++ b/src/item.c @@ -165,7 +165,7 @@ bool8 HasAtLeastOneBerry(void) { u16 i; - for (i = FIRST_BERRY_INDEX; i < ITEM_BRIGHT_POWDER; i++) + for (i = FIRST_BERRY_INDEX; i <= LAST_BERRY_INDEX; i++) { if (CheckBagHasItem(i, 1) == TRUE) { @@ -913,9 +913,9 @@ u8 ItemId_GetImportance(u16 itemId) } // unused -u8 ItemId_GetUnknownValue(u16 itemId) +u8 ItemId_GetRegistrability(u16 itemId) { - return gItems[SanitizeItemId(itemId)].unk19; + return gItems[SanitizeItemId(itemId)].registrability; } u8 ItemId_GetPocket(u16 itemId) @@ -947,3 +947,8 @@ u8 ItemId_GetSecondaryId(u16 itemId) { return gItems[SanitizeItemId(itemId)].secondaryId; } + +u8 ItemId_GetFlingPower(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].flingPower; +} diff --git a/src/item_icon.c b/src/item_icon.c index dc69d03318..274ed03b36 100644 --- a/src/item_icon.c +++ b/src/item_icon.c @@ -18,7 +18,7 @@ static const struct OamData sOamData_ItemIcon = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, diff --git a/src/item_menu.c b/src/item_menu.c index 9cc02e8cc4..afd9d3cec6 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -76,20 +76,20 @@ enum { enum { ACTION_USE, - ACTION_TOSS, - ACTION_REGISTER, - ACTION_GIVE, - ACTION_CANCEL, + ACTION_TOSS, + ACTION_REGISTER, + ACTION_GIVE, + ACTION_CANCEL, ACTION_BATTLE_USE, - ACTION_CHECK, - ACTION_WALK, - ACTION_DESELECT, - ACTION_CHECK_TAG, - ACTION_CONFIRM, - ACTION_SHOW, - ACTION_GIVE_FAVOR_LADY, - ACTION_CONFIRM_QUIZ_LADY, - ACTION_DUMMY, + ACTION_CHECK, + ACTION_WALK, + ACTION_DESELECT, + ACTION_CHECK_TAG, + ACTION_CONFIRM, + ACTION_SHOW, + ACTION_GIVE_FAVOR_LADY, + ACTION_CONFIRM_QUIZ_LADY, + ACTION_DUMMY, }; enum { @@ -128,7 +128,7 @@ static bool8 LoadBagMenu_Graphics(void); static void LoadBagMenuTextWindows(void); static void AllocateBagItemListBuffers(void); static void LoadBagItemListBuffers(u8); -static void PrintPocketNames(const u8*, const u8*); +static void PrintPocketNames(const u8 *, const u8 *); static void CopyPocketNameToWindow(u32); static void DrawPocketIndicatorSquare(u8, bool8); static void CreatePocketScrollArrowPair(void); @@ -138,10 +138,10 @@ static void PrepareTMHMMoveWindow(void); static bool8 IsWallysBag(void); static void Task_WallyTutorialBagMenu(u8); static void Task_BagMenu_HandleInput(u8); -static void GetItemName(s8*, u16); +static void GetItemName(s8 *, u16); static void PrintItemDescription(int); static void BagMenu_PrintCursorAtPos(u8, u8); -static void BagMenu_Print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8); +static void BagMenu_Print(u8, u8, const u8 *, u8, u8, u8, u8, u8, u8); static void Task_CloseBagMenu(u8); static u8 AddItemMessageWindow(u8); static void RemoveItemMessageWindow(u8); @@ -189,7 +189,7 @@ static void InitPocketListPositions(void); static void InitPocketScrollPositions(void); static u8 CreateBagInputHandlerTask(u8); static void DrawItemListBgRow(u8); -static void BagMenu_MoveCursorCallback(s32, bool8, struct ListMenu*); +static void BagMenu_MoveCursorCallback(s32, bool8, struct ListMenu *); static void BagMenu_ItemPrintCallback(u8, u32, u8); static void ItemMenu_UseOutOfBattle(u8); static void ItemMenu_Toss(u8); @@ -260,7 +260,7 @@ static const struct ListMenuTemplate sItemListMenu = .lettersSpacing = 0, .itemVerticalPadding = 0, .scrollMultiple = 0, - .fontId = 7, + .fontId = FONT_NARROW, .cursorKind = 0 }; @@ -372,7 +372,7 @@ static const struct ScrollArrowsTemplate sBagScrollArrowsTemplate = { .palNum = 0, }; -static const u8 sRegisteredSelect_Gfx[] = INCBIN_U8("graphics/interface/select_button.4bpp"); +static const u8 sRegisteredSelect_Gfx[] = INCBIN_U8("graphics/bag/select_button.4bpp"); enum { COLORID_NORMAL, @@ -669,7 +669,7 @@ void VBlankCB_BagMenuRun(void) static void CB2_Bag(void) { - while(MenuHelpers_CallLinkSomething() != TRUE && SetupBagMenu() != TRUE && MenuHelpers_LinkSomething() != TRUE) + while(MenuHelpers_ShouldWaitForLinkRecv() != TRUE && SetupBagMenu() != TRUE && MenuHelpers_IsLinkActive() != TRUE) {}; } @@ -705,7 +705,7 @@ static bool8 SetupBagMenu(void) gMain.state++; break; case 6: - if (!MenuHelpers_LinkSomething()) + if (!MenuHelpers_IsLinkActive()) ResetTasks(); gMain.state++; break; @@ -973,16 +973,16 @@ static void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 y) // Print berry quantity ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, BERRY_CAPACITY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); - offset = GetStringRightAlignXOffset(7, gStringVar4, 119); - BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, TEXT_SPEED_FF, COLORID_NORMAL); + offset = GetStringRightAlignXOffset(FONT_NARROW, gStringVar4, 119); + BagMenu_Print(windowId, FONT_NARROW, gStringVar4, offset, y, 0, 0, TEXT_SKIP_DRAW, COLORID_NORMAL); } else if (gBagPosition.pocket != KEYITEMS_POCKET && ItemId_GetImportance(itemId) == FALSE) { // Print item quantity ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, BAG_ITEM_CAPACITY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); - offset = GetStringRightAlignXOffset(7, gStringVar4, 119); - BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, TEXT_SPEED_FF, COLORID_NORMAL); + offset = GetStringRightAlignXOffset(FONT_NARROW, gStringVar4, 119); + BagMenu_Print(windowId, FONT_NARROW, gStringVar4, offset, y, 0, 0, TEXT_SKIP_DRAW, COLORID_NORMAL); } else { @@ -1008,7 +1008,7 @@ static void PrintItemDescription(int itemIndex) str = gStringVar4; } FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0)); - BagMenu_Print(WIN_DESCRIPTION, 1, str, 3, 1, 0, 0, 0, COLORID_NORMAL); + BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, str, 3, 1, 0, 0, 0, COLORID_NORMAL); } static void BagMenu_PrintCursor(u8 listTaskId, u8 colorIndex) @@ -1019,9 +1019,9 @@ static void BagMenu_PrintCursor(u8 listTaskId, u8 colorIndex) static void BagMenu_PrintCursorAtPos(u8 y, u8 colorIndex) { if (colorIndex == COLORID_NONE) - FillWindowPixelRect(WIN_ITEM_LIST, PIXEL_FILL(0), 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1)); + FillWindowPixelRect(WIN_ITEM_LIST, PIXEL_FILL(0), 0, y, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), GetMenuCursorDimensionByFont(FONT_NORMAL, 1)); else - BagMenu_Print(WIN_ITEM_LIST, 1, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIndex); + BagMenu_Print(WIN_ITEM_LIST, FONT_NORMAL, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIndex); } @@ -1080,11 +1080,11 @@ void Task_FadeAndCloseBagMenu(u8 taskId) static void Task_CloseBagMenu(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { DestroyListMenuTask(tListTaskId, &gBagPosition.scrollPosition[gBagPosition.pocket], &gBagPosition.cursorPosition[gBagPosition.pocket]); - + // If ready for a new screen (e.g. party menu for giving an item) go to that screen // Otherwise exit the bag and use callback set up when the bag was first opened if (gBagMenu->newScreenCallback != NULL) @@ -1162,7 +1162,7 @@ u8 GetItemListPosition(u8 pocketId) void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void (*callback)(u8 taskId)) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; tMsgWindowId = AddItemMessageWindow(ITEMWIN_MESSAGE); FillWindowPixelBuffer(tMsgWindowId, PIXEL_FILL(1)); @@ -1172,9 +1172,9 @@ void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void (*callback)(u8 void CloseItemMessage(u8 taskId) { - s16* data = gTasks[taskId].data; - u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; - u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; + s16 *data = gTasks[taskId].data; + u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; + u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; RemoveItemMessageWindow(ITEMWIN_MESSAGE); DestroyListMenuTask(tListTaskId, scrollPos, cursorPos); UpdatePocketItemList(gBagPosition.pocket); @@ -1195,7 +1195,7 @@ static void PrintItemQuantity(u8 windowId, s16 quantity) u8 numDigits = (gBagPosition.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS; ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, numDigits); StringExpandPlaceholders(gStringVar4, gText_xVar1); - AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 0x28), 2, 0, 0); } // Prints the quantity of items to be sold and the amount that would be earned @@ -1204,18 +1204,18 @@ static void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned) u8 numDigits = (gBagPosition.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS; ConvertIntToDecimalStringN(gStringVar1, numSold, STR_CONV_MODE_LEADING_ZEROS, numDigits); StringExpandPlaceholders(gStringVar4, gText_xVar1); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, 0); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, 0); PrintMoneyAmount(windowId, 38, 1, moneyEarned, 0); } static void Task_BagMenu_HandleInput(u8 taskId) { - s16* data = gTasks[taskId].data; - u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; - u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; + s16 *data = gTasks[taskId].data; + u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; + u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; s32 listPosition; - if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE && !gPaletteFade.active) { switch (GetSwitchBagPocketDirection()) { @@ -1313,7 +1313,7 @@ static void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId) static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, bool16 skipEraseList) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; u8 newPocket; tPocketSwitchState = 0; @@ -1344,7 +1344,7 @@ static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, bool16 skipEraseLis DrawPocketIndicatorSquare(newPocket, TRUE); FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16); ScheduleBgCopyTilemapToVram(2); - SetBagVisualPocketId(newPocket, 1); + SetBagVisualPocketId(newPocket, TRUE); RemoveBagSprite(ITEMMENUSPRITE_BALL); AddSwitchPocketRotatingBallSprite(deltaBagPocketId); SetTaskFuncWithFollowupFunc(taskId, Task_SwitchBagPocket, gTasks[taskId].func); @@ -1352,9 +1352,9 @@ static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, bool16 skipEraseLis static void Task_SwitchBagPocket(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; - if (!MenuHelpers_LinkSomething() && !IsWallysBag()) + if (!MenuHelpers_IsLinkActive() && !IsWallysBag()) { switch (GetSwitchBagPocketDirection()) { @@ -1417,11 +1417,11 @@ static void DrawPocketIndicatorSquare(u8 x, bool8 isCurrentPocket) static bool8 CanSwapItems(void) { // Swaps can only be done from the field or in battle (as opposed to while selling items, for example) - if (gBagPosition.location == ITEMMENULOCATION_FIELD + if (gBagPosition.location == ITEMMENULOCATION_FIELD || gBagPosition.location == ITEMMENULOCATION_BATTLE) { // TMHMs and berries are numbered, and so may not be swapped - if (gBagPosition.pocket != TMHM_POCKET + if (gBagPosition.pocket != TMHM_POCKET && gBagPosition.pocket != BERRIES_POCKET) return TRUE; } @@ -1430,7 +1430,7 @@ static bool8 CanSwapItems(void) static void StartItemSwap(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; ListMenuSetUnkIndicatorsStructField(tListTaskId, 16, 1); tListPosition = gBagPosition.scrollPosition[gBagPosition.pocket] + gBagPosition.cursorPosition[gBagPosition.pocket]; @@ -1438,7 +1438,7 @@ static void StartItemSwap(u8 taskId) CopyItemName(BagGetItemIdByPocketPosition(gBagPosition.pocket + 1, tListPosition), gStringVar1); StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where); FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0)); - BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); + BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); UpdateItemMenuSwapLinePos(tListPosition); DestroyPocketSwitchArrowPair(); BagMenu_PrintCursor(tListTaskId, COLORID_GRAY_CURSOR); @@ -1447,9 +1447,9 @@ static void StartItemSwap(u8 taskId) static void Task_HandleSwappingItemsInput(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; - if (MenuHelpers_CallLinkSomething() != TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { if (JOY_NEW(SELECT_BUTTON)) { @@ -1485,9 +1485,9 @@ static void Task_HandleSwappingItemsInput(u8 taskId) static void DoItemSwap(u8 taskId) { - s16* data = gTasks[taskId].data; - u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; - u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; + s16 *data = gTasks[taskId].data; + u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; + u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; u16 realPos = (*scrollPos + *cursorPos); if (tListPosition == realPos || tListPosition == realPos - 1) @@ -1512,9 +1512,9 @@ static void DoItemSwap(u8 taskId) static void CancelItemSwap(u8 taskId) { - s16* data = gTasks[taskId].data; - u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; - u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; + s16 *data = gTasks[taskId].data; + u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; + u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; gBagMenu->toSwapPos = NOT_SWAPPING; DestroyListMenuTask(tListTaskId, scrollPos, cursorPos); @@ -1549,7 +1549,7 @@ static void OpenContextMenu(u8 taskId) gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BerryBlenderCrush); break; case ITEMMENULOCATION_APPRENTICE: - if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY) + if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY_E_READER) { gBagMenu->contextMenuItemsPtr = sContextMenuItems_Apprentice; gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Apprentice); @@ -1561,7 +1561,7 @@ static void OpenContextMenu(u8 taskId) } break; case ITEMMENULOCATION_FAVOR_LADY: - if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY) + if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY_E_READER) { gBagMenu->contextMenuItemsPtr = sContextMenuItems_FavorLady; gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_FavorLady); @@ -1573,7 +1573,7 @@ static void OpenContextMenu(u8 taskId) } break; case ITEMMENULOCATION_QUIZ_LADY: - if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY) + if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY_E_READER) { gBagMenu->contextMenuItemsPtr = sContextMenuItems_QuizLady; gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_QuizLady); @@ -1589,7 +1589,7 @@ static void OpenContextMenu(u8 taskId) case ITEMMENULOCATION_BERRY_TREE: case ITEMMENULOCATION_ITEMPC: default: - if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE || InUnionRoom() == TRUE) { if (gBagPosition.pocket == KEYITEMS_POCKET || !IsHoldingItemAllowed(gSpecialVar_ItemId)) { @@ -1653,7 +1653,7 @@ static void OpenContextMenu(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected); FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0)); - BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); + BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); } if (gBagMenu->contextMenuNumItems == 1) PrintContextMenuItems(BagMenu_AddWindow(ITEMWIN_1x1)); @@ -1667,13 +1667,13 @@ static void OpenContextMenu(u8 taskId) static void PrintContextMenuItems(u8 windowId) { - AddItemMenuActionTextPrinters(windowId, 7, 8, 1, 0, 16, gBagMenu->contextMenuNumItems, sItemMenuActions, gBagMenu->contextMenuItemsPtr); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, gBagMenu->contextMenuNumItems, 0); + PrintMenuActionTexts(windowId, FONT_NARROW, 8, 1, 0, 16, gBagMenu->contextMenuNumItems, sItemMenuActions, gBagMenu->contextMenuItemsPtr); + InitMenuInUpperLeftCornerNormal(windowId, gBagMenu->contextMenuNumItems, 0); } static void PrintContextMenuItemGrid(u8 windowId, u8 columns, u8 rows) { - PrintMenuActionGrid(windowId, 7, 8, 1, 56, columns, rows, sItemMenuActions, gBagMenu->contextMenuItemsPtr); + PrintMenuActionGrid(windowId, FONT_NARROW, 8, 1, 56, columns, rows, sItemMenuActions, gBagMenu->contextMenuItemsPtr); InitMenuActionGrid(windowId, 56, columns, rows, 0); } @@ -1691,7 +1691,7 @@ static void Task_ItemContext_Normal(u8 taskId) static void Task_ItemContext_SingleRow(u8 taskId) { - if (MenuHelpers_CallLinkSomething() != TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { s8 selection = Menu_ProcessInputNoWrap(); switch (selection) @@ -1712,7 +1712,7 @@ static void Task_ItemContext_SingleRow(u8 taskId) static void Task_ItemContext_MultipleRows(u8 taskId) { - if (MenuHelpers_CallLinkSomething() != TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { s8 cursorPos = Menu_GetCursorPos(); if (JOY_NEW(DPAD_UP)) @@ -1720,7 +1720,7 @@ static void Task_ItemContext_MultipleRows(u8 taskId) if (cursorPos > 0 && IsValidContextMenuPos(cursorPos - 2)) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); } } else if (JOY_NEW(DPAD_DOWN)) @@ -1728,7 +1728,7 @@ static void Task_ItemContext_MultipleRows(u8 taskId) if (cursorPos < (gBagMenu->contextMenuNumItems - 2) && IsValidContextMenuPos(cursorPos + 2)) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); } } else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) @@ -1736,7 +1736,7 @@ static void Task_ItemContext_MultipleRows(u8 taskId) if ((cursorPos & 1) && IsValidContextMenuPos(cursorPos - 1)) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); } } else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) @@ -1744,7 +1744,7 @@ static void Task_ItemContext_MultipleRows(u8 taskId) if (!(cursorPos & 1) && IsValidContextMenuPos(cursorPos + 1)) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); } } else if (JOY_NEW(A_BUTTON)) @@ -1806,7 +1806,7 @@ static void ItemMenu_UseOutOfBattle(u8 taskId) static void ItemMenu_Toss(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; RemoveContextWindow(); tItemCount = 1; @@ -1819,7 +1819,7 @@ static void ItemMenu_Toss(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_TossHowManyVar1s); FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0)); - BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); + BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); AddItemQuantityWindow(ITEMWIN_QUANTITY); gTasks[taskId].func = Task_ChooseHowManyToToss; } @@ -1827,19 +1827,19 @@ static void ItemMenu_Toss(u8 taskId) static void AskTossItems(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems); FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0)); - BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); + BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); BagMenu_YesNo(taskId, ITEMWIN_YESNO_LOW, &sYesNoTossFunctions); } static void CancelToss(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; PrintItemDescription(tListPosition); BagMenu_PrintCursor(tListTaskId, COLORID_NORMAL); @@ -1848,7 +1848,7 @@ static void CancelToss(u8 taskId) static void Task_ChooseHowManyToToss(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE) { @@ -1870,13 +1870,13 @@ static void Task_ChooseHowManyToToss(u8 taskId) static void ConfirmToss(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s); FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0)); - BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); + BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); gTasks[taskId].func = Task_RemoveItemFromBag; } @@ -1884,9 +1884,9 @@ static void ConfirmToss(u8 taskId) // For when items are tossed or deposited static void Task_RemoveItemFromBag(u8 taskId) { - s16* data = gTasks[taskId].data; - u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; - u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; + s16 *data = gTasks[taskId].data; + u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; + u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; if (JOY_NEW(A_BUTTON | B_BUTTON)) { @@ -1904,9 +1904,9 @@ static void Task_RemoveItemFromBag(u8 taskId) static void ItemMenu_Register(u8 taskId) { - s16* data = gTasks[taskId].data; - u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; - u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; + s16 *data = gTasks[taskId].data; + u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; + u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId) gSaveBlock1Ptr->registeredItem = 0; @@ -1924,7 +1924,7 @@ static void ItemMenu_Give(u8 taskId) RemoveContextWindow(); if (!IsWritingMailAllowed(gSpecialVar_ItemId)) { - DisplayItemMessage(taskId, 1, gText_CantWriteMail, HandleErrorMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gText_CantWriteMail, HandleErrorMessage); } else if (!ItemId_GetImportance(gSpecialVar_ItemId)) { @@ -1946,14 +1946,14 @@ static void ItemMenu_Give(u8 taskId) static void PrintThereIsNoPokemon(u8 taskId) { - DisplayItemMessage(taskId, 1, gText_NoPokemon, HandleErrorMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gText_NoPokemon, HandleErrorMessage); } static void PrintItemCantBeHeld(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld); - DisplayItemMessage(taskId, 1, gStringVar4, HandleErrorMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, HandleErrorMessage); } static void HandleErrorMessage(u8 taskId) @@ -1973,7 +1973,7 @@ static void ItemMenu_CheckTag(u8 taskId) static void ItemMenu_Cancel(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; RemoveContextWindow(); PrintItemDescription(tListPosition); @@ -2001,13 +2001,13 @@ static void Task_ItemContext_GiveToParty(u8 taskId) { if (!IsWritingMailAllowed(gSpecialVar_ItemId)) { - DisplayItemMessage(taskId, 1, gText_CantWriteMail, HandleErrorMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gText_CantWriteMail, HandleErrorMessage); } else if (!IsHoldingItemAllowed(gSpecialVar_ItemId)) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeldHere); - DisplayItemMessage(taskId, 1, gStringVar4, HandleErrorMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, HandleErrorMessage); } else if (gBagPosition.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId)) { @@ -2023,7 +2023,7 @@ static void Task_ItemContext_GiveToParty(u8 taskId) static void Task_ItemContext_GiveToPC(u8 taskId) { if (ItemIsMail(gSpecialVar_ItemId) == TRUE) - DisplayItemMessage(taskId, 1, gText_CantWriteMail, HandleErrorMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gText_CantWriteMail, HandleErrorMessage); else if (gBagPosition.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId)) gTasks[taskId].func = Task_FadeAndCloseBagMenu; else @@ -2039,15 +2039,15 @@ bool8 UseRegisteredKeyItemOnField(void) if (InUnionRoom() == TRUE || InBattlePyramid() || InBattlePike() || InMultiPartnerRoom() == TRUE) return FALSE; HideMapNamePopUpWindow(); - ChangeBgY_ScreenOff(0, 0, 0); + ChangeBgY_ScreenOff(0, 0, BG_COORD_SET); if (gSaveBlock1Ptr->registeredItem != ITEM_NONE) { if (CheckBagHasItem(gSaveBlock1Ptr->registeredItem, 1) == TRUE) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); PlayerFreeze(); - sub_808BCF4(); + StopPlayerAvatar(); gSpecialVar_ItemId = gSaveBlock1Ptr->registeredItem; taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1Ptr->registeredItem), 8); gTasks[taskId].tUsingRegisteredKeyItem = TRUE; @@ -2058,7 +2058,7 @@ bool8 UseRegisteredKeyItemOnField(void) gSaveBlock1Ptr->registeredItem = ITEM_NONE; } } - ScriptContext1_SetupScript(EventScript_SelectWithoutRegisteredItem); + ScriptContext_SetupScript(EventScript_SelectWithoutRegisteredItem); return TRUE; } @@ -2066,13 +2066,13 @@ bool8 UseRegisteredKeyItemOnField(void) static void Task_ItemContext_Sell(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (ItemId_GetPrice(gSpecialVar_ItemId) == 0) { CopyItemName(gSpecialVar_ItemId, gStringVar2); StringExpandPlaceholders(gStringVar4, gText_CantBuyKeyItem); - DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); } else { @@ -2086,18 +2086,18 @@ static void Task_ItemContext_Sell(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar2); StringExpandPlaceholders(gStringVar4, gText_HowManyToSell); - DisplayItemMessage(taskId, 1, gStringVar4, InitSellHowManyInput); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, InitSellHowManyInput); } } } static void DisplaySellItemPriceAndConfirm(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1); - DisplayItemMessage(taskId, 1, gStringVar4, AskSellItems); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, AskSellItems); } static void AskSellItems(u8 taskId) @@ -2107,7 +2107,7 @@ static void AskSellItems(u8 taskId) static void CancelSell(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; RemoveMoneyWindow(); RemoveItemMessageWindow(ITEMWIN_MESSAGE); @@ -2117,7 +2117,7 @@ static void CancelSell(u8 taskId) static void InitSellHowManyInput(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; u8 windowId = BagMenu_AddWindow(ITEMWIN_QUANTITY_WIDE); PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount); @@ -2127,7 +2127,7 @@ static void InitSellHowManyInput(u8 taskId) static void Task_ChooseHowManyToSell(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE) { @@ -2152,19 +2152,19 @@ static void Task_ChooseHowManyToSell(u8 taskId) static void ConfirmSell(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar2); ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2); - DisplayItemMessage(taskId, 1, gStringVar4, SellItem); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, SellItem); } static void SellItem(u8 taskId) { - s16* data = gTasks[taskId].data; - u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; - u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; + s16 *data = gTasks[taskId].data; + u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket]; + u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; PlaySE(SE_SHOP); RemoveBagItem(gSpecialVar_ItemId, tItemCount); @@ -2191,7 +2191,7 @@ static void WaitAfterItemSell(u8 taskId) static void Task_ItemContext_Deposit(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; tItemCount = 1; if (tQuantity == 1) @@ -2203,7 +2203,7 @@ static void Task_ItemContext_Deposit(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_DepositHowManyVar1); FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0)); - BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); + BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); AddItemQuantityWindow(ITEMWIN_QUANTITY); gTasks[taskId].func = Task_ChooseHowManyToDeposit; } @@ -2211,7 +2211,7 @@ static void Task_ItemContext_Deposit(u8 taskId) static void Task_ChooseHowManyToDeposit(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE) { @@ -2235,13 +2235,13 @@ static void Task_ChooseHowManyToDeposit(u8 taskId) static void TryDepositItem(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0)); if (ItemId_GetImportance(gSpecialVar_ItemId)) { // Can't deposit important items - BagMenu_Print(WIN_DESCRIPTION, 1, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, COLORID_NORMAL); + BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, COLORID_NORMAL); gTasks[taskId].func = WaitDepositErrorMessage; } else if (AddPCItem(gSpecialVar_ItemId, tItemCount) == TRUE) @@ -2250,20 +2250,20 @@ static void TryDepositItem(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_DepositedVar2Var1s); - BagMenu_Print(WIN_DESCRIPTION, 1, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); + BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL); gTasks[taskId].func = Task_RemoveItemFromBag; } else { // No room to deposit - BagMenu_Print(WIN_DESCRIPTION, 1, gText_NoRoomForItems, 3, 1, 0, 0, 0, COLORID_NORMAL); + BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gText_NoRoomForItems, 3, 1, 0, 0, 0, COLORID_NORMAL); gTasks[taskId].func = WaitDepositErrorMessage; } } static void WaitDepositErrorMessage(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON | B_BUTTON)) { @@ -2327,7 +2327,7 @@ void DoWallyTutorialBagMenu(void) static void Task_WallyTutorialBagMenu(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { @@ -2373,7 +2373,7 @@ static void ItemMenu_Show(u8 taskId) static void CB2_ApprenticeExitBagMenu(void) { - gFieldCallback = Apprentice_EnableBothScriptContexts; + gFieldCallback = Apprentice_ScriptContext_Enable; SetMainCallback2(CB2_ReturnToField); } @@ -2416,30 +2416,30 @@ static void PrintPocketNames(const u8 *pocketName1, const u8 *pocketName2) window.height = 2; windowId = AddWindow(&window); FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); - offset = GetStringCenterAlignXOffset(1, pocketName1, 0x40); - BagMenu_Print(windowId, 1, pocketName1, offset, 1, 0, 0, TEXT_SPEED_FF, COLORID_POCKET_NAME); + offset = GetStringCenterAlignXOffset(FONT_NORMAL, pocketName1, 0x40); + BagMenu_Print(windowId, FONT_NORMAL, pocketName1, offset, 1, 0, 0, TEXT_SKIP_DRAW, COLORID_POCKET_NAME); if (pocketName2) { - offset = GetStringCenterAlignXOffset(1, pocketName2, 0x40); - BagMenu_Print(windowId, 1, pocketName2, offset + 0x40, 1, 0, 0, TEXT_SPEED_FF, COLORID_POCKET_NAME); + offset = GetStringCenterAlignXOffset(FONT_NORMAL, pocketName2, 0x40); + BagMenu_Print(windowId, FONT_NORMAL, pocketName2, offset + 0x40, 1, 0, 0, TEXT_SKIP_DRAW, COLORID_POCKET_NAME); } - CpuCopy32((u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gBagMenu->pocketNameBuffer, sizeof(gBagMenu->pocketNameBuffer)); + CpuCopy32((u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gBagMenu->pocketNameBuffer, sizeof(gBagMenu->pocketNameBuffer)); RemoveWindow(windowId); } static void CopyPocketNameToWindow(u32 a) { u8 (* tileDataBuffer)[32][32]; - u8* windowTileData; + u8 *windowTileData; int b; if (a > 8) a = 8; tileDataBuffer = &gBagMenu->pocketNameBuffer; - windowTileData = (u8*)GetWindowAttribute(2, WINDOW_TILE_DATA); + windowTileData = (u8 *)GetWindowAttribute(2, WINDOW_TILE_DATA); CpuCopy32(tileDataBuffer[0][a], windowTileData, 0x100); // Top half of pocket name b = a + 16; CpuCopy32(tileDataBuffer[0][b], windowTileData + 0x100, 0x100); // Bottom half of pocket name - CopyWindowToVram(WIN_POCKET_NAME, 2); + CopyWindowToVram(WIN_POCKET_NAME, COPYWIN_GFX); } static void LoadBagMenuTextWindows(void) @@ -2451,7 +2451,7 @@ static void LoadBagMenuTextWindows(void) LoadUserWindowBorderGfx(0, 1, 0xE0); LoadMessageBoxGfx(0, 10, 0xD0); ListMenuLoadStdPalAt(0xC0, 1); - LoadPalette(&gUnknown_0860F074, 0xF0, 0x20); + LoadPalette(&gStandardMenuPalette, 0xF0, 0x20); for (i = 0; i <= WIN_POCKET_NAME; i++) { FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -2478,7 +2478,7 @@ static u8 BagMenu_AddWindow(u8 windowType) if (*windowId == WINDOW_NONE) { *windowId = AddWindow(&sContextMenuWindowTemplates[windowType]); - DrawStdFrameWithCustomTileAndPalette(*windowId, 0, 1, 14); + DrawStdFrameWithCustomTileAndPalette(*windowId, FALSE, 1, 14); ScheduleBgCopyTilemapToVram(1); } return *windowId; @@ -2544,27 +2544,27 @@ static void PrepareTMHMMoveWindow(void) BlitMenuInfoIcon(WIN_TMHM_INFO_ICONS, MENU_INFO_ICON_POWER, 0, 12); BlitMenuInfoIcon(WIN_TMHM_INFO_ICONS, MENU_INFO_ICON_ACCURACY, 0, 24); BlitMenuInfoIcon(WIN_TMHM_INFO_ICONS, MENU_INFO_ICON_PP, 0, 36); - CopyWindowToVram(WIN_TMHM_INFO_ICONS, 2); + CopyWindowToVram(WIN_TMHM_INFO_ICONS, COPYWIN_GFX); } static void PrintTMHMMoveData(u16 itemId) { u8 i; u16 moveId; - const u8* text; + const u8 *text; FillWindowPixelBuffer(WIN_TMHM_INFO, PIXEL_FILL(0)); if (itemId == ITEM_NONE) { for (i = 0; i < 4; i++) - BagMenu_Print(WIN_TMHM_INFO, 1, gText_ThreeDashes, 7, i * 12, 0, 0, TEXT_SPEED_FF, COLORID_TMHM_INFO); - CopyWindowToVram(WIN_TMHM_INFO, 2); + BagMenu_Print(WIN_TMHM_INFO, FONT_NORMAL, gText_ThreeDashes, 7, i * 12, 0, 0, TEXT_SKIP_DRAW, COLORID_TMHM_INFO); + CopyWindowToVram(WIN_TMHM_INFO, COPYWIN_GFX); } else { moveId = ItemIdToBattleMoveId(itemId); BlitMenuInfoIcon(WIN_TMHM_INFO, gBattleMoves[moveId].type + 1, 0, 0); - + // Print TMHM power if (gBattleMoves[moveId].power <= 1) { @@ -2575,7 +2575,7 @@ static void PrintTMHMMoveData(u16 itemId) ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].power, STR_CONV_MODE_RIGHT_ALIGN, 3); text = gStringVar1; } - BagMenu_Print(WIN_TMHM_INFO, 1, text, 7, 12, 0, 0, TEXT_SPEED_FF, COLORID_TMHM_INFO); + BagMenu_Print(WIN_TMHM_INFO, FONT_NORMAL, text, 7, 12, 0, 0, TEXT_SKIP_DRAW, COLORID_TMHM_INFO); // Print TMHM accuracy if (gBattleMoves[moveId].accuracy == 0) @@ -2587,12 +2587,12 @@ static void PrintTMHMMoveData(u16 itemId) ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); text = gStringVar1; } - BagMenu_Print(WIN_TMHM_INFO, 1, text, 7, 24, 0, 0, TEXT_SPEED_FF, COLORID_TMHM_INFO); + BagMenu_Print(WIN_TMHM_INFO, FONT_NORMAL, text, 7, 24, 0, 0, TEXT_SKIP_DRAW, COLORID_TMHM_INFO); // Print TMHM pp ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].pp, STR_CONV_MODE_RIGHT_ALIGN, 3); - BagMenu_Print(WIN_TMHM_INFO, 1, gStringVar1, 7, 36, 0, 0, TEXT_SPEED_FF, COLORID_TMHM_INFO); + BagMenu_Print(WIN_TMHM_INFO, FONT_NORMAL, gStringVar1, 7, 36, 0, 0, TEXT_SKIP_DRAW, COLORID_TMHM_INFO); - CopyWindowToVram(WIN_TMHM_INFO, 2); + CopyWindowToVram(WIN_TMHM_INFO, COPYWIN_GFX); } } diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c index c8d1cd8d08..ff23c37925 100644 --- a/src/item_menu_icons.c +++ b/src/item_menu_icons.c @@ -33,17 +33,17 @@ static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite); static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite); // static const rom data -static const u16 gRotatingBall_Pal[] = INCBIN_U16("graphics/interface/bag_spinner.gbapal"); -static const u8 gRotatingBall[] = INCBIN_U8("graphics/interface/bag_spinner.4bpp"); -static const u8 gCherryUnused[] = INCBIN_U8("graphics/unused/cherry.4bpp"); -static const u16 gCherryUnused_Pal[] = INCBIN_U16("graphics/unused/cherry.gbapal"); +static const u16 sRotatingBall_Pal[] = INCBIN_U16("graphics/bag/rotating_ball.gbapal"); +static const u8 sRotatingBall_Gfx[] = INCBIN_U8("graphics/bag/rotating_ball.4bpp"); +static const u8 sCherryUnused[] = INCBIN_U8("graphics/unused/cherry.4bpp"); +static const u16 sCherryUnused_Pal[] = INCBIN_U16("graphics/unused/cherry.gbapal"); static const struct OamData sBagOamData = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -93,12 +93,12 @@ static const union AnimCmd sSpriteAnim_Bag_Berries[] = static const union AnimCmd *const sBagSpriteAnimTable[] = { - sSpriteAnim_Bag_Closed, - sSpriteAnim_Bag_Items, - sSpriteAnim_Bag_Pokeballs, - sSpriteAnim_Bag_TMsHMs, - sSpriteAnim_Bag_Berries, - sSpriteAnim_Bag_KeyItems + [POCKET_NONE] = sSpriteAnim_Bag_Closed, + [POCKET_ITEMS] = sSpriteAnim_Bag_Items, + [POCKET_POKE_BALLS] = sSpriteAnim_Bag_Pokeballs, + [POCKET_TM_HM] = sSpriteAnim_Bag_TMsHMs, + [POCKET_BERRIES] = sSpriteAnim_Bag_Berries, + [POCKET_KEY_ITEMS] = sSpriteAnim_Bag_KeyItems, }; static const union AffineAnimCmd sSpriteAffineAnim_BagNormal[] = @@ -116,10 +116,15 @@ static const union AffineAnimCmd sSpriteAffineAnim_BagShake[] = AFFINEANIMCMD_END }; +enum { + ANIM_BAG_NORMAL, + ANIM_BAG_SHAKE, +}; + static const union AffineAnimCmd *const sBagAffineAnimCmds[] = { - sSpriteAffineAnim_BagNormal, - sSpriteAffineAnim_BagShake + [ANIM_BAG_NORMAL] = sSpriteAffineAnim_BagNormal, + [ANIM_BAG_SHAKE] = sSpriteAffineAnim_BagShake }; const struct CompressedSpriteSheet gBagMaleSpriteSheet = @@ -153,7 +158,7 @@ static const struct OamData sRotatingBallOamData = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -200,12 +205,12 @@ static const union AffineAnimCmd *const sRotatingBallAnimCmds_FullRotation[] = static const struct SpriteSheet sRotatingBallTable = { - gRotatingBall, 0x80, TAG_ROTATING_BALL_GFX + sRotatingBall_Gfx, 0x80, TAG_ROTATING_BALL_GFX }; static const struct SpritePalette sRotatingBallPaletteTable = { - gRotatingBall_Pal, TAG_ROTATING_BALL_GFX + sRotatingBall_Pal, TAG_ROTATING_BALL_GFX }; static const struct SpriteTemplate sRotatingBallSpriteTemplate = @@ -224,7 +229,7 @@ static const struct OamData sBerryPicOamData = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -241,7 +246,7 @@ static const struct OamData sBerryPicRotatingOamData = .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -269,9 +274,9 @@ static const struct SpriteFrameImage sBerryPicSpriteImageTable[] = {&gDecompressionBuffer[0], 0x800}, }; -static const struct SpriteTemplate gBerryPicSpriteTemplate = +static const struct SpriteTemplate sBerryPicSpriteTemplate = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = TAG_BERRY_PIC_PAL, .oam = &sBerryPicOamData, .anims = sBerryPicSpriteAnimTable, @@ -308,9 +313,9 @@ static const union AffineAnimCmd *const sBerryPicRotatingAnimCmds[] = sSpriteAffineAnim_BerryPicRotation2 }; -static const struct SpriteTemplate gBerryPicRotatingSpriteTemplate = +static const struct SpriteTemplate sBerryPicRotatingSpriteTemplate = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = TAG_BERRY_PIC_PAL, .oam = &sBerryPicRotatingOamData, .anims = sBerryPicSpriteAnimTable, @@ -321,49 +326,74 @@ static const struct SpriteTemplate gBerryPicRotatingSpriteTemplate = static const struct CompressedTilesPal sBerryPicTable[] = { - [ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1] = {gBerryPic_Cheri, gBerryPalette_Cheri}, - [ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1] = {gBerryPic_Chesto, gBerryPalette_Chesto}, - [ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1] = {gBerryPic_Pecha, gBerryPalette_Pecha}, - [ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1] = {gBerryPic_Rawst, gBerryPalette_Rawst}, - [ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1] = {gBerryPic_Aspear, gBerryPalette_Aspear}, - [ITEM_TO_BERRY(ITEM_LEPPA_BERRY) - 1] = {gBerryPic_Leppa, gBerryPalette_Leppa}, - [ITEM_TO_BERRY(ITEM_ORAN_BERRY) - 1] = {gBerryPic_Oran, gBerryPalette_Oran}, - [ITEM_TO_BERRY(ITEM_PERSIM_BERRY) - 1] = {gBerryPic_Persim, gBerryPalette_Persim}, - [ITEM_TO_BERRY(ITEM_LUM_BERRY) - 1] = {gBerryPic_Lum, gBerryPalette_Lum}, - [ITEM_TO_BERRY(ITEM_SITRUS_BERRY) - 1] = {gBerryPic_Sitrus, gBerryPalette_Sitrus}, - [ITEM_TO_BERRY(ITEM_FIGY_BERRY) - 1] = {gBerryPic_Figy, gBerryPalette_Figy}, - [ITEM_TO_BERRY(ITEM_WIKI_BERRY) - 1] = {gBerryPic_Wiki, gBerryPalette_Wiki}, - [ITEM_TO_BERRY(ITEM_MAGO_BERRY) - 1] = {gBerryPic_Mago, gBerryPalette_Mago}, - [ITEM_TO_BERRY(ITEM_AGUAV_BERRY) - 1] = {gBerryPic_Aguav, gBerryPalette_Aguav}, - [ITEM_TO_BERRY(ITEM_IAPAPA_BERRY) - 1] = {gBerryPic_Iapapa, gBerryPalette_Iapapa}, - [ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1] = {gBerryPic_Razz, gBerryPalette_Razz}, - [ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1] = {gBerryPic_Bluk, gBerryPalette_Bluk}, - [ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1] = {gBerryPic_Nanab, gBerryPalette_Nanab}, - [ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1] = {gBerryPic_Wepear, gBerryPalette_Wepear}, - [ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1] = {gBerryPic_Pinap, gBerryPalette_Pinap}, - [ITEM_TO_BERRY(ITEM_POMEG_BERRY) - 1] = {gBerryPic_Pomeg, gBerryPalette_Pomeg}, - [ITEM_TO_BERRY(ITEM_KELPSY_BERRY) - 1] = {gBerryPic_Kelpsy, gBerryPalette_Kelpsy}, - [ITEM_TO_BERRY(ITEM_QUALOT_BERRY) - 1] = {gBerryPic_Qualot, gBerryPalette_Qualot}, - [ITEM_TO_BERRY(ITEM_HONDEW_BERRY) - 1] = {gBerryPic_Hondew, gBerryPalette_Hondew}, - [ITEM_TO_BERRY(ITEM_GREPA_BERRY) - 1] = {gBerryPic_Grepa, gBerryPalette_Grepa}, - [ITEM_TO_BERRY(ITEM_TAMATO_BERRY) - 1] = {gBerryPic_Tamato, gBerryPalette_Tamato}, - [ITEM_TO_BERRY(ITEM_CORNN_BERRY) - 1] = {gBerryPic_Cornn, gBerryPalette_Cornn}, - [ITEM_TO_BERRY(ITEM_MAGOST_BERRY) - 1] = {gBerryPic_Magost, gBerryPalette_Magost}, - [ITEM_TO_BERRY(ITEM_RABUTA_BERRY) - 1] = {gBerryPic_Rabuta, gBerryPalette_Rabuta}, - [ITEM_TO_BERRY(ITEM_NOMEL_BERRY) - 1] = {gBerryPic_Nomel, gBerryPalette_Nomel}, - [ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1] = {gBerryPic_Spelon, gBerryPalette_Spelon}, - [ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1] = {gBerryPic_Pamtre, gBerryPalette_Pamtre}, - [ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1] = {gBerryPic_Watmel, gBerryPalette_Watmel}, - [ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1] = {gBerryPic_Durin, gBerryPalette_Durin}, - [ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1] = {gBerryPic_Belue, gBerryPalette_Belue}, - [ITEM_TO_BERRY(ITEM_LIECHI_BERRY) - 1] = {gBerryPic_Liechi, gBerryPalette_Liechi}, - [ITEM_TO_BERRY(ITEM_GANLON_BERRY) - 1] = {gBerryPic_Ganlon, gBerryPalette_Ganlon}, - [ITEM_TO_BERRY(ITEM_SALAC_BERRY) - 1] = {gBerryPic_Salac, gBerryPalette_Salac}, - [ITEM_TO_BERRY(ITEM_PETAYA_BERRY) - 1] = {gBerryPic_Petaya, gBerryPalette_Petaya}, - [ITEM_TO_BERRY(ITEM_APICOT_BERRY) - 1] = {gBerryPic_Apicot, gBerryPalette_Apicot}, - [ITEM_TO_BERRY(ITEM_LANSAT_BERRY) - 1] = {gBerryPic_Lansat, gBerryPalette_Lansat}, - [ITEM_TO_BERRY(ITEM_STARF_BERRY) - 1] = {gBerryPic_Starf, gBerryPalette_Starf}, - [ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1] = {gBerryPic_Enigma, gBerryPalette_Enigma}, + [ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1] = {gBerryPic_Cheri, gBerryPalette_Cheri}, + [ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1] = {gBerryPic_Chesto, gBerryPalette_Chesto}, + [ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1] = {gBerryPic_Pecha, gBerryPalette_Pecha}, + [ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1] = {gBerryPic_Rawst, gBerryPalette_Rawst}, + [ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1] = {gBerryPic_Aspear, gBerryPalette_Aspear}, + [ITEM_TO_BERRY(ITEM_LEPPA_BERRY) - 1] = {gBerryPic_Leppa, gBerryPalette_Leppa}, + [ITEM_TO_BERRY(ITEM_ORAN_BERRY) - 1] = {gBerryPic_Oran, gBerryPalette_Oran}, + [ITEM_TO_BERRY(ITEM_PERSIM_BERRY) - 1] = {gBerryPic_Persim, gBerryPalette_Persim}, + [ITEM_TO_BERRY(ITEM_LUM_BERRY) - 1] = {gBerryPic_Lum, gBerryPalette_Lum}, + [ITEM_TO_BERRY(ITEM_SITRUS_BERRY) - 1] = {gBerryPic_Sitrus, gBerryPalette_Sitrus}, + [ITEM_TO_BERRY(ITEM_FIGY_BERRY) - 1] = {gBerryPic_Figy, gBerryPalette_Figy}, + [ITEM_TO_BERRY(ITEM_WIKI_BERRY) - 1] = {gBerryPic_Wiki, gBerryPalette_Wiki}, + [ITEM_TO_BERRY(ITEM_MAGO_BERRY) - 1] = {gBerryPic_Mago, gBerryPalette_Mago}, + [ITEM_TO_BERRY(ITEM_AGUAV_BERRY) - 1] = {gBerryPic_Aguav, gBerryPalette_Aguav}, + [ITEM_TO_BERRY(ITEM_IAPAPA_BERRY) - 1] = {gBerryPic_Iapapa, gBerryPalette_Iapapa}, + [ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1] = {gBerryPic_Razz, gBerryPalette_Razz}, + [ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1] = {gBerryPic_Bluk, gBerryPalette_Bluk}, + [ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1] = {gBerryPic_Nanab, gBerryPalette_Nanab}, + [ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1] = {gBerryPic_Wepear, gBerryPalette_Wepear}, + [ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1] = {gBerryPic_Pinap, gBerryPalette_Pinap}, + [ITEM_TO_BERRY(ITEM_POMEG_BERRY) - 1] = {gBerryPic_Pomeg, gBerryPalette_Pomeg}, + [ITEM_TO_BERRY(ITEM_KELPSY_BERRY) - 1] = {gBerryPic_Kelpsy, gBerryPalette_Kelpsy}, + [ITEM_TO_BERRY(ITEM_QUALOT_BERRY) - 1] = {gBerryPic_Qualot, gBerryPalette_Qualot}, + [ITEM_TO_BERRY(ITEM_HONDEW_BERRY) - 1] = {gBerryPic_Hondew, gBerryPalette_Hondew}, + [ITEM_TO_BERRY(ITEM_GREPA_BERRY) - 1] = {gBerryPic_Grepa, gBerryPalette_Grepa}, + [ITEM_TO_BERRY(ITEM_TAMATO_BERRY) - 1] = {gBerryPic_Tamato, gBerryPalette_Tamato}, + [ITEM_TO_BERRY(ITEM_CORNN_BERRY) - 1] = {gBerryPic_Cornn, gBerryPalette_Cornn}, + [ITEM_TO_BERRY(ITEM_MAGOST_BERRY) - 1] = {gBerryPic_Magost, gBerryPalette_Magost}, + [ITEM_TO_BERRY(ITEM_RABUTA_BERRY) - 1] = {gBerryPic_Rabuta, gBerryPalette_Rabuta}, + [ITEM_TO_BERRY(ITEM_NOMEL_BERRY) - 1] = {gBerryPic_Nomel, gBerryPalette_Nomel}, + [ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1] = {gBerryPic_Spelon, gBerryPalette_Spelon}, + [ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1] = {gBerryPic_Pamtre, gBerryPalette_Pamtre}, + [ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1] = {gBerryPic_Watmel, gBerryPalette_Watmel}, + [ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1] = {gBerryPic_Durin, gBerryPalette_Durin}, + [ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1] = {gBerryPic_Belue, gBerryPalette_Belue}, + [ITEM_TO_BERRY(ITEM_CHILAN_BERRY) - 1] = {gBerryPic_Chilan, gBerryPalette_Chilan}, + [ITEM_TO_BERRY(ITEM_OCCA_BERRY) - 1] = {gBerryPic_Occa, gBerryPalette_Occa}, + [ITEM_TO_BERRY(ITEM_PASSHO_BERRY) - 1] = {gBerryPic_Passho, gBerryPalette_Passho}, + [ITEM_TO_BERRY(ITEM_WACAN_BERRY) - 1] = {gBerryPic_Wacan, gBerryPalette_Wacan}, + [ITEM_TO_BERRY(ITEM_RINDO_BERRY) - 1] = {gBerryPic_Rindo, gBerryPalette_Rindo}, + [ITEM_TO_BERRY(ITEM_YACHE_BERRY) - 1] = {gBerryPic_Yache, gBerryPalette_Yache}, + [ITEM_TO_BERRY(ITEM_CHOPLE_BERRY) - 1] = {gBerryPic_Chople, gBerryPalette_Chople}, + [ITEM_TO_BERRY(ITEM_KEBIA_BERRY) - 1] = {gBerryPic_Kebia, gBerryPalette_Kebia}, + [ITEM_TO_BERRY(ITEM_SHUCA_BERRY) - 1] = {gBerryPic_Shuca, gBerryPalette_Shuca}, + [ITEM_TO_BERRY(ITEM_COBA_BERRY) - 1] = {gBerryPic_Coba, gBerryPalette_Coba}, + [ITEM_TO_BERRY(ITEM_PAYAPA_BERRY) - 1] = {gBerryPic_Payapa, gBerryPalette_Payapa}, + [ITEM_TO_BERRY(ITEM_TANGA_BERRY) - 1] = {gBerryPic_Tanga, gBerryPalette_Tanga}, + [ITEM_TO_BERRY(ITEM_CHARTI_BERRY) - 1] = {gBerryPic_Charti, gBerryPalette_Charti}, + [ITEM_TO_BERRY(ITEM_KASIB_BERRY) - 1] = {gBerryPic_Kasib, gBerryPalette_Kasib}, + [ITEM_TO_BERRY(ITEM_HABAN_BERRY) - 1] = {gBerryPic_Haban, gBerryPalette_Haban}, + [ITEM_TO_BERRY(ITEM_COLBUR_BERRY) - 1] = {gBerryPic_Colbur, gBerryPalette_Colbur}, + [ITEM_TO_BERRY(ITEM_BABIRI_BERRY) - 1] = {gBerryPic_Babiri, gBerryPalette_Babiri}, + [ITEM_TO_BERRY(ITEM_ROSELI_BERRY) - 1] = {gBerryPic_Roseli, gBerryPalette_Roseli}, + [ITEM_TO_BERRY(ITEM_LIECHI_BERRY) - 1] = {gBerryPic_Liechi, gBerryPalette_Liechi}, + [ITEM_TO_BERRY(ITEM_GANLON_BERRY) - 1] = {gBerryPic_Ganlon, gBerryPalette_Ganlon}, + [ITEM_TO_BERRY(ITEM_SALAC_BERRY) - 1] = {gBerryPic_Salac, gBerryPalette_Salac}, + [ITEM_TO_BERRY(ITEM_PETAYA_BERRY) - 1] = {gBerryPic_Petaya, gBerryPalette_Petaya}, + [ITEM_TO_BERRY(ITEM_APICOT_BERRY) - 1] = {gBerryPic_Apicot, gBerryPalette_Apicot}, + [ITEM_TO_BERRY(ITEM_LANSAT_BERRY) - 1] = {gBerryPic_Lansat, gBerryPalette_Lansat}, + [ITEM_TO_BERRY(ITEM_STARF_BERRY) - 1] = {gBerryPic_Starf, gBerryPalette_Starf}, + [ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1] = {gBerryPic_Enigma, gBerryPalette_Enigma}, + [ITEM_TO_BERRY(ITEM_MICLE_BERRY) - 1] = {gBerryPic_Micle, gBerryPalette_Micle}, + [ITEM_TO_BERRY(ITEM_CUSTAP_BERRY) - 1] = {gBerryPic_Custap, gBerryPalette_Custap}, + [ITEM_TO_BERRY(ITEM_JABOCA_BERRY) - 1] = {gBerryPic_Jaboca, gBerryPalette_Jaboca}, + [ITEM_TO_BERRY(ITEM_ROWAP_BERRY) - 1] = {gBerryPic_Rowap, gBerryPalette_Rowap}, + [ITEM_TO_BERRY(ITEM_KEE_BERRY) - 1] = {gBerryPic_Kee, gBerryPalette_Kee}, + [ITEM_TO_BERRY(ITEM_MARANGA_BERRY)- 1] = {gBerryPic_Maranga, gBerryPalette_Maranga}, + [ITEM_TO_BERRY(ITEM_ENIGMA_BERRY_E_READER) - 1] = {gBerryPic_Enigma, gBerryPalette_Enigma}, }; const struct CompressedSpriteSheet gBerryCheckCircleSpriteSheet = @@ -381,7 +411,7 @@ static const struct OamData sBerryCheckCircleOamData = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -404,7 +434,7 @@ static const union AnimCmd *const sBerryCheckCircleSpriteAnimTable[] = sSpriteAnim_BerryCheckCircle }; -static const struct SpriteTemplate gBerryCheckCircleSpriteTemplate = +static const struct SpriteTemplate sBerryCheckCircleSpriteTemplate = { .tileTag = TAG_BERRY_CHECK_CIRCLE_GFX, .paletteTag = TAG_BERRY_CHECK_CIRCLE_GFX, @@ -436,6 +466,8 @@ void AddBagVisualSprite(u8 bagPocketId) SetBagVisualPocketId(bagPocketId, FALSE); } +#define sPocketId data[0] + void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets) { struct Sprite *sprite = &gSprites[gBagMenu->spriteIds[ITEMMENUSPRITE_BAG]]; @@ -443,8 +475,8 @@ void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets) { sprite->y2 = -5; sprite->callback = SpriteCB_BagVisualSwitchingPockets; - sprite->data[0] = bagPocketId + 1; - StartSpriteAnim(sprite, 0); + sprite->sPocketId = bagPocketId + 1; + StartSpriteAnim(sprite, POCKET_NONE); } else { @@ -460,26 +492,29 @@ static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite) } else { - StartSpriteAnim(sprite, sprite->data[0]); + StartSpriteAnim(sprite, sprite->sPocketId); sprite->callback = SpriteCallbackDummy; } } +#undef sPocketId + void ShakeBagSprite(void) { struct Sprite *sprite = &gSprites[gBagMenu->spriteIds[ITEMMENUSPRITE_BAG]]; if (sprite->affineAnimEnded) { - StartSpriteAffineAnim(sprite, 1); + StartSpriteAffineAnim(sprite, ANIM_BAG_SHAKE); sprite->callback = SpriteCB_ShakeBagSprite; } } static void SpriteCB_ShakeBagSprite(struct Sprite *sprite) { + // Wait for shaking to end if (sprite->affineAnimEnded) { - StartSpriteAffineAnim(sprite, 0); + StartSpriteAffineAnim(sprite, ANIM_BAG_NORMAL); sprite->callback = SpriteCallbackDummy; } } @@ -544,7 +579,22 @@ void AddBagItemIconSprite(u16 itemId, u8 id) void RemoveBagItemIconSprite(u8 id) { +// BUG: For one frame, the item you scroll to in the Bag menu +// will have an incorrect palette and may be seen as a flicker. +#ifdef BUGFIX + u8 *spriteId = &gBagMenu->spriteIds[ITEMMENUSPRITE_ITEM]; + + if (spriteId[id ^ 1] != SPRITE_NONE) + gSprites[spriteId[id ^ 1]].invisible = TRUE; + + if (spriteId[id] != SPRITE_NONE) + { + DestroySpriteAndFreeResources(&gSprites[spriteId[id]]); + spriteId[id] = SPRITE_NONE; + } +#else RemoveBagSprite(id + ITEMMENUSPRITE_ITEM); +#endif } void CreateItemMenuSwapLine(void) @@ -559,26 +609,34 @@ void SetItemMenuSwapLineInvisibility(bool8 invisible) void UpdateItemMenuSwapLinePos(u8 y) { - UpdateSwapLineSpritesPos(&gBagMenu->spriteIds[ITEMMENUSPRITE_SWAP_LINE], ITEMMENU_SWAP_LINE_LENGTH | 0x80, 120, (y + 1) * 16); + UpdateSwapLineSpritesPos(&gBagMenu->spriteIds[ITEMMENUSPRITE_SWAP_LINE], ITEMMENU_SWAP_LINE_LENGTH | SWAP_LINE_HAS_MARGIN, 120, (y + 1) * 16); } -static void sub_80D5018(void *mem0, void *mem1) +static void ArrangeBerryGfx(void *src, void *dest) { u8 i, j; - memset(mem1, 0, 0x800); - mem1 += 0x100; + memset(dest, 0, 0x800); + + // Create top margin + dest += 0x100; + for (i = 0; i < 6; i++) { - mem1 += 0x20; + // Create left margin + dest += 0x20; + + // Copy one row of berry's icon for (j = 0; j < 6; j++) { - memcpy(mem1, mem0, 0x20); - mem1 += 0x20; - mem0 += 0x20; + memcpy(dest, src, 0x20); + dest += 0x20; + src += 0x20; } + + // Create right margin if (i != 5) - mem1 += 0x20; + dest += 0x20; } } @@ -586,7 +644,7 @@ static void LoadBerryGfx(u8 berryId) { struct CompressedSpritePalette pal; - if (berryId == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1 && IsEnigmaBerryValid()) + if (berryId == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY_E_READER) - 1 && IsEnigmaBerryValid()) { // unknown empty if statement } @@ -595,13 +653,13 @@ static void LoadBerryGfx(u8 berryId) pal.tag = TAG_BERRY_PIC_PAL; LoadCompressedSpritePalette(&pal); LZDecompressWram(sBerryPicTable[berryId].tiles, &gDecompressionBuffer[0x1000]); - sub_80D5018(&gDecompressionBuffer[0x1000], &gDecompressionBuffer[0]); + ArrangeBerryGfx(&gDecompressionBuffer[0x1000], &gDecompressionBuffer[0]); } u8 CreateBerryTagSprite(u8 id, s16 x, s16 y) { LoadBerryGfx(id); - return CreateSprite(&gBerryPicSpriteTemplate, x, y, 0); + return CreateSprite(&sBerryPicSpriteTemplate, x, y, 0); } void FreeBerryTagSpritePalette(void) @@ -616,7 +674,7 @@ u8 CreateSpinningBerrySprite(u8 berryId, u8 x, u8 y, bool8 startAffine) FreeSpritePaletteByTag(TAG_BERRY_PIC_PAL); LoadBerryGfx(berryId); - spriteId = CreateSprite(&gBerryPicRotatingSpriteTemplate, x, y, 0); + spriteId = CreateSprite(&sBerryPicRotatingSpriteTemplate, x, y, 0); if (startAffine == TRUE) StartSpriteAffineAnim(&gSprites[spriteId], 1); @@ -625,5 +683,5 @@ u8 CreateSpinningBerrySprite(u8 berryId, u8 x, u8 y, bool8 startAffine) u8 CreateBerryFlavorCircleSprite(s16 x) { - return CreateSprite(&gBerryCheckCircleSpriteTemplate, x, 116, 0); + return CreateSprite(&sBerryCheckCircleSpriteTemplate, x, 116, 0); } diff --git a/src/item_use.c b/src/item_use.c index bcbe321a28..16ff1b85c9 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -1,6 +1,7 @@ #include "global.h" #include "item_use.h" #include "battle.h" +#include "battle_anim.h" #include "battle_pyramid.h" #include "battle_pyramid_bag.h" #include "berry.h" @@ -42,33 +43,33 @@ #include "constants/items.h" #include "constants/songs.h" -static void SetUpItemUseCallback(u8 taskId); +static void SetUpItemUseCallback(u8); static void FieldCB_UseItemOnField(void); -static void Task_CallItemUseOnFieldCallback(u8 taskId); -static void Task_UseItemfinder(u8 taskId); -static void Task_CloseItemfinderMessage(u8 taskId); -static void Task_HiddenItemNearby(u8 taskId); -static void Task_StandingOnHiddenItem(u8 taskId); +static void Task_CallItemUseOnFieldCallback(u8); +static void Task_UseItemfinder(u8); +static void Task_CloseItemfinderMessage(u8); +static void Task_HiddenItemNearby(u8); +static void Task_StandingOnHiddenItem(u8); static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8); -static u8 GetDirectionToHiddenItem(s16 distanceX, s16 distanceY); -static void PlayerFaceHiddenItem(u8 a); -static void CheckForHiddenItemsInMapConnection(u8 taskId); -static void Task_OpenRegisteredPokeblockCase(u8 taskId); -static void ItemUseOnFieldCB_Bike(u8 taskId); +static u8 GetDirectionToHiddenItem(s16, s16); +static void PlayerFaceHiddenItem(u8); +static void CheckForHiddenItemsInMapConnection(u8); +static void Task_OpenRegisteredPokeblockCase(u8); +static void ItemUseOnFieldCB_Bike(u8); static void ItemUseOnFieldCB_Rod(u8); static void ItemUseOnFieldCB_Itemfinder(u8); -static void ItemUseOnFieldCB_Berry(u8 taskId); -static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId); -static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId); +static void ItemUseOnFieldCB_Berry(u8); +static void ItemUseOnFieldCB_WailmerPailBerry(u8); +static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8); static bool8 TryToWaterSudowoodo(void); -static void BootUpSoundTMHM(u8 taskId); -static void Task_ShowTMHMContainedMessage(u8 taskId); -static void UseTMHMYesNo(u8 taskId); -static void UseTMHM(u8 taskId); -static void Task_StartUseRepel(u8 taskId); -static void Task_UseRepel(u8 taskId); -static void Task_CloseCantUseKeyItemMessage(u8 taskId); -static void SetDistanceOfClosestHiddenItem(u8 taskId, s16 x, s16 y); +static void BootUpSoundTMHM(u8); +static void Task_ShowTMHMContainedMessage(u8); +static void UseTMHMYesNo(u8); +static void UseTMHM(u8); +static void Task_StartUseRepel(u8); +static void Task_UseRepel(u8); +static void Task_CloseCantUseKeyItemMessage(u8); +static void SetDistanceOfClosestHiddenItem(u8, s16, s16); static void CB2_OpenPokeblockFromBag(void); // EWRAM variables @@ -98,7 +99,7 @@ static const struct YesNoFuncTable sUseTMHMYesNoFuncTable = static void SetUpItemUseCallback(u8 taskId) { u8 type; - if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY) + if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY_E_READER) type = gTasks[taskId].tEnigmaBerryType - 1; else type = ItemId_GetType(gSpecialVar_ItemId) - 1; @@ -143,7 +144,7 @@ static void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyIte if (!isUsingRegisteredKeyItemOnField) { if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, Task_CloseBattlePyramidBagMessage); } @@ -163,10 +164,10 @@ static void DisplayCannotDismountBikeMessage(u8 taskId, bool8 isUsingRegisteredK static void Task_CloseCantUseKeyItemMessage(u8 taskId) { - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(0, TRUE); DestroyTask(taskId); ScriptUnfreezeObjectEvents(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); } u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId) @@ -182,9 +183,9 @@ u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId) // Mail in the bag menu can't have a message but it can be checked (view the mail background, no message) static void CB2_CheckMail(void) { - struct MailStruct mail; + struct Mail mail; mail.itemId = gSpecialVar_ItemId; - ReadMail(&mail, CB2_ReturnToBagMenuPocket, 0); + ReadMail(&mail, CB2_ReturnToBagMenuPocket, FALSE); } void ItemUseOutOfBattle_Mail(u8 taskId) @@ -195,7 +196,7 @@ void ItemUseOutOfBattle_Mail(u8 taskId) void ItemUseOutOfBattle_Bike(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; s16 coordsY; s16 coordsX; u8 behavior; @@ -222,7 +223,7 @@ static void ItemUseOnFieldCB_Bike(u8 taskId) else // ACRO_BIKE GetOnOffBike(PLAYER_AVATAR_FLAG_ACRO_BIKE); ScriptUnfreezeObjectEvents(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); } @@ -247,9 +248,9 @@ static bool32 CanFish(void) } else { - if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) && !MapGridIsImpassableAt(x, y)) + if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) && MapGridGetCollisionAt(x, y) == 0) return TRUE; - if (MetatileBehavior_8089510(tileBehavior) == TRUE) + if (MetatileBehavior_IsBridgeOverWaterNoEdge(tileBehavior) == TRUE) return TRUE; } @@ -301,7 +302,7 @@ static void Task_UseItemfinder(u8 taskId) u8 playerDir; u8 playerDirToItem; u8 i; - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (tCounter == 0) { if (tItemfinderBeeps == 4) @@ -335,9 +336,9 @@ static void Task_UseItemfinder(u8 taskId) static void Task_CloseItemfinderMessage(u8 taskId) { - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(0, TRUE); ScriptUnfreezeObjectEvents(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); } @@ -353,12 +354,14 @@ static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 ta // Check if there are any hidden items on the current map that haven't been picked up if (events->bgEvents[i].kind == BG_EVENT_HIDDEN_ITEM && !FlagGet(events->bgEvents[i].bgUnion.hiddenItem.hiddenItemId + FLAG_HIDDEN_ITEMS_START)) { - itemX = (u16)events->bgEvents[i].x + 7; + itemX = (u16)events->bgEvents[i].x + MAP_OFFSET; distanceX = itemX - playerX; - itemY = (u16)events->bgEvents[i].y + 7; + itemY = (u16)events->bgEvents[i].y + MAP_OFFSET; distanceY = itemY - playerY; - if ((u16)(distanceX + 7) < 15 && (distanceY >= -5) && (distanceY < 6)) + // Player can see 7 metatiles on either side horizontally + // and 5 metatiles on either side vertically + if (distanceX >= -7 && distanceX <= 7 && distanceY >= -5 && distanceY <= 5) SetDistanceOfClosestHiddenItem(taskId, distanceX, distanceY); } } @@ -401,28 +404,28 @@ static bool8 IsHiddenItemPresentInConnection(struct MapConnection *connection, i switch (connection->direction) { // same weird temp variable behavior seen in IsHiddenItemPresentAtCoords - case 2: - localOffset = connection->offset + 7; + case CONNECTION_NORTH: + localOffset = connection->offset + MAP_OFFSET; localX = x - localOffset; - localLength = mapHeader->mapLayout->height - 7; + localLength = mapHeader->mapLayout->height - MAP_OFFSET; localY = localLength + y; // additions are reversed for some reason break; - case 1: - localOffset = connection->offset + 7; + case CONNECTION_SOUTH: + localOffset = connection->offset + MAP_OFFSET; localX = x - localOffset; - localLength = gMapHeader.mapLayout->height + 7; + localLength = gMapHeader.mapLayout->height + MAP_OFFSET; localY = y - localLength; break; - case 3: - localLength = mapHeader->mapLayout->width - 7; + case CONNECTION_WEST: + localLength = mapHeader->mapLayout->width - MAP_OFFSET; localX = localLength + x; // additions are reversed for some reason - localOffset = connection->offset + 7; + localOffset = connection->offset + MAP_OFFSET; localY = y - localOffset; break; - case 4: - localLength = gMapHeader.mapLayout->width + 7; + case CONNECTION_EAST: + localLength = gMapHeader.mapLayout->width + MAP_OFFSET; localX = x - localLength; - localOffset = connection->offset + 7; + localOffset = connection->offset + MAP_OFFSET; localY = y - localOffset; break; default: @@ -435,14 +438,16 @@ static void CheckForHiddenItemsInMapConnection(u8 taskId) { s16 playerX, playerY; s16 x, y; - s16 width = gMapHeader.mapLayout->width + 7; - s16 height = gMapHeader.mapLayout->height + 7; + s16 width = gMapHeader.mapLayout->width + MAP_OFFSET; + s16 height = gMapHeader.mapLayout->height + MAP_OFFSET; - s16 var1 = 7; - s16 var2 = 7; + s16 var1 = MAP_OFFSET; + s16 var2 = MAP_OFFSET; PlayerGetDestCoords(&playerX, &playerY); + // Player can see 7 metatiles on either side horizontally + // and 5 metatiles on either side vertically for (x = playerX - 7; x <= playerX + 7; x++) { for (y = playerY - 5; y <= playerY + 5; y++) @@ -509,7 +514,7 @@ static void SetDistanceOfClosestHiddenItem(u8 taskId, s16 itemDistanceX, s16 ite } else { - if (oldItemAbsX + oldItemAbsY == newItemAbsX + newItemAbsY + if (oldItemAbsX + oldItemAbsY == newItemAbsX + newItemAbsY && (oldItemAbsY > newItemAbsY || (oldItemAbsY == newItemAbsY && tItemDistanceY < itemDistanceY))) { // If items are equal distance, use whichever is closer on the Y axis or further south @@ -608,7 +613,7 @@ static void Task_StandingOnHiddenItem(u8 taskId) void ItemUseOutOfBattle_PokeblockCase(u8 taskId) { - if (MenuHelpers_LinkSomething() == TRUE) // link func + if (MenuHelpers_IsLinkActive() == TRUE) { DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); } @@ -647,7 +652,7 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId) if (!gTasks[taskId].tUsingRegisteredKeyItem) { - DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); } else { @@ -662,7 +667,7 @@ void ItemUseOutOfBattle_PowderJar(u8 taskId) if (!gTasks[taskId].tUsingRegisteredKeyItem) { - DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); } else { @@ -688,8 +693,8 @@ void ItemUseOutOfBattle_Berry(u8 taskId) static void ItemUseOnFieldCB_Berry(u8 taskId) { RemoveBagItem(gSpecialVar_ItemId, 1); - ScriptContext2_Enable(); - ScriptContext1_SetupScript(BerryTree_EventScript_ItemUsePlantBerry); + LockPlayerFieldControls(); + ScriptContext_SetupScript(BerryTree_EventScript_ItemUsePlantBerry); DestroyTask(taskId); } @@ -713,19 +718,19 @@ void ItemUseOutOfBattle_WailmerPail(u8 taskId) static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId) { - ScriptContext2_Enable(); - ScriptContext1_SetupScript(BerryTree_EventScript_ItemUseWailmerPail); + LockPlayerFieldControls(); + ScriptContext_SetupScript(BerryTree_EventScript_ItemUseWailmerPail); DestroyTask(taskId); } static bool8 TryToWaterSudowoodo(void) { u16 x, y; - u8 z; + u8 elevation; u8 objId; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - z = PlayerGetZCoord(); - objId = GetObjectEventIdByXYZ(x, y, z); + elevation = PlayerGetElevation(); + objId = GetObjectEventIdByPosition(x, y, elevation); if (objId == OBJECT_EVENTS_COUNT || gObjectEvents[objId].graphicsId != OBJ_EVENT_GFX_SUDOWOODO) return FALSE; else @@ -734,8 +739,8 @@ static bool8 TryToWaterSudowoodo(void) static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId) { - ScriptContext2_Enable(); - ScriptContext1_SetupScript(BattleFrontier_OutsideEast_EventScript_WaterSudowoodo); + LockPlayerFieldControls(); + ScriptContext_SetupScript(BattleFrontier_OutsideEast_EventScript_WaterSudowoodo); DestroyTask(taskId); } @@ -745,6 +750,18 @@ void ItemUseOutOfBattle_Medicine(u8 taskId) SetUpItemUseCallback(taskId); } +void ItemUseOutOfBattle_AbilityCapsule(u8 taskId) +{ + gItemUseCB = ItemUseCB_AbilityCapsule; + SetUpItemUseCallback(taskId); +} + +void ItemUseOutOfBattle_AbilityPatch(u8 taskId) +{ + gItemUseCB = ItemUseCB_AbilityPatch; + SetUpItemUseCallback(taskId); +} + void ItemUseOutOfBattle_ReduceEV(u8 taskId) { gItemUseCB = ItemUseCB_ReduceEV; @@ -778,9 +795,9 @@ void ItemUseOutOfBattle_RareCandy(u8 taskId) void ItemUseOutOfBattle_TMHM(u8 taskId) { if (gSpecialVar_ItemId >= ITEM_HM01_CUT) - DisplayItemMessage(taskId, 1, gText_BootedUpHM, BootUpSoundTMHM); // HM + DisplayItemMessage(taskId, FONT_NORMAL, gText_BootedUpHM, BootUpSoundTMHM); // HM else - DisplayItemMessage(taskId, 1, gText_BootedUpTM, BootUpSoundTMHM); // TM + DisplayItemMessage(taskId, FONT_NORMAL, gText_BootedUpTM, BootUpSoundTMHM); // TM } static void BootUpSoundTMHM(u8 taskId) @@ -795,7 +812,7 @@ static void Task_ShowTMHMContainedMessage(u8 taskId) { StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]); StringExpandPlaceholders(gStringVar4, gText_TMHMContainedVar1); - DisplayItemMessage(taskId, 1, gStringVar4, UseTMHMYesNo); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, UseTMHMYesNo); } } @@ -832,14 +849,14 @@ void ItemUseOutOfBattle_Repel(u8 taskId) if (VarGet(VAR_REPEL_STEP_COUNT) == 0) gTasks[taskId].func = Task_StartUseRepel; else if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gText_RepelEffectsLingered, CloseItemMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gText_RepelEffectsLingered, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gText_RepelEffectsLingered, Task_CloseBattlePyramidBagMessage); } static void Task_StartUseRepel(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (++data[8] > 7) { @@ -856,7 +873,7 @@ static void Task_UseRepel(u8 taskId) VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); RemoveUsedItem(); if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage); } @@ -868,7 +885,7 @@ static void Task_UsedBlackWhiteFlute(u8 taskId) { PlaySE(SE_GLASS_FLUTE); if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gStringVar4, CloseItemMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage); } @@ -903,7 +920,12 @@ void Task_UseDigEscapeRopeOnField(u8 taskId) static void ItemUseOnFieldCB_EscapeRope(u8 taskId) { Overworld_ResetStateAfterDigEscRope(); - RemoveUsedItem(); + #if I_KEY_ESCAPE_ROPE < GEN_8 + RemoveUsedItem(); + #else + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); + #endif gTasks[taskId].data[0] = 0; DisplayItemMessageOnField(taskId, gStringVar4, Task_UseDigEscapeRopeOnField); } @@ -935,22 +957,61 @@ void ItemUseOutOfBattle_EvolutionStone(u8 taskId) SetUpItemUseCallback(taskId); } +static u32 GetBallThrowableState(void) +{ + if (IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + && IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))) + return BALL_THROW_UNABLE_TWO_MONS; + else if (IsPlayerPartyAndPokemonStorageFull() == TRUE) + return BALL_THROW_UNABLE_NO_ROOM; +#if B_SEMI_INVULNERABLE_CATCH >= GEN_4 + else if (gStatuses3[GetCatchingBattler()] & STATUS3_SEMI_INVULNERABLE) + return BALL_THROW_UNABLE_SEMI_INVULNERABLE; +#endif + + return BALL_THROW_ABLE; +} + +bool32 CanThrowBall(void) +{ + return (GetBallThrowableState() == BALL_THROW_ABLE); +} + +static const u8 sText_CantThrowPokeBall_TwoMons[] = _("Cannot throw a ball!\nThere are two Pokémon out there!\p"); +static const u8 sText_CantThrowPokeBall_SemiInvulnerable[] = _("Cannot throw a ball!\nThere's no Pokémon in sight!\p"); void ItemUseInBattle_PokeBall(u8 taskId) { - if (IsPlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon? + switch (GetBallThrowableState()) { + case BALL_THROW_ABLE: + default: RemoveBagItem(gSpecialVar_ItemId, 1); if (!InBattlePyramid()) Task_FadeAndCloseBagMenu(taskId); else CloseBattlePyramidBag(taskId); + break; + case BALL_THROW_UNABLE_TWO_MONS: + if (!InBattlePyramid()) + DisplayItemMessage(taskId, FONT_NORMAL, sText_CantThrowPokeBall_TwoMons, CloseItemMessage); + else + DisplayItemMessageInBattlePyramid(taskId, sText_CantThrowPokeBall_TwoMons, Task_CloseBattlePyramidBagMessage); + break; + case BALL_THROW_UNABLE_NO_ROOM: + if (!InBattlePyramid()) + DisplayItemMessage(taskId, FONT_NORMAL, gText_BoxFull, CloseItemMessage); + else + DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, Task_CloseBattlePyramidBagMessage); + break; + #if B_SEMI_INVULNERABLE_CATCH >= GEN_4 + case BALL_THROW_UNABLE_SEMI_INVULNERABLE: + if (!InBattlePyramid()) + DisplayItemMessage(taskId, FONT_NORMAL, sText_CantThrowPokeBall_SemiInvulnerable, CloseItemMessage); + else + DisplayItemMessageInBattlePyramid(taskId, sText_CantThrowPokeBall_SemiInvulnerable, Task_CloseBattlePyramidBagMessage); + break; + #endif } - else if (!InBattlePyramid()) - { - DisplayItemMessage(taskId, 1, gText_BoxFull, CloseItemMessage); - } - else - DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, Task_CloseBattlePyramidBagMessage); } static void Task_CloseStatIncreaseMessage(u8 taskId) @@ -971,7 +1032,7 @@ static void Task_UseStatIncreaseItem(u8 taskId) PlaySE(SE_USE_ITEM); RemoveBagItem(gSpecialVar_ItemId, 1); if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, UseStatIncreaseItem(gSpecialVar_ItemId), Task_CloseStatIncreaseMessage); + DisplayItemMessage(taskId, FONT_NORMAL, UseStatIncreaseItem(gSpecialVar_ItemId), Task_CloseStatIncreaseMessage); else DisplayItemMessageInBattlePyramid(taskId, UseStatIncreaseItem(gSpecialVar_ItemId), Task_CloseStatIncreaseMessage); } @@ -985,7 +1046,7 @@ void ItemUseInBattle_StatIncrease(u8 taskId) if (ExecuteTableBasedItemEffect(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE) { if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gText_WontHaveEffect, CloseItemMessage); + DisplayItemMessage(taskId, FONT_NORMAL, gText_WontHaveEffect, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, Task_CloseBattlePyramidBagMessage); } @@ -1037,7 +1098,7 @@ void ItemUseInBattle_Escape(u8 taskId) { RemoveUsedItem(); if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gStringVar4, Task_FadeAndCloseBagMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_FadeAndCloseBagMenu); else DisplayItemMessageInBattlePyramid(taskId, gStringVar4, CloseBattlePyramidBag); } diff --git a/src/landmark.c b/src/landmark.c index 52d52500aa..615a9bfe3e 100644 --- a/src/landmark.c +++ b/src/landmark.c @@ -336,7 +336,7 @@ static const struct Landmark *const Landmarks_MtChimney_2[] = NULL, }; -static const struct LandmarkList gLandmarkLists[] = +static const struct LandmarkList sLandmarkLists[] = { {MAPSEC_ROUTE_103, 2, Landmarks_Route103_2}, {MAPSEC_ROUTE_104, 0, Landmarks_Route104_0}, @@ -420,21 +420,21 @@ static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id) { u16 i = 0; - for (; gLandmarkLists[i].mapSection != MAPSEC_NONE; i++) + for (; sLandmarkLists[i].mapSection != MAPSEC_NONE; i++) { - if (gLandmarkLists[i].mapSection > mapSection) + if (sLandmarkLists[i].mapSection > mapSection) return NULL; - if (gLandmarkLists[i].mapSection == mapSection) + if (sLandmarkLists[i].mapSection == mapSection) break; } - if (gLandmarkLists[i].mapSection == MAPSEC_NONE) + if (sLandmarkLists[i].mapSection == MAPSEC_NONE) return NULL; - for (; gLandmarkLists[i].mapSection == mapSection; i++) + for (; sLandmarkLists[i].mapSection == mapSection; i++) { - if (gLandmarkLists[i].id == id) - return gLandmarkLists[i].landmarks; + if (sLandmarkLists[i].id == id) + return sLandmarkLists[i].landmarks; } return NULL; diff --git a/src/libgcnmultiboot.s b/src/libgcnmultiboot.s index dbf70ccf86..968a0836ec 100644 --- a/src/libgcnmultiboot.s +++ b/src/libgcnmultiboot.s @@ -4,25 +4,50 @@ .include "asm/macros.inc" .include "constants/constants.inc" + .equiv GCMB_STRUCT_COUNTER1, 0x00 + .equiv GCMB_STRUCT_COUNTER2, 0x01 + .equiv GCMB_STRUCT_MBPROGRESS, 0x02 + .equiv GCMB_STRUCT_SAVEDVCOUNT, 0x03 + .equiv GCMB_STRUCT_KEYA, 0x04 + .equiv GCMB_STRUCT_KEYB, 0x08 + .equiv GCMB_STRUCT_KEYC, 0x0C + .equiv GCMB_STRUCT_BOOT_KEY, 0x10 + .equiv GCMB_STRUCT_IMAGE_SIZE, 0x12 + .equiv GCMB_STRUCT_SESSION_KEY, 0x14 + .equiv GCMB_STRUCT_HASH_VAL, 0x18 + .equiv GCMB_STRUCT_KEYC_DERIVATION, 0x1C .equiv GCMB_STRUCT_BASE_DEST_PTR, 0x20 .equiv GCMB_STRUCT_CUR_DEST_PTR, 0x24 .equiv GCMB_STRUCT_SERIAL_INTR_HANDLER, 0x28 - .equiv ROM_HEADER_NINTENDO_LOGO_OFFSET, 0x4 + .equiv ROM_HEADER_NINTENDO_LOGO_OFFSET, 0x04 + .equiv ROM_HEADER_NINTENDO_LOGO_LENGTH, 0x98 + .equiv ROM_HEADER_NINTENDO_LOGO_END, 0xA0 + + .equiv MBPROGRESS_NONE, 0x00 + .equiv MBPROGRESS_LOGO_CORRECT, 0x01 + .equiv MBPROGRESS_READY_TO_BOOT, 0x02 + + .equiv GCMB_MAGIC_BOOTKEY_HASHVAL, 0xBB + .equiv GCMB_MAGIC_BOOTKEY, 0xBB + .equiv GCMB_MAGIC_COUNTER2, 0xCC + .equiv GCMB_MAGIC_KEYA, 0xDD + .equiv GCMB_MAGIC_KEYB, 0xEE + .equiv GCMB_MAGIC_KEYCDERIVATION, 0xFF .syntax unified .text thumb_func_start GameCubeMultiBoot_Hash -GameCubeMultiBoot_Hash: @ 82DED70 +GameCubeMultiBoot_Hash: push {r4,lr} ldr r4, pool_HashVal eors r3, r1 movs r2, 0x20 GameCubeMultiBoot_Hash_Loop: - lsrs r3, #1 + lsrs r3, 1 bcc GameCubeMultiBoot_Hash_SkipEor eors r3, r4 @@ -36,138 +61,178 @@ GameCubeMultiBoot_Hash_SkipEor: thumb_func_start GameCubeMultiBoot_Main @ void GameCubeMultiBoot_Main(struct GameCubeMultiBoot *mb); -GameCubeMultiBoot_Main: @ 82DED84 - ldr r1, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER] - cmp r1, #0 - beq _082DEDAA - ldrb r1, [r0, 0x1] - adds r1, 0x1 - strb r1, [r0, 0x1] - ldrb r1, [r0, 0x2] - cmp r1, 0x2 - beq _082DEDF4 - ldr r3, pool_InterruptRegs - ldrh r2, [r3, #OFFSET_REG_IME - 0x200] - movs r1, 0 - strh r1, [r3, #OFFSET_REG_IME - 0x200] - ldrb r1, [r0] - cmp r1, 0xA - bgt _082DEDA8 - adds r1, 0x1 - strb r1, [r0] -_082DEDA8: - strh r2, [r3, #OFFSET_REG_IME - 0x200] -_082DEDAA: - bcs GameCubeMultiBoot_Init - ldrb r1, [r0, 0x2] +GameCubeMultiBoot_Main: + @ If there is no interrupt handler, skip counter manipulation + ldr r1, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER] cmp r1, 0 - bne _082DEDF6 - ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR] - ldr r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR] + beq GameCubeMultiBoot_Main_SkipCounters + @ Increment the second counter + ldrb r1, [r0, GCMB_STRUCT_COUNTER2] + adds r1, 0x1 + strb r1, [r0, GCMB_STRUCT_COUNTER2] + @ If there is nothing more to do, bail out + ldrb r1, [r0, GCMB_STRUCT_MBPROGRESS] + cmp r1, MBPROGRESS_READY_TO_BOOT + beq GameCubeMultiBoot_Main_Return + @ Save current interrupt master register value + ldr r3, pool_InterruptRegs + ldrh r2, [r3, OFFSET_REG_IME - 0x200] + @ Disable all interrupts + movs r1, 0 + strh r1, [r3, OFFSET_REG_IME - 0x200] + @ Increment the first counter, if it's less than or equal to 10. + ldrb r1, [r0, GCMB_STRUCT_COUNTER1] + cmp r1, 0xA + bgt GameCubeMultiBoot_Main_SkipCounter1Inc + adds r1, 0x1 + strb r1, [r0, GCMB_STRUCT_COUNTER1] +GameCubeMultiBoot_Main_SkipCounter1Inc: + @ Load the saved interrupt master register value (re-enables interrupts if they were enabled before) + strh r2, [r3, OFFSET_REG_IME - 0x200] +GameCubeMultiBoot_Main_SkipCounters: + @ Initialise multiboot structures if required + bcs GameCubeMultiBoot_Init + @ Skip this section (check Nintendo logo) if the check has already passed + ldrb r1, [r0, GCMB_STRUCT_MBPROGRESS] + cmp r1, MBPROGRESS_NONE + bne GameCubeMultiBoot_Main_SkipLogoCheck + @ Bail out if no multiboot image data has been transferred yet + ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR] + ldr r2, [r0, GCMB_STRUCT_BASE_DEST_PTR] subs r1, r2 - beq _082DEE76 - cmp r1, 0xA0 - bcc _082DEE76 + beq GameCubeMultiBoot_Main_Return2 + @ Also bail out if not enough data has been transferred + cmp r1, ROM_HEADER_NINTENDO_LOGO_END + bcc GameCubeMultiBoot_Main_Return2 + @ Compare the Nintendo logo of the transferred multiboot image header, with the one in the ROM image of the inserted cart push {r4-r6} - movs r1, 0x98 - adds r2, #ROM_HEADER_NINTENDO_LOGO_OFFSET + movs r1, ROM_HEADER_NINTENDO_LOGO_LENGTH + adds r2, ROM_HEADER_NINTENDO_LOGO_OFFSET ldr r4, pool_NintendoLogo -_082DEDC6: +GameCubeMultiBoot_Main_LogoCmpLoop: ldm r2!, {r5} ldm r4!, {r6} cmp r5, r6 - bne _082DEDDC + bne GameCubeMultiBoot_Main_LogoCmpEnd subs r1, 0x4 - bne _082DEDC6 + bne GameCubeMultiBoot_Main_LogoCmpLoop ldm r2!, {r5} ldm r4!, {r6} eors r5, r6 - lsrs r5, #8 - str r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR] -_082DEDDC: + lsrs r5, 8 + str r2, [r0, GCMB_STRUCT_BASE_DEST_PTR] +GameCubeMultiBoot_Main_LogoCmpEnd: pop {r4-r6} + @ Throw everything away if the logo data didn't match bne GameCubeMultiBoot_Init - movs r1, 0x1 - strb r1, [r0, 0x2] - ldr r1, [r0, 0x4] - ldr r2, [r0, 0x8] + @ Logo matched, set the relevent multiboot progress bit + movs r1, MBPROGRESS_LOGO_CORRECT + strb r1, [r0, GCMB_STRUCT_MBPROGRESS] + @ XOR together KeyA and KeyB to get the initial multiboot image checksum value + ldr r1, [r0, GCMB_STRUCT_KEYA] + ldr r2, [r0, GCMB_STRUCT_KEYB] eors r1, r2 - str r1, [r0, 0x18] + str r1, [r0, GCMB_STRUCT_HASH_VAL] + @ ...also use it as the initial value for the image encryption session key. Algorithm is the same as the GBA BIOS multiboot: sessionkey = (initialvalue * 0x6177614b) + 1 ldr r2, pool_Kawa muls r1, r2 adds r1, 0x1 - str r1, [r0, 0x14] -_082DEDF4: + str r1, [r0, GCMB_STRUCT_SESSION_KEY] +GameCubeMultiBoot_Main_Return: bx lr -_082DEDF6: - ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR] +GameCubeMultiBoot_Main_SkipLogoCheck: + @ If this code is executed, then the logo check has passed, and the data being transferred in is encrypted. + @ Set up registers. + ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR] mov r12, r1 - ldr r3, [r0, 0x18] + ldr r3, [r0, GCMB_STRUCT_HASH_VAL] push {r4-r7} - ldr r4, [r0, #GCMB_STRUCT_BASE_DEST_PTR] + ldr r4, [r0, GCMB_STRUCT_BASE_DEST_PTR] ldr r5, pool_Kawa - ldr r6, [r0, 0x14] + ldr r6, [r0, GCMB_STRUCT_SESSION_KEY] ldr r7, pool_HashVal -_082DEE06: +GameCubeMultiBoot_Main_ImageDecryptHashLoop: + @ If there's no more data, break out of the loop cmp r4, r12 - bcs _082DEE26 + bcs GameCubeMultiBoot_Main_ImageDecryptHashEnd + @ Get the next uint32 ldr r1, [r4] + @ Decrypt the ciphertext: plaintext = (ciphertext ^ sessionkey) + hashval eors r1, r6 adds r1, r3 + @ Save the current uint32 of plaintext and advance the pointer stm r4!, {r1} + @ Advance the hashval with this uint32 of plaintext -- this is the same code as GameCubeMultiBoot_Hash. eors r3, r1 movs r2, 0x20 -_082DEE16: - lsrs r3, #1 - bcc _082DEE1C +GameCubeMultiBoot_Main_HashLoop: + lsrs r3, 1 + bcc GameCubeMultiBoot_Main_HashSkipEor eors r3, r7 -_082DEE1C: +GameCubeMultiBoot_Main_HashSkipEor: subs r2, 0x1 - bne _082DEE16 + bne GameCubeMultiBoot_Main_HashLoop + @ Advance the sessionkey with the usual algorithm: sessionkey = (sessionkey * 0x6177614b) + 1 muls r6, r5 adds r6, 0x1 - b _082DEE06 -_082DEE26: - str r4, [r0, #GCMB_STRUCT_BASE_DEST_PTR] - str r6, [r0, 0x14] + b GameCubeMultiBoot_Main_ImageDecryptHashLoop +GameCubeMultiBoot_Main_ImageDecryptHashEnd: + @ Save the new pointer, sessionkey, hashval + str r4, [r0, GCMB_STRUCT_BASE_DEST_PTR] + str r6, [r0, GCMB_STRUCT_SESSION_KEY] pop {r4-r7} - str r3, [r0, 0x18] - ldrh r1, [r0, 0x12] - cmp r1, #0 - bne _082DEE76 - ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR] - ldr r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR] + str r3, [r0, GCMB_STRUCT_HASH_VAL] + @ Bail out if the image size is unknown + ldrh r1, [r0, GCMB_STRUCT_IMAGE_SIZE] + cmp r1, 0 + bne GameCubeMultiBoot_Main_Return2 + @ Bail out if no image data has been transferred + ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR] + ldr r2, [r0, GCMB_STRUCT_BASE_DEST_PTR] cmp r1, r2 - bne _082DEE76 - ldr r1, [r0, 0xC] - cmp r1, #0 - beq _082DEE60 - ldrh r1, [r0, 0x10] - cmp r1, #0 - beq _082DEDF4 + bne GameCubeMultiBoot_Main_Return2 + @ If KeyC hasn't been generated yet, go generate it + ldr r1, [r0, GCMB_STRUCT_KEYC] + cmp r1, 0 + beq GameCubeMultiBoot_Main_GenerateKeyC + @ If the other side hasn't sent its boot key yet, bail out + ldrh r1, [r0, GCMB_STRUCT_BOOT_KEY] + cmp r1, 0 + beq GameCubeMultiBoot_Main_Return + @ Save off LR so it doesn't get clobbered by the upcoming function call mov r12, lr - movs r1, 0xBB - ldr r3, [r0, 0xC] + @ Generate the real boot key, which is the checksum of a hardcoded value and KeyC + movs r1, GCMB_MAGIC_BOOTKEY_HASHVAL + ldr r3, [r0, GCMB_STRUCT_KEYC] bl GameCubeMultiBoot_Hash - ldrh r1, [r0, 0x10] + ldrh r1, [r0, GCMB_STRUCT_BOOT_KEY] + @ Restore the saved LR value mov lr, r12 + @ Compare the two boot keys (real and passed in), if they don't match then throw everything away subs r1, r3 bne GameCubeMultiBoot_Init - movs r1, 0x2 - strb r1, [r0, 0x2] + @ The two boot keys matched, tell the caller that the image is ready to boot + movs r1, MBPROGRESS_READY_TO_BOOT + strb r1, [r0, GCMB_STRUCT_MBPROGRESS] + @ Nothing more to do, return. bx lr -_082DEE60: +GameCubeMultiBoot_Main_GenerateKeyC: + @ Save off LR so it doesn't get clobbered by the upcoming function call mov r12, lr - ldrb r1, [r0, 0x3] - lsls r1, #24 + @ KeyC = (SavedVCount << 24) - 1 + ldrb r1, [r0, GCMB_STRUCT_SAVEDVCOUNT] + lsls r1, 24 subs r1, 0x1 - str r1, [r0, 0xC] + str r1, [r0, GCMB_STRUCT_KEYC] + @ Hash the KeyC with the multiboot image checksum to generate the KeyC derivation material to be sent to the other side of the link bl GameCubeMultiBoot_Hash - lsls r3, #8 - adds r3, 0xFF - str r3, [r0, 0x1C] + @ Make sure the sent KeyC derivation material contains a magic value so that the other side can detect it + lsls r3, 8 + adds r3, GCMB_MAGIC_KEYCDERIVATION + @ Save off the KeyC derivation material and return to caller + str r3, [r0, GCMB_STRUCT_KEYC_DERIVATION] bx r12 -_082DEE76: +GameCubeMultiBoot_Main_Return2: bx lr thumb_func_end GameCubeMultiBoot_Main @@ -181,13 +246,16 @@ pool_NintendoLogo: .4byte RomHeaderNintendoLogo thumb_func_start GameCubeMultiBoot_ExecuteProgram @ void GameCubeMultiBoot_ExecuteProgram(struct GameCubeMultiBoot *mb); -GameCubeMultiBoot_ExecuteProgram: @ 82DEE84 - ldrb r1, [r0, 0x2] - cmp r1, 0x2 +GameCubeMultiBoot_ExecuteProgram: + @ If there's no multiboot image ready, just return to caller + ldrb r1, [r0, GCMB_STRUCT_MBPROGRESS] + cmp r1, MBPROGRESS_READY_TO_BOOT bne GameCubeMultiBoot_ExecuteProgram_Fail + @ Disable interrupts ldr r3, pool_InterruptRegs - movs r1, #0 - strh r1, [r3, #OFFSET_REG_IME - 0x200] + movs r1, 0 + strh r1, [r3, OFFSET_REG_IME - 0x200] + @ Jump to the real entry point of the multiboot image (past the image header), in ARM mode ldr r1, pool_MultiBootLoadAddr adds r1, 0xC0 bx r1 @@ -197,29 +265,29 @@ GameCubeMultiBoot_ExecuteProgram_Fail: thumb_func_start GameCubeMultiBoot_Init @ void GameCubeMultiBoot_Init(struct GameCubeMultiBoot *mb); -GameCubeMultiBoot_Init: @ 82DEE98 +GameCubeMultiBoot_Init: ldr r3, pool_InterruptRegs @ Save IME register. - ldrh r2, [r3, #OFFSET_REG_IME - 0x200] + ldrh r2, [r3, OFFSET_REG_IME - 0x200] @ Disable interrupts. movs r1, 0 - strh r1, [r3, #OFFSET_REG_IME - 0x200] + strh r1, [r3, OFFSET_REG_IME - 0x200] @ Set the handler to the "Stop" routine. @ Unless the first command that is received is a device reset command, the @ "Stop" routine will be executed and no further commands will be processed. adr r3, GcMbIntrHandler_Stop - str r3, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER] + str r3, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER] ldrb r3, [r0, 0x3] push {r3} ldrb r3, [r0, 0x1] push {r0,r3} - adds r3, r0, #0 - adds r3, #GCMB_STRUCT_BASE_DEST_PTR + adds r3, r0, 0 + adds r3, GCMB_STRUCT_BASE_DEST_PTR @ clear all but the last 3 fields of the struct GameCubeMultiBoot_Init_ClearStructLoop: @@ -261,25 +329,25 @@ GameCubeMultiBoot_Init_ClearStructLoop: strh r1, [r3, OFFSET_REG_IE - 0x200] @ Restore IME register. - strh r2, [r3, #OFFSET_REG_IME - 0x200] + strh r2, [r3, OFFSET_REG_IME - 0x200] bx lr thumb_func_end GameCubeMultiBoot_Init non_word_aligned_thumb_func_start GameCubeMultiBoot_HandleSerialInterrupt @ void GameCubeMultiBoot_HandleSerialInterrupt(struct GameCubeMultiBoot *mb); -GameCubeMultiBoot_HandleSerialInterrupt: @ 82DEEE2 +GameCubeMultiBoot_HandleSerialInterrupt: ldr r3, pool_SerialRegs @ Acknowledge reset/receive/send flags. ldrh r1, [r3, OFFSET_REG_JOYCNT - 0x120] strh r1, [r3, OFFSET_REG_JOYCNT - 0x120] - movs r2, #0 + movs r2, 0 strb r2, [r0] - ldr r2, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER] - cmp r2, #0 + ldr r2, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER] + cmp r2, 0 beq GameCubeMultiBoot_HandleSerialInterruptDone lsrs r1, 1 @ was a device reset command received? @@ -297,7 +365,7 @@ GcMbIntrHandler_Stop: strh r2, [r3, OFFSET_REG_JOYSTAT - 0x120] GameCubeMultiBoot_SetInterruptHandler: - str r2, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER] + str r2, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER] GameCubeMultiBoot_ReadVCount: ldr r3, pool_RegDispstat @@ -308,25 +376,31 @@ GameCubeMultiBoot_HandleSerialInterruptDone: bx lr GameCubeMultiBoot_BeginHandshake: + @ Throw away anything that got sent ldr r1, [r3, OFFSET_REG_JOY_RECV - 0x120] + @ Send the game code, the other side of the link must send back the same game code ldr r1, pool_RubyUSAGameCode str r1, [r3, OFFSET_REG_JOY_TRANS - 0x120] movs r1, 0x10 strh r1, [r3, OFFSET_REG_JOYSTAT - 0x120] - ldrb r1, [r0, 0x3] - strb r1, [r0, 0x9] - ldrb r1, [r0, 0x2] + @ Use the saved VCount value to provide 8 bits of entropy for KeyB + ldrb r1, [r0, GCMB_STRUCT_SAVEDVCOUNT] + strb r1, [r0, GCMB_STRUCT_KEYB + 1] + @ If a multiboot image has been transferred at least enough such that the Nintendo logo check has passed, stop everything. + ldrb r1, [r0, GCMB_STRUCT_MBPROGRESS] cmp r1, 0 bne GcMbIntrHandler_Stop + @ Set the image destination pointers. ldr r1, pool_MultiBootLoadAddr - str r1, [r0, #GCMB_STRUCT_BASE_DEST_PTR] - str r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR] + str r1, [r0, GCMB_STRUCT_BASE_DEST_PTR] + str r1, [r0, GCMB_STRUCT_CUR_DEST_PTR] + @ Set the new interrupt handler. adr r2, GcMbIntrHandler_CheckGameCodeSent b GameCubeMultiBoot_SetInterruptHandler .align 2, 0 -GcMbIntrHandler_CheckGameCodeSent: @ 82DEF24 +GcMbIntrHandler_CheckGameCodeSent: lsls r1, 31 bcc GcMbIntrHandler_Stop @ stop if send failed bmi GameCubeMultiBoot_CheckHandshakeResponse @ branch if receive is complete @@ -338,7 +412,7 @@ GcMbIntrHandler_CheckGameCodeSent: @ 82DEF24 .align 2, 0 -GcMbIntrHandler_CheckHandshakeResponse: @ 82DEF30 +GcMbIntrHandler_CheckHandshakeResponse: lsrs r1, 1 @ is receive complete? bcc GcMbIntrHandler_Stop @ stop if not @@ -347,164 +421,181 @@ GameCubeMultiBoot_CheckHandshakeResponse: ldr r2, pool_RubyUSAGameCode cmp r1, r2 bne GcMbIntrHandler_Stop @ stop if the GameCube didn't reply with the same game code - ldrb r1, [r0, 0x3] - strb r1, [r0, 0xB] - adr r2, GcMbIntrHandler_82DEF44 + @ Use the saved VCount value to provide another 8 bits of entropy for KeyB. + ldrb r1, [r0, GCMB_STRUCT_SAVEDVCOUNT] + strb r1, [r0, GCMB_STRUCT_KEYB + 3] + adr r2, GcMbIntrHandler_ReceiveKeyA b GameCubeMultiBoot_SetInterruptHandler .align 2, 0 -GcMbIntrHandler_82DEF44: @ 82DEF44 +GcMbIntrHandler_ReceiveKeyA: lsrs r1, 1 @ is receive complete? bcc GcMbIntrHandler_Stop @ branch if not ldr r1, [r3, OFFSET_REG_JOY_RECV - 0x120] + @ make sure top 8 bits of the received value is the KeyA magic number, stop if KeyA is invalid lsrs r2, r1, 24 - cmp r2, 0xDD + cmp r2, GCMB_MAGIC_KEYA bne GcMbIntrHandler_Stop - str r1, [r0, 0x4] - ldrb r1, [r0, 0x1] - strb r1, [r0, 0xA] + @ save received KeyA + str r1, [r0, GCMB_STRUCT_KEYA] + @ use the second GameCubeMultiBoot_Main() counter as another 8 bits of entropy for KeyB + ldrb r1, [r0, GCMB_STRUCT_COUNTER2] + strb r1, [r0, GCMB_STRUCT_KEYB + 2] movs r2, 0 movs r3, 0 - ldr r1, [r0, 0x8] + ldr r1, [r0, GCMB_STRUCT_KEYB] lsrs r1, 8 -_082DEF5E: + @ make sure KeyB is valid (other side of the link is supposed to check KeyB too), if it's not then change the byte that was just set so it is +GameCubeMultiBoot_KeyBCheckLoop: lsrs r1, 1 adcs r2, r3 cmp r1, 0 - bne _082DEF5E + bne GameCubeMultiBoot_KeyBCheckLoop cmp r2, 0xE - bgt _082DEF70 + bgt GameCubeMultiBoot_KeyBSaveNewByte cmp r2, 0x7 - bge _082DEF72 + bge GameCubeMultiBoot_KeyBCheckEnd movs r1, 0xFF -_082DEF70: - strb r1, [r0, 0xA] -_082DEF72: - ldr r1, [r0, 0x8] - adds r1, 0xEE +GameCubeMultiBoot_KeyBSaveNewByte: + strb r1, [r0, GCMB_STRUCT_KEYB + 2] +GameCubeMultiBoot_KeyBCheckEnd: + @ add in the KeyB magic number and send off KeyB + ldr r1, [r0, GCMB_STRUCT_KEYB] + adds r1, GCMB_MAGIC_KEYB ldr r3, pool_SerialRegs str r1, [r3, OFFSET_REG_JOY_TRANS - 0x120] movs r1, 0x30 strh r1, [r3, OFFSET_REG_JOYSTAT - 0x120] - adr r2, GcMbIntrHandler_82DEF84 + @ set new interrupt handler + adr r2, GcMbIntrHandler_CheckKeyBSent b GameCubeMultiBoot_SetInterruptHandler .align 2, 0 -GcMbIntrHandler_82DEF84: @ 82DEF84 +GcMbIntrHandler_CheckKeyBSent: lsls r1, 31 bcc GcMbIntrHandler_Stop @ stop if send failed - bmi _082DEF94 @ branch if receive is complete - adr r2, GcMbIntrHandler_82DEF90 + bmi GameCubeMultiBoot_CheckImageSizeResponse @ branch if receive is complete + adr r2, GcMbIntrHandler_CheckImageSizeResponse b GameCubeMultiBoot_SetInterruptHandler .align 2, 0 -GcMbIntrHandler_82DEF90: @ 82DEF90 +GcMbIntrHandler_CheckImageSizeResponse: lsrs r1, 1 @ is receive complete? bcc GcMbIntrHandler_Stop @ branch if not -_082DEF94: +GameCubeMultiBoot_CheckImageSizeResponse: ldr r1, [r3, OFFSET_REG_JOY_RECV - 0x120] - ldr r2, _082DF034 + ldr r2, GameCubeMultiBoot_MaximumImageSizeUInt32s cmp r1, r2 bhs GcMbIntrHandler_Stop adds r1, 0x1 adds r1, r1 - strh r1, [r0, 0x12] - ldrb r1, [r0, 0x2] + strh r1, [r0, GCMB_STRUCT_IMAGE_SIZE] + ldrb r1, [r0, GCMB_STRUCT_MBPROGRESS] cmp r1, 0 -_082DEFA6: +GcMbIntrHandler_StopIfNotEqual: bne GcMbIntrHandler_Stop ldr r1, pool_MultiBootLoadAddr - str r1, [r0, #GCMB_STRUCT_BASE_DEST_PTR] - str r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR] - adr r2, GcMbIntrHandler_82DEFB4 + str r1, [r0, GCMB_STRUCT_BASE_DEST_PTR] + str r1, [r0, GCMB_STRUCT_CUR_DEST_PTR] + adr r2, GcMbIntrHandler_CheckImageResponse b GameCubeMultiBoot_SetInterruptHandler .align 2, 0 -GcMbIntrHandler_82DEFB4: @ 82DEFB4 +GcMbIntrHandler_CheckImageResponse: lsrs r1, 1 @ is receive complete? bcc GcMbIntrHandler_Stop @ branch if not - ldr r2, [r0, #GCMB_STRUCT_CUR_DEST_PTR] + ldr r2, [r0, GCMB_STRUCT_CUR_DEST_PTR] movs r1, 0x4 ands r1, r2 adds r1, 0x8 lsls r1, 2 strh r1, [r3, OFFSET_REG_JOYSTAT - 0x120] + @ get the recieved uint32 ldr r1, [r3, OFFSET_REG_JOY_RECV - 0x120] + @ put it in the current destination pointer and advance that pointer stm r2!, {r1} - str r2, [r0, #GCMB_STRUCT_CUR_DEST_PTR] - ldrh r1, [r0, 0x12] + @ save off the advanced pointer + str r2, [r0, GCMB_STRUCT_CUR_DEST_PTR] + @ decrease the image size (in uint32s) + ldrh r1, [r0, GCMB_STRUCT_IMAGE_SIZE] subs r1, 0x1 - strh r1, [r0, 0x12] + strh r1, [r0, GCMB_STRUCT_IMAGE_SIZE] + @ branch away if the transfer is not yet complete bne GameCubeMultiBoot_ReadVCount -_082DEFD2: - ldrb r1, [r0, 0x1] +GcMbIntrHandler_SendCounter2: + @ send counter2 with magic number + ldrb r1, [r0, GCMB_STRUCT_COUNTER2] lsls r1, 8 - adds r1, 0xCC + adds r1, GCMB_MAGIC_COUNTER2 str r1, [r3, OFFSET_REG_JOY_TRANS - 0x120] - adr r2, _082DEFE0 + adr r2, GcMbIntrHandler_CheckCounter2Sent b GameCubeMultiBoot_SetInterruptHandler .align 2, 0 -_082DEFE0: +GcMbIntrHandler_CheckCounter2Sent: lsls r1, 31 -_082DEFE2: - bcc GcMbIntrHandler_Stop - ldr r1, [r0, 0x1C] +GcMbIntrHandler_StopIfSendFailed: + bcc GcMbIntrHandler_Stop @ stop if send failed + @ if KeyC derivation value has not yet been generated, send Counter2 again, otherwise, send KeyC derivation + ldr r1, [r0, GCMB_STRUCT_KEYC_DERIVATION] cmp r1, 0 - beq _082DEFD2 + beq GcMbIntrHandler_SendCounter2 str r1, [r3, OFFSET_REG_JOY_TRANS - 0x120] - adr r2, GcMbIntrHandler_82DEFF0 + adr r2, GcMbIntrHandler_CheckKeyCDerivationSent b GameCubeMultiBoot_SetInterruptHandler .align 2, 0 -GcMbIntrHandler_82DEFF0: @ 82DEFF0 +GcMbIntrHandler_CheckKeyCDerivationSent: lsls r1, 31 - bcc _082DEFE2 @ branch if send failed - bmi _082DF000 @ branch if receive is complete - adr r2, GcMbIntrHandler_82DEFFC + bcc GcMbIntrHandler_StopIfSendFailed @ branch if send failed + bmi GameCubeMultiBoot_CheckBootKeyResponse @ branch if receive is complete + adr r2, GcMbIntrHandler_CheckBootKeyResponse b GameCubeMultiBoot_SetInterruptHandler .align 2, 0 -GcMbIntrHandler_82DEFFC: @ 82DEFFC +GcMbIntrHandler_CheckBootKeyResponse: lsrs r1, 1 @ is receive complete? - bcc _082DEFE2 @ branch if not + bcc GcMbIntrHandler_StopIfSendFailed @ branch if not -_082DF000: +GameCubeMultiBoot_CheckBootKeyResponse: ldr r1, [r3, OFFSET_REG_JOY_RECV - 0x120] + @ make sure received boot key contains expected magic number, stop if not lsrs r2, r1, 24 - cmp r2, 0xBB - bne _082DEFA6 - strh r1, [r0, 0x10] - adr r2, GcMbIntrHandler_82DF010 + cmp r2, GCMB_MAGIC_BOOTKEY + bne GcMbIntrHandler_StopIfNotEqual + @ save received bootkey to be checked in GameCubeMultiBoot_Main() + strh r1, [r0, GCMB_STRUCT_BOOT_KEY] + @ stop if anything more gets sent + adr r2, GcMbIntrHandler_StopUnconditionally b GameCubeMultiBoot_SetInterruptHandler .align 2, 0 -GcMbIntrHandler_82DF010: @ 82DF010 +GcMbIntrHandler_StopUnconditionally: b GcMbIntrHandler_Stop thumb_func_end GameCubeMultiBoot_HandleSerialInterrupt non_word_aligned_thumb_func_start GameCubeMultiBoot_Quit @ void GameCubeMultiBoot_Quit(); -GameCubeMultiBoot_Quit: @ 82DF012 +GameCubeMultiBoot_Quit: ldr r3, pool_InterruptRegs @ Save IME register. - ldrh r2, [r3, #OFFSET_REG_IME - 0x200] + ldrh r2, [r3, OFFSET_REG_IME - 0x200] @ Disable interrupts. movs r1, 0 - strh r1, [r3, #OFFSET_REG_IME - 0x200] + strh r1, [r3, OFFSET_REG_IME - 0x200] ldr r3, pool_SerialRegs @@ -528,14 +619,14 @@ GameCubeMultiBoot_Quit: @ 82DF012 strh r1, [r3, OFFSET_REG_IE - 0x200] @ Restore IME register. - strh r2, [r3, #OFFSET_REG_IME - 0x200] + strh r2, [r3, OFFSET_REG_IME - 0x200] bx lr thumb_func_end GameCubeMultiBoot_Quit .align 2, 0 -_082DF034: .4byte 0x4000 +GameCubeMultiBoot_MaximumImageSizeUInt32s: .4byte 0x4000 pool_InterruptRegs: .4byte REG_BASE + 0x200 diff --git a/src/libisagbprn.c b/src/libisagbprn.c index e0e979e95e..6fb9d5ec08 100644 --- a/src/libisagbprn.c +++ b/src/libisagbprn.c @@ -31,7 +31,7 @@ void AGBPrintFlush1Block(void); void AGBPrintInit(void) { volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR; - u16 *pWSCNT = (u16 *)REG_ADDR_WAITCNT; + vu16 *pWSCNT = ®_WAITCNT; u16 *pProtect = (u16 *)AGB_PRINT_PROTECT_ADDR; u16 nOldWSCNT = *pWSCNT; *pWSCNT = WSCNT_DATA; @@ -57,7 +57,7 @@ static void AGBPutcInternal(const char cChr) void AGBPutc(const char cChr) { - u16 *pWSCNT = (u16 *)REG_ADDR_WAITCNT; + vu16 *pWSCNT = ®_WAITCNT; u16 nOldWSCNT = *pWSCNT; volatile struct AGBPrintStruct *pPrint; *pWSCNT = WSCNT_DATA; @@ -71,7 +71,7 @@ void AGBPutc(const char cChr) void AGBPrint(const char *pBuf) { volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR; - u16 *pWSCNT = (u16 *)REG_ADDR_WAITCNT; + vu16 *pWSCNT = ®_WAITCNT; u16 nOldWSCNT = *pWSCNT; *pWSCNT = WSCNT_DATA; while (*pBuf) @@ -95,9 +95,9 @@ void AGBPrintf(const char *pBuf, ...) static void AGBPrintTransferDataInternal(u32 bAllData) { LPFN_PRINT_FLUSH lpfnFuncFlush; - u16 *pIME; + vu16 *pIME; u16 nIME; - u16 *pWSCNT; + vu16 *pWSCNT; u16 nOldWSCNT; u16 *pProtect; volatile struct AGBPrintStruct *pPrint; @@ -105,9 +105,9 @@ static void AGBPrintTransferDataInternal(u32 bAllData) pProtect = (u16 *)AGB_PRINT_PROTECT_ADDR; pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR; lpfnFuncFlush = (LPFN_PRINT_FLUSH)AGB_PRINT_FLUSH_ADDR; - pIME = (u16 *)REG_ADDR_IME; + pIME = ®_IME; nIME = *pIME; - pWSCNT = (u16 *)REG_ADDR_WAITCNT; + pWSCNT = ®_WAITCNT; nOldWSCNT = *pWSCNT; *pIME = nIME & ~1; *pWSCNT = WSCNT_DATA; @@ -160,7 +160,7 @@ void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopP /* void NoCashGBAPrint(const char *pBuf) { - *(volatile u32*)NOCASHGBAPRINTADDR2 = (u32)pBuf; + *(volatile u32 *)NOCASHGBAPRINTADDR2 = (u32)pBuf; } void NoCashGBAPrintf(const char *pBuf, ...) diff --git a/src/librfu_intr.c b/src/librfu_intr.c index 19ea60b067..ab4392e229 100644 --- a/src/librfu_intr.c +++ b/src/librfu_intr.c @@ -41,7 +41,7 @@ static void sio32intr_clock_master(void) { if (gSTWIStatus->reqNext <= gSTWIStatus->reqLength) { - REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket->rfuPacket8.data)[gSTWIStatus->reqNext]; + REG_SIODATA32 = ((u32 *)gSTWIStatus->txPacket->rfuPacket8.data)[gSTWIStatus->reqNext]; gSTWIStatus->reqNext++; } else @@ -62,7 +62,7 @@ static void sio32intr_clock_master(void) if ((regSIODATA32 & 0xFFFF0000) == 0x99660000) { gSTWIStatus->ackNext = 0; - ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32; + ((u32 *)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32; gSTWIStatus->ackNext++; gSTWIStatus->ackActiveCommand = regSIODATA32; gSTWIStatus->ackLength = ackLen = regSIODATA32 >> 8; @@ -85,7 +85,7 @@ static void sio32intr_clock_master(void) } else if (gSTWIStatus->state == 2) // master receive ack { - ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32; + ((u32 *)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32; gSTWIStatus->ackNext++; if (gSTWIStatus->ackLength < gSTWIStatus->ackNext) gSTWIStatus->state = 3; // master done ack @@ -158,7 +158,7 @@ static void sio32intr_clock_slave(void) regSIODATA32 = REG_SIODATA32; if (gSTWIStatus->state == 5) // slave receive req init { - ((u32*)gSTWIStatus->rxPacket)[0] = regSIODATA32; + ((u32 *)gSTWIStatus->rxPacket)[0] = regSIODATA32; gSTWIStatus->reqNext = 1; r0 = 0x99660000; // variable reuse required @@ -179,24 +179,24 @@ static void sio32intr_clock_slave(void) ) { gSTWIStatus->ackActiveCommand = gSTWIStatus->reqActiveCommand + 0x80; - ((u32*)gSTWIStatus->txPacket)[0] = 0x99660000 + gSTWIStatus->ackActiveCommand; + ((u32 *)gSTWIStatus->txPacket)[0] = 0x99660000 + gSTWIStatus->ackActiveCommand; gSTWIStatus->ackLength = 0; } else { - ((u32*)gSTWIStatus->txPacket)[0] = 0x996601EE; + ((u32 *)gSTWIStatus->txPacket)[0] = 0x996601EE; if (gSTWIStatus->reqActiveCommand >= 0x10 && gSTWIStatus->reqActiveCommand <= 0x3D) { - ((u32*)gSTWIStatus->txPacket)[1] = 1; + ((u32 *)gSTWIStatus->txPacket)[1] = 1; } else { - ((u32*)gSTWIStatus->txPacket)[1] = 2; + ((u32 *)gSTWIStatus->txPacket)[1] = 2; } gSTWIStatus->ackLength = 1; gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION; } - REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0]; + REG_SIODATA32 = ((u32 *)gSTWIStatus->txPacket)[0]; gSTWIStatus->ackNext = 1; gSTWIStatus->state = 7; // slave send ack } @@ -216,7 +216,7 @@ static void sio32intr_clock_slave(void) } else if (gSTWIStatus->state == 6) // slave receive req { - ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->reqNext] = regSIODATA32; + ((u32 *)gSTWIStatus->rxPacket)[gSTWIStatus->reqNext] = regSIODATA32; gSTWIStatus->reqNext++; if (gSTWIStatus->reqLength < gSTWIStatus->reqNext) { @@ -227,24 +227,24 @@ static void sio32intr_clock_slave(void) ) { gSTWIStatus->ackActiveCommand = gSTWIStatus->reqActiveCommand + 0x80; - ((u32*)gSTWIStatus->txPacket)[0] = 0x99660000 | gSTWIStatus->ackActiveCommand; + ((u32 *)gSTWIStatus->txPacket)[0] = 0x99660000 | gSTWIStatus->ackActiveCommand; gSTWIStatus->ackLength = 0; } else { - ((u32*)gSTWIStatus->txPacket)[0] = 0x996601EE; + ((u32 *)gSTWIStatus->txPacket)[0] = 0x996601EE; if (gSTWIStatus->reqActiveCommand >= 0x10 && gSTWIStatus->reqActiveCommand <= 0x3D) { - ((u32*)gSTWIStatus->txPacket)[1] = 1; + ((u32 *)gSTWIStatus->txPacket)[1] = 1; } else { - ((u32*)gSTWIStatus->txPacket)[1] = 2; + ((u32 *)gSTWIStatus->txPacket)[1] = 2; } gSTWIStatus->ackLength = 1; gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION; } - REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0]; + REG_SIODATA32 = ((u32 *)gSTWIStatus->txPacket)[0]; gSTWIStatus->ackNext = 1; gSTWIStatus->state = 7; // slave send ack } @@ -263,7 +263,7 @@ static void sio32intr_clock_slave(void) } else { - REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[gSTWIStatus->ackNext]; + REG_SIODATA32 = ((u32 *)gSTWIStatus->txPacket)[gSTWIStatus->ackNext]; gSTWIStatus->ackNext++; } } @@ -336,8 +336,8 @@ static u16 handshake_wait(u16 slot) static void STWI_set_timer_in_RAM(u8 count) { - vu16* regTMCNTL = (vu16*)(REG_ADDR_TMCNT_L + gSTWIStatus->timerSelect * 4); - vu16* regTMCNTH = (vu16*)(REG_ADDR_TMCNT_H + gSTWIStatus->timerSelect * 4); + vu16 *regTMCNTL = ®_TMCNT_L(gSTWIStatus->timerSelect); + vu16 *regTMCNTH = ®_TMCNT_H(gSTWIStatus->timerSelect); REG_IME = 0; switch (count) { diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 309fc4eadb..319743d0d2 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -1,6 +1,14 @@ #include #include "librfu.h" +// If expanding the length of the player name and wireless link functionality is +// desired, ensure that the name string is limited in size when it's copied from the +// saveblock to any Rfu-related fields (e.g. in SetHostRfuUsername). +// If wireless link functionality is not desired ignore or delete this warning. +#if RFU_USER_NAME_LENGTH < (PLAYER_NAME_LENGTH + 1) +#warning "The Wireless Adapter hardware expects a username of no more than 8 bytes." +#endif + struct LLSFStruct { u8 frameSize; @@ -8,7 +16,7 @@ struct LLSFStruct u8 connSlotFlagShift; u8 slotStateShift; u8 ackShift; - u8 phaseShit; + u8 phaseShift; u8 nShift; u8 recvFirstMask; u8 connSlotFlagMask; @@ -81,7 +89,7 @@ static const struct LLSFStruct llsf_struct[2] = { .connSlotFlagShift = 0, .slotStateShift = 10, .ackShift = 9, - .phaseShit = 5, + .phaseShift = 5, .nShift = 7, .recvFirstMask = 2, .connSlotFlagMask = 0, @@ -97,7 +105,7 @@ static const struct LLSFStruct llsf_struct[2] = { .connSlotFlagShift = 18, .slotStateShift = 14, .ackShift = 13, - .phaseShit = 9, + .phaseShift = 9, .nShift = 11, .recvFirstMask = 3, .connSlotFlagMask = 15, @@ -161,7 +169,7 @@ u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p gRfuSlotStatusNI[i] = &gRfuSlotStatusNI[i - 1][1]; gRfuSlotStatusUNI[i] = &gRfuSlotStatusUNI[i - 1][1]; } - // remaining space in API buffer is used for `struct RfuIntrStruct`. + // remaining space in API buffer is used for `struct RfuIntrStruct`. gRfuFixed->STWIBuffer = (struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1]; STWI_init_all((struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1], sioIntrTable_p, copyInterruptToRam); rfu_STC_clearAPIVariables(); @@ -1801,7 +1809,7 @@ static u16 rfu_STC_NI_constructLLSF(u8 bm_slot_id, u8 **dest_pp, struct NIComm * } frame = (NI_comm->state & 0xF) << llsf->slotStateShift | NI_comm->ack << llsf->ackShift - | NI_comm->phase << llsf->phaseShit + | NI_comm->phase << llsf->phaseShift | NI_comm->n[NI_comm->phase] << llsf->nShift | size; if (gRfuLinkStatus->parentChild == MODE_PARENT) @@ -1970,7 +1978,7 @@ static u16 rfu_STC_analyzeLLSF(u8 slot_id, const u8 *src, u16 last_frame) llsf_NI.connSlotFlag = (frames >> llsf_p->connSlotFlagShift) & llsf_p->connSlotFlagMask; llsf_NI.slotState = (frames >> llsf_p->slotStateShift) & llsf_p->slotStateMask; llsf_NI.ack = (frames >> llsf_p->ackShift) & llsf_p->ackMask; - llsf_NI.phase = (frames >> llsf_p->phaseShit) & llsf_p->phaseMask; + llsf_NI.phase = (frames >> llsf_p->phaseShift) & llsf_p->phaseMask; llsf_NI.n = (frames >> llsf_p->nShift) & llsf_p->nMask; llsf_NI.frame = (frames & llsf_p->framesMask) & frames; retVal = llsf_NI.frame + llsf_p->frameSize; diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index 0287b358a7..b515f338e0 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -40,7 +40,7 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b gSTWIStatus->error = 0; gSTWIStatus->recoveryCount = 0; gSTWIStatus->sending = 0; - REG_RCNT = 0x100; // TODO: mystery bit? + REG_RCNT = 0x100; // TODO: mystery bit? REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; STWI_init_Callback_M(); STWI_init_Callback_S(); @@ -118,7 +118,7 @@ void STWI_init_Callback_S(void) STWI_set_Callback_S(NULL); } -// The callback can take 2 or 3 arguments. +// The callback can take 2 or 3 arguments. void STWI_set_Callback_M(void *callbackM) { gSTWIStatus->callbackM = callbackM; @@ -235,7 +235,7 @@ void STWI_send_SystemConfigREQ(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer) packetBytes += sizeof(u32); *packetBytes++ = mcTimer; *packetBytes++ = maxMFrame; - *(u16*)packetBytes = availSlotFlag; + *(u16 *)packetBytes = availSlotFlag; STWI_start_Command(); } } @@ -594,7 +594,7 @@ static s32 STWI_start_Command(void) { u16 imeTemp; - // equivalent to gSTWIStatus->txPacket->rfuPacket32.command, + // equivalent to gSTWIStatus->txPacket->rfuPacket32.command, // but the cast here is required to avoid register issue *(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand; REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command; diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c index 6fa8ba4eb4..e7a5862f07 100644 --- a/src/lilycove_lady.c +++ b/src/lilycove_lady.c @@ -65,15 +65,15 @@ void InitLilycoveLady(void) id >>= 1; switch (id) { - case LILYCOVE_LADY_QUIZ: - InitLilycoveQuizLady(); - break; - case LILYCOVE_LADY_FAVOR: - InitLilycoveFavorLady(); - break; - case LILYCOVE_LADY_CONTEST: - InitLilycoveContestLady(); - break; + case LILYCOVE_LADY_QUIZ: + InitLilycoveQuizLady(); + break; + case LILYCOVE_LADY_FAVOR: + InitLilycoveFavorLady(); + break; + case LILYCOVE_LADY_CONTEST: + InitLilycoveContestLady(); + break; } } @@ -81,15 +81,15 @@ void ResetLilycoveLadyForRecordMix(void) { switch (GetLilycoveLadyId()) { - case LILYCOVE_LADY_QUIZ: - ResetQuizLadyForRecordMix(); - break; - case LILYCOVE_LADY_FAVOR: - ResetFavorLadyForRecordMix(); - break; - case LILYCOVE_LADY_CONTEST: - ResetContestLadyForRecordMix(); - break; + case LILYCOVE_LADY_QUIZ: + ResetQuizLadyForRecordMix(); + break; + case LILYCOVE_LADY_FAVOR: + ResetFavorLadyForRecordMix(); + break; + case LILYCOVE_LADY_CONTEST: + ResetContestLadyForRecordMix(); + break; } } @@ -100,15 +100,15 @@ void InitLilycoveLadyRandomly(void) switch (lady) { - case LILYCOVE_LADY_QUIZ: - InitLilycoveQuizLady(); - break; - case LILYCOVE_LADY_FAVOR: - InitLilycoveFavorLady(); - break; - case LILYCOVE_LADY_CONTEST: - InitLilycoveContestLady(); - break; + case LILYCOVE_LADY_QUIZ: + InitLilycoveQuizLady(); + break; + case LILYCOVE_LADY_FAVOR: + InitLilycoveFavorLady(); + break; + case LILYCOVE_LADY_CONTEST: + InitLilycoveContestLady(); + break; } } @@ -119,10 +119,10 @@ void Script_GetLilycoveLadyId(void) static u8 GetNumAcceptedItems(const u16 *itemsArray) { - u8 items; + u8 numItems; - for (items = 0; *itemsArray != ITEM_NONE; items ++, itemsArray ++); - return items; + for (numItems = 0; *itemsArray != ITEM_NONE; numItems++, itemsArray++); + return numItems; } static void FavorLadyPickFavorAndBestItem(void) @@ -160,17 +160,11 @@ u8 GetFavorLadyState(void) { sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; if (sFavorLadyPtr->state == LILYCOVE_LADY_STATE_PRIZE) - { return LILYCOVE_LADY_STATE_PRIZE; - } else if (sFavorLadyPtr->state == LILYCOVE_LADY_STATE_COMPLETED) - { return LILYCOVE_LADY_STATE_COMPLETED; - } else - { return LILYCOVE_LADY_STATE_READY; - } } static const u8 *GetFavorLadyRequest(u8 idx) @@ -189,7 +183,7 @@ bool8 HasAnotherPlayerGivenFavorLadyItem(void) sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; if (sFavorLadyPtr->playerName[0] != EOS) { - StringCopy7(gStringVar3, sFavorLadyPtr->playerName); + StringCopy_PlayerName(gStringVar3, sFavorLadyPtr->playerName); ConvertInternationalString(gStringVar3, sFavorLadyPtr->language); return TRUE; } @@ -209,8 +203,8 @@ void BufferFavorLadyItemName(void) static void SetFavorLadyPlayerName(const u8 *src, u8 *dest) { - memset(dest, 0xFF, 8); - StringCopy7(dest, src); + memset(dest, EOS, PLAYER_NAME_LENGTH + 1); + StringCopy_PlayerName(dest, src); } void BufferFavorLadyPlayerName(void) @@ -254,9 +248,7 @@ static bool8 DoesFavorLadyLikeItem(u16 itemId) sFavorLadyPtr->numItemsGiven++; sFavorLadyPtr->likedItem = TRUE; if (sFavorLadyPtr->bestItem == itemId) - { sFavorLadyPtr->numItemsGiven = LILYCOVE_LADY_GIFT_THRESHOLD; - } break; } sFavorLadyPtr->likedItem = FALSE; @@ -302,7 +294,7 @@ void SetFavorLadyState_Complete(void) void FieldCallback_FavorLadyEnableScriptContexts(void) { - EnableBothScriptContexts(); + ScriptContext_Enable(); } static void QuizLadyPickQuestion(void) @@ -312,9 +304,7 @@ static void QuizLadyPickQuestion(void) questionId = Random() % ARRAY_COUNT(sQuizLadyQuizQuestions); for (i = 0; i < QUIZ_QUESTION_LEN; i ++) - { sQuizLadyPtr->question[i] = sQuizLadyQuizQuestions[questionId][i]; - } sQuizLadyPtr->correctAnswer = sQuizLadyQuizAnswers[questionId]; sQuizLadyPtr->prize = sQuizLadyPrizes[questionId]; sQuizLadyPtr->questionId = questionId; @@ -328,16 +318,16 @@ static void InitLilycoveQuizLady(void) sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; sQuizLadyPtr->id = LILYCOVE_LADY_QUIZ; sQuizLadyPtr->state = LILYCOVE_LADY_STATE_READY; + for (i = 0; i < QUIZ_QUESTION_LEN; i ++) - { - sQuizLadyPtr->question[i] = -1; - } - sQuizLadyPtr->correctAnswer = -1; - sQuizLadyPtr->playerAnswer = -1; + sQuizLadyPtr->question[i] = EC_EMPTY_WORD; + + sQuizLadyPtr->correctAnswer = EC_EMPTY_WORD; + sQuizLadyPtr->playerAnswer = EC_EMPTY_WORD; + for (i = 0; i < TRAINER_ID_LENGTH; i ++) - { sQuizLadyPtr->playerTrainerId[i] = 0; - } + sQuizLadyPtr->prize = ITEM_NONE; sQuizLadyPtr->waitingForChallenger = FALSE; sQuizLadyPtr->prevQuestionId = ARRAY_COUNT(sQuizLadyQuizQuestions); @@ -351,48 +341,37 @@ static void ResetQuizLadyForRecordMix(void) sQuizLadyPtr->id = LILYCOVE_LADY_QUIZ; sQuizLadyPtr->state = LILYCOVE_LADY_STATE_READY; sQuizLadyPtr->waitingForChallenger = FALSE; - sQuizLadyPtr->playerAnswer = -1; + sQuizLadyPtr->playerAnswer = EC_EMPTY_WORD; } u8 GetQuizLadyState(void) { sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; if (sQuizLadyPtr->state == LILYCOVE_LADY_STATE_PRIZE) - { return LILYCOVE_LADY_STATE_PRIZE; - } else if (sQuizLadyPtr->state == LILYCOVE_LADY_STATE_COMPLETED) - { return LILYCOVE_LADY_STATE_COMPLETED; - } else - { return LILYCOVE_LADY_STATE_READY; - } } u8 GetQuizAuthor(void) { - int i; - int j; + s32 i, j; u8 authorNameId; - struct LilycoveLadyQuiz *quiz; + struct LilycoveLadyQuiz *quiz = &gSaveBlock1Ptr->lilycoveLady.quiz; - quiz = &gSaveBlock1Ptr->lilycoveLady.quiz; if (IsEasyChatAnswerUnlocked(quiz->correctAnswer) == FALSE) { i = quiz->questionId; do { - if (++ i >= (int)(ARRAY_COUNT(sQuizLadyQuizQuestions))) - { + if (++i >= (int)ARRAY_COUNT(sQuizLadyQuizQuestions)) i = 0; - } } while (IsEasyChatAnswerUnlocked(sQuizLadyQuizAnswers[i]) == FALSE); - for (j = 0; j < QUIZ_QUESTION_LEN; j ++) - { + + for (j = 0; j < QUIZ_QUESTION_LEN; j++) quiz->question[j] = sQuizLadyQuizQuestions[i][j]; - } quiz->correctAnswer = sQuizLadyQuizAnswers[i]; quiz->prize = sQuizLadyPrizes[i]; quiz->questionId = i; @@ -400,17 +379,11 @@ u8 GetQuizAuthor(void) } authorNameId = BufferQuizAuthorName(); if (authorNameId == QUIZ_AUTHOR_NAME_LADY) - { return QUIZ_AUTHOR_LADY; - } else if (authorNameId == QUIZ_AUTHOR_NAME_OTHER_PLAYER || IsQuizTrainerIdNotPlayer()) - { return QUIZ_AUTHOR_OTHER_PLAYER; - } else - { return QUIZ_AUTHOR_PLAYER; - } } static u8 BufferQuizAuthorName(void) @@ -423,18 +396,18 @@ static u8 BufferQuizAuthorName(void) sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; if (sQuizLadyPtr->playerName[0] == EOS) { - StringCopy7(gStringVar1, gText_QuizLady_Lady); + StringCopy_PlayerName(gStringVar1, gText_QuizLady_Lady); authorNameId = QUIZ_AUTHOR_NAME_LADY; } else { - StringCopy7(gStringVar1, sQuizLadyPtr->playerName); + StringCopy_PlayerName(gStringVar1, sQuizLadyPtr->playerName); ConvertInternationalString(gStringVar1, sQuizLadyPtr->language); nameLen = GetPlayerNameLength(sQuizLadyPtr->playerName); if (nameLen == GetPlayerNameLength(gSaveBlock2Ptr->playerName)) { u8 *name = sQuizLadyPtr->playerName; - for (i = 0; i < nameLen; i ++) + for (i = 0; i < nameLen; i++) { name = sQuizLadyPtr->playerName; if (name[i] != gSaveBlock2Ptr->playerName[i]) @@ -456,7 +429,7 @@ static bool8 IsQuizTrainerIdNotPlayer(void) sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; notPlayer = FALSE; - for (i = 0; i < TRAINER_ID_LENGTH; i ++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) { if (sQuizLadyPtr->playerTrainerId[i] != gSaveBlock2Ptr->playerTrainerId[i]) { @@ -472,7 +445,7 @@ static u8 GetPlayerNameLength(const u8 *playerName) u8 len; const u8 *ptr; - for (len = 0, ptr = playerName; *ptr != EOS; len ++, ptr ++); + for (len = 0, ptr = playerName; *ptr != EOS; len++, ptr++); return len; } @@ -517,7 +490,7 @@ void BufferQuizPrizeItem(void) gSpecialVar_0x8005 = sQuizLadyPtr->prize; } -void SetQuizLadyState_Complete(void) +void SetQuizLadyState_Complete(void) { sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; sQuizLadyPtr->state = LILYCOVE_LADY_STATE_COMPLETED; @@ -532,7 +505,7 @@ void SetQuizLadyState_GivePrize(void) void ClearQuizLadyPlayerAnswer(void) { sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; - sQuizLadyPtr->playerAnswer = -1; + sQuizLadyPtr->playerAnswer = EC_EMPTY_WORD; } void Script_QuizLadyOpenBagMenu(void) @@ -544,13 +517,9 @@ void QuizLadyPickNewQuestion(void) { sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; if (BufferQuizAuthorNameAndCheckIfLady()) - { sQuizLadyPtr->prevQuestionId = sQuizLadyPtr->questionId; - } else - { sQuizLadyPtr->prevQuestionId = ARRAY_COUNT(sQuizLadyQuizQuestions); - } QuizLadyPickQuestion(); } @@ -559,11 +528,9 @@ void ClearQuizLadyQuestionAndAnswer(void) u8 i; sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; - for (i = 0; i < QUIZ_QUESTION_LEN; i ++) - { - sQuizLadyPtr->question[i] = -1; - } - sQuizLadyPtr->correctAnswer = -1; + for (i = 0; i < QUIZ_QUESTION_LEN; i++) + sQuizLadyPtr->question[i] = EC_EMPTY_WORD; + sQuizLadyPtr->correctAnswer = EC_EMPTY_WORD; } void QuizLadySetCustomQuestion(void) @@ -583,11 +550,9 @@ void QuizLadyRecordCustomQuizData(void) sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; sQuizLadyPtr->prize = gSpecialVar_ItemId; - for (i = 0; i < TRAINER_ID_LENGTH; i ++) - { + for (i = 0; i < TRAINER_ID_LENGTH; i++) sQuizLadyPtr->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; - } - StringCopy7(sQuizLadyPtr->playerName, gSaveBlock2Ptr->playerName); + StringCopy_PlayerName(sQuizLadyPtr->playerName, gSaveBlock2Ptr->playerName); sQuizLadyPtr->language = gGameLanguage; } @@ -606,7 +571,7 @@ void BufferQuizCorrectAnswer(void) void FieldCallback_QuizLadyEnableScriptContexts(void) { - EnableBothScriptContexts(); + ScriptContext_Enable(); } void QuizLadyClearQuestionForRecordMix(const LilycoveLady *lilycoveLady) @@ -614,21 +579,18 @@ void QuizLadyClearQuestionForRecordMix(const LilycoveLady *lilycoveLady) u8 i; sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; - if (lilycoveLady->quiz.prevQuestionId < ARRAY_COUNT(sQuizLadyQuizQuestions) + if (lilycoveLady->quiz.prevQuestionId < ARRAY_COUNT(sQuizLadyQuizQuestions) && sQuizLadyPtr->id == LILYCOVE_LADY_QUIZ) { - for (i = 0; i < 4; i ++) + for (i = 0; i < 4; i++) { if (lilycoveLady->quiz.prevQuestionId != sQuizLadyPtr->questionId) - { break; - } sQuizLadyPtr->questionId = Random() % ARRAY_COUNT(sQuizLadyQuizQuestions); } if (lilycoveLady->quiz.prevQuestionId == sQuizLadyPtr->questionId) - { - sQuizLadyPtr->questionId = (sQuizLadyPtr->questionId + 1) % (int)(ARRAY_COUNT(sQuizLadyQuizQuestions)); - } + sQuizLadyPtr->questionId = (sQuizLadyPtr->questionId + 1) % (int)ARRAY_COUNT(sQuizLadyQuizQuestions); + sQuizLadyPtr->prevQuestionId = lilycoveLady->quiz.prevQuestionId; } } @@ -656,11 +618,10 @@ static void ResetContestLadyForRecordMix(void) sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; sContestLadyPtr->id = LILYCOVE_LADY_CONTEST; sContestLadyPtr->givenPokeblock = FALSE; - if (sContestLadyPtr->numGoodPokeblocksGiven == LILYCOVE_LADY_GIFT_THRESHOLD + + if (sContestLadyPtr->numGoodPokeblocksGiven == LILYCOVE_LADY_GIFT_THRESHOLD || sContestLadyPtr->numOtherPokeblocksGiven == LILYCOVE_LADY_GIFT_THRESHOLD) - { ResetContestLadyContestData(); - } } static void ContestLadySavePlayerNameIfHighSheen(u8 sheen) @@ -683,41 +644,41 @@ bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock) sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; switch (sContestLadyPtr->category) { - case CONTEST_CATEGORY_COOL: - if (pokeblock->spicy != 0) - { - sheen = pokeblock->spicy; - correctFlavor = TRUE; - } - break; - case CONTEST_CATEGORY_BEAUTY: - if (pokeblock->dry != 0) - { - sheen = pokeblock->dry; - correctFlavor = TRUE; - } - break; - case CONTEST_CATEGORY_CUTE: - if (pokeblock->sweet != 0) - { - sheen = pokeblock->sweet; - correctFlavor = TRUE; - } - break; - case CONTEST_CATEGORY_SMART: - if (pokeblock->bitter != 0) - { - sheen = pokeblock->bitter; - correctFlavor = TRUE; - } - break; - case CONTEST_CATEGORY_TOUGH: - if (pokeblock->sour != 0) - { - sheen = pokeblock->sour; - correctFlavor = TRUE; - } - break; + case CONTEST_CATEGORY_COOL: + if (pokeblock->spicy != 0) + { + sheen = pokeblock->spicy; + correctFlavor = TRUE; + } + break; + case CONTEST_CATEGORY_BEAUTY: + if (pokeblock->dry != 0) + { + sheen = pokeblock->dry; + correctFlavor = TRUE; + } + break; + case CONTEST_CATEGORY_CUTE: + if (pokeblock->sweet != 0) + { + sheen = pokeblock->sweet; + correctFlavor = TRUE; + } + break; + case CONTEST_CATEGORY_SMART: + if (pokeblock->bitter != 0) + { + sheen = pokeblock->bitter; + correctFlavor = TRUE; + } + break; + case CONTEST_CATEGORY_TOUGH: + if (pokeblock->sour != 0) + { + sheen = pokeblock->sour; + correctFlavor = TRUE; + } + break; } if (correctFlavor == TRUE) { @@ -731,18 +692,18 @@ bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock) return correctFlavor; } -static void BufferContestLadyCategoryAndMonName(u8 *dest1, u8 *dest2) +static void BufferContestLadyCategoryAndMonName(u8 *category, u8 *nickname) { sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; - StringCopy(dest1, sContestLadyCategoryNames[sContestLadyPtr->category]); - StringCopy10(dest2, sContestLadyMonNames[sContestLadyPtr->category]); + StringCopy(category, sContestLadyCategoryNames[sContestLadyPtr->category]); + StringCopy_Nickname(nickname, sContestLadyMonNames[sContestLadyPtr->category]); } -void BufferContestLadyMonName(u8 *dest1, u8 *dest2) +void BufferContestLadyMonName(u8 *category, u8 *nickname) { sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; - *dest1 = sContestLadyPtr->category; - StringCopy(dest2, sContestLadyMonNames[sContestLadyPtr->category]); + *category = sContestLadyPtr->category; + StringCopy(nickname, sContestLadyMonNames[sContestLadyPtr->category]); } void BufferContestLadyPlayerName(u8 *dest) @@ -779,9 +740,7 @@ bool8 HasPlayerGivenContestLadyPokeblock(void) { sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; if (sContestLadyPtr->givenPokeblock == TRUE) - { return TRUE; - } return FALSE; } @@ -790,11 +749,10 @@ bool8 ShouldContestLadyShowGoOnAir(void) bool8 putOnAir = FALSE; sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; - if (sContestLadyPtr->numGoodPokeblocksGiven >= LILYCOVE_LADY_GIFT_THRESHOLD + if (sContestLadyPtr->numGoodPokeblocksGiven >= LILYCOVE_LADY_GIFT_THRESHOLD || sContestLadyPtr->numOtherPokeblocksGiven >= LILYCOVE_LADY_GIFT_THRESHOLD) - { putOnAir = TRUE; - } + return putOnAir; } diff --git a/src/link.c b/src/link.c index 8a04b53e58..57e33c8115 100644 --- a/src/link.c +++ b/src/link.c @@ -1,7 +1,7 @@ #include "global.h" #include "m4a.h" #include "malloc.h" -#include "reset_save_heap.h" +#include "reload_save.h" #include "save.h" #include "bg.h" #include "window.h" @@ -108,7 +108,7 @@ static EWRAM_DATA u16 sTimeOutCounter = 0; EWRAM_DATA struct LinkPlayer gLocalLinkPlayer = {}; EWRAM_DATA struct LinkPlayer gLinkPlayers[MAX_RFU_PLAYERS] = {}; static EWRAM_DATA struct LinkPlayer sSavedLinkPlayers[MAX_RFU_PLAYERS] = {}; -EWRAM_DATA struct { +static EWRAM_DATA struct { u32 status; u8 lastRecvQueueCount; u8 lastSendQueueCount; @@ -120,18 +120,18 @@ static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL; static void InitLocalLinkPlayer(void); static void VBlankCB_LinkError(void); static void CB2_LinkTest(void); -static void ProcessRecvCmds(u8 unused); +static void ProcessRecvCmds(u8); static void LinkCB_SendHeldKeys(void); static void ResetBlockSend(void); -static bool32 InitBlockSend(const void *src, size_t size); +static bool32 InitBlockSend(const void *, size_t); static void LinkCB_BlockSendBegin(void); static void LinkCB_BlockSend(void); static void LinkCB_BlockSendEnd(void); -static void SetBlockReceivedFlag(u8 who); -static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size); -static void LinkTest_PrintHex(u32 pos, u8 a0, u8 a1, u8 a2); +static void SetBlockReceivedFlag(u8); +static u16 LinkTestCalcBlockChecksum(const u16 *, u16); +static void LinkTest_PrintHex(u32, u8, u8, u8); static void LinkCB_RequestPlayerDataExchange(void); -static void Task_PrintTestData(u8 taskId); +static void Task_PrintTestData(u8); static void LinkCB_ReadyCloseLink(void); static void LinkCB_WaitCloseLink(void); @@ -140,7 +140,7 @@ static void LinkCB_WaitCloseLinkWithJP(void); static void LinkCB_Standby(void); static void LinkCB_StandbyForAll(void); -static void CheckErrorStatus(void); +static void TrySetLinkErrorBuffer(void); static void CB2_PrintErrorMessage(void); static bool8 IsSioMultiMaster(void); static void SetWirelessCommType0_Internal(void); @@ -158,19 +158,19 @@ static void DoSend(void); static void StopTimer(void); static void SendRecvDone(void); -static const u16 sWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal"); -static const u32 sWirelessLinkDisplayGfx[] = INCBIN_U32("graphics/interface/wireless_link_display.4bpp.lz"); -static const u32 sWirelessLinkDisplayTilemap[] = INCBIN_U32("graphics/interface/wireless_link_display.bin.lz"); -static const u16 sLinkTestDigitsPal[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal"); -static const u16 sLinkTestDigitsGfx[] = INCBIN_U16("graphics/interface/link_test_digits.4bpp"); +static const u16 sWirelessLinkDisplayPal[] = INCBIN_U16("graphics/link/wireless_display.gbapal"); +static const u32 sWirelessLinkDisplayGfx[] = INCBIN_U32("graphics/link/wireless_display.4bpp.lz"); +static const u32 sWirelessLinkDisplayTilemap[] = INCBIN_U32("graphics/link/wireless_display.bin.lz"); +static const u16 sLinkTestDigitsPal[] = INCBIN_U16("graphics/link/test_digits.gbapal"); +static const u16 sLinkTestDigitsGfx[] = INCBIN_U16("graphics/link/test_digits.4bpp"); static const u8 sUnusedTransparentWhite[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE}"); -static const u16 sCommErrorBg_Gfx[] = INCBIN_U16("graphics/interface/comm_error_bg.4bpp"); +static const u16 sCommErrorBg_Gfx[] = INCBIN_U16("graphics/link/comm_error_bg.4bpp"); static const struct BlockRequest sBlockRequests[] = { - {gBlockSendBuffer, 200}, - {gBlockSendBuffer, 200}, - {gBlockSendBuffer, 100}, - {gBlockSendBuffer, 220}, - {gBlockSendBuffer, 40} + [BLOCK_REQ_SIZE_NONE] = {gBlockSendBuffer, 200}, + [BLOCK_REQ_SIZE_200] = {gBlockSendBuffer, 200}, + [BLOCK_REQ_SIZE_100] = {gBlockSendBuffer, 100}, + [BLOCK_REQ_SIZE_220] = {gBlockSendBuffer, 220}, + [BLOCK_REQ_SIZE_40] = {gBlockSendBuffer, 40} }; static const u8 sBGControlRegs[] = { REG_OFFSET_BG0CNT, @@ -292,10 +292,9 @@ static void LinkTestScreen(void) gLinkType = LINKTYPE_TRADE; OpenLink(); SeedRng(gMain.vblankCounter2); - for (i = 0; i < MAX_LINK_PLAYERS; i++) - { + for (i = 0; i < TRAINER_ID_LENGTH; i++) gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256; - } + InitLinkTestBG(0, 2, 4, 0, 0); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); CreateTask(Task_DestroySelf, 0); @@ -394,9 +393,7 @@ void CloseLink(void) { gReceivedRemoteLinkPlayers = FALSE; if (gWirelessCommType) - { LinkRfu_Shutdown(); - } sLinkOpen = FALSE; DisableSerial(); } @@ -485,22 +482,18 @@ u16 LinkMain2(const u16 *heldKeys) u8 i; if (!sLinkOpen) - { return 0; - } + for (i = 0; i < CMD_LENGTH; i++) - { gSendCmd[i] = 0; - } + gLinkHeldKeys = *heldKeys; if (gLinkStatus & LINK_STAT_CONN_ESTABLISHED) { ProcessRecvCmds(SIO_MULTI_CNT->id); if (gLinkCallback != NULL) - { gLinkCallback(); - } - CheckErrorStatus(); + TrySetLinkErrorBuffer(); } return gLinkStatus; } @@ -764,7 +757,7 @@ static int AreAnyLinkPlayersUsingVersions(u32 version1, u32 version2) nPlayers = GetLinkPlayerCount(); for (i = 0; i < nPlayers; i++) { - if ((gLinkPlayers[i].version & 0xFF) == version1 + if ((gLinkPlayers[i].version & 0xFF) == version1 || (gLinkPlayers[i].version & 0xFF) == version2) return 1; } @@ -873,7 +866,7 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int minPlayers, int maxPlayers) sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS; linkType1 = gLinkPlayers[GetMultiplayerId()].linkType; linkType2 = gLinkPlayers[GetMultiplayerId() ^ 1].linkType; - if ((linkType1 == LINKTYPE_BATTLE_TOWER_50 && linkType2 == LINKTYPE_BATTLE_TOWER_OPEN) + if ((linkType1 == LINKTYPE_BATTLE_TOWER_50 && linkType2 == LINKTYPE_BATTLE_TOWER_OPEN) || (linkType1 == LINKTYPE_BATTLE_TOWER_OPEN && linkType2 == LINKTYPE_BATTLE_TOWER_50)) { // 3 below indicates partner made different level mode selection @@ -1029,7 +1022,7 @@ u8 GetMultiplayerId(void) return SIO_MULTI_CNT->id; } -u8 bitmask_all_link_players_but_self(void) +u8 BitmaskAllOtherLinkPlayers(void) { u8 mpId; @@ -1350,7 +1343,7 @@ void CheckLinkPlayersMatchSaved(void) for (i = 0; i < gSavedLinkPlayerCount; i++) { - if (sSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId + if (sSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId || StringCompare(sSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0) { gLinkErrorOccurred = TRUE; @@ -1563,10 +1556,13 @@ static void LinkCB_StandbyForAll(void) } } -static void CheckErrorStatus(void) +static void TrySetLinkErrorBuffer(void) { + // Check if a link error has occurred if (sLinkOpen && EXTRACT_LINK_ERRORS(gLinkStatus)) { + // Link error has occurred, handle message details if + // necessary, then stop the link. if (!gSuppressLinkErrorMessage) { sLinkErrorBuffer.status = gLinkStatus; @@ -1579,7 +1575,7 @@ static void CheckErrorStatus(void) } } -void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, bool8 disconnected) +void SetLinkErrorBuffer(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, bool8 disconnected) { sLinkErrorBuffer.status = status; sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount; @@ -1599,7 +1595,7 @@ void CB2_LinkError(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetPaletteFadeControl(); - FillPalette(0, 0, 2); + FillPalette(RGB_BLACK, 0, 2); ResetTasks(); ScanlineEffect_Stop(); if (gWirelessCommType) @@ -1625,7 +1621,7 @@ void CB2_LinkError(void) SetGpuReg(REG_OFFSET_BG1HOFS, 0); SetGpuReg(REG_OFFSET_BG1VOFS, 0); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); - LoadPalette(gUnknown_0860F074, 0xf0, 0x20); + LoadPalette(gStandardMenuPalette, 0xf0, 0x20); gSoftResetDisabled = FALSE; CreateTask(Task_DestroySelf, 0); StopMapMusic(); @@ -1647,12 +1643,12 @@ static void ErrorMsg_MoveCloserToPartner(void) LoadPalette(sWirelessLinkDisplayPal, 0, 0x20); FillWindowPixelBuffer(0, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized3(0, 3, 2, 6, sTextColors, 0, gText_CommErrorEllipsis); - AddTextPrinterParameterized3(2, 3, 2, 1, sTextColors, 0, gText_MoveCloserToLinkPartner); + AddTextPrinterParameterized3(0, FONT_SHORT_COPY_1, 2, 6, sTextColors, 0, gText_CommErrorEllipsis); + AddTextPrinterParameterized3(2, FONT_SHORT_COPY_1, 2, 1, sTextColors, 0, gText_MoveCloserToLinkPartner); PutWindowTilemap(0); PutWindowTilemap(2); - CopyWindowToVram(0, 0); - CopyWindowToVram(2, 3); + CopyWindowToVram(0, COPYWIN_NONE); // Does nothing + CopyWindowToVram(2, COPYWIN_FULL); } static void ErrorMsg_CheckConnections(void) @@ -1660,11 +1656,11 @@ static void ErrorMsg_CheckConnections(void) LoadBgTiles(0, sCommErrorBg_Gfx, 0x20, 0); FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized3(1, 3, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections); + AddTextPrinterParameterized3(1, FONT_SHORT_COPY_1, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections); PutWindowTilemap(1); PutWindowTilemap(2); - CopyWindowToVram(1, 0); - CopyWindowToVram(2, 3); + CopyWindowToVram(1, COPYWIN_NONE); // Does nothing + CopyWindowToVram(2, COPYWIN_FULL); } static void CB2_PrintErrorMessage(void) @@ -1695,9 +1691,9 @@ static void CB2_PrintErrorMessage(void) break; case 130: if (gWirelessCommType == 2) - AddTextPrinterParameterized3(0, 3, 2, 20, sTextColors, 0, gText_ABtnTitleScreen); + AddTextPrinterParameterized3(0, FONT_SHORT_COPY_1, 2, 20, sTextColors, 0, gText_ABtnTitleScreen); else if (gWirelessCommType == 1) - AddTextPrinterParameterized3(0, 3, 2, 20, sTextColors, 0, gText_ABtnRegistrationCounter); + AddTextPrinterParameterized3(0, FONT_SHORT_COPY_1, 2, 20, sTextColors, 0, gText_ABtnRegistrationCounter); break; } if (gMain.state == 160) @@ -1709,7 +1705,7 @@ static void CB2_PrintErrorMessage(void) PlaySE(SE_PIN); gWirelessCommType = 0; sLinkErrorBuffer.disconnected = FALSE; - sub_81700F8(); + ReloadSave(); } } else if (gWirelessCommType == 2) @@ -1731,12 +1727,12 @@ static void CB2_PrintErrorMessage(void) bool8 GetSioMultiSI(void) { - return (REG_SIOCNT & 0x04) != 0; + return (REG_SIOCNT & SIO_MULTI_SI) != 0; } static bool8 IsSioMultiMaster(void) { - return (REG_SIOCNT & 0x8) && !(REG_SIOCNT & 0x04); + return (REG_SIOCNT & SIO_MULTI_SD) && (REG_SIOCNT & SIO_MULTI_SI) == 0; } bool8 IsLinkConnectionEstablished(void) @@ -1777,15 +1773,15 @@ void LinkPlayerFromBlock(u32 who) *player = block->linkPlayer; ConvertLinkPlayerName(player); - if (strcmp(block->magic1, sASCIIGameFreakInc) != 0 + if (strcmp(block->magic1, sASCIIGameFreakInc) != 0 || strcmp(block->magic2, sASCIIGameFreakInc) != 0) SetMainCallback2(CB2_LinkError); } +// When this function returns TRUE the callbacks are skipped bool8 HandleLinkConnection(void) { - bool32 r4; - bool32 r5; + bool32 main1Failed, main2Failed; if (gWirelessCommType == 0) { @@ -1796,11 +1792,13 @@ bool8 HandleLinkConnection(void) } else { - r4 = sub_8010EC0(); - r5 = sub_8010F1C(); + main1Failed = RfuMain1(); // Always returns FALSE + main2Failed = RfuMain2(); if (IsSendingKeysOverCable() == TRUE) { - if (r4 == TRUE || IsRfuRecvQueueEmpty() || r5) + // This will never be reached. + // IsSendingKeysOverCable is always FALSE for wireless communication + if (main1Failed == TRUE || IsRfuRecvQueueEmpty() || main2Failed) return TRUE; } } @@ -1833,9 +1831,9 @@ u32 GetLinkRecvQueueLength(void) return gLink.recvQueue.count; } -bool32 IsLinkRecvQueueLengthAtLeast3(void) +bool32 IsLinkRecvQueueAtOverworldMax(void) { - if (GetLinkRecvQueueLength() > 2) + if (GetLinkRecvQueueLength() >= OVERWORLD_RECV_QUEUE_MAX) return TRUE; return FALSE; @@ -1916,9 +1914,7 @@ u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 (*recvCmds)[CMD_LENG break; case 1: if (gLink.isMaster == LINK_MASTER && gLink.playerCount > 1) - { gLink.handshakeAsMaster = TRUE; - } break; case 2: gLink.state = LINK_STATE_START0; @@ -1974,20 +1970,14 @@ u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 (*recvCmds)[CMD_LENG } if (gLink.lag == LAG_MASTER) - { retVal |= LINK_STAT_ERROR_LAG_MASTER; - } if (gLink.localId >= MAX_LINK_PLAYERS) - { retVal |= LINK_STAT_ERROR_INVALID_ID; - } retVal2 = retVal; if (gLink.lag == LAG_SLAVE) - { retVal2 |= LINK_STAT_ERROR_LAG_SLAVE; - } return retVal2; } @@ -2201,30 +2191,26 @@ static bool8 DoHandshake(void) { REG_SIOMLT_SEND = SLAVE_HANDSHAKE; } - *(u64 *)gLink.tempRecvBuffer = REG_SIOMLT_RECV; + *(u64 *)gLink.handshakeBuffer = REG_SIOMLT_RECV; REG_SIOMLT_RECV = 0; gLink.handshakeAsMaster = FALSE; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { - if ((gLink.tempRecvBuffer[i] & ~0x3) == SLAVE_HANDSHAKE || gLink.tempRecvBuffer[i] == MASTER_HANDSHAKE) + if ((gLink.handshakeBuffer[i] & ~0x3) == SLAVE_HANDSHAKE || gLink.handshakeBuffer[i] == MASTER_HANDSHAKE) { playerCount++; - if (minRecv > gLink.tempRecvBuffer[i] && gLink.tempRecvBuffer[i] != 0) - { - minRecv = gLink.tempRecvBuffer[i]; - } + if (minRecv > gLink.handshakeBuffer[i] && gLink.handshakeBuffer[i] != 0) + minRecv = gLink.handshakeBuffer[i]; } else { - if (gLink.tempRecvBuffer[i] != 0xFFFF) - { + if (gLink.handshakeBuffer[i] != 0xFFFF) playerCount = 0; - } break; } } gLink.playerCount = playerCount; - if (gLink.playerCount > 1 && gLink.playerCount == sHandshakePlayerCount && gLink.tempRecvBuffer[0] == MASTER_HANDSHAKE) + if (gLink.playerCount > 1 && gLink.playerCount == sHandshakePlayerCount && gLink.handshakeBuffer[0] == MASTER_HANDSHAKE) { return TRUE; } diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 6366b97047..c54d6c3d34 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -16,50 +16,88 @@ #include "task.h" #include "text.h" #include "save.h" -#include "mystery_gift.h" +#include "mystery_gift_menu.h" + +enum { + RFUSTATE_INIT, + RFUSTATE_INIT_END, + RFUSTATE_PARENT_CONNECT, + RFUSTATE_PARENT_CONNECT_END, + RFUSTATE_STOP_MANAGER, + RFUSTATE_STOP_MANAGER_END, + RFUSTATE_CHILD_CONNECT, + RFUSTATE_CHILD_CONNECT_END, + RFUSTATE_UNUSED, + RFUSTATE_RECONNECTED, + RFUSTATE_CONNECTED, + RFUSTATE_CHILD_TRY_JOIN, + RFUSTATE_CHILD_JOINED, + RFUSTATE_UR_PLAYER_EXCHANGE, + RFUSTATE_UR_STOP_MANAGER, + RFUSTATE_UR_STOP_MANAGER_END, + RFUSTATE_UR_FINALIZE, +}; +// These states are used for different purposes +// depending on the link mode (parent, child, union room) +#define RFUSTATE_PARENT_FINALIZE_START 17 +#define RFUSTATE_PARENT_FINALIZE 18 +#define RFUSTATE_UR_CONNECT 17 +#define RFUSTATE_UR_CONNECT_END 18 +#define RFUSTATE_FINALIZED 20 + +// States for the 'receiving' field of RfuBlockSend +enum { + RECV_STATE_READY, + RECV_STATE_RECEIVING, + RECV_STATE_FINISHED, +}; struct SioInfo { - char magic[15]; // PokemonSioInfo + char magic[sizeof("PokemonSioInfo")]; u8 playerCount; u8 linkPlayerIdx[RFU_CHILD_MAX]; struct LinkPlayer linkPlayers[MAX_RFU_PLAYERS]; u8 filler[92]; }; +// Struct is mostly empty, presumably because usage of +// its fields was largely removed before release struct RfuDebug { - u8 filler0[6]; - u16 unk_06; - u8 filler1[6]; - vu8 unk_0e; - u8 unk_0f; - u8 filler2[84]; - u16 unk_64; - u8 filler3[29]; - u8 unk_83; - u8 filler4[88]; + u8 unused0[6]; + u16 recvCount; + u8 unused1[6]; + vu8 unkFlag; + u8 childJoinCount; + u8 unused2[84]; + u16 blockSendFailures; + u8 unused3[29]; + u8 blockSendTime; + u8 unused4[88]; }; -u32 gf_rfu_REQ_api[RFU_API_BUFF_SIZE_RAM / 4]; -struct GFRfuManager Rfu; +u32 gRfuAPIBuffer[RFU_API_BUFF_SIZE_RAM / 4]; +struct RfuManager gRfu; static u8 sHeldKeyCount; -static u8 sResendBlock8[16]; -static u16 sResendBlock16[8]; +static u8 sResendBlock8[CMD_LENGTH * 2]; +static u16 sResendBlock16[CMD_LENGTH]; -EWRAM_DATA struct GFtgtGname gHostRFUtgtGnameBuffer = {}; -EWRAM_DATA u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1] = {}; +EWRAM_DATA struct RfuGameData gHostRfuGameData = {}; +EWRAM_DATA u8 gHostRfuUsername[RFU_USER_NAME_LENGTH] = {}; static EWRAM_DATA INIT_PARAM sRfuReqConfig = {}; static EWRAM_DATA struct RfuDebug sRfuDebug = {}; static void ResetSendDataManager(struct RfuBlockSend *); -static void sub_800EAB4(void); -static void sub_800EAFC(void); -static void sub_800ED34(u16); -static void sub_800EDBC(u16); +static void InitChildRecvBuffers(void); +static void InitParentSendData(void); +static void MSCCallback_Child(u16); +static void MSCCallback_Parent(u16); static void UpdateBackupQueue(void); -static void Task_ExchangeLinkPlayers(u8); +static void Task_PlayerExchange(u8); +static void Task_PlayerExchangeUpdate(u8); +static void Task_PlayerExchangeChat(u8); static void RfuHandleReceiveCommand(u8); static void CallRfuFunc(void); static void RfuPrepareSendBuffer(u16); @@ -68,31 +106,29 @@ static void SendNextBlock(void); static void SendLastBlock(void); static u8 GetPartnerIndexByNameAndTrainerID(const u8 *, u16); static void UpdateChildStatuses(void); -static s32 sub_80107A0(void); -static void sub_801084C(u8); +static s32 GetJoinGroupStatus(void); static void ClearSelectedLinkPlayerIds(u16); static void ValidateAndReceivePokemonSioInfo(void *); -static void sub_8010D0C(u8); -static void sub_80115EC(s32); -static void sub_8011BF8(void); +static void ParentResetChildRecvMetadata(s32); +static void CB2_RfuIdle(void); static void RfuReqDisconnectSlot(u32); -static void sub_8011E94(u32, u32); -static void sub_801209C(u8); +static void SendDisconnectCommand(u32, u32); +static void Task_TryConnectToUnionRoomParent(u8); static void Debug_PrintEmpty(void); static void Task_Idle(u8); static const INIT_PARAM sRfuReqConfigTemplate = { - .maxMFrame = 4, + .maxMFrame = 4, .MC_TimerCount = 32, .availSlot_flag = 0, .mboot_flag = 0, - .serialNo = 2, - .gameName = (void *)&gHostRFUtgtGnameBuffer, - .userName = gHostRFUtgtUnameBuffer, + .serialNo = RFU_SERIAL_GAME, + .gameName = (void *)&gHostRfuGameData, + .userName = gHostRfuUsername, .fastSearchParent_flag = TRUE, .linkRecovery_enable = FALSE, - .linkRecovery_period = 600, - .NI_failCounter_limit = 0x12c + .linkRecovery_period = 600, + .NI_failCounter_limit = 300 }; static const u8 sAvailSlots[] = { @@ -102,64 +138,97 @@ static const u8 sAvailSlots[] = { [4] = AVAIL_SLOT4 }; +#define BLOCK_MASK(bitNum)((1 << (bitNum)) - 1) static const u32 sAllBlocksReceived[] = { - 0x000000, - 0x000001, - 0x000003, - 0x000007, - 0x00000f, - 0x00001f, - 0x00003f, - 0x00007f, - 0x0000ff, - 0x0001ff, - 0x0003ff, - 0x0007ff, - 0x000fff, - 0x001fff, - 0x003fff, - 0x007fff, - 0x00ffff, - 0x01ffff, - 0x03ffff, - 0x07ffff, - 0x0fffff, - 0x1fffff, - 0x3fffff, - 0x7fffff, - 0xffffff + BLOCK_MASK(0), + BLOCK_MASK(1), + BLOCK_MASK(2), + BLOCK_MASK(3), + BLOCK_MASK(4), + BLOCK_MASK(5), + BLOCK_MASK(6), + BLOCK_MASK(7), + BLOCK_MASK(8), + BLOCK_MASK(9), + BLOCK_MASK(10), + BLOCK_MASK(11), + BLOCK_MASK(12), + BLOCK_MASK(13), + BLOCK_MASK(14), + BLOCK_MASK(15), + BLOCK_MASK(16), + BLOCK_MASK(17), + BLOCK_MASK(18), + BLOCK_MASK(19), + BLOCK_MASK(20), + BLOCK_MASK(21), + BLOCK_MASK(22), + BLOCK_MASK(23), + BLOCK_MASK(24), }; +#undef BLOCK_MASK -static const u8 sUnknown_082ED68C[] = { +static const u8 sSlotToLinkPlayerTableId[] = { 0, 0, 1, 1, 2, 2, 2, 2, 3 }; -static const u8 sUnknown_082ED695[] = { - 0, 1, 1, 2, - 1, 2, 2, 3, - 1, 2, 2, 3, - 2, 3, 3, 4 +// Effectively just returns the number of bits set in the index value +// Used for masks of the other players, MAX_RFU_PLAYERS - 1 excludes self +static const u8 sPlayerBitsToCount[1 << (MAX_RFU_PLAYERS - 1)] = { + 0, // 0000 + 1, // 0001 + 1, // 0010 + 2, // 0011 + 1, // 0100 + 2, // 0101 + 2, // 0110 + 3, // 0111 + 1, // 1000 + 2, // 1001 + 2, // 1010 + 3, // 1011 + 2, // 1100 + 3, // 1101 + 3, // 1110 + 4 // 1111 }; -static const u8 sUnknown_082ED6A5[] = { - 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 +// If the 4 bits representing child slots were an array, this table +// would return the index of the most recently set bit +static const u8 sPlayerBitsToNewChildIdx[1 << (MAX_RFU_PLAYERS - 1)] = { + 0, // 0000 + 0, // 0001 + 1, // 0010 + 0, // 0011 + 2, // 0100 + 0, // 0101 + 1, // 0110 + 0, // 0111 + 3, // 1000 + 0, // 1001 + 1, // 1010 + 0, // 1011 + 2, // 1100 + 0, // 1101 + 1, // 1110 + 0 // 1111 }; static const struct BlockRequest sBlockRequests[] = { - { gBlockSendBuffer, 200 }, - { gBlockSendBuffer, 200 }, - { gBlockSendBuffer, 100 }, - { gBlockSendBuffer, 220 }, - { gBlockSendBuffer, 40 } + [BLOCK_REQ_SIZE_NONE] = { gBlockSendBuffer, 200 }, + [BLOCK_REQ_SIZE_200] = { gBlockSendBuffer, 200 }, + [BLOCK_REQ_SIZE_100] = { gBlockSendBuffer, 100 }, + [BLOCK_REQ_SIZE_220] = { gBlockSendBuffer, 220 }, + [BLOCK_REQ_SIZE_40] = { gBlockSendBuffer, 40 } }; static const u16 sAcceptedSerialNos[] = { - 0x0002, - RFU_SERIAL_7F7D, - 0x0000, - 0xFFFF + RFU_SERIAL_GAME, + RFU_SERIAL_WONDER_DISTRIBUTOR, + RFU_SERIAL_UNKNOWN, + RFU_SERIAL_END }; static const char sASCII_RfuCmds[][15] = { @@ -184,21 +253,22 @@ static const char sASCII_RecoverCmds[][16] = { "RECOVER FAILED" }; -static const TaskFunc sUnknown_082ED7E0[] = { - sub_801084C, - Task_ExchangeLinkPlayers, - sub_8010D0C +// List of additional tasks to destroy (if active) when the RFU shuts down +static const TaskFunc sShutdownTasks[] = { + Task_PlayerExchange, + Task_PlayerExchangeUpdate, + Task_PlayerExchangeChat }; static const char sASCII_PokemonSioInfo[] = "PokemonSioInfo"; static const char sASCII_LinkLossDisconnect[] = "LINK LOSS DISCONNECT!"; static const char sASCII_LinkLossRecoveryNow[] = "LINK LOSS RECOVERY NOW"; -ALIGNED(4) static const char sASCII_30Commas[31] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'}; -static const char sASCII_15Commas[16] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'}; -static const char sASCII_8Commas[9] = {' ',' ',' ',' ',' ',' ',' ',' ','\0'}; -ALIGNED(4) static const char sASCII_Space[2] = {' ','\0'}; -static const char sASCII_Asterisk[2] = {'*','\0'}; -static const char sASCII_NowSlot[8] = "NOWSLOT"; +ALIGNED(4) static const char sASCII_30Spaces[] = {" "}; +static const char sASCII_15Spaces[] = {" "}; +static const char sASCII_8Spaces[] = {" "}; +ALIGNED(4) static const char sASCII_Space[] = {" "}; +static const char sASCII_Asterisk[] = {"*"}; +static const char sASCII_NowSlot[] = "NOWSLOT"; static const char sASCII_ClockCmds[][12] = { " ", @@ -208,7 +278,7 @@ static const char sASCII_ClockCmds[][12] = { "CLOCK SLAVE" }; -static const char sASCII_ChildParentSearch[3][8] = { +static const char sASCII_ChildParentSearch[][8] = { "CHILD ", "PARENT", "SEARCH" @@ -227,21 +297,17 @@ static void Debug_PrintNum(u16 num, u8 x, u8 y, u8 numDigits) void ResetLinkRfuGFLayer(void) { s32 i; - u8 errorState = Rfu.errorState; - CpuFill16(0, &Rfu, sizeof Rfu); - Rfu.errorState = errorState; - Rfu.parentChild = 0xFF; - if (Rfu.errorState != 4) - { - Rfu.errorState = 0; - } + u8 errorState = gRfu.errorState; + CpuFill16(0, &gRfu, sizeof(gRfu)); + gRfu.errorState = errorState; + gRfu.parentChild = 0xFF; + if (gRfu.errorState != RFU_ERROR_STATE_IGNORE) + gRfu.errorState = RFU_ERROR_STATE_NONE; for (i = 0; i < MAX_RFU_PLAYERS; i++) - { - ResetSendDataManager(&Rfu.recvBlock[i]); - } - ResetSendDataManager(&Rfu.sendBlock); - RfuRecvQueue_Reset(&Rfu.recvQueue); - RfuSendQueue_Reset(&Rfu.sendQueue); + ResetSendDataManager(&gRfu.recvBlock[i]); + ResetSendDataManager(&gRfu.sendBlock); + RfuRecvQueue_Reset(&gRfu.recvQueue); + RfuSendQueue_Reset(&gRfu.sendQueue); CpuFill16(0, gSendCmd, sizeof gSendCmd); CpuFill16(0, gRecvCmds, sizeof gRecvCmds); CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers); @@ -262,158 +328,159 @@ void InitRFU(void) void InitRFUAPI(void) { - if (!rfu_initializeAPI((void *)gf_rfu_REQ_api, sizeof gf_rfu_REQ_api, gIntrTable + 1, TRUE)) + if (!rfu_initializeAPI((void *)gRfuAPIBuffer, sizeof(gRfuAPIBuffer), &gIntrTable[1], TRUE)) { gLinkType = 0; ClearSavedLinkPlayers(); - sub_80111B0(FALSE); + RfuSetIgnoreError(FALSE); ResetLinkRfuGFLayer(); - rfu_setTimerInterrupt(3, gIntrTable + 2); + rfu_setTimerInterrupt(3, &gIntrTable[2]); } } -static void Task_LinkLeaderSearchForChildren(u8 taskId) +static void Task_ParentSearchForChildren(u8 taskId) { UpdateChildStatuses(); - switch (Rfu.state) + switch (gRfu.state) { - case 0: + case RFUSTATE_INIT: rfu_LMAN_initializeRFU(&sRfuReqConfig); - Rfu.state = 1; + gRfu.state = RFUSTATE_INIT_END; gTasks[taskId].data[1] = 1; break; - case 1: + case RFUSTATE_INIT_END: break; - case 2: - rfu_LMAN_establishConnection(Rfu.parentChild, 0, 240, (u16 *)sAcceptedSerialNos); - Rfu.state = 3; + case RFUSTATE_PARENT_CONNECT: + rfu_LMAN_establishConnection(gRfu.parentChild, 0, 240, (u16 *)sAcceptedSerialNos); + gRfu.state = RFUSTATE_PARENT_CONNECT_END; gTasks[taskId].data[1] = 6; break; - case 3: + case RFUSTATE_PARENT_CONNECT_END: break; - case 4: + case RFUSTATE_STOP_MANAGER: rfu_LMAN_stopManager(FALSE); - Rfu.state = 5; + gRfu.state = RFUSTATE_STOP_MANAGER_END; break; - case 5: + case RFUSTATE_STOP_MANAGER_END: break; - case 18: - Rfu.unk_cdb = FALSE; - rfu_LMAN_setMSCCallback(sub_800EDBC); - sub_800EAB4(); - sub_800EAFC(); - Rfu.state = 20; + case RFUSTATE_PARENT_FINALIZE: + gRfu.parentFinished = FALSE; + rfu_LMAN_setMSCCallback(MSCCallback_Parent); + InitChildRecvBuffers(); + InitParentSendData(); + gRfu.state = RFUSTATE_FINALIZED; gTasks[taskId].data[1] = 8; - CreateTask(sub_801084C, 5); + CreateTask(Task_PlayerExchange, 5); DestroyTask(taskId); break; } } -s32 sub_800E87C(u8 idx) +s32 Rfu_GetIndexOfNewestChild(u8 bits) { - return sUnknown_082ED6A5[idx]; + return sPlayerBitsToNewChildIdx[bits]; } -void sub_800E88C(s32 r2, s32 r5) +static void SetLinkPlayerIdsFromSlots(s32 baseSlots, s32 addSlots) { u8 i; - u8 r4 = 1; - s32 r1 = r2; - s32 r6 = 0; - if (r5 == -1) + u8 baseId = 1; + s32 baseSlotsCopy = baseSlots; + s32 newId = 0; + if (addSlots == -1) { - for (i = 0; i < RFU_CHILD_MAX; r2 >>= 1, i++) + // Initialize + for (i = 0; i < RFU_CHILD_MAX; baseSlots >>= 1, i++) { - if (r2 & 1) + if (baseSlots & 1) { - Rfu.linkPlayerIdx[i] = r4; - r4++; + gRfu.linkPlayerIdx[i] = baseId; + baseId++; } } } else { - for (i = 0; i < RFU_CHILD_MAX; r1 >>= 1, i++) + // Clear id for any empty slot + for (i = 0; i < RFU_CHILD_MAX; baseSlotsCopy >>= 1, i++) { - if (!(r1 & 1)) - { - Rfu.linkPlayerIdx[i] = 0; - } + if (!(baseSlotsCopy & 1)) + gRfu.linkPlayerIdx[i] = 0; } - for (r4 = RFU_CHILD_MAX; r4 != 0; r4--) + + // Get starting id by checking existing slots + for (baseId = RFU_CHILD_MAX; baseId != 0; baseId--) { - for (i = 0; i < RFU_CHILD_MAX && Rfu.linkPlayerIdx[i] != r4; i++); + for (i = 0; i < RFU_CHILD_MAX && gRfu.linkPlayerIdx[i] != baseId; i++) + ; if (i == RFU_CHILD_MAX) - { - r6 = r4; - } + newId = baseId; } - for (r5 &= ~r2, i = 0; i < RFU_CHILD_MAX; r5 >>= 1, i++) + + // Set id for new slots + for (addSlots &= ~baseSlots, i = 0; i < RFU_CHILD_MAX; addSlots >>= 1, i++) { - if (r5 & 1) - { - Rfu.linkPlayerIdx[i] = r6++; - } + if (addSlots & 1) + gRfu.linkPlayerIdx[i] = newId++; } } } -static void Task_JoinGroupSearchForParent(u8 taskId) +static void Task_ChildSearchForParent(u8 taskId) { - switch (Rfu.state) + switch (gRfu.state) { - case 0: + case RFUSTATE_INIT: rfu_LMAN_initializeRFU((INIT_PARAM *)&sRfuReqConfigTemplate); - Rfu.state = 1; + gRfu.state = RFUSTATE_INIT_END; gTasks[taskId].data[1] = 1; break; - case 1: + case RFUSTATE_INIT_END: break; - case 6: - rfu_LMAN_establishConnection(Rfu.parentChild, 0, 240, (u16 *)sAcceptedSerialNos); - Rfu.state = 7; + case RFUSTATE_CHILD_CONNECT: + rfu_LMAN_establishConnection(gRfu.parentChild, 0, 240, (u16 *)sAcceptedSerialNos); + gRfu.state = RFUSTATE_CHILD_CONNECT_END; gTasks[taskId].data[1] = 7; break; - case 7: + case RFUSTATE_CHILD_CONNECT_END: break; - case 9: + case RFUSTATE_RECONNECTED: gTasks[taskId].data[1] = 10; break; - case 11: - switch (sub_80107A0()) + case RFUSTATE_CHILD_TRY_JOIN: + switch (GetJoinGroupStatus()) { case RFU_STATUS_JOIN_GROUP_OK: - Rfu.state = 12; + gRfu.state = RFUSTATE_CHILD_JOINED; break; case RFU_STATUS_JOIN_GROUP_NO: case RFU_STATUS_LEAVE_GROUP: rfu_LMAN_requestChangeAgbClockMaster(); - Rfu.unk_ce4 = 2; + gRfu.disconnectMode = RFU_DISCONNECT_NORMAL; DestroyTask(taskId); break; } break; - case 12: + case RFUSTATE_CHILD_JOINED: { - u8 bmChildSlot = 1 << Rfu.childSlot; - rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, Rfu.childSlot); - rfu_setRecvBuffer(TYPE_UNI, Rfu.childSlot, Rfu.unk_c3f, 70); - rfu_UNI_setSendData(bmChildSlot, Rfu.unk_4c, sizeof(Rfu.unk_4c)); + u8 bmChildSlot = 1 << gRfu.childSlot; + rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, gRfu.childSlot); + rfu_setRecvBuffer(TYPE_UNI, gRfu.childSlot, gRfu.childRecvQueue, sizeof(gRfu.childRecvQueue)); + rfu_UNI_setSendData(bmChildSlot, gRfu.childSendBuffer, sizeof(gRfu.childSendBuffer)); gTasks[taskId].data[1] = 8; DestroyTask(taskId); - if (sRfuDebug.unk_0f == 0) + if (sRfuDebug.childJoinCount == 0) { Debug_PrintEmpty(); - sRfuDebug.unk_0f++; + sRfuDebug.childJoinCount++; } - CreateTask(sub_801084C, 5); + CreateTask(Task_PlayerExchange, 5); break; } } } -static void sub_800EAB4(void) +static void InitChildRecvBuffers(void) { u8 i; u8 acceptSlot = lman.acceptSlot_flag; @@ -421,79 +488,77 @@ static void sub_800EAB4(void) { if (acceptSlot & 1) { - rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], 14); + rfu_setRecvBuffer(TYPE_UNI, i, gRfu.childRecvBuffer[i], sizeof(gRfu.childRecvBuffer[0])); rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, i); } acceptSlot >>= 1; } } -static void sub_800EAFC(void) +static void InitParentSendData(void) { u8 acceptSlot = lman.acceptSlot_flag; - rfu_UNI_setSendData(acceptSlot, Rfu.recvCmds, 70); - Rfu.unk_cda = sub_800E87C(acceptSlot); - Rfu.unk_ce2 = acceptSlot; - sub_800E88C(acceptSlot, -1); - Rfu.parentChild = MODE_PARENT; + rfu_UNI_setSendData(acceptSlot, gRfu.recvCmds, sizeof(gRfu.recvCmds)); + gRfu.parentSendSlot = Rfu_GetIndexOfNewestChild(acceptSlot); + gRfu.parentSlots = acceptSlot; + SetLinkPlayerIdsFromSlots(acceptSlot, -1); + gRfu.parentChild = MODE_PARENT; } -static void Task_LinkRfu_UnionRoomListen(u8 taskId) +#define tConnectingForChat data[7] + +static void Task_UnionRoomListen(u8 taskId) { - if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM) && RfuGetStatus() == RFU_STATUS_NEW_CHILD_DETECTED) + if (GetHostRfuGameData()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM) && RfuGetStatus() == RFU_STATUS_NEW_CHILD_DETECTED) { rfu_REQ_disconnect(lman.acceptSlot_flag); rfu_waitREQComplete(); RfuSetStatus(RFU_STATUS_OK, 0); } - switch (Rfu.state) + switch (gRfu.state) { - case 0: + case RFUSTATE_INIT: rfu_LMAN_initializeRFU(&sRfuReqConfig); - Rfu.state = 1; + gRfu.state = RFUSTATE_INIT_END; gTasks[taskId].data[1] = 1; break; - case 1: + case RFUSTATE_INIT_END: break; - case 17: - rfu_LMAN_establishConnection(2, 0, 240, (u16 *)sAcceptedSerialNos); - rfu_LMAN_setMSCCallback(sub_800ED34); - Rfu.state = 18; + case RFUSTATE_UR_CONNECT: + rfu_LMAN_establishConnection(MODE_P_C_SWITCH, 0, 240, (u16 *)sAcceptedSerialNos); + rfu_LMAN_setMSCCallback(MSCCallback_Child); + gRfu.state = RFUSTATE_UR_CONNECT_END; break; - case 18: + case RFUSTATE_UR_CONNECT_END: break; - case 13: - if (rfu_UNI_setSendData(1 << Rfu.childSlot, Rfu.unk_4c, sizeof(Rfu.unk_4c)) == 0) + case RFUSTATE_UR_PLAYER_EXCHANGE: + if (rfu_UNI_setSendData(1 << gRfu.childSlot, gRfu.childSendBuffer, sizeof(gRfu.childSendBuffer)) == 0) { - Rfu.parentChild = MODE_CHILD; + gRfu.parentChild = MODE_CHILD; DestroyTask(taskId); - if (gTasks[taskId].data[7]) - { - CreateTask(sub_8010D0C, 1); - } + if (gTasks[taskId].tConnectingForChat) + CreateTask(Task_PlayerExchangeChat, 1); else - { - CreateTask(sub_801084C, 5); - } + CreateTask(Task_PlayerExchange, 5); } break; - case 14: - rfu_LMAN_stopManager(0); - Rfu.state = 15; + case RFUSTATE_UR_STOP_MANAGER: + rfu_LMAN_stopManager(FALSE); + gRfu.state = RFUSTATE_UR_STOP_MANAGER_END; break; - case 15: + case RFUSTATE_UR_STOP_MANAGER_END: break; - case 16: - Rfu.unk_cdb = FALSE; - rfu_LMAN_setMSCCallback(sub_800EDBC); + case RFUSTATE_UR_FINALIZE: + gRfu.parentFinished = FALSE; + rfu_LMAN_setMSCCallback(MSCCallback_Parent); UpdateGameData_GroupLockedIn(TRUE); - sub_800EAB4(); - sub_800EAFC(); - Rfu.state = 20; + InitChildRecvBuffers(); + InitParentSendData(); + gRfu.state = RFUSTATE_FINALIZED; gTasks[taskId].data[1] = 8; - Rfu.parentChild = MODE_PARENT; - CreateTask(sub_801084C, 5); - Rfu.unk_ce8 = TRUE; + gRfu.parentChild = MODE_PARENT; + CreateTask(Task_PlayerExchange, 5); + gRfu.playerExchangeActive = TRUE; DestroyTask(taskId); break; } @@ -509,31 +574,32 @@ void LinkRfu_StopManagerBeforeEnteringChat(void) rfu_LMAN_stopManager(FALSE); } -static void sub_800ED34(u16 unused) +// Argument is provided by the RFU and is unused. +static void MSCCallback_Child(u16 REQ_commandID) { s32 i; - for (i = 0; i < (int)ARRAY_COUNT(Rfu.unk_4c); i++) - { - Rfu.unk_4c[i] = 0; - } + for (i = 0; i < COMM_SLOT_LENGTH; i++) + gRfu.childSendBuffer[i] = 0; + rfu_REQ_recvData(); rfu_waitREQComplete(); - if (gRfuSlotStatusUNI[Rfu.childSlot]->recv.newDataFlag) + if (gRfuSlotStatusUNI[gRfu.childSlot]->recv.newDataFlag) { - Rfu.unk_cd0++; - RfuRecvQueue_Enqueue(&Rfu.recvQueue, Rfu.unk_c3f); - sRfuDebug.unk_06++; + gRfu.childSendCount++; + RfuRecvQueue_Enqueue(&gRfu.recvQueue, gRfu.childRecvQueue); + sRfuDebug.recvCount++; UpdateBackupQueue(); - rfu_UNI_readySendData(Rfu.childSlot); - rfu_UNI_clearRecvNewDataFlag(Rfu.childSlot); + rfu_UNI_readySendData(gRfu.childSlot); + rfu_UNI_clearRecvNewDataFlag(gRfu.childSlot); } rfu_LMAN_REQ_sendData(TRUE); } -static void sub_800EDBC(u16 unused) +// Argument is provided by the RFU and is unused. +static void MSCCallback_Parent(u16 REQ_commandID) { - Rfu.unk_cdb = TRUE; + gRfu.parentFinished = TRUE; } void LinkRfu_Shutdown(void) @@ -541,158 +607,156 @@ void LinkRfu_Shutdown(void) u8 i; rfu_LMAN_powerDownRFU(); - if (Rfu.parentChild == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) { - if (FuncIsActiveTask(Task_LinkLeaderSearchForChildren) == TRUE) + // Stop parent searching for children + if (FuncIsActiveTask(Task_ParentSearchForChildren) == TRUE) { - DestroyTask(Rfu.searchTaskId); + DestroyTask(gRfu.searchTaskId); ResetLinkRfuGFLayer(); } } - else if (Rfu.parentChild == MODE_CHILD) + else if (gRfu.parentChild == MODE_CHILD) { - if (FuncIsActiveTask(Task_JoinGroupSearchForParent) == TRUE) + // Stop child searching for parent + if (FuncIsActiveTask(Task_ChildSearchForParent) == TRUE) { - DestroyTask(Rfu.searchTaskId); + DestroyTask(gRfu.searchTaskId); ResetLinkRfuGFLayer(); } } - else if (Rfu.parentChild == 2) + else if (gRfu.parentChild == MODE_P_C_SWITCH) { - if (FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE) + // Stop parent-child switching mode (union room) + if (FuncIsActiveTask(Task_UnionRoomListen) == TRUE) { - DestroyTask(Rfu.searchTaskId); + DestroyTask(gRfu.searchTaskId); ResetLinkRfuGFLayer(); } } - for (i = 0; i < ARRAY_COUNT(sUnknown_082ED7E0); i++) + + // Destroy additional tasks + for (i = 0; i < ARRAY_COUNT(sShutdownTasks); i++) { - if (FuncIsActiveTask(sUnknown_082ED7E0[i]) == TRUE) - { - DestroyTask(FindTaskIdByFunc(sUnknown_082ED7E0[i])); - } + if (FuncIsActiveTask(sShutdownTasks[i]) == TRUE) + DestroyTask(FindTaskIdByFunc(sShutdownTasks[i])); } } -static void CreateTask_LinkLeaderSearchForChildren(void) +static void CreateTask_ParentSearchForChildren(void) { - Rfu.searchTaskId = CreateTask(Task_LinkLeaderSearchForChildren, 1); + gRfu.searchTaskId = CreateTask(Task_ParentSearchForChildren, 1); } -static bool8 sub_800EE94(void) +// If no parent ID (or if child connection not ready) can't reconnect with parent yet +static bool8 CanTryReconnectParent(void) { - if (Rfu.state == 7 && Rfu.parentId) + if (gRfu.state == RFUSTATE_CHILD_CONNECT_END && gRfu.parentId) + return TRUE; + return FALSE; +} + +static bool32 TryReconnectParent(void) +{ + if (gRfu.state == RFUSTATE_CHILD_CONNECT_END && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[gRfu.reconnectParentId].id, 240)) { + gRfu.state = RFUSTATE_RECONNECTED; return TRUE; } return FALSE; } -static bool32 IsParentSuccessfullyReconnected(void) +static void CreateTask_ChildSearchForParent(void) { - if (Rfu.state == 7 && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[Rfu.unk_c3d].id, 240)) - { - Rfu.state = 9; - return TRUE; - } - return FALSE; -} - -static void CreateTask_JoinGroupSearchForParent(void) -{ - Rfu.searchTaskId = CreateTask(Task_JoinGroupSearchForParent, 1); + gRfu.searchTaskId = CreateTask(Task_ChildSearchForParent, 1); } bool8 LmanAcceptSlotFlagIsNotZero(void) { if (lman.acceptSlot_flag) - { return TRUE; - } return FALSE; } void LinkRfu_StopManagerAndFinalizeSlots(void) { - Rfu.state = 4; - Rfu.acceptSlot_flag = lman.acceptSlot_flag; + gRfu.state = RFUSTATE_STOP_MANAGER; + gRfu.acceptSlot_flag = lman.acceptSlot_flag; } bool32 WaitRfuState(bool32 force) { - if (Rfu.state == 17 || force) + if (gRfu.state == RFUSTATE_PARENT_FINALIZE_START || force) { - Rfu.state = 18; + gRfu.state = RFUSTATE_PARENT_FINALIZE; return TRUE; } return FALSE; } -void sub_800EF7C(void) +void StopUnionRoomLinkManager(void) { - Rfu.state = 14; + gRfu.state = RFUSTATE_UR_STOP_MANAGER; } -static void sub_800EF88(u8 a0) +// Unused +static void ReadySendDataForSlots(u8 slots) { u8 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (a0 & 1) + if (slots & 1) { rfu_UNI_readySendData(i); break; } - a0 >>= 1; + slots >>= 1; } } -static void sub_800EFB0(void) +static void ReadAllPlayerRecvCmds(void) { s32 i, j; - for (i = 0; i < 5; i++) + for (i = 0; i < MAX_RFU_PLAYERS; i++) { - struct GFRfuManager *ptr = &Rfu; - for (j = 0; j < 7; j++) + struct RfuManager *rfu = &gRfu; + for (j = 0; j < CMD_LENGTH - 1; j++) { - ptr->recvCmds[i][j][1] = gRecvCmds[i][j] >> 8; - ptr->recvCmds[i][j][0] = gRecvCmds[i][j]; + rfu->recvCmds[i][j][1] = gRecvCmds[i][j] >> 8; + rfu->recvCmds[i][j][0] = gRecvCmds[i][j]; } } CpuFill16(0, gRecvCmds, sizeof gRecvCmds); } -static void sub_800F014(void) +static void MoveSendCmdToRecv(void) { s32 i; for (i = 0; i < CMD_LENGTH - 1; i++) - { gRecvCmds[0][i] = gSendCmd[i]; - } + for (i = 0; i < CMD_LENGTH - 1; i++) - { gSendCmd[i] = 0; - } } static void UpdateBackupQueue(void) { - if (Rfu.linkRecovered) + if (gRfu.linkRecovered) { - bool8 backupEmpty = RfuBackupQueue_Dequeue(&Rfu.backupQueue, Rfu.unk_4c); + bool8 backupEmpty = RfuBackupQueue_Dequeue(&gRfu.backupQueue, gRfu.childSendBuffer); - if (Rfu.backupQueue.count == 0) - Rfu.linkRecovered = FALSE; + if (gRfu.backupQueue.count == 0) + gRfu.linkRecovered = FALSE; if (backupEmpty) return; } - if (!Rfu.linkRecovered) + if (!gRfu.linkRecovered) { - RfuSendQueue_Dequeue(&Rfu.sendQueue, Rfu.unk_4c); - RfuBackupQueue_Enqueue(&Rfu.backupQueue, Rfu.unk_4c); + RfuSendQueue_Dequeue(&gRfu.sendQueue, gRfu.childSendBuffer); + RfuBackupQueue_Enqueue(&gRfu.backupQueue, gRfu.childSendBuffer); } } @@ -701,26 +765,20 @@ bool32 IsRfuRecvQueueEmpty(void) s32 i; s32 j; - if (gRfuLinkStatus->sendSlotUNIFlag == 0) - { + if (!gRfuLinkStatus->sendSlotUNIFlag) return FALSE; - } + for (i = 0; i < MAX_RFU_PLAYERS; i++) - { for (j = 0; j < CMD_LENGTH - 1; j++) - { if (gRecvCmds[i][j] != 0) - { return FALSE; - } - } - } + return TRUE; } -static bool32 sub_800F0F8(void) +static bool32 RfuMain1_Parent(void) { - if (Rfu.state < 20) + if (gRfu.state < RFUSTATE_FINALIZED) { rfu_REQ_recvData(); rfu_waitREQComplete(); @@ -728,19 +786,19 @@ static bool32 sub_800F0F8(void) } else { - Rfu.unk_cdb = FALSE; - if ((Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag) == Rfu.unk_ce2 && (Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag)) + gRfu.parentFinished = FALSE; + if ((gRfu.parentSlots & gRfuLinkStatus->connSlotFlag) == gRfu.parentSlots && (gRfu.parentSlots & gRfuLinkStatus->connSlotFlag)) { - if (!Rfu.unk_cdc) + if (!gRfu.parentMain2Failed) { - if (Rfu.unk_ce3) + if (gRfu.disconnectSlots) { - RfuReqDisconnectSlot(Rfu.unk_ce3); - Rfu.unk_ce3 = 0; - if (Rfu.unk_ce4 == 1) + RfuReqDisconnectSlot(gRfu.disconnectSlots); + gRfu.disconnectSlots = 0; + if (gRfu.disconnectMode == RFU_DISCONNECT_ERROR) { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x8000); - GetLinkmanErrorParams(0x8000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_8); + RfuSetErrorParams(F_RFU_ERROR_8); return FALSE; } if (!lman.acceptSlot_flag) @@ -750,67 +808,65 @@ static bool32 sub_800F0F8(void) return FALSE; } } - sub_800EFB0(); - rfu_UNI_readySendData(Rfu.unk_cda); + ReadAllPlayerRecvCmds(); + rfu_UNI_readySendData(gRfu.parentSendSlot); rfu_LMAN_REQ_sendData(TRUE); } else { rfu_REQ_PARENT_resumeRetransmitAndChange(); } - Rfu.unk_0e = TRUE; + gRfu.runParentMain2 = TRUE; } } return FALSE; } -static bool32 sub_800F1E0(void) +static bool32 RfuMain2_Parent(void) { u16 i; u16 flags; u8 r0; u16 j; - u8 retval; + bool8 failed; - if (Rfu.state >= 20 && Rfu.unk_0e == TRUE) + if (gRfu.state >= RFUSTATE_FINALIZED && gRfu.runParentMain2 == TRUE) { rfu_waitREQComplete(); - while (Rfu.unk_cdb == FALSE) + while (gRfu.parentFinished == FALSE) { - if (Rfu.errorState != 0) - { + if (gRfu.errorState != RFU_ERROR_STATE_NONE) return FALSE; - } } rfu_REQ_recvData(); rfu_waitREQComplete(); - if ((lman.parentAck_flag & Rfu.unk_ce2) == Rfu.unk_ce2) + if ((lman.parentAck_flag & gRfu.parentSlots) == gRfu.parentSlots) { - Rfu.unk_cdc = FALSE; - sRfuDebug.unk_06++; + gRfu.parentMain2Failed = FALSE; + sRfuDebug.recvCount++; flags = lman.acceptSlot_flag; for (i = 0; i < RFU_CHILD_MAX; i++) { if (flags & 1) { - if (Rfu.unk_14[i][1]) + if (gRfu.childRecvBuffer[i][1]) { - if (Rfu.unk_cee[i] != 0xFF && (Rfu.unk_14[i][0] >> 5) != ((Rfu.unk_cee[i] + 1) & 7)) + if (gRfu.childRecvIds[i] != 0xFF && (gRfu.childRecvBuffer[i][0] >> 5) != ((gRfu.childRecvIds[i] + 1) & 7)) { - if (++Rfu.unk_cea[i] > 4) - GetLinkmanErrorParams(0x8100); + if (++gRfu.numChildRecvErrors[i] > 4) + RfuSetErrorParams(F_RFU_ERROR_8 | F_RFU_ERROR_1); } else { - Rfu.unk_cee[i] = Rfu.unk_14[i][0] / 32; - Rfu.unk_cea[i] = 0; - Rfu.unk_14[i][0] &= 0x1f; - r0 = Rfu.linkPlayerIdx[i]; - for (j = 0; j < 7; j++) + gRfu.childRecvIds[i] = gRfu.childRecvBuffer[i][0] / 32; + gRfu.numChildRecvErrors[i] = 0; + gRfu.childRecvBuffer[i][0] &= 0x1f; + r0 = gRfu.linkPlayerIdx[i]; + for (j = 0; j < CMD_LENGTH - 1; j++) { - gRecvCmds[r0][j] = (Rfu.unk_14[i][(j << 1) + 1] << 8) | Rfu.unk_14[i][(j << 1) + 0]; - Rfu.unk_14[i][(j << 1) + 1] = 0; - Rfu.unk_14[i][(j << 1) + 0] = 0; + gRecvCmds[r0][j] = (gRfu.childRecvBuffer[i][(j << 1) + 1] << 8) | gRfu.childRecvBuffer[i][(j << 1) + 0]; + gRfu.childRecvBuffer[i][(j << 1) + 1] = 0; + gRfu.childRecvBuffer[i][(j << 1) + 0] = 0; } } } @@ -818,102 +874,99 @@ static bool32 sub_800F1E0(void) } flags >>= 1; } - sub_800F014(); + MoveSendCmdToRecv(); RfuHandleReceiveCommand(0); CallRfuFunc(); - if (Rfu.unk_ce5 && !Rfu.unk_cd9) + if (gRfu.nextChildBits && !gRfu.stopNewConnections) { - sRfuDebug.unk_0e = FALSE; - rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, Rfu.unk_cda); + sRfuDebug.unkFlag = FALSE; + rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, gRfu.parentSendSlot); for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((Rfu.unk_ce5 >> i) & 1) - { - rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], 14); - } + if ((gRfu.nextChildBits >> i) & 1) + rfu_setRecvBuffer(TYPE_UNI, i, gRfu.childRecvBuffer[i], sizeof(gRfu.childRecvBuffer[0])); } - sub_800E88C(Rfu.unk_ce2, Rfu.unk_ce2 | Rfu.unk_ce5); - Rfu.unk_ce9 = Rfu.unk_ce5; - Rfu.unk_ce2 |= Rfu.unk_ce5; - Rfu.unk_ce5 = 0; - rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.recvCmds, 70); - Rfu.unk_cda = sub_800E87C(Rfu.unk_ce2); - CreateTask(Task_ExchangeLinkPlayers, 0); + SetLinkPlayerIdsFromSlots(gRfu.parentSlots, gRfu.parentSlots | gRfu.nextChildBits); + gRfu.incomingChild = gRfu.nextChildBits; + gRfu.parentSlots |= gRfu.nextChildBits; + gRfu.nextChildBits = 0; + rfu_UNI_setSendData(gRfu.parentSlots, gRfu.recvCmds, sizeof(gRfu.recvCmds)); + gRfu.parentSendSlot = Rfu_GetIndexOfNewestChild(gRfu.parentSlots); + CreateTask(Task_PlayerExchangeUpdate, 0); } } else { - Rfu.unk_cdc = TRUE; - Rfu.unk_0e = FALSE; + gRfu.parentMain2Failed = TRUE; + gRfu.runParentMain2 = FALSE; } - Rfu.unk_0e = FALSE; + gRfu.runParentMain2 = FALSE; } - retval = Rfu.unk_cdc; - return gRfuLinkStatus->sendSlotUNIFlag ? retval & 1 : FALSE; + failed = gRfu.parentMain2Failed; + return gRfuLinkStatus->sendSlotUNIFlag ? failed & 1 : FALSE; } -static void sub_800F498(u16 *a0, u8 *a1) +static void ChildBuildSendCmd(u16 *sendCmd, u8 *dst) { s32 i; - if (a0[0]) + if (sendCmd[0]) { - a0[0] |= (Rfu.unk_102 << 5); - Rfu.unk_102 = (Rfu.unk_102 + 1) & 7; - for (i = 0; i < 7; i++) + sendCmd[0] |= (gRfu.childSendCmdId << 5); + gRfu.childSendCmdId = (gRfu.childSendCmdId + 1) & 7; + for (i = 0; i < CMD_LENGTH - 1; i++) { - a1[2 * i + 1] = a0[i] >> 8; - a1[2 * i + 0] = a0[i]; + dst[2 * i + 1] = sendCmd[i] >> 8; + dst[2 * i + 0] = sendCmd[i]; } } else { - for (i = 0; i < 14; i++) - a1[i] = 0; + for (i = 0; i < COMM_SLOT_LENGTH; i++) + dst[i] = 0; } } -static bool32 RfuProcessEnqueuedRecvBlock(void) +static bool32 RfuMain1_Child(void) { u8 i; u8 j; - u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))]; - u8 sp48[2 * (CMD_LENGTH - 1)]; + u8 recv[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))]; + u8 send[2 * (CMD_LENGTH - 1)]; u8 status; - RfuRecvQueue_Dequeue(&Rfu.recvQueue, sp00); + RfuRecvQueue_Dequeue(&gRfu.recvQueue, recv); for (i = 0; i < MAX_RFU_PLAYERS; i++) { for (j = 0; j < CMD_LENGTH - 1; j++) - { - gRecvCmds[i][j] = (sp00[i * 14 + (j << 1) + 1] << 8) | sp00[i * 14 + (j << 1) + 0]; - } + gRecvCmds[i][j] = (recv[i * COMM_SLOT_LENGTH + (j * 2) + 1] << 8) + | recv[i * COMM_SLOT_LENGTH + (j * 2) + 0]; } RfuHandleReceiveCommand(0); - if (lman.childClockSlave_flag == 0 && Rfu.unk_ce4) + if (lman.childClockSlave_flag == 0 && gRfu.disconnectMode != RFU_DISCONNECT_NONE) { rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); status = RfuGetStatus(); if (status != RFU_STATUS_FATAL_ERROR && status != RFU_STATUS_JOIN_GROUP_NO && status != RFU_STATUS_LEAVE_GROUP) - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x9000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_8); rfu_clearAllSlot(); gReceivedRemoteLinkPlayers = FALSE; - Rfu.callback = NULL; - if (Rfu.unk_ce4 == 1) + gRfu.callback = NULL; + if (gRfu.disconnectMode == RFU_DISCONNECT_ERROR) { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x9000); - GetLinkmanErrorParams(0x9000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_8); + RfuSetErrorParams(F_RFU_ERROR_5 | F_RFU_ERROR_8); } lman.state = lman.next_state = 0; - Rfu.unk_ce4 = 0; + gRfu.disconnectMode = RFU_DISCONNECT_NONE; } - if (Rfu.unk_cd0) + if (gRfu.childSendCount) { - Rfu.unk_cd0--; + gRfu.childSendCount--; CallRfuFunc(); - sub_800F498(gSendCmd, sp48); - RfuSendQueue_Enqueue(&Rfu.sendQueue, sp48); + ChildBuildSendCmd(gSendCmd, send); + RfuSendQueue_Enqueue(&gRfu.sendQueue, send); for (i = 0; i < CMD_LENGTH - 1; i++) gSendCmd[i] = 0; } @@ -924,25 +977,26 @@ static void HandleSendFailure(u8 unused, u32 flags) { s32 i, j, temp; - const u8 *r10 = Rfu.sendBlock.payload; - for (i = 0; i < Rfu.sendBlock.count; i++) + const u8 *payload = gRfu.sendBlock.payload; + for (i = 0; i < gRfu.sendBlock.count; i++) { if (!(flags & 1)) { - sResendBlock16[0] = RFUCMD_0x8900 | i; - for (j = 0; j < 7; j++) + sResendBlock16[0] = RFUCMD_SEND_BLOCK | i; + for (j = 0; j < CMD_LENGTH - 1; j++) { - temp = j << 1; - sResendBlock16[j + 1] = (r10[12 * i + temp + 1] << 8) | r10[12 * i + temp + 0]; + temp = j * 2; + sResendBlock16[j + 1] = (payload[(COMM_SLOT_LENGTH - 2) * i + temp + 1] << 8) + | payload[(COMM_SLOT_LENGTH - 2) * i + temp + 0]; } - for (j = 0; j < 7; j++) + for (j = 0; j < CMD_LENGTH - 1; j++) { - temp = j << 1; + temp = j * 2; sResendBlock8[temp + 1] = sResendBlock16[j] >> 8; sResendBlock8[temp + 0] = sResendBlock16[j]; } - RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8); - Rfu.sendBlock.failedFlags |= (1 << i); + RfuSendQueue_Enqueue(&gRfu.sendQueue, sResendBlock8); + gRfu.sendBlock.failedFlags |= (1 << i); } flags >>= 1; } @@ -950,32 +1004,30 @@ static void HandleSendFailure(u8 unused, u32 flags) void Rfu_SetBlockReceivedFlag(u8 linkPlayerId) { - if (Rfu.parentChild == MODE_PARENT && linkPlayerId) - Rfu.numBlocksReceived[linkPlayerId] = 1; + if (gRfu.parentChild == MODE_PARENT && linkPlayerId) + gRfu.numBlocksReceived[linkPlayerId] = 1; else - Rfu.blockReceived[linkPlayerId] = TRUE; + gRfu.blockReceived[linkPlayerId] = TRUE; } void Rfu_ResetBlockReceivedFlag(u8 linkPlayerId) { - Rfu.blockReceived[linkPlayerId] = FALSE; - Rfu.recvBlock[linkPlayerId].receiving = 0; + gRfu.blockReceived[linkPlayerId] = FALSE; + gRfu.recvBlock[linkPlayerId].receiving = RECV_STATE_READY; } -static u8 sub_800F74C(const u8 *a0) +static u8 LoadLinkPlayerIds(const u8 *ids) { u8 i; - - if (Rfu.parentChild == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) return FALSE; for (i = 0; i < RFU_CHILD_MAX; i++) - { - Rfu.linkPlayerIdx[i] = a0[i]; - } - return a0[Rfu.childSlot]; + gRfu.linkPlayerIdx[i] = ids[i]; + + return ids[gRfu.childSlot]; } -static void RfuFunc_SendKeysToRfu(void) +static void SendKeysToRfu(void) { if (gReceivedRemoteLinkPlayers && gHeldKeyCodeToSend != LINK_KEY_CODE_NULL @@ -987,24 +1039,24 @@ static void RfuFunc_SendKeysToRfu(void) } } -struct GFtgtGname *GetHostRFUtgtGname(void) +struct RfuGameData *GetHostRfuGameData(void) { - return &gHostRFUtgtGnameBuffer; + return &gHostRfuGameData; } bool32 IsSendingKeysToRfu(void) { - return Rfu.callback == RfuFunc_SendKeysToRfu; + return gRfu.callback == SendKeysToRfu; } void StartSendingKeysToRfu(void) { - Rfu.callback = RfuFunc_SendKeysToRfu; + gRfu.callback = SendKeysToRfu; } void ClearLinkRfuCallback(void) { - Rfu.callback = NULL; + gRfu.callback = NULL; } static void Rfu_BerryBlenderSendHeldKeys(void) @@ -1017,8 +1069,8 @@ static void Rfu_BerryBlenderSendHeldKeys(void) void Rfu_SetBerryBlenderLinkCallback(void) { - if (Rfu.callback == NULL) - Rfu.callback = Rfu_BerryBlenderSendHeldKeys; + if (gRfu.callback == NULL) + gRfu.callback = Rfu_BerryBlenderSendHeldKeys; } static void RfuHandleReceiveCommand(u8 unused) @@ -1028,42 +1080,42 @@ static void RfuHandleReceiveCommand(u8 unused) for (i = 0; i < MAX_RFU_PLAYERS; i++) { - switch (gRecvCmds[i][0] & 0xff00) + switch (gRecvCmds[i][0] & RFUCMD_MASK) { - case RFUCMD_0x7800: - if (Rfu.parentChild == MODE_CHILD && gReceivedRemoteLinkPlayers) + case RFUCMD_SEND_PLAYER_IDS_NEW: + if (gRfu.parentChild == MODE_CHILD && gReceivedRemoteLinkPlayers) return; // fallthrough - case RFUCMD_0x7700: + case RFUCMD_SEND_PLAYER_IDS: if (gRfuLinkStatus->parentChild == MODE_CHILD) { - Rfu.playerCount = gRecvCmds[i][1]; - Rfu.multiplayerId = sub_800F74C((u8 *)(gRecvCmds[i] + 2)); + gRfu.playerCount = gRecvCmds[i][1]; + gRfu.multiplayerId = LoadLinkPlayerIds((u8 *)(gRecvCmds[i] + 2)); } break; - case RFUCMD_0x8800: - if (Rfu.recvBlock[i].receiving == 0) + case RFUCMD_SEND_BLOCK_INIT: + if (gRfu.recvBlock[i].receiving == RECV_STATE_READY) { - Rfu.recvBlock[i].next = 0; - Rfu.recvBlock[i].count = gRecvCmds[i][1]; - Rfu.recvBlock[i].owner = gRecvCmds[i][2]; - Rfu.recvBlock[i].receivedFlags = 0; - Rfu.recvBlock[i].receiving = 1; - Rfu.blockReceived[i] = FALSE; + gRfu.recvBlock[i].next = 0; + gRfu.recvBlock[i].count = gRecvCmds[i][1]; + gRfu.recvBlock[i].owner = gRecvCmds[i][2]; + gRfu.recvBlock[i].receivedFlags = 0; + gRfu.recvBlock[i].receiving = RECV_STATE_RECEIVING; + gRfu.blockReceived[i] = FALSE; } break; - case RFUCMD_0x8900: - if (Rfu.recvBlock[i].receiving == 1) + case RFUCMD_SEND_BLOCK: + if (gRfu.recvBlock[i].receiving == RECV_STATE_RECEIVING) { - Rfu.recvBlock[i].next = gRecvCmds[i][0] & 0xff; - Rfu.recvBlock[i].receivedFlags |= (1 << Rfu.recvBlock[i].next); + gRfu.recvBlock[i].next = gRecvCmds[i][0] & 0xff; + gRfu.recvBlock[i].receivedFlags |= (1 << gRfu.recvBlock[i].next); for (j = 0; j < 6; j++) - gBlockRecvBuffer[i][Rfu.recvBlock[i].next * 6 + j] = gRecvCmds[i][j + 1]; - if (Rfu.recvBlock[i].receivedFlags == sAllBlocksReceived[Rfu.recvBlock[i].count]) + gBlockRecvBuffer[i][gRfu.recvBlock[i].next * 6 + j] = gRecvCmds[i][j + 1]; + if (gRfu.recvBlock[i].receivedFlags == sAllBlocksReceived[gRfu.recvBlock[i].count]) { - Rfu.recvBlock[i].receiving = 2; + gRfu.recvBlock[i].receiving = RECV_STATE_FINISHED; Rfu_SetBlockReceivedFlag(i); - if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && gReceivedRemoteLinkPlayers != 0 && Rfu.parentChild == MODE_CHILD) + if (GetHostRfuGameData()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && gReceivedRemoteLinkPlayers != 0 && gRfu.parentChild == MODE_CHILD) ValidateAndReceivePokemonSioInfo(gBlockRecvBuffer); } } @@ -1072,40 +1124,42 @@ static void RfuHandleReceiveCommand(u8 unused) Rfu_InitBlockSend(sBlockRequests[gRecvCmds[i][1]].address, (u16)sBlockRequests[gRecvCmds[i][1]].size); break; case RFUCMD_READY_CLOSE_LINK: - Rfu.readyCloseLink[i] = TRUE; + gRfu.readyCloseLink[i] = TRUE; break; case RFUCMD_READY_EXIT_STANDBY: - if (Rfu.unk_100 == gRecvCmds[i][1]) - Rfu.readyExitStandby[i] = TRUE; + if (gRfu.allReadyNum == gRecvCmds[i][1]) + gRfu.readyExitStandby[i] = TRUE; break; - case RFUCMD_0xED00: - if (Rfu.parentChild == MODE_CHILD) + case RFUCMD_DISCONNECT: + if (gRfu.parentChild == MODE_CHILD) { + // Disconnect child if (gReceivedRemoteLinkPlayers) { if (gRecvCmds[i][1] & gRfuLinkStatus->connSlotFlag) { gReceivedRemoteLinkPlayers = 0; rfu_LMAN_requestChangeAgbClockMaster(); - Rfu.unk_ce4 = gRecvCmds[i][2]; + gRfu.disconnectMode = gRecvCmds[i][2]; } - Rfu.playerCount = gRecvCmds[i][3]; + gRfu.playerCount = gRecvCmds[i][3]; ClearSelectedLinkPlayerIds(gRecvCmds[i][1]); } } else { - RfuPrepareSendBuffer(RFUCMD_0xEE00); + // Disconnect parent + RfuPrepareSendBuffer(RFUCMD_DISCONNECT_PARENT); gSendCmd[1] = gRecvCmds[i][1]; gSendCmd[2] = gRecvCmds[i][2]; gSendCmd[3] = gRecvCmds[i][3]; } break; - case RFUCMD_0xEE00: - if (Rfu.parentChild == MODE_PARENT) + case RFUCMD_DISCONNECT_PARENT: + if (gRfu.parentChild == MODE_PARENT) { - Rfu.unk_ce3 |= gRecvCmds[i][1]; - Rfu.unk_ce4 = gRecvCmds[i][2]; + gRfu.disconnectSlots |= gRecvCmds[i][1]; + gRfu.disconnectMode = gRecvCmds[i][2]; ClearSelectedLinkPlayerIds(gRecvCmds[i][1]); } break; @@ -1114,38 +1168,38 @@ static void RfuHandleReceiveCommand(u8 unused) gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; break; } - if (Rfu.parentChild == MODE_PARENT && Rfu.numBlocksReceived[i]) + if (gRfu.parentChild == MODE_PARENT && gRfu.numBlocksReceived[i]) { - if (Rfu.numBlocksReceived[i] == 4) + if (gRfu.numBlocksReceived[i] == 4) { - Rfu.blockReceived[i] = TRUE; - Rfu.numBlocksReceived[i] = 0; + gRfu.blockReceived[i] = TRUE; + gRfu.numBlocksReceived[i] = 0; } else - Rfu.numBlocksReceived[i]++; + gRfu.numBlocksReceived[i]++; } } } -static bool8 AreNoPlayersReceiving(void) +static bool8 AreAllPlayersReadyToReceive(void) { s32 i; for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (Rfu.recvBlock[i].receiving) + if (gRfu.recvBlock[i].receiving != RECV_STATE_READY) return FALSE; } return TRUE; } -static bool8 sub_800FC88(void) +static bool8 AreAllPlayersFinishedReceiving(void) { s32 i; - for (i = 0; i < Rfu.playerCount; i++) + for (i = 0; i < gRfu.playerCount; i++) { - if (Rfu.recvBlock[i].receiving != 2 || Rfu.blockReceived[i] != TRUE) + if (gRfu.recvBlock[i].receiving != RECV_STATE_FINISHED || gRfu.blockReceived[i] != TRUE) return FALSE; } return TRUE; @@ -1159,7 +1213,7 @@ static void ResetSendDataManager(struct RfuBlockSend *data) data->receivedFlags = 0; data->sending = FALSE; data->owner = 0; - data->receiving = 0; + data->receiving = RECV_STATE_READY; } u8 Rfu_GetBlockReceivedStatus(void) @@ -1169,10 +1223,8 @@ u8 Rfu_GetBlockReceivedStatus(void) for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (Rfu.recvBlock[i].receiving == 2 && Rfu.blockReceived[i] == TRUE) - { + if (gRfu.recvBlock[i].receiving == RECV_STATE_FINISHED && gRfu.blockReceived[i] == TRUE) flags |= (1 << i); - } } return flags; } @@ -1186,26 +1238,26 @@ static void RfuPrepareSendBuffer(u16 command) gSendCmd[0] = command; switch (command) { - case RFUCMD_0x8800: - gSendCmd[1] = Rfu.sendBlock.count; - gSendCmd[2] = Rfu.sendBlock.owner + 0x80; + case RFUCMD_SEND_BLOCK_INIT: + gSendCmd[1] = gRfu.sendBlock.count; + gSendCmd[2] = gRfu.sendBlock.owner + 0x80; break; case RFUCMD_SEND_BLOCK_REQ: - if (AreNoPlayersReceiving()) - gSendCmd[1] = Rfu.blockRequestType; + if (AreAllPlayersReadyToReceive()) + gSendCmd[1] = gRfu.blockRequestType; break; - case RFUCMD_0x7700: - case RFUCMD_0x7800: - tmp = Rfu.unk_ce2 ^ Rfu.unk_ce3; - Rfu.playerCount = sUnknown_082ED695[tmp] + 1; - gSendCmd[1] = Rfu.playerCount; - buff = (u8 *)(gSendCmd + 2); + case RFUCMD_SEND_PLAYER_IDS: + case RFUCMD_SEND_PLAYER_IDS_NEW: + tmp = gRfu.parentSlots ^ gRfu.disconnectSlots; + gRfu.playerCount = sPlayerBitsToCount[tmp] + 1; + gSendCmd[1] = gRfu.playerCount; + buff = (u8 *)&gSendCmd[2]; for (i = 0; i < RFU_CHILD_MAX; i++) - buff[i] = Rfu.linkPlayerIdx[i]; + buff[i] = gRfu.linkPlayerIdx[i]; break; case RFUCMD_READY_EXIT_STANDBY: case RFUCMD_READY_CLOSE_LINK: - gSendCmd[1] = Rfu.unk_100; + gSendCmd[1] = gRfu.allReadyNum; break; case RFUCMD_BLENDER_SEND_KEYS: gSendCmd[0] = command; @@ -1213,14 +1265,13 @@ static void RfuPrepareSendBuffer(u16 command) break; case RFUCMD_SEND_PACKET: for (i = 0; i < RFU_PACKET_SIZE; i++) - gSendCmd[1 + i] = Rfu.packet[i]; + gSendCmd[1 + i] = gRfu.packet[i]; break; case RFUCMD_SEND_HELD_KEYS: gSendCmd[1] = gHeldKeyCodeToSend; break; - case RFUCMD_0xEE00: - break; - case RFUCMD_0xED00: + case RFUCMD_DISCONNECT_PARENT: + case RFUCMD_DISCONNECT: break; } } @@ -1229,7 +1280,7 @@ void Rfu_SendPacket(void *data) { if (gSendCmd[0] == 0 && !RfuHasErrored()) { - memcpy(Rfu.packet, data, sizeof(Rfu.packet)); + memcpy(gRfu.packet, data, sizeof(gRfu.packet)); RfuPrepareSendBuffer(RFUCMD_SEND_PACKET); } } @@ -1237,31 +1288,31 @@ void Rfu_SendPacket(void *data) bool32 Rfu_InitBlockSend(const u8 *src, size_t size) { bool8 r4; - if (Rfu.callback != NULL) + if (gRfu.callback != NULL) return FALSE; if (gSendCmd[0] != 0) return FALSE; - if (Rfu.sendBlock.sending) + if (gRfu.sendBlock.sending) { - sRfuDebug.unk_83++; + sRfuDebug.blockSendTime++; return FALSE; } r4 = (size % 12) != 0; - Rfu.sendBlock.owner = GetMultiplayerId(); - Rfu.sendBlock.sending = TRUE; - Rfu.sendBlock.count = (size / 12) + r4; - Rfu.sendBlock.next = 0; - if (size > 0x100) - Rfu.sendBlock.payload = src; + gRfu.sendBlock.owner = GetMultiplayerId(); + gRfu.sendBlock.sending = TRUE; + gRfu.sendBlock.count = (size / 12) + r4; + gRfu.sendBlock.next = 0; + if (size > BLOCK_BUFFER_SIZE) + gRfu.sendBlock.payload = src; else { if (src != gBlockSendBuffer) memcpy(gBlockSendBuffer, src, size); - Rfu.sendBlock.payload = gBlockSendBuffer; + gRfu.sendBlock.payload = gBlockSendBuffer; } - RfuPrepareSendBuffer(RFUCMD_0x8800); - Rfu.callback = HandleBlockSend; - Rfu.unk_5b = 0; + RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_INIT); + gRfu.callback = HandleBlockSend; + gRfu.blockSendAttempts = 0; return TRUE; } @@ -1269,16 +1320,16 @@ static void HandleBlockSend(void) { if (gSendCmd[0] == 0) { - RfuPrepareSendBuffer(RFUCMD_0x8800); - if (Rfu.parentChild == MODE_PARENT) + RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_INIT); + if (gRfu.parentChild == MODE_PARENT) { - if (++Rfu.unk_5b > 2) - Rfu.callback = SendNextBlock; + if (++gRfu.blockSendAttempts > 2) + gRfu.callback = SendNextBlock; } else { - if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == RFUCMD_0x8800) - Rfu.callback = SendNextBlock; + if ((gRecvCmds[GetMultiplayerId()][0] & RFUCMD_MASK) == RFUCMD_SEND_BLOCK_INIT) + gRfu.callback = SendNextBlock; } } } @@ -1286,126 +1337,134 @@ static void HandleBlockSend(void) static void SendNextBlock(void) { s32 i; - const u8 *src = Rfu.sendBlock.payload; - gSendCmd[0] = RFUCMD_0x8900 | Rfu.sendBlock.next; + const u8 *src = gRfu.sendBlock.payload; + gSendCmd[0] = RFUCMD_SEND_BLOCK | gRfu.sendBlock.next; for (i = 0; i < CMD_LENGTH - 1; i++) - gSendCmd[i + 1] = (src[(i << 1) + Rfu.sendBlock.next * 12 + 1] << 8) | src[(i << 1) + Rfu.sendBlock.next * 12 + 0]; - Rfu.sendBlock.next++; - if (Rfu.sendBlock.count <= Rfu.sendBlock.next) + gSendCmd[i + 1] = (src[(i << 1) + gRfu.sendBlock.next * 12 + 1] << 8) | src[(i << 1) + gRfu.sendBlock.next * 12 + 0]; + gRfu.sendBlock.next++; + if (gRfu.sendBlock.count <= gRfu.sendBlock.next) { - Rfu.sendBlock.sending = FALSE; - Rfu.callback = SendLastBlock; + gRfu.sendBlock.sending = FALSE; + gRfu.callback = SendLastBlock; } } static void SendLastBlock(void) { - const u8 *src = Rfu.sendBlock.payload; + const u8 *src = gRfu.sendBlock.payload; u8 mpId = GetMultiplayerId(); s32 i; - if (Rfu.parentChild == MODE_CHILD) + if (gRfu.parentChild == MODE_CHILD) { - gSendCmd[0] = RFUCMD_0x8900 | (Rfu.sendBlock.count - 1); + gSendCmd[0] = RFUCMD_SEND_BLOCK | (gRfu.sendBlock.count - 1); for (i = 0; i < CMD_LENGTH - 1; i++) - gSendCmd[i + 1] = (src[(i << 1) + (Rfu.sendBlock.count - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.sendBlock.count - 1) * 12 + 0]; - if ((u8)gRecvCmds[mpId][0] == Rfu.sendBlock.count - 1) + gSendCmd[i + 1] = (src[(i << 1) + (gRfu.sendBlock.count - 1) * 12 + 1] << 8) | src[(i << 1) + (gRfu.sendBlock.count - 1) * 12 + 0]; + if ((u8)gRecvCmds[mpId][0] == gRfu.sendBlock.count - 1) { - if (Rfu.recvBlock[mpId].receivedFlags != sAllBlocksReceived[Rfu.recvBlock[mpId].count]) + if (gRfu.recvBlock[mpId].receivedFlags != sAllBlocksReceived[gRfu.recvBlock[mpId].count]) { - HandleSendFailure(mpId, Rfu.recvBlock[mpId].receivedFlags); - sRfuDebug.unk_64++; + HandleSendFailure(mpId, gRfu.recvBlock[mpId].receivedFlags); + sRfuDebug.blockSendFailures++; } else - Rfu.callback = NULL; + { + gRfu.callback = NULL; + } } } else - Rfu.callback = NULL; + { + gRfu.callback = NULL; + } } bool8 Rfu_SendBlockRequest(u8 type) { - Rfu.blockRequestType = type; + gRfu.blockRequestType = type; RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_REQ); return TRUE; } -static void sub_801011C(void) +static void RfuShutdownAfterDisconnect(void) { rfu_clearAllSlot(); rfu_LMAN_powerDownRFU(); gReceivedRemoteLinkPlayers = 0; - Rfu.isShuttingDown = TRUE; - Rfu.callback = NULL; + gRfu.isShuttingDown = TRUE; + gRfu.callback = NULL; } static void DisconnectRfu(void) { rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); - sub_801011C(); + RfuShutdownAfterDisconnect(); } static void TryDisconnectRfu(void) { - if (Rfu.parentChild == MODE_CHILD) + if (gRfu.parentChild == MODE_CHILD) { rfu_LMAN_requestChangeAgbClockMaster(); - Rfu.unk_ce4 = 2; + gRfu.disconnectMode = RFU_DISCONNECT_NORMAL; } else - Rfu.callback = DisconnectRfu; + { + gRfu.callback = DisconnectRfu; + } } void LinkRfu_FatalError(void) { rfu_LMAN_requestChangeAgbClockMaster(); - Rfu.unk_ce4 = 1; - Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + gRfu.disconnectMode = RFU_DISCONNECT_ERROR; + gRfu.disconnectSlots = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; } // RFU equivalent of LinkCB_WaitCloseLink static void WaitAllReadyToCloseLink(void) { s32 i; - u8 playerCount = Rfu.playerCount; + u8 playerCount = gRfu.playerCount; s32 count = 0; // Wait for all players to be ready for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (Rfu.readyCloseLink[i]) + if (gRfu.readyCloseLink[i]) count++; } if (count == playerCount) { // All ready, close link gBattleTypeFlags &= ~BATTLE_TYPE_LINK_IN_BATTLE; - if (Rfu.parentChild == MODE_CHILD) + if (gRfu.parentChild == MODE_CHILD) { - Rfu.errorState = 3; + gRfu.errorState = RFU_ERROR_STATE_DISCONNECTING; TryDisconnectRfu(); } else - Rfu.callback = TryDisconnectRfu; + { + gRfu.callback = TryDisconnectRfu; + } } } static void SendReadyCloseLink(void) { - if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) + if (gSendCmd[0] == 0 && !gRfu.playerExchangeActive) { RfuPrepareSendBuffer(RFUCMD_READY_CLOSE_LINK); - Rfu.callback = WaitAllReadyToCloseLink; + gRfu.callback = WaitAllReadyToCloseLink; } } static void Task_TryReadyCloseLink(u8 taskId) { - if (Rfu.callback == NULL) + if (gRfu.callback == NULL) { - Rfu.unk_cd9 = 1; - Rfu.callback = SendReadyCloseLink; + gRfu.stopNewConnections = TRUE; + gRfu.callback = SendReadyCloseLink; DestroyTask(taskId); } } @@ -1423,34 +1482,34 @@ static void SendReadyExitStandbyUntilAllReady(void) if (GetMultiplayerId() != 0) { - if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60) + if (gRfu.recvQueue.count == 0 && gRfu.resendExitStandbyTimer > 60) { RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); - Rfu.resendExitStandbyTimer = 0; + gRfu.resendExitStandbyTimer = 0; } } playerCount = GetLinkPlayerCount(); for (i = 0; i < playerCount; i++) { - if (!Rfu.readyExitStandby[i]) + if (!gRfu.readyExitStandby[i]) break; } if (i == playerCount) { for (i = 0; i < MAX_RFU_PLAYERS; i++) - Rfu.readyExitStandby[i] = FALSE; - Rfu.unk_100++; - Rfu.callback = NULL; + gRfu.readyExitStandby[i] = FALSE; + gRfu.allReadyNum++; + gRfu.callback = NULL; } - Rfu.resendExitStandbyTimer++; + gRfu.resendExitStandbyTimer++; } static void LinkLeaderReadyToExitStandby(void) { - if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0) + if (gRfu.recvQueue.count == 0 && gSendCmd[0] == 0) { RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); - Rfu.callback = SendReadyExitStandbyUntilAllReady; + gRfu.callback = SendReadyExitStandbyUntilAllReady; } } @@ -1463,10 +1522,10 @@ static void Rfu_LinkStandby(void) if (GetMultiplayerId() != 0) { // Not link leader, send exit standby when ready - if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0) + if (gRfu.recvQueue.count == 0 && gSendCmd[0] == 0) { RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); - Rfu.callback = SendReadyExitStandbyUntilAllReady; + gRfu.callback = SendReadyExitStandbyUntilAllReady; } } else @@ -1475,15 +1534,15 @@ static void Rfu_LinkStandby(void) playerCount = GetLinkPlayerCount(); for (i = 1; i < playerCount; i++) { - if (!Rfu.readyExitStandby[i]) + if (!gRfu.readyExitStandby[i]) break; } if (i == playerCount) { - if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0) + if (gRfu.recvQueue.count == 0 && gSendCmd[0] == 0) { RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); - Rfu.callback = LinkLeaderReadyToExitStandby; + gRfu.callback = LinkLeaderReadyToExitStandby; } } } @@ -1491,10 +1550,10 @@ static void Rfu_LinkStandby(void) void Rfu_SetLinkStandbyCallback(void) { - if (Rfu.callback == NULL) + if (gRfu.callback == NULL) { - Rfu.callback = Rfu_LinkStandby; - Rfu.resendExitStandbyTimer = 0; + gRfu.callback = Rfu_LinkStandby; + gRfu.resendExitStandbyTimer = 0; } } @@ -1503,49 +1562,49 @@ bool32 IsRfuSerialNumberValid(u32 serialNo) s32 i; for (i = 0; sAcceptedSerialNos[i] != serialNo; i++) { - if (sAcceptedSerialNos[i] == 0xFFFF) + if (sAcceptedSerialNos[i] == RFU_SERIAL_END) return FALSE; } return TRUE; } -u8 sub_801048C(bool32 a0) +u8 Rfu_SetLinkRecovery(bool32 enable) { - if (a0 == FALSE) + if (enable == FALSE) return rfu_LMAN_setLinkRecovery(0, 0); rfu_LMAN_setLinkRecovery(1, 600); return 0; } -void sub_80104B0(void) +void Rfu_StopPartnerSearch(void) { - Rfu.unk_cd9 = 1; + gRfu.stopNewConnections = TRUE; rfu_LMAN_stopManager(FALSE); } u8 Rfu_GetMultiplayerId(void) { - if (Rfu.parentChild == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) return 0; - return Rfu.multiplayerId; + return gRfu.multiplayerId; } u8 Rfu_GetLinkPlayerCount(void) { - return Rfu.playerCount; + return gRfu.playerCount; } bool8 IsLinkRfuTaskFinished(void) { - if (Rfu.status == RFU_STATUS_CONNECTION_ERROR) + if (gRfu.status == RFU_STATUS_CONNECTION_ERROR) return FALSE; - return Rfu.callback ? FALSE : TRUE; + return gRfu.callback ? FALSE : TRUE; } static void CallRfuFunc(void) { - if (Rfu.callback) - Rfu.callback(); + if (gRfu.callback) + gRfu.callback(); } static bool8 CheckForLeavingGroupMembers(void) @@ -1554,23 +1613,23 @@ static bool8 CheckForLeavingGroupMembers(void) bool8 memberLeft = FALSE; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.partnerSendStatuses[i] < RFU_STATUS_JOIN_GROUP_OK - || Rfu.partnerSendStatuses[i] > RFU_STATUS_JOIN_GROUP_NO) + if (gRfu.partnerSendStatuses[i] < RFU_STATUS_JOIN_GROUP_OK + || gRfu.partnerSendStatuses[i] > RFU_STATUS_JOIN_GROUP_NO) { - if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS + if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) { - if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE) + if (gRfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE) { - Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP; - Rfu.partnerRecvStatuses[i] = RFU_STATUS_10; + gRfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP; + gRfu.partnerRecvStatuses[i] = RFU_STATUS_CHILD_LEAVE_READY; rfu_clearSlot(TYPE_NI_RECV, i); - rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1); + rfu_NI_setSendData(1 << i, 8, &gRfu.partnerSendStatuses[i], 1); memberLeft = TRUE; } } - else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) + else if (gRfuSlotStatusNI[gRfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) rfu_clearSlot(TYPE_NI_RECV, i); { @@ -1580,27 +1639,33 @@ static bool8 CheckForLeavingGroupMembers(void) return memberLeft; } -bool32 sub_80105EC(void) +bool32 RfuTryDisconnectLeavingChildren(void) { - u8 flags = 0; + u8 childrenLeaving = 0; s32 i; + + // Check all children, get those waiting to be disconnected for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_11) + if (gRfu.partnerRecvStatuses[i] == RFU_STATUS_CHILD_LEAVE) { - flags |= (1 << i); - Rfu.partnerRecvStatuses[i] = RFU_STATUS_OK; + childrenLeaving |= (1 << i); + gRfu.partnerRecvStatuses[i] = RFU_STATUS_OK; } } - if (flags) + + // Disconnect any leaving children + if (childrenLeaving) { - rfu_REQ_disconnect(flags); + rfu_REQ_disconnect(childrenLeaving); rfu_waitREQComplete(); } + + // Return true if any children have left or are still waiting to leave for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_10 - || Rfu.partnerRecvStatuses[i] == RFU_STATUS_11) + if (gRfu.partnerRecvStatuses[i] == RFU_STATUS_CHILD_LEAVE_READY + || gRfu.partnerRecvStatuses[i] == RFU_STATUS_CHILD_LEAVE) return TRUE; } return FALSE; @@ -1611,7 +1676,7 @@ bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name) u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId); if (idx == 0xFF) return TRUE; - if (Rfu.partnerSendStatuses[idx] == RFU_STATUS_LEAVE_GROUP) + if (gRfu.partnerSendStatuses[idx] == RFU_STATUS_LEAVE_GROUP) return TRUE; return FALSE; } @@ -1619,16 +1684,16 @@ bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name) void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name) { u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId); - Rfu.partnerSendStatuses[idx] = status; + gRfu.partnerSendStatuses[idx] = status; rfu_clearSlot(TYPE_NI_SEND, idx); - rfu_NI_setSendData(1 << idx, 8, &Rfu.partnerSendStatuses[idx], 1); + rfu_NI_setSendData(1 << idx, 8, &gRfu.partnerSendStatuses[idx], 1); } void SendLeaveGroupNotice(void) { - Rfu.unk_c85 = RFU_STATUS_LEAVE_GROUP_NOTICE; - rfu_clearSlot(TYPE_NI_SEND, Rfu.childSlot); - rfu_NI_setSendData(1 << Rfu.childSlot, 8, &Rfu.unk_c85, 1); + gRfu.leaveGroupStatus = RFU_STATUS_LEAVE_GROUP_NOTICE; + rfu_clearSlot(TYPE_NI_SEND, gRfu.childSlot); + rfu_NI_setSendData(1 << gRfu.childSlot, 8, &gRfu.leaveGroupStatus, 1); } u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name) @@ -1648,117 +1713,119 @@ static void UpdateChildStatuses(void) CheckForLeavingGroupMembers(); for (i = 0; i < RFU_CHILD_MAX; i++) { - if (gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_SUCCESS + if (gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_FAILED) { - if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_10) - Rfu.partnerRecvStatuses[i] = RFU_STATUS_11; + if (gRfu.partnerRecvStatuses[i] == RFU_STATUS_CHILD_LEAVE_READY) + gRfu.partnerRecvStatuses[i] = RFU_STATUS_CHILD_LEAVE; rfu_clearSlot(TYPE_NI_SEND, i); } } } -static s32 sub_80107A0(void) +static s32 GetJoinGroupStatus(void) { s32 status = RFU_STATUS_OK; - if (Rfu.unk_c85 == 8) + if (gRfu.leaveGroupStatus == RFU_STATUS_LEAVE_GROUP_NOTICE) { - if (gRfuSlotStatusNI[Rfu.childSlot]->send.state == SLOT_STATE_SEND_SUCCESS - || gRfuSlotStatusNI[Rfu.childSlot]->send.state == SLOT_STATE_SEND_FAILED) - rfu_clearSlot(TYPE_NI_SEND, Rfu.childSlot); + if (gRfuSlotStatusNI[gRfu.childSlot]->send.state == SLOT_STATE_SEND_SUCCESS + || gRfuSlotStatusNI[gRfu.childSlot]->send.state == SLOT_STATE_SEND_FAILED) + rfu_clearSlot(TYPE_NI_SEND, gRfu.childSlot); } - if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_SUCCESS - || gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) + if (gRfuSlotStatusNI[gRfu.childSlot]->recv.state == SLOT_STATE_RECV_SUCCESS + || gRfuSlotStatusNI[gRfu.childSlot]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) { - rfu_clearSlot(TYPE_NI_RECV, Rfu.childSlot); - RfuSetStatus(Rfu.recvStatus, 0); - status = Rfu.recvStatus; + rfu_clearSlot(TYPE_NI_RECV, gRfu.childSlot); + RfuSetStatus(gRfu.childRecvStatus, 0); + status = gRfu.childRecvStatus; } - else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) + else if (gRfuSlotStatusNI[gRfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) { - rfu_clearSlot(TYPE_NI_RECV, Rfu.childSlot); + rfu_clearSlot(TYPE_NI_RECV, gRfu.childSlot); status = RFU_STATUS_JOIN_GROUP_NO; } return status; } -static void sub_801084C(u8 taskId) +#define tState data[0] + +static void Task_PlayerExchange(u8 taskId) { s32 i; - if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR) + if (gRfu.status == RFU_STATUS_FATAL_ERROR || gRfu.status == RFU_STATUS_CONNECTION_ERROR) { - Rfu.unk_ce8 = 0; + gRfu.playerExchangeActive = FALSE; DestroyTask(taskId); } - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - if (AreNoPlayersReceiving()) + if (AreAllPlayersReadyToReceive()) { ResetBlockReceivedFlags(); LocalLinkPlayerToBlock(); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 1: - if (Rfu.parentChild == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) { if (gReceivedRemoteLinkPlayers) - RfuPrepareSendBuffer(RFUCMD_0x7800); + RfuPrepareSendBuffer(RFUCMD_SEND_PLAYER_IDS_NEW); else - RfuPrepareSendBuffer(RFUCMD_0x7700); - gTasks[taskId].data[0] = 101; + RfuPrepareSendBuffer(RFUCMD_SEND_PLAYER_IDS); + gTasks[taskId].tState = 101; } else - gTasks[taskId].data[0] = 2; + gTasks[taskId].tState = 2; break; case 101: if (gSendCmd[0] == 0) - gTasks[taskId].data[0] = 2; + gTasks[taskId].tState = 2; break; case 2: - if (Rfu.playerCount) - gTasks[taskId].data[0]++; + if (gRfu.playerCount) + gTasks[taskId].tState++; break; case 3: - if (Rfu.parentChild == MODE_PARENT) + if (gRfu.parentChild == MODE_PARENT) { - if (AreNoPlayersReceiving()) + if (AreAllPlayersReadyToReceive()) { - Rfu.blockRequestType = 0; + gRfu.blockRequestType = BLOCK_REQ_SIZE_NONE; RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_REQ); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } } else - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 4: - if (sub_800FC88()) - gTasks[taskId].data[0]++; + if (AreAllPlayersFinishedReceiving()) + gTasks[taskId].tState++; break; case 5: - for (i = 0; i < Rfu.playerCount; i++) + for (i = 0; i < gRfu.playerCount; i++) { LinkPlayerFromBlock(i); Rfu_ResetBlockReceivedFlag(i); } - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 6: DestroyTask(taskId); gReceivedRemoteLinkPlayers = TRUE; - Rfu.unk_ce8 = FALSE; + gRfu.playerExchangeActive = FALSE; rfu_LMAN_setLinkRecovery(1, 600); - if (Rfu.unk_ce6) + if (gRfu.newChildQueue) { for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((Rfu.unk_ce6 >> i) & 1) + if ((gRfu.newChildQueue >> i) & 1) { - Rfu.unk_ce5 = 1 << i; - Rfu.unk_ce6 ^= (1 << i); + gRfu.nextChildBits = 1 << i; + gRfu.newChildQueue ^= (1 << i); } } } @@ -1773,16 +1840,16 @@ static void ClearSelectedLinkPlayerIds(u16 selected) for (i = 0; i < RFU_CHILD_MAX; i++) { if ((selected >> i) & 1) - Rfu.linkPlayerIdx[i] = 0; + gRfu.linkPlayerIdx[i] = 0; } } static void ReceiveRfuLinkPlayers(const struct SioInfo *sioInfo) { s32 i; - Rfu.playerCount = sioInfo->playerCount; + gRfu.playerCount = sioInfo->playerCount; for (i = 0; i < RFU_CHILD_MAX; i++) - Rfu.linkPlayerIdx[i] = sioInfo->linkPlayerIdx[i]; + gRfu.linkPlayerIdx[i] = sioInfo->linkPlayerIdx[i]; for (i = 0; i < MAX_RFU_PLAYERS; i++) { gLinkPlayers[i] = sioInfo->linkPlayers[i]; @@ -1800,74 +1867,75 @@ static void ValidateAndReceivePokemonSioInfo(void *recvBuffer) } } -static void Task_ExchangeLinkPlayers(u8 taskId) +// Equivalent to Task_PlayerExchange, but for when new children arrive after the first exchange +static void Task_PlayerExchangeUpdate(u8 taskId) { s32 i; - struct LinkPlayerBlock *r2; - struct SioInfo *r5; - u8 r4 = Rfu.linkPlayerIdx[sUnknown_082ED68C[Rfu.unk_ce9]]; - if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR) + struct LinkPlayerBlock *playerBlock; + struct SioInfo *sio; + u8 playerId = gRfu.linkPlayerIdx[sSlotToLinkPlayerTableId[gRfu.incomingChild]]; + if (gRfu.status == RFU_STATUS_FATAL_ERROR || gRfu.status == RFU_STATUS_CONNECTION_ERROR) { - Rfu.unk_ce8 = 0; + gRfu.playerExchangeActive = FALSE; DestroyTask(taskId); } - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (gSendCmd[0] == 0) { - ResetBlockReceivedFlag(r4); - RfuPrepareSendBuffer(RFUCMD_0x7800); - gTasks[taskId].data[0]++; + ResetBlockReceivedFlag(playerId); + RfuPrepareSendBuffer(RFUCMD_SEND_PLAYER_IDS_NEW); + gTasks[taskId].tState++; } break; case 1: if (gSendCmd[0] == 0) - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 2: - if ((GetBlockReceivedStatus() >> r4) & 1) + if ((GetBlockReceivedStatus() >> playerId) & 1) { - ResetBlockReceivedFlag(r4); - r2 = (struct LinkPlayerBlock *)gBlockRecvBuffer[r4]; - gLinkPlayers[r4] = r2->linkPlayer; - ConvertLinkPlayerName(gLinkPlayers + r4); - gTasks[taskId].data[0]++; + ResetBlockReceivedFlag(playerId); + playerBlock = (struct LinkPlayerBlock *)gBlockRecvBuffer[playerId]; + gLinkPlayers[playerId] = playerBlock->linkPlayer; + ConvertLinkPlayerName(&gLinkPlayers[playerId]); + gTasks[taskId].tState++; } break; case 3: - r5 = (struct SioInfo *)gBlockSendBuffer; - memcpy(r5->magic, sASCII_PokemonSioInfo, sizeof sASCII_PokemonSioInfo); - r5->playerCount = Rfu.playerCount; + sio = (struct SioInfo *)gBlockSendBuffer; + memcpy(sio->magic, sASCII_PokemonSioInfo, sizeof sASCII_PokemonSioInfo); + sio->playerCount = gRfu.playerCount; for (i = 0; i < RFU_CHILD_MAX; i++) - r5->linkPlayerIdx[i] = Rfu.linkPlayerIdx[i]; - memcpy(r5->linkPlayers, gLinkPlayers, sizeof gLinkPlayers); - gTasks[taskId].data[0]++; + sio->linkPlayerIdx[i] = gRfu.linkPlayerIdx[i]; + memcpy(sio->linkPlayers, gLinkPlayers, sizeof gLinkPlayers); + gTasks[taskId].tState++; // fallthrough case 4: - r5 = (struct SioInfo *)gBlockSendBuffer; - r5->playerCount = Rfu.playerCount; + sio = (struct SioInfo *)gBlockSendBuffer; + sio->playerCount = gRfu.playerCount; for (i = 0; i < RFU_CHILD_MAX; i++) - r5->linkPlayerIdx[i] = Rfu.linkPlayerIdx[i]; - memcpy(r5->linkPlayers, gLinkPlayers, sizeof gLinkPlayers); + sio->linkPlayerIdx[i] = gRfu.linkPlayerIdx[i]; + memcpy(sio->linkPlayers, gLinkPlayers, sizeof(gLinkPlayers)); if (SendBlock(0, gBlockSendBuffer, 0xa0)) - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 5: if (IsLinkTaskFinished() && GetBlockReceivedStatus() & 1) { CpuFill16(0, gBlockRecvBuffer, sizeof(struct SioInfo)); ResetBlockReceivedFlag(0); - Rfu.unk_ce8 = 0; - if (Rfu.unk_ce6) + gRfu.playerExchangeActive = FALSE; + if (gRfu.newChildQueue) { - for (i = 0; i < 4; i++) + for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((Rfu.unk_ce6 >> i) & 1) + if ((gRfu.newChildQueue >> i) & 1) { - Rfu.unk_ce5 = 1 << i; - Rfu.unk_ce6 ^= (1 << i); - Rfu.unk_ce8 = 1; + gRfu.nextChildBits = 1 << i; + gRfu.newChildQueue ^= (1 << i); + gRfu.playerExchangeActive = TRUE; break; } } @@ -1878,23 +1946,24 @@ static void Task_ExchangeLinkPlayers(u8 taskId) } } -static void sub_8010D0C(u8 taskId) +// Equivalent to Task_PlayerExchange but for chatting with a Union Room partner +static void Task_PlayerExchangeChat(u8 taskId) { - if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR) + if (gRfu.status == RFU_STATUS_FATAL_ERROR || gRfu.status == RFU_STATUS_CONNECTION_ERROR) DestroyTask(taskId); - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - if (Rfu.playerCount) + if (gRfu.playerCount) { LocalLinkPlayerToBlock(); SendBlock(0, gBlockSendBuffer, sizeof(struct LinkPlayerBlock)); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 1: if (IsLinkTaskFinished()) - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 2: if (GetBlockReceivedStatus() & 1) @@ -1910,213 +1979,219 @@ static void sub_8010D0C(u8 taskId) static void RfuCheckErrorStatus(void) { - if (Rfu.errorState == 1 && lman.childClockSlave_flag == 0) + if (gRfu.errorState == RFU_ERROR_STATE_OCCURRED && lman.childClockSlave_flag == 0) { - if (gMain.callback2 == c2_mystery_gift_e_reader_run || lman.init_param->mboot_flag) + if (gMain.callback2 == CB2_MysteryGiftEReader || lman.init_param->mboot_flag) gWirelessCommType = 2; SetMainCallback2(CB2_LinkError); gMain.savedCallback = CB2_LinkError; - BufferLinkErrorInfo((Rfu.linkmanMsg << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.recvQueue.count, Rfu.sendQueue.count, RfuGetStatus() == RFU_STATUS_CONNECTION_ERROR); - Rfu.errorState = 2; + SetLinkErrorBuffer((gRfu.errorInfo << 16) | (gRfu.errorParam0 << 8) | gRfu.errorParam1, gRfu.recvQueue.count, gRfu.sendQueue.count, RfuGetStatus() == RFU_STATUS_CONNECTION_ERROR); + gRfu.errorState = RFU_ERROR_STATE_PROCESSED; CloseLink(); } - else if (Rfu.sendQueue.full == TRUE || Rfu.recvQueue.full == TRUE) + else if (gRfu.sendQueue.full == TRUE || gRfu.recvQueue.full == TRUE) { if (lman.childClockSlave_flag) rfu_LMAN_requestChangeAgbClockMaster(); - RfuSetStatus(RFU_STATUS_FATAL_ERROR, 0x7000); - GetLinkmanErrorParams(0x7000); + RfuSetStatus(RFU_STATUS_FATAL_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); + RfuSetErrorParams(F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); } } -static void rfu_REQ_recvData_then_sendData(void) +static void RfuMain1_UnionRoom(void) { - if (lman.parent_child == 1) + if (lman.parent_child == MODE_PARENT) { rfu_REQ_recvData(); rfu_waitREQComplete(); - rfu_LMAN_REQ_sendData(0); + rfu_LMAN_REQ_sendData(FALSE); } } -bool32 sub_8010EC0(void) +// Rfu equivalent of LinkMain1 +bool32 RfuMain1(void) { bool32 retval = FALSE; - Rfu.parentId = 0; + gRfu.parentId = 0; rfu_LMAN_manager_entity(Random2()); - if (!Rfu.isShuttingDown) + if (!gRfu.isShuttingDown) { - switch (Rfu.parentChild) + switch (gRfu.parentChild) { case MODE_PARENT: - sub_800F0F8(); + RfuMain1_Parent(); break; case MODE_CHILD: - retval = RfuProcessEnqueuedRecvBlock(); + retval = RfuMain1_Child(); break; - case 2: - rfu_REQ_recvData_then_sendData(); + case MODE_P_C_SWITCH: + RfuMain1_UnionRoom(); break; } } return retval; } -bool32 sub_8010F1C(void) +// Rfu equivalent of LinkMain2 +bool32 RfuMain2(void) { bool32 retval = FALSE; - if (!Rfu.isShuttingDown) + if (!gRfu.isShuttingDown) { - if (Rfu.parentChild == MODE_PARENT) - retval = sub_800F1E0(); + if (gRfu.parentChild == MODE_PARENT) + retval = RfuMain2_Parent(); RfuCheckErrorStatus(); } return retval; } -static void CopyPlayerNameToUnameBuffer(void) +static void SetHostRfuUsername(void) { - StringCopy(gHostRFUtgtUnameBuffer, gSaveBlock2Ptr->playerName); + StringCopy(gHostRfuUsername, gSaveBlock2Ptr->playerName); } -void ClearAndInitHostRFUtgtGname(void) +void ResetHostRfuGameData(void) { - memset(&gHostRFUtgtGnameBuffer, 0, RFU_GAME_NAME_LENGTH); - InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, ACTIVITY_NONE, FALSE, 0); + memset(&gHostRfuGameData, 0, RFU_GAME_NAME_LENGTH); + InitHostRfuGameData(&gHostRfuGameData, ACTIVITY_NONE, FALSE, 0); } -void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, bool32 started) +void SetHostRfuGameData(u8 activity, u32 partnerInfo, bool32 startedActivity) { - InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, activity, started, child_sprite_genders); + InitHostRfuGameData(&gHostRfuGameData, activity, startedActivity, partnerInfo); } -void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard) +void SetHostRfuWonderFlags(bool32 hasNews, bool32 hasCard) { - gHostRFUtgtGnameBuffer.unk_00.hasNews = hasNews; - gHostRFUtgtGnameBuffer.unk_00.hasCard = hasCard; + gHostRfuGameData.compatibility.hasNews = hasNews; + gHostRfuGameData.compatibility.hasCard = hasCard; } void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level) { - gHostRFUtgtGnameBuffer.type = type; - gHostRFUtgtGnameBuffer.species = species; - gHostRFUtgtGnameBuffer.level = level; + gHostRfuGameData.tradeType = type; + gHostRfuGameData.tradeSpecies = species; + gHostRfuGameData.tradeLevel = level; } -u8 sub_801100C(s32 a0) +u8 GetLinkPlayerInfoFlags(s32 playerId) { - u8 retval = 0x80; - retval |= (gLinkPlayers[a0].gender << 3); - retval |= (gLinkPlayers[a0].trainerId & 7); + u8 retval = PINFO_ACTIVE_FLAG; + retval |= (gLinkPlayers[playerId].gender << PINFO_GENDER_SHIFT); + retval |= (gLinkPlayers[playerId].trainerId & PINFO_TID_MASK); return retval; } -void sub_801103C(void) +void GetOtherPlayersInfoFlags(void) { - struct GFtgtGname *r5 = &gHostRFUtgtGnameBuffer; + struct RfuGameData *data = &gHostRfuGameData; s32 i; for (i = 1; i < GetLinkPlayerCount(); i++) - r5->child_sprite_gender[i - 1] = sub_801100C(i); + data->partnerInfo[i - 1] = GetLinkPlayerInfoFlags(i); } -void UpdateGameData_GroupLockedIn(bool8 started) +void UpdateGameData_GroupLockedIn(bool8 startedActivity) { - gHostRFUtgtGnameBuffer.started = started; - rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); + gHostRfuGameData.startedActivity = startedActivity; + rfu_REQ_configGameData(0, RFU_SERIAL_GAME, (void *)&gHostRfuGameData, gHostRfuUsername); } -void UpdateGameData_SetActivity(u8 activity, u32 flags, bool32 started) +void UpdateGameData_SetActivity(u8 activity, u32 partnerInfo, bool32 startedActivity) { if (activity != ACTIVITY_NONE) - SetHostRFUtgtGname(activity, flags, started); - rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); + SetHostRfuGameData(activity, partnerInfo, startedActivity); + rfu_REQ_configGameData(0, RFU_SERIAL_GAME, (void *)&gHostRfuGameData, gHostRfuUsername); } -void sub_80110B8(u32 a0) +void SetUnionRoomChatPlayerData(u32 numPlayers) { s32 i; u32 numConnectedChildren; - u32 child_sprite_genders; - s32 r8; + u32 partnerInfo; + s32 slots; - if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + if (GetHostRfuGameData()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { numConnectedChildren = 0; - child_sprite_genders = 0; - r8 = Rfu.unk_ce2 ^ Rfu.unk_ce3; - for (i = 0; i < 4; i++) + partnerInfo = 0; + slots = gRfu.parentSlots ^ gRfu.disconnectSlots; + for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((r8 >> i) & 1) + if ((slots >> i) & 1) { - child_sprite_genders |= ((0x80 | ((gLinkPlayers[Rfu.linkPlayerIdx[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.linkPlayerIdx[i]].trainerId & 7)) << (numConnectedChildren << 3)); + // Only trainerId is shifted by the number of children, so the active flag and gender + // are only ever set for the first child + partnerInfo |= ((PINFO_ACTIVE_FLAG + | ((gLinkPlayers[gRfu.linkPlayerIdx[i]].gender & 1) << PINFO_GENDER_SHIFT) + | (gLinkPlayers[gRfu.linkPlayerIdx[i]].trainerId & PINFO_TID_MASK)) << (numConnectedChildren * 8)); numConnectedChildren++; - if (numConnectedChildren == a0 - 1) + if (numConnectedChildren == numPlayers - 1) break; } } - UpdateGameData_SetActivity((ACTIVITY_CHAT | IN_UNION_ROOM), child_sprite_genders, FALSE); + UpdateGameData_SetActivity(ACTIVITY_CHAT | IN_UNION_ROOM, partnerInfo, FALSE); } } -void GetLinkmanErrorParams(u32 msg) +void RfuSetErrorParams(u32 errorInfo) { - if (Rfu.errorState == 0) + if (gRfu.errorState == RFU_ERROR_STATE_NONE) { - Rfu.unk_10 = lman.param[0]; - Rfu.unk_12 = lman.param[1]; - Rfu.linkmanMsg = msg; - Rfu.errorState = 1; + gRfu.errorParam0 = lman.param[0]; + gRfu.errorParam1 = lman.param[1]; + gRfu.errorInfo = errorInfo; + gRfu.errorState = RFU_ERROR_STATE_OCCURRED; } } static void ResetErrorState(void) { - Rfu.errorState = 0; + gRfu.errorState = RFU_ERROR_STATE_NONE; } -void sub_80111B0(bool32 a0) +void RfuSetIgnoreError(bool32 enable) { - if (!a0) - Rfu.errorState = 0; + if (!enable) + gRfu.errorState = RFU_ERROR_STATE_NONE; else - Rfu.errorState = 4; + gRfu.errorState = RFU_ERROR_STATE_IGNORE; } -static void sub_80111DC(void) +static void DisconnectNewChild(void) { - sub_8011E94(lman.acceptSlot_flag, 1); - Rfu.callback = NULL; + SendDisconnectCommand(lman.acceptSlot_flag, RFU_DISCONNECT_ERROR); + gRfu.callback = NULL; } -static void sub_80111FC(void) +static void StartDisconnectNewChild(void) { - Rfu.callback = sub_80111DC; + gRfu.callback = DisconnectNewChild; } -static void sub_801120C(u8 msg, u8 paramCount) +static void LinkManagerCB_Parent(u8 msg, u8 paramCount) { u8 i; u8 disconnectFlag = 0; switch (msg) { case LMAN_MSG_INITIALIZE_COMPLETED: - Rfu.state = 2; + gRfu.state = RFUSTATE_PARENT_CONNECT; break; case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED: break; case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED: - sub_80115EC(lman.param[0]); + ParentResetChildRecvMetadata(lman.param[0]); for (i = 0; i < RFU_CHILD_MAX; i++) { if ((lman.param[0] >> i) & 1) { - struct GFtgtGname *structPtr = (void *)gRfuLinkStatus->partner[i].gname; - if (structPtr->activity == GetHostRFUtgtGname()->activity) + struct RfuGameData *data = (void *)gRfuLinkStatus->partner[i].gname; + if (data->activity == GetHostRfuGameData()->activity) { - Rfu.partnerSendStatuses[i] = RFU_STATUS_OK; - Rfu.partnerRecvStatuses[i] = RFU_STATUS_OK; - rfu_setRecvBuffer(TYPE_NI, i, &Rfu.partnerRecvStatuses[i], 1); + gRfu.partnerSendStatuses[i] = RFU_STATUS_OK; + gRfu.partnerRecvStatuses[i] = RFU_STATUS_OK; + rfu_setRecvBuffer(TYPE_NI, i, &gRfu.partnerRecvStatuses[i], sizeof(gRfu.partnerRecvStatuses[0])); } else { @@ -2135,104 +2210,103 @@ static void sub_801120C(u8 msg, u8 paramCount) case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED: break; case LMAN_MSG_END_WAIT_CHILD_NAME: - if (Rfu.acceptSlot_flag != lman.acceptSlot_flag) + if (gRfu.acceptSlot_flag != lman.acceptSlot_flag) { - rfu_REQ_disconnect(Rfu.acceptSlot_flag ^ lman.acceptSlot_flag); + rfu_REQ_disconnect(gRfu.acceptSlot_flag ^ lman.acceptSlot_flag); rfu_waitREQComplete(); } - Rfu.state = 17; + gRfu.state = RFUSTATE_PARENT_FINALIZE_START; break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: - Rfu.linkLossRecoveryState = 1; + gRfu.linkLossRecoveryState = 1; break; case LMAN_MSG_LINK_RECOVERY_SUCCESSED: - Rfu.linkLossRecoveryState = 3; + gRfu.linkLossRecoveryState = 3; break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED: - Rfu.linkLossRecoveryState = 4; - Rfu.unk_ce2 &= ~lman.param[0]; + gRfu.linkLossRecoveryState = 4; + gRfu.parentSlots &= ~lman.param[0]; if (gReceivedRemoteLinkPlayers == 1) { - if (Rfu.unk_ce2 == 0) - GetLinkmanErrorParams(msg); + if (gRfu.parentSlots == 0) + RfuSetErrorParams(msg); else - sub_80111FC(); + StartDisconnectNewChild(); } RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; - case 0x34: - break; + case 0x34: // ? Not a valid LMAN_MSG value case LMAN_MSG_RFU_POWER_DOWN: case LMAN_MSG_MANAGER_STOPPED: case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET: break; case LMAN_MSG_LMAN_API_ERROR_RETURN: RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - GetLinkmanErrorParams(msg); - Rfu.isShuttingDown = TRUE; + RfuSetErrorParams(msg); + gRfu.isShuttingDown = TRUE; break; case LMAN_MSG_REQ_API_ERROR: case LMAN_MSG_WATCH_DOG_TIMER_ERROR: case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: case LMAN_MSG_RFU_FATAL_ERROR: - GetLinkmanErrorParams(msg); + RfuSetErrorParams(msg); RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - Rfu.unk_cdb = TRUE; + gRfu.parentFinished = TRUE; break; } } -void sub_8011404(u8 msg, u8 unused1) +static void LinkManagerCB_Child(u8 msg, u8 unused1) { switch (msg) { case LMAN_MSG_INITIALIZE_COMPLETED: - Rfu.state = 6; + gRfu.state = RFUSTATE_CHILD_CONNECT; break; case LMAN_MSG_PARENT_FOUND: - Rfu.parentId = lman.param[0]; + gRfu.parentId = lman.param[0]; break; case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED: break; case LMAN_MSG_CONNECT_PARENT_SUCCESSED: - Rfu.childSlot = lman.param[0]; + gRfu.childSlot = lman.param[0]; break; case LMAN_MSG_CONNECT_PARENT_FAILED: RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_CHILD_NAME_SEND_COMPLETED: - Rfu.state = 11; - Rfu.unk_c85 = 0; - Rfu.recvStatus = RFU_STATUS_OK; - rfu_setRecvBuffer(TYPE_NI, Rfu.childSlot, &Rfu.recvStatus, 1); - rfu_setRecvBuffer(TYPE_UNI, Rfu.childSlot, Rfu.unk_c3f, 70); + gRfu.state = RFUSTATE_CHILD_TRY_JOIN; + gRfu.leaveGroupStatus = RFU_STATUS_OK; + gRfu.childRecvStatus = RFU_STATUS_OK; + rfu_setRecvBuffer(TYPE_NI, gRfu.childSlot, &gRfu.childRecvStatus, sizeof(gRfu.childRecvStatus)); + rfu_setRecvBuffer(TYPE_UNI, gRfu.childSlot, gRfu.childRecvQueue, sizeof(gRfu.childRecvQueue)); break; case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED: RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: - Rfu.linkLossRecoveryState = 2; - if (Rfu.recvStatus == RFU_STATUS_JOIN_GROUP_NO) + gRfu.linkLossRecoveryState = 2; + if (gRfu.childRecvStatus == RFU_STATUS_JOIN_GROUP_NO) break; case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED: - if (Rfu.linkLossRecoveryState != 2) - Rfu.linkLossRecoveryState = 4; - if (Rfu.recvStatus != RFU_STATUS_LEAVE_GROUP) + if (gRfu.linkLossRecoveryState != 2) + gRfu.linkLossRecoveryState = 4; + if (gRfu.childRecvStatus != RFU_STATUS_LEAVE_GROUP) RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); Debug_PrintString(sASCII_LinkLossDisconnect, 5, 5); if (gReceivedRemoteLinkPlayers == 1) - GetLinkmanErrorParams(msg); + RfuSetErrorParams(msg); break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: - Rfu.linkLossRecoveryState = 1; + gRfu.linkLossRecoveryState = 1; Debug_PrintString(sASCII_LinkLossRecoveryNow, 5, 5); break; case LMAN_MSG_LINK_RECOVERY_SUCCESSED: - Rfu.linkLossRecoveryState = 3; - Rfu.linkRecovered = TRUE; + gRfu.linkLossRecoveryState = 3; + gRfu.linkRecovered = TRUE; break; - case 0x34: + case 0x34: // ? Not a valid LMAN_MSG value break; case LMAN_MSG_RFU_POWER_DOWN: case LMAN_MSG_MANAGER_STOPPED: @@ -2240,45 +2314,45 @@ void sub_8011404(u8 msg, u8 unused1) break; case LMAN_MSG_LMAN_API_ERROR_RETURN: RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - GetLinkmanErrorParams(msg); - Rfu.isShuttingDown = TRUE; + RfuSetErrorParams(msg); + gRfu.isShuttingDown = TRUE; break; case LMAN_MSG_REQ_API_ERROR: case LMAN_MSG_WATCH_DOG_TIMER_ERROR: case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: case LMAN_MSG_RFU_FATAL_ERROR: RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - GetLinkmanErrorParams(msg); - Rfu.unk_cdb = TRUE; + RfuSetErrorParams(msg); + gRfu.parentFinished = TRUE; break; } } -static void sub_80115EC(s32 a0) +static void ParentResetChildRecvMetadata(s32 slot) { s32 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((a0 >> i) & 1) + if ((slot >> i) & 1) { - Rfu.unk_cea[i] = 0; - Rfu.unk_cee[i] = 0xFF; + gRfu.numChildRecvErrors[i] = 0; + gRfu.childRecvIds[i] = 0xFF; } } } -static u8 GetNewChildrenInUnionRoomChat(s32 a0) +static u8 GetNewChildrenInUnionRoomChat(s32 emptySlotMask) { u8 ret = 0; u8 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((a0 >> i) & 1) + if ((emptySlotMask >> i) & 1) { - struct GFtgtGname *structPtr = (void *)gRfuLinkStatus->partner[i].gname; - if (structPtr->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + struct RfuGameData *data = (void *)gRfuLinkStatus->partner[i].gname; + if (data->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) ret |= (1 << i); } } @@ -2286,78 +2360,78 @@ static u8 GetNewChildrenInUnionRoomChat(s32 a0) return ret; } -static void sub_8011674(u8 msg, u8 paramCount) +static void LinkManagerCB_UnionRoom(u8 msg, u8 paramCount) { - u8 r1; + u8 acceptSlot; switch (msg) { case LMAN_MSG_INITIALIZE_COMPLETED: - Rfu.state = 17; + gRfu.state = RFUSTATE_UR_CONNECT; break; case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED: RfuSetStatus(RFU_STATUS_NEW_CHILD_DETECTED, 0); break; case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED: - if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && Rfu.unk_cd9 == 0) + if (GetHostRfuGameData()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && !gRfu.stopNewConnections) { - u8 idx = GetNewChildrenInUnionRoomChat(lman.param[0]); - if (idx != 0) + u8 newChildren = GetNewChildrenInUnionRoomChat(lman.param[0]); + if (newChildren != 0) { - r1 = 1 << sub_800E87C(idx); - if (Rfu.unk_ce6 == 0 && Rfu.unk_ce8 == 0) + acceptSlot = 1 << Rfu_GetIndexOfNewestChild(newChildren); + if (gRfu.newChildQueue == 0 && !gRfu.playerExchangeActive) { - Rfu.unk_ce5 = r1; - Rfu.unk_ce6 |= (r1 ^ idx); - Rfu.unk_ce8 = TRUE; + gRfu.nextChildBits = acceptSlot; + gRfu.newChildQueue |= (acceptSlot ^ newChildren); + gRfu.playerExchangeActive = TRUE; } else { - Rfu.unk_ce6 |= idx; + gRfu.newChildQueue |= newChildren; } } - if (idx != lman.param[0]) + if (newChildren != lman.param[0]) { - Rfu.unk_ce3 |= (idx ^ lman.param[0]); - Rfu.unk_ce4 = 2; + gRfu.disconnectSlots |= (newChildren ^ lman.param[0]); + gRfu.disconnectMode = RFU_DISCONNECT_NORMAL; } } - else if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM)) + else if (GetHostRfuGameData()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM)) { rfu_REQ_disconnect(lman.acceptSlot_flag); rfu_waitREQComplete(); } - sub_80115EC(lman.param[0]); + ParentResetChildRecvMetadata(lman.param[0]); break; case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED: break; case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED: break; case LMAN_MSG_END_WAIT_CHILD_NAME: - if (GetHostRFUtgtGname()->activity != (ACTIVITY_CHAT | IN_UNION_ROOM) && lman.acceptCount > 1) + if (GetHostRfuGameData()->activity != (ACTIVITY_CHAT | IN_UNION_ROOM) && lman.acceptCount > 1) { - r1 = 1 << sub_800E87C(lman.param[0]); - rfu_REQ_disconnect(lman.acceptSlot_flag ^ r1); + acceptSlot = 1 << Rfu_GetIndexOfNewestChild(lman.param[0]); + rfu_REQ_disconnect(lman.acceptSlot_flag ^ acceptSlot); rfu_waitREQComplete(); } - if (Rfu.state == 15) - Rfu.state = 16; + if (gRfu.state == RFUSTATE_UR_STOP_MANAGER_END) + gRfu.state = RFUSTATE_UR_FINALIZE; break; break; case LMAN_MSG_PARENT_FOUND: - Rfu.parentId = lman.param[0]; + gRfu.parentId = lman.param[0]; break; case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED: break; case LMAN_MSG_CONNECT_PARENT_SUCCESSED: - Rfu.childSlot = lman.param[0]; + gRfu.childSlot = lman.param[0]; break; case LMAN_MSG_CONNECT_PARENT_FAILED: - Rfu.state = 18; - if (Rfu.unk_ccf < 2) + gRfu.state = RFUSTATE_UR_CONNECT_END; + if (gRfu.connectParentFailures < 2) { - Rfu.unk_ccf++; - CreateTask(sub_801209C, 2); + gRfu.connectParentFailures++; + CreateTask(Task_TryConnectToUnionRoomParent, 2); } else { @@ -2365,51 +2439,53 @@ static void sub_8011674(u8 msg, u8 paramCount) } break; case LMAN_MSG_CHILD_NAME_SEND_COMPLETED: - Rfu.state = 13; + gRfu.state = RFUSTATE_UR_PLAYER_EXCHANGE; RfuSetStatus(RFU_STATUS_CHILD_SEND_COMPLETE, 0); - rfu_setRecvBuffer(TYPE_UNI, Rfu.childSlot, Rfu.unk_c3f, 70); + rfu_setRecvBuffer(TYPE_UNI, gRfu.childSlot, gRfu.childRecvQueue, sizeof(gRfu.childRecvQueue)); break; case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED: RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: if (lman.acceptSlot_flag & lman.param[0]) - Rfu.linkLossRecoveryState = 1; + gRfu.linkLossRecoveryState = 1; break; case LMAN_MSG_LINK_RECOVERY_SUCCESSED: - Rfu.linkLossRecoveryState = 3; + gRfu.linkLossRecoveryState = 3; if (gRfuLinkStatus->parentChild == MODE_CHILD) - Rfu.linkRecovered = TRUE; + gRfu.linkRecovered = TRUE; break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: - Rfu.linkLossRecoveryState = 2; + gRfu.linkLossRecoveryState = 2; case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED: - if (Rfu.linkLossRecoveryState != 2) - Rfu.linkLossRecoveryState = 4; - if (Rfu.parentChild == MODE_PARENT) + if (gRfu.linkLossRecoveryState != 2) + gRfu.linkLossRecoveryState = 4; + if (gRfu.parentChild == MODE_PARENT) { if (gReceivedRemoteLinkPlayers == 1) { - Rfu.unk_ce2 &= ~(lman.param[0]); - if (Rfu.unk_ce2 == 0) - GetLinkmanErrorParams(msg); + gRfu.parentSlots &= ~(lman.param[0]); + if (gRfu.parentSlots == 0) + RfuSetErrorParams(msg); else - sub_80111FC(); + StartDisconnectNewChild(); } } - else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1) + else if (gRfu.disconnectMode != RFU_DISCONNECT_NORMAL && gReceivedRemoteLinkPlayers == 1) { - GetLinkmanErrorParams(msg); - rfu_LMAN_stopManager(0); + RfuSetErrorParams(msg); + rfu_LMAN_stopManager(FALSE); } - if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && lman.pcswitch_flag == 0 && FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE) - Rfu.state = 17; + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL + && !lman.pcswitch_flag + && FuncIsActiveTask(Task_UnionRoomListen) == TRUE) + gRfu.state = RFUSTATE_UR_CONNECT; RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_LINK_DISCONNECTED_BY_USER: - Rfu.unk_ce3 = 0; + gRfu.disconnectSlots = 0; break; case LMAN_MSG_RFU_POWER_DOWN: case LMAN_MSG_MANAGER_STOPPED: @@ -2417,34 +2493,34 @@ static void sub_8011674(u8 msg, u8 paramCount) break; case LMAN_MSG_LMAN_API_ERROR_RETURN: RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - GetLinkmanErrorParams(msg); - Rfu.isShuttingDown = TRUE; + RfuSetErrorParams(msg); + gRfu.isShuttingDown = TRUE; break; case LMAN_MSG_REQ_API_ERROR: case LMAN_MSG_WATCH_DOG_TIMER_ERROR: case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: case LMAN_MSG_RFU_FATAL_ERROR: - GetLinkmanErrorParams(msg); + RfuSetErrorParams(msg); RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); - Rfu.unk_cdb = FALSE; + gRfu.parentFinished = FALSE; break; } } -void sub_8011A50(void) +void RfuSetNormalDisconnectMode(void) { - Rfu.unk_ce4 = 2; + gRfu.disconnectMode = RFU_DISCONNECT_NORMAL; } -void RfuSetStatus(u8 status, u16 msg) +void RfuSetStatus(u8 status, u16 errorInfo) { - Rfu.status = status; - Rfu.linkmanMsg = msg; + gRfu.status = status; + gRfu.errorInfo = errorInfo; } u8 RfuGetStatus(void) { - return Rfu.status; + return gRfu.status; } bool32 RfuHasErrored(void) @@ -2457,14 +2533,14 @@ bool32 RfuHasErrored(void) return FALSE; } -bool32 sub_8011A9C(void) +bool32 Rfu_IsPlayerExchangeActive(void) { - return Rfu.unk_ce8; + return gRfu.playerExchangeActive; } bool8 Rfu_IsMaster(void) { - return Rfu.parentChild; + return gRfu.parentChild; } void RfuVSync(void) @@ -2477,14 +2553,15 @@ void ClearRecvCommands(void) CpuFill32(0, gRecvCmds, sizeof(gRecvCmds)); } -static void sub_8011AE8(void) +static void VBlank_RfuIdle(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static void sub_8011AFC(void) +// Unused +static void Debug_RfuIdle(void) { s32 i; @@ -2492,14 +2569,14 @@ static void sub_8011AFC(void) FreeAllSpritePalettes(); ResetTasks(); ResetPaletteFade(); - SetVBlankCallback(sub_8011AE8); + SetVBlankCallback(VBlank_RfuIdle); if (IsWirelessAdapterConnected()) { gLinkType = LINKTYPE_TRADE; SetWirelessCommType1(); OpenLink(); SeedRng(gMain.vblankCounter2); - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP); @@ -2508,28 +2585,28 @@ static void sub_8011AFC(void) BuildOamBuffer(); UpdatePaletteFade(); CreateTask_RfuIdle(); - SetMainCallback2(sub_8011BF8); + SetMainCallback2(CB2_RfuIdle); } } bool32 IsUnionRoomListenTaskActive(void) { - return FuncIsActiveTask(Task_LinkRfu_UnionRoomListen); + return FuncIsActiveTask(Task_UnionRoomListen); } void CreateTask_RfuIdle(void) { if (!FuncIsActiveTask(Task_Idle)) - Rfu.idleTaskId = CreateTask(Task_Idle, 0); + gRfu.idleTaskId = CreateTask(Task_Idle, 0); } void DestroyTask_RfuIdle(void) { if (FuncIsActiveTask(Task_Idle) == TRUE) - DestroyTask(Rfu.idleTaskId); + DestroyTask(gRfu.idleTaskId); } -static void sub_8011BF8(void) +static void CB2_RfuIdle(void) { RunTasks(); AnimateSprites(); @@ -2537,33 +2614,33 @@ static void sub_8011BF8(void) UpdatePaletteFade(); } -void InitializeRfuLinkManager_LinkLeader(u32 a0) +void InitializeRfuLinkManager_LinkLeader(u32 groupMax) { - Rfu.parentChild = MODE_PARENT; - CopyPlayerNameToUnameBuffer(); - rfu_LMAN_initializeManager(sub_801120C, NULL); + gRfu.parentChild = MODE_PARENT; + SetHostRfuUsername(); + rfu_LMAN_initializeManager(LinkManagerCB_Parent, NULL); sRfuReqConfig = sRfuReqConfigTemplate; - sRfuReqConfig.availSlot_flag = sAvailSlots[a0 - 1]; - CreateTask_LinkLeaderSearchForChildren(); + sRfuReqConfig.availSlot_flag = sAvailSlots[groupMax - 1]; + CreateTask_ParentSearchForChildren(); } void InitializeRfuLinkManager_JoinGroup(void) { - Rfu.parentChild = MODE_CHILD; - CopyPlayerNameToUnameBuffer(); - rfu_LMAN_initializeManager(sub_8011404, sub_800ED34); - CreateTask_JoinGroupSearchForParent(); + gRfu.parentChild = MODE_CHILD; + SetHostRfuUsername(); + rfu_LMAN_initializeManager(LinkManagerCB_Child, MSCCallback_Child); + CreateTask_ChildSearchForParent(); } void InitializeRfuLinkManager_EnterUnionRoom(void) { - Rfu.parentChild = 2; - CopyPlayerNameToUnameBuffer(); - rfu_LMAN_initializeManager(sub_8011674, NULL); + gRfu.parentChild = MODE_P_C_SWITCH; + SetHostRfuUsername(); + rfu_LMAN_initializeManager(LinkManagerCB_UnionRoom, NULL); sRfuReqConfig = sRfuReqConfigTemplate; sRfuReqConfig.linkRecovery_enable = 0; sRfuReqConfig.linkRecovery_period = 600; - Rfu.searchTaskId = CreateTask(Task_LinkRfu_UnionRoomListen, 1); + gRfu.searchTaskId = CreateTask(Task_UnionRoomListen, 1); } static u16 ReadU16(const void *ptr) @@ -2597,10 +2674,10 @@ static void RfuReqDisconnectSlot(u32 slot) { rfu_REQ_disconnect(slot); rfu_waitREQComplete(); - Rfu.unk_ce2 &= ~(slot); - rfu_clearSlot(1, Rfu.unk_cda); - rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.recvCmds, 70); - Rfu.unk_cda = sub_800E87C(Rfu.unk_ce2); + gRfu.parentSlots &= ~slot; + rfu_clearSlot(1, gRfu.parentSendSlot); + rfu_UNI_setSendData(gRfu.parentSlots, gRfu.recvCmds, sizeof(gRfu.recvCmds)); + gRfu.parentSendSlot = Rfu_GetIndexOfNewestChild(gRfu.parentSlots); } void RequestDisconnectSlotByTrainerNameAndId(const u8 *name, u16 id) @@ -2610,132 +2687,147 @@ void RequestDisconnectSlotByTrainerNameAndId(const u8 *name, u16 id) RfuReqDisconnectSlot(1 << var); } -void sub_8011DE0(u32 a0) +void Rfu_DisconnectPlayerById(u32 playerIdx) { - if (a0 != 0) + if (playerIdx != 0) { s32 i; - u8 var = 0; + u8 toDisconnect = 0; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.linkPlayerIdx[i] == a0 && (Rfu.unk_ce2 >> i) & 1) - var |= 1 << i; + if (gRfu.linkPlayerIdx[i] == playerIdx && (gRfu.parentSlots >> i) & 1) + toDisconnect |= 1 << i; } - if (var) - sub_8011E94(var, 2); + if (toDisconnect) + SendDisconnectCommand(toDisconnect, RFU_DISCONNECT_NORMAL); } } -static void sub_8011E2C(u8 taskId) +#define tDisconnectPlayers data[0] +#define tDisconnectMode data[1] + +static void Task_SendDisconnectCommand(u8 taskId) { - if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) + if (gSendCmd[0] == 0 && !gRfu.playerExchangeActive) { - RfuPrepareSendBuffer(RFUCMD_0xED00); - gSendCmd[1] = gTasks[taskId].data[0]; - gSendCmd[2] = gTasks[taskId].data[1]; - Rfu.playerCount -= sUnknown_082ED695[gTasks[taskId].data[0]]; - gSendCmd[3] = Rfu.playerCount; + RfuPrepareSendBuffer(RFUCMD_DISCONNECT); + gSendCmd[1] = gTasks[taskId].tDisconnectPlayers; + gSendCmd[2] = gTasks[taskId].tDisconnectMode; + gRfu.playerCount -= sPlayerBitsToCount[gTasks[taskId].tDisconnectPlayers]; + gSendCmd[3] = gRfu.playerCount; DestroyTask(taskId); } } -static void sub_8011E94(u32 a0, u32 a1) +static void SendDisconnectCommand(u32 playersToDisconnect, u32 disconnectMode) { - u8 taskId = FindTaskIdByFunc(sub_8011E2C); + u8 taskId = FindTaskIdByFunc(Task_SendDisconnectCommand); if (taskId == TASK_NONE) { - taskId = CreateTask(sub_8011E2C, 5); - gTasks[taskId].data[0] = a0; + taskId = CreateTask(Task_SendDisconnectCommand, 5); + gTasks[taskId].tDisconnectPlayers = playersToDisconnect; } else { - gTasks[taskId].data[0] |= a0; + // Task is already active, just add the new players to disconnect + gTasks[taskId].tDisconnectPlayers |= playersToDisconnect; } - gTasks[taskId].data[1] = a1; + gTasks[taskId].tDisconnectMode = disconnectMode; } +#undef tDisconnectMode + +#define tTime data[15] + static void Task_RfuReconnectWithParent(u8 taskId) { s16 *data = gTasks[taskId].data; - if (sub_800EE94()) + if (CanTryReconnectParent()) { - u8 id = GetPartnerIndexByNameAndTrainerID((u8*)data, ReadU16(&data[8])); + u8 id = GetPartnerIndexByNameAndTrainerID((u8 *)data, ReadU16(&data[8])); if (id != 0xFF) { if (gRfuLinkStatus->partner[id].slot != 0xFF) { - Rfu.unk_c3d = id; - if (IsParentSuccessfullyReconnected()) + gRfu.reconnectParentId = id; + if (TryReconnectParent()) DestroyTask(taskId); } - else if (GetHostRFUtgtGname()->activity == ACTIVITY_WONDER_CARD2 - || GetHostRFUtgtGname()->activity == ACTIVITY_WONDER_NEWS2) + else if (GetHostRfuGameData()->activity == ACTIVITY_WONDER_CARD + || GetHostRfuGameData()->activity == ACTIVITY_WONDER_NEWS) { - data[15]++; + tTime++; } else { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); + // Error, unable to reconnect to parent + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); DestroyTask(taskId); } } else { - data[15]++; - Rfu.unk_c3d = id; + tTime++; + gRfu.reconnectParentId = id; } } else { - data[15]++; + tTime++; } - if (data[15] > 240) + if (tTime > 240) { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); + // Timeout error + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); DestroyTask(taskId); } } +#undef tTime + void CreateTask_RfuReconnectWithParent(const u8 *name, u16 trainerId) { u8 taskId; s16 *data; - Rfu.status = RFU_STATUS_OK; + gRfu.status = RFU_STATUS_OK; taskId = CreateTask(Task_RfuReconnectWithParent, 3); data = gTasks[taskId].data; - StringCopy((u8*)(data), name); + StringCopy((u8 *)(data), name); data[8] = trainerId; } -static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct GFtgtGname *partnerGname) +static bool32 IsPartnerActivityIncompatible(s16 activity, struct RfuGameData *partner) { - if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + if (GetHostRfuGameData()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { - if (partnerGname->activity != (ACTIVITY_CHAT | IN_UNION_ROOM)) + // Host trying to chat, but partner isn't + if (partner->activity != (ACTIVITY_CHAT | IN_UNION_ROOM)) return TRUE; } - else if (partnerGname->activity != IN_UNION_ROOM) + else if (partner->activity != IN_UNION_ROOM) { + // Partner not in union room return TRUE; } else if (activity == (ACTIVITY_TRADE | IN_UNION_ROOM)) { - struct GFtgtGname *tradeGname = &Rfu.unk_10A; - if (tradeGname->species == SPECIES_EGG) + // Verify that the trade offered hasn't changed + struct RfuGameData *original = &gRfu.parent; + if (original->tradeSpecies == SPECIES_EGG) { - if (partnerGname->species == tradeGname->species) + if (partner->tradeSpecies == original->tradeSpecies) return FALSE; else return TRUE; } - else if (partnerGname->species != tradeGname->species - || partnerGname->level != tradeGname->level - || partnerGname->type != tradeGname->type) + else if (partner->tradeSpecies != original->tradeSpecies + || partner->tradeLevel != original->tradeLevel + || partner->tradeType != original->tradeType) { return TRUE; } @@ -2744,79 +2836,91 @@ static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct return FALSE; } -static void sub_801209C(u8 taskId) +#define tTime data[0] +#define tActivity data[1] + +static void Task_TryConnectToUnionRoomParent(u8 taskId) { - if (Rfu.status == RFU_STATUS_NEW_CHILD_DETECTED) + // Stop task if player is the new parent + if (gRfu.status == RFU_STATUS_NEW_CHILD_DETECTED) DestroyTask(taskId); - if (++gTasks[taskId].data[0] > 300) + if (++gTasks[taskId].tTime > 300) { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); + // Timeout error + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); DestroyTask(taskId); } - if (Rfu.parentId != 0 && lman.parent_child == 0) + // Check if parent should be searched for + if (gRfu.parentId != 0 && lman.parent_child == MODE_CHILD) { - u16 trainerId = ReadU16(Rfu.unk_10A.unk_00.playerTrainerId); - u8 id = GetPartnerIndexByNameAndTrainerID(Rfu.playerName, trainerId); + // Search for parent + u16 trainerId = ReadU16(gRfu.parent.compatibility.playerTrainerId); + u8 id = GetPartnerIndexByNameAndTrainerID(gRfu.parentName, trainerId); if (id != 0xFF) { - if (!ShouldRejectPartnerConnectionBasedOnActivity(gTasks[taskId].data[1], (void *)gRfuLinkStatus->partner[id].gname)) + // Parent found, try to connect + if (!IsPartnerActivityIncompatible(gTasks[taskId].tActivity, (void *)gRfuLinkStatus->partner[id].gname)) { - if (gRfuLinkStatus->partner[id].slot != 0xFF && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[id].id, 0x5A)) + if (gRfuLinkStatus->partner[id].slot != 0xFF && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[id].id, 90)) { - Rfu.state = 0xA; + // Succesfully connected to parent + gRfu.state = RFUSTATE_CONNECTED; DestroyTask(taskId); } } else { - RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); + // Incompatible partner activity + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, F_RFU_ERROR_5 | F_RFU_ERROR_6 | F_RFU_ERROR_7); DestroyTask(taskId); } } } } -void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 activity) +void TryConnectToUnionRoomParent(const u8 *name, struct RfuGameData *parent, u8 activity) { - u8 taskId, taskId2; + u8 taskId, listenTaskId; - Rfu.unk_ccf = 0; - Rfu.status = RFU_STATUS_OK; - StringCopy(Rfu.playerName, name); - memcpy(&Rfu.unk_10A, structPtr, RFU_GAME_NAME_LENGTH); + gRfu.connectParentFailures = 0; + gRfu.status = RFU_STATUS_OK; + StringCopy(gRfu.parentName, name); + memcpy(&gRfu.parent, parent, RFU_GAME_NAME_LENGTH); rfu_LMAN_forceChangeSP(); - taskId = CreateTask(sub_801209C, 2); - gTasks[taskId].data[1] = activity; - taskId2 = FindTaskIdByFunc(Task_LinkRfu_UnionRoomListen); + taskId = CreateTask(Task_TryConnectToUnionRoomParent, 2); + gTasks[taskId].tActivity = activity; + listenTaskId = FindTaskIdByFunc(Task_UnionRoomListen); if (activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { - if (taskId2 != TASK_NONE) - gTasks[taskId2].data[7] = 1; + if (listenTaskId != TASK_NONE) + gTasks[listenTaskId].tConnectingForChat = TRUE; } else { - if (taskId2 != TASK_NONE) - gTasks[taskId2].data[7] = 0; + if (listenTaskId != TASK_NONE) + gTasks[listenTaskId].tConnectingForChat = FALSE; } } bool8 IsRfuRecoveringFromLinkLoss(void) { - if (Rfu.linkLossRecoveryState == 1) + if (gRfu.linkLossRecoveryState == 1) return TRUE; else return FALSE; } -bool32 sub_8012240(void) +bool32 IsRfuCommunicatingWithAllChildren(void) { s32 i; - for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((lman.acceptSlot_flag >> i) & 1 && Rfu.partnerSendStatuses[i] == RFU_STATUS_OK) + // RFU_STATUS_OK is the default status. + // If any connected child is receiving a status other + // than OK, then the parent is communicating with them + if ((lman.acceptSlot_flag >> i) & 1 && gRfu.partnerSendStatuses[i] == RFU_STATUS_OK) return FALSE; } @@ -2826,49 +2930,45 @@ bool32 sub_8012240(void) static void Debug_PrintEmpty(void) { s32 i; - for (i = 0; i < 20; i++) - Debug_PrintString(sASCII_30Commas, 0, i); + Debug_PrintString(sASCII_30Spaces, 0, i); } static void Debug_PrintStatus(void) { s32 i, j; - - Debug_PrintNum(GetBlockReceivedStatus(), 0x1C, 0x13, 2); - Debug_PrintNum(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1); - Debug_PrintNum(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1); - if (Rfu.parentChild == MODE_PARENT) + Debug_PrintNum(GetBlockReceivedStatus(), 28, 19, 2); + Debug_PrintNum(gRfuLinkStatus->connSlotFlag, 20, 1, 1); + Debug_PrintNum(gRfuLinkStatus->linkLossSlotFlag, 23, 1, 1); + if (gRfu.parentChild == MODE_PARENT) { for (i = 0; i < RFU_CHILD_MAX; i++) { if ((gRfuLinkStatus->getNameFlag >> i) & 1) { Debug_PrintNum(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); - Debug_PrintString((void*)gRfuLinkStatus->partner[i].gname, 6, i + 3); - Debug_PrintString(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); + Debug_PrintString((void *)gRfuLinkStatus->partner[i].gname, 6, i + 3); + Debug_PrintString(gRfuLinkStatus->partner[i].uname, 22, i + 3); } } for (i = 0; i < RFU_CHILD_MAX; i++) { - for (j = 0; j < (int)ARRAY_COUNT(Rfu.unk_14[0]); j++) - { - Debug_PrintNum(Rfu.unk_14[i][j], j * 2, i + 11, 2); - } + for (j = 0; j < COMM_SLOT_LENGTH; j++) + Debug_PrintNum(gRfu.childRecvBuffer[i][j], j * 2, i + 11, 2); } - Debug_PrintString(sASCII_NowSlot, 1, 0xF); + Debug_PrintString(sASCII_NowSlot, 1, 15); } else if (gRfuLinkStatus->connSlotFlag != 0 && gRfuLinkStatus->getNameFlag != 0) { for (i = 0; i < RFU_CHILD_MAX; i++) { Debug_PrintNum(0, 1, i + 3, 4); - Debug_PrintString(sASCII_15Commas, 6, i + 3); - Debug_PrintString(sASCII_8Commas, 0x16, i + 3); + Debug_PrintString(sASCII_15Spaces, 6, i + 3); + Debug_PrintString(sASCII_8Spaces, 22, i + 3); } - Debug_PrintNum(gRfuLinkStatus->partner[Rfu.childSlot].serialNo, 1, 3, 4); - Debug_PrintString((void*)gRfuLinkStatus->partner[Rfu.childSlot].gname, 6, 3); - Debug_PrintString(gRfuLinkStatus->partner[Rfu.childSlot].uname, 0x16, 3); + Debug_PrintNum(gRfuLinkStatus->partner[gRfu.childSlot].serialNo, 1, 3, 4); + Debug_PrintString((void *)gRfuLinkStatus->partner[gRfu.childSlot].gname, 6, 3); + Debug_PrintString(gRfuLinkStatus->partner[gRfu.childSlot].uname, 22, 3); } else { @@ -2878,26 +2978,26 @@ static void Debug_PrintStatus(void) { Debug_PrintNum(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); Debug_PrintNum(gRfuLinkStatus->partner[i].id, 6, i + 3, 4); - Debug_PrintString(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); + Debug_PrintString(gRfuLinkStatus->partner[i].uname, 22, i + 3); } } for (; i < RFU_CHILD_MAX; i++) { Debug_PrintNum(0, 1, i + 3, 4); - Debug_PrintString(sASCII_15Commas, 6, i + 3); - Debug_PrintString(sASCII_8Commas, 0x16, i + 3); + Debug_PrintString(sASCII_15Spaces, 6, i + 3); + Debug_PrintString(sASCII_8Spaces, 22, i + 3); } } } static u32 GetRfuSendQueueLength(void) { - return Rfu.sendQueue.count; + return gRfu.sendQueue.count; } u32 GetRfuRecvQueueLength(void) { - return Rfu.recvQueue.count; + return gRfu.recvQueue.count; } static void Task_Idle(u8 taskId) diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 251b4792dd..1e1fe5b347 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -15,6 +15,9 @@ enum { WIRELESS_STATUS_ANIM_ERROR, }; +#define TAG_GFX_STATUS_INDICATOR 0xD431 +#define TAG_PAL_STATUS_INDICATOR 0xD432 + #define UNUSED_QUEUE_NUM_SLOTS 2 #define UNUSED_QUEUE_SLOT_LENGTH 256 @@ -29,89 +32,89 @@ struct RfuUnusedQueue EWRAM_DATA u8 gWirelessStatusIndicatorSpriteId = 0; -static u8 sUnknown_03000D74; +static u8 sSequenceArrayValOffset; -static const u16 sWirelessLinkIconPalette[] = INCBIN_U16("graphics/interface/wireless_link_icon.gbapal"); -static const u32 sWirelessLinkIconPic[] = INCBIN_U32("graphics/interface/wireless_link_icon.4bpp.lz"); +static const u16 sWirelessLinkIconPalette[] = INCBIN_U16("graphics/link/wireless_icon.gbapal"); +static const u32 sWirelessLinkIconPic[] = INCBIN_U32("graphics/link/wireless_icon.4bpp.lz"); // Most of the below two tables won't make sense with ASCII encoding. static const u8 sWireless_ASCIItoRSETable[256] = { - EOS, + EOS, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - [' '] = CHAR_SPACE, - ['!'] = CHAR_EXCL_MARK, + [' '] = CHAR_SPACE, + ['!'] = CHAR_EXCL_MARK, 0xb5, 0xb6, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xf1, 0x00, - ['-'] = CHAR_HYPHEN, - ['.'] = CHAR_PERIOD, + ['-'] = CHAR_HYPHEN, + ['.'] = CHAR_PERIOD, ['/'] = CHAR_SLASH, ['0'] = CHAR_0, - ['1'] = CHAR_1, - ['2'] = CHAR_2, - ['3'] = CHAR_3, - ['4'] = CHAR_4, - ['5'] = CHAR_5, - ['6'] = CHAR_6, + ['1'] = CHAR_1, + ['2'] = CHAR_2, + ['3'] = CHAR_3, + ['4'] = CHAR_4, + ['5'] = CHAR_5, + ['6'] = CHAR_6, ['7'] = CHAR_7, - ['8'] = CHAR_8, - ['9'] = CHAR_9, - 0x00, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0x00, - ['A'] = CHAR_A, - ['B'] = CHAR_B, - ['C'] = CHAR_C, - ['D'] = CHAR_D, - ['E'] = CHAR_E, - ['F'] = CHAR_F, + ['8'] = CHAR_8, + ['9'] = CHAR_9, + 0x00, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0x00, + ['A'] = CHAR_A, + ['B'] = CHAR_B, + ['C'] = CHAR_C, + ['D'] = CHAR_D, + ['E'] = CHAR_E, + ['F'] = CHAR_F, ['G'] = CHAR_G, - ['H'] = CHAR_H, - ['I'] = CHAR_I, - ['J'] = CHAR_J, - ['K'] = CHAR_K, - ['L'] = CHAR_L, - ['M'] = CHAR_M, - ['N'] = CHAR_N, + ['H'] = CHAR_H, + ['I'] = CHAR_I, + ['J'] = CHAR_J, + ['K'] = CHAR_K, + ['L'] = CHAR_L, + ['M'] = CHAR_M, + ['N'] = CHAR_N, ['O'] = CHAR_O, - ['P'] = CHAR_P, - ['Q'] = CHAR_Q, - ['R'] = CHAR_R, - ['S'] = CHAR_S, - ['T'] = CHAR_T, - ['U'] = CHAR_U, + ['P'] = CHAR_P, + ['Q'] = CHAR_Q, + ['R'] = CHAR_R, + ['S'] = CHAR_S, + ['T'] = CHAR_T, + ['U'] = CHAR_U, ['V'] = CHAR_V, ['W'] = CHAR_W, - ['X'] = CHAR_X, - ['Y'] = CHAR_Y, - ['Z'] = CHAR_Z, - 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, - ['a'] = CHAR_a, - ['b'] = CHAR_b, - ['c'] = CHAR_c, - ['d'] = CHAR_d, - ['e'] = CHAR_e, - ['f'] = CHAR_f, + ['X'] = CHAR_X, + ['Y'] = CHAR_Y, + ['Z'] = CHAR_Z, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, + ['a'] = CHAR_a, + ['b'] = CHAR_b, + ['c'] = CHAR_c, + ['d'] = CHAR_d, + ['e'] = CHAR_e, + ['f'] = CHAR_f, ['g'] = CHAR_g, - ['h'] = CHAR_h, - ['i'] = CHAR_i, - ['j'] = CHAR_j, - ['k'] = CHAR_k, - ['l'] = CHAR_l, - ['m'] = CHAR_m, - ['n'] = CHAR_n, + ['h'] = CHAR_h, + ['i'] = CHAR_i, + ['j'] = CHAR_j, + ['k'] = CHAR_k, + ['l'] = CHAR_l, + ['m'] = CHAR_m, + ['n'] = CHAR_n, ['o'] = CHAR_o, - ['p'] = CHAR_p, - ['q'] = CHAR_q, - ['r'] = CHAR_r, - ['s'] = CHAR_s, - ['t'] = CHAR_t, - ['u'] = CHAR_u, - ['v'] = CHAR_v, + ['p'] = CHAR_p, + ['q'] = CHAR_q, + ['r'] = CHAR_r, + ['s'] = CHAR_s, + ['t'] = CHAR_t, + ['u'] = CHAR_u, + ['v'] = CHAR_v, ['w'] = CHAR_w, - ['x'] = CHAR_x, - ['y'] = CHAR_y, - ['z'] = CHAR_z, + ['x'] = CHAR_x, + ['y'] = CHAR_y, + ['z'] = CHAR_z, 0x2d, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x50, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, @@ -132,102 +135,102 @@ static const u8 sWireless_ASCIItoRSETable[256] = { }; static const u8 sWireless_RSEtoASCIITable[256] = { - [CHAR_SPACE] = ' ', - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, - 0x9e, 0x9f, 0xa0, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, - 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, - 0xed, 0xee, 0xef, 0xf0, 0x7b, 0xf1, 0x7c, 0x7d, - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, - 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x84, - 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, - 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, - 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, - 0xd9, 0xda, 0xdb, 0xdc, 0xa6, 0xdd, 0xa7, 0xa8, - 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xf2, 0xf3, - 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, - 0xfc, 0xfd, 0xfe, 0xff, 0x01, 0x02, 0x03, 0x04, - 0x05, 0x06, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0xaf, - [CHAR_0] = '0', - [CHAR_1] = '1', - [CHAR_2] = '2', - [CHAR_3] = '3', - [CHAR_4] = '4', - [CHAR_5] = '5', + [CHAR_SPACE] = ' ', + 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, + 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, + 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, + 0x9e, 0x9f, 0xa0, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, + 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, + 0xed, 0xee, 0xef, 0xf0, 0x7b, 0xf1, 0x7c, 0x7d, + 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x84, + 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, + 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, + 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, + 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, + 0xd9, 0xda, 0xdb, 0xdc, 0xa6, 0xdd, 0xa7, 0xa8, + 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xf2, 0xf3, + 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, + 0xfc, 0xfd, 0xfe, 0xff, 0x01, 0x02, 0x03, 0x04, + 0x05, 0x06, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0xaf, + [CHAR_0] = '0', + [CHAR_1] = '1', + [CHAR_2] = '2', + [CHAR_3] = '3', + [CHAR_4] = '4', + [CHAR_5] = '5', [CHAR_6] = '6', - [CHAR_7] = '7', - [CHAR_8] = '8', - [CHAR_9] = '9', - [CHAR_EXCL_MARK] = '!', - 0xdf, 0xa1, 0xb0, 0xa5, 0xde, 0x24, 0x2a, - 0xa2, 0xa3, 0x22, 0x23, 0x20, 0xa4, 0x20, - [CHAR_SLASH] = '/', - [CHAR_A] = 'A', - [CHAR_B] = 'B', - [CHAR_C] = 'C', - [CHAR_D] = 'D', + [CHAR_7] = '7', + [CHAR_8] = '8', + [CHAR_9] = '9', + [CHAR_EXCL_MARK] = '!', + 0xdf, 0xa1, 0xb0, 0xa5, 0xde, 0x24, 0x2a, + 0xa2, 0xa3, 0x22, 0x23, 0x20, 0xa4, 0x20, + [CHAR_SLASH] = '/', + [CHAR_A] = 'A', + [CHAR_B] = 'B', + [CHAR_C] = 'C', + [CHAR_D] = 'D', [CHAR_E] = 'E', - [CHAR_F] = 'F', - [CHAR_G] = 'G', - [CHAR_H] = 'H', - [CHAR_I] = 'I', - [CHAR_J] = 'J', - [CHAR_K] = 'K', - [CHAR_L] = 'L', + [CHAR_F] = 'F', + [CHAR_G] = 'G', + [CHAR_H] = 'H', + [CHAR_I] = 'I', + [CHAR_J] = 'J', + [CHAR_K] = 'K', + [CHAR_L] = 'L', [CHAR_M] = 'M', - [CHAR_N] = 'N', - [CHAR_O] = 'O', - [CHAR_P] = 'P', - [CHAR_Q] = 'Q', - [CHAR_R] = 'R', - [CHAR_S] = 'S', - [CHAR_T] = 'T', + [CHAR_N] = 'N', + [CHAR_O] = 'O', + [CHAR_P] = 'P', + [CHAR_Q] = 'Q', + [CHAR_R] = 'R', + [CHAR_S] = 'S', + [CHAR_T] = 'T', [CHAR_U] = 'U', - [CHAR_V] = 'V', - [CHAR_W] = 'W', - [CHAR_X] = 'X', - [CHAR_Y] = 'Y', - [CHAR_Z] = 'Z', - [CHAR_a] = 'a', - [CHAR_b] = 'b', + [CHAR_V] = 'V', + [CHAR_W] = 'W', + [CHAR_X] = 'X', + [CHAR_Y] = 'Y', + [CHAR_Z] = 'Z', + [CHAR_a] = 'a', + [CHAR_b] = 'b', [CHAR_c] = 'c', - [CHAR_d] = 'd', - [CHAR_e] = 'e', - [CHAR_f] = 'f', - [CHAR_g] = 'g', - [CHAR_h] = 'h', - [CHAR_i] = 'i', - [CHAR_j] = 'j', + [CHAR_d] = 'd', + [CHAR_e] = 'e', + [CHAR_f] = 'f', + [CHAR_g] = 'g', + [CHAR_h] = 'h', + [CHAR_i] = 'i', + [CHAR_j] = 'j', [CHAR_k] = 'k', - [CHAR_l] = 'l', - [CHAR_m] = 'm', - [CHAR_n] = 'n', - [CHAR_o] = 'o', - [CHAR_p] = 'p', - [CHAR_q] = 'q', - [CHAR_r] = 'r', + [CHAR_l] = 'l', + [CHAR_m] = 'm', + [CHAR_n] = 'n', + [CHAR_o] = 'o', + [CHAR_p] = 'p', + [CHAR_q] = 'q', + [CHAR_r] = 'r', [CHAR_s] = 's', - [CHAR_t] = 't', - [CHAR_u] = 'u', - [CHAR_v] = 'v', - [CHAR_w] = 'w', - [CHAR_x] = 'x', - [CHAR_y] = 'y', - [CHAR_z] = 'z', - 0x20, 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + [CHAR_t] = 't', + [CHAR_u] = 'u', + [CHAR_v] = 'v', + [CHAR_w] = 'w', + [CHAR_x] = 'x', + [CHAR_y] = 'y', + [CHAR_z] = 'z', + 0x20, 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, [CHAR_DYNAMIC] = ' ', - [CHAR_KEYPAD_ICON] = ' ', - [CHAR_EXTRA_SYMBOL] = ' ', - [CHAR_PROMPT_SCROLL] = ' ', - [CHAR_PROMPT_CLEAR] = ' ', - [EXT_CTRL_CODE_BEGIN] = ' ', - [PLACEHOLDER_BEGIN] = ' ', - [CHAR_NEWLINE] = ' ', + [CHAR_KEYPAD_ICON] = ' ', + [CHAR_EXTRA_SYMBOL] = ' ', + [CHAR_PROMPT_SCROLL] = ' ', + [CHAR_PROMPT_CLEAR] = ' ', + [EXT_CTRL_CODE_BEGIN] = ' ', + [PLACEHOLDER_BEGIN] = ' ', + [CHAR_NEWLINE] = ' ', [EOS] = 0 }; @@ -290,16 +293,16 @@ static const union AnimCmd *const sWirelessStatusIndicatorAnims[] = { }; static const struct CompressedSpriteSheet sWirelessStatusIndicatorSpriteSheet = { - sWirelessLinkIconPic, 0x0380, 0xD431 + sWirelessLinkIconPic, 0x0380, TAG_GFX_STATUS_INDICATOR }; static const struct SpritePalette sWirelessStatusIndicatorSpritePalette = { - sWirelessLinkIconPalette, 0xD432 + sWirelessLinkIconPalette, TAG_PAL_STATUS_INDICATOR }; static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = { - .tileTag = 0xD431, - .paletteTag = 0xD432, + .tileTag = TAG_GFX_STATUS_INDICATOR, + .paletteTag = TAG_PAL_STATUS_INDICATOR, .oam = &sWirelessStatusIndicatorOamData, .anims = sWirelessStatusIndicatorAnims, .images = NULL, @@ -314,10 +317,8 @@ void RfuRecvQueue_Reset(struct RfuRecvQueue *queue) for (i = 0; i < RECV_QUEUE_NUM_SLOTS; i++) { - for (j = 0; j < RECV_QUEUE_SLOT_LENGTH; j++) - { + for (j = 0; j < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; j++) queue->slots[i][j] = 0; - } } queue->sendSlot = 0; queue->recvSlot = 0; @@ -332,10 +333,8 @@ void RfuSendQueue_Reset(struct RfuSendQueue *queue) for (i = 0; i < SEND_QUEUE_NUM_SLOTS; i++) { - for (j = 0; j < SEND_QUEUE_SLOT_LENGTH; j++) - { + for (j = 0; j < COMM_SLOT_LENGTH; j++) queue->slots[i][j] = 0; - } } queue->sendSlot = 0; queue->recvSlot = 0; @@ -351,9 +350,7 @@ static void RfuUnusedQueue_Reset(struct RfuUnusedQueue *queue) for (i = 0; i < UNUSED_QUEUE_NUM_SLOTS; i++) { for (j = 0; j < UNUSED_QUEUE_SLOT_LENGTH; j++) - { queue->slots[i][j] = 0; - } } queue->sendSlot = 0; queue->recvSlot = 0; @@ -372,21 +369,21 @@ void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *data) imeBak = REG_IME; REG_IME = 0; count = 0; - for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i += RECV_QUEUE_SLOT_LENGTH / MAX_RFU_PLAYERS) + for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i += COMM_SLOT_LENGTH) { if (data[i] == 0 && data[i + 1] == 0) count++; } if (count != MAX_RFU_PLAYERS) { - for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++) + for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) queue->slots[queue->recvSlot][i] = data[i]; queue->recvSlot++; queue->recvSlot %= RECV_QUEUE_NUM_SLOTS; queue->count++; - for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++) + for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) data[i] = 0; } REG_IME = imeBak; @@ -406,22 +403,20 @@ void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *data) { imeBak = REG_IME; REG_IME = 0; - for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++) + for (i = 0; i < COMM_SLOT_LENGTH; i++) { if (data[i] != 0) break; } - if (i != SEND_QUEUE_SLOT_LENGTH) + if (i != COMM_SLOT_LENGTH) { - for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++) - { + for (i = 0; i < COMM_SLOT_LENGTH; i++) queue->slots[queue->recvSlot][i] = data[i]; - } queue->recvSlot++; queue->recvSlot %= SEND_QUEUE_NUM_SLOTS; queue->count++; - for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++) + for (i = 0; i < COMM_SLOT_LENGTH; i++) data[i] = 0; } REG_IME = imeBak; @@ -441,13 +436,13 @@ bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *src) REG_IME = 0; if (queue->recvSlot == queue->sendSlot || queue->full) { - for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++) + for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) src[i] = 0; REG_IME = imeBak; return FALSE; } - for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++) + for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++) { src[i] = queue->slots[queue->sendSlot][i]; } @@ -468,7 +463,7 @@ bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *src) imeBak = REG_IME; REG_IME = 0; - for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++) + for (i = 0; i < COMM_SLOT_LENGTH; i++) src[i] = queue->slots[queue->sendSlot][i]; queue->sendSlot++; @@ -488,7 +483,7 @@ void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *data) } else { - for (i = 0; i < BACKUP_QUEUE_SLOT_LENGTH; i++) + for (i = 0; i < COMM_SLOT_LENGTH; i++) queue->slots[queue->recvSlot][i] = data[i]; queue->recvSlot++; @@ -510,7 +505,7 @@ bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *src) if (src != NULL) { - for (i = 0; i < BACKUP_QUEUE_SLOT_LENGTH; i++) + for (i = 0; i < COMM_SLOT_LENGTH; i++) src[i] = queue->slots[queue->sendSlot][i]; } queue->sendSlot++; @@ -555,46 +550,57 @@ static bool8 RfuUnusedQueue_Dequeue(struct RfuUnusedQueue *queue, u8 *dest) } // Unused -static void sub_800DBF8(u8 *q1, u8 mode) +// Populates an array with a sequence of numbers (which numbers depends on the mode) +// and sets the final element to the total of the other elements +#define SEQ_ARRAY_MAX_SIZE 200 +static void PopulateArrayWithSequence(u8 *arr, u8 mode) { s32 i; u8 rval; - u16 r5 = 0; + u16 total = 0; switch (mode) { case 0: - for (i = 0; i < 200; i++) + // Populate with numbers 1-200 + // Total will be 20100 + for (i = 0; i < SEQ_ARRAY_MAX_SIZE; i++) { - q1[i] = i + 1; - r5 += i + 1; + arr[i] = i + 1; + total += i + 1; } - *((u16 *)(q1 + i)) = r5; + *((u16 *)(arr + i)) = total; break; case 1: + // Populate with numbers 1-100 + // Total will be 5050 for (i = 0; i < 100; i++) { - q1[i] = i + 1; - r5 += i + 1; + arr[i] = i + 1; + total += i + 1; } - *((u16 *)(q1 + 200)) = r5; + *((u16 *)(arr + SEQ_ARRAY_MAX_SIZE)) = total; break; case 2: - for (i = 0; i < 200; i++) + // Populate with random numbers 0-255 + // Total will be a number 0-51000 + for (i = 0; i < SEQ_ARRAY_MAX_SIZE; i++) { rval = Random(); - q1[i] = rval; - r5 += rval; + arr[i] = rval; + total += rval; } - *((u16 *)(q1 + i)) = r5; + *((u16 *)(arr + i)) = total; break; case 3: - for (i = 0; i < 200; i++) + // Populate with numbers 1-200 + sSequenceArrayValOffset + // Total will be a number 20100-51000 + for (i = 0; i < SEQ_ARRAY_MAX_SIZE; i++) { - q1[i] = i + 1 + sUnknown_03000D74; - r5 += (i + 1 + sUnknown_03000D74) & 0xFF; + arr[i] = i + 1 + sSequenceArrayValOffset; + total += (i + 1 + sSequenceArrayValOffset) & 0xFF; } - *((u16 *)(q1 + i)) = r5; - sUnknown_03000D74++; + *((u16 *)(arr + i)) = total; + sSequenceArrayValOffset++; break; } } @@ -606,9 +612,7 @@ static void PkmnStrToASCII(u8 *asciiStr, const u8 *pkmnStr) s32 i; for (i = 0; pkmnStr[i] != EOS; i++) - { asciiStr[i] = sWireless_RSEtoASCIITable[pkmnStr[i]]; - } asciiStr[i] = 0; } @@ -617,9 +621,7 @@ static void ASCIIToPkmnStr(u8 *pkmnStr, const u8 *asciiStr) s32 i; for (i = 0; asciiStr[i] != 0; i++) - { pkmnStr[i] = sWireless_ASCIItoRSETable[asciiStr[i]]; - } pkmnStr[i] = EOS; } @@ -655,33 +657,32 @@ static u8 GetConnectedChildStrength(u8 maxFlags) return 0; } -void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders) +void InitHostRfuGameData(struct RfuGameData *data, u8 activity, bool32 startedActivity, s32 partnerInfo) { s32 i; - for (i = 0; i < 2; i++) - { - data->unk_00.playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; - } + for (i = 0; i < (s32)ARRAY_COUNT(data->compatibility.playerTrainerId); i++) + data->compatibility.playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; + for (i = 0; i < RFU_CHILD_MAX; i++) { - data->child_sprite_gender[i] = child_sprite_genders; - child_sprite_genders >>= 8; + data->partnerInfo[i] = partnerInfo; + partnerInfo >>= 8; // Each element is 1 byte } data->playerGender = gSaveBlock2Ptr->playerGender; data->activity = activity; - data->started = started; - data->unk_00.language = GAME_LANGUAGE; - data->unk_00.version = GAME_VERSION; - data->unk_00.hasNews = FALSE; - data->unk_00.hasCard = FALSE; - data->unk_00.unknown = FALSE; - data->unk_00.isChampion = FlagGet(FLAG_IS_CHAMPION); - data->unk_00.hasNationalDex = IsNationalPokedexEnabled(); - data->unk_00.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR); + data->startedActivity = startedActivity; + data->compatibility.language = GAME_LANGUAGE; + data->compatibility.version = GAME_VERSION; + data->compatibility.hasNews = FALSE; + data->compatibility.hasCard = FALSE; + data->compatibility.unknown = FALSE; + data->compatibility.isChampion = FlagGet(FLAG_IS_CHAMPION); + data->compatibility.hasNationalDex = IsNationalPokedexEnabled(); + data->compatibility.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR); } -bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *buff1, u8 *buff2, u8 idx) +bool8 Rfu_GetCompatiblePlayerData(struct RfuGameData *gameData, u8 *username, u8 idx) { bool8 retVal; @@ -690,13 +691,13 @@ bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *buff1, u8 *buff2, u8 idx) retVal = TRUE; if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1)) { - memcpy(buff1, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); - memcpy(buff2, gRfuLinkStatus->partner[idx].uname, PLAYER_NAME_LENGTH + 1); + memcpy(gameData, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); + memcpy(username, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH); } else { - memset(buff1, 0, RFU_GAME_NAME_LENGTH); - memset(buff2, 0, PLAYER_NAME_LENGTH + 1); + memset(gameData, 0, RFU_GAME_NAME_LENGTH); + memset(username, 0, RFU_USER_NAME_LENGTH); } } else @@ -704,39 +705,39 @@ bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *buff1, u8 *buff2, u8 idx) retVal = FALSE; if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[idx].serialNo)) { - memcpy(buff1, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); - memcpy(buff2, gRfuLinkStatus->partner[idx].uname, PLAYER_NAME_LENGTH + 1); + memcpy(gameData, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); + memcpy(username, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH); } else { - memset(buff1, 0, RFU_GAME_NAME_LENGTH); - memset(buff2, 0, PLAYER_NAME_LENGTH + 1); + memset(gameData, 0, RFU_GAME_NAME_LENGTH); + memset(username, 0, RFU_USER_NAME_LENGTH); } } return retVal; } -bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *buff1, u8 *buff2, u8 idx) +bool8 Rfu_GetWonderDistributorPlayerData(struct RfuGameData *gameData, u8 *username, u8 idx) { bool8 retVal = FALSE; - if (gRfuLinkStatus->partner[idx].serialNo == RFU_SERIAL_7F7D) + if (gRfuLinkStatus->partner[idx].serialNo == RFU_SERIAL_WONDER_DISTRIBUTOR) { - memcpy(buff1, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); - memcpy(buff2, gRfuLinkStatus->partner[idx].uname, PLAYER_NAME_LENGTH + 1); + memcpy(gameData, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH); + memcpy(username, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH); retVal = TRUE; } else { - memset(buff1, 0, RFU_GAME_NAME_LENGTH); - memset(buff2, 0, PLAYER_NAME_LENGTH + 1); + memset(gameData, 0, RFU_GAME_NAME_LENGTH); + memset(username, 0, RFU_USER_NAME_LENGTH); } return retVal; } -void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *buff1, u8 *buff2) +void CopyHostRfuGameDataAndUsername(struct RfuGameData *gameData, u8 *username) { - memcpy(buff1, &gHostRFUtgtGnameBuffer, RFU_GAME_NAME_LENGTH); - memcpy(buff2, gHostRFUtgtUnameBuffer, PLAYER_NAME_LENGTH + 1); + memcpy(gameData, &gHostRfuGameData, RFU_GAME_NAME_LENGTH); + memcpy(username, gHostRfuUsername, RFU_USER_NAME_LENGTH); } #define sNextAnimNum data[0] @@ -754,8 +755,8 @@ void CreateWirelessStatusIndicatorSprite(u8 x, u8 y) if (x == 0 && y == 0) { - x = 0xE7; - y = 0x08; + x = 231; + y = 8; } if (gRfuLinkStatus->parentChild == MODE_PARENT) { @@ -788,9 +789,7 @@ void DestroyWirelessStatusIndicatorSprite(void) void LoadWirelessStatusIndicatorSpriteGfx(void) { if (GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag) == 0xFFFF) - { LoadCompressedSpriteSheet(&sWirelessStatusIndicatorSpriteSheet); - } LoadSpritePalette(&sWirelessStatusIndicatorSpritePalette); gWirelessStatusIndicatorSpriteId = SPRITE_NONE; } @@ -802,9 +801,7 @@ static u8 GetParentSignalStrength(void) for (i = 0; i < RFU_CHILD_MAX; i++) { if (flags & 1) - { return gRfuLinkStatus->strength[i]; - } flags >>= 1; } return 0; @@ -827,40 +824,33 @@ void UpdateWirelessStatusIndicatorSprite(void) struct Sprite *sprite = &gSprites[gWirelessStatusIndicatorSpriteId]; u8 signalStrength = RFU_LINK_ICON_LEVEL4_MAX; u8 i = 0; + + // Get weakest signal strength if (gRfuLinkStatus->parentChild == MODE_PARENT) { for (i = 0; i < GetLinkPlayerCount() - 1; i++) { if (signalStrength >= GetConnectedChildStrength(i + 1)) - { signalStrength = GetConnectedChildStrength(i + 1); - } } } else { signalStrength = GetParentSignalStrength(); } + + // Set signal strength sprite anim number if (IsRfuRecoveringFromLinkLoss() == TRUE) - { sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_ERROR; - } else if (signalStrength <= RFU_LINK_ICON_LEVEL1_MAX) - { sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_SEARCHING; - } else if (signalStrength >= RFU_LINK_ICON_LEVEL2_MIN && signalStrength <= RFU_LINK_ICON_LEVEL2_MAX) - { sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_1_BAR; - } else if (signalStrength >= RFU_LINK_ICON_LEVEL3_MIN && signalStrength <= RFU_LINK_ICON_LEVEL3_MAX) - { sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_2_BARS; - } else if (signalStrength >= RFU_LINK_ICON_LEVEL4_MIN) - { sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_3_BARS; - } + if (sprite->sNextAnimNum != sprite->sSavedAnimNum) { SetWirelessStatusIndicatorAnim(sprite, sprite->sNextAnimNum); @@ -871,9 +861,7 @@ void UpdateWirelessStatusIndicatorSprite(void) sprite->sFrameIdx++; sprite->sFrameDelay = 0; if (sprite->anims[sprite->sCurrAnimNum][sprite->sFrameIdx].type == -2) - { sprite->sFrameIdx = 0; - } } else { @@ -884,11 +872,9 @@ void UpdateWirelessStatusIndicatorSprite(void) gMain.oamBuffer[125].y = sprite->y + sprite->centerToCornerVecY; gMain.oamBuffer[125].paletteNum = sprite->oam.paletteNum; gMain.oamBuffer[125].tileNum = sprite->sTileStart + sprite->anims[sprite->sCurrAnimNum][sprite->sFrameIdx].frame.imageValue; - CpuCopy16(gMain.oamBuffer + 125, (struct OamData *)OAM + 125, sizeof(struct OamData)); + CpuCopy16(&gMain.oamBuffer[125], (struct OamData *)OAM + 125, sizeof(struct OamData)); if (RfuGetStatus() == RFU_STATUS_FATAL_ERROR) - { DestroyWirelessStatusIndicatorSprite(); - } } } @@ -919,14 +905,14 @@ static bool32 NameIsNotEmpty(const u8 *name) } // Save the currently connected players into the trainer records, shifting all previous records down. -void RecordMixTrainerNames(void) +void SaveLinkTrainerNames(void) { if (gWirelessCommType != 0) { s32 i; s32 j; s32 nextSpace; - s32 connectedTrainerRecordIndices[5]; + s32 connectedTrainerRecordIndices[MAX_RFU_PLAYERS]; struct TrainerNameRecord *newRecords = calloc(ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords), sizeof(struct TrainerNameRecord)); // Check if we already have a record saved for connected trainers. @@ -936,9 +922,7 @@ void RecordMixTrainerNames(void) for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); j++) { if ((u16)gLinkPlayers[i].trainerId == gSaveBlock1Ptr->trainerNameRecords[j].trainerId && StringCompare(gLinkPlayers[i].name, gSaveBlock1Ptr->trainerNameRecords[j].trainerName) == 0) - { connectedTrainerRecordIndices[i] = j; - } } } @@ -952,9 +936,7 @@ void RecordMixTrainerNames(void) // If we already had a record for this trainer, wipe it so that the next step doesn't duplicate it. if (connectedTrainerRecordIndices[i] >= 0) - { - memset(gSaveBlock1Ptr->trainerNameRecords[connectedTrainerRecordIndices[i]].trainerName, 0, 8); - } + memset(gSaveBlock1Ptr->trainerNameRecords[connectedTrainerRecordIndices[i]].trainerName, 0, PLAYER_NAME_LENGTH + 1); nextSpace++; } } @@ -967,9 +949,7 @@ void RecordMixTrainerNames(void) { CopyTrainerRecord(&newRecords[nextSpace], gSaveBlock1Ptr->trainerNameRecords[i].trainerId, gSaveBlock1Ptr->trainerNameRecords[i].trainerName); if (++nextSpace >= (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords)) - { break; - } } } @@ -1001,6 +981,6 @@ void WipeTrainerNameRecords(void) for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); i++) { gSaveBlock1Ptr->trainerNameRecords[i].trainerId = 0; - CpuFill16(0, gSaveBlock1Ptr->trainerNameRecords[i].trainerName, 8); + CpuFill16(0, gSaveBlock1Ptr->trainerNameRecords[i].trainerName, PLAYER_NAME_LENGTH + 1); } } diff --git a/src/list_menu.c b/src/list_menu.c index 83c9acd669..64692ce1f6 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -127,7 +127,7 @@ static const struct OamData sOamData_ScrollArrowIndicator = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -267,7 +267,7 @@ static const struct OamData sOamData_RedArrowCursor = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -312,14 +312,14 @@ static void ListMenuDummyTask(u8 taskId) } -s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 drawMode, u16 tileNum, u16 palNum) { switch (sMysteryGiftLinkMenu.state) { case 0: default: sMysteryGiftLinkMenu.windowId = AddWindow(windowTemplate); - switch (arg2) + switch (drawMode) { case 2: LoadUserWindowBorderGfx(sMysteryGiftLinkMenu.windowId, tileNum, palNum); @@ -330,7 +330,7 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str gMultiuseListMenuTemplate = *listMenuTemplate; gMultiuseListMenuTemplate.windowId = sMysteryGiftLinkMenu.windowId; sMysteryGiftLinkMenu.listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); - CopyWindowToVram(sMysteryGiftLinkMenu.windowId, 1); + CopyWindowToVram(sMysteryGiftLinkMenu.windowId, COPYWIN_MAP); sMysteryGiftLinkMenu.state = 1; break; case 1: @@ -346,13 +346,13 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str } if (sMysteryGiftLinkMenu.state == 2) { - if (arg2 == 0) + if (drawMode == 0) { ClearWindowTilemap(sMysteryGiftLinkMenu.windowId); } else { - switch (arg2) + switch (drawMode) { case 0: // can never be reached, because of the if statement above ClearStdWindowAndFrame(sMysteryGiftLinkMenu.windowId, FALSE); @@ -364,7 +364,7 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str } } - CopyWindowToVram(sMysteryGiftLinkMenu.windowId, 1); + CopyWindowToVram(sMysteryGiftLinkMenu.windowId, COPYWIN_MAP); } break; case 2: @@ -381,7 +381,7 @@ u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 { u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow); PutWindowTilemap(listMenuTemplate->windowId); - CopyWindowToVram(listMenuTemplate->windowId, 2); + CopyWindowToVram(listMenuTemplate->windowId, COPYWIN_GFX); return taskId; } @@ -401,14 +401,14 @@ u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenu rect[i].height, rect[i].palNum); } - CopyWindowToVram(listMenuTemplate->windowId, 2); + CopyWindowToVram(listMenuTemplate->windowId, COPYWIN_GFX); return taskId; } s32 ListMenu_ProcessInput(u8 listTaskId) { - struct ListMenu *list = (void*) gTasks[listTaskId].data; + struct ListMenu *list = (void *) gTasks[listTaskId].data; if (JOY_NEW(A_BUTTON)) { @@ -469,7 +469,7 @@ s32 ListMenu_ProcessInput(u8 listTaskId) void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow) { - struct ListMenu *list = (void*) gTasks[listTaskId].data; + struct ListMenu *list = (void *) gTasks[listTaskId].data; if (scrollOffset != NULL) *scrollOffset = list->scrollOffset; @@ -484,18 +484,18 @@ void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow) void RedrawListMenu(u8 listTaskId) { - struct ListMenu *list = (void*) gTasks[listTaskId].data; + struct ListMenu *list = (void *) gTasks[listTaskId].data; FillWindowPixelBuffer(list->template.windowId, PIXEL_FILL(list->template.fillValue)); ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed); ListMenuDrawCursor(list); - CopyWindowToVram(list->template.windowId, 2); + CopyWindowToVram(list->template.windowId, COPYWIN_GFX); } // unused void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal) { - struct ListMenu *list = (void*) gTasks[listTaskId].data; + struct ListMenu *list = (void *) gTasks[listTaskId].data; list->template.cursorPal = cursorPal; list->template.fillValue = fillValue; @@ -505,7 +505,7 @@ void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShad // unused void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y) { - struct ListMenu *list = (void*) gTasks[listTaskId].data; + struct ListMenu *list = (void *) gTasks[listTaskId].data; SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT, x); SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP, y); @@ -537,7 +537,7 @@ s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 s void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId) { - struct ListMenu *list = (void*) gTasks[listTaskId].data; + struct ListMenu *list = (void *) gTasks[listTaskId].data; if (arrayId != NULL) *arrayId = list->scrollOffset + list->selectedRow; @@ -545,7 +545,7 @@ void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId) void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow) { - struct ListMenu *list = (void*) gTasks[listTaskId].data; + struct ListMenu *list = (void *) gTasks[listTaskId].data; if (scrollOffset != NULL) *scrollOffset = list->scrollOffset; @@ -555,7 +555,7 @@ void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow) u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId) { - struct ListMenu *list = (void*) gTasks[listTaskId].data; + struct ListMenu *list = (void *) gTasks[listTaskId].data; u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding; return list->selectedRow * yMultiplier + list->template.upText_Y; @@ -564,7 +564,7 @@ u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId) static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow) { u8 listTaskId = CreateTask(ListMenuDummyTask, 0); - struct ListMenu *list = (void*) gTasks[listTaskId].data; + struct ListMenu *list = (void *) gTasks[listTaskId].data; list->template = *listMenuTemplate; list->scrollOffset = scrollOffset; @@ -604,7 +604,7 @@ static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y) gListMenuOverride.fontId, x, y, gListMenuOverride.lettersSpacing, - 0, colors, TEXT_SPEED_FF, str); + 0, colors, TEXT_SKIP_DRAW, str); gListMenuOverride.enabled = FALSE; } @@ -617,7 +617,7 @@ static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y) list->template.fontId, x, y, list->template.lettersSpacing, - 0, colors, TEXT_SPEED_FF, str); + 0, colors, TEXT_SKIP_DRAW, str); } } @@ -683,7 +683,7 @@ static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind) cursor.rowWidth = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8 + 2; cursor.rowHeight = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + 2; cursor.tileTag = 0x4000; - cursor.palTag = SPRITE_INVALID_TAG; + cursor.palTag = TAG_NONE; cursor.palNum = 15; return ListMenuAddCursorObjectInternal(&cursor, cursorKind); @@ -862,7 +862,7 @@ static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAn ListMenuErasePrintedCursor(list, oldSelectedRow); ListMenuDrawCursor(list); ListMenuCallSelectionChangedCallback(list, FALSE); - CopyWindowToVram(list->template.windowId, 2); + CopyWindowToVram(list->template.windowId, COPYWIN_GFX); break; case 2: case 3: @@ -870,7 +870,7 @@ static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAn ListMenuScroll(list, cursorCount, movingDown); ListMenuDrawCursor(list); ListMenuCallSelectionChangedCallback(list, FALSE); - CopyWindowToVram(list->template.windowId, 2); + CopyWindowToVram(list->template.windowId, COPYWIN_GFX); break; } } @@ -902,7 +902,7 @@ void ListMenuDefaultCursorMoveFunc(s32 itemIndex, bool8 onInit, struct ListMenu // unused s32 ListMenuGetUnkIndicatorsStructFields(u8 taskId, u8 field) { - struct UnkIndicatorsStruct *data = (void*) gTasks[taskId].data; + struct UnkIndicatorsStruct *data = (void *) gTasks[taskId].data; switch (field) { @@ -946,13 +946,13 @@ s32 ListMenuGetUnkIndicatorsStructFields(u8 taskId, u8 field) void ListMenuSetUnkIndicatorsStructField(u8 taskId, u8 field, s32 value) { - struct UnkIndicatorsStruct *data = (void*) &gTasks[taskId].data; + struct UnkIndicatorsStruct *data = (void *) &gTasks[taskId].data; switch (field) { case 0: case 1: - data->field_4 = (void*)(value); + data->field_4 = (void *)(value); break; case 2: data->field_C = value; @@ -1076,7 +1076,7 @@ u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16 spriteSheet.tag = arrowInfo->tileTag; LoadCompressedSpriteSheet(&spriteSheet); - if (arrowInfo->palTag == SPRITE_INVALID_TAG) + if (arrowInfo->palTag == TAG_NONE) { LoadPalette(sRedArrowPal, (16 * arrowInfo->palNum) + 0x100, 0x20); } @@ -1088,7 +1088,7 @@ u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16 } taskId = CreateTask(Task_ScrollIndicatorArrowPair, 0); - data = (void*) gTasks[taskId].data; + data = (void *) gTasks[taskId].data; data->field_0 = 0; data->scrollOffset = scrollOffset; @@ -1099,7 +1099,7 @@ u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16 data->topSpriteId = AddScrollIndicatorArrowObject(arrowInfo->firstArrowType, arrowInfo->firstX, arrowInfo->firstY, arrowInfo->tileTag, arrowInfo->palTag); data->bottomSpriteId = AddScrollIndicatorArrowObject(arrowInfo->secondArrowType, arrowInfo->secondX, arrowInfo->secondY, arrowInfo->tileTag, arrowInfo->palTag); - if (arrowInfo->palTag == SPRITE_INVALID_TAG) + if (arrowInfo->palTag == TAG_NONE) { gSprites[data->topSpriteId].oam.paletteNum = arrowInfo->palNum; gSprites[data->bottomSpriteId].oam.paletteNum = arrowInfo->palNum; @@ -1140,7 +1140,7 @@ u8 AddScrollIndicatorArrowPairParameterized(u32 arrowType, s32 commonPos, s32 fi static void Task_ScrollIndicatorArrowPair(u8 taskId) { - struct ScrollIndicatorPair *data = (void*) gTasks[taskId].data; + struct ScrollIndicatorPair *data = (void *) gTasks[taskId].data; u16 currItem = (*data->scrollOffset); if (currItem == data->fullyUpThreshold && currItem != 0xFFFF) @@ -1159,7 +1159,7 @@ static void Task_ScrollIndicatorArrowPair(u8 taskId) void Task_ScrollIndicatorArrowPairOnMainMenu(u8 taskId) { s16 *data = gTasks[taskId].data; - struct ScrollIndicatorPair *scrollData = (void*) data; + struct ScrollIndicatorPair *scrollData = (void *) data; if (tIsScrolled) { @@ -1177,11 +1177,11 @@ void Task_ScrollIndicatorArrowPairOnMainMenu(u8 taskId) void RemoveScrollIndicatorArrowPair(u8 taskId) { - struct ScrollIndicatorPair *data = (void*) gTasks[taskId].data; + struct ScrollIndicatorPair *data = (void *) gTasks[taskId].data; - if (data->tileTag != SPRITE_INVALID_TAG) + if (data->tileTag != TAG_NONE) FreeSpriteTilesByTag(data->tileTag); - if (data->palTag != SPRITE_INVALID_TAG) + if (data->palTag != TAG_NONE) FreeSpritePaletteByTag(data->palTag); DestroySprite(&gSprites[data->topSpriteId]); @@ -1322,7 +1322,7 @@ static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor) spriteSheet.tag = cursor->tileTag; LoadCompressedSpriteSheet(&spriteSheet); - if (cursor->palTag == SPRITE_INVALID_TAG) + if (cursor->palTag == TAG_NONE) { LoadPalette(sRedArrowPal, (16 * cursor->palNum) + 0x100, 0x20); } @@ -1334,7 +1334,7 @@ static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor) } taskId = CreateTask(Task_RedOutlineCursor, 0); - data = (void*) gTasks[taskId].data; + data = (void *) gTasks[taskId].data; data->tileTag = cursor->tileTag; data->palTag = cursor->palTag; @@ -1352,7 +1352,7 @@ static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor) gSprites[data->spriteId].subpriority = 0; gSprites[data->spriteId].subspriteTableNum = 0; - if (cursor->palTag == SPRITE_INVALID_TAG) + if (cursor->palTag == TAG_NONE) { gSprites[data->spriteId].oam.paletteNum = cursor->palNum; } @@ -1362,7 +1362,7 @@ static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor) static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y) { - struct RedOutlineCursor *data = (void*) gTasks[taskId].data; + struct RedOutlineCursor *data = (void *) gTasks[taskId].data; gSprites[data->spriteId].x = x + 120; gSprites[data->spriteId].y = y + 120; @@ -1370,13 +1370,13 @@ static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y) static void ListMenuRemoveRedOutlineCursorObject(u8 taskId) { - struct RedOutlineCursor *data = (void*) gTasks[taskId].data; + struct RedOutlineCursor *data = (void *) gTasks[taskId].data; Free(data->subspritesPtr); - if (data->tileTag != SPRITE_INVALID_TAG) + if (data->tileTag != TAG_NONE) FreeSpriteTilesByTag(data->tileTag); - if (data->palTag != SPRITE_INVALID_TAG) + if (data->palTag != TAG_NONE) FreeSpritePaletteByTag(data->palTag); DestroySprite(&gSprites[data->spriteId]); @@ -1407,7 +1407,7 @@ static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor) spriteSheet.tag = cursor->tileTag; LoadCompressedSpriteSheet(&spriteSheet); - if (cursor->palTag == SPRITE_INVALID_TAG) + if (cursor->palTag == TAG_NONE) { LoadPalette(sRedArrowPal, (16 * cursor->palNum) + 0x100, 0x20); } @@ -1419,7 +1419,7 @@ static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor) } taskId = CreateTask(Task_RedArrowCursor, 0); - data = (void*) gTasks[taskId].data; + data = (void *) gTasks[taskId].data; data->tileTag = cursor->tileTag; data->palTag = cursor->palTag; @@ -1432,7 +1432,7 @@ static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor) gSprites[data->spriteId].x2 = 8; gSprites[data->spriteId].y2 = 8; - if (cursor->palTag == SPRITE_INVALID_TAG) + if (cursor->palTag == TAG_NONE) { gSprites[data->spriteId].oam.paletteNum = cursor->palNum; } @@ -1442,7 +1442,7 @@ static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor) static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y) { - struct RedArrowCursor *data = (void*) gTasks[taskId].data; + struct RedArrowCursor *data = (void *) gTasks[taskId].data; gSprites[data->spriteId].x = x; gSprites[data->spriteId].y = y; @@ -1450,11 +1450,11 @@ static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y) static void ListMenuRemoveRedArrowCursorObject(u8 taskId) { - struct RedArrowCursor *data = (void*) gTasks[taskId].data; + struct RedArrowCursor *data = (void *) gTasks[taskId].data; - if (data->tileTag != SPRITE_INVALID_TAG) + if (data->tileTag != TAG_NONE) FreeSpriteTilesByTag(data->tileTag); - if (data->palTag != SPRITE_INVALID_TAG) + if (data->palTag != TAG_NONE) FreeSpritePaletteByTag(data->palTag); DestroySprite(&gSprites[data->spriteId]); diff --git a/src/load_save.c b/src/load_save.c index eec8f91aea..494a61bcf2 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -25,18 +25,13 @@ struct LoadedSaveData /*0x00F0*/ struct ItemSlot pokeBalls[BAG_POKEBALLS_COUNT]; /*0x0130*/ struct ItemSlot TMsHMs[BAG_TMHM_COUNT]; /*0x0230*/ struct ItemSlot berries[BAG_BERRIES_COUNT]; - /*0x02E8*/ struct MailStruct mail[MAIL_COUNT]; + /*0x02E8*/ struct Mail mail[MAIL_COUNT]; }; // EWRAM DATA -EWRAM_DATA struct SaveBlock2 gSaveblock2 = {0}; -EWRAM_DATA u8 gSaveblock2_DMA[SAVEBLOCK_MOVE_RANGE] = {0}; - -EWRAM_DATA struct SaveBlock1 gSaveblock1 = {0}; -EWRAM_DATA u8 gSaveblock1_DMA[SAVEBLOCK_MOVE_RANGE] = {0}; - -EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; -EWRAM_DATA u8 gSaveblock3_DMA[SAVEBLOCK_MOVE_RANGE] = {0}; +EWRAM_DATA struct SaveBlock2DMA gSaveblock2 = {0}; +EWRAM_DATA struct SaveBlock1DMA gSaveblock1 = {0}; +EWRAM_DATA struct PokemonStorageDMA gPokemonStorage = {0}; EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0}; EWRAM_DATA u32 gLastEncryptionKey = 0; @@ -63,23 +58,24 @@ void CheckForFlashMemory(void) void ClearSav2(void) { - CpuFill16(0, &gSaveblock2, sizeof(struct SaveBlock2) + sizeof(gSaveblock2_DMA)); + CpuFill16(0, &gSaveblock2, sizeof(struct SaveBlock2DMA)); } void ClearSav1(void) { - CpuFill16(0, &gSaveblock1, sizeof(struct SaveBlock1) + sizeof(gSaveblock1_DMA)); + CpuFill16(0, &gSaveblock1, sizeof(struct SaveBlock1DMA)); } +// Offset is the sum of the trainer id bytes void SetSaveBlocksPointers(u16 offset) { struct SaveBlock1** sav1_LocalVar = &gSaveBlock1Ptr; offset = (offset + Random()) & (SAVEBLOCK_MOVE_RANGE - 4); - gSaveBlock2Ptr = (void*)(&gSaveblock2) + offset; - *sav1_LocalVar = (void*)(&gSaveblock1) + offset; - gPokemonStoragePtr = (void*)(&gPokemonStorage) + offset; + gSaveBlock2Ptr = (void *)(&gSaveblock2) + offset; + *sav1_LocalVar = (void *)(&gSaveblock1) + offset; + gPokemonStoragePtr = (void *)(&gPokemonStorage) + offset; SetBagItemsPointers(); SetDecorationInventoriesPointers(); @@ -197,13 +193,13 @@ void LoadObjectEvents(void) gObjectEvents[i] = gSaveBlock1Ptr->objectEvents[i]; } -void SaveSerializedGame(void) +void CopyPartyAndObjectsToSave(void) { SavePlayerParty(); SaveObjectEvents(); } -void LoadSerializedGame(void) +void CopyPartyAndObjectsFromSave(void) { LoadPlayerParty(); LoadObjectEvents(); diff --git a/src/lottery_corner.c b/src/lottery_corner.c index 2cbf0a8089..f19e9f7b7b 100644 --- a/src/lottery_corner.c +++ b/src/lottery_corner.c @@ -113,7 +113,7 @@ void PickLotteryCornerTicket(void) gSpecialVar_0x8006 = 1; GetBoxMonData(&gPokemonStoragePtr->boxes[box][slot], MON_DATA_NICKNAME, gStringVar1); } - StringGetEnd10(gStringVar1); + StringGet_Nickname(gStringVar1); } } diff --git a/src/m4a.c b/src/m4a.c index b159e3873d..7774d09cba 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -83,7 +83,7 @@ void m4aSoundInit(void) for (i = 0; i < NUM_MUSIC_PLAYERS; i++) { struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info; - MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8); + MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].numTracks); mplayInfo->unk_B = gMPlayTable[i].unk_A; mplayInfo->memAccArea = gMPlayMemAccArea; } @@ -1178,7 +1178,7 @@ void CgbSound(void) *nrx3ptr = channels->frequency; else *nrx3ptr = (*nrx3ptr & 0x08) | channels->frequency; - channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->frequency) + 1)); + channels->n4 = (channels->n4 & 0xC0) + (*((u8 *)(&channels->frequency) + 1)); *nrx4ptr = (s8)(channels->n4 & mask); } diff --git a/src/m4a_1.s b/src/m4a_1.s index 62b913c863..3f15788061 100644 --- a/src/m4a_1.s +++ b/src/m4a_1.s @@ -302,7 +302,7 @@ _081DD044: ldrb r0, [r4, o_SoundChannel_type] tst r0, TONEDATA_TYPE_CMP | TONEDATA_TYPE_REV beq _081DD068 - bl sub_82DF49C + bl SoundMainRAM_Unk1 b _081DD228 _081DD068: mov r10, r10, lsl 16 @@ -465,8 +465,9 @@ _081DD25E: .pool thumb_func_end SoundMainRAM - arm_func_start sub_82DF49C -sub_82DF49C: +@ Not present in GBA SDK 3.0 + arm_func_start SoundMainRAM_Unk1 +SoundMainRAM_Unk1: ldr r6, [r4, o_SoundChannel_wav] ldrb r0, [r4, o_SoundChannel_statusFlags] tst r0, SOUND_CHANNEL_SF_SPECIAL @@ -505,10 +506,10 @@ _081DD2B4: ldrb r0, [r4, o_SoundChannel_type] tst r0, TONEDATA_TYPE_REV bne _081DD3C0 - bl sub_82DF758 + bl SoundMainRAM_Unk2 mov r0, r1 add r3, r3, 0x1 - bl sub_82DF758 + bl SoundMainRAM_Unk2 sub r1, r1, r0 _081DD308: ldr r6, [r5] @@ -534,11 +535,11 @@ _081DD310: b _081DD364 _081DD358: add r3, r3, lr - bl sub_82DF758 + bl SoundMainRAM_Unk2 mov r0, r1 _081DD364: add r3, r3, 0x1 - bl sub_82DF758 + bl SoundMainRAM_Unk2 sub r1, r1, r0 _081DD370: adds r5, r5, 0x40000000 @@ -565,10 +566,10 @@ _081DD3B0: b _081DD3B0 _081DD3C0: sub r3, r3, 0x1 - bl sub_82DF758 + bl SoundMainRAM_Unk2 mov r0, r1 sub r3, r3, 0x1 - bl sub_82DF758 + bl SoundMainRAM_Unk2 sub r1, r1, r0 _081DD3D8: ldr r6, [r5] @@ -594,11 +595,11 @@ _081DD3E0: b _081DD434 _081DD428: sub r3, r3, lr - bl sub_82DF758 + bl SoundMainRAM_Unk2 mov r0, r1 _081DD434: sub r3, r3, 0x1 - bl sub_82DF758 + bl SoundMainRAM_Unk2 sub r1, r1, r0 _081DD440: adds r5, r5, 0x40000000 @@ -663,10 +664,11 @@ _081DD4F4: str r7, [r5, 0x630] str r6, [r5], 0x4 pop {r8,r12,pc} - arm_func_end sub_82DF49C + arm_func_end SoundMainRAM_Unk1 - arm_func_start sub_82DF758 -sub_82DF758: +@ Not present in GBA SDK 3.0 + arm_func_start SoundMainRAM_Unk2 +SoundMainRAM_Unk2: push {r0,r2,r5-r7,lr} mov r0, r3, lsr 6 ldr r1, [r4, o_SoundChannel_xpi] @@ -678,7 +680,7 @@ sub_82DF758: ldr r1, [r4, o_SoundChannel_wav] add r2, r2, r1 add r2, r2, 0x10 - ldr r5, =gDecodingBuffer + ldr r5, =sDecodingBuffer ldr r6, =gDeltaEncodingTable mov r7, 0x40 ldrb lr, [r2], 1 @@ -699,12 +701,12 @@ _081DD57C: subs r7, r7, 2 bgt _081DD568 _081DD594: - ldr r5, =gDecodingBuffer + ldr r5, =sDecodingBuffer and r0, r3, 0x3F ldrsb r1, [r5, r0] pop {r0,r2,r5-r7,pc} .pool - arm_func_end sub_82DF758 + arm_func_end SoundMainRAM_Unk2 thumb_func_start SoundMainBTM SoundMainBTM: @@ -1908,27 +1910,7 @@ _081DDD90: .align 2, 0 @ Don't pad with nop. - .bss -gDecodingBuffer: @ Used as a buffer for audio decoded from compressed DPCM - .space 0x40 - .size gDecodingBuffer, .-gDecodingBuffer - - .global gMPlayTrack_BGM -gMPlayTrack_BGM: - .space 0x320 - .size gMPlayTrack_BGM, .-gMPlayTrack_BGM - - .global gMPlayTrack_SE1 -gMPlayTrack_SE1: - .space 0xF0 - .size gMPlayTrack_SE1, .-gMPlayTrack_SE1 - - .global gMPlayTrack_SE2 -gMPlayTrack_SE2: - .space 0x2D0 - .size gMPlayTrack_SE2, .-gMPlayTrack_SE2 - - .global gMPlayTrack_SE3 -gMPlayTrack_SE3: - .space 0x50 - .size gMPlayTrack_SE3, .-gMPlayTrack_SE3 + .bss +sDecodingBuffer: @ Used as a buffer for audio decoded from compressed DPCM + .space 0x40 + .size sDecodingBuffer, .-sDecodingBuffer diff --git a/src/mail.c b/src/mail.c index 70c53074db..c697ff4c4e 100644 --- a/src/mail.c +++ b/src/mail.c @@ -61,7 +61,7 @@ struct MailRead /*0x0200*/ u8 playerName[12]; /*0x020C*/ MainCallback exitCallback; /*0x0210*/ MainCallback callback; - /*0x0214*/ struct MailStruct *mail; + /*0x0214*/ struct Mail *mail; /*0x0218*/ bool8 hasText; /*0x0219*/ u8 signatureWidth; /*0x021a*/ u8 mailType; @@ -69,8 +69,8 @@ struct MailRead /*0x021c*/ u8 monIconSpriteId; /*0x021d*/ u8 language; /*0x021e*/ bool8 international; - /*0x0220*/ u8 * (*parserSingle)(u8 *dest, u16 word); - /*0x0224*/ u8 * (*parserMultiple)(u8 *dest, const u16 *src, u16 length1, u16 length2); + /*0x0220*/ u8 *(*parserSingle)(u8 *dest, u16 word); + /*0x0224*/ u8 *(*parserMultiple)(u8 *dest, const u16 *src, u16 length1, u16 length2); /*0x0228*/ const struct MailLayout *layout; /*0x022c*/ u8 bg1TilemapBuffer[0x1000]; /*0x122c*/ u8 bg2TilemapBuffer[0x1000]; @@ -134,98 +134,98 @@ static const u16 sBgColors[GENDER_COUNT][2] = { static const struct MailGraphics sMailGraphics[] = { [ITEM_TO_MAIL(ITEM_ORANGE_MAIL)] = { - .palette = gMailPalette_Orange, - .tiles = gMailTiles_Orange, - .tileMap = gMailTilemap_Orange, - .unused = 0x2C0, + .palette = gMailPalette_Orange, + .tiles = gMailTiles_Orange, + .tileMap = gMailTilemap_Orange, + .unused = 0x2C0, .textColor = RGB(10, 10, 10), .textShadow = RGB(25, 25, 25), - }, + }, [ITEM_TO_MAIL(ITEM_HARBOR_MAIL)] = { - .palette = gMailPalette_Harbor, - .tiles = gMailTiles_Harbor, - .tileMap = gMailTilemap_Harbor, - .unused = 0x2E0, + .palette = gMailPalette_Harbor, + .tiles = gMailTiles_Harbor, + .tileMap = gMailTilemap_Harbor, + .unused = 0x2E0, .textColor = RGB_WHITE, .textShadow = RGB(17, 17, 17), }, [ITEM_TO_MAIL(ITEM_GLITTER_MAIL)] = { - .palette = gMailPalette_Glitter, - .tiles = gMailTiles_Glitter, - .tileMap = gMailTilemap_Glitter, - .unused = 0x400, + .palette = gMailPalette_Glitter, + .tiles = gMailTiles_Glitter, + .tileMap = gMailTilemap_Glitter, + .unused = 0x400, .textColor = RGB(10, 10, 10), .textShadow = RGB(25, 25, 25), - }, + }, [ITEM_TO_MAIL(ITEM_MECH_MAIL)] = { - .palette = gMailPalette_Mech, - .tiles = gMailTiles_Mech, - .tileMap = gMailTilemap_Mech, - .unused = 0x1E0, + .palette = gMailPalette_Mech, + .tiles = gMailTiles_Mech, + .tileMap = gMailTilemap_Mech, + .unused = 0x1E0, .textColor = RGB_WHITE, .textShadow = RGB(17, 17, 17), - }, + }, [ITEM_TO_MAIL(ITEM_WOOD_MAIL)] = { - .palette = gMailPalette_Wood, - .tiles = gMailTiles_Wood, - .tileMap = gMailTilemap_Wood, - .unused = 0x2E0, + .palette = gMailPalette_Wood, + .tiles = gMailTiles_Wood, + .tileMap = gMailTilemap_Wood, + .unused = 0x2E0, .textColor = RGB_WHITE, .textShadow = RGB(17, 17, 17), - }, + }, [ITEM_TO_MAIL(ITEM_WAVE_MAIL)] = { - .palette = gMailPalette_Wave, - .tiles = gMailTiles_Wave, - .tileMap = gMailTilemap_Wave, - .unused = 0x300, + .palette = gMailPalette_Wave, + .tiles = gMailTiles_Wave, + .tileMap = gMailTilemap_Wave, + .unused = 0x300, .textColor = RGB(10, 10, 10), .textShadow = RGB(25, 25, 25), - }, + }, [ITEM_TO_MAIL(ITEM_BEAD_MAIL)] = { - .palette = gMailPalette_Bead, - .tiles = gMailTiles_Bead, - .tileMap = gMailTilemap_Bead, - .unused = 0x140, + .palette = gMailPalette_Bead, + .tiles = gMailTiles_Bead, + .tileMap = gMailTilemap_Bead, + .unused = 0x140, .textColor = RGB_WHITE, .textShadow = RGB(17, 17, 17), - }, + }, [ITEM_TO_MAIL(ITEM_SHADOW_MAIL)] = { - .palette = gMailPalette_Shadow, - .tiles = gMailTiles_Shadow, - .tileMap = gMailTilemap_Shadow, - .unused = 0x300, + .palette = gMailPalette_Shadow, + .tiles = gMailTiles_Shadow, + .tileMap = gMailTilemap_Shadow, + .unused = 0x300, .textColor = RGB_WHITE, .textShadow = RGB(17, 17, 17), - }, + }, [ITEM_TO_MAIL(ITEM_TROPIC_MAIL)] = { - .palette = gMailPalette_Tropic, - .tiles = gMailTiles_Tropic, - .tileMap = gMailTilemap_Tropic, - .unused = 0x220, + .palette = gMailPalette_Tropic, + .tiles = gMailTiles_Tropic, + .tileMap = gMailTilemap_Tropic, + .unused = 0x220, .textColor = RGB(10, 10, 10), .textShadow = RGB(25, 25, 25), - }, + }, [ITEM_TO_MAIL(ITEM_DREAM_MAIL)] = { - .palette = gMailPalette_Dream, - .tiles = gMailTiles_Dream, - .tileMap = gMailTilemap_Dream, - .unused = 0x340, + .palette = gMailPalette_Dream, + .tiles = gMailTiles_Dream, + .tileMap = gMailTilemap_Dream, + .unused = 0x340, .textColor = RGB(10, 10, 10), .textShadow = RGB(25, 25, 25), - }, + }, [ITEM_TO_MAIL(ITEM_FAB_MAIL)] = { - .palette = gMailPalette_Fab, - .tiles = gMailTiles_Fab, - .tileMap = gMailTilemap_Fab, - .unused = 0x2a0, + .palette = gMailPalette_Fab, + .tiles = gMailTiles_Fab, + .tileMap = gMailTilemap_Fab, + .unused = 0x2a0, .textColor = RGB(10, 10, 10), .textShadow = RGB(25, 25, 25), - }, + }, [ITEM_TO_MAIL(ITEM_RETRO_MAIL)] = { - .palette = gMailPalette_Retro, - .tiles = gMailTiles_Retro, - .tileMap = gMailTilemap_Retro, - .unused = 0x520, + .palette = gMailPalette_Retro, + .tiles = gMailTiles_Retro, + .tileMap = gMailTilemap_Retro, + .unused = 0x520, .textColor = RGB(10, 10, 10), .textShadow = RGB(25, 25, 25), } @@ -238,7 +238,7 @@ static const struct MailLineLayout sLineLayouts_Wide[] = { }; static const struct MailLayout sMailLayouts_Wide[] = { - [ITEM_TO_MAIL(ITEM_ORANGE_MAIL)] = { + [ITEM_TO_MAIL(ITEM_ORANGE_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -246,7 +246,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_HARBOR_MAIL)] = { + [ITEM_TO_MAIL(ITEM_HARBOR_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -254,7 +254,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_GLITTER_MAIL)] = { + [ITEM_TO_MAIL(ITEM_GLITTER_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -262,7 +262,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_MECH_MAIL)] = { + [ITEM_TO_MAIL(ITEM_MECH_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -270,7 +270,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_WOOD_MAIL)] = { + [ITEM_TO_MAIL(ITEM_WOOD_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -278,7 +278,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_WAVE_MAIL)] = { + [ITEM_TO_MAIL(ITEM_WAVE_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -286,7 +286,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_BEAD_MAIL)] = { + [ITEM_TO_MAIL(ITEM_BEAD_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -294,7 +294,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_SHADOW_MAIL)] = { + [ITEM_TO_MAIL(ITEM_SHADOW_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -302,7 +302,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_TROPIC_MAIL)] = { + [ITEM_TO_MAIL(ITEM_TROPIC_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -310,7 +310,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_DREAM_MAIL)] = { + [ITEM_TO_MAIL(ITEM_DREAM_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -318,7 +318,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_FAB_MAIL)] = { + [ITEM_TO_MAIL(ITEM_FAB_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 8, .signatureWidth = 0, @@ -326,7 +326,7 @@ static const struct MailLayout sMailLayouts_Wide[] = { .wordsXPos = 4, .lines = sLineLayouts_Wide, }, - [ITEM_TO_MAIL(ITEM_RETRO_MAIL)] = { + [ITEM_TO_MAIL(ITEM_RETRO_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Wide), .signatureYPos = 0, .signatureWidth = 0, @@ -345,7 +345,7 @@ static const struct MailLineLayout sLineLayouts_Tall[] = { }; static const struct MailLayout sMailLayouts_Tall[] = { - [ITEM_TO_MAIL(ITEM_ORANGE_MAIL)] = { + [ITEM_TO_MAIL(ITEM_ORANGE_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 7, .signatureWidth = 88, @@ -353,7 +353,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_HARBOR_MAIL)] = { + [ITEM_TO_MAIL(ITEM_HARBOR_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 10, .signatureWidth = 96, @@ -361,7 +361,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_GLITTER_MAIL)] = { + [ITEM_TO_MAIL(ITEM_GLITTER_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 12, .signatureWidth = 104, @@ -369,7 +369,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_MECH_MAIL)] = { + [ITEM_TO_MAIL(ITEM_MECH_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 5, .signatureWidth = 96, @@ -377,7 +377,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_WOOD_MAIL)] = { + [ITEM_TO_MAIL(ITEM_WOOD_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 10, .signatureWidth = 96, @@ -385,7 +385,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_WAVE_MAIL)] = { + [ITEM_TO_MAIL(ITEM_WAVE_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 9, .signatureWidth = 112, @@ -393,7 +393,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_BEAD_MAIL)] = { + [ITEM_TO_MAIL(ITEM_BEAD_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 12, .signatureWidth = 104, @@ -401,7 +401,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_SHADOW_MAIL)] = { + [ITEM_TO_MAIL(ITEM_SHADOW_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 13, .signatureWidth = 104, @@ -409,7 +409,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_TROPIC_MAIL)] = { + [ITEM_TO_MAIL(ITEM_TROPIC_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 9, .signatureWidth = 96, @@ -417,7 +417,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_DREAM_MAIL)] = { + [ITEM_TO_MAIL(ITEM_DREAM_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 9, .signatureWidth = 96, @@ -425,7 +425,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_FAB_MAIL)] = { + [ITEM_TO_MAIL(ITEM_FAB_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 17, .signatureWidth = 104, @@ -433,7 +433,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { .wordsXPos = 30, .lines = sLineLayouts_Tall, }, - [ITEM_TO_MAIL(ITEM_RETRO_MAIL)] = { + [ITEM_TO_MAIL(ITEM_RETRO_MAIL)] = { .numLines = ARRAY_COUNT(sLineLayouts_Tall), .signatureYPos = 9, .signatureWidth = 96, @@ -443,7 +443,7 @@ static const struct MailLayout sMailLayouts_Tall[] = { }, }; -void ReadMail(struct MailStruct *mail, void (*exitCallback)(void), bool8 hasText) +void ReadMail(struct Mail *mail, void (*exitCallback)(void), bool8 hasText) { u16 buffer[2]; u16 species; @@ -593,10 +593,8 @@ static bool8 MailReadBuildGraphics(void) } break; case 15: - if (Overworld_LinkRecvQueueLengthMoreThan2() == TRUE) - { + if (Overworld_IsRecvQueueAtMax() == TRUE) return FALSE; - } break; case 16: SetVBlankCallback(VBlankCB_MailRead); @@ -641,7 +639,7 @@ static void CB2_InitMailRead(void) SetMainCallback2(CB2_MailRead); break; } - } while (MenuHelpers_LinkSomething() != TRUE); + } while (MenuHelpers_IsLinkActive() != TRUE); } static void BufferMailText(void) @@ -692,16 +690,16 @@ static void PrintMailText(void) if (sMailRead->message[i][0] == EOS || sMailRead->message[i][0] == CHAR_SPACE) continue; - AddTextPrinterParameterized3(0, 1, sMailRead->layout->lines[i].xOffset + sMailRead->layout->wordsXPos, y + sMailRead->layout->wordsYPos, sTextColors, 0, sMailRead->message[i]); + AddTextPrinterParameterized3(0, FONT_NORMAL, sMailRead->layout->lines[i].xOffset + sMailRead->layout->wordsXPos, y + sMailRead->layout->wordsYPos, sTextColors, 0, sMailRead->message[i]); y += sMailRead->layout->lines[i].height; } bufptr = StringCopy(signature, gText_FromSpace); StringCopy(bufptr, sMailRead->playerName); - box_x = GetStringCenterAlignXOffset(1, signature, sMailRead->signatureWidth) + 104; + box_x = GetStringCenterAlignXOffset(FONT_NORMAL, signature, sMailRead->signatureWidth) + 104; box_y = sMailRead->layout->signatureYPos + 88; - AddTextPrinterParameterized3(0, 1, box_x, box_y, sTextColors, 0, signature); - CopyWindowToVram(0, 3); - CopyWindowToVram(1, 3); + AddTextPrinterParameterized3(0, FONT_NORMAL, box_x, box_y, sTextColors, 0, signature); + CopyWindowToVram(0, COPYWIN_FULL); + CopyWindowToVram(1, COPYWIN_FULL); } static void VBlankCB_MailRead(void) diff --git a/src/mail_data.c b/src/mail_data.c index 2ae9bedab7..99cf1f9edd 100644 --- a/src/mail_data.c +++ b/src/mail_data.c @@ -5,17 +5,18 @@ #include "pokemon_icon.h" #include "text.h" #include "international_string_util.h" -#include "constants/easy_chat.h" -void ClearMailData(void) +#define UNOWN_OFFSET 30000 + +void ClearAllMail(void) { u8 i; for (i = 0; i < MAIL_COUNT; i++) - ClearMailStruct(&gSaveBlock1Ptr->mail[i]); + ClearMail(&gSaveBlock1Ptr->mail[i]); } -void ClearMailStruct(struct MailStruct *mail) +void ClearMail(struct Mail *mail) { s32 i; @@ -41,7 +42,7 @@ bool8 MonHasMail(struct Pokemon *mon) return FALSE; } -u8 GiveMailToMon(struct Pokemon *mon, u16 itemId) +u8 GiveMailToMonByItemId(struct Pokemon *mon, u16 itemId) { u8 heldItem[2]; u8 id, i; @@ -83,7 +84,7 @@ u16 SpeciesToMailSpecies(u16 species, u32 personality) { if (species == SPECIES_UNOWN) { - u32 species = GetUnownLetterByPersonality(personality) + 30000; + u32 species = GetUnownLetterByPersonality(personality) + UNOWN_OFFSET; return species; } @@ -94,10 +95,10 @@ u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer) { u16 result; - if (mailSpecies >= 30000 && mailSpecies < (30000 + NUM_UNOWN_FORMS)) + if (mailSpecies >= UNOWN_OFFSET && mailSpecies < UNOWN_OFFSET + NUM_UNOWN_FORMS) { result = SPECIES_UNOWN; - *buffer = mailSpecies - 30000; + *buffer = mailSpecies - UNOWN_OFFSET; } else { @@ -107,11 +108,11 @@ u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer) return result; } -u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail) +u8 GiveMailToMon(struct Pokemon *mon, struct Mail *mail) { u8 heldItem[2]; u16 itemId = mail->itemId; - u8 mailId = GiveMailToMon(mon, itemId); + u8 mailId = GiveMailToMonByItemId(mon, itemId); if (mailId == MAIL_NONE) return MAIL_NONE; @@ -155,7 +156,7 @@ void ClearMailItemId(u8 mailId) gSaveBlock1Ptr->mail[mailId].itemId = ITEM_NONE; } -u8 TakeMailFromMon2(struct Pokemon *mon) +u8 TakeMailFromMonAndSave(struct Pokemon *mon) { u8 i; u8 newHeldItem[2]; @@ -169,7 +170,7 @@ u8 TakeMailFromMon2(struct Pokemon *mon) { if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE) { - memcpy(&gSaveBlock1Ptr->mail[i], &gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct MailStruct)); + memcpy(&gSaveBlock1Ptr->mail[i], &gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct Mail)); gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)].itemId = ITEM_NONE; SetMonData(mon, MON_DATA_MAIL, &newMailId); SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem); @@ -177,6 +178,7 @@ u8 TakeMailFromMon2(struct Pokemon *mon) } } + // No space to save mail return MAIL_NONE; } diff --git a/src/main.c b/src/main.c index 3125716e25..5fd236447b 100644 --- a/src/main.c +++ b/src/main.c @@ -57,7 +57,7 @@ const IntrFunc gIntrTableTemplate[] = #define INTR_COUNT ((int)(sizeof(gIntrTableTemplate)/sizeof(IntrFunc))) -static u16 gUnknown_03000000; +static u16 sUnusedVar; // Never read u16 gKeyRepeatStartDelay; bool8 gLinkTransferringData; @@ -69,7 +69,7 @@ u8 gLinkVSyncDisabled; u32 IntrMain_Buffer[0x200]; s8 gPcmDmaCounter; -static EWRAM_DATA u16 gTrainerId = 0; +static EWRAM_DATA u16 sTrainerId = 0; //EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL; @@ -117,7 +117,7 @@ void AgbMain() SetMainCallback2(NULL); gLinkTransferringData = FALSE; - gUnknown_03000000 = 0xFC0; + sUnusedVar = 0xFC0; for (;;) { @@ -172,8 +172,8 @@ static void InitMainCallbacks(void) gMain.vblankCounter2 = 0; gMain.callback1 = NULL; SetMainCallback2(CB2_InitCopyrightScreenAfterBootup); - gSaveBlock2Ptr = &gSaveblock2; - gPokemonStoragePtr = &gPokemonStorage; + gSaveBlock2Ptr = &gSaveblock2.block; + gPokemonStoragePtr = &gPokemonStorage.block; } static void CallCallbacks(void) @@ -201,12 +201,12 @@ void SeedRngAndSetTrainerId(void) u16 val = REG_TM1CNT_L; SeedRng(val); REG_TM1CNT_H = 0; - gTrainerId = val; + sTrainerId = val; } u16 GetGeneratedTrainerIdLower(void) { - return gTrainerId; + return sTrainerId; } void EnableVCountIntrAtLine150(void) diff --git a/src/main_menu.c b/src/main_menu.c index ec5a3785fd..b8abffda57 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -35,22 +35,22 @@ #include "text_window.h" #include "title_screen.h" #include "window.h" -#include "mystery_gift.h" +#include "mystery_gift_menu.h" /* * Main menu state machine * ----------------------- - * + * * Entry point: CB2_InitMainMenu - * + * * Note: States advance sequentially unless otherwise stated. - * + * * CB2_InitMainMenu / CB2_ReinitMainMenu * - Both of these states call InitMainMenu, which does all the work. * - In the Reinit case, the init code will check if the user came from * the options screen. If they did, then the options menu item is * pre-selected. - * + * * Task_MainMenuCheckSaveFile * - Determines how many menu options to show based on whether * the save file is Ok, empty, corrupted, etc. @@ -59,52 +59,52 @@ * - If there were no errors, advance to Task_MainMenuCheckBattery. * - Note that the check to enable Mystery Events would normally happen * here, but this version of Emerald has them disabled. - * + * * Task_WaitForSaveFileErrorWindow * - Wait for the text to finish printing and then for the A button * to be pressed. - * + * * Task_MainMenuCheckBattery * - If the battery is OK, advance to Task_DisplayMainMenu. * - If the battery is dry, advance to Task_WaitForBatteryDryErrorWindow. - * + * * Task_WaitForBatteryDryErrorWindow * - Wait for the text to finish printing and then for the A button * to be pressed. - * + * * Task_DisplayMainWindow * - Display the buttons to the user. If the menu is in HAS_MYSTERY_EVENTS * mode, there are too many buttons for one screen and a scrollbar is added, * and the scrollbar task is spawned (Task_ScrollIndicatorArrowPairOnMainMenu). - * + * * Task_HighlightSelectedMainMenuItem * - Update the UI to match the currently selected item. - * + * * Task_HandleMainMenuInput * - If A is pressed, advance to Task_HandleMainMenuAPressed. * - If B is pressed, return to the title screen via CB2_InitTitleScreen. * - If Up or Down is pressed, handle scrolling if there is a scroll bar, change * the selection, then go back to Task_HighlightSelectedMainMenuItem. - * + * * Task_HandleMainMenuAPressed * - If the user selected New Game, advance to Task_NewGameBirchSpeech_Init. * - If the user selected Continue, advance to CB2_ContinueSavedGame. * - If the user selected the Options menu, advance to CB2_InitOptionMenu. - * - If the user selected Mystery Gift, advance to CB2_MysteryGift. However, + * - If the user selected Mystery Gift, advance to CB2_InitMysteryGift. However, * if the wireless adapter was removed, instead advance to * Task_DisplayMainMenuInvalidActionError. * - Code to start a Mystery Event is present here, but is unreachable in this * version. - * + * * Task_HandleMainMenuBPressed * - Clean up the main menu and go back to CB2_InitTitleScreen. - * + * * Task_DisplayMainMenuInvalidActionError * - Print one of three different error messages, wait for the text to stop * printing, and then wait for A or B to be pressed. * - Then advance to Task_HandleMainMenuBPressed. - * - * Task_NewGameBirchSpeechInit + * + * Task_NewGameBirchSpeech_Init * - Load the sprites for the intro speech, start playing music * Task_NewGameBirchSpeech_WaitToShowBirch * - Spawn Task_NewGameBirchSpeech_FadeInTarget1OutTarget2 @@ -126,11 +126,11 @@ * - Animates by advancing to Task_NewGameBirchSpeech_SlideOutOldGenderSprite * whenever the player's selection changes. * - Advances to Task_NewGameBirchSpeech_WhatsYourName when done. - * + * * Task_NewGameBirchSpeech_SlideOutOldGenderSprite * Task_NewGameBirchSpeech_SlideInNewGenderSprite * - Returns back to Task_NewGameBirchSpeech_ChooseGender. - * + * * Task_NewGameBirchSpeech_WhatsYourName * Task_NewGameBirchSpeech_WaitForWhatsYourNameToPrint * Task_NewGameBirchSpeech_WaitPressBeforeNameChoice @@ -144,7 +144,7 @@ * Task_NewGameBirchSpeech_ProcessNameYesNoMenu * - If confirmed, advance to Task_NewGameBirchSpeech_SlidePlatformAway2. * - Otherwise, return to Task_NewGameBirchSpeech_BoyOrGirl. - * + * * Task_NewGameBirchSpeech_SlidePlatformAway2 * Task_NewGameBirchSpeech_ReshowBirchLotad * Task_NewGameBirchSpeech_WaitForSpriteFadeInAndTextPrinter @@ -154,23 +154,20 @@ * Task_NewGameBirchSpeech_FadePlayerToWhite * Task_NewGameBirchSpeech_Cleanup * - Advances to CB2_NewGame. - * + * * Task_NewGameBirchSpeechSub_InitPokeball * - Advances to Task_NewGameBirchSpeechSub_WaitForLotad * Task_NewGameBirchSpeechSub_WaitForLotad * - Destroys itself when done. */ -// These two defines are used with the sCurrItemAndOptionsMenuCheck, -// to distinguish between its two parts. -#define OPTION_MENU_FLAG 0x8000 -#define CURRENT_ITEM_MASK 0x7FFF +#define OPTION_MENU_FLAG (1 << 15) // Static type declarations // Static RAM declarations -static EWRAM_DATA u8 gUnknown_02022D04 = 0; +static EWRAM_DATA bool8 sStartedPokeBallTask = 0; static EWRAM_DATA u16 sCurrItemAndOptionMenuCheck = 0; static u8 sBirchSpeechMainTaskId; @@ -181,8 +178,8 @@ static u32 InitMainMenu(bool8); static void Task_MainMenuCheckSaveFile(u8); static void Task_MainMenuCheckBattery(u8); static void Task_WaitForSaveFileErrorWindow(u8); -static void CreateMainMenuErrorWindow(const u8*); -static void ClearMainMenuWindowTilemap(const struct WindowTemplate*); +static void CreateMainMenuErrorWindow(const u8 *); +static void ClearMainMenuWindowTilemap(const struct WindowTemplate *); static void Task_DisplayMainMenu(u8); static void Task_WaitForBatteryDryErrorWindow(u8); static void MainMenu_FormatSavegameText(void); @@ -201,7 +198,7 @@ static void NewGameBirchSpeech_ShowDialogueWindow(u8, u8); static void NewGameBirchSpeech_ClearWindow(u8); static void Task_NewGameBirchSpeech_ThisIsAPokemon(u8); static void Task_NewGameBirchSpeech_MainSpeech(u8); -static void NewGameBirchSpeech_ShowPokeBallPrinterCallback(struct TextPrinterTemplate *printer, u16 a); +static void NewGameBirchSpeech_WaitForThisIsPokemonText(struct TextPrinterTemplate *, u16); static void Task_NewGameBirchSpeech_AndYouAre(u8); static void Task_NewGameBirchSpeechSub_WaitForLotad(u8); static void Task_NewGameBirchSpeech_StartBirchLotadPlatformFade(u8); @@ -212,7 +209,7 @@ static void Task_NewGameBirchSpeech_StartPlayerFadeIn(u8); static void Task_NewGameBirchSpeech_WaitForPlayerFadeIn(u8); static void Task_NewGameBirchSpeech_BoyOrGirl(u8); static void LoadMainMenuWindowFrameTiles(u8, u16); -static void DrawMainMenuWindowBorder(const struct WindowTemplate*, u16); +static void DrawMainMenuWindowBorder(const struct WindowTemplate *, u16); static void Task_HighlightSelectedMainMenuItem(u8); static void Task_NewGameBirchSpeech_WaitToShowGenderMenu(u8); static void Task_NewGameBirchSpeech_ChooseGender(u8); @@ -235,7 +232,7 @@ static void Task_NewGameBirchSpeech_ReshowBirchLotad(u8); static void Task_NewGameBirchSpeech_WaitForSpriteFadeInAndTextPrinter(u8); static void Task_NewGameBirchSpeech_AreYouReady(u8); static void Task_NewGameBirchSpeech_ShrinkPlayer(u8); -static void SpriteCB_MovePlayerDownWhileShrinking(struct Sprite*); +static void SpriteCB_MovePlayerDownWhileShrinking(struct Sprite *); static void Task_NewGameBirchSpeech_WaitForPlayerShrink(u8); static void Task_NewGameBirchSpeech_FadePlayerToWhite(u8); static void Task_NewGameBirchSpeech_Cleanup(u8); @@ -374,7 +371,7 @@ static const struct WindowTemplate sWindowTemplates_MainMenu[] = DUMMY_WIN_TEMPLATE }; -static const struct WindowTemplate gNewGameBirchSpeechTextWindows[] = +static const struct WindowTemplate sNewGameBirchSpeechTextWindows[] = { { .bg = 0, @@ -406,8 +403,8 @@ static const struct WindowTemplate gNewGameBirchSpeechTextWindows[] = DUMMY_WIN_TEMPLATE }; -static const u16 sMainMenuBgPal[] = INCBIN_U16("graphics/misc/main_menu_bg.gbapal"); -static const u16 sMainMenuTextPal[] = INCBIN_U16("graphics/misc/main_menu_text.gbapal"); +static const u16 sMainMenuBgPal[] = INCBIN_U16("graphics/interface/main_menu_bg.gbapal"); +static const u16 sMainMenuTextPal[] = INCBIN_U16("graphics/interface/main_menu_text.gbapal"); static const u8 sTextColor_Headers[] = {TEXT_DYNAMIC_COLOR_1, TEXT_DYNAMIC_COLOR_2, TEXT_DYNAMIC_COLOR_3}; static const u8 sTextColor_MenuInfo[] = {TEXT_DYNAMIC_COLOR_1, TEXT_COLOR_WHITE, TEXT_DYNAMIC_COLOR_3}; @@ -460,7 +457,7 @@ static const struct MenuAction sMenuActions_Gender[] = { {gText_BirchGirl, NULL} }; -static const u8 *const gMalePresetNames[] = { +static const u8 *const sMalePresetNames[] = { gText_DefaultNameStu, gText_DefaultNameMilton, gText_DefaultNameTom, @@ -483,7 +480,7 @@ static const u8 *const gMalePresetNames[] = { gText_DefaultNameQuincy }; -static const u8 *const gFemalePresetNames[] = { +static const u8 *const sFemalePresetNames[] = { gText_DefaultNameKimmy, gText_DefaultNameTiara, gText_DefaultNameBella, @@ -586,10 +583,10 @@ static u32 InitMainMenu(bool8 returningFromOptionsMenu) BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_WHITEALPHA); // fade to white ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sMainMenuBgTemplates, ARRAY_COUNT(sMainMenuBgTemplates)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); InitWindows(sWindowTemplates_MainMenu); DeactivateAllTextPrinters(); LoadMainMenuWindowFrameTiles(0, MAIN_MENU_BORDER_TILE); @@ -624,7 +621,7 @@ static u32 InitMainMenu(bool8 returningFromOptionsMenu) static void Task_MainMenuCheckSaveFile(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { @@ -685,7 +682,7 @@ static void Task_MainMenuCheckSaveFile(u8 taskId) break; } } - sCurrItemAndOptionMenuCheck &= CURRENT_ITEM_MASK; // turn off the "returning from options menu" flag + sCurrItemAndOptionMenuCheck &= ~OPTION_MENU_FLAG; // turn off the "returning from options menu" flag tCurrItem = sCurrItemAndOptionMenuCheck; tItemCount = tMenuType + 2; } @@ -739,7 +736,7 @@ static void Task_WaitForBatteryDryErrorWindow(u8 taskId) static void Task_DisplayMainMenu(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; u16 palette; if (!gPaletteFade.active) @@ -783,12 +780,12 @@ static void Task_DisplayMainMenu(u8 taskId) default: FillWindowPixelBuffer(0, PIXEL_FILL(0xA)); FillWindowPixelBuffer(1, PIXEL_FILL(0xA)); - AddTextPrinterParameterized3(0, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuNewGame); - AddTextPrinterParameterized3(1, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuOption); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuNewGame); + AddTextPrinterParameterized3(1, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuOption); PutWindowTilemap(0); PutWindowTilemap(1); - CopyWindowToVram(0, 2); - CopyWindowToVram(1, 2); + CopyWindowToVram(0, COPYWIN_GFX); + CopyWindowToVram(1, COPYWIN_GFX); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[0], MAIN_MENU_BORDER_TILE); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[1], MAIN_MENU_BORDER_TILE); break; @@ -796,16 +793,16 @@ static void Task_DisplayMainMenu(u8 taskId) FillWindowPixelBuffer(2, PIXEL_FILL(0xA)); FillWindowPixelBuffer(3, PIXEL_FILL(0xA)); FillWindowPixelBuffer(4, PIXEL_FILL(0xA)); - AddTextPrinterParameterized3(2, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuContinue); - AddTextPrinterParameterized3(3, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuNewGame); - AddTextPrinterParameterized3(4, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuOption); + AddTextPrinterParameterized3(2, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuContinue); + AddTextPrinterParameterized3(3, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuNewGame); + AddTextPrinterParameterized3(4, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuOption); MainMenu_FormatSavegameText(); PutWindowTilemap(2); PutWindowTilemap(3); PutWindowTilemap(4); - CopyWindowToVram(2, 2); - CopyWindowToVram(3, 2); - CopyWindowToVram(4, 2); + CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(3, COPYWIN_GFX); + CopyWindowToVram(4, COPYWIN_GFX); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[2], MAIN_MENU_BORDER_TILE); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[3], MAIN_MENU_BORDER_TILE); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[4], MAIN_MENU_BORDER_TILE); @@ -815,19 +812,19 @@ static void Task_DisplayMainMenu(u8 taskId) FillWindowPixelBuffer(3, PIXEL_FILL(0xA)); FillWindowPixelBuffer(4, PIXEL_FILL(0xA)); FillWindowPixelBuffer(5, PIXEL_FILL(0xA)); - AddTextPrinterParameterized3(2, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuContinue); - AddTextPrinterParameterized3(3, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuNewGame); - AddTextPrinterParameterized3(4, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuMysteryGift); - AddTextPrinterParameterized3(5, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuOption); + AddTextPrinterParameterized3(2, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuContinue); + AddTextPrinterParameterized3(3, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuNewGame); + AddTextPrinterParameterized3(4, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuMysteryGift); + AddTextPrinterParameterized3(5, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuOption); MainMenu_FormatSavegameText(); PutWindowTilemap(2); PutWindowTilemap(3); PutWindowTilemap(4); PutWindowTilemap(5); - CopyWindowToVram(2, 2); - CopyWindowToVram(3, 2); - CopyWindowToVram(4, 2); - CopyWindowToVram(5, 2); + CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(3, COPYWIN_GFX); + CopyWindowToVram(4, COPYWIN_GFX); + CopyWindowToVram(5, COPYWIN_GFX); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[2], MAIN_MENU_BORDER_TILE); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[3], MAIN_MENU_BORDER_TILE); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[4], MAIN_MENU_BORDER_TILE); @@ -839,22 +836,22 @@ static void Task_DisplayMainMenu(u8 taskId) FillWindowPixelBuffer(4, PIXEL_FILL(0xA)); FillWindowPixelBuffer(5, PIXEL_FILL(0xA)); FillWindowPixelBuffer(6, PIXEL_FILL(0xA)); - AddTextPrinterParameterized3(2, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuContinue); - AddTextPrinterParameterized3(3, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuNewGame); - AddTextPrinterParameterized3(4, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuMysteryGift2); - AddTextPrinterParameterized3(5, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuMysteryEvents); - AddTextPrinterParameterized3(6, 1, 0, 1, sTextColor_Headers, -1, gText_MainMenuOption); + AddTextPrinterParameterized3(2, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuContinue); + AddTextPrinterParameterized3(3, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuNewGame); + AddTextPrinterParameterized3(4, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuMysteryGift2); + AddTextPrinterParameterized3(5, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuMysteryEvents); + AddTextPrinterParameterized3(6, FONT_NORMAL, 0, 1, sTextColor_Headers, TEXT_SKIP_DRAW, gText_MainMenuOption); MainMenu_FormatSavegameText(); PutWindowTilemap(2); PutWindowTilemap(3); PutWindowTilemap(4); PutWindowTilemap(5); PutWindowTilemap(6); - CopyWindowToVram(2, 2); - CopyWindowToVram(3, 2); - CopyWindowToVram(4, 2); - CopyWindowToVram(5, 2); - CopyWindowToVram(6, 2); + CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(3, COPYWIN_GFX); + CopyWindowToVram(4, COPYWIN_GFX); + CopyWindowToVram(5, COPYWIN_GFX); + CopyWindowToVram(6, COPYWIN_GFX); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[2], MAIN_MENU_BORDER_TILE); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[3], MAIN_MENU_BORDER_TILE); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[4], MAIN_MENU_BORDER_TILE); @@ -864,8 +861,8 @@ static void Task_DisplayMainMenu(u8 taskId) gTasks[tScrollArrowTaskId].func = Task_ScrollIndicatorArrowPairOnMainMenu; if (sCurrItemAndOptionMenuCheck == 4) { - ChangeBgY(0, 0x2000, 1); - ChangeBgY(1, 0x2000, 1); + ChangeBgY(0, 0x2000, BG_COORD_ADD); + ChangeBgY(1, 0x2000, BG_COORD_ADD); tIsScrolled = TRUE; gTasks[tScrollArrowTaskId].tArrowTaskIsScrolled = TRUE; } @@ -883,7 +880,7 @@ static void Task_HighlightSelectedMainMenuItem(u8 taskId) static bool8 HandleMainMenuInput(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON)) { @@ -904,8 +901,8 @@ static bool8 HandleMainMenuInput(u8 taskId) { if (tMenuType == HAS_MYSTERY_EVENTS && tIsScrolled == TRUE && tCurrItem == 1) { - ChangeBgY(0, 0x2000, 2); - ChangeBgY(1, 0x2000, 2); + ChangeBgY(0, 0x2000, BG_COORD_SUB); + ChangeBgY(1, 0x2000, BG_COORD_SUB); gTasks[tScrollArrowTaskId].tArrowTaskIsScrolled = tIsScrolled = FALSE; } tCurrItem--; @@ -916,8 +913,8 @@ static bool8 HandleMainMenuInput(u8 taskId) { if (tMenuType == HAS_MYSTERY_EVENTS && tCurrItem == 3 && tIsScrolled == FALSE) { - ChangeBgY(0, 0x2000, 1); - ChangeBgY(1, 0x2000, 1); + ChangeBgY(0, 0x2000, BG_COORD_ADD); + ChangeBgY(1, 0x2000, BG_COORD_ADD); gTasks[tScrollArrowTaskId].tArrowTaskIsScrolled = tIsScrolled = TRUE; } tCurrItem++; @@ -1051,8 +1048,8 @@ static void Task_HandleMainMenuAPressed(u8 taskId) } break; } - ChangeBgY(0, 0, 0); - ChangeBgY(1, 0, 0); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); switch (action) { case ACTION_NEW_GAME: @@ -1073,7 +1070,7 @@ static void Task_HandleMainMenuAPressed(u8 taskId) DestroyTask(taskId); break; case ACTION_MYSTERY_GIFT: - SetMainCallback2(c2_mystery_gift); + SetMainCallback2(CB2_InitMysteryGift); DestroyTask(taskId); break; case ACTION_MYSTERY_EVENTS: @@ -1081,7 +1078,7 @@ static void Task_HandleMainMenuAPressed(u8 taskId) DestroyTask(taskId); break; case ACTION_EREADER: - SetMainCallback2(c2_ereader); + SetMainCallback2(CB2_InitEReader); DestroyTask(taskId); break; case ACTION_INVALID: @@ -1275,8 +1272,8 @@ static void Task_NewGameBirchSpeech_Init(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDY, 0); - LZ77UnCompVram(sBirchSpeechShadowGfx, (void*)VRAM); - LZ77UnCompVram(sBirchSpeechBgMap, (void*)(BG_SCREEN_ADDR(7))); + LZ77UnCompVram(sBirchSpeechShadowGfx, (void *)VRAM); + LZ77UnCompVram(sBirchSpeechBgMap, (void *)(BG_SCREEN_ADDR(7))); LoadPalette(sBirchSpeechBgPals, 0, 64); LoadPalette(sBirchSpeechPlatformBlackPal, 1, 16); ScanlineEffect_Stop(); @@ -1328,15 +1325,15 @@ static void Task_NewGameBirchSpeech_WaitForSpriteFadeInWelcome(u8 taskId) } else { - InitWindows(gNewGameBirchSpeechTextWindows); + InitWindows(sNewGameBirchSpeechTextWindows); LoadMainMenuWindowFrameTiles(0, 0xF3); LoadMessageBoxGfx(0, 0xFC, 0xF0); NewGameBirchSpeech_ShowDialogueWindow(0, 1); PutWindowTilemap(0); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); NewGameBirchSpeech_ClearWindow(0); StringExpandPlaceholders(gStringVar4, gText_Birch_Welcome); - AddTextPrinterForMessage(1); + AddTextPrinterForMessage(TRUE); gTasks[taskId].func = Task_NewGameBirchSpeech_ThisIsAPokemon; } } @@ -1348,7 +1345,7 @@ static void Task_NewGameBirchSpeech_ThisIsAPokemon(u8 taskId) { gTasks[taskId].func = Task_NewGameBirchSpeech_MainSpeech; StringExpandPlaceholders(gStringVar4, gText_ThisIsAPokemon); - AddTextPrinterWithCallbackForMessage(1, NewGameBirchSpeech_ShowPokeBallPrinterCallback); + AddTextPrinterWithCallbackForMessage(TRUE, NewGameBirchSpeech_WaitForThisIsPokemonText); sBirchSpeechMainTaskId = taskId; } } @@ -1358,7 +1355,7 @@ static void Task_NewGameBirchSpeech_MainSpeech(u8 taskId) if (!RunTextPrintersAndIsPrinter0Active()) { StringExpandPlaceholders(gStringVar4, gText_Birch_MainSpeech); - AddTextPrinterForMessage(1); + AddTextPrinterForMessage(TRUE); gTasks[taskId].func = Task_NewGameBirchSpeech_AndYouAre; } } @@ -1374,7 +1371,7 @@ static void Task_NewGameBirchSpeechSub_InitPokeBall(u8 taskId) gSprites[spriteId].invisible = FALSE; gSprites[spriteId].data[0] = 0; - CreatePokeballSpriteToReleaseMon(spriteId, gSprites[spriteId].oam.paletteNum, 112, 58, 0, 0, 32, 0x0000FFFF, SPECIES_LOTAD); + CreatePokeballSpriteToReleaseMon(spriteId, gSprites[spriteId].oam.paletteNum, 112, 58, 0, 0, 32, PALETTES_BG, SPECIES_LOTAD); gTasks[taskId].func = Task_NewGameBirchSpeechSub_WaitForLotad; gTasks[sBirchSpeechMainTaskId].tTimer = 0; } @@ -1411,9 +1408,9 @@ static void Task_NewGameBirchSpeech_AndYouAre(u8 taskId) { if (!RunTextPrintersAndIsPrinter0Active()) { - gUnknown_02022D04 = 0; + sStartedPokeBallTask = FALSE; StringExpandPlaceholders(gStringVar4, gText_Birch_AndYouAre); - AddTextPrinterForMessage(1); + AddTextPrinterForMessage(TRUE); gTasks[taskId].func = Task_NewGameBirchSpeech_StartBirchLotadPlatformFade; } } @@ -1485,7 +1482,7 @@ static void Task_NewGameBirchSpeech_BoyOrGirl(u8 taskId) { NewGameBirchSpeech_ClearWindow(0); StringExpandPlaceholders(gStringVar4, gText_Birch_BoyOrGirl); - AddTextPrinterForMessage(1); + AddTextPrinterForMessage(TRUE); gTasks[taskId].func = Task_NewGameBirchSpeech_WaitToShowGenderMenu; } @@ -1575,7 +1572,7 @@ static void Task_NewGameBirchSpeech_WhatsYourName(u8 taskId) { NewGameBirchSpeech_ClearWindow(0); StringExpandPlaceholders(gStringVar4, gText_Birch_WhatsYourName); - AddTextPrinterForMessage(1); + AddTextPrinterForMessage(TRUE); gTasks[taskId].func = Task_NewGameBirchSpeech_WaitForWhatsYourNameToPrint; } @@ -1610,7 +1607,7 @@ static void Task_NewGameBirchSpeech_SoItsPlayerName(u8 taskId) { NewGameBirchSpeech_ClearWindow(0); StringExpandPlaceholders(gStringVar4, gText_Birch_SoItsPlayer); - AddTextPrinterForMessage(1); + AddTextPrinterForMessage(TRUE); gTasks[taskId].func = Task_NewGameBirchSpeech_CreateNameYesNo; } @@ -1676,7 +1673,7 @@ static void Task_NewGameBirchSpeech_ReshowBirchLotad(u8 taskId) NewGameBirchSpeech_StartFadePlatformOut(taskId, 1); NewGameBirchSpeech_ClearWindow(0); StringExpandPlaceholders(gStringVar4, gText_Birch_YourePlayer); - AddTextPrinterForMessage(1); + AddTextPrinterForMessage(TRUE); gTasks[taskId].func = Task_NewGameBirchSpeech_WaitForSpriteFadeInAndTextPrinter; } } @@ -1724,7 +1721,7 @@ static void Task_NewGameBirchSpeech_AreYouReady(u8 taskId) NewGameBirchSpeech_StartFadeInTarget1OutTarget2(taskId, 2); NewGameBirchSpeech_StartFadePlatformOut(taskId, 1); StringExpandPlaceholders(gStringVar4, gText_Birch_AreYouReady); - AddTextPrinterForMessage(1); + AddTextPrinterForMessage(TRUE); gTasks[taskId].func = Task_NewGameBirchSpeech_ShrinkPlayer; } } @@ -1810,8 +1807,8 @@ static void CB2_NewGameBirchSpeech_ReturnFromNamingScreen(void) DmaFill32(3, 0, OAM, OAM_SIZE); DmaFill16(3, 0, PLTT, PLTT_SIZE); ResetPaletteFade(); - LZ77UnCompVram(sBirchSpeechShadowGfx, (u8*)VRAM); - LZ77UnCompVram(sBirchSpeechBgMap, (u8*)(BG_SCREEN_ADDR(7))); + LZ77UnCompVram(sBirchSpeechShadowGfx, (u8 *)VRAM); + LZ77UnCompVram(sBirchSpeechBgMap, (u8 *)(BG_SCREEN_ADDR(7))); LoadPalette(sBirchSpeechBgPals, 0, 64); LoadPalette(&sBirchSpeechBgGradientPal[1], 1, 16); ResetTasks(); @@ -1854,11 +1851,11 @@ static void CB2_NewGameBirchSpeech_ReturnFromNamingScreen(void) REG_IME = savedIme; SetVBlankCallback(VBlankCB_MainMenu); SetMainCallback2(CB2_MainMenu); - InitWindows(gNewGameBirchSpeechTextWindows); + InitWindows(sNewGameBirchSpeechTextWindows); LoadMainMenuWindowFrameTiles(0, 0xF3); LoadMessageBoxGfx(0, 0xFC, 0xF0); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); } static void SpriteCB_Null(struct Sprite *sprite) @@ -1874,9 +1871,9 @@ static void SpriteCB_MovePlayerDownWhileShrinking(struct Sprite *sprite) sprite->data[0] = y; } -static u8 NewGameBirchSpeech_CreateLotadSprite(u8 a, u8 b) +static u8 NewGameBirchSpeech_CreateLotadSprite(u8 x, u8 y) { - return CreatePicSprite2(SPECIES_LOTAD, SHINY_ODDS, 0, 1, a, b, 14, -1); + return CreateMonPicSprite_Affine(SPECIES_LOTAD, SHINY_ODDS, 0, MON_PIC_AFFINE_FRONT, x, y, 14, TAG_NONE); } static void AddBirchSpeechObjects(u8 taskId) @@ -2090,12 +2087,12 @@ static void NewGameBirchSpeech_StartFadePlatformOut(u8 taskId, u8 delay) static void NewGameBirchSpeech_ShowGenderMenu(void) { - DrawMainMenuWindowBorder(&gNewGameBirchSpeechTextWindows[1], 0xF3); + DrawMainMenuWindowBorder(&sNewGameBirchSpeechTextWindows[1], 0xF3); FillWindowPixelBuffer(1, PIXEL_FILL(1)); PrintMenuTable(1, ARRAY_COUNT(sMenuActions_Gender), sMenuActions_Gender); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(1, 2, 0); + InitMenuInUpperLeftCornerNormal(1, ARRAY_COUNT(sMenuActions_Gender), 0); PutWindowTilemap(1); - CopyWindowToVram(1, 3); + CopyWindowToVram(1, COPYWIN_FULL); } static s8 NewGameBirchSpeech_ProcessGenderMenuInput(void) @@ -2105,24 +2102,24 @@ static s8 NewGameBirchSpeech_ProcessGenderMenuInput(void) static void NewGameBirchSpeech_SetDefaultPlayerName(u8 nameId) { - const u8* name; + const u8 *name; u8 i; if (gSaveBlock2Ptr->playerGender == MALE) - name = gMalePresetNames[nameId]; + name = sMalePresetNames[nameId]; else - name = gFemalePresetNames[nameId]; + name = sFemalePresetNames[nameId]; for (i = 0; i < PLAYER_NAME_LENGTH; i++) gSaveBlock2Ptr->playerName[i] = name[i]; gSaveBlock2Ptr->playerName[PLAYER_NAME_LENGTH] = EOS; } -static void CreateMainMenuErrorWindow(const u8* str) +static void CreateMainMenuErrorWindow(const u8 *str) { FillWindowPixelBuffer(7, PIXEL_FILL(1)); - AddTextPrinterParameterized(7, 1, str, 0, 1, 2, 0); + AddTextPrinterParameterized(7, FONT_NORMAL, str, 0, 1, 2, 0); PutWindowTilemap(7); - CopyWindowToVram(7, 2); + CopyWindowToVram(7, COPYWIN_GFX); DrawMainMenuWindowBorder(&sWindowTemplates_MainMenu[7], MAIN_MENU_BORDER_TILE); SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(9, DISPLAY_WIDTH - 9)); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(113, DISPLAY_HEIGHT - 1)); @@ -2139,21 +2136,21 @@ static void MainMenu_FormatSavegameText(void) static void MainMenu_FormatSavegamePlayer(void) { StringExpandPlaceholders(gStringVar4, gText_ContinueMenuPlayer); - AddTextPrinterParameterized3(2, 1, 0, 17, sTextColor_MenuInfo, -1, gStringVar4); - AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 100), 17, sTextColor_MenuInfo, -1, gSaveBlock2Ptr->playerName); + AddTextPrinterParameterized3(2, FONT_NORMAL, 0, 17, sTextColor_MenuInfo, TEXT_SKIP_DRAW, gStringVar4); + AddTextPrinterParameterized3(2, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, gSaveBlock2Ptr->playerName, 100), 17, sTextColor_MenuInfo, TEXT_SKIP_DRAW, gSaveBlock2Ptr->playerName); } static void MainMenu_FormatSavegameTime(void) { u8 str[0x20]; - u8* ptr; + u8 *ptr; StringExpandPlaceholders(gStringVar4, gText_ContinueMenuTime); - AddTextPrinterParameterized3(2, 1, 0x6C, 17, sTextColor_MenuInfo, -1, gStringVar4); + AddTextPrinterParameterized3(2, FONT_NORMAL, 0x6C, 17, sTextColor_MenuInfo, TEXT_SKIP_DRAW, gStringVar4); ptr = ConvertIntToDecimalStringN(str, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); *ptr = 0xF0; ConvertIntToDecimalStringN(ptr + 1, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); - AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 17, sTextColor_MenuInfo, -1, str); + AddTextPrinterParameterized3(2, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, str, 0xD0), 17, sTextColor_MenuInfo, TEXT_SKIP_DRAW, str); } static void MainMenu_FormatSavegamePokedex(void) @@ -2168,9 +2165,9 @@ static void MainMenu_FormatSavegamePokedex(void) else dexCount = GetHoennPokedexCount(FLAG_GET_CAUGHT); StringExpandPlaceholders(gStringVar4, gText_ContinueMenuPokedex); - AddTextPrinterParameterized3(2, 1, 0, 33, sTextColor_MenuInfo, -1, gStringVar4); + AddTextPrinterParameterized3(2, FONT_NORMAL, 0, 33, sTextColor_MenuInfo, TEXT_SKIP_DRAW, gStringVar4); ConvertIntToDecimalStringN(str, dexCount, STR_CONV_MODE_LEFT_ALIGN, 3); - AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 100), 33, sTextColor_MenuInfo, -1, str); + AddTextPrinterParameterized3(2, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, str, 100), 33, sTextColor_MenuInfo, TEXT_SKIP_DRAW, str); } } @@ -2186,9 +2183,9 @@ static void MainMenu_FormatSavegameBadges(void) badgeCount++; } StringExpandPlaceholders(gStringVar4, gText_ContinueMenuBadges); - AddTextPrinterParameterized3(2, 1, 0x6C, 33, sTextColor_MenuInfo, -1, gStringVar4); + AddTextPrinterParameterized3(2, FONT_NORMAL, 0x6C, 33, sTextColor_MenuInfo, TEXT_SKIP_DRAW, gStringVar4); ConvertIntToDecimalStringN(str, badgeCount, STR_CONV_MODE_LEADING_ZEROS, 1); - AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 33, sTextColor_MenuInfo, -1, str); + AddTextPrinterParameterized3(2, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, str, 0xD0), 33, sTextColor_MenuInfo, TEXT_SKIP_DRAW, str); } static void LoadMainMenuWindowFrameTiles(u8 bgId, u16 tileOffset) @@ -2224,9 +2221,9 @@ static void ClearMainMenuWindowTilemap(const struct WindowTemplate *template) CopyBgTilemapBufferToVram(template->bg); } -static void NewGameBirchSpeech_ClearGenderWindowTilemap(u8 a, u8 b, u8 c, u8 d, u8 e, u8 unused) +static void NewGameBirchSpeech_ClearGenderWindowTilemap(u8 bg, u8 x, u8 y, u8 width, u8 height, u8 unused) { - FillBgTilemapBufferRect(a, 0, b + 0xFF, c + 0xFF, d + 2, e + 2, 2); + FillBgTilemapBufferRect(bg, 0, x + 255, y + 255, width + 2, height + 2, 2); } static void NewGameBirchSpeech_ClearGenderWindow(u8 windowId, bool8 copyToVram) @@ -2235,36 +2232,36 @@ static void NewGameBirchSpeech_ClearGenderWindow(u8 windowId, bool8 copyToVram) FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); ClearWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } static void NewGameBirchSpeech_ClearWindow(u8 windowId) { - u8 bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); - u8 maxCharWidth = GetFontAttribute(1, FONTATTR_MAX_LETTER_WIDTH); - u8 maxCharHeight = GetFontAttribute(1, FONTATTR_MAX_LETTER_HEIGHT); + u8 bgColor = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_BACKGROUND); + u8 maxCharWidth = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_WIDTH); + u8 maxCharHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT); u8 winWidth = GetWindowAttribute(windowId, WINDOW_WIDTH); u8 winHeight = GetWindowAttribute(windowId, WINDOW_HEIGHT); FillWindowPixelRect(windowId, bgColor, 0, 0, maxCharWidth * winWidth, maxCharHeight * winHeight); - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } -static void NewGameBirchSpeech_ShowPokeBallPrinterCallback(struct TextPrinterTemplate *printer, u16 a) +static void NewGameBirchSpeech_WaitForThisIsPokemonText(struct TextPrinterTemplate *printer, u16 renderCmd) { - if (*(printer->currentChar - 2) == 8 && gUnknown_02022D04 == 0) + // Wait for Birch's "This is a Pokémon" text to reach the pause + // Then start the PokéBall release (if it hasn't been started already) + if (*(printer->currentChar - 2) == EXT_CTRL_CODE_PAUSE && !sStartedPokeBallTask) { - gUnknown_02022D04 = 1; + sStartedPokeBallTask = TRUE; CreateTask(Task_NewGameBirchSpeechSub_InitPokeBall, 0); } } -void CreateYesNoMenuParameterized(u8 a, u8 b, u16 c, u16 d, u8 e, u8 f) +void CreateYesNoMenuParameterized(u8 x, u8 y, u16 baseTileNum, u16 baseBlock, u8 yesNoPalNum, u8 winPalNum) { - struct WindowTemplate sp; - - sp = CreateWindowTemplate(0, a + 1, b + 1, 5, 4, f, d); - CreateYesNoMenu(&sp, c, e, 0); + struct WindowTemplate template = CreateWindowTemplate(0, x + 1, y + 1, 5, 4, winPalNum, baseBlock); + CreateYesNoMenu(&template, baseTileNum, yesNoPalNum, 0); } static void NewGameBirchSpeech_ShowDialogueWindow(u8 windowId, u8 copyToVram) @@ -2273,24 +2270,25 @@ static void NewGameBirchSpeech_ShowDialogueWindow(u8 windowId, u8 copyToVram) FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } -static void NewGameBirchSpeech_CreateDialogueWindowBorder(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f) +static void NewGameBirchSpeech_CreateDialogueWindowBorder(u8 bg, u8 x, u8 y, u8 width, u8 height, u8 palNum) { - FillBgTilemapBufferRect(a, 0xFD, b-2, c-1, 1, 1, f); - FillBgTilemapBufferRect(a, 0xFF, b-1, c-1, 1, 1, f); - FillBgTilemapBufferRect(a, 0x100, b, c-1, d, 1, f); - FillBgTilemapBufferRect(a, 0x101, b+d-1, c-1, 1, 1, f); - FillBgTilemapBufferRect(a, 0x102, b+d, c-1, 1, 1, f); - FillBgTilemapBufferRect(a, 0x103, b-2, c, 1, 5, f); - FillBgTilemapBufferRect(a, 0x105, b-1, c, d+1, 5, f); - FillBgTilemapBufferRect(a, 0x106, b+d, c, 1, 5, f); - FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0xFD), b-2, c+e, 1, 1, f); - FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0xFF), b-1, c+e, 1, 1, f); - FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x100), b, c+e, d-1, 1, f); - FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x101), b+d-1, c+e, 1, 1, f); - FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x102), b+d, c+e, 1, 1, f); + FillBgTilemapBufferRect(bg, 0xFD, x-2, y-1, 1, 1, palNum); + FillBgTilemapBufferRect(bg, 0xFF, x-1, y-1, 1, 1, palNum); + FillBgTilemapBufferRect(bg, 0x100, x, y-1, width, 1, palNum); + FillBgTilemapBufferRect(bg, 0x101, x+width-1, y-1, 1, 1, palNum); + FillBgTilemapBufferRect(bg, 0x102, x+width, y-1, 1, 1, palNum); + FillBgTilemapBufferRect(bg, 0x103, x-2, y, 1, 5, palNum); + FillBgTilemapBufferRect(bg, 0x105, x-1, y, width+1, 5, palNum); + FillBgTilemapBufferRect(bg, 0x106, x+width, y, 1, 5, palNum); + + FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0xFD), x-2, y+height, 1, 1, palNum); + FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0xFF), x-1, y+height, 1, 1, palNum); + FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0x100), x, y+height, width-1, 1, palNum); + FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0x101), x+width-1, y+height, 1, 1, palNum); + FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0x102), x+width, y+height, 1, 1, palNum); } static void Task_NewGameBirchSpeech_ReturnFromNamingScreenShowTextbox(u8 taskId) diff --git a/src/map_name_popup.c b/src/map_name_popup.c index cd92bbac18..866072a2c3 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -12,6 +12,7 @@ #include "string_util.h" #include "task.h" #include "text.h" +#include "constants/battle_frontier.h" #include "constants/layouts.h" #include "constants/region_map_sections.h" #include "constants/weather.h" @@ -38,37 +39,37 @@ static EWRAM_DATA u8 sPopupTaskId = 0; // .rodata static const u8 sMapPopUp_Table[][960] = { - [MAPPOPUP_THEME_WOOD] = INCBIN_U8("graphics/interface/map_popup/wood.4bpp"), - [MAPPOPUP_THEME_MARBLE] = INCBIN_U8("graphics/interface/map_popup/marble.4bpp"), - [MAPPOPUP_THEME_STONE] = INCBIN_U8("graphics/interface/map_popup/stone.4bpp"), - [MAPPOPUP_THEME_BRICK] = INCBIN_U8("graphics/interface/map_popup/brick.4bpp"), - [MAPPOPUP_THEME_UNDERWATER] = INCBIN_U8("graphics/interface/map_popup/underwater.4bpp"), - [MAPPOPUP_THEME_STONE2] = INCBIN_U8("graphics/interface/map_popup/stone2.4bpp"), + [MAPPOPUP_THEME_WOOD] = INCBIN_U8("graphics/map_popup/wood.4bpp"), + [MAPPOPUP_THEME_MARBLE] = INCBIN_U8("graphics/map_popup/marble.4bpp"), + [MAPPOPUP_THEME_STONE] = INCBIN_U8("graphics/map_popup/stone.4bpp"), + [MAPPOPUP_THEME_BRICK] = INCBIN_U8("graphics/map_popup/brick.4bpp"), + [MAPPOPUP_THEME_UNDERWATER] = INCBIN_U8("graphics/map_popup/underwater.4bpp"), + [MAPPOPUP_THEME_STONE2] = INCBIN_U8("graphics/map_popup/stone2.4bpp"), }; static const u8 sMapPopUp_OutlineTable[][960] = { - [MAPPOPUP_THEME_WOOD] = INCBIN_U8("graphics/interface/map_popup/wood_outline.4bpp"), - [MAPPOPUP_THEME_MARBLE] = INCBIN_U8("graphics/interface/map_popup/marble_outline.4bpp"), - [MAPPOPUP_THEME_STONE] = INCBIN_U8("graphics/interface/map_popup/stone_outline.4bpp"), - [MAPPOPUP_THEME_BRICK] = INCBIN_U8("graphics/interface/map_popup/brick_outline.4bpp"), - [MAPPOPUP_THEME_UNDERWATER] = INCBIN_U8("graphics/interface/map_popup/underwater_outline.4bpp"), - [MAPPOPUP_THEME_STONE2] = INCBIN_U8("graphics/interface/map_popup/stone2_outline.4bpp"), + [MAPPOPUP_THEME_WOOD] = INCBIN_U8("graphics/map_popup/wood_outline.4bpp"), + [MAPPOPUP_THEME_MARBLE] = INCBIN_U8("graphics/map_popup/marble_outline.4bpp"), + [MAPPOPUP_THEME_STONE] = INCBIN_U8("graphics/map_popup/stone_outline.4bpp"), + [MAPPOPUP_THEME_BRICK] = INCBIN_U8("graphics/map_popup/brick_outline.4bpp"), + [MAPPOPUP_THEME_UNDERWATER] = INCBIN_U8("graphics/map_popup/underwater_outline.4bpp"), + [MAPPOPUP_THEME_STONE2] = INCBIN_U8("graphics/map_popup/stone2_outline.4bpp"), }; static const u16 sMapPopUp_PaletteTable[][16] = { - [MAPPOPUP_THEME_WOOD] = INCBIN_U16("graphics/interface/map_popup/wood.gbapal"), - [MAPPOPUP_THEME_MARBLE] = INCBIN_U16("graphics/interface/map_popup/marble_outline.gbapal"), - [MAPPOPUP_THEME_STONE] = INCBIN_U16("graphics/interface/map_popup/stone_outline.gbapal"), - [MAPPOPUP_THEME_BRICK] = INCBIN_U16("graphics/interface/map_popup/brick_outline.gbapal"), - [MAPPOPUP_THEME_UNDERWATER] = INCBIN_U16("graphics/interface/map_popup/underwater_outline.gbapal"), - [MAPPOPUP_THEME_STONE2] = INCBIN_U16("graphics/interface/map_popup/stone2_outline.gbapal"), + [MAPPOPUP_THEME_WOOD] = INCBIN_U16("graphics/map_popup/wood.gbapal"), + [MAPPOPUP_THEME_MARBLE] = INCBIN_U16("graphics/map_popup/marble_outline.gbapal"), + [MAPPOPUP_THEME_STONE] = INCBIN_U16("graphics/map_popup/stone_outline.gbapal"), + [MAPPOPUP_THEME_BRICK] = INCBIN_U16("graphics/map_popup/brick_outline.gbapal"), + [MAPPOPUP_THEME_UNDERWATER] = INCBIN_U16("graphics/map_popup/underwater_outline.gbapal"), + [MAPPOPUP_THEME_STONE2] = INCBIN_U16("graphics/map_popup/stone2_outline.gbapal"), }; -static const u16 sMapPopUp_Palette_Underwater[16] = INCBIN_U16("graphics/interface/map_popup/underwater.gbapal"); +static const u16 sMapPopUp_Palette_Underwater[16] = INCBIN_U16("graphics/map_popup/underwater.gbapal"); -static const u8 gRegionMapSectionId_To_PopUpThemeIdMapping[] = +static const u8 sRegionMapSectionId_To_PopUpThemeIdMapping[] = { [MAPSEC_LITTLEROOT_TOWN] = MAPPOPUP_THEME_WOOD, [MAPSEC_OLDALE_TOWN] = MAPPOPUP_THEME_WOOD, @@ -176,25 +177,25 @@ static const u8 gRegionMapSectionId_To_PopUpThemeIdMapping[] = [MAPSEC_TRAINER_HILL - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_MARBLE }; -static const u8 gText_PyramidFloor1[] = _("PYRAMID FLOOR 1"); -static const u8 gText_PyramidFloor2[] = _("PYRAMID FLOOR 2"); -static const u8 gText_PyramidFloor3[] = _("PYRAMID FLOOR 3"); -static const u8 gText_PyramidFloor4[] = _("PYRAMID FLOOR 4"); -static const u8 gText_PyramidFloor5[] = _("PYRAMID FLOOR 5"); -static const u8 gText_PyramidFloor6[] = _("PYRAMID FLOOR 6"); -static const u8 gText_PyramidFloor7[] = _("PYRAMID FLOOR 7"); -static const u8 gText_Pyramid[] = _("PYRAMID"); +static const u8 sText_PyramidFloor1[] = _("PYRAMID FLOOR 1"); +static const u8 sText_PyramidFloor2[] = _("PYRAMID FLOOR 2"); +static const u8 sText_PyramidFloor3[] = _("PYRAMID FLOOR 3"); +static const u8 sText_PyramidFloor4[] = _("PYRAMID FLOOR 4"); +static const u8 sText_PyramidFloor5[] = _("PYRAMID FLOOR 5"); +static const u8 sText_PyramidFloor6[] = _("PYRAMID FLOOR 6"); +static const u8 sText_PyramidFloor7[] = _("PYRAMID FLOOR 7"); +static const u8 sText_Pyramid[] = _("PYRAMID"); -static const u8 * const gBattlePyramid_MapHeaderStrings[] = +static const u8 *const sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHALLENGE + 1] = { - gText_PyramidFloor1, - gText_PyramidFloor2, - gText_PyramidFloor3, - gText_PyramidFloor4, - gText_PyramidFloor5, - gText_PyramidFloor6, - gText_PyramidFloor7, - gText_Pyramid, + sText_PyramidFloor1, + sText_PyramidFloor2, + sText_PyramidFloor3, + sText_PyramidFloor4, + sText_PyramidFloor5, + sText_PyramidFloor6, + sText_PyramidFloor7, + sText_Pyramid, }; // Unused @@ -302,19 +303,19 @@ static void ShowMapNamePopUpWindow(void) u8 mapDisplayHeader[24]; u8 *withoutPrefixPtr; u8 x; - const u8* mapDisplayHeaderSource; + const u8 *mapDisplayHeaderSource; if (InBattlePyramid()) { if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP) { withoutPrefixPtr = &(mapDisplayHeader[3]); - mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[7]; + mapDisplayHeaderSource = sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHALLENGE]; } else { withoutPrefixPtr = &(mapDisplayHeader[3]); - mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[gSaveBlock2Ptr->frontier.curChallengeBattleNum]; + mapDisplayHeaderSource = sBattlePyramid_MapHeaderStrings[gSaveBlock2Ptr->frontier.curChallengeBattleNum]; } StringCopy(withoutPrefixPtr, mapDisplayHeaderSource); } @@ -325,12 +326,12 @@ static void ShowMapNamePopUpWindow(void) } AddMapNamePopUpWindow(); LoadMapNamePopUpWindowBg(); - x = GetStringCenterAlignXOffset(7, withoutPrefixPtr, 80); + 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(), 7, mapDisplayHeader, x, 3, 0xFF, NULL); - CopyWindowToVram(GetMapNamePopUpWindowId(), 3); + AddTextPrinterParameterized(GetMapNamePopUpWindowId(), FONT_NARROW, mapDisplayHeader, x, 3, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(GetMapNamePopUpWindowId(), COPYWIN_FULL); } #define TILE_TOP_EDGE_START 0x21D @@ -378,7 +379,7 @@ static void LoadMapNamePopUpWindowBg(void) else regionMapSectionId = 0; // Discard kanto region sections; } - popUpThemeId = gRegionMapSectionId_To_PopUpThemeIdMapping[regionMapSectionId]; + popUpThemeId = sRegionMapSectionId_To_PopUpThemeIdMapping[regionMapSectionId]; LoadBgTiles(GetWindowAttribute(popupWindowId, WINDOW_BG), sMapPopUp_OutlineTable[popUpThemeId], 0x400, 0x21D); CallWindowFunction(popupWindowId, DrawMapNamePopUpFrame); diff --git a/src/match_call.c b/src/match_call.c index fd0db630c4..4f6a7b9821 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -29,11 +29,17 @@ #include "constants/abilities.h" #include "constants/battle_frontier.h" #include "constants/event_objects.h" -#include "constants/maps.h" #include "constants/region_map_sections.h" #include "constants/songs.h" #include "constants/trainers.h" +// In this file only the values normally associated with Battle Pike and Factory are swapped. +// Note that this is *not* a bug, because they are properly swapped consistently in this file. +// There would only be an issue if anything in this file interacted with something expecting +// the usual value order, or vice versa. +#define MATCH_CALL_FACTORY FRONTIER_FACILITY_PIKE +#define MATCH_CALL_PIKE FRONTIER_FACILITY_FACTORY + // Each match call message has variables that can be populated randomly or // dependent on the trainer. The below are IDs for how to populate the vars // in a given message. @@ -1051,8 +1057,8 @@ static bool32 CheckMatchCallChance(void) int callChance = 1; if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG) && GetMonAbility(&gPlayerParty[0]) == ABILITY_LIGHTNING_ROD) callChance = 2; - - if (Random() % 10 < callChance * 3) + + if (Random() % 10 < callChance * 3) return TRUE; else return FALSE; @@ -1062,7 +1068,7 @@ static bool32 MapAllowsMatchCall(void) { if (!Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) || gMapHeader.regionMapSectionId == MAPSEC_SAFARI_ZONE) return FALSE; - + if (gMapHeader.regionMapSectionId == MAPSEC_SOOTOPOLIS_CITY && FlagGet(FLAG_HIDE_SOOTOPOLIS_CITY_RAYQUAZA) == TRUE && FlagGet(FLAG_NEVER_SET_0x0DC) == FALSE) @@ -1177,20 +1183,20 @@ static void StartMatchCall(void) { if (!sMatchCallState.triggeredFromScript) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); PlayerFreeze(); - sub_808BCF4(); + StopPlayerAvatar(); } PlaySE(SE_POKENAV_CALL); CreateTask(ExecuteMatchCall, 1); } -static const u16 sMatchCallWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call_window.gbapal"); -static const u8 sMatchCallWindow_Gfx[] = INCBIN_U8("graphics/pokenav/match_call_window.4bpp"); -static const u16 sPokenavIcon_Pal[] = INCBIN_U16("graphics/pokenav/icon.gbapal"); -static const u32 sPokenavIcon_Gfx[] = INCBIN_U32("graphics/pokenav/icon.4bpp.lz"); +static const u16 sMatchCallWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call/window.gbapal"); +static const u8 sMatchCallWindow_Gfx[] = INCBIN_U8("graphics/pokenav/match_call/window.4bpp"); +static const u16 sPokenavIcon_Pal[] = INCBIN_U16("graphics/pokenav/match_call/nav_icon.gbapal"); +static const u32 sPokenavIcon_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/nav_icon.4bpp.lz"); static const u8 sText_PokenavCallEllipsis[] = _("………………\p"); @@ -1263,7 +1269,7 @@ static bool32 MatchCall_LoadGfx(u8 taskId) FillWindowPixelBuffer(tWindowId, PIXEL_FILL(8)); LoadPalette(sMatchCallWindow_Pal, 0xE0, sizeof(sMatchCallWindow_Pal)); LoadPalette(sPokenavIcon_Pal, 0xF0, sizeof(sPokenavIcon_Pal)); - ChangeBgY(0, -0x2000, 0); + ChangeBgY(0, -0x2000, BG_COORD_SET); return TRUE; } @@ -1277,7 +1283,7 @@ static bool32 MatchCall_DrawWindow(u8 taskId) DrawMatchCallTextBoxBorder_Internal(tWindowId, TILE_MC_WINDOW, 14); WriteSequenceToBgTilemapBuffer(0, (0xF << 12) | TILE_POKENAV_ICON, 1, 15, 4, 4, 17, 1); tIconTaskId = CreateTask(Task_SpinPokenavIcon, 10); - CopyWindowToVram(tWindowId, 2); + CopyWindowToVram(tWindowId, COPYWIN_GFX); CopyBgTilemapBufferToVram(0); return TRUE; } @@ -1297,9 +1303,9 @@ static bool32 MatchCall_ReadyIntro(u8 taskId) static bool32 MatchCall_SlideWindowIn(u8 taskId) { - if (ChangeBgY(0, 0x600, 1) >= 0) + if (ChangeBgY(0, 0x600, BG_COORD_ADD) >= 0) { - ChangeBgY(0, 0, 0); + ChangeBgY(0, 0, BG_COORD_SET); return TRUE; } @@ -1312,7 +1318,7 @@ static bool32 MatchCall_PrintIntro(u8 taskId) if (!RunMatchCallTextPrinter(tWindowId)) { FillWindowPixelBuffer(tWindowId, PIXEL_FILL(8)); - + // Ready the message if (!sMatchCallState.triggeredFromScript) SelectMatchCallMessage(sMatchCallState.trainerId, gStringVar4); @@ -1329,7 +1335,7 @@ static bool32 MatchCall_PrintMessage(u8 taskId) if (!RunMatchCallTextPrinter(tWindowId) && !IsSEPlaying() && JOY_NEW(A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(tWindowId, PIXEL_FILL(8)); - CopyWindowToVram(tWindowId, 2); + CopyWindowToVram(tWindowId, COPYWIN_GFX); PlaySE(SE_POKENAV_HANG_UP); return TRUE; } @@ -1340,7 +1346,7 @@ static bool32 MatchCall_PrintMessage(u8 taskId) static bool32 MatchCall_SlideWindowOut(u8 taskId) { s16 *data = gTasks[taskId].data; - if (ChangeBgY(0, 0x600, 2) <= -0x2000) + if (ChangeBgY(0, 0x600, BG_COORD_SUB) <= -0x2000) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 14, 30, 6); DestroyTask(tIconTaskId); @@ -1357,7 +1363,7 @@ static bool32 MatchCall_EndCall(u8 taskId) u8 playerObjectId; if (!IsDma3ManagerBusyWithBgCopy() && !IsSEPlaying()) { - ChangeBgY(0, 0, 0); + ChangeBgY(0, 0, BG_COORD_SET); if (!sMatchCallState.triggeredFromScript) { LoadMessageBoxAndBorderGfx(); @@ -1365,7 +1371,7 @@ static bool32 MatchCall_EndCall(u8 taskId) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); } return TRUE; @@ -1401,7 +1407,7 @@ static void InitMatchCallTextPrinter(int windowId, const u8 *str) struct TextPrinterTemplate printerTemplate; printerTemplate.currentChar = str; printerTemplate.windowId = windowId; - printerTemplate.fontId = 1; + printerTemplate.fontId = FONT_NORMAL; printerTemplate.x = 32; printerTemplate.y = 1; printerTemplate.currentX = 32; @@ -1499,7 +1505,7 @@ bool32 SelectMatchCallMessage(int trainerId, u8 *str) { u32 matchCallId; const struct MatchCallText *matchCallText; - bool32 retVal = FALSE; + bool32 newRematchRequest = FALSE; matchCallId = GetTrainerMatchCallId(trainerId); sBattleFrontierStreakInfo.facilityId = 0; @@ -1517,7 +1523,7 @@ bool32 SelectMatchCallMessage(int trainerId, u8 *str) else if (ShouldTrainerRequestBattle(matchCallId)) { matchCallText = GetDifferentRouteMatchCallText(matchCallId, str); - retVal = TRUE; + newRematchRequest = TRUE; UpdateRematchIfDefeated(matchCallId); } else if (Random() % 3) @@ -1532,7 +1538,7 @@ bool32 SelectMatchCallMessage(int trainerId, u8 *str) } BuildMatchCallString(matchCallId, matchCallText, str); - return retVal; + return newRematchRequest; } static int GetTrainerMatchCallId(int trainerId) @@ -1569,7 +1575,7 @@ static const struct MatchCallText *GetBattleMatchCallText(int matchCallId, u8 *s { int mask; u32 textId, topic, id; - + topic = Random() % 3; textId = sMatchCallTrainers[matchCallId].battleTopicTextIds[topic]; if (!textId) @@ -1591,6 +1597,7 @@ static const struct MatchCallText *GetGeneralMatchCallText(int matchCallId, u8 * rand = Random(); if (!(rand & 1)) { + // Count the number of facilities with a win streak for (count = 0, i = 0; i < NUM_FRONTIER_FACILITIES; i++) { if (GetFrontierStreakInfo(i, &topic) > 1) @@ -1599,6 +1606,8 @@ static const struct MatchCallText *GetGeneralMatchCallText(int matchCallId, u8 * if (count) { + // At least one facility with a win streak + // Randomly choose one to have a call about count = Random() % count; for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) { @@ -1808,15 +1817,15 @@ static void PopulateSpeciesFromTrainerParty(int matchCallId, u8 *destStr) StringCopy(destStr, speciesName); } -static const u8 *const sBattleFrontierFacilityNames[] = +static const u8 *const sBattleFrontierFacilityNames[NUM_FRONTIER_FACILITIES] = { - gText_BattleTower2, - gText_BattleDome, - gText_BattlePalace, - gText_BattleArena, - gText_BattlePike, - gText_BattleFactory, - gText_BattlePyramid, + [FRONTIER_FACILITY_TOWER] = gText_BattleTower2, + [FRONTIER_FACILITY_DOME] = gText_BattleDome, + [FRONTIER_FACILITY_PALACE] = gText_BattlePalace, + [FRONTIER_FACILITY_ARENA] = gText_BattleArena, + [MATCH_CALL_PIKE] = gText_BattlePike, + [MATCH_CALL_FACTORY] = gText_BattleFactory, + [FRONTIER_FACILITY_PYRAMID] = gText_BattlePyramid, }; static void PopulateBattleFrontierFacilityName(int matchCallId, u8 *destStr) @@ -1833,7 +1842,7 @@ static void PopulateBattleFrontierStreak(int matchCallId, u8 *destStr) streak /= 10; i++; } - + ConvertIntToDecimalStringN(destStr, sBattleFrontierStreakInfo.streak, STR_CONV_MODE_LEFT_ALIGN, i); } @@ -1900,9 +1909,9 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) switch (facilityId) { case FRONTIER_FACILITY_DOME: - for (i = 0; i < 2; i++) + for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.domeRecordWinStreaks); i++) { - for (j = 0; j < 2; j++) + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { if (streak < gSaveBlock2Ptr->frontier.domeRecordWinStreaks[i][j]) streak = gSaveBlock2Ptr->frontier.domeRecordWinStreaks[i][j]; @@ -1910,12 +1919,8 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) } *topicTextId = GEN_TOPIC_B_DOME - 1; break; - #ifdef BUGFIX - case FRONTIER_FACILITY_PIKE: - #else - case FRONTIER_FACILITY_FACTORY: - #endif - for (i = 0; i < 2; i++) + case MATCH_CALL_PIKE: + for (i = 0; i < FRONTIER_LVL_MODE_COUNT; i++) { if (streak < gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]) streak = gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]; @@ -1923,9 +1928,9 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) *topicTextId = GEN_TOPIC_B_PIKE - 1; break; case FRONTIER_FACILITY_TOWER: - for (i = 0; i < 4; i++) + for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.towerRecordWinStreaks); i++) { - for (j = 0; j < 2; j++) + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { if (streak < gSaveBlock2Ptr->frontier.towerRecordWinStreaks[i][j]) streak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[i][j]; @@ -1934,9 +1939,9 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) *topicTextId = GEN_TOPIC_STREAK_RECORD - 1; break; case FRONTIER_FACILITY_PALACE: - for (i = 0; i < 2; i++) + for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.palaceRecordWinStreaks); i++) { - for (j = 0; j < 2; j++) + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { if (streak < gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[i][j]) streak = gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[i][j]; @@ -1944,14 +1949,10 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) } *topicTextId = GEN_TOPIC_STREAK_RECORD - 1; break; - #ifdef BUGFIX - case FRONTIER_FACILITY_FACTORY: - #else - case FRONTIER_FACILITY_PIKE: - #endif - for (i = 0; i < 2; i++) + case MATCH_CALL_FACTORY: + for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.factoryRecordWinStreaks); i++) { - for (j = 0; j < 2; j++) + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { if (streak < gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[i][j]) streak = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[i][j]; @@ -1960,7 +1961,7 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) *topicTextId = GEN_TOPIC_STREAK_RECORD - 1; break; case FRONTIER_FACILITY_ARENA: - for (i = 0; i < 2; i++) + for (i = 0; i < FRONTIER_LVL_MODE_COUNT; i++) { if (streak < gSaveBlock2Ptr->frontier.arenaRecordStreaks[i]) streak = gSaveBlock2Ptr->frontier.arenaRecordStreaks[i]; @@ -1968,7 +1969,7 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) *topicTextId = GEN_TOPIC_STREAK_RECORD - 1; break; case FRONTIER_FACILITY_PYRAMID: - for (i = 0; i < 2; i++) + for (i = 0; i < FRONTIER_LVL_MODE_COUNT; i++) { if (streak < gSaveBlock2Ptr->frontier.pyramidRecordStreaks[i]) streak = gSaveBlock2Ptr->frontier.pyramidRecordStreaks[i]; @@ -2022,7 +2023,7 @@ static u8 GetPokedexRatingLevel(u16 numSeen) return 18; if (numSeen < 200) return 19; - + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), FLAG_GET_CAUGHT)) numSeen--; if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), FLAG_GET_CAUGHT)) diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 239639e0b6..0fb80342f8 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -1,7 +1,6 @@ #include "global.h" #include "main.h" #include "constants/songs.h" -#include "constants/easy_chat.h" #include "constants/event_objects.h" #include "mauville_old_man.h" #include "event_data.h" @@ -21,12 +20,9 @@ #include "field_message_box.h" #include "script_menu.h" #include "trader.h" +#include "m4a.h" #include "constants/mauville_old_man.h" -#define CHAR_SONG_WORD_SEPARATOR 0x37 - -extern struct MusicPlayerInfo gMPlayInfo_SE2; - static void InitGiddyTaleList(void); static void StartBardSong(bool8 useTemporaryLyrics); static void Task_BardSong(u8 taskId); @@ -50,26 +46,29 @@ static const u16 sDefaultBardSongLyrics[BARD_SONG_LENGTH] = { EC_WORD_DANCE }; -static const u8 * const sGiddyAdjectives[] = { - gText_SoPretty, - gText_SoDarling, - gText_SoRelaxed, - gText_SoSunny, - gText_SoDesirable, - gText_SoExciting, - gText_SoAmusing, - gText_SoMagical +static const u8 *const sGiddyAdjectives[] = { + GiddyText_SoPretty, + GiddyText_SoDarling, + GiddyText_SoRelaxed, + GiddyText_SoSunny, + GiddyText_SoDesirable, + GiddyText_SoExciting, + GiddyText_SoAmusing, + GiddyText_SoMagical }; -static const u8 * const sGiddyQuestions[] = { - gMauvilleManText_ISoWantToGoOnAVacation, - gMauvilleManText_IBoughtCrayonsWith120Colors, - gMauvilleManText_WouldntItBeNiceIfWeCouldFloat, - gMauvilleManText_WhenYouWriteOnASandyBeach, - gMauvilleManText_WhatsTheBottomOfTheSeaLike, - gMauvilleManText_WhenYouSeeTheSettingSunDoesIt, - gMauvilleManText_LyingBackInTheGreenGrass, - gMauvilleManText_SecretBasesAreSoWonderful +// Non-random lines Giddy can say. Not all are strictly +// questions, but most are, and the player will receive +// a Yes/No prompt afterwards regardless. +static const u8 *const sGiddyQuestions[GIDDY_MAX_QUESTIONS] = { + GiddyText_ISoWantToGoOnAVacation, + GiddyText_IBoughtCrayonsWith120Colors, + GiddyText_WouldntItBeNiceIfWeCouldFloat, + GiddyText_WhenYouWriteOnASandyBeach, + GiddyText_WhatsTheBottomOfTheSeaLike, + GiddyText_WhenYouSeeTheSettingSunDoesIt, + GiddyText_LyingBackInTheGreenGrass, + GiddyText_SecretBasesAreSoWonderful }; static void SetupBard(void) @@ -120,46 +119,41 @@ void SetMauvilleOldMan(void) // Determine man based on the last digit of the player's trainer ID. switch ((trainerId % 10) / 2) { - case MAUVILLE_MAN_BARD: - SetupBard(); - break; - case MAUVILLE_MAN_HIPSTER: - SetupHipster(); - break; - case MAUVILLE_MAN_TRADER: - SetupTrader(); - break; - case MAUVILLE_MAN_STORYTELLER: - SetupStoryteller(); - break; - case MAUVILLE_MAN_GIDDY: - SetupGiddy(); - break; + case MAUVILLE_MAN_BARD: + SetupBard(); + break; + case MAUVILLE_MAN_HIPSTER: + SetupHipster(); + break; + case MAUVILLE_MAN_TRADER: + SetupTrader(); + break; + case MAUVILLE_MAN_STORYTELLER: + SetupStoryteller(); + break; + case MAUVILLE_MAN_GIDDY: + SetupGiddy(); + break; } - ScrSpecial_SetMauvilleOldManObjEventGfx(); + SetMauvilleOldManObjEventGfx(); } u8 GetCurrentMauvilleOldMan(void) { - struct MauvilleManCommon *common = &gSaveBlock1Ptr->oldMan.common; - - return common->id; + return gSaveBlock1Ptr->oldMan.common.id; } -void ScrSpecial_GetCurrentMauvilleMan(void) +void Script_GetCurrentMauvilleMan(void) { gSpecialVar_Result = GetCurrentMauvilleOldMan(); } -void ScrSpecial_HasBardSongBeenChanged(void) +void HasBardSongBeenChanged(void) { - u16 *scriptResult = &gSpecialVar_Result; // why?? - struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; - - *scriptResult = bard->hasChangedSong; + gSpecialVar_Result = (&gSaveBlock1Ptr->oldMan.bard)->hasChangedSong; } -void ScrSpecial_SaveBardSongLyrics(void) +void SaveBardSongLyrics(void) { u16 i; struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; @@ -180,8 +174,8 @@ static void PrepareSongText(void) { struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; u16 * lyrics = gSpecialVar_0x8004 == 0 ? bard->songLyrics : bard->temporaryLyrics; - u8 * wordEnd = gStringVar4; - u8 * str = wordEnd; + u8 *wordEnd = gStringVar4; + u8 *str = wordEnd; u16 lineNum; // Put three words on each line @@ -191,7 +185,7 @@ static void PrepareSongText(void) while (wordEnd != str) { if (*str == CHAR_SPACE) - *str = CHAR_SONG_WORD_SEPARATOR; + *str = CHAR_BARD_WORD_DELIMIT; str++; } @@ -202,7 +196,7 @@ static void PrepareSongText(void) while (wordEnd != str) { if (*str == CHAR_SPACE) - *str = CHAR_SONG_WORD_SEPARATOR; + *str = CHAR_BARD_WORD_DELIMIT; str++; } @@ -213,7 +207,7 @@ static void PrepareSongText(void) while (wordEnd != str) { if (*str == CHAR_SPACE) - *str = CHAR_SONG_WORD_SEPARATOR; + *str = CHAR_BARD_WORD_DELIMIT; str++; } @@ -225,28 +219,23 @@ static void PrepareSongText(void) } } -void ScrSpecial_PlayBardSong(void) +void PlayBardSong(void) { StartBardSong(gSpecialVar_0x8004); - ScriptContext1_Stop(); + ScriptContext_Stop(); } -void ScrSpecial_GetHipsterSpokenFlag(void) +void GetHipsterSpokenFlag(void) { - u16 *scriptResult = &gSpecialVar_Result; // again?? - struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; - - *scriptResult = hipster->alreadySpoken; + gSpecialVar_Result = (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken; } -void ScrSpecial_SetHipsterSpokenFlag(void) +void SetHipsterSpokenFlag(void) { - struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; - - hipster->alreadySpoken = TRUE; + (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken = TRUE; } -void ScrSpecial_HipsterTeachWord(void) +void HipsterTryTeachWord(void) { u16 phrase = GetNewHipsterPhraseToTeach(); @@ -261,11 +250,11 @@ void ScrSpecial_HipsterTeachWord(void) } } -void ScrSpecial_GiddyShouldTellAnotherTale(void) +void GiddyShouldTellAnotherTale(void) { struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy; - if (giddy->taleCounter == 10) + if (giddy->taleCounter == GIDDY_MAX_TALES) { gSpecialVar_Result = FALSE; giddy->taleCounter = 0; @@ -276,31 +265,35 @@ void ScrSpecial_GiddyShouldTellAnotherTale(void) } } -void ScrSpecial_GenerateGiddyLine(void) +void GenerateGiddyLine(void) { struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy; if (giddy->taleCounter == 0) InitGiddyTaleList(); + // A line from Giddy is either a line following this format: + // "{random word} is so {adjective}! Don't you agree?", + // or one of the texts in sGiddyQuestions. if (giddy->randomWords[giddy->taleCounter] != EC_EMPTY_WORD) { u8 *stringPtr; u32 adjective = Random(); + adjective %= ARRAY_COUNT(sGiddyAdjectives); - adjective %= 8; stringPtr = CopyEasyChatWord(gStringVar4, giddy->randomWords[giddy->taleCounter]); - stringPtr = StringCopy(stringPtr, gOtherText_Is); + stringPtr = StringCopy(stringPtr, GiddyText_Is); stringPtr = StringCopy(stringPtr, sGiddyAdjectives[adjective]); - StringCopy(stringPtr, gOtherText_DontYouAgree); + StringCopy(stringPtr, GiddyText_DontYouAgree); } else { StringCopy(gStringVar4, sGiddyQuestions[giddy->questionList[giddy->questionNum++]]); } + // 10% chance for Giddy to stop telling tales. if (!(Random() % 10)) - giddy->taleCounter = 10; + giddy->taleCounter = GIDDY_MAX_TALES; else giddy->taleCounter++; @@ -310,7 +303,7 @@ void ScrSpecial_GenerateGiddyLine(void) static void InitGiddyTaleList(void) { struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy; - u16 arr[][2] = { + u16 wordGroupsAndCount[][2] = { {EC_GROUP_POKEMON, 0}, {EC_GROUP_LIFESTYLE, 0}, {EC_GROUP_HOBBIES, 0}, @@ -319,62 +312,64 @@ static void InitGiddyTaleList(void) {EC_GROUP_POKEMON_NATIONAL, 0} }; u16 i; - u16 r10; - u16 r7; - u16 r1; + u16 totalWords; + u16 temp; + u16 var; // re-used - for (i = 0; i < 8; i++) + // Shuffle question list + for (i = 0; i < GIDDY_MAX_QUESTIONS; i++) giddy->questionList[i] = i; - - for (i = 0; i < 8; i++) + for (i = 0; i < GIDDY_MAX_QUESTIONS; i++) { - r1 = Random() % (i + 1); - r7 = giddy->questionList[i]; - giddy->questionList[i] = giddy->questionList[r1]; - giddy->questionList[r1] = r7; + var = Random() % (i + 1); + SWAP(giddy->questionList[i], giddy->questionList[var], temp); } - r10 = 0; - for (i = 0; i < 6; i++) + // Count total number of words in above word groups + totalWords = 0; + for (i = 0; i < ARRAY_COUNT(wordGroupsAndCount); i++) { - arr[i][1] = EasyChat_GetNumWordsInGroup(arr[i][0]); - r10 += arr[i][1]; + wordGroupsAndCount[i][1] = EasyChat_GetNumWordsInGroup(wordGroupsAndCount[i][0]); + totalWords += wordGroupsAndCount[i][1]; } giddy->questionNum = 0; - r7 = 0; - for (i = 0; i < 10; i++) + temp = 0; + for (i = 0; i < GIDDY_MAX_TALES; i++) { - r1 = Random() % 10; - if (r1 < 3 && r7 < 8) + var = Random() % 10; + if (var < 3 && temp < GIDDY_MAX_QUESTIONS) { + // 30% chance for word to be empty (in which case Giddy + // will say one of his non-random questions), unless + // the limit for questions has been reached already. giddy->randomWords[i] = EC_EMPTY_WORD; - r7++; + temp++; } else { - s16 r2 = Random() % r10; - for (r1 = 0; i < 6; r1++) - if ((r2 -= arr[r1][1]) <= 0) + // Pick a random word id, then advance through the word + // groups until the group where that id landed. + s16 randWord = Random() % totalWords; + for (var = 0; i < ARRAY_COUNT(wordGroupsAndCount); var++) + if ((randWord -= wordGroupsAndCount[var][1]) <= 0) break; - if (r1 == 6) - r1 = 0; - giddy->randomWords[i] = GetRandomEasyChatWordFromUnlockedGroup(arr[r1][0]); + if (var == ARRAY_COUNT(wordGroupsAndCount)) + var = 0; + + // Save the randomly selected word + giddy->randomWords[i] = GetRandomEasyChatWordFromUnlockedGroup(wordGroupsAndCount[var][0]); } } } static void ResetBardFlag(void) { - struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; - - bard->hasChangedSong = FALSE; + (&gSaveBlock1Ptr->oldMan.bard)->hasChangedSong = FALSE; } static void ResetHipsterFlag(void) { - struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; - - hipster->alreadySpoken = FALSE; + (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken = FALSE; } static void ResetTraderFlag(void) @@ -391,28 +386,41 @@ void ResetMauvilleOldManFlag(void) { switch (GetCurrentMauvilleOldMan()) { - case MAUVILLE_MAN_BARD: - ResetBardFlag(); - break; - case MAUVILLE_MAN_HIPSTER: - ResetHipsterFlag(); - break; - case MAUVILLE_MAN_STORYTELLER: - ResetStorytellerFlag(); - break; - case MAUVILLE_MAN_TRADER: - ResetTraderFlag(); - break; - case MAUVILLE_MAN_GIDDY: - break; + case MAUVILLE_MAN_BARD: + ResetBardFlag(); + break; + case MAUVILLE_MAN_HIPSTER: + ResetHipsterFlag(); + break; + case MAUVILLE_MAN_STORYTELLER: + ResetStorytellerFlag(); + break; + case MAUVILLE_MAN_TRADER: + ResetTraderFlag(); + break; + case MAUVILLE_MAN_GIDDY: + break; } - ScrSpecial_SetMauvilleOldManObjEventGfx(); + SetMauvilleOldManObjEventGfx(); } +// States and task data for Task_BardSong. +// The function BardSing receives this task as an +// argument and reads its state as well. +enum { + BARD_STATE_INIT, + BARD_STATE_WAIT_BGM, + BARD_STATE_GET_WORD, + BARD_STATE_HANDLE_WORD, + BARD_STATE_WAIT_WORD, + BARD_STATE_PAUSE, +}; -#define tState data[0] -#define tCharIndex data[3] -#define tCurrWord data[4] +#define tState data[0] +#define tWordState data[1] +#define tDelay data[2] +#define tCharIndex data[3] +#define tCurrWord data[4] #define tUseTemporaryLyrics data[5] #define MACRO1(a) (((a) & 3) + (((a) / 8) & 1)) @@ -430,250 +438,261 @@ static void EnableTextPrinters(void) gDisableTextPrinters = FALSE; } -static void BardSong_DisableTextPrinters(struct TextPrinterTemplate * printer, u16 a1) +static void DisableTextPrinters(struct TextPrinterTemplate * printer, u16 renderCmd) { gDisableTextPrinters = TRUE; } -static void sub_8120708(const u8 * src) +static void DrawSongTextWindow(const u8 *str) { - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized(0, 1, src, 0, 1, 1, BardSong_DisableTextPrinters); + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized(0, FONT_NORMAL, str, 0, 1, 1, DisableTextPrinters); gDisableTextPrinters = TRUE; - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); } static void BardSing(struct Task *task, struct BardSong *song) { switch (task->tState) { - case 0: // Initialize song - { - struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; - u16 *lyrics; - s32 i; + case BARD_STATE_INIT: + { + struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; + u16 *lyrics; + s32 i; - // Copy lyrics - if (gSpecialVar_0x8004 == 0) - lyrics = bard->songLyrics; - else - lyrics = bard->temporaryLyrics; - for (i = 0; i < BARD_SONG_LENGTH; i++) - song->lyrics[i] = lyrics[i]; - song->currWord = 0; - } - break; - case 1: // Wait for BGM to end - break; - case 2: // Initialize word + // Copy lyrics + if (gSpecialVar_0x8004 == 0) + lyrics = bard->songLyrics; + else + lyrics = bard->temporaryLyrics; + for (i = 0; i < BARD_SONG_LENGTH; i++) + song->lyrics[i] = lyrics[i]; + song->currWord = 0; + } + break; + case BARD_STATE_WAIT_BGM: + break; + case BARD_STATE_GET_WORD: + { + u16 word = song->lyrics[song->currWord]; + song->sound = GetWordSounds(word); + GetWordPhonemes(song, MACRO1(word)); + song->currWord++; + if (song->sound->var00 != 0xFF) + song->state = 0; + else { - u16 word = song->lyrics[song->currWord]; - song->sound = GetWordSounds(word); - GetWordPhonemes(song, MACRO1(word)); - song->currWord++; - if (song->sound->var00 != 0xFF) - song->state = 0; - else + song->state = 3; + song->phonemeTimer = 2; + } + break; + } + case BARD_STATE_HANDLE_WORD: + case BARD_STATE_WAIT_WORD: + { + const struct BardSound *sound = &song->sound[song->currPhoneme]; + + switch (song->state) + { + case 0: + song->phonemeTimer = song->phonemes[song->currPhoneme].length; + if (sound->var00 <= 50) { - song->state = 3; - song->phonemeTimer = 2; + u8 num = sound->var00 / 3; + m4aSongNumStart(PH_TRAP_HELD + 3 * num); + } + song->state = 2; + song->phonemeTimer--; + break; + case 2: + song->state = 1; + if (sound->var00 <= 50) + { + song->volume = 0x100 + sound->volume * 16; + m4aMPlayVolumeControl(&gMPlayInfo_SE2, TRACKS_ALL, song->volume); + song->pitch = 0x200 + song->phonemes[song->currPhoneme].pitch; + m4aMPlayPitchControl(&gMPlayInfo_SE2, TRACKS_ALL, song->pitch); + } + break; + case 1: + if (song->voiceInflection > 10) + song->volume -= 2; + if (song->voiceInflection & 1) + song->pitch += 64; + else + song->pitch -= 64; + m4aMPlayVolumeControl(&gMPlayInfo_SE2, TRACKS_ALL, song->volume); + m4aMPlayPitchControl(&gMPlayInfo_SE2, TRACKS_ALL, song->pitch); + song->voiceInflection++; + song->phonemeTimer--; + if (song->phonemeTimer == 0) + { + song->currPhoneme++; + if (song->currPhoneme != 6 && song->sound[song->currPhoneme].var00 != 0xFF) + song->state = 0; + else + { + song->state = 3; + song->phonemeTimer = 2; + } } break; - } case 3: - case 4: - { - const struct BardSound *sound = &song->sound[song->currPhoneme]; - - switch (song->state) + song->phonemeTimer--; + if (song->phonemeTimer == 0) { - case 0: - song->phonemeTimer = song->phonemes[song->currPhoneme].length; - if (sound->var00 <= 50) - { - u8 num = sound->var00 / 3; - m4aSongNumStart(PH_TRAP_HELD + 3 * num); - } - song->state = 2; - song->phonemeTimer--; - break; - case 2: - song->state = 1; - if (sound->var00 <= 50) - { - song->volume = 0x100 + sound->volume * 16; - m4aMPlayVolumeControl(&gMPlayInfo_SE2, 0xFFFF, song->volume); - song->pitch = 0x200 + song->phonemes[song->currPhoneme].pitch; - m4aMPlayPitchControl(&gMPlayInfo_SE2, 0xFFFF, song->pitch); - } - break; - case 1: - if (song->voiceInflection > 10) - song->volume -= 2; - if (song->voiceInflection & 1) - song->pitch += 64; - else - song->pitch -= 64; - m4aMPlayVolumeControl(&gMPlayInfo_SE2, 0xFFFF, song->volume); - m4aMPlayPitchControl(&gMPlayInfo_SE2, 0xFFFF, song->pitch); - song->voiceInflection++; - song->phonemeTimer--; - if (song->phonemeTimer == 0) - { - song->currPhoneme++; - if (song->currPhoneme != 6 && song->sound[song->currPhoneme].var00 != 0xFF) - song->state = 0; - else - { - song->state = 3; - song->phonemeTimer = 2; - } - } - break; - case 3: - song->phonemeTimer--; - if (song->phonemeTimer == 0) - { - m4aMPlayStop(&gMPlayInfo_SE2); - song->state = 4; - } - break; + m4aMPlayStop(&gMPlayInfo_SE2); + song->state = 4; } + break; } - break; - case 5: - break; + } + break; + case BARD_STATE_PAUSE: + break; } } static void Task_BardSong(u8 taskId) { - struct Task *task = &gTasks[taskId]; // r5 + struct Task *task = &gTasks[taskId]; BardSing(task, &gBardSong); + switch (task->tState) { - case 0: // Initialize song - PrepareSongText(); - sub_8120708(gStringVar4); - task->data[1] = 0; - task->data[2] = 0; - task->tCharIndex = 0; - task->tCurrWord = 0; - FadeOutBGMTemporarily(4); - task->tState = 1; - break; - case 1: // Wait for BGM to end - if (IsBGMPausedOrStopped()) - task->tState = 2; - break; - case 2: // Initialize word + case BARD_STATE_INIT: + PrepareSongText(); + DrawSongTextWindow(gStringVar4); + task->tWordState = 0; + task->tDelay = 0; + task->tCharIndex = 0; + task->tCurrWord = 0; + FadeOutBGMTemporarily(4); + task->tState = BARD_STATE_WAIT_BGM; + break; + case BARD_STATE_WAIT_BGM: + if (IsBGMPausedOrStopped()) + task->tState = BARD_STATE_GET_WORD; + break; + case BARD_STATE_GET_WORD: + { + struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; + u8 *str = &gStringVar4[task->tCharIndex]; + u16 wordLen = 0; + + // Read letters until delimiter + while (*str != CHAR_SPACE + && *str != CHAR_NEWLINE + && *str != EXT_CTRL_CODE_BEGIN + && *str != EOS) { - struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; - u8 *str = gStringVar4 + task->tCharIndex; - u16 wordLen = 0; + str++; + wordLen++; + } - while (*str != CHAR_SPACE - && *str != CHAR_NEWLINE - && *str != EXT_CTRL_CODE_BEGIN - && *str != EOS) - { - str++; - wordLen++; - } - if (!task->tUseTemporaryLyrics) - sUnknownBardRelated = MACRO2(bard->songLyrics[task->tCurrWord]); - else - sUnknownBardRelated = MACRO2(bard->temporaryLyrics[task->tCurrWord]); + if (!task->tUseTemporaryLyrics) + sUnknownBardRelated = MACRO2(bard->songLyrics[task->tCurrWord]); + else + sUnknownBardRelated = MACRO2(bard->temporaryLyrics[task->tCurrWord]); - gBardSong.length /= wordLen; - if (gBardSong.length <= 0) - gBardSong.length = 1; - task->tCurrWord++; + gBardSong.length /= wordLen; + if (gBardSong.length <= 0) + gBardSong.length = 1; + task->tCurrWord++; - if (task->data[2] == 0) + if (task->tDelay == 0) + { + task->tState = BARD_STATE_HANDLE_WORD; + task->tWordState = 0; + } + else + { + task->tState = BARD_STATE_PAUSE; + task->tWordState = 0; + } + } + break; + case BARD_STATE_PAUSE: + // Wait before singing next word + if (task->tDelay == 0) + task->tState = BARD_STATE_HANDLE_WORD; + else + task->tDelay--; + break; + case BARD_STATE_HANDLE_WORD: + if (gStringVar4[task->tCharIndex] == EOS) + { + // End song + FadeInBGM(6); + m4aMPlayFadeOutTemporarily(&gMPlayInfo_SE2, 2); + ScriptContext_Enable(); + DestroyTask(taskId); + } + else if (gStringVar4[task->tCharIndex] == CHAR_SPACE) + { + // Handle space + EnableTextPrinters(); + task->tCharIndex++; + task->tState = BARD_STATE_GET_WORD; + task->tDelay = 0; + } + else if (gStringVar4[task->tCharIndex] == CHAR_NEWLINE) + { + // Handle newline + task->tCharIndex++; + task->tState = BARD_STATE_GET_WORD; + task->tDelay = 0; + } + else if (gStringVar4[task->tCharIndex] == EXT_CTRL_CODE_BEGIN) + { + // Handle ctrl code + task->tCharIndex += 2; // skip over control codes + task->tState = BARD_STATE_GET_WORD; + task->tDelay = 8; + } + else if (gStringVar4[task->tCharIndex] == CHAR_BARD_WORD_DELIMIT) + { + // Handle word boundary + gStringVar4[task->tCharIndex] = CHAR_SPACE; // Replace with a real space + EnableTextPrinters(); + task->tCharIndex++; + task->tDelay = 0; + } + else + { + // Handle regular word + switch (task->tWordState) { - task->tState = 3; - task->data[1] = 0; - } - else - { - task->tState = 5; - task->data[1] = 0; + case 0: + EnableTextPrinters(); + task->tWordState++; + break; + case 1: + task->tWordState++; + break; + case 2: + task->tCharIndex++; + task->tWordState = 0; + task->tDelay = gBardSong.length; + task->tState = BARD_STATE_WAIT_WORD; + break; } } - break; - case 5: - if (task->data[2] == 0) - task->tState = 3; - else - task->data[2]--; - break; - case 3: - if (gStringVar4[task->tCharIndex] == EOS) - { - FadeInBGM(6); - m4aMPlayFadeOutTemporarily(&gMPlayInfo_SE2, 2); - EnableBothScriptContexts(); - DestroyTask(taskId); - } - else if (gStringVar4[task->tCharIndex] == CHAR_SPACE) - { - - EnableTextPrinters(); - task->tCharIndex++; - task->tState = 2; - task->data[2] = 0; - } - else if (gStringVar4[task->tCharIndex] == CHAR_NEWLINE) - { - task->tCharIndex++; - task->tState = 2; - task->data[2] = 0; - } - else if (gStringVar4[task->tCharIndex] == EXT_CTRL_CODE_BEGIN) - { - task->tCharIndex += 2; // skip over control codes - task->tState = 2; - task->data[2] = 8; - } - else if (gStringVar4[task->tCharIndex] == CHAR_SONG_WORD_SEPARATOR) - { - gStringVar4[task->tCharIndex] = CHAR_SPACE; // restore it back to a space - EnableTextPrinters(); - task->tCharIndex++; - task->data[2] = 0; - } - else - { - switch (task->data[1]) - { - case 0: - EnableTextPrinters(); - task->data[1]++; - break; - case 1: - task->data[1]++; - break; - case 2: - task->tCharIndex++; - task->data[1] = 0; - task->data[2] = gBardSong.length; - task->tState = 4; - break; - } - } - break; - case 4: - task->data[2]--; - if (task->data[2] == 0) - task->tState = 3; - break; + break; + case BARD_STATE_WAIT_WORD: + // Wait for word to finish being sung. + // BardSing will continue to play it. + task->tDelay--; + if (task->tDelay == 0) + task->tState = BARD_STATE_HANDLE_WORD; + break; } RunTextPrintersAndIsPrinter0Active(); } -void ScrSpecial_SetMauvilleOldManObjEventGfx(void) +void SetMauvilleOldManObjEventGfx(void) { VarSet(VAR_OBJ_GFX_ID_0, OBJ_EVENT_GFX_BARD); } @@ -720,76 +739,69 @@ void SanitizeMauvilleOldManForRuby(union OldMan * oldMan) } } -void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3) +// Unused +static void SetMauvilleOldManLanguage(union OldMan * oldMan, u32 language1, u32 language2, u32 language3) { s32 i; switch (oldMan->common.id) { - case MAUVILLE_MAN_TRADER: - { - struct MauvilleOldManTrader * trader = &oldMan->trader; + case MAUVILLE_MAN_TRADER: + { + struct MauvilleOldManTrader * trader = &oldMan->trader; - for (i = 0; i < NUM_TRADER_ITEMS; i++) - { - if (IsStringJapanese(trader->playerNames[i])) - { - trader->language[i] = r8; - } - else - { - trader->language[i] = r7; - } - } - } - break; - case MAUVILLE_MAN_STORYTELLER: + for (i = 0; i < NUM_TRADER_ITEMS; i++) { - struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; - - for (i = 0; i < NUM_STORYTELLER_TALES; i++) - { - if (IsStringJapanese(storyteller->trainerNames[i])) - { - storyteller->language[i] = r8; - } - else - { - storyteller->language[i] = r7; - } - } - } - break; - case MAUVILLE_MAN_BARD: - { - struct MauvilleManBard * bard = &oldMan->bard; - - if (r3 == LANGUAGE_JAPANESE) - bard->language = r8; + if (IsStringJapanese(trader->playerNames[i])) + trader->language[i] = language1; else - bard->language = r7; + trader->language[i] = language2; } - break; - case MAUVILLE_MAN_HIPSTER: - { - struct MauvilleManHipster * hipster = &oldMan->hipster; + } + break; + case MAUVILLE_MAN_STORYTELLER: + { + struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; - if (r3 == LANGUAGE_JAPANESE) - hipster->language = r8; - else - hipster->language = r7; - } - break; - case MAUVILLE_MAN_GIDDY: + for (i = 0; i < NUM_STORYTELLER_TALES; i++) { - struct MauvilleManGiddy * giddy = &oldMan->giddy; - - if (r3 == LANGUAGE_JAPANESE) - giddy->language = r8; + if (IsStringJapanese(storyteller->trainerNames[i])) + storyteller->language[i] = language1; else - giddy->language = r7; + storyteller->language[i] = language2; } - break; + } + break; + case MAUVILLE_MAN_BARD: + { + struct MauvilleManBard * bard = &oldMan->bard; + + if (language3 == LANGUAGE_JAPANESE) + bard->language = language1; + else + bard->language = language2; + } + break; + case MAUVILLE_MAN_HIPSTER: + { + struct MauvilleManHipster * hipster = &oldMan->hipster; + + if (language3 == LANGUAGE_JAPANESE) + hipster->language = language1; + else + hipster->language = language2; + } + break; + case MAUVILLE_MAN_GIDDY: + { + struct MauvilleManGiddy * giddy = &oldMan->giddy; + + if (language3 == LANGUAGE_JAPANESE) + giddy->language = language1; + else + giddy->language = language2; + } + break; } } @@ -822,83 +834,83 @@ void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language switch (oldMan->common.id) { - case MAUVILLE_MAN_TRADER: - { - struct MauvilleOldManTrader * trader = &oldMan->trader; - s32 i; + case MAUVILLE_MAN_TRADER: + { + struct MauvilleOldManTrader * trader = &oldMan->trader; + s32 i; - if (isRuby) + if (isRuby) + { + for (i = 0; i < NUM_TRADER_ITEMS; i++) { - for (i = 0; i < NUM_TRADER_ITEMS; i++) + u8 *str = trader->playerNames[i]; + if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN) { - u8 * str = trader->playerNames[i]; - if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN) - { - StripExtCtrlCodes(str); - trader->language[i] = LANGUAGE_JAPANESE; - } - else - trader->language[i] = language; + StripExtCtrlCodes(str); + trader->language[i] = LANGUAGE_JAPANESE; } + else + trader->language[i] = language; } - else + } + else + { + for (i = 0; i < NUM_TRADER_ITEMS; i++) { - for (i = 0; i < NUM_TRADER_ITEMS; i++) + if (trader->language[i] == LANGUAGE_JAPANESE) { - if (trader->language[i] == LANGUAGE_JAPANESE) - { - StripExtCtrlCodes(trader->playerNames[i]); - } + StripExtCtrlCodes(trader->playerNames[i]); } } } - break; - case MAUVILLE_MAN_STORYTELLER: + } + break; + case MAUVILLE_MAN_STORYTELLER: + { + + struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; + s32 i; + + if (isRuby) { - - struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; - s32 i; - - if (isRuby) + for (i = 0; i < NUM_STORYTELLER_TALES; i++) { - for (i = 0; i < NUM_STORYTELLER_TALES; i++) - { - if (storyteller->gameStatIDs[i] != 0) - storyteller->language[i] = language; - } + if (storyteller->gameStatIDs[i] != 0) + storyteller->language[i] = language; } } - break; - case MAUVILLE_MAN_BARD: - { - struct MauvilleManBard * bard = &oldMan->bard; + } + break; + case MAUVILLE_MAN_BARD: + { + struct MauvilleManBard * bard = &oldMan->bard; - if (isRuby) - { - bard->language = language; - } - } - break; - case MAUVILLE_MAN_HIPSTER: + if (isRuby) { - struct MauvilleManHipster * hipster = &oldMan->hipster; - - if (isRuby) - { - hipster->language = language; - } + bard->language = language; } - break; - case MAUVILLE_MAN_GIDDY: + } + break; + case MAUVILLE_MAN_HIPSTER: + { + struct MauvilleManHipster * hipster = &oldMan->hipster; + + if (isRuby) { - struct MauvilleManGiddy * giddy = &oldMan->giddy; - - if (isRuby) - { - giddy->language = language; - } + hipster->language = language; } - break; + } + break; + case MAUVILLE_MAN_GIDDY: + { + struct MauvilleManGiddy * giddy = &oldMan->giddy; + + if (isRuby) + { + giddy->language = language; + } + } + break; } } @@ -914,223 +926,226 @@ struct Story static const struct Story sStorytellerStories[] = { // The 50 below is replaced with GAME_STAT_SAVED_GAME { - 50, 1, - MauvilleCity_PokemonCenter_1F_Text_SavedGameTitle, - MauvilleCity_PokemonCenter_1F_Text_SavedGameAction, + 50, 1, + MauvilleCity_PokemonCenter_1F_Text_SavedGameTitle, + MauvilleCity_PokemonCenter_1F_Text_SavedGameAction, MauvilleCity_PokemonCenter_1F_Text_SavedGameStory }, { - GAME_STAT_STARTED_TRENDS, 1, - MauvilleCity_PokemonCenter_1F_Text_TrendsStartedTitle, - MauvilleCity_PokemonCenter_1F_Text_TrendsStartedAction, + GAME_STAT_STARTED_TRENDS, 1, + MauvilleCity_PokemonCenter_1F_Text_TrendsStartedTitle, + MauvilleCity_PokemonCenter_1F_Text_TrendsStartedAction, MauvilleCity_PokemonCenter_1F_Text_TrendsStartedStory }, { - GAME_STAT_PLANTED_BERRIES, 1, - MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedTitle, - MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedAction, + GAME_STAT_PLANTED_BERRIES, 1, + MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedTitle, + MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedAction, MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedStory }, { - GAME_STAT_TRADED_BIKES, 1, - MauvilleCity_PokemonCenter_1F_Text_BikeTradesTitle, - MauvilleCity_PokemonCenter_1F_Text_BikeTradesAction, + GAME_STAT_TRADED_BIKES, 1, + MauvilleCity_PokemonCenter_1F_Text_BikeTradesTitle, + MauvilleCity_PokemonCenter_1F_Text_BikeTradesAction, MauvilleCity_PokemonCenter_1F_Text_BikeTradesStory }, { - GAME_STAT_GOT_INTERVIEWED, 1, - MauvilleCity_PokemonCenter_1F_Text_InterviewsTitle, - MauvilleCity_PokemonCenter_1F_Text_InterviewsAction, + GAME_STAT_GOT_INTERVIEWED, 1, + MauvilleCity_PokemonCenter_1F_Text_InterviewsTitle, + MauvilleCity_PokemonCenter_1F_Text_InterviewsAction, MauvilleCity_PokemonCenter_1F_Text_InterviewsStory }, { - GAME_STAT_TRAINER_BATTLES, 1, - MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesTitle, - MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesAction, + GAME_STAT_TRAINER_BATTLES, 1, + MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesTitle, + MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesAction, MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesStory }, { - GAME_STAT_POKEMON_CAPTURES, 1, - MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtTitle, - MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtAction, + GAME_STAT_POKEMON_CAPTURES, 1, + MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtTitle, + MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtAction, MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtStory }, { - GAME_STAT_FISHING_CAPTURES, 1, - MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtTitle, - MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtAction, + GAME_STAT_FISHING_CAPTURES, 1, + MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtTitle, + MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtAction, MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtStory }, { - GAME_STAT_HATCHED_EGGS, 1, - MauvilleCity_PokemonCenter_1F_Text_EggsHatchedTitle, - MauvilleCity_PokemonCenter_1F_Text_EggsHatchedAction, + GAME_STAT_HATCHED_EGGS, 1, + MauvilleCity_PokemonCenter_1F_Text_EggsHatchedTitle, + MauvilleCity_PokemonCenter_1F_Text_EggsHatchedAction, MauvilleCity_PokemonCenter_1F_Text_EggsHatchedStory }, { - GAME_STAT_EVOLVED_POKEMON, 1, - MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedTitle, - MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedAction, + GAME_STAT_EVOLVED_POKEMON, 1, + MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedTitle, + MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedAction, MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedStory }, { - GAME_STAT_USED_POKECENTER, 1, - MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterTitle, - MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterAction, + GAME_STAT_USED_POKECENTER, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterAction, MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterStory }, { - GAME_STAT_RESTED_AT_HOME, 1, - MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeTitle, - MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeAction, + GAME_STAT_RESTED_AT_HOME, 1, + MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeTitle, + MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeAction, MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeStory }, { - GAME_STAT_ENTERED_SAFARI_ZONE, 1, - MauvilleCity_PokemonCenter_1F_Text_SafariGamesTitle, - MauvilleCity_PokemonCenter_1F_Text_SafariGamesAction, + GAME_STAT_ENTERED_SAFARI_ZONE, 1, + MauvilleCity_PokemonCenter_1F_Text_SafariGamesTitle, + MauvilleCity_PokemonCenter_1F_Text_SafariGamesAction, MauvilleCity_PokemonCenter_1F_Text_SafariGamesStory }, { - GAME_STAT_USED_CUT, 1, - MauvilleCity_PokemonCenter_1F_Text_UsedCutTitle, - MauvilleCity_PokemonCenter_1F_Text_UsedCutAction, + GAME_STAT_USED_CUT, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedCutTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedCutAction, MauvilleCity_PokemonCenter_1F_Text_UsedCutStory }, { - GAME_STAT_USED_ROCK_SMASH, 1, - MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashTitle, - MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashAction, + GAME_STAT_USED_ROCK_SMASH, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashAction, MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashStory }, { - GAME_STAT_MOVED_SECRET_BASE, 1, - MauvilleCity_PokemonCenter_1F_Text_MovedBasesTitle, - MauvilleCity_PokemonCenter_1F_Text_MovedBasesAction, + GAME_STAT_MOVED_SECRET_BASE, 1, + MauvilleCity_PokemonCenter_1F_Text_MovedBasesTitle, + MauvilleCity_PokemonCenter_1F_Text_MovedBasesAction, MauvilleCity_PokemonCenter_1F_Text_MovedBasesStory }, { - GAME_STAT_USED_SPLASH, 1, - MauvilleCity_PokemonCenter_1F_Text_UsedSplashTitle, - MauvilleCity_PokemonCenter_1F_Text_UsedSplashAction, + GAME_STAT_USED_SPLASH, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedSplashTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedSplashAction, MauvilleCity_PokemonCenter_1F_Text_UsedSplashStory }, { - GAME_STAT_USED_STRUGGLE, 1, - MauvilleCity_PokemonCenter_1F_Text_UsedStruggleTitle, - MauvilleCity_PokemonCenter_1F_Text_UsedStruggleAction, + GAME_STAT_USED_STRUGGLE, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedStruggleTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedStruggleAction, MauvilleCity_PokemonCenter_1F_Text_UsedStruggleStory }, { - GAME_STAT_SLOT_JACKPOTS, 1, - MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsTitle, - MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsAction, + GAME_STAT_SLOT_JACKPOTS, 1, + MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsTitle, + MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsAction, MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsStory }, { - GAME_STAT_CONSECUTIVE_ROULETTE_WINS, 2, - MauvilleCity_PokemonCenter_1F_Text_RouletteWinsTitle, - MauvilleCity_PokemonCenter_1F_Text_RouletteWinsAction, + GAME_STAT_CONSECUTIVE_ROULETTE_WINS, 2, + MauvilleCity_PokemonCenter_1F_Text_RouletteWinsTitle, + MauvilleCity_PokemonCenter_1F_Text_RouletteWinsAction, MauvilleCity_PokemonCenter_1F_Text_RouletteWinsStory }, { - GAME_STAT_ENTERED_BATTLE_TOWER, 1, - MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesTitle, - MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesAction, + GAME_STAT_ENTERED_BATTLE_TOWER, 1, + MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesTitle, + MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesAction, MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesStory }, { - GAME_STAT_POKEBLOCKS, 1, - MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksTitle, - MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksAction, + GAME_STAT_POKEBLOCKS, 1, + MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksTitle, + MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksAction, MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksStory }, { - GAME_STAT_ENTERED_CONTEST, 1, - MauvilleCity_PokemonCenter_1F_Text_EnteredContestsTitle, - MauvilleCity_PokemonCenter_1F_Text_EnteredContestsAction, + GAME_STAT_ENTERED_CONTEST, 1, + MauvilleCity_PokemonCenter_1F_Text_EnteredContestsTitle, + MauvilleCity_PokemonCenter_1F_Text_EnteredContestsAction, MauvilleCity_PokemonCenter_1F_Text_EnteredContestsStory }, { - GAME_STAT_WON_CONTEST, 1, - MauvilleCity_PokemonCenter_1F_Text_WonContestsTitle, - MauvilleCity_PokemonCenter_1F_Text_WonContestsAction, + GAME_STAT_WON_CONTEST, 1, + MauvilleCity_PokemonCenter_1F_Text_WonContestsTitle, + MauvilleCity_PokemonCenter_1F_Text_WonContestsAction, MauvilleCity_PokemonCenter_1F_Text_WonContestsStory }, { - GAME_STAT_SHOPPED, 1, - MauvilleCity_PokemonCenter_1F_Text_TimesShoppedTitle, - MauvilleCity_PokemonCenter_1F_Text_TimesShoppedAction, + GAME_STAT_SHOPPED, 1, + MauvilleCity_PokemonCenter_1F_Text_TimesShoppedTitle, + MauvilleCity_PokemonCenter_1F_Text_TimesShoppedAction, MauvilleCity_PokemonCenter_1F_Text_TimesShoppedStory }, { - GAME_STAT_USED_ITEMFINDER, 1, - MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderTitle, - MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderAction, + GAME_STAT_USED_ITEMFINDER, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderAction, MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderStory }, { - GAME_STAT_GOT_RAINED_ON, 1, - MauvilleCity_PokemonCenter_1F_Text_TimesRainedTitle, - MauvilleCity_PokemonCenter_1F_Text_TimesRainedAction, + GAME_STAT_GOT_RAINED_ON, 1, + MauvilleCity_PokemonCenter_1F_Text_TimesRainedTitle, + MauvilleCity_PokemonCenter_1F_Text_TimesRainedAction, MauvilleCity_PokemonCenter_1F_Text_TimesRainedStory }, { - GAME_STAT_CHECKED_POKEDEX, 1, - MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexTitle, - MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexAction, + GAME_STAT_CHECKED_POKEDEX, 1, + MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexTitle, + MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexAction, MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexStory }, { - GAME_STAT_RECEIVED_RIBBONS, 1, - MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsTitle, - MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsAction, + GAME_STAT_RECEIVED_RIBBONS, 1, + MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsTitle, + MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsAction, MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsStory }, { - GAME_STAT_JUMPED_DOWN_LEDGES, 1, - MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedTitle, - MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedAction, + GAME_STAT_JUMPED_DOWN_LEDGES, 1, + MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedTitle, + MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedAction, MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedStory }, { - GAME_STAT_WATCHED_TV, 1, - MauvilleCity_PokemonCenter_1F_Text_TVWatchedTitle, - MauvilleCity_PokemonCenter_1F_Text_TVWatchedAction, + GAME_STAT_WATCHED_TV, 1, + MauvilleCity_PokemonCenter_1F_Text_TVWatchedTitle, + MauvilleCity_PokemonCenter_1F_Text_TVWatchedAction, MauvilleCity_PokemonCenter_1F_Text_TVWatchedStory }, { - GAME_STAT_CHECKED_CLOCK, 1, - MauvilleCity_PokemonCenter_1F_Text_CheckedClockTitle, - MauvilleCity_PokemonCenter_1F_Text_CheckedClockAction, + GAME_STAT_CHECKED_CLOCK, 1, + MauvilleCity_PokemonCenter_1F_Text_CheckedClockTitle, + MauvilleCity_PokemonCenter_1F_Text_CheckedClockAction, MauvilleCity_PokemonCenter_1F_Text_CheckedClockStory }, { - GAME_STAT_WON_POKEMON_LOTTERY, 1, - MauvilleCity_PokemonCenter_1F_Text_WonLotteryTitle, - MauvilleCity_PokemonCenter_1F_Text_WonLotteryAction, + GAME_STAT_WON_POKEMON_LOTTERY, 1, + MauvilleCity_PokemonCenter_1F_Text_WonLotteryTitle, + MauvilleCity_PokemonCenter_1F_Text_WonLotteryAction, MauvilleCity_PokemonCenter_1F_Text_WonLotteryStory }, { - GAME_STAT_USED_DAYCARE, 1, - MauvilleCity_PokemonCenter_1F_Text_UsedDaycareTitle, - MauvilleCity_PokemonCenter_1F_Text_UsedDaycareAction, + GAME_STAT_USED_DAYCARE, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedDaycareTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedDaycareAction, MauvilleCity_PokemonCenter_1F_Text_UsedDaycareStory }, { - GAME_STAT_RODE_CABLE_CAR, 1, - MauvilleCity_PokemonCenter_1F_Text_RodeCableCarTitle, - MauvilleCity_PokemonCenter_1F_Text_RodeCableCarAction, + GAME_STAT_RODE_CABLE_CAR, 1, + MauvilleCity_PokemonCenter_1F_Text_RodeCableCarTitle, + MauvilleCity_PokemonCenter_1F_Text_RodeCableCarAction, MauvilleCity_PokemonCenter_1F_Text_RodeCableCarStory }, { - GAME_STAT_ENTERED_HOT_SPRINGS, 1, - MauvilleCity_PokemonCenter_1F_Text_HotSpringsTitle, - MauvilleCity_PokemonCenter_1F_Text_HotSpringsAction, + GAME_STAT_ENTERED_HOT_SPRINGS, 1, + MauvilleCity_PokemonCenter_1F_Text_HotSpringsTitle, + MauvilleCity_PokemonCenter_1F_Text_HotSpringsAction, MauvilleCity_PokemonCenter_1F_Text_HotSpringsStory } }; +static const s32 sNumStories = ARRAY_COUNT(sStorytellerStories); +static const u32 sUnused = 8; + static void StorytellerSetup(void) { s32 i; @@ -1164,12 +1179,12 @@ static const struct Story *GetStoryByStat(u32 stat) { s32 i; - for (i = 0; i < (int)ARRAY_COUNT(sStorytellerStories); i++) + for (i = 0; i < sNumStories; i++) { if (sStorytellerStories[i].stat == stat) return &sStorytellerStories[i]; } - return &sStorytellerStories[ARRAY_COUNT(sStorytellerStories) - 1]; + return &sStorytellerStories[sNumStories - 1]; } static const u8 *GetStoryTitleByStat(u32 stat) @@ -1232,9 +1247,9 @@ static void GetStoryByStattellerPlayerName(u32 player, void *dst) memcpy(dst, name, PLAYER_NAME_LENGTH); } -static void StorytellerSetPlayerName(u32 player, const u8 * src) +static void StorytellerSetPlayerName(u32 player, const u8 *src) { - u8 * name = sStorytellerPtr->trainerNames[player]; + u8 *name = sStorytellerPtr->trainerNames[player]; memset(name, EOS, PLAYER_NAME_LENGTH); memcpy(name, src, PLAYER_NAME_LENGTH); } @@ -1250,7 +1265,7 @@ static void StorytellerRecordNewStat(u32 player, u32 stat) sStorytellerPtr->language[player] = gGameLanguage; } -static void ScrambleStatList(u8 * arr, s32 count) +static void ScrambleStatList(u8 *arr, s32 count) { s32 i; @@ -1260,34 +1275,21 @@ static void ScrambleStatList(u8 * arr, s32 count) { u32 a = Random() % count; u32 b = Random() % count; - u8 temp = arr[a]; - arr[a] = arr[b]; - arr[b] = temp; + u8 temp; + SWAP(arr[a], arr[b], temp); } } -struct UnknownStruct_0859F288 -{ - s32 length; - u32 unused2; -}; - -static const struct UnknownStruct_0859F288 sStorytellerStuff = { - ARRAY_COUNT(sStorytellerStories), - sizeof(sStorytellerStuff) -}; - static bool8 StorytellerInitializeRandomStat(void) { - u8 arr[sStorytellerStuff.length]; - s32 i; - s32 j; + u8 storyIds[sNumStories]; + s32 i, j; - ScrambleStatList(arr, ARRAY_COUNT(sStorytellerStories)); - for (i = 0; i < (s32)ARRAY_COUNT(sStorytellerStories); i++) + ScrambleStatList(storyIds, sNumStories); + for (i = 0; i < sNumStories; i++) { - u8 stat = sStorytellerStories[arr[i]].stat; - u8 minVal = sStorytellerStories[arr[i]].minVal; + u8 stat = sStorytellerStories[storyIds[i]].stat; + u8 minVal = sStorytellerStories[storyIds[i]].minVal; for (j = 0; j < NUM_STORYTELLER_TALES; j++) { @@ -1321,7 +1323,7 @@ static void StorytellerDisplayStory(u32 player) static void PrintStoryList(void) { s32 i; - s32 width = GetStringWidth(1, gText_Exit, 0); + s32 width = GetStringWidth(FONT_NORMAL, gText_Exit, 0); for (i = 0; i < NUM_STORYTELLER_TALES; i++) { s32 curWidth; @@ -1329,22 +1331,22 @@ static void PrintStoryList(void) if (gameStatID == 0) break; - curWidth = GetStringWidth(1, GetStoryTitleByStat(gameStatID), 0); + curWidth = GetStringWidth(FONT_NORMAL, GetStoryTitleByStat(gameStatID), 0); if (curWidth > width) width = curWidth; } sStorytellerWindowId = CreateWindowFromRect(0, 0, ConvertPixelWidthToTileWidth(width), GetFreeStorySlot() * 2 + 2); - SetStandardWindowBorderStyle(sStorytellerWindowId, 0); + SetStandardWindowBorderStyle(sStorytellerWindowId, FALSE); for (i = 0; i < NUM_STORYTELLER_TALES; i++) { u16 gameStatID = sStorytellerPtr->gameStatIDs[i]; if (gameStatID == 0) break; - AddTextPrinterParameterized(sStorytellerWindowId, 1, GetStoryTitleByStat(gameStatID), 8, 16 * i + 1, 0xFF, NULL); + AddTextPrinterParameterized(sStorytellerWindowId, FONT_NORMAL, GetStoryTitleByStat(gameStatID), 8, 16 * i + 1, TEXT_SKIP_DRAW, NULL); } - AddTextPrinterParameterized(sStorytellerWindowId, 1, gText_Exit, 8, 16 * i + 1, 0xFF, NULL); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sStorytellerWindowId, GetFreeStorySlot() + 1, 0); - CopyWindowToVram(sStorytellerWindowId, 3); + AddTextPrinterParameterized(sStorytellerWindowId, FONT_NORMAL, gText_Exit, 8, 16 * i + 1, TEXT_SKIP_DRAW, NULL); + InitMenuInUpperLeftCornerNormal(sStorytellerWindowId, GetFreeStorySlot() + 1, 0); + CopyWindowToVram(sStorytellerWindowId, COPYWIN_FULL); } static void Task_StoryListMenu(u8 taskId) @@ -1354,63 +1356,63 @@ static void Task_StoryListMenu(u8 taskId) switch (task->data[0]) { - case 0: - PrintStoryList(); - task->data[0]++; - break; - case 1: - selection = Menu_ProcessInput(); - if (selection == MENU_NOTHING_CHOSEN) - break; - if (selection == MENU_B_PRESSED || selection == GetFreeStorySlot()) - { - gSpecialVar_Result = 0; - } - else - { - gSpecialVar_Result = 1; - sSelectedStory = selection; - } - ClearToTransparentAndRemoveWindow(sStorytellerWindowId); - DestroyTask(taskId); - EnableBothScriptContexts(); + case 0: + PrintStoryList(); + task->data[0]++; + break; + case 1: + selection = Menu_ProcessInput(); + if (selection == MENU_NOTHING_CHOSEN) break; + if (selection == MENU_B_PRESSED || selection == GetFreeStorySlot()) + { + gSpecialVar_Result = 0; + } + else + { + gSpecialVar_Result = 1; + sSelectedStory = selection; + } + ClearToTransparentAndRemoveWindow(sStorytellerWindowId); + DestroyTask(taskId); + ScriptContext_Enable(); + break; } } // Sets gSpecialVar_Result to TRUE if player selected a story -void ScrSpecial_StorytellerStoryListMenu(void) +void StorytellerStoryListMenu(void) { CreateTask(Task_StoryListMenu, 80); } -void ScrSpecial_StorytellerDisplayStory(void) +void Script_StorytellerDisplayStory(void) { StorytellerDisplayStory(sSelectedStory); } -u8 ScrSpecial_StorytellerGetFreeStorySlot(void) +u8 StorytellerGetFreeStorySlot(void) { sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller; return GetFreeStorySlot(); } // Returns TRUE if stat has increased -bool8 ScrSpecial_StorytellerUpdateStat(void) +bool8 StorytellerUpdateStat(void) { - u8 r4; + u8 stat; sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller; - r4 = sStorytellerPtr->gameStatIDs[sSelectedStory]; + stat = sStorytellerPtr->gameStatIDs[sSelectedStory]; if (HasTrainerStatIncreased(sSelectedStory) == TRUE) { - StorytellerRecordNewStat(sSelectedStory, r4); + StorytellerRecordNewStat(sSelectedStory, stat); return TRUE; } return FALSE; } -bool8 ScrSpecial_HasStorytellerAlreadyRecorded(void) +bool8 HasStorytellerAlreadyRecorded(void) { sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller; @@ -1420,7 +1422,7 @@ bool8 ScrSpecial_HasStorytellerAlreadyRecorded(void) return TRUE; } -bool8 ScrSpecial_StorytellerInitializeRandomStat(void) +bool8 Script_StorytellerInitializeRandomStat(void) { sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller; return StorytellerInitializeRandomStat(); diff --git a/src/menu.c b/src/menu.c index 6a99da3d83..4afda8cc89 100644 --- a/src/menu.c +++ b/src/menu.c @@ -48,25 +48,36 @@ struct Menu bool8 APressMuted; }; +static u16 AddWindowParameterized(u8, u8, u8, u8, u8, u8, u16); +static void WindowFunc_DrawStandardFrame(u8, u8, u8, u8, u8, u8); +static void WindowFunc_DrawDialogueFrame(u8, u8, u8, u8, u8, u8); +static void WindowFunc_ClearStdWindowAndFrame(u8, u8, u8, u8, u8, u8); +static void WindowFunc_ClearDialogWindowAndFrame(u8, u8, u8, u8, u8, u8); +static void WindowFunc_DrawDialogFrameWithCustomTileAndPalette(u8, u8, u8, u8, u8, u8); +static void WindowFunc_ClearDialogWindowAndFrameNullPalette(u8, u8, u8, u8, u8, u8); +static void WindowFunc_DrawStdFrameWithCustomTileAndPalette(u8, u8, u8, u8, u8, u8); +static void WindowFunc_ClearStdWindowAndFrameToTransparent(u8, u8, u8, u8, u8, u8); +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 struct Menu sMenu = {0}; static EWRAM_DATA u16 sTileNum = 0; static EWRAM_DATA u8 sPaletteNum = 0; static EWRAM_DATA u8 sYesNoWindowId = 0; -static EWRAM_DATA u8 sWindowId = 0; +static EWRAM_DATA u8 sHofPCTopBarWindowId = 0; static EWRAM_DATA u16 sFiller = 0; // needed to align static EWRAM_DATA bool8 sScheduledBgCopiesToVram[4] = {FALSE}; static EWRAM_DATA u16 sTempTileDataBufferIdx = 0; static EWRAM_DATA void *sTempTileDataBuffer[0x20] = {NULL}; -const u16 gUnknown_0860F074[] = INCBIN_U16("graphics/interface/860F074.gbapal"); +const u16 gStandardMenuPalette[] = INCBIN_U16("graphics/interface/std_menu.gbapal"); -static const u8 sTextSpeedFrameDelays[] = -{ - [OPTIONS_TEXT_SPEED_SLOW] = 8, - [OPTIONS_TEXT_SPEED_MID] = 4, - [OPTIONS_TEXT_SPEED_FAST] = 1 +static const u8 sTextSpeedFrameDelays[] = +{ + [OPTIONS_TEXT_SPEED_SLOW] = 8, + [OPTIONS_TEXT_SPEED_MID] = 4, + [OPTIONS_TEXT_SPEED_FAST] = 1 }; static const struct WindowTemplate sStandardTextBox_WindowTemplates[] = @@ -94,10 +105,10 @@ static const struct WindowTemplate sYesNo_WindowTemplates = .baseBlock = 0x125 }; -const u16 gUnknown_0860F0B0[] = INCBIN_U16("graphics/interface/860F0B0.gbapal"); -const u8 sTextColors[] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; +static const u16 sHofPC_TopBar_Pal[] = INCBIN_U16("graphics/interface/hof_pc_topbar.gbapal"); +static const u8 sTextColors[] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; -// Table of move info icon offsets in graphics/interface_fr/menu.png +// Table of move info icon offsets in graphics/interface/menu_info.png static const struct MenuInfoIcon sMenuInfoIcons[] = { // { width, height, offset } { 12, 12, 0x00 }, // Unused @@ -129,19 +140,6 @@ static const struct MenuInfoIcon sMenuInfoIcons[] = [MENU_INFO_ICON_BALL_BLUE] = { 8, 8, 0xAF }, // For placed decorations in player's room }; - -// Forward declarations -void WindowFunc_DrawStandardFrame(u8, u8, u8, u8, u8, u8); -void WindowFunc_DrawDialogueFrame(u8, u8, u8, u8, u8, u8); -void WindowFunc_ClearStdWindowAndFrame(u8, u8, u8, u8, u8, u8); -void WindowFunc_ClearDialogWindowAndFrame(u8, u8, u8, u8, u8, u8); -void WindowFunc_DrawDialogFrameWithCustomTileAndPalette(u8, u8, u8, u8, u8, u8); -void WindowFunc_ClearDialogWindowAndFrameNullPalette(u8, u8, u8, u8, u8, u8); -void WindowFunc_DrawStdFrameWithCustomTileAndPalette(u8, u8, u8, u8, u8, u8); -void WindowFunc_ClearStdWindowAndFrameToTransparent(u8, u8, u8, u8, u8, u8); -void sub_8198C78(void); -void task_free_buf_after_copying_tile_data_to_vram(u8 taskId); - void InitStandardTextBoxWindows(void) { InitWindows(sStandardTextBox_WindowTemplates); @@ -156,8 +154,8 @@ void FreeAllOverworldWindowBuffers(void) void InitTextBoxGfxAndPrinters(void) { - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); DeactivateAllTextPrinters(); LoadMessageBoxAndBorderGfx(); } @@ -194,19 +192,19 @@ void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress) { void (*callback)(struct TextPrinterTemplate *, u16) = NULL; gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress; - AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeedDelay(), callback, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), callback, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress) { gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress; - AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeedDelay(), NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonPress, u8 speed) { gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress; - AddTextPrinterParameterized2(0, 1, gStringVar4, speed, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } void LoadMessageBoxAndBorderGfx(void) @@ -221,7 +219,7 @@ void DrawDialogueFrame(u8 windowId, bool8 copyToVram) FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } void DrawStdWindowFrame(u8 windowId, bool8 copyToVram) @@ -230,7 +228,7 @@ void DrawStdWindowFrame(u8 windowId, bool8 copyToVram) FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram) @@ -239,7 +237,7 @@ void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram) FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); ClearWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } void ClearStdWindowAndFrame(u8 windowId, bool8 copyToVram) @@ -248,10 +246,10 @@ void ClearStdWindowAndFrame(u8 windowId, bool8 copyToVram) FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); ClearWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } -void WindowFunc_DrawStandardFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) +static void WindowFunc_DrawStandardFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { int i; @@ -318,7 +316,7 @@ void WindowFunc_DrawStandardFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width STD_WINDOW_PALETTE_NUM); } -void WindowFunc_DrawDialogueFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) +static void WindowFunc_DrawDialogueFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { FillBgTilemapBufferRect(bg, DLG_WINDOW_BASE_TILE_NUM + 1, @@ -413,12 +411,12 @@ void WindowFunc_DrawDialogueFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width DLG_WINDOW_PALETTE_NUM); } -void WindowFunc_ClearStdWindowAndFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) +static void WindowFunc_ClearStdWindowAndFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { FillBgTilemapBufferRect(bg, 0, tilemapLeft - 1, tilemapTop - 1, width + 2, height + 2, STD_WINDOW_PALETTE_NUM); } -void WindowFunc_ClearDialogWindowAndFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) +static void WindowFunc_ClearDialogWindowAndFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { FillBgTilemapBufferRect(bg, 0, tilemapLeft - 3, tilemapTop - 1, width + 6, height + 2, STD_WINDOW_PALETTE_NUM); } @@ -428,39 +426,41 @@ void SetStandardWindowBorderStyle(u8 windowId, bool8 copyToVram) DrawStdFrameWithCustomTileAndPalette(windowId, copyToVram, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM); } -void sub_819786C(u8 windowId, bool8 copyToVram) +void LoadMessageBoxAndFrameGfx(u8 windowId, bool8 copyToVram) { LoadMessageBoxGfx(windowId, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10); DrawDialogFrameWithCustomTileAndPalette(windowId, copyToVram, DLG_WINDOW_BASE_TILE_NUM, 0xF); } -void sub_819789C(void) +void Menu_LoadStdPal(void) { - LoadPalette(gUnknown_0860F074, STD_WINDOW_PALETTE_NUM * 0x10, 0x14); + LoadPalette(gStandardMenuPalette, STD_WINDOW_PALETTE_NUM * 0x10, 0x14); } void Menu_LoadStdPalAt(u16 offset) { - LoadPalette(gUnknown_0860F074, offset, 0x14); + LoadPalette(gStandardMenuPalette, offset, 0x14); } -const u16 *sub_81978C8(void) +// Unused +static const u16 *Menu_GetStdPal(void) { - return gUnknown_0860F074; + return gStandardMenuPalette; } -u16 sub_81978D0(u8 colorNum) +// Unused +static u16 Menu_GetStdPalColor(u8 colorNum) { if (colorNum > 15) colorNum = 0; - return gUnknown_0860F074[colorNum]; + return gStandardMenuPalette[colorNum]; } void DisplayItemMessageOnField(u8 taskId, const u8 *string, TaskFunc callback) { LoadMessageBoxAndBorderGfx(); - DisplayMessageAndContinueTask(taskId, 0, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM, 1, GetPlayerTextSpeedDelay(), string, callback); - CopyWindowToVram(0, 3); + DisplayMessageAndContinueTask(taskId, 0, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM, FONT_NORMAL, GetPlayerTextSpeedDelay(), string, callback); + CopyWindowToVram(0, COPYWIN_FULL); } void DisplayYesNoMenuDefaultYes(void) @@ -489,10 +489,10 @@ u8 GetPlayerTextSpeedDelay(void) return sTextSpeedFrameDelays[speed]; } -u8 sub_81979C4(u8 a1) +u8 AddStartMenuWindow(u8 numActions) { if (sStartMenuWindowId == WINDOW_NONE) - sStartMenuWindowId = sub_8198AA4(0, 0x16, 1, 7, (a1 * 2) + 2, 0xF, 0x139); + sStartMenuWindowId = AddWindowParameterized(0, 22, 1, 7, (numActions * 2) + 2, 15, 0x139); return sStartMenuWindowId; } @@ -525,7 +525,7 @@ static u16 GetStandardFrameBaseTileNum(void) u8 AddMapNamePopUpWindow(void) { if (sMapNamePopupWindowId == WINDOW_NONE) - sMapNamePopupWindowId = sub_8198AA4(0, 1, 1, 10, 3, 14, 0x107); + sMapNamePopupWindowId = AddWindowParameterized(0, 1, 1, 10, 3, 14, 0x107); return sMapNamePopupWindowId; } @@ -543,13 +543,13 @@ void RemoveMapNamePopUpWindow(void) } } -void AddTextPrinterWithCallbackForMessage(bool8 a1, void (*callback)(struct TextPrinterTemplate *, u16)) +void AddTextPrinterWithCallbackForMessage(bool8 canSpeedUp, void (*callback)(struct TextPrinterTemplate *, u16)) { - gTextFlags.canABSpeedUpPrint = a1; - AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeedDelay(), callback, 2, 1, 3); + gTextFlags.canABSpeedUpPrint = canSpeedUp; + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), callback, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } -void sub_8197AE8(bool8 copyToVram) +void EraseFieldMessageBox(bool8 copyToVram) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x11); if (copyToVram == TRUE) @@ -564,11 +564,11 @@ void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } // Never used. -void DrawDialogFrameWithCustomTile(u8 windowId, bool8 copyToVram, u16 tileNum) +static void DrawDialogFrameWithCustomTile(u8 windowId, bool8 copyToVram, u16 tileNum) { sTileNum = tileNum; sPaletteNum = GetWindowAttribute(windowId, WINDOW_PALETTE_NUM); @@ -576,10 +576,10 @@ void DrawDialogFrameWithCustomTile(u8 windowId, bool8 copyToVram, u16 tileNum) FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } -void WindowFunc_DrawDialogFrameWithCustomTileAndPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) +static void WindowFunc_DrawDialogFrameWithCustomTileAndPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { FillBgTilemapBufferRect(bg, sTileNum + 1, @@ -681,10 +681,10 @@ void ClearDialogWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram) FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); ClearWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } -void WindowFunc_ClearDialogWindowAndFrameNullPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) +static void WindowFunc_ClearDialogWindowAndFrameNullPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { FillBgTilemapBufferRect(bg, 0, tilemapLeft - 3, tilemapTop - 1, width + 6, height + 2, 0); } @@ -697,7 +697,7 @@ void DrawStdFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 bas FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } // Never used. @@ -709,10 +709,10 @@ void DrawStdFrameWithCustomTile(u8 windowId, bool8 copyToVram, u16 baseTileNum) FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } -void WindowFunc_DrawStdFrameWithCustomTileAndPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) +static void WindowFunc_DrawStdFrameWithCustomTileAndPalette(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { FillBgTilemapBufferRect(bg, sTileNum + 0, @@ -778,15 +778,16 @@ void ClearStdWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram) FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); ClearWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } -void WindowFunc_ClearStdWindowAndFrameToTransparent(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) +static void WindowFunc_ClearStdWindowAndFrameToTransparent(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { FillBgTilemapBufferRect(bg, 0, tilemapLeft - 1, tilemapTop - 1, width + 2, height + 2, 0); } -u8 sub_81980F0(u8 bg, u8 xPos, u8 yPos, u8 palette, u16 baseTile) +// Creates the window used to display the info bar at the top of the HOF PC that shows the controls and team number. +u8 HofPCTopBar_AddWindow(u8 bg, u8 xPos, u8 yPos, u8 palette, u16 baseTile) { struct WindowTemplate window; memset(&window, 0, sizeof(window)); @@ -798,51 +799,54 @@ u8 sub_81980F0(u8 bg, u8 xPos, u8 yPos, u8 palette, u16 baseTile) window.tilemapTop = yPos; window.height = 2; - window.tilemapLeft = 0x1E - xPos; + window.tilemapLeft = 30 - xPos; window.width = xPos; window.paletteNum = palette; window.baseBlock = baseTile; - sWindowId = AddWindow(&window); + sHofPCTopBarWindowId = AddWindow(&window); if (palette > 15) palette = 15 * 16; else palette *= 16; - LoadPalette(gUnknown_0860F0B0, palette, sizeof(gUnknown_0860F0B0)); - return sWindowId; + LoadPalette(sHofPC_TopBar_Pal, palette, sizeof(sHofPC_TopBar_Pal)); + return sHofPCTopBarWindowId; } -void sub_8198180(const u8 *string, u8 a2, bool8 copyToVram) +// All the below functions checking WINDOW_NONE only handle failure of AddWindow in the above function. +// Because sHofPCTopBarWindowId is not initialized to WINDOW_NONE anywhere it does not handle +// the window not having been drawn yet. +void HofPCTopBar_Print(const u8 *string, u8 left, bool8 copyToVram) { u16 width = 0; - if (sWindowId != WINDOW_NONE) + if (sHofPCTopBarWindowId != WINDOW_NONE) { - PutWindowTilemap(sWindowId); - FillWindowPixelBuffer(sWindowId, PIXEL_FILL(15)); - width = GetStringWidth(0, string, 0); - AddTextPrinterParameterized3(sWindowId, - 0, - 0xEC - (GetWindowAttribute(sWindowId, WINDOW_TILEMAP_LEFT) * 8) - a2 - width, + PutWindowTilemap(sHofPCTopBarWindowId); + FillWindowPixelBuffer(sHofPCTopBarWindowId, PIXEL_FILL(15)); + width = GetStringWidth(FONT_SMALL, string, 0); + AddTextPrinterParameterized3(sHofPCTopBarWindowId, + FONT_SMALL, + 236 - (GetWindowAttribute(sHofPCTopBarWindowId, WINDOW_TILEMAP_LEFT) * 8) - left - width, 1, sTextColors, 0, string); if (copyToVram) - CopyWindowToVram(sWindowId, 3); + CopyWindowToVram(sHofPCTopBarWindowId, COPYWIN_FULL); } } -void sub_8198204(const u8 *string, const u8 *string2, u8 a3, u8 a4, bool8 copyToVram) +void HofPCTopBar_PrintPair(const u8 *string, const u8 *string2, bool8 noBg, u8 left, bool8 copyToVram) { u8 color[3]; u16 width = 0; - if (sWindowId != WINDOW_NONE) + if (sHofPCTopBarWindowId != WINDOW_NONE) { - if (a3 != 0) + if (noBg) { color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_COLOR_WHITE; @@ -854,53 +858,55 @@ void sub_8198204(const u8 *string, const u8 *string2, u8 a3, u8 a4, bool8 copyTo color[1] = TEXT_COLOR_WHITE; color[2] = TEXT_COLOR_DARK_GRAY; } - PutWindowTilemap(sWindowId); - FillWindowPixelBuffer(sWindowId, PIXEL_FILL(15)); + PutWindowTilemap(sHofPCTopBarWindowId); + FillWindowPixelBuffer(sHofPCTopBarWindowId, PIXEL_FILL(15)); if (string2 != NULL) { - width = GetStringWidth(0, string2, 0); - AddTextPrinterParameterized3(sWindowId, - 0, - 0xEC - (GetWindowAttribute(sWindowId, WINDOW_TILEMAP_LEFT) * 8) - a4 - width, + width = GetStringWidth(FONT_SMALL, string2, 0); + AddTextPrinterParameterized3(sHofPCTopBarWindowId, + FONT_SMALL, + 236 - (GetWindowAttribute(sHofPCTopBarWindowId, WINDOW_TILEMAP_LEFT) * 8) - left - width, 1, color, 0, string2); } - AddTextPrinterParameterized4(sWindowId, 1, 4, 1, 0, 0, color, 0, string); + AddTextPrinterParameterized4(sHofPCTopBarWindowId, FONT_NORMAL, 4, 1, 0, 0, color, 0, string); if (copyToVram) - CopyWindowToVram(sWindowId, 3); + CopyWindowToVram(sHofPCTopBarWindowId, COPYWIN_FULL); } } -void sub_81982D8(void) +// Unused +static void HofPCTopBar_CopyToVram(void) { - if (sWindowId != WINDOW_NONE) - CopyWindowToVram(sWindowId, 3); + if (sHofPCTopBarWindowId != WINDOW_NONE) + CopyWindowToVram(sHofPCTopBarWindowId, COPYWIN_FULL); } -void sub_81982F0(void) +// Unused +static void HofPCTopBar_Clear(void) { - if (sWindowId != WINDOW_NONE) + if (sHofPCTopBarWindowId != WINDOW_NONE) { - FillWindowPixelBuffer(sWindowId, PIXEL_FILL(15)); - CopyWindowToVram(sWindowId, 3); + FillWindowPixelBuffer(sHofPCTopBarWindowId, PIXEL_FILL(15)); + CopyWindowToVram(sHofPCTopBarWindowId, COPYWIN_FULL); } } -void sub_8198314(void) +void HofPCTopBar_RemoveWindow(void) { - if (sWindowId != WINDOW_NONE) + if (sHofPCTopBarWindowId != WINDOW_NONE) { - FillWindowPixelBuffer(sWindowId, PIXEL_FILL(0)); - ClearWindowTilemap(sWindowId); - CopyWindowToVram(sWindowId, 3); - RemoveWindow(sWindowId); - sWindowId = WINDOW_NONE; + FillWindowPixelBuffer(sHofPCTopBarWindowId, PIXEL_FILL(0)); + ClearWindowTilemap(sHofPCTopBarWindowId); + CopyWindowToVram(sHofPCTopBarWindowId, COPYWIN_FULL); + RemoveWindow(sHofPCTopBarWindowId); + sHofPCTopBarWindowId = WINDOW_NONE; } } -u8 sub_8198348(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos, u8 a7) +static u8 InitMenu(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos, bool8 muteAPress) { s32 pos; @@ -911,7 +917,7 @@ u8 sub_8198348(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numC sMenu.windowId = windowId; sMenu.fontId = fontId; sMenu.optionHeight = cursorHeight; - sMenu.APressMuted = a7; + sMenu.APressMuted = muteAPress; pos = initialCursorPos; @@ -924,15 +930,17 @@ u8 sub_8198348(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numC return sMenu.cursorPos; } -u8 sub_81983AC(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos) +// There is no muted version of this, so the version that plays sound when A is pressed is the "Normal" one. +u8 InitMenuNormal(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos) { - return sub_8198348(windowId, fontId, left, top, cursorHeight, numChoices, initialCursorPos, 0); + return InitMenu(windowId, fontId, left, top, cursorHeight, numChoices, initialCursorPos, FALSE); } -u8 sub_81983EC(u8 windowId, u8 fontId, u8 left, u8 top, u8 numChoices, u8 initialCursorPos) +// Unused +static u8 InitMenuDefaultCursorHeight(u8 windowId, u8 fontId, u8 left, u8 top, u8 numChoices, u8 initialCursorPos) { u8 cursorHeight = GetMenuCursorDimensionByFont(fontId, 1); - return sub_81983AC(windowId, fontId, left, top, cursorHeight, numChoices, initialCursorPos); + return InitMenuNormal(windowId, fontId, left, top, cursorHeight, numChoices, initialCursorPos); } void RedrawMenuCursor(u8 oldPos, u8 newPos) @@ -1098,32 +1106,30 @@ s8 Menu_ProcessInputNoWrapAround_other(void) return MENU_NOTHING_CHOSEN; } -void PrintTextArray(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions) +void PrintMenuActionTextsAtPos(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions) { u8 i; for (i = 0; i < itemCount; i++) - { - AddTextPrinterParameterized(windowId, fontId, menuActions[i].text, left, (lineHeight * i) + top, 0xFF, NULL); - } - CopyWindowToVram(windowId, 2); + AddTextPrinterParameterized(windowId, fontId, menuActions[i].text, left, (lineHeight * i) + top, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(windowId, COPYWIN_GFX); } -void sub_81987BC(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, u8 a6, u8 a7) +// Unused +static void PrintMenuActionTextsWithSpacing(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, u8 letterSpacing, u8 lineSpacing) { u8 i; for (i = 0; i < itemCount; i++) - { - AddTextPrinterParameterized5(windowId, fontId, menuActions[i].text, left, (lineHeight * i) + top, 0xFF, NULL, a6, a7); - } - CopyWindowToVram(windowId, 2); + AddTextPrinterParameterized5(windowId, fontId, menuActions[i].text, left, (lineHeight * i) + top, TEXT_SKIP_DRAW, NULL, letterSpacing, lineSpacing); + CopyWindowToVram(windowId, COPYWIN_GFX); } -void sub_8198854(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions) +// Unused +static void PrintMenuActionTextsAtTop(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions) { - PrintTextArray(windowId, fontId, GetFontAttribute(fontId, 0), 1, lineHeight, itemCount, menuActions); + PrintMenuActionTextsAtPos(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 1, lineHeight, itemCount, menuActions); } -void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds) +void PrintMenuActionTexts(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds) { u8 i; struct TextPrinterTemplate printer; @@ -1144,15 +1150,16 @@ void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 l printer.currentChar = menuActions[actionIds[i]].text; printer.y = (lineHeight * i) + top; printer.currentY = printer.y; - AddTextPrinter(&printer, 0xFF, NULL); + AddTextPrinter(&printer, TEXT_SKIP_DRAW, NULL); } - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } -void sub_81989B8(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds) +// Unused +static void PrintMenuActionTextsAtTopById(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds) { - AddItemMenuActionTextPrinters(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 1, GetFontAttribute(fontId, FONTATTR_LETTER_SPACING), lineHeight, itemCount, menuActions, actionIds); + PrintMenuActionTexts(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 1, GetFontAttribute(fontId, FONTATTR_LETTER_SPACING), lineHeight, itemCount, menuActions, actionIds); } void SetWindowTemplateFields(struct WindowTemplate *template, u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock) @@ -1173,14 +1180,15 @@ struct WindowTemplate CreateWindowTemplate(u8 bg, u8 left, u8 top, u8 width, u8 return template; } -u16 sub_8198AA4(u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock) +u16 AddWindowParameterized(u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock) { struct WindowTemplate template; SetWindowTemplateFields(&template, bg, left, top, width, height, paletteNum, baseBlock); return AddWindow(&template); } -void sub_8198AF8(const struct WindowTemplate *window, u8 fontId, u8 left, u8 top, u16 baseTileNum, u8 paletteNum, u8 initialCursorPos) +// As opposed to CreateYesNoMenu, which has a hard-coded position. +static void CreateYesNoMenuAtPos(const struct WindowTemplate *window, u8 fontId, u8 left, u8 top, u16 baseTileNum, u8 paletteNum, u8 initialCursorPos) { struct TextPrinterTemplate printer; @@ -1201,47 +1209,46 @@ void sub_8198AF8(const struct WindowTemplate *window, u8 fontId, u8 left, u8 top printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING); printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); - AddTextPrinter(&printer, 0xFF, NULL); + AddTextPrinter(&printer, TEXT_SKIP_DRAW, NULL); - sub_81983AC(sYesNoWindowId, fontId, left, top, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_HEIGHT), 2, initialCursorPos); + InitMenuNormal(sYesNoWindowId, fontId, left, top, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_HEIGHT), 2, initialCursorPos); } -void sub_8198C34(const struct WindowTemplate *window, u8 fontId, u16 baseTileNum, u8 paletteNum) +static void CreateYesNoMenuInTopLeft(const struct WindowTemplate *window, u8 fontId, u16 baseTileNum, u8 paletteNum) { - sub_8198AF8(window, fontId, 0, 1, baseTileNum, paletteNum, 0); + CreateYesNoMenuAtPos(window, fontId, 0, 1, baseTileNum, paletteNum, 0); } s8 Menu_ProcessInputNoWrapClearOnChoose(void) { s8 result = Menu_ProcessInputNoWrap(); if (result != MENU_NOTHING_CHOSEN) - sub_8198C78(); + EraseYesNoWindow(); return result; } -void sub_8198C78(void) +void EraseYesNoWindow(void) { ClearStdWindowAndFrameToTransparent(sYesNoWindowId, TRUE); RemoveWindow(sYesNoWindowId); } -void sub_8198C94(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 a5, u8 a6, u8 a7, const struct MenuAction *menuActions) +static void PrintMenuActionGridText(u8 windowId, u8 fontId, u8 left, u8 top, u8 width, u8 height, u8 columns, u8 rows, const struct MenuAction *menuActions) { u8 i; u8 j; - for (i = 0; i < a7; i++) + for (i = 0; i < rows; i++) { - for (j = 0; j < a6; j++) - { - AddTextPrinterParameterized(windowId, fontId, menuActions[(i * a6) + j].text, (a4 * j) + left, (a5 * i) + top, 0xFF, NULL); - } + for (j = 0; j < columns; j++) + AddTextPrinterParameterized(windowId, fontId, menuActions[(i * columns) + j].text, (width * j) + left, (height * i) + top, TEXT_SKIP_DRAW, NULL); } - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } -void sub_8198D54(u8 windowId, u8 fontId, u8 a2, u8 a3, u8 a4, u8 a5, const struct MenuAction *menuActions) +// Unused +static void PrintMenuActionGridTextAtTop(u8 windowId, u8 fontId, u8 width, u8 height, u8 columns, u8 rows, const struct MenuAction *menuActions) { - sub_8198C94(windowId, fontId, GetFontAttribute(fontId, 0), 0, a2, a3, a4, a5, menuActions); + PrintMenuActionGridText(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, width, height, columns, rows, menuActions); } void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, u8 horizontalCount, u8 verticalCount, const struct MenuAction *menuActions, const u8 *actionIds) @@ -1268,11 +1275,11 @@ void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth printer.y = (GetFontAttribute(fontId, FONTATTR_MAX_LETTER_HEIGHT) * i) + top; printer.currentX = printer.x; printer.currentY = printer.y; - AddTextPrinter(&printer, 0xFF, NULL); + AddTextPrinter(&printer, TEXT_SKIP_DRAW, NULL); } } - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } // Unused @@ -1281,7 +1288,7 @@ static void PrintMenuActionGrid_TopLeft(u8 windowId, u8 fontId, u8 optionWidth, PrintMenuActionGrid(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, optionWidth, horizontalCount, verticalCount, menuActions, actionIds); } -u8 sub_8198F58(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 cursorHeight, u8 a6, u8 a7, u8 numChoices, u8 a9) +static u8 InitMenuGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, u8 optionHeight, u8 columns, u8 rows, u8 numChoices, u8 cursorPos) { s32 pos; @@ -1291,12 +1298,12 @@ u8 sub_8198F58(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 cursorHeight, sMenu.maxCursorPos = numChoices - 1; sMenu.windowId = windowId; sMenu.fontId = fontId; - sMenu.optionWidth = a4; - sMenu.optionHeight = cursorHeight; - sMenu.columns = a6; - sMenu.rows = a7; + sMenu.optionWidth = optionWidth; + sMenu.optionHeight = optionHeight; + sMenu.columns = columns; + sMenu.rows = rows; - pos = a9; + pos = cursorPos; if (pos < 0 || pos > sMenu.maxCursorPos) sMenu.cursorPos = 0; @@ -1304,42 +1311,34 @@ u8 sub_8198F58(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 cursorHeight, sMenu.cursorPos = pos; // Why call this when it's not gonna move? - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_NONE); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_NONE); return sMenu.cursorPos; } // Unused -u8 sub_8198FD4(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 a5, u8 a6, u8 a7) +static u8 InitMenuGridDefaultCursorHeight(u8 windowId, u8 fontId, u8 left, u8 top, u8 width, u8 columns, u8 rows, u8 cursorPos) { u8 cursorHeight = GetMenuCursorDimensionByFont(fontId, 1); - u8 numChoices = a5 * a6; - return sub_8198F58(windowId, fontId, left, top, a4, cursorHeight, a5, a6, numChoices, a7); + u8 numChoices = columns * rows; + return InitMenuGrid(windowId, fontId, left, top, width, cursorHeight, columns, rows, numChoices, cursorPos); } -void sub_8199060(u8 oldCursorPos, u8 newCursorPos) +// Erase cursor at old position, draw cursor at new position. +static void MoveMenuGridCursor(u8 oldCursorPos, u8 newCursorPos) { u8 cursorWidth = GetMenuCursorDimensionByFont(sMenu.fontId, 0); u8 cursorHeight = GetMenuCursorDimensionByFont(sMenu.fontId, 1); + u8 xPos = (oldCursorPos % sMenu.columns) * sMenu.optionWidth + sMenu.left; u8 yPos = (oldCursorPos / sMenu.columns) * sMenu.optionHeight + sMenu.top; - FillWindowPixelRect(sMenu.windowId, - PIXEL_FILL(1), - xPos, - yPos, - cursorWidth, - cursorHeight); + FillWindowPixelRect(sMenu.windowId, PIXEL_FILL(1), xPos, yPos, cursorWidth, cursorHeight); + xPos = (newCursorPos % sMenu.columns) * sMenu.optionWidth + sMenu.left; yPos = (newCursorPos / sMenu.columns) * sMenu.optionHeight + sMenu.top; - AddTextPrinterParameterized(sMenu.windowId, - sMenu.fontId, - gText_SelectorArrow3, - xPos, - yPos, - 0, - 0); + AddTextPrinterParameterized(sMenu.windowId, sMenu.fontId, gText_SelectorArrow3, xPos, yPos, 0, 0); } -u8 ChangeListMenuCursorPosition(s8 deltaX, s8 deltaY) +u8 ChangeMenuGridCursorPosition(s8 deltaX, s8 deltaY) { u8 oldPos = sMenu.cursorPos; @@ -1370,7 +1369,7 @@ u8 ChangeListMenuCursorPosition(s8 deltaX, s8 deltaY) } else { - sub_8199060(oldPos, sMenu.cursorPos); + MoveMenuGridCursor(oldPos, sMenu.cursorPos); return sMenu.cursorPos; } } @@ -1404,12 +1403,13 @@ u8 ChangeGridMenuCursorPosition(s8 deltaX, s8 deltaY) } else { - sub_8199060(oldPos, sMenu.cursorPos); + MoveMenuGridCursor(oldPos, sMenu.cursorPos); return sMenu.cursorPos; } } -s8 sub_8199284(void) +// Unused +static s8 Menu_ProcessGridInput_NoSoundLimit(void) { if (JOY_NEW(A_BUTTON)) { @@ -1423,32 +1423,32 @@ s8 sub_8199284(void) else if (JOY_NEW(DPAD_UP)) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); return MENU_NOTHING_CHOSEN; } else if (JOY_NEW(DPAD_DOWN)) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); return MENU_NOTHING_CHOSEN; } else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); return MENU_NOTHING_CHOSEN; } else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); return MENU_NOTHING_CHOSEN; } return MENU_NOTHING_CHOSEN; } -s8 Menu_ProcessInputGridLayout(void) +s8 Menu_ProcessGridInput(void) { u8 oldPos = sMenu.cursorPos; @@ -1489,7 +1489,8 @@ s8 Menu_ProcessInputGridLayout(void) return MENU_NOTHING_CHOSEN; } -s8 sub_81993D8(void) +// Unused +static s8 Menu_ProcessGridInputRepeat_NoSoundLimit(void) { if (JOY_NEW(A_BUTTON)) { @@ -1500,36 +1501,36 @@ s8 sub_81993D8(void) { return MENU_B_PRESSED; } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); return MENU_NOTHING_CHOSEN; } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); return MENU_NOTHING_CHOSEN; } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); return MENU_NOTHING_CHOSEN; } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { PlaySE(SE_SELECT); - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); return MENU_NOTHING_CHOSEN; } return MENU_NOTHING_CHOSEN; } -//Unused -s8 sub_8199484(void) +// Unused +static s8 Menu_ProcessGridInputRepeat(void) { u8 oldPos = sMenu.cursorPos; @@ -1542,25 +1543,25 @@ s8 sub_8199484(void) { return MENU_B_PRESSED; } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) { if (oldPos != ChangeGridMenuCursorPosition(0, -1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) { if (oldPos != ChangeGridMenuCursorPosition(0, 1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(1, 0)) PlaySE(SE_SELECT); @@ -1579,7 +1580,7 @@ u8 InitMenuInUpperLeftCorner(u8 windowId, u8 itemCount, u8 initialCursorPos, boo sMenu.minCursorPos = 0; sMenu.maxCursorPos = itemCount - 1; sMenu.windowId = windowId; - sMenu.fontId = 1; + sMenu.fontId = FONT_NORMAL; sMenu.optionHeight = 16; sMenu.APressMuted = APressMuted; @@ -1593,7 +1594,8 @@ u8 InitMenuInUpperLeftCorner(u8 windowId, u8 itemCount, u8 initialCursorPos, boo return Menu_MoveCursor(0); } -u8 InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 windowId, u8 itemCount, u8 initialCursorPos) +// There is no muted version of this function, so the version that plays sound when A is pressed is the "Normal" one. +u8 InitMenuInUpperLeftCornerNormal(u8 windowId, u8 itemCount, u8 initialCursorPos) { return InitMenuInUpperLeftCorner(windowId, itemCount, initialCursorPos, FALSE); } @@ -1603,24 +1605,22 @@ void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *menuActi u32 i; for (i = 0; i < itemCount; i++) - { - AddTextPrinterParameterized(windowId, 1, menuActions[i].text, 8, (i * 16) + 1, 0xFF, NULL); - } + AddTextPrinterParameterized(windowId, 1, menuActions[i].text, 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } -void sub_81995E4(u8 windowId, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds) +void PrintMenuActionTextsInUpperLeftCorner(u8 windowId, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds) { u8 i; struct TextPrinterTemplate printer; printer.windowId = windowId; - printer.fontId = 1; - printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); - printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); - printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); - printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN); + printer.fontId = FONT_NORMAL; + printer.fgColor = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_FOREGROUND); + printer.bgColor = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_BACKGROUND); + printer.shadowColor = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_SHADOW); + printer.unk = GetFontAttribute(FONT_NORMAL, FONTATTR_UNKNOWN); printer.letterSpacing = 0; printer.lineSpacing = 0; printer.x = 8; @@ -1631,10 +1631,10 @@ void sub_81995E4(u8 windowId, u8 itemCount, const struct MenuAction *menuActions printer.currentChar = menuActions[actionIds[i]].text; printer.y = (i * 16) + 1; printer.currentY = (i * 16) + 1; - AddTextPrinter(&printer, 0xFF, NULL); + AddTextPrinter(&printer, TEXT_SKIP_DRAW, NULL); } - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } void CreateYesNoMenu(const struct WindowTemplate *window, u16 baseTileNum, u8 paletteNum, u8 initialCursorPos) @@ -1646,20 +1646,20 @@ void CreateYesNoMenu(const struct WindowTemplate *window, u16 baseTileNum, u8 pa printer.currentChar = gText_YesNo; printer.windowId = sYesNoWindowId; - printer.fontId = 1; + printer.fontId = FONT_NORMAL; printer.x = 8; printer.y = 1; printer.currentX = printer.x; printer.currentY = printer.y; - printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); - printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); - printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); - printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN); + printer.fgColor = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_FOREGROUND); + printer.bgColor = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_BACKGROUND); + printer.shadowColor = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_SHADOW); + printer.unk = GetFontAttribute(FONT_NORMAL, FONTATTR_UNKNOWN); printer.letterSpacing = 0; printer.lineSpacing = 0; - AddTextPrinter(&printer, 0xFF, NULL); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sYesNoWindowId, 2, initialCursorPos); + AddTextPrinter(&printer, TEXT_SKIP_DRAW, NULL); + InitMenuInUpperLeftCornerNormal(sYesNoWindowId, 2, initialCursorPos); } void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const struct MenuAction *menuActions) @@ -1669,40 +1669,41 @@ void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const for (i = 0; i < rows; i++) { for (j = 0; j < columns; j++) - AddTextPrinterParameterized(windowId, 1, menuActions[(i * columns) + j].text, (optionWidth * j) + 8, (i * 16) + 1, 0xFF, NULL); + AddTextPrinterParameterized(windowId, 1, menuActions[(i * columns) + j].text, (optionWidth * j) + 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); } - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } -void sub_819983C(u8 windowId, u8 a4, u8 itemCount, u8 itemCount2, const struct MenuAction *menuActions, const u8 *actionIds) +// Unused +static void PrintMenuActionGridTextNoSpacing(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const struct MenuAction *menuActions, const u8 *actionIds) { u8 i; u8 j; struct TextPrinterTemplate printer; printer.windowId = windowId; - printer.fontId = 1; - printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); - printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); - printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); - printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN); + printer.fontId = FONT_NORMAL; + printer.fgColor = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_FOREGROUND); + printer.bgColor = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_BACKGROUND); + printer.shadowColor = GetFontAttribute(FONT_NORMAL, FONTATTR_COLOR_SHADOW); + printer.unk = GetFontAttribute(FONT_NORMAL, FONTATTR_UNKNOWN); printer.letterSpacing = 0; printer.lineSpacing = 0; - for (i = 0; i < itemCount2; i++) + for (i = 0; i < rows; i++) { - for (j = 0; j < itemCount; j++) + for (j = 0; j < columns; j++) { - printer.currentChar = menuActions[actionIds[(itemCount * i) + j]].text; - printer.x = (a4 * j) + 8; + printer.currentChar = menuActions[actionIds[(columns * i) + j]].text; + printer.x = (optionWidth * j) + 8; printer.y = (16 * i) + 1; printer.currentX = printer.x; printer.currentY = printer.y; - AddTextPrinter(&printer, 0xFF, NULL); + AddTextPrinter(&printer, TEXT_SKIP_DRAW, NULL); } } - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } u8 InitMenuActionGrid(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos) @@ -1714,7 +1715,7 @@ u8 InitMenuActionGrid(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initi sMenu.minCursorPos = 0; sMenu.maxCursorPos = (columns * rows) - 1; sMenu.windowId = windowId; - sMenu.fontId = 1; + sMenu.fontId = FONT_NORMAL; sMenu.optionWidth = optionWidth; sMenu.optionHeight = 16; sMenu.columns = columns; @@ -1728,7 +1729,7 @@ u8 InitMenuActionGrid(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initi sMenu.cursorPos = pos; // Why call this when it's not gonna move? - ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_NONE); + ChangeMenuGridCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_NONE); return sMenu.cursorPos; } @@ -1770,9 +1771,7 @@ void ResetTempTileDataBuffers(void) { int i; for (i = 0; i < (int)ARRAY_COUNT(sTempTileDataBuffer); i++) - { sTempTileDataBuffer[i] = NULL; - } sTempTileDataBufferIdx = 0; } @@ -1785,9 +1784,7 @@ bool8 FreeTempTileDataBuffersIfPossible(void) if (sTempTileDataBufferIdx) { for (i = 0; i < sTempTileDataBufferIdx; i++) - { FREE_AND_SET_NULL(sTempTileDataBuffer[i]); - } sTempTileDataBufferIdx = 0; } return FALSE; @@ -1893,51 +1890,46 @@ void CopyToBufferFromBgTilemap(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 for (i = 0; i < height; i++) { for (j = 0; j < width; j++) - { dest[(i * width) + j] = src[(i + top) * 32 + j + left]; - } } } -void sub_8199D3C(void *ptr, int delta, int width, int height, bool32 is8BPP) +void AddValToTilemapBuffer(void *ptr, int delta, int width, int height, bool32 isAffine) { int i; int area = width * height; - if (is8BPP == TRUE) + if (isAffine == TRUE) { u8 *as8BPP = ptr; for (i = 0; i < area; i++) - { as8BPP[i] += delta; - } } else { + // Limit add to first 10 bits u16 *as4BPP = ptr; for (i = 0; i < area; i++) - { as4BPP[i] = (as4BPP[i] & 0xFC00) | ((as4BPP[i] + delta) & 0x3FF); - } } } void ResetBgPositions(void) { - ChangeBgX(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); } -void sub_8199DF0(u32 bg, u8 a1, int a2, int a3) +void BgDmaFill(u32 bg, u8 value, int offset, int size) { - int temp = (!GetBgAttribute(bg, BG_ATTR_PALETTEMODE)) ? 0x20 : 0x40; - void *addr = (void *)((GetBgAttribute(bg, BG_ATTR_CHARBASEINDEX) * 0x4000) + (GetBgAttribute(bg, BG_ATTR_BASETILE) + a2) * temp); - RequestDma3Fill(a1 << 24 | a1 << 16 | a1 << 8 | a1, addr + VRAM, a3 * temp, 1); + int temp = (!GetBgAttribute(bg, BG_ATTR_PALETTEMODE)) ? 32 : 64; + void *addr = (void *)((GetBgAttribute(bg, BG_ATTR_CHARBASEINDEX) * 0x4000) + (GetBgAttribute(bg, BG_ATTR_BASETILE) + offset) * temp); + RequestDma3Fill(value << 24 | value << 16 | value << 8 | value, VRAM + addr, size * temp, 1); } void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const u8 *color, s8 speed, const u8 *str) @@ -1951,8 +1943,8 @@ void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const printer.y = top; printer.currentX = printer.x; printer.currentY = printer.y; - printer.letterSpacing = GetFontAttribute(fontId, 2); - printer.lineSpacing = GetFontAttribute(fontId, 3); + printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING); + printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); printer.unk = 0; printer.fgColor = color[1]; printer.bgColor = color[0]; @@ -1997,9 +1989,9 @@ void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 left printer.lineSpacing = lineSpacing; printer.unk = 0; - printer.fgColor = GetFontAttribute(fontId, 5); - printer.bgColor = GetFontAttribute(fontId, 6); - printer.shadowColor = GetFontAttribute(fontId, 7); + printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND); + printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND); + printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW); AddTextPrinter(&printer, speed, callback); } @@ -2012,11 +2004,10 @@ void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y) StringExpandPlaceholders(gStringVar4, src); - AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, 0xFF, 0); + AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, TEXT_SKIP_DRAW, 0); } -// Unused. Similar to BlitBitmapRect4Bit. -void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height) +static void UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height) { int loopSrcY, loopDstY, loopSrcX, loopDstX, xEnd, yEnd, multiplierSrcY, multiplierDstY; const u8 *pixelsSrc; @@ -2033,33 +2024,33 @@ void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 src else yEnd = srcY + height; - multiplierSrcY = (src->width + (src->width & 7)) >> 3; - multiplierDstY = (dst->width + (dst->width & 7)) >> 3; + multiplierSrcY = (src->width + (src->width % 8)) >> 3; + multiplierDstY = (dst->width + (dst->width % 8)) >> 3; for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++) { for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++) { pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 29) >> 27); - pixelsDst = (void*) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 29) >> 27); + pixelsDst = (void *) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 29) >> 27); - if ((uintptr_t)pixelsDst & 0x1) + if ((uintptr_t)pixelsDst & 1) { pixelsDst--; - if (loopDstX & 0x1) + if (loopDstX & 1) { - toOrr = *(vu16*)pixelsDst; + toOrr = *(vu16 *)pixelsDst; toOrr &= 0x0fff; - if (loopSrcX & 0x1) + if (loopSrcX & 1) toOrr |= ((*pixelsSrc & 0xf0) << 8); else toOrr |= ((*pixelsSrc & 0x0f) << 12); } else { - toOrr = *(vu16*)pixelsDst; + toOrr = *(vu16 *)pixelsDst; toOrr &= 0xf0ff; - if (loopSrcX & 0x1) + if (loopSrcX & 1) toOrr |= ((*pixelsSrc & 0xf0) << 4); else toOrr |= ((*pixelsSrc & 0x0f) << 8); @@ -2069,7 +2060,7 @@ void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 src { if (loopDstX & 1) { - toOrr = *(vu16*)pixelsDst; + toOrr = *(vu16 *)pixelsDst; toOrr &= 0xff0f; if (loopSrcX & 1) toOrr |= ((*pixelsSrc & 0xf0) << 0); @@ -2078,7 +2069,7 @@ void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 src } else { - toOrr = *(vu16*)pixelsDst; + toOrr = *(vu16 *)pixelsDst; toOrr &= 0xfff0; if (loopSrcX & 1) toOrr |= ((*pixelsSrc & 0xf0) >> 4); @@ -2086,17 +2077,19 @@ void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 src toOrr |= ((*pixelsSrc & 0x0f) >> 0); } } - *(vu16*)pixelsDst = toOrr; + *(vu16 *)pixelsDst = toOrr; } } } -void sub_819A25C(u8 palOffset, u16 speciesId) +// Unused +static void LoadMonIconPalAtOffset(u8 palOffset, u16 speciesId) { LoadPalette(GetValidMonIconPalettePtr(speciesId), palOffset, 0x20); } -void sub_819A27C(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y) +// Unused +static void DrawMonIconAtPos(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y) { BlitBitmapToWindow(windowId, GetMonIconPtr(speciesId, personality), x, y, 32, 32); } @@ -2109,13 +2102,13 @@ void ListMenuLoadStdPalAt(u8 palOffset, u8 palId) { case 0: default: - palette = gFireRedMenuElements1_Pal; + palette = gMenuInfoElements1_Pal; break; case 1: - palette = gFireRedMenuElements2_Pal; + palette = gMenuInfoElements2_Pal; break; case 2: - palette = gFireRedMenuElements3_Pal; + palette = gMenuInfoElements3_Pal; break; } @@ -2124,7 +2117,7 @@ void ListMenuLoadStdPalAt(u8 palOffset, u8 palId) void BlitMenuInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y) { - BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + sMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, sMenuInfoIcons[iconId].width, sMenuInfoIcons[iconId].height); + BlitBitmapRectToWindow(windowId, &gMenuInfoElements_Gfx[sMenuInfoIcons[iconId].offset * 32], 0, 0, 128, 128, x, y, sMenuInfoIcons[iconId].width, sMenuInfoIcons[iconId].height); } void BufferSaveMenuText(u8 textId, u8 *dest, u8 color) diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 3e8148a42b..98284ebd3a 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -16,7 +16,6 @@ #include "decompress.h" #include "constants/songs.h" #include "constants/items.h" -#include "constants/maps.h" #define TAG_SWAP_LINE 109 @@ -33,7 +32,7 @@ static const struct OamData sOamData_SwapLine = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -72,12 +71,12 @@ static const union AnimCmd *const sAnims_SwapLine[] = static const struct CompressedSpriteSheet sSpriteSheet_SwapLine = { - gBagSwapLineGfx, 0x100, TAG_SWAP_LINE + gSwapLineGfx, 0x100, TAG_SWAP_LINE }; static const struct CompressedSpritePalette sSpritePalette_SwapLine = { - gBagSwapLinePal, TAG_SWAP_LINE + gSwapLinePal, TAG_SWAP_LINE }; static const struct SpriteTemplate sSpriteTemplate_SwapLine = @@ -99,21 +98,21 @@ void ResetVramOamAndBgCntRegs(void) SetGpuReg(REG_OFFSET_BG2CNT, 0); SetGpuReg(REG_OFFSET_BG1CNT, 0); SetGpuReg(REG_OFFSET_BG0CNT, 0); - CpuFill16(0, (void*) VRAM, VRAM_SIZE); - CpuFill32(0, (void*) OAM, OAM_SIZE); - CpuFill16(0, (void*) PLTT, PLTT_SIZE); + CpuFill16(0, (void *) VRAM, VRAM_SIZE); + CpuFill32(0, (void *) OAM, OAM_SIZE); + CpuFill16(0, (void *) PLTT, PLTT_SIZE); } void ResetAllBgsCoordinates(void) { - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); } void SetVBlankHBlankCallbacksToNull(void) @@ -131,7 +130,7 @@ void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 palet StringExpandPlaceholders(gStringVar4, string); gTextFlags.canABSpeedUpPrint = 1; - AddTextPrinterParameterized2(windowId, fontId, gStringVar4, textSpeed, NULL, 2, 1, 3); + AddTextPrinterParameterized2(windowId, fontId, gStringVar4, textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); sMessageNextTask = taskFunc; gTasks[taskId].func = Task_ContinueTaskAfterMessagePrints; } @@ -154,7 +153,7 @@ void DoYesNoFuncWithChoice(u8 taskId, const struct YesNoFuncTable *data) gTasks[taskId].func = Task_CallYesOrNoCallback; } -void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo) +void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 unused1, u8 unused2, u8 unused3, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo) { CreateYesNoMenu(template, tileStart, palette, 0); sYesNo = *yesNo; @@ -177,17 +176,18 @@ static void Task_CallYesOrNoCallback(u8 taskId) } } -bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) +// Returns TRUE if the quantity was changed, FALSE if it remained the same +bool8 AdjustQuantityAccordingToDPadInput(s16 *quantity, u16 max) { - s16 valBefore = (*arg0); + s16 valBefore = *quantity; - if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) + if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) { - (*arg0)++; - if ((*arg0) > arg1) - (*arg0) = 1; + (*quantity)++; + if (*quantity > max) + *quantity = 1; - if ((*arg0) == valBefore) + if (*quantity == valBefore) { return FALSE; } @@ -197,13 +197,13 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) { - (*arg0)--; - if ((*arg0) <= 0) - (*arg0) = arg1; + (*quantity)--; + if (*quantity <= 0) + *quantity = max; - if ((*arg0) == valBefore) + if (*quantity == valBefore) { return FALSE; } @@ -213,13 +213,13 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT) { - (*arg0) += 10; - if ((*arg0) > arg1) - (*arg0) = arg1; + *quantity += 10; + if (*quantity > max) + *quantity = max; - if ((*arg0) == valBefore) + if (*quantity == valBefore) { return FALSE; } @@ -229,13 +229,13 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT) { - (*arg0) -= 10; - if ((*arg0) <= 0) - (*arg0) = 1; + *quantity -= 10; + if (*quantity <= 0) + *quantity = 1; - if ((*arg0) == valBefore) + if (*quantity == valBefore) { return FALSE; } @@ -277,52 +277,46 @@ u8 GetLRKeysPressedAndHeld(void) bool8 IsHoldingItemAllowed(u16 itemId) { - // Enigma Berry can't be held in link areas - if (itemId != ITEM_ENIGMA_BERRY) - return TRUE; - else if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER) - && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER)) + // e-Reader Enigma Berry can't be held in link areas + if (itemId == ITEM_ENIGMA_BERRY_E_READER + && ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER) + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER)) + || InUnionRoom() == TRUE)) return FALSE; - else if (InUnionRoom() != TRUE) - return TRUE; else - return FALSE; + return TRUE; } bool8 IsWritingMailAllowed(u16 itemId) { - if (IsUpdateLinkStateCBActive() != TRUE && InUnionRoom() != TRUE) + if ((IsOverworldLinkActive() == TRUE || InUnionRoom() == TRUE) && ItemIsMail(itemId) == TRUE) + return FALSE; + else return TRUE; - else if (ItemIsMail(itemId) != TRUE) +} + +bool8 MenuHelpers_IsLinkActive(void) +{ + if (IsOverworldLinkActive() == TRUE || gReceivedRemoteLinkPlayers == 1) return TRUE; else return FALSE; } -bool8 MenuHelpers_LinkSomething(void) +static bool8 IsActiveOverworldLinkBusy(void) { - if (IsUpdateLinkStateCBActive() == TRUE || gReceivedRemoteLinkPlayers == 1) - return TRUE; - else + if (!MenuHelpers_IsLinkActive()) return FALSE; + else + return Overworld_IsRecvQueueAtMax(); } -static bool8 sub_81221D0(void) +bool8 MenuHelpers_ShouldWaitForLinkRecv(void) { - if (!MenuHelpers_LinkSomething()) - return FALSE; - else - return Overworld_LinkRecvQueueLengthMoreThan2(); -} - -bool8 MenuHelpers_CallLinkSomething(void) -{ - if (sub_81221D0() == TRUE) + if (IsActiveOverworldLinkBusy() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE ) return TRUE; - else if (IsLinkRecvQueueLengthAtLeast3() != TRUE) - return FALSE; else - return TRUE; + return FALSE; } void SetItemListPerPageCount(struct ItemSlot *slots, u8 slotsCount, u8 *pageItems, u8 *totalItems, u8 maxPerPage) @@ -440,12 +434,16 @@ void SetSwapLineSpritesInvisibility(u8 *spriteIds, u8 count, bool8 invisible) void UpdateSwapLineSpritesPos(u8 *spriteIds, u8 count, s16 x, u16 y) { u8 i; - bool8 unknownBit = count & 0x80; - count &= ~(0x80); + bool8 hasMargin = count & SWAP_LINE_HAS_MARGIN; + count &= ~SWAP_LINE_HAS_MARGIN; for (i = 0; i < count; i++) { - if (i == count - 1 && unknownBit) + // If the list menu has a right margin, the swap line + // shouldn't extend all the way to the edge of the screen. + // If this is the last sprite in the line, move it a bit + // to the left to keep it out of the margin. + if (i == count - 1 && hasMargin) gSprites[spriteIds[i]].x2 = x - 8; else gSprites[spriteIds[i]].x2 = x; diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 2fd12f2fd3..d844b8225a 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -24,6 +24,7 @@ #include "trig.h" #include "window.h" #include "constants/songs.h" +#include "constants/battle_move_effects.h" #include "gba/io_reg.h" extern const struct CompressedSpriteSheet gMonFrontPicTable[]; @@ -31,14 +32,14 @@ extern const struct CompressedSpriteSheet gMonFrontPicTable[]; EWRAM_DATA static u8 sMailboxWindowIds[MAILBOXWIN_COUNT] = {0}; EWRAM_DATA static struct ListMenuItem *sMailboxList = NULL; -static void MailboxMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); -static void sub_81D24A4(struct ConditionGraph *a0); -static void sub_81D2634(struct ConditionGraph *a0); -static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list); -static void nullsub_79(void); -static void SetNextConditionSparkle(struct Sprite *sprite); -static void SpriteCB_ConditionSparkle(struct Sprite *sprite); -static void ShowAllConditionSparkles(struct Sprite *sprite); +static void MailboxMenu_MoveCursorFunc(s32, bool8, struct ListMenu *); +static void ConditionGraph_CalcRightHalf(struct ConditionGraph *); +static void ConditionGraph_CalcLeftHalf(struct ConditionGraph *); +static void MoveRelearnerCursorCallback(s32, bool8, struct ListMenu *); +static void MoveRelearnerDummy(void); +static void SetNextConditionSparkle(struct Sprite *); +static void SpriteCB_ConditionSparkle(struct Sprite *); +static void ShowAllConditionSparkles(struct Sprite *); static const struct WindowTemplate sWindowTemplates_MailboxMenu[MAILBOXWIN_COUNT] = { @@ -80,46 +81,29 @@ static const u8 sEmptyItemName[] = _(""); static const struct ScanlineEffectParams sConditionGraphScanline = { - .dmaDest = (void*)REG_ADDR_WIN0H, + .dmaDest = ®_WIN0H, .dmaControl = SCANLINE_EFFECT_DMACNT_32BIT, .initState = 1, }; -static const u8 sUnknown_08625410[] = +static const u8 sConditionToLineLength[MAX_CONDITION + 1] = { - 4, - 5, - 6, - 7, - 8, - 9, 9, - 10, 10, - 0xB, 0xB, - 0xC, 0xC, - 0xD, 0xD, - 0xD, 0xD, - 0xE, 0xE, 0xE, 0xE, - 0xF, 0xF, 0xF, 0xF, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, - 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, - 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, - 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, - 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, - 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, - 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, - 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, - 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, - 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x23 + 4, 5, 6, 7, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 13, + 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 17, + 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, + 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, + 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35 }; @@ -203,10 +187,14 @@ static const struct ListMenuTemplate sMoveRelearnerMovesListTemplate = .lettersSpacing = 0, .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 1, + .fontId = FONT_NORMAL, .cursorKind = 0 }; +//-------------- +// Mailbox menu +//-------------- + bool8 MailboxMenu_Alloc(u8 count) { u8 i; @@ -236,14 +224,14 @@ u8 MailboxMenu_AddWindow(u8 windowIdx) { sMailboxWindowIds[windowIdx] = AddWindow(&sWindowTemplates_MailboxMenu[windowIdx]); } - SetStandardWindowBorderStyle(sMailboxWindowIds[windowIdx], 0); + SetStandardWindowBorderStyle(sMailboxWindowIds[windowIdx], FALSE); } return sMailboxWindowIds[windowIdx]; } void MailboxMenu_RemoveWindow(u8 windowIdx) { - ClearStdWindowAndFrameToTransparent(sMailboxWindowIds[windowIdx], 0); + ClearStdWindowAndFrameToTransparent(sMailboxWindowIds[windowIdx], FALSE); ClearWindowTilemap(sMailboxWindowIds[windowIdx]); RemoveWindow(sMailboxWindowIds[windowIdx]); sMailboxWindowIds[windowIdx] = WINDOW_NONE; @@ -268,7 +256,7 @@ static void MailboxMenu_ItemPrintFunc(u8 windowId, u32 itemId, u8 y) length = StringLength(buffer); if (length < PLAYER_NAME_LENGTH - 1) ConvertInternationalString(buffer, LANGUAGE_JAPANESE); - AddTextPrinterParameterized4(windowId, 1, 8, y, 0, 0, sPlayerNameTextColors, -1, buffer); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, 8, y, 0, 0, sPlayerNameTextColors, TEXT_SKIP_DRAW, buffer); } u8 MailboxMenu_CreateList(struct PlayerPCItemPageStruct *page) @@ -296,7 +284,7 @@ u8 MailboxMenu_CreateList(struct PlayerPCItemPageStruct *page) gMultiuseListMenuTemplate.cursorShadowPal = 3; gMultiuseListMenuTemplate.moveCursorFunc = MailboxMenu_MoveCursorFunc; gMultiuseListMenuTemplate.itemPrintFunc = MailboxMenu_ItemPrintFunc; - gMultiuseListMenuTemplate.fontId = 1; + gMultiuseListMenuTemplate.fontId = FONT_NORMAL; gMultiuseListMenuTemplate.cursorKind = 0; gMultiuseListMenuTemplate.lettersSpacing = 0; gMultiuseListMenuTemplate.itemVerticalPadding = 0; @@ -320,67 +308,83 @@ void MailboxMenu_Free(void) Free(sMailboxList); } -void InitConditionGraphData(struct ConditionGraph *graph) +//--------------------------------------- +// Condition graph +// +// This is the graph in the Pokénav and +// Pokéblock case that shows a Pokémon's +// conditions (Beauty, Tough, etc.). +// It works by using scanlines to +// selectively reveal a bg that has been +// filled with the graph color. +//--------------------------------------- + +#define SHIFT_RIGHT_ADJUSTED(n, s)(((n) >> (s)) + (((n) >> ((s) - 1)) & 1)) + +void ConditionGraph_Init(struct ConditionGraph *graph) { u8 i, j; - for (j = 0; j < FLAVOR_COUNT; j++) + for (j = 0; j < CONDITION_COUNT; j++) { - for (i = 0; i < 10; i++) + for (i = 0; i < CONDITION_GRAPH_UPDATE_STEPS; i++) { - graph->unk64[i][j].unk0 = 0; - graph->unk64[i][j].unk2 = 0; - } - for (i = 0; i < 4; i++) - { - graph->stat[i][j] = 0; - graph->unk14[i][j].unk0 = 155; - graph->unk14[i][j].unk2 = 91; + graph->newPositions[i][j].x = 0; + graph->newPositions[i][j].y = 0; } - graph->unk12C[j].unk0 = 0; - graph->unk12C[j].unk2 = 0; + for (i = 0; i < CONDITION_GRAPH_LOAD_MAX; i++) + { + graph->conditions[i][j] = 0; + graph->savedPositions[i][j].x = CONDITION_GRAPH_CENTER_X; + graph->savedPositions[i][j].y = CONDITION_GRAPH_CENTER_Y; + } + + graph->curPositions[j].x = 0; + graph->curPositions[j].y = 0; } - graph->unk354 = 0; - graph->unk352 = 0; + graph->needsDraw = FALSE; + graph->updateCounter = 0; } -void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2) +// Fills the newPositions array with incremental positions between +// old and new for the graph transition when switching between Pokémon. +void ConditionGraph_SetNewPositions(struct ConditionGraph *graph, struct UCoords16 *old, struct UCoords16 *new) { u16 i, j; - s32 r5, r6; + s32 coord, increment; - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) { - r5 = arg1[i].unk0 << 8; - r6 = ((arg2[i].unk0 - arg1[i].unk0) << 8) / 10; - for (j = 0; j < 9; j++) + coord = old[i].x << 8; + increment = ((new[i].x - old[i].x) << 8) / CONDITION_GRAPH_UPDATE_STEPS; + for (j = 0; j < CONDITION_GRAPH_UPDATE_STEPS - 1; j++) { - graph->unk64[j][i].unk0 = (r5 >> 8) + ((r5 >> 7) & 1); - r5 += r6; + graph->newPositions[j][i].x = SHIFT_RIGHT_ADJUSTED(coord, 8); + coord += increment; } - graph->unk64[j][i].unk0 = arg2[i].unk0; + graph->newPositions[j][i].x = new[i].x; - r5 = arg1[i].unk2 << 8; - r6 = ((arg2[i].unk2 - arg1[i].unk2) << 8) / 10; - for (j = 0; j < 9; j++) + coord = old[i].y << 8; + increment = ((new[i].y - old[i].y) << 8) / CONDITION_GRAPH_UPDATE_STEPS; + for (j = 0; j < CONDITION_GRAPH_UPDATE_STEPS - 1; j++) { - graph->unk64[j][i].unk2 = (r5 >> 8) + ((r5 >> 7) & 1); - r5 += r6; + graph->newPositions[j][i].y = SHIFT_RIGHT_ADJUSTED(coord, 8); + coord += increment; } - graph->unk64[j][i].unk2 = arg2[i].unk2; + graph->newPositions[j][i].y = new[i].y; } - graph->unk352 = 0; + graph->updateCounter = 0; } -bool32 TransitionConditionGraph(struct ConditionGraph *graph) +bool8 ConditionGraph_TryUpdate(struct ConditionGraph *graph) { - if (graph->unk352 < 10) + if (graph->updateCounter < CONDITION_GRAPH_UPDATE_STEPS) { - sub_81D2230(graph); - return (++graph->unk352 != 10); + ConditionGraph_Update(graph); + return (++graph->updateCounter != CONDITION_GRAPH_UPDATE_STEPS); } else { @@ -388,294 +392,316 @@ bool32 TransitionConditionGraph(struct ConditionGraph *graph) } } -void InitConditionGraphState(struct ConditionGraph *graph) +void ConditionGraph_InitResetScanline(struct ConditionGraph *graph) { - graph->state = 0; + graph->scanlineResetState = 0; } -bool8 SetupConditionGraphScanlineParams(struct ConditionGraph *graph) +bool8 ConditionGraph_ResetScanline(struct ConditionGraph *graph) { struct ScanlineEffectParams params; - switch (graph->state) + switch (graph->scanlineResetState) { case 0: ScanlineEffect_Clear(); - graph->state++; + graph->scanlineResetState++; return TRUE; case 1: params = sConditionGraphScanline; ScanlineEffect_SetParams(params); - graph->state++; + graph->scanlineResetState++; return FALSE; default: return FALSE; } } -void sub_81D2108(struct ConditionGraph *graph) +void ConditionGraph_Draw(struct ConditionGraph *graph) { u16 i; - if (graph->unk354 == 0) + if (!graph->needsDraw) return; - sub_81D24A4(graph); - sub_81D2634(graph); + ConditionGraph_CalcRightHalf(graph); + ConditionGraph_CalcLeftHalf(graph); - for (i = 0; i < 66; i++) + for (i = 0; i < CONDITION_GRAPH_HEIGHT; i++) { - gScanlineEffectRegBuffers[1][(i + 55) * 2] = gScanlineEffectRegBuffers[0][(i + 55) * 2] = (graph->unk140[i][0] << 8) | (graph->unk140[i][1]); - gScanlineEffectRegBuffers[1][(i + 55) * 2 + 1] = gScanlineEffectRegBuffers[0][(i + 55) * 2 + 1] = (graph->unk248[i][0] << 8) | (graph->unk248[i][1]); + // Draw right half + gScanlineEffectRegBuffers[1][(i + CONDITION_GRAPH_TOP_Y - 1) * 2 + 0] = // double assignment + gScanlineEffectRegBuffers[0][(i + CONDITION_GRAPH_TOP_Y - 1) * 2 + 0] = (graph->scanlineRight[i][0] << 8) | (graph->scanlineRight[i][1]); + // Draw left half + gScanlineEffectRegBuffers[1][(i + CONDITION_GRAPH_TOP_Y - 1) * 2 + 1] = // double assignment + gScanlineEffectRegBuffers[0][(i + CONDITION_GRAPH_TOP_Y - 1) * 2 + 1] = (graph->scanlineLeft[i][0] << 8) | (graph->scanlineLeft[i][1]); } - graph->unk354 = 0; + graph->needsDraw = FALSE; } -void SetConditionGraphIOWindows(u8 bg) +void ConditionGraph_InitWindow(u8 bg) { u32 flags; - if (bg > 3) + if (bg >= NUM_BACKGROUNDS) bg = 0; // Unset the WINOUT flag for the bg. flags = (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) & ~(1 << bg); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE( 0, DISPLAY_WIDTH)); - SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE( 0, 155)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(56, 121)); - SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(56, 121)); + // Set limits for graph data + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE( 0, DISPLAY_WIDTH)); // Right side horizontal + SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE( 0, CONDITION_GRAPH_CENTER_X)); // Left side horizontal + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(CONDITION_GRAPH_TOP_Y, CONDITION_GRAPH_BOTTOM_Y)); // Right side vertical + SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(CONDITION_GRAPH_TOP_Y, CONDITION_GRAPH_BOTTOM_Y)); // Left side vertical SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); SetGpuReg(REG_OFFSET_WINOUT, flags); } -void sub_81D2230(struct ConditionGraph *graph) +void ConditionGraph_Update(struct ConditionGraph *graph) { u16 i; - for (i = 0; i < FLAVOR_COUNT; i++) - graph->unk12C[i] = graph->unk64[graph->unk352][i]; + for (i = 0; i < CONDITION_COUNT; i++) + graph->curPositions[i] = graph->newPositions[graph->updateCounter][i]; - graph->unk354 = 1; + graph->needsDraw = TRUE; } -static void sub_81D2278(struct ConditionGraph *graph, u16 *arg1, struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 *arg5) +static void ConditionGraph_CalcLine(struct ConditionGraph *graph, u16 *scanline, struct UCoords16 *pos1, struct UCoords16 *pos2, bool8 dir, u16 *overflowScanline) { - u16 i, r8, r10, r0, var_30; + u16 i, height, top, bottom, x2; u16 *ptr; - s32 r4, var_2C; + s32 x, xIncrement = 0; - var_2C = 0; - if (arg2->unk2 < arg3->unk2) + if (pos1->y < pos2->y) { - r10 = arg2->unk2; - r0 = arg3->unk2; - r4 = arg2->unk0 << 10; - var_30 = arg3->unk0; - r8 = r0 - r10; - if (r8 != 0) - var_2C = ((var_30 - arg2->unk0) << 10) / r8; + top = pos1->y; + bottom = pos2->y; + x = pos1->x << 10; + x2 = pos2->x; + height = bottom - top; + if (height != 0) + xIncrement = ((x2 - pos1->x) << 10) / height; } else { - r0 = arg2->unk2; - r10 = arg3->unk2; - r4 = arg3->unk0 << 10; - var_30 = arg2->unk0; - r8 = r0 - r10; - if (r8 != 0) - var_2C = ((var_30 - arg3->unk0) << 10) / r8; + bottom = pos1->y; + top = pos2->y; + x = pos2->x << 10; + x2 = pos1->x; + height = bottom - top; + if (height != 0) + xIncrement = ((x2 - pos2->x) << 10) / height; } - r8++; - if (arg5 == NULL) + height++; + if (overflowScanline == NULL) { - arg1 += (r10 - 56) * 2; - for (i = 0; i < r8; i++) + scanline += (top - CONDITION_GRAPH_TOP_Y) * 2; + for (i = 0; i < height; i++) { - arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; - r4 += var_2C; - arg1 += 2; + scanline[dir] = SHIFT_RIGHT_ADJUSTED(x, 10) + dir; + x += xIncrement; + scanline += 2; } - ptr = arg1 - 2; + ptr = scanline - 2; } - else if (var_2C > 0) + else if (xIncrement > 0) { - arg5 += (r10 - 56) * 2; + overflowScanline += (top - CONDITION_GRAPH_TOP_Y) * 2; // Less readable than the other loops, but it has to be written this way to match. - for (i = 0; i < r8; arg5[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4, r4 += var_2C, arg5 += 2, i++) + for (i = 0; i < height; overflowScanline[dir] = SHIFT_RIGHT_ADJUSTED(x, 10) + dir, x += xIncrement, overflowScanline += 2, i++) { - if (r4 >= (155 << 10)) + if (x >= (CONDITION_GRAPH_CENTER_X << 10)) break; } - graph->unk350 = r10 + i; - arg1 += (graph->unk350 - 56) * 2; - for (; i < r8; i++) + graph->bottom = top + i; + scanline += (graph->bottom - CONDITION_GRAPH_TOP_Y) * 2; + for (; i < height; i++) { - arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; - r4 += var_2C; - arg1 += 2; + scanline[dir] = SHIFT_RIGHT_ADJUSTED(x, 10) + dir; + x += xIncrement; + scanline += 2; } - ptr = arg1 - 2; + ptr = scanline - 2; } - else if (var_2C < 0) + else if (xIncrement < 0) { - arg1 += (r10 - 56) * 2; - for (i = 0; i < r8; i++) + scanline += (top - CONDITION_GRAPH_TOP_Y) * 2; + for (i = 0; i < height; i++) { - arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; - if (r4 < (155 << 10)) + scanline[dir] = SHIFT_RIGHT_ADJUSTED(x, 10) + dir; + if (x < (CONDITION_GRAPH_CENTER_X << 10)) { - arg1[arg4] = 155; + scanline[dir] = CONDITION_GRAPH_CENTER_X; break; } - r4 += var_2C; - arg1 += 2; + x += xIncrement; + scanline += 2; } - graph->unk350 = r10 + i; - arg5 += (graph->unk350 - 56) * 2; - for (; i < r8; i++) + graph->bottom = top + i; + overflowScanline += (graph->bottom - CONDITION_GRAPH_TOP_Y) * 2; + for (; i < height; i++) { - arg5[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; - r4 += var_2C; - arg5 += 2; + overflowScanline[dir] = SHIFT_RIGHT_ADJUSTED(x, 10) + dir; + x += xIncrement; + overflowScanline += 2; } - ptr = arg5 - 2; + ptr = overflowScanline - 2; } else { - graph->unk350 = r10; - arg1 += (r10 - 56) * 2; - arg5 += (r10 - 56) * 2; - arg1[1] = arg2->unk0 + 1; - arg5[0] = arg3->unk0; - arg5[1] = 155; + graph->bottom = top; + scanline += (top - CONDITION_GRAPH_TOP_Y) * 2; + overflowScanline += (top - CONDITION_GRAPH_TOP_Y) * 2; + scanline[1] = pos1->x + 1; + overflowScanline[0] = pos2->x; + overflowScanline[1] = CONDITION_GRAPH_CENTER_X; return; } - ptr[arg4] = arg4 + var_30; + ptr[dir] = dir + x2; } -static void sub_81D24A4(struct ConditionGraph *graph) +static void ConditionGraph_CalcRightHalf(struct ConditionGraph *graph) { - u16 i, r6, varMax; + u16 i, y, bottom; - if (graph->unk12C[0].unk2 < graph->unk12C[1].unk2) + // Calculate Cool -> Beauty line + if (graph->curPositions[GRAPH_COOL].y < graph->curPositions[GRAPH_BEAUTY].y) { - r6 = graph->unk12C[0].unk2; - sub_81D2278(graph, graph->unk140[0], &graph->unk12C[0], &graph->unk12C[1], 1, NULL); + y = graph->curPositions[GRAPH_COOL].y; + ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_COOL], &graph->curPositions[GRAPH_BEAUTY], TRUE, NULL); } else { - r6 = graph->unk12C[1].unk2; - sub_81D2278(graph, graph->unk140[0], &graph->unk12C[1], &graph->unk12C[0], 0, NULL); + y = graph->curPositions[GRAPH_BEAUTY].y; + ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_BEAUTY], &graph->curPositions[GRAPH_COOL], FALSE, NULL); } - sub_81D2278(graph, graph->unk140[0], &graph->unk12C[1], &graph->unk12C[2], 1, NULL); + // Calculate Beauty -> Cute line + // No need for conditional, positions on the Beauty line are always above the Cute line + ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_BEAUTY], &graph->curPositions[GRAPH_CUTE], TRUE, NULL); - i = (graph->unk12C[2].unk2 <= graph->unk12C[3].unk2); - sub_81D2278(graph, graph->unk140[0], &graph->unk12C[2], &graph->unk12C[3], i, graph->unk248[0]); - for (i = 56; i < r6; i++) + // Calculate Cute -> Tough line (includes left scanline because this crosses the halfway point) + i = (graph->curPositions[GRAPH_CUTE].y <= graph->curPositions[GRAPH_SMART].y); + ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_CUTE], &graph->curPositions[GRAPH_SMART], i, graph->scanlineLeft[0]); + + // Clear down to new top + for (i = CONDITION_GRAPH_TOP_Y; i < y; i++) { - graph->unk140[i - 56][0] = 0; - graph->unk140[i - 56][1] = 0; + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][0] = 0; + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][1] = 0; } - for (i = graph->unk12C[0].unk2; i <= graph->unk350; i++) - graph->unk140[i - 56][0] = 155; + for (i = graph->curPositions[GRAPH_COOL].y; i <= graph->bottom; i++) + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][0] = CONDITION_GRAPH_CENTER_X; - varMax = max(graph->unk350, graph->unk12C[2].unk2); - for (i = varMax + 1; i < 122; i++) + // Clear after new bottom + bottom = max(graph->bottom, graph->curPositions[GRAPH_CUTE].y); + for (i = bottom + 1; i <= CONDITION_GRAPH_BOTTOM_Y; i++) { - graph->unk140[i - 56][0] = 0; - graph->unk140[i - 56][1] = 0; + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][0] = 0; + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][1] = 0; } - for (i = 56; i < 122; i++) + for (i = CONDITION_GRAPH_TOP_Y; i <= CONDITION_GRAPH_BOTTOM_Y; i++) { - if (graph->unk140[i - 56][0] == 0 && graph->unk140[i - 56][1] != 0) - graph->unk140[i - 56][0] = 155; + if (graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][0] == 0 + && graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][1] != 0) + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][0] = CONDITION_GRAPH_CENTER_X; } } -static void sub_81D2634(struct ConditionGraph *graph) +static void ConditionGraph_CalcLeftHalf(struct ConditionGraph *graph) { - s32 i, r6, varMax; + s32 i, y, bottom; - if (graph->unk12C[0].unk2 < graph->unk12C[4].unk2) + // Calculate Cool -> Tough line + if (graph->curPositions[GRAPH_COOL].y < graph->curPositions[GRAPH_TOUGH].y) { - r6 = graph->unk12C[0].unk2; - sub_81D2278(graph, graph->unk248[0], &graph->unk12C[0], &graph->unk12C[4], 0, NULL); + y = graph->curPositions[GRAPH_COOL].y; + ConditionGraph_CalcLine(graph, graph->scanlineLeft[0], &graph->curPositions[GRAPH_COOL], &graph->curPositions[GRAPH_TOUGH], FALSE, NULL); } else { - r6 = graph->unk12C[4].unk2; - sub_81D2278(graph, graph->unk248[0], &graph->unk12C[4], &graph->unk12C[0], 1, NULL); + y = graph->curPositions[GRAPH_TOUGH].y; + ConditionGraph_CalcLine(graph, graph->scanlineLeft[0], &graph->curPositions[GRAPH_TOUGH], &graph->curPositions[GRAPH_COOL], TRUE, NULL); } - sub_81D2278(graph, graph->unk248[0], &graph->unk12C[4], &graph->unk12C[3], 0, NULL); + // Calculate Tough -> Smart line + // No need for conditional, positions on the Tough line are always above the Smart line + ConditionGraph_CalcLine(graph, graph->scanlineLeft[0], &graph->curPositions[GRAPH_TOUGH], &graph->curPositions[GRAPH_SMART], FALSE, NULL); - for (i = 56; i < r6; i++) + // Clear down to new top + for (i = CONDITION_GRAPH_TOP_Y; i < y; i++) { - graph->unk140[i + 10][0] = 0; - graph->unk140[i + 10][1] = 0; + graph->scanlineLeft[i - CONDITION_GRAPH_TOP_Y][0] = 0; + graph->scanlineLeft[i - CONDITION_GRAPH_TOP_Y][1] = 0; } - for (i = graph->unk12C[0].unk2; i <= graph->unk350; i++) - graph->unk140[i + 10][1] = 155; + for (i = graph->curPositions[GRAPH_COOL].y; i <= graph->bottom; i++) + graph->scanlineLeft[i - CONDITION_GRAPH_TOP_Y][1] = CONDITION_GRAPH_CENTER_X; - varMax = max(graph->unk350, graph->unk12C[3].unk2 + 1); - for (i = varMax; i < 122; i++) + // Clear after new bottom + bottom = max(graph->bottom, graph->curPositions[GRAPH_SMART].y + 1); + for (i = bottom; i <= CONDITION_GRAPH_BOTTOM_Y; i++) { - graph->unk140[i + 10][0] = 0; - graph->unk140[i + 10][1] = 0; + graph->scanlineLeft[i - CONDITION_GRAPH_TOP_Y][0] = 0; + graph->scanlineLeft[i - CONDITION_GRAPH_TOP_Y][1] = 0; } - for (i = 0; i < 66; i++) + for (i = 0; i < CONDITION_GRAPH_HEIGHT; i++) { - if (graph->unk248[i][0] >= graph->unk248[i][1]) + if (graph->scanlineLeft[i][0] >= graph->scanlineLeft[i][1]) { - graph->unk248[i][1] = 0; - graph->unk248[i][0] = 0; + graph->scanlineLeft[i][1] = 0; + graph->scanlineLeft[i][0] = 0; } } } -void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1) +void ConditionGraph_CalcPositions(u8 *conditions, struct UCoords16 *positions) { - u8 r2, r7; - s8 r12; + u8 lineLength, sinIdx; + s8 posIdx; u16 i; - r2 = sUnknown_08625410[*(arg0++)]; - arg1->unk0 = 155; - arg1->unk2 = 91 - r2; + // Cool is straight up-and-down (not angled), so no need for Sin + lineLength = sConditionToLineLength[*(conditions++)]; + positions[GRAPH_COOL].x = CONDITION_GRAPH_CENTER_X; + positions[GRAPH_COOL].y = CONDITION_GRAPH_CENTER_Y - lineLength; - r7 = 64; - r12 = 0; - for (i = 1; i < 5; i++) + sinIdx = 64; + posIdx = GRAPH_COOL; + for (i = 1; i < CONDITION_COUNT; i++) { - r7 += 51; - if (--r12 < 0) - r12 = 4; + sinIdx += 51; + if (--posIdx < 0) + posIdx = CONDITION_COUNT - 1; - if (r12 == 2) - r7++; + if (posIdx == GRAPH_CUTE) + sinIdx++; - r2 = sUnknown_08625410[*(arg0++)]; - arg1[r12].unk0 = 155 + ((r2 * gSineTable[64 + r7]) >> 8); - arg1[r12].unk2 = 91 - ((r2 * gSineTable[r7]) >> 8); + lineLength = sConditionToLineLength[*(conditions++)]; + positions[posIdx].x = CONDITION_GRAPH_CENTER_X + ((lineLength * gSineTable[64 + sinIdx]) >> 8); + positions[posIdx].y = CONDITION_GRAPH_CENTER_Y - ((lineLength * gSineTable[sinIdx]) >> 8); - if (r12 < 3 && (r2 != 32 || r12 != 2)) - arg1[r12].unk0 = 156 + ((r2 * gSineTable[64 + r7]) >> 8); + if (posIdx <= GRAPH_CUTE && (lineLength != 32 || posIdx != GRAPH_CUTE)) + positions[posIdx].x++; } } +//---------------- +// Move relearner +//---------------- + void InitMoveRelearnerWindows(bool8 useContextWindow) { u8 i; @@ -683,32 +709,30 @@ void InitMoveRelearnerWindows(bool8 useContextWindow) InitWindows(sMoveRelearnerWindowTemplates); DeactivateAllTextPrinters(); LoadUserWindowBorderGfx(0, 1, 0xE0); - LoadPalette(gUnknown_0860F074, 0xF0, 0x20); + LoadPalette(gStandardMenuPalette, 0xF0, 0x20); - for (i = 0; i < 5; i++) - { + for (i = 0; i < ARRAY_COUNT(sMoveRelearnerWindowTemplates) - 1; i++) FillWindowPixelBuffer(i, PIXEL_FILL(1)); - } if (!useContextWindow) { PutWindowTilemap(0); - DrawStdFrameWithCustomTileAndPalette(0, 0, 0x1, 0xE); + DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x1, 0xE); } else { PutWindowTilemap(1); - DrawStdFrameWithCustomTileAndPalette(1, 0, 1, 0xE); + DrawStdFrameWithCustomTileAndPalette(1, FALSE, 1, 0xE); } PutWindowTilemap(2); PutWindowTilemap(3); - DrawStdFrameWithCustomTileAndPalette(2, 0, 1, 0xE); - DrawStdFrameWithCustomTileAndPalette(3, 0, 1, 0xE); - nullsub_79(); + DrawStdFrameWithCustomTileAndPalette(2, FALSE, 1, 0xE); + DrawStdFrameWithCustomTileAndPalette(3, FALSE, 1, 0xE); + MoveRelearnerDummy(); ScheduleBgCopyTilemapToVram(1); } -static void nullsub_79(void) +static void MoveRelearnerDummy(void) { } @@ -720,13 +744,10 @@ u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices) gMultiuseListMenuTemplate.items = items; if (numChoices < 6) - { gMultiuseListMenuTemplate.maxShowed = numChoices; - } else - { gMultiuseListMenuTemplate.maxShowed = 6; - } + return gMultiuseListMenuTemplate.maxShowed; } @@ -734,36 +755,36 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) { s32 x; const struct BattleMove *move; - u8 buffer[0x20]; + u8 buffer[32]; const u8 *str; FillWindowPixelBuffer(0, PIXEL_FILL(1)); str = gText_MoveRelearnerBattleMoves; - x = GetStringCenterAlignXOffset(1, str, 0x80); - AddTextPrinterParameterized(0, 1, str, x, 1, TEXT_SPEED_FF, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 0x80); + AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 1, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerPP; - AddTextPrinterParameterized(0, 1, str, 4, 0x29, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, str, 4, 0x29, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerPower; - x = GetStringRightAlignXOffset(1, str, 0x6A); - AddTextPrinterParameterized(0, 1, str, x, 0x19, TEXT_SPEED_FF, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x6A); + AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 0x19, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerAccuracy; - x = GetStringRightAlignXOffset(1, str, 0x6A); - AddTextPrinterParameterized(0, 1, str, x, 0x29, TEXT_SPEED_FF, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x6A); + AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 0x29, TEXT_SKIP_DRAW, NULL); if (chosenMove == LIST_CANCEL) { - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); return; } move = &gBattleMoves[chosenMove]; str = gTypeNames[move->type]; - AddTextPrinterParameterized(0, 1, str, 4, 0x19, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, str, 4, 0x19, TEXT_SKIP_DRAW, NULL); - x = 4 + GetStringWidth(1, gText_MoveRelearnerPP, 0); + x = 4 + GetStringWidth(FONT_NORMAL, gText_MoveRelearnerPP, 0); ConvertIntToDecimalStringN(buffer, move->pp, STR_CONV_MODE_LEFT_ALIGN, 2); - AddTextPrinterParameterized(0, 1, buffer, x, 0x29, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, buffer, x, 0x29, TEXT_SKIP_DRAW, NULL); if (move->power < 2) { @@ -774,7 +795,7 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) ConvertIntToDecimalStringN(buffer, move->power, STR_CONV_MODE_LEFT_ALIGN, 3); str = buffer; } - AddTextPrinterParameterized(0, 1, str, 0x6A, 0x19, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, str, 0x6A, 0x19, TEXT_SKIP_DRAW, NULL); if (move->accuracy == 0) { @@ -785,10 +806,14 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) ConvertIntToDecimalStringN(buffer, move->accuracy, STR_CONV_MODE_LEFT_ALIGN, 3); str = buffer; } - AddTextPrinterParameterized(0, 1, str, 0x6A, 0x29, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, str, 0x6A, 0x29, TEXT_SKIP_DRAW, NULL); - str = gMoveDescriptionPointers[chosenMove - 1]; - AddTextPrinterParameterized(0, 7, str, 0, 0x41, 0, NULL); + if (move->effect != EFFECT_PLACEHOLDER) + str = gMoveDescriptionPointers[chosenMove - 1]; + else + str = gNotDoneYetDescription; + + AddTextPrinterParameterized(0, FONT_NARROW, str, 0, 0x41, 0, NULL); } static void MoveRelearnerMenuLoadContestMoveDescription(u32 chosenMove) @@ -800,31 +825,31 @@ static void MoveRelearnerMenuLoadContestMoveDescription(u32 chosenMove) MoveRelearnerShowHideHearts(chosenMove); FillWindowPixelBuffer(1, PIXEL_FILL(1)); str = gText_MoveRelearnerContestMovesTitle; - x = GetStringCenterAlignXOffset(1, str, 0x80); - AddTextPrinterParameterized(1, 1, str, x, 1, TEXT_SPEED_FF, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 0x80); + AddTextPrinterParameterized(1, FONT_NORMAL, str, x, 1, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerAppeal; - x = GetStringRightAlignXOffset(1, str, 0x5C); - AddTextPrinterParameterized(1, 1, str, x, 0x19, TEXT_SPEED_FF, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x5C); + AddTextPrinterParameterized(1, FONT_NORMAL, str, x, 0x19, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerJam; - x = GetStringRightAlignXOffset(1, str, 0x5C); - AddTextPrinterParameterized(1, 1, str, x, 0x29, TEXT_SPEED_FF, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x5C); + AddTextPrinterParameterized(1, FONT_NORMAL, str, x, 0x29, TEXT_SKIP_DRAW, NULL); if (chosenMove == MENU_NOTHING_CHOSEN) { - CopyWindowToVram(1, 2); + CopyWindowToVram(1, COPYWIN_GFX); return; } move = &gContestMoves[chosenMove]; str = gContestMoveTypeTextPointers[move->contestCategory]; - AddTextPrinterParameterized(1, 1, str, 4, 0x19, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(1, FONT_NORMAL, str, 4, 0x19, TEXT_SKIP_DRAW, NULL); str = gContestEffectDescriptionPointers[move->effect]; - AddTextPrinterParameterized(1, 7, str, 0, 0x41, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(1, FONT_NARROW, str, 0, 0x41, TEXT_SKIP_DRAW, NULL); - CopyWindowToVram(1, 2); + CopyWindowToVram(1, COPYWIN_GFX); } static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list) @@ -842,7 +867,7 @@ void MoveRelearnerPrintText(u8 *str) FillWindowPixelBuffer(3, PIXEL_FILL(1)); gTextFlags.canABSpeedUpPrint = TRUE; speed = GetPlayerTextSpeedDelay(); - AddTextPrinterParameterized2(3, 1, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, 3); + AddTextPrinterParameterized2(3, FONT_NORMAL, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, 3); } bool16 MoveRelearnerRunTextPrinters(void) @@ -856,6 +881,10 @@ void MoveRelearnerCreateYesNoMenu(void) CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, 1, 0xE, 0); } +//---------------- +// Condition menu +//---------------- + s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst) { s32 ret; @@ -895,7 +924,7 @@ static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId) if (GetBoxOrPartyMonData(box, mon, MON_DATA_IS_EGG, NULL)) return StringCopyPadded(dst, gText_EggNickname, 0, 12); GetBoxOrPartyMonData(box, mon, MON_DATA_NICKNAME, dst); - StringGetEnd10(dst); + StringGet_Nickname(dst); species = GetBoxOrPartyMonData(box, mon, MON_DATA_SPECIES, NULL); if (box == TOTAL_BOXES_COUNT) // Party mon. { @@ -997,7 +1026,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId if (box == TOTAL_BOXES_COUNT) // Party mon. BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, 8); else - BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(box), 8); + BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(box), BOX_NAME_LENGTH); } else { @@ -1010,7 +1039,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId } } -void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel) +void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *numSparkles, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel) { u16 i; @@ -1019,25 +1048,23 @@ void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 if (partyId != numMons) { - graph->stat[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); - graph->stat[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); - graph->stat[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); - graph->stat[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); - graph->stat[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + graph->conditions[id][CONDITION_COOL] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + graph->conditions[id][CONDITION_TOUGH] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + graph->conditions[id][CONDITION_SMART] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + graph->conditions[id][CONDITION_CUTE] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + graph->conditions[id][CONDITION_BEAUTY] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); - sheen[id] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 0xFF) - ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u - : 9; + numSparkles[id] = GET_NUM_CONDITION_SPARKLES(GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL)); - sub_81D2754(graph->stat[id], graph->unk14[id]); + ConditionGraph_CalcPositions(graph->conditions[id], graph->savedPositions[id]); } else { - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) { - graph->stat[id][i] = 0; - graph->unk14[id][i].unk0 = 155; - graph->unk14[id][i].unk2 = 91; + graph->conditions[id][i] = 0; + graph->savedPositions[id][i].x = CONDITION_GRAPH_CENTER_X; + graph->savedPositions[id][i].y = CONDITION_GRAPH_CENTER_Y; } } } @@ -1053,7 +1080,7 @@ void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, u32 trainerId = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); u32 personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); - LoadSpecialPokePic(&gMonFrontPicTable[species], tilesDst, species, personality, TRUE); + LoadSpecialPokePic(tilesDst, species, personality, TRUE); LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), palDst); } } @@ -1076,17 +1103,17 @@ bool8 MoveConditionMonOffscreen(s16 *x) return (*x != -80); } -bool8 TryUpdateConditionMonTransitionOn(struct ConditionGraph *graph, s16 *x) +bool8 ConditionMenu_UpdateMonEnter(struct ConditionGraph *graph, s16 *x) { - bool8 graphUpdating = TransitionConditionGraph(graph); + bool8 graphUpdating = ConditionGraph_TryUpdate(graph); bool8 monUpdating = MoveConditionMonOnscreen(x); return (graphUpdating || monUpdating); } -bool8 TryUpdateConditionMonTransitionOff(struct ConditionGraph *graph, s16 *x) +bool8 ConditionMenu_UpdateMonExit(struct ConditionGraph *graph, s16 *x) { - bool8 graphUpdating = TransitionConditionGraph(graph); + bool8 graphUpdating = ConditionGraph_TryUpdate(graph); bool8 monUpdating = MoveConditionMonOffscreen(x); return (graphUpdating || monUpdating); @@ -1102,7 +1129,7 @@ static const struct OamData sOam_ConditionMonPic = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -1119,7 +1146,7 @@ static const struct OamData sOam_ConditionSelectionIcon = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -1145,8 +1172,8 @@ static const union AnimCmd sAnim_ConditionSelectionIcon_Unselected[] = static const union AnimCmd *const sAnims_ConditionSelectionIcon[] = { - sAnim_ConditionSelectionIcon_Selected, - sAnim_ConditionSelectionIcon_Unselected + [CONDITION_ICON_SELECTED] = sAnim_ConditionSelectionIcon_Selected, + [CONDITION_ICON_UNSELECTED] = sAnim_ConditionSelectionIcon_Unselected }; // Just loads the generic data, up to the caller to load the actual sheet/pal for the specific mon @@ -1512,7 +1539,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg { AddTextPrinterParameterized3(windowId, - 1, + FONT_NORMAL, 0, 15 * i, color, @@ -1521,7 +1548,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg StringCopy(text, (statsDiff[i] >= 0) ? gText_Plus : gText_Dash); AddTextPrinterParameterized3(windowId, - 1, + FONT_NORMAL, 56, 15 * i, color, @@ -1534,7 +1561,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg ConvertIntToDecimalStringN(text, abs(statsDiff[i]), STR_CONV_MODE_LEFT_ALIGN, 2); AddTextPrinterParameterized3(windowId, - 1, + FONT_NORMAL, 56 + x, 15 * i, color, @@ -1576,7 +1603,7 @@ void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 s x = 6 * (4 - numDigits); AddTextPrinterParameterized3(windowId, - 1, + FONT_NORMAL, 0, 15 * i, color, @@ -1584,7 +1611,7 @@ void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 s sLvlUpStatStrings[i]); AddTextPrinterParameterized3(windowId, - 1, + FONT_NORMAL, 56 + x, 15 * i, color, diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 2a9304a4d8..72d3ac632f 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -2,254 +2,129 @@ #include "metatile_behavior.h" #include "constants/metatile_behaviors.h" -#define TILE_FLAG_ENCOUNTER_TILE 1 -#define TILE_FLAG_SURFABLE 2 +#define TILE_FLAG_HAS_ENCOUNTERS (1 << 0) +#define TILE_FLAG_SURFABLE (1 << 1) +#define TILE_FLAG_UNUSED (1 << 2) // Roughly all of the traversable metatiles. Set but never read -#define TILE_ATTRIBUTES(unused, surfable, wildEncounter) (((wildEncounter) ? 1 : 0) | ((surfable) ? 2 : 0) | ((unused) ? 4 : 0)) - -// wonder what the third flag is supposed to do -static const u8 sTileBitAttributes[] = +static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = { - [MB_NORMAL] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_WALL] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_TALL_GRASS] = TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - [MB_LONG_GRASS] = TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - [MB_UNUSED_04] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_05] = TILE_ATTRIBUTES(FALSE, FALSE, TRUE), - [MB_DEEP_SAND] = TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - [MB_SHORT_GRASS] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_CAVE] = TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - [MB_LONG_GRASS_SOUTH_EDGE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_NO_RUNNING] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_INDOOR_ENCOUNTER] = TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - [MB_MOUNTAIN_TOP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_BATTLE_PYRAMID_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_MOSSDEEP_GYM_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_MT_PYRE_HOLE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_POND_WATER] = TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - [MB_SEMI_DEEP_WATER] = TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - [MB_DEEP_WATER] = TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - [MB_WATERFALL] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - [MB_SOOTOPOLIS_DEEP_WATER] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - [MB_OCEAN_WATER] = TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - [MB_PUDDLE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SHALLOW_WATER] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_SOOTOPOLIS_DEEP_WATER] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_NO_SURFACING] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - [MB_UNUSED_SOOTOPOLIS_DEEP_WATER_2] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_STAIRS_OUTSIDE_ABANDONED_SHIP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SHOAL_CAVE_ENTRANCE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_1D] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_1E] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_1F] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_ICE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SAND] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SEAWEED] = TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - [MB_UNUSED_23] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_ASHGRASS] = TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - [MB_FOOTPRINTS] = TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - [MB_THIN_ICE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_CRACKED_ICE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_HOT_SPRINGS] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_LAVARIDGE_GYM_B1F_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SEAWEED_NO_SURFACING] = TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - [MB_REFLECTION_UNDER_BRIDGE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_2C] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_2D] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_2E] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_2F] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_IMPASSABLE_EAST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_IMPASSABLE_WEST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_IMPASSABLE_NORTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_IMPASSABLE_SOUTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_IMPASSABLE_NORTHEAST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_IMPASSABLE_NORTHWEST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_IMPASSABLE_SOUTHEAST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_IMPASSABLE_SOUTHWEST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_JUMP_EAST] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_JUMP_WEST] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_JUMP_NORTH] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_JUMP_SOUTH] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_JUMP_NORTHEAST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_JUMP_NORTHWEST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_JUMP_SOUTHEAST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_JUMP_SOUTHWEST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_WALK_EAST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_WALK_WEST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_WALK_NORTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_WALK_SOUTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SLIDE_EAST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SLIDE_WEST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SLIDE_NORTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SLIDE_SOUTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_TRICK_HOUSE_PUZZLE_8_FLOOR] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_49] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_4A] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_4B] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_4C] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_4D] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_4E] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_4F] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_EASTWARD_CURRENT] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - [MB_WESTWARD_CURRENT] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - [MB_NORTHWARD_CURRENT] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - [MB_SOUTHWARD_CURRENT] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - [MB_UNUSED_54] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_55] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_56] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_57] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_58] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_59] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_5A] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_5B] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_5C] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_5D] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_5E] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_5F] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_NON_ANIMATED_DOOR] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_LADDER] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_EAST_ARROW_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_WEST_ARROW_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_NORTH_ARROW_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SOUTH_ARROW_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_CRACKED_FLOOR_HOLE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_AQUA_HIDEOUT_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_LAVARIDGE_GYM_1F_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_ANIMATED_DOOR] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UP_ESCALATOR] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_DOWN_ESCALATOR] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_WATER_DOOR] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - [MB_WATER_SOUTH_ARROW_WARP] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - [MB_DEEP_SOUTH_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_6F] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - [MB_WARP_OR_BRIDGE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_71] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_ROUTE120_NORTH_BRIDGE_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_ROUTE120_NORTH_BRIDGE_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_PACIFIDLOG_VERTICAL_LOG_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_PACIFIDLOG_VERTICAL_LOG_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_PACIFIDLOG_HORIZONTAL_LOG_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_PACIFIDLOG_HORIZONTAL_LOG_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_FORTREE_BRIDGE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_79] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_ROUTE120_SOUTH_BRIDGE_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_ROUTE120_SOUTH_BRIDGE_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_ROUTE120_NORTH_BRIDGE_3] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_ROUTE120_NORTH_BRIDGE_4] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_7E] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_ROUTE110_BRIDGE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_COUNTER] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_81] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_82] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_PC] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_CABLE_BOX_RESULTS_1] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_REGION_MAP] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_TELEVISION] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_POKEBLOCK_FEEDER] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_88] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SLOT_MACHINE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_ROULETTE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_CLOSED_SOOTOPOLIS_DOOR] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_TRICK_HOUSE_PUZZLE_DOOR] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_PETALBURG_GYM_DOOR] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_RUNNING_SHOES_INSTRUCTION] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_QUESTIONNAIRE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_RED_CAVE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_RED_CAVE_OPEN] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_BROWN_CAVE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_BROWN_CAVE_OPEN] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_YELLOW_CAVE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_YELLOW_CAVE_OPEN] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_TREE_LEFT] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_TREE_LEFT_OPEN] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_SHRUB] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_SHRUB_OPEN] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_BLUE_CAVE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_BLUE_CAVE_OPEN] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_TREE_RIGHT] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_SPOT_TREE_RIGHT_OPEN] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_9E] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_9F] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_BERRY_TREE_SOIL] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_A1] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_A2] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_A3] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_A4] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_A5] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_A6] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_A7] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_A8] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_A9] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_AA] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_AB] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_AC] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_AD] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_AE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_AF] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_PC] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_REGISTER_PC] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_UNUSED] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_BLOCK_DECORATION] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_DECORATION] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_HOLDS_SMALL_DECORATION] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_B6] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_NORTH_WALL] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_BALLOON] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_IMPASSABLE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_GLITTER_MAT] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_JUMP_MAT] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_SPIN_MAT] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_SOUND_MAT] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_BREAKABLE_DOOR] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_SAND_ORNAMENT] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_IMPASSABLE_SOUTH_AND_NORTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_IMPASSABLE_WEST_AND_EAST] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_HOLE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_HOLDS_LARGE_DECORATION] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SECRET_BASE_TV_SHIELD] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_PLAYER_ROOM_PC_ON] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_C6] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SECRET_BASE_POSTER] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_C8] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_C9] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_CA] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_CB] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_CC] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_CD] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_CE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_CF] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_MUDDY_SLOPE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_BUMPY_SLOPE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_CRACKED_FLOOR] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_ISOLATED_VERTICAL_RAIL] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_ISOLATED_HORIZONTAL_RAIL] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_VERTICAL_RAIL] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_HORIZONTAL_RAIL] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_D7] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_D8] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_D9] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_DA] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_DB] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_DC] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_DD] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_DE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_DF] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_PICTURE_BOOK_SHELF] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_BOOKSHELF] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_POKEMON_CENTER_BOOKSHELF] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_VASE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_TRASH_CAN] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SHOP_SHELF] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_BLUEPRINT] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_CABLE_BOX_RESULTS_2] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_WIRELESS_BOX_RESULTS] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_TRAINER_HILL_TIMER] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SKY_PILLAR_CLOSED_DOOR] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_EB] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_EC] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_ED] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_EE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_EF] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_NORMAL] = TILE_FLAG_UNUSED, + [MB_TALL_GRASS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_LONG_GRASS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_UNUSED_05] = TILE_FLAG_HAS_ENCOUNTERS, + [MB_DEEP_SAND] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_SHORT_GRASS] = TILE_FLAG_UNUSED, + [MB_CAVE] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_LONG_GRASS_SOUTH_EDGE] = TILE_FLAG_UNUSED, + [MB_NO_RUNNING] = TILE_FLAG_UNUSED, + [MB_INDOOR_ENCOUNTER] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_MOUNTAIN_TOP] = TILE_FLAG_UNUSED, + [MB_BATTLE_PYRAMID_WARP] = TILE_FLAG_UNUSED, + [MB_MOSSDEEP_GYM_WARP] = TILE_FLAG_UNUSED, + [MB_MT_PYRE_HOLE] = TILE_FLAG_UNUSED, + [MB_POND_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_SEMI_DEEP_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_DEEP_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_WATERFALL] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_SOOTOPOLIS_DEEP_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_OCEAN_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_PUDDLE] = TILE_FLAG_UNUSED, + [MB_SHALLOW_WATER] = TILE_FLAG_UNUSED, + [MB_NO_SURFACING] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_STAIRS_OUTSIDE_ABANDONED_SHIP] = TILE_FLAG_UNUSED, + [MB_SHOAL_CAVE_ENTRANCE] = TILE_FLAG_UNUSED, + [MB_ICE] = TILE_FLAG_UNUSED, + [MB_SAND] = TILE_FLAG_UNUSED, + [MB_SEAWEED] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_UNUSED_23] = TILE_FLAG_UNUSED, + [MB_ASHGRASS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_FOOTPRINTS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_THIN_ICE] = TILE_FLAG_UNUSED, + [MB_CRACKED_ICE] = TILE_FLAG_UNUSED, + [MB_HOT_SPRINGS] = TILE_FLAG_UNUSED, + [MB_LAVARIDGE_GYM_B1F_WARP] = TILE_FLAG_UNUSED, + [MB_SEAWEED_NO_SURFACING] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_REFLECTION_UNDER_BRIDGE] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_EAST] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_WEST] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_NORTH] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_SOUTH] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_NORTHEAST] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_NORTHWEST] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_SOUTHEAST] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_SOUTHWEST] = TILE_FLAG_UNUSED, + [MB_JUMP_NORTHEAST] = TILE_FLAG_UNUSED, + [MB_JUMP_NORTHWEST] = TILE_FLAG_UNUSED, + [MB_JUMP_SOUTHEAST] = TILE_FLAG_UNUSED, + [MB_JUMP_SOUTHWEST] = TILE_FLAG_UNUSED, + [MB_WALK_EAST] = TILE_FLAG_UNUSED, + [MB_WALK_WEST] = TILE_FLAG_UNUSED, + [MB_WALK_NORTH] = TILE_FLAG_UNUSED, + [MB_WALK_SOUTH] = TILE_FLAG_UNUSED, + [MB_SLIDE_EAST] = TILE_FLAG_UNUSED, + [MB_SLIDE_WEST] = TILE_FLAG_UNUSED, + [MB_SLIDE_NORTH] = TILE_FLAG_UNUSED, + [MB_SLIDE_SOUTH] = TILE_FLAG_UNUSED, + [MB_TRICK_HOUSE_PUZZLE_8_FLOOR] = TILE_FLAG_UNUSED, + [MB_UNUSED_49] = TILE_FLAG_UNUSED, + [MB_UNUSED_4A] = TILE_FLAG_UNUSED, + [MB_EASTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_WESTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_NORTHWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_SOUTHWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_NON_ANIMATED_DOOR] = TILE_FLAG_UNUSED, + [MB_LADDER] = TILE_FLAG_UNUSED, + [MB_EAST_ARROW_WARP] = TILE_FLAG_UNUSED, + [MB_WEST_ARROW_WARP] = TILE_FLAG_UNUSED, + [MB_NORTH_ARROW_WARP] = TILE_FLAG_UNUSED, + [MB_SOUTH_ARROW_WARP] = TILE_FLAG_UNUSED, + [MB_CRACKED_FLOOR_HOLE] = TILE_FLAG_UNUSED, + [MB_AQUA_HIDEOUT_WARP] = TILE_FLAG_UNUSED, + [MB_LAVARIDGE_GYM_1F_WARP] = TILE_FLAG_UNUSED, + [MB_ANIMATED_DOOR] = TILE_FLAG_UNUSED, + [MB_UP_ESCALATOR] = TILE_FLAG_UNUSED, + [MB_DOWN_ESCALATOR] = TILE_FLAG_UNUSED, + [MB_WATER_DOOR] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_WATER_SOUTH_ARROW_WARP] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_DEEP_SOUTH_WARP] = TILE_FLAG_UNUSED, + [MB_UNUSED_6F] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_BRIDGE_OVER_POND_LOW] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_MED] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_HIGH] = TILE_FLAG_UNUSED, + [MB_PACIFIDLOG_VERTICAL_LOG_TOP] = TILE_FLAG_UNUSED, + [MB_PACIFIDLOG_VERTICAL_LOG_BOTTOM] = TILE_FLAG_UNUSED, + [MB_PACIFIDLOG_HORIZONTAL_LOG_LEFT] = TILE_FLAG_UNUSED, + [MB_PACIFIDLOG_HORIZONTAL_LOG_RIGHT] = TILE_FLAG_UNUSED, + [MB_FORTREE_BRIDGE] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_MED_EDGE_1] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_MED_EDGE_2] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_HIGH_EDGE_1] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_HIGH_EDGE_2] = TILE_FLAG_UNUSED, + [MB_UNUSED_BRIDGE] = TILE_FLAG_UNUSED, + [MB_BIKE_BRIDGE_OVER_BARRIER] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_SCENERY] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_TRAINER_SPOT] = TILE_FLAG_UNUSED, + [MB_HOLDS_SMALL_DECORATION] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_BALLOON] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_IMPASSABLE] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_GLITTER_MAT] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_JUMP_MAT] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_SPIN_MAT] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_SOUND_MAT] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_BREAKABLE_DOOR] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_SOUTH_AND_NORTH] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_WEST_AND_EAST] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_HOLE] = TILE_FLAG_UNUSED, + [MB_HOLDS_LARGE_DECORATION] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_TV_SHIELD] = TILE_FLAG_UNUSED, + [MB_PLAYER_ROOM_PC_ON] = TILE_FLAG_UNUSED, + [MB_MUDDY_SLOPE] = TILE_FLAG_UNUSED, + [MB_BUMPY_SLOPE] = TILE_FLAG_UNUSED, + [MB_CRACKED_FLOOR] = TILE_FLAG_UNUSED, + [MB_ISOLATED_VERTICAL_RAIL] = TILE_FLAG_UNUSED, + [MB_ISOLATED_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, + [MB_VERTICAL_RAIL] = TILE_FLAG_UNUSED, + [MB_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, }; bool8 MetatileBehavior_IsATile(u8 metatileBehavior) @@ -259,7 +134,7 @@ bool8 MetatileBehavior_IsATile(u8 metatileBehavior) bool8 MetatileBehavior_IsEncounterTile(u8 metatileBehavior) { - if ((sTileBitAttributes[metatileBehavior] & TILE_FLAG_ENCOUNTER_TILE)) + if ((sTileBitAttributes[metatileBehavior] & TILE_FLAG_HAS_ENCOUNTERS)) return TRUE; else return FALSE; @@ -631,11 +506,11 @@ bool8 MetatileBehavior_IsCableBoxResults1(u8 metatileBehavior) bool8 MetatileBehavior_IsOpenSecretBaseDoor(u8 metatileBehavior) { - if (metatileBehavior == MB_SECRET_BASE_SPOT_RED_CAVE_OPEN + if (metatileBehavior == MB_SECRET_BASE_SPOT_RED_CAVE_OPEN || metatileBehavior == MB_SECRET_BASE_SPOT_BROWN_CAVE_OPEN - || metatileBehavior == MB_SECRET_BASE_SPOT_YELLOW_CAVE_OPEN + || metatileBehavior == MB_SECRET_BASE_SPOT_YELLOW_CAVE_OPEN || metatileBehavior == MB_SECRET_BASE_SPOT_TREE_LEFT_OPEN - || metatileBehavior == MB_SECRET_BASE_SPOT_SHRUB_OPEN + || metatileBehavior == MB_SECRET_BASE_SPOT_SHRUB_OPEN || metatileBehavior == MB_SECRET_BASE_SPOT_BLUE_CAVE_OPEN || metatileBehavior == MB_SECRET_BASE_SPOT_TREE_RIGHT_OPEN) return TRUE; @@ -687,17 +562,19 @@ bool8 MetatileBehavior_IsRecordMixingSecretBasePC(u8 metatileBehavior) return FALSE; } -bool8 Unref_MetatileBehavior_IsSecretBaseUnused_B2(u8 metatileBehavior) +// Used by the rock/grass floor spaces that the secret base trainer is not standing on +bool8 MetatileBehavior_IsSecretBaseScenery1(u8 metatileBehavior) { - if (metatileBehavior == MB_SECRET_BASE_UNUSED) + if (metatileBehavior == MB_SECRET_BASE_SCENERY) return TRUE; else return FALSE; } -bool8 MetatileBehavior_IsBlockDecoration(u8 metatileBehavior) +// Used by the rock/grass floor space that the secret base trainer stands on +bool8 MetatileBehavior_IsSecretBaseTrainerSpot(u8 metatileBehavior) { - if (metatileBehavior == MB_BLOCK_DECORATION) + if (metatileBehavior == MB_SECRET_BASE_TRAINER_SPOT) return TRUE; else return FALSE; @@ -711,9 +588,9 @@ bool8 MetatileBehavior_IsSecretBaseImpassable(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsMB_C6(u8 metatileBehavior) +bool8 MetatileBehavior_IsSecretBaseDecorationBase(u8 metatileBehavior) { - if (metatileBehavior == MB_C6) + if (metatileBehavior == MB_SECRET_BASE_DECORATION_BASE) return TRUE; else return FALSE; @@ -743,9 +620,9 @@ bool8 MetatileBehavior_IsSecretBaseNorthWall(u8 metatileBehavior) return FALSE; } -bool8 Unref_MetatileBehavior_IsSecretBaseUnused_B2_2(u8 metatileBehavior) +bool8 MetatileBehavior_IsSecretBaseScenery2(u8 metatileBehavior) { - if (metatileBehavior == MB_SECRET_BASE_UNUSED) + if (metatileBehavior == MB_SECRET_BASE_SCENERY) return TRUE; else return FALSE; @@ -833,7 +710,9 @@ bool8 MetatileBehavior_IsPlayerRoomPCOn(u8 metatileBehavior) bool8 MetatileBehavior_HasRipples(u8 metatileBehavior) { - if (metatileBehavior == MB_POND_WATER || metatileBehavior == MB_PUDDLE || metatileBehavior == MB_SOOTOPOLIS_DEEP_WATER) + if (metatileBehavior == MB_POND_WATER + || metatileBehavior == MB_PUDDLE + || metatileBehavior == MB_SOOTOPOLIS_DEEP_WATER) return TRUE; else return FALSE; @@ -888,10 +767,19 @@ bool8 MetatileBehavior_IsFootprints(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsBridge(u8 metatileBehavior) +// For the sections of log bridges that span water / water's edge. +// Note that the rest of the metatiles for these bridges use MB_NORMAL. +// This is used to allow encounters on the water below the bridge. +bool8 MetatileBehavior_IsBridgeOverWater(u8 metatileBehavior) { - if ((metatileBehavior == MB_WARP_OR_BRIDGE || metatileBehavior == MB_UNUSED_71 || metatileBehavior == MB_ROUTE120_NORTH_BRIDGE_1 || metatileBehavior == MB_ROUTE120_NORTH_BRIDGE_2) - || (metatileBehavior == MB_ROUTE120_NORTH_BRIDGE_3 || metatileBehavior == MB_ROUTE120_NORTH_BRIDGE_4 || metatileBehavior == MB_UNUSED_7E || metatileBehavior == MB_ROUTE110_BRIDGE)) + if ((metatileBehavior == MB_BRIDGE_OVER_OCEAN + || metatileBehavior == MB_BRIDGE_OVER_POND_LOW + || metatileBehavior == MB_BRIDGE_OVER_POND_MED + || metatileBehavior == MB_BRIDGE_OVER_POND_HIGH) + || (metatileBehavior == MB_BRIDGE_OVER_POND_HIGH_EDGE_1 + || metatileBehavior == MB_BRIDGE_OVER_POND_HIGH_EDGE_2 + || metatileBehavior == MB_UNUSED_BRIDGE + || metatileBehavior == MB_BIKE_BRIDGE_OVER_BARRIER)) return TRUE; else return FALSE; @@ -899,34 +787,39 @@ bool8 MetatileBehavior_IsBridge(u8 metatileBehavior) u8 MetatileBehavior_GetBridgeType(u8 metatileBehavior) { - u8 result = metatileBehavior - MB_WARP_OR_BRIDGE; - if (result < 4) - return result; + // MB_BRIDGE_OVER_OCEAN --> BRIDGE_TYPE_OCEAN (Routes 110/119) + // MB_BRIDGE_OVER_POND_LOW --> BRIDGE_TYPE_POND_LOW (Unused) + // MB_BRIDGE_OVER_POND_MED --> BRIDGE_TYPE_POND_MED (Route 120, south) + // MB_BRIDGE_OVER_POND_HIGH --> BRIDGE_TYPE_POND_HIGH (Route 120, north) + if (metatileBehavior >= MB_BRIDGE_OVER_OCEAN + && metatileBehavior <= MB_BRIDGE_OVER_POND_HIGH) + return metatileBehavior - MB_BRIDGE_OVER_OCEAN; - result = metatileBehavior - MB_ROUTE120_SOUTH_BRIDGE_1; - if (result < 2) - return 2; + if (metatileBehavior >= MB_BRIDGE_OVER_POND_MED_EDGE_1 + && metatileBehavior <= MB_BRIDGE_OVER_POND_MED_EDGE_2) + return BRIDGE_TYPE_POND_MED; - result = metatileBehavior - MB_ROUTE120_NORTH_BRIDGE_3; - if (result < 2) - return 3; + if (metatileBehavior >= MB_BRIDGE_OVER_POND_HIGH_EDGE_1 + && metatileBehavior <= MB_BRIDGE_OVER_POND_HIGH_EDGE_2) + return BRIDGE_TYPE_POND_HIGH; - return 0; + return BRIDGE_TYPE_OCEAN; } -u8 MetatileBehavior_8089510(u8 metatileBehavior) +// Used to allow fishing below the bridge metatiles. +bool8 MetatileBehavior_IsBridgeOverWaterNoEdge(u8 metatileBehavior) { - u8 result = metatileBehavior - MB_WARP_OR_BRIDGE; - - if (result < 4) - return 1; + if (metatileBehavior >= MB_BRIDGE_OVER_OCEAN + && metatileBehavior <= MB_BRIDGE_OVER_POND_HIGH) + return TRUE; else - return 0; + return FALSE; } bool8 MetatileBehavior_IsLandWildEncounter(u8 metatileBehavior) { - if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == FALSE && MetatileBehavior_IsEncounterTile(metatileBehavior) == TRUE) + if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == FALSE + && MetatileBehavior_IsEncounterTile(metatileBehavior) == TRUE) return TRUE; else return FALSE; @@ -934,7 +827,8 @@ bool8 MetatileBehavior_IsLandWildEncounter(u8 metatileBehavior) bool8 MetatileBehavior_IsWaterWildEncounter(u8 metatileBehavior) { - if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == TRUE && MetatileBehavior_IsEncounterTile(metatileBehavior) == TRUE) + if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == TRUE + && MetatileBehavior_IsEncounterTile(metatileBehavior) == TRUE) return TRUE; else return FALSE; @@ -1114,33 +1008,33 @@ bool8 MetatileBehavior_IsFortreeBridge(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsPacifidlogVerticalLog1(u8 metatileBehavior) +bool8 MetatileBehavior_IsPacifidlogVerticalLogTop(u8 metatileBehavior) { - if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_1) + if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_TOP) return TRUE; else return FALSE; } -bool8 MetatileBehavior_IsPacifidlogVerticalLog2(u8 metatileBehavior) +bool8 MetatileBehavior_IsPacifidlogVerticalLogBottom(u8 metatileBehavior) { - if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_2) + if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_BOTTOM) return TRUE; else return FALSE; } -bool8 MetatileBehavior_IsPacifidlogHorizontalLog1(u8 metatileBehavior) +bool8 MetatileBehavior_IsPacifidlogHorizontalLogLeft(u8 metatileBehavior) { - if (metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_1) + if (metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_LEFT) return TRUE; else return FALSE; } -bool8 MetatileBehavior_IsPacifidlogHorizontalLog2(u8 metatileBehavior) +bool8 MetatileBehavior_IsPacifidlogHorizontalLogRight(u8 metatileBehavior) { - if (metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_2) + if (metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_RIGHT) return TRUE; else return FALSE; @@ -1148,8 +1042,10 @@ bool8 MetatileBehavior_IsPacifidlogHorizontalLog2(u8 metatileBehavior) bool8 MetatileBehavior_IsPacifidlogLog(u8 metatileBehavior) { - if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_1 || metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_2 - || metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_1 || metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_2) + if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_TOP + || metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_BOTTOM + || metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_LEFT + || metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_RIGHT) return TRUE; else return FALSE; @@ -1243,9 +1139,12 @@ bool8 MetatileBehavior_IsAquaHideoutWarp(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsWarpOrBridge(u8 metatileBehavior) +bool8 MetatileBehavior_IsUnionRoomWarp(u8 metatileBehavior) { - if (metatileBehavior == MB_WARP_OR_BRIDGE) + // This metatile behavior is re-used for some reason by + // the Union Room exit metatile. This function is used to + // initiate a teleport-style warp. + if (metatileBehavior == MB_BRIDGE_OVER_OCEAN) return TRUE; else return FALSE; @@ -1262,9 +1161,15 @@ bool8 MetatileBehavior_IsMossdeepGymWarp(u8 metatileBehavior) bool8 MetatileBehavior_IsSurfableFishableWater(u8 metatileBehavior) { - if (metatileBehavior == MB_POND_WATER || metatileBehavior == MB_OCEAN_WATER || metatileBehavior == MB_SEMI_DEEP_WATER || metatileBehavior == MB_DEEP_WATER - || metatileBehavior == MB_SOOTOPOLIS_DEEP_WATER || (metatileBehavior == MB_EASTWARD_CURRENT || metatileBehavior == MB_WESTWARD_CURRENT - || metatileBehavior == MB_NORTHWARD_CURRENT || metatileBehavior == MB_SOUTHWARD_CURRENT)) + if (metatileBehavior == MB_POND_WATER + || metatileBehavior == MB_OCEAN_WATER + || metatileBehavior == MB_SEMI_DEEP_WATER + || metatileBehavior == MB_DEEP_WATER + || metatileBehavior == MB_SOOTOPOLIS_DEEP_WATER + || (metatileBehavior == MB_EASTWARD_CURRENT + || metatileBehavior == MB_WESTWARD_CURRENT + || metatileBehavior == MB_NORTHWARD_CURRENT + || metatileBehavior == MB_SOUTHWARD_CURRENT)) return TRUE; else return FALSE; diff --git a/src/mevent2.c b/src/mevent2.c deleted file mode 100755 index d2c0208583..0000000000 --- a/src/mevent2.c +++ /dev/null @@ -1,630 +0,0 @@ -#include "global.h" -#include "util.h" -#include "main.h" -#include "event_data.h" -#include "easy_chat.h" -#include "script.h" -#include "battle_tower.h" -#include "mevent_news.h" -#include "string_util.h" -#include "new_game.h" -#include "mevent.h" -#include "constants/mevent.h" - -static EWRAM_DATA bool32 gUnknown_02022C70 = FALSE; - -static void sub_801B180(void); -static void s_DestroyWonderNews(void); -static bool32 sub_801B114(const struct WonderNews *data); -static bool32 sub_801B2CC(const struct WonderCard *data); -static void sub_801B330(void); -static void sub_801B368(void); -static void sub_801B9F8(void); -static void sub_801BA8C(u32 a0, u32 a1, u32 *a2, int a3); - -void sub_801AFD8(void) -{ - CpuFill32(0, &gSaveBlock1Ptr->unk_322C, sizeof(gSaveBlock1Ptr->unk_322C)); - sub_801B180(); - InitQuestionnaireWords(); -} - -struct WonderNews *GetSavedWonderNews(void) -{ - return &gSaveBlock1Ptr->unk_322C.wonderNews.data; -} - -struct WonderCard *GetSavedWonderCard(void) -{ - return &gSaveBlock1Ptr->unk_322C.wonderCard.data; -} - -struct MEventBuffer_3430_Sub *sav1_get_mevent_buffer_2(void) -{ - return &gSaveBlock1Ptr->unk_322C.buffer_310.data; -} - -struct MysteryEventStruct *sub_801B044(void) -{ - return &gSaveBlock1Ptr->unk_322C.unk_340; -} - -u16 *GetQuestionnaireWordsPtr(void) -{ - return gSaveBlock1Ptr->unk_322C.questionnaireWords; -} - -void DestroyWonderNews(void) -{ - s_DestroyWonderNews(); -} - -bool32 sub_801B078(const struct WonderNews *src) -{ - if (!sub_801B114(src)) - return FALSE; - - s_DestroyWonderNews(); - gSaveBlock1Ptr->unk_322C.wonderNews.data = *src; - gSaveBlock1Ptr->unk_322C.wonderNews.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderNews.data, sizeof(struct WonderNews)); - return TRUE; -} - -bool32 ValidateReceivedWonderNews(void) -{ - if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderNews.data, sizeof(struct WonderNews)) != gSaveBlock1Ptr->unk_322C.wonderNews.crc) - return FALSE; - if (!sub_801B114(&gSaveBlock1Ptr->unk_322C.wonderNews.data)) - return FALSE; - - return TRUE; -} - -static bool32 sub_801B114(const struct WonderNews *data) -{ - if (data->unk_00 == 0) - return FALSE; - - return TRUE; -} - -bool32 WonderNews_Test_Unk_02(void) -{ - const struct WonderNews *data = &gSaveBlock1Ptr->unk_322C.wonderNews.data; - if (data->unk_02 == 0) - return FALSE; - - return TRUE; -} - -static void s_DestroyWonderNews(void) -{ - CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->unk_322C.wonderNews.data)); - gSaveBlock1Ptr->unk_322C.wonderNews.crc = 0; -} - -static void sub_801B180(void) -{ - CpuFill32(0, sub_801B044(), sizeof(struct MysteryEventStruct)); - sub_801DBC0(); -} - -bool32 sub_801B1A4(const u8 *src) -{ - const u8 *r5 = (const u8 *)&gSaveBlock1Ptr->unk_322C.wonderNews.data; - u32 i; - if (!ValidateReceivedWonderNews()) - return FALSE; - - for (i = 0; i < sizeof(struct WonderNews); i++) - { - if (r5[i] != src[i]) - return FALSE; - } - - return TRUE; -} - -void DestroyWonderCard(void) -{ - sub_801B330(); - sub_801B368(); - sub_801B9F8(); - ClearRamScript(); - ClearMysteryEventFlags(); - ClearMysteryEventVars(); - ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer); -} - -bool32 sub_801B21C(const struct WonderCard *data) -{ - struct MEventBuffer_3430_Sub *r2; - struct WonderCard *r1; - if (!sub_801B2CC(data)) - return FALSE; - - DestroyWonderCard(); - memcpy(&gSaveBlock1Ptr->unk_322C.wonderCard.data, data, sizeof(struct WonderCard)); - gSaveBlock1Ptr->unk_322C.wonderCard.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderCard.data, sizeof(struct WonderCard)); - r2 = &gSaveBlock1Ptr->unk_322C.buffer_310.data; - r1 = &gSaveBlock1Ptr->unk_322C.wonderCard.data; - r2->unk_06 = r1->unk_02; - return TRUE; -} - -bool32 ValidateReceivedWonderCard(void) -{ - if (gSaveBlock1Ptr->unk_322C.wonderCard.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderCard.data, sizeof(struct WonderCard))) - return FALSE; - if (!sub_801B2CC(&gSaveBlock1Ptr->unk_322C.wonderCard.data)) - return FALSE; - if (!ValidateSavedRamScript()) - return FALSE; - - return TRUE; -} - -static bool32 sub_801B2CC(const struct WonderCard *data) -{ - if (data->unk_00 == 0) - return FALSE; - if (data->unk_08_0 > 2) - return FALSE; - if (!(data->unk_08_6 == 0 || data->unk_08_6 == 1 || data->unk_08_6 == 2)) - return FALSE; - if (data->unk_08_2 > 7) - return FALSE; - if (data->unk_09 > 7) - return FALSE; - - return TRUE; -} - -bool32 WonderCard_Test_Unk_08_6(void) -{ - const struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; - if (data->unk_08_6 == 0) - return FALSE; - - return TRUE; -} - -static void sub_801B330(void) -{ - CpuFill32(0, &gSaveBlock1Ptr->unk_322C.wonderCard.data, sizeof(struct WonderCard)); - gSaveBlock1Ptr->unk_322C.wonderCard.crc = 0; -} - -static void sub_801B368(void) -{ - CpuFill32(0, sav1_get_mevent_buffer_2(), 18 *sizeof(u16)); - gSaveBlock1Ptr->unk_322C.buffer_310.crc = 0; -} - -u16 GetWonderCardFlagID(void) -{ - if (ValidateReceivedWonderCard()) - return gSaveBlock1Ptr->unk_322C.wonderCard.data.unk_00; - - return 0; -} - -void WonderCard_ResetInternalReceivedFlag(struct WonderCard *buffer) -{ - if (buffer->unk_08_6 == 1) - buffer->unk_08_6 = 0; -} - -static bool32 IsWonderCardFlagIDInValidRange(u16 a0) -{ - if (a0 >= 1000 && a0 < 1020) - return TRUE; - - return FALSE; -} - -static const u16 sMysteryGiftFlags[] = -{ - FLAG_RECEIVED_AURORA_TICKET, - FLAG_RECEIVED_MYSTIC_TICKET, - FLAG_RECEIVED_OLD_SEA_MAP, - FLAG_UNUSED_MYSTERY_GIFT_0x13D, - FLAG_UNUSED_MYSTERY_GIFT_0x13E, - FLAG_UNUSED_MYSTERY_GIFT_0x13F, - FLAG_UNUSED_MYSTERY_GIFT_0x140, - FLAG_UNUSED_MYSTERY_GIFT_0x141, - FLAG_UNUSED_MYSTERY_GIFT_0x142, - FLAG_UNUSED_MYSTERY_GIFT_0x143, - FLAG_UNUSED_MYSTERY_GIFT_0x144, - FLAG_UNUSED_MYSTERY_GIFT_0x145, - FLAG_UNUSED_MYSTERY_GIFT_0x146, - FLAG_UNUSED_MYSTERY_GIFT_0x147, - FLAG_UNUSED_MYSTERY_GIFT_0x148, - FLAG_UNUSED_MYSTERY_GIFT_0x149, - FLAG_UNUSED_MYSTERY_GIFT_0x14A, - FLAG_UNUSED_MYSTERY_GIFT_0x14B, - FLAG_UNUSED_MYSTERY_GIFT_0x14C, - FLAG_UNUSED_MYSTERY_GIFT_0x14D, -}; - -bool32 CheckReceivedGiftFromWonderCard(void) -{ - u16 value = GetWonderCardFlagID(); - if (!IsWonderCardFlagIDInValidRange(value)) - return FALSE; - - if (FlagGet(sMysteryGiftFlags[value - 1000]) == TRUE) - return FALSE; - - return TRUE; -} - -static int sub_801B438(const struct MEventBuffer_3430_Sub *data, int size) -{ - int r3 = 0; - int i; - for (i = 0; i < size; i++) - { - if (data->unk_08[1][i] && data->unk_08[0][i]) - r3++; - } - - return r3; -} - -static bool32 sub_801B460(const struct MEventBuffer_3430_Sub *data1, const u16 *data2, int size) -{ - int i; - for (i = 0; i < size; i++) - { - if (data1->unk_08[1][i] == data2[1]) - return TRUE; - if (data1->unk_08[0][i] == data2[0]) - return TRUE; - } - - return FALSE; -} - -static bool32 sub_801B4A4(const u16 *data) -{ - if (data[1] == 0) - return FALSE; - if (data[0] == 0) - return FALSE; - if (data[0] >= NUM_SPECIES) - return FALSE; - return TRUE; -} - -static int sub_801B4CC(void) -{ - struct WonderCard *data; - if (!ValidateReceivedWonderCard()) - return 0; - - data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; - if (data->unk_08_0 != 1) - return 0; - - return sub_801B438(&gSaveBlock1Ptr->unk_322C.buffer_310.data, data->unk_09); -} - -bool32 sub_801B508(const u16 *data) -{ - struct WonderCard *buffer = &gSaveBlock1Ptr->unk_322C.wonderCard.data; - int size = buffer->unk_09; - int i; - if (!sub_801B4A4(data)) - return FALSE; - - if (sub_801B460(&gSaveBlock1Ptr->unk_322C.buffer_310.data, data, size)) - return FALSE; - - for (i = 0; i < size; i++) - { - if (gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[1][i] == 0 && gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[0][i] == 0) - { - gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[1][i] = data[1]; - gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[0][i] = data[0]; - return TRUE; - } - } - - return FALSE; -} - -void sub_801B580(struct MEventStruct_Unk1442CC *data, bool32 a1) -{ - int i; - CpuFill32(0, data, sizeof(struct MEventStruct_Unk1442CC)); - data->unk_00 = 0x101; - data->unk_04 = 1; - data->unk_08 = 1; - - if (a1) - { - data->unk_0C = 5; - data->unk_10 = 0x0201; - } - else - { - data->unk_0C = 4; - data->unk_10 = 0x0200; - } - - if (ValidateReceivedWonderCard()) - { - data->unk_14 = GetSavedWonderCard()->unk_00; - data->unk_20 = *sav1_get_mevent_buffer_2(); - data->unk_44 = GetSavedWonderCard()->unk_09; - } - else - { - data->unk_14 = 0; - } - - for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++) - data->unk_16[i] = gSaveBlock1Ptr->unk_322C.questionnaireWords[i]; - - CopyTrainerId(data->unk_4C, gSaveBlock2Ptr->playerTrainerId); - StringCopy(data->unk_45, gSaveBlock2Ptr->playerName); - for (i = 0; i < 6; i++) - data->unk_50[i] = gSaveBlock1Ptr->easyChatProfile[i]; - - memcpy(data->unk_5C, RomHeaderGameCode, 4); - data->unk_60 = RomHeaderSoftwareVersion; -} - -bool32 sub_801B6A0(const struct MEventStruct_Unk1442CC *data, bool32 a1) -{ - if (data->unk_00 != 0x101) - return FALSE; - - if (!(data->unk_04 & 1)) - return FALSE; - - if (!(data->unk_08 & 1)) - return FALSE; - - if (!a1) - { - if (!(data->unk_0C & 4)) - return FALSE; - - if (!(data->unk_10 & 0x380)) - return FALSE; - } - - return TRUE; -} - -u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused) -{ - if (a1->unk_14 == 0) - return 0; - - if (*a0 == a1->unk_14) - return 1; - - return 2; -} - -u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused) -{ - int r4 = a1->unk_44 - sub_801B438(&a1->unk_20, a1->unk_44); - if (r4 == 0) - return 1; - if (sub_801B460(&a1->unk_20, a0, a1->unk_44)) - return 3; - if (r4 == 1) - return 4; - return 2; -} - -bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1) -{ - int i; - for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++) - { - if (a0->unk_16[i] != a1[i]) - return FALSE; - } - - return TRUE; -} - -static int sub_801B770(const struct MEventStruct_Unk1442CC *a0) -{ - return sub_801B438(&a0->unk_20, a0->unk_44); -} - -u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command) -{ - switch (command) - { - case 0: - return a0->unk_20.unk_00; - case 1: - return a0->unk_20.unk_02; - case 2: - return a0->unk_20.unk_04; - case 3: - return sub_801B770(a0); - case 4: - return a0->unk_44; - default: - AGB_ASSERT(0); - return 0; - } -} - -static void sub_801B7D8(u32 command) -{ - struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; - if (data->unk_08_0 == 2) - { - u16 *dest = NULL; - switch (command) - { - case 0: - dest = &gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_00; - break; - case 1: - dest = &gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_02; - break; - case 2: - dest = &gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_04; - break; - case 3: - break; - case 4: - break; - } - - if (dest == NULL) - { - AGB_ASSERT(0); - } - else if (++(*dest) > 999) - { - *dest = 999; - } - } -} - -u16 mevent_081445C0(u32 command) -{ - switch (command) - { - case GET_CARD_BATTLES_WON_INTERNAL: - { - struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; - if (data->unk_08_0 == 2) - { - struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data; - return buffer->unk_00; - } - break; - } - case 1: // Never occurs - { - struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; - if (data->unk_08_0 == 2) - { - struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data; - return buffer->unk_02; - } - break; - } - case 2: // Never occurs - { - struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; - if (data->unk_08_0 == 2) - { - struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data; - return buffer->unk_04; - } - break; - } - case GET_NUM_STAMPS_INTERNAL: - { - struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; - if (data->unk_08_0 == 1) - return sub_801B4CC(); - break; - } - case GET_MAX_STAMPS_INTERNAL: - { - struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; - if (data->unk_08_0 == 1) - return data->unk_09; - break; - } - } - - AGB_ASSERT(0); - return 0; -} - -void ResetReceivedWonderCardFlag(void) -{ - gUnknown_02022C70 = FALSE; -} - -bool32 MEventHandleReceivedWonderCard(u16 a0) -{ - gUnknown_02022C70 = FALSE; - if (a0 == 0) - return FALSE; - - if (!ValidateReceivedWonderCard()) - return FALSE; - - if (gSaveBlock1Ptr->unk_322C.wonderCard.data.unk_00 != a0) - return FALSE; - - gUnknown_02022C70 = TRUE; - return TRUE; -} - -void RecordIdOfWonderCardSenderByEventType(u32 a0, u32 a1) -{ - if (gUnknown_02022C70) - { - switch (a0) - { - case 2: - sub_801BA8C(2, a1, gSaveBlock1Ptr->unk_322C.unk_344[1], 5); - break; - case 0: - sub_801BA8C(0, a1, gSaveBlock1Ptr->unk_322C.unk_344[0], 5); - break; - case 1: - sub_801BA8C(1, a1, gSaveBlock1Ptr->unk_322C.unk_344[0], 5); - break; - default: - AGB_ASSERT(0); - } - } -} - -static void sub_801B9F8(void) -{ - CpuFill32(0, gSaveBlock1Ptr->unk_322C.unk_344, sizeof(gSaveBlock1Ptr->unk_322C.unk_344)); -} - -static bool32 sub_801BA24(u32 a0, u32 *a1, int size) -{ - int i; - int j; - - for (i = 0; i < size; i++) - { - if (a1[i] == a0) - break; - } - - if (i == size) - { - for (j = size - 1; j > 0; j--) - a1[j] = a1[j - 1]; - - a1[0] = a0; - return TRUE; - } - else - { - for (j = i; j > 0; j--) - a1[j] = a1[j - 1]; - - a1[0] = a0; - return FALSE; - } -} - -static void sub_801BA8C(u32 a0, u32 a1, u32 *a2, int a3) -{ - if (sub_801BA24(a1, a2, a3)) - sub_801B7D8(a0); -} diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c deleted file mode 100644 index c8544a67a9..0000000000 --- a/src/mevent_801BAAC.c +++ /dev/null @@ -1,826 +0,0 @@ -#include "global.h" -#include "bg.h" -#include "gpu_regs.h" -#include "palette.h" -#include "decompress.h" -#include "malloc.h" -#include "menu.h" -#include "pokemon_icon.h" -#include "union_room.h" -#include "list_menu.h" -#include "text_window.h" -#include "string_util.h" -#include "link_rfu.h" -#include "mevent.h" -#include "mystery_gift.h" -#include "constants/rgb.h" - -struct UnkStruct_8467FB8 -{ - u8 textPal1:4; - u8 textPal2:4; - u8 textPal3:4; - u8 textPal4:4; - const u32 * tiles; - const u32 * map; - const u16 * pal; -}; - -struct UnkStruct_203F3C8_02DC -{ - u8 unk_00; - u8 unk_01[41]; - u8 unk_42[4]; -}; - -struct UnkStruct_203F3C8 -{ - /*0000*/ struct WonderCard unk_0000; - /*014c*/ struct MEventBuffer_3430_Sub unk_014C; - /*0170*/ const struct UnkStruct_8467FB8 * unk_0170; - /*0174*/ u8 unk_0174; - /*0175*/ u8 unk_0175; - /*0176*/ u16 unk_0176[3]; - /*017C*/ u8 unk_017C; - /*017D*/ u8 unk_017D[7][2]; - /*018B*/ u8 unk_018B[41]; - /*01B4*/ u8 unk_01B4[41]; - /*01DD*/ u8 unk_01DD[7]; - /*01E4*/ u8 unk_01E4[4][41]; - /*0288*/ u8 unk_0288[41]; - /*02B1*/ u8 unk_02B1[41]; - /*02DC*/ struct UnkStruct_203F3C8_02DC unk_02DC[8]; - /*045C*/ u8 buffer_045C[0x1000]; -}; - -EWRAM_DATA struct UnkStruct_203F3C8 * sWonderCardData = NULL; - -void sub_801BEF8(void); -void sub_801C178(u8 whichWindow); -void sub_801C4C0(void); -void sub_801C61C(void); - -extern const struct OamData gOamData_AffineOff_ObjNormal_32x16; - -const u8 sTextColorTable[][3] = { - {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}, - {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY} -}; -const u8 ALIGNED(4) gUnknown_082F0E18[3] = {7, 4, 7}; -const struct WindowTemplate gUnknown_082F0E1C[] = { - { - .bg = 1, - .tilemapLeft = 1, - .tilemapTop = 1, - .width = 25, - .height = 4, - .paletteNum = 2, - .baseBlock = 0x029c - }, { - .bg = 1, - .tilemapLeft = 1, - .tilemapTop = 6, - .width = 28, - .height = 8, - .paletteNum = 2, - .baseBlock = 0x01bc - }, { - .bg = 1, - .tilemapLeft = 1, - .tilemapTop = 14, - .width = 28, - .height = 5, - .paletteNum = 2, - .baseBlock = 0x0130 - } -}; - -const u16 gWonderCardBgPal1[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_1.gbapal"); -const u16 gWonderCardBgPal2[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_2.gbapal"); -const u16 gWonderCardBgPal3[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_3.gbapal"); -const u16 gWonderCardBgPal4[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_4.gbapal"); -const u16 gWonderCardBgPal5[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_5.gbapal"); -const u16 gWonderCardBgPal6[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_6.gbapal"); -const u16 gWonderCardBgPal7[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_7.gbapal"); -const u16 gWonderCardBgPal8[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_8.gbapal"); -const u32 gWonderCardBgGfx1[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_1.4bpp.lz"); -const u32 gWonderCardBgTilemap1[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_1.bin.lz"); -const u32 gWonderCardBgGfx2[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_2.4bpp.lz"); -const u32 gWonderCardBgTilemap2[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_2.bin.lz"); -const u32 gWonderCardBgGfx3[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_3.4bpp.lz"); -const u32 gWonderCardBgTilemap3[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_3.bin.lz"); -const u32 gWonderCardBgGfx7[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_7.4bpp.lz"); -const u32 gWonderCardBgTilemap7[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_7.bin.lz"); -const u32 gWonderCardBgGfx8[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_8.4bpp.lz"); -const u32 gWonderCardBgTilemap8[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_8.bin.lz"); -const u16 gWonderCardShadowPal1[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_1.gbapal"); -const u16 gWonderCardShadowPal2[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_2.gbapal"); -const u16 gWonderCardShadowPal3[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_3.gbapal"); -const u16 gWonderCardShadowPal4[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_4.gbapal"); -const u16 gWonderCardShadowPal5[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_5.gbapal"); -const u16 gWonderCardShadowPal6[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_6.gbapal"); -const u16 gWonderCardShadowPal7[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_7.gbapal"); -const u16 gWonderCardShadowPal8[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_8.gbapal"); -const u32 gWonderCardShadowGfx[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_shadow.4bpp.lz"); - -const struct CompressedSpriteSheet gUnknown_082F1D00 = { - gWonderCardShadowGfx, 0x100, 0x8000 -}; -const struct SpritePalette gUnknown_082F1D08[] = { - {gWonderCardShadowPal1, 0x8000}, - {gWonderCardShadowPal2, 0x8000}, - {gWonderCardShadowPal3, 0x8000}, - {gWonderCardShadowPal4, 0x8000}, - {gWonderCardShadowPal5, 0x8000}, - {gWonderCardShadowPal6, 0x8000}, - {gWonderCardShadowPal7, 0x8000}, - {gWonderCardShadowPal8, 0x8000} -}; -const struct SpriteTemplate gUnknown_082F1D48 = { - 0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy -}; -const struct UnkStruct_8467FB8 gUnknown_082F1D60[8] = { - {1, 0, 0, 0, gWonderCardBgGfx1, gWonderCardBgTilemap1, gWonderCardBgPal1}, - {1, 0, 0, 1, gWonderCardBgGfx2, gWonderCardBgTilemap2, gWonderCardBgPal2}, - {1, 0, 0, 2, gWonderCardBgGfx3, gWonderCardBgTilemap3, gWonderCardBgPal3}, - {1, 0, 0, 3, gWonderCardBgGfx3, gWonderCardBgTilemap3, gWonderCardBgPal4}, - {1, 0, 0, 4, gWonderCardBgGfx3, gWonderCardBgTilemap3, gWonderCardBgPal5}, - {1, 0, 0, 5, gWonderCardBgGfx3, gWonderCardBgTilemap3, gWonderCardBgPal6}, - {1, 0, 0, 6, gWonderCardBgGfx7, gWonderCardBgTilemap7, gWonderCardBgPal7}, - {1, 0, 0, 7, gWonderCardBgGfx8, gWonderCardBgTilemap8, gWonderCardBgPal8} -}; - -bool32 InitWonderCardResources(struct WonderCard * r5, struct MEventBuffer_3430_Sub * r6) -{ - if (r5 == NULL || r6 == NULL) - return FALSE; - sWonderCardData = AllocZeroed(sizeof(struct UnkStruct_203F3C8)); - if (sWonderCardData == NULL) - return FALSE; - sWonderCardData->unk_0000 = *r5; - sWonderCardData->unk_014C = *r6; - if (sWonderCardData->unk_0000.unk_08_2 >= ARRAY_COUNT(gUnknown_082F1D60)) - sWonderCardData->unk_0000.unk_08_2 = 0; - if (sWonderCardData->unk_0000.unk_08_0 >= ARRAY_COUNT(gUnknown_082F0E18)) - sWonderCardData->unk_0000.unk_08_0 = 0; - if (sWonderCardData->unk_0000.unk_09 > ARRAY_COUNT(sWonderCardData->unk_017D)) - sWonderCardData->unk_0000.unk_09 = 0; - sWonderCardData->unk_0170 = &gUnknown_082F1D60[sWonderCardData->unk_0000.unk_08_2]; - return TRUE; -} - -void DestroyWonderCardResources(void) -{ - if (sWonderCardData != NULL) - { - *sWonderCardData = (struct UnkStruct_203F3C8){}; - Free(sWonderCardData); - sWonderCardData = NULL; - } -} - -s32 FadeToWonderCardMenu(void) -{ - if (sWonderCardData == NULL) - return -1; - switch(sWonderCardData->unk_0174) - { - case 0: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - break; - case 1: - if (UpdatePaletteFade()) - return 0; - break; - case 2: - FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); - FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); - FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); - CopyBgTilemapBufferToVram(0); - CopyBgTilemapBufferToVram(1); - CopyBgTilemapBufferToVram(2); - DecompressAndCopyTileDataToVram(2, sWonderCardData->unk_0170->tiles, 0, 0x008, 0); - sWonderCardData->unk_0176[0] = AddWindow(&gUnknown_082F0E1C[0]); - sWonderCardData->unk_0176[1] = AddWindow(&gUnknown_082F0E1C[1]); - sWonderCardData->unk_0176[2] = AddWindow(&gUnknown_082F0E1C[2]); - break; - case 3: - if (FreeTempTileDataBuffersIfPossible()) - return 0; - LoadPalette(GetTextWindowPalette(1), 0x20, 0x20); - gPaletteFade.bufferTransferDisabled = TRUE; - LoadPalette(sWonderCardData->unk_0170->pal, 0x10, 0x20); - LZ77UnCompWram(sWonderCardData->unk_0170->map, sWonderCardData->buffer_045C); - CopyRectToBgTilemapBufferRect(2, sWonderCardData->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0); - CopyBgTilemapBufferToVram(2); - break; - case 4: - sub_801BEF8(); - break; - case 5: - sub_801C178(0); - sub_801C178(1); - sub_801C178(2); - CopyBgTilemapBufferToVram(1); - break; - case 6: - LoadMonIconPalettes(); - break; - case 7: - ShowBg(1); - ShowBg(2); - gPaletteFade.bufferTransferDisabled = FALSE; - sub_801C4C0(); - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); - UpdatePaletteFade(); - break; - default: - if (UpdatePaletteFade()) - return 0; - sWonderCardData->unk_0174 = 0; - return 1; - } - ++sWonderCardData->unk_0174; - return 0; -} - -s32 FadeOutFromWonderCard(bool32 flag) -{ - if (sWonderCardData == NULL) - return -1; - switch (sWonderCardData->unk_0174) - { - case 0: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - break; - case 1: - if (UpdatePaletteFade()) - return 0; - break; - case 2: - FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); - FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); - FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); - CopyBgTilemapBufferToVram(0); - CopyBgTilemapBufferToVram(1); - CopyBgTilemapBufferToVram(2); - break; - case 3: - HideBg(1); - HideBg(2); - RemoveWindow(sWonderCardData->unk_0176[2]); - RemoveWindow(sWonderCardData->unk_0176[1]); - RemoveWindow(sWonderCardData->unk_0176[0]); - break; - case 4: - sub_801C61C(); - FreeMonIconPalettes(); - break; - case 5: - PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag); - CopyBgTilemapBufferToVram(0); - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); - break; - default: - if (UpdatePaletteFade()) - return 0; - sWonderCardData->unk_0174 = 0; - return 1; - } - ++sWonderCardData->unk_0174; - return 0; -} - -void sub_801BEF8(void) -{ - u16 i = 0; - u16 r6; - u16 sp0[3] = {0, 0, 0}; - - memcpy(sWonderCardData->unk_018B, sWonderCardData->unk_0000.unk_0A, 40); - sWonderCardData->unk_018B[40] = EOS; - memcpy(sWonderCardData->unk_01B4, sWonderCardData->unk_0000.unk_32, 40); - sWonderCardData->unk_01B4[40] = EOS; - if (sWonderCardData->unk_0000.unk_04 > 999999) - sWonderCardData->unk_0000.unk_04 = 999999; - ConvertIntToDecimalStringN(sWonderCardData->unk_01DD, sWonderCardData->unk_0000.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6); - for (i = 0; i < 4; i++) - { - memcpy(sWonderCardData->unk_01E4[i], sWonderCardData->unk_0000.unk_5A[i], 40); - sWonderCardData->unk_01E4[i][40] = EOS; - } - memcpy(sWonderCardData->unk_0288, sWonderCardData->unk_0000.unk_FA, 40); - sWonderCardData->unk_0288[40] = EOS; - switch (sWonderCardData->unk_0000.unk_08_0) - { - case 0: - memcpy(sWonderCardData->unk_02B1, sWonderCardData->unk_0000.unk_122, 40); - sWonderCardData->unk_02B1[40] = EOS; - break; - case 1: - sWonderCardData->unk_02B1[00] = EOS; - break; - case 2: - sWonderCardData->unk_02B1[00] = EOS; - sp0[0] = sWonderCardData->unk_014C.unk_00 < 999 ? sWonderCardData->unk_014C.unk_00 : 999; - sp0[1] = sWonderCardData->unk_014C.unk_02 < 999 ? sWonderCardData->unk_014C.unk_02 : 999; - sp0[2] = sWonderCardData->unk_014C.unk_04 < 999 ? sWonderCardData->unk_014C.unk_04 : 999; - for (i = 0; i < 8; i++) - { - memset(sWonderCardData->unk_02DC[i].unk_42, EOS, 4); - memset(sWonderCardData->unk_02DC[i].unk_01, EOS, 41); - } - for (i = 0, r6 = 0; i < 40; i++) - { - if (sWonderCardData->unk_0000.unk_122[i] != 0xF7) - { - sWonderCardData->unk_02DC[sWonderCardData->unk_0175].unk_01[r6] = sWonderCardData->unk_0000.unk_122[i]; - r6++; - } - else - { - u8 r3 = sWonderCardData->unk_0000.unk_122[i + 1]; - if (r3 > 2) - { - i += 2; - } - else - { - ConvertIntToDecimalStringN(sWonderCardData->unk_02DC[sWonderCardData->unk_0175].unk_42, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3); - sWonderCardData->unk_02DC[sWonderCardData->unk_0175].unk_00 = sWonderCardData->unk_0000.unk_122[i + 2]; - sWonderCardData->unk_0175++; - if (sWonderCardData->unk_0175 > 7) - break; - r6 = 0; - i += 2; - } - } - } - } -} - -void sub_801C178(u8 whichWindow) -{ - s8 sp0C = 0; - s32 windowId = sWonderCardData->unk_0176[whichWindow]; - PutWindowTilemap(windowId); - FillWindowPixelBuffer(windowId, 0); - switch (whichWindow) - { - case 0: - { - s32 x; - AddTextPrinterParameterized3(windowId, 3, 0, 1, sTextColorTable[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_018B); - x = 160 - GetStringWidth(3, sWonderCardData->unk_01B4, GetFontAttribute(3, 2)); - if (x < 0) - x = 0; - AddTextPrinterParameterized3(windowId, 3, x, 17, sTextColorTable[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_01B4); - if (sWonderCardData->unk_0000.unk_04 != 0) - { - AddTextPrinterParameterized3(windowId, 1, 166, 17, sTextColorTable[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_01DD); - } - break; - } - case 1: - for (; sp0C < 4; sp0C++) - { - AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, sTextColorTable[sWonderCardData->unk_0170->textPal2], 0, sWonderCardData->unk_01E4[sp0C]); - } - break; - case 2: - AddTextPrinterParameterized3(windowId, 3, 0, gUnknown_082F0E18[sWonderCardData->unk_0000.unk_08_0], sTextColorTable[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_0288); - if (sWonderCardData->unk_0000.unk_08_0 != 2) - { - AddTextPrinterParameterized3(windowId, 3, 0, 16 + gUnknown_082F0E18[sWonderCardData->unk_0000.unk_08_0], sTextColorTable[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02B1); - } - else - { - s32 x = 0; - s32 y = gUnknown_082F0E18[sWonderCardData->unk_0000.unk_08_0] + 16; - s32 spacing = GetFontAttribute(3, 2); - for (; sp0C < sWonderCardData->unk_0175; sp0C++) - { - AddTextPrinterParameterized3(windowId, 3, x, y, sTextColorTable[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02DC[sp0C].unk_01); - if (sWonderCardData->unk_02DC[sp0C].unk_42[0] != EOS) - { - x += GetStringWidth(3, sWonderCardData->unk_02DC[sp0C].unk_01, spacing); - AddTextPrinterParameterized3(windowId, 3, x, y, sTextColorTable[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02DC[sp0C].unk_42); - x += GetStringWidth(3, sWonderCardData->unk_02DC[sp0C].unk_42, spacing) + sWonderCardData->unk_02DC[sp0C].unk_00; - } - } - } - break; - } - CopyWindowToVram(windowId, 3); -} - -void sub_801C4C0(void) -{ - u8 r7 = 0; - sWonderCardData->unk_017C = 0xFF; - if (sWonderCardData->unk_014C.unk_06 != SPECIES_NONE) - { - sWonderCardData->unk_017C = CreateMonIconNoPersonality(GetIconSpeciesNoPersonality(sWonderCardData->unk_014C.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0); - gSprites[sWonderCardData->unk_017C].oam.priority = 2; - } - if (sWonderCardData->unk_0000.unk_09 != 0 && sWonderCardData->unk_0000.unk_08_0 == 1) - { - LoadCompressedSpriteSheetUsingHeap(&gUnknown_082F1D00); - LoadSpritePalette(&gUnknown_082F1D08[sWonderCardData->unk_0170->textPal4]); - for (; r7 < sWonderCardData->unk_0000.unk_09; r7++) - { - sWonderCardData->unk_017D[r7][0] = 0xFF; - sWonderCardData->unk_017D[r7][1] = 0xFF; - sWonderCardData->unk_017D[r7][0] = CreateSprite(&gUnknown_082F1D48, 0xd8 - 32 * r7, 0x90, 8); - if (sWonderCardData->unk_014C.unk_08[0][r7] != 0) - { - sWonderCardData->unk_017D[r7][1] = CreateMonIconNoPersonality(GetIconSpeciesNoPersonality(sWonderCardData->unk_014C.unk_08[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0); - } - } - } -} - -void sub_801C61C(void) -{ - u8 r6 = 0; - if (sWonderCardData->unk_017C != 0xFF) - FreeAndDestroyMonIconSprite(&gSprites[sWonderCardData->unk_017C]); - if (sWonderCardData->unk_0000.unk_09 != 0 && sWonderCardData->unk_0000.unk_08_0 == 1) - { - for (; r6 < sWonderCardData->unk_0000.unk_09; r6++) - { - if (sWonderCardData->unk_017D[r6][0] != 0xFF) - { - DestroySprite(&gSprites[sWonderCardData->unk_017D[r6][0]]); - } - if (sWonderCardData->unk_017D[r6][1] != 0xFF) - { - FreeAndDestroyMonIconSprite(&gSprites[sWonderCardData->unk_017D[r6][1]]); - } - } - FreeSpriteTilesByTag(0x8000); - FreeSpritePaletteByTag(0x8000); - } -} - -struct UnkStruct_203F3CC -{ - /*0000*/ struct WonderNews unk_0000; - /*01bc*/ const struct UnkStruct_8467FB8 * unk_01BC; - /*01c0*/ u8 unk_01C0_0:1; - u8 unk_01C0_1:7; - /*01c1*/ u8 unk_01C1; - /*01c2*/ u8 unk_01C2_0:1; - u8 unk_01C2_1:7; - /*01c3*/ u8 unk_01C3_0:1; - u8 unk_01C3_1:7; - /*01c4*/ u16 unk_01C4; - /*01c6*/ u16 unk_01C6; - /*01c8*/ u16 unk_01C8[2]; - /*01cc*/ u8 filler_01CC[2]; - /*01ce*/ u8 unk_01CE[41]; - /*01f7*/ u8 unk_01F7[10][41]; - /*0394*/ struct ScrollArrowsTemplate unk_0394; - /*03a4*/ u8 buffer_03A4[0x1000]; -}; - -EWRAM_DATA struct UnkStruct_203F3CC * sWonderNewsData = NULL; - -void sub_801CDCC(void); -void sub_801CE7C(void); -void sub_801CFA4(void); - -const u8 gUnknown_082F1DE0[][3] = { - {0, 2, 3}, - {0, 1, 2} -}; -const struct WindowTemplate gUnknown_082F1DE8[] = { - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 0, - .width = 28, - .height = 3, - .paletteNum = 2, - .baseBlock = 0x2AC - }, { - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 3, - .width = 28, - .height = 20, - .paletteNum = 2, - .baseBlock = 0x07C - } -}; -const struct ScrollArrowsTemplate gUnknown_082F1DF8 = { - 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98, - 0x0000, 0x0002, 0x1000, 0x1000, 0x0 -}; -const u16 gWonderNewsPal1[] = INCBIN_U16("graphics/wonder_transfers/wonder_news_1.gbapal"); -const u16 gWonderNewsPal7[] = INCBIN_U16("graphics/wonder_transfers/wonder_news_7.gbapal"); -const u16 gWonderNewsPal8[] = INCBIN_U16("graphics/wonder_transfers/wonder_news_8.gbapal"); -const u32 gWonderNewsGfx1[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_1.4bpp.lz"); -const u32 gWonderNewsTilemap1[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_1.bin.lz"); -const u32 gWonderNewsGfx2[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_2.4bpp.lz"); -const u32 gWonderNewsTilemap2[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_2.bin.lz"); -const u32 gWonderNewsGfx3[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_3.4bpp.lz"); -const u32 gWonderNewsTilemap3[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_3.bin.lz"); -const u32 gWonderNewsGfx7[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_7.4bpp.lz"); -const u32 gWonderNewsTilemap7[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_7.bin.lz"); -const u32 gWonderNewsGfx8[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_8.4bpp.lz"); -const u32 gWonderNewsTilemap8[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_8.bin.lz"); - -const struct UnkStruct_8467FB8 gUnknown_082F24C8[] = { - {1, 0, 0, 0, gWonderNewsGfx1, gWonderNewsTilemap1, gWonderNewsPal1}, - {1, 0, 0, 0, gWonderNewsGfx2, gWonderNewsTilemap2, gWonderCardBgPal2}, - {1, 0, 0, 0, gWonderNewsGfx3, gWonderNewsTilemap3, gWonderCardBgPal3}, - {1, 0, 0, 0, gWonderNewsGfx3, gWonderNewsTilemap3, gWonderCardBgPal4}, - {1, 0, 0, 0, gWonderNewsGfx3, gWonderNewsTilemap3, gWonderCardBgPal5}, - {1, 0, 0, 0, gWonderNewsGfx3, gWonderNewsTilemap3, gWonderCardBgPal6}, - {1, 0, 0, 0, gWonderNewsGfx7, gWonderNewsTilemap7, gWonderNewsPal7}, - {1, 0, 0, 0, gWonderNewsGfx8, gWonderNewsTilemap8, gWonderNewsPal8} -}; - -bool32 InitWonderNewsResources(const struct WonderNews * a0) -{ - if (a0 == NULL) - return FALSE; - sWonderNewsData = AllocZeroed(sizeof(struct UnkStruct_203F3CC)); - if (sWonderNewsData == NULL) - return FALSE; - sWonderNewsData->unk_0000 = *a0; - if (sWonderNewsData->unk_0000.unk_03 >= ARRAY_COUNT(gUnknown_082F24C8)) - sWonderNewsData->unk_0000.unk_03 = 0; - sWonderNewsData->unk_01BC = &gUnknown_082F24C8[sWonderNewsData->unk_0000.unk_03]; - sWonderNewsData->unk_01C1 = 0xFF; - return TRUE; -} - -void DestroyWonderNewsResources(void) -{ - if (sWonderNewsData != NULL) - { - *sWonderNewsData = (struct UnkStruct_203F3CC){}; - Free(sWonderNewsData); - sWonderNewsData = NULL; - } -} - -s32 FadeToWonderNewsMenu(void) -{ - if (sWonderNewsData == NULL) - return -1; - - switch (sWonderNewsData->unk_01C0_1) - { - case 0: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - break; - case 1: - if (UpdatePaletteFade()) - return 0; - ChangeBgY(0, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgY(3, 0, 0); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, DISPLAY_WIDTH)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(26, 152)); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ); - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - break; - case 2: - FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); - FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); - FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); - FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 20); - CopyBgTilemapBufferToVram(0); - CopyBgTilemapBufferToVram(1); - CopyBgTilemapBufferToVram(2); - CopyBgTilemapBufferToVram(3); - DecompressAndCopyTileDataToVram(3, sWonderNewsData->unk_01BC->tiles, 0, 8, 0); - sWonderNewsData->unk_01C8[0] = AddWindow(&gUnknown_082F1DE8[0]); - sWonderNewsData->unk_01C8[1] = AddWindow(&gUnknown_082F1DE8[1]); - break; - case 3: - if (FreeTempTileDataBuffersIfPossible()) - return 0; - LoadPalette(GetTextWindowPalette(1), 0x20, 0x20); - gPaletteFade.bufferTransferDisabled = TRUE; - LoadPalette(sWonderNewsData->unk_01BC->pal, 0x10, 0x20); - LZ77UnCompWram(sWonderNewsData->unk_01BC->map, sWonderNewsData->buffer_03A4); - CopyRectToBgTilemapBufferRect(1, sWonderNewsData->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0); - CopyRectToBgTilemapBufferRect(3, sWonderNewsData->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0); - CopyBgTilemapBufferToVram(1); - CopyBgTilemapBufferToVram(3); - break; - case 4: - sub_801CDCC(); - break; - case 5: - sub_801CE7C(); - CopyBgTilemapBufferToVram(0); - CopyBgTilemapBufferToVram(2); - break; - case 6: - ShowBg(1); - ShowBg(2); - ShowBg(3); - gPaletteFade.bufferTransferDisabled = FALSE; - sWonderNewsData->unk_01C1 = AddScrollIndicatorArrowPair(&sWonderNewsData->unk_0394, &sWonderNewsData->unk_01C6); - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); - UpdatePaletteFade(); - break; - default: - if (UpdatePaletteFade()) - return 0; - sWonderNewsData->unk_01C0_1 = 0; - return 1; - } - - ++sWonderNewsData->unk_01C0_1; - return 0; -} - -s32 FadeOutFromWonderNews(bool32 flag) -{ - if (sWonderNewsData == NULL) - return -1; - switch (sWonderNewsData->unk_01C0_1) - { - case 0: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - break; - case 1: - if (UpdatePaletteFade()) - return 0; - ChangeBgY(2, 0, 0); - SetGpuReg(REG_OFFSET_WIN0H, 0); - SetGpuReg(REG_OFFSET_WIN0V, 0); - SetGpuReg(REG_OFFSET_WININ, 0); - SetGpuReg(REG_OFFSET_WINOUT, 0); - ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - break; - case 2: - FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); - FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); - FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 24); - FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 24); - CopyBgTilemapBufferToVram(0); - CopyBgTilemapBufferToVram(1); - CopyBgTilemapBufferToVram(2); - CopyBgTilemapBufferToVram(3); - break; - case 3: - HideBg(1); - HideBg(2); - RemoveWindow(sWonderNewsData->unk_01C8[1]); - RemoveWindow(sWonderNewsData->unk_01C8[0]); - break; - case 4: - ChangeBgY(2, 0, 0); - ChangeBgY(3, 0, 0); - if (sWonderNewsData->unk_01C1 != 0xFF) - { - RemoveScrollIndicatorArrowPair(sWonderNewsData->unk_01C1); - sWonderNewsData->unk_01C1 = 0xFF; - } - break; - case 5: - PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag); - MG_DrawCheckerboardPattern(3); - CopyBgTilemapBufferToVram(0); - CopyBgTilemapBufferToVram(3); - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); - break; - default: - if (UpdatePaletteFade()) - return 0; - sWonderNewsData->unk_01C0_1 = 0; - return 1; - } - ++sWonderNewsData->unk_01C0_1; - return 0; -} - -void MENews_RemoveScrollIndicatorArrowPair(void) -{ - if (!sWonderNewsData->unk_01C0_0 && sWonderNewsData->unk_01C1 != 0xFF) - { - RemoveScrollIndicatorArrowPair(sWonderNewsData->unk_01C1); - sWonderNewsData->unk_01C1 = 0xFF; - sWonderNewsData->unk_01C0_0 = TRUE; - } -} - - -void MENews_AddScrollIndicatorArrowPair(void) -{ - if (sWonderNewsData->unk_01C0_0) - { - sWonderNewsData->unk_01C1 = AddScrollIndicatorArrowPair(&sWonderNewsData->unk_0394, &sWonderNewsData->unk_01C6); - sWonderNewsData->unk_01C0_0 = FALSE; - } -} - -u32 MENews_GetInput(u16 input) -{ - if (sWonderNewsData->unk_01C2_0) - { - sub_801CFA4(); - return 0xFF; - } - switch (input) - { - case A_BUTTON: - return 0; - case B_BUTTON: - return 1; - case DPAD_UP: - if (sWonderNewsData->unk_01C6 == 0) - return 0xFF; - if (sWonderNewsData->unk_01C0_0) - return 0xFF; - sWonderNewsData->unk_01C3_0 = FALSE; - break; - case DPAD_DOWN: - if (sWonderNewsData->unk_01C6 == sWonderNewsData->unk_01C4) - return 0xFF; - if (sWonderNewsData->unk_01C0_0) - return 0xFF; - sWonderNewsData->unk_01C3_0 = TRUE; - break; - default: - return 0xFF; - } - sWonderNewsData->unk_01C2_0 = TRUE; - sWonderNewsData->unk_01C2_1 = 2; - sWonderNewsData->unk_01C3_1 = 0; - if (sWonderNewsData->unk_01C3_0 == FALSE) - return 2; - else - return 3; -} - -void sub_801CDCC(void) -{ - u8 i = 0; - memcpy(sWonderNewsData->unk_01CE, sWonderNewsData->unk_0000.unk_04, 40); - sWonderNewsData->unk_01CE[40] = EOS; - for (; i < 10; ++i) - { - memcpy(sWonderNewsData->unk_01F7[i], sWonderNewsData->unk_0000.unk_2C[i], 40); - sWonderNewsData->unk_01F7[i][40] = EOS; - if (i > 7 && sWonderNewsData->unk_01F7[i][0] != EOS) - ++sWonderNewsData->unk_01C4; - } - sWonderNewsData->unk_0394 = gUnknown_082F1DF8; - sWonderNewsData->unk_0394.fullyDownThreshold = sWonderNewsData->unk_01C4; -} - -void sub_801CE7C(void) -{ - u8 i = 0; - s32 x; - PutWindowTilemap(sWonderNewsData->unk_01C8[0]); - PutWindowTilemap(sWonderNewsData->unk_01C8[1]); - FillWindowPixelBuffer(sWonderNewsData->unk_01C8[0], 0); - FillWindowPixelBuffer(sWonderNewsData->unk_01C8[1], 0); - x = (0xe0 - GetStringWidth(3, sWonderNewsData->unk_01CE, GetFontAttribute(3, 2))) / 2; - if (x < 0) - x = 0; - AddTextPrinterParameterized3(sWonderNewsData->unk_01C8[0], 3, x, 6, gUnknown_082F1DE0[sWonderNewsData->unk_01BC->textPal1], 0, sWonderNewsData->unk_01CE); - for (; i < 10; ++i) - { - AddTextPrinterParameterized3(sWonderNewsData->unk_01C8[1], 3, 0, 16 * i + 2, gUnknown_082F1DE0[sWonderNewsData->unk_01BC->textPal2], 0, sWonderNewsData->unk_01F7[i]); - } - CopyWindowToVram(sWonderNewsData->unk_01C8[0], 3); - CopyWindowToVram(sWonderNewsData->unk_01C8[1], 3); -} - -void sub_801CFA4(void) -{ - u16 r4 = sWonderNewsData->unk_01C2_1; - r4 <<= 8; - if (sWonderNewsData->unk_01C3_0) - { - ChangeBgY(2, r4, 1); - ChangeBgY(3, r4, 1); - } - else - { - ChangeBgY(2, r4, 2); - ChangeBgY(3, r4, 2); - } - sWonderNewsData->unk_01C3_1 += sWonderNewsData->unk_01C2_1; - if (sWonderNewsData->unk_01C3_1 > 15) - { - if (sWonderNewsData->unk_01C3_0) - ++sWonderNewsData->unk_01C6; - else - --sWonderNewsData->unk_01C6; - sWonderNewsData->unk_01C2_0 = FALSE; - sWonderNewsData->unk_01C3_1 = 0; - } -} diff --git a/src/mevent_client.c b/src/mevent_client.c deleted file mode 100644 index 9a62bf18ed..0000000000 --- a/src/mevent_client.c +++ /dev/null @@ -1,291 +0,0 @@ -#include "global.h" -#include "malloc.h" -#include "decompress.h" -#include "overworld.h" -#include "script.h" -#include "battle_tower.h" -#include "mevent.h" -#include "mystery_event_script.h" -#include "mevent_client.h" - -EWRAM_DATA struct mevent_client * s_mevent_client_ptr = NULL; - -static void mevent_client_init(struct mevent_client *, u32, u32); -static u32 mevent_client_exec(struct mevent_client *); -static void mevent_client_free_resources(struct mevent_client *); - -extern const struct mevent_client_cmd gUnknown_082F2598[]; - -void mevent_client_do_init(u32 arg) -{ - s_mevent_client_ptr = AllocZeroed(sizeof(struct mevent_client)); - mevent_client_init(s_mevent_client_ptr, 1, 0); - s_mevent_client_ptr->unk_4C = arg; -} - -u32 mevent_client_do_exec(u16 * a0) -{ - u32 result; - if (s_mevent_client_ptr == NULL) - return 6; - result = mevent_client_exec(s_mevent_client_ptr); - if (result == 6) - { - *a0 = s_mevent_client_ptr->param; - mevent_client_free_resources(s_mevent_client_ptr); - Free(s_mevent_client_ptr); - s_mevent_client_ptr = NULL; - } - return result; -} - -void mevent_client_inc_flag(void) -{ - s_mevent_client_ptr->flag++; -} - -void * mevent_client_get_buffer(void) -{ - return s_mevent_client_ptr->buffer; -} - -void mevent_client_set_param(u32 a0) -{ - s_mevent_client_ptr->param = a0; -} - -static void mevent_client_init(struct mevent_client * svr, u32 sendPlayerNo, u32 recvPlayerNo) -{ - svr->unk_00 = 0; - svr->mainseqno = 0; - svr->flag = 0; - svr->sendBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->buffer = AllocZeroed(0x40); - mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); -} - -static void mevent_client_free_resources(struct mevent_client * svr) -{ - Free(svr->sendBuffer); - Free(svr->recvBuffer); - Free(svr->cmdBuffer); - Free(svr->buffer); -} - -static void mevent_client_jmp_buffer(struct mevent_client * svr) -{ - memcpy(svr->cmdBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); - svr->cmdidx = 0; -} - -static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 word) -{ - CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE); - *(u32 *)svr->sendBuffer = word; - mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32)); -} - -static u32 mainseq_0(struct mevent_client * svr) -{ - // init - memcpy(svr->cmdBuffer, gUnknown_082F2598, ME_SEND_BUF_SIZE); - svr->cmdidx = 0; - svr->mainseqno = 4; - svr->flag = 0; - return 0; -} - -static u32 mainseq_1(struct mevent_client * svr) -{ - // done - return 6; -} - - -static u32 mainseq_2(struct mevent_client * svr) -{ - // do recv - if (mevent_srv_sub_recv(&svr->manager)) - { - svr->mainseqno = 4; - svr->flag = 0; - } - return 1; -} - -static u32 mainseq_3(struct mevent_client * svr) -{ - // do send - if (mevent_srv_sub_send(&svr->manager)) - { - svr->mainseqno = 4; - svr->flag = 0; - } - return 1; -} - -static u32 mainseq_4(struct mevent_client * svr) -{ - // process command - struct mevent_client_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; - ++svr->cmdidx; - switch (cmd->instr) - { - case 0: - break; - case 1: - svr->param = cmd->parameter; - svr->mainseqno = 1; - svr->flag = 0; - break; - case 2: - mevent_srv_sub_init_recv(&svr->manager, cmd->parameter, svr->recvBuffer); - svr->mainseqno = 2; - svr->flag = 0; - break; - case 3: - svr->mainseqno = 3; - svr->flag = 0; - break; - case 20: - mevent_srv_sub_init_send(&svr->manager, 0x14, svr->sendBuffer, 0); - svr->mainseqno = 3; - svr->flag = 0; - break; - case 19: - mevent_client_send_word(svr, 0x12, GetGameStat(cmd->parameter)); - svr->mainseqno = 3; - svr->flag = 0; - break; - case 6: - if (svr->param == 0) - mevent_client_jmp_buffer(svr); - break; - case 7: - if (svr->param == 1) - mevent_client_jmp_buffer(svr); - break; - case 4: - mevent_client_jmp_buffer(svr); - break; - case 5: - memcpy(svr->buffer, svr->recvBuffer, 0x40); - svr->mainseqno = 5; - svr->flag = 0; - return 2; - case 11: - memcpy(svr->buffer, svr->recvBuffer, 0x40); - svr->mainseqno = 5; - svr->flag = 0; - return 3; - case 12: - memcpy(svr->buffer, svr->recvBuffer, 0x40); - svr->mainseqno = 5; - svr->flag = 0; - return 5; - case 13: - svr->mainseqno = 5; - svr->flag = 0; - return 4; - case 8: - sub_801B580(svr->sendBuffer, svr->unk_4C); - mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MEventStruct_Unk1442CC)); - break; - case 14: - mevent_client_send_word(svr, 0x13, svr->param); - break; - case 10: - sub_801B21C(svr->recvBuffer); - break; - case 9: - if (!sub_801B1A4(svr->recvBuffer)) - { - sub_801B078(svr->recvBuffer); - mevent_client_send_word(svr, 0x13, 0); - } - else - mevent_client_send_word(svr, 0x13, 1); - break; - case 15: - svr->mainseqno = 6; - svr->flag = 0; - break; - case 16: - sub_801B508(svr->recvBuffer); - break; - case 17: - InitRamScript_NoObjectEvent(svr->recvBuffer, 1000); - break; - case 18: - memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, svr->recvBuffer, 0xbc); - ValidateEReaderTrainer(); - break; - case 21: - memcpy(gDecompressionBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); - svr->mainseqno = 7; - svr->flag = 0; - break; - } - - return 1; -} - -static u32 mainseq_5(struct mevent_client * svr) -{ - // wait flag - if (svr->flag) - { - svr->mainseqno = 4; - svr->flag = 0; - } - return 1; -} - -static u32 mainseq_6(struct mevent_client * svr) -{ - // ??? - switch (svr->flag) - { - case 0: - sub_8153870(svr->recvBuffer); - ++svr->flag; - break; - case 1: - if (!sub_8153884(&svr->param)) - { - svr->mainseqno = 4; - svr->flag = 0; - } - break; - } - return 1; -} - -static u32 mainseq_7(struct mevent_client * svr) -{ - // exec arbitrary code - u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; - if (func(&svr->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) - { - svr->mainseqno = 4; - svr->flag = 0; - } - return 1; -} - -static u32 mevent_client_exec(struct mevent_client * svr) -{ - u32 (*funcs[])(struct mevent_client *) = { - mainseq_0, - mainseq_1, - mainseq_2, - mainseq_3, - mainseq_4, - mainseq_5, - mainseq_6, - mainseq_7 - }; - return funcs[svr->mainseqno](svr); -} diff --git a/src/mevent_news.c b/src/mevent_news.c deleted file mode 100644 index 9e78cf406b..0000000000 --- a/src/mevent_news.c +++ /dev/null @@ -1,148 +0,0 @@ -#include "global.h" -#include "mevent.h" -#include "random.h" -#include "event_data.h" -#include "mevent_news.h" - -static u32 sub_801DCAC(struct MysteryEventStruct *); -static void sub_801DD10(struct MysteryEventStruct *); -static u32 sub_801DD44(struct MysteryEventStruct *); -static void sub_801DCD8(struct MysteryEventStruct *); -static void sub_801DCCC(struct MysteryEventStruct *); - -void GenerateRandomNews(u32 a0) -{ - struct MysteryEventStruct *r5 = sub_801B044(); - - r5->unk_0_0 = a0; - switch (a0) - { - case 0: - break; - case 1: - case 2: - r5->unk_1 = (Random() % 15) + 16; - break; - case 3: - r5->unk_1 = (Random() % 15) + 1; - break; - } -} - -void sub_801DBC0(void) -{ - struct MysteryEventStruct *r5 = sub_801B044(); - - r5->unk_0_0 = 0; - r5->unk_0_2 = 0; - r5->unk_0_5 = 0; - r5->unk_1 = 0; - VarSet(VAR_0x402E, 0); -} - -void sub_801DBDC(void) -{ - u16 *r4 = GetVarPointer(VAR_0x402E); - struct MysteryEventStruct *r2 = sub_801B044(); - struct MysteryEventStruct r0 = *r2; - - if ((u8)r0.unk_0_5 > 4 && ++(*r4) > 0x1f3) - { - r2->unk_0_5 = 0; - *r4 = 0; - } -} - -// Unused -u16 sub_801DC20(void) -{ - u16 *r6 = &gSpecialVar_Result; - struct MysteryEventStruct *r4 = sub_801B044(); - u16 r5; - - if (!IsMysteryEventEnabled() || !ValidateReceivedWonderNews()) - return 0; - - r5 = sub_801DD44(r4); - - switch (r5) - { - case 0: - break; - case 1: - *r6 = sub_801DCAC(r4); - break; - case 2: - *r6 = sub_801DCAC(r4); - break; - case 3: - break; - case 4: - *r6 = sub_801DCAC(r4); - sub_801DCD8(r4); - break; - case 5: - *r6 = sub_801DCAC(r4); - sub_801DCCC(r4); - break; - case 6: - break; - } - - return r5; -} - -static u32 sub_801DCAC(struct MysteryEventStruct *a0) -{ - u32 r4; - - a0->unk_0_0 = 0; - r4 = a0->unk_1 + 0x84; - a0->unk_1 = 0; - sub_801DD10(a0); - return r4; -} - -static void sub_801DCCC(struct MysteryEventStruct *a0) -{ - a0->unk_0_2 = 0; -} - -static void sub_801DCD8(struct MysteryEventStruct *a0) -{ - a0->unk_0_2++; - if ((u8)a0->unk_0_2 > 4) - a0->unk_0_2 = 4; -} - -static void sub_801DD10(struct MysteryEventStruct *a0) -{ - a0->unk_0_5++; - if ((u8)a0->unk_0_5 > 5) - a0->unk_0_5 = 5; -} - -static u32 sub_801DD44(struct MysteryEventStruct *a0) -{ - struct MysteryEventStruct r0; - if ((u8)a0->unk_0_5 == 5) - return 6; - - r0 = *a0; - switch (r0.unk_0_0) - { - case 0: - return 3; - case 1: - return 1; - case 2: - return 2; - case 3: - if ((u8)r0.unk_0_2 < 3) - return 4; - return 5; - default: - AGB_ASSERT(0); - return 0; - } -} diff --git a/src/mevent_scripts.c b/src/mevent_scripts.c deleted file mode 100644 index 41a5ddd51a..0000000000 --- a/src/mevent_scripts.c +++ /dev/null @@ -1,191 +0,0 @@ -#include "global.h" -#include "mevent_client.h" -#include "mevent_server.h" - -const u8 gText_CanceledReadingCard[] = _("Canceled reading\nthe Card."); - - -const struct mevent_client_cmd gUnknown_082F2598[] = { - {.instr = 2, .parameter = 16}, - {.instr = 4, .parameter = 0} -}; - -const struct mevent_client_cmd gUnknown_082F25A8[] = { - {.instr = 8, .parameter = 0}, - {.instr = 3, .parameter = 0}, - {.instr = 2, .parameter = 16}, - {.instr = 4, .parameter = 0} -}; - -const struct mevent_client_cmd gUnknown_082F25C8[] = { - {.instr = 20, .parameter = 0}, - {.instr = 1, .parameter = 10} -}; - -const struct mevent_client_cmd gUnknown_082F25D8[] = { - {.instr = 20, .parameter = 0}, - {.instr = 1, .parameter = 11} -}; - -const struct mevent_client_cmd gUnknown_082F25E8[] = { - {.instr = 20, .parameter = 0}, - {.instr = 1, .parameter = 0} -}; - -const struct mevent_client_cmd gUnknown_082F25F8[] = { - {.instr = 2, .parameter = 22}, - {.instr = 10, .parameter = 0}, - {.instr = 2, .parameter = 25}, - {.instr = 17, .parameter = 0}, - {.instr = 20, .parameter = 0}, - {.instr = 1, .parameter = 2} -}; - -const struct mevent_client_cmd gUnknown_082F2628[] = { - {.instr = 2, .parameter = 23}, - {.instr = 9, .parameter = 0}, - {.instr = 3, .parameter = 0}, - {.instr = 2, .parameter = 16}, - {.instr = 4, .parameter = 0} -}; - -const struct mevent_client_cmd gUnknown_082F2650[] = { - {.instr = 20, .parameter = 0}, - {.instr = 1, .parameter = 7} -}; - -const struct mevent_client_cmd gUnknown_082F2660[] = { - {.instr = 20, .parameter = 0}, - {.instr = 1, .parameter = 3} -}; - -const struct mevent_client_cmd gUnknown_082F2670[] = { - {.instr = 13, .parameter = 0}, - {.instr = 14, .parameter = 0}, - {.instr = 3, .parameter = 0}, - {.instr = 2, .parameter = 16}, - {.instr = 4, .parameter = 0} -}; - -const struct mevent_client_cmd gUnknown_082F2698[] = { - {.instr = 20, .parameter = 0}, - {.instr = 1, .parameter = 9} -}; - -const struct mevent_client_cmd gUnknown_082F26A8[] = { - {.instr = 20, .parameter = 0}, - {.instr = 1, .parameter = 5} -}; - -const struct mevent_client_cmd gUnknown_082F26B8[] = { - {.instr = 2, .parameter = 21}, - {.instr = 12, .parameter = 0}, - {.instr = 20, .parameter = 0}, - {.instr = 1, .parameter = 14}, - {.instr = 2, .parameter = 21}, - {.instr = 12, .parameter = 0}, - {.instr = 20, .parameter = 0}, - {.instr = 1, .parameter = 13} -}; - -const struct mevent_cmd gUnknown_082F26F8[] = { - {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F25C8}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x14, .parameter = NULL}, - {.instr = 0, .flag = 0x0a, .parameter = NULL}, - {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F25D8}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x14, .parameter = NULL}, - {.instr = 0, .flag = 0x0b, .parameter = NULL}, - {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F2698}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x14, .parameter = NULL}, - {.instr = 0, .flag = 0x09, .parameter = NULL} -}; - -const struct mevent_cmd gUnknown_082F2788[] = { - {.instr = 18, .flag = 0x20, .parameter = gUnknown_082F26B8}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 20, .flag = 0x1b, .parameter = gText_CanceledReadingCard}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x14, .parameter = NULL}, - {.instr = 0, .flag = 0x09, .parameter = NULL} -}; - -const struct mevent_cmd gUnknown_082F27D0[] = { - {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F2650}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x14, .parameter = NULL}, - {.instr = 0, .flag = 0x07, .parameter = NULL} -}; - -const struct mevent_cmd gUnknown_082F2800[] = { - {.instr = 18, .flag = 0x28, .parameter = gUnknown_082F2628}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 14, .flag = 0x00, .parameter = NULL}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x13, .parameter = NULL}, - {.instr = 8, .flag = 0x00, .parameter = NULL}, - {.instr = 4, .flag = 0x01, .parameter = gUnknown_082F27D0}, - {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F2660}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x14, .parameter = NULL}, - {.instr = 0, .flag = 0x03, .parameter = NULL} -}; - -const struct mevent_cmd gUnknown_082F2884[] = { - {.instr = 18, .flag = 0x30, .parameter = gUnknown_082F25F8}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 13, .flag = 0x00, .parameter = NULL}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 15, .flag = 0x00, .parameter = NULL}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x14, .parameter = NULL}, - {.instr = 0, .flag = 0x02, .parameter = NULL} -}; - -const struct mevent_cmd gUnknown_082F28E4[] = { - {.instr = 18, .flag = 0x28, .parameter = gUnknown_082F2670}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x13, .parameter = NULL}, - {.instr = 8, .flag = 0x00, .parameter = NULL}, - {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F2884}, - {.instr = 3, .flag = 0x00, .parameter = gUnknown_082F2788} -}; - -const struct mevent_cmd gUnknown_082F292C[] = { - {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F26A8}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x14, .parameter = NULL}, - {.instr = 0, .flag = 0x05, .parameter = NULL}, - {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F25E8}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x14, .parameter = NULL}, - {.instr = 0, .flag = 0x00, .parameter = NULL} -}; - -const struct mevent_cmd s_mevent_wonder_news[] = { - {.instr = 27, .flag = 0x00, .parameter = NULL}, - {.instr = 18, .flag = 0x20, .parameter = gUnknown_082F25A8}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x11, .parameter = NULL}, - {.instr = 5, .flag = 0x00, .parameter = NULL}, - {.instr = 30, .flag = 0x00, .parameter = NULL}, - {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F26F8}, - {.instr = 3, .flag = 0x00, .parameter = gUnknown_082F2800} -}; - -const struct mevent_cmd s_mevent_wonder_card[] = { - {.instr = 26, .flag = 0x00, .parameter = NULL}, - {.instr = 28, .flag = 0x00, .parameter = NULL}, - {.instr = 18, .flag = 0x20, .parameter = gUnknown_082F25A8}, - {.instr = 1, .flag = 0x00, .parameter = NULL}, - {.instr = 2, .flag = 0x11, .parameter = NULL}, - {.instr = 5, .flag = 0x00, .parameter = NULL}, - {.instr = 6, .flag = 0x00, .parameter = NULL}, - {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F26F8}, - {.instr = 7, .flag = 0x00, .parameter = NULL}, - {.instr = 4, .flag = 0x02, .parameter = gUnknown_082F28E4}, - {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F2884}, - {.instr = 3, .flag = 0x00, .parameter = gUnknown_082F292C} -}; diff --git a/src/mevent_server.c b/src/mevent_server.c deleted file mode 100644 index 2e7b3d89ad..0000000000 --- a/src/mevent_server.c +++ /dev/null @@ -1,295 +0,0 @@ -#include "global.h" -#include "malloc.h" -#include "script.h" -#include "mevent.h" -#include "mevent_server.h" -#include "mevent_server_helpers.h" - -EWRAM_DATA struct mevent_srv_common * s_mevent_srv_common_ptr = NULL; - -static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32); -static void mevent_srv_free_resources(struct mevent_srv_common *); -static u32 mevent_srv_exec_common(struct mevent_srv_common *); - -extern const struct mevent_cmd s_mevent_wonder_news[]; -extern const struct mevent_cmd s_mevent_wonder_card[]; - -void mevent_srv_init_wnews(void) -{ - s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common)); - mevent_srv_init_common(s_mevent_srv_common_ptr, s_mevent_wonder_news, 0, 1); -} - -void mevent_srv_new_wcard(void) -{ - s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common)); - mevent_srv_init_common(s_mevent_srv_common_ptr, s_mevent_wonder_card, 0, 1); -} - -u32 mevent_srv_common_do_exec(u16 * a0) -{ - u32 result; - if (s_mevent_srv_common_ptr == NULL) - return 3; - result = mevent_srv_exec_common(s_mevent_srv_common_ptr); - if (result == 3) - { - *a0 = s_mevent_srv_common_ptr->param; - mevent_srv_free_resources(s_mevent_srv_common_ptr); - Free(s_mevent_srv_common_ptr); - s_mevent_srv_common_ptr = NULL; - } - return result; -} - -static void mevent_srv_init_common(struct mevent_srv_common * svr, const void * cmdBuffer, u32 sendPlayerNo, u32 recvPlayerNo) -{ - svr->unk_00 = 0; - svr->mainseqno = 0; - svr->wonder_card = AllocZeroed(sizeof(struct WonderCard)); - svr->wonder_news = AllocZeroed(sizeof(struct WonderNews)); - svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MEventStruct_Unk1442CC)); - svr->cmdBuffer = cmdBuffer; - svr->cmdidx = 0; - mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); -} - -static void mevent_srv_free_resources(struct mevent_srv_common * svr) -{ - Free(svr->wonder_card); - Free(svr->wonder_news); - Free(svr->recvBuffer); - Free(svr->mevent_unk1442cc); -} - -void mevent_srv_common_init_send(struct mevent_srv_common * svr, u32 ident, const void * src, u32 size) -{ - AGB_ASSERT(size <= ME_SEND_BUF_SIZE); - mevent_srv_sub_init_send(&svr->manager, ident, src, size); -} - -static const void * mevent_first_if_not_null_else_second(const void * a0, const void * a1) -{ - if (a0 != NULL) - return a0; - else - return a1; -} - -static u32 mevent_compare_pointers(const void * a0, const void * a1) -{ - if (a1 < a0) - return 0; - else if (a1 == a0) - return 1; - else - return 2; -} - -static u32 common_mainseq_0(struct mevent_srv_common * svr) -{ - // start - svr->mainseqno = 4; - return 0; -} - -static u32 common_mainseq_1(struct mevent_srv_common * svr) -{ - // done - return 3; -} - -static u32 common_mainseq_2(struct mevent_srv_common * svr) -{ - // do recv - if (mevent_srv_sub_recv(&svr->manager)) - svr->mainseqno = 4; - return 1; -} - -static u32 common_mainseq_3(struct mevent_srv_common * svr) -{ - // do send - if (mevent_srv_sub_send(&svr->manager)) - svr->mainseqno = 4; - return 1; -} - -static u32 common_mainseq_4(struct mevent_srv_common * svr) -{ - // process command - const struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; - const void * ptr; - svr->cmdidx++; - - switch (cmd->instr) - { - case 0: - // end - AGB_ASSERT(cmd->parameter == NULL); - svr->mainseqno = 1; - svr->param = cmd->flag; - break; - case 1: - // wait_send - svr->mainseqno = 3; - break; - case 2: - // receive - AGB_ASSERT(cmd->parameter == NULL); - mevent_srv_sub_init_recv(&svr->manager, cmd->flag, svr->recvBuffer); - svr->mainseqno = 2; - break; - case 3: - // jump - AGB_ASSERT(cmd->flag == FALSE); - svr->cmdidx = 0; - svr->cmdBuffer = cmd->parameter; - break; - case 5: - // get_1442CC - AGB_ASSERT(cmd->flag == FALSE); - AGB_ASSERT(cmd->parameter == NULL); - memcpy(svr->mevent_unk1442cc, svr->recvBuffer, sizeof(struct MEventStruct_Unk1442CC)); - break; - case 6: - // check_header__pass_false - AGB_ASSERT(cmd->flag == FALSE); - AGB_ASSERT(cmd->parameter == NULL); - svr->param = sub_801B6A0(svr->mevent_unk1442cc, FALSE); - break; - case 30: - // check_header__pass_true - AGB_ASSERT(cmd->flag == FALSE); - AGB_ASSERT(cmd->parameter == NULL); - svr->param = sub_801B6A0(svr->mevent_unk1442cc, TRUE); - break; - case 4: - // jump_if_eq - if (svr->param == cmd->flag) - { - svr->cmdidx = 0; - svr->cmdBuffer = cmd->parameter; - } - break; - case 7: - // check_crc - AGB_ASSERT(cmd->flag == FALSE); - ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->wonder_card); - svr->param = sub_801B6EC(ptr, svr->mevent_unk1442cc, ptr); - break; - case 8: - // read_word - AGB_ASSERT(cmd->flag == FALSE); - AGB_ASSERT(cmd->parameter == NULL); - svr->param = *(u32 *)svr->recvBuffer; - break; - case 9: - AGB_ASSERT(cmd->flag == FALSE); - ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord); - svr->param = sub_801B708(ptr, svr->mevent_unk1442cc, ptr); - break; - case 10: - AGB_ASSERT(cmd->parameter == NULL); - svr->param = MEventStruct_Unk1442CC_GetValueNFrom_unk_20(svr->mevent_unk1442cc, cmd->flag); - break; - case 11: - AGB_ASSERT(cmd->flag == FALSE); - svr->param = MEventStruct_Unk1442CC_CompareField_unk_16(svr->mevent_unk1442cc, cmd->parameter); - break; - case 12: - AGB_ASSERT(cmd->flag == FALSE); - svr->param = mevent_compare_pointers(cmd->parameter, *(void **)svr->recvBuffer); - break; - case 14: - AGB_ASSERT(cmd->flag == FALSE); - mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->wonder_news), sizeof(struct WonderNews)); - break; - case 13: - AGB_ASSERT(cmd->flag == FALSE); - mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->wonder_card), sizeof(struct WonderCard)); - break; - case 16: - AGB_ASSERT(cmd->flag == FALSE); - mevent_srv_common_init_send(svr, 0x18, mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord), 4); - break; - case 15: - if (cmd->parameter == NULL) - mevent_srv_common_init_send(svr, 0x19, svr->sendBuffer1, svr->sendBuffer1Size); - else - mevent_srv_common_init_send(svr, 0x19, cmd->parameter, cmd->flag); - break; - case 18: - if (cmd->parameter == NULL) - mevent_srv_common_init_send(svr, 0x10, svr->sendBuffer2, svr->sendBuffer2Size); - else - mevent_srv_common_init_send(svr, 0x10, cmd->parameter, cmd->flag); - break; - case 19: - AGB_ASSERT(cmd->flag == FALSE); - mevent_srv_common_init_send(svr, 0x1a, cmd->parameter, 188); - break; - case 20: - mevent_srv_common_init_send(svr, 0x15, cmd->parameter, cmd->flag); - break; - case 17: - mevent_srv_common_init_send(svr, 0x1c, cmd->parameter, cmd->flag); - break; - case 22: - AGB_ASSERT(cmd->flag == FALSE); - memcpy(svr->wonder_card, cmd->parameter, 332); - break; - case 23: - AGB_ASSERT(cmd->flag == FALSE); - memcpy(svr->wonder_news, cmd->parameter, 444); - break; - case 21: - AGB_ASSERT(cmd->flag == FALSE); - svr->sendWord = *(u32 *)cmd->parameter; - break; - case 24: - svr->sendBuffer1 = cmd->parameter; - svr->sendBuffer1Size = cmd->flag; - break; - case 25: - svr->sendBuffer2 = cmd->parameter; - svr->sendBuffer2Size = cmd->flag; - break; - case 26: - AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL); - memcpy(svr->wonder_card, GetSavedWonderCard(), 332); - WonderCard_ResetInternalReceivedFlag(svr->wonder_card); - break; - case 27: - AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL); - memcpy(svr->wonder_news, GetSavedWonderNews(), 444); - break; - case 28: - AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL); - svr->sendBuffer1 = GetSavedRamScriptIfValid(); - break; - case 29: - mevent_srv_common_init_send(svr, 0x1b, cmd->parameter, cmd->flag); - break; - } - - return 1; -} - -static u32 (*const func_tbl[])(struct mevent_srv_common *) = { - common_mainseq_0, - common_mainseq_1, - common_mainseq_2, - common_mainseq_3, - common_mainseq_4 -}; - -static u32 mevent_srv_exec_common(struct mevent_srv_common * svr) -{ - u32 response; - AGB_ASSERT(svr->mainseqno < ARRAY_COUNT(func_tbl)); - response = func_tbl[svr->mainseqno](svr); - AGB_ASSERT(svr->mainseqno < ARRAY_COUNT(func_tbl)); - return response; -} diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c deleted file mode 100644 index 616f394f71..0000000000 --- a/src/mevent_server_helpers.c +++ /dev/null @@ -1,211 +0,0 @@ -#include "global.h" -#include "malloc.h" -#include "decompress.h" -#include "util.h" -#include "link.h" -#include "link_rfu.h" -#include "overworld.h" -#include "script.h" -#include "battle_tower.h" -#include "mystery_event_script.h" -#include "mevent.h" -#include "mevent_server_helpers.h" - -static u32 mevent_receive_func(struct mevent_srv_sub *); -static u32 mevent_send_func(struct mevent_srv_sub *); - -u32 mevent_srv_sub_recv(struct mevent_srv_sub * svr) -{ - return svr->recvFunc(svr); -} - -u32 mevent_srv_sub_send(struct mevent_srv_sub * svr) -{ - return svr->sendFunc(svr); -} - -void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recvPlayerNo) -{ - svr->sendPlayerNo = sendPlayerNo; - svr->recvPlayerNo = recvPlayerNo; - svr->seqno = 0; - svr->sendCRC = 0; - svr->sendSize = 0; - svr->sendCounter = 0; - svr->recvCRC = 0; - svr->recvSize = 0; - svr->recvCounter = 0; - svr->sendBfr = NULL; - svr->recvBfr = NULL; - svr->sendFunc = mevent_send_func; - svr->recvFunc = mevent_receive_func; -} - -void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 ident, const void * src, u32 size) -{ - svr->seqno = 0; - svr->sendIdent = ident; - svr->sendCounter = 0; - svr->sendCRC = 0; - if (size != 0) - svr->sendSize = size; - else - svr->sendSize = ME_SEND_BUF_SIZE; - svr->sendBfr = src; -} - -void mevent_srv_sub_init_recv(struct mevent_srv_sub * svr, u32 ident, void * dest) -{ - svr->seqno = 0; - svr->recvIdent = ident; - svr->recvCounter = 0; - svr->recvCRC = 0; - svr->recvSize = 0; - svr->recvBfr = dest; -} - -static void mevent_recv_block(u32 recv_idx, void * dest, size_t size) -{ - memcpy(dest, gBlockRecvBuffer[recv_idx], size); -} - -static bool32 mevent_has_received(u32 recv_idx) -{ - if ((GetBlockReceivedStatus() >> recv_idx) & 1) - return TRUE; - else - return FALSE; -} - -static void mevent_reset_recv(u32 recv_idx) -{ - ResetBlockReceivedFlag(recv_idx); -} - -static bool32 mevent_receive_func(struct mevent_srv_sub * svr) -{ - struct send_recv_header header; - - switch (svr->seqno) - { - case 0: - if (mevent_has_received(svr->recvPlayerNo)) - { - mevent_recv_block(svr->recvPlayerNo, &header, sizeof(header)); - svr->recvSize = header.size; - svr->recvCRC = header.crc; - if (svr->recvSize > ME_SEND_BUF_SIZE) - { - LinkRfu_FatalError(); - return FALSE; - } - else if (svr->recvIdent != header.ident) - { - LinkRfu_FatalError(); - return FALSE; - } - else - { - svr->recvCounter = 0; - mevent_reset_recv(svr->recvPlayerNo); - ++svr->seqno; - } - } - break; - case 1: - if (mevent_has_received(svr->recvPlayerNo)) - { - size_t blocksiz = svr->recvCounter * 252; - if (svr->recvSize - blocksiz <= 252) - { - mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, svr->recvSize - blocksiz); - ++svr->recvCounter; - ++svr->seqno; - } - else - { - mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, 252); - ++svr->recvCounter; - } - mevent_reset_recv(svr->recvPlayerNo); - } - break; - case 2: - if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC) - { - LinkRfu_FatalError(); - return FALSE; - } - else - { - svr->seqno = 0; - return TRUE; - } - break; - - } - - return FALSE; -} - -static bool32 mevent_send_func(struct mevent_srv_sub * svr) -{ - struct send_recv_header header; - - switch (svr->seqno) - { - case 0: - if (IsLinkTaskFinished()) - { - header.ident = svr->sendIdent; - header.size = svr->sendSize; - header.crc = CalcCRC16WithTable(svr->sendBfr, svr->sendSize); - svr->sendCRC = header.crc; - svr->sendCounter = 0; - SendBlock(0, &header, sizeof(header)); - ++svr->seqno; - } - break; - case 1: - if (IsLinkTaskFinished()) - { - if (mevent_has_received(svr->sendPlayerNo)) - { - size_t blocksiz; - mevent_reset_recv(svr->sendPlayerNo); - blocksiz = 252 * svr->sendCounter; - if (svr->sendSize - blocksiz <= 252) - { - SendBlock(0, svr->sendBfr + blocksiz, svr->sendSize - blocksiz); - ++svr->sendCounter; - ++svr->seqno; - } - else - { - SendBlock(0, svr->sendBfr + blocksiz, 252); - ++svr->sendCounter; - } - } - } - break; - case 2: - if (IsLinkTaskFinished()) - { - if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC) - LinkRfu_FatalError(); - else - ++svr->seqno; - } - break; - case 3: - if (mevent_has_received(svr->sendPlayerNo)) - { - mevent_reset_recv(svr->sendPlayerNo); - svr->seqno = 0; - return TRUE; - } - break; - } - - return FALSE; -} diff --git a/src/minigame_countdown.c b/src/minigame_countdown.c index 8e546afc9a..5aaed0cb23 100644 --- a/src/minigame_countdown.c +++ b/src/minigame_countdown.c @@ -48,8 +48,8 @@ static void Task_StaticCountdown_Free(u8 taskId); static void Task_StaticCountdown_Start(u8 taskId); static void Task_StaticCountdown_Run(u8 taskId); -static const u16 s321Start_Static_Pal[] = INCBIN_U16("graphics/minigame_countdown/321start_static.gbapal"); -static const u32 s321Start_Static_Gfx[] = INCBIN_U32("graphics/minigame_countdown/321start_static.4bpp.lz"); +static const u16 s321Start_Static_Pal[] = INCBIN_U16("graphics/link/321start_static.gbapal"); +static const u32 s321Start_Static_Gfx[] = INCBIN_U32("graphics/link/321start_static.4bpp.lz"); static const struct CompressedSpriteSheet sSpriteSheet_321Start_Static[] = { @@ -374,8 +374,8 @@ static void CreateStartSprite(u16 tileTag, u16 palTag, s16 x, s16 y, u8 subprior static void InitStartGraphic(u8 spriteId1, u8 spriteId2, u8 spriteId3); static void SpriteCB_Start(struct Sprite *sprite); -static const u16 s321Start_Pal[] = INCBIN_U16("graphics/minigame_countdown/321start.gbapal"); -static const u32 s321Start_Gfx[] = INCBIN_U32("graphics/minigame_countdown/321start.4bpp.lz"); +static const u16 s321Start_Pal[] = INCBIN_U16("graphics/link/321start.gbapal"); +static const u32 s321Start_Gfx[] = INCBIN_U32("graphics/link/321start.4bpp.lz"); #define tState data[0] #define tTilesTag data[2] @@ -447,13 +447,13 @@ static bool32 RunMinigameCountdownDigitsAnim(u8 spriteId) switch (sprite->sState) { case 0: - sub_8007E18(sprite, 0x800, 0x1A); + SetSpriteMatrixAnchor(sprite, NO_ANCHOR, 26); sprite->sState++; // fallthrough case 1: if (sprite->sTimer == 0) PlaySE(SE_BALL_BOUNCE_2); - + if (++sprite->sTimer >= 20) { // Ready for jump @@ -618,7 +618,7 @@ static const struct OamData sOamData_Numbers = .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -635,7 +635,7 @@ static const struct OamData sOamData_Start = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 9b6d0d887b..69c2e81540 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -15,12 +15,11 @@ #include "task.h" #include "window.h" #include "constants/event_objects.h" -#include "constants/maps.h" #include "constants/rgb.h" #include "constants/songs.h" #include "constants/metatile_labels.h" -struct MirageTowerPulseBlend +struct MirageTowerPulseBlend { u8 taskId; struct PulseBlend pulseBlend; @@ -68,12 +67,12 @@ static void IncrementCeilingCrumbleFinishedCount(void); static void WaitCeilingCrumble(u8); static void FinishCeilingCrumbleTask(u8); static void CreateCeilingCrumbleSprites(void); -static void SpriteCB_CeilingCrumble(struct Sprite*); +static void SpriteCB_CeilingCrumble(struct Sprite *); static void DoMirageTowerDisintegration(u8); static void InitMirageTowerShake(u8); static void Task_FossilFallAndSink(u8); static void SpriteCB_FallingFossil(struct Sprite *); -static void UpdateDisintegrationEffect(u8*, u16, u8, u8, u8); +static void UpdateDisintegrationEffect(u8 *, u16, u8, u8, u8); static const u8 sBlankTile_Gfx[32] = {0}; static const u8 sMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp"); @@ -134,7 +133,7 @@ static const struct OamData sOamData_FallingFossil = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -153,8 +152,8 @@ static const union AnimCmd *const sAnims_FallingFossil[] = static const struct SpriteTemplate sSpriteTemplate_FallingFossil = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &sOamData_FallingFossil, .anims = sAnims_FallingFossil, .images = NULL, @@ -190,7 +189,7 @@ static const struct OamData sOamData_CeilingCrumbleSmall = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -204,7 +203,7 @@ static const struct OamData sOamData_CeilingCrumbleSmall = static const struct SpriteTemplate sSpriteTemplate_CeilingCrumbleSmall = { .tileTag = TAG_CEILING_CRUMBLE, - .paletteTag = 0xFFFF, + .paletteTag = TAG_NONE, .oam = &sOamData_CeilingCrumbleSmall, .anims = sAnims_CeilingCrumbleSmall, .images = NULL, @@ -228,7 +227,7 @@ static const struct OamData sOamData_CeilingCrumbleLarge = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -242,7 +241,7 @@ static const struct OamData sOamData_CeilingCrumbleLarge = static const struct SpriteTemplate sSpriteTemplate_CeilingCrumbleLarge = { .tileTag = TAG_CEILING_CRUMBLE, - .paletteTag = 0xFFFF, + .paletteTag = TAG_NONE, .oam = &sOamData_CeilingCrumbleLarge, .anims = sAnims_CeilingCrumbleLarge, .images = NULL, @@ -250,8 +249,8 @@ static const struct SpriteTemplate sSpriteTemplate_CeilingCrumbleLarge = { .callback = SpriteCB_CeilingCrumble }; -EWRAM_DATA static u8* sMirageTowerGfxBuffer = NULL; -EWRAM_DATA static u8* sMirageTowerTilemapBuffer = NULL; +EWRAM_DATA static u8 *sMirageTowerGfxBuffer = NULL; +EWRAM_DATA static u8 *sMirageTowerTilemapBuffer = NULL; EWRAM_DATA static struct FallAnim_Fossil *sFallingFossil = NULL; EWRAM_DATA static struct FallAnim_Tower *sFallingTower = NULL; EWRAM_DATA static struct BgRegOffsets *sBgShakeOffsets = NULL; @@ -362,7 +361,7 @@ static void PlayerDescendMirageTower(u8 taskId) (gSprites[player->spriteId].y + gSprites[player->spriteId].y2)) { DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } } @@ -440,7 +439,7 @@ static void FinishCeilingCrumbleTask(u8 taskId) { FreeSpriteTilesByTag(TAG_CEILING_CRUMBLE); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } static void CreateCeilingCrumbleSprites(void) @@ -464,7 +463,7 @@ static void CreateCeilingCrumbleSprites(void) } } -static void SpriteCB_CeilingCrumble(struct Sprite* sprite) +static void SpriteCB_CeilingCrumble(struct Sprite *sprite) { sprite->data[1] += 2; sprite->y2 = sprite->data[1] / 2; @@ -479,7 +478,9 @@ static void SetInvisibleMirageTowerMetatiles(void) { u8 i; for (i = 0; i < ARRAY_COUNT(sInvisibleMirageTowerMetatiles); i++) - MapGridSetMetatileIdAt(sInvisibleMirageTowerMetatiles[i].x + 7, sInvisibleMirageTowerMetatiles[i].y + 7, sInvisibleMirageTowerMetatiles[i].metatileId); + MapGridSetMetatileIdAt(sInvisibleMirageTowerMetatiles[i].x + MAP_OFFSET, + sInvisibleMirageTowerMetatiles[i].y + MAP_OFFSET, + sInvisibleMirageTowerMetatiles[i].metatileId); DrawWholeMapView(); } @@ -534,8 +535,8 @@ static void InitMirageTowerShake(u8 taskId) case 1: sMirageTowerGfxBuffer = (u8 *)AllocZeroed(MIRAGE_TOWER_GFX_LENGTH); sMirageTowerTilemapBuffer = (u8 *)AllocZeroed(BG_SCREEN_SIZE); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); gTasks[taskId].tState++; break; case 2: @@ -564,7 +565,7 @@ static void InitMirageTowerShake(u8 taskId) sBgShakeOffsets->bgVOFS = zero; CreateTask(UpdateBgShake, 10); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); break; } } @@ -653,7 +654,7 @@ static void DoMirageTowerDisintegration(u8 taskId) break; case 8: DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); break; } gTasks[taskId].tState++; @@ -718,7 +719,7 @@ static void Task_FossilFallAndSink(u8 taskId) FREE_AND_SET_NULL(sFallingFossil); break; case 8: - EnableBothScriptContexts(); + ScriptContext_Enable(); break; } gTasks[taskId].tState++; @@ -747,7 +748,7 @@ static void SpriteCB_FallingFossil(struct Sprite *sprite) } } -static void UpdateDisintegrationEffect(u8* tiles, u16 randId, u8 c, u8 size, u8 offset) +static void UpdateDisintegrationEffect(u8 *tiles, u16 randId, u8 c, u8 size, u8 offset) { u8 heightTiles, height, widthTiles, width; u16 var, baseOffset; @@ -764,7 +765,7 @@ static void UpdateDisintegrationEffect(u8* tiles, u16 randId, u8 c, u8 size, u8 col = width & 7; sDebug_DisintegrationData[2] = height & 7; sDebug_DisintegrationData[3] = width & 7; - + widthTiles = width / 8; heightTiles = height / 8; sDebug_DisintegrationData[4] = width / 8; @@ -772,11 +773,11 @@ static void UpdateDisintegrationEffect(u8* tiles, u16 randId, u8 c, u8 size, u8 var = (size / 8) * (heightTiles * 64) + (widthTiles * 64); sDebug_DisintegrationData[6] = var; - + baseOffset = var + ((row * 8) + col); baseOffset /= 2; sDebug_DisintegrationData[7] = var + ((row * 8) + col); - + flag = ((randId % 2) ^ 1); tileMask = (c << (flag << 2)) | 15 << (((flag ^ 1) << 2)); tiles[baseOffset + (offset * 32)] &= tileMask; diff --git a/src/mon_markings.c b/src/mon_markings.c index dbd5a2fa81..d7a61c27e7 100644 --- a/src/mon_markings.c +++ b/src/mon_markings.c @@ -22,15 +22,15 @@ static void SpriteCB_Marking(struct Sprite *); static void SpriteCB_Cursor(struct Sprite *); static struct Sprite *CreateMarkingComboSprite(u16, u16, const u16 *, u16); -static const u16 sMonMarkings_Pal[] = INCBIN_U16("graphics/misc/mon_markings.gbapal"); -static const u8 sMonMarkings_Gfx[] = INCBIN_U8("graphics/misc/mon_markings.4bpp"); +static const u16 sMonMarkings_Pal[] = INCBIN_U16("graphics/interface/mon_markings.gbapal"); +static const u8 sMonMarkings_Gfx[] = INCBIN_U8("graphics/interface/mon_markings.4bpp"); static const struct OamData sOamData_MenuWindow = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -48,7 +48,7 @@ static const struct OamData sOamData_8x8 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -157,7 +157,7 @@ static const struct OamData sOamData_MarkingCombo = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), .x = 0, @@ -396,20 +396,16 @@ bool8 HandleMonMarkingsMenuInput(void) if (JOY_NEW(DPAD_UP)) { - s8 pos; PlaySE(SE_SELECT); - pos = --sMenu->cursorPos; - if (pos < 0) + if (--sMenu->cursorPos < 0) sMenu->cursorPos = SELECTION_CANCEL; return TRUE; } if (JOY_NEW(DPAD_DOWN)) { - s8 pos; PlaySE(SE_SELECT); - pos = ++sMenu->cursorPos; - if (pos > SELECTION_CANCEL) + if (++sMenu->cursorPos > SELECTION_CANCEL) sMenu->cursorPos = 0; return TRUE; } @@ -495,7 +491,6 @@ static void CreateMonMarkingsMenuSprites(s16 x, s16 y, u16 baseTileTag, u16 base } sMenu->windowSprites[1]->y = y + 96; - // Create marking sprites template.tileTag++; template.paletteTag++; @@ -548,7 +543,6 @@ static void CreateMonMarkingsMenuSprites(s16 x, s16 y, u16 baseTileTag, u16 base { sMenu->cursorSprite = NULL; } - } static void SpriteCB_Dummy(struct Sprite *sprite) @@ -610,7 +604,7 @@ static struct Sprite *CreateMarkingComboSprite(u16 tileTag, u16 paletteTag, cons spriteId = CreateSprite(&template, 0, 0, 0); if (spriteId != MAX_SPRITES) - return &gSprites[spriteId]; + return &gSprites[spriteId]; else return NULL; } diff --git a/src/money.c b/src/money.c index 6213f2dd00..88e1fea640 100644 --- a/src/money.c +++ b/src/money.c @@ -22,7 +22,7 @@ static const struct OamData sOamData_MoneyLabel = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), .x = 0, @@ -58,28 +58,28 @@ static const struct SpriteTemplate sSpriteTemplate_MoneyLabel = static const struct CompressedSpriteSheet sSpriteSheet_MoneyLabel = { - .data = gMenuMoneyGfx, + .data = gShopMenuMoney_Gfx, .size = 256, .tag = MONEY_LABEL_TAG, }; static const struct CompressedSpritePalette sSpritePalette_MoneyLabel = { - .data = gMenuMoneyPal, + .data = gShopMenu_Pal, .tag = MONEY_LABEL_TAG }; -u32 GetMoney(u32* moneyPtr) +u32 GetMoney(u32 *moneyPtr) { return *moneyPtr ^ gSaveBlock2Ptr->encryptionKey; } -void SetMoney(u32* moneyPtr, u32 newValue) +void SetMoney(u32 *moneyPtr, u32 newValue) { *moneyPtr = gSaveBlock2Ptr->encryptionKey ^ newValue; } -bool8 IsEnoughMoney(u32* moneyPtr, u32 cost) +bool8 IsEnoughMoney(u32 *moneyPtr, u32 cost) { if (GetMoney(moneyPtr) >= cost) return TRUE; @@ -87,7 +87,7 @@ bool8 IsEnoughMoney(u32* moneyPtr, u32 cost) return FALSE; } -void AddMoney(u32* moneyPtr, u32 toAdd) +void AddMoney(u32 *moneyPtr, u32 toAdd) { u32 toSet = GetMoney(moneyPtr); @@ -107,7 +107,7 @@ void AddMoney(u32* moneyPtr, u32 toAdd) SetMoney(moneyPtr, toSet); } -void RemoveMoney(u32* moneyPtr, u32 toSub) +void RemoveMoney(u32 *moneyPtr, u32 toSub) { u32 toSet = GetMoney(moneyPtr); @@ -132,7 +132,7 @@ void SubtractMoneyFromVar0x8005(void) void PrintMoneyAmountInMoneyBox(u8 windowId, int amount, u8 speed) { - PrintMoneyAmount(windowId, 0x26, 1, amount, speed); + PrintMoneyAmount(windowId, 38, 1, amount, speed); } void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed) @@ -146,10 +146,10 @@ void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed) txtPtr = gStringVar4; while (strLength-- > 0) - *(txtPtr++) = 0x77; + *(txtPtr++) = CHAR_SPACER; StringExpandPlaceholders(txtPtr, gText_PokedollarVar1); - AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, speed, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, x, y, speed, NULL); } void PrintMoneyAmountInMoneyBoxWithBorder(u8 windowId, u16 tileStart, u8 pallete, int amount) @@ -171,7 +171,7 @@ void DrawMoneyBox(int amount, u8 x, u8 y) sMoneyBoxWindowId = AddWindow(&template); FillWindowPixelBuffer(sMoneyBoxWindowId, PIXEL_FILL(0)); PutWindowTilemap(sMoneyBoxWindowId); - CopyWindowToVram(sMoneyBoxWindowId, 1); + CopyWindowToVram(sMoneyBoxWindowId, COPYWIN_MAP); PrintMoneyAmountInMoneyBoxWithBorder(sMoneyBoxWindowId, 0x214, 14, amount); AddMoneyLabelObject((8 * x) + 19, (8 * y) + 11); } @@ -180,7 +180,7 @@ void HideMoneyBox(void) { RemoveMoneyLabelObject(); ClearStdWindowAndFrameToTransparent(sMoneyBoxWindowId, FALSE); - CopyWindowToVram(sMoneyBoxWindowId, 2); + CopyWindowToVram(sMoneyBoxWindowId, COPYWIN_GFX); RemoveWindow(sMoneyBoxWindowId); } diff --git a/src/move_relearner.c b/src/move_relearner.c index 9fa7bf11c0..d9c943b576 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -28,9 +28,9 @@ /* * Move relearner state machine * ------------------------ - * + * * Entry point: TeachMoveRelearnerMove - * + * * TeachMoveRelearnerMove * Task_WaitForFadeOut * CB2_InitLearnMove @@ -45,21 +45,21 @@ * DoMoveRelearnerMain: MENU_STATE_FADE_TO_BLACK * DoMoveRelearnerMain: MENU_STATE_WAIT_FOR_FADE * - Go to MENU_STATE_IDLE_BATTLE_MODE - * + * * DoMoveRelearnerMain: MENU_STATE_SETUP_BATTLE_MODE * DoMoveRelearnerMain: MENU_STATE_IDLE_BATTLE_MODE * - If the player selected a move (pressed A), go to MENU_STATE_PRINT_TEACH_MOVE_PROMPT. * - If the player cancelled (pressed B), go to MENU_STATE_PRINT_GIVE_UP_PROMPT. * - If the player pressed left or right, swap the move display window to contest mode, * and go to MENU_STATE_SETUP_CONTEST_MODE. - * + * * DoMoveRelearnerMain: MENU_STATE_SETUP_CONTEST_MODE * DoMoveRelearnerMain: MENU_STATE_IDLE_CONTEST_MODE * - If the player selected a move, go to MENU_STATE_PRINT_TEACH_MOVE_PROMPT. * - If the player cancelled, go to MENU_STATE_PRINT_GIVE_UP_PROMPT * - If the player pressed left or right, swap the move display window to battle mode, * and go to MENU_STATE_SETUP_BATTLE_MODE. - * + * * DoMoveRelearnerMain: MENU_STATE_PRINT_TEACH_MOVE_PROMPT * DoMoveRelearnerMain: MENU_STATE_TEACH_MOVE_CONFIRM * - Wait for the player to confirm. @@ -68,24 +68,24 @@ * MENU_STATE_PRINT_TEXT_THEN_FANFARE. * - If confirmed and the pokemon doesn't have an empty move slot, go to * MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT. - * + * * DoMoveRelearnerMain: MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT * DoMoveRelearnerMain: MENU_STATE_WAIT_FOR_TRYING_TO_LEARN * DoMoveRelearnerMain: MENU_STATE_CONFIRM_DELETE_OLD_MOVE * - If the player confirms, go to MENU_STATE_PRINT_WHICH_MOVE_PROMPT. * - If the player cancels, go to MENU_STATE_PRINT_STOP_TEACHING - * + * * DoMoveRelearnerMain: MENU_STATE_PRINT_STOP_TEACHING * DoMoveRelearnerMain: MENU_STATE_WAIT_FOR_STOP_TEACHING * DoMoveRelearnerMain: MENU_STATE_CONFIRM_STOP_TEACHING * - If the player confirms, go to MENU_STATE_CHOOSE_SETUP_STATE. * - If the player cancels, go back to MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT. - * + * * DoMoveRelearnerMain: MENU_STATE_PRINT_WHICH_MOVE_PROMPT * DoMoveRelearnerMain: MENU_STATE_SHOW_MOVE_SUMMARY_SCREEN * - Go to ShowSelectMovePokemonSummaryScreen. When done, control returns to * CB2_InitLearnMoveReturnFromSelectMove. - * + * * DoMoveRelearnerMain: MENU_STATE_DOUBLE_FANFARE_FORGOT_MOVE * DoMoveRelearnerMain: MENU_STATE_PRINT_TEXT_THEN_FANFARE * DoMoveRelearnerMain: MENU_STATE_WAIT_FOR_FANFARE @@ -93,13 +93,13 @@ * DoMoveRelearnerMain: MENU_STATE_FADE_AND_RETURN * DoMoveRelearnerMain: MENU_STATE_RETURN_TO_FIELD * - Clean up and go to CB2_ReturnToField. - * + * * DoMoveRelearnerMain: MENU_STATE_PRINT_GIVE_UP_PROMPT * DoMoveRelearnerMain: MENU_STATE_GIVE_UP_CONFIRM * - If the player confirms, go to MENU_STATE_FADE_AND_RETURN, and set VAR_0x8004 to FALSE. * - If the player cancels, go to either MENU_STATE_SETUP_BATTLE_MODE or * MENU_STATE_SETUP_CONTEST_MODE. - * + * * CB2_InitLearnMoveReturnFromSelectMove: * - Do most of the same stuff as CB2_InitLearnMove. * DoMoveRelearnerMain: MENU_STATE_FADE_FROM_SUMMARY_SCREEN @@ -108,7 +108,7 @@ * go to MENU_STATE_DOUBLE_FANFARE_FORGOT_MOVE and set VAR_0x8004 to TRUE. * - If the chosen move is the one the player selected before the summary screen, * go to MENU_STATE_PRINT_STOP_TEACHING. - * + * */ #define MENU_STATE_FADE_TO_BLACK 0 @@ -185,7 +185,7 @@ static const struct OamData sHeartSpriteOamData = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -202,7 +202,7 @@ static const struct OamData sUnusedOam1 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x16), .x = 0, @@ -219,7 +219,7 @@ static const struct OamData sUnusedOam2 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), .x = 0, @@ -365,7 +365,7 @@ static void VBlankCB_MoveRelearner(void) // Script arguments: The pokemon to teach is in VAR_0x8004 void TeachMoveRelearnerMove(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); CreateTask(Task_WaitForFadeOut, 10); // Fade to black BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); @@ -687,7 +687,7 @@ static void DoMoveRelearnerMain(void) ShowTeachMoveText(TRUE); } RemoveScrollArrows(); - CopyWindowToVram(3, 2); + CopyWindowToVram(3, COPYWIN_GFX); break; case MENU_STATE_TRY_OVERWRITE_MOVE: if (!gPaletteFade.active) @@ -766,7 +766,7 @@ static void HideHeartSpritesAndShowTeachMoveText(bool8 onlyHideSprites) { StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToPkmn); FillWindowPixelBuffer(3, 0x11); - AddTextPrinterParameterized(3, 1, gStringVar4, 0, 1, 0, NULL); + AddTextPrinterParameterized(3, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); } } @@ -836,7 +836,7 @@ static void ShowTeachMoveText(bool8 shouldDoNothingInstead) { StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToPkmn); FillWindowPixelBuffer(3, 0x11); - AddTextPrinterParameterized(3, 1, gStringVar4, 0, 1, 0, NULL); + AddTextPrinterParameterized(3, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); } } @@ -912,7 +912,7 @@ static void CreateLearnableMovesList(void) } GetMonData(&gPlayerParty[sMoveRelearnerStruct->partyMon], MON_DATA_NICKNAME, nickname); - StringCopy10(gStringVar1, nickname); + StringCopy_Nickname(gStringVar1, nickname); sMoveRelearnerStruct->menuItems[sMoveRelearnerStruct->numMenuChoices].name = gText_Cancel; sMoveRelearnerStruct->menuItems[sMoveRelearnerStruct->numMenuChoices].id = LIST_CANCEL; sMoveRelearnerStruct->numMenuChoices++; diff --git a/src/multiboot.c b/src/multiboot.c index 19245b5b33..15b062ed65 100644 --- a/src/multiboot.c +++ b/src/multiboot.c @@ -90,7 +90,7 @@ output_burst: k = 0x0e; for (i = MULTIBOOT_NCHILD; i != 0; i--) { - if (*(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2) != 0xffff) + if (REG_SIOMULTI(i) != 0xffff) { break; } @@ -102,7 +102,7 @@ output_burst: for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if (mp->client_bit & (1 << i)) { if (j != ((MULTIBOOT_CLIENT_INFO << 8) | (1 << i))) @@ -141,7 +141,7 @@ output_burst: mp->probe_target_bit = 0; for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if ((j >> 8) == MULTIBOOT_CLIENT_INFO) { MultiBoot_required_data[i - 1] = j; @@ -166,7 +166,7 @@ output_burst: { if (mp->probe_target_bit & (1 << i)) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if (j != MultiBoot_required_data[i - 1]) { mp->probe_target_bit ^= 1 << i; @@ -179,7 +179,7 @@ output_burst: k = 1; for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); mp->client_data[i - 1] = j; if (mp->probe_target_bit & (1 << i)) { @@ -214,7 +214,7 @@ output_burst: case 0xd1: for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if (mp->probe_target_bit & (1 << i)) { if ((j >> 8) != MULTIBOOT_CLIENT_DLREADY) @@ -242,7 +242,7 @@ output_burst: { if (mp->probe_target_bit & (1 << i)) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if ((j >> 8) != (MULTIBOOT_MASTER_START_PROBE + 1 - (mp->probe_count >> 1)) || ((j & 0xff) != (1 << i))) { @@ -391,7 +391,7 @@ static int MultiBootHandShake(struct MultiBootParam *mp) default: for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if ((mp->client_bit & (1 << i)) && j != must_data) { @@ -413,7 +413,7 @@ static int MultiBootHandShake(struct MultiBootParam *mp) case 0xe8: for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if ((mp->client_bit & (1 << i)) && j != must_data) { MultiBootInit(mp); diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index 297883e9cd..c35fe8ed80 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -20,14 +20,11 @@ #include "decompress.h" #include "constants/rgb.h" -// this file's functions static void CB2_MysteryEventMenu(void); static void PrintMysteryMenuText(u8 windowId, const u8 *text, u8 x, u8 y, s32 speed); -// EWRAM vars -static EWRAM_DATA u8 sUnknown_0203BCF8 = 0; // set but unused +static EWRAM_DATA u8 sUnused = 0; // set but unused -// const rom data static const struct BgTemplate sBgTemplates[] = { { @@ -105,7 +102,7 @@ void CB2_InitMysteryEventMenu(void) BuildOamBuffer(); RunTextPrinters(); UpdatePaletteFade(); - FillPalette(0, 0, 2); + FillPalette(RGB_BLACK, 0, 2); SetMainCallback2(CB2_MysteryEventMenu); } } @@ -114,16 +111,16 @@ static bool8 GetEventLoadMessage(u8 *dest, u32 status) { bool8 retVal = TRUE; - if (status == 0) + if (status == MEVENT_STATUS_LOAD_OK) { StringCopy(dest, gText_EventSafelyLoaded); retVal = FALSE; } - if (status == 2) + if (status == MEVENT_STATUS_SUCCESS) retVal = FALSE; - if (status == 1) + if (status == MEVENT_STATUS_LOAD_ERROR) StringCopy(dest, gText_LoadErrorEndingSession); return retVal; @@ -134,9 +131,9 @@ static void CB2_MysteryEventMenu(void) switch (gMain.state) { case 0: - DrawStdFrameWithCustomTileAndPalette(0, 1, 1, 0xD); + DrawStdFrameWithCustomTileAndPalette(0, TRUE, 1, 0xD); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); ShowBg(0); BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); gMain.state++; @@ -181,10 +178,10 @@ static void CB2_MysteryEventMenu(void) { PlaySE(SE_SELECT); CheckShouldAdvanceLinkState(); - DrawStdFrameWithCustomTileAndPalette(1, 1, 1, 0xD); + DrawStdFrameWithCustomTileAndPalette(1, TRUE, 1, 0xD); PrintMysteryMenuText(1, gText_LoadingEvent, 1, 2, 0); PutWindowTilemap(1); - CopyWindowToVram(1, 3); + CopyWindowToVram(1, COPYWIN_FULL); gMain.state++; } else if (JOY_NEW(B_BUTTON)) @@ -196,7 +193,7 @@ static void CB2_MysteryEventMenu(void) } else { - GetEventLoadMessage(gStringVar4, 1); + GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); gMain.state = 13; } @@ -209,7 +206,7 @@ static void CB2_MysteryEventMenu(void) if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS) { SetCloseLinkCallback(); - GetEventLoadMessage(gStringVar4, 1); + GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); gMain.state = 13; } @@ -221,7 +218,7 @@ static void CB2_MysteryEventMenu(void) else { CloseLink(); - GetEventLoadMessage(gStringVar4, 1); + GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); gMain.state = 13; } @@ -255,9 +252,9 @@ static void CB2_MysteryEventMenu(void) case 11: if (gReceivedRemoteLinkPlayers == 0) { - u16 unkVal = RunMysteryEventScript(gDecompressionBuffer); + u16 status = RunMysteryEventScript(gDecompressionBuffer); CpuFill32(0, gDecompressionBuffer, 0x7D4); - if (!GetEventLoadMessage(gStringVar4, unkVal)) + if (!GetEventLoadMessage(gStringVar4, status)) TrySavingData(SAVE_NORMAL); gMain.state++; } @@ -270,7 +267,7 @@ static void CB2_MysteryEventMenu(void) if (!IsTextPrinterActive(0)) { gMain.state++; - sUnknown_0203BCF8 = 0; + sUnused = 0; } break; case 14: @@ -293,7 +290,7 @@ static void CB2_MysteryEventMenu(void) if (gLinkStatus & 0x40 && !IsLinkMaster()) { CloseLink(); - GetEventLoadMessage(gStringVar4, 1); + GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); gMain.state = 13; } @@ -315,5 +312,5 @@ static void PrintMysteryMenuText(u8 windowId, const u8 *text, u8 x, u8 y, s32 sp textColor[2] = 3; FillWindowPixelBuffer(windowId, PIXEL_FILL(textColor[0])); - AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, textColor, speed, text); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, letterSpacing, lineSpacing, textColor, speed, text); } diff --git a/src/mystery_event_msg.c b/src/mystery_event_msg.c index e0e70a218d..51141bb77e 100644 --- a/src/mystery_event_msg.c +++ b/src/mystery_event_msg.c @@ -1,13 +1,13 @@ #include "global.h" -const u8 gText_MysteryGiftBerry[] = _("Obtained a {STR_VAR_2} BERRY!\nDad has it at PETALBURG GYM."); -const u8 gText_MysteryGiftBerryTransform[] = _("The {STR_VAR_1} BERRY transformed into\none {STR_VAR_2} BERRY."); -const u8 gText_MysteryGiftBerryObtained[] = _("The {STR_VAR_1} BERRY has already been\nobtained."); -const u8 gText_MysteryGiftSpecialRibbon[] = _("A special RIBBON was awarded to\nyour party POKéMON."); -const u8 gText_MysteryGiftNationalDex[] = _("The POKéDEX has been upgraded\nwith the NATIONAL MODE."); -const u8 gText_MysteryGiftRareWord[] = _("A rare word has been added."); -const u8 gText_MysteryGiftSentOver[] = _("{STR_VAR_1} was sent over!"); -const u8 gText_MysteryGiftFullParty[] = _("Your party is full.\n{STR_VAR_1} could not be sent over."); -const u8 gText_MysteryGiftNewTrainer[] = _("A new TRAINER has arrived in\nHOENN."); -const u8 gText_MysteryGiftNewAdversaryInBattleTower[] = _("A new adversary has arrived in the\nBATTLE TOWER."); -const u8 gText_MysteryGiftCantBeUsed[] = _("This data can't be used in\nthis version."); +const u8 gText_MysteryEventBerry[] = _("Obtained a {STR_VAR_2} BERRY!\nDad has it at PETALBURG GYM."); +const u8 gText_MysteryEventBerryTransform[] = _("The {STR_VAR_1} BERRY transformed into\none {STR_VAR_2} BERRY."); +const u8 gText_MysteryEventBerryObtained[] = _("The {STR_VAR_1} BERRY has already been\nobtained."); +const u8 gText_MysteryEventSpecialRibbon[] = _("A special RIBBON was awarded to\nyour party POKéMON."); +const u8 gText_MysteryEventNationalDex[] = _("The POKéDEX has been upgraded\nwith the NATIONAL MODE."); +const u8 gText_MysteryEventRareWord[] = _("A rare word has been added."); +const u8 gText_MysteryEventSentOver[] = _("{STR_VAR_1} was sent over!"); +const u8 gText_MysteryEventFullParty[] = _("Your party is full.\n{STR_VAR_1} could not be sent over."); +const u8 gText_MysteryEventNewTrainer[] = _("A new TRAINER has arrived in\nHOENN."); +const u8 gText_MysteryEventNewAdversaryInBattleTower[] = _("A new adversary has arrived in the\nBATTLE TOWER."); +const u8 gText_MysteryEventCantBeUsed[] = _("This data can't be used in\nthis version."); diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index 176eab7fc6..d1b514a173 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -19,23 +19,31 @@ extern ScrCmdFunc gMysteryEventScriptCmdTable[]; extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[]; -#define LANGUAGE_MASK 0x1 -#define VERSION_MASK 0x200 +// 0x1 in FireRed, 0x2 in LeafGreen, 0x80 in Ruby, 0x100 in Sapphire +#define VERSION_MASK (1 << 9) + +#define mScriptBase data[0] +#define mOffset data[1] +#define mStatus data[2] +#define mValid data[3] EWRAM_DATA static struct ScriptContext sMysteryEventScriptContext = {0}; -static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4) +static bool32 CheckCompatibility(u16 unk0, u32 unk1, u16 unk2, u32 version) { - if (!(a1 & LANGUAGE_MASK)) + // 0x1 in English FRLG, 0x2 in English RS, 0x4 in German RS + if (!(unk0 & 0x1)) return FALSE; - if (!(a2 & LANGUAGE_MASK)) + // Same as above + if (!(unk1 & 0x1)) return FALSE; - if (!(a3 & 0x4)) + // 0x1 in FRLG, 0x4 in RS + if (!(unk2 & 0x4)) return FALSE; - if (!(a4 & VERSION_MASK)) + if (!(version & VERSION_MASK)) return FALSE; return TRUE; @@ -43,37 +51,37 @@ static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4) static void SetIncompatible(void) { - StringExpandPlaceholders(gStringVar4, gText_MysteryGiftCantBeUsed); - SetMysteryEventScriptStatus(3); + StringExpandPlaceholders(gStringVar4, gText_MysteryEventCantBeUsed); + SetMysteryEventScriptStatus(MEVENT_STATUS_FAILURE); } static void InitMysteryEventScript(struct ScriptContext *ctx, u8 *script) { InitScriptContext(ctx, gMysteryEventScriptCmdTable, gMysteryEventScriptCmdTableEnd); SetupBytecodeScript(ctx, script); - ctx->data[0] = (u32)script; - ctx->data[1] = 0; - ctx->data[2] = 0; - ctx->data[3] = 0; + ctx->mScriptBase = (u32)script; + ctx->mOffset = 0; + ctx->mStatus = MEVENT_STATUS_LOAD_OK; + ctx->mValid = FALSE; } static bool32 RunMysteryEventScriptCommand(struct ScriptContext *ctx) { - if (RunScriptCommand(ctx) && ctx->data[3]) + if (RunScriptCommand(ctx) && ctx->mValid) return TRUE; else return FALSE; } -void sub_8153870(u8 *script) +void InitMysteryEventScriptContext(u8 *script) { InitMysteryEventScript(&sMysteryEventScriptContext, script); } -bool32 sub_8153884(u32 *a0) +bool32 RunMysteryEventScriptContextCommand(u32 *status) { bool32 ret = RunMysteryEventScriptCommand(&sMysteryEventScriptContext); - *a0 = sMysteryEventScriptContext.data[2]; + *status = sMysteryEventScriptContext.mStatus; return ret; } @@ -84,19 +92,19 @@ u32 RunMysteryEventScript(u8 *script) InitMysteryEventScript(ctx, script); while (RunMysteryEventScriptCommand(ctx)); - return ctx->data[2]; + return ctx->mStatus; } -void SetMysteryEventScriptStatus(u32 val) +void SetMysteryEventScriptStatus(u32 status) { - sMysteryEventScriptContext.data[2] = val; + sMysteryEventScriptContext.mStatus = status; } static int CalcRecordMixingGiftChecksum(void) { unsigned int i; int sum = 0; - u8 *data = (u8*)(&gSaveBlock1Ptr->recordMixingGift.data); + u8 *data = (u8 *)(&gSaveBlock1Ptr->recordMixingGift.data); for (i = 0; i < sizeof(gSaveBlock1Ptr->recordMixingGift.data); i++) sum += data[i]; @@ -169,19 +177,19 @@ bool8 MEScrCmd_end(struct ScriptContext *ctx) bool8 MEScrCmd_checkcompat(struct ScriptContext *ctx) { - u16 v1; - u32 v2; - u16 v3; - u32 v4; + u16 unk0; + u32 unk1; + u16 unk2; + u32 version; - ctx->data[1] = ScriptReadWord(ctx); - v1 = ScriptReadHalfword(ctx); - v2 = ScriptReadWord(ctx); - v3 = ScriptReadHalfword(ctx); - v4 = ScriptReadWord(ctx); + ctx->mOffset = ScriptReadWord(ctx); + unk0 = ScriptReadHalfword(ctx); + unk1 = ScriptReadWord(ctx); + unk2 = ScriptReadHalfword(ctx); + version = ScriptReadWord(ctx); - if (CheckCompatibility(v1, v2, v3, v4) == TRUE) - ctx->data[3] = 1; + if (CheckCompatibility(unk0, unk1, unk2, version) == TRUE) + ctx->mValid = TRUE; else SetIncompatible(); @@ -195,24 +203,24 @@ bool8 MEScrCmd_nop(struct ScriptContext *ctx) bool8 MEScrCmd_setstatus(struct ScriptContext *ctx) { - u8 value = ScriptReadByte(ctx); - ctx->data[2] = value; + u8 status = ScriptReadByte(ctx); + ctx->mStatus = status; return FALSE; } bool8 MEScrCmd_setmsg(struct ScriptContext *ctx) { - u8 value = ScriptReadByte(ctx); - u8 *str = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - if (value == 0xFF || value == ctx->data[2]) + u8 status = ScriptReadByte(ctx); + u8 *str = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase); + if (status == MEVENT_STATUS_FF || status == ctx->mStatus) StringExpandPlaceholders(gStringVar4, str); return FALSE; } bool8 MEScrCmd_runscript(struct ScriptContext *ctx) { - u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - ScriptContext2_RunNewScript(script); + u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase); + RunScriptImmediately(script); return FALSE; } @@ -221,7 +229,7 @@ bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx) u8 *str; const u8 *message; bool32 haveBerry = IsEnigmaBerryValid(); - u8 *berry = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + u8 *berry = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase); StringCopyN(gStringVar1, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_LENGTH + 1); SetEnigmaBerry(berry); StringCopyN(gStringVar2, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_LENGTH + 1); @@ -229,27 +237,27 @@ bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx) if (!haveBerry) { str = gStringVar4; - message = gText_MysteryGiftBerry; + message = gText_MysteryEventBerry; } else if (StringCompare(gStringVar1, gStringVar2)) { str = gStringVar4; - message = gText_MysteryGiftBerryTransform; + message = gText_MysteryEventBerryTransform; } else { str = gStringVar4; - message = gText_MysteryGiftBerryObtained; + message = gText_MysteryEventBerryObtained; } StringExpandPlaceholders(str, message); - ctx->data[2] = 2; + ctx->mStatus = MEVENT_STATUS_SUCCESS; if (IsEnigmaBerryValid() == TRUE) VarSet(VAR_ENIGMA_BERRY_AVAILABLE, 1); else - ctx->data[2] = 1; + ctx->mStatus = MEVENT_STATUS_LOAD_ERROR; return FALSE; } @@ -259,8 +267,8 @@ bool8 MEScrCmd_giveribbon(struct ScriptContext *ctx) u8 index = ScriptReadByte(ctx); u8 ribbonId = ScriptReadByte(ctx); GiveGiftRibbonToParty(index, ribbonId); - StringExpandPlaceholders(gStringVar4, gText_MysteryGiftSpecialRibbon); - ctx->data[2] = 2; + StringExpandPlaceholders(gStringVar4, gText_MysteryEventSpecialRibbon); + ctx->mStatus = MEVENT_STATUS_SUCCESS; return FALSE; } @@ -269,8 +277,8 @@ bool8 MEScrCmd_initramscript(struct ScriptContext *ctx) u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); u8 objectId = ScriptReadByte(ctx); - u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - u8 *scriptEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase); + u8 *scriptEnd = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase); InitRamScript(script, scriptEnd - script, mapGroup, mapNum, objectId); return FALSE; } @@ -278,16 +286,16 @@ bool8 MEScrCmd_initramscript(struct ScriptContext *ctx) bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx) { EnableNationalPokedex(); - StringExpandPlaceholders(gStringVar4, gText_MysteryGiftNationalDex); - ctx->data[2] = 2; + StringExpandPlaceholders(gStringVar4, gText_MysteryEventNationalDex); + ctx->mStatus = MEVENT_STATUS_SUCCESS; return FALSE; } bool8 MEScrCmd_addrareword(struct ScriptContext *ctx) { UnlockAdditionalPhrase(ScriptReadByte(ctx)); - StringExpandPlaceholders(gStringVar4, gText_MysteryGiftRareWord); - ctx->data[2] = 2; + StringExpandPlaceholders(gStringVar4, gText_MysteryEventRareWord); + ctx->mStatus = MEVENT_STATUS_SUCCESS; return FALSE; } @@ -302,11 +310,11 @@ bool8 MEScrCmd_setrecordmixinggift(struct ScriptContext *ctx) bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) { - struct MailStruct mail; + struct Mail mail; struct Pokemon pokemon; u16 species; u16 heldItem; - u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; + u32 data = ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase; void *pokemonPtr = (void *)data; void *mailPtr = (void *)(data + sizeof(struct Pokemon)); @@ -320,13 +328,13 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) if (gPlayerPartyCount == PARTY_SIZE) { - StringExpandPlaceholders(gStringVar4, gText_MysteryGiftFullParty); - ctx->data[2] = 3; + StringExpandPlaceholders(gStringVar4, gText_MysteryEventFullParty); + ctx->mStatus = MEVENT_STATUS_FAILURE; } else { memcpy(&gPlayerParty[PARTY_SIZE - 1], pokemonPtr, sizeof(struct Pokemon)); - memcpy(&mail, mailPtr, sizeof(struct MailStruct)); + memcpy(&mail, mailPtr, sizeof(struct Mail)); if (species != SPECIES_EGG) { @@ -337,11 +345,11 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) heldItem = GetMonData(&gPlayerParty[PARTY_SIZE - 1], MON_DATA_HELD_ITEM); if (ItemIsMail(heldItem)) - GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &mail); + GiveMailToMon(&gPlayerParty[PARTY_SIZE - 1], &mail); CompactPartySlots(); CalculatePlayerPartyCount(); - StringExpandPlaceholders(gStringVar4, gText_MysteryGiftSentOver); - ctx->data[2] = 2; + StringExpandPlaceholders(gStringVar4, gText_MysteryEventSentOver); + ctx->mStatus = MEVENT_STATUS_SUCCESS; } return FALSE; @@ -349,11 +357,11 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx) { - u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; + u32 data = ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase; memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, (void *)data, sizeof(gSaveBlock2Ptr->frontier.ereaderTrainer)); ValidateEReaderTrainer(); - StringExpandPlaceholders(gStringVar4, gText_MysteryGiftNewTrainer); - ctx->data[2] = 2; + StringExpandPlaceholders(gStringVar4, gText_MysteryEventNewTrainer); + ctx->mStatus = MEVENT_STATUS_SUCCESS; return FALSE; } @@ -361,19 +369,19 @@ bool8 MEScrCmd_enableresetrtc(struct ScriptContext *ctx) { EnableResetRTC(); StringExpandPlaceholders(gStringVar4, gText_InGameClockUsable); - ctx->data[2] = 2; + ctx->mStatus = MEVENT_STATUS_SUCCESS; return FALSE; } bool8 MEScrCmd_checksum(struct ScriptContext *ctx) { int checksum = ScriptReadWord(ctx); - u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase); + u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase); if (checksum != CalcByteArraySum(data, dataEnd - data)) { - ctx->data[3] = 0; - ctx->data[2] = 1; + ctx->mValid = FALSE; + ctx->mStatus = MEVENT_STATUS_LOAD_ERROR; } return TRUE; } @@ -381,12 +389,12 @@ bool8 MEScrCmd_checksum(struct ScriptContext *ctx) bool8 MEScrCmd_crc(struct ScriptContext *ctx) { int crc = ScriptReadWord(ctx); - u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase); + u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase); if (crc != CalcCRC16(data, dataEnd - data)) { - ctx->data[3] = 0; - ctx->data[2] = 1; + ctx->mValid = FALSE; + ctx->mStatus = MEVENT_STATUS_LOAD_ERROR; } return TRUE; } diff --git a/src/mystery_gift.c b/src/mystery_gift.c old mode 100644 new mode 100755 index afbe50e4d2..72fc2b3774 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -1,1694 +1,666 @@ #include "global.h" +#include "util.h" #include "main.h" -#include "text.h" -#include "task.h" -#include "malloc.h" -#include "gpu_regs.h" -#include "scanline_effect.h" -#include "text_window.h" -#include "bg.h" -#include "window.h" -#include "strings.h" -#include "text_window.h" -#include "menu.h" -#include "palette.h" -#include "constants/songs.h" -#include "sound.h" -#include "mystery_gift.h" -#include "union_room.h" -#include "title_screen.h" -#include "ereader_screen.h" -#include "international_string_util.h" -#include "list_menu.h" -#include "string_util.h" -#include "mevent.h" -#include "mevent_801BAAC.h" -#include "save.h" -#include "link.h" -#include "mevent_client.h" #include "event_data.h" -#include "link_rfu.h" -#include "mevent_news.h" -#include "mevent_server.h" -#include "constants/cable_club.h" +#include "easy_chat.h" +#include "script.h" +#include "battle_tower.h" +#include "wonder_news.h" +#include "string_util.h" +#include "new_game.h" +#include "mystery_gift.h" +#include "constants/mystery_gift.h" -void bgid_upload_textbox_1(u8 bgId); -void task_add_00_mystery_gift(void); -void task00_mystery_gift(u8 taskId); +static EWRAM_DATA bool32 sStatsEnabled = FALSE; -EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {}; -EWRAM_DATA bool8 gGiftIsFromEReader = FALSE; +static void ClearSavedWonderNewsMetadata(void); +static void ClearSavedWonderNews(void); +static void ClearSavedWonderCard(void); +static bool32 ValidateWonderNews(const struct WonderNews *); +static bool32 ValidateWonderCard(const struct WonderCard *); +static void ClearSavedWonderCardMetadata(void); +static void ClearSavedTrainerIds(void); +static void IncrementCardStatForNewTrainer(u32, u32, u32 *, int); -static const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); -static const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); +#define CALC_CRC(data) CalcCRC16WithTable((void *)&(data), sizeof(data)) -struct MysteryGiftTaskData +void ClearMysteryGift(void) { - u16 curPromptWindowId; - u16 unk2; - u16 unk4; - u16 unk6; - u8 state; - u8 textState; - u8 unkA; - u8 unkB; - u8 IsCardOrNews; - u8 source; - u8 prevPromptWindowId; - u8 * buffer; -}; - -static const struct BgTemplate sBGTemplates[] = { - { - .bg = 0, - .charBaseIndex = 2, - .mapBaseIndex = 15, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0x000 - }, { - .bg = 1, - .charBaseIndex = 0, - .mapBaseIndex = 14, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0x000 - }, { - .bg = 2, - .charBaseIndex = 0, - .mapBaseIndex = 13, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0x000 - }, { - .bg = 3, - .charBaseIndex = 0, - .mapBaseIndex = 12, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0x000 - } -}; - -static const struct WindowTemplate sMainWindows[] = { - { - .bg = 0x00, - .tilemapLeft = 0x00, - .tilemapTop = 0x00, - .width = 0x1e, - .height = 0x02, - .paletteNum = 0x0c, - .baseBlock = 0x0013 - }, { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x0f, - .width = 0x1c, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x004f - }, { - .bg = 0x00, - .tilemapLeft = 0x00, - .tilemapTop = 0x0f, - .width = 0x1e, - .height = 0x05, - .paletteNum = 0x0d, - .baseBlock = 0x004f - }, { - 0xFF - } -}; - -static const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width28 = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x0f, - .width = 0x1c, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x00e5 -}; - -static const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width20 = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x0f, - .width = 0x14, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x00e5 -}; - -static const struct WindowTemplate sMysteryGiftMenuWindowTemplate = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x0f, - .width = 0x13, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x00e5 -}; - -static const struct WindowTemplate sWindowTemplate_ThreeOptions = { - .bg = 0x00, - .tilemapLeft = 0x08, - .tilemapTop = 0x06, - .width = 0x0e, - .height = 0x06, - .paletteNum = 0x0c, - .baseBlock = 0x0155 -}; - -static const struct WindowTemplate sWindowTemplate_YesNoBox = { - .bg = 0x00, - .tilemapLeft = 0x17, - .tilemapTop = 0x0f, - .width = 0x06, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x0155 -}; - -static const struct WindowTemplate sWindowTemplate_7by8 = { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x0b, - .width = 0x07, - .height = 0x08, - .paletteNum = 0x0c, - .baseBlock = 0x0155 -}; - -static const struct WindowTemplate sWindowTemplate_7by6 = { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x0d, - .width = 0x07, - .height = 0x06, - .paletteNum = 0x0c, - .baseBlock = 0x0155 -}; - -static const struct WindowTemplate sWindowTemplate_7by4 = { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x0f, - .width = 0x07, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x0155 -}; - -static const struct ListMenuItem sListMenuItems_CardsOrNews[] = { - { gText_WonderCards, 0 }, - { gText_WonderNews, 1 }, - { gText_Exit3, -2 } -}; - -static const struct ListMenuItem sListMenuItems_WirelessOrFriend[] = { - { gText_WirelessCommunication, 0 }, - { gText_Friend2, 1 }, - { gText_Cancel2, -2 } -}; - -static const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = { - .items = NULL, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 3, - .maxShowed = 3, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 -}; - -static const struct ListMenuItem sListMenuItems_ReceiveSendToss[] = { - { gText_Receive, 0 }, - { gText_Send, 1 }, - { gText_Toss, 2 }, - { gText_Cancel2, -2 } -}; - -static const struct ListMenuItem sListMenuItems_ReceiveToss[] = { - { gText_Receive, 0 }, - { gText_Toss, 2 }, - { gText_Cancel2, -2 } -}; - -static const struct ListMenuItem sListMenuItems_ReceiveSend[] = { - { gText_Receive, 0 }, - { gText_Send, 1 }, - { gText_Cancel2, -2 } -}; - -static const struct ListMenuItem sListMenuItems_Receive[] = { - { gText_Receive, 0 }, - { gText_Cancel2, -2 } -}; - -static const struct ListMenuTemplate sListMenu_ReceiveSendToss = { - .items = sListMenuItems_ReceiveSendToss, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 4, - .maxShowed = 4, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 -}; - -static const struct ListMenuTemplate sListMenu_ReceiveToss = { - .items = sListMenuItems_ReceiveToss, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 3, - .maxShowed = 3, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 -}; - -static const struct ListMenuTemplate sListMenu_ReceiveSend = { - .items = sListMenuItems_ReceiveSend, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 3, - .maxShowed = 3, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 -}; - -static const struct ListMenuTemplate sListMenu_Receive = { - .items = sListMenuItems_Receive, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 2, - .maxShowed = 2, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 -}; - -static const u8 *const Unref_082F0710[] = { - gText_VarietyOfEventsImportedWireless, - gText_WonderCardsInPossession, - gText_ReadNewsThatArrived, - gText_ReturnToTitle -}; - -ALIGNED(2) const u8 sMG_Ereader_TextColor_1[] = { 0, 1, 2 }; -ALIGNED(2) const u8 sMG_Ereader_TextColor_1_Copy[] = { 0, 1, 2 }; -ALIGNED(2) const u8 sMG_Ereader_TextColor_2[] = { 1, 2, 3 }; - -void vblankcb_mystery_gift_e_reader_run(void) -{ - ProcessSpriteCopyRequests(); - LoadOam(); - TransferPlttBuffer(); + CpuFill32(0, &gSaveBlock1Ptr->mysteryGift, sizeof(gSaveBlock1Ptr->mysteryGift)); + ClearSavedWonderNewsMetadata(); // Clear is redundant, InitSavedWonderNews would be sufficient + InitQuestionnaireWords(); } -void c2_mystery_gift_e_reader_run(void) +struct WonderNews *GetSavedWonderNews(void) { - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); + return &gSaveBlock1Ptr->mysteryGift.news; } -bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader) +struct WonderCard *GetSavedWonderCard(void) { - switch (gMain.state) - { - case 0: - SetVBlankCallback(NULL); - ResetPaletteFade(); - ResetSpriteData(); - FreeAllSpritePalettes(); - ResetTasks(); - ScanlineEffect_Stop(); - ResetBgsAndClearDma3BusyFlags(0); - - InitBgsFromTemplates(0, sBGTemplates, ARRAY_COUNT(sBGTemplates)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); - - SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(2, Alloc(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); - - bgid_upload_textbox_1(3); - InitWindows(sMainWindows); - DeactivateAllTextPrinters(); - ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - gMain.state++; - break; - case 1: - LoadPalette(gUnkTextboxBorderPal, 0, 0x20); - LoadPalette(GetTextWindowPalette(2), 0xd0, 0x20); - Menu_LoadStdPalAt(0xC0); - LoadUserWindowBorderGfx(0, 0xA, 0xE0); - LoadUserWindowBorderGfx_(0, 0x1, 0xF0); - FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 0x11); - FillBgTilemapBufferRect(1, 0x000, 0, 0, 32, 32, 0x11); - FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x11); - MG_DrawCheckerboardPattern(3); - PrintMysteryGiftOrEReaderTopMenu(mg_or_ereader, 0); - gMain.state++; - break; - case 2: - CopyBgTilemapBufferToVram(3); - CopyBgTilemapBufferToVram(2); - CopyBgTilemapBufferToVram(1); - CopyBgTilemapBufferToVram(0); - gMain.state++; - break; - case 3: - ShowBg(0); - ShowBg(3); - PlayBGM(MUS_RG_MYSTERY_GIFT); - SetVBlankCallback(vblankcb_mystery_gift_e_reader_run); - EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); - return TRUE; - } - - return FALSE; + return &gSaveBlock1Ptr->mysteryGift.card; } -void c2_mystery_gift(void) +struct WonderCardMetadata *GetSavedWonderCardMetadata(void) { - if (HandleMysteryGiftOrEReaderSetup(0)) - { - SetMainCallback2(c2_mystery_gift_e_reader_run); - gGiftIsFromEReader = FALSE; - task_add_00_mystery_gift(); - } - RunTasks(); + return &gSaveBlock1Ptr->mysteryGift.cardMetadata; } -void c2_ereader(void) +struct WonderNewsMetadata *GetSavedWonderNewsMetadata(void) { - if (HandleMysteryGiftOrEReaderSetup(1)) - { - SetMainCallback2(c2_mystery_gift_e_reader_run); - gGiftIsFromEReader = TRUE; - task_add_00_ereader(); - } + return &gSaveBlock1Ptr->mysteryGift.newsMetadata; } -void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void) +u16 *GetQuestionnaireWordsPtr(void) { - gGiftIsFromEReader = FALSE; - FreeAllWindowBuffers(); - Free(GetBgTilemapBuffer(0)); - Free(GetBgTilemapBuffer(1)); - Free(GetBgTilemapBuffer(2)); - Free(GetBgTilemapBuffer(3)); - SetMainCallback2(CB2_InitTitleScreen); + return gSaveBlock1Ptr->mysteryGift.questionnaireWords; } -void PrintMysteryGiftOrEReaderTopMenu(bool8 mg_or_ereader, bool32 usePickOkCancel) +// Equivalent to ClearSavedWonderCardAndRelated, but nothing else to clear +void ClearSavedWonderNewsAndRelated(void) { - const u8 * header; - const u8 * options; - FillWindowPixelBuffer(0, 0); - if (mg_or_ereader == 0) - { - header = gText_MysteryGift; - options = !usePickOkCancel ? gText_PickOKExit : gText_PickOKCancel; - } - else - { - header = gJPText_MysteryGift; - options = gJPText_DecideStop; - } - - AddTextPrinterParameterized4(0, 1, 4, 1, 0, 0, sMG_Ereader_TextColor_1, -1, header); - AddTextPrinterParameterized4(0, 0, GetStringRightAlignXOffset(0, options, 0xDE), 1, 0, 0, sMG_Ereader_TextColor_1, -1, options); - CopyWindowToVram(0, 2); - PutWindowTilemap(0); + ClearSavedWonderNews(); } -void MG_DrawTextBorder(u8 windowId) +bool32 SaveWonderNews(const struct WonderNews *news) { - DrawTextBorderOuter(windowId, 0x01, 0xF); -} - -void MG_DrawCheckerboardPattern(u32 bg) -{ - s32 i = 0, j; - - FillBgTilemapBufferRect(bg, 0x003, 0, 0, 32, 2, 0x11); - - for (i = 0; i < 18; i++) - { - for (j = 0; j < 32; j++) - { - if ((i & 1) != (j & 1)) - { - FillBgTilemapBufferRect(bg, 1, j, i + 2, 1, 1, 0x11); - } - else - { - FillBgTilemapBufferRect(bg, 2, j, i + 2, 1, 1, 0x11); - } - } - } -} - -void ClearScreenInBg0(bool32 ignoreTopTwoRows) -{ - switch (ignoreTopTwoRows) - { - case 0: - FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x11); - break; - case 1: - FillBgTilemapBufferRect(0, 0, 0, 2, 32, 30, 0x11); - break; - } - CopyBgTilemapBufferToVram(0); -} - -void AddTextPrinterToWindow1(const u8 *str) -{ - StringExpandPlaceholders(gStringVar4, str); - FillWindowPixelBuffer(1, 0x11); - AddTextPrinterParameterized4(1, 1, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); - DrawTextBorderOuter(1, 0x001, 0xF); - PutWindowTilemap(1); - CopyWindowToVram(1, 3); -} - -static void ClearTextWindow(void) -{ - rbox_fill_rectangle(1); - ClearWindowTilemap(1); - CopyWindowToVram(1, 1); -} - -bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str) -{ - switch (*textState) - { - case 0: - AddTextPrinterToWindow1(str); - (*textState)++; - break; - case 1: - DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); - if (({JOY_NEW(A_BUTTON | B_BUTTON);})) - (*textState)++; - break; - case 2: - DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); - *textState = 0; - ClearTextWindow(); - return TRUE; - case 0xFF: - *textState = 2; + if (!ValidateWonderNews(news)) return FALSE; - } - return FALSE; -} -static void HideDownArrow(void) -{ - DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); -} - -static void ShowDownArrow(void) -{ - DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); -} - -bool32 unref_HideDownArrowAndWaitButton(u8 * textState) -{ - switch (*textState) - { - case 0: - HideDownArrow(); - if (({JOY_NEW(A_BUTTON | B_BUTTON);})) - { - (*textState)++; - } - break; - case 1: - ShowDownArrow(); - *textState = 0; - return TRUE; - } - return FALSE; -} - -static bool32 PrintStringAndWait2Seconds(u8 * counter, const u8 * str) -{ - if (*counter == 0) - { - AddTextPrinterToWindow1(str); - } - if (++(*counter) > 120) - { - *counter = 0; - ClearTextWindow(); - return TRUE; - } - else - { - return FALSE; - } -} - -static u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) -{ - struct ListMenuTemplate listMenuTemplate = sListMenuTemplate_ThreeOptions; - struct WindowTemplate windowTemplate = sWindowTemplate_ThreeOptions; - s32 width; - s32 response; - - if (whichMenu == 0) - { - listMenuTemplate.items = sListMenuItems_CardsOrNews; - } - else - { - listMenuTemplate.items = sListMenuItems_WirelessOrFriend; - } - width = Intl_GetListMenuWidth(&listMenuTemplate); - if (width & 1) - { - width++; - } - windowTemplate.width = width; - if (width < 30) - { - windowTemplate.tilemapLeft = (30 - width) / 2; - } - else - { - windowTemplate.tilemapLeft = 0; - } - response = DoMysteryGiftListMenu(&windowTemplate, &listMenuTemplate, 1, 0x00A, 0xE0); - if (response != -1) - { - ClearWindowTilemap(2); - CopyWindowToVram(2, 1); - } - return response; -} - -s8 mevent_message_print_and_prompt_yes_no(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str) -{ - struct WindowTemplate windowTemplate; - s8 input; - - switch (*textState) - { - case 0: - StringExpandPlaceholders(gStringVar4, str); - if (yesNoBoxPlacement == 0) - { - *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width28); - } - else - { - *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width20); - } - FillWindowPixelBuffer(*windowId, 0x11); - AddTextPrinterParameterized4(*windowId, 1, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); - DrawTextBorderOuter(*windowId, 0x001, 0x0F); - CopyWindowToVram(*windowId, 2); - PutWindowTilemap(*windowId); - (*textState)++; - break; - case 1: - windowTemplate = sWindowTemplate_YesNoBox; - if (yesNoBoxPlacement == 0) - { - windowTemplate.tilemapTop = 9; - } - else - { - windowTemplate.tilemapTop = 15; - } - CreateYesNoMenu(&windowTemplate, 10, 14, 0); - (*textState)++; - break; - case 2: - input = Menu_ProcessInputNoWrapClearOnChoose(); - if (input == -1 || input == 0 || input == 1) - { - *textState = 0; - rbox_fill_rectangle(*windowId); - ClearWindowTilemap(*windowId); - CopyWindowToVram(*windowId, 1); - RemoveWindow(*windowId); - return input; - } - break; - case 0xFF: - *textState = 0; - rbox_fill_rectangle(*windowId); - ClearWindowTilemap(*windowId); - CopyWindowToVram(*windowId, 1); - RemoveWindow(*windowId); - return -1; - } - - return -2; -} - -static s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, bool32 cannotSend) -{ - struct WindowTemplate windowTemplate; - s32 input; - - switch (*textState) - { - case 0: - if (cannotToss == 0) - { - StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithCards); - } - else - { - StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithNews); - } - *windowId = AddWindow(&sMysteryGiftMenuWindowTemplate); - FillWindowPixelBuffer(*windowId, 0x11); - AddTextPrinterParameterized4(*windowId, 1, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); - DrawTextBorderOuter(*windowId, 0x001, 0x0F); - CopyWindowToVram(*windowId, 2); - PutWindowTilemap(*windowId); - (*textState)++; - break; - case 1: - windowTemplate = sWindowTemplate_YesNoBox; - if (cannotSend) - { - if (cannotToss == 0) - { - input = DoMysteryGiftListMenu(&sWindowTemplate_7by6, &sListMenu_ReceiveToss, 1, 0x00A, 0xE0); - } - else - { - input = DoMysteryGiftListMenu(&sWindowTemplate_7by4, &sListMenu_Receive, 1, 0x00A, 0xE0); - } - } - else - { - if (cannotToss == 0) - { - input = DoMysteryGiftListMenu(&sWindowTemplate_7by8, &sListMenu_ReceiveSendToss, 1, 0x00A, 0xE0); - } - else - { - input = DoMysteryGiftListMenu(&sWindowTemplate_7by6, &sListMenu_ReceiveSend, 1, 0x00A, 0xE0); - } - } - if (input != -1) - { - *textState = 0; - rbox_fill_rectangle(*windowId); - ClearWindowTilemap(*windowId); - CopyWindowToVram(*windowId, 1); - RemoveWindow(*windowId); - return input; - } - break; - case 0xFF: - *textState = 0; - rbox_fill_rectangle(*windowId); - ClearWindowTilemap(*windowId); - CopyWindowToVram(*windowId, 1); - RemoveWindow(*windowId); - return -2; - } - - return -1; -} - -static bool32 ValidateCardOrNews(bool32 cardOrNews) -{ - if (cardOrNews == 0) - { - return ValidateReceivedWonderCard(); - } - else - { - return ValidateReceivedWonderNews(); - } -} - -static bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) -{ - switch (*state) - { - case 0: - if (cardOrNews == 0) - { - InitWonderCardResources(GetSavedWonderCard(), sav1_get_mevent_buffer_2()); - } - else - { - InitWonderNewsResources(GetSavedWonderNews()); - } - (*state)++; - break; - case 1: - if (cardOrNews == 0) - { - if (!FadeToWonderCardMenu()) - { - return FALSE; - } - } - else - { - if (!FadeToWonderNewsMenu()) - { - return FALSE; - } - } - *state = 0; - return TRUE; - } - - return FALSE; -} - -static bool32 DestroyNewsOrCard(bool32 cardOrNews) -{ - if (cardOrNews == 0) - { - DestroyWonderCard(); - } - else - { - DestroyWonderNews(); - } + ClearSavedWonderNews(); + gSaveBlock1Ptr->mysteryGift.news = *news; + gSaveBlock1Ptr->mysteryGift.newsCrc = CALC_CRC(gSaveBlock1Ptr->mysteryGift.news); return TRUE; } -static bool32 TearDownCardOrNews_ReturnToTopMenu(bool32 cardOrNews, bool32 arg1) +bool32 ValidateSavedWonderNews(void) { - if (cardOrNews == 0) + if (CALC_CRC(gSaveBlock1Ptr->mysteryGift.news) != gSaveBlock1Ptr->mysteryGift.newsCrc) + return FALSE; + if (!ValidateWonderNews(&gSaveBlock1Ptr->mysteryGift.news)) + return FALSE; + + return TRUE; +} + +static bool32 ValidateWonderNews(const struct WonderNews *news) +{ + if (news->id == 0) + return FALSE; + + return TRUE; +} + +bool32 IsSendingSavedWonderNewsAllowed(void) +{ + const struct WonderNews *news = &gSaveBlock1Ptr->mysteryGift.news; + if (news->sendType == SEND_TYPE_DISALLOWED) + return FALSE; + + return TRUE; +} + +static void ClearSavedWonderNews(void) +{ + CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->mysteryGift.news)); + gSaveBlock1Ptr->mysteryGift.newsCrc = 0; +} + +static void ClearSavedWonderNewsMetadata(void) +{ + CpuFill32(0, GetSavedWonderNewsMetadata(), sizeof(gSaveBlock1Ptr->mysteryGift.newsMetadata)); + InitSavedWonderNews(); +} + +bool32 IsWonderNewsSameAsSaved(const u8 *news) +{ + const u8 *savedNews = (const u8 *)&gSaveBlock1Ptr->mysteryGift.news; + u32 i; + if (!ValidateSavedWonderNews()) + return FALSE; + + for (i = 0; i < sizeof(gSaveBlock1Ptr->mysteryGift.news); i++) { - if (FadeOutFromWonderCard(arg1) != 0) + if (savedNews[i] != news[i]) + return FALSE; + } + + return TRUE; +} + +void ClearSavedWonderCardAndRelated(void) +{ + ClearSavedWonderCard(); + ClearSavedWonderCardMetadata(); + ClearSavedTrainerIds(); + ClearRamScript(); + ClearMysteryGiftFlags(); + ClearMysteryGiftVars(); + ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer); +} + +bool32 SaveWonderCard(const struct WonderCard *card) +{ + struct WonderCardMetadata *metadata; + if (!ValidateWonderCard(card)) + return FALSE; + + ClearSavedWonderCardAndRelated(); + memcpy(&gSaveBlock1Ptr->mysteryGift.card, card, sizeof(struct WonderCard)); + gSaveBlock1Ptr->mysteryGift.cardCrc = CALC_CRC(gSaveBlock1Ptr->mysteryGift.card); + metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata; + metadata->iconSpecies = (&gSaveBlock1Ptr->mysteryGift.card)->iconSpecies; + return TRUE; +} + +bool32 ValidateSavedWonderCard(void) +{ + if (gSaveBlock1Ptr->mysteryGift.cardCrc != CALC_CRC(gSaveBlock1Ptr->mysteryGift.card)) + return FALSE; + if (!ValidateWonderCard(&gSaveBlock1Ptr->mysteryGift.card)) + return FALSE; + if (!ValidateSavedRamScript()) + return FALSE; + + return TRUE; +} + +static bool32 ValidateWonderCard(const struct WonderCard *card) +{ + if (card->flagId == 0) + return FALSE; + if (card->type >= CARD_TYPE_COUNT) + return FALSE; + if (!(card->sendType == SEND_TYPE_DISALLOWED + || card->sendType == SEND_TYPE_ALLOWED + || card->sendType == SEND_TYPE_ALLOWED_ALWAYS)) + return FALSE; + if (card->bgType >= NUM_WONDER_BGS) + return FALSE; + if (card->maxStamps > MAX_STAMP_CARD_STAMPS) + return FALSE; + + return TRUE; +} + +bool32 IsSendingSavedWonderCardAllowed(void) +{ + const struct WonderCard *card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->sendType == SEND_TYPE_DISALLOWED) + return FALSE; + + return TRUE; +} + +static void ClearSavedWonderCard(void) +{ + CpuFill32(0, &gSaveBlock1Ptr->mysteryGift.card, sizeof(gSaveBlock1Ptr->mysteryGift.card)); + gSaveBlock1Ptr->mysteryGift.cardCrc = 0; +} + +static void ClearSavedWonderCardMetadata(void) +{ + CpuFill32(0, GetSavedWonderCardMetadata(), sizeof(gSaveBlock1Ptr->mysteryGift.cardMetadata)); + gSaveBlock1Ptr->mysteryGift.cardMetadataCrc = 0; +} + +u16 GetWonderCardFlagID(void) +{ + if (ValidateSavedWonderCard()) + return gSaveBlock1Ptr->mysteryGift.card.flagId; + + return 0; +} + +void DisableWonderCardSending(struct WonderCard *card) +{ + if (card->sendType == SEND_TYPE_ALLOWED) + card->sendType = SEND_TYPE_DISALLOWED; +} + +static bool32 IsWonderCardFlagIDInValidRange(u16 flagId) +{ + if (flagId >= WONDER_CARD_FLAG_OFFSET && flagId < WONDER_CARD_FLAG_OFFSET + NUM_WONDER_CARD_FLAGS) + return TRUE; + + return FALSE; +} + +static const u16 sReceivedGiftFlags[] = +{ + FLAG_RECEIVED_AURORA_TICKET, + FLAG_RECEIVED_MYSTIC_TICKET, + FLAG_RECEIVED_OLD_SEA_MAP, + FLAG_WONDER_CARD_UNUSED_1, + FLAG_WONDER_CARD_UNUSED_2, + FLAG_WONDER_CARD_UNUSED_3, + FLAG_WONDER_CARD_UNUSED_4, + FLAG_WONDER_CARD_UNUSED_5, + FLAG_WONDER_CARD_UNUSED_6, + FLAG_WONDER_CARD_UNUSED_7, + FLAG_WONDER_CARD_UNUSED_8, + FLAG_WONDER_CARD_UNUSED_9, + FLAG_WONDER_CARD_UNUSED_10, + FLAG_WONDER_CARD_UNUSED_11, + FLAG_WONDER_CARD_UNUSED_12, + FLAG_WONDER_CARD_UNUSED_13, + FLAG_WONDER_CARD_UNUSED_14, + FLAG_WONDER_CARD_UNUSED_15, + FLAG_WONDER_CARD_UNUSED_16, + FLAG_WONDER_CARD_UNUSED_17, +}; + +bool32 IsSavedWonderCardGiftNotReceived(void) +{ + u16 value = GetWonderCardFlagID(); + if (!IsWonderCardFlagIDInValidRange(value)) + return FALSE; + + // If flag is set, player has received gift from this card + if (FlagGet(sReceivedGiftFlags[value - WONDER_CARD_FLAG_OFFSET]) == TRUE) + return FALSE; + + return TRUE; +} + +static int GetNumStampsInMetadata(const struct WonderCardMetadata *data, int size) +{ + int numStamps = 0; + int i; + for (i = 0; i < size; i++) + { + if (data->stampData[STAMP_ID][i] && data->stampData[STAMP_SPECIES][i] != SPECIES_NONE) + numStamps++; + } + + return numStamps; +} + +static bool32 IsStampInMetadata(const struct WonderCardMetadata *metadata, const u16 *stamp, int maxStamps) +{ + int i; + for (i = 0; i < maxStamps; i++) + { + if (metadata->stampData[STAMP_ID][i] == stamp[STAMP_ID]) + return TRUE; + if (metadata->stampData[STAMP_SPECIES][i] == stamp[STAMP_SPECIES]) + return TRUE; + } + + return FALSE; +} + +static bool32 ValidateStamp(const u16 *stamp) +{ + if (stamp[STAMP_ID] == 0) + return FALSE; + if (stamp[STAMP_SPECIES] == SPECIES_NONE) + return FALSE; + if (stamp[STAMP_SPECIES] >= NUM_SPECIES) + return FALSE; + return TRUE; +} + +static int GetNumStampsInSavedCard(void) +{ + struct WonderCard *card; + if (!ValidateSavedWonderCard()) + return 0; + + card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type != CARD_TYPE_STAMP) + return 0; + + return GetNumStampsInMetadata(&gSaveBlock1Ptr->mysteryGift.cardMetadata, card->maxStamps); +} + +bool32 MysteryGift_TrySaveStamp(const u16 *stamp) +{ + struct WonderCard *card = &gSaveBlock1Ptr->mysteryGift.card; + int maxStamps = card->maxStamps; + int i; + if (!ValidateStamp(stamp)) + return FALSE; + + if (IsStampInMetadata(&gSaveBlock1Ptr->mysteryGift.cardMetadata, stamp, maxStamps)) + return FALSE; + + for (i = 0; i < maxStamps; i++) + { + if (gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_ID][i] == 0 + && gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_SPECIES][i] == SPECIES_NONE) { - DestroyWonderCardResources(); + gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_ID][i] = stamp[STAMP_ID]; + gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_SPECIES][i] = stamp[STAMP_SPECIES]; return TRUE; } - else - { + } + + return FALSE; +} + +#define GAME_DATA_VALID_VAR 0x101 +#define GAME_DATA_VALID_GIFT_TYPE_1 (1 << 2) +#define GAME_DATA_VALID_GIFT_TYPE_2 (1 << 9) + +void MysteryGift_LoadLinkGameData(struct MysteryGiftLinkGameData *data, bool32 isWonderNews) +{ + int i; + CpuFill32(0, data, sizeof(*data)); + data->validationVar = GAME_DATA_VALID_VAR; + data->validationFlag1 = 1; + data->validationFlag2 = 1; + + if (isWonderNews) + { + // Despite setting these for News, they are + // only ever checked for Cards + data->validationGiftType1 = GAME_DATA_VALID_GIFT_TYPE_1 | 1; + data->validationGiftType2 = GAME_DATA_VALID_GIFT_TYPE_2 | 1; + } + else // Wonder Card + { + data->validationGiftType1 = GAME_DATA_VALID_GIFT_TYPE_1; + data->validationGiftType2 = GAME_DATA_VALID_GIFT_TYPE_2; + } + + if (ValidateSavedWonderCard()) + { + data->flagId = GetSavedWonderCard()->flagId; + data->cardMetadata = *GetSavedWonderCardMetadata(); + data->maxStamps = GetSavedWonderCard()->maxStamps; + } + else + { + data->flagId = 0; + } + + for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++) + data->questionnaireWords[i] = gSaveBlock1Ptr->mysteryGift.questionnaireWords[i]; + + CopyTrainerId(data->playerTrainerId, gSaveBlock2Ptr->playerTrainerId); + StringCopy(data->playerName, gSaveBlock2Ptr->playerName); + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) + data->easyChatProfile[i] = gSaveBlock1Ptr->easyChatProfile[i]; + + memcpy(data->romHeaderGameCode, RomHeaderGameCode, GAME_CODE_LENGTH); + data->romHeaderSoftwareVersion = RomHeaderSoftwareVersion; +} + +bool32 MysteryGift_ValidateLinkGameData(const struct MysteryGiftLinkGameData *data, bool32 isWonderNews) +{ + if (data->validationVar != GAME_DATA_VALID_VAR) + return FALSE; + + if (!(data->validationFlag1 & 1)) + return FALSE; + + if (!(data->validationFlag2 & 1)) + return FALSE; + + if (!isWonderNews) + { + if (!(data->validationGiftType1 & GAME_DATA_VALID_GIFT_TYPE_1)) return FALSE; - } - } - else - { - if (FadeOutFromWonderNews(arg1) != 0) - { - DestroyWonderNewsResources(); - return TRUE; - } - else - { + + if (!(data->validationGiftType2 & (GAME_DATA_VALID_GIFT_TYPE_2 | 0x180))) return FALSE; - } + } + + return TRUE; +} + +u32 MysteryGift_CompareCardFlags(const u16 *flagId, const struct MysteryGiftLinkGameData *data, const void *unused) +{ + // Has a Wonder Card already? + if (data->flagId == 0) + return HAS_NO_CARD; + + // Has this Wonder Card already? + if (*flagId == data->flagId) + return HAS_SAME_CARD; + + // Player has a different Wonder Card + return HAS_DIFF_CARD; +} + +// This is referenced by the Mystery Gift server, but the instruction it's referenced in is never used, +// so the return values here are never checked by anything. +u32 MysteryGift_CheckStamps(const u16 *stamp, const struct MysteryGiftLinkGameData *data, const void *unused) +{ + int stampsMissing = data->maxStamps - GetNumStampsInMetadata(&data->cardMetadata, data->maxStamps); + + // Has full stamp card? + if (stampsMissing == 0) + return 1; + + // Already has stamp? + if (IsStampInMetadata(&data->cardMetadata, stamp, data->maxStamps)) + return 3; + + // Only 1 empty stamp left? + if (stampsMissing == 1) + return 4; + + // This is a new stamp + return 2; +} + +bool32 MysteryGift_DoesQuestionnaireMatch(const struct MysteryGiftLinkGameData *data, const u16 *words) +{ + int i; + for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++) + { + if (data->questionnaireWords[i] != words[i]) + return FALSE; + } + + return TRUE; +} + +static int GetNumStampsInLinkData(const struct MysteryGiftLinkGameData *data) +{ + return GetNumStampsInMetadata(&data->cardMetadata, data->maxStamps); +} + +u16 MysteryGift_GetCardStatFromLinkData(const struct MysteryGiftLinkGameData *data, u32 stat) +{ + switch (stat) + { + case CARD_STAT_BATTLES_WON: + return data->cardMetadata.battlesWon; + case CARD_STAT_BATTLES_LOST: + return data->cardMetadata.battlesLost; + case CARD_STAT_NUM_TRADES: + return data->cardMetadata.numTrades; + case CARD_STAT_NUM_STAMPS: + return GetNumStampsInLinkData(data); + case CARD_STAT_MAX_STAMPS: + return data->maxStamps; + default: + AGB_ASSERT(0); + return 0; } } -static s32 mevent_message_prompt_discard(u8 * textState, u16 * windowId, bool32 cardOrNews) +static void IncrementCardStat(u32 statType) { - if (cardOrNews == 0) + struct WonderCard *card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_LINK_STAT) { - return mevent_message_print_and_prompt_yes_no(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen); - } - else - { - return mevent_message_print_and_prompt_yes_no(textState, windowId, TRUE, gText_OkayToDiscardNews); - } -} - -static bool32 mevent_message_was_thrown_away(u8 * textState, bool32 cardOrNews) -{ - if (cardOrNews == 0) - { - return MG_PrintTextOnWindow1AndWaitButton(textState, gText_WonderCardThrownAway); - } - else - { - return MG_PrintTextOnWindow1AndWaitButton(textState, gText_WonderNewsThrownAway); - } -} - -static bool32 mevent_save_game(u8 * state) -{ - switch (*state) - { - case 0: - AddTextPrinterToWindow1(gText_DataWillBeSaved); - (*state)++; - break; - case 1: - TrySavingData(SAVE_NORMAL); - (*state)++; - break; - case 2: - AddTextPrinterToWindow1(gText_SaveCompletedPressA); - (*state)++; - break; - case 3: - if (({JOY_NEW(A_BUTTON | B_BUTTON);})) + u16 *stat = NULL; + switch (statType) { - (*state)++; + case CARD_STAT_BATTLES_WON: + stat = &gSaveBlock1Ptr->mysteryGift.cardMetadata.battlesWon; + break; + case CARD_STAT_BATTLES_LOST: + stat = &gSaveBlock1Ptr->mysteryGift.cardMetadata.battlesLost; + break; + case CARD_STAT_NUM_TRADES: + stat = &gSaveBlock1Ptr->mysteryGift.cardMetadata.numTrades; + break; + case CARD_STAT_NUM_STAMPS: // Unused + case CARD_STAT_MAX_STAMPS: // Unused + break; + } + + if (stat == NULL) + { + AGB_ASSERT(0); + } + else if (++(*stat) > MAX_WONDER_CARD_STAT) + { + *stat = MAX_WONDER_CARD_STAT; + } + } +} + +u16 MysteryGift_GetCardStat(u32 stat) +{ + switch (stat) + { + case CARD_STAT_BATTLES_WON: + { + struct WonderCard *card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_LINK_STAT) + { + struct WonderCardMetadata *metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata; + return metadata->battlesWon; } break; - case 4: - *state = 0; - ClearTextWindow(); + } + case CARD_STAT_BATTLES_LOST: + { + struct WonderCard *card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_LINK_STAT) + { + struct WonderCardMetadata *metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata; + return metadata->battlesLost; + } + break; + } + case CARD_STAT_NUM_TRADES: + { + struct WonderCard *card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_LINK_STAT) + { + struct WonderCardMetadata *metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata; + return metadata->numTrades; + } + break; + } + case CARD_STAT_NUM_STAMPS: + { + struct WonderCard *card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_STAMP) + return GetNumStampsInSavedCard(); + break; + } + case CARD_STAT_MAX_STAMPS: + { + struct WonderCard *card = &gSaveBlock1Ptr->mysteryGift.card; + if (card->type == CARD_TYPE_STAMP) + return card->maxStamps; + break; + } + } + + AGB_ASSERT(0); + return 0; +} + +void MysteryGift_DisableStats(void) +{ + sStatsEnabled = FALSE; +} + +bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId) +{ + sStatsEnabled = FALSE; + if (flagId == 0) + return FALSE; + + if (!ValidateSavedWonderCard()) + return FALSE; + + if (gSaveBlock1Ptr->mysteryGift.card.flagId != flagId) + return FALSE; + + sStatsEnabled = TRUE; + return TRUE; +} + +void MysteryGift_TryIncrementStat(u32 stat, u32 trainerId) +{ + if (sStatsEnabled) + { + switch (stat) + { + case CARD_STAT_NUM_TRADES: + IncrementCardStatForNewTrainer(CARD_STAT_NUM_TRADES, + trainerId, + gSaveBlock1Ptr->mysteryGift.trainerIds[1], + ARRAY_COUNT(gSaveBlock1Ptr->mysteryGift.trainerIds[1])); + break; + case CARD_STAT_BATTLES_WON: + IncrementCardStatForNewTrainer(CARD_STAT_BATTLES_WON, + trainerId, + gSaveBlock1Ptr->mysteryGift.trainerIds[0], + ARRAY_COUNT(gSaveBlock1Ptr->mysteryGift.trainerIds[0])); + break; + case CARD_STAT_BATTLES_LOST: + IncrementCardStatForNewTrainer(CARD_STAT_BATTLES_LOST, + trainerId, + gSaveBlock1Ptr->mysteryGift.trainerIds[0], + ARRAY_COUNT(gSaveBlock1Ptr->mysteryGift.trainerIds[0])); + break; + default: + AGB_ASSERT(0); + break; + } + } +} + +static void ClearSavedTrainerIds(void) +{ + CpuFill32(0, gSaveBlock1Ptr->mysteryGift.trainerIds, sizeof(gSaveBlock1Ptr->mysteryGift.trainerIds)); +} + +// Returns TRUE if it's a new trainer id, FALSE if an existing one. +// In either case the given trainerId is saved in element 0 +static bool32 RecordTrainerId(u32 trainerId, u32 *trainerIds, int size) +{ + int i, j; + + for (i = 0; i < size; i++) + { + if (trainerIds[i] == trainerId) + break; + } + + if (i == size) + { + // New trainer, shift array and insert new id at front + for (j = size - 1; j > 0; j--) + trainerIds[j] = trainerIds[j - 1]; + + trainerIds[0] = trainerId; return TRUE; } - - return FALSE; -} - -static const u8 * mevent_message(u32 * a0, u8 a1, u8 cardOrNews, u32 msgId) -{ - const u8 * msg = NULL; - *a0 = 0; - - switch (msgId) - { - case 0: - *a0 = 0; - msg = gText_NothingSentOver; - break; - case 1: - *a0 = 0; - msg = gText_RecordUploadedViaWireless; - break; - case 2: - *a0 = 1; - msg = cardOrNews == 0 ? gText_WonderCardReceived : gText_WonderCardReceivedFrom; - break; - case 3: - *a0 = 1; - msg = cardOrNews == 0 ? gText_WonderNewsReceived : gText_WonderNewsReceivedFrom; - break; - case 4: - *a0 = 1; - msg = gText_NewStampReceived; - break; - case 5: - *a0 = 0; - msg = gText_AlreadyHadCard; - break; - case 6: - *a0 = 0; - msg = gText_AlreadyHadStamp; - break; - case 7: - *a0 = 0; - msg = gText_AlreadyHadNews; - break; - case 8: - *a0 = 0; - msg = gText_NoMoreRoomForStamps; - break; - case 9: - *a0 = 0; - msg = gText_CommunicationCanceled; - break; - case 10: - *a0 = 0; - msg = a1 == 0 ? gText_CantAcceptCardFromTrainer : gText_CantAcceptNewsFromTrainer; - break; - case 11: - *a0 = 0; - msg = gText_CommunicationError; - break; - case 12: - *a0 = 1; - msg = gText_NewTrainerReceived; - break; - case 13: - *a0 = 1; - break; - case 14: - *a0 = 0; - break; - } - - return msg; -} - -static bool32 PrintMGSuccessMessage(u8 * state, const u8 * arg1, u16 * arg2) -{ - switch (*state) - { - case 0: - if (arg1 != NULL) - { - AddTextPrinterToWindow1(arg1); - } - PlayFanfare(MUS_OBTAIN_ITEM); - *arg2 = 0; - (*state)++; - break; - case 1: - if (++(*arg2) > 0xF0) - { - (*state)++; - } - break; - case 2: - if (IsFanfareTaskInactive()) - { - *state = 0; - ClearTextWindow(); - return TRUE; - } - break; - } - return FALSE; -} - -static const u8 * mevent_message_stamp_card_etc_send_status(u32 * a0, u8 unused, u32 msgId) -{ - const u8 * result = gText_CommunicationError; - *a0 = 0; - switch (msgId) - { - case 0: - result = gText_NothingSentOver; - break; - case 1: - result = gText_RecordUploadedViaWireless; - break; - case 2: - result = gText_WonderCardSentTo; - *a0 = 1; - break; - case 3: - result = gText_WonderNewsSentTo; - *a0 = 1; - break; - case 4: - result = gText_StampSentTo; - break; - case 5: - result = gText_OtherTrainerHasCard; - break; - case 6: - result = gText_OtherTrainerHasStamp; - break; - case 7: - result = gText_OtherTrainerHasNews; - break; - case 8: - result = gText_NoMoreRoomForStamps; - break; - case 9: - result = gText_OtherTrainerCanceled; - break; - case 10: - result = gText_CantSendGiftToTrainer; - break; - case 11: - result = gText_CommunicationError; - break; - case 12: - result = gText_GiftSentTo; - break; - case 13: - result = gText_GiftSentTo; - break; - case 14: - result = gText_CantSendGiftToTrainer; - break; - } - return result; -} - -static bool32 PrintMGSendStatus(u8 * state, u16 * arg1, u8 arg2, u32 msgId) -{ - u32 flag; - const u8 * str = mevent_message_stamp_card_etc_send_status(&flag, arg2, msgId); - if (flag) - { - return PrintMGSuccessMessage(state, str, arg1); - } else { - return MG_PrintTextOnWindow1AndWaitButton(state, str); + // Existing trainer, shift back to old slot and move id to front + for (j = i; j > 0; j--) + trainerIds[j] = trainerIds[j - 1]; + + trainerIds[0] = trainerId; + return FALSE; } } -void task_add_00_mystery_gift(void) +static void IncrementCardStatForNewTrainer(u32 stat, u32 trainerId, u32 *trainerIds, int size) { - u8 taskId = CreateTask(task00_mystery_gift, 0); - struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data; - data->state = 0; - data->textState = 0; - data->unkA = 0; - data->unkB = 0; - data->IsCardOrNews = 0; - data->source = 0; - data->curPromptWindowId = 0; - data->unk2 = 0; - data->unk4 = 0; - data->unk6 = 0; - data->prevPromptWindowId = 0; - data->buffer = AllocZeroed(0x40); -} - -void task00_mystery_gift(u8 taskId) -{ - struct MysteryGiftTaskData *data = (void *)gTasks[taskId].data; - u32 sp0, flag; - const u8 *r1; - - switch (data->state) - { - case 0: - data->state = 1; - break; - case 1: - switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->curPromptWindowId, FALSE)) - { - case 0: - data->IsCardOrNews = 0; - if (ValidateReceivedWonderCard() == TRUE) - { - data->state = 18; - } - else - { - data->state = 2; - } - break; - case 1: - data->IsCardOrNews = 1; - if (ValidateReceivedWonderNews() == TRUE) - { - data->state = 18; - } - else - { - data->state = 2; - } - break; - case -2u: - data->state = 37; - break; - } - break; - case 2: - { - if (data->IsCardOrNews == 0) - { - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveCardNewOneInput)) - { - data->state = 3; - PrintMysteryGiftOrEReaderTopMenu(0, 1); - } - } - else - { - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveNewsNewOneInput)) - { - data->state = 3; - PrintMysteryGiftOrEReaderTopMenu(0, 1); - } - } - break; - } - case 3: - if (data->IsCardOrNews == 0) - { - AddTextPrinterToWindow1(gText_WhereShouldCardBeAccessed); - } - else - { - AddTextPrinterToWindow1(gText_WhereShouldNewsBeAccessed); - } - data->state = 4; - break; - case 4: - switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->curPromptWindowId, TRUE)) - { - case 0: - ClearTextWindow(); - data->state = 5; - data->source = 0; - break; - case 1: - ClearTextWindow(); - data->state = 5; - data->source = 1; - break; - case -2u: - ClearTextWindow(); - if (ValidateCardOrNews(data->IsCardOrNews)) - { - data->state = 18; - } - else - { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); - } - break; - } - break; - case 5: - *gStringVar1 = EOS; - *gStringVar2 = EOS; - *gStringVar3 = EOS; - - switch (data->IsCardOrNews) - { - case 0: - if (data->source == 1) - { - MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_CARD2); - } - else if (data->source == 0) - { - MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_CARD2); - } - break; - case 1: - if (data->source == 1) - { - MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_NEWS2); - } - else if (data->source == 0) - { - MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_NEWS2); - } - break; - } - data->state = 6; - break; - case 6: - if (gReceivedRemoteLinkPlayers != 0) - { - ClearScreenInBg0(TRUE); - data->state = 7; - mevent_client_do_init(data->IsCardOrNews); - } - else if (gSpecialVar_Result == LINKUP_FAILED) - { - ClearScreenInBg0(TRUE); - data->state = 3; - } - break; - case 7: - AddTextPrinterToWindow1(gText_Communicating); - data->state = 8; - break; - case 8: - switch (mevent_client_do_exec(&data->curPromptWindowId)) - { - case 6: - Rfu_SetCloseLinkCallback(); - data->prevPromptWindowId = data->curPromptWindowId; - data->state = 13; - break; - case 5: - memcpy(data->buffer, mevent_client_get_buffer(), 0x40); - mevent_client_inc_flag(); - break; - case 3: - data->state = 10; - break; - case 2: - data->state = 9; - break; - case 4: - data->state = 11; - StringCopy(gStringVar1, gLinkPlayers[0].name); - break; - } - break; - case 9: - flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer()); - switch (flag) - { - case 0: - mevent_client_set_param(0); - mevent_client_inc_flag(); - data->state = 7; - break; - case 1: - mevent_client_set_param(1); - mevent_client_inc_flag(); - data->state = 7; - break; - case -1u: - mevent_client_set_param(1); - mevent_client_inc_flag(); - data->state = 7; - break; - } - break; - case 10: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, mevent_client_get_buffer())) - { - mevent_client_inc_flag(); - data->state = 7; - } - break; - case 11: - flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard); - switch (flag) - { - case 0: - if (CheckReceivedGiftFromWonderCard() == TRUE) - { - data->state = 12; - } - else - { - mevent_client_set_param(0); - mevent_client_inc_flag(); - data->state = 7; - } - break; - case 1: - mevent_client_set_param(1); - mevent_client_inc_flag(); - data->state = 7; - break; - case -1u: - mevent_client_set_param(1); - mevent_client_inc_flag(); - data->state = 7; - break; - } - break; - case 12: - flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift); - switch (flag) - { - case 0: - mevent_client_set_param(0); - mevent_client_inc_flag(); - data->state = 7; - break; - case 1: - mevent_client_set_param(1); - mevent_client_inc_flag(); - data->state = 7; - break; - case -1u: - mevent_client_set_param(1); - mevent_client_inc_flag(); - data->state = 7; - break; - } - break; - case 13: - if (gReceivedRemoteLinkPlayers == 0) - { - DestroyWirelessStatusIndicatorSprite(); - data->state = 14; - } - break; - case 14: - if (PrintStringAndWait2Seconds(&data->textState, gText_CommunicationCompleted)) - { - if (data->source == 1) - { - StringCopy(gStringVar1, gLinkPlayers[0].name); - } - data->state = 15; - } - break; - case 15: - r1 = mevent_message(&sp0, data->IsCardOrNews, data->source, data->prevPromptWindowId); - if (r1 == NULL) - { - r1 = data->buffer; - } - if (sp0) - { - flag = PrintMGSuccessMessage(&data->textState, r1, &data->curPromptWindowId); - } - else - { - flag = MG_PrintTextOnWindow1AndWaitButton(&data->textState, r1); - } - if (flag) - { - if (data->prevPromptWindowId == 3) - { - if (data->source == 1) - { - GenerateRandomNews(1); - } - else - { - GenerateRandomNews(2); - } - } - if (!sp0) - { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); - } - else - { - data->state = 17; - } - } - break; - case 16: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError)) - { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); - } - break; - case 17: - if (mevent_save_game(&data->textState)) - { - data->state = 18; - } - break; - case 18: - if (HandleLoadWonderCardOrNews(&data->textState, data->IsCardOrNews)) - { - data->state = 20; - } - break; - case 20: - if (data->IsCardOrNews == 0) - { - if (({JOY_NEW(A_BUTTON);})) - { - data->state = 21; - } - if (({JOY_NEW(B_BUTTON);})) - { - data->state = 27; - } - } - else - { - switch (MENews_GetInput(gMain.newKeys)) - { - case 0: - MENews_RemoveScrollIndicatorArrowPair(); - data->state = 21; - break; - case 1: - data->state = 27; - break; - } - } - break; - case 21: - { - u32 result; - if (data->IsCardOrNews == 0) - { - if (WonderCard_Test_Unk_08_6()) - { - result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE); - } - else - { - result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE); - } - } - else - { - if (WonderNews_Test_Unk_02()) - { - result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE); - } - else - { - result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE); - } - } - switch (result) - { - case 0: - data->state = 28; - break; - case 1: - data->state = 29; - break; - case 2: - data->state = 22; - break; - case -2u: - if (data->IsCardOrNews == 1) - { - MENews_AddScrollIndicatorArrowPair(); - } - data->state = 20; - break; - } - break; - } - case 22: - switch (mevent_message_prompt_discard(&data->textState, &data->curPromptWindowId, data->IsCardOrNews)) - { - case 0: - if (data->IsCardOrNews == 0 && CheckReceivedGiftFromWonderCard() == TRUE) - { - data->state = 23; - } - else - { - data->state = 24; - } - break; - case 1: - data->state = 21; - break; - case -1: - data->state = 21; - break; - } - break; - case 23: - switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, TRUE, gText_HaventReceivedGiftOkayToDiscard)) - { - case 0: - data->state = 24; - break; - case 1: - data->state = 21; - break; - case -1u: - data->state = 21; - break; - } - break; - case 24: - if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1)) - { - DestroyNewsOrCard(data->IsCardOrNews); - data->state = 25; - } - break; - case 25: - if (mevent_save_game(&data->textState)) - { - data->state = 26; - } - break; - case 26: - if (mevent_message_was_thrown_away(&data->textState, data->IsCardOrNews)) - { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); - } - break; - case 27: - if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 0)) - { - data->state = 0; - } - break; - case 28: - if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1)) - { - data->state = 3; - } - break; - case 29: - if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1)) - { - switch (data->IsCardOrNews) - { - case 0: - MEvent_CreateTask_Leader(ACTIVITY_WONDER_CARD2); - break; - case 1: - MEvent_CreateTask_Leader(ACTIVITY_WONDER_NEWS2); - break; - } - data->source = 1; - data->state = 30; - } - break; - case 30: - if (gReceivedRemoteLinkPlayers != 0) - { - ClearScreenInBg0(1); - data->state = 31; - } - else if (gSpecialVar_Result == LINKUP_FAILED) - { - ClearScreenInBg0(1); - data->state = 18; - } - break; - case 31: - *gStringVar1 = EOS; - *gStringVar2 = EOS; - *gStringVar3 = EOS; - - if (data->IsCardOrNews == 0) - { - AddTextPrinterToWindow1(gText_SendingWonderCard); - mevent_srv_new_wcard(); - } - else - { - AddTextPrinterToWindow1(gText_SendingWonderNews); - mevent_srv_init_wnews(); - } - data->state = 32; - break; - case 32: - if (mevent_srv_common_do_exec(&data->curPromptWindowId) == 3) - { - data->prevPromptWindowId = data->curPromptWindowId; - data->state = 33; - } - break; - case 33: - Rfu_SetCloseLinkCallback(); - StringCopy(gStringVar1, gLinkPlayers[1].name); - data->state = 34; - break; - case 34: - if (gReceivedRemoteLinkPlayers == 0) - { - DestroyWirelessStatusIndicatorSprite(); - data->state = 35; - } - break; - case 35: - if (PrintMGSendStatus(&data->textState, &data->curPromptWindowId, data->source, data->prevPromptWindowId)) - { - if (data->source == 1 && data->prevPromptWindowId == 3) - { - GenerateRandomNews(3); - data->state = 17; - } - else - { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); - } - } - break; - case 36: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError)) - { - data->state = 0; - PrintMysteryGiftOrEReaderTopMenu(0, 0); - } - break; - case 37: - CloseLink(); - Free(data->buffer); - DestroyTask(taskId); - SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen); - break; - } -} - -u16 GetMysteryGiftBaseBlock(void) -{ - return 0x1A9; -} - -void bgid_upload_textbox_1(u8 bgId) -{ - DecompressAndLoadBgGfxUsingHeap(bgId, gUnkTextboxBorderGfx, 0x100, 0, 0); + if (RecordTrainerId(trainerId, trainerIds, size)) + IncrementCardStat(stat); } diff --git a/src/mystery_gift_client.c b/src/mystery_gift_client.c new file mode 100644 index 0000000000..567751bad3 --- /dev/null +++ b/src/mystery_gift_client.c @@ -0,0 +1,302 @@ +#include "global.h" +#include "malloc.h" +#include "decompress.h" +#include "overworld.h" +#include "script.h" +#include "battle_tower.h" +#include "mystery_gift.h" +#include "mystery_event_script.h" +#include "mystery_gift_client.h" + +enum { + FUNC_INIT, + FUNC_DONE, + FUNC_RECV, + FUNC_SEND, + FUNC_RUN, + FUNC_WAIT, + FUNC_RUN_MEVENT, + FUNC_RUN_BUFFER, +}; + +EWRAM_DATA static struct MysteryGiftClient * sClient = NULL; + +static void MysteryGiftClient_Init(struct MysteryGiftClient *, u32, u32); +static u32 MysteryGiftClient_CallFunc(struct MysteryGiftClient *); +static void MysteryGiftClient_Free(struct MysteryGiftClient *); + +extern const struct MysteryGiftClientCmd gMysteryGiftClientScript_Init[]; + +void MysteryGiftClient_Create(bool32 isWonderNews) +{ + sClient = AllocZeroed(sizeof(*sClient)); + MysteryGiftClient_Init(sClient, 1, 0); + sClient->isWonderNews = isWonderNews; +} + +u32 MysteryGiftClient_Run(u16 * endVal) +{ + u32 result; + if (sClient == NULL) + return CLI_RET_END; + result = MysteryGiftClient_CallFunc(sClient); + if (result == CLI_RET_END) + { + *endVal = sClient->param; + MysteryGiftClient_Free(sClient); + FREE_AND_SET_NULL(sClient); + } + return result; +} + +void MysteryGiftClient_AdvanceState(void) +{ + sClient->funcState++; +} + +void * MysteryGiftClient_GetMsg(void) +{ + return sClient->msg; +} + +void MysteryGiftClient_SetParam(u32 val) +{ + sClient->param = val; +} + +static void MysteryGiftClient_Init(struct MysteryGiftClient * client, u32 sendPlayerId, u32 recvPlayerId) +{ + client->unused = 0; + client->funcId = FUNC_INIT; + client->funcState = 0; + client->sendBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE); + client->recvBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE); + client->script = AllocZeroed(MG_LINK_BUFFER_SIZE); + client->msg = AllocZeroed(CLIENT_MAX_MSG_SIZE); + MysteryGiftLink_Init(&client->link, sendPlayerId, recvPlayerId); +} + +static void MysteryGiftClient_Free(struct MysteryGiftClient * client) +{ + Free(client->sendBuffer); + Free(client->recvBuffer); + Free(client->script); + Free(client->msg); +} + +static void MysteryGiftClient_CopyRecvScript(struct MysteryGiftClient * client) +{ + memcpy(client->script, client->recvBuffer, MG_LINK_BUFFER_SIZE); + client->cmdidx = 0; +} + +static void MysteryGiftClient_InitSendWord(struct MysteryGiftClient * client, u32 ident, u32 word) +{ + CpuFill32(0, client->sendBuffer, MG_LINK_BUFFER_SIZE); + *(u32 *)client->sendBuffer = word; + MysteryGiftLink_InitSend(&client->link, ident, client->sendBuffer, sizeof(word)); +} + +static u32 Client_Init(struct MysteryGiftClient * client) +{ + memcpy(client->script, gMysteryGiftClientScript_Init, MG_LINK_BUFFER_SIZE); + client->cmdidx = 0; + client->funcId = FUNC_RUN; + client->funcState = 0; + return CLI_RET_INIT; +} + +static u32 Client_Done(struct MysteryGiftClient * client) +{ + return CLI_RET_END; +} + + +static u32 Client_Recv(struct MysteryGiftClient * client) +{ + if (MysteryGiftLink_Recv(&client->link)) + { + client->funcId = FUNC_RUN; + client->funcState = 0; + } + return CLI_RET_ACTIVE; +} + +static u32 Client_Send(struct MysteryGiftClient * client) +{ + if (MysteryGiftLink_Send(&client->link)) + { + client->funcId = FUNC_RUN; + client->funcState = 0; + } + return CLI_RET_ACTIVE; +} + +static u32 Client_Run(struct MysteryGiftClient * client) +{ + // process command + struct MysteryGiftClientCmd * cmd = &client->script[client->cmdidx]; + client->cmdidx++; + switch (cmd->instr) + { + case CLI_NONE: + break; + case CLI_RETURN: + client->param = cmd->parameter; // Set for endVal in MysteryGiftClient_Run + client->funcId = FUNC_DONE; + client->funcState = 0; + break; + case CLI_RECV: + MysteryGiftLink_InitRecv(&client->link, cmd->parameter, client->recvBuffer); + client->funcId = FUNC_RECV; + client->funcState = 0; + break; + case CLI_SEND_LOADED: + // Send without a MysteryGiftLink_InitSend + // Sends whatever has been loaded already + client->funcId = FUNC_SEND; + client->funcState = 0; + break; + case CLI_SEND_READY_END: + MysteryGiftLink_InitSend(&client->link, MG_LINKID_READY_END, client->sendBuffer, 0); + client->funcId = FUNC_SEND; + client->funcState = 0; + break; + case CLI_SEND_STAT: + MysteryGiftClient_InitSendWord(client, MG_LINKID_GAME_STAT, GetGameStat(cmd->parameter)); + client->funcId = FUNC_SEND; + client->funcState = 0; + break; + case CLI_COPY_RECV_IF_N: + if (client->param == FALSE) + MysteryGiftClient_CopyRecvScript(client); + break; + case CLI_COPY_RECV_IF: + if (client->param == TRUE) + MysteryGiftClient_CopyRecvScript(client); + break; + case CLI_COPY_RECV: + MysteryGiftClient_CopyRecvScript(client); + break; + case CLI_YES_NO: + memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE); + client->funcId = FUNC_WAIT; + client->funcState = 0; + return CLI_RET_YES_NO; + case CLI_PRINT_MSG: + memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE); + client->funcId = FUNC_WAIT; + client->funcState = 0; + return CLI_RET_PRINT_MSG; + case CLI_COPY_MSG: + memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE); + client->funcId = FUNC_WAIT; + client->funcState = 0; + return CLI_RET_COPY_MSG; + case CLI_ASK_TOSS: + client->funcId = FUNC_WAIT; + client->funcState = 0; + return CLI_RET_ASK_TOSS; + case CLI_LOAD_GAME_DATA: + MysteryGift_LoadLinkGameData(client->sendBuffer, client->isWonderNews); + MysteryGiftLink_InitSend(&client->link, MG_LINKID_GAME_DATA, client->sendBuffer, sizeof(struct MysteryGiftLinkGameData)); + break; + case CLI_LOAD_TOSS_RESPONSE: + // param here is set by MG_STATE_CLIENT_ASK_TOSS or MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED + MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, client->param); + break; + case CLI_SAVE_CARD: + SaveWonderCard(client->recvBuffer); + break; + case CLI_SAVE_NEWS: + if (!IsWonderNewsSameAsSaved(client->recvBuffer)) + { + SaveWonderNews(client->recvBuffer); + MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, FALSE); + } + else + { + // Wonder News has already been saved (or is invalid). + // Prepare a signal to indicate it was not saved. + MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, TRUE); + } + break; + case CLI_RUN_MEVENT_SCRIPT: + client->funcId = FUNC_RUN_MEVENT; + client->funcState = 0; + break; + case CLI_SAVE_STAMP: + MysteryGift_TrySaveStamp(client->recvBuffer); + break; + case CLI_SAVE_RAM_SCRIPT: + InitRamScript_NoObjectEvent(client->recvBuffer, sizeof(struct RamScriptData)); + break; + case CLI_RECV_EREADER_TRAINER: + memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, client->recvBuffer, sizeof(gSaveBlock2Ptr->frontier.ereaderTrainer)); + ValidateEReaderTrainer(); + break; + case CLI_RUN_BUFFER_SCRIPT: + memcpy(gDecompressionBuffer, client->recvBuffer, MG_LINK_BUFFER_SIZE); + client->funcId = FUNC_RUN_BUFFER; + client->funcState = 0; + break; + } + + return CLI_RET_ACTIVE; +} + +static u32 Client_Wait(struct MysteryGiftClient * client) +{ + if (client->funcState) + { + client->funcId = FUNC_RUN; + client->funcState = 0; + } + return CLI_RET_ACTIVE; +} + +static u32 Client_RunMysteryEventScript(struct MysteryGiftClient * client) +{ + switch (client->funcState) + { + case 0: + InitMysteryEventScriptContext(client->recvBuffer); + client->funcState++; + break; + case 1: + if (!RunMysteryEventScriptContextCommand(&client->param)) + { + client->funcId = FUNC_RUN; + client->funcState = 0; + } + break; + } + return CLI_RET_ACTIVE; +} + +static u32 Client_RunBufferScript(struct MysteryGiftClient * client) +{ + // exec arbitrary code + u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; + if (func(&client->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) + { + client->funcId = FUNC_RUN; + client->funcState = 0; + } + return CLI_RET_ACTIVE; +} + +static u32 MysteryGiftClient_CallFunc(struct MysteryGiftClient * client) +{ + u32 (*funcs[])(struct MysteryGiftClient *) = { + [FUNC_INIT] = Client_Init, + [FUNC_DONE] = Client_Done, + [FUNC_RECV] = Client_Recv, + [FUNC_SEND] = Client_Send, + [FUNC_RUN] = Client_Run, + [FUNC_WAIT] = Client_Wait, + [FUNC_RUN_MEVENT] = Client_RunMysteryEventScript, + [FUNC_RUN_BUFFER] = Client_RunBufferScript + }; + return funcs[client->funcId](client); +} diff --git a/src/mystery_gift_link.c b/src/mystery_gift_link.c new file mode 100644 index 0000000000..55f4b78527 --- /dev/null +++ b/src/mystery_gift_link.c @@ -0,0 +1,222 @@ +#include "global.h" +#include "malloc.h" +#include "decompress.h" +#include "util.h" +#include "link.h" +#include "link_rfu.h" +#include "overworld.h" +#include "script.h" +#include "battle_tower.h" +#include "mystery_event_script.h" +#include "mystery_gift.h" +#include "mystery_gift_link.h" + +/* + Handles the link connection functions used by the Mystery Gift client/server. + Note: MysteryGiftLink is shortened to MGL for internal functions. +*/ + +struct SendRecvHeader +{ + u16 ident; + u16 crc; + u16 size; +}; + +static u32 MGL_Receive(struct MysteryGiftLink *); +static u32 MGL_Send(struct MysteryGiftLink *); + +u32 MysteryGiftLink_Recv(struct MysteryGiftLink * link) +{ + return link->recvFunc(link); +} + +u32 MysteryGiftLink_Send(struct MysteryGiftLink * link) +{ + return link->sendFunc(link); +} + +void MysteryGiftLink_Init(struct MysteryGiftLink * link, u32 sendPlayerId, u32 recvPlayerId) +{ + link->sendPlayerId = sendPlayerId; + link->recvPlayerId = recvPlayerId; + link->state = 0; + link->sendCRC = 0; + link->sendSize = 0; + link->sendCounter = 0; + link->recvCRC = 0; + link->recvSize = 0; + link->recvCounter = 0; + link->sendBuffer = NULL; + link->recvBuffer = NULL; + link->sendFunc = MGL_Send; + link->recvFunc = MGL_Receive; +} + +void MysteryGiftLink_InitSend(struct MysteryGiftLink * link, u32 ident, const void * src, u32 size) +{ + link->state = 0; + link->sendIdent = ident; + link->sendCounter = 0; + link->sendCRC = 0; + if (size != 0) + link->sendSize = size; + else + link->sendSize = MG_LINK_BUFFER_SIZE; + link->sendBuffer = src; +} + +void MysteryGiftLink_InitRecv(struct MysteryGiftLink * link, u32 ident, void * dest) +{ + link->state = 0; + link->recvIdent = ident; + link->recvCounter = 0; + link->recvCRC = 0; + link->recvSize = 0; + link->recvBuffer = dest; +} + +static void MGL_ReceiveBlock(u32 playerId, void * dest, size_t size) +{ + memcpy(dest, gBlockRecvBuffer[playerId], size); +} + +static bool32 MGL_HasReceived(u32 playerId) +{ + if ((GetBlockReceivedStatus() >> playerId) & 1) + return TRUE; + else + return FALSE; +} + +static void MGL_ResetReceived(u32 playerId) +{ + ResetBlockReceivedFlag(playerId); +} + +static bool32 MGL_Receive(struct MysteryGiftLink * link) +{ + struct SendRecvHeader header; + + switch (link->state) + { + case 0: + if (MGL_HasReceived(link->recvPlayerId)) + { + MGL_ReceiveBlock(link->recvPlayerId, &header, sizeof(header)); + link->recvSize = header.size; + link->recvCRC = header.crc; + if (link->recvSize > MG_LINK_BUFFER_SIZE) + { + LinkRfu_FatalError(); + return FALSE; + } + else if (link->recvIdent != header.ident) + { + LinkRfu_FatalError(); + return FALSE; + } + else + { + link->recvCounter = 0; + MGL_ResetReceived(link->recvPlayerId); + link->state++; + } + } + break; + case 1: + if (MGL_HasReceived(link->recvPlayerId)) + { + size_t blocksize = link->recvCounter * 252; + if (link->recvSize - blocksize <= 252) + { + MGL_ReceiveBlock(link->recvPlayerId, link->recvBuffer + blocksize, link->recvSize - blocksize); + link->recvCounter++; + link->state++; + } + else + { + MGL_ReceiveBlock(link->recvPlayerId, link->recvBuffer + blocksize, 252); + link->recvCounter++; + } + MGL_ResetReceived(link->recvPlayerId); + } + break; + case 2: + if (CalcCRC16WithTable(link->recvBuffer, link->recvSize) != link->recvCRC) + { + LinkRfu_FatalError(); + return FALSE; + } + else + { + link->state = 0; + return TRUE; + } + break; + } + + return FALSE; +} + +static bool32 MGL_Send(struct MysteryGiftLink * link) +{ + struct SendRecvHeader header; + + switch (link->state) + { + case 0: + if (IsLinkTaskFinished()) + { + header.ident = link->sendIdent; + header.size = link->sendSize; + header.crc = CalcCRC16WithTable(link->sendBuffer, link->sendSize); + link->sendCRC = header.crc; + link->sendCounter = 0; + SendBlock(0, &header, sizeof(header)); + link->state++; + } + break; + case 1: + if (IsLinkTaskFinished()) + { + if (MGL_HasReceived(link->sendPlayerId)) + { + size_t blocksize; + MGL_ResetReceived(link->sendPlayerId); + blocksize = 252 * link->sendCounter; + if (link->sendSize - blocksize <= 252) + { + SendBlock(0, link->sendBuffer + blocksize, link->sendSize - blocksize); + link->sendCounter++; + link->state++; + } + else + { + SendBlock(0, link->sendBuffer + blocksize, 252); + link->sendCounter++; + } + } + } + break; + case 2: + if (IsLinkTaskFinished()) + { + if (CalcCRC16WithTable(link->sendBuffer, link->sendSize) != link->sendCRC) + LinkRfu_FatalError(); + else + link->state++; + } + break; + case 3: + if (MGL_HasReceived(link->sendPlayerId)) + { + MGL_ResetReceived(link->sendPlayerId); + link->state = 0; + return TRUE; + } + break; + } + + return FALSE; +} diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c new file mode 100644 index 0000000000..62f12a5cfc --- /dev/null +++ b/src/mystery_gift_menu.c @@ -0,0 +1,1618 @@ +#include "global.h" +#include "main.h" +#include "text.h" +#include "task.h" +#include "malloc.h" +#include "gpu_regs.h" +#include "scanline_effect.h" +#include "text_window.h" +#include "bg.h" +#include "window.h" +#include "strings.h" +#include "text_window.h" +#include "menu.h" +#include "palette.h" +#include "constants/songs.h" +#include "sound.h" +#include "mystery_gift_menu.h" +#include "union_room.h" +#include "title_screen.h" +#include "ereader_screen.h" +#include "international_string_util.h" +#include "list_menu.h" +#include "string_util.h" +#include "mystery_gift.h" +#include "mystery_gift_view.h" +#include "save.h" +#include "link.h" +#include "mystery_gift_client.h" +#include "mystery_gift_server.h" +#include "event_data.h" +#include "link_rfu.h" +#include "wonder_news.h" +#include "constants/cable_club.h" + +#define LIST_MENU_TILE_NUM 10 +#define LIST_MENU_PAL_NUM 224 + +static void LoadMysteryGiftTextboxBorder(u8 bgId); +static void CreateMysteryGiftTask(void); +static void Task_MysteryGift(u8 taskId); + +EWRAM_DATA static u8 sDownArrowCounterAndYCoordIdx[8] = {}; +EWRAM_DATA bool8 gGiftIsFromEReader = FALSE; + +static const u16 sTextboxBorder_Pal[] = INCBIN_U16("graphics/interface/mystery_gift_textbox_border.gbapal"); +static const u32 sTextboxBorder_Gfx[] = INCBIN_U32("graphics/interface/mystery_gift_textbox_border.4bpp.lz"); + +struct MysteryGiftTaskData +{ + u16 var; // Multipurpose + u16 unused1; + u16 unused2; + u16 unused3; + u8 state; + u8 textState; + u8 unused4; + u8 unused5; + bool8 isWonderNews; + bool8 sourceIsFriend; + u8 msgId; + u8 *clientMsg; +}; + +static const struct BgTemplate sBGTemplates[] = { + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 15, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 14, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 13, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 12, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +static const struct WindowTemplate sMainWindows[] = { + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 12, + .baseBlock = 0x0013 + }, { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 28, + .height = 4, + .paletteNum = 12, + .baseBlock = 0x004f + }, { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 15, + .width = 30, + .height = 5, + .paletteNum = 13, + .baseBlock = 0x004f + }, + DUMMY_WIN_TEMPLATE +}; + +static const struct WindowTemplate sWindowTemplate_YesNoMsg_Wide = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 28, + .height = 4, + .paletteNum = 12, + .baseBlock = 0x00e5 +}; + +static const struct WindowTemplate sWindowTemplate_YesNoMsg = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 20, + .height = 4, + .paletteNum = 12, + .baseBlock = 0x00e5 +}; + +static const struct WindowTemplate sWindowTemplate_GiftSelect = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 19, + .height = 4, + .paletteNum = 12, + .baseBlock = 0x00e5 +}; + +static const struct WindowTemplate sWindowTemplate_ThreeOptions = { + .bg = 0, + .tilemapLeft = 8, + .tilemapTop = 6, + .width = 14, + .height = 6, + .paletteNum = 12, + .baseBlock = 0x0155 +}; + +static const struct WindowTemplate sWindowTemplate_YesNoBox = { + .bg = 0, + .tilemapLeft = 23, + .tilemapTop = 15, + .width = 6, + .height = 4, + .paletteNum = 12, + .baseBlock = 0x0155 +}; + +static const struct WindowTemplate sWindowTemplate_GiftSelect_3Options = { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 11, + .width = 7, + .height = 8, + .paletteNum = 12, + .baseBlock = 0x0155 +}; + +static const struct WindowTemplate sWindowTemplate_GiftSelect_2Options = { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 13, + .width = 7, + .height = 6, + .paletteNum = 12, + .baseBlock = 0x0155 +}; + +static const struct WindowTemplate sWindowTemplate_GiftSelect_1Option = { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 15, + .width = 7, + .height = 4, + .paletteNum = 12, + .baseBlock = 0x0155 +}; + +static const struct ListMenuItem sListMenuItems_CardsOrNews[] = { + { gText_WonderCards, 0 }, + { gText_WonderNews, 1 }, + { gText_Exit3, LIST_CANCEL } +}; + +static const struct ListMenuItem sListMenuItems_WirelessOrFriend[] = { + { gText_WirelessCommunication, 0 }, + { gText_Friend2, 1 }, + { gText_Cancel2, LIST_CANCEL } +}; + +static const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = { + .items = NULL, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 3, + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = FONT_NORMAL, + .cursorKind = 0 +}; + +static const struct ListMenuItem sListMenuItems_ReceiveSendToss[] = { + { gText_Receive, 0 }, + { gText_Send, 1 }, + { gText_Toss, 2 }, + { gText_Cancel2, LIST_CANCEL } +}; + +static const struct ListMenuItem sListMenuItems_ReceiveToss[] = { + { gText_Receive, 0 }, + { gText_Toss, 2 }, + { gText_Cancel2, LIST_CANCEL } +}; + +static const struct ListMenuItem sListMenuItems_ReceiveSend[] = { + { gText_Receive, 0 }, + { gText_Send, 1 }, + { gText_Cancel2, LIST_CANCEL } +}; + +static const struct ListMenuItem sListMenuItems_Receive[] = { + { gText_Receive, 0 }, + { gText_Cancel2, LIST_CANCEL } +}; + +static const struct ListMenuTemplate sListMenu_ReceiveSendToss = { + .items = sListMenuItems_ReceiveSendToss, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 4, + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = FONT_NORMAL, + .cursorKind = 0 +}; + +static const struct ListMenuTemplate sListMenu_ReceiveToss = { + .items = sListMenuItems_ReceiveToss, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 3, + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = FONT_NORMAL, + .cursorKind = 0 +}; + +static const struct ListMenuTemplate sListMenu_ReceiveSend = { + .items = sListMenuItems_ReceiveSend, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 3, + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = FONT_NORMAL, + .cursorKind = 0 +}; + +static const struct ListMenuTemplate sListMenu_Receive = { + .items = sListMenuItems_Receive, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 2, + .maxShowed = 2, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = FONT_NORMAL, + .cursorKind = 0 +}; + +static const u8 *const sUnusedMenuTexts[] = { + gText_VarietyOfEventsImportedWireless, + gText_WonderCardsInPossession, + gText_ReadNewsThatArrived, + gText_ReturnToTitle +}; + +ALIGNED(2) static const u8 sTextColors_TopMenu[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; +ALIGNED(2) static const u8 sTextColors_TopMenu_Copy[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; +ALIGNED(2) static const u8 sMG_Ereader_TextColor_2[] = { TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY }; + +static void VBlankCB_MysteryGiftEReader(void) +{ + ProcessSpriteCopyRequests(); + LoadOam(); + TransferPlttBuffer(); +} + +void CB2_MysteryGiftEReader(void) +{ + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); +} + +static bool32 HandleMysteryGiftOrEReaderSetup(s32 isEReader) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + ResetPaletteFade(); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + ScanlineEffect_Stop(); + ResetBgsAndClearDma3BusyFlags(0); + + InitBgsFromTemplates(0, sBGTemplates, ARRAY_COUNT(sBGTemplates)); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); + + SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(2, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); + + LoadMysteryGiftTextboxBorder(3); + InitWindows(sMainWindows); + DeactivateAllTextPrinters(); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + gMain.state++; + break; + case 1: + LoadPalette(sTextboxBorder_Pal, 0, 0x20); + LoadPalette(GetTextWindowPalette(2), 0xd0, 0x20); + Menu_LoadStdPalAt(0xC0); + LoadUserWindowBorderGfx(0, 0xA, 0xE0); + LoadUserWindowBorderGfx_(0, 0x1, 0xF0); + FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 0x11); + FillBgTilemapBufferRect(1, 0x000, 0, 0, 32, 32, 0x11); + FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x11); + MG_DrawCheckerboardPattern(3); + PrintMysteryGiftOrEReaderTopMenu(isEReader, FALSE); + gMain.state++; + break; + case 2: + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + gMain.state++; + break; + case 3: + ShowBg(0); + ShowBg(3); + PlayBGM(MUS_RG_MYSTERY_GIFT); + SetVBlankCallback(VBlankCB_MysteryGiftEReader); + EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); + return TRUE; + } + + return FALSE; +} + +void CB2_InitMysteryGift(void) +{ + if (HandleMysteryGiftOrEReaderSetup(FALSE)) + { + SetMainCallback2(CB2_MysteryGiftEReader); + gGiftIsFromEReader = FALSE; + CreateMysteryGiftTask(); + } + RunTasks(); +} + +void CB2_InitEReader(void) +{ + if (HandleMysteryGiftOrEReaderSetup(TRUE)) + { + SetMainCallback2(CB2_MysteryGiftEReader); + gGiftIsFromEReader = TRUE; + CreateEReaderTask(); + } +} + +void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void) +{ + gGiftIsFromEReader = FALSE; + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(0)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(2)); + Free(GetBgTilemapBuffer(3)); + SetMainCallback2(CB2_InitTitleScreen); +} + +void PrintMysteryGiftOrEReaderTopMenu(bool8 isEReader, bool32 useCancel) +{ + const u8 *header; + const u8 *options; + FillWindowPixelBuffer(0, 0); + if (!isEReader) + { + header = gText_MysteryGift; + options = !useCancel ? gText_PickOKExit : gText_PickOKCancel; + } + else + { + header = gJPText_MysteryGift; + options = gJPText_DecideStop; + } + + AddTextPrinterParameterized4(0, FONT_NORMAL, 4, 1, 0, 0, sTextColors_TopMenu, TEXT_SKIP_DRAW, header); + AddTextPrinterParameterized4(0, FONT_SMALL, GetStringRightAlignXOffset(FONT_SMALL, options, 0xDE), 1, 0, 0, sTextColors_TopMenu, TEXT_SKIP_DRAW, options); + CopyWindowToVram(0, COPYWIN_GFX); + PutWindowTilemap(0); +} + +void MG_DrawTextBorder(u8 windowId) +{ + DrawTextBorderOuter(windowId, 0x01, 0xF); +} + +void MG_DrawCheckerboardPattern(u32 bg) +{ + s32 i = 0, j; + + FillBgTilemapBufferRect(bg, 0x003, 0, 0, 32, 2, 0x11); + + for (i = 0; i < 18; i++) + { + for (j = 0; j < 32; j++) + { + if ((i & 1) != (j & 1)) + FillBgTilemapBufferRect(bg, 1, j, i + 2, 1, 1, 0x11); + else + FillBgTilemapBufferRect(bg, 2, j, i + 2, 1, 1, 0x11); + } + } +} + +static void ClearScreenInBg0(bool32 ignoreTopTwoRows) +{ + switch (ignoreTopTwoRows) + { + case 0: + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x11); + break; + case 1: + FillBgTilemapBufferRect(0, 0, 0, 2, 32, 30, 0x11); + break; + } + CopyBgTilemapBufferToVram(0); +} + +void AddTextPrinterToWindow1(const u8 *str) +{ + StringExpandPlaceholders(gStringVar4, str); + FillWindowPixelBuffer(1, 0x11); + AddTextPrinterParameterized4(1, FONT_NORMAL, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); + DrawTextBorderOuter(1, 0x001, 0xF); + PutWindowTilemap(1); + CopyWindowToVram(1, COPYWIN_FULL); +} + +static void ClearTextWindow(void) +{ + rbox_fill_rectangle(1); + ClearWindowTilemap(1); + CopyWindowToVram(1, COPYWIN_MAP); +} + +#define DOWN_ARROW_X 208 +#define DOWN_ARROW_Y 20 + +bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str) +{ + switch (*textState) + { + case 0: + AddTextPrinterToWindow1(str); + (*textState)++; + break; + case 1: + DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + if (({JOY_NEW(A_BUTTON | B_BUTTON);})) + (*textState)++; + break; + case 2: + DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + *textState = 0; + ClearTextWindow(); + return TRUE; + case 0xFF: + *textState = 2; + return FALSE; + } + return FALSE; +} + +static void HideDownArrow(void) +{ + DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); +} + +static void ShowDownArrow(void) +{ + DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); +} + +// Unused +static bool32 HideDownArrowAndWaitButton(u8 *textState) +{ + switch (*textState) + { + case 0: + HideDownArrow(); + if (JOY_NEW(A_BUTTON | B_BUTTON)) + (*textState)++; + break; + case 1: + ShowDownArrow(); + *textState = 0; + return TRUE; + } + return FALSE; +} + +static bool32 PrintStringAndWait2Seconds(u8 *counter, const u8 *str) +{ + if (*counter == 0) + AddTextPrinterToWindow1(str); + + if (++(*counter) > 120) + { + *counter = 0; + ClearTextWindow(); + return TRUE; + } + else + { + return FALSE; + } +} + +static u32 MysteryGift_HandleThreeOptionMenu(u8 *unused0, u16 * unused1, u8 whichMenu) +{ + struct ListMenuTemplate listMenuTemplate = sListMenuTemplate_ThreeOptions; + struct WindowTemplate windowTemplate = sWindowTemplate_ThreeOptions; + s32 width; + s32 response; + + if (whichMenu == 0) + listMenuTemplate.items = sListMenuItems_CardsOrNews; + else + listMenuTemplate.items = sListMenuItems_WirelessOrFriend; + + width = Intl_GetListMenuWidth(&listMenuTemplate); + if (width & 1) + width++; + + windowTemplate.width = width; + if (width < 30) + windowTemplate.tilemapLeft = (30 - width) / 2; + else + windowTemplate.tilemapLeft = 0; + + response = DoMysteryGiftListMenu(&windowTemplate, &listMenuTemplate, 1, LIST_MENU_TILE_NUM, LIST_MENU_PAL_NUM); + if (response != LIST_NOTHING_CHOSEN) + { + ClearWindowTilemap(2); + CopyWindowToVram(2, COPYWIN_MAP); + } + return response; +} + +s8 DoMysteryGiftYesNo(u8 *textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 *str) +{ + struct WindowTemplate windowTemplate; + s8 input; + + switch (*textState) + { + case 0: + // Print question message + StringExpandPlaceholders(gStringVar4, str); + if (yesNoBoxPlacement == 0) + *windowId = AddWindow(&sWindowTemplate_YesNoMsg_Wide); + else + *windowId = AddWindow(&sWindowTemplate_YesNoMsg); + FillWindowPixelBuffer(*windowId, 0x11); + AddTextPrinterParameterized4(*windowId, FONT_NORMAL, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); + DrawTextBorderOuter(*windowId, 0x001, 0x0F); + CopyWindowToVram(*windowId, COPYWIN_GFX); + PutWindowTilemap(*windowId); + (*textState)++; + break; + case 1: + // Create Yes/No + windowTemplate = sWindowTemplate_YesNoBox; + if (yesNoBoxPlacement == 0) + windowTemplate.tilemapTop = 9; + else + windowTemplate.tilemapTop = 15; + CreateYesNoMenu(&windowTemplate, 10, 14, 0); + (*textState)++; + break; + case 2: + // Handle Yes/No input + input = Menu_ProcessInputNoWrapClearOnChoose(); + if (input == MENU_B_PRESSED || input == 0 || input == 1) + { + *textState = 0; + rbox_fill_rectangle(*windowId); + ClearWindowTilemap(*windowId); + CopyWindowToVram(*windowId, COPYWIN_MAP); + RemoveWindow(*windowId); + return input; + } + break; + case 0xFF: + *textState = 0; + rbox_fill_rectangle(*windowId); + ClearWindowTilemap(*windowId); + CopyWindowToVram(*windowId, COPYWIN_MAP); + RemoveWindow(*windowId); + return MENU_B_PRESSED; + } + + return MENU_NOTHING_CHOSEN; +} + +// Handle the "Receive/Send/Toss" menu that appears when selecting Wonder Card/News +static s32 HandleGiftSelectMenu(u8 *textState, u16 * windowId, bool32 cannotToss, bool32 cannotSend) +{ + struct WindowTemplate windowTemplate; + s32 input; + + switch (*textState) + { + case 0: + // Print menu message + if (!cannotToss) + StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithCards); + else + StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithNews); + *windowId = AddWindow(&sWindowTemplate_GiftSelect); + FillWindowPixelBuffer(*windowId, 0x11); + AddTextPrinterParameterized4(*windowId, FONT_NORMAL, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); + DrawTextBorderOuter(*windowId, 0x001, 0x0F); + CopyWindowToVram(*windowId, COPYWIN_GFX); + PutWindowTilemap(*windowId); + (*textState)++; + break; + case 1: + windowTemplate = sWindowTemplate_YesNoBox; + if (cannotSend) + { + if (!cannotToss) + input = DoMysteryGiftListMenu(&sWindowTemplate_GiftSelect_2Options, &sListMenu_ReceiveToss, 1, LIST_MENU_TILE_NUM, LIST_MENU_PAL_NUM); + else + input = DoMysteryGiftListMenu(&sWindowTemplate_GiftSelect_1Option, &sListMenu_Receive, 1, LIST_MENU_TILE_NUM, LIST_MENU_PAL_NUM); + } + else + { + if (!cannotToss) + input = DoMysteryGiftListMenu(&sWindowTemplate_GiftSelect_3Options, &sListMenu_ReceiveSendToss, 1, LIST_MENU_TILE_NUM, LIST_MENU_PAL_NUM); + else + input = DoMysteryGiftListMenu(&sWindowTemplate_GiftSelect_2Options, &sListMenu_ReceiveSend, 1, LIST_MENU_TILE_NUM, LIST_MENU_PAL_NUM); + } + if (input != LIST_NOTHING_CHOSEN) + { + *textState = 0; + rbox_fill_rectangle(*windowId); + ClearWindowTilemap(*windowId); + CopyWindowToVram(*windowId, COPYWIN_MAP); + RemoveWindow(*windowId); + return input; + } + break; + case 0xFF: + *textState = 0; + rbox_fill_rectangle(*windowId); + ClearWindowTilemap(*windowId); + CopyWindowToVram(*windowId, COPYWIN_MAP); + RemoveWindow(*windowId); + return LIST_CANCEL; + } + + return LIST_NOTHING_CHOSEN; +} + +static bool32 ValidateCardOrNews(bool32 isWonderNews) +{ + if (!isWonderNews) + return ValidateSavedWonderCard(); + else + return ValidateSavedWonderNews(); +} + +static bool32 HandleLoadWonderCardOrNews(u8 *state, bool32 isWonderNews) +{ + switch (*state) + { + case 0: + if (!isWonderNews) + WonderCard_Init(GetSavedWonderCard(), GetSavedWonderCardMetadata()); + else + WonderNews_Init(GetSavedWonderNews()); + (*state)++; + break; + case 1: + if (!isWonderNews) + { + if (!WonderCard_Enter()) + return FALSE; + } + else + { + if (!WonderNews_Enter()) + return FALSE; + } + *state = 0; + return TRUE; + } + + return FALSE; +} + +static bool32 ClearSavedNewsOrCard(bool32 isWonderNews) +{ + if (!isWonderNews) + ClearSavedWonderCardAndRelated(); + else + ClearSavedWonderNewsAndRelated(); + return TRUE; +} + +static bool32 ExitWonderCardOrNews(bool32 isWonderNews, bool32 useCancel) +{ + if (!isWonderNews) + { + if (WonderCard_Exit(useCancel)) + { + WonderCard_Destroy(); + return TRUE; + } + else + { + return FALSE; + } + } + else + { + if (WonderNews_Exit(useCancel)) + { + WonderNews_Destroy(); + return TRUE; + } + else + { + return FALSE; + } + } +} + +static s32 AskDiscardGift(u8 *textState, u16 * windowId, bool32 isWonderNews) +{ + if (!isWonderNews) + return DoMysteryGiftYesNo(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen); + else + return DoMysteryGiftYesNo(textState, windowId, TRUE, gText_OkayToDiscardNews); +} + +static bool32 PrintThrownAway(u8 *textState, bool32 isWonderNews) +{ + if (!isWonderNews) + return PrintMysteryGiftMenuMessage(textState, gText_WonderCardThrownAway); + else + return PrintMysteryGiftMenuMessage(textState, gText_WonderNewsThrownAway); +} + +static bool32 SaveOnMysteryGiftMenu(u8 *state) +{ + switch (*state) + { + case 0: + AddTextPrinterToWindow1(gText_DataWillBeSaved); + (*state)++; + break; + case 1: + TrySavingData(SAVE_NORMAL); + (*state)++; + break; + case 2: + AddTextPrinterToWindow1(gText_SaveCompletedPressA); + (*state)++; + break; + case 3: + if (JOY_NEW(A_BUTTON | B_BUTTON)) + (*state)++; + break; + case 4: + *state = 0; + ClearTextWindow(); + return TRUE; + } + + return FALSE; +} + +static const u8 *GetClientResultMessage(bool32 * successMsg, bool8 isWonderNews, bool8 sourceIsFriend, u32 msgId) +{ + const u8 *msg = NULL; + *successMsg = FALSE; + + switch (msgId) + { + case CLI_MSG_NOTHING_SENT: + *successMsg = FALSE; + msg = gText_NothingSentOver; + break; + case CLI_MSG_RECORD_UPLOADED: + *successMsg = FALSE; + msg = gText_RecordUploadedViaWireless; + break; + case CLI_MSG_CARD_RECEIVED: + *successMsg = TRUE; + msg = !sourceIsFriend ? gText_WonderCardReceived : gText_WonderCardReceivedFrom; + break; + case CLI_MSG_NEWS_RECEIVED: + *successMsg = TRUE; + msg = !sourceIsFriend ? gText_WonderNewsReceived : gText_WonderNewsReceivedFrom; + break; + case CLI_MSG_STAMP_RECEIVED: + *successMsg = TRUE; + msg = gText_NewStampReceived; + break; + case CLI_MSG_HAD_CARD: + *successMsg = FALSE; + msg = gText_AlreadyHadCard; + break; + case CLI_MSG_HAD_STAMP: + *successMsg = FALSE; + msg = gText_AlreadyHadStamp; + break; + case CLI_MSG_HAD_NEWS: + *successMsg = FALSE; + msg = gText_AlreadyHadNews; + break; + case CLI_MSG_NO_ROOM_STAMPS: + *successMsg = FALSE; + msg = gText_NoMoreRoomForStamps; + break; + case CLI_MSG_COMM_CANCELED: + *successMsg = FALSE; + msg = gText_CommunicationCanceled; + break; + case CLI_MSG_CANT_ACCEPT: + *successMsg = FALSE; + msg = !isWonderNews ? gText_CantAcceptCardFromTrainer : gText_CantAcceptNewsFromTrainer; + break; + case CLI_MSG_COMM_ERROR: + *successMsg = FALSE; + msg = gText_CommunicationError; + break; + case CLI_MSG_TRAINER_RECEIVED: + *successMsg = TRUE; + msg = gText_NewTrainerReceived; + break; + case CLI_MSG_BUFFER_SUCCESS: + *successMsg = TRUE; + // msg is NULL, use buffer + break; + case CLI_MSG_BUFFER_FAILURE: + *successMsg = FALSE; + // msg is NULL, use buffer + break; + } + + return msg; +} + +static bool32 PrintSuccessMessage(u8 *state, const u8 *msg, u16 * timer) +{ + switch (*state) + { + case 0: + if (msg != NULL) + AddTextPrinterToWindow1(msg); + PlayFanfare(MUS_OBTAIN_ITEM); + *timer = 0; + (*state)++; + break; + case 1: + if (++(*timer) > 240) + (*state)++; + break; + case 2: + if (IsFanfareTaskInactive()) + { + *state = 0; + ClearTextWindow(); + return TRUE; + } + break; + } + return FALSE; +} + +static const u8 *GetServerResultMessage(bool32 * wonderSuccess, bool8 sourceIsFriend, u32 msgId) +{ + const u8 *result = gText_CommunicationError; + *wonderSuccess = FALSE; + switch (msgId) + { + case SVR_MSG_NOTHING_SENT: + result = gText_NothingSentOver; + break; + case SVR_MSG_RECORD_UPLOADED: + result = gText_RecordUploadedViaWireless; + break; + case SVR_MSG_CARD_SENT: + result = gText_WonderCardSentTo; + *wonderSuccess = TRUE; + break; + case SVR_MSG_NEWS_SENT: + result = gText_WonderNewsSentTo; + *wonderSuccess = TRUE; + break; + case SVR_MSG_STAMP_SENT: + result = gText_StampSentTo; + break; + case SVR_MSG_HAS_CARD: + result = gText_OtherTrainerHasCard; + break; + case SVR_MSG_HAS_STAMP: + result = gText_OtherTrainerHasStamp; + break; + case SVR_MSG_HAS_NEWS: + result = gText_OtherTrainerHasNews; + break; + case SVR_MSG_NO_ROOM_STAMPS: + result = gText_NoMoreRoomForStamps; + break; + case SVR_MSG_CLIENT_CANCELED: + result = gText_OtherTrainerCanceled; + break; + case SVR_MSG_CANT_SEND_GIFT_1: + result = gText_CantSendGiftToTrainer; + break; + case SVR_MSG_COMM_ERROR: + result = gText_CommunicationError; + break; + case SVR_MSG_GIFT_SENT_1: + result = gText_GiftSentTo; + break; + case SVR_MSG_GIFT_SENT_2: + result = gText_GiftSentTo; + break; + case SVR_MSG_CANT_SEND_GIFT_2: + result = gText_CantSendGiftToTrainer; + break; + } + return result; +} + +static bool32 PrintServerResultMessage(u8 *state, u16 * timer, bool8 sourceIsFriend, u32 msgId) +{ + bool32 wonderSuccess; + const u8 *str = GetServerResultMessage(&wonderSuccess, sourceIsFriend, msgId); + if (wonderSuccess) + return PrintSuccessMessage(state, str, timer); + else + return PrintMysteryGiftMenuMessage(state, str); +} + +// States for Task_MysteryGift. +// CLIENT states are for when the player is receiving a gift, and use mystery_gift_client.c link functions. +// SERVER states are for when the player is sending a gift, and use mystery_gift_server.c link functions. +// Other states handle the general Mystery Gift menu usage. +enum { + MG_STATE_TO_MAIN_MENU, + MG_STATE_MAIN_MENU, + MG_STATE_DONT_HAVE_ANY, + MG_STATE_SOURCE_PROMPT, + MG_STATE_SOURCE_PROMPT_INPUT, + MG_STATE_CLIENT_LINK_START, + MG_STATE_CLIENT_LINK_WAIT, + MG_STATE_CLIENT_COMMUNICATING, + MG_STATE_CLIENT_LINK, + MG_STATE_CLIENT_YES_NO, + MG_STATE_CLIENT_MESSAGE, + MG_STATE_CLIENT_ASK_TOSS, + MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED, + MG_STATE_CLIENT_LINK_END, + MG_STATE_CLIENT_COMM_COMPLETED, + MG_STATE_CLIENT_RESULT_MSG, + MG_STATE_CLIENT_ERROR, + MG_STATE_SAVE_LOAD_GIFT, + MG_STATE_LOAD_GIFT, + MG_STATE_UNUSED, + MG_STATE_HANDLE_GIFT_INPUT, + MG_STATE_HANDLE_GIFT_SELECT, + MG_STATE_ASK_TOSS, + MG_STATE_ASK_TOSS_UNRECEIVED, + MG_STATE_TOSS, + MG_STATE_TOSS_SAVE, + MG_STATE_TOSSED, + MG_STATE_GIFT_INPUT_EXIT, + MG_STATE_RECEIVE, + MG_STATE_SEND, + MG_STATE_SERVER_LINK_WAIT, + MG_STATE_SERVER_LINK_START, + MG_STATE_SERVER_LINK, + MG_STATE_SERVER_LINK_END, + MG_STATE_SERVER_LINK_END_WAIT, + MG_STATE_SERVER_RESULT_MSG, + MG_STATE_SERVER_ERROR, + MG_STATE_EXIT, +}; + +static void CreateMysteryGiftTask(void) +{ + u8 taskId = CreateTask(Task_MysteryGift, 0); + struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data; + data->state = MG_STATE_TO_MAIN_MENU; + data->textState = 0; + data->unused4 = 0; + data->unused5 = 0; + data->isWonderNews = 0; + data->sourceIsFriend = 0; + data->var = 0; + data->unused1 = 0; + data->unused2 = 0; + data->unused3 = 0; + data->msgId = 0; + data->clientMsg = AllocZeroed(CLIENT_MAX_MSG_SIZE); +} + +static void Task_MysteryGift(u8 taskId) +{ + struct MysteryGiftTaskData *data = (void *)gTasks[taskId].data; + u32 successMsg, input; + const u8 *msg; + + switch (data->state) + { + case MG_STATE_TO_MAIN_MENU: + data->state = MG_STATE_MAIN_MENU; + break; + case MG_STATE_MAIN_MENU: + // Main Mystery Gift menu, player can select Wonder Cards or News (or exit) + switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->var, FALSE)) + { + case 0: // "Wonder Cards" + data->isWonderNews = FALSE; + if (ValidateSavedWonderCard() == TRUE) + data->state = MG_STATE_LOAD_GIFT; + else + data->state = MG_STATE_DONT_HAVE_ANY; + break; + case 1: // "Wonder News" + data->isWonderNews = TRUE; + if (ValidateSavedWonderNews() == TRUE) + data->state = MG_STATE_LOAD_GIFT; + else + data->state = MG_STATE_DONT_HAVE_ANY; + break; + case LIST_CANCEL: + data->state = MG_STATE_EXIT; + break; + } + break; + case MG_STATE_DONT_HAVE_ANY: + { + // Player doesn't have any Wonder Card/News + // Start prompt to ask where to read one from + if (!data->isWonderNews) + { + if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveCardNewOneInput)) + { + data->state = MG_STATE_SOURCE_PROMPT; + PrintMysteryGiftOrEReaderTopMenu(FALSE, TRUE); + } + } + else + { + if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveNewsNewOneInput)) + { + data->state = MG_STATE_SOURCE_PROMPT; + PrintMysteryGiftOrEReaderTopMenu(FALSE, TRUE); + } + } + break; + } + case MG_STATE_SOURCE_PROMPT: + if (!data->isWonderNews) + AddTextPrinterToWindow1(gText_WhereShouldCardBeAccessed); + else + AddTextPrinterToWindow1(gText_WhereShouldNewsBeAccessed); + data->state = MG_STATE_SOURCE_PROMPT_INPUT; + break; + case MG_STATE_SOURCE_PROMPT_INPUT: + // Choose where to access the Wonder Card/News from + switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->var, TRUE)) + { + case 0: // "Wireless Communication" + ClearTextWindow(); + data->state = MG_STATE_CLIENT_LINK_START; + data->sourceIsFriend = FALSE; + break; + case 1: // "Friend" + ClearTextWindow(); + data->state = MG_STATE_CLIENT_LINK_START; + data->sourceIsFriend = TRUE; + break; + case LIST_CANCEL: + ClearTextWindow(); + if (ValidateCardOrNews(data->isWonderNews)) + { + data->state = MG_STATE_LOAD_GIFT; + } + else + { + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + } + break; + } + break; + case MG_STATE_CLIENT_LINK_START: + *gStringVar1 = EOS; + *gStringVar2 = EOS; + *gStringVar3 = EOS; + + switch (data->isWonderNews) + { + case FALSE: + if (data->sourceIsFriend == TRUE) + CreateTask_LinkMysteryGiftWithFriend(ACTIVITY_WONDER_CARD); + else if (data->sourceIsFriend == FALSE) + CreateTask_LinkMysteryGiftOverWireless(ACTIVITY_WONDER_CARD); + break; + case TRUE: + if (data->sourceIsFriend == TRUE) + CreateTask_LinkMysteryGiftWithFriend(ACTIVITY_WONDER_NEWS); + else if (data->sourceIsFriend == FALSE) + CreateTask_LinkMysteryGiftOverWireless(ACTIVITY_WONDER_NEWS); + break; + } + data->state = MG_STATE_CLIENT_LINK_WAIT; + break; + case MG_STATE_CLIENT_LINK_WAIT: + if (gReceivedRemoteLinkPlayers != 0) + { + ClearScreenInBg0(TRUE); + data->state = MG_STATE_CLIENT_COMMUNICATING; + MysteryGiftClient_Create(data->isWonderNews); + } + else if (gSpecialVar_Result == LINKUP_FAILED) + { + // Link failed, return to link start menu + ClearScreenInBg0(TRUE); + data->state = MG_STATE_SOURCE_PROMPT; + } + break; + case MG_STATE_CLIENT_COMMUNICATING: + AddTextPrinterToWindow1(gText_Communicating); + data->state = MG_STATE_CLIENT_LINK; + break; + case MG_STATE_CLIENT_LINK: + switch (MysteryGiftClient_Run(&data->var)) + { + case CLI_RET_END: + Rfu_SetCloseLinkCallback(); + data->msgId = data->var; + data->state = MG_STATE_CLIENT_LINK_END; + break; + case CLI_RET_COPY_MSG: + memcpy(data->clientMsg, MysteryGiftClient_GetMsg(), 0x40); + MysteryGiftClient_AdvanceState(); + break; + case CLI_RET_PRINT_MSG: + data->state = MG_STATE_CLIENT_MESSAGE; + break; + case CLI_RET_YES_NO: + data->state = MG_STATE_CLIENT_YES_NO; + break; + case CLI_RET_ASK_TOSS: + data->state = MG_STATE_CLIENT_ASK_TOSS; + StringCopy(gStringVar1, gLinkPlayers[0].name); + break; + } + break; + case MG_STATE_CLIENT_YES_NO: + input = DoMysteryGiftYesNo(&data->textState, &data->var, FALSE, MysteryGiftClient_GetMsg()); + switch (input) + { + case 0: // Yes + MysteryGiftClient_SetParam(FALSE); + MysteryGiftClient_AdvanceState(); + data->state = MG_STATE_CLIENT_COMMUNICATING; + break; + case 1: // No + case MENU_B_PRESSED: + MysteryGiftClient_SetParam(TRUE); + MysteryGiftClient_AdvanceState(); + data->state = MG_STATE_CLIENT_COMMUNICATING; + break; + } + break; + case MG_STATE_CLIENT_MESSAGE: + if (PrintMysteryGiftMenuMessage(&data->textState, MysteryGiftClient_GetMsg())) + { + MysteryGiftClient_AdvanceState(); + data->state = MG_STATE_CLIENT_COMMUNICATING; + } + break; + case MG_STATE_CLIENT_ASK_TOSS: + // Player is receiving a new Wonder Card/News but needs to toss an existing one to make room. + // Ask for confirmation. + input = DoMysteryGiftYesNo(&data->textState, &data->var, FALSE, gText_ThrowAwayWonderCard); + switch (input) + { + case 0: // Yes + if (IsSavedWonderCardGiftNotReceived() == TRUE) + { + data->state = MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED; + } + else + { + MysteryGiftClient_SetParam(FALSE); + MysteryGiftClient_AdvanceState(); + data->state = MG_STATE_CLIENT_COMMUNICATING; + } + break; + case 1: // No + case MENU_B_PRESSED: + MysteryGiftClient_SetParam(TRUE); + MysteryGiftClient_AdvanceState(); + data->state = MG_STATE_CLIENT_COMMUNICATING; + break; + } + break; + case MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED: + // Player has selected to toss a Wonder Card that they haven't received the gift for. + // Ask for confirmation again. + input = DoMysteryGiftYesNo(&data->textState, &data->var, FALSE, gText_HaventReceivedCardsGift); + switch (input) + { + case 0: // Yes + MysteryGiftClient_SetParam(FALSE); + MysteryGiftClient_AdvanceState(); + data->state = MG_STATE_CLIENT_COMMUNICATING; + break; + case 1: // No + case MENU_B_PRESSED: + MysteryGiftClient_SetParam(TRUE); + MysteryGiftClient_AdvanceState(); + data->state = MG_STATE_CLIENT_COMMUNICATING; + break; + } + break; + case MG_STATE_CLIENT_LINK_END: + if (gReceivedRemoteLinkPlayers == 0) + { + DestroyWirelessStatusIndicatorSprite(); + data->state = MG_STATE_CLIENT_COMM_COMPLETED; + } + break; + case MG_STATE_CLIENT_COMM_COMPLETED: + if (PrintStringAndWait2Seconds(&data->textState, gText_CommunicationCompleted)) + { + if (data->sourceIsFriend == TRUE) + StringCopy(gStringVar1, gLinkPlayers[0].name); + data->state = MG_STATE_CLIENT_RESULT_MSG; + } + break; + case MG_STATE_CLIENT_RESULT_MSG: + msg = GetClientResultMessage(&successMsg, data->isWonderNews, data->sourceIsFriend, data->msgId); + if (msg == NULL) + msg = data->clientMsg; + if (successMsg) + input = PrintSuccessMessage(&data->textState, msg, &data->var); + else + input = PrintMysteryGiftMenuMessage(&data->textState, msg); + // input var re-used, here it is TRUE if the message is finished + if (input) + { + if (data->msgId == CLI_MSG_NEWS_RECEIVED) + { + if (data->sourceIsFriend == TRUE) + GenerateRandomWonderNews(WONDER_NEWS_RECV_FRIEND); + else + GenerateRandomWonderNews(WONDER_NEWS_RECV_WIRELESS); + } + if (!successMsg) + { + // Did not receive card/news, return to main menu + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + } + else + { + data->state = MG_STATE_SAVE_LOAD_GIFT; + } + } + break; + case MG_STATE_SAVE_LOAD_GIFT: + if (SaveOnMysteryGiftMenu(&data->textState)) + data->state = MG_STATE_LOAD_GIFT; + break; + case MG_STATE_LOAD_GIFT: + if (HandleLoadWonderCardOrNews(&data->textState, data->isWonderNews)) + data->state = MG_STATE_HANDLE_GIFT_INPUT; + break; + case MG_STATE_HANDLE_GIFT_INPUT: + if (!data->isWonderNews) + { + // Handle Wonder Card input + if (JOY_NEW(A_BUTTON)) + data->state = MG_STATE_HANDLE_GIFT_SELECT; + if (JOY_NEW(B_BUTTON)) + data->state = MG_STATE_GIFT_INPUT_EXIT; + } + else + { + switch (WonderNews_GetInput(gMain.newKeys)) + { + case NEWS_INPUT_A: + WonderNews_RemoveScrollIndicatorArrowPair(); + data->state = MG_STATE_HANDLE_GIFT_SELECT; + break; + case NEWS_INPUT_B: + data->state = MG_STATE_GIFT_INPUT_EXIT; + break; + } + } + break; + case MG_STATE_HANDLE_GIFT_SELECT: + { + // A Wonder Card/News has been selected, handle its menu + u32 result; + if (!data->isWonderNews) + { + if (IsSendingSavedWonderCardAllowed()) + result = HandleGiftSelectMenu(&data->textState, &data->var, data->isWonderNews, FALSE); + else + result = HandleGiftSelectMenu(&data->textState, &data->var, data->isWonderNews, TRUE); + } + else + { + if (IsSendingSavedWonderNewsAllowed()) + result = HandleGiftSelectMenu(&data->textState, &data->var, data->isWonderNews, FALSE); + else + result = HandleGiftSelectMenu(&data->textState, &data->var, data->isWonderNews, TRUE); + } + switch (result) + { + case 0: // Receive + data->state = MG_STATE_RECEIVE; + break; + case 1: // Send + data->state = MG_STATE_SEND; + break; + case 2: // Toss + data->state = MG_STATE_ASK_TOSS; + break; + case LIST_CANCEL: + if (data->isWonderNews == TRUE) + WonderNews_AddScrollIndicatorArrowPair(); + data->state = MG_STATE_HANDLE_GIFT_INPUT; + break; + } + break; + } + case MG_STATE_ASK_TOSS: + // Player is attempting to discard a saved Wonder Card/News + switch (AskDiscardGift(&data->textState, &data->var, data->isWonderNews)) + { + case 0: // Yes + if (!data->isWonderNews && IsSavedWonderCardGiftNotReceived() == TRUE) + data->state = MG_STATE_ASK_TOSS_UNRECEIVED; + else + data->state = MG_STATE_TOSS; + break; + case 1: // No + case MENU_B_PRESSED: + data->state = MG_STATE_HANDLE_GIFT_SELECT; + break; + } + break; + case MG_STATE_ASK_TOSS_UNRECEIVED: + // Player has selected to toss a Wonder Card that they haven't received the gift for. + // Ask for confirmation again. + switch ((u32)DoMysteryGiftYesNo(&data->textState, &data->var, TRUE, gText_HaventReceivedGiftOkayToDiscard)) + { + case 0: // Yes + data->state = MG_STATE_TOSS; + break; + case 1: // No + case MENU_B_PRESSED: + data->state = MG_STATE_HANDLE_GIFT_SELECT; + break; + } + break; + case MG_STATE_TOSS: + if (ExitWonderCardOrNews(data->isWonderNews, TRUE)) + { + ClearSavedNewsOrCard(data->isWonderNews); + data->state = MG_STATE_TOSS_SAVE; + } + break; + case MG_STATE_TOSS_SAVE: + if (SaveOnMysteryGiftMenu(&data->textState)) + data->state = MG_STATE_TOSSED; + break; + case MG_STATE_TOSSED: + if (PrintThrownAway(&data->textState, data->isWonderNews)) + { + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + } + break; + case MG_STATE_GIFT_INPUT_EXIT: + if (ExitWonderCardOrNews(data->isWonderNews, FALSE)) + data->state = MG_STATE_TO_MAIN_MENU; + break; + case MG_STATE_RECEIVE: + if (ExitWonderCardOrNews(data->isWonderNews, TRUE)) + data->state = MG_STATE_SOURCE_PROMPT; + break; + case MG_STATE_SEND: + if (ExitWonderCardOrNews(data->isWonderNews, TRUE)) + { + switch (data->isWonderNews) + { + case FALSE: + CreateTask_SendMysteryGift(ACTIVITY_WONDER_CARD); + break; + case TRUE: + CreateTask_SendMysteryGift(ACTIVITY_WONDER_NEWS); + break; + } + data->sourceIsFriend = TRUE; + data->state = MG_STATE_SERVER_LINK_WAIT; + } + break; + case MG_STATE_SERVER_LINK_WAIT: + if (gReceivedRemoteLinkPlayers != 0) + { + ClearScreenInBg0(TRUE); + data->state = MG_STATE_SERVER_LINK_START; + } + else if (gSpecialVar_Result == LINKUP_FAILED) + { + ClearScreenInBg0(TRUE); + data->state = MG_STATE_LOAD_GIFT; + } + break; + case MG_STATE_SERVER_LINK_START: + *gStringVar1 = EOS; + *gStringVar2 = EOS; + *gStringVar3 = EOS; + + if (!data->isWonderNews) + { + AddTextPrinterToWindow1(gText_SendingWonderCard); + MysterGiftServer_CreateForCard(); + } + else + { + AddTextPrinterToWindow1(gText_SendingWonderNews); + MysterGiftServer_CreateForNews(); + } + data->state = MG_STATE_SERVER_LINK; + break; + case MG_STATE_SERVER_LINK: + if (MysterGiftServer_Run(&data->var) == SVR_RET_END) + { + data->msgId = data->var; + data->state = MG_STATE_SERVER_LINK_END; + } + break; + case MG_STATE_SERVER_LINK_END: + Rfu_SetCloseLinkCallback(); + StringCopy(gStringVar1, gLinkPlayers[1].name); + data->state = MG_STATE_SERVER_LINK_END_WAIT; + break; + case MG_STATE_SERVER_LINK_END_WAIT: + if (gReceivedRemoteLinkPlayers == 0) + { + DestroyWirelessStatusIndicatorSprite(); + data->state = MG_STATE_SERVER_RESULT_MSG; + } + break; + case MG_STATE_SERVER_RESULT_MSG: + if (PrintServerResultMessage(&data->textState, &data->var, data->sourceIsFriend, data->msgId)) + { + if (data->sourceIsFriend == TRUE && data->msgId == SVR_MSG_NEWS_SENT) + { + GenerateRandomWonderNews(WONDER_NEWS_SENT); + data->state = MG_STATE_SAVE_LOAD_GIFT; + } + else + { + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + } + } + break; + case MG_STATE_CLIENT_ERROR: + case MG_STATE_SERVER_ERROR: + if (PrintMysteryGiftMenuMessage(&data->textState, gText_CommunicationError)) + { + data->state = MG_STATE_TO_MAIN_MENU; + PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + } + break; + case MG_STATE_EXIT: + CloseLink(); + Free(data->clientMsg); + DestroyTask(taskId); + SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen); + break; + } +} + +u16 GetMysteryGiftBaseBlock(void) +{ + return 0x1A9; +} + +static void LoadMysteryGiftTextboxBorder(u8 bgId) +{ + DecompressAndLoadBgGfxUsingHeap(bgId, sTextboxBorder_Gfx, 0x100, 0, 0); +} diff --git a/src/mystery_gift_scripts.c b/src/mystery_gift_scripts.c new file mode 100644 index 0000000000..fcd7f568d0 --- /dev/null +++ b/src/mystery_gift_scripts.c @@ -0,0 +1,217 @@ +#include "global.h" +#include "mystery_gift_client.h" +#include "mystery_gift_server.h" +#include "mystery_gift.h" + +static const u8 sText_CanceledReadingCard[] = _("Canceled reading\nthe Card."); + + +//================== +// Client scripts +//================== + +const struct MysteryGiftClientCmd gMysteryGiftClientScript_Init[] = { + {CLI_RECV, MG_LINKID_CLIENT_SCRIPT}, + {CLI_COPY_RECV} +}; + +static const struct MysteryGiftClientCmd sClientScript_SendGameData[] = { + {CLI_LOAD_GAME_DATA}, + {CLI_SEND_LOADED}, + {CLI_RECV, MG_LINKID_CLIENT_SCRIPT}, + {CLI_COPY_RECV} +}; + +static const struct MysteryGiftClientCmd sClientScript_CantAccept[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_CANT_ACCEPT} +}; + +static const struct MysteryGiftClientCmd sClientScript_CommError[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_COMM_ERROR} +}; + +static const struct MysteryGiftClientCmd sClientScript_NothingSent[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_NOTHING_SENT} +}; + +static const struct MysteryGiftClientCmd sClientScript_SaveCard[] = { + {CLI_RECV, MG_LINKID_CARD}, + {CLI_SAVE_CARD}, + {CLI_RECV, MG_LINKID_RAM_SCRIPT}, + {CLI_SAVE_RAM_SCRIPT}, + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_CARD_RECEIVED} +}; + +static const struct MysteryGiftClientCmd sClientScript_SaveNews[] = { + {CLI_RECV, MG_LINKID_NEWS}, + {CLI_SAVE_NEWS}, + {CLI_SEND_LOADED}, // Send whether or not the News was saved (read by sServerScript_SendNews) + {CLI_RECV, MG_LINKID_CLIENT_SCRIPT}, + {CLI_COPY_RECV} +}; + +static const struct MysteryGiftClientCmd sClientScript_HadNews[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_HAD_NEWS} +}; + +static const struct MysteryGiftClientCmd sClientScript_NewsReceived[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_NEWS_RECEIVED} +}; + +static const struct MysteryGiftClientCmd sClientScript_AskToss[] = { + {CLI_ASK_TOSS}, + {CLI_LOAD_TOSS_RESPONSE}, + {CLI_SEND_LOADED}, + {CLI_RECV, MG_LINKID_CLIENT_SCRIPT}, + {CLI_COPY_RECV} +}; + +static const struct MysteryGiftClientCmd sClientScript_Canceled[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_COMM_CANCELED} +}; + +static const struct MysteryGiftClientCmd sClientScript_HadCard[] = { + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_HAD_CARD} +}; + +static const struct MysteryGiftClientCmd sClientScript_DynamicError[] = { + {CLI_RECV, MG_LINKID_DYNAMIC_MSG}, + {CLI_COPY_MSG}, + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_BUFFER_FAILURE} +}; + +static const struct MysteryGiftClientCmd sClientScript_DynamicSuccess[] = { + {CLI_RECV, MG_LINKID_DYNAMIC_MSG}, + {CLI_COPY_MSG}, + {CLI_SEND_READY_END}, + {CLI_RETURN, CLI_MSG_BUFFER_SUCCESS} +}; + + +//================== +// Server scripts +//================== + +// Create arguments for SVR_LOAD_CLIENT_SCRIPT or SVR_LOAD_MSG +// (a script/text size and pointer to send to the client) +#define PTR_ARG(pointer) .parameter = sizeof(pointer), .ptr = pointer + +static const struct MysteryGiftServerCmd sServerScript_CantSend[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_CantAccept)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_CANT_SEND_GIFT_1} +}; + +static const struct MysteryGiftServerCmd sServerScript_CommError[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_CommError)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_COMM_ERROR} +}; + +static const struct MysteryGiftServerCmd sServerScript_ClientCanceledNews[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_Canceled)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_CLIENT_CANCELED} +}; + +static const struct MysteryGiftServerCmd sServerScript_ClientCanceledCard[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_DynamicError)}, + {SVR_SEND}, + {SVR_LOAD_MSG, PTR_ARG(sText_CanceledReadingCard)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_CLIENT_CANCELED} +}; + +static const struct MysteryGiftServerCmd sServerScript_HasNews[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_HadNews)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_HAS_NEWS} +}; + +static const struct MysteryGiftServerCmd sServerScript_SendNews[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SaveNews)}, + {SVR_SEND}, + {SVR_LOAD_NEWS}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_RESPONSE}, + {SVR_READ_RESPONSE}, + {SVR_GOTO_IF_EQ, TRUE, sServerScript_HasNews}, // Wonder News was not saved + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_NewsReceived)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_NEWS_SENT} +}; + +static const struct MysteryGiftServerCmd sServerScript_SendCard[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SaveCard)}, + {SVR_SEND}, + {SVR_LOAD_CARD}, + {SVR_SEND}, + {SVR_LOAD_RAM_SCRIPT}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_CARD_SENT} +}; + +static const struct MysteryGiftServerCmd sServerScript_TossPrompt[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_AskToss)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_RESPONSE}, + {SVR_READ_RESPONSE}, + {SVR_GOTO_IF_EQ, FALSE, sServerScript_SendCard}, // Tossed old card, send new one + {SVR_GOTO, .ptr = sServerScript_ClientCanceledCard} // Kept old card, cancel new one +}; + +static const struct MysteryGiftServerCmd sServerScript_HasCard[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_HadCard)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_HAS_CARD} +}; + +static const struct MysteryGiftServerCmd sServerScript_NothingSent[] = { + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_NothingSent)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_READY_END}, + {SVR_RETURN, SVR_MSG_NOTHING_SENT} +}; + +const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderNews[] = { + {SVR_COPY_SAVED_NEWS}, + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SendGameData)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_GAME_DATA}, + {SVR_COPY_GAME_DATA}, + {SVR_CHECK_GAME_DATA_NEWS}, + {SVR_GOTO_IF_EQ, FALSE, sServerScript_CantSend}, + {SVR_GOTO, .ptr = sServerScript_SendNews} +}; + +const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[] = { + {SVR_COPY_SAVED_CARD}, + {SVR_COPY_SAVED_RAM_SCRIPT}, + {SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SendGameData)}, + {SVR_SEND}, + {SVR_RECV, MG_LINKID_GAME_DATA}, + {SVR_COPY_GAME_DATA}, + {SVR_CHECK_GAME_DATA_CARD}, + {SVR_GOTO_IF_EQ, FALSE, sServerScript_CantSend}, + {SVR_CHECK_EXISTING_CARD}, + {SVR_GOTO_IF_EQ, HAS_DIFF_CARD, sServerScript_TossPrompt}, + {SVR_GOTO_IF_EQ, HAS_NO_CARD, sServerScript_SendCard}, + {SVR_GOTO, .ptr = sServerScript_HasCard} // HAS_SAME_CARD +}; diff --git a/src/mystery_gift_server.c b/src/mystery_gift_server.c new file mode 100644 index 0000000000..891870659d --- /dev/null +++ b/src/mystery_gift_server.c @@ -0,0 +1,290 @@ +#include "global.h" +#include "malloc.h" +#include "script.h" +#include "mystery_gift.h" +#include "mystery_gift_server.h" +#include "mystery_gift_link.h" + +enum { + FUNC_INIT, + FUNC_DONE, + FUNC_RECV, + FUNC_SEND, + FUNC_RUN, +}; + +EWRAM_DATA static struct MysteryGiftServer * sServer = NULL; + +static void MysteryGiftServer_Init(struct MysteryGiftServer *, const void *, u32, u32); +static void MysteryGiftServer_Free(struct MysteryGiftServer *); +static u32 MysteryGiftServer_CallFunc(struct MysteryGiftServer *); + +extern const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderNews[]; +extern const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[]; + +void MysterGiftServer_CreateForNews(void) +{ + sServer = AllocZeroed(sizeof(*sServer)); + MysteryGiftServer_Init(sServer, gMysteryGiftServerScript_SendWonderNews, 0, 1); +} + +void MysterGiftServer_CreateForCard(void) +{ + sServer = AllocZeroed(sizeof(*sServer)); + MysteryGiftServer_Init(sServer, gMysteryGiftServerScript_SendWonderCard, 0, 1); +} + +u32 MysterGiftServer_Run(u16 * endVal) +{ + u32 result; + if (sServer == NULL) + return SVR_RET_END; + result = MysteryGiftServer_CallFunc(sServer); + if (result == SVR_RET_END) + { + *endVal = sServer->param; + MysteryGiftServer_Free(sServer); + FREE_AND_SET_NULL(sServer); + } + return result; +} + +static void MysteryGiftServer_Init(struct MysteryGiftServer * svr, const void * script, u32 sendPlayerId, u32 recvPlayerId) +{ + svr->unused = 0; + svr->funcId = FUNC_INIT; + svr->card = AllocZeroed(sizeof(*svr->card)); + svr->news = AllocZeroed(sizeof(*svr->news)); + svr->recvBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE); + svr->linkGameData = AllocZeroed(sizeof(*svr->linkGameData)); + svr->script = script; + svr->cmdidx = 0; + MysteryGiftLink_Init(&svr->link, sendPlayerId, recvPlayerId); +} + +static void MysteryGiftServer_Free(struct MysteryGiftServer * svr) +{ + Free(svr->card); + Free(svr->news); + Free(svr->recvBuffer); + Free(svr->linkGameData); +} + +static void MysteryGiftServer_InitSend(struct MysteryGiftServer * svr, u32 ident, const void * src, u32 size) +{ + AGB_ASSERT(size <= MG_LINK_BUFFER_SIZE); + MysteryGiftLink_InitSend(&svr->link, ident, src, size); +} + +// Given the command pointer parameter and the 'default' normal data. +// If the command's pointer is not empty use that as the send data, otherwise use the default. +static const void * MysteryGiftServer_GetSendData(const void * dynamicData, const void * defaultData) +{ + if (dynamicData != NULL) + return dynamicData; + else + return defaultData; +} + +static u32 MysteryGiftServer_Compare(const void * a, const void * b) +{ + if (b < a) + return 0; + else if (b == a) + return 1; + else + return 2; +} + +static u32 Server_Init(struct MysteryGiftServer * svr) +{ + svr->funcId = FUNC_RUN; + return SVR_RET_INIT; +} + +static u32 Server_Done(struct MysteryGiftServer * svr) +{ + return SVR_RET_END; +} + +static u32 Server_Recv(struct MysteryGiftServer * svr) +{ + if (MysteryGiftLink_Recv(&svr->link)) + svr->funcId = FUNC_RUN; + return SVR_RET_ACTIVE; +} + +static u32 Server_Send(struct MysteryGiftServer * svr) +{ + if (MysteryGiftLink_Send(&svr->link)) + svr->funcId = FUNC_RUN; + return SVR_RET_ACTIVE; +} + +static u32 Server_Run(struct MysteryGiftServer * svr) +{ + // process command + const struct MysteryGiftServerCmd * cmd = &svr->script[svr->cmdidx]; + const void * ptr; + svr->cmdidx++; + + switch (cmd->instr) + { + case SVR_RETURN: + AGB_ASSERT(cmd->ptr == NULL); + svr->funcId = FUNC_DONE; + svr->param = cmd->parameter; // Set for endVal in MysteryGiftServer_Run + break; + case SVR_SEND: + svr->funcId = FUNC_SEND; + break; + case SVR_RECV: + AGB_ASSERT(cmd->ptr == NULL); + MysteryGiftLink_InitRecv(&svr->link, cmd->parameter, svr->recvBuffer); + svr->funcId = FUNC_RECV; + break; + case SVR_GOTO: + AGB_ASSERT(cmd->parameter == 0); + svr->cmdidx = 0; + svr->script = cmd->ptr; + break; + case SVR_COPY_GAME_DATA: + AGB_ASSERT(cmd->parameter == 0); + AGB_ASSERT(cmd->ptr == NULL); + memcpy(svr->linkGameData, svr->recvBuffer, sizeof(*svr->linkGameData)); + break; + case SVR_CHECK_GAME_DATA_CARD: + AGB_ASSERT(cmd->parameter == 0); + AGB_ASSERT(cmd->ptr == NULL); + svr->param = MysteryGift_ValidateLinkGameData(svr->linkGameData, FALSE); + break; + case SVR_CHECK_GAME_DATA_NEWS: + AGB_ASSERT(cmd->parameter == 0); + AGB_ASSERT(cmd->ptr == NULL); + svr->param = MysteryGift_ValidateLinkGameData(svr->linkGameData, TRUE); + break; + case SVR_GOTO_IF_EQ: + if (svr->param == cmd->parameter) + { + svr->cmdidx = 0; + svr->script = cmd->ptr; + } + break; + case SVR_CHECK_EXISTING_CARD: + AGB_ASSERT(cmd->parameter == 0); + ptr = MysteryGiftServer_GetSendData(cmd->ptr, svr->card); + svr->param = MysteryGift_CompareCardFlags(ptr, svr->linkGameData, ptr); + break; + case SVR_READ_RESPONSE: + AGB_ASSERT(cmd->parameter == 0); + AGB_ASSERT(cmd->ptr == NULL); + svr->param = *(u32 *)svr->recvBuffer; + break; + case SVR_CHECK_EXISTING_STAMPS: + AGB_ASSERT(cmd->parameter == 0); + ptr = MysteryGiftServer_GetSendData(cmd->ptr, &svr->stamp); + svr->param = MysteryGift_CheckStamps(ptr, svr->linkGameData, ptr); + break; + case SVR_GET_CARD_STAT: + AGB_ASSERT(cmd->ptr == NULL); + svr->param = MysteryGift_GetCardStatFromLinkData(svr->linkGameData, cmd->parameter); + break; + case SVR_CHECK_QUESTIONNAIRE: + AGB_ASSERT(cmd->parameter == 0); + svr->param = MysteryGift_DoesQuestionnaireMatch(svr->linkGameData, cmd->ptr); + break; + case SVR_COMPARE: + AGB_ASSERT(cmd->parameter == 0); + svr->param = MysteryGiftServer_Compare(cmd->ptr, *(void **)svr->recvBuffer); + break; + case SVR_LOAD_NEWS: + AGB_ASSERT(cmd->parameter == 0); + MysteryGiftServer_InitSend(svr, MG_LINKID_NEWS, MysteryGiftServer_GetSendData(cmd->ptr, svr->news), sizeof(*svr->news)); + break; + case SVR_LOAD_CARD: + AGB_ASSERT(cmd->parameter == 0); + MysteryGiftServer_InitSend(svr, MG_LINKID_CARD, MysteryGiftServer_GetSendData(cmd->ptr, svr->card), sizeof(*svr->card)); + break; + case SVR_LOAD_STAMP: + AGB_ASSERT(cmd->parameter == 0); + MysteryGiftServer_InitSend(svr, MG_LINKID_STAMP, MysteryGiftServer_GetSendData(cmd->ptr, &svr->stamp), sizeof(svr->stamp)); + break; + case SVR_LOAD_RAM_SCRIPT: + if (cmd->ptr == NULL) + MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, svr->ramScript, svr->ramScriptSize); + else + MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, cmd->ptr, cmd->parameter); + break; + case SVR_LOAD_CLIENT_SCRIPT: + if (cmd->ptr == NULL) + MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, svr->clientScript, svr->clientScriptSize); + else + MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, cmd->ptr, cmd->parameter); + break; + case SVR_LOAD_EREADER_TRAINER: + AGB_ASSERT(cmd->parameter == 0); + MysteryGiftServer_InitSend(svr, MG_LINKID_EREADER_TRAINER, cmd->ptr, sizeof(struct BattleTowerEReaderTrainer)); + break; + case SVR_LOAD_MSG: + MysteryGiftServer_InitSend(svr, MG_LINKID_DYNAMIC_MSG, cmd->ptr, cmd->parameter); + break; + case SVR_LOAD_UNK_2: + MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_2, cmd->ptr, cmd->parameter); + break; + case SVR_COPY_CARD: + AGB_ASSERT(cmd->parameter == 0); + memcpy(svr->card, cmd->ptr, sizeof(*svr->card)); + break; + case SVR_COPY_NEWS: + AGB_ASSERT(cmd->parameter == 0); + memcpy(svr->news, cmd->ptr, sizeof(*svr->news)); + break; + case SVR_COPY_STAMP: + AGB_ASSERT(cmd->parameter == 0); + svr->stamp = *(u32 *)cmd->ptr; + break; + case SVR_SET_RAM_SCRIPT: + svr->ramScript = cmd->ptr; + svr->ramScriptSize = cmd->parameter; + break; + case SVR_SET_CLIENT_SCRIPT: + svr->clientScript = cmd->ptr; + svr->clientScriptSize = cmd->parameter; + break; + case SVR_COPY_SAVED_CARD: + AGB_ASSERT(cmd->parameter == 0 && cmd->ptr == NULL); + memcpy(svr->card, GetSavedWonderCard(), sizeof(*svr->card)); + DisableWonderCardSending(svr->card); + break; + case SVR_COPY_SAVED_NEWS: + AGB_ASSERT(cmd->parameter == 0 && cmd->ptr == NULL); + memcpy(svr->news, GetSavedWonderNews(), sizeof(*svr->news)); + break; + case SVR_COPY_SAVED_RAM_SCRIPT: + AGB_ASSERT(cmd->parameter == 0 && cmd->ptr == NULL); + svr->ramScript = GetSavedRamScriptIfValid(); + break; + case SVR_LOAD_UNK_1: + MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_1, cmd->ptr, cmd->parameter); + break; + } + + return SVR_RET_ACTIVE; +} + +static u32 (*const sFuncTable[])(struct MysteryGiftServer *) = { + [FUNC_INIT] = Server_Init, + [FUNC_DONE] = Server_Done, + [FUNC_RECV] = Server_Recv, + [FUNC_SEND] = Server_Send, + [FUNC_RUN] = Server_Run +}; + +static u32 MysteryGiftServer_CallFunc(struct MysteryGiftServer * svr) +{ + u32 response; + AGB_ASSERT(svr->funcId < ARRAY_COUNT(sFuncTable)); + response = sFuncTable[svr->funcId](svr); + AGB_ASSERT(svr->funcId < ARRAY_COUNT(sFuncTable)); + return response; +} diff --git a/src/mystery_gift_view.c b/src/mystery_gift_view.c new file mode 100644 index 0000000000..41a9351d56 --- /dev/null +++ b/src/mystery_gift_view.c @@ -0,0 +1,934 @@ +#include "global.h" +#include "bg.h" +#include "gpu_regs.h" +#include "palette.h" +#include "decompress.h" +#include "malloc.h" +#include "menu.h" +#include "pokemon_icon.h" +#include "union_room.h" +#include "list_menu.h" +#include "text_window.h" +#include "string_util.h" +#include "link_rfu.h" +#include "mystery_gift.h" +#include "mystery_gift_menu.h" +#include "mystery_gift_view.h" +#include "constants/rgb.h" +#include "constants/mystery_gift.h" + +struct WonderGraphics +{ + u8 titleTextPal:4; + u8 bodyTextPal:4; + u8 footerTextPal:4; // Card only + u8 stampShadowPal:4; // Card only + const u32 * tiles; + const u32 * map; + const u16 * pal; +}; + +//====================== +// Wonder Cards +//====================== + +enum { + CARD_WIN_HEADER, + CARD_WIN_BODY, + CARD_WIN_FOOTER, + CARD_WIN_COUNT +}; + +#define TAG_STAMP_SHADOW 0x8000 + +struct CardStatTextData +{ + u8 width; + u8 statText[WONDER_CARD_TEXT_LENGTH + 1]; + u8 statNumberText[4]; +}; + +struct WonderCardData +{ + /*0000*/ struct WonderCard card; + /*014c*/ struct WonderCardMetadata cardMetadata; + /*0170*/ const struct WonderGraphics * gfx; + /*0174*/ u8 enterExitState; + /*0175*/ u8 statFooterWidth; + /*0176*/ u16 windowIds[CARD_WIN_COUNT]; + /*017C*/ u8 monIconSpriteId; + /*017D*/ u8 stampSpriteIds[MAX_STAMP_CARD_STAMPS][2]; // 2 sprites each, 1 for the shadow and 1 for the Pokémon + /*018B*/ u8 titleText[WONDER_CARD_TEXT_LENGTH + 1]; + /*01B4*/ u8 subtitleText[WONDER_CARD_TEXT_LENGTH + 1]; + /*01DD*/ u8 idNumberText[7]; + /*01E4*/ u8 bodyText[WONDER_CARD_BODY_TEXT_LINES][WONDER_CARD_TEXT_LENGTH + 1]; + /*0288*/ u8 footerLine1Text[WONDER_CARD_TEXT_LENGTH + 1]; + /*02B1*/ u8 giftText[WONDER_CARD_TEXT_LENGTH + 1]; + /*02DC*/ struct CardStatTextData statTextData[8]; + /*045C*/ u8 bgTilemapBuffer[0x1000]; +}; + +EWRAM_DATA static struct WonderCardData * sWonderCardData = NULL; + +static void BufferCardText(void); +static void DrawCardWindow(u8 whichWindow); +static void CreateCardSprites(void); +static void DestroyCardSprites(void); + +extern const struct OamData gOamData_AffineOff_ObjNormal_32x16; + +static const u8 sCard_TextColorTable[][3] = { + {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}, + {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY} +}; + +static const u8 ALIGNED(4) sCard_FooterTextOffsets[CARD_TYPE_COUNT] = +{ + [CARD_TYPE_GIFT] = 7, + [CARD_TYPE_STAMP] = 4, + [CARD_TYPE_LINK_STAT] = 7 +}; + +static const struct WindowTemplate sCard_WindowTemplates[] = { + [CARD_WIN_HEADER] = { + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 25, + .height = 4, + .paletteNum = 2, + .baseBlock = 0x029c + }, + [CARD_WIN_BODY] = { + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 28, + .height = 8, + .paletteNum = 2, + .baseBlock = 0x01bc + }, + [CARD_WIN_FOOTER] = { + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 14, + .width = 28, + .height = 5, + .paletteNum = 2, + .baseBlock = 0x0130 + } +}; + +static const u16 sWonderCardBgPal1[] = INCBIN_U16("graphics/wonder_card/bg1.gbapal"); +static const u16 sWonderCardBgPal2[] = INCBIN_U16("graphics/wonder_card/bg2.gbapal"); +static const u16 sWonderCardBgPal3[] = INCBIN_U16("graphics/wonder_card/bg3.gbapal"); +static const u16 sWonderCardBgPal4[] = INCBIN_U16("graphics/wonder_card/bg4.gbapal"); +static const u16 sWonderCardBgPal5[] = INCBIN_U16("graphics/wonder_card/bg5.gbapal"); +static const u16 sWonderCardBgPal6[] = INCBIN_U16("graphics/wonder_card/bg6.gbapal"); +static const u16 sWonderCardBgPal7[] = INCBIN_U16("graphics/wonder_card/bg7.gbapal"); +static const u16 sWonderCardBgPal8[] = INCBIN_U16("graphics/wonder_card/bg8.gbapal"); +static const u32 sWonderCardBgGfx1[] = INCBIN_U32("graphics/wonder_card/bg1.4bpp.lz"); +static const u32 sWonderCardBgTilemap1[] = INCBIN_U32("graphics/wonder_card/bg1.bin.lz"); +static const u32 sWonderCardBgGfx2[] = INCBIN_U32("graphics/wonder_card/bg2.4bpp.lz"); +static const u32 sWonderCardBgTilemap2[] = INCBIN_U32("graphics/wonder_card/bg2.bin.lz"); +static const u32 sWonderCardBgGfx3[] = INCBIN_U32("graphics/wonder_card/bg3.4bpp.lz"); +static const u32 sWonderCardBgTilemap3[] = INCBIN_U32("graphics/wonder_card/bg3.bin.lz"); +static const u32 sWonderCardBgGfx7[] = INCBIN_U32("graphics/wonder_card/bg7.4bpp.lz"); +static const u32 sWonderCardBgTilemap7[] = INCBIN_U32("graphics/wonder_card/bg7.bin.lz"); +static const u32 sWonderCardBgGfx8[] = INCBIN_U32("graphics/wonder_card/bg8.4bpp.lz"); +static const u32 sWonderCardBgTilemap8[] = INCBIN_U32("graphics/wonder_card/bg8.bin.lz"); +static const u16 sStampShadowPal1[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_1.gbapal"); +static const u16 sStampShadowPal2[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_2.gbapal"); +static const u16 sStampShadowPal3[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_3.gbapal"); +static const u16 sStampShadowPal4[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_4.gbapal"); +static const u16 sStampShadowPal5[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_5.gbapal"); +static const u16 sStampShadowPal6[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_6.gbapal"); +static const u16 sStampShadowPal7[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_7.gbapal"); +static const u16 sStampShadowPal8[] = INCBIN_U16("graphics/wonder_card/stamp_shadow_8.gbapal"); +static const u32 sStampShadowGfx[] = INCBIN_U32("graphics/wonder_card/stamp_shadow.4bpp.lz"); + +static const struct CompressedSpriteSheet sSpriteSheet_StampShadow = { + sStampShadowGfx, 0x100, TAG_STAMP_SHADOW +}; + +static const struct SpritePalette sSpritePalettes_StampShadow[] = { + {sStampShadowPal1, TAG_STAMP_SHADOW}, + {sStampShadowPal2, TAG_STAMP_SHADOW}, + {sStampShadowPal3, TAG_STAMP_SHADOW}, + {sStampShadowPal4, TAG_STAMP_SHADOW}, + {sStampShadowPal5, TAG_STAMP_SHADOW}, + {sStampShadowPal6, TAG_STAMP_SHADOW}, + {sStampShadowPal7, TAG_STAMP_SHADOW}, + {sStampShadowPal8, TAG_STAMP_SHADOW} +}; + +static const struct SpriteTemplate sSpriteTemplate_StampShadow = { + .tileTag = TAG_STAMP_SHADOW, + .paletteTag = TAG_STAMP_SHADOW, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct WonderGraphics sCardGraphics[NUM_WONDER_BGS] = { + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 0, .tiles = sWonderCardBgGfx1, .map = sWonderCardBgTilemap1, .pal = sWonderCardBgPal1}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 1, .tiles = sWonderCardBgGfx2, .map = sWonderCardBgTilemap2, .pal = sWonderCardBgPal2}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 2, .tiles = sWonderCardBgGfx3, .map = sWonderCardBgTilemap3, .pal = sWonderCardBgPal3}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 3, .tiles = sWonderCardBgGfx3, .map = sWonderCardBgTilemap3, .pal = sWonderCardBgPal4}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 4, .tiles = sWonderCardBgGfx3, .map = sWonderCardBgTilemap3, .pal = sWonderCardBgPal5}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 5, .tiles = sWonderCardBgGfx3, .map = sWonderCardBgTilemap3, .pal = sWonderCardBgPal6}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 6, .tiles = sWonderCardBgGfx7, .map = sWonderCardBgTilemap7, .pal = sWonderCardBgPal7}, + {.titleTextPal = 1, .bodyTextPal = 0, .footerTextPal = 0, .stampShadowPal = 7, .tiles = sWonderCardBgGfx8, .map = sWonderCardBgTilemap8, .pal = sWonderCardBgPal8} +}; + +bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata) +{ + if (card == NULL || metadata == NULL) + return FALSE; + sWonderCardData = AllocZeroed(sizeof(*sWonderCardData)); + if (sWonderCardData == NULL) + return FALSE; + sWonderCardData->card = *card; + sWonderCardData->cardMetadata = *metadata; + if (sWonderCardData->card.bgType >= NUM_WONDER_BGS) + sWonderCardData->card.bgType = 0; + if (sWonderCardData->card.type >= CARD_TYPE_COUNT) + sWonderCardData->card.type = 0; + if (sWonderCardData->card.maxStamps > MAX_STAMP_CARD_STAMPS) + sWonderCardData->card.maxStamps = 0; + sWonderCardData->gfx = &sCardGraphics[sWonderCardData->card.bgType]; + return TRUE; +} + +void WonderCard_Destroy(void) +{ + if (sWonderCardData != NULL) + { + *sWonderCardData = (struct WonderCardData){}; + FREE_AND_SET_NULL(sWonderCardData); + } +} + +s32 WonderCard_Enter(void) +{ + if (sWonderCardData == NULL) + return -1; + switch(sWonderCardData->enterExitState) + { + case 0: + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + DecompressAndCopyTileDataToVram(2, sWonderCardData->gfx->tiles, 0, 0x008, 0); + sWonderCardData->windowIds[CARD_WIN_HEADER] = AddWindow(&sCard_WindowTemplates[CARD_WIN_HEADER]); + sWonderCardData->windowIds[CARD_WIN_BODY] = AddWindow(&sCard_WindowTemplates[CARD_WIN_BODY]); + sWonderCardData->windowIds[CARD_WIN_FOOTER] = AddWindow(&sCard_WindowTemplates[CARD_WIN_FOOTER]); + break; + case 3: + if (FreeTempTileDataBuffersIfPossible()) + return 0; + LoadPalette(GetTextWindowPalette(1), 0x20, 0x20); + gPaletteFade.bufferTransferDisabled = TRUE; + LoadPalette(sWonderCardData->gfx->pal, 0x10, 0x20); + LZ77UnCompWram(sWonderCardData->gfx->map, sWonderCardData->bgTilemapBuffer); + CopyRectToBgTilemapBufferRect(2, sWonderCardData->bgTilemapBuffer, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0); + CopyBgTilemapBufferToVram(2); + break; + case 4: + BufferCardText(); + break; + case 5: + DrawCardWindow(CARD_WIN_HEADER); + DrawCardWindow(CARD_WIN_BODY); + DrawCardWindow(CARD_WIN_FOOTER); + CopyBgTilemapBufferToVram(1); + break; + case 6: + LoadMonIconPalettes(); + break; + case 7: + ShowBg(1); + ShowBg(2); + gPaletteFade.bufferTransferDisabled = FALSE; + CreateCardSprites(); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); + UpdatePaletteFade(); + break; + default: + if (UpdatePaletteFade()) + return 0; + sWonderCardData->enterExitState = 0; + return 1; + } + sWonderCardData->enterExitState++; + return 0; +} + +s32 WonderCard_Exit(bool32 useCancel) +{ + if (sWonderCardData == NULL) + return -1; + switch (sWonderCardData->enterExitState) + { + case 0: + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + break; + case 3: + HideBg(1); + HideBg(2); + RemoveWindow(sWonderCardData->windowIds[CARD_WIN_FOOTER]); + RemoveWindow(sWonderCardData->windowIds[CARD_WIN_BODY]); + RemoveWindow(sWonderCardData->windowIds[CARD_WIN_HEADER]); + break; + case 4: + DestroyCardSprites(); + FreeMonIconPalettes(); + break; + case 5: + PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, useCancel); + CopyBgTilemapBufferToVram(0); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); + break; + default: + if (UpdatePaletteFade()) + return 0; + sWonderCardData->enterExitState = 0; + return 1; + } + sWonderCardData->enterExitState++; + return 0; +} + +static void BufferCardText(void) +{ + u16 i = 0; + u16 charsUntilStat; + u16 stats[3] = {0, 0, 0}; + + // Copy title/subtitle text + memcpy(sWonderCardData->titleText, sWonderCardData->card.titleText, WONDER_CARD_TEXT_LENGTH); + sWonderCardData->titleText[WONDER_CARD_TEXT_LENGTH] = EOS; + memcpy(sWonderCardData->subtitleText, sWonderCardData->card.subtitleText, WONDER_CARD_TEXT_LENGTH); + sWonderCardData->subtitleText[WONDER_CARD_TEXT_LENGTH] = EOS; + + // Copy card id number + if (sWonderCardData->card.idNumber > 999999) + sWonderCardData->card.idNumber = 999999; + ConvertIntToDecimalStringN(sWonderCardData->idNumberText, sWonderCardData->card.idNumber, STR_CONV_MODE_LEFT_ALIGN, 6); + + // Copy body text + for (i = 0; i < WONDER_CARD_BODY_TEXT_LINES; i++) + { + memcpy(sWonderCardData->bodyText[i], sWonderCardData->card.bodyText[i], WONDER_CARD_TEXT_LENGTH); + sWonderCardData->bodyText[i][WONDER_CARD_TEXT_LENGTH] = EOS; + } + + // Copy footer line 1 + memcpy(sWonderCardData->footerLine1Text, sWonderCardData->card.footerLine1Text, WONDER_CARD_TEXT_LENGTH); + sWonderCardData->footerLine1Text[WONDER_CARD_TEXT_LENGTH] = EOS; + + // Copy footer line 2 + switch (sWonderCardData->card.type) + { + case CARD_TYPE_GIFT: + memcpy(sWonderCardData->giftText, sWonderCardData->card.footerLine2Text, WONDER_CARD_TEXT_LENGTH); + sWonderCardData->giftText[WONDER_CARD_TEXT_LENGTH] = EOS; + break; + case CARD_TYPE_STAMP: + sWonderCardData->giftText[0] = EOS; + break; + case CARD_TYPE_LINK_STAT: + sWonderCardData->giftText[0] = EOS; + + // Load stats + stats[0] = sWonderCardData->cardMetadata.battlesWon < MAX_WONDER_CARD_STAT ? sWonderCardData->cardMetadata.battlesWon : MAX_WONDER_CARD_STAT; + stats[1] = sWonderCardData->cardMetadata.battlesLost < MAX_WONDER_CARD_STAT ? sWonderCardData->cardMetadata.battlesLost : MAX_WONDER_CARD_STAT; + stats[2] = sWonderCardData->cardMetadata.numTrades < MAX_WONDER_CARD_STAT ? sWonderCardData->cardMetadata.numTrades : MAX_WONDER_CARD_STAT; + + // Init stat text arrays + for (i = 0; i < ARRAY_COUNT(sWonderCardData->statTextData); i++) + { + memset(sWonderCardData->statTextData[i].statNumberText, EOS, sizeof(sWonderCardData->statTextData[i].statNumberText)); + memset(sWonderCardData->statTextData[i].statText, EOS, sizeof(sWonderCardData->statTextData[i].statText)); + } + + // Copy stat texts + for (i = 0, charsUntilStat = 0; i < WONDER_CARD_TEXT_LENGTH; i++) + { + if (sWonderCardData->card.footerLine2Text[i] != CHAR_DYNAMIC) + { + // Regular text, just copy as is + sWonderCardData->statTextData[sWonderCardData->statFooterWidth].statText[charsUntilStat] = sWonderCardData->card.footerLine2Text[i]; + charsUntilStat++; + } + else + { + // Dynamic char encountered + // These are used to give the id of which stat to print + u8 id = sWonderCardData->card.footerLine2Text[i + 1]; + if (id >= ARRAY_COUNT(stats)) + { + // Invalid stat id, skip ahead + i += 2; + } + else + { + // Copy stat number + ConvertIntToDecimalStringN(sWonderCardData->statTextData[sWonderCardData->statFooterWidth].statNumberText, stats[id], STR_CONV_MODE_LEADING_ZEROS, 3); + sWonderCardData->statTextData[sWonderCardData->statFooterWidth].width = sWonderCardData->card.footerLine2Text[i + 2]; + sWonderCardData->statFooterWidth++; + if (sWonderCardData->statFooterWidth >= ARRAY_COUNT(sWonderCardData->statTextData)) + break; + charsUntilStat = 0; + i += 2; + } + } + } + } +} + +static void DrawCardWindow(u8 whichWindow) +{ + s8 i = 0; + s32 windowId = sWonderCardData->windowIds[whichWindow]; + PutWindowTilemap(windowId); + FillWindowPixelBuffer(windowId, 0); + switch (whichWindow) + { + case CARD_WIN_HEADER: + { + // Print card title/subtitle + s32 x; + AddTextPrinterParameterized3(windowId, FONT_SHORT_COPY_1, 0, 1, sCard_TextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->titleText); + x = 160 - GetStringWidth(FONT_SHORT_COPY_1, sWonderCardData->subtitleText, GetFontAttribute(FONT_SHORT_COPY_1, FONTATTR_LETTER_SPACING)); + if (x < 0) + x = 0; + AddTextPrinterParameterized3(windowId, FONT_SHORT_COPY_1, x, 17, sCard_TextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->subtitleText); + + // Print id number + if (sWonderCardData->card.idNumber != 0) + AddTextPrinterParameterized3(windowId, FONT_NORMAL, 166, 17, sCard_TextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->idNumberText); + break; + } + case CARD_WIN_BODY: + // Print body text + for (; i < WONDER_CARD_BODY_TEXT_LINES; i++) + AddTextPrinterParameterized3(windowId, FONT_SHORT_COPY_1, 0, 16 * i + 2, sCard_TextColorTable[sWonderCardData->gfx->bodyTextPal], 0, sWonderCardData->bodyText[i]); + break; + case CARD_WIN_FOOTER: + // Print footer line 1 + AddTextPrinterParameterized3(windowId, FONT_SHORT_COPY_1, 0, + sCard_FooterTextOffsets[sWonderCardData->card.type], + sCard_TextColorTable[sWonderCardData->gfx->footerTextPal], + 0, sWonderCardData->footerLine1Text); + + // Print footer line 2 + if (sWonderCardData->card.type != CARD_TYPE_LINK_STAT) + { + // Print gift text + // Odd that CARD_TYPE_STAMP is not ignored, it has empty text for this + AddTextPrinterParameterized3(windowId, FONT_SHORT_COPY_1, 0, + 16 + sCard_FooterTextOffsets[sWonderCardData->card.type], + sCard_TextColorTable[sWonderCardData->gfx->footerTextPal], + 0, sWonderCardData->giftText); + } + else + { + s32 x = 0; + s32 y = sCard_FooterTextOffsets[sWonderCardData->card.type] + 16; + s32 spacing = GetFontAttribute(FONT_SHORT_COPY_1, FONTATTR_LETTER_SPACING); + for (; i < sWonderCardData->statFooterWidth; i++) + { + // Print stat text + AddTextPrinterParameterized3(windowId, FONT_SHORT_COPY_1, x, y, sCard_TextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->statTextData[i].statText); + if (sWonderCardData->statTextData[i].statNumberText[0] != EOS) + { + // Print stat number + x += GetStringWidth(FONT_SHORT_COPY_1, sWonderCardData->statTextData[i].statText, spacing); + AddTextPrinterParameterized3(windowId, FONT_SHORT_COPY_1, x, y, + sCard_TextColorTable[sWonderCardData->gfx->footerTextPal], + 0, sWonderCardData->statTextData[i].statNumberText); + x += GetStringWidth(FONT_SHORT_COPY_1, sWonderCardData->statTextData[i].statNumberText, spacing) + sWonderCardData->statTextData[i].width; + } + } + } + break; + } + CopyWindowToVram(windowId, COPYWIN_FULL); +} + +static void CreateCardSprites(void) +{ + u8 i = 0; + sWonderCardData->monIconSpriteId = SPRITE_NONE; + + // Create icon sprite + if (sWonderCardData->cardMetadata.iconSpecies != SPECIES_NONE) + { + sWonderCardData->monIconSpriteId = CreateMonIconNoPersonality(GetIconSpeciesNoPersonality(sWonderCardData->cardMetadata.iconSpecies), SpriteCallbackDummy, 220, 20, 0); + gSprites[sWonderCardData->monIconSpriteId].oam.priority = 2; + } + + // Create stamp sprites + if (sWonderCardData->card.maxStamps != 0 && sWonderCardData->card.type == CARD_TYPE_STAMP) + { + LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_StampShadow); + LoadSpritePalette(&sSpritePalettes_StampShadow[sWonderCardData->gfx->stampShadowPal]); + for (; i < sWonderCardData->card.maxStamps; i++) + { + sWonderCardData->stampSpriteIds[i][0] = SPRITE_NONE; + sWonderCardData->stampSpriteIds[i][1] = SPRITE_NONE; + sWonderCardData->stampSpriteIds[i][0] = CreateSprite(&sSpriteTemplate_StampShadow, 216 - 32 * i, 144, 8); + if (sWonderCardData->cardMetadata.stampData[STAMP_SPECIES][i] != SPECIES_NONE) + sWonderCardData->stampSpriteIds[i][1] = CreateMonIconNoPersonality(GetIconSpeciesNoPersonality(sWonderCardData->cardMetadata.stampData[STAMP_SPECIES][i]), + SpriteCallbackDummy, + 216 - 32 * i, + 136, 0); + } + } +} + +static void DestroyCardSprites(void) +{ + u8 i = 0; + + // Destroy icon sprite + if (sWonderCardData->monIconSpriteId != SPRITE_NONE) + FreeAndDestroyMonIconSprite(&gSprites[sWonderCardData->monIconSpriteId]); + + // Destroy stamp sprites + if (sWonderCardData->card.maxStamps != 0 && sWonderCardData->card.type == CARD_TYPE_STAMP) + { + for (; i < sWonderCardData->card.maxStamps; i++) + { + if (sWonderCardData->stampSpriteIds[i][0] != SPRITE_NONE) + DestroySprite(&gSprites[sWonderCardData->stampSpriteIds[i][0]]); + if (sWonderCardData->stampSpriteIds[i][1] != SPRITE_NONE) + FreeAndDestroyMonIconSprite(&gSprites[sWonderCardData->stampSpriteIds[i][1]]); + } + FreeSpriteTilesByTag(TAG_STAMP_SHADOW); + FreeSpritePaletteByTag(TAG_STAMP_SHADOW); + } +} + +//====================== +// Wonder News +//====================== + +enum { + NEWS_WIN_TITLE, + NEWS_WIN_BODY, + NEWS_WIN_COUNT +}; + +#define TAG_ARROWS 0x1000 + +struct WonderNewsData +{ + /*0000*/ struct WonderNews news; + /*01bc*/ const struct WonderGraphics * gfx; + /*01c0*/ u8 arrowsRemoved:1; + u8 enterExitState:7; + /*01c1*/ u8 arrowTaskId; + /*01c2*/ bool8 scrolling:1; + u8 scrollIncrement:7; + /*01c3*/ bool8 scrollingDown:1; + u8 scrollTotal:7; + /*01c4*/ u16 scrollEnd; + /*01c6*/ u16 scrollOffset; + /*01c8*/ u16 windowIds[NEWS_WIN_COUNT]; + /*01cc*/ u8 unused[2]; + /*01ce*/ u8 titleText[WONDER_NEWS_TEXT_LENGTH + 1]; + /*01f7*/ u8 bodyText[WONDER_NEWS_BODY_TEXT_LINES][WONDER_NEWS_TEXT_LENGTH + 1]; + /*0394*/ struct ScrollArrowsTemplate arrowsTemplate; + /*03a4*/ u8 bgTilemapBuffer[0x1000]; +}; + +EWRAM_DATA static struct WonderNewsData * sWonderNewsData = NULL; + +static void BufferNewsText(void); +static void DrawNewsWindows(void); +static void UpdateNewsScroll(void); + +static const u8 sNews_TextColorTable[][3] = { + {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}, + {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY} +}; + +static const struct WindowTemplate sNews_WindowTemplates[] = { + [NEWS_WIN_TITLE] = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0, + .width = 28, + .height = 3, + .paletteNum = 2, + .baseBlock = 0x2AC + }, + [NEWS_WIN_BODY] = { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 28, + .height = 20, + .paletteNum = 2, + .baseBlock = 0x07C + } +}; + +static const struct ScrollArrowsTemplate sNews_ArrowsTemplate = { + .firstArrowType = SCROLL_ARROW_UP, + .firstX = 232, + .firstY = 24, + .secondArrowType = SCROLL_ARROW_DOWN, + .secondX = 232, + .secondY = 152, + .fullyUpThreshold = 0, + .fullyDownThreshold = 2, + .tileTag = TAG_ARROWS, + .palTag = TAG_ARROWS, + .palNum = 0 +}; + +static const u16 sWonderNewsPal1[] = INCBIN_U16("graphics/wonder_news/bg1.gbapal"); +static const u16 sWonderNewsPal7[] = INCBIN_U16("graphics/wonder_news/bg7.gbapal"); +static const u16 sWonderNewsPal8[] = INCBIN_U16("graphics/wonder_news/bg8.gbapal"); +static const u32 sWonderNewsGfx1[] = INCBIN_U32("graphics/wonder_news/bg1.4bpp.lz"); +static const u32 sWonderNewsTilemap1[] = INCBIN_U32("graphics/wonder_news/bg1.bin.lz"); +static const u32 sWonderNewsGfx2[] = INCBIN_U32("graphics/wonder_news/bg2.4bpp.lz"); +static const u32 sWonderNewsTilemap2[] = INCBIN_U32("graphics/wonder_news/bg2.bin.lz"); +static const u32 sWonderNewsGfx3[] = INCBIN_U32("graphics/wonder_news/bg3.4bpp.lz"); +static const u32 sWonderNewsTilemap3[] = INCBIN_U32("graphics/wonder_news/bg3.bin.lz"); +static const u32 sWonderNewsGfx7[] = INCBIN_U32("graphics/wonder_news/bg7.4bpp.lz"); +static const u32 sWonderNewsTilemap7[] = INCBIN_U32("graphics/wonder_news/bg7.bin.lz"); +static const u32 sWonderNewsGfx8[] = INCBIN_U32("graphics/wonder_news/bg8.4bpp.lz"); +static const u32 sWonderNewsTilemap8[] = INCBIN_U32("graphics/wonder_news/bg8.bin.lz"); + +static const struct WonderGraphics sNewsGraphics[NUM_WONDER_BGS] = { + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sWonderNewsGfx1, .map = sWonderNewsTilemap1, .pal = sWonderNewsPal1}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sWonderNewsGfx2, .map = sWonderNewsTilemap2, .pal = sWonderCardBgPal2}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sWonderNewsGfx3, .map = sWonderNewsTilemap3, .pal = sWonderCardBgPal3}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sWonderNewsGfx3, .map = sWonderNewsTilemap3, .pal = sWonderCardBgPal4}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sWonderNewsGfx3, .map = sWonderNewsTilemap3, .pal = sWonderCardBgPal5}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sWonderNewsGfx3, .map = sWonderNewsTilemap3, .pal = sWonderCardBgPal6}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sWonderNewsGfx7, .map = sWonderNewsTilemap7, .pal = sWonderNewsPal7}, + {.titleTextPal = 1, .bodyTextPal = 0, .tiles = sWonderNewsGfx8, .map = sWonderNewsTilemap8, .pal = sWonderNewsPal8} +}; + +bool32 WonderNews_Init(const struct WonderNews * news) +{ + if (news == NULL) + return FALSE; + sWonderNewsData = AllocZeroed(sizeof(*sWonderNewsData)); + if (sWonderNewsData == NULL) + return FALSE; + sWonderNewsData->news = *news; + if (sWonderNewsData->news.bgType >= NUM_WONDER_BGS) + sWonderNewsData->news.bgType = 0; + sWonderNewsData->gfx = &sNewsGraphics[sWonderNewsData->news.bgType]; + sWonderNewsData->arrowTaskId = TASK_NONE; + return TRUE; +} + +void WonderNews_Destroy(void) +{ + if (sWonderNewsData != NULL) + { + *sWonderNewsData = (struct WonderNewsData){}; + FREE_AND_SET_NULL(sWonderNewsData); + } +} + +s32 WonderNews_Enter(void) +{ + if (sWonderNewsData == NULL) + return -1; + + switch (sWonderNewsData->enterExitState) + { + case 0: + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, DISPLAY_WIDTH)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(26, 152)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + DecompressAndCopyTileDataToVram(3, sWonderNewsData->gfx->tiles, 0, 8, 0); + sWonderNewsData->windowIds[NEWS_WIN_TITLE] = AddWindow(&sNews_WindowTemplates[NEWS_WIN_TITLE]); + sWonderNewsData->windowIds[NEWS_WIN_BODY] = AddWindow(&sNews_WindowTemplates[NEWS_WIN_BODY]); + break; + case 3: + if (FreeTempTileDataBuffersIfPossible()) + return 0; + LoadPalette(GetTextWindowPalette(1), 0x20, 0x20); + gPaletteFade.bufferTransferDisabled = TRUE; + LoadPalette(sWonderNewsData->gfx->pal, 0x10, 0x20); + LZ77UnCompWram(sWonderNewsData->gfx->map, sWonderNewsData->bgTilemapBuffer); + CopyRectToBgTilemapBufferRect(1, sWonderNewsData->bgTilemapBuffer, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0); + CopyRectToBgTilemapBufferRect(3, sWonderNewsData->bgTilemapBuffer, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(3); + break; + case 4: + BufferNewsText(); + break; + case 5: + DrawNewsWindows(); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(2); + break; + case 6: + ShowBg(1); + ShowBg(2); + ShowBg(3); + gPaletteFade.bufferTransferDisabled = FALSE; + sWonderNewsData->arrowTaskId = AddScrollIndicatorArrowPair(&sWonderNewsData->arrowsTemplate, &sWonderNewsData->scrollOffset); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); + UpdatePaletteFade(); + break; + default: + if (UpdatePaletteFade()) + return 0; + sWonderNewsData->enterExitState = 0; + return 1; + } + + sWonderNewsData->enterExitState++; + return 0; +} + +s32 WonderNews_Exit(bool32 useCancel) +{ + if (sWonderNewsData == NULL) + return -1; + switch (sWonderNewsData->enterExitState) + { + case 0: + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + ChangeBgY(2, 0, BG_COORD_SET); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 24); + FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 24); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + break; + case 3: + HideBg(1); + HideBg(2); + RemoveWindow(sWonderNewsData->windowIds[NEWS_WIN_BODY]); + RemoveWindow(sWonderNewsData->windowIds[NEWS_WIN_TITLE]); + break; + case 4: + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); + if (sWonderNewsData->arrowTaskId != TASK_NONE) + { + RemoveScrollIndicatorArrowPair(sWonderNewsData->arrowTaskId); + sWonderNewsData->arrowTaskId = TASK_NONE; + } + break; + case 5: + PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, useCancel); + MG_DrawCheckerboardPattern(3); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(3); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); + break; + default: + if (UpdatePaletteFade()) + return 0; + sWonderNewsData->enterExitState = 0; + return 1; + } + sWonderNewsData->enterExitState++; + return 0; +} + +void WonderNews_RemoveScrollIndicatorArrowPair(void) +{ + if (!sWonderNewsData->arrowsRemoved && sWonderNewsData->arrowTaskId != TASK_NONE) + { + RemoveScrollIndicatorArrowPair(sWonderNewsData->arrowTaskId); + sWonderNewsData->arrowTaskId = TASK_NONE; + sWonderNewsData->arrowsRemoved = TRUE; + } +} + + +void WonderNews_AddScrollIndicatorArrowPair(void) +{ + if (sWonderNewsData->arrowsRemoved) + { + sWonderNewsData->arrowTaskId = AddScrollIndicatorArrowPair(&sWonderNewsData->arrowsTemplate, &sWonderNewsData->scrollOffset); + sWonderNewsData->arrowsRemoved = FALSE; + } +} + +u32 WonderNews_GetInput(u16 input) +{ + if (sWonderNewsData->scrolling) + { + UpdateNewsScroll(); + return NEWS_INPUT_NONE; + } + switch (input) + { + case A_BUTTON: + return NEWS_INPUT_A; + case B_BUTTON: + return NEWS_INPUT_B; + case DPAD_UP: + if (sWonderNewsData->scrollOffset == 0) + return NEWS_INPUT_NONE; + if (sWonderNewsData->arrowsRemoved) + return NEWS_INPUT_NONE; + sWonderNewsData->scrollingDown = FALSE; + break; + case DPAD_DOWN: + if (sWonderNewsData->scrollOffset == sWonderNewsData->scrollEnd) + return NEWS_INPUT_NONE; + if (sWonderNewsData->arrowsRemoved) + return NEWS_INPUT_NONE; + sWonderNewsData->scrollingDown = TRUE; + break; + default: + return NEWS_INPUT_NONE; + } + + // Init scroll + sWonderNewsData->scrolling = TRUE; + sWonderNewsData->scrollIncrement = 2; + sWonderNewsData->scrollTotal = 0; + if (!sWonderNewsData->scrollingDown) + return NEWS_INPUT_SCROLL_UP; + else + return NEWS_INPUT_SCROLL_DOWN; +} + +static void BufferNewsText(void) +{ + u8 i = 0; + + // Copy title text + memcpy(sWonderNewsData->titleText, sWonderNewsData->news.titleText, WONDER_NEWS_TEXT_LENGTH); + sWonderNewsData->titleText[WONDER_NEWS_TEXT_LENGTH] = EOS; + + // Copy body text + for (; i < WONDER_NEWS_BODY_TEXT_LINES; i++) + { + memcpy(sWonderNewsData->bodyText[i], sWonderNewsData->news.bodyText[i], WONDER_NEWS_TEXT_LENGTH); + sWonderNewsData->bodyText[i][WONDER_NEWS_TEXT_LENGTH] = EOS; + if (i > 7 && sWonderNewsData->bodyText[i][0] != EOS) + sWonderNewsData->scrollEnd++; + } + sWonderNewsData->arrowsTemplate = sNews_ArrowsTemplate; + sWonderNewsData->arrowsTemplate.fullyDownThreshold = sWonderNewsData->scrollEnd; +} + +static void DrawNewsWindows(void) +{ + u8 i = 0; + s32 x; + PutWindowTilemap(sWonderNewsData->windowIds[NEWS_WIN_TITLE]); + PutWindowTilemap(sWonderNewsData->windowIds[NEWS_WIN_BODY]); + FillWindowPixelBuffer(sWonderNewsData->windowIds[NEWS_WIN_TITLE], 0); + FillWindowPixelBuffer(sWonderNewsData->windowIds[NEWS_WIN_BODY], 0); + + // Print title text + x = (224 - GetStringWidth(FONT_SHORT_COPY_1, sWonderNewsData->titleText, GetFontAttribute(FONT_SHORT_COPY_1, FONTATTR_LETTER_SPACING))) / 2; + if (x < 0) + x = 0; + AddTextPrinterParameterized3(sWonderNewsData->windowIds[NEWS_WIN_TITLE], FONT_SHORT_COPY_1, x, 6, sNews_TextColorTable[sWonderNewsData->gfx->titleTextPal], 0, sWonderNewsData->titleText); + + // Print body text + for (; i < WONDER_NEWS_BODY_TEXT_LINES; i++) + AddTextPrinterParameterized3(sWonderNewsData->windowIds[NEWS_WIN_BODY], FONT_SHORT_COPY_1, 0, + 16 * i + 2, + sNews_TextColorTable[sWonderNewsData->gfx->bodyTextPal], + 0, sWonderNewsData->bodyText[i]); + + CopyWindowToVram(sWonderNewsData->windowIds[NEWS_WIN_TITLE], COPYWIN_FULL); + CopyWindowToVram(sWonderNewsData->windowIds[NEWS_WIN_BODY], COPYWIN_FULL); +} + +static void UpdateNewsScroll(void) +{ + u16 bgMove = sWonderNewsData->scrollIncrement; + bgMove *= 256; + if (sWonderNewsData->scrollingDown) + { + ChangeBgY(2, bgMove, BG_COORD_ADD); + ChangeBgY(3, bgMove, BG_COORD_ADD); + } + else + { + ChangeBgY(2, bgMove, BG_COORD_SUB); + ChangeBgY(3, bgMove, BG_COORD_SUB); + } + sWonderNewsData->scrollTotal += sWonderNewsData->scrollIncrement; + if (sWonderNewsData->scrollTotal > 15) + { + if (sWonderNewsData->scrollingDown) + sWonderNewsData->scrollOffset++; + else + sWonderNewsData->scrollOffset--; + sWonderNewsData->scrolling = FALSE; + sWonderNewsData->scrollTotal = 0; + } +} diff --git a/src/naming_screen.c b/src/naming_screen.c index 8578f06ec4..a6e55eed60 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -25,6 +25,8 @@ #include "menu.h" #include "text_window.h" #include "overworld.h" +#include "walda_phrase.h" +#include "main.h" #include "constants/event_objects.h" #include "constants/rgb.h" @@ -60,10 +62,10 @@ enum { }; enum { - PALTAG_PC_ICON, + PALTAG_MENU, // Also the PC icon PALTAG_PAGE_SWAP_UPPER, PALTAG_PAGE_SWAP_LOWER, - PALTAG_PAGE_SWAP_OTHERS, + PALTAG_PAGE_SWAP_OTHERS, // Also the input arrow/underscore PALTAG_PAGE_SWAP, PALTAG_CURSOR, PALTAG_BACK_BUTTON, @@ -149,7 +151,7 @@ struct NamingScreenTemplate const u8 *title; }; -struct NamingScreenData +struct NamingScreenData { u8 tilemapBuffer1[0x800]; u8 tilemapBuffer2[0x800]; @@ -179,21 +181,11 @@ struct NamingScreenData }; EWRAM_DATA static struct NamingScreenData *sNamingScreen = NULL; -extern u16 gKeyRepeatStartDelay; -// extern text -extern const u8 gText_MoveOkBack[]; -extern const u8 gText_YourName[]; -extern const u8 gText_BoxName[]; -extern const u8 gText_PkmnsNickname[]; -extern const u8 gText_TellHimTheWords[]; - - -// start of .rodata -static const u8 sPCIconOff_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/off.4bpp"); -static const u8 sPCIconOn_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/on.4bpp"); +static const u8 sPCIconOff_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon_off.4bpp"); +static const u8 sPCIconOn_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon_on.4bpp"); static const u16 sKeyboard_Pal[] = INCBIN_U16("graphics/naming_screen/keyboard.gbapal"); -static const u16 sUnused_Pal[] = INCBIN_U16("graphics/naming_screen/unused.gbapal"); +static const u16 sRival_Pal[] = INCBIN_U16("graphics/naming_screen/rival.gbapal"); // Unused, leftover from FRLG rival static const u8 *const sTransferredToPCMessages[] = { @@ -285,32 +277,38 @@ static const struct WindowTemplate sWindowTemplates[WIN_COUNT + 1] = // This handles what characters get inserted when a key is pressed // The keys shown on the keyboard are handled separately by sNamingScreenKeyboardText -static const u8 sKeyboardChars[KBPAGE_COUNT * KBROW_COUNT * KBCOL_COUNT] = __( - "abcdef ." - "ghijkl ," - "mnopqrs " - "tuvwxyz " - "ABCDEF ." - "GHIJKL ," - "MNOPQRS " - "TUVWXYZ " - "01234 " - "56789 " - "!?♂♀/- " - "…“”‘' "); - -static const u8 sPageColumnCounts[KBPAGE_COUNT] = { - [KEYBOARD_LETTERS_LOWER] = KBCOL_COUNT, - [KEYBOARD_LETTERS_UPPER] = KBCOL_COUNT, - [KEYBOARD_SYMBOLS] = 6 -}; -static const u8 sPageColumnXPos[KBPAGE_COUNT * KBCOL_COUNT] = { - 0, 12, 24, 56, 68, 80, 92, 123, // KEYBOARD_LETTERS_LOWER - 0, 12, 24, 56, 68, 80, 92, 123, // KEYBOARD_LETTERS_UPPER - 0, 22, 44, 66, 88, 110 // KEYBOARD_SYMBOLS +static const u8 sKeyboardChars[KBPAGE_COUNT][KBROW_COUNT][KBCOL_COUNT] = { + [KEYBOARD_LETTERS_LOWER] = { + __("abcdef ."), + __("ghijkl ,"), + __("mnopqrs "), + __("tuvwxyz "), + }, + [KEYBOARD_LETTERS_UPPER] = { + __("ABCDEF ."), + __("GHIJKL ,"), + __("MNOPQRS "), + __("TUVWXYZ "), + }, + [KEYBOARD_SYMBOLS] = { + __("01234 "), + __("56789 "), + __("!?♂♀/- "), + __("…“”‘' "), + } +}; + +static const u8 sPageColumnCounts[KBPAGE_COUNT] = { + [KEYBOARD_LETTERS_LOWER] = KBCOL_COUNT, + [KEYBOARD_LETTERS_UPPER] = KBCOL_COUNT, + [KEYBOARD_SYMBOLS] = 6 +}; +static const u8 sPageColumnXPos[KBPAGE_COUNT][KBCOL_COUNT] = { + [KEYBOARD_LETTERS_LOWER] = {0, 12, 24, 56, 68, 80, 92, 123}, + [KEYBOARD_LETTERS_UPPER] = {0, 12, 24, 56, 68, 80, 92, 123}, + [KEYBOARD_SYMBOLS] = {0, 22, 44, 66, 88, 110} }; -// forward declarations static const struct NamingScreenTemplate *const sNamingScreenTemplates[]; static const struct SubspriteTable sSubspriteTable_PageSwapFrame[]; static const struct SubspriteTable sSubspriteTable_PageSwapText[]; @@ -325,7 +323,7 @@ static const struct SpriteTemplate sSpriteTemplate_Cursor; static const struct SpriteTemplate sSpriteTemplate_InputArrow; static const struct SpriteTemplate sSpriteTemplate_Underscore; static const struct SpriteTemplate sSpriteTemplate_PCIcon; -static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT]; +static const u8 *const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT]; static const struct SpriteSheet sSpriteSheets[]; static const struct SpritePalette sSpritePalettes[]; @@ -508,14 +506,14 @@ static void NamingScreen_InitBGs(void) ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); InitStandardTextBoxWindows(); InitTextBoxGfxAndPrinters(); @@ -583,25 +581,25 @@ static void Task_NamingScreen(u8 taskId) } // Which gfx/pal to load for the swap page button -static const u8 sPageToNextGfxId[KBPAGE_COUNT] = -{ - [KBPAGE_SYMBOLS] = PAGE_SWAP_UPPER, - [KBPAGE_LETTERS_UPPER] = PAGE_SWAP_LOWER, - [KBPAGE_LETTERS_LOWER] = PAGE_SWAP_OTHERS +static const u8 sPageToNextGfxId[KBPAGE_COUNT] = +{ + [KBPAGE_SYMBOLS] = PAGE_SWAP_UPPER, + [KBPAGE_LETTERS_UPPER] = PAGE_SWAP_LOWER, + [KBPAGE_LETTERS_LOWER] = PAGE_SWAP_OTHERS }; -static const u8 sPageToNextKeyboardId[KBPAGE_COUNT] = -{ - [KBPAGE_SYMBOLS] = KEYBOARD_LETTERS_UPPER, - [KBPAGE_LETTERS_UPPER] = KEYBOARD_LETTERS_LOWER, - [KBPAGE_LETTERS_LOWER] = KEYBOARD_SYMBOLS +static const u8 sPageToNextKeyboardId[KBPAGE_COUNT] = +{ + [KBPAGE_SYMBOLS] = KEYBOARD_LETTERS_UPPER, + [KBPAGE_LETTERS_UPPER] = KEYBOARD_LETTERS_LOWER, + [KBPAGE_LETTERS_LOWER] = KEYBOARD_SYMBOLS }; -static const u8 sPageToKeyboardId[KBPAGE_COUNT] = -{ - [KBPAGE_SYMBOLS] = KEYBOARD_SYMBOLS, - [KBPAGE_LETTERS_UPPER] = KEYBOARD_LETTERS_UPPER, - [KBPAGE_LETTERS_LOWER] = KEYBOARD_LETTERS_LOWER +static const u8 sPageToKeyboardId[KBPAGE_COUNT] = +{ + [KBPAGE_SYMBOLS] = KEYBOARD_SYMBOLS, + [KBPAGE_LETTERS_UPPER] = KEYBOARD_LETTERS_UPPER, + [KBPAGE_LETTERS_LOWER] = KEYBOARD_LETTERS_LOWER }; static u8 PageToNextGfxId(u8 page) @@ -674,7 +672,7 @@ static bool8 MainState_PressedOKButton(void) SetInputState(INPUT_STATE_DISABLED); SetCursorFlashing(FALSE); TryStartButtonFlash(BUTTON_COUNT, FALSE, TRUE); - if (sNamingScreen->templateNum == NAMING_SCREEN_CAUGHT_MON + if (sNamingScreen->templateNum == NAMING_SCREEN_CAUGHT_MON && CalculatePlayerPartyCount() >= PARTY_SIZE) { DisplaySentToPCMessage(); @@ -730,10 +728,10 @@ static void DisplaySentToPCMessage(void) stringToDisplay++; StringExpandPlaceholders(gStringVar4, sTransferredToPCMessages[stringToDisplay]); - DrawDialogueFrame(0, 0); + DrawDialogueFrame(0, FALSE); gTextFlags.canABSpeedUpPrint = TRUE; - AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeedDelay(), 0, 2, 1, 3); - CopyWindowToVram(0, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + CopyWindowToVram(0, COPYWIN_FULL); } static bool8 MainState_WaitSentToPCMessage(void) @@ -1030,9 +1028,9 @@ static void SpriteCB_Cursor(struct Sprite *sprite) if (sprite->sX == GetCurrentPageColumnCount()) sprite->invisible = TRUE; - if (sprite->invisible + if (sprite->invisible || !(sprite->sFlashing) - || sprite->sX != sprite->sPrevX + || sprite->sX != sprite->sPrevX || sprite->sY != sprite->sPrevY) { sprite->sColor = 0; @@ -1134,7 +1132,7 @@ static void SetCursorPos(s16 x, s16 y) struct Sprite *cursorSprite = &gSprites[sNamingScreen->cursorSpriteId]; if (x < sPageColumnCounts[CurrentPageToKeyboardId()]) - cursorSprite->x = sPageColumnXPos[x + CurrentPageToKeyboardId() * KBCOL_COUNT] + 38; + cursorSprite->x = sPageColumnXPos[CurrentPageToKeyboardId()][x] + 38; else cursorSprite->x = 0; @@ -1310,14 +1308,14 @@ static bool8 PageSwapSprite_SlideOn(struct Sprite *sprite) } static const u16 sPageSwapPalTags[] = { - [PAGE_SWAP_UPPER] = PALTAG_PAGE_SWAP_UPPER, - [PAGE_SWAP_OTHERS] = PALTAG_PAGE_SWAP_OTHERS, + [PAGE_SWAP_UPPER] = PALTAG_PAGE_SWAP_UPPER, + [PAGE_SWAP_OTHERS] = PALTAG_PAGE_SWAP_OTHERS, [PAGE_SWAP_LOWER] = PALTAG_PAGE_SWAP_LOWER }; static const u16 sPageSwapGfxTags[] = { - [PAGE_SWAP_UPPER] = GFXTAG_PAGE_SWAP_UPPER, - [PAGE_SWAP_OTHERS] = GFXTAG_PAGE_SWAP_OTHERS, + [PAGE_SWAP_UPPER] = GFXTAG_PAGE_SWAP_UPPER, + [PAGE_SWAP_OTHERS] = GFXTAG_PAGE_SWAP_OTHERS, [PAGE_SWAP_LOWER] = GFXTAG_PAGE_SWAP_LOWER }; @@ -1400,10 +1398,10 @@ static void NamingScreen_CreatePlayerIcon(void) u8 rivalGfxId; u8 spriteId; - rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, sNamingScreen->monSpecies); - spriteId = AddPseudoObjectEvent(rivalGfxId, SpriteCallbackDummy, 56, 37, 0); + rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, sNamingScreen->monSpecies); + spriteId = CreateObjectGraphicsSprite(rivalGfxId, SpriteCallbackDummy, 56, 37, 0); gSprites[spriteId].oam.priority = 3; - StartSpriteAnim(&gSprites[spriteId], 4); + StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_SOUTH); } static void NamingScreen_CreatePCIcon(void) @@ -1428,9 +1426,9 @@ static void NamingScreen_CreateWaldaDadIcon(void) { u8 spriteId; - spriteId = AddPseudoObjectEvent(OBJ_EVENT_GFX_MAN_1, SpriteCallbackDummy, 56, 37, 0); + spriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MAN_1, SpriteCallbackDummy, 56, 37, 0); gSprites[spriteId].oam.priority = 3; - StartSpriteAnim(&gSprites[spriteId], 4); + StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_SOUTH); } //-------------------------------------------------- @@ -1651,7 +1649,7 @@ static void HandleDpadMovement(struct Task *task) if (cursorX > GetCurrentPageColumnCount()) cursorX = 0; - + // Handle moving on/off the button column if (sDpadDeltaX[input] != 0) { @@ -1706,7 +1704,7 @@ static void HandleDpadMovement(struct Task *task) static void DrawNormalTextEntryBox(void) { FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1)); - AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], 1, sNamingScreen->template->title, 8, 1, 0, 0); + AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_NORMAL, sNamingScreen->template->title, 8, 1, 0, 0); PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]); } @@ -1717,7 +1715,7 @@ static void DrawMonTextEntryBox(void) StringCopy(buffer, gSpeciesNames[sNamingScreen->monSpecies]); StringAppendN(buffer, sNamingScreen->template->title, 15); FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1)); - AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], 1, buffer, 8, 1, 0, 0); + AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_NORMAL, buffer, 8, 1, 0, 0); PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]); } @@ -1773,13 +1771,13 @@ static void DrawGenderIcon(void) StringCopy(text, gText_FemaleSymbol); isFemale = TRUE; } - AddTextPrinterParameterized3(sNamingScreen->windows[WIN_TEXT_ENTRY], 1, 0x68, 1, sGenderColors[isFemale], -1, text); + AddTextPrinterParameterized3(sNamingScreen->windows[WIN_TEXT_ENTRY], FONT_NORMAL, 0x68, 1, sGenderColors[isFemale], TEXT_SKIP_DRAW, text); } } static u8 GetCharAtKeyboardPos(s16 x, s16 y) { - return sKeyboardChars[x + y * KBCOL_COUNT + CurrentPageToKeyboardId() * KBCOL_COUNT * KBROW_COUNT]; + return sKeyboardChars[CurrentPageToKeyboardId()][y][x]; } @@ -1882,7 +1880,7 @@ static void CreateHelperTasks(void) static void LoadPalettes(void) { - LoadPalette(gNamingScreenMenu_Pal, 0, 0xC0); + LoadPalette(gNamingScreenMenu_Pal, 0, sizeof(gNamingScreenMenu_Pal)); LoadPalette(sKeyboard_Pal, 0xA0, sizeof(sKeyboard_Pal)); LoadPalette(GetTextWindowPalette(2), 0xB0, 0x20); } @@ -1913,11 +1911,11 @@ static void DrawTextEntry(void) temp[1] = gText_ExpandedPlaceholder_Empty[0]; extraWidth = (IsWideLetter(temp[0]) == TRUE) ? 2 : 0; - AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY], 1, temp, i * 8 + x + extraWidth, 1, 0xFF, NULL); + AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY], FONT_NORMAL, temp, i * 8 + x + extraWidth, 1, TEXT_SKIP_DRAW, NULL); } TryDrawGenderIcon(); - CopyWindowToVram(sNamingScreen->windows[WIN_TEXT_ENTRY], 2); + CopyWindowToVram(sNamingScreen->windows[WIN_TEXT_ENTRY], COPYWIN_GFX); PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY]); } @@ -1956,7 +1954,7 @@ static void PrintKeyboardKeys(u8 window, u8 page) FillWindowPixelBuffer(window, sFillValues[page]); for (i = 0; i < KBROW_COUNT; i++) - AddTextPrinterParameterized3(window, 1, 0, i * 16 + 1, sKeyboardTextColors[page], 0, sNamingScreenKeyboardText[page][i]); + AddTextPrinterParameterized3(window, FONT_NORMAL, 0, i * 16 + 1, sKeyboardTextColors[page], 0, sNamingScreenKeyboardText[page][i]); PutWindowTilemap(window); } @@ -2002,9 +2000,9 @@ static void PrintControls(void) const u8 color[3] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; FillWindowPixelBuffer(sNamingScreen->windows[WIN_BANNER], PIXEL_FILL(15)); - AddTextPrinterParameterized3(sNamingScreen->windows[WIN_BANNER], 0, 2, 1, color, 0, gText_MoveOkBack); + AddTextPrinterParameterized3(sNamingScreen->windows[WIN_BANNER], FONT_SMALL, 2, 1, color, 0, gText_MoveOkBack); PutWindowTilemap(sNamingScreen->windows[WIN_BANNER]); - CopyWindowToVram(sNamingScreen->windows[WIN_BANNER], 3); + CopyWindowToVram(sNamingScreen->windows[WIN_BANNER], COPYWIN_FULL); } static void CB2_NamingScreen(void) @@ -2089,7 +2087,7 @@ static void Debug_NamingScreenNickname(void) static const struct NamingScreenTemplate sPlayerNamingScreenTemplate = { .copyExistingString = FALSE, - .maxChars = 7, + .maxChars = PLAYER_NAME_LENGTH, .iconFunction = 1, .addGenderIcon = FALSE, .initialPage = KBPAGE_LETTERS_UPPER, @@ -2100,7 +2098,7 @@ static const struct NamingScreenTemplate sPlayerNamingScreenTemplate = static const struct NamingScreenTemplate sPCBoxNamingTemplate = { .copyExistingString = FALSE, - .maxChars = 8, + .maxChars = BOX_NAME_LENGTH, .iconFunction = 2, .addGenderIcon = FALSE, .initialPage = KBPAGE_LETTERS_UPPER, @@ -2111,7 +2109,7 @@ static const struct NamingScreenTemplate sPCBoxNamingTemplate = static const struct NamingScreenTemplate sMonNamingScreenTemplate = { .copyExistingString = FALSE, - .maxChars = 10, + .maxChars = POKEMON_NAME_LENGTH, .iconFunction = 3, .addGenderIcon = TRUE, .initialPage = KBPAGE_LETTERS_UPPER, @@ -2122,7 +2120,7 @@ static const struct NamingScreenTemplate sMonNamingScreenTemplate = static const struct NamingScreenTemplate sWaldaWordsScreenTemplate = { .copyExistingString = TRUE, - .maxChars = 15, + .maxChars = WALDA_PHRASE_LENGTH, .iconFunction = 4, .addGenderIcon = FALSE, .initialPage = KBPAGE_LETTERS_UPPER, @@ -2184,67 +2182,67 @@ static const struct OamData sOam_32x16 = static const struct Subsprite sSubsprites_PageSwapFrame[] = { { - .x = -20, - .y = -16, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 0, - .priority = 1 - }, - { - .x = 12, - .y = -16, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 4, - .priority = 1 - }, - { - .x = -20, - .y = -8, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 5, - .priority = 1 - }, - { - .x = 12, - .y = -8, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 9, - .priority = 1 - }, - { - .x = -20, - .y = 0, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 10, - .priority = 1 - }, - { - .x = 12, - .y = 0, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 14, - .priority = 1 - }, - { - .x = -20, - .y = 8, - .shape = SPRITE_SHAPE(32x8), + .x = -20, + .y = -16, + .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileOffset = 15, + .tileOffset = 0, .priority = 1 }, { - .x = 12, - .y = 8, - .shape = SPRITE_SHAPE(8x8), + .x = 12, + .y = -16, + .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), - .tileOffset = 19, + .tileOffset = 4, + .priority = 1 + }, + { + .x = -20, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 5, + .priority = 1 + }, + { + .x = 12, + .y = -8, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 9, + .priority = 1 + }, + { + .x = -20, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 10, + .priority = 1 + }, + { + .x = 12, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 14, + .priority = 1 + }, + { + .x = -20, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 15, + .priority = 1 + }, + { + .x = 12, + .y = 8, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 19, .priority = 1 } }; @@ -2252,19 +2250,19 @@ static const struct Subsprite sSubsprites_PageSwapFrame[] = static const struct Subsprite sSubsprites_PageSwapText[] = { { - .x = -12, - .y = -4, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 0, + .x = -12, + .y = -4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 0, .priority = 1 }, { - .x = 4, - .y = -4, - .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8), - .tileOffset = 2, + .x = 4, + .y = -4, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 2, .priority = 1 } }; @@ -2272,51 +2270,51 @@ static const struct Subsprite sSubsprites_PageSwapText[] = static const struct Subsprite sSubsprites_Button[] = { { - .x = -20, - .y = -12, - .shape = SPRITE_SHAPE(32x8), + .x = -20, + .y = -12, + .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .tileOffset = 0, .priority = 1 }, { - .x = 12, - .y = -12, - .shape = SPRITE_SHAPE(8x8), + .x = 12, + .y = -12, + .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), - .tileOffset = 4, + .tileOffset = 4, .priority = 1 }, { - .x = -20, - .y = -4, - .shape = SPRITE_SHAPE(32x8), + .x = -20, + .y = -4, + .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileOffset = 5, + .tileOffset = 5, .priority = 1 }, { - .x = 12, - .y = -4, - .shape = SPRITE_SHAPE(8x8), + .x = 12, + .y = -4, + .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), - .tileOffset = 9, + .tileOffset = 9, .priority = 1 }, { - .x = -20, - .y = 4, - .shape = SPRITE_SHAPE(32x8), - .size = SPRITE_SIZE(32x8), - .tileOffset = 10, + .x = -20, + .y = 4, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 10, .priority = 1 }, { - .x = 12, - .y = 4, - .shape = SPRITE_SHAPE(8x8), + .x = 12, + .y = 4, + .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), - .tileOffset = 14, + .tileOffset = 14, .priority = 1 } }; @@ -2324,27 +2322,27 @@ static const struct Subsprite sSubsprites_Button[] = static const struct Subsprite sSubsprites_PCIcon[] = { { - .x = -8, - .y = -12, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 0, - .priority = 3 - }, - { - .x = -8, - .y = -4, - .shape = SPRITE_SHAPE(16x8), + .x = -8, + .y = -12, + .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), - .tileOffset = 2, + .tileOffset = 0, .priority = 3 }, { - .x = -8, - .y = 4, - .shape = SPRITE_SHAPE(16x8), - .size = SPRITE_SIZE(16x8), - .tileOffset = 4, + .x = -8, + .y = -4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 2, + .priority = 3 + }, + { + .x = -8, + .y = 4, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 4, .priority = 3 } }; @@ -2503,8 +2501,8 @@ static const struct SpriteTemplate sSpriteTemplate_Underscore = static const struct SpriteTemplate sSpriteTemplate_PCIcon = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_PC_ICON, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_MENU, .oam = &sOam_8x8, .anims = sAnims_PCIcon, .images = sImageTable_PCIcon, @@ -2512,23 +2510,23 @@ static const struct SpriteTemplate sSpriteTemplate_PCIcon = .callback = SpriteCallbackDummy }; -static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] = +static const u8 *const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] = { - [KEYBOARD_LETTERS_LOWER] = + [KEYBOARD_LETTERS_LOWER] = { gText_NamingScreenKeyboard_abcdef, gText_NamingScreenKeyboard_ghijkl, gText_NamingScreenKeyboard_mnopqrs, gText_NamingScreenKeyboard_tuvwxyz }, - [KEYBOARD_LETTERS_UPPER] = + [KEYBOARD_LETTERS_UPPER] = { gText_NamingScreenKeyboard_ABCDEF, gText_NamingScreenKeyboard_GHIJKL, gText_NamingScreenKeyboard_MNOPQRS, gText_NamingScreenKeyboard_TUVWXYZ }, - [KEYBOARD_SYMBOLS] = + [KEYBOARD_SYMBOLS] = { gText_NamingScreenKeyboard_01234, gText_NamingScreenKeyboard_56789, @@ -2539,31 +2537,31 @@ static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] = static const struct SpriteSheet sSpriteSheets[] = { - {gNamingScreenRWindow_Gfx + 0x280, 0x1E0, GFXTAG_BACK_BUTTON}, - {gNamingScreenRWindow_Gfx + 0x460, 0x1E0, GFXTAG_OK_BUTTON}, - {gNamingScreenRWindow_Gfx, 0x280, GFXTAG_PAGE_SWAP_FRAME}, - {gNamingScreenPageButton_Gfx + 0x20, 0x100, GFXTAG_PAGE_SWAP_BUTTON}, - {gNamingScreenROptions_Gfx, 0x060, GFXTAG_PAGE_SWAP_UPPER}, - {gNamingScreenROptions_Gfx + 0xA0, 0x060, GFXTAG_PAGE_SWAP_LOWER}, - {gNamingScreenROptions_Gfx + 0x140, 0x060, GFXTAG_PAGE_SWAP_OTHERS}, - {gNamingScreenCursor_Gfx, 0x080, GFXTAG_CURSOR}, - {gNamingScreenCursor_Gfx + 0xA0, 0x080, GFXTAG_CURSOR_SQUISHED}, - {gNamingScreenCursor_Gfx + 0x140, 0x080, GFXTAG_CURSOR_FILLED}, - {gNamingScreenInputArrow_Gfx, 0x020, GFXTAG_INPUT_ARROW}, - {gNamingScreenUnderscore_Gfx, 0x020, GFXTAG_UNDERSCORE}, + {gNamingScreenBackButton_Gfx, 0x1E0, GFXTAG_BACK_BUTTON}, + {gNamingScreenOKButton_Gfx, 0x1E0, GFXTAG_OK_BUTTON}, + {gNamingScreenPageSwapFrame_Gfx, 0x280, GFXTAG_PAGE_SWAP_FRAME}, + {gNamingScreenPageSwapButton_Gfx, 0x100, GFXTAG_PAGE_SWAP_BUTTON}, + {gNamingScreenPageSwapUpper_Gfx, 0x060, GFXTAG_PAGE_SWAP_UPPER}, + {gNamingScreenPageSwapLower_Gfx, 0x060, GFXTAG_PAGE_SWAP_LOWER}, + {gNamingScreenPageSwapOthers_Gfx, 0x060, GFXTAG_PAGE_SWAP_OTHERS}, + {gNamingScreenCursor_Gfx, 0x080, GFXTAG_CURSOR}, + {gNamingScreenCursorSquished_Gfx, 0x080, GFXTAG_CURSOR_SQUISHED}, + {gNamingScreenCursorFilled_Gfx, 0x080, GFXTAG_CURSOR_FILLED}, + {gNamingScreenInputArrow_Gfx, 0x020, GFXTAG_INPUT_ARROW}, + {gNamingScreenUnderscore_Gfx, 0x020, GFXTAG_UNDERSCORE}, {} }; static const struct SpritePalette sSpritePalettes[] = { - {gNamingScreenMenu_Pal, PALTAG_PC_ICON}, - {gNamingScreenMenu_Pal + 0x10, PALTAG_PAGE_SWAP_UPPER}, - {gNamingScreenMenu_Pal + 0x20, PALTAG_PAGE_SWAP_LOWER}, - {gNamingScreenMenu_Pal + 0x30, PALTAG_PAGE_SWAP_OTHERS}, - {gNamingScreenMenu_Pal + 0x40, PALTAG_PAGE_SWAP}, - {gNamingScreenMenu_Pal + 0x50, PALTAG_CURSOR}, - {gNamingScreenMenu_Pal + 0x40, PALTAG_BACK_BUTTON}, - {gNamingScreenMenu_Pal + 0x40, PALTAG_OK_BUTTON}, + {gNamingScreenMenu_Pal[0], PALTAG_MENU}, + {gNamingScreenMenu_Pal[1], PALTAG_PAGE_SWAP_UPPER}, + {gNamingScreenMenu_Pal[2], PALTAG_PAGE_SWAP_LOWER}, + {gNamingScreenMenu_Pal[3], PALTAG_PAGE_SWAP_OTHERS}, + {gNamingScreenMenu_Pal[4], PALTAG_PAGE_SWAP}, + {gNamingScreenMenu_Pal[5], PALTAG_CURSOR}, + {gNamingScreenMenu_Pal[4], PALTAG_BACK_BUTTON}, + {gNamingScreenMenu_Pal[4], PALTAG_OK_BUTTON}, {} }; diff --git a/src/new_game.c b/src/new_game.c index 2d04303cea..8f8aa9b82b 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -29,7 +29,6 @@ #include "pokedex.h" #include "apprentice.h" #include "frontier_util.h" -#include "constants/maps.h" #include "pokedex.h" #include "save.h" #include "link_rfu.h" @@ -43,8 +42,9 @@ #include "player_pc.h" #include "field_specials.h" #include "berry_powder.h" -#include "mevent.h" +#include "mystery_gift.h" #include "union_room_chat.h" +#include "constants/items.h" extern const u8 EventScript_ResetAllMapFlags[]; @@ -126,7 +126,7 @@ static void ClearFrontierRecord(void) static void WarpToTruck(void) { - SetWarpDestination(MAP_GROUP(INSIDE_OF_TRUCK), MAP_NUM(INSIDE_OF_TRUCK), -1, -1, -1); + SetWarpDestination(MAP_GROUP(INSIDE_OF_TRUCK), MAP_NUM(INSIDE_OF_TRUCK), WARP_ID_NONE, -1, -1); WarpIntoMap(); } @@ -158,7 +158,7 @@ void NewGameInitData(void) ResetPokedex(); ClearFrontierRecord(); ClearSav1(); - ClearMailData(); + ClearAllMail(); gSaveBlock2Ptr->specialSaveWarpFlags = 0; gSaveBlock2Ptr->gcnLinkFlags = 0; InitPlayerTrainerId(); @@ -193,14 +193,14 @@ void NewGameInitData(void) ResetFanClub(); ResetLotteryCorner(); WarpToTruck(); - ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags); + RunScriptImmediately(EventScript_ResetAllMapFlags); ResetMiniGamesRecords(); InitUnionRoomChatRegisteredTexts(); InitLilycoveLady(); ResetAllApprenticeData(); ClearRankingHallRecords(); InitMatchCallCounters(); - sub_801AFD8(); + ClearMysteryGift(); WipeTrainerNameRecords(); ResetTrainerHillResults(); ResetContestLinkResults(); diff --git a/src/option_menu.c b/src/option_menu.c index 0174b69db7..3ca9857e84 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -79,9 +79,9 @@ static void DrawBgWindowFrames(void); EWRAM_DATA static bool8 sArrowPressed = FALSE; -static const u16 sOptionMenuText_Pal[] = INCBIN_U16("graphics/misc/option_menu_text.gbapal"); +static const u16 sOptionMenuText_Pal[] = INCBIN_U16("graphics/interface/option_menu_text.gbapal"); // note: this is only used in the Japanese release -static const u8 sEqualSignGfx[] = INCBIN_U8("graphics/misc/option_menu_equals_sign.4bpp"); +static const u8 sEqualSignGfx[] = INCBIN_U8("graphics/interface/option_menu_equals_sign.4bpp"); static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = { @@ -167,20 +167,20 @@ void CB2_InitOptionMenu(void) gMain.state++; break; case 1: - DmaClearLarge16(3, (void*)(VRAM), VRAM_SIZE, 0x1000); + DmaClearLarge16(3, (void *)(VRAM), VRAM_SIZE, 0x1000); DmaClear32(3, OAM, OAM_SIZE); DmaClear16(3, PLTT, PLTT_SIZE); SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sOptionMenuBgTemplates, ARRAY_COUNT(sOptionMenuBgTemplates)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); InitWindows(sOptionMenuWinTemplates); DeactivateAllTextPrinters(); SetGpuReg(REG_OFFSET_WIN0H, 0); @@ -251,7 +251,7 @@ void CB2_InitOptionMenu(void) FrameType_DrawChoices(gTasks[taskId].data[TD_FRAMETYPE]); HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); - CopyWindowToVram(WIN_OPTIONS, 3); + CopyWindowToVram(WIN_OPTIONS, COPYWIN_FULL); gMain.state++; break; } @@ -351,7 +351,7 @@ static void Task_OptionMenuProcessInput(u8 taskId) if (sArrowPressed) { sArrowPressed = FALSE; - CopyWindowToVram(WIN_OPTIONS, 2); + CopyWindowToVram(WIN_OPTIONS, COPYWIN_GFX); } } } @@ -400,7 +400,7 @@ static void DrawOptionMenuChoice(const u8 *text, u8 x, u8 y, u8 style) } dst[i] = EOS; - AddTextPrinterParameterized(WIN_OPTIONS, 1, dst, x, y + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(WIN_OPTIONS, FONT_NORMAL, dst, x, y + 1, TEXT_SKIP_DRAW, NULL); } static u8 TextSpeed_ProcessInput(u8 selection) @@ -438,15 +438,15 @@ static void TextSpeed_DrawChoices(u8 selection) DrawOptionMenuChoice(gText_TextSpeedSlow, 104, YPOS_TEXTSPEED, styles[0]); - widthSlow = GetStringWidth(1, gText_TextSpeedSlow, 0); - widthMid = GetStringWidth(1, gText_TextSpeedMid, 0); - widthFast = GetStringWidth(1, gText_TextSpeedFast, 0); + widthSlow = GetStringWidth(FONT_NORMAL, gText_TextSpeedSlow, 0); + widthMid = GetStringWidth(FONT_NORMAL, gText_TextSpeedMid, 0); + widthFast = GetStringWidth(FONT_NORMAL, gText_TextSpeedFast, 0); widthMid -= 94; xMid = (widthSlow - widthMid - widthFast) / 2 + 104; DrawOptionMenuChoice(gText_TextSpeedMid, xMid, YPOS_TEXTSPEED, styles[1]); - DrawOptionMenuChoice(gText_TextSpeedFast, GetStringRightAlignXOffset(1, gText_TextSpeedFast, 198), YPOS_TEXTSPEED, styles[2]); + DrawOptionMenuChoice(gText_TextSpeedFast, GetStringRightAlignXOffset(FONT_NORMAL, gText_TextSpeedFast, 198), YPOS_TEXTSPEED, styles[2]); } static u8 BattleScene_ProcessInput(u8 selection) @@ -469,7 +469,7 @@ static void BattleScene_DrawChoices(u8 selection) styles[selection] = 1; DrawOptionMenuChoice(gText_BattleSceneOn, 104, YPOS_BATTLESCENE, styles[0]); - DrawOptionMenuChoice(gText_BattleSceneOff, GetStringRightAlignXOffset(1, gText_BattleSceneOff, 198), YPOS_BATTLESCENE, styles[1]); + DrawOptionMenuChoice(gText_BattleSceneOff, GetStringRightAlignXOffset(FONT_NORMAL, gText_BattleSceneOff, 198), YPOS_BATTLESCENE, styles[1]); } static u8 BattleStyle_ProcessInput(u8 selection) @@ -492,7 +492,7 @@ static void BattleStyle_DrawChoices(u8 selection) styles[selection] = 1; DrawOptionMenuChoice(gText_BattleStyleShift, 104, YPOS_BATTLESTYLE, styles[0]); - DrawOptionMenuChoice(gText_BattleStyleSet, GetStringRightAlignXOffset(1, gText_BattleStyleSet, 198), YPOS_BATTLESTYLE, styles[1]); + DrawOptionMenuChoice(gText_BattleStyleSet, GetStringRightAlignXOffset(FONT_NORMAL, gText_BattleStyleSet, 198), YPOS_BATTLESTYLE, styles[1]); } static u8 Sound_ProcessInput(u8 selection) @@ -516,7 +516,7 @@ static void Sound_DrawChoices(u8 selection) styles[selection] = 1; DrawOptionMenuChoice(gText_SoundMono, 104, YPOS_SOUND, styles[0]); - DrawOptionMenuChoice(gText_SoundStereo, GetStringRightAlignXOffset(1, gText_SoundStereo, 198), YPOS_SOUND, styles[1]); + DrawOptionMenuChoice(gText_SoundStereo, GetStringRightAlignXOffset(FONT_NORMAL, gText_SoundStereo, 198), YPOS_SOUND, styles[1]); } static u8 FrameType_ProcessInput(u8 selection) @@ -612,22 +612,22 @@ static void ButtonMode_DrawChoices(u8 selection) DrawOptionMenuChoice(gText_ButtonTypeNormal, 104, YPOS_BUTTONMODE, styles[0]); - widthNormal = GetStringWidth(1, gText_ButtonTypeNormal, 0); - widthLR = GetStringWidth(1, gText_ButtonTypeLR, 0); - widthLA = GetStringWidth(1, gText_ButtonTypeLEqualsA, 0); + widthNormal = GetStringWidth(FONT_NORMAL, gText_ButtonTypeNormal, 0); + widthLR = GetStringWidth(FONT_NORMAL, gText_ButtonTypeLR, 0); + widthLA = GetStringWidth(FONT_NORMAL, gText_ButtonTypeLEqualsA, 0); widthLR -= 94; xLR = (widthNormal - widthLR - widthLA) / 2 + 104; DrawOptionMenuChoice(gText_ButtonTypeLR, xLR, YPOS_BUTTONMODE, styles[1]); - DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(1, gText_ButtonTypeLEqualsA, 198), YPOS_BUTTONMODE, styles[2]); + DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(FONT_NORMAL, gText_ButtonTypeLEqualsA, 198), YPOS_BUTTONMODE, styles[2]); } static void DrawTextOption(void) { FillWindowPixelBuffer(WIN_TEXT_OPTION, PIXEL_FILL(1)); - AddTextPrinterParameterized(WIN_TEXT_OPTION, 1, gText_Option, 8, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(WIN_TEXT_OPTION, 3); + AddTextPrinterParameterized(WIN_TEXT_OPTION, FONT_NORMAL, gText_Option, 8, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(WIN_TEXT_OPTION, COPYWIN_FULL); } static void DrawOptionMenuTexts(void) @@ -636,10 +636,8 @@ static void DrawOptionMenuTexts(void) FillWindowPixelBuffer(WIN_OPTIONS, PIXEL_FILL(1)); for (i = 0; i < MENUITEM_COUNT; i++) - { - AddTextPrinterParameterized(WIN_OPTIONS, 1, sOptionMenuItemsNames[i], 8, (i * 16) + 1, TEXT_SPEED_FF, NULL); - } - CopyWindowToVram(WIN_OPTIONS, 3); + AddTextPrinterParameterized(WIN_OPTIONS, FONT_NORMAL, sOptionMenuItemsNames[i], 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(WIN_OPTIONS, COPYWIN_FULL); } #define TILE_TOP_CORNER_L 0x1A2 diff --git a/src/overworld.c b/src/overworld.c index a2f38c864d..5f9111e4c9 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -62,7 +62,6 @@ #include "constants/abilities.h" #include "constants/layouts.h" #include "constants/map_types.h" -#include "constants/maps.h" #include "constants/region_map_sections.h" #include "constants/songs.h" #include "constants/trainer_hill.h" @@ -128,9 +127,9 @@ static void CreateLinkPlayerSprites(void); static void ClearAllPlayerKeys(void); static void ResetAllPlayerLinkStates(void); static void UpdateHeldKeyCode(u16); -static void UpdateAllLinkPlayers(u16*, s32); +static void UpdateAllLinkPlayers(u16 *, s32); static u8 FlipVerticalAndClearForced(u8, u8); -static u8 LinkPlayerDetectCollision(u8, u8, s16, s16); +static u8 LinkPlayerGetCollision(u8, u8, s16, s16); static void CreateLinkPlayerSprite(u8, u8); static void GetLinkPlayerCoords(u8, u16 *, u16 *); static u8 GetLinkPlayerFacingDirection(u8); @@ -166,7 +165,7 @@ static void ResetPlayerHeldKeys(u16 *); static u16 KeyInterCB_SelfIdle(u32); static u16 KeyInterCB_DeferToEventScript(u32); static u16 GetDirectionForDpadKey(u16); -static void CB1_UpdateLinkState(void); +static void CB1_OverworldLink(void); static void SetKeyInterceptCallback(u16 (*func)(u32)); static void SetFieldVBlankCallback(void); static void FieldClearVBlankHBlankCallbacks(void); @@ -175,7 +174,6 @@ static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *, u static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *, u8, u16, u8); static u16 GetCenterScreenMetatileBehavior(void); -// IWRAM bss vars static void *sUnusedOverworldCallback; static u8 sPlayerLinkStates[MAX_LINK_PLAYERS]; // This callback is called with a player's key code. It then returns an @@ -185,17 +183,15 @@ static u16 (*sPlayerKeyInterceptCallback)(u32); static bool8 sReceivingFromLink; static u8 sRfuKeepAliveTimer; -// IWRAM common -u16 *gBGTilemapBuffers1; -u16 *gBGTilemapBuffers2; -u16 *gBGTilemapBuffers3; +u16 *gOverworldTilemapBuffer_Bg2; +u16 *gOverworldTilemapBuffer_Bg1; +u16 *gOverworldTilemapBuffer_Bg3; u16 gHeldKeyCodeToSend; void (*gFieldCallback)(void); bool8 (*gFieldCallback2)(void); u8 gLocalLinkPlayerId; // This is our player id in a multiplayer mode. u8 gFieldLinkPlayerCount; -// EWRAM vars EWRAM_DATA static u8 sObjectEventLoadFlag = 0; EWRAM_DATA struct WarpData gLastUsedWarp = {0}; EWRAM_DATA static struct WarpData sWarpDestination = {0}; // new warp position @@ -207,12 +203,11 @@ EWRAM_DATA static u16 sAmbientCrySpecies = 0; EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE; EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {0}; -// const rom data static const struct WarpData sDummyWarpData = { - .mapGroup = -1, - .mapNum = -1, - .warpId = -1, + .mapGroup = MAP_GROUP(UNDEFINED), + .mapNum = MAP_NUM(UNDEFINED), + .warpId = WARP_ID_NONE, .x = -1, .y = -1, }; @@ -313,7 +308,7 @@ static const struct BgTemplate sOverworldBgTemplates[] = static const struct ScanlineEffectParams sFlashEffectParams = { - (void *)REG_ADDR_WIN0H, + ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, 1, 0, @@ -323,7 +318,7 @@ static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *, struct Obje static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8); static u8 MovementEventModeCB_Scripted(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8); -static u8 (*const gLinkPlayerMovementModes[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) = +static u8 (*const sLinkPlayerMovementModes[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) = { [MOVEMENT_MODE_FREE] = MovementEventModeCB_Normal, [MOVEMENT_MODE_FROZEN] = MovementEventModeCB_Ignored, @@ -335,7 +330,7 @@ static u8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *, struct Obje static u8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8); // These handlers return TRUE if the movement was scripted and successful, and FALSE otherwise. -static bool8 (*const gLinkPlayerFacingHandlers[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) = +static bool8 (*const sLinkPlayerFacingHandlers[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) = { FacingHandler_DoNothing, FacingHandler_DpadMovement, @@ -354,7 +349,7 @@ static void MovementStatusHandler_EnterFreeMode(struct LinkPlayerObjectEvent *, static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerObjectEvent *, struct ObjectEvent *); // These handlers are run after an attempted movement. -static void (*const gMovementStatusHandler[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *) = +static void (*const sMovementStatusHandler[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *) = { // FALSE: MovementStatusHandler_EnterFreeMode, @@ -365,8 +360,10 @@ static void (*const gMovementStatusHandler[])(struct LinkPlayerObjectEvent *, st // code void DoWhiteOut(void) { - ScriptContext2_RunNewScript(EventScript_WhiteOut); + RunScriptImmediately(EventScript_WhiteOut); + #if B_WHITEOUT_MONEY == GEN_3 SetMoney(&gSaveBlock1Ptr->money, GetMoney(&gSaveBlock1Ptr->money) / 2); + #endif HealPlayerParty(); Overworld_ResetStateAfterWhiteOut(); SetWarpDestinationToLastHealLocation(); @@ -391,7 +388,7 @@ void Overworld_ResetStateAfterTeleport(void) FlagClear(FLAG_SYS_SAFARI_MODE); FlagClear(FLAG_SYS_USE_STRENGTH); FlagClear(FLAG_SYS_USE_FLASH); - ScriptContext2_RunNewScript(EventScript_ResetMrBriney); + RunScriptImmediately(EventScript_ResetMrBriney); } void Overworld_ResetStateAfterDigEscRope(void) @@ -412,6 +409,9 @@ static void Overworld_ResetStateAfterWhiteOut(void) FlagClear(FLAG_SYS_SAFARI_MODE); FlagClear(FLAG_SYS_USE_STRENGTH); FlagClear(FLAG_SYS_USE_FLASH); + #if VAR_TERRAIN != 0 + VarSet(VAR_TERRAIN, 0); + #endif // If you were defeated by Kyogre/Groudon and the step counter has // maxed out, end the abnormal weather. if (VarGet(VAR_SHOULD_END_ABNORMAL_WEATHER) == 1) @@ -495,7 +495,7 @@ void LoadSaveblockObjEventScripts(void) savObjTemplates[i].script = mapHeaderObjTemplates[i].script; } -void Overworld_SetObjEventTemplateCoords(u8 localId, s16 x, s16 y) +void SetObjEventTemplateCoords(u8 localId, s16 x, s16 y) { s32 i; struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates; @@ -512,7 +512,7 @@ void Overworld_SetObjEventTemplateCoords(u8 localId, s16 x, s16 y) } } -void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType) +void SetObjEventTemplateMovementType(u8 localId, u8 movementType) { s32 i; @@ -570,11 +570,11 @@ static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId static bool32 IsDummyWarp(struct WarpData *warp) { - if (warp->mapGroup != -1) + if (warp->mapGroup != (s8)MAP_GROUP(UNDEFINED)) return FALSE; - else if (warp->mapNum != -1) + else if (warp->mapNum != (s8)MAP_NUM(UNDEFINED)) return FALSE; - else if (warp->warpId != -1) + else if (warp->warpId != WARP_ID_NONE) return FALSE; else if (warp->x != -1) return FALSE; @@ -612,16 +612,20 @@ static void SetPlayerCoordsFromWarp(void) { if (gSaveBlock1Ptr->location.warpId >= 0 && gSaveBlock1Ptr->location.warpId < gMapHeader.events->warpCount) { + // warpId is a valid warp for this map, use the coords of that warp. gSaveBlock1Ptr->pos.x = gMapHeader.events->warps[gSaveBlock1Ptr->location.warpId].x; gSaveBlock1Ptr->pos.y = gMapHeader.events->warps[gSaveBlock1Ptr->location.warpId].y; } else if (gSaveBlock1Ptr->location.x >= 0 && gSaveBlock1Ptr->location.y >= 0) { + // Invalid warpId given. The given coords are valid, use those instead. + // WARP_ID_NONE is used to reach this intentionally. gSaveBlock1Ptr->pos.x = gSaveBlock1Ptr->location.x; gSaveBlock1Ptr->pos.y = gSaveBlock1Ptr->location.y; } else { + // Invalid warpId and coords given. Put player in center of map. gSaveBlock1Ptr->pos.x = gMapHeader.mapLayout->width / 2; gSaveBlock1Ptr->pos.y = gMapHeader.mapLayout->height / 2; } @@ -663,7 +667,7 @@ void SetWarpDestinationToHealLocation(u8 healLocationId) { const struct HealLocation *warp = GetHealLocation(healLocationId); if (warp) - SetWarpDestination(warp->group, warp->map, -1, warp->x, warp->y); + SetWarpDestination(warp->group, warp->map, WARP_ID_NONE, warp->x, warp->y); } void SetWarpDestinationToLastHealLocation(void) @@ -675,7 +679,7 @@ void SetLastHealLocationWarp(u8 healLocationId) { const struct HealLocation *healLocation = GetHealLocation(healLocationId); if (healLocation) - SetWarpData(&gSaveBlock1Ptr->lastHealLocation, healLocation->group, healLocation->map, -1, healLocation->x, healLocation->y); + SetWarpData(&gSaveBlock1Ptr->lastHealLocation, healLocation->group, healLocation->map, WARP_ID_NONE, healLocation->x, healLocation->y); } void UpdateEscapeWarp(s16 x, s16 y) @@ -683,7 +687,7 @@ void UpdateEscapeWarp(s16 x, s16 y) u8 currMapType = GetCurrentMapType(); u8 destMapType = GetMapTypeByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum); if (IsMapTypeOutdoors(currMapType) && IsMapTypeOutdoors(destMapType) != TRUE) - SetEscapeWarp(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x - 7, y - 6); + SetEscapeWarp(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE, x - MAP_OFFSET, y - MAP_OFFSET + 1); } void SetEscapeWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) @@ -716,7 +720,7 @@ void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y) if (IsDummyWarp(&sFixedHoleWarp) == TRUE) sWarpDestination = gLastUsedWarp; else - SetWarpDestination(sFixedHoleWarp.mapGroup, sFixedHoleWarp.mapNum, -1, x, y); + SetWarpDestination(sFixedHoleWarp.mapGroup, sFixedHoleWarp.mapNum, WARP_ID_NONE, x, y); } static void SetWarpDestinationToContinueGameWarp(void) @@ -733,7 +737,7 @@ void SetContinueGameWarpToHealLocation(u8 healLocationId) { const struct HealLocation *warp = GetHealLocation(healLocationId); if (warp) - SetWarpData(&gSaveBlock1Ptr->continueGameWarp, warp->group, warp->map, -1, warp->x, warp->y); + SetWarpData(&gSaveBlock1Ptr->continueGameWarp, warp->group, warp->map, WARP_ID_NONE, warp->x, warp->y); } void SetContinueGameWarpToDynamicWarp(int unused) @@ -763,7 +767,7 @@ static bool8 SetDiveWarp(u8 dir, u16 x, u16 y) if (connection != NULL) { - SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y); + SetWarpDestination(connection->mapGroup, connection->mapNum, WARP_ID_NONE, x, y); } else { @@ -789,7 +793,7 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum) { s32 paletteIndex; - SetWarpDestination(mapGroup, mapNum, -1, -1, -1); + SetWarpDestination(mapGroup, mapNum, WARP_ID_NONE, -1, -1); // Dont transition map music between BF Outside West/East if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER) @@ -804,7 +808,7 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum) RestartWildEncounterImmunitySteps(); TryUpdateRandomTrainerRematches(mapGroup, mapNum); DoTimeBasedEvents(); - SetSav1WeatherFromCurrMapHeader(); + SetSavedWeatherFromCurrMapHeader(); ChooseAmbientCrySpecies(); SetDefaultFlashLevel(); Overworld_ClearSavedMusic(); @@ -823,7 +827,7 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum) ResetFieldTasksArgs(); RunOnResumeMapScript(); - if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER + if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER || gMapHeader.regionMapSectionId != sLastMapSectionId) ShowMapNamePopup(); } @@ -855,7 +859,7 @@ static void LoadMapFromWarp(bool32 a1) TryUpdateRandomTrainerRematches(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); if (a1 != TRUE) DoTimeBasedEvents(); - SetSav1WeatherFromCurrMapHeader(); + SetSavedWeatherFromCurrMapHeader(); ChooseAmbientCrySpecies(); if (isOutdoors) FlagClear(FLAG_SYS_USE_FLASH); @@ -957,7 +961,7 @@ static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStr static u16 GetCenterScreenMetatileBehavior(void) { - return MapGridGetMetatileBehaviorAt(gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7); + return MapGridGetMetatileBehaviorAt(gSaveBlock1Ptr->pos.x + MAP_OFFSET, gSaveBlock1Ptr->pos.y + MAP_OFFSET); } bool32 Overworld_IsBikingAllowed(void) @@ -968,6 +972,10 @@ bool32 Overworld_IsBikingAllowed(void) return TRUE; } +// Flash level of 0 is fully bright +// Flash level of 1 is the largest flash radius +// Flash level of 7 is the smallest flash radius +// Flash level of 8 is fully black void SetDefaultFlashLevel(void) { if (!gMapHeader.cave) @@ -978,14 +986,14 @@ void SetDefaultFlashLevel(void) gSaveBlock1Ptr->flashLevel = gMaxFlashLevel - 1; } -void Overworld_SetFlashLevel(s32 flashLevel) +void SetFlashLevel(s32 flashLevel) { if (flashLevel < 0 || flashLevel > gMaxFlashLevel) flashLevel = 0; gSaveBlock1Ptr->flashLevel = flashLevel; } -u8 Overworld_GetFlashLevel(void) +u8 GetFlashLevel(void) { return gSaveBlock1Ptr->flashLevel; } @@ -1082,7 +1090,7 @@ static bool16 IsInflitratedSpaceCenter(struct WarpData *warp) u16 GetLocationMusic(struct WarpData *warp) { if (NoMusicInSotopolisWithLegendaries(warp) == TRUE) - return 0xFFFF; + return MUS_NONE; else if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE) return MUS_ABNORMAL_WEATHER; else if (IsInflitratedSpaceCenter(warp) == TRUE) @@ -1100,7 +1108,7 @@ u16 GetCurrLocationDefaultMusic(void) // Play the desert music only when the sandstorm is active on Route 111. if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111) - && GetSav1Weather() == WEATHER_SANDSTORM) + && GetSavedWeather() == WEATHER_SANDSTORM) return MUS_ROUTE111; music = GetLocationMusic(&gSaveBlock1Ptr->location); @@ -1254,7 +1262,7 @@ static void PlayAmbientCry(void) return; pan = (Random() % 88) + 212; volume = (Random() % 30) + 50; - PlayCry2(sAmbientCrySpecies, pan, volume, 1); + PlayCry_NormalNoDucking(sAmbientCrySpecies, pan, volume, CRY_PRIORITY_AMBIENT); } void UpdateAmbientCry(s16 *state, u16 *delayCounter) @@ -1391,12 +1399,12 @@ static void InitOverworldBgs(void) SetBgAttribute(1, BG_ATTR_MOSAIC, 1); SetBgAttribute(2, BG_ATTR_MOSAIC, 1); SetBgAttribute(3, BG_ATTR_MOSAIC, 1); - gBGTilemapBuffers2 = AllocZeroed(BG_SCREEN_SIZE); - gBGTilemapBuffers1 = AllocZeroed(BG_SCREEN_SIZE); - gBGTilemapBuffers3 = AllocZeroed(BG_SCREEN_SIZE); - SetBgTilemapBuffer(1, gBGTilemapBuffers2); - SetBgTilemapBuffer(2, gBGTilemapBuffers1); - SetBgTilemapBuffer(3, gBGTilemapBuffers3); + gOverworldTilemapBuffer_Bg1 = AllocZeroed(BG_SCREEN_SIZE); + gOverworldTilemapBuffer_Bg2 = AllocZeroed(BG_SCREEN_SIZE); + gOverworldTilemapBuffer_Bg3 = AllocZeroed(BG_SCREEN_SIZE); + SetBgTilemapBuffer(1, gOverworldTilemapBuffer_Bg1); + SetBgTilemapBuffer(2, gOverworldTilemapBuffer_Bg2); + SetBgTilemapBuffer(3, gOverworldTilemapBuffer_Bg3); InitStandardTextBoxWindows(); } @@ -1404,12 +1412,9 @@ void CleanupOverworldWindowsAndTilemaps(void) { ClearMirageTowerPulseBlendEffect(); FreeAllOverworldWindowBuffers(); - if (gBGTilemapBuffers3) - FREE_AND_SET_NULL(gBGTilemapBuffers3); - if (gBGTilemapBuffers1) - FREE_AND_SET_NULL(gBGTilemapBuffers1); - if (gBGTilemapBuffers2) - FREE_AND_SET_NULL(gBGTilemapBuffers2); + TRY_FREE_AND_SET_NULL(gOverworldTilemapBuffer_Bg3); + TRY_FREE_AND_SET_NULL(gOverworldTilemapBuffer_Bg2); + TRY_FREE_AND_SET_NULL(gOverworldTilemapBuffer_Bg1); } static void ResetSafariZoneFlag_(void) @@ -1417,9 +1422,9 @@ static void ResetSafariZoneFlag_(void) ResetSafariZoneFlag(); } -bool32 IsUpdateLinkStateCBActive(void) +bool32 IsOverworldLinkActive(void) { - if (gMain.callback1 == CB1_UpdateLinkState) + if (gMain.callback1 == CB1_OverworldLink) return TRUE; else return FALSE; @@ -1432,11 +1437,11 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) UpdatePlayerAvatarTransitionState(); FieldClearPlayerInput(&inputStruct); FieldGetPlayerInput(&inputStruct, newKeys, heldKeys); - if (!ScriptContext2_IsEnabled()) + if (!ArePlayerFieldControlsLocked()) { if (ProcessPlayerFieldInput(&inputStruct) == 1) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); HideMapNamePopUpWindow(); } else @@ -1454,7 +1459,7 @@ void CB1_Overworld(void) static void OverworldBasic(void) { - ScriptContext2_RunScript(); + ScriptContext_RunScript(); RunTasks(); AnimateSprites(); CameraUpdate(); @@ -1527,8 +1532,8 @@ void CB2_NewGame(void) NewGameInitData(); ResetInitialPlayerAvatarState(); PlayTimeCounter_Start(); - ScriptContext1_Init(); - ScriptContext2_Disable(); + ScriptContext_Init(); + UnlockPlayerFieldControls(); gFieldCallback = ExecuteTruckSequence; gFieldCallback2 = NULL; DoMapLoadLoop(&gMain.state); @@ -1548,8 +1553,8 @@ void CB2_WhiteOut(void) ResetSafariZoneFlag_(); DoWhiteOut(); ResetInitialPlayerAvatarState(); - ScriptContext1_Init(); - ScriptContext2_Disable(); + ScriptContext_Init(); + UnlockPlayerFieldControls(); gFieldCallback = FieldCB_WarpExitFadeFromBlack; state = 0; DoMapLoadLoop(&state); @@ -1562,8 +1567,8 @@ void CB2_WhiteOut(void) void CB2_LoadMap(void) { FieldClearVBlankHBlankCallbacks(); - ScriptContext1_Init(); - ScriptContext2_Disable(); + ScriptContext_Init(); + UnlockPlayerFieldControls(); SetMainCallback1(NULL); SetMainCallback2(CB2_DoChangeMap); gMain.savedCallback = CB2_LoadMap2; @@ -1582,8 +1587,8 @@ void CB2_ReturnToFieldContestHall(void) if (!gMain.state) { FieldClearVBlankHBlankCallbacks(); - ScriptContext1_Init(); - ScriptContext2_Disable(); + ScriptContext_Init(); + UnlockPlayerFieldControls(); SetMainCallback1(NULL); } if (LoadMapInStepsLocal(&gMain.state, TRUE)) @@ -1606,7 +1611,7 @@ static void CB2_LoadMapOnReturnToFieldCableClub(void) if (LoadMapInStepsLink(&gMain.state)) { SetFieldVBlankCallback(); - SetMainCallback1(CB1_UpdateLinkState); + SetMainCallback1(CB1_OverworldLink); ResetAllMultiplayerState(); SetMainCallback2(CB2_Overworld); } @@ -1614,7 +1619,7 @@ static void CB2_LoadMapOnReturnToFieldCableClub(void) void CB2_ReturnToField(void) { - if (IsUpdateLinkStateCBActive() == TRUE) + if (IsOverworldLinkActive() == TRUE) { SetMainCallback2(CB2_ReturnToFieldLink); } @@ -1636,7 +1641,7 @@ static void CB2_ReturnToFieldLocal(void) static void CB2_ReturnToFieldLink(void) { - if (!Overworld_LinkRecvQueueLengthMoreThan2() && ReturnToFieldLink(&gMain.state)) + if (!Overworld_IsRecvQueueAtMax() && ReturnToFieldLink(&gMain.state)) SetMainCallback2(CB2_Overworld); } @@ -1644,7 +1649,7 @@ void CB2_ReturnToFieldFromMultiplayer(void) { FieldClearVBlankHBlankCallbacks(); StopMapMusic(); - SetMainCallback1(CB1_UpdateLinkState); + SetMainCallback1(CB1_OverworldLink); ResetAllMultiplayerState(); if (gWirelessCommType != 0) @@ -1652,8 +1657,8 @@ void CB2_ReturnToFieldFromMultiplayer(void) else gFieldCallback = FieldCB_ReturnToFieldCableLink; - ScriptContext1_Init(); - ScriptContext2_Disable(); + ScriptContext_Init(); + UnlockPlayerFieldControls(); CB2_ReturnToField(); } @@ -1723,8 +1728,8 @@ void CB2_ContinueSavedGame(void) InitMapFromSavedGame(); PlayTimeCounter_Start(); - ScriptContext1_Init(); - ScriptContext2_Disable(); + ScriptContext_Init(); + UnlockPlayerFieldControls(); InitMatchCallCounters(); if (UseContinueGameWarp() == TRUE) { @@ -1790,7 +1795,7 @@ static void InitCurrentFlashLevelScanlineEffect(void) WriteBattlePyramidViewScanlineEffectBuffer(); ScanlineEffect_SetParams(sFlashEffectParams); } - else if ((flashLevel = Overworld_GetFlashLevel())) + else if ((flashLevel = GetFlashLevel())) { WriteFlashScanlineEffectBuffer(flashLevel); ScanlineEffect_SetParams(sFlashEffectParams); @@ -1803,8 +1808,8 @@ static bool32 LoadMapInStepsLink(u8 *state) { case 0: InitOverworldBgs(); - ScriptContext1_Init(); - ScriptContext2_Disable(); + ScriptContext_Init(); + UnlockPlayerFieldControls(); ResetMirageTowerAndSaveBlockPtrs(); ResetScreenForMapLoad(); (*state)++; @@ -2101,14 +2106,14 @@ static void InitOverworldGraphicsRegisters(void) ScheduleBgCopyTilemapToVram(1); ScheduleBgCopyTilemapToVram(2); ScheduleBgCopyTilemapToVram(3); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_HBLANK_INTERVAL); ShowBg(0); @@ -2226,7 +2231,7 @@ static void CreateLinkPlayerSprites(void) } -static void CB1_UpdateLinkState(void) +static void CB1_OverworldLink(void) { if (gWirelessCommType == 0 || !IsRfuRecvQueueEmpty() || !IsSendingKeysToLink()) { @@ -2235,10 +2240,10 @@ static void CB1_UpdateLinkState(void) // Note: Because guestId is between 0 and 4, while the smallest key code is // LINK_KEY_CODE_EMPTY, this is functionally equivalent to `sPlayerKeyInterceptCallback(0)`. - // It is expecting the callback to be KeyInterCB_SelfIdle, and that will + // It is expecting the callback to be KeyInterCB_SelfIdle, and that will // completely ignore any input parameters. // - // UpdateHeldKeyCode performs a sanity check on its input; if + // UpdateHeldKeyCode performs a sanity check on its input; if // sPlayerKeyInterceptCallback echoes back the argument, which is selfId, then // it'll use LINK_KEY_CODE_EMPTY instead. // @@ -2442,7 +2447,7 @@ static void UpdateHeldKeyCode(u16 key) if (gWirelessCommType != 0 && GetLinkSendQueueLength() > 1 - && IsUpdateLinkStateCBActive() == TRUE + && IsOverworldLinkActive() == TRUE && IsSendingKeysToLink() == TRUE) { switch (key) @@ -2477,9 +2482,9 @@ static u16 KeyInterCB_ReadButtons(u32 key) return LINK_KEY_CODE_EMPTY; } -static u16 GetDirectionForDpadKey(u16 a1) +static u16 GetDirectionForDpadKey(u16 key) { - switch (a1) + switch (key) { case LINK_KEY_CODE_DPAD_RIGHT: return FACING_RIGHT; @@ -2505,7 +2510,7 @@ static void ResetPlayerHeldKeys(u16 *keys) static u16 KeyInterCB_SelfIdle(u32 key) { - if (ScriptContext2_IsEnabled() == TRUE) + if (ArePlayerFieldControlsLocked() == TRUE) return LINK_KEY_CODE_EMPTY; if (GetLinkRecvQueueLength() > 4) return LINK_KEY_CODE_HANDLE_RECV_QUEUE; @@ -2520,12 +2525,11 @@ static u16 KeyInterCB_Idle(u32 key) return LINK_KEY_CODE_EMPTY; } -// Ignore the player's inputs as long as there is an event script -// in ScriptContext2. +// Ignore the player's inputs as long as there is an event script being executed. static u16 KeyInterCB_DeferToEventScript(u32 key) { u16 retVal; - if (ScriptContext2_IsEnabled() == TRUE) + if (ArePlayerFieldControlsLocked() == TRUE) { retVal = LINK_KEY_CODE_EMPTY; } @@ -2541,14 +2545,14 @@ static u16 KeyInterCB_DeferToEventScript(u32 key) static u16 KeyInterCB_DeferToRecvQueue(u32 key) { u16 retVal; - if (GetLinkRecvQueueLength() > 2) + if (GetLinkRecvQueueLength() >= OVERWORLD_RECV_QUEUE_MAX) { retVal = LINK_KEY_CODE_EMPTY; } else { retVal = LINK_KEY_CODE_IDLE; - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); SetKeyInterceptCallback(KeyInterCB_Idle); } return retVal; @@ -2565,7 +2569,7 @@ static u16 KeyInterCB_DeferToSendQueue(u32 key) else { retVal = LINK_KEY_CODE_IDLE; - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); SetKeyInterceptCallback(KeyInterCB_Idle); } return retVal; @@ -2598,7 +2602,7 @@ static u16 KeyInterCB_Ready(u32 keyOrPlayerId) } } -static u16 KeyInterCB_SetReady(u32 a1) +static u16 KeyInterCB_SetReady(u32 key) { SetKeyInterceptCallback(KeyInterCB_Ready); return LINK_KEY_CODE_READY; @@ -2613,12 +2617,12 @@ static u16 KeyInterCB_WaitForPlayersToExit(u32 keyOrPlayerId) { // keyOrPlayerId could be any keycode. This callback does no sanity checking // on the size of the key. It's assuming that it is being called from - // CB1_UpdateLinkState. + // CB1_OverworldLink. if (sPlayerLinkStates[keyOrPlayerId] != PLAYER_LINK_STATE_EXITING_ROOM) CheckRfuKeepAliveTimer(); if (AreAllPlayersInLinkState(PLAYER_LINK_STATE_EXITING_ROOM) == TRUE) { - ScriptContext1_SetupScript(EventScript_DoLinkRoomExit); + ScriptContext_SetupScript(EventScript_DoLinkRoomExit); SetKeyInterceptCallback(KeyInterCB_SendNothing); } return LINK_KEY_CODE_EMPTY; @@ -2692,7 +2696,7 @@ static void LoadCableClubPlayer(s32 linkPlayerId, s32 myPlayerId, struct CableCl GetLinkPlayerCoords(linkPlayerId, &x, &y); trainer->pos.x = x; trainer->pos.y = y; - trainer->pos.height = GetLinkPlayerElevation(linkPlayerId); + trainer->pos.elevation = GetLinkPlayerElevation(linkPlayerId); trainer->metatileBehavior = MapGridGetMetatileBehaviorAt(x, y); } @@ -2745,7 +2749,7 @@ static const u8 *TryInteractWithPlayer(struct CableClubPlayer *player) otherPlayerPos = player->pos; otherPlayerPos.x += gDirectionToVectors[player->facing].x; otherPlayerPos.y += gDirectionToVectors[player->facing].y; - otherPlayerPos.height = 0; + otherPlayerPos.elevation = 0; linkPlayerId = GetLinkPlayerIdAt(otherPlayerPos.x, otherPlayerPos.y); if (linkPlayerId != MAX_LINK_PLAYERS) @@ -2797,48 +2801,48 @@ static u16 GetDirectionForEventScript(const u8 *script) static void InitLinkPlayerQueueScript(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); } static void InitLinkRoomStartMenuScript(void) { PlaySE(SE_WIN_OPEN); ShowStartMenu(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } static void RunInteractLocalPlayerScript(const u8 *script) { PlaySE(SE_SELECT); - ScriptContext1_SetupScript(script); - ScriptContext2_Enable(); + ScriptContext_SetupScript(script); + LockPlayerFieldControls(); } static void RunConfirmLeaveCableClubScript(void) { PlaySE(SE_WIN_OPEN); - ScriptContext1_SetupScript(EventScript_ConfirmLeaveCableClubRoom); - ScriptContext2_Enable(); + ScriptContext_SetupScript(EventScript_ConfirmLeaveCableClubRoom); + LockPlayerFieldControls(); } static void InitMenuBasedScript(const u8 *script) { PlaySE(SE_SELECT); - ScriptContext1_SetupScript(script); - ScriptContext2_Enable(); + ScriptContext_SetupScript(script); + LockPlayerFieldControls(); } static void RunTerminateLinkScript(void) { - ScriptContext1_SetupScript(EventScript_TerminateLink); - ScriptContext2_Enable(); + ScriptContext_SetupScript(EventScript_TerminateLink); + LockPlayerFieldControls(); } -bool32 Overworld_LinkRecvQueueLengthMoreThan2(void) +bool32 Overworld_IsRecvQueueAtMax(void) { - if (!IsUpdateLinkStateCBActive()) + if (!IsOverworldLinkActive()) return FALSE; - if (GetLinkRecvQueueLength() >= 3) + if (GetLinkRecvQueueLength() >= OVERWORLD_RECV_QUEUE_MAX) sReceivingFromLink = TRUE; else sReceivingFromLink = FALSE; @@ -2849,9 +2853,9 @@ bool32 Overworld_RecvKeysFromLinkIsRunning(void) { u8 temp; - if (GetLinkRecvQueueLength() < 2) + if (GetLinkRecvQueueLength() < OVERWORLD_RECV_QUEUE_MAX - 1) return FALSE; - else if (IsUpdateLinkStateCBActive() != TRUE) + else if (IsOverworldLinkActive() != TRUE) return FALSE; else if (IsSendingKeysToLink() != TRUE) return FALSE; @@ -2875,7 +2879,7 @@ bool32 Overworld_SendKeysToLinkIsRunning(void) { if (GetLinkSendQueueLength() < 2) return FALSE; - else if (IsUpdateLinkStateCBActive() != TRUE) + else if (IsOverworldLinkActive() != TRUE) return FALSE; else if (IsSendingKeysToLink() != TRUE) return FALSE; @@ -2898,7 +2902,7 @@ bool32 IsSendingKeysOverCable(void) static u32 GetLinkSendQueueLength(void) { if (gWirelessCommType != 0) - return Rfu.sendQueue.count; + return gRfu.sendQueue.count; else return gLink.sendQueue.count; } @@ -2923,7 +2927,7 @@ static void ZeroObjectEvent(struct ObjectEvent *objEvent) // conflict with the usual Event Object struct, thus the definitions. #define linkGender(obj) obj->singleMovementActive // not even one can reference *byte* aligned bitfield members... -#define linkDirection(obj) ((u8*)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX +#define linkDirection(obj) ((u8 *)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 gender) { @@ -2955,7 +2959,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; - ObjectEventUpdateZCoord(objEvent); + ObjectEventUpdateElevation(objEvent); } static void SetLinkPlayerObjectRange(u8 linkPlayerId, u8 dir) @@ -3048,10 +3052,10 @@ static void SetPlayerFacingDirection(u8 linkPlayerId, u8 facing) { // This is a hack to split this code onto two separate lines, without declaring a local variable. // C++ style inline variables would be nice here. - #define TEMP gLinkPlayerMovementModes[linkPlayerObjEvent->movementMode](linkPlayerObjEvent, objEvent, facing) + #define TEMP sLinkPlayerMovementModes[linkPlayerObjEvent->movementMode](linkPlayerObjEvent, objEvent, facing) + + sMovementStatusHandler[TEMP](linkPlayerObjEvent, objEvent); - gMovementStatusHandler[TEMP](linkPlayerObjEvent, objEvent); - // Clean up the hack. #undef TEMP } @@ -3061,7 +3065,7 @@ static void SetPlayerFacingDirection(u8 linkPlayerId, u8 facing) static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir) { - return gLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir); + return sLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir); } static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir) @@ -3072,7 +3076,7 @@ static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *linkPlayerOb // Identical to MovementEventModeCB_Normal static u8 MovementEventModeCB_Scripted(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir) { - return gLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir); + return sLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir); } static bool8 FacingHandler_DoNothing(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir) @@ -3087,7 +3091,7 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer linkDirection(objEvent) = FlipVerticalAndClearForced(dir, linkDirection(objEvent)); ObjectEventMoveDestCoords(objEvent, linkDirection(objEvent), &x, &y); - if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, linkDirection(objEvent), x, y)) + if (LinkPlayerGetCollision(linkPlayerObjEvent->objEventId, linkDirection(objEvent), x, y)) { return FALSE; } @@ -3095,7 +3099,7 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer { objEvent->directionSequenceIndex = 16; ShiftObjectEventCoords(objEvent, x, y); - ObjectEventUpdateZCoord(objEvent); + ObjectEventUpdateElevation(objEvent); return TRUE; } } @@ -3147,10 +3151,10 @@ static u8 FlipVerticalAndClearForced(u8 newFacing, u8 oldFacing) return oldFacing; } -static u8 LinkPlayerDetectCollision(u8 selfObjEventId, u8 a2, s16 x, s16 y) +static u8 LinkPlayerGetCollision(u8 selfObjEventId, u8 direction, s16 x, s16 y) { u8 i; - for (i = 0; i < 16; i++) + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { if (i != selfObjEventId) { @@ -3161,7 +3165,7 @@ static u8 LinkPlayerDetectCollision(u8 selfObjEventId, u8 a2, s16 x, s16 y) } } } - return MapGridIsImpassableAt(x, y); + return MapGridGetCollisionAt(x, y); } static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion) @@ -3177,14 +3181,14 @@ static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion) { case VERSION_FIRE_RED: case VERSION_LEAF_GREEN: - objEvent->spriteId = AddPseudoObjectEvent(GetFRLGAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); + objEvent->spriteId = CreateObjectGraphicsSprite(GetFRLGAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); break; case VERSION_RUBY: case VERSION_SAPPHIRE: - objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); + objEvent->spriteId = CreateObjectGraphicsSprite(GetRSAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); break; case VERSION_EMERALD: - objEvent->spriteId = AddPseudoObjectEvent(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); + objEvent->spriteId = CreateObjectGraphicsSprite(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); break; } @@ -3201,15 +3205,15 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) struct ObjectEvent *objEvent = &gObjectEvents[linkPlayerObjEvent->objEventId]; sprite->x = objEvent->initialCoords.x; sprite->y = objEvent->initialCoords.y; - SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1); - sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation); + SetObjectSubpriorityByElevation(objEvent->previousElevation, sprite, 1); + sprite->oam.priority = ElevationToPriority(objEvent->previousElevation); if (linkPlayerObjEvent->movementMode == MOVEMENT_MODE_FREE) StartSpriteAnim(sprite, GetFaceDirectionAnimNum(linkDirection(objEvent))); else StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(linkDirection(objEvent))); - UpdateObjectEventSpriteInvisibility(sprite, 0); + UpdateObjectEventSpriteInvisibility(sprite, FALSE); if (objEvent->triggerGroundEffectsOnMove) { sprite->invisible = ((sprite->data[7] & 4) >> 2); diff --git a/src/palette.c b/src/palette.c index cbaae8da28..577257eff3 100644 --- a/src/palette.c +++ b/src/palette.c @@ -16,36 +16,38 @@ enum // These are structs for some unused palette system. // The full functionality of this system is unknown. +#define NUM_PALETTE_STRUCTS 16 + struct PaletteStructTemplate { - u16 uid; + u16 id; u16 *src; - u16 pst_field_8_0:1; - u16 pst_field_8_1:9; + bool16 pst_field_8_0:1; + u16 unused:9; u16 size:5; - u16 pst_field_9_7:1; - u8 pst_field_A; + u8 time1; u8 srcCount:5; - u8 pst_field_B_5:3; - u8 pst_field_C; + u8 state:3; + u8 time2; }; struct PaletteStruct { - const struct PaletteStructTemplate *base; - u32 ps_field_4_0:1; - u16 ps_field_4_1:1; + const struct PaletteStructTemplate *template; + bool32 active:1; + bool32 flag:1; u32 baseDestOffset:9; - u16 destOffset:10; - u16 srcIndex:7; - u8 ps_field_8; - u8 ps_field_9; + u32 destOffset:10; + u32 srcIndex:7; + u8 countdown1; + u8 countdown2; }; -static void unused_sub_80A1CDC(struct PaletteStruct *, u32 *); -static void unused_sub_80A1E40(struct PaletteStruct *, u32 *); -static void unused_sub_80A1F00(struct PaletteStruct *); -static u8 GetPaletteNumByUid(u16); +static void PaletteStruct_Copy(struct PaletteStruct *, u32 *); +static void PaletteStruct_Blend(struct PaletteStruct *, u32 *); +static void PaletteStruct_TryEnd(struct PaletteStruct *); +static void PaletteStruct_Reset(u8); +static u8 PaletteStruct_GetPalNum(u16); static u8 UpdateNormalPaletteFade(void); static void BeginFastPaletteFadeInternal(u8); static u8 UpdateFastPaletteFade(void); @@ -58,15 +60,15 @@ static void Task_BlendPalettesGradually(u8 taskId); // unaligned word reads are issued in BlendPalette otherwise ALIGNED(4) EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0}; ALIGNED(4) EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0}; -EWRAM_DATA struct PaletteStruct sPaletteStructs[0x10] = {0}; +static EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0}; EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 sFiller = 0; static EWRAM_DATA u32 sPlttBufferTransferPending = 0; EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_DECOMP_BUFFER_SIZE] = {0}; -static const struct PaletteStructTemplate gDummyPaletteStructTemplate = { - .uid = 0xFFFF, - .pst_field_B_5 = 1 +static const struct PaletteStructTemplate sDummyPaletteStructTemplate = { + .id = 0xFFFF, + .state = 1 }; static const u8 sRoundedDownGrayscaleMap[] = { @@ -82,20 +84,20 @@ static const u8 sRoundedDownGrayscaleMap[] = { void LoadCompressedPalette(const u32 *src, u16 offset, u16 size) { LZDecompressWram(src, gPaletteDecompressionBuffer); - CpuCopy16(gPaletteDecompressionBuffer, gPlttBufferUnfaded + offset, size); - CpuCopy16(gPaletteDecompressionBuffer, gPlttBufferFaded + offset, size); + CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferUnfaded[offset], size); + CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferFaded[offset], size); } void LoadPalette(const void *src, u16 offset, u16 size) { - CpuCopy16(src, gPlttBufferUnfaded + offset, size); - CpuCopy16(src, gPlttBufferFaded + offset, size); + CpuCopy16(src, &gPlttBufferUnfaded[offset], size); + CpuCopy16(src, &gPlttBufferFaded[offset], size); } void FillPalette(u16 value, u16 offset, u16 size) { - CpuFill16(value, gPlttBufferUnfaded + offset, size); - CpuFill16(value, gPlttBufferFaded + offset, size); + CpuFill16(value, &gPlttBufferUnfaded[offset], size); + CpuFill16(value, &gPlttBufferFaded[offset], size); } void TransferPlttBuffer(void) @@ -105,7 +107,7 @@ void TransferPlttBuffer(void) void *src = gPlttBufferFaded; void *dest = (void *)PLTT; DmaCopy16(3, src, dest, PLTT_SIZE); - sPlttBufferTransferPending = 0; + sPlttBufferTransferPending = FALSE; if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) UpdateBlendRegisters(); } @@ -135,13 +137,13 @@ void ResetPaletteFade(void) { u8 i; - for (i = 0; i < 16; i++) - ResetPaletteStruct(i); + for (i = 0; i < NUM_PALETTE_STRUCTS; i++) + PaletteStruct_Reset(i); ResetPaletteFadeControl(); } -void ReadPlttIntoBuffers(void) +static void ReadPlttIntoBuffers(void) { u16 i; u16 *pltt = (u16 *)PLTT; @@ -178,7 +180,7 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe gPaletteFade.y = startY; gPaletteFade.targetY = targetY; gPaletteFade.blendColor = color; - gPaletteFade.active = 1; + gPaletteFade.active = TRUE; gPaletteFade.mode = NORMAL_FADE; if (startY < targetY) @@ -189,9 +191,9 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe UpdatePaletteFade(); temp = gPaletteFade.bufferTransferDisabled; - gPaletteFade.bufferTransferDisabled = 0; + gPaletteFade.bufferTransferDisabled = FALSE; CpuCopy32(gPlttBufferFaded, (void *)PLTT, PLTT_SIZE); - sPlttBufferTransferPending = 0; + sPlttBufferTransferPending = FALSE; if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) UpdateBlendRegisters(); gPaletteFade.bufferTransferDisabled = temp; @@ -199,99 +201,99 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe } } -bool8 unref_sub_80A1C1C(u32 a1, u8 a2, u8 a3, u8 a4, u16 a5) +// Unused +static bool8 BeginPlttFade(u32 selectedPalettes, u8 delay, u8 startY, u8 targetY, u16 blendColor) { ReadPlttIntoBuffers(); - return BeginNormalPaletteFade(a1, a2, a3, a4, a5); + return BeginNormalPaletteFade(selectedPalettes, delay, startY, targetY, blendColor); } -void unref_sub_80A1C64(u8 a1, u32 *a2) +// Unused +static void PaletteStruct_Run(u8 a1, u32 *unkFlags) { u8 i; - for (i = 0; i < 16; i++) + for (i = 0; i < NUM_PALETTE_STRUCTS; i++) { struct PaletteStruct *palstruct = &sPaletteStructs[i]; - if (palstruct->ps_field_4_0) + if (palstruct->active) { - if (palstruct->base->pst_field_8_0 == a1) + if (palstruct->template->pst_field_8_0 == a1) { - u8 val1 = palstruct->srcIndex; - u8 val2 = palstruct->base->srcCount; - if (val1 == val2) + if (palstruct->srcIndex == palstruct->template->srcCount) { - unused_sub_80A1F00(palstruct); - if (!palstruct->ps_field_4_0) + PaletteStruct_TryEnd(palstruct); + if (!palstruct->active) continue; } - if (palstruct->ps_field_8 == 0) - unused_sub_80A1CDC(palstruct, a2); + if (palstruct->countdown1 == 0) + PaletteStruct_Copy(palstruct, unkFlags); else - palstruct->ps_field_8--; + palstruct->countdown1--; - unused_sub_80A1E40(palstruct, a2); + PaletteStruct_Blend(palstruct, unkFlags); } } } } -static void unused_sub_80A1CDC(struct PaletteStruct *a1, u32 *a2) +static void PaletteStruct_Copy(struct PaletteStruct *palStruct, u32 *unkFlags) { s32 srcIndex; s32 srcCount; u8 i = 0; - u16 srcOffset = a1->srcIndex * a1->base->size; + u16 srcOffset = palStruct->srcIndex * palStruct->template->size; - if (!a1->base->pst_field_8_0) + if (!palStruct->template->pst_field_8_0) { - while (i < a1->base->size) + while (i < palStruct->template->size) { - gPlttBufferUnfaded[a1->destOffset] = a1->base->src[srcOffset]; - gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset]; + gPlttBufferUnfaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; + gPlttBufferFaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; i++; - a1->destOffset++; + palStruct->destOffset++; srcOffset++; } } else { - while (i < a1->base->size) + while (i < palStruct->template->size) { - gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset]; + gPlttBufferFaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; i++; - a1->destOffset++; + palStruct->destOffset++; srcOffset++; } } - a1->destOffset = a1->baseDestOffset; - a1->ps_field_8 = a1->base->pst_field_A; - a1->srcIndex++; + palStruct->destOffset = palStruct->baseDestOffset; + palStruct->countdown1 = palStruct->template->time1; + palStruct->srcIndex++; - srcIndex = a1->srcIndex; - srcCount = a1->base->srcCount; + srcIndex = palStruct->srcIndex; + srcCount = palStruct->template->srcCount; if (srcIndex >= srcCount) { - if (a1->ps_field_9) - a1->ps_field_9--; - a1->srcIndex = 0; + if (palStruct->countdown2) + palStruct->countdown2--; + palStruct->srcIndex = 0; } - *a2 |= 1 << (a1->baseDestOffset >> 4); + *unkFlags |= 1 << (palStruct->baseDestOffset >> 4); } -static void unused_sub_80A1E40(struct PaletteStruct *a1, u32 *a2) +static void PaletteStruct_Blend(struct PaletteStruct *palStruct, u32 *unkFlags) { - if (gPaletteFade.active && ((1 << (a1->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) + if (gPaletteFade.active && ((1 << (palStruct->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) { - if (!a1->base->pst_field_8_0) + if (!palStruct->template->pst_field_8_0) { if (gPaletteFade.delayCounter != gPaletteFade_delay) { BlendPalette( - a1->baseDestOffset, - a1->base->size, + palStruct->baseDestOffset, + palStruct->template->size, gPaletteFade.y, gPaletteFade.blendColor); } @@ -300,64 +302,64 @@ static void unused_sub_80A1E40(struct PaletteStruct *a1, u32 *a2) { if (!gPaletteFade.delayCounter) { - if (a1->ps_field_8 != a1->base->pst_field_A) + if (palStruct->countdown1 != palStruct->template->time1) { - u32 srcOffset = a1->srcIndex * a1->base->size; + u32 srcOffset = palStruct->srcIndex * palStruct->template->size; u8 i; - for (i = 0; i < a1->base->size; i++) - gPlttBufferFaded[a1->baseDestOffset + i] = a1->base->src[srcOffset + i]; + for (i = 0; i < palStruct->template->size; i++) + gPlttBufferFaded[palStruct->baseDestOffset + i] = palStruct->template->src[srcOffset + i]; } } } } } -static void unused_sub_80A1F00(struct PaletteStruct *a1) +static void PaletteStruct_TryEnd(struct PaletteStruct *pal) { - if (!a1->ps_field_9) + if (pal->countdown2 == 0) { - s32 val = a1->base->pst_field_B_5; + s32 state = pal->template->state; - if (!val) + if (state == 0) { - a1->srcIndex = 0; - a1->ps_field_8 = a1->base->pst_field_A; - a1->ps_field_9 = a1->base->pst_field_C; - a1->destOffset = a1->baseDestOffset; + pal->srcIndex = 0; + pal->countdown1 = pal->template->time1; + pal->countdown2 = pal->template->time2; + pal->destOffset = pal->baseDestOffset; } else { - if (val < 0) + if (state < 0) return; - if (val > 2) + if (state > 2) return; - ResetPaletteStructByUid(a1->base->uid); + PaletteStruct_ResetById(pal->template->id); } } else { - a1->ps_field_9--; + pal->countdown2--; } } -void ResetPaletteStructByUid(u16 a1) +void PaletteStruct_ResetById(u16 id) { - u8 paletteNum = GetPaletteNumByUid(a1); - if (paletteNum != 16) - ResetPaletteStruct(paletteNum); + u8 paletteNum = PaletteStruct_GetPalNum(id); + if (paletteNum != NUM_PALETTE_STRUCTS) + PaletteStruct_Reset(paletteNum); } -void ResetPaletteStruct(u8 paletteNum) +static void PaletteStruct_Reset(u8 paletteNum) { - sPaletteStructs[paletteNum].base = &gDummyPaletteStructTemplate; - sPaletteStructs[paletteNum].ps_field_4_0 = 0; + sPaletteStructs[paletteNum].template = &sDummyPaletteStructTemplate; + sPaletteStructs[paletteNum].active = FALSE; sPaletteStructs[paletteNum].baseDestOffset = 0; sPaletteStructs[paletteNum].destOffset = 0; sPaletteStructs[paletteNum].srcIndex = 0; - sPaletteStructs[paletteNum].ps_field_4_1 = 0; - sPaletteStructs[paletteNum].ps_field_8 = 0; - sPaletteStructs[paletteNum].ps_field_9 = 0; + sPaletteStructs[paletteNum].flag = 0; + sPaletteStructs[paletteNum].countdown1 = 0; + sPaletteStructs[paletteNum].countdown2 = 0; } void ResetPaletteFadeControl(void) @@ -368,41 +370,41 @@ void ResetPaletteFadeControl(void) gPaletteFade.y = 0; gPaletteFade.targetY = 0; gPaletteFade.blendColor = 0; - gPaletteFade.active = 0; + gPaletteFade.active = FALSE; gPaletteFade.multipurpose2 = 0; // assign same value twice gPaletteFade.yDec = 0; - gPaletteFade.bufferTransferDisabled = 0; - gPaletteFade.shouldResetBlendRegisters = 0; - gPaletteFade.hardwareFadeFinishing = 0; - gPaletteFade.softwareFadeFinishing = 0; + gPaletteFade.bufferTransferDisabled = FALSE; + gPaletteFade.shouldResetBlendRegisters = FALSE; + gPaletteFade.hardwareFadeFinishing = FALSE; + gPaletteFade.softwareFadeFinishing = FALSE; gPaletteFade.softwareFadeFinishingCounter = 0; gPaletteFade.objPaletteToggle = 0; gPaletteFade.deltaY = 2; } -void unref_sub_80A2048(u16 uid) +static void PaletteStruct_SetUnusedFlag(u16 id) { - u8 paletteNum = GetPaletteNumByUid(uid); - if (paletteNum != 16) - sPaletteStructs[paletteNum].ps_field_4_1 = 1; + u8 paletteNum = PaletteStruct_GetPalNum(id); + if (paletteNum != NUM_PALETTE_STRUCTS) + sPaletteStructs[paletteNum].flag = TRUE; } -void unref_sub_80A2074(u16 uid) +static void PaletteStruct_ClearUnusedFlag(u16 id) { - u8 paletteNum = GetPaletteNumByUid(uid); - if (paletteNum != 16) - sPaletteStructs[paletteNum].ps_field_4_1 = 0; + u8 paletteNum = PaletteStruct_GetPalNum(id); + if (paletteNum != NUM_PALETTE_STRUCTS) + sPaletteStructs[paletteNum].flag = FALSE; } -static u8 GetPaletteNumByUid(u16 uid) +static u8 PaletteStruct_GetPalNum(u16 id) { u8 i; - for (i = 0; i < 16; i++) - if (sPaletteStructs[i].base->uid == uid) + for (i = 0; i < NUM_PALETTE_STRUCTS; i++) + if (sPaletteStructs[i].template->id == id) return i; - return 16; + return NUM_PALETTE_STRUCTS; } static u8 UpdateNormalPaletteFade(void) @@ -460,7 +462,7 @@ static u8 UpdateNormalPaletteFade(void) if (gPaletteFade.y == gPaletteFade.targetY) { gPaletteFade_selectedPalettes = 0; - gPaletteFade.softwareFadeFinishing = 1; + gPaletteFade.softwareFadeFinishing = TRUE; } else { @@ -557,7 +559,7 @@ static void BeginFastPaletteFadeInternal(u8 submode) { gPaletteFade.y = 31; gPaletteFade_submode = submode & 0x3F; - gPaletteFade.active = 1; + gPaletteFade.active = TRUE; gPaletteFade.mode = FAST_FADE; if (submode == FAST_FADE_IN_FROM_BLACK) @@ -586,7 +588,7 @@ static u8 UpdateFastPaletteFade(void) if (IsSoftwarePaletteFadeFinishing()) return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; - + if (gPaletteFade.objPaletteToggle) { @@ -719,9 +721,9 @@ static u8 UpdateFastPaletteFade(void) } gPaletteFade.mode = NORMAL_FADE; - gPaletteFade.softwareFadeFinishing = 1; + gPaletteFade.softwareFadeFinishing = TRUE; } - + // gPaletteFade.active cannot change since the last time it was checked. So this // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;` return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; @@ -734,10 +736,10 @@ void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 should gPaletteFade_delay = delay; gPaletteFade.y = y; gPaletteFade.targetY = targetY; - gPaletteFade.active = 1; + gPaletteFade.active = TRUE; gPaletteFade.mode = HARDWARE_FADE; gPaletteFade.shouldResetBlendRegisters = shouldResetBlendRegisters & 1; - gPaletteFade.hardwareFadeFinishing = 0; + gPaletteFade.hardwareFadeFinishing = FALSE; if (y < targetY) gPaletteFade.yDec = 0; @@ -784,7 +786,7 @@ static u8 UpdateHardwarePaletteFade(void) gPaletteFade_blendCnt = 0; gPaletteFade.y = 0; } - gPaletteFade.shouldResetBlendRegisters = 0; + gPaletteFade.shouldResetBlendRegisters = FALSE; } // gPaletteFade.active cannot change since the last time it was checked. So this @@ -798,11 +800,11 @@ static void UpdateBlendRegisters(void) SetGpuReg(REG_OFFSET_BLDY, gPaletteFade.y); if (gPaletteFade.hardwareFadeFinishing) { - gPaletteFade.hardwareFadeFinishing = 0; + gPaletteFade.hardwareFadeFinishing = FALSE; gPaletteFade.mode = 0; gPaletteFade_blendCnt = 0; gPaletteFade.y = 0; - gPaletteFade.active = 0; + gPaletteFade.active = FALSE; } } @@ -812,8 +814,8 @@ static bool8 IsSoftwarePaletteFadeFinishing(void) { if (gPaletteFade.softwareFadeFinishingCounter == 4) { - gPaletteFade.active = 0; - gPaletteFade.softwareFadeFinishing = 0; + gPaletteFade.active = FALSE; + gPaletteFade.softwareFadeFinishing = FALSE; gPaletteFade.softwareFadeFinishingCounter = 0; } else @@ -950,7 +952,7 @@ void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 b #define tId data[8] // Blend the selected palettes in a series of steps toward or away from the color. -// Only used by the Groudon/Kyogre fight scene to flash the screen for lightning +// Only used by the Groudon/Kyogre fight scene to flash the screen for lightning. // One call is used to fade the bg from white, while another fades the duo from black void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTarget, u16 color, u8 priority, u8 id) { @@ -986,9 +988,9 @@ static bool32 IsBlendPalettesGraduallyTaskActive(u8 id) int i; for (i = 0; i < NUM_TASKS; i++) - if ((gTasks[i].isActive == TRUE) - && (gTasks[i].func == Task_BlendPalettesGradually) - && (gTasks[i].tId == id)) + if ((gTasks[i].isActive == TRUE) + && (gTasks[i].func == Task_BlendPalettesGradually) + && (gTasks[i].tId == id)) return TRUE; return FALSE; diff --git a/src/palette_util.c b/src/palette_util.c index 5364ff6d98..08239c3363 100755 --- a/src/palette_util.c +++ b/src/palette_util.c @@ -247,7 +247,7 @@ int InitPulseBlendPaletteSettings(struct PulseBlend *pulseBlend, const struct Pu if (pulseBlendPalette == NULL) return 0xFF; - + pulseBlendPalette->blendCoeff = 0; pulseBlendPalette->fadeDirection = 0; pulseBlendPalette->available = 1; @@ -322,7 +322,7 @@ void MarkUsedPulseBlendPalettes(struct PulseBlend *pulseBlend, u16 pulseBlendPal pulseBlend->usedPulseBlendPalettes |= 1 << i; } } - } + } } void UnmarkUsedPulseBlendPalettes(struct PulseBlend *pulseBlend, u16 pulseBlendPaletteSelector, u8 multiSelection) @@ -423,7 +423,7 @@ void UpdatePulseBlend(struct PulseBlend *pulseBlend) pulseBlendPalette->blendCoeff = 0; else pulseBlendPalette->blendCoeff = pulseBlendPalette->pulseBlendSettings.maxBlendCoeff & 0xF; - + pulseBlendPalette->fadeDirection ^= 1; pulseBlendPalette->fadeCycleCounter++; break; @@ -439,7 +439,7 @@ void UpdatePulseBlend(struct PulseBlend *pulseBlend) } // Below used for the Roulette grid -void ClearTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height) +void FillTilemapRect(u16 *dest, u16 value, u8 left, u8 top, u8 width, u8 height) { u16 *_dest; u8 i; @@ -450,9 +450,7 @@ void ClearTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height) { _dest = dest + i * 32; for (j = 0; j < width; j++) - { - *_dest++ = src; - } + *_dest++ = value; } } @@ -468,8 +466,39 @@ void SetTilemapRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height) { _dest = dest + i * 32; for (j = 0; j < width; j++) - { *_dest++ = *_src++; - } + } +} + +static void FillTilemapRect_Unused(void *dest, u16 value, u8 left, u8 top, u8 width, u8 height) +{ + u8 i, j; + u8 x, y; + + for (i = 0, y = top; i < height; i++) + { + for (x = left, j = 0; j < width; j++) + { + *(u16 *)((dest) + (y * 64 + x * 2)) = value; + x = (x + 1) % 32; + } + y = (y + 1) % 32; + } +} + +static void SetTilemapRect_Unused(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height) +{ + u8 i, j; + u8 x, y; + const u16 *_src; + + for (i = 0, _src = src, y = top; i < height; i++) + { + for (x = left, j = 0; j < width; j++) + { + *(u16 *)((dest) + (y * 64 + x * 2)) = *(_src++); + x = (x + 1) % 32; + } + y = (y + 1) % 32; } } diff --git a/src/party_menu.c b/src/party_menu.c index 704ab72e7b..00224f6bd6 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -65,16 +65,88 @@ #include "window.h" #include "constants/battle.h" #include "constants/battle_frontier.h" -#include "constants/easy_chat.h" #include "constants/field_effects.h" #include "constants/item_effects.h" #include "constants/items.h" -#include "constants/maps.h" #include "constants/moves.h" #include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" +enum { + MENU_SUMMARY, + MENU_SWITCH, + MENU_CANCEL1, + MENU_ITEM, + MENU_GIVE, + MENU_TAKE_ITEM, + MENU_MAIL, + MENU_TAKE_MAIL, + MENU_READ, + MENU_CANCEL2, + MENU_SHIFT, + MENU_SEND_OUT, + MENU_ENTER, + MENU_NO_ENTRY, + MENU_STORE, + MENU_REGISTER, + MENU_TRADE1, + MENU_TRADE2, + MENU_TOSS, + MENU_FIELD_MOVES +}; + +// IDs for the action lists that appear when a party mon is selected +enum { + ACTIONS_NONE, + ACTIONS_SWITCH, + ACTIONS_SHIFT, + ACTIONS_SEND_OUT, + ACTIONS_ENTER, + ACTIONS_NO_ENTRY, + ACTIONS_STORE, + ACTIONS_SUMMARY_ONLY, + ACTIONS_ITEM, + ACTIONS_MAIL, + ACTIONS_REGISTER, + ACTIONS_TRADE, + ACTIONS_SPIN_TRADE, + ACTIONS_TAKEITEM_TOSS, +}; + +// In CursorCb_FieldMove, field moves <= FIELD_MOVE_WATERFALL are assumed to line up with the badge flags. +// Badge flag names are commented here for people searching for references to remove the badge requirement. +enum { + FIELD_MOVE_CUT, // FLAG_BADGE01_GET + FIELD_MOVE_FLASH, // FLAG_BADGE02_GET + FIELD_MOVE_ROCK_SMASH, // FLAG_BADGE03_GET + FIELD_MOVE_STRENGTH, // FLAG_BADGE04_GET + FIELD_MOVE_SURF, // FLAG_BADGE05_GET + FIELD_MOVE_FLY, // FLAG_BADGE06_GET + FIELD_MOVE_DIVE, // FLAG_BADGE07_GET + FIELD_MOVE_WATERFALL, // FLAG_BADGE08_GET + FIELD_MOVE_TELEPORT, + FIELD_MOVE_DIG, + FIELD_MOVE_SECRET_POWER, + FIELD_MOVE_MILK_DRINK, + FIELD_MOVE_SOFT_BOILED, + FIELD_MOVE_SWEET_SCENT, + FIELD_MOVES_COUNT +}; + +enum { + PARTY_BOX_LEFT_COLUMN, + PARTY_BOX_RIGHT_COLUMN, +}; + +enum { + TAG_POKEBALL = 1200, + TAG_POKEBALL_SMALL, + TAG_STATUS_ICONS, +}; + +#define TAG_HELD_ITEM 55120 + #define PARTY_PAL_SELECTED (1 << 0) #define PARTY_PAL_FAINTED (1 << 1) #define PARTY_PAL_TO_SWITCH (1 << 2) @@ -99,7 +171,7 @@ enum struct PartyMenuBoxInfoRects { - void (*blitFunc)(u8, u8, u8, u8, u8, u8); + void (*blitFunc)(u8, u8, u8, u8, u8, bool8); u8 dimensions[24]; u8 descTextLeft; u8 descTextTop; @@ -153,6 +225,8 @@ EWRAM_DATA u8 gSelectedOrderFromParty[MAX_FRONTIER_PARTY_SIZE] = {0}; static EWRAM_DATA u16 sPartyMenuItemId = 0; static EWRAM_DATA u16 sUnused = 0; EWRAM_DATA u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2] = {0}; // bits 0-3 are the current pos of Slot 1, 4-7 are Slot 2, and so on +static EWRAM_DATA u8 sInitialLevel = 0; +static EWRAM_DATA u8 sFinalLevel = 0; // IWRAM common void (*gItemUseCB)(u8, TaskFunc); @@ -193,12 +267,12 @@ static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *, struct PartyMenuBox static void DisplayPartyPokemonHPBarCheck(struct Pokemon *, struct PartyMenuBox *); static void DisplayPartyPokemonDescriptionText(u8, struct PartyMenuBox *, u8); static bool8 IsMonAllowedInMinigame(u8); -static void DisplayPartyPokemonDataToTeachMove(u8, u16, u8); -static u8 CanMonLearnTMTutor(struct Pokemon *, u16, u8); -static void DisplayPartyPokemonBarDetail(u8, const u8*, u8, const u8*); +static void DisplayPartyPokemonDataToTeachMove(u8, u16); +static u8 CanTeachMove(struct Pokemon *, u16); +static void DisplayPartyPokemonBarDetail(u8, const u8 *, u8, const u8 *); static void DisplayPartyPokemonLevel(u8, struct PartyMenuBox *); -static void DisplayPartyPokemonGender(u8, u16, u8*, struct PartyMenuBox *); -static void DisplayPartyPokemonHP(u16, struct PartyMenuBox *); +static void DisplayPartyPokemonGender(u8, u16, u8 *, struct PartyMenuBox *); +static void DisplayPartyPokemonHP(u16 hp, u16 maxHp, struct PartyMenuBox *menuBox); static void DisplayPartyPokemonMaxHP(u16, struct PartyMenuBox *); static void DisplayPartyPokemonHPBar(u16, u16, struct PartyMenuBox *); static void CreatePartyMonIconSpriteParameterized(u16, u32, struct PartyMenuBox *, u8); @@ -222,12 +296,12 @@ static u8 GetPartyIdFromBattleSlot(u8); static void Task_ClosePartyMenuAndSetCB2(u8); static void UpdatePartyToFieldOrder(void); static void MoveCursorToConfirm(void); -static void HandleChooseMonCancel(u8, s8*); -static void HandleChooseMonSelection(u8, s8*); -static u16 PartyMenuButtonHandler(s8*); -static s8* GetCurrentPartySlotPtr(void); -static bool8 IsSelectedMonNotEgg(u8*); -static void PartyMenuRemoveWindow(u8*); +static void HandleChooseMonCancel(u8, s8 *); +static void HandleChooseMonSelection(u8, s8 *); +static u16 PartyMenuButtonHandler(s8 *); +static s8 *GetCurrentPartySlotPtr(void); +static bool8 IsSelectedMonNotEgg(u8 *); +static void PartyMenuRemoveWindow(u8 *); static void CB2_SetUpExitToBattleScreen(void); static void Task_ClosePartyMenuAfterText(u8); static void TryTutorSelectedMon(u8); @@ -239,26 +313,24 @@ static void Task_TryCreateSelectionWindow(u8); static void FinishTwoMonAction(u8); static void CancelParticipationPrompt(u8); static bool8 DisplayCancelChooseMonYesNo(u8); -static const u8* GetFacilityCancelString(void); +static const u8 *GetFacilityCancelString(void); static void Task_CancelChooseMonYesNo(u8); static void PartyMenuDisplayYesNoMenu(void); static void Task_HandleCancelChooseMonYesNoInput(u8); static void Task_ReturnToChooseMonAfterText(u8); -static void UpdateCurrentPartySelection(s8*, s8); -static void UpdatePartySelectionSingleLayout(s8*, s8); -static void UpdatePartySelectionDoubleLayout(s8*, s8); +static void UpdateCurrentPartySelection(s8 *, s8); +static void UpdatePartySelectionSingleLayout(s8 *, s8); +static void UpdatePartySelectionDoubleLayout(s8 *, s8); static s8 GetNewSlotDoubleLayout(s8, s8); -static void PartyMenuPrintText(const u8*); +static void PartyMenuPrintText(const u8 *); static void Task_PrintAndWaitForText(u8); -static bool16 IsMonAllowedInPokemonJump(struct Pokemon*); -static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon*); +static bool16 IsMonAllowedInPokemonJump(struct Pokemon *); +static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *); static void Task_CancelParticipationYesNo(u8); static void Task_HandleCancelParticipationYesNoInput(u8); -static bool8 CanLearnTutorMove(u16, u8); -static u16 GetTutorMove(u8); static bool8 ShouldUseChooseMonText(void); -static void SetPartyMonFieldSelectionActions(struct Pokemon*, u8); -static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon*); +static void SetPartyMonFieldSelectionActions(struct Pokemon *, u8); +static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon *); static u8 GetPartySlotEntryStatus(s8); static void Task_UpdateHeldItemSprite(u8); static void Task_HandleSelectionMenuInput(u8); @@ -279,7 +351,7 @@ static void Task_HandleSwitchItemsYesNoInput(u8); static void Task_WriteMailToGiveMonAfterText(u8); static void CB2_ReturnToPartyMenuFromWritingMail(void); static void Task_DisplayGaveMailFromPartyMessage(u8); -static void UpdatePartyMonHeldItemSprite(struct Pokemon*, struct PartyMenuBox*); +static void UpdatePartyMonHeldItemSprite(struct Pokemon *, struct PartyMenuBox *); static void Task_TossHeldItemYesNo(u8 taskId); static void Task_HandleTossHeldItemYesNoInput(u8); static void Task_TossHeldItem(u8); @@ -300,20 +372,20 @@ static void Task_FieldMoveExitAreaYesNo(u8); static void Task_HandleFieldMoveExitAreaYesNoInput(u8); static void Task_FieldMoveWaitForFade(u8); static u16 GetFieldMoveMonSpecies(void); -static void UpdatePartyMonHPBar(u8, struct Pokemon*); -static void SpriteCB_UpdatePartyMonIcon(struct Sprite*); -static void SpriteCB_BouncePartyMonIcon(struct Sprite*); -static void ShowOrHideHeldItemSprite(u16, struct PartyMenuBox*); +static void UpdatePartyMonHPBar(u8, struct Pokemon *); +static void SpriteCB_UpdatePartyMonIcon(struct Sprite *); +static void SpriteCB_BouncePartyMonIcon(struct Sprite *); +static void ShowOrHideHeldItemSprite(u16, struct PartyMenuBox *); static void CreateHeldItemSpriteForTrade(u8, bool8); -static void SpriteCB_HeldItem(struct Sprite*); -static void SetPartyMonAilmentGfx(struct Pokemon*, struct PartyMenuBox*); -static void UpdatePartyMonAilmentGfx(u8, struct PartyMenuBox*); +static void SpriteCB_HeldItem(struct Sprite *); +static void SetPartyMonAilmentGfx(struct Pokemon *, struct PartyMenuBox *); +static void UpdatePartyMonAilmentGfx(u8, struct PartyMenuBox *); static u8 GetPartyLayoutFromBattleType(void); static void Task_SetSacredAshCB(u8); static void CB2_ReturnToBagMenu(void); static void Task_DisplayHPRestoredMessage(u8); -static u16 ItemEffectToMonEv(struct Pokemon*, u8); -static void ItemEffectToStatString(u8, u8*); +static u16 ItemEffectToMonEv(struct Pokemon *, u8); +static void ItemEffectToStatString(u8, u8 *); static void ReturnToUseOnWhichMon(u8); static void SetSelectedMoveForPPItem(u8); static void TryUsePPItem(u8); @@ -333,8 +405,8 @@ static void Task_PartyMenuReplaceMove(u8); static void Task_StopLearningMoveYesNo(u8); static void Task_HandleStopLearningMoveYesNoInput(u8); static void Task_TryLearningNextMoveAfterText(u8); -static void BufferMonStatsToTaskData(struct Pokemon*, s16*); -static void UpdateMonDisplayInfoAfterRareCandy(u8, struct Pokemon*); +static void BufferMonStatsToTaskData(struct Pokemon *, s16 *); +static void UpdateMonDisplayInfoAfterRareCandy(u8, struct Pokemon *); static void Task_DisplayLevelUpStatsPg1(u8); static void DisplayLevelUpStatsPg1(u8); static void Task_DisplayLevelUpStatsPg2(u8); @@ -358,14 +430,14 @@ static bool8 ReturnGiveItemToBagOrPC(u16); static void Task_DisplayGaveMailFromBagMessage(u8); static void Task_HandleSwitchItemsFromBagYesNoInput(u8); static void Task_ValidateChosenHalfParty(u8); -static bool8 GetBattleEntryEligibility(struct Pokemon*); +static bool8 GetBattleEntryEligibility(struct Pokemon *); static bool8 HasPartySlotAlreadyBeenSelected(u8); static u8 GetBattleEntryLevelCap(void); static u8 GetMaxBattleEntries(void); static u8 GetMinBattleEntries(void); static void Task_ContinueChoosingHalfParty(u8); -static void BufferBattlePartyOrder(u8*, bool8); -static void BufferBattlePartyOrderBySide(u8*, u8, u8); +static void BufferBattlePartyOrder(u8 *, bool8); +static void BufferBattlePartyOrderBySide(u8 *, u8, u8); static void Task_InitMultiPartnerPartySlideIn(u8); static void Task_MultiPartnerPartySlideIn(u8); static void SlideMultiPartyMenuBoxSpritesOneStep(u8); @@ -378,9 +450,9 @@ static void Task_ChoosePartyMon(u8 taskId); static void Task_ChooseMonForMoveRelearner(u8); static void CB2_ChooseMonForMoveRelearner(void); static void Task_BattlePyramidChooseMonHeldItems(u8); -static void ShiftMoveSlot(struct Pokemon*, u8, u8); -static void BlitBitmapToPartyWindow_LeftColumn(u8, u8, u8, u8, u8, u8); -static void BlitBitmapToPartyWindow_RightColumn(u8, u8, u8, u8, u8, u8); +static void ShiftMoveSlot(struct Pokemon *, u8, u8); +static void BlitBitmapToPartyWindow_LeftColumn(u8, u8, u8, u8, u8, bool8); +static void BlitBitmapToPartyWindow_RightColumn(u8, u8, u8, u8, u8, bool8); static void CursorCb_Summary(u8); static void CursorCb_Switch(u8); static void CursorCb_Cancel1(u8); @@ -404,9 +476,9 @@ static bool8 SetUpFieldMove_Surf(void); static bool8 SetUpFieldMove_Fly(void); static bool8 SetUpFieldMove_Waterfall(void); static bool8 SetUpFieldMove_Dive(void); +void TryItemHoldFormChange(struct Pokemon *mon); // static const data -#include "data/pokemon/tutor_learnsets.h" #include "data/party_menu.h" // code @@ -476,7 +548,7 @@ static void CB2_InitPartyMenu(void) { while (TRUE) { - if (MenuHelpers_CallLinkSomething() == TRUE || ShowPartyMenu() == TRUE || MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() == TRUE || ShowPartyMenu() == TRUE || MenuHelpers_IsLinkActive() == TRUE) break; } } @@ -509,7 +581,7 @@ static bool8 ShowPartyMenu(void) gMain.state++; break; case 5: - if (!MenuHelpers_LinkSomething()) + if (!MenuHelpers_IsLinkActive()) ResetTasks(); gMain.state++; break; @@ -754,7 +826,7 @@ static void RenderPartyMenuBox(u8 slot) LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_NO_MON); else LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_MULTI_ALT); - CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2); + CopyWindowToVram(sPartyMenuBoxes[slot].windowId, COPYWIN_GFX); PutWindowTilemap(sPartyMenuBoxes[slot].windowId); ScheduleBgCopyTilemapToVram(2); } @@ -764,7 +836,7 @@ static void RenderPartyMenuBox(u8 slot) { DrawEmptySlot(sPartyMenuBoxes[slot].windowId); LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_NO_MON); - CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2); + CopyWindowToVram(sPartyMenuBoxes[slot].windowId, COPYWIN_GFX); } else { @@ -900,7 +972,7 @@ static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot) if (gPartyMenu.action == PARTY_ACTION_MOVE_TUTOR) { gSpecialVar_Result = FALSE; - DisplayPartyPokemonDataToTeachMove(slot, 0, gSpecialVar_0x8005); + DisplayPartyPokemonDataToTeachMove(slot, gSpecialVar_0x8005); } else { @@ -912,10 +984,10 @@ static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot) default: return FALSE; case 1: // TM/HM - DisplayPartyPokemonDataToTeachMove(slot, item, 0); + DisplayPartyPokemonDataToTeachMove(slot, ItemIdToBattleMoveId(item)); break; case 2: // Evolution stone - if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, EVO_MODE_ITEM_CHECK, item, SPECIES_NONE) != SPECIES_NONE) + if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, EVO_MODE_ITEM_CHECK, item, NULL) != SPECIES_NONE) return FALSE; DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NO_USE); break; @@ -924,9 +996,9 @@ static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot) return TRUE; } -static void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor) +static void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 move) { - switch (CanMonLearnTMTutor(&gPlayerParty[slot], item, tutor)) + switch (CanTeachMove(&gPlayerParty[slot], move)) { case CANNOT_LEARN_MOVE: case CANNOT_LEARN_MOVE_IS_EGG: @@ -944,7 +1016,7 @@ static void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor) static void DisplayPartyPokemonDataForMultiBattle(u8 slot) { struct PartyMenuBox *menuBox = &sPartyMenuBoxes[slot]; - u8 actualSlot = slot - (3); + u8 actualSlot = slot - MULTI_PARTY_SIZE; if (gMultiPartnerParty[actualSlot].species == SPECIES_NONE) { @@ -954,12 +1026,12 @@ static void DisplayPartyPokemonDataForMultiBattle(u8 slot) { menuBox->infoRects->blitFunc(menuBox->windowId, 0, 0, 0, 0, FALSE); StringCopy(gStringVar1, gMultiPartnerParty[actualSlot].nickname); - StringGetEnd10(gStringVar1); + StringGet_Nickname(gStringVar1); ConvertInternationalPlayerName(gStringVar1); DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, menuBox->infoRects->dimensions); DisplayPartyPokemonLevel(gMultiPartnerParty[actualSlot].level, menuBox); DisplayPartyPokemonGender(gMultiPartnerParty[actualSlot].gender, gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].nickname, menuBox); - DisplayPartyPokemonHP(gMultiPartnerParty[actualSlot].hp, menuBox); + DisplayPartyPokemonHP(gMultiPartnerParty[actualSlot].hp, gMultiPartnerParty[actualSlot].maxhp, menuBox); DisplayPartyPokemonMaxHP(gMultiPartnerParty[actualSlot].maxhp, menuBox); DisplayPartyPokemonHPBar(gMultiPartnerParty[actualSlot].hp, gMultiPartnerParty[actualSlot].maxhp, menuBox); } @@ -974,7 +1046,7 @@ static bool8 RenderPartyMenuBoxes(void) return FALSE; } -static u8* GetPartyMenuBgTile(u16 tileId) +static u8 *GetPartyMenuBgTile(u16 tileId) { return &sPartyBgGfxTilemap[tileId << 5]; } @@ -1129,7 +1201,7 @@ static void DrawCancelConfirmButtons(void) bool8 IsMultiBattle(void) { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleTypeFlags & BATTLE_TYPE_TRAINER && gMain.inBattle) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gMain.inBattle) return TRUE; else return FALSE; @@ -1182,19 +1254,19 @@ u8 GetPartyMenuType(void) void Task_HandleChooseMonInput(u8 taskId) { - if (!gPaletteFade.active && MenuHelpers_CallLinkSomething() != TRUE) + if (!gPaletteFade.active && MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { s8 *slotPtr = GetCurrentPartySlotPtr(); switch (PartyMenuButtonHandler(slotPtr)) { - case 1: // Selected mon + case A_BUTTON: // Selected mon HandleChooseMonSelection(taskId, slotPtr); break; - case 2: // Selected Cancel + case B_BUTTON: // Selected Cancel / pressed B HandleChooseMonCancel(taskId, slotPtr); break; - case 8: // Start button + case START_BUTTON: if (sPartyMenuInternal->chooseHalf) { PlaySE(SE_SELECT); @@ -1205,7 +1277,7 @@ void Task_HandleChooseMonInput(u8 taskId) } } -static s8* GetCurrentPartySlotPtr(void) +static s8 *GetCurrentPartySlotPtr(void) { if (gPartyMenu.action == PARTY_ACTION_SWITCH || gPartyMenu.action == PARTY_ACTION_SOFTBOILED) return &gPartyMenu.slotId2; @@ -1224,14 +1296,14 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) switch (gPartyMenu.action) { case PARTY_ACTION_SOFTBOILED: - if (IsSelectedMonNotEgg((u8*)slotPtr)) + if (IsSelectedMonNotEgg((u8 *)slotPtr)) { PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); Task_TryUseSoftboiledOnPartyMon(taskId); } break; case PARTY_ACTION_USE_ITEM: - if (IsSelectedMonNotEgg((u8*)slotPtr)) + if (IsSelectedMonNotEgg((u8 *)slotPtr)) { if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen; @@ -1241,7 +1313,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) } break; case PARTY_ACTION_MOVE_TUTOR: - if (IsSelectedMonNotEgg((u8*)slotPtr)) + if (IsSelectedMonNotEgg((u8 *)slotPtr)) { PlaySE(SE_SELECT); PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); @@ -1249,7 +1321,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) } break; case PARTY_ACTION_GIVE_MAILBOX_MAIL: - if (IsSelectedMonNotEgg((u8*)slotPtr)) + if (IsSelectedMonNotEgg((u8 *)slotPtr)) { PlaySE(SE_SELECT); PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); @@ -1258,7 +1330,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) break; case PARTY_ACTION_GIVE_ITEM: case PARTY_ACTION_GIVE_PC_ITEM: - if (IsSelectedMonNotEgg((u8*)slotPtr)) + if (IsSelectedMonNotEgg((u8 *)slotPtr)) { PlaySE(SE_SELECT); PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); @@ -1274,7 +1346,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) Task_ClosePartyMenu(taskId); break; case PARTY_ACTION_MINIGAME: - if (IsSelectedMonNotEgg((u8*)slotPtr)) + if (IsSelectedMonNotEgg((u8 *)slotPtr)) { TryEnterMonForMinigame(taskId, (u8)*slotPtr); } @@ -1319,7 +1391,7 @@ static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr) PlaySE(SE_SELECT); if (DisplayCancelChooseMonYesNo(taskId) != TRUE) { - if (!MenuHelpers_LinkSomething()) + if (!MenuHelpers_IsLinkActive()) gSpecialVar_0x8004 = PARTY_SIZE + 1; gPartyMenuUseExitCallback = FALSE; *slotPtr = PARTY_SIZE + 1; @@ -1331,7 +1403,7 @@ static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr) static bool8 DisplayCancelChooseMonYesNo(u8 taskId) { - const u8* stringPtr = NULL; + const u8 *stringPtr = NULL; if (gPartyMenu.menuType == PARTY_MENU_TYPE_CONTEST) stringPtr = gText_CancelParticipation; @@ -1411,7 +1483,7 @@ static u16 PartyMenuButtonHandler(s8 *slotPtr) } if (JOY_NEW(START_BUTTON)) - return 8; + return START_BUTTON; if (movementDir) { @@ -1420,8 +1492,8 @@ static u16 PartyMenuButtonHandler(s8 *slotPtr) } // Pressed Cancel - if ((JOY_NEW(A_BUTTON)) && *slotPtr == PARTY_SIZE + 1) - return 2; + if (JOY_NEW(A_BUTTON) && *slotPtr == PARTY_SIZE + 1) + return B_BUTTON; return JOY_NEW(A_BUTTON | B_BUTTON); } @@ -1619,15 +1691,15 @@ static s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir) } } -u8* GetMonNickname(struct Pokemon *mon, u8 *dest) +u8 *GetMonNickname(struct Pokemon *mon, u8 *dest) { GetMonData(mon, MON_DATA_NICKNAME, dest); - return StringGetEnd10(dest); + return StringGet_Nickname(dest); } #define tKeepOpen data[0] -u8 DisplayPartyMenuMessage(const u8* str, bool8 keepOpen) +u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen) { u8 taskId; @@ -1643,7 +1715,7 @@ static void Task_PrintAndWaitForText(u8 taskId) { if (gTasks[taskId].tKeepOpen == FALSE) { - ClearStdWindowAndFrameToTransparent(6, 0); + ClearStdWindowAndFrameToTransparent(6, FALSE); ClearWindowTilemap(6); } DestroyTask(taskId); @@ -1659,7 +1731,7 @@ bool8 IsPartyMenuTextPrinterActive(void) static void Task_WaitForLinkAndReturnToChooseMon(u8 taskId) { - if (MenuHelpers_CallLinkSomething() != TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); gTasks[taskId].func = Task_HandleChooseMonInput; @@ -1670,9 +1742,9 @@ static void Task_ReturnToChooseMonAfterText(u8 taskId) { if (IsPartyMenuTextPrinterActive() != TRUE) { - ClearStdWindowAndFrameToTransparent(6, 0); + ClearStdWindowAndFrameToTransparent(6, FALSE); ClearWindowTilemap(6); - if (MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE) { gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon; } @@ -1726,15 +1798,16 @@ static void GiveItemToMon(struct Pokemon *mon, u16 item) if (ItemIsMail(item) == TRUE) { - if (GiveMailToMon(mon, item) == 0xFF) + if (GiveMailToMonByItemId(mon, item) == MAIL_NONE) return; } itemBytes[0] = item; itemBytes[1] = item >> 8; SetMonData(mon, MON_DATA_HELD_ITEM, itemBytes); + TryItemHoldFormChange(&gPlayerParty[gPartyMenu.slotId]); } -static u8 TryTakeMonItem(struct Pokemon* mon) +static u8 TryTakeMonItem(struct Pokemon *mon) { u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); @@ -1745,6 +1818,7 @@ static u8 TryTakeMonItem(struct Pokemon* mon) item = ITEM_NONE; SetMonData(mon, MON_DATA_HELD_ITEM, &item); + TryItemHoldFormChange(&gPlayerParty[gPartyMenu.slotId]); return 2; } @@ -1954,47 +2028,18 @@ static void Task_HandleCancelParticipationYesNoInput(u8 taskId) } } -static u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor) +static u8 CanTeachMove(struct Pokemon *mon, u16 move) { - u16 move; - if (GetMonData(mon, MON_DATA_IS_EGG)) return CANNOT_LEARN_MOVE_IS_EGG; - - if (item >= ITEM_TM01) - { - if (!CanMonLearnTMHM(mon, item - ITEM_TM01)) - return CANNOT_LEARN_MOVE; - else - move = ItemIdToBattleMoveId(item); - } - else - { - if (!CanLearnTutorMove(GetMonData(mon, MON_DATA_SPECIES), tutor)) - return CANNOT_LEARN_MOVE; - else - move = GetTutorMove(tutor); - } - - if (MonKnowsMove(mon, move) == TRUE) + else if (!CanLearnTeachableMove(GetMonData(mon, MON_DATA_SPECIES2), move)) + return CANNOT_LEARN_MOVE; + else if (MonKnowsMove(mon, move) == TRUE) return ALREADY_KNOWS_MOVE; else return CAN_LEARN_MOVE; } -static u16 GetTutorMove(u8 tutor) -{ - return gTutorMoves[tutor]; -} - -static bool8 CanLearnTutorMove(u16 species, u8 tutor) -{ - if (sTutorLearnsets[species] & (1 << tutor)) - return TRUE; - else - return FALSE; -} - static void InitPartyMenuWindows(u8 layout) { u8 i; @@ -2019,7 +2064,7 @@ static void InitPartyMenuWindows(u8 layout) FillWindowPixelBuffer(i, PIXEL_FILL(0)); LoadUserWindowBorderGfx(0, 0x4F, 0xD0); LoadPalette(GetOverworldTextboxPalettePtr(), 0xE0, 0x20); - LoadPalette(gUnknown_0860F074, 0xF0, 0x20); + LoadPalette(gStandardMenuPalette, 0xF0, 0x20); } static void CreateCancelConfirmWindows(bool8 chooseHalf) @@ -2035,10 +2080,10 @@ static void CreateCancelConfirmWindows(bool8 chooseHalf) { confirmWindowId = AddWindow(&sConfirmButtonWindowTemplate); FillWindowPixelBuffer(confirmWindowId, PIXEL_FILL(0)); - mainOffset = GetStringCenterAlignXOffset(0, gMenuText_Confirm, 48); - AddTextPrinterParameterized4(confirmWindowId, 0, mainOffset, 1, 0, 0, sFontColorTable[0], -1, gMenuText_Confirm); + mainOffset = GetStringCenterAlignXOffset(FONT_SMALL, gMenuText_Confirm, 48); + AddTextPrinterParameterized4(confirmWindowId, FONT_SMALL, mainOffset, 1, 0, 0, sFontColorTable[0], TEXT_SKIP_DRAW, gMenuText_Confirm); PutWindowTilemap(confirmWindowId); - CopyWindowToVram(confirmWindowId, 2); + CopyWindowToVram(confirmWindowId, COPYWIN_GFX); cancelWindowId = AddWindow(&sMultiCancelButtonWindowTemplate); offset = 0; } @@ -2052,21 +2097,21 @@ static void CreateCancelConfirmWindows(bool8 chooseHalf) // Branches are functionally identical. Second branch is never reached, Spin Trade wasnt fully implemented if (gPartyMenu.menuType != PARTY_MENU_TYPE_SPIN_TRADE) { - mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel, 48); - AddTextPrinterParameterized3(cancelWindowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel); + mainOffset = GetStringCenterAlignXOffset(FONT_SMALL, gText_Cancel, 48); + AddTextPrinterParameterized3(cancelWindowId, FONT_SMALL, mainOffset + offset, 1, sFontColorTable[0], TEXT_SKIP_DRAW, gText_Cancel); } else { - mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel2, 48); - AddTextPrinterParameterized3(cancelWindowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel2); + mainOffset = GetStringCenterAlignXOffset(FONT_SMALL, gText_Cancel2, 48); + AddTextPrinterParameterized3(cancelWindowId, FONT_SMALL, mainOffset + offset, 1, sFontColorTable[0], TEXT_SKIP_DRAW, gText_Cancel2); } PutWindowTilemap(cancelWindowId); - CopyWindowToVram(cancelWindowId, 2); + CopyWindowToVram(cancelWindowId, COPYWIN_GFX); ScheduleBgCopyTilemapToVram(0); } } -static u16* GetPartyMenuPalBufferPtr(u8 paletteId) +static u16 *GetPartyMenuPalBufferPtr(u8 paletteId) { return &sPartyMenuInternal->palBuffer[paletteId]; } @@ -2088,35 +2133,35 @@ static void BlitBitmapToPartyWindow(u8 windowId, const u8 *b, u8 c, u8 x, u8 y, } } -static void BlitBitmapToPartyWindow_LeftColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg) +static void BlitBitmapToPartyWindow_LeftColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, bool8 hideHP) { if (width == 0 && height == 0) { width = 10; height = 7; } - if (isEgg == FALSE) - BlitBitmapToPartyWindow(windowId, sMainSlotTileNums, 10, x, y, width, height); + if (hideHP == FALSE) + BlitBitmapToPartyWindow(windowId, sSlotTilemap_Main, 10, x, y, width, height); else - BlitBitmapToPartyWindow(windowId, sMainSlotTileNums_Egg, 10, x, y, width, height); + BlitBitmapToPartyWindow(windowId, sSlotTilemap_MainNoHP, 10, x, y, width, height); } -static void BlitBitmapToPartyWindow_RightColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg) +static void BlitBitmapToPartyWindow_RightColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, bool8 hideHP) { if (width == 0 && height == 0) { width = 18; height = 3; } - if (isEgg == FALSE) - BlitBitmapToPartyWindow(windowId, sOtherSlotsTileNums, 18, x, y, width, height); + if (hideHP == FALSE) + BlitBitmapToPartyWindow(windowId, sSlotTilemap_Wide, 18, x, y, width, height); else - BlitBitmapToPartyWindow(windowId, sOtherSlotsTileNums_Egg, 18, x, y, width, height); + BlitBitmapToPartyWindow(windowId, sSlotTilemap_WideNoHP, 18, x, y, width, height); } static void DrawEmptySlot(u8 windowId) { - BlitBitmapToPartyWindow(windowId, sEmptySlotTileNums, 18, 0, 0, 18, 3); + BlitBitmapToPartyWindow(windowId, sSlotTilemap_WideEmpty, 18, 0, 0, 18, 3); } #define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \ @@ -2205,7 +2250,7 @@ static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags) static void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, const u8 *align) { - AddTextPrinterParameterized3(windowId, 0, align[0], align[1], sFontColorTable[color], 0, str); + AddTextPrinterParameterized3(windowId, FONT_SMALL, align[0], align[1], sFontColorTable[color], 0, str); } static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c) @@ -2284,18 +2329,31 @@ static void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct PartyMenuBox if (c != 0) menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[12] >> 3, (menuBox->infoRects->dimensions[13] >> 3) + 1, menuBox->infoRects->dimensions[14] >> 3, menuBox->infoRects->dimensions[15] >> 3, FALSE); if (c != 2) - DisplayPartyPokemonHP(GetMonData(mon, MON_DATA_HP), menuBox); + DisplayPartyPokemonHP(GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP), menuBox); } } -static void DisplayPartyPokemonHP(u16 hp, struct PartyMenuBox *menuBox) +static void DisplayParty4DigitsHP(struct PartyMenuBox *menuBox, const u8 *str, const u8 *origAlings, u32 toSub) { - u8 *strOut = ConvertIntToDecimalStringN(gStringVar1, hp, STR_CONV_MODE_RIGHT_ALIGN, 3); + u8 newAligns[4]; + + memcpy(newAligns, origAlings, sizeof(newAligns)); + newAligns[0] -= toSub; // x, so that the hp fits + DisplayPartyPokemonBarDetail(menuBox->windowId, str, 0, newAligns); +} + +static void DisplayPartyPokemonHP(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox) +{ + bool32 fourDigits = (maxhp >= 1000); + u8 *strOut = ConvertIntToDecimalStringN(gStringVar1, hp, STR_CONV_MODE_RIGHT_ALIGN, fourDigits ? 4 : 3); strOut[0] = CHAR_SLASH; strOut[1] = EOS; - DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[12]); + if (fourDigits) + DisplayParty4DigitsHP(menuBox, gStringVar1, &menuBox->infoRects->dimensions[12], 10); + else + DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[12]); } static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c) @@ -2311,10 +2369,16 @@ static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct PartyMenuB static void DisplayPartyPokemonMaxHP(u16 maxhp, struct PartyMenuBox *menuBox) { - ConvertIntToDecimalStringN(gStringVar2, maxhp, STR_CONV_MODE_RIGHT_ALIGN, 3); + bool32 fourDigits = (maxhp >= 1000); + + ConvertIntToDecimalStringN(gStringVar2, maxhp, STR_CONV_MODE_RIGHT_ALIGN, fourDigits ? 4 : 3); StringCopy(gStringVar1, gText_Slash); StringAppend(gStringVar1, gStringVar2); - DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[16]); + + if (fourDigits) + DisplayParty4DigitsHP(menuBox, gStringVar1, &menuBox->infoRects->dimensions[16], 5); + else + DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[16]); } static void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox) @@ -2354,7 +2418,7 @@ static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *men FillWindowPixelRect(menuBox->windowId, 0x0D, menuBox->infoRects->dimensions[20] + hpFraction, menuBox->infoRects->dimensions[21], menuBox->infoRects->dimensions[22] - hpFraction, 1); FillWindowPixelRect(menuBox->windowId, 0x02, menuBox->infoRects->dimensions[20] + hpFraction, menuBox->infoRects->dimensions[21] + 1, menuBox->infoRects->dimensions[22] - hpFraction, 2); } - CopyWindowToVram(menuBox->windowId, 2); + CopyWindowToVram(menuBox->windowId, COPYWIN_GFX); } static void DisplayPartyPokemonDescriptionText(u8 stringID, struct PartyMenuBox *menuBox, u8 c) @@ -2366,14 +2430,14 @@ static void DisplayPartyPokemonDescriptionText(u8 stringID, struct PartyMenuBox menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->descTextLeft >> 3, menuBox->infoRects->descTextTop >> 3, width, height, TRUE); } if (c != 2) - AddTextPrinterParameterized3(menuBox->windowId, 1, menuBox->infoRects->descTextLeft, menuBox->infoRects->descTextTop, sFontColorTable[0], 0, sDescriptionStringTable[stringID]); + AddTextPrinterParameterized3(menuBox->windowId, FONT_NORMAL, menuBox->infoRects->descTextLeft, menuBox->infoRects->descTextTop, sFontColorTable[0], 0, sDescriptionStringTable[stringID]); } static void PartyMenuRemoveWindow(u8 *ptr) { if (*ptr != WINDOW_NONE) { - ClearStdWindowAndFrameToTransparent(*ptr, 0); + ClearStdWindowAndFrameToTransparent(*ptr, FALSE); RemoveWindow(*ptr); *ptr = WINDOW_NONE; ScheduleBgCopyTilemapToVram(2); @@ -2421,7 +2485,7 @@ void DisplayPartyMenuStdMessage(u32 stringId) } DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x4F, 0xD); StringExpandPlaceholders(gStringVar4, sActionStringTable[stringId]); - AddTextPrinterParameterized(*windowPtr, 1, gStringVar4, 0, 1, 0, 0); + AddTextPrinterParameterized(*windowPtr, FONT_NORMAL, gStringVar4, 0, 1, 0, 0); ScheduleBgCopyTilemapToVram(2); } } @@ -2449,7 +2513,7 @@ static u8 DisplaySelectionWindow(u8 windowType) { struct WindowTemplate window; u8 cursorDimension; - u8 fontAttribute; + u8 letterSpacing; u8 i; switch (windowType) @@ -2472,16 +2536,16 @@ static u8 DisplaySelectionWindow(u8 windowType) DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13); if (windowType == SELECTWINDOW_MOVES) return sPartyMenuInternal->windowId[0]; - cursorDimension = GetMenuCursorDimensionByFont(1, 0); - fontAttribute = GetFontAttribute(1, 2); + cursorDimension = GetMenuCursorDimensionByFont(FONT_NORMAL, 0); + letterSpacing = GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING); for (i = 0; i < sPartyMenuInternal->numActions; i++) { u8 fontColorsId = (sPartyMenuInternal->actions[i] >= MENU_FIELD_MOVES) ? 4 : 3; - AddTextPrinterParameterized4(sPartyMenuInternal->windowId[0], 1, cursorDimension, (i * 16) + 1, fontAttribute, 0, sFontColorTable[fontColorsId], 0, sCursorOptions[sPartyMenuInternal->actions[i]].text); + AddTextPrinterParameterized4(sPartyMenuInternal->windowId[0], FONT_NORMAL, cursorDimension, (i * 16) + 1, letterSpacing, 0, sFontColorTable[fontColorsId], 0, sCursorOptions[sPartyMenuInternal->actions[i]].text); } - InitMenuInUpperLeftCorner(sPartyMenuInternal->windowId[0], sPartyMenuInternal->numActions, 0, 1); + InitMenuInUpperLeftCorner(sPartyMenuInternal->windowId[0], sPartyMenuInternal->numActions, 0, TRUE); ScheduleBgCopyTilemapToVram(2); return sPartyMenuInternal->windowId[0]; @@ -2491,7 +2555,7 @@ static void PartyMenuPrintText(const u8 *text) { DrawStdFrameWithCustomTileAndPalette(6, FALSE, 0x4F, 13); gTextFlags.canABSpeedUpPrint = TRUE; - AddTextPrinterParameterized2(6, 1, text, GetPlayerTextSpeedDelay(), 0, 2, 1, 3); + AddTextPrinterParameterized2(6, FONT_NORMAL, text, GetPlayerTextSpeedDelay(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } static void PartyMenuDisplayYesNoMenu(void) @@ -2538,7 +2602,7 @@ static void SetPartyMonFieldSelectionActions(struct Pokemon *mons, u8 slotId) // Add field moves to action list for (i = 0; i < MAX_MON_MOVES; i++) { - for (j = 0; sFieldMoves[j] != FIELD_MOVE_TERMINATOR; j++) + for (j = 0; sFieldMoves[j] != FIELD_MOVES_COUNT; j++) { if (GetMonData(&mons[slotId], i + MON_DATA_MOVE1) == sFieldMoves[j]) { @@ -2663,7 +2727,7 @@ static void Task_TryCreateSelectionWindow(u8 taskId) static void Task_HandleSelectionMenuInput(u8 taskId) { - if (!gPaletteFade.active && MenuHelpers_CallLinkSomething() != TRUE) + if (!gPaletteFade.active && MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { s8 input; s16 *data = gTasks[taskId].data; @@ -2792,7 +2856,7 @@ static void SwitchSelectedMons(u8 taskId) // returns FALSE if the slot has slid fully offscreen / back onscreen static bool8 TryMovePartySlot(s16 x, s16 width, u8 *leftMove, u8 *newX, u8 *newWidth) { - if ((x + width) < 0) + if (x + width < 0) return FALSE; if (x > 31) return FALSE; @@ -2807,7 +2871,7 @@ static bool8 TryMovePartySlot(s16 x, s16 width, u8 *leftMove, u8 *newX, u8 *newW { *leftMove = 0; *newX = x; - if ((x + width) > 31) + if (x + width > 31) *newWidth = 32 - x; else *newWidth = width; @@ -2818,14 +2882,13 @@ static bool8 TryMovePartySlot(s16 x, s16 width, u8 *leftMove, u8 *newX, u8 *newW static void MoveAndBufferPartySlot(const void *rectSrc, s16 x, s16 y, s16 width, s16 height, s16 dir) { - // The use of the dimension parameters here is a mess - u8 leftMove, newX, newWidth; // leftMove is used as a srcX, newX is used as both x and srcHeight, newWidth is used as both width and destY + u8 srcX, newX, newWidth; - if (TryMovePartySlot(x, width, &leftMove, &newX, &newWidth)) + if (TryMovePartySlot(x, width, &srcX, &newX, &newWidth)) { FillBgTilemapBufferRect_Palette0(0, 0, newX, y, newWidth, height); - if (TryMovePartySlot(x + dir, width, &leftMove, &newX, &newWidth)) - CopyRectToBgTilemapBufferRect(0, rectSrc, leftMove, 0, width, height, newX, y, newWidth, height, 17, 0, 0); + if (TryMovePartySlot(x + dir, width, &srcX, &newX, &newWidth)) + CopyRectToBgTilemapBufferRect(0, rectSrc, srcX, 0, width, height, newX, y, newWidth, height, 17, 0, 0); } } @@ -3312,7 +3375,7 @@ static void CursorCb_Read(u8 taskId) static void CB2_ReadHeldMail(void) { - ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL)], CB2_ReturnToPartyMenuFromReadingMail, 1); + ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL)], CB2_ReturnToPartyMenuFromReadingMail, TRUE); } static void CB2_ReturnToPartyMenuFromReadingMail(void) @@ -3344,7 +3407,7 @@ static void Task_HandleSendMailToPCYesNoInput(u8 taskId) switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: // Yes, send to PC - if (TakeMailFromMon2(&gPlayerParty[gPartyMenu.slotId]) != 0xFF) + if (TakeMailFromMonAndSave(&gPlayerParty[gPartyMenu.slotId]) != MAIL_NONE) { DisplayPartyMenuMessage(gText_MailSentToPC, FALSE); gTasks[taskId].func = Task_UpdateHeldItemSprite; @@ -3522,7 +3585,7 @@ static void CursorCb_Register(u8 taskId) u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, isEventLegal)) + switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isEventLegal)) { case CANT_REGISTER_MON: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); @@ -3548,7 +3611,7 @@ static void CursorCb_Trade1(u8 taskId) u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); + u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); if (stringId != UR_TRADE_MSG_NONE) { @@ -3635,7 +3698,7 @@ static void CursorCb_FieldMove(u8 taskId) PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); - if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE || InUnionRoom() == TRUE) { if (fieldMove == FIELD_MOVE_MILK_DRINK || fieldMove == FIELD_MOVE_SOFT_BOILED) DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE); @@ -4215,7 +4278,7 @@ static bool8 IsHPRecoveryItem(u16 item) { const u8 *effect; - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else effect = gItemEffectTable[item - ITEM_POTION]; @@ -4308,7 +4371,13 @@ static bool8 IsItemFlute(u16 item) static bool8 ExecuteTableBasedItemEffect_(u8 partyMonIndex, u16 item, u8 monMoveIndex) { if (gMain.inBattle) - return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, GetPartyIdFromBattleSlot(partyMonIndex), monMoveIndex); + { + if ((partyMonIndex == 0 && gStatuses3[B_POSITION_PLAYER_LEFT] & STATUS3_EMBARGO) + || (partyMonIndex == 1 && gStatuses3[B_POSITION_PLAYER_RIGHT] & STATUS3_EMBARGO)) + return TRUE; // cannot use on this mon + else + return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, GetPartyIdFromBattleSlot(partyMonIndex), monMoveIndex); + } else return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, partyMonIndex, monMoveIndex); } @@ -4379,6 +4448,194 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) } } +#define tState data[0] +#define tSpecies data[1] +#define tAbilityNum data[2] +#define tMonId data[3] +#define tOldFunc 4 + +void Task_AbilityCapsule(u8 taskId) +{ + static const u8 askText[] = _("Would you like to change {STR_VAR_1}'s\nability to {STR_VAR_2}?"); + static const u8 doneText[] = _("{STR_VAR_1}'s ability became\n{STR_VAR_2}!{PAUSE_UNTIL_PRESS}"); + s16 *data = gTasks[taskId].data; + + switch (tState) + { + case 0: + // Can't use. + if (gBaseStats[tSpecies].abilities[0] == gBaseStats[tSpecies].abilities[1] + || gBaseStats[tSpecies].abilities[1] == 0 + || tAbilityNum > 1 + || !tSpecies) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, 1); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + return; + } + gPartyMenuUseExitCallback = TRUE; + GetMonNickname(&gPlayerParty[tMonId], gStringVar1); + StringCopy(gStringVar2, gAbilityNames[GetAbilityBySpecies(tSpecies, tAbilityNum)]); + StringExpandPlaceholders(gStringVar4, askText); + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gStringVar4, 1); + ScheduleBgCopyTilemapToVram(2); + tState++; + break; + case 1: + if (!IsPartyMenuTextPrinterActive()) + { + PartyMenuDisplayYesNoMenu(); + tState++; + } + break; + case 2: + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + tState++; + break; + case 1: + case MENU_B_PRESSED: + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + ScheduleBgCopyTilemapToVram(2); + // Don't exit party selections screen, return to choosing a mon. + ClearStdWindowAndFrameToTransparent(6, 0); + ClearWindowTilemap(6); + DisplayPartyMenuStdMessage(5); + gTasks[taskId].func = (void *)GetWordTaskArg(taskId, tOldFunc); + return; + } + break; + case 3: + PlaySE(SE_USE_ITEM); + StringExpandPlaceholders(gStringVar4, doneText); + DisplayPartyMenuMessage(gStringVar4, 1); + ScheduleBgCopyTilemapToVram(2); + tState++; + break; + case 4: + if (!IsPartyMenuTextPrinterActive()) + tState++; + break; + case 5: + SetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, &tAbilityNum); + RemoveBagItem(gSpecialVar_ItemId, 1); + gTasks[taskId].func = Task_ClosePartyMenu; + break; + } +} + +void ItemUseCB_AbilityCapsule(u8 taskId, TaskFunc task) +{ + s16 *data = gTasks[taskId].data; + + tState = 0; + tMonId = gPartyMenu.slotId; + tSpecies = GetMonData(&gPlayerParty[tMonId], MON_DATA_SPECIES, NULL); + tAbilityNum = GetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, NULL) ^ 1; + SetWordTaskArg(taskId, tOldFunc, (uintptr_t)(gTasks[taskId].func)); + gTasks[taskId].func = Task_AbilityCapsule; +} + +void Task_AbilityPatch(u8 taskId) +{ + static const u8 askText[] = _("Would you like to change {STR_VAR_1}'s\nability to {STR_VAR_2}?"); + static const u8 doneText[] = _("{STR_VAR_1}'s ability became\n{STR_VAR_2}!{PAUSE_UNTIL_PRESS}"); + s16 *data = gTasks[taskId].data; + + switch (tState) + { + case 0: + // Can't use. + if (gBaseStats[tSpecies].abilities[tAbilityNum] == 0 + || !tSpecies + || GetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, NULL) > 1 + ) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, 1); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + return; + } + gPartyMenuUseExitCallback = TRUE; + GetMonNickname(&gPlayerParty[tMonId], gStringVar1); + StringCopy(gStringVar2, gAbilityNames[GetAbilityBySpecies(tSpecies, tAbilityNum)]); + StringExpandPlaceholders(gStringVar4, askText); + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gStringVar4, 1); + ScheduleBgCopyTilemapToVram(2); + tState++; + break; + case 1: + if (!IsPartyMenuTextPrinterActive()) + { + PartyMenuDisplayYesNoMenu(); + tState++; + } + break; + case 2: + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + tState++; + break; + case 1: + case MENU_B_PRESSED: + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + ScheduleBgCopyTilemapToVram(2); + // Don't exit party selections screen, return to choosing a mon. + ClearStdWindowAndFrameToTransparent(6, 0); + ClearWindowTilemap(6); + DisplayPartyMenuStdMessage(5); + gTasks[taskId].func = (void *)GetWordTaskArg(taskId, tOldFunc); + return; + } + break; + case 3: + PlaySE(SE_USE_ITEM); + StringExpandPlaceholders(gStringVar4, doneText); + DisplayPartyMenuMessage(gStringVar4, 1); + ScheduleBgCopyTilemapToVram(2); + tState++; + break; + case 4: + if (!IsPartyMenuTextPrinterActive()) + tState++; + break; + case 5: + SetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, &tAbilityNum); + RemoveBagItem(gSpecialVar_ItemId, 1); + gTasks[taskId].func = Task_ClosePartyMenu; + break; + } +} + +void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task) +{ + s16 *data = gTasks[taskId].data; + + tState = 0; + tMonId = gPartyMenu.slotId; + tSpecies = GetMonData(&gPlayerParty[tMonId], MON_DATA_SPECIES, NULL); + tAbilityNum = 2; + SetWordTaskArg(taskId, tOldFunc, (uintptr_t)(gTasks[taskId].func)); + gTasks[taskId].func = Task_AbilityPatch; +} + +#undef tState +#undef tSpecies +#undef tAbilityNum +#undef tMonId +#undef tOldFunc + static void Task_DisplayHPRestoredMessage(u8 taskId) { GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1); @@ -4493,18 +4750,18 @@ static void ShowMoveSelectWindow(u8 slot) { u8 i; u8 moveCount = 0; - u8 fontId = 1; + u8 fontId = FONT_NORMAL; u8 windowId = DisplaySelectionWindow(SELECTWINDOW_MOVES); u16 move; for (i = 0; i < MAX_MON_MOVES; i++) { move = GetMonData(&gPlayerParty[slot], MON_DATA_MOVE1 + i); - AddTextPrinterParameterized(windowId, fontId, gMoveNames[move], 8, (i * 16) + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, fontId, gMoveNames[move], 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); if (move != MOVE_NONE) moveCount++; } - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, moveCount, 0); + InitMenuInUpperLeftCornerNormal(windowId, moveCount, 0); ScheduleBgCopyTilemapToVram(2); } @@ -4532,7 +4789,7 @@ void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task) const u8 *effect; u16 item = gSpecialVar_ItemId; - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else effect = gItemEffectTable[item - ITEM_POTION]; @@ -4635,6 +4892,18 @@ bool8 MonKnowsMove(struct Pokemon *mon, u16 move) return FALSE; } +bool8 BoxMonKnowsMove(struct BoxPokemon *mon, u16 move) +{ + u8 i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (GetMonData(mon, MON_DATA_MOVE1 + i) == move) + return TRUE; + } + return FALSE; +} + static void DisplayLearnMoveMessage(const u8 *str) { StringExpandPlaceholders(gStringVar4, str); @@ -4653,19 +4922,18 @@ static void DisplayLearnMoveMessageAndClose(u8 taskId, const u8 *str) void ItemUseCB_TMHM(u8 taskId, TaskFunc task) { struct Pokemon *mon; - s16 *move; - u16 item; + u16 item = gSpecialVar_ItemId; + u16 move = ItemIdToBattleMoveId(item); + + gPartyMenu.data1 = move; PlaySE(SE_SELECT); mon = &gPlayerParty[gPartyMenu.slotId]; - move = &gPartyMenu.data1; - item = gSpecialVar_ItemId; - GetMonNickname(mon, gStringVar1); - move[0] = ItemIdToBattleMoveId(item); - StringCopy(gStringVar2, gMoveNames[move[0]]); - move[1] = 0; - switch (CanMonLearnTMTutor(mon, item, 0)) + GetMonNickname(mon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[move]); + + switch (CanTeachMove(mon, move)) { case CANNOT_LEARN_MOVE: DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove); @@ -4675,7 +4943,7 @@ void ItemUseCB_TMHM(u8 taskId, TaskFunc task) return; } - if (GiveMoveToMon(mon, move[0]) != MON_HAS_MAX_MOVES) + if (GiveMoveToMon(mon, move) != MON_HAS_MAX_MOVES) { gTasks[taskId].func = Task_LearnedMove; } @@ -4772,6 +5040,7 @@ static void CB2_ShowSummaryScreenToForgetMove(void) static void CB2_ReturnToPartyMenuWhileLearningMove(void) { + SetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_LEVEL, &sFinalLevel); // to avoid displaying incorrect level InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback); } @@ -4877,8 +5146,9 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) s16 *arrayPtr = ptr->data; u16 *itemPtr = &gSpecialVar_ItemId; bool8 cannotUseEffect; + sInitialLevel = GetMonData(mon, MON_DATA_LEVEL); - if (GetMonData(mon, MON_DATA_LEVEL) != MAX_LEVEL) + if (sInitialLevel != MAX_LEVEL) { BufferMonStatsToTaskData(mon, arrayPtr); cannotUseEffect = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, *itemPtr, 0); @@ -4898,16 +5168,29 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) } else { + sFinalLevel = GetMonData(mon, MON_DATA_LEVEL, NULL); gPartyMenuUseExitCallback = TRUE; - PlayFanfareByFanfareNum(FANFARE_LEVEL_UP); UpdateMonDisplayInfoAfterRareCandy(gPartyMenu.slotId, mon); RemoveBagItem(gSpecialVar_ItemId, 1); GetMonNickname(mon, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, GetMonData(mon, MON_DATA_LEVEL), STR_CONV_MODE_LEFT_ALIGN, 3); - StringExpandPlaceholders(gStringVar4, gText_PkmnElevatedToLvVar2); - DisplayPartyMenuMessage(gStringVar4, TRUE); - ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = Task_DisplayLevelUpStatsPg1; + if (sFinalLevel > sInitialLevel) + { + PlayFanfareByFanfareNum(FANFARE_LEVEL_UP); + ConvertIntToDecimalStringN(gStringVar2, sFinalLevel, STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_PkmnElevatedToLvVar2); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_DisplayLevelUpStatsPg1; + } + else + { + PlaySE(SE_USE_ITEM); + gPartyMenuUseExitCallback = FALSE; + StringExpandPlaceholders(gStringVar4, gText_PkmnGainedExp); + DisplayPartyMenuMessage(gStringVar4, FALSE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = task; + } } } @@ -4940,6 +5223,7 @@ static void Task_DisplayLevelUpStatsPg2(u8 taskId) { PlaySE(SE_SELECT); DisplayLevelUpStatsPg2(taskId); + sInitialLevel += 1; // so the Pokemon doesn't learn a move meant for its previous level gTasks[taskId].func = Task_TryLearnNewMoves; } } @@ -4950,7 +5234,7 @@ static void DisplayLevelUpStatsPg1(u8 taskId) arrayPtr[12] = CreateLevelUpStatsWindow(); DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); - CopyWindowToVram(arrayPtr[12], 2); + CopyWindowToVram(arrayPtr[12], COPYWIN_GFX); ScheduleBgCopyTilemapToVram(2); } @@ -4959,7 +5243,7 @@ static void DisplayLevelUpStatsPg2(u8 taskId) s16 *arrayPtr = sPartyMenuInternal->data; DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); - CopyWindowToVram(arrayPtr[12], 2); + CopyWindowToVram(arrayPtr[12], COPYWIN_GFX); ScheduleBgCopyTilemapToVram(2); } @@ -4967,53 +5251,67 @@ static void Task_TryLearnNewMoves(u8 taskId) { u16 learnMove; - if (WaitFanfare(0) && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) + if (WaitFanfare(FALSE) && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) { RemoveLevelUpStatsWindow(); - learnMove = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], TRUE); - gPartyMenu.learnMoveState = 1; - switch (learnMove) + for (; sInitialLevel <= sFinalLevel; sInitialLevel++) { - case 0: // No moves to learn - PartyMenuTryEvolution(taskId); - break; - case MON_HAS_MAX_MOVES: - DisplayMonNeedsToReplaceMove(taskId); - break; - case MON_ALREADY_KNOWS_MOVE: - gTasks[taskId].func = Task_TryLearningNextMove; - break; - default: - DisplayMonLearnedMove(taskId, learnMove); - break; + SetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_LEVEL, &sInitialLevel); + learnMove = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], TRUE); + gPartyMenu.learnMoveState = 1; + switch (learnMove) + { + case 0: // No moves to learn + if (sInitialLevel >= sFinalLevel) + PartyMenuTryEvolution(taskId); + break; + case MON_HAS_MAX_MOVES: + DisplayMonNeedsToReplaceMove(taskId); + break; + case MON_ALREADY_KNOWS_MOVE: + gTasks[taskId].func = Task_TryLearningNextMove; + break; + default: + DisplayMonLearnedMove(taskId, learnMove); + break; + } + if (learnMove) + break; } } } static void Task_TryLearningNextMove(u8 taskId) { - u16 result = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], FALSE); - - switch (result) + u16 result; + for (; sInitialLevel <= sFinalLevel; sInitialLevel++) { - case 0: // No moves to learn - PartyMenuTryEvolution(taskId); - break; - case MON_HAS_MAX_MOVES: - DisplayMonNeedsToReplaceMove(taskId); - break; - case MON_ALREADY_KNOWS_MOVE: - return; - default: - DisplayMonLearnedMove(taskId, result); - break; + SetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_LEVEL, &sInitialLevel); + result = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], FALSE); + switch (result) + { + case 0: // No moves to learn + break; + case MON_HAS_MAX_MOVES: + DisplayMonNeedsToReplaceMove(taskId); + break; + case MON_ALREADY_KNOWS_MOVE: + return; + default: + DisplayMonLearnedMove(taskId, result); + break; + } + if (result) + break; } + if (sInitialLevel >= sFinalLevel) + PartyMenuTryEvolution(taskId); } static void PartyMenuTryEvolution(u8 taskId) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; - u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_NORMAL, ITEM_NONE, SPECIES_NONE); + u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_NORMAL, ITEM_NONE, NULL); if (targetSpecies != SPECIES_NONE) { @@ -5235,7 +5533,7 @@ static void Task_TryItemUseFormChange(u8 taskId) break; case 4: targetSpecies = gTasks[taskId].tTargetSpecies; - PlayCry1(targetSpecies, 0); + PlayCry_Normal(targetSpecies, 0); gTasks[taskId].tState++; break; case 5: @@ -5296,6 +5594,22 @@ void ItemUseCB_FormChange_ConsumedOnUse(u8 taskId, TaskFunc task) if (TryItemUseFormChange(taskId, task)) RemoveBagItem(gSpecialVar_ItemId, 1); } +void TryItemHoldFormChange(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES); + u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_HOLD_ABILITY, 0); + if (targetSpecies == SPECIES_NONE) + targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_HOLD, 0); + if (targetSpecies != SPECIES_NONE) + { + PlayCry_NormalNoDucking(targetSpecies, 0, CRY_VOLUME_RS, CRY_VOLUME_RS); + SetMonData(mon, MON_DATA_SPECIES, &targetSpecies); + FreeAndDestroyMonIconSprite(&gSprites[sPartyMenuBoxes[gPartyMenu.slotId].monSpriteId]); + CreatePartyMonIconSpriteParameterized(targetSpecies, GetMonData(mon, MON_DATA_PERSONALITY, NULL), &sPartyMenuBoxes[gPartyMenu.slotId], 1); + CalculateMonStats(mon); + UpdatePartyMonHeldItemSprite(mon, &sPartyMenuBoxes[gPartyMenu.slotId]); + } +} #undef tState #undef tTargetSpecies @@ -5311,12 +5625,12 @@ u8 GetItemEffectType(u16 item) return ITEM_EFFECT_NONE; // Read the item's effect properties. - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else itemEffect = gItemEffectTable[item - ITEM_POTION]; - if ((itemEffect[0] & (ITEM0_DIRE_HIT | ITEM0_X_ATTACK)) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & ITEM3_GUARD_SPEC)) + if ((itemEffect[0] & ITEM0_DIRE_HIT) || itemEffect[1] || (itemEffect[3] & ITEM3_GUARD_SPEC)) return ITEM_EFFECT_X_ITEM; else if (itemEffect[0] & ITEM0_SACRED_ASH) return ITEM_EFFECT_SACRED_ASH; @@ -5380,10 +5694,10 @@ static void TryTutorSelectedMon(u8 taskId) mon = &gPlayerParty[gPartyMenu.slotId]; move = &gPartyMenu.data1; GetMonNickname(mon, gStringVar1); - gPartyMenu.data1 = GetTutorMove(gSpecialVar_0x8005); + gPartyMenu.data1 = gSpecialVar_0x8005; StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]); move[1] = 2; - switch (CanMonLearnTMTutor(mon, 0, gSpecialVar_0x8005)) + switch (CanTeachMove(mon, gPartyMenu.data1)) { case CANNOT_LEARN_MOVE: DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove); @@ -5600,7 +5914,7 @@ void ChooseMonToGiveMailFromMailbox(void) static void TryGiveMailToSelectedMon(u8 taskId) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; - struct MailStruct *mail; + struct Mail *mail; gPartyMenuUseExitCallback = FALSE; mail = &gSaveBlock1Ptr->mail[gPlayerPCItemPageInfo.itemsAbove + PARTY_SIZE + gPlayerPCItemPageInfo.cursorPos]; @@ -5610,8 +5924,8 @@ static void TryGiveMailToSelectedMon(u8 taskId) } else { - GiveMailToMon2(mon, mail); - ClearMailStruct(mail); + GiveMailToMon(mon, mail); + ClearMail(mail); DisplayPartyMenuMessage(gText_MailTransferredFromMailbox, TRUE); } ScheduleBgCopyTilemapToVram(2); @@ -5782,15 +6096,15 @@ static u8 GetBattleEntryLevelCap(void) case FACILITY_MULTI_OR_EREADER: return MAX_LEVEL; case FACILITY_UNION_ROOM: - return 30; + return UNION_ROOM_MAX_LEVEL; default: // Battle Frontier if (gSpecialVar_0x8004 == FRONTIER_LVL_50) - return 50; - return MAX_LEVEL; + return FRONTIER_MAX_LEVEL_50; + return FRONTIER_MAX_LEVEL_OPEN; } } -static const u8* GetFacilityCancelString(void) +static const u8 *GetFacilityCancelString(void) { u8 facilityNum = VarGet(VAR_FRONTIER_FACILITY); @@ -5819,7 +6133,7 @@ void ChooseMonForWirelessMinigame(void) static u8 GetPartyLayoutFromBattleType(void) { - if (IsDoubleBattle() == FALSE) + if (!IsDoubleBattle() || gPlayerPartyCount == 1) // Draw the single layout in a double battle where the player has only one pokemon. return PARTY_LAYOUT_SINGLE; if (IsMultiBattle() == TRUE) return PARTY_LAYOUT_MULTI; @@ -5972,7 +6286,7 @@ static void BufferBattlePartyOrder(u8 *partyBattleOrder, u8 flankId) void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId) { - BufferBattlePartyOrderBySide(gBattleStruct->field_60[battlerId], flankId, battlerId); + BufferBattlePartyOrderBySide(gBattleStruct->battlerPartyOrders[battlerId], flankId, battlerId); } // when GetBattlerSide(battlerId) == B_SIDE_PLAYER, this function is identical the one above @@ -6052,8 +6366,8 @@ void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2) if (IsMultiBattle()) { - partyBattleOrder = gBattleStruct->field_60[battlerId]; - for (i = j = 0; i < 3; j++, i++) + partyBattleOrder = gBattleStruct->battlerPartyOrders[battlerId]; + for (i = j = 0; i < PARTY_SIZE / 2; j++, i++) { partyIds[j] = partyBattleOrder[i] >> 4; j++; @@ -6189,7 +6503,7 @@ static void Task_InitMultiPartnerPartySlideIn(u8 taskId) // The first slide step also sets the sprites offscreen gTasks[taskId].tXPos = 256; SlideMultiPartyMenuBoxSpritesOneStep(taskId); - ChangeBgX(2, 0x10000, 0); + ChangeBgX(2, 0x10000, BG_COORD_SET); gTasks[taskId].func = Task_MultiPartnerPartySlideIn; } @@ -6235,7 +6549,7 @@ static void SlideMultiPartyMenuBoxSpritesOneStep(u8 taskId) s16 *data = gTasks[taskId].data; u8 i; - for (i = 3; i < PARTY_SIZE; i++) + for (i = MULTI_PARTY_SIZE; i < PARTY_SIZE; i++) { if (gMultiPartnerParty[i - MULTI_PARTY_SIZE].species != SPECIES_NONE) { @@ -6245,7 +6559,7 @@ static void SlideMultiPartyMenuBoxSpritesOneStep(u8 taskId) MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].statusSpriteId, tXPos - 8); } } - ChangeBgX(2, 0x800, 1); + ChangeBgX(2, 0x800, BG_COORD_ADD); } #undef tXpos @@ -6266,7 +6580,7 @@ static void BufferMonSelection(void) { gSpecialVar_0x8004 = GetCursorSelectionMonId(); if (gSpecialVar_0x8004 >= PARTY_SIZE) - gSpecialVar_0x8004 = 0xFF; + gSpecialVar_0x8004 = PARTY_NOTHING_CHOSEN; gFieldCallback2 = CB2_FadeFromPartyMenu; SetMainCallback2(CB2_ReturnToField); } @@ -6283,14 +6597,14 @@ static void Task_PartyMenuWaitForFade(u8 taskId) if (IsWeatherNotFadingIn()) { DestroyTask(taskId); - ScriptContext2_Disable(); - EnableBothScriptContexts(); + UnlockPlayerFieldControls(); + ScriptContext_Enable(); } } void ChooseContestMon(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FadeScreen(FADE_TO_BLACK, 0); CreateTask(Task_ChooseContestMon, 10); } @@ -6309,7 +6623,7 @@ static void CB2_ChooseContestMon(void) { gContestMonPartyIndex = GetCursorSelectionMonId(); if (gContestMonPartyIndex >= PARTY_SIZE) - gContestMonPartyIndex = 0xFF; + gContestMonPartyIndex = PARTY_NOTHING_CHOSEN; gSpecialVar_0x8004 = gContestMonPartyIndex; gFieldCallback2 = CB2_FadeFromPartyMenu; SetMainCallback2(CB2_ReturnToField); @@ -6318,7 +6632,7 @@ static void CB2_ChooseContestMon(void) // Used as a script special for showing a party mon to various npcs (e.g. in-game trades, move deleter) void ChoosePartyMon(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FadeScreen(FADE_TO_BLACK, 0); CreateTask(Task_ChoosePartyMon, 10); } @@ -6335,7 +6649,7 @@ static void Task_ChoosePartyMon(u8 taskId) void ChooseMonForMoveRelearner(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FadeScreen(FADE_TO_BLACK, 0); CreateTask(Task_ChooseMonForMoveRelearner, 10); } @@ -6354,7 +6668,7 @@ static void CB2_ChooseMonForMoveRelearner(void) { gSpecialVar_0x8004 = GetCursorSelectionMonId(); if (gSpecialVar_0x8004 >= PARTY_SIZE) - gSpecialVar_0x8004 = 0xFF; + gSpecialVar_0x8004 = PARTY_NOTHING_CHOSEN; else gSpecialVar_0x8005 = GetNumberOfRelearnableMoves(&gPlayerParty[gSpecialVar_0x8004]); gFieldCallback2 = CB2_FadeFromPartyMenu; @@ -6380,7 +6694,7 @@ void DoBattlePyramidMonsHaveHeldItem(void) // The player can then select to toss items from the bag or take/toss held items from the party void BattlePyramidChooseMonHeldItems(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FadeScreen(FADE_TO_BLACK, 0); CreateTask(Task_BattlePyramidChooseMonHeldItems, 10); } diff --git a/src/player_pc.c b/src/player_pc.c index 301b8c3620..9ec36d61d2 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -97,84 +97,84 @@ struct ItemStorageMenu u8 swapLineSpriteIds[SWAP_LINE_LENGTH]; }; -static void InitPlayerPCMenu(u8 taskId); -static void PlayerPCProcessMenuInput(u8 taskId); -static void InitItemStorageMenu(u8 taskId, u8 var); +static void InitPlayerPCMenu(u8); +static void PlayerPCProcessMenuInput(u8); +static void InitItemStorageMenu(u8, u8); static u8 GetMailboxMailCount(void); static void Mailbox_CompactMailList(void); -static void Mailbox_DrawMailboxMenu(u8 taskId); -static void Mailbox_ProcessInput(u8 taskId); -static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId); +static void Mailbox_DrawMailboxMenu(u8); +static void Mailbox_ProcessInput(u8); +static void Mailbox_PrintWhatToDoWithPlayerMailText(u8); static void Mailbox_ReturnToPlayerPC(u8); -static void Mailbox_PrintMailOptions(u8 taskId); -static void Mailbox_MailOptionsProcessInput(u8 taskId); +static void Mailbox_PrintMailOptions(u8); +static void Mailbox_MailOptionsProcessInput(u8); -static void PlayerPC_ItemStorage(u8 taskId); -static void PlayerPC_Mailbox(u8 taskId); -static void PlayerPC_Decoration(u8 var); -static void PlayerPC_TurnOff(u8 taskId); +static void PlayerPC_ItemStorage(u8); +static void PlayerPC_Mailbox(u8); +static void PlayerPC_Decoration(u8); +static void PlayerPC_TurnOff(u8); -static void Mailbox_DoMailMoveToBag(u8 taskId); -static void Mailbox_DoMailRead(u8 taskId); -static void Mailbox_MoveToBag(u8 taskId); -static void Mailbox_Give(u8 taskId); -static void Mailbox_Cancel(u8 taskId); +static void Mailbox_DoMailMoveToBag(u8); +static void Mailbox_DoMailRead(u8); +static void Mailbox_MoveToBag(u8); +static void Mailbox_Give(u8); +static void Mailbox_Cancel(u8); -static void Mailbox_CancelMoveToBag(u8 taskId); -static void Mailbox_HandleConfirmMoveToBag(u8 taskId); -static void Mailbox_AskConfirmMoveToBag(u8 taskId); -static void Mailbox_DoGiveMailPokeMenu(u8 taskId); -static void Mailbox_NoPokemonForMail(u8 taskId); +static void Mailbox_CancelMoveToBag(u8); +static void Mailbox_HandleConfirmMoveToBag(u8); +static void Mailbox_AskConfirmMoveToBag(u8); +static void Mailbox_DoGiveMailPokeMenu(u8); +static void Mailbox_NoPokemonForMail(u8); -static void Mailbox_FadeAndReadMail(u8 taskId); +static void Mailbox_FadeAndReadMail(u8); static void Mailbox_ReturnToFieldFromReadMail(void); static void Mailbox_ReshowAfterMail(void); -static void Mailbox_HandleReturnToProcessInput(u8 taskId); +static void Mailbox_HandleReturnToProcessInput(u8); static void Mailbox_UpdateMailListAfterDeposit(void); -static void ItemStorage_Withdraw(u8 taskId); -static void ItemStorage_Deposit(u8 taskId); -static void ItemStorage_Toss(u8 taskId); -static void ItemStorage_Exit(u8 taskId); -static void ItemStorage_TossItemYes(u8 taskId); -static void ItemStorage_TossItemNo(u8 taskId); +static void ItemStorage_Withdraw(u8); +static void ItemStorage_Deposit(u8); +static void ItemStorage_Toss(u8); +static void ItemStorage_Exit(u8); +static void ItemStorage_TossItemYes(u8); +static void ItemStorage_TossItemNo(u8); static void ItemStorageMenuPrint(const u8 *); -static void ItemStorageMenuProcessInput(u8 taskId); +static void ItemStorageMenuProcessInput(u8); static void SetPlayerPCListCount(u8); -static void ItemStorage_HandleReturnToProcessInput(u8 taskId); +static void ItemStorage_HandleReturnToProcessInput(u8); -static void ItemStorage_Enter(u8 taskId, bool8 toss); -static void ItemStorage_CreateListMenu(u8 taskId); -static void ItemStorage_ProcessInput(u8 taskId); -static void Task_ItemStorage_Deposit(u8 taskId); +static void ItemStorage_Enter(u8, bool8); +static void ItemStorage_CreateListMenu(u8); +static void ItemStorage_ProcessInput(u8); +static void Task_ItemStorage_Deposit(u8); static void ItemStorage_ReshowAfterBagMenu(void); -static void ItemStorage_DoItemWithdraw(u8 taskId); -static void ItemStorage_DoItemToss(u8 taskid); -static void ItemStorage_HandleQuantityRolling(u8 taskid); -static void ItemStorage_ExitItemList(u8 taskId); -static void ItemStorage_StartItemSwap(u8 taskId); -static void ItemStorage_DoItemAction(u8 taskId); -static void ItemStorage_FinishItemSwap(u8 taskId, bool8 a); -static void ItemStorage_HandleRemoveItem(u8 taskId); -static void ItemStorage_HandleErrorMessageInput(u8 taskId); -static void ItemStorage_ReturnToListInput(u8 taskId); +static void ItemStorage_DoItemWithdraw(u8); +static void ItemStorage_DoItemToss(u8); +static void ItemStorage_HandleQuantityRolling(u8); +static void ItemStorage_ExitItemList(u8); +static void ItemStorage_StartItemSwap(u8); +static void ItemStorage_DoItemAction(u8); +static void ItemStorage_FinishItemSwap(u8, bool8); +static void ItemStorage_HandleRemoveItem(u8); +static void ItemStorage_HandleErrorMessageInput(u8); +static void ItemStorage_ReturnToListInput(u8); -static const u8* ItemStorage_GetMessage(u16); -static void CopyItemName_PlayerPC(u8 *string, u16 itemId); +static const u8 *ItemStorage_GetMessage(u16); +static void CopyItemName_PlayerPC(u8 *, u16); static void ItemStorage_Init(void); -static void ItemStorage_DrawSwapArrow(u8 y, u8, u8 speed); +static void ItemStorage_DrawSwapArrow(u8, u8, u8); static void ItemStorage_RemoveWindow(u8); static void ItemStorage_UpdateSwapLinePos(u8); -static void ItemStorage_ProcessItemSwapInput(u8 taskId); +static void ItemStorage_ProcessItemSwapInput(u8); static void ItemStorage_EraseItemIcon(void); -static void ItemStorage_DrawItemIcon(u16 itemId); -static void ItemStorage_PrintDescription(s32 id); -static void ItemStorage_EraseMainMenu(u8 taskId); -static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu * thisMenu); -static void ItemStorage_PrintMenuItem(u8 windowId, u32 id, u8 yOffset); +static void ItemStorage_DrawItemIcon(u16); +static void ItemStorage_PrintDescription(s32); +static void ItemStorage_EraseMainMenu(u8); +static void ItemStorage_MoveCursor(s32, bool8, struct ListMenu *); +static void ItemStorage_PrintMenuItem(u8, u32, u8); static EWRAM_DATA const u8 *sTopMenuOptionOrder = NULL; static EWRAM_DATA u8 sTopMenuNumOptions = 0; @@ -291,7 +291,7 @@ static const struct ListMenuTemplate sListMenuTemplate_ItemStorage = .lettersSpacing = FALSE, .itemVerticalPadding = 0, .scrollMultiple = FALSE, - .fontId = 7 + .fontId = FONT_NARROW }; static const struct WindowTemplate sWindowTemplates_ItemStorage[ITEMPC_WIN_COUNT] = @@ -396,11 +396,11 @@ static void InitPlayerPCMenu(u8 taskId) else // Bedroom PC windowTemplate = sWindowTemplates_MainMenus[WIN_MAIN_MENU_BEDROOM]; - windowTemplate.width = sub_81DB3D8(sPlayerPCMenuActions, sTopMenuOptionOrder, sTopMenuNumOptions); + windowTemplate.width = GetMaxWidthInSubsetOfMenuTable(sPlayerPCMenuActions, sTopMenuOptionOrder, sTopMenuNumOptions); tWindowId = AddWindow(&windowTemplate); - SetStandardWindowBorderStyle(tWindowId, 0); - sub_81995E4(tWindowId, sTopMenuNumOptions, sPlayerPCMenuActions, sTopMenuOptionOrder); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(tWindowId, sTopMenuNumOptions, 0); + SetStandardWindowBorderStyle(tWindowId, FALSE); + PrintMenuActionTextsInUpperLeftCorner(tWindowId, sTopMenuNumOptions, sPlayerPCMenuActions, sTopMenuOptionOrder); + InitMenuInUpperLeftCornerNormal(tWindowId, sTopMenuNumOptions, 0); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].func = PlayerPCProcessMenuInput; } @@ -467,11 +467,11 @@ static void PlayerPC_Mailbox(u8 taskId) SetPlayerPCListCount(taskId); if (MailboxMenu_Alloc(gPlayerPCItemPageInfo.count) == TRUE) { - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); Mailbox_DrawMailboxMenu(taskId); gTasks[taskId].func = Mailbox_ProcessInput; } - else + else { // Alloc failed, exit Mailbox DisplayItemMessageOnField(taskId, gText_NoMailHere, ReshowPlayerPC); @@ -489,13 +489,13 @@ static void PlayerPC_TurnOff(u8 taskId) if (sTopMenuNumOptions == NUM_BEDROOM_PC_OPTIONS) // Flimsy way to determine if Bedroom PC is in use { if (gSaveBlock2Ptr->playerGender == MALE) - ScriptContext1_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC); + ScriptContext_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC); else - ScriptContext1_SetupScript(LittlerootTown_MaysHouse_2F_EventScript_TurnOffPlayerPC); + ScriptContext_SetupScript(LittlerootTown_MaysHouse_2F_EventScript_TurnOffPlayerPC); } else { - EnableBothScriptContexts(); + ScriptContext_Enable(); } DestroyTask(taskId); } @@ -509,17 +509,17 @@ static void InitItemStorageMenu(u8 taskId, u8 var) windowTemplate = sWindowTemplates_MainMenus[WIN_ITEM_STORAGE_MENU]; windowTemplate.width = GetMaxWidthInMenuTable(sItemStorage_MenuActions, ARRAY_COUNT(sItemStorage_MenuActions)); tWindowId = AddWindow(&windowTemplate); - SetStandardWindowBorderStyle(tWindowId, 0); + SetStandardWindowBorderStyle(tWindowId, FALSE); PrintMenuTable(tWindowId, ARRAY_COUNT(sItemStorage_MenuActions), sItemStorage_MenuActions); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(tWindowId, 4, var); + InitMenuInUpperLeftCornerNormal(tWindowId, ARRAY_COUNT(sItemStorage_MenuActions), var); ScheduleBgCopyTilemapToVram(0); ItemStorageMenuPrint(sItemStorage_OptionDescriptions[var]); } static void ItemStorageMenuPrint(const u8 *textPtr) { - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized(0, 1, textPtr, 0, 1, 0, 0); + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized(0, FONT_NORMAL, textPtr, 0, 1, 0, 0); } static void ItemStorageMenuProcessInput(u8 taskId) @@ -572,7 +572,7 @@ void CB2_PlayerPCExitBagMenu(void) static void ItemStorage_ReshowAfterBagMenu(void) { LoadMessageBoxAndBorderGfx(); - DrawDialogueFrame(0, 1); + DrawDialogueFrame(0, TRUE); InitItemStorageMenu(CreateTask(ItemStorage_HandleReturnToProcessInput, 0), 1); FadeInFromBlack(); } @@ -588,7 +588,7 @@ static void ItemStorage_Withdraw(u8 taskId) s16 *data = gTasks[taskId].data; tUsedSlots = CountUsedPCItemSlots(); - if (tUsedSlots != 0) + if (tUsedSlots != 0) { ItemStorage_Enter(taskId, FALSE); } @@ -632,7 +632,7 @@ static void ItemStorage_Enter(u8 taskId, bool8 toss) FreeAndReserveObjectSpritePalettes(); LoadListMenuSwapLineGfx(); CreateSwapLineSprites(sItemStorageMenu->swapLineSpriteIds, SWAP_LINE_LENGTH); - ClearDialogWindowAndFrame(0,0); + ClearDialogWindowAndFrame(0, FALSE); gTasks[taskId].func = ItemStorage_CreateListMenu; } @@ -674,7 +674,7 @@ static u8 GetMailboxMailCount(void) static void Mailbox_CompactMailList(void) { - struct MailStruct temp; + struct Mail temp; u8 i, j; for (i = PARTY_SIZE; i < MAIL_COUNT - 1; i++) @@ -691,7 +691,7 @@ static void Mailbox_DrawMailboxMenu(u8 taskId) { u8 windowId = MailboxMenu_AddWindow(MAILBOXWIN_TITLE); MailboxMenu_AddWindow(MAILBOXWIN_LIST); - AddTextPrinterParameterized(windowId, 1, gText_Mailbox, GetStringCenterAlignXOffset(1, gText_Mailbox, 0x40), 1, 0, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_Mailbox, GetStringCenterAlignXOffset(FONT_NORMAL, gText_Mailbox, 0x40), 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].tListTaskId = MailboxMenu_CreateList(&gPlayerPCItemPageInfo); MailboxMenu_AddScrollArrows(&gPlayerPCItemPageInfo); @@ -753,7 +753,7 @@ static void Mailbox_PrintMailOptions(u8 taskId) { u8 windowId = MailboxMenu_AddWindow(MAILBOXWIN_OPTIONS); PrintMenuTable(windowId, ARRAY_COUNT(gMailboxMailOptions), gMailboxMailOptions); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, 4, 0); + InitMenuInUpperLeftCornerNormal(windowId, ARRAY_COUNT(gMailboxMailOptions), 0); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].func = Mailbox_MailOptionsProcessInput; } @@ -850,7 +850,7 @@ static void Mailbox_HandleConfirmMoveToBag(u8 taskId) static void Mailbox_DoMailMoveToBag(u8 taskId) { - struct MailStruct *mail = &gSaveBlock1Ptr->mail[gPlayerPCItemPageInfo.itemsAbove + PARTY_SIZE + gPlayerPCItemPageInfo.cursorPos]; + struct Mail *mail = &gSaveBlock1Ptr->mail[gPlayerPCItemPageInfo.itemsAbove + PARTY_SIZE + gPlayerPCItemPageInfo.cursorPos]; if (!AddBagItem(mail->itemId, 1)) { DisplayItemMessageOnField(taskId, gText_BagIsFull, Mailbox_Cancel); @@ -858,7 +858,7 @@ static void Mailbox_DoMailMoveToBag(u8 taskId) else { DisplayItemMessageOnField(taskId, gText_MailToBagMessageErased, Mailbox_Cancel); - ClearMailStruct(mail); + ClearMail(mail); Mailbox_CompactMailList(); gPlayerPCItemPageInfo.count--; if (gPlayerPCItemPageInfo.count < (gPlayerPCItemPageInfo.pageItems + gPlayerPCItemPageInfo.itemsAbove) && gPlayerPCItemPageInfo.itemsAbove != 0) @@ -928,7 +928,7 @@ static void Mailbox_NoPokemonForMail(u8 taskId) static void Mailbox_Cancel(u8 taskId) { MailboxMenu_RemoveWindow(MAILBOXWIN_OPTIONS); - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); Mailbox_DrawMailboxMenu(taskId); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].func = Mailbox_ProcessInput; @@ -986,7 +986,7 @@ void ItemStorage_RefreshListMenu(void) sItemStorageMenu->listItems[i].name = &sItemStorageMenu->itemNames[i][0]; sItemStorageMenu->listItems[i].id = i; } - + // Set up Cancel entry StringCopy(&sItemStorageMenu->itemNames[i][0], gText_Cancel2); sItemStorageMenu->listItems[i].name = &sItemStorageMenu->itemNames[i][0]; @@ -1027,19 +1027,19 @@ static void ItemStorage_PrintMenuItem(u8 windowId, u32 id, u8 yOffset) if (sItemStorageMenu->toSwapPos != NOT_SWAPPING) { if (sItemStorageMenu->toSwapPos == (u8)id) - ItemStorage_DrawSwapArrow(yOffset, 0, TEXT_SPEED_FF); + ItemStorage_DrawSwapArrow(yOffset, 0, TEXT_SKIP_DRAW); else - ItemStorage_DrawSwapArrow(yOffset, 0xFF, TEXT_SPEED_FF); + ItemStorage_DrawSwapArrow(yOffset, 0xFF, TEXT_SKIP_DRAW); } ConvertIntToDecimalStringN(gStringVar1, gSaveBlock1Ptr->pcItems[id].quantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_xVar1); - AddTextPrinterParameterized(windowId, 7, gStringVar4, GetStringRightAlignXOffset(7, gStringVar4, 104), yOffset, 0xFF, NULL); + AddTextPrinterParameterized(windowId, FONT_NARROW, gStringVar4, GetStringRightAlignXOffset(FONT_NARROW, gStringVar4, 104), yOffset, TEXT_SKIP_DRAW, NULL); } } static void ItemStorage_PrintDescription(s32 id) { - const u8* description; + const u8 *description; u8 windowId = sItemStorageMenu->windowIds[ITEMPC_WIN_MESSAGE]; // Get item description (or Cancel text) @@ -1049,16 +1049,16 @@ static void ItemStorage_PrintDescription(s32 id) description = ItemStorage_GetMessage(MSG_GO_BACK_TO_PREV); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - AddTextPrinterParameterized(windowId, 1, description, 0, 1, 0, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, description, 0, 1, 0, NULL); } static void ItemStorage_AddScrollIndicator(void) { if (gPlayerPCItemPageInfo.scrollIndicatorTaskId == TASK_NONE) - gPlayerPCItemPageInfo.scrollIndicatorTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 176, 12, 148, - gPlayerPCItemPageInfo.count - gPlayerPCItemPageInfo.pageItems, - TAG_SCROLL_ARROW, - TAG_SCROLL_ARROW, + gPlayerPCItemPageInfo.scrollIndicatorTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 176, 12, 148, + gPlayerPCItemPageInfo.count - gPlayerPCItemPageInfo.pageItems, + TAG_SCROLL_ARROW, + TAG_SCROLL_ARROW, &gPlayerPCItemPageInfo.itemsAbove); } @@ -1080,15 +1080,15 @@ static void ItemStorage_DrawSwapArrow(u8 y, u8 b, u8 speed) { u8 windowId = sItemStorageMenu->windowIds[ITEMPC_WIN_LIST]; if (b == 0xFF) - FillWindowPixelRect(windowId, PIXEL_FILL(1), 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1)); + FillWindowPixelRect(windowId, PIXEL_FILL(1), 0, y, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), GetMenuCursorDimensionByFont(FONT_NORMAL, 1)); else - AddTextPrinterParameterized4(windowId, 1, 0, y, 0, 0, sSwapArrowTextColors, speed, gText_SelectorArrow2); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, y, 0, 0, sSwapArrowTextColors, speed, gText_SelectorArrow2); } static void ItemStorage_DrawItemIcon(u16 itemId) { u8 spriteId; - u8* spriteIdLoc = &sItemStorageMenu->spriteId; + u8 *spriteIdLoc = &sItemStorageMenu->spriteId; if (*spriteIdLoc == SPRITE_NONE) { @@ -1107,7 +1107,7 @@ static void ItemStorage_DrawItemIcon(u16 itemId) static void ItemStorage_EraseItemIcon(void) { - u8* spriteIdLoc = &sItemStorageMenu->spriteId; + u8 *spriteIdLoc = &sItemStorageMenu->spriteId; if (*spriteIdLoc != SPRITE_NONE) { FreeSpriteTilesByTag(TAG_ITEM_ICON); @@ -1133,7 +1133,7 @@ static void ItemStorage_CreateListMenu(u8 taskId) s16 *data; bool32 toss; u32 i, x; - const u8* text; + const u8 *text; data = gTasks[taskId].data; for (i = 0; i <= ITEMPC_WIN_LIST_END; i++) @@ -1142,9 +1142,9 @@ static void ItemStorage_CreateListMenu(u8 taskId) text = gText_TossItem; if (!toss) text = gText_WithdrawItem; - x = GetStringCenterAlignXOffset(1, text, 104); - AddTextPrinterParameterized(sItemStorageMenu->windowIds[ITEMPC_WIN_TITLE], 1, text, x, 1, 0, NULL); - CopyWindowToVram(sItemStorageMenu->windowIds[ITEMPC_WIN_ICON], 2); + x = GetStringCenterAlignXOffset(FONT_NORMAL, text, 104); + AddTextPrinterParameterized(sItemStorageMenu->windowIds[ITEMPC_WIN_TITLE], FONT_NORMAL, text, x, 1, 0, NULL); + CopyWindowToVram(sItemStorageMenu->windowIds[ITEMPC_WIN_ICON], COPYWIN_GFX); ItemStorage_CompactList(); ItemStorage_CompactCursor(); ItemStorage_RefreshListMenu(); @@ -1154,7 +1154,7 @@ static void ItemStorage_CreateListMenu(u8 taskId) gTasks[taskId].func = ItemStorage_ProcessInput; } -static const u8* ItemStorage_GetMessage(u16 itemId) +static const u8 *ItemStorage_GetMessage(u16 itemId) { const u8 *string; @@ -1199,7 +1199,7 @@ static void ItemStorage_PrintMessage(const u8 *string) u8 windowId = sItemStorageMenu->windowIds[ITEMPC_WIN_MESSAGE]; FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); StringExpandPlaceholders(gStringVar4, string); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 0, 1, 0, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); } // Process input while on the item storage's item list @@ -1241,8 +1241,8 @@ static void ItemStorage_ReturnToMenuSelect(u8 taskId) s16 *data = gTasks[taskId].data; if (!IsDma3ManagerBusyWithBgCopy()) { - DrawDialogueFrame(0, 0); - + DrawDialogueFrame(0, FALSE); + // Select Withdraw/Toss by default depending on which was just exited if (!tInTossMenu) InitItemStorageMenu(taskId, MENU_WITHDRAW); @@ -1338,7 +1338,7 @@ static void ItemStorage_PrintItemQuantity(u8 windowId, u16 value, u32 mode, u8 x { ConvertIntToDecimalStringN(gStringVar1, value, mode, n); StringExpandPlaceholders(gStringVar4, gText_xVar1); - AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 48), y, 0, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 48), y, 0, NULL); } // Start an item Withdraw/Toss @@ -1370,7 +1370,7 @@ static void ItemStorage_DoItemAction(u8 taskId) ItemStorage_DoItemToss(taskId); return; } - + // Tossing multiple items, show "how many" message CopyItemName(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1); ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_HOW_MANY_TO_TOSS)); diff --git a/src/pokeball.c b/src/pokeball.c index 52d47b5347..0f893eda2e 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -15,9 +15,6 @@ #include "data.h" #include "constants/songs.h" -extern struct MusicPlayerInfo gMPlayInfo_BGM; - -// this file's functions static void Task_DoPokeballSendOutAnim(u8 taskId); static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite); static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite); @@ -47,49 +44,94 @@ static u16 GetBattlerPokeballItemId(u8 battlerId); // rom const data -#define GFX_TAG_POKEBALL 55000 -#define GFX_TAG_GREATBALL 55001 -#define GFX_TAG_SAFARIBALL 55002 -#define GFX_TAG_ULTRABALL 55003 -#define GFX_TAG_MASTERBALL 55004 -#define GFX_TAG_NETBALL 55005 -#define GFX_TAG_DIVEBALL 55006 -#define GFX_TAG_NESTBALL 55007 -#define GFX_TAG_REPEATBALL 55008 -#define GFX_TAG_TIMERBALL 55009 -#define GFX_TAG_LUXURYBALL 55010 -#define GFX_TAG_PREMIERBALL 55011 +#define GFX_TAG_POKE_BALL 55000 +#define GFX_TAG_GREAT_BALL 55001 +#define GFX_TAG_ULTRA_BALL 55002 +#define GFX_TAG_MASTER_BALL 55003 +#define GFX_TAG_PREMIER_BALL 55004 +#define GFX_TAG_HEAL_BALL 55005 +#define GFX_TAG_NET_BALL 55006 +#define GFX_TAG_NEST_BALL 55007 +#define GFX_TAG_DIVE_BALL 55008 +#define GFX_TAG_DUSK_BALL 55009 +#define GFX_TAG_TIMER_BALL 55010 +#define GFX_TAG_QUICK_BALL 55011 +#define GFX_TAG_REPEAT_BALL 55012 +#define GFX_TAG_LUXURY_BALL 55013 +#define GFX_TAG_LEVEL_BALL 55014 +#define GFX_TAG_LURE_BALL 55015 +#define GFX_TAG_MOON_BALL 55016 +#define GFX_TAG_FRIEND_BALL 55017 +#define GFX_TAG_LOVE_BALL 55018 +#define GFX_TAG_FAST_BALL 55019 +#define GFX_TAG_HEAVY_BALL 55020 +#define GFX_TAG_DREAM_BALL 55021 +#define GFX_TAG_SAFARI_BALL 55022 +#define GFX_TAG_SPORT_BALL 55023 +#define GFX_TAG_PARK_BALL 55024 +#define GFX_TAG_BEAST_BALL 55025 +#define GFX_TAG_CHERISH_BALL 55026 const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT] = { - [BALL_POKE] = {gInterfaceGfx_PokeBall, 384, GFX_TAG_POKEBALL}, - [BALL_GREAT] = {gInterfaceGfx_GreatBall, 384, GFX_TAG_GREATBALL}, - [BALL_SAFARI] = {gInterfaceGfx_SafariBall, 384, GFX_TAG_SAFARIBALL}, - [BALL_ULTRA] = {gInterfaceGfx_UltraBall, 384, GFX_TAG_ULTRABALL}, - [BALL_MASTER] = {gInterfaceGfx_MasterBall, 384, GFX_TAG_MASTERBALL}, - [BALL_NET] = {gInterfaceGfx_NetBall, 384, GFX_TAG_NETBALL}, - [BALL_DIVE] = {gInterfaceGfx_DiveBall, 384, GFX_TAG_DIVEBALL}, - [BALL_NEST] = {gInterfaceGfx_NestBall, 384, GFX_TAG_NESTBALL}, - [BALL_REPEAT] = {gInterfaceGfx_RepeatBall, 384, GFX_TAG_REPEATBALL}, - [BALL_TIMER] = {gInterfaceGfx_TimerBall, 384, GFX_TAG_TIMERBALL}, - [BALL_LUXURY] = {gInterfaceGfx_LuxuryBall, 384, GFX_TAG_LUXURYBALL}, - [BALL_PREMIER] = {gInterfaceGfx_PremierBall, 384, GFX_TAG_PREMIERBALL}, + [BALL_POKE] = {gBallGfx_Poke, 384, GFX_TAG_POKE_BALL}, + [BALL_GREAT] = {gBallGfx_Great, 384, GFX_TAG_GREAT_BALL}, + [BALL_ULTRA] = {gBallGfx_Ultra, 384, GFX_TAG_ULTRA_BALL}, + [BALL_MASTER] = {gBallGfx_Master, 384, GFX_TAG_MASTER_BALL}, + [BALL_PREMIER] = {gBallGfx_Premier, 384, GFX_TAG_PREMIER_BALL}, + [BALL_HEAL] = {gBallGfx_Heal, 384, GFX_TAG_HEAL_BALL}, + [BALL_NET] = {gBallGfx_Net, 384, GFX_TAG_NET_BALL}, + [BALL_NEST] = {gBallGfx_Nest, 384, GFX_TAG_NEST_BALL}, + [BALL_DIVE] = {gBallGfx_Dive, 384, GFX_TAG_DIVE_BALL}, + [BALL_DUSK] = {gBallGfx_Dusk, 384, GFX_TAG_DUSK_BALL}, + [BALL_TIMER] = {gBallGfx_Timer, 384, GFX_TAG_TIMER_BALL}, + [BALL_QUICK] = {gBallGfx_Quick, 384, GFX_TAG_QUICK_BALL}, + [BALL_REPEAT] = {gBallGfx_Repeat, 384, GFX_TAG_REPEAT_BALL}, + [BALL_LUXURY] = {gBallGfx_Luxury, 384, GFX_TAG_LUXURY_BALL}, + [BALL_LEVEL] = {gBallGfx_Level, 384, GFX_TAG_LEVEL_BALL}, + [BALL_LURE] = {gBallGfx_Lure, 384, GFX_TAG_LURE_BALL}, + [BALL_MOON] = {gBallGfx_Moon, 384, GFX_TAG_MOON_BALL}, + [BALL_FRIEND] = {gBallGfx_Friend, 384, GFX_TAG_FRIEND_BALL}, + [BALL_LOVE] = {gBallGfx_Love, 384, GFX_TAG_LOVE_BALL}, + [BALL_FAST] = {gBallGfx_Fast, 384, GFX_TAG_FAST_BALL}, + [BALL_HEAVY] = {gBallGfx_Heavy, 384, GFX_TAG_HEAVY_BALL}, + [BALL_DREAM] = {gBallGfx_Dream, 384, GFX_TAG_DREAM_BALL}, + [BALL_SAFARI] = {gBallGfx_Safari, 384, GFX_TAG_SAFARI_BALL}, + [BALL_SPORT] = {gBallGfx_Sport, 384, GFX_TAG_SPORT_BALL}, + [BALL_PARK] = {gBallGfx_Park, 384, GFX_TAG_PARK_BALL}, + [BALL_BEAST] = {gBallGfx_Beast, 384, GFX_TAG_BEAST_BALL}, + [BALL_CHERISH] = {gBallGfx_Cherish, 384, GFX_TAG_CHERISH_BALL}, }; const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] = { - [BALL_POKE] = {gInterfacePal_PokeBall, GFX_TAG_POKEBALL}, - [BALL_GREAT] = {gInterfacePal_GreatBall, GFX_TAG_GREATBALL}, - [BALL_SAFARI] = {gInterfacePal_SafariBall, GFX_TAG_SAFARIBALL}, - [BALL_ULTRA] = {gInterfacePal_UltraBall, GFX_TAG_ULTRABALL}, - [BALL_MASTER] = {gInterfacePal_MasterBall, GFX_TAG_MASTERBALL}, - [BALL_NET] = {gInterfacePal_NetBall, GFX_TAG_NETBALL}, - [BALL_DIVE] = {gInterfacePal_DiveBall, GFX_TAG_DIVEBALL}, - [BALL_NEST] = {gInterfacePal_NestBall, GFX_TAG_NESTBALL}, - [BALL_REPEAT] = {gInterfacePal_RepeatBall, GFX_TAG_REPEATBALL}, - [BALL_TIMER] = {gInterfacePal_TimerBall, GFX_TAG_TIMERBALL}, - [BALL_LUXURY] = {gInterfacePal_LuxuryBall, GFX_TAG_LUXURYBALL}, - [BALL_PREMIER] = {gInterfacePal_PremierBall, GFX_TAG_PREMIERBALL}, + [BALL_POKE] = {gBallPal_Poke, GFX_TAG_POKE_BALL}, + [BALL_GREAT] = {gBallPal_Great, GFX_TAG_GREAT_BALL}, + [BALL_ULTRA] = {gBallPal_Ultra, GFX_TAG_ULTRA_BALL}, + [BALL_MASTER] = {gBallPal_Master, GFX_TAG_MASTER_BALL}, + [BALL_PREMIER] = {gBallPal_Premier, GFX_TAG_PREMIER_BALL}, + [BALL_HEAL] = {gBallPal_Heal, GFX_TAG_HEAL_BALL}, + [BALL_NET] = {gBallPal_Net, GFX_TAG_NET_BALL}, + [BALL_NEST] = {gBallPal_Nest, GFX_TAG_NEST_BALL}, + [BALL_DIVE] = {gBallPal_Dive, GFX_TAG_DIVE_BALL}, + [BALL_DUSK] = {gBallPal_Dusk, GFX_TAG_DUSK_BALL}, + [BALL_TIMER] = {gBallPal_Timer, GFX_TAG_TIMER_BALL}, + [BALL_QUICK] = {gBallPal_Quick, GFX_TAG_QUICK_BALL}, + [BALL_REPEAT] = {gBallPal_Repeat, GFX_TAG_REPEAT_BALL}, + [BALL_LUXURY] = {gBallPal_Luxury, GFX_TAG_LUXURY_BALL}, + [BALL_LEVEL] = {gBallPal_Level, GFX_TAG_LEVEL_BALL}, + [BALL_LURE] = {gBallPal_Lure, GFX_TAG_LURE_BALL}, + [BALL_MOON] = {gBallPal_Moon, GFX_TAG_MOON_BALL}, + [BALL_FRIEND] = {gBallPal_Friend, GFX_TAG_FRIEND_BALL}, + [BALL_LOVE] = {gBallPal_Love, GFX_TAG_LOVE_BALL}, + [BALL_FAST] = {gBallPal_Fast, GFX_TAG_FAST_BALL}, + [BALL_HEAVY] = {gBallPal_Heavy, GFX_TAG_HEAVY_BALL}, + [BALL_DREAM] = {gBallPal_Dream, GFX_TAG_DREAM_BALL}, + [BALL_SAFARI] = {gBallPal_Safari, GFX_TAG_SAFARI_BALL}, + [BALL_SPORT] = {gBallPal_Sport, GFX_TAG_SPORT_BALL}, + [BALL_PARK] = {gBallPal_Park, GFX_TAG_PARK_BALL}, + [BALL_BEAST] = {gBallPal_Beast, GFX_TAG_BEAST_BALL}, + [BALL_CHERISH] = {gBallPal_Cherish, GFX_TAG_CHERISH_BALL}, }; static const struct OamData sBallOamData = @@ -97,7 +139,7 @@ static const struct OamData sBallOamData = .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -207,108 +249,270 @@ static const union AffineAnimCmd *const sAffineAnim_BallRotate[] = const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] = { + [BALL_POKE] = { - .tileTag = GFX_TAG_POKEBALL, - .paletteTag = GFX_TAG_POKEBALL, + .tileTag = GFX_TAG_POKE_BALL, + .paletteTag = GFX_TAG_POKE_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_GREAT] = { - .tileTag = GFX_TAG_GREATBALL, - .paletteTag = GFX_TAG_GREATBALL, + .tileTag = GFX_TAG_GREAT_BALL, + .paletteTag = GFX_TAG_GREAT_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_ULTRA] = { - .tileTag = GFX_TAG_SAFARIBALL, - .paletteTag = GFX_TAG_SAFARIBALL, + .tileTag = GFX_TAG_ULTRA_BALL, + .paletteTag = GFX_TAG_ULTRA_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_MASTER] = { - .tileTag = GFX_TAG_ULTRABALL, - .paletteTag = GFX_TAG_ULTRABALL, + .tileTag = GFX_TAG_MASTER_BALL, + .paletteTag = GFX_TAG_MASTER_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_PREMIER] = { - .tileTag = GFX_TAG_MASTERBALL, - .paletteTag = GFX_TAG_MASTERBALL, + .tileTag = GFX_TAG_PREMIER_BALL, + .paletteTag = GFX_TAG_PREMIER_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_HEAL] = { - .tileTag = GFX_TAG_NETBALL, - .paletteTag = GFX_TAG_NETBALL, + .tileTag = GFX_TAG_HEAL_BALL, + .paletteTag = GFX_TAG_HEAL_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_NET] = { - .tileTag = GFX_TAG_DIVEBALL, - .paletteTag = GFX_TAG_DIVEBALL, + .tileTag = GFX_TAG_NET_BALL, + .paletteTag = GFX_TAG_NET_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_NEST] = { - .tileTag = GFX_TAG_NESTBALL, - .paletteTag = GFX_TAG_NESTBALL, + .tileTag = GFX_TAG_NEST_BALL, + .paletteTag = GFX_TAG_NEST_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_DIVE] = { - .tileTag = GFX_TAG_REPEATBALL, - .paletteTag = GFX_TAG_REPEATBALL, + .tileTag = GFX_TAG_DIVE_BALL, + .paletteTag = GFX_TAG_DIVE_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_DUSK] = { - .tileTag = GFX_TAG_TIMERBALL, - .paletteTag = GFX_TAG_TIMERBALL, + .tileTag = GFX_TAG_DUSK_BALL, + .paletteTag = GFX_TAG_DUSK_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_TIMER] = { - .tileTag = GFX_TAG_LUXURYBALL, - .paletteTag = GFX_TAG_LUXURYBALL, + .tileTag = GFX_TAG_TIMER_BALL, + .paletteTag = GFX_TAG_TIMER_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, .affineAnims = sAffineAnim_BallRotate, .callback = SpriteCB_BallThrow, }, + [BALL_QUICK] = { - .tileTag = GFX_TAG_PREMIERBALL, - .paletteTag = GFX_TAG_PREMIERBALL, + .tileTag = GFX_TAG_QUICK_BALL, + .paletteTag = GFX_TAG_QUICK_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_REPEAT] = + { + .tileTag = GFX_TAG_REPEAT_BALL, + .paletteTag = GFX_TAG_REPEAT_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_LUXURY] = + { + .tileTag = GFX_TAG_LUXURY_BALL, + .paletteTag = GFX_TAG_LUXURY_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_LEVEL] = + { + .tileTag = GFX_TAG_LEVEL_BALL, + .paletteTag = GFX_TAG_LEVEL_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_LURE] = + { + .tileTag = GFX_TAG_LURE_BALL, + .paletteTag = GFX_TAG_LURE_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_MOON] = + { + .tileTag = GFX_TAG_MOON_BALL, + .paletteTag = GFX_TAG_MOON_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_FRIEND] = + { + .tileTag = GFX_TAG_FRIEND_BALL, + .paletteTag = GFX_TAG_FRIEND_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_LOVE] = + { + .tileTag = GFX_TAG_LOVE_BALL, + .paletteTag = GFX_TAG_LOVE_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_FAST] = + { + .tileTag = GFX_TAG_FAST_BALL, + .paletteTag = GFX_TAG_FAST_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_HEAVY] = + { + .tileTag = GFX_TAG_HEAVY_BALL, + .paletteTag = GFX_TAG_HEAVY_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_DREAM] = + { + .tileTag = GFX_TAG_DREAM_BALL, + .paletteTag = GFX_TAG_DREAM_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_SAFARI] = + { + .tileTag = GFX_TAG_SAFARI_BALL, + .paletteTag = GFX_TAG_SAFARI_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_SPORT] = + { + .tileTag = GFX_TAG_SPORT_BALL, + .paletteTag = GFX_TAG_SPORT_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_PARK] = + { + .tileTag = GFX_TAG_PARK_BALL, + .paletteTag = GFX_TAG_PARK_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_BEAST] = + { + .tileTag = GFX_TAG_BEAST_BALL, + .paletteTag = GFX_TAG_BEAST_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, + [BALL_CHERISH] = + { + .tileTag = GFX_TAG_CHERISH_BALL, + .paletteTag = GFX_TAG_CHERISH_BALL, .oam = &sBallOamData, .anims = sBallAnimSequences, .images = NULL, @@ -328,7 +532,7 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) u8 taskId; gDoingBattleAnim = TRUE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = 1; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = TRUE; taskId = CreateTask(Task_DoPokeballSendOutAnim, 5); gTasks[taskId].tPan = pan; @@ -342,11 +546,8 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) static void Task_DoPokeballSendOutAnim(u8 taskId) { - u16 throwCaseId; - u8 battlerId; - u16 itemId, ballId; - u8 ballSpriteId; - bool8 notSendOut = FALSE; + u32 throwCaseId, ballId, battlerId, ballSpriteId; + bool32 notSendOut = FALSE; if (gTasks[taskId].tFrames == 0) { @@ -356,13 +557,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) throwCaseId = gTasks[taskId].tThrowId; battlerId = gTasks[taskId].tBattler; - - if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - itemId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); - else - itemId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); - - ballId = ItemIdToBallId(itemId); + ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId)); LoadBallGfx(ballId); ballSpriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29); gSprites[ballSpriteId].data[0] = 0x80; @@ -398,7 +593,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) } // this will perform an unused ball throw animation - gSprites[ballSpriteId].data[0] = 0x22; + gSprites[ballSpriteId].data[0] = 34; gSprites[ballSpriteId].data[2] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_X); gSprites[ballSpriteId].data[4] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_Y) - 16; gSprites[ballSpriteId].data[5] = -40; @@ -422,14 +617,14 @@ static void SpriteCB_BallThrow(struct Sprite *sprite) u8 noOfShakes = gTasks[taskId].tThrowId; StartSpriteAnim(sprite, 1); - sprite->affineAnimPaused = 1; + sprite->affineAnimPaused = TRUE; sprite->x += sprite->x2; sprite->y += sprite->y2; sprite->x2 = 0; sprite->y2 = 0; sprite->data[5] = 0; ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler)); - AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 0x1C, ballId); + AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId); sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId); sprite->sBattler = opponentBattler; sprite->data[7] = noOfShakes; @@ -466,6 +661,7 @@ static void SpriteCB_BallThrow_ShrinkMon(struct Sprite *sprite) sprite->data[5]++; if (sprite->data[5] == 11) PlaySE(SE_BALL_TRADE); + if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded) { StartSpriteAnim(sprite, 2); @@ -635,6 +831,7 @@ static void SpriteCB_BallThrow_Shake(struct Sprite *sprite) StartSpriteAffineAnim(sprite, 2); else StartSpriteAffineAnim(sprite, 1); + PlaySE(SE_BALL); } break; @@ -644,7 +841,7 @@ static void SpriteCB_BallThrow_Shake(struct Sprite *sprite) #define tCryTaskSpecies data[0] #define tCryTaskPan data[1] #define tCryTaskWantedCry data[2] -#define tCryTaskBattler data[3] +#define tCryTaskBattler data[3] #define tCryTaskMonSpriteId data[4] #define tCryTaskMonPtr1 data[5] #define tCryTaskMonPtr2 data[6] @@ -658,7 +855,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) u16 species = gTasks[taskId].tCryTaskSpecies; u8 battlerId = gTasks[taskId].tCryTaskBattler; u8 monSpriteId = gTasks[taskId].tCryTaskMonSpriteId; - struct Pokemon *mon = (void*)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 16) | (u16)(gTasks[taskId].tCryTaskMonPtr2)); + struct Pokemon *mon = (void *)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 16) | (u16)(gTasks[taskId].tCryTaskMonPtr2)); switch (gTasks[taskId].tCryTaskState) { @@ -668,10 +865,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) gTasks[taskId].tCryTaskState = wantedCry + 1; break; case 1: + // Play single cry if (ShouldPlayNormalMonCry(mon) == TRUE) - PlayCry3(species, pan, 0); + PlayCry_ByMode(species, pan, CRY_MODE_NORMAL); else - PlayCry3(species, pan, 11); + PlayCry_ByMode(species, pan, CRY_MODE_WEAK); gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE; DestroyTask(taskId); break; @@ -683,10 +881,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) case 20: if (gTasks[taskId].tCryTaskFrames == 0) { + // Play first doubles cry if (ShouldPlayNormalMonCry(mon) == TRUE) - PlayCry4(species, pan, 1); + PlayCry_ReleaseDouble(species, pan, CRY_MODE_DOUBLES); else - PlayCry4(species, pan, 12); + PlayCry_ReleaseDouble(species, pan, CRY_MODE_WEAK_DOUBLES); gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE; DestroyTask(taskId); @@ -722,10 +921,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) gTasks[taskId].tCryTaskFrames--; break; } + // Play second doubles cry if (ShouldPlayNormalMonCry(mon) == TRUE) - PlayCry4(species, pan, 0); + PlayCry_ReleaseDouble(species, pan, CRY_MODE_NORMAL); else - PlayCry4(species, pan, 11); + PlayCry_ReleaseDouble(species, pan, CRY_MODE_WEAK); gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE; DestroyTask(taskId); @@ -740,14 +940,13 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) StartSpriteAnim(sprite, 1); ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId)); - AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 0x1C, ballId); + AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId); sprite->data[0] = LaunchBallFadeMonTask(TRUE, sprite->sBattler, 14, ballId); sprite->callback = HandleBallAnimEnd; if (gMain.inBattle) { - struct Pokemon *mon; - u16 species; + struct Pokemon *mon, *illusionMon; s8 pan; u16 wantedCryCase; u8 taskId; @@ -763,7 +962,6 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) pan = -25; } - species = GetMonData(mon, MON_DATA_SPECIES); if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) && IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive) { @@ -774,7 +972,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) } else { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 128); } } @@ -788,7 +986,13 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = TRUE; taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3); - gTasks[taskId].tCryTaskSpecies = species; + + illusionMon = GetIllusionMonPtr(battlerId); + if (illusionMon != NULL) + gTasks[taskId].tCryTaskSpecies = GetMonData(illusionMon, MON_DATA_SPECIES); + else + gTasks[taskId].tCryTaskSpecies = GetMonData(mon, MON_DATA_SPECIES); + gTasks[taskId].tCryTaskPan = pan; gTasks[taskId].tCryTaskWantedCry = wantedCryCase; gTasks[taskId].tCryTaskBattler = battlerId; @@ -801,9 +1005,9 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], BATTLER_AFFINE_EMERGE); if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT) - gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCb_OpponentMonFromBall; + gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCB_OpponentMonFromBall; else - gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCb_PlayerMonFromBall; + gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCB_PlayerMonFromBall; AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000; @@ -852,13 +1056,13 @@ static void HandleBallAnimEnd(struct Sprite *sprite) gSprites[gBattlerSpriteIds[battlerId]].y2 = 0; gDoingBattleAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = FALSE; FreeSpriteOamMatrix(sprite); DestroySprite(sprite); for (doneBattlers = 0, i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == 0) + if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == FALSE) doneBattlers++; } if (doneBattlers == MAX_BATTLERS_COUNT) @@ -890,15 +1094,15 @@ static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite) DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); DestroySpriteAndFreeResources(sprite); if (gMain.inBattle) - gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = FALSE; } } static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite) { sprite->data[0] = 25; - sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, 2); - sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, 3) + 24; + sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_Y_PIC_OFFSET) + 24; sprite->data[5] = -30; sprite->oam.affineParam = sprite->sBattler; InitAnimArcTranslation(sprite); @@ -988,37 +1192,50 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite) #undef sBattler -static u8 AnimateBallOpenParticlesForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d) +static u8 AnimateBallOpenParticlesForPokeball(u8 x, u8 y, u8 kindOfStars, u8 subpriority) { - return AnimateBallOpenParticles(x, y, kindOfStars, d, BALL_POKE); + return AnimateBallOpenParticles(x, y, kindOfStars, subpriority, BALL_POKE); } -static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2) +static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 spritePalNum, u32 selectedPalettes) { - return LaunchBallFadeMonTask(unFadeLater, battlerId, arg2, BALL_POKE); + return LaunchBallFadeMonTask(unFadeLater, spritePalNum, selectedPalettes, BALL_POKE); } +// Sprite data for the pokemon +#define sSpecies data[7] + +// Sprite data for the pokeball +#define sMonSpriteId data[0] +#define sDelay data[1] +#define sMonPalNum data[2] +#define sFadePalsLo data[3] +#define sFadePalsHi data[4] +#define sFinalMonX data[5] +#define sFinalMonY data[6] +#define sTrigIdx data[7] + // Pokeball in Birch intro, and when receiving via trade -void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species) +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes, u16 species) { u8 spriteId; - LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]); - LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]); - spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subpriortiy); + LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[BALL_POKE]); + LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[BALL_POKE]); + spriteId = CreateSprite(&gBallSpriteTemplates[BALL_POKE], x, y, subpriortiy); - gSprites[spriteId].data[0] = monSpriteId; - gSprites[spriteId].data[5] = gSprites[monSpriteId].x; - gSprites[spriteId].data[6] = gSprites[monSpriteId].y; + gSprites[spriteId].sMonSpriteId = monSpriteId; + gSprites[spriteId].sFinalMonX = gSprites[monSpriteId].x; + gSprites[spriteId].sFinalMonY = gSprites[monSpriteId].y; gSprites[monSpriteId].x = x; gSprites[monSpriteId].y = y; - gSprites[monSpriteId].data[7] = species; + gSprites[monSpriteId].sSpecies = species; - gSprites[spriteId].data[1] = g; - gSprites[spriteId].data[2] = battlerId; - gSprites[spriteId].data[3] = h; - gSprites[spriteId].data[4] = h >> 0x10; + gSprites[spriteId].sDelay = delay; + gSprites[spriteId].sMonPalNum = monPalNum; + gSprites[spriteId].sFadePalsLo = fadePalettes; + gSprites[spriteId].sFadePalsHi = fadePalettes >> 16; gSprites[spriteId].oam.priority = oamPriority; gSprites[spriteId].callback = SpriteCB_PokeballReleaseMon; @@ -1027,92 +1244,102 @@ void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, static void SpriteCB_PokeballReleaseMon(struct Sprite *sprite) { - if (sprite->data[1] == 0) + if (sprite->sDelay == 0) { - u8 r5; - u8 r7 = sprite->data[0]; - u8 battlerId = sprite->data[2]; - u32 r4 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); + u8 subpriority; + u8 spriteId = sprite->sMonSpriteId; + u8 monPalNum = sprite->sMonPalNum; + u32 selectedPalettes = (u16)sprite->sFadePalsLo | ((u16)sprite->sFadePalsHi << 16); if (sprite->subpriority != 0) - r5 = sprite->subpriority - 1; + subpriority = sprite->subpriority - 1; else - r5 = 0; + subpriority = 0; StartSpriteAnim(sprite, 1); - AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, r5); - sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4); + AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, subpriority); + // sDelay re-used to store task id but never read + sprite->sDelay = LaunchBallFadeMonTaskForPokeball(TRUE, monPalNum, selectedPalettes); sprite->callback = SpriteCB_ReleasedMonFlyOut; - gSprites[r7].invisible = FALSE; - StartSpriteAffineAnim(&gSprites[r7], BATTLER_AFFINE_EMERGE); - AnimateSprite(&gSprites[r7]); - gSprites[r7].data[1] = 0x1000; - sprite->data[7] = 0; + gSprites[spriteId].invisible = FALSE; + StartSpriteAffineAnim(&gSprites[spriteId], BATTLER_AFFINE_EMERGE); + AnimateSprite(&gSprites[spriteId]); + gSprites[spriteId].data[1] = 0x1000; + sprite->sTrigIdx = 0; } else { - sprite->data[1]--; + sprite->sDelay--; } } static void SpriteCB_ReleasedMonFlyOut(struct Sprite *sprite) { - bool8 r12 = FALSE; - bool8 r6 = FALSE; - u8 monSpriteId = sprite->data[0]; - u16 var1; - u16 var2; + bool8 emergeAnimFinished = FALSE; + bool8 atFinalPosition = FALSE; + u8 monSpriteId = sprite->sMonSpriteId; + u16 x, y; if (sprite->animEnded) sprite->invisible = TRUE; + if (gSprites[monSpriteId].affineAnimEnded) { StartSpriteAffineAnim(&gSprites[monSpriteId], BATTLER_AFFINE_NORMAL); - r12 = TRUE; + emergeAnimFinished = TRUE; } - var1 = (sprite->data[5] - sprite->x) * sprite->data[7] / 128 + sprite->x; - var2 = (sprite->data[6] - sprite->y) * sprite->data[7] / 128 + sprite->y; - gSprites[monSpriteId].x = var1; - gSprites[monSpriteId].y = var2; - if (sprite->data[7] < 128) - { - s16 sine = -(gSineTable[(u8)sprite->data[7]] / 8); - sprite->data[7] += 4; + x = (sprite->sFinalMonX - sprite->x) * sprite->sTrigIdx / 128 + sprite->x; + y = (sprite->sFinalMonY - sprite->y) * sprite->sTrigIdx / 128 + sprite->y; + gSprites[monSpriteId].x = x; + gSprites[monSpriteId].y = y; + + if (sprite->sTrigIdx < 128) + { + s16 sine = -(gSineTable[(u8)sprite->sTrigIdx] / 8); + + sprite->sTrigIdx += 4; gSprites[monSpriteId].x2 = sine; gSprites[monSpriteId].y2 = sine; } else { - gSprites[monSpriteId].x = sprite->data[5]; - gSprites[monSpriteId].y = sprite->data[6]; + gSprites[monSpriteId].x = sprite->sFinalMonX; + gSprites[monSpriteId].y = sprite->sFinalMonY; gSprites[monSpriteId].x2 = 0; gSprites[monSpriteId].y2 = 0; - r6 = TRUE; + atFinalPosition = TRUE; } - if (sprite->animEnded && r12 && r6) + if (sprite->animEnded && emergeAnimFinished && atFinalPosition) { - if (gSprites[monSpriteId].data[7] == SPECIES_EGG) - DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], TRUE, 0); + if (gSprites[monSpriteId].sSpecies == SPECIES_EGG) + DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].sSpecies, TRUE, 0); else - DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], FALSE, 0); + DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].sSpecies, FALSE, 0); DestroySpriteAndFreeResources(sprite); } } -u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h) +#undef sSpecies +#undef sFinalMonX +#undef sFinalMonY +#undef sTrigIdx + +#define sTimer data[5] + +u8 CreateTradePokeballSprite(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 delay, u32 fadePalettes) { u8 spriteId; - LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]); - LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]); - spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subPriority); - gSprites[spriteId].data[0] = a; - gSprites[spriteId].data[1] = g; - gSprites[spriteId].data[2] = b; - gSprites[spriteId].data[3] = h; - gSprites[spriteId].data[4] = h >> 16; + LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[BALL_POKE]); + LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[BALL_POKE]); + spriteId = CreateSprite(&gBallSpriteTemplates[BALL_POKE], x, y, subPriority); + gSprites[spriteId].sMonSpriteId = monSpriteId; + gSprites[spriteId].sDelay = delay; + gSprites[spriteId].sMonPalNum = monPalNum; + gSprites[spriteId].sFadePalsLo = fadePalettes; + gSprites[spriteId].sFadePalsHi = fadePalettes >> 16; gSprites[spriteId].oam.priority = oamPriority; gSprites[spriteId].callback = SpriteCB_TradePokeball; return spriteId; @@ -1120,25 +1347,26 @@ u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPrior static void SpriteCB_TradePokeball(struct Sprite *sprite) { - if (sprite->data[1] == 0) + if (sprite->sDelay == 0) { - u8 r6; - u8 monSpriteId = sprite->data[0]; - u8 r8 = sprite->data[2]; - u32 r5 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); + u8 subpriority; + u8 monSpriteId = sprite->sMonSpriteId; + u8 monPalNum = sprite->sMonPalNum; + u32 selectedPalettes = (u16)sprite->sFadePalsLo | ((u16)sprite->sFadePalsHi << 16); if (sprite->subpriority != 0) - r6 = sprite->subpriority - 1; + subpriority = sprite->subpriority - 1; else - r6 = 0; + subpriority = 0; StartSpriteAnim(sprite, 1); - AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, r6); - sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5); + AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, subpriority); + // sDelay re-used to store task id but never read + sprite->sDelay = LaunchBallFadeMonTaskForPokeball(TRUE, monPalNum, selectedPalettes); sprite->callback = SpriteCB_TradePokeballSendOff; #ifdef BUGFIX // FIX: If this is used on a sprite that has previously had an affine animation, it will not - // play the shrink anim properly due to being paused. Works together with the fix to `sub_817F77C`. + // play the shrink anim properly due to being paused. Works together with the fix to ResetSpriteAfterAnim. gSprites[monSpriteId].affineAnimPaused = FALSE; #endif // BUGFIX StartSpriteAffineAnim(&gSprites[monSpriteId], BATTLER_AFFINE_RETURN); @@ -1147,7 +1375,7 @@ static void SpriteCB_TradePokeball(struct Sprite *sprite) } else { - sprite->data[1]--; + sprite->sDelay--; } } @@ -1155,15 +1383,16 @@ static void SpriteCB_TradePokeballSendOff(struct Sprite *sprite) { u8 monSpriteId; - sprite->data[5]++; - if (sprite->data[5] == 11) + sprite->sTimer++; + if (sprite->sTimer == 11) PlaySE(SE_BALL_TRADE); - monSpriteId = sprite->data[0]; + + monSpriteId = sprite->sMonSpriteId; if (gSprites[monSpriteId].affineAnimEnded) { StartSpriteAnim(sprite, 2); gSprites[monSpriteId].invisible = TRUE; - sprite->data[5] = 0; + sprite->sTimer = 0; sprite->callback = SpriteCB_TradePokeballEnd; } else @@ -1179,7 +1408,15 @@ static void SpriteCB_TradePokeballEnd(struct Sprite *sprite) sprite->callback = SpriteCallbackDummy; } -static void Unref_DestroySpriteAndFreeResources(struct Sprite *sprite) +#undef sMonSpriteId +#undef sDelay +#undef sMonPalNum +#undef sFadePalsLo +#undef sFadePalsHi +#undef sTimer + +// Unreferenced here and in RS, but used in FRLG, possibly by mistake. +static void DestroySpriteAndFreeResources_Ball(struct Sprite *sprite) { DestroySpriteAndFreeResources(sprite); } @@ -1266,13 +1503,13 @@ void LoadBallGfx(u8 ballId) LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[ballId]); LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[ballId]); } + switch (ballId) { - case BALL_DIVE: - case BALL_LUXURY: - case BALL_PREMIER: - break; - default: + case BALL_POKE ... BALL_MASTER: + case BALL_NET ... BALL_NEST: + case BALL_REPEAT: + case BALL_SAFARI: var = GetSpriteTileStartByTag(gBallSpriteSheets[ballId].tag); LZDecompressVram(gOpenPokeballGfx, (void *)(OBJ_VRAM0 + 0x100 + var * 32)); break; @@ -1287,8 +1524,16 @@ void FreeBallGfx(u8 ballId) static u16 GetBattlerPokeballItemId(u8 battlerId) { + struct Pokemon *mon, *illusionMon; + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); + mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; else - return GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); + mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; + + illusionMon = GetIllusionMonPtr(battlerId); + if (illusionMon != NULL) + mon = illusionMon; + + return GetMonData(mon, MON_DATA_POKEBALL); } diff --git a/src/pokeblock.c b/src/pokeblock.c index fad6858ecc..cf0513f80e 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -36,8 +36,8 @@ #define MAX_MENU_ITEMS 9 #define MENU_MIDPOINT (MAX_MENU_ITEMS / 2) -#define TILE_HIGHLIGHT_NONE 0x0005 // Tile number for the bg of an unselected menu item -#define TILE_HIGHLIGHT_BLUE 0x1005 // Tile number for the bg of a selected menu item +#define TILE_HIGHLIGHT_NONE 0x0005 // Tile number for the bg of an unselected menu item +#define TILE_HIGHLIGHT_BLUE 0x1005 // Tile number for the bg of a selected menu item #define TILE_HIGHLIGHT_RED 0x2005 // Tile number for the bg of a menu item to swap #define TAG_POKEBLOCK_CASE 14800 @@ -95,10 +95,6 @@ enum PKBL_GIVE_TO_LADY }; - -extern const u16 gUnknown_0860F074[]; - -// this file's functions static void CB2_InitPokeblockMenu(void); static bool8 InitPokeblockMenu(void); static bool8 LoadPokeblockMenuGfx(void); @@ -241,7 +237,7 @@ static const struct OamData sOamData_PokeblockCase = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -443,7 +439,7 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate = .lettersSpacing = 0, .itemVerticalPadding = 0, .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, - .fontId = 1, + .fontId = FONT_NORMAL, .cursorKind = 1 }; @@ -509,11 +505,11 @@ static void CB2_InitPokeblockMenu(void) { while (1) { - if (MenuHelpers_CallLinkSomething() == TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() == TRUE) break; if (InitPokeblockMenu() == TRUE) break; - if (MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE) break; } } @@ -685,7 +681,7 @@ static void HandleInitWindows(void) DeactivateAllTextPrinters(); LoadUserWindowBorderGfx(0, 1, 0xE0); LoadMessageBoxGfx(0, 0xA, 0xD0); - LoadPalette(gUnknown_0860F074, 0xF0, 0x20); + LoadPalette(gStandardMenuPalette, 0xF0, 0x20); for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -696,7 +692,7 @@ static void HandleInitWindows(void) static void PrintOnPokeblockWindow(u8 windowId, const u8 *string, s32 x) { - AddTextPrinterParameterized4(windowId, 1, x, 1, 0, 0, sTextColor, 0, string); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, 1, 0, 0, sTextColor, 0, string); } static void DrawPokeblockMenuTitleText(void) @@ -704,7 +700,7 @@ static void DrawPokeblockMenuTitleText(void) u8 i; const u8 *itemName = ItemId_GetName(ITEM_POKEBLOCK_CASE); - PrintOnPokeblockWindow(WIN_TITLE, itemName, GetStringCenterAlignXOffset(1, itemName, 0x48)); + PrintOnPokeblockWindow(WIN_TITLE, itemName, GetStringCenterAlignXOffset(FONT_NORMAL, itemName, 0x48)); PrintOnPokeblockWindow(WIN_SPICY, gText_Spicy, 0); PrintOnPokeblockWindow(WIN_DRY, gText_Dry, 0); @@ -732,7 +728,7 @@ static void UpdatePokeblockList(void) sPokeblockMenu->items[i].id = LIST_CANCEL; gMultiuseListMenuTemplate = sPokeblockListMenuTemplate; - gMultiuseListMenuTemplate.fontId = 7; + gMultiuseListMenuTemplate.fontId = FONT_NARROW; gMultiuseListMenuTemplate.totalItems = sPokeblockMenu->itemsNo; gMultiuseListMenuTemplate.items = sPokeblockMenu->items; gMultiuseListMenuTemplate.maxShowed = sPokeblockMenu->maxShowed; @@ -792,7 +788,7 @@ static void DrawPokeblockInfo(s32 pkblId) } CopyToBgTilemapBufferRect(2, rectTilemapSrc, (i / 3 * 6) + 1, (i % 3 * 2) + 13, 1, 2); } - + // Print the Pokéblock's feel ConvertIntToDecimalStringN(gStringVar1, GetPokeblocksFeel(pokeblock), STR_CONV_MODE_RIGHT_ALIGN, 2); PrintOnPokeblockWindow(WIN_FEEL, gStringVar1, 4); @@ -806,7 +802,7 @@ static void DrawPokeblockInfo(s32 pkblId) for (i = 0; i < FLAVOR_COUNT; i++) CopyToBgTilemapBufferRect(2, rectTilemapSrc, (i / 3 * 6) + 1, (i % 3 * 2) + 13, 1, 2); - CopyWindowToVram(7, 2); + CopyWindowToVram(7, COPYWIN_GFX); } ScheduleBgCopyTilemapToVram(0); @@ -1008,7 +1004,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!gPaletteFade.active && MenuHelpers_CallLinkSomething() != TRUE) + if (!gPaletteFade.active && MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { if (JOY_NEW(SELECT_BUTTON)) { @@ -1061,7 +1057,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId) { s16 *data = gTasks[taskId].data; - if (MenuHelpers_CallLinkSomething() == TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() == TRUE) return; if (JOY_NEW(SELECT_BUTTON)) @@ -1152,9 +1148,9 @@ static void ShowPokeblockActionsWindow(u8 taskId) tWindowId = WIN_ACTIONS; DestroyScrollArrows(); - DrawStdFrameWithCustomTileAndPalette(tWindowId, 0, 1, 0xE); - sub_81995E4(tWindowId, sPokeblockMenu->numActions, sPokeblockMenuActions, sPokeblockMenu->pokeblockActionIds); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(tWindowId, sPokeblockMenu->numActions, 0); + DrawStdFrameWithCustomTileAndPalette(tWindowId, FALSE, 1, 0xE); + PrintMenuActionTextsInUpperLeftCorner(tWindowId, sPokeblockMenu->numActions, sPokeblockMenuActions, sPokeblockMenu->pokeblockActionIds); + InitMenuInUpperLeftCornerNormal(tWindowId, sPokeblockMenu->numActions, 0); PutWindowTilemap(tWindowId); ScheduleBgCopyTilemapToVram(1); @@ -1165,7 +1161,7 @@ static void Task_HandlePokeblockActionsInput(u8 taskId) { s8 itemId; - if (MenuHelpers_CallLinkSomething() == TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() == TRUE) return; itemId = Menu_ProcessInputNoWrap(); @@ -1208,7 +1204,7 @@ static void PokeblockAction_Toss(u8 taskId) ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1Ptr->pokeblocks[gSpecialVar_ItemId].color]); StringExpandPlaceholders(gStringVar4, gText_ThrowAwayVar1); - DisplayMessageAndContinueTask(taskId, WIN_TOSS_MSG, 10, 13, 1, GetPlayerTextSpeedDelay(), gStringVar4, CreateTossPokeblockYesNoMenu); + DisplayMessageAndContinueTask(taskId, WIN_TOSS_MSG, 10, 13, FONT_NORMAL, GetPlayerTextSpeedDelay(), gStringVar4, CreateTossPokeblockYesNoMenu); } static void CreateTossPokeblockYesNoMenu(u8 taskId) @@ -1219,7 +1215,7 @@ static void CreateTossPokeblockYesNoMenu(u8 taskId) static void TossedPokeblockMessage(u8 taskId) { StringExpandPlaceholders(gStringVar4, gText_Var1ThrownAway); - DisplayMessageAndContinueTask(taskId, WIN_TOSS_MSG, 10, 13, 1, GetPlayerTextSpeedDelay(), gStringVar4, TossPokeblock); + DisplayMessageAndContinueTask(taskId, WIN_TOSS_MSG, 10, 13, FONT_NORMAL, GetPlayerTextSpeedDelay(), gStringVar4, TossPokeblock); } static void TossPokeblock(u8 taskId) diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index fb0a15116e..46355e1464 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -116,10 +116,6 @@ struct PokeblockFeed u8 unused4; }; -extern struct MusicPlayerInfo gMPlayInfo_BGM; - -extern const u16 gUnknown_0860F074[]; - static void HandleInitBackgrounds(void); static void HandleInitWindows(void); static void LaunchPokeblockFeedTask(void); @@ -470,7 +466,7 @@ static const struct WindowTemplate sWindowTemplates[] = }; // - 1 excludes PBLOCK_CLR_NONE -static const u32* const sPokeblocksPals[] = +static const u32 *const sPokeblocksPals[] = { [PBLOCK_CLR_RED - 1] = gPokeblockRed_Pal, [PBLOCK_CLR_BLUE - 1] = gPokeblockBlue_Pal, @@ -549,7 +545,7 @@ static const struct OamData sOamData_Pokeblock = .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -664,7 +660,7 @@ static bool8 LoadPokeblockFeedScene(void) gMain.state++; break; case 10: - DrawStdFrameWithCustomTileAndPalette(0, 1, 1, 14); + DrawStdFrameWithCustomTileAndPalette(0, TRUE, 1, 14); gMain.state++; break; case 11: @@ -692,11 +688,11 @@ void PreparePokeblockFeedScene(void) { while (1) { - if (MenuHelpers_CallLinkSomething() == TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() == TRUE) break; if (LoadPokeblockFeedScene() == TRUE) break; - if (MenuHelpers_LinkSomething() == TRUE) + if (MenuHelpers_IsLinkActive() == TRUE) break; } } @@ -731,7 +727,7 @@ static bool8 LoadMonAndSceneGfx(struct Pokemon *mon) // Load mon gfx species = GetMonData(mon, MON_DATA_SPECIES2); personality = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[1], species, personality); + HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], species, personality); sPokeblockFeed->loadGfxState++; break; case 1: @@ -742,7 +738,7 @@ static bool8 LoadMonAndSceneGfx(struct Pokemon *mon) palette = GetMonSpritePalStructFromOtIdPersonality(species, trainerId, personality); LoadCompressedSpritePalette(palette); - SetMultiuseSpriteTemplateToPokemon(palette->tag, 1); + SetMultiuseSpriteTemplateToPokemon(palette->tag, B_POSITION_OPPONENT_LEFT); sPokeblockFeed->loadGfxState++; break; case 2: @@ -788,7 +784,7 @@ static void HandleInitWindows(void) InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); LoadUserWindowBorderGfx(0, 1, 0xE0); - LoadPalette(gUnknown_0860F074, 0xF0, 0x20); + LoadPalette(gStandardMenuPalette, 0xF0, 0x20); FillWindowPixelBuffer(0, PIXEL_FILL(0)); PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); @@ -876,7 +872,7 @@ static void Task_PrintAtePokeblockMessage(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_Var1DisdainfullyAteVar2); gTextFlags.canABSpeedUpPrint = TRUE; - AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeedDelay(), NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); gTasks[taskId].func = Task_WaitForAtePokeblockMessage; } @@ -886,7 +882,7 @@ static void Task_ExitPokeblockFeed(u8 taskId) { ResetSpriteData(); FreeAllSpritePalettes(); - m4aMPlayVolumeControl(&gMPlayInfo_BGM, -1, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); SetMainCallback2(gMain.savedCallback); DestroyTask(taskId); FreeAllWindowBuffers(); @@ -909,7 +905,7 @@ static void Task_FadeOutPokeblockFeed(u8 taskId) #define sAccel data[1] #define sSpecies data[2] -static u8 CreateMonSprite(struct Pokemon* mon) +static u8 CreateMonSprite(struct Pokemon *mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES2); u8 spriteId = CreateSprite(&gMultiuseSpriteTemplate, MON_X, MON_Y, 2); @@ -941,7 +937,7 @@ static void StartMonJumpForPokeblock(u8 spriteId) gSprites[spriteId].callback = SpriteCB_MonJumpForPokeblock; } -static void SpriteCB_MonJumpForPokeblock(struct Sprite* sprite) +static void SpriteCB_MonJumpForPokeblock(struct Sprite *sprite) { sprite->x += 4; sprite->y += sprite->sSpeed; @@ -949,7 +945,7 @@ static void SpriteCB_MonJumpForPokeblock(struct Sprite* sprite) // Play cry at jump peak if (sprite->sSpeed == 0) - PlayCry1(sprite->sSpecies, 0); + PlayCry_Normal(sprite->sSpecies, 0); if (sprite->sSpeed == 9) sprite->callback = SpriteCallbackDummy; @@ -986,7 +982,7 @@ static u8 CreatePokeblockSprite(void) return spriteId; } -static void SpriteCB_ThrownPokeblock(struct Sprite* sprite) +static void SpriteCB_ThrownPokeblock(struct Sprite *sprite) { sprite->x -= 4; sprite->y += sprite->sSpeed; @@ -1003,7 +999,7 @@ static void CalculateMonAnimLength(void) pokeblockFeed = sPokeblockFeed; pokeblockFeed->monAnimLength = 1; animId = sNatureToMonPokeblockAnim[pokeblockFeed->nature][0]; - + // Add up the time each stage of the animation will take for (i = 0; i < 8; i++, animId++) { @@ -1177,16 +1173,16 @@ static void CalculateMonAnimMovement(void) if (!negative) { - pokeblockFeed->monAnimX[time] = Sin(pokeblockFeed->animData[ANIMDATA_ROT_IDX], + pokeblockFeed->monAnimX[time] = Sin(pokeblockFeed->animData[ANIMDATA_ROT_IDX], pokeblockFeed->animData[ANIMDATA_SIN_AMPLITUDE] + amplitude / 0x100) + x; - pokeblockFeed->monAnimY[time] = Cos(pokeblockFeed->animData[ANIMDATA_ROT_IDX], + pokeblockFeed->monAnimY[time] = Cos(pokeblockFeed->animData[ANIMDATA_ROT_IDX], pokeblockFeed->animData[ANIMDATA_COS_AMPLITUDE] + amplitude / 0x100) + y; } else { - pokeblockFeed->monAnimX[time] = Sin(pokeblockFeed->animData[ANIMDATA_ROT_IDX], + pokeblockFeed->monAnimX[time] = Sin(pokeblockFeed->animData[ANIMDATA_ROT_IDX], pokeblockFeed->animData[ANIMDATA_SIN_AMPLITUDE] - amplitude / 0x100) + x; - pokeblockFeed->monAnimY[time] = Cos(pokeblockFeed->animData[ANIMDATA_ROT_IDX], + pokeblockFeed->monAnimY[time] = Cos(pokeblockFeed->animData[ANIMDATA_ROT_IDX], pokeblockFeed->animData[ANIMDATA_COS_AMPLITUDE] - amplitude / 0x100) + y; } diff --git a/src/pokedex.c b/src/pokedex.c index 0bd1901890..4b6ce78cad 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -104,13 +104,15 @@ enum #define POKEBALL_ROTATION_TOP 64 #define POKEBALL_ROTATION_BOTTOM (POKEBALL_ROTATION_TOP - 16) -// EWRAM +// Coordinates of the Pokémon sprite on its page (info/cry screens) +#define MON_PAGE_X 48 +#define MON_PAGE_Y 56 + static EWRAM_DATA struct PokedexView *sPokedexView = NULL; static EWRAM_DATA u16 sLastSelectedPokemon = 0; static EWRAM_DATA u8 sPokeBallRotation = 0; static EWRAM_DATA struct PokedexListItem *sPokedexListItem = NULL; -// IWRAM common // This is written to, but never read. u8 gUnusedPokedexU8; void (*gPokedexVBlankCB)(void); @@ -148,8 +150,6 @@ struct SearchMenuItem u8 selectionBgWidth; }; -extern struct MusicPlayerInfo gMPlayInfo_BGM; - struct PokedexListItem { u16 dexNum; @@ -239,9 +239,9 @@ static void SpriteCB_RotatingPokeBall(struct Sprite *sprite); static void SpriteCB_SeenOwnInfo(struct Sprite *sprite); static void SpriteCB_DexListStartMenuCursor(struct Sprite *sprite); static void SpriteCB_PokedexListMonSprite(struct Sprite *sprite); -static u8 LoadInfoScreen(struct PokedexListItem*, u8 monSpriteId); +static u8 LoadInfoScreen(struct PokedexListItem *, u8 monSpriteId); static bool8 IsInfoScreenScrolling(u8); -static u8 sub_80BE9F8(struct PokedexListItem*, u8); +static u8 StartInfoScreenScroll(struct PokedexListItem *, u8); static void Task_LoadInfoScreen(u8); static void Task_HandleInfoScreenInput(u8); static void Task_SwitchScreensFromInfoScreen(u8); @@ -270,7 +270,8 @@ static void PrintMonHeight(u16 height, u8 left, u8 top); static void PrintMonWeight(u16 weight, u8 left, u8 top); static void ResetOtherVideoRegisters(u16); static u8 PrintCryScreenSpeciesName(u8, u16, u8, u8); -static void PrintFootprint(u8 windowId, u16 dexNum); +static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top); +static void DrawFootprint(u8 windowId, u16 dexNum); static u16 CreateSizeScreenTrainerPic(u16, s16, s16, s8); static u16 GetNextPosition(u8, u16, u16, u16); static u8 LoadSearchMenu(void); @@ -294,10 +295,10 @@ static void PrintSearchParameterText(u8); static u8 GetSearchModeSelection(u8 taskId, u8 option); static void SetDefaultSearchModeAndOrder(u8); static void CreateSearchParameterScrollArrows(u8); -static void EraseAndPrintSearchTextBox(const u8*); +static void EraseAndPrintSearchTextBox(const u8 *); static void EraseSelectorArrow(u32); static void PrintSelectorArrow(u32); -static void PrintSearchParameterTitle(u32, const u8*); +static void PrintSearchParameterTitle(u32, const u8 *); static void ClearSearchParameterBoxText(void); // const rom data @@ -308,7 +309,7 @@ static const struct OamData sOamData_ScrollBar = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -325,7 +326,7 @@ static const struct OamData sOamData_ScrollArrow = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), .x = 0, @@ -342,7 +343,7 @@ static const struct OamData sOamData_InterfaceText = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), .x = 0, @@ -359,7 +360,7 @@ static const struct OamData sOamData_RotatingPokeBall = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_WINDOW, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -376,7 +377,7 @@ static const struct OamData sOamData_SeenOwnText = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -393,7 +394,7 @@ static const struct OamData sOamData_Dex8x16 = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x16), .x = 0, @@ -840,7 +841,7 @@ static const u8 sText_No000[] = _("{NO}000"); static const u8 sCaughtBall_Gfx[] = INCBIN_U8("graphics/pokedex/caught_ball.4bpp"); static const u8 sText_TenDashes[] = _("----------"); -ALIGNED(4) static const u8 gExpandedPlaceholder_PokedexDescription[] = _(""); +ALIGNED(4) static const u8 sExpandedPlaceholder_PokedexDescription[] = _(""); #include "data/pokemon/pokedex_text.h" #include "data/pokemon/pokedex_entries.h" @@ -1393,6 +1394,7 @@ static const struct SearchOptionText sDexSearchTypeOptions[NUMBER_OF_MON_TYPES + {gText_DexEmptyString, gTypeNames[TYPE_ICE]}, {gText_DexEmptyString, gTypeNames[TYPE_DRAGON]}, {gText_DexEmptyString, gTypeNames[TYPE_DARK]}, + {gText_DexEmptyString, gTypeNames[TYPE_FAIRY]}, {}, }; @@ -1427,6 +1429,7 @@ static const u8 sDexSearchTypeIds[NUMBER_OF_MON_TYPES] = TYPE_ICE, TYPE_DRAGON, TYPE_DARK, + TYPE_FAIRY, }; // Number pairs are the task data for tracking the cursor pos and scroll offset of each option list @@ -1512,7 +1515,7 @@ void ResetPokedex(void) gSaveBlock2Ptr->pokedex.spindaPersonality = 0; gSaveBlock2Ptr->pokedex.unknown3 = 0; DisableNationalPokedex(); - for (i = 0; i < DEX_FLAGS_NO; i++) + for (i = 0; i < NUM_DEX_FLAG_BYTES; i++) { gSaveBlock1Ptr->dexCaught[i] = 0; gSaveBlock1Ptr->dexSeen[i] = 0; @@ -1635,7 +1638,7 @@ void CB2_OpenPokedex(void) SetVBlankCallback(VBlankCB_Pokedex); SetMainCallback2(CB2_Pokedex); CreatePokedexList(sPokedexView->dexMode, sPokedexView->dexOrder); - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x80); break; } } @@ -1655,7 +1658,7 @@ void Task_OpenPokedexMainPage(u8 taskId) gTasks[taskId].func = Task_HandlePokedexInput; } -#define tTaskId data[0] +#define tLoadScreenTaskId data[0] static void Task_HandlePokedexInput(u8 taskId) { @@ -1667,7 +1670,7 @@ static void Task_HandlePokedexInput(u8 taskId) } else { - if ((JOY_NEW(A_BUTTON)) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) + if (JOY_NEW(A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) { UpdateSelectedMonSpriteId(); BeginNormalPaletteFade(~(1 << (gSprites[sPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), 0, 0, 0x10, RGB_BLACK); @@ -1688,7 +1691,7 @@ static void Task_HandlePokedexInput(u8 taskId) { PlaySE(SE_SELECT); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].tTaskId = LoadSearchMenu(); + gTasks[taskId].tLoadScreenTaskId = LoadSearchMenu(); sPokedexView->screenSwitchState = 0; sPokedexView->pokeBallRotationBackup = sPokedexView->pokeBallRotation; sPokedexView->selectedPokemonBackup = sPokedexView->selectedPokemon; @@ -1768,12 +1771,12 @@ static void Task_HandlePokedexStartMenuInput(u8 taskId) gTasks[taskId].func = Task_HandlePokedexInput; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_UP)) && sPokedexView->menuCursorPos != 0) + else if (JOY_REPEAT(DPAD_UP) && sPokedexView->menuCursorPos != 0) { sPokedexView->menuCursorPos--; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_DOWN)) && sPokedexView->menuCursorPos < 3) + else if (JOY_REPEAT(DPAD_DOWN) && sPokedexView->menuCursorPos < 3) { sPokedexView->menuCursorPos++; PlaySE(SE_SELECT); @@ -1781,25 +1784,28 @@ static void Task_HandlePokedexStartMenuInput(u8 taskId) } } +// Opening the info screen from list view. Pokémon sprite is moving to its new position, wait for it to arrive static void Task_OpenInfoScreenAfterMonMovement(u8 taskId) { - if (gSprites[sPokedexView->selectedMonSpriteId].x == 48 && gSprites[sPokedexView->selectedMonSpriteId].y == 56) + if (gSprites[sPokedexView->selectedMonSpriteId].x == MON_PAGE_X && gSprites[sPokedexView->selectedMonSpriteId].y == MON_PAGE_Y) { sPokedexView->currentPageBackup = sPokedexView->currentPage; - gTasks[taskId].tTaskId = LoadInfoScreen(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId); + gTasks[taskId].tLoadScreenTaskId = LoadInfoScreen(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId); gTasks[taskId].func = Task_WaitForExitInfoScreen; } } static void Task_WaitForExitInfoScreen(u8 taskId) { - if (gTasks[gTasks[taskId].tTaskId].isActive) + if (gTasks[gTasks[taskId].tLoadScreenTaskId].isActive) { - if (sPokedexView->currentPage == PAGE_INFO && !IsInfoScreenScrolling(gTasks[taskId].tTaskId) && TryDoInfoScreenScroll()) - sub_80BE9F8(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], gTasks[taskId].tTaskId); + // While active, handle scroll input + if (sPokedexView->currentPage == PAGE_INFO && !IsInfoScreenScrolling(gTasks[taskId].tLoadScreenTaskId) && TryDoInfoScreenScroll()) + StartInfoScreenScroll(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], gTasks[taskId].tLoadScreenTaskId); } else { + // Exiting, back to list view sLastSelectedPokemon = sPokedexView->selectedPokemon; sPokeBallRotation = sPokedexView->pokeBallRotation; gTasks[taskId].func = Task_OpenPokedexMainPage; @@ -1808,7 +1814,7 @@ static void Task_WaitForExitInfoScreen(u8 taskId) static void Task_WaitForExitSearch(u8 taskId) { - if (!gTasks[gTasks[taskId].tTaskId].isActive) + if (!gTasks[gTasks[taskId].tLoadScreenTaskId].isActive) { ClearMonSprites(); @@ -1845,7 +1851,7 @@ static void Task_ClosePokedex(u8 taskId) FreeWindowAndBgBuffers(); DestroyTask(taskId); SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); Free(sPokedexView); } } @@ -1867,7 +1873,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) } else { - if ((JOY_NEW(A_BUTTON)) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) + if (JOY_NEW(A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) { u32 a; @@ -1890,7 +1896,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) else if (JOY_NEW(SELECT_BUTTON)) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].tTaskId = LoadSearchMenu(); + gTasks[taskId].tLoadScreenTaskId = LoadSearchMenu(); sPokedexView->screenSwitchState = 0; gTasks[taskId].func = Task_WaitForExitSearch; PlaySE(SE_PC_LOGIN); @@ -1970,12 +1976,12 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId) gTasks[taskId].func = Task_HandleSearchResultsInput; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_UP)) && sPokedexView->menuCursorPos) + else if (JOY_REPEAT(DPAD_UP) && sPokedexView->menuCursorPos) { sPokedexView->menuCursorPos--; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_DOWN)) && sPokedexView->menuCursorPos < 4) + else if (JOY_REPEAT(DPAD_DOWN) && sPokedexView->menuCursorPos < 4) { sPokedexView->menuCursorPos++; PlaySE(SE_SELECT); @@ -1985,10 +1991,10 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId) static void Task_OpenSearchResultsInfoScreenAfterMonMovement(u8 taskId) { - if (gSprites[sPokedexView->selectedMonSpriteId].x == 48 && gSprites[sPokedexView->selectedMonSpriteId].y == 56) + if (gSprites[sPokedexView->selectedMonSpriteId].x == MON_PAGE_X && gSprites[sPokedexView->selectedMonSpriteId].y == MON_PAGE_Y) { sPokedexView->currentPageBackup = sPokedexView->currentPage; - gTasks[taskId].tTaskId = LoadInfoScreen(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId); + gTasks[taskId].tLoadScreenTaskId = LoadInfoScreen(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId); sPokedexView->selectedMonSpriteId = -1; gTasks[taskId].func = Task_WaitForExitSearchResultsInfoScreen; } @@ -1996,13 +2002,15 @@ static void Task_OpenSearchResultsInfoScreenAfterMonMovement(u8 taskId) static void Task_WaitForExitSearchResultsInfoScreen(u8 taskId) { - if (gTasks[gTasks[taskId].tTaskId].isActive) + if (gTasks[gTasks[taskId].tLoadScreenTaskId].isActive) { - if (sPokedexView->currentPage == PAGE_INFO && !IsInfoScreenScrolling(gTasks[taskId].tTaskId) && TryDoInfoScreenScroll()) - sub_80BE9F8(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], gTasks[taskId].tTaskId); + // While active, handle scroll input + if (sPokedexView->currentPage == PAGE_INFO && !IsInfoScreenScrolling(gTasks[taskId].tLoadScreenTaskId) && TryDoInfoScreenScroll()) + StartInfoScreenScroll(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], gTasks[taskId].tLoadScreenTaskId); } else { + // Exiting, back to search results gTasks[taskId].func = Task_OpenSearchResults; } } @@ -2037,7 +2045,7 @@ static void Task_ClosePokedexFromSearchResultsStartMenu(u8 taskId) } } -#undef tTaskId +#undef tLoadScreenTaskId // For loading main pokedex page or pokedex search results static bool8 LoadPokedexListPage(u8 page) @@ -2074,7 +2082,7 @@ static bool8 LoadPokedexListPage(u8 page) InitWindows(sPokemonList_WindowTemplate); DeactivateAllTextPrinters(); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); gMain.state = 1; break; case 1: @@ -2147,7 +2155,7 @@ static void LoadPokedexBgPalette(bool8 isSearchResults) static void FreeWindowAndBgBuffers(void) { - void* tilemapBuffer; + void *tilemapBuffer; FreeAllWindowBuffers(); tilemapBuffer = GetBgTilemapBuffer(0); @@ -2235,7 +2243,7 @@ static void CreatePokedexList(u8 dexMode, u8 order) { temp_dexNum = gPokedexOrder_Alphabetical[i]; - if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN)) + if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN)) { sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; @@ -2249,7 +2257,7 @@ static void CreatePokedexList(u8 dexMode, u8 order) { temp_dexNum = gPokedexOrder_Weight[i]; - if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) + if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) { sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; @@ -2263,7 +2271,7 @@ static void CreatePokedexList(u8 dexMode, u8 order) { temp_dexNum = gPokedexOrder_Weight[i]; - if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) + if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) { sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; @@ -2277,7 +2285,7 @@ static void CreatePokedexList(u8 dexMode, u8 order) { temp_dexNum = gPokedexOrder_Height[i]; - if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) + if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) { sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; @@ -2291,7 +2299,7 @@ static void CreatePokedexList(u8 dexMode, u8 order) { temp_dexNum = gPokedexOrder_Height[i]; - if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) + if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) { sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; @@ -2310,14 +2318,14 @@ static void CreatePokedexList(u8 dexMode, u8 order) } } -static void PrintMonDexNumAndName(u8 windowId, u8 fontId, const u8* str, u8 left, u8 top) +static void PrintMonDexNumAndName(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top) { u8 color[3]; color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_DYNAMIC_COLOR_6; color[2] = TEXT_COLOR_LIGHT_GRAY; - AddTextPrinterParameterized4(windowId, fontId, left * 8, (top * 8) + 1, 0, 0, color, -1, str); + AddTextPrinterParameterized4(windowId, fontId, left * 8, (top * 8) + 1, 0, 0, color, TEXT_SKIP_DRAW, str); } // u16 ignored is passed but never used @@ -2405,7 +2413,7 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) } break; } - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); } static void CreateMonDexNum(u16 entryNum, u8 left, u8 top, u16 unused) @@ -2420,7 +2428,7 @@ static void CreateMonDexNum(u16 entryNum, u8 left, u8 top, u16 unused) text[2] = CHAR_0 + dexNum / 100; text[3] = CHAR_0 + (dexNum % 100) / 10; text[4] = CHAR_0 + (dexNum % 100) % 10; - PrintMonDexNumAndName(0, 7, text, left, top); + PrintMonDexNumAndName(0, FONT_NARROW, text, left, top); } static void CreateCaughtBall(bool16 owned, u8 x, u8 y, u16 unused) @@ -2433,14 +2441,14 @@ static void CreateCaughtBall(bool16 owned, u8 x, u8 y, u16 unused) static u8 CreateMonName(u16 num, u8 left, u8 top) { - const u8* str; + const u8 *str; num = NationalPokedexNumToSpecies(num); if (num) str = gSpeciesNames[num]; else str = sText_TenDashes; - PrintMonDexNumAndName(0, 7, str, left, top); + PrintMonDexNumAndName(0, FONT_NARROW, str, left, top); return StringLength(str); } @@ -2584,7 +2592,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) u16 startingPos; u8 scrollDir = 0; - if ((JOY_HELD(DPAD_UP)) && (selectedMon > 0)) + if (JOY_HELD(DPAD_UP) && (selectedMon > 0)) { scrollDir = 1; selectedMon = GetNextPosition(1, selectedMon, 0, sPokedexView->pokemonListCount - 1); @@ -2592,7 +2600,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonListEntry(1, selectedMon, ignored); PlaySE(SE_DEX_SCROLL); } - else if ((JOY_HELD(DPAD_DOWN)) && (selectedMon < sPokedexView->pokemonListCount - 1)) + else if (JOY_HELD(DPAD_DOWN) && (selectedMon < sPokedexView->pokemonListCount - 1)) { scrollDir = 2; selectedMon = GetNextPosition(0, selectedMon, 0, sPokedexView->pokemonListCount - 1); @@ -2600,7 +2608,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonListEntry(2, selectedMon, ignored); PlaySE(SE_DEX_SCROLL); } - else if ((JOY_NEW(DPAD_LEFT)) && (selectedMon > 0)) + else if (JOY_NEW(DPAD_LEFT) && (selectedMon > 0)) { startingPos = selectedMon; @@ -2611,7 +2619,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonSpritesAtPos(selectedMon, 0xE); PlaySE(SE_DEX_PAGE); } - else if ((JOY_NEW(DPAD_RIGHT)) && (selectedMon < sPokedexView->pokemonListCount - 1)) + else if (JOY_NEW(DPAD_RIGHT) && (selectedMon < sPokedexView->pokemonListCount - 1)) { startingPos = selectedMon; for (i = 0; i < 7; i++) @@ -2660,7 +2668,7 @@ static bool8 TryDoInfoScreenScroll(void) u16 nextPokemon; u16 selectedPokemon = sPokedexView->selectedPokemon; - if ((JOY_NEW(DPAD_UP)) && selectedPokemon) + if (JOY_NEW(DPAD_UP) && selectedPokemon) { nextPokemon = selectedPokemon; while (nextPokemon != 0) @@ -2683,7 +2691,7 @@ static bool8 TryDoInfoScreenScroll(void) return TRUE; } } - else if ((JOY_NEW(DPAD_DOWN)) && selectedPokemon < sPokedexView->pokemonListCount - 1) + else if (JOY_NEW(DPAD_DOWN) && selectedPokemon < sPokedexView->pokemonListCount - 1) { nextPokemon = selectedPokemon; while (nextPokemon < sPokedexView->pokemonListCount - 1) @@ -3000,16 +3008,16 @@ void SpriteCB_MoveMonForInfoScreen(struct Sprite *sprite) sprite->oam.affineMode = ST_OAM_AFFINE_OFF; sprite->x2 = 0; sprite->y2 = 0; - if (sprite->x != 48 || sprite->y != 56) + if (sprite->x != MON_PAGE_X || sprite->y != MON_PAGE_Y) { - if (sprite->x > 48) + if (sprite->x > MON_PAGE_X) sprite->x--; - if (sprite->x < 48) + if (sprite->x < MON_PAGE_X) sprite->x++; - if (sprite->y > 56) + if (sprite->y > MON_PAGE_Y) sprite->y--; - if (sprite->y < 56) + if (sprite->y < MON_PAGE_Y) sprite->y++; } else @@ -3153,30 +3161,35 @@ static void SpriteCB_DexListStartMenuCursor(struct Sprite *sprite) } } -static void PrintInfoScreenText(const u8* str, u8 left, u8 top) +static void PrintInfoScreenText(const u8 *str, u8 left, u8 top) { u8 color[3]; color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_DYNAMIC_COLOR_6; color[2] = TEXT_COLOR_LIGHT_GRAY; - AddTextPrinterParameterized4(0, 1, left, top, 0, 0, color, -1, str); + AddTextPrinterParameterized4(0, FONT_NORMAL, left, top, 0, 0, color, TEXT_SKIP_DRAW, str); } -#define tMonSpriteId data[4] +#define tScrolling data[0] +#define tMonSpriteDone data[1] +#define tBgLoaded data[2] +#define tSkipCry data[3] +#define tMonSpriteId data[4] +#define tTrainerSpriteId data[5] -static u8 LoadInfoScreen(struct PokedexListItem* item, u8 monSpriteId) +static u8 LoadInfoScreen(struct PokedexListItem *item, u8 monSpriteId) { u8 taskId; sPokedexListItem = item; taskId = CreateTask(Task_LoadInfoScreen, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; + gTasks[taskId].tScrolling = FALSE; + gTasks[taskId].tMonSpriteDone = TRUE; // Already has sprite from list view + gTasks[taskId].tBgLoaded = FALSE; + gTasks[taskId].tSkipCry = FALSE; gTasks[taskId].tMonSpriteId = monSpriteId; - gTasks[taskId].data[5] = 255; + gTasks[taskId].tTrainerSpriteId = SPRITE_NONE; ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sInfoScreen_BgTemplate, ARRAY_COUNT(sInfoScreen_BgTemplate)); SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE)); @@ -3191,19 +3204,19 @@ static u8 LoadInfoScreen(struct PokedexListItem* item, u8 monSpriteId) static bool8 IsInfoScreenScrolling(u8 taskId) { - if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == Task_HandleInfoScreenInput) + if (!gTasks[taskId].tScrolling && gTasks[taskId].func == Task_HandleInfoScreenInput) return FALSE; else return TRUE; } -static u8 sub_80BE9F8(struct PokedexListItem *item, u8 taskId) +static u8 StartInfoScreenScroll(struct PokedexListItem *item, u8 taskId) { sPokedexListItem = item; - gTasks[taskId].data[0] = 1; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; + gTasks[taskId].tScrolling = TRUE; + gTasks[taskId].tMonSpriteDone = FALSE; + gTasks[taskId].tBgLoaded = FALSE; + gTasks[taskId].tSkipCry = FALSE; return taskId; } @@ -3221,9 +3234,9 @@ static void Task_LoadInfoScreen(u8 taskId) gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); r2 = 0; - if (gTasks[taskId].data[1] != 0) + if (gTasks[taskId].tMonSpriteDone) r2 += DISPCNT_OBJ_ON; - if (gTasks[taskId].data[2] != 0) + if (gTasks[taskId].tBgLoaded) r2 |= DISPCNT_BG1_ON; ResetOtherVideoRegisters(r2); gMain.state = 1; @@ -3235,8 +3248,8 @@ static void Task_LoadInfoScreen(u8 taskId) FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); PutWindowTilemap(WIN_FOOTPRINT); - PrintFootprint(WIN_FOOTPRINT, sPokedexListItem->dexNum); - CopyWindowToVram(WIN_FOOTPRINT, 2); + DrawFootprint(WIN_FOOTPRINT, sPokedexListItem->dexNum); + CopyWindowToVram(WIN_FOOTPRINT, COPYWIN_GFX); gMain.state++; break; case 2: @@ -3252,16 +3265,16 @@ static void Task_LoadInfoScreen(u8 taskId) PrintMonInfo(sPokedexListItem->dexNum, sPokedexView->dexMode == DEX_MODE_HOENN ? FALSE : TRUE, sPokedexListItem->owned, 0); if (!sPokedexListItem->owned) LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E); - CopyWindowToVram(WIN_INFO, 3); + CopyWindowToVram(WIN_INFO, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); gMain.state++; break; case 5: - if (gTasks[taskId].data[1] == 0) + if (!gTasks[taskId].tMonSpriteDone) { - gTasks[taskId].tMonSpriteId = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0); + gTasks[taskId].tMonSpriteId = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, MON_PAGE_X, MON_PAGE_Y, 0); gSprites[gTasks[taskId].tMonSpriteId].oam.priority = 0; } gMain.state++; @@ -3270,9 +3283,9 @@ static void Task_LoadInfoScreen(u8 taskId) { u32 preservedPalettes = 0; - if (gTasks[taskId].data[2] != 0) + if (gTasks[taskId].tBgLoaded) preservedPalettes = 0x14; // each bit represents a palette index - if (gTasks[taskId].data[1] != 0) + if (gTasks[taskId].tMonSpriteDone) preservedPalettes |= (1 << (gSprites[gTasks[taskId].tMonSpriteId].oam.paletteNum + 16)); BeginNormalPaletteFade(~preservedPalettes, 0, 16, 0, RGB_BLACK); SetVBlankCallback(gPokedexVBlankCB); @@ -3294,10 +3307,10 @@ static void Task_LoadInfoScreen(u8 taskId) if (!gPaletteFade.active) { gMain.state++; - if (gTasks[taskId].data[3] == 0) + if (!gTasks[taskId].tSkipCry) { StopCryAndClearCrySongs(); - PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 0x7D, 0xA); + PlayCry_NormalNoDucking(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, CRY_VOLUME_RS, CRY_PRIORITY_NORMAL); } else { @@ -3310,10 +3323,10 @@ static void Task_LoadInfoScreen(u8 taskId) gMain.state++; break; case 10: - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 1; - gTasks[taskId].data[3] = 1; + gTasks[taskId].tScrolling = FALSE; + gTasks[taskId].tMonSpriteDone = FALSE; // Reload next time screen comes up + gTasks[taskId].tBgLoaded = TRUE; + gTasks[taskId].tSkipCry = TRUE; gTasks[taskId].func = Task_HandleInfoScreenInput; gMain.state = 0; break; @@ -3341,7 +3354,7 @@ static void FreeInfoScreenWindowAndBgBuffers(void) static void Task_HandleInfoScreenInput(u8 taskId) { - if (gTasks[taskId].data[0] != 0) + if (gTasks[taskId].tScrolling) { // Scroll up/down BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); @@ -3393,8 +3406,8 @@ static void Task_HandleInfoScreenInput(u8 taskId) } return; } - if (((JOY_NEW(DPAD_LEFT)) - || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if ((JOY_NEW(DPAD_LEFT) + || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) && sPokedexView->selectedScreen > 0) { sPokedexView->selectedScreen--; @@ -3402,8 +3415,8 @@ static void Task_HandleInfoScreenInput(u8 taskId) PlaySE(SE_DEX_PAGE); return; } - if (((JOY_NEW(DPAD_RIGHT)) - || ((JOY_NEW(R_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if ((JOY_NEW(DPAD_RIGHT) + || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) && sPokedexView->selectedScreen < CANCEL_SCREEN) { sPokedexView->selectedScreen++; @@ -3552,7 +3565,7 @@ static void Task_LoadCryScreen(u8 taskId) gMain.state++; break; case 5: - gTasks[taskId].tMonSpriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0); + gTasks[taskId].tMonSpriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, MON_PAGE_X, MON_PAGE_Y, 0); gSprites[gTasks[taskId].tMonSpriteId].oam.priority = 0; gDexCryScreenState = 0; gMain.state++; @@ -3582,8 +3595,8 @@ static void Task_LoadCryScreen(u8 taskId) cryMeter.yPos = 3; if (LoadCryMeter(&cryMeter, 3)) gMain.state++; - CopyWindowToVram(WIN_VU_METER, 2); - CopyWindowToVram(WIN_INFO, 3); + CopyWindowToVram(WIN_VU_METER, COPYWIN_GFX); + CopyWindowToVram(WIN_INFO, COPYWIN_FULL); CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); @@ -3640,8 +3653,8 @@ static void Task_HandleCryScreenInput(u8 taskId) PlaySE(SE_PC_OFF); return; } - if ((JOY_NEW(DPAD_LEFT)) - || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if (JOY_NEW(DPAD_LEFT) + || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(PALETTES_ALL & ~(0x14), 0, 0, 0x10, RGB_BLACK); m4aMPlayContinue(&gMPlayInfo_BGM); @@ -3650,8 +3663,8 @@ static void Task_HandleCryScreenInput(u8 taskId) PlaySE(SE_DEX_PAGE); return; } - if ((JOY_NEW(DPAD_RIGHT)) - || ((JOY_NEW(R_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if (JOY_NEW(DPAD_RIGHT) + || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { if (!sPokedexListItem->owned) { @@ -3740,7 +3753,7 @@ static void Task_LoadSizeScreen(u8 taskId) StringCopy(string, gText_SizeComparedTo); StringAppend(string, gSaveBlock2Ptr->playerName); - PrintInfoScreenText(string, GetStringCenterAlignXOffset(1, string, 0xF0), 0x79); + PrintInfoScreenText(string, GetStringCenterAlignXOffset(FONT_NORMAL, string, 0xF0), 0x79); gMain.state++; } break; @@ -3756,7 +3769,7 @@ static void Task_LoadSizeScreen(u8 taskId) gSprites[spriteId].y2 = gPokedexEntries[sPokedexListItem->dexNum].trainerOffset; SetOamMatrix(1, gPokedexEntries[sPokedexListItem->dexNum].trainerScale, 0, 0, gPokedexEntries[sPokedexListItem->dexNum].trainerScale); LoadPalette(sSizeScreenSilhouette_Pal, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20); - gTasks[taskId].data[5] = spriteId; + gTasks[taskId].tTrainerSpriteId = spriteId; gMain.state++; break; case 6: @@ -3768,7 +3781,7 @@ static void Task_LoadSizeScreen(u8 taskId) SetOamMatrix(2, gPokedexEntries[sPokedexListItem->dexNum].pokemonScale, 0, 0, gPokedexEntries[sPokedexListItem->dexNum].pokemonScale); LoadPalette(sSizeScreenSilhouette_Pal, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20); gTasks[taskId].tMonSpriteId = spriteId; - CopyWindowToVram(WIN_INFO, 3); + CopyWindowToVram(WIN_INFO, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); @@ -3810,8 +3823,8 @@ static void Task_HandleSizeScreenInput(u8 taskId) gTasks[taskId].func = Task_SwitchScreensFromSizeScreen; PlaySE(SE_PC_OFF); } - else if ((JOY_NEW(DPAD_LEFT)) - || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + else if (JOY_NEW(DPAD_LEFT) + || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(PALETTES_ALL & ~(0x14), 0, 0, 0x10, RGB_BLACK); sPokedexView->screenSwitchState = 2; @@ -3825,7 +3838,7 @@ static void Task_SwitchScreensFromSizeScreen(u8 taskId) if (!gPaletteFade.active) { FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId); - FreeAndDestroyTrainerPicSprite(gTasks[taskId].data[5]); + FreeAndDestroyTrainerPicSprite(gTasks[taskId].tTrainerSpriteId); switch (sPokedexView->screenSwitchState) { default: @@ -3839,7 +3852,12 @@ static void Task_SwitchScreensFromSizeScreen(u8 taskId) } } +#undef tScrolling +#undef tMonSpriteDone +#undef tBgLoaded +#undef tSkipCry #undef tMonSpriteId +#undef tTrainerSpriteId static void LoadScreenSelectBarMain(u16 unused) { @@ -3855,7 +3873,7 @@ static void HighlightScreenSelectBarItem(u8 selectedScreen, u16 unused) { u8 i; u8 j; - u16* ptr = GetBgTilemapBuffer(1); + u16 *ptr = GetBgTilemapBuffer(1); for (i = 0; i < SCREEN_COUNT; i++) { @@ -3882,7 +3900,7 @@ static void HighlightSubmenuScreenSelectBarItem(u8 a, u16 b) { u8 i; u8 j; - u16* ptr = GetBgTilemapBuffer(1); + u16 *ptr = GetBgTilemapBuffer(1); for (i = 0; i < 4; i++) { @@ -3957,8 +3975,8 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId) FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); PutWindowTilemap(WIN_FOOTPRINT); - PrintFootprint(WIN_FOOTPRINT, gTasks[taskId].tDexNum); - CopyWindowToVram(WIN_FOOTPRINT, 2); + DrawFootprint(WIN_FOOTPRINT, gTasks[taskId].tDexNum); + CopyWindowToVram(WIN_FOOTPRINT, COPYWIN_GFX); ResetPaletteFade(); LoadPokedexBgPalette(FALSE); gTasks[taskId].tState++; @@ -3968,13 +3986,13 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId) break; case 3: PrintMonInfo(dexNum, IsNationalPokedexEnabled(), 1, 1); - CopyWindowToVram(WIN_INFO, 3); + CopyWindowToVram(WIN_INFO, COPYWIN_FULL); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); gTasks[taskId].tState++; break; case 4: - spriteId = CreateMonSpriteFromNationalDexNumber(dexNum, 48, 56, 0); + spriteId = CreateMonPicSprite(NationalPokedexNumToSpecies(dexNum), 0, ((u16)gTasks[taskId].tPersonalityHi << 16) | (u16)gTasks[taskId].tPersonalityLo, TRUE, MON_PAGE_X, MON_PAGE_Y, 0, TAG_NONE); gSprites[spriteId].oam.priority = 0; BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); SetVBlankCallback(gPokedexVBlankCB); @@ -3993,7 +4011,7 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId) case 6: if (!gPaletteFade.active) { - PlayCry1(NationalPokedexNumToSpecies(dexNum), 0); + PlayCry_Normal(NationalPokedexNumToSpecies(dexNum), 0); gTasks[taskId].tPalTimer = 0; gTasks[taskId].func = Task_HandleCaughtMonPageInput; } @@ -4083,7 +4101,7 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) const u8 *description; if (newEntry) - PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(1, gText_PokedexRegistration, 0xF0), 0); + PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(FONT_NORMAL, gText_PokedexRegistration, 0xF0), 0); if (value == 0) value = NationalToHoennOrder(num); else @@ -4121,8 +4139,8 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) if (owned) description = gPokedexEntries[num].description; else - description = gExpandedPlaceholder_PokedexDescription; - PrintInfoScreenText(description, GetStringCenterAlignXOffset(1, description, 0xF0), 0x5F); + description = sExpandedPlaceholder_PokedexDescription; + PrintInfoScreenText(description, GetStringCenterAlignXOffset(FONT_NORMAL, description, 0xF0), 0x5F); } static void PrintMonHeight(u16 height, u8 left, u8 top) @@ -4150,10 +4168,10 @@ static void PrintMonHeight(u16 height, u8 left, u8 top) buffer[i++] = feet / 10 + CHAR_0; buffer[i++] = (feet % 10) + CHAR_0; } - buffer[i++] = CHAR_SGL_QUOT_RIGHT; + buffer[i++] = CHAR_SGL_QUOTE_RIGHT; buffer[i++] = (inches / 10) + CHAR_0; buffer[i++] = (inches % 10) + CHAR_0; - buffer[i++] = CHAR_DBL_QUOT_RIGHT; + buffer[i++] = CHAR_DBL_QUOTE_RIGHT; buffer[i++] = EOS; PrintInfoScreenText(buffer, left, top); } @@ -4172,7 +4190,7 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) if ((buffer[i] = (lbs / 100000) + CHAR_0) == CHAR_0 && !output) { - buffer[i++] = 0x77; + buffer[i++] = CHAR_SPACER; } else { @@ -4183,7 +4201,7 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) lbs %= 100000; if ((buffer[i] = (lbs / 10000) + CHAR_0) == CHAR_0 && !output) { - buffer[i++] = 0x77; + buffer[i++] = CHAR_SPACER; } else { @@ -4194,7 +4212,7 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) lbs %= 10000; if ((buffer[i] = (lbs / 1000) + CHAR_0) == CHAR_0 && !output) { - buffer[i++] = 0x77; + buffer[i++] = CHAR_SPACER; } else { @@ -4382,37 +4400,37 @@ bool16 HasAllMons(void) return TRUE; } -static void ResetOtherVideoRegisters(u16 a) +static void ResetOtherVideoRegisters(u16 regBits) { - if (!(a & DISPCNT_BG0_ON)) + if (!(regBits & DISPCNT_BG0_ON)) { ClearGpuRegBits(0, DISPCNT_BG0_ON); SetGpuReg(REG_OFFSET_BG0CNT, 0); SetGpuReg(REG_OFFSET_BG0HOFS, 0); SetGpuReg(REG_OFFSET_BG0VOFS, 0); } - if (!(a & DISPCNT_BG1_ON)) + if (!(regBits & DISPCNT_BG1_ON)) { ClearGpuRegBits(0, DISPCNT_BG1_ON); SetGpuReg(REG_OFFSET_BG1CNT, 0); SetGpuReg(REG_OFFSET_BG1HOFS, 0); SetGpuReg(REG_OFFSET_BG1VOFS, 0); } - if (!(a & DISPCNT_BG2_ON)) + if (!(regBits & DISPCNT_BG2_ON)) { ClearGpuRegBits(0, DISPCNT_BG2_ON); SetGpuReg(REG_OFFSET_BG2CNT, 0); SetGpuReg(REG_OFFSET_BG2HOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 0); } - if (!(a & DISPCNT_BG3_ON)) + if (!(regBits & DISPCNT_BG3_ON)) { ClearGpuRegBits(0, DISPCNT_BG3_ON); SetGpuReg(REG_OFFSET_BG3CNT, 0); SetGpuReg(REG_OFFSET_BG3HOFS, 0); SetGpuReg(REG_OFFSET_BG3VOFS, 0); } - if (!(a & DISPCNT_OBJ_ON)) + if (!(regBits & DISPCNT_OBJ_ON)) { ClearGpuRegBits(0, DISPCNT_OBJ_ON); ResetSpriteData(); @@ -4428,7 +4446,7 @@ static void PrintInfoSubMenuText(u8 windowId, const u8 *str, u8 left, u8 top) color[1] = TEXT_DYNAMIC_COLOR_6; color[2] = TEXT_COLOR_LIGHT_GRAY; - AddTextPrinterParameterized4(windowId, 1, left, top, 0, 0, color, -1, str); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, left, top, 0, 0, color, TEXT_SKIP_DRAW, str); } static void UnusedPrintNum(u8 windowId, u16 num, u8 left, u8 top) @@ -4465,7 +4483,7 @@ static u8 PrintCryScreenSpeciesName(u8 windowId, u16 num, u8 left, u8 top) return i; } -static void UnusedPrintMonName(u8 windowId, const u8* name, u8 left, u8 top) +static void UnusedPrintMonName(u8 windowId, const u8 *name, u8 left, u8 top) { u8 str[POKEMON_NAME_LENGTH + 1]; u8 i; @@ -4485,16 +4503,17 @@ static void UnusedPrintMonName(u8 windowId, const u8* name, u8 left, u8 top) PrintInfoSubMenuText(windowId, str, left, top); } -static void UnusedPrintDecimalNum(u8 windowId, u16 b, u8 left, u8 top) +// Unused in the English version, used to print height/weight in versions which use metric system. +static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top) { u8 str[6]; bool8 outputted = FALSE; u8 result; - result = b / 1000; + result = num / 1000; if (result == 0) { - str[0] = 0x77; + str[0] = CHAR_SPACER; outputted = FALSE; } else @@ -4503,10 +4522,10 @@ static void UnusedPrintDecimalNum(u8 windowId, u16 b, u8 left, u8 top) outputted = TRUE; } - result = (b % 1000) / 100; + result = (num % 1000) / 100; if (result == 0 && !outputted) { - str[1] = 0x77; + str[1] = CHAR_SPACER; outputted = FALSE; } else @@ -4515,44 +4534,44 @@ static void UnusedPrintDecimalNum(u8 windowId, u16 b, u8 left, u8 top) outputted = TRUE; } - str[2] = CHAR_0 + ((b % 1000) % 100) / 10; - str[3] = CHAR_PERIOD; - str[4] = CHAR_0 + ((b % 1000) % 100) % 10; + str[2] = CHAR_0 + ((num % 1000) % 100) / 10; + str[3] = CHAR_DEC_SEPARATOR; + str[4] = CHAR_0 + ((num % 1000) % 100) % 10; str[5] = EOS; PrintInfoSubMenuText(windowId, str, left, top); } -static void PrintFootprint(u8 windowId, u16 dexNum) +static void DrawFootprint(u8 windowId, u16 dexNum) { - u8 image[32 * 4] = {0}; - const u8 * r12 = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)]; - u32 i, j, r5 = 0; + u8 footprint[32 * 4] = {0}; + const u8 *footprintGfx = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)]; + u32 i, j, tileIdx = 0; - if (r12 != NULL) + if (footprintGfx != NULL) { for (i = 0; i < 32; i++) { - u8 r3 = r12[i]; + u8 tile = footprintGfx[i]; for (j = 0; j < 4; j++) { - u8 value = ((r3 >> (2 * j)) & 1 ? 2 : 0); - if ((2 << (2 * j)) & r3) + u8 value = ((tile >> (2 * j)) & 1 ? 2 : 0); + if (tile & (2 << (2 * j))) value |= 0x20; - image[r5] = value; - r5++; + footprint[tileIdx] = value; + tileIdx++; } } } - CopyToWindowPixelBuffer(windowId, image, sizeof(image), 0); + CopyToWindowPixelBuffer(windowId, footprint, sizeof(footprint), 0); } -// Unused -void sub_80C0DC0(u16 a, u16 b) +// Unused Ruby/Sapphire function. +static void RS_DrawFootprint(u16 offset, u16 tileNum) { - *(u16 *)(VRAM + a * 0x800 + 0x232) = 0xF000 + b + 0; - *(u16 *)(VRAM + a * 0x800 + 0x234) = 0xF000 + b + 1; - *(u16 *)(VRAM + a * 0x800 + 0x272) = 0xF000 + b + 2; - *(u16 *)(VRAM + a * 0x800 + 0x274) = 0xF000 + b + 3; + *(u16 *)(VRAM + offset * 0x800 + 0x232) = 0xF000 + tileNum + 0; + *(u16 *)(VRAM + offset * 0x800 + 0x234) = 0xF000 + tileNum + 1; + *(u16 *)(VRAM + offset * 0x800 + 0x272) = 0xF000 + tileNum + 2; + *(u16 *)(VRAM + offset * 0x800 + 0x274) = 0xF000 + tileNum + 3; } static u16 GetNextPosition(u8 direction, u16 position, u16 min, u16 max) @@ -4603,12 +4622,12 @@ static u32 GetPokedexMonPersonality(u16 species) u16 CreateMonSpriteFromNationalDexNumber(u16 nationalNum, s16 x, s16 y, u16 paletteSlot) { nationalNum = NationalPokedexNumToSpecies(nationalNum); - return CreateMonPicSprite(nationalNum, SHINY_ODDS, GetPokedexMonPersonality(nationalNum), TRUE, x, y, paletteSlot, 0xFFFF); + return CreateMonPicSprite(nationalNum, SHINY_ODDS, GetPokedexMonPersonality(nationalNum), TRUE, x, y, paletteSlot, TAG_NONE); } static u16 CreateSizeScreenTrainerPic(u16 species, s16 x, s16 y, s8 paletteSlot) { - return CreateTrainerPicSprite(species, TRUE, x, y, paletteSlot, 0xFFFF); + return CreateTrainerPicSprite(species, TRUE, x, y, paletteSlot, TAG_NONE); } static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) @@ -4737,7 +4756,7 @@ static void PrintSearchText(const u8 *str, u32 x, u32 y) color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_DYNAMIC_COLOR_6; color[2] = TEXT_COLOR_DARK_GRAY; - AddTextPrinterParameterized4(0, 1, x, y, 0, 0, color, -1, str); + AddTextPrinterParameterized4(0, FONT_NORMAL, x, y, 0, 0, color, TEXT_SKIP_DRAW, str); } static void ClearSearchMenuRect(u32 x, u32 y, u32 width, u32 height) @@ -4803,7 +4822,7 @@ static void Task_LoadSearchMenu(u8 taskId) SetDefaultSearchModeAndOrder(taskId); HighlightSelectedSearchTopBarItem(SEARCH_TOPBAR_SEARCH); PrintSelectedSearchParameters(taskId); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); @@ -4836,7 +4855,7 @@ static void Task_LoadSearchMenu(u8 taskId) static void FreeSearchWindowAndBgBuffers(void) { - void* tilemapBuffer; + void *tilemapBuffer; FreeAllWindowBuffers(); tilemapBuffer = GetBgTilemapBuffer(0); @@ -4857,7 +4876,7 @@ static void Task_SwitchToSearchMenuTopBar(u8 taskId) { HighlightSelectedSearchTopBarItem(gTasks[taskId].tTopBarItem); PrintSelectedSearchParameters(taskId); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); gTasks[taskId].func = Task_HandleSearchTopBarInput; } @@ -4891,20 +4910,20 @@ static void Task_HandleSearchTopBarInput(u8 taskId) } return; } - if ((JOY_NEW(DPAD_LEFT)) && gTasks[taskId].tTopBarItem > SEARCH_TOPBAR_SEARCH) + if (JOY_NEW(DPAD_LEFT) && gTasks[taskId].tTopBarItem > SEARCH_TOPBAR_SEARCH) { PlaySE(SE_DEX_PAGE); gTasks[taskId].tTopBarItem--; HighlightSelectedSearchTopBarItem(gTasks[taskId].tTopBarItem); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_RIGHT)) && gTasks[taskId].tTopBarItem < SEARCH_TOPBAR_CANCEL) + if (JOY_NEW(DPAD_RIGHT) && gTasks[taskId].tTopBarItem < SEARCH_TOPBAR_CANCEL) { PlaySE(SE_DEX_PAGE); gTasks[taskId].tTopBarItem++; HighlightSelectedSearchTopBarItem(gTasks[taskId].tTopBarItem); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); } } @@ -4913,7 +4932,7 @@ static void Task_SwitchToSearchMenu(u8 taskId) { HighlightSelectedSearchMenuItem(gTasks[taskId].tTopBarItem, gTasks[taskId].tMenuItem); PrintSelectedSearchParameters(taskId); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); gTasks[taskId].func = Task_HandleSearchMenuInput; } @@ -4969,7 +4988,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) EraseAndPrintSearchTextBox(gText_SearchingPleaseWait); gTasks[taskId].func = Task_StartPokedexSearch; PlaySE(SE_DEX_SEARCH); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); } } else @@ -4980,36 +4999,36 @@ static void Task_HandleSearchMenuInput(u8 taskId) return; } - if ((JOY_NEW(DPAD_LEFT)) && movementMap[gTasks[taskId].tMenuItem][0] != 0xFF) + if (JOY_NEW(DPAD_LEFT) && movementMap[gTasks[taskId].tMenuItem][0] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][0]; HighlightSelectedSearchMenuItem(gTasks[taskId].tTopBarItem, gTasks[taskId].tMenuItem); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_RIGHT)) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) + if (JOY_NEW(DPAD_RIGHT) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][1]; HighlightSelectedSearchMenuItem(gTasks[taskId].tTopBarItem, gTasks[taskId].tMenuItem); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_UP)) && movementMap[gTasks[taskId].tMenuItem][2] != 0xFF) + if (JOY_NEW(DPAD_UP) && movementMap[gTasks[taskId].tMenuItem][2] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][2]; HighlightSelectedSearchMenuItem(gTasks[taskId].tTopBarItem, gTasks[taskId].tMenuItem); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_DOWN)) && movementMap[gTasks[taskId].tMenuItem][3] != 0xFF) + if (JOY_NEW(DPAD_DOWN) && movementMap[gTasks[taskId].tMenuItem][3] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][3]; HighlightSelectedSearchMenuItem(gTasks[taskId].tTopBarItem, gTasks[taskId].tMenuItem); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); } } @@ -5042,7 +5061,7 @@ static void Task_WaitAndCompleteSearch(u8 taskId) EraseAndPrintSearchTextBox(gText_NoMatchingPkmnWereFound); } gTasks[taskId].func = Task_SearchCompleteWaitForInput; - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); } } @@ -5082,7 +5101,7 @@ static void Task_SelectSearchMenuItem(u8 taskId) PrintSearchParameterText(taskId); PrintSelectorArrow(*cursorPos); gTasks[taskId].func = Task_HandleSearchParameterInput; - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); } @@ -5107,7 +5126,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) ClearSearchParameterBoxText(); DrawOrEraseSearchParameterBox(TRUE); gTasks[taskId].func = Task_SwitchToSearchMenu; - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); return; } @@ -5119,7 +5138,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) *cursorPos = gTasks[taskId].tCursorPos; *scrollOffset = gTasks[taskId].tScrollOffset; gTasks[taskId].func = Task_SwitchToSearchMenu; - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); CopyBgTilemapBufferToVram(3); return; } @@ -5146,7 +5165,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) { PlaySE(SE_SELECT); EraseAndPrintSearchTextBox(texts[*cursorPos + *scrollOffset].description); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); } return; } @@ -5172,7 +5191,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) { PlaySE(SE_SELECT); EraseAndPrintSearchTextBox(texts[*cursorPos + *scrollOffset].description); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); } return; } @@ -5205,7 +5224,7 @@ void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width) temp &= 0x0fff; temp |= (flags << 12); *(u16 *)(ptr + (y + 0) * 64 + (x + i) * 2) = temp; - + temp = *(u16 *)(ptr + (y + 1) * 64 + (x + i) * 2); temp &= 0x0fff; temp |= (flags << 12); @@ -5375,7 +5394,7 @@ static void DrawOrEraseSearchParameterBox(bool8 erase) { u16 i; u16 j; - u16* ptr = GetBgTilemapBuffer(3); + u16 *ptr = GetBgTilemapBuffer(3); if (!erase) { @@ -5568,7 +5587,7 @@ static void CreateSearchParameterScrollArrows(u8 taskId) #undef sTaskId #undef sIsDownArrow -static void EraseAndPrintSearchTextBox(const u8* str) +static void EraseAndPrintSearchTextBox(const u8 *str) { ClearSearchMenuRect(8, 120, 224, 32); PrintSearchText(str, 8, 121); @@ -5584,7 +5603,7 @@ static void PrintSelectorArrow(u32 y) PrintSearchText(gText_SelectorArrow, 144, y * 16 + 9); } -static void PrintSearchParameterTitle(u32 y, const u8* str) +static void PrintSearchParameterTitle(u32 y, const u8 *str) { PrintSearchText(str, 152, y * 16 + 9); } diff --git a/src/pokedex_area_region_map.c b/src/pokedex_area_region_map.c index 82d5e50e51..ff32f8eef1 100644 --- a/src/pokedex_area_region_map.c +++ b/src/pokedex_area_region_map.c @@ -8,40 +8,44 @@ static EWRAM_DATA u8 *sPokedexAreaMapBgNum = NULL; -static const u16 sPokedexAreaMap_Pal[] = INCBIN_U16("graphics/interface/region_map.gbapal"); -static const u32 sPokedexAreaMap_Gfx[] = INCBIN_U32("graphics/interface/region_map.8bpp.lz"); -static const u32 sPokedexAreaMap_Tilemap[] = INCBIN_U32("graphics/interface/region_map.bin.lz"); -static const u32 sPokedexAreaMapAffine_Gfx[] = INCBIN_U32("graphics/interface/region_map_affine.8bpp.lz"); -static const u32 sPokedexAreaMapAffine_Tilemap[] = INCBIN_U32("graphics/interface/region_map_affine.bin.lz"); +static const u16 sPokedexAreaMap_Pal[] = INCBIN_U16("graphics/pokedex/region_map.gbapal"); +static const u32 sPokedexAreaMap_Gfx[] = INCBIN_U32("graphics/pokedex/region_map.8bpp.lz"); +static const u32 sPokedexAreaMap_Tilemap[] = INCBIN_U32("graphics/pokedex/region_map.bin.lz"); +static const u32 sPokedexAreaMapAffine_Gfx[] = INCBIN_U32("graphics/pokedex/region_map_affine.8bpp.lz"); +static const u32 sPokedexAreaMapAffine_Tilemap[] = INCBIN_U32("graphics/pokedex/region_map_affine.bin.lz"); void LoadPokedexAreaMapGfx(const struct PokedexAreaMapTemplate *template) { u8 mode; - sPokedexAreaMapBgNum = Alloc(4); + void * tilemap; + sPokedexAreaMapBgNum = Alloc(sizeof(sPokedexAreaMapBgNum)); mode = template->mode; if (mode == 0) { SetBgAttribute(template->bg, BG_ATTR_METRIC, 0); DecompressAndCopyTileDataToVram(template->bg, sPokedexAreaMap_Gfx, 0, template->offset, 0); - sub_8199D3C(DecompressAndCopyTileDataToVram(template->bg, sPokedexAreaMap_Tilemap, 0, 0, 1), template->offset, 32, 32, FALSE); + tilemap = DecompressAndCopyTileDataToVram(template->bg, sPokedexAreaMap_Tilemap, 0, 0, 1); + AddValToTilemapBuffer(tilemap, template->offset, 32, 32, FALSE); // template->offset is always 0, so this does nothing. } else { + // This is never reached, only a mode of 0 is given SetBgAttribute(template->bg, BG_ATTR_METRIC, 2); - SetBgAttribute(template->bg, BG_ATTR_TYPE, 1); + SetBgAttribute(template->bg, BG_ATTR_TYPE, BG_TYPE_AFFINE); // This does nothing. BG_ATTR_TYPE can't be set with this function DecompressAndCopyTileDataToVram(template->bg, sPokedexAreaMapAffine_Gfx, 0, template->offset, 0); - sub_8199D3C(DecompressAndCopyTileDataToVram(template->bg, sPokedexAreaMapAffine_Tilemap, 0, 0, 1), template->offset, 64, 64, TRUE); + tilemap = DecompressAndCopyTileDataToVram(template->bg, sPokedexAreaMapAffine_Tilemap, 0, 0, 1); + AddValToTilemapBuffer(tilemap, template->offset, 64, 64, TRUE); // template->offset is always 0, so this does nothing. } - ChangeBgX(template->bg, 0, 0); - ChangeBgY(template->bg, 0, 0); + ChangeBgX(template->bg, 0, BG_COORD_SET); + ChangeBgY(template->bg, 0, BG_COORD_SET); SetBgAttribute(template->bg, BG_ATTR_PALETTEMODE, 1); - CpuCopy32(sPokedexAreaMap_Pal, &gPlttBufferUnfaded[0x70], 0x60); + CpuCopy32(sPokedexAreaMap_Pal, &gPlttBufferUnfaded[0x70], sizeof(sPokedexAreaMap_Pal)); *sPokedexAreaMapBgNum = template->bg; } -bool32 sub_81C4E90(void) +bool32 TryShowPokedexAreaMap(void) { if (!FreeTempTileDataBuffersIfPossible()) { @@ -56,11 +60,10 @@ bool32 sub_81C4E90(void) void FreePokedexAreaMapBgNum(void) { - if (sPokedexAreaMapBgNum != NULL) - FREE_AND_SET_NULL(sPokedexAreaMapBgNum); + TRY_FREE_AND_SET_NULL(sPokedexAreaMapBgNum); } -void PokedexAreaMapChangeBgY(u32 a0) +void PokedexAreaMapChangeBgY(u32 move) { - ChangeBgY(*sPokedexAreaMapBgNum, a0 * 0x100, 0); + ChangeBgY(*sPokedexAreaMapBgNum, move * 0x100, BG_COORD_SET); } diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index f9cf423092..dde86f1557 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -16,78 +16,96 @@ #include "trig.h" #include "pokedex_area_region_map.h" #include "wild_encounter.h" -#include "constants/maps.h" #include "constants/region_map_sections.h" #include "constants/rgb.h" #include "constants/songs.h" +// There are two types of indicators for the area screen to show where a Pokémon can occur: +// - Area glows, which highlight any of the maps in MAP_GROUP_TOWNS_AND_ROUTES that have the species. +// These are a tilemap with colored rectangular areas that blends in and out. The positions of the +// rectangles is determined by the positions of the matching MAPSEC values on the region map layout. +// - Area markers, which highlight any of the maps in MAP_GROUP_DUNGEONS or MAP_GROUP_SPECIAL_AREA that +// have the species. These are circular sprites that flash twice. The positions of the sprites is +// determined by the data for the corresponding MAPSEC in gRegionMapEntries. + +// Only maps in the following map groups have their encounters considered for the area screen +#define MAP_GROUP_TOWNS_AND_ROUTES MAP_GROUP(PETALBURG_CITY) +#define MAP_GROUP_DUNGEONS MAP_GROUP(METEOR_FALLS_1F_1R) +#define MAP_GROUP_SPECIAL_AREA MAP_GROUP(SAFARI_ZONE_NORTHWEST) + #define AREA_SCREEN_WIDTH 32 #define AREA_SCREEN_HEIGHT 20 -#define GLOW_TILE_FULL 0xFFFF -#define GLOW_TILE_LEFT (1 << 0) -#define GLOW_TILE_RIGHT (1 << 1) -#define GLOW_TILE_TOP (1 << 2) -#define GLOW_TILE_BOTTOM (1 << 3) -#define GLOW_TILE_BOTTOM_RIGHT (1 << 4) -#define GLOW_TILE_TOP_RIGHT (1 << 5) -#define GLOW_TILE_BOTTOM_LEFT (1 << 6) -#define GLOW_TILE_TOP_LEFT (1 << 7) +#define GLOW_FULL 0xFFFF +#define GLOW_EDGE_R (1 << 0) +#define GLOW_EDGE_L (1 << 1) +#define GLOW_EDGE_B (1 << 2) +#define GLOW_EDGE_T (1 << 3) +#define GLOW_CORNER_TL (1 << 4) +#define GLOW_CORNER_BL (1 << 5) +#define GLOW_CORNER_TR (1 << 6) +#define GLOW_CORNER_BR (1 << 7) -struct PokeDexAreaScreenMapIdentity +#define GLOW_PALETTE 10 + +#define TAG_AREA_MARKER 2 +#define TAG_AREA_UNKNOWN 3 + +#define MAX_AREA_HIGHLIGHTS 64 // Maximum number of rectangular route highlights +#define MAX_AREA_MARKERS 32 // Maximum number of circular spot highlights + +struct OverworldArea { u8 mapGroup; u8 mapNum; u16 regionMapSectionId; }; -struct PokeDexAreaScreen +struct { /*0x000*/ void (*callback)(void); // unused /*0x004*/ MainCallback prev; // unused /*0x008*/ MainCallback next; // unused /*0x00C*/ u16 state; // unused /*0x00E*/ u16 species; - /*0x010*/ struct PokeDexAreaScreenMapIdentity overworldAreasWithMons[0x40]; + /*0x010*/ struct OverworldArea overworldAreasWithMons[MAX_AREA_HIGHLIGHTS]; /*0x110*/ u16 numOverworldAreas; /*0x112*/ u16 numSpecialAreas; /*0x114*/ u16 drawAreaGlowState; - /*0x116*/ u16 areaGlowTilemap[0x280]; - /*0x616*/ u16 areaShadeOrMarkerFrameCounter; - /*0x618*/ u16 areaShadeFrameCounter; + /*0x116*/ u16 areaGlowTilemap[AREA_SCREEN_WIDTH * AREA_SCREEN_HEIGHT]; + /*0x616*/ u16 markerTimer; + /*0x618*/ u16 glowTimer; /*0x61A*/ u16 areaShadeBldArgLo; /*0x61C*/ u16 areaShadeBldArgHi; - /*0x61E*/ u8 whichMarkersFlashing; - /*0x61F*/ u8 specialMarkerCycleCounter; - /*0x620*/ u16 specialAreaRegionMapSectionIds[0x20]; - /*0x660*/ struct Sprite *areaMarkerSprites[0x20]; + /*0x61E*/ bool8 showingMarkers; + /*0x61F*/ u8 markerFlashCounter; + /*0x620*/ u16 specialAreaRegionMapSectionIds[MAX_AREA_MARKERS]; + /*0x660*/ struct Sprite *areaMarkerSprites[MAX_AREA_MARKERS]; /*0x6E0*/ u16 numAreaMarkerSprites; - /*0x6E2*/ u16 unk6E2; - /*0x6E4*/ u16 unk6E4; + /*0x6E2*/ u16 alteringCaveCounter; + /*0x6E4*/ u16 alteringCaveId; /*0x6E8*/ u8 *screenSwitchState; /*0x6EC*/ struct RegionMap regionMap; - /*0xF70*/ u8 charBuffer[0x40]; + /*0xF70*/ u8 charBuffer[64]; /*0xFB0*/ struct Sprite * areaUnknownSprites[3]; /*0xFBC*/ u8 areaUnknownGraphicsBuffer[0x600]; -}; - -static EWRAM_DATA struct PokeDexAreaScreen *sPokedexAreaScreen = NULL; +} static EWRAM_DATA *sPokedexAreaScreen = NULL; static void FindMapsWithMon(u16); static void BuildAreaGlowTilemap(void); static void SetAreaHasMon(u16, u16); static void SetSpecialMapHasMon(u16, u16); static u16 GetRegionMapSectionId(u8, u8); -static bool8 MapHasMon(const struct WildPokemonHeader *, u16); -static bool8 MonListHasMon(const struct WildPokemonInfo *, u16, u16); +static bool8 MapHasSpecies(const struct WildPokemonHeader *, u16); +static bool8 MonListHasSpecies(const struct WildPokemonInfo *, u16, u16); static void DoAreaGlow(void); static void Task_ShowPokedexAreaScreen(u8); static void CreateAreaMarkerSprites(void); static void LoadAreaUnknownGraphics(void); static void CreateAreaUnknownSprites(void); static void Task_HandlePokedexAreaScreenInput(u8); -static void sub_813D6B4(void); -static void DestroyAreaMarkerSprites(void); +static void ResetPokedexAreaMapBg(void); +static void DestroyAreaScreenSprites(void); static const u32 sAreaGlow_Pal[] = INCBIN_U32("graphics/pokedex/area_glow.gbapal"); static const u32 sAreaGlow_Gfx[] = INCBIN_U32("graphics/pokedex/area_glow.4bpp.lz"); @@ -118,115 +136,7 @@ static const u16 sLandmarkData[][2] = {MAPSEC_NONE} }; -// Only some parts of this array are acutally used, because corner flags that overlap -// with edge flags are cancelled out before lookup. For example, GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_RIGHT -// will never be read. -// -// The rest of the bytes seem to be old data from before the cancellation was implemented. -// Most of them line up as you would expect ([BOTTOM_RIGHT | RIGHT] has the same value as [RIGHT]). -// -// Any unreachable entries are simply listed in order, without the fancy "[FLAGS] = 0xXX" notation. -static const u8 sAreaGlowTilemapMapping[] = { - [0] = 0x00, - [GLOW_TILE_LEFT] = 0x01, - [GLOW_TILE_RIGHT] = 0x02, - [GLOW_TILE_RIGHT | GLOW_TILE_LEFT] = 0x03, - [GLOW_TILE_TOP] = 0x04, - [GLOW_TILE_TOP | GLOW_TILE_LEFT] = 0x05, - [GLOW_TILE_TOP | GLOW_TILE_RIGHT] = 0x06, - [GLOW_TILE_TOP | GLOW_TILE_RIGHT | GLOW_TILE_LEFT] = 0x07, - [GLOW_TILE_BOTTOM] = 0x08, - [GLOW_TILE_BOTTOM | GLOW_TILE_LEFT] = 0x09, - [GLOW_TILE_BOTTOM | GLOW_TILE_RIGHT] = 0x0a, - [GLOW_TILE_BOTTOM | GLOW_TILE_RIGHT | GLOW_TILE_LEFT] = 0x0b, - [GLOW_TILE_BOTTOM | GLOW_TILE_TOP] = 0x0c, - [GLOW_TILE_BOTTOM | GLOW_TILE_TOP | GLOW_TILE_LEFT] = 0x0d, - [GLOW_TILE_BOTTOM | GLOW_TILE_TOP | GLOW_TILE_RIGHT] = 0x0e, - [GLOW_TILE_BOTTOM | GLOW_TILE_TOP | GLOW_TILE_RIGHT | GLOW_TILE_LEFT] = 0x0f, - [GLOW_TILE_BOTTOM_RIGHT] = 0x11, - [GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_LEFT] = 0x20, - 0x02, 0x03, - [GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_TOP] = 0x27, - [GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_TOP | GLOW_TILE_LEFT] = 0x2d, - 0x06, 0x07, 0x08, 0x09, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - [GLOW_TILE_TOP_RIGHT] = 0x12, - [GLOW_TILE_TOP_RIGHT | GLOW_TILE_LEFT] = 0x21, - 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, - [GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM] = 0x2a, - [GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM | GLOW_TILE_LEFT] = 0x2e, - 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, - 0x0f, - [GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM_RIGHT] = 0x13, - [GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_LEFT] = 0x22, - 0x02, 0x03, 0x27, 0x2d, 0x06, - 0x07, 0x2a, 0x2e, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f, - [GLOW_TILE_BOTTOM_LEFT] = 0x14, - 0x01, - [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_RIGHT] = 0x23, - 0x03, - [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP] = 0x26, - 0x05, - [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP | GLOW_TILE_RIGHT] = 0x2c, - 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f, - [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_BOTTOM_RIGHT] = 0x15, - 0x20, 0x23, 0x03, - [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_TOP] = 0x28, - 0x2d, 0x2c, 0x07, 0x08, 0x09, - 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, - 0x0f, - [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP_RIGHT] = 0x16, - 0x21, 0x23, 0x03, 0x26, 0x05, - 0x2c, 0x07, 0x2a, 0x2e, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM_RIGHT] = 0x17, - 0x22, 0x23, 0x03, 0x28, 0x2d, - 0x2c, 0x07, 0x2a, 0x2e, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - [GLOW_TILE_TOP_LEFT] = 0x18, - 0x01, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_RIGHT] = 0x24, - 0x03, 0x04, 0x05, 0x06, 0x07, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM] = 0x29, - 0x09, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM | GLOW_TILE_RIGHT] = 0x2f, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_RIGHT] = 0x19, - 0x20, 0x24, 0x03, 0x27, 0x2d, - 0x06, 0x07, 0x29, 0x09, 0x2f, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_TOP_RIGHT] = 0x1a, - 0x21, 0x24, 0x03, 0x04, 0x05, - 0x06, 0x07, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM] = 0x2b, - 0x2e, 0x2f, 0x0b, 0x0c, 0x0d, - 0x0e, 0x0f, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM_RIGHT] = 0x1b, - 0x22, 0x24, 0x03, 0x27, 0x2d, - 0x06, 0x07, 0x2b, 0x2e, 0x2f, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_LEFT] = 0x1c, - 0x01, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_RIGHT] = 0x25, - 0x03, 0x26, 0x05, 0x2c, 0x07, - 0x29, 0x09, 0x2f, 0x0b, 0x0c, - 0x0d, 0x0e, 0x0f, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_BOTTOM_RIGHT] = 0x1d, - 0x20, 0x25, 0x03, 0x28, 0x2d, - 0x2c, 0x07, 0x29, 0x09, 0x2f, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP_RIGHT] = 0x1e, - 0x21, 0x25, 0x03, 0x26, 0x05, - 0x2c, 0x07, 0x2b, 0x2e, 0x2f, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM_RIGHT] = 0x1f, - 0x22, 0x25, 0x03, 0x28, 0x2d, - 0x2c, 0x07, 0x2b, 0x2e, 0x2f, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, -}; +#include "data/pokedex_area_glow.h" static const struct PokedexAreaMapTemplate sPokedexAreaMapTemplate = { @@ -239,13 +149,13 @@ static const struct PokedexAreaMapTemplate sPokedexAreaMapTemplate = static const u8 sAreaMarkerTiles[]; static const struct SpriteSheet sAreaMarkerSpriteSheet = { - sAreaMarkerTiles, 0x80, 2 + .data = sAreaMarkerTiles, .size = 0x80, .tag = TAG_AREA_MARKER }; static const u16 sAreaMarkerPalette[]; static const struct SpritePalette sAreaMarkerSpritePalette = { - sAreaMarkerPalette, 2 + .data = sAreaMarkerPalette, .tag = TAG_AREA_MARKER }; static const struct OamData sAreaMarkerOamData = @@ -257,13 +167,13 @@ static const struct OamData sAreaMarkerOamData = static const struct SpriteTemplate sAreaMarkerSpriteTemplate = { - 2, - 2, - &sAreaMarkerOamData, - gDummySpriteAnimTable, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy + .tileTag = TAG_AREA_MARKER, + .paletteTag = TAG_AREA_MARKER, + .oam = &sAreaMarkerOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy }; static const u16 sAreaMarkerPalette[] = INCBIN_U16("graphics/pokedex/area_marker.gbapal"); @@ -271,7 +181,7 @@ static const u8 sAreaMarkerTiles[] = INCBIN_U8("graphics/pokedex/area_marker.4bp static const struct SpritePalette sAreaUnknownSpritePalette = { - gPokedexAreaScreenAreaUnknown_Pal, 3 + .data = gPokedexAreaScreenAreaUnknown_Pal, .tag = TAG_AREA_UNKNOWN }; static const struct OamData sAreaUnknownOamData = @@ -283,13 +193,13 @@ static const struct OamData sAreaUnknownOamData = static const struct SpriteTemplate sAreaUnknownSpriteTemplate = { - 3, - 3, - &sAreaUnknownOamData, - gDummySpriteAnimTable, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy + .tileTag = TAG_AREA_UNKNOWN, + .paletteTag = TAG_AREA_UNKNOWN, + .oam = &sAreaUnknownOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy }; static void ResetDrawAreaGlowState(void) @@ -309,17 +219,17 @@ static bool8 DrawAreaGlow(void) break; case 2: DecompressAndCopyTileDataToVram(2, sAreaGlow_Gfx, 0, 0, 0); - LoadBgTilemap(2, sPokedexAreaScreen->areaGlowTilemap, 0x500, 0); + LoadBgTilemap(2, sPokedexAreaScreen->areaGlowTilemap, sizeof(sPokedexAreaScreen->areaGlowTilemap), 0); break; case 3: if (!FreeTempTileDataBuffersIfPossible()) { - CpuCopy32(sAreaGlow_Pal, gPlttBufferUnfaded + 0xA0, 0x20); + CpuCopy32(sAreaGlow_Pal, &gPlttBufferUnfaded[GLOW_PALETTE * 16], sizeof(sAreaGlow_Pal)); sPokedexAreaScreen->drawAreaGlowState++; } return TRUE; case 4: - ChangeBgY(2, -0x800, 0); + ChangeBgY(2, -BG_SCREEN_SIZE, BG_COORD_SET); break; default: return FALSE; @@ -334,58 +244,67 @@ static void FindMapsWithMon(u16 species) u16 i; struct Roamer *roamer; - sPokedexAreaScreen->unk6E2 = 0; - sPokedexAreaScreen->unk6E4 = VarGet(VAR_ALTERING_CAVE_WILD_SET); - if (sPokedexAreaScreen->unk6E4 > 8) - sPokedexAreaScreen->unk6E4 = 0; + sPokedexAreaScreen->alteringCaveCounter = 0; + sPokedexAreaScreen->alteringCaveId = VarGet(VAR_ALTERING_CAVE_WILD_SET); + if (sPokedexAreaScreen->alteringCaveId >= NUM_ALTERING_CAVE_TABLES) + sPokedexAreaScreen->alteringCaveId = 0; roamer = &gSaveBlock1Ptr->roamer; if (species != roamer->species) { 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; } + // 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]) { switch (sFeebasData[i][1]) { - case MAP_GROUP_OVERWORLD_MONS: - SetAreaHasMon(sFeebasData[i][1], sFeebasData[i][2]); - break; - case MAP_GROUP_SPECIAL_MONS_1: - case MAP_GROUP_SPECIAL_MONS_2: - 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; } } } - for (i = 0; gWildMonHeaders[i].mapGroup != 0xFF; i++) + // Add regular species to the area map + for (i = 0; gWildMonHeaders[i].mapGroup != MAP_GROUP(UNDEFINED); i++) { - if (MapHasMon(&gWildMonHeaders[i], species)) + if (MapHasSpecies(&gWildMonHeaders[i], species)) { switch (gWildMonHeaders[i].mapGroup) { - case MAP_GROUP_OVERWORLD_MONS: - SetAreaHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum); - break; - case MAP_GROUP_SPECIAL_MONS_1: - case MAP_GROUP_SPECIAL_MONS_2: - 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 { + // This is the roamer's species, show where the roamer is currently sPokedexAreaScreen->numSpecialAreas = 0; if (roamer->active) { @@ -402,7 +321,7 @@ static void FindMapsWithMon(u16 species) static void SetAreaHasMon(u16 mapGroup, u16 mapNum) { - if (sPokedexAreaScreen->numOverworldAreas < 0x40) + if (sPokedexAreaScreen->numOverworldAreas < MAX_AREA_HIGHLIGHTS) { sPokedexAreaScreen->overworldAreasWithMons[sPokedexAreaScreen->numOverworldAreas].mapGroup = mapGroup; sPokedexAreaScreen->overworldAreasWithMons[sPokedexAreaScreen->numOverworldAreas].mapNum = mapNum; @@ -415,23 +334,26 @@ static void SetSpecialMapHasMon(u16 mapGroup, u16 mapNum) { int i; - if (sPokedexAreaScreen->numSpecialAreas < 0x20) + if (sPokedexAreaScreen->numSpecialAreas < MAX_AREA_MARKERS) { u16 regionMapSectionId = GetRegionMapSectionId(mapGroup, mapNum); if (regionMapSectionId < MAPSEC_NONE) { + // Don't highlight the area if it's a moving area (Marine/Terra Cave) for (i = 0; i < ARRAY_COUNT(sMovingRegionMapSections); i++) { if (regionMapSectionId == sMovingRegionMapSections[i]) return; } + // Don't highlight the area if it's an undiscovered landmark (e.g. Sky Pillar) for (i = 0; sLandmarkData[i][0] != MAPSEC_NONE; i++) { if (regionMapSectionId == sLandmarkData[i][0] && !FlagGet(sLandmarkData[i][1])) return; } + // Check if this special area is already being tracked for (i = 0; i < sPokedexAreaScreen->numSpecialAreas; i++) { if (sPokedexAreaScreen->specialAreaRegionMapSectionIds[i] == regionMapSectionId) @@ -440,6 +362,7 @@ static void SetSpecialMapHasMon(u16 mapGroup, u16 mapNum) if (i == sPokedexAreaScreen->numSpecialAreas) { + // New special area sPokedexAreaScreen->specialAreaRegionMapSectionIds[i] = regionMapSectionId; sPokedexAreaScreen->numSpecialAreas++; } @@ -452,27 +375,34 @@ static u16 GetRegionMapSectionId(u8 mapGroup, u8 mapNum) return Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->regionMapSectionId; } -static bool8 MapHasMon(const struct WildPokemonHeader *info, u16 species) +static bool8 MapHasSpecies(const struct WildPokemonHeader *info, u16 species) { + // If this is a header for Altering Cave, skip it if it's not the current Altering Cave encounter set if (GetRegionMapSectionId(info->mapGroup, info->mapNum) == MAPSEC_ALTERING_CAVE) { - sPokedexAreaScreen->unk6E2++; - if (sPokedexAreaScreen->unk6E2 != sPokedexAreaScreen->unk6E4 + 1) + sPokedexAreaScreen->alteringCaveCounter++; + if (sPokedexAreaScreen->alteringCaveCounter != sPokedexAreaScreen->alteringCaveId + 1) return FALSE; } - if (MonListHasMon(info->landMonsInfo, species, 12)) + if (MonListHasSpecies(info->landMonsInfo, species, LAND_WILD_COUNT)) return TRUE; - if (MonListHasMon(info->waterMonsInfo, species, 5)) + if (MonListHasSpecies(info->waterMonsInfo, species, WATER_WILD_COUNT)) return TRUE; - if (MonListHasMon(info->fishingMonsInfo, species, 12)) +// When searching the fishing encounters, this incorrectly uses the size of the land encounters. +// As a result it's reading out of bounds of the fishing encounters tables. +#ifdef BUGFIX + if (MonListHasSpecies(info->fishingMonsInfo, species, FISH_WILD_COUNT)) +#else + if (MonListHasSpecies(info->fishingMonsInfo, species, LAND_WILD_COUNT)) +#endif return TRUE; - if (MonListHasMon(info->rockSmashMonsInfo, species, 5)) + if (MonListHasSpecies(info->rockSmashMonsInfo, species, ROCK_WILD_COUNT)) return TRUE; return FALSE; } -static bool8 MonListHasMon(const struct WildPokemonInfo *info, u16 species, u16 size) +static bool8 MonListHasSpecies(const struct WildPokemonInfo *info, u16 species, u16 size) { u16 i; if (info != NULL) @@ -490,9 +420,12 @@ static void BuildAreaGlowTilemap(void) { u16 i, y, x, j; + // Reset tilemap for (i = 0; i < ARRAY_COUNT(sPokedexAreaScreen->areaGlowTilemap); i++) sPokedexAreaScreen->areaGlowTilemap[i] = 0; + // For each area with this species, scan the region map layout and find any locations that have a matching mapsec. + // Add a "full glow" indicator for these matching spaces. for (i = 0; i < sPokedexAreaScreen->numOverworldAreas; i++) { j = 0; @@ -501,69 +434,73 @@ static void BuildAreaGlowTilemap(void) for (x = 0; x < AREA_SCREEN_WIDTH; x++) { if (GetRegionMapSecIdAt(x, y) == sPokedexAreaScreen->overworldAreasWithMons[i].regionMapSectionId) - sPokedexAreaScreen->areaGlowTilemap[j] = GLOW_TILE_FULL; - + sPokedexAreaScreen->areaGlowTilemap[j] = GLOW_FULL; j++; } } } + // Scan the tilemap. For every "full glow" indicator added above, fill in its edges and corners. j = 0; for (y = 0; y < AREA_SCREEN_HEIGHT; y++) { for (x = 0; x < AREA_SCREEN_WIDTH; x++) { - if (sPokedexAreaScreen->areaGlowTilemap[j] == GLOW_TILE_FULL) + if (sPokedexAreaScreen->areaGlowTilemap[j] == GLOW_FULL) { - // The "tile != GLOW_TILE_FULL" check is pointless in all of these conditionals, + // The "tile != GLOW_FULL" check is pointless in all of these conditionals, // since there's no harm in OR'ing 0xFFFF with anything else. // Edges - if (x != 0 && sPokedexAreaScreen->areaGlowTilemap[j - 1] != GLOW_TILE_FULL) - sPokedexAreaScreen->areaGlowTilemap[j - 1] |= GLOW_TILE_RIGHT; - if (x != AREA_SCREEN_WIDTH - 1 && sPokedexAreaScreen->areaGlowTilemap[j + 1] != GLOW_TILE_FULL) - sPokedexAreaScreen->areaGlowTilemap[j + 1] |= GLOW_TILE_LEFT; - if (y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH] != GLOW_TILE_FULL) - sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH] |= GLOW_TILE_BOTTOM; - if (y != AREA_SCREEN_HEIGHT - 1 && sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH] != GLOW_TILE_FULL) - sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH] |= GLOW_TILE_TOP; - - // Diagonals - if (x != 0 && y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH - 1] != GLOW_TILE_FULL) - sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH - 1] |= GLOW_TILE_BOTTOM_RIGHT; - if (x != AREA_SCREEN_WIDTH - 1 && y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH + 1] != GLOW_TILE_FULL) - sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH + 1] |= GLOW_TILE_BOTTOM_LEFT; - if (x != 0 && y != AREA_SCREEN_HEIGHT - 1 && sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH - 1] != GLOW_TILE_FULL) - sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH - 1] |= GLOW_TILE_TOP_RIGHT; - if (x != AREA_SCREEN_WIDTH - 1 && y != AREA_SCREEN_HEIGHT - 1 && sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH + 1] != GLOW_TILE_FULL) - sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH + 1] |= GLOW_TILE_TOP_LEFT; + if (x != 0 && sPokedexAreaScreen->areaGlowTilemap[j - 1] != GLOW_FULL) + sPokedexAreaScreen->areaGlowTilemap[j - 1] |= GLOW_EDGE_L; + if (x != AREA_SCREEN_WIDTH - 1 && sPokedexAreaScreen->areaGlowTilemap[j + 1] != GLOW_FULL) + sPokedexAreaScreen->areaGlowTilemap[j + 1] |= GLOW_EDGE_R; + if (y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH] != GLOW_FULL) + sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH] |= GLOW_EDGE_T; + if (y != AREA_SCREEN_HEIGHT - 1 && sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH] != GLOW_FULL) + sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH] |= GLOW_EDGE_B; + + // Corners + if (x != 0 && y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH - 1] != GLOW_FULL) + sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH - 1] |= GLOW_CORNER_TL; + if (x != AREA_SCREEN_WIDTH - 1 && y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH + 1] != GLOW_FULL) + sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH + 1] |= GLOW_CORNER_TR; + if (x != 0 && y != AREA_SCREEN_HEIGHT - 1 && sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH - 1] != GLOW_FULL) + sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH - 1] |= GLOW_CORNER_BL; + if (x != AREA_SCREEN_WIDTH - 1 && y != AREA_SCREEN_HEIGHT - 1 && sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH + 1] != GLOW_FULL) + sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH + 1] |= GLOW_CORNER_BR; } j++; } } + // Scan the tilemap again. Replace the "full tile" indicators with the actual tile id, + // and remove corner flags when they're overlapped by an edge. for (i = 0; i < ARRAY_COUNT(sPokedexAreaScreen->areaGlowTilemap); i++) { - if (sPokedexAreaScreen->areaGlowTilemap[i] == GLOW_TILE_FULL) + if (sPokedexAreaScreen->areaGlowTilemap[i] == GLOW_FULL) { - sPokedexAreaScreen->areaGlowTilemap[i] = 0x10; - sPokedexAreaScreen->areaGlowTilemap[i] |= 0xA000; + sPokedexAreaScreen->areaGlowTilemap[i] = GLOW_TILE_FULL; + sPokedexAreaScreen->areaGlowTilemap[i] |= (GLOW_PALETTE << 12); } else if (sPokedexAreaScreen->areaGlowTilemap[i]) { - // Get rid of overlapping flags - if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_TILE_RIGHT) - sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_TOP_RIGHT); - if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_TILE_LEFT) - sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP_LEFT); - if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_TILE_BOTTOM) - sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_BOTTOM_RIGHT); - if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_TILE_TOP) - sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_TILE_TOP_LEFT | GLOW_TILE_TOP_RIGHT); + // Get rid of overlapping flags. + // This is pointless, as sAreaGlowTilemapMapping can handle overlaps. + if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_EDGE_L) + sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_CORNER_TL | GLOW_CORNER_BL); + if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_EDGE_R) + sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_CORNER_TR | GLOW_CORNER_BR); + if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_EDGE_T) + sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_CORNER_TR | GLOW_CORNER_TL); + if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_EDGE_B) + sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_CORNER_BR | GLOW_CORNER_BL); + // Assign tile id sPokedexAreaScreen->areaGlowTilemap[i] = sAreaGlowTilemapMapping[sPokedexAreaScreen->areaGlowTilemap[i]]; - sPokedexAreaScreen->areaGlowTilemap[i] |= 0xA000; + sPokedexAreaScreen->areaGlowTilemap[i] |= (GLOW_PALETTE << 12); } } } @@ -571,15 +508,15 @@ static void BuildAreaGlowTilemap(void) static void StartAreaGlow(void) { if (sPokedexAreaScreen->numSpecialAreas && sPokedexAreaScreen->numOverworldAreas == 0) - sPokedexAreaScreen->whichMarkersFlashing = 1; + sPokedexAreaScreen->showingMarkers = TRUE; else - sPokedexAreaScreen->whichMarkersFlashing = 0; + sPokedexAreaScreen->showingMarkers = FALSE; - sPokedexAreaScreen->areaShadeOrMarkerFrameCounter = 0; - sPokedexAreaScreen->areaShadeFrameCounter = 0; + sPokedexAreaScreen->markerTimer = 0; + sPokedexAreaScreen->glowTimer = 0; sPokedexAreaScreen->areaShadeBldArgLo = 0; - sPokedexAreaScreen->areaShadeBldArgHi = 0x40; - sPokedexAreaScreen->specialMarkerCycleCounter = 1; + sPokedexAreaScreen->areaShadeBldArgHi = 64; + sPokedexAreaScreen->markerFlashCounter = 1; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); DoAreaGlow(); @@ -590,12 +527,13 @@ static void DoAreaGlow(void) u16 x, y; u16 i; - if (sPokedexAreaScreen->whichMarkersFlashing == 0) + if (!sPokedexAreaScreen->showingMarkers) { - if (sPokedexAreaScreen->areaShadeOrMarkerFrameCounter == 0) + // Showing area glow + if (sPokedexAreaScreen->markerTimer == 0) { - sPokedexAreaScreen->areaShadeFrameCounter++; - if (sPokedexAreaScreen->areaShadeFrameCounter & 1) + sPokedexAreaScreen->glowTimer++; + if (sPokedexAreaScreen->glowTimer & 1) sPokedexAreaScreen->areaShadeBldArgLo = (sPokedexAreaScreen->areaShadeBldArgLo + 4) & 0x7f; else sPokedexAreaScreen->areaShadeBldArgHi = (sPokedexAreaScreen->areaShadeBldArgHi + 4) & 0x7f; @@ -603,32 +541,38 @@ static void DoAreaGlow(void) x = gSineTable[sPokedexAreaScreen->areaShadeBldArgLo] >> 4; y = gSineTable[sPokedexAreaScreen->areaShadeBldArgHi] >> 4; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(x, y)); - sPokedexAreaScreen->areaShadeOrMarkerFrameCounter = 0; - if (sPokedexAreaScreen->areaShadeFrameCounter == 0x40) + sPokedexAreaScreen->markerTimer = 0; + if (sPokedexAreaScreen->glowTimer == 64) { - sPokedexAreaScreen->areaShadeFrameCounter = 0; + // Done glowing, reset and try to switch to the special area markers + sPokedexAreaScreen->glowTimer = 0; if (sPokedexAreaScreen->numSpecialAreas != 0) - sPokedexAreaScreen->whichMarkersFlashing = 1; + sPokedexAreaScreen->showingMarkers = TRUE; } } else - sPokedexAreaScreen->areaShadeOrMarkerFrameCounter--; + sPokedexAreaScreen->markerTimer--; } else { - sPokedexAreaScreen->areaShadeOrMarkerFrameCounter++; - if (sPokedexAreaScreen->areaShadeOrMarkerFrameCounter > 12) + // Showing special area markers + sPokedexAreaScreen->markerTimer++; + if (sPokedexAreaScreen->markerTimer > 12) { - sPokedexAreaScreen->areaShadeOrMarkerFrameCounter = 0; - sPokedexAreaScreen->specialMarkerCycleCounter++; + sPokedexAreaScreen->markerTimer = 0; + + // Flash the marker + // With a max of 4, the marker will disappear twice + sPokedexAreaScreen->markerFlashCounter++; for (i = 0; i < sPokedexAreaScreen->numSpecialAreas; i++) - sPokedexAreaScreen->areaMarkerSprites[i]->invisible = sPokedexAreaScreen->specialMarkerCycleCounter & 1; + sPokedexAreaScreen->areaMarkerSprites[i]->invisible = sPokedexAreaScreen->markerFlashCounter & 1; - if (sPokedexAreaScreen->specialMarkerCycleCounter > 4) + if (sPokedexAreaScreen->markerFlashCounter > 4) { - sPokedexAreaScreen->specialMarkerCycleCounter = 1; + // Done flashing, reset and try to switch to the area glow + sPokedexAreaScreen->markerFlashCounter = 1; if (sPokedexAreaScreen->numOverworldAreas != 0) - sPokedexAreaScreen->whichMarkersFlashing = 0; + sPokedexAreaScreen->showingMarkers = FALSE; } } } @@ -652,58 +596,58 @@ static void Task_ShowPokedexAreaScreen(u8 taskId) { switch (gTasks[taskId].tState) { - case 0: - ResetSpriteData(); - FreeAllSpritePalettes(); - HideBg(3); - HideBg(2); - HideBg(0); - break; - case 1: - SetBgAttribute(3, BG_ATTR_CHARBASEINDEX, 3); - LoadPokedexAreaMapGfx(&sPokedexAreaMapTemplate); - StringFill(sPokedexAreaScreen->charBuffer, CHAR_SPACE, 16); - break; - case 2: - if (sub_81C4E90() == TRUE) - return; - PokedexAreaMapChangeBgY(-8); - break; - case 3: - ResetDrawAreaGlowState(); - break; - case 4: - if (DrawAreaGlow()) - return; - break; - case 5: - ShowRegionMapForPokedexAreaScreen(&sPokedexAreaScreen->regionMap); - CreateRegionMapPlayerIcon(1, 1); - PokedexAreaScreen_UpdateRegionMapVariablesAndVideoRegs(0, -8); - break; - case 6: - CreateAreaMarkerSprites(); - break; - case 7: - LoadAreaUnknownGraphics(); - break; - case 8: - CreateAreaUnknownSprites(); - break; - case 9: - BeginNormalPaletteFade(PALETTES_ALL & ~(0x14), 0, 16, 0, RGB(0, 0, 0)); - break; - case 10: - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_ALL); - StartAreaGlow(); - ShowBg(2); - ShowBg(3); - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON); - break; - case 11: - gTasks[taskId].func = Task_HandlePokedexAreaScreenInput; - gTasks[taskId].tState = 0; + case 0: + ResetSpriteData(); + FreeAllSpritePalettes(); + HideBg(3); + HideBg(2); + HideBg(0); + break; + case 1: + SetBgAttribute(3, BG_ATTR_CHARBASEINDEX, 3); + LoadPokedexAreaMapGfx(&sPokedexAreaMapTemplate); + StringFill(sPokedexAreaScreen->charBuffer, CHAR_SPACE, 16); + break; + case 2: + if (TryShowPokedexAreaMap() == TRUE) return; + PokedexAreaMapChangeBgY(-8); + break; + case 3: + ResetDrawAreaGlowState(); + break; + case 4: + if (DrawAreaGlow()) + return; + break; + case 5: + ShowRegionMapForPokedexAreaScreen(&sPokedexAreaScreen->regionMap); + CreateRegionMapPlayerIcon(1, 1); + PokedexAreaScreen_UpdateRegionMapVariablesAndVideoRegs(0, -8); + break; + case 6: + CreateAreaMarkerSprites(); + break; + case 7: + LoadAreaUnknownGraphics(); + break; + case 8: + CreateAreaUnknownSprites(); + break; + case 9: + BeginNormalPaletteFade(PALETTES_ALL & ~(0x14), 0, 16, 0, RGB_BLACK); + break; + case 10: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_ALL); + StartAreaGlow(); + ShowBg(2); + ShowBg(3); // TryShowPokedexAreaMap will have done this already + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON); + break; + case 11: + gTasks[taskId].func = Task_HandlePokedexAreaScreenInput; + gTasks[taskId].tState = 0; + return; } gTasks[taskId].tState++; @@ -741,9 +685,9 @@ static void Task_HandlePokedexAreaScreenInput(u8 taskId) case 3: if (gPaletteFade.active) return; - DestroyAreaMarkerSprites(); + DestroyAreaScreenSprites(); sPokedexAreaScreen->screenSwitchState[0] = gTasks[taskId].data[1]; - sub_813D6B4(); + ResetPokedexAreaMapBg(); DestroyTask(taskId); FreePokedexAreaMapBgNum(); FREE_AND_SET_NULL(sPokedexAreaScreen); @@ -753,12 +697,13 @@ static void Task_HandlePokedexAreaScreenInput(u8 taskId) gTasks[taskId].tState++; } -static void sub_813D6B4(void) +static void ResetPokedexAreaMapBg(void) { SetBgAttribute(3, BG_ATTR_CHARBASEINDEX, 0); SetBgAttribute(3, BG_ATTR_PALETTEMODE, 0); } +// Creates the circular sprites to highlight special areas (like caves) where a Pokémon can be found static void CreateAreaMarkerSprites(void) { u8 spriteId; @@ -789,17 +734,20 @@ static void CreateAreaMarkerSprites(void) sPokedexAreaScreen->numAreaMarkerSprites = numSprites; } -static void DestroyAreaMarkerSprites(void) +static void DestroyAreaScreenSprites(void) { u16 i; - FreeSpriteTilesByTag(2); - FreeSpritePaletteByTag(2); + + // Destroy area marker sprites + FreeSpriteTilesByTag(TAG_AREA_MARKER); + FreeSpritePaletteByTag(TAG_AREA_MARKER); for (i = 0; i < sPokedexAreaScreen->numAreaMarkerSprites; i++) DestroySprite(sPokedexAreaScreen->areaMarkerSprites[i]); - FreeSpriteTilesByTag(3); - FreeSpritePaletteByTag(3); - for (i = 0; i < 3; i++) + // Destroy "Area Unknown" sprites + FreeSpriteTilesByTag(TAG_AREA_UNKNOWN); + FreeSpritePaletteByTag(TAG_AREA_UNKNOWN); + for (i = 0; i < ARRAY_COUNT(sPokedexAreaScreen->areaUnknownSprites); i++) { if (sPokedexAreaScreen->areaUnknownSprites[i]) DestroySprite(sPokedexAreaScreen->areaUnknownSprites[i]); @@ -810,8 +758,8 @@ static void LoadAreaUnknownGraphics(void) { struct SpriteSheet spriteSheet = { .data = sPokedexAreaScreen->areaUnknownGraphicsBuffer, - .size = 0x600, - .tag = 3, + .size = sizeof(sPokedexAreaScreen->areaUnknownGraphicsBuffer), + .tag = TAG_AREA_UNKNOWN, }; LZ77UnCompWram(gPokedexAreaScreenAreaUnknown_Gfx, sPokedexAreaScreen->areaUnknownGraphicsBuffer); LoadSpriteSheet(&spriteSheet); @@ -821,25 +769,27 @@ static void LoadAreaUnknownGraphics(void) static void CreateAreaUnknownSprites(void) { u16 i; - u8 spriteId; if (sPokedexAreaScreen->numOverworldAreas || sPokedexAreaScreen->numSpecialAreas) { - for (i = 0; i < 3; i++) + // The current species is present on the map, don't create any "Area Unknown" sprites + for (i = 0; i < ARRAY_COUNT(sPokedexAreaScreen->areaUnknownSprites); i++) sPokedexAreaScreen->areaUnknownSprites[i] = NULL; } else { - for (i = 0; i < 3; i++) + // The current species is absent on the map, try to create "Area Unknown" sprites + for (i = 0; i < ARRAY_COUNT(sPokedexAreaScreen->areaUnknownSprites); i++) { - spriteId = CreateSprite(&sAreaUnknownSpriteTemplate, i * 32 + 0xa0, 0x8c, 0); + u8 spriteId = CreateSprite(&sAreaUnknownSpriteTemplate, i * 32 + 160, 140, 0); if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.tileNum += i * 16; - sPokedexAreaScreen->areaUnknownSprites[i] = gSprites + spriteId; + sPokedexAreaScreen->areaUnknownSprites[i] = &gSprites[spriteId]; } else { + // Failed to create sprite sPokedexAreaScreen->areaUnknownSprites[i] = NULL; } } diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index e1d1776b13..406d1377d6 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -19,7 +19,7 @@ // . . // 96 . . -96 // 127 -// +// #define MIN_NEEDLE_POS 32 #define MAX_NEEDLE_POS -32 @@ -234,7 +234,7 @@ bool8 LoadCryWaveformWindow(struct CryScreenWindow *window, u8 windowId) if (!sDexCryScreen) { sDexCryScreen = AllocZeroed(sizeof(*sDexCryScreen)); - sCryWaveformWindowTiledata = (u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA); + sCryWaveformWindowTiledata = (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA); } sDexCryScreen->unk = window->unk0; @@ -253,7 +253,7 @@ bool8 LoadCryWaveformWindow(struct CryScreenWindow *window, u8 windowId) case 1: for (i = 0; i < sDexCryScreen->playStartPos * 8; i++) DrawWaveformSegment(i, 0); - + gDexCryScreenState++; break; case 2: @@ -295,7 +295,7 @@ void UpdateCryWaveformWindow(u8 windowId) DrawWaveformFlatline(); return; } - + // Cry playing, buffer waveform if (sDexCryScreen->cryState == 1) { @@ -345,7 +345,7 @@ void CryScreenPlayButton(u16 species) static void PlayCryScreenCry(u16 species) { - PlayCry2(species, 0, 125, 10); + PlayCry_NormalNoDucking(species, 0, CRY_VOLUME_RS, CRY_PRIORITY_NORMAL); sDexCryScreen->cryState = 1; } @@ -432,7 +432,7 @@ static void DrawWaveformSegment(u8 position, u8 amplitude) static void DrawWaveformWindow(u8 windowId) { - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } // rsVertical is leftover from a very different version of this function in RS @@ -443,7 +443,7 @@ static void ShiftWaveformOver(u8 windowId, s16 offset, bool8 rsVertical) if (!rsVertical) { u8 bg = GetWindowAttribute(windowId, WINDOW_BG); - ChangeBgX(bg, offset << 8, 0); + ChangeBgX(bg, offset << 8, BG_COORD_SET); } } diff --git a/src/pokemon.c b/src/pokemon.c index 5cf848766b..0e9c5a90d6 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -9,6 +9,7 @@ #include "battle_pyramid.h" #include "battle_setup.h" #include "battle_tower.h" +#include "battle_z_move.h" #include "data.h" #include "event_data.h" #include "evolution_scene.h" @@ -40,6 +41,7 @@ #include "constants/abilities.h" #include "constants/battle_frontier.h" #include "constants/battle_move_effects.h" +#include "constants/battle_script_commands.h" #include "constants/hold_effects.h" #include "constants/item_effects.h" #include "constants/items.h" @@ -48,6 +50,7 @@ #include "constants/songs.h" #include "constants/trainers.h" #include "constants/weather.h" +#include "constants/battle_config.h" struct SpeciesItem { @@ -55,26 +58,26 @@ struct SpeciesItem u16 item; }; -// this file's functions static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon); static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType); static void EncryptBoxMon(struct BoxPokemon *boxMon); static void DecryptBoxMon(struct BoxPokemon *boxMon); static void Task_PlayMapChosenOrBattleBGM(u8 taskId); -static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId); static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); static bool8 ShouldSkipFriendshipChange(void); +static u8 SendMonToPC(struct Pokemon *mon); +static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv); +void TrySpecialOverworldEvo(); -// EWRAM vars EWRAM_DATA static u8 sLearningMoveTableID = 0; EWRAM_DATA u8 gPlayerPartyCount = 0; EWRAM_DATA u8 gEnemyPartyCount = 0; EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0}; EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0}; -EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL}; +EWRAM_DATA static struct MonSpritesGfxManager *sMonSpritesGfxManagers[MON_SPR_GFX_MANAGERS_COUNT] = {NULL}; +EWRAM_DATA static u8 sTriedEvolving = 0; -// const rom data #include "data/battle_moves.h" // Used in an unreferenced function in RS. @@ -92,11 +95,15 @@ static const struct CombinedMove sCombinedMoves[2] = {0xFFFF, 0xFFFF, 0xFFFF} }; +// NOTE: The order of the elements in the 3 arrays below is irrelevant. +// To reorder the pokedex, see the values in include/constants/pokedex.h. + #define SPECIES_TO_HOENN(name) [SPECIES_##name - 1] = HOENN_DEX_##name #define SPECIES_TO_NATIONAL(name) [SPECIES_##name - 1] = NATIONAL_DEX_##name #define HOENN_TO_NATIONAL(name) [HOENN_DEX_##name - 1] = NATIONAL_DEX_##name -const u16 gSpeciesToHoennPokedexNum[NUM_SPECIES] = // Assigns all species to the Hoenn Dex Index (Summary No. for Hoenn Dex) +// 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(GROVYLE), @@ -129,7 +136,9 @@ const u16 gSpeciesToHoennPokedexNum[NUM_SPECIES] = // Assigns all species to the SPECIES_TO_HOENN(RALTS), SPECIES_TO_HOENN(KIRLIA), SPECIES_TO_HOENN(GARDEVOIR), +#if P_NEW_POKEMON == TRUE SPECIES_TO_HOENN(GALLADE), +#endif SPECIES_TO_HOENN(SURSKIT), SPECIES_TO_HOENN(MASQUERAIN), SPECIES_TO_HOENN(SHROOMISH), @@ -159,7 +168,9 @@ const u16 gSpeciesToHoennPokedexNum[NUM_SPECIES] = // Assigns all species to the SPECIES_TO_HOENN(GRAVELER), SPECIES_TO_HOENN(GOLEM), SPECIES_TO_HOENN(NOSEPASS), +#if P_NEW_POKEMON == TRUE SPECIES_TO_HOENN(PROBOPASS), +#endif SPECIES_TO_HOENN(SKITTY), SPECIES_TO_HOENN(DELCATTY), SPECIES_TO_HOENN(ZUBAT), @@ -183,7 +194,9 @@ const u16 gSpeciesToHoennPokedexNum[NUM_SPECIES] = // Assigns all species to the SPECIES_TO_HOENN(MINUN), SPECIES_TO_HOENN(MAGNEMITE), SPECIES_TO_HOENN(MAGNETON), +#if P_NEW_POKEMON == TRUE SPECIES_TO_HOENN(MAGNEZONE), +#endif SPECIES_TO_HOENN(VOLTORB), SPECIES_TO_HOENN(ELECTRODE), SPECIES_TO_HOENN(VOLBEAT), @@ -194,9 +207,13 @@ const u16 gSpeciesToHoennPokedexNum[NUM_SPECIES] = // Assigns all species to the SPECIES_TO_HOENN(BELLOSSOM), SPECIES_TO_HOENN(DODUO), SPECIES_TO_HOENN(DODRIO), +#if P_NEW_POKEMON == TRUE SPECIES_TO_HOENN(BUDEW), SPECIES_TO_HOENN(ROSELIA), SPECIES_TO_HOENN(ROSERADE), +#else + SPECIES_TO_HOENN(ROSELIA), +#endif SPECIES_TO_HOENN(GULPIN), SPECIES_TO_HOENN(SWALOT), SPECIES_TO_HOENN(CARVANHA), @@ -252,9 +269,13 @@ const u16 gSpeciesToHoennPokedexNum[NUM_SPECIES] = // Assigns all species to the SPECIES_TO_HOENN(BANETTE), SPECIES_TO_HOENN(DUSKULL), SPECIES_TO_HOENN(DUSCLOPS), +#if P_NEW_POKEMON == TRUE SPECIES_TO_HOENN(DUSKNOIR), SPECIES_TO_HOENN(TROPIUS), SPECIES_TO_HOENN(CHINGLING), +#else + SPECIES_TO_HOENN(TROPIUS), +#endif SPECIES_TO_HOENN(CHIMECHO), SPECIES_TO_HOENN(ABSOL), SPECIES_TO_HOENN(VULPIX), @@ -275,10 +296,14 @@ const u16 gSpeciesToHoennPokedexNum[NUM_SPECIES] = // Assigns all species to the SPECIES_TO_HOENN(HERACROSS), SPECIES_TO_HOENN(RHYHORN), SPECIES_TO_HOENN(RHYDON), +#if P_NEW_POKEMON == TRUE SPECIES_TO_HOENN(RHYPERIOR), +#endif SPECIES_TO_HOENN(SNORUNT), SPECIES_TO_HOENN(GLALIE), +#if P_NEW_POKEMON == TRUE SPECIES_TO_HOENN(FROSLASS), +#endif SPECIES_TO_HOENN(SPHEAL), SPECIES_TO_HOENN(SEALEO), SPECIES_TO_HOENN(WALREIN), @@ -311,7 +336,8 @@ const u16 gSpeciesToHoennPokedexNum[NUM_SPECIES] = // Assigns all species to the SPECIES_TO_HOENN(DEOXYS), }; -const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES] = // Assigns all species to the National Dex Index (Summary No. for National Dex) +// Assigns all species to the National Dex Index (Summary No. for National Dex) +static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = { SPECIES_TO_NATIONAL(BULBASAUR), SPECIES_TO_NATIONAL(IVYSAUR), @@ -699,6 +725,7 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES] = // Assigns all species to SPECIES_TO_NATIONAL(RAYQUAZA), SPECIES_TO_NATIONAL(JIRACHI), SPECIES_TO_NATIONAL(DEOXYS), +#if P_NEW_POKEMON == TRUE SPECIES_TO_NATIONAL(TURTWIG), SPECIES_TO_NATIONAL(GROTLE), SPECIES_TO_NATIONAL(TORTERRA), @@ -1211,6 +1238,13 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES] = // Assigns all species to SPECIES_TO_NATIONAL(GLASTRIER), SPECIES_TO_NATIONAL(SPECTRIER), SPECIES_TO_NATIONAL(CALYREX), + SPECIES_TO_NATIONAL(WYRDEER), + SPECIES_TO_NATIONAL(KLEAVOR), + SPECIES_TO_NATIONAL(URSALUNA), + SPECIES_TO_NATIONAL(BASCULEGION), + SPECIES_TO_NATIONAL(SNEASLER), + SPECIES_TO_NATIONAL(OVERQWIL), + SPECIES_TO_NATIONAL(ENAMORUS), // Megas [SPECIES_VENUSAUR_MEGA - 1] = NATIONAL_DEX_VENUSAUR, @@ -1303,6 +1337,23 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES] = // Assigns all species to [SPECIES_DARMANITAN_GALARIAN - 1] = NATIONAL_DEX_DARMANITAN, [SPECIES_YAMASK_GALARIAN - 1] = NATIONAL_DEX_YAMASK, [SPECIES_STUNFISK_GALARIAN - 1] = NATIONAL_DEX_STUNFISK, +//Hisuian Forms + [SPECIES_GROWLITHE_HISUIAN - 1] = NATIONAL_DEX_GROWLITHE, + [SPECIES_ARCANINE_HISUIAN - 1] = NATIONAL_DEX_ARCANINE, + [SPECIES_VOLTORB_HISUIAN - 1] = NATIONAL_DEX_VOLTORB, + [SPECIES_ELECTRODE_HISUIAN - 1] = NATIONAL_DEX_ELECTRODE, + [SPECIES_TYPHLOSION_HISUIAN - 1] = NATIONAL_DEX_TYPHLOSION, + [SPECIES_QWILFISH_HISUIAN - 1] = NATIONAL_DEX_QWILFISH, + [SPECIES_SNEASEL_HISUIAN - 1] = NATIONAL_DEX_SNEASEL, + [SPECIES_SAMUROTT_HISUIAN - 1] = NATIONAL_DEX_SAMUROTT, + [SPECIES_LILLIGANT_HISUIAN - 1] = NATIONAL_DEX_LILLIGANT, + [SPECIES_ZORUA_HISUIAN - 1] = NATIONAL_DEX_ZORUA, + [SPECIES_ZOROARK_HISUIAN - 1] = NATIONAL_DEX_ZOROARK, + [SPECIES_BRAVIARY_HISUIAN - 1] = NATIONAL_DEX_BRAVIARY, + [SPECIES_SLIGGOO_HISUIAN - 1] = NATIONAL_DEX_SLIGGOO, + [SPECIES_GOODRA_HISUIAN - 1] = NATIONAL_DEX_GOODRA, + [SPECIES_AVALUGG_HISUIAN - 1] = NATIONAL_DEX_AVALUGG, + [SPECIES_DECIDUEYE_HISUIAN - 1] = NATIONAL_DEX_DECIDUEYE, // Cosplay Pikachu [SPECIES_PIKACHU_COSPLAY - 1] = NATIONAL_DEX_PIKACHU, [SPECIES_PIKACHU_ROCK_STAR - 1] = NATIONAL_DEX_PIKACHU, @@ -1321,6 +1372,7 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES] = // Assigns all species to [SPECIES_PIKACHU_WORLD_CAP - 1] = NATIONAL_DEX_PIKACHU, // Pichu [SPECIES_PICHU_SPIKY_EARED - 1] = NATIONAL_DEX_PICHU, +#endif // Unown [SPECIES_UNOWN_B - 1] = NATIONAL_DEX_UNOWN, [SPECIES_UNOWN_C - 1] = NATIONAL_DEX_UNOWN, @@ -1357,6 +1409,7 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES] = // Assigns all species to [SPECIES_DEOXYS_ATTACK - 1] = NATIONAL_DEX_DEOXYS, [SPECIES_DEOXYS_DEFENSE - 1] = NATIONAL_DEX_DEOXYS, [SPECIES_DEOXYS_SPEED - 1] = NATIONAL_DEX_DEOXYS, +#if P_NEW_POKEMON == TRUE // Burmy [SPECIES_BURMY_SANDY_CLOAK - 1] = NATIONAL_DEX_BURMY, [SPECIES_BURMY_TRASH_CLOAK - 1] = NATIONAL_DEX_BURMY, @@ -1375,7 +1428,9 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES] = // Assigns all species to [SPECIES_ROTOM_FROST - 1] = NATIONAL_DEX_ROTOM, [SPECIES_ROTOM_FAN - 1] = NATIONAL_DEX_ROTOM, [SPECIES_ROTOM_MOW - 1] = NATIONAL_DEX_ROTOM, - // Giratina + // Origin Forme + [SPECIES_DIALGA_ORIGIN - 1] = NATIONAL_DEX_DIALGA, + [SPECIES_PALKIA_ORIGIN - 1] = NATIONAL_DEX_PALKIA, [SPECIES_GIRATINA_ORIGIN - 1] = NATIONAL_DEX_GIRATINA, // Shaymin [SPECIES_SHAYMIN_SKY - 1] = NATIONAL_DEX_SHAYMIN, @@ -1399,6 +1454,7 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES] = // Assigns all species to [SPECIES_ARCEUS_FAIRY - 1] = NATIONAL_DEX_ARCEUS, // Basculin [SPECIES_BASCULIN_BLUE_STRIPED - 1] = NATIONAL_DEX_BASCULIN, + [SPECIES_BASCULIN_WHITE_STRIPED - 1] = NATIONAL_DEX_BASCULIN, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE - 1] = NATIONAL_DEX_DARMANITAN, [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN - 1] = NATIONAL_DEX_DARMANITAN, @@ -1414,6 +1470,7 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES] = // Assigns all species to [SPECIES_TORNADUS_THERIAN - 1] = NATIONAL_DEX_TORNADUS, [SPECIES_THUNDURUS_THERIAN - 1] = NATIONAL_DEX_THUNDURUS, [SPECIES_LANDORUS_THERIAN - 1] = NATIONAL_DEX_LANDORUS, + [SPECIES_ENAMORUS_THERIAN - 1] = NATIONAL_DEX_ENAMORUS, // Kyurem [SPECIES_KYUREM_BLACK - 1] = NATIONAL_DEX_KYUREM, [SPECIES_KYUREM_WHITE - 1] = NATIONAL_DEX_KYUREM, @@ -1584,9 +1641,11 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES] = // Assigns all species to // Calyrex [SPECIES_CALYREX_ICE_RIDER - 1] = NATIONAL_DEX_CALYREX, [SPECIES_CALYREX_SHADOW_RIDER - 1] = NATIONAL_DEX_CALYREX, +#endif }; -const u16 gHoennToNationalOrder[HOENN_DEX_COUNT] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) +// Assigns all Hoenn Dex Indexes to a National Dex Index +static const u16 sHoennToNationalOrder[HOENN_DEX_COUNT - 1] = { HOENN_TO_NATIONAL(TREECKO), HOENN_TO_NATIONAL(GROVYLE), @@ -1619,7 +1678,9 @@ const u16 gHoennToNationalOrder[HOENN_DEX_COUNT] = // Assigns Hoenn Dex Pokémon HOENN_TO_NATIONAL(RALTS), HOENN_TO_NATIONAL(KIRLIA), HOENN_TO_NATIONAL(GARDEVOIR), +#if P_NEW_POKEMON == TRUE HOENN_TO_NATIONAL(GALLADE), +#endif HOENN_TO_NATIONAL(SURSKIT), HOENN_TO_NATIONAL(MASQUERAIN), HOENN_TO_NATIONAL(SHROOMISH), @@ -1649,7 +1710,9 @@ const u16 gHoennToNationalOrder[HOENN_DEX_COUNT] = // Assigns Hoenn Dex Pokémon HOENN_TO_NATIONAL(GRAVELER), HOENN_TO_NATIONAL(GOLEM), HOENN_TO_NATIONAL(NOSEPASS), +#if P_NEW_POKEMON == TRUE HOENN_TO_NATIONAL(PROBOPASS), +#endif HOENN_TO_NATIONAL(SKITTY), HOENN_TO_NATIONAL(DELCATTY), HOENN_TO_NATIONAL(ZUBAT), @@ -1673,7 +1736,9 @@ const u16 gHoennToNationalOrder[HOENN_DEX_COUNT] = // Assigns Hoenn Dex Pokémon HOENN_TO_NATIONAL(MINUN), HOENN_TO_NATIONAL(MAGNEMITE), HOENN_TO_NATIONAL(MAGNETON), +#if P_NEW_POKEMON == TRUE HOENN_TO_NATIONAL(MAGNEZONE), +#endif HOENN_TO_NATIONAL(VOLTORB), HOENN_TO_NATIONAL(ELECTRODE), HOENN_TO_NATIONAL(VOLBEAT), @@ -1684,9 +1749,13 @@ const u16 gHoennToNationalOrder[HOENN_DEX_COUNT] = // Assigns Hoenn Dex Pokémon HOENN_TO_NATIONAL(BELLOSSOM), HOENN_TO_NATIONAL(DODUO), HOENN_TO_NATIONAL(DODRIO), +#if P_NEW_POKEMON == TRUE HOENN_TO_NATIONAL(BUDEW), HOENN_TO_NATIONAL(ROSELIA), HOENN_TO_NATIONAL(ROSERADE), +#else + HOENN_TO_NATIONAL(ROSELIA), +#endif HOENN_TO_NATIONAL(GULPIN), HOENN_TO_NATIONAL(SWALOT), HOENN_TO_NATIONAL(CARVANHA), @@ -1742,9 +1811,13 @@ const u16 gHoennToNationalOrder[HOENN_DEX_COUNT] = // Assigns Hoenn Dex Pokémon HOENN_TO_NATIONAL(BANETTE), HOENN_TO_NATIONAL(DUSKULL), HOENN_TO_NATIONAL(DUSCLOPS), +#if P_NEW_POKEMON == TRUE HOENN_TO_NATIONAL(DUSKNOIR), HOENN_TO_NATIONAL(TROPIUS), HOENN_TO_NATIONAL(CHINGLING), +#else + HOENN_TO_NATIONAL(TROPIUS), +#endif HOENN_TO_NATIONAL(CHIMECHO), HOENN_TO_NATIONAL(ABSOL), HOENN_TO_NATIONAL(VULPIX), @@ -1765,10 +1838,14 @@ const u16 gHoennToNationalOrder[HOENN_DEX_COUNT] = // Assigns Hoenn Dex Pokémon HOENN_TO_NATIONAL(HERACROSS), HOENN_TO_NATIONAL(RHYHORN), HOENN_TO_NATIONAL(RHYDON), +#if P_NEW_POKEMON == TRUE HOENN_TO_NATIONAL(RHYPERIOR), +#endif HOENN_TO_NATIONAL(SNORUNT), HOENN_TO_NATIONAL(GLALIE), +#if P_NEW_POKEMON == TRUE HOENN_TO_NATIONAL(FROSLASS), +#endif HOENN_TO_NATIONAL(SPHEAL), HOENN_TO_NATIONAL(SEALEO), HOENN_TO_NATIONAL(WALREIN), @@ -1803,10 +1880,10 @@ const u16 gHoennToNationalOrder[HOENN_DEX_COUNT] = // Assigns Hoenn Dex Pokémon const struct SpindaSpot gSpindaSpotGraphics[] = { - {16, 7, INCBIN_U16("graphics/spinda_spots/spot_0.bin")}, - {40, 8, INCBIN_U16("graphics/spinda_spots/spot_1.bin")}, - {22, 25, INCBIN_U16("graphics/spinda_spots/spot_2.bin")}, - {34, 26, INCBIN_U16("graphics/spinda_spots/spot_3.bin")} + {.x = 16, .y = 7, .image = INCBIN_U16("graphics/spinda_spots/spot_0.bin")}, + {.x = 40, .y = 8, .image = INCBIN_U16("graphics/spinda_spots/spot_1.bin")}, + {.x = 22, .y = 25, .image = INCBIN_U16("graphics/spinda_spots/spot_2.bin")}, + {.x = 34, .y = 26, .image = INCBIN_U16("graphics/spinda_spots/spot_3.bin")} }; #include "data/pokemon/item_effects.h" @@ -1841,21 +1918,29 @@ const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = [NATURE_QUIRKY] = { 0, 0, 0, 0, 0}, }; -#include "data/pokemon/tmhm_learnsets.h" #include "data/pokemon/trainer_class_lookups.h" #include "data/pokemon/experience_tables.h" #include "data/pokemon/base_stats.h" #include "data/pokemon/level_up_learnsets.h" +#include "data/pokemon/teachable_learnsets.h" +#if P_NEW_POKEMON == TRUE #include "data/pokemon/evolution.h" +#else +#include "data/pokemon/evolution_old.h" +#endif #include "data/pokemon/level_up_learnset_pointers.h" +#include "data/pokemon/teachable_learnset_pointers.h" #include "data/pokemon/form_species_tables.h" #include "data/pokemon/form_species_table_pointers.h" #include "data/pokemon/form_change_tables.h" #include "data/pokemon/form_change_table_pointers.h" // SPECIES_NONE are ignored in the following two tables, so decrement before accessing these arrays to get the right result - +#if P_ENABLE_DEBUG == TRUE +const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = +#else static const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = +#endif { [SPECIES_BULBASAUR - 1] = ANIM_V_JUMPS_H_JUMPS, [SPECIES_IVYSAUR - 1] = ANIM_V_STRETCH, @@ -2244,6 +2329,7 @@ static const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_JIRACHI - 1] = ANIM_RISING_WOBBLE, [SPECIES_DEOXYS - 1] = ANIM_GROW_VIBRATE, +#if P_NEW_POKEMON == TRUE // Gen 4 [SPECIES_TURTWIG - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_GROTLE - 1] = ANIM_V_STRETCH, @@ -2584,7 +2670,6 @@ static const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_DIANCIE - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_HOOPA - 1] = ANIM_ZIGZAG_SLOW, [SPECIES_VOLCANION - 1] = ANIM_V_SHAKE_TWICE, - // Gen 7 [SPECIES_ROWLET - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_DARTRIX - 1] = ANIM_H_STRETCH, @@ -2765,11 +2850,20 @@ static const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_GLASTRIER - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_SPECTRIER - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_CALYREX - 1] = ANIM_V_SQUISH_AND_BOUNCE, - - //Gen 4 Forms + [SPECIES_WYRDEER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KLEAVOR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_URSALUNA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BASCULEGION - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SNEASLER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OVERQWIL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ENAMORUS - 1] = ANIM_V_SQUISH_AND_BOUNCE, +#endif [SPECIES_DEOXYS_ATTACK - 1] = ANIM_GROW_VIBRATE, [SPECIES_DEOXYS_DEFENSE - 1] = ANIM_GROW_VIBRATE, [SPECIES_DEOXYS_SPEED - 1] = ANIM_GROW_VIBRATE, + +#if P_NEW_POKEMON == TRUE + //Gen 4 Forms [SPECIES_BURMY_SANDY_CLOAK - 1] = ANIM_V_STRETCH, [SPECIES_BURMY_TRASH_CLOAK - 1] = ANIM_V_STRETCH, [SPECIES_WORMADAM_SANDY_CLOAK - 1] = ANIM_SWING_CONVEX_FAST_SHORT, @@ -2921,6 +3015,7 @@ static const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_NECROZMA_DAWN_WINGS - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo [SPECIES_NECROZMA_ULTRA - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo [SPECIES_MAGEARNA_ORIGINAL_COLOR - 1] = ANIM_H_SLIDE_SLOW, +#endif }; static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] = @@ -2980,13 +3075,25 @@ static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] = [SPECIES_SALAMENCE - 1] = 70, [SPECIES_KYOGRE - 1] = 60, [SPECIES_RAYQUAZA - 1] = 60, +#if P_NEW_POKEMON == TRUE [SPECIES_TAPU_FINI - 1] = 5, [SPECIES_ROTOM_FAN - 1] = 7, +#endif }; -const u8 gPPUpGetMask[] = {0x03, 0x0c, 0x30, 0xc0}; // Masks for getting PP Up count, also PP Max values -const u8 gPPUpSetMask[] = {0xfc, 0xf3, 0xcf, 0x3f}; // Masks for setting PP Up count -const u8 gPPUpAddMask[] = {0x01, 0x04, 0x10, 0x40}; // Values added to PP Up count +#define PP_UP_SHIFTS(val) val, (val) << 2, (val) << 4, (val) << 6 +#define PP_UP_SHIFTS_INV(val) (u8)~(val), (u8)~((val) << 2), (u8)~((val) << 4), (u8)~((val) << 6) + +// PP Up bonuses are stored for a Pokémon as a single byte. +// There are 2 bits (a value 0-3) for each move slot that +// represent how many PP Ups have been applied. +// The following arrays take a move slot id and return: +// gPPUpGetMask - A mask to get the number of PP Ups applied to that move slot +// gPPUpClearMask - A mask to clear the number of PP Ups applied to that move slot +// gPPUpAddValues - A value to add to the PP Bonuses byte to apply 1 PP Up to that move slot +const u8 gPPUpGetMask[MAX_MON_MOVES] = {PP_UP_SHIFTS(3)}; +const u8 gPPUpClearMask[MAX_MON_MOVES] = {PP_UP_SHIFTS_INV(3)}; +const u8 gPPUpAddValues[MAX_MON_MOVES] = {PP_UP_SHIFTS(1)}; const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2] = { @@ -3027,31 +3134,10 @@ const u16 gLinkPlayerFacilityClasses[NUM_MALE_LINK_FACILITY_CLASSES + NUM_FEMALE FACILITY_CLASS_BEAUTY }; -static const u8 sHoldEffectToType[][2] = -{ - {HOLD_EFFECT_BUG_POWER, TYPE_BUG}, - {HOLD_EFFECT_STEEL_POWER, TYPE_STEEL}, - {HOLD_EFFECT_GROUND_POWER, TYPE_GROUND}, - {HOLD_EFFECT_ROCK_POWER, TYPE_ROCK}, - {HOLD_EFFECT_GRASS_POWER, TYPE_GRASS}, - {HOLD_EFFECT_DARK_POWER, TYPE_DARK}, - {HOLD_EFFECT_FIGHTING_POWER, TYPE_FIGHTING}, - {HOLD_EFFECT_ELECTRIC_POWER, TYPE_ELECTRIC}, - {HOLD_EFFECT_WATER_POWER, TYPE_WATER}, - {HOLD_EFFECT_FLYING_POWER, TYPE_FLYING}, - {HOLD_EFFECT_POISON_POWER, TYPE_POISON}, - {HOLD_EFFECT_ICE_POWER, TYPE_ICE}, - {HOLD_EFFECT_GHOST_POWER, TYPE_GHOST}, - {HOLD_EFFECT_PSYCHIC_POWER, TYPE_PSYCHIC}, - {HOLD_EFFECT_FIRE_POWER, TYPE_FIRE}, - {HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON}, - {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL}, -}; - const struct SpriteTemplate gBattlerSpriteTemplates[MAX_BATTLERS_COUNT] = { [B_POSITION_PLAYER_LEFT] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpritePlayerSide, .anims = NULL, @@ -3060,16 +3146,16 @@ const struct SpriteTemplate gBattlerSpriteTemplates[MAX_BATTLERS_COUNT] = .callback = SpriteCB_BattleSpriteStartSlideLeft, }, [B_POSITION_OPPONENT_LEFT] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpriteOpponentSide, .anims = NULL, .images = gBattlerPicTable_OpponentLeft, .affineAnims = gAffineAnims_BattleSpriteOpponentSide, - .callback = SpriteCb_WildMon, + .callback = SpriteCB_WildMon, }, [B_POSITION_PLAYER_RIGHT] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpritePlayerSide, .anims = NULL, @@ -3078,20 +3164,20 @@ const struct SpriteTemplate gBattlerSpriteTemplates[MAX_BATTLERS_COUNT] = .callback = SpriteCB_BattleSpriteStartSlideLeft, }, [B_POSITION_OPPONENT_RIGHT] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpriteOpponentSide, .anims = NULL, .images = gBattlerPicTable_OpponentRight, .affineAnims = gAffineAnims_BattleSpriteOpponentSide, - .callback = SpriteCb_WildMon + .callback = SpriteCB_WildMon }, }; static const struct SpriteTemplate sTrainerBackSpriteTemplates[] = { [TRAINER_BACK_PIC_BRENDAN] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpritePlayerSide, .anims = NULL, @@ -3100,7 +3186,7 @@ static const struct SpriteTemplate sTrainerBackSpriteTemplates[] = .callback = SpriteCB_BattleSpriteStartSlideLeft, }, [TRAINER_BACK_PIC_MAY] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpritePlayerSide, .anims = NULL, @@ -3109,7 +3195,7 @@ static const struct SpriteTemplate sTrainerBackSpriteTemplates[] = .callback = SpriteCB_BattleSpriteStartSlideLeft, }, [TRAINER_BACK_PIC_RED] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpritePlayerSide, .anims = NULL, @@ -3118,7 +3204,7 @@ static const struct SpriteTemplate sTrainerBackSpriteTemplates[] = .callback = SpriteCB_BattleSpriteStartSlideLeft, }, [TRAINER_BACK_PIC_LEAF] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpritePlayerSide, .anims = NULL, @@ -3127,7 +3213,7 @@ static const struct SpriteTemplate sTrainerBackSpriteTemplates[] = .callback = SpriteCB_BattleSpriteStartSlideLeft, }, [TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpritePlayerSide, .anims = NULL, @@ -3136,7 +3222,7 @@ static const struct SpriteTemplate sTrainerBackSpriteTemplates[] = .callback = SpriteCB_BattleSpriteStartSlideLeft, }, [TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpritePlayerSide, .anims = NULL, @@ -3145,7 +3231,7 @@ static const struct SpriteTemplate sTrainerBackSpriteTemplates[] = .callback = SpriteCB_BattleSpriteStartSlideLeft, }, [TRAINER_BACK_PIC_WALLY] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpritePlayerSide, .anims = NULL, @@ -3154,7 +3240,7 @@ static const struct SpriteTemplate sTrainerBackSpriteTemplates[] = .callback = SpriteCB_BattleSpriteStartSlideLeft, }, [TRAINER_BACK_PIC_STEVEN] = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = 0, .oam = &gOamData_BattleSpritePlayerSide, .anims = NULL, @@ -3164,10 +3250,23 @@ static const struct SpriteTemplate sTrainerBackSpriteTemplates[] = }, }; -static const u8 sSecretBaseFacilityClasses[2][5] = +#define NUM_SECRET_BASE_CLASSES 5 +static const u8 sSecretBaseFacilityClasses[GENDER_COUNT][NUM_SECRET_BASE_CLASSES] = { - {FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_BUG_CATCHER, FACILITY_CLASS_RICH_BOY, FACILITY_CLASS_CAMPER, FACILITY_CLASS_COOLTRAINER_M}, - {FACILITY_CLASS_LASS, FACILITY_CLASS_SCHOOL_KID_F, FACILITY_CLASS_LADY, FACILITY_CLASS_PICNICKER, FACILITY_CLASS_COOLTRAINER_F} + [MALE] = { + FACILITY_CLASS_YOUNGSTER, + FACILITY_CLASS_BUG_CATCHER, + FACILITY_CLASS_RICH_BOY, + FACILITY_CLASS_CAMPER, + FACILITY_CLASS_COOLTRAINER_M + }, + [FEMALE] = { + FACILITY_CLASS_LASS, + FACILITY_CLASS_SCHOOL_KID_F, + FACILITY_CLASS_LADY, + FACILITY_CLASS_PICNICKER, + FACILITY_CLASS_COOLTRAINER_F + } }; static const u8 sGetMonDataEVConstants[] = @@ -3183,7 +3282,7 @@ static const u8 sGetMonDataEVConstants[] = // For stat-raising items static const u8 sStatsToRaise[] = { - STAT_ATK, STAT_ATK, STAT_SPEED, STAT_DEF, STAT_SPATK, STAT_ACC + STAT_ATK, STAT_ATK, STAT_DEF, STAT_SPEED, STAT_SPATK, STAT_SPDEF, STAT_ACC }; // 3 modifiers each for how much to change friendship for different ranges @@ -3201,10 +3300,12 @@ static const s8 sFriendshipEventModifiers[][3] = [FRIENDSHIP_EVENT_FAINT_LARGE] = {-5, -5, -10}, }; +#define HM_MOVES_END 0xFFFF + static const u16 sHMMoves[] = { MOVE_CUT, MOVE_FLY, MOVE_SURF, MOVE_STRENGTH, MOVE_FLASH, - MOVE_ROCK_SMASH, MOVE_WATERFALL, MOVE_DIVE, 0xFFFF + MOVE_ROCK_SMASH, MOVE_WATERFALL, MOVE_DIVE, HM_MOVES_END }; static const struct SpeciesItem sAlteringCaveWildMonHeldItems[] = @@ -3220,12 +3321,12 @@ static const struct SpeciesItem sAlteringCaveWildMonHeldItems[] = {SPECIES_SMEARGLE, ITEM_SALAC_BERRY}, }; -static const struct OamData sOamData_8329F20 = +static const struct OamData sOamData_64x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -3237,18 +3338,17 @@ static const struct OamData sOamData_8329F20 = .affineParam = 0 }; -static const struct SpriteTemplate gUnknown_08329F28 = +static const struct SpriteTemplate sSpriteTemplate_64x64 = { - .tileTag = 0xFFFF, - .paletteTag = 0xFFFF, - .oam = &sOamData_8329F20, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, + .oam = &sOamData_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -// code void ZeroBoxMonData(struct BoxPokemon *boxMon) { u8 *raw = (u8 *)boxMon; @@ -3271,7 +3371,7 @@ void ZeroMonData(struct Pokemon *mon) SetMonData(mon, MON_DATA_SPEED, &arg); SetMonData(mon, MON_DATA_SPATK, &arg); SetMonData(mon, MON_DATA_SPDEF, &arg); - arg = 255; + arg = MAIL_NONE; SetMonData(mon, MON_DATA_MAIL, &arg); } @@ -3291,12 +3391,12 @@ void ZeroEnemyPartyMons(void) void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) { - u32 arg; + u32 mail; ZeroMonData(mon); CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); SetMonData(mon, MON_DATA_LEVEL, &level); - arg = 255; - SetMonData(mon, MON_DATA_MAIL, &arg); + mail = MAIL_NONE; + SetMonData(mon, MON_DATA_MAIL, &mail); CalculateMonStats(mon); } @@ -3306,6 +3406,9 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u32 personality; u32 value; u16 checksum; + u8 i; + u8 availableIVs[NUM_STATS]; + u8 selectedIvs[LEGENDARY_PERFECT_IV_COUNT]; ZeroBoxMonData(boxMon); @@ -3314,30 +3417,42 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, else personality = Random32(); - SetBoxMonData(boxMon, MON_DATA_PERSONALITY, &personality); - - //Determine original trainer ID - if (otIdType == OT_ID_RANDOM_NO_SHINY) //Pokemon cannot be shiny + // Determine original trainer ID + if (otIdType == OT_ID_RANDOM_NO_SHINY) { u32 shinyValue; do { + // Choose random OT IDs until one that results in a non-shiny Pokémon value = Random32(); - shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality); + shinyValue = GET_SHINY_VALUE(value, personality); } while (shinyValue < SHINY_ODDS); } - else if (otIdType == OT_ID_PRESET) //Pokemon has a preset OT ID + else if (otIdType == OT_ID_PRESET) { value = fixedOtId; } - else //Player is the OT + else // Player is the OT { value = gSaveBlock2Ptr->playerTrainerId[0] | (gSaveBlock2Ptr->playerTrainerId[1] << 8) | (gSaveBlock2Ptr->playerTrainerId[2] << 16) | (gSaveBlock2Ptr->playerTrainerId[3] << 24); + + if (CheckBagHasItem(ITEM_SHINY_CHARM, 1)) + { + u32 shinyValue; + u32 rolls = 0; + do + { + personality = Random32(); + shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality); + rolls++; + } while (shinyValue >= SHINY_ODDS && rolls < I_SHINY_CHARM_REROLLS); + } } + SetBoxMonData(boxMon, MON_DATA_PERSONALITY, &personality); SetBoxMonData(boxMon, MON_DATA_OT_ID, &value); checksum = CalculateBoxMonChecksum(boxMon); @@ -3387,6 +3502,51 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv); iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); + + #if P_LEGENDARY_PERFECT_IVS >= GEN_6 + if (gBaseStats[species].flags & (FLAG_LEGENDARY | FLAG_MYTHICAL | FLAG_ULTRA_BEAST)) + { + iv = MAX_PER_STAT_IVS; + // Initialize a list of IV indices. + for (i = 0; i < NUM_STATS; i++) + { + availableIVs[i] = i; + } + + // Select the 3 IVs that will be perfected. + for (i = 0; i < LEGENDARY_PERFECT_IV_COUNT; i++) + { + u8 index = Random() % (NUM_STATS - i); + selectedIvs[i] = availableIVs[index]; + RemoveIVIndexFromList(availableIVs, index); + } + for (i = 0; i < LEGENDARY_PERFECT_IV_COUNT; i++) + { + switch (selectedIvs[i]) + { + case STAT_HP: + SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); + break; + case STAT_ATK: + SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv); + break; + case STAT_DEF: + SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv); + break; + case STAT_SPEED: + SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv); + break; + case STAT_SPATK: + SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv); + break; + case STAT_SPDEF: + SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); + break; + } + } + } + #endif + } if (gBaseStats[species].abilities[1]) @@ -3408,7 +3568,7 @@ void CreateMonWithNature(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, } while (nature != GetNatureFromPersonality(personality)); - CreateMon(mon, species, level, fixedIV, 1, personality, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, level, fixedIV, TRUE, personality, OT_ID_PLAYER_ID, 0); } void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 gender, u8 nature, u8 unownLetter) @@ -3438,7 +3598,7 @@ void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, || gender != GetGenderFromSpeciesAndPersonality(species, personality)); } - CreateMon(mon, species, level, fixedIV, 1, personality, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, level, fixedIV, TRUE, personality, OT_ID_PLAYER_ID, 0); } // This is only used to create Wally's Ralts. @@ -3453,25 +3613,25 @@ void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level) personality = Random32(); } while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE); - CreateMon(mon, species, level, USE_RANDOM_IVS, 1, personality, OT_ID_PRESET, otId); + CreateMon(mon, species, level, USE_RANDOM_IVS, TRUE, personality, OT_ID_PRESET, otId); } void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality) { - CreateMon(mon, species, level, 0, 1, personality, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, level, 0, TRUE, personality, OT_ID_PLAYER_ID, 0); SetMonData(mon, MON_DATA_IVS, &ivs); CalculateMonStats(mon); } void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId) { - CreateMon(mon, species, level, 0, 0, 0, OT_ID_PRESET, otId); - SetMonData(mon, MON_DATA_HP_IV, &ivs[0]); - SetMonData(mon, MON_DATA_ATK_IV, &ivs[1]); - SetMonData(mon, MON_DATA_DEF_IV, &ivs[2]); - SetMonData(mon, MON_DATA_SPEED_IV, &ivs[3]); - SetMonData(mon, MON_DATA_SPATK_IV, &ivs[4]); - SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[5]); + CreateMon(mon, species, level, 0, FALSE, 0, OT_ID_PRESET, otId); + SetMonData(mon, MON_DATA_HP_IV, &ivs[STAT_HP]); + SetMonData(mon, MON_DATA_ATK_IV, &ivs[STAT_ATK]); + SetMonData(mon, MON_DATA_DEF_IV, &ivs[STAT_DEF]); + SetMonData(mon, MON_DATA_SPEED_IV, &ivs[STAT_SPEED]); + SetMonData(mon, MON_DATA_SPATK_IV, &ivs[STAT_SPATK]); + SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[STAT_SPDEF]); CalculateMonStats(mon); } @@ -3482,7 +3642,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI u16 evAmount; u8 evsBits; - CreateMon(mon, species, level, fixedIV, 0, 0, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, level, fixedIV, FALSE, 0, OT_ID_PLAYER_ID, 0); evsBits = evSpread; @@ -3514,7 +3674,7 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) u8 language; u8 value; - CreateMon(mon, src->species, src->level, 0, 1, src->personality, OT_ID_PRESET, src->otId); + CreateMon(mon, src->species, src->level, 0, TRUE, src->personality, OT_ID_PRESET, src->otId); for (i = 0; i < MAX_MON_MOVES; i++) SetMonMoveSlot(mon, src->moves[i], i); @@ -3561,7 +3721,7 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) CalculateMonStats(mon); } -void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50) +void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50) { s32 i; u8 nickname[30]; @@ -3572,11 +3732,11 @@ void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src, if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) level = GetFrontierEnemyMonLevel(gSaveBlock2Ptr->frontier.lvlMode); else if (lvl50) - level = 50; + level = FRONTIER_MAX_LEVEL_50; else level = src->level; - CreateMon(mon, src->species, level, 0, 1, src->personality, OT_ID_PRESET, src->otId); + CreateMon(mon, src->species, level, 0, TRUE, src->personality, OT_ID_PRESET, src->otId); for (i = 0; i < MAX_MON_MOVES; i++) SetMonMoveSlot(mon, src->moves[i], i); @@ -3697,7 +3857,7 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP dest->species = GetMonData(mon, MON_DATA_SPECIES, NULL); heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); - if (heldItem == ITEM_ENIGMA_BERRY) + if (heldItem == ITEM_ENIGMA_BERRY_E_READER) heldItem = ITEM_NONE; dest->heldItem = heldItem; @@ -3828,7 +3988,7 @@ void CreateEventLegalEnemyMon(void) s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateEventLegalMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, 0, 0, 0, 0); + CreateEventLegalMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); if (itemId) { u8 heldItem[2]; @@ -3847,16 +4007,16 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon) union PokemonSubstruct *substruct3 = GetSubstruct(boxMon, boxMon->personality, 3); s32 i; - for (i = 0; i < 6; i++) + for (i = 0; i < (s32)ARRAY_COUNT(substruct0->raw); i++) checksum += substruct0->raw[i]; - for (i = 0; i < 6; i++) + for (i = 0; i < (s32)ARRAY_COUNT(substruct1->raw); i++) checksum += substruct1->raw[i]; - for (i = 0; i < 6; i++) + for (i = 0; i < (s32)ARRAY_COUNT(substruct2->raw); i++) checksum += substruct2->raw[i]; - for (i = 0; i < 6; i++) + for (i = 0; i < (s32)ARRAY_COUNT(substruct3->raw); i++) checksum += substruct3->raw[i]; return checksum; @@ -3948,7 +4108,7 @@ void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest) SetMonData(dest, MON_DATA_STATUS, &value); SetMonData(dest, MON_DATA_HP, &value); SetMonData(dest, MON_DATA_MAX_HP, &value); - value = 255; + value = MAIL_NONE; SetMonData(dest, MON_DATA_MAIL, &value); CalculateMonStats(dest); } @@ -4006,7 +4166,7 @@ u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move) for (i = 0; i < MAX_MON_MOVES; i++) { - if (!mon->moves[i]) + if (mon->moves[i] == MOVE_NONE) { mon->moves[i] = move; mon->pp[i] = gBattleMoves[move].pp; @@ -4014,7 +4174,7 @@ u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move) } } - return 0xFFFF; + return MON_HAS_MAX_MOVES; } void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot) @@ -4044,6 +4204,8 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon) { if (gLevelUpLearnsets[species][i].level > level) break; + if (gLevelUpLearnsets[species][i].level == 0) + continue; if (GiveMoveToBoxMon(boxMon, gLevelUpLearnsets[species][i].move) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, gLevelUpLearnsets[species][i].move); } @@ -4096,8 +4258,8 @@ void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move) ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); ppBonuses >>= 2; - moves[3] = move; - pp[3] = gBattleMoves[move].pp; + moves[MAX_MON_MOVES - 1] = move; + pp[MAX_MON_MOVES - 1] = gBattleMoves[move].pp; for (i = 0; i < MAX_MON_MOVES; i++) { @@ -4123,8 +4285,8 @@ void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) ppBonuses = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, NULL); ppBonuses >>= 2; - moves[3] = move; - pp[3] = gBattleMoves[move].pp; + moves[MAX_MON_MOVES - 1] = move; + pp[MAX_MON_MOVES - 1] = gBattleMoves[move].pp; for (i = 0; i < MAX_MON_MOVES; i++) { @@ -4135,262 +4297,6 @@ void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) SetBoxMonData(boxMon, MON_DATA_PP_BONUSES, &ppBonuses); } -#define APPLY_STAT_MOD(var, mon, stat, statIndex) \ -{ \ - (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)]][0]; \ - (var) /= (gStatStageRatios)[(mon)->statStages[(statIndex)]][1]; \ -} - -s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 battlerIdAtk, u8 battlerIdDef) -{ - u32 i; - s32 damage = 0; - s32 damageHelper; - u8 type; - u16 attack, defense; - u16 spAttack, spDefense; - u8 defenderHoldEffect; - u8 defenderHoldEffectParam; - u8 attackerHoldEffect; - u8 attackerHoldEffectParam; - - if (!powerOverride) - gBattleMovePower = gBattleMoves[move].power; - else - gBattleMovePower = powerOverride; - - if (!typeOverride) - type = gBattleMoves[move].type; - else - type = typeOverride & 0x3F; - - attack = attacker->attack; - defense = defender->defense; - spAttack = attacker->spAttack; - spDefense = defender->spDefense; - - if (attacker->item == ITEM_ENIGMA_BERRY) - { - attackerHoldEffect = gEnigmaBerries[battlerIdAtk].holdEffect; - attackerHoldEffectParam = gEnigmaBerries[battlerIdAtk].holdEffectParam; - } - else - { - attackerHoldEffect = ItemId_GetHoldEffect(attacker->item); - attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item); - } - - if (defender->item == ITEM_ENIGMA_BERRY) - { - defenderHoldEffect = gEnigmaBerries[battlerIdDef].holdEffect; - defenderHoldEffectParam = gEnigmaBerries[battlerIdDef].holdEffectParam; - } - else - { - defenderHoldEffect = ItemId_GetHoldEffect(defender->item); - defenderHoldEffectParam = ItemId_GetHoldEffectParam(defender->item); - } - - if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER) - attack *= 2; - - if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, battlerIdAtk)) - attack = (110 * attack) / 100; - if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerIdDef)) - defense = (110 * defense) / 100; - if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdAtk)) - spAttack = (110 * spAttack) / 100; - if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdDef)) - spDefense = (110 * spDefense) / 100; - - for (i = 0; i < ARRAY_COUNT(sHoldEffectToType); i++) - { - if (attackerHoldEffect == sHoldEffectToType[i][0] - && type == sHoldEffectToType[i][1]) - { - if (IS_TYPE_PHYSICAL(type)) - attack = (attack * (attackerHoldEffectParam + 100)) / 100; - else - spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100; - break; - } - } - - if (attackerHoldEffect == HOLD_EFFECT_CHOICE_BAND) - attack = (150 * attack) / 100; - if (attackerHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS)) - spAttack = (150 * spAttack) / 100; - if (defenderHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) && (defender->species == SPECIES_LATIAS || defender->species == SPECIES_LATIOS)) - spDefense = (150 * spDefense) / 100; - if (attackerHoldEffect == HOLD_EFFECT_DEEP_SEA_TOOTH && attacker->species == SPECIES_CLAMPERL) - spAttack *= 2; - if (defenderHoldEffect == HOLD_EFFECT_DEEP_SEA_SCALE && defender->species == SPECIES_CLAMPERL) - spDefense *= 2; - if (attackerHoldEffect == HOLD_EFFECT_LIGHT_BALL && attacker->species == SPECIES_PIKACHU) - spAttack *= 2; - if (defenderHoldEffect == HOLD_EFFECT_METAL_POWDER && defender->species == SPECIES_DITTO) - defense *= 2; - if (attackerHoldEffect == HOLD_EFFECT_THICK_CLUB && (attacker->species == SPECIES_CUBONE || attacker->species == SPECIES_MAROWAK)) - attack *= 2; - if (defender->ability == ABILITY_THICK_FAT && (type == TYPE_FIRE || type == TYPE_ICE)) - spAttack /= 2; - if (attacker->ability == ABILITY_HUSTLE) - attack = (150 * attack) / 100; - if (attacker->ability == ABILITY_PLUS && ABILITY_ON_FIELD2(ABILITY_MINUS)) - spAttack = (150 * spAttack) / 100; - if (attacker->ability == ABILITY_MINUS && ABILITY_ON_FIELD2(ABILITY_PLUS)) - spAttack = (150 * spAttack) / 100; - if (attacker->ability == ABILITY_GUTS && attacker->status1) - attack = (150 * attack) / 100; - if (defender->ability == ABILITY_MARVEL_SCALE && defender->status1) - defense = (150 * defense) / 100; - if (type == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFD, 0)) - gBattleMovePower /= 2; - if (type == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFE, 0)) - gBattleMovePower /= 2; - if (type == TYPE_GRASS && attacker->ability == ABILITY_OVERGROW && attacker->hp <= (attacker->maxHP / 3)) - gBattleMovePower = (150 * gBattleMovePower) / 100; - if (type == TYPE_FIRE && attacker->ability == ABILITY_BLAZE && attacker->hp <= (attacker->maxHP / 3)) - gBattleMovePower = (150 * gBattleMovePower) / 100; - if (type == TYPE_WATER && attacker->ability == ABILITY_TORRENT && attacker->hp <= (attacker->maxHP / 3)) - gBattleMovePower = (150 * gBattleMovePower) / 100; - if (type == TYPE_BUG && attacker->ability == ABILITY_SWARM && attacker->hp <= (attacker->maxHP / 3)) - gBattleMovePower = (150 * gBattleMovePower) / 100; - if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION) - defense /= 2; - - if (IS_TYPE_PHYSICAL(type)) - { - if (gCritMultiplier == 2) - { - if (attacker->statStages[STAT_ATK] > DEFAULT_STAT_STAGE) - APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK) - else - damage = attack; - } - else - APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK) - - damage = damage * gBattleMovePower; - damage *= (2 * attacker->level / 5 + 2); - - if (gCritMultiplier == 2) - { - if (defender->statStages[STAT_DEF] < DEFAULT_STAT_STAGE) - APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF) - else - damageHelper = defense; - } - else - APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF) - - damage = damage / damageHelper; - damage /= 50; - - if ((attacker->status1 & STATUS1_BURN) && attacker->ability != ABILITY_GUTS) - damage /= 2; - - if ((sideStatus & SIDE_STATUS_REFLECT) && gCritMultiplier == 1) - { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) - damage = 2 * (damage / 3); - else - damage /= 2; - } - - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == MOVE_TARGET_BOTH && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) - damage /= 2; - - // moves always do at least 1 damage. - if (damage == 0) - damage = 1; - } - - if (type == TYPE_MYSTERY) - damage = 0; // is ??? type. does 0 damage. - - if (IS_TYPE_SPECIAL(type)) - { - if (gCritMultiplier == 2) - { - if (attacker->statStages[STAT_SPATK] > DEFAULT_STAT_STAGE) - APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK) - else - damage = spAttack; - } - else - APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK) - - damage = damage * gBattleMovePower; - damage *= (2 * attacker->level / 5 + 2); - - if (gCritMultiplier == 2) - { - if (defender->statStages[STAT_SPDEF] < DEFAULT_STAT_STAGE) - APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF) - else - damageHelper = spDefense; - } - else - APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF) - - damage = (damage / damageHelper); - damage /= 50; - - if ((sideStatus & SIDE_STATUS_LIGHTSCREEN) && gCritMultiplier == 1) - { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) - damage = 2 * (damage / 3); - else - damage /= 2; - } - - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == MOVE_TARGET_BOTH && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) - damage /= 2; - - // are effects of weather negated with cloud nine or air lock - if (WEATHER_HAS_EFFECT2) - { - if (gBattleWeather & WEATHER_RAIN_TEMPORARY) - { - switch (type) - { - case TYPE_FIRE: - damage /= 2; - break; - case TYPE_WATER: - damage = (15 * damage) / 10; - break; - } - } - - // any weather except sun weakens solar beam - if ((gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_HAIL_ANY)) && gCurrentMove == MOVE_SOLAR_BEAM) - damage /= 2; - - // sunny - if (gBattleWeather & WEATHER_SUN_ANY) - { - switch (type) - { - case TYPE_FIRE: - damage = (15 * damage) / 10; - break; - case TYPE_WATER: - damage /= 2; - break; - } - } - } - - // flash fire triggered - if ((gBattleResources->flags->flags[battlerIdAtk] & RESOURCE_FLAG_FLASH_FIRE) && type == TYPE_FIRE) - damage = (15 * damage) / 10; - } - - return damage + 2; -} - u8 CountAliveMonsInBattle(u8 caseId) { s32 i; @@ -4424,20 +4330,6 @@ u8 CountAliveMonsInBattle(u8 caseId) return retVal; } -static bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId) -{ - if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) - return FALSE; - else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - return FALSE; - else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) - return FALSE; - else if (FlagGet(badgeFlag)) - return TRUE; - else - return FALSE; -} - u8 GetDefaultMoveTarget(u8 battlerId) { u8 opposing = BATTLE_OPPOSITE(GetBattlerPosition(battlerId) & BIT_SIDE); @@ -4517,10 +4409,10 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition) { if (gMonSpritesGfxPtr != NULL) gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition]; - else if (gUnknown_020249B4[0]) - gMultiuseSpriteTemplate = gUnknown_020249B4[0]->templates[battlerPosition]; - else if (gUnknown_020249B4[1]) - gMultiuseSpriteTemplate = gUnknown_020249B4[1]->templates[battlerPosition]; + else if (sMonSpritesGfxManagers[MON_SPR_GFX_MANAGER_A]) + gMultiuseSpriteTemplate = sMonSpritesGfxManagers[MON_SPR_GFX_MANAGER_A]->templates[battlerPosition]; + else if (sMonSpritesGfxManagers[MON_SPR_GFX_MANAGER_B]) + gMultiuseSpriteTemplate = sMonSpritesGfxManagers[MON_SPR_GFX_MANAGER_B]->templates[battlerPosition]; else gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition]; @@ -4533,13 +4425,13 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition) gMultiuseSpriteTemplate.anims = gMonFrontAnimsPtrTable[speciesTag]; } -void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosition) +void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerPicId, u8 battlerPosition) { - gMultiuseSpriteTemplate.paletteTag = trainerSpriteId; + gMultiuseSpriteTemplate.paletteTag = trainerPicId; if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT) { - gMultiuseSpriteTemplate = sTrainerBackSpriteTemplates[trainerSpriteId]; - gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId]; + gMultiuseSpriteTemplate = sTrainerBackSpriteTemplates[trainerPicId]; + gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerPicId]; } else { @@ -4547,25 +4439,25 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition]; else gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition]; - gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[trainerSpriteId]; + gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[trainerPicId]; } } -void SetMultiuseSpriteTemplateToTrainerFront(u16 arg0, u8 battlerPosition) +void SetMultiuseSpriteTemplateToTrainerFront(u16 trainerPicId, u8 battlerPosition) { if (gMonSpritesGfxPtr != NULL) gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition]; else gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition]; - gMultiuseSpriteTemplate.paletteTag = arg0; - gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[arg0]; + gMultiuseSpriteTemplate.paletteTag = trainerPicId; + gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[trainerPicId]; } static void EncryptBoxMon(struct BoxPokemon *boxMon) { u32 i; - for (i = 0; i < 12; i++) + for (i = 0; i < ARRAY_COUNT(boxMon->secure.raw); i++) { boxMon->secure.raw[i] ^= boxMon->personality; boxMon->secure.raw[i] ^= boxMon->otId; @@ -4575,7 +4467,7 @@ static void EncryptBoxMon(struct BoxPokemon *boxMon) static void DecryptBoxMon(struct BoxPokemon *boxMon) { u32 i; - for (i = 0; i < 12; i++) + for (i = 0; i < ARRAY_COUNT(boxMon->secure.raw); i++) { boxMon->secure.raw[i] ^= boxMon->otId; boxMon->secure.raw[i] ^= boxMon->personality; @@ -4664,7 +4556,7 @@ static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 perso return substruct; } -u32 GetMonData(struct Pokemon *mon, s32 field, u8* data) +u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data) { u32 ret; @@ -4743,9 +4635,9 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum) { - boxMon->isBadEgg = 1; - boxMon->isEgg = 1; - substruct3->isEgg = 1; + boxMon->isBadEgg = TRUE; + boxMon->isEgg = TRUE; + substruct3->isEgg = TRUE; } } @@ -4905,7 +4797,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) retVal = substruct3->metGame; break; case MON_DATA_POKEBALL: - retVal = substruct3->pokeball; + retVal = substruct0->pokeball; break; case MON_DATA_OT_GENDER: retVal = substruct3->otGender; @@ -4997,7 +4889,12 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) retVal = SPECIES_EGG; break; case MON_DATA_IVS: - retVal = substruct3->hpIV | (substruct3->attackIV << 5) | (substruct3->defenseIV << 10) | (substruct3->speedIV << 15) | (substruct3->spAttackIV << 20) | (substruct3->spDefenseIV << 25); + retVal = substruct3->hpIV + | (substruct3->attackIV << 5) + | (substruct3->defenseIV << 10) + | (substruct3->speedIV << 15) + | (substruct3->spAttackIV << 20) + | (substruct3->spDefenseIV << 25); break; case MON_DATA_KNOWN_MOVES: if (substruct0->species && !substruct3->isEgg) @@ -5141,9 +5038,9 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum) { - boxMon->isBadEgg = 1; - boxMon->isEgg = 1; - substruct3->isEgg = 1; + boxMon->isBadEgg = TRUE; + boxMon->isEgg = TRUE; + substruct3->isEgg = TRUE; EncryptBoxMon(boxMon); return; } @@ -5196,9 +5093,9 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) { SET16(substruct0->species); if (substruct0->species) - boxMon->hasSpecies = 1; + boxMon->hasSpecies = TRUE; else - boxMon->hasSpecies = 0; + boxMon->hasSpecies = FALSE; break; } case MON_DATA_HELD_ITEM: @@ -5279,7 +5176,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_POKEBALL: { u8 pokeball = *data; - substruct3->pokeball = pokeball; + substruct0->pokeball = pokeball; break; } case MON_DATA_OT_GENDER: @@ -5306,9 +5203,9 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_IS_EGG: SET8(substruct3->isEgg); if (substruct3->isEgg) - boxMon->isEgg = 1; + boxMon->isEgg = TRUE; else - boxMon->isEgg = 0; + boxMon->isEgg = FALSE; break; case MON_DATA_ABILITY_NUM: SET8(substruct3->abilityNum); @@ -5419,7 +5316,7 @@ u8 GiveMonToPlayer(struct Pokemon *mon) return MON_GIVEN_TO_PARTY; } -u8 SendMonToPC(struct Pokemon* mon) +static u8 SendMonToPC(struct Pokemon *mon) { s32 boxNo, boxPos; @@ -5518,20 +5415,32 @@ u8 GetMonsStateToDoubles_2(void) return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON; } -u8 GetAbilityBySpecies(u16 species, u8 abilityNum) +u16 GetAbilityBySpecies(u16 species, u8 abilityNum) { + int i; + if (abilityNum < NUM_ABILITY_SLOTS) gLastUsedAbility = gBaseStats[species].abilities[abilityNum]; else - gLastUsedAbility = gBaseStats[species].abilities[0]; - - if (gLastUsedAbility == ABILITY_NONE) - gLastUsedAbility = gBaseStats[species].abilities[0]; - + gLastUsedAbility = ABILITY_NONE; + + if (abilityNum >= NUM_NORMAL_ABILITY_SLOTS) // if abilityNum is empty hidden ability, look for other hidden abilities + { + for (i = NUM_NORMAL_ABILITY_SLOTS; i < NUM_ABILITY_SLOTS && gLastUsedAbility == ABILITY_NONE; i++) + { + gLastUsedAbility = gBaseStats[species].abilities[i]; + } + } + + for (i = 0; i < NUM_ABILITY_SLOTS && gLastUsedAbility == ABILITY_NONE; i++) // look for any non-empty ability + { + gLastUsedAbility = gBaseStats[species].abilities[i]; + } + return gLastUsedAbility; } -u8 GetMonAbility(struct Pokemon *mon) +u16 GetMonAbility(struct Pokemon *mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); u8 abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM, NULL); @@ -5553,7 +5462,7 @@ void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord) gBattleResources->secretBase->party.species[i], gBattleResources->secretBase->party.levels[i], 15, - 1, + TRUE, gBattleResources->secretBase->party.personality[i], OT_ID_RANDOM_NO_SHINY, 0); @@ -5574,13 +5483,13 @@ void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord) u8 GetSecretBaseTrainerPicIndex(void) { - u8 facilityClass = sSecretBaseFacilityClasses[gBattleResources->secretBase->gender][gBattleResources->secretBase->trainerId[0] % 5]; + u8 facilityClass = sSecretBaseFacilityClasses[gBattleResources->secretBase->gender][gBattleResources->secretBase->trainerId[0] % NUM_SECRET_BASE_CLASSES]; return gFacilityClassToPicIndex[facilityClass]; } u8 GetSecretBaseTrainerClass(void) { - u8 facilityClass = sSecretBaseFacilityClasses[gBattleResources->secretBase->gender][gBattleResources->secretBase->trainerId[0] % 5]; + u8 facilityClass = sSecretBaseFacilityClasses[gBattleResources->secretBase->gender][gBattleResources->secretBase->trainerId[0] % NUM_SECRET_BASE_CLASSES]; return gFacilityClassToTrainerClass[facilityClass]; } @@ -5614,7 +5523,7 @@ void GetSpeciesName(u8 *name, u16 species) for (i = 0; i <= POKEMON_NAME_LENGTH; i++) { if (species > NUM_SPECIES) - name[i] = gSpeciesNames[0][i]; + name[i] = gSpeciesNames[SPECIES_NONE][i]; else name[i] = gSpeciesNames[species][i]; @@ -5634,65 +5543,67 @@ u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex) void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex) { u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); - ppBonuses &= gPPUpSetMask[moveIndex]; + ppBonuses &= gPPUpClearMask[moveIndex]; SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses); } void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex) { - mon->ppBonuses &= gPPUpSetMask[moveIndex]; + mon->ppBonuses &= gPPUpClearMask[moveIndex]; +} + +void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst) +{ + s32 i; + u8 nickname[POKEMON_NAME_LENGTH * 2]; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + dst->moves[i] = GetMonData(src, MON_DATA_MOVE1 + i, NULL); + dst->pp[i] = GetMonData(src, MON_DATA_PP1 + i, NULL); + } + + dst->species = GetMonData(src, MON_DATA_SPECIES, NULL); + dst->item = GetMonData(src, MON_DATA_HELD_ITEM, NULL); + dst->ppBonuses = GetMonData(src, MON_DATA_PP_BONUSES, NULL); + dst->friendship = GetMonData(src, MON_DATA_FRIENDSHIP, NULL); + dst->experience = GetMonData(src, MON_DATA_EXP, NULL); + dst->hpIV = GetMonData(src, MON_DATA_HP_IV, NULL); + dst->attackIV = GetMonData(src, MON_DATA_ATK_IV, NULL); + dst->defenseIV = GetMonData(src, MON_DATA_DEF_IV, NULL); + dst->speedIV = GetMonData(src, MON_DATA_SPEED_IV, NULL); + dst->spAttackIV = GetMonData(src, MON_DATA_SPATK_IV, NULL); + dst->spDefenseIV = GetMonData(src, MON_DATA_SPDEF_IV, NULL); + dst->personality = GetMonData(src, MON_DATA_PERSONALITY, NULL); + dst->status1 = GetMonData(src, MON_DATA_STATUS, NULL); + dst->level = GetMonData(src, MON_DATA_LEVEL, NULL); + dst->hp = GetMonData(src, MON_DATA_HP, NULL); + dst->maxHP = GetMonData(src, MON_DATA_MAX_HP, NULL); + dst->attack = GetMonData(src, MON_DATA_ATK, NULL); + dst->defense = GetMonData(src, MON_DATA_DEF, NULL); + dst->speed = GetMonData(src, MON_DATA_SPEED, NULL); + dst->spAttack = GetMonData(src, MON_DATA_SPATK, NULL); + 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 = gBaseStats[dst->species].type1; + dst->type2 = gBaseStats[dst->species].type2; + dst->type3 = TYPE_MYSTERY; + dst->ability = GetAbilityBySpecies(dst->species, dst->abilityNum); + GetMonData(src, MON_DATA_NICKNAME, nickname); + StringCopy_Nickname(dst->nickname, nickname); + GetMonData(src, MON_DATA_OT_NAME, dst->otName); + + for (i = 0; i < NUM_BATTLE_STATS; i++) + dst->statStages[i] = DEFAULT_STAT_STAGE; + + dst->status2 = 0; } void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) { - u16* hpSwitchout; - s32 i; - u8 nickname[POKEMON_NAME_LENGTH * 2]; - - gBattleMons[battlerId].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); - gBattleMons[battlerId].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL); - - for (i = 0; i < MAX_MON_MOVES; i++) - { - gBattleMons[battlerId].moves[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1 + i, NULL); - gBattleMons[battlerId].pp[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP1 + i, NULL); - } - - gBattleMons[battlerId].ppBonuses = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP_BONUSES, NULL); - gBattleMons[battlerId].friendship = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FRIENDSHIP, NULL); - gBattleMons[battlerId].experience = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EXP, NULL); - gBattleMons[battlerId].hpIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP_IV, NULL); - gBattleMons[battlerId].attackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK_IV, NULL); - gBattleMons[battlerId].defenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF_IV, NULL); - gBattleMons[battlerId].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED_IV, NULL); - gBattleMons[battlerId].spAttackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK_IV, NULL); - gBattleMons[battlerId].spDefenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF_IV, NULL); - gBattleMons[battlerId].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY, NULL); - gBattleMons[battlerId].status1 = GetMonData(&gPlayerParty[partyIndex], MON_DATA_STATUS, NULL); - gBattleMons[battlerId].level = GetMonData(&gPlayerParty[partyIndex], MON_DATA_LEVEL, NULL); - gBattleMons[battlerId].hp = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP, NULL); - gBattleMons[battlerId].maxHP = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MAX_HP, NULL); - gBattleMons[battlerId].attack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK, NULL); - gBattleMons[battlerId].defense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF, NULL); - gBattleMons[battlerId].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED, NULL); - gBattleMons[battlerId].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL); - gBattleMons[battlerId].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL); - gBattleMons[battlerId].abilityNum = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ABILITY_NUM, NULL); - gBattleMons[battlerId].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL); - gBattleMons[battlerId].type1 = gBaseStats[gBattleMons[battlerId].species].type1; - gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2; - gBattleMons[battlerId].ability = GetAbilityBySpecies(gBattleMons[battlerId].species, gBattleMons[battlerId].abilityNum); - GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname); - StringCopy10(gBattleMons[battlerId].nickname, nickname); - GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battlerId].otName); - - hpSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)]; - *hpSwitchout = gBattleMons[battlerId].hp; - - for (i = 0; i < NUM_BATTLE_STATS; i++) - gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE; - - gBattleMons[battlerId].status2 = 0; + PokemonToBattleMon(&gPlayerParty[partyIndex], &gBattleMons[battlerId]); + gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)] = gBattleMons[battlerId].hp; UpdateSentPokesToOpponentValue(battlerId); ClearTemporarySpeciesSpriteData(battlerId, FALSE); } @@ -5702,7 +5613,7 @@ bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, return PokemonUseItemEffects(mon, item, partyIndex, moveIndex, FALSE); } -#define UPDATE_FRIENDSHIP_FROM_ITEM \ +#define UPDATE_FRIENDSHIP_FROM_ITEM() \ { \ if ((retVal == 0 || friendshipOnly) && !ShouldSkipFriendshipChange() && friendshipChange == 0) \ { \ @@ -5728,11 +5639,20 @@ bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, } \ } +// EXP candies store an index for this table in their holdEffectParam. +static const u32 sExpCandyExperienceTable[] = { + [EXP_100 - 1] = 100, + [EXP_800 - 1] = 800, + [EXP_3000 - 1] = 3000, + [EXP_10000 - 1] = 10000, + [EXP_30000 - 1] = 30000, +}; + // Returns TRUE if the item has no effect on the Pokémon, FALSE otherwise bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, bool8 usedByAI) { u32 dataUnsigned; - s32 dataSigned; + s32 dataSigned, evCap; s32 friendship; s32 i; bool8 retVal = TRUE; @@ -5750,7 +5670,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Get item hold effect heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); - if (heldItem == ITEM_ENIGMA_BERRY) + if (heldItem == ITEM_ENIGMA_BERRY_E_READER) { if (gMain.inBattle) holdEffect = gEnigmaBerries[gBattlerInMenuId].holdEffect; @@ -5787,11 +5707,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Skip using the item if it won't do anything if (!ITEM_HAS_EFFECT(item)) return TRUE; - if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY) + if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY_E_READER) return TRUE; // Get item effect - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) { if (gMain.inBattle) itemEffect = gEnigmaBerries[gActiveBattler].itemEffect; @@ -5826,25 +5746,31 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY; retVal = FALSE; } - - // X Attack - if ((itemEffect[i] & ITEM0_X_ATTACK) - && gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[i] & ITEM0_X_ATTACK; - if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_ATK] = MAX_STAT_STAGE; - retVal = FALSE; - } break; // Handle ITEM1 effects (in-battle stat boosting effects) case 1: - // X Defend - if ((itemEffect[i] & ITEM1_X_DEFEND) + // X Attack + if ((itemEffect[i] & ITEM1_X_ATTACK) + && gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE) + { + if (B_X_ITEMS_BUFF >= GEN_7) + gBattleMons[gActiveBattler].statStages[STAT_ATK] += 2; + else + gBattleMons[gActiveBattler].statStages[STAT_ATK] += 1; + if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_ATK] = MAX_STAT_STAGE; + retVal = FALSE; + } + + // X Defense + if ((itemEffect[i] & ITEM1_X_DEFENSE) && gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE) { - gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[i] & ITEM1_X_DEFEND) >> 4; + if (B_X_ITEMS_BUFF >= GEN_7) + gBattleMons[gActiveBattler].statStages[STAT_DEF] += 2; + else + gBattleMons[gActiveBattler].statStages[STAT_DEF] += 1; if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > MAX_STAT_STAGE) gBattleMons[gActiveBattler].statStages[STAT_DEF] = MAX_STAT_STAGE; retVal = FALSE; @@ -5854,33 +5780,56 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if ((itemEffect[i] & ITEM1_X_SPEED) && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE) { - gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[i] & ITEM1_X_SPEED; + if (B_X_ITEMS_BUFF >= GEN_7) + gBattleMons[gActiveBattler].statStages[STAT_SPEED] += 2; + else + gBattleMons[gActiveBattler].statStages[STAT_SPEED] += 1; if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > MAX_STAT_STAGE) gBattleMons[gActiveBattler].statStages[STAT_SPEED] = MAX_STAT_STAGE; retVal = FALSE; } - break; - // Handle ITEM2 effects (more stat boosting effects) - case 2: - // X Accuracy - if ((itemEffect[i] & ITEM2_X_ACCURACY) - && gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[i] & ITEM2_X_ACCURACY) >> 4; - if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_ACC] = MAX_STAT_STAGE; - retVal = FALSE; - } // X Sp Attack - if ((itemEffect[i] & ITEM2_X_SPATK) + if ((itemEffect[i] & ITEM1_X_SPATK) && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE) { - gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[i] & ITEM2_X_SPATK; + if (B_X_ITEMS_BUFF >= GEN_7) + gBattleMons[gActiveBattler].statStages[STAT_SPATK] += 2; + else + gBattleMons[gActiveBattler].statStages[STAT_SPATK] += 1; if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > MAX_STAT_STAGE) gBattleMons[gActiveBattler].statStages[STAT_SPATK] = MAX_STAT_STAGE; retVal = FALSE; } + + // X Sp Defense + if ((itemEffect[i] & ITEM1_X_SPDEF) + && gBattleMons[gActiveBattler].statStages[STAT_SPDEF] < MAX_STAT_STAGE) + { + if (B_X_ITEMS_BUFF >= GEN_7) + gBattleMons[gActiveBattler].statStages[STAT_SPDEF] += 2; + else + gBattleMons[gActiveBattler].statStages[STAT_SPDEF] += 1; + if (gBattleMons[gActiveBattler].statStages[STAT_SPDEF] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_SPDEF] = MAX_STAT_STAGE; + retVal = FALSE; + } + + // X Accuracy + if ((itemEffect[i] & ITEM1_X_ACCURACY) + && gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE) + { + if (B_X_ITEMS_BUFF >= GEN_7) + gBattleMons[gActiveBattler].statStages[STAT_ACC] += 2; + else + gBattleMons[gActiveBattler].statStages[STAT_ACC] += 1; + if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > MAX_STAT_STAGE) + gBattleMons[gActiveBattler].statStages[STAT_ACC] = MAX_STAT_STAGE; + retVal = FALSE; + } + break; + // Formerly used by the item effects of the X Sp. Atk and the X Accuracy + case 2: break; // Handle ITEM3 effects (Guard Spec, Rare Candy, cure status) @@ -5893,11 +5842,22 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov retVal = FALSE; } - // Rare Candy + // Rare Candy / EXP Candy if ((itemEffect[i] & ITEM3_LEVEL_UP) && GetMonData(mon, MON_DATA_LEVEL, NULL) != MAX_LEVEL) { - dataUnsigned = gExperienceTables[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1]; + u8 param = ItemId_GetHoldEffectParam(item); + if (param == 0) // Rare Candy + { + dataUnsigned = gExperienceTables[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1]; + } + else if (param < ARRAY_COUNT(sExpCandyExperienceTable)) // EXP Candies + { + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + dataUnsigned = sExpCandyExperienceTable[param - 1] + GetMonData(mon, MON_DATA_EXP, NULL); + if (dataUnsigned > gExperienceTables[gBaseStats[species].growthRate][MAX_LEVEL]) + dataUnsigned = gExperienceTables[gBaseStats[species].growthRate][MAX_LEVEL]; + } SetMonData(mon, MON_DATA_EXP, &dataUnsigned); CalculateMonStats(mon); retVal = FALSE; @@ -5939,7 +5899,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov temp1 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); if (dataUnsigned <= 2 && temp1 > 4) { - dataUnsigned = GetMonData(mon, MON_DATA_PP_BONUSES, NULL) + gPPUpAddMask[moveIndex]; + dataUnsigned = GetMonData(mon, MON_DATA_PP_BONUSES, NULL) + gPPUpAddValues[moveIndex]; SetMonData(mon, MON_DATA_PP_BONUSES, &dataUnsigned); dataUnsigned = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), dataUnsigned, moveIndex) - temp1; @@ -5963,18 +5923,24 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov temp2 = itemEffect[itemEffectParam]; dataSigned = GetMonData(mon, sGetMonDataEVConstants[temp1], NULL); evChange = temp2; - + if (evChange > 0) // Increasing EV (HP or Atk) { // Has EV increase limit already been reached? if (evCount >= MAX_TOTAL_EVS) return TRUE; - if (dataSigned >= EV_ITEM_RAISE_LIMIT) + + if (itemEffect[10] & ITEM10_IS_VITAMIN) + evCap = EV_ITEM_RAISE_LIMIT; + else + evCap = 252; + + if (dataSigned >= evCap) break; // Limit the increase - if (dataSigned + evChange > EV_ITEM_RAISE_LIMIT) - temp2 = EV_ITEM_RAISE_LIMIT - (dataSigned + evChange) + evChange; + if (dataSigned + evChange > evCap) + temp2 = evCap - (dataSigned + evChange) + evChange; else temp2 = evChange; @@ -6054,6 +6020,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov case ITEM6_HEAL_HP_LVL_UP: dataUnsigned = gBattleScripting.levelUpHP; break; + case ITEM6_HEAL_HP_QUARTER: + dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL) / 4; + if (dataUnsigned == 0) + dataUnsigned = 1; + break; } // Only restore HP if not at max health @@ -6061,7 +6032,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { if (!usedByAI) { - // Restore HP + // Restore HP dataUnsigned = GetMonData(mon, MON_DATA_HP, NULL) + dataUnsigned; if (dataUnsigned > GetMonData(mon, MON_DATA_MAX_HP, NULL)) dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL); @@ -6078,7 +6049,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov temp2 = gActiveBattler; gActiveBattler = battlerId; - BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, 0); + BtlController_EmitGetMonData(BUFFER_A, REQUEST_ALL_BATTLE, 0); MarkBattlerForControllerExec(gActiveBattler); gActiveBattler = temp2; } @@ -6114,9 +6085,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov SetMonData(mon, MON_DATA_PP1 + temp2, &dataUnsigned); // Heal battler PP too (if applicable) - if (gMain.inBattle - && battlerId != MAX_BATTLERS_COUNT && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) - && !(gDisableStructs[battlerId].mimickedMoves & gBitTable[temp2])) + if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && MOVE_IS_PERMANENT(battlerId, temp2)) gBattleMons[battlerId].pp[temp2] = dataUnsigned; retVal = FALSE; @@ -6140,11 +6109,9 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); } SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned); - + // Heal battler PP too (if applicable) - if (gMain.inBattle - && battlerId != MAX_BATTLERS_COUNT && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) - && !(gDisableStructs[battlerId].mimickedMoves & gBitTable[moveIndex])) + if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && MOVE_IS_PERMANENT(battlerId, moveIndex)) gBattleMons[battlerId].pp[moveIndex] = dataUnsigned; retVal = FALSE; @@ -6157,7 +6124,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov case 7: // ITEM4_EVO_STONE { - u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_ITEM_USE, item, SPECIES_NONE); + u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_ITEM_USE, item, NULL); if (targetSpecies != SPECIES_NONE) { @@ -6177,7 +6144,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov case 5: effectFlags = itemEffect[i]; temp1 = 0; - + // Loop through and try each of the ITEM5 effects while (effectFlags != 0) { @@ -6198,12 +6165,18 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Has EV increase limit already been reached? if (evCount >= MAX_TOTAL_EVS) return TRUE; - if (dataSigned >= EV_ITEM_RAISE_LIMIT) + + if (itemEffect[10] & ITEM10_IS_VITAMIN) + evCap = EV_ITEM_RAISE_LIMIT; + else + evCap = 252; + + if (dataSigned >= evCap) break; // Limit the increase - if (dataSigned + evChange > EV_ITEM_RAISE_LIMIT) - temp2 = EV_ITEM_RAISE_LIMIT - (dataSigned + evChange) + evChange; + if (dataSigned + evChange > evCap) + temp2 = evCap - (dataSigned + evChange) + evChange; else temp2 = evChange; @@ -6236,11 +6209,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov case 4: // ITEM5_PP_MAX dataUnsigned = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2); temp2 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); - if (dataUnsigned < 3 && temp2 > 4) + + // Check if 3 PP Ups have been applied already, and that the move has a total PP of at least 5 (excludes Sketch) + if (dataUnsigned < 3 && temp2 >= 5) { dataUnsigned = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); - dataUnsigned &= gPPUpSetMask[moveIndex]; - dataUnsigned += gPPUpAddMask[moveIndex] * 3; + dataUnsigned &= gPPUpClearMask[moveIndex]; + dataUnsigned += gPPUpAddValues[moveIndex] * 3; // Apply 3 PP Ups (max) SetMonData(mon, MON_DATA_PP_BONUSES, &dataUnsigned); dataUnsigned = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), dataUnsigned, moveIndex) - temp2; @@ -6256,25 +6231,19 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // In general, Pokémon with lower friendship receive more, // and Pokémon with higher friendship receive less. if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100) - { - UPDATE_FRIENDSHIP_FROM_ITEM; - } + UPDATE_FRIENDSHIP_FROM_ITEM(); itemEffectParam++; break; case 6: // ITEM5_FRIENDSHIP_MID if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200) - { - UPDATE_FRIENDSHIP_FROM_ITEM; - } + UPDATE_FRIENDSHIP_FROM_ITEM(); itemEffectParam++; break; case 7: // ITEM5_FRIENDSHIP_HIGH if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200) - { - UPDATE_FRIENDSHIP_FROM_ITEM; - } + UPDATE_FRIENDSHIP_FROM_ITEM(); itemEffectParam++; break; } @@ -6319,10 +6288,10 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) temp = gItemEffectTable[itemId - ITEM_POTION]; - if (!temp && itemId != ITEM_ENIGMA_BERRY) + if (!temp && itemId != ITEM_ENIGMA_BERRY_E_READER) return 0; - if (itemId == ITEM_ENIGMA_BERRY) + if (itemId == ITEM_ENIGMA_BERRY_E_READER) { temp = gEnigmaBerries[gActiveBattler].itemEffect; } @@ -6420,11 +6389,19 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) return offset; } -static void BufferStatRoseMessage(s32 arg0) +static void BufferStatRoseMessage(s32 statIdx) { gBattlerTarget = gBattlerInMenuId; - StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[arg0]]); - StringCopy(gBattleTextBuff2, gText_StatRose); + StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[statIdx]]); + if (B_X_ITEMS_BUFF >= GEN_7) + { + StringCopy(gBattleTextBuff2, gText_StatSharply); + StringAppend(gBattleTextBuff2, gText_StatRose); + } + else + { + StringCopy(gBattleTextBuff2, gText_StatRose); + } BattleStringExpandPlaceholdersToDisplayedString(gText_DefendersStatRose); } @@ -6433,7 +6410,7 @@ u8 *UseStatIncreaseItem(u16 itemId) int i; const u8 *itemEffect; - if (itemId == ITEM_ENIGMA_BERRY) + if (itemId == ITEM_ENIGMA_BERRY_E_READER) { if (gMain.inBattle) itemEffect = gEnigmaBerries[gBattlerInMenuId].itemEffect; @@ -6447,23 +6424,32 @@ u8 *UseStatIncreaseItem(u16 itemId) gPotentialItemEffectBattler = gBattlerInMenuId; - for (i = 0; i < 3; i++) + if (itemEffect[0] & ITEM0_DIRE_HIT) { - if (itemEffect[i] & (ITEM0_X_ATTACK | ITEM1_X_SPEED | ITEM2_X_SPATK)) - BufferStatRoseMessage(i * 2); + gBattlerAttacker = gBattlerInMenuId; + BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnGettingPumped); + } - if (itemEffect[i] & (ITEM0_DIRE_HIT | ITEM1_X_DEFEND | ITEM2_X_ACCURACY)) - { - if (i != 0) // Dire Hit is the only ITEM0 above - { - BufferStatRoseMessage(i * 2 + 1); - } - else - { - gBattlerAttacker = gBattlerInMenuId; - BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnGettingPumped); - } - } + switch (itemEffect[1]) + { + case ITEM1_X_ATTACK: + BufferStatRoseMessage(STAT_ATK); + break; + case ITEM1_X_DEFENSE: + BufferStatRoseMessage(STAT_DEF); + break; + case ITEM1_X_SPEED: + BufferStatRoseMessage(STAT_SPEED); + break; + case ITEM1_X_SPATK: + BufferStatRoseMessage(STAT_SPATK); + break; + case ITEM1_X_SPDEF: + BufferStatRoseMessage(STAT_SPDEF); + break; + case ITEM1_X_ACCURACY: + BufferStatRoseMessage(STAT_ACC); + break; } if (itemEffect[3] & ITEM3_GUARD_SPEC) @@ -6485,7 +6471,7 @@ u8 GetNatureFromPersonality(u32 personality) return personality % NUM_NATURES; } -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, u16 tradePartnerSpecies) +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, struct Pokemon *tradePartner) { int i, j; u16 targetSpecies = 0; @@ -6498,14 +6484,36 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, u u16 upperPersonality = personality >> 16; u8 holdEffect; u16 currentMap; + u16 partnerSpecies; + u16 partnerHeldItem; + u8 partnerHoldEffect; - if (heldItem == ITEM_ENIGMA_BERRY) + if (tradePartner != NULL) + { + partnerSpecies = GetMonData(tradePartner, MON_DATA_SPECIES, 0); + partnerHeldItem = GetMonData(tradePartner, MON_DATA_HELD_ITEM, 0); + + if (partnerHeldItem == ITEM_ENIGMA_BERRY) + partnerHoldEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; + else + partnerHoldEffect = ItemId_GetHoldEffect(partnerHeldItem); + } + else + { + partnerSpecies = SPECIES_NONE; + partnerHeldItem = ITEM_NONE; + partnerHoldEffect = HOLD_EFFECT_NONE; + } + + if (heldItem == ITEM_ENIGMA_BERRY_E_READER) holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; else holdEffect = ItemId_GetHoldEffect(heldItem); // Prevent evolution with Everstone, unless we're just viewing the party menu with an evolution item - if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && mode != EVO_MODE_ITEM_CHECK) + if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE + && mode != EVO_MODE_ITEM_CHECK + && (P_KADABRA_EVERSTONE < GEN_4 || species != SPECIES_KADABRA)) return SPECIES_NONE; switch (mode) @@ -6649,7 +6657,8 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, u break; case EVO_LEVEL_RAIN: j = GetCurrentWeather(); - if (j == WEATHER_RAIN || j == WEATHER_RAIN_THUNDERSTORM || j == WEATHER_DOWNPOUR) + if (gEvolutionTable[species][i].param <= level + && (j == WEATHER_RAIN || j == WEATHER_RAIN_THUNDERSTORM || j == WEATHER_DOWNPOUR)) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_MAPSEC: @@ -6661,6 +6670,53 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, u if (currentMap == gEvolutionTable[species][i].param) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; + case EVO_LEVEL_NATURE_AMPED: + if (gEvolutionTable[species][i].param <= level) + { + u8 nature = GetNature(mon); + switch (nature) + { + case NATURE_HARDY: + case NATURE_BRAVE: + case NATURE_ADAMANT: + case NATURE_NAUGHTY: + case NATURE_DOCILE: + case NATURE_IMPISH: + case NATURE_LAX: + case NATURE_HASTY: + case NATURE_JOLLY: + case NATURE_NAIVE: + case NATURE_RASH: + case NATURE_SASSY: + case NATURE_QUIRKY: + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; + } + } + break; + case EVO_LEVEL_NATURE_LOW_KEY: + if (gEvolutionTable[species][i].param <= level) + { + u8 nature = GetNature(mon); + switch (nature) + { + case NATURE_LONELY: + case NATURE_BOLD: + case NATURE_RELAXED: + case NATURE_TIMID: + case NATURE_SERIOUS: + case NATURE_MODEST: + case NATURE_MILD: + case NATURE_QUIET: + case NATURE_BASHFUL: + case NATURE_CALM: + case NATURE_GENTLE: + case NATURE_CAREFUL: + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; + } + } + break; } } break; @@ -6675,13 +6731,13 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, u case EVO_TRADE_ITEM: if (gEvolutionTable[species][i].param == heldItem) { - heldItem = 0; + heldItem = ITEM_NONE; SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem); targetSpecies = gEvolutionTable[species][i].targetSpecies; } break; case EVO_TRADE_SPECIFIC_MON: - if (gEvolutionTable[species][i].param == tradePartnerSpecies) + if (gEvolutionTable[species][i].param == partnerSpecies && partnerHoldEffect != HOLD_EFFECT_PREVENT_EVOLVE) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; } @@ -6708,6 +6764,45 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, u } } break; + // Battle evolution without leveling; party slot is being passed into the evolutionItem arg. + case EVO_MODE_BATTLE_SPECIAL: + for (i = 0; i < EVOS_PER_MON; i++) + { + switch (gEvolutionTable[species][i].method) + { + case EVO_CRITICAL_HITS: + if (gPartyCriticalHits[evolutionItem] >= gEvolutionTable[species][i].param) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; + } + } + break; + // Overworld evolution without leveling; evolution method is being passed into the evolutionItem arg. + case EVO_MODE_OVERWORLD_SPECIAL: + for (i = 0; i < EVOS_PER_MON; i++) + { + switch (gEvolutionTable[species][i].method) + { + case EVO_SCRIPT_TRIGGER_DMG: + { + u16 currentHp = GetMonData(mon, MON_DATA_HP, NULL); + if (evolutionItem == EVO_SCRIPT_TRIGGER_DMG + && currentHp != 0 + && (GetMonData(mon, MON_DATA_MAX_HP, NULL) - currentHp >= gEvolutionTable[species][i].param)) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; + } + case EVO_DARK_SCROLL: + if (evolutionItem == EVO_DARK_SCROLL) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; + case EVO_WATER_SCROLL: + if (evolutionItem == EVO_WATER_SCROLL) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; + } + } + break; } return targetSpecies; @@ -6722,7 +6817,7 @@ u16 HoennPokedexNumToSpecies(u16 hoennNum) species = 0; - while (species < (NUM_SPECIES - 1) && gSpeciesToHoennPokedexNum[species] != hoennNum) + while (species < (NUM_SPECIES - 1) && sSpeciesToHoennPokedexNum[species] != hoennNum) species++; if (species == NUM_SPECIES - 1) @@ -6740,7 +6835,7 @@ u16 NationalPokedexNumToSpecies(u16 nationalNum) species = 0; - while (species < (NUM_SPECIES - 1) && gSpeciesToNationalPokedexNum[species] != nationalNum) + while (species < (NUM_SPECIES - 1) && sSpeciesToNationalPokedexNum[species] != nationalNum) species++; if (species == NUM_SPECIES - 1) @@ -6758,7 +6853,7 @@ u16 NationalToHoennOrder(u16 nationalNum) hoennNum = 0; - while (hoennNum < (HOENN_DEX_COUNT - 1) && gHoennToNationalOrder[hoennNum] != nationalNum) + while (hoennNum < (HOENN_DEX_COUNT - 1) && sHoennToNationalOrder[hoennNum] != nationalNum) hoennNum++; if (hoennNum >= HOENN_DEX_COUNT - 1) @@ -6772,7 +6867,7 @@ u16 SpeciesToNationalPokedexNum(u16 species) if (!species) return 0; - return gSpeciesToNationalPokedexNum[species - 1]; + return sSpeciesToNationalPokedexNum[species - 1]; } u16 SpeciesToHoennPokedexNum(u16 species) @@ -6780,7 +6875,7 @@ u16 SpeciesToHoennPokedexNum(u16 species) if (!species) return 0; - return gSpeciesToHoennPokedexNum[species - 1]; + return sSpeciesToHoennPokedexNum[species - 1]; } u16 HoennToNationalOrder(u16 hoennNum) @@ -6788,45 +6883,84 @@ u16 HoennToNationalOrder(u16 hoennNum) if (!hoennNum || hoennNum >= HOENN_DEX_COUNT) return 0; - return gHoennToNationalOrder[hoennNum - 1]; + return sHoennToNationalOrder[hoennNum - 1]; } -#define DRAW_SPINDA_SPOTS \ +// Spots can be drawn on Spinda's color indexes 1, 2, or 3 +#define FIRST_SPOT_COLOR 1 +#define LAST_SPOT_COLOR 3 + +// To draw a spot pixel, add 4 to the color index +#define SPOT_COLOR_ADJUSTMENT 4 +/* + The macro below handles drawing the randomly-placed spots on Spinda's front sprite. + Spinda has 4 spots, each with an entry in gSpindaSpotGraphics. Each entry contains + a base x and y coordinate for the spot and a 16x16 binary image. Each bit in the image + determines whether that pixel should be considered part of the spot. + + The position of each spot is randomized using the Spinda's personality. The entire 32 bit + personality value is used, 4 bits for each coordinate of the 4 spots. If the personality + value is 0x87654321, then 0x1 will be used for the 1st spot's x coord, 0x2 will be used for + the 1st spot's y coord, 0x3 will be used for the 2nd spot's x coord, and so on. Each + coordinate is calculated as (baseCoord + (given 4 bits of personality) - 8). In effect this + means each spot can start at any position -8 to +7 off of its base coordinates (256 possibilities). + + The macro then loops over the 16x16 spot image. For each bit in the spot's binary image, if + the bit is set then it's part of the spot; try to draw it. A pixel is drawn on Spinda if the + pixel on Spinda satisfies the following formula: ((u8)(colorIndex - 1) <= 2). The -1 excludes + transparent pixels, as these are index 0. Therefore only colors 1, 2, or 3 on Spinda will + allow a spot to be drawn. These color indexes are Spinda's light brown body colors. To create + the spot it adds 4 to the color index, so Spinda's spots will be colors 5, 6, and 7. + + The above is done two different ways in the macro: one with << 4, and one without. This + is because Spinda's sprite is a 4 bits per pixel image, but the pointer to Spinda's pixels + (destPixels) is an 8 bit pointer, so it addresses two pixels. Shifting by 4 accesses the 2nd + of these pixels, so this is done every other time. +*/ +#define DRAW_SPINDA_SPOTS(personality, dest) \ { \ - int i; \ - for (i = 0; i < 4; i++) \ + s32 i; \ + for (i = 0; i < (s32)ARRAY_COUNT(gSpindaSpotGraphics); i++) \ { \ - int j; \ + s32 row; \ u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); \ u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); \ \ - for (j = 0; j < 16; j++) \ + for (row = 0; row < SPINDA_SPOT_HEIGHT; row++) \ { \ - int k; \ - s32 row = gSpindaSpotGraphics[i].image[j]; \ + s32 column; \ + s32 spotPixelRow = gSpindaSpotGraphics[i].image[row]; \ \ - for (k = x; k < x + 16; k++) \ + for (column = x; column < x + SPINDA_SPOT_WIDTH; column++) \ { \ - u8 *val = dest + ((k / 8) * 32) + \ - ((k % 8) / 2) + \ - ((y >> 3) << 8) + \ - ((y & 7) << 2); \ + /* Get target pixels on Spinda's sprite */ \ + u8 *destPixels = dest + ((column / 8) * TILE_SIZE_4BPP) + \ + ((column % 8) / 2) + \ + ((y / 8) * TILE_SIZE_4BPP * 8) + \ + ((y % 8) * 4); \ \ - if (row & 1) \ + /* Is this pixel in the 16x16 spot image part of the spot? */ \ + if (spotPixelRow & 1) \ { \ - if (k & 1) \ + /* destPixels addressess two pixels, alternate which */ \ + /* of the two pixels is being considered for drawing */ \ + if (column & 1) \ { \ - if ((u8)((*val & 0xF0) - 0x10) <= 0x20) \ - *val += 0x40; \ + /* Draw spot pixel if this is Spinda's body color */ \ + if ((u8)((*destPixels & 0xF0) - (FIRST_SPOT_COLOR << 4))\ + <= ((LAST_SPOT_COLOR - FIRST_SPOT_COLOR) << 4))\ + *destPixels += (SPOT_COLOR_ADJUSTMENT << 4); \ } \ else \ { \ - if ((u8)((*val & 0xF) - 0x01) <= 0x02) \ - *val += 0x04; \ + /* Draw spot pixel if this is Spinda's body color */ \ + if ((u8)((*destPixels & 0xF) - FIRST_SPOT_COLOR) \ + <= (LAST_SPOT_COLOR - FIRST_SPOT_COLOR)) \ + *destPixels += SPOT_COLOR_ADJUSTMENT; \ } \ } \ \ - row >>= 1; \ + spotPixelRow >>= 1; \ } \ \ y++; \ @@ -6836,18 +6970,20 @@ u16 HoennToNationalOrder(u16 hoennNum) } \ } +// Same as DrawSpindaSpots but attempts to discern for itself whether or +// not it's the front pic. static void DrawSpindaSpotsUnused(u16 species, u32 personality, u8 *dest) { if (species == SPECIES_SPINDA - && dest != gMonSpritesGfxPtr->sprites.ptr[0] - && dest != gMonSpritesGfxPtr->sprites.ptr[2]) - DRAW_SPINDA_SPOTS; + && dest != gMonSpritesGfxPtr->sprites.ptr[B_POSITION_PLAYER_LEFT] + && dest != gMonSpritesGfxPtr->sprites.ptr[B_POSITION_PLAYER_RIGHT]) + DRAW_SPINDA_SPOTS(personality, dest); } void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, bool8 isFrontPic) { if (species == SPECIES_SPINDA && isFrontPic) - DRAW_SPINDA_SPOTS; + DRAW_SPINDA_SPOTS(personality, dest); } void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies) @@ -6895,46 +7031,55 @@ u16 GetLinkTrainerFlankId(u8 linkPlayerId) return flankId; } -s32 GetBattlerMultiplayerId(u16 a1) +s32 GetBattlerMultiplayerId(u16 id) { - s32 id; - for (id = 0; id < MAX_LINK_PLAYERS; id++) - if (gLinkPlayers[id].id == a1) + s32 multiplayerId; + for (multiplayerId = 0; multiplayerId < MAX_LINK_PLAYERS; multiplayerId++) + if (gLinkPlayers[multiplayerId].id == id) break; - return id; + return multiplayerId; } u8 GetTrainerEncounterMusicId(u16 trainerOpponentId) { if (InBattlePyramid()) - return GetBattlePyramindTrainerEncounterMusicId(trainerOpponentId); + return GetTrainerEncounterMusicIdInBattlePyramid(trainerOpponentId); else if (InTrainerHillChallenge()) return GetTrainerEncounterMusicIdInTrainerHill(trainerOpponentId); else return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId); } -u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) +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) - { - return n; - } + return stat; switch (gNatureStatTable[nature][statIndex - 1]) { case 1: - retVal = n * 110; + retVal = stat * 110; retVal /= 100; break; case -1: - retVal = n * 90; + retVal = stat * 90; retVal /= 100; break; default: - retVal = n; + retVal = stat; break; } @@ -6958,7 +7103,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event) species = GetMonData(mon, MON_DATA_SPECIES2, 0); heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); - if (heldItem == ITEM_ENIGMA_BERRY) + if (heldItem == ITEM_ENIGMA_BERRY_E_READER) { if (gMain.inBattle) holdEffect = gEnigmaBerries[0].holdEffect; @@ -7011,6 +7156,24 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) u16 heldItem; u8 holdEffect; int i, multiplier; + u8 stat; + u8 bonus; + + heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); + if (heldItem == ITEM_ENIGMA_BERRY) + { + if (gMain.inBattle) + holdEffect = gEnigmaBerries[0].holdEffect; + else + holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; + } + else + { + holdEffect = ItemId_GetHoldEffect(heldItem); + } + + stat = ItemId_GetSecondaryId(heldItem); + bonus = ItemId_GetHoldEffectParam(heldItem); for (i = 0; i < NUM_STATS; i++) { @@ -7031,36 +7194,41 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) switch (i) { case STAT_HP: - evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier; + if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_HP) + evIncrease = (gBaseStats[defeatedSpecies].evYield_HP + bonus) * multiplier; + else + evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier; break; case STAT_ATK: - evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier; + if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_ATK) + evIncrease = (gBaseStats[defeatedSpecies].evYield_Attack + bonus) * multiplier; + else + evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier; break; case STAT_DEF: - evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier; + if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_DEF) + evIncrease = (gBaseStats[defeatedSpecies].evYield_Defense + bonus) * multiplier; + else + evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier; break; case STAT_SPEED: - evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier; + if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPEED) + evIncrease = (gBaseStats[defeatedSpecies].evYield_Speed + bonus) * multiplier; + else + evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier; break; case STAT_SPATK: - evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier; + if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPATK) + evIncrease = (gBaseStats[defeatedSpecies].evYield_SpAttack + bonus) * multiplier; + else + evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier; break; case STAT_SPDEF: - evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier; - break; - } - - heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); - if (heldItem == ITEM_ENIGMA_BERRY) - { - if (gMain.inBattle) - holdEffect = gEnigmaBerries[0].holdEffect; + if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPDEF) + evIncrease = (gBaseStats[defeatedSpecies].evYield_SpDefense + bonus) * multiplier; else - holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; - } - else - { - holdEffect = ItemId_GetHoldEffect(heldItem); + evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier; + break; } if (holdEffect == HOLD_EFFECT_MACHO_BRACE) @@ -7264,40 +7432,22 @@ bool8 TryIncrementMonLevel(struct Pokemon *mon) } } -u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) -{ - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); - if (species == SPECIES_EGG) - { - return 0; - } - else if (tm < 32) - { - u32 mask = 1 << tm; - return gTMHMLearnsets[species][0] & mask; - } - else - { - u32 mask = 1 << (tm - 32); - return gTMHMLearnsets[species][1] & mask; - } -} - -u32 CanSpeciesLearnTMHM(u16 species, u8 tm) +u8 CanLearnTeachableMove(u16 species, u16 move) { if (species == SPECIES_EGG) { - return 0; - } - else if (tm < 32) - { - u32 mask = 1 << tm; - return gTMHMLearnsets[species][0] & mask; + return FALSE; } else { - u32 mask = 1 << (tm - 32); - return gTMHMLearnsets[species][1] & mask; + u8 i; + for (i = 0; gTeachableLearnsets[species][i] != MOVE_UNAVAILABLE; i++) + { + if (gTeachableLearnsets[species][i] == move) { + return TRUE; + } + } + return FALSE; } } @@ -7457,7 +7607,7 @@ u16 GetBattleBGM(void) return MUS_VS_GYM_LEADER; case TRAINER_CLASS_CHAMPION: return MUS_VS_CHAMPION; - case TRAINER_CLASS_PKMN_TRAINER_3: + case TRAINER_CLASS_RIVAL: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) return MUS_VS_RIVAL; if (!StringCompare(gTrainers[gTrainerBattleOpponent_A].trainerName, gText_BattleWallyName)) @@ -7536,19 +7686,19 @@ const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 p u32 shinyValue; if (species > NUM_SPECIES) - return gMonPaletteTable[0].data; + return gMonPaletteTable[SPECIES_NONE].data; - shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + shinyValue = GET_SHINY_VALUE(otId, personality); if (shinyValue < SHINY_ODDS) { - if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + if (ShouldShowFemaleDifferences(species, personality)) return gMonShinyPaletteTableFemale[species].data; else return gMonShinyPaletteTable[species].data; } else { - if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + if (ShouldShowFemaleDifferences(species, personality)) return gMonPaletteTableFemale[species].data; else return gMonPaletteTable[species].data; @@ -7567,17 +7717,17 @@ const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u { u32 shinyValue; - shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + shinyValue = GET_SHINY_VALUE(otId, personality); if (shinyValue < SHINY_ODDS) { - if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + if (ShouldShowFemaleDifferences(species, personality)) return &gMonShinyPaletteTableFemale[species]; else return &gMonShinyPaletteTable[species]; } else { - if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + if (ShouldShowFemaleDifferences(species, personality)) return &gMonPaletteTableFemale[species]; else return &gMonPaletteTable[species]; @@ -7587,7 +7737,7 @@ const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u bool32 IsHMMove2(u16 move) { int i = 0; - while (sHMMoves[i] != 0xFFFF) + while (sHMMoves[i] != HM_MOVES_END) { if (sHMMoves[i++] == move) return TRUE; @@ -7625,12 +7775,11 @@ bool8 IsOtherTrainer(u32 otId, u8 *otName) { if (otId == (gSaveBlock2Ptr->playerTrainerId[0] - | (gSaveBlock2Ptr->playerTrainerId[1] << 8) - | (gSaveBlock2Ptr->playerTrainerId[2] << 16) - | (gSaveBlock2Ptr->playerTrainerId[3] << 24))) + | (gSaveBlock2Ptr->playerTrainerId[1] << 8) + | (gSaveBlock2Ptr->playerTrainerId[2] << 16) + | (gSaveBlock2Ptr->playerTrainerId[3] << 24))) { int i; - for (i = 0; otName[i] != EOS; i++) if (otName[i] != gSaveBlock2Ptr->playerName[i]) return TRUE; @@ -7693,49 +7842,65 @@ void SetWildMonHeldItem(void) { if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID | BATTLE_TYPE_PIKE))) { - u16 rnd = Random() % 100; - u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0); - u16 var1 = 45; - u16 var2 = 95; + u16 rnd; + u16 species; + u16 chanceNoItem = 45; + u16 chanceNotRare = 95; + u16 count = (WILD_DOUBLE_BATTLE) ? 2 : 1; + u16 i; + if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG, 0) - && GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES) + && (GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES + || GetMonAbility(&gPlayerParty[0]) == ABILITY_SUPER_LUCK)) { - var1 = 20; - var2 = 80; + chanceNoItem = 20; + chanceNotRare = 80; } - if (gMapHeader.mapLayoutId == LAYOUT_ALTERING_CAVE) + + for (i = 0; i < count; i++) { - s32 alteringCaveId = GetWildMonTableIdInAlteringCave(species); - if (alteringCaveId != 0) + if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != ITEM_NONE) + continue; // prevent ovewriting previously set item + + rnd = Random() % 100; + species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, 0); + if (gMapHeader.mapLayoutId == LAYOUT_ALTERING_CAVE) { - if (rnd < var2) - return; - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &sAlteringCaveWildMonHeldItems[alteringCaveId].item); + s32 alteringCaveId = GetWildMonTableIdInAlteringCave(species); + if (alteringCaveId != 0) + { + // In active Altering Cave, use special item list + if (rnd < chanceNotRare) + continue; + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &sAlteringCaveWildMonHeldItems[alteringCaveId].item); + } + else + { + // In inactive Altering Cave, use normal items + if (rnd < chanceNoItem) + continue; + if (rnd < chanceNotRare) + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon); + else + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare); + } } else { - if (rnd < var1) - return; - if (rnd < var2) - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); + if (gBaseStats[species].itemCommon == gBaseStats[species].itemRare && gBaseStats[species].itemCommon != ITEM_NONE) + { + // Both held items are the same, 100% chance to hold item + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon); + } else - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2); - } - } - else - { - if (gBaseStats[species].item1 == gBaseStats[species].item2 && gBaseStats[species].item1 != 0) - { - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); - } - else - { - if (rnd < var1) - return; - if (rnd < var2) - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); - else - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2); + { + if (rnd < chanceNoItem) + continue; + if (rnd < chanceNotRare) + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon); + else + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare); + } } } } @@ -7751,7 +7916,7 @@ bool8 IsMonShiny(struct Pokemon *mon) bool8 IsShinyOtIdPersonality(u32 otId, u32 personality) { bool8 retVal = FALSE; - u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + u32 shinyValue = GET_SHINY_VALUE(otId, personality); if (shinyValue < SHINY_ODDS) retVal = TRUE; return retVal; @@ -7779,7 +7944,7 @@ const u8 *GetTrainerPartnerName(void) } #define READ_PTR_FROM_TASK(taskId, dataId) \ - (void*)( \ + (void *)( \ ((u16)(gTasks[taskId].data[dataId]) | \ ((u16)(gTasks[taskId].data[dataId + 1]) << 16))) @@ -7789,37 +7954,40 @@ const u8 *GetTrainerPartnerName(void) gTasks[taskId].data[dataId + 1] = (u32)(ptr) >> 16; \ } +#define sAnimId data[2] +#define sAnimDelay data[3] + static void Task_AnimateAfterDelay(u8 taskId) { - if (--gTasks[taskId].data[3] == 0) + if (--gTasks[taskId].sAnimDelay == 0) { - LaunchAnimationTaskForFrontSprite(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].data[2]); + LaunchAnimationTaskForFrontSprite(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].sAnimId); DestroyTask(taskId); } } static void Task_PokemonSummaryAnimateAfterDelay(u8 taskId) { - if (--gTasks[taskId].data[3] == 0) + if (--gTasks[taskId].sAnimDelay == 0) { - StartMonSummaryAnimation(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].data[2]); + StartMonSummaryAnimation(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].sAnimId); SummaryScreen_SetAnimDelayTaskId(TASK_NONE); DestroyTask(taskId); } } -void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3) +void BattleAnimateFrontSprite(struct Sprite *sprite, u16 species, bool8 noCry, u8 panMode) { if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))) - DoMonFrontSpriteAnimation(sprite, species, noCry, arg3 | 0x80); + DoMonFrontSpriteAnimation(sprite, species, noCry, panMode | SKIP_FRONT_ANIM); else - DoMonFrontSpriteAnimation(sprite, species, noCry, arg3); + DoMonFrontSpriteAnimation(sprite, species, noCry, panMode); } -void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3) +void DoMonFrontSpriteAnimation(struct Sprite *sprite, u16 species, bool8 noCry, u8 panModeAnimFlag) { s8 pan; - switch (arg3 & 0x7F) + switch (panModeAnimFlag & (u8)~SKIP_FRONT_ANIM) // Exclude anim flag to get pan mode { case 0: pan = -25; @@ -7831,50 +7999,55 @@ void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, pan = 0; break; } - if (arg3 & 0x80) + if (panModeAnimFlag & SKIP_FRONT_ANIM) { + // No animation, only check if cry needs to be played if (!noCry) - PlayCry1(species, pan); + PlayCry_Normal(species, pan); sprite->callback = SpriteCallbackDummy; } else { if (!noCry) { - PlayCry1(species, pan); + PlayCry_Normal(species, pan); if (HasTwoFramesAnimation(species)) StartSpriteAnim(sprite, 1); } if (sMonAnimationDelayTable[species - 1] != 0) { + // Animation has delay, start delay task u8 taskId = CreateTask(Task_AnimateAfterDelay, 0); STORE_PTR_IN_TASK(sprite, taskId, 0); - gTasks[taskId].data[2] = sMonFrontAnimIdsTable[species - 1]; - gTasks[taskId].data[3] = sMonAnimationDelayTable[species - 1]; + gTasks[taskId].sAnimId = sMonFrontAnimIdsTable[species - 1]; + gTasks[taskId].sAnimDelay = sMonAnimationDelayTable[species - 1]; } else { + // No delay, start animation LaunchAnimationTaskForFrontSprite(sprite, sMonFrontAnimIdsTable[species - 1]); } sprite->callback = SpriteCallbackDummy_2; } } -void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneFrame) +void PokemonSummaryDoMonAnimation(struct Sprite *sprite, u16 species, bool8 oneFrame) { if (!oneFrame && HasTwoFramesAnimation(species)) StartSpriteAnim(sprite, 1); if (sMonAnimationDelayTable[species - 1] != 0) { + // Animation has delay, start delay task u8 taskId = CreateTask(Task_PokemonSummaryAnimateAfterDelay, 0); STORE_PTR_IN_TASK(sprite, taskId, 0); - gTasks[taskId].data[2] = sMonFrontAnimIdsTable[species - 1]; - gTasks[taskId].data[3] = sMonAnimationDelayTable[species - 1]; + gTasks[taskId].sAnimId = sMonFrontAnimIdsTable[species - 1]; + gTasks[taskId].sAnimDelay = sMonAnimationDelayTable[species - 1]; SummaryScreen_SetAnimDelayTaskId(taskId); SetSpriteCB_MonAnimDummy(sprite); } else { + // No delay, start animation StartMonSummaryAnimation(sprite, sMonFrontAnimIdsTable[species - 1]); } } @@ -7886,7 +8059,7 @@ void StopPokemonAnimationDelayTask(void) DestroyTask(delayTaskId); } -void BattleAnimateBackSprite(struct Sprite* sprite, u16 species) +void BattleAnimateBackSprite(struct Sprite *sprite, u16 species) { if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))) { @@ -7899,48 +8072,50 @@ void BattleAnimateBackSprite(struct Sprite* sprite, u16 species) } } -u8 sub_806EF08(u8 arg0) +// Unused, identical to GetOpposingLinkMultiBattlerId but for the player +// "rightSide" from that team's perspective, i.e. B_POSITION_*_RIGHT +static u8 GetOwnOpposingLinkMultiBattlerId(bool8 rightSide) { s32 i; - s32 var = 0; + s32 battlerId = 0; u8 multiplayerId = GetMultiplayerId(); switch (gLinkPlayers[multiplayerId].id) { case 0: case 2: - var = (arg0 != 0) ? 1 : 3; + battlerId = rightSide ? 1 : 3; break; case 1: case 3: - var = (arg0 != 0) ? 2 : 0; + battlerId = rightSide ? 2 : 0; break; } for (i = 0; i < MAX_LINK_PLAYERS; i++) { - if (gLinkPlayers[i].id == (s16)(var)) + if (gLinkPlayers[i].id == (s16)battlerId) break; } return i; } -u8 sub_806EF84(u8 arg0, u8 arg1) +u8 GetOpposingLinkMultiBattlerId(bool8 rightSide, u8 multiplayerId) { s32 i; - s32 var = 0; - switch (gLinkPlayers[arg1].id) + s32 battlerId = 0; + switch (gLinkPlayers[multiplayerId].id) { case 0: case 2: - var = (arg0 != 0) ? 1 : 3; + battlerId = rightSide ? 1 : 3; break; case 1: case 3: - var = (arg0 != 0) ? 2 : 0; + battlerId = rightSide ? 2 : 0; break; } for (i = 0; i < MAX_LINK_PLAYERS; i++) { - if (gLinkPlayers[i].id == (s16)(var)) + if (gLinkPlayers[i].id == (s16)battlerId) break; } return i; @@ -7989,9 +8164,12 @@ const u8 *GetTrainerNameFromId(u16 trainerId) bool8 HasTwoFramesAnimation(u16 species) { return (species != SPECIES_CASTFORM - && species != SPECIES_SPINDA - && species != SPECIES_UNOWN - && species != SPECIES_CHERRIM); + && species != SPECIES_SPINDA + && species != SPECIES_UNOWN + && species != SPECIES_CHERRIM + && species != SPECIES_CASTFORM_SUNNY + && species != SPECIES_CASTFORM_RAINY + && species != SPECIES_CASTFORM_SNOWY); } static bool8 ShouldSkipFriendshipChange(void) @@ -8003,175 +8181,187 @@ static bool8 ShouldSkipFriendshipChange(void) return FALSE; } -static void sub_806F160(struct Unknown_806F160_Struct* structPtr) +// The below functions are for the 'MonSpritesGfxManager', a method of allocating +// space for Pokémon sprites. These are only used for the summary screen Pokémon +// sprites (unless gMonSpritesGfxPtr is in use), but were set up for more general use. +// Only the 'default' mode (MON_SPR_GFX_MODE_NORMAL) is used, which is set +// up to allocate 4 sprites using the battler sprite templates (gBattlerSpriteTemplates). +// MON_SPR_GFX_MODE_BATTLE is identical but never used. +// MON_SPR_GFX_MODE_FULL_PARTY is set up to allocate 7 sprites (party + trainer?) +// using a generic 64x64 template, and is also never used. + +// Between the unnecessarily large sizes below, a mistake allocating the spritePointers +// field, and the fact that ultimately only 1 of the 4 sprite positions is used, this +// system wastes a good deal of memory. + +#define ALLOC_FAIL_BUFFER (1 << 0) +#define ALLOC_FAIL_STRUCT (1 << 1) +#define GFX_MANAGER_ACTIVE 0xA3 // Arbitrary value +#define GFX_MANAGER_SPR_SIZE (MON_PIC_SIZE * 4) // Only Castform uses more than MON_PIC_SIZE, despite not displaying its forms. +#define GFX_MANAGER_NUM_FRAMES 4 // Only 2 frames are needed + +static void InitMonSpritesGfx_Battle(struct MonSpritesGfxManager* gfx) { u16 i, j; - for (i = 0; i < structPtr->field_0_0; i++) + for (i = 0; i < gfx->numSprites; i++) { - structPtr->templates[i] = gBattlerSpriteTemplates[i]; - for (j = 0; j < structPtr->field_1; j++) - { - structPtr->frameImages[i * structPtr->field_1 + j].data = &structPtr->byteArrays[i][j * 0x800]; - } - structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_1]; + gfx->templates[i] = gBattlerSpriteTemplates[i]; + for (j = 0; j < gfx->numFrames; j++) + gfx->frameImages[i * gfx->numFrames + j].data = &gfx->spritePointers[i][j * MON_PIC_SIZE]; + + gfx->templates[i].images = &gfx->frameImages[i * gfx->numFrames]; } } -static void sub_806F1FC(struct Unknown_806F160_Struct* structPtr) +static void InitMonSpritesGfx_FullParty(struct MonSpritesGfxManager* gfx) { u16 i, j; - for (i = 0; i < structPtr->field_0_0; i++) + for (i = 0; i < gfx->numSprites; i++) { - structPtr->templates[i] = gUnknown_08329F28; - for (j = 0; j < structPtr->field_1; j++) - { - structPtr->frameImages[i * structPtr->field_0_0 + j].data = &structPtr->byteArrays[i][j * 0x800]; - } - structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_0_0]; - structPtr->templates[i].anims = gAnims_MonPic; - structPtr->templates[i].paletteTag = i; + gfx->templates[i] = sSpriteTemplate_64x64; + for (j = 0; j < gfx->numFrames; j++) + gfx->frameImages[i * gfx->numSprites + j].data = &gfx->spritePointers[i][j * MON_PIC_SIZE]; + + gfx->templates[i].images = &gfx->frameImages[i * gfx->numSprites]; + gfx->templates[i].anims = gAnims_MonPic; + gfx->templates[i].paletteTag = i; } } -struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) +struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode) { u8 i; - u8 flags; - struct Unknown_806F160_Struct *structPtr; + u8 failureFlags; + struct MonSpritesGfxManager *gfx; - flags = 0; - id %= 2; - structPtr = AllocZeroed(sizeof(*structPtr)); - if (structPtr == NULL) + failureFlags = 0; + managerId %= MON_SPR_GFX_MANAGERS_COUNT; + gfx = AllocZeroed(sizeof(*gfx)); + if (gfx == NULL) return NULL; - switch (arg1) + switch (mode) { - case 2: - structPtr->field_0_0 = 7; - structPtr->field_0_1 = 7; - structPtr->field_1 = 4; - structPtr->field_3_0 = 1; - structPtr->field_3_1 = 2; + case MON_SPR_GFX_MODE_FULL_PARTY: + gfx->numSprites = PARTY_SIZE + 1; + gfx->numSprites2 = PARTY_SIZE + 1; + gfx->numFrames = GFX_MANAGER_NUM_FRAMES; + gfx->dataSize = 1; + gfx->mode = MON_SPR_GFX_MODE_FULL_PARTY; break; - case 0: + // case MON_SPR_GFX_MODE_BATTLE: + case MON_SPR_GFX_MODE_NORMAL: default: - structPtr->field_0_0 = 4; - structPtr->field_0_1 = 4; - structPtr->field_1 = 4; - structPtr->field_3_0 = 1; - structPtr->field_3_1 = 0; + gfx->numSprites = MAX_BATTLERS_COUNT; + gfx->numSprites2 = MAX_BATTLERS_COUNT; + gfx->numFrames = GFX_MANAGER_NUM_FRAMES; + gfx->dataSize = 1; + gfx->mode = MON_SPR_GFX_MODE_NORMAL; break; } - structPtr->bytes = AllocZeroed(structPtr->field_3_0 * 0x800 * 4 * structPtr->field_0_0); - structPtr->byteArrays = AllocZeroed(structPtr->field_0_0 * 32); - if (structPtr->bytes == NULL || structPtr->byteArrays == NULL) + // Set up sprite / sprite pointer buffers + gfx->spriteBuffer = AllocZeroed(gfx->dataSize * GFX_MANAGER_SPR_SIZE * gfx->numSprites); + gfx->spritePointers = AllocZeroed(gfx->numSprites * 32); // ? Only * 4 is necessary, perhaps they were thinking bits. + if (gfx->spriteBuffer == NULL || gfx->spritePointers == NULL) { - flags |= 1; + failureFlags |= ALLOC_FAIL_BUFFER; } else { - for (i = 0; i < structPtr->field_0_0; i++) - structPtr->byteArrays[i] = structPtr->bytes + (structPtr->field_3_0 * (i << 13)); + for (i = 0; i < gfx->numSprites; i++) + gfx->spritePointers[i] = gfx->spriteBuffer + (gfx->dataSize * GFX_MANAGER_SPR_SIZE * i); } - structPtr->templates = AllocZeroed(sizeof(struct SpriteTemplate) * structPtr->field_0_0); - structPtr->frameImages = AllocZeroed(sizeof(struct SpriteFrameImage) * structPtr->field_0_0 * structPtr->field_1); - if (structPtr->templates == NULL || structPtr->frameImages == NULL) + // Set up sprite structs + gfx->templates = AllocZeroed(sizeof(struct SpriteTemplate) * gfx->numSprites); + gfx->frameImages = AllocZeroed(sizeof(struct SpriteFrameImage) * gfx->numSprites * gfx->numFrames); + if (gfx->templates == NULL || gfx->frameImages == NULL) { - flags |= 2; + failureFlags |= ALLOC_FAIL_STRUCT; } else { - for (i = 0; i < structPtr->field_1 * structPtr->field_0_0; i++) - structPtr->frameImages[i].size = 0x800; + for (i = 0; i < gfx->numFrames * gfx->numSprites; i++) + gfx->frameImages[i].size = MON_PIC_SIZE; - switch (structPtr->field_3_1) + switch (gfx->mode) { - case 2: - sub_806F1FC(structPtr); + case MON_SPR_GFX_MODE_FULL_PARTY: + InitMonSpritesGfx_FullParty(gfx); break; - case 0: - case 1: + case MON_SPR_GFX_MODE_NORMAL: + case MON_SPR_GFX_MODE_BATTLE: default: - sub_806F160(structPtr); + InitMonSpritesGfx_Battle(gfx); break; } } - if (flags & 2) + // If either of the allocations failed free their respective members + if (failureFlags & ALLOC_FAIL_STRUCT) { - if (structPtr->frameImages != NULL) - FREE_AND_SET_NULL(structPtr->frameImages); - if (structPtr->templates != NULL) - FREE_AND_SET_NULL(structPtr->templates); + TRY_FREE_AND_SET_NULL(gfx->frameImages); + TRY_FREE_AND_SET_NULL(gfx->templates); } - if (flags & 1) + if (failureFlags & ALLOC_FAIL_BUFFER) { - if (structPtr->byteArrays != NULL) - FREE_AND_SET_NULL(structPtr->byteArrays); - if (structPtr->bytes != NULL) - FREE_AND_SET_NULL(structPtr->bytes); + TRY_FREE_AND_SET_NULL(gfx->spritePointers); + TRY_FREE_AND_SET_NULL(gfx->spriteBuffer); } - if (flags) + if (failureFlags) { - memset(structPtr, 0, sizeof(*structPtr)); - Free(structPtr); + // Clear, something failed to allocate + memset(gfx, 0, sizeof(*gfx)); + Free(gfx); } else { - structPtr->magic = 0xA3; - gUnknown_020249B4[id] = structPtr; + gfx->active = GFX_MANAGER_ACTIVE; + sMonSpritesGfxManagers[managerId] = gfx; } - return gUnknown_020249B4[id]; + return sMonSpritesGfxManagers[managerId]; } -void sub_806F47C(u8 id) +void DestroyMonSpritesGfxManager(u8 managerId) { - struct Unknown_806F160_Struct *structPtr; + struct MonSpritesGfxManager *gfx; - id %= 2; - structPtr = gUnknown_020249B4[id]; - if (structPtr == NULL) + managerId %= MON_SPR_GFX_MANAGERS_COUNT; + gfx = sMonSpritesGfxManagers[managerId]; + if (gfx == NULL) return; - if (structPtr->magic != 0xA3) + if (gfx->active != GFX_MANAGER_ACTIVE) { - memset(structPtr, 0, sizeof(struct Unknown_806F160_Struct)); + memset(gfx, 0, sizeof(*gfx)); } else { - - if (structPtr->frameImages != NULL) - FREE_AND_SET_NULL(structPtr->frameImages); - if (structPtr->templates != NULL) - FREE_AND_SET_NULL(structPtr->templates); - if (structPtr->byteArrays != NULL) - FREE_AND_SET_NULL(structPtr->byteArrays); - if (structPtr->bytes != NULL) - FREE_AND_SET_NULL(structPtr->bytes); - - memset(structPtr, 0, sizeof(struct Unknown_806F160_Struct)); - Free(structPtr); + TRY_FREE_AND_SET_NULL(gfx->frameImages); + TRY_FREE_AND_SET_NULL(gfx->templates); + TRY_FREE_AND_SET_NULL(gfx->spritePointers); + TRY_FREE_AND_SET_NULL(gfx->spriteBuffer); + memset(gfx, 0, sizeof(*gfx)); + Free(gfx); } } -u8 *sub_806F4F8(u8 id, u8 arg1) +u8 *MonSpritesGfxManager_GetSpritePtr(u8 managerId, u8 spriteNum) { - struct Unknown_806F160_Struct *structPtr = gUnknown_020249B4[id % 2]; - if (structPtr->magic != 0xA3) + struct MonSpritesGfxManager *gfx = sMonSpritesGfxManagers[managerId % MON_SPR_GFX_MANAGERS_COUNT]; + if (gfx->active != GFX_MANAGER_ACTIVE) { return NULL; } else { - if (arg1 >= structPtr->field_0_0) - arg1 = 0; + if (spriteNum >= gfx->numSprites) + spriteNum = 0; - return structPtr->byteArrays[arg1]; + return gfx->spritePointers[spriteNum]; } } @@ -8198,20 +8388,25 @@ u8 GetFormIdFromFormSpeciesId(u16 formSpeciesId) return targetFormId; } -// returns SPECIES_NONE if no form change is possible u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg) +{ + return GetFormChangeTargetSpeciesBoxMon(&mon->box, method, arg); +} + +// Returns SPECIES_NONE if no form change is possible +u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg) { u32 i; u16 targetSpecies = SPECIES_NONE; - u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u16 species = GetBoxMonData(mon, MON_DATA_SPECIES, NULL); const struct FormChange *formChanges = gFormChangeTablePointers[species]; u16 heldItem; u32 ability; if (formChanges != NULL) { - heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); - ability = GetAbilityBySpecies(species, GetMonData(mon, MON_DATA_ABILITY_NUM, NULL)); + heldItem = GetBoxMonData(mon, MON_DATA_HELD_ITEM, NULL); + ability = GetAbilityBySpecies(species, GetBoxMonData(mon, MON_DATA_ABILITY_NUM, NULL)); for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) { @@ -8220,7 +8415,7 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg) switch (method) { case FORM_ITEM_HOLD: - if (heldItem == formChanges[i].param1) + if (heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) targetSpecies = formChanges[i].targetSpecies; break; case FORM_ITEM_USE: @@ -8228,11 +8423,12 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg) targetSpecies = formChanges[i].targetSpecies; break; case FORM_MOVE: - if (MonKnowsMove(mon, formChanges[i].param1) != formChanges[i].param2) + if (BoxMonKnowsMove(mon, formChanges[i].param1) != formChanges[i].param2) targetSpecies = formChanges[i].targetSpecies; break; case FORM_ITEM_HOLD_ABILITY: - if (heldItem == formChanges[i].param1 && ability == formChanges[i].param2) + if ((heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) + && ability == formChanges[i].param2) targetSpecies = formChanges[i].targetSpecies; break; case FORM_ITEM_USE_TIME: @@ -8259,3 +8455,83 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg) return species != targetSpecies ? targetSpecies : SPECIES_NONE; } + +u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL); + + // Since you can learn more than one move per level, + // the game needs to know whether you decided to + // learn it or keep the old set to avoid asking + // you to learn the same move over and over again. + if (firstMove) + { + sLearningMoveTableID = 0; + } + while(gLevelUpLearnsets[species][sLearningMoveTableID].move != LEVEL_UP_END) + { + while (gLevelUpLearnsets[species][sLearningMoveTableID].level == 0 || gLevelUpLearnsets[species][sLearningMoveTableID].level == level) + { + gMoveToLearn = gLevelUpLearnsets[species][sLearningMoveTableID].move; + sLearningMoveTableID++; + return GiveMoveToMon(mon, gMoveToLearn); + } + sLearningMoveTableID++; + } + return 0; +} + +static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv) +{ + s32 i, j; + u8 temp[NUM_STATS]; + + ivs[selectedIv] = 0xFF; + for (i = 0; i < NUM_STATS; i++) + { + temp[i] = ivs[i]; + } + + j = 0; + for (i = 0; i < NUM_STATS; i++) + { + if (temp[i] != 0xFF) + ivs[j++] = temp[i]; + } +} + +// Attempts to perform non-level/item related overworld evolutions; called by tryspecialevo command. +void TrySpecialOverworldEvo(void) +{ + u8 i; + u8 evoMethod = gSpecialVar_0x8000; + u16 canStopEvo = gSpecialVar_0x8001; + u16 tryMultiple = gSpecialVar_0x8002; + + for (i = 0; i < PARTY_SIZE; i++) + { + u16 targetSpecies = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_OVERWORLD_SPECIAL, evoMethod, SPECIES_NONE); + if (targetSpecies != SPECIES_NONE && !(sTriedEvolving & gBitTable[i])) + { + sTriedEvolving |= gBitTable[i]; + if(gMain.callback2 == TrySpecialOverworldEvo) // This fixes small graphics glitches. + EvolutionScene(&gPlayerParty[i], targetSpecies, canStopEvo, i); + else + BeginEvolutionScene(&gPlayerParty[i], targetSpecies, canStopEvo, i); + if (tryMultiple) + gCB2_AfterEvolution = TrySpecialOverworldEvo; + else + gCB2_AfterEvolution = CB2_ReturnToField; + return; + } + } + + sTriedEvolving = 0; + SetMainCallback2(CB2_ReturnToField); +} + +bool32 ShouldShowFemaleDifferences(u16 species, u32 personality) +{ + return (gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE; +} diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index ad322f6c21..936ef037d4 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -10,7 +10,7 @@ #include "constants/battle_anim.h" #include "constants/rgb.h" -/* +/* This file handles the movements of the Pokémon intro animations. Each animation type is identified by an ANIM_* constant that @@ -26,7 +26,7 @@ The table linking species to a BACK_ANIM is in this file (sSpeciesToBackAnimSet) while the table linking species to an ANIM for their front animation is in - pokemon.c (sMonFrontAnimIdsTable). + pokemon.c (sMonFrontAnimIdsTable). These are the functions that will start an animation: - LaunchAnimationTaskForFrontSprite diff --git a/src/pokemon_debug.c b/src/pokemon_debug.c new file mode 100644 index 0000000000..8775889fdf --- /dev/null +++ b/src/pokemon_debug.c @@ -0,0 +1,1761 @@ +//Credits: Gamer2020, AsparagusEduardo, TheXaman, ShinyDragonHunter +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_gfx_sfx_util.h" +#include "bg.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "data.h" +#include "decompress.h" +#include "field_weather.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "item.h" +#include "item_icon.h" +#include "list_menu.h" +#include "m4a.h" +#include "main.h" +#include "malloc.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "palette_util.h" +#include "pokedex.h" +#include "pokemon.h" +#include "pokemon_animation.h" +#include "pokemon_debug.h" +#include "pokemon_icon.h" +#include "reset_rtc_screen.h" +#include "scanline_effect.h" +#include "script.h" +#include "script_pokemon_util.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text_window.h" +#include "trainer_pokemon_sprites.h" + +#include "constants/items.h" + +#if P_ENABLE_DEBUG == TRUE +extern const struct BattleBackground sBattleTerrainTable[]; +extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow; +extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; +extern const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2]; +extern const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] ; +extern const struct MonCoords gCastformFrontSpriteCoords[NUM_CASTFORM_FORMS]; +extern const u8 sCastformElevations[NUM_CASTFORM_FORMS]; +extern const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1]; +static const u16 sBgColor[] = {RGB_WHITE}; + +static struct PokemonDebugMenu *GetStructPtr(u8 taskId) +{ + u8 *taskDataPtr = (u8 *)(&gTasks[taskId].data[0]); + + return (struct PokemonDebugMenu*)(T1_READ_PTR(taskDataPtr)); +} + +//BgTemplates +static const struct BgTemplate sBgTemplates[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 24, + .screenSize = 2, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 28, + .screenSize = 2, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 30, + .screenSize = 1, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 26, + .screenSize = 1, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, +}; + +//WindowTemplates +static const struct WindowTemplate sPokemonDebugWindowTemplate[] = +{ + [WIN_NAME_NUMBERS] = { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 12, + .width = 15, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 1 + }, + [WIN_INSTRUCTIONS] = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 15, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 1 + 30 + }, + [WIN_BOTTOM_LEFT] = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 14, + .width = 6, + .height = 6, + .paletteNum = 0xF, + .baseBlock = 1 + 30 + 60 + }, + [WIN_BOTTOM_RIGHT] = { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 14, + .width = 24, + .height = 6, + .paletteNum = 0xF, + .baseBlock = 1 + 30 + 60 + 36 + }, + [WIN_FOOTPRINT] = + { + .bg = 0, + .tilemapLeft = 27, + .tilemapTop = 14, + .width = 2, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 1 + 30 + 60 + 36 + 144, + }, + DUMMY_WIN_TEMPLATE, +}; + +//Lookup tables +const u8 gBackAnimNames[][23 + 1] = +{ + [BACK_ANIM_NONE] = _("NONE"), + [BACK_ANIM_H_VIBRATE] = _("H VIBRATE"), + [BACK_ANIM_H_SLIDE] = _("H SLIDE"), + [BACK_ANIM_H_SPRING] = _("H SPRING"), + [BACK_ANIM_H_SPRING_REPEATED] = _("H SPRING REPEATED"), + [BACK_ANIM_SHRINK_GROW] = _("SHRINK GROW"), + [BACK_ANIM_GROW] = _("GROW"), + [BACK_ANIM_CIRCLE_COUNTERCLOCKWISE] = _("CIRCLE COUNTERCLOCKWISE"), + [BACK_ANIM_H_SHAKE] = _("H SHAKE"), + [BACK_ANIM_V_SHAKE] = _("V SHAKE"), + [BACK_ANIM_V_SHAKE_H_SLIDE] = _("V SHAKE H SLIDE"), + [BACK_ANIM_V_STRETCH] = _("V STRETCH"), + [BACK_ANIM_H_STRETCH] = _("H STRETCH"), + [BACK_ANIM_GROW_STUTTER] = _("GROW STUTTER"), + [BACK_ANIM_V_SHAKE_LOW] = _("V SHAKE LOW"), + [BACK_ANIM_TRIANGLE_DOWN] = _("TRIANGLE DOWN"), + [BACK_ANIM_CONCAVE_ARC_LARGE] = _("CONCAVE ARC LARGE"), + [BACK_ANIM_CONVEX_DOUBLE_ARC] = _("CONVEX DOUBLE ARC"), + [BACK_ANIM_CONCAVE_ARC_SMALL] = _("CONCAVE ARC SMALL"), + [BACK_ANIM_DIP_RIGHT_SIDE] = _("DIP RIGHT SIDE"), + [BACK_ANIM_SHRINK_GROW_VIBRATE] = _("SHRINK GROW VIBRATE"), + [BACK_ANIM_JOLT_RIGHT] = _("JOLT RIGHT"), + [BACK_ANIM_SHAKE_FLASH_YELLOW] = _("SHAKE FLASH YELLOW"), + [BACK_ANIM_SHAKE_GLOW_RED] = _("SHAKE GLOW RED"), + [BACK_ANIM_SHAKE_GLOW_GREEN] = _("SHAKE GLOW GREEN"), + [BACK_ANIM_SHAKE_GLOW_BLUE] = _("SHAKE GLOW BLUE"), +}; +const u8 gFrontAnimNames[][34] = +{ + [ANIM_V_SQUISH_AND_BOUNCE] = _("V SQUISH AND BOUNCE"), + [ANIM_CIRCULAR_STRETCH_TWICE] = _("CIRCULAR STRETCH TWICE"), + [ANIM_H_VIBRATE] = _("H VIBRATE"), + [ANIM_H_SLIDE] = _("H SLIDE"), + [ANIM_V_SLIDE] = _("V SLIDE"), + [ANIM_BOUNCE_ROTATE_TO_SIDES] = _("BOUNCE ROTATE TO SIDES"), + [ANIM_V_JUMPS_H_JUMPS] = _("V JUMPS H JUMPS"), + [ANIM_ROTATE_TO_SIDES] = _("ROTATE TO SIDES"), + [ANIM_ROTATE_TO_SIDES_TWICE] = _("ROTATE TO SIDES TWICE"), + [ANIM_GROW_VIBRATE] = _("GROW VIBRATE"), + [ANIM_ZIGZAG_FAST] = _("ZIGZAG FAST"), + [ANIM_SWING_CONCAVE] = _("SWING CONCAVE"), + [ANIM_SWING_CONCAVE_FAST] = _("SWING CONCAVE FAST"), + [ANIM_SWING_CONVEX] = _("SWING CONVEX"), + [ANIM_SWING_CONVEX_FAST] = _("SWING CONVEX FAST"), + [ANIM_H_SHAKE] = _("H SHAKE"), + [ANIM_V_SHAKE] = _("V SHAKE"), + [ANIM_CIRCULAR_VIBRATE] = _("CIRCULAR VIBRATE"), + [ANIM_TWIST] = _("TWIST"), + [ANIM_SHRINK_GROW] = _("SHRINK GROW"), + [ANIM_CIRCLE_C_CLOCKWISE] = _("CIRCLE C CLOCKWISE"), + [ANIM_GLOW_BLACK] = _("GLOW BLACK"), + [ANIM_H_STRETCH] = _("H STRETCH"), + [ANIM_V_STRETCH] = _("V STRETCH"), + [ANIM_RISING_WOBBLE] = _("RISING WOBBLE"), + [ANIM_V_SHAKE_TWICE] = _("V SHAKE TWICE"), + [ANIM_TIP_MOVE_FORWARD] = _("TIP MOVE FORWARD"), + [ANIM_H_PIVOT] = _("H PIVOT"), + [ANIM_V_SLIDE_WOBBLE] = _("V SLIDE WOBBLE"), + [ANIM_H_SLIDE_WOBBLE] = _("H SLIDE WOBBLE"), + [ANIM_V_JUMPS_BIG] = _("V JUMPS BIG"), + [ANIM_SPIN_LONG] = _("SPIN LONG"), + [ANIM_GLOW_ORANGE] = _("GLOW ORANGE"), + [ANIM_GLOW_RED] = _("GLOW RED"), + [ANIM_GLOW_BLUE] = _("GLOW BLUE"), + [ANIM_GLOW_YELLOW] = _("GLOW YELLOW"), + [ANIM_GLOW_PURPLE] = _("GLOW PURPLE"), + [ANIM_BACK_AND_LUNGE] = _("BACK AND LUNGE"), + [ANIM_BACK_FLIP] = _("BACK FLIP"), + [ANIM_FLICKER] = _("FLICKER"), + [ANIM_BACK_FLIP_BIG] = _("BACK FLIP BIG"), + [ANIM_FRONT_FLIP] = _("FRONT FLIP"), + [ANIM_TUMBLING_FRONT_FLIP] = _("TUMBLING FRONT FLIP"), + [ANIM_FIGURE_8] = _("FIGURE 8"), + [ANIM_FLASH_YELLOW] = _("FLASH YELLOW"), + [ANIM_SWING_CONCAVE_FAST_SHORT] = _("SWING CONCAVE FAST SHORT"), + [ANIM_SWING_CONVEX_FAST_SHORT] = _("SWING CONVEX FAST SHORT"), + [ANIM_ROTATE_UP_SLAM_DOWN] = _("ROTATE UP SLAM DOWN"), + [ANIM_DEEP_V_SQUISH_AND_BOUNCE] = _("DEEP V SQUISH AND BOUNCE"), + [ANIM_H_JUMPS] = _("H JUMPS"), + [ANIM_H_JUMPS_V_STRETCH] = _("H JUMPS V STRETCH"), + [ANIM_ROTATE_TO_SIDES_FAST] = _("ROTATE TO SIDES FAST"), + [ANIM_ROTATE_UP_TO_SIDES] = _("ROTATE UP TO SIDES"), + [ANIM_FLICKER_INCREASING] = _("FLICKER INCREASING"), + [ANIM_TIP_HOP_FORWARD] = _("TIP HOP FORWARD"), + [ANIM_PIVOT_SHAKE] = _("PIVOT SHAKE"), + [ANIM_TIP_AND_SHAKE] = _("TIP AND SHAKE"), + [ANIM_VIBRATE_TO_CORNERS] = _("VIBRATE TO CORNERS"), + [ANIM_GROW_IN_STAGES] = _("GROW IN STAGES"), + [ANIM_V_SPRING] = _("V SPRING"), + [ANIM_V_REPEATED_SPRING] = _("V REPEATED SPRING"), + [ANIM_SPRING_RISING] = _("SPRING RISING"), + [ANIM_H_SPRING] = _("H SPRING"), + [ANIM_H_REPEATED_SPRING_SLOW] = _("H REPEATED SPRING SLOW"), + [ANIM_H_SLIDE_SHRINK] = _("H SLIDE SHRINK"), + [ANIM_LUNGE_GROW] = _("LUNGE GROW"), + [ANIM_CIRCLE_INTO_BG] = _("CIRCLE INTO BG"), + [ANIM_RAPID_H_HOPS] = _("RAPID H HOPS"), + [ANIM_FOUR_PETAL] = _("FOUR PETAL"), + [ANIM_V_SQUISH_AND_BOUNCE_SLOW] = _("V SQUISH AND BOUNCE SLOW"), + [ANIM_H_SLIDE_SLOW] = _("H SLIDE SLOW"), + [ANIM_V_SLIDE_SLOW] = _("V SLIDE SLOW"), + [ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL] = _("BOUNCE ROTATE TO SIDES SMALL"), + [ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW] = _("BOUNCE ROTATE TO SIDES SLOW"), + [ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW] = _("BOUNCE ROTATE TO SIDES SMALL SLOW"), + [ANIM_ZIGZAG_SLOW] = _("ZIGZAG SLOW"), + [ANIM_H_SHAKE_SLOW] = _("H SHAKE SLOW"), + [ANIM_V_SHAKE_SLOW] = _("V SHAKE SLOW"), + [ANIM_TWIST_TWICE] = _("TWIST TWICE"), + [ANIM_CIRCLE_C_CLOCKWISE_SLOW] = _("CIRCLE C CLOCKWISE SLOW"), + [ANIM_V_SHAKE_TWICE_SLOW] = _("V SHAKE TWICE SLOW"), + [ANIM_V_SLIDE_WOBBLE_SMALL] = _("V SLIDE WOBBLE SMALL"), + [ANIM_V_JUMPS_SMALL] = _("V JUMPS SMALL"), + [ANIM_SPIN] = _("SPIN"), + [ANIM_TUMBLING_FRONT_FLIP_TWICE] = _("TUMBLING FRONT FLIP TWICE"), + [ANIM_DEEP_V_SQUISH_AND_BOUNCE_TWICE] = _("DEEP V SQUISH AND BOUNCE TWICE"), + [ANIM_H_JUMPS_V_STRETCH_TWICE] = _("H JUMPS V STRETCH TWICE"), + [ANIM_V_SHAKE_BACK] = _("V SHAKE BACK"), + [ANIM_V_SHAKE_BACK_SLOW] = _("V SHAKE BACK SLOW"), + [ANIM_V_SHAKE_H_SLIDE_SLOW] = _("V SHAKE H SLIDE SLOW"), + [ANIM_V_STRETCH_BOTH_ENDS_SLOW] = _("V STRETCH BOTH ENDS SLOW"), + [ANIM_H_STRETCH_FAR_SLOW] = _("H STRETCH FAR SLOW"), + [ANIM_V_SHAKE_LOW_TWICE] = _("V SHAKE LOW TWICE"), + [ANIM_H_SHAKE_FAST] = _("H SHAKE FAST"), + [ANIM_H_SLIDE_FAST] = _("H SLIDE FAST"), + [ANIM_H_VIBRATE_FAST] = _("H VIBRATE FAST"), + [ANIM_H_VIBRATE_FASTEST] = _("H VIBRATE FASTEST"), + [ANIM_V_SHAKE_BACK_FAST] = _("V SHAKE BACK FAST"), + [ANIM_V_SHAKE_LOW_TWICE_SLOW] = _("V SHAKE LOW TWICE SLOW"), + [ANIM_V_SHAKE_LOW_TWICE_FAST] = _("V SHAKE LOW TWICE FAST"), + [ANIM_CIRCLE_C_CLOCKWISE_LONG] = _("CIRCLE C CLOCKWISE LONG"), + [ANIM_GROW_STUTTER_SLOW] = _("GROW STUTTER SLOW"), + [ANIM_V_SHAKE_H_SLIDE] = _("V SHAKE H SLIDE"), + [ANIM_V_SHAKE_H_SLIDE_FAST] = _("V SHAKE H SLIDE FAST"), + [ANIM_TRIANGLE_DOWN_SLOW] = _("TRIANGLE DOWN SLOW"), + [ANIM_TRIANGLE_DOWN] = _("TRIANGLE DOWN"), + [ANIM_TRIANGLE_DOWN_TWICE] = _("TRIANGLE DOWN TWICE"), + [ANIM_GROW] = _("GROW"), + [ANIM_GROW_TWICE] = _("GROW TWICE"), + [ANIM_H_SPRING_FAST] = _("H SPRING FAST"), + [ANIM_H_SPRING_SLOW] = _("H SPRING SLOW"), + [ANIM_H_REPEATED_SPRING_FAST] = _("H REPEATED SPRING FAST"), + [ANIM_H_REPEATED_SPRING] = _("H REPEATED SPRING"), + [ANIM_SHRINK_GROW_FAST] = _("SHRINK GROW FAST"), + [ANIM_SHRINK_GROW_SLOW] = _("SHRINK GROW SLOW"), + [ANIM_V_STRETCH_BOTH_ENDS] = _("V STRETCH BOTH ENDS"), + [ANIM_V_STRETCH_BOTH_ENDS_TWICE] = _("V STRETCH BOTH ENDS TWICE"), + [ANIM_H_STRETCH_FAR_TWICE] = _("H STRETCH FAR TWICE"), + [ANIM_H_STRETCH_FAR] = _("H STRETCH FAR"), + [ANIM_GROW_STUTTER_TWICE] = _("GROW STUTTER TWICE"), + [ANIM_GROW_STUTTER] = _("GROW STUTTER"), + [ANIM_CONCAVE_ARC_LARGE_SLOW] = _("CONCAVE ARC LARGE SLOW"), + [ANIM_CONCAVE_ARC_LARGE] = _("CONCAVE ARC LARGE"), + [ANIM_CONCAVE_ARC_LARGE_TWICE] = _("CONCAVE ARC LARGE TWICE"), + [ANIM_CONVEX_DOUBLE_ARC_SLOW] = _("CONVEX DOUBLE ARC SLOW"), + [ANIM_CONVEX_DOUBLE_ARC] = _("CONVEX DOUBLE ARC"), + [ANIM_CONVEX_DOUBLE_ARC_TWICE] = _("CONVEX DOUBLE ARC TWICE"), + [ANIM_CONCAVE_ARC_SMALL_SLOW] = _("CONCAVE ARC SMALL SLOW"), + [ANIM_CONCAVE_ARC_SMALL] = _("CONCAVE ARC SMALL"), + [ANIM_CONCAVE_ARC_SMALL_TWICE] = _("CONCAVE ARC SMALL TWICE"), + [ANIM_H_DIP] = _("H DIP"), + [ANIM_H_DIP_FAST] = _("H DIP FAST"), + [ANIM_H_DIP_TWICE] = _("H DIP TWICE"), + [ANIM_SHRINK_GROW_VIBRATE_FAST] = _("SHRINK GROW VIBRATE FAST"), + [ANIM_SHRINK_GROW_VIBRATE] = _("SHRINK GROW VIBRATE"), + [ANIM_SHRINK_GROW_VIBRATE_SLOW] = _("SHRINK GROW VIBRATE SLOW"), + [ANIM_JOLT_RIGHT_FAST] = _("JOLT RIGHT FAST"), + [ANIM_JOLT_RIGHT] = _("JOLT RIGHT"), + [ANIM_JOLT_RIGHT_SLOW] = _("JOLT RIGHT SLOW"), + [ANIM_SHAKE_FLASH_YELLOW_FAST] = _("SHAKE FLASH YELLOW FAST"), + [ANIM_SHAKE_FLASH_YELLOW] = _("SHAKE FLASH YELLOW"), + [ANIM_SHAKE_FLASH_YELLOW_SLOW] = _("SHAKE FLASH YELLOW SLOW"), + [ANIM_SHAKE_GLOW_RED_FAST] = _("SHAKE GLOW RED FAST"), + [ANIM_SHAKE_GLOW_RED] = _("SHAKE GLOW RED"), + [ANIM_SHAKE_GLOW_RED_SLOW] = _("SHAKE GLOW RED SLOW"), + [ANIM_SHAKE_GLOW_GREEN_FAST] = _("SHAKE GLOW GREEN FAST"), + [ANIM_SHAKE_GLOW_GREEN] = _("SHAKE GLOW GREEN"), + [ANIM_SHAKE_GLOW_GREEN_SLOW] = _("SHAKE GLOW GREEN SLOW"), + [ANIM_SHAKE_GLOW_BLUE_FAST] = _("SHAKE GLOW BLUE FAST"), + [ANIM_SHAKE_GLOW_BLUE] = _("SHAKE GLOW BLUE"), + [ANIM_SHAKE_GLOW_BLUE_SLOW] = _("SHAKE GLOW BLUE SLOW"), + [ANIM_SHAKE_GLOW_BLACK_SLOW] = _("SHAKE GLOW BLACK SLOW"), + [ANIM_SHAKE_GLOW_WHITE_SLOW] = _("SHAKE GLOW WHITE SLOW"), + [ANIM_SHAKE_GLOW_PURPLE_SLOW] = _("SHAKE GLOW PURPLE SLOW"), +}; +const u8 gBattleBackgroundNames[][30] = +{ + [MAP_BATTLE_SCENE_NORMAL] = _("NORMAL "), + [MAP_BATTLE_SCENE_GYM] = _("GYM "), + [MAP_BATTLE_SCENE_MAGMA] = _("MAGMA "), + [MAP_BATTLE_SCENE_AQUA] = _("AQUA "), + [MAP_BATTLE_SCENE_SIDNEY] = _("SIDNEY "), + [MAP_BATTLE_SCENE_PHOEBE] = _("PHOEBE "), + [MAP_BATTLE_SCENE_GLACIA] = _("GLACIA "), + [MAP_BATTLE_SCENE_DRAKE] = _("DRAKE "), + [MAP_BATTLE_SCENE_FRONTIER] = _("FRONTIER "), + [MAP_BATTLE_SCENE_LEADER] = _("LEADER "), + [MAP_BATTLE_SCENE_WALLACE] = _("WALLACE "), + [MAP_BATTLE_SCENE_GROUDON] = _("GROUDON "), + [MAP_BATTLE_SCENE_KYOGRE] = _("KYOGRE "), + [MAP_BATTLE_SCENE_RAYQUAZA] = _("RAYQUAZA "), +}; +const u8 gBattleBackgroundTerrainNames[][26] = +{ + [BATTLE_TERRAIN_GRASS] = _("NORMAL - GRASS "), + [BATTLE_TERRAIN_LONG_GRASS] = _("NORMAL - LONG GRASS "), + [BATTLE_TERRAIN_SAND] = _("NORMAL - SAND "), + [BATTLE_TERRAIN_UNDERWATER] = _("NORMAL - UNDERWATER "), + [BATTLE_TERRAIN_WATER] = _("NORMAL - WATER "), + [BATTLE_TERRAIN_POND] = _("NORMAL - POND "), + [BATTLE_TERRAIN_MOUNTAIN] = _("NORMAL - MOUNTAIN "), + [BATTLE_TERRAIN_CAVE] = _("NORMAL - CAVE "), + [BATTLE_TERRAIN_BUILDING] = _("NORMAL - BUILDING "), + [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 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); + +//Text handling functions +static void PadString(const u8 *src, u8 *dst) +{ + u32 i; + + for (i = 0; i < 17 && src[i] != EOS; i++) + dst[i] = src[i]; + + for (; i < 17; i++) + dst[i] = CHAR_SPACE; + + dst[i] = EOS; +} + +static void PrintInstructionsOnWindow(struct PokemonDebugMenu *data) +{ + u8 fontId = 0; + u8 x = 2; + u8 textInstructions[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Exit {A_BUTTON} Submenu 1$"); + u8 textInstructionsGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Exit {A_BUTTON} Submenu 1$"); + u8 textInstructionsSubmenuOne[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back {A_BUTTON} Submenu 2$"); + u8 textInstructionsSubmenuOneGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back {A_BUTTON} Submenu 2$"); + u8 textInstructionsSubmenuTwo[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back$"); + u8 textInstructionsSubmenuTwoGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back$"); + + + u8 textBottom[] = _("BACK:\nFRONT:\nBG:$"); + u8 textBottomForms[] = _("BACK:\nFRONT:\nBG:\nFORMS:$"); + u8 textBottomSubmenuTwo[] = _("B coords:\nF coords:\nF elev:"); + u16 species = data->modifyArrows.currValue; + + u8 textL[] = _("{L_BUTTON}"); + u8 textR[] = _("{R_BUTTON}"); + + //Instruction window + FillWindowPixelBuffer(WIN_INSTRUCTIONS, 0x11); + if (data->currentSubmenu == 0) + { + if (gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) + AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsGender, x, 0, 0, NULL); + else + AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructions, x, 0, 0, NULL); + } + else if (data->currentSubmenu == 1) + { + if (gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) + AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuOneGender, x, 0, 0, NULL); + else + AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuOne, x, 0, 0, NULL); + } + else if (data->currentSubmenu == 2) + { + if (gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) + AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuTwoGender, x, 0, 0, NULL); + else + AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuTwo, x, 0, 0, NULL); + } + CopyWindowToVram(WIN_INSTRUCTIONS, 3); + + //Bottom left text + FillWindowPixelBuffer(WIN_BOTTOM_LEFT, PIXEL_FILL(0)); + if (data->currentSubmenu != 2) + { + AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textL, 30, 0, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textR, 30, 12, 0, NULL); + if (gFormSpeciesIdTables[data->currentmonId] != NULL) + AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottomForms, 0, 0, 0, NULL); + else + AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottom, 0, 0, 0, NULL); + } + else + AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottomSubmenuTwo, 0, 0, 0, NULL); +} + +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void SetStructPtr(u8 taskId, void *ptr) +{ + u32 structPtr = (u32)(ptr); + u8 *taskDataPtr = (u8 *)(&gTasks[taskId].data[0]); + + taskDataPtr[0] = structPtr >> 0; + taskDataPtr[1] = structPtr >> 8; + taskDataPtr[2] = structPtr >> 16; + taskDataPtr[3] = structPtr >> 24; +} + +//Digit and arrow functions +#define VAL_U16 0 +static void PrintDigitChars(struct PokemonDebugMenu *data) +{ + s32 i; + u16 species = data->modifyArrows.currValue; + u8 text[MODIFY_DIGITS_MAX + POKEMON_NAME_LENGTH + 8]; + + for (i = 0; i < data->modifyArrows.maxDigits; i++) + text[i] = data->modifyArrows.charDigits[i]; + + text[i++] = CHAR_SPACE; + text[i++] = CHAR_HYPHEN; + + if (gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) + { + if (data->isFemale) + text[i++] = CHAR_FEMALE; + else + text[i++] = CHAR_MALE; + text[i++] = CHAR_HYPHEN; + } + + text[i++] = CHAR_SPACE; + StringCopy(&text[i], gSpeciesNames[species]); + + FillWindowPixelBuffer(WIN_NAME_NUMBERS, 0x11); + AddTextPrinterParameterized(WIN_NAME_NUMBERS, 1, text, 6, 0, 0, NULL); +} + +static u32 CharDigitsToValue(u8 *charDigits, u8 maxDigits) +{ + s32 i; + u8 id = 0; + u32 newValue = 0; + u8 valueDigits[MODIFY_DIGITS_MAX]; + + for (i = 0; i < MODIFY_DIGITS_MAX; i++) + valueDigits[i] = charDigits[i] - CHAR_0; + + if (maxDigits >= MODIFY_DIGITS_MAX) + newValue += valueDigits[id++] * 1000; + if (maxDigits >= MODIFY_DIGITS_MAX - 1) + newValue += valueDigits[id++] * 100; + if (maxDigits >= MODIFY_DIGITS_MAX - 2) + newValue += valueDigits[id++] * 10; + if (maxDigits >= MODIFY_DIGITS_MAX - 3) + newValue += valueDigits[id++]; + + return newValue; +} + +static void ValueToCharDigits(u8 *charDigits, u32 newValue, u8 maxDigits) +{ + s32 i; + u8 valueDigits[MODIFY_DIGITS_MAX]; + u8 id = 0; + + if (maxDigits >= MODIFY_DIGITS_MAX) + valueDigits[id++] = newValue / 1000; + if (maxDigits >= MODIFY_DIGITS_MAX - 1) + valueDigits[id++] = (newValue % 1000) / 100; + if (maxDigits >= MODIFY_DIGITS_MAX - 2) + valueDigits[id++] = (newValue % 100) / 10; + if (maxDigits >= MODIFY_DIGITS_MAX - 3) + valueDigits[id++] = newValue % 10; + + for (i = 0; i < MODIFY_DIGITS_MAX; i++) + charDigits[i] = valueDigits[i] + CHAR_0; +} + +static void SetArrowInvisibility(struct PokemonDebugMenu *data) +{ + bool8 invisible = data->currentSubmenu; + switch (data->currentSubmenu) + { + case 0: + gSprites[data->modifyArrows.arrowSpriteId[0]].invisible = FALSE; + gSprites[data->modifyArrows.arrowSpriteId[1]].invisible = FALSE; + gSprites[data->optionArrows.arrowSpriteId[0]].invisible = TRUE; + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].invisible = TRUE; + break; + case 1: + gSprites[data->modifyArrows.arrowSpriteId[0]].invisible = TRUE; + gSprites[data->modifyArrows.arrowSpriteId[1]].invisible = TRUE; + gSprites[data->optionArrows.arrowSpriteId[0]].invisible = FALSE; + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].invisible = TRUE; + break; + case 2: + gSprites[data->modifyArrows.arrowSpriteId[0]].invisible = TRUE; + gSprites[data->modifyArrows.arrowSpriteId[1]].invisible = TRUE; + gSprites[data->optionArrows.arrowSpriteId[0]].invisible = TRUE; + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].invisible = FALSE; + break; + } +} + +static void SetUpModifyArrows(struct PokemonDebugMenu *data) +{ + LoadSpritePalette(&gSpritePalette_Arrow); + data->modifyArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, MODIFY_DIGITS_ARROW_X, MODIFY_DIGITS_ARROW1_Y, 0); + data->modifyArrows.arrowSpriteId[1] = CreateSprite(&gSpriteTemplate_Arrow, MODIFY_DIGITS_ARROW_X, MODIFY_DIGITS_ARROW2_Y, 0); + gSprites[data->modifyArrows.arrowSpriteId[1]].animNum = 1; + + data->modifyArrows.minValue = 1; + data->modifyArrows.maxValue = NUM_SPECIES - 1; + data->modifyArrows.maxDigits = 4; + data->modifyArrows.modifiedValPtr = &data->currentmonId; + data->modifyArrows.typeOfVal = VAL_U16; + data->modifyArrows.currValue = data->currentmonId; + + data->modifyArrows.currentDigit = 0; + ValueToCharDigits(data->modifyArrows.charDigits, data->modifyArrows.currValue, data->modifyArrows.maxDigits); +} + +static void SetUpOptionArrows(struct PokemonDebugMenu *data) +{ + LoadSpritePalette(&gSpritePalette_Arrow); + data->optionArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, OPTIONS_ARROW_1_X, OPTIONS_ARROW_Y, 0); + gSprites[data->optionArrows.arrowSpriteId[0]].animNum = 2; + + data->optionArrows.currentDigit = 0; + + gSprites[data->optionArrows.arrowSpriteId[0]].invisible = TRUE; +} + +static void SetUpYPosModifyArrows(struct PokemonDebugMenu *data) +{ + LoadSpritePalette(&gSpritePalette_Arrow); + data->yPosModifyArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, OPTIONS_ARROW_1_X, OPTIONS_ARROW_Y, 0); + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].animNum = 2; + + data->yPosModifyArrows.currentDigit = 0; + + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].invisible = TRUE; +} + +static bool32 TryMoveDigit(struct PokemonDebugModifyArrows *modArrows, bool32 moveUp) +{ + s32 i; + u8 charDigits[MODIFY_DIGITS_MAX]; + u32 newValue; + + for (i = 0; i < MODIFY_DIGITS_MAX; i++) + charDigits[i] = modArrows->charDigits[i]; + + if (moveUp) + { + if (charDigits[modArrows->currentDigit] == CHAR_9) + { + charDigits[modArrows->currentDigit] = CHAR_0; + for (i = modArrows->currentDigit - 1; i >= 0; i--) + { + if (charDigits[i] == CHAR_9) + charDigits[i] = CHAR_0; + else + { + charDigits[i]++; + break; + } + } + } + else + charDigits[modArrows->currentDigit]++; + } + else + { + if (charDigits[modArrows->currentDigit] == CHAR_0) + { + charDigits[modArrows->currentDigit] = CHAR_9; + + for (i = modArrows->currentDigit - 1; i >= 0; i--) + { + if (charDigits[i] == CHAR_0) + charDigits[i] = CHAR_9; + else + { + charDigits[i]--; + break; + } + } + } + + else + charDigits[modArrows->currentDigit]--; + } + + newValue = CharDigitsToValue(charDigits, modArrows->maxDigits); + if (newValue > modArrows->maxValue || newValue < modArrows->minValue) + { + return FALSE; + } + else + { + modArrows->currValue = newValue; + for (i = 0; i < MODIFY_DIGITS_MAX; i++) + modArrows->charDigits[i] = charDigits[i]; + return TRUE; + } +} + +static void UpdateBattlerValue(struct PokemonDebugMenu *data) +{ + u32 i; + switch (data->modifyArrows.typeOfVal) + { + case VAL_U16: + *(u16*)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue; + break; + } +} + +//Sprite functions +static const struct CompressedSpritePalette *GetMonSpritePalStructCustom(u16 species, bool8 isFemale, bool8 isShiny) +{ + if (isShiny) + { + if ((gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) && isFemale) + return &gMonShinyPaletteTableFemale[species]; + else + return &gMonShinyPaletteTable[species]; + } + else + { + if ((gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) && isFemale) + return &gMonPaletteTableFemale[species]; + else + return &gMonPaletteTable[species]; + } +} + +static void BattleLoadOpponentMonSpriteGfxCustom(u16 species, bool8 isFemale, bool8 isShiny, u8 battlerId) +{ + u16 paletteOffset; + const void *lzPaletteData; + const struct CompressedSpritePalette *palette; + + paletteOffset = 0x100 + battlerId * 16; + + palette = GetMonSpritePalStructCustom(species, isFemale, isShiny); + + if (isShiny) + { + if ((gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) && isFemale) + lzPaletteData = gMonShinyPaletteTableFemale[species].data; + else + lzPaletteData = gMonShinyPaletteTable[species].data; + } + else + { + if ((gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) && isFemale) + lzPaletteData = gMonPaletteTableFemale[species].data; + else + lzPaletteData = gMonPaletteTable[species].data; + } + + LZDecompressWram(lzPaletteData, gDecompressionBuffer); + LoadPalette(gDecompressionBuffer, paletteOffset, 0x20); + LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20); +} + +static bool8 IsCastformForm(species) +{ + if (species == SPECIES_CASTFORM_SUNNY || species == SPECIES_CASTFORM_RAINY || species == SPECIES_CASTFORM_SNOWY) + return TRUE; + + return FALSE; +} + +static u8 GetCastformYCustom(species) +{ + u8 ret; + switch (species) + { + case SPECIES_CASTFORM: + ret = gCastformFrontSpriteCoords[CASTFORM_NORMAL].y_offset; + break; + case SPECIES_CASTFORM_SUNNY: + ret = gCastformFrontSpriteCoords[CASTFORM_FIRE].y_offset; + break; + case SPECIES_CASTFORM_RAINY: + ret = gCastformFrontSpriteCoords[CASTFORM_WATER].y_offset; + break; + case SPECIES_CASTFORM_SNOWY: + ret = gCastformFrontSpriteCoords[CASTFORM_ICE].y_offset; + break; + } + return ret; +} + +static u8 GetElevationValue(u16 species) +{ + u8 val; + if (species == SPECIES_CASTFORM) + val = sCastformElevations[0]; + else if (IsCastformForm(species)) + val = sCastformElevations[species - SPECIES_CASTFORM_SUNNY + 1]; + else + val = gEnemyMonElevation[species]; + + return val; +} + +static void SetConstSpriteValues(struct PokemonDebugMenu *data) +{ + u16 species = data->currentmonId; + data->constSpriteValues.frontPicCoords = gMonFrontPicCoords[species].y_offset; + data->constSpriteValues.frontElevation = GetElevationValue(species); + data->constSpriteValues.backPicCoords = gMonBackPicCoords[species].y_offset; +} + +static void ResetOffsetSpriteValues(struct PokemonDebugMenu *data) +{ + data->offsetsSpriteValues.offset_back_picCoords = 0; + data->offsetsSpriteValues.offset_front_picCoords = 0; + data->offsetsSpriteValues.offset_front_elevation = 0; +} + +static u8 GetBattlerSpriteFinal_YCustom(u16 species, s8 offset_picCoords, s8 offset_elevation) +{ + u16 offset; + u8 y; + + //FrontPicCoords + offset = gMonFrontPicCoords[species].y_offset + offset_picCoords; + + //Elevation + offset -= GetElevationValue(species) + offset_elevation; + + //Main position + y = offset + sBattlerCoords[0][1].y; + + if (y > DISPLAY_HEIGHT - MON_PIC_HEIGHT + 8) + y = DISPLAY_HEIGHT - MON_PIC_HEIGHT + 8; + + return y; +} + +static void UpdateShadowSpriteInvisible(struct PokemonDebugMenu *data) +{ + if (data->constSpriteValues.frontElevation + data->offsetsSpriteValues.offset_front_elevation == 0) + gSprites[data->frontShadowSpriteId].invisible = TRUE; + else + gSprites[data->frontShadowSpriteId].invisible = FALSE; +} + +static void SpriteCB_EnemyShadowCustom(struct Sprite *shadowSprite) +{ + u8 frontSpriteId = shadowSprite->data[0]; + struct Sprite *battlerSprite = &gSprites[frontSpriteId]; + + shadowSprite->x = battlerSprite->x; + shadowSprite->x2 = battlerSprite->x2; +} + +static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonDebugMenu *data, u16 species) +{ + u8 x, y; + bool8 invisible = FALSE; + if (gEnemyMonElevation[species] == 0 && !IsCastformForm(species)) + invisible = TRUE; + LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); + LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); + x = sBattlerCoords[0][1].x; + y = sBattlerCoords[0][1].y; + + data->frontShadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, x, y + 29, 0xC8); + gSprites[data->frontShadowSpriteId].data[0] = data->frontspriteId; + + gSprites[data->frontShadowSpriteId].callback = SpriteCB_EnemyShadowCustom; + gSprites[data->frontShadowSpriteId].oam.priority = 0; + gSprites[data->frontShadowSpriteId].invisible = invisible; +} + +//Tile functions (footprints) +static void DrawFootprintCustom(u8 windowId, u16 species) +{ + u8 footprint[32 * 4] = {0}; + const u8 *footprintGfx = gMonFootprintTable[species]; + u32 i, j, tileIdx = 0; + + if (footprintGfx != NULL) + { + for (i = 0; i < 32; i++) + { + u8 tile = footprintGfx[i]; + for (j = 0; j < 4; j++) + { + u8 value = ((tile >> (2 * j)) & 1 ? 2 : 0); + if (tile & (2 << (2 * j))) + value |= 0x20; + footprint[tileIdx] = value; + tileIdx++; + } + } + } + CopyToWindowPixelBuffer(windowId, footprint, sizeof(footprint), 0); +} + +//Battle background functions +static void LoadBattleBg(u8 battleBgType, u8 battleTerrain) +{ + switch (battleBgType) + { + default: + case MAP_BATTLE_SCENE_NORMAL: + LZDecompressVram(sBattleTerrainTable[battleTerrain].tileset, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(sBattleTerrainTable[battleTerrain].tilemap, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(sBattleTerrainTable[battleTerrain].palette, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_GYM: + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_MAGMA: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_AQUA: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_SIDNEY: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_PHOEBE: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_GLACIA: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_DRAKE: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_FRONTIER: + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_LEADER: + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_WALLACE: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_GROUDON: + LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_KYOGRE: + LZDecompressVram(gBattleTerrainTiles_Water, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_RAYQUAZA: + LZDecompressVram(gBattleTerrainTiles_Rayquaza, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_Rayquaza, 0x20, 0x60); + break; + } +} +static void PrintBattleBgName(u8 taskId) +{ + struct PokemonDebugMenu *data = GetStructPtr(taskId); + u8 fontId = 0; + u8 text[30+1]; + + if (data->battleBgType == 0) + StringCopy(text, gBattleBackgroundTerrainNames[data->battleTerrain]); + else + StringCopy(text, gBattleBackgroundNames[data->battleBgType]); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, 0, 24, 0, NULL); +} +static void UpdateBattleBg(u8 taskId, bool8 increment) +{ + struct PokemonDebugMenu *data = GetStructPtr(taskId); + + if (data->battleBgType == MAP_BATTLE_SCENE_NORMAL) + { + if (increment) + { + if (data->battleTerrain == BATTLE_TERRAIN_PLAIN) + data->battleBgType += 1; + else + data->battleTerrain += 1; + } + else + { + if (data->battleTerrain == BATTLE_TERRAIN_GRASS) + data->battleBgType = MAP_BATTLE_SCENE_RAYQUAZA; + else + data->battleTerrain -= 1; + } + } + else if (data->battleBgType == MAP_BATTLE_SCENE_GYM) + { + if (increment) + data->battleBgType += 1; + else + { + data->battleBgType = MAP_BATTLE_SCENE_NORMAL; + data->battleTerrain = BATTLE_TERRAIN_PLAIN; + } + } + else if (data->battleBgType == MAP_BATTLE_SCENE_RAYQUAZA) + { + if (increment) + { + data->battleBgType = MAP_BATTLE_SCENE_NORMAL; + data->battleTerrain = BATTLE_TERRAIN_GRASS; + } + else + data->battleBgType -= 1; + } + else + { + if (increment) + data->battleBgType += 1; + else + data->battleBgType -= 1; + } + + PrintBattleBgName(taskId); + + LoadBattleBg(data->battleBgType, data->battleTerrain); +} + +// ******************************* +// Main functions +static void UpdateMonAnimNames(u8 taskId) +{ + struct PokemonDebugMenu *data = GetStructPtr(taskId); + u8 frontAnim = data->animIdFront; + u8 backAnim = data->animIdBack; + u8 text[34]; + u8 fontId = 0; + u8 textNum[4]; + + FillWindowPixelBuffer(WIN_BOTTOM_RIGHT, PIXEL_FILL(0)); + + //Back + StringCopy(text, gBackAnimNames[backAnim]); + ConvertIntToDecimalStringN(textNum, backAnim, STR_CONV_MODE_LEADING_ZEROS, 3); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNum, 0, 0, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, 18, 0, 0, NULL); + //Front + StringCopy(text, gFrontAnimNames[frontAnim]); + ConvertIntToDecimalStringN(textNum, frontAnim, STR_CONV_MODE_LEADING_ZEROS, 3); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNum, 0, 12, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, 18, 12, 0, NULL); + + PrintBattleBgName(taskId); +} + +static void UpdateYPosOffsetText(struct PokemonDebugMenu *data) +{ + u8 text[34]; + u8 fontId = 0; + u8 textConst[] = _("const val:"); + u8 textNew[] = _("new val:"); + u8 x_const_val = 50; + u8 x_new_text = 70; + u8 x_new_val = 110; + u8 y = 0; + + u8 backPicCoords = data->constSpriteValues.backPicCoords; + u8 frontPicCoords = data->constSpriteValues.frontPicCoords; + u8 frontElevation = data->constSpriteValues.frontElevation; + + s8 offset_back_picCoords = data->offsetsSpriteValues.offset_back_picCoords; + s8 offset_front_picCoords = data->offsetsSpriteValues.offset_front_picCoords; + s8 offset_front_elevation = data->offsetsSpriteValues.offset_front_elevation; + + u8 newBackPicCoords = backPicCoords + offset_back_picCoords; + u8 newFrontPicCoords = frontPicCoords + offset_front_picCoords; + u8 newFrontElevation = frontElevation + offset_front_elevation; + + FillWindowPixelBuffer(WIN_BOTTOM_RIGHT, PIXEL_FILL(0)); + + //Back + y = 0; + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textConst, 0, y, 0, NULL); + ConvertIntToDecimalStringN(text, backPicCoords , STR_CONV_MODE_LEFT_ALIGN, 2); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_const_val, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNew, x_new_text, y, 0, NULL); + ConvertIntToDecimalStringN(text, newBackPicCoords , STR_CONV_MODE_LEFT_ALIGN, 2); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_new_val, y, 0, NULL); + //Front picCoords + y = 12; + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textConst, 0, y, 0, NULL); + ConvertIntToDecimalStringN(text, frontPicCoords , STR_CONV_MODE_LEFT_ALIGN, 2); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_const_val, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNew, x_new_text, y, 0, NULL); + ConvertIntToDecimalStringN(text, newFrontPicCoords , STR_CONV_MODE_LEFT_ALIGN, 2); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_new_val, y, 0, NULL); + //Front elevation + y = 24; + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textConst, 0, y, 0, NULL); + ConvertIntToDecimalStringN(text, frontElevation , STR_CONV_MODE_LEFT_ALIGN, 2); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_const_val, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNew, x_new_text, y, 0, NULL); + ConvertIntToDecimalStringN(text, newFrontElevation , STR_CONV_MODE_LEFT_ALIGN, 2); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_new_val, y, 0, NULL); +} + +static void ResetPokemonDebugWindows(void) +{ + u8 i; + + FreeAllWindowBuffers(); + InitWindows(sPokemonDebugWindowTemplate); + + for (i = 0; i < WIN_END + 1; i++) + { + FillWindowPixelBuffer(i, PIXEL_FILL(0)); + PutWindowTilemap(i); + CopyWindowToVram(i, 3); + } +} + +#define MALE_PERSONALITY 0xFE +#define FEMALE_PERSONALITY 0X0 + +void CB2_Debug_Pokemon(void) +{ + u8 taskId; + const struct CompressedSpritePalette *palette; + struct PokemonDebugMenu *data; + u16 species; + s16 offset_y; + u8 front_x = sBattlerCoords[0][1].x; + u8 front_y; + + switch (gMain.state) + { + case 0: + default: + SetVBlankCallback(NULL); + FreeMonSpritesGfx(); + ResetBGs_Debug_Menu(0); + DmaFillLarge16(3, 0, (u8 *)VRAM, VRAM_SIZE, 0x1000) + DmaClear32(3, OAM, OAM_SIZE); + DmaClear16(3, PLTT, PLTT_SIZE); + gMain.state = 1; + break; + case 1: + ScanlineEffect_Stop(); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 8; + ResetAllPicSprites(); + BlendPalettes(PALETTES_ALL, 16, RGB_BLACK); + LoadPalette(GetTextWindowPalette(0), 15*16, 0x40); + + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 15); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + data->battleBgType = 0; + data->battleTerrain = 0; + LoadBattleBg(data->battleBgType , data->battleTerrain); + + gMain.state++; + break; + case 2: + ResetPokemonDebugWindows(); + gMain.state++; + break; + case 3: + AllocateMonSpritesGfx(); + + LoadPalette(sBgColor, 0, 2); + LoadMonIconPalette(SPECIES_BULBASAUR); + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + + //input task handler + taskId = CreateTask(Handle_Input_Debug_Pokemon, 0); + + data = AllocZeroed(sizeof(struct PokemonDebugMenu)); + SetStructPtr(taskId, data); + + data->currentmonId = SPECIES_BULBASAUR; + species = data->currentmonId; + + //Print instructions + PrintInstructionsOnWindow(data); + + //Palettes + palette = GetMonSpritePalStructCustom(species, data->isFemale, data->isShiny); + LoadCompressedSpritePalette(palette); + //Front + HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[1], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY)); + data->isShiny = FALSE; + data->isFemale = FALSE; + BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 1); + SetMultiuseSpriteTemplateToPokemon(species, 1); + gMultiuseSpriteTemplate.paletteTag = palette->tag; + front_y = GetBattlerSpriteFinal_YCustom(species, 0, 0); + data->frontspriteId = CreateSprite(&gMultiuseSpriteTemplate, front_x, front_y, 0); + gSprites[data->frontspriteId].oam.paletteNum = 1; + gSprites[data->frontspriteId].callback = SpriteCallbackDummy; + gSprites[data->frontspriteId].oam.priority = 0; + //Front Shadow + LoadAndCreateEnemyShadowSpriteCustom(data, species); + + //Back + HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->sprites.ptr[2], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY)); + BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 4); + SetMultiuseSpriteTemplateToPokemon(species, 2); + offset_y = gMonBackPicCoords[species].y_offset; + data->backspriteId = CreateSprite(&gMultiuseSpriteTemplate, DEBUG_MON_BACK_X, DEBUG_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)); + gSprites[data->iconspriteId].oam.priority = 0; + + //Modify Arrows + SetUpModifyArrows(data); + PrintDigitChars(data); + + //Option Arrow + SetUpOptionArrows(data); + + //Modify Y Pos Arrow + SetUpYPosModifyArrows(data); + + //Anim names + data->animIdBack = GetSpeciesBackAnimSet(species) + 1; + data->animIdFront = sMonFrontAnimIdsTable[data->currentmonId - 1]; + UpdateMonAnimNames(taskId); + + //BattleNg Name + PrintBattleBgName(taskId); + + //Footprint + DrawFootprintCustom(WIN_FOOTPRINT, species); + CopyWindowToVram(WIN_FOOTPRINT, COPYWIN_GFX); + + gMain.state++; + break; + case 4: + EnableInterrupts(1); + SetVBlankCallback(VBlankCB); + SetMainCallback2(CB2_Debug_Runner); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80); + break; + } +} + +static void CB2_Debug_Runner(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void ResetBGs_Debug_Menu(u16 a) +{ + if (!(a & DISPCNT_BG0_ON)) + { + ClearGpuRegBits(0, DISPCNT_BG0_ON); + SetGpuReg(REG_OFFSET_BG0CNT, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + } + if (!(a & DISPCNT_BG1_ON)) + { + ClearGpuRegBits(0, DISPCNT_BG1_ON); + SetGpuReg(REG_OFFSET_BG1CNT, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + } + if (!(a & DISPCNT_BG2_ON)) + { + ClearGpuRegBits(0, DISPCNT_BG2_ON); + SetGpuReg(REG_OFFSET_BG2CNT, 0); + SetGpuReg(REG_OFFSET_BG2HOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + } + if (!(a & DISPCNT_BG3_ON)) + { + ClearGpuRegBits(0, DISPCNT_BG3_ON); + SetGpuReg(REG_OFFSET_BG3CNT, 0); + SetGpuReg(REG_OFFSET_BG3HOFS, 0); + SetGpuReg(REG_OFFSET_BG3VOFS, 0); + } + if (!(a & DISPCNT_OBJ_ON)) + { + ClearGpuRegBits(0, DISPCNT_OBJ_ON); + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 8; + } +} + +static void ApplyOffsetSpriteValues(struct PokemonDebugMenu *data) +{ + u16 species = data->currentmonId; + //Back + gSprites[data->backspriteId].y = DEBUG_MON_BACK_Y + gMonBackPicCoords[species].y_offset + data->offsetsSpriteValues.offset_back_picCoords; + //Front + gSprites[data->frontspriteId].y = GetBattlerSpriteFinal_YCustom(species, data->offsetsSpriteValues.offset_front_picCoords, data->offsetsSpriteValues.offset_front_elevation); + //Shadow if one was added + UpdateShadowSpriteInvisible(data); +} + +static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment) +{ + struct PokemonDebugMenu *data = GetStructPtr(taskId); + u8 option = data->submenuYpos[1]; + + switch (option) + { + case 0: + if (increment) + { + if (data->animIdBack >= BACK_ANIM_SHAKE_GLOW_BLUE) + data->animIdBack = 1; + else + data->animIdBack += 1; + } + else + { + if (data->animIdBack <= 1) + data->animIdBack = BACK_ANIM_SHAKE_GLOW_BLUE; + else + data->animIdBack -= 1; + } + UpdateMonAnimNames(taskId); + break; + case 1: + if (increment) + { + if (data->animIdFront >= ANIM_SHAKE_GLOW_PURPLE_SLOW) + data->animIdFront = 0; + else + data->animIdFront += 1; + } + else + { + if (data->animIdFront <= 0) + data->animIdFront = ANIM_SHAKE_GLOW_PURPLE_SLOW; + else + data->animIdFront -= 1; + } + UpdateMonAnimNames(taskId); + break; + case 2: + UpdateBattleBg(taskId, increment); + break; + case 3: + if (gFormSpeciesIdTables[data->currentmonId] != NULL) + { + struct PokemonDebugModifyArrows *modArrows = &data->modifyArrows; + u8 formId = GetFormIdFromFormSpeciesId(data->currentmonId); + if (increment) + { + if (gFormSpeciesIdTables[data->currentmonId][formId + 1] != FORM_SPECIES_END) + modArrows->currValue = GetFormSpeciesId(data->currentmonId, formId + 1); + else + modArrows->currValue = gFormSpeciesIdTables[data->currentmonId][0]; + } + else + { + if (gFormSpeciesIdTables[data->currentmonId][formId] == gFormSpeciesIdTables[data->currentmonId][0]) + { + u8 lastForm; + for (lastForm = 0; gFormSpeciesIdTables[data->currentmonId][lastForm] != FORM_SPECIES_END; lastForm++) + { + if (gFormSpeciesIdTables[data->currentmonId][lastForm + 1] == FORM_SPECIES_END) + break; + } + modArrows->currValue = gFormSpeciesIdTables[data->currentmonId][lastForm]; + } + else + modArrows->currValue = GetFormSpeciesId(data->currentmonId, formId - 1); + } + data->animIdBack = GetSpeciesBackAnimSet(modArrows->currValue) + 1; + data->animIdFront = sMonFrontAnimIdsTable[modArrows->currValue - 1]; + UpdateMonAnimNames(taskId); + ResetOffsetSpriteValues(data); + + UpdateBattlerValue(data); + ReloadPokemonSprites(data); + while (!(gMain.intrCheck & INTR_FLAG_VBLANK)); + PlaySE(SE_DEX_SCROLL); + } + break; + default: + break; + } +} + +static void UpdateSubmenuTwoOptionValue(u8 taskId, bool8 increment) +{ + struct PokemonDebugMenu *data = GetStructPtr(taskId); + u16 species = data->currentmonId; + u8 option = data->submenuYpos[2]; + s8 offset; + u8 y; + + switch (option) + { + case 0: //Back picCoords + offset = data->offsetsSpriteValues.offset_back_picCoords; + if (increment) + { + if (offset == MAX_Y_OFFSET) + offset = -data->constSpriteValues.backPicCoords; + else + offset += 1; + } + else + { + if (offset == -data->constSpriteValues.backPicCoords) + offset = MAX_Y_OFFSET; + else + offset -= 1; + } + data->offsetsSpriteValues.offset_back_picCoords = offset; + gSprites[data->backspriteId].y = DEBUG_MON_BACK_Y + gMonBackPicCoords[species].y_offset + offset; + break; + case 1: //Front picCoords + offset = data->offsetsSpriteValues.offset_front_picCoords; + if (increment) + { + if (offset == MAX_Y_OFFSET) + offset = -data->constSpriteValues.frontPicCoords; + else + offset += 1; + } + else + { + if (offset == -data->constSpriteValues.frontPicCoords) + offset = MAX_Y_OFFSET; + else + offset -= 1; + } + data->offsetsSpriteValues.offset_front_picCoords = offset; + y = GetBattlerSpriteFinal_YCustom(species, offset, data->offsetsSpriteValues.offset_front_elevation); + gSprites[data->frontspriteId].y = y; + break; + case 2: //Front elevation + offset = data->offsetsSpriteValues.offset_front_elevation; + if (increment) + { + if (offset == MAX_Y_OFFSET) + offset = -data->constSpriteValues.frontElevation; + else + offset += 1; + } + else + { + if (offset == -data->constSpriteValues.frontElevation) + offset = MAX_Y_OFFSET; + else + offset -= 1; + } + data->offsetsSpriteValues.offset_front_elevation = offset; + y = GetBattlerSpriteFinal_YCustom(species, data->offsetsSpriteValues.offset_front_picCoords, offset); + gSprites[data->frontspriteId].y = y; + UpdateShadowSpriteInvisible(data); + break; + } + + UpdateYPosOffsetText(data); +} + +static void Handle_Input_Debug_Pokemon(u8 taskId) +{ + struct PokemonDebugMenu *data = GetStructPtr(taskId); + struct Sprite *Frontsprite = &gSprites[data->frontspriteId]; + struct Sprite *Backsprite = &gSprites[data->backspriteId]; + + if (JOY_NEW(L_BUTTON) && (Backsprite->callback == SpriteCallbackDummy)) + { + PlayCryInternal(data->currentmonId, 0, 120, 10, 0); + LaunchAnimationTaskForBackSprite(Backsprite, data->animIdBack-1); + } + if (JOY_NEW(R_BUTTON) && (Frontsprite->callback == SpriteCallbackDummy)) + { + PlayCryInternal(data->currentmonId, 0, 120, 10, 0); + if (HasTwoFramesAnimation(data->currentmonId)) + StartSpriteAnim(Frontsprite, 1); + LaunchAnimationTaskForFrontSprite(Frontsprite, data->animIdFront); + } + + if (JOY_NEW(START_BUTTON)) + { + data->isShiny = !data->isShiny; + + if(data->isShiny) + PlaySE(SE_SHINY); + + ReloadPokemonSprites(data); + ApplyOffsetSpriteValues(data); + } + if (JOY_NEW(SELECT_BUTTON) && (gBaseStats[data->currentmonId].flags & FLAG_GENDER_DIFFERENCE)) + { + data->isFemale = !data->isFemale; + PrintDigitChars(data); + UpdateBattlerValue(data); + ReloadPokemonSprites(data); + while (!(gMain.intrCheck & INTR_FLAG_VBLANK)); + PlaySE(SE_DEX_SCROLL); + } + + if (data->currentSubmenu == 0) + { + if (JOY_NEW(A_BUTTON)) + { + data->currentSubmenu = 1; + SetArrowInvisibility(data); + PrintInstructionsOnWindow(data); + } + else if (JOY_NEW(B_BUTTON)) + { + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + gTasks[taskId].func = Exit_Debug_Pokemon; + PlaySE(SE_PC_OFF); + } + else if (JOY_NEW(DPAD_DOWN)) + { + if (TryMoveDigit(&data->modifyArrows, FALSE)) + { + data->isFemale = FALSE; + PrintDigitChars(data); + UpdateBattlerValue(data); + ReloadPokemonSprites(data); + data->animIdBack = GetSpeciesBackAnimSet(data->currentmonId) + 1; + data->animIdFront = sMonFrontAnimIdsTable[data->currentmonId - 1]; + UpdateMonAnimNames(taskId); + ResetOffsetSpriteValues(data); + } + PlaySE(SE_DEX_SCROLL); + while (!(gMain.intrCheck & INTR_FLAG_VBLANK)); + } + else if (JOY_NEW(DPAD_UP)) + { + if (TryMoveDigit(&data->modifyArrows, TRUE)) + { + data->isFemale = FALSE; + PrintDigitChars(data); + UpdateBattlerValue(data); + ReloadPokemonSprites(data); + data->animIdBack = GetSpeciesBackAnimSet(data->currentmonId) + 1; + data->animIdFront = sMonFrontAnimIdsTable[data->currentmonId - 1]; + UpdateMonAnimNames(taskId); + ResetOffsetSpriteValues(data); + } + + PlaySE(SE_DEX_SCROLL); + } + else if (JOY_NEW(DPAD_LEFT)) + { + if (data->modifyArrows.currentDigit != 0) + { + data->modifyArrows.currentDigit--; + gSprites[data->modifyArrows.arrowSpriteId[0]].x2 -= 6; + gSprites[data->modifyArrows.arrowSpriteId[1]].x2 -= 6; + } + } + else if (JOY_NEW(DPAD_RIGHT)) + { + if (data->modifyArrows.currentDigit != (data->modifyArrows.maxDigits - 1)) + { + data->modifyArrows.currentDigit++; + gSprites[data->modifyArrows.arrowSpriteId[0]].x2 += 6; + gSprites[data->modifyArrows.arrowSpriteId[1]].x2 += 6; + } + } + + } + else if (data->currentSubmenu == 1) //Submenu 1 + { + if (JOY_NEW(A_BUTTON)) + { + data->currentSubmenu = 2; + PrintInstructionsOnWindow(data); + SetArrowInvisibility(data); + SetConstSpriteValues(data); + UpdateYPosOffsetText(data); + } + else if (JOY_NEW(B_BUTTON)) + { + data->currentSubmenu = 0; + if (data->submenuYpos[1] == 3) + { + data->submenuYpos[1] = 2; + data->optionArrows.currentDigit = data->submenuYpos[1]; + gSprites[data->optionArrows.arrowSpriteId[0]].y = OPTIONS_ARROW_Y + data->optionArrows.currentDigit * 12; + } + SetArrowInvisibility(data); + PrintInstructionsOnWindow(data); + } + else if (JOY_NEW(DPAD_DOWN)) + { + data->submenuYpos[1] += 1; + if (data->submenuYpos[1] >= 3) + { + if ((gFormSpeciesIdTables[data->currentmonId] == NULL) || (data->submenuYpos[1] >= 4)) + data->submenuYpos[1] = 0; + } + data->optionArrows.currentDigit = data->submenuYpos[1]; + gSprites[data->optionArrows.arrowSpriteId[0]].y = OPTIONS_ARROW_Y + data->optionArrows.currentDigit * 12; + } + else if (JOY_NEW(DPAD_UP)) + { + if (data->submenuYpos[1] == 0) + { + if (gFormSpeciesIdTables[data->currentmonId] != NULL) + data->submenuYpos[1] = 3; + else + data->submenuYpos[1] = 2; + } + else + data->submenuYpos[1] -= 1; + + data->optionArrows.currentDigit = data->submenuYpos[1]; + gSprites[data->optionArrows.arrowSpriteId[0]].y = OPTIONS_ARROW_Y + data->optionArrows.currentDigit * 12; + } + else if (JOY_NEW(DPAD_LEFT)) + { + UpdateSubmenuOneOptionValue(taskId, FALSE); + } + else if (JOY_NEW(DPAD_RIGHT)) + { + UpdateSubmenuOneOptionValue(taskId, TRUE); + } + } + else if (data->currentSubmenu == 2) //Submenu 2 + { + if (JOY_NEW(B_BUTTON)) + { + data->currentSubmenu = 1; + + SetArrowInvisibility(data); + PrintInstructionsOnWindow(data); + UpdateMonAnimNames(taskId); + } + else if (JOY_NEW(DPAD_DOWN)) + { + data->submenuYpos[2] += 1; + if (data->submenuYpos[2] >= 3) + data->submenuYpos[2] = 0; + + data->yPosModifyArrows.currentDigit = data->submenuYpos[2]; + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].y = OPTIONS_ARROW_Y + data->yPosModifyArrows.currentDigit * 12; + } + else if (JOY_NEW(DPAD_UP)) + { + if (data->submenuYpos[2] == 0) + data->submenuYpos[2] = 2; + else + data->submenuYpos[2] -= 1; + + data->yPosModifyArrows.currentDigit = data->submenuYpos[2]; + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].y = OPTIONS_ARROW_Y + data->yPosModifyArrows.currentDigit * 12; + } + else if (JOY_NEW(DPAD_LEFT)) + { + UpdateSubmenuTwoOptionValue(taskId, FALSE); + } + else if (JOY_NEW(DPAD_RIGHT)) + { + UpdateSubmenuTwoOptionValue(taskId, TRUE); + } + } +} + +static void ReloadPokemonSprites(struct PokemonDebugMenu *data) +{ + const struct CompressedSpritePalette *palette; + u16 species = data->currentmonId; + s16 offset_y; + u8 front_x = sBattlerCoords[0][1].x; + u8 front_y; + + DestroySprite(&gSprites[data->frontspriteId]); + DestroySprite(&gSprites[data->backspriteId]); + DestroySprite(&gSprites[data->iconspriteId]); + + FreeMonSpritesGfx(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + ResetAllPicSprites(); + FreeMonIconPalettes(); + + AllocateMonSpritesGfx(); + LoadMonIconPalette(species); + + //Update instructions + PrintInstructionsOnWindow(data); + + //Palettes + palette = GetMonSpritePalStructCustom(species, data->isFemale, data->isShiny); + LoadCompressedSpritePalette(palette); + //Front + HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[1], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY)); + BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 1); + SetMultiuseSpriteTemplateToPokemon(species, 1); + gMultiuseSpriteTemplate.paletteTag = palette->tag; + front_y = GetBattlerSpriteFinal_YCustom(species, 0, 0); + data->frontspriteId = CreateSprite(&gMultiuseSpriteTemplate, front_x, front_y, 0); + gSprites[data->frontspriteId].oam.paletteNum = 1; + gSprites[data->frontspriteId].callback = SpriteCallbackDummy; + gSprites[data->frontspriteId].oam.priority = 0; + //Front Shadow + LoadAndCreateEnemyShadowSpriteCustom(data, species); + + //Back + HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->sprites.ptr[2], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY)); + BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 5); + SetMultiuseSpriteTemplateToPokemon(species, 2); + offset_y = gMonBackPicCoords[species].y_offset; + data->backspriteId = CreateSprite(&gMultiuseSpriteTemplate, DEBUG_MON_BACK_X, DEBUG_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)); + gSprites[data->iconspriteId].oam.priority = 0; + + //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); + data->modifyArrows.arrowSpriteId[1] = CreateSprite(&gSpriteTemplate_Arrow, MODIFY_DIGITS_ARROW_X + (data->modifyArrows.currentDigit * 6), MODIFY_DIGITS_ARROW2_Y, 0); + gSprites[data->modifyArrows.arrowSpriteId[1]].animNum = 1; + + //Option Arrow + LoadSpritePalette(&gSpritePalette_Arrow); + data->optionArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, OPTIONS_ARROW_1_X, OPTIONS_ARROW_Y + data->optionArrows.currentDigit * 12, 0); + gSprites[data->optionArrows.arrowSpriteId[0]].animNum = 2; + + //Y Pos Modify Arrow + LoadSpritePalette(&gSpritePalette_Arrow); + data->yPosModifyArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, OPTIONS_ARROW_1_X, OPTIONS_ARROW_Y + data->yPosModifyArrows.currentDigit * 12, 0); + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].animNum = 2; + + //Arrow invisibility + SetArrowInvisibility(data); + + //Footprint + DrawFootprintCustom(WIN_FOOTPRINT, species); + CopyWindowToVram(WIN_FOOTPRINT, COPYWIN_GFX); +} + +static void Exit_Debug_Pokemon(u8 taskId) +{ + if (!gPaletteFade.active) + { + struct PokemonDebugMenu *data = GetStructPtr(taskId); + Free(data); + FreeMonSpritesGfx(); + DestroyTask(taskId); + SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); + } +} + +#endif diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 2a872a9e45..4bbdf07b07 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -2,6 +2,7 @@ #include "graphics.h" #include "mail.h" #include "palette.h" +#include "pokemon_debug.h" #include "pokemon_icon.h" #include "sprite.h" #include "data.h" @@ -20,10 +21,8 @@ struct MonIconSpriteTemplate u16 paletteTag; }; -// static functions static u8 CreateMonIconSprite(struct MonIconSpriteTemplate *, s16, s16, u8); - -// .rodata +static void FreeAndDestroyMonIconSprite_(struct Sprite *sprite); const u8 *const gMonIconTable[] = { @@ -414,6 +413,7 @@ const u8 *const gMonIconTable[] = [SPECIES_JIRACHI] = gMonIcon_Jirachi, [SPECIES_DEOXYS] = gMonIcon_Deoxys, [SPECIES_CHIMECHO] = gMonIcon_Chimecho, +#if P_NEW_POKEMON == TRUE [SPECIES_TURTWIG] = gMonIcon_Turtwig, [SPECIES_GROTLE] = gMonIcon_Grotle, [SPECIES_TORTERRA] = gMonIcon_Torterra, @@ -925,7 +925,14 @@ const u8 *const gMonIconTable[] = [SPECIES_REGIDRAGO] = gMonIcon_Regidrago, [SPECIES_GLASTRIER] = gMonIcon_Glastrier, [SPECIES_SPECTRIER] = gMonIcon_Spectrier, - [SPECIES_CALYREX] = gMonIcon_QuestionMark,//gMonIcon_Calyrex, + [SPECIES_CALYREX] = gMonIcon_Calyrex, + [SPECIES_WYRDEER] = gMonIcon_Wyrdeer, + [SPECIES_KLEAVOR] = gMonIcon_Kleavor, + [SPECIES_URSALUNA] = gMonIcon_Ursaluna, + [SPECIES_BASCULEGION] = gMonIcon_Basculegion, + [SPECIES_SNEASLER] = gMonIcon_Sneasler, + [SPECIES_OVERQWIL] = gMonIcon_Overqwil, + [SPECIES_ENAMORUS] = gMonIcon_Enamorus, [SPECIES_VENUSAUR_MEGA] = gMonIcon_VenusaurMega, [SPECIES_CHARIZARD_MEGA_X] = gMonIcon_CharizardMegaX, [SPECIES_CHARIZARD_MEGA_Y] = gMonIcon_CharizardMegaY, @@ -1013,6 +1020,22 @@ const u8 *const gMonIconTable[] = [SPECIES_DARMANITAN_GALARIAN] = gMonIcon_DarmanitanGalarian, [SPECIES_YAMASK_GALARIAN] = gMonIcon_YamaskGalarian, [SPECIES_STUNFISK_GALARIAN] = gMonIcon_StunfiskGalarian, + [SPECIES_GROWLITHE_HISUIAN] = gMonIcon_GrowlitheHisuian, + [SPECIES_ARCANINE_HISUIAN] = gMonIcon_ArcanineHisuian, + [SPECIES_VOLTORB_HISUIAN] = gMonIcon_VoltorbHisuian, + [SPECIES_ELECTRODE_HISUIAN] = gMonIcon_ElectrodeHisuian, + [SPECIES_TYPHLOSION_HISUIAN] = gMonIcon_TyphlosionHisuian, + [SPECIES_QWILFISH_HISUIAN] = gMonIcon_QwilfishHisuian, + [SPECIES_SNEASEL_HISUIAN] = gMonIcon_SneaselHisuian, + [SPECIES_SAMUROTT_HISUIAN] = gMonIcon_SamurottHisuian, + [SPECIES_LILLIGANT_HISUIAN] = gMonIcon_LilligantHisuian, + [SPECIES_ZORUA_HISUIAN] = gMonIcon_ZoruaHisuian, + [SPECIES_ZOROARK_HISUIAN] = gMonIcon_ZoroarkHisuian, + [SPECIES_BRAVIARY_HISUIAN] = gMonIcon_BraviaryHisuian, + [SPECIES_SLIGGOO_HISUIAN] = gMonIcon_SliggooHisuian, + [SPECIES_GOODRA_HISUIAN] = gMonIcon_GoodraHisuian, + [SPECIES_AVALUGG_HISUIAN] = gMonIcon_AvaluggHisuian, + [SPECIES_DECIDUEYE_HISUIAN] = gMonIcon_DecidueyeHisuian, [SPECIES_PIKACHU_COSPLAY] = gMonIcon_PikachuCosplay, [SPECIES_PIKACHU_ROCK_STAR] = gMonIcon_PikachuRockStar, [SPECIES_PIKACHU_BELLE] = gMonIcon_PikachuBelle, @@ -1028,6 +1051,7 @@ const u8 *const gMonIconTable[] = [SPECIES_PIKACHU_PARTNER_CAP] = gMonIcon_PikachuPartnerCap, [SPECIES_PIKACHU_WORLD_CAP] = gMonIcon_QuestionMark, [SPECIES_PICHU_SPIKY_EARED] = gMonIcon_PichuSpikyEared, +#endif [SPECIES_UNOWN_B] = gMonIcon_UnownB, [SPECIES_UNOWN_C] = gMonIcon_UnownC, [SPECIES_UNOWN_D] = gMonIcon_UnownD, @@ -1061,6 +1085,7 @@ const u8 *const gMonIconTable[] = [SPECIES_DEOXYS_ATTACK] = gMonIcon_DeoxysAttack, [SPECIES_DEOXYS_DEFENSE] = gMonIcon_DeoxysDefense, [SPECIES_DEOXYS_SPEED] = gMonIcon_DeoxysSpeed, +#if P_NEW_POKEMON == TRUE [SPECIES_BURMY_SANDY_CLOAK] = gMonIcon_BurmySandyCloak, [SPECIES_BURMY_TRASH_CLOAK] = gMonIcon_BurmyTrashCloak, [SPECIES_WORMADAM_SANDY_CLOAK] = gMonIcon_WormadamSandyCloak, @@ -1073,6 +1098,8 @@ const u8 *const gMonIconTable[] = [SPECIES_ROTOM_FROST] = gMonIcon_RotomFrost, [SPECIES_ROTOM_FAN] = gMonIcon_RotomFan, [SPECIES_ROTOM_MOW] = gMonIcon_RotomMow, + [SPECIES_DIALGA_ORIGIN] = gMonIcon_DialgaOrigin, + [SPECIES_PALKIA_ORIGIN] = gMonIcon_PalkiaOrigin, [SPECIES_GIRATINA_ORIGIN] = gMonIcon_GiratinaOrigin, [SPECIES_SHAYMIN_SKY] = gMonIcon_ShayminSky, [SPECIES_ARCEUS_FIGHTING] = gMonIcon_Arceus, @@ -1093,6 +1120,7 @@ const u8 *const gMonIconTable[] = [SPECIES_ARCEUS_DARK] = gMonIcon_Arceus, [SPECIES_ARCEUS_FAIRY] = gMonIcon_Arceus, [SPECIES_BASCULIN_BLUE_STRIPED] = gMonIcon_BasculinBlueStriped, + [SPECIES_BASCULIN_WHITE_STRIPED] = gMonIcon_BasculinWhiteStriped, [SPECIES_DARMANITAN_ZEN_MODE] = gMonIcon_DarmanitanZenMode, [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = gMonIcon_DarmanitanZenModeGalarian, [SPECIES_DEERLING_SUMMER] = gMonIcon_DeerlingSummer, @@ -1104,6 +1132,7 @@ const u8 *const gMonIconTable[] = [SPECIES_TORNADUS_THERIAN] = gMonIcon_TornadusTherian, [SPECIES_THUNDURUS_THERIAN] = gMonIcon_ThundurusTherian, [SPECIES_LANDORUS_THERIAN] = gMonIcon_LandorusTherian, + [SPECIES_ENAMORUS_THERIAN] = gMonIcon_EnamorusTherian, [SPECIES_KYUREM_WHITE] = gMonIcon_KyuremWhite, [SPECIES_KYUREM_BLACK] = gMonIcon_KyuremBlack, [SPECIES_KELDEO_RESOLUTE] = gMonIcon_KeldeoResolute, @@ -1232,14 +1261,23 @@ const u8 *const gMonIconTable[] = [SPECIES_ETERNATUS_ETERNAMAX] = gMonIcon_EternatusEternamax, [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = gMonIcon_Urshifu, [SPECIES_ZARUDE_DADA] = gMonIcon_ZarudeDada, - [SPECIES_CALYREX_ICE_RIDER] = gMonIcon_QuestionMark,//gMonIcon_CalyrexIceRider, - [SPECIES_CALYREX_SHADOW_RIDER] = gMonIcon_QuestionMark,//gMonIcon_CalyrexShadowRider, + [SPECIES_CALYREX_ICE_RIDER] = gMonIcon_CalyrexIceRider, + [SPECIES_CALYREX_SHADOW_RIDER] = gMonIcon_CalyrexShadowRider, +#endif [SPECIES_EGG] = gMonIcon_Egg, }; const u8 *const gMonIconTableFemale[] = { [SPECIES_EEVEE] = gMonIcon_Eevee, +#if P_NEW_POKEMON == TRUE + [SPECIES_STARLY] = gMonIcon_Starly, + [SPECIES_STARAVIA] = gMonIcon_Staravia, + [SPECIES_STARAPTOR] = gMonIcon_Staraptor, + [SPECIES_BIDOOF] = gMonIcon_Bidoof, + [SPECIES_KRICKETOT] = gMonIcon_Kricketot, + [SPECIES_KRICKETUNE] = gMonIcon_Kricketune, + [SPECIES_SHINX] = gMonIcon_Shinx, [SPECIES_COMBEE] = gMonIcon_Combee, [SPECIES_HIPPOPOTAS] = gMonIcon_Hippopotas, [SPECIES_HIPPOWDON] = gMonIcon_Hippowdon, @@ -1247,6 +1285,8 @@ const u8 *const gMonIconTableFemale[] = [SPECIES_FRILLISH] = gMonIcon_FrillishF, [SPECIES_JELLICENT] = gMonIcon_JellicentF, [SPECIES_PYROAR] = gMonIcon_PyroarF, + [SPECIES_BASCULEGION] = gMonIcon_BasculegionF, +#endif }; const u8 gMonIconPaletteIndices[] = @@ -1637,6 +1677,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_JIRACHI] = 0, [SPECIES_DEOXYS] = 0, [SPECIES_CHIMECHO] = 0, +#if P_NEW_POKEMON == TRUE [SPECIES_TURTWIG] = 1, [SPECIES_GROTLE] = 1, [SPECIES_TORTERRA] = 1, @@ -2145,10 +2186,17 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_URSHIFU] = 2, [SPECIES_ZARUDE] = 1, [SPECIES_REGIELEKI] = 0, - [SPECIES_REGIDRAGO] = 2, + [SPECIES_REGIDRAGO] = 0, [SPECIES_GLASTRIER] = 0, [SPECIES_SPECTRIER] = 0, [SPECIES_CALYREX] = 0, + [SPECIES_WYRDEER] = 2, + [SPECIES_KLEAVOR] = 2, + [SPECIES_URSALUNA] = 2, + [SPECIES_BASCULEGION] = 1, + [SPECIES_SNEASLER] = 2, + [SPECIES_OVERQWIL] = 2, + [SPECIES_ENAMORUS] = 1, [SPECIES_VENUSAUR_MEGA] = 1, [SPECIES_CHARIZARD_MEGA_X] = 0, [SPECIES_CHARIZARD_MEGA_Y] = 0, @@ -2236,6 +2284,22 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_DARMANITAN_GALARIAN] = 0, [SPECIES_YAMASK_GALARIAN] = 2, [SPECIES_STUNFISK_GALARIAN] = 1, + [SPECIES_GROWLITHE_HISUIAN] = 0, + [SPECIES_ARCANINE_HISUIAN] = 0, + [SPECIES_VOLTORB_HISUIAN] = 0, + [SPECIES_ELECTRODE_HISUIAN] = 1, + [SPECIES_TYPHLOSION_HISUIAN] = 1, + [SPECIES_QWILFISH_HISUIAN] = 0, + [SPECIES_SNEASEL_HISUIAN] = 2, + [SPECIES_SAMUROTT_HISUIAN] = 0, + [SPECIES_LILLIGANT_HISUIAN] = 1, + [SPECIES_ZORUA_HISUIAN] = 0, + [SPECIES_ZOROARK_HISUIAN] = 0, + [SPECIES_BRAVIARY_HISUIAN] = 2, + [SPECIES_SLIGGOO_HISUIAN] = 2, + [SPECIES_GOODRA_HISUIAN] = 2, + [SPECIES_AVALUGG_HISUIAN] = 5, + [SPECIES_DECIDUEYE_HISUIAN] = 0, [SPECIES_PIKACHU_COSPLAY] = 2, [SPECIES_PIKACHU_ROCK_STAR] = 1, [SPECIES_PIKACHU_BELLE] = 0, @@ -2251,10 +2315,15 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_PIKACHU_PARTNER_CAP] = 0, [SPECIES_PIKACHU_WORLD_CAP] = 0, [SPECIES_PICHU_SPIKY_EARED] = 1, +#endif [SPECIES_UNOWN_B ... SPECIES_UNOWN_QMARK] = 0, [SPECIES_CASTFORM_SUNNY] = 0, [SPECIES_CASTFORM_RAINY] = 0, [SPECIES_CASTFORM_SNOWY] = 0, + [SPECIES_DEOXYS_ATTACK] = 0, + [SPECIES_DEOXYS_DEFENSE] = 0, + [SPECIES_DEOXYS_SPEED] = 0, +#if P_NEW_POKEMON == TRUE [SPECIES_BURMY_SANDY_CLOAK] = 1, [SPECIES_BURMY_TRASH_CLOAK] = 0, [SPECIES_WORMADAM_SANDY_CLOAK] = 1, @@ -2267,6 +2336,8 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_ROTOM_FROST] = 5, [SPECIES_ROTOM_FAN] = 0, [SPECIES_ROTOM_MOW] = 0, + [SPECIES_DIALGA_ORIGIN] = 0, + [SPECIES_PALKIA_ORIGIN] = 2, [SPECIES_GIRATINA_ORIGIN] = 0, [SPECIES_SHAYMIN_SKY] = 1, [SPECIES_ARCEUS_FIGHTING] = 1, @@ -2287,6 +2358,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_ARCEUS_DARK] = 1, [SPECIES_ARCEUS_FAIRY] = 1, [SPECIES_BASCULIN_BLUE_STRIPED] = 0, + [SPECIES_BASCULIN_WHITE_STRIPED] = 0, [SPECIES_DARMANITAN_ZEN_MODE] = 0, [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = 0, [SPECIES_DEERLING_SUMMER] = 1, @@ -2298,6 +2370,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_TORNADUS_THERIAN] = 1, [SPECIES_THUNDURUS_THERIAN] = 0, [SPECIES_LANDORUS_THERIAN] = 0, + [SPECIES_ENAMORUS_THERIAN] = 1, [SPECIES_KYUREM_WHITE] = 0, [SPECIES_KYUREM_BLACK] = 0, [SPECIES_KELDEO_RESOLUTE] = 0, @@ -2422,12 +2495,20 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_ZARUDE_DADA] = 1, [SPECIES_CALYREX_ICE_RIDER] = 0, [SPECIES_CALYREX_SHADOW_RIDER] = 0, +#endif [SPECIES_EGG] = 1, }; const u8 gMonIconPaletteIndicesFemale[] = { [SPECIES_EEVEE] = 2, +#if P_NEW_POKEMON == TRUE + [SPECIES_STARLY] = 0, + [SPECIES_STARAVIA] = 0, + [SPECIES_BIDOOF] = 2, + [SPECIES_KRICKETOT] = 2, + [SPECIES_KRICKETUNE] = 2, + [SPECIES_SHINX] = 0, [SPECIES_COMBEE] = 0, [SPECIES_HIPPOPOTAS] = 1, [SPECIES_HIPPOWDON] = 1, @@ -2435,6 +2516,8 @@ const u8 gMonIconPaletteIndicesFemale[] = [SPECIES_FRILLISH] = 1, [SPECIES_JELLICENT] = 1, [SPECIES_PYROAR] = 2, + [SPECIES_BASCULEGION] = 0, +#endif }; const struct SpritePalette gMonIconPaletteTable[] = @@ -2447,7 +2530,7 @@ const struct SpritePalette gMonIconPaletteTable[] = { gMonIconPalettes[5], POKE_ICON_BASE_PAL_TAG + 5 }, }; -const struct OamData sMonIconOamData = +static const struct OamData sMonIconOamData = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -2498,7 +2581,7 @@ static const union AnimCmd sAnim_4[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const sMonIconAnims[] = +static const union AnimCmd *const sMonIconAnims[] = { sAnim_0, sAnim_1, @@ -2519,34 +2602,34 @@ static const union AffineAnimCmd sAffineAnim_1[] = AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const sMonIconAffineAnims[] = +static const union AffineAnimCmd *const sMonIconAffineAnims[] = { sAffineAnim_0, sAffineAnim_1, }; -const u16 sSpriteImageSizes[3][4] = +static const u16 sSpriteImageSizes[3][4] = { - [ST_OAM_SQUARE] = + [ST_OAM_SQUARE] = { - [SPRITE_SIZE(8x8)] = 0x20, - [SPRITE_SIZE(16x16)] = 0x80, - [SPRITE_SIZE(32x32)] = 0x200, - [SPRITE_SIZE(64x64)] = 0x800, + [SPRITE_SIZE(8x8)] = 8 * 8 / 2, + [SPRITE_SIZE(16x16)] = 16 * 16 / 2, + [SPRITE_SIZE(32x32)] = 32 * 32 / 2, + [SPRITE_SIZE(64x64)] = 64 * 64 / 2, }, - [ST_OAM_H_RECTANGLE] = + [ST_OAM_H_RECTANGLE] = { - [SPRITE_SIZE(16x8)] = 0x40, - [SPRITE_SIZE(32x8)] = 0x80, - [SPRITE_SIZE(32x16)] = 0x100, - [SPRITE_SIZE(64x32)] = 0x400, + [SPRITE_SIZE(16x8)] = 16 * 8 / 2, + [SPRITE_SIZE(32x8)] = 32 * 8 / 2, + [SPRITE_SIZE(32x16)] = 32 * 16 / 2, + [SPRITE_SIZE(64x32)] = 64 * 32 / 2, }, - [ST_OAM_V_RECTANGLE] = + [ST_OAM_V_RECTANGLE] = { - [SPRITE_SIZE(8x16)] = 0x40, - [SPRITE_SIZE(8x32)] = 0x80, - [SPRITE_SIZE(16x32)] = 0x100, - [SPRITE_SIZE(32x64)] = 0x400, + [SPRITE_SIZE(8x16)] = 8 * 16 / 2, + [SPRITE_SIZE(8x32)] = 8 * 32 / 2, + [SPRITE_SIZE(16x32)] = 16 * 32 / 2, + [SPRITE_SIZE(32x64)] = 32 * 64 / 2, }, }; @@ -2565,7 +2648,7 @@ u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u if (species > NUM_SPECIES) iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG; - else if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + else if (ShouldShowFemaleDifferences(species, personality)) iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndicesFemale[species]; spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority); @@ -2575,6 +2658,7 @@ u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u return spriteId; } + u8 CreateMonIconNoPersonality(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) { u8 spriteId; @@ -2648,7 +2732,7 @@ const u8 *GetMonIconPtr(u16 species, u32 personality) void FreeAndDestroyMonIconSprite(struct Sprite *sprite) { - sub_80D328C(sprite); + FreeAndDestroyMonIconSprite_(sprite); } void LoadMonIconPalettes(void) @@ -2705,17 +2789,19 @@ void SpriteCB_MonIcon(struct Sprite *sprite) UpdateMonIconFrame(sprite); } -const u8* GetMonIconTiles(u16 species, u32 personality) +const u8 *GetMonIconTiles(u16 species, u32 personality) { - const u8* iconSprite = gMonIconTable[species]; - if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) - { + const u8 *iconSprite; + + if (ShouldShowFemaleDifferences(species, personality)) iconSprite = gMonIconTableFemale[species]; - } + else + iconSprite = gMonIconTable[species]; + return iconSprite; } -void sub_80D304C(u16 offset) +void TryLoadAllMonIconPalettesAtOffset(u16 offset) { s32 i; const struct SpritePalette* monIconPalettePtr; @@ -2723,7 +2809,7 @@ void sub_80D304C(u16 offset) if (offset <= 0xA0) { monIconPalettePtr = gMonIconPaletteTable; - for(i = 5; i >= 0; i--) + for(i = ARRAY_COUNT(gMonIconPaletteTable) - 1; i >= 0; i--) { LoadPalette(monIconPalettePtr->data, offset, 0x20); offset += 0x10; @@ -2744,7 +2830,7 @@ u8 GetMonIconPaletteIndexFromSpecies(u16 species) return gMonIconPaletteIndices[species]; } -const u16* GetValidMonIconPalettePtr(u16 species) +const u16 *GetValidMonIconPalettePtr(u16 species) { if (species > NUM_SPECIES) species = INVALID_ICON_SPECIES; @@ -2795,7 +2881,7 @@ static u8 CreateMonIconSprite(struct MonIconSpriteTemplate *iconTemplate, s16 x, struct SpriteTemplate spriteTemplate = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = iconTemplate->paletteTag, .oam = iconTemplate->oam, .anims = iconTemplate->anims, @@ -2811,7 +2897,7 @@ static u8 CreateMonIconSprite(struct MonIconSpriteTemplate *iconTemplate, s16 x, return spriteId; } -void sub_80D328C(struct Sprite *sprite) +static void FreeAndDestroyMonIconSprite_(struct Sprite *sprite) { struct SpriteFrameImage image = { NULL, sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] }; sprite->images = ℑ diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index cbd530e174..ccd3125e4c 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -126,7 +126,7 @@ enum { #define PLAY_AGAIN_YES 2 #define TAG_MON1 0 -#define TAG_MON2 1 // MON2-5 used implicitly by adding multiplayer id to tag +#define TAG_MON2 1 // MON2-5 used implicitly by adding multiplayer id to tag #define TAG_MON3 2 #define TAG_MON4 3 #define TAG_MON5 4 @@ -434,17 +434,37 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_WEEDLE, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_KAKUNA, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_RATTATA, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RATTATA_ALOLAN, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_RATICATE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RATICATE_ALOLAN, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_PIKACHU, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_COSPLAY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_ROCK_STAR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_BELLE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_POP_STAR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_PH_D, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_LIBRE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_ORIGINAL_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_HOENN_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_SINNOH_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_UNOVA_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_KALOS_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_ALOLA_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_PARTNER_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_WORLD_CAP, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_SANDSHREW, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SANDSHREW_ALOLAN, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_NIDORAN_F, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_NIDORAN_M, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_CLEFAIRY, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_VULPIX, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_VULPIX_ALOLAN, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_JIGGLYPUFF, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_ODDISH, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_PARAS, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_MEOWTH, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWTH_ALOLAN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWTH_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_PSYDUCK, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_MANKEY, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_GROWLITHE, .jumpType = JUMP_TYPE_FAST, }, @@ -463,6 +483,7 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_TOTODILE, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_SPINARAK, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_PICHU, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PICHU_SPIKY_EARED, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_CLEFFA, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_IGGLYBUFF, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_TOGEPI, .jumpType = JUMP_TYPE_SLOW, }, @@ -491,7 +512,9 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_MARSHTOMP, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_POOCHYENA, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_ZIGZAGOON, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ZIGZAGOON_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_LINOONE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_LINOONE_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_WURMPLE, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_SILCOON, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_CASCOON, .jumpType = JUMP_TYPE_SLOW, }, @@ -506,6 +529,7 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_AZURILL, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_SKITTY, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_SABLEYE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SABLEYE_MEGA, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_MAWILE, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_ARON, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_MEDITITE, .jumpType = JUMP_TYPE_SLOW, }, @@ -526,6 +550,164 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_SNORUNT, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_CLAMPERL, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_BAGON, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_TURTWIG, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CHIMCHAR, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PIPLUP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BIDOOF, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_KRICKETOT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SHINX, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BUDEW, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SHIELDON, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_PACHIRISU, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_BUIZEL, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_CHERUBI, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CHERRIM, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CHERRIM_SUNSHINE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SHELLOS, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SHELLOS_EAST_SEA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_BUNEARY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GLAMEOW, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_STUNKY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BONSLY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_MIME_JR, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_HAPPINY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GIBLE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MUNCHLAX, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_RIOLU, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CROAGUNK, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SHAYMIN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SNIVY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_TEPIG, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_OSHAWOTT, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PATRAT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_LILLIPUP, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PURRLOIN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PANSAGE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PANSEAR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PANPOUR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ROGGENROLA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_DRILBUR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_EXCADRILL, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_TIMBURR, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SEWADDLE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SWADLOON, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_VENIPEDE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PETILIL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SANDILE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_DARUMAKA, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DARUMAKA_GALARIAN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DWEBBLE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SCRAGGY, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ARCHEN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_TRUBBISH, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ZORUA, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_MINCCINO, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CINCCINO, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_GOTHITA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_GOTHORITA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_DEERLING, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DEERLING_SUMMER, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DEERLING_AUTUMN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DEERLING_WINTER, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_KARRABLAST, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_FOONGUS, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_AMOONGUSS, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_JOLTIK, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_LITWICK, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_AXEW, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CUBCHOO, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SHELMET, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_STUNFISK, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_STUNFISK_GALARIAN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_PAWNIARD, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DURANT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CHESPIN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_QUILLADIN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_FENNEKIN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_FROAKIE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_FROGADIER, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_BUNNELBY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SCATTERBUG, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SPEWPA, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_LITLEO, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PANCHAM, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_ESPURR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWSTIC, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWSTIC_FEMALE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BINACLE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CLAUNCHER, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_HELIOPTILE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_DEDENNE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GOOMY, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ROWLET, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_DARTRIX, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_LITTEN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_TORRACAT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_POPPLIO, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_BRIONNE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_YUNGOOS, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GUMSHOOS, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_GRUBBIN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CHARJABUG, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CRABRAWLER, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ROCKRUFF, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ROCKRUFF_OWN_TEMPO, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MAREANIE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_DEWPIDER, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_FOMANTIS, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MORELULL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SALANDIT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_STUFFUL, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BOUNSWEET, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_STEENEE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_WIMPOD, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PYUKUMUKU, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_KOMALA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_TOGEDEMARU, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MIMIKYU, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MIMIKYU_BUSTED, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_JANGMO_O, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_MARSHADOW, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MELTAN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_GROOKEY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_THWACKEY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SCORBUNNY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RABOOT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SOBBLE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_DRIZZILE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SKWOVET, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SKWOVET, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_BLIPBUG, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_DOTTLER, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_NICKIT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GOSSIFLEUR, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ELDEGOSS, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_WOOLOO, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_CHEWTLE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_YAMPER, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ROLYCOLY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_APPLIN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_APPLETUN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_TOXEL, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SIZZLIPEDE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CLOBBOPUS, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_HATENNA, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_HATTREM, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_IMPIDIMP, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_ALCREMIE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_PINCURCHIN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SNOM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MORPEKO, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MORPEKO_HANGRY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_KUBFU, .jumpType = JUMP_TYPE_FAST, }, }; void StartPokemonJump(u16 partyId, MainCallback exitCallback) @@ -1282,12 +1464,12 @@ static bool32 SavePokeJump(void) case 2: if (AreLinkQueuesEmpty()) { - CreateTask(Task_LinkSave, 6); + CreateTask(Task_LinkFullSave, 6); sPokemonJump->mainState++; } break; case 3: - if (!FuncIsActiveTask(Task_LinkSave)) + if (!FuncIsActiveTask(Task_LinkFullSave)) { ClearMessageWindow(); sPokemonJump->mainState++; @@ -1723,7 +1905,7 @@ static void UpdateVineState(void) sPokemonJump->prevVineState = sPokemonJump->vineState; sPokemonJump->vineState = sPokemonJump->vineStateTimer >> 8; - + // If beginning upswing if (sPokemonJump->vineState > VINE_UPSWING_LOWER && sPokemonJump->prevVineState < VINE_UPSWING_LOW) { @@ -1960,23 +2142,23 @@ static void HandleMonState(void) static const s8 sJumpOffsets[][48] = { - [JUMP_TYPE_NORMAL] = { -3, -6, -8, -10, -13, -15, -17, -19, - -21, -23, -25, -27, -28, -29, - JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, - -28, -27, -26, -25, -23, -22, -20, -18, + [JUMP_TYPE_NORMAL] = { -3, -6, -8, -10, -13, -15, -17, -19, + -21, -23, -25, -27, -28, -29, + JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, + -28, -27, -26, -25, -23, -22, -20, -18, -17, -15, -13, -11, -8, -6, -4, -1}, - [JUMP_TYPE_FAST] = { -3, -6, -9, -11, -14, -16, -18, -20, - -22, -24, -26, -28, -29, - JUMP_PEAK, JUMP_PEAK, - -28, -26, -24, -22, -20, -18, -16, -14, + [JUMP_TYPE_FAST] = { -3, -6, -9, -11, -14, -16, -18, -20, + -22, -24, -26, -28, -29, + JUMP_PEAK, JUMP_PEAK, + -28, -26, -24, -22, -20, -18, -16, -14, -11, -9, -6, -4, -1}, - [JUMP_TYPE_SLOW] = { -3, -6, -9, -11, -13, -15, -17, -19, - -21, -23, -25, -27, -28, -29, - JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, - -29, -29, -28, -28, -27, -27, -26, -25, - -24, -22, -20, -18, -16, -14, -12, -11, + [JUMP_TYPE_SLOW] = { -3, -6, -9, -11, -13, -15, -17, -19, + -21, -23, -25, -27, -28, -29, + JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, + -29, -29, -28, -28, -27, -27, -26, -25, + -24, -22, -20, -18, -16, -14, -12, -11, -9, -6, -4, -1}, }; @@ -2202,10 +2384,10 @@ static int GetPlayersAtJumpPeak(void) static bool32 AreLinkQueuesEmpty(void) { - return !Rfu.recvQueue.count && !Rfu.sendQueue.count; + return !gRfu.recvQueue.count && !gRfu.sendQueue.count; } -static int GetNumPlayersForBonus(u8 *arg0) +static int GetNumPlayersForBonus(u8 *atJumpPeak) { int i = 0; int flags = 0; @@ -2213,7 +2395,7 @@ static int GetNumPlayersForBonus(u8 *arg0) for (; i < MAX_RFU_PLAYERS; i++) { - if (arg0[i]) + if (atJumpPeak[i]) { flags |= 1 << i; count++; @@ -2248,13 +2430,13 @@ static void TryUpdateExcellentsRecord(u16 excellentsInRow) } static const u16 sPrizeItems[] = { - ITEM_LEPPA_BERRY, - ITEM_LUM_BERRY, - ITEM_SITRUS_BERRY, - ITEM_FIGY_BERRY, - ITEM_WIKI_BERRY, - ITEM_MAGO_BERRY, - ITEM_AGUAV_BERRY, + ITEM_LEPPA_BERRY, + ITEM_LUM_BERRY, + ITEM_SITRUS_BERRY, + ITEM_FIGY_BERRY, + ITEM_WIKI_BERRY, + ITEM_MAGO_BERRY, + ITEM_AGUAV_BERRY, ITEM_IAPAPA_BERRY }; @@ -2431,7 +2613,7 @@ static const struct OamData sOamData_JumpMon = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -2448,7 +2630,7 @@ static const struct OamData sOamData_Vine16x32 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), .x = 0, @@ -2465,7 +2647,7 @@ static const struct OamData sOamData_Vine32x32 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -2482,7 +2664,7 @@ static const struct OamData sOamData_Vine32x16 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), .x = 0, @@ -2636,7 +2818,7 @@ static const struct OamData sOamData_Star = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -2723,11 +2905,10 @@ static void CreateJumpMonSprite(struct PokemonJumpGfx *jumpGfx, struct PokemonJu if (buffer && unusedBuffer) { - HandleLoadSpecialPokePic( - &gMonFrontPicTable[monInfo->species], - buffer, - monInfo->species, - monInfo->personality); + HandleLoadSpecialPokePic(TRUE, + buffer, + monInfo->species, + monInfo->personality); spriteSheet.data = buffer; spriteSheet.tag = multiplayerId; @@ -3197,7 +3378,7 @@ static void LoadPokeJumpGfx(void) FillBgTilemapBufferRect_Palette0(BG_INTERFACE, 0, 0, 0, 0x20, 0x20); PrintScoreSuffixes(); PrintScore(0); - sub_8098C6C(0, 1, 0xE0); + LoadUserWindowBorderGfxOnBg(0, 1, 0xE0); CopyBgTilemapBufferToVram(BG_INTERFACE); CopyBgTilemapBufferToVram(BG_VENUSAUR); CopyBgTilemapBufferToVram(BG_BONUSES); @@ -3313,8 +3494,8 @@ static void Msg_WantToPlayAgain(void) { case 0: sPokemonJumpGfx->msgWindowId = AddMessageWindow(1, 8, 20, 2); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, 1, gText_WantToPlayAgain2, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sPokemonJumpGfx->msgWindowId, 2); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_WantToPlayAgain2, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->mainState++; break; case 1: @@ -3340,8 +3521,8 @@ static void Msg_SavingDontTurnOff(void) { case 0: sPokemonJumpGfx->msgWindowId = AddMessageWindow(2, 7, 26, 4); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, 1, gText_SavingDontTurnOffPower, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sPokemonJumpGfx->msgWindowId, 2); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->mainState++; break; case 1: @@ -3366,7 +3547,7 @@ static void EraseMessage(void) { case 0: ClearMessageWindow(); - sub_8198C78(); + EraseYesNoWindow(); CopyBgTilemapBufferToVram(BG_INTERFACE); sPokemonJumpGfx->mainState++; break; @@ -3383,8 +3564,8 @@ static void Msg_SomeoneDroppedOut(void) { case 0: sPokemonJumpGfx->msgWindowId = AddMessageWindow(2, 8, 22, 4); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, 1, gText_SomeoneDroppedOut2, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sPokemonJumpGfx->msgWindowId, 2); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_SomeoneDroppedOut2, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->mainState++; break; case 1: @@ -3409,8 +3590,8 @@ static void Msg_CommunicationStandby(void) { case 0: sPokemonJumpGfx->msgWindowId = AddMessageWindow(7, 10, 16, 2); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, 1, gText_CommunicationStandby4, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sPokemonJumpGfx->msgWindowId, 2); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_CommunicationStandby4, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->mainState++; break; case 1: @@ -3487,8 +3668,8 @@ static void PrintPrizeMessage(u16 itemId, u16 quantity) DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sPokemonJumpGfx->itemQuantityStr); DynamicPlaceholderTextUtil_ExpandPlaceholders(sPokemonJumpGfx->prizeMsg, gText_AwesomeWonF701F700); sPokemonJumpGfx->msgWindowId = AddMessageWindow(4, 8, 22, 4); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, 1, sPokemonJumpGfx->prizeMsg, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sPokemonJumpGfx->msgWindowId, 2); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, sPokemonJumpGfx->prizeMsg, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->fanfare = MUS_LEVEL_UP; sPokemonJumpGfx->msgWindowState = 0; } @@ -3500,8 +3681,8 @@ static void PrintPrizeFilledBagMessage(u16 itemId) DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sPokemonJumpGfx->itemName); DynamicPlaceholderTextUtil_ExpandPlaceholders(sPokemonJumpGfx->prizeMsg, gText_FilledStorageSpace2); sPokemonJumpGfx->msgWindowId = AddMessageWindow(4, 8, 22, 4); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, 1, sPokemonJumpGfx->prizeMsg, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sPokemonJumpGfx->msgWindowId, 2); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, sPokemonJumpGfx->prizeMsg, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->fanfare = MUS_DUMMY; sPokemonJumpGfx->msgWindowState = 0; } @@ -3513,8 +3694,8 @@ static void PrintNoRoomForPrizeMessage(u16 itemId) DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sPokemonJumpGfx->itemName); DynamicPlaceholderTextUtil_ExpandPlaceholders(sPokemonJumpGfx->prizeMsg, gText_CantHoldMore); sPokemonJumpGfx->msgWindowId = AddMessageWindow(4, 9, 22, 2); - AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, 1, sPokemonJumpGfx->prizeMsg, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sPokemonJumpGfx->msgWindowId, 2); + AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, sPokemonJumpGfx->prizeMsg, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX); sPokemonJumpGfx->fanfare = MUS_DUMMY; sPokemonJumpGfx->msgWindowState = 0; } @@ -3558,7 +3739,7 @@ static void ClearMessageWindow(void) if (sPokemonJumpGfx->msgWindowId != WINDOW_NONE) { rbox_fill_rectangle(sPokemonJumpGfx->msgWindowId); - CopyWindowToVram(sPokemonJumpGfx->msgWindowId, 1); + CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_MAP); sPokemonJumpGfx->msgWindowState = 0; } } @@ -3612,7 +3793,6 @@ static u32 AddMessageWindow(u32 left, u32 top, u32 width, u32 height) static void CreatePokeJumpYesNoMenu(u16 left, u16 top, u8 cursorPos) { struct WindowTemplate window; - u8 a = cursorPos; window.bg = BG_INTERFACE; window.tilemapLeft = left; @@ -3622,7 +3802,7 @@ static void CreatePokeJumpYesNoMenu(u16 left, u16 top, u8 cursorPos) window.paletteNum = 2; window.baseBlock = 0x2B; - CreateYesNoMenu(&window, 1, 0xD, a); + CreateYesNoMenu(&window, 1, 0xD, cursorPos); } // "Points" for jump score and "times" for number of jumps in a row @@ -3634,8 +3814,8 @@ static void PrintScoreSuffixes(void) PutWindowTilemap(WIN_TIMES); FillWindowPixelBuffer(WIN_POINTS, 0); FillWindowPixelBuffer(WIN_TIMES, 0); - AddTextPrinterParameterized3(WIN_POINTS, 0, 0, 1, color, 0, gText_SpacePoints2); - AddTextPrinterParameterized3(WIN_TIMES, 0, 0, 1, color, 0, gText_SpaceTimes3); + AddTextPrinterParameterized3(WIN_POINTS, FONT_SMALL, 0, 1, color, 0, gText_SpacePoints2); + AddTextPrinterParameterized3(WIN_TIMES, FONT_SMALL, 0, 1, color, 0, gText_SpaceTimes3); } // The venusaurs in the background are actually an empty 256x512 bg with 3 pairs of venusaurs on it. @@ -3649,15 +3829,15 @@ enum { }; static const u8 sVenusaurStates[] = { - [VINE_HIGHEST] = VENUSAUR_UP, - [VINE_DOWNSWING_HIGHER] = VENUSAUR_UP, - [VINE_DOWNSWING_HIGH] = VENUSAUR_NEUTRAL, - [VINE_DOWNSWING_LOW] = VENUSAUR_NEUTRAL, - [VINE_DOWNSWING_LOWER] = VENUSAUR_DOWN, - [VINE_LOWEST] = VENUSAUR_DOWN, - [VINE_UPSWING_LOWER] = VENUSAUR_DOWN, - [VINE_UPSWING_LOW] = VENUSAUR_NEUTRAL, - [VINE_UPSWING_HIGH] = VENUSAUR_NEUTRAL, + [VINE_HIGHEST] = VENUSAUR_UP, + [VINE_DOWNSWING_HIGHER] = VENUSAUR_UP, + [VINE_DOWNSWING_HIGH] = VENUSAUR_NEUTRAL, + [VINE_DOWNSWING_LOW] = VENUSAUR_NEUTRAL, + [VINE_DOWNSWING_LOWER] = VENUSAUR_DOWN, + [VINE_LOWEST] = VENUSAUR_DOWN, + [VINE_UPSWING_LOWER] = VENUSAUR_DOWN, + [VINE_UPSWING_LOW] = VENUSAUR_NEUTRAL, + [VINE_UPSWING_HIGH] = VENUSAUR_NEUTRAL, [VINE_UPSWING_HIGHER] = VENUSAUR_UP, }; @@ -3665,25 +3845,25 @@ static const struct CompressedSpriteSheet sSpriteSheet_Digits = {gMinigameDigits static const struct SpritePalette sSpritePalette_Digits = {gMinigameDigits_Pal, TAG_DIGITS}; static const u16 sPlayerNameWindowCoords_2Players[] = { - 6, 8, + 6, 8, 16, 8 }; static const u16 sPlayerNameWindowCoords_3Players[] = { - 6, 8, - 11, 6, + 6, 8, + 11, 6, 16, 8 }; static const u16 sPlayerNameWindowCoords_4Players[] = { - 2, 6, - 6, 8, - 16, 8, + 2, 6, + 6, 8, + 16, 8, 20, 6 }; static const u16 sPlayerNameWindowCoords_5Players[] = { - 2, 6, - 6, 8, - 11, 6, - 16, 8, + 2, 6, + 6, 8, + 11, 6, + 16, 8, 20, 6 }; @@ -3732,7 +3912,7 @@ static void SetMonSpriteY(u32 id, s16 y) static void UpdateVineSwing(int vineState) { UpdateVineAnim(sPokemonJumpGfx, vineState); - ChangeBgY(BG_VENUSAUR, (sVenusaurStates[vineState] * 5) << 13, 0); + ChangeBgY(BG_VENUSAUR, (sVenusaurStates[vineState] * 5) << 13, BG_COORD_SET); } static int DoSameJumpTimeBonus(u8 flags) @@ -3766,7 +3946,7 @@ static void InitDigitPrinters(void) .xDelta = 8, .x = 108, .y = 6, - .spriteSheet = (void*) &sSpriteSheet_Digits, + .spriteSheet = (void *) &sSpriteSheet_Digits, .spritePal = &sSpritePalette_Digits, }; @@ -3855,10 +4035,10 @@ static void PrintPokeJumpPlayerName(int multiplayerId, u8 bgColor, u8 fgColor, u u8 colors[3] = {bgColor, fgColor, shadow}; FillWindowPixelBuffer(sPokemonJumpGfx->nameWindowIds[multiplayerId], 0); - x = 64 - GetStringWidth(1, GetPokeJumpPlayerName(multiplayerId), -1); + x = 64 - GetStringWidth(FONT_NORMAL, GetPokeJumpPlayerName(multiplayerId), -1); x /= 2; - AddTextPrinterParameterized3(sPokemonJumpGfx->nameWindowIds[multiplayerId], 1, x, 1, colors, -1, GetPokeJumpPlayerName(multiplayerId)); - CopyWindowToVram(sPokemonJumpGfx->nameWindowIds[multiplayerId], 2); + AddTextPrinterParameterized3(sPokemonJumpGfx->nameWindowIds[multiplayerId], FONT_NORMAL, x, 1, colors, TEXT_SKIP_DRAW, GetPokeJumpPlayerName(multiplayerId)); + CopyWindowToVram(sPokemonJumpGfx->nameWindowIds[multiplayerId], COPYWIN_GFX); } static void PrintPokeJumpPlayerNames(bool32 highlightSelf) @@ -3896,8 +4076,8 @@ static void DrawPlayerNameWindows(void) static void ShowBonus(u8 bonusId) { sPokemonJumpGfx->bonusTimer = 0; - ChangeBgX(BG_BONUSES, (bonusId / 2) * 256 * 256, 0); - ChangeBgY(BG_BONUSES, (((bonusId % 2) * 256) - 40) * 256, 0); + ChangeBgX(BG_BONUSES, (bonusId / 2) * 256 * 256, BG_COORD_SET); + ChangeBgY(BG_BONUSES, (((bonusId % 2) * 256) - 40) * 256, BG_COORD_SET); ShowBg(BG_BONUSES); CreateTask(Task_UpdateBonus, 4); } @@ -3910,7 +4090,7 @@ static bool32 UpdateBonus(void) } else { - ChangeBgY(BG_BONUSES, 128, 1); + ChangeBgY(BG_BONUSES, 128, BG_COORD_ADD); if (++sPokemonJumpGfx->bonusTimer >= 32) HideBg(BG_BONUSES); return TRUE; @@ -3945,7 +4125,7 @@ static bool32 RecvPacket_MonInfo(int multiplayerId, struct PokemonJump_MonInfo * { struct MonInfoPacket packet; - if ((gRecvCmds[multiplayerId][0] & 0xFF00) != RFUCMD_SEND_PACKET) + if ((gRecvCmds[multiplayerId][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET) return FALSE; memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet)); @@ -4010,7 +4190,7 @@ static bool32 RecvPacket_LeaderState(struct PokemonJump_Player *player, struct P { struct LeaderStatePacket packet; - if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET) + if ((gRecvCmds[0][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET) return FALSE; memcpy(&packet, &gRecvCmds[0][1], sizeof(packet)); @@ -4057,7 +4237,7 @@ static bool32 RecvPacket_MemberStateToLeader(struct PokemonJump_Player *player, { struct MemberStatePacket packet; - if ((gRecvCmds[multiplayerId][0] & 0xFF00) != RFUCMD_SEND_PACKET) + if ((gRecvCmds[multiplayerId][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET) return FALSE; memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet)); @@ -4078,7 +4258,7 @@ static bool32 RecvPacket_MemberStateToMember(struct PokemonJump_Player *player, { struct MemberStatePacket packet; - if ((gRecvCmds[multiplayerId][0] & 0xFF00) != RFUCMD_SEND_PACKET) + if ((gRecvCmds[multiplayerId][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET) return FALSE; memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet)); @@ -4162,10 +4342,10 @@ static void Task_ShowPokemonJumpRecords(u8 taskId) { case 0: window = sWindowTemplate_Records; - width = GetStringWidth(1, gText_PkmnJumpRecords, 0); + width = GetStringWidth(FONT_NORMAL, gText_PkmnJumpRecords, 0); for (i = 0; i < ARRAY_COUNT(sRecordsTexts); i++) { - widthCurr = GetStringWidth(1, sRecordsTexts[i], 0) + 38; + widthCurr = GetStringWidth(FONT_NORMAL, sRecordsTexts[i], 0) + 38; if (widthCurr > width) width = widthCurr; } @@ -4176,7 +4356,7 @@ static void Task_ShowPokemonJumpRecords(u8 taskId) window.width = width; tWindowId = AddWindow(&window); PrintRecordsText(tWindowId, width); - CopyWindowToVram(tWindowId, 3); + CopyWindowToVram(tWindowId, COPYWIN_FULL); tState++; break; case 1: @@ -4187,7 +4367,7 @@ static void Task_ShowPokemonJumpRecords(u8 taskId) if (JOY_NEW(A_BUTTON | B_BUTTON)) { rbox_fill_rectangle(tWindowId); - CopyWindowToVram(tWindowId, 1); + CopyWindowToVram(tWindowId, COPYWIN_MAP); tState++; } break; @@ -4196,7 +4376,7 @@ static void Task_ShowPokemonJumpRecords(u8 taskId) { RemoveWindow(tWindowId); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } break; } @@ -4217,14 +4397,14 @@ static void PrintRecordsText(u16 windowId, int width) LoadUserWindowBorderGfx_(windowId, 0x21D, 0xD0); DrawTextBorderOuter(windowId, 0x21D, 0xD); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - AddTextPrinterParameterized(windowId, 1, gText_PkmnJumpRecords, GetStringCenterAlignXOffset(1, gText_PkmnJumpRecords, width * 8), 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_PkmnJumpRecords, GetStringCenterAlignXOffset(FONT_NORMAL, gText_PkmnJumpRecords, width * 8), 1, TEXT_SKIP_DRAW, NULL); for (i = 0; i < ARRAY_COUNT(sRecordsTexts); i++) { - AddTextPrinterParameterized(windowId, 1, sRecordsTexts[i], 0, 25 + (i * 16), TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, sRecordsTexts[i], 0, 25 + (i * 16), TEXT_SKIP_DRAW, NULL); ConvertIntToDecimalStringN(gStringVar1, recordNums[i], STR_CONV_MODE_LEFT_ALIGN, 5); TruncateToFirstWordOnly(gStringVar1); - x = (width * 8) - GetStringWidth(1, gStringVar1, 0); - AddTextPrinterParameterized(windowId, 1, gStringVar1, x, 25 + (i * 16), TEXT_SPEED_FF, NULL); + x = (width * 8) - GetStringWidth(FONT_NORMAL, gStringVar1, 0); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar1, x, 25 + (i * 16), TEXT_SKIP_DRAW, NULL); } PutWindowTilemap(windowId); } diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 679240fbaf..d3f5d433f4 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -37,7 +37,6 @@ #include "walda_phrase.h" #include "window.h" #include "constants/items.h" -#include "constants/maps.h" #include "constants/moves.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -333,6 +332,13 @@ enum { TILEMAPID_COUNT }; +// Window IDs for sWindowTemplates +enum { + WIN_DISPLAY_INFO, + WIN_MESSAGE, + WIN_ITEM_DESC, +}; + struct Wallpaper { const u32 *tiles; @@ -467,7 +473,7 @@ struct PokemonStorageSystemData u8 iconScrollCurColumn; s8 iconScrollDirection; // Unnecessary duplicate of scrollDirection u8 iconScrollState; - u8 iconScrollToBoxId; // Unnecessary duplicate of scrollToBoxId + u8 iconScrollToBoxId; // Unused duplicate of scrollToBoxId struct WindowTemplate menuWindow; struct StorageMenu menuItems[7]; u8 menuItemsCount; @@ -570,6 +576,7 @@ EWRAM_DATA static bool8 sIsMonBeingMoved = 0; EWRAM_DATA static u8 sMovingMonOrigBoxId = 0; EWRAM_DATA static u8 sMovingMonOrigBoxPos = 0; EWRAM_DATA static bool8 sAutoActionOn = 0; +EWRAM_DATA static bool8 sJustOpenedBag = 0; // Main tasks static void EnterPokeStorage(u8); @@ -871,6 +878,10 @@ static void UnkUtil_Run(void); static void UnkUtil_CpuRun(struct UnkUtilData *); static void UnkUtil_DmaRun(struct UnkUtilData *); +// Form changing +void SetMonFormPSS(struct BoxPokemon *boxMon); +void UpdateSpeciesSpritePSS(struct BoxPokemon *boxmon); + struct { const u8 *text; const u8 *desc; @@ -941,49 +952,31 @@ static const union AffineAnimCmd *const sAffineAnims_ChooseBoxMenu[] = static const u8 sChooseBoxMenu_TextColors[] = {TEXT_COLOR_RED, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5}; static const u8 sText_OutOf30[] = _("/30"); -static const u16 sChooseBoxMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/box_selection_popup.gbapal"); -static const u8 sChooseBoxMenuCenter_Gfx[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_center.4bpp"); -static const u8 sChooseBoxMenuSides_Gfx[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp"); -static const u32 sScrollingBg_Gfx[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.4bpp.lz"); -static const u32 sScrollingBg_Tilemap[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.bin.lz"); -static const u16 sDisplayMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/display_menu.gbapal"); // Unused -static const u32 sDisplayMenu_Tilemap[] = INCBIN_U32("graphics/pokemon_storage/display_menu.bin.lz"); - -static const u16 sPkmnData_Tilemap[] = -{ - 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, - 0x2101, 0x2102, 0x2103, 0x2104, 0x2105, 0x2106, 0x2107, 0x2108, 0x2111, 0x2112, 0x2113, 0x2114, 0x2115, 0x2116, 0x2117, 0x2118, -}; - +static const u16 sChooseBoxMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/box_selection_popup.gbapal"); +static const u8 sChooseBoxMenuCenter_Gfx[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_center.4bpp"); +static const u8 sChooseBoxMenuSides_Gfx[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp"); +static const u32 sScrollingBg_Gfx[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.4bpp.lz"); +static const u32 sScrollingBg_Tilemap[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.bin.lz"); +static const u16 sDisplayMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/display_menu.gbapal"); // Unused +static const u32 sDisplayMenu_Tilemap[] = INCBIN_U32("graphics/pokemon_storage/display_menu.bin.lz"); +static const u16 sPkmnData_Tilemap[] = INCBIN_U16("graphics/pokemon_storage/pkmn_data.bin"); // sInterface_Pal - parts of the display frame, "PkmnData"'s normal color, Close Box -static const u16 sInterface_Pal[] = INCBIN_U16("graphics/pokemon_storage/interface.gbapal"); -static const u16 sPkmnDataGray_Pal[] = INCBIN_U16("graphics/pokemon_storage/pkmn_data_gray.gbapal"); -static const u16 sBg_Pal[] = INCBIN_U16("graphics/pokemon_storage/bg.gbapal"); -static const u16 sBgMoveItems_Pal[] = INCBIN_U16("graphics/pokemon_storage/bg_move_items.gbapal"); - -static const u16 sCloseBoxButton_Tilemap[] = -{ - 0x014c, 0x014d, 0x014e, 0x014f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x015c, 0x015d, 0x015e, 0x015f, 0x0180, 0x0181, 0x0182, - 0x0183, 0x0184, 0x0175, 0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, - 0x018a, 0x018b, 0x018c, 0x018d -}; -static const u16 sPartySlotFilled_Tilemap[] = -{ - 0x1140, 0x1141, 0x1141, 0x1142, 0x1150, 0x1151, 0x1151, 0x1152, 0x1160, 0x1161, 0x1161, 0x1162, -}; -static const u16 sPartySlotEmpty_Tilemap[] = -{ - 0x1143, 0x1144, 0x1144, 0x1145, 0x1153, 0x1154, 0x1154, 0x1155, 0x1163, 0x1164, 0x1164, 0x1165, -}; - -static const u16 sWaveform_Pal[] = INCBIN_U16("graphics/pokemon_storage/waveform.gbapal"); -static const u32 sWaveform_Gfx[] = INCBIN_U32("graphics/pokemon_storage/waveform.4bpp"); -static const u16 sUnused_Pal[] = INCBIN_U16("graphics/pokemon_storage/unused.gbapal"); -static const u16 sUnknown_Pal[] = INCBIN_U16("graphics/pokemon_storage/unknown.gbapal"); +static const u16 sInterface_Pal[] = INCBIN_U16("graphics/pokemon_storage/interface.gbapal"); +static const u16 sPkmnDataGray_Pal[] = INCBIN_U16("graphics/pokemon_storage/pkmn_data_gray.gbapal"); +static const u16 sBg_Pal[] = INCBIN_U16("graphics/pokemon_storage/bg.gbapal"); +static const u16 sBgMoveItems_Pal[] = INCBIN_U16("graphics/pokemon_storage/bg_move_items.gbapal"); +static const u16 sCloseBoxButton_Tilemap[] = INCBIN_U16("graphics/pokemon_storage/close_box_button.bin"); +static const u16 sPartySlotFilled_Tilemap[] = INCBIN_U16("graphics/pokemon_storage/party_slot_filled.bin"); +static const u16 sPartySlotEmpty_Tilemap[] = INCBIN_U16("graphics/pokemon_storage/party_slot_empty.bin"); +static const u16 sWaveform_Pal[] = INCBIN_U16("graphics/pokemon_storage/waveform.gbapal"); +static const u32 sWaveform_Gfx[] = INCBIN_U32("graphics/pokemon_storage/waveform.4bpp"); +static const u16 sUnused_Pal[] = INCBIN_U16("graphics/pokemon_storage/unused.gbapal"); +static const u16 sTextWindows_Pal[] = INCBIN_U16("graphics/pokemon_storage/text_windows.gbapal"); static const struct WindowTemplate sWindowTemplates[] = { - { + // The panel below the currently displayed Pokémon + [WIN_DISPLAY_INFO] = { .bg = 1, .tilemapLeft = 0, .tilemapTop = 11, @@ -992,7 +985,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 3, .baseBlock = 0xC0, }, - { + [WIN_MESSAGE] = { .bg = 0, .tilemapLeft = 11, .tilemapTop = 17, @@ -1001,7 +994,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x14, }, - { + [WIN_ITEM_DESC] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 13, @@ -1053,7 +1046,7 @@ static const struct BgTemplate sBgTemplates[] = }, }; -static const struct SpritePalette gWaveformSpritePalette = +static const struct SpritePalette sWaveformSpritePalette = { sWaveform_Pal, PALTAG_MISC_2 }; @@ -1126,7 +1119,7 @@ static const struct OamData sOamData_DisplayMon = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -1143,7 +1136,7 @@ static const struct OamData sOamData_Waveform = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), .x = 0, @@ -1219,7 +1212,7 @@ static const struct OamData sOamData_MonIcon = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -1350,8 +1343,8 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero winTemplate.height = 2; windowId = AddWindow(&winTemplate); FillWindowPixelBuffer(windowId, PIXEL_FILL(zero2)); - tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA); - tileData2 = (winTemplate.width * 32) + tileData1; + tileData1 = (u8 *) GetWindowAttribute(windowId, WINDOW_TILE_DATA); + tileData2 = (winTemplate.width * TILE_SIZE_4BPP) + tileData1; if (!zero1) txtColor[0] = TEXT_COLOR_TRANSPARENT; @@ -1359,7 +1352,7 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero txtColor[0] = zero2; txtColor[1] = TEXT_DYNAMIC_COLOR_6; txtColor[2] = TEXT_DYNAMIC_COLOR_5; - AddTextPrinterParameterized4(windowId, 1, 0, 1, 0, 0, txtColor, -1, string); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, 1, 0, 0, txtColor, TEXT_SKIP_DRAW, string); tileBytesToBuffer = bytesToBuffer; if (tileBytesToBuffer > 6u) @@ -1387,7 +1380,7 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero // Unused static void UnusedDrawTextWindow(const u8 *string, void *dst, u16 offset, u8 bgColor, u8 fgColor, u8 shadowColor) { - u32 tileSize; + u32 tilesSize; u8 windowId; u8 txtColor[3]; u8 *tileData1, *tileData2; @@ -1395,17 +1388,17 @@ static void UnusedDrawTextWindow(const u8 *string, void *dst, u16 offset, u8 bgC winTemplate.width = StringLength_Multibyte(string); winTemplate.height = 2; - tileSize = winTemplate.width * 32; + tilesSize = winTemplate.width * TILE_SIZE_4BPP; windowId = AddWindow(&winTemplate); FillWindowPixelBuffer(windowId, PIXEL_FILL(bgColor)); - tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA); - tileData2 = (winTemplate.width * 32) + tileData1; + tileData1 = (u8 *) GetWindowAttribute(windowId, WINDOW_TILE_DATA); + tileData2 = (winTemplate.width * TILE_SIZE_4BPP) + tileData1; txtColor[0] = bgColor; txtColor[1] = fgColor; txtColor[2] = shadowColor; - AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, txtColor, -1, string); - CpuCopy16(tileData1, dst, tileSize); - CpuCopy16(tileData2, dst + offset, tileSize); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, 2, 0, 0, txtColor, TEXT_SKIP_DRAW, string); + CpuCopy16(tileData1, dst, tilesSize); + CpuCopy16(tileData2, dst + offset, tilesSize); RemoveWindow(windowId); } @@ -1560,11 +1553,11 @@ static void Task_PCMainMenu(u8 taskId) case STATE_LOAD: CreateMainMenu(task->tSelectedOption, &task->tWindowId); LoadMessageBoxAndBorderGfx(); - DrawDialogueFrame(0, 0); + DrawDialogueFrame(0, FALSE); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sMainMenuTexts[task->tSelectedOption].desc, TEXT_SPEED_FF, NULL, 2, 1, 3); - CopyWindowToVram(0, 3); - CopyWindowToVram(task->tWindowId, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, TEXT_SKIP_DRAW, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + CopyWindowToVram(0, COPYWIN_FULL); + CopyWindowToVram(task->tWindowId, COPYWIN_FULL); task->tState++; break; case STATE_FADE_IN: @@ -1586,14 +1579,14 @@ static void Task_PCMainMenu(u8 taskId) { task->tSelectedOption = task->tNextOption; FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } break; case MENU_B_PRESSED: case OPTION_EXIT: ClearStdWindowAndFrame(task->tWindowId, TRUE); - ScriptContext2_Disable(); - EnableBothScriptContexts(); + UnlockPlayerFieldControls(); + ScriptContext_Enable(); RemoveWindow(task->tWindowId); DestroyTask(taskId); break; @@ -1602,14 +1595,14 @@ static void Task_PCMainMenu(u8 taskId) { // Can't withdraw FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gText_PartyFull, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PartyFull, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tState = STATE_ERROR_MSG; } else if (task->tInput == OPTION_DEPOSIT && CountPartyMons() == 1) { // Can't deposit FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gText_JustOnePkmn, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_JustOnePkmn, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tState = STATE_ERROR_MSG; } else @@ -1627,7 +1620,7 @@ static void Task_PCMainMenu(u8 taskId) if (JOY_NEW(A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tState = STATE_HANDLE_INPUT; } else if (JOY_NEW(DPAD_UP)) @@ -1637,7 +1630,7 @@ static void Task_PCMainMenu(u8 taskId) Menu_MoveCursor(-1); task->tSelectedOption = Menu_GetCursorPos(); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tState = STATE_HANDLE_INPUT; } else if (JOY_NEW(DPAD_DOWN)) @@ -1647,7 +1640,7 @@ static void Task_PCMainMenu(u8 taskId) Menu_MoveCursor(1); task->tSelectedOption = Menu_GetCursorPos(); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); task->tState = STATE_HANDLE_INPUT; } break; @@ -1668,7 +1661,7 @@ void ShowPokemonStorageSystemPC(void) u8 taskId = CreateTask(Task_PCMainMenu, 80); gTasks[taskId].tState = 0; gTasks[taskId].tSelectedOption = 0; - ScriptContext2_Enable(); + LockPlayerFieldControls(); } static void FieldTask_ReturnToPcMenu(void) @@ -1700,7 +1693,7 @@ static void CreateMainMenu(u8 whichMenu, s16 *windowIdPtr) DrawStdWindowFrame(windowId, FALSE); PrintMenuTable(windowId, OPTIONS_COUNT, (void *)sMainMenuTexts); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, OPTIONS_COUNT, whichMenu); + InitMenuInUpperLeftCornerNormal(windowId, OPTIONS_COUNT, whichMenu); *windowIdPtr = windowId; } @@ -1951,14 +1944,14 @@ static void ChooseBoxMenu_PrintInfo(void) FillWindowPixelBuffer(windowId, PIXEL_FILL(4)); // Print box name - center = GetStringCenterAlignXOffset(1, boxName, 64); - AddTextPrinterParameterized3(windowId, 1, center, 1, sChooseBoxMenu_TextColors, TEXT_SPEED_FF, boxName); + center = GetStringCenterAlignXOffset(FONT_NORMAL, boxName, 64); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, center, 1, sChooseBoxMenu_TextColors, TEXT_SKIP_DRAW, boxName); // Print #/30 for number of Pokémon in the box ConvertIntToDecimalStringN(numBoxMonsText, numInBox, STR_CONV_MODE_RIGHT_ALIGN, 2); StringAppend(numBoxMonsText, sText_OutOf30); - center = GetStringCenterAlignXOffset(1, numBoxMonsText, 64); - AddTextPrinterParameterized3(windowId, 1, center, 17, sChooseBoxMenu_TextColors, TEXT_SPEED_FF, numBoxMonsText); + center = GetStringCenterAlignXOffset(FONT_NORMAL, numBoxMonsText, 64); + AddTextPrinterParameterized3(windowId, FONT_NORMAL, center, 17, sChooseBoxMenu_TextColors, TEXT_SKIP_DRAW, numBoxMonsText); winTileData = GetWindowAttribute(windowId, WINDOW_TILE_DATA); CpuCopy32((void *)winTileData, (void *)OBJ_VRAM0 + 0x100 + (GetSpriteTileStartByTag(sChooseBoxMenu->tileTag) * 32), 0x400); @@ -2138,10 +2131,10 @@ static void Task_InitPokeStorage(u8 taskId) } break; case 2: - PutWindowTilemap(0); - ClearWindowTilemap(1); + PutWindowTilemap(WIN_DISPLAY_INFO); + ClearWindowTilemap(WIN_MESSAGE); CpuFill32(0, (void *)VRAM, 0x200); - LoadUserWindowBorderGfx(1, 0xB, 0xE0); + LoadUserWindowBorderGfx(WIN_MESSAGE, 0xB, 0xE0); break; case 3: ResetAllBgCoords(); @@ -3097,6 +3090,7 @@ static void Task_TakeItemForMoving(u8 taskId) StartCursorAnim(CURSOR_ANIM_OPEN); TakeItemFromMon(sInPartyMenu ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetCursorPosition()); sStorage->state++; + sJustOpenedBag = FALSE; break; case 2: if (!IsItemIconAnimActive()) @@ -3616,6 +3610,7 @@ static void Task_GiveItemFromBag(u8 taskId) sWhichToReshow = SCREEN_CHANGE_ITEM_FROM_BAG - 1; sStorage->screenChangeType = SCREEN_CHANGE_ITEM_FROM_BAG; SetPokeStorageTask(Task_ChangeScreen); + sJustOpenedBag = TRUE; } break; } @@ -3793,9 +3788,16 @@ static void GiveChosenBagItem(void) { u8 pos = GetCursorPosition(); if (sInPartyMenu) + { + struct Pokemon *mon = &gPlayerParty[pos]; SetMonData(&gPlayerParty[pos], MON_DATA_HELD_ITEM, &itemId); + SetMonFormPSS(&mon->box); + } else + { SetCurrentBoxMonData(pos, MON_DATA_HELD_ITEM, &itemId); + SetMonFormPSS(&gPokemonStoragePtr->boxes[StorageGetCurrentBox()][pos]); + } RemoveBagItem(itemId, 1); } @@ -3828,8 +3830,8 @@ static void SetScrollingBackground(void) static void ScrollBackground(void) { - ChangeBgX(3, 128, 1); - ChangeBgY(3, 128, 2); + ChangeBgX(3, 128, BG_COORD_ADD); + ChangeBgY(3, 128, BG_COORD_SUB); } static void LoadPokeStorageMenuGfx(void) @@ -3857,14 +3859,14 @@ static bool8 InitPokeStorageWindows(void) static void LoadWaveformSpritePalette(void) { - LoadSpritePalette(&gWaveformSpritePalette); + LoadSpritePalette(&sWaveformSpritePalette); } static void InitPalettesAndSprites(void) { LoadPalette(sInterface_Pal, 0, sizeof(sInterface_Pal)); LoadPalette(sPkmnDataGray_Pal, 0x20, sizeof(sPkmnDataGray_Pal)); - LoadPalette(sUnknown_Pal, 0xF0, sizeof(sUnknown_Pal)); + LoadPalette(sTextWindows_Pal, 0xF0, sizeof(sTextWindows_Pal)); if (sStorage->boxOption != OPTION_MOVE_ITEMS) LoadPalette(sBg_Pal, 0x30, sizeof(sBg_Pal)); else @@ -3884,7 +3886,7 @@ static void CreateMarkingComboSprite(void) sStorage->markingComboSprite->subpriority = 1; sStorage->markingComboSprite->x = 40; sStorage->markingComboSprite->y = 150; - sStorage->markingComboTilesPtr = (void*) OBJ_VRAM0 + 32 * GetSpriteTileStartByTag(GFXTAG_MARKING_COMBO); + sStorage->markingComboTilesPtr = (void *) OBJ_VRAM0 + 32 * GetSpriteTileStartByTag(GFXTAG_MARKING_COMBO); } static void CreateWaveformSprites(void) @@ -3972,7 +3974,7 @@ static void CreateDisplayMonSprite(void) sStorage->displayMonSprite = &gSprites[spriteId]; sStorage->displayMonPalOffset = palSlot * 16 + 0x100; - sStorage->displayMonTilePtr = (void*) OBJ_VRAM0 + tileStart * 32; + sStorage->displayMonTilePtr = (void *) OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP; } while (0); if (sStorage->displayMonSprite == NULL) @@ -3989,7 +3991,7 @@ static void LoadDisplayMonGfx(u16 species, u32 pid) if (species != SPECIES_NONE) { - LoadSpecialPokePic(&gMonFrontPicTable[species], sStorage->tileBuffer, species, pid, TRUE); + LoadSpecialPokePic(sStorage->tileBuffer, species, pid, TRUE); LZ77UnCompWram(sStorage->displayMonPalette, sStorage->displayMonPalBuffer); CpuCopy32(sStorage->tileBuffer, sStorage->displayMonTilePtr, MON_PIC_SIZE); LoadPalette(sStorage->displayMonPalBuffer, sStorage->displayMonPalOffset, 0x20); @@ -4003,23 +4005,23 @@ static void LoadDisplayMonGfx(u16 species, u32 pid) static void PrintDisplayMonInfo(void) { - FillWindowPixelBuffer(0, PIXEL_FILL(1)); + FillWindowPixelBuffer(WIN_DISPLAY_INFO, PIXEL_FILL(1)); if (sStorage->boxOption != OPTION_MOVE_ITEMS) { - AddTextPrinterParameterized(0, 1, sStorage->displayMonNameText, 6, 0, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(0, 2, sStorage->displayMonSpeciesName, 6, 15, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(0, 2, sStorage->displayMonGenderLvlText, 10, 29, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(0, 0, sStorage->displayMonItemName, 6, 43, TEXT_SPEED_FF, NULL); + 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, FONT_SHORT, sStorage->displayMonGenderLvlText, 10, 29, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(WIN_DISPLAY_INFO, FONT_SMALL, sStorage->displayMonItemName, 6, 43, TEXT_SKIP_DRAW, NULL); } else { - AddTextPrinterParameterized(0, 0, sStorage->displayMonItemName, 6, 0, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(0, 1, sStorage->displayMonNameText, 6, 13, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(0, 2, sStorage->displayMonSpeciesName, 6, 28, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(0, 2, sStorage->displayMonGenderLvlText, 10, 42, TEXT_SPEED_FF, NULL); + 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, FONT_SHORT, sStorage->displayMonGenderLvlText, 10, 42, TEXT_SKIP_DRAW, NULL); } - CopyWindowToVram(0, 2); + CopyWindowToVram(WIN_DISPLAY_INFO, COPYWIN_GFX); if (sStorage->displayMonSpecies != SPECIES_NONE) { UpdateMonMarkingTiles(sStorage->displayMonMarkings, sStorage->markingComboTilesPtr); @@ -4280,7 +4282,7 @@ static void UpdateBoxToSendMons(void) static void InitPokeStorageBg0(void) { SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(29)); - LoadUserWindowBorderGfx(1, 2, 208); + LoadUserWindowBorderGfx(WIN_MESSAGE, 2, 208); FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17); CopyBgTilemapBufferToVram(0); } @@ -4319,11 +4321,11 @@ static void PrintMessage(u8 id) } DynamicPlaceholderTextUtil_ExpandPlaceholders(sStorage->messageText, sMessages[id].text); - FillWindowPixelBuffer(1, PIXEL_FILL(1)); - AddTextPrinterParameterized(1, 1, sStorage->messageText, 0, 1, TEXT_SPEED_FF, NULL); - DrawTextBorderOuter(1, 2, 14); - PutWindowTilemap(1); - CopyWindowToVram(1, 2); + FillWindowPixelBuffer(WIN_MESSAGE, PIXEL_FILL(1)); + AddTextPrinterParameterized(WIN_MESSAGE, FONT_NORMAL, sStorage->messageText, 0, 1, TEXT_SKIP_DRAW, NULL); + DrawTextBorderOuter(WIN_MESSAGE, 2, 14); + PutWindowTilemap(WIN_MESSAGE); + CopyWindowToVram(WIN_MESSAGE, COPYWIN_GFX); ScheduleBgCopyTilemapToVram(0); } @@ -4335,7 +4337,7 @@ static void ShowYesNoWindow(s8 cursorPos) static void ClearBottomWindow(void) { - ClearStdWindowAndFrameToTransparent(1, FALSE); + ClearStdWindowAndFrameToTransparent(WIN_MESSAGE, FALSE); ScheduleBgCopyTilemapToVram(0); } @@ -4688,7 +4690,7 @@ static bool8 UpdateBoxMonIconScroll(void) // Create the new incoming column of icons sStorage->iconScrollPos += sStorage->iconScrollSpeed; sStorage->iconScrollNumIncoming += CreateBoxMonIconsInColumn(sStorage->iconScrollCurColumn, sStorage->iconScrollDistance, sStorage->iconScrollSpeed); - + if ((sStorage->iconScrollDirection > 0 && sStorage->iconScrollCurColumn == IN_BOX_COLUMNS - 1) || (sStorage->iconScrollDirection < 0 && sStorage->iconScrollCurColumn == 0)) { @@ -5051,7 +5053,7 @@ static void SetReleaseMon(u8 mode, u8 position) static bool8 TryHideReleaseMonSprite(void) { - if (*sStorage->releaseMonSpritePtr == NULL + if (*sStorage->releaseMonSpritePtr == NULL || (*sStorage->releaseMonSpritePtr)->invisible) return FALSE; @@ -5107,7 +5109,7 @@ static u16 TryLoadMonIconTiles(u16 species, u32 personality) u16 i, offset; // Treat female mons as a seperate species as they may have a different icon than males - if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + if (ShouldShowFemaleDifferences(species, personality)) species |= 0x8000; // 1 << 15 // Search icon list for this species @@ -5137,7 +5139,7 @@ static u16 TryLoadMonIconTiles(u16 species, u32 personality) sStorage->numIconsPerSpecies[i]++; offset = 16 * i; species &= GENDER_MASK; - CpuCopy32(GetMonIconTiles(species, personality), (void*)(OBJ_VRAM0) + offset * 32, 0x200); + CpuCopy32(GetMonIconTiles(species, personality), (void *)(OBJ_VRAM0) + offset * TILE_SIZE_4BPP, 0x200); return offset; } @@ -5174,7 +5176,7 @@ static struct Sprite *CreateMonIconSprite(u16 species, u32 personality, s16 x, s struct SpriteTemplate template = sSpriteTemplate_MonIcon; species = GetIconSpecies(species, personality); - if (SpeciesHasGenderDifference[species] && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE) + if (ShouldShowFemaleDifferences(species, personality)) { template.paletteTag = PALTAG_MON_ICON_0 + gMonIconPaletteIndicesFemale[species]; } @@ -5453,24 +5455,23 @@ static bool32 WaitForWallpaperGfxLoad(void) if (IsDma3ManagerBusyWithBgCopy()) return FALSE; - if (sStorage->wallpaperTiles != NULL) - FREE_AND_SET_NULL(sStorage->wallpaperTiles); + TRY_FREE_AND_SET_NULL(sStorage->wallpaperTiles); return TRUE; } static void DrawWallpaper(const void *tilemap, s8 direction, u8 offset) { - s16 var = offset * 256; - s16 var2 = (offset * 2) + 3; + s16 tileOffset = offset * 256; + s16 paletteNum = (offset * 2) + 3; s16 x = ((sStorage->bg2_X / 8 + 10) + (direction * 24)) & 0x3F; - CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 0x14, 0x12, x, 2, 0x14, 0x12, 0x11, var, var2); + CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 20, 18, x, 2, 20, 18, 17, tileOffset, paletteNum); if (direction == 0) return; if (direction > 0) - x += 0x14; + x += 20; else x -= 4; @@ -5536,7 +5537,7 @@ static void InitBoxTitle(u8 boxId) sStorage->boxTitleAltPalOffset = 0x10e + 16 * tagIndex; sStorage->wallpaperPalBits |= 0x10000 << tagIndex; - StringCopyPadded(sStorage->boxTitleText, GetBoxNamePtr(boxId), 0, 8); + StringCopyPadded(sStorage->boxTitleText, GetBoxNamePtr(boxId), 0, BOX_NAME_LENGTH); DrawTextWindowAndBufferTiles(sStorage->boxTitleText, sStorage->boxTitleTiles, 0, 0, 2); LoadSpriteSheet(&spriteSheet); x = GetBoxTitleBaseX(GetBoxNamePtr(boxId)); @@ -5581,7 +5582,7 @@ static void CreateIncomingBoxTitle(u8 boxId, s8 direction) template.paletteTag = PALTAG_BOX_TITLE; } - StringCopyPadded(sStorage->boxTitleText, GetBoxNamePtr(boxId), 0, 8); + StringCopyPadded(sStorage->boxTitleText, GetBoxNamePtr(boxId), 0, BOX_NAME_LENGTH); DrawTextWindowAndBufferTiles(sStorage->boxTitleText, sStorage->boxTitleTiles, 0, 0, 2); LoadSpriteSheet(&spriteSheet); LoadPalette(sBoxTitleColors[GetBoxWallpaper(boxId)], palOffset, sizeof(sBoxTitleColors[0])); @@ -5659,7 +5660,7 @@ static void CycleBoxTitleColor(void) static s16 GetBoxTitleBaseX(const u8 *string) { - return DISPLAY_WIDTH - 64 - GetStringWidth(1, string, 0) / 2; + return DISPLAY_WIDTH - 64 - GetStringWidth(FONT_NORMAL, string, 0) / 2; } @@ -5927,7 +5928,7 @@ static bool8 UpdateCursorPos(void) sStorage->cursorNewY += sStorage->cursorSpeedY; sStorage->cursorSprite->x = sStorage->cursorNewX >> 8; sStorage->cursorSprite->y = sStorage->cursorNewY >> 8; - + // Limit cursor on right if (sStorage->cursorSprite->x > DISPLAY_WIDTH + 16) { @@ -6549,7 +6550,7 @@ static void GetRestrictedReleaseMoves(u16 *moves) for (i = 0; i < ARRAY_COUNT(sRestrictedReleaseMoves); i++) { if (sRestrictedReleaseMoves[i].mapGroup == MAP_GROUPS_COUNT - || (sRestrictedReleaseMoves[i].mapGroup == gSaveBlock1Ptr->location.mapGroup + || (sRestrictedReleaseMoves[i].mapGroup == gSaveBlock1Ptr->location.mapGroup && sRestrictedReleaseMoves[i].mapNum == gSaveBlock1Ptr->location.mapNum)) { *moves = sRestrictedReleaseMoves[i].move; @@ -6592,7 +6593,7 @@ static void InitCanReleaseMonVars(void) } GetRestrictedReleaseMoves(sStorage->restrictedMoveList); - sStorage->restrictedReleaseMonMoves = GetMonData(&sStorage->tempMon, MON_DATA_KNOWN_MOVES, (u8*)sStorage->restrictedMoveList); + sStorage->restrictedReleaseMonMoves = GetMonData(&sStorage->tempMon, MON_DATA_KNOWN_MOVES, (u8 *)sStorage->restrictedMoveList); if (sStorage->restrictedReleaseMonMoves != 0) { // Pokémon knows at least one restricted release move @@ -6613,7 +6614,7 @@ static bool32 AtLeastThreeUsableMons(void) { s32 i, j; s32 count = (sIsMonBeingMoved != FALSE); - + // Check party for usable Pokémon for (j = 0; j < PARTY_SIZE; j++) { @@ -6658,7 +6659,7 @@ static s8 RunCanReleaseMon(void) // Make sure party Pokémon isn't the one we're releasing first if (sStorage->releaseBoxId != TOTAL_BOXES_COUNT || sStorage->releaseBoxPos != i) { - knownMoves = GetMonData(&gPlayerParty[i], MON_DATA_KNOWN_MOVES, (u8*)sStorage->restrictedMoveList); + knownMoves = GetMonData(&gPlayerParty[i], MON_DATA_KNOWN_MOVES, (u8 *)sStorage->restrictedMoveList); sStorage->restrictedReleaseMonMoves &= ~(knownMoves); } } @@ -6683,8 +6684,8 @@ static s8 RunCanReleaseMon(void) // moves the release Pokémon knows for (i = 0; i < IN_BOX_COUNT; i++) { - knownMoves = GetAndCopyBoxMonDataAt(sStorage->releaseCheckBoxId, sStorage->releaseCheckBoxPos, MON_DATA_KNOWN_MOVES, (u8*)sStorage->restrictedMoveList); - if (knownMoves != 0 && !(sStorage->releaseBoxId == sStorage->releaseCheckBoxId + knownMoves = GetAndCopyBoxMonDataAt(sStorage->releaseCheckBoxId, sStorage->releaseCheckBoxPos, MON_DATA_KNOWN_MOVES, (u8 *)sStorage->restrictedMoveList); + if (knownMoves != 0 && !(sStorage->releaseBoxId == sStorage->releaseCheckBoxId && sStorage->releaseBoxPos == sStorage->releaseCheckBoxPos)) { // Found PC Pokémon with restricted move, clear move from list @@ -6890,6 +6891,18 @@ static void ReshowDisplayMon(void) TryRefreshDisplayMon(); } +void SetMonFormPSS(struct BoxPokemon *boxMon) +{ + u16 targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_ITEM_HOLD_ABILITY, 0); + if (targetSpecies == SPECIES_NONE) + targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_ITEM_HOLD, 0); + if (targetSpecies != SPECIES_NONE) + { + SetBoxMonData(boxMon, MON_DATA_SPECIES, &targetSpecies); + UpdateSpeciesSpritePSS(boxMon); + } +} + static void SetDisplayMonData(void *pokemon, u8 mode) { u8 *txtPtr; @@ -6913,7 +6926,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) sStorage->displayMonIsEgg = GetMonData(mon, MON_DATA_IS_EGG); GetMonData(mon, MON_DATA_NICKNAME, sStorage->displayMonName); - StringGetEnd10(sStorage->displayMonName); + StringGet_Nickname(sStorage->displayMonName); sStorage->displayMonLevel = GetMonData(mon, MON_DATA_LEVEL); sStorage->displayMonMarkings = GetMonData(mon, MON_DATA_MARKINGS); sStorage->displayMonPersonality = GetMonData(mon, MON_DATA_PERSONALITY); @@ -6938,7 +6951,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) GetBoxMonData(boxMon, MON_DATA_NICKNAME, sStorage->displayMonName); - StringGetEnd10(sStorage->displayMonName); + StringGet_Nickname(sStorage->displayMonName); sStorage->displayMonLevel = GetLevelFromBoxMonExp(boxMon); sStorage->displayMonMarkings = GetBoxMonData(boxMon, MON_DATA_MARKINGS); sStorage->displayMonPersonality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY); @@ -7004,7 +7017,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) *(txtPtr)++ = TEXT_COLOR_DARK_GRAY; *(txtPtr)++ = TEXT_COLOR_WHITE; *(txtPtr)++ = TEXT_COLOR_LIGHT_GRAY; - *(txtPtr)++ = CHAR_GENDERLESS; + *(txtPtr)++ = CHAR_SPACER; // Genderless break; } @@ -7561,7 +7574,7 @@ static u8 HandleInput_OnButtons(void) sStorage->cursorVerticalWrap = -1; if (sCursorPosition == 0) cursorPosition = IN_BOX_COUNT - 1 - 5; - else + else cursorPosition = IN_BOX_COUNT - 1; sStorage->cursorFlipTimer = 1; break; @@ -7594,7 +7607,7 @@ static u8 HandleInput_OnButtons(void) // Button was pressed, determine which if (JOY_NEW(A_BUTTON)) return (cursorPosition == 0) ? INPUT_SHOW_PARTY : INPUT_CLOSE_BOX; - + if (JOY_NEW(B_BUTTON)) return INPUT_PRESSED_B; @@ -8047,8 +8060,8 @@ static void AddMenu(void) sStorage->menuWindowId = AddWindow(&sStorage->menuWindow); ClearWindowTilemap(sStorage->menuWindowId); DrawStdFrameWithCustomTileAndPalette(sStorage->menuWindowId, FALSE, 11, 14); - PrintMenuTable(sStorage->menuWindowId, sStorage->menuItemsCount, (void*)sStorage->menuItems); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sStorage->menuWindowId, sStorage->menuItemsCount, 0); + PrintMenuTable(sStorage->menuWindowId, sStorage->menuItemsCount, (void *)sStorage->menuItems); + InitMenuInUpperLeftCornerNormal(sStorage->menuWindowId, sStorage->menuItemsCount, 0); ScheduleBgCopyTilemapToVram(0); sStorage->menuUnusedField = 0; } @@ -8108,9 +8121,9 @@ static void RemoveMenu(void) //------------------------------------------------------------------------------ // SECTION: MultiMove -// +// // The functions below handle moving and selecting multiple Pokémon at once. -// The icon sprites are moved to bg 0, and this bg is manipulated to move +// The icon sprites are moved to bg 0, and this bg is manipulated to move // them as a group. //------------------------------------------------------------------------------ @@ -8201,21 +8214,21 @@ static bool8 MultiMove_Start(void) { case 0: HideBg(0); - sub_80D304C(0x80); + TryLoadAllMonIconPalettesAtOffset(0x80); sMultiMove->state++; break; case 1: GetCursorBoxColumnAndRow(&sMultiMove->fromColumn, &sMultiMove->fromRow); sMultiMove->toColumn = sMultiMove->fromColumn; sMultiMove->toRow = sMultiMove->fromRow; - ChangeBgX(0, -1024, 0); - ChangeBgY(0, -1024, 0); + ChangeBgX(0, -1024, BG_COORD_SET); + ChangeBgY(0, -1024, BG_COORD_SET); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); FillWindowPixelBuffer8Bit(sStorage->multiMoveWindowId, PIXEL_FILL(0)); MultiMove_SetIconToBg(sMultiMove->fromColumn, sMultiMove->fromRow); SetBgAttribute(0, BG_ATTR_PALETTEMODE, 1); PutWindowTilemap(sStorage->multiMoveWindowId); - CopyWindowToVram8Bit(sStorage->multiMoveWindowId, 3); + CopyWindowToVram8Bit(sStorage->multiMoveWindowId, COPYWIN_FULL); BlendPalettes(0x3F00, 8, RGB_WHITE); StartCursorAnim(CURSOR_ANIM_OPEN); SetGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_256COLOR); @@ -8271,7 +8284,7 @@ static bool8 MultiMove_ChangeSelection(void) MultiMove_UpdateSelectedIcons(); sMultiMove->toColumn = sMultiMove->cursorColumn; sMultiMove->toRow = sMultiMove->cursorRow; - CopyWindowToVram8Bit(sStorage->multiMoveWindowId, 2); + CopyWindowToVram8Bit(sStorage->multiMoveWindowId, COPYWIN_GFX); sMultiMove->state++; } break; @@ -8512,19 +8525,19 @@ static void MultiMove_ClearIconFromBg(u8 x, u8 y) } } -static void MultiMove_InitMove(u16 x, u16 y, u16 arg2) +static void MultiMove_InitMove(u16 x, u16 y, u16 moveSteps) { sMultiMove->bgX = x; sMultiMove->bgY = y; - sMultiMove->bgMoveSteps = arg2; + sMultiMove->bgMoveSteps = moveSteps; } static u8 MultiMove_UpdateMove(void) { if (sMultiMove->bgMoveSteps != 0) { - ChangeBgX(0, sMultiMove->bgX, 1); - ChangeBgY(0, sMultiMove->bgY, 1); + ChangeBgX(0, sMultiMove->bgX, BG_COORD_ADD); + ChangeBgY(0, sMultiMove->bgY, BG_COORD_ADD); sMultiMove->bgMoveSteps--; } @@ -8629,8 +8642,8 @@ static void MultiMove_SetPlacedMonData(void) static void MultiMove_ResetBg(void) { - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); SetBgAttribute(0, BG_ATTR_PALETTEMODE, 0); ClearGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_256COLOR); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); @@ -8668,7 +8681,7 @@ static bool8 MultiMove_CanPlaceSelection(void) //------------------------------------------------------------------------------ // SECTION: Item mode -// +// // The functions below handle the Move Items mode //------------------------------------------------------------------------------ @@ -8680,7 +8693,7 @@ static const struct OamData sOamData_ItemIcon = .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -8780,7 +8793,7 @@ static void CreateItemIconSprites(void) { spriteSheet.tag = GFXTAG_ITEM_ICON_0 + i; LoadCompressedSpriteSheet(&spriteSheet); - sStorage->itemIcons[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * 32 + (void*)(OBJ_VRAM0); + sStorage->itemIcons[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * TILE_SIZE_4BPP + (void *)(OBJ_VRAM0); sStorage->itemIcons[i].palIndex = AllocSpritePalette(PALTAG_ITEM_ICON_0 + i); sStorage->itemIcons[i].palIndex *= 16; sStorage->itemIcons[i].palIndex += 0x100; @@ -8864,11 +8877,14 @@ static void TakeItemFromMon(u8 cursorArea, u8 cursorPos) { SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &itemId); SetBoxMonIconObjMode(cursorPos, 1); + SetMonFormPSS(&gPokemonStoragePtr->boxes[StorageGetCurrentBox()][cursorPos]); } else { + struct Pokemon *mon = &gPlayerParty[cursorPos]; SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &itemId); SetPartyMonIconObjMode(cursorPos, 1); + SetMonFormPSS(&mon->box); } sStorage->movingItemId = sStorage->displayMonItemId; @@ -8903,12 +8919,15 @@ static void SwapItemsWithMon(u8 cursorArea, u8 cursorPos) itemId = GetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM); SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &sStorage->movingItemId); sStorage->movingItemId = itemId; + SetMonFormPSS(&gPokemonStoragePtr->boxes[StorageGetCurrentBox()][cursorPos]); } else { + struct Pokemon *mon = &gPlayerParty[cursorPos]; itemId = GetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM); SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &sStorage->movingItemId); sStorage->movingItemId = itemId; + SetMonFormPSS(&mon->box); } id = GetItemIconIdxByPosition(CURSOR_AREA_IN_HAND, 0); @@ -8930,11 +8949,14 @@ static void GiveItemToMon(u8 cursorArea, u8 cursorPos) { SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &sStorage->movingItemId); SetBoxMonIconObjMode(cursorPos, 0); + SetMonFormPSS(&gPokemonStoragePtr->boxes[StorageGetCurrentBox()][cursorPos]); } else { + struct Pokemon *mon = &gPlayerParty[cursorPos]; SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &sStorage->movingItemId); SetPartyMonIconObjMode(cursorPos, 0); + SetMonFormPSS(&mon->box); } } @@ -8954,11 +8976,14 @@ static void MoveItemFromMonToBag(u8 cursorArea, u8 cursorPos) { SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &itemId); SetBoxMonIconObjMode(cursorPos, 1); + SetMonFormPSS(&gPokemonStoragePtr->boxes[StorageGetCurrentBox()][cursorPos]); } else { + struct Pokemon *mon = &gPlayerParty[cursorPos]; SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &itemId); SetPartyMonIconObjMode(cursorPos, 1); + SetMonFormPSS(&mon->box); } } @@ -8974,7 +8999,7 @@ static void MoveItemFromCursorToBag(void) // The party menu is being closed, if the cursor is on // a Pokémon that has a held item make sure it slides -// up along with the closing menu. +// up along with the closing menu. static void MoveHeldItemWithPartyMenu(void) { s32 i; @@ -8984,7 +9009,7 @@ static void MoveHeldItemWithPartyMenu(void) for (i = 0; i < MAX_ITEM_ICONS; i++) { - if (sStorage->itemIcons[i].active + if (sStorage->itemIcons[i].active && sStorage->itemIcons[i].area == CURSOR_AREA_IN_PARTY) SetItemIconCallback(i, ITEM_CB_HIDE_PARTY, CURSOR_AREA_IN_HAND, 0); } @@ -8998,10 +9023,10 @@ static bool8 IsItemIconAnimActive(void) { if (sStorage->itemIcons[i].active) { - if (!sStorage->itemIcons[i].sprite->affineAnimEnded + if (!sStorage->itemIcons[i].sprite->affineAnimEnded && sStorage->itemIcons[i].sprite->affineAnimBeginning) return TRUE; - if (sStorage->itemIcons[i].sprite->callback != SpriteCallbackDummy + if (sStorage->itemIcons[i].sprite->callback != SpriteCallbackDummy && sStorage->itemIcons[i].sprite->callback != SpriteCB_ItemIcon_SetPosToCursor) return TRUE; } @@ -9017,7 +9042,7 @@ static bool8 IsMovingItem(void) { for (i = 0; i < MAX_ITEM_ICONS; i++) { - if (sStorage->itemIcons[i].active + if (sStorage->itemIcons[i].active && sStorage->itemIcons[i].area == CURSOR_AREA_IN_HAND) return TRUE; } @@ -9226,8 +9251,8 @@ static void PrintItemDescription(void) else description = ItemId_GetDescription(sStorage->displayMonItemId); - FillWindowPixelBuffer(2, PIXEL_FILL(1)); - AddTextPrinterParameterized5(2, 1, description, 4, 0, 0, NULL, 0, 1); + FillWindowPixelBuffer(WIN_ITEM_DESC, PIXEL_FILL(1)); + AddTextPrinterParameterized5(WIN_ITEM_DESC, FONT_NORMAL, description, 4, 0, 0, NULL, 0, 1); } static void InitItemInfoWindow(void) @@ -9278,16 +9303,16 @@ static bool8 UpdateItemInfoWindowSlideOut(void) return TRUE; } -static void DrawItemInfoWindow(u32 pos) +static void DrawItemInfoWindow(u32 x) { - if (pos != 0) + if (x != 0) { - FillBgTilemapBufferRect(0, 0x13A, 0, 0xC, pos, 1, 0xFu); - FillBgTilemapBufferRect(0, 0x93A, 0, 0x14, pos, 1, 0xFu); + FillBgTilemapBufferRect(0, 0x13A, 0, 0xC, x, 1, 0xFu); + FillBgTilemapBufferRect(0, 0x93A, 0, 0x14, x, 1, 0xFu); } - FillBgTilemapBufferRect(0, 0x13B, pos, 0xD, 1, 7, 0xFu); - FillBgTilemapBufferRect(0, 0x13C, pos, 0xC, 1, 1, 0xFu); - FillBgTilemapBufferRect(0, 0x13D, pos, 0x14, 1, 1, 0xFu); + FillBgTilemapBufferRect(0, 0x13B, x, 0xD, 1, 7, 0xFu); + FillBgTilemapBufferRect(0, 0x13C, x, 0xC, 1, 1, 0xFu); + FillBgTilemapBufferRect(0, 0x13D, x, 0x14, 1, 1, 0xFu); ScheduleBgCopyTilemapToVram(0); } @@ -9685,7 +9710,7 @@ bool32 AnyStorageMonWithMove(u16 moveId) { if (GetBoxMonData(&gPokemonStoragePtr->boxes[i][j], MON_DATA_SANITY_HAS_SPECIES) && !GetBoxMonData(&gPokemonStoragePtr->boxes[i][j], MON_DATA_SANITY_IS_EGG) - && GetBoxMonData(&gPokemonStoragePtr->boxes[i][j], MON_DATA_KNOWN_MOVES, (u8*)moves)) + && GetBoxMonData(&gPokemonStoragePtr->boxes[i][j], MON_DATA_KNOWN_MOVES, (u8 *)moves)) return TRUE; } } @@ -9846,13 +9871,13 @@ struct u16 height; } static const sTilemapDimensions[][4] = { - { + [BG_TYPE_NORMAL] = { { 256, 256}, { 512, 256}, { 256, 512}, { 512, 512}, }, - { + [BG_TYPE_AFFINE] = { { 128, 128}, { 256, 256}, { 512, 512}, @@ -9877,7 +9902,7 @@ static void TilemapUtil_SetMap(u8 id, u8 bg, const void *tilemap, u16 width, u16 bgType = GetBgAttribute(bg, BG_ATTR_TYPE); sTilemapUtil[id].altWidth = sTilemapDimensions[bgType][bgScreenSize].width; sTilemapUtil[id].altHeight = sTilemapDimensions[bgType][bgScreenSize].height; - if (bgType != 0) + if (bgType != BG_TYPE_NORMAL) sTilemapUtil[id].tileSize = 1; else sTilemapUtil[id].tileSize = 2; @@ -10012,7 +10037,7 @@ static void TilemapUtil_Draw(u8 id) //------------------------------------------------------------------------------ // SECTION: UnkUtil -// +// // Some data transfer utility that goes functionally unused. // It gets initialized with UnkUtil_Init, and run every vblank in Pokémon // Storage with UnkUtil_Run, but neither of the Add functions are ever used, @@ -10069,7 +10094,7 @@ static void UnkUtil_CpuRun(struct UnkUtilData *data) for (i = 0; i < data->height; i++) { - CpuSet(data->src, data->dest, data->size / 2); + CpuCopy16(data->src, data->dest, data->size); data->dest += 64; data->src += data->unk * 2; } @@ -10102,3 +10127,33 @@ static void UnkUtil_DmaRun(struct UnkUtilData *data) data->dest += 64; } } + +void UpdateSpeciesSpritePSS(struct BoxPokemon *boxMon) +{ + u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES); + u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID); + u32 pid = GetBoxMonData(boxMon, MON_DATA_PERSONALITY); + + // Update front sprite + sStorage->displayMonSpecies = species; + sStorage->displayMonPalette = GetMonSpritePalFromSpeciesAndPersonality(species, otId, pid); + if (!sJustOpenedBag) + { + LoadDisplayMonGfx(species, pid); + StartDisplayMonMosaicEffect(); + + // Recreate icon sprite + if (sInPartyMenu) + { + DestroyAllPartyMonIcons(); + CreatePartyMonsSprites(TRUE); + } + else + { + DestroyBoxMonIcon(sStorage->boxMonsSprites[sCursorPosition]); + CreateBoxMonIconAtPos(sCursorPosition); + SetBoxMonIconObjMode(sCursorPosition, GetMonData(boxMon, MON_DATA_HELD_ITEM) == ITEM_NONE); + } + } + sJustOpenedBag = FALSE; +} diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 3ffd612ac0..784f9ef758 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -28,6 +28,7 @@ #include "palette.h" #include "pokeball.h" #include "pokemon.h" +#include "pokemon_debug.h" #include "pokemon_storage_system.h" #include "pokemon_summary_screen.h" #include "region_map.h" @@ -40,6 +41,8 @@ #include "text.h" #include "tv.h" #include "window.h" +#include "constants/battle_config.h" +#include "constants/battle_move_effects.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/party_menu.h" @@ -185,7 +188,9 @@ static EWRAM_DATA struct PokemonSummaryScreenData bool8 unk40EF; s16 switchCounter; // Used for various switch statement cases that decompress/load graphics or pokemon data u8 unk_filler4[6]; + u8 splitIconSpriteId; } *sMonSummaryScreen = NULL; + EWRAM_DATA u8 gLastViewedMonIndex = 0; static EWRAM_DATA u8 sMoveSlotToReplace = 0; ALIGNED(4) static EWRAM_DATA u8 sAnimDelayTaskId = 0; @@ -195,62 +200,62 @@ static bool8 LoadGraphics(void); static void CB2_InitSummaryScreen(void); static void InitBGs(void); static bool8 DecompressGraphics(void); -static void CopyMonToSummaryStruct(struct Pokemon* a); -static bool8 ExtractMonDataToSummaryStruct(struct Pokemon* a); +static void CopyMonToSummaryStruct(struct Pokemon *); +static bool8 ExtractMonDataToSummaryStruct(struct Pokemon *); static void SetDefaultTilemaps(void); -static void CloseSummaryScreen(u8 taskId); -static void Task_HandleInput(u8 taskId); -static void ChangeSummaryPokemon(u8 taskId, s8 a); -static void Task_ChangeSummaryMon(u8 taskId); -static s8 AdvanceMonIndex(s8 delta); -static s8 AdvanceMultiBattleMonIndex(s8 delta); -static bool8 IsValidToViewInMulti(struct Pokemon* mon); -static void ChangePage(u8 taskId, s8 a); -static void PssScrollRight(u8 taskId); -static void PssScrollRightEnd(u8 taskId); -static void PssScrollLeft(u8 taskId); -static void PssScrollLeftEnd(u8 taskId); +static void CloseSummaryScreen(u8); +static void Task_HandleInput(u8); +static void ChangeSummaryPokemon(u8, s8); +static void Task_ChangeSummaryMon(u8); +static s8 AdvanceMonIndex(s8); +static s8 AdvanceMultiBattleMonIndex(s8); +static bool8 IsValidToViewInMulti(struct Pokemon *); +static void ChangePage(u8, s8); +static void PssScrollRight(u8); +static void PssScrollRightEnd(u8); +static void PssScrollLeft(u8); +static void PssScrollLeftEnd(u8); static void TryDrawExperienceProgressBar(void); -static void SwitchToMoveSelection(u8 taskId); -static void Task_HandleInput_MoveSelect(u8 taskId); +static void SwitchToMoveSelection(u8); +static void Task_HandleInput_MoveSelect(u8); static bool8 HasMoreThanOneMove(void); -static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr); -static void CloseMoveSelectMode(u8 taskId); -static void SwitchToMovePositionSwitchMode(u8 a); -static void Task_HandleInput_MovePositionSwitch(u8 taskId); -static void ExitMovePositionSwitchMode(u8 taskId, bool8 swapMoves); -static void SwapMonMoves(struct Pokemon *mon, u8 moveIndex1, u8 moveIndex2); -static void SwapBoxMonMoves(struct BoxPokemon *mon, u8 moveIndex1, u8 moveIndex2); -static void Task_SetHandleReplaceMoveInput(u8 taskId); -static void Task_HandleReplaceMoveInput(u8 taskId); +static void ChangeSelectedMove(s16 *, s8, u8 *); +static void CloseMoveSelectMode(u8); +static void SwitchToMovePositionSwitchMode(u8); +static void Task_HandleInput_MovePositionSwitch(u8); +static void ExitMovePositionSwitchMode(u8, bool8); +static void SwapMonMoves(struct Pokemon *, u8, u8); +static void SwapBoxMonMoves(struct BoxPokemon *, u8, u8); +static void Task_SetHandleReplaceMoveInput(u8); +static void Task_HandleReplaceMoveInput(u8); static bool8 CanReplaceMove(void); -static void ShowCantForgetHMsWindow(u8 taskId); -static void Task_HandleInputCantForgetHMsMoves(u8 taskId); +static void ShowCantForgetHMsWindow(u8); +static void Task_HandleInputCantForgetHMsMoves(u8); static void DrawPagination(void); -static void HandlePowerAccTilemap(u16 a, s16 b); -static void Task_ShowPowerAccWindow(u8 taskId); -static void HandleAppealJamTilemap(u16 a, s16 b, u16 c); -static void Task_ShowAppealJamWindow(u8 taskId); -static void HandleStatusTilemap(u16 a, s16 b); -static void Task_ShowStatusWindow(u8 taskId); -static void TilemapFiveMovesDisplay(u16 *dst, u16 palette, bool8 remove); -static void DrawPokerusCuredSymbol(struct Pokemon* mon); -static void DrawExperienceProgressBar(struct Pokemon* mon); -static void DrawContestMoveHearts(u16 move); +static void HandlePowerAccTilemap(u16, s16); +static void Task_ShowPowerAccWindow(u8); +static void HandleAppealJamTilemap(u16, s16, u16); +static void Task_ShowAppealJamWindow(u8); +static void HandleStatusTilemap(u16, s16); +static void Task_ShowStatusWindow(u8); +static void TilemapFiveMovesDisplay(u16 *, u16, bool8); +static void DrawPokerusCuredSymbol(struct Pokemon *); +static void DrawExperienceProgressBar(struct Pokemon *); +static void DrawContestMoveHearts(u16); static void LimitEggSummaryPageDisplay(void); static void ResetWindows(void); static void PrintMonInfo(void); static void PrintNotEggInfo(void); static void PrintEggInfo(void); -static void PrintGenderSymbol(struct Pokemon *mon, u16 a); +static void PrintGenderSymbol(struct Pokemon *, u16); static void PrintPageNamesAndStats(void); -static void PutPageWindowTilemaps(u8 a); -static void ClearPageWindowTilemaps(u8 a); -static void RemoveWindowByIndex(u8 a); -static void PrintPageSpecificText(u8 a); -static void CreateTextPrinterTask(u8 a); +static void PutPageWindowTilemaps(u8); +static void ClearPageWindowTilemaps(u8); +static void RemoveWindowByIndex(u8); +static void PrintPageSpecificText(u8); +static void CreateTextPrinterTask(u8); static void PrintInfoPageText(void); -static void Task_PrintInfoPage(u8 taskId); +static void Task_PrintInfoPage(u8); static void PrintMonOTName(void); static void PrintMonOTID(void); static void PrintMonAbilityName(void); @@ -258,7 +263,7 @@ static void PrintMonAbilityDescription(void); static void BufferMonTrainerMemo(void); static void PrintMonTrainerMemo(void); static void BufferNatureString(void); -static void GetMetLevelString(u8 *a); +static void GetMetLevelString(u8 *); static bool8 DoesMonOTMatchOwner(void); static bool8 DidMonComeFromGBAGames(void); static bool8 IsInGamePartnerMon(void); @@ -266,7 +271,7 @@ static void PrintEggOTName(void); static void PrintEggOTID(void); static void PrintEggState(void); static void PrintEggMemo(void); -static void Task_PrintSkillsPage(u8 taskId); +static void Task_PrintSkillsPage(u8); static void PrintHeldItemName(void); static void PrintSkillsPageText(void); static void PrintRibbonCount(void); @@ -276,18 +281,18 @@ static void BufferRightColumnStats(void); static void PrintRightColumnStats(void); static void PrintExpPointsNextLevel(void); static void PrintBattleMoves(void); -static void Task_PrintBattleMoves(u8 taskId); -static void PrintMoveNameAndPP(u8 a); +static void Task_PrintBattleMoves(u8); +static void PrintMoveNameAndPP(u8); static void PrintContestMoves(void); -static void Task_PrintContestMoves(u8 taskId); -static void PrintContestMoveDescription(u8 a); -static void PrintMoveDetails(u16 a); +static void Task_PrintContestMoves(u8); +static void PrintContestMoveDescription(u8); +static void PrintMoveDetails(u16); static void PrintNewMoveDetailsOrCancelText(void); static void AddAndFillMoveNamesWindow(void); -static void SwapMovesNamesPP(u8 moveIndex1, u8 moveIndex2); +static void SwapMovesNamesPP(u8, u8); static void PrintHMMovesCantBeForgotten(void); static void ResetSpriteIds(void); -static void SetSpriteInvisibility(u8 spriteArrayId, bool8 invisible); +static void SetSpriteInvisibility(u8, bool8); static void HidePageSpecificSprites(void); static void SetTypeIcons(void); static void CreateMoveTypeIcons(void); @@ -295,20 +300,20 @@ static void SetMonTypeIcons(void); static void SetMoveTypeIcons(void); static void SetContestMoveTypeIcons(void); static void SetNewMoveTypeIcon(void); -static void SwapMovesTypeSprites(u8 moveIndex1, u8 moveIndex2); -static u8 LoadMonGfxAndSprite(struct Pokemon *a, s16 *b); -static u8 CreateMonSprite(struct Pokemon *unused); +static void SwapMovesTypeSprites(u8, u8); +static u8 LoadMonGfxAndSprite(struct Pokemon *, s16 *); +static u8 CreateMonSprite(struct Pokemon *); static void SpriteCB_Pokemon(struct Sprite *); static void StopPokemonAnimations(void); -static void CreateMonMarkingsSprite(struct Pokemon *mon); -static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *mon); -static void CreateCaughtBallSprite(struct Pokemon *mon); +static void CreateMonMarkingsSprite(struct Pokemon *); +static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *); +static void CreateCaughtBallSprite(struct Pokemon *); static void CreateSetStatusSprite(void); -static void CreateMoveSelectorSprites(u8 idArrayStart); -static void SpriteCb_MoveSelector(struct Sprite *sprite); -static void DestroyMoveSelectorSprites(u8 firstArrayId); -static void SetMainMoveSelectorColor(u8 whichColor); -static void KeepMoveSelectorVisible(u8 firstSpriteId); +static void CreateMoveSelectorSprites(u8); +static void SpriteCB_MoveSelector(struct Sprite *); +static void DestroyMoveSelectorSprites(u8); +static void SetMainMoveSelectorColor(u8); +static void KeepMoveSelectorVisible(u8); static void SummaryScreen_DestroyAnimDelayTask(void); // const rom data @@ -365,7 +370,7 @@ struct TilemapCtrl u8 field_9; }; -static const u16 sStatusTilemap[] = INCBIN_U16("graphics/interface/status_tilemap.bin"); +static const u16 sStatusTilemap[] = INCBIN_U16("graphics/summary_screen/status_tilemap.bin"); static const struct TilemapCtrl sStatusTilemapCtrl1 = { sStatusTilemap, 1, 10, 2, 0, 18 @@ -376,11 +381,11 @@ static const struct TilemapCtrl sStatusTilemapCtrl2 = }; static const struct TilemapCtrl sBattleMoveTilemapCtrl = { - gSummaryScreenPowAcc_Tilemap, 0, 10, 7, 0, 45 + gSummaryScreen_MoveEffect_Battle_Tilemap, 0, 10, 7, 0, 45 }; static const struct TilemapCtrl sContestMoveTilemapCtrl = { - gSummaryScreenAppealJam_Tilemap, 0, 10, 7, 0, 45 + gSummaryScreen_MoveEffect_Contest_Tilemap, 0, 10, 7, 0, 45 }; static const s8 sMultiBattleOrder[] = {0, 2, 3, 1, 4, 5}; static const struct WindowTemplate sSummaryTemplate[] = @@ -701,8 +706,8 @@ static const u8 sTextColors[][3] = {0, 7, 8} }; -static const u8 sSummaryAButtonBitmap[] = INCBIN_U8("graphics/interface/summary_a_button.4bpp"); -static const u8 sSummaryBButtonBitmap[] = INCBIN_U8("graphics/interface/summary_b_button.4bpp"); +static const u8 sAButton_Gfx[] = INCBIN_U8("graphics/summary_screen/a_button.4bpp"); +static const u8 sBButton_Gfx[] = INCBIN_U8("graphics/summary_screen/b_button.4bpp"); static void (*const sTextPrinterFunctions[])(void) = { @@ -730,13 +735,73 @@ static const u8 sMovesPPLayout[] = _("{PP}{DYNAMIC 0}/{DYNAMIC 1}"); #define TAG_MON_STATUS 30001 #define TAG_MOVE_TYPES 30002 #define TAG_MON_MARKINGS 30003 +#define TAG_SPLIT_ICONS 30004 + +static const u16 sSplitIcons_Pal[] = INCBIN_U16("graphics/interface/split_icons.gbapal"); +static const u32 sSplitIcons_Gfx[] = INCBIN_U32("graphics/interface/split_icons.4bpp.lz"); + +static const struct OamData sOamData_SplitIcons = +{ + .size = SPRITE_SIZE(16x16), + .shape = SPRITE_SHAPE(16x16), + .priority = 0, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_SplitIcons = +{ + .data = sSplitIcons_Gfx, + .size = 16*16*3/2, + .tag = TAG_SPLIT_ICONS, +}; + +static const struct SpritePalette sSpritePal_SplitIcons = +{ + .data = sSplitIcons_Pal, + .tag = TAG_SPLIT_ICONS +}; + +static const union AnimCmd sSpriteAnim_SplitIcon0[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_SplitIcon1[] = +{ + ANIMCMD_FRAME(4, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_SplitIcon2[] = +{ + ANIMCMD_FRAME(8, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_SplitIcons[] = +{ + sSpriteAnim_SplitIcon0, + sSpriteAnim_SplitIcon1, + sSpriteAnim_SplitIcon2, +}; + +static const struct SpriteTemplate sSpriteTemplate_SplitIcons = +{ + .tileTag = TAG_SPLIT_ICONS, + .paletteTag = TAG_SPLIT_ICONS, + .oam = &sOamData_SplitIcons, + .anims = sSpriteAnimTable_SplitIcons, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; static const struct OamData sOamData_MoveTypes = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), .x = 0, @@ -918,7 +983,7 @@ static const struct OamData sOamData_MoveSelector = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -1008,7 +1073,7 @@ static const struct OamData sOamData_StatusCondition = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), .x = 0, @@ -1077,9 +1142,26 @@ static const struct SpriteTemplate sSpriteTemplate_StatusCondition = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const u16 sSummaryMarkingsPalette[] = INCBIN_U16("graphics/interface/summary_markings.gbapal"); +static const u16 sMarkings_Pal[] = INCBIN_U16("graphics/summary_screen/markings.gbapal"); // code +static u8 ShowSplitIcon(u32 split) +{ + if (sMonSummaryScreen->splitIconSpriteId == 0xFF) + sMonSummaryScreen->splitIconSpriteId = CreateSprite(&sSpriteTemplate_SplitIcons, 48, 129, 0); + + gSprites[sMonSummaryScreen->splitIconSpriteId].invisible = FALSE; + StartSpriteAnim(&gSprites[sMonSummaryScreen->splitIconSpriteId], split); + return sMonSummaryScreen->splitIconSpriteId; +} + +static void DestroySplitIcon(void) +{ + if (sMonSummaryScreen->splitIconSpriteId != 0xFF) + DestroySprite(&gSprites[sMonSummaryScreen->splitIconSpriteId]); + sMonSummaryScreen->splitIconSpriteId = 0xFF; +} + void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)) { sMonSummaryScreen = AllocZeroed(sizeof(*sMonSummaryScreen)); @@ -1114,10 +1196,11 @@ void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, } sMonSummaryScreen->currPageIndex = sMonSummaryScreen->minPageIndex; + sMonSummaryScreen->splitIconSpriteId = 0xFF; SummaryScreen_SetAnimDelayTaskId(TASK_NONE); if (gMonSpritesGfxPtr == NULL) - sub_806F2AC(0, 0); + CreateMonSpritesGfxManager(MON_SPR_GFX_MANAGER_A, MON_SPR_GFX_MODE_NORMAL); SetMainCallback2(CB2_InitSummaryScreen); } @@ -1152,7 +1235,7 @@ static void VBlank(void) static void CB2_InitSummaryScreen(void) { - while (MenuHelpers_CallLinkSomething() != TRUE && LoadGraphics() != TRUE && MenuHelpers_LinkSomething() != TRUE); + while (MenuHelpers_ShouldWaitForLinkRecv() != TRUE && LoadGraphics() != TRUE && MenuHelpers_IsLinkActive() != TRUE); } static bool8 LoadGraphics(void) @@ -1307,35 +1390,35 @@ static bool8 DecompressGraphics(void) { case 0: ResetTempTileDataBuffers(); - DecompressAndCopyTileDataToVram(1, &gStatusScreenBitmap, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, &gSummaryScreen_Gfx, 0, 0, 0); sMonSummaryScreen->switchCounter++; break; case 1: if (FreeTempTileDataBuffersIfPossible() != 1) { - LZDecompressWram(gPageInfoTilemap, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0]); + LZDecompressWram(gSummaryPage_Info_Tilemap, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0]); sMonSummaryScreen->switchCounter++; } break; case 2: - LZDecompressWram(gUnknown_08D98CC8, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][1]); + LZDecompressWram(gSummaryPage_InfoEgg_Tilemap, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][1]); sMonSummaryScreen->switchCounter++; break; case 3: - LZDecompressWram(gPageSkillsTilemap, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_SKILLS][1]); + LZDecompressWram(gSummaryPage_Skills_Tilemap, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_SKILLS][1]); sMonSummaryScreen->switchCounter++; break; case 4: - LZDecompressWram(gPageBattleMovesTilemap, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][1]); + LZDecompressWram(gSummaryPage_BattleMoves_Tilemap, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][1]); sMonSummaryScreen->switchCounter++; break; case 5: - LZDecompressWram(gPageContestMovesTilemap, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][1]); + LZDecompressWram(gSummaryPage_ContestMoves_Tilemap, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][1]); sMonSummaryScreen->switchCounter++; break; case 6: - LoadCompressedPalette(gStatusScreenPalette, 0, 0x100); - LoadPalette(&gUnknown_08D85620, 0x81, 0x1E); + LoadCompressedPalette(gSummaryScreen_Pal, 0, 0x100); + LoadPalette(&gPPTextPalette, 0x81, 0x1E); sMonSummaryScreen->switchCounter++; break; case 7: @@ -1360,6 +1443,8 @@ static bool8 DecompressGraphics(void) break; case 12: LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60); + LoadCompressedSpriteSheet(&sSpriteSheet_SplitIcons); + LoadSpritePalette(&sSpritePal_SplitIcons); sMonSummaryScreen->switchCounter = 0; return TRUE; } @@ -1468,7 +1553,7 @@ static void SetDefaultTilemaps(void) TilemapFiveMovesDisplay(sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], 1, FALSE); SetBgTilemapBuffer(1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0]); SetBgTilemapBuffer(2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0]); - ChangeBgX(2, 0x10000, 1); + ChangeBgX(2, 0x10000, BG_COORD_ADD); ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES); ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); } @@ -1496,7 +1581,7 @@ static void BeginCloseSummaryScreen(u8 taskId) static void CloseSummaryScreen(u8 taskId) { - if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE && !gPaletteFade.active) { SetMainCallback2(sMonSummaryScreen->callback); gLastViewedMonIndex = sMonSummaryScreen->curMonIndex; @@ -1504,9 +1589,9 @@ static void CloseSummaryScreen(u8 taskId) ResetSpriteData(); FreeAllSpritePalettes(); StopCryAndClearCrySongs(); - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); if (gMonSpritesGfxPtr == NULL) - sub_806F47C(0); + DestroyMonSpritesGfxManager(MON_SPR_GFX_MANAGER_A); FreeSummaryScreen(); DestroyTask(taskId); } @@ -1514,7 +1599,7 @@ static void CloseSummaryScreen(u8 taskId) static void Task_HandleInput(u8 taskId) { - if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE && !gPaletteFade.active) { if (JOY_NEW(DPAD_UP)) { @@ -1555,6 +1640,15 @@ static void Task_HandleInput(u8 taskId) PlaySE(SE_SELECT); BeginCloseSummaryScreen(taskId); } + #if P_ENABLE_DEBUG == TRUE + else if (JOY_NEW(SELECT_BUTTON) && !gMain.inBattle) + { + sMonSummaryScreen->callback = CB2_Debug_Pokemon; + StopPokemonAnimations(); + PlaySE(SE_SELECT); + CloseSummaryScreen(taskId); + } + #endif } } @@ -1666,7 +1760,7 @@ static void Task_ChangeSummaryMon(u8 taskId) gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_MON]].data[2] = 0; break; default: - if (MenuHelpers_CallLinkSomething() == 0 && FuncIsActiveTask(Task_ShowStatusWindow) == 0) + if (!MenuHelpers_ShouldWaitForLinkRecv() && !FuncIsActiveTask(Task_ShowStatusWindow)) { data[0] = 0; gTasks[taskId].func = Task_HandleInput; @@ -1731,7 +1825,7 @@ static s8 AdvanceMultiBattleMonIndex(s8 delta) } } -static bool8 IsValidToViewInMulti(struct Pokemon* mon) +static bool8 IsValidToViewInMulti(struct Pokemon *mon) { if (GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NONE) return FALSE; @@ -1784,12 +1878,12 @@ static void PssScrollRight(u8 taskId) // Scroll right SetBgAttribute(1, BG_ATTR_PRIORITY, 2); ScheduleBgCopyTilemapToVram(2); } - ChangeBgX(data[1], 0, 0); + ChangeBgX(data[1], 0, BG_COORD_SET); SetBgTilemapBuffer(data[1], sMonSummaryScreen->bgTilemapBuffers[sMonSummaryScreen->currPageIndex][0]); ShowBg(1); ShowBg(2); } - ChangeBgX(data[1], 0x2000, 1); + ChangeBgX(data[1], 0x2000, BG_COORD_ADD); data[0] += 32; if (data[0] > 0xFF) gTasks[taskId].func = PssScrollRightEnd; @@ -1817,9 +1911,9 @@ static void PssScrollLeft(u8 taskId) // Scroll left data[1] = 2; else data[1] = 1; - ChangeBgX(data[1], 0x10000, 0); + ChangeBgX(data[1], 0x10000, BG_COORD_SET); } - ChangeBgX(data[1], 0x2000, 2); + ChangeBgX(data[1], 0x2000, BG_COORD_SUB); data[0] += 32; if (data[0] > 0xFF) gTasks[taskId].func = PssScrollLeftEnd; @@ -1843,7 +1937,7 @@ static void PssScrollLeftEnd(u8 taskId) // display left if (sMonSummaryScreen->currPageIndex > 1) { SetBgTilemapBuffer(data[1], sMonSummaryScreen->bgTilemapBuffers[sMonSummaryScreen->currPageIndex - 1][0]); - ChangeBgX(data[1], 0x10000, 0); + ChangeBgX(data[1], 0x10000, BG_COORD_SET); } ShowBg(1); ShowBg(2); @@ -1895,7 +1989,7 @@ static void Task_HandleInput_MoveSelect(u8 taskId) { s16 *data = gTasks[taskId].data; - if (MenuHelpers_CallLinkSomething() != 1) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { if (JOY_NEW(DPAD_UP)) { @@ -1988,6 +2082,7 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr) { ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); + DestroySplitIcon(); ScheduleBgCopyTilemapToVram(0); HandlePowerAccTilemap(0, 3); HandleAppealJamTilemap(0, 3, 0); @@ -2014,6 +2109,7 @@ static void CloseMoveSelectMode(u8 taskId) { ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); + DestroySplitIcon(); HandlePowerAccTilemap(0, 3); HandleAppealJamTilemap(0, 3, 0); } @@ -2033,9 +2129,9 @@ static void SwitchToMovePositionSwitchMode(u8 taskId) static void Task_HandleInput_MovePositionSwitch(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; - if (MenuHelpers_CallLinkSomething() != TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { if (JOY_NEW(DPAD_UP)) { @@ -2174,9 +2270,9 @@ static void Task_SetHandleReplaceMoveInput(u8 taskId) static void Task_HandleReplaceMoveInput(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; - if (MenuHelpers_CallLinkSomething() != TRUE) + if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE) { if (gPaletteFade.active != TRUE) { @@ -2240,6 +2336,7 @@ static void ShowCantForgetHMsWindow(u8 taskId) { ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); + gSprites[sMonSummaryScreen->splitIconSpriteId].invisible = TRUE; ScheduleBgCopyTilemapToVram(0); HandlePowerAccTilemap(0, 3); HandleAppealJamTilemap(0, 3, 0); @@ -2250,7 +2347,7 @@ static void ShowCantForgetHMsWindow(u8 taskId) // This redraws the power/accuracy window when the player scrolls out of the "HM Moves can't be forgotten" message static void Task_HandleInputCantForgetHMsMoves(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; u16 move; if (FuncIsActiveTask(Task_ShowPowerAccWindow) != 1) { @@ -2320,69 +2417,69 @@ u8 GetMoveSlotToReplace(void) static void DrawPagination(void) // Updates the pagination dots at the top of the summary screen { - u16 *alloced = Alloc(32); + u16 *tilemap = Alloc(8 * PSS_PAGE_COUNT); u8 i; - for (i = 0; i < 4; i++) + for (i = 0; i < PSS_PAGE_COUNT; i++) { u8 j = i * 2; if (i < sMonSummaryScreen->minPageIndex) { - alloced[j + 0] = 0x40; - alloced[j + 1] = 0x40; - alloced[j + 8] = 0x50; - alloced[j + 9] = 0x50; + tilemap[j + 0] = 0x40; + tilemap[j + 1] = 0x40; + tilemap[j + 2 * PSS_PAGE_COUNT] = 0x50; + tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x50; } else if (i > sMonSummaryScreen->maxPageIndex) { - alloced[j + 0] = 0x4A; - alloced[j + 1] = 0x4A; - alloced[j + 8] = 0x5A; - alloced[j + 9] = 0x5A; + tilemap[j + 0] = 0x4A; + tilemap[j + 1] = 0x4A; + tilemap[j + 2 * PSS_PAGE_COUNT] = 0x5A; + tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x5A; } else if (i < sMonSummaryScreen->currPageIndex) { - alloced[j + 0] = 0x46; - alloced[j + 1] = 0x47; - alloced[j + 8] = 0x56; - alloced[j + 9] = 0x57; + tilemap[j + 0] = 0x46; + tilemap[j + 1] = 0x47; + tilemap[j + 2 * PSS_PAGE_COUNT] = 0x56; + tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x57; } else if (i == sMonSummaryScreen->currPageIndex) { if (i != sMonSummaryScreen->maxPageIndex) { - alloced[j + 0] = 0x41; - alloced[j + 1] = 0x42; - alloced[j + 8] = 0x51; - alloced[j + 9] = 0x52; + tilemap[j + 0] = 0x41; + tilemap[j + 1] = 0x42; + tilemap[j + 2 * PSS_PAGE_COUNT] = 0x51; + tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x52; } else { - alloced[j + 0] = 0x4B; - alloced[j + 1] = 0x4C; - alloced[j + 8] = 0x5B; - alloced[j + 9] = 0x5C; + tilemap[j + 0] = 0x4B; + tilemap[j + 1] = 0x4C; + tilemap[j + 2 * PSS_PAGE_COUNT] = 0x5B; + tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x5C; } } else if (i != sMonSummaryScreen->maxPageIndex) { - alloced[j + 0] = 0x43; - alloced[j + 1] = 0x44; - alloced[j + 8] = 0x53; - alloced[j + 9] = 0x54; + tilemap[j + 0] = 0x43; + tilemap[j + 1] = 0x44; + tilemap[j + 2 * PSS_PAGE_COUNT] = 0x53; + tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x54; } else { - alloced[j + 0] = 0x48; - alloced[j + 1] = 0x49; - alloced[j + 8] = 0x58; - alloced[j + 9] = 0x59; + tilemap[j + 0] = 0x48; + tilemap[j + 1] = 0x49; + tilemap[j + 2 * PSS_PAGE_COUNT] = 0x58; + tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x59; } } - CopyToBgTilemapBufferRect_ChangePalette(3, alloced, 11, 0, 8, 2, 16); + CopyToBgTilemapBufferRect_ChangePalette(3, tilemap, 11, 0, PSS_PAGE_COUNT * 2, 2, 16); ScheduleBgCopyTilemapToVram(3); - Free(alloced); + Free(tilemap); } static void ChangeTilemap(const struct TilemapCtrl *unkStruct, u16 *dest, u8 c, bool8 d) @@ -2445,7 +2542,7 @@ static void Task_ShowPowerAccWindow(u8 taskId) { if (data[0] < 0) { - if (sMonSummaryScreen->currPageIndex == 2) + if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES) PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); } else @@ -2498,7 +2595,7 @@ static void Task_ShowAppealJamWindow(u8 taskId) { if (data[0] < 0) { - if (sMonSummaryScreen->currPageIndex == 3 && FuncIsActiveTask(PssScrollRight) == 0) + if (sMonSummaryScreen->currPageIndex == PSS_PAGE_CONTEST_MOVES && FuncIsActiveTask(PssScrollRight) == 0) PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); DrawContestMoveHearts(data[2]); } @@ -2557,6 +2654,7 @@ static void Task_ShowStatusWindow(u8 taskId) } } +// Toggles the "Cancel" window that appears when selecting a move static void TilemapFiveMovesDisplay(u16 *dst, u16 palette, bool8 remove) { u16 i, id; @@ -2567,18 +2665,18 @@ static void TilemapFiveMovesDisplay(u16 *dst, u16 palette, bool8 remove) { for (i = 0; i < 20; i++) { - dst[id + i] = gSummaryScreenWindow_Tilemap[i] + palette; - dst[id + i + 0x20] = gSummaryScreenWindow_Tilemap[i] + palette; - dst[id + i + 0x40] = gSummaryScreenWindow_Tilemap[i + 20] + palette; + dst[id + i] = gSummaryScreen_MoveEffect_Cancel_Tilemap[i] + palette; + dst[id + i + 0x20] = gSummaryScreen_MoveEffect_Cancel_Tilemap[i] + palette; + dst[id + i + 0x40] = gSummaryScreen_MoveEffect_Cancel_Tilemap[i + 20] + palette; } } else // Remove { for (i = 0; i < 20; i++) { - dst[id + i] = gSummaryScreenWindow_Tilemap[i + 20] + palette; - dst[id + i + 0x20] = gSummaryScreenWindow_Tilemap[i + 40] + palette; - dst[id + i + 0x40] = gSummaryScreenWindow_Tilemap[i + 40] + palette; + dst[id + i] = gSummaryScreen_MoveEffect_Cancel_Tilemap[i + 20] + palette; + dst[id + i + 0x20] = gSummaryScreen_MoveEffect_Cancel_Tilemap[i + 40] + palette; + dst[id + i + 0x40] = gSummaryScreen_MoveEffect_Cancel_Tilemap[i + 40] + palette; } } } @@ -2687,9 +2785,9 @@ static void DrawContestMoveHearts(u16 move) static void LimitEggSummaryPageDisplay(void) // If the pokemon is an egg, limit the number of pages displayed to 1 { if (sMonSummaryScreen->summary.isEgg) - ChangeBgX(3, 0x10000, 0); + ChangeBgX(3, 0x10000, BG_COORD_SET); else - ChangeBgX(3, 0, 0); + ChangeBgX(3, 0, BG_COORD_SET); } static void ResetWindows(void) @@ -2706,7 +2804,7 @@ static void ResetWindows(void) static void PrintTextOnWindow(u8 windowId, const u8 *string, u8 x, u8 y, u8 lineSpacing, u8 colorId) { - AddTextPrinterParameterized4(windowId, 1, x, y, 0, lineSpacing, sTextColors[colorId], 0, string); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 0, lineSpacing, sTextColors[colorId], 0, string); } static void PrintMonInfo(void) @@ -2794,8 +2892,8 @@ static void PrintGenderSymbol(struct Pokemon *mon, u16 species) static void PrintAOrBButtonIcon(u8 windowId, bool8 bButton, u32 x) { - // sSummaryBButtonBitmap - 0x80 = sSummaryAButtonBitmap - BlitBitmapToWindow(windowId, (bButton) ? sSummaryBButtonBitmap : sSummaryBButtonBitmap - 0x80, x, 0, 16, 16); + // sBButton_Gfx - sizeof(sBButton_Gfx) = sAButton_Gfx + BlitBitmapToWindow(windowId, (bButton) ? sBButton_Gfx : sBButton_Gfx - sizeof(sBButton_Gfx), x, 0, 16, 16); } static void PrintPageNamesAndStats(void) @@ -2809,21 +2907,21 @@ static void PrintPageNamesAndStats(void) PrintTextOnWindow(PSS_LABEL_WINDOW_BATTLE_MOVES_TITLE, gText_BattleMoves, 2, 1, 0, 1); PrintTextOnWindow(PSS_LABEL_WINDOW_CONTEST_MOVES_TITLE, gText_ContestMoves, 2, 1, 0, 1); - stringXPos = GetStringRightAlignXOffset(1, gText_Cancel2, 62); + stringXPos = GetStringRightAlignXOffset(FONT_NORMAL, gText_Cancel2, 62); iconXPos = stringXPos - 16; if (iconXPos < 0) iconXPos = 0; PrintAOrBButtonIcon(PSS_LABEL_WINDOW_PROMPT_CANCEL, FALSE, iconXPos); PrintTextOnWindow(PSS_LABEL_WINDOW_PROMPT_CANCEL, gText_Cancel2, stringXPos, 1, 0, 0); - stringXPos = GetStringRightAlignXOffset(1, gText_Info, 62); + stringXPos = GetStringRightAlignXOffset(FONT_NORMAL, gText_Info, 62); iconXPos = stringXPos - 16; if (iconXPos < 0) iconXPos = 0; PrintAOrBButtonIcon(PSS_LABEL_WINDOW_PROMPT_INFO, FALSE, iconXPos); PrintTextOnWindow(PSS_LABEL_WINDOW_PROMPT_INFO, gText_Info, stringXPos, 1, 0, 0); - stringXPos = GetStringRightAlignXOffset(1, gText_Switch, 62); + stringXPos = GetStringRightAlignXOffset(FONT_NORMAL, gText_Switch, 62); iconXPos = stringXPos - 16; if (iconXPos < 0) iconXPos = 0; @@ -2832,17 +2930,17 @@ static void PrintPageNamesAndStats(void) PrintTextOnWindow(PSS_LABEL_WINDOW_POKEMON_INFO_RENTAL, gText_RentalPkmn, 0, 1, 0, 1); PrintTextOnWindow(PSS_LABEL_WINDOW_POKEMON_INFO_TYPE, gText_TypeSlash, 0, 1, 0, 0); - statsXPos = 6 + GetStringCenterAlignXOffset(1, gText_HP4, 42); + statsXPos = 6 + GetStringCenterAlignXOffset(FONT_NORMAL, gText_HP4, 42); PrintTextOnWindow(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATS_LEFT, gText_HP4, statsXPos, 1, 0, 1); - statsXPos = 6 + GetStringCenterAlignXOffset(1, gText_Attack3, 42); + statsXPos = 6 + GetStringCenterAlignXOffset(FONT_NORMAL, gText_Attack3, 42); PrintTextOnWindow(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATS_LEFT, gText_Attack3, statsXPos, 17, 0, 1); - statsXPos = 6 + GetStringCenterAlignXOffset(1, gText_Defense3, 42); + statsXPos = 6 + GetStringCenterAlignXOffset(FONT_NORMAL, gText_Defense3, 42); PrintTextOnWindow(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATS_LEFT, gText_Defense3, statsXPos, 33, 0, 1); - statsXPos = 2 + GetStringCenterAlignXOffset(1, gText_SpAtk4, 36); + statsXPos = 2 + GetStringCenterAlignXOffset(FONT_NORMAL, gText_SpAtk4, 36); PrintTextOnWindow(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATS_RIGHT, gText_SpAtk4, statsXPos, 1, 0, 1); - statsXPos = 2 + GetStringCenterAlignXOffset(1, gText_SpDef4, 36); + statsXPos = 2 + GetStringCenterAlignXOffset(FONT_NORMAL, gText_SpDef4, 36); PrintTextOnWindow(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATS_RIGHT, gText_SpDef4, statsXPos, 17, 0, 1); - statsXPos = 2 + GetStringCenterAlignXOffset(1, gText_Speed2, 36); + statsXPos = 2 + GetStringCenterAlignXOffset(FONT_NORMAL, gText_Speed2, 36); PrintTextOnWindow(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATS_RIGHT, gText_Speed2, statsXPos, 33, 0, 1); PrintTextOnWindow(PSS_LABEL_WINDOW_POKEMON_SKILLS_EXP, gText_ExpPoints, 6, 1, 0, 1); PrintTextOnWindow(PSS_LABEL_WINDOW_POKEMON_SKILLS_EXP, gText_NextLv, 6, 17, 0, 1); @@ -2930,7 +3028,10 @@ static void ClearPageWindowTilemaps(u8 page) if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE) { if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES) + { ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); + gSprites[sMonSummaryScreen->splitIconSpriteId].invisible = TRUE; + } } else { @@ -3051,7 +3152,7 @@ static void PrintMonOTName(void) { windowId = AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ORIGINAL_TRAINER); PrintTextOnWindow(windowId, gText_OTSlash, 0, 1, 0, 1); - x = GetStringWidth(1, gText_OTSlash, 0); + x = GetStringWidth(FONT_NORMAL, gText_OTSlash, 0); if (sMonSummaryScreen->summary.OTGender == 0) PrintTextOnWindow(windowId, sMonSummaryScreen->summary.OTName, x, 1, 0, 5); else @@ -3065,20 +3166,20 @@ static void PrintMonOTID(void) if (InBattleFactory() != TRUE && InSlateportBattleTent() != TRUE) { ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_IDNumber2), (u16)sMonSummaryScreen->summary.OTID, STR_CONV_MODE_LEADING_ZEROS, 5); - xPos = GetStringRightAlignXOffset(1, gStringVar1, 56); + xPos = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar1, 56); PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ID), gStringVar1, xPos, 1, 0, 1); } } static void PrintMonAbilityName(void) { - u8 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum); + u16 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum); PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilityNames[ability], 0, 1, 0, 1); } static void PrintMonAbilityDescription(void) { - u8 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum); + u16 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum); PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilityDescriptionPointers[ability], 0, 17, 0, 0); } @@ -3210,7 +3311,7 @@ static bool8 IsInGamePartnerMon(void) static void PrintEggOTName(void) { u32 windowId = AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ORIGINAL_TRAINER); - u32 width = GetStringWidth(1, gText_OTSlash, 0); + u32 width = GetStringWidth(FONT_NORMAL, gText_OTSlash, 0); PrintTextOnWindow(windowId, gText_OTSlash, 0, 1, 0, 1); PrintTextOnWindow(windowId, gText_FiveMarks, width, 1, 0, 1); } @@ -3220,7 +3321,7 @@ static void PrintEggOTID(void) int x; StringCopy(gStringVar1, gText_IDNumber2); StringAppend(gStringVar1, gText_FiveMarks); - x = GetStringRightAlignXOffset(1, gStringVar1, 56); + x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar1, 56); PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ID), gStringVar1, x, 1, 0, 1); } @@ -3317,11 +3418,11 @@ static void PrintHeldItemName(void) const u8 *text; int x; - if (sMonSummaryScreen->summary.item == ITEM_ENIGMA_BERRY + if (sMonSummaryScreen->summary.item == ITEM_ENIGMA_BERRY_E_READER && IsMultiBattle() == TRUE && (sMonSummaryScreen->curMonIndex == 1 || sMonSummaryScreen->curMonIndex == 4 || sMonSummaryScreen->curMonIndex == 5)) { - text = ItemId_GetName(ITEM_ENIGMA_BERRY); + text = ItemId_GetName(ITEM_ENIGMA_BERRY_E_READER); } else if (sMonSummaryScreen->summary.item == ITEM_NONE) { @@ -3333,7 +3434,7 @@ static void PrintHeldItemName(void) text = gStringVar1; } - x = GetStringCenterAlignXOffset(1, text, 72) + 6; + x = GetStringCenterAlignXOffset(FONT_NORMAL, text, 72) + 6; PrintTextOnWindow(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_HELD_ITEM), text, x, 1, 0, 0); } @@ -3353,7 +3454,7 @@ static void PrintRibbonCount(void) text = gStringVar4; } - x = GetStringCenterAlignXOffset(1, text, 70) + 6; + x = GetStringCenterAlignXOffset(FONT_NORMAL, text, 70) + 6; PrintTextOnWindow(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_RIBBON_COUNT), text, x, 1, 0, 0); } @@ -3413,7 +3514,7 @@ static void PrintExpPointsNextLevel(void) u32 expToNextLevel; ConvertIntToDecimalStringN(gStringVar1, sum->exp, STR_CONV_MODE_RIGHT_ALIGN, 7); - x = GetStringRightAlignXOffset(1, gStringVar1, 42) + 2; + x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar1, 42) + 2; PrintTextOnWindow(windowId, gStringVar1, x, 1, 0, 0); if (sum->level < MAX_LEVEL) @@ -3422,7 +3523,7 @@ static void PrintExpPointsNextLevel(void) expToNextLevel = 0; ConvertIntToDecimalStringN(gStringVar1, expToNextLevel, STR_CONV_MODE_RIGHT_ALIGN, 6); - x = GetStringRightAlignXOffset(1, gStringVar1, 42) + 2; + x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar1, 42) + 2; PrintTextOnWindow(windowId, gStringVar1, x, 17, 0, 0); } @@ -3515,14 +3616,14 @@ static void PrintMoveNameAndPP(u8 moveIndex) DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, sMovesPPLayout); text = gStringVar4; ppState = GetCurrentPpToMaxPpState(summary->pp[moveIndex], pp) + 9; - x = GetStringRightAlignXOffset(1, text, 44); + x = GetStringRightAlignXOffset(FONT_NORMAL, text, 44); } else { PrintTextOnWindow(moveNameWindowId, gText_OneDash, 0, moveIndex * 16 + 1, 0, 1); text = gText_TwoDashes; ppState = 12; - x = GetStringCenterAlignXOffset(1, text, 44); + x = GetStringCenterAlignXOffset(FONT_NORMAL, text, 44); } PrintTextOnWindow(ppValueWindowId, text, x, moveIndex * 16 + 1, 0, ppState); @@ -3630,13 +3731,21 @@ static void PrintContestMoveDescription(u8 moveSlot) static void PrintMoveDetails(u16 move) { u8 windowId = AddWindowFromTemplateList(sPageMovesTemplate, PSS_DATA_WINDOW_MOVE_DESCRIPTION); + u8 moveEffect; FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); if (move != MOVE_NONE) { if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES) { + moveEffect = gBattleMoves[move].effect; + if (B_SHOW_SPLIT_ICON == TRUE) + ShowSplitIcon(GetBattleMoveSplit(move)); PrintMovePowerAndAccuracy(move); - PrintTextOnWindow(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0); + + if (moveEffect != EFFECT_PLACEHOLDER) + PrintTextOnWindow(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0); + else + PrintTextOnWindow(windowId, gNotDoneYetDescription, 6, 1, 0, 0); } else { @@ -3675,7 +3784,7 @@ static void PrintNewMoveDetailsOrCancelText(void) DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, sMovesPPLayout); - PrintTextOnWindow(windowId2, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 44), 65, 0, 12); + PrintTextOnWindow(windowId2, gStringVar4, GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 44), 65, 0, 12); } } @@ -3683,7 +3792,7 @@ static void AddAndFillMoveNamesWindow(void) { u8 windowId = AddWindowFromTemplateList(sPageMovesTemplate, PSS_DATA_WINDOW_MOVE_NAMES); FillWindowPixelRect(windowId, PIXEL_FILL(0), 0, 66, 72, 16); - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } static void SwapMovesNamesPP(u8 moveIndex1, u8 moveIndex2) @@ -3878,17 +3987,26 @@ static u8 LoadMonGfxAndSprite(struct Pokemon *mon, s16 *state) case 0: if (gMain.inBattle) { - HandleLoadSpecialPokePic(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], + summary->species2, + summary->pid); } else { if (gMonSpritesGfxPtr != NULL) { - HandleLoadSpecialPokePic(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], + summary->species2, + summary->pid); } else { - HandleLoadSpecialPokePic(&gMonFrontPicTable[summary->species2], sub_806F4F8(0, 1), summary->species2, summary->pid); + HandleLoadSpecialPokePic(TRUE, + MonSpritesGfxManager_GetSpritePtr(MON_SPR_GFX_MANAGER_A, B_POSITION_OPPONENT_LEFT), + summary->species2, + summary->pid); } } (*state)++; @@ -3896,7 +4014,7 @@ static u8 LoadMonGfxAndSprite(struct Pokemon *mon, s16 *state) case 1: pal = GetMonSpritePalStructFromOtIdPersonality(summary->species2, summary->OTID, summary->pid); LoadCompressedSpritePalette(pal); - SetMultiuseSpriteTemplateToPokemon(pal->tag, 1); + SetMultiuseSpriteTemplateToPokemon(pal->tag, B_POSITION_OPPONENT_LEFT); (*state)++; return 0xFF; } @@ -3908,9 +4026,9 @@ static void PlayMonCry(void) if (!summary->isEgg) { if (ShouldPlayNormalMonCry(&sMonSummaryScreen->currentMon) == TRUE) - PlayCry3(summary->species2, 0, 0); + PlayCry_ByMode(summary->species2, 0, CRY_MODE_NORMAL); else - PlayCry3(summary->species2, 0, 11); + PlayCry_ByMode(summary->species2, 0, CRY_MODE_WEAK); } } @@ -3990,7 +4108,7 @@ static void StopPokemonAnimations(void) // A subtle effect, this function stops static void CreateMonMarkingsSprite(struct Pokemon *mon) { - struct Sprite *sprite = CreateMonMarkingAllCombosSprite(TAG_MON_MARKINGS, TAG_MON_MARKINGS, sSummaryMarkingsPalette); + struct Sprite *sprite = CreateMonMarkingAllCombosSprite(TAG_MON_MARKINGS, TAG_MON_MARKINGS, sMarkings_Pal); sMonSummaryScreen->markingsSprite = sprite; if (sprite != NULL) @@ -4060,14 +4178,14 @@ static void CreateMoveSelectorSprites(u8 idArrayStart) else StartSpriteAnim(&gSprites[spriteIds[i]], 6); // middle - gSprites[spriteIds[i]].callback = SpriteCb_MoveSelector; + gSprites[spriteIds[i]].callback = SpriteCB_MoveSelector; gSprites[spriteIds[i]].data[0] = idArrayStart; gSprites[spriteIds[i]].data[1] = 0; } } } -static void SpriteCb_MoveSelector(struct Sprite *sprite) +static void SpriteCB_MoveSelector(struct Sprite *sprite) { if (sprite->animNum > 3 && sprite->animNum < 7) { diff --git a/src/pokenav.c b/src/pokenav.c index 881411b9ec..03f48ee366 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -37,22 +37,21 @@ struct PokenavCallbacks static u32 GetCurrentMenuCB(void); static u32 IsActiveMenuLoopTaskActive_(void); -static bool32 SetActivePokenavMenu(u32 menuId); +static bool32 SetActivePokenavMenu(u32); static bool32 AnyMonHasRibbon(void); -static void InitPokenavResources(struct PokenavResources *a0); +static void InitPokenavResources(struct PokenavResources *); static void InitKeys_(void); static void FreePokenavResources(void); static void VBlankCB_Pokenav(void); static void CB2_Pokenav(void); -static void Task_RunLoopedTask_LinkMode(u8 a0); -static void Task_RunLoopedTask(u8 taskId); -static void Task_Pokenav(u8 taskId); +static void Task_RunLoopedTask_LinkMode(u8); +static void Task_RunLoopedTask(u8); +static void Task_Pokenav(u8); static void CB2_InitPokenavForTutorial(void); -// TODO: Use MENU ids const struct PokenavCallbacks PokenavMenuCallbacks[15] = { - [POKENAV_MAIN_MENU - POKENAV_MENU_IDS_START] = + [POKENAV_MAIN_MENU - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_MainMenuCursorOnMap, .callback = GetMenuHandlerCallback, @@ -62,7 +61,7 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeMenuHandlerSubstruct1, .free2 = FreeMenuHandlerSubstruct2, }, - [POKENAV_MAIN_MENU_CURSOR_ON_MAP - POKENAV_MENU_IDS_START] = + [POKENAV_MAIN_MENU_CURSOR_ON_MAP - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_MainMenuCursorOnMap, .callback = GetMenuHandlerCallback, @@ -72,7 +71,7 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeMenuHandlerSubstruct1, .free2 = FreeMenuHandlerSubstruct2, }, - [POKENAV_CONDITION_MENU - POKENAV_MENU_IDS_START] = + [POKENAV_CONDITION_MENU - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_ConditionMenu, .callback = GetMenuHandlerCallback, @@ -82,7 +81,7 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeMenuHandlerSubstruct1, .free2 = FreeMenuHandlerSubstruct2, }, - [POKENAV_CONDITION_SEARCH_MENU - POKENAV_MENU_IDS_START] = + [POKENAV_CONDITION_SEARCH_MENU - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_ConditionSearchMenu, .callback = GetMenuHandlerCallback, @@ -92,7 +91,7 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeMenuHandlerSubstruct1, .free2 = FreeMenuHandlerSubstruct2, }, - [POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL - POKENAV_MENU_IDS_START] = + [POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_MainMenuCursorOnMatchCall, .callback = GetMenuHandlerCallback, @@ -102,7 +101,7 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeMenuHandlerSubstruct1, .free2 = FreeMenuHandlerSubstruct2, }, - [POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS - POKENAV_MENU_IDS_START] = + [POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_MainMenuCursorOnRibbons, .callback = GetMenuHandlerCallback, @@ -112,7 +111,7 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeMenuHandlerSubstruct1, .free2 = FreeMenuHandlerSubstruct2, }, - [POKENAV_REGION_MAP - POKENAV_MENU_IDS_START] = + [POKENAV_REGION_MAP - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_RegionMap, .callback = GetRegionMapCallback, @@ -122,17 +121,17 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeRegionMapSubstruct1, .free2 = FreeRegionMapSubstruct2, }, - [POKENAV_CONDITION_PARTY - POKENAV_MENU_IDS_START] = + [POKENAV_CONDITION_GRAPH_PARTY - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_PartyCondition, - .callback = GetPartyConditionCallback, - .open = OpenPartyConditionMenu, - .createLoopTask = CreatePartyConditionLoopedTask, - .isLoopTaskActive = IsPartyConditionLoopedTaskActive, - .free1 = FreePartyConditionSubstruct1, - .free2 = FreePartyConditionSubstruct2, + .init = PokenavCallback_Init_ConditionGraph_Party, + .callback = GetConditionGraphMenuCallback, + .open = OpenConditionGraphMenu, + .createLoopTask = CreateConditionGraphMenuLoopedTask, + .isLoopTaskActive = IsConditionGraphMenuLoopedTaskActive, + .free1 = FreeConditionGraphMenuSubstruct1, + .free2 = FreeConditionGraphMenuSubstruct2, }, - [POKENAV_CONDITION_SEARCH_RESULTS - POKENAV_MENU_IDS_START] = + [POKENAV_CONDITION_SEARCH_RESULTS - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_ConditionSearch, .callback = GetConditionSearchResultsCallback, @@ -142,17 +141,17 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeSearchResultSubstruct1, .free2 = FreeSearchResultSubstruct2, }, - [POKENAV_CONDITION_GRAPH_FROM_SEARCH - POKENAV_MENU_IDS_START] = + [POKENAV_CONDITION_GRAPH_SEARCH - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_ConditionGraphFromSearch, - .callback = GetPartyConditionCallback, - .open = OpenPartyConditionMenu, - .createLoopTask = CreatePartyConditionLoopedTask, - .isLoopTaskActive = IsPartyConditionLoopedTaskActive, - .free1 = FreePartyConditionSubstruct1, - .free2 = FreePartyConditionSubstruct2, + .init = PokenavCallback_Init_ConditionGraph_Search, + .callback = GetConditionGraphMenuCallback, + .open = OpenConditionGraphMenu, + .createLoopTask = CreateConditionGraphMenuLoopedTask, + .isLoopTaskActive = IsConditionGraphMenuLoopedTaskActive, + .free1 = FreeConditionGraphMenuSubstruct1, + .free2 = FreeConditionGraphMenuSubstruct2, }, - [POKENAV_RETURN_CONDITION_SEARCH - POKENAV_MENU_IDS_START] = + [POKENAV_RETURN_CONDITION_SEARCH - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_ReturnToMonSearchList, .callback = GetConditionSearchResultsCallback, @@ -162,7 +161,7 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeSearchResultSubstruct1, .free2 = FreeSearchResultSubstruct2, }, - [POKENAV_MATCH_CALL - POKENAV_MENU_IDS_START] = + [POKENAV_MATCH_CALL - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_MatchCall, .callback = GetMatchCallCallback, @@ -172,17 +171,17 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeMatchCallSubstruct1, .free2 = FreeMatchCallSubstruct2, }, - [POKENAV_RIBBONS_MON_LIST - POKENAV_MENU_IDS_START] = + [POKENAV_RIBBONS_MON_LIST - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_MonRibbonList, .callback = GetRibbonsMonListCallback, .open = OpenRibbonsMonList, .createLoopTask = CreateRibbonsMonListLoopedTask, .isLoopTaskActive = IsRibbonsMonListLoopedTaskActive, - .free1 = FreeRibbonsMonList1, - .free2 = FreeRibbonsMonList2, + .free1 = FreeRibbonsMonList, + .free2 = FreeRibbonsMonMenu, }, - [POKENAV_RIBBONS_SUMMARY_SCREEN - POKENAV_MENU_IDS_START] = + [POKENAV_RIBBONS_SUMMARY_SCREEN - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_RibbonsSummaryMenu, .callback = GetRibbonsSummaryMenuCallback, @@ -192,15 +191,15 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeRibbonsSummaryScreen1, .free2 = FreeRibbonsSummaryScreen2, }, - [POKENAV_RIBBONS_RETURN_TO_MON_LIST - POKENAV_MENU_IDS_START] = + [POKENAV_RIBBONS_RETURN_TO_MON_LIST - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_RibbonsMonListFromSummary, .callback = GetRibbonsMonListCallback, .open = OpenRibbonsMonListFromRibbonsSummary, .createLoopTask = CreateRibbonsMonListLoopedTask, .isLoopTaskActive = IsRibbonsMonListLoopedTaskActive, - .free1 = FreeRibbonsMonList1, - .free2 = FreeRibbonsMonList2, + .free1 = FreeRibbonsMonList, + .free2 = FreeRibbonsMonMenu, }, }; @@ -212,7 +211,7 @@ u32 CreateLoopedTask(LoopedTask loopedTask, u32 priority) { u16 taskId; - if (!IsUpdateLinkStateCBActive()) + if (!IsOverworldLinkActive()) taskId = CreateTask(Task_RunLoopedTask, priority); else taskId = CreateTask(Task_RunLoopedTask_LinkMode, priority); @@ -288,7 +287,7 @@ static void Task_RunLoopedTask_LinkMode(u8 taskId) s16 *state; u32 action; - if (Overworld_LinkRecvQueueLengthMoreThan2()) + if (Overworld_IsRecvQueueAtMax()) return; task = (LoopedTask)GetWordTaskArg(taskId, 1); @@ -558,8 +557,7 @@ void *GetSubstructPtr(u32 index) void FreePokenavSubstruct(u32 index) { - if (gPokenavResources->substructPtrs[index] != NULL) - FREE_AND_SET_NULL(gPokenavResources->substructPtrs[index]); + TRY_FREE_AND_SET_NULL(gPokenavResources->substructPtrs[index]); } u32 GetPokenavMode(void) diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c new file mode 100644 index 0000000000..0477ebbf52 --- /dev/null +++ b/src/pokenav_conditions.c @@ -0,0 +1,630 @@ +#include "global.h" +#include "data.h" +#include "decompress.h" +#include "main.h" +#include "menu_specialized.h" +#include "mon_markings.h" +#include "pokenav.h" +#include "pokemon.h" +#include "pokemon_storage_system.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "constants/songs.h" + +#define CONDITION_MONS_LOADED 3 + +struct Pokenav_ConditionMenu +{ + u32 monPal[CONDITION_MONS_LOADED][0x20]; + u8 fill[0x180]; + u32 monPicGfx[CONDITION_MONS_LOADED][MON_PIC_SIZE]; + bool8 inSearchMode; + s16 toLoadListIndex; + u32 (*callback)(struct Pokenav_ConditionMenu *); + u8 fill2[0x18]; + u8 locationText[CONDITION_MONS_LOADED][24]; + u8 nameText[CONDITION_MONS_LOADED][64]; + struct ConditionGraph graph; + u8 numSparkles[CONDITION_MONS_LOADED]; + u8 monMarks[CONDITION_MONS_LOADED]; + s8 loadId; + s8 nextLoadIdDown; + s8 nextLoadIdUp; + s8 toLoadId; + u8 state; +}; + +static void InitPartyConditionListParameters(void); +static void InitSearchResultsConditionList(void); +static u32 HandleConditionMenuInput(struct Pokenav_ConditionMenu *); +static u32 GetConditionReturnCallback(struct Pokenav_ConditionMenu *); +static u32 OpenMarkingsMenu(struct Pokenav_ConditionMenu *); +static u8 ConditionGraphHandleDpadInput(struct Pokenav_ConditionMenu *); +static u8 SwitchConditionSummaryIndex(bool8); +static void CopyMonNameGenderLocation(s16, u8); +static void GetMonConditionGraphData(s16, u8); +static void ConditionGraphDrawMonPic(s16, u8); + +bool32 PokenavCallback_Init_ConditionGraph_Party(void) +{ + struct Pokenav_ConditionMenu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU, sizeof(struct Pokenav_ConditionMenu)); + + if (menu == NULL) + return FALSE; + + ConditionGraph_Init(&menu->graph); + InitPartyConditionListParameters(); + gKeyRepeatStartDelay = 20; + menu->callback = HandleConditionMenuInput; + return TRUE; +} + +bool32 PokenavCallback_Init_ConditionGraph_Search(void) +{ + struct Pokenav_ConditionMenu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU, sizeof(struct Pokenav_ConditionMenu)); + + if (menu == NULL) + return FALSE; + + ConditionGraph_Init(&menu->graph); + InitSearchResultsConditionList(); + gKeyRepeatStartDelay = 20; + menu->callback = HandleConditionMenuInput; + return TRUE; +} + +u32 GetConditionGraphMenuCallback(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + + return menu->callback(menu); +} + +static u32 HandleConditionMenuInput(struct Pokenav_ConditionMenu *menu) +{ + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + u32 ret = ConditionGraphHandleDpadInput(menu); + + if (ret == CONDITION_FUNC_NONE) + { + if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + menu->callback = GetConditionReturnCallback; + ret = CONDITION_FUNC_RETURN; + } + else if (JOY_NEW(A_BUTTON)) + { + if (!menu->inSearchMode) + { + // In Party mode, pressing A only applies to the Cancel button + if (monListPtr->currIndex == monListPtr->listCount - 1) + { + // Cancel + PlaySE(SE_SELECT); + menu->callback = GetConditionReturnCallback; + ret = CONDITION_FUNC_RETURN; + } + } + else + { + // In Search mode pressing A brings up the markings menu + PlaySE(SE_SELECT); + ret = CONDITION_FUNC_ADD_MARKINGS; + menu->callback = OpenMarkingsMenu; + } + } + } + + return ret; +} + +static u32 OpenMarkingsMenu(struct Pokenav_ConditionMenu *menu) +{ + struct PokenavMonList *monListPtr; + u8 markings; + u32 ret = CONDITION_FUNC_NONE, boxId, monId; + + if (!HandleMonMarkingsMenuInput()) + { + menu->monMarks[menu->loadId] = GetMonMarkingsData(); + monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + boxId = monListPtr->monData[monListPtr->currIndex].boxId; + monId = monListPtr->monData[monListPtr->currIndex].monId; + markings = menu->monMarks[menu->loadId]; + + if (boxId == TOTAL_BOXES_COUNT) + SetMonData(&gPlayerParty[monId], MON_DATA_MARKINGS, &markings); + else + SetBoxMonDataAt(boxId, monId, MON_DATA_MARKINGS, &markings); + + menu->callback = HandleConditionMenuInput; + ret = CONDITION_FUNC_CLOSE_MARKINGS; + } + + return ret; +} + +static u32 GetConditionReturnCallback(struct Pokenav_ConditionMenu *menu) +{ + if (!menu->inSearchMode) + return POKENAV_CONDITION_MENU; + else + return POKENAV_RETURN_CONDITION_SEARCH; +} + +void FreeConditionGraphMenuSubstruct1(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + if (!menu->inSearchMode) + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); + + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); +} + +static u8 ConditionGraphHandleDpadInput(struct Pokenav_ConditionMenu *menu) +{ + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + u8 ret = CONDITION_FUNC_NONE; + + if (JOY_HELD(DPAD_UP)) + { + // Prevent input wrapping in search mode + if (!menu->inSearchMode || monListPtr->currIndex != 0) + { + PlaySE(SE_SELECT); + ret = SwitchConditionSummaryIndex(TRUE); + } + } + else if (JOY_HELD(DPAD_DOWN)) + { + // Prevent input wrapping in search mode + if (!menu->inSearchMode || monListPtr->currIndex < monListPtr->listCount - 1) + { + PlaySE(SE_SELECT); + ret = SwitchConditionSummaryIndex(FALSE); + } + } + + return ret; +} + +static u8 SwitchConditionSummaryIndex(u8 moveUp) +{ + u16 newLoadId; + bool8 wasNotLastMon, isNotLastMon; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + newLoadId = (moveUp) ? menu->nextLoadIdUp : menu->nextLoadIdDown; + ConditionGraph_SetNewPositions(&menu->graph, menu->graph.savedPositions[menu->loadId], menu->graph.savedPositions[newLoadId]); + wasNotLastMon = (monListPtr->currIndex != (IsConditionMenuSearchMode() ? monListPtr->listCount : monListPtr->listCount - 1)); + if (moveUp) + { + menu->nextLoadIdUp = menu->nextLoadIdDown; + menu->nextLoadIdDown = menu->loadId; + menu->loadId = newLoadId; + menu->toLoadId = menu->nextLoadIdUp; + + monListPtr->currIndex = (monListPtr->currIndex == 0) ? monListPtr->listCount - 1 : monListPtr->currIndex - 1; + menu->toLoadListIndex = (monListPtr->currIndex != 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1; + } + else + { + menu->nextLoadIdDown = menu->nextLoadIdUp; + menu->nextLoadIdUp = menu->loadId; + menu->loadId = newLoadId; + menu->toLoadId = menu->nextLoadIdDown; + + monListPtr->currIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; + menu->toLoadListIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; + } + + isNotLastMon = (monListPtr->currIndex != (IsConditionMenuSearchMode() ? monListPtr->listCount : monListPtr->listCount - 1)); + + if (!wasNotLastMon) + return CONDITION_FUNC_NO_TRANSITION; + else if (!isNotLastMon) + return CONDITION_FUNC_SLIDE_MON_OUT; + else + return CONDITION_FUNC_SLIDE_MON_IN; +} + +bool32 LoadConditionGraphMenuGfx(void) +{ + s32 var; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + switch (menu->state) + { + case 0: + CopyMonNameGenderLocation(monListPtr->currIndex, 0); + break; + case 1: + GetMonConditionGraphData(monListPtr->currIndex, 0); + break; + case 2: + ConditionGraphDrawMonPic(monListPtr->currIndex, 0); + break; + case 3: + if (monListPtr->listCount == 1) + { + menu->loadId = 0; + menu->nextLoadIdDown = 0; + menu->nextLoadIdUp = 0; + menu->state = 0; + return TRUE; + } + else + { + menu->loadId = 0; + menu->nextLoadIdDown = 1; + menu->nextLoadIdUp = 2; + } + break; + // These were probably ternaries just like cases 7-9, but couldn't match it any other way. + case 4: + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) + var = 0; + CopyMonNameGenderLocation(var, 1); + break; + case 5: + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) + var = 0; + GetMonConditionGraphData(var, 1); + break; + case 6: + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) + var = 0; + ConditionGraphDrawMonPic(var, 1); + break; + case 7: + CopyMonNameGenderLocation((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); + break; + case 8: + GetMonConditionGraphData((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); + break; + case 9: + ConditionGraphDrawMonPic((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); + menu->state = 0; + return TRUE; + } + + menu->state++; + return FALSE; +} + +bool32 LoadNextConditionMenuMonData(u8 mode) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + + switch (mode) + { + case CONDITION_LOAD_MON_INFO: + CopyMonNameGenderLocation(menu->toLoadListIndex, menu->toLoadId); + break; + case CONDITION_LOAD_GRAPH: + GetMonConditionGraphData(menu->toLoadListIndex, menu->toLoadId); + break; + case CONDITION_LOAD_MON_PIC: + ConditionGraphDrawMonPic(menu->toLoadListIndex, menu->toLoadId); + return TRUE; + } + + return FALSE; +} + +u8 *CopyStringLeftAlignedToConditionData(u8 *dst, const u8 *src, s16 n) +{ + while (*src != EOS) + *dst++ = *src++, n--; + + while (n-- > 0) + *dst++ = CHAR_SPACE; + + *dst = EOS; + return dst; +} + +static u8 *CopyConditionMonNameGender(u8 *str, u16 listId, bool8 skipPadding) +{ + u16 boxId, monId, gender, species, level, lvlDigits; + struct BoxPokemon *boxMon; + u8 *txtPtr, *str_; + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + boxId = monListPtr->monData[listId].boxId; + monId = monListPtr->monData[listId].monId; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(str++) = TEXT_COLOR_BLUE; + *(str++) = TEXT_COLOR_TRANSPARENT; + *(str++) = TEXT_COLOR_LIGHT_BLUE; + + if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) + return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12); + + GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str); + StringGet_Nickname(str); + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); + if (boxId == TOTAL_BOXES_COUNT) + { + level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + gender = GetMonGender(&gPlayerParty[monId]); + } + else + { + boxMon = GetBoxedMonPtr(boxId, monId); + gender = GetBoxMonGender(boxMon); + level = GetLevelFromBoxMonExp(boxMon); + } + + if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(str, gSpeciesNames[species])) + gender = MON_GENDERLESS; + + str_ = str; // For some reason, a variable is needed to match. + while (*str_ != EOS) + (str_++); + + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_SKIP; + *(str_++) = 60; + switch (gender) + { + default: + *(str_++) = CHAR_SPACER; // Genderless + break; + case MON_MALE: + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_COLOR; + *(str_++) = TEXT_COLOR_RED; + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_SHADOW; + *(str_++) = TEXT_COLOR_LIGHT_RED; + *(str_++) = CHAR_MALE; + break; + case MON_FEMALE: + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_COLOR; + *(str_++) = TEXT_COLOR_GREEN; + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_SHADOW; + *(str_++) = TEXT_COLOR_LIGHT_GREEN; + *(str_++) = CHAR_FEMALE; + break; + } + + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(str_++) = TEXT_COLOR_BLUE; + *(str_++) = TEXT_COLOR_TRANSPARENT; + *(str_++) = TEXT_COLOR_LIGHT_BLUE; + *(str_++) = CHAR_SLASH; + *(str_++) = CHAR_EXTRA_SYMBOL; + *(str_++) = CHAR_LV_2; + txtPtr = str_; + str_ = ConvertIntToDecimalStringN(str_, level, STR_CONV_MODE_LEFT_ALIGN, 3); + lvlDigits = str_ - txtPtr; + *(str_++) = CHAR_SPACE; + if (!skipPadding) + { + lvlDigits = 3 - lvlDigits; + while (lvlDigits-- != 0) + *(str_++) = CHAR_SPACE; + } + + *str_ = EOS; + return str_; +} + +static void CopyMonNameGenderLocation(s16 listId, u8 loadId) +{ + u16 boxId, i; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + if (listId != (IsConditionMenuSearchMode() ? monListPtr->listCount : monListPtr->listCount - 1)) + { + CopyConditionMonNameGender(menu->nameText[loadId], listId, FALSE); + boxId = monListPtr->monData[listId].boxId; + menu->locationText[loadId][0] = EXT_CTRL_CODE_BEGIN; + menu->locationText[loadId][1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + menu->locationText[loadId][2] = TEXT_COLOR_BLUE; + menu->locationText[loadId][3] = TEXT_COLOR_TRANSPARENT; + menu->locationText[loadId][4] = TEXT_COLOR_LIGHT_BLUE; + if (boxId == TOTAL_BOXES_COUNT) + CopyStringLeftAlignedToConditionData(&menu->locationText[loadId][5], gText_InParty, BOX_NAME_LENGTH); + else + CopyStringLeftAlignedToConditionData(&menu->locationText[loadId][5], GetBoxNamePtr(boxId), BOX_NAME_LENGTH); + } + else + { + for (i = 0; i < 12; i++) + menu->nameText[loadId][i] = CHAR_SPACE; + menu->nameText[loadId][i] = EOS; + + for (i = 0; i < BOX_NAME_LENGTH; i++) + menu->locationText[loadId][i] = CHAR_SPACE; + menu->locationText[loadId][i] = EOS; + } +} + +static void InitPartyConditionListParameters(void) +{ + u16 i, count; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavMonList)); + + menu->inSearchMode = FALSE; + for (i = 0, count = 0; i < CalculatePlayerPartyCount(); i++) + { + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + { + monListPtr->monData[count].boxId = TOTAL_BOXES_COUNT; + monListPtr->monData[count].monId = i; + monListPtr->monData[count].data = 0; + count++; + } + } + + monListPtr->monData[count].boxId = 0; + monListPtr->monData[count].monId = 0; + monListPtr->monData[count].data = 0; + monListPtr->currIndex = 0; + monListPtr->listCount = count + 1; + menu->state = 0; +} + +static void InitSearchResultsConditionList(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + menu->inSearchMode = TRUE; + menu->state = 0; +} + +static void GetMonConditionGraphData(s16 listId, u8 loadId) +{ + u16 boxId, monId, i; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + if (listId != (IsConditionMenuSearchMode() ? monListPtr->listCount : monListPtr->listCount - 1)) + { + boxId = monListPtr->monData[listId].boxId; + monId = monListPtr->monData[listId].monId; + menu->graph.conditions[loadId][CONDITION_COOL] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + menu->graph.conditions[loadId][CONDITION_TOUGH] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + menu->graph.conditions[loadId][CONDITION_SMART] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + menu->graph.conditions[loadId][CONDITION_CUTE] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + menu->graph.conditions[loadId][CONDITION_BEAUTY] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + menu->numSparkles[loadId] = GET_NUM_CONDITION_SPARKLES(GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL)); + menu->monMarks[loadId] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_MARKINGS, NULL); + ConditionGraph_CalcPositions(menu->graph.conditions[loadId], menu->graph.savedPositions[loadId]); + } + else + { + // Set empty graph point + for (i = 0; i < CONDITION_COUNT; i++) + { + menu->graph.conditions[loadId][i] = 0; + menu->graph.savedPositions[loadId][i].x = CONDITION_GRAPH_CENTER_X; + menu->graph.savedPositions[loadId][i].y = CONDITION_GRAPH_CENTER_Y; + } + } +} + +static void ConditionGraphDrawMonPic(s16 listId, u8 loadId) +{ + u16 boxId, monId, species; + u32 personality, tid; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + if (listId == (IsConditionMenuSearchMode() ? monListPtr->listCount : monListPtr->listCount - 1)) + return; + + boxId = monListPtr->monData[listId].boxId; + monId = monListPtr->monData[listId].monId; + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); + tid = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); + personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); + LoadSpecialPokePic(menu->monPicGfx[loadId], species, personality, TRUE); + LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, tid, personality), menu->monPal[loadId]); +} + +u16 GetMonListCount(void) +{ + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->listCount; +} + +u16 GetConditionGraphCurrentListIndex(void) +{ + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->currIndex; +} + +struct ConditionGraph *GetConditionGraphPtr(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return &menu->graph; +} + +u8 GetConditionGraphMenuCurrentLoadIndex(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->loadId; +} + +u8 GetConditionGraphMenuToLoadListIndex(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->toLoadListIndex; +} + +void *GetConditionMonPicGfx(u8 loadId) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->monPicGfx[loadId]; +} + +void *GetConditionMonPal(u8 loadId) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->monPal[loadId]; +} + +u8 GetConditionGraphMenuToLoadId(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->toLoadId; +} + +u8 *GetConditionMonNameText(u8 loadId) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->nameText[loadId]; +} + +u8 *GetConditionMonLocationText(u8 loadId) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->locationText[loadId]; +} + +u16 GetConditionMonDataBuffer(void) +{ + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->monData[monListPtr->currIndex].data; +} + +bool32 IsConditionMenuSearchMode(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + if (menu->inSearchMode == TRUE) + return TRUE; + else + return FALSE; +} + +// Markings are only shown in search mode +u8 TryGetMonMarkId(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + if (menu->inSearchMode == TRUE) + return menu->monMarks[menu->loadId]; + else + return 0; +} + +u8 GetNumConditionMonSparkles(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->numSparkles[menu->loadId]; +} diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c deleted file mode 100644 index 61b289ae1f..0000000000 --- a/src/pokenav_conditions_1.c +++ /dev/null @@ -1,624 +0,0 @@ -#include "global.h" -#include "data.h" -#include "decompress.h" -#include "main.h" -#include "menu_specialized.h" -#include "mon_markings.h" -#include "pokenav.h" -#include "pokemon.h" -#include "pokemon_storage_system.h" -#include "sound.h" -#include "string_util.h" -#include "strings.h" -#include "text.h" -#include "constants/songs.h" - -struct PokenavSub11 -{ - u32 monPal[3][0x20]; - u8 fill[0x180]; - u32 monPicGfx[3][MON_PIC_SIZE]; - u8 searchMode; - s16 monIndex; - u32 (*callback)(struct PokenavSub11 *); - u8 fill2[0x6320 - 0x6308]; - u8 searchLocBuffer[3][24]; - u8 nameBuffer[3][64]; - struct ConditionGraph conditionData; - u8 sheen[3]; - u8 monMarks[3]; - s8 mark; - s8 unk6787; - s8 unk6788; - s8 unk6789; - u8 state; -}; - -void InitPartyConditionListParameters(void); -void sub_81CD9F8(void); -u32 HandlePartyConditionInput(struct PokenavSub11 *structPtr); -u32 GetConditionReturnCallback(struct PokenavSub11 *structPtr); -u32 ConditionMenu_OpenMarkingsMenu(struct PokenavSub11 *structPtr); -u8 ConditionGraphHandleDpadInput(struct PokenavSub11 *structPtr); -u8 SwitchConditionSummaryIndex(u8 moveUp); -void CopyMonNameGenderLocation(s16 id, u8 arg1); -void GetMonConditionGraphData(s16 id, u8 arg1); -void ConditionGraphDrawMonPic(s16 id, u8 arg1); - -// code -bool32 PokenavCallback_Init_PartyCondition(void) -{ - struct PokenavSub11 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH, sizeof(struct PokenavSub11)); - - if (structPtr == NULL) - return FALSE; - - InitConditionGraphData(&structPtr->conditionData); - InitPartyConditionListParameters(); - gKeyRepeatStartDelay = 20; - structPtr->callback = HandlePartyConditionInput; - return TRUE; -} - -bool32 PokenavCallback_Init_ConditionGraphFromSearch(void) -{ - struct PokenavSub11 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH, sizeof(struct PokenavSub11)); - - if (structPtr == NULL) - return FALSE; - - InitConditionGraphData(&structPtr->conditionData); - sub_81CD9F8(); - gKeyRepeatStartDelay = 20; - structPtr->callback = HandlePartyConditionInput; - return TRUE; -} - -u32 GetPartyConditionCallback(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - - return structPtr->callback(structPtr); -} - -u32 HandlePartyConditionInput(struct PokenavSub11 *structPtr) -{ - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - u32 ret = ConditionGraphHandleDpadInput(structPtr); - - if (ret == PARTY_CONDITION_FUNC_NONE) - { - if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_SELECT); - structPtr->callback = GetConditionReturnCallback; - ret = PARTY_CONDITION_FUNC_RETURN; - } - else if (JOY_NEW(A_BUTTON)) - { - if (structPtr->searchMode == 0) - { - if (monListPtr->currIndex == monListPtr->listCount - 1) - { - PlaySE(SE_SELECT); - structPtr->callback = GetConditionReturnCallback; - ret = PARTY_CONDITION_FUNC_RETURN; - } - } - else - { - PlaySE(SE_SELECT); - ret = PARTY_CONDITION_FUNC_ADD_MARKINGS; - structPtr->callback = ConditionMenu_OpenMarkingsMenu; - } - } - } - - return ret; -} - -u32 ConditionMenu_OpenMarkingsMenu(struct PokenavSub11 *structPtr) -{ - struct PokenavSub18 *monListPtr; - u8 markings; - u32 ret = PARTY_CONDITION_FUNC_NONE, boxId, monId; - - if (!HandleMonMarkingsMenuInput()) - { - structPtr->monMarks[structPtr->mark] = GetMonMarkingsData(); - monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - boxId = monListPtr->monData[monListPtr->currIndex].boxId; - monId = monListPtr->monData[monListPtr->currIndex].monId; - markings = structPtr->monMarks[structPtr->mark]; - - if (boxId == TOTAL_BOXES_COUNT) - SetMonData(&gPlayerParty[monId], MON_DATA_MARKINGS, &markings); - else - SetBoxMonDataAt(boxId, monId, MON_DATA_MARKINGS, &markings); - - structPtr->callback = HandlePartyConditionInput; - ret = PARTY_CONDITION_FUNC_CLOSE_MARKINGS; - } - - return ret; -} - -u32 GetConditionReturnCallback(struct PokenavSub11 *structPtr) -{ - if (structPtr->searchMode == 0) - return POKENAV_CONDITION_MENU; - else - return POKENAV_RETURN_CONDITION_SEARCH; -} - -void FreePartyConditionSubstruct1(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - if (structPtr->searchMode == 0) - FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); - - FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH); -} - -u8 ConditionGraphHandleDpadInput(struct PokenavSub11 *structPtr) -{ - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - u8 ret = 0; - - if (JOY_HELD(DPAD_UP)) - { - if (structPtr->searchMode == 0 || monListPtr->currIndex != 0) - { - PlaySE(SE_SELECT); - ret = SwitchConditionSummaryIndex(1); - } - } - else if (JOY_HELD(DPAD_DOWN)) - { - if (structPtr->searchMode == 0 || monListPtr->currIndex < monListPtr->listCount - 1) - { - PlaySE(SE_SELECT); - ret = SwitchConditionSummaryIndex(0); - } - } - - return ret; -} - -u8 SwitchConditionSummaryIndex(u8 moveUp) -{ - u16 r7; - bool8 wasNotLastMon, isNotLastMon; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - r7 = (moveUp) ? structPtr->unk6788 : structPtr->unk6787; - sub_81D1F84(&structPtr->conditionData, structPtr->conditionData.unk14[structPtr->mark], structPtr->conditionData.unk14[r7]); - wasNotLastMon = (monListPtr->currIndex != ((IsConditionMenuSearchMode() != 0) ? monListPtr->listCount : monListPtr->listCount - 1)); - if (moveUp) - { - structPtr->unk6788 = structPtr->unk6787; - structPtr->unk6787 = structPtr->mark; - structPtr->mark = r7; - structPtr->unk6789 = structPtr->unk6788; - - monListPtr->currIndex = (monListPtr->currIndex == 0) ? monListPtr->listCount - 1 : monListPtr->currIndex - 1; - structPtr->monIndex = (monListPtr->currIndex != 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1; - } - else - { - structPtr->unk6787 = structPtr->unk6788; - structPtr->unk6788 = structPtr->mark; - structPtr->mark = r7; - structPtr->unk6789 = structPtr->unk6787; - - monListPtr->currIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; - structPtr->monIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; - } - - isNotLastMon = (monListPtr->currIndex != ((IsConditionMenuSearchMode() != 0) ? monListPtr->listCount : monListPtr->listCount - 1)); - - if (!wasNotLastMon) - return PARTY_CONDITION_FUNC_NO_TRANSITION; - else if (!isNotLastMon) - return PARTY_CONDITION_FUNC_SLIDE_MON_OUT; - else - return PARTY_CONDITION_FUNC_SLIDE_MON_IN; -} - -bool32 LoadPartyConditionMenuGfx(void) -{ - s32 var; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - switch (structPtr->state) - { - case 0: - CopyMonNameGenderLocation(monListPtr->currIndex, 0); - break; - case 1: - GetMonConditionGraphData(monListPtr->currIndex, 0); - break; - case 2: - ConditionGraphDrawMonPic(monListPtr->currIndex, 0); - break; - case 3: - if (monListPtr->listCount == 1) - { - structPtr->mark = 0; - structPtr->unk6787 = 0; - structPtr->unk6788 = 0; - structPtr->state = 0; - return TRUE; - } - else - { - structPtr->mark = 0; - structPtr->unk6787 = 1; - structPtr->unk6788 = 2; - } - break; - // These were probably ternaries just like cases 7-9, but couldn't match it any other way. - case 4: - var = monListPtr->currIndex + 1; - if (var >= monListPtr->listCount) - var = 0; - CopyMonNameGenderLocation(var, 1); - break; - case 5: - var = monListPtr->currIndex + 1; - if (var >= monListPtr->listCount) - var = 0; - GetMonConditionGraphData(var, 1); - break; - case 6: - var = monListPtr->currIndex + 1; - if (var >= monListPtr->listCount) - var = 0; - ConditionGraphDrawMonPic(var, 1); - break; - case 7: - CopyMonNameGenderLocation((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); - break; - case 8: - GetMonConditionGraphData((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); - break; - case 9: - ConditionGraphDrawMonPic((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); - structPtr->state = 0; - return TRUE; - } - - structPtr->state++; - return FALSE; -} - -bool32 SetConditionGraphData(u8 mode) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - - switch (mode) - { - case 0: - CopyMonNameGenderLocation(structPtr->monIndex, structPtr->unk6789); - break; - case 1: - GetMonConditionGraphData(structPtr->monIndex, structPtr->unk6789); - break; - case 2: - ConditionGraphDrawMonPic(structPtr->monIndex, structPtr->unk6789); - return TRUE; - } - - return FALSE; -} - -u8 *CopyStringLeftAlignedToConditionData(u8 *dst, const u8 *src, s16 n) -{ - while (*src != EOS) - *dst++ = *src++, n--; - - while (n-- > 0) - *dst++ = CHAR_SPACE; - - *dst = EOS; - return dst; -} - -u8 *CopyMonConditionNameGender(u8 *str, u16 id, bool8 arg3) -{ - u16 boxId, monId, gender, species, level, lvlDigits; - struct BoxPokemon *boxMon; - u8 *txtPtr, *str_; - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - boxId = monListPtr->monData[id].boxId; - monId = monListPtr->monData[id].monId; - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - *(str++) = TEXT_COLOR_BLUE; - *(str++) = TEXT_COLOR_TRANSPARENT; - *(str++) = TEXT_COLOR_LIGHT_BLUE; - - if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) - return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12); - - GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str); - StringGetEnd10(str); - species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); - if (boxId == TOTAL_BOXES_COUNT) - { - level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - gender = GetMonGender(&gPlayerParty[monId]); - } - else - { - boxMon = GetBoxedMonPtr(boxId, monId); - gender = GetBoxMonGender(boxMon); - level = GetLevelFromBoxMonExp(boxMon); - } - - if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(str, gSpeciesNames[species])) - gender = MON_GENDERLESS; - - str_ = str; // For some reason, a variable is needed to match. - while (*str_ != EOS) - (str_++); - - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_SKIP; - *(str_++) = 60; - switch (gender) - { - default: - *(str_++) = CHAR_GENDERLESS; - break; - case MON_MALE: - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_COLOR; - *(str_++) = TEXT_COLOR_RED; - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_SHADOW; - *(str_++) = TEXT_COLOR_LIGHT_RED; - *(str_++) = CHAR_MALE; - break; - case MON_FEMALE: - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_COLOR; - *(str_++) = TEXT_COLOR_GREEN; - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_SHADOW; - *(str_++) = TEXT_COLOR_LIGHT_GREEN; - *(str_++) = CHAR_FEMALE; - break; - } - - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - *(str_++) = TEXT_COLOR_BLUE; - *(str_++) = TEXT_COLOR_TRANSPARENT; - *(str_++) = TEXT_COLOR_LIGHT_BLUE; - *(str_++) = CHAR_SLASH; - *(str_++) = CHAR_EXTRA_SYMBOL; - *(str_++) = CHAR_LV_2; - txtPtr = str_; - str_ = ConvertIntToDecimalStringN(str_, level, STR_CONV_MODE_LEFT_ALIGN, 3); - lvlDigits = str_ - txtPtr; - *(str_++) = CHAR_SPACE; - if (!arg3) - { - lvlDigits = 3 - lvlDigits; - while (lvlDigits-- != 0) - *(str_++) = CHAR_SPACE; - } - - *str_ = EOS; - return str_; -} - -void CopyMonNameGenderLocation(s16 id, u8 arg1) -{ - u16 boxId, i; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - if (id != (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) - { - CopyMonConditionNameGender(structPtr->nameBuffer[arg1], id, FALSE); - boxId = monListPtr->monData[id].boxId; - structPtr->searchLocBuffer[arg1][0] = EXT_CTRL_CODE_BEGIN; - structPtr->searchLocBuffer[arg1][1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - structPtr->searchLocBuffer[arg1][2] = TEXT_COLOR_BLUE; - structPtr->searchLocBuffer[arg1][3] = TEXT_COLOR_TRANSPARENT; - structPtr->searchLocBuffer[arg1][4] = TEXT_COLOR_LIGHT_BLUE; - if (boxId == TOTAL_BOXES_COUNT) - CopyStringLeftAlignedToConditionData(&structPtr->searchLocBuffer[arg1][5], gText_InParty, 8); - else - CopyStringLeftAlignedToConditionData(&structPtr->searchLocBuffer[arg1][5], GetBoxNamePtr(boxId), 8); - } - else - { - for (i = 0; i < 12; i++) - structPtr->nameBuffer[arg1][i] = CHAR_SPACE; - structPtr->nameBuffer[arg1][i] = EOS; - - for (i = 0; i < 8; i++) - structPtr->searchLocBuffer[arg1][i] = CHAR_SPACE; - structPtr->searchLocBuffer[arg1][i] = EOS; - } -} - -void InitPartyConditionListParameters(void) -{ - u16 i, count; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); - - structPtr->searchMode = 0; - for (i = 0, count = 0; i < CalculatePlayerPartyCount(); i++) - { - if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) - { - monListPtr->monData[count].boxId = TOTAL_BOXES_COUNT; - monListPtr->monData[count].monId = i; - monListPtr->monData[count].data = 0; - count++; - } - } - - monListPtr->monData[count].boxId = 0; - monListPtr->monData[count].monId = 0; - monListPtr->monData[count].data = 0; - monListPtr->currIndex = 0; - monListPtr->listCount = count + 1; - structPtr->state = 0; -} - -void sub_81CD9F8(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - structPtr->searchMode = 1; - structPtr->state = 0; -} - -void GetMonConditionGraphData(s16 id, u8 arg1) -{ - u16 boxId, monId, i; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - if (id != (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) - { - boxId = monListPtr->monData[id].boxId; - monId = monListPtr->monData[id].monId; - structPtr->conditionData.stat[arg1][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); - structPtr->conditionData.stat[arg1][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); - structPtr->conditionData.stat[arg1][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); - structPtr->conditionData.stat[arg1][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); - structPtr->conditionData.stat[arg1][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); - structPtr->sheen[arg1] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 255) - ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u - : 9; - structPtr->monMarks[arg1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_MARKINGS, NULL); - sub_81D2754(structPtr->conditionData.stat[arg1], structPtr->conditionData.unk14[arg1]); - } - else - { - for (i = 0; i < FLAVOR_COUNT; i++) - { - structPtr->conditionData.stat[arg1][i] = 0; - structPtr->conditionData.unk14[arg1][i].unk0 = 155; - structPtr->conditionData.unk14[arg1][i].unk2 = 91; - } - } -} - -void ConditionGraphDrawMonPic(s16 index, u8 arg1) -{ - u16 boxId, monId, species; - u32 personality, tid; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - if (index == (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) - return; - - boxId = monListPtr->monData[index].boxId; - monId = monListPtr->monData[index].monId; - species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); - tid = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); - personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); - LoadSpecialPokePic(&gMonFrontPicTable[species], structPtr->monPicGfx[arg1], species, personality, TRUE); - LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, tid, personality), structPtr->monPal[arg1]); -} - -u16 GetMonListCount(void) -{ - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - return monListPtr->listCount; -} - -u16 GetConditionGraphCurrentMonIndex(void) -{ - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - return monListPtr->currIndex; -} - -struct ConditionGraph *GetConditionGraphDataPtr(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return &structPtr->conditionData; -} - -u8 GetMonMarkIndex(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->mark; -} - -u8 sub_81CDC9C(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->monIndex; -} - -void *GetConditionMonPicGfx(u8 id) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->monPicGfx[id]; -} - -void *GetConditionMonPal(u8 id) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->monPal[id]; -} - -u8 sub_81CDCEC(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->unk6789; -} - -u8 *GetConditionMonNameBuffer(u8 id) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->nameBuffer[id]; -} - -u8 *GetConditionMonLocationBuffer(u8 id) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->searchLocBuffer[id]; -} - -u16 GetConditionMonDataBuffer(void) -{ - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - return monListPtr->monData[monListPtr->currIndex].data; -} - -bool32 IsConditionMenuSearchMode(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - if (structPtr->searchMode == 1) - return TRUE; - else - return FALSE; -} - -u8 TryGetMonMarkId(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - if (structPtr->searchMode == 1) - return structPtr->monMarks[structPtr->mark]; - else - return 0; -} - -u8 GetMonSheen(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->sheen[structPtr->mark]; -} diff --git a/src/pokenav_conditions_2.c b/src/pokenav_conditions_2.c deleted file mode 100644 index c882befc4f..0000000000 --- a/src/pokenav_conditions_2.c +++ /dev/null @@ -1,885 +0,0 @@ -#include "global.h" -#include "bg.h" -#include "window.h" -#include "pokenav.h" -#include "decompress.h" -#include "gpu_regs.h" -#include "graphics.h" -#include "menu.h" -#include "menu_specialized.h" -#include "mon_markings.h" -#include "palette.h" -#include "pokenav.h" -#include "scanline_effect.h" -#include "string_util.h" -#include "strings.h" -#include "text.h" - -u32 LoopedTask_TransitionMons(s32); -u32 LoopedTask_ExitPartyConditionMenu(s32); -u32 LoopedTask_MoveCursorNoTransition(s32); -u32 LoopedTask_SlideMonOut(s32); -u32 LoopedTask_OpenMonMarkingsWindow(s32); -u32 LoopedTask_CloseMonMarkingsWindow(s32); - -BSS_DATA u8 gUnknown_030012BC; - -const u16 gConditionGraphData_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph_data.gbapal"); -const u16 gConditionText_Pal[] = INCBIN_U16("graphics/pokenav/condition/text.gbapal"); -const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz"); -const u32 sConditionGraph_Tilemap[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz"); -const u16 sConditionGraphMonMarkingsPal[] = INCBIN_U16("graphics/pokenav/8623338.gbapal"); - -const struct BgTemplate sPartyConditionBgTemplates[3] = -{ - { - .bg = 1, - .charBaseIndex = 1, - .mapBaseIndex = 0x1F, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 2, - .charBaseIndex = 3, - .mapBaseIndex = 0x1D, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, - { - .bg = 3, - .charBaseIndex = 2, - .mapBaseIndex = 0x1E, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0 - } -}; - -const struct WindowTemplate sMonNameGenderWindowTemplate = -{ - .bg = 1, - .tilemapLeft = 13, - .tilemapTop = 1, - .width = 13, - .height = 4, - .paletteNum = 15, - .baseBlock = 2 -}; - -const struct WindowTemplate sConditionGraphListIdWindowTemplate = -{ - .bg = 1, - .tilemapLeft = 1, - .tilemapTop = 6, - .width = 7, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x36 -}; - -const struct WindowTemplate sUnusedWindowTemplate1 = -{ - .bg = 1, - .tilemapLeft = 1, - .tilemapTop = 0x1C, - .width = 5, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x44 -}; - -const struct WindowTemplate sUnusedWindowTemplate2 = -{ - .bg = 1, - .tilemapLeft = 13, - .tilemapTop = 0x1C, - .width = 3, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x44 -}; - -const LoopedTask sPartyConditionLoopedTaskFuncs[] = -{ - [PARTY_CONDITION_FUNC_NONE] = NULL, - [PARTY_CONDITION_FUNC_SLIDE_MON_IN] = LoopedTask_TransitionMons, - [PARTY_CONDITION_FUNC_RETURN] = LoopedTask_ExitPartyConditionMenu, - [PARTY_CONDITION_FUNC_NO_TRANSITION] = LoopedTask_MoveCursorNoTransition, - [PARTY_CONDITION_FUNC_SLIDE_MON_OUT] = LoopedTask_SlideMonOut, - [PARTY_CONDITION_FUNC_ADD_MARKINGS] = LoopedTask_OpenMonMarkingsWindow, - [PARTY_CONDITION_FUNC_CLOSE_MARKINGS] = LoopedTask_CloseMonMarkingsWindow -}; - -struct Pokenav7Struct -{ - u32 loopedTaskId; - u8 tilemapBuffers[3][BG_SCREEN_SIZE]; - u8 filler[2]; - u8 partyPokeballSpriteIds[10]; - u32 (*callback)(void); - s16 monTransitionX; - u8 monPicSpriteId; - u16 monPalIndex; - u16 monGfxTileStart; - void *unk181C; - u8 nameGenderWindowId; - u8 listIndexWindowId; - u8 unusedWindowId1; - u8 unusedWindowId2; - struct MonMarkingsMenu monMarks; - struct Sprite *monMarksSprite; - struct Sprite *conditionSparkleSprites[MAX_CONDITION_SPARKLES]; - u8 windowModeState; - u8 filler2[0x38ac - 0x2909]; -}; - -extern s8 GetMonMarkIndex(void); // This function's declaration here is s8 vs. u8 in pokenav_conditions_1.c - -u32 LoopedTask_OpenPartyConditionGraph(s32 state); -u32 GetPartyConditionLoopedTaskActive(void); -void CreateConditionMonPic(u8 var); -void CreateMonMarkingsOrPokeballIndicators(void); -void CopyUnusedConditionWindowsToVram(void); -bool32 UpdateConditionGraphWindows(u8 a0, u16 a1, bool8 a2); -void sub_81CEE44(void); -void DoConditionGraphTransition(void); -void sub_81CEEC8(void); -void sub_81CEE68(void); -void ToggleBg2(bool8 showBg); - -// code -bool32 OpenPartyConditionMenu(void) -{ - struct Pokenav7Struct *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MON_MARK_MENU, sizeof(struct Pokenav7Struct)); - - if (structPtr == NULL) - return FALSE; - - structPtr->monPicSpriteId = SPRITE_NONE; - structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_OpenPartyConditionGraph, 1); - structPtr->callback = GetPartyConditionLoopedTaskActive; - structPtr->windowModeState = 0; - return TRUE; -} - -void CreatePartyConditionLoopedTask(s32 id) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - structPtr->loopedTaskId = CreateLoopedTask(sPartyConditionLoopedTaskFuncs[id], 1); - structPtr->callback = GetPartyConditionLoopedTaskActive; -} - -u32 IsPartyConditionLoopedTaskActive(void) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - return structPtr->callback(); -} - -u32 GetPartyConditionLoopedTaskActive(void) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - return IsLoopedTaskActive(structPtr->loopedTaskId); -} - -u32 LoopedTask_OpenPartyConditionGraph(s32 state) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - switch (state) - { - case 0: - if (LoadPartyConditionMenuGfx() != TRUE) - return LT_PAUSE; - return LT_INC_AND_PAUSE; - case 1: - InitBgTemplates(sPartyConditionBgTemplates, ARRAY_COUNT(sPartyConditionBgTemplates)); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); - DecompressAndCopyTileDataToVram(3, gPokenavCondition_Gfx, 0, 0, 0); - return LT_INC_AND_PAUSE; - case 2: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - DecompressAndCopyTileDataToVram(2, gUnknown_08623228, 0, 0, 0); - return LT_INC_AND_PAUSE; - case 3: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - - LZ77UnCompVram(gPokenavCondition_Tilemap, structPtr->tilemapBuffers[0]); - SetBgTilemapBuffer(3, structPtr->tilemapBuffers[0]); - if (IsConditionMenuSearchMode() == TRUE) - CopyToBgTilemapBufferRect(3, gPokenavOptions_Tilemap, 0, 5, 9, 4); - - CopyBgTilemapBufferToVram(3); - CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20); - CopyPaletteIntoBufferUnfaded(gConditionText_Pal, 0xF0, 0x20); - structPtr->monTransitionX = -80; - return LT_INC_AND_PAUSE; - case 4: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - - LZ77UnCompVram(sConditionGraph_Tilemap, structPtr->tilemapBuffers[2]); - SetBgTilemapBuffer(2, structPtr->tilemapBuffers[2]); - CopyBgTilemapBufferToVram(2); - CopyPaletteIntoBufferUnfaded(gConditionGraphData_Pal, 0x30, 0x20); - SetConditionGraphIOWindows(2); - return LT_INC_AND_PAUSE; - case 5: - sub_8199DF0(1, 0, 0, 1); - sub_8199DF0(1, 17, 1, 1); - CpuFill32(0, structPtr->tilemapBuffers[1], BG_SCREEN_SIZE); - SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]); - return LT_INC_AND_PAUSE; - case 6: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - - structPtr->nameGenderWindowId = AddWindow(&sMonNameGenderWindowTemplate); - if (IsConditionMenuSearchMode() == TRUE) - { - structPtr->listIndexWindowId = AddWindow(&sConditionGraphListIdWindowTemplate); - structPtr->unusedWindowId1 = AddWindow(&sUnusedWindowTemplate1); - structPtr->unusedWindowId2 = AddWindow(&sUnusedWindowTemplate2); - } - DeactivateAllTextPrinters(); - return LT_INC_AND_PAUSE; - case 7: - CreateConditionMonPic(0); - return LT_INC_AND_PAUSE; - case 8: - CreateMonMarkingsOrPokeballIndicators(); - return LT_INC_AND_PAUSE; - case 9: - if (IsConditionMenuSearchMode() == TRUE) - CopyUnusedConditionWindowsToVram(); - return LT_INC_AND_PAUSE; - case 10: - UpdateConditionGraphWindows(0, GetMonMarkIndex(), TRUE); - return LT_INC_AND_PAUSE; - case 11: - UpdateConditionGraphWindows(1, GetMonMarkIndex(), TRUE); - return LT_INC_AND_PAUSE; - case 12: - UpdateConditionGraphWindows(2, GetMonMarkIndex(), TRUE); - return LT_INC_AND_PAUSE; - case 13: - if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), TRUE) != TRUE) - return LT_PAUSE; - PutWindowTilemap(structPtr->nameGenderWindowId); - if (IsConditionMenuSearchMode() == TRUE) - { - PutWindowTilemap(structPtr->listIndexWindowId); - PutWindowTilemap(structPtr->unusedWindowId1); - PutWindowTilemap(structPtr->unusedWindowId2); - } - return LT_INC_AND_PAUSE; - case 14: - ShowBg(1); - HideBg(2); - ShowBg(3); - if (IsConditionMenuSearchMode() == TRUE) - PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); - return LT_INC_AND_PAUSE; - case 15: - PokenavFadeScreen(1); - if (!IsConditionMenuSearchMode()) - { - LoadLeftHeaderGfxForIndex(POKENAV_GFX_PARTY_MENU); - ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, TRUE, 0); - ShowLeftHeaderGfx(POKENAV_GFX_PARTY_MENU, TRUE, 0); - } - return LT_INC_AND_PAUSE; - case 16: - if (IsPaletteFadeActive()) - return LT_PAUSE; - if (!IsConditionMenuSearchMode() && AreLeftHeaderSpritesMoving()) - return LT_PAUSE; - SetVBlankCallback_(sub_81CEE44); - return LT_INC_AND_PAUSE; - case 17: - DoConditionGraphTransition(); - InitConditionGraphState(GetConditionGraphDataPtr()); - return LT_INC_AND_PAUSE; - case 18: - if (SetupConditionGraphScanlineParams(GetConditionGraphDataPtr())) - return LT_PAUSE; - return LT_INC_AND_PAUSE; - case 19: - ToggleBg2(TRUE); - return LT_INC_AND_PAUSE; - case 20: - if (!TryUpdateConditionMonTransitionOn(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) - { - ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); - if (IsConditionMenuSearchMode() == TRUE || GetConditionGraphCurrentMonIndex() != GetMonListCount()) - CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); - - return LT_FINISH; - } - return LT_PAUSE; - } - - return LT_FINISH; -} - -u32 LoopedTask_ExitPartyConditionMenu(s32 state) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - switch (state) - { - case 0: - sub_81CEEC8(); - DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); - return LT_INC_AND_CONTINUE; - case 1: - if (TryUpdateConditionMonTransitionOff(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) - return 2; - ToggleBg2(FALSE); - return LT_INC_AND_CONTINUE; - case 2: - PokenavFadeScreen(0); - if (!IsConditionMenuSearchMode()) - SlideMenuHeaderDown(); - return LT_INC_AND_PAUSE; - case 3: - if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) - return LT_PAUSE; - FreeConditionSparkles(structPtr->conditionSparkleSprites); - HideBg(1); - HideBg(2); - HideBg(3); - return LT_INC_AND_CONTINUE; - } - - return LT_FINISH; -} - -u32 LoopedTask_TransitionMons(s32 state) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - struct ConditionGraph *unkPtr = GetConditionGraphDataPtr(); - - switch (state) - { - case 0: - SetConditionGraphData(0); - return LT_INC_AND_CONTINUE; - case 1: - SetConditionGraphData(1); - return LT_INC_AND_CONTINUE; - case 2: - SetConditionGraphData(2); - DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); - return LT_INC_AND_CONTINUE; - case 3: - TransitionConditionGraph(unkPtr); - return LT_INC_AND_CONTINUE; - case 4: - if (!MoveConditionMonOffscreen(&structPtr->monTransitionX)) - { - CreateConditionMonPic(GetMonMarkIndex()); - return LT_INC_AND_CONTINUE; - } - return LT_PAUSE; - case 5: - UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 6: - UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 7: - UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 8: - if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) - return LT_INC_AND_CONTINUE; - return LT_PAUSE; - case 9: - unkPtr = GetConditionGraphDataPtr(); - if (!TryUpdateConditionMonTransitionOn(unkPtr, &structPtr->monTransitionX)) - { - ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); - if (IsConditionMenuSearchMode() != TRUE && GetConditionGraphCurrentMonIndex() == GetMonListCount()) - return LT_INC_AND_CONTINUE; - - CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); - return LT_INC_AND_CONTINUE; - } - return LT_PAUSE; - } - - return LT_FINISH; -} - -u32 LoopedTask_MoveCursorNoTransition(s32 state) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - switch (state) - { - case 0: - SetConditionGraphData(0); - return LT_INC_AND_CONTINUE; - case 1: - SetConditionGraphData(1); - return LT_INC_AND_CONTINUE; - case 2: - SetConditionGraphData(2); - return LT_INC_AND_CONTINUE; - case 3: - CreateConditionMonPic(GetMonMarkIndex()); - return LT_INC_AND_CONTINUE; - case 4: - UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 5: - UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 6: - UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 7: - if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) - return LT_INC_AND_CONTINUE; - return LT_PAUSE; - case 8: - if (!TryUpdateConditionMonTransitionOn(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) - { - ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); - CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); - return LT_INC_AND_CONTINUE; - } - return LT_PAUSE; - } - - return LT_FINISH; -} - -u32 LoopedTask_SlideMonOut(s32 state) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - switch (state) - { - case 0: - SetConditionGraphData(0); - return LT_INC_AND_CONTINUE; - case 1: - SetConditionGraphData(1); - return LT_INC_AND_CONTINUE; - case 2: - SetConditionGraphData(2); - DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); - return LT_INC_AND_CONTINUE; - case 3: - if (!TryUpdateConditionMonTransitionOff(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) - return LT_INC_AND_CONTINUE; - return LT_PAUSE; - case 4: - UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 5: - UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 6: - UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 7: - if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) - return LT_INC_AND_CONTINUE; - return LT_PAUSE; - } - - return LT_FINISH; -} - -u32 LoopedTask_OpenMonMarkingsWindow(s32 state) -{ - switch (state) - { - case 0: - OpenMonMarkingsMenu(TryGetMonMarkId(), 176, 32); - return LT_INC_AND_CONTINUE; - case 1: - PrintHelpBarText(HELPBAR_CONDITION_MARKINGS); - return LT_INC_AND_CONTINUE; - case 2: - if (WaitForHelpBar() == TRUE) - return LT_PAUSE; - return LT_INC_AND_CONTINUE; - } - - return LT_FINISH; -} - -u32 LoopedTask_CloseMonMarkingsWindow(s32 state) -{ - switch (state) - { - case 0: - FreeMonMarkingsMenu(); - return LT_INC_AND_CONTINUE; - case 1: - PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); - return LT_INC_AND_CONTINUE; - case 2: - if (WaitForHelpBar() == TRUE) - return LT_PAUSE; - return LT_INC_AND_CONTINUE; - } - - return LT_FINISH; -} - -static u8 *UnusedPrintNumberString(u8 *dst, u16 num) -{ - u8 *txtPtr = ConvertIntToDecimalStringN(dst, num, STR_CONV_MODE_RIGHT_ALIGN, 4); - txtPtr = StringCopy(txtPtr, gText_Number2); - - return txtPtr; -} - -bool32 UpdateConditionGraphWindows(u8 mode, u16 bufferIndex, bool8 winMode) -{ - u8 text[32]; - const u8 *str; - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - switch (mode) - { - case 0: - FillWindowPixelBuffer(structPtr->nameGenderWindowId, 0); - if (IsConditionMenuSearchMode() == TRUE) - FillWindowPixelBuffer(structPtr->listIndexWindowId, 0); - break; - case 1: - if (GetConditionGraphCurrentMonIndex() != GetMonListCount() - 1 || IsConditionMenuSearchMode() == TRUE) - { - str = GetConditionMonNameBuffer(bufferIndex); - AddTextPrinterParameterized(structPtr->nameGenderWindowId, 1, str, 0, 1, 0, NULL); - } - break; - case 2: - if (IsConditionMenuSearchMode() == TRUE) - { - str = GetConditionMonLocationBuffer(bufferIndex); - AddTextPrinterParameterized(structPtr->nameGenderWindowId, 1, str, 0, 17, 0, NULL); - text[0] = EXT_CTRL_CODE_BEGIN; - text[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - text[2] = TEXT_COLOR_BLUE; - text[3] = TEXT_COLOR_TRANSPARENT; - text[4] = TEXT_COLOR_LIGHT_BLUE; - StringCopy(text + 5, gText_Number2); - AddTextPrinterParameterized(structPtr->listIndexWindowId, 1, text, 4, 1, 0, NULL); - ConvertIntToDecimalStringN(text + 5, GetConditionMonDataBuffer(), STR_CONV_MODE_RIGHT_ALIGN, 4); - AddTextPrinterParameterized(structPtr->listIndexWindowId, 1, text, 28, 1, 0, NULL); - } - break; - case 3: - switch (structPtr->windowModeState) - { - case 0: - if (winMode) - CopyWindowToVram(structPtr->nameGenderWindowId, 3); - else - CopyWindowToVram(structPtr->nameGenderWindowId, 2); - - if (IsConditionMenuSearchMode() == TRUE) - { - structPtr->windowModeState++; - return FALSE; - } - else - { - structPtr->windowModeState = 0; - return TRUE; - } - case 1: - if (winMode) - CopyWindowToVram(structPtr->listIndexWindowId, 3); - else - CopyWindowToVram(structPtr->listIndexWindowId, 2); - - structPtr->windowModeState = 0; - return TRUE; - } - } - - return FALSE; -} - -void CopyUnusedConditionWindowsToVram(void) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - CopyWindowToVram(structPtr->unusedWindowId1, 3); - CopyWindowToVram(structPtr->unusedWindowId2, 3); -} - -void sub_81CE964(struct Sprite *sprite) -{ - if (sprite->data[0] == GetConditionGraphCurrentMonIndex()) - StartSpriteAnim(sprite, 0); - else - StartSpriteAnim(sprite, 1); -} - -void HighlightCurrentPartyIndexPokeball(struct Sprite *sprite) -{ - if (GetConditionGraphCurrentMonIndex() == GetMonListCount() - 1) - sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x65); - else - sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x66); -} - -void MonMarkingsCallback(struct Sprite *sprite) -{ - StartSpriteAnim(sprite, TryGetMonMarkId()); -} - -void CreateMonMarkingsOrPokeballIndicators(void) -{ - struct SpriteSheet sprSheets[4]; - struct SpriteTemplate sprTemplate; - struct SpritePalette sprPals[3]; - struct SpriteSheet sprSheet; - struct Sprite *sprite; - u16 i, spriteId; - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - LoadConditionSelectionIcons(sprSheets, &sprTemplate, sprPals); - if (IsConditionMenuSearchMode() == TRUE) - { - structPtr->monMarks.baseTileTag = 0x6A; - structPtr->monMarks.basePaletteTag = 0x6A; - InitMonMarkingsMenu(&structPtr->monMarks); - BufferMonMarkingsMenuTiles(); - sprite = CreateMonMarkingAllCombosSprite(0x69, 0x69, sConditionGraphMonMarkingsPal); - sprite->oam.priority = 3; - sprite->x = 192; - sprite->y = 32; - sprite->callback = MonMarkingsCallback; - structPtr->monMarksSprite = sprite; - PokenavFillPalette(IndexOfSpritePaletteTag(0x69), 0); - } - else - { - // party mode -> add pokeballs on right hand side - LoadSpriteSheets(sprSheets); - Pokenav_AllocAndLoadPalettes(sprPals); - for (i = 0; i < GetMonListCount() - 1; i++) - { - spriteId = CreateSprite(&sprTemplate, 226, (i * 20) + 8, 0); - if (spriteId != MAX_SPRITES) - { - structPtr->partyPokeballSpriteIds[i] = spriteId; - gSprites[spriteId].data[0] = i; - gSprites[spriteId].callback = sub_81CE964; - } - else - { - structPtr->partyPokeballSpriteIds[i] = SPRITE_NONE; - } - } - - sprTemplate.tileTag = 0x67; - sprTemplate.callback = SpriteCallbackDummy; - for (; i < 6; i++) - { - spriteId = CreateSprite(&sprTemplate, 230, (i * 20) + 8, 0); - if (spriteId != MAX_SPRITES) - { - structPtr->partyPokeballSpriteIds[i] = spriteId; - gSprites[spriteId].oam.size = 0; - } - else - { - structPtr->partyPokeballSpriteIds[i] = SPRITE_NONE; - } - } - - sprTemplate.tileTag = 0x66; - sprTemplate.callback = HighlightCurrentPartyIndexPokeball; - spriteId = CreateSprite(&sprTemplate, 222, (i * 20) + 8, 0); - if (spriteId != MAX_SPRITES) - { - structPtr->partyPokeballSpriteIds[i] = spriteId; - gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16); - gSprites[spriteId].oam.size = SPRITE_SIZE(32x16); - } - else - { - structPtr->partyPokeballSpriteIds[i] = SPRITE_NONE; - } - } - - LoadConditionSparkle(&sprSheet, &sprPals[0]); - LoadSpriteSheet(&sprSheet); - sprPals[1].data = NULL; - Pokenav_AllocAndLoadPalettes(sprPals); -} - -void sub_81CEBF4(struct Pokenav7Struct *structPtr) -{ - u8 i; - - if (IsConditionMenuSearchMode() == TRUE) - { - DestroySprite(structPtr->monMarksSprite); - FreeSpriteTilesByTag(0x6A); - FreeSpriteTilesByTag(0x69); - FreeSpritePaletteByTag(0x6A); - FreeSpritePaletteByTag(0x69); - } - else - { - for (i = 0; i < 7; i++) - DestroySprite(&gSprites[structPtr->partyPokeballSpriteIds[i]]); - - FreeSpriteTilesByTag(0x65); - FreeSpriteTilesByTag(0x66); - FreeSpriteTilesByTag(0x67); - FreeSpritePaletteByTag(0x65); - FreeSpritePaletteByTag(0x66); - } - - if (structPtr->monPicSpriteId != SPRITE_NONE) - { - DestroySprite(&gSprites[structPtr->monPicSpriteId]); - FreeSpriteTilesByTag(0x64); - FreeSpritePaletteByTag(0x64); - } -} - -void FreePartyConditionSubstruct2(void) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - RemoveWindow(structPtr->nameGenderWindowId); - if (IsConditionMenuSearchMode() == TRUE) - { - RemoveWindow(structPtr->listIndexWindowId); - RemoveWindow(structPtr->unusedWindowId1); - RemoveWindow(structPtr->unusedWindowId2); - } - else - { - SetLeftHeaderSpritesInvisibility(); - } - - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP); - sub_81CEBF4(structPtr); - sub_81CEE68(); - FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_MARK_MENU); -} - -void MonPicGfxSpriteCallback(struct Sprite *sprite) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - sprite->x = structPtr->monTransitionX + 38; -} - -void CreateConditionMonPic(u8 id) -{ - struct SpriteTemplate sprTemplate; - struct SpriteSheet sprSheet; - struct SpritePalette sprPal; - u8 spriteId; - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - if (structPtr->monPicSpriteId == SPRITE_NONE) - { - LoadConditionMonPicTemplate(&sprSheet, &sprTemplate, &sprPal); - sprSheet.data = GetConditionMonPicGfx(id); - sprPal.data = GetConditionMonPal(id); - structPtr->monPalIndex = LoadSpritePalette(&sprPal); - structPtr->monGfxTileStart = LoadSpriteSheet(&sprSheet); - spriteId = CreateSprite(&sprTemplate, 38, 104, 0); - structPtr->monPicSpriteId = spriteId; - if (spriteId == MAX_SPRITES) - { - FreeSpriteTilesByTag(0x64); - FreeSpritePaletteByTag(0x64); - structPtr->monPicSpriteId = SPRITE_NONE; - } - else - { - structPtr->monPicSpriteId = spriteId; - gSprites[structPtr->monPicSpriteId].callback = MonPicGfxSpriteCallback; - structPtr->unk181C = (void*)(VRAM) + 0x10000 + (structPtr->monGfxTileStart * 32); - structPtr->monPalIndex = (structPtr->monPalIndex * 16) + 0x100; - } - } - else - { - DmaCopy16Defvars(3, GetConditionMonPicGfx(id), structPtr->unk181C, MON_PIC_SIZE); - LoadPalette(GetConditionMonPal(id), structPtr->monPalIndex, 0x20); - } -} - -void sub_81CEE44(void) -{ - struct ConditionGraph *unk = GetConditionGraphDataPtr(); - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - sub_81D2108(unk); - ScanlineEffect_InitHBlankDmaTransfer(); -} - -void sub_81CEE68(void) -{ - SetPokenavVBlankCallback(); -} - -void ToggleBg2(bool8 showBg) -{ - if (showBg) - ShowBg(2); - else - HideBg(2); -} - -void DoConditionGraphTransition(void) -{ - struct ConditionGraph *conditionPtr = GetConditionGraphDataPtr(); - u8 id = GetMonMarkIndex(); - - gUnknown_030012BC = id; - sub_81D1F84(conditionPtr, conditionPtr->unk14[3], conditionPtr->unk14[id]); - TransitionConditionGraph(conditionPtr); -} - -void sub_81CEEC8(void) -{ - struct ConditionGraph *conditionPtr = GetConditionGraphDataPtr(); - - if (IsConditionMenuSearchMode() || GetConditionGraphCurrentMonIndex() != GetMonListCount() - 1) - sub_81D1F84(conditionPtr, conditionPtr->unk14[GetMonMarkIndex()], conditionPtr->unk14[3]); -} - -u8 GetMonMarkingsData(void) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - if (IsConditionMenuSearchMode() == 1) - return structPtr->monMarks.markings; - else - return 0; -} diff --git a/src/pokenav_conditions_gfx.c b/src/pokenav_conditions_gfx.c new file mode 100644 index 0000000000..5631f5bb2a --- /dev/null +++ b/src/pokenav_conditions_gfx.c @@ -0,0 +1,892 @@ +#include "global.h" +#include "bg.h" +#include "window.h" +#include "pokenav.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "menu.h" +#include "menu_specialized.h" +#include "mon_markings.h" +#include "palette.h" +#include "pokenav.h" +#include "scanline_effect.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" + +static u32 LoopedTask_TransitionMons(s32); +static u32 LoopedTask_ExitConditionGraphMenu(s32); +static u32 LoopedTask_MoveCursorNoTransition(s32); +static u32 LoopedTask_SlideMonOut(s32); +static u32 LoopedTask_OpenMonMarkingsWindow(s32); +static u32 LoopedTask_CloseMonMarkingsWindow(s32); + +static u8 sInitialLoadId; // Never read + +const u16 gConditionGraphData_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph_data.gbapal"); +const u16 gConditionText_Pal[] = INCBIN_U16("graphics/pokenav/condition/text.gbapal"); +static const u32 sConditionGraphData_Gfx[] = INCBIN_U32("graphics/pokenav/condition/graph_data.4bpp.lz"); +static const u32 sConditionGraphData_Tilemap[] = INCBIN_U32("graphics/pokenav/condition/graph_data.bin.lz"); +static const u16 sMonMarkings_Pal[] = INCBIN_U16("graphics/pokenav/condition/mon_markings.gbapal"); + +static const struct BgTemplate sMenuBgTemplates[3] = +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 3, + .mapBaseIndex = 0x1D, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 0x1E, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +static const struct WindowTemplate sMonNameGenderWindowTemplate = +{ + .bg = 1, + .tilemapLeft = 13, + .tilemapTop = 1, + .width = 13, + .height = 4, + .paletteNum = 15, + .baseBlock = 2 +}; + +static const struct WindowTemplate sListIndexWindowTemplate = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 7, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x36 +}; + +static const struct WindowTemplate sUnusedWindowTemplate1 = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 0x1C, + .width = 5, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x44 +}; + +static const struct WindowTemplate sUnusedWindowTemplate2 = +{ + .bg = 1, + .tilemapLeft = 13, + .tilemapTop = 0x1C, + .width = 3, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x44 +}; + +static const LoopedTask sLoopedTaskFuncs[] = +{ + [CONDITION_FUNC_NONE] = NULL, + [CONDITION_FUNC_SLIDE_MON_IN] = LoopedTask_TransitionMons, + [CONDITION_FUNC_RETURN] = LoopedTask_ExitConditionGraphMenu, + [CONDITION_FUNC_NO_TRANSITION] = LoopedTask_MoveCursorNoTransition, + [CONDITION_FUNC_SLIDE_MON_OUT] = LoopedTask_SlideMonOut, + [CONDITION_FUNC_ADD_MARKINGS] = LoopedTask_OpenMonMarkingsWindow, + [CONDITION_FUNC_CLOSE_MARKINGS] = LoopedTask_CloseMonMarkingsWindow +}; + +struct Pokenav_ConditionMenuGfx +{ + u32 loopedTaskId; + u8 tilemapBuffers[3][BG_SCREEN_SIZE]; + u8 filler[2]; + u8 partyPokeballSpriteIds[PARTY_SIZE + 1]; + u32 (*callback)(void); + s16 monTransitionX; + u8 monPicSpriteId; + u16 monPalIndex; + u16 monGfxTileStart; + void *monGfxPtr; + u8 nameGenderWindowId; + u8 listIndexWindowId; + u8 unusedWindowId1; + u8 unusedWindowId2; + struct MonMarkingsMenu marksMenu; + struct Sprite *monMarksSprite; + struct Sprite *conditionSparkleSprites[MAX_CONDITION_SPARKLES]; + u8 windowModeState; + u8 filler2[0xFA3]; +}; + +extern s8 GetConditionGraphMenuCurrentLoadIndex(void); // This function's declaration here is s8 vs. u8 in pokenav_conditions.c + +static u32 LoopedTask_OpenConditionGraphMenu(s32); +static u32 GetConditionGraphMenuLoopedTaskActive(void); +static void CreateConditionMonPic(u8); +static void CreateMonMarkingsOrPokeballIndicators(void); +static void CopyUnusedConditionWindowsToVram(void); +static bool32 UpdateConditionGraphMenuWindows(u8, u16, bool8); +static void VBlankCB_PokenavConditionGraph(void); +static void DoConditionGraphEnterTransition(void); +static void DoConditionGraphExitTransition(void); +static void SetExitVBlank(void); +static void ToggleGraphData(bool8); + +bool32 OpenConditionGraphMenu(void) +{ + struct Pokenav_ConditionMenuGfx *menu = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX, sizeof(struct Pokenav_ConditionMenuGfx)); + + if (menu == NULL) + return FALSE; + + menu->monPicSpriteId = SPRITE_NONE; + menu->loopedTaskId = CreateLoopedTask(LoopedTask_OpenConditionGraphMenu, 1); + menu->callback = GetConditionGraphMenuLoopedTaskActive; + menu->windowModeState = 0; + return TRUE; +} + +void CreateConditionGraphMenuLoopedTask(s32 id) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + menu->loopedTaskId = CreateLoopedTask(sLoopedTaskFuncs[id], 1); + menu->callback = GetConditionGraphMenuLoopedTaskActive; +} + +u32 IsConditionGraphMenuLoopedTaskActive(void) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + return menu->callback(); +} + +static u32 GetConditionGraphMenuLoopedTaskActive(void) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + return IsLoopedTaskActive(menu->loopedTaskId); +} + +static u32 LoopedTask_OpenConditionGraphMenu(s32 state) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + switch (state) + { + case 0: + if (LoadConditionGraphMenuGfx() != TRUE) + return LT_PAUSE; + return LT_INC_AND_PAUSE; + case 1: + InitBgTemplates(sMenuBgTemplates, ARRAY_COUNT(sMenuBgTemplates)); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + DecompressAndCopyTileDataToVram(3, gPokenavCondition_Gfx, 0, 0, 0); + return LT_INC_AND_PAUSE; + case 2: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + DecompressAndCopyTileDataToVram(2, sConditionGraphData_Gfx, 0, 0, 0); + return LT_INC_AND_PAUSE; + case 3: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + + LZ77UnCompVram(gPokenavCondition_Tilemap, menu->tilemapBuffers[0]); + SetBgTilemapBuffer(3, menu->tilemapBuffers[0]); + if (IsConditionMenuSearchMode() == TRUE) + CopyToBgTilemapBufferRect(3, gPokenavOptions_Tilemap, 0, 5, 9, 4); + + CopyBgTilemapBufferToVram(3); + CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(gConditionText_Pal, 0xF0, 0x20); + menu->monTransitionX = -80; + return LT_INC_AND_PAUSE; + case 4: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + + LZ77UnCompVram(sConditionGraphData_Tilemap, menu->tilemapBuffers[2]); + SetBgTilemapBuffer(2, menu->tilemapBuffers[2]); + CopyBgTilemapBufferToVram(2); + CopyPaletteIntoBufferUnfaded(gConditionGraphData_Pal, 0x30, 0x20); + ConditionGraph_InitWindow(2); + return LT_INC_AND_PAUSE; + case 5: + BgDmaFill(1, 0, 0, 1); + BgDmaFill(1, 17, 1, 1); + CpuFill32(0, menu->tilemapBuffers[1], BG_SCREEN_SIZE); + SetBgTilemapBuffer(1, menu->tilemapBuffers[1]); + return LT_INC_AND_PAUSE; + case 6: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + + menu->nameGenderWindowId = AddWindow(&sMonNameGenderWindowTemplate); + if (IsConditionMenuSearchMode() == TRUE) + { + menu->listIndexWindowId = AddWindow(&sListIndexWindowTemplate); + menu->unusedWindowId1 = AddWindow(&sUnusedWindowTemplate1); + menu->unusedWindowId2 = AddWindow(&sUnusedWindowTemplate2); + } + DeactivateAllTextPrinters(); + return LT_INC_AND_PAUSE; + case 7: + CreateConditionMonPic(0); + return LT_INC_AND_PAUSE; + case 8: + CreateMonMarkingsOrPokeballIndicators(); + return LT_INC_AND_PAUSE; + case 9: + if (IsConditionMenuSearchMode() == TRUE) + CopyUnusedConditionWindowsToVram(); + return LT_INC_AND_PAUSE; + case 10: + UpdateConditionGraphMenuWindows(0, GetConditionGraphMenuCurrentLoadIndex(), TRUE); + return LT_INC_AND_PAUSE; + case 11: + UpdateConditionGraphMenuWindows(1, GetConditionGraphMenuCurrentLoadIndex(), TRUE); + return LT_INC_AND_PAUSE; + case 12: + UpdateConditionGraphMenuWindows(2, GetConditionGraphMenuCurrentLoadIndex(), TRUE); + return LT_INC_AND_PAUSE; + case 13: + if (UpdateConditionGraphMenuWindows(3, GetConditionGraphMenuCurrentLoadIndex(), TRUE) != TRUE) + return LT_PAUSE; + PutWindowTilemap(menu->nameGenderWindowId); + if (IsConditionMenuSearchMode() == TRUE) + { + PutWindowTilemap(menu->listIndexWindowId); + PutWindowTilemap(menu->unusedWindowId1); + PutWindowTilemap(menu->unusedWindowId2); + } + return LT_INC_AND_PAUSE; + case 14: + ShowBg(1); + HideBg(2); + ShowBg(3); + if (IsConditionMenuSearchMode() == TRUE) + PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); + return LT_INC_AND_PAUSE; + case 15: + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); + if (!IsConditionMenuSearchMode()) + { + LoadLeftHeaderGfxForIndex(POKENAV_GFX_PARTY_MENU); + ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, TRUE, FALSE); + ShowLeftHeaderGfx(POKENAV_GFX_PARTY_MENU, TRUE, FALSE); + } + return LT_INC_AND_PAUSE; + case 16: + if (IsPaletteFadeActive()) + return LT_PAUSE; + if (!IsConditionMenuSearchMode() && AreLeftHeaderSpritesMoving()) + return LT_PAUSE; + SetVBlankCallback_(VBlankCB_PokenavConditionGraph); + return LT_INC_AND_PAUSE; + case 17: + DoConditionGraphEnterTransition(); + ConditionGraph_InitResetScanline(GetConditionGraphPtr()); + return LT_INC_AND_PAUSE; + case 18: + if (ConditionGraph_ResetScanline(GetConditionGraphPtr())) + return LT_PAUSE; + return LT_INC_AND_PAUSE; + case 19: + ToggleGraphData(TRUE); + return LT_INC_AND_PAUSE; + case 20: + if (!ConditionMenu_UpdateMonEnter(GetConditionGraphPtr(), &menu->monTransitionX)) + { + ResetConditionSparkleSprites(menu->conditionSparkleSprites); + if (IsConditionMenuSearchMode() == TRUE || GetConditionGraphCurrentListIndex() != GetMonListCount()) + CreateConditionSparkleSprites(menu->conditionSparkleSprites, menu->monPicSpriteId, GetNumConditionMonSparkles()); + + return LT_FINISH; + } + return LT_PAUSE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_ExitConditionGraphMenu(s32 state) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + switch (state) + { + case 0: + DoConditionGraphExitTransition(); + DestroyConditionSparkleSprites(menu->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; + case 1: + if (ConditionMenu_UpdateMonExit(GetConditionGraphPtr(), &menu->monTransitionX)) + return 2; + ToggleGraphData(FALSE); + return LT_INC_AND_CONTINUE; + case 2: + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); + if (!IsConditionMenuSearchMode()) + SlideMenuHeaderDown(); + return LT_INC_AND_PAUSE; + case 3: + if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) + return LT_PAUSE; + FreeConditionSparkles(menu->conditionSparkleSprites); + HideBg(1); + HideBg(2); + HideBg(3); + return LT_INC_AND_CONTINUE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_TransitionMons(s32 state) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + struct ConditionGraph *graph = GetConditionGraphPtr(); + + switch (state) + { + case 0: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_INFO); + return LT_INC_AND_CONTINUE; + case 1: + LoadNextConditionMenuMonData(CONDITION_LOAD_GRAPH); + return LT_INC_AND_CONTINUE; + case 2: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_PIC); + DestroyConditionSparkleSprites(menu->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; + case 3: + ConditionGraph_TryUpdate(graph); + return LT_INC_AND_CONTINUE; + case 4: + if (!MoveConditionMonOffscreen(&menu->monTransitionX)) + { + CreateConditionMonPic(GetConditionGraphMenuCurrentLoadIndex()); + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + case 5: + UpdateConditionGraphMenuWindows(0, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 6: + UpdateConditionGraphMenuWindows(1, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 7: + UpdateConditionGraphMenuWindows(2, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 8: + if (UpdateConditionGraphMenuWindows(3, GetConditionGraphMenuCurrentLoadIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; + case 9: + graph = GetConditionGraphPtr(); + if (!ConditionMenu_UpdateMonEnter(graph, &menu->monTransitionX)) + { + ResetConditionSparkleSprites(menu->conditionSparkleSprites); + if (IsConditionMenuSearchMode() != TRUE && GetConditionGraphCurrentListIndex() == GetMonListCount()) + return LT_INC_AND_CONTINUE; + + CreateConditionSparkleSprites(menu->conditionSparkleSprites, menu->monPicSpriteId, GetNumConditionMonSparkles()); + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_MoveCursorNoTransition(s32 state) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + switch (state) + { + case 0: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_INFO); + return LT_INC_AND_CONTINUE; + case 1: + LoadNextConditionMenuMonData(CONDITION_LOAD_GRAPH); + return LT_INC_AND_CONTINUE; + case 2: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_PIC); + return LT_INC_AND_CONTINUE; + case 3: + CreateConditionMonPic(GetConditionGraphMenuCurrentLoadIndex()); + return LT_INC_AND_CONTINUE; + case 4: + UpdateConditionGraphMenuWindows(0, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 5: + UpdateConditionGraphMenuWindows(1, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 6: + UpdateConditionGraphMenuWindows(2, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 7: + if (UpdateConditionGraphMenuWindows(3, GetConditionGraphMenuCurrentLoadIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; + case 8: + if (!ConditionMenu_UpdateMonEnter(GetConditionGraphPtr(), &menu->monTransitionX)) + { + ResetConditionSparkleSprites(menu->conditionSparkleSprites); + CreateConditionSparkleSprites(menu->conditionSparkleSprites, menu->monPicSpriteId, GetNumConditionMonSparkles()); + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_SlideMonOut(s32 state) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + switch (state) + { + case 0: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_INFO); + return LT_INC_AND_CONTINUE; + case 1: + LoadNextConditionMenuMonData(CONDITION_LOAD_GRAPH); + return LT_INC_AND_CONTINUE; + case 2: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_PIC); + DestroyConditionSparkleSprites(menu->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; + case 3: + if (!ConditionMenu_UpdateMonExit(GetConditionGraphPtr(), &menu->monTransitionX)) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; + case 4: + UpdateConditionGraphMenuWindows(0, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 5: + UpdateConditionGraphMenuWindows(1, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 6: + UpdateConditionGraphMenuWindows(2, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 7: + if (UpdateConditionGraphMenuWindows(3, GetConditionGraphMenuCurrentLoadIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_OpenMonMarkingsWindow(s32 state) +{ + switch (state) + { + case 0: + OpenMonMarkingsMenu(TryGetMonMarkId(), 176, 32); + return LT_INC_AND_CONTINUE; + case 1: + PrintHelpBarText(HELPBAR_CONDITION_MARKINGS); + return LT_INC_AND_CONTINUE; + case 2: + if (WaitForHelpBar() == TRUE) + return LT_PAUSE; + return LT_INC_AND_CONTINUE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_CloseMonMarkingsWindow(s32 state) +{ + switch (state) + { + case 0: + FreeMonMarkingsMenu(); + return LT_INC_AND_CONTINUE; + case 1: + PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); + return LT_INC_AND_CONTINUE; + case 2: + if (WaitForHelpBar() == TRUE) + return LT_PAUSE; + return LT_INC_AND_CONTINUE; + } + + return LT_FINISH; +} + +static u8 *UnusedPrintNumberString(u8 *dst, u16 num) +{ + u8 *txtPtr = ConvertIntToDecimalStringN(dst, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + txtPtr = StringCopy(txtPtr, gText_Number2); + + return txtPtr; +} + +static bool32 UpdateConditionGraphMenuWindows(u8 mode, u16 bufferIndex, bool8 winMode) +{ + u8 text[32]; + const u8 *str; + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + switch (mode) + { + case 0: + FillWindowPixelBuffer(menu->nameGenderWindowId, 0); + if (IsConditionMenuSearchMode() == TRUE) + FillWindowPixelBuffer(menu->listIndexWindowId, 0); + break; + case 1: + if (GetConditionGraphCurrentListIndex() != GetMonListCount() - 1 || IsConditionMenuSearchMode() == TRUE) + { + str = GetConditionMonNameText(bufferIndex); + AddTextPrinterParameterized(menu->nameGenderWindowId, FONT_NORMAL, str, 0, 1, 0, NULL); + } + break; + case 2: + if (IsConditionMenuSearchMode() == TRUE) + { + str = GetConditionMonLocationText(bufferIndex); + AddTextPrinterParameterized(menu->nameGenderWindowId, FONT_NORMAL, str, 0, 17, 0, NULL); + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + text[2] = TEXT_COLOR_BLUE; + text[3] = TEXT_COLOR_TRANSPARENT; + text[4] = TEXT_COLOR_LIGHT_BLUE; + StringCopy(&text[5], gText_Number2); + AddTextPrinterParameterized(menu->listIndexWindowId, FONT_NORMAL, text, 4, 1, 0, NULL); + ConvertIntToDecimalStringN(&text[5], GetConditionMonDataBuffer(), STR_CONV_MODE_RIGHT_ALIGN, 4); + AddTextPrinterParameterized(menu->listIndexWindowId, FONT_NORMAL, text, 28, 1, 0, NULL); + } + break; + case 3: + switch (menu->windowModeState) + { + case 0: + if (winMode) + CopyWindowToVram(menu->nameGenderWindowId, COPYWIN_FULL); + else + CopyWindowToVram(menu->nameGenderWindowId, COPYWIN_GFX); + + if (IsConditionMenuSearchMode() == TRUE) + { + menu->windowModeState++; + return FALSE; + } + else + { + menu->windowModeState = 0; + return TRUE; + } + case 1: + if (winMode) + CopyWindowToVram(menu->listIndexWindowId, COPYWIN_FULL); + else + CopyWindowToVram(menu->listIndexWindowId, COPYWIN_GFX); + + menu->windowModeState = 0; + return TRUE; + } + } + + return FALSE; +} + +static void CopyUnusedConditionWindowsToVram(void) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + CopyWindowToVram(menu->unusedWindowId1, COPYWIN_FULL); + CopyWindowToVram(menu->unusedWindowId2, COPYWIN_FULL); +} + +static void SpriteCB_PartyPokeball(struct Sprite *sprite) +{ + if (sprite->data[0] == GetConditionGraphCurrentListIndex()) + StartSpriteAnim(sprite, CONDITION_ICON_SELECTED); + else + StartSpriteAnim(sprite, CONDITION_ICON_UNSELECTED); +} + +void HighlightCurrentPartyIndexPokeball(struct Sprite *sprite) +{ + if (GetConditionGraphCurrentListIndex() == GetMonListCount() - 1) + sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_CONDITION_BALL); + else + sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_CONDITION_CANCEL); +} + +void MonMarkingsCallback(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, TryGetMonMarkId()); +} + +static void CreateMonMarkingsOrPokeballIndicators(void) +{ + struct SpriteSheet sprSheets[4]; + struct SpriteTemplate sprTemplate; + struct SpritePalette sprPals[3]; + struct SpriteSheet sprSheet; + struct Sprite *sprite; + u16 i, spriteId; + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + LoadConditionSelectionIcons(sprSheets, &sprTemplate, sprPals); + if (IsConditionMenuSearchMode() == TRUE) + { + // Search Mode, load markings menu + menu->marksMenu.baseTileTag = TAG_CONDITION_MARKINGS_MENU; + menu->marksMenu.basePaletteTag = TAG_CONDITION_MARKINGS_MENU; + InitMonMarkingsMenu(&menu->marksMenu); + BufferMonMarkingsMenuTiles(); + sprite = CreateMonMarkingAllCombosSprite(TAG_CONDITION_MON_MARKINGS, TAG_CONDITION_MON_MARKINGS, sMonMarkings_Pal); + sprite->oam.priority = 3; + sprite->x = 192; + sprite->y = 32; + sprite->callback = MonMarkingsCallback; + menu->monMarksSprite = sprite; + PokenavFillPalette(IndexOfSpritePaletteTag(TAG_CONDITION_MON_MARKINGS), 0); + } + else + { + // Party Mode, load Pokéball selection icons + LoadSpriteSheets(sprSheets); + Pokenav_AllocAndLoadPalettes(sprPals); + + // Add icons for occupied slots + for (i = 0; i < GetMonListCount() - 1; i++) + { + spriteId = CreateSprite(&sprTemplate, 226, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + menu->partyPokeballSpriteIds[i] = spriteId; + gSprites[spriteId].data[0] = i; + gSprites[spriteId].callback = SpriteCB_PartyPokeball; + } + else + { + menu->partyPokeballSpriteIds[i] = SPRITE_NONE; + } + } + + // Add icons for empty slots + sprTemplate.tileTag = TAG_CONDITION_BALL_PLACEHOLDER; + sprTemplate.callback = SpriteCallbackDummy; + for (; i < PARTY_SIZE; i++) + { + spriteId = CreateSprite(&sprTemplate, 230, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + menu->partyPokeballSpriteIds[i] = spriteId; + gSprites[spriteId].oam.size = 0; + } + else + { + menu->partyPokeballSpriteIds[i] = SPRITE_NONE; + } + } + + // Add cancel icon + sprTemplate.tileTag = TAG_CONDITION_CANCEL; + sprTemplate.callback = HighlightCurrentPartyIndexPokeball; + spriteId = CreateSprite(&sprTemplate, 222, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + menu->partyPokeballSpriteIds[i] = spriteId; + gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16); + gSprites[spriteId].oam.size = SPRITE_SIZE(32x16); + } + else + { + menu->partyPokeballSpriteIds[i] = SPRITE_NONE; + } + } + + LoadConditionSparkle(&sprSheet, &sprPals[0]); + LoadSpriteSheet(&sprSheet); + sprPals[1].data = NULL; + Pokenav_AllocAndLoadPalettes(sprPals); +} + +static void FreeConditionMenuGfx(struct Pokenav_ConditionMenuGfx *menu) +{ + u8 i; + + if (IsConditionMenuSearchMode() == TRUE) + { + DestroySprite(menu->monMarksSprite); + FreeSpriteTilesByTag(TAG_CONDITION_MARKINGS_MENU); + FreeSpriteTilesByTag(TAG_CONDITION_MON_MARKINGS); + FreeSpritePaletteByTag(TAG_CONDITION_MARKINGS_MENU); + FreeSpritePaletteByTag(TAG_CONDITION_MON_MARKINGS); + } + else + { + for (i = 0; i < PARTY_SIZE + 1; i++) + DestroySprite(&gSprites[menu->partyPokeballSpriteIds[i]]); + + FreeSpriteTilesByTag(TAG_CONDITION_BALL); + FreeSpriteTilesByTag(TAG_CONDITION_CANCEL); + FreeSpriteTilesByTag(TAG_CONDITION_BALL_PLACEHOLDER); + FreeSpritePaletteByTag(TAG_CONDITION_BALL); + FreeSpritePaletteByTag(TAG_CONDITION_CANCEL); + } + + if (menu->monPicSpriteId != SPRITE_NONE) + { + DestroySprite(&gSprites[menu->monPicSpriteId]); + FreeSpriteTilesByTag(TAG_CONDITION_MON); + FreeSpritePaletteByTag(TAG_CONDITION_MON); + } +} + +void FreeConditionGraphMenuSubstruct2(void) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + RemoveWindow(menu->nameGenderWindowId); + if (IsConditionMenuSearchMode() == TRUE) + { + RemoveWindow(menu->listIndexWindowId); + RemoveWindow(menu->unusedWindowId1); + RemoveWindow(menu->unusedWindowId2); + } + else + { + SetLeftHeaderSpritesInvisibility(); + } + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP); + FreeConditionMenuGfx(menu); + SetExitVBlank(); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); +} + +void MonPicGfxSpriteCallback(struct Sprite *sprite) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + sprite->x = menu->monTransitionX + 38; +} + +static void CreateConditionMonPic(u8 id) +{ + struct SpriteTemplate sprTemplate; + struct SpriteSheet sprSheet; + struct SpritePalette sprPal; + u8 spriteId; + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + if (menu->monPicSpriteId == SPRITE_NONE) + { + LoadConditionMonPicTemplate(&sprSheet, &sprTemplate, &sprPal); + sprSheet.data = GetConditionMonPicGfx(id); + sprPal.data = GetConditionMonPal(id); + menu->monPalIndex = LoadSpritePalette(&sprPal); + menu->monGfxTileStart = LoadSpriteSheet(&sprSheet); + spriteId = CreateSprite(&sprTemplate, 38, 104, 0); + menu->monPicSpriteId = spriteId; + if (spriteId == MAX_SPRITES) + { + FreeSpriteTilesByTag(TAG_CONDITION_MON); + FreeSpritePaletteByTag(TAG_CONDITION_MON); + menu->monPicSpriteId = SPRITE_NONE; + } + else + { + menu->monPicSpriteId = spriteId; + gSprites[menu->monPicSpriteId].callback = MonPicGfxSpriteCallback; + menu->monGfxPtr = (void *)VRAM + BG_VRAM_SIZE + (menu->monGfxTileStart * 32); + menu->monPalIndex = (menu->monPalIndex * 16) + 0x100; + } + } + else + { + DmaCopy16Defvars(3, GetConditionMonPicGfx(id), menu->monGfxPtr, MON_PIC_SIZE); + LoadPalette(GetConditionMonPal(id), menu->monPalIndex, 0x20); + } +} + +static void VBlankCB_PokenavConditionGraph(void) +{ + struct ConditionGraph *graph = GetConditionGraphPtr(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ConditionGraph_Draw(graph); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +static void SetExitVBlank(void) +{ + SetPokenavVBlankCallback(); +} + +static void ToggleGraphData(bool8 showBg) +{ + if (showBg) + ShowBg(2); + else + HideBg(2); +} + +static void DoConditionGraphEnterTransition(void) +{ + struct ConditionGraph *graph = GetConditionGraphPtr(); + u8 id = GetConditionGraphMenuCurrentLoadIndex(); + + sInitialLoadId = id; + ConditionGraph_SetNewPositions(graph, graph->savedPositions[CONDITION_GRAPH_LOAD_MAX - 1], graph->savedPositions[id]); + ConditionGraph_TryUpdate(graph); +} + +// Transition the graph back to empty before exiting. +// This is skipped if the player is in party mode and the cursor +// is on Cancel, in which case the graph is already empty. +static void DoConditionGraphExitTransition(void) +{ + struct ConditionGraph *graph = GetConditionGraphPtr(); + + if (IsConditionMenuSearchMode() || GetConditionGraphCurrentListIndex() != GetMonListCount() - 1) + ConditionGraph_SetNewPositions(graph, graph->savedPositions[GetConditionGraphMenuCurrentLoadIndex()], graph->savedPositions[CONDITION_GRAPH_LOAD_MAX - 1]); +} + +u8 GetMonMarkingsData(void) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + if (IsConditionMenuSearchMode() == 1) + return menu->marksMenu.markings; + else + return 0; +} diff --git a/src/pokenav_conditions_3.c b/src/pokenav_conditions_search_results.c similarity index 50% rename from src/pokenav_conditions_3.c rename to src/pokenav_conditions_search_results.c index 712be6f695..f1d4421111 100644 --- a/src/pokenav_conditions_3.c +++ b/src/pokenav_conditions_search_results.c @@ -21,50 +21,50 @@ enum CONDITION_SEARCH_FUNC_SELECT_MON, }; -struct PokenavSub7 +struct Pokenav_SearchResults { - u32 (*callback)(struct PokenavSub7 *); + u32 (*callback)(struct Pokenav_SearchResults *); u32 loopedTaskId; u8 fill1[4]; s32 boxId; s32 monId; u32 conditionDataId; - u32 returnFromGraph; - u32 isPartyCondition; - struct PokenavSub18 *monList; + bool32 returnFromGraph; + bool32 saveResultsList; + struct PokenavMonList *monList; }; -struct PokenavSub8 +struct Pokenav_SearchResultsGfx { bool32 (*callback)(void); - u32 ltid; //looped task Id + u32 loopedTaskId; u16 winid; bool32 fromGraph; u8 buff[BG_SCREEN_SIZE]; }; // size: 0x810 -static u32 HandleConditionSearchInput_WaitSetup(struct PokenavSub7 *structPtr); -static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr); -static u32 OpenConditionGraphFromSearchList(struct PokenavSub7 *structPtr); -static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr); -static u32 GetConditionSearchLoopedTask(s32 state); -static u32 BuildPartyMonSearchResults(s32 state); -static u32 InitBoxMonSearchResults(s32 state); -static u32 BuildBoxMonSearchResults(s32 state); -static u32 sub_81CF278(s32 state); -static u32 LoopedTask_MoveSearchListCursorUp(s32 state); -static u32 LoopedTask_MoveSearchListCursorDown(s32 state); -static u32 LoopedTask_MoveSearchListPageUp(s32 state); -static u32 LoopedTask_MoveSearchListPageDown(s32 state); -static u32 LoopedTask_ExitConditionSearchMenu(s32 state); -static u32 LoopedTask_SelectSearchResult(s32 state); -static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item); +static u32 HandleConditionSearchInput_WaitSetup(struct Pokenav_SearchResults *); +static u32 HandleConditionSearchInput(struct Pokenav_SearchResults *); +static u32 OpenConditionGraphFromSearchList(struct Pokenav_SearchResults *); +static u32 ReturnToConditionSearchList(struct Pokenav_SearchResults *); +static u32 GetConditionSearchLoopedTask(s32); +static u32 BuildPartyMonSearchResults(s32); +static u32 InitBoxMonSearchResults(s32); +static u32 BuildBoxMonSearchResults(s32); +static u32 ConvertConditionsToListRanks(s32); +static u32 LoopedTask_MoveSearchListCursorUp(s32); +static u32 LoopedTask_MoveSearchListCursorDown(s32); +static u32 LoopedTask_MoveSearchListPageUp(s32); +static u32 LoopedTask_MoveSearchListPageDown(s32); +static u32 LoopedTask_ExitConditionSearchMenu(s32); +static u32 LoopedTask_SelectSearchResult(s32); +static void InsertMonListItem(struct Pokenav_SearchResults *, struct PokenavMonListItem *); static bool32 GetSearchResultCurrentLoopedTaskActive(void); -static u32 LoopedTask_OpenConditionSearchResults(s32 state); -static void AddSearchResultListMenuWindow(struct PokenavSub8 *); -static void PrintSearchResultListMenuItems(struct PokenavSub8 *); -static void InitConditionSearchListMenuTemplate(void); -static void PrintSearchMonListItem(struct PokenavMonList *, u8 *); +static u32 LoopedTask_OpenConditionSearchResults(s32); +static void AddSearchResultListMenuWindow(struct Pokenav_SearchResultsGfx *); +static void PrintSearchResultListMenuItems(struct Pokenav_SearchResultsGfx *); +static void CreateSearchResultsList(void); +static void BufferSearchMonListItem(struct PokenavMonListItem *, u8 *); static const u32 sSearchMonDataIds[] = {MON_DATA_COOL, MON_DATA_BEAUTY, MON_DATA_CUTE, MON_DATA_SMART, MON_DATA_TOUGH}; @@ -73,13 +73,13 @@ static const LoopedTask sConditionSearchLoopedTaskFuncs[] = BuildPartyMonSearchResults, InitBoxMonSearchResults, BuildBoxMonSearchResults, - sub_81CF278 + ConvertConditionsToListRanks }; -static const u16 sConditionSearchResultFramePal[] = INCBIN_U16("graphics/pokenav/condition_search2.gbapal"); -static const u32 sConditionSearchResultTiles[] = INCBIN_U32("graphics/pokenav/condition_search2.4bpp.lz"); -static const u32 sConditionSearchResultTilemap[] = INCBIN_U32("graphics/pokenav/condition_search2.bin.lz"); -static const u16 gUnknown_08623570[] = INCBIN_U16("graphics/pokenav/8623570.gbapal"); +static const u16 sConditionSearchResultFramePal[] = INCBIN_U16("graphics/pokenav/condition/search_results.gbapal"); +static const u32 sConditionSearchResultTiles[] = INCBIN_U32("graphics/pokenav/condition/search_results.4bpp.lz"); +static const u32 sConditionSearchResultTilemap[] = INCBIN_U32("graphics/pokenav/condition/search_results.bin.lz"); +static const u16 sListBg_Pal[] = INCBIN_U16("graphics/pokenav/condition/search_results_list.gbapal"); static const struct BgTemplate sConditionSearchResultBgTemplates[] = { @@ -102,7 +102,7 @@ static const struct BgTemplate sConditionSearchResultBgTemplates[] = } }; -static const LoopedTask sSearchResultLoopTaskFuncs[] = +static const LoopedTask sSearchResultLoopTaskFuncs[] = { [CONDITION_SEARCH_FUNC_NONE] = NULL, [CONDITION_SEARCH_FUNC_MOVE_UP] = LoopedTask_MoveSearchListCursorUp, @@ -113,7 +113,7 @@ static const LoopedTask sSearchResultLoopTaskFuncs[] = [CONDITION_SEARCH_FUNC_SELECT_MON] = LoopedTask_SelectSearchResult }; -static const struct WindowTemplate sSearchResultListMenuWindowTemplate = +static const struct WindowTemplate sSearchResultListMenuWindowTemplate = { .bg = 1, .tilemapLeft = 1, @@ -130,57 +130,57 @@ static const u8 sText_NoGenderSymbol[] = _("{UNK_SPACER}"); bool32 PokenavCallback_Init_ConditionSearch(void) { - struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); - if (structPtr == NULL) + struct Pokenav_SearchResults *menu = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, sizeof(struct Pokenav_SearchResults)); + if (menu == NULL) return FALSE; - structPtr->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); - if (structPtr->monList == NULL) + menu->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavMonList)); + if (menu->monList == NULL) return FALSE; - structPtr->callback = HandleConditionSearchInput_WaitSetup; - structPtr->loopedTaskId = CreateLoopedTask(GetConditionSearchLoopedTask, 1); - structPtr->returnFromGraph = 0; - structPtr->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; + menu->callback = HandleConditionSearchInput_WaitSetup; + menu->loopedTaskId = CreateLoopedTask(GetConditionSearchLoopedTask, 1); + menu->returnFromGraph = FALSE; + menu->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; return TRUE; } // return to search results from condition graph bool32 PokenavCallback_Init_ReturnToMonSearchList(void) { - struct PokenavSub7 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, sizeof(struct PokenavSub7)); - if (structPtr == NULL) + struct Pokenav_SearchResults *menu = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, sizeof(struct Pokenav_SearchResults)); + if (menu == NULL) return FALSE; - structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - structPtr->callback = HandleConditionSearchInput; - structPtr->returnFromGraph = 1; - structPtr->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; + menu->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + menu->callback = HandleConditionSearchInput; + menu->returnFromGraph = TRUE; + menu->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; return TRUE; } u32 GetConditionSearchResultsCallback(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return structPtr->callback(structPtr); + struct Pokenav_SearchResults *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return menu->callback(menu); } void FreeSearchResultSubstruct1(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - if (structPtr->isPartyCondition == 0) + struct Pokenav_SearchResults *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + if (!menu->saveResultsList) FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); } -static bool32 HandleConditionSearchInput_WaitSetup(struct PokenavSub7 *structPtr) +static bool32 HandleConditionSearchInput_WaitSetup(struct Pokenav_SearchResults *menu) { - if (!IsLoopedTaskActive(structPtr->loopedTaskId)) - structPtr->callback = HandleConditionSearchInput; + if (!IsLoopedTaskActive(menu->loopedTaskId)) + menu->callback = HandleConditionSearchInput; return FALSE; } -static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr) +static u32 HandleConditionSearchInput(struct Pokenav_SearchResults *menu) { if (JOY_REPEAT(DPAD_UP)) return CONDITION_SEARCH_FUNC_MOVE_UP; @@ -192,60 +192,63 @@ static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr) return CONDITION_SEARCH_FUNC_PAGE_DOWN; else if (JOY_NEW(B_BUTTON)) { - structPtr->isPartyCondition = 0; - structPtr->callback = ReturnToConditionSearchList; + // Exiting back to main search menu + menu->saveResultsList = FALSE; + menu->callback = ReturnToConditionSearchList; return CONDITION_SEARCH_FUNC_EXIT; } else if (JOY_NEW(A_BUTTON)) { - structPtr->monList->currIndex = GetSelectedPokenavListIndex(); - structPtr->isPartyCondition = 1; - structPtr->callback = OpenConditionGraphFromSearchList; + // Entering graph menu + menu->monList->currIndex = PokenavList_GetSelectedIndex(); + menu->saveResultsList = TRUE; + menu->callback = OpenConditionGraphFromSearchList; return CONDITION_SEARCH_FUNC_SELECT_MON; } else return CONDITION_SEARCH_FUNC_NONE; } -static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr) +static u32 ReturnToConditionSearchList(struct Pokenav_SearchResults *menu) { return POKENAV_CONDITION_SEARCH_MENU; } -static u32 OpenConditionGraphFromSearchList(struct PokenavSub7 *structPtr) +static u32 OpenConditionGraphFromSearchList(struct Pokenav_SearchResults *menu) { - return POKENAV_CONDITION_GRAPH_FROM_SEARCH; + return POKENAV_CONDITION_GRAPH_SEARCH; } -static u32 sub_81CF0C0(void) +static u32 GetReturningFromGraph(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return structPtr->returnFromGraph; + struct Pokenav_SearchResults *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return menu->returnFromGraph; } -static struct PokenavMonList * GetSearchResultsMonDataList(void) +static struct PokenavMonListItem * GetSearchResultsMonDataList(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return ptr->monList->monData; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return menu->monList->monData; } static u16 GetSearchResultsMonListCount(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return ptr->monList->listCount; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return menu->monList->listCount; } -static s32 GetSearchResultsSelectedMonData(void) +// data below has been set by ConvertConditionsToListRanks +static s32 GetSearchResultsSelectedMonRank(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - s32 i = GetSelectedPokenavListIndex(); - return ptr->monList->monData[i].data; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 i = PokenavList_GetSelectedIndex(); + return menu->monList->monData[i].data; } -static u16 sub_81CF10C(void) +static u16 GetSearchResultsCurrentListIndex(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return ptr->monList->currIndex; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return menu->monList->currIndex; } static u32 GetConditionSearchLoopedTask(s32 state) @@ -256,22 +259,22 @@ static u32 GetConditionSearchLoopedTask(s32 state) static u32 BuildPartyMonSearchResults(s32 state) { s32 i; - struct PokenavMonList item; - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + struct PokenavMonListItem item; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - ptr->monList->listCount = 0; - ptr->monList->currIndex = 0; - item.boxId = 14; + menu->monList->listCount = 0; + menu->monList->currIndex = 0; + item.boxId = TOTAL_BOXES_COUNT; for (i = 0; i < PARTY_SIZE; i++) { - struct Pokemon * pokemon = &gPlayerParty[i]; + struct Pokemon *pokemon = &gPlayerParty[i]; if (!GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES)) return LT_INC_AND_CONTINUE; if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG)) { item.monId = i; - item.data = GetMonData(pokemon, ptr->conditionDataId); - sub_81CF2C4(ptr, &item); + item.data = GetMonData(pokemon, menu->conditionDataId); + InsertMonListItem(menu, &item); } } @@ -280,19 +283,19 @@ static u32 BuildPartyMonSearchResults(s32 state) static u32 InitBoxMonSearchResults(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - ptr->monId = 0; - ptr->boxId = 0; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + menu->monId = 0; + menu->boxId = 0; return LT_INC_AND_CONTINUE; } static u32 BuildBoxMonSearchResults(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - s32 boxId = ptr->boxId; - s32 monId = ptr->monId; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 boxId = menu->boxId; + s32 monId = menu->monId; s32 boxCount = 0; - struct PokenavMonList item; + struct PokenavMonListItem item; while (boxId < TOTAL_BOXES_COUNT) { @@ -302,15 +305,15 @@ static u32 BuildBoxMonSearchResults(s32 state) { item.boxId = boxId; item.monId = monId; - item.data = GetBoxMonDataAt(boxId, monId, ptr->conditionDataId); - sub_81CF2C4(ptr, &item); + item.data = GetBoxMonDataAt(boxId, monId, menu->conditionDataId); + InsertMonListItem(menu, &item); } boxCount++; monId++; - if (boxCount > 14) + if (boxCount > TOTAL_BOXES_COUNT) { - ptr->boxId = boxId; - ptr->monId = monId; + menu->boxId = boxId; + menu->monId = monId; return LT_CONTINUE; } } @@ -321,107 +324,111 @@ static u32 BuildBoxMonSearchResults(s32 state) return LT_INC_AND_CONTINUE; } -static u32 sub_81CF278(s32 state) +// Data below is initially set by BuildPartyMonSearchResults / BuildBoxMonSearchResults, and +// is the Pokémon's condition value for the condition they are sorted by. +// The condition value in data is then overwritten with their ranking. +static u32 ConvertConditionsToListRanks(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - s32 r6 = ptr->monList->listCount; - s32 r4 = ptr->monList->monData[0].data; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 listCount = menu->monList->listCount; + s32 prevCondition = menu->monList->monData[0].data; s32 i; - ptr->monList->monData[0].data = 1; - for (i = 1; i < r6; i++) + menu->monList->monData[0].data = 1; + for (i = 1; i < listCount; i++) { - if (ptr->monList->monData[i].data == r4) + if (menu->monList->monData[i].data == prevCondition) { - ptr->monList->monData[i].data = ptr->monList->monData[i - 1].data; + // Same condition value as prev, share rank + menu->monList->monData[i].data = menu->monList->monData[i - 1].data; } else { - r4 = ptr->monList->monData[i].data; - ptr->monList->monData[i].data = i + 1; + prevCondition = menu->monList->monData[i].data; + menu->monList->monData[i].data = i + 1; } } - ptr->returnFromGraph = 1; + menu->returnFromGraph = TRUE; return LT_FINISH; } -static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item) +static void InsertMonListItem(struct Pokenav_SearchResults *menu, struct PokenavMonListItem *item) { u32 left = 0; - u32 right = structPtr->monList->listCount; + u32 right = menu->monList->listCount; u32 insertionIdx = left + (right - left) / 2; while (right != insertionIdx) { - if (item->data > structPtr->monList->monData[insertionIdx].data) + if (item->data > menu->monList->monData[insertionIdx].data) right = insertionIdx; else left = insertionIdx + 1; insertionIdx = left + (right - left) / 2; } - for (right = structPtr->monList->listCount; right > insertionIdx; right--) - structPtr->monList->monData[right] = structPtr->monList->monData[right - 1]; - structPtr->monList->monData[insertionIdx] = *item; - structPtr->monList->listCount++; + for (right = menu->monList->listCount; right > insertionIdx; right--) + menu->monList->monData[right] = menu->monList->monData[right - 1]; + menu->monList->monData[insertionIdx] = *item; + menu->monList->listCount++; } bool32 OpenConditionSearchResults(void) { - struct PokenavSub8 *searchList = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, sizeof(struct PokenavSub8)); - if (searchList == NULL) + struct Pokenav_SearchResultsGfx *gfx = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX, sizeof(struct Pokenav_SearchResultsGfx)); + if (gfx == NULL) return FALSE; - searchList->ltid = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); - searchList->callback = GetSearchResultCurrentLoopedTaskActive; - searchList->fromGraph = FALSE; + gfx->loopedTaskId = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); + gfx->callback = GetSearchResultCurrentLoopedTaskActive; + gfx->fromGraph = FALSE; return TRUE; } bool32 OpenConditionSearchListFromGraph(void) { - struct PokenavSub8 *searchList = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, sizeof(struct PokenavSub8)); - if (searchList == NULL) + struct Pokenav_SearchResultsGfx *gfx = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX, sizeof(struct Pokenav_SearchResultsGfx)); + if (gfx == NULL) return FALSE; - searchList->ltid = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); - searchList->callback = GetSearchResultCurrentLoopedTaskActive; - searchList->fromGraph = TRUE; + gfx->loopedTaskId = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); + gfx->callback = GetSearchResultCurrentLoopedTaskActive; + gfx->fromGraph = TRUE; return TRUE; } void CreateSearchResultsLoopedTask(s32 idx) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); - searchList->ltid = CreateLoopedTask(sSearchResultLoopTaskFuncs[idx], 1); - searchList->callback = GetSearchResultCurrentLoopedTaskActive; + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); + gfx->loopedTaskId = CreateLoopedTask(sSearchResultLoopTaskFuncs[idx], 1); + gfx->callback = GetSearchResultCurrentLoopedTaskActive; } bool32 IsSearchResultLoopedTaskActive(void) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); - return searchList->callback(); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); + return gfx->callback(); } bool32 GetSearchResultCurrentLoopedTaskActive(void) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); - return IsLoopedTaskActive(searchList->ltid); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); + return IsLoopedTaskActive(gfx->loopedTaskId); } void FreeSearchResultSubstruct2(void) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); - sub_81C8234(); - RemoveWindow(searchList->winid); - FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); + DestroyPokenavList(); + RemoveWindow(gfx->winid); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); } static u32 LoopedTask_OpenConditionSearchResults(s32 state) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); switch (state) { case 0: InitBgTemplates(sConditionSearchResultBgTemplates, ARRAY_COUNT(sConditionSearchResultBgTemplates)); DecompressAndCopyTileDataToVram(1, sConditionSearchResultTiles, 0, 0, 0); - SetBgTilemapBuffer(1, searchList->buff); + SetBgTilemapBuffer(1, gfx->buff); CopyToBgTilemapBuffer(1, sConditionSearchResultTilemap, 0, 0); CopyBgTilemapBufferToVram(1); CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, 0x10, 0x20); @@ -430,37 +437,37 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) case 1: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - if (!sub_81CF0C0()) + if (!GetReturningFromGraph()) return LT_PAUSE; return LT_INC_AND_PAUSE; case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(gUnknown_08623570, 0x20, 32); - InitConditionSearchListMenuTemplate(); + CopyPaletteIntoBufferUnfaded(sListBg_Pal, 0x20, 32); + CreateSearchResultsList(); return LT_INC_AND_PAUSE; case 3: - if (sub_81C8224()) + if (IsCreatePokenavListTaskActive()) return LT_PAUSE; - AddSearchResultListMenuWindow(searchList); + AddSearchResultListMenuWindow(gfx); PrintHelpBarText(HELPBAR_CONDITION_MON_LIST); return LT_INC_AND_PAUSE; case 4: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); ShowBg(1); ShowBg(2); HideBg(3); - if (!searchList->fromGraph) + if (!gfx->fromGraph) { u8 searchGfxId = GetSelectedConditionSearch() + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; LoadLeftHeaderGfxForIndex(searchGfxId); - ShowLeftHeaderGfx(searchGfxId, 1, 0); - ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, 1, 0); + ShowLeftHeaderGfx(searchGfxId, TRUE, FALSE); + ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, TRUE, FALSE); } - PokenavFadeScreen(1); + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); return LT_INC_AND_PAUSE; case 5: if (IsPaletteFadeActive()) @@ -474,11 +481,11 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) static u32 LoopedTask_MoveSearchListCursorUp(s32 state) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); switch (state) { case 0: - switch (MatchCall_MoveCursorUp()) + switch (PokenavList_MoveCursorUp()) { case 0: return LT_FINISH; @@ -491,11 +498,11 @@ static u32 LoopedTask_MoveSearchListCursorUp(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - PrintSearchResultListMenuItems(searchList); + PrintSearchResultListMenuItems(gfx); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -507,11 +514,11 @@ static u32 LoopedTask_MoveSearchListCursorUp(s32 state) static u32 LoopedTask_MoveSearchListCursorDown(s32 state) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); switch (state) { case 0: - switch (MatchCall_MoveCursorDown()) + switch (PokenavList_MoveCursorDown()) { case 0: return LT_FINISH; @@ -524,11 +531,11 @@ static u32 LoopedTask_MoveSearchListCursorDown(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - PrintSearchResultListMenuItems(searchList); + PrintSearchResultListMenuItems(gfx); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -540,11 +547,11 @@ static u32 LoopedTask_MoveSearchListCursorDown(s32 state) static u32 LoopedTask_MoveSearchListPageUp(s32 state) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); switch (state) { case 0: - switch (MatchCall_PageUp()) + switch (PokenavList_PageUp()) { case 0: return LT_FINISH; @@ -557,11 +564,11 @@ static u32 LoopedTask_MoveSearchListPageUp(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - PrintSearchResultListMenuItems(searchList); + PrintSearchResultListMenuItems(gfx); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -573,11 +580,11 @@ static u32 LoopedTask_MoveSearchListPageUp(s32 state) static u32 LoopedTask_MoveSearchListPageDown(s32 state) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); switch (state) { case 0: - switch (MatchCall_PageDown()) + switch (PokenavList_PageDown()) { case 0: return LT_FINISH; @@ -590,11 +597,11 @@ static u32 LoopedTask_MoveSearchListPageDown(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - PrintSearchResultListMenuItems(searchList); + PrintSearchResultListMenuItems(gfx); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -610,7 +617,7 @@ static u32 LoopedTask_ExitConditionSearchMenu(s32 state) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 1: @@ -630,7 +637,7 @@ static u32 LoopedTask_SelectSearchResult(s32 state) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) @@ -640,57 +647,57 @@ static u32 LoopedTask_SelectSearchResult(s32 state) return LT_FINISH; } -static void AddSearchResultListMenuWindow(struct PokenavSub8 *searchList) +static void AddSearchResultListMenuWindow(struct Pokenav_SearchResultsGfx *gfx) { - searchList->winid = AddWindow(&sSearchResultListMenuWindowTemplate); - PutWindowTilemap(searchList->winid); - CopyWindowToVram(searchList->winid, 1); - PrintSearchResultListMenuItems(searchList); + gfx->winid = AddWindow(&sSearchResultListMenuWindowTemplate); + PutWindowTilemap(gfx->winid); + CopyWindowToVram(gfx->winid, COPYWIN_MAP); + PrintSearchResultListMenuItems(gfx); } -static void PrintSearchResultListMenuItems(struct PokenavSub8 *searchList) +static void PrintSearchResultListMenuItems(struct Pokenav_SearchResultsGfx *gfx) { - s32 r7 = GetSearchResultsSelectedMonData(); + s32 rank = GetSearchResultsSelectedMonRank(); DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); *gStringVar1 = EOS; - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar2, gText_NumberF700); - AddTextPrinterParameterized(searchList->winid, 1, gStringVar2, 4, 1, 0xFF, NULL); - ConvertIntToDecimalStringN(gStringVar1, r7, STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized(searchList->winid, 1, gStringVar1, 34, 1, 0xFF, NULL); - CopyWindowToVram(searchList->winid, 2); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar2, gText_NumberIndex); + AddTextPrinterParameterized(gfx->winid, FONT_NORMAL, gStringVar2, 4, 1, TEXT_SKIP_DRAW, NULL); + ConvertIntToDecimalStringN(gStringVar1, rank, STR_CONV_MODE_RIGHT_ALIGN, 3); + AddTextPrinterParameterized(gfx->winid, FONT_NORMAL, gStringVar1, 34, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(gfx->winid, COPYWIN_GFX); } -static void InitConditionSearchListMenuTemplate(void) +static void CreateSearchResultsList(void) { struct PokenavListTemplate template; - - template.list.monList = GetSearchResultsMonDataList(); + + template.list = (struct PokenavListItem *)GetSearchResultsMonDataList(); template.count = GetSearchResultsMonListCount(); - template.unk8 = 4; - template.unk6 = sub_81CF10C(); + template.itemSize = sizeof(struct PokenavListItem); + template.startIndex = GetSearchResultsCurrentListIndex(); template.item_X = 13; template.windowWidth = 17; template.listTop = 1; template.maxShowed = 8; template.fillValue = 2; - template.fontId = 1; - template.listFunc.printMonFunc = PrintSearchMonListItem; - template.unk14 = NULL; - sub_81C81D4(&sConditionSearchResultBgTemplates[1], &template, 0); + template.fontId = FONT_NORMAL; + template.bufferItemFunc = (PokenavListBufferItemFunc)BufferSearchMonListItem; + template.iconDrawFunc = NULL; + CreatePokenavList(&sConditionSearchResultBgTemplates[1], &template, 0); } -static void PrintSearchMonListItem(struct PokenavMonList * item, u8 * dest) +static void BufferSearchMonListItem(struct PokenavMonListItem * item, u8 *dest) { u8 gender; u8 level; - u8 * s; - const u8 * genderStr; + u8 *s; + const u8 *genderStr; // Mon is in party if (item->boxId == TOTAL_BOXES_COUNT) { - struct Pokemon * mon = &gPlayerParty[item->monId]; + struct Pokemon *mon = &gPlayerParty[item->monId]; gender = GetMonGender(mon); level = GetLevelFromMonExp(mon); GetMonData(mon, MON_DATA_NICKNAME, gStringVar3); @@ -704,8 +711,8 @@ static void PrintSearchMonListItem(struct PokenavMonList * item, u8 * dest) GetBoxMonData(mon, MON_DATA_NICKNAME, gStringVar3); } - StringGetEnd10(gStringVar3); - dest = sub_81DB494(dest, 1, gStringVar3, 60); + StringGet_Nickname(gStringVar3); + dest = GetStringClearToWidth(dest, FONT_NORMAL, gStringVar3, 60); switch (gender) { default: @@ -723,5 +730,5 @@ static void PrintSearchMonListItem(struct PokenavMonList * item, u8 * dest) *s++ = CHAR_EXTRA_SYMBOL; *s++ = CHAR_LV_2; ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3); - sub_81DB494(dest, 1, gStringVar1, 40); + GetStringClearToWidth(dest, FONT_NORMAL, gStringVar1, 40); } diff --git a/src/pokenav_list.c b/src/pokenav_list.c new file mode 100644 index 0000000000..ed3d40dee2 --- /dev/null +++ b/src/pokenav_list.c @@ -0,0 +1,1011 @@ +#include "global.h" +#include "pokenav.h" +#include "window.h" +#include "strings.h" +#include "text.h" +#include "bg.h" +#include "menu.h" +#include "decompress.h" +#include "international_string_util.h" + +#define GFXTAG_ARROW 10 +#define PALTAG_ARROW 20 + +struct PokenavListMenuWindow { + u8 bg; + u8 fillValue; + u8 x; + u8 y; + u8 width; + u8 fontId; + u16 tileOffset; + u16 windowId; + u16 unkA; + u16 numPrinted; + u16 numToPrint; +}; + +struct PokenavListWindowState { + // The index of the element at the top of the window. + u16 windowTopIndex; + u16 listLength; + u16 entriesOffscreen; + // The index of the cursor, relative to the top of the window. + u16 selectedIndexOffset; + u16 entriesOnscreen; + u32 listItemSize; + void * listPtr; +}; + +struct PokenavListSub +{ + struct PokenavListMenuWindow listWindow; + u32 printStart; + u32 printIndex; + u32 itemSize; + void * listPtr; + s32 startBgY; + s32 endBgY; + u32 loopedTaskId; + s32 moveDelta; + u32 bgMoveType; + PokenavListBufferItemFunc bufferItemFunc; + void (*iconDrawFunc)(u16, u32, u32); + struct Sprite *rightArrow; + struct Sprite *upArrow; + struct Sprite *downArrow; + u8 itemTextBuffer[64]; +}; + +struct PokenavList +{ + struct PokenavListSub sub; + u8 tilemapBuffer[BG_SCREEN_SIZE]; + struct PokenavListWindowState windowState; + s32 eraseIndex; + u32 loopedTaskId; +}; + +static void InitPokenavListBg(struct PokenavList *); +static bool32 CopyPokenavListMenuTemplate(struct PokenavListSub *, const struct BgTemplate *, struct PokenavListTemplate *, s32); +static void InitPokenavListWindowState(struct PokenavListWindowState *, struct PokenavListTemplate *); +static void SpriteCB_UpArrow(struct Sprite *); +static void SpriteCB_DownArrow(struct Sprite *); +static void SpriteCB_RightArrow(struct Sprite *); +static void ToggleListArrows(struct PokenavListSub *, bool32); +static void DestroyListArrows(struct PokenavListSub *); +static void CreateListArrowSprites(struct PokenavListWindowState *, struct PokenavListSub *); +static void LoadListArrowGfx(void); +static void PrintMatchCallFlavorText(struct PokenavListWindowState *, struct PokenavListSub *, u32); +static void PrintMatchCallFieldNames(struct PokenavListSub *, u32); +static void PrintMatchCallListTrainerName(struct PokenavListWindowState *, struct PokenavListSub *); +static void PrintCheckPageTrainerName(struct PokenavListWindowState *, struct PokenavListSub *); +static void EraseListEntry(struct PokenavListMenuWindow *, s32, s32); +static void CreateMoveListWindowTask(s32, struct PokenavListSub *); +static void PrintListItems(void *, u32, u32, u32, u32, struct PokenavListSub *); +static void InitListItems(struct PokenavListWindowState *, struct PokenavListSub *); +static void InitPokenavListWindow(struct PokenavListMenuWindow *); +static u32 LoopedTask_CreatePokenavList(s32); +static bool32 IsPrintListItemsTaskActive(void); +static u32 LoopedTask_PrintListItems(s32); +static u32 LoopedTask_MoveListWindow(s32); +static u32 LoopedTask_EraseListForCheckPage(s32); +static u32 LoopedTask_ReshowListFromCheckPage(s32); +static u32 LoopedTask_PrintCheckPageInfo(s32); + +static const u16 sListArrow_Pal[] = INCBIN_U16("graphics/pokenav/list_arrows.gbapal"); +static const u32 sListArrow_Gfx[] = INCBIN_U32("graphics/pokenav/list_arrows.4bpp.lz"); + +static EWRAM_DATA u32 sMoveWindowDownIndex = 0; // Read, but pointlessly + +bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset) +{ + struct PokenavList *list = AllocSubstruct(POKENAV_SUBSTRUCT_LIST, sizeof(struct PokenavList)); + if (list == NULL) + return FALSE; + + InitPokenavListWindowState(&list->windowState, listTemplate); + if (!CopyPokenavListMenuTemplate(&list->sub, bgTemplate, listTemplate, tileOffset)) + return FALSE; + + CreateLoopedTask(LoopedTask_CreatePokenavList, 6); + return TRUE; +} + +bool32 IsCreatePokenavListTaskActive(void) +{ + return FuncIsActiveLoopedTask(LoopedTask_CreatePokenavList); +} + +void DestroyPokenavList(void) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + DestroyListArrows(&list->sub); + RemoveWindow(list->sub.listWindow.windowId); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_LIST); +} + +static u32 LoopedTask_CreatePokenavList(s32 state) +{ + struct PokenavList *list; + + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + + list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + + switch (state) + { + case 0: + InitPokenavListBg(list); + return LT_INC_AND_PAUSE; + case 1: + InitPokenavListWindow(&list->sub.listWindow); + return LT_INC_AND_PAUSE; + case 2: + InitListItems(&list->windowState, &list->sub); + return LT_INC_AND_PAUSE; + case 3: + if (IsPrintListItemsTaskActive()) + { + return LT_PAUSE; + } + else + { + LoadListArrowGfx(); + return LT_INC_AND_CONTINUE; + } + case 4: + CreateListArrowSprites(&list->windowState, &list->sub); + return LT_FINISH; + default: + return LT_FINISH; + } +} + +static void InitPokenavListBg(struct PokenavList *list) +{ + u16 tileNum = (list->sub.listWindow.fillValue << 12) | list->sub.listWindow.tileOffset; + BgDmaFill(list->sub.listWindow.bg, PIXEL_FILL(1), list->sub.listWindow.tileOffset, 1); + BgDmaFill(list->sub.listWindow.bg, PIXEL_FILL(4), list->sub.listWindow.tileOffset + 1, 1); + SetBgTilemapBuffer(list->sub.listWindow.bg, list->tilemapBuffer); + FillBgTilemapBufferRect_Palette0(list->sub.listWindow.bg, tileNum, 0, 0, 32, 32); + ChangeBgY(list->sub.listWindow.bg, 0, BG_COORD_SET); + ChangeBgX(list->sub.listWindow.bg, 0, BG_COORD_SET); + ChangeBgY(list->sub.listWindow.bg, list->sub.listWindow.y << 11, BG_COORD_SUB); + CopyBgTilemapBufferToVram(list->sub.listWindow.bg); +} + +static void InitPokenavListWindow(struct PokenavListMenuWindow *listWindow) +{ + FillWindowPixelBuffer(listWindow->windowId, PIXEL_FILL(1)); + PutWindowTilemap(listWindow->windowId); + CopyWindowToVram(listWindow->windowId, COPYWIN_MAP); +} + +static void InitListItems(struct PokenavListWindowState *windowState, struct PokenavListSub *subPtr) +{ + s32 numToPrint = windowState->listLength - windowState->windowTopIndex; + if (numToPrint > windowState->entriesOnscreen) + numToPrint = windowState->entriesOnscreen; + + PrintListItems(windowState->listPtr, windowState->windowTopIndex, numToPrint, windowState->listItemSize, 0, subPtr); +} + +static void PrintListItems(void * listPtr, u32 topIndex, u32 numItems, u32 itemSize, u32 printStart, struct PokenavListSub *list) +{ + if (numItems == 0) + return; + + list->listPtr = listPtr + topIndex * itemSize; + list->itemSize = itemSize; + list->listWindow.numPrinted = 0; + list->listWindow.numToPrint = numItems; + list->printIndex = topIndex; + list->printStart = printStart; + CreateLoopedTask(LoopedTask_PrintListItems, 5); +} + +static bool32 IsPrintListItemsTaskActive(void) +{ + return FuncIsActiveLoopedTask(LoopedTask_PrintListItems); +} + +static u32 LoopedTask_PrintListItems(s32 state) +{ + u32 row; + struct PokenavListSub *listSub = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + + switch (state) + { + case 0: + row = (listSub->listWindow.unkA + listSub->listWindow.numPrinted + listSub->printStart) & 0xF; + listSub->bufferItemFunc(listSub->listPtr, listSub->itemTextBuffer); + if (listSub->iconDrawFunc != NULL) + listSub->iconDrawFunc(listSub->listWindow.windowId, listSub->printIndex, row); + + AddTextPrinterParameterized(listSub->listWindow.windowId, listSub->listWindow.fontId, listSub->itemTextBuffer, 8, (row << 4) + 1, TEXT_SKIP_DRAW, NULL); + if (++listSub->listWindow.numPrinted >= listSub->listWindow.numToPrint) + { + // Finished printing items. If icons were being drawn, draw the + // window tilemap and graphics. Otherwise just do the graphics + if (listSub->iconDrawFunc != NULL) + CopyWindowToVram(listSub->listWindow.windowId, COPYWIN_FULL); + else + CopyWindowToVram(listSub->listWindow.windowId, COPYWIN_GFX); + return LT_INC_AND_PAUSE; + } + else + { + listSub->listPtr += listSub->itemSize; + listSub->printIndex++; + return LT_CONTINUE; + } + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + return LT_FINISH; + } + return LT_FINISH; +} + +static bool32 ShouldShowUpArrow(void) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + + return (list->windowState.windowTopIndex != 0); +} + +static bool32 ShouldShowDownArrow(void) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListWindowState *windowState = &list->windowState; + + return (windowState->windowTopIndex + windowState->entriesOnscreen < windowState->listLength); +} + +static void MoveListWindow(s32 delta, bool32 printItems) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListWindowState *windowState = &list->windowState; + + if (delta < 0) + { + if (windowState->windowTopIndex + delta < 0) + delta = -1 * windowState->windowTopIndex; + if (printItems) + PrintListItems(windowState->listPtr, windowState->windowTopIndex + delta, delta * -1, windowState->listItemSize, delta, &list->sub); + } + else if (printItems) + { + s32 index = sMoveWindowDownIndex = windowState->windowTopIndex + windowState->entriesOnscreen; + if (index + delta >= windowState->listLength) + delta = windowState->listLength - index; + + PrintListItems(windowState->listPtr, index, delta, windowState->listItemSize, windowState->entriesOnscreen, &list->sub); + } + + CreateMoveListWindowTask(delta, &list->sub); + windowState->windowTopIndex += delta; +} + +static void CreateMoveListWindowTask(s32 delta, struct PokenavListSub *list) +{ + list->startBgY = GetBgY(list->listWindow.bg); + list->endBgY = list->startBgY + (delta << 12); + if (delta > 0) + list->bgMoveType = BG_COORD_ADD; + else + list->bgMoveType = BG_COORD_SUB; + list->moveDelta = delta; + list->loopedTaskId = CreateLoopedTask(LoopedTask_MoveListWindow, 6); +} + +static u32 LoopedTask_MoveListWindow(s32 state) +{ + s32 oldY, newY; + bool32 finished; + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListSub *subPtr = &list->sub; + + switch (state) + { + case 0: + if (!IsPrintListItemsTaskActive()) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; + case 1: + finished = FALSE; + oldY = GetBgY(subPtr->listWindow.bg); + newY = ChangeBgY(subPtr->listWindow.bg, 0x1000, subPtr->bgMoveType); + if (subPtr->bgMoveType == BG_COORD_SUB) + { + if ((oldY > subPtr->endBgY || oldY <= subPtr->startBgY) && newY <= subPtr->endBgY) + finished = TRUE; + } + else // BG_COORD_ADD + { + if ((oldY < subPtr->endBgY || oldY >= subPtr->startBgY) && newY >= subPtr->endBgY) + finished = TRUE; + } + + if (finished) + { + subPtr->listWindow.unkA = (subPtr->listWindow.unkA + subPtr->moveDelta) & 0xF; + ChangeBgY(subPtr->listWindow.bg, subPtr->endBgY, BG_COORD_SET); + return LT_FINISH; + } + return LT_PAUSE; + } + return LT_FINISH; +} + +bool32 PokenavList_IsMoveWindowTaskActive(void) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + return IsLoopedTaskActive(list->sub.loopedTaskId); +} + +static struct PokenavListWindowState *GetPokenavListWindowState(void) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + return &list->windowState; +} + +int PokenavList_MoveCursorUp(void) +{ + struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + + if (windowState->selectedIndexOffset != 0) + { + windowState->selectedIndexOffset--; + return 1; + } + if (ShouldShowUpArrow()) + { + MoveListWindow(-1, TRUE); + return 2; + } + return 0; +} + +int PokenavList_MoveCursorDown(void) +{ + struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + + if (windowState->windowTopIndex + windowState->selectedIndexOffset >= windowState->listLength - 1) + return 0; + if (windowState->selectedIndexOffset < windowState->entriesOnscreen - 1) + { + windowState->selectedIndexOffset++; + return 1; + } + if (ShouldShowDownArrow()) + { + MoveListWindow(1, TRUE); + return 2; + } + return 0; +} + +int PokenavList_PageUp(void) +{ + s32 scroll; + struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + + if (ShouldShowUpArrow()) + { + if (windowState->windowTopIndex >= windowState->entriesOnscreen) + scroll = windowState->entriesOnscreen; + else + scroll = windowState->windowTopIndex; + MoveListWindow(scroll * -1, TRUE); + return 2; + } + else if (windowState->selectedIndexOffset != 0) + { + windowState->selectedIndexOffset = 0; + return 1; + } + return 0; +} + +int PokenavList_PageDown(void) +{ + struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + + if (ShouldShowDownArrow()) + { + s32 windowBottomIndex = windowState->windowTopIndex + windowState->entriesOnscreen; + s32 scroll = windowState->entriesOffscreen - windowState->windowTopIndex; + + if (windowBottomIndex <= windowState->entriesOffscreen) + scroll = windowState->entriesOnscreen; + MoveListWindow(scroll, TRUE); + return 2; + } + else + { + s32 cursor, lastVisibleIndex; + if (windowState->listLength >= windowState->entriesOnscreen) + { + cursor = windowState->selectedIndexOffset; + lastVisibleIndex = windowState->entriesOnscreen; + } + else + { + cursor = windowState->selectedIndexOffset; + lastVisibleIndex = windowState->listLength; + } + lastVisibleIndex -= 1; + if (cursor >= lastVisibleIndex) + return 0; + + windowState->selectedIndexOffset = lastVisibleIndex; + return 1; + } +} + +u32 PokenavList_GetSelectedIndex(void) +{ + struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + + return windowState->windowTopIndex + windowState->selectedIndexOffset; +} + +u32 PokenavList_GetTopIndex(void) +{ + struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + + return windowState->windowTopIndex; +} + +void PokenavList_EraseListForCheckPage(void) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + list->eraseIndex = 0; + list->loopedTaskId = CreateLoopedTask(LoopedTask_EraseListForCheckPage, 6); +} + +void PrintCheckPageInfo(s16 delta) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + list->windowState.windowTopIndex += delta; + list->eraseIndex = 0; + list->loopedTaskId = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); +} + +void PokenavList_ReshowListFromCheckPage(void) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + list->eraseIndex = 0; + list->loopedTaskId = CreateLoopedTask(LoopedTask_ReshowListFromCheckPage, 6); +} + +bool32 PokenavList_IsTaskActive(void) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + return IsLoopedTaskActive(list->loopedTaskId); +} + +void PokenavList_DrawCurrentItemIcon(void) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListWindowState *windowState = &list->windowState; + list->sub.iconDrawFunc(list->sub.listWindow.windowId, windowState->windowTopIndex + windowState->selectedIndexOffset, (list->sub.listWindow.unkA + windowState->selectedIndexOffset) & 0xF); + CopyWindowToVram(list->sub.listWindow.windowId, COPYWIN_MAP); +} + +static u32 LoopedTask_EraseListForCheckPage(s32 state) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + + switch (state) + { + case 0: + ToggleListArrows(&list->sub, TRUE); + // fall-through + case 1: + if (list->eraseIndex != list->windowState.selectedIndexOffset) + EraseListEntry(&list->sub.listWindow, list->eraseIndex, 1); + + list->eraseIndex++; + return LT_INC_AND_PAUSE; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + if (list->eraseIndex != list->windowState.entriesOnscreen) + return LT_SET_STATE(1); + if (list->windowState.selectedIndexOffset != 0) + EraseListEntry(&list->sub.listWindow, list->eraseIndex, list->windowState.selectedIndexOffset); + + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + if (list->windowState.selectedIndexOffset != 0) + { + MoveListWindow(list->windowState.selectedIndexOffset, FALSE); + return LT_INC_AND_PAUSE; + } + return LT_FINISH; + } + return LT_PAUSE; + case 4: + if (PokenavList_IsMoveWindowTaskActive()) + return LT_PAUSE; + + list->windowState.selectedIndexOffset = 0; + return LT_FINISH; + } + return LT_FINISH; +} + +static u32 LoopedTask_PrintCheckPageInfo(s32 state) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + + switch (state) + { + case 0: + PrintCheckPageTrainerName(&list->windowState, &list->sub); + break; + case 1: + PrintMatchCallFieldNames(&list->sub, 0); + break; + case 2: + PrintMatchCallFlavorText(&list->windowState, &list->sub, CHECK_PAGE_STRATEGY); + break; + case 3: + PrintMatchCallFieldNames(&list->sub, 1); + break; + case 4: + PrintMatchCallFlavorText(&list->windowState, &list->sub, CHECK_PAGE_POKEMON); + break; + case 5: + PrintMatchCallFieldNames(&list->sub, 2); + break; + case 6: + PrintMatchCallFlavorText(&list->windowState, &list->sub, CHECK_PAGE_INTRO_1); + break; + case 7: + PrintMatchCallFlavorText(&list->windowState, &list->sub, CHECK_PAGE_INTRO_2); + break; + default: + return LT_FINISH; + } + return LT_INC_AND_PAUSE; +} + +static u32 LoopedTask_ReshowListFromCheckPage(s32 state) +{ + struct PokenavList *list; + struct PokenavListWindowState *windowState; + struct PokenavListSub *subPtr; + s32 r5, *ptr; + + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + + list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + windowState = &list->windowState; + subPtr = &list->sub; + + switch (state) + { + case 0: + // Rewrite the name of the trainer whose check page was just being viewed. + // This is done to erase the red background it had. + PrintMatchCallListTrainerName(windowState, subPtr); + return LT_INC_AND_PAUSE; + case 1: + ptr = &list->eraseIndex; + if (++(*ptr) < list->windowState.entriesOnscreen) + { + EraseListEntry(&subPtr->listWindow, *ptr, 1); + return LT_PAUSE; + } + + *ptr = 0; + if (windowState->listLength <= windowState->entriesOnscreen) + { + if (windowState->windowTopIndex != 0) + { + s32 r4 = windowState->windowTopIndex; + r5 = -r4; + EraseListEntry(&subPtr->listWindow, r5, r4); + windowState->selectedIndexOffset = r4; + *ptr = r5; + return LT_INC_AND_PAUSE; + } + } + else + { + if (windowState->windowTopIndex + windowState->entriesOnscreen > windowState->listLength) + { + s32 r4 = windowState->windowTopIndex + windowState->entriesOnscreen - windowState->listLength; + r5 = -r4; + EraseListEntry(&subPtr->listWindow, r5, r4); + windowState->selectedIndexOffset = r4; + *ptr = r5; + return LT_INC_AND_PAUSE; + } + } + return LT_SET_STATE(4); + case 2: + MoveListWindow(list->eraseIndex, FALSE); + return LT_INC_AND_PAUSE; + case 3: + if (!PokenavList_IsMoveWindowTaskActive()) + { + list->eraseIndex = 0; + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + case 4: + PrintListItems(windowState->listPtr, windowState->windowTopIndex + list->eraseIndex, 1, windowState->listItemSize, list->eraseIndex, &list->sub); + return LT_INC_AND_PAUSE; + case 5: + if (IsPrintListItemsTaskActive()) + return LT_PAUSE; + if (++list->eraseIndex >= windowState->listLength || list->eraseIndex >= windowState->entriesOnscreen) + return LT_INC_AND_CONTINUE; + return LT_SET_STATE(4); + case 6: + ToggleListArrows(subPtr, FALSE); + return LT_FINISH; + } + + return LT_FINISH; +} + +static void EraseListEntry(struct PokenavListMenuWindow *listWindow, s32 offset, s32 entries) +{ + u8 *tileData = (u8 *)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA); + u32 width = listWindow->width * 64; + + offset = (listWindow->unkA + offset) & 0xF; + if (offset + entries <= 16) + { + CpuFastFill8(PIXEL_FILL(1), tileData + offset * width, entries * width); + CopyWindowToVram(listWindow->windowId, COPYWIN_GFX); + } + else + { + u32 v3 = 16 - offset; + u32 v4 = entries - v3; + + CpuFastFill8(PIXEL_FILL(1), tileData + offset * width, v3 * width); + CpuFastFill8(PIXEL_FILL(1), tileData, v4 * width); + CopyWindowToVram(listWindow->windowId, COPYWIN_GFX); + } + + for (entries--; entries != -1; offset = (offset + 1) & 0xF, entries--) + ClearRematchPokeballIcon(listWindow->windowId, offset); + + CopyWindowToVram(listWindow->windowId, COPYWIN_MAP); +} + +// Pointless +static void SetListMarginTile(struct PokenavListMenuWindow *listWindow, bool32 draw) +{ + u16 var; + u16 *tilemapBuffer = (u16 *)GetBgTilemapBuffer(GetWindowAttribute(listWindow->windowId, WINDOW_BG)); + tilemapBuffer += (listWindow->unkA << 6) + listWindow->x - 1; + + if (draw) + var = (listWindow->fillValue << 12) | (listWindow->tileOffset + 1); + else + var = (listWindow->fillValue << 12) | (listWindow->tileOffset); + + tilemapBuffer[0] = var; + tilemapBuffer[0x20] = var; +} + +// Print the trainer's name and title at the top of their check page +static void PrintCheckPageTrainerName(struct PokenavListWindowState *state, struct PokenavListSub *list) +{ + u8 colors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_RED}; + + list->bufferItemFunc(state->listPtr + state->listItemSize * state->windowTopIndex, list->itemTextBuffer); + list->iconDrawFunc(list->listWindow.windowId, state->windowTopIndex, list->listWindow.unkA); + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(4), 0, list->listWindow.unkA * 16, list->listWindow.width * 8, 16); + AddTextPrinterParameterized3(list->listWindow.windowId, list->listWindow.fontId, 8, (list->listWindow.unkA * 16) + 1, colors, TEXT_SKIP_DRAW, list->itemTextBuffer); + SetListMarginTile(&list->listWindow, TRUE); + CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_FULL, 0, list->listWindow.unkA * 2, list->listWindow.width, 2); +} + +// Print the trainer's name and title for the list (to replace the check page name and title, which has a red background) +static void PrintMatchCallListTrainerName(struct PokenavListWindowState *state, struct PokenavListSub *list) +{ + list->bufferItemFunc(state->listPtr + state->listItemSize * state->windowTopIndex, list->itemTextBuffer); + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, list->listWindow.unkA * 16, list->listWindow.width * 8, 16); + AddTextPrinterParameterized(list->listWindow.windowId, list->listWindow.fontId, list->itemTextBuffer, 8, list->listWindow.unkA * 16 + 1, TEXT_SKIP_DRAW, NULL); + SetListMarginTile(&list->listWindow, FALSE); + CopyWindowToVram(list->listWindow.windowId, COPYWIN_FULL); +} + +static void PrintMatchCallFieldNames(struct PokenavListSub *list, u32 fieldId) +{ + const u8 *fieldNames[] = { + gText_PokenavMatchCall_Strategy, + gText_PokenavMatchCall_TrainerPokemon, + gText_PokenavMatchCall_SelfIntroduction + }; + u8 colors[3] = {TEXT_COLOR_WHITE, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED}; + u32 top = (list->listWindow.unkA + 1 + (fieldId * 2)) & 0xF; + + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, top << 4, list->listWindow.width, 16); + AddTextPrinterParameterized3(list->listWindow.windowId, FONT_NARROW, 2, (top << 4) + 1, colors, TEXT_SKIP_DRAW, fieldNames[fieldId]); + CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_GFX, 0, top << 1, list->listWindow.width, 2); +} + +static void PrintMatchCallFlavorText(struct PokenavListWindowState *windowState, struct PokenavListSub *list, u32 checkPageEntry) +{ + // lines 1, 3, and 5 are the field names printed by PrintMatchCallFieldNames + static const u8 lineOffsets[CHECK_PAGE_ENTRY_COUNT] = { + [CHECK_PAGE_STRATEGY] = 2, + [CHECK_PAGE_POKEMON] = 4, + [CHECK_PAGE_INTRO_1] = 6, + [CHECK_PAGE_INTRO_2] = 7 + }; + + u32 r6 = (list->listWindow.unkA + lineOffsets[checkPageEntry]) & 0xF; + const u8 *str = GetMatchCallFlavorText(windowState->windowTopIndex, checkPageEntry); + + if (str != NULL) + { + FillWindowTilesByRow(list->listWindow.windowId, 1, r6 * 2, list->listWindow.width - 1, 2); + AddTextPrinterParameterized(list->listWindow.windowId, FONT_NARROW, str, 2, (r6 << 4) + 1, TEXT_SKIP_DRAW, NULL); + CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_GFX, 0, r6 * 2, list->listWindow.width, 2); + } +} + +static const struct CompressedSpriteSheet sListArrowSpriteSheets[] = +{ + { + .data = sListArrow_Gfx, + .size = 0xC0, + .tag = GFXTAG_ARROW + } +}; + +static const struct SpritePalette sListArrowPalettes[] = +{ + { + .data = sListArrow_Pal, + .tag = PALTAG_ARROW + }, + {} +}; + +static const struct OamData sOamData_RightArrow = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0 +}; + +static const struct SpriteTemplate sSpriteTemplate_RightArrow = +{ + .tileTag = GFXTAG_ARROW, + .paletteTag = PALTAG_ARROW, + .oam = &sOamData_RightArrow, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_RightArrow +}; + +static const struct OamData sOamData_UpDownArrow = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0 +}; + +static const struct SpriteTemplate sSpriteTemplate_UpDownArrow = +{ + .tileTag = GFXTAG_ARROW, + .paletteTag = PALTAG_ARROW, + .oam = &sOamData_UpDownArrow, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static void LoadListArrowGfx(void) +{ + u32 i; + const struct CompressedSpriteSheet *ptr; + + for (i = 0, ptr = sListArrowSpriteSheets; i < ARRAY_COUNT(sListArrowSpriteSheets); ptr++, i++) + LoadCompressedSpriteSheet(ptr); + + Pokenav_AllocAndLoadPalettes(sListArrowPalettes); +} + +static void CreateListArrowSprites(struct PokenavListWindowState *windowState, struct PokenavListSub *list) +{ + u32 spriteId; + s16 x; + + spriteId = CreateSprite(&sSpriteTemplate_RightArrow, list->listWindow.x * 8 + 3, (list->listWindow.y + 1) * 8, 7); + list->rightArrow = &gSprites[spriteId]; + + x = list->listWindow.x * 8 + (list->listWindow.width - 1) * 4; + spriteId = CreateSprite(&sSpriteTemplate_UpDownArrow, x, list->listWindow.y * 8 + windowState->entriesOnscreen * 16, 7); + list->downArrow = &gSprites[spriteId]; + list->downArrow->oam.tileNum += 2; + list->downArrow->callback = SpriteCB_DownArrow; + + spriteId = CreateSprite(&sSpriteTemplate_UpDownArrow, x, list->listWindow.y * 8, 7); + list->upArrow = &gSprites[spriteId]; + list->upArrow->oam.tileNum += 4; + list->upArrow->callback = SpriteCB_UpArrow; +} + +static void DestroyListArrows(struct PokenavListSub *list) +{ + DestroySprite(list->rightArrow); + DestroySprite(list->upArrow); + DestroySprite(list->downArrow); + FreeSpriteTilesByTag(GFXTAG_ARROW); + FreeSpritePaletteByTag(PALTAG_ARROW); +} + +static void ToggleListArrows(struct PokenavListSub *list, bool32 invisible) +{ + if (invisible) + { + list->rightArrow->callback = SpriteCallbackDummy; + list->upArrow->callback = SpriteCallbackDummy; + list->downArrow->callback = SpriteCallbackDummy; + } + else + { + list->rightArrow->callback = SpriteCB_RightArrow; + list->upArrow->callback = SpriteCB_UpArrow; + list->downArrow->callback = SpriteCB_DownArrow; + } + list->rightArrow->invisible = invisible; + list->upArrow->invisible = invisible; + list->downArrow->invisible = invisible; +} + +static void SpriteCB_RightArrow(struct Sprite *sprite) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + sprite->y2 = list->windowState.selectedIndexOffset << 4; +} + +#define sTimer data[0] +#define sOffset data[1] +#define sInvisible data[7] + +static void SpriteCB_DownArrow(struct Sprite *sprite) +{ + if (!sprite->sInvisible && ShouldShowDownArrow()) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + + if (++sprite->sTimer > 3) + { + s16 offset; + + sprite->sTimer = 0; + offset = (sprite->sOffset + 1) & 7; + sprite->sOffset = offset; + sprite->y2 = offset; + } +} + +static void SpriteCB_UpArrow(struct Sprite *sprite) +{ + if (!sprite->sInvisible && ShouldShowUpArrow()) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + + if (++sprite->sTimer > 3) + { + s16 offset; + + sprite->sTimer = 0; + offset = (sprite->sOffset + 1) & 7; + sprite->sOffset = offset; + sprite->y2 = -1 * offset; + } +} + +void PokenavList_ToggleVerticalArrows(bool32 invisible) +{ + struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + list->sub.upArrow->sInvisible = invisible; + list->sub.downArrow->sInvisible = invisible; +} + +#undef sTimer +#undef sOffset +#undef sInvisible + +static void InitPokenavListWindowState(struct PokenavListWindowState *dst, struct PokenavListTemplate *template) +{ + dst->listPtr = template->list; + dst->windowTopIndex = template->startIndex; + dst->listLength = template->count; + dst->listItemSize = template->itemSize; + dst->entriesOnscreen = template->maxShowed; + if (dst->entriesOnscreen >= dst->listLength) + { + dst->windowTopIndex = 0; + dst->entriesOffscreen = 0; + dst->selectedIndexOffset = template->startIndex; + } + else + { + dst->entriesOffscreen = dst->listLength - dst->entriesOnscreen; + if (dst->windowTopIndex + dst->entriesOnscreen > dst->listLength) + { + dst->selectedIndexOffset = dst->windowTopIndex + dst->entriesOnscreen - dst->listLength; + dst->windowTopIndex = template->startIndex - dst->selectedIndexOffset; + } + else + { + dst->selectedIndexOffset = 0; + } + } +} + +static bool32 CopyPokenavListMenuTemplate(struct PokenavListSub *dest, const struct BgTemplate *bgTemplate, struct PokenavListTemplate *template, s32 tileOffset) +{ + struct WindowTemplate window; + + dest->listWindow.bg = bgTemplate->bg; + dest->listWindow.tileOffset = tileOffset; + dest->bufferItemFunc = template->bufferItemFunc; + dest->iconDrawFunc = template->iconDrawFunc; + dest->listWindow.fillValue = template->fillValue; + dest->listWindow.x = template->item_X; + dest->listWindow.y = template->listTop; + dest->listWindow.width = template->windowWidth; + dest->listWindow.fontId = template->fontId; + + window.bg = bgTemplate->bg; + window.tilemapLeft = template->item_X; + window.tilemapTop = 0; + window.width = template->windowWidth; + window.height = 32; + window.paletteNum = template->fillValue; + window.baseBlock = tileOffset + 2; + + dest->listWindow.windowId = AddWindow(&window); + if (dest->listWindow.windowId == WINDOW_NONE) + return FALSE; + + dest->listWindow.unkA = 0; + dest->rightArrow = NULL; + dest->upArrow = NULL; + dest->downArrow = NULL; + return 1; +} diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index 88c1773a6d..c51ab10bae 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -13,7 +13,7 @@ #include "menu.h" #include "dma3.h" -struct PokenavMainMenuResources +struct Pokenav_MainMenu { void (*loopTask)(u32); u32 (*isLoopTaskActiveFunc)(void); @@ -24,7 +24,7 @@ struct PokenavMainMenuResources struct Sprite *spinningPokenav; struct Sprite *leftHeaderSprites[2]; struct Sprite *submenuLeftHeaderSprites[2]; - u8 tilemapBuffer[0x800]; + u8 tilemapBuffer[BG_SCREEN_SIZE]; }; // This struct uses a 32bit tag, and doesn't have a size field. @@ -36,26 +36,26 @@ struct CompressedSpriteSheetNoSize }; static void CleanupPokenavMainMenuResources(void); -static void LoadLeftHeaderGfxForSubMenu(u32 arg0); -static void LoadLeftHeaderGfxForMenu(u32 index); -static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide); -static void HideLeftHeaderSprites(bool32 isOnRightSide); -static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide); -static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide); -static void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration); -static void SpriteCB_MoveLeftHeader(struct Sprite *sprite); +static void LoadLeftHeaderGfxForSubMenu(u32); +static void LoadLeftHeaderGfxForMenu(u32); +static void HideLeftHeaderSubmenuSprites(bool32); +static void HideLeftHeaderSprites(bool32); +static void ShowLeftHeaderSprites(u32, bool32); +static void ShowLeftHeaderSubmenuSprites(u32, bool32); +static void MoveLeftHeader(struct Sprite *, s32, s32, s32); +static void SpriteCB_MoveLeftHeader(struct Sprite *); static void InitPokenavMainMenuResources(void); -static void InitHoennMapHeaderSprites(void); +static void CreateLeftHeaderSprites(void); static void InitHelpBar(void); -static u32 LoopedTask_SlideMenuHeaderUp(s32 a0); -static u32 LoopedTask_SlideMenuHeaderDown(s32 a0); -static void DrawHelpBar(u32 windowId); -static void SpriteCB_SpinningPokenav(struct Sprite* sprite); -static u32 LoopedTask_InitPokenavMenu(s32 a0); +static u32 LoopedTask_SlideMenuHeaderUp(s32); +static u32 LoopedTask_SlideMenuHeaderDown(s32); +static void DrawHelpBar(u32); +static void SpriteCB_SpinningPokenav(struct Sprite *); +static u32 LoopedTask_InitPokenavMenu(s32); -const u16 gSpinningPokenavPaletteData[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); -const u32 gSpinningPokenavGfx[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz"); -const u32 gUnused_SpinningPokenavGfx2[] = INCBIN_U32("graphics/pokenav/icon2_unused.4bpp.lz"); +static const u16 sSpinningPokenav_Pal[] = INCBIN_U16("graphics/pokenav/nav_icon.gbapal"); +static const u32 sSpinningPokenav_Gfx[] = INCBIN_U32("graphics/pokenav/nav_icon.4bpp.lz"); +static const u32 sBlueLightCopy[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); // Unused copy of sMatchCallBlueLightTiles const struct BgTemplate gPokenavMainMenuBgTemplates[] = { @@ -105,32 +105,32 @@ static const u8 sHelpBarTextColors[3] = TEXT_COLOR_RED, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; -static const struct CompressedSpriteSheet gSpinningPokenavSpriteSheet[] = +static const struct CompressedSpriteSheet sSpinningPokenavSpriteSheet[] = { { - .data = gSpinningPokenavGfx, + .data = sSpinningPokenav_Gfx, .size = 0x1000, .tag = 0, } }; -static const struct SpritePalette gSpinningNavgearPalettes[] = +static const struct SpritePalette sSpinningNavgearPalettes[] = { { - .data = gSpinningPokenavPaletteData, + .data = sSpinningPokenav_Pal, .tag = 0, }, {} }; -static const struct CompressedSpriteSheet sPokenavHoennMapLeftHeaderSpriteSheet = +static const struct CompressedSpriteSheet sMenuLeftHeaderSpriteSheet = { - .data = gPokenavLeftHeaderHoennMap_Gfx, + .data = gPokenavLeftHeaderHoennMap_Gfx, // Hoenn map is the first of the headers listed .size = 0xC00, .tag = 2 }; -static const struct CompressedSpriteSheet sPokenavMenuLeftHeaderSpriteSheets[] = +static const struct CompressedSpriteSheet sMenuLeftHeaderSpriteSheets[] = { [POKENAV_GFX_MAIN_MENU] = { .data = gPokenavLeftHeaderMainMenu_Gfx, @@ -239,7 +239,7 @@ static const struct SpriteTemplate sSpinningPokenavSpriteTemplate = .callback = SpriteCB_SpinningPokenav }; -static const struct OamData sPokenavLeftHeaderHoennMapSpriteOam = +static const struct OamData sOamData_LeftHeader = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -253,7 +253,7 @@ static const struct OamData sPokenavLeftHeaderHoennMapSpriteOam = .paletteNum = 0, }; -static const struct OamData sUnknown_0861FB24 = +static const struct OamData sOamData_SubmenuLeftHeader = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -268,22 +268,22 @@ static const struct OamData sUnknown_0861FB24 = .paletteNum = 0, }; -static const struct SpriteTemplate sPokenavLeftHeaderHoennMapSpriteTemplate = +static const struct SpriteTemplate sLeftHeaderSpriteTemplate = { .tileTag = 2, .paletteTag = 1, - .oam = &sPokenavLeftHeaderHoennMapSpriteOam, + .oam = &sOamData_LeftHeader, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate sUnknown_0861FB44 = +static const struct SpriteTemplate sSubmenuLeftHeaderSpriteTemplate = { .tileTag = 2, .paletteTag = 2, - .oam = &sUnknown_0861FB24, + .oam = &sOamData_SubmenuLeftHeader, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -292,22 +292,22 @@ static const struct SpriteTemplate sUnknown_0861FB44 = bool32 InitPokenavMainMenu(void) { - struct PokenavMainMenuResources *structPtr; + struct Pokenav_MainMenu *menu; - structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU, sizeof(struct PokenavMainMenuResources)); - if (structPtr == NULL) + menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU, sizeof(struct Pokenav_MainMenu)); + if (menu == NULL) return FALSE; ResetSpriteData(); FreeAllSpritePalettes(); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_InitPokenavMenu, 1); + menu->currentTaskId = CreateLoopedTask(LoopedTask_InitPokenavMenu, 1); return TRUE; } u32 PokenavMainMenuLoopedTaskIsActive(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - return IsLoopedTaskActive(structPtr->currentTaskId); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + return IsLoopedTaskActive(menu->currentTaskId); } void ShutdownPokenav(void) @@ -330,11 +330,11 @@ bool32 WaitForPokenavShutdownFade(void) return TRUE; } -static u32 LoopedTask_InitPokenavMenu(s32 a0) +static u32 LoopedTask_InitPokenavMenu(s32 state) { - struct PokenavMainMenuResources *structPtr; + struct Pokenav_MainMenu *menu; - switch (a0) + switch (state) { case 0: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); @@ -345,9 +345,9 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) ResetTempTileDataBuffers(); return LT_INC_AND_CONTINUE; case 1: - structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DecompressAndCopyTileDataToVram(0, &gPokenavHeader_Gfx, 0, 0, 0); - SetBgTilemapBuffer(0, structPtr->tilemapBuffer); + SetBgTilemapBuffer(0, menu->tilemapBuffer); CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20); CopyBgTilemapBufferToVram(0); @@ -363,7 +363,7 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) return LT_PAUSE; InitPokenavMainMenuResources(); - InitHoennMapHeaderSprites(); + CreateLeftHeaderSprites(); ShowBg(0); return LT_FINISH; default: @@ -373,46 +373,46 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) void SetActiveMenuLoopTasks(void *createLoopTask, void *isLoopTaskActive) // Fix types later. { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->loopTask = createLoopTask; - structPtr->isLoopTaskActiveFunc = isLoopTaskActive; - structPtr->unused = 0; + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + menu->loopTask = createLoopTask; + menu->isLoopTaskActiveFunc = isLoopTaskActive; + menu->unused = 0; } -void RunMainMenuLoopedTask(u32 a0) +void RunMainMenuLoopedTask(u32 state) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->unused = 0; - structPtr->loopTask(a0); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + menu->unused = 0; + menu->loopTask(state); } u32 IsActiveMenuLoopTaskActive(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - return structPtr->isLoopTaskActiveFunc(); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + return menu->isLoopTaskActiveFunc(); } void SlideMenuHeaderUp(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderUp, 4); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + menu->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderUp, 4); } void SlideMenuHeaderDown(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderDown, 4); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + menu->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderDown, 4); } bool32 MainMenuLoopedTaskIsBusy(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - return IsLoopedTaskActive(structPtr->currentTaskId); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + return IsLoopedTaskActive(menu->currentTaskId); } -static u32 LoopedTask_SlideMenuHeaderUp(s32 a0) +static u32 LoopedTask_SlideMenuHeaderUp(s32 state) { - switch (a0) + switch (state) { default: return LT_FINISH; @@ -421,9 +421,9 @@ static u32 LoopedTask_SlideMenuHeaderUp(s32 a0) case 0: return LT_INC_AND_PAUSE; case 2: - if (ChangeBgY(0, 384, 1) >= 0x2000u) + if (ChangeBgY(0, 384, BG_COORD_ADD) >= 0x2000u) { - ChangeBgY(0, 0x2000, 0); + ChangeBgY(0, 0x2000, BG_COORD_SET); return LT_FINISH; } @@ -431,11 +431,11 @@ static u32 LoopedTask_SlideMenuHeaderUp(s32 a0) } } -static u32 LoopedTask_SlideMenuHeaderDown(s32 a0) +static u32 LoopedTask_SlideMenuHeaderDown(s32 state) { - if (ChangeBgY(0, 384, 2) <= 0) + if (ChangeBgY(0, 384, BG_COORD_SUB) <= 0) { - ChangeBgY(0, 0, 0); + ChangeBgY(0, 0, BG_COORD_SET); return LT_FINISH; } return LT_PAUSE; @@ -473,7 +473,6 @@ void PokenavFillPalette(u32 palIndex, u16 fillValue) void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a4, u16 *palette) { - if (a4 == 0) { CpuCopy16(src, palette, size * 2); @@ -496,11 +495,11 @@ void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a g1 = ((((GET_G(*dest) << 8) - (g << 8)) / a3) * a4) >> 8; b1 = ((((GET_B(*dest) << 8) - (b << 8)) / a3) * a4) >> 8; - r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match; I have to assign the value of ((r + r1) & 0x1F) to r - g = (g + g1) & 0x1F; //See above - b = (b + b1) & 0x1F; //See above + r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match + g = (g + g1) & 0x1F; + b = (b + b1) & 0x1F; - *palette = RGB2(r, g, b); //See above comment + *palette = RGB2(r, g, b); src++, dest++; palette++; @@ -510,20 +509,20 @@ void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a void PokenavFadeScreen(s32 fadeType) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); switch (fadeType) { - case 0: - BeginNormalPaletteFade(structPtr->palettes, -2, 0, 16, RGB_BLACK); + case POKENAV_FADE_TO_BLACK: + BeginNormalPaletteFade(menu->palettes, -2, 0, 16, RGB_BLACK); break; - case 1: - BeginNormalPaletteFade(structPtr->palettes, -2, 16, 0, RGB_BLACK); + case POKENAV_FADE_FROM_BLACK: + BeginNormalPaletteFade(menu->palettes, -2, 16, 0, RGB_BLACK); break; - case 2: + case POKENAV_FADE_TO_BLACK_ALL: BeginNormalPaletteFade(PALETTES_ALL, -2, 0, 16, RGB_BLACK); break; - case 3: + case POKENAV_FADE_FROM_BLACK_ALL: BeginNormalPaletteFade(PALETTES_ALL, -2, 16, 0, RGB_BLACK); break; } @@ -534,9 +533,10 @@ bool32 IsPaletteFadeActive(void) return gPaletteFade.active; } -void sub_81C7B40(void) +// Excludes the first obj and bg palettes +void FadeToBlackExceptPrimary(void) { - BlendPalettes(PALETTES_ALL & ~(0x10000 | 0x1), 16, RGB_BLACK); + BlendPalettes(PALETTES_ALL & ~(1 << 16 | 1), 16, RGB_BLACK); } void InitBgTemplates(const struct BgTemplate *templates, int count) @@ -549,21 +549,21 @@ void InitBgTemplates(const struct BgTemplate *templates, int count) static void InitHelpBar(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); InitWindows(&sHelpBarWindowTemplate[0]); - structPtr->helpBarWindowId = 0; - DrawHelpBar(structPtr->helpBarWindowId); - PutWindowTilemap(structPtr->helpBarWindowId); - CopyWindowToVram(structPtr->helpBarWindowId, 3); // TODO: Use a defined constant here. + menu->helpBarWindowId = 0; + DrawHelpBar(menu->helpBarWindowId); + PutWindowTilemap(menu->helpBarWindowId); + CopyWindowToVram(menu->helpBarWindowId, COPYWIN_FULL); } void PrintHelpBarText(u32 textId) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - DrawHelpBar(structPtr->helpBarWindowId); - AddTextPrinterParameterized3(structPtr->helpBarWindowId, 1, 0, 1, sHelpBarTextColors, 0, sHelpBarTexts[textId]); + DrawHelpBar(menu->helpBarWindowId); + AddTextPrinterParameterized3(menu->helpBarWindowId, FONT_NORMAL, 0, 1, sHelpBarTextColors, 0, sHelpBarTexts[textId]); } bool32 WaitForHelpBar(void) @@ -581,22 +581,22 @@ static void InitPokenavMainMenuResources(void) { s32 i; u8 spriteId; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - for (i = 0; i < ARRAY_COUNT(gSpinningPokenavSpriteSheet); i++) - LoadCompressedSpriteSheet(&gSpinningPokenavSpriteSheet[i]); + for (i = 0; i < ARRAY_COUNT(sSpinningPokenavSpriteSheet); i++) + LoadCompressedSpriteSheet(&sSpinningPokenavSpriteSheet[i]); - Pokenav_AllocAndLoadPalettes(gSpinningNavgearPalettes); - structPtr->palettes = ~1 & ~(0x10000 << IndexOfSpritePaletteTag(0)); + Pokenav_AllocAndLoadPalettes(sSpinningNavgearPalettes); + menu->palettes = ~1 & ~(0x10000 << IndexOfSpritePaletteTag(0)); spriteId = CreateSprite(&sSpinningPokenavSpriteTemplate, 220, 12, 0); - structPtr->spinningPokenav = &gSprites[spriteId]; + menu->spinningPokenav = &gSprites[spriteId]; } static void CleanupPokenavMainMenuResources(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - DestroySprite(structPtr->spinningPokenav); + DestroySprite(menu->spinningPokenav); FreeSpriteTilesByTag(0); FreeSpritePaletteByTag(0); } @@ -607,47 +607,50 @@ static void SpriteCB_SpinningPokenav(struct Sprite *sprite) sprite->y2 = (GetBgY(0) / 256u) * -1; } -struct Sprite *PauseSpinningPokenavSprite(void) +struct Sprite *GetSpinningPokenavSprite(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->spinningPokenav->callback = SpriteCallbackDummy; - return structPtr->spinningPokenav; + menu->spinningPokenav->callback = SpriteCallbackDummy; + return menu->spinningPokenav; } -void ResumeSpinningPokenavSprite(void) +void HideSpinningPokenavSprite(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->spinningPokenav->x = 220; - structPtr->spinningPokenav->y = 12; - structPtr->spinningPokenav->callback = SpriteCB_SpinningPokenav; - structPtr->spinningPokenav->invisible = FALSE; - structPtr->spinningPokenav->oam.priority = 0; - structPtr->spinningPokenav->subpriority = 0; + // Move sprite so it's no longer visible + menu->spinningPokenav->x = 220; + menu->spinningPokenav->y = 12; + menu->spinningPokenav->callback = SpriteCB_SpinningPokenav; + menu->spinningPokenav->invisible = FALSE; + menu->spinningPokenav->oam.priority = 0; + menu->spinningPokenav->subpriority = 0; } -static void InitHoennMapHeaderSprites(void) +static void CreateLeftHeaderSprites(void) { s32 i, spriteId; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet); + LoadCompressedSpriteSheet(&sMenuLeftHeaderSpriteSheet); AllocSpritePalette(1); AllocSpritePalette(2); - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++) { - spriteId = CreateSprite(&sPokenavLeftHeaderHoennMapSpriteTemplate, 0, 0, 1); - structPtr->leftHeaderSprites[i] = &gSprites[spriteId]; - structPtr->leftHeaderSprites[i]->invisible = TRUE; - structPtr->leftHeaderSprites[i]->x2 = i * 64; + // Create main left header + spriteId = CreateSprite(&sLeftHeaderSpriteTemplate, 0, 0, 1); + menu->leftHeaderSprites[i] = &gSprites[spriteId]; + menu->leftHeaderSprites[i]->invisible = TRUE; + menu->leftHeaderSprites[i]->x2 = i * 64; - spriteId = CreateSprite(&sUnknown_0861FB44, 0, 0, 2); - structPtr->submenuLeftHeaderSprites[i] = &gSprites[spriteId]; - structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE; - structPtr->submenuLeftHeaderSprites[i]->x2 = i * 32; - structPtr->submenuLeftHeaderSprites[i]->y2 = 18; - structPtr->submenuLeftHeaderSprites[i]->oam.tileNum += (i * 8) + 64; + // Create submenu left header + spriteId = CreateSprite(&sSubmenuLeftHeaderSpriteTemplate, 0, 0, 2); + menu->submenuLeftHeaderSprites[i] = &gSprites[spriteId]; + menu->submenuLeftHeaderSprites[i]->invisible = TRUE; + menu->submenuLeftHeaderSprites[i]->x2 = i * 32; + menu->submenuLeftHeaderSprites[i]->y2 = 18; + menu->submenuLeftHeaderSprites[i]->oam.tileNum += (i * 8) + 64; } } @@ -661,34 +664,34 @@ void LoadLeftHeaderGfxForIndex(u32 menuGfxId) void UpdateRegionMapRightHeaderTiles(u32 menuGfxId) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT) - structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 32; + menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 32; else - structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 64; + menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 64; } static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) { - struct PokenavMainMenuResources *structPtr; + struct Pokenav_MainMenu *menu; u32 size, tag; if (menuGfxId >= POKENAV_GFX_SUBMENUS_START) return; - structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - tag = sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].tag; - size = GetDecompressedDataSize(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data); + menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + tag = sMenuLeftHeaderSpriteSheets[menuGfxId].tag; + size = GetDecompressedDataSize(sMenuLeftHeaderSpriteSheets[menuGfxId].data); LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20); - LZ77UnCompWram(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer); + LZ77UnCompWram(sMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer); RequestDma3Copy(gDecompressionBuffer, (void *)OBJ_VRAM0 + (GetSpriteTileStartByTag(2) * 32), size, 1); - structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].size; + menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sMenuLeftHeaderSpriteSheets[menuGfxId].size; if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT || menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_IN) - structPtr->leftHeaderSprites[1]->x2 = 56; + menu->leftHeaderSprites[1]->x2 = 56; else - structPtr->leftHeaderSprites[1]->x2 = 64; + menu->leftHeaderSprites[1]->x2 = 64; } static void LoadLeftHeaderGfxForSubMenu(u32 menuGfxId) @@ -731,20 +734,20 @@ void HideMainOrSubMenuLeftHeader(u32 id, bool32 onRightSide) void SetLeftHeaderSpritesInvisibility(void) { s32 i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++) { - structPtr->leftHeaderSprites[i]->invisible = TRUE; - structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE; + menu->leftHeaderSprites[i]->invisible = TRUE; + menu->submenuLeftHeaderSprites[i]->invisible = TRUE; } } bool32 AreLeftHeaderSpritesMoving(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - if (structPtr->leftHeaderSprites[0]->callback == SpriteCallbackDummy && structPtr->submenuLeftHeaderSprites[0]->callback == SpriteCallbackDummy) + if (menu->leftHeaderSprites[0]->callback == SpriteCallbackDummy && menu->submenuLeftHeaderSprites[0]->callback == SpriteCallbackDummy) return FALSE; else return TRUE; @@ -753,66 +756,66 @@ bool32 AreLeftHeaderSpritesMoving(void) static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = -96, end = 32; else start = 256, end = 160; - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++) { - structPtr->leftHeaderSprites[i]->y = startY; - MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); + menu->leftHeaderSprites[i]->y = startY; + MoveLeftHeader(menu->leftHeaderSprites[i], start, end, 12); } } static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = -96, end = 16; else start = 256, end = 192; - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->submenuLeftHeaderSprites); i++) { - structPtr->submenuLeftHeaderSprites[i]->y = startY; - MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); + menu->submenuLeftHeaderSprites[i]->y = startY; + MoveLeftHeader(menu->submenuLeftHeaderSprites[i], start, end, 12); } } static void HideLeftHeaderSprites(bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = 32, end = -96; else start = 192, end = 256; - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++) { - MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); + MoveLeftHeader(menu->leftHeaderSprites[i], start, end, 12); } } static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = 16, end = -96; else start = 192, end = 256; - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->submenuLeftHeaderSprites); i++) { - MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); + MoveLeftHeader(menu->submenuLeftHeaderSprites[i], start, end, 12); } } diff --git a/src/pokenav_match_call_2.c b/src/pokenav_match_call_2.c deleted file mode 100755 index 846171efd8..0000000000 --- a/src/pokenav_match_call_2.c +++ /dev/null @@ -1,1278 +0,0 @@ -#include "global.h" -#include "bg.h" -#include "data.h" -#include "decompress.h" -#include "dma3.h" -#include "international_string_util.h" -#include "main.h" -#include "match_call.h" -#include "menu.h" -#include "overworld.h" -#include "palette.h" -#include "pokenav.h" -#include "region_map.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "text.h" -#include "text_window.h" -#include "trig.h" -#include "window.h" -#include "constants/game_stat.h" -#include "constants/region_map_sections.h" -#include "constants/songs.h" - -struct Pokenav4Struct -{ - bool32 (*isTaskActiveCB)(void); - u32 loopTaskId; - u8 filler8[0x6]; - u8 unkE; - u8 unkF; - u16 locWindowId; - u16 infoBoxWindowId; - u16 msgBoxWindowId; - s16 unk16; - u8 unused18; - u8 unused19; - u16 unk1A; - struct Sprite *optionsCursorSprite; - struct Sprite *trainerPicSprite; - u8 unk24[0x800]; - u8 unk824[0x800]; - u8 unk1024[0x800]; - u8 *unk1824; - u8 unk1828[0x800]; - u8 unk2028[0x20]; -}; - -static bool32 GetCurrentLoopedTaskActive(void); -static u32 LoopedTask_OpenMatchCall(s32); -static void InitMatchCallPokenavListMenuTemplate(void); -static void sub_81CBC1C(void); -static void RemoveMatchCallSprites(void); -static void sub_81CC034(struct Pokenav4Struct *); -static void DrawMatchCallLeftColumnWindows(struct Pokenav4Struct *); -static void UpdateMatchCallInfoBox(struct Pokenav4Struct *); -static void PrintMatchCallLocation(struct Pokenav4Struct *, int); -static void sub_81CC214(void); -static void sub_81CBC38(int); -static void PrintMatchCallSelectionOptions(struct Pokenav4Struct *); -static bool32 sub_81CBFC4(struct Pokenav4Struct *); -static void UpdateCursorGfxPos(struct Pokenav4Struct *, int); -static bool32 IsDma3ManagerBusyWithBgCopy1(struct Pokenav4Struct *); -static void UpdateWindowsReturnToTrainerList(struct Pokenav4Struct *); -static void DrawMsgBoxForMatchCallMsg(struct Pokenav4Struct *); -static bool32 IsDma3ManagerBusyWithBgCopy2(struct Pokenav4Struct *); -static void PrintCallingDots(struct Pokenav4Struct *); -static bool32 WaitForCallingDotsText(struct Pokenav4Struct *); -static void PrintMatchCallMessage(struct Pokenav4Struct *); -static bool32 WaitForMatchCallMessageText(struct Pokenav4Struct *); -static void DrawMsgBoxForCloseByMsg(struct Pokenav4Struct *); -static void PrintTrainerIsCloseBy(struct Pokenav4Struct *); -static bool32 WaitForTrainerIsCloseByText(struct Pokenav4Struct *); -static void DrawSpinningPokenavForCall(struct Pokenav4Struct *); -static bool32 WaitForSpinningPokenav(struct Pokenav4Struct *); -static void UpdateWindowsToShowCheckPage(struct Pokenav4Struct *); -static void LoadCheckPageTrainerPic(struct Pokenav4Struct *); -static bool32 WaitForTrainerPic(struct Pokenav4Struct *); -static void TrainerPicSlideOffscreen(struct Pokenav4Struct *); -static void sub_81CBC64(u8 taskId); -static void TryDrawRematchPokeballIcon(u16 windowId, u32, u32); -static void PrintNumberRegisteredLabel(u16 windowId); -static void PrintNumberRegistered(u16 windowId); -static void PrintNumberOfBattlesLabel(u16 windowId); -static void PrintNumberOfBattles(u16 windowId); -static void PrintMatchCallInfoLabel(u16 windowId, const u8 *str, int top); -static void PrintMatchCallInfoNumber(u16 windowId, const u8 *str, int top); -static void sub_81CC2F0(struct Pokenav4Struct *, int); -static void CloseMatchCallSelectOptionsWindow(struct Pokenav4Struct *); -static struct Sprite *CreateTrainerPicSprite(void); -static void SpriteCB_TrainerPicSlideOnscreen(struct Sprite *sprite); -static void SpriteCB_TrainerPicSlideOffscreen(struct Sprite *sprite); -void SpriteCB_OptionsCursor(struct Sprite *sprite); -u32 MatchCallListCursorDown(s32); -u32 MatchCallListCursorUp(s32); -u32 MatchCallListPageDown(s32); -u32 MatchCallListPageUp(s32); -u32 SelectMatchCallEntry(s32); -u32 MoveMatchCallOptionsCursor(s32); -static u32 CancelMatchCallSelection(s32); -u32 DoMatchCallMessage(s32); -u32 DoTrainerCloseByMessage(s32); -u32 sub_81CB888(s32); -u32 ShowCheckPage(s32); -u32 ShowCheckPageUp(s32); -u32 ShowCheckPageDown(s32); -u32 ExitCheckPage(s32); -u32 ExitMatchCall(s32); - -static const u16 sMatchCallUI_Pal[] = INCBIN_U16("graphics/pokenav/ui_matchcall.gbapal"); -static const u32 sMatchCallUI_Gfx[] = INCBIN_U32("graphics/pokenav/ui_matchcall.4bpp.lz"); -static const u32 sMatchCallUI_Tilemap[] = INCBIN_U32("graphics/pokenav/ui_matchcall.bin.lz"); -static const u16 gUnknown_08622698[] = INCBIN_U16("graphics/pokenav/arrow2.gbapal"); -static const u32 gUnknown_086226B8[] = INCBIN_U32("graphics/pokenav/arrow2.4bpp.lz"); -static const u16 gUnknown_086226E0[] = INCBIN_U16("graphics/pokenav/86226E0.gbapal"); -static const u16 gUnknown_08622700[] = INCBIN_U16("graphics/pokenav/8622700.gbapal"); -static const u16 gUnknown_08622720[] = INCBIN_U16("graphics/pokenav/pokeball_matchcall.gbapal"); -static const u32 gUnknown_08622760[] = INCBIN_U32("graphics/pokenav/pokeball_matchcall.4bpp.lz"); - -const struct BgTemplate sMatchCallBgTemplates[3] = -{ - { - .bg = 1, - .charBaseIndex = 3, - .mapBaseIndex = 0x1F, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 2, - .charBaseIndex = 2, - .mapBaseIndex = 0x06, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0x80 - }, - { - .bg = 3, - .charBaseIndex = 1, - .mapBaseIndex = 0x07, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0 - } -}; - -static const LoopedTask sMatchCallLoopTaskFuncs[] = -{ - [POKENAV_MC_FUNC_NONE] = NULL, - [POKENAV_MC_FUNC_DOWN] = MatchCallListCursorDown, - [POKENAV_MC_FUNC_UP] = MatchCallListCursorUp, - [POKENAV_MC_FUNC_PG_DOWN] = MatchCallListPageDown, - [POKENAV_MC_FUNC_PG_UP] = MatchCallListPageUp, - [POKENAV_MC_FUNC_SELECT] = SelectMatchCallEntry, - [POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR] = MoveMatchCallOptionsCursor, - [POKENAV_MC_FUNC_CANCEL] = CancelMatchCallSelection, - [POKENAV_MC_FUNC_CALL_MSG] = DoMatchCallMessage, - [POKENAV_MC_FUNC_NEARBY_MSG] = DoTrainerCloseByMessage, - [POKENAV_MC_FUNC_10] = sub_81CB888, - [POKENAV_MC_FUNC_SHOW_CHECK_PAGE] = ShowCheckPage, - [POKENAV_MC_FUNC_CHECK_PAGE_UP] = ShowCheckPageUp, - [POKENAV_MC_FUNC_CHECK_PAGE_DOWN] = ShowCheckPageDown, - [POKENAV_MC_FUNC_EXIT_CHECK_PAGE] = ExitCheckPage, - [POKENAV_MC_FUNC_EXIT] = ExitMatchCall -}; - -static const struct WindowTemplate sMatchCallLocationWindowTemplate = -{ - .bg = 2, - .tilemapLeft = 0, - .tilemapTop = 5, - .width = 11, - .height = 2, - .paletteNum = 2, - .baseBlock = 16 -}; - -static const struct WindowTemplate sMatchCallInfoBoxWindowTemplate = -{ - .bg = 2, - .tilemapLeft = 0, - .tilemapTop = 9, - .width = 11, - .height = 8, - .paletteNum = 2, - .baseBlock = 38 -}; - -static const u8 *const sMatchCallOptionTexts[MATCH_CALL_OPTION_COUNT] = -{ - [MATCH_CALL_OPTION_CALL] = gText_Call, - [MATCH_CALL_OPTION_CHECK] = gText_Check, - [MATCH_CALL_OPTION_CANCEL] = gText_Cancel6 -}; - -// The series of 5 dots that appear when someone is called with Match Call -static const u8 sText_CallingDots[] = _("·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·\p"); - -static const struct WindowTemplate sCallMsgBoxWindowTemplate = -{ - .bg = 1, - .tilemapLeft = 1, - .tilemapTop = 12, - .width = 0x1C, - .height = 0x04, - .paletteNum = 1, - .baseBlock = 10 -}; - -const struct CompressedSpriteSheet gUnknown_08622810[1] = -{ - {gUnknown_086226B8, 0x40, 7} -}; - -const struct SpritePalette gUnknown_08622818[2] = -{ - {gUnknown_08622698, 12} -}; - -static const struct OamData sOptionsCursorOamData = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, -}; - -static const struct SpriteTemplate sOptionsCursorSpriteTemplate = -{ - .tileTag = 7, - .paletteTag = 12, - .oam = &sOptionsCursorOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_OptionsCursor, -}; - -static const struct OamData sTrainerPicOamData = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, -}; - -static const struct SpriteTemplate sTrainerPicSpriteTemplate = -{ - .tileTag = 8, - .paletteTag = 13, - .oam = &sTrainerPicOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -bool32 OpenMatchCall(void) -{ - struct Pokenav4Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN, sizeof(struct Pokenav4Struct)); - if (!state) - return FALSE; - - state->unused19 = 0; - state->loopTaskId = CreateLoopedTask(LoopedTask_OpenMatchCall, 1); - state->isTaskActiveCB = GetCurrentLoopedTaskActive; - return TRUE; -} - -void CreateMatchCallLoopedTask(s32 index) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - state->loopTaskId = CreateLoopedTask(sMatchCallLoopTaskFuncs[index], 1); - state->isTaskActiveCB = GetCurrentLoopedTaskActive; -} - -bool32 IsMatchCallLoopedTaskActive(void) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - return state->isTaskActiveCB(); -} - -void FreeMatchCallSubstruct2(void) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - RemoveMatchCallSprites(); - sub_81CBC1C(); - RemoveWindow(state->infoBoxWindowId); - RemoveWindow(state->locWindowId); - RemoveWindow(state->msgBoxWindowId); - FreePokenavSubstruct(6); -} - -static bool32 GetCurrentLoopedTaskActive(void) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - return IsLoopedTaskActive(state->loopTaskId); -} - -static u32 LoopedTask_OpenMatchCall(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - InitBgTemplates(sMatchCallBgTemplates, ARRAY_COUNT(sMatchCallBgTemplates)); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - DecompressAndCopyTileDataToVram(2, sMatchCallUI_Gfx, 0, 0, 0); - SetBgTilemapBuffer(2, state->unk1024); - CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0); - CopyBgTilemapBufferToVram(2); - CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, 0x20, 0x20); - CopyBgTilemapBufferToVram(2); - return LT_INC_AND_PAUSE; - case 1: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - - sub_8199DF0(1, 0, 0, 1); - SetBgTilemapBuffer(1, state->unk24); - FillBgTilemapBufferRect_Palette0(1, 0x1000, 0, 0, 32, 20); - CopyPaletteIntoBufferUnfaded(gUnknown_086226E0, 0x10, 0x20); - CopyBgTilemapBufferToVram(1); - return LT_INC_AND_PAUSE; - case 2: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - - sub_81CC034(state); - DecompressAndCopyTileDataToVram(3, gUnknown_08622760, 0, 0, 0); - CopyPaletteIntoBufferUnfaded(gUnknown_08622700, 0x30, 0x20); - CopyPaletteIntoBufferUnfaded(gUnknown_08622720, 0x50, 0x20); - return LT_INC_AND_PAUSE; - case 3: - if (FreeTempTileDataBuffersIfPossible() || !sub_81CAE28()) - return LT_PAUSE; - - InitMatchCallPokenavListMenuTemplate(); - return LT_INC_AND_PAUSE; - case 4: - if (sub_81C8224()) - return LT_PAUSE; - - DrawMatchCallLeftColumnWindows(state); - return LT_INC_AND_PAUSE; - case 5: - UpdateMatchCallInfoBox(state); - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 6: - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ShowBg(2); - ShowBg(3); - ShowBg(1); - sub_81CC214(); - LoadLeftHeaderGfxForIndex(3); - ShowLeftHeaderGfx(POKENAV_GFX_MATCH_CALL_MENU, 1, 0); - PokenavFadeScreen(1); - return LT_INC_AND_PAUSE; - case 7: - if (IsPaletteFadeActive() || AreLeftHeaderSpritesMoving()) - return LT_PAUSE; - - sub_81CBC38(1); - return LT_FINISH; - default: - return LT_FINISH; - } -} - -u32 MatchCallListCursorDown(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - switch (MatchCall_MoveCursorDown()) - { - case 0: - break; - case 1: - PlaySE(SE_SELECT); - return 7; - case 2: - PlaySE(SE_SELECT); - // fall through - default: - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (IsMonListLoopedTaskActive()) - return LT_PAUSE; - - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 2: - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - break; - } - return LT_FINISH; -} - -u32 MatchCallListCursorUp(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - switch (MatchCall_MoveCursorUp()) - { - case 0: - break; - case 1: - PlaySE(SE_SELECT); - return 7; - case 2: - PlaySE(SE_SELECT); - // fall through - default: - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (IsMonListLoopedTaskActive()) - return LT_PAUSE; - - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 2: - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - break; - } - return LT_FINISH; -} - -u32 MatchCallListPageDown(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - switch (MatchCall_PageDown()) - { - case 0: - break; - case 1: - PlaySE(SE_SELECT); - return 7; - case 2: - PlaySE(SE_SELECT); - // fall through - default: - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (IsMonListLoopedTaskActive()) - return LT_PAUSE; - - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 2: - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - break; - } - return LT_FINISH; -} - -u32 MatchCallListPageUp(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - switch (MatchCall_PageUp()) - { - case 0: - break; - case 1: - PlaySE(SE_SELECT); - return 7; - case 2: - PlaySE(SE_SELECT); - // fall through - default: - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (IsMonListLoopedTaskActive()) - return LT_PAUSE; - - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 2: - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - break; - } - return LT_FINISH; -} - -u32 SelectMatchCallEntry(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - PrintMatchCallSelectionOptions(state); - PrintHelpBarText(HELPBAR_MC_CALL_MENU); - return LT_INC_AND_PAUSE; - case 1: - if (sub_81CBFC4(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 MoveMatchCallOptionsCursor(s32 taskState) -{ - struct Pokenav4Struct *state; - u16 cursorPos; - - PlaySE(SE_SELECT); - state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - cursorPos = GetMatchCallOptionCursorPos(); - UpdateCursorGfxPos(state, cursorPos); - return LT_FINISH; -} - -u32 CancelMatchCallSelection(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - UpdateWindowsReturnToTrainerList(state); - PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); - return LT_INC_AND_PAUSE; - case 1: - if (IsDma3ManagerBusyWithBgCopy1(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 DoMatchCallMessage(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - ToggleMatchCallVerticalArrows(TRUE); - DrawMsgBoxForMatchCallMsg(state); - return LT_INC_AND_PAUSE; - case 1: - if (IsDma3ManagerBusyWithBgCopy2(state)) - return LT_PAUSE; - - PrintCallingDots(state); - PlaySE(SE_POKENAV_CALL); - state->unkE = 0; - return LT_INC_AND_PAUSE; - case 2: - if (WaitForCallingDotsText(state)) - return LT_PAUSE; - - PrintMatchCallMessage(state); - return LT_INC_AND_PAUSE; - case 3: - if (WaitForMatchCallMessageText(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 DoTrainerCloseByMessage(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - DrawMsgBoxForCloseByMsg(state); - ToggleMatchCallVerticalArrows(TRUE); - state->unkE = 1; - return LT_INC_AND_PAUSE; - case 1: - if (IsDma3ManagerBusyWithBgCopy2(state)) - return LT_PAUSE; - - PrintTrainerIsCloseBy(state); - return LT_INC_AND_PAUSE; - case 2: - if (WaitForTrainerIsCloseByText(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 sub_81CB888(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - u32 result = LT_INC_AND_PAUSE; - - switch (taskState) - { - case 0: - if (!state->unkE) - PlaySE(SE_POKENAV_HANG_UP); - - PlaySE(SE_SELECT); - break; - case 1: - DrawSpinningPokenavForCall(state); - break; - case 2: - if (WaitForSpinningPokenav(state)) - result = LT_PAUSE; - break; - case 3: - UpdateWindowsReturnToTrainerList(state); - break; - case 4: - if (IsDma3ManagerBusyWithBgCopy1(state)) - result = LT_PAUSE; - - PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); - break; - case 5: - if (WaitForHelpBar()) - { - result = LT_PAUSE; - } - else - { - if (state->unkF) - { - sub_81C8838(); - result = LT_INC_AND_CONTINUE; - } - else - { - ToggleMatchCallVerticalArrows(FALSE); - result = LT_FINISH; - } - } - break; - case 6: - if (IsDma3ManagerBusyWithBgCopy()) - { - result = LT_PAUSE; - } - else - { - ToggleMatchCallVerticalArrows(FALSE); - result = LT_FINISH; - } - break; - } - - return result; -} - -u32 ShowCheckPage(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - sub_81C877C(); - UpdateWindowsToShowCheckPage(state); - return LT_INC_AND_PAUSE; - case 1: - if (IsMatchCallListTaskActive() || IsDma3ManagerBusyWithBgCopy1(state)) - return LT_PAUSE; - - PrintHelpBarText(HELPBAR_MC_CHECK_PAGE); - return LT_INC_AND_PAUSE; - case 2: - PrintCheckPageInfo(0); - LoadCheckPageTrainerPic(state); - return LT_INC_AND_PAUSE; - case 3: - if (IsMatchCallListTaskActive() || WaitForTrainerPic(state) || WaitForHelpBar()) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 ShowCheckPageDown(s32 taskState) -{ - int topId; - int delta; - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - topId = GetMatchCallListTopIndex(); - delta = GetIndexDeltaOfNextCheckPageDown(topId); - if (delta) - { - PlaySE(SE_SELECT); - state->unk16 = delta; - TrainerPicSlideOffscreen(state); - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (WaitForTrainerPic(state)) - return LT_PAUSE; - - PrintMatchCallLocation(state, state->unk16); - return LT_INC_AND_PAUSE; - case 2: - PrintCheckPageInfo(state->unk16); - return LT_INC_AND_PAUSE; - case 3: - LoadCheckPageTrainerPic(state); - return LT_INC_AND_PAUSE; - case 4: - if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 ExitCheckPage(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - TrainerPicSlideOffscreen(state); - sub_81C87F0(); - return LT_INC_AND_PAUSE; - case 1: - if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) - return LT_PAUSE; - - PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); - UpdateMatchCallInfoBox(state); - return LT_INC_AND_PAUSE; - case 2: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 ShowCheckPageUp(s32 taskState) -{ - int topId; - int delta; - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - topId = GetMatchCallListTopIndex(); - delta = GetIndexDeltaOfNextCheckPageUp(topId); - if (delta) - { - PlaySE(SE_SELECT); - state->unk16 = delta; - TrainerPicSlideOffscreen(state); - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (WaitForTrainerPic(state)) - return LT_PAUSE; - - PrintMatchCallLocation(state, state->unk16); - return LT_INC_AND_PAUSE; - case 2: - PrintCheckPageInfo(state->unk16); - return LT_INC_AND_PAUSE; - case 3: - LoadCheckPageTrainerPic(state); - return LT_INC_AND_PAUSE; - case 4: - if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 ExitMatchCall(s32 taskState) -{ - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - sub_81CBC38(0); - PokenavFadeScreen(0); - SlideMenuHeaderDown(); - return LT_INC_AND_PAUSE; - case 1: - if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) - return LT_PAUSE; - - SetLeftHeaderSpritesInvisibility(); - break; - } - - return LT_FINISH; -} - -static void InitMatchCallPokenavListMenuTemplate(void) -{ - struct PokenavListTemplate template; - template.list.matchCallEntries = sub_81CAE94(); - template.count = GetNumberRegistered(); - template.unk8 = 4; - template.unk6 = 0; - template.item_X = 13; - template.windowWidth = 16; - template.listTop = 1; - template.maxShowed = 8; - template.fillValue = 3; - template.fontId = 7; - template.listFunc.unk10_2 = BufferMatchCallNameAndDesc; - template.unk14 = TryDrawRematchPokeballIcon; - sub_81C81D4(&sMatchCallBgTemplates[2], &template, 2); - CreateTask(sub_81CBC64, 7); -} - -static void sub_81CBC1C(void) -{ - sub_81C8234(); - DestroyTask(FindTaskIdByFunc(sub_81CBC64)); -} - -static void sub_81CBC38(int arg0) -{ - u8 taskId = FindTaskIdByFunc(sub_81CBC64); - if (taskId != TASK_NONE) - gTasks[taskId].data[15] = arg0; -} - -static void sub_81CBC64(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - if (taskData[15]) - { - taskData[0] += 4; - taskData[0] &= 0x7F; - taskData[1] = gSineTable[taskData[0]] >> 4; - PokenavCopyPalette(gUnknown_08622720, gUnknown_08622720 + 0x10, 0x10, 0x10, taskData[1], gPlttBufferUnfaded + 0x50); - if (!gPaletteFade.active) - CpuCopy32(gPlttBufferUnfaded + 0x50, gPlttBufferFaded + 0x50, 0x20); - } -} - -static void TryDrawRematchPokeballIcon(u16 windowId, u32 rematchId, u32 arg2) -{ - u8 bg = GetWindowAttribute(windowId, WINDOW_BG); - u16 *tilemap = GetBgTilemapBuffer(bg); - tilemap += arg2 * 0x40 + 0x1D; - if (ShouldDrawRematchPokeballIcon(rematchId)) - { - tilemap[0] = 0x5000; - tilemap[0x20] = 0x5001; - } - else - { - tilemap[0] = 0x5002; - tilemap[0x20] = 0x5002; - } -} - -void ClearRematchPokeballIcon(u16 windowId, u32 arg0) -{ - u8 bg = GetWindowAttribute(windowId, WINDOW_BG); - u16 *tilemap = GetBgTilemapBuffer(bg); - tilemap += arg0 * 0x40 + 0x1D; - tilemap[0] = 0x5002; - tilemap[0x20] = 0x5002; -} - -static void DrawMatchCallLeftColumnWindows(struct Pokenav4Struct *state) -{ - state->locWindowId = AddWindow(&sMatchCallLocationWindowTemplate); - state->infoBoxWindowId = AddWindow(&sMatchCallInfoBoxWindowTemplate); - FillWindowPixelBuffer(state->locWindowId, PIXEL_FILL(1)); - PutWindowTilemap(state->locWindowId); - FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1)); - PutWindowTilemap(state->infoBoxWindowId); - CopyWindowToVram(state->locWindowId, 1); -} - -static void UpdateMatchCallInfoBox(struct Pokenav4Struct *state) -{ - FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1)); - PrintNumberRegisteredLabel(state->infoBoxWindowId); - PrintNumberRegistered(state->infoBoxWindowId); - PrintNumberOfBattlesLabel(state->infoBoxWindowId); - PrintNumberOfBattles(state->infoBoxWindowId); - CopyWindowToVram(state->infoBoxWindowId, 2); -} - -static void PrintNumberRegisteredLabel(u16 windowId) -{ - PrintMatchCallInfoLabel(windowId, gText_NumberRegistered, 0); -} - -static void PrintNumberRegistered(u16 windowId) -{ - u8 str[3]; - ConvertIntToDecimalStringN(str, GetNumberRegistered(), STR_CONV_MODE_LEFT_ALIGN, 3); - PrintMatchCallInfoNumber(windowId, str, 1); -} - -static void PrintNumberOfBattlesLabel(u16 windowId) -{ - PrintMatchCallInfoLabel(windowId, gText_NumberOfBattles, 2); -} - -static void PrintNumberOfBattles(u16 windowId) -{ - u8 str[5]; - int numTrainerBattles = GetGameStat(GAME_STAT_TRAINER_BATTLES); - if (numTrainerBattles > 99999) - numTrainerBattles = 99999; - - ConvertIntToDecimalStringN(str, numTrainerBattles, STR_CONV_MODE_LEFT_ALIGN, 5); - PrintMatchCallInfoNumber(windowId, str, 3); -} - -static void PrintMatchCallInfoLabel(u16 windowId, const u8 *str, int top) -{ - int y = top * 16 + 1; - AddTextPrinterParameterized(windowId, 7, str, 2, y, TEXT_SPEED_FF, NULL); -} - -static void PrintMatchCallInfoNumber(u16 windowId, const u8 *str, int top) -{ - int x = GetStringRightAlignXOffset(7, str, 86); - int y = top * 16 + 1; - AddTextPrinterParameterized(windowId, 7, str, x, y, TEXT_SPEED_FF, NULL); -} - -static void PrintMatchCallLocation(struct Pokenav4Struct *state, int arg1) -{ - u8 mapName[32]; - int x; - int index = GetSelectedPokenavListIndex() + arg1; - int mapSec = GetMatchCallMapSec(index); - if (mapSec != MAPSEC_NONE) - GetMapName(mapName, mapSec, 0); - else - StringCopy(mapName, gText_Unknown); - - x = GetStringCenterAlignXOffset(7, mapName, 88); - FillWindowPixelBuffer(state->locWindowId, PIXEL_FILL(1)); - AddTextPrinterParameterized(state->locWindowId, 7, mapName, x, 1, 0, NULL); -} - -static void PrintMatchCallSelectionOptions(struct Pokenav4Struct *state) -{ - u32 i; - - FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1)); - for (i = 0; i < MATCH_CALL_OPTION_COUNT; i++) - { - int optionText = GetMatchCallOptionId(i); - if (optionText == MATCH_CALL_OPTION_COUNT) - break; - - AddTextPrinterParameterized(state->infoBoxWindowId, 7, sMatchCallOptionTexts[optionText], 16, i * 16 + 1, TEXT_SPEED_FF, NULL); - } - - CopyWindowToVram(state->infoBoxWindowId, 2); -} - -static bool32 sub_81CBFC4(struct Pokenav4Struct *state) -{ - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_81CC2F0(state, GetMatchCallOptionCursorPos()); - return FALSE; - } - - return TRUE; -} - -static void UpdateWindowsReturnToTrainerList(struct Pokenav4Struct *state) -{ - CloseMatchCallSelectOptionsWindow(state); - UpdateMatchCallInfoBox(state); -} - -static bool32 IsDma3ManagerBusyWithBgCopy1(struct Pokenav4Struct *state) -{ - return IsDma3ManagerBusyWithBgCopy(); -} - -static void UpdateWindowsToShowCheckPage(struct Pokenav4Struct *state) -{ - CloseMatchCallSelectOptionsWindow(state); - FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1)); - CopyWindowToVram(state->infoBoxWindowId, 2); -} - -static void sub_81CC034(struct Pokenav4Struct *state) -{ - state->msgBoxWindowId = AddWindow(&sCallMsgBoxWindowTemplate); - LoadMatchCallWindowGfx(state->msgBoxWindowId, 1, 4); - sub_81C7B40(); -} - -static void DrawMsgBoxForMatchCallMsg(struct Pokenav4Struct *state) -{ - struct Sprite *sprite; - LoadMatchCallWindowGfx(state->msgBoxWindowId, 1, 4); - DrawMatchCallTextBoxBorder(state->msgBoxWindowId, 1, 4); - FillWindowPixelBuffer(state->msgBoxWindowId, PIXEL_FILL(1)); - PutWindowTilemap(state->msgBoxWindowId); - CopyWindowToVram(state->msgBoxWindowId, 3); - sprite = PauseSpinningPokenavSprite(); - sprite->x = 24; - sprite->y = 112; - sprite->y2 = 0; -} - -static void DrawMsgBoxForCloseByMsg(struct Pokenav4Struct *state) -{ - LoadUserWindowBorderGfx(state->msgBoxWindowId, 1, 0x40); - DrawTextBorderOuter(state->msgBoxWindowId, 1, 4); - FillWindowPixelBuffer(state->msgBoxWindowId, PIXEL_FILL(1)); - PutWindowTilemap(state->msgBoxWindowId); - CopyWindowToVram(state->msgBoxWindowId, 3); -} - -static bool32 IsDma3ManagerBusyWithBgCopy2(struct Pokenav4Struct *state) -{ - return IsDma3ManagerBusyWithBgCopy(); -} - -static void PrintCallingDots(struct Pokenav4Struct *state) -{ - AddTextPrinterParameterized(state->msgBoxWindowId, 1, sText_CallingDots, 32, 1, 1, NULL); -} - -static bool32 WaitForCallingDotsText(struct Pokenav4Struct *state) -{ - RunTextPrinters(); - return IsTextPrinterActive(state->msgBoxWindowId); -} - -static void PrintTrainerIsCloseBy(struct Pokenav4Struct *state) -{ - AddTextPrinterParameterized(state->msgBoxWindowId, 1, gText_TrainerCloseBy, 0, 1, 1, NULL); -} - -static bool32 WaitForTrainerIsCloseByText(struct Pokenav4Struct *state) -{ - RunTextPrinters(); - return IsTextPrinterActive(state->msgBoxWindowId); -} - -static void PrintMatchCallMessage(struct Pokenav4Struct *state) -{ - int index = GetSelectedPokenavListIndex(); - const u8 *str = GetMatchCallMessageText(index, &state->unkF); - u8 speed = GetPlayerTextSpeedDelay(); - AddTextPrinterParameterized(state->msgBoxWindowId, 1, str, 32, 1, speed, NULL); -} - -static bool32 WaitForMatchCallMessageText(struct Pokenav4Struct *state) -{ - if (JOY_HELD(A_BUTTON)) - gTextFlags.canABSpeedUpPrint = 1; - else - gTextFlags.canABSpeedUpPrint = 0; - - RunTextPrinters(); - return IsTextPrinterActive(state->msgBoxWindowId); -} - -static void DrawSpinningPokenavForCall(struct Pokenav4Struct *state) -{ - ResumeSpinningPokenavSprite(); - FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); - CopyBgTilemapBufferToVram(1); -} - -static bool32 WaitForSpinningPokenav(struct Pokenav4Struct *state) -{ - return IsDma3ManagerBusyWithBgCopy(); -} - -static void sub_81CC214(void) -{ - int i; - u8 paletteNum; - struct SpriteSheet spriteSheet; - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - - for (i = 0; i < ARRAY_COUNT(gUnknown_08622810); i++) - LoadCompressedSpriteSheet(&gUnknown_08622810[i]); - - Pokenav_AllocAndLoadPalettes(gUnknown_08622818); - state->optionsCursorSprite = NULL; - spriteSheet.data = state->unk1828; - spriteSheet.size = 0x800; - spriteSheet.tag = 8; - state->unk1824 = (u8 *)OBJ_VRAM0 + LoadSpriteSheet(&spriteSheet) * 0x20; - paletteNum = AllocSpritePalette(13); - state->unk1A = 0x100 + paletteNum * 0x10; - state->trainerPicSprite = CreateTrainerPicSprite(); - state->trainerPicSprite->invisible = TRUE; -} - -static void RemoveMatchCallSprites(void) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - if (state->optionsCursorSprite) - DestroySprite(state->optionsCursorSprite); - if (state->trainerPicSprite) - DestroySprite(state->trainerPicSprite); - - FreeSpriteTilesByTag(8); - FreeSpriteTilesByTag(7); - FreeSpritePaletteByTag(12); - FreeSpritePaletteByTag(13); -} - -static void sub_81CC2F0(struct Pokenav4Struct *state, int top) -{ - if (!state->optionsCursorSprite) - { - u8 spriteId = CreateSprite(&sOptionsCursorSpriteTemplate, 4, 80, 5); - state->optionsCursorSprite = &gSprites[spriteId]; - UpdateCursorGfxPos(state, top); - } -} - -static void CloseMatchCallSelectOptionsWindow(struct Pokenav4Struct *state) -{ - DestroySprite(state->optionsCursorSprite); - state->optionsCursorSprite = NULL; -} - -static void UpdateCursorGfxPos(struct Pokenav4Struct *state, int top) -{ - state->optionsCursorSprite->y2 = top * 16; -} - -void SpriteCB_OptionsCursor(struct Sprite *sprite) -{ - if (++sprite->data[0] > 3) - { - sprite->data[0] = 0; - sprite->x2 = (sprite->x2 + 1) & 0x7; - } -} - -static struct Sprite *CreateTrainerPicSprite(void) -{ - u8 spriteId = CreateSprite(&sTrainerPicSpriteTemplate, 44, 104, 6); - return &gSprites[spriteId]; -} - -static void LoadCheckPageTrainerPic(struct Pokenav4Struct *state) -{ - u16 cursor; - int trainerPic = GetMatchCallTrainerPic(GetSelectedPokenavListIndex()); - if (trainerPic >= 0) - { - DecompressPicFromTable(&gTrainerFrontPicTable[trainerPic], state->unk1828, SPECIES_NONE); - LZ77UnCompWram(gTrainerFrontPicPaletteTable[trainerPic].data, state->unk2028); - cursor = RequestDma3Copy(state->unk1828, state->unk1824, 0x800, 1); - LoadPalette(state->unk2028, state->unk1A, 0x20); - state->trainerPicSprite->data[0] = 0; - state->trainerPicSprite->data[7] = cursor; - state->trainerPicSprite->callback = SpriteCB_TrainerPicSlideOnscreen; - } -} - -static void TrainerPicSlideOffscreen(struct Pokenav4Struct *state) -{ - state->trainerPicSprite->callback = SpriteCB_TrainerPicSlideOffscreen; -} - -static bool32 WaitForTrainerPic(struct Pokenav4Struct *state) -{ - return state->trainerPicSprite->callback != SpriteCallbackDummy; -} - -static void SpriteCB_TrainerPicSlideOnscreen(struct Sprite *sprite) -{ - switch (sprite->data[0]) - { - case 0: - if (CheckForSpaceForDma3Request(sprite->data[7]) != -1) - { - sprite->x2 = -80; - sprite->invisible = FALSE; - sprite->data[0]++; - } - break; - case 1: - sprite->x2 += 8; - if (sprite->x2 >= 0) - { - sprite->x2 = 0; - sprite->callback = SpriteCallbackDummy; - } - break; - } -} - -static void SpriteCB_TrainerPicSlideOffscreen(struct Sprite *sprite) -{ - sprite->x2 -= 8; - if (sprite->x2 <= -80) - { - sprite->invisible = TRUE; - sprite->callback = SpriteCallbackDummy; - } -} diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index 6610dcb803..2e8cc40b5c 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -324,7 +324,7 @@ static const match_call_text_data_t sWallyTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -const struct MatchCallLocationOverride sWallyLocationData[] = { +static const struct MatchCallLocationOverride sWallyLocationData[] = { { FLAG_HIDE_MAUVILLE_CITY_WALLY, MAPSEC_VERDANTURF_TOWN }, { FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, MAPSEC_NONE }, { FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY, MAPSEC_VICTORY_ROAD }, @@ -336,7 +336,7 @@ static const struct MatchCallWally sWallyMatchCallHeader = .type = MC_TYPE_WALLY, .mapSec = 0, .flag = FLAG_ENABLE_WALLY_MATCH_CALL, - .rematchTableIdx = REMATCH_WALLY_3, + .rematchTableIdx = REMATCH_WALLY_VR, .desc = gText_WallyMatchCallDesc, .textData = sWallyTextScripts, .locationData = sWallyLocationData @@ -658,38 +658,38 @@ static void (*const sMatchCall_GetNameAndDescFunctions[])(match_call_t, const u8 }; static const struct MatchCallCheckPageOverride sCheckPageOverrides[] = { - { - .idx = MC_HEADER_STEVEN, - .facilityClass = FACILITY_CLASS_STEVEN, - .flag = 0xFFFF, - .flavorTexts = { - [CHECK_PAGE_STRATEGY] = gText_MatchCallSteven_Strategy, - [CHECK_PAGE_POKEMON] = gText_MatchCallSteven_Pokemon, - [CHECK_PAGE_INTRO_1] = gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle, - [CHECK_PAGE_INTRO_2] = gText_MatchCallSteven_Intro2_BeforeMeteorFallsBattle - } + { + .idx = MC_HEADER_STEVEN, + .facilityClass = FACILITY_CLASS_STEVEN, + .flag = 0xFFFF, + .flavorTexts = { + [CHECK_PAGE_STRATEGY] = gText_MatchCallSteven_Strategy, + [CHECK_PAGE_POKEMON] = gText_MatchCallSteven_Pokemon, + [CHECK_PAGE_INTRO_1] = gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle, + [CHECK_PAGE_INTRO_2] = gText_MatchCallSteven_Intro2_BeforeMeteorFallsBattle + } }, - { - .idx = MC_HEADER_STEVEN, - .facilityClass = FACILITY_CLASS_STEVEN, - .flag = FLAG_DEFEATED_MOSSDEEP_GYM, - .flavorTexts = { - [CHECK_PAGE_STRATEGY] = gText_MatchCallSteven_Strategy, - [CHECK_PAGE_POKEMON] = gText_MatchCallSteven_Pokemon, - [CHECK_PAGE_INTRO_1] = gText_MatchCallSteven_Intro1_AfterMeteorFallsBattle, - [CHECK_PAGE_INTRO_2] = gText_MatchCallSteven_Intro2_AfterMeteorFallsBattle - } + { + .idx = MC_HEADER_STEVEN, + .facilityClass = FACILITY_CLASS_STEVEN, + .flag = FLAG_DEFEATED_MOSSDEEP_GYM, + .flavorTexts = { + [CHECK_PAGE_STRATEGY] = gText_MatchCallSteven_Strategy, + [CHECK_PAGE_POKEMON] = gText_MatchCallSteven_Pokemon, + [CHECK_PAGE_INTRO_1] = gText_MatchCallSteven_Intro1_AfterMeteorFallsBattle, + [CHECK_PAGE_INTRO_2] = gText_MatchCallSteven_Intro2_AfterMeteorFallsBattle + } }, - { - .idx = MC_HEADER_BRENDAN, - .facilityClass = FACILITY_CLASS_BRENDAN, - .flag = 0xFFFF, + { + .idx = MC_HEADER_BRENDAN, + .facilityClass = FACILITY_CLASS_BRENDAN, + .flag = 0xFFFF, .flavorTexts = MCFLAVOR(Brendan) }, - { - .idx = MC_HEADER_MAY, - .facilityClass = FACILITY_CLASS_MAY, - .flag = 0xFFFF, + { + .idx = MC_HEADER_MAY, + .facilityClass = FACILITY_CLASS_MAY, + .flag = 0xFFFF, .flavorTexts = MCFLAVOR(May) } }; @@ -896,12 +896,12 @@ static bool32 MatchCall_HasCheckPage_Wally(match_call_t matchCall) return TRUE; } -static bool32 MatchCall_HasCheckPage_Rival(match_call_t matchCall) +static bool32 MatchCall_HasCheckPage_Rival(match_call_t matchCall) { return FALSE; } -static bool32 MatchCall_HasCheckPage_Birch(match_call_t matchCall) +static bool32 MatchCall_HasCheckPage_Birch(match_call_t matchCall) { return FALSE; } diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c new file mode 100755 index 0000000000..fd5b36fae0 --- /dev/null +++ b/src/pokenav_match_call_gfx.c @@ -0,0 +1,1301 @@ +#include "global.h" +#include "bg.h" +#include "data.h" +#include "decompress.h" +#include "dma3.h" +#include "international_string_util.h" +#include "main.h" +#include "match_call.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "pokenav.h" +#include "region_map.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trig.h" +#include "window.h" +#include "constants/game_stat.h" +#include "constants/region_map_sections.h" +#include "constants/songs.h" + +#define GFXTAG_CURSOR 7 +#define GFXTAG_TRAINER_PIC 8 +#define PALTAG_CURSOR 12 +#define PALTAG_TRAINER_PIC 13 + +struct Pokenav_MatchCallGfx +{ + bool32 (*isTaskActiveCB)(void); + u32 loopTaskId; + u8 filler8[6]; + bool8 skipHangUpSE; + bool8 newRematchRequest; + u16 locWindowId; + u16 infoBoxWindowId; + u16 msgBoxWindowId; + s16 pageDelta; + u8 unused18; + u8 unused19; + u16 trainerPicPalOffset; + struct Sprite *optionsCursorSprite; + struct Sprite *trainerPicSprite; + u8 bgTilemapBuffer1[BG_SCREEN_SIZE]; + u8 unusedTilemapBuffer[BG_SCREEN_SIZE]; + u8 bgTilemapBuffer2[BG_SCREEN_SIZE]; + u8 *trainerPicGfxPtr; + u8 trainerPicGfx[0x800]; + u8 trainerPicPal[0x20]; +}; + +static bool32 GetCurrentLoopedTaskActive(void); +static u32 LoopedTask_OpenMatchCall(s32); +static void CreateMatchCallList(void); +static void DestroyMatchCallList(void); +static void FreeMatchCallSprites(void); +static void LoadCallWindowAndFade(struct Pokenav_MatchCallGfx *); +static void DrawMatchCallLeftColumnWindows(struct Pokenav_MatchCallGfx *); +static void UpdateMatchCallInfoBox(struct Pokenav_MatchCallGfx *); +static void PrintMatchCallLocation(struct Pokenav_MatchCallGfx *, int); +static void AllocMatchCallSprites(void); +static void SetPokeballIconsFlashing(bool32); +static void PrintMatchCallSelectionOptions(struct Pokenav_MatchCallGfx *); +static bool32 ShowOptionsCursor(struct Pokenav_MatchCallGfx *); +static void UpdateCursorGfxPos(struct Pokenav_MatchCallGfx *, int); +static bool32 IsDma3ManagerBusyWithBgCopy1(struct Pokenav_MatchCallGfx *); +static void UpdateWindowsReturnToTrainerList(struct Pokenav_MatchCallGfx *); +static void DrawMsgBoxForMatchCallMsg(struct Pokenav_MatchCallGfx *); +static bool32 IsDma3ManagerBusyWithBgCopy2(struct Pokenav_MatchCallGfx *); +static void PrintCallingDots(struct Pokenav_MatchCallGfx *); +static bool32 WaitForCallingDotsText(struct Pokenav_MatchCallGfx *); +static void PrintMatchCallMessage(struct Pokenav_MatchCallGfx *); +static bool32 WaitForMatchCallMessageText(struct Pokenav_MatchCallGfx *); +static void DrawMsgBoxForCloseByMsg(struct Pokenav_MatchCallGfx *); +static void PrintTrainerIsCloseBy(struct Pokenav_MatchCallGfx *); +static bool32 WaitForTrainerIsCloseByText(struct Pokenav_MatchCallGfx *); +static void EraseCallMessageBox(struct Pokenav_MatchCallGfx *); +static bool32 WaitForCallMessageBoxErase(struct Pokenav_MatchCallGfx *); +static void UpdateWindowsToShowCheckPage(struct Pokenav_MatchCallGfx *); +static void LoadCheckPageTrainerPic(struct Pokenav_MatchCallGfx *); +static bool32 WaitForTrainerPic(struct Pokenav_MatchCallGfx *); +static void TrainerPicSlideOffscreen(struct Pokenav_MatchCallGfx *); +static void Task_FlashPokeballIcons(u8); +static void TryDrawRematchPokeballIcon(u16, u32, u32); +static void PrintNumberRegisteredLabel(u16); +static void PrintNumberRegistered(u16); +static void PrintNumberOfBattlesLabel(u16); +static void PrintNumberOfBattles(u16); +static void PrintMatchCallInfoLabel(u16, const u8 *, int); +static void PrintMatchCallInfoNumber(u16, const u8 *, int); +static void CreateOptionsCursorSprite(struct Pokenav_MatchCallGfx *, int); +static void CloseMatchCallSelectOptionsWindow(struct Pokenav_MatchCallGfx *); +static struct Sprite *CreateTrainerPicSprite(void); +static void SpriteCB_TrainerPicSlideOnscreen(struct Sprite *); +static void SpriteCB_TrainerPicSlideOffscreen(struct Sprite *); +static void SpriteCB_OptionsCursor(struct Sprite *); +static u32 MatchCallListCursorDown(s32); +static u32 MatchCallListCursorUp(s32); +static u32 MatchCallListPageDown(s32); +static u32 MatchCallListPageUp(s32); +static u32 SelectMatchCallEntry(s32); +static u32 MoveMatchCallOptionsCursor(s32); +static u32 CancelMatchCallSelection(s32); +static u32 DoMatchCallMessage(s32); +static u32 DoTrainerCloseByMessage(s32); +static u32 CloseMatchCallMessage(s32); +static u32 ShowCheckPage(s32); +static u32 ShowCheckPageUp(s32); +static u32 ShowCheckPageDown(s32); +static u32 ExitCheckPage(s32); +static u32 ExitMatchCall(s32); + +static const u16 sMatchCallUI_Pal[] = INCBIN_U16("graphics/pokenav/match_call/ui.gbapal"); +static const u32 sMatchCallUI_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/ui.4bpp.lz"); +static const u32 sMatchCallUI_Tilemap[] = INCBIN_U32("graphics/pokenav/match_call/ui.bin.lz"); +static const u16 sOptionsCursor_Pal[] = INCBIN_U16("graphics/pokenav/match_call/options_cursor.gbapal"); +static const u32 sOptionsCursor_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/options_cursor.4bpp.lz"); +static const u16 sCallWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call/call_window.gbapal"); +static const u16 sListWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call/list_window.gbapal"); +static const u16 sPokeball_Pal[] = INCBIN_U16("graphics/pokenav/match_call/pokeball.gbapal"); +static const u32 sPokeball_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/pokeball.4bpp.lz"); + +static const struct BgTemplate sMatchCallBgTemplates[3] = +{ + { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x80 + }, + { + .bg = 3, + .charBaseIndex = 1, + .mapBaseIndex = 0x07, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +static const LoopedTask sMatchCallLoopTaskFuncs[] = +{ + [POKENAV_MC_FUNC_NONE] = NULL, + [POKENAV_MC_FUNC_DOWN] = MatchCallListCursorDown, + [POKENAV_MC_FUNC_UP] = MatchCallListCursorUp, + [POKENAV_MC_FUNC_PG_DOWN] = MatchCallListPageDown, + [POKENAV_MC_FUNC_PG_UP] = MatchCallListPageUp, + [POKENAV_MC_FUNC_SELECT] = SelectMatchCallEntry, + [POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR] = MoveMatchCallOptionsCursor, + [POKENAV_MC_FUNC_CANCEL] = CancelMatchCallSelection, + [POKENAV_MC_FUNC_CALL_MSG] = DoMatchCallMessage, + [POKENAV_MC_FUNC_NEARBY_MSG] = DoTrainerCloseByMessage, + [POKENAV_MC_FUNC_EXIT_CALL] = CloseMatchCallMessage, + [POKENAV_MC_FUNC_SHOW_CHECK_PAGE] = ShowCheckPage, + [POKENAV_MC_FUNC_CHECK_PAGE_UP] = ShowCheckPageUp, + [POKENAV_MC_FUNC_CHECK_PAGE_DOWN] = ShowCheckPageDown, + [POKENAV_MC_FUNC_EXIT_CHECK_PAGE] = ExitCheckPage, + [POKENAV_MC_FUNC_EXIT] = ExitMatchCall +}; + +static const struct WindowTemplate sMatchCallLocationWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 11, + .height = 2, + .paletteNum = 2, + .baseBlock = 16 +}; + +static const struct WindowTemplate sMatchCallInfoBoxWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 9, + .width = 11, + .height = 8, + .paletteNum = 2, + .baseBlock = 38 +}; + +static const u8 *const sMatchCallOptionTexts[MATCH_CALL_OPTION_COUNT] = +{ + [MATCH_CALL_OPTION_CALL] = gText_Call, + [MATCH_CALL_OPTION_CHECK] = gText_Check, + [MATCH_CALL_OPTION_CANCEL] = gText_Cancel6 +}; + +// The series of 5 dots that appear when someone is called with Match Call +static const u8 sText_CallingDots[] = _("·{PAUSE 4}·{PAUSE 4}·{PAUSE 4}·{PAUSE 4}·\p"); + +static const struct WindowTemplate sCallMsgBoxWindowTemplate = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 12, + .width = 28, + .height = 4, + .paletteNum = 1, + .baseBlock = 10 +}; + +static const struct CompressedSpriteSheet sOptionsCursorSpriteSheets[1] = +{ + {sOptionsCursor_Gfx, 0x40, GFXTAG_CURSOR} +}; + +static const struct SpritePalette sOptionsCursorSpritePalettes[2] = +{ + {sOptionsCursor_Pal, PALTAG_CURSOR} +}; + +static const struct OamData sOptionsCursorOamData = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +static const struct SpriteTemplate sOptionsCursorSpriteTemplate = +{ + .tileTag = GFXTAG_CURSOR, + .paletteTag = PALTAG_CURSOR, + .oam = &sOptionsCursorOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_OptionsCursor, +}; + +static const struct OamData sTrainerPicOamData = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +static const struct SpriteTemplate sTrainerPicSpriteTemplate = +{ + .tileTag = GFXTAG_TRAINER_PIC, + .paletteTag = PALTAG_TRAINER_PIC, + .oam = &sTrainerPicOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +bool32 OpenMatchCall(void) +{ + struct Pokenav_MatchCallGfx *gfx = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN, sizeof(struct Pokenav_MatchCallGfx)); + if (!gfx) + return FALSE; + + gfx->unused19 = 0; + gfx->loopTaskId = CreateLoopedTask(LoopedTask_OpenMatchCall, 1); + gfx->isTaskActiveCB = GetCurrentLoopedTaskActive; + return TRUE; +} + +void CreateMatchCallLoopedTask(s32 index) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + gfx->loopTaskId = CreateLoopedTask(sMatchCallLoopTaskFuncs[index], 1); + gfx->isTaskActiveCB = GetCurrentLoopedTaskActive; +} + +bool32 IsMatchCallLoopedTaskActive(void) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + return gfx->isTaskActiveCB(); +} + +void FreeMatchCallSubstruct2(void) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + FreeMatchCallSprites(); + DestroyMatchCallList(); + RemoveWindow(gfx->infoBoxWindowId); + RemoveWindow(gfx->locWindowId); + RemoveWindow(gfx->msgBoxWindowId); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); +} + +static bool32 GetCurrentLoopedTaskActive(void) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + return IsLoopedTaskActive(gfx->loopTaskId); +} + +static u32 LoopedTask_OpenMatchCall(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + InitBgTemplates(sMatchCallBgTemplates, ARRAY_COUNT(sMatchCallBgTemplates)); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + DecompressAndCopyTileDataToVram(2, sMatchCallUI_Gfx, 0, 0, 0); + SetBgTilemapBuffer(2, gfx->bgTilemapBuffer2); + CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(2); + CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, 0x20, 0x20); + CopyBgTilemapBufferToVram(2); + return LT_INC_AND_PAUSE; + case 1: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + + BgDmaFill(1, 0, 0, 1); + SetBgTilemapBuffer(1, gfx->bgTilemapBuffer1); + FillBgTilemapBufferRect_Palette0(1, 0x1000, 0, 0, 32, 20); + CopyPaletteIntoBufferUnfaded(sCallWindow_Pal, 0x10, 0x20); + CopyBgTilemapBufferToVram(1); + return LT_INC_AND_PAUSE; + case 2: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + + LoadCallWindowAndFade(gfx); + DecompressAndCopyTileDataToVram(3, sPokeball_Gfx, 0, 0, 0); + CopyPaletteIntoBufferUnfaded(sListWindow_Pal, 0x30, 0x20); + CopyPaletteIntoBufferUnfaded(sPokeball_Pal, 0x50, 0x20); + return LT_INC_AND_PAUSE; + case 3: + if (FreeTempTileDataBuffersIfPossible() || !IsMatchCallListInitFinished()) + return LT_PAUSE; + + CreateMatchCallList(); + return LT_INC_AND_PAUSE; + case 4: + if (IsCreatePokenavListTaskActive()) + return LT_PAUSE; + + DrawMatchCallLeftColumnWindows(gfx); + return LT_INC_AND_PAUSE; + case 5: + UpdateMatchCallInfoBox(gfx); + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 6: + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ShowBg(2); + ShowBg(3); + ShowBg(1); + AllocMatchCallSprites(); + LoadLeftHeaderGfxForIndex(3); + ShowLeftHeaderGfx(POKENAV_GFX_MATCH_CALL_MENU, TRUE, FALSE); + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); + return LT_INC_AND_PAUSE; + case 7: + if (IsPaletteFadeActive() || AreLeftHeaderSpritesMoving()) + return LT_PAUSE; + + SetPokeballIconsFlashing(TRUE); + return LT_FINISH; + default: + return LT_FINISH; + } +} + +static u32 MatchCallListCursorDown(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + switch (PokenavList_MoveCursorDown()) + { + case 0: + break; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + // fall through + default: + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (PokenavList_IsMoveWindowTaskActive()) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 2: + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 MatchCallListCursorUp(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + switch (PokenavList_MoveCursorUp()) + { + case 0: + break; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + // fall through + default: + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (PokenavList_IsMoveWindowTaskActive()) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 2: + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 MatchCallListPageDown(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + switch (PokenavList_PageDown()) + { + case 0: + break; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + // fall through + default: + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (PokenavList_IsMoveWindowTaskActive()) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 2: + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 MatchCallListPageUp(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + switch (PokenavList_PageUp()) + { + case 0: + break; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + // fall through + default: + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (PokenavList_IsMoveWindowTaskActive()) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 2: + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 SelectMatchCallEntry(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + PrintMatchCallSelectionOptions(gfx); + PrintHelpBarText(HELPBAR_MC_CALL_MENU); + return LT_INC_AND_PAUSE; + case 1: + if (ShowOptionsCursor(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 MoveMatchCallOptionsCursor(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx; + u16 cursorPos; + + PlaySE(SE_SELECT); + gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + cursorPos = GetMatchCallOptionCursorPos(); + UpdateCursorGfxPos(gfx, cursorPos); + return LT_FINISH; +} + +static u32 CancelMatchCallSelection(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + UpdateWindowsReturnToTrainerList(gfx); + PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); + return LT_INC_AND_PAUSE; + case 1: + if (IsDma3ManagerBusyWithBgCopy1(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 DoMatchCallMessage(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PokenavList_ToggleVerticalArrows(TRUE); + DrawMsgBoxForMatchCallMsg(gfx); + return LT_INC_AND_PAUSE; + case 1: + if (IsDma3ManagerBusyWithBgCopy2(gfx)) + return LT_PAUSE; + + PrintCallingDots(gfx); + PlaySE(SE_POKENAV_CALL); + gfx->skipHangUpSE = FALSE; + return LT_INC_AND_PAUSE; + case 2: + if (WaitForCallingDotsText(gfx)) + return LT_PAUSE; + + PrintMatchCallMessage(gfx); + return LT_INC_AND_PAUSE; + case 3: + if (WaitForMatchCallMessageText(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 DoTrainerCloseByMessage(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + DrawMsgBoxForCloseByMsg(gfx); + PokenavList_ToggleVerticalArrows(TRUE); + gfx->skipHangUpSE = TRUE; + return LT_INC_AND_PAUSE; + case 1: + if (IsDma3ManagerBusyWithBgCopy2(gfx)) + return LT_PAUSE; + + PrintTrainerIsCloseBy(gfx); + return LT_INC_AND_PAUSE; + case 2: + if (WaitForTrainerIsCloseByText(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 CloseMatchCallMessage(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + u32 result = LT_INC_AND_PAUSE; + + switch (state) + { + case 0: + if (!gfx->skipHangUpSE) + PlaySE(SE_POKENAV_HANG_UP); + + PlaySE(SE_SELECT); + break; + case 1: + EraseCallMessageBox(gfx); + break; + case 2: + if (WaitForCallMessageBoxErase(gfx)) + result = LT_PAUSE; + break; + case 3: + UpdateWindowsReturnToTrainerList(gfx); + break; + case 4: + if (IsDma3ManagerBusyWithBgCopy1(gfx)) + result = LT_PAUSE; + + PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); + break; + case 5: + if (WaitForHelpBar()) + { + result = LT_PAUSE; + } + else + { + if (gfx->newRematchRequest) + { + // This call was a new rematch request, + // add the Pokéball icon to their entry + PokenavList_DrawCurrentItemIcon(); + result = LT_INC_AND_CONTINUE; + } + else + { + PokenavList_ToggleVerticalArrows(FALSE); + result = LT_FINISH; + } + } + break; + case 6: + if (IsDma3ManagerBusyWithBgCopy()) + { + result = LT_PAUSE; + } + else + { + PokenavList_ToggleVerticalArrows(FALSE); + result = LT_FINISH; + } + break; + } + + return result; +} + +static u32 ShowCheckPage(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + PokenavList_EraseListForCheckPage(); + UpdateWindowsToShowCheckPage(gfx); + return LT_INC_AND_PAUSE; + case 1: + if (PokenavList_IsTaskActive() || IsDma3ManagerBusyWithBgCopy1(gfx)) + return LT_PAUSE; + + PrintHelpBarText(HELPBAR_MC_CHECK_PAGE); + return LT_INC_AND_PAUSE; + case 2: + PrintCheckPageInfo(0); + LoadCheckPageTrainerPic(gfx); + return LT_INC_AND_PAUSE; + case 3: + if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx) || WaitForHelpBar()) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 ShowCheckPageDown(s32 state) +{ + int topId; + int delta; + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + topId = PokenavList_GetTopIndex(); + delta = GetIndexDeltaOfNextCheckPageDown(topId); + if (delta) + { + PlaySE(SE_SELECT); + gfx->pageDelta = delta; + TrainerPicSlideOffscreen(gfx); + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (WaitForTrainerPic(gfx)) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, gfx->pageDelta); + return LT_INC_AND_PAUSE; + case 2: + PrintCheckPageInfo(gfx->pageDelta); + return LT_INC_AND_PAUSE; + case 3: + LoadCheckPageTrainerPic(gfx); + return LT_INC_AND_PAUSE; + case 4: + if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 ExitCheckPage(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + TrainerPicSlideOffscreen(gfx); + PokenavList_ReshowListFromCheckPage(); + return LT_INC_AND_PAUSE; + case 1: + if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx)) + return LT_PAUSE; + + PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); + UpdateMatchCallInfoBox(gfx); + return LT_INC_AND_PAUSE; + case 2: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 ShowCheckPageUp(s32 state) +{ + int topId; + int delta; + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + topId = PokenavList_GetTopIndex(); + delta = GetIndexDeltaOfNextCheckPageUp(topId); + if (delta) + { + PlaySE(SE_SELECT); + gfx->pageDelta = delta; + TrainerPicSlideOffscreen(gfx); + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (WaitForTrainerPic(gfx)) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, gfx->pageDelta); + return LT_INC_AND_PAUSE; + case 2: + PrintCheckPageInfo(gfx->pageDelta); + return LT_INC_AND_PAUSE; + case 3: + LoadCheckPageTrainerPic(gfx); + return LT_INC_AND_PAUSE; + case 4: + if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 ExitMatchCall(s32 state) +{ + switch (state) + { + case 0: + PlaySE(SE_SELECT); + SetPokeballIconsFlashing(FALSE); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); + SlideMenuHeaderDown(); + return LT_INC_AND_PAUSE; + case 1: + if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) + return LT_PAUSE; + + SetLeftHeaderSpritesInvisibility(); + break; + } + + return LT_FINISH; +} + +static void CreateMatchCallList(void) +{ + struct PokenavListTemplate template; + template.list = (struct PokenavListItem *)GetMatchCallList(); + template.count = GetNumberRegistered(); + template.itemSize = sizeof(struct PokenavListItem); + template.startIndex = 0; + template.item_X = 13; + template.windowWidth = 16; + template.listTop = 1; + template.maxShowed = 8; + template.fillValue = 3; + template.fontId = FONT_NARROW; + template.bufferItemFunc = (PokenavListBufferItemFunc)BufferMatchCallNameAndDesc; + template.iconDrawFunc = TryDrawRematchPokeballIcon; + CreatePokenavList(&sMatchCallBgTemplates[2], &template, 2); + CreateTask(Task_FlashPokeballIcons, 7); +} + +static void DestroyMatchCallList(void) +{ + DestroyPokenavList(); + DestroyTask(FindTaskIdByFunc(Task_FlashPokeballIcons)); +} + +#define tSinIdx data[0] +#define tSinVal data[1] +#define tActive data[15] + +static void SetPokeballIconsFlashing(bool32 active) +{ + u8 taskId = FindTaskIdByFunc(Task_FlashPokeballIcons); + if (taskId != TASK_NONE) + gTasks[taskId].tActive = active; +} + +static void Task_FlashPokeballIcons(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (tActive) + { + tSinIdx += 4; + tSinIdx &= 0x7F; + tSinVal = gSineTable[tSinIdx] >> 4; + PokenavCopyPalette(sPokeball_Pal, &sPokeball_Pal[0x10], 0x10, 0x10, tSinVal, &gPlttBufferUnfaded[0x50]); + if (!gPaletteFade.active) + CpuCopy32(&gPlttBufferUnfaded[0x50], &gPlttBufferFaded[0x50], 0x20); + } +} + +#undef tSinIdx +#undef tSinVal +#undef tActive + +enum { + POKEBALL_ICON_TOP = 0x5000, + POKEBALL_ICON_BOTTOM, + POKEBALL_ICON_EMPTY, +}; + +static void TryDrawRematchPokeballIcon(u16 windowId, u32 rematchId, u32 tileOffset) +{ + u8 bg = GetWindowAttribute(windowId, WINDOW_BG); + u16 *tilemap = GetBgTilemapBuffer(bg); + tilemap += tileOffset * 64 + 0x1D; + if (ShouldDrawRematchPokeballIcon(rematchId)) + { + tilemap[0] = POKEBALL_ICON_TOP; + tilemap[0x20] = POKEBALL_ICON_BOTTOM; + } + else + { + tilemap[0] = POKEBALL_ICON_EMPTY; + tilemap[0x20] = POKEBALL_ICON_EMPTY; + } +} + +void ClearRematchPokeballIcon(u16 windowId, u32 tileOffset) +{ + u8 bg = GetWindowAttribute(windowId, WINDOW_BG); + u16 *tilemap = GetBgTilemapBuffer(bg); + tilemap += tileOffset * 64 + 0x1D; + tilemap[0] = POKEBALL_ICON_EMPTY; + tilemap[0x20] = POKEBALL_ICON_EMPTY; +} + +static void DrawMatchCallLeftColumnWindows(struct Pokenav_MatchCallGfx *gfx) +{ + gfx->locWindowId = AddWindow(&sMatchCallLocationWindowTemplate); + gfx->infoBoxWindowId = AddWindow(&sMatchCallInfoBoxWindowTemplate); + FillWindowPixelBuffer(gfx->locWindowId, PIXEL_FILL(1)); + PutWindowTilemap(gfx->locWindowId); + FillWindowPixelBuffer(gfx->infoBoxWindowId, PIXEL_FILL(1)); + PutWindowTilemap(gfx->infoBoxWindowId); + CopyWindowToVram(gfx->locWindowId, COPYWIN_MAP); +} + +static void UpdateMatchCallInfoBox(struct Pokenav_MatchCallGfx *gfx) +{ + FillWindowPixelBuffer(gfx->infoBoxWindowId, PIXEL_FILL(1)); + PrintNumberRegisteredLabel(gfx->infoBoxWindowId); + PrintNumberRegistered(gfx->infoBoxWindowId); + PrintNumberOfBattlesLabel(gfx->infoBoxWindowId); + PrintNumberOfBattles(gfx->infoBoxWindowId); + CopyWindowToVram(gfx->infoBoxWindowId, COPYWIN_GFX); +} + +static void PrintNumberRegisteredLabel(u16 windowId) +{ + PrintMatchCallInfoLabel(windowId, gText_NumberRegistered, 0); +} + +static void PrintNumberRegistered(u16 windowId) +{ + u8 str[3]; + ConvertIntToDecimalStringN(str, GetNumberRegistered(), STR_CONV_MODE_LEFT_ALIGN, 3); + PrintMatchCallInfoNumber(windowId, str, 1); +} + +static void PrintNumberOfBattlesLabel(u16 windowId) +{ + PrintMatchCallInfoLabel(windowId, gText_NumberOfBattles, 2); +} + +static void PrintNumberOfBattles(u16 windowId) +{ + u8 str[5]; + int numTrainerBattles = GetGameStat(GAME_STAT_TRAINER_BATTLES); + if (numTrainerBattles > 99999) + numTrainerBattles = 99999; + + ConvertIntToDecimalStringN(str, numTrainerBattles, STR_CONV_MODE_LEFT_ALIGN, 5); + PrintMatchCallInfoNumber(windowId, str, 3); +} + +static void PrintMatchCallInfoLabel(u16 windowId, const u8 *str, int top) +{ + int y = top * 16 + 1; + AddTextPrinterParameterized(windowId, FONT_NARROW, str, 2, y, TEXT_SKIP_DRAW, NULL); +} + +static void PrintMatchCallInfoNumber(u16 windowId, const u8 *str, int top) +{ + int x = GetStringRightAlignXOffset(FONT_NARROW, str, 86); + int y = top * 16 + 1; + AddTextPrinterParameterized(windowId, FONT_NARROW, str, x, y, TEXT_SKIP_DRAW, NULL); +} + +static void PrintMatchCallLocation(struct Pokenav_MatchCallGfx *gfx, int delta) +{ + u8 mapName[32]; + int x; + int index = PokenavList_GetSelectedIndex() + delta; + int mapSec = GetMatchCallMapSec(index); + if (mapSec != MAPSEC_NONE) + GetMapName(mapName, mapSec, 0); + else + StringCopy(mapName, gText_Unknown); + + x = GetStringCenterAlignXOffset(FONT_NARROW, mapName, 88); + FillWindowPixelBuffer(gfx->locWindowId, PIXEL_FILL(1)); + AddTextPrinterParameterized(gfx->locWindowId, FONT_NARROW, mapName, x, 1, 0, NULL); +} + +static void PrintMatchCallSelectionOptions(struct Pokenav_MatchCallGfx *gfx) +{ + u32 i; + + FillWindowPixelBuffer(gfx->infoBoxWindowId, PIXEL_FILL(1)); + for (i = 0; i < MATCH_CALL_OPTION_COUNT; i++) + { + int optionText = GetMatchCallOptionId(i); + if (optionText == MATCH_CALL_OPTION_COUNT) + break; + + AddTextPrinterParameterized(gfx->infoBoxWindowId, FONT_NARROW, sMatchCallOptionTexts[optionText], 16, i * 16 + 1, TEXT_SKIP_DRAW, NULL); + } + + CopyWindowToVram(gfx->infoBoxWindowId, COPYWIN_GFX); +} + +static bool32 ShowOptionsCursor(struct Pokenav_MatchCallGfx *gfx) +{ + if (!IsDma3ManagerBusyWithBgCopy()) + { + CreateOptionsCursorSprite(gfx, GetMatchCallOptionCursorPos()); + return FALSE; + } + + return TRUE; +} + +static void UpdateWindowsReturnToTrainerList(struct Pokenav_MatchCallGfx *gfx) +{ + CloseMatchCallSelectOptionsWindow(gfx); + UpdateMatchCallInfoBox(gfx); +} + +static bool32 IsDma3ManagerBusyWithBgCopy1(struct Pokenav_MatchCallGfx *gfx) +{ + return IsDma3ManagerBusyWithBgCopy(); +} + +static void UpdateWindowsToShowCheckPage(struct Pokenav_MatchCallGfx *gfx) +{ + CloseMatchCallSelectOptionsWindow(gfx); + FillWindowPixelBuffer(gfx->infoBoxWindowId, PIXEL_FILL(1)); + CopyWindowToVram(gfx->infoBoxWindowId, COPYWIN_GFX); +} + +static void LoadCallWindowAndFade(struct Pokenav_MatchCallGfx *gfx) +{ + gfx->msgBoxWindowId = AddWindow(&sCallMsgBoxWindowTemplate); + LoadMatchCallWindowGfx(gfx->msgBoxWindowId, 1, 4); + FadeToBlackExceptPrimary(); +} + +static void DrawMsgBoxForMatchCallMsg(struct Pokenav_MatchCallGfx *gfx) +{ + struct Sprite *sprite; + LoadMatchCallWindowGfx(gfx->msgBoxWindowId, 1, 4); + DrawMatchCallTextBoxBorder(gfx->msgBoxWindowId, 1, 4); + FillWindowPixelBuffer(gfx->msgBoxWindowId, PIXEL_FILL(1)); + PutWindowTilemap(gfx->msgBoxWindowId); + CopyWindowToVram(gfx->msgBoxWindowId, COPYWIN_FULL); + sprite = GetSpinningPokenavSprite(); + sprite->x = 24; + sprite->y = 112; + sprite->y2 = 0; +} + +static void DrawMsgBoxForCloseByMsg(struct Pokenav_MatchCallGfx *gfx) +{ + LoadUserWindowBorderGfx(gfx->msgBoxWindowId, 1, 0x40); + DrawTextBorderOuter(gfx->msgBoxWindowId, 1, 4); + FillWindowPixelBuffer(gfx->msgBoxWindowId, PIXEL_FILL(1)); + PutWindowTilemap(gfx->msgBoxWindowId); + CopyWindowToVram(gfx->msgBoxWindowId, COPYWIN_FULL); +} + +static bool32 IsDma3ManagerBusyWithBgCopy2(struct Pokenav_MatchCallGfx *gfx) +{ + return IsDma3ManagerBusyWithBgCopy(); +} + +static void PrintCallingDots(struct Pokenav_MatchCallGfx *gfx) +{ + AddTextPrinterParameterized(gfx->msgBoxWindowId, FONT_NORMAL, sText_CallingDots, 32, 1, 1, NULL); +} + +static bool32 WaitForCallingDotsText(struct Pokenav_MatchCallGfx *gfx) +{ + RunTextPrinters(); + return IsTextPrinterActive(gfx->msgBoxWindowId); +} + +static void PrintTrainerIsCloseBy(struct Pokenav_MatchCallGfx *gfx) +{ + AddTextPrinterParameterized(gfx->msgBoxWindowId, FONT_NORMAL, gText_TrainerCloseBy, 0, 1, 1, NULL); +} + +static bool32 WaitForTrainerIsCloseByText(struct Pokenav_MatchCallGfx *gfx) +{ + RunTextPrinters(); + return IsTextPrinterActive(gfx->msgBoxWindowId); +} + +static void PrintMatchCallMessage(struct Pokenav_MatchCallGfx *gfx) +{ + int index = PokenavList_GetSelectedIndex(); + const u8 *str = GetMatchCallMessageText(index, &gfx->newRematchRequest); + u8 speed = GetPlayerTextSpeedDelay(); + AddTextPrinterParameterized(gfx->msgBoxWindowId, FONT_NORMAL, str, 32, 1, speed, NULL); +} + +static bool32 WaitForMatchCallMessageText(struct Pokenav_MatchCallGfx *gfx) +{ + if (JOY_HELD(A_BUTTON)) + gTextFlags.canABSpeedUpPrint = TRUE; + else + gTextFlags.canABSpeedUpPrint = FALSE; + + RunTextPrinters(); + return IsTextPrinterActive(gfx->msgBoxWindowId); +} + +static void EraseCallMessageBox(struct Pokenav_MatchCallGfx *gfx) +{ + HideSpinningPokenavSprite(); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); + CopyBgTilemapBufferToVram(1); +} + +static bool32 WaitForCallMessageBoxErase(struct Pokenav_MatchCallGfx *gfx) +{ + return IsDma3ManagerBusyWithBgCopy(); +} + +static void AllocMatchCallSprites(void) +{ + int i; + u8 paletteNum; + struct SpriteSheet spriteSheet; + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + + // Load options cursor gfx + for (i = 0; i < ARRAY_COUNT(sOptionsCursorSpriteSheets); i++) + LoadCompressedSpriteSheet(&sOptionsCursorSpriteSheets[i]); + Pokenav_AllocAndLoadPalettes(sOptionsCursorSpritePalettes); + gfx->optionsCursorSprite = NULL; + + // Load trainer pic gfx + spriteSheet.data = gfx->trainerPicGfx; + spriteSheet.size = sizeof(gfx->trainerPicGfx); + spriteSheet.tag = GFXTAG_TRAINER_PIC; + gfx->trainerPicGfxPtr = (u8 *)OBJ_VRAM0 + LoadSpriteSheet(&spriteSheet) * 0x20; + paletteNum = AllocSpritePalette(PALTAG_TRAINER_PIC); + gfx->trainerPicPalOffset = 0x100 + paletteNum * 0x10; + gfx->trainerPicSprite = CreateTrainerPicSprite(); + gfx->trainerPicSprite->invisible = TRUE; +} + +static void FreeMatchCallSprites(void) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + if (gfx->optionsCursorSprite) + DestroySprite(gfx->optionsCursorSprite); + if (gfx->trainerPicSprite) + DestroySprite(gfx->trainerPicSprite); + + FreeSpriteTilesByTag(GFXTAG_TRAINER_PIC); + FreeSpriteTilesByTag(GFXTAG_CURSOR); + FreeSpritePaletteByTag(PALTAG_CURSOR); + FreeSpritePaletteByTag(PALTAG_TRAINER_PIC); +} + +static void CreateOptionsCursorSprite(struct Pokenav_MatchCallGfx *gfx, int top) +{ + if (!gfx->optionsCursorSprite) + { + u8 spriteId = CreateSprite(&sOptionsCursorSpriteTemplate, 4, 80, 5); + gfx->optionsCursorSprite = &gSprites[spriteId]; + UpdateCursorGfxPos(gfx, top); + } +} + +static void CloseMatchCallSelectOptionsWindow(struct Pokenav_MatchCallGfx *gfx) +{ + DestroySprite(gfx->optionsCursorSprite); + gfx->optionsCursorSprite = NULL; +} + +static void UpdateCursorGfxPos(struct Pokenav_MatchCallGfx *gfx, int top) +{ + gfx->optionsCursorSprite->y2 = top * 16; +} + +static void SpriteCB_OptionsCursor(struct Sprite *sprite) +{ + if (++sprite->data[0] > 3) + { + sprite->data[0] = 0; + sprite->x2 = (sprite->x2 + 1) & 7; + } +} + +static struct Sprite *CreateTrainerPicSprite(void) +{ + u8 spriteId = CreateSprite(&sTrainerPicSpriteTemplate, 44, 104, 6); + return &gSprites[spriteId]; +} + +static void LoadCheckPageTrainerPic(struct Pokenav_MatchCallGfx *gfx) +{ + u16 cursor; + int trainerPic = GetMatchCallTrainerPic(PokenavList_GetSelectedIndex()); + if (trainerPic >= 0) + { + DecompressPicFromTable(&gTrainerFrontPicTable[trainerPic], gfx->trainerPicGfx, SPECIES_NONE); + LZ77UnCompWram(gTrainerFrontPicPaletteTable[trainerPic].data, gfx->trainerPicPal); + cursor = RequestDma3Copy(gfx->trainerPicGfx, gfx->trainerPicGfxPtr, sizeof(gfx->trainerPicGfx), 1); + LoadPalette(gfx->trainerPicPal, gfx->trainerPicPalOffset, sizeof(gfx->trainerPicPal)); + gfx->trainerPicSprite->data[0] = 0; + gfx->trainerPicSprite->data[7] = cursor; + gfx->trainerPicSprite->callback = SpriteCB_TrainerPicSlideOnscreen; + } +} + +static void TrainerPicSlideOffscreen(struct Pokenav_MatchCallGfx *gfx) +{ + gfx->trainerPicSprite->callback = SpriteCB_TrainerPicSlideOffscreen; +} + +static bool32 WaitForTrainerPic(struct Pokenav_MatchCallGfx *gfx) +{ + return gfx->trainerPicSprite->callback != SpriteCallbackDummy; +} + +static void SpriteCB_TrainerPicSlideOnscreen(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (CheckForSpaceForDma3Request(sprite->data[7]) != -1) + { + sprite->x2 = -80; + sprite->invisible = FALSE; + sprite->data[0]++; + } + break; + case 1: + sprite->x2 += 8; + if (sprite->x2 >= 0) + { + sprite->x2 = 0; + sprite->callback = SpriteCallbackDummy; + } + break; + } +} + +static void SpriteCB_TrainerPicSlideOffscreen(struct Sprite *sprite) +{ + sprite->x2 -= 8; + if (sprite->x2 <= -80) + { + sprite->invisible = TRUE; + sprite->callback = SpriteCallbackDummy; + } +} diff --git a/src/pokenav_match_call_1.c b/src/pokenav_match_call_list.c similarity index 68% rename from src/pokenav_match_call_1.c rename to src/pokenav_match_call_list.c index fb44aaa876..b00c76b48a 100755 --- a/src/pokenav_match_call_1.c +++ b/src/pokenav_match_call_list.c @@ -14,59 +14,59 @@ #include "strings.h" #include "constants/songs.h" -struct Pokenav3Struct +struct Pokenav_MatchCallMenu { u16 optionCursorPos; u16 maxOptionId; const u8 *matchCallOptions; u16 headerId; u16 numRegistered; - u16 unkC; - u32 unk10; - u32 unk14; - u32 (*callback)(struct Pokenav3Struct*); - struct PokenavMatchCallEntries matchCallEntries[MAX_REMATCH_ENTRIES - 1]; + u16 numSpecialTrainers; + bool32 initFinished; + u32 loopedTaskId; + u32 (*callback)(struct Pokenav_MatchCallMenu *); + struct PokenavMatchCallEntry matchCallEntries[MAX_REMATCH_ENTRIES - 1]; }; -static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *); -static u32 GetExitMatchCallMenuId(struct Pokenav3Struct *); -static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *); -static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *); -static u32 CB2_HandleCallInput(struct Pokenav3Struct *); -static u32 sub_81CAD20(s32); -static bool32 sub_81CB1D0(void); +static u32 CB2_HandleMatchCallInput(struct Pokenav_MatchCallMenu *); +static u32 GetExitMatchCallMenuId(struct Pokenav_MatchCallMenu *); +static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav_MatchCallMenu *); +static u32 CB2_HandleCheckPageInput(struct Pokenav_MatchCallMenu *); +static u32 CB2_HandleCallExitInput(struct Pokenav_MatchCallMenu *); +static u32 LoopedTask_BuildMatchCallList(s32); +static bool32 ShouldDoNearbyMessage(void); #include "data/text/match_call_messages.h" -static const u8 sMatchCallOptionsNoCheckPage[] = +static const u8 sMatchCallOptionsNoCheckPage[] = { - MATCH_CALL_OPTION_CALL, + MATCH_CALL_OPTION_CALL, MATCH_CALL_OPTION_CANCEL }; -static const u8 sMatchCallOptionsHasCheckPage[] = +static const u8 sMatchCallOptionsHasCheckPage[] = { - MATCH_CALL_OPTION_CALL, - MATCH_CALL_OPTION_CHECK, + MATCH_CALL_OPTION_CALL, + MATCH_CALL_OPTION_CHECK, MATCH_CALL_OPTION_CANCEL }; bool32 PokenavCallback_Init_MatchCall(void) { - struct Pokenav3Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, sizeof(struct Pokenav3Struct)); + struct Pokenav_MatchCallMenu *state = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, sizeof(struct Pokenav_MatchCallMenu)); if (!state) return FALSE; state->callback = CB2_HandleMatchCallInput; state->headerId = 0; - state->unk10 = 0; - state->unk14 = CreateLoopedTask(sub_81CAD20, 1); + state->initFinished = FALSE; + state->loopedTaskId = CreateLoopedTask(LoopedTask_BuildMatchCallList, 1); return TRUE; } u32 GetMatchCallCallback(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->callback(state); } @@ -75,7 +75,7 @@ void FreeMatchCallSubstruct1(void) FreePokenavSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); } -static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) +static u32 CB2_HandleMatchCallInput(struct Pokenav_MatchCallMenu *state) { int selection; @@ -92,7 +92,7 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) { state->callback = CB2_HandleMatchCallOptionsInput; state->optionCursorPos = 0; - selection = GetSelectedPokenavListIndex(); + selection = PokenavList_GetSelectedIndex(); if (!state->matchCallEntries[selection].isSpecialTrainer || MatchCall_HasCheckPage(state->matchCallEntries[selection].headerId)) { @@ -125,20 +125,20 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) return POKENAV_MC_FUNC_NONE; } -static u32 GetExitMatchCallMenuId(struct Pokenav3Struct *state) +static u32 GetExitMatchCallMenuId(struct Pokenav_MatchCallMenu *state) { return POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL; } -static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) +static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav_MatchCallMenu *state) { - if ((JOY_NEW(DPAD_UP)) && state->optionCursorPos) + if (JOY_NEW(DPAD_UP) && state->optionCursorPos) { state->optionCursorPos--; return POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR; } - if ((JOY_NEW(DPAD_DOWN)) && state->optionCursorPos < state->maxOptionId) + if (JOY_NEW(DPAD_DOWN) && state->optionCursorPos < state->maxOptionId) { state->optionCursorPos++; return POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR; @@ -155,8 +155,8 @@ static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) if (GetPokenavMode() == POKENAV_MODE_FORCE_CALL_READY) SetPokenavMode(POKENAV_MODE_FORCE_CALL_EXIT); - state->callback = CB2_HandleCallInput; - if (sub_81CB1D0()) + state->callback = CB2_HandleCallExitInput; + if (ShouldDoNearbyMessage()) return POKENAV_MC_FUNC_NEARBY_MSG; return POKENAV_MC_FUNC_CALL_MSG; @@ -175,7 +175,7 @@ static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) return POKENAV_MC_FUNC_NONE; } -static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *state) +static u32 CB2_HandleCheckPageInput(struct Pokenav_MatchCallMenu *state) { if (JOY_REPEAT(DPAD_UP)) return POKENAV_MC_FUNC_CHECK_PAGE_UP; @@ -191,21 +191,21 @@ static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *state) return POKENAV_MC_FUNC_NONE; } -static u32 CB2_HandleCallInput(struct Pokenav3Struct *state) +static u32 CB2_HandleCallExitInput(struct Pokenav_MatchCallMenu *state) { if (JOY_NEW(A_BUTTON | B_BUTTON)) { state->callback = CB2_HandleMatchCallInput; - return POKENAV_MC_FUNC_10; + return POKENAV_MC_FUNC_EXIT_CALL; } return POKENAV_MC_FUNC_NONE; } -static u32 sub_81CAD20(s32 taskState) +static u32 LoopedTask_BuildMatchCallList(s32 taskState) { int i, j; - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); switch (taskState) { case 0: @@ -213,6 +213,7 @@ static u32 sub_81CAD20(s32 taskState) state->numRegistered = 0; return LT_INC_AND_CONTINUE; case 1: + // Load special trainers (e.g. Rival, gym leaders) for (i = 0, j = state->headerId; i < 30; i++, j++) { if (MatchCall_GetEnabled(j)) @@ -225,7 +226,7 @@ static u32 sub_81CAD20(s32 taskState) if (++state->headerId >= MC_HEADER_COUNT) { - state->unkC = state->headerId; + state->numSpecialTrainers = state->headerId; state->headerId = 0; return LT_INC_AND_CONTINUE; } @@ -233,6 +234,7 @@ static u32 sub_81CAD20(s32 taskState) return LT_CONTINUE; case 2: + // Load normal trainers for (i = 0, j = state->headerId; i < 30; i++, j++) { if (!MatchCall_HasRematchId(state->headerId) && IsRematchEntryRegistered(state->headerId)) @@ -249,7 +251,7 @@ static u32 sub_81CAD20(s32 taskState) return LT_CONTINUE; case 3: - state->unk10 = 1; + state->initFinished = TRUE; break; } @@ -264,55 +266,58 @@ bool32 IsRematchEntryRegistered(int rematchIndex) return FALSE; } -int sub_81CAE28(void) +int IsMatchCallListInitFinished(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - return state->unk10; + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + return state->initFinished; } int GetNumberRegistered(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->numRegistered; } -int sub_81CAE48(void) +// Unused +static int GetNumSpecialTrainers(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - return state->unkC; + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + return state->numSpecialTrainers; } -int unref_sub_81CAE58(void) +// Unused +static int GetNumNormalTrainers(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - return state->numRegistered - state->unkC; + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + return state->numRegistered - state->numSpecialTrainers; } -int unref_sub_81CAE6C(int arg0) +// Unused +static int GetNormalTrainerHeaderId(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - arg0 += state->unkC; - if (arg0 >= state->numRegistered) + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + index += state->numSpecialTrainers; + if (index >= state->numRegistered) return REMATCH_TABLE_ENTRIES; - return state->matchCallEntries[arg0].headerId; + return state->matchCallEntries[index].headerId; } -struct PokenavMatchCallEntries *sub_81CAE94(void) +struct PokenavMatchCallEntry *GetMatchCallList(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->matchCallEntries; } u16 GetMatchCallMapSec(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->matchCallEntries[index].mapSec; } bool32 ShouldDrawRematchPokeballIcon(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (!state->matchCallEntries[index].isSpecialTrainer) index = state->matchCallEntries[index].headerId; else @@ -327,7 +332,7 @@ bool32 ShouldDrawRematchPokeballIcon(int index) int GetMatchCallTrainerPic(int index) { int headerId; - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (!state->matchCallEntries[index].isSpecialTrainer) { index = GetTrainerIdxByRematchIdx(state->matchCallEntries[index].headerId); @@ -346,15 +351,15 @@ int GetMatchCallTrainerPic(int index) return gFacilityClassToPicIndex[index]; } -const u8 *GetMatchCallMessageText(int index, u8 *arg1) +const u8 *GetMatchCallMessageText(int index, bool8 *newRematchRequest) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - *arg1 = 0; + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + *newRematchRequest = FALSE; if (!Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType)) return gText_CallCantBeMadeHere; if (!state->matchCallEntries[index].isSpecialTrainer) - *arg1 = SelectMatchCallMessage(GetTrainerIdxByRematchIdx(state->matchCallEntries[index].headerId), gStringVar4); + *newRematchRequest = SelectMatchCallMessage(GetTrainerIdxByRematchIdx(state->matchCallEntries[index].headerId), gStringVar4); else MatchCall_GetMessage(state->matchCallEntries[index].headerId, gStringVar4); @@ -364,7 +369,7 @@ const u8 *GetMatchCallMessageText(int index, u8 *arg1) const u8 *GetMatchCallFlavorText(int index, int checkPageEntry) { int rematchId; - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (state->matchCallEntries[index].isSpecialTrainer) { rematchId = MatchCall_GetRematchTableIdx(state->matchCallEntries[index].headerId); @@ -381,20 +386,20 @@ const u8 *GetMatchCallFlavorText(int index, int checkPageEntry) u16 GetMatchCallOptionCursorPos(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->optionCursorPos; } u16 GetMatchCallOptionId(int optionId) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (state->maxOptionId < optionId) return MATCH_CALL_OPTION_COUNT; return state->matchCallOptions[optionId]; } -void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntries *matchCallEntry, u8 *str) +void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntry *matchCallEntry, u8 *str) { const u8 *trainerName; const u8 *className; @@ -413,12 +418,12 @@ void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntries *matchCallEntry, if (className && trainerName) { - u8 *str2 = sub_81DB494(str, 7, className, 69); - sub_81DB494(str2, 7, trainerName, 51); + u8 *str2 = GetStringClearToWidth(str, FONT_NARROW, className, 69); + GetStringClearToWidth(str2, FONT_NARROW, trainerName, 51); } else { - sub_81DB494(str, 7, NULL, 120); + GetStringClearToWidth(str, FONT_NARROW, NULL, 120); } } @@ -431,7 +436,7 @@ u8 GetMatchTableMapSectionId(int rematchIndex) int GetIndexDeltaOfNextCheckPageDown(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); int count = 1; while (++index < state->numRegistered) { @@ -448,7 +453,7 @@ int GetIndexDeltaOfNextCheckPageDown(int index) int GetIndexDeltaOfNextCheckPageUp(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); int count = -1; while (--index >= 0) { @@ -463,7 +468,8 @@ int GetIndexDeltaOfNextCheckPageUp(int index) return 0; } -bool32 unref_sub_81CB16C(void) +// Unused +static bool32 HasRematchEntry(void) { int i; @@ -486,10 +492,10 @@ bool32 unref_sub_81CB16C(void) return FALSE; } -static bool32 sub_81CB1D0(void) +static bool32 ShouldDoNearbyMessage(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - int selection = GetSelectedPokenavListIndex(); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + int selection = PokenavList_GetSelectedIndex(); if (!state->matchCallEntries[selection].isSpecialTrainer) { if (GetMatchCallMapSec(selection) == gMapHeader.regionMapSectionId) diff --git a/src/pokenav_match_call_ui.c b/src/pokenav_match_call_ui.c deleted file mode 100644 index 7e70a50c88..0000000000 --- a/src/pokenav_match_call_ui.c +++ /dev/null @@ -1,998 +0,0 @@ -#include "global.h" -#include "pokenav.h" -#include "window.h" -#include "strings.h" -#include "text.h" -#include "bg.h" -#include "menu.h" -#include "decompress.h" - -// TODO: This UI isnt just for match call, seems to be the general pokenav list UI - -struct PokenavListMenuWindow { - u8 bg; - u8 unk1; - u8 unk2; - u8 unk3; - u8 unk4; - u8 fontId; - u16 unk6; - u16 windowId; - u16 unkA; - u16 unkC; - u16 unkE; -}; - -struct MatchCallWindowState { - // The index of the element at the top of the window. - u16 windowTopIndex; - u16 listLength; - u16 unk4; - // The index of the cursor, relative to the top of the window. - u16 selectedIndexOffset; - u16 visibleEntries; - u16 unkA; - u32 unkC; - void * unk10; -}; - -struct PokenavSub17Substruct -{ - struct PokenavListMenuWindow listWindow; - u32 unk10; - u32 unk14; - u32 unk18; - void * unk1C; - s32 unk20; - s32 unk24; - u32 loopedTaskId; - s32 unk2C; - u32 unk30; - void (*unk34)(struct PokenavMatchCallEntries *, u8*); - void (*unk38)(u16, u32, u32); - struct Sprite *rightArrow; - struct Sprite *upArrow; - struct Sprite *downArrow; - u8 unkTextBuffer[0x40]; -}; - -// Generally at index 0x11 (17) -struct PokenavSub17 -{ - struct PokenavSub17Substruct list; - u8 tilemapBuffer[0x800]; - struct MatchCallWindowState unk888; - s32 unk89C; - u32 loopedTaskId; -}; - -extern void sub_81DB620(u32 windowId, u32 a1, u32 a2, u32 a3, u32 a4); - -void sub_81C82E4(struct PokenavSub17 *matchCall); -bool32 CopyPokenavListMenuTemplate(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct PokenavListTemplate *a2, s32 a3); -void InitMatchCallWindowState(struct MatchCallWindowState *a0, struct PokenavListTemplate *a1); -void SpriteCB_MatchCallUpArrow(struct Sprite *sprite); -void SpriteCB_MatchCallDownArrow(struct Sprite *sprite); -void SpriteCB_MatchCallRightArrow(struct Sprite *sprite); -void ToggleMatchCallArrows(struct PokenavSub17Substruct *a0, u32 a1); -void DestroyMatchCallListArrows(struct PokenavSub17Substruct *a0); -void CreateMatchCallArrowSprites(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C8ED0(void); -static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 a2); -void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 a1); -void sub_81C8D4C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C8CB4(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C8B70(struct PokenavListMenuWindow *a0, s32 a1, s32 a2); -void sub_81C8568(s32 a0, struct PokenavSub17Substruct *a1); -void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *a5); -void sub_81C837C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C835C(struct PokenavListMenuWindow *a0); -u32 LoopedTask_sub_81C8254(s32 state); -bool32 sub_81C83E0(void); -u32 LoopedTask_sub_81C83F0(s32 state); -u32 LoopedTask_sub_81C85A0(s32 state); -u32 LoopedTask_sub_81C8870(s32 state); -u32 LoopedTask_sub_81C8A28(s32 state); -u32 LoopedTask_PrintCheckPageInfo(s32 state); - -static const u16 sMatchcallArrowPaletteData[] = INCBIN_U16("graphics/pokenav/arrows_matchcall.gbapal"); -static const u32 sMatchcallArrowSpriteSheetData[] = INCBIN_U32("graphics/pokenav/arrows_matchcall.4bpp.lz"); - -EWRAM_DATA u32 gUnknown_0203CF44 = 0; - -bool32 sub_81C81D4(const struct BgTemplate *arg0, struct PokenavListTemplate *arg1, s32 arg2) -{ - struct PokenavSub17 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_LIST, sizeof(struct PokenavSub17)); - if (structPtr == NULL) - return FALSE; - - InitMatchCallWindowState(&structPtr->unk888, arg1); - if (!CopyPokenavListMenuTemplate(&structPtr->list, arg0, arg1, arg2)) - return FALSE; - - CreateLoopedTask(LoopedTask_sub_81C8254, 6); - return TRUE; -} - -bool32 sub_81C8224(void) -{ - return FuncIsActiveLoopedTask(LoopedTask_sub_81C8254); -} - -void sub_81C8234(void) -{ - struct PokenavSub17 *structPtr; - - structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - DestroyMatchCallListArrows(&structPtr->list); - RemoveWindow(structPtr->list.listWindow.windowId); - FreePokenavSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); -} - -u32 LoopedTask_sub_81C8254(s32 state) -{ - struct PokenavSub17 *structPtr; - - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - - structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - - switch (state) - { - case 0: - sub_81C82E4(structPtr); - return LT_INC_AND_PAUSE; - case 1: - sub_81C835C(&structPtr->list.listWindow); - return LT_INC_AND_PAUSE; - case 2: - sub_81C837C(&structPtr->unk888, &structPtr->list); - return LT_INC_AND_PAUSE; - case 3: - if (sub_81C83E0()) - { - return LT_PAUSE; - } - else - { - sub_81C8ED0(); - return LT_INC_AND_CONTINUE; - } - case 4: - CreateMatchCallArrowSprites(&structPtr->unk888, &structPtr->list); - return LT_FINISH; - default: - return LT_FINISH; - } -} - -void sub_81C82E4(struct PokenavSub17 *matchCall) -{ - u16 tileNum = (matchCall->list.listWindow.unk1 << 12) | matchCall->list.listWindow.unk6; - sub_8199DF0(matchCall->list.listWindow.bg, PIXEL_FILL(1), matchCall->list.listWindow.unk6, 1); - sub_8199DF0(matchCall->list.listWindow.bg, PIXEL_FILL(4), matchCall->list.listWindow.unk6 + 1, 1); - SetBgTilemapBuffer(matchCall->list.listWindow.bg, matchCall->tilemapBuffer); - FillBgTilemapBufferRect_Palette0(matchCall->list.listWindow.bg, tileNum, 0, 0, 32, 32); - ChangeBgY(matchCall->list.listWindow.bg, 0, 0); - ChangeBgX(matchCall->list.listWindow.bg, 0, 0); - ChangeBgY(matchCall->list.listWindow.bg, matchCall->list.listWindow.unk3 << 11, 2); - CopyBgTilemapBufferToVram(matchCall->list.listWindow.bg); -} - -void sub_81C835C(struct PokenavListMenuWindow *listWindow) -{ - FillWindowPixelBuffer(listWindow->windowId, PIXEL_FILL(1)); - PutWindowTilemap(listWindow->windowId); - CopyWindowToVram(listWindow->windowId, 1); -} - -void sub_81C837C(struct MatchCallWindowState *state, struct PokenavSub17Substruct *a1) -{ - s32 arg2 = state->listLength - state->windowTopIndex; - if (arg2 > state->visibleEntries) - arg2 = state->visibleEntries; - - sub_81C83AC(state->unk10, state->windowTopIndex, arg2, state->unkC, 0, a1); -} - -void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *list) -{ - if (a2 == 0) - return; - - list->unk1C = a0 + a1 * a3; - list->unk18 = a3; - list->listWindow.unkC = 0; - list->listWindow.unkE = a2; - list->unk14 = a1; - list->unk10 = a4; - CreateLoopedTask(LoopedTask_sub_81C83F0, 5); -} - -bool32 sub_81C83E0(void) -{ - return FuncIsActiveLoopedTask(LoopedTask_sub_81C83F0); -} - -u32 LoopedTask_sub_81C83F0(s32 state) -{ - u32 v1; - struct PokenavSub17Substruct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - - switch (state) - { - case 0: - v1 = (structPtr->listWindow.unkA + structPtr->listWindow.unkC + structPtr->unk10) & 0xF; - structPtr->unk34(structPtr->unk1C, structPtr->unkTextBuffer); - if (structPtr->unk38 != NULL) - structPtr->unk38(structPtr->listWindow.windowId, structPtr->unk14, v1); - - AddTextPrinterParameterized(structPtr->listWindow.windowId, structPtr->listWindow.fontId, structPtr->unkTextBuffer, 8, (v1 << 4) + 1, 255, NULL); - if (++structPtr->listWindow.unkC >= structPtr->listWindow.unkE) - { - if (structPtr->unk38 != NULL) - CopyWindowToVram(structPtr->listWindow.windowId, 3); - else - CopyWindowToVram(structPtr->listWindow.windowId, 2); - return LT_INC_AND_PAUSE; - } - else - { - structPtr->unk1C += structPtr->unk18; - structPtr->unk14++; - return LT_CONTINUE; - } - case 1: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - return LT_FINISH; - } - return LT_FINISH; -} - -bool32 ShouldShowUpArrow(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - - return (structPtr->unk888.windowTopIndex != 0); -} - -bool32 ShouldShowDownArrow(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - struct MatchCallWindowState *subPtr = &structPtr->unk888; - - return (subPtr->windowTopIndex + subPtr->visibleEntries < subPtr->listLength); -} - -void MatchCall_MoveWindow(s32 a0, bool32 a1) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - struct MatchCallWindowState *subPtr = &structPtr->unk888; - - if (a0 < 0) - { - if (subPtr->windowTopIndex + a0 < 0) - a0 = -1 * subPtr->windowTopIndex; - if (a1) - sub_81C83AC(subPtr->unk10, subPtr->windowTopIndex + a0, a0 * -1, subPtr->unkC, a0, &structPtr->list); - } - else if (a1) - { - s32 temp = gUnknown_0203CF44 = subPtr->windowTopIndex + subPtr->visibleEntries; - if (temp + a0 >= subPtr->listLength) - a0 = subPtr->listLength - temp; - - sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, a0, subPtr->unkC, subPtr->visibleEntries, &structPtr->list); - } - - sub_81C8568(a0, &structPtr->list); - subPtr->windowTopIndex += a0; -} - -void sub_81C8568(s32 a0, struct PokenavSub17Substruct *list) -{ - list->unk20 = GetBgY(list->listWindow.bg); - list->unk24 = list->unk20 + (a0 << 12); - if (a0 > 0) - list->unk30 = 1; - else - list->unk30 = 2; - list->unk2C = a0; - list->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C85A0, 6); -} - -u32 LoopedTask_sub_81C85A0(s32 state) -{ - s32 y, v1; - bool32 flag; - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - struct PokenavSub17Substruct *subPtr = &structPtr->list; - - switch (state) - { - case 0: - if (!sub_81C83E0()) - return LT_INC_AND_CONTINUE; - return LT_PAUSE; - case 1: - flag = FALSE; - y = GetBgY(subPtr->listWindow.bg); - v1 = ChangeBgY(subPtr->listWindow.bg, 0x1000, subPtr->unk30); - if (subPtr->unk30 == 2) - { - if ((y > subPtr->unk24 || y <= subPtr->unk20) && v1 <= subPtr->unk24) - flag = TRUE; - } - else - { - if ((y < subPtr->unk24 || y >= subPtr->unk20) && v1 >= subPtr->unk24) - flag = TRUE; - } - - if (flag) - { - subPtr->listWindow.unkA = (subPtr->listWindow.unkA + subPtr->unk2C) & 0xF; - ChangeBgY(subPtr->listWindow.bg, subPtr->unk24, 0); - return LT_FINISH; - } - return LT_PAUSE; - } - return LT_FINISH; -} - -bool32 IsMonListLoopedTaskActive(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - return IsLoopedTaskActive(structPtr->list.loopedTaskId); -} - -struct MatchCallWindowState *GetMatchCallWindowStruct(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - return &structPtr->unk888; -} - -int MatchCall_MoveCursorUp(void) -{ - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - if (structPtr->selectedIndexOffset != 0) - { - structPtr->selectedIndexOffset--; - return 1; - } - if (ShouldShowUpArrow()) - { - MatchCall_MoveWindow(-1, TRUE); - return 2; - } - return 0; -} - -int MatchCall_MoveCursorDown(void) -{ - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - if (structPtr->windowTopIndex + structPtr->selectedIndexOffset >= structPtr->listLength - 1) - return 0; - if (structPtr->selectedIndexOffset < structPtr->visibleEntries - 1) - { - structPtr->selectedIndexOffset++; - return 1; - } - if (ShouldShowDownArrow()) - { - MatchCall_MoveWindow(1, TRUE); - return 2; - } - return 0; -} - -int MatchCall_PageUp(void) -{ - s32 scroll; - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - if (ShouldShowUpArrow()) - { - if (structPtr->windowTopIndex >= structPtr->visibleEntries) - scroll = structPtr->visibleEntries; - else - scroll = structPtr->windowTopIndex; - MatchCall_MoveWindow(scroll * -1, TRUE); - return 2; - } - else if (structPtr->selectedIndexOffset != 0) - { - structPtr->selectedIndexOffset = 0; - return 1; - } - return 0; -} - -int MatchCall_PageDown(void) -{ - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - if (ShouldShowDownArrow()) - { - s32 windowBottomIndex = structPtr->windowTopIndex + structPtr->visibleEntries; - s32 scroll = structPtr->unk4 - structPtr->windowTopIndex; - - if (windowBottomIndex <= structPtr->unk4) - scroll = structPtr->visibleEntries; - MatchCall_MoveWindow(scroll, TRUE); - return 2; - } - else - { - s32 cursor, lastVisibleIndex; - if (structPtr->listLength >= structPtr->visibleEntries) - { - cursor = structPtr->selectedIndexOffset; - lastVisibleIndex = structPtr->visibleEntries; - } - else - { - cursor = structPtr->selectedIndexOffset; - lastVisibleIndex = structPtr->listLength; - } - lastVisibleIndex -= 1; - if (cursor >= lastVisibleIndex) - return 0; - - structPtr->selectedIndexOffset = lastVisibleIndex; - return 1; - } -} - -u32 GetSelectedPokenavListIndex(void) -{ - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - return structPtr->windowTopIndex + structPtr->selectedIndexOffset; -} - -u32 GetMatchCallListTopIndex(void) -{ - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - return structPtr->windowTopIndex; -} - -void sub_81C877C(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - structPtr->unk89C = 0; - structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C8870, 6); -} - -void PrintCheckPageInfo(s16 a0) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - structPtr->unk888.windowTopIndex += a0; - structPtr->unk89C = 0; - structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); -} - -void sub_81C87F0(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - structPtr->unk89C = 0; - structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C8A28, 6); -} - -bool32 IsMatchCallListTaskActive(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - return IsLoopedTaskActive(structPtr->loopedTaskId); -} - -void sub_81C8838(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - struct MatchCallWindowState *subPtr = &structPtr->unk888; - structPtr->list.unk38(structPtr->list.listWindow.windowId, subPtr->windowTopIndex + subPtr->selectedIndexOffset, (structPtr->list.listWindow.unkA + subPtr->selectedIndexOffset) & 0xF); - CopyWindowToVram(structPtr->list.listWindow.windowId, 1); -} - -// TODO: -u32 LoopedTask_sub_81C8870(s32 state) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - - switch (state) - { - case 0: - ToggleMatchCallArrows(&structPtr->list, 1); - // fall-through - case 1: - if (structPtr->unk89C != structPtr->unk888.selectedIndexOffset) - sub_81C8B70(&structPtr->list.listWindow, structPtr->unk89C, 1); - - structPtr->unk89C++; - return LT_INC_AND_PAUSE; - case 2: - if (!IsDma3ManagerBusyWithBgCopy()) - { - if (structPtr->unk89C != structPtr->unk888.visibleEntries) - return 6; - if (structPtr->unk888.selectedIndexOffset != 0) - sub_81C8B70(&structPtr->list.listWindow, structPtr->unk89C, structPtr->unk888.selectedIndexOffset); - - return LT_INC_AND_PAUSE; - } - return LT_PAUSE; - case 3: - if (!IsDma3ManagerBusyWithBgCopy()) - { - if (structPtr->unk888.selectedIndexOffset != 0) - { - MatchCall_MoveWindow(structPtr->unk888.selectedIndexOffset, FALSE); - return LT_INC_AND_PAUSE; - } - return LT_FINISH; - } - return LT_PAUSE; - case 4: - if (IsMonListLoopedTaskActive()) - return LT_PAUSE; - - structPtr->unk888.selectedIndexOffset = 0; - return LT_FINISH; - } - return LT_FINISH; -} - -u32 LoopedTask_PrintCheckPageInfo(s32 state) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - - switch (state) - { - case 0: - sub_81C8CB4(&structPtr->unk888, &structPtr->list); - break; - case 1: - PrintMatchCallFieldNames(&structPtr->list, 0); - break; - case 2: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_STRATEGY); - break; - case 3: - PrintMatchCallFieldNames(&structPtr->list, 1); - break; - case 4: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_POKEMON); - break; - case 5: - PrintMatchCallFieldNames(&structPtr->list, 2); - break; - case 6: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_INTRO_1); - break; - case 7: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_INTRO_2); - break; - default: - return LT_FINISH; - } - return LT_INC_AND_PAUSE; -} - -u32 LoopedTask_sub_81C8A28(s32 state) -{ - struct PokenavSub17 *structPtr; - struct MatchCallWindowState *subPtr888; - struct PokenavSub17Substruct *subPtr0; - s32 r5, *ptr; - - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - - structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - subPtr888 = &structPtr->unk888; - subPtr0 = &structPtr->list; - - switch (state) - { - case 0: - sub_81C8D4C(subPtr888, subPtr0); - return LT_INC_AND_PAUSE; - case 1: - ptr = &structPtr->unk89C; - if (++(*ptr) < structPtr->unk888.visibleEntries) - { - sub_81C8B70(&subPtr0->listWindow, *ptr, 1); - return LT_PAUSE; - } - - *ptr = 0; - if (subPtr888->listLength <= subPtr888->visibleEntries) - { - if (subPtr888->windowTopIndex != 0) - { - s32 r4 = subPtr888->windowTopIndex; - r5 = -r4; - sub_81C8B70(&subPtr0->listWindow, r5, r4); - subPtr888->selectedIndexOffset = r4; - *ptr = r5; - return LT_INC_AND_PAUSE; - } - } - else - { - if (subPtr888->windowTopIndex + subPtr888->visibleEntries > subPtr888->listLength) - { - s32 r4 = subPtr888->windowTopIndex + subPtr888->visibleEntries - subPtr888->listLength; - r5 = -r4; - sub_81C8B70(&subPtr0->listWindow, r5, r4); - subPtr888->selectedIndexOffset = r4; - *ptr = r5; - return LT_INC_AND_PAUSE; - } - } - return 9; - case 2: - MatchCall_MoveWindow(structPtr->unk89C, FALSE); - return LT_INC_AND_PAUSE; - case 3: - if (!IsMonListLoopedTaskActive()) - { - structPtr->unk89C = 0; - return 1; - } - return 2; - case 4: - sub_81C83AC(subPtr888->unk10, subPtr888->windowTopIndex + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, &structPtr->list); - return LT_INC_AND_PAUSE; - case 5: - if (sub_81C83E0()) - return LT_PAUSE; - if (++structPtr->unk89C >= subPtr888->listLength || structPtr->unk89C >= subPtr888->visibleEntries) - return LT_INC_AND_CONTINUE; - return 9; - case 6: - ToggleMatchCallArrows(subPtr0, 0); - return LT_FINISH; - } - - return LT_FINISH; -} - -void sub_81C8B70(struct PokenavListMenuWindow *listWindow, s32 a1, s32 a2) -{ - u8 *v1 = (u8*)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA); - u32 v2 = listWindow->unk4 * 64; - - a1 = (listWindow->unkA + a1) & 0xF; - if (a1 + a2 <= 16) - { - CpuFastFill8(PIXEL_FILL(1), v1 + a1 * v2, a2 * v2); - CopyWindowToVram(listWindow->windowId, 2); - } - else - { - u32 v3 = 16 - a1; - u32 v4 = a2 - v3; - - CpuFastFill8(PIXEL_FILL(1), v1 + a1 * v2, v3 * v2); - CpuFastFill8(PIXEL_FILL(1), v1, v4 * v2); - CopyWindowToVram(listWindow->windowId, 2); - } - - for (a2--; a2 != -1; a1 = (a1 + 1) & 0xF, a2--) - ClearRematchPokeballIcon(listWindow->windowId, a1); - - CopyWindowToVram(listWindow->windowId, 1); -} - -void sub_81C8C64(struct PokenavListMenuWindow *listWindow, u32 a1) -{ - u16 var; - u16 *v1 = (u16*)GetBgTilemapBuffer(GetWindowAttribute(listWindow->windowId, WINDOW_BG)); - v1 += ((listWindow->unkA << 6) + listWindow->unk2) - 1; - - if (a1 != 0) - var = (listWindow->unk1 << 12) | (listWindow->unk6 + 1); - else - var = (listWindow->unk1 << 12) | (listWindow->unk6); - - v1[0] = var; - v1[0x20] = var; -} - -void sub_81C8CB4(struct MatchCallWindowState *state, struct PokenavSub17Substruct *list) -{ - u8 colors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_RED}; - - list->unk34(state->unk10 + state->unkC * state->windowTopIndex, list->unkTextBuffer); - list->unk38(list->listWindow.windowId, state->windowTopIndex, list->listWindow.unkA); - FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(4), 0, list->listWindow.unkA * 16, list->listWindow.unk4 * 8, 16); - AddTextPrinterParameterized3(list->listWindow.windowId, list->listWindow.fontId, 8, (list->listWindow.unkA * 16) + 1, colors, TEXT_SPEED_FF, list->unkTextBuffer); - sub_81C8C64(&list->listWindow, 1); - CopyWindowRectToVram(list->listWindow.windowId, 3, 0, list->listWindow.unkA * 2, list->listWindow.unk4, 2); -} - -void sub_81C8D4C(struct MatchCallWindowState *state, struct PokenavSub17Substruct *list) -{ - list->unk34(state->unk10 + state->unkC * state->windowTopIndex, list->unkTextBuffer); - FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, list->listWindow.unkA * 16, list->listWindow.unk4 * 8, 16); - AddTextPrinterParameterized(list->listWindow.windowId, list->listWindow.fontId, list->unkTextBuffer, 8, list->listWindow.unkA * 16 + 1, TEXT_SPEED_FF, NULL); - sub_81C8C64(&list->listWindow, 0); - CopyWindowToVram(list->listWindow.windowId, 3); -} - -void PrintMatchCallFieldNames(struct PokenavSub17Substruct *list, u32 fieldId) -{ - const u8 *fieldNames[] = {gText_PokenavMatchCall_Strategy, gText_PokenavMatchCall_TrainerPokemon, gText_PokenavMatchCall_SelfIntroduction}; - u8 colors[3] = {TEXT_COLOR_WHITE, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED}; - u32 top = (list->listWindow.unkA + 1 + (fieldId * 2)) & 0xF; - - FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, top << 4, list->listWindow.unk4, 16); - AddTextPrinterParameterized3(list->listWindow.windowId, 7, 2, (top << 4) + 1, colors, -1, fieldNames[fieldId]); - CopyWindowRectToVram(list->listWindow.windowId, 2, 0, top << 1, list->listWindow.unk4, 2); -} - -static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *list, u32 checkPageEntry) -{ - // lines 1, 3, and 5 are the field names printed by PrintMatchCallFieldNames - static const u8 lineOffsets[CHECK_PAGE_ENTRY_COUNT] = - { - [CHECK_PAGE_STRATEGY] = 2, - [CHECK_PAGE_POKEMON] = 4, - [CHECK_PAGE_INTRO_1] = 6, - [CHECK_PAGE_INTRO_2] = 7 - }; - - u32 r6 = (list->listWindow.unkA + lineOffsets[checkPageEntry]) & 0xF; - const u8 *str = GetMatchCallFlavorText(a0->windowTopIndex, checkPageEntry); - - if (str != NULL) - { - sub_81DB620(list->listWindow.windowId, 1, r6 * 2, list->listWindow.unk4 - 1, 2); - AddTextPrinterParameterized(list->listWindow.windowId, 7, str, 2, (r6 << 4) + 1, TEXT_SPEED_FF, NULL); - CopyWindowRectToVram(list->listWindow.windowId, 2, 0, r6 * 2, list->listWindow.unk4, 2); - } -} - -static const struct CompressedSpriteSheet sMatchcallArrowSpriteSheets[] = -{ - { - .data = sMatchcallArrowSpriteSheetData, - .size = 192, - .tag = 0xA - } -}; - -static const struct SpritePalette sMatchcallArrowPalettes[] = -{ - { - .data = sMatchcallArrowPaletteData, - .tag = 0x14 - }, - {} -}; - -static const struct OamData sMatchCallRightArrowSpriteOam = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0 -}; - -static const struct SpriteTemplate sMatchCallRightArrowSprite = -{ - .tileTag = 0xA, - .paletteTag = 0x14, - .oam = &sMatchCallRightArrowSpriteOam, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_MatchCallRightArrow -}; - -static const struct OamData sMatchCallUpDownArrowSpriteOam = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0 -}; - -static const struct SpriteTemplate sMatchCallUpDownArrowSprite = -{ - .tileTag = 0xA, - .paletteTag = 0x14, - .oam = &sMatchCallUpDownArrowSpriteOam, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - -void sub_81C8ED0(void) -{ - u32 i; - const struct CompressedSpriteSheet *ptr; - - for (i = 0, ptr = sMatchcallArrowSpriteSheets; i < ARRAY_COUNT(sMatchcallArrowSpriteSheets); ptr++, i++) - LoadCompressedSpriteSheet(ptr); - - Pokenav_AllocAndLoadPalettes(sMatchcallArrowPalettes); -} - -void CreateMatchCallArrowSprites(struct MatchCallWindowState *windowState, struct PokenavSub17Substruct *list) -{ - u32 spriteId; - s16 x; - - spriteId = CreateSprite(&sMatchCallRightArrowSprite, list->listWindow.unk2 * 8 + 3, (list->listWindow.unk3 + 1) * 8, 7); - list->rightArrow = &gSprites[spriteId]; - - x = list->listWindow.unk2 * 8 + (list->listWindow.unk4 - 1) * 4; - spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, list->listWindow.unk3 * 8 + windowState->visibleEntries * 16, 7); - list->downArrow = &gSprites[spriteId]; - list->downArrow->oam.tileNum += 2; - list->downArrow->callback = SpriteCB_MatchCallDownArrow; - - spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, list->listWindow.unk3 * 8, 7); - list->upArrow = &gSprites[spriteId]; - list->upArrow->oam.tileNum += 4; - list->upArrow->callback = SpriteCB_MatchCallUpArrow; -} - -void DestroyMatchCallListArrows(struct PokenavSub17Substruct *list) -{ - DestroySprite(list->rightArrow); - DestroySprite(list->upArrow); - DestroySprite(list->downArrow); - FreeSpriteTilesByTag(0xA); - FreeSpritePaletteByTag(0x14); -} - -void ToggleMatchCallArrows(struct PokenavSub17Substruct *list, bool32 shouldHide) -{ - if (shouldHide) - { - list->rightArrow->callback = SpriteCallbackDummy; - list->upArrow->callback = SpriteCallbackDummy; - list->downArrow->callback = SpriteCallbackDummy; - } - else - { - list->rightArrow->callback = SpriteCB_MatchCallRightArrow; - list->upArrow->callback = SpriteCB_MatchCallUpArrow; - list->downArrow->callback = SpriteCB_MatchCallDownArrow; - } - list->rightArrow->invisible = shouldHide; - list->upArrow->invisible = shouldHide; - list->downArrow->invisible = shouldHide; -} - -void SpriteCB_MatchCallRightArrow(struct Sprite *sprite) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - sprite->y2 = structPtr->unk888.selectedIndexOffset << 4; -} - -void SpriteCB_MatchCallDownArrow(struct Sprite *sprite) -{ - if (sprite->data[7] == 0 && ShouldShowDownArrow()) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - - if (++sprite->data[0] > 3) - { - s16 offset; - - sprite->data[0] = 0; - offset = (sprite->data[1] + 1) & 7; - sprite->data[1] = offset; - sprite->y2 = offset; - } -} - -void SpriteCB_MatchCallUpArrow(struct Sprite *sprite) -{ - if (sprite->data[7] == 0 && ShouldShowUpArrow()) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - - if (++sprite->data[0] > 3) - { - s16 offset; - - sprite->data[0] = 0; - offset = (sprite->data[1] + 1) & 7; - sprite->data[1] = offset; - sprite->y2 = -1 * offset; - } -} - -void ToggleMatchCallVerticalArrows(bool32 shouldHide) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - structPtr->list.upArrow->data[7] = shouldHide; - structPtr->list.downArrow->data[7] = shouldHide; -} - -void InitMatchCallWindowState(struct MatchCallWindowState *dst, struct PokenavListTemplate *template) -{ - dst->unk10 = template->list.matchCallEntries; - dst->windowTopIndex = template->unk6; - dst->listLength = template->count; - dst->unkC = template->unk8; - dst->visibleEntries = template->maxShowed; - if (dst->visibleEntries >= dst->listLength) - { - dst->windowTopIndex = 0; - dst->unk4 = 0; - dst->selectedIndexOffset = template->unk6; - } - else - { - dst->unk4 = dst->listLength - dst->visibleEntries; - if (dst->windowTopIndex + dst->visibleEntries > dst->listLength) - { - dst->selectedIndexOffset = dst->windowTopIndex + dst->visibleEntries - dst->listLength; - dst->windowTopIndex = template->unk6 - dst->selectedIndexOffset; - } - else - { - dst->selectedIndexOffset = 0; - } - } -} - -bool32 CopyPokenavListMenuTemplate(struct PokenavSub17Substruct *dest, const struct BgTemplate *bgTemplate, struct PokenavListTemplate *template, s32 a3) -{ - struct WindowTemplate window; - - dest->listWindow.bg = bgTemplate->bg; - dest->listWindow.unk6 = a3; - dest->unk34 = template->listFunc.unk10_2; - dest->unk38 = template->unk14; - dest->listWindow.unk1 = template->fillValue; - dest->listWindow.unk2 = template->item_X; - dest->listWindow.unk3 = template->listTop; - dest->listWindow.unk4 = template->windowWidth; - dest->listWindow.fontId = template->fontId; - - window.bg = bgTemplate->bg; - window.tilemapLeft = template->item_X; - window.tilemapTop = 0; - window.width = template->windowWidth; - window.height = 32; - window.paletteNum = template->fillValue; - window.baseBlock = a3 + 2; - - dest->listWindow.windowId = AddWindow(&window); - if (dest->listWindow.windowId == WINDOW_NONE) - return FALSE; - - dest->listWindow.unkA = 0; - dest->rightArrow = NULL; - dest->upArrow = NULL; - dest->downArrow = NULL; - return 1; -} diff --git a/src/pokenav_menu_handler.c b/src/pokenav_menu_handler.c new file mode 100644 index 0000000000..b81b4c892f --- /dev/null +++ b/src/pokenav_menu_handler.c @@ -0,0 +1,513 @@ +#include "global.h" +#include "pokenav.h" +#include "event_data.h" +#include "main.h" +#include "sound.h" +#include "constants/songs.h" + +struct Pokenav_Menu +{ + u16 menuType; + s16 cursorPos; + u16 currMenuItem; + u16 helpBarIndex; + u32 menuId; + u32 (*callback)(struct Pokenav_Menu *); +}; + +static bool32 UpdateMenuCursorPos(struct Pokenav_Menu *); +static void ReturnToConditionMenu(struct Pokenav_Menu *); +static void ReturnToMainMenu(struct Pokenav_Menu *); +static u32 GetMenuId(struct Pokenav_Menu *); +static void SetMenuIdAndCB(struct Pokenav_Menu *, u32); +static u32 CB2_ReturnToConditionMenu(struct Pokenav_Menu *); +static u32 CB2_ReturnToMainMenu(struct Pokenav_Menu *); +static u32 HandleConditionSearchMenuInput(struct Pokenav_Menu *); +static u32 HandleConditionMenuInput(struct Pokenav_Menu *); +static u32 HandleCantOpenRibbonsInput(struct Pokenav_Menu *); +static u32 HandleMainMenuInputEndTutorial(struct Pokenav_Menu *); +static u32 HandleMainMenuInputTutorial(struct Pokenav_Menu *); +static u32 HandleMainMenuInput(struct Pokenav_Menu *); +static u32 (*GetMainMenuInputHandler(void))(struct Pokenav_Menu *); +static void SetMenuInputHandler(struct Pokenav_Menu *); + +// Number of entries - 1 for that menu type +static const u8 sLastCursorPositions[] = +{ + [POKENAV_MENU_TYPE_DEFAULT] = 2, + [POKENAV_MENU_TYPE_UNLOCK_MC] = 3, + [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4, + [POKENAV_MENU_TYPE_CONDITION] = 2, + [POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5 +}; + +static const u8 sMenuItems[][MAX_POKENAV_MENUITEMS] = +{ + [POKENAV_MENU_TYPE_DEFAULT] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, + [2 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF + }, + [POKENAV_MENU_TYPE_UNLOCK_MC] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, + POKENAV_MENUITEM_MATCH_CALL, + [3 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF + }, + [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, + POKENAV_MENUITEM_MATCH_CALL, + POKENAV_MENUITEM_RIBBONS, + [4 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF + }, + [POKENAV_MENU_TYPE_CONDITION] = + { + POKENAV_MENUITEM_CONDITION_PARTY, + POKENAV_MENUITEM_CONDITION_SEARCH, + POKENAV_MENUITEM_CONDITION_CANCEL, + [3 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF + }, + [POKENAV_MENU_TYPE_CONDITION_SEARCH] = + { + POKENAV_MENUITEM_CONDITION_SEARCH_COOL, + POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY, + POKENAV_MENUITEM_CONDITION_SEARCH_CUTE, + POKENAV_MENUITEM_CONDITION_SEARCH_SMART, + POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH, + POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL + }, +}; + +static u8 GetPokenavMainMenuType(void) +{ + u8 menuType = POKENAV_MENU_TYPE_DEFAULT; + + if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV)) + { + menuType = POKENAV_MENU_TYPE_UNLOCK_MC; + + if (FlagGet(FLAG_SYS_RIBBON_GET)) + menuType = POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS; + } + + return menuType; +} + +bool32 PokenavCallback_Init_MainMenuCursorOnMap(void) +{ + struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu)); + if (!menu) + return FALSE; + + menu->menuType = GetPokenavMainMenuType(); + menu->cursorPos = POKENAV_MENUITEM_MAP; + menu->currMenuItem = POKENAV_MENUITEM_MAP; + menu->helpBarIndex = HELPBAR_NONE; + SetMenuInputHandler(menu); + return TRUE; +} + +bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void) +{ + struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu)); + if (!menu) + return FALSE; + + menu->menuType = GetPokenavMainMenuType(); + menu->cursorPos = POKENAV_MENUITEM_MATCH_CALL; + menu->currMenuItem = POKENAV_MENUITEM_MATCH_CALL; + menu->helpBarIndex = HELPBAR_NONE; + SetMenuInputHandler(menu); + return TRUE; +} + +bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void) +{ + struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu)); + if (!menu) + return FALSE; + + menu->menuType = GetPokenavMainMenuType(); + menu->cursorPos = POKENAV_MENUITEM_RIBBONS; + menu->currMenuItem = POKENAV_MENUITEM_RIBBONS; + SetMenuInputHandler(menu); + return TRUE; +} + +bool32 PokenavCallback_Init_ConditionMenu(void) +{ + struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu)); + if (!menu) + return FALSE; + + menu->menuType = POKENAV_MENU_TYPE_CONDITION; + menu->cursorPos = 0; //party + menu->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY; + menu->helpBarIndex = HELPBAR_NONE; + SetMenuInputHandler(menu); + return TRUE; +} + +bool32 PokenavCallback_Init_ConditionSearchMenu(void) +{ + struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu)); + if (!menu) + return FALSE; + + menu->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; + menu->cursorPos = GetSelectedConditionSearch(); + menu->currMenuItem = menu->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; + menu->helpBarIndex = HELPBAR_NONE; + SetMenuInputHandler(menu); + return TRUE; +} + +static void SetMenuInputHandler(struct Pokenav_Menu *menu) +{ + switch (menu->menuType) + { + case POKENAV_MENU_TYPE_DEFAULT: + SetPokenavMode(POKENAV_MODE_NORMAL); + // fallthrough + case POKENAV_MENU_TYPE_UNLOCK_MC: + case POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS: + menu->callback = GetMainMenuInputHandler(); + break; + case POKENAV_MENU_TYPE_CONDITION: + menu->callback = HandleConditionMenuInput; + break; + case POKENAV_MENU_TYPE_CONDITION_SEARCH: + menu->callback = HandleConditionSearchMenuInput; + break; + } +} + +static u32 (*GetMainMenuInputHandler(void))(struct Pokenav_Menu *) +{ + switch (GetPokenavMode()) + { + default: + case POKENAV_MODE_NORMAL: + return HandleMainMenuInput; + case POKENAV_MODE_FORCE_CALL_READY: + return HandleMainMenuInputTutorial; + case POKENAV_MODE_FORCE_CALL_EXIT: + return HandleMainMenuInputEndTutorial; + } +} + +u32 GetMenuHandlerCallback(void) +{ + struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); + return menu->callback(menu); +} + +void FreeMenuHandlerSubstruct1(void) +{ + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); +} + +static u32 HandleMainMenuInput(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + return POKENAV_MENU_FUNC_MOVE_CURSOR; + + if (JOY_NEW(A_BUTTON)) + { + switch (sMenuItems[menu->menuType][menu->cursorPos]) + { + case POKENAV_MENUITEM_MAP: + menu->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? HELPBAR_MAP_ZOOMED_IN : HELPBAR_MAP_ZOOMED_OUT; + SetMenuIdAndCB(menu, POKENAV_REGION_MAP); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + case POKENAV_MENUITEM_CONDITION: + menu->menuType = POKENAV_MENU_TYPE_CONDITION; + menu->cursorPos = 0; + menu->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][0]; + menu->callback = HandleConditionMenuInput; + return POKENAV_MENU_FUNC_OPEN_CONDITION; + case POKENAV_MENUITEM_MATCH_CALL: + menu->helpBarIndex = HELPBAR_MC_TRAINER_LIST; + SetMenuIdAndCB(menu, POKENAV_MATCH_CALL); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + case POKENAV_MENUITEM_RIBBONS: + if (CanViewRibbonsMenu()) + { + menu->helpBarIndex = HELPBAR_RIBBONS_MON_LIST; + SetMenuIdAndCB(menu, POKENAV_RIBBONS_MON_LIST); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + } + else + { + menu->callback = HandleCantOpenRibbonsInput; + return POKENAV_MENU_FUNC_NO_RIBBON_WINNERS; + } + case POKENAV_MENUITEM_SWITCH_OFF: + return POKENAV_MENU_FUNC_EXIT; + } + } + + if (JOY_NEW(B_BUTTON)) + return POKENAV_MENU_FUNC_EXIT; + + return POKENAV_MENU_FUNC_NONE; +} + +// Force the player to select Match Call during the call Mr. Stone pokenav tutorial +static u32 HandleMainMenuInputTutorial(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + return POKENAV_MENU_FUNC_MOVE_CURSOR; + + if (JOY_NEW(A_BUTTON)) + { + if (sMenuItems[menu->menuType][menu->cursorPos] == POKENAV_MENUITEM_MATCH_CALL) + { + menu->helpBarIndex = HELPBAR_MC_TRAINER_LIST; + SetMenuIdAndCB(menu, POKENAV_MATCH_CALL); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + } + else + { + PlaySE(SE_FAILURE); + return POKENAV_MENU_FUNC_NONE; + } + } + + if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_FAILURE); + return POKENAV_MENU_FUNC_NONE; + } + + return POKENAV_MENU_FUNC_NONE; +} + +// After calling Mr. Stone during the pokenav tutorial, force player to exit or use Match Call again +static u32 HandleMainMenuInputEndTutorial(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + return POKENAV_MENU_FUNC_MOVE_CURSOR; + + if (JOY_NEW(A_BUTTON)) + { + u32 menuItem = sMenuItems[menu->menuType][menu->cursorPos]; + if (menuItem != POKENAV_MENUITEM_MATCH_CALL && menuItem != POKENAV_MENUITEM_SWITCH_OFF) + { + PlaySE(SE_FAILURE); + return POKENAV_MENU_FUNC_NONE; + } + else if (menuItem == POKENAV_MENUITEM_MATCH_CALL) + { + menu->helpBarIndex = HELPBAR_MC_TRAINER_LIST; + SetMenuIdAndCB(menu, POKENAV_MATCH_CALL); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + } + else + { + return -1; + } + } + else if (JOY_NEW(B_BUTTON)) + { + return -1; + } + return POKENAV_MENU_FUNC_NONE; +} + +// Handles input after selecting Ribbons when there are no ribbon winners left +// Selecting it again just reprints the Ribbon description to replace the "No Ribbon winners" message +static u32 HandleCantOpenRibbonsInput(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + { + menu->callback = GetMainMenuInputHandler(); + return POKENAV_MENU_FUNC_MOVE_CURSOR; + } + + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + menu->callback = GetMainMenuInputHandler(); + return POKENAV_MENU_FUNC_RESHOW_DESCRIPTION; + } + + return POKENAV_MENU_FUNC_NONE; +} + +static u32 HandleConditionMenuInput(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + return POKENAV_MENU_FUNC_MOVE_CURSOR; + + if (JOY_NEW(A_BUTTON)) + { + switch (sMenuItems[menu->menuType][menu->cursorPos]) + { + case POKENAV_MENUITEM_CONDITION_SEARCH: + menu->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; + menu->cursorPos = 0; + menu->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION_SEARCH][0]; + menu->callback = HandleConditionSearchMenuInput; + return POKENAV_MENU_FUNC_OPEN_CONDITION_SEARCH; + case POKENAV_MENUITEM_CONDITION_PARTY: + menu->helpBarIndex = 0; + SetMenuIdAndCB(menu, POKENAV_CONDITION_GRAPH_PARTY); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + case POKENAV_MENUITEM_CONDITION_CANCEL: + PlaySE(SE_SELECT); + ReturnToMainMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_MAIN; + } + } + if (JOY_NEW(B_BUTTON)) + { + if (menu->cursorPos != sLastCursorPositions[menu->menuType]) + { + menu->cursorPos = sLastCursorPositions[menu->menuType]; + menu->callback = CB2_ReturnToMainMenu; + return POKENAV_MENU_FUNC_MOVE_CURSOR; + } + else + { + PlaySE(SE_SELECT); + ReturnToMainMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_MAIN; + } + } + + return POKENAV_MENU_FUNC_NONE; +} + +static u32 HandleConditionSearchMenuInput(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + return POKENAV_MENU_FUNC_MOVE_CURSOR; + + if (JOY_NEW(A_BUTTON)) + { + u8 menuItem = sMenuItems[menu->menuType][menu->cursorPos]; + if (menuItem != POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL) + { + SetSelectedConditionSearch(menuItem - POKENAV_MENUITEM_CONDITION_SEARCH_COOL); + SetMenuIdAndCB(menu, POKENAV_CONDITION_SEARCH_RESULTS); + menu->helpBarIndex = HELPBAR_CONDITION_MON_LIST; + return POKENAV_MENU_FUNC_OPEN_FEATURE; + } + else + { + PlaySE(SE_SELECT); + ReturnToConditionMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; + } + } + if (JOY_NEW(B_BUTTON)) + { + if (menu->cursorPos != sLastCursorPositions[menu->menuType]) + { + menu->cursorPos = sLastCursorPositions[menu->menuType]; + menu->callback = CB2_ReturnToConditionMenu; + return POKENAV_MENU_FUNC_MOVE_CURSOR; + } + else + { + PlaySE(SE_SELECT); + ReturnToConditionMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; + } + } + return POKENAV_MENU_FUNC_NONE; +} + +static u32 CB2_ReturnToMainMenu(struct Pokenav_Menu *menu) +{ + ReturnToMainMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_MAIN; +} + +static u32 CB2_ReturnToConditionMenu(struct Pokenav_Menu *menu) +{ + ReturnToConditionMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; +} + +static void SetMenuIdAndCB(struct Pokenav_Menu *menu, u32 menuId) +{ + menu->menuId = menuId; + menu->callback = GetMenuId; +} + +static u32 GetMenuId(struct Pokenav_Menu *menu) +{ + return menu->menuId; +} + +static void ReturnToMainMenu(struct Pokenav_Menu *menu) +{ + menu->menuType = GetPokenavMainMenuType(); + menu->cursorPos = 1; + menu->currMenuItem = sMenuItems[menu->menuType][menu->cursorPos]; + menu->callback = HandleMainMenuInput; +} + +static void ReturnToConditionMenu(struct Pokenav_Menu *menu) +{ + menu->menuType = POKENAV_MENU_TYPE_CONDITION; + menu->cursorPos = 1; + menu->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][1]; + menu->callback = HandleConditionMenuInput; +} + +static bool32 UpdateMenuCursorPos(struct Pokenav_Menu *menu) +{ + if (JOY_NEW(DPAD_UP)) + { + if (--menu->cursorPos < 0) + menu->cursorPos = sLastCursorPositions[menu->menuType]; + + menu->currMenuItem = sMenuItems[menu->menuType][menu->cursorPos]; + return TRUE; + } + else if (JOY_NEW(DPAD_DOWN)) + { + menu->cursorPos++; + if (menu->cursorPos > sLastCursorPositions[menu->menuType]) + menu->cursorPos = 0; + + menu->currMenuItem = sMenuItems[menu->menuType][menu->cursorPos]; + return TRUE; + } + else + { + return FALSE; + } +} + +int GetPokenavMenuType(void) +{ + struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); + return menu->menuType; +} + +// Position of cursor relative to number of current menu options +int GetPokenavCursorPos(void) +{ + struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); + return menu->cursorPos; +} + +// ID of menu item the cursor is currently on +int GetCurrentMenuItemId(void) +{ + struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); + return menu->currMenuItem; +} + +u16 GetHelpBarTextId(void) +{ + struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); + return menu->helpBarIndex; +} diff --git a/src/pokenav_menu_handler_1.c b/src/pokenav_menu_handler_1.c deleted file mode 100644 index 4792756c18..0000000000 --- a/src/pokenav_menu_handler_1.c +++ /dev/null @@ -1,513 +0,0 @@ -#include "global.h" -#include "pokenav.h" -#include "event_data.h" -#include "main.h" -#include "sound.h" -#include "constants/songs.h" - -struct Pokenav1Struct -{ - u16 menuType; - s16 cursorPos; - u16 currMenuItem; - u16 helpBarIndex; - u32 menuId; - u32 (*callback)(struct Pokenav1Struct*); -}; - -static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state); -static void ReturnToConditionMenu(struct Pokenav1Struct *state); -static void ReturnToMainMenu(struct Pokenav1Struct *state); -static u32 GetMenuId(struct Pokenav1Struct *state); -static void SetMenuIdAndCB(struct Pokenav1Struct *state, u32 a1); -static u32 CB2_ReturnToConditionMenu(struct Pokenav1Struct *state); -static u32 CB2_ReturnToMainMenu(struct Pokenav1Struct *state); -static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state); -static u32 HandleConditionMenuInput(struct Pokenav1Struct *state); -static u32 HandleCantOpenRibbonsInput(struct Pokenav1Struct *state); -static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state); -static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state); -static u32 HandleMainMenuInput(struct Pokenav1Struct *state); -static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*); -static void SetMenuInputHandler(struct Pokenav1Struct *state); - -// Number of entries - 1 for that menu type -static const u8 sLastCursorPositions[] = -{ - [POKENAV_MENU_TYPE_DEFAULT] = 2, - [POKENAV_MENU_TYPE_UNLOCK_MC] = 3, - [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4, - [POKENAV_MENU_TYPE_CONDITION] = 2, - [POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5 -}; - -static const u8 sMenuItems[][6] = -{ - [POKENAV_MENU_TYPE_DEFAULT] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, - [2 ... 5] = POKENAV_MENUITEM_SWITCH_OFF - }, - [POKENAV_MENU_TYPE_UNLOCK_MC] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, - POKENAV_MENUITEM_MATCH_CALL, - [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF - }, - [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, - POKENAV_MENUITEM_MATCH_CALL, - POKENAV_MENUITEM_RIBBONS, - [4 ... 5] = POKENAV_MENUITEM_SWITCH_OFF - }, - [POKENAV_MENU_TYPE_CONDITION] = - { - POKENAV_MENUITEM_CONDITION_PARTY, - POKENAV_MENUITEM_CONDITION_SEARCH, - POKENAV_MENUITEM_CONDITION_CANCEL, - [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF - }, - [POKENAV_MENU_TYPE_CONDITION_SEARCH] = - { - POKENAV_MENUITEM_CONDITION_SEARCH_COOL, - POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY, - POKENAV_MENUITEM_CONDITION_SEARCH_CUTE, - POKENAV_MENUITEM_CONDITION_SEARCH_SMART, - POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH, - POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL - }, -}; - -static u8 GetPokenavMainMenuType(void) -{ - u8 menuType = POKENAV_MENU_TYPE_DEFAULT; - - if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV)) - { - menuType = POKENAV_MENU_TYPE_UNLOCK_MC; - - if (FlagGet(FLAG_SYS_RIBBON_GET)) - menuType = POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS; - } - - return menuType; -} - -bool32 PokenavCallback_Init_MainMenuCursorOnMap(void) -{ - struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); - if (!state) - return FALSE; - - state->menuType = GetPokenavMainMenuType(); - state->cursorPos = POKENAV_MENUITEM_MAP; - state->currMenuItem = POKENAV_MENUITEM_MAP; - state->helpBarIndex = HELPBAR_NONE; - SetMenuInputHandler(state); - return TRUE; -} - -bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void) -{ - struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); - if (!state) - return FALSE; - - state->menuType = GetPokenavMainMenuType(); - state->cursorPos = POKENAV_MENUITEM_MATCH_CALL; - state->currMenuItem = POKENAV_MENUITEM_MATCH_CALL; - state->helpBarIndex = HELPBAR_NONE; - SetMenuInputHandler(state); - return TRUE; -} - -bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void) -{ - struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); - if (!state) - return FALSE; - - state->menuType = GetPokenavMainMenuType(); - state->cursorPos = POKENAV_MENUITEM_RIBBONS; - state->currMenuItem = POKENAV_MENUITEM_RIBBONS; - SetMenuInputHandler(state); - return TRUE; -} - -bool32 PokenavCallback_Init_ConditionMenu(void) -{ - struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); - if (!state) - return FALSE; - - state->menuType = POKENAV_MENU_TYPE_CONDITION; - state->cursorPos = 0; //party - state->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY; - state->helpBarIndex = HELPBAR_NONE; - SetMenuInputHandler(state); - return TRUE; -} - -bool32 PokenavCallback_Init_ConditionSearchMenu(void) -{ - struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); - if (!state) - return FALSE; - - state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; - state->cursorPos = GetSelectedConditionSearch(); - state->currMenuItem = state->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; - state->helpBarIndex = HELPBAR_NONE; - SetMenuInputHandler(state); - return TRUE; -} - -static void SetMenuInputHandler(struct Pokenav1Struct *state) -{ - switch (state->menuType) - { - case POKENAV_MENU_TYPE_DEFAULT: - SetPokenavMode(POKENAV_MODE_NORMAL); - // fallthrough - case POKENAV_MENU_TYPE_UNLOCK_MC: - case POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS: - state->callback = GetMainMenuInputHandler(); - break; - case POKENAV_MENU_TYPE_CONDITION: - state->callback = HandleConditionMenuInput; - break; - case POKENAV_MENU_TYPE_CONDITION_SEARCH: - state->callback = HandleConditionSearchMenuInput; - break; - } -} - -static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*) -{ - switch (GetPokenavMode()) - { - default: - case POKENAV_MODE_NORMAL: - return HandleMainMenuInput; - case POKENAV_MODE_FORCE_CALL_READY: - return HandleMainMenuInputTutorial; - case POKENAV_MODE_FORCE_CALL_EXIT: - return HandleMainMenuInputEndTutorial; - } -} - -u32 GetMenuHandlerCallback(void) -{ - struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); - return state->callback(state); -} - -void FreeMenuHandlerSubstruct1(void) -{ - FreePokenavSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); -} - -static u32 HandleMainMenuInput(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - return POKENAV_MENU_FUNC_MOVE_CURSOR; - - if (JOY_NEW(A_BUTTON)) - { - switch (sMenuItems[state->menuType][state->cursorPos]) - { - case POKENAV_MENUITEM_MAP: - state->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? HELPBAR_MAP_ZOOMED_IN : HELPBAR_MAP_ZOOMED_OUT; - SetMenuIdAndCB(state, POKENAV_REGION_MAP); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - case POKENAV_MENUITEM_CONDITION: - state->menuType = POKENAV_MENU_TYPE_CONDITION; - state->cursorPos = 0; - state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][0]; - state->callback = HandleConditionMenuInput; - return POKENAV_MENU_FUNC_OPEN_CONDITION; - case POKENAV_MENUITEM_MATCH_CALL: - state->helpBarIndex = HELPBAR_MC_TRAINER_LIST; - SetMenuIdAndCB(state, POKENAV_MATCH_CALL); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - case POKENAV_MENUITEM_RIBBONS: - if (CanViewRibbonsMenu()) - { - state->helpBarIndex = HELPBAR_RIBBONS_MON_LIST; - SetMenuIdAndCB(state, POKENAV_RIBBONS_MON_LIST); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - } - else - { - state->callback = HandleCantOpenRibbonsInput; - return POKENAV_MENU_FUNC_NO_RIBBON_WINNERS; - } - case POKENAV_MENUITEM_SWITCH_OFF: - return POKENAV_MENU_FUNC_EXIT; - } - } - - if (JOY_NEW(B_BUTTON)) - return POKENAV_MENU_FUNC_EXIT; - - return POKENAV_MENU_FUNC_NONE; -} - -// Force the player to select Match Call during the call Mr. Stone pokenav tutorial -static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - return POKENAV_MENU_FUNC_MOVE_CURSOR; - - if (JOY_NEW(A_BUTTON)) - { - if (sMenuItems[state->menuType][state->cursorPos] == POKENAV_MENUITEM_MATCH_CALL) - { - state->helpBarIndex = HELPBAR_MC_TRAINER_LIST; - SetMenuIdAndCB(state, POKENAV_MATCH_CALL); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - } - else - { - PlaySE(SE_FAILURE); - return POKENAV_MENU_FUNC_NONE; - } - } - - if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_FAILURE); - return POKENAV_MENU_FUNC_NONE; - } - - return POKENAV_MENU_FUNC_NONE; -} - -// After calling Mr. Stone during the pokenav tutorial, force player to exit or use Match Call again -static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - return POKENAV_MENU_FUNC_MOVE_CURSOR; - - if (JOY_NEW(A_BUTTON)) - { - u32 menuItem = sMenuItems[state->menuType][state->cursorPos]; - if (menuItem != POKENAV_MENUITEM_MATCH_CALL && menuItem != POKENAV_MENUITEM_SWITCH_OFF) - { - PlaySE(SE_FAILURE); - return POKENAV_MENU_FUNC_NONE; - } - else if (menuItem == POKENAV_MENUITEM_MATCH_CALL) - { - state->helpBarIndex = HELPBAR_MC_TRAINER_LIST; - SetMenuIdAndCB(state, POKENAV_MATCH_CALL); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - } - else - { - return -1; - } - } - else if (JOY_NEW(B_BUTTON)) - { - return -1; - } - return POKENAV_MENU_FUNC_NONE; -} - -// Handles input after selecting Ribbons when there are no ribbon winners left -// Selecting it again just reprints the Ribbon description to replace the "No Ribbon winners" message -static u32 HandleCantOpenRibbonsInput(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - { - state->callback = GetMainMenuInputHandler(); - return POKENAV_MENU_FUNC_MOVE_CURSOR; - } - - if (JOY_NEW(A_BUTTON | B_BUTTON)) - { - state->callback = GetMainMenuInputHandler(); - return POKENAV_MENU_FUNC_RESHOW_DESCRIPTION; - } - - return POKENAV_MENU_FUNC_NONE; -} - -static u32 HandleConditionMenuInput(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - return POKENAV_MENU_FUNC_MOVE_CURSOR; - - if (JOY_NEW(A_BUTTON)) - { - switch (sMenuItems[state->menuType][state->cursorPos]) - { - case POKENAV_MENUITEM_CONDITION_SEARCH: - state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; - state->cursorPos = 0; - state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION_SEARCH][0]; - state->callback = HandleConditionSearchMenuInput; - return POKENAV_MENU_FUNC_OPEN_CONDITION_SEARCH; - case POKENAV_MENUITEM_CONDITION_PARTY: - state->helpBarIndex = 0; - SetMenuIdAndCB(state, POKENAV_CONDITION_PARTY); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - case POKENAV_MENUITEM_CONDITION_CANCEL: - PlaySE(SE_SELECT); - ReturnToMainMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_MAIN; - } - } - if (JOY_NEW(B_BUTTON)) - { - if (state->cursorPos != sLastCursorPositions[state->menuType]) - { - state->cursorPos = sLastCursorPositions[state->menuType]; - state->callback = CB2_ReturnToMainMenu; - return POKENAV_MENU_FUNC_MOVE_CURSOR; - } - else - { - PlaySE(SE_SELECT); - ReturnToMainMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_MAIN; - } - } - - return POKENAV_MENU_FUNC_NONE; -} - -static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - return POKENAV_MENU_FUNC_MOVE_CURSOR; - - if (JOY_NEW(A_BUTTON)) - { - u8 menuItem = sMenuItems[state->menuType][state->cursorPos]; - if (menuItem != POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL) - { - SetSelectedConditionSearch(menuItem - POKENAV_MENUITEM_CONDITION_SEARCH_COOL); - SetMenuIdAndCB(state, POKENAV_CONDITION_SEARCH_RESULTS); - state->helpBarIndex = HELPBAR_CONDITION_MON_LIST; - return POKENAV_MENU_FUNC_OPEN_FEATURE; - } - else - { - PlaySE(SE_SELECT); - ReturnToConditionMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; - } - } - if (JOY_NEW(B_BUTTON)) - { - if (state->cursorPos != sLastCursorPositions[state->menuType]) - { - state->cursorPos = sLastCursorPositions[state->menuType]; - state->callback = CB2_ReturnToConditionMenu; - return POKENAV_MENU_FUNC_MOVE_CURSOR; - } - else - { - PlaySE(SE_SELECT); - ReturnToConditionMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; - } - } - return POKENAV_MENU_FUNC_NONE; -} - -static u32 CB2_ReturnToMainMenu(struct Pokenav1Struct *state) -{ - ReturnToMainMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_MAIN; -} - -static u32 CB2_ReturnToConditionMenu(struct Pokenav1Struct *state) -{ - ReturnToConditionMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; -} - -static void SetMenuIdAndCB(struct Pokenav1Struct *state, u32 menuId) -{ - state->menuId = menuId; - state->callback = GetMenuId; -} - -static u32 GetMenuId(struct Pokenav1Struct *state) -{ - return state->menuId; -} - -static void ReturnToMainMenu(struct Pokenav1Struct *state) -{ - state->menuType = GetPokenavMainMenuType(); - state->cursorPos = 1; - state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; - state->callback = HandleMainMenuInput; -} - -static void ReturnToConditionMenu(struct Pokenav1Struct *state) -{ - state->menuType = POKENAV_MENU_TYPE_CONDITION; - state->cursorPos = 1; - state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][1]; - state->callback = HandleConditionMenuInput; -} - -static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state) -{ - if (JOY_NEW(DPAD_UP)) - { - if (--state->cursorPos < 0) - state->cursorPos = sLastCursorPositions[state->menuType]; - - state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; - return TRUE; - } - else if (JOY_NEW(DPAD_DOWN)) - { - state->cursorPos++; - if (state->cursorPos > sLastCursorPositions[state->menuType]) - state->cursorPos = 0; - - state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; - return TRUE; - } - else - { - return FALSE; - } -} - -int GetPokenavMenuType(void) -{ - struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); - return state->menuType; -} - -// Position of cursor relative to number of current menu options -int GetPokenavCursorPos(void) -{ - struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); - return state->cursorPos; -} - -// ID of menu item the cursor is currently on -int GetCurrentMenuItemId(void) -{ - struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); - return state->currMenuItem; -} - -u16 GetHelpBarTextId(void) -{ - struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); - return state->helpBarIndex; -} diff --git a/src/pokenav_menu_handler_2.c b/src/pokenav_menu_handler_gfx.c similarity index 57% rename from src/pokenav_menu_handler_2.c rename to src/pokenav_menu_handler_gfx.c index ff219b71e3..7d78426dcf 100644 --- a/src/pokenav_menu_handler_2.c +++ b/src/pokenav_menu_handler_gfx.c @@ -17,68 +17,86 @@ #include "constants/songs.h" #include "constants/rgb.h" -struct Pokenav2Struct +#define GFXTAG_BLUE_LIGHT 1 +#define GFXTAG_OPTIONS 3 + +#define PALTAG_BLUE_LIGHT 3 +#define PALTAG_OPTIONS_DEFAULT 4 // Includes green for Smart/Region Map and yellow for Tough +#define PALTAG_OPTIONS_BLUE 5 +#define PALTAG_OPTIONS_PINK 6 +#define PALTAG_OPTIONS_BEIGE 7 +#define PALTAG_OPTIONS_RED 8 + +#define PALTAG_OPTIONS_START PALTAG_OPTIONS_DEFAULT + +#define NUM_OPTION_SUBSPRITES 4 + +#define OPTION_DEFAULT_X 140 +#define OPTION_SELECTED_X 130 +#define OPTION_EXIT_X (DISPLAY_WIDTH + 16) + +struct Pokenav_MenuGfx { bool32 (*isTaskActiveCB)(void); u32 loopedTaskId; u16 optionDescWindowId; u8 bg3ScrollTaskId; u8 cursorPos; - bool8 otherIconsInMotion; + u8 numIconsBlending; bool8 pokenavAlreadyOpen; bool32 iconVisible[MAX_POKENAV_MENUITEMS]; - struct Sprite * blueLightSpriteId; - struct Sprite * iconSprites[MAX_POKENAV_MENUITEMS][4]; - u16 bg1TilemapBuffer[0x400]; + struct Sprite * blueLightSprite; + struct Sprite * iconSprites[MAX_POKENAV_MENUITEMS][NUM_OPTION_SUBSPRITES]; + u8 bg1TilemapBuffer[BG_SCREEN_SIZE]; }; -static struct Pokenav2Struct * OpenPokenavMenu(void); +static struct Pokenav_MenuGfx * OpenPokenavMenu(void); static bool32 GetCurrentLoopedTaskActive(void); -static u32 LoopedTask_OpenMenu(s32 state); -static u32 LoopedTask_MoveMenuCursor(s32 state); -static u32 LoopedTask_OpenConditionMenu(s32 state); -static u32 LoopedTask_ReturnToMainMenu(s32 state); -static u32 LoopedTask_OpenConditionSearchMenu(s32 state); -static u32 LoopedTask_ReturnToConditionMenu(s32 state); -static u32 LoopedTask_SelectRibbonsNoWinners(s32 state); -static u32 LoopedTask_ReShowDescription(s32 state); -static u32 LoopedTask_OpenPokenavFeature(s32 state); +static u32 LoopedTask_OpenMenu(s32); +static u32 LoopedTask_MoveMenuCursor(s32); +static u32 LoopedTask_OpenConditionMenu(s32); +static u32 LoopedTask_ReturnToMainMenu(s32); +static u32 LoopedTask_OpenConditionSearchMenu(s32); +static u32 LoopedTask_ReturnToConditionMenu(s32); +static u32 LoopedTask_SelectRibbonsNoWinners(s32); +static u32 LoopedTask_ReShowDescription(s32); +static u32 LoopedTask_OpenPokenavFeature(s32); static void LoadPokenavOptionPalettes(void); static void FreeAndDestroyMainMenuSprites(void); static void CreateMenuOptionSprites(void); static void DestroyMenuOptionSprites(void); -static void sub_81CA0C8(void); -static void DrawOptionLabelGfx(const u16 *const * a0, s32 yPos, s32 a2); -static void SetupCurrentMenuOptionsGfx(void); -static void SetMenuOptionGfxParams_CursorMoved(void); -static void SetMenuOptionGfxParamsInactive(struct Sprite ** sprites, s32 x, s32 a2, s32 a3); -static void SetMenuOptionGfxParamsActive(struct Sprite ** sprites); -static void SetupPokenavMenuOptions(void); +static void DrawCurrentMenuOptionLabels(void); +static void DrawOptionLabelGfx(const u16 *const *, s32, s32); +static void StartOptionAnimations_Enter(void); +static void StartOptionAnimations_CursorMoved(void); +static void StartOptionAnimations_Exit(void); +static void StartOptionSlide(struct Sprite **, s32, s32, s32); +static void StartOptionZoom(struct Sprite **); static bool32 AreMenuOptionSpritesMoving(void); -static void SetMenuOptionGfxInvisibility(struct Sprite ** sprites, bool32 a1); -static void sub_81CA474(struct Sprite * sprite); -static void sub_81CA4AC(struct Sprite * sprite); -static void sub_81CA580(u8 taskId); +static void SetOptionInvisibility(struct Sprite **, bool32); +static void SpriteCB_OptionSlide(struct Sprite *); +static void SpriteCB_OptionZoom(struct Sprite *); +static void Task_OptionBlend(u8); static void CreateMatchCallBlueLightSprite(void); -static void SpriteCB_BlinkingBlueLight(struct Sprite * sprite); -static void DestroyRematchBlueLightSpriteId(void); +static void SpriteCB_BlinkingBlueLight(struct Sprite *); +static void DestroyRematchBlueLightSprite(void); static void AddOptionDescriptionWindow(void); static void PrintCurrentOptionDescription(void); static void PrintNoRibbonWinners(void); static bool32 IsDma3ManagerBusyWithBgCopy_(void); static void CreateMovingBgDotsTask(void); static void DestroyMovingDotsBgTask(void); -static void Task_MoveBgDots(u8 taskId); +static void Task_MoveBgDots(u8); static void CreateBgDotPurplePalTask(void); static void ChangeBgDotsColorToPurple(void); static void CreateBgDotLightBluePalTask(void); static bool32 IsTaskActive_UpdateBgDotsPalette(void); -static void Task_UpdateBgDotsPalette(u8 taskId); +static void Task_UpdateBgDotsPalette(u8); static void SetupPokenavMenuScanlineEffects(void); static void DestroyMenuOptionGlowTask(void); static void ResetBldCnt(void); static void InitMenuOptionGlow(void); -static void Task_CurrentMenuOptionGlow(u8 taskId); +static void Task_CurrentMenuOptionGlow(u8); static void SetMenuOptionGlow(void); static const u16 sPokenavBgDotsPal[] = INCBIN_U16("graphics/pokenav/bg_dots.gbapal"); @@ -118,7 +136,7 @@ static const struct BgTemplate sPokenavMainMenuBgTemplates[] = { } }; -static const LoopedTask sMenuHandlerLoopTaskFuncs[] = +static const LoopedTask sMenuHandlerLoopTaskFuncs[] = { [POKENAV_MENU_FUNC_NONE] = NULL, [POKENAV_MENU_FUNC_MOVE_CURSOR] = LoopedTask_MoveMenuCursor, @@ -136,78 +154,103 @@ static const struct CompressedSpriteSheet sPokenavOptionsSpriteSheets[] = { .data = gPokenavOptions_Gfx, .size = 0x3400, - .tag = 0x0003 + .tag = GFXTAG_OPTIONS }, { .data = sMatchCallBlueLightTiles, .size = 0x0100, - .tag = 0x0001 + .tag = GFXTAG_BLUE_LIGHT } }; static const struct SpritePalette sPokenavOptionsSpritePalettes[] = { - {gPokenavOptions_Pal + 0x00, 4}, - {gPokenavOptions_Pal + 0x10, 5}, - {gPokenavOptions_Pal + 0x20, 6}, - {gPokenavOptions_Pal + 0x30, 7}, - {gPokenavOptions_Pal + 0x40, 8}, - {sMatchCallBlueLightPal, 3}, + {&gPokenavOptions_Pal[0x00], PALTAG_OPTIONS_DEFAULT}, + {&gPokenavOptions_Pal[0x10], PALTAG_OPTIONS_BLUE}, + {&gPokenavOptions_Pal[0x20], PALTAG_OPTIONS_PINK}, + {&gPokenavOptions_Pal[0x30], PALTAG_OPTIONS_BEIGE}, + {&gPokenavOptions_Pal[0x40], PALTAG_OPTIONS_RED}, + {sMatchCallBlueLightPal, PALTAG_BLUE_LIGHT}, {} }; -static const u16 sOptionsLabelGfx_RegionMap[] = {0, 0}; -static const u16 sOptionsLabelGfx_Condition[] = {0x20, 1}; -static const u16 sOptionsLabelGfx_MatchCall[] = {0x40, 4}; -static const u16 sOptionsLabelGfx_Ribbons[] = {0x60, 2}; -static const u16 sOptionsLabelGfx_SwitchOff[] = {0x80, 3}; -static const u16 sOptionsLabelGfx_Party[] = {0xA0, 1}; -static const u16 sOptionsLabelGfx_Search[] = {0xC0, 1}; -static const u16 sOptionsLabelGfx_Cool[] = {0xE0, 4}; -static const u16 sOptionsLabelGfx_Beauty[] = {0x100, 1}; -static const u16 sOptionsLabelGfx_Cute[] = {0x120, 2}; -static const u16 sOptionsLabelGfx_Smart[] = {0x140, 0}; -static const u16 sOptionsLabelGfx_Tough[] = {0x160, 0}; -static const u16 sOptionsLabelGfx_Cancel[] = {0x180, 3}; +// Tile number, palette tag offset +static const u16 sOptionsLabelGfx_RegionMap[] = {0x000, PALTAG_OPTIONS_DEFAULT - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Condition[] = {0x020, PALTAG_OPTIONS_BLUE - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_MatchCall[] = {0x040, PALTAG_OPTIONS_RED - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Ribbons[] = {0x060, PALTAG_OPTIONS_PINK - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_SwitchOff[] = {0x080, PALTAG_OPTIONS_BEIGE - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Party[] = {0x0A0, PALTAG_OPTIONS_BLUE - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Search[] = {0x0C0, PALTAG_OPTIONS_BLUE - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Cool[] = {0x0E0, PALTAG_OPTIONS_RED - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Beauty[] = {0x100, PALTAG_OPTIONS_BLUE - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Cute[] = {0x120, PALTAG_OPTIONS_PINK - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Smart[] = {0x140, PALTAG_OPTIONS_DEFAULT - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Tough[] = {0x160, PALTAG_OPTIONS_DEFAULT - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Cancel[] = {0x180, PALTAG_OPTIONS_BEIGE - PALTAG_OPTIONS_START}; -struct OptionsLabelGfx +struct { u16 yStart; u16 deltaY; - const u16 *tiles[MAX_POKENAV_MENUITEMS]; -}; - -static const struct OptionsLabelGfx sPokenavMenuOptionLabelGfx[POKENAV_MENU_TYPE_COUNT] = + const u16 *gfx[MAX_POKENAV_MENUITEMS]; +} static const sPokenavMenuOptionLabelGfx[POKENAV_MENU_TYPE_COUNT] = { - [POKENAV_MENU_TYPE_DEFAULT] = + [POKENAV_MENU_TYPE_DEFAULT] = { .yStart = 42, .deltaY = 20, - {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_SwitchOff} + .gfx = { + sOptionsLabelGfx_RegionMap, + sOptionsLabelGfx_Condition, + sOptionsLabelGfx_SwitchOff + } }, - [POKENAV_MENU_TYPE_UNLOCK_MC] = + [POKENAV_MENU_TYPE_UNLOCK_MC] = { .yStart = 42, .deltaY = 20, - {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_MatchCall, sOptionsLabelGfx_SwitchOff} + .gfx = { + sOptionsLabelGfx_RegionMap, + sOptionsLabelGfx_Condition, + sOptionsLabelGfx_MatchCall, + sOptionsLabelGfx_SwitchOff + } }, - [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = + [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = { .yStart = 42, .deltaY = 20, - {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_MatchCall, sOptionsLabelGfx_Ribbons, sOptionsLabelGfx_SwitchOff} + .gfx = { + sOptionsLabelGfx_RegionMap, + sOptionsLabelGfx_Condition, + sOptionsLabelGfx_MatchCall, + sOptionsLabelGfx_Ribbons, + sOptionsLabelGfx_SwitchOff + } }, - [POKENAV_MENU_TYPE_CONDITION] = + [POKENAV_MENU_TYPE_CONDITION] = { .yStart = 56, .deltaY = 20, - {sOptionsLabelGfx_Party, sOptionsLabelGfx_Search, sOptionsLabelGfx_Cancel} + .gfx = { + sOptionsLabelGfx_Party, + sOptionsLabelGfx_Search, + sOptionsLabelGfx_Cancel + } }, - [POKENAV_MENU_TYPE_CONDITION_SEARCH] = + [POKENAV_MENU_TYPE_CONDITION_SEARCH] = { .yStart = 40, .deltaY = 16, - {sOptionsLabelGfx_Cool, sOptionsLabelGfx_Beauty, sOptionsLabelGfx_Cute, sOptionsLabelGfx_Smart, sOptionsLabelGfx_Tough, sOptionsLabelGfx_Cancel} + .gfx = { + sOptionsLabelGfx_Cool, + sOptionsLabelGfx_Beauty, + sOptionsLabelGfx_Cute, + sOptionsLabelGfx_Smart, + sOptionsLabelGfx_Tough, + sOptionsLabelGfx_Cancel + } }, }; @@ -216,8 +259,8 @@ static const struct WindowTemplate sOptionDescWindowTemplate = .bg = 1, .tilemapLeft = 3, .tilemapTop = 17, - .width = 0x18, - .height = 0x2, + .width = 24, + .height = 2, .paletteNum = 1, .baseBlock = 8 }; @@ -257,33 +300,33 @@ static const struct OamData sOamData_MenuOption = .paletteNum = 0, }; -static const union AffineAnimCmd gUnknown_0862031C[] = +static const union AffineAnimCmd sAffineAnim_MenuOption_Normal[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gUnknown_0862032C[] = +static const union AffineAnimCmd sAffineAnim_MenuOption_Zoom[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0x12), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sSpriteAnims_MenuOption[] = +static const union AffineAnimCmd *const sAffineAnims_MenuOption[] = { - gUnknown_0862031C, - gUnknown_0862032C + sAffineAnim_MenuOption_Normal, + sAffineAnim_MenuOption_Zoom }; static const struct SpriteTemplate sMenuOptionSpriteTemplate = { - .tileTag = 3, - .paletteTag = 4, + .tileTag = GFXTAG_OPTIONS, + .paletteTag = PALTAG_OPTIONS_START, .oam = &sOamData_MenuOption, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sSpriteAnims_MenuOption, + .affineAnims = sAffineAnims_MenuOption, .callback = SpriteCallbackDummy, }; @@ -303,8 +346,8 @@ static const struct OamData sBlueLightOamData = static const struct SpriteTemplate sMatchCallBlueLightSpriteTemplate = { - .tileTag = 1, - .paletteTag = 3, + .tileTag = GFXTAG_BLUE_LIGHT, + .paletteTag = PALTAG_BLUE_LIGHT, .oam = &sBlueLightOamData, .anims = gDummySpriteAnimTable, .images = NULL, @@ -314,13 +357,13 @@ static const struct SpriteTemplate sMatchCallBlueLightSpriteTemplate = static const struct ScanlineEffectParams sPokenavMainMenuScanlineEffectParams = { - (void *)REG_ADDR_WIN0H, - ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, - 1, - 0 + ®_WIN0H, + ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, + 1, + 0 }; -static bool32 PlayerHasTrainerRematches(void) +static bool32 AreAnyTrainerRematchesNearby(void) { s32 i; @@ -337,90 +380,90 @@ static bool32 PlayerHasTrainerRematches(void) bool32 OpenPokenavMenuInitial(void) { - struct Pokenav2Struct * state = OpenPokenavMenu(); + struct Pokenav_MenuGfx * gfx = OpenPokenavMenu(); - if (state == NULL) + if (gfx == NULL) return FALSE; - - state->pokenavAlreadyOpen = FALSE; + + gfx->pokenavAlreadyOpen = FALSE; return TRUE; } bool32 OpenPokenavMenuNotInitial(void) { - struct Pokenav2Struct * state = OpenPokenavMenu(); + struct Pokenav_MenuGfx * gfx = OpenPokenavMenu(); - if (state == NULL) + if (gfx == NULL) return FALSE; - state->pokenavAlreadyOpen = TRUE; + gfx->pokenavAlreadyOpen = TRUE; return TRUE; } -static struct Pokenav2Struct * OpenPokenavMenu(void) +static struct Pokenav_MenuGfx * OpenPokenavMenu(void) { - struct Pokenav2Struct * state = AllocSubstruct(2, sizeof(struct Pokenav2Struct)); + struct Pokenav_MenuGfx * gfx = AllocSubstruct(POKENAV_SUBSTRUCT_MENU_GFX, sizeof(struct Pokenav_MenuGfx)); - if (state != NULL) + if (gfx != NULL) { - state->otherIconsInMotion = FALSE; - state->loopedTaskId = CreateLoopedTask(LoopedTask_OpenMenu, 1); - state->isTaskActiveCB = GetCurrentLoopedTaskActive; + gfx->numIconsBlending = 0; + gfx->loopedTaskId = CreateLoopedTask(LoopedTask_OpenMenu, 1); + gfx->isTaskActiveCB = GetCurrentLoopedTaskActive; } - return state; + return gfx; } void CreateMenuHandlerLoopedTask(s32 ltIdx) { - struct Pokenav2Struct * state = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - state->loopedTaskId = CreateLoopedTask(sMenuHandlerLoopTaskFuncs[ltIdx], 1); - state->isTaskActiveCB = GetCurrentLoopedTaskActive; + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + gfx->loopedTaskId = CreateLoopedTask(sMenuHandlerLoopTaskFuncs[ltIdx], 1); + gfx->isTaskActiveCB = GetCurrentLoopedTaskActive; } bool32 IsMenuHandlerLoopedTaskActive(void) { - struct Pokenav2Struct * state = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - return state->isTaskActiveCB(); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + return gfx->isTaskActiveCB(); } void FreeMenuHandlerSubstruct2(void) { - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); DestroyMovingDotsBgTask(); - RemoveWindow(unk->optionDescWindowId); + RemoveWindow(gfx->optionDescWindowId); FreeAndDestroyMainMenuSprites(); DestroyMenuOptionGlowTask(); - FreePokenavSubstruct(POKENAV_SUBSTRUCT_MENU_ICONS); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MENU_GFX); } static bool32 GetCurrentLoopedTaskActive(void) { - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); - return IsLoopedTaskActive(unk->loopedTaskId); + return IsLoopedTaskActive(gfx->loopedTaskId); } static u32 LoopedTask_OpenMenu(s32 state) { - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); switch (state) { case 0: InitBgTemplates(sPokenavMainMenuBgTemplates, ARRAY_COUNT(sPokenavMainMenuBgTemplates)); DecompressAndCopyTileDataToVram(1, gPokenavMessageBox_Gfx, 0, 0, 0); - SetBgTilemapBuffer(1, unk->bg1TilemapBuffer); + SetBgTilemapBuffer(1, gfx->bg1TilemapBuffer); CopyToBgTilemapBuffer(1, gPokenavMessageBox_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); CopyPaletteIntoBufferUnfaded(gPokenavMessageBox_Pal, 0x10, 0x20); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); return LT_INC_AND_PAUSE; case 1: if (FreeTempTileDataBuffersIfPossible()) @@ -451,7 +494,7 @@ static u32 LoopedTask_OpenMenu(s32 state) PrintCurrentOptionDescription(); CreateMenuOptionSprites(); CreateMatchCallBlueLightSprite(); - sub_81CA0C8(); + DrawCurrentMenuOptionLabels(); return LT_INC_AND_PAUSE; case 6: if (IsDma3ManagerBusyWithBgCopy_()) @@ -461,12 +504,12 @@ static u32 LoopedTask_OpenMenu(s32 state) ShowBg(1); ShowBg(2); ShowBg(3); - if (unk->pokenavAlreadyOpen) - PokenavFadeScreen(1); + if (gfx->pokenavAlreadyOpen) + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); else { PlaySE(SE_POKENAV_ON); - PokenavFadeScreen(3); + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK_ALL); } switch (GetPokenavMenuType()) { @@ -496,7 +539,7 @@ static u32 LoopedTask_OpenMenu(s32 state) ShowLeftHeaderGfx(0, FALSE, FALSE); break; } - SetupCurrentMenuOptionsGfx(); + StartOptionAnimations_Enter(); SetupPokenavMenuScanlineEffects(); return LT_INC_AND_CONTINUE; case 9: @@ -515,7 +558,7 @@ static u32 LoopedTask_MoveMenuCursor(s32 state) { case 0: SetMenuOptionGlow(); - SetMenuOptionGfxParams_CursorMoved(); + StartOptionAnimations_CursorMoved(); PrintCurrentOptionDescription(); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; @@ -535,8 +578,8 @@ static u32 LoopedTask_OpenConditionMenu(s32 state) { case 0: ResetBldCnt(); - SetupPokenavMenuOptions(); - HideMainOrSubMenuLeftHeader(POKENAV_GFX_MAIN_MENU, 0); + StartOptionAnimations_Exit(); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_MAIN_MENU, FALSE); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; case 1: @@ -544,11 +587,11 @@ static u32 LoopedTask_OpenConditionMenu(s32 state) return LT_PAUSE; if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - sub_81CA0C8(); + DrawCurrentMenuOptionLabels(); LoadLeftHeaderGfxForIndex(1); return LT_INC_AND_PAUSE; case 2: - SetupCurrentMenuOptionsGfx(); + StartOptionAnimations_Enter(); ShowLeftHeaderGfx(1, FALSE, FALSE); CreateBgDotPurplePalTask(); PrintCurrentOptionDescription(); @@ -574,19 +617,19 @@ static u32 LoopedTask_ReturnToMainMenu(s32 state) { case 0: ResetBldCnt(); - SetupPokenavMenuOptions(); - HideMainOrSubMenuLeftHeader(POKENAV_GFX_CONDITION_MENU, 0); + StartOptionAnimations_Exit(); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_CONDITION_MENU, FALSE); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - sub_81CA0C8(); + DrawCurrentMenuOptionLabels(); LoadLeftHeaderGfxForIndex(0); return LT_INC_AND_PAUSE; case 2: - SetupCurrentMenuOptionsGfx(); + StartOptionAnimations_Enter(); ShowLeftHeaderGfx(0, FALSE, FALSE); CreateBgDotLightBluePalTask(); PrintCurrentOptionDescription(); @@ -612,17 +655,17 @@ static u32 LoopedTask_OpenConditionSearchMenu(s32 state) { case 0: ResetBldCnt(); - SetupPokenavMenuOptions(); + StartOptionAnimations_Exit(); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; LoadLeftHeaderGfxForIndex(7); - sub_81CA0C8(); + DrawCurrentMenuOptionLabels(); return LT_INC_AND_PAUSE; case 2: - SetupCurrentMenuOptionsGfx(); + StartOptionAnimations_Enter(); ShowLeftHeaderGfx(7, FALSE, FALSE); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; @@ -645,18 +688,18 @@ static u32 LoopedTask_ReturnToConditionMenu(s32 state) { case 0: ResetBldCnt(); - SetupPokenavMenuOptions(); - HideMainOrSubMenuLeftHeader(POKENAV_GFX_SEARCH_MENU, 0); + StartOptionAnimations_Exit(); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_SEARCH_MENU, FALSE); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - sub_81CA0C8(); + DrawCurrentMenuOptionLabels(); return LT_INC_AND_PAUSE; case 2: - SetupCurrentMenuOptionsGfx(); + StartOptionAnimations_Enter(); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; case 3: @@ -716,7 +759,7 @@ static u32 LoopedTask_OpenPokenavFeature(s32 state) return LT_PAUSE; SlideMenuHeaderUp(); ResetBldCnt(); - SetupPokenavMenuOptions(); + StartOptionAnimations_Exit(); switch (GetPokenavMenuType()) { case POKENAV_MENU_TYPE_CONDITION_SEARCH: @@ -736,7 +779,7 @@ static u32 LoopedTask_OpenPokenavFeature(s32 state) return LT_PAUSE; if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); return LT_INC_AND_PAUSE; case 3: if (IsPaletteFadeActive()) @@ -757,30 +800,29 @@ static void LoadPokenavOptionPalettes(void) static void FreeAndDestroyMainMenuSprites(void) { - FreeSpriteTilesByTag(3); - FreeSpriteTilesByTag(1); - FreeSpritePaletteByTag(4); - FreeSpritePaletteByTag(5); - FreeSpritePaletteByTag(6); - FreeSpritePaletteByTag(7); - FreeSpritePaletteByTag(8); - FreeSpritePaletteByTag(3); + FreeSpriteTilesByTag(GFXTAG_OPTIONS); + FreeSpriteTilesByTag(GFXTAG_BLUE_LIGHT); + FreeSpritePaletteByTag(PALTAG_OPTIONS_DEFAULT); + FreeSpritePaletteByTag(PALTAG_OPTIONS_BLUE); + FreeSpritePaletteByTag(PALTAG_OPTIONS_PINK); + FreeSpritePaletteByTag(PALTAG_OPTIONS_BEIGE); + FreeSpritePaletteByTag(PALTAG_OPTIONS_RED); + FreeSpritePaletteByTag(PALTAG_BLUE_LIGHT); DestroyMenuOptionSprites(); - DestroyRematchBlueLightSpriteId(); + DestroyRematchBlueLightSprite(); } static void CreateMenuOptionSprites(void) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - // Each menu option is 4 subsprites - for (j = 0; j < 4; j++) + for (j = 0; j < NUM_OPTION_SUBSPRITES; j++) { u8 spriteId = CreateSprite(&sMenuOptionSpriteTemplate, 0x8c, 20 * i + 40, 3); - unk->iconSprites[i][j] = &gSprites[spriteId]; + gfx->iconSprites[i][j] = &gSprites[spriteId]; gSprites[spriteId].x2 = 32 * j; } } @@ -789,97 +831,102 @@ static void CreateMenuOptionSprites(void) static void DestroyMenuOptionSprites(void) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - for (j = 0; j < 4; j++) + for (j = 0; j < NUM_OPTION_SUBSPRITES; j++) { - FreeSpriteOamMatrix(unk->iconSprites[i][j]); - DestroySprite(unk->iconSprites[i][j]); + FreeSpriteOamMatrix(gfx->iconSprites[i][j]); + DestroySprite(gfx->iconSprites[i][j]); } } } -static void sub_81CA0C8(void) +static void DrawCurrentMenuOptionLabels(void) { s32 menuType = GetPokenavMenuType(); - DrawOptionLabelGfx(sPokenavMenuOptionLabelGfx[menuType].tiles, sPokenavMenuOptionLabelGfx[menuType].yStart, sPokenavMenuOptionLabelGfx[menuType].deltaY); + DrawOptionLabelGfx(sPokenavMenuOptionLabelGfx[menuType].gfx, sPokenavMenuOptionLabelGfx[menuType].yStart, sPokenavMenuOptionLabelGfx[menuType].deltaY); } -static void DrawOptionLabelGfx(const u16 *const *tiles, s32 yPos, s32 deltaY) +static void DrawOptionLabelGfx(const u16 *const *optionGfx, s32 yPos, s32 deltaY) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - s32 sp04 = GetSpriteTileStartByTag(3); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + s32 baseTile = GetSpriteTileStartByTag(GFXTAG_OPTIONS); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (*tiles != NULL) + if (*optionGfx != NULL) { - for (j = 0; j < 4; j++) + for (j = 0; j < NUM_OPTION_SUBSPRITES; j++) { - unk->iconSprites[i][j]->oam.tileNum = (*tiles)[0] + sp04 + 8 * j; - unk->iconSprites[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*tiles)[1] + 4); - unk->iconSprites[i][j]->invisible = TRUE; - unk->iconSprites[i][j]->y = yPos; - unk->iconSprites[i][j]->x = 0x8c; - unk->iconSprites[i][j]->x2 = 32 * j; + gfx->iconSprites[i][j]->oam.tileNum = (*optionGfx)[0] + baseTile + 8 * j; + gfx->iconSprites[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*optionGfx)[1] + PALTAG_OPTIONS_START); + gfx->iconSprites[i][j]->invisible = TRUE; + gfx->iconSprites[i][j]->y = yPos; + gfx->iconSprites[i][j]->x = OPTION_DEFAULT_X; + gfx->iconSprites[i][j]->x2 = 32 * j; } - unk->iconVisible[i] = TRUE; + gfx->iconVisible[i] = TRUE; } else { - for (j = 0; j < 4; j++) - { - unk->iconSprites[i][j]->invisible = TRUE; - } - unk->iconVisible[i] = FALSE; + for (j = 0; j < NUM_OPTION_SUBSPRITES; j++) + gfx->iconSprites[i][j]->invisible = TRUE; + + gfx->iconVisible[i] = FALSE; } - tiles++; + optionGfx++; yPos += deltaY; } } -static void SetupCurrentMenuOptionsGfx(void) +static void StartOptionAnimations_Enter(void) { s32 i; - struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - s32 r8 = GetPokenavCursorPos(); - s32 r7 = 0; - s32 r2; + struct Pokenav_MenuGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + s32 cursorPos = GetPokenavCursorPos(); + s32 iconCount = 0; + s32 x; for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (icons->iconVisible[i]) + if (gfx->iconVisible[i]) { - if (r7++ == r8) + if (iconCount++ == cursorPos) { - r2 = 0x82; - icons->cursorPos = i; + x = OPTION_SELECTED_X; + gfx->cursorPos = i; } else - r2 = 0x8c; - SetMenuOptionGfxParamsInactive(icons->iconSprites[i], 0x100, r2, 0xC); - SetMenuOptionGfxInvisibility(icons->iconSprites[i], FALSE); + { + // Not selected, set default position + x = OPTION_DEFAULT_X; + } + + // Slide new options in + StartOptionSlide(gfx->iconSprites[i], OPTION_EXIT_X, x, 12); + SetOptionInvisibility(gfx->iconSprites[i], FALSE); } else { - SetMenuOptionGfxInvisibility(icons->iconSprites[i], TRUE); + SetOptionInvisibility(gfx->iconSprites[i], TRUE); } } } -static void SetMenuOptionGfxParams_CursorMoved(void) +static void StartOptionAnimations_CursorMoved(void) { s32 i; - struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); s32 prevPos = GetPokenavCursorPos(); s32 newPos; + // Get the index of the next visible option for (i = 0, newPos = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (icons->iconVisible[i]) + if (gfx->iconVisible[i]) { if (newPos == prevPos) { @@ -890,24 +937,28 @@ static void SetMenuOptionGfxParams_CursorMoved(void) } } - SetMenuOptionGfxParamsInactive(icons->iconSprites[icons->cursorPos], 0x82, 0x8c, 0x4); - SetMenuOptionGfxParamsInactive(icons->iconSprites[newPos], 0x8c, 0x82, 0x4); - icons->cursorPos = newPos; + // The selected option slides out a bit and the previously + // selected option slides back to its original position. + StartOptionSlide(gfx->iconSprites[gfx->cursorPos], OPTION_SELECTED_X, OPTION_DEFAULT_X, 4); + StartOptionSlide(gfx->iconSprites[newPos], OPTION_DEFAULT_X, OPTION_SELECTED_X, 4); + gfx->cursorPos = newPos; } -static void SetupPokenavMenuOptions(void) +static void StartOptionAnimations_Exit(void) { s32 i; - struct Pokenav2Struct *optionIcons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (optionIcons->iconVisible[i]) + if (gfx->iconVisible[i]) { - if (optionIcons->cursorPos != i) - SetMenuOptionGfxParamsInactive(optionIcons->iconSprites[i], 0x8C, 0x100, 0x8); + // Unselected options slide out, + // selected option zooms in + if (gfx->cursorPos != i) + StartOptionSlide(gfx->iconSprites[i], OPTION_DEFAULT_X, OPTION_EXIT_X, 8); else - SetMenuOptionGfxParamsActive(optionIcons->iconSprites[i]); + StartOptionZoom(gfx->iconSprites[i]); } } } @@ -915,120 +966,145 @@ static void SetupPokenavMenuOptions(void) static bool32 AreMenuOptionSpritesMoving(void) { s32 i; - struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (icons->iconSprites[i][0]->callback != SpriteCallbackDummy) + if (gfx->iconSprites[i][0]->callback != SpriteCallbackDummy) return TRUE; } - if (icons->otherIconsInMotion) + if (gfx->numIconsBlending != 0) return TRUE; return FALSE; } -static void SetMenuOptionGfxParamsInactive(struct Sprite ** sprites, s32 x, s32 a2, s32 a3) +#define sSlideTime data[0] +#define sSlideAccel data[1] +#define sSlideSpeed data[2] +#define sSlideEndX data[7] + +static void StartOptionSlide(struct Sprite ** sprites, s32 startX, s32 endX, s32 time) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_OPTION_SUBSPRITES; i++) { - (*sprites)->x = x; - (*sprites)->data[0] = a3; - (*sprites)->data[1] = 16 * (a2 - x) / a3; - (*sprites)->data[2] = 16 * x; - (*sprites)->data[7] = a2; - (*sprites)->callback = sub_81CA474; + (*sprites)->x = startX; + (*sprites)->sSlideTime = time; + (*sprites)->sSlideAccel = 16 * (endX - startX) / time; + (*sprites)->sSlideSpeed = 16 * startX; + (*sprites)->sSlideEndX = endX; + (*sprites)->callback = SpriteCB_OptionSlide; sprites++; } } -static void SetMenuOptionGfxParamsActive(struct Sprite ** sprites) +#define sZoomDelay data[0] +#define sZoomSetAffine data[1] +#define sZoomSpeed data[2] +#define sZoomSubspriteId data[7] + +#define tBlendDelay data[0] +#define tBlendState data[1] +#define tBlendTarget1 data[2] +#define tBlendTarget2 data[3] +#define tBlendCounter data[4] + +// When an option is selected it zooms in and blends away as part +// of the transition to the next screen. +static void StartOptionZoom(struct Sprite ** sprites) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); u8 taskId; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_OPTION_SUBSPRITES; i++) { (*sprites)->oam.objMode = ST_OAM_OBJ_BLEND; (*sprites)->oam.affineMode = ST_OAM_AFFINE_DOUBLE; - (*sprites)->callback = sub_81CA4AC; - (*sprites)->data[0] = 8; - (*sprites)->data[1] = 0; - (*sprites)->data[7] = i; + (*sprites)->callback = SpriteCB_OptionZoom; + (*sprites)->sZoomDelay = 8; + (*sprites)->sZoomSetAffine = FALSE; + (*sprites)->sZoomSubspriteId = i; InitSpriteAffineAnim(sprites[0]); StartSpriteAffineAnim(sprites[0], 0); sprites++; } - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x00)); - taskId = CreateTask(sub_81CA580, 3); - gTasks[taskId].data[0] = 8; - unk->otherIconsInMotion++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + taskId = CreateTask(Task_OptionBlend, 3); + gTasks[taskId].tBlendDelay = 8; + gfx->numIconsBlending++; } -static void SetMenuOptionGfxInvisibility(struct Sprite ** sprites, bool32 invisible) +static void SetOptionInvisibility(struct Sprite ** sprites, bool32 invisible) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_OPTION_SUBSPRITES; i++) { (*sprites)->invisible = invisible; sprites++; } } -static void sub_81CA474(struct Sprite * sprite) +static void SpriteCB_OptionSlide(struct Sprite * sprite) { - sprite->data[0]--; - if (sprite->data[0] != -1) + sprite->sSlideTime--; + if (sprite->sSlideTime != -1) { - sprite->data[2] += sprite->data[1]; - sprite->x = sprite->data[2] >> 4; + sprite->sSlideSpeed += sprite->sSlideAccel; + sprite->x = sprite->sSlideSpeed >> 4; } else { - sprite->x = sprite->data[7]; + sprite->x = sprite->sSlideEndX; sprite->callback = SpriteCallbackDummy; } } -static void sub_81CA4AC(struct Sprite * sprite) +#undef sSlideTime +#undef sSlideAccel +#undef sSlideSpeed +#undef sSlideEndX + +static void SpriteCB_OptionZoom(struct Sprite * sprite) { - s32 r0; - s32 r1; - if (sprite->data[0] == 0) + s32 temp; + s32 x; + if (sprite->sZoomDelay == 0) { - if (sprite->data[1] == 0) + if (!sprite->sZoomSetAffine) { StartSpriteAffineAnim(sprite, 1); - sprite->data[1]++; - sprite->data[2] = 0x100; + sprite->sZoomSetAffine++; + sprite->sZoomSpeed = 0x100; sprite->x += sprite->x2; sprite->x2 = 0; } else { - sprite->data[2] += 16; - r0 = sprite->data[2]; - r1 = r0 >> 3; - r1 = (r1 - 32) / 2; - switch (sprite->data[7]) + sprite->sZoomSpeed += 16; + temp = sprite->sZoomSpeed; + x = temp >> 3; + x = (x - 32) / 2; + + // Each subsprite needs to zoom to a different degree/direction + switch (sprite->sZoomSubspriteId) { case 0: - sprite->x2 = -r1 * 3; + sprite->x2 = -x * 3; break; case 1: - sprite->x2 = -r1; + sprite->x2 = -x; break; case 2: - sprite->x2 = r1; + sprite->x2 = x; break; case 3: - sprite->x2 = r1 * 3; + sprite->x2 = x * 3; break; } if (sprite->affineAnimEnded) @@ -1044,68 +1120,82 @@ static void sub_81CA4AC(struct Sprite * sprite) } else { - sprite->data[0]--; + sprite->sZoomDelay--; } } -static void sub_81CA580(u8 taskId) +#undef sZoomDelay +#undef sZoomSetAffine +#undef sZoomSpeed +#undef sZoomSubspriteId + +static void Task_OptionBlend(u8 taskId) { s16 * data = gTasks[taskId].data; - if (data[0] == 0) + if (tBlendDelay == 0) { - switch (data[1]) + switch (tBlendState) { case 0: - data[2] = 16; - data[3] = 0; + tBlendTarget1 = 16; + tBlendTarget2 = 0; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_NONE | BLDCNT_TGT2_ALL); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x00)); - data[1]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + tBlendState++; break; case 1: - if (data[4] & 1) + if (tBlendCounter & 1) { - data[2] -= 3; - if (data[2] < 0) - data[2] = 0; + tBlendTarget1 -= 3; + if (tBlendTarget1 < 0) + tBlendTarget1 = 0; } else { - data[3] += 3; - if (data[3] > 16) - data[3] = 16; + tBlendTarget2 += 3; + if (tBlendTarget2 > 16) + tBlendTarget2 = 16; } - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(data[2], data[3])); - data[4]++; - if (data[4] == 12) + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(tBlendTarget1, tBlendTarget2)); + tBlendCounter++; + if (tBlendCounter == 12) { - ((struct Pokenav2Struct *)GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS))->otherIconsInMotion--; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x00, 0x10)); + ((struct Pokenav_MenuGfx *)GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX))->numIconsBlending--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); DestroyTask(taskId); } break; } } else - data[0]--; + { + tBlendDelay--; + } } +#undef tBlendDelay +#undef tBlendState +#undef tBlendTarget1 +#undef tBlendTarget2 +#undef tBlendCounter + +// Blue light that blinks if there are available rematches nearby static void CreateMatchCallBlueLightSprite(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); u8 spriteId = CreateSprite(&sMatchCallBlueLightSpriteTemplate, 0x10, 0x60, 4); - ptr->blueLightSpriteId = &gSprites[spriteId]; - if (PlayerHasTrainerRematches()) - ptr->blueLightSpriteId->callback = SpriteCB_BlinkingBlueLight; + gfx->blueLightSprite = &gSprites[spriteId]; + if (AreAnyTrainerRematchesNearby()) + gfx->blueLightSprite->callback = SpriteCB_BlinkingBlueLight; else - ptr->blueLightSpriteId->invisible = TRUE; + gfx->blueLightSprite->invisible = TRUE; } -static void DestroyRematchBlueLightSpriteId(void) +static void DestroyRematchBlueLightSprite(void) { - struct Pokenav2Struct *ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - DestroySprite(ptr->blueLightSpriteId); + struct Pokenav_MenuGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + DestroySprite(gfx->blueLightSprite); } static void SpriteCB_BlinkingBlueLight(struct Sprite * sprite) @@ -1120,33 +1210,33 @@ static void SpriteCB_BlinkingBlueLight(struct Sprite * sprite) static void AddOptionDescriptionWindow(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); - ptr->optionDescWindowId = AddWindow(&sOptionDescWindowTemplate); - PutWindowTilemap(ptr->optionDescWindowId); - FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6)); - CopyWindowToVram(ptr->optionDescWindowId, 3); + gfx->optionDescWindowId = AddWindow(&sOptionDescWindowTemplate); + PutWindowTilemap(gfx->optionDescWindowId); + FillWindowPixelBuffer(gfx->optionDescWindowId, PIXEL_FILL(6)); + CopyWindowToVram(gfx->optionDescWindowId, COPYWIN_FULL); } static void PrintCurrentOptionDescription(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); int menuItem = GetCurrentMenuItemId(); - const u8 * s = sPageDescriptions[menuItem]; - u32 width = GetStringWidth(1, s, -1); - FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6)); - AddTextPrinterParameterized3(ptr->optionDescWindowId, 1, (192 - width) / 2, 1, sOptionDescTextColors, 0, s); + const u8 *desc = sPageDescriptions[menuItem]; + u32 width = GetStringWidth(FONT_NORMAL, desc, -1); + FillWindowPixelBuffer(gfx->optionDescWindowId, PIXEL_FILL(6)); + AddTextPrinterParameterized3(gfx->optionDescWindowId, FONT_NORMAL, (192 - width) / 2, 1, sOptionDescTextColors, 0, desc); } // Printed when Ribbons is selected if no PC/party mons have ribbons // Can occur by obtaining a mon with a ribbon and then releasing all ribbon winners static void PrintNoRibbonWinners(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - const u8 * s = gText_NoRibbonWinners; - u32 width = GetStringWidth(1, s, -1); - FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6)); - AddTextPrinterParameterized3(ptr->optionDescWindowId, 1, (192 - width) / 2, 1, sOptionDescTextColors2, 0, s); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + const u8 *s = gText_NoRibbonWinners; + u32 width = GetStringWidth(FONT_NORMAL, s, -1); + FillWindowPixelBuffer(gfx->optionDescWindowId, PIXEL_FILL(6)); + AddTextPrinterParameterized3(gfx->optionDescWindowId, FONT_NORMAL, (192 - width) / 2, 1, sOptionDescTextColors2, 0, s); } static bool32 IsDma3ManagerBusyWithBgCopy_(void) @@ -1156,19 +1246,19 @@ static bool32 IsDma3ManagerBusyWithBgCopy_(void) static void CreateMovingBgDotsTask(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - ptr->bg3ScrollTaskId = CreateTask(Task_MoveBgDots, 2); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + gfx->bg3ScrollTaskId = CreateTask(Task_MoveBgDots, 2); } static void DestroyMovingDotsBgTask(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - DestroyTask(ptr->bg3ScrollTaskId); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + DestroyTask(gfx->bg3ScrollTaskId); } static void Task_MoveBgDots(u8 taskId) { - ChangeBgX(3, 0x80, 1); + ChangeBgX(3, 0x80, BG_COORD_ADD); } static void CreateBgDotPurplePalTask(void) @@ -1269,8 +1359,8 @@ static void SetMenuOptionGlow(void) int menuType = GetPokenavMenuType(); int cursorPos = GetPokenavCursorPos(); int r4 = sPokenavMenuOptionLabelGfx[menuType].deltaY * cursorPos + sPokenavMenuOptionLabelGfx[menuType].yStart - 8; - CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140); - CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140); + CpuFill16(0, gScanlineEffectRegBuffers[0], DISPLAY_HEIGHT * 2); + CpuFill16(0, gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[0][r4], 0x20); CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[1][r4], 0x20); } diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 3c210ed97a..39c1659a9a 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -17,22 +17,25 @@ #include "constants/songs.h" #include "constants/region_map_sections.h" +#define GFXTAG_CITY_ZOOM 6 +#define PALTAG_CITY_ZOOM 11 + #define NUM_CITY_MAPS 22 -struct Pokenav5Struct +struct Pokenav_RegionMapMenu { - u8 filler0[0xC]; + u8 unused[12]; bool32 zoomDisabled; - u32 (*callback)(struct Pokenav5Struct *); + u32 (*callback)(struct Pokenav_RegionMapMenu *); }; -struct Pokenav5Struct_2 +struct Pokenav_RegionMapGfx { bool32 (*isTaskActiveCB)(void); u32 loopTaskId; u16 infoWindowId; struct Sprite *cityZoomTextSprites[3]; - u8 tilemapBuffer[0x800]; + u8 tilemapBuffer[BG_SCREEN_SIZE]; u8 cityZoomPics[NUM_CITY_MAPS][200]; }; @@ -43,9 +46,9 @@ struct CityMapEntry const u32 *tilemap; }; -static u32 HandleRegionMapInput(struct Pokenav5Struct *); -static u32 HandleRegionMapInputZoomDisabled(struct Pokenav5Struct *); -static u32 GetExitRegionMapMenuId(struct Pokenav5Struct *); +static u32 HandleRegionMapInput(struct Pokenav_RegionMapMenu *); +static u32 HandleRegionMapInputZoomDisabled(struct Pokenav_RegionMapMenu *); +static u32 GetExitRegionMapMenuId(struct Pokenav_RegionMapMenu *); static u32 LoopedTask_OpenRegionMap(s32); static u32 LoopedTask_DecompressCityMaps(s32); static bool32 GetCurrentLoopedTaskActive(void); @@ -53,15 +56,15 @@ static void FreeCityZoomViewGfx(void); static void LoadCityZoomViewGfx(void); static void DecompressCityMaps(void); static bool32 IsDecompressCityMapsActive(void); -static void LoadPokenavRegionMapGfx(struct Pokenav5Struct_2 *); +static void LoadPokenavRegionMapGfx(struct Pokenav_RegionMapGfx *); static bool32 TryFreeTempTileDataBuffers(void); -static void UpdateMapSecInfoWindow(struct Pokenav5Struct_2 *); -static bool32 IsDma3ManagerBusyWithBgCopy_(struct Pokenav5Struct_2 *); +static void UpdateMapSecInfoWindow(struct Pokenav_RegionMapGfx *); +static bool32 IsDma3ManagerBusyWithBgCopy_(struct Pokenav_RegionMapGfx *); static void ChangeBgYForZoom(bool32); static bool32 IsChangeBgYForZoomActive(void); static void CreateCityZoomTextSprites(void); -static void DrawCityMap(struct Pokenav5Struct_2 *, int, int); -static void PrintLandmarkNames(struct Pokenav5Struct_2 *, int, int); +static void DrawCityMap(struct Pokenav_RegionMapGfx *, int, int); +static void PrintLandmarkNames(struct Pokenav_RegionMapGfx *, int, int); static void SetCityZoomTextInvisibility(bool32); static void Task_ChangeBgYForZoom(u8 taskId); static void UpdateCityZoomTextPosition(void); @@ -74,12 +77,12 @@ static u32 LoopedTask_ExitRegionMap(s32); extern const u16 gRegionMapCityZoomTiles_Pal[]; extern const u32 gRegionMapCityZoomText_Gfx[]; -static const u16 sMapSecInfoWindow_Pal[] = INCBIN_U16("graphics/pokenav/region_map_info_window.gbapal"); +static const u16 sMapSecInfoWindow_Pal[] = INCBIN_U16("graphics/pokenav/region_map/info_window.gbapal"); static const u32 sRegionMapCityZoomTiles_Gfx[] = INCBIN_U32("graphics/pokenav/zoom_tiles.4bpp.lz"); #include "data/region_map/city_map_tilemaps.h" -static const struct BgTemplate sRegionMapBgTemplates[3] = +static const struct BgTemplate sRegionMapBgTemplates[3] = { { .bg = 1, @@ -110,7 +113,7 @@ static const struct BgTemplate sRegionMapBgTemplates[3] = }, }; -static const LoopedTask sRegionMapLoopTaskFuncs[] = +static const LoopedTask sRegionMapLoopTaskFuncs[] = { [POKENAV_MAP_FUNC_NONE] = NULL, [POKENAV_MAP_FUNC_CURSOR_MOVED] = LoopedTask_UpdateInfoAfterCursorMove, @@ -119,18 +122,18 @@ static const LoopedTask sRegionMapLoopTaskFuncs[] = [POKENAV_MAP_FUNC_EXIT] = LoopedTask_ExitRegionMap }; -static const struct CompressedSpriteSheet sCityZoomTextSpriteSheet[1] = +static const struct CompressedSpriteSheet sCityZoomTextSpriteSheet[1] = { - {gRegionMapCityZoomText_Gfx, 0x800, 6} + {gRegionMapCityZoomText_Gfx, 0x800, GFXTAG_CITY_ZOOM} }; -static const struct SpritePalette sCityZoomTilesSpritePalette[] = +static const struct SpritePalette sCityZoomTilesSpritePalette[] = { - {gRegionMapCityZoomTiles_Pal, 11}, + {gRegionMapCityZoomTiles_Pal, PALTAG_CITY_ZOOM}, {} }; -static const struct WindowTemplate sMapSecInfoWindowTemplate = +static const struct WindowTemplate sMapSecInfoWindowTemplate = { .bg = 1, .tilemapLeft = 17, @@ -143,7 +146,7 @@ static const struct WindowTemplate sMapSecInfoWindowTemplate = #include "data/region_map/city_map_entries.h" -const struct OamData sCityZoomTextSprite_OamData = +static const struct OamData sCityZoomTextSprite_OamData = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -159,8 +162,8 @@ const struct OamData sCityZoomTextSprite_OamData = static const struct SpriteTemplate sCityZoomTextSpriteTemplate = { - .tileTag = 6, - .paletteTag = 11, + .tileTag = GFXTAG_CITY_ZOOM, + .paletteTag = PALTAG_CITY_ZOOM, .oam = &sCityZoomTextSprite_OamData, .anims = gDummySpriteAnimTable, .images = NULL, @@ -170,7 +173,7 @@ static const struct SpriteTemplate sCityZoomTextSpriteTemplate = u32 PokenavCallback_Init_RegionMap(void) { - struct Pokenav5Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_STATE, sizeof(struct Pokenav5Struct)); + struct Pokenav_RegionMapMenu *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_STATE, sizeof(struct Pokenav_RegionMapMenu)); if (!state) return FALSE; @@ -195,11 +198,11 @@ void FreeRegionMapSubstruct1(void) u32 GetRegionMapCallback(void) { - struct Pokenav5Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); + struct Pokenav_RegionMapMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); return state->callback(state); } -static u32 HandleRegionMapInput(struct Pokenav5Struct *state) +static u32 HandleRegionMapInput(struct Pokenav_RegionMapMenu *state) { switch (DoRegionMapInputCallback()) { @@ -217,7 +220,7 @@ static u32 HandleRegionMapInput(struct Pokenav5Struct *state) return POKENAV_MAP_FUNC_NONE; } -static u32 HandleRegionMapInputZoomDisabled(struct Pokenav5Struct *state) +static u32 HandleRegionMapInputZoomDisabled(struct Pokenav_RegionMapMenu *state) { if (JOY_NEW(B_BUTTON)) { @@ -228,20 +231,20 @@ static u32 HandleRegionMapInputZoomDisabled(struct Pokenav5Struct *state) return POKENAV_MAP_FUNC_NONE; } -static u32 GetExitRegionMapMenuId(struct Pokenav5Struct *state) +static u32 GetExitRegionMapMenuId(struct Pokenav_RegionMapMenu *state) { return POKENAV_MAIN_MENU_CURSOR_ON_MAP; } bool32 GetZoomDisabled(void) { - struct Pokenav5Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); + struct Pokenav_RegionMapMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); return state->zoomDisabled; } bool32 OpenPokenavRegionMap(void) { - struct Pokenav5Struct_2 *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, sizeof(struct Pokenav5Struct_2)); + struct Pokenav_RegionMapGfx *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, sizeof(struct Pokenav_RegionMapGfx)); if (!state) return FALSE; @@ -252,20 +255,20 @@ bool32 OpenPokenavRegionMap(void) void CreateRegionMapLoopedTask(s32 index) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); state->loopTaskId = CreateLoopedTask(sRegionMapLoopTaskFuncs[index], 1); state->isTaskActiveCB = GetCurrentLoopedTaskActive; } bool32 IsRegionMapLoopedTaskActive(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); return state->isTaskActiveCB(); } void FreeRegionMapSubstruct2(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); FreeRegionMapIconResources(); FreeCityZoomViewGfx(); RemoveWindow(state->infoWindowId); @@ -285,7 +288,7 @@ static void VBlankCB_RegionMap(void) static bool32 GetCurrentLoopedTaskActive(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); return IsLoopedTaskActive(state->loopTaskId); } @@ -301,7 +304,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) { int menuGfxId; struct RegionMap *regionMap; - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -346,7 +349,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) return LT_PAUSE; UpdateMapSecInfoWindow(state); - sub_81C7B40(); + FadeToBlackExceptPrimary(); return LT_INC_AND_PAUSE; case 5: if (IsDma3ManagerBusyWithBgCopy_(state)) @@ -363,8 +366,8 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) menuGfxId = POKENAV_GFX_MAP_MENU_ZOOMED_IN; LoadLeftHeaderGfxForIndex(menuGfxId); - ShowLeftHeaderGfx(menuGfxId, 1, 1); - PokenavFadeScreen(1); + ShowLeftHeaderGfx(menuGfxId, TRUE, TRUE); + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); return LT_INC_AND_PAUSE; case 7: if (IsPaletteFadeActive() || AreLeftHeaderSpritesMoving()) @@ -377,7 +380,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) static u32 LoopedTask_UpdateInfoAfterCursorMove(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -420,7 +423,7 @@ static u32 LoopedTask_RegionMapZoomOut(s32 taskState) static u32 LoopedTask_RegionMapZoomIn(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -457,7 +460,7 @@ static u32 LoopedTask_ExitRegionMap(s32 taskState) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) @@ -492,17 +495,17 @@ static void LoadCityZoomViewGfx(void) static void FreeCityZoomViewGfx(void) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); - FreeSpriteTilesByTag(6); - FreeSpritePaletteByTag(11); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + FreeSpriteTilesByTag(GFXTAG_CITY_ZOOM); + FreeSpritePaletteByTag(PALTAG_CITY_ZOOM); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) DestroySprite(state->cityZoomTextSprites[i]); } -static void LoadPokenavRegionMapGfx(struct Pokenav5Struct_2 *state) +static void LoadPokenavRegionMapGfx(struct Pokenav_RegionMapGfx *state) { - sub_8199DF0(1, PIXEL_FILL(0), 0x40, 1); - sub_8199DF0(1, PIXEL_FILL(1), 0x41, 1); + BgDmaFill(1, PIXEL_FILL(0), 0x40, 1); + BgDmaFill(1, PIXEL_FILL(1), 0x41, 1); CpuFill16(0x1040, state->tilemapBuffer, 0x800); SetBgTilemapBuffer(1, state->tilemapBuffer); state->infoWindowId = AddWindow(&sMapSecInfoWindowTemplate); @@ -511,15 +514,15 @@ static void LoadPokenavRegionMapGfx(struct Pokenav5Struct_2 *state) DecompressAndCopyTileDataToVram(1, sRegionMapCityZoomTiles_Gfx, 0, 0, 0); FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1)); PutWindowTilemap(state->infoWindowId); - CopyWindowToVram(state->infoWindowId, 3); + CopyWindowToVram(state->infoWindowId, COPYWIN_FULL); CopyPaletteIntoBufferUnfaded(sMapSecInfoWindow_Pal, 0x10, 0x20); CopyPaletteIntoBufferUnfaded(gRegionMapCityZoomTiles_Pal, 0x30, 0x20); if (!IsRegionMapZoomed()) - ChangeBgY(1, -0x6000, 0); + ChangeBgY(1, -0x6000, BG_COORD_SET); else - ChangeBgY(1, 0, 0); + ChangeBgY(1, 0, BG_COORD_SET); - ChangeBgX(1, 0, 0); + ChangeBgX(1, 0, BG_COORD_SET); } static bool32 TryFreeTempTileDataBuffers(void) @@ -527,7 +530,7 @@ static bool32 TryFreeTempTileDataBuffers(void) return FreeTempTileDataBuffersIfPossible(); } -static void UpdateMapSecInfoWindow(struct Pokenav5Struct_2 *state) +static void UpdateMapSecInfoWindow(struct Pokenav_RegionMapGfx *state) { struct RegionMap *regionMap = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP); switch (regionMap->mapSecType) @@ -535,26 +538,26 @@ static void UpdateMapSecInfoWindow(struct Pokenav5Struct_2 *state) case MAPSECTYPE_CITY_CANFLY: FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1)); PutWindowRectTilemap(state->infoWindowId, 0, 0, 12, 2); - AddTextPrinterParameterized(state->infoWindowId, 7, regionMap->mapSecName, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(state->infoWindowId, FONT_NARROW, regionMap->mapSecName, 0, 1, TEXT_SKIP_DRAW, NULL); DrawCityMap(state, regionMap->mapSecId, regionMap->posWithinMapSec); - CopyWindowToVram(state->infoWindowId, 3); + CopyWindowToVram(state->infoWindowId, COPYWIN_FULL); SetCityZoomTextInvisibility(FALSE); break; case MAPSECTYPE_CITY_CANTFLY: FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1)); PutWindowRectTilemap(state->infoWindowId, 0, 0, 12, 2); - AddTextPrinterParameterized(state->infoWindowId, 7, regionMap->mapSecName, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(state->infoWindowId, FONT_NARROW, regionMap->mapSecName, 0, 1, TEXT_SKIP_DRAW, NULL); FillBgTilemapBufferRect(1, 0x1041, 17, 6, 12, 11, 17); - CopyWindowToVram(state->infoWindowId, 3); + CopyWindowToVram(state->infoWindowId, COPYWIN_FULL); SetCityZoomTextInvisibility(TRUE); break; case MAPSECTYPE_ROUTE: case MAPSECTYPE_BATTLE_FRONTIER: FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1)); PutWindowTilemap(state->infoWindowId); - AddTextPrinterParameterized(state->infoWindowId, 7, regionMap->mapSecName, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(state->infoWindowId, FONT_NARROW, regionMap->mapSecName, 0, 1, TEXT_SKIP_DRAW, NULL); PrintLandmarkNames(state, regionMap->mapSecId, regionMap->posWithinMapSec); - CopyWindowToVram(state->infoWindowId, 3); + CopyWindowToVram(state->infoWindowId, COPYWIN_FULL); SetCityZoomTextInvisibility(TRUE); break; case MAPSECTYPE_NONE: @@ -565,7 +568,7 @@ static void UpdateMapSecInfoWindow(struct Pokenav5Struct_2 *state) } } -static bool32 IsDma3ManagerBusyWithBgCopy_(struct Pokenav5Struct_2 *state) +static bool32 IsDma3ManagerBusyWithBgCopy_(struct Pokenav_RegionMapGfx *state) { return IsDma3ManagerBusyWithBgCopy(); } @@ -587,19 +590,19 @@ static void Task_ChangeBgYForZoom(u8 taskId) { if (gTasks[taskId].tZoomIn) { - if (ChangeBgY(1, 0x480, 1) >= 0) + if (ChangeBgY(1, 0x480, BG_COORD_ADD) >= 0) { - ChangeBgY(1, 0, 0); + ChangeBgY(1, 0, BG_COORD_SET); DestroyTask(taskId); } - + UpdateCityZoomTextPosition(); } else { - if (ChangeBgY(1, 0x480, 2) <= -0x6000) + if (ChangeBgY(1, 0x480, BG_COORD_SUB) <= -0x6000) { - ChangeBgY(1, -0x6000, 0); + ChangeBgY(1, -0x6000, BG_COORD_SET); DestroyTask(taskId); } @@ -621,7 +624,7 @@ static bool32 IsDecompressCityMapsActive(void) static u32 LoopedTask_DecompressCityMaps(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); if (taskState < NUM_CITY_MAPS) { LZ77UnCompWram(sPokenavCityMaps[taskState].tilemap, state->cityZoomPics[taskState]); @@ -631,7 +634,7 @@ static u32 LoopedTask_DecompressCityMaps(s32 taskState) return LT_FINISH; } -static void DrawCityMap(struct Pokenav5Struct_2 *state, int mapSecId, int pos) +static void DrawCityMap(struct Pokenav_RegionMapGfx *state, int mapSecId, int pos) { int i; for (i = 0; i < NUM_CITY_MAPS && (sPokenavCityMaps[i].mapSecId != mapSecId || sPokenavCityMaps[i].index != pos); i++) @@ -644,7 +647,7 @@ static void DrawCityMap(struct Pokenav5Struct_2 *state, int mapSecId, int pos) CopyToBgTilemapBufferRect(1, state->cityZoomPics[i], 18, 6, 10, 10); } -static void PrintLandmarkNames(struct Pokenav5Struct_2 *state, int mapSecId, int pos) +static void PrintLandmarkNames(struct Pokenav_RegionMapGfx *state, int mapSecId, int pos) { int i = 0; while (1) @@ -654,7 +657,7 @@ static void PrintLandmarkNames(struct Pokenav5Struct_2 *state, int mapSecId, int break; StringCopyPadded(gStringVar1, landmarkName, CHAR_SPACE, 12); - AddTextPrinterParameterized(state->infoWindowId, 7, gStringVar1, 0, i * 16 + 17, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(state->infoWindowId, FONT_NARROW, gStringVar1, 0, i * 16 + 17, TEXT_SKIP_DRAW, NULL); i++; } } @@ -664,7 +667,7 @@ static void CreateCityZoomTextSprites(void) int i; int y; struct Sprite *sprite; - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); // When not zoomed in the text is still created but its pushed off screen if (!IsRegionMapZoomed()) @@ -724,7 +727,7 @@ static void SpriteCB_CityZoomText(struct Sprite *sprite) static void UpdateCityZoomTextPosition(void) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); int y = 132 - (GetBgY(1) >> 8); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) state->cityZoomTextSprites[i]->y = y; @@ -733,7 +736,7 @@ static void UpdateCityZoomTextPosition(void) static void SetCityZoomTextInvisibility(bool32 invisible) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) state->cityZoomTextSprites[i]->invisible = invisible; } diff --git a/src/pokenav_ribbons_1.c b/src/pokenav_ribbons_list.c similarity index 57% rename from src/pokenav_ribbons_1.c rename to src/pokenav_ribbons_list.c index 69326ad23b..cf5f99104e 100644 --- a/src/pokenav_ribbons_1.c +++ b/src/pokenav_ribbons_list.c @@ -20,49 +20,49 @@ enum }; -struct PokenavSub9 +struct Pokenav_RibbonsMonList { - u32 (*callback)(struct PokenavSub9*); + u32 (*callback)(struct Pokenav_RibbonsMonList *); u32 loopedTaskId; u16 winid; s32 boxId; s32 monId; u32 changeBgs; u32 saveMonList; - struct PokenavSub18 *monList; + struct PokenavMonList *monList; }; -struct PokenavSub10 +struct Pokenav_RibbonsMonMenu { bool32 (*callback)(void); - u32 ltid; + u32 loopedTaskId; u16 winid; bool32 fromSummary; u8 buff[BG_SCREEN_SIZE]; }; -static u32 HandleRibbonsMonListInput_WaitListInit(struct PokenavSub9 *structPtr); -static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr); -static u32 RibbonsMonMenu_ReturnToMainMenu(struct PokenavSub9 *structPtr); -static u32 RibbonsMonMenu_ToSummaryScreen(struct PokenavSub9 *structPtr); -static u32 BuildPartyMonRibbonList(s32 state); -static u32 InitBoxMonRibbonList(s32 state); -static u32 BuildBoxMonRibbonList(s32 state); -static u32 GetMonRibbonListLoopTaskFunc(s32 state); -static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *item); -static u32 LoopedTask_OpenRibbonsMonList(s32 state); +static u32 HandleRibbonsMonListInput_WaitListInit(struct Pokenav_RibbonsMonList *); +static u32 HandleRibbonsMonListInput(struct Pokenav_RibbonsMonList *); +static u32 RibbonsMonMenu_ReturnToMainMenu(struct Pokenav_RibbonsMonList *); +static u32 RibbonsMonMenu_ToSummaryScreen(struct Pokenav_RibbonsMonList *); +static u32 BuildPartyMonRibbonList(s32); +static u32 InitBoxMonRibbonList(s32); +static u32 BuildBoxMonRibbonList(s32); +static u32 GetMonRibbonListLoopTaskFunc(s32); +static void InsertMonListItem(struct Pokenav_RibbonsMonList *, struct PokenavMonListItem *); +static u32 LoopedTask_OpenRibbonsMonList(s32); static bool32 GetRibbonsMonCurrentLoopedTaskActive(void); -static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state); -static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state); -static u32 LoopedTask_RibbonsListMovePageUp(s32 state); -static u32 LoopedTask_RibbonsListMovePageDown(s32 state); -static u32 LoopedTask_RibbonsListReturnToMainMenu(s32 state); -static u32 LoopedTask_RibbonsListOpenSummary(s32 state); -static void sub_81D02B0(s32 windowId, s32 val1, s32 val2); -static void AddRibbonsMonListWindow(struct PokenavSub10 *ptr); -static void sub_81D0288(struct PokenavSub10 *ptr); -static void InitMonRibbonPokenavListMenuTemplate(void); -static void BufferRibbonMonInfoText(struct PokenavMonList *, u8 *); +static u32 LoopedTask_RibbonsListMoveCursorUp(s32); +static u32 LoopedTask_RibbonsListMoveCursorDown(s32); +static u32 LoopedTask_RibbonsListMovePageUp(s32); +static u32 LoopedTask_RibbonsListMovePageDown(s32); +static u32 LoopedTask_RibbonsListReturnToMainMenu(s32); +static u32 LoopedTask_RibbonsListOpenSummary(s32); +static void DrawListIndexNumber(s32, s32, s32); +static void AddRibbonsMonListWindow(struct Pokenav_RibbonsMonMenu *); +static void UpdateIndexNumberDisplay(struct Pokenav_RibbonsMonMenu *); +static void CreateRibbonMonsList(void); +static void BufferRibbonMonInfoText(struct PokenavListItem *, u8 *); static const LoopedTask sMonRibbonListLoopTaskFuncs[] = { @@ -125,54 +125,54 @@ static const u8 sText_NoGenderSymbol[] = _("{UNK_SPACER}"); bool32 PokenavCallback_Init_MonRibbonList(void) { - struct PokenavSub9 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct PokenavSub9)); - if (structPtr == NULL) + struct Pokenav_RibbonsMonList *list = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct Pokenav_RibbonsMonList)); + if (list == NULL) return FALSE; - structPtr->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); - if (structPtr->monList == NULL) + list->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavMonList)); + if (list->monList == NULL) return FALSE; - structPtr->callback = HandleRibbonsMonListInput_WaitListInit; - structPtr->loopedTaskId = CreateLoopedTask(GetMonRibbonListLoopTaskFunc, 1); - structPtr->changeBgs = 0; + list->callback = HandleRibbonsMonListInput_WaitListInit; + list->loopedTaskId = CreateLoopedTask(GetMonRibbonListLoopTaskFunc, 1); + list->changeBgs = 0; return TRUE; } bool32 PokenavCallback_Init_RibbonsMonListFromSummary(void) { - struct PokenavSub9 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct PokenavSub9)); - if (structPtr == NULL) + struct Pokenav_RibbonsMonList *list = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct Pokenav_RibbonsMonList)); + if (list == NULL) return FALSE; - structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - structPtr->callback = HandleRibbonsMonListInput; - structPtr->changeBgs = 1; + list->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + list->callback = HandleRibbonsMonListInput; + list->changeBgs = 1; return TRUE; } u32 GetRibbonsMonListCallback(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - return structPtr->callback(structPtr); + struct Pokenav_RibbonsMonList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return list->callback(list); } -void FreeRibbonsMonList1(void) +void FreeRibbonsMonList(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - if (!structPtr->saveMonList) + struct Pokenav_RibbonsMonList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + if (!list->saveMonList) FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); } -static u32 HandleRibbonsMonListInput_WaitListInit(struct PokenavSub9 *structPtr) +static u32 HandleRibbonsMonListInput_WaitListInit(struct Pokenav_RibbonsMonList *list) { - if (!IsLoopedTaskActive(structPtr->loopedTaskId)) - structPtr->callback = HandleRibbonsMonListInput; + if (!IsLoopedTaskActive(list->loopedTaskId)) + list->callback = HandleRibbonsMonListInput; return 0; } -static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr) +static u32 HandleRibbonsMonListInput(struct Pokenav_RibbonsMonList *list) { if (JOY_REPEAT(DPAD_UP)) return RIBBONS_MON_LIST_FUNC_MOVE_UP; @@ -184,60 +184,60 @@ static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr) return RIBBONS_MON_LIST_FUNC_PAGE_DOWN; if (JOY_NEW(B_BUTTON)) { - structPtr->saveMonList = 0; - structPtr->callback = RibbonsMonMenu_ReturnToMainMenu; + list->saveMonList = 0; + list->callback = RibbonsMonMenu_ReturnToMainMenu; return RIBBONS_MON_LIST_FUNC_EXIT; } if (JOY_NEW(A_BUTTON)) { - structPtr->monList->currIndex = GetSelectedPokenavListIndex(); - structPtr->saveMonList = 1; - structPtr->callback = RibbonsMonMenu_ToSummaryScreen; + list->monList->currIndex = PokenavList_GetSelectedIndex(); + list->saveMonList = 1; + list->callback = RibbonsMonMenu_ToSummaryScreen; return RIBBONS_MON_LIST_FUNC_OPEN_RIBBONS_SUMMARY; } return RIBBONS_MON_LIST_FUNC_NONE; } -static u32 RibbonsMonMenu_ReturnToMainMenu(struct PokenavSub9 *structPtr) +static u32 RibbonsMonMenu_ReturnToMainMenu(struct Pokenav_RibbonsMonList *list) { return POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS; } -static u32 RibbonsMonMenu_ToSummaryScreen(struct PokenavSub9 *structPtr) +static u32 RibbonsMonMenu_ToSummaryScreen(struct Pokenav_RibbonsMonList *list) { return POKENAV_RIBBONS_SUMMARY_SCREEN; } static u32 UpdateMonListBgs(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - return structPtr->changeBgs; + struct Pokenav_RibbonsMonList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return list->changeBgs; } -static struct PokenavMonList *GetMonRibbonMonListData(void) +static struct PokenavMonListItem *GetMonRibbonMonListData(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - return ptr->monList->monData; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return list->monList->monData; } static s32 GetRibbonsMonListCount(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - return ptr->monList->listCount; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return list->monList->listCount; } //unused static s32 GetMonRibbonSelectedMonData(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - s32 idx = GetSelectedPokenavListIndex(); - return ptr->monList->monData[idx].data; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + s32 idx = PokenavList_GetSelectedIndex(); + return list->monList->monData[idx].data; } static s32 GetRibbonListMenuCurrIndex(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - return ptr->monList->currIndex; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return list->monList->currIndex; } static u32 GetMonRibbonListLoopTaskFunc(s32 state) @@ -248,15 +248,15 @@ static u32 GetMonRibbonListLoopTaskFunc(s32 state) static u32 BuildPartyMonRibbonList(s32 state) { s32 i; - struct PokenavMonList item; - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + struct PokenavMonListItem item; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - ptr->monList->listCount = 0; - ptr->monList->currIndex = 0; + list->monList->listCount = 0; + list->monList->currIndex = 0; item.boxId = TOTAL_BOXES_COUNT; for (i = 0; i < PARTY_SIZE; i++) { - struct Pokemon * pokemon = &gPlayerParty[i]; + struct Pokemon *pokemon = &gPlayerParty[i]; if (!GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES)) return LT_INC_AND_CONTINUE; if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG) && !GetMonData(pokemon, MON_DATA_SANITY_IS_BAD_EGG)) @@ -266,7 +266,7 @@ static u32 BuildPartyMonRibbonList(s32 state) { item.monId = i; item.data = ribbonCount; - sub_81CFCEC(ptr, &item); + InsertMonListItem(list, &item); } } } @@ -276,19 +276,19 @@ static u32 BuildPartyMonRibbonList(s32 state) static u32 InitBoxMonRibbonList(s32 state) { - struct PokenavSub9 *ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - ptr->monId = 0; - ptr->boxId = 0; + struct Pokenav_RibbonsMonList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + list->monId = 0; + list->boxId = 0; return LT_INC_AND_CONTINUE; } static u32 BuildBoxMonRibbonList(s32 state) { - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - s32 boxId = ptr->boxId; - s32 monId = ptr->monId; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + s32 boxId = list->boxId; + s32 monId = list->monId; s32 boxCount = 0; - struct PokenavMonList item; + struct PokenavMonListItem item; while (boxId < TOTAL_BOXES_COUNT) { @@ -302,15 +302,15 @@ static u32 BuildBoxMonRibbonList(s32 state) item.boxId = boxId; item.monId = monId; item.data = ribbonCount; - sub_81CFCEC(ptr, &item); + InsertMonListItem(list, &item); } } boxCount++; monId++; if (boxCount > TOTAL_BOXES_COUNT) { - ptr->boxId = boxId; - ptr->monId = monId; + list->boxId = boxId; + list->monId = monId; return LT_CONTINUE; } } @@ -318,28 +318,28 @@ static u32 BuildBoxMonRibbonList(s32 state) boxId++; } - ptr->changeBgs = 1; + list->changeBgs = 1; return LT_FINISH; } -static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *item) +static void InsertMonListItem(struct Pokenav_RibbonsMonList *list, struct PokenavMonListItem *item) { u32 left = 0; - u32 right = structPtr->monList->listCount; + u32 right = list->monList->listCount; u32 insertionIdx = left + (right - left) / 2; while (right != insertionIdx) { - if (item->data > structPtr->monList->monData[insertionIdx].data) + if (item->data > list->monList->monData[insertionIdx].data) right = insertionIdx; else left = insertionIdx + 1; insertionIdx = left + (right - left) / 2; } - for (right = structPtr->monList->listCount; right > insertionIdx; right--) - structPtr->monList->monData[right] = structPtr->monList->monData[right - 1]; - structPtr->monList->monData[insertionIdx] = *item; - structPtr->monList->listCount++; + for (right = list->monList->listCount; right > insertionIdx; right--) + list->monList->monData[right] = list->monList->monData[right - 1]; + list->monList->monData[insertionIdx] = *item; + list->monList->listCount++; } // Unused @@ -374,62 +374,62 @@ static bool32 PlayerHasRibbonsMon(void) bool32 OpenRibbonsMonList(void) { - struct PokenavSub10 *ptr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct PokenavSub10)); - if (ptr == NULL) + struct Pokenav_RibbonsMonMenu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct Pokenav_RibbonsMonMenu)); + if (menu == NULL) return FALSE; - ptr->ltid = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); - ptr->callback = GetRibbonsMonCurrentLoopedTaskActive; - ptr->fromSummary = FALSE; + menu->loopedTaskId = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); + menu->callback = GetRibbonsMonCurrentLoopedTaskActive; + menu->fromSummary = FALSE; return TRUE; } bool32 OpenRibbonsMonListFromRibbonsSummary(void) { - struct PokenavSub10 *monMenu = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct PokenavSub10)); - if (monMenu == NULL) + struct Pokenav_RibbonsMonMenu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct Pokenav_RibbonsMonMenu)); + if (menu == NULL) return FALSE; - monMenu->ltid = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); - monMenu->callback = GetRibbonsMonCurrentLoopedTaskActive; - monMenu->fromSummary = TRUE; + menu->loopedTaskId = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); + menu->callback = GetRibbonsMonCurrentLoopedTaskActive; + menu->fromSummary = TRUE; return TRUE; } void CreateRibbonsMonListLoopedTask(s32 idx) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); - monMenu->ltid = CreateLoopedTask(sRibbonsMonMenuLoopTaskFuncs[idx], 1); - monMenu->callback = GetRibbonsMonCurrentLoopedTaskActive; + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + menu->loopedTaskId = CreateLoopedTask(sRibbonsMonMenuLoopTaskFuncs[idx], 1); + menu->callback = GetRibbonsMonCurrentLoopedTaskActive; } bool32 IsRibbonsMonListLoopedTaskActive(void) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); - return monMenu->callback(); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + return menu->callback(); } bool32 GetRibbonsMonCurrentLoopedTaskActive(void) { - struct PokenavSub10 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); - return IsLoopedTaskActive(ptr->ltid); + struct Pokenav_RibbonsMonMenu * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + return IsLoopedTaskActive(menu->loopedTaskId); } -void FreeRibbonsMonList2(void) +void FreeRibbonsMonMenu(void) { - struct PokenavSub10 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); - sub_81C8234(); - RemoveWindow(ptr->winid); + struct Pokenav_RibbonsMonMenu * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + DestroyPokenavList(); + RemoveWindow(menu->winid); FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); } static u32 LoopedTask_OpenRibbonsMonList(s32 state) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: InitBgTemplates(sMonRibbonListBgTemplates, ARRAY_COUNT(sMonRibbonListBgTemplates)); DecompressAndCopyTileDataToVram(1, sMonRibbonListFrameTiles, 0, 0, 0); - SetBgTilemapBuffer(1, monMenu->buff); + SetBgTilemapBuffer(1, menu->buff); CopyToBgTilemapBuffer(1, sMonRibbonListFrameTilemap, 0, 0); CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, 0x10, 0x20); CopyBgTilemapBufferToVram(1); @@ -439,20 +439,20 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) return LT_PAUSE; if (!UpdateMonListBgs()) return LT_PAUSE; - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); ShowBg(1); return LT_INC_AND_PAUSE; case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; CopyPaletteIntoBufferUnfaded(sMonRibbonListUi_Pal, 0x20, 0x20); - InitMonRibbonPokenavListMenuTemplate(); + CreateRibbonMonsList(); return LT_INC_AND_PAUSE; case 3: - if (sub_81C8224()) + if (IsCreatePokenavListTaskActive()) return LT_PAUSE; - AddRibbonsMonListWindow(monMenu); + AddRibbonsMonListWindow(menu); return LT_INC_AND_PAUSE; case 4: if (FreeTempTileDataBuffersIfPossible()) @@ -460,11 +460,11 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) ShowBg(2); HideBg(3); PrintHelpBarText(HELPBAR_RIBBONS_MON_LIST); - PokenavFadeScreen(1); - if (!monMenu->fromSummary) + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); + if (!menu->fromSummary) { LoadLeftHeaderGfxForIndex(POKENAV_GFX_RIBBONS_MENU); - ShowLeftHeaderGfx(POKENAV_GFX_RIBBONS_MENU, 1, 0); + ShowLeftHeaderGfx(POKENAV_GFX_RIBBONS_MENU, TRUE, FALSE); } return LT_INC_AND_PAUSE; case 5: @@ -479,11 +479,11 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: - switch (MatchCall_MoveCursorUp()) + switch (PokenavList_MoveCursorUp()) { case 0: return LT_FINISH; @@ -496,11 +496,11 @@ static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(monMenu); + UpdateIndexNumberDisplay(menu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -512,11 +512,11 @@ static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state) static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: - switch (MatchCall_MoveCursorDown()) + switch (PokenavList_MoveCursorDown()) { case 0: return LT_FINISH; @@ -529,11 +529,11 @@ static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(monMenu); + UpdateIndexNumberDisplay(menu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -545,11 +545,11 @@ static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state) static u32 LoopedTask_RibbonsListMovePageUp(s32 state) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: - switch (MatchCall_PageUp()) + switch (PokenavList_PageUp()) { case 0: return LT_FINISH; @@ -562,11 +562,11 @@ static u32 LoopedTask_RibbonsListMovePageUp(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(monMenu); + UpdateIndexNumberDisplay(menu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -578,11 +578,11 @@ static u32 LoopedTask_RibbonsListMovePageUp(s32 state) static u32 LoopedTask_RibbonsListMovePageDown(s32 state) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: - switch (MatchCall_PageDown()) + switch (PokenavList_PageDown()) { case 0: return LT_FINISH; @@ -595,11 +595,11 @@ static u32 LoopedTask_RibbonsListMovePageDown(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(monMenu); + UpdateIndexNumberDisplay(menu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -615,7 +615,7 @@ static u32 LoopedTask_RibbonsListReturnToMainMenu(s32 state) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 1: @@ -635,7 +635,7 @@ static u32 LoopedTask_RibbonsListOpenSummary(s32 state) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) @@ -645,69 +645,69 @@ static u32 LoopedTask_RibbonsListOpenSummary(s32 state) return LT_FINISH; } -static void AddRibbonsMonListWindow(struct PokenavSub10 *monMenu) +static void AddRibbonsMonListWindow(struct Pokenav_RibbonsMonMenu *menu) { - s32 r2; - monMenu->winid = AddWindow(&sRibbonsMonListWindowTemplate); - PutWindowTilemap(monMenu->winid); - r2 = GetRibbonsMonListCount(); - sub_81D02B0(monMenu->winid, 0, r2); - CopyWindowToVram(monMenu->winid, 1); - sub_81D0288(monMenu); + s32 listCount; + menu->winid = AddWindow(&sRibbonsMonListWindowTemplate); + PutWindowTilemap(menu->winid); + listCount = GetRibbonsMonListCount(); + DrawListIndexNumber(menu->winid, 0, listCount); + CopyWindowToVram(menu->winid, COPYWIN_MAP); + UpdateIndexNumberDisplay(menu); } -static void sub_81D0288(struct PokenavSub10 *monMenu) +static void UpdateIndexNumberDisplay(struct Pokenav_RibbonsMonMenu *menu) { - s32 r4 = GetSelectedPokenavListIndex(); - s32 r2 = GetRibbonsMonListCount(); - sub_81D02B0(monMenu->winid, r4 + 1, r2); - CopyWindowToVram(monMenu->winid, 2); + s32 listIndex = PokenavList_GetSelectedIndex(); + s32 listCount = GetRibbonsMonListCount(); + DrawListIndexNumber(menu->winid, listIndex + 1, listCount); + CopyWindowToVram(menu->winid, COPYWIN_GFX); } -static void sub_81D02B0(s32 windowId, s32 val1, s32 val2) +static void DrawListIndexNumber(s32 windowId, s32 index, s32 max) { u8 strbuf[16]; u32 x; - u8 * ptr = strbuf; - ptr = ConvertIntToDecimalStringN(ptr, val1, STR_CONV_MODE_RIGHT_ALIGN, 3); + u8 *ptr = strbuf; + ptr = ConvertIntToDecimalStringN(ptr, index, STR_CONV_MODE_RIGHT_ALIGN, 3); *ptr++ = CHAR_SLASH; - ConvertIntToDecimalStringN(ptr, val2, STR_CONV_MODE_RIGHT_ALIGN, 3); - x = GetStringCenterAlignXOffset(1, strbuf, 56); - AddTextPrinterParameterized(windowId, 1, strbuf, x, 1, 0xFF, NULL); + ConvertIntToDecimalStringN(ptr, max, STR_CONV_MODE_RIGHT_ALIGN, 3); + x = GetStringCenterAlignXOffset(FONT_NORMAL, strbuf, 56); + AddTextPrinterParameterized(windowId, FONT_NORMAL, strbuf, x, 1, TEXT_SKIP_DRAW, NULL); } -static void InitMonRibbonPokenavListMenuTemplate(void) +static void CreateRibbonMonsList(void) { struct PokenavListTemplate template; - template.list.monList = GetMonRibbonMonListData(); + template.list = (struct PokenavListItem *)GetMonRibbonMonListData(); template.count = GetRibbonsMonListCount(); - template.unk8 = 4; - template.unk6 = GetRibbonListMenuCurrIndex(); + template.itemSize = sizeof(struct PokenavListItem); + template.startIndex = GetRibbonListMenuCurrIndex(); template.item_X = 13; template.windowWidth = 17; template.listTop = 1; template.maxShowed = 8; template.fillValue = 2; - template.fontId = 1; - template.listFunc.printMonFunc = BufferRibbonMonInfoText; - template.unk14 = NULL; - sub_81C81D4(&sMonRibbonListBgTemplates[1], &template, 0); + template.fontId = FONT_NORMAL; + template.bufferItemFunc = BufferRibbonMonInfoText; + template.iconDrawFunc = NULL; + CreatePokenavList(&sMonRibbonListBgTemplates[1], &template, 0); } // Buffers the "Nickname gender/level" text for the ribbon mon list -static void BufferRibbonMonInfoText(struct PokenavMonList * item0, u8 * dest) +static void BufferRibbonMonInfoText(struct PokenavListItem * listItem, u8 *dest) { u8 gender; u8 level; - u8 * s; - const u8 * genderStr; - struct PokenavMonList * item = item0; + u8 *s; + const u8 *genderStr; + struct PokenavMonListItem * item = (struct PokenavMonListItem *)listItem; // Mon is in party if (item->boxId == TOTAL_BOXES_COUNT) { - struct Pokemon * mon = &gPlayerParty[item->monId]; + struct Pokemon *mon = &gPlayerParty[item->monId]; gender = GetMonGender(mon); level = GetLevelFromMonExp(mon); GetMonData(mon, MON_DATA_NICKNAME, gStringVar3); @@ -721,8 +721,8 @@ static void BufferRibbonMonInfoText(struct PokenavMonList * item0, u8 * dest) GetBoxMonData(mon, MON_DATA_NICKNAME, gStringVar3); } - StringGetEnd10(gStringVar3); - dest = sub_81DB494(dest, 1, gStringVar3, 60); + StringGet_Nickname(gStringVar3); + dest = GetStringClearToWidth(dest, FONT_NORMAL, gStringVar3, 60); switch (gender) { default: @@ -741,6 +741,6 @@ static void BufferRibbonMonInfoText(struct PokenavMonList * item0, u8 * dest) *s++ = CHAR_EXTRA_SYMBOL; *s++ = CHAR_LV_2; ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3); - dest = sub_81DB494(dest, 1, gStringVar1, 54); + dest = GetStringClearToWidth(dest, FONT_NORMAL, gStringVar1, 54); ConvertIntToDecimalStringN(dest, item->data, STR_CONV_MODE_RIGHT_ALIGN, 2); } diff --git a/src/pokenav_ribbons_2.c b/src/pokenav_ribbons_summary.c similarity index 64% rename from src/pokenav_ribbons_2.c rename to src/pokenav_ribbons_summary.c index f2a295b6b1..3bc7cb236c 100644 --- a/src/pokenav_ribbons_2.c +++ b/src/pokenav_ribbons_summary.c @@ -32,17 +32,17 @@ enum #define PALTAG_RIBBON_ICONS_5 19 #define RIBBONS_PER_ROW 9 -#define GIFT_RIBBON_ROW (1 + (FIRST_GIFT_RIBBON / RIBBONS_PER_ROW)) // Gift ribbons start on a new row after the normal ribbons. +#define GIFT_RIBBON_ROW (1 + (FIRST_GIFT_RIBBON / RIBBONS_PER_ROW)) // Gift ribbons start on a new row after the normal ribbons. #define GIFT_RIBBON_START_POS (RIBBONS_PER_ROW * GIFT_RIBBON_ROW) #define MON_SPRITE_X_ON 40 #define MON_SPRITE_X_OFF -32 #define MON_SPRITE_Y 104 -struct PokenavSub13 +struct Pokenav_RibbonsSummaryList { u8 unused1[8]; - struct PokenavSub18 *monList; + struct PokenavMonList *monList; u16 selectedPos; u16 normalRibbonLastRowStart; u16 numNormalRibbons; @@ -50,10 +50,10 @@ struct PokenavSub13 u32 ribbonIds[FIRST_GIFT_RIBBON]; u32 giftRibbonIds[NUM_GIFT_RIBBONS]; u32 unused2; - u32 (*callback)(struct PokenavSub13 *); + u32 (*callback)(struct Pokenav_RibbonsSummaryList *); }; -struct PokenavSub14 +struct Pokenav_RibbonsSummaryMenu { u32 (*callback)(void); u32 loopedTaskId; @@ -71,31 +71,31 @@ struct PokenavSub14 static u32 sRibbonDraw_Total; static u32 sRibbonDraw_Current; -static void PrintCurrentMonRibbonCount(struct PokenavSub14 *); -static void PrintRibbbonsSummaryMonInfo(struct PokenavSub14 *); -static void PrintRibbonsMonListIndex(struct PokenavSub14 *); -static void ZoomOutSelectedRibbon(struct PokenavSub14 *); -static void UpdateAndZoomInSelectedRibbon(struct PokenavSub14 *); -static void PrintRibbonNameAndDescription(struct PokenavSub14 *); -static void ResetSpritesAndDrawMonFrontPic(struct PokenavSub14 *); -static void AddRibbonListIndexWindow(struct PokenavSub14 *); -static void DestroyRibbonsMonFrontPic(struct PokenavSub14 *); -static void SlideMonSpriteOff(struct PokenavSub14 *); -static void SlideMonSpriteOn(struct PokenavSub14 *); -static void AddRibbonCountWindow(struct PokenavSub14 *); -static void CreateBigRibbonSprite(struct PokenavSub14 *); -static void AddRibbonSummaryMonNameWindow(struct PokenavSub14 *); -static void DrawAllRibbonsSmall(struct PokenavSub14 *); -static bool32 IsRibbonAnimating(struct PokenavSub14 *); -static bool32 IsMonSpriteAnimating(struct PokenavSub14 *); -static void GetMonRibbons(struct PokenavSub13 *); -static u32 HandleExpandedRibbonInput(struct PokenavSub13 *); -static u32 RibbonsSummaryHandleInput(struct PokenavSub13 *); -static u32 ReturnToRibbonsListFromSummary(struct PokenavSub13 *); -static bool32 TrySelectRibbonUp(struct PokenavSub13 *); -static bool32 TrySelectRibbonRight(struct PokenavSub13 *); -static bool32 TrySelectRibbonLeft(struct PokenavSub13 *); -static bool32 TrySelectRibbonDown(struct PokenavSub13 *); +static void PrintCurrentMonRibbonCount(struct Pokenav_RibbonsSummaryMenu *); +static void PrintRibbbonsSummaryMonInfo(struct Pokenav_RibbonsSummaryMenu *); +static void PrintRibbonsMonListIndex(struct Pokenav_RibbonsSummaryMenu *); +static void ZoomOutSelectedRibbon(struct Pokenav_RibbonsSummaryMenu *); +static void UpdateAndZoomInSelectedRibbon(struct Pokenav_RibbonsSummaryMenu *); +static void PrintRibbonNameAndDescription(struct Pokenav_RibbonsSummaryMenu *); +static void ResetSpritesAndDrawMonFrontPic(struct Pokenav_RibbonsSummaryMenu *); +static void AddRibbonListIndexWindow(struct Pokenav_RibbonsSummaryMenu *); +static void DestroyRibbonsMonFrontPic(struct Pokenav_RibbonsSummaryMenu *); +static void SlideMonSpriteOff(struct Pokenav_RibbonsSummaryMenu *); +static void SlideMonSpriteOn(struct Pokenav_RibbonsSummaryMenu *); +static void AddRibbonCountWindow(struct Pokenav_RibbonsSummaryMenu *); +static void CreateBigRibbonSprite(struct Pokenav_RibbonsSummaryMenu *); +static void AddRibbonSummaryMonNameWindow(struct Pokenav_RibbonsSummaryMenu *); +static void DrawAllRibbonsSmall(struct Pokenav_RibbonsSummaryMenu *); +static bool32 IsRibbonAnimating(struct Pokenav_RibbonsSummaryMenu *); +static bool32 IsMonSpriteAnimating(struct Pokenav_RibbonsSummaryMenu *); +static void GetMonRibbons(struct Pokenav_RibbonsSummaryList *); +static u32 HandleExpandedRibbonInput(struct Pokenav_RibbonsSummaryList *); +static u32 RibbonsSummaryHandleInput(struct Pokenav_RibbonsSummaryList *); +static u32 ReturnToRibbonsListFromSummary(struct Pokenav_RibbonsSummaryList *); +static bool32 TrySelectRibbonUp(struct Pokenav_RibbonsSummaryList *); +static bool32 TrySelectRibbonRight(struct Pokenav_RibbonsSummaryList *); +static bool32 TrySelectRibbonLeft(struct Pokenav_RibbonsSummaryList *); +static bool32 TrySelectRibbonDown(struct Pokenav_RibbonsSummaryList *); static bool32 GetCurrentLoopedTaskActive(void); static u32 GetRibbonsSummaryCurrentIndex(void); static u32 GetRibbonsSummaryMonListCount(void); @@ -186,16 +186,16 @@ static const LoopedTask sRibbonsSummaryMenuLoopTaskFuncs[] = bool32 PokenavCallback_Init_RibbonsSummaryMenu(void) { - struct PokenavSub13 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, sizeof(struct PokenavSub13)); - if (structPtr == NULL) + struct Pokenav_RibbonsSummaryList *list = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, sizeof(struct Pokenav_RibbonsSummaryList)); + if (list == NULL) return FALSE; - structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - if (structPtr->monList == NULL) + list->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + if (list->monList == NULL) return FALSE; - GetMonRibbons(structPtr); - structPtr->callback = RibbonsSummaryHandleInput; + GetMonRibbons(list); + list->callback = RibbonsSummaryHandleInput; gKeyRepeatContinueDelay = 3; gKeyRepeatStartDelay = 10; return TRUE; @@ -203,8 +203,8 @@ bool32 PokenavCallback_Init_RibbonsSummaryMenu(void) u32 GetRibbonsSummaryMenuCallback(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - return structPtr->callback(structPtr); + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return list->callback(list); } void FreeRibbonsSummaryScreen1(void) @@ -213,150 +213,150 @@ void FreeRibbonsSummaryScreen1(void) } // Handles input when a specific ribbon is not currently selected -static u32 RibbonsSummaryHandleInput(struct PokenavSub13 *structPtr) +static u32 RibbonsSummaryHandleInput(struct Pokenav_RibbonsSummaryList *list) { // Handle Up/Down movement to select a new Pokémon to show ribbons for - if (JOY_REPEAT(DPAD_UP) && structPtr->monList->currIndex != 0) + if (JOY_REPEAT(DPAD_UP) && list->monList->currIndex != 0) { - structPtr->monList->currIndex--; - structPtr->selectedPos = 0; - GetMonRibbons(structPtr); + list->monList->currIndex--; + list->selectedPos = 0; + GetMonRibbons(list); return RIBBONS_SUMMARY_FUNC_SWITCH_MONS; } - if (JOY_REPEAT(DPAD_DOWN) && structPtr->monList->currIndex < structPtr->monList->listCount - 1) + if (JOY_REPEAT(DPAD_DOWN) && list->monList->currIndex < list->monList->listCount - 1) { - structPtr->monList->currIndex++; - structPtr->selectedPos = 0; - GetMonRibbons(structPtr); + list->monList->currIndex++; + list->selectedPos = 0; + GetMonRibbons(list); return RIBBONS_SUMMARY_FUNC_SWITCH_MONS; } if (JOY_NEW(A_BUTTON)) { // Enter ribbon selection - structPtr->callback = HandleExpandedRibbonInput; + list->callback = HandleExpandedRibbonInput; return RIBBONS_SUMMARY_FUNC_SELECT_RIBBON; } if (JOY_NEW(B_BUTTON)) { // Exit ribbon summary menu - structPtr->callback = ReturnToRibbonsListFromSummary; + list->callback = ReturnToRibbonsListFromSummary; return RIBBONS_SUMMARY_FUNC_EXIT; } return RIBBONS_SUMMARY_FUNC_NONE; } // Handles input when a ribbon is selected -static u32 HandleExpandedRibbonInput(struct PokenavSub13 *structPtr) +static u32 HandleExpandedRibbonInput(struct Pokenav_RibbonsSummaryList *list) { // Handle movement while a ribbon is selected - if (JOY_REPEAT(DPAD_UP) && TrySelectRibbonUp(structPtr)) + if (JOY_REPEAT(DPAD_UP) && TrySelectRibbonUp(list)) return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; - if (JOY_REPEAT(DPAD_DOWN) && TrySelectRibbonDown(structPtr)) + if (JOY_REPEAT(DPAD_DOWN) && TrySelectRibbonDown(list)) return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; - if (JOY_REPEAT(DPAD_LEFT) && TrySelectRibbonLeft(structPtr)) + if (JOY_REPEAT(DPAD_LEFT) && TrySelectRibbonLeft(list)) return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; - if (JOY_REPEAT(DPAD_RIGHT) && TrySelectRibbonRight(structPtr)) + if (JOY_REPEAT(DPAD_RIGHT) && TrySelectRibbonRight(list)) return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; if (JOY_NEW(B_BUTTON)) { // Exit ribbon selection - structPtr->callback = RibbonsSummaryHandleInput; + list->callback = RibbonsSummaryHandleInput; return RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL; } return RIBBONS_SUMMARY_FUNC_NONE; } -static u32 ReturnToRibbonsListFromSummary(struct PokenavSub13 *structPtr) +static u32 ReturnToRibbonsListFromSummary(struct Pokenav_RibbonsSummaryList *list) { return POKENAV_RIBBONS_RETURN_TO_MON_LIST; } -static bool32 TrySelectRibbonUp(struct PokenavSub13 *structPtr) +static bool32 TrySelectRibbonUp(struct Pokenav_RibbonsSummaryList *list) { - if (structPtr->selectedPos < FIRST_GIFT_RIBBON) + if (list->selectedPos < FIRST_GIFT_RIBBON) { // In normal ribbons, try to move up a row - if (structPtr->selectedPos < RIBBONS_PER_ROW) + if (list->selectedPos < RIBBONS_PER_ROW) return FALSE; - structPtr->selectedPos -= RIBBONS_PER_ROW; + list->selectedPos -= RIBBONS_PER_ROW; return TRUE; } - if (structPtr->numNormalRibbons != 0) + if (list->numNormalRibbons != 0) { // In gift ribbons, try to move up into normal ribbons // If there's > 1 row of gift ribbons (not normally possible) // it's impossible to move up between them - u32 ribbonPos = structPtr->selectedPos - GIFT_RIBBON_START_POS; - structPtr->selectedPos = ribbonPos + structPtr->normalRibbonLastRowStart; - if (structPtr->selectedPos >= structPtr->numNormalRibbons) - structPtr->selectedPos = structPtr->numNormalRibbons - 1; + u32 ribbonPos = list->selectedPos - GIFT_RIBBON_START_POS; + list->selectedPos = ribbonPos + list->normalRibbonLastRowStart; + if (list->selectedPos >= list->numNormalRibbons) + list->selectedPos = list->numNormalRibbons - 1; return TRUE; } return FALSE; } -static bool32 TrySelectRibbonDown(struct PokenavSub13 *structPtr) +static bool32 TrySelectRibbonDown(struct Pokenav_RibbonsSummaryList *list) { - if (structPtr->selectedPos >= FIRST_GIFT_RIBBON) + if (list->selectedPos >= FIRST_GIFT_RIBBON) return FALSE; - if (structPtr->selectedPos < structPtr->normalRibbonLastRowStart) + if (list->selectedPos < list->normalRibbonLastRowStart) { // Not in last row of normal ribbons, advance to next row - structPtr->selectedPos += RIBBONS_PER_ROW; - if (structPtr->selectedPos >= structPtr->numNormalRibbons) - structPtr->selectedPos = structPtr->numNormalRibbons - 1; + list->selectedPos += RIBBONS_PER_ROW; + if (list->selectedPos >= list->numNormalRibbons) + list->selectedPos = list->numNormalRibbons - 1; return TRUE; } - if (structPtr->numGiftRibbons != 0) + if (list->numGiftRibbons != 0) { // In/beyond last of row of normal ribbons and gift ribbons present, move down to gift ribbon row - int ribbonPos = structPtr->selectedPos - structPtr->normalRibbonLastRowStart; - if (ribbonPos >= structPtr->numGiftRibbons) - ribbonPos = structPtr->numGiftRibbons - 1; + int ribbonPos = list->selectedPos - list->normalRibbonLastRowStart; + if (ribbonPos >= list->numGiftRibbons) + ribbonPos = list->numGiftRibbons - 1; - structPtr->selectedPos = ribbonPos + GIFT_RIBBON_START_POS; + list->selectedPos = ribbonPos + GIFT_RIBBON_START_POS; return TRUE; } return FALSE; } -static bool32 TrySelectRibbonLeft(struct PokenavSub13 *structPtr) +static bool32 TrySelectRibbonLeft(struct Pokenav_RibbonsSummaryList *list) { - u16 column = structPtr->selectedPos % RIBBONS_PER_ROW; + u16 column = list->selectedPos % RIBBONS_PER_ROW; if (column != 0) { - structPtr->selectedPos--; + list->selectedPos--; return TRUE; } return FALSE; } -static bool32 TrySelectRibbonRight(struct PokenavSub13 *structPtr) +static bool32 TrySelectRibbonRight(struct Pokenav_RibbonsSummaryList *list) { - int column = structPtr->selectedPos % RIBBONS_PER_ROW; + int column = list->selectedPos % RIBBONS_PER_ROW; if (column >= RIBBONS_PER_ROW - 1) return FALSE; - if (structPtr->selectedPos < GIFT_RIBBON_START_POS) + if (list->selectedPos < GIFT_RIBBON_START_POS) { // Move right in normal ribbon row - if (structPtr->selectedPos < structPtr->numNormalRibbons - 1) + if (list->selectedPos < list->numNormalRibbons - 1) { - structPtr->selectedPos++; + list->selectedPos++; return TRUE; } } else { // Move right in gift ribbon row - if (column < structPtr->numGiftRibbons - 1) + if (column < list->numGiftRibbons - 1) { - structPtr->selectedPos++; + list->selectedPos++; return TRUE; } } @@ -365,21 +365,21 @@ static bool32 TrySelectRibbonRight(struct PokenavSub13 *structPtr) static u32 GetRibbonsSummaryCurrentIndex(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - return structPtr->monList->currIndex; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return list->monList->currIndex; } static u32 GetRibbonsSummaryMonListCount(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - return structPtr->monList->listCount; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return list->monList->listCount; } static void GetMonNicknameLevelGender(u8 *nick, u8 *level, u8 *gender) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - struct PokenavSub18 *mons = structPtr->monList; - struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavMonList *mons = list->monList; + struct PokenavMonListItem *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) { @@ -397,14 +397,14 @@ static void GetMonNicknameLevelGender(u8 *nick, u8 *level, u8 *gender) *level = GetLevelFromBoxMonExp(boxMon); GetBoxMonData(boxMon, MON_DATA_NICKNAME, nick); } - StringGetEnd10(nick); + StringGet_Nickname(nick); } static void GetMonSpeciesPersonalityOtId(u16 *species, u32 *personality, u32 *otId) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - struct PokenavSub18 *mons = structPtr->monList; - struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavMonList *mons = list->monList; + struct PokenavMonListItem *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) { @@ -426,9 +426,9 @@ static void GetMonSpeciesPersonalityOtId(u16 *species, u32 *personality, u32 *ot static u32 GetCurrMonRibbonCount(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - struct PokenavSub18 *mons = structPtr->monList; - struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavMonList *mons = list->monList; + struct PokenavMonListItem *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) return GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBON_COUNT); @@ -436,20 +436,20 @@ static u32 GetCurrMonRibbonCount(void) return GetBoxMonDataAt(monInfo->boxId, monInfo->monId, MON_DATA_RIBBON_COUNT); } -static void GetMonRibbons(struct PokenavSub13 *structPtr) +static void GetMonRibbons(struct Pokenav_RibbonsSummaryList *list) { u32 ribbonFlags; s32 i, j; - struct PokenavSub18 *mons = structPtr->monList; - struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; + struct PokenavMonList *mons = list->monList; + struct PokenavMonListItem *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) ribbonFlags = GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBONS); else ribbonFlags = GetBoxMonDataAt(monInfo->boxId, monInfo->monId, MON_DATA_RIBBONS); - structPtr->numNormalRibbons = 0; - structPtr->numGiftRibbons = 0; + list->numNormalRibbons = 0; + list->numGiftRibbons = 0; for (i = 0; i < ARRAY_COUNT(sRibbonData); i++) { // For all non-contest ribbons, numRibbons will be 1 if they have it, 0 if they don't @@ -458,119 +458,119 @@ static void GetMonRibbons(struct PokenavSub13 *structPtr) if (!sRibbonData[i].isGiftRibbon) { for (j = 0; j < numRibbons; j++) - structPtr->ribbonIds[structPtr->numNormalRibbons++] = sRibbonData[i].ribbonId + j; + list->ribbonIds[list->numNormalRibbons++] = sRibbonData[i].ribbonId + j; } else { for (j = 0; j < numRibbons; j++) - structPtr->giftRibbonIds[structPtr->numGiftRibbons++] = sRibbonData[i].ribbonId + j; + list->giftRibbonIds[list->numGiftRibbons++] = sRibbonData[i].ribbonId + j; } ribbonFlags >>= sRibbonData[i].numBits; } - if (structPtr->numNormalRibbons != 0) + if (list->numNormalRibbons != 0) { - structPtr->normalRibbonLastRowStart = ((structPtr->numNormalRibbons - 1) / RIBBONS_PER_ROW) * RIBBONS_PER_ROW; - structPtr->selectedPos = 0; + list->normalRibbonLastRowStart = ((list->numNormalRibbons - 1) / RIBBONS_PER_ROW) * RIBBONS_PER_ROW; + list->selectedPos = 0; } else { // There are no normal ribbons, move cursor to first gift ribbon - structPtr->normalRibbonLastRowStart = 0; - structPtr->selectedPos = GIFT_RIBBON_START_POS; + list->normalRibbonLastRowStart = 0; + list->selectedPos = GIFT_RIBBON_START_POS; } } static u32 *GetNormalRibbonIds(u32 *size) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - *size = structPtr->numNormalRibbons; - return structPtr->ribbonIds; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + *size = list->numNormalRibbons; + return list->ribbonIds; } static u32 *GetGiftRibbonIds(u32 *size) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - *size = structPtr->numGiftRibbons; - return structPtr->giftRibbonIds; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + *size = list->numGiftRibbons; + return list->giftRibbonIds; } static u16 GetSelectedPosition(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - return structPtr->selectedPos; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return list->selectedPos; } static u32 GetRibbonId(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - int ribbonPos = structPtr->selectedPos; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + int ribbonPos = list->selectedPos; if (ribbonPos < FIRST_GIFT_RIBBON) - return structPtr->ribbonIds[ribbonPos]; + return list->ribbonIds[ribbonPos]; else - return structPtr->giftRibbonIds[ribbonPos - GIFT_RIBBON_START_POS]; + return list->giftRibbonIds[ribbonPos - GIFT_RIBBON_START_POS]; } bool32 OpenRibbonsSummaryMenu(void) { - struct PokenavSub14 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, sizeof(struct PokenavSub14)); - if (structPtr == NULL) + struct Pokenav_RibbonsSummaryMenu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, sizeof(struct Pokenav_RibbonsSummaryMenu)); + if (menu == NULL) return FALSE; - structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_OpenRibbonsSummaryMenu, 1); - structPtr->callback = GetCurrentLoopedTaskActive; + menu->loopedTaskId = CreateLoopedTask(LoopedTask_OpenRibbonsSummaryMenu, 1); + menu->callback = GetCurrentLoopedTaskActive; return TRUE; } void CreateRibbonsSummaryLoopedTask(s32 id) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); - structPtr->loopedTaskId = CreateLoopedTask(sRibbonsSummaryMenuLoopTaskFuncs[id], 1); - structPtr->callback = GetCurrentLoopedTaskActive; + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + menu->loopedTaskId = CreateLoopedTask(sRibbonsSummaryMenuLoopTaskFuncs[id], 1); + menu->callback = GetCurrentLoopedTaskActive; } u32 IsRibbonsSummaryLoopedTaskActive(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); - return structPtr->callback(); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + return menu->callback(); } void FreeRibbonsSummaryScreen2(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); - RemoveWindow(structPtr->ribbonCountWindowId); - RemoveWindow(structPtr->nameWindowId); - RemoveWindow(structPtr->listIdxWindowId); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + RemoveWindow(menu->ribbonCountWindowId); + RemoveWindow(menu->nameWindowId); + RemoveWindow(menu->listIdxWindowId); #ifndef BUGFIX - RemoveWindow(structPtr->unusedWindowId); // Removing window, but window id is never set + RemoveWindow(menu->unusedWindowId); // Removing window, but window id is never set #endif - DestroyRibbonsMonFrontPic(structPtr); + DestroyRibbonsMonFrontPic(menu); FreeSpriteTilesByTag(GFXTAG_RIBBON_ICONS_BIG); FreeSpritePaletteByTag(PALTAG_RIBBON_ICONS_1); FreeSpritePaletteByTag(PALTAG_RIBBON_ICONS_2); FreeSpritePaletteByTag(PALTAG_RIBBON_ICONS_3); FreeSpritePaletteByTag(PALTAG_RIBBON_ICONS_4); FreeSpritePaletteByTag(PALTAG_RIBBON_ICONS_5); - FreeSpriteOamMatrix(structPtr->bigRibbonSprite); - DestroySprite(structPtr->bigRibbonSprite); + FreeSpriteOamMatrix(menu->bigRibbonSprite); + DestroySprite(menu->bigRibbonSprite); FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); } static bool32 GetCurrentLoopedTaskActive(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); - return IsLoopedTaskActive(structPtr->loopedTaskId); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + return IsLoopedTaskActive(menu->loopedTaskId); } static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: InitBgTemplates(sBgTemplates, ARRAY_COUNT(sBgTemplates)); DecompressAndCopyTileDataToVram(2, gPokenavRibbonsSummaryBg_Gfx, 0, 0, 0); - SetBgTilemapBuffer(2, structPtr->tilemapBuffers[0]); + SetBgTilemapBuffer(2, menu->tilemapBuffers[0]); CopyToBgTilemapBuffer(2, gPokenavRibbonsSummaryBg_Tilemap, 0, 0); CopyPaletteIntoBufferUnfaded(gPokenavRibbonsSummaryBg_Pal, 0x10, 0x20); CopyBgTilemapBufferToVram(2); @@ -578,9 +578,9 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) case 1: if (!FreeTempTileDataBuffersIfPossible()) { - sub_8199DF0(1, 0, 0, 1); + BgDmaFill(1, 0, 0, 1); DecompressAndCopyTileDataToVram(1, sRibbonIconsSmall_Gfx, 0, 1, 0); - SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]); + SetBgTilemapBuffer(1, menu->tilemapBuffers[1]); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); CopyPaletteIntoBufferUnfaded(sRibbonIcons1_Pal, 0x20, 0xA0); CopyPaletteIntoBufferUnfaded(sMonInfo_Pal, 0xA0, 0x20); @@ -591,21 +591,21 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) case 2: if (!FreeTempTileDataBuffersIfPossible()) { - AddRibbonCountWindow(structPtr); + AddRibbonCountWindow(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 3: if (!FreeTempTileDataBuffersIfPossible()) { - AddRibbonSummaryMonNameWindow(structPtr); + AddRibbonSummaryMonNameWindow(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 4: if (!FreeTempTileDataBuffersIfPossible()) { - AddRibbonListIndexWindow(structPtr); + AddRibbonListIndexWindow(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; @@ -619,26 +619,26 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) case 6: if (!IsDma3ManagerBusyWithBgCopy()) { - ResetSpritesAndDrawMonFrontPic(structPtr); + ResetSpritesAndDrawMonFrontPic(menu); return LT_INC_AND_CONTINUE; } return LT_PAUSE; case 7: - DrawAllRibbonsSmall(structPtr); + DrawAllRibbonsSmall(menu); PrintHelpBarText(HELPBAR_RIBBONS_LIST); return LT_INC_AND_PAUSE; case 8: if (!IsDma3ManagerBusyWithBgCopy()) { - CreateBigRibbonSprite(structPtr); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); + CreateBigRibbonSprite(menu); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); ShowBg(1); ShowBg(2); HideBg(3); - PokenavFadeScreen(1); + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); return LT_INC_AND_PAUSE; } return LT_PAUSE; @@ -655,7 +655,7 @@ static u32 LoopedTask_ExitRibbonsSummaryMenu(s32 state) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) @@ -667,38 +667,38 @@ static u32 LoopedTask_ExitRibbonsSummaryMenu(s32 state) static u32 LoopedTask_SwitchRibbonsSummaryMon(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: PlaySE(SE_SELECT); - SlideMonSpriteOff(structPtr); + SlideMonSpriteOff(menu); return LT_INC_AND_PAUSE; case 1: - if (!IsMonSpriteAnimating(structPtr)) + if (!IsMonSpriteAnimating(menu)) { - PrintRibbbonsSummaryMonInfo(structPtr); + PrintRibbbonsSummaryMonInfo(menu); return LT_INC_AND_CONTINUE; } return LT_PAUSE; case 2: - DrawAllRibbonsSmall(structPtr); + DrawAllRibbonsSmall(menu); return LT_INC_AND_CONTINUE; case 3: - PrintRibbonsMonListIndex(structPtr); + PrintRibbonsMonListIndex(menu); return LT_INC_AND_CONTINUE; case 4: - PrintCurrentMonRibbonCount(structPtr); + PrintCurrentMonRibbonCount(menu); return LT_INC_AND_CONTINUE; case 5: if (!IsDma3ManagerBusyWithBgCopy()) { - SlideMonSpriteOn(structPtr); + SlideMonSpriteOn(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 6: - if (IsMonSpriteAnimating(structPtr)) + if (IsMonSpriteAnimating(menu)) return LT_PAUSE; } return LT_FINISH; @@ -706,17 +706,17 @@ static u32 LoopedTask_SwitchRibbonsSummaryMon(s32 state) static u32 LoopedTask_ExpandSelectedRibbon(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: PlaySE(SE_SELECT); - UpdateAndZoomInSelectedRibbon(structPtr); + UpdateAndZoomInSelectedRibbon(menu); return LT_INC_AND_PAUSE; case 1: - if (!IsRibbonAnimating(structPtr)) + if (!IsRibbonAnimating(menu)) { - PrintRibbonNameAndDescription(structPtr); + PrintRibbonNameAndDescription(menu); PrintHelpBarText(HELPBAR_RIBBONS_CHECK); return LT_INC_AND_PAUSE; } @@ -730,24 +730,24 @@ static u32 LoopedTask_ExpandSelectedRibbon(s32 state) static u32 LoopedTask_MoveRibbonsCursorExpanded(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: PlaySE(SE_SELECT); - ZoomOutSelectedRibbon(structPtr); + ZoomOutSelectedRibbon(menu); return LT_INC_AND_PAUSE; case 1: - if (!IsRibbonAnimating(structPtr)) + if (!IsRibbonAnimating(menu)) { - UpdateAndZoomInSelectedRibbon(structPtr); + UpdateAndZoomInSelectedRibbon(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 2: - if (!IsRibbonAnimating(structPtr)) + if (!IsRibbonAnimating(menu)) { - PrintRibbonNameAndDescription(structPtr); + PrintRibbonNameAndDescription(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; @@ -760,17 +760,17 @@ static u32 LoopedTask_MoveRibbonsCursorExpanded(s32 state) static u32 LoopedTask_ShrinkExpandedRibbon(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: PlaySE(SE_SELECT); - ZoomOutSelectedRibbon(structPtr); + ZoomOutSelectedRibbon(menu); return LT_INC_AND_PAUSE; case 1: - if (!IsRibbonAnimating(structPtr)) + if (!IsRibbonAnimating(menu)) { - PrintCurrentMonRibbonCount(structPtr); + PrintCurrentMonRibbonCount(menu); PrintHelpBarText(HELPBAR_RIBBONS_LIST); return LT_INC_AND_PAUSE; } @@ -793,14 +793,14 @@ static const struct WindowTemplate sRibbonCountWindowTemplate = .baseBlock = 0x14, }; -static void AddRibbonCountWindow(struct PokenavSub14 *structPtr) +static void AddRibbonCountWindow(struct Pokenav_RibbonsSummaryMenu *menu) { - structPtr->ribbonCountWindowId = AddWindow(&sRibbonCountWindowTemplate); - PutWindowTilemap(structPtr->ribbonCountWindowId); - PrintCurrentMonRibbonCount(structPtr); + menu->ribbonCountWindowId = AddWindow(&sRibbonCountWindowTemplate); + PutWindowTilemap(menu->ribbonCountWindowId); + PrintCurrentMonRibbonCount(menu); } -static void PrintCurrentMonRibbonCount(struct PokenavSub14 *structPtr) +static void PrintCurrentMonRibbonCount(struct Pokenav_RibbonsSummaryMenu *menu) { u8 color[] = {TEXT_COLOR_RED, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}; @@ -808,31 +808,31 @@ static void PrintCurrentMonRibbonCount(struct PokenavSub14 *structPtr) DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_RibbonsF700); - FillWindowPixelBuffer(structPtr->ribbonCountWindowId, PIXEL_FILL(4)); - AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, 1, 0, 1, color, -1, gStringVar4); - CopyWindowToVram(structPtr->ribbonCountWindowId, 2); + FillWindowPixelBuffer(menu->ribbonCountWindowId, PIXEL_FILL(4)); + AddTextPrinterParameterized3(menu->ribbonCountWindowId, FONT_NORMAL, 0, 1, color, TEXT_SKIP_DRAW, gStringVar4); + CopyWindowToVram(menu->ribbonCountWindowId, COPYWIN_GFX); } -static void PrintRibbonNameAndDescription(struct PokenavSub14 *structPtr) +static void PrintRibbonNameAndDescription(struct Pokenav_RibbonsSummaryMenu *menu) { s32 i; u32 ribbonId = GetRibbonId(); u8 color[] = {TEXT_COLOR_RED, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}; - FillWindowPixelBuffer(structPtr->ribbonCountWindowId, PIXEL_FILL(4)); + FillWindowPixelBuffer(menu->ribbonCountWindowId, PIXEL_FILL(4)); if (ribbonId < FIRST_GIFT_RIBBON) { // Print normal ribbon name/description for (i = 0; i < 2; i++) - AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, 1, 0, (i * 16) + 1, color, -1, gRibbonDescriptionPointers[ribbonId][i]); + AddTextPrinterParameterized3(menu->ribbonCountWindowId, FONT_NORMAL, 0, (i * 16) + 1, color, TEXT_SKIP_DRAW, gRibbonDescriptionPointers[ribbonId][i]); } else { - // ribbonId here is one of the 'gift' ribbon slots, used to read + // ribbonId here is one of the 'gift' ribbon slots, used to read // its actual value from giftRibbons to determine which specific // gift ribbon it is ribbonId = gSaveBlock1Ptr->giftRibbons[ribbonId - FIRST_GIFT_RIBBON]; - + // If 0, this gift ribbon slot is unoccupied if (ribbonId == 0) return; @@ -840,10 +840,10 @@ static void PrintRibbonNameAndDescription(struct PokenavSub14 *structPtr) // Print gift ribbon name/description ribbonId--; for (i = 0; i < 2; i++) - AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, 1, 0, (i * 16) + 1, color, -1, gGiftRibbonDescriptionPointers[ribbonId][i]); + AddTextPrinterParameterized3(menu->ribbonCountWindowId, FONT_NORMAL, 0, (i * 16) + 1, color, TEXT_SKIP_DRAW, gGiftRibbonDescriptionPointers[ribbonId][i]); } - CopyWindowToVram(structPtr->ribbonCountWindowId, 2); + CopyWindowToVram(menu->ribbonCountWindowId, COPYWIN_GFX); } static const struct WindowTemplate sRibbonSummaryMonNameWindowTemplate = @@ -857,27 +857,27 @@ static const struct WindowTemplate sRibbonSummaryMonNameWindowTemplate = .baseBlock = 0x54, }; -static void AddRibbonSummaryMonNameWindow(struct PokenavSub14 *structPtr) +static void AddRibbonSummaryMonNameWindow(struct Pokenav_RibbonsSummaryMenu *menu) { - structPtr->nameWindowId = AddWindow(&sRibbonSummaryMonNameWindowTemplate); - PutWindowTilemap(structPtr->nameWindowId); - PrintRibbbonsSummaryMonInfo(structPtr); + menu->nameWindowId = AddWindow(&sRibbonSummaryMonNameWindowTemplate); + PutWindowTilemap(menu->nameWindowId); + PrintRibbbonsSummaryMonInfo(menu); } static const u8 sMaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GRAY}{WHITE}{LIGHT_GRAY}"); static const u8 sFemaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GRAY}{WHITE}{LIGHT_GRAY}"); static const u8 sGenderlessIconString[] = _("{UNK_SPACER}"); -static void PrintRibbbonsSummaryMonInfo(struct PokenavSub14 *structPtr) +static void PrintRibbbonsSummaryMonInfo(struct Pokenav_RibbonsSummaryMenu *menu) { const u8 *genderTxt; u8 *txtPtr; u8 level, gender; - u16 windowId = structPtr->nameWindowId; + u16 windowId = menu->nameWindowId; FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); GetMonNicknameLevelGender(gStringVar3, &level, &gender); - AddTextPrinterParameterized(windowId, 1, gStringVar3, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar3, 0, 1, TEXT_SKIP_DRAW, NULL); switch (gender) { case MON_MALE: @@ -896,8 +896,8 @@ static void PrintRibbbonsSummaryMonInfo(struct PokenavSub14 *structPtr) *(txtPtr++) = CHAR_EXTRA_SYMBOL; *(txtPtr++) = CHAR_LV_2; ConvertIntToDecimalStringN(txtPtr, level, STR_CONV_MODE_LEFT_ALIGN, 3); - AddTextPrinterParameterized(windowId, 1, gStringVar1, 60, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(windowId, 2); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar1, 60, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(windowId, COPYWIN_GFX); } static const struct WindowTemplate sRibbonMonListIndexWindowTemplate[] = @@ -914,15 +914,15 @@ static const struct WindowTemplate sRibbonMonListIndexWindowTemplate[] = {}, }; -static void AddRibbonListIndexWindow(struct PokenavSub14 *structPtr) +static void AddRibbonListIndexWindow(struct Pokenav_RibbonsSummaryMenu *menu) { - structPtr->listIdxWindowId = AddWindow(sRibbonMonListIndexWindowTemplate); - FillWindowPixelBuffer(structPtr->listIdxWindowId, PIXEL_FILL(1)); - PutWindowTilemap(structPtr->listIdxWindowId); - PrintRibbonsMonListIndex(structPtr); + menu->listIdxWindowId = AddWindow(sRibbonMonListIndexWindowTemplate); + FillWindowPixelBuffer(menu->listIdxWindowId, PIXEL_FILL(1)); + PutWindowTilemap(menu->listIdxWindowId); + PrintRibbonsMonListIndex(menu); } -static void PrintRibbonsMonListIndex(struct PokenavSub14 *structPtr) +static void PrintRibbonsMonListIndex(struct Pokenav_RibbonsSummaryMenu *menu) { s32 x; u8 *txtPtr; @@ -932,25 +932,25 @@ static void PrintRibbonsMonListIndex(struct PokenavSub14 *structPtr) txtPtr = ConvertIntToDecimalStringN(gStringVar1, id, STR_CONV_MODE_RIGHT_ALIGN, 3); *(txtPtr++) = CHAR_SLASH; ConvertIntToDecimalStringN(txtPtr, count, STR_CONV_MODE_RIGHT_ALIGN, 3); - x = GetStringCenterAlignXOffset(1, gStringVar1, 56); - AddTextPrinterParameterized(structPtr->listIdxWindowId, 1, gStringVar1, x, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(structPtr->listIdxWindowId, 2); + x = GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar1, 56); + AddTextPrinterParameterized(menu->listIdxWindowId, FONT_NORMAL, gStringVar1, x, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(menu->listIdxWindowId, COPYWIN_GFX); } -static void ResetSpritesAndDrawMonFrontPic(struct PokenavSub14 *structPtr) +static void ResetSpritesAndDrawMonFrontPic(struct Pokenav_RibbonsSummaryMenu *menu) { u16 species; u32 personality, otId; GetMonSpeciesPersonalityOtId(&species, &personality, &otId); ResetAllPicSprites(); - structPtr->monSpriteId = DrawRibbonsMonFrontPic(MON_SPRITE_X_ON, MON_SPRITE_Y); + menu->monSpriteId = DrawRibbonsMonFrontPic(MON_SPRITE_X_ON, MON_SPRITE_Y); PokenavFillPalette(15, 0); } -static void DestroyRibbonsMonFrontPic(struct PokenavSub14 *structPtr) +static void DestroyRibbonsMonFrontPic(struct Pokenav_RibbonsSummaryMenu *menu) { - FreeAndDestroyMonPicSprite(structPtr->monSpriteId); + FreeAndDestroyMonPicSprite(menu->monSpriteId); } // x and y arguments are ignored @@ -962,30 +962,30 @@ static u16 DrawRibbonsMonFrontPic(s32 x, s32 y) u32 personality, otId; GetMonSpeciesPersonalityOtId(&species, &personality, &otId); - spriteId = CreateMonPicSprite(species, otId, personality, TRUE, MON_SPRITE_X_ON, MON_SPRITE_Y, 15, 0xFFFF); + spriteId = CreateMonPicSprite(species, otId, personality, TRUE, MON_SPRITE_X_ON, MON_SPRITE_Y, 15, TAG_NONE); gSprites[spriteId].oam.priority = 0; return spriteId; } -static void SlideMonSpriteOff(struct PokenavSub14 *structPtr) +static void SlideMonSpriteOff(struct Pokenav_RibbonsSummaryMenu *menu) { - StartMonSpriteSlide(&gSprites[structPtr->monSpriteId], MON_SPRITE_X_ON, MON_SPRITE_X_OFF, 6); + StartMonSpriteSlide(&gSprites[menu->monSpriteId], MON_SPRITE_X_ON, MON_SPRITE_X_OFF, 6); } -static void SlideMonSpriteOn(struct PokenavSub14 *structPtr) +static void SlideMonSpriteOn(struct Pokenav_RibbonsSummaryMenu *menu) { // Switch to new mon sprite - FreeAndDestroyMonPicSprite(structPtr->monSpriteId); - structPtr->monSpriteId = DrawRibbonsMonFrontPic(MON_SPRITE_X_OFF, MON_SPRITE_Y); + FreeAndDestroyMonPicSprite(menu->monSpriteId); + menu->monSpriteId = DrawRibbonsMonFrontPic(MON_SPRITE_X_OFF, MON_SPRITE_Y); // Slide on - StartMonSpriteSlide(&gSprites[structPtr->monSpriteId], MON_SPRITE_X_OFF, MON_SPRITE_X_ON, 6); + StartMonSpriteSlide(&gSprites[menu->monSpriteId], MON_SPRITE_X_OFF, MON_SPRITE_X_ON, 6); } // Is Pokémon summary sprite still sliding off/on -static bool32 IsMonSpriteAnimating(struct PokenavSub14 *structPtr) +static bool32 IsMonSpriteAnimating(struct Pokenav_RibbonsSummaryMenu *menu) { - return (gSprites[structPtr->monSpriteId].callback != SpriteCallbackDummy); + return (gSprites[menu->monSpriteId].callback != SpriteCallbackDummy); } #define sCurrX data[0] @@ -1030,7 +1030,7 @@ static void SpriteCB_MonSpriteSlide(struct Sprite *sprite) #undef sTime #undef sDestX -static void DrawAllRibbonsSmall(struct PokenavSub14 *structPtr) +static void DrawAllRibbonsSmall(struct Pokenav_RibbonsSummaryMenu *menu) { u32 *ribbonIds; @@ -1154,7 +1154,7 @@ static const struct OamData sOamData_RibbonIconBig = .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -1211,7 +1211,7 @@ static const struct SpriteTemplate sSpriteTemplate_RibbonIconBig = }; // Create dummy sprite to be used for the zoomed in version of the selected ribbon -static void CreateBigRibbonSprite(struct PokenavSub14 *structPtr) +static void CreateBigRibbonSprite(struct Pokenav_RibbonsSummaryMenu *menu) { u8 spriteId; @@ -1219,45 +1219,45 @@ static void CreateBigRibbonSprite(struct PokenavSub14 *structPtr) Pokenav_AllocAndLoadPalettes(sSpritePalettes_RibbonIcons); spriteId = CreateSprite(&sSpriteTemplate_RibbonIconBig, 0, 0, 0); - structPtr->bigRibbonSprite = &gSprites[spriteId]; - structPtr->bigRibbonSprite->invisible = TRUE; + menu->bigRibbonSprite = &gSprites[spriteId]; + menu->bigRibbonSprite->invisible = TRUE; } #define sInvisibleWhenDone data[0] -static void UpdateAndZoomInSelectedRibbon(struct PokenavSub14 *structPtr) +static void UpdateAndZoomInSelectedRibbon(struct Pokenav_RibbonsSummaryMenu *menu) { u32 ribbonId; s32 position = GetSelectedPosition(); s32 x = (position % RIBBONS_PER_ROW) * 16 + 96; s32 y = (position / RIBBONS_PER_ROW) * 16 + 40; - structPtr->bigRibbonSprite->x = x; - structPtr->bigRibbonSprite->y = y; + menu->bigRibbonSprite->x = x; + menu->bigRibbonSprite->y = y; // Set new selected ribbon's gfx data ribbonId = GetRibbonId(); - structPtr->bigRibbonSprite->oam.tileNum = (sRibbonGfxData[ribbonId].tileNumOffset * 16) + GetSpriteTileStartByTag(GFXTAG_RIBBON_ICONS_BIG); - structPtr->bigRibbonSprite->oam.paletteNum = IndexOfSpritePaletteTag(sRibbonGfxData[ribbonId].palNumOffset + PALTAG_RIBBON_ICONS_1); + menu->bigRibbonSprite->oam.tileNum = (sRibbonGfxData[ribbonId].tileNumOffset * 16) + GetSpriteTileStartByTag(GFXTAG_RIBBON_ICONS_BIG); + menu->bigRibbonSprite->oam.paletteNum = IndexOfSpritePaletteTag(sRibbonGfxData[ribbonId].palNumOffset + PALTAG_RIBBON_ICONS_1); // Start zoom in animation - StartSpriteAffineAnim(structPtr->bigRibbonSprite, RIBBONANIM_ZOOM_IN); - structPtr->bigRibbonSprite->invisible = FALSE; - structPtr->bigRibbonSprite->sInvisibleWhenDone = FALSE; - structPtr->bigRibbonSprite->callback = SpriteCB_WaitForRibbonAnimation; + StartSpriteAffineAnim(menu->bigRibbonSprite, RIBBONANIM_ZOOM_IN); + menu->bigRibbonSprite->invisible = FALSE; + menu->bigRibbonSprite->sInvisibleWhenDone = FALSE; + menu->bigRibbonSprite->callback = SpriteCB_WaitForRibbonAnimation; } // Start animation to zoom out of selected ribbon -static void ZoomOutSelectedRibbon(struct PokenavSub14 *structPtr) +static void ZoomOutSelectedRibbon(struct Pokenav_RibbonsSummaryMenu *menu) { - structPtr->bigRibbonSprite->sInvisibleWhenDone = TRUE; - StartSpriteAffineAnim(structPtr->bigRibbonSprite, RIBBONANIM_ZOOM_OUT); - structPtr->bigRibbonSprite->callback = SpriteCB_WaitForRibbonAnimation; + menu->bigRibbonSprite->sInvisibleWhenDone = TRUE; + StartSpriteAffineAnim(menu->bigRibbonSprite, RIBBONANIM_ZOOM_OUT); + menu->bigRibbonSprite->callback = SpriteCB_WaitForRibbonAnimation; } -static bool32 IsRibbonAnimating(struct PokenavSub14 *structPtr) +static bool32 IsRibbonAnimating(struct Pokenav_RibbonsSummaryMenu *menu) { - return (structPtr->bigRibbonSprite->callback != SpriteCallbackDummy); + return (menu->bigRibbonSprite->callback != SpriteCallbackDummy); } static void SpriteCB_WaitForRibbonAnimation(struct Sprite *sprite) diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index 081a402188..8c209f9082 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -64,7 +64,7 @@ int GameClear(void) { IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); FlagSet(FLAG_SYS_RIBBON_GET); - + for (i = 1; i < 6; i++) { if (ribbonCounts[i].count > ribbonCounts[0].count) diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index f2c5a319c4..83298b03df 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -154,7 +154,7 @@ static const struct OamData sOam_64x64 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -171,7 +171,7 @@ static const struct OamData sOam_32x32 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -188,7 +188,7 @@ static const struct OamData sOam_64x32 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -205,7 +205,7 @@ static const struct OamData sOam_32x16 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), .x = 0, @@ -222,7 +222,7 @@ static const struct OamData sOam_16x8 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), .x = 0, @@ -239,7 +239,7 @@ static const struct OamData sOam_16x32 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), .x = 0, @@ -256,7 +256,7 @@ static const struct OamData sOam_16x16 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -273,7 +273,7 @@ static const struct OamData sOam_32x8 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), .x = 0, @@ -490,7 +490,7 @@ static const struct SpriteTemplate sSpriteTemplate_DuoFightPre_KyogreDorsalFin = static const struct ScanlineEffectParams sScanlineParams_DuoFight_Clouds = { - .dmaDest = (vu16 *)REG_ADDR_BG1HOFS, + .dmaDest = ®_BG1HOFS, .dmaControl = SCANLINE_EFFECT_DMACNT_16BIT, .initState = 1 }; @@ -1627,7 +1627,7 @@ static void Task_DuoFightAnim(u8 taskId) StopMapMusic(); } - BlendPalettes(PALETTES_ALL, 0x10, 0); + BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK); BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); SetVBlankCallback(VBlankCB_DuoFight); PlaySE(SE_DOWNPOUR); @@ -1757,8 +1757,8 @@ static void DuoFight_LightningLong(void) static void DuoFight_AnimateRain(void) { - ChangeBgX(2, 0x400, 1); - ChangeBgY(2, 0x800, 2); + ChangeBgX(2, 0x400, BG_COORD_ADD); + ChangeBgY(2, 0x800, BG_COORD_SUB); } // Only used by the full version, which pans up at the end (so scene objects move down) @@ -1772,7 +1772,7 @@ static void DuoFight_PanOffScene(u8 taskId) bgY = GetBgY(1); if (GetBgY(1) == 0 || bgY > 0x8000) - ChangeBgY(1, 0x400, 2); + ChangeBgY(1, 0x400, BG_COORD_SUB); if (tTimer != 16) { @@ -1795,7 +1795,7 @@ static void Task_DuoFightEnd(u8 taskId) if (!gPaletteFade.active) { DestroyTask(tHelperTaskId); - ChangeBgY(1, 0, 0); + ChangeBgY(1, 0, BG_COORD_SET); SetVBlankCallback(NULL); ScanlineEffect_Stop(); ResetSpriteData(); @@ -2284,7 +2284,7 @@ static void Task_RayDescendsAnim(u8 taskId) LoadDescendsSceneGfx(); SetGpuRegBits(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); - BlendPalettes(PALETTES_ALL, 0x10, 0); + BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK); SetVBlankCallback(VBlankCB_RayquazaScene); sRayScene->revealedLightLine = 0; sRayScene->revealedLightTimer = 0; @@ -2392,7 +2392,7 @@ static void SpriteCB_Descends_Rayquaza(struct Sprite *sprite) { s16 *data = sprite->data; s16 frame = sTimer; - + // Updates to Rayquaza's coords occur more frequently // as time goes on (it accelerates as it emerges) if (frame == 0) @@ -2501,7 +2501,7 @@ static void Task_RayChargesAnim(u8 taskId) InitChargesSceneBgs(); LoadChargesSceneGfx(); SetWindowsHideVertBorders(); - BlendPalettes(PALETTES_ALL, 0x10, 0); + BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK); SetVBlankCallback(VBlankCB_RayquazaScene); tState = 0; tTimer = 0; @@ -2579,8 +2579,8 @@ static void Task_RayCharges_ShakeRayquaza(u8 taskId) s16 *data = gTasks[taskId].data; if ((tTimer & 3) == 0) { - ChangeBgX(1, (Random() % 8 - 4) << 8, 0); - ChangeBgY(1, (Random() % 8 - 4) << 8, 0); + ChangeBgX(1, (Random() % 8 - 4) << 8, BG_COORD_SET); + ChangeBgY(1, (Random() % 8 - 4) << 8, BG_COORD_SET); } tTimer++; @@ -2592,16 +2592,16 @@ static void Task_RayCharges_FlyOffscreen(u8 taskId) s16 *data = gTasks[taskId].data; if (tState == 0) { - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); tState++; tOffset = 10; tShakeDir = -1; } else if (tState == 1) { - ChangeBgX(1, tOffset << 8, 2); - ChangeBgY(1, tOffset << 8, 1); + ChangeBgX(1, tOffset << 8, BG_COORD_SUB); + ChangeBgY(1, tOffset << 8, BG_COORD_ADD); tOffset += tShakeDir; if (tOffset == -10) tShakeDir *= -1; @@ -2616,12 +2616,12 @@ static void Task_RayCharges_FlyOffscreen(u8 taskId) static void RayCharges_AnimateBg(void) { // Update yellow orbs - ChangeBgX(2, 0x400, 2); - ChangeBgY(2, 0x400, 1); + ChangeBgX(2, 0x400, BG_COORD_SUB); + ChangeBgY(2, 0x400, BG_COORD_ADD); // Update blue streaks - ChangeBgX(0, 0x800, 2); - ChangeBgY(0, 0x800, 1); + ChangeBgX(0, 0x800, BG_COORD_SUB); + ChangeBgY(0, 0x800, BG_COORD_ADD); } static void Task_RayChargesEnd(u8 taskId) @@ -2697,7 +2697,7 @@ static void Task_RayChasesAwayAnim(u8 taskId) ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(9, 14)); - BlendPalettes(PALETTES_ALL, 0x10, 0); + BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK); SetVBlankCallback(VBlankCB_RayquazaScene); tState = 0; tTimer = 0; @@ -3064,7 +3064,7 @@ static void SpriteCB_ChasesAway_Rayquaza(struct Sprite *sprite) ChasesAway_SetRayquazaAnim(sprite, 3, 48, 16); sprite->x2 = 1; gSprites[sprite->sTailSpriteId].x2 = 1; - PlayCry1(SPECIES_RAYQUAZA, 0); + PlayCry_Normal(SPECIES_RAYQUAZA, 0); CreateTask(Task_ChasesAway_AnimateRing, 0); } else diff --git a/src/record_mixing.c b/src/record_mixing.c index aa6e4eef2a..3a831c8ce1 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -35,16 +35,21 @@ #include "constants/battle_frontier.h" #include "dewford_trend.h" +// Number of bytes of the record transferred at a time +#define BUFFER_CHUNK_SIZE 200 -// Static type declarations +#define NUM_SWAP_COMBOS 3 + +// Used by several tasks in this file +#define tState data[0] struct RecordMixingHallRecords { - struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][2][6]; - struct RankingHall2P hallRecords2P[2][6]; + struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][FRONTIER_LVL_MODE_COUNT][HALL_RECORDS_COUNT * 2]; + struct RankingHall2P hallRecords2P[FRONTIER_LVL_MODE_COUNT][HALL_RECORDS_COUNT * 2]; }; -struct PlayerRecordsRS +struct PlayerRecordRS { struct SecretBase secretBases[SECRET_BASES_COUNT]; TVShow tvShows[TV_SHOWS_COUNT]; @@ -54,10 +59,10 @@ struct PlayerRecordsRS struct RecordMixingDaycareMail daycareMail; struct RSBattleTowerRecord battleTowerRecord; u16 giftItem; - u16 filler11C8[0x32]; + u16 padding[50]; }; -struct PlayerRecordsEmerald +struct PlayerRecordEmerald { /* 0x0000 */ struct SecretBase secretBases[SECRET_BASES_COUNT]; /* 0x0c80 */ TVShow tvShows[TV_SHOWS_COUNT]; @@ -70,73 +75,67 @@ struct PlayerRecordsEmerald /* 0x1214 */ LilycoveLady lilycoveLady; /* 0x1254 */ struct Apprentice apprentices[2]; /* 0x12dc */ struct PlayerHallRecords hallRecords; - /* 0x1434 */ u8 field_1434[0x10]; + /* 0x1434 */ u8 padding[16]; }; // 0x1444 -union PlayerRecords +union PlayerRecord { - struct PlayerRecordsRS ruby; - struct PlayerRecordsEmerald emerald; + struct PlayerRecordRS ruby; + struct PlayerRecordEmerald emerald; }; -// Static RAM declarations - -static bool8 gUnknown_03001130; +static bool8 sReadyToReceive; static struct SecretBase *sSecretBasesSave; static TVShow *sTvShowsSave; static PokeNews *sPokeNewsSave; static OldMan *sOldManSave; static struct DewfordTrend *sDewfordTrendsSave; -static struct RecordMixingDaycareMail *sDaycareMailSave; +static struct RecordMixingDaycareMail *sRecordMixMailSave; static void *sBattleTowerSave; static LilycoveLady *sLilycoveLadySave; static void *sApprenticesSave; static void *sBattleTowerSave_Duplicate; static u32 sRecordStructSize; -static u8 gUnknown_03001160; -static struct PlayerHallRecords *gUnknown_03001168[3]; +static u8 sDaycareMailRandSum; +static struct PlayerHallRecords *sPartnerHallRecords[HALL_RECORDS_COUNT]; -static EWRAM_DATA struct RecordMixingDaycareMail sDaycareMail = {0}; -static EWRAM_DATA union PlayerRecords *sReceivedRecords = NULL; -static EWRAM_DATA union PlayerRecords *sSentRecord = NULL; +static EWRAM_DATA struct RecordMixingDaycareMail sRecordMixMail = {0}; +static EWRAM_DATA union PlayerRecord *sReceivedRecords = NULL; +static EWRAM_DATA union PlayerRecord *sSentRecord = NULL; -// Static ROM declarations - -static void Task_RecordMixing_Main(u8 taskId); -static void Task_MixingRecordsRecv(u8 taskId); -static void Task_SendPacket(u8 taskId); -static void Task_CopyReceiveBuffer(u8 taskId); -static void Task_SendPacket_SwitchToReceive(u8 taskId); -static void *LoadPtrFromTaskData(const u16 *asShort); -static void StorePtrInTaskData(void *records, u16 *a1); +static void Task_RecordMixing_Main(u8); +static void Task_MixingRecordsRecv(u8); +static void Task_SendPacket(u8); +static void Task_CopyReceiveBuffer(u8); +static void Task_SendPacket_SwitchToReceive(u8); +static void *LoadPtrFromTaskData(const u16 *); +static void StorePtrInTaskData(void *, u16 *); static u8 GetMultiplayerId_(void); static void *GetPlayerRecvBuffer(u8); static void ReceiveOldManData(OldMan *, size_t, u8); -static void ReceiveBattleTowerData(void *battleTowerRecord, size_t, u8); +static void ReceiveBattleTowerData(void *, size_t, u8); static void ReceiveLilycoveLadyData(LilycoveLady *, size_t, u8); -static void sub_80E7B2C(const u8 *); +static void CalculateDaycareMailRandSum(const u8 *); static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *, size_t, u8, TVShow *); -static void ReceiveGiftItem(u16 *item, u8 which); -static void Task_DoRecordMixing(u8 taskId); -static void GetSavedApprentices(struct Apprentice *dst, struct Apprentice *src); -static void ReceiveApprenticeData(struct Apprentice *mixApprentice, size_t recordSize, u32 multiplayerId); -static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t arg1, u32 arg2); -static void GetRecordMixingDaycareMail(struct RecordMixingDaycareMail *dst); -static void SanitizeDaycareMailForRuby(struct RecordMixingDaycareMail *src); -static void SanitizeEmeraldBattleTowerRecord(struct EmeraldBattleTowerRecord *arg0); -static void SanitizeRubyBattleTowerRecord(struct RSBattleTowerRecord *src); +static void ReceiveGiftItem(u16 *, u8 ); +static void Task_DoRecordMixing(u8); +static void GetSavedApprentices(struct Apprentice *, struct Apprentice *); +static void ReceiveApprenticeData(struct Apprentice *, size_t, u32); +static void ReceiveRankingHallRecords(struct PlayerHallRecords *, size_t, u32); +static void GetRecordMixingDaycareMail(struct RecordMixingDaycareMail *); +static void SanitizeDaycareMailForRuby(struct RecordMixingDaycareMail *); +static void SanitizeEmeraldBattleTowerRecord(struct EmeraldBattleTowerRecord *); +static void SanitizeRubyBattleTowerRecord(struct RSBattleTowerRecord *); -// .rodata +static const u8 sPlayerIdxOrders_2Player[] = {1, 0}; -static const u8 gUnknown_0858CF8C[] = {1, 0}; - -static const u8 gUnknown_0858CF8E[][3] = +static const u8 sPlayerIdxOrders_3Player[][3] = { {1, 2, 0}, {2, 0, 1}, }; -static const u8 gUnknown_0858CF94[][4] = +static const u8 sPlayerIdxOrders_4Player[][4] = { {1, 0, 3, 2}, {3, 0, 1, 2}, @@ -149,24 +148,21 @@ static const u8 gUnknown_0858CF94[][4] = {3, 2, 1, 0}, }; -static const u8 gUnknown_0858CFB8[3][2] = +// When 3 players can swap mail 2 players are randomly selected and the 3rd is left out +static const u8 sDaycareMailSwapIds_3Player[NUM_SWAP_COMBOS][2] = { {0, 1}, {1, 2}, {2, 0}, }; -static const u8 gUnknown_0858CFBE[3][4] = +static const u8 sDaycareMailSwapIds_4Player[NUM_SWAP_COMBOS][4] = { - {0, 1, 2, 3}, - {0, 2, 1, 3}, - {0, 3, 2, 1}, + {0, 1, 2, 3}, // 0 swaps with 1, 2 swaps with 3 + {0, 2, 1, 3}, + {0, 3, 2, 1}, }; -// .text - -#define BUFFER_CHUNK_SIZE 200 - void RecordMixingPlayerSpotTriggered(void) { CreateTask_EnterCableClubSeat(Task_RecordMixing_Main); @@ -180,14 +176,14 @@ static void SetSrcLookupPointers(void) sPokeNewsSave = gSaveBlock1Ptr->pokeNews; sOldManSave = &gSaveBlock1Ptr->oldMan; sDewfordTrendsSave = gSaveBlock1Ptr->dewfordTrends; - sDaycareMailSave = &sDaycareMail; + sRecordMixMailSave = &sRecordMixMail; sBattleTowerSave = &gSaveBlock2Ptr->frontier.towerPlayer; sLilycoveLadySave = &gSaveBlock1Ptr->lilycoveLady; sApprenticesSave = gSaveBlock2Ptr->apprentices; sBattleTowerSave_Duplicate = &gSaveBlock2Ptr->frontier.towerPlayer; } -static void PrepareUnknownExchangePacket(struct PlayerRecordsRS *dest) +static void PrepareUnknownExchangePacket(struct PlayerRecordRS *dest) { memcpy(dest->secretBases, sSecretBasesSave, sizeof(dest->secretBases)); memcpy(dest->tvShows, sTvShowsSave, sizeof(dest->tvShows)); @@ -202,7 +198,7 @@ static void PrepareUnknownExchangePacket(struct PlayerRecordsRS *dest) dest->giftItem = GetRecordMixingGift(); } -static void PrepareExchangePacketForRubySapphire(struct PlayerRecordsRS *dest) +static void PrepareExchangePacketForRubySapphire(struct PlayerRecordRS *dest) { memcpy(dest->secretBases, sSecretBasesSave, sizeof(dest->secretBases)); ClearJapaneseSecretBases(dest->secretBases); @@ -254,44 +250,44 @@ static void PrepareExchangePacket(void) } } -static void ReceiveExchangePacket(u32 which) +static void ReceiveExchangePacket(u32 multiplayerId) { if (Link_AnyPartnersPlayingRubyOrSapphire()) { // Ruby/Sapphire - sub_80E7B2C((void *)sReceivedRecords->ruby.tvShows); - ReceiveSecretBasesData(sReceivedRecords->ruby.secretBases, sizeof(struct PlayerRecordsRS), which); - ReceiveDaycareMailData(&sReceivedRecords->ruby.daycareMail, sizeof(struct PlayerRecordsRS), which, sReceivedRecords->ruby.tvShows); - ReceiveBattleTowerData(&sReceivedRecords->ruby.battleTowerRecord, sizeof(struct PlayerRecordsRS), which); - ReceiveTvShowsData(sReceivedRecords->ruby.tvShows, sizeof(struct PlayerRecordsRS), which); - ReceivePokeNewsData(sReceivedRecords->ruby.pokeNews, sizeof(struct PlayerRecordsRS), which); - ReceiveOldManData(&sReceivedRecords->ruby.oldMan, sizeof(struct PlayerRecordsRS), which); - ReceiveDewfordTrendData(sReceivedRecords->ruby.dewfordTrends, sizeof(struct PlayerRecordsRS), which); - ReceiveGiftItem(&sReceivedRecords->ruby.giftItem, which); + CalculateDaycareMailRandSum((void *)sReceivedRecords->ruby.tvShows); + ReceiveSecretBasesData(sReceivedRecords->ruby.secretBases, sizeof(sReceivedRecords->ruby), multiplayerId); + ReceiveDaycareMailData(&sReceivedRecords->ruby.daycareMail, sizeof(sReceivedRecords->ruby), multiplayerId, sReceivedRecords->ruby.tvShows); + ReceiveBattleTowerData(&sReceivedRecords->ruby.battleTowerRecord, sizeof(sReceivedRecords->ruby), multiplayerId); + ReceiveTvShowsData(sReceivedRecords->ruby.tvShows, sizeof(sReceivedRecords->ruby), multiplayerId); + ReceivePokeNewsData(sReceivedRecords->ruby.pokeNews, sizeof(sReceivedRecords->ruby), multiplayerId); + ReceiveOldManData(&sReceivedRecords->ruby.oldMan, sizeof(sReceivedRecords->ruby), multiplayerId); + ReceiveDewfordTrendData(sReceivedRecords->ruby.dewfordTrends, sizeof(sReceivedRecords->ruby), multiplayerId); + ReceiveGiftItem(&sReceivedRecords->ruby.giftItem, multiplayerId); } else { // Emerald - sub_80E7B2C((void *)sReceivedRecords->emerald.tvShows); - ReceiveSecretBasesData(sReceivedRecords->emerald.secretBases, sizeof(struct PlayerRecordsEmerald), which); - ReceiveTvShowsData(sReceivedRecords->emerald.tvShows, sizeof(struct PlayerRecordsEmerald), which); - ReceivePokeNewsData(sReceivedRecords->emerald.pokeNews, sizeof(struct PlayerRecordsEmerald), which); - ReceiveOldManData(&sReceivedRecords->emerald.oldMan, sizeof(struct PlayerRecordsEmerald), which); - ReceiveDewfordTrendData(sReceivedRecords->emerald.dewfordTrends, sizeof(struct PlayerRecordsEmerald), which); - ReceiveDaycareMailData(&sReceivedRecords->emerald.daycareMail, sizeof(struct PlayerRecordsEmerald), which, sReceivedRecords->emerald.tvShows); - ReceiveBattleTowerData(&sReceivedRecords->emerald.battleTowerRecord, sizeof(struct PlayerRecordsEmerald), which); - ReceiveGiftItem(&sReceivedRecords->emerald.giftItem, which); - ReceiveLilycoveLadyData(&sReceivedRecords->emerald.lilycoveLady, sizeof(struct PlayerRecordsEmerald), which); - ReceiveApprenticeData(sReceivedRecords->emerald.apprentices, sizeof(struct PlayerRecordsEmerald), (u8) which); - ReceiveRankingHallRecords(&sReceivedRecords->emerald.hallRecords, sizeof(struct PlayerRecordsEmerald), (u8) which); + CalculateDaycareMailRandSum((void *)sReceivedRecords->emerald.tvShows); + ReceiveSecretBasesData(sReceivedRecords->emerald.secretBases, sizeof(sReceivedRecords->emerald), multiplayerId); + ReceiveTvShowsData(sReceivedRecords->emerald.tvShows, sizeof(sReceivedRecords->emerald), multiplayerId); + ReceivePokeNewsData(sReceivedRecords->emerald.pokeNews, sizeof(sReceivedRecords->emerald), multiplayerId); + ReceiveOldManData(&sReceivedRecords->emerald.oldMan, sizeof(sReceivedRecords->emerald), multiplayerId); + ReceiveDewfordTrendData(sReceivedRecords->emerald.dewfordTrends, sizeof(sReceivedRecords->emerald), multiplayerId); + ReceiveDaycareMailData(&sReceivedRecords->emerald.daycareMail, sizeof(sReceivedRecords->emerald), multiplayerId, sReceivedRecords->emerald.tvShows); + ReceiveBattleTowerData(&sReceivedRecords->emerald.battleTowerRecord, sizeof(sReceivedRecords->emerald), multiplayerId); + ReceiveGiftItem(&sReceivedRecords->emerald.giftItem, multiplayerId); + ReceiveLilycoveLadyData(&sReceivedRecords->emerald.lilycoveLady, sizeof(sReceivedRecords->emerald), multiplayerId); + ReceiveApprenticeData(sReceivedRecords->emerald.apprentices, sizeof(sReceivedRecords->emerald), (u8)multiplayerId); + ReceiveRankingHallRecords(&sReceivedRecords->emerald.hallRecords, sizeof(sReceivedRecords->emerald), (u8)multiplayerId); } } static void PrintTextOnRecordMixing(const u8 *src) { - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized(0, 1, src, 0, 1, 0, NULL); - CopyWindowToVram(0, 3); + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized(0, FONT_NORMAL, src, 0, 1, 0, NULL); + CopyWindowToVram(0, COPYWIN_FULL); } #define tCounter data[0] @@ -307,10 +303,11 @@ static void Task_RecordMixing_SoundEffect(u8 taskId) #undef tCounter -#define tState data[0] -#define tSndEffTaskId data[15] +#define tTimer data[8] +#define tLinkTaskId data[10] +#define tSoundTaskId data[15] -// Note: Currently, special var 8005 contains the player's spot id. +// Note: gSpecialVar_0x8005 here contains the player's spot id. static void Task_RecordMixing_Main(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -318,84 +315,94 @@ static void Task_RecordMixing_Main(u8 taskId) switch (tState) { case 0: // init - sSentRecord = malloc(sizeof(union PlayerRecords)); - sReceivedRecords = malloc(sizeof(union PlayerRecords) * MAX_LINK_PLAYERS); + sSentRecord = malloc(sizeof(*sSentRecord)); + sReceivedRecords = malloc(sizeof(*sReceivedRecords) * MAX_LINK_PLAYERS); SetLocalLinkPlayerId(gSpecialVar_0x8005); VarSet(VAR_TEMP_0, 1); - gUnknown_03001130 = FALSE; + sReadyToReceive = FALSE; PrepareExchangePacket(); CreateRecordMixingLights(); tState = 1; - data[10] = CreateTask(Task_MixingRecordsRecv, 80); - tSndEffTaskId = CreateTask(Task_RecordMixing_SoundEffect, 81); + tLinkTaskId = CreateTask(Task_MixingRecordsRecv, 80); + tSoundTaskId = CreateTask(Task_RecordMixing_SoundEffect, 81); break; case 1: // wait for Task_MixingRecordsRecv - if (!gTasks[data[10]].isActive) + if (!gTasks[tLinkTaskId].isActive) { tState = 2; FlagSet(FLAG_SYS_MIX_RECORD); DestroyRecordMixingLights(); - DestroyTask(tSndEffTaskId); + DestroyTask(tSoundTaskId); } break; case 2: - data[10] = CreateTask(Task_DoRecordMixing, 10); + tLinkTaskId = CreateTask(Task_DoRecordMixing, 10); tState = 3; PlaySE(SE_M_BATON_PASS); break; case 3: // wait for Task_DoRecordMixing - if (!gTasks[data[10]].isActive) + if (!gTasks[tLinkTaskId].isActive) { tState = 4; if (gWirelessCommType == 0) - data[10] = CreateTask_ReestablishCableClubLink(); + tLinkTaskId = CreateTask_ReestablishCableClubLink(); PrintTextOnRecordMixing(gText_RecordMixingComplete); - data[8] = 0; + tTimer = 0; } break; case 4: // wait 60 frames - if (++data[8] > 60) + if (++tTimer > 60) tState = 5; break; - case 5: - if (!gTasks[data[10]].isActive) + case 5: // Wait for the task created by CreateTask_ReestablishCableClubLink + if (!gTasks[tLinkTaskId].isActive) { free(sReceivedRecords); free(sSentRecord); SetLinkWaitingForScript(); if (gWirelessCommType != 0) - { CreateTask(Task_ReturnToFieldRecordMixing, 10); - } - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(0, TRUE); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } break; } } -#undef tState -#undef tSndEffTaskId +#undef tTimer +#undef tLinkTaskId +#undef tSoundTaskId + +// Task data for Task_MixingRecordsRecv and subsequent tasks +#define tSentRecord data[2] // Used to store a ptr, so data[2] and data[3] +#define tNumChunksSent data[4] +#define tMultiplayerId data[5] +#define tCopyTaskId data[10] + +// Task data for Task_CopyReceiveBuffer +#define tParentTaskId data[0] +#define tNumChunksRecv(i) data[1 + (i)] // Number of chunks of the record received per player +#define tRecvRecords data[5] // Used to store a ptr, so data[5] and data[6] static void Task_MixingRecordsRecv(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: PrintTextOnRecordMixing(gText_MixingRecords); task->data[8] = 0x708; - task->data[0] = 400; + task->tState = 400; ClearLinkCallback_2(); break; case 100: // wait 20 frames if (++task->data[12] > 20) { task->data[12] = 0; - task->data[0] = 101; + task->tState = 101; } break; case 101: @@ -406,14 +413,14 @@ static void Task_MixingRecordsRecv(u8 taskId) if (players == GetSavedPlayerCount()) { PlaySE(SE_PIN); - task->data[0] = 201; + task->tState = 201; task->data[12] = 0; } } else { PlaySE(SE_BOO); - task->data[0] = 301; + task->tState = 301; } } break; @@ -422,17 +429,17 @@ static void Task_MixingRecordsRecv(u8 taskId) if (GetSavedPlayerCount() == GetLinkPlayerCount_2() && ++task->data[12] > (GetLinkPlayerCount_2() * 30)) { CheckShouldAdvanceLinkState(); - task->data[0] = 1; + task->tState = 1; } break; case 301: if (GetSavedPlayerCount() == GetLinkPlayerCount_2()) - task->data[0] = 1; + task->tState = 1; break; case 400: // wait 20 frames if (++task->data[12] > 20) { - task->data[0] = 1; + task->tState = 1; task->data[12] = 0; } break; @@ -440,7 +447,7 @@ static void Task_MixingRecordsRecv(u8 taskId) if (gReceivedRemoteLinkPlayers != 0) { ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), STR_CONV_MODE_LEADING_ZEROS, 2); - task->data[0] = 5; + task->tState = 5; } break; case 2: @@ -448,35 +455,34 @@ static void Task_MixingRecordsRecv(u8 taskId) u8 subTaskId; task->data[6] = GetLinkPlayerCount_2(); - task->data[0] = 0; - task->data[5] = GetMultiplayerId_(); + task->tState = 0; + task->tMultiplayerId = GetMultiplayerId_(); task->func = Task_SendPacket; if (Link_AnyPartnersPlayingRubyOrSapphire()) { - StorePtrInTaskData(sSentRecord, (u16 *)&task->data[2]); + StorePtrInTaskData(sSentRecord, &task->tSentRecord); subTaskId = CreateTask(Task_CopyReceiveBuffer, 80); - task->data[10] = subTaskId; - gTasks[subTaskId].data[0] = taskId; - StorePtrInTaskData(sReceivedRecords, (u16 *)&gTasks[subTaskId].data[5]); - sRecordStructSize = sizeof(struct PlayerRecordsRS); + task->tCopyTaskId = subTaskId; + gTasks[subTaskId].tParentTaskId = taskId; + StorePtrInTaskData(sReceivedRecords, &gTasks[subTaskId].tRecvRecords); + sRecordStructSize = sizeof(struct PlayerRecordRS); } else { - StorePtrInTaskData(sSentRecord, (u16 *)&task->data[2]); + StorePtrInTaskData(sSentRecord, &task->tSentRecord); subTaskId = CreateTask(Task_CopyReceiveBuffer, 80); - task->data[10] = subTaskId; - gTasks[subTaskId].data[0] = taskId; - StorePtrInTaskData(sReceivedRecords, (u16 *)&gTasks[subTaskId].data[5]); - sRecordStructSize = sizeof(struct PlayerRecordsEmerald); + task->tCopyTaskId = subTaskId; + gTasks[subTaskId].tParentTaskId = taskId; + StorePtrInTaskData(sReceivedRecords, &gTasks[subTaskId].tRecvRecords); + sRecordStructSize = sizeof(struct PlayerRecordEmerald); } - // Note: This task is destroyed by Task_CopyReceiveBuffer when it's done. } break; case 5: // wait 60 frames if (++task->data[10] > 60) { task->data[10] = 0; - task->data[0] = 2; + task->tState = 2; } break; } @@ -485,34 +491,34 @@ static void Task_MixingRecordsRecv(u8 taskId) static void Task_SendPacket(u8 taskId) { struct Task *task = &gTasks[taskId]; - // does this send the data 24 times? - - switch (task->data[0]) + switch (task->tState) { - case 0: // Copy record data to send buffer + case 0: // Copy record data chunk to send buffer { - void *recordData = LoadPtrFromTaskData(&task->data[2]) + task->data[4] * BUFFER_CHUNK_SIZE; + void *recordData = LoadPtrFromTaskData(&task->tSentRecord) + task->tNumChunksSent * BUFFER_CHUNK_SIZE; memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE); - task->data[0]++; + task->tState++; } break; case 1: if (GetMultiplayerId() == 0) - SendBlockRequest(1); - task->data[0]++; + SendBlockRequest(BLOCK_REQ_SIZE_200); + task->tState++; break; case 2: break; case 3: - task->data[4]++; - if (task->data[4] == sRecordStructSize / 200 + 1) - task->data[0]++; + // If sent final chunk of record, move on to next state. + // Otherwise return to first state and send next chunk. + task->tNumChunksSent++; + if (task->tNumChunksSent == sRecordStructSize / BUFFER_CHUNK_SIZE + 1) + task->tState++; else - task->data[0] = 0; + task->tState = 0; break; case 4: - if (!gTasks[task->data[10]].isActive) + if (!gTasks[task->tCopyTaskId].isActive) task->func = Task_SendPacket_SwitchToReceive; break; } @@ -527,38 +533,35 @@ static void Task_CopyReceiveBuffer(u8 taskId) if (status == GetLinkPlayerCountAsBitFlags()) { u8 i; - for (i = 0; i < GetLinkPlayerCount(); i++) { - void *dest; - void *src; - if ((status >> i) & 1) { - dest = LoadPtrFromTaskData((u16 *)&task->data[5]) + task->data[i + 1] * BUFFER_CHUNK_SIZE + sRecordStructSize * i; - src = GetPlayerRecvBuffer(i); - if ((task->data[i + 1] + 1) * BUFFER_CHUNK_SIZE > sRecordStructSize) - memcpy(dest, src, sRecordStructSize - task->data[i + 1] * BUFFER_CHUNK_SIZE); + void *dest = LoadPtrFromTaskData(&task->tRecvRecords) + task->tNumChunksRecv(i) * BUFFER_CHUNK_SIZE + sRecordStructSize * i; + void *src = GetPlayerRecvBuffer(i); + if ((task->tNumChunksRecv(i) + 1) * BUFFER_CHUNK_SIZE > sRecordStructSize) + memcpy(dest, src, sRecordStructSize - task->tNumChunksRecv(i) * BUFFER_CHUNK_SIZE); else memcpy(dest, src, BUFFER_CHUNK_SIZE); ResetBlockReceivedFlag(i); - task->data[i + 1]++; - if (task->data[i + 1] == sRecordStructSize / BUFFER_CHUNK_SIZE + 1) + task->tNumChunksRecv(i)++; + if (task->tNumChunksRecv(i) == sRecordStructSize / BUFFER_CHUNK_SIZE + 1) handledPlayers++; } } - gTasks[task->data[0]].data[0]++; + gTasks[task->tParentTaskId].tState++; } if (handledPlayers == GetLinkPlayerCount()) DestroyTask(taskId); } -static void sub_80E776C(u8 taskId) +static void Task_WaitReceivePacket(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (!gTasks[task->data[10]].isActive) + // Wait for Task_CopyReceiveBuffer to finish + if (!gTasks[task->tCopyTaskId].isActive) DestroyTask(taskId); } @@ -566,15 +569,15 @@ static void Task_ReceivePacket(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->func = sub_80E776C; - if (gUnknown_03001130 == TRUE) - ReceiveExchangePacket(task->data[5]); + task->func = Task_WaitReceivePacket; + if (sReadyToReceive == TRUE) + ReceiveExchangePacket(task->tMultiplayerId); } static void Task_SendPacket_SwitchToReceive(u8 taskId) { gTasks[taskId].func = Task_ReceivePacket; - gUnknown_03001130 = TRUE; + sReadyToReceive = TRUE; } static void *LoadPtrFromTaskData(const u16 *asShort) @@ -607,46 +610,46 @@ static void ShufflePlayerIndices(u32 *data) switch (players) { case 2: - for (i = 0; i < 2; i++) - data[i] = gUnknown_0858CF8C[i]; + for (i = 0; i < ARRAY_COUNT(sPlayerIdxOrders_2Player); i++) + data[i] = sPlayerIdxOrders_2Player[i]; break; case 3: - linkTrainerId = GetLinkPlayerTrainerId(0) % 2; - for (i = 0; i < 3; i++) - data[i] = gUnknown_0858CF8E[linkTrainerId][i]; + linkTrainerId = GetLinkPlayerTrainerId(0) % ARRAY_COUNT(sPlayerIdxOrders_3Player); + for (i = 0; i < ARRAY_COUNT(sPlayerIdxOrders_3Player[0]); i++) + data[i] = sPlayerIdxOrders_3Player[linkTrainerId][i]; break; case 4: - linkTrainerId = GetLinkPlayerTrainerId(0) % 9; - for (i = 0; i < 4; i++) - data[i] = gUnknown_0858CF94[linkTrainerId][i]; + linkTrainerId = GetLinkPlayerTrainerId(0) % ARRAY_COUNT(sPlayerIdxOrders_4Player); + for (i = 0; i < ARRAY_COUNT(sPlayerIdxOrders_4Player[0]); i++) + data[i] = sPlayerIdxOrders_4Player[linkTrainerId][i]; break; } } -static void ReceiveOldManData(OldMan *oldMan, size_t recordSize, u8 which) +static void ReceiveOldManData(OldMan *records, size_t recordSize, u8 multiplayerId) { u8 version; u16 language; - OldMan *dest; + OldMan *oldMan; u32 mixIndices[MAX_LINK_PLAYERS]; ShufflePlayerIndices(mixIndices); - dest = (void *)oldMan + recordSize * mixIndices[which]; - version = gLinkPlayers[mixIndices[which]].version; - language = gLinkPlayers[mixIndices[which]].language; + oldMan = (void *)records + recordSize * mixIndices[multiplayerId]; + version = gLinkPlayers[mixIndices[multiplayerId]].version; + language = gLinkPlayers[mixIndices[multiplayerId]].language; if (Link_AnyPartnersPlayingRubyOrSapphire()) - SanitizeReceivedRubyOldMan(dest, version, language); + SanitizeReceivedRubyOldMan(oldMan, version, language); else - SanitizeReceivedEmeraldOldMan(dest, version, language); + SanitizeReceivedEmeraldOldMan(oldMan, version, language); - memcpy(sOldManSave, (void *)oldMan + recordSize * mixIndices[which], sizeof(OldMan)); + memcpy(sOldManSave, (void *)records + recordSize * mixIndices[multiplayerId], sizeof(OldMan)); ResetMauvilleOldManFlag(); } -static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u8 which) +static void ReceiveBattleTowerData(void *records, size_t recordSize, u8 multiplayerId) { - struct EmeraldBattleTowerRecord *dest; + struct EmeraldBattleTowerRecord *battleTowerRecord; struct BattleTowerPokemon *btPokemon; u32 mixIndices[MAX_LINK_PLAYERS]; s32 i; @@ -654,77 +657,90 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u ShufflePlayerIndices(mixIndices); if (Link_AnyPartnersPlayingRubyOrSapphire()) { - if (RubyBattleTowerRecordToEmerald((void *)battleTowerRecord + recordSize * mixIndices[which], (void *)battleTowerRecord + recordSize * which) == TRUE) + if (RubyBattleTowerRecordToEmerald((void *)records + recordSize * mixIndices[multiplayerId], (void *)records + recordSize * multiplayerId) == TRUE) { - dest = (void *)battleTowerRecord + recordSize * which; - dest->language = gLinkPlayers[mixIndices[which]].language; - CalcEmeraldBattleTowerChecksum(dest); + battleTowerRecord = (void *)records + recordSize * multiplayerId; + battleTowerRecord->language = gLinkPlayers[mixIndices[multiplayerId]].language; + CalcEmeraldBattleTowerChecksum(battleTowerRecord); } } else { - memcpy((void *)battleTowerRecord + recordSize * which, (void *)battleTowerRecord + recordSize * mixIndices[which], sizeof(struct EmeraldBattleTowerRecord)); - dest = (void *)battleTowerRecord + recordSize * which; + memcpy((void *)records + recordSize * multiplayerId, (void *)records + recordSize * mixIndices[multiplayerId], sizeof(struct EmeraldBattleTowerRecord)); + battleTowerRecord = (void *)records + recordSize * multiplayerId; for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) { - btPokemon = &dest->party[i]; + btPokemon = &battleTowerRecord->party[i]; if (btPokemon->species != SPECIES_NONE && IsStringJapanese(btPokemon->nickname)) ConvertInternationalString(btPokemon->nickname, LANGUAGE_JAPANESE); } - CalcEmeraldBattleTowerChecksum(dest); + CalcEmeraldBattleTowerChecksum(battleTowerRecord); } - PutNewBattleTowerRecord((void *)battleTowerRecord + recordSize * which); + PutNewBattleTowerRecord((void *)records + recordSize * multiplayerId); } -static void ReceiveLilycoveLadyData(LilycoveLady *lilycoveLady, size_t recordSize, u8 which) +static void ReceiveLilycoveLadyData(LilycoveLady *records, size_t recordSize, u8 multiplayerId) { - LilycoveLady *dest; + LilycoveLady *lilycoveLady; u32 mixIndices[MAX_LINK_PLAYERS]; ShufflePlayerIndices(mixIndices); - memcpy((void *)lilycoveLady + recordSize * which, sLilycoveLadySave, sizeof(LilycoveLady)); + memcpy((void *)records + recordSize * multiplayerId, sLilycoveLadySave, sizeof(LilycoveLady)); if (GetLilycoveLadyId() == 0) { - dest = malloc(sizeof(LilycoveLady)); - if (dest == NULL) + lilycoveLady = malloc(sizeof(*lilycoveLady)); + if (lilycoveLady == NULL) return; - memcpy(dest, sLilycoveLadySave, sizeof(LilycoveLady)); + memcpy(lilycoveLady, sLilycoveLadySave, sizeof(LilycoveLady)); } else { - dest = NULL; + lilycoveLady = NULL; } - memcpy(sLilycoveLadySave, (void *)lilycoveLady + recordSize * mixIndices[which], sizeof(LilycoveLady)); + memcpy(sLilycoveLadySave, (void *)records + recordSize * mixIndices[multiplayerId], sizeof(LilycoveLady)); ResetLilycoveLadyForRecordMix(); - if (dest != NULL) + if (lilycoveLady != NULL) { - QuizLadyClearQuestionForRecordMix(dest); - free(dest); + QuizLadyClearQuestionForRecordMix(lilycoveLady); + free(lilycoveLady); } } -static u8 sub_80E7A9C(struct DaycareMail *rmMail) +static u8 GetDaycareMailItemId(struct DaycareMail *mail) { - return rmMail->message.itemId; + return mail->message.itemId; } -static void sub_80E7AA4(struct RecordMixingDaycareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1) -{ - struct DaycareMail buffer; - struct RecordMixingDaycareMail *mail1; - struct RecordMixingDaycareMail *mail2; +// Indexes for a 2 element array used to store the multiplayer id and daycare +// slot that correspond to a daycare Pokémon that can hold an item. +enum { + MULTIPLAYER_ID, + DAYCARE_SLOT, +}; - mail1 = (void *)src + recordSize * idxs[which0][0]; - memcpy(&buffer, &mail1->mail[idxs[which0][1]], sizeof(struct DaycareMail)); - mail2 = (void *)src + recordSize * idxs[which1][0]; - memcpy(&mail1->mail[idxs[which0][1]], &mail2->mail[idxs[which1][1]], sizeof(struct DaycareMail)); - memcpy(&mail2->mail[idxs[which1][1]], &buffer, sizeof(struct DaycareMail)); +static void SwapDaycareMail(struct RecordMixingDaycareMail *records, size_t recordSize, u8 (*idxs)[2], u8 playerSlot1, u8 playerSlot2) +{ + struct DaycareMail temp; + struct RecordMixingDaycareMail *mixMail1, *mixMail2; + + // 1st player's daycare mail --> temp + mixMail1 = (void *)records + recordSize * idxs[playerSlot1][MULTIPLAYER_ID]; + memcpy(&temp, &mixMail1->mail[idxs[playerSlot1][DAYCARE_SLOT]], sizeof(struct DaycareMail)); + + // 2nd player's daycare mail --> 1st player's daycare mail + mixMail2 = (void *)records + recordSize * idxs[playerSlot2][MULTIPLAYER_ID]; + memcpy(&mixMail1->mail[idxs[playerSlot1][DAYCARE_SLOT]], &mixMail2->mail[idxs[playerSlot2][DAYCARE_SLOT]], sizeof(struct DaycareMail)); + + // temp --> 2nd player's daycare mail + memcpy(&mixMail2->mail[idxs[playerSlot2][DAYCARE_SLOT]], &temp, sizeof(struct DaycareMail)); } -static void sub_80E7B2C(const u8 *src) +// This sum is used to determine which players will swap daycare mail if there are more than 2 players who can. +// The TV show data is used to calculate this sum. +static void CalculateDaycareMailRandSum(const u8 *src) { u8 sum; s32 i; @@ -733,73 +749,80 @@ static void sub_80E7B2C(const u8 *src) for (i = 0; i < 256; i++) sum += src[i]; - gUnknown_03001160 = sum; + sDaycareMailRandSum = sum; } -static u8 sub_80E7B54(void) +static u8 GetDaycareMailRandSum(void) { - return gUnknown_03001160; + return sDaycareMailRandSum; } -static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *src, size_t recordSize, u8 which, TVShow *shows) +static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *records, size_t recordSize, u8 multiplayerId, TVShow *shows) { u16 i, j; u8 linkPlayerCount; u8 tableId; - struct RecordMixingDaycareMail *_src; - u8 which0, which1; + struct RecordMixingDaycareMail *mixMail; + u8 playerSlot1, playerSlot2; void *ptr; - u8 sp04[4]; - u8 sp08[4]; - struct RecordMixingDaycareMail *sp0c[4]; - u8 sp1c[4][2]; - u8 sp24[4][2]; - u8 sp34; + u8 unusedArr1[MAX_LINK_PLAYERS]; + u8 unusedArr2[MAX_LINK_PLAYERS]; + struct RecordMixingDaycareMail *unusedMixMail[MAX_LINK_PLAYERS]; + bool8 canHoldItem[MAX_LINK_PLAYERS][DAYCARE_MON_COUNT]; + u8 idxs[MAX_LINK_PLAYERS][2]; + u8 numDaycareCanHold; u16 oldSeed; bool32 anyRS; + // Seed RNG to the first player's trainer id so that + // every player has the same random swap occur + // (see the other use of Random2 in this function) oldSeed = Random2(); SeedRng2(gLinkPlayers[0].trainerId); linkPlayerCount = GetLinkPlayerCount(); - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { - sp04[i] = 0xFF; - sp08[i] = 0; - sp1c[i][0] = 0; - sp1c[i][1] = 0; + unusedArr1[i] = 0xFF; + unusedArr2[i] = 0; + canHoldItem[i][0] = FALSE; + canHoldItem[i][1] = FALSE; } + // Handle language differences if RS / Japanese players are present anyRS = Link_AnyPartnersPlayingRubyOrSapphire(); for (i = 0; i < GetLinkPlayerCount(); i++) { u32 language, version; - _src = (void *)src + i * recordSize; + mixMail = (void *)records + i * recordSize; language = gLinkPlayers[i].language; version = gLinkPlayers[i].version & 0xFF; - for (j = 0; j < _src->numDaycareMons; j++) + + for (j = 0; j < mixMail->numDaycareMons; j++) { u16 otNameLanguage, nicknameLanguage; - struct DaycareMail *recordMixingMail = &_src->mail[j]; + struct DaycareMail *daycareMail = &mixMail->mail[j]; - if (!recordMixingMail->message.itemId) + if (daycareMail->message.itemId == ITEM_NONE) continue; if (anyRS) { - if (StringLength(recordMixingMail->OT_name) <= 5) + // Handle OT name language + if (StringLength(daycareMail->otName) <= 5) { otNameLanguage = LANGUAGE_JAPANESE; } else { - StripExtCtrlCodes(recordMixingMail->OT_name); + StripExtCtrlCodes(daycareMail->otName); otNameLanguage = language; } - if (recordMixingMail->monName[0] == EXT_CTRL_CODE_BEGIN && recordMixingMail->monName[1] == EXT_CTRL_CODE_JPN) + // Handle nickname langugae + if (daycareMail->monName[0] == EXT_CTRL_CODE_BEGIN && daycareMail->monName[1] == EXT_CTRL_CODE_JPN) { - StripExtCtrlCodes(recordMixingMail->monName); + StripExtCtrlCodes(daycareMail->monName); nicknameLanguage = LANGUAGE_JAPANESE; } else @@ -807,121 +830,145 @@ static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *src, size_t r nicknameLanguage = language; } + // Set languages if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) { - recordMixingMail->gameLanguage = otNameLanguage; - recordMixingMail->monLanguage = nicknameLanguage; + daycareMail->gameLanguage = otNameLanguage; + daycareMail->monLanguage = nicknameLanguage; } } else if (language == LANGUAGE_JAPANESE) { - if (IsStringJapanese(recordMixingMail->OT_name)) - recordMixingMail->gameLanguage = LANGUAGE_JAPANESE; + if (IsStringJapanese(daycareMail->otName)) + daycareMail->gameLanguage = LANGUAGE_JAPANESE; else - recordMixingMail->gameLanguage = GAME_LANGUAGE; + daycareMail->gameLanguage = GAME_LANGUAGE; - if (IsStringJapanese(recordMixingMail->monName)) - recordMixingMail->monLanguage = LANGUAGE_JAPANESE; + if (IsStringJapanese(daycareMail->monName)) + daycareMail->monLanguage = LANGUAGE_JAPANESE; else - recordMixingMail->monLanguage = GAME_LANGUAGE; + daycareMail->monLanguage = GAME_LANGUAGE; } } } - sp34 = 0; + // For each player, get which of their daycare Pokémon can hold items + // (can't hold items if already holding one, or if daycare slot is empty). + // Note that when deposited in the daycare, Pokémon have their mail taken + // from them and returned upon withdrawal, which means daycare Pokémon that + // have associated mail do not have a held item. + // Because not holding an item is the only determination for a swap, this also + // means that a "swap" can occur even if neither Pokémon has associated mail. + numDaycareCanHold = 0; for (i = 0; i < linkPlayerCount; i++) { - _src = (void *)src + i * recordSize; - if (_src->numDaycareMons == 0) + mixMail = (void *)records + i * recordSize; + if (mixMail->numDaycareMons == 0) continue; - for (j = 0; j < _src->numDaycareMons; j++) + for (j = 0; j < mixMail->numDaycareMons; j++) { - if (!_src->holdsItem[j]) - sp1c[i][j] = 1; + if (!mixMail->cantHoldItem[j]) + canHoldItem[i][j] = TRUE; } } + // Fill the idxs array with data about which players + // and which daycare slots should swap mail. j = 0; for (i = 0; i < linkPlayerCount; i++) { - _src = (void *)src + i * recordSize; - if (sp1c[i][0] == TRUE || sp1c[i][1] == TRUE) - sp34++; + mixMail = (void *)records + i * recordSize; + + // Count number of players that have at least + // one daycare Pokémon with no held item + if (canHoldItem[i][0] == TRUE || canHoldItem[i][1] == TRUE) + numDaycareCanHold++; - if (sp1c[i][0] == TRUE && sp1c[i][1] == FALSE) + if (canHoldItem[i][0] == TRUE && canHoldItem[i][1] == FALSE) { - sp24[j][0] = i; - sp24[j][1] = 0; + // Only daycare slot 0 can hold an item for this player, record it + idxs[j][MULTIPLAYER_ID] = i; + idxs[j][DAYCARE_SLOT] = 0; j++; } - else if (sp1c[i][0] == FALSE && sp1c[i][1] == TRUE) + else if (canHoldItem[i][0] == FALSE && canHoldItem[i][1] == TRUE) { - sp24[j][0] = i; - sp24[j][1] = 1; + // Only daycare slot 1 can hold an item for this player, record it + idxs[j][MULTIPLAYER_ID] = i; + idxs[j][DAYCARE_SLOT] = 1; j++; } - else if (sp1c[i][0] == TRUE && sp1c[i][1] == TRUE) + else if (canHoldItem[i][0] == TRUE && canHoldItem[i][1] == TRUE) { - u32 var1, var2; + // Both daycare slots can hold an item, choose which one to use. + // If either one is the only one to have associated mail, use that one. + // If both do or don't have associated mail, choose one randomly. + u32 itemId1, itemId2; + idxs[j][MULTIPLAYER_ID] = i; + itemId1 = GetDaycareMailItemId(&mixMail->mail[0]); + itemId2 = GetDaycareMailItemId(&mixMail->mail[1]); + + if ((!itemId1 && !itemId2) || (itemId1 && itemId2)) + idxs[j][DAYCARE_SLOT] = Random2() % 2; + else if (itemId1 && !itemId2) + idxs[j][DAYCARE_SLOT] = 0; + else if (!itemId1 && itemId2) + idxs[j][DAYCARE_SLOT] = 1; - sp24[j][0] = i; - var1 = sub_80E7A9C(&_src->mail[0]); - var2 = sub_80E7A9C(&_src->mail[1]); - if (!(var1 || var2) || (var1 && var2)) - { - sp24[j][1] = Random2() % 2; - } - else if (var1 && !var2) - { - sp24[j][1] = 0; - } - else if (!var1 && var2) - { - sp24[j][1] = 1; - } j++; } } - for (i = 0; i < 4; i++) + // Copy the player's record mix mail 4 times to an array that's never read. + for (i = 0; i < MAX_LINK_PLAYERS; i++) { - _src = &src[which * recordSize]; - sp0c[i] = _src; + mixMail = &records[multiplayerId * recordSize]; + unusedMixMail[i] = mixMail; } - tableId = sub_80E7B54() % 3; - switch (sp34) + // Choose a random table id to determine who will + // swap if there are more than 2 candidate players. + tableId = GetDaycareMailRandSum() % NUM_SWAP_COMBOS; + switch (numDaycareCanHold) { case 2: - sub_80E7AA4(src, recordSize, sp24, 0, 1); + // 2 players can swap, just perform swap. + SwapDaycareMail(records, recordSize, idxs, 0, 1); break; case 3: - which0 = gUnknown_0858CFB8[tableId][0]; - which1 = gUnknown_0858CFB8[tableId][1]; - sub_80E7AA4(src, recordSize, sp24, which0, which1); + // 3 players can swap, select 2 and leave the 3rd out + playerSlot1 = sDaycareMailSwapIds_3Player[tableId][0]; + playerSlot2 = sDaycareMailSwapIds_3Player[tableId][1]; + SwapDaycareMail(records, recordSize, idxs, playerSlot1, playerSlot2); break; case 4: - ptr = sp24; - which0 = gUnknown_0858CFBE[tableId][0]; - which1 = gUnknown_0858CFBE[tableId][1]; - sub_80E7AA4(src, recordSize, ptr, which0, which1); - which0 = gUnknown_0858CFBE[tableId][2]; - which1 = gUnknown_0858CFBE[tableId][3]; - sub_80E7AA4(src, recordSize, ptr, which0, which1); + // 4 players can swap, select which 2 pairings will swap + ptr = idxs; + + // Swap pair 1 + playerSlot1 = sDaycareMailSwapIds_4Player[tableId][0]; + playerSlot2 = sDaycareMailSwapIds_4Player[tableId][1]; + SwapDaycareMail(records, recordSize, ptr, playerSlot1, playerSlot2); + + // Swap pair 2 + playerSlot1 = sDaycareMailSwapIds_4Player[tableId][2]; + playerSlot2 = sDaycareMailSwapIds_4Player[tableId][3]; + SwapDaycareMail(records, recordSize, ptr, playerSlot1, playerSlot2); break; } - _src = (void *)src + which * recordSize; - memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &_src->mail[0], sizeof(struct DaycareMail)); - memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &_src->mail[1], sizeof(struct DaycareMail)); + // Save player's record mixed mail to the daycare (in case it has changed) + mixMail = (void *)records + multiplayerId * recordSize; + memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &mixMail->mail[0], sizeof(struct DaycareMail)); + memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &mixMail->mail[1], sizeof(struct DaycareMail)); SeedRng(oldSeed); } -static void ReceiveGiftItem(u16 *item, u8 which) +static void ReceiveGiftItem(u16 *item, u8 multiplayerId) { - if (which != 0 && *item != ITEM_NONE && GetPocketByItemId(*item) == POCKET_KEY_ITEMS) + if (multiplayerId != 0 && *item != ITEM_NONE && GetPocketByItemId(*item) == POCKET_KEY_ITEMS) { if (!CheckBagHasItem(*item, 1) && !CheckPCHasItem(*item, 1) && AddBagItem(*item, 1)) { @@ -941,29 +988,28 @@ static void Task_DoRecordMixing(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: - task->data[0]++; + task->tState++; break; case 1: if (Link_AnyPartnersPlayingRubyOrSapphire()) - task->data[0]++; + task->tState++; else - task->data[0] = 6; + task->tState = 6; break; - - // Mixing Ruby/Sapphire records. case 2: + // Mixing Ruby/Sapphire records. SetContinueGameWarpStatusToDynamicWarp(); - FullSaveGame(); - task->data[0]++; + WriteSaveBlock2(); + task->tState++; break; case 3: - if (CheckSaveFile()) + if (WriteSaveBlock1Sector()) { ClearContinueGameWarpStatus2(); - task->data[0] = 4; + task->tState = 4; task->data[1] = 0; } break; @@ -971,39 +1017,40 @@ static void Task_DoRecordMixing(u8 taskId) if (++task->data[1] > 10) { SetCloseLinkCallback(); - task->data[0]++; + task->tState++; } break; case 5: + // Finish mixing Ruby/Sapphire records if (gReceivedRemoteLinkPlayers == FALSE) DestroyTask(taskId); break; // Mixing Emerald records. case 6: - if (!sub_801048C(FALSE)) + if (!Rfu_SetLinkRecovery(FALSE)) { - CreateTask(Task_LinkSave, 5); - task->data[0]++; + CreateTask(Task_LinkFullSave, 5); + task->tState++; } break; - case 7: // wait for Task_LinkSave to finish. - if (!FuncIsActiveTask(Task_LinkSave)) + case 7: // wait for Task_LinkFullSave to finish. + if (!FuncIsActiveTask(Task_LinkFullSave)) { if (gWirelessCommType) { - sub_801048C(TRUE); - task->data[0] = 8; + Rfu_SetLinkRecovery(TRUE); + task->tState = 8; } else { - task->data[0] = 4; + task->tState = 4; } } break; case 8: SetLinkStandbyCallback(); - task->data[0]++; + task->tState++; break; case 9: if (IsLinkTaskFinished()) @@ -1012,8 +1059,6 @@ static void Task_DoRecordMixing(u8 taskId) } } -// New Emerald functions - static void GetSavedApprentices(struct Apprentice *dst, struct Apprentice *src) { s32 i, id; @@ -1031,7 +1076,7 @@ static void GetSavedApprentices(struct Apprentice *dst, struct Apprentice *src) numMixApprentices = 0; for (i = 0; i < 2; i++) { - id = ((i + gSaveBlock2Ptr->playerApprentice.saveId) % (APPRENTICE_COUNT - 1)) + 1; + id = (i + gSaveBlock2Ptr->playerApprentice.saveId) % (APPRENTICE_COUNT - 1) + 1; if (src[id].playerName[0] != EOS) { if (GetTrainerId(src[id].playerId) != GetTrainerId(gSaveBlock2Ptr->playerTrainerId)) @@ -1074,7 +1119,7 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst) for (i = 0; i < HALL_FACILITIES_COUNT; i++) { - for (j = 0; j < 2; j++) + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { CopyTrainerId(dst->onePlayer[i][j].id, gSaveBlock2Ptr->playerTrainerId); dst->onePlayer[i][j].language = GAME_LANGUAGE; @@ -1082,7 +1127,7 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst) } } - for (j = 0; j < 2; j++) + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { dst->twoPlayers[j].language = GAME_LANGUAGE; CopyTrainerId(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId); @@ -1091,17 +1136,17 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst) StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.opponentNames[j]); } - for (i = 0; i < 2; i++) + for (i = 0; i < FRONTIER_LVL_MODE_COUNT; i++) { - dst->onePlayer[0][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; - dst->onePlayer[1][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_DOUBLES][i]; - dst->onePlayer[2][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_MULTIS][i]; - dst->onePlayer[3][i].winStreak = gSaveBlock2Ptr->frontier.domeRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; - dst->onePlayer[4][i].winStreak = gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; - dst->onePlayer[5][i].winStreak = gSaveBlock2Ptr->frontier.arenaRecordStreaks[i]; - dst->onePlayer[6][i].winStreak = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; - dst->onePlayer[7][i].winStreak = gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]; - dst->onePlayer[8][i].winStreak = gSaveBlock2Ptr->frontier.pyramidRecordStreaks[i]; + dst->onePlayer[RANKING_HALL_TOWER_SINGLES][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[RANKING_HALL_TOWER_DOUBLES][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_DOUBLES][i]; + dst->onePlayer[RANKING_HALL_TOWER_MULTIS][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_MULTIS][i]; + dst->onePlayer[RANKING_HALL_DOME][i].winStreak = gSaveBlock2Ptr->frontier.domeRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[RANKING_HALL_PALACE][i].winStreak = gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[RANKING_HALL_ARENA][i].winStreak = gSaveBlock2Ptr->frontier.arenaRecordStreaks[i]; + dst->onePlayer[RANKING_HALL_FACTORY][i].winStreak = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[RANKING_HALL_PIKE][i].winStreak = gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]; + dst->onePlayer[RANKING_HALL_PYRAMID][i].winStreak = gSaveBlock2Ptr->frontier.pyramidRecordStreaks[i]; dst->twoPlayers[i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_LINK_MULTIS][i]; } @@ -1115,28 +1160,26 @@ static bool32 IsApprenticeAlreadySaved(struct Apprentice *mixApprentice, struct { if (GetTrainerId(mixApprentice->playerId) == GetTrainerId(apprentices[i].playerId) && mixApprentice->number == apprentices[i].number) - { return TRUE; - } } return FALSE; } -static void ReceiveApprenticeData(struct Apprentice *mixApprentice, size_t recordSize, u32 multiplayerId) +static void ReceiveApprenticeData(struct Apprentice *records, size_t recordSize, u32 multiplayerId) { s32 i, numApprentices, apprenticeId; - struct Apprentice *mixApprenticePtr; + struct Apprentice *mixApprentice; u32 mixIndices[MAX_LINK_PLAYERS]; u32 apprenticeSaveId; ShufflePlayerIndices(mixIndices); - mixApprenticePtr = (void*)(mixApprentice) + (recordSize * mixIndices[multiplayerId]); + mixApprentice = (void *)records + (recordSize * mixIndices[multiplayerId]); numApprentices = 0; apprenticeId = 0; for (i = 0; i < 2; i++) { - if (mixApprenticePtr[i].playerName[0] != EOS && !IsApprenticeAlreadySaved(&mixApprenticePtr[i], &gSaveBlock2Ptr->apprentices[0])) + if (mixApprentice[i].playerName[0] != EOS && !IsApprenticeAlreadySaved(&mixApprentice[i], &gSaveBlock2Ptr->apprentices[0])) { numApprentices++; apprenticeId = i; @@ -1147,169 +1190,185 @@ static void ReceiveApprenticeData(struct Apprentice *mixApprentice, size_t recor { case 1: apprenticeSaveId = gSaveBlock2Ptr->playerApprentice.saveId + 1; - gSaveBlock2Ptr->apprentices[apprenticeSaveId] = mixApprenticePtr[apprenticeId]; + gSaveBlock2Ptr->apprentices[apprenticeSaveId] = mixApprentice[apprenticeId]; gSaveBlock2Ptr->playerApprentice.saveId = (gSaveBlock2Ptr->playerApprentice.saveId + 1) % (APPRENTICE_COUNT - 1); break; case 2: for (i = 0; i < 2; i++) { apprenticeSaveId = ((i ^ 1) + gSaveBlock2Ptr->playerApprentice.saveId) % (APPRENTICE_COUNT - 1) + 1; - gSaveBlock2Ptr->apprentices[apprenticeSaveId] = mixApprenticePtr[i]; + gSaveBlock2Ptr->apprentices[apprenticeSaveId] = mixApprentice[i]; } gSaveBlock2Ptr->playerApprentice.saveId = (gSaveBlock2Ptr->playerApprentice.saveId + 2) % (APPRENTICE_COUNT - 1); break; } } -static void sub_80E8578(struct RecordMixingHallRecords *dst, void *hallRecords, size_t recordSize, u32 arg3, s32 linkPlayerCount) +static void GetNewHallRecords(struct RecordMixingHallRecords *dst, void *records, size_t recordSize, u32 multiplayerId, s32 linkPlayerCount) { s32 i, j, k, l; - s32 var_68; + s32 repeatTrainers; + // Load sPartnerHallRecords with link partners' hall records k = 0; - i = 0; - while (1) + for (i = 0; i < linkPlayerCount; i++) { - if (i >= linkPlayerCount) + if (i != multiplayerId) + sPartnerHallRecords[k++] = records; + if (k == HALL_RECORDS_COUNT) break; - if (i != arg3) - gUnknown_03001168[k++] = hallRecords; - - if (k == 3) - break; - hallRecords += recordSize; - i++; + records += recordSize; } + // Get improved 1P hall records for (i = 0; i < HALL_FACILITIES_COUNT; i++) { - for (j = 0; j < 2; j++) + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { - for (k = 0; k < 3; k++) + // First get the existing saved records + for (k = 0; k < HALL_RECORDS_COUNT; k++) dst->hallRecords1P[i][j][k] = gSaveBlock2Ptr->hallRecords1P[i][j][k]; + // Then read the new mixed records for (k = 0; k < linkPlayerCount - 1; k++) { - var_68 = 0; - for (l = 0; l < 3; l++) + repeatTrainers = 0; + for (l = 0; l < HALL_RECORDS_COUNT; l++) { - if (GetTrainerId(dst->hallRecords1P[i][j][l].id) == GetTrainerId(gUnknown_03001168[k]->onePlayer[i][j].id)) + // If the new trainer is already in the existing saved records, only + // use the new one if the win streak is better + if (GetTrainerId(dst->hallRecords1P[i][j][l].id) == GetTrainerId(sPartnerHallRecords[k]->onePlayer[i][j].id)) { - var_68++; - if (dst->hallRecords1P[i][j][l].winStreak < gUnknown_03001168[k]->onePlayer[i][j].winStreak) - dst->hallRecords1P[i][j][l] = gUnknown_03001168[k]->onePlayer[i][j]; + repeatTrainers++; + if (dst->hallRecords1P[i][j][l].winStreak < sPartnerHallRecords[k]->onePlayer[i][j].winStreak) + dst->hallRecords1P[i][j][l] = sPartnerHallRecords[k]->onePlayer[i][j]; } } - if (var_68 == 0) - dst->hallRecords1P[i][j][k + 3] = gUnknown_03001168[k]->onePlayer[i][j]; + + // If all of the mixed records are new trainers, just save them + if (repeatTrainers == 0) + dst->hallRecords1P[i][j][k + HALL_RECORDS_COUNT] = sPartnerHallRecords[k]->onePlayer[i][j]; } } } - for (j = 0; j < 2; j++) + // Get improved 2P hall records + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { - for (k = 0; k < 3; k++) + // First get the existing saved records + for (k = 0; k < HALL_RECORDS_COUNT; k++) dst->hallRecords2P[j][k] = gSaveBlock2Ptr->hallRecords2P[j][k]; + // Then read the new mixed records for (k = 0; k < linkPlayerCount - 1; k++) { - var_68 = 0; - for (l = 0; l < 3; l++) + repeatTrainers = 0; + for (l = 0; l < HALL_RECORDS_COUNT; l++) { - if (GetTrainerId(dst->hallRecords2P[j][l].id1) == GetTrainerId(gUnknown_03001168[k]->twoPlayers[j].id1) - && GetTrainerId(dst->hallRecords2P[j][l].id2) == GetTrainerId(gUnknown_03001168[k]->twoPlayers[j].id2)) + // If the new trainer pair is already in the existing saved records, only + // use the new pair if the win streak is better + if (GetTrainerId(dst->hallRecords2P[j][l].id1) == GetTrainerId(sPartnerHallRecords[k]->twoPlayers[j].id1) + && GetTrainerId(dst->hallRecords2P[j][l].id2) == GetTrainerId(sPartnerHallRecords[k]->twoPlayers[j].id2)) { - var_68++; - if (dst->hallRecords2P[j][l].winStreak < gUnknown_03001168[k]->twoPlayers[j].winStreak) - dst->hallRecords2P[j][l] = gUnknown_03001168[k]->twoPlayers[j]; + repeatTrainers++; + if (dst->hallRecords2P[j][l].winStreak < sPartnerHallRecords[k]->twoPlayers[j].winStreak) + dst->hallRecords2P[j][l] = sPartnerHallRecords[k]->twoPlayers[j]; } } - if (var_68 == 0) - dst->hallRecords2P[j][k + 3] = gUnknown_03001168[k]->twoPlayers[j]; + + // If all of the mixed records are new trainer pairs, just save them + if (repeatTrainers == 0) + dst->hallRecords2P[j][k + HALL_RECORDS_COUNT] = sPartnerHallRecords[k]->twoPlayers[j]; } } } -static void sub_80E8880(struct RankingHall1P *arg0, struct RankingHall1P *arg1) +static void FillWinStreakRecords1P(struct RankingHall1P *playerRecords, struct RankingHall1P *mixRecords) { s32 i, j; - for (i = 0; i < 3; i++) + // Fill the player's 1P records with the highest win streaks from the mixed records + for (i = 0; i < HALL_RECORDS_COUNT; i++) { + // Get the highest remaining win streak in the mixed hall records s32 highestWinStreak = 0; s32 highestId = -1; - for (j = 0; j < 6; j++) + for (j = 0; j < HALL_RECORDS_COUNT * 2; j++) { - if (arg1[j].winStreak > highestWinStreak) + if (mixRecords[j].winStreak > highestWinStreak) { highestId = j; - highestWinStreak = arg1[j].winStreak; + highestWinStreak = mixRecords[j].winStreak; } } + // Save the win streak to the player's records, then clear it from the mixed records if (highestId >= 0) { - arg0[i] = arg1[highestId]; - arg1[highestId].winStreak = 0; + playerRecords[i] = mixRecords[highestId]; + mixRecords[highestId].winStreak = 0; } } } -static void sub_80E88CC(struct RankingHall2P *arg0, struct RankingHall2P *arg1) +static void FillWinStreakRecords2P(struct RankingHall2P *playerRecords, struct RankingHall2P *mixRecords) { s32 i, j; - for (i = 0; i < 3; i++) + // Fill the player's 2P records with the highest win streaks from the mixed records + for (i = 0; i < HALL_RECORDS_COUNT; i++) { + // Get the highest remaining win streak in the mixed hall records s32 highestWinStreak = 0; s32 highestId = -1; - for (j = 0; j < 6; j++) + for (j = 0; j < HALL_RECORDS_COUNT * 2; j++) { - if (arg1[j].winStreak > highestWinStreak) + if (mixRecords[j].winStreak > highestWinStreak) { highestId = j; - highestWinStreak = arg1[j].winStreak; + highestWinStreak = mixRecords[j].winStreak; } } + // Save the win streak to the player's records, then clear it from the mixed records if (highestId >= 0) { - arg0[i] = arg1[highestId]; - arg1[highestId].winStreak = 0; + playerRecords[i] = mixRecords[highestId]; + mixRecords[highestId].winStreak = 0; } } } -static void sub_80E8924(struct RecordMixingHallRecords *arg0) +static void SaveHighestWinStreakRecords(struct RecordMixingHallRecords *mixHallRecords) { s32 i, j; for (i = 0; i < HALL_FACILITIES_COUNT; i++) { - for (j = 0; j < 2; j++) - sub_80E8880(gSaveBlock2Ptr->hallRecords1P[i][j], arg0->hallRecords1P[i][j]); + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) + FillWinStreakRecords1P(gSaveBlock2Ptr->hallRecords1P[i][j], mixHallRecords->hallRecords1P[i][j]); } - for (j = 0; j < 2; j++) - sub_80E88CC(gSaveBlock2Ptr->hallRecords2P[j], arg0->hallRecords2P[j]); + for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) + FillWinStreakRecords2P(gSaveBlock2Ptr->hallRecords2P[j], mixHallRecords->hallRecords2P[j]); } -static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t recordSize, u32 arg2) +static void ReceiveRankingHallRecords(struct PlayerHallRecords *records, size_t recordSize, u32 multiplayerId) { u8 linkPlayerCount = GetLinkPlayerCount(); - struct RecordMixingHallRecords *largeStructPtr = AllocZeroed(sizeof(struct RecordMixingHallRecords)); + struct RecordMixingHallRecords *mixHallRecords = AllocZeroed(sizeof(*mixHallRecords)); - sub_80E8578(largeStructPtr, hallRecords, recordSize, arg2, linkPlayerCount); - sub_80E8924(largeStructPtr); + GetNewHallRecords(mixHallRecords, records, recordSize, multiplayerId, linkPlayerCount); + SaveHighestWinStreakRecords(mixHallRecords); - Free(largeStructPtr); + Free(mixHallRecords); } static void GetRecordMixingDaycareMail(struct RecordMixingDaycareMail *dst) { - sDaycareMail.mail[0] = gSaveBlock1Ptr->daycare.mons[0].mail; - sDaycareMail.mail[1] = gSaveBlock1Ptr->daycare.mons[1].mail; - InitDaycareMailRecordMixing(&gSaveBlock1Ptr->daycare, &sDaycareMail); - *dst = *sDaycareMailSave; + sRecordMixMail.mail[0] = gSaveBlock1Ptr->daycare.mons[0].mail; + sRecordMixMail.mail[1] = gSaveBlock1Ptr->daycare.mons[1].mail; + InitDaycareMailRecordMixing(&gSaveBlock1Ptr->daycare, &sRecordMixMail); + *dst = *sRecordMixMailSave; } static void SanitizeDaycareMailForRuby(struct RecordMixingDaycareMail *src) @@ -1319,10 +1378,10 @@ static void SanitizeDaycareMailForRuby(struct RecordMixingDaycareMail *src) for (i = 0; i < src->numDaycareMons; i++) { struct DaycareMail *mail = &src->mail[i]; - if (mail->message.itemId != 0) + if (mail->message.itemId != ITEM_NONE) { if (mail->gameLanguage != LANGUAGE_JAPANESE) - PadNameString(mail->OT_name, EXT_CTRL_CODE_BEGIN); + PadNameString(mail->otName, EXT_CTRL_CODE_BEGIN); ConvertInternationalString(mail->monName, mail->monLanguage); } diff --git a/src/recorded_battle.c b/src/recorded_battle.c index e29792766e..e8785b5f82 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" +#include "battle_controllers.h" #include "recorded_battle.h" #include "main.h" #include "pokemon.h" @@ -35,12 +36,6 @@ struct PlayerInfo u16 language; }; -struct MovePp -{ - u16 moves[MAX_MON_MOVES]; - u8 pp[MAX_MON_MOVES]; -}; - struct RecordedBattleSave { struct Pokemon playerParty[PARTY_SIZE]; @@ -65,13 +60,16 @@ struct RecordedBattleSave u8 recordMixFriendName[PLAYER_NAME_LENGTH + 1]; u8 recordMixFriendClass; u8 apprenticeId; - u16 easyChatSpeech[6]; + u16 easyChatSpeech[EASY_CHAT_BATTLE_WORDS_COUNT]; u8 recordMixFriendLanguage; u8 apprenticeLanguage; u8 battleRecord[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; u32 checksum; }; +// Save data using TryWriteSpecialSaveSector is allowed to exceed SECTOR_DATA_SIZE (up to the counter field) +STATIC_ASSERT(sizeof(struct RecordedBattleSave) <= SECTOR_COUNTER_OFFSET, RecordedBattleSaveFreeSpace); + EWRAM_DATA u32 gRecordedBattleRngSeed = 0; EWRAM_DATA u32 gBattlePalaceMoveSelectionRngValue = 0; EWRAM_DATA static u8 sBattleRecords[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE] = {0}; @@ -91,13 +89,13 @@ EWRAM_DATA static u32 sBattleFlags = 0; EWRAM_DATA static u32 sAI_Scripts = 0; EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0}; -EWRAM_DATA static u16 sPlayerMonMoves[2][MAX_MON_MOVES] = {0}; +EWRAM_DATA static u16 sPlayerMonMoves[MAX_BATTLERS_COUNT / 2][MAX_MON_MOVES] = {0}; EWRAM_DATA static struct PlayerInfo sPlayers[MAX_BATTLERS_COUNT] = {0}; -EWRAM_DATA static bool8 sUnknown_0203CCD0 = 0; +EWRAM_DATA static bool8 sIsPlaybackFinished = 0; EWRAM_DATA static u8 sRecordMixFriendName[PLAYER_NAME_LENGTH + 1] = {0}; EWRAM_DATA static u8 sRecordMixFriendClass = 0; EWRAM_DATA static u8 sApprenticeId = 0; -EWRAM_DATA static u16 sEasyChatSpeech[6] = {0}; +EWRAM_DATA static u16 sEasyChatSpeech[EASY_CHAT_BATTLE_WORDS_COUNT] = {0}; EWRAM_DATA static u8 sBattleOutcome = 0; static u8 sRecordMixFriendLanguage; @@ -113,7 +111,7 @@ void RecordedBattle_Init(u8 mode) s32 i, j; sRecordMode = mode; - sUnknown_0203CCD0 = FALSE; + sIsPlaybackFinished = FALSE; for (i = 0; i < MAX_BATTLERS_COUNT; i++) { @@ -124,16 +122,14 @@ void RecordedBattle_Init(u8 mode) if (mode == B_RECORD_MODE_RECORDING) { for (j = 0; j < BATTLER_RECORD_SIZE; j++) - { sBattleRecords[i][j] = 0xFF; - } sBattleFlags = gBattleTypeFlags; sAI_Scripts = gBattleResources->ai->aiFlags; } } } -void sub_8184E58(void) +void RecordedBattle_SetTrainerInfo(void) { s32 i, j; @@ -150,6 +146,7 @@ void sub_8184E58(void) if (gBattleTypeFlags & BATTLE_TYPE_LINK) { + // Link recorded battle, record info for all trainers u8 linkPlayersCount; u8 text[30]; @@ -163,6 +160,7 @@ void sub_8184E58(void) sPlayers[i].battlerId = gLinkPlayers[i].id; sPlayers[i].language = gLinkPlayers[i].language; + // Record names if (i < linkPlayersCount) { StringCopy(text, gLinkPlayers[i].name); @@ -178,10 +176,11 @@ void sub_8184E58(void) } else { + // Local battle, just record own info sPlayers[0].trainerId = (gSaveBlock2Ptr->playerTrainerId[0]) - | (gSaveBlock2Ptr->playerTrainerId[1] << 8) - | (gSaveBlock2Ptr->playerTrainerId[2] << 16) - | (gSaveBlock2Ptr->playerTrainerId[3] << 24); + | (gSaveBlock2Ptr->playerTrainerId[1] << 8) + | (gSaveBlock2Ptr->playerTrainerId[2] << 16) + | (gSaveBlock2Ptr->playerTrainerId[3] << 24); sPlayers[0].gender = gSaveBlock2Ptr->playerGender; sPlayers[0].battlerId = 0; @@ -195,9 +194,7 @@ void sub_8184E58(void) void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action) { if (sBattlerRecordSizes[battlerId] < BATTLER_RECORD_SIZE && sRecordMode != B_RECORD_MODE_PLAYBACK) - { sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]++] = action; - } } void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear) @@ -220,7 +217,7 @@ u8 RecordedBattle_GetBattlerAction(u8 battlerId) { gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah ResetPaletteFadeControl(); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); SetMainCallback2(CB2_QuitRecordedBattle); return 0xFF; } @@ -249,9 +246,7 @@ u8 RecordedBattle_BufferNewBattlerData(u8 *dst) dst[idx++] = sBattlerRecordSizes[i] - sBattlerPrevRecordSizes[i]; for (j = 0; j < sBattlerRecordSizes[i] - sBattlerPrevRecordSizes[i]; j++) - { dst[idx++] = sBattleRecords[i][sBattlerPrevRecordSizes[i] + j]; - } sBattlerPrevRecordSizes[i] = sBattlerRecordSizes[i]; } @@ -283,9 +278,7 @@ void RecordedBattle_RecordAllBattlerData(u8 *src) u8 numActions = GetNextRecordedDataByte(src, &idx, &size); for (i = 0; i < numActions; i++) - { sBattleRecords[battlerId][sBattlerSavedRecordSizes[battlerId]++] = GetNextRecordedDataByte(src, &idx, &size); - } } } } @@ -310,20 +303,20 @@ static bool32 IsRecordedBattleSaveValid(struct RecordedBattleSave *save) return FALSE; if (save->battleFlags & ILLEGAL_BATTLE_TYPES) return FALSE; - if (CalcByteArraySum((void*)(save), sizeof(*save) - 4) != save->checksum) + if (CalcByteArraySum((void *)(save), sizeof(*save) - 4) != save->checksum) return FALSE; return TRUE; } -static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSection) +static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSector) { - memset(saveSection, 0, 0x1000); - memcpy(saveSection, battleSave, sizeof(*battleSave)); + memset(saveSector, 0, SECTOR_SIZE); + memcpy(saveSector, battleSave, sizeof(*battleSave)); - saveSection->checksum = CalcByteArraySum((void*)(saveSection), sizeof(*saveSection) - 4); + saveSector->checksum = CalcByteArraySum((void *)(saveSector), sizeof(*saveSector) - 4); - if (TryWriteSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveSection)) != SAVE_STATUS_OK) + if (TryWriteSpecialSaveSector(SECTOR_ID_RECORDED_BATTLE, (void *)(saveSector)) != SAVE_STATUS_OK) return FALSE; else return TRUE; @@ -338,7 +331,7 @@ bool32 MoveRecordedBattleToSaveData(void) saveAttempts = 0; battleSave = AllocZeroed(sizeof(struct RecordedBattleSave)); - savSection = AllocZeroed(0x1000); + savSection = AllocZeroed(SECTOR_SIZE); for (i = 0; i < PARTY_SIZE; i++) { @@ -349,9 +342,7 @@ bool32 MoveRecordedBattleToSaveData(void) for (i = 0; i < MAX_BATTLERS_COUNT; i++) { for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++) - { battleSave->playersName[i][j] = sPlayers[i].name[j]; - } battleSave->playersGender[i] = sPlayers[i].gender; battleSave->playersLanguage[i] = sPlayers[i].language; battleSave->playersBattlers[i] = sPlayers[i].battlerId; @@ -471,12 +462,8 @@ bool32 MoveRecordedBattleToSaveData(void) } for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { for (j = 0; j < BATTLER_RECORD_SIZE; j++) - { battleSave->battleRecord[i][j] = sBattleRecords[i][j]; - } - } while (1) { @@ -493,9 +480,9 @@ bool32 MoveRecordedBattleToSaveData(void) return ret; } -static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSection *saveBuffer) +static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSector *saveBuffer) { - if (TryReadSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != SAVE_STATUS_OK) + if (TryReadSpecialSaveSector(SECTOR_ID_RECORDED_BATTLE, (void *)(saveBuffer)) != SAVE_STATUS_OK) return FALSE; memcpy(dst, saveBuffer, sizeof(struct RecordedBattleSave)); @@ -508,7 +495,7 @@ static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, stru static bool32 CopyRecordedBattleFromSave(struct RecordedBattleSave *dst) { - struct SaveSection *savBuffer = AllocZeroed(sizeof(struct SaveSection)); + struct SaveSector *savBuffer = AllocZeroed(SECTOR_SIZE); bool32 ret = TryCopyRecordedBattleSaveData(dst, savBuffer); Free(savBuffer); @@ -585,29 +572,21 @@ static void SetVariablesForRecordedBattle(struct RecordedBattleSave *src) sAI_Scripts = src->AI_scripts; for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) - { sRecordMixFriendName[i] = src->recordMixFriendName[i]; - } sRecordMixFriendClass = src->recordMixFriendClass; sApprenticeId = src->apprenticeId; sRecordMixFriendLanguage = src->recordMixFriendLanguage; sApprenticeLanguage = src->apprenticeLanguage; - for (i = 0; i < 6; i++) - { + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) sEasyChatSpeech[i] = src->easyChatSpeech[i]; - } gSaveBlock2Ptr->frontier.lvlMode = src->lvlMode; for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { for (j = 0; j < BATTLER_RECORD_SIZE; j++) - { sBattleRecords[i][j] = src->battleRecord[i][j]; - } - } } void PlayRecordedBattle(void (*CB2_After)(void)) @@ -693,9 +672,9 @@ void RecordedBattle_ClearFrontierPassFlag(void) } // Set sFrontierPassFlag to received state of FLAG_SYS_FRONTIER_PASS -void RecordedBattle_SetFrontierPassFlagFromHword(u16 arg0) +void RecordedBattle_SetFrontierPassFlagFromHword(u16 flags) { - sFrontierPassFlag |= (arg0 & 0x8000) >> 15; + sFrontierPassFlag |= (flags & (1 << 15)) >> 15; } u8 RecordedBattle_GetFrontierPassFlag(void) @@ -725,14 +704,14 @@ void RecordedBattle_CopyBattlerMoves(void) return; for (i = 0; i < MAX_MON_MOVES; i++) - { sPlayerMonMoves[gActiveBattler / 2][i] = gBattleMons[gActiveBattler].moves[i]; - } } +// This is a special battle action only used by this function +// It shares a value with B_ACTION_SAFARI_POKEBLOCK, which can never occur in a recorded battle. #define ACTION_MOVE_CHANGE 6 -void sub_818603C(u8 arg0) +void RecordedBattle_CheckMovesetChanges(u8 mode) { s32 battlerId, j, k; @@ -741,17 +720,20 @@ void sub_818603C(u8 arg0) for (battlerId = 0; battlerId < gBattlersCount; battlerId++) { - if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) // player's side only + // Player's side only + if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) { - if (arg0 == 1) + if (mode == B_RECORD_MODE_RECORDING) { + // Check if any of the battler's moves have changed. for (j = 0; j < MAX_MON_MOVES; j++) { if (gBattleMons[battlerId].moves[j] != sPlayerMonMoves[battlerId / 2][j]) break; } - if (j != MAX_MON_MOVES) // player's mon's move has been changed + if (j != MAX_MON_MOVES) { + // At least one of the moves has been changed RecordedBattle_SetBattlerAction(battlerId, ACTION_MOVE_CHANGE); for (j = 0; j < MAX_MON_MOVES; j++) { @@ -766,68 +748,66 @@ void sub_818603C(u8 arg0) } } } - else + else // B_RECORD_MODE_PLAYBACK { if (sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]] == ACTION_MOVE_CHANGE) { u8 ppBonuses[MAX_MON_MOVES]; - u8 array1[MAX_MON_MOVES]; - u8 array2[MAX_MON_MOVES]; - struct MovePp movePp; - u8 array3[(MAX_MON_MOVES * 2)]; - u8 var; + u8 moveSlots[MAX_MON_MOVES]; + u8 mimickedMoveSlots[MAX_MON_MOVES]; + struct ChooseMoveStruct movePp; + u8 ppBonusSet; + // We know the current action is ACTION_MOVE_CHANGE, retrieve + // it without saving it to move on to the next action. RecordedBattle_GetBattlerAction(battlerId); + + for (j = 0; j < MAX_MON_MOVES; j++) + ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & (3 << (j << 1))) >> (j << 1)); + for (j = 0; j < MAX_MON_MOVES; j++) { - ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & ((3 << (j << 1)))) >> (j << 1)); - } - for (j = 0; j < MAX_MON_MOVES; j++) - { - array1[j] = RecordedBattle_GetBattlerAction(battlerId); - movePp.moves[j] = gBattleMons[battlerId].moves[array1[j]]; - movePp.pp[j] = gBattleMons[battlerId].pp[array1[j]]; - array3[j] = ppBonuses[array1[j]]; - array2[j] = (gDisableStructs[battlerId].mimickedMoves & gBitTable[j]) >> j; + moveSlots[j] = RecordedBattle_GetBattlerAction(battlerId); + movePp.moves[j] = gBattleMons[battlerId].moves[moveSlots[j]]; + movePp.currentPp[j] = gBattleMons[battlerId].pp[moveSlots[j]]; + movePp.maxPp[j] = ppBonuses[moveSlots[j]]; + mimickedMoveSlots[j] = (gDisableStructs[battlerId].mimickedMoves & gBitTable[j]) >> j; } for (j = 0; j < MAX_MON_MOVES; j++) { gBattleMons[battlerId].moves[j] = movePp.moves[j]; - gBattleMons[battlerId].pp[j] = movePp.pp[j]; + gBattleMons[battlerId].pp[j] = movePp.currentPp[j]; } gBattleMons[battlerId].ppBonuses = 0; gDisableStructs[battlerId].mimickedMoves = 0; for (j = 0; j < MAX_MON_MOVES; j++) { - gBattleMons[battlerId].ppBonuses |= (array3[j]) << (j << 1); - gDisableStructs[battlerId].mimickedMoves |= (array2[j]) << (j); + gBattleMons[battlerId].ppBonuses |= movePp.maxPp[j] << (j << 1); + gDisableStructs[battlerId].mimickedMoves |= mimickedMoveSlots[j] << j; } if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)) { for (j = 0; j < MAX_MON_MOVES; j++) - { - ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1)); - } + ppBonuses[j] = (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1); + for (j = 0; j < MAX_MON_MOVES; j++) { - movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + array1[j], NULL); - movePp.pp[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + array1[j], NULL); - array3[j] = ppBonuses[array1[j]]; + movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + moveSlots[j], NULL); + movePp.currentPp[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + moveSlots[j], NULL); + movePp.maxPp[j] = ppBonuses[moveSlots[j]]; } for (j = 0; j < MAX_MON_MOVES; j++) { SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + j, &movePp.moves[j]); - SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + j, &movePp.pp[j]); + SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + j, &movePp.currentPp[j]); } - var = 0; + ppBonusSet = 0; for (j = 0; j < MAX_MON_MOVES; j++) - { - var |= (array3[j]) << (j << 1); - } - SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, &var); - } + ppBonusSet |= movePp.maxPp[j] << (j << 1); + SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, &ppBonusSet); + } gChosenMoveByBattler[battlerId] = gBattleMons[battlerId].moves[*(gBattleStruct->chosenMovePositions + battlerId)]; } } @@ -840,24 +820,24 @@ u32 GetAiScriptsInRecordedBattle(void) return sAI_Scripts; } -void sub_8186444(void) +// Used to determine when the player is allowed to press B to end a recorded battle's playback +void RecordedBattle_SetPlaybackFinished(void) { - sUnknown_0203CCD0 = TRUE; + sIsPlaybackFinished = TRUE; } -bool8 sub_8186450(void) +bool8 RecordedBattle_CanStopPlayback(void) { - return (sUnknown_0203CCD0 == FALSE); + return (sIsPlaybackFinished == FALSE); } void GetRecordedBattleRecordMixFriendName(u8 *dst) { s32 i; - for (i = 0; i < 8; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) dst[i] = sRecordMixFriendName[i]; - - dst[7] = EOS; + dst[PLAYER_NAME_LENGTH] = EOS; ConvertInternationalString(dst, sRecordMixFriendLanguage); } diff --git a/src/region_map.c b/src/region_map.c index 4e547b5fb3..a4db1cb048 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -7,7 +7,6 @@ #include "palette.h" #include "party_menu.h" #include "trig.h" -#include "constants/maps.h" #include "overworld.h" #include "event_data.h" #include "secret_base.h" @@ -65,7 +64,7 @@ struct MultiNameFlyDest // Static RAM declarations -static EWRAM_DATA struct RegionMap *gRegionMap = NULL; +static EWRAM_DATA struct RegionMap *sRegionMap = NULL; static EWRAM_DATA struct { void (*callback)(void); @@ -116,19 +115,18 @@ static void CB_FadeInFlyMap(void); static void CB_HandleFlyMapInput(void); static void CB_ExitFlyMap(void); -// .rodata - -static const u16 sRegionMapCursorPal[] = INCBIN_U16("graphics/pokenav/cursor.gbapal"); -static const u32 sRegionMapCursorSmallGfxLZ[] = INCBIN_U32("graphics/pokenav/cursor_small.4bpp.lz"); -static const u32 sRegionMapCursorLargeGfxLZ[] = INCBIN_U32("graphics/pokenav/cursor_large.4bpp.lz"); +// NOTE: Some of the below graphics are not in graphics/pokenav/region_map +// because porymap expects them to be in their current location. +static const u16 sRegionMapCursorPal[] = INCBIN_U16("graphics/pokenav/region_map/cursor.gbapal"); +static const u32 sRegionMapCursorSmallGfxLZ[] = INCBIN_U32("graphics/pokenav/region_map/cursor_small.4bpp.lz"); +static const u32 sRegionMapCursorLargeGfxLZ[] = INCBIN_U32("graphics/pokenav/region_map/cursor_large.4bpp.lz"); static const u16 sRegionMapBg_Pal[] = INCBIN_U16("graphics/pokenav/region_map.gbapal"); static const u32 sRegionMapBg_GfxLZ[] = INCBIN_U32("graphics/pokenav/region_map.8bpp.lz"); static const u32 sRegionMapBg_TilemapLZ[] = INCBIN_U32("graphics/pokenav/region_map_map.bin.lz"); -static const u16 sRegionMapPlayerIcon_BrendanPal[] = INCBIN_U16("graphics/pokenav/brendan_icon.gbapal"); -static const u8 sRegionMapPlayerIcon_BrendanGfx[] = INCBIN_U8("graphics/pokenav/brendan_icon.4bpp"); -static const u16 sRegionMapPlayerIcon_MayPal[] = INCBIN_U16("graphics/pokenav/may_icon.gbapal"); -static const u8 sRegionMapPlayerIcon_MayGfx[] = INCBIN_U8("graphics/pokenav/may_icon.4bpp"); - +static const u16 sRegionMapPlayerIcon_BrendanPal[] = INCBIN_U16("graphics/pokenav/region_map/brendan_icon.gbapal"); +static const u8 sRegionMapPlayerIcon_BrendanGfx[] = INCBIN_U8("graphics/pokenav/region_map/brendan_icon.4bpp"); +static const u16 sRegionMapPlayerIcon_MayPal[] = INCBIN_U16("graphics/pokenav/region_map/may_icon.gbapal"); +static const u8 sRegionMapPlayerIcon_MayGfx[] = INCBIN_U8("graphics/pokenav/region_map/may_icon.4bpp"); static const u8 sRegionMap_MapSectionLayout[] = INCBIN_U8("graphics/pokenav/region_map_section_layout.bin"); #include "data/region_map/region_map_entries.h" @@ -283,68 +281,64 @@ static const u8 sMapSecIdsOffMap[] = MAPSEC_NAVEL_ROCK }; -static const u16 sRegionMapFramePal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal"); - -static const u32 sRegionMapFrameGfxLZ[] = INCBIN_U32("graphics/pokenav/map_frame.4bpp.lz"); - -static const u32 sRegionMapFrameTilemapLZ[] = INCBIN_U32("graphics/pokenav/map_frame.bin.lz"); - -static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/fly_target_icons.gbapal"); - -static const u32 sFlyTargetIcons_Gfx[] = INCBIN_U32("graphics/pokenav/fly_target_icons.4bpp.lz"); +static const u16 sRegionMapFramePal[] = INCBIN_U16("graphics/pokenav/region_map/frame.gbapal"); +static const u32 sRegionMapFrameGfxLZ[] = INCBIN_U32("graphics/pokenav/region_map/frame.4bpp.lz"); +static const u32 sRegionMapFrameTilemapLZ[] = INCBIN_U32("graphics/pokenav/region_map/frame.bin.lz"); +static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/region_map/fly_target_icons.gbapal"); +static const u32 sFlyTargetIcons_Gfx[] = INCBIN_U32("graphics/pokenav/region_map/fly_target_icons.4bpp.lz"); static const u8 sMapHealLocations[][3] = { - {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F}, - {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), HEAL_LOCATION_OLDALE_TOWN}, - {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), HEAL_LOCATION_DEWFORD_TOWN}, - {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), HEAL_LOCATION_LAVARIDGE_TOWN}, - {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), HEAL_LOCATION_FALLARBOR_TOWN}, - {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), HEAL_LOCATION_VERDANTURF_TOWN}, - {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), HEAL_LOCATION_PACIFIDLOG_TOWN}, - {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), HEAL_LOCATION_PETALBURG_CITY}, - {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), HEAL_LOCATION_SLATEPORT_CITY}, - {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), HEAL_LOCATION_MAUVILLE_CITY}, - {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), HEAL_LOCATION_RUSTBORO_CITY}, - {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), HEAL_LOCATION_FORTREE_CITY}, - {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), HEAL_LOCATION_LILYCOVE_CITY}, - {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), HEAL_LOCATION_MOSSDEEP_CITY}, - {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), HEAL_LOCATION_SOOTOPOLIS_CITY}, - {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), HEAL_LOCATION_EVER_GRANDE_CITY}, - {MAP_GROUP(ROUTE101), MAP_NUM(ROUTE101), 0}, - {MAP_GROUP(ROUTE102), MAP_NUM(ROUTE102), 0}, - {MAP_GROUP(ROUTE103), MAP_NUM(ROUTE103), 0}, - {MAP_GROUP(ROUTE104), MAP_NUM(ROUTE104), 0}, - {MAP_GROUP(ROUTE105), MAP_NUM(ROUTE105), 0}, - {MAP_GROUP(ROUTE106), MAP_NUM(ROUTE106), 0}, - {MAP_GROUP(ROUTE107), MAP_NUM(ROUTE107), 0}, - {MAP_GROUP(ROUTE108), MAP_NUM(ROUTE108), 0}, - {MAP_GROUP(ROUTE109), MAP_NUM(ROUTE109), 0}, - {MAP_GROUP(ROUTE110), MAP_NUM(ROUTE110), 0}, - {MAP_GROUP(ROUTE111), MAP_NUM(ROUTE111), 0}, - {MAP_GROUP(ROUTE112), MAP_NUM(ROUTE112), 0}, - {MAP_GROUP(ROUTE113), MAP_NUM(ROUTE113), 0}, - {MAP_GROUP(ROUTE114), MAP_NUM(ROUTE114), 0}, - {MAP_GROUP(ROUTE115), MAP_NUM(ROUTE115), 0}, - {MAP_GROUP(ROUTE116), MAP_NUM(ROUTE116), 0}, - {MAP_GROUP(ROUTE117), MAP_NUM(ROUTE117), 0}, - {MAP_GROUP(ROUTE118), MAP_NUM(ROUTE118), 0}, - {MAP_GROUP(ROUTE119), MAP_NUM(ROUTE119), 0}, - {MAP_GROUP(ROUTE120), MAP_NUM(ROUTE120), 0}, - {MAP_GROUP(ROUTE121), MAP_NUM(ROUTE121), 0}, - {MAP_GROUP(ROUTE122), MAP_NUM(ROUTE122), 0}, - {MAP_GROUP(ROUTE123), MAP_NUM(ROUTE123), 0}, - {MAP_GROUP(ROUTE124), MAP_NUM(ROUTE124), 0}, - {MAP_GROUP(ROUTE125), MAP_NUM(ROUTE125), 0}, - {MAP_GROUP(ROUTE126), MAP_NUM(ROUTE126), 0}, - {MAP_GROUP(ROUTE127), MAP_NUM(ROUTE127), 0}, - {MAP_GROUP(ROUTE128), MAP_NUM(ROUTE128), 0}, - {MAP_GROUP(ROUTE129), MAP_NUM(ROUTE129), 0}, - {MAP_GROUP(ROUTE130), MAP_NUM(ROUTE130), 0}, - {MAP_GROUP(ROUTE131), MAP_NUM(ROUTE131), 0}, - {MAP_GROUP(ROUTE132), MAP_NUM(ROUTE132), 0}, - {MAP_GROUP(ROUTE133), MAP_NUM(ROUTE133), 0}, - {MAP_GROUP(ROUTE134), MAP_NUM(ROUTE134), 0} + [MAPSEC_LITTLEROOT_TOWN] = {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F}, + [MAPSEC_OLDALE_TOWN] = {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), HEAL_LOCATION_OLDALE_TOWN}, + [MAPSEC_DEWFORD_TOWN] = {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), HEAL_LOCATION_DEWFORD_TOWN}, + [MAPSEC_LAVARIDGE_TOWN] = {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), HEAL_LOCATION_LAVARIDGE_TOWN}, + [MAPSEC_FALLARBOR_TOWN] = {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), HEAL_LOCATION_FALLARBOR_TOWN}, + [MAPSEC_VERDANTURF_TOWN] = {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), HEAL_LOCATION_VERDANTURF_TOWN}, + [MAPSEC_PACIFIDLOG_TOWN] = {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), HEAL_LOCATION_PACIFIDLOG_TOWN}, + [MAPSEC_PETALBURG_CITY] = {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), HEAL_LOCATION_PETALBURG_CITY}, + [MAPSEC_SLATEPORT_CITY] = {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), HEAL_LOCATION_SLATEPORT_CITY}, + [MAPSEC_MAUVILLE_CITY] = {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), HEAL_LOCATION_MAUVILLE_CITY}, + [MAPSEC_RUSTBORO_CITY] = {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), HEAL_LOCATION_RUSTBORO_CITY}, + [MAPSEC_FORTREE_CITY] = {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), HEAL_LOCATION_FORTREE_CITY}, + [MAPSEC_LILYCOVE_CITY] = {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), HEAL_LOCATION_LILYCOVE_CITY}, + [MAPSEC_MOSSDEEP_CITY] = {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), HEAL_LOCATION_MOSSDEEP_CITY}, + [MAPSEC_SOOTOPOLIS_CITY] = {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), HEAL_LOCATION_SOOTOPOLIS_CITY}, + [MAPSEC_EVER_GRANDE_CITY] = {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), HEAL_LOCATION_EVER_GRANDE_CITY}, + [MAPSEC_ROUTE_101] = {MAP_GROUP(ROUTE101), MAP_NUM(ROUTE101), 0}, + [MAPSEC_ROUTE_102] = {MAP_GROUP(ROUTE102), MAP_NUM(ROUTE102), 0}, + [MAPSEC_ROUTE_103] = {MAP_GROUP(ROUTE103), MAP_NUM(ROUTE103), 0}, + [MAPSEC_ROUTE_104] = {MAP_GROUP(ROUTE104), MAP_NUM(ROUTE104), 0}, + [MAPSEC_ROUTE_105] = {MAP_GROUP(ROUTE105), MAP_NUM(ROUTE105), 0}, + [MAPSEC_ROUTE_106] = {MAP_GROUP(ROUTE106), MAP_NUM(ROUTE106), 0}, + [MAPSEC_ROUTE_107] = {MAP_GROUP(ROUTE107), MAP_NUM(ROUTE107), 0}, + [MAPSEC_ROUTE_108] = {MAP_GROUP(ROUTE108), MAP_NUM(ROUTE108), 0}, + [MAPSEC_ROUTE_109] = {MAP_GROUP(ROUTE109), MAP_NUM(ROUTE109), 0}, + [MAPSEC_ROUTE_110] = {MAP_GROUP(ROUTE110), MAP_NUM(ROUTE110), 0}, + [MAPSEC_ROUTE_111] = {MAP_GROUP(ROUTE111), MAP_NUM(ROUTE111), 0}, + [MAPSEC_ROUTE_112] = {MAP_GROUP(ROUTE112), MAP_NUM(ROUTE112), 0}, + [MAPSEC_ROUTE_113] = {MAP_GROUP(ROUTE113), MAP_NUM(ROUTE113), 0}, + [MAPSEC_ROUTE_114] = {MAP_GROUP(ROUTE114), MAP_NUM(ROUTE114), 0}, + [MAPSEC_ROUTE_115] = {MAP_GROUP(ROUTE115), MAP_NUM(ROUTE115), 0}, + [MAPSEC_ROUTE_116] = {MAP_GROUP(ROUTE116), MAP_NUM(ROUTE116), 0}, + [MAPSEC_ROUTE_117] = {MAP_GROUP(ROUTE117), MAP_NUM(ROUTE117), 0}, + [MAPSEC_ROUTE_118] = {MAP_GROUP(ROUTE118), MAP_NUM(ROUTE118), 0}, + [MAPSEC_ROUTE_119] = {MAP_GROUP(ROUTE119), MAP_NUM(ROUTE119), 0}, + [MAPSEC_ROUTE_120] = {MAP_GROUP(ROUTE120), MAP_NUM(ROUTE120), 0}, + [MAPSEC_ROUTE_121] = {MAP_GROUP(ROUTE121), MAP_NUM(ROUTE121), 0}, + [MAPSEC_ROUTE_122] = {MAP_GROUP(ROUTE122), MAP_NUM(ROUTE122), 0}, + [MAPSEC_ROUTE_123] = {MAP_GROUP(ROUTE123), MAP_NUM(ROUTE123), 0}, + [MAPSEC_ROUTE_124] = {MAP_GROUP(ROUTE124), MAP_NUM(ROUTE124), 0}, + [MAPSEC_ROUTE_125] = {MAP_GROUP(ROUTE125), MAP_NUM(ROUTE125), 0}, + [MAPSEC_ROUTE_126] = {MAP_GROUP(ROUTE126), MAP_NUM(ROUTE126), 0}, + [MAPSEC_ROUTE_127] = {MAP_GROUP(ROUTE127), MAP_NUM(ROUTE127), 0}, + [MAPSEC_ROUTE_128] = {MAP_GROUP(ROUTE128), MAP_NUM(ROUTE128), 0}, + [MAPSEC_ROUTE_129] = {MAP_GROUP(ROUTE129), MAP_NUM(ROUTE129), 0}, + [MAPSEC_ROUTE_130] = {MAP_GROUP(ROUTE130), MAP_NUM(ROUTE130), 0}, + [MAPSEC_ROUTE_131] = {MAP_GROUP(ROUTE131), MAP_NUM(ROUTE131), 0}, + [MAPSEC_ROUTE_132] = {MAP_GROUP(ROUTE132), MAP_NUM(ROUTE132), 0}, + [MAPSEC_ROUTE_133] = {MAP_GROUP(ROUTE133), MAP_NUM(ROUTE133), 0}, + [MAPSEC_ROUTE_134] = {MAP_GROUP(ROUTE134), MAP_NUM(ROUTE134), 0} }; static const u8 *const sEverGrandeCityNames[] = @@ -522,49 +516,49 @@ void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed) void InitRegionMapData(struct RegionMap *regionMap, const struct BgTemplate *template, bool8 zoomed) { - gRegionMap = regionMap; - gRegionMap->initStep = 0; - gRegionMap->zoomed = zoomed; - gRegionMap->inputCallback = zoomed == TRUE ? ProcessRegionMapInput_Zoomed : ProcessRegionMapInput_Full; + sRegionMap = regionMap; + sRegionMap->initStep = 0; + sRegionMap->zoomed = zoomed; + sRegionMap->inputCallback = zoomed == TRUE ? ProcessRegionMapInput_Zoomed : ProcessRegionMapInput_Full; if (template != NULL) { - gRegionMap->bgNum = template->bg; - gRegionMap->charBaseIdx = template->charBaseIndex; - gRegionMap->mapBaseIdx = template->mapBaseIndex; - gRegionMap->bgManaged = TRUE; + sRegionMap->bgNum = template->bg; + sRegionMap->charBaseIdx = template->charBaseIndex; + sRegionMap->mapBaseIdx = template->mapBaseIndex; + sRegionMap->bgManaged = TRUE; } else { - gRegionMap->bgNum = 2; - gRegionMap->charBaseIdx = 2; - gRegionMap->mapBaseIdx = 28; - gRegionMap->bgManaged = FALSE; + sRegionMap->bgNum = 2; + sRegionMap->charBaseIdx = 2; + sRegionMap->mapBaseIdx = 28; + sRegionMap->bgManaged = FALSE; } } void ShowRegionMapForPokedexAreaScreen(struct RegionMap *regionMap) { - gRegionMap = regionMap; + sRegionMap = regionMap; InitMapBasedOnPlayerLocation(); - gRegionMap->playerIconSpritePosX = gRegionMap->cursorPosX; - gRegionMap->playerIconSpritePosY = gRegionMap->cursorPosY; + sRegionMap->playerIconSpritePosX = sRegionMap->cursorPosX; + sRegionMap->playerIconSpritePosY = sRegionMap->cursorPosY; } bool8 LoadRegionMapGfx(void) { - switch (gRegionMap->initStep) + switch (sRegionMap->initStep) { case 0: - if (gRegionMap->bgManaged) - DecompressAndCopyTileDataToVram(gRegionMap->bgNum, sRegionMapBg_GfxLZ, 0, 0, 0); + if (sRegionMap->bgManaged) + DecompressAndCopyTileDataToVram(sRegionMap->bgNum, sRegionMapBg_GfxLZ, 0, 0, 0); else LZ77UnCompVram(sRegionMapBg_GfxLZ, (u16 *)BG_CHAR_ADDR(2)); break; case 1: - if (gRegionMap->bgManaged) + if (sRegionMap->bgManaged) { if (!FreeTempTileDataBuffersIfPossible()) - DecompressAndCopyTileDataToVram(gRegionMap->bgNum, sRegionMapBg_TilemapLZ, 0, 0, 1); + DecompressAndCopyTileDataToVram(sRegionMap->bgNum, sRegionMapBg_TilemapLZ, 0, 0, 1); } else { @@ -576,54 +570,54 @@ bool8 LoadRegionMapGfx(void) LoadPalette(sRegionMapBg_Pal, 0x70, 0x60); break; case 3: - LZ77UnCompWram(sRegionMapCursorSmallGfxLZ, gRegionMap->cursorSmallImage); + LZ77UnCompWram(sRegionMapCursorSmallGfxLZ, sRegionMap->cursorSmallImage); break; case 4: - LZ77UnCompWram(sRegionMapCursorLargeGfxLZ, gRegionMap->cursorLargeImage); + LZ77UnCompWram(sRegionMapCursorLargeGfxLZ, sRegionMap->cursorLargeImage); break; case 5: InitMapBasedOnPlayerLocation(); - gRegionMap->playerIconSpritePosX = gRegionMap->cursorPosX; - gRegionMap->playerIconSpritePosY = gRegionMap->cursorPosY; - gRegionMap->mapSecId = CorrectSpecialMapSecId_Internal(gRegionMap->mapSecId); - gRegionMap->mapSecType = GetMapsecType(gRegionMap->mapSecId); - GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, MAP_NAME_LENGTH); + sRegionMap->playerIconSpritePosX = sRegionMap->cursorPosX; + sRegionMap->playerIconSpritePosY = sRegionMap->cursorPosY; + sRegionMap->mapSecId = CorrectSpecialMapSecId_Internal(sRegionMap->mapSecId); + sRegionMap->mapSecType = GetMapsecType(sRegionMap->mapSecId); + GetMapName(sRegionMap->mapSecName, sRegionMap->mapSecId, MAP_NAME_LENGTH); break; case 6: - if (gRegionMap->zoomed == FALSE) + if (sRegionMap->zoomed == FALSE) { CalcZoomScrollParams(0, 0, 0, 0, 0x100, 0x100, 0); } else { - gRegionMap->scrollX = gRegionMap->cursorPosX * 8 - 0x34; - gRegionMap->scrollY = gRegionMap->cursorPosY * 8 - 0x44; - gRegionMap->zoomedCursorPosX = gRegionMap->cursorPosX; - gRegionMap->zoomedCursorPosY = gRegionMap->cursorPosY; - CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0); + sRegionMap->scrollX = sRegionMap->cursorPosX * 8 - 0x34; + sRegionMap->scrollY = sRegionMap->cursorPosY * 8 - 0x44; + sRegionMap->zoomedCursorPosX = sRegionMap->cursorPosX; + sRegionMap->zoomedCursorPosY = sRegionMap->cursorPosY; + CalcZoomScrollParams(sRegionMap->scrollX, sRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0); } break; case 7: GetPositionOfCursorWithinMapSec(); UpdateRegionMapVideoRegs(); - gRegionMap->cursorSprite = NULL; - gRegionMap->playerIconSprite = NULL; - gRegionMap->cursorMovementFrameCounter = 0; - gRegionMap->blinkPlayerIcon = FALSE; - if (gRegionMap->bgManaged) + sRegionMap->cursorSprite = NULL; + sRegionMap->playerIconSprite = NULL; + sRegionMap->cursorMovementFrameCounter = 0; + sRegionMap->blinkPlayerIcon = FALSE; + if (sRegionMap->bgManaged) { - SetBgAttribute(gRegionMap->bgNum, BG_ATTR_SCREENSIZE, 2); - SetBgAttribute(gRegionMap->bgNum, BG_ATTR_CHARBASEINDEX, gRegionMap->charBaseIdx); - SetBgAttribute(gRegionMap->bgNum, BG_ATTR_MAPBASEINDEX, gRegionMap->mapBaseIdx); - SetBgAttribute(gRegionMap->bgNum, BG_ATTR_WRAPAROUND, 1); - SetBgAttribute(gRegionMap->bgNum, BG_ATTR_PALETTEMODE, 1); + SetBgAttribute(sRegionMap->bgNum, BG_ATTR_SCREENSIZE, 2); + SetBgAttribute(sRegionMap->bgNum, BG_ATTR_CHARBASEINDEX, sRegionMap->charBaseIdx); + SetBgAttribute(sRegionMap->bgNum, BG_ATTR_MAPBASEINDEX, sRegionMap->mapBaseIdx); + SetBgAttribute(sRegionMap->bgNum, BG_ATTR_WRAPAROUND, 1); + SetBgAttribute(sRegionMap->bgNum, BG_ATTR_PALETTEMODE, 1); } - gRegionMap->initStep++; + sRegionMap->initStep++; return FALSE; default: return FALSE; } - gRegionMap->initStep++; + sRegionMap->initStep++; return TRUE; } @@ -635,23 +629,23 @@ void BlendRegionMap(u16 color, u32 coeff) void FreeRegionMapIconResources(void) { - if (gRegionMap->cursorSprite != NULL) + if (sRegionMap->cursorSprite != NULL) { - DestroySprite(gRegionMap->cursorSprite); - FreeSpriteTilesByTag(gRegionMap->cursorTileTag); - FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag); + DestroySprite(sRegionMap->cursorSprite); + FreeSpriteTilesByTag(sRegionMap->cursorTileTag); + FreeSpritePaletteByTag(sRegionMap->cursorPaletteTag); } - if (gRegionMap->playerIconSprite != NULL) + if (sRegionMap->playerIconSprite != NULL) { - DestroySprite(gRegionMap->playerIconSprite); - FreeSpriteTilesByTag(gRegionMap->playerIconTileTag); - FreeSpritePaletteByTag(gRegionMap->playerIconPaletteTag); + DestroySprite(sRegionMap->playerIconSprite); + FreeSpriteTilesByTag(sRegionMap->playerIconTileTag); + FreeSpritePaletteByTag(sRegionMap->playerIconPaletteTag); } } u8 DoRegionMapInputCallback(void) { - return gRegionMap->inputCallback(); + return sRegionMap->inputCallback(); } static u8 ProcessRegionMapInput_Full(void) @@ -659,26 +653,26 @@ static u8 ProcessRegionMapInput_Full(void) u8 input; input = MAP_INPUT_NONE; - gRegionMap->cursorDeltaX = 0; - gRegionMap->cursorDeltaY = 0; - if (JOY_HELD(DPAD_UP) && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN) + sRegionMap->cursorDeltaX = 0; + sRegionMap->cursorDeltaY = 0; + if (JOY_HELD(DPAD_UP) && sRegionMap->cursorPosY > MAPCURSOR_Y_MIN) { - gRegionMap->cursorDeltaY = -1; + sRegionMap->cursorDeltaY = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_DOWN) && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX) + if (JOY_HELD(DPAD_DOWN) && sRegionMap->cursorPosY < MAPCURSOR_Y_MAX) { - gRegionMap->cursorDeltaY = +1; + sRegionMap->cursorDeltaY = +1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_LEFT) && gRegionMap->cursorPosX > MAPCURSOR_X_MIN) + if (JOY_HELD(DPAD_LEFT) && sRegionMap->cursorPosX > MAPCURSOR_X_MIN) { - gRegionMap->cursorDeltaX = -1; + sRegionMap->cursorDeltaX = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_RIGHT) && gRegionMap->cursorPosX < MAPCURSOR_X_MAX) + if (JOY_HELD(DPAD_RIGHT) && sRegionMap->cursorPosX < MAPCURSOR_X_MAX) { - gRegionMap->cursorDeltaX = +1; + sRegionMap->cursorDeltaX = +1; input = MAP_INPUT_MOVE_START; } if (JOY_NEW(A_BUTTON)) @@ -691,8 +685,8 @@ static u8 ProcessRegionMapInput_Full(void) } if (input == MAP_INPUT_MOVE_START) { - gRegionMap->cursorMovementFrameCounter = 4; - gRegionMap->inputCallback = MoveRegionMapCursor_Full; + sRegionMap->cursorMovementFrameCounter = 4; + sRegionMap->inputCallback = MoveRegionMapCursor_Full; } return input; } @@ -701,35 +695,35 @@ static u8 MoveRegionMapCursor_Full(void) { u16 mapSecId; - if (gRegionMap->cursorMovementFrameCounter != 0) + if (sRegionMap->cursorMovementFrameCounter != 0) return MAP_INPUT_MOVE_CONT; - if (gRegionMap->cursorDeltaX > 0) + if (sRegionMap->cursorDeltaX > 0) { - gRegionMap->cursorPosX++; + sRegionMap->cursorPosX++; } - if (gRegionMap->cursorDeltaX < 0) + if (sRegionMap->cursorDeltaX < 0) { - gRegionMap->cursorPosX--; + sRegionMap->cursorPosX--; } - if (gRegionMap->cursorDeltaY > 0) + if (sRegionMap->cursorDeltaY > 0) { - gRegionMap->cursorPosY++; + sRegionMap->cursorPosY++; } - if (gRegionMap->cursorDeltaY < 0) + if (sRegionMap->cursorDeltaY < 0) { - gRegionMap->cursorPosY--; + sRegionMap->cursorPosY--; } - mapSecId = GetMapSecIdAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY); - gRegionMap->mapSecType = GetMapsecType(mapSecId); - if (mapSecId != gRegionMap->mapSecId) + mapSecId = GetMapSecIdAt(sRegionMap->cursorPosX, sRegionMap->cursorPosY); + sRegionMap->mapSecType = GetMapsecType(mapSecId); + if (mapSecId != sRegionMap->mapSecId) { - gRegionMap->mapSecId = mapSecId; - GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, MAP_NAME_LENGTH); + sRegionMap->mapSecId = mapSecId; + GetMapName(sRegionMap->mapSecName, sRegionMap->mapSecId, MAP_NAME_LENGTH); } GetPositionOfCursorWithinMapSec(); - gRegionMap->inputCallback = ProcessRegionMapInput_Full; + sRegionMap->inputCallback = ProcessRegionMapInput_Full; return MAP_INPUT_MOVE_END; } @@ -738,26 +732,26 @@ static u8 ProcessRegionMapInput_Zoomed(void) u8 input; input = MAP_INPUT_NONE; - gRegionMap->zoomedCursorDeltaX = 0; - gRegionMap->zoomedCursorDeltaY = 0; - if (JOY_HELD(DPAD_UP) && gRegionMap->scrollY > -0x34) + sRegionMap->zoomedCursorDeltaX = 0; + sRegionMap->zoomedCursorDeltaY = 0; + if (JOY_HELD(DPAD_UP) && sRegionMap->scrollY > -0x34) { - gRegionMap->zoomedCursorDeltaY = -1; + sRegionMap->zoomedCursorDeltaY = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_DOWN) && gRegionMap->scrollY < 0x3c) + if (JOY_HELD(DPAD_DOWN) && sRegionMap->scrollY < 0x3c) { - gRegionMap->zoomedCursorDeltaY = +1; + sRegionMap->zoomedCursorDeltaY = +1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_LEFT) && gRegionMap->scrollX > -0x2c) + if (JOY_HELD(DPAD_LEFT) && sRegionMap->scrollX > -0x2c) { - gRegionMap->zoomedCursorDeltaX = -1; + sRegionMap->zoomedCursorDeltaX = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_RIGHT) && gRegionMap->scrollX < 0xac) + if (JOY_HELD(DPAD_RIGHT) && sRegionMap->scrollX < 0xac) { - gRegionMap->zoomedCursorDeltaX = +1; + sRegionMap->zoomedCursorDeltaX = +1; input = MAP_INPUT_MOVE_START; } if (JOY_NEW(A_BUTTON)) @@ -770,8 +764,8 @@ static u8 ProcessRegionMapInput_Zoomed(void) } if (input == MAP_INPUT_MOVE_START) { - gRegionMap->inputCallback = MoveRegionMapCursor_Zoomed; - gRegionMap->zoomedCursorMovementFrameCounter = 0; + sRegionMap->inputCallback = MoveRegionMapCursor_Zoomed; + sRegionMap->zoomedCursorMovementFrameCounter = 0; } return input; } @@ -782,29 +776,29 @@ static u8 MoveRegionMapCursor_Zoomed(void) u16 y; u16 mapSecId; - gRegionMap->scrollY += gRegionMap->zoomedCursorDeltaY; - gRegionMap->scrollX += gRegionMap->zoomedCursorDeltaX; - RegionMap_SetBG2XAndBG2Y(gRegionMap->scrollX, gRegionMap->scrollY); - gRegionMap->zoomedCursorMovementFrameCounter++; - if (gRegionMap->zoomedCursorMovementFrameCounter == 8) + sRegionMap->scrollY += sRegionMap->zoomedCursorDeltaY; + sRegionMap->scrollX += sRegionMap->zoomedCursorDeltaX; + RegionMap_SetBG2XAndBG2Y(sRegionMap->scrollX, sRegionMap->scrollY); + sRegionMap->zoomedCursorMovementFrameCounter++; + if (sRegionMap->zoomedCursorMovementFrameCounter == 8) { - x = (gRegionMap->scrollX + 0x2c) / 8 + 1; - y = (gRegionMap->scrollY + 0x34) / 8 + 2; - if (x != gRegionMap->zoomedCursorPosX || y != gRegionMap->zoomedCursorPosY) + x = (sRegionMap->scrollX + 0x2c) / 8 + 1; + y = (sRegionMap->scrollY + 0x34) / 8 + 2; + if (x != sRegionMap->zoomedCursorPosX || y != sRegionMap->zoomedCursorPosY) { - gRegionMap->zoomedCursorPosX = x; - gRegionMap->zoomedCursorPosY = y; + sRegionMap->zoomedCursorPosX = x; + sRegionMap->zoomedCursorPosY = y; mapSecId = GetMapSecIdAt(x, y); - gRegionMap->mapSecType = GetMapsecType(mapSecId); - if (mapSecId != gRegionMap->mapSecId) + sRegionMap->mapSecType = GetMapsecType(mapSecId); + if (mapSecId != sRegionMap->mapSecId) { - gRegionMap->mapSecId = mapSecId; - GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, MAP_NAME_LENGTH); + sRegionMap->mapSecId = mapSecId; + GetMapName(sRegionMap->mapSecName, sRegionMap->mapSecId, MAP_NAME_LENGTH); } GetPositionOfCursorWithinMapSec(); } - gRegionMap->zoomedCursorMovementFrameCounter = 0; - gRegionMap->inputCallback = ProcessRegionMapInput_Zoomed; + sRegionMap->zoomedCursorMovementFrameCounter = 0; + sRegionMap->inputCallback = ProcessRegionMapInput_Zoomed; return MAP_INPUT_MOVE_END; } return MAP_INPUT_MOVE_CONT; @@ -812,35 +806,35 @@ static u8 MoveRegionMapCursor_Zoomed(void) void SetRegionMapDataForZoom(void) { - if (gRegionMap->zoomed == FALSE) + if (sRegionMap->zoomed == FALSE) { - gRegionMap->scrollY = 0; - gRegionMap->scrollX = 0; - gRegionMap->unk_040 = 0; - gRegionMap->unk_03c = 0; - gRegionMap->unk_060 = gRegionMap->cursorPosX * 8 - 0x34; - gRegionMap->unk_062 = gRegionMap->cursorPosY * 8 - 0x44; - gRegionMap->unk_044 = (gRegionMap->unk_060 << 8) / 16; - gRegionMap->unk_048 = (gRegionMap->unk_062 << 8) / 16; - gRegionMap->zoomedCursorPosX = gRegionMap->cursorPosX; - gRegionMap->zoomedCursorPosY = gRegionMap->cursorPosY; - gRegionMap->unk_04c = 0x10000; - gRegionMap->unk_050 = -0x800; + sRegionMap->scrollY = 0; + sRegionMap->scrollX = 0; + sRegionMap->unk_040 = 0; + sRegionMap->unk_03c = 0; + sRegionMap->unk_060 = sRegionMap->cursorPosX * 8 - 0x34; + sRegionMap->unk_062 = sRegionMap->cursorPosY * 8 - 0x44; + sRegionMap->unk_044 = (sRegionMap->unk_060 << 8) / 16; + sRegionMap->unk_048 = (sRegionMap->unk_062 << 8) / 16; + sRegionMap->zoomedCursorPosX = sRegionMap->cursorPosX; + sRegionMap->zoomedCursorPosY = sRegionMap->cursorPosY; + sRegionMap->unk_04c = 0x10000; + sRegionMap->unk_050 = -0x800; } else { - gRegionMap->unk_03c = gRegionMap->scrollX * 0x100; - gRegionMap->unk_040 = gRegionMap->scrollY * 0x100; - gRegionMap->unk_060 = 0; - gRegionMap->unk_062 = 0; - gRegionMap->unk_044 = -(gRegionMap->unk_03c / 16); - gRegionMap->unk_048 = -(gRegionMap->unk_040 / 16); - gRegionMap->cursorPosX = gRegionMap->zoomedCursorPosX; - gRegionMap->cursorPosY = gRegionMap->zoomedCursorPosY; - gRegionMap->unk_04c = 0x8000; - gRegionMap->unk_050 = 0x800; + sRegionMap->unk_03c = sRegionMap->scrollX * 0x100; + sRegionMap->unk_040 = sRegionMap->scrollY * 0x100; + sRegionMap->unk_060 = 0; + sRegionMap->unk_062 = 0; + sRegionMap->unk_044 = -(sRegionMap->unk_03c / 16); + sRegionMap->unk_048 = -(sRegionMap->unk_040 / 16); + sRegionMap->cursorPosX = sRegionMap->zoomedCursorPosX; + sRegionMap->cursorPosY = sRegionMap->zoomedCursorPosY; + sRegionMap->unk_04c = 0x8000; + sRegionMap->unk_050 = 0x800; } - gRegionMap->unk_06e = 0; + sRegionMap->unk_06e = 0; FreeRegionMapCursorSprite(); HideRegionMapPlayerIcon(); } @@ -849,60 +843,60 @@ bool8 UpdateRegionMapZoom(void) { bool8 retVal; - if (gRegionMap->unk_06e >= 16) + if (sRegionMap->unk_06e >= 16) { return FALSE; } - gRegionMap->unk_06e++; - if (gRegionMap->unk_06e == 16) + sRegionMap->unk_06e++; + if (sRegionMap->unk_06e == 16) { - gRegionMap->unk_044 = 0; - gRegionMap->unk_048 = 0; - gRegionMap->scrollX = gRegionMap->unk_060; - gRegionMap->scrollY = gRegionMap->unk_062; - gRegionMap->unk_04c = (gRegionMap->zoomed == FALSE) ? (128 << 8) : (256 << 8); - gRegionMap->zoomed = !gRegionMap->zoomed; - gRegionMap->inputCallback = (gRegionMap->zoomed == FALSE) ? ProcessRegionMapInput_Full : ProcessRegionMapInput_Zoomed; - CreateRegionMapCursor(gRegionMap->cursorTileTag, gRegionMap->cursorPaletteTag); + sRegionMap->unk_044 = 0; + sRegionMap->unk_048 = 0; + sRegionMap->scrollX = sRegionMap->unk_060; + sRegionMap->scrollY = sRegionMap->unk_062; + sRegionMap->unk_04c = (sRegionMap->zoomed == FALSE) ? (128 << 8) : (256 << 8); + sRegionMap->zoomed = !sRegionMap->zoomed; + sRegionMap->inputCallback = (sRegionMap->zoomed == FALSE) ? ProcessRegionMapInput_Full : ProcessRegionMapInput_Zoomed; + CreateRegionMapCursor(sRegionMap->cursorTileTag, sRegionMap->cursorPaletteTag); UnhideRegionMapPlayerIcon(); retVal = FALSE; } else { - gRegionMap->unk_03c += gRegionMap->unk_044; - gRegionMap->unk_040 += gRegionMap->unk_048; - gRegionMap->scrollX = gRegionMap->unk_03c >> 8; - gRegionMap->scrollY = gRegionMap->unk_040 >> 8; - gRegionMap->unk_04c += gRegionMap->unk_050; - if ((gRegionMap->unk_044 < 0 && gRegionMap->scrollX < gRegionMap->unk_060) || (gRegionMap->unk_044 > 0 && gRegionMap->scrollX > gRegionMap->unk_060)) + sRegionMap->unk_03c += sRegionMap->unk_044; + sRegionMap->unk_040 += sRegionMap->unk_048; + sRegionMap->scrollX = sRegionMap->unk_03c >> 8; + sRegionMap->scrollY = sRegionMap->unk_040 >> 8; + sRegionMap->unk_04c += sRegionMap->unk_050; + if ((sRegionMap->unk_044 < 0 && sRegionMap->scrollX < sRegionMap->unk_060) || (sRegionMap->unk_044 > 0 && sRegionMap->scrollX > sRegionMap->unk_060)) { - gRegionMap->scrollX = gRegionMap->unk_060; - gRegionMap->unk_044 = 0; + sRegionMap->scrollX = sRegionMap->unk_060; + sRegionMap->unk_044 = 0; } - if ((gRegionMap->unk_048 < 0 && gRegionMap->scrollY < gRegionMap->unk_062) || (gRegionMap->unk_048 > 0 && gRegionMap->scrollY > gRegionMap->unk_062)) + if ((sRegionMap->unk_048 < 0 && sRegionMap->scrollY < sRegionMap->unk_062) || (sRegionMap->unk_048 > 0 && sRegionMap->scrollY > sRegionMap->unk_062)) { - gRegionMap->scrollY = gRegionMap->unk_062; - gRegionMap->unk_048 = 0; + sRegionMap->scrollY = sRegionMap->unk_062; + sRegionMap->unk_048 = 0; } - if (gRegionMap->zoomed == FALSE) + if (sRegionMap->zoomed == FALSE) { - if (gRegionMap->unk_04c < (128 << 8)) + if (sRegionMap->unk_04c < (128 << 8)) { - gRegionMap->unk_04c = (128 << 8); - gRegionMap->unk_050 = 0; + sRegionMap->unk_04c = (128 << 8); + sRegionMap->unk_050 = 0; } } else { - if (gRegionMap->unk_04c > (256 << 8)) + if (sRegionMap->unk_04c > (256 << 8)) { - gRegionMap->unk_04c = (256 << 8); - gRegionMap->unk_050 = 0; + sRegionMap->unk_04c = (256 << 8); + sRegionMap->unk_050 = 0; } } retVal = TRUE; } - CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, gRegionMap->unk_04c >> 8, gRegionMap->unk_04c >> 8, 0); + CalcZoomScrollParams(sRegionMap->scrollX, sRegionMap->scrollY, 0x38, 0x48, sRegionMap->unk_04c >> 8, sRegionMap->unk_04c >> 8, 0); return retVal; } @@ -913,42 +907,42 @@ static void CalcZoomScrollParams(s16 scrollX, s16 scrollY, s16 c, s16 d, u16 e, s32 var3; s32 var4; - gRegionMap->bg2pa = e * gSineTable[rotation + 64] >> 8; - gRegionMap->bg2pc = e * -gSineTable[rotation] >> 8; - gRegionMap->bg2pb = f * gSineTable[rotation] >> 8; - gRegionMap->bg2pd = f * gSineTable[rotation + 64] >> 8; + sRegionMap->bg2pa = e * gSineTable[rotation + 64] >> 8; + sRegionMap->bg2pc = e * -gSineTable[rotation] >> 8; + sRegionMap->bg2pb = f * gSineTable[rotation] >> 8; + sRegionMap->bg2pd = f * gSineTable[rotation + 64] >> 8; var1 = (scrollX << 8) + (c << 8); - var2 = d * gRegionMap->bg2pb + gRegionMap->bg2pa * c; - gRegionMap->bg2x = var1 - var2; + var2 = d * sRegionMap->bg2pb + sRegionMap->bg2pa * c; + sRegionMap->bg2x = var1 - var2; var3 = (scrollY << 8) + (d << 8); - var4 = gRegionMap->bg2pd * d + gRegionMap->bg2pc * c; - gRegionMap->bg2y = var3 - var4; + var4 = sRegionMap->bg2pd * d + sRegionMap->bg2pc * c; + sRegionMap->bg2y = var3 - var4; - gRegionMap->needUpdateVideoRegs = TRUE; + sRegionMap->needUpdateVideoRegs = TRUE; } static void RegionMap_SetBG2XAndBG2Y(s16 x, s16 y) { - gRegionMap->bg2x = (x << 8) + 0x1c00; - gRegionMap->bg2y = (y << 8) + 0x2400; - gRegionMap->needUpdateVideoRegs = TRUE; + sRegionMap->bg2x = (x << 8) + 0x1c00; + sRegionMap->bg2y = (y << 8) + 0x2400; + sRegionMap->needUpdateVideoRegs = TRUE; } void UpdateRegionMapVideoRegs(void) { - if (gRegionMap->needUpdateVideoRegs) + if (sRegionMap->needUpdateVideoRegs) { - SetGpuReg(REG_OFFSET_BG2PA, gRegionMap->bg2pa); - SetGpuReg(REG_OFFSET_BG2PB, gRegionMap->bg2pb); - SetGpuReg(REG_OFFSET_BG2PC, gRegionMap->bg2pc); - SetGpuReg(REG_OFFSET_BG2PD, gRegionMap->bg2pd); - SetGpuReg(REG_OFFSET_BG2X_L, gRegionMap->bg2x); - SetGpuReg(REG_OFFSET_BG2X_H, gRegionMap->bg2x >> 16); - SetGpuReg(REG_OFFSET_BG2Y_L, gRegionMap->bg2y); - SetGpuReg(REG_OFFSET_BG2Y_H, gRegionMap->bg2y >> 16); - gRegionMap->needUpdateVideoRegs = FALSE; + SetGpuReg(REG_OFFSET_BG2PA, sRegionMap->bg2pa); + SetGpuReg(REG_OFFSET_BG2PB, sRegionMap->bg2pb); + SetGpuReg(REG_OFFSET_BG2PC, sRegionMap->bg2pc); + SetGpuReg(REG_OFFSET_BG2PD, sRegionMap->bg2pd); + SetGpuReg(REG_OFFSET_BG2X_L, sRegionMap->bg2x); + SetGpuReg(REG_OFFSET_BG2X_H, sRegionMap->bg2x >> 16); + SetGpuReg(REG_OFFSET_BG2Y_L, sRegionMap->bg2y); + SetGpuReg(REG_OFFSET_BG2Y_H, sRegionMap->bg2y >> 16); + sRegionMap->needUpdateVideoRegs = FALSE; } } @@ -956,10 +950,10 @@ void PokedexAreaScreen_UpdateRegionMapVariablesAndVideoRegs(s16 x, s16 y) { CalcZoomScrollParams(x, y, 0x38, 0x48, 0x100, 0x100, 0); UpdateRegionMapVideoRegs(); - if (gRegionMap->playerIconSprite != NULL) + if (sRegionMap->playerIconSprite != NULL) { - gRegionMap->playerIconSprite->x2 = -x; - gRegionMap->playerIconSprite->y2 = -y; + sRegionMap->playerIconSprite->x2 = -x; + sRegionMap->playerIconSprite->y2 = -y; } } @@ -1002,22 +996,22 @@ static void InitMapBasedOnPlayerLocation(void) case MAP_TYPE_ROUTE: case MAP_TYPE_UNDERWATER: case MAP_TYPE_OCEAN_ROUTE: - gRegionMap->mapSecId = gMapHeader.regionMapSectionId; - gRegionMap->playerIsInCave = FALSE; + sRegionMap->mapSecId = gMapHeader.regionMapSectionId; + sRegionMap->playerIsInCave = FALSE; mapWidth = gMapHeader.mapLayout->width; mapHeight = gMapHeader.mapLayout->height; x = gSaveBlock1Ptr->pos.x; y = gSaveBlock1Ptr->pos.y; - if (gRegionMap->mapSecId == MAPSEC_UNDERWATER_SEAFLOOR_CAVERN || gRegionMap->mapSecId == MAPSEC_UNDERWATER_MARINE_CAVE) - gRegionMap->playerIsInCave = TRUE; + if (sRegionMap->mapSecId == MAPSEC_UNDERWATER_SEAFLOOR_CAVERN || sRegionMap->mapSecId == MAPSEC_UNDERWATER_MARINE_CAVE) + sRegionMap->playerIsInCave = TRUE; break; case MAP_TYPE_UNDERGROUND: case MAP_TYPE_UNKNOWN: if (gMapHeader.allowEscaping) { mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum); - gRegionMap->mapSecId = mapHeader->regionMapSectionId; - gRegionMap->playerIsInCave = TRUE; + sRegionMap->mapSecId = mapHeader->regionMapSectionId; + sRegionMap->playerIsInCave = TRUE; mapWidth = mapHeader->mapLayout->width; mapHeight = mapHeader->mapLayout->height; x = gSaveBlock1Ptr->escapeWarp.x; @@ -1025,8 +1019,8 @@ static void InitMapBasedOnPlayerLocation(void) } else { - gRegionMap->mapSecId = gMapHeader.regionMapSectionId; - gRegionMap->playerIsInCave = TRUE; + sRegionMap->mapSecId = gMapHeader.regionMapSectionId; + sRegionMap->playerIsInCave = TRUE; mapWidth = 1; mapHeight = 1; x = 1; @@ -1035,16 +1029,16 @@ static void InitMapBasedOnPlayerLocation(void) break; case MAP_TYPE_SECRET_BASE: mapHeader = Overworld_GetMapHeaderByGroupAndId((u16)gSaveBlock1Ptr->dynamicWarp.mapGroup, (u16)gSaveBlock1Ptr->dynamicWarp.mapNum); - gRegionMap->mapSecId = mapHeader->regionMapSectionId; - gRegionMap->playerIsInCave = TRUE; + sRegionMap->mapSecId = mapHeader->regionMapSectionId; + sRegionMap->playerIsInCave = TRUE; mapWidth = mapHeader->mapLayout->width; mapHeight = mapHeader->mapLayout->height; x = gSaveBlock1Ptr->dynamicWarp.x; y = gSaveBlock1Ptr->dynamicWarp.y; break; case MAP_TYPE_INDOOR: - gRegionMap->mapSecId = gMapHeader.regionMapSectionId; - if (gRegionMap->mapSecId != MAPSEC_DYNAMIC) + sRegionMap->mapSecId = gMapHeader.regionMapSectionId; + if (sRegionMap->mapSecId != MAPSEC_DYNAMIC) { warp = &gSaveBlock1Ptr->escapeWarp; mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum); @@ -1053,13 +1047,13 @@ static void InitMapBasedOnPlayerLocation(void) { warp = &gSaveBlock1Ptr->dynamicWarp; mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum); - gRegionMap->mapSecId = mapHeader->regionMapSectionId; + sRegionMap->mapSecId = mapHeader->regionMapSectionId; } - if (IsPlayerInAquaHideout(gRegionMap->mapSecId)) - gRegionMap->playerIsInCave = TRUE; + if (IsPlayerInAquaHideout(sRegionMap->mapSecId)) + sRegionMap->playerIsInCave = TRUE; else - gRegionMap->playerIsInCave = FALSE; + sRegionMap->playerIsInCave = FALSE; mapWidth = mapHeader->mapLayout->width; mapHeight = mapHeader->mapLayout->height; @@ -1070,29 +1064,29 @@ static void InitMapBasedOnPlayerLocation(void) xOnMap = x; - dimensionScale = mapWidth / gRegionMapEntries[gRegionMap->mapSecId].width; + dimensionScale = mapWidth / gRegionMapEntries[sRegionMap->mapSecId].width; if (dimensionScale == 0) { dimensionScale = 1; } x /= dimensionScale; - if (x >= gRegionMapEntries[gRegionMap->mapSecId].width) + if (x >= gRegionMapEntries[sRegionMap->mapSecId].width) { - x = gRegionMapEntries[gRegionMap->mapSecId].width - 1; + x = gRegionMapEntries[sRegionMap->mapSecId].width - 1; } - dimensionScale = mapHeight / gRegionMapEntries[gRegionMap->mapSecId].height; + dimensionScale = mapHeight / gRegionMapEntries[sRegionMap->mapSecId].height; if (dimensionScale == 0) { dimensionScale = 1; } y /= dimensionScale; - if (y >= gRegionMapEntries[gRegionMap->mapSecId].height) + if (y >= gRegionMapEntries[sRegionMap->mapSecId].height) { - y = gRegionMapEntries[gRegionMap->mapSecId].height - 1; + y = gRegionMapEntries[sRegionMap->mapSecId].height - 1; } - switch (gRegionMap->mapSecId) + switch (sRegionMap->mapSecId) { case MAPSEC_ROUTE_114: if (y != 0) @@ -1122,11 +1116,11 @@ static void InitMapBasedOnPlayerLocation(void) x++; break; case MAPSEC_UNDERWATER_MARINE_CAVE: - GetMarineCaveCoords(&gRegionMap->cursorPosX, &gRegionMap->cursorPosY); + GetMarineCaveCoords(&sRegionMap->cursorPosX, &sRegionMap->cursorPosY); return; } - gRegionMap->cursorPosX = gRegionMapEntries[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; - gRegionMap->cursorPosY = gRegionMapEntries[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; + sRegionMap->cursorPosX = gRegionMapEntries[sRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; + sRegionMap->cursorPosY = gRegionMapEntries[sRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; } static void RegionMap_InitializeStateBasedOnSSTidalLocation(void) @@ -1145,40 +1139,40 @@ static void RegionMap_InitializeStateBasedOnSSTidalLocation(void) switch (GetSSTidalLocation(&mapGroup, &mapNum, &xOnMap, &yOnMap)) { case SS_TIDAL_LOCATION_SLATEPORT: - gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY; + sRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY; break; case SS_TIDAL_LOCATION_LILYCOVE: - gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY; + sRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY; break; case SS_TIDAL_LOCATION_ROUTE124: - gRegionMap->mapSecId = MAPSEC_ROUTE_124; + sRegionMap->mapSecId = MAPSEC_ROUTE_124; break; case SS_TIDAL_LOCATION_ROUTE131: - gRegionMap->mapSecId = MAPSEC_ROUTE_131; + sRegionMap->mapSecId = MAPSEC_ROUTE_131; break; default: case SS_TIDAL_LOCATION_CURRENTS: mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum); - gRegionMap->mapSecId = mapHeader->regionMapSectionId; - dimensionScale = mapHeader->mapLayout->width / gRegionMapEntries[gRegionMap->mapSecId].width; + sRegionMap->mapSecId = mapHeader->regionMapSectionId; + dimensionScale = mapHeader->mapLayout->width / gRegionMapEntries[sRegionMap->mapSecId].width; if (dimensionScale == 0) dimensionScale = 1; x = xOnMap / dimensionScale; - if (x >= gRegionMapEntries[gRegionMap->mapSecId].width) - x = gRegionMapEntries[gRegionMap->mapSecId].width - 1; + if (x >= gRegionMapEntries[sRegionMap->mapSecId].width) + x = gRegionMapEntries[sRegionMap->mapSecId].width - 1; - dimensionScale = mapHeader->mapLayout->height / gRegionMapEntries[gRegionMap->mapSecId].height; + dimensionScale = mapHeader->mapLayout->height / gRegionMapEntries[sRegionMap->mapSecId].height; if (dimensionScale == 0) dimensionScale = 1; y = yOnMap / dimensionScale; - if (y >= gRegionMapEntries[gRegionMap->mapSecId].height) - y = gRegionMapEntries[gRegionMap->mapSecId].height - 1; + if (y >= gRegionMapEntries[sRegionMap->mapSecId].height) + y = gRegionMapEntries[sRegionMap->mapSecId].height - 1; break; } - gRegionMap->playerIsInCave = FALSE; - gRegionMap->cursorPosX = gRegionMapEntries[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; - gRegionMap->cursorPosY = gRegionMapEntries[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; + sRegionMap->playerIsInCave = FALSE; + sRegionMap->cursorPosX = gRegionMapEntries[sRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; + sRegionMap->cursorPosY = gRegionMapEntries[sRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; } static u8 GetMapsecType(u16 mapSecId) @@ -1306,20 +1300,20 @@ static void GetPositionOfCursorWithinMapSec(void) u16 y; u16 posWithinMapSec; - if (gRegionMap->mapSecId == MAPSEC_NONE) + if (sRegionMap->mapSecId == MAPSEC_NONE) { - gRegionMap->posWithinMapSec = 0; + sRegionMap->posWithinMapSec = 0; return; } - if (!gRegionMap->zoomed) + if (!sRegionMap->zoomed) { - x = gRegionMap->cursorPosX; - y = gRegionMap->cursorPosY; + x = sRegionMap->cursorPosX; + y = sRegionMap->cursorPosY; } else { - x = gRegionMap->zoomedCursorPosX; - y = gRegionMap->zoomedCursorPosY; + x = sRegionMap->zoomedCursorPosX; + y = sRegionMap->zoomedCursorPosY; } posWithinMapSec = 0; while (1) @@ -1339,13 +1333,13 @@ static void GetPositionOfCursorWithinMapSec(void) else { x--; - if (GetMapSecIdAt(x, y) == gRegionMap->mapSecId) + if (GetMapSecIdAt(x, y) == sRegionMap->mapSecId) { posWithinMapSec++; } } } - gRegionMap->posWithinMapSec = posWithinMapSec; + sRegionMap->posWithinMapSec = posWithinMapSec; } static bool8 RegionMap_IsMapSecIdInNextRow(u16 y) @@ -1358,7 +1352,7 @@ static bool8 RegionMap_IsMapSecIdInNextRow(u16 y) } for (x = MAPCURSOR_X_MIN; x <= MAPCURSOR_X_MAX; x++) { - if (GetMapSecIdAt(x, y) == gRegionMap->mapSecId) + if (GetMapSecIdAt(x, y) == sRegionMap->mapSecId) { return TRUE; } @@ -1368,11 +1362,11 @@ static bool8 RegionMap_IsMapSecIdInNextRow(u16 y) static void SpriteCB_CursorMapFull(struct Sprite *sprite) { - if (gRegionMap->cursorMovementFrameCounter != 0) + if (sRegionMap->cursorMovementFrameCounter != 0) { - sprite->x += 2 * gRegionMap->cursorDeltaX; - sprite->y += 2 * gRegionMap->cursorDeltaY; - gRegionMap->cursorMovementFrameCounter--; + sprite->x += 2 * sRegionMap->cursorDeltaX; + sprite->y += 2 * sRegionMap->cursorDeltaY; + sRegionMap->cursorMovementFrameCounter--; } } @@ -1392,20 +1386,20 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) template = sRegionMapCursorSpriteTemplate; sheet.tag = tileTag; template.tileTag = tileTag; - gRegionMap->cursorTileTag = tileTag; + sRegionMap->cursorTileTag = tileTag; palette.tag = paletteTag; template.paletteTag = paletteTag; - gRegionMap->cursorPaletteTag = paletteTag; - if (!gRegionMap->zoomed) + sRegionMap->cursorPaletteTag = paletteTag; + if (!sRegionMap->zoomed) { - sheet.data = gRegionMap->cursorSmallImage; - sheet.size = sizeof(gRegionMap->cursorSmallImage); + sheet.data = sRegionMap->cursorSmallImage; + sheet.size = sizeof(sRegionMap->cursorSmallImage); template.callback = SpriteCB_CursorMapFull; } else { - sheet.data = gRegionMap->cursorLargeImage; - sheet.size = sizeof(gRegionMap->cursorLargeImage); + sheet.data = sRegionMap->cursorLargeImage; + sheet.size = sizeof(sRegionMap->cursorLargeImage); template.callback = SpriteCB_CursorMapZoomed; } LoadSpriteSheet(&sheet); @@ -1413,46 +1407,46 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) spriteId = CreateSprite(&template, 0x38, 0x48, 0); if (spriteId != MAX_SPRITES) { - gRegionMap->cursorSprite = &gSprites[spriteId]; - if (gRegionMap->zoomed == TRUE) + sRegionMap->cursorSprite = &gSprites[spriteId]; + if (sRegionMap->zoomed == TRUE) { - gRegionMap->cursorSprite->oam.size = SPRITE_SIZE(32x32); - gRegionMap->cursorSprite->x -= 8; - gRegionMap->cursorSprite->y -= 8; - StartSpriteAnim(gRegionMap->cursorSprite, 1); + sRegionMap->cursorSprite->oam.size = SPRITE_SIZE(32x32); + sRegionMap->cursorSprite->x -= 8; + sRegionMap->cursorSprite->y -= 8; + StartSpriteAnim(sRegionMap->cursorSprite, 1); } else { - gRegionMap->cursorSprite->oam.size = SPRITE_SIZE(16x16); - gRegionMap->cursorSprite->x = 8 * gRegionMap->cursorPosX + 4; - gRegionMap->cursorSprite->y = 8 * gRegionMap->cursorPosY + 4; + sRegionMap->cursorSprite->oam.size = SPRITE_SIZE(16x16); + sRegionMap->cursorSprite->x = 8 * sRegionMap->cursorPosX + 4; + sRegionMap->cursorSprite->y = 8 * sRegionMap->cursorPosY + 4; } - gRegionMap->cursorSprite->data[1] = 2; - gRegionMap->cursorSprite->data[2] = (IndexOfSpritePaletteTag(paletteTag) << 4) + 0x101; - gRegionMap->cursorSprite->data[3] = TRUE; + sRegionMap->cursorSprite->data[1] = 2; + sRegionMap->cursorSprite->data[2] = (IndexOfSpritePaletteTag(paletteTag) << 4) + 0x101; + sRegionMap->cursorSprite->data[3] = TRUE; } } static void FreeRegionMapCursorSprite(void) { - if (gRegionMap->cursorSprite != NULL) + if (sRegionMap->cursorSprite != NULL) { - DestroySprite(gRegionMap->cursorSprite); - FreeSpriteTilesByTag(gRegionMap->cursorTileTag); - FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag); + DestroySprite(sRegionMap->cursorSprite); + FreeSpriteTilesByTag(sRegionMap->cursorTileTag); + FreeSpritePaletteByTag(sRegionMap->cursorPaletteTag); } } // Unused static void SetUnkCursorSpriteData(void) { - gRegionMap->cursorSprite->data[3] = TRUE; + sRegionMap->cursorSprite->data[3] = TRUE; } // Unused static void ClearUnkCursorSpriteData(void) { - gRegionMap->cursorSprite->data[3] = FALSE; + sRegionMap->cursorSprite->data[3] = FALSE; } void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) @@ -1464,7 +1458,7 @@ void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) if (IsEventIslandMapSecId(gMapHeader.regionMapSectionId)) { - gRegionMap->playerIconSprite = NULL; + sRegionMap->playerIconSprite = NULL; return; } if (gSaveBlock2Ptr->playerGender == FEMALE) @@ -1475,75 +1469,73 @@ void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) LoadSpriteSheet(&sheet); LoadSpritePalette(&palette); spriteId = CreateSprite(&template, 0, 0, 1); - gRegionMap->playerIconSprite = &gSprites[spriteId]; - if (!gRegionMap->zoomed) + sRegionMap->playerIconSprite = &gSprites[spriteId]; + if (!sRegionMap->zoomed) { - gRegionMap->playerIconSprite->x = gRegionMap->playerIconSpritePosX * 8 + 4; - gRegionMap->playerIconSprite->y = gRegionMap->playerIconSpritePosY * 8 + 4; - gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapFull; + sRegionMap->playerIconSprite->x = sRegionMap->playerIconSpritePosX * 8 + 4; + sRegionMap->playerIconSprite->y = sRegionMap->playerIconSpritePosY * 8 + 4; + sRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapFull; } else { - gRegionMap->playerIconSprite->x = gRegionMap->playerIconSpritePosX * 16 - 0x30; - gRegionMap->playerIconSprite->y = gRegionMap->playerIconSpritePosY * 16 - 0x42; - gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapZoomed; + sRegionMap->playerIconSprite->x = sRegionMap->playerIconSpritePosX * 16 - 0x30; + sRegionMap->playerIconSprite->y = sRegionMap->playerIconSpritePosY * 16 - 0x42; + sRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapZoomed; } } static void HideRegionMapPlayerIcon(void) { - if (gRegionMap->playerIconSprite != NULL) + if (sRegionMap->playerIconSprite != NULL) { - gRegionMap->playerIconSprite->invisible = TRUE; - gRegionMap->playerIconSprite->callback = SpriteCallbackDummy; + sRegionMap->playerIconSprite->invisible = TRUE; + sRegionMap->playerIconSprite->callback = SpriteCallbackDummy; } } static void UnhideRegionMapPlayerIcon(void) { - if (gRegionMap->playerIconSprite != NULL) + if (sRegionMap->playerIconSprite != NULL) { - if (gRegionMap->zoomed == TRUE) + if (sRegionMap->zoomed == TRUE) { - gRegionMap->playerIconSprite->x = gRegionMap->playerIconSpritePosX * 16 - 0x30; - gRegionMap->playerIconSprite->y = gRegionMap->playerIconSpritePosY * 16 - 0x42; - gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapZoomed; - gRegionMap->playerIconSprite->invisible = FALSE; + sRegionMap->playerIconSprite->x = sRegionMap->playerIconSpritePosX * 16 - 0x30; + sRegionMap->playerIconSprite->y = sRegionMap->playerIconSpritePosY * 16 - 0x42; + sRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapZoomed; + sRegionMap->playerIconSprite->invisible = FALSE; } else { - gRegionMap->playerIconSprite->x = gRegionMap->playerIconSpritePosX * 8 + 4; - gRegionMap->playerIconSprite->y = gRegionMap->playerIconSpritePosY * 8 + 4; - gRegionMap->playerIconSprite->x2 = 0; - gRegionMap->playerIconSprite->y2 = 0; - gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapFull; - gRegionMap->playerIconSprite->invisible = FALSE; + sRegionMap->playerIconSprite->x = sRegionMap->playerIconSpritePosX * 8 + 4; + sRegionMap->playerIconSprite->y = sRegionMap->playerIconSpritePosY * 8 + 4; + sRegionMap->playerIconSprite->x2 = 0; + sRegionMap->playerIconSprite->y2 = 0; + sRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapFull; + sRegionMap->playerIconSprite->invisible = FALSE; } } } +#define sY data[0] +#define sX data[1] +#define sVisible data[2] +#define sTimer data[7] + static void SpriteCB_PlayerIconMapZoomed(struct Sprite *sprite) { - sprite->x2 = -2 * gRegionMap->scrollX; - sprite->y2 = -2 * gRegionMap->scrollY; - sprite->data[0] = sprite->y + sprite->y2 + sprite->centerToCornerVecY; - sprite->data[1] = sprite->x + sprite->x2 + sprite->centerToCornerVecX; - if (sprite->data[0] < -8 || sprite->data[0] > 0xa8 || sprite->data[1] < -8 || sprite->data[1] > 0xf8) - { - sprite->data[2] = FALSE; - } + sprite->x2 = -2 * sRegionMap->scrollX; + sprite->y2 = -2 * sRegionMap->scrollY; + sprite->sY = sprite->y + sprite->y2 + sprite->centerToCornerVecY; + sprite->sX = sprite->x + sprite->x2 + sprite->centerToCornerVecX; + if (sprite->sY < -8 || sprite->sY > DISPLAY_HEIGHT + 8 || sprite->sX < -8 || sprite->sX > DISPLAY_WIDTH + 8) + sprite->sVisible = FALSE; else - { - sprite->data[2] = TRUE; - } - if (sprite->data[2] == TRUE) - { + sprite->sVisible = TRUE; + + if (sprite->sVisible == TRUE) SpriteCB_PlayerIcon(sprite); - } else - { sprite->invisible = TRUE; - } } static void SpriteCB_PlayerIconMapFull(struct Sprite *sprite) @@ -1553,11 +1545,11 @@ static void SpriteCB_PlayerIconMapFull(struct Sprite *sprite) static void SpriteCB_PlayerIcon(struct Sprite *sprite) { - if (gRegionMap->blinkPlayerIcon) + if (sRegionMap->blinkPlayerIcon) { - if (++sprite->data[7] > 16) + if (++sprite->sTimer > 16) { - sprite->data[7] = 0; + sprite->sTimer = 0; sprite->invisible = sprite->invisible ? FALSE : TRUE; } } @@ -1569,10 +1561,15 @@ static void SpriteCB_PlayerIcon(struct Sprite *sprite) void TrySetPlayerIconBlink(void) { - if (gRegionMap->playerIsInCave) - gRegionMap->blinkPlayerIcon = TRUE; + if (sRegionMap->playerIsInCave) + sRegionMap->blinkPlayerIcon = TRUE; } +#undef sY +#undef sX +#undef sVisible +#undef sTimer + u8 *GetMapName(u8 *dest, u16 regionMapId, u16 padLength) { u8 *str; @@ -1637,7 +1634,7 @@ static void GetMapSecDimensions(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *h bool8 IsRegionMapZoomed(void) { - return gRegionMap->zoomed; + return sRegionMap->zoomed; } bool32 IsEventIslandMapSecId(u8 mapSecId) @@ -1715,10 +1712,10 @@ void CB2_OpenFlyMap(void) gMain.state++; break; case 7: - LoadPalette(sRegionMapFramePal, 0x10, 0x20); + LoadPalette(sRegionMapFramePal, 0x10, sizeof(sRegionMapFramePal)); PutWindowTilemap(2); FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized(2, 1, gText_FlyToWhere, 0, 1, 0, NULL); + AddTextPrinterParameterized(2, FONT_NORMAL, gText_FlyToWhere, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); gMain.state++; break; @@ -1784,9 +1781,9 @@ static void DrawFlyDestTextWindow(void) namePrinted = TRUE; ClearStdWindowAndFrameToTransparent(0, FALSE); DrawStdFrameWithCustomTileAndPalette(1, FALSE, 101, 13); - AddTextPrinterParameterized(1, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); + AddTextPrinterParameterized(1, FONT_NORMAL, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); name = sMultiNameFlyDestinations[i].name[sFlyMap->regionMap.posWithinMapSec]; - AddTextPrinterParameterized(1, 1, name, GetStringRightAlignXOffset(1, name, 96), 17, 0, NULL); + AddTextPrinterParameterized(1, FONT_NORMAL, name, GetStringRightAlignXOffset(FONT_NORMAL, name, 96), 17, 0, NULL); ScheduleBgCopyTilemapToVram(0); sDrawFlyDestTextWindow = TRUE; } @@ -1805,7 +1802,7 @@ static void DrawFlyDestTextWindow(void) // Window is already drawn, just empty it FillWindowPixelBuffer(0, PIXEL_FILL(1)); } - AddTextPrinterParameterized(0, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); sDrawFlyDestTextWindow = FALSE; } @@ -1819,7 +1816,7 @@ static void DrawFlyDestTextWindow(void) DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13); } FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); ScheduleBgCopyTilemapToVram(0); sDrawFlyDestTextWindow = FALSE; } @@ -2018,7 +2015,7 @@ static void CB_ExitFlyMap(void) if (sMapHealLocations[sFlyMap->regionMap.mapSecId][2] != 0) SetWarpDestinationToHealLocation(sMapHealLocations[sFlyMap->regionMap.mapSecId][2]); else - SetWarpDestinationToMapWarp(sMapHealLocations[sFlyMap->regionMap.mapSecId][0], sMapHealLocations[sFlyMap->regionMap.mapSecId][1], -1); + SetWarpDestinationToMapWarp(sMapHealLocations[sFlyMap->regionMap.mapSecId][0], sMapHealLocations[sFlyMap->regionMap.mapSecId][1], WARP_ID_NONE); break; } ReturnToFieldFromFlyMapSelect(); @@ -2027,11 +2024,7 @@ static void CB_ExitFlyMap(void) { SetMainCallback2(CB2_ReturnToPartyMenuFromFlyMap); } - if (sFlyMap != NULL) - { - free(sFlyMap); - sFlyMap = NULL; - } + TRY_FREE_AND_SET_NULL(sFlyMap); FreeAllWindowBuffers(); } break; diff --git a/src/reset_save_heap.c b/src/reload_save.c similarity index 71% rename from src/reset_save_heap.c rename to src/reload_save.c index 577a48b0d8..5425d1c7c4 100644 --- a/src/reset_save_heap.c +++ b/src/reload_save.c @@ -8,20 +8,20 @@ #include "overworld.h" #include "malloc.h" -void sub_81700F8(void) +// Reloads the game, continuing from the point of the last save +// Used to gracefully exit after a link connection error +void ReloadSave(void) { - u16 imeBackup; - - imeBackup = REG_IME; + u16 imeBackup = REG_IME; REG_IME = 0; RegisterRamReset(RESET_EWRAM); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK); REG_IME = imeBackup; gMain.inBattle = FALSE; - SetSaveBlocksPointers(sub_815355C()); + SetSaveBlocksPointers(GetSaveBlocksPointersBaseOffset()); ResetMenuAndMonGlobals(); Save_ResetSaveCounters(); - Save_LoadGameData(SAVE_NORMAL); + LoadGameSave(SAVE_NORMAL); if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT) Sav2_ClearSetDefault(); SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index 528a0e52d2..5c93148675 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -80,33 +80,33 @@ static const struct BgTemplate sBgTemplates[] = static const struct WindowTemplate sWindowTemplates[] = { { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 1, - .width = 19, - .height = 9, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 19, + .height = 9, + .paletteNum = 15, .baseBlock = 0x155 }, { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 15, - .width = 27, - .height = 4, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 27, + .height = 4, + .paletteNum = 15, .baseBlock = 0xE9 }, DUMMY_WIN_TEMPLATE }; static const struct WindowTemplate sInputTimeWindow = { - .bg = 0, - .tilemapLeft = 4, - .tilemapTop = 9, - .width = 21, - .height = 2, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 9, + .width = 21, + .height = 2, + .paletteNum = 15, .baseBlock = 0xBF }; @@ -159,7 +159,7 @@ static const struct OamData sOamData_Arrow = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -181,7 +181,7 @@ static const struct SpriteFrameImage sPicTable_Arrow[] = obj_frame_tiles(sArrowRight_Gfx) }; -static const struct SpritePalette sSpritePalette_Arrow = +const struct SpritePalette gSpritePalette_Arrow = { sArrow_Pal, PALTAG_ARROW }; @@ -217,9 +217,9 @@ static const union AnimCmd *const sAnims_Arrow[] = [ARROW_RIGHT] = sAnim_Arrow_Right, }; -static const struct SpriteTemplate sSpriteTemplate_Arrow = +const struct SpriteTemplate gSpriteTemplate_Arrow = { - .tileTag = 0xFFFF, + .tileTag = TAG_NONE, .paletteTag = PALTAG_ARROW, .oam = &sOamData_Arrow, .anims = sAnims_Arrow, @@ -333,14 +333,14 @@ static void CreateCursor(u8 taskId) { u32 spriteId; - LoadSpritePalette(&sSpritePalette_Arrow); + LoadSpritePalette(&gSpritePalette_Arrow); - spriteId = CreateSpriteAtEnd(&sSpriteTemplate_Arrow, 53, 68, 0); + spriteId = CreateSpriteAtEnd(&gSpriteTemplate_Arrow, 53, 68, 0); gSprites[spriteId].callback = SpriteCB_Cursor_UpOrRight; gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].sState = -1; - spriteId = CreateSpriteAtEnd(&sSpriteTemplate_Arrow, 53, 68, 0); + spriteId = CreateSpriteAtEnd(&gSpriteTemplate_Arrow, 53, 68, 0); gSprites[spriteId].callback = SpriteCB_Cursor_Down; gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].sState = -1; @@ -348,7 +348,7 @@ static void CreateCursor(u8 taskId) static void FreeCursorPalette(void) { - FreeSpritePaletteByTag(sSpritePalette_Arrow.tag); + FreeSpritePaletteByTag(gSpritePalette_Arrow.tag); } static void HideChooseTimeWindow(u8 windowId) @@ -362,7 +362,7 @@ static void PrintTime(u8 windowId, u8 x, u8 y, u16 days, u8 hours, u8 minutes, u { u8 *dest = gStringVar4; - // Print days + // Print days ConvertIntToDecimalStringN(gStringVar1, days, STR_CONV_MODE_RIGHT_ALIGN, 4); dest = StringCopy(dest, gStringVar1); dest = StringCopy(dest, gText_Day); @@ -381,14 +381,14 @@ static void PrintTime(u8 windowId, u8 x, u8 y, u16 days, u8 hours, u8 minutes, u ConvertIntToDecimalStringN(gStringVar1, seconds, STR_CONV_MODE_LEADING_ZEROS, 2); dest = StringCopy(dest, gStringVar1); - AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, x, y, TEXT_SKIP_DRAW, NULL); } static void ShowChooseTimeWindow(u8 windowId, u16 days, u8 hours, u8 minutes, u8 seconds) { DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, 0x214, 0xE); PrintTime(windowId, 0, 1, days, hours, minutes, seconds); - AddTextPrinterParameterized(windowId, 1, gText_Confirm2, 126, 1, 0, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_Confirm2, 126, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); } @@ -493,7 +493,7 @@ static void Task_ResetRtc_HandleInput(u8 taskId) { PlaySE(SE_SELECT); PrintTime(tWindowId, 0, 1, tDays, tHours, tMinutes, tSeconds); - CopyWindowToVram(tWindowId, 2); + CopyWindowToVram(tWindowId, COPYWIN_GFX); } } @@ -563,7 +563,7 @@ static void VBlankCB(void) static void ShowMessage(const u8 *str) { DrawDialogFrameWithCustomTileAndPalette(1, FALSE, 0x200, 0xF); - AddTextPrinterParameterized(1, 1, str, 0, 1, 0, NULL); + AddTextPrinterParameterized(1, FONT_NORMAL, str, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); } @@ -578,7 +578,7 @@ static void Task_ShowResetRtcPrompt(u8 taskId) case 0: DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x214, 0xE); - AddTextPrinterParameterized(0, 1, gText_PresentTime, 0, 1, TEXT_SPEED_FF, 0); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_PresentTime, 0, 1, TEXT_SKIP_DRAW, 0); PrintTime( 0, 0, @@ -588,7 +588,7 @@ static void Task_ShowResetRtcPrompt(u8 taskId) gLocalTime.minutes, gLocalTime.seconds); - AddTextPrinterParameterized(0, 1, gText_PreviousTime, 0, 33, TEXT_SPEED_FF, 0); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_PreviousTime, 0, 33, TEXT_SKIP_DRAW, 0); PrintTime( 0, 0, @@ -599,7 +599,7 @@ static void Task_ShowResetRtcPrompt(u8 taskId) gSaveBlock2Ptr->lastBerryTreeUpdate.seconds); ShowMessage(gText_ResetRTCConfirmCancel); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); ScheduleBgCopyTilemapToVram(0); tState++; case 1: @@ -648,7 +648,7 @@ static void Task_ResetRtcScreen(u8 taskId) case MAINSTATE_CHECK_SAVE: if (!gPaletteFade.active) { - if (gSaveFileStatus == SAVE_STATUS_EMPTY + if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT) { ShowMessage(gText_NoSaveFileCantSetTime); diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 58de22f056..84f2480035 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -21,7 +21,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void); static bool8 LoadBattlerSpriteGfx(u8 battlerId); static void CreateBattlerSprite(u8 battlerId); static void CreateHealthboxSprite(u8 battlerId); -static void sub_80A95F4(void); +static void ClearBattleBgCntBaseBlocks(void); void ReshowBattleScreenDummy(void) { @@ -63,7 +63,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) gBattle_BG3_Y = 0; break; case 1: - CpuFastFill(0, (void*)(VRAM), VRAM_SIZE); + CpuFastFill(0, (void *)(VRAM), VRAM_SIZE); break; case 2: LoadBattleTextboxAndBackground(); @@ -158,25 +158,25 @@ static void CB2_ReshowBattleScreenAfterMenu(void) break; default: SetVBlankCallback(VBlankCB_Battle); - sub_80A95F4(); + ClearBattleBgCntBaseBlocks(); BeginHardwarePaletteFade(0xFF, 0, 0x10, 0, 1); gPaletteFade.bufferTransferDisabled = 0; SetMainCallback2(BattleMainCB2); - sub_805EF14(); + FillAroundBattleWindows(); break; } gBattleScripting.reshowMainState++; } -static void sub_80A95F4(void) +static void ClearBattleBgCntBaseBlocks(void) { - struct BGCntrlBitfield *regBgcnt1, *regBgcnt2; + vBgCnt *regBgcnt1, *regBgcnt2; - regBgcnt1 = (struct BGCntrlBitfield *)(®_BG1CNT); + regBgcnt1 = (vBgCnt *)(®_BG1CNT); regBgcnt1->charBaseBlock = 0; - regBgcnt2 = (struct BGCntrlBitfield *)(®_BG2CNT); + regBgcnt2 = (vBgCnt *)(®_BG2CNT); regBgcnt2->charBaseBlock = 0; } @@ -220,9 +220,11 @@ static void CreateBattlerSprite(u8 battler) { if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0) return; + if (gBattleScripting.monCaught) // Don't create opponent sprite if it has been caught. + return; SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); - gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler)); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler)); gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].data[0] = battler; @@ -258,7 +260,7 @@ static void CreateBattlerSprite(u8 battler) return; SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); - gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler)); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler)); gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].data[0] = battler; diff --git a/src/roamer.c b/src/roamer.c index d053e5b255..c17ec490c8 100644 --- a/src/roamer.c +++ b/src/roamer.c @@ -3,53 +3,75 @@ #include "pokemon.h" #include "random.h" #include "roamer.h" -#include "constants/maps.h" + +// Despite having a variable to track it, the roamer is +// hard-coded to only ever be in map group 0 +#define ROAMER_MAP_GROUP 0 enum { - MAP_GRP = 0, // map group - MAP_NUM = 1, // map number + MAP_GRP, // map group + MAP_NUM, // map number }; +#define ROAMER (&gSaveBlock1Ptr->roamer) EWRAM_DATA static u8 sLocationHistory[3][2] = {0}; EWRAM_DATA static u8 sRoamerLocation[2] = {0}; +#define ___ MAP_NUM(UNDEFINED) // For empty spots in the location table + +// Note: There are two potential softlocks that can occur with this table if its maps are +// changed in particular ways. They can be avoided by ensuring the following: +// - There must be at least 2 location sets that start with a different map, +// i.e. every location set cannot start with the same map. This is because of +// the while loop in RoamerMoveToOtherLocationSet. +// - Each location set must have at least 3 unique maps. This is because of +// the while loop in RoamerMove. In this loop the first map in the set is +// ignored, and an additional map is ignored if the roamer was there recently. +// - Additionally, while not a softlock, it's worth noting that if for any +// map in the location table there is not a location set that starts with +// that map then the roamer will be significantly less likely to move away +// from that map when it lands there. static const u8 sRoamerLocations[][6] = { - { MAP_NUM(ROUTE110), MAP_NUM(ROUTE111), MAP_NUM(ROUTE117), MAP_NUM(ROUTE118), MAP_NUM(ROUTE134), 0xFF }, - { MAP_NUM(ROUTE111), MAP_NUM(ROUTE110), MAP_NUM(ROUTE117), MAP_NUM(ROUTE118), 0xFF, 0xFF }, - { MAP_NUM(ROUTE117), MAP_NUM(ROUTE111), MAP_NUM(ROUTE110), MAP_NUM(ROUTE118), 0xFF, 0xFF }, + { MAP_NUM(ROUTE110), MAP_NUM(ROUTE111), MAP_NUM(ROUTE117), MAP_NUM(ROUTE118), MAP_NUM(ROUTE134), ___ }, + { MAP_NUM(ROUTE111), MAP_NUM(ROUTE110), MAP_NUM(ROUTE117), MAP_NUM(ROUTE118), ___, ___ }, + { MAP_NUM(ROUTE117), MAP_NUM(ROUTE111), MAP_NUM(ROUTE110), MAP_NUM(ROUTE118), ___, ___ }, { MAP_NUM(ROUTE118), MAP_NUM(ROUTE117), MAP_NUM(ROUTE110), MAP_NUM(ROUTE111), MAP_NUM(ROUTE119), MAP_NUM(ROUTE123) }, - { MAP_NUM(ROUTE119), MAP_NUM(ROUTE118), MAP_NUM(ROUTE120), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE120), MAP_NUM(ROUTE119), MAP_NUM(ROUTE121), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE121), MAP_NUM(ROUTE120), MAP_NUM(ROUTE122), MAP_NUM(ROUTE123), 0xFF, 0xFF }, - { MAP_NUM(ROUTE122), MAP_NUM(ROUTE121), MAP_NUM(ROUTE123), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE123), MAP_NUM(ROUTE122), MAP_NUM(ROUTE118), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE124), MAP_NUM(ROUTE121), MAP_NUM(ROUTE125), MAP_NUM(ROUTE126), 0xFF, 0xFF }, - { MAP_NUM(ROUTE125), MAP_NUM(ROUTE124), MAP_NUM(ROUTE127), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE126), MAP_NUM(ROUTE124), MAP_NUM(ROUTE127), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE127), MAP_NUM(ROUTE125), MAP_NUM(ROUTE126), MAP_NUM(ROUTE128), 0xFF, 0xFF }, - { MAP_NUM(ROUTE128), MAP_NUM(ROUTE127), MAP_NUM(ROUTE129), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE129), MAP_NUM(ROUTE128), MAP_NUM(ROUTE130), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE130), MAP_NUM(ROUTE129), MAP_NUM(ROUTE131), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE131), MAP_NUM(ROUTE130), MAP_NUM(ROUTE132), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE132), MAP_NUM(ROUTE131), MAP_NUM(ROUTE133), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE133), MAP_NUM(ROUTE132), MAP_NUM(ROUTE134), 0xFF, 0xFF, 0xFF }, - { MAP_NUM(ROUTE134), MAP_NUM(ROUTE133), MAP_NUM(ROUTE110), 0xFF, 0xFF, 0xFF }, - { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, + { MAP_NUM(ROUTE119), MAP_NUM(ROUTE118), MAP_NUM(ROUTE120), ___, ___, ___ }, + { MAP_NUM(ROUTE120), MAP_NUM(ROUTE119), MAP_NUM(ROUTE121), ___, ___, ___ }, + { MAP_NUM(ROUTE121), MAP_NUM(ROUTE120), MAP_NUM(ROUTE122), MAP_NUM(ROUTE123), ___, ___ }, + { MAP_NUM(ROUTE122), MAP_NUM(ROUTE121), MAP_NUM(ROUTE123), ___, ___, ___ }, + { MAP_NUM(ROUTE123), MAP_NUM(ROUTE122), MAP_NUM(ROUTE118), ___, ___, ___ }, + { MAP_NUM(ROUTE124), MAP_NUM(ROUTE121), MAP_NUM(ROUTE125), MAP_NUM(ROUTE126), ___, ___ }, + { MAP_NUM(ROUTE125), MAP_NUM(ROUTE124), MAP_NUM(ROUTE127), ___, ___, ___ }, + { MAP_NUM(ROUTE126), MAP_NUM(ROUTE124), MAP_NUM(ROUTE127), ___, ___, ___ }, + { MAP_NUM(ROUTE127), MAP_NUM(ROUTE125), MAP_NUM(ROUTE126), MAP_NUM(ROUTE128), ___, ___ }, + { MAP_NUM(ROUTE128), MAP_NUM(ROUTE127), MAP_NUM(ROUTE129), ___, ___, ___ }, + { MAP_NUM(ROUTE129), MAP_NUM(ROUTE128), MAP_NUM(ROUTE130), ___, ___, ___ }, + { MAP_NUM(ROUTE130), MAP_NUM(ROUTE129), MAP_NUM(ROUTE131), ___, ___, ___ }, + { MAP_NUM(ROUTE131), MAP_NUM(ROUTE130), MAP_NUM(ROUTE132), ___, ___, ___ }, + { MAP_NUM(ROUTE132), MAP_NUM(ROUTE131), MAP_NUM(ROUTE133), ___, ___, ___ }, + { MAP_NUM(ROUTE133), MAP_NUM(ROUTE132), MAP_NUM(ROUTE134), ___, ___, ___ }, + { MAP_NUM(ROUTE134), MAP_NUM(ROUTE133), MAP_NUM(ROUTE110), ___, ___, ___ }, + { ___, ___, ___, ___, ___, ___ }, }; +#undef ___ +#define NUM_LOCATION_SETS (ARRAY_COUNT(sRoamerLocations) - 1) +#define NUM_LOCATIONS_PER_SET (ARRAY_COUNT(sRoamerLocations[0])) + void ClearRoamerData(void) { - memset(&gSaveBlock1Ptr->roamer, 0, sizeof(struct Roamer)); - (&gSaveBlock1Ptr->roamer)->species = SPECIES_LATIAS; + memset(ROAMER, 0, sizeof(*ROAMER)); + ROAMER->species = SPECIES_LATIAS; } void ClearRoamerLocationData(void) { u8 i; - for (i = 0; i < 3; i++) + for (i = 0; i < ARRAY_COUNT(sLocationHistory); i++) { sLocationHistory[i][MAP_GRP] = 0; sLocationHistory[i][MAP_NUM] = 0; @@ -62,26 +84,27 @@ void ClearRoamerLocationData(void) static void CreateInitialRoamerMon(bool16 createLatios) { if (!createLatios) - (&gSaveBlock1Ptr->roamer)->species = SPECIES_LATIAS; + ROAMER->species = SPECIES_LATIAS; else - (&gSaveBlock1Ptr->roamer)->species = SPECIES_LATIOS; + ROAMER->species = SPECIES_LATIOS; - CreateMon(&gEnemyParty[0], (&gSaveBlock1Ptr->roamer)->species, 40, 0x20, 0, 0, OT_ID_PLAYER_ID, 0); - (&gSaveBlock1Ptr->roamer)->level = 40; - (&gSaveBlock1Ptr->roamer)->status = 0; - (&gSaveBlock1Ptr->roamer)->active = TRUE; - (&gSaveBlock1Ptr->roamer)->ivs = GetMonData(&gEnemyParty[0], MON_DATA_IVS); - (&gSaveBlock1Ptr->roamer)->personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY); - (&gSaveBlock1Ptr->roamer)->hp = GetMonData(&gEnemyParty[0], MON_DATA_MAX_HP); - (&gSaveBlock1Ptr->roamer)->cool = GetMonData(&gEnemyParty[0], MON_DATA_COOL); - (&gSaveBlock1Ptr->roamer)->beauty = GetMonData(&gEnemyParty[0], MON_DATA_BEAUTY); - (&gSaveBlock1Ptr->roamer)->cute = GetMonData(&gEnemyParty[0], MON_DATA_CUTE); - (&gSaveBlock1Ptr->roamer)->smart = GetMonData(&gEnemyParty[0], MON_DATA_SMART); - (&gSaveBlock1Ptr->roamer)->tough = GetMonData(&gEnemyParty[0], MON_DATA_TOUGH); - sRoamerLocation[MAP_GRP] = 0; - sRoamerLocation[MAP_NUM] = sRoamerLocations[Random() % (ARRAY_COUNT(sRoamerLocations) - 1)][0]; + CreateMon(&gEnemyParty[0], ROAMER->species, 40, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + ROAMER->level = 40; + ROAMER->status = 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]; } +// gSpecialVar_0x8004 here corresponds to the options in the multichoice MULTI_TV_LATI (0 for 'Red', 1 for 'Blue') void InitRoamer(void) { ClearRoamerData(); @@ -104,16 +127,17 @@ void UpdateLocationHistoryForRoamer(void) void RoamerMoveToOtherLocationSet(void) { u8 mapNum = 0; - struct Roamer *roamer = &gSaveBlock1Ptr->roamer; - - if (!roamer->active) + + if (!ROAMER->active) return; - sRoamerLocation[MAP_GRP] = 0; + sRoamerLocation[MAP_GRP] = ROAMER_MAP_GROUP; + // Choose a location set that starts with a map + // different from the roamer's current map while (1) { - mapNum = sRoamerLocations[Random() % (ARRAY_COUNT(sRoamerLocations) - 1)][0]; + mapNum = sRoamerLocations[Random() % NUM_LOCATION_SETS][0]; if (sRoamerLocation[MAP_NUM] != mapNum) { sRoamerLocation[MAP_NUM] = mapNum; @@ -132,20 +156,23 @@ void RoamerMove(void) } else { - struct Roamer *roamer = &gSaveBlock1Ptr->roamer; - - if (!roamer->active) + if (!ROAMER->active) return; - while (locSet < (ARRAY_COUNT(sRoamerLocations) - 1)) + while (locSet < NUM_LOCATION_SETS) { + // Find the location set that starts with the roamer's current map if (sRoamerLocation[MAP_NUM] == sRoamerLocations[locSet][0]) { u8 mapNum; while (1) { - mapNum = sRoamerLocations[locSet][(Random() % 5) + 1]; - if (!(sLocationHistory[2][MAP_GRP] == 0 && sLocationHistory[2][MAP_NUM] == mapNum) && mapNum != 0xFF) + // 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; @@ -158,9 +185,7 @@ void RoamerMove(void) bool8 IsRoamerAt(u8 mapGroup, u8 mapNum) { - struct Roamer *roamer = &gSaveBlock1Ptr->roamer; - - if (roamer->active && mapGroup == sRoamerLocation[MAP_GRP] && mapNum == sRoamerLocation[MAP_NUM]) + if (ROAMER->active && mapGroup == sRoamerLocation[MAP_GRP] && mapNum == sRoamerLocation[MAP_NUM]) return TRUE; else return FALSE; @@ -168,20 +193,24 @@ bool8 IsRoamerAt(u8 mapGroup, u8 mapNum) void CreateRoamerMonInstance(void) { - struct Pokemon *mon; - struct Roamer *roamer; - - mon = &gEnemyParty[0]; + u32 status; + struct Pokemon *mon = &gEnemyParty[0]; ZeroEnemyPartyMons(); - roamer = &gSaveBlock1Ptr->roamer; - CreateMonWithIVsPersonality(mon, roamer->species, roamer->level, roamer->ivs, roamer->personality); - SetMonData(mon, MON_DATA_STATUS, &gSaveBlock1Ptr->roamer.status); - SetMonData(mon, MON_DATA_HP, &gSaveBlock1Ptr->roamer.hp); - SetMonData(mon, MON_DATA_COOL, &gSaveBlock1Ptr->roamer.cool); - SetMonData(mon, MON_DATA_BEAUTY, &gSaveBlock1Ptr->roamer.beauty); - SetMonData(mon, MON_DATA_CUTE, &gSaveBlock1Ptr->roamer.cute); - SetMonData(mon, MON_DATA_SMART, &gSaveBlock1Ptr->roamer.smart); - SetMonData(mon, MON_DATA_TOUGH, &gSaveBlock1Ptr->roamer.tough); + CreateMonWithIVsPersonality(mon, ROAMER->species, ROAMER->level, ROAMER->ivs, ROAMER->personality); +// The roamer's status field is u8, but SetMonData expects status to be u32, so will set the roamer's status +// using the status field and the following 3 bytes (cool, beauty, and cute). +#ifdef BUGFIX + status = ROAMER->status; + SetMonData(mon, MON_DATA_STATUS, &status); +#else + SetMonData(mon, MON_DATA_STATUS, &ROAMER->status); +#endif + SetMonData(mon, MON_DATA_HP, &ROAMER->hp); + SetMonData(mon, MON_DATA_COOL, &ROAMER->cool); + SetMonData(mon, MON_DATA_BEAUTY, &ROAMER->beauty); + SetMonData(mon, MON_DATA_CUTE, &ROAMER->cute); + SetMonData(mon, MON_DATA_SMART, &ROAMER->smart); + SetMonData(mon, MON_DATA_TOUGH, &ROAMER->tough); } bool8 TryStartRoamerEncounter(void) @@ -199,16 +228,15 @@ bool8 TryStartRoamerEncounter(void) void UpdateRoamerHPStatus(struct Pokemon *mon) { - (&gSaveBlock1Ptr->roamer)->hp = GetMonData(mon, MON_DATA_HP); - (&gSaveBlock1Ptr->roamer)->status = GetMonData(mon, MON_DATA_STATUS); + ROAMER->hp = GetMonData(mon, MON_DATA_HP); + ROAMER->status = GetMonData(mon, MON_DATA_STATUS); RoamerMoveToOtherLocationSet(); } void SetRoamerInactive(void) { - struct Roamer *roamer = &gSaveBlock1Ptr->roamer; - roamer->active = FALSE; + ROAMER->active = FALSE; } void GetRoamerLocation(u8 *mapGroup, u8 *mapNum) diff --git a/asm/rom_header.inc b/src/rom_header.s similarity index 56% rename from asm/rom_header.inc rename to src/rom_header.s index 6730efae28..c5fa5ddf40 100644 --- a/asm/rom_header.inc +++ b/src/rom_header.s @@ -1,3 +1,10 @@ +@ Note: ROM header data is empty space here. +@ It's populated by gbafix using data provided in the Makefile. + + .global Start +Start: + b Init + .global RomHeaderNintendoLogo RomHeaderNintendoLogo: .space 156 @@ -33,3 +40,21 @@ RomHeaderChecksum: RomHeaderReserved2: .space 2 + + .word 0 + + .global GPIOPortData +GPIOPortData: + .2byte 0 + + .global GPIOPortDirection +GPIOPortDirection: + .2byte 0 + + .global GPIOPortReadEnable +GPIOPortReadEnable: + .2byte 0 + + .2byte 0 + + .space 0x34 diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c new file mode 100644 index 0000000000..d769d47f82 --- /dev/null +++ b/src/rom_header_gf.c @@ -0,0 +1,164 @@ +#include "global.h" +#include "data.h" +#include "pokemon_icon.h" +#include "decoration.h" +#include "battle_main.h" +#include "item.h" +#include "pokeball.h" + +struct GFRomHeader +{ + u32 version; + u32 language; + u8 gameName[32]; + const struct CompressedSpriteSheet * monFrontPics; + const struct CompressedSpriteSheet * monBackPics; + const struct CompressedSpritePalette * monNormalPalettes; + const struct CompressedSpritePalette * monShinyPalettes; + const u8 *const * monIcons; + const u8 *monIconPaletteIds; + const struct SpritePalette * monIconPalettes; + const u8 (* monSpeciesNames)[]; + const u8 (* moveNames)[]; + const struct Decoration * decorations; + u32 flagsOffset; + u32 varsOffset; + u32 pokedexOffset; + u32 seenOffset; + u32 pokedexVar; + u32 pokedexFlag; + u32 mysteryEventFlag; + u32 pokedexCount; + u8 playerNameLength; + u8 trainerNameLength; + u8 pokemonNameLength1; + u8 pokemonNameLength2; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; + u8 unk9; + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; + u8 unk14; + u8 unk15; + u8 unk16; + u8 unk17; + u32 saveBlock2Size; + u32 saveBlock1Size; + u32 partyCountOffset; + u32 partyOffset; + u32 warpFlagsOffset; + u32 trainerIdOffset; + u32 playerNameOffset; + u32 playerGenderOffset; + u32 frontierStatusOffset; + u32 frontierStatusOffset2; + u32 externalEventFlagsOffset; + u32 externalEventDataOffset; + u32 unk18; + const struct BaseStats * baseStats; + const u8 (* abilityNames)[]; + const u8 *const * abilityDescriptions; + const struct Item * items; + const struct BattleMove * moves; + const struct CompressedSpriteSheet * ballGfx; + const struct CompressedSpritePalette * ballPalettes; + u32 gcnLinkFlagsOffset; + u32 gameClearFlag; + u32 ribbonFlag; + u8 bagCountItems; + u8 bagCountKeyItems; + u8 bagCountPokeballs; + u8 bagCountTMHMs; + u8 bagCountBerries; + u8 pcItemsCount; + u32 pcItemsOffset; + u32 giftRibbonsOffset; + u32 enigmaBerryOffset; + u32 enigmaBerrySize; + const u8 *moveDescriptions; + u32 unk20; +}; + +// This seems to need to be in the text section for some reason. +// To avoid a changed section attributes warning it's put in a special .text.consts section. +__attribute__((section(".text.consts"))) +static const struct GFRomHeader sGFRomHeader = { + .version = GAME_VERSION, + .language = GAME_LANGUAGE, + .gameName = "pokemon emerald version", + .monFrontPics = gMonFrontPicTable, + .monBackPics = gMonBackPicTable, + .monNormalPalettes = gMonPaletteTable, + .monShinyPalettes = gMonShinyPaletteTable, + .monIcons = gMonIconTable, + .monIconPaletteIds = gMonIconPaletteIndices, + .monIconPalettes = gMonIconPaletteTable, + .monSpeciesNames = gSpeciesNames, + .moveNames = gMoveNames, + .decorations = gDecorations, + .flagsOffset = offsetof(struct SaveBlock1, flags), + .varsOffset = offsetof(struct SaveBlock1, vars), + .pokedexOffset = offsetof(struct SaveBlock2, pokedex), + .seenOffset = offsetof(struct SaveBlock1, dexSeen), + .pokedexVar = VAR_NATIONAL_DEX - VARS_START, + .pokedexFlag = FLAG_RECEIVED_POKEDEX_FROM_BIRCH, + .mysteryEventFlag = FLAG_SYS_MYSTERY_EVENT_ENABLE, + .pokedexCount = NATIONAL_DEX_COUNT, + .playerNameLength = PLAYER_NAME_LENGTH, + .trainerNameLength = TRAINER_NAME_LENGTH, + .pokemonNameLength1 = POKEMON_NAME_LENGTH, + .pokemonNameLength2 = POKEMON_NAME_LENGTH, + // Two of the below 12s are likely move/ability name length, given their presence in this header + .unk5 = 12, + .unk6 = 12, + .unk7 = 6, + .unk8 = 12, + .unk9 = 6, + .unk10 = 16, + .unk11 = 18, + .unk12 = 12, + .unk13 = 15, + .unk14 = 11, + .unk15 = 1, + .unk16 = 8, + .unk17 = 12, + .saveBlock2Size = sizeof(struct SaveBlock2), + .saveBlock1Size = sizeof(struct SaveBlock1), + .partyCountOffset = offsetof(struct SaveBlock1, playerPartyCount), + .partyOffset = offsetof(struct SaveBlock1, playerParty), + .warpFlagsOffset = offsetof(struct SaveBlock2, specialSaveWarpFlags), + .trainerIdOffset = offsetof(struct SaveBlock2, playerTrainerId), + .playerNameOffset = offsetof(struct SaveBlock2, playerName), + .playerGenderOffset = offsetof(struct SaveBlock2, playerGender), + .frontierStatusOffset = offsetof(struct SaveBlock2, frontier.challengeStatus), + .frontierStatusOffset2 = offsetof(struct SaveBlock2, frontier.challengeStatus), + .externalEventFlagsOffset = offsetof(struct SaveBlock1, externalEventFlags), + .externalEventDataOffset = offsetof(struct SaveBlock1, externalEventData), + .unk18 = 0x00000000, + .baseStats = gBaseStats, + .abilityNames = gAbilityNames, + .abilityDescriptions = gAbilityDescriptionPointers, + .items = gItems, + .moves = gBattleMoves, + .ballGfx = gBallSpriteSheets, + .ballPalettes = gBallSpritePalettes, + .gcnLinkFlagsOffset = offsetof(struct SaveBlock2, gcnLinkFlags), + .gameClearFlag = FLAG_SYS_GAME_CLEAR, + .ribbonFlag = FLAG_SYS_RIBBON_GET, + .bagCountItems = BAG_ITEMS_COUNT, + .bagCountKeyItems = BAG_KEYITEMS_COUNT, + .bagCountPokeballs = BAG_POKEBALLS_COUNT, + .bagCountTMHMs = BAG_TMHM_COUNT, + .bagCountBerries = BAG_BERRIES_COUNT, + .pcItemsCount = PC_ITEMS_COUNT, + .pcItemsOffset = offsetof(struct SaveBlock1, pcItems), + .giftRibbonsOffset = offsetof(struct SaveBlock1, giftRibbons), + .enigmaBerryOffset = offsetof(struct SaveBlock1, enigmaBerry), + .enigmaBerrySize = sizeof(struct EnigmaBerry), + .moveDescriptions = NULL, + .unk20 = 0x00000000, // 0xFFFFFFFF in FRLG +}; diff --git a/src/rotating_gate.c b/src/rotating_gate.c index a185d9a145..d1184dae01 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -5,7 +5,6 @@ #include "fieldmap.h" #include "sound.h" #include "sprite.h" -#include "constants/maps.h" #include "constants/songs.h" #define ROTATING_GATE_TILE_TAG 0x1300 @@ -220,21 +219,21 @@ static const struct RotatingGatePuzzle sRotatingGate_TrickHousePuzzleConfig[] = {10, 19, GATE_SHAPE_L3, GATE_ORIENTATION_180}, }; -static const u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/misc/rotating_gate_1.4bpp"); -static const u8 sRotatingGateTiles_2[] = INCBIN_U8("graphics/misc/rotating_gate_2.4bpp"); -static const u8 sRotatingGateTiles_3[] = INCBIN_U8("graphics/misc/rotating_gate_3.4bpp"); -static const u8 sRotatingGateTiles_4[] = INCBIN_U8("graphics/misc/rotating_gate_4.4bpp"); -static const u8 sRotatingGateTiles_5[] = INCBIN_U8("graphics/misc/rotating_gate_5.4bpp"); -static const u8 sRotatingGateTiles_6[] = INCBIN_U8("graphics/misc/rotating_gate_6.4bpp"); -static const u8 sRotatingGateTiles_7[] = INCBIN_U8("graphics/misc/rotating_gate_7.4bpp"); -static const u8 sRotatingGateTiles_8[] = INCBIN_U8("graphics/misc/rotating_gate_8.4bpp"); +static const u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/l1.4bpp"); +static const u8 sRotatingGateTiles_2[] = INCBIN_U8("graphics/rotating_gates/l2.4bpp"); +static const u8 sRotatingGateTiles_3[] = INCBIN_U8("graphics/rotating_gates/l3.4bpp"); +static const u8 sRotatingGateTiles_4[] = INCBIN_U8("graphics/rotating_gates/l4.4bpp"); +static const u8 sRotatingGateTiles_5[] = INCBIN_U8("graphics/rotating_gates/t1.4bpp"); +static const u8 sRotatingGateTiles_6[] = INCBIN_U8("graphics/rotating_gates/t2.4bpp"); +static const u8 sRotatingGateTiles_7[] = INCBIN_U8("graphics/rotating_gates/t3.4bpp"); +static const u8 sRotatingGateTiles_8[] = INCBIN_U8("graphics/rotating_gates/t4.4bpp"); static const struct OamData sOamData_RotatingGateLarge = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -251,7 +250,7 @@ static const struct OamData sOamData_RotatingGateRegular = .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -461,7 +460,7 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] = static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = { .tileTag = ROTATING_GATE_TILE_TAG, - .paletteTag = 0xFFFF, + .paletteTag = TAG_NONE, .oam = &sOamData_RotatingGateLarge, .anims = sSpriteAnimTable_RotatingGateLarge, .images = NULL, @@ -472,7 +471,7 @@ static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = { .tileTag = ROTATING_GATE_TILE_TAG, - .paletteTag = 0xFFFF, + .paletteTag = TAG_NONE, .oam = &sOamData_RotatingGateRegular, .anims = sSpriteAnimTable_RotatingGateRegular, .images = NULL, @@ -613,12 +612,10 @@ static const u8 sRotatingGate_ArmLayout[][4 * 2] = }, }; -// ewram -static EWRAM_DATA u8 gRotatingGate_GateSpriteIds[ROTATING_GATE_PUZZLE_MAX] = {0}; -static EWRAM_DATA const struct RotatingGatePuzzle *gRotatingGate_PuzzleConfig = NULL; -static EWRAM_DATA u8 gRotatingGate_PuzzleCount = 0; +static EWRAM_DATA u8 sRotatingGate_GateSpriteIds[ROTATING_GATE_PUZZLE_MAX] = {0}; +static EWRAM_DATA const struct RotatingGatePuzzle *sRotatingGate_PuzzleConfig = NULL; +static EWRAM_DATA u8 sRotatingGate_PuzzleCount = 0; -// text static s32 GetCurrentMapRotatingGatePuzzleType(void) { if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(FORTREE_CITY_GYM) && @@ -641,9 +638,9 @@ static void RotatingGate_ResetAllGateOrientations(void) s32 i; u8 *ptr = (u8 *)GetVarPointer(VAR_TEMP_0); - for (i = 0; i < gRotatingGate_PuzzleCount; i++) + for (i = 0; i < sRotatingGate_PuzzleCount; i++) { - ptr[i] = gRotatingGate_PuzzleConfig[i].orientation; + ptr[i] = sRotatingGate_PuzzleConfig[i].orientation; } } @@ -684,14 +681,12 @@ static void RotatingGate_LoadPuzzleConfig(void) switch (puzzleType) { case PUZZLE_FORTREE_CITY_GYM: - gRotatingGate_PuzzleConfig = sRotatingGate_FortreePuzzleConfig; - gRotatingGate_PuzzleCount = - sizeof(sRotatingGate_FortreePuzzleConfig) / sizeof(struct RotatingGatePuzzle); + sRotatingGate_PuzzleConfig = sRotatingGate_FortreePuzzleConfig; + sRotatingGate_PuzzleCount = ARRAY_COUNT(sRotatingGate_FortreePuzzleConfig); break; case PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6: - gRotatingGate_PuzzleConfig = sRotatingGate_TrickHousePuzzleConfig; - gRotatingGate_PuzzleCount = - sizeof(sRotatingGate_TrickHousePuzzleConfig) / sizeof(struct RotatingGatePuzzle); + sRotatingGate_PuzzleConfig = sRotatingGate_TrickHousePuzzleConfig; + sRotatingGate_PuzzleCount = ARRAY_COUNT(sRotatingGate_TrickHousePuzzleConfig); break; case PUZZLE_NONE: default: @@ -699,9 +694,7 @@ static void RotatingGate_LoadPuzzleConfig(void) } for (i = 0; i < ROTATING_GATE_PUZZLE_MAX - 1; i++) - { - gRotatingGate_GateSpriteIds[i] = MAX_SPRITES; - } + sRotatingGate_GateSpriteIds[i] = MAX_SPRITES; } static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY) @@ -711,19 +704,19 @@ static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY) // Calculate the bounding box of the camera // Same as RotatingGate_DestroyGatesOutsideViewport s16 x = gSaveBlock1Ptr->pos.x - 2; - s16 x2 = gSaveBlock1Ptr->pos.x + 0x11; + s16 x2 = gSaveBlock1Ptr->pos.x + MAP_OFFSET_W + 2; s16 y = gSaveBlock1Ptr->pos.y - 2; - s16 y2 = gSaveBlock1Ptr->pos.y + 0xe; + s16 y2 = gSaveBlock1Ptr->pos.y + MAP_OFFSET_H; - for (i = 0; i < gRotatingGate_PuzzleCount; i++) + for (i = 0; i < sRotatingGate_PuzzleCount; i++) { - s16 x3 = gRotatingGate_PuzzleConfig[i].x + 7; - s16 y3 = gRotatingGate_PuzzleConfig[i].y + 7; + s16 x3 = sRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; + s16 y3 = sRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; if (y <= y3 && y2 >= y3 && x <= x3 && x2 >= x3 && - gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) + sRotatingGate_GateSpriteIds[i] == MAX_SPRITES) { - gRotatingGate_GateSpriteIds[i] = RotatingGate_CreateGate(i, deltaX, deltaY); + sRotatingGate_GateSpriteIds[i] = RotatingGate_CreateGate(i, deltaX, deltaY); } } } @@ -735,7 +728,7 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) u8 spriteId; s16 x, y; - const struct RotatingGatePuzzle *gate = &gRotatingGate_PuzzleConfig[gateId]; + const struct RotatingGatePuzzle *gate = &sRotatingGate_PuzzleConfig[gateId]; if (gate->shape == GATE_SHAPE_L1 || gate->shape == GATE_SHAPE_T1) template = sSpriteTemplate_RotatingGateRegular; @@ -748,8 +741,8 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) if (spriteId == MAX_SPRITES) return MAX_SPRITES; - x = gate->x + 7; - y = gate->y + 7; + x = gate->x + MAP_OFFSET; + y = gate->y + MAP_OFFSET; sprite = &gSprites[spriteId]; sprite->data[0] = gateId; @@ -774,7 +767,7 @@ static void SpriteCallback_RotatingGate(struct Sprite *sprite) { affineAnimation = orientation + 4; - if (GetPlayerSpeed() != 1) + if (GetPlayerSpeed() != PLAYER_SPEED_NORMAL) affineAnimation += 8; PlaySE(SE_ROTATING_GATE); @@ -784,7 +777,7 @@ static void SpriteCallback_RotatingGate(struct Sprite *sprite) { affineAnimation = orientation + 8; - if (GetPlayerSpeed() != 1) + if (GetPlayerSpeed() != PLAYER_SPEED_NORMAL) affineAnimation += 8; PlaySE(SE_ROTATING_GATE); @@ -803,15 +796,15 @@ static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite) x = sprite->x + sprite->x2 + sprite->centerToCornerVecX + gSpriteCoordOffsetX; y = sprite->y + sprite->y2 + sprite->centerToCornerVecY + gSpriteCoordOffsetY; - x2 = x + 0x40; // Dimensions of the rotating gate - y2 = y + 0x40; + x2 = x + 64; // Dimensions of the rotating gate + y2 = y + 64; - if ((s16)x > DISPLAY_WIDTH + 0x10 - 1 || x2 < -0x10) + if ((s16)x > DISPLAY_WIDTH + 16 - 1 || x2 < -16) { sprite->invisible = TRUE; } - if ((s16)y > DISPLAY_HEIGHT + 0x10 - 1 || y2 < -0x10) + if ((s16)y > DISPLAY_HEIGHT + 16 - 1 || y2 < -16) { sprite->invisible = TRUE; } @@ -828,24 +821,24 @@ static void RotatingGate_DestroyGatesOutsideViewport(void) // Same as RotatingGate_CreateGatesWithinViewport s16 x = gSaveBlock1Ptr->pos.x - 2; - s16 x2 = gSaveBlock1Ptr->pos.x + 0x11; + s16 x2 = gSaveBlock1Ptr->pos.x + MAP_OFFSET_W + 2; s16 y = gSaveBlock1Ptr->pos.y - 2; - s16 y2 = gSaveBlock1Ptr->pos.y + 0xe; + s16 y2 = gSaveBlock1Ptr->pos.y + MAP_OFFSET_H; - for (i = 0; i < gRotatingGate_PuzzleCount; i++) + for (i = 0; i < sRotatingGate_PuzzleCount; i++) { - s16 xGate = gRotatingGate_PuzzleConfig[i].x + 7; - s16 yGate = gRotatingGate_PuzzleConfig[i].y + 7; + s16 xGate = sRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; + s16 yGate = sRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; - if (gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) + if (sRotatingGate_GateSpriteIds[i] == MAX_SPRITES) continue; if (xGate < x || xGate > x2 || yGate < y || yGate > y2) { - struct Sprite *sprite = &gSprites[gRotatingGate_GateSpriteIds[i]]; + struct Sprite *sprite = &gSprites[sRotatingGate_GateSpriteIds[i]]; FreeSpriteOamMatrix(sprite); DestroySprite(sprite); - gRotatingGate_GateSpriteIds[i] = MAX_SPRITES; + sRotatingGate_GateSpriteIds[i] = MAX_SPRITES; } } } @@ -867,9 +860,9 @@ static s32 RotatingGate_CanRotate(u8 gateId, s32 rotationDirection) orientation = RotatingGate_GetGateOrientation(gateId); - shape = gRotatingGate_PuzzleConfig[gateId].shape; - x = gRotatingGate_PuzzleConfig[gateId].x + 7; - y = gRotatingGate_PuzzleConfig[gateId].y + 7; + shape = sRotatingGate_PuzzleConfig[gateId].shape; + x = sRotatingGate_PuzzleConfig[gateId].x + MAP_OFFSET; + y = sRotatingGate_PuzzleConfig[gateId].y + MAP_OFFSET; // Loop through the gate's "arms" clockwise (north, south, east, west) for (i = GATE_ARM_NORTH; i <= GATE_ARM_WEST; i++) @@ -881,7 +874,12 @@ static s32 RotatingGate_CanRotate(u8 gateId, s32 rotationDirection) if (sRotatingGate_ArmLayout[shape][2 * i + j]) { - if (MapGridIsImpassableAt(x + armPos[armIndex].x, y + armPos[armIndex].y) == TRUE) + #ifdef BUGFIX + // Collision has a range 0-3, any value != 0 is impassable + if (MapGridGetCollisionAt(x + armPos[armIndex].x, y + armPos[armIndex].y)) + #else + if (MapGridGetCollisionAt(x + armPos[armIndex].x, y + armPos[armIndex].y) == 1) + #endif return FALSE; } } @@ -896,15 +894,15 @@ static s32 RotatingGate_HasArm(u8 gateId, u8 armInfo) s32 isLongArm = armInfo % 2; s8 armOrientation = (arm - RotatingGate_GetGateOrientation(gateId) + 4) % 4; - s32 shape = gRotatingGate_PuzzleConfig[gateId].shape; + s32 shape = sRotatingGate_PuzzleConfig[gateId].shape; return sRotatingGate_ArmLayout[shape][armOrientation * 2 + isLongArm]; } static void RotatingGate_TriggerRotationAnimation(u8 gateId, s32 rotationDirection) { - if (gRotatingGate_GateSpriteIds[gateId] != MAX_SPRITES) + if (sRotatingGate_GateSpriteIds[gateId] != MAX_SPRITES) { - struct Sprite *sprite = &gSprites[gRotatingGate_GateSpriteIds[gateId]]; + struct Sprite *sprite = &gSprites[sRotatingGate_GateSpriteIds[gateId]]; sprite->data[1] = rotationDirection; sprite->data[2] = RotatingGate_GetGateOrientation(gateId); } @@ -962,10 +960,10 @@ bool8 CheckForRotatingGatePuzzleCollision(u8 direction, s16 x, s16 y) if (!GetCurrentMapRotatingGatePuzzleType()) return FALSE; - for (i = 0; i < gRotatingGate_PuzzleCount; i++) + for (i = 0; i < sRotatingGate_PuzzleCount; i++) { - s16 gateX = gRotatingGate_PuzzleConfig[i].x + 7; - s16 gateY = gRotatingGate_PuzzleConfig[i].y + 7; + s16 gateX = sRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; + s16 gateY = sRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; if (gateX - 2 <= x && x <= gateX + 1 && gateY - 2 <= y && y <= gateY + 1) { @@ -1000,10 +998,10 @@ bool8 CheckForRotatingGatePuzzleCollisionWithoutAnimation(u8 direction, s16 x, s if (!GetCurrentMapRotatingGatePuzzleType()) return FALSE; - for (i = 0; i < gRotatingGate_PuzzleCount; i++) + for (i = 0; i < sRotatingGate_PuzzleCount; i++) { - s16 gateX = gRotatingGate_PuzzleConfig[i].x + 7; - s16 gateY = gRotatingGate_PuzzleConfig[i].y + 7; + s16 gateX = sRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; + s16 gateY = sRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; if (gateX - 2 <= x && x <= gateX + 1 && gateY - 2 <= y && y <= gateY + 1) { diff --git a/src/rotating_tile_puzzle.c b/src/rotating_tile_puzzle.c index fd26361dd7..7581b81072 100644 --- a/src/rotating_tile_puzzle.c +++ b/src/rotating_tile_puzzle.c @@ -10,7 +10,7 @@ #define ROTATE_COUNTERCLOCKWISE 0 #define ROTATE_CLOCKWISE 1 -#define ROTATE_NONE 2 +#define ROTATE_NONE 2 struct RotatingTileObject { @@ -27,33 +27,33 @@ struct RotatingTilePuzzle static const u8 sMovement_ShiftRight[] = { - MOVEMENT_ACTION_STORE_AND_LOCK_ANIM, + MOVEMENT_ACTION_LOCK_ANIM, MOVEMENT_ACTION_WALK_NORMAL_RIGHT, - MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM, + MOVEMENT_ACTION_UNLOCK_ANIM, MOVEMENT_ACTION_STEP_END }; static const u8 sMovement_ShiftDown[] = { - MOVEMENT_ACTION_STORE_AND_LOCK_ANIM, + MOVEMENT_ACTION_LOCK_ANIM, MOVEMENT_ACTION_WALK_NORMAL_DOWN, - MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM, + MOVEMENT_ACTION_UNLOCK_ANIM, MOVEMENT_ACTION_STEP_END }; static const u8 sMovement_ShiftLeft[] = { - MOVEMENT_ACTION_STORE_AND_LOCK_ANIM, + MOVEMENT_ACTION_LOCK_ANIM, MOVEMENT_ACTION_WALK_NORMAL_LEFT, - MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM, + MOVEMENT_ACTION_UNLOCK_ANIM, MOVEMENT_ACTION_STEP_END }; static const u8 sMovement_ShiftUp[] = { - MOVEMENT_ACTION_STORE_AND_LOCK_ANIM, + MOVEMENT_ACTION_LOCK_ANIM, MOVEMENT_ACTION_WALK_NORMAL_UP, - MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM, + MOVEMENT_ACTION_UNLOCK_ANIM, MOVEMENT_ACTION_STEP_END }; @@ -81,14 +81,11 @@ static const u8 sMovement_FaceUp[] = MOVEMENT_ACTION_STEP_END }; -// This file's functions. -static void SaveRotatingTileObject(u8 eventTemplateId, u8 arg1); -static void TurnUnsavedRotatingTileObject(u8 eventTemplateId, u8 arg1); +static void SaveRotatingTileObject(u8, u8); +static void TurnUnsavedRotatingTileObject(u8, u8); -// EWRAM vars EWRAM_DATA static struct RotatingTilePuzzle *sRotatingTilePuzzle = NULL; -// code void InitRotatingTilePuzzle(bool8 isTrickHouse) { if (sRotatingTilePuzzle == NULL) @@ -101,8 +98,7 @@ void FreeRotatingTilePuzzle(void) { u8 id; - if (sRotatingTilePuzzle != NULL) - FREE_AND_SET_NULL(sRotatingTilePuzzle); + TRY_FREE_AND_SET_NULL(sRotatingTilePuzzle); id = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[id]); @@ -119,8 +115,8 @@ u16 MoveRotatingTileObjects(u8 puzzleNumber) { s32 puzzleTileStart; u8 puzzleTileNum; - s16 x = objectEvents[i].x + 7; - s16 y = objectEvents[i].y + 7; + s16 x = objectEvents[i].x + MAP_OFFSET; + s16 y = objectEvents[i].y + MAP_OFFSET; u16 metatile = MapGridGetMetatileIdAt(x, y); if (!sRotatingTilePuzzle->isTrickHouse) @@ -129,19 +125,19 @@ u16 MoveRotatingTileObjects(u8 puzzleNumber) puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right; // Object is on a metatile before the puzzle tile section - // UB: Because this is not if (metatile < puzzleTileStart), for the trick house (metatile - puzzleTileStart) below can result in casting a negative value to u8 + // UB: Because this is not if (metatile < puzzleTileStart), for the trick house (metatile - puzzleTileStart) below can result in casting a negative value to u8 if (metatile < METATILE_MossdeepGym_YellowArrow_Right) continue; // Object is on a metatile after the puzzle tile section (never occurs, in both cases the puzzle tiles are last) - if ((u8)((metatile - puzzleTileStart) / 8) >= 5) + if ((u8)((metatile - puzzleTileStart) / METATILE_ROW_WIDTH) >= 5) continue; // Object is on a metatile in puzzle tile section, but not one of the currently rotating color - if ((u8)((metatile - puzzleTileStart) / 8) != puzzleNumber) + if ((u8)((metatile - puzzleTileStart) / METATILE_ROW_WIDTH) != puzzleNumber) continue; - puzzleTileNum = (u8)((metatile - puzzleTileStart) % 8); + puzzleTileNum = (u8)((metatile - puzzleTileStart) % METATILE_ROW_WIDTH); // First 4 puzzle tiles are the colored arrows if (puzzleTileNum < 4) @@ -211,8 +207,8 @@ void TurnRotatingTileObjects(void) s32 rotation; s8 tileDifference; u8 objectEventId; - s16 x = objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].x + 7; - s16 y = objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].y + 7; + s16 x = objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].x + MAP_OFFSET; + s16 y = objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].y + MAP_OFFSET; u16 metatile = MapGridGetMetatileIdAt(x, y); // NOTE: The following 2 assignments and if else could all be replaced with rotation = ROTATE_COUNTERCLOCKWISE @@ -221,9 +217,9 @@ void TurnRotatingTileObjects(void) // prevPuzzleTileNum will similarly be a number [0-3] representing the arrow tile the object just moved from // All the puzzles are oriented counter-clockwise and can only move 1 step at a time, so the difference between the current tile and the previous tile will always either be -1 or 3 (0-1, 1-2, 2-3, 3-0) // Which means tileDifference will always either be -1 or 3 after the below subtraction, and rotation will always be ROTATE_COUNTERCLOCKWISE after the following conditionals - tileDifference = (u8)((metatile - puzzleTileStart) % 8); + tileDifference = (u8)((metatile - puzzleTileStart) % METATILE_ROW_WIDTH); tileDifference -= (sRotatingTilePuzzle->objects[i].prevPuzzleTileNum); - + // Always true, see above if (tileDifference < 0 || tileDifference == 3) { @@ -322,8 +318,8 @@ static void TurnUnsavedRotatingTileObject(u8 eventTemplateId, u8 puzzleTileNum) s32 puzzleTileStart; u16 movementType; struct ObjectEventTemplate *objectEvents = gSaveBlock1Ptr->objectEventTemplates; - s16 x = objectEvents[eventTemplateId].x + 7; - s16 y = objectEvents[eventTemplateId].y + 7; + s16 x = objectEvents[eventTemplateId].x + MAP_OFFSET; + s16 y = objectEvents[eventTemplateId].y + MAP_OFFSET; u16 metatile = MapGridGetMetatileIdAt(x, y); if (!sRotatingTilePuzzle->isTrickHouse) @@ -331,7 +327,7 @@ static void TurnUnsavedRotatingTileObject(u8 eventTemplateId, u8 puzzleTileNum) else puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right; - tileDifference = (u8)((metatile - puzzleTileStart) % 8); + tileDifference = (u8)((metatile - puzzleTileStart) % METATILE_ROW_WIDTH); tileDifference -= puzzleTileNum; if (tileDifference < 0 || tileDifference == 3) diff --git a/src/roulette.c b/src/roulette.c index 14ae165567..a8be6ad7ca 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -148,7 +148,7 @@ #define GFXTAG_SHADOW 14 // 2 different Roulette tables with 2 different rates (normal vs service day special) -// & 1 gets which table, >> 7 gets if ROULETTE_SPECIAL_RATE is set +// & 1 gets which table, >> 7 gets if ROULETTE_SPECIAL_RATE is set #define GET_MIN_BET_ID(var)(((var) & 1) + (((var) >> 7) * 2)) // Having Shroomish or Taillow in the party can make rolls more consistent in length @@ -1040,11 +1040,11 @@ static const struct YesNoFuncTable sYesNoTable_KeepPlaying = static void CB2_Roulette(void) { - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - if (sRoulette->flashUtil.enabled) - RouletteFlash_Run(&sRoulette->flashUtil); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + if (sRoulette->flashUtil.enabled) + RouletteFlash_Run(&sRoulette->flashUtil); } static void VBlankCB_Roulette(void) @@ -1223,8 +1223,8 @@ static void CB2_LoadRoulette(void) SetMultiplierSprite(SELECTION_NONE); DrawGridBackground(SELECTION_NONE); DrawStdWindowFrame(sTextWindowId, FALSE); - AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_ControlsInstruction, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sTextWindowId, 3); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, Roulette_Text_ControlsInstruction, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sTextWindowId, COPYWIN_FULL); gSpriteCoordOffsetX = -60; gSpriteCoordOffsetY = 0; break; @@ -1293,9 +1293,9 @@ static void Task_StartPlaying(u8 taskId) static void Task_AskKeepPlaying(u8 taskId) { DisplayYesNoMenuDefaultYes(); - DrawStdWindowFrame(sTextWindowId, 0); - AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_KeepPlaying, 0, 1, TEXT_SPEED_FF, 0); - CopyWindowToVram(sTextWindowId, 3); + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, Roulette_Text_KeepPlaying, 0, 1, TEXT_SKIP_DRAW, 0); + CopyWindowToVram(sTextWindowId, COPYWIN_FULL); DoYesNoFuncWithChoice(taskId, &sYesNoTable_KeepPlaying); } @@ -1317,28 +1317,28 @@ static void UpdateGridSelectionRect(u8 selectionId) switch (selectionId) { case SELECTION_NONE: - ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + FillTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); break; case COL_WYNAUT: case COL_AZURILL: case COL_SKITTY: case COL_MAKUHITA: temp0 = (selectionId * 3 + 14); - ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + FillTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); SetTilemapRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->gridTilemap[281], temp0, 7, 3, 13); break; case ROW_ORANGE: case ROW_GREEN: case ROW_PURPLE: temp1 = ((selectionId - 1) / 5 * 3 + 10); - ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + FillTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); SetTilemapRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->gridTilemap[320], 14, temp1, 16, 3); break; // Individual square default: temp0 = GET_COL(selectionId) * 3 + 14; temp1 = ((selectionId - 1) / 5 * 3 + 7); - ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); + FillTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13); SetTilemapRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->gridTilemap[272], temp0, temp1, 3, 3); break; } @@ -1448,7 +1448,7 @@ static void ProcessBetGridInput(u8 taskId) RouletteFlash_Stop(&sRoulette->flashUtil, 0xFFFF); sRoulette->flashUtil.palettes[FLASH_ICON].available = sRoulette->flashUtil.palettes[FLASH_ICON_2].available = sRoulette->flashUtil.palettes[FLASH_ICON_3].available = FALSE; FlashSelectionOnWheel(gTasks[taskId].tSelectionId); - + // Switch all the poke (column) headers to gray outlines for (i = 0; i < NUM_BOARD_POKES; i++) { @@ -1568,11 +1568,11 @@ static u8 GetRandomForBallTravelDistance(u16 ballNum, u16 rand) else return 1; } - else if (!(rand & 3)) + else if (!(rand & 3)) { return sRouletteTables[sRoulette->tableId].randDistanceLow / 2; } - else + else { return sRouletteTables[sRoulette->tableId].randDistanceLow; } @@ -1586,11 +1586,11 @@ static u8 GetRandomForBallTravelDistance(u16 ballNum, u16 rand) else return 1; } - else if ((rand & 1) && ballNum > BALLS_PER_ROUND) + else if ((rand & 1) && ballNum > BALLS_PER_ROUND) { return sRouletteTables[sRoulette->tableId].randDistanceLow / 4; } - else + else { return sRouletteTables[sRoulette->tableId].randDistanceLow / 2; } @@ -1806,23 +1806,23 @@ static void Task_PrintSpinResult(u8 taskId) { PlayFanfare(MUS_SLOTS_JACKPOT); DrawStdWindowFrame(sTextWindowId, FALSE); - AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_Jackpot, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sTextWindowId, 3); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, Roulette_Text_Jackpot, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sTextWindowId, COPYWIN_FULL); } else { PlayFanfare(MUS_SLOTS_WIN); DrawStdWindowFrame(sTextWindowId, FALSE); - AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_ItsAHit, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sTextWindowId, 3); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, Roulette_Text_ItsAHit, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sTextWindowId, COPYWIN_FULL); } break; case FALSE: default: m4aSongNumStart(SE_FAILURE); DrawStdWindowFrame(sTextWindowId, FALSE); - AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_NothingDoing, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sTextWindowId, 3); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, Roulette_Text_NothingDoing, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sTextWindowId, COPYWIN_FULL); break; } gTasks[taskId].data[1] = 0; @@ -1866,8 +1866,8 @@ static void Task_PrintPayout(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, (sRoulette->minBet * gTasks[taskId].tMultiplier), STR_CONV_MODE_LEFT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, Roulette_Text_YouveWonXCoins); DrawStdWindowFrame(sTextWindowId, FALSE); - AddTextPrinterParameterized(sTextWindowId, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sTextWindowId, 3); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sTextWindowId, COPYWIN_FULL); gTasks[taskId].tPayout = (sRoulette->minBet * gTasks[taskId].tMultiplier); gTasks[taskId].data[7] = 0; gTasks[taskId].func = Task_GivePayout; @@ -1902,16 +1902,16 @@ static void Task_TryPrintEndTurnMsg(u8 taskId) { // Reached Ball 6, clear board DrawStdWindowFrame(sTextWindowId, FALSE); - AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_BoardWillBeCleared, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sTextWindowId, 3); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, Roulette_Text_BoardWillBeCleared, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sTextWindowId, COPYWIN_FULL); StartTaskAfterDelayOrInput(taskId, Task_ClearBoard, NO_DELAY, A_BUTTON | B_BUTTON); } else if (gTasks[taskId].tCoins == MAX_COINS) { // Player maxed out coins DrawStdWindowFrame(sTextWindowId, FALSE); - AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sTextWindowId, 3); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sTextWindowId, COPYWIN_FULL); StartTaskAfterDelayOrInput(taskId, Task_AskKeepPlaying, NO_DELAY, A_BUTTON | B_BUTTON); } else @@ -1924,8 +1924,8 @@ static void Task_TryPrintEndTurnMsg(u8 taskId) { // Player out of coins DrawStdWindowFrame(sTextWindowId, FALSE); - AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_NoCoinsLeft, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sTextWindowId, 3); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, Roulette_Text_NoCoinsLeft, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sTextWindowId, COPYWIN_FULL); StartTaskAfterDelayOrInput(taskId, Task_StopPlaying, 60, A_BUTTON | B_BUTTON); } } @@ -1949,8 +1949,8 @@ static void Task_ClearBoard(u8 taskId) if (gTasks[taskId].tCoins == MAX_COINS) { DrawStdWindowFrame(sTextWindowId, FALSE); - AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(sTextWindowId, 3); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sTextWindowId, COPYWIN_FULL); StartTaskAfterDelayOrInput(taskId, Task_AskKeepPlaying, NO_DELAY, A_BUTTON | B_BUTTON); } else @@ -2060,14 +2060,14 @@ static u8 RecordHit(u8 taskId, u8 slotId) { u8 i, j; u32 columnFlags[NUM_BOARD_POKES] = { - F_WYNAUT_COL | F_ORANGE_WYNAUT | F_GREEN_WYNAUT | F_PURPLE_WYNAUT, - F_AZURILL_COL | F_ORANGE_AZURILL | F_GREEN_AZURILL | F_PURPLE_AZURILL, - F_SKITTY_COL | F_ORANGE_SKITTY | F_GREEN_SKITTY | F_PURPLE_SKITTY, + F_WYNAUT_COL | F_ORANGE_WYNAUT | F_GREEN_WYNAUT | F_PURPLE_WYNAUT, + F_AZURILL_COL | F_ORANGE_AZURILL | F_GREEN_AZURILL | F_PURPLE_AZURILL, + F_SKITTY_COL | F_ORANGE_SKITTY | F_GREEN_SKITTY | F_PURPLE_SKITTY, F_MAKUHITA_COL | F_ORANGE_MAKUHITA | F_GREEN_MAKUHITA | F_PURPLE_MAKUHITA }; u32 rowFlags[NUM_BOARD_COLORS] = { - F_ORANGE_ROW | F_ORANGE_WYNAUT | F_ORANGE_AZURILL | F_ORANGE_SKITTY | F_ORANGE_MAKUHITA, - F_GREEN_ROW | F_GREEN_WYNAUT | F_GREEN_AZURILL | F_GREEN_SKITTY | F_GREEN_MAKUHITA, + F_ORANGE_ROW | F_ORANGE_WYNAUT | F_ORANGE_AZURILL | F_ORANGE_SKITTY | F_ORANGE_MAKUHITA, + F_GREEN_ROW | F_GREEN_WYNAUT | F_GREEN_AZURILL | F_GREEN_SKITTY | F_GREEN_MAKUHITA, F_PURPLE_ROW | F_PURPLE_WYNAUT | F_PURPLE_AZURILL | F_PURPLE_SKITTY | F_PURPLE_MAKUHITA }; @@ -2109,15 +2109,15 @@ static bool8 IsHitInBetSelection(u8 gridSquare, u8 betSelection) case COL_AZURILL: case COL_SKITTY: case COL_MAKUHITA: - if (hit == betSelection + ROW_ORANGE - || hit == betSelection + ROW_GREEN + if (hit == betSelection + ROW_ORANGE + || hit == betSelection + ROW_GREEN || hit == betSelection + ROW_PURPLE) return TRUE; break; case ROW_ORANGE: case ROW_GREEN: case ROW_PURPLE: - if (hit >= (betSelection + COL_WYNAUT) + if (hit >= (betSelection + COL_WYNAUT) && hit <= (betSelection + COL_MAKUHITA)) return TRUE; break; @@ -3401,7 +3401,7 @@ static void Task_DeclineMinBet(u8 taskId) { ClearStdWindowAndFrame(0, FALSE); HideCoinsWindow(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); } @@ -3413,7 +3413,7 @@ static void Task_NotEnoughForMinBet(u8 taskId) gSpecialVar_0x8004 = 1; HideCoinsWindow(); ClearStdWindowAndFrame(0, TRUE); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); } } @@ -3426,8 +3426,8 @@ static void Task_PrintMinBet(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, minBet, STR_CONV_MODE_LEADING_ZEROS, 1); StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX); DrawStdWindowFrame(0, FALSE); - AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(0, 3); + AddTextPrinterParameterized(0, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_ShowMinBetYesNo; } } @@ -3438,15 +3438,15 @@ static void Task_PrintRouletteEntryMsg(u8 taskId) PrintCoinsString(gTasks[taskId].tCoins); minBet = sTableMinBets[GET_MIN_BET_ID(gSpecialVar_0x8004)]; ConvertIntToDecimalStringN(gStringVar1, minBet, STR_CONV_MODE_LEADING_ZEROS, 1); - + if (gTasks[taskId].tCoins >= minBet) { if ((gSpecialVar_0x8004 & ROULETTE_SPECIAL_RATE) && (gSpecialVar_0x8004 & 1)) { // Special rate for Game Corner service day (only at second table) DrawStdWindowFrame(0, FALSE); - AddTextPrinterParameterized(0, 1, Roulette_Text_SpecialRateTable, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(0, 3); + AddTextPrinterParameterized(0, FONT_NORMAL, Roulette_Text_SpecialRateTable, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_PrintMinBet; } else @@ -3454,8 +3454,8 @@ static void Task_PrintRouletteEntryMsg(u8 taskId) // Print minimum bet StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX); DrawStdWindowFrame(0, FALSE); - AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(0, 3); + AddTextPrinterParameterized(0, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_ShowMinBetYesNo; } } @@ -3464,8 +3464,8 @@ static void Task_PrintRouletteEntryMsg(u8 taskId) // Not enough for minimum bet StringExpandPlaceholders(gStringVar4, Roulette_Text_NotEnoughCoins); DrawStdWindowFrame(0, FALSE); - AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(0, 3); + AddTextPrinterParameterized(0, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_NotEnoughForMinBet; gTasks[taskId].tCoins = 0; gTasks[taskId].data[0] = 0; @@ -3475,7 +3475,7 @@ static void Task_PrintRouletteEntryMsg(u8 taskId) void PlayRoulette(void) { u8 taskId; - ScriptContext2_Enable(); + LockPlayerFieldControls(); ShowCoinsWindow(GetCoins(), 1, 1); taskId = CreateTask(Task_PrintRouletteEntryMsg, 0); gTasks[taskId].tCoins = GetCoins(); @@ -3999,8 +3999,8 @@ static void UpdateBallPos(struct Sprite *sprite) sprite->y2 = -cos * sprite->sBallDistToCenter >> 12; if (IsSEPlaying()) { - m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, sprite->x2); - m4aMPlayPanpotControl(&gMPlayInfo_SE2, 0xFFFF, sprite->x2); + m4aMPlayPanpotControl(&gMPlayInfo_SE1, TRACKS_ALL, sprite->x2); + m4aMPlayPanpotControl(&gMPlayInfo_SE2, TRACKS_ALL, sprite->x2); } } @@ -4449,13 +4449,13 @@ static void SetBallStuck(struct Sprite *sprite) if (sRoulette->useTaillow) { if (sprite->sStuckOnWheelLeft) - PlayCry1(SPECIES_TAILLOW, -63); + PlayCry_Normal(SPECIES_TAILLOW, -63); else - PlayCry1(SPECIES_TAILLOW, 63); + PlayCry_Normal(SPECIES_TAILLOW, 63); } else { - PlayCry1(SPECIES_SHROOMISH, -63); + PlayCry_Normal(SPECIES_SHROOMISH, -63); } slotsToSkip = 2; @@ -4516,7 +4516,7 @@ static void SpriteCB_ShroomishExit(struct Sprite *sprite) // Delay for screen shaking, then exit left if (sprite->data[1]++ >= sprite->data[3]) { - sprite->x -= 2; + sprite->x -= 2; if (sprite->x < -16) { if (!sRoulette->ballUnstuck) @@ -4704,8 +4704,8 @@ static void SpriteCB_Taillow_FlyIn(struct Sprite *sprite) if (IsSEPlaying()) { s8 pan = -((116 - sprite->x) / 2); - m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, pan); - m4aMPlayPanpotControl(&gMPlayInfo_SE2, 0xFFFF, pan); + m4aMPlayPanpotControl(&gMPlayInfo_SE1, TRACKS_ALL, pan); + m4aMPlayPanpotControl(&gMPlayInfo_SE2, TRACKS_ALL, pan); } } else @@ -4719,9 +4719,9 @@ static void SpriteCB_Taillow_FlyIn(struct Sprite *sprite) { m4aSongNumStartOrChange(SE_TAILLOW_WING_FLAP); if (sRoulette->ball->sStuckOnWheelLeft == 0) - PlayCry1(SPECIES_TAILLOW, 63); + PlayCry_Normal(SPECIES_TAILLOW, 63); else - PlayCry1(SPECIES_TAILLOW, -63); + PlayCry_Normal(SPECIES_TAILLOW, -63); StartSpriteAnim(sprite, sRoulette->ball->sStuckOnWheelLeft + 2); sprite->data[1] = 45; sprite->callback = SpriteCB_Taillow_PickUpBall; diff --git a/src/safari_zone.c b/src/safari_zone.c index 1f13976569..ab4d4736ce 100644 --- a/src/safari_zone.c +++ b/src/safari_zone.c @@ -83,7 +83,7 @@ bool8 SafariZoneTakeStep(void) sSafariZoneStepCounter--; if (sSafariZoneStepCounter == 0) { - ScriptContext1_SetupScript(SafariZone_EventScript_TimesUp); + ScriptContext_SetupScript(SafariZone_EventScript_TimesUp); return TRUE; } return FALSE; @@ -91,7 +91,7 @@ bool8 SafariZoneTakeStep(void) void SafariZoneRetirePrompt(void) { - ScriptContext1_SetupScript(SafariZone_EventScript_RetirePrompt); + ScriptContext_SetupScript(SafariZone_EventScript_RetirePrompt); } void CB2_EndSafariBattle(void) @@ -105,15 +105,15 @@ void CB2_EndSafariBattle(void) } else if (gBattleOutcome == B_OUTCOME_NO_SAFARI_BALLS) { - ScriptContext2_RunNewScript(SafariZone_EventScript_OutOfBallsMidBattle); + RunScriptImmediately(SafariZone_EventScript_OutOfBallsMidBattle); WarpIntoMap(); gFieldCallback = FieldCB_ReturnToFieldNoScriptCheckMusic; SetMainCallback2(CB2_LoadMap); } else if (gBattleOutcome == B_OUTCOME_CAUGHT) { - ScriptContext1_SetupScript(SafariZone_EventScript_OutOfBalls); - ScriptContext1_Stop(); + ScriptContext_SetupScript(SafariZone_EventScript_OutOfBalls); + ScriptContext_Stop(); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } } diff --git a/src/save.c b/src/save.c index 52301df036..e7c91580e5 100644 --- a/src/save.c +++ b/src/save.c @@ -13,13 +13,13 @@ #include "link.h" #include "constants/game_stat.h" -static u16 CalculateChecksum(void *data, u16 size); -static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section); -static u8 GetSaveValidStatus(const struct SaveSectionLocation *location); -static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location); -static u8 ClearSaveData_2(u16 a1, const struct SaveSectionLocation *location); -static u8 TryWriteSector(u8 sector, u8 *data); -static u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location); +static u16 CalculateChecksum(void *, u16); +static bool8 ReadFlashSector(u8, struct SaveSector *); +static u8 GetSaveValidStatus(const struct SaveSectorLocation *); +static u8 CopySaveSlotData(u16, struct SaveSectorLocation *); +static u8 TryWriteSector(u8, u8 *); +static u8 HandleWriteSector(u16, const struct SaveSectorLocation *); +static u8 HandleReplaceSector(u16, const struct SaveSectorLocation *); // Divide save blocks into individual chunks to be written to flash sectors @@ -38,63 +38,73 @@ static u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location); * so that the same data is not always being written to the same sector. This * might be done to reduce wear on the flash memory, but I'm not sure, since all * 14 sectors get written anyway. + * + * See SECTOR_ID_* constants in save.h */ -// (u8 *)structure was removed from the first statement of the macro in Emerald. -// This is because malloc is used to allocate addresses so storing the raw -// addresses should not be done in the offsets information. -#define SAVEBLOCK_CHUNK(structure, chunkNum) \ -{ \ - chunkNum * SECTOR_DATA_SIZE, \ - min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) \ -} \ +#define SAVEBLOCK_CHUNK(structure, chunkNum) \ +{ \ + chunkNum * SECTOR_DATA_SIZE, \ + sizeof(structure) >= chunkNum * SECTOR_DATA_SIZE ? \ + min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) : 0 \ +} -static const struct SaveSectionOffsets sSaveSectionOffsets[] = +struct { - SAVEBLOCK_CHUNK(gSaveblock2, 0), + u16 offset; + u16 size; +} static const sSaveSlotLayout[NUM_SECTORS_PER_SLOT] = +{ + SAVEBLOCK_CHUNK(struct SaveBlock2, 0), // SECTOR_ID_SAVEBLOCK2 - SAVEBLOCK_CHUNK(gSaveblock1, 0), - SAVEBLOCK_CHUNK(gSaveblock1, 1), - SAVEBLOCK_CHUNK(gSaveblock1, 2), - SAVEBLOCK_CHUNK(gSaveblock1, 3), + SAVEBLOCK_CHUNK(struct SaveBlock1, 0), // SECTOR_ID_SAVEBLOCK1_START + SAVEBLOCK_CHUNK(struct SaveBlock1, 1), + SAVEBLOCK_CHUNK(struct SaveBlock1, 2), + SAVEBLOCK_CHUNK(struct SaveBlock1, 3), // SECTOR_ID_SAVEBLOCK1_END - SAVEBLOCK_CHUNK(gPokemonStorage, 0), - SAVEBLOCK_CHUNK(gPokemonStorage, 1), - SAVEBLOCK_CHUNK(gPokemonStorage, 2), - SAVEBLOCK_CHUNK(gPokemonStorage, 3), - SAVEBLOCK_CHUNK(gPokemonStorage, 4), - SAVEBLOCK_CHUNK(gPokemonStorage, 5), - SAVEBLOCK_CHUNK(gPokemonStorage, 6), - SAVEBLOCK_CHUNK(gPokemonStorage, 7), - SAVEBLOCK_CHUNK(gPokemonStorage, 8), + SAVEBLOCK_CHUNK(struct PokemonStorage, 0), // SECTOR_ID_PKMN_STORAGE_START + SAVEBLOCK_CHUNK(struct PokemonStorage, 1), + SAVEBLOCK_CHUNK(struct PokemonStorage, 2), + SAVEBLOCK_CHUNK(struct PokemonStorage, 3), + SAVEBLOCK_CHUNK(struct PokemonStorage, 4), + SAVEBLOCK_CHUNK(struct PokemonStorage, 5), + SAVEBLOCK_CHUNK(struct PokemonStorage, 6), + SAVEBLOCK_CHUNK(struct PokemonStorage, 7), + SAVEBLOCK_CHUNK(struct PokemonStorage, 8), // SECTOR_ID_PKMN_STORAGE_END }; -// iwram common +// These will produce an error if a save struct is larger than the space +// alloted for it in the flash. +STATIC_ASSERT(sizeof(struct SaveBlock2) <= SECTOR_DATA_SIZE, SaveBlock2FreeSpace); +STATIC_ASSERT(sizeof(struct SaveBlock1) <= SECTOR_DATA_SIZE * (SECTOR_ID_SAVEBLOCK1_END - SECTOR_ID_SAVEBLOCK1_START + 1), SaveBlock1FreeSpace); +STATIC_ASSERT(sizeof(struct PokemonStorage) <= SECTOR_DATA_SIZE * (SECTOR_ID_PKMN_STORAGE_END - SECTOR_ID_PKMN_STORAGE_START + 1), PokemonStorageFreeSpace); + u16 gLastWrittenSector; u32 gLastSaveCounter; u16 gLastKnownGoodSector; u32 gDamagedSaveSectors; u32 gSaveCounter; -struct SaveSection *gFastSaveSection; -u16 gUnknown_03006208; +struct SaveSector *gReadWriteSector; // Pointer to a buffer for reading/writing a sector +u16 gIncrementalSectorId; u16 gSaveUnusedVar; u16 gSaveFileStatus; void (*gGameContinueCallback)(void); -struct SaveSectionLocation gRamSaveSectionLocations[SECTOR_SAVE_SLOT_LENGTH]; +struct SaveSectorLocation gRamSaveSectorLocations[NUM_SECTORS_PER_SLOT]; u16 gSaveUnusedVar2; u16 gSaveAttemptStatus; -EWRAM_DATA struct SaveSection gSaveDataBuffer = {0}; +EWRAM_DATA struct SaveSector gSaveDataBuffer = {0}; // Buffer used for reading/writing sectors EWRAM_DATA static u8 sUnusedVar = 0; void ClearSaveData(void) { u16 i; - for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) + // Clear the full save two sectors at a time + for (i = 0; i < SECTORS_COUNT / 2; i++) { EraseFlashSector(i); - EraseFlashSector(i + NUM_SECTORS_PER_SLOT); // clear slot 2. + EraseFlashSector(i + SECTORS_COUNT / 2); } } @@ -105,20 +115,20 @@ void Save_ResetSaveCounters(void) gDamagedSaveSectors = 0; } -static bool32 SetDamagedSectorBits(u8 op, u8 bit) +static bool32 SetDamagedSectorBits(u8 op, u8 sectorId) { bool32 retVal = FALSE; switch (op) { case ENABLE: - gDamagedSaveSectors |= (1 << bit); + gDamagedSaveSectors |= (1 << sectorId); break; case DISABLE: - gDamagedSaveSectors &= ~(1 << bit); + gDamagedSaveSectors &= ~(1 << sectorId); break; case CHECK: // unused - if (gDamagedSaveSectors & (1 << bit)) + if (gDamagedSaveSectors & (1 << sectorId)) retVal = TRUE; break; } @@ -126,31 +136,35 @@ static bool32 SetDamagedSectorBits(u8 op, u8 bit) return retVal; } -static u8 SaveWriteToFlash(u16 a1, const struct SaveSectionLocation *location) +static u8 WriteSaveSectorOrSlot(u16 sectorId, const struct SaveSectorLocation *locations) { u32 status; u16 i; - gFastSaveSection = &gSaveDataBuffer; + gReadWriteSector = &gSaveDataBuffer; - if (a1 != 0xFFFF) // for link + if (sectorId != FULL_SAVE_SLOT) { - status = HandleWriteSector(a1, location); + // A sector was specified, just write that sector. + // This is never reached, FULL_SAVE_SLOT is always used instead. + status = HandleWriteSector(sectorId, locations); } else { + // No sector was specified, write full save slot. gLastKnownGoodSector = gLastWrittenSector; // backup the current written sector before attempting to write. gLastSaveCounter = gSaveCounter; gLastWrittenSector++; - gLastWrittenSector = gLastWrittenSector % SECTOR_SAVE_SLOT_LENGTH; // array count save sector locations + gLastWrittenSector = gLastWrittenSector % NUM_SECTORS_PER_SLOT; gSaveCounter++; status = SAVE_STATUS_OK; - for (i = 0; i < SECTOR_SAVE_SLOT_LENGTH; i++) - HandleWriteSector(i, location); + for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) + HandleWriteSector(i, locations); - if (gDamagedSaveSectors != 0) // skip the damaged sector. + if (gDamagedSaveSectors) { + // At least one sector save failed status = SAVE_STATUS_ERROR; gLastWrittenSector = gLastKnownGoodSector; gSaveCounter = gLastSaveCounter; @@ -160,98 +174,107 @@ static u8 SaveWriteToFlash(u16 a1, const struct SaveSectionLocation *location) return status; } -static u8 HandleWriteSector(u16 sectorId, const struct SaveSectionLocation *location) +static u8 HandleWriteSector(u16 sectorId, const struct SaveSectorLocation *locations) { u16 i; u16 sector; u8 *data; u16 size; + // Adjust sector id for current save slot sector = sectorId + gLastWrittenSector; - sector %= SECTOR_SAVE_SLOT_LENGTH; - sector += SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2); + sector %= NUM_SECTORS_PER_SLOT; + sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); - data = location[sectorId].data; - size = location[sectorId].size; + // Get current save data + data = locations[sectorId].data; + size = locations[sectorId].size; - // clear save section. - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)gFastSaveSection)[i] = 0; + // Clear temp save sector + for (i = 0; i < SECTOR_SIZE; i++) + ((u8 *)gReadWriteSector)[i] = 0; - gFastSaveSection->id = sectorId; - gFastSaveSection->security = UNKNOWN_CHECK_VALUE; - gFastSaveSection->counter = gSaveCounter; + // Set footer data + gReadWriteSector->id = sectorId; + gReadWriteSector->signature = SECTOR_SIGNATURE; + gReadWriteSector->counter = gSaveCounter; + // Copy current data to temp buffer for writing for (i = 0; i < size; i++) - gFastSaveSection->data[i] = data[i]; + gReadWriteSector->data[i] = data[i]; - gFastSaveSection->checksum = CalculateChecksum(data, size); - return TryWriteSector(sector, gFastSaveSection->data); + gReadWriteSector->checksum = CalculateChecksum(data, size); + + return TryWriteSector(sector, gReadWriteSector->data); } -static u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size) +static u8 HandleWriteSectorNBytes(u8 sectorId, u8 *data, u16 size) { u16 i; - struct SaveSection *section = &gSaveDataBuffer; + struct SaveSector *sector = &gSaveDataBuffer; - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)section)[i] = 0; + // Clear temp save sector + for (i = 0; i < SECTOR_SIZE; i++) + ((u8 *)sector)[i] = 0; - section->security = UNKNOWN_CHECK_VALUE; + sector->signature = SECTOR_SIGNATURE; + // Copy data to temp buffer for writing for (i = 0; i < size; i++) - section->data[i] = data[i]; + sector->data[i] = data[i]; - section->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used. - return TryWriteSector(sector, section->data); + sector->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used. + return TryWriteSector(sectorId, sector->data); } static u8 TryWriteSector(u8 sector, u8 *data) { - if (ProgramFlashSectorAndVerify(sector, data) != 0) // is damaged? + if (ProgramFlashSectorAndVerify(sector, data)) // is damaged? { - SetDamagedSectorBits(ENABLE, sector); // set damaged sector bits. + // Failed + SetDamagedSectorBits(ENABLE, sector); return SAVE_STATUS_ERROR; } else { - SetDamagedSectorBits(DISABLE, sector); // unset damaged sector bits. it's safe now. + // Succeeded + SetDamagedSectorBits(DISABLE, sector); return SAVE_STATUS_OK; } } -static u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location) // location is unused +static u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectorLocation *locations) { - gFastSaveSection = &gSaveDataBuffer; + gReadWriteSector = &gSaveDataBuffer; gLastKnownGoodSector = gLastWrittenSector; gLastSaveCounter = gSaveCounter; gLastWrittenSector++; - gLastWrittenSector %= SECTOR_SAVE_SLOT_LENGTH; + gLastWrittenSector %= NUM_SECTORS_PER_SLOT; gSaveCounter++; - gUnknown_03006208 = 0; + gIncrementalSectorId = 0; gDamagedSaveSectors = 0; return 0; } -static u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location) // only ever called once, and gSaveBlock2 is passed to this function. location is unused +static u32 RestoreSaveBackupVars(const struct SaveSectorLocation *locations) { - gFastSaveSection = &gSaveDataBuffer; + gReadWriteSector = &gSaveDataBuffer; gLastKnownGoodSector = gLastWrittenSector; gLastSaveCounter = gSaveCounter; - gUnknown_03006208 = 0; + gIncrementalSectorId = 0; gDamagedSaveSectors = 0; return 0; } -static u8 sub_81529D4(u16 sectorId, const struct SaveSectionLocation *location) +static u8 HandleWriteIncrementalSector(u16 numSectors, const struct SaveSectorLocation *locations) { u8 status; - if (gUnknown_03006208 < sectorId - 1) + if (gIncrementalSectorId < numSectors - 1) { status = SAVE_STATUS_OK; - HandleWriteSector(gUnknown_03006208, location); - gUnknown_03006208++; + HandleWriteSector(gIncrementalSectorId, locations); + gIncrementalSectorId++; if (gDamagedSaveSectors) { status = SAVE_STATUS_ERROR; @@ -261,17 +284,18 @@ static u8 sub_81529D4(u16 sectorId, const struct SaveSectionLocation *location) } else { + // Exceeded max sector, finished status = SAVE_STATUS_ERROR; } return status; } -static u8 sub_8152A34(u16 sectorId, const struct SaveSectionLocation *location) +static u8 HandleReplaceSectorAndVerify(u16 sectorId, const struct SaveSectorLocation *locations) { u8 status = SAVE_STATUS_OK; - ClearSaveData_2(sectorId - 1, location); + HandleReplaceSector(sectorId - 1, locations); if (gDamagedSaveSectors) { @@ -282,7 +306,8 @@ static u8 sub_8152A34(u16 sectorId, const struct SaveSectionLocation *location) return status; } -static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *location) +// Similar to HandleWriteSector, but fully erases the sector first, and skips writing the first signature byte +static u8 HandleReplaceSector(u16 sectorId, const struct SaveSectorLocation *locations) { u16 i; u16 sector; @@ -290,35 +315,39 @@ static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *locati u16 size; u8 status; + // Adjust sector id for current save slot sector = sectorId + gLastWrittenSector; - sector %= SECTOR_SAVE_SLOT_LENGTH; - sector += SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2); + sector %= NUM_SECTORS_PER_SLOT; + sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); - data = location[sectorId].data; - size = location[sectorId].size; + // Get current save data + data = locations[sectorId].data; + size = locations[sectorId].size; - // clear temp save section. - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)gFastSaveSection)[i] = 0; + // Clear temp save sector. + for (i = 0; i < SECTOR_SIZE; i++) + ((u8 *)gReadWriteSector)[i] = 0; - gFastSaveSection->id = sectorId; - gFastSaveSection->security = UNKNOWN_CHECK_VALUE; - gFastSaveSection->counter = gSaveCounter; + // Set footer data + gReadWriteSector->id = sectorId; + gReadWriteSector->signature = SECTOR_SIGNATURE; + gReadWriteSector->counter = gSaveCounter; - // set temp section's data. + // Copy current data to temp buffer for writing for (i = 0; i < size; i++) - gFastSaveSection->data[i] = data[i]; + gReadWriteSector->data[i] = data[i]; - // calculate checksum. - gFastSaveSection->checksum = CalculateChecksum(data, size); + gReadWriteSector->checksum = CalculateChecksum(data, size); + // Erase old save data EraseFlashSector(sector); status = SAVE_STATUS_OK; - for (i = 0; i < sizeof(struct UnkSaveSection); i++) + // Write new save data up to signature field + for (i = 0; i < SECTOR_SIGNATURE_OFFSET; i++) { - if (ProgramFlashByte(sector, i, ((u8 *)gFastSaveSection)[i])) + if (ProgramFlashByte(sector, i, ((u8 *)gReadWriteSector)[i])) { status = SAVE_STATUS_ERROR; break; @@ -327,16 +356,20 @@ static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *locati if (status == SAVE_STATUS_ERROR) { + // Writing save data failed SetDamagedSectorBits(ENABLE, sector); return SAVE_STATUS_ERROR; } else { + // Writing save data succeeded, write signature and counter status = SAVE_STATUS_OK; - for (i = 0; i < 7; i++) + // Write signature (skipping the first byte) and counter fields. + // The byte of signature that is skipped is instead written by WriteSectorSignatureByte or WriteSectorSignatureByte_NoOffset + for (i = 0; i < SECTOR_SIZE - (SECTOR_SIGNATURE_OFFSET + 1); i++) { - if (ProgramFlashByte(sector, 0xFF9 + i, ((u8 *)gFastSaveSection)[0xFF9 + i])) + if (ProgramFlashByte(sector, SECTOR_SIGNATURE_OFFSET + 1 + i, ((u8 *)gReadWriteSector)[SECTOR_SIGNATURE_OFFSET + 1 + i])) { status = SAVE_STATUS_ERROR; break; @@ -345,28 +378,31 @@ static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *locati if (status == SAVE_STATUS_ERROR) { + // Writing signature/counter failed SetDamagedSectorBits(ENABLE, sector); return SAVE_STATUS_ERROR; } else { + // Succeeded SetDamagedSectorBits(DISABLE, sector); return SAVE_STATUS_OK; } } } -static u8 sav12_xor_get(u16 sectorId, const struct SaveSectionLocation *location) +static u8 WriteSectorSignatureByte_NoOffset(u16 sectorId, const struct SaveSectorLocation *locations) { - u16 sector; + // Adjust sector id for current save slot + // This first line lacking -1 is the only difference from WriteSectorSignatureByte + u16 sector = sectorId + gLastWrittenSector; + sector %= NUM_SECTORS_PER_SLOT; + sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); - sector = sectorId + gLastWrittenSector; // no sub 1? - sector %= SECTOR_SAVE_SLOT_LENGTH; - sector += SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2); - - if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25)) + // Write just the first byte of the signature field, which was skipped by HandleReplaceSector + if (ProgramFlashByte(sector, SECTOR_SIGNATURE_OFFSET, SECTOR_SIGNATURE & 0xFF)) { - // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. + // Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. SetDamagedSectorBits(ENABLE, sector); gLastWrittenSector = gLastKnownGoodSector; gSaveCounter = gLastSaveCounter; @@ -374,22 +410,23 @@ static u8 sav12_xor_get(u16 sectorId, const struct SaveSectionLocation *location } else { + // Succeeded SetDamagedSectorBits(DISABLE, sector); return SAVE_STATUS_OK; } } -static u8 sub_8152CAC(u16 sectorId, const struct SaveSectionLocation *location) +static u8 CopySectorSignatureByte(u16 sectorId, const struct SaveSectorLocation *locations) { - u16 sector; + // Adjust sector id for current save slot + u16 sector = sectorId + gLastWrittenSector - 1; + sector %= NUM_SECTORS_PER_SLOT; + sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); - sector = sectorId + gLastWrittenSector - 1; - sector %= SECTOR_SAVE_SLOT_LENGTH; - sector += SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2); - - if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), ((u8 *)gFastSaveSection)[sizeof(struct UnkSaveSection)])) + // Copy just the first byte of the signature field from the read/write buffer + if (ProgramFlashByte(sector, SECTOR_SIGNATURE_OFFSET, ((u8 *)gReadWriteSector)[SECTOR_SIGNATURE_OFFSET])) { - // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. + // Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. SetDamagedSectorBits(ENABLE, sector); gLastWrittenSector = gLastKnownGoodSector; gSaveCounter = gLastSaveCounter; @@ -397,22 +434,23 @@ static u8 sub_8152CAC(u16 sectorId, const struct SaveSectionLocation *location) } else { + // Succeeded SetDamagedSectorBits(DISABLE, sector); return SAVE_STATUS_OK; } } -static u8 sub_8152D44(u16 sectorId, const struct SaveSectionLocation *location) +static u8 WriteSectorSignatureByte(u16 sectorId, const struct SaveSectorLocation *locations) { - u16 sector; + // Adjust sector id for current save slot + u16 sector = sectorId + gLastWrittenSector - 1; + sector %= NUM_SECTORS_PER_SLOT; + sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); - sector = sectorId + gLastWrittenSector - 1; // no sub 1? - sector %= SECTOR_SAVE_SLOT_LENGTH; - sector += SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2); - - if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25)) + // Write just the first byte of the signature field, which was skipped by HandleReplaceSector + if (ProgramFlashByte(sector, SECTOR_SIGNATURE_OFFSET, SECTOR_SIGNATURE & 0xFF)) { - // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. + // Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. SetDamagedSectorBits(ENABLE, sector); gLastWrittenSector = gLastKnownGoodSector; gSaveCounter = gLastSaveCounter; @@ -420,127 +458,136 @@ static u8 sub_8152D44(u16 sectorId, const struct SaveSectionLocation *location) } else { + // Succeeded SetDamagedSectorBits(DISABLE, sector); return SAVE_STATUS_OK; } } -static u8 sub_8152DD0(u16 a1, const struct SaveSectionLocation *location) +static u8 TryLoadSaveSlot(u16 sectorId, struct SaveSectorLocation *locations) { u8 status; - gFastSaveSection = &gSaveDataBuffer; - if (a1 != 0xFFFF) + gReadWriteSector = &gSaveDataBuffer; + if (sectorId != FULL_SAVE_SLOT) { + // This function may not be used with a specific sector id status = SAVE_STATUS_ERROR; } else { - status = GetSaveValidStatus(location); - sub_8152E10(0xFFFF, location); + status = GetSaveValidStatus(locations); + CopySaveSlotData(FULL_SAVE_SLOT, locations); } return status; } -static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location) +// sectorId arg is ignored, this always reads the full save slot +static u8 CopySaveSlotData(u16 sectorId, struct SaveSectorLocation *locations) { u16 i; u16 checksum; - u16 v3 = SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2); + u16 slotOffset = NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); u16 id; - for (i = 0; i < SECTOR_SAVE_SLOT_LENGTH; i++) + for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) { - DoReadFlashWholeSection(i + v3, gFastSaveSection); - id = gFastSaveSection->id; + ReadFlashSector(i + slotOffset, gReadWriteSector); + + id = gReadWriteSector->id; if (id == 0) gLastWrittenSector = i; - checksum = CalculateChecksum(gFastSaveSection->data, location[id].size); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE - && gFastSaveSection->checksum == checksum) + + checksum = CalculateChecksum(gReadWriteSector->data, locations[id].size); + + // Only copy data for sectors whose signature and checksum fields are correct + if (gReadWriteSector->signature == SECTOR_SIGNATURE && gReadWriteSector->checksum == checksum) { u16 j; - for (j = 0; j < location[id].size; j++) - ((u8 *)location[id].data)[j] = gFastSaveSection->data[j]; + for (j = 0; j < locations[id].size; j++) + ((u8 *)locations[id].data)[j] = gReadWriteSector->data[j]; } } return SAVE_STATUS_OK; } -static u8 GetSaveValidStatus(const struct SaveSectionLocation *location) +static u8 GetSaveValidStatus(const struct SaveSectorLocation *locations) { u16 i; u16 checksum; u32 saveSlot1Counter = 0; u32 saveSlot2Counter = 0; - u32 slotCheckField = 0; - bool8 securityPassed = FALSE; + u32 validSectorFlags = 0; + bool8 signatureValid = FALSE; u8 saveSlot1Status; u8 saveSlot2Status; - // check save slot 1. - for (i = 0; i < SECTOR_SAVE_SLOT_LENGTH; i++) + // Check save slot 1 + for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) { - DoReadFlashWholeSection(i, gFastSaveSection); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE) + ReadFlashSector(i, gReadWriteSector); + if (gReadWriteSector->signature == SECTOR_SIGNATURE) { - securityPassed = TRUE; - checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size); - if (gFastSaveSection->checksum == checksum) + signatureValid = TRUE; + checksum = CalculateChecksum(gReadWriteSector->data, locations[gReadWriteSector->id].size); + if (gReadWriteSector->checksum == checksum) { - saveSlot1Counter = gFastSaveSection->counter; - slotCheckField |= 1 << gFastSaveSection->id; + saveSlot1Counter = gReadWriteSector->counter; + validSectorFlags |= 1 << gReadWriteSector->id; } } } - if (securityPassed) + if (signatureValid) { - if (slotCheckField == 0x3FFF) + if (validSectorFlags == (1 << NUM_SECTORS_PER_SLOT) - 1) saveSlot1Status = SAVE_STATUS_OK; else saveSlot1Status = SAVE_STATUS_ERROR; } else { + // No sectors in slot 1 have the correct signature, treat it as empty saveSlot1Status = SAVE_STATUS_EMPTY; } - slotCheckField = 0; - securityPassed = FALSE; + validSectorFlags = 0; + signatureValid = FALSE; - // check save slot 2. - for (i = 0; i < SECTOR_SAVE_SLOT_LENGTH; i++) + // Check save slot 2 + for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) { - DoReadFlashWholeSection(i + SECTOR_SAVE_SLOT_LENGTH, gFastSaveSection); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE) + ReadFlashSector(i + NUM_SECTORS_PER_SLOT, gReadWriteSector); + if (gReadWriteSector->signature == SECTOR_SIGNATURE) { - securityPassed = TRUE; - checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size); - if (gFastSaveSection->checksum == checksum) + signatureValid = TRUE; + checksum = CalculateChecksum(gReadWriteSector->data, locations[gReadWriteSector->id].size); + if (gReadWriteSector->checksum == checksum) { - saveSlot2Counter = gFastSaveSection->counter; - slotCheckField |= 1 << gFastSaveSection->id; + saveSlot2Counter = gReadWriteSector->counter; + validSectorFlags |= 1 << gReadWriteSector->id; } } } - if (securityPassed) + if (signatureValid) { - if (slotCheckField == 0x3FFF) + if (validSectorFlags == (1 << NUM_SECTORS_PER_SLOT) - 1) saveSlot2Status = SAVE_STATUS_OK; else saveSlot2Status = SAVE_STATUS_ERROR; } else { + // No sectors in slot 2 have the correct signature, treat it as empty. saveSlot2Status = SAVE_STATUS_EMPTY; } if (saveSlot1Status == SAVE_STATUS_OK && saveSlot2Status == SAVE_STATUS_OK) { - if ((saveSlot1Counter == -1 && saveSlot2Counter == 0) || (saveSlot1Counter == 0 && saveSlot2Counter == -1)) + if ((saveSlot1Counter == -1 && saveSlot2Counter == 0) + || (saveSlot1Counter == 0 && saveSlot2Counter == -1)) { if ((unsigned)(saveSlot1Counter + 1) < (unsigned)(saveSlot2Counter + 1)) gSaveCounter = saveSlot2Counter; @@ -557,63 +604,71 @@ static u8 GetSaveValidStatus(const struct SaveSectionLocation *location) return SAVE_STATUS_OK; } + // One or both save slots are not OK + if (saveSlot1Status == SAVE_STATUS_OK) { gSaveCounter = saveSlot1Counter; if (saveSlot2Status == SAVE_STATUS_ERROR) - return SAVE_STATUS_ERROR; - return SAVE_STATUS_OK; + return SAVE_STATUS_ERROR; // Slot 2 errored + return SAVE_STATUS_OK; // Slot 1 is OK, slot 2 is empty } if (saveSlot2Status == SAVE_STATUS_OK) { gSaveCounter = saveSlot2Counter; if (saveSlot1Status == SAVE_STATUS_ERROR) - return SAVE_STATUS_ERROR; - return SAVE_STATUS_OK; + return SAVE_STATUS_ERROR; // Slot 1 errored + return SAVE_STATUS_OK; // Slot 2 is OK, slot 1 is empty } - if (saveSlot1Status == SAVE_STATUS_EMPTY && saveSlot2Status == SAVE_STATUS_EMPTY) + // Neither slot is OK, check if both are empty + if (saveSlot1Status == SAVE_STATUS_EMPTY + && saveSlot2Status == SAVE_STATUS_EMPTY) { gSaveCounter = 0; gLastWrittenSector = 0; return SAVE_STATUS_EMPTY; } + // Both slots errored gSaveCounter = 0; gLastWrittenSector = 0; return SAVE_STATUS_CORRUPT; } -static u8 sub_81530DC(u8 sectorId, u8 *data, u16 size) +static u8 TryLoadSaveSector(u8 sectorId, u8 *data, u16 size) { u16 i; - struct SaveSection *section = &gSaveDataBuffer; - DoReadFlashWholeSection(sectorId, section); - if (section->security == UNKNOWN_CHECK_VALUE) + struct SaveSector *sector = &gSaveDataBuffer; + ReadFlashSector(sectorId, sector); + if (sector->signature == SECTOR_SIGNATURE) { - u16 checksum = CalculateChecksum(section->data, size); - if (section->id == checksum) + u16 checksum = CalculateChecksum(sector->data, size); + if (sector->id == checksum) { + // Signature and checksum are correct, copy data for (i = 0; i < size; i++) - data[i] = section->data[i]; + data[i] = sector->data[i]; return SAVE_STATUS_OK; } else { + // Incorrect checksum return SAVE_STATUS_CORRUPT; } } else { + // Incorrect signature value return SAVE_STATUS_EMPTY; } } // Return value always ignored -static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section) +static bool8 ReadFlashSector(u8 sectorId, struct SaveSector *sector) { - ReadFlash(sector, 0, section->data, sizeof(struct SaveSection)); + ReadFlash(sectorId, 0, sector->data, SECTOR_SIZE); return TRUE; } @@ -633,21 +688,20 @@ static u16 CalculateChecksum(void *data, u16 size) static void UpdateSaveAddresses(void) { - int i = 0; - - gRamSaveSectionLocations[i].data = (void*)(gSaveBlock2Ptr) + sSaveSectionOffsets[i].toAdd; - gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; + int i = SECTOR_ID_SAVEBLOCK2; + gRamSaveSectorLocations[i].data = (void *)(gSaveBlock2Ptr) + sSaveSlotLayout[i].offset; + gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size; for (i = SECTOR_ID_SAVEBLOCK1_START; i <= SECTOR_ID_SAVEBLOCK1_END; i++) { - gRamSaveSectionLocations[i].data = (void*)(gSaveBlock1Ptr) + sSaveSectionOffsets[i].toAdd; - gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; + gRamSaveSectorLocations[i].data = (void *)(gSaveBlock1Ptr) + sSaveSlotLayout[i].offset; + gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size; } for (; i <= SECTOR_ID_PKMN_STORAGE_END; i++) //setting i to SECTOR_ID_PKMN_STORAGE_START does not match { - gRamSaveSectionLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSectionOffsets[i].toAdd; - gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; + gRamSaveSectorLocations[i].data = (void *)(gPokemonStoragePtr) + sSaveSlotLayout[i].offset; + gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size; } } @@ -661,43 +715,48 @@ u8 HandleSavingData(u8 saveType) UpdateSaveAddresses(); switch (saveType) { - case SAVE_HALL_OF_FAME_ERASE_BEFORE: // deletes HOF before overwriting HOF completely. unused + case SAVE_HALL_OF_FAME_ERASE_BEFORE: + // Unused. Erases the special save sectors (HOF, Trainer Hill, Recorded Battle) + // before overwriting HOF. for (i = SECTOR_ID_HOF_1; i < SECTORS_COUNT; i++) EraseFlashSector(i); - case SAVE_HALL_OF_FAME: // hall of fame. + // fallthrough + case SAVE_HALL_OF_FAME: if (GetGameStat(GAME_STAT_ENTERED_HOF) < 999) IncrementGameStat(GAME_STAT_ENTERED_HOF); - SaveSerializedGame(); - SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations); + + // Write the full save slot first + CopyPartyAndObjectsToSave(); + WriteSaveSectorOrSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations); + + // Save the Hall of Fame tempAddr = gDecompressionBuffer; HandleWriteSectorNBytes(SECTOR_ID_HOF_1, tempAddr, SECTOR_DATA_SIZE); HandleWriteSectorNBytes(SECTOR_ID_HOF_2, tempAddr + SECTOR_DATA_SIZE, SECTOR_DATA_SIZE); break; - case SAVE_NORMAL: // normal save. also called by overwriting your own save. + case SAVE_NORMAL: default: - SaveSerializedGame(); - SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations); + CopyPartyAndObjectsToSave(); + WriteSaveSectorOrSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations); break; - case SAVE_LINK: // Link and Battle Frontier - case SAVE_LINK2: // Unused - SaveSerializedGame(); + case SAVE_LINK: + case SAVE_EREADER: // Dummied, now duplicate of SAVE_LINK + // Used by link / Battle Frontier + // Write only SaveBlocks 1 and 2 (skips the PC) + CopyPartyAndObjectsToSave(); for(i = SECTOR_ID_SAVEBLOCK2; i <= SECTOR_ID_SAVEBLOCK1_END; i++) - ClearSaveData_2(i, gRamSaveSectionLocations); + HandleReplaceSector(i, gRamSaveSectorLocations); for(i = SECTOR_ID_SAVEBLOCK2; i <= SECTOR_ID_SAVEBLOCK1_END; i++) - sav12_xor_get(i, gRamSaveSectionLocations); + WriteSectorSignatureByte_NoOffset(i, gRamSaveSectorLocations); break; - // Support for Ereader was removed in Emerald. - /* - case EREADER_SAVE: // used in mossdeep "game corner" before/after battling old man e-reader trainer - SaveSerializedGame(); - SaveWriteToFlash(0, gRamSaveSectionLocations); - break; - */ case SAVE_OVERWRITE_DIFFERENT_FILE: + // Erase Hall of Fame for (i = SECTOR_ID_HOF_1; i < SECTORS_COUNT; i++) - EraseFlashSector(i); // erase HOF. - SaveSerializedGame(); - SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations); + EraseFlashSector(i); + + // Overwrite save slot + CopyPartyAndObjectsToSave(); + WriteSaveSectorOrSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations); break; } gTrainerHillVBlankCounter = backupVar; @@ -726,75 +785,91 @@ u8 TrySavingData(u8 saveType) } } -bool8 sub_8153380(void) // trade.c +bool8 LinkFullSave_Init(void) { if (gFlashMemoryPresent != TRUE) return TRUE; UpdateSaveAddresses(); - SaveSerializedGame(); - RestoreSaveBackupVarsAndIncrement(gRamSaveSectionLocations); + CopyPartyAndObjectsToSave(); + RestoreSaveBackupVarsAndIncrement(gRamSaveSectorLocations); return FALSE; } -bool8 sub_81533AC(void) // trade.c +bool8 LinkFullSave_WriteSector(void) { - u8 status = sub_81529D4(SECTOR_SAVE_SLOT_LENGTH, gRamSaveSectionLocations); + u8 status = HandleWriteIncrementalSector(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations); if (gDamagedSaveSectors) DoSaveFailedScreen(SAVE_NORMAL); + + // In this case "error" either means that an actual error was encountered + // or that the given max sector has been reached (meaning it has finished successfully). + // If there was an actual error the save failed screen above will also be shown. if (status == SAVE_STATUS_ERROR) return TRUE; else return FALSE; } -bool8 sub_81533E0(void) // trade.c +bool8 LinkFullSave_ReplaceLastSector(void) { - sub_8152A34(SECTOR_SAVE_SLOT_LENGTH, gRamSaveSectionLocations); + HandleReplaceSectorAndVerify(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations); if (gDamagedSaveSectors) DoSaveFailedScreen(SAVE_NORMAL); return FALSE; } -bool8 sub_8153408(void) // trade.c +bool8 LinkFullSave_SetLastSectorSignature(void) { - sub_8152CAC(SECTOR_SAVE_SLOT_LENGTH, gRamSaveSectionLocations); + CopySectorSignatureByte(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations); if (gDamagedSaveSectors) DoSaveFailedScreen(SAVE_NORMAL); return FALSE; } -u8 FullSaveGame(void) +u8 WriteSaveBlock2(void) { if (gFlashMemoryPresent != TRUE) return TRUE; UpdateSaveAddresses(); - SaveSerializedGame(); - RestoreSaveBackupVars(gRamSaveSectionLocations); - sub_8152A34(gUnknown_03006208 + 1, gRamSaveSectionLocations); + CopyPartyAndObjectsToSave(); + RestoreSaveBackupVars(gRamSaveSectorLocations); + + // Because RestoreSaveBackupVars is called immediately prior, gIncrementalSectorId will always be 0 below, + // so this function only saves the first sector (SECTOR_ID_SAVEBLOCK2) + HandleReplaceSectorAndVerify(gIncrementalSectorId + 1, gRamSaveSectorLocations); return FALSE; } -bool8 CheckSaveFile(void) +// Used in conjunction with WriteSaveBlock2 to write both for certain link saves. +// This will be called repeatedly in a task, writing each sector of SaveBlock1 incrementally. +// It returns TRUE when finished. +bool8 WriteSaveBlock1Sector(void) { - u8 retVal = FALSE; - u16 sectorId = ++gUnknown_03006208; + u8 finished = FALSE; + u16 sectorId = ++gIncrementalSectorId; // Because WriteSaveBlock2 will have been called prior, this will be SECTOR_ID_SAVEBLOCK1_START if (sectorId <= SECTOR_ID_SAVEBLOCK1_END) { - sub_8152A34(gUnknown_03006208 + 1, gRamSaveSectionLocations); - sub_8152D44(sectorId, gRamSaveSectionLocations); + // Write a single sector of SaveBlock1 + HandleReplaceSectorAndVerify(gIncrementalSectorId + 1, gRamSaveSectorLocations); + WriteSectorSignatureByte(sectorId, gRamSaveSectorLocations); } else { - sub_8152D44(sectorId, gRamSaveSectionLocations); - retVal = TRUE; + // Beyond SaveBlock1, don't write the sector. + // Does write 1 byte of the next sector's signature field, but as these + // are the same for all valid sectors it doesn't matter. + WriteSectorSignatureByte(sectorId, gRamSaveSectorLocations); + finished = TRUE; } + if (gDamagedSaveSectors) DoSaveFailedScreen(SAVE_LINK); - return retVal; + + return finished; } -u8 Save_LoadGameData(u8 saveType) +u8 LoadGameSave(u8 saveType) { u8 status; @@ -809,81 +884,85 @@ u8 Save_LoadGameData(u8 saveType) { case SAVE_NORMAL: default: - status = sub_8152DD0(0xFFFF, gRamSaveSectionLocations); - LoadSerializedGame(); + status = TryLoadSaveSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations); + CopyPartyAndObjectsFromSave(); gSaveFileStatus = status; gGameContinueCallback = 0; break; case SAVE_HALL_OF_FAME: - status = sub_81530DC(SECTOR_ID_HOF_1, gDecompressionBuffer, SECTOR_DATA_SIZE); + status = TryLoadSaveSector(SECTOR_ID_HOF_1, gDecompressionBuffer, SECTOR_DATA_SIZE); if (status == SAVE_STATUS_OK) - status = sub_81530DC(SECTOR_ID_HOF_2, gDecompressionBuffer + SECTOR_DATA_SIZE, SECTOR_DATA_SIZE); + status = TryLoadSaveSector(SECTOR_ID_HOF_2, &gDecompressionBuffer[SECTOR_DATA_SIZE], SECTOR_DATA_SIZE); break; } return status; } -u16 sub_815355C(void) +u16 GetSaveBlocksPointersBaseOffset(void) { - u16 i, v3; - struct SaveSection* savSection; + u16 i, slotOffset; + struct SaveSector* sector; - savSection = gFastSaveSection = &gSaveDataBuffer; + sector = gReadWriteSector = &gSaveDataBuffer; if (gFlashMemoryPresent != TRUE) - return SAVE_STATUS_EMPTY; + return 0; UpdateSaveAddresses(); - GetSaveValidStatus(gRamSaveSectionLocations); - v3 = SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2); - for (i = 0; i < SECTOR_SAVE_SLOT_LENGTH; i++) + GetSaveValidStatus(gRamSaveSectorLocations); + slotOffset = NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); + for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) { - DoReadFlashWholeSection(i + v3, gFastSaveSection); - if (gFastSaveSection->id == 0) - return savSection->data[10] + - savSection->data[11] + - savSection->data[12] + - savSection->data[13]; + ReadFlashSector(i + slotOffset, gReadWriteSector); + + // Base offset for SaveBlock2 is calculated using the trainer id + if (gReadWriteSector->id == SECTOR_ID_SAVEBLOCK2) + return sector->data[offsetof(struct SaveBlock2, playerTrainerId[0])] + + sector->data[offsetof(struct SaveBlock2, playerTrainerId[1])] + + sector->data[offsetof(struct SaveBlock2, playerTrainerId[2])] + + sector->data[offsetof(struct SaveBlock2, playerTrainerId[3])]; } - return SAVE_STATUS_EMPTY; + return 0; } -u32 TryReadSpecialSaveSection(u8 sector, u8* dst) +u32 TryReadSpecialSaveSector(u8 sector, u8 *dst) { s32 i; s32 size; - u8* savData; + u8 *savData; if (sector != SECTOR_ID_TRAINER_HILL && sector != SECTOR_ID_RECORDED_BATTLE) return SAVE_STATUS_ERROR; - ReadFlash(sector, 0, (u8 *)&gSaveDataBuffer, sizeof(struct SaveSection)); - if (*(u32*)(&gSaveDataBuffer.data[0]) != SPECIAL_SECTION_SENTINEL) + + ReadFlash(sector, 0, (u8 *)&gSaveDataBuffer, SECTOR_SIZE); + if (*(u32 *)(&gSaveDataBuffer.data[0]) != SPECIAL_SECTOR_SENTINEL) return SAVE_STATUS_ERROR; - // copies whole save section except u32 counter + + // Copies whole save sector except u32 counter i = 0; - size = 0xFFB; - savData = &gSaveDataBuffer.data[4]; + size = SECTOR_COUNTER_OFFSET - 1; + savData = &gSaveDataBuffer.data[4]; // data[4] to skip past SPECIAL_SECTOR_SENTINEL for (; i <= size; i++) dst[i] = savData[i]; return SAVE_STATUS_OK; } -u32 TryWriteSpecialSaveSection(u8 sector, u8* src) +u32 TryWriteSpecialSaveSector(u8 sector, u8 *src) { s32 i; s32 size; - u8* savData; - void* savDataBuffer; + u8 *savData; + void *savDataBuffer; if (sector != SECTOR_ID_TRAINER_HILL && sector != SECTOR_ID_RECORDED_BATTLE) return SAVE_STATUS_ERROR; savDataBuffer = &gSaveDataBuffer; - *(u32*)(savDataBuffer) = SPECIAL_SECTION_SENTINEL; + *(u32 *)(savDataBuffer) = SPECIAL_SECTOR_SENTINEL; - // copies whole save section except u32 counter + // Copies whole save sector except u32 counter i = 0; - size = 0xFFB; - savData = &gSaveDataBuffer.data[4]; + size = SECTOR_COUNTER_OFFSET - 1; + savData = &gSaveDataBuffer.data[4]; // data[4] to skip past SPECIAL_SECTOR_SENTINEL for (; i <= size; i++) savData[i] = src[i]; if (ProgramFlashSectorAndVerify(sector, savDataBuffer) != 0) @@ -891,13 +970,15 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src) return SAVE_STATUS_OK; } -#define tState data[0] -#define tTimer data[1] -#define tPartialSave data[2] +#define tState data[0] +#define tTimer data[1] +#define tInBattleTower data[2] -void Task_LinkSave(u8 taskId) +// Note that this is very different from TrySavingData(SAVE_LINK). +// Most notably it does save the PC data. +void Task_LinkFullSave(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; switch (tState) { @@ -912,15 +993,15 @@ void Task_LinkSave(u8 taskId) case 2: if (IsLinkTaskFinished()) { - if (!tPartialSave) + if (!tInBattleTower) SaveMapView(); tState = 3; } break; case 3: - if (!tPartialSave) + if (!tInBattleTower) SetContinueGameWarpStatusToDynamicWarp(); - sub_8153380(); + LinkFullSave_Init(); tState = 4; break; case 4: @@ -931,17 +1012,17 @@ void Task_LinkSave(u8 taskId) } break; case 5: - if (sub_81533AC()) + if (LinkFullSave_WriteSector()) tState = 6; else - tState = 4; + tState = 4; // Not finished, delay again break; case 6: - sub_81533E0(); + LinkFullSave_ReplaceLastSector(); tState = 7; break; case 7: - if (!tPartialSave) + if (!tInBattleTower) ClearContinueGameWarpStatus2(); SetLinkStandbyCallback(); tState = 8; @@ -949,7 +1030,7 @@ void Task_LinkSave(u8 taskId) case 8: if (IsLinkTaskFinished()) { - sub_8153408(); + LinkFullSave_SetLastSectorSignature(); tState = 9; } break; @@ -970,7 +1051,3 @@ void Task_LinkSave(u8 taskId) break; } } - -#undef tState -#undef tTimer -#undef tPartialSave diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index 8f727310cd..877482728f 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -50,7 +50,7 @@ static const struct OamData sClockOamData = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -153,7 +153,7 @@ static void SaveFailedScreenTextPrint(const u8 *text, u8 x, u8 y) color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_DYNAMIC_COLOR_6; color[2] = TEXT_COLOR_LIGHT_GRAY; - AddTextPrinterParameterized4(sWindowIds[TEXT_WIN_ID], 1, x * 8, y * 8 + 1, 0, 0, color, 0, text); + AddTextPrinterParameterized4(sWindowIds[TEXT_WIN_ID], FONT_NORMAL, x * 8, y * 8 + 1, 0, 0, color, 0, text); } void DoSaveFailedScreen(u8 saveType) @@ -217,13 +217,13 @@ static void CB2_SaveFailedScreen(void) LoadPalette(gBirchBagGrassPal, 0, 0x40); LoadPalette(sSaveFailedClockPal, 0x100, 0x20); LoadPalette(gTextWindowFrame1_Pal, 0xE0, 0x20); - LoadPalette(gUnknown_0860F074, 0xF0, 0x20); + LoadPalette(gStandardMenuPalette, 0xF0, 0x20); DrawStdFrameWithCustomTileAndPalette(sWindowIds[TEXT_WIN_ID], FALSE, 0x214, 0xE); DrawStdFrameWithCustomTileAndPalette(sWindowIds[CLOCK_WIN_ID], FALSE, 0x214, 0xE); FillWindowPixelBuffer(sWindowIds[CLOCK_WIN_ID], PIXEL_FILL(1)); // backwards? FillWindowPixelBuffer(sWindowIds[TEXT_WIN_ID], PIXEL_FILL(1)); - CopyWindowToVram(sWindowIds[CLOCK_WIN_ID], 2); // again? - CopyWindowToVram(sWindowIds[TEXT_WIN_ID], 1); + CopyWindowToVram(sWindowIds[CLOCK_WIN_ID], COPYWIN_GFX); // again? + CopyWindowToVram(sWindowIds[TEXT_WIN_ID], COPYWIN_MAP); SaveFailedScreenTextPrint(gText_SaveFailedCheckingBackup, 1, 0); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); EnableInterrupts(1); @@ -363,9 +363,10 @@ static bool8 VerifySectorWipe(u16 sector) ReadFlash(sector, 0, (u8 *)ptr, SECTOR_SIZE); - for (i = 0; i < 0x400; i++, ptr++) + // 1/4 because ptr is u32 + for (i = 0; i < SECTOR_SIZE / 4; i++, ptr++) if (*ptr) - return TRUE; + return TRUE; // Sector has nonzero data, failed return FALSE; } @@ -375,6 +376,7 @@ static bool8 WipeSector(u16 sector) u16 i, j; bool8 failed = TRUE; + // Attempt to wipe sector with an arbitrary attempt limit of 130 for (i = 0; failed && i < 130; i++) { for (j = 0; j < SECTOR_SIZE; j++) diff --git a/src/save_location.c b/src/save_location.c index aa56d7b16c..74d2f2c44d 100644 --- a/src/save_location.c +++ b/src/save_location.c @@ -1,15 +1,16 @@ #include "global.h" #include "save_location.h" -#include "constants/maps.h" + +#define LIST_END 0xFFFF static bool32 IsCurMapInLocationList(const u16 *list) { s32 i; - u16 locSum = (gSaveBlock1Ptr->location.mapGroup << 8) + (gSaveBlock1Ptr->location.mapNum); + u16 map = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum; - for (i = 0; list[i] != 0xFFFF; i++) + for (i = 0; list[i] != LIST_END; i++) { - if (list[i] == locSum) + if (list[i] == map) return TRUE; } @@ -56,7 +57,7 @@ static const u16 sSaveLocationPokeCenterList[] = MAP_TRADE_CENTER, MAP_RECORD_CORNER, MAP_BATTLE_COLOSSEUM_4P, - 0xFFFF, + LIST_END, }; static bool32 IsCurMapPokeCenter(void) @@ -67,7 +68,7 @@ static bool32 IsCurMapPokeCenter(void) static const u16 sSaveLocationReloadLocList[] = // There's only 1 location, and it's presumed its for the save reload feature for battle tower. { MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, - 0xFFFF, + LIST_END, }; static bool32 IsCurMapReloadLocation(void) @@ -76,20 +77,20 @@ static bool32 IsCurMapReloadLocation(void) } // Nulled out list. Unknown what this would have been. -static const u16 sUnknown_0861440E[] = +static const u16 sEmptyMapList[] = { - 0xFFFF, + LIST_END, }; -static bool32 sub_81AFCEC(void) +static bool32 IsCurMapInEmptyList(void) { - return IsCurMapInLocationList(sUnknown_0861440E); + return IsCurMapInLocationList(sEmptyMapList); } static void TrySetPokeCenterWarpStatus(void) { - if (IsCurMapPokeCenter() == FALSE) - gSaveBlock2Ptr->specialSaveWarpFlags &= ~(POKECENTER_SAVEWARP); + if (!IsCurMapPokeCenter()) + gSaveBlock2Ptr->specialSaveWarpFlags &= ~POKECENTER_SAVEWARP; else gSaveBlock2Ptr->specialSaveWarpFlags |= POKECENTER_SAVEWARP; } @@ -97,16 +98,16 @@ static void TrySetPokeCenterWarpStatus(void) static void TrySetReloadWarpStatus(void) { if (!IsCurMapReloadLocation()) - gSaveBlock2Ptr->specialSaveWarpFlags &= ~(LOBBY_SAVEWARP); + gSaveBlock2Ptr->specialSaveWarpFlags &= ~LOBBY_SAVEWARP; else gSaveBlock2Ptr->specialSaveWarpFlags |= LOBBY_SAVEWARP; } -// this function definitely sets a warp status, but because the list is empty, it's unknown what this does yet. -static void sub_81AFD5C(void) +// Unknown save warp flag. Never set because map list is empty. +static void TrySetUnknownWarpStatus(void) { - if (!sub_81AFCEC()) - gSaveBlock2Ptr->specialSaveWarpFlags &= ~(UNK_SPECIAL_SAVE_WARP_FLAG_3); + if (!IsCurMapInEmptyList()) + gSaveBlock2Ptr->specialSaveWarpFlags &= ~UNK_SPECIAL_SAVE_WARP_FLAG_3; else gSaveBlock2Ptr->specialSaveWarpFlags |= UNK_SPECIAL_SAVE_WARP_FLAG_3; } @@ -115,21 +116,21 @@ void TrySetMapSaveWarpStatus(void) { TrySetPokeCenterWarpStatus(); TrySetReloadWarpStatus(); - sub_81AFD5C(); + TrySetUnknownWarpStatus(); } -// In FRLG, only 0x1, 0x10, and 0x20 are set when the pokedex is received -// 0x2, 0x4, 0x8, and 0x8000 are instead set by SetPostgameFlags +// In FRLG, only bits 0, 4, and 5 are set when the pokedex is received. +// Bits 1, 2, 3, and 15 are instead set by SetPostgameFlags. // These flags are read by Pokemon Colosseum/XD for linking. XD Additionally requires FLAG_SYS_GAME_CLEAR void SetUnlockedPokedexFlags(void) { - gSaveBlock2Ptr->gcnLinkFlags |= 0x8000; - gSaveBlock2Ptr->gcnLinkFlags |= 0x1; - gSaveBlock2Ptr->gcnLinkFlags |= 0x2; - gSaveBlock2Ptr->gcnLinkFlags |= 0x4; - gSaveBlock2Ptr->gcnLinkFlags |= 0x10; - gSaveBlock2Ptr->gcnLinkFlags |= 0x20; - gSaveBlock2Ptr->gcnLinkFlags |= 0x8; + gSaveBlock2Ptr->gcnLinkFlags |= (1 << 15); + gSaveBlock2Ptr->gcnLinkFlags |= (1 << 0); + gSaveBlock2Ptr->gcnLinkFlags |= (1 << 1); + gSaveBlock2Ptr->gcnLinkFlags |= (1 << 2); + gSaveBlock2Ptr->gcnLinkFlags |= (1 << 4); + gSaveBlock2Ptr->gcnLinkFlags |= (1 << 5); + gSaveBlock2Ptr->gcnLinkFlags |= (1 << 3); } void SetChampionSaveWarp(void) diff --git a/src/scrcmd.c b/src/scrcmd.c index f53483978b..a1262730ad 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -57,11 +57,12 @@ EWRAM_DATA const u8 *gRamScriptRetAddr = NULL; static EWRAM_DATA u32 sAddressOffset = 0; // For relative addressing in vgoto etc., used by saved scripts (e.g. Mystery Event) static EWRAM_DATA u16 sPauseCounter = 0; static EWRAM_DATA u16 sMovingNpcId = 0; -static EWRAM_DATA u16 sMovingNpcMapBank = 0; -static EWRAM_DATA u16 sMovingNpcMapId = 0; +static EWRAM_DATA u16 sMovingNpcMapGroup = 0; +static EWRAM_DATA u16 sMovingNpcMapNum = 0; static EWRAM_DATA u16 sFieldEffectScriptId = 0; -static u8 gBrailleWindowId; +static u8 sBrailleWindowId; +static bool8 gIsScriptedWildDouble; extern const SpecialFunc gSpecials[]; extern const u8 *gStdScripts[]; @@ -84,7 +85,7 @@ static const u8 sScriptConditionTable[6][3] = 1, 0, 1, // != }; -static u8 * const sScriptStringVars[] = +static u8 *const sScriptStringVars[] = { gStringVar1, gStringVar2, @@ -141,7 +142,7 @@ bool8 ScrCmd_callnative(struct ScriptContext *ctx) bool8 ScrCmd_waitstate(struct ScriptContext *ctx) { - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } @@ -286,7 +287,7 @@ bool8 ScrCmd_returnram(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_killscript(struct ScriptContext *ctx) +bool8 ScrCmd_endram(struct ScriptContext *ctx) { ClearRamScript(); StopScript(ctx); @@ -295,9 +296,9 @@ bool8 ScrCmd_killscript(struct ScriptContext *ctx) bool8 ScrCmd_setmysteryeventstatus(struct ScriptContext *ctx) { - u8 value = ScriptReadByte(ctx); + u8 status = ScriptReadByte(ctx); - SetMysteryEventScriptStatus(value); + SetMysteryEventScriptStatus(status); return FALSE; } @@ -309,7 +310,7 @@ bool8 ScrCmd_loadword(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_loadbytefromaddr(struct ScriptContext *ctx) +bool8 ScrCmd_loadbytefromptr(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); @@ -317,7 +318,7 @@ bool8 ScrCmd_loadbytefromaddr(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_writebytetoaddr(struct ScriptContext *ctx) +bool8 ScrCmd_setptr(struct ScriptContext *ctx) { u8 value = ScriptReadByte(ctx); @@ -405,7 +406,7 @@ bool8 ScrCmd_compare_local_to_value(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_compare_local_to_addr(struct ScriptContext *ctx) +bool8 ScrCmd_compare_local_to_ptr(struct ScriptContext *ctx) { const u8 value1 = ctx->data[ScriptReadByte(ctx)]; const u8 value2 = *(const u8 *)ScriptReadWord(ctx); @@ -414,7 +415,7 @@ bool8 ScrCmd_compare_local_to_addr(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_compare_addr_to_local(struct ScriptContext *ctx) +bool8 ScrCmd_compare_ptr_to_local(struct ScriptContext *ctx) { const u8 value1 = *(const u8 *)ScriptReadWord(ctx); const u8 value2 = ctx->data[ScriptReadByte(ctx)]; @@ -423,7 +424,7 @@ bool8 ScrCmd_compare_addr_to_local(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_compare_addr_to_value(struct ScriptContext *ctx) +bool8 ScrCmd_compare_ptr_to_value(struct ScriptContext *ctx) { const u8 value1 = *(const u8 *)ScriptReadWord(ctx); const u8 value2 = ScriptReadByte(ctx); @@ -432,7 +433,7 @@ bool8 ScrCmd_compare_addr_to_value(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_compare_addr_to_addr(struct ScriptContext *ctx) +bool8 ScrCmd_compare_ptr_to_ptr(struct ScriptContext *ctx) { const u8 value1 = *(const u8 *)ScriptReadWord(ctx); const u8 value2 = *(const u8 *)ScriptReadWord(ctx); @@ -459,7 +460,7 @@ bool8 ScrCmd_compare_var_to_var(struct ScriptContext *ctx) return FALSE; } -// Note: addvar doesn't support adding from a variable in vanilla. If you were to +// Note: addvar doesn't support adding from a variable in vanilla. If you were to // add a VarGet() to the above, make sure you change the `addvar VAR_*, -1` // in the contest scripts to `subvar VAR_*, 1`, else contests will break. bool8 ScrCmd_addvar(struct ScriptContext *ctx) @@ -605,15 +606,13 @@ bool8 ScrCmd_incrementgamestat(struct ScriptContext *ctx) bool8 ScrCmd_animateflash(struct ScriptContext *ctx) { AnimateFlash(ScriptReadByte(ctx)); - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } -bool8 ScrCmd_setflashradius(struct ScriptContext *ctx) +bool8 ScrCmd_setflashlevel(struct ScriptContext *ctx) { - u16 flashLevel = VarGet(ScriptReadHalfword(ctx)); - - Overworld_SetFlashLevel(flashLevel); + SetFlashLevel(VarGet(ScriptReadHalfword(ctx))); return FALSE; } @@ -648,17 +647,17 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx) switch (mode) { - case FADE_TO_BLACK: - case FADE_TO_WHITE: - default: - CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE); - FadeScreen(mode, 0); - break; - case FADE_FROM_BLACK: - case FADE_FROM_WHITE: - CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_DECOMP_BUFFER_SIZE); - FadeScreen(mode, 0); - break; + case FADE_TO_BLACK: + case FADE_TO_WHITE: + default: + CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE); + FadeScreen(mode, 0); + break; + case FADE_FROM_BLACK: + case FADE_FROM_WHITE: + CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_DECOMP_BUFFER_SIZE); + FadeScreen(mode, 0); + break; } SetupNativeScript(ctx, IsPaletteNotActive); @@ -667,9 +666,7 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx) static bool8 RunPauseTimer(void) { - sPauseCounter--; - - if (sPauseCounter == 0) + if (--sPauseCounter == 0) return TRUE; else return FALSE; @@ -710,13 +707,13 @@ bool8 ScrCmd_setweather(struct ScriptContext *ctx) { u16 weather = VarGet(ScriptReadHalfword(ctx)); - SetSav1Weather(weather); + SetSavedWeather(weather); return FALSE; } bool8 ScrCmd_resetweather(struct ScriptContext *ctx) { - SetSav1WeatherFromCurrMapHeader(); + SetSavedWeatherFromCurrMapHeader(); return FALSE; } @@ -790,10 +787,10 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx) u16 y; PlayerGetDestCoords(&x, &y); - if (mapGroup == 0xFF && mapNum == 0xFF) - SetWarpDestinationToFixedHoleWarp(x - 7, y - 7); + if (mapGroup == MAP_GROUP(UNDEFINED) && mapNum == MAP_NUM(UNDEFINED)) + SetWarpDestinationToFixedHoleWarp(x - MAP_OFFSET, y - MAP_OFFSET); else - SetWarpDestination(mapGroup, mapNum, -1, x - 7, y - 7); + SetWarpDestination(mapGroup, mapNum, WARP_ID_NONE, x - MAP_OFFSET, y - MAP_OFFSET); DoFallWarp(); ResetInitialPlayerAvatarState(); return TRUE; @@ -944,9 +941,9 @@ bool8 ScrCmd_waitfanfare(struct ScriptContext *ctx) bool8 ScrCmd_playbgm(struct ScriptContext *ctx) { u16 songId = ScriptReadHalfword(ctx); - bool8 val = ScriptReadByte(ctx); + bool8 save = ScriptReadByte(ctx); - if (val == TRUE) + if (save == TRUE) Overworld_SetSavedMusic(songId); PlayNewMapMusic(songId); return FALSE; @@ -1003,7 +1000,7 @@ bool8 ScrCmd_applymovement(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_applymovement_at(struct ScriptContext *ctx) +bool8 ScrCmd_applymovementat(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); const void *movementScript = (const void *)ScriptReadWord(ctx); @@ -1017,7 +1014,7 @@ bool8 ScrCmd_applymovement_at(struct ScriptContext *ctx) static bool8 WaitForMovementFinish(void) { - return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapId, sMovingNpcMapBank); + return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapNum, sMovingNpcMapGroup); } bool8 ScrCmd_waitmovement(struct ScriptContext *ctx) @@ -1026,24 +1023,24 @@ bool8 ScrCmd_waitmovement(struct ScriptContext *ctx) if (localId != 0) sMovingNpcId = localId; - sMovingNpcMapBank = gSaveBlock1Ptr->location.mapGroup; - sMovingNpcMapId = gSaveBlock1Ptr->location.mapNum; + sMovingNpcMapGroup = gSaveBlock1Ptr->location.mapGroup; + sMovingNpcMapNum = gSaveBlock1Ptr->location.mapNum; SetupNativeScript(ctx, WaitForMovementFinish); return TRUE; } -bool8 ScrCmd_waitmovement_at(struct ScriptContext *ctx) +bool8 ScrCmd_waitmovementat(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); - u8 mapBank; - u8 mapId; + u8 mapGroup; + u8 mapNum; if (localId != 0) sMovingNpcId = localId; - mapBank = ScriptReadByte(ctx); - mapId = ScriptReadByte(ctx); - sMovingNpcMapBank = mapBank; - sMovingNpcMapId = mapId; + mapGroup = ScriptReadByte(ctx); + mapNum = ScriptReadByte(ctx); + sMovingNpcMapGroup = mapGroup; + sMovingNpcMapNum = mapNum; SetupNativeScript(ctx, WaitForMovementFinish); return TRUE; } @@ -1056,7 +1053,7 @@ bool8 ScrCmd_removeobject(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_removeobject_at(struct ScriptContext *ctx) +bool8 ScrCmd_removeobjectat(struct ScriptContext *ctx) { u16 objectId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1074,7 +1071,7 @@ bool8 ScrCmd_addobject(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_addobject_at(struct ScriptContext *ctx) +bool8 ScrCmd_addobjectat(struct ScriptContext *ctx) { u16 objectId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1100,7 +1097,7 @@ bool8 ScrCmd_setobjectxyperm(struct ScriptContext *ctx) u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); - Overworld_SetObjEventTemplateCoords(localId, x, y); + SetObjEventTemplateCoords(localId, x, y); return FALSE; } @@ -1112,7 +1109,7 @@ bool8 ScrCmd_copyobjectxytoperm(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_showobject_at(struct ScriptContext *ctx) +bool8 ScrCmd_showobjectat(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1122,7 +1119,7 @@ bool8 ScrCmd_showobject_at(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_hideobject_at(struct ScriptContext *ctx) +bool8 ScrCmd_hideobjectat(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1132,24 +1129,24 @@ bool8 ScrCmd_hideobject_at(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_setobjectpriority(struct ScriptContext *ctx) +bool8 ScrCmd_setobjectsubpriority(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); u8 priority = ScriptReadByte(ctx); - SetObjectPriority(localId, mapNum, mapGroup, priority + 83); + SetObjectSubpriority(localId, mapNum, mapGroup, priority + 83); return FALSE; } -bool8 ScrCmd_resetobjectpriority(struct ScriptContext *ctx) +bool8 ScrCmd_resetobjectsubpriority(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); - ResetObjectPriority(localId, mapNum, mapGroup); + ResetObjectSubpriority(localId, mapNum, mapGroup); return FALSE; } @@ -1177,29 +1174,29 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx) u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 movementType = ScriptReadByte(ctx); - Overworld_SetObjEventTemplateMovementType(localId, movementType); + SetObjEventTemplateMovementType(localId, movementType); return FALSE; } bool8 ScrCmd_createvobject(struct ScriptContext *ctx) { u8 graphicsId = ScriptReadByte(ctx); - u8 objectEventId = ScriptReadByte(ctx); + u8 virtualObjId = ScriptReadByte(ctx); u16 x = VarGet(ScriptReadHalfword(ctx)); u32 y = VarGet(ScriptReadHalfword(ctx)); u8 elevation = ScriptReadByte(ctx); u8 direction = ScriptReadByte(ctx); - CreateObjectSprite(graphicsId, objectEventId, x, y, elevation, direction); + CreateVirtualObject(graphicsId, virtualObjId, x, y, elevation, direction); return FALSE; } bool8 ScrCmd_turnvobject(struct ScriptContext *ctx) { - u8 objectEventId = ScriptReadByte(ctx); + u8 virtualObjId = ScriptReadByte(ctx); u8 direction = ScriptReadByte(ctx); - TurnObjectEventSprite(objectEventId, direction); + TurnVirtualObject(virtualObjId, direction); return FALSE; } @@ -1207,7 +1204,7 @@ bool8 ScrCmd_turnvobject(struct ScriptContext *ctx) // The player is frozen after waiting for their current movement to finish. bool8 ScrCmd_lockall(struct ScriptContext *ctx) { - if (IsUpdateLinkStateCBActive()) + if (IsOverworldLinkActive()) { return FALSE; } @@ -1223,7 +1220,7 @@ bool8 ScrCmd_lockall(struct ScriptContext *ctx) // The player and selected object are frozen after waiting for their current movement to finish. bool8 ScrCmd_lock(struct ScriptContext *ctx) { - if (IsUpdateLinkStateCBActive()) + if (IsOverworldLinkActive()) { return FALSE; } @@ -1309,8 +1306,8 @@ bool8 ScrCmd_messageinstant(struct ScriptContext *ctx) if (msg == NULL) msg = (const u8 *)ctx->data[0]; LoadMessageBoxAndBorderGfx(); - DrawDialogueFrame(0, 1); - AddTextPrinterParameterized(0, 1, msg, 0, 1, 0, 0); + DrawDialogueFrame(0, TRUE); + AddTextPrinterParameterized(0, FONT_NORMAL, msg, 0, 1, 0, NULL); return FALSE; } @@ -1348,7 +1345,7 @@ bool8 ScrCmd_yesnobox(struct ScriptContext *ctx) if (ScriptMenu_YesNo(left, top) == TRUE) { - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } else @@ -1366,7 +1363,7 @@ bool8 ScrCmd_multichoice(struct ScriptContext *ctx) if (ScriptMenu_Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE) { - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } else @@ -1385,7 +1382,7 @@ bool8 ScrCmd_multichoicedefault(struct ScriptContext *ctx) if (ScriptMenu_MultichoiceWithDefault(left, top, multichoiceId, ignoreBPress, defaultChoice) == TRUE) { - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } else @@ -1415,7 +1412,7 @@ bool8 ScrCmd_multichoicegrid(struct ScriptContext *ctx) if (ScriptMenu_MultichoiceGrid(left, top, multichoiceId, ignoreBPress, numColumns) == TRUE) { - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } else @@ -1444,7 +1441,7 @@ bool8 ScrCmd_drawboxtext(struct ScriptContext *ctx) /*if (Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE) { - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; }*/ return FALSE; @@ -1462,7 +1459,9 @@ bool8 ScrCmd_showmonpic(struct ScriptContext *ctx) bool8 ScrCmd_hidemonpic(struct ScriptContext *ctx) { - bool8 (*func)(void) = ScriptMenu_GetPicboxWaitFunc(); + // The hide function returns a pointer to a function + // that returns true once the pic is hidden + bool8 (*func)(void) = ScriptMenu_HidePokemonPic(); if (func == NULL) return FALSE; @@ -1479,7 +1478,7 @@ bool8 ScrCmd_showcontestpainting(struct ScriptContext *ctx) SetContestWinnerForPainting(contestWinnerId); ShowContestPainting(); - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } @@ -1497,7 +1496,7 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx) // in Emerald they are unused and position is calculated below instead StringExpandPlaceholders(gStringVar4, ptr + 6); - width = GetStringWidth(6, gStringVar4, -1) / 8u; + width = GetStringWidth(FONT_BRAILLE, gStringVar4, -1) / 8u; if (width > 28) width = 28; @@ -1527,13 +1526,13 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx) yText = (yText - yWindow - 1) * 8; winTemplate = CreateWindowTemplate(0, xWindow, yWindow + 1, width, height, 0xF, 0x1); - gBrailleWindowId = AddWindow(&winTemplate); - LoadUserWindowBorderGfx(gBrailleWindowId, 0x214, 0xE0); - DrawStdWindowFrame(gBrailleWindowId, 0); - PutWindowTilemap(gBrailleWindowId); - FillWindowPixelBuffer(gBrailleWindowId, PIXEL_FILL(1)); - AddTextPrinterParameterized(gBrailleWindowId, 6, gStringVar4, xText, yText, 0xFF, 0x0); - CopyWindowToVram(gBrailleWindowId, 3); + sBrailleWindowId = AddWindow(&winTemplate); + LoadUserWindowBorderGfx(sBrailleWindowId, 0x214, 0xE0); + DrawStdWindowFrame(sBrailleWindowId, FALSE); + PutWindowTilemap(sBrailleWindowId); + FillWindowPixelBuffer(sBrailleWindowId, PIXEL_FILL(1)); + AddTextPrinterParameterized(sBrailleWindowId, FONT_BRAILLE, gStringVar4, xText, yText, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sBrailleWindowId, COPYWIN_FULL); return FALSE; } @@ -1577,7 +1576,7 @@ bool8 ScrCmd_bufferpartymonnick(struct ScriptContext *ctx) u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, sScriptStringVars[stringVarIndex]); - StringGetEnd10(sScriptStringVars[stringVarIndex]); + StringGet_Nickname(sScriptStringVars[stringVarIndex]); return FALSE; } @@ -1637,12 +1636,12 @@ bool8 ScrCmd_bufferstdstring(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_buffercontesttype(struct ScriptContext *ctx) +bool8 ScrCmd_buffercontestname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); - u16 index = VarGet(ScriptReadHalfword(ctx)); + u16 category = VarGet(ScriptReadHalfword(ctx)); - BufferContestName(sScriptStringVars[stringVarIndex], index); + BufferContestName(sScriptStringVars[stringVarIndex], category); return FALSE; } @@ -1655,7 +1654,7 @@ bool8 ScrCmd_bufferstring(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_vloadword(struct ScriptContext *ctx) +bool8 ScrCmd_vbuffermessage(struct ScriptContext *ctx) { const u8 *ptr = (u8 *)(ScriptReadWord(ctx) - sAddressOffset); @@ -1876,15 +1875,33 @@ bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx) u16 species = ScriptReadHalfword(ctx); u8 level = ScriptReadByte(ctx); u16 item = ScriptReadHalfword(ctx); + u16 species2 = ScriptReadHalfword(ctx); + u8 level2 = ScriptReadByte(ctx); + u16 item2 = ScriptReadHalfword(ctx); + + if(species2 == SPECIES_NONE) + { + CreateScriptedWildMon(species, level, item); + gIsScriptedWildDouble = FALSE; + } + else + { + CreateScriptedDoubleWildMon(species, level, item, species2, level2, item2); + gIsScriptedWildDouble = TRUE; + } - CreateScriptedWildMon(species, level, item); return FALSE; } bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx) { - BattleSetup_StartScriptedWildBattle(); - ScriptContext1_Stop(); + if (gIsScriptedWildDouble == FALSE) + BattleSetup_StartScriptedWildBattle(); + else + BattleSetup_StartScriptedDoubleWildBattle(); + + ScriptContext_Stop(); + return TRUE; } @@ -1893,7 +1910,7 @@ bool8 ScrCmd_pokemart(struct ScriptContext *ctx) const void *ptr = (void *)ScriptReadWord(ctx); CreatePokemartMenu(ptr); - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } @@ -1902,7 +1919,7 @@ bool8 ScrCmd_pokemartdecoration(struct ScriptContext *ctx) const void *ptr = (void *)ScriptReadWord(ctx); CreateDecorationShop1Menu(ptr); - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } @@ -1912,16 +1929,16 @@ bool8 ScrCmd_pokemartdecoration2(struct ScriptContext *ctx) const void *ptr = (void *)ScriptReadWord(ctx); CreateDecorationShop2Menu(ptr); - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } bool8 ScrCmd_playslotmachine(struct ScriptContext *ctx) { - u8 slotMachineIndex = VarGet(ScriptReadHalfword(ctx)); + u8 machineId = VarGet(ScriptReadHalfword(ctx)); - PlaySlotMachine(slotMachineIndex, CB2_ReturnToFieldContinueScriptPlayMapMusic); - ScriptContext1_Stop(); + PlaySlotMachine(machineId, CB2_ReturnToFieldContinueScriptPlayMapMusic); + ScriptContext_Stop(); return TRUE; } @@ -1932,24 +1949,24 @@ bool8 ScrCmd_setberrytree(struct ScriptContext *ctx) u8 growthStage = ScriptReadByte(ctx); if (berry == 0) - PlantBerryTree(treeId, 0, growthStage, FALSE); + PlantBerryTree(treeId, berry, growthStage, FALSE); else PlantBerryTree(treeId, berry, growthStage, FALSE); return FALSE; } -bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx) +bool8 ScrCmd_getpokenewsactive(struct ScriptContext *ctx) { u16 newsKind = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = GetPriceReduction(newsKind); + gSpecialVar_Result = IsPokeNewsActive(newsKind); return FALSE; } bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx) { ChooseContestMon(); - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } @@ -1957,21 +1974,21 @@ bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx) bool8 ScrCmd_startcontest(struct ScriptContext *ctx) { StartContest(); - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx) { ShowContestResults(); - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx) { ContestLinkTransfer(gSpecialVar_ContestCategory); - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE; } @@ -1984,7 +2001,7 @@ bool8 ScrCmd_dofieldeffect(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_setfieldeffectarg(struct ScriptContext *ctx) +bool8 ScrCmd_setfieldeffectargument(struct ScriptContext *ctx) { u8 argNum = ScriptReadByte(ctx); @@ -2026,7 +2043,7 @@ bool8 ScrCmd_playmoncry(struct ScriptContext *ctx) u16 species = VarGet(ScriptReadHalfword(ctx)); u16 mode = VarGet(ScriptReadHalfword(ctx)); - PlayCry5(species, mode); + PlayCry_Script(species, mode); return FALSE; } @@ -2043,12 +2060,12 @@ bool8 ScrCmd_setmetatile(struct ScriptContext *ctx) u16 tileId = VarGet(ScriptReadHalfword(ctx)); u16 isImpassable = VarGet(ScriptReadHalfword(ctx)); - x += 7; - y += 7; + x += MAP_OFFSET; + y += MAP_OFFSET; if (!isImpassable) MapGridSetMetatileIdAt(x, y, tileId); else - MapGridSetMetatileIdAt(x, y, tileId | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, tileId | MAPGRID_COLLISION_MASK); return FALSE; } @@ -2057,8 +2074,8 @@ bool8 ScrCmd_opendoor(struct ScriptContext *ctx) u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); - x += 7; - y += 7; + x += MAP_OFFSET; + y += MAP_OFFSET; PlaySE(GetDoorSoundEffect(x, y)); FieldAnimateDoorOpen(x, y); return FALSE; @@ -2069,8 +2086,8 @@ bool8 ScrCmd_closedoor(struct ScriptContext *ctx) u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); - x += 7; - y += 7; + x += MAP_OFFSET; + y += MAP_OFFSET; FieldAnimateDoorClose(x, y); return FALSE; } @@ -2094,8 +2111,8 @@ bool8 ScrCmd_setdooropen(struct ScriptContext *ctx) u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); - x += 7; - y += 7; + x += MAP_OFFSET; + y += MAP_OFFSET; FieldSetDoorOpened(x, y); return FALSE; } @@ -2105,8 +2122,8 @@ bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx) u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); - x += 7; - y += 7; + x += MAP_OFFSET; + y += MAP_OFFSET; FieldSetDoorClosed(x, y); return FALSE; } @@ -2126,7 +2143,7 @@ bool8 ScrCmd_addelevmenuitem(struct ScriptContext *ctx) bool8 ScrCmd_showelevmenu(struct ScriptContext *ctx) { /*ScriptShowElevatorMenu(); - ScriptContext1_Stop(); + ScriptContext_Stop(); return TRUE;*/ return FALSE; } @@ -2196,7 +2213,7 @@ bool8 ScrCmd_selectapproachingtrainer(struct ScriptContext *ctx) bool8 ScrCmd_lockfortrainer(struct ScriptContext *ctx) { - if (IsUpdateLinkStateCBActive()) + if (IsOverworldLinkActive()) { return FALSE; } @@ -2229,11 +2246,9 @@ bool8 ScrCmd_checkmoneventlegal(struct ScriptContext *ctx) return FALSE; } -// TODO: Should be renamed. Name implies general usage, but its specifically for Wonder Card -// See GetSavedRamScriptIfValid, which is NULL if ValidateReceivedWonderCard returns FALSE -bool8 ScrCmd_gotoram(struct ScriptContext *ctx) +bool8 ScrCmd_trywondercardscript(struct ScriptContext *ctx) { - const u8* script = GetSavedRamScriptIfValid(); + const u8 *script = GetSavedRamScriptIfValid(); if (script) { @@ -2243,7 +2258,7 @@ bool8 ScrCmd_gotoram(struct ScriptContext *ctx) return FALSE; } -// Unused +// This warp is only used by the Union Room. // For the warp used by the Aqua Hideout, see DoTeleportTileWarp bool8 ScrCmd_warpspinenter(struct ScriptContext *ctx) { @@ -2272,8 +2287,8 @@ bool8 ScrCmd_setmonmetlocation(struct ScriptContext *ctx) static void CloseBrailleWindow(void) { - ClearStdWindowAndFrame(gBrailleWindowId, 1); - RemoveWindow(gBrailleWindowId); + ClearStdWindowAndFrame(sBrailleWindowId, TRUE); + RemoveWindow(sBrailleWindowId); } bool8 ScrCmd_buffertrainerclassname(struct ScriptContext *ctx) @@ -2299,7 +2314,7 @@ void SetMovingNpcId(u16 npcId) sMovingNpcId = npcId; } -bool8 ScrCmd_warpsootopolislegend(struct ScriptContext *ctx) +bool8 ScrCmd_warpwhitefade(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -2308,7 +2323,7 @@ bool8 ScrCmd_warpsootopolislegend(struct ScriptContext *ctx) u16 y = VarGet(ScriptReadHalfword(ctx)); SetWarpDestination(mapGroup, mapNum, warpId, x, y); - DoSootopolisLegendWarp(); + DoWhiteFadeWarp(); ResetInitialPlayerAvatarState(); return TRUE; } diff --git a/src/script.c b/src/script.c index 726c065439..484f8e9662 100644 --- a/src/script.c +++ b/src/script.c @@ -1,8 +1,9 @@ #include "global.h" #include "script.h" #include "event_data.h" -#include "mevent.h" +#include "mystery_gift.h" #include "util.h" +#include "constants/event_objects.h" #include "constants/map_scripts.h" #define RAM_SCRIPT_MAGIC 51 @@ -13,12 +14,18 @@ enum { SCRIPT_MODE_NATIVE, }; -extern const u8* gRamScriptRetAddr; +enum { + CONTEXT_RUNNING, + CONTEXT_WAITING, + CONTEXT_SHUTDOWN, +}; -static u8 sScriptContext1Status; -static struct ScriptContext sScriptContext1; -static struct ScriptContext sScriptContext2; -static bool8 sScriptContext2Enabled; +extern const u8 *gRamScriptRetAddr; + +static u8 sGlobalScriptContextStatus; +static struct ScriptContext sGlobalScriptContext; +static struct ScriptContext sImmediateScriptContext; +static bool8 sLockFieldControls; extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTableEnd[]; @@ -172,79 +179,94 @@ u32 ScriptReadWord(struct ScriptContext *ctx) return (((((value3 << 8) + value2) << 8) + value1) << 8) + value0; } -void ScriptContext2_Enable(void) +void LockPlayerFieldControls(void) { - sScriptContext2Enabled = TRUE; + sLockFieldControls = TRUE; } -void ScriptContext2_Disable(void) +void UnlockPlayerFieldControls(void) { - sScriptContext2Enabled = FALSE; + sLockFieldControls = FALSE; } -bool8 ScriptContext2_IsEnabled(void) +bool8 ArePlayerFieldControlsLocked(void) { - return sScriptContext2Enabled; + return sLockFieldControls; } -bool8 ScriptContext1_IsScriptSetUp(void) +// The ScriptContext_* functions work with the primary script context, +// which yields control back to native code should the script make a wait call. + +// Checks if the global script context is able to be run right now. +bool8 ScriptContext_IsEnabled(void) { - if (sScriptContext1Status == 0) + if (sGlobalScriptContextStatus == CONTEXT_RUNNING) return TRUE; else return FALSE; } -void ScriptContext1_Init(void) +// Re-initializes the global script context to zero. +void ScriptContext_Init(void) { - InitScriptContext(&sScriptContext1, gScriptCmdTable, gScriptCmdTableEnd); - sScriptContext1Status = 2; + InitScriptContext(&sGlobalScriptContext, gScriptCmdTable, gScriptCmdTableEnd); + sGlobalScriptContextStatus = CONTEXT_SHUTDOWN; } -bool8 ScriptContext2_RunScript(void) +// Runs the script until the script makes a wait* call, then returns true if +// there's more script to run, or false if the script has hit the end. +// This function also returns false if the context is finished +// or waiting (after a call to _Stop) +bool8 ScriptContext_RunScript(void) { - if (sScriptContext1Status == 2) + if (sGlobalScriptContextStatus == CONTEXT_SHUTDOWN) return FALSE; - if (sScriptContext1Status == 1) + if (sGlobalScriptContextStatus == CONTEXT_WAITING) return FALSE; - ScriptContext2_Enable(); + LockPlayerFieldControls(); - if (!RunScriptCommand(&sScriptContext1)) + if (!RunScriptCommand(&sGlobalScriptContext)) { - sScriptContext1Status = 2; - ScriptContext2_Disable(); + sGlobalScriptContextStatus = CONTEXT_SHUTDOWN; + UnlockPlayerFieldControls(); return FALSE; } return TRUE; } -void ScriptContext1_SetupScript(const u8 *ptr) +// Sets up a new script in the global context and enables the context +void ScriptContext_SetupScript(const u8 *ptr) { - InitScriptContext(&sScriptContext1, gScriptCmdTable, gScriptCmdTableEnd); - SetupBytecodeScript(&sScriptContext1, ptr); - ScriptContext2_Enable(); - sScriptContext1Status = 0; + InitScriptContext(&sGlobalScriptContext, gScriptCmdTable, gScriptCmdTableEnd); + SetupBytecodeScript(&sGlobalScriptContext, ptr); + LockPlayerFieldControls(); + sGlobalScriptContextStatus = CONTEXT_RUNNING; } -void ScriptContext1_Stop(void) +// Puts the script into waiting mode; usually called from a wait* script command. +void ScriptContext_Stop(void) { - sScriptContext1Status = 1; + sGlobalScriptContextStatus = CONTEXT_WAITING; } -void EnableBothScriptContexts(void) +// Puts the script into running mode. +void ScriptContext_Enable(void) { - sScriptContext1Status = 0; - ScriptContext2_Enable(); + sGlobalScriptContextStatus = CONTEXT_RUNNING; + LockPlayerFieldControls(); } -void ScriptContext2_RunNewScript(const u8 *ptr) +// Sets up and runs a script in its own context immediately. The script will be +// finished when this function returns. Used mainly by all of the map header +// scripts (except the frame table scripts). +void RunScriptImmediately(const u8 *ptr) { - InitScriptContext(&sScriptContext2, gScriptCmdTable, gScriptCmdTableEnd); - SetupBytecodeScript(&sScriptContext2, ptr); - while (RunScriptCommand(&sScriptContext2) == TRUE); + InitScriptContext(&sImmediateScriptContext, gScriptCmdTable, gScriptCmdTableEnd); + SetupBytecodeScript(&sImmediateScriptContext, ptr); + while (RunScriptCommand(&sImmediateScriptContext) == TRUE); } u8 *MapHeaderGetScriptTable(u8 tag) @@ -271,7 +293,7 @@ void MapHeaderRunScriptType(u8 tag) { u8 *ptr = MapHeaderGetScriptTable(tag); if (ptr) - ScriptContext2_RunNewScript(ptr); + RunScriptImmediately(ptr); } u8 *MapHeaderCheckScriptTable(u8 tag) @@ -335,7 +357,7 @@ bool8 TryRunOnFrameMapScript(void) if (!ptr) return FALSE; - ScriptContext1_SetupScript(ptr); + ScriptContext_SetupScript(ptr); return TRUE; } @@ -343,12 +365,12 @@ void TryRunOnWarpIntoMapScript(void) { u8 *ptr = MapHeaderCheckScriptTable(MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE); if (ptr) - ScriptContext2_RunNewScript(ptr); + RunScriptImmediately(ptr); } u32 CalculateRamScriptChecksum(void) { - return CalcCRC16WithTable((u8*)(&gSaveBlock1Ptr->ramScript.data), sizeof(gSaveBlock1Ptr->ramScript.data)); + return CalcCRC16WithTable((u8 *)(&gSaveBlock1Ptr->ramScript.data), sizeof(gSaveBlock1Ptr->ramScript.data)); } void ClearRamScript(void) @@ -398,16 +420,18 @@ const u8 *GetRamScript(u8 objectId, const u8 *script) } } +#define NO_OBJECT OBJ_EVENT_ID_PLAYER + bool32 ValidateSavedRamScript(void) { struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data; if (scriptData->magic != RAM_SCRIPT_MAGIC) return FALSE; - if (scriptData->mapGroup != 0xFF) + if (scriptData->mapGroup != MAP_GROUP(UNDEFINED)) return FALSE; - if (scriptData->mapNum != 0xFF) + if (scriptData->mapNum != MAP_NUM(UNDEFINED)) return FALSE; - if (scriptData->objectId != 0xFF) + if (scriptData->objectId != NO_OBJECT) return FALSE; if (CalculateRamScriptChecksum() != gSaveBlock1Ptr->ramScript.checksum) return FALSE; @@ -417,15 +441,15 @@ bool32 ValidateSavedRamScript(void) u8 *GetSavedRamScriptIfValid(void) { struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data; - if (!ValidateReceivedWonderCard()) + if (!ValidateSavedWonderCard()) return NULL; if (scriptData->magic != RAM_SCRIPT_MAGIC) return NULL; - if (scriptData->mapGroup != 0xFF) + if (scriptData->mapGroup != MAP_GROUP(UNDEFINED)) return NULL; - if (scriptData->mapNum != 0xFF) + if (scriptData->mapNum != MAP_NUM(UNDEFINED)) return NULL; - if (scriptData->objectId != 0xFF) + if (scriptData->objectId != NO_OBJECT) return NULL; if (CalculateRamScriptChecksum() != gSaveBlock1Ptr->ramScript.checksum) { @@ -442,5 +466,5 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize) { if (scriptSize > sizeof(gSaveBlock1Ptr->ramScript.data.script)) scriptSize = sizeof(gSaveBlock1Ptr->ramScript.data.script); - InitRamScript(script, scriptSize, 0xFF, 0xFF, 0xFF); + InitRamScript(script, scriptSize, MAP_GROUP(UNDEFINED), MAP_NUM(UNDEFINED), NO_OBJECT); } diff --git a/src/script_menu.c b/src/script_menu.c index f3317773af..d25f28cb29 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -107,9 +107,9 @@ static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, bool8 ignoreB newWidth = ConvertPixelWidthToTileWidth(width); left = ScriptMenu_AdjustLeftCoordFromWidth(left, newWidth); windowId = CreateWindowFromRect(left, top, newWidth, count * 2); - SetStandardWindowBorderStyle(windowId, 0); + SetStandardWindowBorderStyle(windowId, FALSE); PrintMenuTable(windowId, count, actions); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, cursorPos); + InitMenuInUpperLeftCornerNormal(windowId, count, cursorPos); ScheduleBgCopyTilemapToVram(0); InitMultichoiceCheckWrap(ignoreBPress, count, windowId, multichoiceId); } @@ -190,7 +190,7 @@ static void Task_HandleMultichoiceInput(u8 taskId) } ClearToTransparentAndRemoveWindow(tWindowId); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } } } @@ -245,7 +245,7 @@ static void Task_HandleYesNoInput(u8 taskId) } DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 columnCount) @@ -277,10 +277,10 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignore gTasks[taskId].tIgnoreBPress = ignoreBPress; gTasks[taskId].tWindowId = CreateWindowFromRect(left, top, columnCount * newWidth, rowCount * 2); - SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, 0); + SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, FALSE); PrintMenuGridTable(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, sMultichoiceLists[multichoiceId].list); InitMenuActionGrid(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, 0); - CopyWindowToVram(gTasks[taskId].tWindowId, 3); + CopyWindowToVram(gTasks[taskId].tWindowId, COPYWIN_FULL); return TRUE; } } @@ -288,7 +288,7 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignore static void Task_HandleMultichoiceGridInput(u8 taskId) { s16 *data = gTasks[taskId].data; - s8 selection = Menu_ProcessInputGridLayout(); + s8 selection = Menu_ProcessGridInput(); switch (selection) { @@ -307,7 +307,7 @@ static void Task_HandleMultichoiceGridInput(u8 taskId) ClearToTransparentAndRemoveWindow(tWindowId); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } #undef tWindowId @@ -352,35 +352,35 @@ static void CreatePCMultichoice(void) { numChoices = 4; windowId = CreateWindowFromRect(0, 0, width, 8); - SetStandardWindowBorderStyle(windowId, 0); - AddTextPrinterParameterized(windowId, 1, gText_HallOfFame, y, 33, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(windowId, 1, gText_LogOff, y, 49, TEXT_SPEED_FF, NULL); + SetStandardWindowBorderStyle(windowId, FALSE); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_HallOfFame, y, 33, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_LogOff, y, 49, TEXT_SKIP_DRAW, NULL); } else { numChoices = 3; windowId = CreateWindowFromRect(0, 0, width, 6); - SetStandardWindowBorderStyle(windowId, 0); - AddTextPrinterParameterized(windowId, 1, gText_LogOff, y, 33, TEXT_SPEED_FF, NULL); + SetStandardWindowBorderStyle(windowId, FALSE); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_LogOff, y, 33, TEXT_SKIP_DRAW, NULL); } // Change PC name if player has met Lanette if (FlagGet(FLAG_SYS_PC_LANETTE)) - AddTextPrinterParameterized(windowId, 1, gText_LanettesPC, y, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_LanettesPC, y, 1, TEXT_SKIP_DRAW, NULL); else - AddTextPrinterParameterized(windowId, 1, gText_SomeonesPC, y, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_SomeonesPC, y, 1, TEXT_SKIP_DRAW, NULL); StringExpandPlaceholders(gStringVar4, gText_PlayersPC); PrintPlayerNameOnWindow(windowId, gStringVar4, y, 17); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, numChoices, 0); - CopyWindowToVram(windowId, 3); + InitMenuInUpperLeftCornerNormal(windowId, numChoices, 0); + CopyWindowToVram(windowId, COPYWIN_FULL); InitMultichoiceCheckWrap(FALSE, numChoices, windowId, MULTI_PC); } void ScriptMenu_DisplayPCStartupPrompt(void) { - sub_819786C(0, TRUE); - AddTextPrinterParameterized2(0, 1, gText_WhichPCShouldBeAccessed, 0, NULL, 2, 1, 3); + LoadMessageBoxAndFrameGfx(0, TRUE); + AddTextPrinterParameterized2(0, FONT_NORMAL, gText_WhichPCShouldBeAccessed, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } bool8 ScriptMenu_CreateLilycoveSSTidalMultichoice(void) @@ -414,7 +414,7 @@ static void CreateLilycoveSSTidalMultichoice(void) sLilycoveSSTidalSelections[i] = 0xFF; } - GetFontAttribute(1, FONTATTR_MAX_LETTER_WIDTH); + GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_WIDTH); if (gSpecialVar_0x8004 == 0) { @@ -521,19 +521,19 @@ static void CreateLilycoveSSTidalMultichoice(void) width = ConvertPixelWidthToTileWidth(pixelWidth); windowId = CreateWindowFromRect(MAX_MULTICHOICE_WIDTH - width, (6 - count) * 2, width, count * 2); - SetStandardWindowBorderStyle(windowId, 0); + SetStandardWindowBorderStyle(windowId, FALSE); for (selectionCount = 0, i = 0; i < SSTIDAL_SELECTION_COUNT; i++) { if (sLilycoveSSTidalSelections[i] != 0xFF) { - AddTextPrinterParameterized(windowId, 1, sLilycoveSSTidalDestinations[sLilycoveSSTidalSelections[i]], 8, selectionCount * 16 + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, sLilycoveSSTidalDestinations[sLilycoveSSTidalSelections[i]], 8, selectionCount * 16 + 1, TEXT_SKIP_DRAW, NULL); selectionCount++; } } - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, count - 1); - CopyWindowToVram(windowId, 3); + InitMenuInUpperLeftCornerNormal(windowId, count, count - 1); + CopyWindowToVram(windowId, COPYWIN_FULL); InitMultichoiceCheckWrap(FALSE, count, windowId, MULTI_SSTIDAL_LILYCOVE); } } @@ -563,6 +563,7 @@ static void Task_PokemonPicWindow(u8 taskId) task->tState++; break; case 1: + // Wait until state is advanced by ScriptMenu_HidePokemonPic break; case 2: FreeResourcesAndDestroySprite(&gSprites[task->tMonSpriteId], task->tMonSpriteId); @@ -594,13 +595,13 @@ bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y) gTasks[taskId].tMonSpriteId = spriteId; gSprites[spriteId].callback = SpriteCallbackDummy; gSprites[spriteId].oam.priority = 0; - SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, 1); + SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, TRUE); ScheduleBgCopyTilemapToVram(0); return TRUE; } } -bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void) +bool8 (*ScriptMenu_HidePokemonPic(void))(void) { u8 taskId = FindTaskIdByFunc(Task_PokemonPicWindow); @@ -645,27 +646,27 @@ static void DrawLinkServicesMultichoiceMenu(u8 multichoiceId) { case MULTI_WIRELESS_NO_BERRY: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sWirelessOptionsNoBerryCrush[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptionsNoBerryCrush[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); break; case MULTI_CABLE_CLUB_WITH_RECORD_MIX: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sCableClubOptions_WithRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sCableClubOptions_WithRecordMix[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); break; case MULTI_WIRELESS_NO_RECORD: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sWirelessOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); break; case MULTI_WIRELESS_ALL_SERVICES: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sWirelessOptions_AllServices[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptions_AllServices[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); break; case MULTI_WIRELESS_NO_RECORD_BERRY: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sWirelessOptions_NoRecordMixBerryCrush[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptions_NoRecordMixBerryCrush[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); break; case MULTI_CABLE_CLUB_NO_RECORD_MIX: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, sCableClubOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, FONT_NORMAL, sCableClubOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); break; } } @@ -687,18 +688,18 @@ bool16 ScriptMenu_CreateStartMenuForPokenavTutorial(void) static void CreateStartMenuForPokenavTutorial(void) { u8 windowId = CreateWindowFromRect(21, 0, 7, 18); - SetStandardWindowBorderStyle(windowId, 0); - AddTextPrinterParameterized(windowId, 1, gText_MenuOptionPokedex, 8, 9, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(windowId, 1, gText_MenuOptionPokemon, 8, 25, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(windowId, 1, gText_MenuOptionBag, 8, 41, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(windowId, 1, gText_MenuOptionPokenav, 8, 57, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(windowId, 1, gSaveBlock2Ptr->playerName, 8, 73, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(windowId, 1, gText_MenuOptionSave, 8, 89, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(windowId, 1, gText_MenuOptionOption, 8, 105, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(windowId, 1, gText_MenuOptionExit, 8, 121, TEXT_SPEED_FF, NULL); - sub_81983AC(windowId, 1, 0, 9, 16, ARRAY_COUNT(MultichoiceList_ForcedStartMenu), 0); + SetStandardWindowBorderStyle(windowId, FALSE); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_MenuOptionPokedex, 8, 9, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_MenuOptionPokemon, 8, 25, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_MenuOptionBag, 8, 41, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_MenuOptionPokenav, 8, 57, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gSaveBlock2Ptr->playerName, 8, 73, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_MenuOptionSave, 8, 89, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_MenuOptionOption, 8, 105, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_MenuOptionExit, 8, 121, TEXT_SKIP_DRAW, NULL); + InitMenuNormal(windowId, FONT_NORMAL, 0, 9, 16, ARRAY_COUNT(MultichoiceList_ForcedStartMenu), 0); InitMultichoiceNoWrap(FALSE, ARRAY_COUNT(MultichoiceList_ForcedStartMenu), windowId, MULTI_FORCED_START_MENU); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } #define tWindowId data[6] @@ -727,7 +728,7 @@ static int DisplayTextAndGetWidthInternal(const u8 *str) { u8 temp[64]; StringExpandPlaceholders(temp, str); - return GetStringWidth(1, temp, 0); + return GetStringWidth(FONT_NORMAL, temp, 0); } int DisplayTextAndGetWidth(const u8 *str, int prevWidth) diff --git a/src/script_movement.c b/src/script_movement.c index 013270697f..10517dfc8e 100644 --- a/src/script_movement.c +++ b/src/script_movement.c @@ -6,7 +6,6 @@ #include "constants/event_objects.h" #include "constants/event_object_movement.h" -// static functions static void ScriptMovement_StartMoveObjects(u8 priority); static u8 GetMoveObjectsTaskId(void); static bool8 ScriptMovement_TryAddNewMovement(u8 taskId, u8 objEventId, const u8 *movementScript); @@ -17,10 +16,8 @@ static void ScriptMovement_UnfreezeActiveObjects(u8 taskId); static void ScriptMovement_MoveObjects(u8 taskId); static void ScriptMovement_TakeStep(u8 taskId, u8 moveScrId, u8 objEventId, const u8 *movementScript); -// EWRAM_DATA -static EWRAM_DATA const u8 *gMovementScripts[OBJECT_EVENTS_COUNT] = {0}; +static EWRAM_DATA const u8 *sMovementScripts[OBJECT_EVENTS_COUNT] = {0}; -// text bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript) { u8 objEventId; @@ -66,7 +63,7 @@ static void ScriptMovement_StartMoveObjects(u8 priority) taskId = CreateTask(ScriptMovement_MoveObjects, priority); - for (i = 1; i < NUM_TASK_DATA; i++) + for (i = 1; i < NUM_TASK_DATA; i++) gTasks[taskId].data[i] = 0xFFFF; } @@ -167,12 +164,12 @@ static bool8 IsMovementScriptFinished(u8 taskId, u8 moveScrId) static void SetMovementScript(u8 moveScrId, const u8 *movementScript) { - gMovementScripts[moveScrId] = movementScript; + sMovementScripts[moveScrId] = movementScript; } static const u8 *GetMovementScript(u8 moveScrId) { - return gMovementScripts[moveScrId]; + return sMovementScripts[moveScrId]; } static void ScriptMovement_AddNewMovement(u8 taskId, u8 moveScrId, u8 objEventId, const u8 *movementScript) diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index 93a7477720..8a9e65ff8f 100755 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -64,18 +64,31 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u int sentToPc; u8 heldItem[2]; struct Pokemon mon; + u16 targetSpecies; - CreateMon(&mon, species, level, USE_RANDOM_IVS, 0, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&mon, species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); heldItem[0] = item; heldItem[1] = item >> 8; SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem); + + // In case a mon with a form changing item is given. Eg: SPECIES_ARCEUS with ITEM_SPLASH_PLATE will transform into SPECIES_ARCEUS_WATER upon gifted. + targetSpecies = GetFormChangeTargetSpecies(&mon, FORM_ITEM_HOLD_ABILITY, 0); + if (targetSpecies == SPECIES_NONE) + targetSpecies = GetFormChangeTargetSpecies(&mon, FORM_ITEM_HOLD, 0); + if (targetSpecies != SPECIES_NONE) + { + SetMonData(&mon, MON_DATA_SPECIES, &targetSpecies); + CalculateMonStats(&mon); + } + sentToPc = GiveMonToPlayer(&mon); nationalDexNum = SpeciesToNationalPokedexNum(species); + // Don't set Pokédex flag for MON_CANT_GIVE switch(sentToPc) { - case 0: - case 1: + case MON_GIVEN_TO_PARTY: + case MON_GIVEN_TO_PC: GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN); GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT); break; @@ -126,9 +139,9 @@ static bool8 CheckPartyMonHasHeldItem(u16 item) bool8 DoesPartyHaveEnigmaBerry(void) { - bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); + bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY_E_READER); if (hasItem == TRUE) - GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); + GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY_E_READER), gStringVar1); return hasItem; } @@ -146,10 +159,38 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item) SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem); } } +void CreateScriptedDoubleWildMon(u16 species1, u8 level1, u16 item1, u16 species2, u8 level2, u16 item2) +{ + u8 heldItem1[2]; + u8 heldItem2[2]; + + ZeroEnemyPartyMons(); + + CreateMon(&gEnemyParty[0], species1, level1, 32, 0, 0, OT_ID_PLAYER_ID, 0); + if (item1) + { + heldItem1[0] = item1; + heldItem1[1] = item1 >> 8; + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem1); + } + + CreateMon(&gEnemyParty[3], species2, level2, 32, 0, 0, OT_ID_PLAYER_ID, 0); + if (item2) + { + heldItem2[0] = item2; + heldItem2[1] = item2 >> 8; + SetMonData(&gEnemyParty[3], MON_DATA_HELD_ITEM, heldItem2); + } +} void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) { +// Allows monIndex to go out of bounds of gPlayerParty. Doesn't occur in vanilla +#ifdef BUGFIX + if (monIndex >= PARTY_SIZE) +#else if (monIndex > PARTY_SIZE) +#endif monIndex = gPlayerPartyCount - 1; SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); diff --git a/src/secret_base.c b/src/secret_base.c index ce455642b1..74129d3ff5 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -39,7 +39,6 @@ #include "constants/event_objects.h" #include "constants/field_specials.h" #include "constants/items.h" -#include "constants/maps.h" #include "constants/map_types.h" #include "constants/metatile_behaviors.h" #include "constants/metatile_labels.h" @@ -214,7 +213,7 @@ static const struct ListMenuTemplate sRegistryListMenuTemplate = .lettersSpacing = 0, .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 1, + .fontId = FONT_NORMAL, .cursorKind = 0, }; @@ -306,7 +305,7 @@ static void FindMetatileIdMapCoords(s16 *x, s16 *y, u16 metatileId) { for (i = 0; i < mapLayout->width; i++) { - if ((mapLayout->map[j * mapLayout->width + i] & METATILE_ID_MASK) == metatileId) + if ((mapLayout->map[j * mapLayout->width + i] & MAPGRID_METATILE_ID_MASK) == metatileId) { *x = i; *y = j; @@ -325,13 +324,13 @@ void ToggleSecretBaseEntranceMetatile(void) GetXYCoordsOneStepInFrontOfPlayer(&x, &y); metatileId = MapGridGetMetatileIdAt(x, y); - + // Look for entrance metatiles to open for (i = 0; i < ARRAY_COUNT(sSecretBaseEntranceMetatiles); i++) { if (sSecretBaseEntranceMetatiles[i].closedMetatileId == metatileId) { - MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].openMetatileId | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].openMetatileId | MAPGRID_COLLISION_MASK); CurrentMapDrawMetatileAt(x, y); return; } @@ -342,7 +341,7 @@ void ToggleSecretBaseEntranceMetatile(void) { if (sSecretBaseEntranceMetatiles[i].openMetatileId == metatileId) { - MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].closedMetatileId | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].closedMetatileId | MAPGRID_COLLISION_MASK); CurrentMapDrawMetatileAt(x, y); return; } @@ -390,14 +389,14 @@ void SetOccupiedSecretBaseEntranceMetatiles(struct MapEvents const *events) { if (gSaveBlock1Ptr->secretBases[j].secretBaseId == events->bgEvents[bgId].bgUnion.secretBaseId) { - s16 x = events->bgEvents[bgId].x + 7; - s16 y = events->bgEvents[bgId].y + 7; + s16 x = events->bgEvents[bgId].x + MAP_OFFSET; + s16 y = events->bgEvents[bgId].y + MAP_OFFSET; s16 tile_id = MapGridGetMetatileIdAt(x, y); for (i = 0; i < ARRAY_COUNT(sSecretBaseEntranceMetatiles); i++) { if (sSecretBaseEntranceMetatiles[i].closedMetatileId == tile_id) { - MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].openMetatileId | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].openMetatileId | MAPGRID_COLLISION_MASK); break; } } @@ -446,7 +445,7 @@ void EnterSecretBase(void) { CreateTask(Task_EnterSecretBase, 0); FadeScreen(FADE_TO_BLACK, 0); - SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE); } bool8 SecretBaseMapPopupEnabled(void) @@ -462,7 +461,7 @@ static void EnterNewlyCreatedSecretBase_WaitFadeIn(u8 taskId) ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_NORTH); if (IsWeatherNotFadingIn() == TRUE) { - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } } @@ -471,12 +470,12 @@ static void EnterNewlyCreatedSecretBase_StartFadeIn(void) { s16 x, y; - ScriptContext2_Enable(); + LockPlayerFieldControls(); HideMapNamePopUpWindow(); FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC); - x += 7; - y += 7; - MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | METATILE_COLLISION_MASK); + x += MAP_OFFSET; + y += MAP_OFFSET; + MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | MAPGRID_COLLISION_MASK); CurrentMapDrawMetatileAt(x, y); FadeInFromBlack(); CreateTask(EnterNewlyCreatedSecretBase_WaitFadeIn, 0); @@ -490,7 +489,7 @@ static void Task_EnterNewlyCreatedSecretBase(u8 taskId) SetWarpDestination( gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, - -1, + WARP_ID_NONE, GET_BASE_COMPUTER_X(secretBaseGroup), GET_BASE_COMPUTER_Y(secretBaseGroup)); WarpIntoMap(); @@ -530,20 +529,20 @@ void InitSecretBaseAppearance(bool8 hidePC) for (x = 0; x < DECOR_MAX_SECRET_BASE; x++) { if (decorations[x] > 0 && decorations[x] <= NUM_DECORATIONS && gDecorations[decorations[x]].permission != DECORPERM_SPRITE) - ShowDecorationOnMap((decorPos[x] >> 4) + 7, (decorPos[x] & 0xF) + 7, decorations[x]); + ShowDecorationOnMap((decorPos[x] >> 4) + MAP_OFFSET, (decorPos[x] & 0xF) + MAP_OFFSET, decorations[x]); } if (secretBaseIdx != 0) { // Another player's secret base. Change PC type to the "Register" PC. FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC); - MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_SecretBase_RegisterPC | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x + MAP_OFFSET, y + MAP_OFFSET, METATILE_SecretBase_RegisterPC | MAPGRID_COLLISION_MASK); } else if (hidePC == TRUE && VarGet(VAR_SECRET_BASE_INITIALIZED) == 1) { // Change PC to regular ground tile. FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC); - MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_SecretBase_Ground | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x + MAP_OFFSET, y + MAP_OFFSET, METATILE_SecretBase_Ground | MAPGRID_COLLISION_MASK); } } } @@ -594,7 +593,7 @@ void InitSecretBaseDecorationSprites(void) gSpecialVar_0x8006 = decorationPositions[i] >> 4; gSpecialVar_0x8007 = decorationPositions[i] & 0xF; - metatileBehavior = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); + metatileBehavior = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + MAP_OFFSET, gSpecialVar_0x8007 + MAP_OFFSET); if (MetatileBehavior_HoldsSmallDecoration(metatileBehavior) == TRUE || MetatileBehavior_HoldsLargeDecoration(metatileBehavior) == TRUE) { @@ -660,7 +659,9 @@ void SetCurSecretBaseIdFromPosition(const struct MapPosition *position, const st s16 i; for (i = 0; i < events->bgEventCount; i++) { - if (events->bgEvents[i].kind == BG_EVENT_SECRET_BASE && position->x == events->bgEvents[i].x + 7 && position->y == events->bgEvents[i].y + 7) + if (events->bgEvents[i].kind == BG_EVENT_SECRET_BASE + && position->x == events->bgEvents[i].x + MAP_OFFSET + && position->y == events->bgEvents[i].y + MAP_OFFSET) { sCurSecretBaseId = events->bgEvents[i].bgUnion.secretBaseId; break; @@ -672,7 +673,7 @@ void WarpIntoSecretBase(const struct MapPosition *position, const struct MapEven { SetCurSecretBaseIdFromPosition(position, events); TrySetCurSecretBaseIndex(); - ScriptContext1_SetupScript(SecretBase_EventScript_Enter); + ScriptContext_SetupScript(SecretBase_EventScript_Enter); } bool8 TrySetCurSecretBase(void) @@ -690,7 +691,7 @@ static void Task_WarpOutOfSecretBase(u8 taskId) switch (gTasks[taskId].data[0]) { case 0: - ScriptContext2_Enable(); + LockPlayerFieldControls(); gTasks[taskId].data[0] = 1; break; case 1: @@ -698,11 +699,11 @@ static void Task_WarpOutOfSecretBase(u8 taskId) gTasks[taskId].data[0] = 2; break; case 2: - SetWarpDestinationToDynamicWarp(0x7e); + SetWarpDestinationToDynamicWarp(WARP_ID_SECRET_BASE); WarpIntoMap(); gFieldCallback = FieldCB_DefaultWarpExit; SetMainCallback2(CB2_LoadMap); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); break; } @@ -830,12 +831,14 @@ static void ClosePlayerSecretBaseEntrance(void) if (events->bgEvents[i].kind == BG_EVENT_SECRET_BASE && gSaveBlock1Ptr->secretBases[0].secretBaseId == events->bgEvents[i].bgUnion.secretBaseId) { - metatileId = MapGridGetMetatileIdAt(events->bgEvents[i].x + 7, events->bgEvents[i].y + 7); + metatileId = MapGridGetMetatileIdAt(events->bgEvents[i].x + MAP_OFFSET, events->bgEvents[i].y + MAP_OFFSET); for (j = 0; j < ARRAY_COUNT(sSecretBaseEntranceMetatiles); j++) { if (sSecretBaseEntranceMetatiles[j].openMetatileId == metatileId) { - MapGridSetMetatileIdAt(events->bgEvents[i].x + 7, events->bgEvents[i].y + 7, sSecretBaseEntranceMetatiles[j].closedMetatileId | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(events->bgEvents[i].x + MAP_OFFSET, + events->bgEvents[i].y + MAP_OFFSET, + sSecretBaseEntranceMetatiles[j].closedMetatileId | MAPGRID_COLLISION_MASK); break; } } @@ -911,13 +914,13 @@ void ShowSecretBaseRegistryMenu(void) static void Task_ShowSecretBaseRegistryMenu(u8 taskId) { s16 *data = gTasks[taskId].data; - ScriptContext2_Enable(); + LockPlayerFieldControls(); tNumBases = GetNumRegisteredSecretBases(); if (tNumBases != 0) { tSelectedRow = 0; tScrollOffset = 0; - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); sRegistryMenu = calloc(1, sizeof(*sRegistryMenu)); tMainWindowId = AddWindow(&sRegistryWindowTemplates[0]); BuildRegistryMenuItems(taskId); @@ -973,7 +976,7 @@ static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *m static void FinalizeRegistryMenu(u8 taskId) { s16 *data = gTasks[taskId].data; - SetStandardWindowBorderStyle(tMainWindowId, 0); + SetStandardWindowBorderStyle(tMainWindowId, FALSE); tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, tScrollOffset, tSelectedRow); AddRegistryMenuScrollArrows(taskId); ScheduleBgCopyTilemapToVram(0); @@ -999,7 +1002,7 @@ static void HandleRegistryMenuInput(u8 taskId) PlaySE(SE_SELECT); DestroyListMenuTask(tListTaskId, NULL, NULL); RemoveScrollIndicatorArrowPair(tArrowTaskId); - ClearStdWindowAndFrame(tMainWindowId, 0); + ClearStdWindowAndFrame(tMainWindowId, FALSE); ClearWindowTilemap(tMainWindowId); RemoveWindow(tMainWindowId); ScheduleBgCopyTilemapToVram(0); @@ -1022,9 +1025,9 @@ static void ShowRegistryMenuActions(u8 taskId) template = sRegistryWindowTemplates[1]; template.width = GetMaxWidthInMenuTable(sRegistryMenuActions, 2); tActionWindowId = AddWindow(&template); - SetStandardWindowBorderStyle(tActionWindowId, 0); + SetStandardWindowBorderStyle(tActionWindowId, FALSE); PrintMenuTable(tActionWindowId, ARRAY_COUNT(sRegistryMenuActions), sRegistryMenuActions); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(tActionWindowId, 2, 0); + InitMenuInUpperLeftCornerNormal(tActionWindowId, ARRAY_COUNT(sRegistryMenuActions), 0); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].func = HandleRegistryMenuActionsInput; } @@ -1070,7 +1073,7 @@ static void ShowRegistryMenuDeleteYesNo(u8 taskId) void DeleteRegistry_Yes_Callback(u8 taskId) { s16 *data = gTasks[taskId].data; - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow); gSaveBlock1Ptr->secretBases[tSelectedBaseId].registryStatus = UNREGISTERED; BuildRegistryMenuItems(taskId); @@ -1087,7 +1090,7 @@ static void DeleteRegistry_Yes(u8 taskId) static void DeleteRegistry_No(u8 taskId) { s16 *data = gTasks[taskId].data; - ClearDialogWindowAndFrame(0, 0); + ClearDialogWindowAndFrame(0, FALSE); DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; @@ -1097,7 +1100,7 @@ static void ReturnToMainRegistryMenu(u8 taskId) { s16 *data = gTasks[taskId].data; AddRegistryMenuScrollArrows(taskId); - ClearStdWindowAndFrame(tActionWindowId, 0); + ClearStdWindowAndFrame(tActionWindowId, FALSE); ClearWindowTilemap(tActionWindowId); RemoveWindow(tActionWindowId); ScheduleBgCopyTilemapToVram(0); @@ -1107,9 +1110,9 @@ static void ReturnToMainRegistryMenu(u8 taskId) static void GoToSecretBasePCRegisterMenu(u8 taskId) { if (VarGet(VAR_CURRENT_SECRET_BASE) == 0) - ScriptContext1_SetupScript(SecretBase_EventScript_PCCancel); + ScriptContext_SetupScript(SecretBase_EventScript_PCCancel); else - ScriptContext1_SetupScript(SecretBase_EventScript_ShowRegisterMenu); + ScriptContext_SetupScript(SecretBase_EventScript_ShowRegisterMenu); DestroyTask(taskId); } @@ -1211,109 +1214,108 @@ void SecretBasePerStepCallback(u8 taskId) tState = 1; break; case 1: + // End if player hasn't moved PlayerGetDestCoords(&x, &y); - if (x != tPlayerX || y != tPlayerY) - { - tPlayerX = x; - tPlayerY = y; - VarSet(VAR_SECRET_BASE_STEP_COUNTER, VarGet(VAR_SECRET_BASE_STEP_COUNTER) + 1); - behavior = MapGridGetMetatileBehaviorAt(x, y); - tileId = MapGridGetMetatileIdAt(x, y); - if (tileId == METATILE_SecretBase_SolidBoard_Top || tileId == METATILE_SecretBase_SolidBoard_Bottom) - { - if (sInFriendSecretBase == TRUE) - { - VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SOLID_BOARD); - } - } - else if (tileId == METATILE_SecretBase_SmallChair - || tileId == METATILE_SecretBase_PokemonChair - || tileId == METATILE_SecretBase_HeavyChair - || tileId == METATILE_SecretBase_PrettyChair - || tileId == METATILE_SecretBase_ComfortChair - || tileId == METATILE_SecretBase_RaggedChair - || tileId == METATILE_SecretBase_BrickChair - || tileId == METATILE_SecretBase_CampChair - || tileId == METATILE_SecretBase_HardChair) - { - if (sInFriendSecretBase == TRUE) - VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_CHAIR); - } - else if (tileId == METATILE_SecretBase_RedTent_DoorTop - || tileId == METATILE_SecretBase_RedTent_Door - || tileId == METATILE_SecretBase_BlueTent_DoorTop - || tileId == METATILE_SecretBase_BlueTent_Door) - { - if (sInFriendSecretBase == TRUE) - VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TENT); - } - else if ((behavior == MB_IMPASSABLE_NORTHEAST && tileId == METATILE_SecretBase_Stand_CornerRight) - || (behavior == MB_IMPASSABLE_NORTHWEST && MapGridGetMetatileIdAt(x, y) == METATILE_SecretBase_Stand_CornerLeft)) - { - if (sInFriendSecretBase == TRUE) - VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_STAND); - } - else if (behavior == MB_IMPASSABLE_WEST_AND_EAST && tileId == METATILE_SecretBase_Slide_StairLanding) - { - if (sInFriendSecretBase == TRUE) - { - VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_USED_SLIDE); - VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_DECLINED_SLIDE); - } - } - else if (behavior == MB_SLIDE_SOUTH && tileId == METATILE_SecretBase_Slide_SlideTop) - { - if (sInFriendSecretBase == TRUE) - { - VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SLIDE); - VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_DECLINED_SLIDE); - } - } - else if (MetatileBehavior_IsSecretBaseGlitterMat(behavior) == TRUE) - { - if (sInFriendSecretBase == TRUE) - VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_GLITTER_MAT); - } - else if (MetatileBehavior_IsSecretBaseBalloon(behavior) == TRUE) - { - PopSecretBaseBalloon(MapGridGetMetatileIdAt(x, y), x, y); - if (sInFriendSecretBase == TRUE) - { - switch ((int)MapGridGetMetatileIdAt(x, y)) - { - case METATILE_SecretBase_RedBalloon: - case METATILE_SecretBase_BlueBalloon: - case METATILE_SecretBase_YellowBalloon: - VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_BALLOON); - break; - case METATILE_SecretBase_MudBall: - VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_MUD_BALL); - break; - } - } - } - else if (MetatileBehavior_IsSecretBaseBreakableDoor(behavior) == TRUE) - { - if (sInFriendSecretBase == TRUE) - VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_BREAKABLE_DOOR); + if (x == tPlayerX && y == tPlayerY) + return; - ShatterSecretBaseBreakableDoor(x, y); - } - else if (MetatileBehavior_IsSecretBaseSoundMat(behavior) == TRUE){ - if (sInFriendSecretBase == TRUE) - VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_NOTE_MAT); - } - else if (MetatileBehavior_IsSecretBaseJumpMat(behavior) == TRUE) + tPlayerX = x; + tPlayerY = y; + VarSet(VAR_SECRET_BASE_STEP_COUNTER, VarGet(VAR_SECRET_BASE_STEP_COUNTER) + 1); + behavior = MapGridGetMetatileBehaviorAt(x, y); + tileId = MapGridGetMetatileIdAt(x, y); + if (tileId == METATILE_SecretBase_SolidBoard_Top || tileId == METATILE_SecretBase_SolidBoard_Bottom) + { + if (sInFriendSecretBase == TRUE) + VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SOLID_BOARD); + } + else if (tileId == METATILE_SecretBase_SmallChair + || tileId == METATILE_SecretBase_PokemonChair + || tileId == METATILE_SecretBase_HeavyChair + || tileId == METATILE_SecretBase_PrettyChair + || tileId == METATILE_SecretBase_ComfortChair + || tileId == METATILE_SecretBase_RaggedChair + || tileId == METATILE_SecretBase_BrickChair + || tileId == METATILE_SecretBase_CampChair + || tileId == METATILE_SecretBase_HardChair) + { + if (sInFriendSecretBase == TRUE) + VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_CHAIR); + } + else if (tileId == METATILE_SecretBase_RedTent_DoorTop + || tileId == METATILE_SecretBase_RedTent_Door + || tileId == METATILE_SecretBase_BlueTent_DoorTop + || tileId == METATILE_SecretBase_BlueTent_Door) + { + if (sInFriendSecretBase == TRUE) + VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TENT); + } + else if ((behavior == MB_IMPASSABLE_NORTHEAST && tileId == METATILE_SecretBase_Stand_CornerRight) + || (behavior == MB_IMPASSABLE_NORTHWEST && MapGridGetMetatileIdAt(x, y) == METATILE_SecretBase_Stand_CornerLeft)) + { + if (sInFriendSecretBase == TRUE) + VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_STAND); + } + else if (behavior == MB_IMPASSABLE_WEST_AND_EAST && tileId == METATILE_SecretBase_Slide_StairLanding) + { + if (sInFriendSecretBase == TRUE) { - if (sInFriendSecretBase == TRUE) - VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_JUMP_MAT); + VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_USED_SLIDE); + VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_DECLINED_SLIDE); } - else if (MetatileBehavior_IsSecretBaseSpinMat(behavior) == TRUE) + } + else if (behavior == MB_SLIDE_SOUTH && tileId == METATILE_SecretBase_Slide_SlideTop) + { + if (sInFriendSecretBase == TRUE) { - if (sInFriendSecretBase == TRUE) - VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SPIN_MAT); + VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SLIDE); + VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_DECLINED_SLIDE); } } + else if (MetatileBehavior_IsSecretBaseGlitterMat(behavior) == TRUE) + { + if (sInFriendSecretBase == TRUE) + VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_GLITTER_MAT); + } + else if (MetatileBehavior_IsSecretBaseBalloon(behavior) == TRUE) + { + PopSecretBaseBalloon(MapGridGetMetatileIdAt(x, y), x, y); + if (sInFriendSecretBase == TRUE) + { + switch ((int)MapGridGetMetatileIdAt(x, y)) + { + case METATILE_SecretBase_RedBalloon: + case METATILE_SecretBase_BlueBalloon: + case METATILE_SecretBase_YellowBalloon: + VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_BALLOON); + break; + case METATILE_SecretBase_MudBall: + VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_MUD_BALL); + break; + } + } + } + else if (MetatileBehavior_IsSecretBaseBreakableDoor(behavior) == TRUE) + { + if (sInFriendSecretBase == TRUE) + VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_BREAKABLE_DOOR); + + ShatterSecretBaseBreakableDoor(x, y); + } + else if (MetatileBehavior_IsSecretBaseSoundMat(behavior) == TRUE){ + if (sInFriendSecretBase == TRUE) + VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_NOTE_MAT); + } + else if (MetatileBehavior_IsSecretBaseJumpMat(behavior) == TRUE) + { + if (sInFriendSecretBase == TRUE) + VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_JUMP_MAT); + } + else if (MetatileBehavior_IsSecretBaseSpinMat(behavior) == TRUE) + { + if (sInFriendSecretBase == TRUE) + VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SPIN_MAT); + } break; case 2: // This state is never reached, and tFldEff is never set @@ -1490,7 +1492,7 @@ static void SortSecretBasesByRegistryStatus(void) { for (j = i + 1; j < SECRET_BASES_COUNT; j++) { - if ((secretBases[i].registryStatus == UNREGISTERED && secretBases[j].registryStatus == REGISTERED) + if ((secretBases[i].registryStatus == UNREGISTERED && secretBases[j].registryStatus == REGISTERED) || (secretBases[i].registryStatus == NEW && secretBases[j].registryStatus != NEW)) { struct SecretBase temp; diff --git a/src/shop.c b/src/shop.c index f4e3fa2d86..451fa171cb 100755 --- a/src/shop.c +++ b/src/shop.c @@ -63,7 +63,7 @@ static void BuyMenuBuildListMenuTemplate(void); static void BuyMenuInitBgs(void); static void BuyMenuInitWindows(void); static void BuyMenuDecompressBgGraphics(void); -static void BuyMenuSetListEntry(struct ListMenuItem*, u16, u8*); +static void BuyMenuSetListEntry(struct ListMenuItem *, u16, u8 *); static void BuyMenuAddItemIcon(u16, u8); static void BuyMenuRemoveItemIcon(u16, u8); static void BuyMenuPrint(u8 windowId, const u8 *text, u8 x, u8 y, s8 speed, u8 colorSet); @@ -73,7 +73,7 @@ static void BuyMenuCollectObjectEventData(void); static void BuyMenuDrawObjectEvents(void); static void BuyMenuDrawMapBg(void); static bool8 BuyMenuCheckForOverlapWithMenuBg(int, int); -static void BuyMenuDrawMapMetatile(s16, s16, const u16*, u8); +static void BuyMenuDrawMapMetatile(s16, s16, const u16 *, u8); static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src); static bool8 BuyMenuCheckIfObjectEventOverlapsMenuBg(s16 *); static void ExitBuyMenu(u8 taskId); @@ -152,7 +152,7 @@ static const struct ListMenuTemplate sShopBuyMenuListTemplate = .lettersSpacing = 0, .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 7, + .fontId = FONT_NARROW, .cursorKind = 0 }; @@ -277,7 +277,7 @@ static u8 CreateShopMenu(u8 martType) { int numMenuItems; - ScriptContext2_Enable(); + LockPlayerFieldControls(); sMartInfo.martType = martType; if (martType == MART_TYPE_NORMAL) @@ -299,11 +299,11 @@ static u8 CreateShopMenu(u8 martType) numMenuItems = ARRAY_COUNT(sShopMenuActions_BuyQuit); } - SetStandardWindowBorderStyle(sMartInfo.windowId, 0); + SetStandardWindowBorderStyle(sMartInfo.windowId, FALSE); PrintMenuTable(sMartInfo.windowId, numMenuItems, sMartInfo.menuActions); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sMartInfo.windowId, numMenuItems, 0); + InitMenuInUpperLeftCornerNormal(sMartInfo.windowId, numMenuItems, 0); PutWindowTilemap(sMartInfo.windowId); - CopyWindowToVram(sMartInfo.windowId, 1); + CopyWindowToVram(sMartInfo.windowId, COPYWIN_MAP); return CreateTask(Task_ShopMenu, 8); } @@ -370,10 +370,10 @@ void CB2_ExitSellMenu(void) static void Task_HandleShopMenuQuit(u8 taskId) { - ClearStdWindowAndFrameToTransparent(sMartInfo.windowId, 2); + ClearStdWindowAndFrameToTransparent(sMartInfo.windowId, 2); // Incorrect use, making it not copy it to vram. RemoveWindow(sMartInfo.windowId); TryPutSmartShopperOnAir(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); if (sMartInfo.callback) @@ -562,7 +562,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y) { ConvertIntToDecimalStringN( gStringVar1, - ItemId_GetPrice(itemId) >> GetPriceReduction(POKENEWS_SLATEPORT), + ItemId_GetPrice(itemId) >> IsPokeNewsActive(POKENEWS_SLATEPORT), STR_CONV_MODE_LEFT_ALIGN, 5); } @@ -576,8 +576,8 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y) } StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); - x = GetStringRightAlignXOffset(7, gStringVar4, 0x78); - AddTextPrinterParameterized4(windowId, 7, x, y, 0, 0, sShopBuyMenuTextColors[1], -1, gStringVar4); + x = GetStringRightAlignXOffset(FONT_NARROW, gStringVar4, 0x78); + AddTextPrinterParameterized4(windowId, FONT_NARROW, x, y, 0, 0, sShopBuyMenuTextColors[1], TEXT_SKIP_DRAW, gStringVar4); } } @@ -674,9 +674,9 @@ static void BuyMenuInitBgs(void) static void BuyMenuDecompressBgGraphics(void) { - DecompressAndCopyTileDataToVram(1, gBuyMenuFrame_Gfx, 0x3A0, 0x3E3, 0); - LZDecompressWram(gBuyMenuFrame_Tilemap, sShopData->tilemapBuffers[0]); - LoadCompressedPalette(gMenuMoneyPal, 0xC0, 0x20); + DecompressAndCopyTileDataToVram(1, gShopMenu_Gfx, 0x3A0, 0x3E3, 0); + LZDecompressWram(gShopMenu_Tilemap, sShopData->tilemapBuffers[0]); + LoadCompressedPalette(gShopMenu_Pal, 0xC0, 0x20); } static void BuyMenuInitWindows(void) @@ -692,12 +692,12 @@ static void BuyMenuInitWindows(void) static void BuyMenuPrint(u8 windowId, const u8 *text, u8 x, u8 y, s8 speed, u8 colorSet) { - AddTextPrinterParameterized4(windowId, 1, x, y, 0, 0, sShopBuyMenuTextColors[colorSet], speed, text); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 0, 0, sShopBuyMenuTextColors[colorSet], speed, text); } static void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback) { - DisplayMessageAndContinueTask(taskId, 5, 10, 14, 1, GetPlayerTextSpeedDelay(), text, callback); + DisplayMessageAndContinueTask(taskId, 5, 10, 14, FONT_NORMAL, GetPlayerTextSpeedDelay(), text, callback); ScheduleBgCopyTilemapToVram(0); } @@ -743,15 +743,15 @@ static void BuyMenuDrawMapBg(void) if (BuyMenuCheckForOverlapWithMenuBg(i, j) == TRUE) metatileLayerType = MapGridGetMetatileLayerTypeAt(x + i, y + j); else - metatileLayerType = 1; + metatileLayerType = METATILE_LAYER_TYPE_COVERED; if (metatile < NUM_METATILES_IN_PRIMARY) { - BuyMenuDrawMapMetatile(i, j, (u16*)mapLayout->primaryTileset->metatiles + metatile * 8, metatileLayerType); + BuyMenuDrawMapMetatile(i, j, (u16 *)mapLayout->primaryTileset->metatiles + metatile * 8, metatileLayerType); } else { - BuyMenuDrawMapMetatile(i, j, (u16*)mapLayout->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType); + BuyMenuDrawMapMetatile(i, j, (u16 *)mapLayout->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType); } } } @@ -764,15 +764,15 @@ static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLaye switch (metatileLayerType) { - case 0: + case METATILE_LAYER_TYPE_NORMAL: BuyMenuDrawMapMetatileLayer(sShopData->tilemapBuffers[3], offset1, offset2, src); BuyMenuDrawMapMetatileLayer(sShopData->tilemapBuffers[1], offset1, offset2, src + 4); break; - case 1: + case METATILE_LAYER_TYPE_COVERED: BuyMenuDrawMapMetatileLayer(sShopData->tilemapBuffers[2], offset1, offset2, src); BuyMenuDrawMapMetatileLayer(sShopData->tilemapBuffers[3], offset1, offset2, src + 4); break; - case 2: + case METATILE_LAYER_TYPE_SPLIT: BuyMenuDrawMapMetatileLayer(sShopData->tilemapBuffers[2], offset1, offset2, src); BuyMenuDrawMapMetatileLayer(sShopData->tilemapBuffers[1], offset1, offset2, src + 4); break; @@ -847,7 +847,7 @@ static void BuyMenuDrawObjectEvents(void) graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[sShopData->viewportObjects[i][OBJ_EVENT_ID]].graphicsId); - spriteId = AddPseudoObjectEvent( + spriteId = CreateObjectGraphicsSprite( gObjectEvents[sShopData->viewportObjects[i][OBJ_EVENT_ID]].graphicsId, SpriteCallbackDummy, (u16)sShopData->viewportObjects[i][X_COORD] * 16 + 8, @@ -866,7 +866,7 @@ static void BuyMenuDrawObjectEvents(void) static bool8 BuyMenuCheckIfObjectEventOverlapsMenuBg(s16 *object) { - if (!BuyMenuCheckForOverlapWithMenuBg(object[X_COORD], object[Y_COORD] + 2) && object[LAYER_TYPE] != MB_SECRET_BASE_WALL) + if (!BuyMenuCheckForOverlapWithMenuBg(object[X_COORD], object[Y_COORD] + 2) && object[LAYER_TYPE] != METATILE_LAYER_TYPE_COVERED) { return TRUE; } @@ -934,7 +934,7 @@ static void Task_BuyMenu(u8 taskId) if (sMartInfo.martType == MART_TYPE_NORMAL) { - sShopData->totalCost = (ItemId_GetPrice(itemId) >> GetPriceReduction(POKENEWS_SLATEPORT)); + sShopData->totalCost = (ItemId_GetPrice(itemId) >> IsPokeNewsActive(POKENEWS_SLATEPORT)); } else { @@ -1014,7 +1014,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&tItemCount, sShopData->maxQuantity) == TRUE) { - sShopData->totalCost = (ItemId_GetPrice(tItemId) >> GetPriceReduction(POKENEWS_SLATEPORT)) * tItemCount; + sShopData->totalCost = (ItemId_GetPrice(tItemId) >> IsPokeNewsActive(POKENEWS_SLATEPORT)) * tItemCount; BuyMenuPrintItemQuantityAndPrice(taskId); } else @@ -1022,8 +1022,8 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - ClearStdWindowAndFrameToTransparent(4, 0); - ClearStdWindowAndFrameToTransparent(3, 0); + ClearStdWindowAndFrameToTransparent(4, FALSE); + ClearStdWindowAndFrameToTransparent(3, FALSE); ClearWindowTilemap(4); ClearWindowTilemap(3); PutWindowTilemap(1); @@ -1035,8 +1035,8 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - ClearStdWindowAndFrameToTransparent(4, 0); - ClearStdWindowAndFrameToTransparent(3, 0); + ClearStdWindowAndFrameToTransparent(4, FALSE); + ClearStdWindowAndFrameToTransparent(3, FALSE); ClearWindowTilemap(4); ClearWindowTilemap(3); BuyMenuReturnToItemList(taskId); @@ -1131,7 +1131,7 @@ static void BuyMenuReturnToItemList(u8 taskId) { s16 *data = gTasks[taskId].data; - ClearDialogWindowAndFrameToTransparent(5, 0); + ClearDialogWindowAndFrameToTransparent(5, FALSE); BuyMenuPrintCursor(tListTaskId, 1); PutWindowTilemap(1); PutWindowTilemap(2); @@ -1145,7 +1145,7 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) s16 *data = gTasks[taskId].data; FillWindowPixelBuffer(4, PIXEL_FILL(1)); - PrintMoneyAmount(4, 38, 1, sShopData->totalCost, TEXT_SPEED_FF); + PrintMoneyAmount(4, 38, 1, sShopData->totalCost, TEXT_SKIP_DRAW); ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, BAG_ITEM_CAPACITY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); BuyMenuPrint(4, gStringVar4, 0, 1, 0, 0); @@ -1210,19 +1210,19 @@ void CreatePokemartMenu(const u16 *itemsForSale) CreateShopMenu(MART_TYPE_NORMAL); SetShopItemsForSale(itemsForSale); ClearItemPurchases(); - SetShopMenuCallback(EnableBothScriptContexts); + SetShopMenuCallback(ScriptContext_Enable); } void CreateDecorationShop1Menu(const u16 *itemsForSale) { CreateShopMenu(MART_TYPE_DECOR); SetShopItemsForSale(itemsForSale); - SetShopMenuCallback(EnableBothScriptContexts); + SetShopMenuCallback(ScriptContext_Enable); } void CreateDecorationShop2Menu(const u16 *itemsForSale) { CreateShopMenu(MART_TYPE_DECOR2); SetShopItemsForSale(itemsForSale); - SetShopMenuCallback(EnableBothScriptContexts); + SetShopMenuCallback(ScriptContext_Enable); } diff --git a/src/siirtc.c b/src/siirtc.c index 5f4fc0a23c..0e598f7172 100644 --- a/src/siirtc.c +++ b/src/siirtc.c @@ -4,6 +4,7 @@ #include "gba/gba.h" #include "siirtc.h" +#include "config.h" #define STATUS_INTFE 0x02 // frequency interrupt enable #define STATUS_INTME 0x08 // per-minute interrupt enable diff --git a/src/slot_machine.c b/src/slot_machine.c index 157f3625e4..dd2622e2be 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -31,20 +31,60 @@ #define SLOTMACHINE_GFX_TILES 233 #define MAX_BET 3 -#define SYMBOLS_PER_REEL 21 -#define REEL_SYMBOL_HEIGHT 24 +#define SYMBOLS_PER_REEL 21 +#define REEL_SYMBOL_HEIGHT 24 +#define REEL_HEIGHT (SYMBOLS_PER_REEL * REEL_SYMBOL_HEIGHT) -// Lucky Flags -#define LUCKY_BIAS_REPLAY (1 << 0) -#define LUCKY_BIAS_CHERRY (1 << 1) -#define LUCKY_BIAS_LOTAD (1 << 2) -#define LUCKY_BIAS_AZURILL (1 << 3) -#define LUCKY_BIAS_POWER (1 << 4) -#define LUCKY_BIAS_REELTIME (1 << 5) -#define LUCKY_BIAS_MIXED_777 (1 << 6) -#define LUCKY_BIAS_777 (1 << 7) +#define REELTIME_SYMBOLS 6 +#define REELTIME_SYMBOL_HEIGHT 20 +#define REELTIME_REEL_HEIGHT (REELTIME_SYMBOLS * REELTIME_SYMBOL_HEIGHT) + +// There are three categories of biases: 7's, ReelTime, Regular +// - 7's: BIAS_STRAIGHT_7, BIAS_MIXED_7 +// - ReelTime: BIAS_REELTIME +// - Regular: everything else +// +// The 7's and ReelTime biases can be grouped together as 'Special' biases. +// +// There can be at most two biases at a time. If there are two, one bias will be +// ReelTime and the other will be one of the Regular biases. +// +// A new bias is drawn every round, except during ReelTime. Bias towards 7's +// persists across rounds until you match 7's. All other biases are reset after +// the round. +#define BIAS_REPLAY (1 << 0) +#define BIAS_CHERRY (1 << 1) +#define BIAS_LOTAD (1 << 2) +#define BIAS_AZURILL (1 << 3) +#define BIAS_POWER (1 << 4) +#define BIAS_REELTIME (1 << 5) +#define BIAS_MIXED_7 (1 << 6) +#define BIAS_STRAIGHT_7 (1 << 7) + +#define BIAS_7 (BIAS_STRAIGHT_7 | BIAS_MIXED_7) +#define BIAS_SPECIAL (BIAS_7 | BIAS_REELTIME) +#define BIAS_REGULAR (BIAS_REPLAY | BIAS_CHERRY | BIAS_LOATAD | BIAS_AZURILL | BIAS_POWER) + +// The slot machine will try to manipulate the outcome by adding up to 4 extra +// turns to the reel after you press stop. +// +// The only exception is when it is stopping the third reel and it has decided +// you will lose. In this case, it adds as many turns as necessary to prevent a +// match. +#define MAX_EXTRA_TURNS 4 enum { + SYMBOL_7_RED, + SYMBOL_7_BLUE, + SYMBOL_AZURILL, + SYMBOL_LOTAD, + SYMBOL_CHERRY, + SYMBOL_POWER, + SYMBOL_REPLAY, +}; + +enum +{ GFXTAG_7_RED, GFXTAG_7_BLUE, GFXTAG_AZURILL, @@ -72,6 +112,10 @@ enum { #define GFXTAG_SYMBOLS_START (GFXTAG_7_RED) #define GFXTAG_NUMBERS_START (GFXTAG_NUM_0) +#define REEL_NORMAL_SPEED 8 +#define REEL_HALF_SPEED 4 +#define REEL_QUARTER_SPEED 2 + enum { PALTAG_REEL, PALTAG_REEL_TIME_PIKACHU, @@ -84,16 +128,16 @@ enum { }; enum { - MATCHED_1CHERRY, - MATCHED_2CHERRY, - MATCHED_REPLAY, - MATCHED_LOTAD, - MATCHED_AZURILL, - MATCHED_POWER, - MATCHED_777_MIXED, - MATCHED_777_RED, - MATCHED_777_BLUE, - MATCHED_NONE, + MATCH_CHERRY, // Cherry in center of first reel + MATCH_TOPBOT_CHERRY, // Cherry in top/bottom of first reel + MATCH_REPLAY, + MATCH_LOTAD, + MATCH_AZURILL, + MATCH_POWER, + MATCH_MIXED_7, // First two 7's are same color; last is other color + MATCH_RED_7, + MATCH_BLUE_7, + MATCH_NONE, }; enum { @@ -113,43 +157,78 @@ enum { }; enum { - SLOT_ACTION_UNFADE, - SLOT_ACTION_WAIT_FADE, - SLOT_ACTION_READY_NEW_SPIN, - SLOT_ACTION_READY_NEW_RT_SPIN, - SLOT_ACTION_ASK_INSERT_BET, - SLOT_ACTION_BET_INPUT, - SLOT_ACTION_MSG_NEED_3_COINS, - SLOT_ACTION_WAIT_MSG_NEED_3_COINS, - SLOT_ACTION_WAIT_INFO_BOX, - SLOT_ACTION_START_SPIN, - SLOT_ACTION_START_RT_SPIN, - SLOT_ACTION_SET_LUCKY_SPINS, - SLOT_ACTION_AWAIT_REEL_STOP, - SLOT_ACTION_AWAIT_ALL_REELS_STOP, - SLOT_ACTION_CHECK_MATCHES, - SLOT_ACTION_WAIT_PAYOUT, - SLOT_ACTION_END_PAYOUT, - SLOT_ACTION_MATCHED_POWER, - SLOT_ACTION_WAIT_RT_ANIM, - SLOT_ACTION_RESET_BET_TILES, - SLOT_ACTION_NO_MATCHES, - SLOT_ACTION_ASK_QUIT, - SLOT_ACTION_HANDLE_QUIT_INPUT, - SLOT_ACTION_MSG_MAX_COINS, - SLOT_ACTION_WAIT_MSG_MAX_COINS, - SLOT_ACTION_MSG_NO_MORE_COINS, - SLOT_ACTION_WAIT_MSG_NO_MORE_COINS, - SLOT_ACTION_END, - SLOT_ACTION_FREE, + SLOTTASK_UNFADE, + SLOTTASK_WAIT_FADE, + SLOTTASK_READY_NEW_SPIN, + SLOTTASK_READY_NEW_RT_SPIN, + SLOTTASK_ASK_INSERT_BET, + SLOTTASK_BET_INPUT, + SLOTTASK_MSG_NEED_3_COINS, + SLOTTASK_WAIT_MSG_NEED_3_COINS, + SLOTTASK_WAIT_INFO_BOX, + SLOTTASK_START_SPIN, + SLOTTASK_START_RT_SPIN, + SLOTTASK_RESET_BIAS_FAILURE, + SLOTTASK_WAIT_REEL_STOP, + SLOTTASK_WAIT_ALL_REELS_STOP, + SLOTTASK_CHECK_MATCHES, + SLOTTASK_WAIT_PAYOUT, + SLOTTASK_END_PAYOUT, + SLOTTASK_MATCHED_POWER, + SLOTTASK_WAIT_RT_ANIM, + SLOTTASK_RESET_BET_TILES, + SLOTTASK_NO_MATCHES, + SLOTTASK_ASK_QUIT, + SLOTTASK_HANDLE_QUIT_INPUT, + SLOTTASK_MSG_MAX_COINS, + SLOTTASK_WAIT_MSG_MAX_COINS, + SLOTTASK_MSG_NO_MORE_COINS, + SLOTTASK_WAIT_MSG_NO_MORE_COINS, + SLOTTASK_END, + SLOTTASK_FREE, +}; +enum +{ + PAYOUT_TASK_INIT, + PAYOUT_TASK_GIVE_PAYOUT, + PAYOUT_TASK_FREE, }; enum { - REEL_ACTION_STILL, - REEL_ACTION_SPIN, - REEL_ACTION_STOP, - REEL_ACTION_STOP_MOVE, - REEL_ACTION_STOP_SHAKE, + REEL_TASK_STILL, + REEL_TASK_SPIN, + REEL_TASK_DECIDE_STOP, + REEL_TASK_STOP_MOVE, + REEL_TASK_STOP_SHAKE, +}; + +enum { + PIKABOLT_TASK_IDLE, + PIKABOLT_TASK_ADD_BOLT, + PIKABOLT_TASK_WAIT_ANIM, + PIKABOLT_TASK_CLEAR_ALL, +}; + +enum { + RT_TASK_INIT, + RT_TASK_WINDOW_ENTER, + RT_TASK_WAIT_START_PIKA, + RT_TASK_PIKA_SPEEDUP1, + RT_TASK_PIKA_SPEEDUP2, + RT_TASK_WAIT_REEL, + RT_TASK_CHECK_EXPLODE, + RT_TASK_LAND, + RT_TASK_PIKA_REACT, + RT_TASK_WAIT_CLEAR_POWER, + RT_TASK_CLOSE_WINDOW_SUCCESS, + RT_TASK_DESTROY_SPRITES, + RT_TASK_SET_REEL_SPEED, + RT_TASK_END_SUCCESS, + RT_TASK_EXPLODE, + RT_TASK_WAIT_EXPLODE, + RT_TASK_WAIT_SMOKE, + RT_TASK_CLOSE_WINDOW_FAILURE, + RT_TASK_END_FAILURE, }; #define DIG_SPRITE_DUMMY {255, 0, 0} @@ -235,29 +314,74 @@ enum { DIG_DISPLAY_BONUS_BIG }; + +// How ReelTime works +// ================== +// Entering ReelTime: +// - If the bias you draw at the start of the round is BIAS_REELTIME, the +// ReelTime lottery begins. +// - At the start of the lottery, the game selects how many ReelTime spins you +// will get, based on how many Power bolts you've collected and whether it +// is a lucky game. +// - The lottery machine rolls until it lands on the selected number. If it +// selected 0 spins, the lottery machine will mostly likely explode before +// landing on 0. +// - If you win: +// - You receive the selected number of ReelTime spins +// - You lose all the Power bolts you've collected thus far +// - The lottery window closes and ReelTime officially begins +// +// During ReelTime: +// - You still have to pay coins for bets. +// - The slot reels may spin slower than usual in ReelTime. The machine draws a +// reel speed at the beginning of each ReelTime spin. The more coins you've +// lost to the machine, and the more consecutive ReelTime spins you've done, +// the higher your chances of getting a slower reel speed. +// - In ReelTime, the reel stops exactly on your input. That is, it won't add +// extra turns to manipulate the outcome. +// - ReelTime ends early if you win red 7's or blue 7's. + + +// SlotMachine field explanations: +// +// luckyGame: +// Determined at random when you start playing. Some events modify this: +// - Blue 7 match: game becomes lucky +// - Red 7 match: game becomes normal +// +// Effectively, a lucky game inreases the odds of getting more ReelTime spins. +// If the game is lucky, you have a slightly higher chance of matching Power +// bolts (at the expense of Replays). This helps you fill your Power bolt +// gauge faster. +// +// During ReelTime, the more Power bolts you have, the greater your chances +// of drawing more ReelTime spins. In a lucky game, you have greater odds of +// drawing high yields (3+ RT spins). You also have greater odds of drawing 0 +// RT spins. But drawing 0 lets you keep all your Power bolts, allowing you to +// fill your gauge further. struct SlotMachine { /*0x00*/ u8 state; /*0x01*/ u8 machineId; - /*0x02*/ u8 pikaPower; - /*0x03*/ u8 luckyGame; - /*0x04*/ u8 luckyFlags; + /*0x02*/ u8 pikaPowerBolts; + /*0x03*/ bool8 luckyGame; + /*0x04*/ u8 machineBias; /*0x05*/ u8 reelTimeDraw; - /*0x06*/ u8 isLuckySpin; - /*0x07*/ u8 biasTag; - /*0x08*/ u16 matchedSymbols; + /*0x06*/ bool8 didNotFailBias; + /*0x07*/ u8 biasSymbol; + /*0x08*/ u16 matches; /*0x0A*/ u8 reelTimeSpinsLeft; /*0x0B*/ u8 reelTimeSpinsUsed; /*0x0C*/ s16 coins; /*0x0E*/ s16 payout; - /*0x10*/ s16 netCoinLoss; // coins lost to machine (but never goes below 0) + /*0x10*/ s16 netCoinLoss; // never negative /*0x12*/ s16 bet; /*0x14*/ s16 reeltimePixelOffset; /*0x16*/ s16 reeltimePosition; - /*0x18*/ s16 currReel; - /*0x1A*/ s16 reelIncrement; // speed of reel + /*0x18*/ s16 currentReel; + /*0x1A*/ s16 reelSpeed; /*0x1C*/ s16 reelPixelOffsets[NUM_REELS]; - /*0x22*/ u16 reelPixelOffsetsWhileStopping[NUM_REELS]; + /*0x22*/ u16 reelShockOffsets[NUM_REELS]; /*0x28*/ s16 reelPositions[NUM_REELS]; /*0x2E*/ s16 reelExtraTurns[NUM_REELS]; /*0x34*/ s16 winnerRows[NUM_REELS]; @@ -299,7 +423,7 @@ static void SlotMachineSetup_InitBgsWindows(void); static void SlotMachineSetup_InitVRAM(void); static void SlotMachineSetup_InitOAM(void); static void SlotMachineSetup_InitGpuRegs(void); -static void SlotMachineSetup_InitSlotMachineStruct(void); +static void InitSlotMachine(void); static void SlotMachineSetup_InitPalsSpritesTasks(void); static void SlotMachineSetup_InitTilemaps(void); static void SlotMachineSetup_LoadGfxAndTilemaps(void); @@ -308,84 +432,84 @@ static void AllocDigitalDisplayGfx(void); static void SetDigitalDisplayImagePtrs(void); static void CreateSlotMachineSprites(void); static void CreateGameplayTasks(void); -static void CreateSlotMachineTask(void); +static void CreateSlotMachineTasks(void); static void DestroyDigitalDisplayScene(void); static void Task_SlotMachine(u8); -static bool8 SlotAction_UnfadeScreen(struct Task *); -static bool8 SlotAction_WaitForUnfade(struct Task *); -static bool8 SlotAction_ReadyNewSpin(struct Task *); -static bool8 SlotAction_ReadyNewReelTimeSpin(struct Task *); -static bool8 SlotAction_AskInsertBet(struct Task *); -static bool8 SlotAction_HandleBetInput(struct Task *); -static bool8 SlotAction_PrintMsg_Need3Coins(struct Task *); -static bool8 SlotAction_WaitMsg_Need3Coins(struct Task *); -static bool8 SlotAction_WaitForInfoBox(struct Task *); -static bool8 SlotAction_StartSpin(struct Task *); -static bool8 SlotAction_StartReelTimeSpin(struct Task *); -static bool8 SlotAction_SetLuckySpins(struct Task *); -static bool8 SlotAction_AwaitReelStop(struct Task *); -static bool8 SlotAction_WaitForAllReelsToStop(struct Task *); -static bool8 SlotAction_CheckMatches(struct Task *); -static bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *); -static bool8 SlotAction_EndPayout(struct Task *); -static bool8 SlotAction_MatchedPower(struct Task *); -static bool8 SlotAction_WaitReelTimeAnim(struct Task *); -static bool8 SlotAction_ResetBetTiles(struct Task *); -static bool8 SlotAction_NoMatches(struct Task *); -static bool8 SlotAction_AskQuit(struct Task *); -static bool8 SlotAction_HandleQuitInput(struct Task *); -static bool8 SlotAction_PrintMsg_9999Coins(struct Task *); -static bool8 SlotAction_WaitMsg_9999Coins(struct Task *); -static bool8 SlotAction_PrintMsg_NoMoreCoins(struct Task *); -static bool8 SlotAction_WaitMsg_NoMoreCoins(struct Task *); -static bool8 SlotAction_EndGame(struct Task *); -static bool8 SlotAction_FreeDataStructures(struct Task *); -static void DrawLuckyFlags(void); -static void SetLuckySpins(void); -static bool8 IsThisRoundLucky(void); -static u8 AttemptsAtLuckyFlags_Top3(void); -static u16 SlowReelSpeed(void); -static u8 AttemptsAtLuckyFlags_NotTop3(void); +static bool8 SlotTask_UnfadeScreen(struct Task *); +static bool8 SlotTask_WaitUnfade(struct Task *); +static bool8 SlotTask_ReadyNewSpin(struct Task *); +static bool8 SlotTask_ReadyNewReelTimeSpin(struct Task *); +static bool8 SlotTask_AskInsertBet(struct Task *); +static bool8 SlotTask_HandleBetInput(struct Task *); +static bool8 SlotTask_PrintMsg_Need3Coins(struct Task *); +static bool8 SlotTask_WaitMsg_Need3Coins(struct Task *); +static bool8 SlotTask_WaitInfoBox(struct Task *); +static bool8 SlotTask_StartSpin(struct Task *); +static bool8 SlotTask_StartReelTimeSpin(struct Task *); +static bool8 SlotTask_ResetBiasFailure(struct Task *); +static bool8 SlotTask_WaitReelStop(struct Task *); +static bool8 SlotTask_WaitAllReelsStop(struct Task *); +static bool8 SlotTask_CheckMatches(struct Task *); +static bool8 SlotTask_WaitPayout(struct Task *); +static bool8 SlotTask_EndPayout(struct Task *); +static bool8 SlotTask_MatchedPower(struct Task *); +static bool8 SlotTask_WaitReelTimeAnim(struct Task *); +static bool8 SlotTask_ResetBetTiles(struct Task *); +static bool8 SlotTask_NoMatches(struct Task *); +static bool8 SlotTask_AskQuit(struct Task *); +static bool8 SlotTask_HandleQuitInput(struct Task *); +static bool8 SlotTask_PrintMsg_MaxCoins(struct Task *); +static bool8 SlotTask_WaitMsg_MaxCoins(struct Task *); +static bool8 SlotTask_PrintMsg_NoMoreCoins(struct Task *); +static bool8 SlotTask_WaitMsg_NoMoreCoins(struct Task *); +static bool8 SlotTask_EndGame(struct Task *); +static bool8 SlotTask_FreeDataStructures(struct Task *); +static void DrawMachineBias(void); +static void ResetBiasFailure(void); +static bool8 ShouldTrySpecialBias(void); +static u8 TrySelectBias_Special(void); +static u16 ReelTimeSpeed(void); +static u8 TrySelectBias_Regular(void); static void CheckMatch(void); static void CheckMatch_CenterRow(void); static void CheckMatch_TopAndBottom(void); static void CheckMatch_Diagonals(void); static u8 GetMatchFromSymbols(u8, u8, u8); static void AwardPayout(void); -static void RunAwardPayoutActions(u8); -static bool8 IsFinalTask_RunAwardPayoutActions(void); -static bool8 AwardPayoutAction0(struct Task *); -static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *); -static bool8 AwardPayoutAction_FreeTask(struct Task *); -static u8 GetTagAtRest(u8, s16); -static void CreateSlotReelTasks(void); +static void Task_Payout(u8); +static bool8 IsFinalTask_Task_Payout(void); +static bool8 PayoutTask_Init(struct Task *); +static bool8 PayoutTask_GivePayout(struct Task *); +static bool8 PayoutTask_Free(struct Task *); +static u8 GetSymbolAtRest(u8, s16); +static void CreateReelTasks(void); static void SpinSlotReel(u8); static void StopSlotReel(u8); static bool8 IsSlotReelMoving(u8); -static void Task_RunSlotReelActions(u8); -static bool8 SlotReelAction_StayStill(struct Task *); -static bool8 SlotReelAction_Spin(struct Task *); -static bool8 SlotReelAction_DecideWhereToStop(struct Task *); -static bool8 SlotReelAction_MoveToStop(struct Task *); -static bool8 SlotReelAction_OscillatingStop(struct Task *); -static bool8 DecideReelTurns_BiasTag_Reel1(void); -static bool8 DecideReelTurns_BiasTag_Reel1_Bet1(u8, u8); -static bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8, u8); -static bool8 DecideReelTurns_BiasTag_Reel2(void); -static bool8 DecideReelTurns_BiasTag_Reel2_Bet1or2(void); -static bool8 DecideReelTurns_BiasTag_Reel2_Bet3(void); -static bool8 DecideReelTurns_BiasTag_Reel3(void); -static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8); -static bool8 DecideReelTurns_BiasTag_Reel3_Bet3(u8); -static void DecideReelTurns_NoBiasTag_Reel1(void); -static void DecideReelTurns_NoBiasTag_Reel2(void); -static void DecideReelTurns_NoBiasTag_Reel2_Bet1(void); -static void DecideReelTurns_NoBiasTag_Reel2_Bet2(void); -static void DecideReelTurns_NoBiasTag_Reel2_Bet3(void); -static void DecideReelTurns_NoBiasTag_Reel3(void); -static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void); -static void DecideReelTurns_NoBiasTag_Reel3_Bet2(void); -static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void); +static void Task_Reel(u8); +static bool8 ReelTask_StayStill(struct Task *); +static bool8 ReelTask_Spin(struct Task *); +static bool8 ReelTask_DecideStop(struct Task *); +static bool8 ReelTask_MoveToStop(struct Task *); +static bool8 ReelTask_ShakingStop(struct Task *); +static bool8 DecideStop_Bias_Reel1(void); +static bool8 DecideStop_Bias_Reel1_Bet1(u8, u8); +static bool8 DecideStop_Bias_Reel1_Bet2or3(u8, u8); +static bool8 DecideStop_Bias_Reel2(void); +static bool8 DecideStop_Bias_Reel2_Bet1or2(void); +static bool8 DecideStop_Bias_Reel2_Bet3(void); +static bool8 DecideStop_Bias_Reel3(void); +static bool8 DecideStop_Bias_Reel3_Bet1or2(u8); +static bool8 DecideStop_Bias_Reel3_Bet3(u8); +static void DecideStop_NoBias_Reel1(void); +static void DecideStop_NoBias_Reel2(void); +static void DecideStop_NoBias_Reel2_Bet1(void); +static void DecideStop_NoBias_Reel2_Bet2(void); +static void DecideStop_NoBias_Reel2_Bet3(void); +static void DecideStop_NoBias_Reel3(void); +static void DecideStop_NoBias_Reel3_Bet1(void); +static void DecideStop_NoBias_Reel3_Bet2(void); +static void DecideStop_NoBias_Reel3_Bet3(void); static void PressStopReelButton(u8); static void Task_PressStopReelButton(u8); static void LightenBetTiles(u8); @@ -427,7 +551,7 @@ static void ReelTime_PikachuReact(struct Task *); static void ReelTime_WaitClearPikaPower(struct Task *); static void ReelTime_CloseWindow(struct Task *); static void ReelTime_DestroySprites(struct Task *); -static void ReelTime_SetReelIncrement(struct Task *); +static void ReelTime_SetReelSpeed(struct Task *); static void ReelTime_EndSuccess(struct Task *); static void ReelTime_ExplodeMachine(struct Task *); static void ReelTime_WaitExplode(struct Task *); @@ -437,11 +561,11 @@ static void LoadReelTimeWindowTilemap(s16, s16); static void ClearReelTimeWindowTilemap(s16); static void OpenInfoBox(u8); static bool8 IsInfoBoxClosed(void); -static void RunInfoBoxActions(u8 ); +static void Task_InfoBox(u8 ); static void InfoBox_FadeIn(struct Task *); -static void InfoBox_WaitForFade(struct Task *); +static void InfoBox_WaitFade(struct Task *); static void InfoBox_DrawWindow(struct Task *); -static void InfoBox_AwaitPlayerInput(struct Task *); +static void InfoBox_WaitInput(struct Task *); static void InfoBox_AddText(struct Task *); static void InfoBox_LoadPikaPowerMeter(struct Task *); static void InfoBox_LoadSlotMachineTilemap(struct Task *); @@ -481,7 +605,7 @@ static bool8 IsReelTimeSmokeAnimFinished(void); static void DestroyReelTimeSmokeSprite(void); static u8 CreatePikaPowerBoltSprite(s16, s16); static void DestroyPikaPowerBoltSprite(u8); -static u8 CreateDigitalDisplaySprite(u8, void (*callback)(struct Sprite*), s16, s16, s16); +static u8 CreateDigitalDisplaySprite(u8, void (*callback)(struct Sprite *), s16, s16, s16); static void LoadSlotMachineGfx(void); static void LoadReelBackground(void); static void LoadMenuGfx(void); @@ -557,10 +681,10 @@ static struct SpriteFrameImage *sImageTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRI // Const rom data. static const struct DigitalDisplaySprite *const sDigitalDisplayScenes[]; static const u16 sUnkPalette[]; -static const u8 sLuckyRoundProbabilities[][3]; -static const u8 sBiasTags[]; -static const u16 sLuckyFlagSettings_Top3[]; -static const u16 sLuckyFlagSettings_NotTop3[]; +static const u8 sSpecialDrawOdds[NUM_SLOT_MACHINE_IDS][MAX_BET]; +static const u8 sBiasSymbols[]; +static const u16 sBiasesSpecial[3]; +static const u16 sBiasesRegular[5]; static const s16 sDigitalDisplay_SpriteCoords[][2]; static const SpriteCallback sDigitalDisplay_SpriteCallbacks[]; static const struct SpriteTemplate *const sSpriteTemplates_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES]; @@ -572,8 +696,8 @@ static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion; static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura; static const u16 sReelTimeExplodeProbability[]; static const u16 *const sPokeballShiningPalTable[]; -static const u16 sReelIncrementTable[][2]; -static const u16 sReelTimeBonusIncrementTable[]; +static const u16 sReelTimeSpeed_Probabilities[][2]; +static const u16 sQuarterSpeed_ProbabilityBoost[]; static const u16 sSlotMatchFlags[]; static const u16 sSlotPayouts[]; static const u8 *const sReelBackground_Tilemap; @@ -582,13 +706,13 @@ static const struct SpriteSheet sSlotMachineSpriteSheets[22]; static const struct SpritePalette sSlotMachineSpritePalettes[]; static const u16 *const sDigitalDisplay_Pal; static const s16 sInitialReelPositions[NUM_REELS][2]; -static const u8 sLuckyFlagProbabilities_Top3[][6]; -static const u8 sLuckyFlagProbabilities_NotTop3[][6]; -static const u8 sReeltimeProbabilities_UnluckyGame[][17]; +static const u8 sBiasProbabilities_Special[][NUM_SLOT_MACHINE_IDS]; +static const u8 sBiasProbabilities_Regular[][NUM_SLOT_MACHINE_IDS]; +static const u8 sReelTimeProbabilities_NormalGame[][17]; static const u8 sReelTimeProbabilities_LuckyGame[][17]; -static const u8 sSymToMatch[]; -static const u8 sReelTimeTags[]; -static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL]; +static const u8 sSymbolToMatch[]; +static const u8 sReelTimeSymbols[]; +static const u8 sReelSymbols[NUM_REELS][SYMBOLS_PER_REEL]; static const u16 *const sLitMatchLinePalTable[NUM_MATCH_LINES]; static const u16 *const sDarkMatchLinePalTable[NUM_MATCH_LINES]; static const u8 sMatchLinePalOffsets[NUM_MATCH_LINES]; @@ -660,12 +784,12 @@ static const struct BgTemplate sBgTemplates[] = static const struct WindowTemplate sWindowTemplates[] = { { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 15, - .width = 27, - .height = 4, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 27, + .height = 4, + .paletteNum = 15, .baseBlock = 0x194 }, DUMMY_WIN_TEMPLATE @@ -673,134 +797,142 @@ static const struct WindowTemplate sWindowTemplates[] = static const struct WindowTemplate sWindowTemplate_InfoBox = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 3, - .width = 20, - .height = 13, - .paletteNum = 13, + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 20, + .height = 13, + .paletteNum = 13, .baseBlock = 1 }; static const u8 sColors_ReeltimeHelp[] = {TEXT_COLOR_LIGHT_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY}; -static bool8 (*const sSlotActions[])(struct Task *task) = +static bool8 (*const sSlotTasks[])(struct Task *task) = { - [SLOT_ACTION_UNFADE] = SlotAction_UnfadeScreen, - [SLOT_ACTION_WAIT_FADE] = SlotAction_WaitForUnfade, - [SLOT_ACTION_READY_NEW_SPIN] = SlotAction_ReadyNewSpin, - [SLOT_ACTION_READY_NEW_RT_SPIN] = SlotAction_ReadyNewReelTimeSpin, - [SLOT_ACTION_ASK_INSERT_BET] = SlotAction_AskInsertBet, - [SLOT_ACTION_BET_INPUT] = SlotAction_HandleBetInput, - [SLOT_ACTION_MSG_NEED_3_COINS] = SlotAction_PrintMsg_Need3Coins, - [SLOT_ACTION_WAIT_MSG_NEED_3_COINS] = SlotAction_WaitMsg_Need3Coins, - [SLOT_ACTION_WAIT_INFO_BOX] = SlotAction_WaitForInfoBox, - [SLOT_ACTION_START_SPIN] = SlotAction_StartSpin, - [SLOT_ACTION_START_RT_SPIN] = SlotAction_StartReelTimeSpin, - [SLOT_ACTION_SET_LUCKY_SPINS] = SlotAction_SetLuckySpins, - [SLOT_ACTION_AWAIT_REEL_STOP] = SlotAction_AwaitReelStop, - [SLOT_ACTION_AWAIT_ALL_REELS_STOP] = SlotAction_WaitForAllReelsToStop, - [SLOT_ACTION_CHECK_MATCHES] = SlotAction_CheckMatches, - [SLOT_ACTION_WAIT_PAYOUT] = SlotAction_WaitForPayoutToBeAwarded, - [SLOT_ACTION_END_PAYOUT] = SlotAction_EndPayout, - [SLOT_ACTION_MATCHED_POWER] = SlotAction_MatchedPower, - [SLOT_ACTION_WAIT_RT_ANIM] = SlotAction_WaitReelTimeAnim, - [SLOT_ACTION_RESET_BET_TILES] = SlotAction_ResetBetTiles, - [SLOT_ACTION_NO_MATCHES] = SlotAction_NoMatches, - [SLOT_ACTION_ASK_QUIT] = SlotAction_AskQuit, - [SLOT_ACTION_HANDLE_QUIT_INPUT] = SlotAction_HandleQuitInput, - [SLOT_ACTION_MSG_MAX_COINS] = SlotAction_PrintMsg_9999Coins, - [SLOT_ACTION_WAIT_MSG_MAX_COINS] = SlotAction_WaitMsg_9999Coins, - [SLOT_ACTION_MSG_NO_MORE_COINS] = SlotAction_PrintMsg_NoMoreCoins, - [SLOT_ACTION_WAIT_MSG_NO_MORE_COINS] = SlotAction_WaitMsg_NoMoreCoins, - [SLOT_ACTION_END] = SlotAction_EndGame, - [SLOT_ACTION_FREE] = SlotAction_FreeDataStructures, + [SLOTTASK_UNFADE] = SlotTask_UnfadeScreen, + [SLOTTASK_WAIT_FADE] = SlotTask_WaitUnfade, + [SLOTTASK_READY_NEW_SPIN] = SlotTask_ReadyNewSpin, + [SLOTTASK_READY_NEW_RT_SPIN] = SlotTask_ReadyNewReelTimeSpin, + [SLOTTASK_ASK_INSERT_BET] = SlotTask_AskInsertBet, + [SLOTTASK_BET_INPUT] = SlotTask_HandleBetInput, + [SLOTTASK_MSG_NEED_3_COINS] = SlotTask_PrintMsg_Need3Coins, + [SLOTTASK_WAIT_MSG_NEED_3_COINS] = SlotTask_WaitMsg_Need3Coins, + [SLOTTASK_WAIT_INFO_BOX] = SlotTask_WaitInfoBox, + [SLOTTASK_START_SPIN] = SlotTask_StartSpin, + [SLOTTASK_START_RT_SPIN] = SlotTask_StartReelTimeSpin, + [SLOTTASK_RESET_BIAS_FAILURE] = SlotTask_ResetBiasFailure, + [SLOTTASK_WAIT_REEL_STOP] = SlotTask_WaitReelStop, + [SLOTTASK_WAIT_ALL_REELS_STOP] = SlotTask_WaitAllReelsStop, + [SLOTTASK_CHECK_MATCHES] = SlotTask_CheckMatches, + [SLOTTASK_WAIT_PAYOUT] = SlotTask_WaitPayout, + [SLOTTASK_END_PAYOUT] = SlotTask_EndPayout, + [SLOTTASK_MATCHED_POWER] = SlotTask_MatchedPower, + [SLOTTASK_WAIT_RT_ANIM] = SlotTask_WaitReelTimeAnim, + [SLOTTASK_RESET_BET_TILES] = SlotTask_ResetBetTiles, + [SLOTTASK_NO_MATCHES] = SlotTask_NoMatches, + [SLOTTASK_ASK_QUIT] = SlotTask_AskQuit, + [SLOTTASK_HANDLE_QUIT_INPUT] = SlotTask_HandleQuitInput, + [SLOTTASK_MSG_MAX_COINS] = SlotTask_PrintMsg_MaxCoins, + [SLOTTASK_WAIT_MSG_MAX_COINS] = SlotTask_WaitMsg_MaxCoins, + [SLOTTASK_MSG_NO_MORE_COINS] = SlotTask_PrintMsg_NoMoreCoins, + [SLOTTASK_WAIT_MSG_NO_MORE_COINS] = SlotTask_WaitMsg_NoMoreCoins, + [SLOTTASK_END] = SlotTask_EndGame, + [SLOTTASK_FREE] = SlotTask_FreeDataStructures, }; -static bool8 (*const sAwardPayoutActions[])(struct Task *task) = +static bool8 (*const sPayoutTasks[])(struct Task *task) = { - AwardPayoutAction0, - AwardPayoutAction_GivePayoutToPlayer, - AwardPayoutAction_FreeTask + [PAYOUT_TASK_INIT] = PayoutTask_Init, + [PAYOUT_TASK_GIVE_PAYOUT] = PayoutTask_GivePayout, + [PAYOUT_TASK_FREE] = PayoutTask_Free, }; -static bool8 (*const sSlotReelActions[])(struct Task *task) = +static bool8 (*const sReelTasks[])(struct Task *task) = { - [REEL_ACTION_STILL] = SlotReelAction_StayStill, - [REEL_ACTION_SPIN] = SlotReelAction_Spin, - [REEL_ACTION_STOP] = SlotReelAction_DecideWhereToStop, - [REEL_ACTION_STOP_MOVE] = SlotReelAction_MoveToStop, - [REEL_ACTION_STOP_SHAKE] = SlotReelAction_OscillatingStop + [REEL_TASK_STILL] = ReelTask_StayStill, + [REEL_TASK_SPIN] = ReelTask_Spin, + [REEL_TASK_DECIDE_STOP] = ReelTask_DecideStop, + [REEL_TASK_STOP_MOVE] = ReelTask_MoveToStop, + [REEL_TASK_STOP_SHAKE] = ReelTask_ShakingStop, }; -// returns True if a match with the biasTag is possible in that reel -// also modifies data in sSlotMachine reel arrays to indicate how to get to the matching state -static bool8 (*const sDecideReelTurns_BiasTag[NUM_REELS])(void) = +// Returns true if it is possible to match the bias symbol in the reel. +// +// Modifies the winnerRows and reelExtraTurns to indicate how to match the bias +// symbol. +static bool8 (*const sDecideStop_Bias[NUM_REELS])(void) = { - DecideReelTurns_BiasTag_Reel1, - DecideReelTurns_BiasTag_Reel2, - DecideReelTurns_BiasTag_Reel3 + DecideStop_Bias_Reel1, + DecideStop_Bias_Reel2, + DecideStop_Bias_Reel3, }; -static void (*const sDecideReelTurns_NoBiasTag[NUM_REELS])(void) = +// The player will always lose (barring a few rare circumstances that were not +// accounted for in implementation). +// +// Modifies the winnerRows and reelExtraTurns to indicate how to make the player +// lose. +static void (*const sDecideStop_NoBias[NUM_REELS])(void) = { - DecideReelTurns_NoBiasTag_Reel1, - DecideReelTurns_NoBiasTag_Reel2, - DecideReelTurns_NoBiasTag_Reel3 + DecideStop_NoBias_Reel1, + DecideStop_NoBias_Reel2, + DecideStop_NoBias_Reel3, }; +// The magnitude of the shock depends on how many extra turns are added. static const u16 sReelStopShocks[] = {2, 4, 4, 4, 8}; -static bool8 (*const sDecideReelTurns_BiasTag_Reel1_Bets[MAX_BET])(u8 tag1, u8 tag2) = +static bool8 (*const sDecideStop_Bias_Reel1_Bets[MAX_BET])(u8 sym1, u8 sym2) = { - DecideReelTurns_BiasTag_Reel1_Bet1, - DecideReelTurns_BiasTag_Reel1_Bet2or3, - DecideReelTurns_BiasTag_Reel1_Bet2or3 + DecideStop_Bias_Reel1_Bet1, + DecideStop_Bias_Reel1_Bet2or3, + DecideStop_Bias_Reel1_Bet2or3, }; -static bool8 (*const sDecideReelTurns_BiasTag_Reel2_Bets[MAX_BET])(void) = +static bool8 (*const sDecideStop_Bias_Reel2_Bets[MAX_BET])(void) = { - DecideReelTurns_BiasTag_Reel2_Bet1or2, - DecideReelTurns_BiasTag_Reel2_Bet1or2, - DecideReelTurns_BiasTag_Reel2_Bet3 + DecideStop_Bias_Reel2_Bet1or2, + DecideStop_Bias_Reel2_Bet1or2, + DecideStop_Bias_Reel2_Bet3, }; -static bool8 (*const sDecideReelTurns_BiasTag_Reel3_Bets[MAX_BET])(u8 biasTag) = +static bool8 (*const sDecideStop_Bias_Reel3_Bets[MAX_BET])(u8 biasSymbol) = { - DecideReelTurns_BiasTag_Reel3_Bet1or2, - DecideReelTurns_BiasTag_Reel3_Bet1or2, - DecideReelTurns_BiasTag_Reel3_Bet3 + DecideStop_Bias_Reel3_Bet1or2, + DecideStop_Bias_Reel3_Bet1or2, + DecideStop_Bias_Reel3_Bet3, }; -static void (*const sDecideReelTurns_NoBiasTag_Reel2_Bets[MAX_BET])(void) = +static void (*const sDecideStop_NoBias_Reel2_Bets[MAX_BET])(void) = { - DecideReelTurns_NoBiasTag_Reel2_Bet1, - DecideReelTurns_NoBiasTag_Reel2_Bet2, - DecideReelTurns_NoBiasTag_Reel2_Bet3 + DecideStop_NoBias_Reel2_Bet1, + DecideStop_NoBias_Reel2_Bet2, + DecideStop_NoBias_Reel2_Bet3, }; -static void (*const sDecideReelTurns_NoBiasTag_Reel3_Bets[MAX_BET])(void) = +static void (*const sDecideStop_NoBias_Reel3_Bets[MAX_BET])(void) = { - DecideReelTurns_NoBiasTag_Reel3_Bet1, - DecideReelTurns_NoBiasTag_Reel3_Bet2, - DecideReelTurns_NoBiasTag_Reel3_Bet3 + DecideStop_NoBias_Reel3_Bet1, + DecideStop_NoBias_Reel3_Bet2, + DecideStop_NoBias_Reel3_Bet3, }; -static void (*const sReelStopButtonFuncs[])(struct Task *task, u8 taskId) = +static void (*const sReelStopButtonTasks[])(struct Task *task, u8 taskId) = { StopReelButton_Press, StopReelButton_Wait, - StopReelButton_Unpress + StopReelButton_Unpress, }; static const s16 sReelButtonOffsets[NUM_REELS] = {5, 10, 15}; -static void (*const sPikaPowerBoltFuncs[])(struct Task *task) = +static void (*const sPikaPowerBoltTasks[])(struct Task *task) = { PikaPowerBolt_Idle, PikaPowerBolt_AddBolt, PikaPowerBolt_WaitAnim, - PikaPowerBolt_ClearAll + PikaPowerBolt_ClearAll, }; static const u16 sPikaPowerTileTable[][2] = @@ -810,65 +942,61 @@ static const u16 sPikaPowerTileTable[][2] = {0xaf, 0x7f}, }; -static void (*const sReelTimeActions[])(struct Task *task) = +static void (*const sReelTimeTasks[])(struct Task *task) = { - ReelTime_Init, - ReelTime_WindowEnter, - ReelTime_WaitStartPikachu, - ReelTime_PikachuSpeedUp1, - ReelTime_PikachuSpeedUp2, - ReelTime_WaitReel, - ReelTime_CheckExplode, - ReelTime_LandOnOutcome, - ReelTime_PikachuReact, - ReelTime_WaitClearPikaPower, - ReelTime_CloseWindow, - ReelTime_DestroySprites, - ReelTime_SetReelIncrement, - ReelTime_EndSuccess, - ReelTime_ExplodeMachine, - ReelTime_WaitExplode, - ReelTime_WaitSmoke, - ReelTime_CloseWindow, - ReelTime_EndFailure + [RT_TASK_INIT] = ReelTime_Init, + [RT_TASK_WINDOW_ENTER] = ReelTime_WindowEnter, + [RT_TASK_WAIT_START_PIKA] = ReelTime_WaitStartPikachu, + [RT_TASK_PIKA_SPEEDUP1] = ReelTime_PikachuSpeedUp1, + [RT_TASK_PIKA_SPEEDUP2] = ReelTime_PikachuSpeedUp2, + [RT_TASK_WAIT_REEL] = ReelTime_WaitReel, + [RT_TASK_CHECK_EXPLODE] = ReelTime_CheckExplode, + [RT_TASK_LAND] = ReelTime_LandOnOutcome, + [RT_TASK_PIKA_REACT] = ReelTime_PikachuReact, + [RT_TASK_WAIT_CLEAR_POWER] = ReelTime_WaitClearPikaPower, + [RT_TASK_CLOSE_WINDOW_SUCCESS] = ReelTime_CloseWindow, + [RT_TASK_DESTROY_SPRITES] = ReelTime_DestroySprites, + [RT_TASK_SET_REEL_SPEED] = ReelTime_SetReelSpeed, + [RT_TASK_END_SUCCESS] = ReelTime_EndSuccess, + [RT_TASK_EXPLODE] = ReelTime_ExplodeMachine, + [RT_TASK_WAIT_EXPLODE] = ReelTime_WaitExplode, + [RT_TASK_WAIT_SMOKE] = ReelTime_WaitSmoke, + [RT_TASK_CLOSE_WINDOW_FAILURE] = ReelTime_CloseWindow, + [RT_TASK_END_FAILURE] = ReelTime_EndFailure, }; static const u8 sReelTimePikachuAnimIds[] = {1, 1, 2, 2}; static const s16 sReelTimeBoltDelays[] = {64, 48, 24, 8}; static const s16 sPikachuAuraFlashDelays[] = {10, 8, 6, 4}; -static void (*const sInfoBoxActions[])(struct Task *task) = +static void (*const sInfoBoxTasks[])(struct Task *task) = { // Go to Info screen InfoBox_FadeIn, - InfoBox_WaitForFade, + InfoBox_WaitFade, InfoBox_DrawWindow, - InfoBox_WaitForFade, + InfoBox_WaitFade, InfoBox_AddText, - InfoBox_WaitForFade, + InfoBox_WaitFade, // On Info screen - InfoBox_AwaitPlayerInput, + InfoBox_WaitInput, // Exit Info screen - InfoBox_WaitForFade, + InfoBox_WaitFade, InfoBox_LoadSlotMachineTilemap, - InfoBox_WaitForFade, + InfoBox_WaitFade, InfoBox_CreateDigitalDisplay, - InfoBox_WaitForFade, + InfoBox_WaitFade, InfoBox_LoadPikaPowerMeter, - InfoBox_WaitForFade, + InfoBox_WaitFade, InfoBox_FreeTask, }; // Just idles, digital display is handled by CreateDigitalDisplayScene and sprite callbacks -static void (*const sDigitalDisplayActions[])(struct Task *task) = +static void (*const sDigitalDisplayTasks[])(struct Task *task) = { DigitalDisplay_Idle, }; - - - -// code #define tState data[0] static void Task_FadeToSlotMachine(u8 taskId) @@ -889,12 +1017,12 @@ static void Task_FadeToSlotMachine(u8 taskId) } } -void PlaySlotMachine(u8 slotMachineIndex, MainCallback exitCallback) +void PlaySlotMachine(u8 machineId, MainCallback exitCallback) { u8 taskId; sSlotMachine = AllocZeroed(sizeof(*sSlotMachine)); - PlaySlotMachine_Internal(slotMachineIndex, exitCallback); + PlaySlotMachine_Internal(machineId, exitCallback); taskId = CreateTask(Task_FadeToSlotMachine, 0); gTasks[taskId].tState = 0; } @@ -907,7 +1035,7 @@ static void CB2_SlotMachineSetup(void) { case 0: SlotMachineSetup_InitBgsWindows(); - SlotMachineSetup_InitSlotMachineStruct(); + InitSlotMachine(); gMain.state++; break; case 1: @@ -981,25 +1109,31 @@ static void SlotMachine_VBlankCB(void) SetGpuReg(REG_OFFSET_WINOUT, sSlotMachine->winOut); } -static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback exitCallback) +#define tMachineId data[0] +#define tExitCallback data[1] + +static void PlaySlotMachine_Internal(u8 machineId, MainCallback exitCallback) { struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)]; - task->data[0] = slotMachineIndex; - StoreWordInTwoHalfwords(&task->data[1], (intptr_t)exitCallback); + task->tMachineId = machineId; + StoreWordInTwoHalfwords(&task->tExitCallback, (intptr_t)exitCallback); } - -static void SlotMachineInitDummyTask(void) +// Extracts and assigns machineId and exit callback from task. +static void SlotMachine_InitFromTask(void) { struct Task *task = &gTasks[FindTaskIdByFunc(SlotMachineDummyTask)]; - sSlotMachine->machineId = task->data[0]; - LoadWordFromTwoHalfwords((u16 *)&task->data[1], (u32 *)&sSlotMachine->prevMainCb); + sSlotMachine->machineId = task->tMachineId; + LoadWordFromTwoHalfwords((u16 *)&task->tExitCallback, (u32 *)&sSlotMachine->prevMainCb); } static void SlotMachineDummyTask(u8 taskId) { } +#undef tMachineId +#undef tExitCallback + static void SlotMachineSetup_InitBgsWindows(void) { SetVBlankCallback(NULL); @@ -1048,25 +1182,25 @@ static void SlotMachineSetup_InitGpuRegs(void) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(9, 8)); } -// set up initial state of slot machine -static void SlotMachineSetup_InitSlotMachineStruct(void) +// Set up initial state of slot machine +static void InitSlotMachine(void) { u8 i; - SlotMachineInitDummyTask(); // assigns sSlotMachine->machineId, etc. - sSlotMachine->state = 0; - sSlotMachine->pikaPower = 0; + SlotMachine_InitFromTask(); + sSlotMachine->state = SLOTTASK_UNFADE; + sSlotMachine->pikaPowerBolts = 0; sSlotMachine->luckyGame = Random() & 1; - sSlotMachine->luckyFlags = 0; - sSlotMachine->matchedSymbols = 0; + sSlotMachine->machineBias = 0; + sSlotMachine->matches = 0; sSlotMachine->reelTimeSpinsLeft = 0; sSlotMachine->reelTimeSpinsUsed = 0; sSlotMachine->coins = GetCoins(); sSlotMachine->payout = 0; sSlotMachine->netCoinLoss = 0; sSlotMachine->bet = 0; - sSlotMachine->currReel = 0; - sSlotMachine->reelIncrement = 8; + sSlotMachine->currentReel = LEFT_REEL; + sSlotMachine->reelSpeed = REEL_NORMAL_SPEED; sSlotMachine->win0h = DISPLAY_WIDTH; sSlotMachine->win0v = DISPLAY_HEIGHT; sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; @@ -1075,10 +1209,10 @@ static void SlotMachineSetup_InitSlotMachineStruct(void) for (i = 0; i < NUM_REELS; i++) { - sSlotMachine->reelPixelOffsetsWhileStopping[i] = 0; + sSlotMachine->reelShockOffsets[i] = 0; sSlotMachine->reelPositions[i] = sInitialReelPositions[i][sSlotMachine->luckyGame] % SYMBOLS_PER_REEL; - sSlotMachine->reelPixelOffsets[i] = SYMBOLS_PER_REEL * REEL_SYMBOL_HEIGHT - sSlotMachine->reelPositions[i] * REEL_SYMBOL_HEIGHT; - sSlotMachine->reelPixelOffsets[i] %= SYMBOLS_PER_REEL * REEL_SYMBOL_HEIGHT; + sSlotMachine->reelPixelOffsets[i] = REEL_HEIGHT - sSlotMachine->reelPositions[i] * REEL_SYMBOL_HEIGHT; + sSlotMachine->reelPixelOffsets[i] %= REEL_HEIGHT; } AlertTVThatPlayerPlayedSlotMachine(GetCoins()); } @@ -1129,89 +1263,92 @@ static void CreateSlotMachineSprites(void) static void CreateGameplayTasks(void) { CreatePikaPowerBoltTask(); - CreateSlotReelTasks(); + CreateReelTasks(); CreateDigitalDisplayTask(); - CreateSlotMachineTask(); + CreateSlotMachineTasks(); } -static void CreateSlotMachineTask(void) +static void CreateSlotMachineTasks(void) { Task_SlotMachine(CreateTask(Task_SlotMachine, 0)); } -// task->data[0] is a timer static void Task_SlotMachine(u8 taskId) { - while (sSlotActions[sSlotMachine->state](&gTasks[taskId])) + while (sSlotTasks[sSlotMachine->state](&gTasks[taskId])) ; } -// SLOT_ACTION_UNFADE -static bool8 SlotAction_UnfadeScreen(struct Task *task) +#define tTimer data[0] +#define tTimer2 data[1] + +// SLOTTASK_UNFADE +static bool8 SlotTask_UnfadeScreen(struct Task *task) { BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB(0, 0, 0)); - LoadPikaPowerMeter(sSlotMachine->pikaPower); - sSlotMachine->state++; // SLOT_ACTION_WAIT_FADE + LoadPikaPowerMeter(sSlotMachine->pikaPowerBolts); + sSlotMachine->state++; // SLOTTASK_WAIT_FADE return FALSE; } -// SLOT_ACTION_WAIT_FADE -static bool8 SlotAction_WaitForUnfade(struct Task *task) +// SLOTTASK_WAIT_FADE +static bool8 SlotTask_WaitUnfade(struct Task *task) { if (!gPaletteFade.active) sSlotMachine->state++; return FALSE; } -// SLOT_ACTION_READY_NEW_SPIN -static bool8 SlotAction_ReadyNewSpin(struct Task *task) +// SLOTTASK_READY_NEW_SPIN +static bool8 SlotTask_ReadyNewSpin(struct Task *task) { sSlotMachine->payout = 0; sSlotMachine->bet = 0; - sSlotMachine->currReel = 0; - sSlotMachine->luckyFlags &= (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777); - sSlotMachine->state = SLOT_ACTION_ASK_INSERT_BET; + sSlotMachine->currentReel = LEFT_REEL; + sSlotMachine->machineBias &= (BIAS_STRAIGHT_7 | BIAS_MIXED_7); + sSlotMachine->state = SLOTTASK_ASK_INSERT_BET; if (sSlotMachine->coins <= 0) { - sSlotMachine->state = SLOT_ACTION_MSG_NO_MORE_COINS; + sSlotMachine->state = SLOTTASK_MSG_NO_MORE_COINS; } else if (sSlotMachine->reelTimeSpinsLeft) { - sSlotMachine->state = SLOT_ACTION_READY_NEW_RT_SPIN; + sSlotMachine->state = SLOTTASK_READY_NEW_RT_SPIN; CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); } return TRUE; } -// SLOT_ACTION_READY_NEW_RT_SPIN -static bool8 SlotAction_ReadyNewReelTimeSpin(struct Task *task) +// SLOTTASK_READY_NEW_RT_SPIN +static bool8 SlotTask_ReadyNewReelTimeSpin(struct Task *task) { if (IsDigitalDisplayAnimFinished()) - sSlotMachine->state = SLOT_ACTION_ASK_INSERT_BET; + sSlotMachine->state = SLOTTASK_ASK_INSERT_BET; return FALSE; } -// SLOT_ACTION_ASK_INSERT_BET -static bool8 SlotAction_AskInsertBet(struct Task *task) +// SLOTTASK_ASK_INSERT_BET +static bool8 SlotTask_AskInsertBet(struct Task *task) { CreateDigitalDisplayScene(DIG_DISPLAY_INSERT_BET); - sSlotMachine->state = SLOT_ACTION_BET_INPUT; + sSlotMachine->state = SLOTTASK_BET_INPUT; if (sSlotMachine->coins >= MAX_COINS) - sSlotMachine->state = SLOT_ACTION_MSG_MAX_COINS; + sSlotMachine->state = SLOTTASK_MSG_MAX_COINS; return TRUE; } -// SLOT_ACTION_BET_INPUT -static bool8 SlotAction_HandleBetInput(struct Task *task) +// SLOTTASK_BET_INPUT +static bool8 SlotTask_HandleBetInput(struct Task *task) { s16 i; if (JOY_NEW(SELECT_BUTTON)) { OpenInfoBox(DIG_DISPLAY_INSERT_BET); - sSlotMachine->state = SLOT_ACTION_WAIT_INFO_BOX; + sSlotMachine->state = SLOTTASK_WAIT_INFO_BOX; } - else if (JOY_NEW(R_BUTTON)) // bet the max amount + // Try to bet the max amount + else if (JOY_NEW(R_BUTTON)) { if (sSlotMachine->coins - (MAX_BET - sSlotMachine->bet) >= 0) { @@ -1219,12 +1356,13 @@ static bool8 SlotAction_HandleBetInput(struct Task *task) LightenBetTiles(i); sSlotMachine->coins -= (MAX_BET - sSlotMachine->bet); sSlotMachine->bet = MAX_BET; - sSlotMachine->state = SLOT_ACTION_START_SPIN; + sSlotMachine->state = SLOTTASK_START_SPIN; PlaySE(SE_SHOP); } - else // you didn't have enough coins to bet the max + // Not enough coins + else { - sSlotMachine->state = SLOT_ACTION_MSG_NEED_3_COINS; + sSlotMachine->state = SLOTTASK_MSG_NEED_3_COINS; } } else @@ -1240,48 +1378,48 @@ static bool8 SlotAction_HandleBetInput(struct Task *task) // Maxed bet or finished betting if (sSlotMachine->bet >= MAX_BET || (sSlotMachine->bet != 0 && JOY_NEW(A_BUTTON))) - sSlotMachine->state = SLOT_ACTION_START_SPIN; + sSlotMachine->state = SLOTTASK_START_SPIN; // Quit prompt if (JOY_NEW(B_BUTTON)) - sSlotMachine->state = SLOT_ACTION_ASK_QUIT; + sSlotMachine->state = SLOTTASK_ASK_QUIT; } return FALSE; } -// SLOT_ACTION_NEED_3_COINS -static bool8 SlotAction_PrintMsg_Need3Coins(struct Task *task) +// SLOTTASK_MSG_NEED_3_COINS +static bool8 SlotTask_PrintMsg_Need3Coins(struct Task *task) { - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized(0, 1, gText_YouDontHaveThreeCoins, 0, 1, 0, 0); - CopyWindowToVram(0, 3); - sSlotMachine->state = SLOT_ACTION_WAIT_MSG_NEED_3_COINS; + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_YouDontHaveThreeCoins, 0, 1, 0, 0); + CopyWindowToVram(0, COPYWIN_FULL); + sSlotMachine->state = SLOTTASK_WAIT_MSG_NEED_3_COINS; return FALSE; } -// SLOT_ACTION_WAIT_MSG_NEED_3_COINS -static bool8 SlotAction_WaitMsg_Need3Coins(struct Task *task) +// SLOTTASK_WAIT_MSG_NEED_3_COINS +static bool8 SlotTask_WaitMsg_Need3Coins(struct Task *task) { if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = SLOT_ACTION_BET_INPUT; + sSlotMachine->state = SLOTTASK_BET_INPUT; } return FALSE; } -// SLOT_ACTION_WAIT_INFO_BOX -static bool8 SlotAction_WaitForInfoBox(struct Task *task) +// SLOTTASK_WAIT_INFO_BOX +static bool8 SlotTask_WaitInfoBox(struct Task *task) { if (IsInfoBoxClosed()) - sSlotMachine->state = SLOT_ACTION_BET_INPUT; + sSlotMachine->state = SLOTTASK_BET_INPUT; return FALSE; } -// SLOT_ACTION_START_SPIN -static bool8 SlotAction_StartSpin(struct Task *task) +// SLOTTASK_START_SPIN +static bool8 SlotTask_StartSpin(struct Task *task) { - DrawLuckyFlags(); + DrawMachineBias(); DestroyDigitalDisplayScene(); SpinSlotReel(LEFT_REEL); @@ -1290,79 +1428,79 @@ static bool8 SlotAction_StartSpin(struct Task *task) IncrementDailySlotsUses(); - task->data[0] = 0; - if (sSlotMachine->luckyFlags & LUCKY_BIAS_REELTIME) + task->tTimer = 0; + if (sSlotMachine->machineBias & BIAS_REELTIME) { BeginReelTime(); - sSlotMachine->state = SLOT_ACTION_START_RT_SPIN; + sSlotMachine->state = SLOTTASK_START_RT_SPIN; } else { CreateDigitalDisplayScene(DIG_DISPLAY_STOP_REEL); - sSlotMachine->state = SLOT_ACTION_SET_LUCKY_SPINS; + sSlotMachine->state = SLOTTASK_RESET_BIAS_FAILURE; } - sSlotMachine->reelIncrement = 8; + sSlotMachine->reelSpeed = REEL_NORMAL_SPEED; if (sSlotMachine->reelTimeSpinsLeft) - sSlotMachine->reelIncrement = SlowReelSpeed(); + sSlotMachine->reelSpeed = ReelTimeSpeed(); return FALSE; } -// SLOT_ACTION_START_RT_SPIN -static bool8 SlotAction_StartReelTimeSpin(struct Task *task) +// SLOTTASK_START_RT_SPIN +static bool8 SlotTask_StartReelTimeSpin(struct Task *task) { if (IsReelTimeTaskDone()) { CreateDigitalDisplayScene(DIG_DISPLAY_STOP_REEL); - sSlotMachine->luckyFlags &= ~LUCKY_BIAS_REELTIME; - sSlotMachine->state = SLOT_ACTION_SET_LUCKY_SPINS; + sSlotMachine->machineBias &= ~BIAS_REELTIME; + sSlotMachine->state = SLOTTASK_RESET_BIAS_FAILURE; } return FALSE; } -// SLOT_ACTION_SET_LUCKY_SPINS -static bool8 SlotAction_SetLuckySpins(struct Task *task) +// SLOTTASK_RESET_BIAS_FAILURE +static bool8 SlotTask_ResetBiasFailure(struct Task *task) { - if (++task->data[0] >= 30) + if (++task->tTimer >= 30) { - SetLuckySpins(); - sSlotMachine->state = SLOT_ACTION_AWAIT_REEL_STOP; + ResetBiasFailure(); + sSlotMachine->state = SLOTTASK_WAIT_REEL_STOP; } return FALSE; } -// SLOT_ACTION_AWAIT_REEL_STOP -static bool8 SlotAction_AwaitReelStop(struct Task *task) +// SLOTTASK_WAIT_REEL_STOP +static bool8 SlotTask_WaitReelStop(struct Task *task) { if (JOY_NEW(A_BUTTON)) { PlaySE(SE_CONTEST_PLACE); - StopSlotReel(sSlotMachine->currReel); - PressStopReelButton(sSlotMachine->currReel); - sSlotMachine->state = SLOT_ACTION_AWAIT_ALL_REELS_STOP; + StopSlotReel(sSlotMachine->currentReel); + PressStopReelButton(sSlotMachine->currentReel); + sSlotMachine->state = SLOTTASK_WAIT_ALL_REELS_STOP; } return FALSE; } -// SLOT_ACTION_AWAIT_ALL_REELS_STOP -static bool8 SlotAction_WaitForAllReelsToStop(struct Task *task) +// SLOTTASK_WAIT_ALL_REELS_STOP +static bool8 SlotTask_WaitAllReelsStop(struct Task *task) { - if (!IsSlotReelMoving(sSlotMachine->currReel)) + if (!IsSlotReelMoving(sSlotMachine->currentReel)) { - sSlotMachine->currReel++; - sSlotMachine->state = SLOT_ACTION_AWAIT_REEL_STOP; - if (sSlotMachine->currReel >= NUM_REELS) + sSlotMachine->currentReel++; + sSlotMachine->state = SLOTTASK_WAIT_REEL_STOP; + if (sSlotMachine->currentReel >= NUM_REELS) { - sSlotMachine->state = SLOT_ACTION_CHECK_MATCHES; + sSlotMachine->state = SLOTTASK_CHECK_MATCHES; } return TRUE; } return FALSE; } -// SLOT_ACTION_CHECK_MATCHES -static bool8 SlotAction_CheckMatches(struct Task *task) +// SLOTTASK_CHECK_MATCHES +static bool8 SlotTask_CheckMatches(struct Task *task) { - sSlotMachine->luckyFlags &= (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777); + sSlotMachine->machineBias &= (BIAS_STRAIGHT_7 | BIAS_MIXED_7); CheckMatch(); if (sSlotMachine->reelTimeSpinsLeft) { @@ -1370,21 +1508,21 @@ static bool8 SlotAction_CheckMatches(struct Task *task) sSlotMachine->reelTimeSpinsUsed++; } - if (sSlotMachine->matchedSymbols) + if (sSlotMachine->matches) { - sSlotMachine->state = SLOT_ACTION_WAIT_PAYOUT; + sSlotMachine->state = SLOTTASK_WAIT_PAYOUT; AwardPayout(); FlashSlotMachineLights(); if ((sSlotMachine->netCoinLoss -= sSlotMachine->payout) < 0) { sSlotMachine->netCoinLoss = 0; } - if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_BLUE) | (1 << MATCHED_777_RED))) + if (sSlotMachine->matches & ((1 << MATCH_BLUE_7) | (1 << MATCH_RED_7))) { PlayFanfare(MUS_SLOTS_JACKPOT); CreateDigitalDisplayScene(DIG_DISPLAY_BONUS_BIG); } - else if (sSlotMachine->matchedSymbols & (1 << MATCHED_777_MIXED)) + else if (sSlotMachine->matches & (1 << MATCH_MIXED_7)) { PlayFanfare(MUS_SLOTS_JACKPOT); CreateDigitalDisplayScene(DIG_DISPLAY_BONUS_REG); @@ -1394,212 +1532,212 @@ static bool8 SlotAction_CheckMatches(struct Task *task) PlayFanfare(MUS_SLOTS_WIN); CreateDigitalDisplayScene(DIG_DISPLAY_WIN); } - // if you matched 777... - if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_MIXED) | (1 << MATCHED_777_BLUE) | (1 << MATCHED_777_RED))) + + if (sSlotMachine->matches & ((1 << MATCH_MIXED_7) | (1 << MATCH_BLUE_7) | (1 << MATCH_RED_7))) { - sSlotMachine->luckyFlags &= ~(LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777); - if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_BLUE) | (1 << MATCHED_777_RED))) + sSlotMachine->machineBias &= ~(BIAS_STRAIGHT_7 | BIAS_MIXED_7); + if (sSlotMachine->matches & ((1 << MATCH_BLUE_7) | (1 << MATCH_RED_7))) { + // ReelTime ends if it was ongoing sSlotMachine->reelTimeSpinsLeft = 0; sSlotMachine->reelTimeSpinsUsed = 0; sSlotMachine->luckyGame = FALSE; - if (sSlotMachine->matchedSymbols & (1 << MATCHED_777_BLUE)) - // this may be an error, but if you get blue 777, the game becomes lucky + if (sSlotMachine->matches & (1 << MATCH_BLUE_7)) sSlotMachine->luckyGame = TRUE; } } - if (sSlotMachine->matchedSymbols & (1 << MATCHED_POWER) && sSlotMachine->pikaPower < 16) + if (sSlotMachine->matches & (1 << MATCH_POWER) && sSlotMachine->pikaPowerBolts < 16) { - sSlotMachine->pikaPower++; - AddPikaPowerBolt(sSlotMachine->pikaPower); + sSlotMachine->pikaPowerBolts++; + AddPikaPowerBolt(sSlotMachine->pikaPowerBolts); } } else { CreateDigitalDisplayScene(DIG_DISPLAY_LOSE); - sSlotMachine->state = SLOT_ACTION_NO_MATCHES; + sSlotMachine->state = SLOTTASK_NO_MATCHES; if ((sSlotMachine->netCoinLoss += sSlotMachine->bet) > MAX_COINS) sSlotMachine->netCoinLoss = MAX_COINS; } return FALSE; } -// SLOT_ACTION_WAIT_PAYOUT -static bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *task) +// SLOTTASK_WAIT_PAYOUT +static bool8 SlotTask_WaitPayout(struct Task *task) { - if (IsFinalTask_RunAwardPayoutActions()) - sSlotMachine->state = SLOT_ACTION_END_PAYOUT; + if (IsFinalTask_Task_Payout()) + sSlotMachine->state = SLOTTASK_END_PAYOUT; return FALSE; } -// SLOT_ACTION_END_PAYOUT -static bool8 SlotAction_EndPayout(struct Task *task) +// SLOTTASK_END_PAYOUT +static bool8 SlotTask_EndPayout(struct Task *task) { if (TryStopSlotMachineLights()) { - sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES; + sSlotMachine->state = SLOTTASK_RESET_BET_TILES; - if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_RED) | (1 << MATCHED_777_BLUE))) + if (sSlotMachine->matches & ((1 << MATCH_RED_7) | (1 << MATCH_BLUE_7))) IncrementGameStat(GAME_STAT_SLOT_JACKPOTS); - if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) + if (sSlotMachine->matches & (1 << MATCH_REPLAY)) { - sSlotMachine->currReel = 0; - sSlotMachine->state = SLOT_ACTION_START_SPIN; + sSlotMachine->currentReel = LEFT_REEL; + sSlotMachine->state = SLOTTASK_START_SPIN; } - if (sSlotMachine->matchedSymbols & (1 << MATCHED_POWER)) - sSlotMachine->state = SLOT_ACTION_MATCHED_POWER; + if (sSlotMachine->matches & (1 << MATCH_POWER)) + sSlotMachine->state = SLOTTASK_MATCHED_POWER; - if (sSlotMachine->reelTimeSpinsLeft && sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) + if (sSlotMachine->reelTimeSpinsLeft && sSlotMachine->matches & (1 << MATCH_REPLAY)) { CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); - sSlotMachine->state = SLOT_ACTION_WAIT_RT_ANIM; + sSlotMachine->state = SLOTTASK_WAIT_RT_ANIM; } } return FALSE; } -// SLOT_ACTION_MATCHED_POWER -static bool8 SlotAction_MatchedPower(struct Task *task) +// SLOTTASK_MATCHED_POWER +static bool8 SlotTask_MatchedPower(struct Task *task) { if (!IsPikaPowerBoltAnimating()) { - sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES; - if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) + sSlotMachine->state = SLOTTASK_RESET_BET_TILES; + if (sSlotMachine->matches & (1 << MATCH_REPLAY)) { - sSlotMachine->state = SLOT_ACTION_START_SPIN; + sSlotMachine->state = SLOTTASK_START_SPIN; if (sSlotMachine->reelTimeSpinsLeft) { CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); - sSlotMachine->state = SLOT_ACTION_WAIT_RT_ANIM; + sSlotMachine->state = SLOTTASK_WAIT_RT_ANIM; } } } return FALSE; } -// SLOT_ACTION_WAIT_RT_ANIM -static bool8 SlotAction_WaitReelTimeAnim(struct Task *task) +// SLOTTASK_WAIT_RT_ANIM +static bool8 SlotTask_WaitReelTimeAnim(struct Task *task) { if (IsDigitalDisplayAnimFinished()) { - sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES; - if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY)) + sSlotMachine->state = SLOTTASK_RESET_BET_TILES; + if (sSlotMachine->matches & (1 << MATCH_REPLAY)) { - sSlotMachine->state = SLOT_ACTION_START_SPIN; + sSlotMachine->state = SLOTTASK_START_SPIN; } } return FALSE; } -// SLOT_ACTION_RESET_BET_TILES -static bool8 SlotAction_ResetBetTiles(struct Task *task) +// SLOTTASK_RESET_BET_TILES +static bool8 SlotTask_ResetBetTiles(struct Task *task) { DarkenBetTiles(0); DarkenBetTiles(1); DarkenBetTiles(2); - sSlotMachine->state = SLOT_ACTION_READY_NEW_SPIN; + sSlotMachine->state = SLOTTASK_READY_NEW_SPIN; return FALSE; } -// SLOT_ACTION_NO_MATCHES -static bool8 SlotAction_NoMatches(struct Task *task) +// SLOTTASK_NO_MATCHES +static bool8 SlotTask_NoMatches(struct Task *task) { - if (++task->data[1] > 64) + if (++task->tTimer2 > 64) { - task->data[1] = 0; - sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES; + task->tTimer2 = 0; + sSlotMachine->state = SLOTTASK_RESET_BET_TILES; } return FALSE; } -// SLOT_ACTION_ASK_QUIT -static bool8 SlotAction_AskQuit(struct Task *task) +// SLOTTASK_ASK_QUIT +static bool8 SlotTask_AskQuit(struct Task *task) { - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized(0, 1, gText_QuitTheGame, 0, 1, 0, 0); - CopyWindowToVram(0, 3); + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_QuitTheGame, 0, 1, 0, 0); + CopyWindowToVram(0, COPYWIN_FULL); CreateYesNoMenuParameterized(0x15, 7, 0x214, 0x180, 0xE, 0xF); - sSlotMachine->state = SLOT_ACTION_HANDLE_QUIT_INPUT; + sSlotMachine->state = SLOTTASK_HANDLE_QUIT_INPUT; return FALSE; } -// SLOT_ACTION_HANDLE_QUIT_INPUT -static bool8 SlotAction_HandleQuitInput(struct Task *task) +// SLOTTASK_HANDLE_QUIT_INPUT +static bool8 SlotTask_HandleQuitInput(struct Task *task) { s8 input = Menu_ProcessInputNoWrapClearOnChoose(); - if (input == 0) // player chooses to quit + if (input == 0) // Chose to quit { ClearDialogWindowAndFrame(0, TRUE); DarkenBetTiles(0); DarkenBetTiles(1); DarkenBetTiles(2); sSlotMachine->coins += sSlotMachine->bet; - sSlotMachine->state = SLOT_ACTION_END; + sSlotMachine->state = SLOTTASK_END; } - else if (input == 1 || input == -1) // player chooses not to quit + else if (input == 1 || input == -1) // Chose not to quit { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = SLOT_ACTION_BET_INPUT; + sSlotMachine->state = SLOTTASK_BET_INPUT; } return FALSE; } -// SLOT_ACTION_MSG_MAX_COINS -static bool8 SlotAction_PrintMsg_9999Coins(struct Task *task) +// SLOTTASK_MSG_MAX_COINS +static bool8 SlotTask_PrintMsg_MaxCoins(struct Task *task) { - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized(0, 1, gText_YouveGot9999Coins, 0, 1, 0, 0); - CopyWindowToVram(0, 3); - sSlotMachine->state = SLOT_ACTION_WAIT_MSG_MAX_COINS; + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_YouveGot9999Coins, 0, 1, 0, 0); + CopyWindowToVram(0, COPYWIN_FULL); + sSlotMachine->state = SLOTTASK_WAIT_MSG_MAX_COINS; return FALSE; } -// SLOT_ACTION_WAIT_MSG_MAX_COINS -static bool8 SlotAction_WaitMsg_9999Coins(struct Task *task) +// SLOTTASK_WAIT_MSG_MAX_COINS +static bool8 SlotTask_WaitMsg_MaxCoins(struct Task *task) { if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = SLOT_ACTION_BET_INPUT; + sSlotMachine->state = SLOTTASK_BET_INPUT; } return FALSE; } -// SLOT_ACTION_MSG_NO_MORE_COINS -static bool8 SlotAction_PrintMsg_NoMoreCoins(struct Task *task) +// SLOTTASK_MSG_NO_MORE_COINS +static bool8 SlotTask_PrintMsg_NoMoreCoins(struct Task *task) { - DrawDialogueFrame(0, 0); - AddTextPrinterParameterized(0, 1, gText_YouveRunOutOfCoins, 0, 1, 0, 0); - CopyWindowToVram(0, 3); - sSlotMachine->state = SLOT_ACTION_WAIT_MSG_NO_MORE_COINS; + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_YouveRunOutOfCoins, 0, 1, 0, 0); + CopyWindowToVram(0, COPYWIN_FULL); + sSlotMachine->state = SLOTTASK_WAIT_MSG_NO_MORE_COINS; return FALSE; } -// SLOT_ACTION_WAIT_MSG_NO_MORE_COINS -static bool8 SlotAction_WaitMsg_NoMoreCoins(struct Task *task) +// SLOTTASK_WAIT_MSG_NO_MORE_COINS +static bool8 SlotTask_WaitMsg_NoMoreCoins(struct Task *task) { if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, TRUE); - sSlotMachine->state = SLOT_ACTION_END; + sSlotMachine->state = SLOTTASK_END; } return FALSE; } -// SLOT_ACTION_END -static bool8 SlotAction_EndGame(struct Task *task) +// SLOTTASK_END +static bool8 SlotTask_EndGame(struct Task *task) { SetCoins(sSlotMachine->coins); TryPutFindThatGamerOnAir(GetCoins()); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); - sSlotMachine->state++; // SLOT_ACTION_FREE + sSlotMachine->state++; // SLOTTASK_FREE return FALSE; } -// SLOT_ACTION_FREE -static bool8 SlotAction_FreeDataStructures(struct Task *task) +// SLOTTASK_FREE +static bool8 SlotTask_FreeDataStructures(struct Task *task) { if (!gPaletteFade.active) { @@ -1618,14 +1756,10 @@ static bool8 SlotAction_FreeDataStructures(struct Task *task) FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Number); FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Pokeball); FREE_AND_SET_NULL(sImageTable_DigitalDisplay_DPad); - if (sImageTable_ReelTimePikachu != NULL) - FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); - if (sImageTable_ReelTimeMachineAntennae != NULL) - FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae); - if (sImageTable_ReelTimeMachine != NULL) - FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); - if (sImageTable_BrokenReelTimeMachine != NULL) - FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); + TRY_FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); + TRY_FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae); + TRY_FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); + TRY_FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); FREE_AND_SET_NULL(sMenuGfx); FREE_AND_SET_NULL(sSelectedPikaPowerTile); FREE_AND_SET_NULL(sReelOverlay_Tilemap); @@ -1640,97 +1774,122 @@ static bool8 SlotAction_FreeDataStructures(struct Task *task) return FALSE; } -static void DrawLuckyFlags(void) +# undef tTimer +# undef tTimer2 + +// Determine the biases for this round. There can be at most two biases, one of +// which would need to be a ReelTime bias. +// +// HOW IT WORKS: +// If the machine is already biased toward 7's, keep this bias. +// +// Otherwise, there are up to three draws. You first draw to see if you'll get +// to draw a Special bias. If so, then you draw for the Special bias (and can +// still potentially miss). +// +// If you didn't get to draw a Special bias, missed a Special bias, or drew a +// ReelTime bias, then you can still try to draw a Regular bias. +static void DrawMachineBias(void) { - u8 attempts; + u8 whichBias; if (sSlotMachine->reelTimeSpinsLeft == 0) { - if (!(sSlotMachine->luckyFlags & (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777))) + if (!(sSlotMachine->machineBias & (BIAS_STRAIGHT_7 | BIAS_MIXED_7))) { - if (IsThisRoundLucky()) + if (ShouldTrySpecialBias()) { - attempts = AttemptsAtLuckyFlags_Top3(); - if (attempts != 3) // if you found a lucky number + whichBias = TrySelectBias_Special(); + if (whichBias != ARRAY_COUNT(sBiasesSpecial)) // A bias was selected { - // attempts == 1: reelTime flag set - sSlotMachine->luckyFlags |= sLuckyFlagSettings_Top3[attempts]; - if (attempts != 1) - { - return; - } + sSlotMachine->machineBias |= sBiasesSpecial[whichBias]; + + // ReelTime was not selected; don't add other biases + if (whichBias != 1) return; } } - // if it's not a lucky round or you got reel time, roll for the lower lucky flags - attempts = AttemptsAtLuckyFlags_NotTop3(); - if (attempts != 5) // if you found a lucky number - { - sSlotMachine->luckyFlags |= sLuckyFlagSettings_NotTop3[attempts]; - } + + whichBias = TrySelectBias_Regular(); + if (whichBias != ARRAY_COUNT(sBiasesRegular)) // A bias was selected + sSlotMachine->machineBias |= sBiasesRegular[whichBias]; } } } -static void SetLuckySpins(void) +// Reset `didNotFailBias` to match `machineBias`. +static void ResetBiasFailure(void) { - sSlotMachine->isLuckySpin = FALSE; - if (sSlotMachine->luckyFlags) - sSlotMachine->isLuckySpin = TRUE; + sSlotMachine->didNotFailBias = FALSE; + if (sSlotMachine->machineBias) + sSlotMachine->didNotFailBias = TRUE; } -static u8 GetBiasTag(u8 luckyFlags) +// See sBiasSymbols for each bias's corresponding symbol. +static u8 GetBiasSymbol(u8 machineBias) { u8 i; for (i = 0; i < 8; i++) { - if (luckyFlags & 1) - return sBiasTags[i]; - luckyFlags >>= 1; + if (machineBias & 1) + return sBiasSymbols[i]; + machineBias >>= 1; } return 0; } -// you have way more luck betting 3 coins than anything lower -static bool8 IsThisRoundLucky(void) +// Decides whether you will be given the opportunity to draw for a Special bias. +// Depends on your bet and the machine you're using. +// +// The probability of getting to draw a Special is miniscule if you don't bet 3 +// coins: barely 1% even on the luckiest machine. +// +// The odds increase to roughly ~5% if you bet 3 coins. +static bool8 ShouldTrySpecialBias(void) { u8 rval = Random(); - if (sLuckyRoundProbabilities[sSlotMachine->machineId][sSlotMachine->bet - 1] > rval) + if (sSpecialDrawOdds[sSlotMachine->machineId][sSlotMachine->bet - 1] > rval) return TRUE; return FALSE; } -static u8 AttemptsAtLuckyFlags_Top3(void) +// Draws for a Special bias. Note that even when you're given the opportunity to +// draw a Special bias, you can still miss. +// +// On the luckiest machine, there's a 61% chance of drawing no Special bias. On +// the unluckiest, a 73% chance. +static u8 TrySelectBias_Special(void) { - s16 count; + s16 whichBias; - for (count = 0; count < 3; count++) + for (whichBias = 0; whichBias < (int)ARRAY_COUNT(sBiasesSpecial); whichBias++) { s16 rval = Random() & 0xff; - s16 value = sLuckyFlagProbabilities_Top3[count][sSlotMachine->machineId]; + s16 value = sBiasProbabilities_Special[whichBias][sSlotMachine->machineId]; if (value > rval) break; } - return count; + return whichBias; } -static u8 AttemptsAtLuckyFlags_NotTop3(void) +static u8 TrySelectBias_Regular(void) { - s16 count; + s16 whichBias; - for (count = 0; count < 5; count++) + for (whichBias = 0; whichBias < (int)ARRAY_COUNT(sBiasesRegular); whichBias++) { - s16 rval = Random() & 0xff; // random byte - s16 value = sLuckyFlagProbabilities_NotTop3[count][sSlotMachine->machineId]; - // make first attempt easier if it's a lucky game - if (count == 0 && sSlotMachine->luckyGame == TRUE) + s16 rval = Random() & 0xff; + s16 value = sBiasProbabilities_Regular[whichBias][sSlotMachine->machineId]; + + // Boost odds of BIAS_POWER if it's a lucky game. + if (whichBias == 0 && sSlotMachine->luckyGame == TRUE) { value += 10; if (value > 0x100) value = 0x100; } - // make last attempt harder if it's a lucky game - else if (count == 4 && sSlotMachine->luckyGame == TRUE) + // Reduce odds of BIAS_REPLAY if it's a lucky game + else if (whichBias == 4 && sSlotMachine->luckyGame == TRUE) { value -= 10; if (value < 0) @@ -1739,45 +1898,60 @@ static u8 AttemptsAtLuckyFlags_NotTop3(void) if (value > rval) break; } - return count; + return whichBias; } -static u8 GetReelTimeProbability(u8 reelTimeDraw) +// Return the probability of drawing the given number of ReelTime spins. +// +// This depends on whether it is a lucky game and the number of Power bolts you +// have collected. +static u8 GetReelTimeSpinProbability(u8 spins) { if (sSlotMachine->luckyGame == FALSE) - return sReeltimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower]; + return sReelTimeProbabilities_NormalGame[spins][sSlotMachine->pikaPowerBolts]; else - return sReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower]; + return sReelTimeProbabilities_LuckyGame[spins][sSlotMachine->pikaPowerBolts]; } -static void GetReeltimeDraw(void) +// The way this is computed skews the odds much more toward drawing a 0 than +// intended. It initially checks whether you draw a 0 (using the intended +// probability). It then tries to draw positive values, but if these draws all +// miss, you'll still draw a 0. +// +// As a result, even when the power gauge is maxed out, you still have a ~30% +// chance of drawing 0 spins. See sReelTimeProbabilities for more details. +// +// Drawing a random number via a cumulative pdf would have prevented this. +static void GetReelTimeDraw(void) { u8 rval; - s16 reelTimeDraw; + s16 spins; sSlotMachine->reelTimeDraw = 0; rval = Random(); - if (rval < GetReelTimeProbability(0)) + if (rval < GetReelTimeSpinProbability(0)) return; - for (reelTimeDraw = 5; reelTimeDraw > 0; reelTimeDraw--) + for (spins = 5; spins > 0; spins--) { rval = Random(); - if (rval < GetReelTimeProbability(reelTimeDraw)) + if (rval < GetReelTimeSpinProbability(spins)) break; } - sSlotMachine->reelTimeDraw = reelTimeDraw; + sSlotMachine->reelTimeDraw = spins; } -static bool8 ShouldReelTimeMachineExplode(u16 i) +// Returns true if the ReelTime machine should explode. Each time we check, +// the odds of explosion increase. +static bool8 ShouldReelTimeMachineExplode(u16 check) { u16 rval = Random() & 0xff; - if (rval < sReelTimeExplodeProbability[i]) + if (rval < sReelTimeExplodeProbability[check]) return TRUE; else return FALSE; } -static u16 SlowReelSpeed(void) +static u16 ReelTimeSpeed(void) { u8 i = 0; u8 rval; @@ -1790,20 +1964,23 @@ static u16 SlowReelSpeed(void) i = 2; else if (sSlotMachine->netCoinLoss >= 150) i = 1; + rval = Random() % 100; - value = sReelIncrementTable[i][0]; + value = sReelTimeSpeed_Probabilities[i][0]; if (rval < value) - return 4; + return REEL_HALF_SPEED; + rval = Random() % 100; - value = sReelIncrementTable[i][1] + sReelTimeBonusIncrementTable[sSlotMachine->reelTimeSpinsUsed]; + value = sReelTimeSpeed_Probabilities[i][1] + sQuarterSpeed_ProbabilityBoost[sSlotMachine->reelTimeSpinsUsed]; if (rval < value) - return 2; - return 8; + return REEL_QUARTER_SPEED; + + return REEL_NORMAL_SPEED; } static void CheckMatch(void) { - sSlotMachine->matchedSymbols = 0; + sSlotMachine->matches = 0; CheckMatch_CenterRow(); if (sSlotMachine->bet > 1) CheckMatch_TopAndBottom(); @@ -1813,140 +1990,146 @@ static void CheckMatch(void) static void CheckMatch_CenterRow(void) { - u8 c1, c2, c3, match; + u8 sym1, sym2, sym3, match; - c1 = GetTagAtRest(LEFT_REEL, 2); - c2 = GetTagAtRest(MIDDLE_REEL, 2); - c3 = GetTagAtRest(RIGHT_REEL, 2); - match = GetMatchFromSymbols(c1, c2, c3); - if (match != MATCHED_NONE) + sym1 = GetSymbolAtRest(LEFT_REEL, 2); + sym2 = GetSymbolAtRest(MIDDLE_REEL, 2); + sym3 = GetSymbolAtRest(RIGHT_REEL, 2); + match = GetMatchFromSymbols(sym1, sym2, sym3); + if (match != MATCH_NONE) { sSlotMachine->payout += sSlotPayouts[match]; - sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + sSlotMachine->matches |= sSlotMatchFlags[match]; FlashMatchLine(MATCH_MIDDLE_ROW); } } static void CheckMatch_TopAndBottom(void) { - u8 c1, c2, c3, match; + u8 sym1, sym2, sym3, match; - c1 = GetTagAtRest(LEFT_REEL, 1); - c2 = GetTagAtRest(MIDDLE_REEL, 1); - c3 = GetTagAtRest(RIGHT_REEL, 1); - match = GetMatchFromSymbols(c1, c2, c3); - if (match != MATCHED_NONE) + sym1 = GetSymbolAtRest(LEFT_REEL, 1); + sym2 = GetSymbolAtRest(MIDDLE_REEL, 1); + sym3 = GetSymbolAtRest(RIGHT_REEL, 1); + match = GetMatchFromSymbols(sym1, sym2, sym3); + if (match != MATCH_NONE) { - if (match == MATCHED_1CHERRY) - match = MATCHED_2CHERRY; + if (match == MATCH_CHERRY) + match = MATCH_TOPBOT_CHERRY; sSlotMachine->payout += sSlotPayouts[match]; - sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + sSlotMachine->matches |= sSlotMatchFlags[match]; FlashMatchLine(MATCH_TOP_ROW); } - c1 = GetTagAtRest(LEFT_REEL, 3); - c2 = GetTagAtRest(MIDDLE_REEL, 3); - c3 = GetTagAtRest(RIGHT_REEL, 3); - match = GetMatchFromSymbols(c1, c2, c3); - if (match != MATCHED_NONE) + sym1 = GetSymbolAtRest(LEFT_REEL, 3); + sym2 = GetSymbolAtRest(MIDDLE_REEL, 3); + sym3 = GetSymbolAtRest(RIGHT_REEL, 3); + match = GetMatchFromSymbols(sym1, sym2, sym3); + if (match != MATCH_NONE) { - if (match == MATCHED_1CHERRY) - match = MATCHED_2CHERRY; + if (match == MATCH_CHERRY) + match = MATCH_TOPBOT_CHERRY; sSlotMachine->payout += sSlotPayouts[match]; - sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + sSlotMachine->matches |= sSlotMatchFlags[match]; FlashMatchLine(MATCH_BOTTOM_ROW); } } static void CheckMatch_Diagonals(void) { - u8 c1, c2, c3, match; + u8 sym1, sym2, sym3, match; - c1 = GetTagAtRest(LEFT_REEL, 1); - c2 = GetTagAtRest(MIDDLE_REEL, 2); - c3 = GetTagAtRest(RIGHT_REEL, 3); - match = GetMatchFromSymbols(c1, c2, c3); - if (match != MATCHED_NONE) + sym1 = GetSymbolAtRest(LEFT_REEL, 1); + sym2 = GetSymbolAtRest(MIDDLE_REEL, 2); + sym3 = GetSymbolAtRest(RIGHT_REEL, 3); + match = GetMatchFromSymbols(sym1, sym2, sym3); + if (match != MATCH_NONE) { - if (match != MATCHED_1CHERRY) + // Don't add payout for cherry, since it's already counted in + // CheckMatch_TopAndBottom(). + if (match != MATCH_CHERRY) { sSlotMachine->payout += sSlotPayouts[match]; - sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + sSlotMachine->matches |= sSlotMatchFlags[match]; } FlashMatchLine(MATCH_NWSE_DIAG); } - c1 = GetTagAtRest(LEFT_REEL, 3); - c2 = GetTagAtRest(MIDDLE_REEL, 2); - c3 = GetTagAtRest(RIGHT_REEL, 1); - match = GetMatchFromSymbols(c1, c2, c3); - if (match != MATCHED_NONE) + sym1 = GetSymbolAtRest(LEFT_REEL, 3); + sym2 = GetSymbolAtRest(MIDDLE_REEL, 2); + sym3 = GetSymbolAtRest(RIGHT_REEL, 1); + match = GetMatchFromSymbols(sym1, sym2, sym3); + if (match != MATCH_NONE) { - if (match != MATCHED_1CHERRY) + // Don't add payout for cherry, since it's already counted in + // CheckMatch_TopAndBottom(). + if (match != MATCH_CHERRY) { sSlotMachine->payout += sSlotPayouts[match]; - sSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + sSlotMachine->matches |= sSlotMatchFlags[match]; } FlashMatchLine(MATCH_NESW_DIAG); } } -static u8 GetMatchFromSymbols(u8 c1, u8 c2, u8 c3) +static u8 GetMatchFromSymbols(u8 sym1, u8 sym2, u8 sym3) { - if (c1 == c2 && c1 == c3) - return sSymToMatch[c1]; - if (c1 == GFXTAG_7_RED && c2 == GFXTAG_7_RED && c3 == GFXTAG_7_BLUE) - return MATCHED_777_MIXED; - if (c1 == GFXTAG_7_BLUE && c2 == GFXTAG_7_BLUE && c3 == GFXTAG_7_RED) - return MATCHED_777_MIXED; - if (c1 == GFXTAG_CHERRY) - return MATCHED_1CHERRY; - return MATCHED_NONE; + if (sym1 == sym2 && sym1 == sym3) + return sSymbolToMatch[sym1]; + if (sym1 == SYMBOL_7_RED && sym2 == SYMBOL_7_RED && sym3 == SYMBOL_7_BLUE) + return MATCH_MIXED_7; + if (sym1 == SYMBOL_7_BLUE && sym2 == SYMBOL_7_BLUE && sym3 == SYMBOL_7_RED) + return MATCH_MIXED_7; + if (sym1 == SYMBOL_CHERRY) + return MATCH_CHERRY; + return MATCH_NONE; } static void AwardPayout(void) { - RunAwardPayoutActions(CreateTask(RunAwardPayoutActions, 4)); + Task_Payout(CreateTask(Task_Payout, 4)); } -static bool8 IsFinalTask_RunAwardPayoutActions(void) +static bool8 IsFinalTask_Task_Payout(void) { - if (FindTaskIdByFunc(RunAwardPayoutActions) == TAIL_SENTINEL) + if (FindTaskIdByFunc(Task_Payout) == TAIL_SENTINEL) return TRUE; else return FALSE; } -static void RunAwardPayoutActions(u8 taskId) +static void Task_Payout(u8 taskId) { - while (sAwardPayoutActions[gTasks[taskId].data[0]](&gTasks[taskId])) + while (sPayoutTasks[gTasks[taskId].data[0]](&gTasks[taskId])) ; } -static bool8 AwardPayoutAction0(struct Task *task) +#define tState data[0] +#define tTimer data[1] + +static bool8 PayoutTask_Init(struct Task *task) { if (IsMatchLineDoneFlashingBeforePayout()) { - task->data[0]++; + task->tState++; // PAYOUT_TASK_GIVE_PAYOUT if (sSlotMachine->payout == 0) { - task->data[0] = 2; + task->tState = PAYOUT_TASK_FREE; return TRUE; } } return FALSE; } -// task->data[1]: timer -static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task) +static bool8 PayoutTask_GivePayout(struct Task *task) { - if (!task->data[1]--) + if (!task->tTimer--) { if (IsFanfareTaskInactive()) PlaySE(SE_PIN); sSlotMachine->payout--; if (sSlotMachine->coins < MAX_COINS) sSlotMachine->coins++; - task->data[1] = 8; + task->tTimer = 8; if (JOY_HELD(A_BUTTON)) - task->data[1] = 4; + task->tTimer = 4; } if (IsFanfareTaskInactive() && JOY_NEW(START_BUTTON)) { @@ -1957,19 +2140,22 @@ static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task) sSlotMachine->payout = 0; } if (sSlotMachine->payout == 0) - task->data[0]++; + task->tState++; // PAYOUT_TASK_FREE return FALSE; } -static bool8 AwardPayoutAction_FreeTask(struct Task *task) +static bool8 PayoutTask_Free(struct Task *task) { if (TryStopMatchLinesFlashing()) - DestroyTask(FindTaskIdByFunc(RunAwardPayoutActions)); + DestroyTask(FindTaskIdByFunc(Task_Payout)); return FALSE; } -// Get the tag at position `offset` below the top of the reel's tape. Note that -// if `offset` is negative, it wraps around to the bottom of the tape. +#undef tState +#undef tTimer + +// Get the symbol at position `offset` below the top of the reel's tape. Note +// that if `offset` is negative, it wraps around to the bottom of the tape. // .-----------------. // | [ ] | [ ] | [ ] | <- offset = 0 // /-----|-----|-----\ @@ -1980,40 +2166,42 @@ static bool8 AwardPayoutAction_FreeTask(struct Task *task) // | ... | ... | ... | // | [ ] | [ ] | [ ] | <- offset = 20 // .-----------------. -static u8 GetTagAtRest(u8 reel, s16 offset) +static u8 GetSymbolAtRest(u8 reel, s16 offset) { s16 pos = (sSlotMachine->reelPositions[reel] + offset) % SYMBOLS_PER_REEL; if (pos < 0) pos += SYMBOLS_PER_REEL; - return sReelSymbolTileTags[reel][pos]; + return sReelSymbols[reel][pos]; } -// Calculates GetTagAtRest as if the reel were snapped downwards into place. -static u8 GetTag(u8 reel, s16 offset) +// Calculates GetSymbolAtRest as if the reel were snapped downwards into place. +static u8 GetSymbol(u8 reel, s16 offset) { s16 inc = 0; s16 pixelOffset = sSlotMachine->reelPixelOffsets[reel] % REEL_SYMBOL_HEIGHT; if (pixelOffset != 0) inc = -1; - return GetTagAtRest(reel, offset + inc); + return GetSymbolAtRest(reel, offset + inc); } -static u8 GetNearbyReelTimeTag(s16 n) +static u8 GetReelTimeSymbol(s16 offset) { - s16 newPosition = (sSlotMachine->reeltimePosition + n) % 6; + s16 newPosition = (sSlotMachine->reeltimePosition + offset) % REELTIME_SYMBOLS; if (newPosition < 0) - newPosition += 6; - return sReelTimeTags[newPosition]; + newPosition += REELTIME_SYMBOLS; + return sReelTimeSymbols[newPosition]; } static void AdvanceSlotReel(u8 reelIndex, s16 value) { sSlotMachine->reelPixelOffsets[reelIndex] += value; - sSlotMachine->reelPixelOffsets[reelIndex] %= 504; + sSlotMachine->reelPixelOffsets[reelIndex] %= REEL_HEIGHT; sSlotMachine->reelPositions[reelIndex] = SYMBOLS_PER_REEL - sSlotMachine->reelPixelOffsets[reelIndex] / REEL_SYMBOL_HEIGHT; } -s16 AdvanceSlotReelToNextTag(u8 reelIndex, s16 value) +// Advances the reel no further than the next symbol. Returns the remaining +// pixels until the next symbol. +s16 AdvanceSlotReelToNextSymbol(u8 reelIndex, s16 value) { s16 offset = sSlotMachine->reelPixelOffsets[reelIndex] % REEL_SYMBOL_HEIGHT; if (offset != 0) @@ -2029,48 +2217,53 @@ s16 AdvanceSlotReelToNextTag(u8 reelIndex, s16 value) static void AdvanceReeltimeReel(s16 value) { sSlotMachine->reeltimePixelOffset += value; - sSlotMachine->reeltimePixelOffset %= 120; - sSlotMachine->reeltimePosition = 6 - sSlotMachine->reeltimePixelOffset / 20; + sSlotMachine->reeltimePixelOffset %= REELTIME_REEL_HEIGHT; + sSlotMachine->reeltimePosition = REELTIME_SYMBOLS - sSlotMachine->reeltimePixelOffset / REELTIME_SYMBOL_HEIGHT; } -s16 AdvanceReeltimeReelToNextTag(s16 value) +// Advances the reel no further than the next symbol. Returns the remaining +// pixels until the next symbol. +s16 AdvanceReeltimeReelToNextSymbol(s16 value) { - s16 offset = sSlotMachine->reeltimePixelOffset % 20; + s16 offset = sSlotMachine->reeltimePixelOffset % REELTIME_SYMBOL_HEIGHT; if (offset != 0) { if (offset < value) value = offset; AdvanceReeltimeReel(value); - offset = sSlotMachine->reeltimePixelOffset % 20; + offset = sSlotMachine->reeltimePixelOffset % REELTIME_SYMBOL_HEIGHT; } return offset; } -#define tState data[0] -#define tMoving data[14] -#define tReelId data[15] +#define tState data[0] +#define tExtraTurns data[1] +#define tShockMagnitude data[1] +#define tTimer data[2] +#define tMoving data[14] +#define tReelId data[15] -static void CreateSlotReelTasks(void) +static void CreateReelTasks(void) { u8 i; for (i = 0; i < NUM_REELS; i++) { - u8 taskId = CreateTask(Task_RunSlotReelActions, 2); + u8 taskId = CreateTask(Task_Reel, 2); gTasks[taskId].tReelId = i; sSlotMachine->slotReelTasks[i] = taskId; - Task_RunSlotReelActions(taskId); + Task_Reel(taskId); } } static void SpinSlotReel(u8 reelIndex) { - gTasks[sSlotMachine->slotReelTasks[reelIndex]].tState = REEL_ACTION_SPIN; + gTasks[sSlotMachine->slotReelTasks[reelIndex]].tState = REEL_TASK_SPIN; gTasks[sSlotMachine->slotReelTasks[reelIndex]].tMoving = TRUE; } static void StopSlotReel(u8 reelIndex) { - gTasks[sSlotMachine->slotReelTasks[reelIndex]].tState = REEL_ACTION_STOP; + gTasks[sSlotMachine->slotReelTasks[reelIndex]].tState = REEL_TASK_DECIDE_STOP; } static bool8 IsSlotReelMoving(u8 reelIndex) @@ -2078,43 +2271,52 @@ static bool8 IsSlotReelMoving(u8 reelIndex) return gTasks[sSlotMachine->slotReelTasks[reelIndex]].tMoving; } -static void Task_RunSlotReelActions(u8 taskId) +static void Task_Reel(u8 taskId) { - while (sSlotReelActions[gTasks[taskId].tState](&gTasks[taskId])) + while (sReelTasks[gTasks[taskId].tState](&gTasks[taskId])) ; } -// task->data[1] reel turns -static bool8 SlotReelAction_StayStill(struct Task *task) +static bool8 ReelTask_StayStill(struct Task *task) { return FALSE; } -static bool8 SlotReelAction_Spin(struct Task *task) +static bool8 ReelTask_Spin(struct Task *task) { - AdvanceSlotReel(task->tReelId, sSlotMachine->reelIncrement); + AdvanceSlotReel(task->tReelId, sSlotMachine->reelSpeed); return FALSE; } -// As in previous generations, the slot machine often doesn't stop exactly when you press stop -static bool8 SlotReelAction_DecideWhereToStop(struct Task *task) +// In ReelTime, the reel stops immediately. Otherwise, the game may manipulate +// the results by stopping after at most 4 extra turns. The exact behavior +// differs depending on whether the machine has a bias. +// +// If the machine has a bias, it will try to match the bias symbol in each reel. +// +// Otherwise, if the machine doesn't have a bias or it could not line up the +// bias symbol in any of the previous reels, it will perform the NoBias stopping +// routine, which manipulates the outcome so the player loses. +static bool8 ReelTask_DecideStop(struct Task *task) { - task->tState++; - // initialize data for that reel --> these will be changed if sBiasTags can be lined up + task->tState++; // REEL_TASK_STOP_MOVE sSlotMachine->winnerRows[task->tReelId] = 0; sSlotMachine->reelExtraTurns[task->tReelId] = 0; - if (sSlotMachine->reelTimeSpinsLeft == 0 && (sSlotMachine->luckyFlags == 0 || !sSlotMachine->isLuckySpin || !sDecideReelTurns_BiasTag[task->tReelId]())) + if (sSlotMachine->reelTimeSpinsLeft == 0) { - sSlotMachine->isLuckySpin = FALSE; - sDecideReelTurns_NoBiasTag[task->tReelId](); + if (sSlotMachine->machineBias == 0 || !sSlotMachine->didNotFailBias || !sDecideStop_Bias[task->tReelId]()) + { + sSlotMachine->didNotFailBias = FALSE; + sDecideStop_NoBias[task->tReelId](); + } } - task->data[1] = sSlotMachine->reelExtraTurns[task->tReelId]; + task->tExtraTurns = sSlotMachine->reelExtraTurns[task->tReelId]; return TRUE; } -// go to next tag and then do any additional turns -static bool8 SlotReelAction_MoveToStop(struct Task *task) +// Go to the next symbol, then add any extra turns. +static bool8 ReelTask_MoveToStop(struct Task *task) { u16 reelStopShocks[ARRAY_COUNT(sReelStopShocks)]; s16 reelPixelPos; @@ -2122,112 +2324,147 @@ static bool8 SlotReelAction_MoveToStop(struct Task *task) memcpy(reelStopShocks, sReelStopShocks, sizeof(sReelStopShocks)); reelPixelPos = sSlotMachine->reelPixelOffsets[task->tReelId] % REEL_SYMBOL_HEIGHT; if (reelPixelPos != 0) - reelPixelPos = AdvanceSlotReelToNextTag(task->tReelId, sSlotMachine->reelIncrement); + reelPixelPos = AdvanceSlotReelToNextSymbol(task->tReelId, sSlotMachine->reelSpeed); else if (sSlotMachine->reelExtraTurns[task->tReelId]) { sSlotMachine->reelExtraTurns[task->tReelId]--; - AdvanceSlotReel(task->tReelId, sSlotMachine->reelIncrement); + AdvanceSlotReel(task->tReelId, sSlotMachine->reelSpeed); reelPixelPos = sSlotMachine->reelPixelOffsets[task->tReelId] % REEL_SYMBOL_HEIGHT; } + if (reelPixelPos == 0 && sSlotMachine->reelExtraTurns[task->tReelId] == 0) { - task->tState++; - task->data[1] = reelStopShocks[task->data[1]]; - task->data[2] = 0; + task->tState++; // REEL_TASK_STOP_SHAKE + task->tShockMagnitude = reelStopShocks[task->tExtraTurns]; + task->tTimer = 0; } return FALSE; } -// make selected tag oscillate before it becomes still -static bool8 SlotReelAction_OscillatingStop(struct Task *task) +// The reel shakes a little at the selected symbol before settling. +static bool8 ReelTask_ShakingStop(struct Task *task) { - sSlotMachine->reelPixelOffsetsWhileStopping[task->tReelId] = task->data[1]; - task->data[1] = -task->data[1]; - task->data[2]++; - if ((task->data[2] & 0x3) == 0) - task->data[1] >>= 1; - if (task->data[1] == 0) + sSlotMachine->reelShockOffsets[task->tReelId] = task->tShockMagnitude; + task->tShockMagnitude = -task->tShockMagnitude; + task->tTimer++; + if ((task->tTimer & 0x3) == 0) + task->tShockMagnitude >>= 1; + if (task->tShockMagnitude == 0) { task->tState = 0; task->tMoving = FALSE; - sSlotMachine->reelPixelOffsetsWhileStopping[task->tReelId] = 0; + sSlotMachine->reelShockOffsets[task->tReelId] = 0; } return FALSE; } #undef tState +#undef tExtraTurns +#undef tShockMagnitude +#undef tTimer #undef tMoving #undef tReelId -static bool8 DecideReelTurns_BiasTag_Reel1(void) +// We pass along two symbols to bias toward. If the machine is biased toward +// 7's, we pass both the 7 symbols. Otherwise, we just pass the bias symbol +// twice. +static bool8 DecideStop_Bias_Reel1(void) { - u8 tag2 = GetBiasTag(sSlotMachine->luckyFlags); - u8 tag1 = tag2; - if (sSlotMachine->luckyFlags & (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777)) + u8 sym2 = GetBiasSymbol(sSlotMachine->machineBias); + u8 sym1 = sym2; + if (sSlotMachine->machineBias & (BIAS_STRAIGHT_7 | BIAS_MIXED_7)) { - tag1 = GFXTAG_7_RED; - tag2 = GFXTAG_7_BLUE; + sym1 = SYMBOL_7_RED; + sym2 = SYMBOL_7_BLUE; } - return sDecideReelTurns_BiasTag_Reel1_Bets[sSlotMachine->bet - 1](tag1, tag2); + return sDecideStop_Bias_Reel1_Bets[sSlotMachine->bet - 1](sym1, sym2); } -static bool8 AreTagsAtPosition_Reel1(s16 pos, u8 tag1, u8 tag2) +// The biasSymbol for subsequent reels is determined based on which of the bias +// symbols can be found in reel 1. This really only matters when the machine is +// biased toward 7's. It will try to match a 7 of the same color as reel 1. +static bool8 EitherSymbolAtPos_Reel1(s16 pos, u8 sym1, u8 sym2) { - u8 tag = GetTag(LEFT_REEL, pos); - if (tag == tag1 || tag == tag2) + u8 sym = GetSymbol(LEFT_REEL, pos); + if (sym == sym1 || sym == sym2) { - sSlotMachine->biasTag = tag; + sSlotMachine->biasSymbol = sym; return TRUE; } return FALSE; } -static bool8 AreCherriesOnScreen_Reel1(s16 offsetFromCenter) +// Returns true if there are cherries on screen in reel 1 after the given number +// of turns. +static bool8 AreCherriesOnScreen_Reel1(s16 turns) { - if (GetTag(LEFT_REEL, 1 - offsetFromCenter) == GFXTAG_CHERRY - || GetTag(LEFT_REEL, 2 - offsetFromCenter) == GFXTAG_CHERRY - || GetTag(LEFT_REEL, 3 - offsetFromCenter) == GFXTAG_CHERRY) + if (GetSymbol(LEFT_REEL, 1 - turns) == SYMBOL_CHERRY + || GetSymbol(LEFT_REEL, 2 - turns) == SYMBOL_CHERRY + || GetSymbol(LEFT_REEL, 3 - turns) == SYMBOL_CHERRY) return TRUE; else return FALSE; } -static bool8 IsBiasTowardsCherryOr7s(void) +static bool8 BiasedTowardCherryOr7s(void) { - if (sSlotMachine->luckyFlags & (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777 | LUCKY_BIAS_CHERRY)) + if (sSlotMachine->machineBias & (BIAS_STRAIGHT_7 | BIAS_MIXED_7 | BIAS_CHERRY)) return TRUE; else return FALSE; } -static bool8 DecideReelTurns_BiasTag_Reel1_Bet1(u8 tag1, u8 tag2) +// If a bias symbol appears in the center of reel 1 within the next 4 turns, +// stop there. That symbol becomes the biasSymbol for the subsequent reels. +static bool8 DecideStop_Bias_Reel1_Bet1(u8 sym1, u8 sym2) { s16 i; - for (i = 0; i < 5; i++) + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - // if a lucky tag appears in the center row within 4 turns - if (AreTagsAtPosition_Reel1(2 - i, tag1, tag2)) + if (EitherSymbolAtPos_Reel1(2 - i, sym1, sym2)) { sSlotMachine->winnerRows[LEFT_REEL] = 2; - sSlotMachine->reelExtraTurns[0] = i; + sSlotMachine->reelExtraTurns[LEFT_REEL] = i; return TRUE; } } return FALSE; } -static bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8 tag1, u8 tag2) +// There is slightly different behavior depending on the machine's bias. +// +// Bias toward cherry or 7s: +// - Check if a cherry or 7 is currently on screen. If so, stop immediately. +// - Roll up to 4 extra turns to see if a cherry or 7 enters the screen: +// - If it enters after 1 turn, stop the reel when it gets the bottom row. +// - Otherwise, if it enters before the 4th turn, stop the reel when it gets +// to the middle row. +// - If it enters on the 4th turn, stop here. It will be in the top row. +// +// Other bias: +// - This is very similar, except the game is checking for the bias symbol +// rather than cherries / 7s. +// +// However, the game adds an additional constraint: it will not stop if there +// will be any cherries on screen. Presumably, this ensures that you will not +// get any matches if you fail to line up the bias symbol in the remaining +// reels. +// +// This is programmed in such a way that it excludes more options than +// necessary. If there are cherries in the two positions below the bias symbol, +// it will skip over this option, even if those cherries would not have ended +// up on screen. +static bool8 DecideStop_Bias_Reel1_Bet2or3(u8 sym1, u8 sym2) { s16 i; - bool8 biased = IsBiasTowardsCherryOr7s(); - // if lucky numbers or no cherries are currently on screen in reel 1... - if (biased || !AreCherriesOnScreen_Reel1(0)) + bool8 cherry7Bias = BiasedTowardCherryOr7s(); + if (cherry7Bias || !AreCherriesOnScreen_Reel1(0)) { - for (i = 1; i < 4; i++) + // Check the current screen + for (i = 1; i <= 3; i++) { - // if a bias tag is currently on the screen - if (AreTagsAtPosition_Reel1(i, tag1, tag2)) + if (EitherSymbolAtPos_Reel1(i, sym1, sym2)) { sSlotMachine->winnerRows[0] = i; sSlotMachine->reelExtraTurns[0] = 0; @@ -2235,30 +2472,27 @@ static bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8 tag1, u8 tag2) } } } - for (i = 1; i < 5; i++) + + // Check the next 4 turns + for (i = 1; i <= MAX_EXTRA_TURNS; i++) { - bool8 biasedCopy = biased; // redundant - // if biased or if in the next 4 turns there is a screen with no cherries... - if (biasedCopy || !AreCherriesOnScreen_Reel1(i)) + bool8 cherry7BiasCopy = cherry7Bias; // redundant + if (cherry7BiasCopy || !AreCherriesOnScreen_Reel1(i)) { - //...and if a bias tag is in top row of that screen - if (AreTagsAtPosition_Reel1(1 - i, tag1, tag2)) + if (EitherSymbolAtPos_Reel1(1 - i, sym1, sym2)) { - //...and if it only took 1 turn and the lucky tag could also be the bottom row of a screen with no cherries... - if (i == 1 && (biasedCopy || !AreCherriesOnScreen_Reel1(3))) + if (i == 1 && (cherry7BiasCopy || !AreCherriesOnScreen_Reel1(3))) { sSlotMachine->winnerRows[0] = 3; sSlotMachine->reelExtraTurns[0] = 3; return TRUE; } - //...or if it isn't the last turn and the lucky tag could be in the center row of a screen with no cherries... - if (i < 4 && (biasedCopy || !AreCherriesOnScreen_Reel1(i + 1))) + if (i <= 3 && (cherry7BiasCopy || !AreCherriesOnScreen_Reel1(i + 1))) { sSlotMachine->winnerRows[0] = 2; sSlotMachine->reelExtraTurns[0] = i + 1; return TRUE; } - //...else sSlotMachine->winnerRows[0] = 1; sSlotMachine->reelExtraTurns[0] = i; return TRUE; @@ -2268,22 +2502,23 @@ static bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8 tag1, u8 tag2) return FALSE; } -static bool8 DecideReelTurns_BiasTag_Reel2(void) +static bool8 DecideStop_Bias_Reel2(void) { - return sDecideReelTurns_BiasTag_Reel2_Bets[sSlotMachine->bet - 1](); + return sDecideStop_Bias_Reel2_Bets[sSlotMachine->bet - 1](); } -static bool8 DecideReelTurns_BiasTag_Reel2_Bet1or2(void) +// Turn at most 4 extra turns to try to line up the bias symbol in the same row +// as reel 1. +static bool8 DecideStop_Bias_Reel2_Bet1or2(void) { s16 i; - s16 biasTagLocation_Reel1 = sSlotMachine->winnerRows[0]; + s16 reel1BiasRow = sSlotMachine->winnerRows[0]; - for (i = 0; i < 5; i++) + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - // if biasTag appears in the same row within 4 turns - if (GetTag(MIDDLE_REEL, biasTagLocation_Reel1 - i) == sSlotMachine->biasTag) + if (GetSymbol(MIDDLE_REEL, reel1BiasRow - i) == sSlotMachine->biasSymbol) { - sSlotMachine->winnerRows[1] = biasTagLocation_Reel1; + sSlotMachine->winnerRows[1] = reel1BiasRow; sSlotMachine->reelExtraTurns[1] = i; return TRUE; } @@ -2291,19 +2526,55 @@ static bool8 DecideReelTurns_BiasTag_Reel2_Bet1or2(void) return FALSE; } -static bool8 DecideReelTurns_BiasTag_Reel2_Bet3(void) +// Checks whether it can match the bias symbol diagonally, and sometimes skews +// toward this type of match rather than a match straight across. +// +// The behavior is different depending on where the bias symbol landed in +// reel 1: +// +// Landed in middle row: +// A diagonal match is impossible. Just try to match the bias symbol in the +// middle row of reel 2 within 4 turns. +// +// Landed in top/bottom row: +// - If it would take 2 or 3 turns to get the bias symbol into the same row as +// reel 1, force a diagonal match by stopping it in the middle row instead. +// - Check if the bias symbol is already in the same row as reel 1, or if it +// takes 1 or 4 turns to get it there. If so, stop when it reaches that row. +// - Otherwise, check if the bias symbol is already in the middle row of +// reel 2. If so, stop here. +// +// So in how many more cases would betting 3 coins let you win compared to +// betting 2? +// Not many. Most of the time, the game would have matched the symbol in the +// same row as reel 1 if you had bet 2 coins. Betting 3 effectively adds +// coverage for only two additional cases: +// - Bias symbol is in top row of reel 1 and bias symbol is currently in +// middle row of reel 2. +// - Bias symbol is in bottom row of reel 1 and bias symbol could get to the +// middle row of reel 2 in 4 turns. +// +// Assuming this is the implementation Game Freak intended, the game effectively +// turns straight matches into diagonal matches with 2/5 probability. +// Presumably, this makes the player feel fortunate that they bet 3 coins rather +// than 2, even though most times the game would have still forced a match with +// only 2 coins. +static bool8 DecideStop_Bias_Reel2_Bet3(void) { s16 i; - // if biasTag appears in the same row within 4 turns... - if (DecideReelTurns_BiasTag_Reel2_Bet1or2()) + // If you can line up the bias symbol in the same row as reel 1 within 4 + // turns + if (DecideStop_Bias_Reel2_Bet1or2()) { - //...and if the biasTag is not in middle row of reel 1 and if biasTag appears in middle row of reel 2 in 2 or 3 turns... + // If bias symbol is not in the middle row of reel 1 and it takes either + // 2 or 3 turns to get it in the same row for reel 2 if (sSlotMachine->winnerRows[0] != 2 && sSlotMachine->reelExtraTurns[1] > 1 && sSlotMachine->reelExtraTurns[1] != 4) { - for (i = 0; i < 5; i++) + // Try turning this into a diagonal match by lining up the bias + // symbol in the middle row of reel 2 within 4 turns. + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - //...and if the bias tag will appear in the middle row within 4 turns - if (GetTag(MIDDLE_REEL, 2 - i) == sSlotMachine->biasTag) + if (GetSymbol(MIDDLE_REEL, 2 - i) == sSlotMachine->biasSymbol) { sSlotMachine->winnerRows[1] = 2; sSlotMachine->reelExtraTurns[1] = i; @@ -2313,13 +2584,16 @@ static bool8 DecideReelTurns_BiasTag_Reel2_Bet3(void) } return TRUE; } - // else if the biasTag is not in middle row of reel 1... + + // If you can't line up the bias symbol in the same row in 4 turns, and the + // bias symbol is not in the middle row of reel 1 if (sSlotMachine->winnerRows[0] != 2) { - for (i = 0; i < 5; i++) + // Try to match the bias symbol in middle row of reel 2 within 4 turns. + // Adds coverage for the two cases mentioned above. + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - //...and if the biasTag will appear in the center row of reel 2 within 4 turns - if (GetTag(MIDDLE_REEL, 2 - i) == sSlotMachine->biasTag) + if (GetSymbol(MIDDLE_REEL, 2 - i) == sSlotMachine->biasSymbol) { sSlotMachine->winnerRows[1] = 2; sSlotMachine->reelExtraTurns[1] = i; @@ -2330,31 +2604,34 @@ static bool8 DecideReelTurns_BiasTag_Reel2_Bet3(void) return FALSE; } -static bool8 DecideReelTurns_BiasTag_Reel3(void) +// If the machine is biased toward mixed 7's, swap the color of the bias symbol +// from red 7 to blue 7, or vice versa. +static bool8 DecideStop_Bias_Reel3(void) { - u8 biasTag = sSlotMachine->biasTag; - if (sSlotMachine->luckyFlags & LUCKY_BIAS_MIXED_777) + u8 biasSymbol = sSlotMachine->biasSymbol; + if (sSlotMachine->machineBias & BIAS_MIXED_7) { - biasTag = GFXTAG_7_RED; - if (sSlotMachine->biasTag == GFXTAG_7_RED) + biasSymbol = SYMBOL_7_RED; + if (sSlotMachine->biasSymbol == SYMBOL_7_RED) { - biasTag = GFXTAG_7_BLUE; + biasSymbol = SYMBOL_7_BLUE; } } - return sDecideReelTurns_BiasTag_Reel3_Bets[sSlotMachine->bet - 1](biasTag); + return sDecideStop_Bias_Reel3_Bets[sSlotMachine->bet - 1](biasSymbol); } -static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8 biasTag) +// Turn at most 4 extra turns to try to line up the bias symbol in the same +// row as reel 2. +static bool8 DecideStop_Bias_Reel3_Bet1or2(u8 biasSymbol) { s16 i; - s16 biasTagLocation_Reel2 = sSlotMachine->winnerRows[1]; + s16 reel2BiasRow = sSlotMachine->winnerRows[1]; - for (i = 0; i < 5; i++) + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - // if the biasTag appears in the same row as in reel 2 within 4 turns - if (GetTag(RIGHT_REEL, biasTagLocation_Reel2 - i) == biasTag) + if (GetSymbol(RIGHT_REEL, reel2BiasRow - i) == biasSymbol) { - sSlotMachine->winnerRows[2] = biasTagLocation_Reel2; + sSlotMachine->winnerRows[2] = reel2BiasRow; sSlotMachine->reelExtraTurns[2] = i; return TRUE; } @@ -2362,35 +2639,40 @@ static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8 biasTag) return FALSE; } -static bool8 DecideReelTurns_BiasTag_Reel3_Bet3(u8 biasTag) +// Try to complete a match in reel 3 by lining up a bias symbol with the bias +// symbols from the first two reels. +static bool8 DecideStop_Bias_Reel3_Bet3(u8 biasSymbol) { s16 i; - s16 biasTagFinalPos; - // if the final position of the biasTag matches in reel 1 and reel 2... + s16 biasRow; + + // First two bias symbols in the same row. Try to line up bias symbol in + // same the row here too if (sSlotMachine->winnerRows[0] == sSlotMachine->winnerRows[1]) - //...then try to line it up in reel 3 - return DecideReelTurns_BiasTag_Reel3_Bet1or2(biasTag); - // else place it in the row opposite reel 1's + return DecideStop_Bias_Reel3_Bet1or2(biasSymbol); + + // Otherwise, try to line up the bias symbol diagonally if (sSlotMachine->winnerRows[0] == 1) - biasTagFinalPos = 3; + biasRow = 3; else - biasTagFinalPos = 1; - for (i = 0; i < 5; i++) + biasRow = 1; + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - // if the biasTag lands in that position within 4 turns - if (GetTag(RIGHT_REEL, biasTagFinalPos - i) == biasTag) + if (GetSymbol(RIGHT_REEL, biasRow - i) == biasSymbol) { sSlotMachine->reelExtraTurns[2] = i; - sSlotMachine->winnerRows[2] = biasTagFinalPos; + sSlotMachine->winnerRows[2] = biasRow; return TRUE; } } return FALSE; } -// Advance until there are no cherries on screen in reel 1 - -static void DecideReelTurns_NoBiasTag_Reel1(void) +// Advance as many turns as needed until there are no cherries on screen in +// reel 1, as cherries would cause a match. +// +// Based on the distribution of reel 1, this will add at most 3 extra turns. +static void DecideStop_NoBias_Reel1(void) { s16 i = 0; @@ -2399,41 +2681,60 @@ static void DecideReelTurns_NoBiasTag_Reel1(void) sSlotMachine->reelExtraTurns[0] = i; } -static bool8 IsBiasTag777_SwitchColor(u8 *biasTagPtr) +// If the bias symbol is one of the 7's, switch to the opposite color and return +// true. Otherwise, return false. +static bool8 IfSymbol7_SwitchColor(u8 *symbol) { - if (*biasTagPtr == GFXTAG_7_RED) + if (*symbol == SYMBOL_7_RED) { - *biasTagPtr = GFXTAG_7_BLUE; + *symbol = SYMBOL_7_BLUE; return TRUE; } - if (*biasTagPtr == GFXTAG_7_BLUE) + if (*symbol == SYMBOL_7_BLUE) { - *biasTagPtr = GFXTAG_7_RED; + *symbol = SYMBOL_7_RED; return TRUE; } return FALSE; } -static void DecideReelTurns_NoBiasTag_Reel2(void) +// If the machine doesn't have a bias, the reel stops immediately. +// +// Otherwise, the machine tries to taunt the player if it is biased toward +// straight 7's. This would only happen if the player did not stop near the +// correct-color 7, so the machine couldn't force a match. +// +// Instead, the machine now tries to line up the opposite-color 7, which is not +// a valid match. +static void DecideStop_NoBias_Reel2(void) { - sDecideReelTurns_NoBiasTag_Reel2_Bets[sSlotMachine->bet - 1](); + sDecideStop_NoBias_Reel2_Bets[sSlotMachine->bet - 1](); } -// only does stuff if the biasTag is one of the 7's, plus other conditions -static void DecideReelTurns_NoBiasTag_Reel2_Bet1(void) +// If the machine has no bias, stop immediately. +// +// Otherwise, the machine manipulates the results if all the following +// conditions are met: +// If +// - The machine is biased toward straight 7's +// - The machine managed to match a 7 in the middle of reel 1 +// - The machine could not line up a 7 of the same color in reel 2 +// Then +// The machine will try to line up a 7 of the opposite color in reel 2 +static void DecideStop_NoBias_Reel2_Bet1(void) { - if (sSlotMachine->winnerRows[0] != 0 && sSlotMachine->luckyFlags & LUCKY_BIAS_777) + if (sSlotMachine->winnerRows[0] != 0 && sSlotMachine->machineBias & BIAS_STRAIGHT_7) { - u8 biasTag = GetTag(LEFT_REEL, 2 - sSlotMachine->reelExtraTurns[0]); - //...and if biasTag is one of the 7's... - if (IsBiasTag777_SwitchColor(&biasTag)) - //...swap color of biasTag... + // Note here and in other NoBias functions, reelExtraTurns is 0 if it + // corresponds to a previous reel. That reel has already stopped and any + // extra turns were applied. + u8 reel1MiddleSym = GetSymbol(LEFT_REEL, 2 - sSlotMachine->reelExtraTurns[0]); + if (IfSymbol7_SwitchColor(&reel1MiddleSym)) { s16 i; - for (i = 0; i < 5; i++) + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - //...and if the biasTag appears within 4 turns - if (biasTag == GetTag(MIDDLE_REEL, 2 - i)) + if (reel1MiddleSym == GetSymbol(MIDDLE_REEL, 2 - i)) { sSlotMachine->winnerRows[1] = 2; sSlotMachine->reelExtraTurns[1] = i; @@ -2444,20 +2745,27 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet1(void) } } -static void DecideReelTurns_NoBiasTag_Reel2_Bet2(void) +// If the machine has no bias, stop immediately. +// +// Otherwise, the machine manipulates the results if all the following +// conditions are met: +// If +// - The machine is biased toward straight 7's +// - The machine managed to match a 7 anywhere in reel 1 +// - The machine could not line up a 7 of the same color in reel 2 +// Then +// The machine will try to line up a 7 of the opposite color in reel 2 +static void DecideStop_NoBias_Reel2_Bet2(void) { - if (sSlotMachine->winnerRows[0] != 0 && sSlotMachine->luckyFlags & LUCKY_BIAS_777) + if (sSlotMachine->winnerRows[0] != 0 && sSlotMachine->machineBias & BIAS_STRAIGHT_7) { - u8 biasTag = GetTag(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]); - //...and if biasTag is one of the 7's... - if (IsBiasTag777_SwitchColor(&biasTag)) - //...swap color of biasTag... + u8 reel1BiasSym = GetSymbol(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]); + if (IfSymbol7_SwitchColor(&reel1BiasSym)) { s16 i; - for (i = 0; i < 5; i++) + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - //...and if the biasTag appears in same row in reel 2 within 4 turns - if (biasTag == GetTag(MIDDLE_REEL, sSlotMachine->winnerRows[0] - i)) + if (reel1BiasSym == GetSymbol(MIDDLE_REEL, sSlotMachine->winnerRows[0] - i)) { sSlotMachine->winnerRows[1] = sSlotMachine->winnerRows[0]; sSlotMachine->reelExtraTurns[1] = i; @@ -2468,146 +2776,225 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet2(void) } } -static void DecideReelTurns_NoBiasTag_Reel2_Bet3(void) +// If the machine has no bias, stop immediately. +// +// Otherwise, the machine manipulates the results if all the following +// conditions are met: +// If +// - The machine is biased toward straight 7's +// - The machine managed to match a 7 anywhere in reel 1 +// - The machine could not line up a 7 of the same color in reel 2 +// Then +// The machine will try to line up a 7 of the opposite color in reel 2 +// +// The way it tries to line up an opposite-color 7 differs depending on where +// the 7 is in reel 1: +// +// Middle row: +// Try to line up an opposite-color 7 in the middle of reel 2 within 4 turns. +// +// Top row: +// - First check for an opposite-color 7 in the top and middle rows of the +// current screen. If found, stop immediately. +// - Otherwise, check if an opposite-color 7 will enter the top row within 4 +// turns. +// - If one enters in 1 or 2 turns, stop the reel when it gets to the middle +// row. +// - If one enters in 3 or 4 turns, stop the reel when it gets to the top +// row. +// +// Bottom row: +// - First check for an opposite-color 7 in the middle and bottom rows of the +// current screen. If found, stop immediately. +// - Otherwise, check if an opposite-color 7 will enter the bottom row within 4 +// turns. +// - If one enters in 1 or 2 turns, stop the reel when it gets to the bottom +// row. +// - If one enters in 3 or 4 turns, stop the reel when it gets to the middle +// row. +// +// BUG: This procedure misses an opportunity to line up an opposite-color 7 in +// one scenario, when: +// - There is a 7 in the bottom row of reel 1 +// - And, you can get an opposite-color 7 in the middle row of reel 2 in 4 +// turns +static void DecideStop_NoBias_Reel2_Bet3(void) { s16 i; s16 j; - // if reel 1 has a biasTag and bit 7 is set in luckyFlags... - if (sSlotMachine->winnerRows[0] != 0 && sSlotMachine->luckyFlags & LUCKY_BIAS_777) + u8 reel1BiasSym; + + if (sSlotMachine->winnerRows[0] != 0 && sSlotMachine->machineBias & BIAS_STRAIGHT_7) { - //...and if biasTag appeared in the center row of reel 1 + // Lined up 7 in middle of reel 1 if (sSlotMachine->winnerRows[0] == 2) { - DecideReelTurns_NoBiasTag_Reel2_Bet2(); + DecideStop_NoBias_Reel2_Bet2(); + return; } - else + + reel1BiasSym = GetSymbol(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]); + if (IfSymbol7_SwitchColor(&reel1BiasSym)) { - u8 biasTag = GetTag(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]); - //...and if biasTag is one of the 7's... - if (IsBiasTag777_SwitchColor(&biasTag)) - //...swap the color of the 7... + // Check current screen to see if there is already an opposite-color + // 7 lined up for a match. + j = 2; + if (sSlotMachine->winnerRows[0] == 3) + j = 3; + for (i = 0; i < 2; i++, j--) { - j = 2; - if (sSlotMachine->winnerRows[0] == 3) - j = 3; - for (i = 0; i < 2; i++, j--) + if (reel1BiasSym == GetSymbol(MIDDLE_REEL, j)) { - if (biasTag == GetTag(MIDDLE_REEL, j)) - { - sSlotMachine->winnerRows[1] = j; - sSlotMachine->reelExtraTurns[1] = 0; - return; - } + sSlotMachine->winnerRows[1] = j; + sSlotMachine->reelExtraTurns[1] = 0; + return; } - for (j = 1; j < 5; j++) + } + + // Check if opposite-color 7 will appear in same row as reel 1 in + // over the next 4 turns + for (j = 1; j <= MAX_EXTRA_TURNS; j++) + { + if (reel1BiasSym == GetSymbol(MIDDLE_REEL, sSlotMachine->winnerRows[0] - j)) { - if (biasTag == GetTag(MIDDLE_REEL, sSlotMachine->winnerRows[0] - j)) + // If 7 appeared in top row of reel 1 + if (sSlotMachine->winnerRows[0] == 1) { - if (sSlotMachine->winnerRows[0] == 1) + if (j <= 2) { - if (j < 3) - { - sSlotMachine->winnerRows[1] = 2; - sSlotMachine->reelExtraTurns[1] = j + 1; - } - else - { - sSlotMachine->winnerRows[1] = 1; - sSlotMachine->reelExtraTurns[1] = j; - } + sSlotMachine->winnerRows[1] = 2; + sSlotMachine->reelExtraTurns[1] = j + 1; } else { - if (j < 3) - { - sSlotMachine->winnerRows[1] = 3; - sSlotMachine->reelExtraTurns[1] = j; - } - else - { - sSlotMachine->winnerRows[1] = 2; - sSlotMachine->reelExtraTurns[1] = j - 1; - } + sSlotMachine->winnerRows[1] = 1; + sSlotMachine->reelExtraTurns[1] = j; } - return; } + // If 7 appeared in bottom row of reel 1 + else + { + if (j <= 2) + { + sSlotMachine->winnerRows[1] = 3; + sSlotMachine->reelExtraTurns[1] = j; + } + else + { + sSlotMachine->winnerRows[1] = 2; + sSlotMachine->reelExtraTurns[1] = j - 1; + } + } + return; } } } } } -static bool8 AreTagsMixed77(u8 tag1, u8 tag2) +// Returns true if the reel 1 and reel 2 symbols are opposite-color 7's. +// +// Note that if true, this does not constitue a MATCH_MIXED_7, as the first two +// reels are not the same color. +static bool8 MismatchedSyms_77(u8 sym1, u8 sym2) { - if ((tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_BLUE) || (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_RED)) + if ((sym1 == SYMBOL_7_RED && sym2 == SYMBOL_7_BLUE) || (sym1 == SYMBOL_7_BLUE && sym2 == SYMBOL_7_RED)) return TRUE; else return FALSE; } -static bool8 AreTagsMixed777(u8 tag1, u8 tag2, u8 tag3) +// Returns true if the reel 1, reel 2 and reel 3 symbolss form a 7 mismatch, +// i.e. {7R, 7B, 7R} or {7B, 7R, 7B}. +static bool8 MismatchedSyms_777(u8 sym1, u8 sym2, u8 sym3) { - if ((tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED) || - (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE)) + if ((sym1 == SYMBOL_7_RED && sym2 == SYMBOL_7_BLUE && sym3 == SYMBOL_7_RED) || + (sym1 == SYMBOL_7_BLUE && sym2 == SYMBOL_7_RED && sym3 == SYMBOL_7_BLUE)) return TRUE; else return FALSE; } -static bool8 TagsDontMatchOrHaveAny7s(u8 tag1, u8 tag2, u8 tag3) +// Returns false if either: +// - The symbols form a match (including MATCH_MIXED_7) +// - Or, the symbols form a 7 mismatch (i.e., {7R, 7B, 7R} or {7B, 7R, 7B}) +// +// Note, this does not account for cherry matches. +static bool8 NeitherMatchNor7Mismatch(u8 sym1, u8 sym2, u8 sym3) { - if ((tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED) || - (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE) || - (tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE) || - (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED) || - (tag1 == tag2 && tag1 == tag3)) + if ((sym1 == SYMBOL_7_RED && sym2 == SYMBOL_7_BLUE && sym3 == SYMBOL_7_RED) + || (sym1 == SYMBOL_7_BLUE && sym2 == SYMBOL_7_RED && sym3 == SYMBOL_7_BLUE) + || (sym1 == SYMBOL_7_RED && sym2 == SYMBOL_7_RED && sym3 == SYMBOL_7_BLUE) + || (sym1 == SYMBOL_7_BLUE && sym2 == SYMBOL_7_BLUE && sym3 == SYMBOL_7_RED) + || (sym1 == sym2 && sym1 == sym3)) { return FALSE; } return TRUE; } -static void DecideReelTurns_NoBiasTag_Reel3(void) +// Spin until there's no match, or try to taunt the player with a 7 mismatch if +// they failed the straight 7 bias. +static void DecideStop_NoBias_Reel3(void) { - sDecideReelTurns_NoBiasTag_Reel3_Bets[sSlotMachine->bet - 1](); + sDecideStop_NoBias_Reel3_Bets[sSlotMachine->bet - 1](); } -static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void) +// Spin until there is no match in reel 3. Additionally, if the player failed a +// straight 7 bias, try to taunt them with a 7 mismatch. +// +// The way this plays out depends on the first two matched symbols. +// +// If first two symbols are the same: +// Spin until you get a symbol that won't complete a match. +// +// Otherwise, if the first two symbols are opposite-color 7's: +// - If the machine is biased toward straight 7's, then the player must have +// failed with this bias. The machine tries to taunt the player by turning +// up to 4 turns to complete a 7 mismatch (i.e., {7R, 7B, 7R} or +// {7B, 7R, 7B}). +// - Otherwise, spin until you get a symbol that won't complete a match. +static void DecideStop_NoBias_Reel3_Bet1(void) { s16 i = 0; - u8 tag1 = GetTag(LEFT_REEL, 2 - sSlotMachine->reelExtraTurns[0]); - u8 tag2 = GetTag(MIDDLE_REEL, 2 - sSlotMachine->reelExtraTurns[1]); - // if tags match in first 2 reels... - if (tag1 == tag2) + u8 sym1 = GetSymbol(LEFT_REEL, 2 - sSlotMachine->reelExtraTurns[0]); + u8 sym2 = GetSymbol(MIDDLE_REEL, 2 - sSlotMachine->reelExtraTurns[1]); + + // If first two symbols match, spin until you get a non-matching symbol + if (sym1 == sym2) { - //...spin until you get non-matching tag - while (1) + while (TRUE) { - u8 tag3; - if (!(tag1 == (tag3 = GetTag(RIGHT_REEL, 2 - i)) || (tag1 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE) || (tag1 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED))) + u8 sym3; + if (!((sym1 == (sym3 = GetSymbol(RIGHT_REEL, 2 - i))) + || (sym1 == SYMBOL_7_RED && sym3 == SYMBOL_7_BLUE) + || (sym1 == SYMBOL_7_BLUE && sym3 == SYMBOL_7_RED))) break; i++; } } - else if (AreTagsMixed77(tag1, tag2)) + // First two symbols are opposite-color 7's + else if (MismatchedSyms_77(sym1, sym2)) { - if (sSlotMachine->luckyFlags & LUCKY_BIAS_777) + // If biased toward straight 7's, try to complete the 7 mismatch in 4 + // turns + if (sSlotMachine->machineBias & BIAS_STRAIGHT_7) { - //...see if you can match with reel 1 within 4 turns - for (i = 0; i < 5; i++) + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - if (tag1 == GetTag(RIGHT_REEL, 2 - i)) + if (sym1 == GetSymbol(RIGHT_REEL, 2 - i)) { sSlotMachine->reelExtraTurns[2] = i; return; } } } - // turn until you aren't matching with reel 1 + + // Otherwise, just spin until you get a non-matching symbol i = 0; - while (1) + while (TRUE) { - if (tag1 != GetTag(RIGHT_REEL, 2 - i)) + if (sym1 != GetSymbol(RIGHT_REEL, 2 - i)) break; i++; } @@ -2615,25 +3002,49 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void) sSlotMachine->reelExtraTurns[2] = i; } -static void DecideReelTurns_NoBiasTag_Reel3_Bet2(void) +// Spin until there is no match in reel 3. Additionally, if the player failed a +// straight 7 bias, try to taunt them with a 7 mismatch. +// +// There are up to two stages, depending on the first two matched symbols: +// +// 1. [Optional] If first two symbols are opposite-color 7's in the same row and +// the machine is biased toward straight 7's: +// Check if a 7 with the same color as reel 1 appears in the same row +// within 4 turns. If so, initially advance to that position. +// +// 2. Check rows. Keep advancing the reel a turn at a time as long as: +// - There is a match in any row +// - Or, there is a 7 mismatch in any row and the machine isn't biased +// toward straight 7's +// +// Note, stage 2 is not limited to 4 turns. The reel keeps spinning until you +// lose. +static void DecideStop_NoBias_Reel3_Bet2(void) { s16 extraTurns = 0; s16 i; - u8 tag1; - u8 tag2; - u8 tag3; - if (sSlotMachine->winnerRows[1] != 0 && sSlotMachine->winnerRows[0] == sSlotMachine->winnerRows[1] && sSlotMachine->luckyFlags & LUCKY_BIAS_777) + u8 sym1; + u8 sym2; + u8 sym3; + + // Effectively, if you lined up two 7's in the same row + if (sSlotMachine->winnerRows[1] != 0 && + sSlotMachine->winnerRows[0] == sSlotMachine->winnerRows[1] && + sSlotMachine->machineBias & BIAS_STRAIGHT_7) { - tag1 = GetTag(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]); - tag2 = GetTag(MIDDLE_REEL, sSlotMachine->winnerRows[1] - sSlotMachine->reelExtraTurns[1]); - //...and if tags are mixed 7s... - if (AreTagsMixed77(tag1, tag2)) + sym1 = GetSymbol(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]); + sym2 = GetSymbol(MIDDLE_REEL, sSlotMachine->winnerRows[1] - sSlotMachine->reelExtraTurns[1]); + + // If the first two 7's are opposite colors, see if you can line up a 7 + // mismatch in the same row. If so, advance initially to that position. + // More turns may be added further below. + if (MismatchedSyms_77(sym1, sym2)) { - //...try to match with reel 1 within 4 turns - for (i = 0; i < 5; i++) + // Iterate over the next 4 turns + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - tag3 = GetTag(RIGHT_REEL, sSlotMachine->winnerRows[1] - i); - if (tag1 == tag3) + sym3 = GetSymbol(RIGHT_REEL, sSlotMachine->winnerRows[1] - i); + if (sym1 == sym3) { extraTurns = i; break; @@ -2641,53 +3052,100 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet2(void) } } } - // GUESS: spin until there's no possible match within 4 turns of you stopping - while (1) + + while (TRUE) { - s16 loopExit; - for (i = 1, loopExit = 0; i < 4; i++) + s16 numMatches; + // Iterate over the rows of the screen after `extraTurns` turns + for (i = 1, numMatches = 0; i <= 3; i++) { - tag1 = GetTag(LEFT_REEL, i - sSlotMachine->reelExtraTurns[0]); // why does this update with i - tag2 = GetTag(MIDDLE_REEL, i - sSlotMachine->reelExtraTurns[1]); - tag3 = GetTag(RIGHT_REEL, i - extraTurns); - // if bit 7 of luckyFlags is unset... - //...and if all 3 tags match and they're not mixed 7s - if (!TagsDontMatchOrHaveAny7s(tag1, tag2, tag3) && (!AreTagsMixed777(tag1, tag2, tag3) || !(sSlotMachine->luckyFlags & LUCKY_BIAS_777))) + sym1 = GetSymbol(LEFT_REEL, i - sSlotMachine->reelExtraTurns[0]); + sym2 = GetSymbol(MIDDLE_REEL, i - sSlotMachine->reelExtraTurns[1]); + sym3 = GetSymbol(RIGHT_REEL, i - extraTurns); + + // This boils down to: + // If there's a match on screen, keep spinning. Otherwise, if + // there's a 7 mismatch on screen, keep spinning if the machine + // isn't biased toward straight 7's. + if (!NeitherMatchNor7Mismatch(sym1, sym2, sym3) && + !(MismatchedSyms_777(sym1, sym2, sym3) && (sSlotMachine->machineBias & BIAS_STRAIGHT_7))) { - loopExit++; + numMatches++; break; } } - if (loopExit == 0) + + // If no matches were found, stop here. Otherwise, add an extra spin and + // check again. + if (numMatches == 0) break; extraTurns++; } sSlotMachine->reelExtraTurns[2] = extraTurns; } -static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void) +// Try to spin until there is no match in reel 3. Additionally, if the player +// failed a straight 7 bias, try to taunt them with a 7 mismatch. +// +// There are up to four stages: +// +// 1. Advance the reel as if 2 coins were bet: to mildly oversimplify, spin +// until there's no matches straight across in any rows. +// +// 2. [Optional] If you've lined up two opposite-color 7's diagonally and the +// machine is biased toward straight 7's: +// Check if a 7 with the same color as reel 1 appears in the final diagonal +// position within 4 turns. If so, advance to that position. +// +// 3. Check NWSE diagonal. Keep advancing the reel a turn at a time as long as: +// - There is a match in the diagonal +// - Or, there is a 7 mismatch in the diagonal and the machine isn't +// biased toward straight 7's +// +// 3. Check NESW diagonal. Keep advancing the reel a turn at a time as long as: +// - There is a match in the diagonal +// - Or, there is a 7 mismatch in the diagonal and the machine isn't +// biased toward straight 7's +// +// Note that stages 3 and 4 are not limited to 4 turns. +// +// Also, note that it actually is possible to win a match here. After stage 1, +// the game never again checks whether it will be matching any rows straight +// across. So any extra turns added in stages 2-4 could result in a match +// occurring straight across. +static void DecideStop_NoBias_Reel3_Bet3(void) { - u8 tag1; - u8 tag2; - u8 tag3; - s16 j; + u8 sym1; + u8 sym2; + u8 sym3; + s16 row; s16 i; - DecideReelTurns_NoBiasTag_Reel3_Bet2(); - if (sSlotMachine->winnerRows[1] != 0 && sSlotMachine->winnerRows[0] != sSlotMachine->winnerRows[1] && sSlotMachine->luckyFlags & LUCKY_BIAS_777) + // Spin until there's no matches in any row straight across, potentially + // skewing toward a 7 mismatch. Consider this the new starting position for + // this function. + DecideStop_NoBias_Reel3_Bet2(); + + // Essentially, if you lined up two 7's diagonally + if (sSlotMachine->winnerRows[1] != 0 && + sSlotMachine->winnerRows[0] != sSlotMachine->winnerRows[1] && + sSlotMachine->machineBias & BIAS_STRAIGHT_7) { - tag1 = GetTag(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]); - tag2 = GetTag(MIDDLE_REEL, sSlotMachine->winnerRows[1] - sSlotMachine->reelExtraTurns[1]); - //..and if tags are mixed 7s... - if (AreTagsMixed77(tag1, tag2)) + sym1 = GetSymbol(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]); + sym2 = GetSymbol(MIDDLE_REEL, sSlotMachine->winnerRows[1] - sSlotMachine->reelExtraTurns[1]); + + // If the first two 7's are opposite colors, try advancing up to 4 + // additional turns to line up a diagonal 7 mismatch. More turns may be + // added further below. + if (MismatchedSyms_77(sym1, sym2)) { - j = 1; + row = 1; if (sSlotMachine->winnerRows[0] == 1) - j = 3; - for (i = 0; i < 5; i++) + row = 3; + for (i = 0; i <= MAX_EXTRA_TURNS; i++) { - tag3 = GetTag(RIGHT_REEL, j - (sSlotMachine->reelExtraTurns[2] + i)); - if (tag1 == tag3) + sym3 = GetSymbol(RIGHT_REEL, row - (sSlotMachine->reelExtraTurns[2] + i)); + if (sym1 == sym3) { sSlotMachine->reelExtraTurns[2] += i; break; @@ -2695,21 +3153,27 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void) } } } - while (1) + + while (TRUE) { - tag1 = GetTag(LEFT_REEL, 1 - sSlotMachine->reelExtraTurns[0]); - tag2 = GetTag(MIDDLE_REEL, 2 - sSlotMachine->reelExtraTurns[1]); - tag3 = GetTag(RIGHT_REEL, 3 - sSlotMachine->reelExtraTurns[2]); - if (TagsDontMatchOrHaveAny7s(tag1, tag2, tag3) || (AreTagsMixed777(tag1, tag2, tag3) && sSlotMachine->luckyFlags & LUCKY_BIAS_777)) + // Check NWSE diagonal + sym1 = GetSymbol(LEFT_REEL, 1 - sSlotMachine->reelExtraTurns[0]); + sym2 = GetSymbol(MIDDLE_REEL, 2 - sSlotMachine->reelExtraTurns[1]); + sym3 = GetSymbol(RIGHT_REEL, 3 - sSlotMachine->reelExtraTurns[2]); + if (NeitherMatchNor7Mismatch(sym1, sym2, sym3) + || (MismatchedSyms_777(sym1, sym2, sym3) && sSlotMachine->machineBias & BIAS_STRAIGHT_7)) break; sSlotMachine->reelExtraTurns[2]++; } - while (1) + + while (TRUE) { - tag1 = GetTag(LEFT_REEL, 3 - sSlotMachine->reelExtraTurns[0]); - tag2 = GetTag(MIDDLE_REEL, 2 - sSlotMachine->reelExtraTurns[1]); - tag3 = GetTag(RIGHT_REEL, 1 - sSlotMachine->reelExtraTurns[2]); - if (TagsDontMatchOrHaveAny7s(tag1, tag2, tag3) || (AreTagsMixed777(tag1, tag2, tag3) && sSlotMachine->luckyFlags & LUCKY_BIAS_777)) + // Check NESW diagonal + sym1 = GetSymbol(LEFT_REEL, 3 - sSlotMachine->reelExtraTurns[0]); + sym2 = GetSymbol(MIDDLE_REEL, 2 - sSlotMachine->reelExtraTurns[1]); + sym3 = GetSymbol(RIGHT_REEL, 1 - sSlotMachine->reelExtraTurns[2]); + if (NeitherMatchNor7Mismatch(sym1, sym2, sym3) + || (MismatchedSyms_777(sym1, sym2, sym3) && sSlotMachine->machineBias & BIAS_STRAIGHT_7)) break; sSlotMachine->reelExtraTurns[2]++; } @@ -2724,7 +3188,7 @@ static void PressStopReelButton(u8 reelNum) static void Task_PressStopReelButton(u8 taskId) { - sReelStopButtonFuncs[gTasks[taskId].data[0]](&gTasks[taskId], taskId); + sReelStopButtonTasks[gTasks[taskId].data[0]](&gTasks[taskId], taskId); } static void StopReelButton_Press(struct Task *task, u8 taskId) @@ -2930,11 +3394,11 @@ static void CreatePikaPowerBoltTask(void) sSlotMachine->pikaPowerBoltTaskId = CreateTask(Task_CreatePikaPowerBolt, 8); } -static void AddPikaPowerBolt(u8 pikaPower) +static void AddPikaPowerBolt(u8 bolts) { struct Task *task = &gTasks[sSlotMachine->pikaPowerBoltTaskId]; ResetPikaPowerBoltTask(task); - task->tState = 1; + task->tState = PIKABOLT_TASK_ADD_BOLT; task->tNumBolts++; task->tAnimating = TRUE; } @@ -2943,7 +3407,7 @@ static void ResetPikaPowerBolts(void) { struct Task *task = &gTasks[sSlotMachine->pikaPowerBoltTaskId]; ResetPikaPowerBoltTask(task); - task->tState = 3; + task->tState = PIKABOLT_TASK_CLEAR_ALL; task->tAnimating = TRUE; } @@ -2954,7 +3418,7 @@ static bool8 IsPikaPowerBoltAnimating(void) static void Task_CreatePikaPowerBolt(u8 taskId) { - sPikaPowerBoltFuncs[gTasks[taskId].tState](&gTasks[taskId]); + sPikaPowerBoltTasks[gTasks[taskId].tState](&gTasks[taskId]); } static void PikaPowerBolt_Idle(struct Task *task) @@ -2964,7 +3428,7 @@ static void PikaPowerBolt_Idle(struct Task *task) static void PikaPowerBolt_AddBolt(struct Task *task) { task->tSpriteId = CreatePikaPowerBoltSprite((task->tNumBolts << 3) + 20, 20); - task->tState++; + task->tState++; // PIKABOLT_TASK_WAIT_ANIM } // The bolt sprite spins around as it appears @@ -2983,7 +3447,7 @@ static void PikaPowerBolt_WaitAnim(struct Task *task) sSelectedPikaPowerTile[r2] = sPikaPowerTileTable[r3][0]; LoadBgTilemap(2, &sSelectedPikaPowerTile[r2], 2, r5 + 0x40); DestroyPikaPowerBoltSprite(task->tSpriteId); - task->tState = 0; + task->tState = PIKABOLT_TASK_IDLE; task->tAnimating = 0; } } @@ -3007,7 +3471,7 @@ static void PikaPowerBolt_ClearAll(struct Task *task) task->tTimer = 0; if (task->tNumBolts == 0) { - task->tState = 0; + task->tState = PIKABOLT_TASK_IDLE; task->tAnimating = 0; } } @@ -3020,17 +3484,17 @@ static void ResetPikaPowerBoltTask(struct Task *task) task->data[i] = 0; } -static void LoadPikaPowerMeter(u8 pikaPower) +static void LoadPikaPowerMeter(u8 bolts) { s16 i; s16 r3 = 0, r1 = 0; s16 r4 = 3; - for (i = 0; i < pikaPower; i++, r4++) + for (i = 0; i < bolts; i++, r4++) { r3 = 0, r1 = 0; if (i == 0) r3 = 1, r1 = 1; - else if (i == 15) // pikaPower meter is full + else if (i == 15) // meter is full r3 = 2, r1 = 2; sSelectedPikaPowerTile[r1] = sPikaPowerTileTable[r3][0]; LoadBgTilemap(2, &sSelectedPikaPowerTile[r1], 2, r4 + 0x40); @@ -3045,7 +3509,7 @@ static void LoadPikaPowerMeter(u8 pikaPower) sSelectedPikaPowerTile[r1] = sPikaPowerTileTable[r3][1]; LoadBgTilemap(2, &sSelectedPikaPowerTile[r1], 2, r4 + 0x40); } - gTasks[sSlotMachine->pikaPowerBoltTaskId].data[1] = pikaPower; + gTasks[sSlotMachine->pikaPowerBoltTaskId].data[1] = bolts; } #undef tState @@ -3054,7 +3518,13 @@ static void LoadPikaPowerMeter(u8 pikaPower) #undef tTimer #undef tAnimating -#define tState data[0] +#define tState data[0] +#define tReelSpeed data[1] +#define tTimer3 data[2] +#define tRtReelSpeed data[4] +#define tTimer2 data[4] +#define tTimer1 data[5] +#define tExplodeChecks data[6] static void BeginReelTime(void) { @@ -3071,10 +3541,7 @@ static bool8 IsReelTimeTaskDone(void) static void Task_ReelTime(u8 taskId) { - // task.data[1] has something to do with the threshold - // task.data[4] says how many pixels to advance the reel - // task.data[5] is a timer - sReelTimeActions[gTasks[taskId].tState](&gTasks[taskId]); + sReelTimeTasks[gTasks[taskId].tState](&gTasks[taskId]); } static void ReelTime_Init(struct Task *task) @@ -3082,10 +3549,10 @@ static void ReelTime_Init(struct Task *task) sSlotMachine->reelTimeSpinsLeft = 0; sSlotMachine->reeltimePixelOffset = 0; sSlotMachine->reeltimePosition = 0; - task->tState++; + task->tState++; // RT_TASK_WINDOW_ENTER task->data[1] = 0; task->data[2] = 30; - task->data[4] = 1280; // reel speed + task->tRtReelSpeed = 1280; gSpriteCoordOffsetX = 0; gSpriteCoordOffsetY = 0; SetGpuReg(REG_OFFSET_BG1HOFS, 0); @@ -3096,7 +3563,7 @@ static void ReelTime_Init(struct Task *task) CreateReelTimeNumberSprites(); CreateReelTimeShadowSprites(); CreateReelTimeNumberGapSprite(); - GetReeltimeDraw(); + GetReelTimeDraw(); StopMapMusic(); PlayNewMapMusic(MUS_ROULETTE); } @@ -3116,18 +3583,18 @@ static void ReelTime_WindowEnter(struct Task *task) } if (task->data[1] >= 200) { - task->tState++; + task->tState++; // RT_TASK_WAIT_START_PIKA task->data[3] = 0; } - AdvanceReeltimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->tRtReelSpeed >> 8); } static void ReelTime_WaitStartPikachu(struct Task *task) { - AdvanceReeltimeReel(task->data[4] >> 8); - if (++task->data[5] >= 60) + AdvanceReeltimeReel(task->tRtReelSpeed >> 8); + if (++task->tTimer1 >= 60) { - task->tState++; + task->tState++; // RT_TASK_PIKA_SPEEDUP1 CreateReelTimeBoltSprites(); CreateReelTimePikachuAuraSprites(); } @@ -3144,29 +3611,29 @@ static void ReelTime_PikachuSpeedUp1(struct Task *task) memcpy(reelTimeBoltDelays, sReelTimeBoltDelays, sizeof(sReelTimeBoltDelays)); memcpy(pikachuAuraFlashDelays, sPikachuAuraFlashDelays, sizeof(sPikachuAuraFlashDelays)); - AdvanceReeltimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->tRtReelSpeed >> 8); // gradually slow down the reel - task->data[4] -= 4; - i = 4 - (task->data[4] >> 8); + task->tRtReelSpeed -= 4; + i = 4 - (task->tRtReelSpeed >> 8); SetReelTimeBoltDelay(reelTimeBoltDelays[i]); SetReelTimePikachuAuraFlashDelay(pikachuAuraFlashDelays[i]); StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], pikachuAnimIds[i]); - // once speed goes below 256, go to next ReelTimeAction and keep the speed level - if (task->data[4] <= 0x100) + // once speed goes below 256, go to next ReelTime task and keep the speed level + if (task->tRtReelSpeed <= 0x100) { - task->tState++; - task->data[4] = 0x100; - task->data[5] = 0; + task->tState++; // RT_TASK_PIKA_SPEEDUP2 + task->tRtReelSpeed = 0x100; + task->tTimer1 = 0; } } static void ReelTime_PikachuSpeedUp2(struct Task *task) { - AdvanceReeltimeReel(task->data[4] >> 8); - if (++task->data[5] >= 80) + AdvanceReeltimeReel(task->tRtReelSpeed >> 8); + if (++task->tTimer1 >= 80) { - task->tState++; - task->data[5] = 0; + task->tState++; // RT_TASK_WAIT_REEL + task->tTimer1 = 0; SetReelTimePikachuAuraFlashDelay(2); StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 3); } @@ -3174,83 +3641,94 @@ static void ReelTime_PikachuSpeedUp2(struct Task *task) static void ReelTime_WaitReel(struct Task *task) { - AdvanceReeltimeReel(task->data[4] >> 8); - task->data[4] = (u8)task->data[4] + 0x80; - if (++task->data[5] >= 80) + AdvanceReeltimeReel(task->tRtReelSpeed >> 8); + task->tRtReelSpeed = (u8)task->tRtReelSpeed + 0x80; + if (++task->tTimer1 >= 80) { - task->tState++; - task->data[5] = 0; + task->tState++; // RT_TASK_CHECK_EXPLODE + task->tTimer1 = 0; } } +// Check whether the ReelTime machine should explode. +// +// The ReelTime machine displays 0 when this task starts. If there is a positive +// ReelTime draw, the machine keeps spinning until it lands on that number. +// +// Otherwise, it checks every 40 frames whether it should explode. If so, it +// explodes immediately. After 4 checks, the machine won't explode but continues +// to spin until it lands on 0. static void ReelTime_CheckExplode(struct Task *task) { - AdvanceReeltimeReel(task->data[4] >> 8); - task->data[4] = (u8)task->data[4] + 0x40; - if (++task->data[5] >= 40) + AdvanceReeltimeReel(task->tRtReelSpeed >> 8); + task->tRtReelSpeed = (u8)task->tRtReelSpeed + 0x40; + if (++task->tTimer1 >= 40) { - task->data[5] = 0; + task->tTimer1 = 0; if (sSlotMachine->reelTimeDraw) { - if (sSlotMachine->reelTimeSpinsLeft <= task->data[6]) - task->tState++; + if (sSlotMachine->reelTimeSpinsLeft <= task->tExplodeChecks) + task->tState++; // RT_TASK_LAND } - else if (task->data[6] > 3) + else if (task->tExplodeChecks > 3) { - task->tState++; + task->tState++; // RT_TASK_LAND } - else if (ShouldReelTimeMachineExplode(task->data[6])) + else if (ShouldReelTimeMachineExplode(task->tExplodeChecks)) { - task->tState = 14; // ReelTime_ExplodeMachine + task->tState = RT_TASK_EXPLODE; } - task->data[6]++; + task->tExplodeChecks++; } } +// Reel spins until it lands on the selected outcome. static void ReelTime_LandOnOutcome(struct Task *task) { s16 reeltimePixelOffset = sSlotMachine->reeltimePixelOffset % 20; if (reeltimePixelOffset) { - reeltimePixelOffset = AdvanceReeltimeReelToNextTag(task->data[4] >> 8); - task->data[4] = (u8)task->data[4] + 0x40; + reeltimePixelOffset = AdvanceReeltimeReelToNextSymbol(task->tRtReelSpeed >> 8); + task->tRtReelSpeed = (u8)task->tRtReelSpeed + 0x40; } - else if (GetNearbyReelTimeTag(1) != sSlotMachine->reelTimeDraw) + else if (GetReelTimeSymbol(1) != sSlotMachine->reelTimeDraw) { - AdvanceReeltimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->tRtReelSpeed >> 8); reeltimePixelOffset = sSlotMachine->reeltimePixelOffset % 20; - task->data[4] = (u8)task->data[4] + 0x40; + task->tRtReelSpeed = (u8)task->tRtReelSpeed + 0x40; } - if (reeltimePixelOffset == 0 && GetNearbyReelTimeTag(1) == sSlotMachine->reelTimeDraw) + if (reeltimePixelOffset == 0 && GetReelTimeSymbol(1) == sSlotMachine->reelTimeDraw) { - task->data[4] = 0; // stop moving - task->tState++; + task->tRtReelSpeed = 0; // Also initializes task->tTimer2 + task->tState++; // RT_TASK_PIKA_REACT } } +// Animate Pikachu reaction. Clear any power bolts the player may have won if +// they got a positive ReelTime draw. static void ReelTime_PikachuReact(struct Task *task) { - if (++task->data[4] >= 60) + if (++task->tTimer2 >= 60) { StopMapMusic(); DestroyReelTimeBoltSprites(); DestroyReelTimePikachuAuraSprites(); - task->tState++; + task->tState++; // RT_TASK_WAIT_CLEAR_POWER if(sSlotMachine->reelTimeDraw == 0) { - task->data[4] = 0xa0; + task->tTimer2 = 0xa0; StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 5); PlayFanfare(MUS_TOO_BAD); } else { - task->data[4] = 0xc0; + task->tTimer2 = 0xc0; StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 4); gSprites[sSlotMachine->reelTimePikachuSpriteId].animCmdIndex = 0; - if (sSlotMachine->pikaPower) + if (sSlotMachine->pikaPowerBolts) { ResetPikaPowerBolts(); - sSlotMachine->pikaPower = 0; + sSlotMachine->pikaPowerBolts = 0; } PlayFanfare(MUS_SLOTS_WIN); } @@ -3259,8 +3737,8 @@ static void ReelTime_PikachuReact(struct Task *task) static void ReelTime_WaitClearPikaPower(struct Task *task) { - if ((task->data[4] == 0 || --task->data[4] == 0) && !IsPikaPowerBoltAnimating()) - task->tState++; + if ((task->tTimer2 == 0 || --task->tTimer2 == 0) && !IsPikaPowerBoltAnimating()) + task->tState++; // RT_TASK_CLOSE_WINDOW_SUCCESS } static void ReelTime_CloseWindow(struct Task *task) @@ -3274,16 +3752,20 @@ static void ReelTime_CloseWindow(struct Task *task) if (task->data[3] >> 3 <= 25) ClearReelTimeWindowTilemap(r4); else - task->tState++; + task->tState++; // RT_TASK_DESTROY_SPRITES } +// Destroy sprites and wrap up the ReelTime task. +// +// If the player got a positive ReelTime draw, select the speed that the slot +// reels will initially move at. static void ReelTime_DestroySprites(struct Task *task) { sSlotMachine->reelTimeSpinsUsed = 0; sSlotMachine->reelTimeSpinsLeft = sSlotMachine->reelTimeDraw; gSpriteCoordOffsetX = 0; SetGpuReg(REG_OFFSET_BG1HOFS, 0); - sSlotMachine->reelIncrement = 8; + sSlotMachine->reelSpeed = REEL_NORMAL_SPEED; DestroyReelTimePikachuSprite(); DestroyReelTimeMachineSprites(); DestroyReelTimeShadowSprites(); @@ -3295,19 +3777,20 @@ static void ReelTime_DestroySprites(struct Task *task) else { CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME); - task->data[1] = SlowReelSpeed(); - task->data[2] = 0; + task->tReelSpeed = ReelTimeSpeed(); + task->tTimer3 = 0; task->data[3] = 0; - task->tState++; + task->tState++; // RT_TASK_SET_REEL_SPEED } } -static void ReelTime_SetReelIncrement(struct Task *task) +// Slow the slot reels down until they match the selected speed. +static void ReelTime_SetReelSpeed(struct Task *task) { - if (sSlotMachine->reelIncrement == task->data[1]) - task->tState++; - else if (sSlotMachine->reelPixelOffsets[0] % REEL_SYMBOL_HEIGHT == 0 && (++task->data[2]& 0x07) == 0) - sSlotMachine->reelIncrement >>= 1; + if (sSlotMachine->reelSpeed == task->tReelSpeed) + task->tState++; // RT_TASK_END_SUCCESS + else if (sSlotMachine->reelPixelOffsets[0] % REEL_SYMBOL_HEIGHT == 0 && (++task->tTimer3 & 0x07) == 0) + sSlotMachine->reelSpeed >>= 1; } static void ReelTime_EndSuccess(struct Task *task) @@ -3324,9 +3807,9 @@ static void ReelTime_ExplodeMachine(struct Task *task) CreateReelTimeExplosionSprite(); gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = TRUE; StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 5); - task->tState++; + task->tState++; // RT_TASK_WAIT_EXPLODE task->data[4] = 4; - task->data[5] = 0; + task->tTimer1 = 0; StopMapMusic(); PlayFanfare(MUS_TOO_BAD); PlaySE(SE_M_EXPLOSION); @@ -3336,9 +3819,9 @@ static void ReelTime_WaitExplode(struct Task *task) { gSpriteCoordOffsetY = task->data[4]; SetGpuReg(REG_OFFSET_BG1VOFS, task->data[4]); - if (task->data[5] & 0x01) + if (task->tTimer1 & 0x01) task->data[4] = -task->data[4]; - if ((++task->data[5] & 0x1f) == 0) + if ((++task->tTimer1 & 0x1f) == 0) task->data[4] >>= 1; if (task->data[4] == 0) { @@ -3347,8 +3830,8 @@ static void ReelTime_WaitExplode(struct Task *task) CreateBrokenReelTimeMachineSprite(); CreateReelTimeSmokeSprite(); gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = FALSE; - task->tState++; - task->data[5] = 0; + task->tState++; // RT_TASK_WAIT_SMOKE + task->tTimer1 = 0; } } @@ -3358,7 +3841,7 @@ static void ReelTime_WaitSmoke(struct Task *task) SetGpuReg(REG_OFFSET_BG1VOFS, 0); if (IsReelTimeSmokeAnimFinished()) { - task->tState++; + task->tState++; // RT_TASK_CLOSE_WINDOW_FAILURE DestroyReelTimeSmokeSprite(); } } @@ -3378,46 +3861,45 @@ static void ReelTime_EndFailure(struct Task *task) static void LoadReelTimeWindowTilemap(s16 a0, s16 a1) { s16 i; - for (i = 4; i < 15; i++) - { LoadBgTilemap(1, &sReelTimeWindow_Tilemap[a1 + (i - 4) * 20], 2, 32 * i + a0); - } } static void ClearReelTimeWindowTilemap(s16 a0) { u8 i; - for (i = 4; i < 15; i++) - { LoadBgTilemap(1, sEmptyTilemap, 2, 32 * i + a0); - } } #undef tState +#undef tReelSpeed +#undef tRtReelSpeed +#undef tTimer2 +#undef tTimer1 +#undef tExplodeChecks #define tState data[0] // Info Box is the screen shown when Select is pressed static void OpenInfoBox(u8 digDisplayId) { - u8 taskId = CreateTask(RunInfoBoxActions, 1); + u8 taskId = CreateTask(Task_InfoBox, 1); gTasks[taskId].data[1] = digDisplayId; - RunInfoBoxActions(taskId); + Task_InfoBox(taskId); } static bool8 IsInfoBoxClosed(void) { - if (FindTaskIdByFunc(RunInfoBoxActions) == TASK_NONE) + if (FindTaskIdByFunc(Task_InfoBox) == TASK_NONE) return TRUE; else return FALSE; } -static void RunInfoBoxActions(u8 taskId) +static void Task_InfoBox(u8 taskId) { - sInfoBoxActions[gTasks[taskId].tState](&gTasks[taskId]); + sInfoBoxTasks[gTasks[taskId].tState](&gTasks[taskId]); } static void InfoBox_FadeIn(struct Task *task) @@ -3426,7 +3908,7 @@ static void InfoBox_FadeIn(struct Task *task) task->tState++; } -static void InfoBox_WaitForFade(struct Task *task) +static void InfoBox_WaitFade(struct Task *task) { if (!gPaletteFade.active) task->tState++; @@ -3444,19 +3926,19 @@ static void InfoBox_DrawWindow(struct Task *task) static void InfoBox_AddText(struct Task *task) { - AddTextPrinterParameterized3(1, 1, 2, 5, sColors_ReeltimeHelp, 0, gText_ReelTimeHelp); - CopyWindowToVram(1, 3); + AddTextPrinterParameterized3(1, FONT_NORMAL, 2, 5, sColors_ReeltimeHelp, 0, gText_ReelTimeHelp); + CopyWindowToVram(1, COPYWIN_FULL); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB(0, 0, 0)); task->tState++; } -static void InfoBox_AwaitPlayerInput(struct Task *task) +static void InfoBox_WaitInput(struct Task *task) { if (JOY_NEW(B_BUTTON | SELECT_BUTTON)) { FillWindowPixelBuffer(1, PIXEL_FILL(0)); ClearWindowTilemap(1); - CopyWindowToVram(1, 1); + CopyWindowToVram(1, COPYWIN_MAP); RemoveWindow(1); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); task->tState++; @@ -3478,14 +3960,14 @@ static void InfoBox_CreateDigitalDisplay(struct Task *task) static void InfoBox_LoadPikaPowerMeter(struct Task *task) { - LoadPikaPowerMeter(sSlotMachine->pikaPower); + LoadPikaPowerMeter(sSlotMachine->pikaPowerBolts); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB(0, 0, 0)); task->tState++; } static void InfoBox_FreeTask(struct Task *task) { - DestroyTask(FindTaskIdByFunc(RunInfoBoxActions)); + DestroyTask(FindTaskIdByFunc(Task_InfoBox)); } #undef tState @@ -3576,7 +4058,7 @@ static bool8 IsDigitalDisplayAnimFinished(void) static void Task_DigitalDisplay(u8 taskId) { - sDigitalDisplayActions[gTasks[taskId].data[0]](&gTasks[taskId]); + sDigitalDisplayTasks[gTasks[taskId].data[0]](&gTasks[taskId]); } static void DigitalDisplay_Idle(struct Task *task) @@ -3605,8 +4087,8 @@ static void SpriteCB_ReelSymbol(struct Sprite *sprite) { sprite->data[2] = sSlotMachine->reelPixelOffsets[sprite->data[0]] + sprite->data[1]; sprite->data[2] %= 120; - sprite->y = sSlotMachine->reelPixelOffsetsWhileStopping[sprite->data[0]] + 28 + sprite->data[2]; - sprite->sheetTileStart = GetSpriteTileStartByTag(GetTagAtRest(sprite->data[0], sprite->data[2] / 24)); + sprite->y = sSlotMachine->reelShockOffsets[sprite->data[0]] + 28 + sprite->data[2]; + sprite->sheetTileStart = GetSpriteTileStartByTag(GetSymbolAtRest(sprite->data[0], sprite->data[2] / 24)); SetSpriteSheetFrameTileNum(sprite); } @@ -3624,32 +4106,44 @@ static void CreateCreditPayoutNumberSprites(void) CreateCoinNumberSprite(x, 23, TRUE, i); } -static void CreateCoinNumberSprite(s16 x, s16 y, bool8 isPayout, s16 a3) +#define sIsPayout data[0] +#define sDigitMin data[1] +#define sDigitMax data[2] +#define sCurNum data[3] // Only used to determine whether the sprite has already been updated to show the correct digit + +static void CreateCoinNumberSprite(s16 x, s16 y, bool8 isPayout, s16 digitMult) { struct Sprite *sprite = &gSprites[CreateSprite(&sSpriteTemplate_CoinNumber, x, y, 13)]; sprite->oam.priority = 2; - sprite->data[0] = isPayout; - sprite->data[1] = a3; - sprite->data[2] = a3 * 10; - sprite->data[3] = -1; + sprite->sIsPayout = isPayout; + sprite->sDigitMin = digitMult; + sprite->sDigitMax = digitMult * 10; + sprite->sCurNum = -1; } static void SpriteCB_CoinNumber(struct Sprite *sprite) { u16 tag = sSlotMachine->coins; - if (sprite->data[0]) + if (sprite->sIsPayout) tag = sSlotMachine->payout; - if (sprite->data[3] != tag) + if (sprite->sCurNum != tag) { - sprite->data[3] = tag; - tag %= (u16)sprite->data[2]; - tag /= (u16)sprite->data[1]; - tag += 7; + // Convert total to current digit + sprite->sCurNum = tag; + tag %= (u16)sprite->sDigitMax; + tag /= (u16)sprite->sDigitMin; + + tag += GFXTAG_NUM_0; sprite->sheetTileStart = GetSpriteTileStartByTag(tag); SetSpriteSheetFrameTileNum(sprite); } } +#undef sIsPayout +#undef sDigitMin +#undef sDigitMax +#undef sCurNum + static void CreateReelBackgroundSprite(void) { u8 spriteId = CreateSprite(&sSpriteTemplate_ReelBackground, 88, 72, 15); @@ -3686,8 +4180,7 @@ static void CreateReelTimePikachuSprite(void) static void DestroyReelTimePikachuSprite(void) { DestroySprite(&gSprites[sSlotMachine->reelTimePikachuSpriteId]); - if (sImageTable_ReelTimePikachu != NULL) - FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); + TRY_FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); } static void SpriteCB_ReelTimePikachu(struct Sprite *sprite) @@ -3777,7 +4270,7 @@ static void SpriteCB_ReelTimeNumbers(struct Sprite *sprite) s16 r0 = (u16)(sSlotMachine->reeltimePixelOffset + sprite->data[7]); r0 %= 40; sprite->y = r0 + 59; - StartSpriteAnimIfDifferent(sprite, GetNearbyReelTimeTag(r0 / 20)); + StartSpriteAnimIfDifferent(sprite, GetReelTimeSymbol(r0 / 20)); } static void CreateReelTimeShadowSprites(void) @@ -3816,10 +4309,8 @@ static void DestroyReelTimeMachineSprites(void) for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeMachineSpriteIds); i++) DestroySprite(&gSprites[sSlotMachine->reelTimeMachineSpriteIds[i]]); - if (sImageTable_ReelTimeMachineAntennae != NULL) - FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae); - if (sImageTable_ReelTimeMachine != NULL) - FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); + TRY_FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae); + TRY_FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeNumberSpriteIds); i++) DestroySprite(&gSprites[sSlotMachine->reelTimeNumberSpriteIds[i]]); @@ -3836,8 +4327,7 @@ static void DestroyReelTimeShadowSprites(void) static void DestroyBrokenReelTimeMachineSprite(void) { DestroySprite(&gSprites[sSlotMachine->reelTimeBrokenMachineSpriteId]); - if (sImageTable_BrokenReelTimeMachine != NULL) - FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); + TRY_FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); } #define sDelayTimer data[0] @@ -4724,135 +5214,233 @@ static void AllocDigitalDisplayGfx(void) sImageTable_DigitalDisplay_DPad[1].size = 0x180; } -static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL] = +static const u8 sReelSymbols[NUM_REELS][SYMBOLS_PER_REEL] = { [LEFT_REEL] = { - GFXTAG_7_RED, - GFXTAG_CHERRY, - GFXTAG_AZURILL, - GFXTAG_REPLAY, - GFXTAG_POWER, - GFXTAG_LOTAD, - GFXTAG_7_BLUE, - GFXTAG_LOTAD, - GFXTAG_CHERRY, - GFXTAG_POWER, - GFXTAG_REPLAY, - GFXTAG_AZURILL, - GFXTAG_7_RED, - GFXTAG_POWER, - GFXTAG_LOTAD, - GFXTAG_REPLAY, - GFXTAG_AZURILL, - GFXTAG_7_BLUE, - GFXTAG_POWER, - GFXTAG_LOTAD, - GFXTAG_REPLAY + SYMBOL_7_RED, + SYMBOL_CHERRY, + SYMBOL_AZURILL, + SYMBOL_REPLAY, + SYMBOL_POWER, + SYMBOL_LOTAD, + SYMBOL_7_BLUE, + SYMBOL_LOTAD, + SYMBOL_CHERRY, + SYMBOL_POWER, + SYMBOL_REPLAY, + SYMBOL_AZURILL, + SYMBOL_7_RED, + SYMBOL_POWER, + SYMBOL_LOTAD, + SYMBOL_REPLAY, + SYMBOL_AZURILL, + SYMBOL_7_BLUE, + SYMBOL_POWER, + SYMBOL_LOTAD, + SYMBOL_REPLAY }, [MIDDLE_REEL] = { - GFXTAG_7_RED, - GFXTAG_CHERRY, - GFXTAG_REPLAY, - GFXTAG_LOTAD, - GFXTAG_AZURILL, - GFXTAG_CHERRY, - GFXTAG_REPLAY, - GFXTAG_POWER, - GFXTAG_POWER, - GFXTAG_LOTAD, - GFXTAG_7_BLUE, - GFXTAG_LOTAD, - GFXTAG_REPLAY, - GFXTAG_CHERRY, - GFXTAG_AZURILL, - GFXTAG_LOTAD, - GFXTAG_REPLAY, - GFXTAG_CHERRY, - GFXTAG_LOTAD, - GFXTAG_REPLAY, - GFXTAG_CHERRY + SYMBOL_7_RED, + SYMBOL_CHERRY, + SYMBOL_REPLAY, + SYMBOL_LOTAD, + SYMBOL_AZURILL, + SYMBOL_CHERRY, + SYMBOL_REPLAY, + SYMBOL_POWER, + SYMBOL_POWER, + SYMBOL_LOTAD, + SYMBOL_7_BLUE, + SYMBOL_LOTAD, + SYMBOL_REPLAY, + SYMBOL_CHERRY, + SYMBOL_AZURILL, + SYMBOL_LOTAD, + SYMBOL_REPLAY, + SYMBOL_CHERRY, + SYMBOL_LOTAD, + SYMBOL_REPLAY, + SYMBOL_CHERRY }, [RIGHT_REEL] = { - GFXTAG_7_RED, - GFXTAG_POWER, - GFXTAG_7_BLUE, - GFXTAG_REPLAY, - GFXTAG_LOTAD, - GFXTAG_AZURILL, - GFXTAG_REPLAY, - GFXTAG_LOTAD, - GFXTAG_POWER, - GFXTAG_AZURILL, - GFXTAG_REPLAY, - GFXTAG_LOTAD, - GFXTAG_AZURILL, - GFXTAG_POWER, - GFXTAG_REPLAY, - GFXTAG_LOTAD, - GFXTAG_AZURILL, - GFXTAG_POWER, - GFXTAG_REPLAY, - GFXTAG_LOTAD, - GFXTAG_CHERRY + SYMBOL_7_RED, + SYMBOL_POWER, + SYMBOL_7_BLUE, + SYMBOL_REPLAY, + SYMBOL_LOTAD, + SYMBOL_AZURILL, + SYMBOL_REPLAY, + SYMBOL_LOTAD, + SYMBOL_POWER, + SYMBOL_AZURILL, + SYMBOL_REPLAY, + SYMBOL_LOTAD, + SYMBOL_AZURILL, + SYMBOL_POWER, + SYMBOL_REPLAY, + SYMBOL_LOTAD, + SYMBOL_AZURILL, + SYMBOL_POWER, + SYMBOL_REPLAY, + SYMBOL_LOTAD, + SYMBOL_CHERRY }, }; -static const u8 sReelTimeTags[] = { +static const u8 sReelTimeSymbols[] = { 1, 0, 5, 4, 3, 2 }; +// Column 0: Normal game +// Column 1: Lucky game static const s16 sInitialReelPositions[NUM_REELS][2] = { [LEFT_REEL] = {0, 6}, [MIDDLE_REEL] = {0, 10}, [RIGHT_REEL] = {0, 2} }; -static const u8 sLuckyRoundProbabilities[][3] = { - {1, 1, 12}, - {1, 1, 14}, - {2, 2, 14}, - {2, 2, 14}, - {2, 3, 16}, - {3, 3, 16} +static const u8 sSpecialDrawOdds[NUM_SLOT_MACHINE_IDS][MAX_BET] = { + [SLOT_MACHINE_UNLUCKIEST] = {1, 1, 12}, + [SLOT_MACHINE_UNLUCKIER] = {1, 1, 14}, + [SLOT_MACHINE_UNLUCKY] = {2, 2, 14}, + [SLOT_MACHINE_LUCKY] = {2, 2, 14}, + [SLOT_MACHINE_LUCKIER] = {2, 3, 16}, + [SLOT_MACHINE_LUCKIEST] = {3, 3, 16} }; -static const u8 sLuckyFlagProbabilities_Top3[][6] = { - {25, 25, 30, 40, 40, 50}, - {25, 25, 30, 30, 35, 35}, - {25, 25, 30, 25, 25, 30} +static const u8 sBiasProbabilities_Special[][NUM_SLOT_MACHINE_IDS] = { + { + // Probabilities for BIAS_STRAIGHT_7 + [SLOT_MACHINE_UNLUCKIEST] = 25, + [SLOT_MACHINE_UNLUCKIER] = 25, + [SLOT_MACHINE_UNLUCKY] = 30, + [SLOT_MACHINE_LUCKY] = 40, + [SLOT_MACHINE_LUCKIER] = 40, + [SLOT_MACHINE_LUCKIEST] = 50 + }, + { + // Probabilities for BIAS_REELTIME + [SLOT_MACHINE_UNLUCKIEST] = 25, + [SLOT_MACHINE_UNLUCKIER] = 25, + [SLOT_MACHINE_UNLUCKY] = 30, + [SLOT_MACHINE_LUCKY] = 30, + [SLOT_MACHINE_LUCKIER] = 35, + [SLOT_MACHINE_LUCKIEST] = 35 + }, + { + // Probabilities for BIAS_MIXED_7 + [SLOT_MACHINE_UNLUCKIEST] = 25, + [SLOT_MACHINE_UNLUCKIER] = 25, + [SLOT_MACHINE_UNLUCKY] = 30, + [SLOT_MACHINE_LUCKY] = 25, + [SLOT_MACHINE_LUCKIER] = 25, + [SLOT_MACHINE_LUCKIEST] = 30 + } }; -static const u8 sLuckyFlagProbabilities_NotTop3[][6] = { - {20, 25, 25, 20, 25, 25}, - {12, 15, 15, 18, 19, 22}, - {25, 25, 25, 30, 30, 40}, - {25, 25, 20, 20, 15, 15}, - {40, 40, 35, 35, 40, 40} +static const u8 sBiasProbabilities_Regular[][NUM_SLOT_MACHINE_IDS] = { + { + // Probabilities for BIAS_POWER + [SLOT_MACHINE_UNLUCKIEST] = 20, + [SLOT_MACHINE_UNLUCKIER] = 25, + [SLOT_MACHINE_UNLUCKY] = 25, + [SLOT_MACHINE_LUCKY] = 20, + [SLOT_MACHINE_LUCKIER] = 25, + [SLOT_MACHINE_LUCKIEST] = 25 + }, + { + // Probabilities for BIAS_AZURILL + [SLOT_MACHINE_UNLUCKIEST] = 12, + [SLOT_MACHINE_UNLUCKIER] = 15, + [SLOT_MACHINE_UNLUCKY] = 15, + [SLOT_MACHINE_LUCKY] = 18, + [SLOT_MACHINE_LUCKIER] = 19, + [SLOT_MACHINE_LUCKIEST] = 22 + }, + { + // Probabilities for BIAS_LOTAD + [SLOT_MACHINE_UNLUCKIEST] = 25, + [SLOT_MACHINE_UNLUCKIER] = 25, + [SLOT_MACHINE_UNLUCKY] = 25, + [SLOT_MACHINE_LUCKY] = 30, + [SLOT_MACHINE_LUCKIER] = 30, + [SLOT_MACHINE_LUCKIEST] = 40 + }, + { + // Probabilities for BIAS_CHERRY + [SLOT_MACHINE_UNLUCKIEST] = 25, + [SLOT_MACHINE_UNLUCKIER] = 25, + [SLOT_MACHINE_UNLUCKY] = 20, + [SLOT_MACHINE_LUCKY] = 20, + [SLOT_MACHINE_LUCKIER] = 15, + [SLOT_MACHINE_LUCKIEST] = 15 + }, + { + // Probabilities for BIAS_REPLAY + [SLOT_MACHINE_UNLUCKIEST] = 40, + [SLOT_MACHINE_UNLUCKIER] = 40, + [SLOT_MACHINE_UNLUCKY] = 35, + [SLOT_MACHINE_LUCKY] = 35, + [SLOT_MACHINE_LUCKIER] = 40, + [SLOT_MACHINE_LUCKIEST] = 40 + } }; -static const u8 sReeltimeProbabilities_UnluckyGame[][17] = { - {243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5}, - { 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5}, - { 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40}, - { 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 45, 45, 45, 100}, - { 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 100}, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6} +// INTENTION: +// As you get more Power bolts, the odds of getting higher yields (3+ spins) +// increases modestly. There's a high chance of getting at least 1 spin, which +// will clear your Power bolts. +// +// NOTE: The way these probabilities are drawn significantly skews the odds +// toward drawing 0 spins: +// +// | Up to N bolts | Prob intended | Prob actual | +// |---------------|---------------|-------------| +// | 2 | 94% | 99% | +// | 6 | 31% | 57% | +// | 12 | 16% | 44% | +// | 15 | 2% | 31% | +// | 16 | 2% | 31% | +static const u8 sReelTimeProbabilities_NormalGame[][17] = { + {243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5}, // 0 spins + { 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5}, // 1 spin + { 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40}, // 2 spins + { 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 45, 45, 45, 100}, // 3 spins + { 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 100}, // 4 spins + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6} // 5 spins }; +// INTENTION: +// As you get more Power bolts, the odds of getting higher yields (3+ spins) +// increases substantially. There is always a high chance of getting no spins, +// which lets you keep your Power bolts. +// +// NOTE: The way these probabilities are drawn significantly skews the odds +// toward drawing 0 spins: +// +// | Up to N bolts | Prob intended | Prob actual | +// |---------------|---------------|-------------| +// | 2 | 94% | 99% | +// | 6 | 78% | 96% | +// | 12 | 63% | 88% | +// | 15 | 27% | 58% | +// | 16 | 2% | 33% | static const u8 sReelTimeProbabilities_LuckyGame[][17] = { - { 243, 243, 243, 200, 200, 200, 200, 160, 160, 160, 160, 160, 160, 70, 70, 70, 5}, - { 5, 5, 5, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 2, 2, 2, 6}, - { 4, 4, 4, 25, 25, 25, 25, 30, 30, 30, 30, 30, 30, 40, 40, 40, 35}, - { 2, 2, 2, 3, 3, 3, 3, 30, 30, 30, 30, 30, 30, 100, 100, 100, 50}, - { 1, 1, 1, 2, 2, 2, 2, 30, 30, 30, 30, 30, 30, 40, 40, 40, 100}, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 60} + { 243, 243, 243, 200, 200, 200, 200, 160, 160, 160, 160, 160, 160, 70, 70, 70, 5}, // 0 spins + { 5, 5, 5, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 2, 2, 2, 6}, // 1 spin + { 4, 4, 4, 25, 25, 25, 25, 30, 30, 30, 30, 30, 30, 40, 40, 40, 35}, // 2 spins + { 2, 2, 2, 3, 3, 3, 3, 30, 30, 30, 30, 30, 30, 100, 100, 100, 50}, // 3 spins + { 1, 1, 1, 2, 2, 2, 2, 30, 30, 30, 30, 30, 30, 40, 40, 40, 100}, // 4 spins + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 60} // 5 spins }; static const u16 sReelTimeExplodeProbability[] = { 128, 175, 200, 225, 256 }; -static const u16 sReelIncrementTable[][2] = { +// Column 0: Probability of half-speed +// Column 1: Base probability of quarter-speed +static const u16 sReelTimeSpeed_Probabilities[][2] = { {10, 5}, {10, 10}, {10, 15}, @@ -4860,55 +5448,62 @@ static const u16 sReelIncrementTable[][2] = { {10, 35} }; -static const u16 sReelTimeBonusIncrementTable[] = { +// Boosted odds of quarter speed during ReelTime +static const u16 sQuarterSpeed_ProbabilityBoost[] = { 0, 5, 10, 15, 20 }; -// tentative name -static const u8 sBiasTags[] = { - GFXTAG_REPLAY, GFXTAG_CHERRY, GFXTAG_LOTAD, GFXTAG_AZURILL, GFXTAG_POWER, GFXTAG_7_RED, GFXTAG_7_RED, GFXTAG_7_RED +static const u8 sBiasSymbols[] = { + SYMBOL_REPLAY, // BIAS_REPLAY + SYMBOL_CHERRY, // BIAS_CHERRY + SYMBOL_LOTAD, // BIAS_LOTAD + SYMBOL_AZURILL, // BIAS_AZURILL + SYMBOL_POWER, // BIAS_POWER + SYMBOL_7_RED, // BIAS_REELTIME + SYMBOL_7_RED, // BIAS_MIXED_7 + SYMBOL_7_RED // BIAS_STRAIGHT_7 }; -static const u16 sLuckyFlagSettings_Top3[] = { - LUCKY_BIAS_777, LUCKY_BIAS_REELTIME, LUCKY_BIAS_MIXED_777 +static const u16 sBiasesSpecial[] = { + BIAS_STRAIGHT_7, BIAS_REELTIME, BIAS_MIXED_7 }; -static const u16 sLuckyFlagSettings_NotTop3[] = { - LUCKY_BIAS_POWER, LUCKY_BIAS_AZURILL, LUCKY_BIAS_LOTAD, LUCKY_BIAS_CHERRY, LUCKY_BIAS_REPLAY +static const u16 sBiasesRegular[] = { + BIAS_POWER, BIAS_AZURILL, BIAS_LOTAD, BIAS_CHERRY, BIAS_REPLAY }; -static const u8 sSymToMatch[] = { - [GFXTAG_7_RED] = MATCHED_777_RED, - [GFXTAG_7_BLUE] = MATCHED_777_BLUE, - [GFXTAG_AZURILL] = MATCHED_AZURILL, - [GFXTAG_LOTAD] = MATCHED_LOTAD, - [GFXTAG_CHERRY] = MATCHED_1CHERRY, - [GFXTAG_POWER] = MATCHED_POWER, - [GFXTAG_REPLAY] = MATCHED_REPLAY +static const u8 sSymbolToMatch[] = { + [SYMBOL_7_RED] = MATCH_RED_7, + [SYMBOL_7_BLUE] = MATCH_BLUE_7, + [SYMBOL_AZURILL] = MATCH_AZURILL, + [SYMBOL_LOTAD] = MATCH_LOTAD, + [SYMBOL_CHERRY] = MATCH_CHERRY, + [SYMBOL_POWER] = MATCH_POWER, + [SYMBOL_REPLAY] = MATCH_REPLAY }; static const u16 sSlotMatchFlags[] = { - [MATCHED_1CHERRY] = 1 << MATCHED_1CHERRY, - [MATCHED_2CHERRY] = 1 << MATCHED_2CHERRY, - [MATCHED_REPLAY] = 1 << MATCHED_REPLAY, - [MATCHED_LOTAD] = 1 << MATCHED_LOTAD, - [MATCHED_AZURILL] = 1 << MATCHED_AZURILL, - [MATCHED_POWER] = 1 << MATCHED_POWER, - [MATCHED_777_MIXED] = 1 << MATCHED_777_MIXED, - [MATCHED_777_RED] = 1 << MATCHED_777_RED, - [MATCHED_777_BLUE] = 1 << MATCHED_777_BLUE + [MATCH_CHERRY] = 1 << MATCH_CHERRY, + [MATCH_TOPBOT_CHERRY] = 1 << MATCH_TOPBOT_CHERRY, + [MATCH_REPLAY] = 1 << MATCH_REPLAY, + [MATCH_LOTAD] = 1 << MATCH_LOTAD, + [MATCH_AZURILL] = 1 << MATCH_AZURILL, + [MATCH_POWER] = 1 << MATCH_POWER, + [MATCH_MIXED_7] = 1 << MATCH_MIXED_7, + [MATCH_RED_7] = 1 << MATCH_RED_7, + [MATCH_BLUE_7] = 1 << MATCH_BLUE_7 }; static const u16 sSlotPayouts[] = { - [MATCHED_1CHERRY] = 2, - [MATCHED_2CHERRY] = 4, - [MATCHED_REPLAY] = 0, - [MATCHED_LOTAD] = 6, - [MATCHED_AZURILL] = 12, - [MATCHED_POWER] = 3, - [MATCHED_777_MIXED] = 90, - [MATCHED_777_RED] = 300, - [MATCHED_777_BLUE] = 300 + [MATCH_CHERRY] = 2, + [MATCH_TOPBOT_CHERRY] = 4, + [MATCH_REPLAY] = 0, + [MATCH_LOTAD] = 6, + [MATCH_AZURILL] = 12, + [MATCH_POWER] = 3, + [MATCH_MIXED_7] = 90, + [MATCH_RED_7] = 300, + [MATCH_BLUE_7] = 300 }; static const s16 sDigitalDisplay_SpriteCoords[][2] = { @@ -5072,12 +5667,12 @@ static void (*const sDigitalDisplaySceneExitCallbacks[])(void) = { [DIG_DISPLAY_BONUS_BIG] = EndDigitalDisplayScene_Win }; -static const struct OamData sOam_8x8 = +static const struct OamData sOam_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -5094,7 +5689,7 @@ static const struct OamData sOam_8x16 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x16), .x = 0, @@ -5111,7 +5706,7 @@ static const struct OamData sOam_16x16 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -5128,7 +5723,7 @@ static const struct OamData sOam_16x32 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), .x = 0, @@ -5145,7 +5740,7 @@ static const struct OamData sOam_32x32 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -5162,7 +5757,7 @@ static const struct OamData sOam_32x64 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x64), .x = 0, @@ -5179,7 +5774,7 @@ static const struct OamData sOam_64x32 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -5196,7 +5791,7 @@ static const struct OamData sOam_64x64 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -5221,7 +5816,7 @@ static const struct SpriteFrameImage sImageTable_ReelTimeNumbers[] = static const struct SpriteFrameImage sImageTable_ReelTimeShadow[] = { gSlotMachineReelTimeShadow, 0x200 }; static const struct SpriteFrameImage sImageTable_ReelTimeNumberGap[] = { gSlotMachineReelTimeNumberGap_Gfx, 0x40 }; -static const struct SpriteFrameImage sImageTable_ReelTimeBolt[] = +static const struct SpriteFrameImage sImageTable_ReelTimeBolt[] = { { gSlotMachineReelTimeBolt0, 0x100 }, { gSlotMachineReelTimeBolt1, 0x100 }, @@ -5229,8 +5824,8 @@ static const struct SpriteFrameImage sImageTable_ReelTimeBolt[] = static const struct SpriteFrameImage sImageTable_ReelTimePikachuAura[] = { gSlotMachineReelTimePikaAura, 0x400 }; -static const struct SpriteFrameImage sImageTable_ReelTimeExplosion[] = -{ +static const struct SpriteFrameImage sImageTable_ReelTimeExplosion[] = +{ { gSlotMachineReelTimeExplosion0, 0x200 }, { gSlotMachineReelTimeExplosion1, 0x200 }, }; @@ -5239,13 +5834,13 @@ static const struct SpriteFrameImage sImageTable_ReelTimeDuck[] = { gSlotMachine static const struct SpriteFrameImage sImageTable_ReelTimeSmoke[] = { gSlotMachineReelTimeSmoke, 0x80}; static const struct SpriteFrameImage sImageTable_PikaPowerBolt[] = { gSlotMachinePikaPowerBolt, 0x20}; -static const union AnimCmd sAnim_SingleFrame[] = +static const union AnimCmd sAnim_SingleFrame[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END }; -static const union AnimCmd sAnim_ReelTimeDuck[] = +static const union AnimCmd sAnim_ReelTimeDuck[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_JUMP(0) @@ -5510,367 +6105,367 @@ static const union AffineAnimCmd *const sAffineAnims_PikaPowerBolt[] = static const struct SpriteTemplate sSpriteTemplate_ReelSymbol = { - .tileTag = GFXTAG_SYMBOLS_START, - .paletteTag = PALTAG_REEL, - .oam = &sOam_32x32, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = GFXTAG_SYMBOLS_START, + .paletteTag = PALTAG_REEL, + .oam = &sOam_32x32, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_ReelSymbol }; static const struct SpriteTemplate sSpriteTemplate_CoinNumber = { - .tileTag = GFXTAG_NUMBERS_START, - .paletteTag = PALTAG_MISC, - .oam = &sOam_8x16, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = GFXTAG_NUMBERS_START, + .paletteTag = PALTAG_MISC, + .oam = &sOam_8x16, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_CoinNumber }; static const struct SpriteTemplate sSpriteTemplate_ReelBackground = { - .tileTag = GFXTAG_REEL_BG, - .paletteTag = PALTAG_REEL, - .oam = &sOam_64x64, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = GFXTAG_REEL_BG, + .paletteTag = PALTAG_REEL, + .oam = &sOam_64x64, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachu = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_REEL_TIME_PIKACHU, - .oam = &sOam_64x64, - .anims = sAnims_ReelTimePikachu, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_REEL_TIME_PIKACHU, + .oam = &sOam_64x64, + .anims = sAnims_ReelTimePikachu, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_ReelTimePikachu }; static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachineAntennae = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_REEL_TIME_MISC, - .oam = &sOam_8x16, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_REEL_TIME_MISC, + .oam = &sOam_8x16, .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachine = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_REEL_TIME_MACHINE, - .oam = &sOam_8x16, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_REEL_TIME_MACHINE, + .oam = &sOam_8x16, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_BrokenReelTimeMachine = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_REEL_TIME_MACHINE, - .oam = &sOam_8x16, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_REEL_TIME_MACHINE, + .oam = &sOam_8x16, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumbers = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_MISC, - .oam = &sOam_16x16, - .anims = sAnims_ReelTimeNumbers, - .images = sImageTable_ReelTimeNumbers, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_MISC, + .oam = &sOam_16x16, + .anims = sAnims_ReelTimeNumbers, + .images = sImageTable_ReelTimeNumbers, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_ReelTimeNumbers }; static const struct SpriteTemplate sSpriteTemplate_ReelTimeShadow = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_MISC, - .oam = &sOam_16x16, - .anims = sAnims_SingleFrame, - .images = sImageTable_ReelTimeShadow, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_MISC, + .oam = &sOam_16x16, + .anims = sAnims_SingleFrame, + .images = sImageTable_ReelTimeShadow, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumberGap = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_MISC, - .oam = &sOam_16x16, - .anims = sAnims_SingleFrame, - .images = sImageTable_ReelTimeNumberGap, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_MISC, + .oam = &sOam_16x16, + .anims = sAnims_SingleFrame, + .images = sImageTable_ReelTimeNumberGap, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_ReelTimeBolt = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_MISC, - .oam = &sOam_16x32, - .anims = sAnims_ReelTimeBolt, - .images = sImageTable_ReelTimeBolt, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_MISC, + .oam = &sOam_16x32, + .anims = sAnims_ReelTimeBolt, + .images = sImageTable_ReelTimeBolt, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_ReelTimeBolt }; static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_PIKA_AURA, - .oam = &sOam_32x64, - .anims = sAnims_SingleFrame, - .images = sImageTable_ReelTimePikachuAura, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_PIKA_AURA, + .oam = &sOam_32x64, + .anims = sAnims_SingleFrame, + .images = sImageTable_ReelTimePikachuAura, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_ReelTimePikachuAura }; static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_EXPLOSION, - .oam = &sOam_32x32, - .anims = sAnims_ReelTimeExplosion, - .images = sImageTable_ReelTimeExplosion, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_EXPLOSION, + .oam = &sOam_32x32, + .anims = sAnims_ReelTimeExplosion, + .images = sImageTable_ReelTimeExplosion, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_ReelTimeExplosion }; static const struct SpriteTemplate sSpriteTemplate_ReelTimeDuck = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_MISC, - .oam = &sOam_8x8, - .anims = sAnims_ReelTimeDuck, - .images = sImageTable_ReelTimeDuck, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_MISC, + .oam = &sOam_8x8, + .anims = sAnims_ReelTimeDuck, + .images = sImageTable_ReelTimeDuck, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_ReelTimeDuck }; static const struct SpriteTemplate sSpriteTemplate_ReelTimeSmoke = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_MISC, - .oam = &sOam_16x16, - .anims = sAnims_SingleFrame, - .images = sImageTable_ReelTimeSmoke, - .affineAnims = sAffineAnims_ReelTimeSmoke, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_MISC, + .oam = &sOam_16x16, + .anims = sAnims_SingleFrame, + .images = sImageTable_ReelTimeSmoke, + .affineAnims = sAffineAnims_ReelTimeSmoke, .callback = SpriteCB_ReelTimeSmoke }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reel = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_8x8, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Time = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_8x8, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Insert = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_8x8, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Stop = { - .tileTag = 18, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_8x8, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = GFXTAG_STOP, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Win = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_64x32, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_64x32, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Lose = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_64x32, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_64x32, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Bonus = { - .tileTag = 19, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_8x8, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = GFXTAG_BONUS, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Big = { - .tileTag = 20, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_8x8, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = GFXTAG_BIG, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reg = { - .tileTag = 21, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_8x8, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = GFXTAG_REG, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_AButton = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_32x32, - .anims = sAnims_DigitalDisplay_AButton, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_32x32, + .anims = sAnims_DigitalDisplay_AButton, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Smoke = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_8x8, - .anims = sAnims_SingleFrame, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Number = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_16x16, - .anims = sAnims_DigitalDisplay_Number, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_16x16, + .anims = sAnims_DigitalDisplay_Number, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Pokeball = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_8x8, - .anims = sAnims_DigitalDisplay_Pokeball, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_DigitalDisplay_Pokeball, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_DPad = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_DIG_DISPLAY, - .oam = &sOam_8x8, - .anims = sAnims_DigitalDisplay_DPad, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_DIG_DISPLAY, + .oam = &sOam_8x8, + .anims = sAnims_DigitalDisplay_DPad, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; static const struct SpriteTemplate sSpriteTemplate_PikaPowerBolt = { - .tileTag = 0xFFFF, - .paletteTag = PALTAG_MISC, - .oam = &sOam_8x8, - .anims = sAnims_SingleFrame, - .images = sImageTable_PikaPowerBolt, - .affineAnims = sAffineAnims_PikaPowerBolt, + .tileTag = TAG_NONE, + .paletteTag = PALTAG_MISC, + .oam = &sOam_8x8, + .anims = sAnims_SingleFrame, + .images = sImageTable_PikaPowerBolt, + .affineAnims = sAffineAnims_PikaPowerBolt, .callback = SpriteCB_PikaPowerBolt }; static const struct Subsprite sSubsprites_ReelBackground[] = { { - .x = -64, - .y = -64, + .x = -64, + .y = -64, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileOffset = 0, - .priority = 3, + .tileOffset = 0, + .priority = 3, }, { - .x = 0, - .y = -64, + .x = 0, + .y = -64, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileOffset = 0, - .priority = 3, + .tileOffset = 0, + .priority = 3, }, { .x = -64, - .y = 0, + .y = 0, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileOffset = 0, - .priority = 3, + .tileOffset = 0, + .priority = 3, }, { - .x = 0, - .y = 0, + .x = 0, + .y = 0, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileOffset = 0, - .priority = 3, + .tileOffset = 0, + .priority = 3, } }; @@ -5881,52 +6476,52 @@ static const struct SubspriteTable sSubspriteTable_ReelBackground[] = static const struct Subsprite sSubsprites_ReelTimeMachineAntennae[] = { - { - .x = -32, - .y = -12, + { + .x = -32, + .y = -12, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileOffset = 0, + .tileOffset = 0, .priority = 1, }, - { - .x = 0, - .y = -12, + { + .x = 0, + .y = -12, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 4, .priority = 1, }, - { - .x = -32, - .y = -4, + { + .x = -32, + .y = -4, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileOffset = 8, + .tileOffset = 8, .priority = 1, }, - { - .x = 0, - .y = -4, + { + .x = 0, + .y = -4, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 12, .priority = 1, }, - { - .x = -32, - .y = 4, + { + .x = -32, + .y = 4, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 16, .priority = 1, }, - { - .x = 0, - .y = 4, + { + .x = 0, + .y = 4, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileOffset = 20, + .tileOffset = 20, .priority = 1 } }; @@ -5938,25 +6533,25 @@ static const struct SubspriteTable sSubspriteTable_ReelTimeMachineAntennae[] = static const struct Subsprite sSubsprites_ReelTimeMachine[] = { - { - .x = -32, - .y = -20, + { + .x = -32, + .y = -20, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .tileOffset = 0, .priority = 1, }, - { - .x = -32, - .y = 12, + { + .x = -32, + .y = 12, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 32, .priority = 1, }, - { - .x = 0, - .y = 12, + { + .x = 0, + .y = 12, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 36, @@ -5971,41 +6566,41 @@ static const struct SubspriteTable sSubspriteTable_ReelTimeMachine[] = static const struct Subsprite sSubsprites_BrokenReelTimeMachine[] = { - { - .x = -32, - .y = -24, + { + .x = -32, + .y = -24, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .tileOffset = 0, .priority = 1, }, - { - .x = -32, - .y = 8, + { + .x = -32, + .y = 8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 32, .priority = 1, }, - { - .x = 0, - .y = 8, + { + .x = 0, + .y = 8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 36, .priority = 1, }, - { - .x = -32, - .y = 16, + { + .x = -32, + .y = 16, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 40, .priority = 1, }, - { - .x = 0, - .y = 16, + { + .x = 0, + .y = 16, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 44, @@ -6020,33 +6615,33 @@ static const struct SubspriteTable sSubspriteTable_BrokenReelTimeMachine[] = static const struct Subsprite sSubsprites_ReelTimeShadow[] = { - { - .x = -32, - .y = -8, + { + .x = -32, + .y = -8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 0, .priority = 1, }, - { - .x = 0, - .y = -8, + { + .x = 0, + .y = -8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 4, .priority = 1, }, - { - .x = -32, - .y = 0, + { + .x = -32, + .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 8, .priority = 1, }, - { - .x = 0, - .y = 0, + { + .x = 0, + .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 12, @@ -6061,25 +6656,25 @@ static const struct SubspriteTable sSubspriteTable_ReelTimeShadow[] = static const struct Subsprite sSubsprites_ReelTimeNumberGap[] = { - { - .x = -8, - .y = -12, + { + .x = -8, + .y = -12, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 0, .priority = 1, }, - { - .x = -8, - .y = -4, + { + .x = -8, + .y = -4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 0, .priority = 1, }, - { - .x = -8, - .y = 4, + { + .x = -8, + .y = 4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 0, @@ -6094,41 +6689,41 @@ static const struct SubspriteTable sSubspriteTable_ReelTimeNumberGap[] = static const struct Subsprite sSubsprites_DigitalDisplay_Reel[] = { - { - .x = -32, - .y = -24, + { + .x = -32, + .y = -24, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .tileOffset = 0, .priority = 3, }, - { - .x = -32, - .y = 8, + { + .x = -32, + .y = 8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 32, .priority = 3, }, - { - .x = 0, - .y = 8, + { + .x = 0, + .y = 8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 36, .priority = 3, }, - { - .x = -32, - .y = 16, + { + .x = -32, + .y = 16, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 40, .priority = 3, }, - { - .x = 0, - .y = 16, + { + .x = 0, + .y = 16, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 44, @@ -6143,33 +6738,33 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Reel[] = static const struct Subsprite sSubsprites_DigitalDisplay_Time[] = { - { - .x = -32, - .y = -8, + { + .x = -32, + .y = -8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 0, .priority = 3, }, - { - .x = 0, - .y = -8, + { + .x = 0, + .y = -8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 4, .priority = 3, }, - { - .x = -32, - .y = 0, + { + .x = -32, + .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 8, .priority = 3, }, - { - .x = 0, - .y = 0, + { + .x = 0, + .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 12, @@ -6184,33 +6779,33 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Time[] = static const struct Subsprite sSubsprites_DigitalDisplay_Insert[] = { - { - .x = -32, - .y = -8, + { + .x = -32, + .y = -8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 0, .priority = 3, }, - { - .x = 0, - .y = -8, + { + .x = 0, + .y = -8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 4, .priority = 3, }, - { - .x = -32, - .y = 0, + { + .x = -32, + .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 8, .priority = 3, }, - { - .x = 0, - .y = 0, + { + .x = 0, + .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 12, @@ -6225,33 +6820,33 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Insert[] = static const struct Subsprite sSubsprites_DigitalDisplay_Unused1[] = { - { - .x = -32, - .y = -8, + { + .x = -32, + .y = -8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 0, .priority = 3, }, - { - .x = 0, - .y = -8, + { + .x = 0, + .y = -8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 4, .priority = 3, }, - { - .x = -32, - .y = 0, + { + .x = -32, + .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 8, .priority = 3, }, - { - .x = 0, - .y = 0, + { + .x = 0, + .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 12, @@ -6266,49 +6861,49 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Unused1[] = static const struct Subsprite sSubsprites_DigitalDisplay_Win[] = { - { - .x = -32, - .y = -12, + { + .x = -32, + .y = -12, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 0, .priority = 3, }, - { - .x = 0, - .y = -12, + { + .x = 0, + .y = -12, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 4, .priority = 3, }, - { - .x = -32, - .y = -4, + { + .x = -32, + .y = -4, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 8, .priority = 3, }, - { - .x = 0, - .y = -4, + { + .x = 0, + .y = -4, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 12, .priority = 3, }, - { - .x = -32, - .y = 4, + { + .x = -32, + .y = 4, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 16, .priority = 3, }, - { - .x = 0, - .y = 4, + { + .x = 0, + .y = 4, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 20, @@ -6324,8 +6919,8 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Win[] = static const struct Subsprite sSubsprites_DigitalDisplay_Smoke[] = { { - .x = -16, - .y = -16, + .x = -16, + .y = -16, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), .tileOffset = 0, @@ -6336,8 +6931,8 @@ static const struct Subsprite sSubsprites_DigitalDisplay_Smoke[] = static const struct Subsprite sSubsprites_DigitalDisplay_Unused2[] = { { - .x = -8, - .y = -8, + .x = -8, + .y = -8, .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), .tileOffset = 16, @@ -6357,97 +6952,97 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Unused2[] = static const struct Subsprite sSubsprites_DigitalDisplay_Pokeball[] = { - { - .x = -24, - .y = -24, + { + .x = -24, + .y = -24, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 0, .priority = 3, }, - { - .x = 8, - -24, + { + .x = 8, + -24, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 4, .priority = 3, }, - { - .x = -24, - .y = -16, + { + .x = -24, + .y = -16, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 6, .priority = 3, }, - { - .x = 8, - .y = -16, + { + .x = 8, + .y = -16, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 10, .priority = 3, }, - { - .x = -24, - .y = -8, + { + .x = -24, + .y = -8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 12, .priority = 3, }, - { - .x = 8, - .y = -8, + { + .x = 8, + .y = -8, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 16, .priority = 3, }, - { - .x = -24, - .y = 0, + { + .x = -24, + .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 18, .priority = 3, }, - { - .x = 8, - .y = 0, + { + .x = 8, + .y = 0, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 22, .priority = 3, }, - { - .x = -24, - .y = 8, + { + .x = -24, + .y = 8, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 24, .priority = 3, }, - { - .x = 8, - .y = 8, + { + .x = 8, + .y = 8, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 28, .priority = 3, }, - { - .x = -24, - .y = 16, + { + .x = -24, + .y = 16, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 30, .priority = 3, }, - { - .x = 8, - .y = 16, + { + .x = 8, + .y = 16, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 34, @@ -6462,25 +7057,25 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Pokeball[] = static const struct Subsprite sSubsprites_DigitalDisplay_DPad[] = { - { - .x = -16, - .y = -12, + { + .x = -16, + .y = -12, .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .tileOffset = 0, .priority = 3, }, - { - .x = -16, - .y = 4, + { + .x = -16, + .y = 4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 8, .priority = 3, }, - { - .x = 0, - .y = 4, + { + .x = 0, + .y = 4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 10, @@ -6495,17 +7090,17 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_DPad[] = static const struct Subsprite sSubsprites_DigitalDisplay_StopS[] = { - { - .x = -8, - .y = -8, + { + .x = -8, + .y = -8, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 0, .priority = 3, }, - { - .x = -8, - .y = 0, + { + .x = -8, + .y = 0, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 8, @@ -6520,17 +7115,17 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopS[] = static const struct Subsprite sSubsprites_DigitalDisplay_StopT[] = { - { - .x = -8, - .y = -8, + { + .x = -8, + .y = -8, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 2, .priority = 3, }, - { - .x = -8, - .y = 0, + { + .x = -8, + .y = 0, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 10, @@ -6545,17 +7140,17 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopT[] = static const struct Subsprite sSubsprites_DigitalDisplay_StopO[] = { - { - .x = -8, - .y = -8, + { + .x = -8, + .y = -8, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 4, .priority = 3, }, - { - .x = -8, - .y = 0, + { + .x = -8, + .y = 0, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 12, @@ -6570,17 +7165,17 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopO[] = static const struct Subsprite sSubsprites_DigitalDisplay_StopP[] = { - { - .x = -8, - .y = -8, + { + .x = -8, + .y = -8, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 6, .priority = 3, }, - { - .x = -8, - .y = 0, + { + .x = -8, + .y = 0, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 14, @@ -6595,17 +7190,17 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopP[] = static const struct Subsprite sSubsprites_DigitalDisplay_BonusB[] = { - { - .x = -8, - .y = -8, + { + .x = -8, + .y = -8, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 0, .priority = 3, }, - { - .x = -8, - .y = 0, + { + .x = -8, + .y = 0, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 8, @@ -6620,17 +7215,17 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusB[] = static const struct Subsprite sSubsprites_DigitalDisplay_BonusO[] = { - { - .x = -4, - .y = -8, + { + .x = -4, + .y = -8, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 2, .priority = 3, }, - { - .x = -4, - .y = 0, + { + .x = -4, + .y = 0, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 10, @@ -6645,17 +7240,17 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusO[] = static const struct Subsprite sSubsprites_DigitalDisplay_BonusN[] = { - { - .x = -8, - .y = -8, + { + .x = -8, + .y = -8, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), - .tileOffset = 3, - .priority = 3, + .tileOffset = 3, + .priority = 3, }, - { - .x = -8, - .y = 0, + { + .x = -8, + .y = 0, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 11, @@ -6670,17 +7265,17 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusN[] = static const struct Subsprite sSubsprites_DigitalDisplay_BonusU[] = { - { - .x = -4, - .y = -8, + { + .x = -4, + .y = -8, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 5, .priority = 3, }, - { - .x = -4, - .y = 0, + { + .x = -4, + .y = 0, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 13, @@ -6695,17 +7290,17 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusU[] = static const struct Subsprite sSubsprites_DigitalDisplay_BonusS[] = { - { - .x = -8, - .y = -8, + { + .x = -8, + .y = -8, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 6, .priority = 3, }, - { - .x = -8, - .y = 0, + { + .x = -8, + .y = 0, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 14, @@ -6720,49 +7315,49 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusS[] = static const struct Subsprite sSubsprites_DigitalDisplay_BigB[] = { - { - .x = -12, - .y = -12, + { + .x = -12, + .y = -12, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 0, .priority = 3, }, - { - .x = 4, - .y = -12, + { + .x = 4, + .y = -12, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 2, .priority = 3, }, - { - .x = -12, - .y = -4, + { + .x = -12, + .y = -4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 8, .priority = 3, }, - { - .x = 4, - .y = -4, + { + .x = 4, + .y = -4, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 10, .priority = 3, }, - { - .x = -12, - .y = 4, + { + .x = -12, + .y = 4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 16, .priority = 3, }, - { - .x = 4, - .y = 4, + { + .x = 4, + .y = 4, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 18, @@ -6777,25 +7372,25 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigB[] = static const struct Subsprite sSubsprites_DigitalDisplay_BigI[] = { - { - .x = -8, - .y = -12, + { + .x = -8, + .y = -12, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 3, .priority = 3, }, - { - .x = -8, - .y = -4, + { + .x = -8, + .y = -4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 11, .priority = 3, }, - { - .x = -8, - .y = 4, + { + .x = -8, + .y = 4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 19, @@ -6810,49 +7405,49 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigI[] = static const struct Subsprite sSubsprites_DigitalDisplay_BigG[] = { - { - .x = -12, - .y = -12, + { + .x = -12, + .y = -12, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 5, .priority = 3, }, - { - .x = 4, - .y = -12, + { + .x = 4, + .y = -12, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 7, .priority = 3, }, - { - .x = -12, - .y = -4, + { + .x = -12, + .y = -4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 13, .priority = 3, }, - { - .x = 4, - .y = -4, + { + .x = 4, + .y = -4, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 15, .priority = 3, }, - { - .x = -12, - .y = 4, + { + .x = -12, + .y = 4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 21, .priority = 3, }, - { - .x = 4, - .y = 4, + { + .x = 4, + .y = 4, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 23, @@ -6867,49 +7462,49 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigG[] = static const struct Subsprite sSubsprites_DigitalDisplay_RegR[] = { - { - .x = -12, - .y = -12, + { + .x = -12, + .y = -12, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 0, .priority = 3, }, - { - .x = 4, - .y = -12, + { + .x = 4, + .y = -12, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 2, .priority = 3, }, - { - .x = -12, - .y = -4, + { + .x = -12, + .y = -4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 8, .priority = 3, }, - { - .x = 4, - .y = -4, + { + .x = 4, + .y = -4, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 10, .priority = 3, }, - { - .x = -12, - .y = 4, + { + .x = -12, + .y = 4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 16, .priority = 3, }, - { - .x = 4, - .y = 4, + { + .x = 4, + .y = 4, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 18, @@ -6924,25 +7519,25 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegR[] = static const struct Subsprite sSubsprites_DigitalDisplay_RegE[] = { - { - .x = -8, - .y = -12, + { + .x = -8, + .y = -12, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 3, .priority = 3, }, - { - .x = -8, - .y = -4, + { + .x = -8, + .y = -4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 11, .priority = 3, }, - { - .x = -8, - .y = 4, + { + .x = -8, + .y = 4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 19, @@ -6957,49 +7552,49 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegE[] = static const struct Subsprite sSubsprites_DigitalDisplay_RegG[] = { - { - .x = -12, - .y = -12, + { + .x = -12, + .y = -12, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 5, .priority = 3, }, - { - .x = 4, - .y = -12, + { + .x = 4, + .y = -12, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 7, .priority = 3, }, - { - .x = -12, - .y = -4, + { + .x = -12, + .y = -4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 13, .priority = 3, }, - { - .x = 4, - .y = -4, + { + .x = 4, + .y = -4, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 15, .priority = 3, }, - { - .x = -12, - .y = 4, + { + .x = -12, + .y = 4, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 21, .priority = 3, }, - { - .x = 4, - .y = 4, + { + .x = 4, + .y = 4, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .tileOffset = 23, @@ -7102,18 +7697,18 @@ static const struct SpriteSheet sSlotMachineSpriteSheets[22] = static const u8 *const sReelBackground_Tilemap = gSlotMachineReelBackground_Tilemap; -static const u16 sUnused[] = +static const u16 sUnusedColors[] = { - 0x6F7B, - 0x6968, - 0x36AB, - 0x7FFF, - 0x5750, - 0x7EC0, - 0x02BA, - 0x02BA, - 0x01FD, - 0x01FD, + RGB(27, 27, 27), + RGB(8, 11, 26), + RGB(11, 21, 13), + RGB(31, 31, 31), + RGB(16, 26, 21), + RGB(0, 22, 31), + RGB(26, 21, 0), + RGB(26, 21, 0), + RGB(29, 15, 0), + RGB(29, 15, 0), }; // The Bet 2 and 3 match line palettes are duplicated unnecessarily @@ -7141,9 +7736,9 @@ static const u16 *const sDarkMatchLinePalTable[NUM_MATCH_LINES] = }; static const u8 sMatchLinePalOffsets[NUM_MATCH_LINES] = { - [MATCH_MIDDLE_ROW] = 74, - [MATCH_TOP_ROW] = 75, - [MATCH_BOTTOM_ROW] = 76, + [MATCH_MIDDLE_ROW] = 74, + [MATCH_TOP_ROW] = 75, + [MATCH_BOTTOM_ROW] = 76, [MATCH_NWSE_DIAG] = 78, // Diag colors flipped for some reason [MATCH_NESW_DIAG] = 77 // Doesn't matter as both are identical }; @@ -7151,8 +7746,8 @@ static const u8 sMatchLinePalOffsets[NUM_MATCH_LINES] = { static const u8 sBetToMatchLineIds[MAX_BET][2] = { {MATCH_MIDDLE_ROW, MATCH_MIDDLE_ROW}, // Bet 1 - {MATCH_TOP_ROW, MATCH_BOTTOM_ROW}, // Bet 2 - {MATCH_NWSE_DIAG, MATCH_NESW_DIAG}, // Bet 3 + {MATCH_TOP_ROW, MATCH_BOTTOM_ROW}, // Bet 2 + {MATCH_NWSE_DIAG, MATCH_NESW_DIAG}, // Bet 3 }; static const u8 sMatchLinesPerBet[MAX_BET] = { 1, 2, 2 }; @@ -7182,7 +7777,10 @@ static const u16 *const sPokeballShiningPalTable[] = }; static const u16 *const sDigitalDisplay_Pal = gSlotMachineDigitalDisplay_Pal; -static const u16 sUnkPalette[] = INCBIN_U16("graphics/slot_machine/85A8524.bin"); +static const u16 sUnkPalette[16] = { + [1] = RGB_WHITEALPHA, + [3] = RGB(8, 8, 8), +}; static const struct SpritePalette sSlotMachineSpritePalettes[] = { diff --git a/src/sound.c b/src/sound.c index 5d34f0eb42..955895c637 100644 --- a/src/sound.c +++ b/src/sound.c @@ -14,26 +14,19 @@ struct Fanfare u16 duration; }; -// ewram EWRAM_DATA struct MusicPlayerInfo* gMPlay_PokemonCry = NULL; EWRAM_DATA u8 gPokemonCryBGMDuckingCounter = 0; -// iwram bss static u16 sCurrentMapMusic; static u16 sNextMapMusic; static u8 sMapMusicState; static u8 sMapMusicFadeInSpeed; static u16 sFanfareCounter; -// iwram common bool8 gDisableMusic; -extern struct MusicPlayerInfo gMPlayInfo_BGM; -extern struct MusicPlayerInfo gMPlayInfo_SE1; -extern struct MusicPlayerInfo gMPlayInfo_SE2; -extern struct MusicPlayerInfo gMPlayInfo_SE3; extern struct ToneData gCryTable[]; -extern struct ToneData gCryTable2[]; +extern struct ToneData gCryTable_Reverse[]; static void Task_Fanfare(u8 taskId); static void CreateFanfareTask(void); @@ -61,8 +54,6 @@ static const struct Fanfare sFanfares[] = { [FANFARE_REGISTER_MATCH_CALL] = { MUS_REGISTER_MATCH_CALL, 135 }, }; -#define CRY_VOLUME 120 // was 125 in R/S - void InitMapMusic(void) { gDisableMusic = FALSE; @@ -165,7 +156,8 @@ void FadeOutAndFadeInNewMapMusic(u16 songNum, u8 fadeOutSpeed, u8 fadeInSpeed) sMapMusicFadeInSpeed = fadeInSpeed; } -void FadeInNewMapMusic(u16 songNum, u8 speed) +// Unused +static void FadeInNewMapMusic(u16 songNum, u8 speed) { FadeInNewBGM(songNum, speed); sCurrentMapMusic = songNum; @@ -271,7 +263,7 @@ void FadeInNewBGM(u16 songNum, u8 speed) songNum = 0; m4aSongNumStart(songNum); m4aMPlayImmInit(&gMPlayInfo_BGM); - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0); m4aSongNumStop(songNum); m4aMPlayFadeIn(&gMPlayInfo_BGM, speed); } @@ -307,148 +299,154 @@ bool8 IsBGMStopped(void) return FALSE; } -void PlayCry1(u16 species, s8 pan) +void PlayCry_Normal(u16 species, s8 pan) { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85); - PlayCryInternal(species, pan, CRY_VOLUME, 10, 0); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, CRY_MODE_NORMAL); gPokemonCryBGMDuckingCounter = 2; RestoreBGMVolumeAfterPokemonCry(); } -void PlayCry2(u16 species, s8 pan, s8 volume, u8 priority) +void PlayCry_NormalNoDucking(u16 species, s8 pan, s8 volume, u8 priority) { - PlayCryInternal(species, pan, volume, priority, 0); + PlayCryInternal(species, pan, volume, priority, CRY_MODE_NORMAL); } -void PlayCry3(u16 species, s8 pan, u8 mode) +// Assuming it's not CRY_MODE_DOUBLES, this is equivalent to PlayCry_Normal except it allows other modes. +void PlayCry_ByMode(u16 species, s8 pan, u8 mode) { - if (mode == 1) + if (mode == CRY_MODE_DOUBLES) { - PlayCryInternal(species, pan, CRY_VOLUME, 10, 1); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); } else { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85); - PlayCryInternal(species, pan, CRY_VOLUME, 10, mode); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); gPokemonCryBGMDuckingCounter = 2; RestoreBGMVolumeAfterPokemonCry(); } } -void PlayCry4(u16 species, s8 pan, u8 mode) +// Used when releasing multiple Pokémon at once in battle. +void PlayCry_ReleaseDouble(u16 species, s8 pan, u8 mode) { - if (mode == 1) + if (mode == CRY_MODE_DOUBLES) { - PlayCryInternal(species, pan, CRY_VOLUME, 10, 1); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); } else { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85); - PlayCryInternal(species, pan, CRY_VOLUME, 10, mode); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); } } -void PlayCry6(u16 species, s8 pan, u8 mode) // not present in R/S +// Duck the BGM but don't restore it. Not present in R/S +void PlayCry_DuckNoRestore(u16 species, s8 pan, u8 mode) { - if (mode == 1) + if (mode == CRY_MODE_DOUBLES) { - PlayCryInternal(species, pan, CRY_VOLUME, 10, 1); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); } else { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85); - PlayCryInternal(species, pan, CRY_VOLUME, 10, mode); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); gPokemonCryBGMDuckingCounter = 2; } } -void PlayCry5(u16 species, u8 mode) +void PlayCry_Script(u16 species, u8 mode) { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85); - PlayCryInternal(species, 0, CRY_VOLUME, 10, mode); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85); + PlayCryInternal(species, 0, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); gPokemonCryBGMDuckingCounter = 2; RestoreBGMVolumeAfterPokemonCry(); } void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode) { - bool32 v0; + bool32 reverse; u32 release; u32 length; u32 pitch; u32 chorus; + // Set default values + // May be overridden depending on mode. length = 140; - v0 = FALSE; + reverse = FALSE; release = 0; pitch = 15360; chorus = 0; switch (mode) { - case 0: + case CRY_MODE_NORMAL: break; - case 1: + case CRY_MODE_DOUBLES: length = 20; release = 225; break; - case 2: + case CRY_MODE_ENCOUNTER: release = 225; pitch = 15600; chorus = 20; volume = 90; break; - case 3: + case CRY_MODE_HIGH_PITCH: length = 50; release = 200; pitch = 15800; chorus = 20; volume = 90; break; - case 4: + case CRY_MODE_ECHO_START: length = 25; - v0 = TRUE; + reverse = TRUE; release = 100; pitch = 15600; chorus = 192; volume = 90; break; - case 5: + case CRY_MODE_FAINT: release = 200; pitch = 14440; break; - case 6: + case CRY_MODE_ECHO_END: release = 220; pitch = 15555; chorus = 192; volume = 70; break; - case 7: + case CRY_MODE_ROAR_1: length = 10; release = 100; pitch = 14848; break; - case 8: + case CRY_MODE_ROAR_2: length = 60; release = 225; pitch = 15616; break; - case 9: + case CRY_MODE_GROWL_1: length = 15; - v0 = TRUE; + reverse = TRUE; release = 125; pitch = 15200; break; - case 10: + case CRY_MODE_GROWL_2: length = 100; release = 225; pitch = 15200; break; - case 12: + case CRY_MODE_WEAK_DOUBLES: length = 20; release = 225; - case 11: + // fallthrough + case CRY_MODE_WEAK: pitch = 15000; break; } @@ -463,7 +461,7 @@ void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode) SetPokemonCryPriority(priority); species--; - gMPlay_PokemonCry = SetPokemonCryTone(v0 ? &gCryTable2[species] : &gCryTable[species]); + gMPlay_PokemonCry = SetPokemonCryTone(reverse ? &gCryTable_Reverse[species] : &gCryTable[species]); } bool8 IsCryFinished(void) @@ -521,7 +519,7 @@ static void Task_DuckBGMForPokemonCry(u8 taskId) if (!IsPokemonCryPlaying(gMPlay_PokemonCry)) { - m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 256); DestroyTask(taskId); } } @@ -551,28 +549,28 @@ void PlaySE12WithPanning(u16 songNum, s8 pan) m4aSongNumStart(songNum); m4aMPlayImmInit(&gMPlayInfo_SE1); m4aMPlayImmInit(&gMPlayInfo_SE2); - m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, pan); - m4aMPlayPanpotControl(&gMPlayInfo_SE2, 0xFFFF, pan); + m4aMPlayPanpotControl(&gMPlayInfo_SE1, TRACKS_ALL, pan); + m4aMPlayPanpotControl(&gMPlayInfo_SE2, TRACKS_ALL, pan); } void PlaySE1WithPanning(u16 songNum, s8 pan) { m4aSongNumStart(songNum); m4aMPlayImmInit(&gMPlayInfo_SE1); - m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, pan); + m4aMPlayPanpotControl(&gMPlayInfo_SE1, TRACKS_ALL, pan); } void PlaySE2WithPanning(u16 songNum, s8 pan) { m4aSongNumStart(songNum); m4aMPlayImmInit(&gMPlayInfo_SE2); - m4aMPlayPanpotControl(&gMPlayInfo_SE2, 0xFFFF, pan); + m4aMPlayPanpotControl(&gMPlayInfo_SE2, TRACKS_ALL, pan); } void SE12PanpotControl(s8 pan) { - m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, pan); - m4aMPlayPanpotControl(&gMPlayInfo_SE2, 0xFFFF, pan); + m4aMPlayPanpotControl(&gMPlayInfo_SE1, TRACKS_ALL, pan); + m4aMPlayPanpotControl(&gMPlayInfo_SE2, TRACKS_ALL, pan); } bool8 IsSEPlaying(void) diff --git a/src/start_menu.c b/src/start_menu.c index 3fcb5aa7bf..2a45f8d69c 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -42,9 +42,10 @@ #include "text_window.h" #include "trainer_card.h" #include "window.h" -#include "constants/songs.h" #include "union_room.h" +#include "constants/battle_frontier.h" #include "constants/rgb.h" +#include "constants/songs.h" // Menu actions enum @@ -138,7 +139,7 @@ static bool8 FieldCB_ReturnToFieldStartMenu(void); static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; -static const u8* const sPyramidFloorNames[] = +static const u8 *const sPyramidFloorNames[FRONTIER_STAGES_PER_CHALLENGE + 1] = { gText_Floor1, gText_Floor2, @@ -155,19 +156,19 @@ static const struct WindowTemplate sPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC static const struct MenuAction sStartMenuItems[] = { - {gText_MenuPokedex, {.u8_void = StartMenuPokedexCallback}}, - {gText_MenuPokemon, {.u8_void = StartMenuPokemonCallback}}, - {gText_MenuBag, {.u8_void = StartMenuBagCallback}}, - {gText_MenuPokenav, {.u8_void = StartMenuPokeNavCallback}}, - {gText_MenuPlayer, {.u8_void = StartMenuPlayerNameCallback}}, - {gText_MenuSave, {.u8_void = StartMenuSaveCallback}}, - {gText_MenuOption, {.u8_void = StartMenuOptionCallback}}, - {gText_MenuExit, {.u8_void = StartMenuExitCallback}}, - {gText_MenuRetire, {.u8_void = StartMenuSafariZoneRetireCallback}}, - {gText_MenuPlayer, {.u8_void = StartMenuLinkModePlayerNameCallback}}, - {gText_MenuRest, {.u8_void = StartMenuSaveCallback}}, - {gText_MenuRetire, {.u8_void = StartMenuBattlePyramidRetireCallback}}, - {gText_MenuBag, {.u8_void = StartMenuBattlePyramidBagCallback}} + [MENU_ACTION_POKEDEX] = {gText_MenuPokedex, {.u8_void = StartMenuPokedexCallback}}, + [MENU_ACTION_POKEMON] = {gText_MenuPokemon, {.u8_void = StartMenuPokemonCallback}}, + [MENU_ACTION_BAG] = {gText_MenuBag, {.u8_void = StartMenuBagCallback}}, + [MENU_ACTION_POKENAV] = {gText_MenuPokenav, {.u8_void = StartMenuPokeNavCallback}}, + [MENU_ACTION_PLAYER] = {gText_MenuPlayer, {.u8_void = StartMenuPlayerNameCallback}}, + [MENU_ACTION_SAVE] = {gText_MenuSave, {.u8_void = StartMenuSaveCallback}}, + [MENU_ACTION_OPTION] = {gText_MenuOption, {.u8_void = StartMenuOptionCallback}}, + [MENU_ACTION_EXIT] = {gText_MenuExit, {.u8_void = StartMenuExitCallback}}, + [MENU_ACTION_RETIRE_SAFARI] = {gText_MenuRetire, {.u8_void = StartMenuSafariZoneRetireCallback}}, + [MENU_ACTION_PLAYER_LINK] = {gText_MenuPlayer, {.u8_void = StartMenuLinkModePlayerNameCallback}}, + [MENU_ACTION_REST_FRONTIER] = {gText_MenuRest, {.u8_void = StartMenuSaveCallback}}, + [MENU_ACTION_RETIRE_FRONTIER] = {gText_MenuRetire, {.u8_void = StartMenuBattlePyramidRetireCallback}}, + [MENU_ACTION_PYRAMID_BAG] = {gText_MenuBag, {.u8_void = StartMenuBattlePyramidBagCallback}} }; static const struct BgTemplate sBgTemplates_LinkBattleSave[] = @@ -198,12 +199,12 @@ static const struct WindowTemplate sWindowTemplates_LinkBattleSave[] = }; static const struct WindowTemplate sSaveInfoWindowTemplate = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 1, - .width = 14, - .height = 10, - .paletteNum = 15, + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 14, + .height = 10, + .paletteNum = 15, .baseBlock = 8 }; @@ -251,7 +252,7 @@ static void BuildStartMenuActions(void) { sNumStartMenuActions = 0; - if (IsUpdateLinkStateCBActive() == TRUE) + if (IsOverworldLinkActive() == TRUE) { BuildLinkModeStartMenu(); } @@ -386,13 +387,13 @@ static void ShowSafariBallsWindow(void) DrawStdWindowFrame(sSafariBallsWindowId, FALSE); ConvertIntToDecimalStringN(gStringVar1, gNumSafariBalls, STR_CONV_MODE_RIGHT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_SafariBallStock); - AddTextPrinterParameterized(sSafariBallsWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL); - CopyWindowToVram(sSafariBallsWindowId, 2); + AddTextPrinterParameterized(sSafariBallsWindowId, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sSafariBallsWindowId, COPYWIN_GFX); } static void ShowPyramidFloorWindow(void) { - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum == 7) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum == FRONTIER_STAGES_PER_CHALLENGE) sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_1); else sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_2); @@ -401,8 +402,8 @@ static void ShowPyramidFloorWindow(void) DrawStdWindowFrame(sBattlePyramidFloorWindowId, FALSE); StringCopy(gStringVar1, sPyramidFloorNames[gSaveBlock2Ptr->frontier.curChallengeBattleNum]); StringExpandPlaceholders(gStringVar4, gText_BattlePyramidFloor); - AddTextPrinterParameterized(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL); - CopyWindowToVram(sBattlePyramidFloorWindowId, 2); + AddTextPrinterParameterized(sBattlePyramidFloorWindowId, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(sBattlePyramidFloorWindowId, COPYWIN_GFX); } static void RemoveExtraStartMenuWindows(void) @@ -410,7 +411,7 @@ static void RemoveExtraStartMenuWindows(void) if (GetSafariZoneFlag()) { ClearStdWindowAndFrameToTransparent(sSafariBallsWindowId, FALSE); - CopyWindowToVram(sSafariBallsWindowId, 2); + CopyWindowToVram(sSafariBallsWindowId, COPYWIN_GFX); RemoveWindow(sSafariBallsWindowId); } if (InBattlePyramid()) @@ -433,7 +434,7 @@ static bool32 PrintStartMenuActions(s8 *pIndex, u32 count) else { StringExpandPlaceholders(gStringVar4, sStartMenuItems[sCurrentStartMenuActions[index]].text); - AddTextPrinterParameterized(GetStartMenuWindowId(), 1, gStringVar4, 8, (index << 4) + 9, 0xFF, NULL); + AddTextPrinterParameterized(GetStartMenuWindowId(), FONT_NORMAL, gStringVar4, 8, (index << 4) + 9, TEXT_SKIP_DRAW, NULL); } index++; @@ -466,7 +467,7 @@ static bool32 InitStartMenuStep(void) break; case 2: LoadMessageBoxAndBorderGfx(); - DrawStdWindowFrame(sub_81979C4(sNumStartMenuActions), FALSE); + DrawStdWindowFrame(AddStartMenuWindow(sNumStartMenuActions), FALSE); sInitStartMenuData[1] = 0; sInitStartMenuData[0]++; break; @@ -482,8 +483,8 @@ static bool32 InitStartMenuStep(void) sInitStartMenuData[0]++; break; case 5: - sStartMenuCursorPos = sub_81983AC(GetStartMenuWindowId(), 1, 0, 9, 16, sNumStartMenuActions, sStartMenuCursorPos); - CopyWindowToVram(GetStartMenuWindowId(), TRUE); + sStartMenuCursorPos = InitMenuNormal(GetStartMenuWindowId(), FONT_NORMAL, 0, 9, 16, sNumStartMenuActions, sStartMenuCursorPos); + CopyWindowToVram(GetStartMenuWindowId(), COPYWIN_MAP); return TRUE; } @@ -534,7 +535,7 @@ void ShowReturnToFieldStartMenu(void) void Task_ShowStartMenu(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch(task->data[0]) { @@ -554,14 +555,14 @@ void Task_ShowStartMenu(u8 taskId) void ShowStartMenu(void) { - if (!IsUpdateLinkStateCBActive()) + if (!IsOverworldLinkActive()) { FreezeObjectEvents(); PlayerFreeze(); - sub_808BCF4(); + StopPlayerAvatar(); } CreateStartMenuTask(Task_ShowStartMenu); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } static bool8 HandleStartMenuInput(void) @@ -679,7 +680,7 @@ static bool8 StartMenuPlayerNameCallback(void) RemoveExtraStartMenuWindows(); CleanupOverworldWindowsAndTilemaps(); - if (IsUpdateLinkStateCBActive() || InUnionRoom()) + if (IsOverworldLinkActive() || InUnionRoom()) ShowPlayerTrainerCard(CB2_ReturnToFieldWithOpenMenu); // Display trainer card else if (FlagGet(FLAG_SYS_FRONTIER_PASS)) ShowFrontierPass(CB2_ReturnToFieldWithOpenMenu); // Display frontier pass @@ -762,7 +763,7 @@ void ShowBattlePyramidStartMenu(void) ClearDialogWindowAndFrameToTransparent(0, FALSE); ScriptUnfreezeObjectEvents(); CreateStartMenuTask(Task_ShowStartMenu); - ScriptContext2_Enable(); + LockPlayerFieldControls(); } static bool8 StartMenuBattlePyramidBagCallback(void) @@ -803,7 +804,7 @@ static bool8 SaveCallback(void) case SAVE_ERROR: // Close start menu ClearDialogWindowAndFrameToTransparent(0, TRUE); ScriptUnfreezeObjectEvents(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); SoftResetInBattlePyramid(); return TRUE; } @@ -840,8 +841,8 @@ static bool8 BattlePyramidRetireCallback(void) case SAVE_CANCELED: // Yes (Retire from battle pyramid) ClearDialogWindowAndFrameToTransparent(0, TRUE); ScriptUnfreezeObjectEvents(); - ScriptContext2_Disable(); - ScriptContext1_SetupScript(BattlePyramid_Retire); + UnlockPlayerFieldControls(); + ScriptContext_SetupScript(BattlePyramid_Retire); return TRUE; } @@ -876,7 +877,7 @@ void SaveGame(void) static void ShowSaveMessage(const u8 *message, u8 (*saveCallback)(void)) { StringExpandPlaceholders(gStringVar4, message); - sub_819786C(0, TRUE); + LoadMessageBoxAndFrameGfx(0, TRUE); AddTextPrinterForMessage_2(TRUE); sSavingComplete = TRUE; sSaveDialogCallback = saveCallback; @@ -900,7 +901,7 @@ static void SaveGameTask(u8 taskId) } DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } static void HideSaveMessageWindow(void) @@ -1200,7 +1201,7 @@ static bool32 InitSaveWindowAfterLinkBattle(u8 *state) break; case 3: ShowBg(0); - BlendPalettes(-1, 16, 0); + BlendPalettes(PALETTES_ALL, 16, RGB_BLACK); SetVBlankCallback(VBlankCB_LinkBattleSave); EnableInterrupts(1); break; @@ -1238,16 +1239,16 @@ static void Task_SaveAfterLinkBattle(u8 taskId) case 0: FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized2(0, - 1, + FONT_NORMAL, gText_SavingDontTurnOffPower, - TEXT_SPEED_FF, + TEXT_SKIP_DRAW, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); DrawTextBorderOuter(0, 8, 14); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); if (gWirelessCommType != 0 && InUnionRoom()) @@ -1269,11 +1270,11 @@ static void Task_SaveAfterLinkBattle(u8 taskId) break; case 1: SetContinueGameWarpStatusToDynamicWarp(); - FullSaveGame(); + WriteSaveBlock2(); *state = 2; break; case 2: - if (CheckSaveFile()) + if (WriteSaveBlock1Sector()) { ClearContinueGameWarpStatus2(); *state = 3; @@ -1290,11 +1291,11 @@ static void Task_SaveAfterLinkBattle(u8 taskId) DestroyTask(taskId); break; case 5: - CreateTask(Task_LinkSave, 5); + CreateTask(Task_LinkFullSave, 5); *state = 6; break; case 6: - if (!FuncIsActiveTask(Task_LinkSave)) + if (!FuncIsActiveTask(Task_LinkFullSave)) { *state = 3; } @@ -1330,40 +1331,40 @@ static void ShowSaveInfoWindow(void) // Print region name yOffset = 1; BufferSaveMenuText(SAVE_MENU_LOCATION, gStringVar4, TEXT_COLOR_GREEN); - AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, 0, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, FONT_NORMAL, gStringVar4, 0, yOffset, TEXT_SKIP_DRAW, NULL); // Print player name yOffset += 16; - AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingPlayer, 0, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, FONT_NORMAL, gText_SavingPlayer, 0, yOffset, TEXT_SKIP_DRAW, NULL); BufferSaveMenuText(SAVE_MENU_NAME, gStringVar4, color); - xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); + xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x70); PrintPlayerNameOnWindow(sSaveInfoWindowId, gStringVar4, xOffset, yOffset); // Print badge count yOffset += 16; - AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingBadges, 0, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, FONT_NORMAL, gText_SavingBadges, 0, yOffset, TEXT_SKIP_DRAW, NULL); BufferSaveMenuText(SAVE_MENU_BADGES, gStringVar4, color); - xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); - AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); + xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x70); + AddTextPrinterParameterized(sSaveInfoWindowId, FONT_NORMAL, gStringVar4, xOffset, yOffset, TEXT_SKIP_DRAW, NULL); if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE) { // Print pokedex count yOffset += 16; - AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingPokedex, 0, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, FONT_NORMAL, gText_SavingPokedex, 0, yOffset, TEXT_SKIP_DRAW, NULL); BufferSaveMenuText(SAVE_MENU_CAUGHT, gStringVar4, color); - xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); - AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); + xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x70); + AddTextPrinterParameterized(sSaveInfoWindowId, FONT_NORMAL, gStringVar4, xOffset, yOffset, TEXT_SKIP_DRAW, NULL); } // Print play time yOffset += 16; - AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingTime, 0, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, FONT_NORMAL, gText_SavingTime, 0, yOffset, TEXT_SKIP_DRAW, NULL); BufferSaveMenuText(SAVE_MENU_PLAY_TIME, gStringVar4, color); - xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); - AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); + xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x70); + AddTextPrinterParameterized(sSaveInfoWindowId, FONT_NORMAL, gStringVar4, xOffset, yOffset, TEXT_SKIP_DRAW, NULL); - CopyWindowToVram(sSaveInfoWindowId, 2); + CopyWindowToVram(sSaveInfoWindowId, COPYWIN_GFX); } static void RemoveSaveInfoWindow(void) @@ -1374,30 +1375,30 @@ static void RemoveSaveInfoWindow(void) static void Task_WaitForBattleTowerLinkSave(u8 taskId) { - if (!FuncIsActiveTask(Task_LinkSave)) + if (!FuncIsActiveTask(Task_LinkFullSave)) { DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } } -#define tPartialSave data[2] +#define tInBattleTower data[2] void SaveForBattleTowerLink(void) { - u8 taskId = CreateTask(Task_LinkSave, 5); - gTasks[taskId].tPartialSave = TRUE; + u8 taskId = CreateTask(Task_LinkFullSave, 5); + gTasks[taskId].tInBattleTower = TRUE; gTasks[CreateTask(Task_WaitForBattleTowerLinkSave, 6)].data[1] = taskId; } -#undef tPartialSave +#undef tInBattleTower static void HideStartMenuWindow(void) { ClearStdWindowAndFrame(GetStartMenuWindowId(), TRUE); RemoveStartMenuWindow(); ScriptUnfreezeObjectEvents(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); } void HideStartMenu(void) diff --git a/src/starter_choose.c b/src/starter_choose.c index b327816e6a..cbe0c7ee61 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -53,17 +53,17 @@ static u16 sStarterLabelWindowId; const u16 gBirchBagGrassPal[][16] = { - INCBIN_U16("graphics/misc/birch_bag.gbapal"), - INCBIN_U16("graphics/misc/birch_grass.gbapal"), + INCBIN_U16("graphics/starter_choose/birch_bag.gbapal"), + INCBIN_U16("graphics/starter_choose/birch_grass.gbapal"), }; -static const u16 sPokeballSelection_Pal[] = INCBIN_U16("graphics/misc/pokeball_selection.gbapal"); -static const u16 sStarterCircle_Pal[] = INCBIN_U16("graphics/misc/starter_circle.gbapal"); -const u32 gBirchBagTilemap[] = INCBIN_U32("graphics/misc/birch_bag_map.bin.lz"); -const u32 gBirchGrassTilemap[] = INCBIN_U32("graphics/misc/birch_grass_map.bin.lz"); -const u32 gBirchHelpGfx[] = INCBIN_U32("graphics/misc/birch_help.4bpp.lz"); // Birch bag and grass combined -const u32 gPokeballSelection_Gfx[] = INCBIN_U32("graphics/misc/pokeball_selection.4bpp.lz"); -static const u32 sStarterCircle_Gfx[] = INCBIN_U32("graphics/misc/starter_circle.4bpp.lz"); +static const u16 sPokeballSelection_Pal[] = INCBIN_U16("graphics/starter_choose/pokeball_selection.gbapal"); +static const u16 sStarterCircle_Pal[] = INCBIN_U16("graphics/starter_choose/starter_circle.gbapal"); +const u32 gBirchBagTilemap[] = INCBIN_U32("graphics/starter_choose/birch_bag.bin.lz"); +const u32 gBirchGrassTilemap[] = INCBIN_U32("graphics/starter_choose/birch_grass.bin.lz"); +const u32 gBirchHelpGfx[] = INCBIN_U32("graphics/starter_choose/birch_help.4bpp.lz"); // Birch bag and grass combined +const u32 gPokeballSelection_Gfx[] = INCBIN_U32("graphics/starter_choose/pokeball_selection.4bpp.lz"); +static const u32 sStarterCircle_Gfx[] = INCBIN_U32("graphics/starter_choose/starter_circle.4bpp.lz"); static const struct WindowTemplate sWindowTemplates[] = { @@ -160,7 +160,7 @@ static const struct OamData sOam_Hand = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -177,7 +177,7 @@ static const struct OamData sOam_Pokeball = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, @@ -194,7 +194,7 @@ static const struct OamData sOam_StarterCircle = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -389,14 +389,14 @@ void CB2_ChooseStarter(void) SetGpuReg(REG_OFFSET_BG1CNT, 0); SetGpuReg(REG_OFFSET_BG0CNT, 0); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); DmaFill16(3, 0, VRAM, VRAM_SIZE); DmaFill32(3, 0, OAM, OAM_SIZE); @@ -480,7 +480,7 @@ static void Task_StarterChoose(u8 taskId) { CreateStarterPokemonLabel(gTasks[taskId].tStarterSelection); DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x2A8, 0xD); - AddTextPrinterParameterized(0, 1, gText_BirchInTrouble, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_BirchInTrouble, 0, 1, 0, NULL); PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].func = Task_HandleStarterChooseInput; @@ -532,9 +532,9 @@ static void Task_WaitForStarterSprite(u8 taskId) static void Task_AskConfirmStarter(u8 taskId) { - PlayCry1(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0); + PlayCry_Normal(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, 1, gText_ConfirmStarterChoice, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_ConfirmStarterChoice, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); CreateYesNoMenu(&sWindowTemplate_ConfirmStarter, 0x2A8, 0xD, 0); gTasks[taskId].func = Task_HandleConfirmStarterInput; @@ -591,11 +591,11 @@ static void CreateStarterPokemonLabel(u8 selection) sStarterLabelWindowId = AddWindow(&winTemplate); FillWindowPixelBuffer(sStarterLabelWindowId, PIXEL_FILL(0)); - width = GetStringCenterAlignXOffset(7, categoryText, 0x68); - AddTextPrinterParameterized3(sStarterLabelWindowId, 7, width, 1, sTextColors, 0, categoryText); + width = GetStringCenterAlignXOffset(FONT_NARROW, categoryText, 0x68); + AddTextPrinterParameterized3(sStarterLabelWindowId, FONT_NARROW, width, 1, sTextColors, 0, categoryText); - width = GetStringCenterAlignXOffset(1, speciesName, 0x68); - AddTextPrinterParameterized3(sStarterLabelWindowId, 1, width, 17, sTextColors, 0, speciesName); + width = GetStringCenterAlignXOffset(FONT_NORMAL, speciesName, 0x68); + AddTextPrinterParameterized3(sStarterLabelWindowId, FONT_NORMAL, width, 17, sTextColors, 0, speciesName); PutWindowTilemap(sStarterLabelWindowId); ScheduleBgCopyTilemapToVram(0); @@ -635,7 +635,7 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y) { u8 spriteId; - spriteId = CreatePicSprite2(species, SHINY_ODDS, 0, 1, x, y, 0xE, 0xFFFF); + spriteId = CreateMonPicSprite_Affine(species, SHINY_ODDS, 0, MON_PIC_AFFINE_FRONT, x, y, 14, TAG_NONE); gSprites[spriteId].oam.priority = 0; return spriteId; } diff --git a/src/strings.c b/src/strings.c index 9be2cfb328..d199b92d4b 100644 --- a/src/strings.c +++ b/src/strings.c @@ -417,6 +417,7 @@ const u8 gText_PkmnRegainhedHealth[] = _("{STR_VAR_1} regained health.{PAUSE_UNT const u8 gText_PkmnBecameHealthy[] = _("{STR_VAR_1} became healthy.{PAUSE_UNTIL_PRESS}"); const u8 gText_MovesPPIncreased[] = _("{STR_VAR_1}'s PP increased.{PAUSE_UNTIL_PRESS}"); const u8 gText_PkmnElevatedToLvVar2[] = _("{STR_VAR_1} was elevated to\nLv. {STR_VAR_2}."); +const u8 gText_PkmnGainedExp[] = _("{STR_VAR_1} gained Exp. Points!{PAUSE_UNTIL_PRESS}"); const u8 gText_PkmnBaseVar2StatIncreased[] = _("{STR_VAR_1}'s base {STR_VAR_2}\nstat was raised.{PAUSE_UNTIL_PRESS}"); const u8 gText_PkmnFriendlyBaseVar2Fell[] = _("{STR_VAR_1} turned friendly.\nThe base {STR_VAR_2} fell!{PAUSE_UNTIL_PRESS}"); const u8 gText_PkmnAdoresBaseVar2Fell[] = _("{STR_VAR_1} adores you!\nThe base {STR_VAR_2} fell!{PAUSE_UNTIL_PRESS}"); @@ -659,7 +660,7 @@ const u8 gText_Satisfied[] = _("Satisfied"); const u8 gText_Dissatisfied[] = _("Dissatisfied"); const u8 gText_DeepSeaTooth[] = _("DEEPSEATOOTH"); const u8 gText_DeepSeaScale[] = _("DEEPSEASCALE"); -const u8 gText_BlueFlute2[] = _("BLUE FLUTE"); +const u8 gText_BlueFlute2[] = _("BLUE FLUTE"); const u8 gText_YellowFlute2[] = _("YELLOW FLUTE"); const u8 gText_RedFlute2[] = _("RED FLUTE"); const u8 gText_WhiteFlute2[] = _("WHITE FLUTE"); @@ -840,17 +841,17 @@ const u8 gText_B4F[] = _("B4F"); const u8 gText_Rooftop[] = _("ROOFTOP"); const u8 gText_ElevatorNowOn[] = _("Now on:"); const u8 gText_BP[] = _("BP"); -const u8 gText_EnergyPowder50[] = _("ENERGYPOWDER{CLEAR_TO 0x72}{SIZE 0}50"); -const u8 gText_EnergyRoot80[] = _("ENERGY ROOT{CLEAR_TO 0x72}{SIZE 0}80"); -const u8 gText_HealPowder50[] = _("HEAL POWDER{CLEAR_TO 0x72}{SIZE 0}50"); -const u8 gText_RevivalHerb300[] = _("REVIVAL HERB{CLEAR_TO 0x6C}{SIZE 0}300"); -const u8 gText_Protein1000[] = _("PROTEIN{CLEAR_TO 0x63}{SIZE 0}1,000"); -const u8 gText_Iron1000[] = _("IRON{CLEAR_TO 0x63}{SIZE 0}1,000"); -const u8 gText_Carbos1000[] = _("CARBOS{CLEAR_TO 0x63}{SIZE 0}1,000"); -const u8 gText_Calcium1000[] = _("CALCIUM{CLEAR_TO 0x63}{SIZE 0}1,000"); -const u8 gText_Zinc1000[] = _("ZINC{CLEAR_TO 0x63}{SIZE 0}1,000"); -const u8 gText_HPUp1000[] = _("HP UP{CLEAR_TO 0x63}{SIZE 0}1,000"); -const u8 gText_PPUp3000[] = _("PP UP{CLEAR_TO 0x63}{SIZE 0}3,000"); +const u8 gText_EnergyPowder50[] = _("ENERGYPOWDER{CLEAR_TO 114}{FONT_SMALL}50"); +const u8 gText_EnergyRoot80[] = _("ENERGY ROOT{CLEAR_TO 114}{FONT_SMALL}80"); +const u8 gText_HealPowder50[] = _("HEAL POWDER{CLEAR_TO 114}{FONT_SMALL}50"); +const u8 gText_RevivalHerb300[] = _("REVIVAL HERB{CLEAR_TO 108}{FONT_SMALL}300"); +const u8 gText_Protein1000[] = _("PROTEIN{CLEAR_TO 99}{FONT_SMALL}1,000"); +const u8 gText_Iron1000[] = _("IRON{CLEAR_TO 99}{FONT_SMALL}1,000"); +const u8 gText_Carbos1000[] = _("CARBOS{CLEAR_TO 99}{FONT_SMALL}1,000"); +const u8 gText_Calcium1000[] = _("CALCIUM{CLEAR_TO 99}{FONT_SMALL}1,000"); +const u8 gText_Zinc1000[] = _("ZINC{CLEAR_TO 99}{FONT_SMALL}1,000"); +const u8 gText_HPUp1000[] = _("HP UP{CLEAR_TO 99}{FONT_SMALL}1,000"); +const u8 gText_PPUp3000[] = _("PP UP{CLEAR_TO 99}{FONT_SMALL}3,000"); const u8 gText_RankingHall[] = _("RANKING HALL"); const u8 gText_ExchangeService[] = _("EXCHANGE SERVICE"); const u8 gText_LilycoveCity[] = _("LILYCOVE CITY"); @@ -991,7 +992,7 @@ const u8 gText_Unknown[] = _("UNKNOWN"); const u8 gText_Call[] = _("CALL"); const u8 gText_Check[] = _("CHECK"); const u8 gText_Cancel6[] = _("CANCEL"); -const u8 gText_NumberF700[] = _("No. {DYNAMIC 0}"); +const u8 gText_NumberIndex[] = _("No. {DYNAMIC 0}"); const u8 gText_RibbonsF700[] = _("RIBBONS {DYNAMIC 0}"); const u8 gText_PokemonMaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused const u8 gText_PokemonFemaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused @@ -1187,7 +1188,7 @@ const u8 gText_PsychUp48BP[] = _("PSYCH UP{CLEAR_TO 0x4E}48BP"); const u8 gText_IcePunch48BP[] = _("ICE PUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_ThunderPunch48BP[] = _("THUNDERPUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_FirePunch48BP[] = _("FIRE PUNCH{CLEAR_TO 0x4E}48BP"); -const u8 gText_PkmnFainted3[] = _("{STR_VAR_1} fainted…\p\n"); +const u8 gText_PkmnFainted_FldPsn[] = _("{STR_VAR_1} fainted…\p\n"); const u8 gText_Marco[] = _("MARCO"); const u8 gText_TrainerCardName[] = _("NAME: "); const u8 gText_TrainerCardIDNo[] = _("IDNo."); @@ -1243,11 +1244,11 @@ const u8 gText_ContestantsMonWon[] = _("{STR_VAR_1}'s {STR_VAR_2} won!"); const u8 gText_CommunicationStandby[] = _("Communication standby…"); const u8 gText_ColorDarkGray[] = _("{COLOR DARK_GRAY}"); const u8 gText_ColorDynamic6WhiteDynamic5[] = _("{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR6 WHITE DYNAMIC_COLOR5}"); // Unused -const u8 gText_HighlightDarkGray[] = _("{HIGHLIGHT DARK_GRAY}"); +const u8 gText_HealthboxNickname[] = _("{HIGHLIGHT DARK_GRAY}"); const u8 gText_EmptySpace2[] = _(" "); // Unused -const u8 gText_DynColor2Male[] = _("{COLOR DYNAMIC_COLOR2}♂"); -const u8 gText_DynColor1Female[] = _("{COLOR DYNAMIC_COLOR1}♀"); -const u8 gText_DynColor2[] = _("{COLOR DYNAMIC_COLOR2}"); +const u8 gText_HealthboxGender_Male[] = _("{COLOR DYNAMIC_COLOR2}♂"); +const u8 gText_HealthboxGender_Female[] = _("{COLOR DYNAMIC_COLOR1}♀"); +const u8 gText_HealthboxGender_None[] = _("{COLOR DYNAMIC_COLOR2}"); const u8 gText_Upper[] = _("UPPER"); const u8 gText_Lower[] = _("lower"); const u8 gText_Others[] = _("OTHERS"); diff --git a/src/text_window.c b/src/text_window.c index 864bd08316..798b791ced 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -6,7 +6,6 @@ #include "bg.h" #include "graphics.h" -// const rom data const u8 gTextWindowFrame1_Gfx[] = INCBIN_U8("graphics/text_window/1.4bpp"); static const u8 sTextWindowFrame2_Gfx[] = INCBIN_U8("graphics/text_window/2.4bpp"); static const u8 sTextWindowFrame3_Gfx[] = INCBIN_U8("graphics/text_window/3.4bpp"); @@ -190,7 +189,8 @@ const u16 *GetOverworldTextboxPalettePtr(void) return gMessageBox_Pal; } -void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset) +// Effectively LoadUserWindowBorderGfx but specifying the bg directly instead of a window from that bg +void LoadUserWindowBorderGfxOnBg(u8 bg, u16 destOffset, u8 palOffset) { LoadBgTiles(bg, sWindowFrames[gSaveBlock2Ptr->optionsWindowFrameType].tiles, 0x120, destOffset); LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, palOffset, 0x20); diff --git a/src/tileset_anims.c b/src/tileset_anims.c index f566fe3e0e..6a7589e36f 100644 --- a/src/tileset_anims.c +++ b/src/tileset_anims.c @@ -537,7 +537,7 @@ const u16 *const gTilesetAnims_BattlePyramid_StatueShadow[] = { gTilesetAnims_BattlePyramid_StatueShadow_Frame2 }; -static const u16 *const gTilesetAnims_BattleDomeFloorLightPals[] = { +static const u16 *const sTilesetAnims_BattleDomeFloorLightPals[] = { gTilesetAnims_BattleDomePals0_0, gTilesetAnims_BattleDomePals0_1, gTilesetAnims_BattleDomePals0_2, @@ -632,45 +632,45 @@ void InitTilesetAnim_Building(void) static void TilesetAnim_General(u16 timer) { if (timer % 16 == 0) - QueueAnimTiles_General_Flower(timer >> 4); + QueueAnimTiles_General_Flower(timer / 16); if (timer % 16 == 1) - QueueAnimTiles_General_Water(timer >> 4); + QueueAnimTiles_General_Water(timer / 16); if (timer % 16 == 2) - QueueAnimTiles_General_SandWaterEdge(timer >> 4); + QueueAnimTiles_General_SandWaterEdge(timer / 16); if (timer % 16 == 3) - QueueAnimTiles_General_Waterfall(timer >> 4); + QueueAnimTiles_General_Waterfall(timer / 16); if (timer % 16 == 4) - QueueAnimTiles_General_LandWaterEdge(timer >> 4); + QueueAnimTiles_General_LandWaterEdge(timer / 16); } static void TilesetAnim_Building(u16 timer) { if (timer % 8 == 0) - QueueAnimTiles_Building_TVTurnedOn(timer >> 3); + QueueAnimTiles_Building_TVTurnedOn(timer / 8); } static void QueueAnimTiles_General_Flower(u16 timer) { - u16 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_General_Flower[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(508)), 0x80); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_General_Flower); + AppendTilesetAnimToBuffer(gTilesetAnims_General_Flower[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(508)), 4 * TILE_SIZE_4BPP); } static void QueueAnimTiles_General_Water(u16 timer) { - u8 i = timer % 8; - AppendTilesetAnimToBuffer(gTilesetAnims_General_Water[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(432)), 0x3C0); + u8 i = timer % ARRAY_COUNT(gTilesetAnims_General_Water); + AppendTilesetAnimToBuffer(gTilesetAnims_General_Water[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(432)), 30 * TILE_SIZE_4BPP); } static void QueueAnimTiles_General_SandWaterEdge(u16 timer) { - u16 i = timer % 8; - AppendTilesetAnimToBuffer(gTilesetAnims_General_SandWaterEdge[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(464)), 0x140); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_General_SandWaterEdge); + AppendTilesetAnimToBuffer(gTilesetAnims_General_SandWaterEdge[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(464)), 10 * TILE_SIZE_4BPP); } static void QueueAnimTiles_General_Waterfall(u16 timer) { - u16 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_General_Waterfall[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(496)), 0xc0); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_General_Waterfall); + AppendTilesetAnimToBuffer(gTilesetAnims_General_Waterfall[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(496)), 6 * TILE_SIZE_4BPP); } void InitTilesetAnim_Petalburg(void) @@ -838,338 +838,338 @@ static void TilesetAnim_Rustboro(u16 timer) { if (timer % 8 == 0) { - QueueAnimTiles_Rustboro_WindyWater(timer >> 3, 0); - QueueAnimTiles_Rustboro_Fountain(timer >> 3); + QueueAnimTiles_Rustboro_WindyWater(timer / 8, 0); + QueueAnimTiles_Rustboro_Fountain(timer / 8); } if (timer % 8 == 1) - QueueAnimTiles_Rustboro_WindyWater(timer >> 3, 1); + QueueAnimTiles_Rustboro_WindyWater(timer / 8, 1); if (timer % 8 == 2) - QueueAnimTiles_Rustboro_WindyWater(timer >> 3, 2); + QueueAnimTiles_Rustboro_WindyWater(timer / 8, 2); if (timer % 8 == 3) - QueueAnimTiles_Rustboro_WindyWater(timer >> 3, 3); + QueueAnimTiles_Rustboro_WindyWater(timer / 8, 3); if (timer % 8 == 4) - QueueAnimTiles_Rustboro_WindyWater(timer >> 3, 4); + QueueAnimTiles_Rustboro_WindyWater(timer / 8, 4); if (timer % 8 == 5) - QueueAnimTiles_Rustboro_WindyWater(timer >> 3, 5); + QueueAnimTiles_Rustboro_WindyWater(timer / 8, 5); if (timer % 8 == 6) - QueueAnimTiles_Rustboro_WindyWater(timer >> 3, 6); + QueueAnimTiles_Rustboro_WindyWater(timer / 8, 6); if (timer % 8 == 7) - QueueAnimTiles_Rustboro_WindyWater(timer >> 3, 7); + QueueAnimTiles_Rustboro_WindyWater(timer / 8, 7); } static void TilesetAnim_Dewford(u16 timer) { if (timer % 8 == 0) - QueueAnimTiles_Dewford_Flag(timer >> 3); + QueueAnimTiles_Dewford_Flag(timer / 8); } static void TilesetAnim_Slateport(u16 timer) { if (timer % 16 == 0) - QueueAnimTiles_Slateport_Balloons(timer >> 4); + QueueAnimTiles_Slateport_Balloons(timer / 16); } static void TilesetAnim_Mauville(u16 timer) { if (timer % 8 == 0) - QueueAnimTiles_Mauville_Flowers(timer >> 3, 0); + QueueAnimTiles_Mauville_Flowers(timer / 8, 0); if (timer % 8 == 1) - QueueAnimTiles_Mauville_Flowers(timer >> 3, 1); + QueueAnimTiles_Mauville_Flowers(timer / 8, 1); if (timer % 8 == 2) - QueueAnimTiles_Mauville_Flowers(timer >> 3, 2); + QueueAnimTiles_Mauville_Flowers(timer / 8, 2); if (timer % 8 == 3) - QueueAnimTiles_Mauville_Flowers(timer >> 3, 3); + QueueAnimTiles_Mauville_Flowers(timer / 8, 3); if (timer % 8 == 4) - QueueAnimTiles_Mauville_Flowers(timer >> 3, 4); + QueueAnimTiles_Mauville_Flowers(timer / 8, 4); if (timer % 8 == 5) - QueueAnimTiles_Mauville_Flowers(timer >> 3, 5); + QueueAnimTiles_Mauville_Flowers(timer / 8, 5); if (timer % 8 == 6) - QueueAnimTiles_Mauville_Flowers(timer >> 3, 6); + QueueAnimTiles_Mauville_Flowers(timer / 8, 6); if (timer % 8 == 7) - QueueAnimTiles_Mauville_Flowers(timer >> 3, 7); + QueueAnimTiles_Mauville_Flowers(timer / 8, 7); } static void TilesetAnim_Lavaridge(u16 timer) { if (timer % 16 == 0) - QueueAnimTiles_Lavaridge_Steam(timer >> 4); + QueueAnimTiles_Lavaridge_Steam(timer / 16); if (timer % 16 == 1) - QueueAnimTiles_Lavaridge_Lava(timer >> 4); + QueueAnimTiles_Lavaridge_Lava(timer / 16); } static void TilesetAnim_EverGrande(u16 timer) { if (timer % 8 == 0) - QueueAnimTiles_EverGrande_Flowers(timer >> 3, 0); + QueueAnimTiles_EverGrande_Flowers(timer / 8, 0); if (timer % 8 == 1) - QueueAnimTiles_EverGrande_Flowers(timer >> 3, 1); + QueueAnimTiles_EverGrande_Flowers(timer / 8, 1); if (timer % 8 == 2) - QueueAnimTiles_EverGrande_Flowers(timer >> 3, 2); + QueueAnimTiles_EverGrande_Flowers(timer / 8, 2); if (timer % 8 == 3) - QueueAnimTiles_EverGrande_Flowers(timer >> 3, 3); + QueueAnimTiles_EverGrande_Flowers(timer / 8, 3); if (timer % 8 == 4) - QueueAnimTiles_EverGrande_Flowers(timer >> 3, 4); + QueueAnimTiles_EverGrande_Flowers(timer / 8, 4); if (timer % 8 == 5) - QueueAnimTiles_EverGrande_Flowers(timer >> 3, 5); + QueueAnimTiles_EverGrande_Flowers(timer / 8, 5); if (timer % 8 == 6) - QueueAnimTiles_EverGrande_Flowers(timer >> 3, 6); + QueueAnimTiles_EverGrande_Flowers(timer / 8, 6); if (timer % 8 == 7) - QueueAnimTiles_EverGrande_Flowers(timer >> 3, 7); + QueueAnimTiles_EverGrande_Flowers(timer / 8, 7); } static void TilesetAnim_Pacifidlog(u16 timer) { if (timer % 16 == 0) - QueueAnimTiles_Pacifidlog_LogBridges(timer >> 4); + QueueAnimTiles_Pacifidlog_LogBridges(timer / 16); if (timer % 16 == 1) - QueueAnimTiles_Pacifidlog_WaterCurrents(timer >> 4); + QueueAnimTiles_Pacifidlog_WaterCurrents(timer / 16); } static void TilesetAnim_Sootopolis(u16 timer) { if (timer % 16 == 0) - QueueAnimTiles_Sootopolis_StormyWater(timer >> 4); + QueueAnimTiles_Sootopolis_StormyWater(timer / 16); } static void TilesetAnim_Underwater(u16 timer) { if (timer % 16 == 0) - QueueAnimTiles_Underwater_Seaweed(timer >> 4); + QueueAnimTiles_Underwater_Seaweed(timer / 16); } static void TilesetAnim_Cave(u16 timer) { if (timer % 16 == 1) - QueueAnimTiles_Cave_Lava(timer >> 4); + QueueAnimTiles_Cave_Lava(timer / 16); } static void TilesetAnim_BattleFrontierOutsideWest(u16 timer) { if (timer % 8 == 0) - QueueAnimTiles_BattleFrontierOutsideWest_Flag(timer >> 3); + QueueAnimTiles_BattleFrontierOutsideWest_Flag(timer / 8); } static void TilesetAnim_BattleFrontierOutsideEast(u16 timer) { if (timer % 8 == 0) - QueueAnimTiles_BattleFrontierOutsideEast_Flag(timer >> 3); + QueueAnimTiles_BattleFrontierOutsideEast_Flag(timer / 8); } static void QueueAnimTiles_General_LandWaterEdge(u16 timer) { - u16 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_General_LandWaterEdge[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(480)), 0x140); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_General_LandWaterEdge); + AppendTilesetAnimToBuffer(gTilesetAnims_General_LandWaterEdge[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(480)), 10 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Lavaridge_Steam(u8 timer) { - u8 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_Lavaridge_Steam[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 288)), 0x80); + u8 i = timer % ARRAY_COUNT(gTilesetAnims_Lavaridge_Steam); + AppendTilesetAnimToBuffer(gTilesetAnims_Lavaridge_Steam[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 288)), 4 * TILE_SIZE_4BPP); - i = (timer + 2) % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_Lavaridge_Steam[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 292)), 0x80); + i = (timer + 2) % (int)ARRAY_COUNT(gTilesetAnims_Lavaridge_Steam); + AppendTilesetAnimToBuffer(gTilesetAnims_Lavaridge_Steam[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 292)), 4 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Pacifidlog_LogBridges(u8 timer) { - u8 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_Pacifidlog_LogBridges[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 464)), 0x3C0); + u8 i = timer % ARRAY_COUNT(gTilesetAnims_Pacifidlog_LogBridges); + AppendTilesetAnimToBuffer(gTilesetAnims_Pacifidlog_LogBridges[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 464)), 30 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Underwater_Seaweed(u8 timer) { - u8 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_Underwater_Seaweed[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 496)), 0x80); + u8 i = timer % ARRAY_COUNT(gTilesetAnims_Underwater_Seaweed); + AppendTilesetAnimToBuffer(gTilesetAnims_Underwater_Seaweed[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 496)), 4 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Pacifidlog_WaterCurrents(u8 timer) { - u8 i = timer % 8; - AppendTilesetAnimToBuffer(gTilesetAnims_Pacifidlog_WaterCurrents[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 496)), 0x100); + u8 i = timer % ARRAY_COUNT(gTilesetAnims_Pacifidlog_WaterCurrents); + AppendTilesetAnimToBuffer(gTilesetAnims_Pacifidlog_WaterCurrents[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 496)), 8 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Mauville_Flowers(u16 timer_div, u8 timer_mod) { timer_div -= timer_mod; - if (timer_div < 12) // almost certainly a typo + if (timer_div < min(ARRAY_COUNT(gTilesetAnims_Mauville_Flower1), ARRAY_COUNT(gTilesetAnims_Mauville_Flower2))) { - timer_div %= 12; - AppendTilesetAnimToBuffer(gTilesetAnims_Mauville_Flower1[timer_div], gTilesetAnims_Mauville_Flower1_VDests[timer_mod], 0x80); - AppendTilesetAnimToBuffer(gTilesetAnims_Mauville_Flower2[timer_div], gTilesetAnims_Mauville_Flower2_VDests[timer_mod], 0x80); + timer_div %= min(ARRAY_COUNT(gTilesetAnims_Mauville_Flower1), ARRAY_COUNT(gTilesetAnims_Mauville_Flower2)); + AppendTilesetAnimToBuffer(gTilesetAnims_Mauville_Flower1[timer_div], gTilesetAnims_Mauville_Flower1_VDests[timer_mod], 4 * TILE_SIZE_4BPP); + AppendTilesetAnimToBuffer(gTilesetAnims_Mauville_Flower2[timer_div], gTilesetAnims_Mauville_Flower2_VDests[timer_mod], 4 * TILE_SIZE_4BPP); } else { - timer_div %= 4; - AppendTilesetAnimToBuffer(gTilesetAnims_Mauville_Flower1_B[timer_div], gTilesetAnims_Mauville_Flower1_VDests[timer_mod], 0x80); - AppendTilesetAnimToBuffer(gTilesetAnims_Mauville_Flower2_B[timer_div], gTilesetAnims_Mauville_Flower2_VDests[timer_mod], 0x80); + timer_div %= min(ARRAY_COUNT(gTilesetAnims_Mauville_Flower1_B), ARRAY_COUNT(gTilesetAnims_Mauville_Flower2_B)); + AppendTilesetAnimToBuffer(gTilesetAnims_Mauville_Flower1_B[timer_div], gTilesetAnims_Mauville_Flower1_VDests[timer_mod], 4 * TILE_SIZE_4BPP); + AppendTilesetAnimToBuffer(gTilesetAnims_Mauville_Flower2_B[timer_div], gTilesetAnims_Mauville_Flower2_VDests[timer_mod], 4 * TILE_SIZE_4BPP); } } static void QueueAnimTiles_Rustboro_WindyWater(u16 timer_div, u8 timer_mod) { timer_div -= timer_mod; - timer_div %= 8; + timer_div %= ARRAY_COUNT(gTilesetAnims_Rustboro_WindyWater); if (gTilesetAnims_Rustboro_WindyWater[timer_div]) - AppendTilesetAnimToBuffer(gTilesetAnims_Rustboro_WindyWater[timer_div], gTilesetAnims_Rustboro_WindyWater_VDests[timer_mod], 0x80); + AppendTilesetAnimToBuffer(gTilesetAnims_Rustboro_WindyWater[timer_div], gTilesetAnims_Rustboro_WindyWater_VDests[timer_mod], 4 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Rustboro_Fountain(u16 timer) { - u16 i = timer % 2; - AppendTilesetAnimToBuffer(gTilesetAnims_Rustboro_Fountain[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 448)), 0x80); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_Rustboro_Fountain); + AppendTilesetAnimToBuffer(gTilesetAnims_Rustboro_Fountain[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 448)), 4 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Lavaridge_Lava(u16 timer) { - u16 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_Lavaridge_Cave_Lava[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 160)), 0x80); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_Lavaridge_Cave_Lava); + AppendTilesetAnimToBuffer(gTilesetAnims_Lavaridge_Cave_Lava[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 160)), 4 * TILE_SIZE_4BPP); } static void QueueAnimTiles_EverGrande_Flowers(u16 timer_div, u8 timer_mod) { timer_div -= timer_mod; - timer_div %= 8; + timer_div %= ARRAY_COUNT(gTilesetAnims_EverGrande_Flowers); - AppendTilesetAnimToBuffer(gTilesetAnims_EverGrande_Flowers[timer_div], gTilesetAnims_EverGrande_VDests[timer_mod], 0x80); + AppendTilesetAnimToBuffer(gTilesetAnims_EverGrande_Flowers[timer_div], gTilesetAnims_EverGrande_VDests[timer_mod], 4 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Cave_Lava(u16 timer) { - u16 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_Lavaridge_Cave_Lava[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 416)), 0x80); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_Lavaridge_Cave_Lava); + AppendTilesetAnimToBuffer(gTilesetAnims_Lavaridge_Cave_Lava[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 416)), 4 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Dewford_Flag(u16 timer) { - u16 id = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_Dewford_Flag[id], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 170)), 0xC0); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_Dewford_Flag); + AppendTilesetAnimToBuffer(gTilesetAnims_Dewford_Flag[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 170)), 6 * TILE_SIZE_4BPP); } static void QueueAnimTiles_BattleFrontierOutsideWest_Flag(u16 timer) { - u16 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_BattleFrontierOutsideWest_Flag[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 218)), 0xC0); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_BattleFrontierOutsideWest_Flag); + AppendTilesetAnimToBuffer(gTilesetAnims_BattleFrontierOutsideWest_Flag[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 218)), 6 * TILE_SIZE_4BPP); } static void QueueAnimTiles_BattleFrontierOutsideEast_Flag(u16 timer) { - u16 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_BattleFrontierOutsideEast_Flag[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 218)), 0xC0); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_BattleFrontierOutsideEast_Flag); + AppendTilesetAnimToBuffer(gTilesetAnims_BattleFrontierOutsideEast_Flag[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 218)), 6 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Slateport_Balloons(u16 timer) { - u16 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_Slateport_Balloons[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 224)), 0x80); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_Slateport_Balloons); + AppendTilesetAnimToBuffer(gTilesetAnims_Slateport_Balloons[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 224)), 4 * TILE_SIZE_4BPP); } static void TilesetAnim_MauvilleGym(u16 timer) { if (timer % 2 == 0) - QueueAnimTiles_MauvilleGym_ElectricGates(timer >> 1); + QueueAnimTiles_MauvilleGym_ElectricGates(timer / 2); } static void TilesetAnim_SootopolisGym(u16 timer) { if (timer % 8 == 0) - QueueAnimTiles_SootopolisGym_Waterfalls(timer >> 3); + QueueAnimTiles_SootopolisGym_Waterfalls(timer / 8); } static void TilesetAnim_EliteFour(u16 timer) { if (timer % 64 == 1) - QueueAnimTiles_EliteFour_GroundLights(timer >> 6); + QueueAnimTiles_EliteFour_GroundLights(timer / 64); if (timer % 8 == 1) - QueueAnimTiles_EliteFour_WallLights(timer >> 3); + QueueAnimTiles_EliteFour_WallLights(timer / 8); } static void TilesetAnim_BikeShop(u16 timer) { if (timer % 4 == 0) - QueueAnimTiles_BikeShop_BlinkingLights(timer >> 2); + QueueAnimTiles_BikeShop_BlinkingLights(timer / 4); } static void TilesetAnim_BattlePyramid(u16 timer) { if (timer % 8 == 0) { - QueueAnimTiles_BattlePyramid_Torch(timer >> 3); - QueueAnimTiles_BattlePyramid_StatueShadow(timer >> 3); + QueueAnimTiles_BattlePyramid_Torch(timer / 8); + QueueAnimTiles_BattlePyramid_StatueShadow(timer / 8); } } static void TilesetAnim_BattleDome(u16 timer) { if (timer % 4 == 0) - BlendAnimPalette_BattleDome_FloorLights(timer >> 2); + BlendAnimPalette_BattleDome_FloorLights(timer / 4); } static void TilesetAnim_BattleDome2(u16 timer) { if (timer % 4 == 0) - BlendAnimPalette_BattleDome_FloorLightsNoBlend(timer >> 2); + BlendAnimPalette_BattleDome_FloorLightsNoBlend(timer / 4); } static void QueueAnimTiles_Building_TVTurnedOn(u16 timer) { - u16 i = timer % 2; - AppendTilesetAnimToBuffer(gTilesetAnims_Building_TvTurnedOn[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(496)), 0x80); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_Building_TvTurnedOn); + AppendTilesetAnimToBuffer(gTilesetAnims_Building_TvTurnedOn[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(496)), 4 * TILE_SIZE_4BPP); } static void QueueAnimTiles_SootopolisGym_Waterfalls(u16 timer) { - u16 i = timer % 3; - AppendTilesetAnimToBuffer(gTilesetAnims_SootopolisGym_SideWaterfall[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 496)), 0x180); - AppendTilesetAnimToBuffer(gTilesetAnims_SootopolisGym_FrontWaterfall[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 464)), 0x280); + u16 i = timer % min(ARRAY_COUNT(gTilesetAnims_SootopolisGym_SideWaterfall), ARRAY_COUNT(gTilesetAnims_SootopolisGym_FrontWaterfall)); + AppendTilesetAnimToBuffer(gTilesetAnims_SootopolisGym_SideWaterfall[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 496)), 12 * TILE_SIZE_4BPP); + AppendTilesetAnimToBuffer(gTilesetAnims_SootopolisGym_FrontWaterfall[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 464)), 20 * TILE_SIZE_4BPP); } static void QueueAnimTiles_EliteFour_WallLights(u16 timer) { - u16 i = timer % 4; - AppendTilesetAnimToBuffer(gTilesetAnims_EliteFour_WallLights[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 504)), 0x20); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_EliteFour_WallLights); + AppendTilesetAnimToBuffer(gTilesetAnims_EliteFour_WallLights[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 504)), 1 * TILE_SIZE_4BPP); } static void QueueAnimTiles_EliteFour_GroundLights(u16 timer) { - u16 i = timer % 2; - AppendTilesetAnimToBuffer(gTilesetAnims_EliteFour_FloorLight[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 480)), 0x80); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_EliteFour_FloorLight); + AppendTilesetAnimToBuffer(gTilesetAnims_EliteFour_FloorLight[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 480)), 4 * TILE_SIZE_4BPP); } static void QueueAnimTiles_MauvilleGym_ElectricGates(u16 timer) { - u16 i = timer % 2; - AppendTilesetAnimToBuffer(gTilesetAnims_MauvilleGym_ElectricGates[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 144)), 0x200); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_MauvilleGym_ElectricGates); + AppendTilesetAnimToBuffer(gTilesetAnims_MauvilleGym_ElectricGates[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 144)), 16 * TILE_SIZE_4BPP); } static void QueueAnimTiles_BikeShop_BlinkingLights(u16 timer) { - u16 i = timer % 2; - AppendTilesetAnimToBuffer(gTilesetAnims_BikeShop_BlinkingLights[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 496)), 0x120); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_BikeShop_BlinkingLights); + AppendTilesetAnimToBuffer(gTilesetAnims_BikeShop_BlinkingLights[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 496)), 9 * TILE_SIZE_4BPP); } static void QueueAnimTiles_Sootopolis_StormyWater(u16 timer) { - u16 i = timer % 8; - AppendTilesetAnimToBuffer(gTilesetAnims_Sootopolis_StormyWater[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 240)), 0xc00); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_Sootopolis_StormyWater); + AppendTilesetAnimToBuffer(gTilesetAnims_Sootopolis_StormyWater[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 240)), 96 * TILE_SIZE_4BPP); } static void QueueAnimTiles_BattlePyramid_Torch(u16 timer) { - u16 i = timer % 3; - AppendTilesetAnimToBuffer(gTilesetAnims_BattlePyramid_Torch[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 151)), 0x100); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_BattlePyramid_Torch); + AppendTilesetAnimToBuffer(gTilesetAnims_BattlePyramid_Torch[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 151)), 8 * TILE_SIZE_4BPP); } static void QueueAnimTiles_BattlePyramid_StatueShadow(u16 timer) { - u16 i = timer % 3; - AppendTilesetAnimToBuffer(gTilesetAnims_BattlePyramid_StatueShadow[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 135)), 0x100); + u16 i = timer % ARRAY_COUNT(gTilesetAnims_BattlePyramid_StatueShadow); + AppendTilesetAnimToBuffer(gTilesetAnims_BattlePyramid_StatueShadow[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(NUM_TILES_IN_PRIMARY + 135)), 8 * TILE_SIZE_4BPP); } static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) { - CpuCopy16(gTilesetAnims_BattleDomeFloorLightPals[timer % 4], gPlttBufferUnfaded + 0x80, 32); + CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); BlendPalette(0x80, 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); - if ((u8)FindTaskIdByFunc(TransitionPhase1_Task_RunFuncs) != TASK_NONE) + if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) != TASK_NONE) { sSecondaryTilesetAnimCallback = TilesetAnim_BattleDome2; sSecondaryTilesetAnimCounterMax = 32; @@ -1178,8 +1178,8 @@ static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) static void BlendAnimPalette_BattleDome_FloorLightsNoBlend(u16 timer) { - CpuCopy16(gTilesetAnims_BattleDomeFloorLightPals[timer % 4], gPlttBufferUnfaded + 0x80, 32); - if ((u8)FindTaskIdByFunc(TransitionPhase1_Task_RunFuncs) == TASK_NONE) + CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); + if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) == TASK_NONE) { BlendPalette(0x80, 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); if (!--sSecondaryTilesetAnimCounterMax) diff --git a/src/time_events.c b/src/time_events.c index 3f56d3ab5e..cec6a44c34 100644 --- a/src/time_events.c +++ b/src/time_events.c @@ -95,7 +95,7 @@ static void Task_WaitWeather(u8 taskId) { if (IsWeatherChangeComplete()) { - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } } diff --git a/src/title_screen.c b/src/title_screen.c index ef0f3a0da3..25a1d60d05 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -35,9 +35,6 @@ #define BERRY_UPDATE_BUTTON_COMBO (B_BUTTON | SELECT_BUTTON) #define A_B_START_SELECT (A_BUTTON | B_BUTTON | START_BUTTON | SELECT_BUTTON) -extern struct MusicPlayerInfo gMPlayInfo_BGM; - -// this file's functions static void MainCB2(void); static void Task_TitleScreenPhase1(u8); static void Task_TitleScreenPhase2(u8); @@ -55,7 +52,7 @@ static void SpriteCB_PressStartCopyrightBanner(struct Sprite *sprite); static void SpriteCB_PokemonLogoShine(struct Sprite *sprite); // const rom data -static const u16 sUnusedUnknownPal[] = INCBIN_U16("graphics/title_screen/unk_853EF78.gbapal"); +static const u16 sUnusedUnknownPal[] = INCBIN_U16("graphics/title_screen/unused.gbapal"); static const u32 sTitleScreenRayquazaGfx[] = INCBIN_U32("graphics/title_screen/rayquaza.4bpp.lz"); static const u32 sTitleScreenRayquazaTilemap[] = INCBIN_U32("graphics/title_screen/rayquaza.bin.lz"); @@ -108,7 +105,7 @@ static const struct OamData sVersionBannerLeftOamData = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_8BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -125,7 +122,7 @@ static const struct OamData sVersionBannerRightOamData = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_8BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, @@ -196,7 +193,7 @@ static const struct OamData sOamData_CopyrightBanner = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), .x = 0, @@ -308,7 +305,7 @@ static const struct OamData sPokemonLogoShineOamData = .y = DISPLAY_HEIGHT, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -550,14 +547,14 @@ void CB2_InitTitleScreen(void) case 1: // bg2 LZ77UnCompVram(gTitleScreenPokemonLogoGfx, (void *)(BG_CHAR_ADDR(0))); - LZ77UnCompVram(gUnknown_08DE0644, (void *)(BG_SCREEN_ADDR(9))); + LZ77UnCompVram(gTitleScreenPokemonLogoTilemap, (void *)(BG_SCREEN_ADDR(9))); LoadPalette(gTitleScreenBgPalettes, 0, 0x1E0); // bg3 LZ77UnCompVram(sTitleScreenRayquazaGfx, (void *)(BG_CHAR_ADDR(2))); LZ77UnCompVram(sTitleScreenRayquazaTilemap, (void *)(BG_SCREEN_ADDR(26))); // bg1 LZ77UnCompVram(sTitleScreenCloudsGfx, (void *)(BG_CHAR_ADDR(3))); - LZ77UnCompVram(gUnknown_08DDE458, (void *)(BG_SCREEN_ADDR(27))); + LZ77UnCompVram(gTitleScreenCloudsTilemap, (void *)(BG_SCREEN_ADDR(27))); ScanlineEffect_Stop(); ResetTasks(); ResetSpriteData(); @@ -751,7 +748,7 @@ static void Task_TitleScreenPhase3(u8 taskId) FadeOutBGM(4); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); SetMainCallback2(CB2_GoToBerryFixScreen); - } + } else { SetGpuReg(REG_OFFSET_BG2Y_L, 0); diff --git a/src/trade.c b/src/trade.c index ce392fe0c6..abf35f26a4 100644 --- a/src/trade.c +++ b/src/trade.c @@ -19,8 +19,8 @@ #include "load_save.h" #include "mail.h" #include "main.h" -#include "mevent2.h" #include "mystery_gift.h" +#include "mystery_gift_menu.h" #include "overworld.h" #include "palette.h" #include "party_menu.h" @@ -44,7 +44,6 @@ #include "util.h" #include "window.h" #include "constants/contest.h" -#include "constants/easy_chat.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/region_map_sections.h" @@ -101,7 +100,7 @@ static EWRAM_DATA u8 *sMenuTextAllocBuffer = NULL; // See the corresponding GFXTAGs in src/data/trade.h static EWRAM_DATA u8 *sMenuTextTileBuffers[GFXTAG_MENU_TEXT_COUNT] = {NULL}; -EWRAM_DATA struct MailStruct gTradeMail[PARTY_SIZE] = {0}; +EWRAM_DATA struct Mail gTradeMail[PARTY_SIZE] = {0}; EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; static EWRAM_DATA struct { /*0x0000*/ u8 bg2hofs; @@ -144,7 +143,7 @@ static EWRAM_DATA struct { } *sTradeMenuData = {NULL}; static EWRAM_DATA struct { - /*0x00*/ struct Pokemon mon; + /*0x00*/ struct Pokemon tempMon; // Used as a temp variable when swapping Pokémon /*0x64*/ u32 timer; /*0x68*/ u32 monPersonalities[2]; /*0x70*/ u8 filler_70[2]; @@ -238,7 +237,7 @@ static void SpriteCB_BouncingPokeballDepart(struct Sprite *); static void SpriteCB_BouncingPokeballDepartEnd(struct Sprite *); static void SpriteCB_BouncingPokeballArrive(struct Sprite *); static void BufferInGameTradeMonName(void); -static void SetInGameTradeMail(struct MailStruct *, const struct InGameTrade *); +static void SetInGameTradeMail(struct Mail *, const struct InGameTrade *); static void CB2_UpdateLinkTrade(void); static void CB2_TryFinishTrade(void); static void CB2_SaveAndEndTrade(void); @@ -274,7 +273,7 @@ static bool32 IsLinkTradeTaskFinished(void) { if (gPlayerCurrActivity == ACTIVITY_29) { - if (gRfuSlotStatusNI[sub_800E87C(lman.acceptSlot_flag)]->send.state == 0) + if (gRfuSlotStatusNI[Rfu_GetIndexOfNewestChild(lman.acceptSlot_flag)]->send.state == 0) return TRUE; else return FALSE; @@ -334,8 +333,8 @@ static void InitTradeMenu(void) gPaletteFade.bufferTransferDisabled = TRUE; SetVBlankCallback(VBlankCB_TradeMenu); - LoadPalette(gUnknown_0860F074, 0xF0, 20); - LoadPalette(gUnknown_0860F074, 0xD0, 20); + LoadPalette(gStandardMenuPalette, 0xF0, 20); + LoadPalette(gStandardMenuPalette, 0xD0, 20); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sTradeMenuBgTemplates, ARRAY_COUNT(sTradeMenuBgTemplates)); SetBgTilemapBuffer(1, sTradeMenuData->tilemapBuffer); @@ -459,7 +458,7 @@ static void CB2_CreateTradeMenu(void) sTradeMenuData->timer = 0; if (gWirelessCommType) { - sub_801048C(TRUE); + Rfu_SetLinkRecovery(TRUE); SetLinkStandbyCallback(); } } @@ -540,7 +539,7 @@ static void CB2_CreateTradeMenu(void) break; case 12: // Create player's name text sprites - xPos = GetStringCenterAlignXOffset(1, gSaveBlock2Ptr->playerName, 120); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gSaveBlock2Ptr->playerName, 120); for (i = 0; i < GFXTAG_PLAYER_NAME; i++) { temp = sSpriteTemplate_MenuText; @@ -549,7 +548,7 @@ static void CB2_CreateTradeMenu(void) } // Create partner's name text sprites - xPos = GetStringCenterAlignXOffset(1, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120); for (i = 0; i < GFXTAG_PARTNER_NAME; i++) { temp = sSpriteTemplate_MenuText; @@ -729,7 +728,7 @@ static void CB2_ReturnToTradeMenu(void) break; case 12: // Create player's name text sprites - xPos = GetStringCenterAlignXOffset(1, gSaveBlock2Ptr->playerName, 120); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gSaveBlock2Ptr->playerName, 120); for (i = 0; i < GFXTAG_PLAYER_NAME; i++) { temp = sSpriteTemplate_MenuText; @@ -738,7 +737,7 @@ static void CB2_ReturnToTradeMenu(void) } // Create partner's name text sprites - xPos = GetStringCenterAlignXOffset(1, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120); for (i = 0; i < GFXTAG_PARTNER_NAME; i++) { temp = sSpriteTemplate_MenuText; @@ -769,8 +768,8 @@ static void CB2_ReturnToTradeMenu(void) else sTradeMenuData->cursorPosition = gLastViewedMonIndex + PARTY_SIZE; - sTradeMenuData->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, - sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][0] * 8 + 32, + sTradeMenuData->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, + sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][0] * 8 + 32, sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][1] * 8, 2); gMain.state = 16; break; @@ -909,7 +908,7 @@ static void LoadTradeBgGfx(u8 state) case 0: LoadPalette(gTradeMenu_Pal, 0, 0x60); LoadBgTiles(1, gTradeMenu_Gfx, 0x1280, 0); - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DDCF04, 0, 0, 32, 20, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenu_Tilemap, 0, 0, 32, 20, 0); LoadBgTilemap(2, sTradeStripesBG2Tilemap, 0x800, 0); break; case 1: @@ -920,9 +919,7 @@ static void LoadTradeBgGfx(u8 state) break; case 2: for (i = 0; i < 4; i++) - { SetGpuReg(REG_OFFSET_BG0HOFS + (i * 2), 0); - } ShowBg(0); ShowBg(1); ShowBg(2); @@ -1004,9 +1001,7 @@ static bool8 BufferTradeParties(void) break; case 3: if (id == 0) - { - RequestLinkData(1); - } + RequestLinkData(BLOCK_REQ_SIZE_200); sTradeMenuData->bufferPartyState++; break; case 4: @@ -1023,9 +1018,7 @@ static bool8 BufferTradeParties(void) break; case 7: if (id == 0) - { - RequestLinkData(1); - } + RequestLinkData(BLOCK_REQ_SIZE_200); sTradeMenuData->bufferPartyState++; break; case 8: @@ -1042,9 +1035,7 @@ static bool8 BufferTradeParties(void) break; case 11: if (id == 0) - { - RequestLinkData(1); - } + RequestLinkData(BLOCK_REQ_SIZE_200); sTradeMenuData->bufferPartyState++; break; case 12: @@ -1056,20 +1047,18 @@ static bool8 BufferTradeParties(void) } break; case 13: - Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, PARTY_SIZE * sizeof(struct MailStruct) + 4); + Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, PARTY_SIZE * sizeof(struct Mail) + 4); sTradeMenuData->bufferPartyState++; break; case 15: if (id == 0) - { - RequestLinkData(3); - } + RequestLinkData(BLOCK_REQ_SIZE_220); sTradeMenuData->bufferPartyState++; break; case 16: if (_GetBlockReceivedStatus() == 3) { - Trade_Memcpy(gTradeMail, gBlockRecvBuffer[id ^ 1], PARTY_SIZE * sizeof(struct MailStruct)); + Trade_Memcpy(gTradeMail, gBlockRecvBuffer[id ^ 1], PARTY_SIZE * sizeof(struct Mail)); TradeResetReceivedFlags(); sTradeMenuData->bufferPartyState++; } @@ -1080,9 +1069,7 @@ static bool8 BufferTradeParties(void) break; case 19: if (id == 0) - { - RequestLinkData(4); - } + RequestLinkData(BLOCK_REQ_SIZE_40); sTradeMenuData->bufferPartyState++; break; case 20: @@ -1403,9 +1390,9 @@ static void TradeMenuProcessInput(void) DrawTextBorderOuter(1, 1, 14); FillWindowPixelBuffer(1, PIXEL_FILL(1)); PrintMenuTable(1, ARRAY_COUNT(sSelectTradeMonActions), sSelectTradeMonActions); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(1, 2, 0); + InitMenuInUpperLeftCornerNormal(1, ARRAY_COUNT(sSelectTradeMonActions), 0); PutWindowTilemap(1); - CopyWindowToVram(1, 3); + CopyWindowToVram(1, COPYWIN_FULL); sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SELECTED_MON; } // Cursor is in partner's party @@ -1541,8 +1528,8 @@ static bool32 CheckMonsBeforeTrade(void) aliveMons[i] = sTradeMenuData->isLiveMon[TRADE_PLAYER][i]; } - switch (CheckValidityOfTradeMons(aliveMons, sTradeMenuData->partyCounts[TRADE_PLAYER], - sTradeMenuData->cursorPosition, + switch (CheckValidityOfTradeMons(aliveMons, sTradeMenuData->partyCounts[TRADE_PLAYER], + sTradeMenuData->cursorPosition, sTradeMenuData->partnerCursorPosition)) { case PLAYER_MON_INVALID: @@ -1584,7 +1571,7 @@ static void ConfirmOrCancelTrade(void) } } -// Only when choosing Yes to cancel, when No is chosen all are redrawn anyway +// Only when choosing Yes to cancel, when No is chosen all are redrawn anyway static void RestoreNicknamesCoveredByYesNo(void) { int i; @@ -1592,7 +1579,7 @@ static void RestoreNicknamesCoveredByYesNo(void) for (i = 0; i < sTradeMenuData->partyCounts[1] - 4; i++) { PutWindowTilemap(i + 12); - CopyWindowToVram(i + 12, 1); + CopyWindowToVram(i + 12, COPYWIN_MAP); } } @@ -1715,7 +1702,7 @@ static void CancelTrade_2(void) static void LinkTradeWaitForQueue(void) { - if (!sub_801048C(FALSE) && GetNumQueuedActions() == 0) + if (!Rfu_SetLinkRecovery(FALSE) && GetNumQueuedActions() == 0) { SetLinkStandbyCallback(); sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE; @@ -1859,13 +1846,13 @@ static void DrawTradeMenuParty(u8 whichParty) gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].x2 = 0; gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].y2 = 0; nameStringWidth = GetMonNicknameWidth(nickname, selectedMonParty, partyIdx); - AddTextPrinterParameterized3((whichParty * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, sTradeTextColors, 0, nickname); + AddTextPrinterParameterized3((whichParty * 2) + 14, FONT_SMALL, (80 - nameStringWidth) / 2, 4, sTradeTextColors, 0, nickname); BufferTradeMonMoves(movesString, selectedMonParty, partyIdx); - AddTextPrinterParameterized4((whichParty * 2) + 15, 1, 0, 0, 0, 0, sTradeTextColors, 0, movesString); + AddTextPrinterParameterized4((whichParty * 2) + 15, FONT_NORMAL, 0, 0, 0, 0, sTradeTextColors, 0, movesString); PutWindowTilemap((whichParty * 2) + 14); - CopyWindowToVram((whichParty * 2) + 14, 3); + CopyWindowToVram((whichParty * 2) + 14, COPYWIN_FULL); PutWindowTilemap((whichParty * 2) + 15); - CopyWindowToVram((whichParty * 2) + 15, 3); + CopyWindowToVram((whichParty * 2) + 15, COPYWIN_FULL); sTradeMenuData->drawPartyState[whichParty]++; break; case 4: @@ -1888,8 +1875,8 @@ static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 monIdx) else GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname); - StringCopy10(str, nickname); - return GetStringWidth(0, str, GetFontAttribute(0, FONTATTR_LETTER_SPACING)); + StringCopy_Nickname(str, nickname); + return GetStringWidth(FONT_SMALL, str, GetFontAttribute(FONT_SMALL, FONTATTR_LETTER_SPACING)); } static void BufferTradeMonMoves(u8 *str, u8 whichParty, u8 partyIdx) @@ -1934,10 +1921,10 @@ static void PrintMonNicknameForTradeMenu(u8 whichParty, u8 windowId, u8 *nicknam { u8 xPos; windowId += (whichParty * PARTY_SIZE) + 2; - xPos = GetStringCenterAlignXOffset(0, nickname, 64); - AddTextPrinterParameterized3(windowId, 0, xPos, 4, sTradeTextColors, 0, nickname); + xPos = GetStringCenterAlignXOffset(FONT_SMALL, nickname, 64); + AddTextPrinterParameterized3(windowId, FONT_SMALL, xPos, 4, sTradeTextColors, 0, nickname); PutWindowTilemap(windowId); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } static void PrintPartyNicknamesForTradeMenu(u8 whichParty) @@ -1950,7 +1937,7 @@ static void PrintPartyNicknamesForTradeMenu(u8 whichParty) for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) { GetMonData(&party[i], MON_DATA_NICKNAME, nickname); - StringCopy10(str, nickname); + StringCopy_Nickname(str, nickname); PrintMonNicknameForTradeMenu(whichParty, i, str); } } @@ -2161,10 +2148,10 @@ static void DoQueuedActions(void) static void PrintTradeMessage(u8 messageId) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, 1, sTradeMessages[messageId], 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, sTradeMessages[messageId], 0, 1, TEXT_SKIP_DRAW, NULL); DrawTextBorderOuter(0, 20, 12); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); } static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void) @@ -2204,7 +2191,7 @@ static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void) sTradeMenuData->timer++; break; case GFXTAG_MENU_TEXT_COUNT: - LoadSpritePalette(&gSpritePalette_TradeScreenText); + LoadSpritePalette(&sSpritePalette_TradeScreenText); sTradeMenuData->timer++; break; case GFXTAG_MENU_TEXT_COUNT + 1: @@ -2444,80 +2431,70 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) return FALSE; } -int GetUnionRoomTradeMessageId(struct GFtgtGnameSub rfuPlayer, struct GFtgtGnameSub rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isEventLegal) +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal) { - bool8 playerHasNationalDex = rfuPlayer.hasNationalDex; - bool8 playerIsChampion = rfuPlayer.isChampion; - bool8 partnerHasNationalDex = rfuPartner.hasNationalDex; - bool8 partnerIsChampion = rfuPartner.isChampion; - u8 r1 = rfuPartner.version; + bool8 playerHasNationalDex = player.hasNationalDex; + bool8 playerIsChampion = player.isChampion; + bool8 partnerHasNationalDex = partner.hasNationalDex; + bool8 partnerIsChampion = partner.isChampion; + u8 partnerVersion = partner.version; - if (r1 != VERSION_EMERALD) + // If partner is not using Emerald, both players must be champion + if (partnerVersion != VERSION_EMERALD) { if (!playerIsChampion) - { return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1; - } else if (!partnerIsChampion) - { return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2; - } } + // Cannot trade illegitimate Deoxys/Mew if (IsDeoxysOrMewUntradable(playerSpecies, isEventLegal)) - { return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; - } if (partnerSpecies == SPECIES_EGG) { + // If partner is trading an Egg then the player must also be trading an Egg if (playerSpecies2 != partnerSpecies) - { return UR_TRADE_MSG_NOT_EGG; - } } else { - if (gBaseStats[playerSpecies2].type1 != requestedType && gBaseStats[playerSpecies2].type2 != requestedType) - { + // Player's Pokémon must be of the type the partner requested + if (gBaseStats[playerSpecies2].type1 != requestedType + && gBaseStats[playerSpecies2].type2 != requestedType) return UR_TRADE_MSG_NOT_MON_PARTNER_WANTS; - } } + // If the player is trading an Egg then the partner must also be trading an Egg + // Odd that this wasn't checked earlier, as by this point we know either the partner doesn't have an Egg or that both do. if (playerSpecies2 == SPECIES_EGG && playerSpecies2 != partnerSpecies) - { return UR_TRADE_MSG_MON_CANT_BE_TRADED_1; - } + // If the player doesn't have the National Dex then Eggs and non-Hoenn Pokémon can't be traded if (!playerHasNationalDex) { if (playerSpecies2 == SPECIES_EGG) - { return UR_TRADE_MSG_EGG_CANT_BE_TRADED; - } if (!IsSpeciesInHoennDex(playerSpecies2)) - { return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; - } if (!IsSpeciesInHoennDex(partnerSpecies)) - { return UR_TRADE_MSG_PARTNERS_MON_CANT_BE_TRADED; - } } + // If the partner doesn't have the National Dex then the player's offer has to be a Hoenn Pokémon if (!partnerHasNationalDex && !IsSpeciesInHoennDex(playerSpecies2)) - { return UR_TRADE_MSG_PARTNER_CANT_ACCEPT_MON; - } + // Trade is allowed return UR_TRADE_MSG_NONE; } -int CanRegisterMonForTradingBoard(struct GFtgtGnameSub rfuPlayer, u16 species2, u16 species, u8 isEventLegal) +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isEventLegal) { - bool8 hasNationalDex = rfuPlayer.hasNationalDex; + bool8 hasNationalDex = player.hasNationalDex; if (IsDeoxysOrMewUntradable(species, isEventLegal)) return CANT_REGISTER_MON; @@ -2547,9 +2524,7 @@ int CanSpinTradeMon(struct Pokemon *mon, u16 monIdx) { speciesArray[i] = GetMonData(&mon[i], MON_DATA_SPECIES2); if (speciesArray[i] == SPECIES_EGG) - { speciesArray[i] = SPECIES_NONE; - } } versions = 0; @@ -2559,13 +2534,9 @@ int CanSpinTradeMon(struct Pokemon *mon, u16 monIdx) version = gLinkPlayers[i].version & 0xFF; if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) - { versions = 0; - } else - { versions |= 1; - } } for (i = 0; i < GetLinkPlayerCount(); i++) @@ -2596,9 +2567,7 @@ int CanSpinTradeMon(struct Pokemon *mon, u16 monIdx) for (i = 0; i < gPlayerPartyCount; i++) { if (monIdx != i) - { numMonsLeft += speciesArray[i]; - } } if (!numMonsLeft) @@ -2765,7 +2734,7 @@ static void LoadTradeMonPic(u8 whichParty, u8 state) species = GetMonData(mon, MON_DATA_SPECIES2); personality = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[whichParty * 2 + 1], species, personality); + HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[whichParty * 2 + B_POSITION_OPPONENT_LEFT], species, personality); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); sTradeData->monSpecies[whichParty] = species; @@ -2922,7 +2891,7 @@ void LinkTradeDrawWindow(void) { FillWindowPixelBuffer(0, PIXEL_FILL(15)); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); } static void InitTradeBgInternal(void) @@ -2930,8 +2899,8 @@ static void InitTradeBgInternal(void) SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sTradeSequenceBgTemplates, ARRAY_COUNT(sTradeSequenceBgTemplates)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); @@ -2999,7 +2968,7 @@ static void CB2_InGameTrade(void) LoadTradeMonPic(TRADE_PARTNER, 1); FillWindowPixelBuffer(0, PIXEL_FILL(15)); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); gMain.state++; break; case 9: @@ -3064,18 +3033,16 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); if (playerMail != MAIL_NONE) - ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); + ClearMail(&gSaveBlock1Ptr->mail[playerMail]); - sTradeData->mon = *playerMon; - *playerMon = *partnerMon; - *partnerMon = sTradeData->mon; + SWAP(*playerMon, *partnerMon, sTradeData->tempMon); friendship = 70; if (!GetMonData(playerMon, MON_DATA_IS_EGG)) SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); if (partnerMail != MAIL_NONE) - GiveMailToMon2(playerMon, &gTradeMail[partnerMail]); + GiveMailToMon(playerMon, &gTradeMail[partnerMail]); UpdatePokedexForReceivedMon(playerPartyIdx); if (gReceivedRemoteLinkPlayers) @@ -3089,7 +3056,7 @@ static void TrySendTradeFinishData(void) case 1: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, sizeof(sTradeData->linkData)); + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, sizeof(sTradeData->linkData)); sTradeData->sendTradeFinishState++; } // fallthrough @@ -3291,17 +3258,17 @@ static void BufferTradeSceneStrings(void) mpId = GetMultiplayerId(); StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_NICKNAME, name); - StringCopy10(gStringVar3, name); + StringCopy_Nickname(gStringVar3, name); GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], MON_DATA_NICKNAME, name); - StringCopy10(gStringVar2, name); + StringCopy_Nickname(gStringVar2, name); } else { ingameTrade = &sIngameTrades[gSpecialVar_0x8004]; StringCopy(gStringVar1, ingameTrade->otName); - StringCopy10(gStringVar3, ingameTrade->nickname); + StringCopy_Nickname(gStringVar3, ingameTrade->nickname); GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, name); - StringCopy10(gStringVar2, name); + StringCopy_Nickname(gStringVar2, name); } } @@ -3423,7 +3390,7 @@ static bool8 AnimateTradeSequenceCable(void) DrawTextOnTradeWindow(0, gStringVar4, 0); if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG) - PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0); + PlayCry_Normal(sTradeData->monSpecies[TRADE_PLAYER], 0); sTradeData->state = TS_STATE_BYE_BYE; sTradeData->timer = 0; @@ -3458,7 +3425,7 @@ static bool8 AnimateTradeSequenceCable(void) { SetTradeSequenceBgGpuRegs(4); FillWindowPixelBuffer(0, PIXEL_FILL(15)); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); sTradeData->state++; } break; @@ -3605,7 +3572,7 @@ static bool8 AnimateTradeSequenceCable(void) case TS_STATE_CROSSING_MON_PICS_MOVE: gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 -= 3; gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y2 += 3; - if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 < -DISPLAY_HEIGHT + if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 < -DISPLAY_HEIGHT && gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) { PlaySE(SE_WARP_IN); @@ -3760,7 +3727,7 @@ static bool8 AnimateTradeSequenceCable(void) case TS_STATE_POKEBALL_ARRIVE_WAIT: if (gSprites[sTradeData->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) { - HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites.ptr[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); + HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); sTradeData->state++; } break; @@ -3770,7 +3737,7 @@ static bool8 AnimateTradeSequenceCable(void) gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x2 = 0; gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y2 = 0; StartSpriteAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]); + CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sTradeData->monSpecies[TRADE_PARTNER]); FreeSpriteOamMatrix(&gSprites[sTradeData->bouncingPokeballSpriteId]); DestroySprite(&gSprites[sTradeData->bouncingPokeballSpriteId]); sTradeData->state++; @@ -3830,7 +3797,7 @@ static bool8 AnimateTradeSequenceCable(void) case TS_STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution TradeMons(gSpecialVar_0x8005, 0); gCB2_AfterEvolution = CB2_UpdateInGameTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]], MON_DATA_SPECIES)); + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]]); if (evoTarget != SPECIES_NONE) { TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); @@ -3894,7 +3861,7 @@ static bool8 AnimateTradeSequenceWireless(void) DrawTextOnTradeWindow(0, gStringVar4, 0); if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG) - PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0); + PlayCry_Normal(sTradeData->monSpecies[TRADE_PLAYER], 0); sTradeData->state = TS_STATE_BYE_BYE; sTradeData->timer = 0; @@ -3929,7 +3896,7 @@ static bool8 AnimateTradeSequenceWireless(void) { SetTradeSequenceBgGpuRegs(4); FillWindowPixelBuffer(0, PIXEL_FILL(15)); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); sTradeData->state++; } break; @@ -3972,7 +3939,7 @@ static bool8 AnimateTradeSequenceWireless(void) BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG2); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4)); - + // Start wireless signal effect CreateTask(Task_AnimateWirelessSignal, 5); sTradeData->state++; @@ -4257,9 +4224,9 @@ static bool8 AnimateTradeSequenceWireless(void) case TS_STATE_POKEBALL_ARRIVE_WAIT: if (gSprites[sTradeData->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) { - HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], - gMonSpritesGfxPtr->sprites.ptr[3], - sTradeData->monSpecies[TRADE_PARTNER], + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], + sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); sTradeData->state++; } @@ -4270,7 +4237,7 @@ static bool8 AnimateTradeSequenceWireless(void) gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x2 = 0; gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y2 = 0; StartSpriteAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]); + CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sTradeData->monSpecies[TRADE_PARTNER]); FreeSpriteOamMatrix(&gSprites[sTradeData->bouncingPokeballSpriteId]); DestroySprite(&gSprites[sTradeData->bouncingPokeballSpriteId]); sTradeData->state++; @@ -4330,7 +4297,7 @@ static bool8 AnimateTradeSequenceWireless(void) case TS_STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution TradeMons(gSpecialVar_0x8005, 0); gCB2_AfterEvolution = CB2_UpdateInGameTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]], MON_DATA_SPECIES)); + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]]); if (evoTarget != SPECIES_NONE) { TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); @@ -4375,7 +4342,7 @@ static void CB2_TryLinkTradeEvolution(void) break; case 4: gCB2_AfterEvolution = CB2_SaveAndEndTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]], MON_DATA_SPECIES)); + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]]); if (evoTarget != SPECIES_NONE) TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); else if (IsWirelessTrade()) @@ -4504,7 +4471,7 @@ static void BufferInGameTradeMonName(void) u8 nickname[32]; const struct InGameTrade *inGameTrade = &sIngameTrades[gSpecialVar_0x8004]; GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); - StringCopy10(gStringVar1, nickname); + StringCopy_Nickname(gStringVar1, nickname); StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); } @@ -4513,7 +4480,7 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) const struct InGameTrade *inGameTrade = &sIngameTrades[whichInGameTrade]; u8 level = GetMonData(&gPlayerParty[whichPlayerMon], MON_DATA_LEVEL); - struct MailStruct mail; + struct Mail mail; u8 metLocation = METLOC_IN_GAME_TRADE; u8 isMail; struct Pokemon *pokemon = &gEnemyParty[0]; @@ -4556,7 +4523,8 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) CalculateMonStats(&gEnemyParty[0]); } -static void SetInGameTradeMail(struct MailStruct *mail, const struct InGameTrade *trade) { +static void SetInGameTradeMail(struct Mail *mail, const struct InGameTrade *trade) +{ s32 i; for (i = 0; i < MAIL_WORDS_COUNT; i++) @@ -4625,7 +4593,7 @@ static void CB2_TryFinishTrade(void) && sTradeData->partnerLinkFlagFinishTrade == READY_FINISH_TRADE) { sTradeData->linkData[0] = LINKCMD_CONFIRM_FINISH_TRADE; - SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, sizeof(sTradeData->linkData)); + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, sizeof(sTradeData->linkData)); sTradeData->playerLinkFlagFinishTrade = FINISH_TRADE; sTradeData->partnerLinkFlagFinishTrade = FINISH_TRADE; } @@ -4676,34 +4644,32 @@ static void CB2_SaveAndEndTrade(void) if (!InUnionRoom()) IncrementGameStat(GAME_STAT_POKEMON_TRADES); if (gWirelessCommType) - { - RecordIdOfWonderCardSenderByEventType(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); - } + MysteryGift_TryIncrementStat(CARD_STAT_NUM_TRADES, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + SetContinueGameWarpStatusToDynamicWarp(); - sub_8153380(); + LinkFullSave_Init(); gMain.state++; sTradeData->timer = 0; break; case 51: if (++sTradeData->timer == 5) - { gMain.state++; - } break; case 52: - if (sub_81533AC()) + if (LinkFullSave_WriteSector()) { ClearContinueGameWarpStatus2(); gMain.state = 4; } else { + // Save isn't finished, delay again sTradeData->timer = 0; gMain.state = 51; } break; case 4: - sub_81533E0(); + LinkFullSave_ReplaceLastSector(); gMain.state = 40; sTradeData->timer = 0; break; @@ -4735,7 +4701,7 @@ static void CB2_SaveAndEndTrade(void) case 42: if (_IsLinkTaskFinished()) { - sub_8153408(); + LinkFullSave_SetLastSectorSignature(); gMain.state = 5; } break; @@ -4821,7 +4787,7 @@ static void CB2_FreeTradeData(void) void DoInGameTradeScene(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); CreateTask(Task_InGameTrade, 10); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); } @@ -4840,7 +4806,7 @@ static void CheckPartnersMonForRibbons(void) { u8 i; u8 numRibbons = 0; - for (i = 0; i < 12; i ++) + for (i = 0; i < (MON_DATA_UNUSED_RIBBONS - MON_DATA_CHAMPION_RIBBON); i ++) { numRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_CHAMPION_RIBBON + i); } @@ -4848,7 +4814,7 @@ static void CheckPartnersMonForRibbons(void) FlagSet(FLAG_SYS_RIBBON_GET); } -void InitTradeBg(void) +void LoadTradeAnimGfx(void) { InitTradeBgInternal(); } @@ -4859,8 +4825,8 @@ void DrawTextOnTradeWindow(u8 windowId, const u8 *str, u8 speed) sTradeData->textColors[0] = TEXT_DYNAMIC_COLOR_6; sTradeData->textColors[1] = TEXT_COLOR_WHITE; sTradeData->textColors[2] = TEXT_COLOR_GREEN; - AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, sTradeData->textColors, speed, str); - CopyWindowToVram(windowId, 3); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, 2, 0, 0, sTradeData->textColors, speed, str); + CopyWindowToVram(windowId, COPYWIN_FULL); } #define idx data[0] @@ -4991,7 +4957,7 @@ static void CB2_SaveAndEndWirelessTrade(void) StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower); DrawTextOnTradeWindow(0, gStringVar4, 0); IncrementGameStat(GAME_STAT_POKEMON_TRADES); - sub_8153380(); + LinkFullSave_Init(); sTradeData->timer = 0; } break; @@ -5000,7 +4966,7 @@ static void CB2_SaveAndEndWirelessTrade(void) gMain.state = 4; break; case 4: - if (sub_81533AC()) + if (LinkFullSave_WriteSector()) { gMain.state = 5; } @@ -5011,7 +4977,7 @@ static void CB2_SaveAndEndWirelessTrade(void) } break; case 5: - sub_81533E0(); + LinkFullSave_ReplaceLastSector(); gMain.state = 6; sTradeData->timer = 0; break; @@ -5039,7 +5005,7 @@ static void CB2_SaveAndEndWirelessTrade(void) case 8: if (_IsLinkTaskFinished()) { - sub_8153408(); + LinkFullSave_SetLastSectorSignature(); gMain.state = 9; } break; diff --git a/src/trader.c b/src/trader.c index f6d021dfe0..48ce5d2681 100644 --- a/src/trader.c +++ b/src/trader.c @@ -15,7 +15,7 @@ #include "task.h" #include "script_menu.h" -static const u8 * const sDefaultTraderNames[] = +static const u8 *const sDefaultTraderNames[NUM_TRADER_ITEMS] = { gText_Tristan, gText_Philip, @@ -23,7 +23,7 @@ static const u8 * const sDefaultTraderNames[] = gText_Roberto, }; -static const u8 sDefaultTraderDecorations[] = +static const u8 sDefaultTraderDecorations[NUM_TRADER_ITEMS] = { DECOR_DUSKULL_DOLL, DECOR_BALL_CUSHION, @@ -39,7 +39,7 @@ void TraderSetup(void) trader->id = MAUVILLE_MAN_TRADER; trader->alreadyTraded = FALSE; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_TRADER_ITEMS; i++) { StringCopy(trader->playerNames[i], sDefaultTraderNames[i]); trader->decorations[i] = sDefaultTraderDecorations[i]; @@ -53,36 +53,46 @@ void Trader_ResetFlag(void) trader->alreadyTraded = FALSE; } +#define tWindowId data[3] + void CreateAvailableDecorationsMenu(u8 taskId) { u8 i; s16 * data = gTasks[taskId].data; struct MauvilleOldManTrader *trader = &gSaveBlock1Ptr->oldMan.trader; - struct WindowTemplate windowTemplate = {0, 1, 1, 10, 10, 15, 1}; - s32 windowWidth = GetStringWidth(1, gText_Exit, 0); - s32 fiveMarksWidth = GetStringWidth(1, gText_FiveMarks, 0); - for (i = 0; i < 4; i++) + struct WindowTemplate windowTemplate = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 10, + .height = 10, + .paletteNum = 15, + .baseBlock = 1 + }; + s32 windowWidth = GetStringWidth(FONT_NORMAL, gText_Exit, 0); + s32 fiveMarksWidth = GetStringWidth(FONT_NORMAL, gText_FiveMarks, 0); + for (i = 0; i < NUM_TRADER_ITEMS; i++) { s32 curWidth; if (trader->decorations[i] > NUM_DECORATIONS) curWidth = fiveMarksWidth; else - curWidth = GetStringWidth(1, gDecorations[trader->decorations[i]].name, 0); + curWidth = GetStringWidth(FONT_NORMAL, gDecorations[trader->decorations[i]].name, 0); if (curWidth > windowWidth) windowWidth = curWidth; } windowTemplate.width = ConvertPixelWidthToTileWidth(windowWidth); - data[3] = AddWindow(&windowTemplate); - DrawStdFrameWithCustomTileAndPalette(data[3], FALSE, 0x214, 14); - for (i = 0; i < 4; i++) + tWindowId = AddWindow(&windowTemplate); + DrawStdFrameWithCustomTileAndPalette(tWindowId, FALSE, 0x214, 14); + for (i = 0; i < NUM_TRADER_ITEMS; i++) { if (trader->decorations[i] > NUM_DECORATIONS) - AddTextPrinterParameterized(data[3], 1, gText_FiveMarks, 8, 16 * i + 1, 255, NULL); + AddTextPrinterParameterized(tWindowId, FONT_NORMAL, gText_FiveMarks, 8, 16 * i + 1, TEXT_SKIP_DRAW, NULL); else - AddTextPrinterParameterized(data[3], 1, gDecorations[trader->decorations[i]].name, 8, 16 * i + 1, 255, NULL); + AddTextPrinterParameterized(tWindowId, FONT_NORMAL, gDecorations[trader->decorations[i]].name, 8, 16 * i + 1, TEXT_SKIP_DRAW, NULL); } - AddTextPrinterParameterized(data[3], 1, gText_Exit, 8, 16 * i + 1, 255, NULL); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[3], 5, 0); + AddTextPrinterParameterized(tWindowId, FONT_NORMAL, gText_Exit, 8, 16 * i + 1, TEXT_SKIP_DRAW, NULL); + InitMenuInUpperLeftCornerNormal(tWindowId, NUM_TRADER_ITEMS + 1, 0); ScheduleBgCopyTilemapToVram(0); } @@ -90,20 +100,16 @@ void Task_BufferDecorSelectionAndCloseWindow(u8 taskId, u8 decorationId) { s16 * data = gTasks[taskId].data; if (decorationId > NUM_DECORATIONS) - { gSpecialVar_0x8004 = 0xFFFF; - } else - { gSpecialVar_0x8004 = decorationId; - } - ClearStdWindowAndFrameToTransparent(data[3], FALSE); - ClearWindowTilemap(data[3]); - RemoveWindow(data[3]); + ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); + ClearWindowTilemap(tWindowId); + RemoveWindow(tWindowId); ScheduleBgCopyTilemapToVram(0); DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } void Task_HandleGetDecorationMenuInput(u8 taskId) @@ -116,7 +122,7 @@ void Task_HandleGetDecorationMenuInput(u8 taskId) case MENU_NOTHING_CHOSEN: break; case MENU_B_PRESSED: - case 4: + case NUM_TRADER_ITEMS: // EXIT PlaySE(SE_SELECT); Task_BufferDecorSelectionAndCloseWindow(taskId, 0); break; @@ -130,17 +136,17 @@ void Task_HandleGetDecorationMenuInput(u8 taskId) } } -void ScrSpecial_GetTraderTradedFlag(void) +void GetTraderTradedFlag(void) { struct MauvilleOldManTrader *trader = &gSaveBlock1Ptr->oldMan.trader; gSpecialVar_Result = trader->alreadyTraded; } -void ScrSpecial_DoesPlayerHaveNoDecorations(void) +void DoesPlayerHaveNoDecorations(void) { u8 i; - for (i = 0; i < 8; i++) + for (i = 0; i < DECORCAT_COUNT; i++) { if (GetNumOwnedDecorationsInCategory(i)) { @@ -151,7 +157,7 @@ void ScrSpecial_DoesPlayerHaveNoDecorations(void) gSpecialVar_Result = TRUE; } -void ScrSpecial_IsDecorationFull(void) +void IsDecorationCategoryFull(void) { gSpecialVar_Result = FALSE; if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category @@ -162,7 +168,7 @@ void ScrSpecial_IsDecorationFull(void) } } -void ScrSpecial_TraderMenuGiveDecoration(void) +void TraderShowDecorationMenu(void) { CreateTask(ShowDecorationCategoriesWindow, 0); } @@ -180,17 +186,17 @@ void DecorationItemsMenuAction_Trade(u8 taskId) gSpecialVar_0x8006 = 0xFFFF; } DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } void ExitTraderMenu(u8 taskId) { gSpecialVar_0x8006 = 0; DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } -void ScrSpecial_TraderDoDecorationTrade(void) +void TraderDoDecorationTrade(void) { struct MauvilleOldManTrader *trader = &gSaveBlock1Ptr->oldMan.trader; @@ -202,7 +208,7 @@ void ScrSpecial_TraderDoDecorationTrade(void) trader->alreadyTraded = TRUE; } -void ScrSpecial_TraderMenuGetDecoration(void) +void TraderMenuGetDecoration(void) { u8 taskId = CreateTask(Task_HandleGetDecorationMenuInput, 0); CreateAvailableDecorationsMenu(taskId); diff --git a/src/trainer_card.c b/src/trainer_card.c index 1ec519c90e..ab7b3c9131 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -97,8 +97,8 @@ static void CloseTrainerCard(u8 task); static bool8 PrintAllOnCardFront(void); static void DrawTrainerCardWindow(u8); static void CreateTrainerCardTrainerPic(void); -static void DrawCardScreenBackground(u16*); -static void DrawCardFrontOrBack(u16*); +static void DrawCardScreenBackground(u16 *); +static void DrawCardFrontOrBack(u16 *); static void DrawStarsAndBadgesOnCard(void); static void PrintTimeOnCard(void); static void FlipTrainerCard(void); @@ -107,10 +107,10 @@ static bool8 LoadCardGfx(void); static void CB2_InitTrainerCard(void); static u32 GetCappedGameStat(u8 statId, u32 maxValue); static bool8 HasAllFrontierSymbols(void); -static u8 GetRubyTrainerStars(struct TrainerCard*); +static u8 GetRubyTrainerStars(struct TrainerCard *); static u16 GetCaughtMonsCount(void); -static void SetPlayerCardData(struct TrainerCard*, u8); -static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard*); +static void SetPlayerCardData(struct TrainerCard *, u8); +static void TrainerCard_GenerateCardForPlayer(struct TrainerCard *); static u8 VersionToCardType(u8); static void SetDataFromTrainerCard(void); static void InitGpuRegs(void); @@ -147,17 +147,17 @@ static void BufferUnionRoomStats(void); static void BufferLinkPokeblocksNum(void); static void BufferLinkContestNum(void); static void BufferBattleFacilityStats(void); -static void PrintStatOnBackOfCard(u8 top, const u8* str1, u8* str2, const u8* color); +static void PrintStatOnBackOfCard(u8 top, const u8 *str1, u8 *str2, const u8 *color); static void LoadStickerGfx(void); static u8 SetCardBgsAndPals(void); static void DrawCardBackStats(void); static void Task_DoCardFlipTask(u8); -static bool8 Task_BeginCardFlip(struct Task* task); -static bool8 Task_AnimateCardFlipDown(struct Task* task); -static bool8 Task_DrawFlippedCardSide(struct Task* task); -static bool8 Task_SetCardFlipped(struct Task* task); -static bool8 Task_AnimateCardFlipUp(struct Task* task); -static bool8 Task_EndCardFlip(struct Task* task); +static bool8 Task_BeginCardFlip(struct Task *task); +static bool8 Task_AnimateCardFlipDown(struct Task *task); +static bool8 Task_DrawFlippedCardSide(struct Task *task); +static bool8 Task_SetCardFlipped(struct Task *task); +static bool8 Task_AnimateCardFlipUp(struct Task *task); +static bool8 Task_EndCardFlip(struct Task *task); static void UpdateCardFlipRegs(u16); static void LoadMonIconGfx(void); @@ -281,31 +281,31 @@ static const u8 sTrainerPicOffset[2][GENDER_COUNT][2] = { // Kanto { - [MALE] = {13, 4}, + [MALE] = {13, 4}, [FEMALE] = {13, 4} }, // Hoenn { - [MALE] = {1, 0}, + [MALE] = {1, 0}, [FEMALE] = {1, 0} }, }; -static const u8 sTrainerPicFacilityClass[][GENDER_COUNT] = +static const u8 sTrainerPicFacilityClass[][GENDER_COUNT] = { - [CARD_TYPE_FRLG] = + [CARD_TYPE_FRLG] = { - [MALE] = FACILITY_CLASS_RED, + [MALE] = FACILITY_CLASS_RED, [FEMALE] = FACILITY_CLASS_LEAF - }, - [CARD_TYPE_RS] = + }, + [CARD_TYPE_RS] = { - [MALE] = FACILITY_CLASS_RS_BRENDAN, + [MALE] = FACILITY_CLASS_RS_BRENDAN, [FEMALE] = FACILITY_CLASS_RS_MAY - }, - [CARD_TYPE_EMERALD] = + }, + [CARD_TYPE_EMERALD] = { - [MALE] = FACILITY_CLASS_BRENDAN, + [MALE] = FACILITY_CLASS_BRENDAN, [FEMALE] = FACILITY_CLASS_MAY } }; @@ -456,7 +456,7 @@ static void Task_TrainerCard(u8 taskId) } break; case STATE_WAIT_FLIP_TO_BACK: - if (IsCardFlipTaskActive() && Overworld_LinkRecvQueueLengthMoreThan2() != TRUE) + if (IsCardFlipTaskActive() && Overworld_IsRecvQueueAtMax() != TRUE) { PlaySE(SE_RG_CARD_OPEN); sData->mainState = STATE_HANDLE_INPUT_BACK; @@ -496,9 +496,9 @@ static void Task_TrainerCard(u8 taskId) break; case STATE_WAIT_LINK_PARTNER: SetCloseLinkCallback(); - DrawDialogueFrame(0, 1); - AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0); - CopyWindowToVram(0, 3); + DrawDialogueFrame(0, TRUE); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_WaitingTrainerFinishReading, 0, 1, 255, 0); + CopyWindowToVram(0, COPYWIN_FULL); sData->mainState = STATE_CLOSE_CARD_LINK; break; case STATE_CLOSE_CARD_LINK: @@ -513,7 +513,7 @@ static void Task_TrainerCard(u8 taskId) CloseTrainerCard(taskId); break; case STATE_WAIT_FLIP_TO_FRONT: - if (IsCardFlipTaskActive() && Overworld_LinkRecvQueueLengthMoreThan2() != TRUE) + if (IsCardFlipTaskActive() && Overworld_IsRecvQueueAtMax() != TRUE) { sData->mainState = STATE_HANDLE_INPUT_FRONT; PlaySE(SE_RG_CARD_OPEN); @@ -750,29 +750,13 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType) } } -static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard) +static void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) { memset(trainerCard, 0, sizeof(struct TrainerCard)); trainerCard->version = GAME_VERSION; SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD); - trainerCard->hasAllSymbols = HasAllFrontierSymbols(); - trainerCard->frontierBP = gSaveBlock2Ptr->frontier.cardBattlePoints; - if (trainerCard->hasAllSymbols) - trainerCard->stars++; - - if (trainerCard->gender == FEMALE) - trainerCard->facilityClass = gLinkPlayerFacilityClasses[(trainerCard->trainerId % NUM_FEMALE_LINK_FACILITY_CLASSES) + NUM_MALE_LINK_FACILITY_CLASSES]; - else - trainerCard->facilityClass = gLinkPlayerFacilityClasses[trainerCard->trainerId % NUM_MALE_LINK_FACILITY_CLASSES]; -} - -void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) -{ - memset(trainerCard, 0, 0x60); - trainerCard->version = GAME_VERSION; - SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD); trainerCard->hasAllFrontierSymbols = HasAllFrontierSymbols(); - *((u16*)&trainerCard->berryCrushPoints) = gSaveBlock2Ptr->frontier.cardBattlePoints; + trainerCard->frontierBP = gSaveBlock2Ptr->frontier.cardBattlePoints; if (trainerCard->hasAllFrontierSymbols) trainerCard->stars++; @@ -782,7 +766,23 @@ void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) trainerCard->facilityClass = gLinkPlayerFacilityClasses[trainerCard->trainerId % NUM_MALE_LINK_FACILITY_CLASSES]; } -void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion) +void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard) +{ + memset(trainerCard, 0, 0x60); + trainerCard->version = GAME_VERSION; + SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD); + trainerCard->linkHasAllFrontierSymbols = HasAllFrontierSymbols(); + *((u16 *)&trainerCard->linkPoints.frontier) = gSaveBlock2Ptr->frontier.cardBattlePoints; + if (trainerCard->linkHasAllFrontierSymbols) + trainerCard->stars++; + + if (trainerCard->gender == FEMALE) + trainerCard->facilityClass = gLinkPlayerFacilityClasses[(trainerCard->trainerId % NUM_FEMALE_LINK_FACILITY_CLASSES) + NUM_MALE_LINK_FACILITY_CLASSES]; + else + trainerCard->facilityClass = gLinkPlayerFacilityClasses[trainerCard->trainerId % NUM_MALE_LINK_FACILITY_CLASSES]; +} + +void CopyTrainerCardData(struct TrainerCard *dst, struct TrainerCard *src, u8 gameVersion) { memset(dst, 0, sizeof(struct TrainerCard)); dst->version = gameVersion; @@ -797,9 +797,9 @@ void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion) break; case CARD_TYPE_EMERALD: memcpy(dst, src, 0x60); - dst->berryCrushPoints = 0; - dst->hasAllSymbols = src[29]; - dst->frontierBP = src[30]; + dst->linkPoints.frontier = 0; + dst->hasAllFrontierSymbols = src->linkHasAllFrontierSymbols; + dst->frontierBP = *((u16 *)&src->linkPoints.frontier); break; } } @@ -884,14 +884,14 @@ static void InitBgsAndWindows(void) { ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sTrainerCardBgTemplates, ARRAY_COUNT(sTrainerCardBgTemplates)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); InitWindows(sTrainerCardWindowTemplates); DeactivateAllTextPrinters(); LoadMessageBoxAndBorderGfx(); @@ -996,36 +996,36 @@ static void BufferTextsVarsForCardPage2(void) static void PrintNameOnCardFront(void) { u8 buffer[32]; - u8* txtPtr; + u8 *txtPtr; txtPtr = StringCopy(buffer, gText_TrainerCardName); StringCopy(txtPtr, sData->trainerCard.playerName); ConvertInternationalString(txtPtr, sData->language); if (sData->cardType == CARD_TYPE_FRLG) - AddTextPrinterParameterized3(1, 1, 20, 28, sTrainerCardTextColors, TEXT_SPEED_FF, buffer); + AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 28, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); else - AddTextPrinterParameterized3(1, 1, 16, 33, sTrainerCardTextColors, TEXT_SPEED_FF, buffer); + AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 33, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); } static void PrintIdOnCard(void) { u8 buffer[32]; - u8* txtPtr; + u8 *txtPtr; s32 xPos; u32 top; txtPtr = StringCopy(buffer, gText_TrainerCardIDNo); ConvertIntToDecimalStringN(txtPtr, sData->trainerCard.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); if (sData->cardType == CARD_TYPE_FRLG) { - xPos = GetStringCenterAlignXOffset(1, buffer, 80) + 132; + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, buffer, 80) + 132; top = 9; } else { - xPos = GetStringCenterAlignXOffset(1, buffer, 96) + 120; + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, buffer, 96) + 120; top = 9; } - AddTextPrinterParameterized3(1, 1, xPos, top, sTrainerCardTextColors, TEXT_SPEED_FF, buffer); + AddTextPrinterParameterized3(1, FONT_NORMAL, xPos, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); } static void PrintMoneyOnCard(void) @@ -1034,23 +1034,23 @@ static void PrintMoneyOnCard(void) u8 top; if (!sData->isHoenn) - AddTextPrinterParameterized3(1, 1, 20, 56, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardMoney); + AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 56, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); else - AddTextPrinterParameterized3(1, 1, 16, 57, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardMoney); + AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 57, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); if (!sData->isHoenn) { - xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144); + xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 144); top = 56; } else { - xOffset = GetStringRightAlignXOffset(1, gStringVar4, 128); + xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 128); top = 57; } - AddTextPrinterParameterized3(1, 1, xOffset, top, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4); + AddTextPrinterParameterized3(1, FONT_NORMAL, xOffset, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); } static u16 GetCaughtMonsCount(void) @@ -1068,21 +1068,21 @@ static void PrintPokedexOnCard(void) if (FlagGet(FLAG_SYS_POKEDEX_GET)) { if (!sData->isHoenn) - AddTextPrinterParameterized3(1, 1, 20, 72, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardPokedex); + AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 72, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); else - AddTextPrinterParameterized3(1, 1, 16, 73, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardPokedex); + AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 73, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3), gText_EmptyString6); if (!sData->isHoenn) { - xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144); + xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 144); top = 72; } else { - xOffset = GetStringRightAlignXOffset(1, gStringVar4, 128); + xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 128); top = 73; } - AddTextPrinterParameterized3(1, 1, xOffset, top, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4); + AddTextPrinterParameterized3(1, FONT_NORMAL, xOffset, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); } } @@ -1096,9 +1096,9 @@ static void PrintTimeOnCard(void) u32 x, y, totalWidth; if (!sData->isHoenn) - AddTextPrinterParameterized3(1, 1, 20, 88, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardTime); + AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 88, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardTime); else - AddTextPrinterParameterized3(1, 1, 16, 89, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardTime); + AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 89, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardTime); if (sData->isLink) { @@ -1115,7 +1115,7 @@ static void PrintTimeOnCard(void) hours = 999; if (minutes > 59) minutes = 59; - width = GetStringWidth(1, gText_Colon2, 0); + width = GetStringWidth(FONT_NORMAL, gText_Colon2, 0); if (!sData->isHoenn) { @@ -1132,12 +1132,12 @@ static void PrintTimeOnCard(void) FillWindowPixelRect(1, PIXEL_FILL(0), x, y, totalWidth, 15); ConvertIntToDecimalStringN(gStringVar4, hours, STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized3(1, 1, x, y, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4); + AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); x += 18; - AddTextPrinterParameterized3(1, 1, x, y, sTimeColonTextColors[sData->timeColonInvisible], TEXT_SPEED_FF, gText_Colon2); + AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, sTimeColonTextColors[sData->timeColonInvisible], TEXT_SKIP_DRAW, gText_Colon2); x += width; ConvertIntToDecimalStringN(gStringVar4, minutes, STR_CONV_MODE_LEADING_ZEROS, 2); - AddTextPrinterParameterized3(1, 1, x, y, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4); + AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); } static void PrintProfilePhraseOnCard(void) @@ -1147,10 +1147,10 @@ static void PrintProfilePhraseOnCard(void) if (sData->isLink) { - AddTextPrinterParameterized3(1, 1, 8, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->easyChatProfile[0]); - AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->easyChatProfile[0], 0) + 14, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->easyChatProfile[1]); - AddTextPrinterParameterized3(1, 1, 8, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->easyChatProfile[2]); - AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->easyChatProfile[2], 0) + 14, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->easyChatProfile[3]); + AddTextPrinterParameterized3(1, FONT_NORMAL, 8, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[0]); + AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringWidth(FONT_NORMAL, sData->easyChatProfile[0], 0) + 14, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[1]); + AddTextPrinterParameterized3(1, FONT_NORMAL, 8, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[2]); + AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringWidth(FONT_NORMAL, sData->easyChatProfile[2], 0) + 14, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[3]); } } @@ -1168,9 +1168,9 @@ static void BufferNameForCardBack(void) static void PrintNameOnCardBack(void) { if (!sData->isHoenn) - AddTextPrinterParameterized3(1, 1, 136, 9, sTrainerCardTextColors, TEXT_SPEED_FF, sData->textPlayersCard); + AddTextPrinterParameterized3(1, FONT_NORMAL, 136, 9, sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->textPlayersCard); else - AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, sData->textPlayersCard, 216), 9, sTrainerCardTextColors, TEXT_SPEED_FF, sData->textPlayersCard); + AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, sData->textPlayersCard, 216), 9, sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->textPlayersCard); } static const u8 sText_HofTime[] = _("{STR_VAR_1}:{STR_VAR_2}:{STR_VAR_3}"); @@ -1186,13 +1186,13 @@ static void BufferHofDebutTime(void) } } -static void PrintStatOnBackOfCard(u8 top, const u8* statName, u8* stat, const u8* color) +static void PrintStatOnBackOfCard(u8 top, const u8 *statName, u8 *stat, const u8 *color) { static const u8 xOffsets[] = {8, 16}; static const u8 widths[] = {216, 216}; - AddTextPrinterParameterized3(1, 1, xOffsets[sData->isHoenn], top * 16 + 33, sTrainerCardTextColors, TEXT_SPEED_FF, statName); - AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, stat, widths[sData->isHoenn]), top * 16 + 33, color, TEXT_SPEED_FF, stat); + AddTextPrinterParameterized3(1, FONT_NORMAL, xOffsets[sData->isHoenn], top * 16 + 33, sTrainerCardTextColors, TEXT_SKIP_DRAW, statName); + AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, stat, widths[sData->isHoenn]), top * 16 + 33, color, TEXT_SKIP_DRAW, stat); } static void PrintHofDebutTimeOnCard(void) @@ -1201,10 +1201,10 @@ static void PrintHofDebutTimeOnCard(void) PrintStatOnBackOfCard(0, gText_HallOfFameDebut, sData->textHofTime, sTrainerCardStatColors); } -static const u8 *const sLinkBattleTexts[] = +static const u8 *const sLinkBattleTexts[] = { - [CARD_TYPE_FRLG] = gText_LinkBattles, - [CARD_TYPE_RS] = gText_LinkCableBattles, + [CARD_TYPE_FRLG] = gText_LinkBattles, + [CARD_TYPE_RS] = gText_LinkCableBattles, [CARD_TYPE_EMERALD] = gText_LinkBattles }; @@ -1243,13 +1243,13 @@ static void PrintTradesStringOnCard(void) static void BufferBerryCrushPoints(void) { - if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints) - ConvertIntToDecimalStringN(sData->textBerryCrushPts, sData->trainerCard.berryCrushPoints, STR_CONV_MODE_RIGHT_ALIGN, 5); + if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.linkPoints.berryCrush) + ConvertIntToDecimalStringN(sData->textBerryCrushPts, sData->trainerCard.linkPoints.berryCrush, STR_CONV_MODE_RIGHT_ALIGN, 5); } static void PrintBerryCrushStringOnCard(void) { - if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints) + if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.linkPoints.berryCrush) PrintStatOnBackOfCard(4, gText_BerryCrush, sData->textBerryCrushPts, sTrainerCardStatColors); } @@ -1408,7 +1408,7 @@ static void LoadStickerGfx(void) static void DrawTrainerCardWindow(u8 windowId) { PutWindowTilemap(windowId); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } static u8 SetCardBgsAndPals(void) @@ -1471,7 +1471,7 @@ static void DrawCardScreenBackground(u16 *ptr) CopyBgTilemapBufferToVram(2); } -static void DrawCardFrontOrBack(u16* ptr) +static void DrawCardFrontOrBack(u16 *ptr) { s16 i, j; u16 *dst = sData->cardTilemapBuffer; @@ -1524,7 +1524,7 @@ static void DrawCardBackStats(void) FillBgTilemapBufferRect(3, 141, 27, 9, 1, 1, 1); FillBgTilemapBufferRect(3, 157, 27, 10, 1, 1, 1); } - if (sData->trainerCard.berryCrushPoints) + if (sData->trainerCard.linkPoints.berryCrush) { FillBgTilemapBufferRect(3, 141, 21, 13, 1, 1, 1); FillBgTilemapBufferRect(3, 157, 21, 14, 1, 1, 1); @@ -1570,7 +1570,7 @@ static void BlinkTimeColon(void) u8 GetTrainerCardStars(u8 cardId) { - struct TrainerCard* trainerCards = gTrainerCards; + struct TrainerCard *trainerCards = gTrainerCards; return trainerCards[cardId].stars; } @@ -1598,7 +1598,7 @@ static void Task_DoCardFlipTask(u8 taskId) ; } -static bool8 Task_BeginCardFlip(struct Task* task) +static bool8 Task_BeginCardFlip(struct Task *task) { u32 i; @@ -1615,7 +1615,7 @@ static bool8 Task_BeginCardFlip(struct Task* task) // Note: Cannot be DISPLAY_HEIGHT / 2, or cardHeight will be 0 #define CARD_FLIP_Y ((DISPLAY_HEIGHT / 2) - 3) -static bool8 Task_AnimateCardFlipDown(struct Task* task) +static bool8 Task_AnimateCardFlipDown(struct Task *task) { u32 cardHeight, r5, r10, cardTop, r6, var_24, cardBottom, var; s16 i; @@ -1660,10 +1660,10 @@ static bool8 Task_AnimateCardFlipDown(struct Task* task) return FALSE; } -static bool8 Task_DrawFlippedCardSide(struct Task* task) +static bool8 Task_DrawFlippedCardSide(struct Task *task) { sData->allowDMACopy = FALSE; - if (Overworld_LinkRecvQueueLengthMoreThan2() == TRUE) + if (Overworld_IsRecvQueueAtMax() == TRUE) return FALSE; do @@ -1714,7 +1714,7 @@ static bool8 Task_DrawFlippedCardSide(struct Task* task) return FALSE; } -static bool8 Task_SetCardFlipped(struct Task* task) +static bool8 Task_SetCardFlipped(struct Task *task) { sData->allowDMACopy = FALSE; @@ -1734,7 +1734,7 @@ static bool8 Task_SetCardFlipped(struct Task* task) return FALSE; } -static bool8 Task_AnimateCardFlipUp(struct Task* task) +static bool8 Task_AnimateCardFlipUp(struct Task *task) { u32 cardHeight, r5, r10, cardTop, r6, var_24, cardBottom, var; s16 i; @@ -1803,7 +1803,7 @@ void ShowPlayerTrainerCard(void (*callback)(void)) sData->isLink = FALSE; sData->language = GAME_LANGUAGE; - TrainerCard_GenerateCardForLinkPlayer(&sData->trainerCard); + TrainerCard_GenerateCardForPlayer(&sData->trainerCard); SetMainCallback2(CB2_InitTrainerCard); } diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 3ce90c4309..206060f1b7 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -28,29 +28,25 @@ #include "constants/items.h" #include "constants/layouts.h" #include "constants/moves.h" -#include "constants/maps.h" #include "constants/trainers.h" -#include "constants/easy_chat.h" #include "constants/trainer_hill.h" #include "constants/trainer_types.h" -#define HILL_TAG_NORMAL 0 -#define HILL_TAG_VARIETY 1 -#define HILL_TAG_UNIQUE 2 -#define HILL_TAG_EXPERT 3 - #define HILL_MAX_TIME 215999 // 60 * 60 * 60 - 1 -// EWRAM -struct TrHillStruct2 +struct FloorTrainers { - u8 floorId; - struct TrHillTag tag; - struct TrHillFloor floors[NUM_TRAINER_HILL_FLOORS]; + u8 name[HILL_TRAINERS_PER_FLOOR][TRAINER_NAME_LENGTH + 1]; + u8 facilityClass[HILL_TRAINERS_PER_FLOOR]; }; -static EWRAM_DATA struct TrHillStruct2 *sHillData = NULL; -static EWRAM_DATA struct TrHillRoomTrainers *sRoomTrainers = NULL; +static EWRAM_DATA struct { + u8 floorId; + struct TrainerHillChallenge challenge; + struct TrainerHillFloor floors[NUM_TRAINER_HILL_FLOORS]; +} *sHillData = NULL; + +static EWRAM_DATA struct FloorTrainers *sFloorTrainers = NULL; EWRAM_DATA u32 *gTrainerHillVBlankCounter = NULL; // This file's functions. @@ -71,7 +67,7 @@ static void GetGameSaved(void); static void SetGameSaved(void); static void ClearGameSaved(void); static void GetChallengeWon(void); -static void TrainerHillSetTag(void); +static void TrainerHillSetMode(void); static void SetUpDataStruct(void); static void FreeDataStruct(void); static void TrainerHillDummy(void); @@ -126,7 +122,7 @@ struct {TRAINER_CLASS_PKMN_BREEDER, TRAINER_ENCOUNTER_MUSIC_FEMALE}, {TRAINER_CLASS_COLLECTOR, TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS}, {TRAINER_CLASS_PKMN_RANGER, TRAINER_ENCOUNTER_MUSIC_COOL}, - {TRAINER_CLASS_PKMN_TRAINER_3, TRAINER_ENCOUNTER_MUSIC_MALE}, + {TRAINER_CLASS_RIVAL, TRAINER_ENCOUNTER_MUSIC_MALE}, {TRAINER_CLASS_YOUNG_COUPLE, TRAINER_ENCOUNTER_MUSIC_GIRL}, {TRAINER_CLASS_PSYCHIC, TRAINER_ENCOUNTER_MUSIC_INTENSE}, {TRAINER_CLASS_SR_AND_JR, TRAINER_ENCOUNTER_MUSIC_TWINS}, @@ -169,30 +165,30 @@ static const u16 sPrizeListAttract[] = {ITEM_TM45_ATTRACT, ITEM_ETHER, I static const u16 *const sPrizeLists1[NUM_TRAINER_HILL_PRIZE_LISTS] = { - sPrizeListRareCandy1, - sPrizeListLuxuryBall1, - sPrizeListMaxRevive1, - sPrizeListMaxEther1, - sPrizeListElixir1, - sPrizeListRoar, - sPrizeListSludgeBomb, - sPrizeListToxic, - sPrizeListSunnyDay, - sPrizeListEarthQuake + sPrizeListRareCandy1, + sPrizeListLuxuryBall1, + sPrizeListMaxRevive1, + sPrizeListMaxEther1, + sPrizeListElixir1, + sPrizeListRoar, + sPrizeListSludgeBomb, + sPrizeListToxic, + sPrizeListSunnyDay, + sPrizeListEarthQuake }; static const u16 *const sPrizeLists2[NUM_TRAINER_HILL_PRIZE_LISTS] = { - sPrizeListRareCandy2, - sPrizeListLuxuryBall2, - sPrizeListMaxRevive2, - sPrizeListMaxEther2, - sPrizeListElixir2, - sPrizeListBrickBreak, - sPrizeListTorment, - sPrizeListSkillSwap, - sPrizeListGigaDrain, - sPrizeListAttract + sPrizeListRareCandy2, + sPrizeListLuxuryBall2, + sPrizeListMaxRevive2, + sPrizeListMaxEther2, + sPrizeListElixir2, + sPrizeListBrickBreak, + sPrizeListTorment, + sPrizeListSkillSwap, + sPrizeListGigaDrain, + sPrizeListAttract }; static const u16 *const *const sPrizeListSets[] = @@ -201,15 +197,15 @@ static const u16 *const *const sPrizeListSets[] = sPrizeLists2 }; -static const u16 sEReader_Pal[] = INCBIN_U16("graphics/misc/trainer_hill_ereader.gbapal"); +static const u16 sEReader_Pal[] = INCBIN_U16("graphics/trainer_hill/ereader.gbapal"); static const u8 sRecordWinColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}; -static const struct TrHillTag *const sDataPerTag[] = +static const struct TrainerHillChallenge *const sChallengeData[NUM_TRAINER_HILL_MODES] = { - &sDataTagNormal, - &sDataTagVariety, - &sDataTagUnique, - &sDataTagExpert, + [HILL_MODE_NORMAL] = &sChallenge_Normal, + [HILL_MODE_VARIETY] = &sChallenge_Variety, + [HILL_MODE_UNIQUE] = &sChallenge_Unique, + [HILL_MODE_EXPERT] = &sChallenge_Expert, }; // Unused. @@ -240,15 +236,15 @@ static void (* const sHillFunctions[])(void) = [TRAINER_HILL_FUNC_SET_GAME_SAVED] = SetGameSaved, [TRAINER_HILL_FUNC_CLEAR_GAME_SAVED] = ClearGameSaved, [TRAINER_HILL_FUNC_GET_WON] = GetChallengeWon, - [TRAINER_HILL_FUNC_SET_TAG] = TrainerHillSetTag, + [TRAINER_HILL_FUNC_SET_MODE] = TrainerHillSetMode, }; -static const u8 *const sTagMatchStrings[] = +static const u8 *const sModeStrings[NUM_TRAINER_HILL_MODES] = { - gText_NormalTagMatch, - gText_VarietyTagMatch, - gText_UniqueTagMatch, - gText_ExpertTagMatch, + [HILL_MODE_NORMAL] = gText_NormalTagMatch, + [HILL_MODE_VARIETY] = gText_VarietyTagMatch, + [HILL_MODE_UNIQUE] = gText_UniqueTagMatch, + [HILL_MODE_EXPERT] = gText_ExpertTagMatch, }; static const struct ObjectEventTemplate sTrainerObjectEventTemplate = @@ -261,20 +257,19 @@ static const struct ObjectEventTemplate sTrainerObjectEventTemplate = .trainerType = TRAINER_TYPE_NORMAL, }; -static const u32 sNextFloorMapNum[NUM_TRAINER_HILL_FLOORS] = +static const u32 sNextFloorMapNum[NUM_TRAINER_HILL_FLOORS] = { - MAP_NUM(TRAINER_HILL_2F), - MAP_NUM(TRAINER_HILL_3F), - MAP_NUM(TRAINER_HILL_4F), - MAP_NUM(TRAINER_HILL_ROOF) + [TRAINER_HILL_1F - 1] = MAP_NUM(TRAINER_HILL_2F), + [TRAINER_HILL_2F - 1] = MAP_NUM(TRAINER_HILL_3F), + [TRAINER_HILL_3F - 1] = MAP_NUM(TRAINER_HILL_4F), + [TRAINER_HILL_4F - 1] = MAP_NUM(TRAINER_HILL_ROOF) }; -static const u8 sTrainerPartySlots[][PARTY_SIZE / 2] = +static const u8 sTrainerPartySlots[HILL_TRAINERS_PER_FLOOR][PARTY_SIZE / 2] = { - {0, 1, 2}, + {0, 1, 2}, {3, 4, 5} }; -// code void CallTrainerHillFunction(void) { SetUpDataStruct(); @@ -289,7 +284,7 @@ void ResetTrainerHillResults(void) gSaveBlock2Ptr->frontier.savedGame = 0; gSaveBlock2Ptr->frontier.unk_EF9 = 0; gSaveBlock1Ptr->trainerHill.bestTime = 0; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_TRAINER_HILL_MODES; i++) SetTimerValue(&gSaveBlock1Ptr->trainerHillTimes[i], HILL_MAX_TIME); } @@ -302,7 +297,7 @@ u8 GetTrainerHillOpponentClass(u16 trainerId) { u8 id = trainerId - 1; - return gFacilityClassToTrainerClass[sRoomTrainers->facilityClass[id]]; + return gFacilityClassToTrainerClass[sFloorTrainers->facilityClass[id]]; } void GetTrainerHillTrainerName(u8 *dst, u16 trainerId) @@ -310,8 +305,8 @@ void GetTrainerHillTrainerName(u8 *dst, u16 trainerId) s32 i; u8 id = trainerId - 1; - for (i = 0; i < HILL_TRAINER_NAME_LENGTH; i++) - dst[i] = sRoomTrainers->name[id][i]; + for (i = 0; i < TRAINER_NAME_LENGTH + 1; i++) + dst[i] = sFloorTrainers->name[id][i]; } u8 GetTrainerHillTrainerFrontSpriteId(u16 trainerId) @@ -331,15 +326,14 @@ void InitTrainerHillBattleStruct(void) s32 i, j; SetUpDataStruct(); - sRoomTrainers = AllocZeroed(sizeof(*sRoomTrainers)); + sFloorTrainers = AllocZeroed(sizeof(*sFloorTrainers)); - for (i = 0; i < 2; i++) + for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) { - for (j = 0; j < HILL_TRAINER_NAME_LENGTH; j++) - { - sRoomTrainers->name[i][j] = sHillData->floors[sHillData->floorId].trainers[i].name[j]; - } - sRoomTrainers->facilityClass[i] = sHillData->floors[sHillData->floorId].trainers[i].facilityClass; + for (j = 0; j < TRAINER_NAME_LENGTH + 1; j++) + sFloorTrainers->name[i][j] = sHillData->floors[sHillData->floorId].trainers[i].name[j]; + + sFloorTrainers->facilityClass[i] = sHillData->floors[sHillData->floorId].trainers[i].facilityClass; } SetTrainerHillVBlankCounter(&gSaveBlock1Ptr->trainerHill.timer); FreeDataStruct(); @@ -347,8 +341,7 @@ void InitTrainerHillBattleStruct(void) void FreeTrainerHillBattleStruct(void) { - if (sRoomTrainers != NULL) - FREE_AND_SET_NULL(sRoomTrainers); + TRY_FREE_AND_SET_NULL(sFloorTrainers); } static void SetUpDataStruct(void) @@ -357,15 +350,20 @@ static void SetUpDataStruct(void) { sHillData = AllocZeroed(sizeof(*sHillData)); sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F; - CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor)); + + // This copy depends on the floor data for each challenge being directly after the + // challenge header data, and for the field 'floors' in sHillData to come directly + // after the field 'challenge'. + // e.g. for HILL_MODE_NORMAL, it will copy sChallenge_Normal to sHillData->challenge and + // it will copy sFloors_Normal to sHillData->floors + CpuCopy32(sChallengeData[gSaveBlock1Ptr->trainerHill.mode], &sHillData->challenge, sizeof(sHillData->challenge) + sizeof(sHillData->floors)); TrainerHillDummy(); } } static void FreeDataStruct(void) { - if (sHillData != NULL) - FREE_AND_SET_NULL(sHillData); + TRY_FREE_AND_SET_NULL(sHillData); } void CopyTrainerHillTrainerText(u8 which, u16 trainerId) @@ -430,7 +428,7 @@ static void GiveChallengePrize(void) { u16 itemId = GetPrizeItemId(); - if (sHillData->tag.numFloors != NUM_TRAINER_HILL_FLOORS || gSaveBlock1Ptr->trainerHill.receivedPrize) + if (sHillData->challenge.numFloors != NUM_TRAINER_HILL_FLOORS || gSaveBlock1Ptr->trainerHill.receivedPrize) { gSpecialVar_Result = 2; } @@ -458,7 +456,7 @@ static void CheckFinalTime(void) else if (GetTimerValue(&gSaveBlock1Ptr->trainerHill.bestTime) > gSaveBlock1Ptr->trainerHill.timer) { SetTimerValue(&gSaveBlock1Ptr->trainerHill.bestTime, gSaveBlock1Ptr->trainerHill.timer); - gSaveBlock1Ptr->trainerHillTimes[gSaveBlock1Ptr->trainerHill.tag] = gSaveBlock1Ptr->trainerHill.bestTime; + gSaveBlock1Ptr->trainerHillTimes[gSaveBlock1Ptr->trainerHill.mode] = gSaveBlock1Ptr->trainerHill.bestTime; gSpecialVar_Result = 0; } else @@ -531,9 +529,9 @@ static void BufferChallengeTime(void) static void GetAllFloorsUsed(void) { SetUpDataStruct(); - if (sHillData->tag.numFloors != NUM_TRAINER_HILL_FLOORS) + if (sHillData->challenge.numFloors != NUM_TRAINER_HILL_FLOORS) { - ConvertIntToDecimalStringN(gStringVar1, sHillData->tag.numFloors, STR_CONV_MODE_LEFT_ALIGN, 1); + ConvertIntToDecimalStringN(gStringVar1, sHillData->challenge.numFloors, STR_CONV_MODE_LEFT_ALIGN, 1); gSpecialVar_Result = FALSE; } else @@ -590,13 +588,13 @@ void PrintOnTrainerHillRecordsWindow(void) SetUpDataStruct(); FillWindowPixelBuffer(0, PIXEL_FILL(0)); - x = GetStringCenterAlignXOffset(1, gText_TimeBoard, 0xD0); - AddTextPrinterParameterized3(0, 1, x, 2, sRecordWinColors, TEXT_SPEED_FF, gText_TimeBoard); + x = GetStringCenterAlignXOffset(FONT_NORMAL, gText_TimeBoard, 0xD0); + AddTextPrinterParameterized3(0, FONT_NORMAL, x, 2, sRecordWinColors, TEXT_SKIP_DRAW, gText_TimeBoard); y = 18; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_TRAINER_HILL_MODES; i++) { - AddTextPrinterParameterized3(0, 1, 0, y, sRecordWinColors, TEXT_SPEED_FF, sTagMatchStrings[i]); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0, y, sRecordWinColors, TEXT_SKIP_DRAW, sModeStrings[i]); y += 15; total = GetTimerValue(&gSaveBlock1Ptr->trainerHillTimes[i]); minutes = total / (60 * 60); @@ -608,13 +606,13 @@ void PrintOnTrainerHillRecordsWindow(void) secondsFraction = (total * 168) / 100; ConvertIntToDecimalStringN(gStringVar3, secondsFraction, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(StringCopy(gStringVar4, gText_TimeCleared), gText_XMinYDotZSec); - x = GetStringRightAlignXOffset(1, gStringVar4, 0xD0); - AddTextPrinterParameterized3(0, 1, x, y, sRecordWinColors, TEXT_SPEED_FF, gStringVar4); + x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0xD0); + AddTextPrinterParameterized3(0, FONT_NORMAL, x, y, sRecordWinColors, TEXT_SKIP_DRAW, gStringVar4); y += 17; } PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); FreeDataStruct(); } @@ -639,23 +637,23 @@ void LoadTrainerHillObjectEventTemplates(void) return; SetUpDataStruct(); - for (i = 0; i < 2; i++) + for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF; CpuFill32(0, gSaveBlock1Ptr->objectEventTemplates, sizeof(gSaveBlock1Ptr->objectEventTemplates)); floorId = GetFloorId(); - for (i = 0; i < 2; i++) + for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) { u8 bits; eventTemplates[i] = sTrainerObjectEventTemplate; eventTemplates[i].localId = i + 1; eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->floors[floorId].trainers[i].facilityClass); - eventTemplates[i].x = sHillData->floors[floorId].display.coords[i] & 0xF; - eventTemplates[i].y = ((sHillData->floors[floorId].display.coords[i] >> 4) & 0xF) + 5; + eventTemplates[i].x = sHillData->floors[floorId].map.trainerCoords[i] & 0xF; + eventTemplates[i].y = ((sHillData->floors[floorId].map.trainerCoords[i] >> 4) & 0xF) + 5; bits = i << 2; - eventTemplates[i].movementType = ((sHillData->floors[floorId].display.direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; - eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].display.range >> bits) & 0xF; + eventTemplates[i].movementType = ((sHillData->floors[floorId].map.trainerDirections >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; + eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].map.trainerRanges >> bits) & 0xF; eventTemplates[i].script = TrainerHill_EventScript_TrainerBattle; gSaveBlock2Ptr->frontier.trainerIds[i] = i + 1; } @@ -671,22 +669,22 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void) return TRUE; } -static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 stride) // stride is always 16 +static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 floorWidth) // floorWidth is always 16 { bool8 impassable; u16 metatile; u16 elevation; - impassable = (sHillData->floors[floorId].display.collisionData[y] >> (15 - x) & 1); - metatile = sHillData->floors[floorId].display.metatileData[stride * y + x] + NUM_METATILES_IN_PRIMARY; - elevation = 3 << METATILE_ELEVATION_SHIFT; + impassable = (sHillData->floors[floorId].map.collisionData[y] >> (15 - x) & 1); + metatile = sHillData->floors[floorId].map.metatileData[floorWidth * y + x] + NUM_METATILES_IN_PRIMARY; + elevation = 3 << MAPGRID_ELEVATION_SHIFT; - return ((impassable << METATILE_COLLISION_SHIFT) & METATILE_COLLISION_MASK) | elevation | (metatile & METATILE_ID_MASK); + return ((impassable << MAPGRID_COLLISION_SHIFT) & MAPGRID_COLLISION_MASK) | elevation | (metatile & MAPGRID_METATILE_ID_MASK); } void GenerateTrainerHillFloorLayout(u16 *mapArg) { - s32 i, j; + s32 y, x; u16 *src, *dst; u8 mapId = GetCurrentTrainerHillMapId(); @@ -707,24 +705,25 @@ void GenerateTrainerHillFloorLayout(u16 *mapArg) mapId = GetFloorId(); src = gMapHeader.mapLayout->map; gBackupMapLayout.map = mapArg; - gBackupMapLayout.width = 31; - gBackupMapLayout.height = 35; + // Dimensions include border area loaded beyond map + gBackupMapLayout.width = HILL_FLOOR_WIDTH + 15; + gBackupMapLayout.height = HILL_FLOOR_HEIGHT + 14; dst = mapArg + 224; // First 5 rows of the map (Entrance / Exit) are always the same - for (i = 0; i < 5; i++) + for (y = 0; y < HILL_FLOOR_HEIGHT_MARGIN; y++) { - for (j = 0; j < 16; j++) - dst[j] = src[j]; + for (x = 0; x < HILL_FLOOR_WIDTH; x++) + dst[x] = src[x]; dst += 31; src += 16; } // Load the 16x16 floor-specific layout - for (i = 0; i < 16; i++) + for (y = 0; y < HILL_FLOOR_HEIGHT_MAIN; y++) { - for (j = 0; j < 16; j++) - dst[j] = GetMetatileForFloor(mapId, j, i, 16); + for (x = 0; x < HILL_FLOOR_WIDTH; x++) + dst[x] = GetMetatileForFloor(mapId, x, y, HILL_FLOOR_WIDTH); dst += 31; } @@ -814,8 +813,8 @@ u16 LocalIdToHillTrainerId(u8 localId) bool8 GetHillTrainerFlag(u8 objectEventId) { - u32 floorId = GetFloorId() * 2; - u8 bitId = gObjectEvents[objectEventId].localId - 1 + floorId; + u32 trainerIndexStart = GetFloorId() * HILL_TRAINERS_PER_FLOOR; + u8 bitId = gObjectEvents[objectEventId].localId - 1 + trainerIndexStart; return gSaveBlock2Ptr->frontier.trainerFlags & gBitTable[bitId]; } @@ -823,24 +822,24 @@ bool8 GetHillTrainerFlag(u8 objectEventId) void SetHillTrainerFlag(void) { u8 i; - u8 floorId = GetFloorId() * 2; + u8 trainerIndexStart = GetFloorId() * HILL_TRAINERS_PER_FLOOR; - for (i = 0; i < 2; i++) + for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_A) { - gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[floorId + i]; + gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[trainerIndexStart + i]; break; } } if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { - for (i = 0; i < 2; i++) + for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_B) { - gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[floorId + i]; + gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[trainerIndexStart + i]; break; } } @@ -863,14 +862,14 @@ static void CreateNPCTrainerHillParty(u16 trainerId, u8 firstMonId) u8 trId, level; s32 i, floorId, partySlot; - if (trainerId == 0 || trainerId > 2) + if (trainerId == 0 || trainerId > HILL_TRAINERS_PER_FLOOR) return; trId = trainerId - 1; SetUpDataStruct(); level = GetHighestLevelInPlayerParty(); floorId = GetFloorId(); - for (i = firstMonId, partySlot = 0; i < firstMonId + 3; i++, partySlot++) + for (i = firstMonId, partySlot = 0; i < firstMonId + PARTY_SIZE / 2; i++, partySlot++) { u8 id = sTrainerPartySlots[trId][partySlot]; struct Pokemon *mon = &gEnemyParty[i]; @@ -892,7 +891,7 @@ void FillHillTrainersParties(void) { ZeroEnemyPartyMons(); CreateNPCTrainerHillParty(gTrainerBattleOpponent_A, 0); - CreateNPCTrainerHillParty(gTrainerBattleOpponent_B, 3); + CreateNPCTrainerHillParty(gTrainerBattleOpponent_B, PARTY_SIZE / 2); } // This function is unused, but my best guess is @@ -900,7 +899,7 @@ void FillHillTrainersParties(void) // hill trainers. u32 GetTrainerHillAIFlags(void) { - return (AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY); + return (AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY); } u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId) @@ -937,7 +936,7 @@ u8 GetNumFloorsInTrainerHillChallenge(void) u8 floors; SetUpDataStruct(); - floors = sHillData->tag.numFloors; + floors = sHillData->challenge.numFloors; FreeDataStruct(); return floors; @@ -991,16 +990,20 @@ static void GetChallengeWon(void) gSpecialVar_Result = TRUE; } -static void TrainerHillSetTag(void) +static void TrainerHillSetMode(void) { - gSaveBlock1Ptr->trainerHill.tag = gSpecialVar_0x8005; + gSaveBlock1Ptr->trainerHill.mode = gSpecialVar_0x8005; gSaveBlock1Ptr->trainerHill.bestTime = gSaveBlock1Ptr->trainerHillTimes[gSpecialVar_0x8005]; } -static u8 GetPrizeListId(bool8 maxTrainers) +// Determines which prize list to use from the set of prize lists. +static u8 GetPrizeListId(bool8 allowTMs) { u8 prizeListId, i, modBy; + // The initial selection depends on the trainer numbers for the completed challenge. + // These don't change with the available challenge modes, so Normal/Unique will always + // have a prizeListId of 8, and Variety/Expert will have a prizeListId of 24. prizeListId = 0; for (i = 0; i < NUM_TRAINER_HILL_FLOORS; i++) { @@ -1008,8 +1011,10 @@ static u8 GetPrizeListId(bool8 maxTrainers) prizeListId ^= sHillData->floors[i].trainerNum2 & 0x1F; } - // Not possible to win TMs with fewer than 8 trainers - if (maxTrainers) + // In practice, the conditional below is always true. + // The 2nd half of the lists in both sets of lists all have a TM as the "grand prize", while the 1st half do not, + // so taking the mod of the (total / 2) ensures that a prize list without a TM will be used. + if (allowTMs) modBy = NUM_TRAINER_HILL_PRIZE_LISTS; else modBy = NUM_TRAINER_HILL_PRIZE_LISTS / 2; @@ -1022,38 +1027,64 @@ static u16 GetPrizeItemId(void) { u8 i; const u16 *prizeList; - s32 var = 0, prizeListSetId, minutes, id; + s32 trainerNumSum = 0, prizeListSetId, minutes, id; + // First determine which set of prize lists to use. The sets of lists only differ in + // what TMs they can offer as the "grand prize" for a time under 12 minutes. + // Which set of lists gets used is based on the sum of all the trainer numbers for that + // challenge. These don't change with the available challenge modes, so Normal will always + // have a prizeListSetId of 0, and Unique/Variety/Expert will have a prizeListSetId of 1. for (i = 0; i < NUM_TRAINER_HILL_FLOORS; i++) { - var += sHillData->floors[i].trainerNum1; - var += sHillData->floors[i].trainerNum2; + trainerNumSum += sHillData->floors[i].trainerNum1; + trainerNumSum += sHillData->floors[i].trainerNum2; } + prizeListSetId = trainerNumSum / 256; + prizeListSetId %= (int)ARRAY_COUNT(sPrizeListSets); - prizeListSetId = var / 256; - prizeListSetId %= 2; - if (FlagGet(FLAG_SYS_GAME_CLEAR) && sHillData->tag.numTrainers == NUM_TRAINER_HILL_TRAINERS) + // Now get which prize list to use from the set. See GetPrizeListId for details. + // The below conditional will always be true, because a Trainer Hill challenge can't be entered + // until the player has entered the Hall of Fame (FLAG_SYS_GAME_CLEAR is set) and because all + // of the available challenge modes have the full 8 trainers (NUM_TRAINER_HILL_TRAINERS). + if (FlagGet(FLAG_SYS_GAME_CLEAR) && sHillData->challenge.numTrainers == NUM_TRAINER_HILL_TRAINERS) i = GetPrizeListId(TRUE); else i = GetPrizeListId(FALSE); - if (gSaveBlock1Ptr->trainerHill.tag == HILL_TAG_EXPERT) + // 1 is added to Expert mode's prize list selection because otherwise it has the same prizes as Variety + if (gSaveBlock1Ptr->trainerHill.mode == HILL_MODE_EXPERT) i = (i + 1) % NUM_TRAINER_HILL_PRIZE_LISTS; + // After the above (non-random) calculations, the following are the possible prize list selections: + // sPrizeListSets[0][8] (Normal) + // sPrizeListSets[1][4] (Variety) + // sPrizeListSets[1][8] (Unique) + // sPrizeListSets[1][5] (Expert) prizeList = sPrizeListSets[prizeListSetId][i]; + + // Which prize is given from the list depends on the time scored. + // The prize for any time after 12 minutes is the same in every list. + // The prizes for a time under 12 minutes are: + // - ITEM_TM11_SUNNY_DAY (Normal) + // - ITEM_ELIXIR (Variety) + // - ITEM_TM19_GIGA_DRAIN (Unique) + // - ITEM_TM31_BRICK_BREAK (Expert) + // As an additional note, if players were allowed to enter a Trainer Hill challenge before + // entering the Hall of Fame, there would be 1 additional prize possibility (ITEM_MAX_ETHER) + // as Normal / Unique modes would use sPrizeListSets[0][3] / sPrizeListSets[1][3] respectively. minutes = (signed)(gSaveBlock1Ptr->trainerHill.timer) / (60 * 60); if (minutes < 12) - id = 0; + id = 0; // Depends on list else if (minutes < 13) - id = 1; + id = 1; // ITEM_ETHER else if (minutes < 14) - id = 2; + id = 2; // ITEM_MAX_POTION else if (minutes < 16) - id = 3; + id = 3; // ITEM_REVIVE else if (minutes < 18) - id = 4; + id = 4; // ITEM_FLUFFY_TAIL else - id = 5; + id = 5; // ITEM_GREAT_BALL return prizeList[id]; } diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index d520c5476d..dcc6647182 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -9,8 +9,6 @@ #include "pokemon.h" #include "constants/trainers.h" -// Static type declarations - struct PicData { u8 *frames; @@ -20,33 +18,26 @@ struct PicData u8 active; }; -// Static RAM declarations #define PICS_COUNT 8 static EWRAM_DATA struct SpriteTemplate sCreatingSpriteTemplate = {}; static EWRAM_DATA struct PicData sSpritePics[PICS_COUNT] = {}; -// Static ROM declarations - -// .rodata - static const struct PicData sDummyPicData = {}; -static const struct OamData gUnknown_0860B064 = +static const struct OamData sOamData_Normal = { .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64) }; -static const struct OamData gUnknown_0860B06C = +static const struct OamData sOamData_Affine = { .affineMode = ST_OAM_AFFINE_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64) }; -// .text - static void DummyPicSpriteCallback(struct Sprite *sprite) { @@ -68,11 +59,11 @@ static bool16 DecompressPic(u16 species, u32 personality, bool8 isFrontPic, u8 * { if (isFrontPic) { - LoadSpecialPokePic(&gMonFrontPicTable[species], dest, species, personality, isFrontPic); + LoadSpecialPokePic(dest, species, personality, isFrontPic); } else { - LoadSpecialPokePic(&gMonBackPicTable[species], dest, species, personality, isFrontPic); + LoadSpecialPokePic(dest, species, personality, isFrontPic); } } else @@ -89,9 +80,9 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 { if (!isTrainer) { - if (paletteTag == 0xFFFF) + if (paletteTag == TAG_NONE) { - sCreatingSpriteTemplate.paletteTag = 0xFFFF; + sCreatingSpriteTemplate.paletteTag = TAG_NONE; LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20); } else @@ -102,9 +93,9 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 } else { - if (paletteTag == 0xFFFF) + if (paletteTag == TAG_NONE) { - sCreatingSpriteTemplate.paletteTag = 0xFFFF; + sCreatingSpriteTemplate.paletteTag = TAG_NONE; LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, 0x100 + paletteSlot * 0x10, 0x20); } else @@ -142,19 +133,15 @@ static u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFront for (i = 0; i < PICS_COUNT; i ++) { if (!sSpritePics[i].active) - { break; - } } if (i == PICS_COUNT) - { return 0xFFFF; - } + framePics = Alloc(4 * 0x800); if (!framePics) - { return 0xFFFF; - } + images = Alloc(4 * sizeof(struct SpriteFrameImage)); if (!images) { @@ -171,18 +158,16 @@ static u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFront images[j].data = framePics + 0x800 * j; images[j].size = 0x800; } - sCreatingSpriteTemplate.tileTag = 0xFFFF; - sCreatingSpriteTemplate.oam = &gUnknown_0860B064; + sCreatingSpriteTemplate.tileTag = TAG_NONE; + sCreatingSpriteTemplate.oam = &sOamData_Normal; AssignSpriteAnimsTable(isTrainer); sCreatingSpriteTemplate.images = images; sCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; sCreatingSpriteTemplate.callback = DummyPicSpriteCallback; LoadPicPaletteByTagOrSlot(species, otId, personality, paletteSlot, paletteTag, isTrainer); spriteId = CreateSprite(&sCreatingSpriteTemplate, x, y, 0); - if (paletteTag == 0xFFFF) - { + if (paletteTag == TAG_NONE) gSprites[spriteId].oam.paletteNum = paletteSlot; - } sSpritePics[i].frames = framePics; sSpritePics[i].images = images; sSpritePics[i].paletteTag = paletteTag; @@ -191,39 +176,35 @@ static u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFront return spriteId; } -u16 CreatePicSprite2(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag) +u16 CreateMonPicSprite_Affine(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag) { u8 *framePics; struct SpriteFrameImage *images; int j; u8 i; u8 spriteId; - u8 flags2; + u8 type; - for (i = 0; i < PICS_COUNT; i ++) + for (i = 0; i < PICS_COUNT; i++) { if (!sSpritePics[i].active) - { break; - } } if (i == PICS_COUNT) - { return 0xFFFF; - } - framePics = Alloc(4 * 0x800); + + framePics = Alloc(4 * MON_PIC_SIZE); if (!framePics) - { return 0xFFFF; - } - if (flags & 0x80) + + if (flags & F_MON_PIC_NO_AFFINE) { - flags &= 0x7F; - flags2 = 3; + flags &= ~F_MON_PIC_NO_AFFINE; + type = MON_PIC_AFFINE_NONE; } else { - flags2 = flags; + type = flags; } images = Alloc(4 * sizeof(struct SpriteFrameImage)); if (!images) @@ -238,34 +219,32 @@ u16 CreatePicSprite2(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s1 } for (j = 0; j < 4; j ++) { - images[j].data = framePics + 0x800 * j; - images[j].size = 0x800; + images[j].data = framePics + MON_PIC_SIZE * j; + images[j].size = MON_PIC_SIZE; } - sCreatingSpriteTemplate.tileTag = 0xFFFF; + sCreatingSpriteTemplate.tileTag = TAG_NONE; sCreatingSpriteTemplate.anims = gMonFrontAnimsPtrTable[species]; sCreatingSpriteTemplate.images = images; - if (flags2 == 0x01) + if (type == MON_PIC_AFFINE_FRONT) { sCreatingSpriteTemplate.affineAnims = gAffineAnims_BattleSpriteOpponentSide; - sCreatingSpriteTemplate.oam = &gUnknown_0860B06C; + sCreatingSpriteTemplate.oam = &sOamData_Affine; } - else if (flags2 == 0x00) + else if (type == MON_PIC_AFFINE_BACK) { sCreatingSpriteTemplate.affineAnims = gAffineAnims_BattleSpritePlayerSide; - sCreatingSpriteTemplate.oam = &gUnknown_0860B06C; + sCreatingSpriteTemplate.oam = &sOamData_Affine; } - else + else // MON_PIC_AFFINE_NONE { - sCreatingSpriteTemplate.oam = &gUnknown_0860B064; + sCreatingSpriteTemplate.oam = &sOamData_Normal; sCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; } sCreatingSpriteTemplate.callback = DummyPicSpriteCallback; LoadPicPaletteByTagOrSlot(species, otId, personality, paletteSlot, paletteTag, FALSE); spriteId = CreateSprite(&sCreatingSpriteTemplate, x, y, 0); - if (paletteTag == 0xFFFF) - { + if (paletteTag == TAG_NONE) gSprites[spriteId].oam.paletteNum = paletteSlot; - } sSpritePics[i].frames = framePics; sSpritePics[i].images = images; sSpritePics[i].paletteTag = paletteTag; @@ -283,20 +262,15 @@ static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId) for (i = 0; i < PICS_COUNT; i ++) { if (sSpritePics[i].spriteId == spriteId) - { break; - } } if (i == PICS_COUNT) - { return 0xFFFF; - } + framePics = sSpritePics[i].frames; images = sSpritePics[i].images; - if (sSpritePics[i].paletteTag != 0xFFFF) - { + if (sSpritePics[i].paletteTag != TAG_NONE) FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum)); - } DestroySprite(&gSprites[spriteId]); Free(framePics); Free(images); @@ -304,12 +278,11 @@ static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId) return 0; } -static u16 sub_818D65C(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId, bool8 isTrainer) +static u16 LoadPicSpriteInWindow(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId, bool8 isTrainer) { if (DecompressPic(species, personality, isFrontPic, (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), FALSE)) - { return 0xFFFF; - } + LoadPicPaletteBySlot(species, otId, personality, paletteSlot, isTrainer); return 0; } @@ -339,9 +312,10 @@ u16 FreeAndDestroyMonPicSprite(u16 spriteId) return FreeAndDestroyPicSpriteInternal(spriteId); } -u16 sub_818D834(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId) +// Unused +static u16 LoadMonPicInWindow(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId) { - return sub_818D65C(species, otId, personality, isFrontPic, paletteSlot, windowId, FALSE); + return LoadPicSpriteInWindow(species, otId, personality, isFrontPic, paletteSlot, windowId, FALSE); } // Unused, FRLG only @@ -360,9 +334,10 @@ u16 FreeAndDestroyTrainerPicSprite(u16 spriteId) return FreeAndDestroyPicSpriteInternal(spriteId); } -u16 sub_818D904(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId) +// Unused +static u16 LoadTrainerPicInWindow(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId) { - return sub_818D65C(species, 0, 0, isFrontPic, paletteSlot, windowId, TRUE); + return LoadPicSpriteInWindow(species, 0, 0, isFrontPic, paletteSlot, windowId, TRUE); } u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId) @@ -374,13 +349,10 @@ u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass) { if (getClass == TRUE) { - switch (gender) - { - default: + if (gender != MALE) return gFacilityClassToPicIndex[FACILITY_CLASS_MAY]; - case MALE: + else return gFacilityClassToPicIndex[FACILITY_CLASS_BRENDAN]; - } } return gender; } diff --git a/src/trainer_see.c b/src/trainer_see.c index ea052fb0ce..b333e03241 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -59,9 +59,9 @@ bool8 gTrainerApproachedPlayer; EWRAM_DATA u8 gApproachingTrainerId = 0; // const rom data -static const u8 sEmotion_ExclamationMarkGfx[] = INCBIN_U8("graphics/misc/emotion_exclamation.4bpp"); -static const u8 sEmotion_QuestionMarkGfx[] = INCBIN_U8("graphics/misc/emotion_question.4bpp"); -static const u8 sEmotion_HeartGfx[] = INCBIN_U8("graphics/misc/emotion_heart.4bpp"); +static const u8 sEmotion_ExclamationMarkGfx[] = INCBIN_U8("graphics/field_effects/pics/emotion_exclamation.4bpp"); +static const u8 sEmotion_QuestionMarkGfx[] = INCBIN_U8("graphics/field_effects/pics/emotion_question.4bpp"); +static const u8 sEmotion_HeartGfx[] = INCBIN_U8("graphics/field_effects/pics/emotion_heart.4bpp"); static u8 (*const sDirectionalApproachDistanceFuncs[])(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y) = { @@ -115,7 +115,7 @@ static const struct OamData sOamData_Icons = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, @@ -167,8 +167,8 @@ static const union AnimCmd *const sSpriteAnimTable_Icons[] = static const struct SpriteTemplate sSpriteTemplate_ExclamationQuestionMark = { - .tileTag = 0xffff, - .paletteTag = 0xffff, + .tileTag = TAG_NONE, + .paletteTag = TAG_NONE, .oam = &sOamData_Icons, .anims = sSpriteAnimTable_Icons, .images = sSpriteImageTable_ExclamationQuestionMark, @@ -178,7 +178,7 @@ static const struct SpriteTemplate sSpriteTemplate_ExclamationQuestionMark = static const struct SpriteTemplate sSpriteTemplate_HeartIcon = { - .tileTag = 0xffff, + .tileTag = TAG_NONE, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &sOamData_Icons, .anims = sSpriteAnimTable_Icons, @@ -367,8 +367,6 @@ static u8 GetTrainerApproachDistanceEast(struct ObjectEvent *trainerObj, s16 ran return 0; } -#define COLLISION_MASK (~1) - static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 approachDistance, u8 direction) { s16 x, y; @@ -385,8 +383,9 @@ static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 ap MoveCoords(direction, &x, &y); for (i = 0; i < approachDistance - 1; i++, MoveCoords(direction, &x, &y)) { + // Check for collisions on approach, ignoring the "out of range" collision for regular movement collision = GetCollisionFlagsAtCoords(trainerObj, x, y, direction); - if (collision != 0 && (collision & COLLISION_MASK)) + if (collision != 0 && (collision & ~(1 << (COLLISION_OUTSIDE_RANGE - 1)))) return 0; } @@ -523,7 +522,7 @@ static bool8 PlayerFaceApproachingTrainer(u8 taskId, struct Task *task, struct O if (ObjectEventIsMovementOverridden(playerObj) && !ObjectEventClearHeldMovementIfFinished(playerObj)) return FALSE; - sub_808BCE8(); + CancelPlayerForcedMovement(); ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], GetFaceDirectionMovementAction(GetOppositeDirection(trainerObj->facingDirection))); task->tFuncId++; // TRSEE_PLAYER_FACE_WAIT return FALSE; @@ -661,7 +660,7 @@ void DoTrainerApproach(void) static void Task_EndTrainerApproach(u8 taskId) { DestroyTask(taskId); - EnableBothScriptContexts(); + ScriptContext_Enable(); } void TryPrepareSecondApproachingTrainer(void) diff --git a/src/tv.c b/src/tv.c index 14a0dc53ff..902e5f41af 100644 --- a/src/tv.c +++ b/src/tv.c @@ -36,11 +36,11 @@ #include "data.h" #include "constants/battle_frontier.h" #include "constants/contest.h" +#include "constants/decorations.h" #include "constants/event_objects.h" #include "constants/items.h" #include "constants/layouts.h" #include "constants/lilycove_lady.h" -#include "constants/maps.h" #include "constants/metatile_behaviors.h" #include "constants/metatile_labels.h" #include "constants/moves.h" @@ -140,13 +140,13 @@ static void TryPutRandomPokeNewsOnAir(void); static void SortPurchasesByQuantity(void); static void UpdateMassOutbreakTimeLeft(u16); static void TryEndMassOutbreak(u16); -static void UpdatePokeNewsTimeLeft(u16); +static void UpdatePokeNewsCountdown(u16); static void ResolveWorldOfMastersShow(u16); static void ResolveNumberOneShow(u16); static void TryPutFishingAdviceOnAir(void); static u8 MonDataIdxToRibbon(u8); static void TryPutNumberOneOnAir(u8); -static bool8 IsPriceDiscounted(u8); +static bool8 ShouldApplyPokeNewsEffect(u8); static void TryPutWorldOfMastersOnAir(void); static void InterviewBefore_FanClubLetter(void); static void InterviewBefore_RecentHappenings(void); @@ -199,53 +199,53 @@ static const struct { { .species = SPECIES_SEEDOT, .moves = {MOVE_BIDE, MOVE_HARDEN, MOVE_LEECH_SEED}, - .level = 3, + .level = 3, .location = MAP_NUM(ROUTE102) }, { .species = SPECIES_NUZLEAF, .moves = {MOVE_HARDEN, MOVE_GROWTH, MOVE_NATURE_POWER, MOVE_LEECH_SEED}, - .level = 15, + .level = 15, .location = MAP_NUM(ROUTE114), }, { .species = SPECIES_SEEDOT, .moves = {MOVE_HARDEN, MOVE_GROWTH, MOVE_NATURE_POWER, MOVE_LEECH_SEED}, - .level = 13, + .level = 13, .location = MAP_NUM(ROUTE117), }, { .species = SPECIES_SEEDOT, .moves = {MOVE_GIGA_DRAIN, MOVE_FRUSTRATION, MOVE_SOLAR_BEAM, MOVE_LEECH_SEED}, - .level = 25, + .level = 25, .location = MAP_NUM(ROUTE120), }, { .species = SPECIES_SKITTY, .moves = {MOVE_GROWL, MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_ATTRACT}, - .level = 8, + .level = 8, .location = MAP_NUM(ROUTE116), } }; -static const u16 sGoldSymbolFlags[] = { - FLAG_SYS_TOWER_GOLD, - FLAG_SYS_DOME_GOLD, - FLAG_SYS_PALACE_GOLD, - FLAG_SYS_ARENA_GOLD, - FLAG_SYS_FACTORY_GOLD, - FLAG_SYS_PIKE_GOLD, - FLAG_SYS_PYRAMID_GOLD +static const u16 sGoldSymbolFlags[NUM_FRONTIER_FACILITIES] = { + [FRONTIER_FACILITY_TOWER] = FLAG_SYS_TOWER_GOLD, + [FRONTIER_FACILITY_DOME] = FLAG_SYS_DOME_GOLD, + [FRONTIER_FACILITY_PALACE] = FLAG_SYS_PALACE_GOLD, + [FRONTIER_FACILITY_ARENA] = FLAG_SYS_ARENA_GOLD, + [FRONTIER_FACILITY_FACTORY] = FLAG_SYS_FACTORY_GOLD, + [FRONTIER_FACILITY_PIKE] = FLAG_SYS_PIKE_GOLD, + [FRONTIER_FACILITY_PYRAMID] = FLAG_SYS_PYRAMID_GOLD }; -static const u16 sSilverSymbolFlags[] = { - FLAG_SYS_TOWER_SILVER, - FLAG_SYS_DOME_SILVER, - FLAG_SYS_PALACE_SILVER, - FLAG_SYS_ARENA_SILVER, - FLAG_SYS_FACTORY_SILVER, - FLAG_SYS_PIKE_SILVER, - FLAG_SYS_PYRAMID_SILVER +static const u16 sSilverSymbolFlags[NUM_FRONTIER_FACILITIES] = { + [FRONTIER_FACILITY_TOWER] = FLAG_SYS_TOWER_SILVER, + [FRONTIER_FACILITY_DOME] = FLAG_SYS_DOME_SILVER, + [FRONTIER_FACILITY_PALACE] = FLAG_SYS_PALACE_SILVER, + [FRONTIER_FACILITY_ARENA] = FLAG_SYS_ARENA_SILVER, + [FRONTIER_FACILITY_FACTORY] = FLAG_SYS_FACTORY_SILVER, + [FRONTIER_FACILITY_PIKE] = FLAG_SYS_PIKE_SILVER, + [FRONTIER_FACILITY_PYRAMID] = FLAG_SYS_PYRAMID_SILVER }; static const u16 sNumberOneVarsAndThresholds[][2] = { @@ -258,28 +258,28 @@ static const u16 sNumberOneVarsAndThresholds[][2] = { {VAR_DAILY_BP, 30} }; -static const u8 *const sPokeNewsTextGroup_Upcoming[] = { - NULL, - gPokeNewsTextSlateport_Upcoming, - gPokeNewsTextGameCorner_Upcoming, - gPokeNewsTextLilycove_Upcoming, - gPokeNewsTextBlendMaster_Upcoming +static const u8 *const sPokeNewsTextGroup_Upcoming[NUM_POKENEWS_TYPES + 1] = { + [POKENEWS_NONE] = NULL, + [POKENEWS_SLATEPORT] = gPokeNewsTextSlateport_Upcoming, + [POKENEWS_GAME_CORNER] = gPokeNewsTextGameCorner_Upcoming, + [POKENEWS_LILYCOVE] = gPokeNewsTextLilycove_Upcoming, + [POKENEWS_BLENDMASTER] = gPokeNewsTextBlendMaster_Upcoming }; -static const u8 *const sPokeNewsTextGroup_Ongoing[] = { - NULL, - gPokeNewsTextSlateport_Ongoing, - gPokeNewsTextGameCorner_Ongoing, - gPokeNewsTextLilycove_Ongoing, - gPokeNewsTextBlendMaster_Ongoing +static const u8 *const sPokeNewsTextGroup_Ongoing[NUM_POKENEWS_TYPES + 1] = { + [POKENEWS_NONE] = NULL, + [POKENEWS_SLATEPORT] = gPokeNewsTextSlateport_Ongoing, + [POKENEWS_GAME_CORNER] = gPokeNewsTextGameCorner_Ongoing, + [POKENEWS_LILYCOVE] = gPokeNewsTextLilycove_Ongoing, + [POKENEWS_BLENDMASTER] = gPokeNewsTextBlendMaster_Ongoing }; -static const u8 *const sPokeNewsTextGroup_Ending[] = { - NULL, - gPokeNewsTextSlateport_Ending, - gPokeNewsTextGameCorner_Ending, - gPokeNewsTextLilycove_Ending, - gPokeNewsTextBlendMaster_Ending +static const u8 *const sPokeNewsTextGroup_Ending[NUM_POKENEWS_TYPES + 1] = { + [POKENEWS_NONE] = NULL, + [POKENEWS_SLATEPORT] = gPokeNewsTextSlateport_Ending, + [POKENEWS_GAME_CORNER] = gPokeNewsTextGameCorner_Ending, + [POKENEWS_LILYCOVE] = gPokeNewsTextLilycove_Ending, + [POKENEWS_BLENDMASTER] = gPokeNewsTextBlendMaster_Ending }; u8 *const gTVStringVarPtrs[] = { @@ -373,21 +373,21 @@ static const u8 *const sTV3CheersForPokeblocksTextGroup[] = { }; static const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = { - gTVBravoTrainerBattleTowerText00, - gTVBravoTrainerBattleTowerText01, - gTVBravoTrainerBattleTowerText02, - gTVBravoTrainerBattleTowerText03, - gTVBravoTrainerBattleTowerText04, - gTVBravoTrainerBattleTowerText05, - gTVBravoTrainerBattleTowerText06, - gTVBravoTrainerBattleTowerText07, - gTVBravoTrainerBattleTowerText08, - gTVBravoTrainerBattleTowerText09, - gTVBravoTrainerBattleTowerText10, - gTVBravoTrainerBattleTowerText11, - gTVBravoTrainerBattleTowerText12, - gTVBravoTrainerBattleTowerText13, - gTVBravoTrainerBattleTowerText14 + [BRAVOTOWER_STATE_INTRO] = BravoTrainerBattleTower_Text_Intro, + [BRAVOTOWER_STATE_NEW_RECORD] = BravoTrainerBattleTower_Text_NewRecord, + [BRAVOTOWER_STATE_LOST] = BravoTrainerBattleTower_Text_Lost, + [BRAVOTOWER_STATE_WON] = BravoTrainerBattleTower_Text_Won, + [BRAVOTOWER_STATE_LOST_FINAL] = BravoTrainerBattleTower_Text_LostFinal, + [BRAVOTOWER_STATE_SATISFIED] = BravoTrainerBattleTower_Text_Satisfied, + [BRAVOTOWER_STATE_UNSATISFIED] = BravoTrainerBattleTower_Text_Unsatisfied, + [BRAVOTOWER_STATE_UNUSED_1] = BravoTrainerBattleTower_Text_None1, + [BRAVOTOWER_STATE_UNUSED_2] = BravoTrainerBattleTower_Text_None2, + [BRAVOTOWER_STATE_UNUSED_3] = BravoTrainerBattleTower_Text_None3, + [BRAVOTOWER_STATE_UNUSED_4] = BravoTrainerBattleTower_Text_None4, + [BRAVOTOWER_STATE_RESPONSE] = BravoTrainerBattleTower_Text_Response, + [BRAVOTOWER_STATE_RESPONSE_SATISFIED] = BravoTrainerBattleTower_Text_ResponseSatisfied, + [BRAVOTOWER_STATE_RESPONSE_UNSATISFIED] = BravoTrainerBattleTower_Text_ResponseUnsatisfied, + [BRAVOTOWER_STATE_OUTRO] = BravoTrainerBattleTower_Text_Outro }; static const u8 *const sTVContestLiveUpdatesTextGroup[] = { @@ -648,50 +648,50 @@ static const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = { gTVWhatsNo1InHoennTodayText08 }; -static const u8 *const sTVSecretBaseSecretsTextGroup[SBSECRETS_NUM_STATES] = +static const u8 *const sTVSecretBaseSecretsTextGroup[SBSECRETS_NUM_STATES] = { - [SBSECRETS_STATE_INTRO] = TVSecretBaseSecrets_Text_Intro, + [SBSECRETS_STATE_INTRO] = TVSecretBaseSecrets_Text_Intro, [SBSECRETS_STATE_DO_NEXT1] = TVSecretBaseSecrets_Text_WhatWillPlayerDoNext1, [SBSECRETS_STATE_DO_NEXT2] = TVSecretBaseSecrets_Text_WhatWillPlayerDoNext2, [SBSECRETS_STATE_TOOK_X_STEPS] = TVSecretBaseSecrets_Text_TookXStepsBeforeLeaving, - [SBSECRETS_STATE_BASE_INTEREST_LOW] = TVSecretBaseSecrets_Text_BaseFailedToInterestPlayer, - [SBSECRETS_STATE_BASE_INTEREST_MED] = TVSecretBaseSecrets_Text_PlayerEnjoyedBase, + [SBSECRETS_STATE_BASE_INTEREST_LOW] = TVSecretBaseSecrets_Text_BaseFailedToInterestPlayer, + [SBSECRETS_STATE_BASE_INTEREST_MED] = TVSecretBaseSecrets_Text_PlayerEnjoyedBase, [SBSECRETS_STATE_BASE_INTEREST_HIGH] = TVSecretBaseSecrets_Text_PlayerHugeFanOfBase, - [SBSECRETS_STATE_OUTRO] = TVSecretBaseSecrets_Text_Outro, - [SBSECRETS_STATE_NOTHING_USED1] = TVSecretBaseSecrets_Text_StoppedMoving1, - [SBSECRETS_STATE_NOTHING_USED2] = TVSecretBaseSecrets_Text_StoppedMoving2, - [SBSECRETS_STATE_USED_CHAIR] = TVSecretBaseSecrets_Text_UsedChair, - [SBSECRETS_STATE_USED_BALLOON] = TVSecretBaseSecrets_Text_UsedBalloon, - [SBSECRETS_STATE_USED_TENT] = TVSecretBaseSecrets_Text_UsedTent, - [SBSECRETS_STATE_USED_PLANT] = TVSecretBaseSecrets_Text_UsedPlant, - [SBSECRETS_STATE_USED_GOLD_SHIELD] = TVSecretBaseSecrets_Text_UsedGoldShield, - [SBSECRETS_STATE_USED_SILVER_SHIELD] = TVSecretBaseSecrets_Text_UsedSilverShield, - [SBSECRETS_STATE_USED_GLASS_ORNAMENT] = TVSecretBaseSecrets_Text_UsedGlassOrnament, - [SBSECRETS_STATE_USED_TV] = TVSecretBaseSecrets_Text_UsedTV, - [SBSECRETS_STATE_USED_MUD_BALL] = TVSecretBaseSecrets_Text_UsedMudBall, - [SBSECRETS_STATE_USED_BAG] = TVSecretBaseSecrets_Text_UsedBag, - [SBSECRETS_STATE_USED_CUSHION] = TVSecretBaseSecrets_Text_UsedCushion, - [SBSECRETS_STATE_HIT_CUSHION] = TVSecretBaseSecrets_Text_HitCushion, - [SBSECRETS_STATE_HUGGED_CUSHION] = TVSecretBaseSecrets_Text_HuggedCushion, - [SBSECRETS_STATE_BATTLED_WON] = TVSecretBaseSecrets_Text_BattledWon, - [SBSECRETS_STATE_BATTLED_LOST] = TVSecretBaseSecrets_Text_BattledLost, - [SBSECRETS_STATE_DECLINED_BATTLE] = TVSecretBaseSecrets_Text_DeclinedBattle, - [SBSECRETS_STATE_USED_POSTER] = TVSecretBaseSecrets_Text_UsedPoster, - [SBSECRETS_STATE_USED_NOTE_MAT] = TVSecretBaseSecrets_Text_UsedNoteMat, - [SBSECRETS_STATE_BATTLED_DRAW] = TVSecretBaseSecrets_Text_BattledDraw, - [SBSECRETS_STATE_USED_SPIN_MAT] = TVSecretBaseSecrets_Text_UsedSpinMat, - [SBSECRETS_STATE_USED_SAND_ORNAMENT] = TVSecretBaseSecrets_Text_UsedSandOrnament, - [SBSECRETS_STATE_USED_DESK] = TVSecretBaseSecrets_Text_UsedDesk, - [SBSECRETS_STATE_USED_BRICK] = TVSecretBaseSecrets_Text_UsedBrick, - [SBSECRETS_STATE_USED_SOLID_BOARD] = TVSecretBaseSecrets_Text_UsedSolidBoard, - [SBSECRETS_STATE_USED_FENCE] = TVSecretBaseSecrets_Text_UsedFence, - [SBSECRETS_STATE_USED_GLITTER_MAT] = TVSecretBaseSecrets_Text_UsedGlitterMat, - [SBSECRETS_STATE_USED_TIRE] = TVSecretBaseSecrets_Text_UsedTire, - [SBSECRETS_STATE_USED_STAND] = TVSecretBaseSecrets_Text_UsedStand, + [SBSECRETS_STATE_OUTRO] = TVSecretBaseSecrets_Text_Outro, + [SBSECRETS_STATE_NOTHING_USED1] = TVSecretBaseSecrets_Text_StoppedMoving1, + [SBSECRETS_STATE_NOTHING_USED2] = TVSecretBaseSecrets_Text_StoppedMoving2, + [SBSECRETS_STATE_USED_CHAIR] = TVSecretBaseSecrets_Text_UsedChair, + [SBSECRETS_STATE_USED_BALLOON] = TVSecretBaseSecrets_Text_UsedBalloon, + [SBSECRETS_STATE_USED_TENT] = TVSecretBaseSecrets_Text_UsedTent, + [SBSECRETS_STATE_USED_PLANT] = TVSecretBaseSecrets_Text_UsedPlant, + [SBSECRETS_STATE_USED_GOLD_SHIELD] = TVSecretBaseSecrets_Text_UsedGoldShield, + [SBSECRETS_STATE_USED_SILVER_SHIELD] = TVSecretBaseSecrets_Text_UsedSilverShield, + [SBSECRETS_STATE_USED_GLASS_ORNAMENT] = TVSecretBaseSecrets_Text_UsedGlassOrnament, + [SBSECRETS_STATE_USED_TV] = TVSecretBaseSecrets_Text_UsedTV, + [SBSECRETS_STATE_USED_MUD_BALL] = TVSecretBaseSecrets_Text_UsedMudBall, + [SBSECRETS_STATE_USED_BAG] = TVSecretBaseSecrets_Text_UsedBag, + [SBSECRETS_STATE_USED_CUSHION] = TVSecretBaseSecrets_Text_UsedCushion, + [SBSECRETS_STATE_HIT_CUSHION] = TVSecretBaseSecrets_Text_HitCushion, + [SBSECRETS_STATE_HUGGED_CUSHION] = TVSecretBaseSecrets_Text_HuggedCushion, + [SBSECRETS_STATE_BATTLED_WON] = TVSecretBaseSecrets_Text_BattledWon, + [SBSECRETS_STATE_BATTLED_LOST] = TVSecretBaseSecrets_Text_BattledLost, + [SBSECRETS_STATE_DECLINED_BATTLE] = TVSecretBaseSecrets_Text_DeclinedBattle, + [SBSECRETS_STATE_USED_POSTER] = TVSecretBaseSecrets_Text_UsedPoster, + [SBSECRETS_STATE_USED_NOTE_MAT] = TVSecretBaseSecrets_Text_UsedNoteMat, + [SBSECRETS_STATE_BATTLED_DRAW] = TVSecretBaseSecrets_Text_BattledDraw, + [SBSECRETS_STATE_USED_SPIN_MAT] = TVSecretBaseSecrets_Text_UsedSpinMat, + [SBSECRETS_STATE_USED_SAND_ORNAMENT] = TVSecretBaseSecrets_Text_UsedSandOrnament, + [SBSECRETS_STATE_USED_DESK] = TVSecretBaseSecrets_Text_UsedDesk, + [SBSECRETS_STATE_USED_BRICK] = TVSecretBaseSecrets_Text_UsedBrick, + [SBSECRETS_STATE_USED_SOLID_BOARD] = TVSecretBaseSecrets_Text_UsedSolidBoard, + [SBSECRETS_STATE_USED_FENCE] = TVSecretBaseSecrets_Text_UsedFence, + [SBSECRETS_STATE_USED_GLITTER_MAT] = TVSecretBaseSecrets_Text_UsedGlitterMat, + [SBSECRETS_STATE_USED_TIRE] = TVSecretBaseSecrets_Text_UsedTire, + [SBSECRETS_STATE_USED_STAND] = TVSecretBaseSecrets_Text_UsedStand, [SBSECRETS_STATE_USED_BREAKABLE_DOOR] = TVSecretBaseSecrets_Text_BrokeDoor, - [SBSECRETS_STATE_USED_DOLL] = TVSecretBaseSecrets_Text_UsedDoll, - [SBSECRETS_STATE_USED_SLIDE] = TVSecretBaseSecrets_Text_UsedSlide, - [SBSECRETS_STATE_DECLINED_SLIDE] = TVSecretBaseSecrets_Text_UsedSlideButDidntGoDown, + [SBSECRETS_STATE_USED_DOLL] = TVSecretBaseSecrets_Text_UsedDoll, + [SBSECRETS_STATE_USED_SLIDE] = TVSecretBaseSecrets_Text_UsedSlide, + [SBSECRETS_STATE_DECLINED_SLIDE] = TVSecretBaseSecrets_Text_UsedSlideButDidntGoDown, [SBSECRETS_STATE_USED_JUMP_MAT] = TVSecretBaseSecrets_Text_UsedJumpMat }; @@ -722,8 +722,8 @@ static const u8 *const sTVInSearchOfTrainersTextGroup[] = { }; // Secret Base Secrets TV Show states for actions that can be taken in a secret base -// The flags that determine whether or not the action was taken are commented -const u8 sTVSecretBaseSecretsActions[NUM_SECRET_BASE_FLAGS] = +// The flags that determine whether or not the action was taken are commented +static const u8 sTVSecretBaseSecretsActions[NUM_SECRET_BASE_FLAGS] = { SBSECRETS_STATE_USED_CHAIR, // SECRET_BASE_USED_CHAIR SBSECRETS_STATE_USED_BALLOON, // SECRET_BASE_USED_BALLOON @@ -817,7 +817,7 @@ u8 FindAnyTVShowOnTheAir(void) if (slot == 0xFF) return 0xFF; - if (gSaveBlock1Ptr->outbreakPokemonSpecies != SPECIES_NONE + if (gSaveBlock1Ptr->outbreakPokemonSpecies != SPECIES_NONE && gSaveBlock1Ptr->tvShows[slot].common.kind == TVSHOW_MASS_OUTBREAK) return FindFirstActiveTVShowThatIsNotAMassOutbreak(); @@ -837,7 +837,7 @@ void UpdateTVScreensOnMap(int width, int height) break; // case PLAYERS_HOUSE_TV_NONE: default: - if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LILYCOVE_CITY_COVE_LILY_MOTEL_1F) + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LILYCOVE_CITY_COVE_LILY_MOTEL_1F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(LILYCOVE_CITY_COVE_LILY_MOTEL_1F)) { // NPC in Lilycove Hotel is always watching TV @@ -852,7 +852,7 @@ void UpdateTVScreensOnMap(int width, int height) } } -static void SetTVMetatilesOnMap(int width, int height, u16 tileId) +static void SetTVMetatilesOnMap(int width, int height, u16 metatileId) { int x; int y; @@ -862,7 +862,7 @@ static void SetTVMetatilesOnMap(int width, int height, u16 tileId) for (x = 0; x < width; x++) { if (MapGridGetMetatileBehaviorAt(x, y) == MB_TELEVISION) - MapGridSetMetatileIdAt(x, y, tileId | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, metatileId | MAPGRID_COLLISION_MASK); } } } @@ -891,8 +891,8 @@ static u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void) for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->tvShows) - 1; i++) { - if (gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_OFF_AIR - && gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_MASS_OUTBREAK + if (gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_OFF_AIR + && gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_MASS_OUTBREAK && gSaveBlock1Ptr->tvShows[i].common.active == TRUE) return i; } @@ -945,7 +945,7 @@ void GabbyAndTyBeforeInterview(void) gSaveBlock1Ptr->gabbyAndTyData.battleNum++; } gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn = gBattleResults.playerMonWasDamaged; - + if (gBattleResults.playerFaintCounter != 0) gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon = TRUE; else @@ -956,22 +956,14 @@ void GabbyAndTyBeforeInterview(void) else gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem = FALSE; - if (!gBattleResults.usedMasterBall) + for (i = 0; i < POKEBALL_COUNT; i++) { - for (i = 0; i < POKEBALL_COUNT - 1; i++) + if (gBattleResults.catchAttempts[i]) { - if (gBattleResults.catchAttempts[i]) - { - gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall = TRUE; - break; - } + gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall = TRUE; + break; } } - else - { - // Player threw a Master Ball at Gabby and Ty - gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall = TRUE; - } TakeGabbyAndTyOffTheAir(); if (gSaveBlock1Ptr->gabbyAndTyData.lastMove == MOVE_NONE) @@ -1129,33 +1121,25 @@ void TryPutPokemonTodayOnAir(void) sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows); if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_POKEMON_TODAY_CAUGHT, FALSE) != TRUE) { - for (i = 0; i < POKEBALL_COUNT - 1; i++) + for (i = 0; i < POKEBALL_COUNT; i++) ballsUsed += gBattleResults.catchAttempts[i]; - if (ballsUsed != 0 || gBattleResults.usedMasterBall) + if (ballsUsed != 0) { ballsUsed = 0; show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot]; show->pokemonToday.kind = TVSHOW_POKEMON_TODAY_CAUGHT; show->pokemonToday.active = FALSE; // NOTE: Show is not active until passed via Record Mix. - if (gBattleResults.usedMasterBall) - { - ballsUsed = 1; - itemLastUsed = ITEM_MASTER_BALL; - } - else - { - for (i = 0; i < POKEBALL_COUNT - 1; i++) - ballsUsed += gBattleResults.catchAttempts[i]; - if (ballsUsed > 255) - ballsUsed = 255; - itemLastUsed = gLastUsedItem; - } + for (i = 0; i < POKEBALL_COUNT; i++) + ballsUsed += gBattleResults.catchAttempts[i]; + if (ballsUsed > 255) + ballsUsed = 255; + itemLastUsed = gLastUsedItem; show->pokemonToday.nBallsUsed = ballsUsed; show->pokemonToday.ball = itemLastUsed; StringCopy(show->pokemonToday.playerName, gSaveBlock2Ptr->playerName); StringCopy(show->pokemonToday.nickname, gBattleResults.caughtMonNick); - language2 = sub_81DB604(show->pokemonToday.nickname); + language2 = GetNicknameLanguage(show->pokemonToday.nickname); StripExtCtrlCodes(show->pokemonToday.nickname); show->pokemonToday.species = gBattleResults.caughtMonSpecies; StorePlayerIdInRecordMixShow(show); @@ -1192,7 +1176,7 @@ static void TryPutPokemonTodayFailedOnTheAir(void) if (!rbernoulli(1, 1)) { - for (i = 0, ballsUsed = 0; i < POKEBALL_COUNT - 1; i++) + for (i = 0, ballsUsed = 0; i < POKEBALL_COUNT; i++) ballsUsed += gBattleResults.catchAttempts[i]; if (ballsUsed > 255) ballsUsed = 255; @@ -1449,7 +1433,7 @@ static void InterviewAfter_BravoTrainerPokemonProfile(void) } } -void BravoTrainerPokemonProfile_BeforeInterview1(u16 a0) +void BravoTrainerPokemonProfile_BeforeInterview1(u16 move) { TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX]; InterviewBefore_BravoTrainerPkmnProfile(); @@ -1457,7 +1441,7 @@ void BravoTrainerPokemonProfile_BeforeInterview1(u16 a0) if (sCurTVShowSlot != -1) { DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX); - show->bravoTrainer.move = a0; + show->bravoTrainer.move = move; show->bravoTrainer.kind = TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE; } } @@ -1490,9 +1474,9 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void) show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.towerLvlMode, 0); show->bravoTrainerTower.wonTheChallenge = gSaveBlock2Ptr->frontier.towerBattleOutcome; if (gSaveBlock2Ptr->frontier.towerLvlMode == FRONTIER_LVL_50) - show->bravoTrainerTower.btLevel = 50; + show->bravoTrainerTower.btLevel = FRONTIER_MAX_LEVEL_50; else - show->bravoTrainerTower.btLevel = 100; + show->bravoTrainerTower.btLevel = FRONTIER_MAX_LEVEL_OPEN; show->bravoTrainerTower.interviewResponse = gSpecialVar_0x8004; StorePlayerIdInNormalShow(show); show->bravoTrainerTower.language = gGameLanguage; @@ -1526,7 +1510,7 @@ void TryPutSmartShopperOnAir(void) show->smartshopperShow.itemIds[i] = gMartPurchaseHistory[i].itemId; show->smartshopperShow.itemAmounts[i] = gMartPurchaseHistory[i].quantity; } - show->smartshopperShow.priceReduced = GetPriceReduction(POKENEWS_SLATEPORT); + show->smartshopperShow.priceReduced = IsPokeNewsActive(POKENEWS_SLATEPORT); StringCopy(show->smartshopperShow.playerName, gSaveBlock2Ptr->playerName); StorePlayerIdInRecordMixShow(show); show->smartshopperShow.language = gGameLanguage; @@ -1569,13 +1553,13 @@ void StartMassOutbreak(void) gSaveBlock1Ptr->outbreakLocationMapNum = show->massOutbreak.locationMapNum; gSaveBlock1Ptr->outbreakLocationMapGroup = show->massOutbreak.locationMapGroup; gSaveBlock1Ptr->outbreakPokemonLevel = show->massOutbreak.level; - gSaveBlock1Ptr->outbreakUnk1 = show->massOutbreak.var02; - gSaveBlock1Ptr->outbreakUnk2 = show->massOutbreak.var0E; + gSaveBlock1Ptr->outbreakUnused1 = show->massOutbreak.unused1; + gSaveBlock1Ptr->outbreakUnused2 = show->massOutbreak.unused2; gSaveBlock1Ptr->outbreakPokemonMoves[0] = show->massOutbreak.moves[0]; gSaveBlock1Ptr->outbreakPokemonMoves[1] = show->massOutbreak.moves[1]; gSaveBlock1Ptr->outbreakPokemonMoves[2] = show->massOutbreak.moves[2]; gSaveBlock1Ptr->outbreakPokemonMoves[3] = show->massOutbreak.moves[3]; - gSaveBlock1Ptr->outbreakUnk4 = show->massOutbreak.var03; + gSaveBlock1Ptr->outbreakUnused3 = show->massOutbreak.unused3; gSaveBlock1Ptr->outbreakPokemonProbability = show->massOutbreak.probability; gSaveBlock1Ptr->outbreakDaysLeft = 2; } @@ -1668,19 +1652,19 @@ static void TryStartRandomMassOutbreak(void) show->massOutbreak.kind = TVSHOW_MASS_OUTBREAK; show->massOutbreak.active = TRUE; show->massOutbreak.level = sPokeOutbreakSpeciesList[outbreakIdx].level; - show->massOutbreak.var02 = 0; - show->massOutbreak.var03 = 0; + show->massOutbreak.unused1 = 0; + show->massOutbreak.unused3 = 0; show->massOutbreak.species = sPokeOutbreakSpeciesList[outbreakIdx].species; - show->massOutbreak.var0E = 0; + show->massOutbreak.unused2 = 0; show->massOutbreak.moves[0] = sPokeOutbreakSpeciesList[outbreakIdx].moves[0]; show->massOutbreak.moves[1] = sPokeOutbreakSpeciesList[outbreakIdx].moves[1]; show->massOutbreak.moves[2] = sPokeOutbreakSpeciesList[outbreakIdx].moves[2]; show->massOutbreak.moves[3] = sPokeOutbreakSpeciesList[outbreakIdx].moves[3]; show->massOutbreak.locationMapNum = sPokeOutbreakSpeciesList[outbreakIdx].location; show->massOutbreak.locationMapGroup = 0; - show->massOutbreak.var12 = 0; + show->massOutbreak.unused4 = 0; show->massOutbreak.probability = 50; - show->massOutbreak.var15 = 0; + show->massOutbreak.unused5 = 0; show->massOutbreak.daysLeft = 1; StorePlayerIdInNormalShow(show); show->massOutbreak.language = gGameLanguage; @@ -1695,13 +1679,13 @@ void EndMassOutbreak(void) gSaveBlock1Ptr->outbreakLocationMapNum = 0; gSaveBlock1Ptr->outbreakLocationMapGroup = 0; gSaveBlock1Ptr->outbreakPokemonLevel = 0; - gSaveBlock1Ptr->outbreakUnk1 = 0; - gSaveBlock1Ptr->outbreakUnk2 = 0; + gSaveBlock1Ptr->outbreakUnused1 = 0; + gSaveBlock1Ptr->outbreakUnused2 = 0; gSaveBlock1Ptr->outbreakPokemonMoves[0] = MOVE_NONE; gSaveBlock1Ptr->outbreakPokemonMoves[1] = MOVE_NONE; gSaveBlock1Ptr->outbreakPokemonMoves[2] = MOVE_NONE; gSaveBlock1Ptr->outbreakPokemonMoves[3] = MOVE_NONE; - gSaveBlock1Ptr->outbreakUnk4 = 0; + gSaveBlock1Ptr->outbreakUnused3 = 0; gSaveBlock1Ptr->outbreakPokemonProbability = 0; gSaveBlock1Ptr->outbreakDaysLeft = 0; } @@ -1710,7 +1694,7 @@ void UpdateTVShowsPerDay(u16 days) { UpdateMassOutbreakTimeLeft(days); TryEndMassOutbreak(days); - UpdatePokeNewsTimeLeft(days); + UpdatePokeNewsCountdown(days); ResolveWorldOfMastersShow(days); ResolveNumberOneShow(days); } @@ -1798,9 +1782,7 @@ void SetPokemonAnglerSpecies(u16 species) // Either way the temporary version of the show in the last slot is deleted. static void ResolveWorldOfMastersShow(u16 days) { - TVShow *show; - - show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX]; + TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX]; if (show->worldOfMasters.kind == TVSHOW_WORLD_OF_MASTERS) { if (show->worldOfMasters.numPokeCaught >= 20) @@ -1864,7 +1846,7 @@ void TryPutTodaysRivalTrainerOnAir(void) show->rivalTrainer.mapLayoutId = gMapHeader.mapLayoutId; show->rivalTrainer.nSilverSymbols = 0; show->rivalTrainer.nGoldSymbols = 0; - for (i = 0; i < 7; i++) + for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) { if (FlagGet(sSilverSymbolFlags[i]) == TRUE) show->rivalTrainer.nSilverSymbols++; @@ -1990,33 +1972,39 @@ static void SecretBaseVisit_CalculateDecorationData(TVShow *show) u8 decoration; for (i = 0; i < DECOR_MAX_SECRET_BASE; i++) - sTV_DecorationsBuffer[i] = 0; + sTV_DecorationsBuffer[i] = DECOR_NONE; + // Count (and save) the unique decorations in the base for (i = 0, n = 0; i < DECOR_MAX_SECRET_BASE; i++) { decoration = gSaveBlock1Ptr->secretBases[0].decorations[i]; - if (decoration) + if (decoration != DECOR_NONE) { + // Search for an empty spot to save decoration for (j = 0; j < DECOR_MAX_SECRET_BASE; j++) { - if (sTV_DecorationsBuffer[j] == 0) + if (sTV_DecorationsBuffer[j] == DECOR_NONE) { + // Save and count new unique decoration sTV_DecorationsBuffer[j] = decoration; n++; break; } + + // Decoration has already been saved, skip and move on to the next base decoration if (sTV_DecorationsBuffer[j] == decoration) break; } } } - if (n > 4) - show->secretBaseVisit.nDecorations = 4; + // Cap the number of unique decorations to the number the TV show will talk about + if (n > ARRAY_COUNT(show->secretBaseVisit.decorations)) + show->secretBaseVisit.numDecorations = ARRAY_COUNT(show->secretBaseVisit.decorations); else - show->secretBaseVisit.nDecorations = n; + show->secretBaseVisit.numDecorations = n; - switch (show->secretBaseVisit.nDecorations) + switch (show->secretBaseVisit.numDecorations) { case 0: break; @@ -2024,16 +2012,16 @@ static void SecretBaseVisit_CalculateDecorationData(TVShow *show) show->secretBaseVisit.decorations[0] = sTV_DecorationsBuffer[0]; break; default: + // More than 1 decoration, randomize the full list for (k = 0; k < n * n; k++) { decoration = Random() % n; j = Random() % n; - i = sTV_DecorationsBuffer[decoration]; - sTV_DecorationsBuffer[decoration] = sTV_DecorationsBuffer[j]; - sTV_DecorationsBuffer[j] = i; + SWAP(sTV_DecorationsBuffer[decoration], sTV_DecorationsBuffer[j], i); } - for (i = 0; i < show->secretBaseVisit.nDecorations; i++) + // Pick the first decorations in the randomized list to talk about on the show + for (i = 0; i < show->secretBaseVisit.numDecorations; i++) show->secretBaseVisit.decorations[i] = sTV_DecorationsBuffer[i]; break; } @@ -2044,50 +2032,55 @@ static void SecretBaseVisit_CalculatePartyData(TVShow *show) u8 i; u16 move; u16 j; - u8 nMoves; - u8 nPokemon; + u8 numMoves; + u8 numPokemon; u16 sum; - for (i = 0, nPokemon = 0; i < PARTY_SIZE; i++) + for (i = 0, numPokemon = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { - sTV_SecretBaseVisitMonsTemp[nPokemon].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - sTV_SecretBaseVisitMonsTemp[nPokemon].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES); - nMoves = 0; + sTV_SecretBaseVisitMonsTemp[numPokemon].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + sTV_SecretBaseVisitMonsTemp[numPokemon].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES); + + // Check all the Pokémon's moves, then randomly select one to save + numMoves = 0; move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE1); if (move != MOVE_NONE) { - sTV_SecretBaseVisitMovesTemp[nMoves] = move; - nMoves++; + sTV_SecretBaseVisitMovesTemp[numMoves] = move; + numMoves++; } move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE2); if (move != MOVE_NONE) { - sTV_SecretBaseVisitMovesTemp[nMoves] = move; - nMoves++; + sTV_SecretBaseVisitMovesTemp[numMoves] = move; + numMoves++; } move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE3); if (move != MOVE_NONE) { - sTV_SecretBaseVisitMovesTemp[nMoves] = move; - nMoves++; + sTV_SecretBaseVisitMovesTemp[numMoves] = move; + numMoves++; } move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE4); if (move != MOVE_NONE) { - sTV_SecretBaseVisitMovesTemp[nMoves] = move; - nMoves++; + sTV_SecretBaseVisitMovesTemp[numMoves] = move; + numMoves++; } - sTV_SecretBaseVisitMonsTemp[nPokemon].move = sTV_SecretBaseVisitMovesTemp[Random() % nMoves]; - nPokemon++; + sTV_SecretBaseVisitMonsTemp[numPokemon].move = sTV_SecretBaseVisitMovesTemp[Random() % numMoves]; + numPokemon++; } } - for (i = 0, sum = 0; i < nPokemon; i++) + + for (i = 0, sum = 0; i < numPokemon; i++) sum += sTV_SecretBaseVisitMonsTemp[i].level; - show->secretBaseVisit.avgLevel = sum / nPokemon; - j = Random() % nPokemon; + // Using the data calculated above, save the data to talk about on the show + // (average level, and one randomly selected species / move) + show->secretBaseVisit.avgLevel = sum / numPokemon; + j = Random() % numPokemon; show->secretBaseVisit.species = sTV_SecretBaseVisitMonsTemp[j].species; show->secretBaseVisit.move = sTV_SecretBaseVisitMonsTemp[j].move; } @@ -2124,11 +2117,8 @@ void TryPutBreakingNewsOnAir(void) show->breakingNews.kind = TVSHOW_BREAKING_NEWS; show->breakingNews.active = FALSE; // NOTE: Show is not active until passed via Record Mix. balls = 0; - for (i = 0; i < POKEBALL_COUNT - 1; i++) + for (i = 0; i < POKEBALL_COUNT; i++) balls += gBattleResults.catchAttempts[i]; - - if (gBattleResults.usedMasterBall) - balls++; show->breakingNews.location = gMapHeader.regionMapSectionId; StringCopy(show->breakingNews.playerName, gSaveBlock2Ptr->playerName); show->breakingNews.poke1Species = gBattleResults.playerMon1Species; @@ -2158,10 +2148,7 @@ void TryPutBreakingNewsOnAir(void) switch (show->breakingNews.outcome) { case 0: - if (gBattleResults.usedMasterBall) - show->breakingNews.caughtMonBall = ITEM_MASTER_BALL; - else - show->breakingNews.caughtMonBall = gBattleResults.caughtMonBall; + show->breakingNews.caughtMonBall = gBattleResults.caughtMonBall; show->breakingNews.balls = balls; break; case 1: @@ -2225,7 +2212,7 @@ void TryPutBattleSeminarOnAir(u16 foeSpecies, u16 species, u8 moveIdx, const u16 } } -void TryPutSafariFanClubOnAir(u8 nMonsCaught, u8 nPkblkUsed) +void TryPutSafariFanClubOnAir(u8 monsCaught, u8 pokeblocksUsed) { TVShow *show; @@ -2236,8 +2223,8 @@ void TryPutSafariFanClubOnAir(u8 nMonsCaught, u8 nPkblkUsed) show->safariFanClub.kind = TVSHOW_SAFARI_FAN_CLUB; show->safariFanClub.active = FALSE; // NOTE: Show is not active until passed via Record Mix. StringCopy(show->safariFanClub.playerName, gSaveBlock2Ptr->playerName); - show->safariFanClub.nMonsCaught = nMonsCaught; - show->safariFanClub.nPkblkUsed = nPkblkUsed; + show->safariFanClub.monsCaught = monsCaught; + show->safariFanClub.pokeblocksUsed = pokeblocksUsed; StorePlayerIdInRecordMixShow(show); show->safariFanClub.language = gGameLanguage; } @@ -2344,7 +2331,7 @@ bool8 ShouldHideFanClubInterviewer(void) if (gSaveBlock1Ptr->linkBattleRecords.entries[0].name[0] == EOS) return TRUE; - + return FALSE; } @@ -2537,12 +2524,12 @@ static void TryPutRandomPokeNewsOnAir(void) sCurTVShowSlot = GetFirstEmptyPokeNewsSlot(gSaveBlock1Ptr->pokeNews); if (sCurTVShowSlot != -1 && rbernoulli(1, 100) != TRUE) { - u8 newsKind = (Random() % NUM_POKENEWS_TYPES) + POKENEWS_SLATEPORT; + u8 newsKind = (Random() % NUM_POKENEWS_TYPES) + 1; // +1 to skip over POKENEWS_NONE if (IsAddingPokeNewsDisallowed(newsKind) != TRUE) { gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].kind = newsKind; - gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].days = 4; - gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].state = 1; + gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].dayCountdown = POKENEWS_COUNTDOWN; + gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].state = POKENEWS_STATE_UPCOMING; } } } @@ -2571,8 +2558,8 @@ static void ClearPokeNews(void) static void ClearPokeNewsBySlot(u8 i) { gSaveBlock1Ptr->pokeNews[i].kind = POKENEWS_NONE; - gSaveBlock1Ptr->pokeNews[i].state = FALSE; - gSaveBlock1Ptr->pokeNews[i].days = 0; + gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_INACTIVE; + gSaveBlock1Ptr->pokeNews[i].dayCountdown = 0; } static void CompactPokeNews(void) @@ -2603,9 +2590,9 @@ static u8 FindAnyPokeNewsOnTheAir(void) for (i = 0; i < POKE_NEWS_COUNT; i++) { - if (gSaveBlock1Ptr->pokeNews[i].kind != POKENEWS_NONE - && gSaveBlock1Ptr->pokeNews[i].state == 1 - && gSaveBlock1Ptr->pokeNews[i].days < 3) + if (gSaveBlock1Ptr->pokeNews[i].kind != POKENEWS_NONE + && gSaveBlock1Ptr->pokeNews[i].state == POKENEWS_STATE_UPCOMING + && gSaveBlock1Ptr->pokeNews[i].dayCountdown < POKENEWS_COUNTDOWN - 1) return i; } return 0xFF; @@ -2613,19 +2600,17 @@ static u8 FindAnyPokeNewsOnTheAir(void) void DoPokeNews(void) { - u8 i; - u16 n; - - i = FindAnyPokeNewsOnTheAir(); + u8 i = FindAnyPokeNewsOnTheAir(); if (i == 0xFF) { gSpecialVar_Result = FALSE; } else { - if (gSaveBlock1Ptr->pokeNews[i].days == 0) + if (gSaveBlock1Ptr->pokeNews[i].dayCountdown == 0) { - gSaveBlock1Ptr->pokeNews[i].state = 2; + // News event is occurring, make comment depending on how much time is left + gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_ACTIVE; if (gLocalTime.hours < 20) ShowFieldMessage(sPokeNewsTextGroup_Ongoing[gSaveBlock1Ptr->pokeNews[i].kind]); else @@ -2633,16 +2618,20 @@ void DoPokeNews(void) } else { - n = gSaveBlock1Ptr->pokeNews[i].days; - ConvertIntToDecimalStringN(gStringVar1, n, STR_CONV_MODE_LEFT_ALIGN, 1); - gSaveBlock1Ptr->pokeNews[i].state = 0; + // News event is upcoming, make comment about countdown to event + u16 dayCountdown = gSaveBlock1Ptr->pokeNews[i].dayCountdown; + ConvertIntToDecimalStringN(gStringVar1, dayCountdown, STR_CONV_MODE_LEFT_ALIGN, 1); + + // Mark as inactive so the countdown TV airing doesn't repeat + // Will be flagged as "upcoming" again by UpdatePokeNewsCountdown + gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_INACTIVE; ShowFieldMessage(sPokeNewsTextGroup_Upcoming[gSaveBlock1Ptr->pokeNews[i].kind]); } gSpecialVar_Result = TRUE; } } -bool8 GetPriceReduction(u8 newsKind) +bool8 IsPokeNewsActive(u8 newsKind) { u8 i; @@ -2653,7 +2642,7 @@ bool8 GetPriceReduction(u8 newsKind) { if (gSaveBlock1Ptr->pokeNews[i].kind == newsKind) { - if (gSaveBlock1Ptr->pokeNews[i].state == 2 && IsPriceDiscounted(newsKind)) + if (gSaveBlock1Ptr->pokeNews[i].state == POKENEWS_STATE_ACTIVE && ShouldApplyPokeNewsEffect(newsKind)) return TRUE; return FALSE; @@ -2662,16 +2651,23 @@ bool8 GetPriceReduction(u8 newsKind) return FALSE; } -static bool8 IsPriceDiscounted(u8 newsKind) +// Returns TRUE if the effects of the given PokeNews should be applied. +// For POKENEWS_SLATEPORT / POKENEWS_LILYCOVE, only apply the effect if +// the player is talking to the Energy Guru / at the Dept Store Rooftop. +// For any other type of PokeNews this is always TRUE. +static bool8 ShouldApplyPokeNewsEffect(u8 newsKind) { switch (newsKind) { case POKENEWS_SLATEPORT: - if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SLATEPORT_CITY) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SLATEPORT_CITY) && gSpecialVar_LastTalked == 25) + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SLATEPORT_CITY) + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SLATEPORT_CITY) + && gSpecialVar_LastTalked == LOCALID_SLATEPORT_ENERGY_GURU) return TRUE; return FALSE; case POKENEWS_LILYCOVE: - if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP)) + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP)) return TRUE; return FALSE; } @@ -2693,7 +2689,7 @@ static bool8 IsAddingPokeNewsDisallowed(u8 newsKind) return FALSE; } -static void UpdatePokeNewsTimeLeft(u16 days) +static void UpdatePokeNewsCountdown(u16 days) { u8 i; @@ -2701,16 +2697,18 @@ static void UpdatePokeNewsTimeLeft(u16 days) { if (gSaveBlock1Ptr->pokeNews[i].kind != POKENEWS_NONE) { - if (gSaveBlock1Ptr->pokeNews[i].days < days) + if (gSaveBlock1Ptr->pokeNews[i].dayCountdown < days) { + // News event has elapsed, clear it from list ClearPokeNewsBySlot(i); } else { - if (gSaveBlock1Ptr->pokeNews[i].state == 0 && FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE) - gSaveBlock1Ptr->pokeNews[i].state = 1; + // Progress countdown to news event + if (gSaveBlock1Ptr->pokeNews[i].state == POKENEWS_STATE_INACTIVE && FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE) + gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_UPCOMING; - gSaveBlock1Ptr->pokeNews[i].days -= days; + gSaveBlock1Ptr->pokeNews[i].dayCountdown -= days; } } } @@ -2760,9 +2758,7 @@ void CopyContestCategoryToStringVar(u8 varIdx, u8 category) void SetContestCategoryStringVarForInterview(void) { - TVShow *show; - - show = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004]; + TVShow *show = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004]; CopyContestCategoryToStringVar(1, show->bravoTrainer.contestCategory); } @@ -2789,9 +2785,7 @@ size_t CountDigits(int value) static void SmartShopper_BufferPurchaseTotal(u8 varIdx, TVShow *show) { u8 i; - int price; - - price = 0; + int price = 0; for (i = 0; i < SMARTSHOPPER_NUM_ITEMS; i++) { if (show->smartshopperShow.itemIds[i] != ITEM_NONE) @@ -2814,8 +2808,8 @@ static bool8 IsRecordMixShowAlreadySpawned(u8 kind, bool8 delete) playerId = GetPlayerIDAsU32(); for (i = NUM_NORMAL_TVSHOW_SLOTS; i < LAST_TVSHOW_IDX; i++) { - if (shows[i].common.kind == kind - && (playerId & 0xFF) == shows[i].common.trainerIdLo + if (shows[i].common.kind == kind + && (playerId & 0xFF) == shows[i].common.trainerIdLo && ((playerId >> 8) & 0xFF) == shows[i].common.trainerIdHi) { if (delete == TRUE) @@ -2832,21 +2826,19 @@ static bool8 IsRecordMixShowAlreadySpawned(u8 kind, bool8 delete) static void SortPurchasesByQuantity(void) { u8 i, j; - u16 tmpId; - u16 tmpQn; - + for (i = 0; i < SMARTSHOPPER_NUM_ITEMS - 1; i++) { for (j = i + 1; j < SMARTSHOPPER_NUM_ITEMS; j++) { if (gMartPurchaseHistory[i].quantity < gMartPurchaseHistory[j].quantity) { - tmpId = gMartPurchaseHistory[i].itemId; - tmpQn = gMartPurchaseHistory[i].quantity; + u16 tempItemId = gMartPurchaseHistory[i].itemId; + u16 tempQuantity = gMartPurchaseHistory[i].quantity; gMartPurchaseHistory[i].itemId = gMartPurchaseHistory[j].itemId; gMartPurchaseHistory[i].quantity = gMartPurchaseHistory[j].quantity; - gMartPurchaseHistory[j].itemId = tmpId; - gMartPurchaseHistory[j].quantity = tmpQn; + gMartPurchaseHistory[j].itemId = tempItemId; + gMartPurchaseHistory[j].quantity = tempQuantity; } } } @@ -2923,7 +2915,8 @@ static void InterviewBefore_FanClubLetter(void) if (!gSpecialVar_Result) { StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL)]); - InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubLetter.words, 6); + InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubLetter.words, + ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubLetter.words)); } } @@ -2932,7 +2925,8 @@ static void InterviewBefore_RecentHappenings(void) TryReplaceOldTVShowOfKind(TVSHOW_RECENT_HAPPENINGS); if (!gSpecialVar_Result) { - InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].recentHappenings.words, 6); + InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].recentHappenings.words, + ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].recentHappenings.words)); } } @@ -2943,8 +2937,9 @@ static void InterviewBefore_PkmnFanClubOpinions(void) { StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL)]); GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, gStringVar2); - StringGetEnd10(gStringVar2); - InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubOpinions.words, 2); + StringGet_Nickname(gStringVar2); + InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubOpinions.words, + ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubOpinions.words)); } } @@ -2962,7 +2957,8 @@ static void InterviewBefore_BravoTrainerPkmnProfile(void) { TryReplaceOldTVShowOfKind(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE); if (!gSpecialVar_Result) - InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainer.words, 2); + InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainer.words, + ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainer.words)); } static void InterviewBefore_ContestLiveUpdates(void) @@ -2979,14 +2975,16 @@ static void InterviewBefore_BravoTrainerBTProfile(void) { TryReplaceOldTVShowOfKind(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE); if (!gSpecialVar_Result) - InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainerTower.words, 1); + InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainerTower.words, + ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainerTower.words)); } static void InterviewBefore_FanClubSpecial(void) { TryReplaceOldTVShowOfKind(TVSHOW_FAN_CLUB_SPECIAL); if (!gSpecialVar_Result) - InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanClubSpecial.words, 1); + InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanClubSpecial.words, + ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanClubSpecial.words)); } static bool8 IsPartyMonNicknamedOrNotEnglish(u8 monIdx) @@ -3058,23 +3056,19 @@ static void CompactTVShowArray(TVShow *shows) } } -static u16 GetRandomDifferentSpeciesAndNameSeenByPlayer(u8 varIdx, u16 passedSpecies) +static u16 GetRandomDifferentSpeciesAndNameSeenByPlayer(u8 varIdx, u16 excludedSpecies) { - u16 species; - - species = GetRandomDifferentSpeciesSeenByPlayer(passedSpecies); + u16 species = GetRandomDifferentSpeciesSeenByPlayer(excludedSpecies); StringCopy(gTVStringVarPtrs[varIdx], gSpeciesNames[species]); return species; } -static u16 GetRandomDifferentSpeciesSeenByPlayer(u16 passedSpecies) +static u16 GetRandomDifferentSpeciesSeenByPlayer(u16 excludedSpecies) { - u16 species; - u16 initSpecies; + u16 species = Random() % (NUM_SPECIES - 1) + 1; + u16 initSpecies = species; - species = (Random() % (NUM_SPECIES - 1)) + 1; - initSpecies = species; - while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN) != TRUE || species == passedSpecies) + while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN) != TRUE || species == excludedSpecies) { if (species == SPECIES_NONE + 1) species = NUM_SPECIES - 1; @@ -3083,7 +3077,8 @@ static u16 GetRandomDifferentSpeciesSeenByPlayer(u16 passedSpecies) if (species == initSpecies) { - species = passedSpecies; + // Looped back to initial species (only Pokémon seen), must choose excluded species + species = excludedSpecies; return species; } }; @@ -3139,7 +3134,7 @@ static void GetRandomWordFromShow(TVShow *show) u8 i; i = Random() % ARRAY_COUNT(show->fanclubLetter.words); - + // From random point, get first non-empty word while (TRUE) { @@ -3308,7 +3303,7 @@ static void ChangeBoxPokemonNickname_CB(void) void BufferMonNickname(void) { GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1); - StringGetEnd10(gStringVar1); + StringGet_Nickname(gStringVar1); } void IsMonOTIDNotPlayers(void) @@ -3448,7 +3443,7 @@ void ReceiveTvShowsData(void *src, u32 size, u8 playersLinkId) else if (version == VERSION_EMERALD && gLinkPlayers[i].language == LANGUAGE_JAPANESE) TranslateJapaneseEmeraldShows((*rmBuffer)[i]); } - + // Position player's TV shows in argument list depending on link id switch (playersLinkId) { @@ -3537,7 +3532,7 @@ static bool8 TryMixTVShow(TVShow *dest[TV_SHOWS_COUNT], TVShow *src[TV_SHOWS_COU success = TryMixOutbreakTVShow(&tv1[sCurTVShowSlot], &tv2[sTVShowMixingCurSlot], idx); break; } - + // Show was mixed, delete from array if (success == TRUE) { @@ -3551,7 +3546,7 @@ static bool8 TryMixNormalTVShow(TVShow *dest, TVShow *src, u8 idx) { u32 linkTrainerId = GetLinkPlayerTrainerId(idx); - if ((linkTrainerId & 0xFF) == src->common.trainerIdLo + if ((linkTrainerId & 0xFF) == src->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == src->common.trainerIdHi) return FALSE; @@ -3568,11 +3563,11 @@ static bool8 TryMixRecordMixTVShow(TVShow *dest, TVShow *src, u8 idx) { u32 linkTrainerId = GetLinkPlayerTrainerId(idx); - if ((linkTrainerId & 0xFF) == src->common.srcTrainerIdLo + if ((linkTrainerId & 0xFF) == src->common.srcTrainerIdLo && ((linkTrainerId >> 8) & 0xFF) == src->common.srcTrainerIdHi) return FALSE; - if ((linkTrainerId & 0xFF) == src->common.trainerIdLo + if ((linkTrainerId & 0xFF) == src->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == src->common.trainerIdHi) return FALSE; @@ -3589,7 +3584,7 @@ static bool8 TryMixOutbreakTVShow(TVShow *dest, TVShow *src, u8 idx) { u32 linkTrainerId = GetLinkPlayerTrainerId(idx); - if ((linkTrainerId & 0xFF) == src->common.trainerIdLo + if ((linkTrainerId & 0xFF) == src->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == src->common.trainerIdHi) return FALSE; @@ -3798,7 +3793,7 @@ void DeactivateAllNormalTVShows(void) } } -// Ensures a minimum of 5 empty mixed show slots +// Ensures a minimum of 5 empty record mixed show slots static void DeleteExcessMixedShows(void) { s8 i; @@ -3825,7 +3820,7 @@ void ReceivePokeNewsData(void *src, u32 size, u8 playersLinkId) memcpy((*rmBuffer2)[i], src + i * size, sizeof((*rmBuffer2)[i])); rmBuffer = rmBuffer2; - + // Position player's PokeNews in argument list depending on link id switch (playersLinkId) { @@ -3897,8 +3892,8 @@ static bool8 TryMixPokeNewsShow(PokeNews *dest, PokeNews *src, s8 slot) return FALSE; } dest[slot].kind = src->kind; - dest[slot].state = 1; - dest[slot].days = src->days; + dest[slot].state = POKENEWS_STATE_UPCOMING; + dest[slot].dayCountdown = src->dayCountdown; return TRUE; } @@ -3929,7 +3924,7 @@ static void ClearPokeNewsIfGameNotComplete(void) if (FlagGet(FLAG_SYS_GAME_CLEAR) != TRUE) { for (i = 0; i < POKE_NEWS_COUNT; i++) - gSaveBlock1Ptr->pokeNews[i].state = 0; + gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_INACTIVE; } } @@ -4018,7 +4013,7 @@ void SanitizeTVShowsForRuby(TVShow *shows) { if (curShow->bravoTrainerTower.kind == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE) { - if ((curShow->bravoTrainerTower.language == LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage != LANGUAGE_JAPANESE) + if ((curShow->bravoTrainerTower.language == LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage != LANGUAGE_JAPANESE) || (curShow->bravoTrainerTower.language != LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage == LANGUAGE_JAPANESE)) memset(curShow, 0, sizeof(TVShow)); } @@ -4354,6 +4349,9 @@ static void DoTVShowBravoTrainerPokemonProfile(void) ShowFieldMessage(sTVBravoTrainerTextGroup[state]); } +// This is the TV show triggered by accepting the reporter's interview in the lobby of Battle Tower. +// The reporter had asked the player if they were satisfied or not with the challenge, and then asked +// for a one word Easy Chat description of their feelings about the challenge. static void DoTVShowBravoTrainerBattleTower(void) { TVShow *show; @@ -4364,85 +4362,83 @@ static void DoTVShowBravoTrainerBattleTower(void) state = sTVShowState; switch(state) { - case 0: + case BRAVOTOWER_STATE_INTRO: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]); - if (show->bravoTrainerTower.numFights >= 7) - sTVShowState = 1; + if (show->bravoTrainerTower.numFights >= FRONTIER_STAGES_PER_CHALLENGE) + sTVShowState = BRAVOTOWER_STATE_NEW_RECORD; else - sTVShowState = 2; + sTVShowState = BRAVOTOWER_STATE_LOST; break; - case 1: - if (show->bravoTrainerTower.btLevel == 50) - { + case BRAVOTOWER_STATE_NEW_RECORD: + // The TV show states a "new record" was achieved as long as all the battles in the challenge were attempted, + // regardless of any previous records or whether the final battle was won or lost. + if (show->bravoTrainerTower.btLevel == FRONTIER_MAX_LEVEL_50) StringCopy(gStringVar1, gText_Lv50); - } else - { StringCopy(gStringVar1, gText_OpenLevel); - } ConvertIntToDecimalString(1, show->bravoTrainerTower.numFights); if (show->bravoTrainerTower.wonTheChallenge == TRUE) - sTVShowState = 3; + sTVShowState = BRAVOTOWER_STATE_WON; else - sTVShowState = 4; + sTVShowState = BRAVOTOWER_STATE_LOST_FINAL; break; - case 2: + case BRAVOTOWER_STATE_LOST: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); ConvertIntToDecimalString(1, show->bravoTrainerTower.numFights + 1); if (show->bravoTrainerTower.interviewResponse == 0) - sTVShowState = 5; + sTVShowState = BRAVOTOWER_STATE_SATISFIED; else - sTVShowState = 6; + sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; break; - case 3: + case BRAVOTOWER_STATE_WON: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]); if (show->bravoTrainerTower.interviewResponse == 0) - sTVShowState = 5; + sTVShowState = BRAVOTOWER_STATE_SATISFIED; else - sTVShowState = 6; + sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; break; - case 4: + case BRAVOTOWER_STATE_LOST_FINAL: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]); if (show->bravoTrainerTower.interviewResponse == 0) - sTVShowState = 5; + sTVShowState = BRAVOTOWER_STATE_SATISFIED; else - sTVShowState = 6; + sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; break; - case 5: + case BRAVOTOWER_STATE_SATISFIED: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); - sTVShowState = 11; + sTVShowState = BRAVOTOWER_STATE_RESPONSE; break; - case 6: + case BRAVOTOWER_STATE_UNSATISFIED: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); - sTVShowState = 11; + sTVShowState = BRAVOTOWER_STATE_RESPONSE; break; - case 7: - sTVShowState = 11; + case BRAVOTOWER_STATE_UNUSED_1: + sTVShowState = BRAVOTOWER_STATE_RESPONSE; break; - case 8: - case 9: - case 10: + case BRAVOTOWER_STATE_UNUSED_2: + case BRAVOTOWER_STATE_UNUSED_3: + case BRAVOTOWER_STATE_UNUSED_4: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); - sTVShowState = 11; + sTVShowState = BRAVOTOWER_STATE_RESPONSE; break; - case 11: + case BRAVOTOWER_STATE_RESPONSE: CopyEasyChatWord(gStringVar1, show->bravoTrainerTower.words[0]); if (show->bravoTrainerTower.interviewResponse == 0) - sTVShowState = 12; + sTVShowState = BRAVOTOWER_STATE_RESPONSE_SATISFIED; else - sTVShowState = 13; + sTVShowState = BRAVOTOWER_STATE_RESPONSE_UNSATISFIED; break; - case 12: - case 13: + case BRAVOTOWER_STATE_RESPONSE_SATISFIED: + case BRAVOTOWER_STATE_RESPONSE_UNSATISFIED: CopyEasyChatWord(gStringVar1, show->bravoTrainerTower.words[0]); TVShowConvertInternationalString(gStringVar2, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); TVShowConvertInternationalString(gStringVar3, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); - sTVShowState = 14; + sTVShowState = BRAVOTOWER_STATE_OUTRO; break; - case 14: + case BRAVOTOWER_STATE_OUTRO: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]); TVShowDone(); @@ -4887,7 +4883,7 @@ static void DoTVShowPokemonNewsMassOutbreak(void) ShowFieldMessage(sTVMassOutbreakTextGroup[sTVShowState]); } -// TV Show that plays after a Link Contest. +// TV Show that plays after a Link Contest. // First talks about the winner and something they did, then about a losing player and something they did // The show is only generated when the player wins, but can be record mixed to other games // Each state buffers any needed data for a message to print from sTVContestLiveUpdatesTextGroup @@ -5907,21 +5903,21 @@ static void DoTVShowSecretBaseVisit(void) { case 0: TVShowConvertInternationalString(gStringVar1, show->secretBaseVisit.playerName, show->secretBaseVisit.language); - if (show->secretBaseVisit.nDecorations == 0) + if (show->secretBaseVisit.numDecorations == 0) sTVShowState = 2; else sTVShowState = 1; break; case 1: StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[0]].name); - if (show->secretBaseVisit.nDecorations == 1) + if (show->secretBaseVisit.numDecorations == 1) sTVShowState = 4; else sTVShowState = 3; break; case 3: StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[1]].name); - switch (show->secretBaseVisit.nDecorations) + switch (show->secretBaseVisit.numDecorations) { case 2: sTVShowState = 7; @@ -5985,21 +5981,13 @@ static void DoTVShowPokemonLotteryWinnerFlashReport(void) state = sTVShowState; TVShowConvertInternationalString(gStringVar1, show->lottoWinner.playerName, show->lottoWinner.language); if (show->lottoWinner.whichPrize == 0) - { StringCopy(gStringVar2, gText_Jackpot); - } else if (show->lottoWinner.whichPrize == 1) - { StringCopy(gStringVar2, gText_First); - } else if (show->lottoWinner.whichPrize == 2) - { StringCopy(gStringVar2, gText_Second); - } else - { StringCopy(gStringVar2, gText_Third); - } StringCopy(gStringVar3, ItemId_GetName(show->lottoWinner.item)); TVShowDone(); ShowFieldMessage(sTVPokemonLotteryWinnerFlashReportTextGroup[state]); @@ -6712,23 +6700,23 @@ static void DoTVShowSafariFanClub(void) switch (state) { case 0: - if (show->safariFanClub.nMonsCaught == 0) + if (show->safariFanClub.monsCaught == 0) sTVShowState = 6; - else if (show->safariFanClub.nMonsCaught < 4) + else if (show->safariFanClub.monsCaught < 4) sTVShowState = 5; else sTVShowState = 1; break; case 1: TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language); - ConvertIntToDecimalString(1, show->safariFanClub.nMonsCaught); - if (show->safariFanClub.nPkblkUsed == 0) + ConvertIntToDecimalString(1, show->safariFanClub.monsCaught); + if (show->safariFanClub.pokeblocksUsed == 0) sTVShowState = 3; else sTVShowState = 2; break; case 2: - ConvertIntToDecimalString(1, show->safariFanClub.nPkblkUsed); + ConvertIntToDecimalString(1, show->safariFanClub.pokeblocksUsed); sTVShowState = 4; break; case 3: @@ -6740,21 +6728,21 @@ static void DoTVShowSafariFanClub(void) break; case 5: TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language); - ConvertIntToDecimalString(1, show->safariFanClub.nMonsCaught); - if (show->safariFanClub.nPkblkUsed == 0) + ConvertIntToDecimalString(1, show->safariFanClub.monsCaught); + if (show->safariFanClub.pokeblocksUsed == 0) sTVShowState = 8; else sTVShowState = 7; break; case 6: TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language); - if (show->safariFanClub.nPkblkUsed == 0) + if (show->safariFanClub.pokeblocksUsed == 0) sTVShowState = 8; else sTVShowState = 7; break; case 7: - ConvertIntToDecimalString(1, show->safariFanClub.nPkblkUsed); + ConvertIntToDecimalString(1, show->safariFanClub.pokeblocksUsed); sTVShowState = 9; break; case 8: diff --git a/src/union_room.c b/src/union_room.c index 8d02a260d9..53fb951707 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -11,6 +11,7 @@ #include "easy_chat.h" #include "event_data.h" #include "event_object_lock.h" +#include "fieldmap.h" #include "field_control_avatar.h" #include "field_player_avatar.h" #include "field_screen_effect.h" @@ -23,8 +24,8 @@ #include "load_save.h" #include "menu.h" #include "menu_helpers.h" -#include "mevent.h" #include "mystery_gift.h" +#include "mystery_gift_menu.h" #include "overworld.h" #include "palette.h" #include "party_menu.h" @@ -48,7 +49,6 @@ #include "constants/battle_frontier.h" #include "constants/cable_club.h" #include "constants/game_stat.h" -#include "constants/maps.h" #include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -61,13 +61,13 @@ enum { UR_STATE_CHECK_SELECTING_MON, UR_STATE_MAIN, UR_STATE_DO_SOMETHING_PROMPT, - UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, + UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, UR_STATE_DO_SOMETHING_PROMPT_2, UR_STATE_PRINT_MSG, UR_STATE_HANDLE_ACTIVITY_REQUEST, - UR_STATE_DECLINE_ACTIVITY_REQUEST, + UR_STATE_DECLINE_ACTIVITY_REQUEST, UR_STATE_PLAYER_CONTACTED_YOU, - UR_STATE_RECV_CONTACT_DATA, + UR_STATE_RECV_CONTACT_DATA, UR_STATE_PRINT_START_ACTIVITY_MSG, UR_STATE_START_ACTIVITY_LINK, UR_STATE_START_ACTIVITY_WAIT_FOR_LINK, @@ -80,7 +80,7 @@ enum { UR_STATE_ACCEPT_CHAT_REQUEST, UR_STATE_WAIT_FOR_START_MENU, UR_STATE_INTERACT_WITH_PLAYER, - UR_STATE_TRY_COMMUNICATING, + UR_STATE_TRY_COMMUNICATING, UR_STATE_PRINT_AND_EXIT, UR_STATE_SEND_ACTIVITY_REQUEST, UR_STATE_TRAINER_APPEARS_BUSY, @@ -94,15 +94,15 @@ enum { UR_STATE_CANCEL_REQUEST_PRINT_MSG, UR_STATE_CANCEL_REQUEST_RESTART_LINK, UR_STATE_COMMUNICATING_WAIT_FOR_DATA, - UR_STATE_WAIT_FOR_CONTACT_DATA, + UR_STATE_WAIT_FOR_CONTACT_DATA, UR_STATE_PRINT_CARD_INFO, UR_STATE_WAIT_FINISH_READING_CARD, UR_STATE_INTERACT_WITH_ATTENDANT, - UR_STATE_REGISTER_PROMPT, + UR_STATE_REGISTER_PROMPT, UR_STATE_CANCEL_REGISTRATION_PROMPT, UR_STATE_CHECK_TRADING_BOARD, UR_STATE_TRADING_BOARD_LOAD, - UR_STATE_REGISTER_PROMPT_HANDLE_INPUT, + UR_STATE_REGISTER_PROMPT_HANDLE_INPUT, UR_STATE_TRADING_BOARD_HANDLE_INPUT, UR_STATE_TRADE_PROMPT, UR_STATE_TRADE_SELECT_MON, @@ -110,7 +110,7 @@ enum { UR_STATE_REGISTER_REQUEST_TYPE, UR_STATE_REGISTER_SELECT_MON_FADE, UR_STATE_REGISTER_SELECT_MON, - UR_STATE_REGISTER_COMPLETE, + UR_STATE_REGISTER_COMPLETE, UR_STATE_CANCEL_REGISTRATION, }; @@ -129,7 +129,7 @@ enum { LL_STATE_PRINT_AWAITING_PLAYERS, LL_STATE_AWAIT_PLAYERS, LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, - LL_STATE_9 = 9, + LL_STATE_WAIT_DISCONNECT_CHILD = 9, LL_STATE_MEMBER_LEFT, LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT, LL_STATE_UPDATE_AFTER_JOIN_REQUEST, @@ -174,116 +174,138 @@ enum { LG_STATE_SHUTDOWN = 23, }; +// Color types for PrintUnionRoomText +enum { + UR_COLOR_DEFAULT, + UR_COLOR_RED, + UR_COLOR_GREEN, + UR_COLOR_WHITE, + UR_COLOR_CANCEL, + UR_COLOR_TRADE_BOARD_SELF, + UR_COLOR_TRADE_BOARD_OTHER, +}; + +// Return values for HandlePlayerListUpdate +enum { + PLIST_NONE, + PLIST_NEW_PLAYER, + PLIST_RECENT_UPDATE, + PLIST_UNUSED, + PLIST_CONTACTED, +}; + static EWRAM_DATA u8 sUnionRoomPlayerName[12] = {}; EWRAM_DATA u8 gPlayerCurrActivity = 0; static EWRAM_DATA u8 sPlayerActivityGroupSize = 0; -static EWRAM_DATA union WirelessLink_Main sWirelessLinkMain = {}; +static EWRAM_DATA union +{ + struct WirelessLink_Leader *leader; + struct WirelessLink_Group *group; + struct WirelessLink_URoom *uRoom; +} sWirelessLinkMain = {}; static EWRAM_DATA u32 sUnused = 0; -EWRAM_DATA struct GFtgtGnameSub gPartnerTgtGnameSub = {}; +EWRAM_DATA struct RfuGameCompatibilityData gRfuPartnerCompatibilityData = {}; EWRAM_DATA u16 gUnionRoomOfferedSpecies = 0; EWRAM_DATA u8 gUnionRoomRequestedMonType = 0; static EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {}; -// IWRAM vars static struct WirelessLink_Leader *sLeader; static struct WirelessLink_Group *sGroup; static struct WirelessLink_URoom *sURoom; -// this file's functions -static void UR_AddTextPrinterParameterized(u8, u8, const u8 *, u8, u8, u8); +static void PrintUnionRoomText(u8, u8, const u8 *, u8, u8, u8); static u16 ReadAsU16(const u8 *); static void Task_TryBecomeLinkLeader(u8); static void Task_TryJoinLinkGroup(u8); static void Task_ListenToWireless(u8); -static void Task_MEvent_Leader(u8); +static void Task_SendMysteryGift(u8); static void Task_CardOrNewsWithFriend(u8); static void Task_CardOrNewsOverWireless(u8); static void Task_RunUnionRoom(u8); -static void ClearUnkStruct_x1CArray(struct UnkStruct_Main4 *, u8); -static void ClearUnkStruct_x20Array(struct UnkStruct_x20 *, u8); -static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 *, u32); -static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 *, u32 ); +static void ClearIncomingPlayerList(struct RfuIncomingPlayerList *, u8); +static void ClearRfuPlayerList(struct RfuPlayer *, u8); +static u8 CreateTask_ListenForCompatiblePartners(struct RfuIncomingPlayerList *, u32); +static u8 CreateTask_ListenForWonderDistributor(struct RfuIncomingPlayerList *, u32 ); static bool8 PrintOnTextbox(u8 *, const u8 *); static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *, u32, u32); -static u8 sub_8013398(struct UnkStruct_Main0 *); +static u8 LeaderPrunePlayerList(struct RfuPlayerList *); static s8 UnionRoomHandleYesNo(u8 *, bool32); -static void IntlConvPartnerUname7(u8 *, struct UnkStruct_x20 *); +static void CopyAndTranslatePlayerName(u8 *, struct RfuPlayer *); static void Leader_DestroyResources(struct WirelessLink_Leader *); static void CreateTask_RunScriptAndFadeToActivity(void); -static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *); -static void PrintGroupMemberCandidateOnWindowWithColor(u8, u8, u8, struct UnkStruct_x20 *, u8, u8 ); -static u32 Findx20Inx1CArray(struct UnkStruct_x20 *, struct UnkStruct_x1C *); -static u8 Appendx1Ctox20(struct UnkStruct_x20 *, struct UnkStruct_x1C *, u8); +static u8 LeaderUpdateGroupMembership(struct RfuPlayerList *); +static void PrintGroupCandidateOnWindow(u8, u8, u8, struct RfuPlayer *, u8, u8 ); +static u32 GetNewIncomingPlayerId(struct RfuPlayer *, struct RfuIncomingPlayer *); +static u8 TryAddIncomingPlayerToList(struct RfuPlayer *, struct RfuIncomingPlayer *, u8); static u8 GetNewLeaderCandidate(void); static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group *, s32); static void AskToJoinRfuGroup(struct WirelessLink_Group *, s32); static void JoinGroup_EnableScriptContexts(void); -static void PrintUnionRoomGroupOnWindow(u8, u8, u8, struct UnkStruct_x20 *, u8, u8); -static bool32 AreUnionRoomPlayerGnamesDifferent(struct WirelessGnameUnamePair *, struct WirelessGnameUnamePair *); +static void PrintGroupMemberOnWindow(u8, u8, u8, struct RfuPlayer *, u8, u8); +static bool32 ArePlayerDataDifferent(struct RfuPlayerData *, struct RfuPlayerData *); static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *, u8); static void ResetUnionRoomTrade(struct UnionRoomTrade *); static void CreateTask_StartActivity(void); -static bool32 HasWonderCardOrNewsByLinkGroup(struct GFtgtGname *, s16); -static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 *, struct UnkStruct_Main4 *, u32); +static bool32 HasWonderCardOrNewsByLinkGroup(struct RfuGameData *, s16); +static u8 CreateTask_SearchForChildOrParent(struct RfuIncomingPlayerList *, struct RfuIncomingPlayerList *, u32); static bool32 RegisterTradeMonAndGetIsEgg(u32, struct UnionRoomTrade *); static void RegisterTradeMon(u32, struct UnionRoomTrade *); -static void UR_EnableScriptContext2AndFreezeObjectEvents(void); +static void StartScriptInteraction(void); static bool32 IsPlayerFacingTradingBoard(void); static u8 HandlePlayerListUpdate(void); static bool32 PollPartnerYesNoResponse(struct WirelessLink_URoom *); static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom *); -static u8 GetActivePartnerSpriteGenderParam(struct WirelessLink_URoom *); -static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *); -static bool32 UR_RunTextPrinters_CheckPrinter0Active(void); -static s32 GetUnionRoomPlayerGender(s32, struct UnkStruct_Main0 *); -static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 *, u8, u8, u32); +static u8 GetActivePartnersInfo(struct WirelessLink_URoom *); +static bool32 HandleContactFromOtherPlayer(struct WirelessLink_URoom *); +static bool32 UR_RunTextPrinters(void); +static s32 GetUnionRoomPlayerGender(s32, struct RfuPlayerList *); +static s32 UnionRoomGetPlayerInteractionResponse(struct RfuPlayerList *, u8, u8, u32); static void HandleCancelActivity(bool32); static s32 ListMenuHandler_AllItemsAvailable(u8 *, u8 *, u8 *, const struct WindowTemplate *, const struct ListMenuTemplate *); -static s32 TradeBoardMenuHandler(u8 *, u8 *, u8 *, u8 *, const struct WindowTemplate *, const struct ListMenuTemplate *, struct UnkStruct_Main0 *); -static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 *, s32); +static s32 TradeBoardMenuHandler(u8 *, u8 *, u8 *, u8 *, const struct WindowTemplate *, const struct ListMenuTemplate *, struct RfuPlayerList *); +static s32 GetIndexOfNthTradeBoardOffer(struct RfuPlayer *, s32); static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void); static u32 GetResponseIdx_InviteToURoomActivity(s32); static void ViewURoomPartnerTrainerCard(u8 *, struct WirelessLink_URoom *, bool8); static void GetURoomActivityRejectMsg(u8 *, s32, u32); -static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 *); +static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct RfuPlayer *); static void GetURoomActivityStartMsg(u8 *, u8); static void UR_ClearBg0(void); static s32 IsRequestedTypeOrEggInPlayerParty(u32, u32); static bool32 UR_PrintFieldMessage(const u8 *); static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *); static void Task_InitUnionRoom(u8 taskId); -static bool8 AreGnameUnameDifferent(struct WirelessGnameUnamePair*, const struct WirelessGnameUnamePair*); -static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, u32 id, u8 y); -static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, u32 id, u8 y); -static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 id, u8 y); -static void nullsub_14(u8 windowId, u32 id, u8 y); +static bool8 ArePlayersDifferent(struct RfuPlayerData *, const struct RfuPlayerData *); +static void ItemPrintFunc_PossibleGroupMembers(u8, u32, u8); +static void ListMenuItemPrintFunc_UnionRoomGroups(u8, u32, u8); +static void TradeBoardListMenuItemPrintFunc(u8, u32, u8); +static void ItemPrintFunc_EmptyList(u8, u32, u8); #include "data/union_room.h" -// code static void PrintNumPlayersWaitingForMsg(u8 windowId, u8 capacityCode, u8 stringId) { FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); switch (capacityCode << 8) { case LINK_GROUP_CAPACITY(0, 2): - UR_AddTextPrinterParameterized(windowId, 1, sPlayersNeededOrModeTexts[0][stringId - 1], 0, 1, UR_COLOR_DKE_WHT_LTE); + PrintUnionRoomText(windowId, FONT_NORMAL, sPlayersNeededOrModeTexts[0][stringId - 1], 0, 1, UR_COLOR_DEFAULT); break; case LINK_GROUP_CAPACITY(0, 4): - UR_AddTextPrinterParameterized(windowId, 1, sPlayersNeededOrModeTexts[1][stringId - 1], 0, 1, UR_COLOR_DKE_WHT_LTE); + PrintUnionRoomText(windowId, FONT_NORMAL, sPlayersNeededOrModeTexts[1][stringId - 1], 0, 1, UR_COLOR_DEFAULT); break; case LINK_GROUP_CAPACITY(2, 5): - UR_AddTextPrinterParameterized(windowId, 1, sPlayersNeededOrModeTexts[2][stringId - 1], 0, 1, UR_COLOR_DKE_WHT_LTE); + PrintUnionRoomText(windowId, FONT_NORMAL, sPlayersNeededOrModeTexts[2][stringId - 1], 0, 1, UR_COLOR_DEFAULT); break; case LINK_GROUP_CAPACITY(3, 5): - UR_AddTextPrinterParameterized(windowId, 1, sPlayersNeededOrModeTexts[3][stringId - 1], 0, 1, UR_COLOR_DKE_WHT_LTE); + PrintUnionRoomText(windowId, FONT_NORMAL, sPlayersNeededOrModeTexts[3][stringId - 1], 0, 1, UR_COLOR_DEFAULT); break; case LINK_GROUP_CAPACITY(2, 4): - UR_AddTextPrinterParameterized(windowId, 1, sPlayersNeededOrModeTexts[4][stringId - 1], 0, 1, UR_COLOR_DKE_WHT_LTE); + PrintUnionRoomText(windowId, FONT_NORMAL, sPlayersNeededOrModeTexts[4][stringId - 1], 0, 1, UR_COLOR_DEFAULT); break; } - CopyWindowToVram(windowId, 2); + CopyWindowToVram(windowId, COPYWIN_GFX); } static void PrintPlayerNameAndIdOnWindow(u8 windowId) @@ -291,13 +313,13 @@ static void PrintPlayerNameAndIdOnWindow(u8 windowId) u8 text[30]; u8 *txtPtr; - UR_AddTextPrinterParameterized(windowId, 1, gSaveBlock2Ptr->playerName, 0, 1, UR_COLOR_DKE_WHT_LTE); + PrintUnionRoomText(windowId, FONT_NORMAL, gSaveBlock2Ptr->playerName, 0, 1, UR_COLOR_DEFAULT); txtPtr = StringCopy(text, sText_ID); ConvertIntToDecimalStringN(txtPtr, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5); - UR_AddTextPrinterParameterized(windowId, 1, text, 0, 0x11, UR_COLOR_DKE_WHT_LTE); + PrintUnionRoomText(windowId, FONT_NORMAL, text, 0, 17, UR_COLOR_DEFAULT); } -static void StringExpandPlaceholders_AwaitingCommFromAnother(u8 *dst, u8 caseId) +static void GetAwaitingCommunicationText(u8 *dst, u8 caseId) { switch (caseId) { @@ -312,8 +334,8 @@ static void StringExpandPlaceholders_AwaitingCommFromAnother(u8 *dst, u8 caseId) case ACTIVITY_BATTLE_TOWER_OPEN: case ACTIVITY_RECORD_CORNER: case ACTIVITY_BERRY_BLENDER: - case ACTIVITY_WONDER_CARD2: - case ACTIVITY_WONDER_NEWS2: + case ACTIVITY_WONDER_CARD: + case ACTIVITY_WONDER_NEWS: case ACTIVITY_CONTEST_COOL: case ACTIVITY_CONTEST_BEAUTY: case ACTIVITY_CONTEST_CUTE: @@ -356,7 +378,7 @@ void TryBecomeLinkLeader(void) struct WirelessLink_Leader *data; taskId = CreateTask(Task_TryBecomeLinkLeader, 0); - sWirelessLinkMain.leader = data = (void*)(gTasks[taskId].data); + sWirelessLinkMain.leader = data = (void *)(gTasks[taskId].data); sLeader = data; data->state = LL_STATE_INIT; @@ -376,24 +398,24 @@ static void Task_TryBecomeLinkLeader(u8 taskId) gSpecialVar_0x8004++; gPlayerCurrActivity = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004]; sPlayerActivityGroupSize = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004] >> 8; - SetHostRFUtgtGname(gPlayerCurrActivity, 0, 0); + SetHostRfuGameData(gPlayerCurrActivity, 0, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_LinkLeader(GROUP_MAX(sPlayerActivityGroupSize)); data->state = LL_STATE_INIT2; break; case LL_STATE_INIT2: - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); - data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); - ClearUnkStruct_x1CArray(data->field_4, 4); - ClearUnkStruct_x20Array(data->field_0->arr, 5); - LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.playerName); - data->field_0->arr[0].timeoutCounter = 0; - data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - data->field_0->arr[0].useRedText = FALSE; - data->field_0->arr[0].field_1B = 0; - data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYERS * sizeof(struct RfuPlayer)); + data->playerListBackup = AllocZeroed(MAX_RFU_PLAYERS * sizeof(struct RfuPlayer)); + ClearIncomingPlayerList(data->incomingPlayerList, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYERS); + CopyHostRfuGameDataAndUsername(&data->playerList->players[0].rfu.data, data->playerList->players[0].rfu.name); + data->playerList->players[0].timeoutCounter = 0; + data->playerList->players[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->playerList->players[0].useRedText = FALSE; + data->playerList->players[0].newPlayerCountdown = 0; + data->listenTaskId = CreateTask_ListenForCompatiblePartners(data->incomingPlayerList, 0xFF); data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel); switch (GROUP_MAX(sPlayerActivityGroupSize)) { @@ -409,9 +431,9 @@ static void Task_TryBecomeLinkLeader(u8 taskId) data->nPlayerModeWindowId = AddWindow(&sWindowTemplate_NumPlayerMode); FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2)); - UR_AddTextPrinterParameterized(data->bButtonCancelWindowId, 0, sText_BButtonCancel, 8, 1, 4); + PrintUnionRoomText(data->bButtonCancelWindowId, FONT_SMALL, sText_BButtonCancel, 8, 1, UR_COLOR_CANCEL); PutWindowTilemap(data->bButtonCancelWindowId); - CopyWindowToVram(data->bButtonCancelWindowId, 2); + CopyWindowToVram(data->bButtonCancelWindowId, COPYWIN_GFX); DrawStdWindowFrame(data->listWindowId, FALSE); gMultiuseListMenuTemplate = sListMenuTemplate_PossibleGroupMembers; @@ -420,7 +442,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) DrawStdWindowFrame(data->nPlayerModeWindowId, FALSE); PutWindowTilemap(data->nPlayerModeWindowId); - CopyWindowToVram(data->nPlayerModeWindowId, 2); + CopyWindowToVram(data->nPlayerModeWindowId, COPYWIN_GFX); CopyBgTilemapBufferToVram(0); data->playerCount = 1; @@ -437,7 +459,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) } else { - StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, gPlayerCurrActivity); + GetAwaitingCommunicationText(gStringVar4, gPlayerCurrActivity); } PrintNumPlayersWaitingForMsg(data->nPlayerModeWindowId, sPlayerActivityGroupSize, data->playerCount); @@ -461,22 +483,24 @@ static void Task_TryBecomeLinkLeader(u8 taskId) if (GROUP_MIN(sPlayerActivityGroupSize) != 0 && data->playerCount > GROUP_MIN(sPlayerActivityGroupSize) - 1 && GROUP_MAX(sPlayerActivityGroupSize) != 0 - && sub_8012240() + && IsRfuCommunicatingWithAllChildren() && JOY_NEW(START_BUTTON)) { data->state = LL_STATE_MEMBERS_OK_PROMPT; LinkRfu_StopManagerAndFinalizeSlots(); } - if (data->state == LL_STATE_AWAIT_PLAYERS && sub_80105EC()) + if (data->state == LL_STATE_AWAIT_PLAYERS && RfuTryDisconnectLeavingChildren()) { - data->state = LL_STATE_9; + // At least 1 group member has left or is trying to leave + data->state = LL_STATE_WAIT_DISCONNECT_CHILD; } break; - case LL_STATE_9: - if (!sub_80105EC()) + case LL_STATE_WAIT_DISCONNECT_CHILD: + // Resume after ensuring all members trying to leave have left + if (!RfuTryDisconnectLeavingChildren()) { data->state = LL_STATE_AWAIT_PLAYERS; - data->playerCount = sub_8013398(data->field_0); + data->playerCount = LeaderPrunePlayerList(data->playerList); } break; case LL_STATE_MEMBER_LEFT: @@ -490,7 +514,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) #endif if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id])) { - data->playerCount = sub_8013398(data->field_0); + data->playerCount = LeaderPrunePlayerList(data->playerList); RedrawListMenu(data->listTaskId); data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } @@ -509,44 +533,44 @@ static void Task_TryBecomeLinkLeader(u8 taskId) } break; case LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT: - switch (UnionRoomHandleYesNo(&data->textState, HasTrainerLeftPartnersList(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName))) + switch (UnionRoomHandleYesNo(&data->textState, HasTrainerLeftPartnersList(ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name))) { case 0: // YES LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_OK; - SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); data->state = LL_STATE_UPDATE_AFTER_JOIN_REQUEST; break; case 1: // NO - case -1: + case MENU_B_PRESSED: data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_NO; - SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); data->state = LL_STATE_UPDATE_AFTER_JOIN_REQUEST; break; case -3: - data->state = LL_STATE_9; + data->state = LL_STATE_WAIT_DISCONNECT_CHILD; break; } break; case LL_STATE_UPDATE_AFTER_JOIN_REQUEST: - val = WaitSendRfuStatusToPartner(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + val = WaitSendRfuStatusToPartner(ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); if (val == 1) // Send complete { if (data->joinRequestAnswer == RFU_STATUS_JOIN_GROUP_OK) { - data->field_0->arr[data->playerCount].field_1B = 0; + data->playerList->players[data->playerCount].newPlayerCountdown = 0; RedrawListMenu(data->listTaskId); data->playerCount++; if (data->playerCount == GROUP_MAX(sPlayerActivityGroupSize)) { - if (GROUP_MIN2(sPlayerActivityGroupSize) != 0 || data->playerCount == 4) + if (GROUP_MIN2(sPlayerActivityGroupSize) != 0 || data->playerCount == RFU_CHILD_MAX) { data->state = LL_STATE_MEMBERS_OK_PROMPT; } else { - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->playerCount - 1]); + CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->playerCount - 1]); StringExpandPlaceholders(gStringVar4, sText_AnOKWasSentToPlayer); data->state = LL_STATE_ACCEPTED_FINAL_MEMBER; } @@ -561,9 +585,9 @@ static void Task_TryBecomeLinkLeader(u8 taskId) } else // Member disconnected { - RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.playerName, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId)); - data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; - sub_8013398(data->field_0); + RequestDisconnectSlotByTrainerNameAndId(data->playerList->players[data->playerCount].rfu.name, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId)); + data->playerList->players[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + LeaderPrunePlayerList(data->playerList); RedrawListMenu(data->listTaskId); data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } @@ -595,7 +619,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) data->state = LL_STATE_CONFIRMED_MEMBERS; break; case 1: // NO - case -1: + case MENU_B_PRESSED: if (GROUP_MIN2(sPlayerActivityGroupSize) != 0) data->state = LL_STATE_CANCEL_WITH_MSG; else @@ -614,7 +638,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) data->state = LL_STATE_SHUTDOWN_AND_FAIL; break; case 1: // NO - case -1: + case MENU_B_PRESSED: if (GROUP_MIN2(sPlayerActivityGroupSize) != 0) data->state = LL_STATE_MEMBERS_OK_PROMPT; else if (data->playerCount == GROUP_MAX(sPlayerActivityGroupSize)) @@ -662,12 +686,12 @@ static void Task_TryBecomeLinkLeader(u8 taskId) data->state++; // LL_STATE_RETRY or LL_STATE_FAILED break; case LL_STATE_FAILED: - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); gSpecialVar_Result = LINKUP_FAILED; break; case LL_STATE_RETRY: - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN; break; @@ -681,7 +705,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) if (gReceivedRemoteLinkPlayers != 0) { if (IsActivityWithVariableGroupSize(gPlayerCurrActivity)) - sub_801103C(); + GetOtherPlayersInfoFlags(); UpdateGameData_GroupLockedIn(TRUE); CreateTask_RunScriptAndFadeToActivity(); Leader_DestroyResources(data); @@ -705,9 +729,9 @@ static void Leader_DestroyResources(struct WirelessLink_Leader *data) RemoveWindow(data->bButtonCancelWindowId); DestroyTask(data->listenTaskId); - Free(data->field_8); - Free(data->field_0); - Free(data->field_4); + Free(data->playerListBackup); + Free(data->playerList); + Free(data->incomingPlayerList); } static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 caseId) @@ -721,8 +745,8 @@ static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 caseId) case ACTIVITY_BATTLE_TOWER: StringExpandPlaceholders(dst, sText_PlayerContactedYouForXAccept); break; - case ACTIVITY_WONDER_CARD2: - case ACTIVITY_WONDER_NEWS2: + case ACTIVITY_WONDER_CARD: + case ACTIVITY_WONDER_NEWS: StringExpandPlaceholders(dst, sText_PlayerContactedYouShareX); break; case ACTIVITY_BATTLE_MULTI: @@ -765,8 +789,8 @@ static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 caseId) case ACTIVITY_TRADE: case ACTIVITY_BATTLE_TOWER: case ACTIVITY_BATTLE_TOWER_OPEN: - case ACTIVITY_WONDER_CARD2: - case ACTIVITY_WONDER_NEWS2: + case ACTIVITY_WONDER_CARD: + case ACTIVITY_WONDER_NEWS: StringExpandPlaceholders(dst, sText_AwaitingPlayersResponse); break; case ACTIVITY_BATTLE_MULTI: @@ -794,8 +818,8 @@ static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 caseId) case ACTIVITY_TRADE: case ACTIVITY_BATTLE_TOWER: case ACTIVITY_BATTLE_TOWER_OPEN: - case ACTIVITY_WONDER_CARD2: - case ACTIVITY_WONDER_NEWS2: + case ACTIVITY_WONDER_CARD: + case ACTIVITY_WONDER_NEWS: StringExpandPlaceholders(dst, sText_PlayerSentBackOK); break; case ACTIVITY_BATTLE_MULTI: @@ -816,12 +840,12 @@ static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 caseId) static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *data, u32 joinedState, u32 droppedState) { - switch (LeaderUpdateGroupMembership(data->field_0)) + switch (LeaderUpdateGroupMembership(data->playerList)) { case UNION_ROOM_SPAWN_IN: PlaySE(SE_PC_LOGIN); RedrawListMenu(data->listTaskId); - IntlConvPartnerUname7(gStringVar2, &data->field_0->arr[data->playerCount]); + CopyAndTranslatePlayerName(gStringVar2, &data->playerList->players[data->playerCount]); Leader_GetAcceptNewMemberPrompt(gStringVar4, gPlayerCurrActivity); data->state = joinedState; break; @@ -838,23 +862,23 @@ static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *data static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, u32 id, u8 y) { struct WirelessLink_Leader *data = sWirelessLinkMain.leader; - u8 colorIdx = UR_COLOR_DKE_WHT_LTE; + u8 colorIdx = UR_COLOR_DEFAULT; - switch (data->field_0->arr[id].groupScheduledAnim) + switch (data->playerList->players[id].groupScheduledAnim) { case UNION_ROOM_SPAWN_IN: - if (data->field_0->arr[id].field_1B != 0) - colorIdx = UR_COLOR_GRN_WHT_LTG; + if (data->playerList->players[id].newPlayerCountdown != 0) + colorIdx = UR_COLOR_GREEN; break; case UNION_ROOM_SPAWN_OUT: - colorIdx = UR_COLOR_RED_WHT_LTR; + colorIdx = UR_COLOR_RED; break; } - PrintGroupMemberCandidateOnWindowWithColor(windowId, 0, y, &data->field_0->arr[id], colorIdx, id); + PrintGroupCandidateOnWindow(windowId, 0, y, &data->playerList->players[id], colorIdx, id); } -static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *arg0) +static u8 LeaderUpdateGroupMembership(struct RfuPlayerList *list) { struct WirelessLink_Leader *data = sWirelessLinkMain.leader; u8 ret = UNION_ROOM_SPAWN_NONE; @@ -863,31 +887,33 @@ static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *arg0) for (i = 1; i < MAX_RFU_PLAYERS; i++) { - u16 var = data->field_0->arr[i].groupScheduledAnim; + u16 var = data->playerList->players[i].groupScheduledAnim; if (var == UNION_ROOM_SPAWN_IN) { - id = Findx20Inx1CArray(&data->field_0->arr[i], data->field_4->arr); + id = GetNewIncomingPlayerId(&data->playerList->players[i], data->incomingPlayerList->players); if (id != 0xFF) { - data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname; - data->field_0->arr[i].timeoutCounter = 1; + // New incoming player + data->playerList->players[i].rfu = data->incomingPlayerList->players[id].rfu; + data->playerList->players[i].timeoutCounter = 1; } else { - data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; + // No new incoming player + data->playerList->players[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; ret = UNION_ROOM_SPAWN_OUT; } } } for (id = 0; id < RFU_CHILD_MAX; id++) - Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], MAX_RFU_PLAYERS); + TryAddIncomingPlayerToList(data->playerList->players, &data->incomingPlayerList->players[id], MAX_RFU_PLAYERS); if (ret != UNION_ROOM_SPAWN_OUT) { for (id = 0; id < MAX_RFU_PLAYERS; id++) { - if (data->field_0->arr[id].field_1B != 0) + if (data->playerList->players[id].newPlayerCountdown != 0) ret = UNION_ROOM_SPAWN_IN; } } @@ -895,7 +921,7 @@ static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *arg0) return ret; } -static u8 sub_8013398(struct UnkStruct_Main0 *arg0) +static u8 LeaderPrunePlayerList(struct RfuPlayerList *list) { struct WirelessLink_Leader *data = sWirelessLinkMain.leader; u8 copiedCount; @@ -903,14 +929,14 @@ static u8 sub_8013398(struct UnkStruct_Main0 *arg0) u8 playerCount; for (i = 0; i < MAX_RFU_PLAYERS; i++) - data->field_8->arr[i] = data->field_0->arr[i]; + data->playerListBackup->players[i] = data->playerList->players[i]; copiedCount = 0; for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (data->field_8->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (data->playerListBackup->players[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - data->field_0->arr[copiedCount] = data->field_8->arr[i]; + data->playerList->players[copiedCount] = data->playerListBackup->players[i]; copiedCount++; } } @@ -918,18 +944,18 @@ static u8 sub_8013398(struct UnkStruct_Main0 *arg0) playerCount = copiedCount; for (; copiedCount < MAX_RFU_PLAYERS; copiedCount++) { - data->field_0->arr[copiedCount].gname_uname = sWirelessGnameUnamePair_Dummy; - data->field_0->arr[copiedCount].timeoutCounter = 0; - data->field_0->arr[copiedCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; - data->field_0->arr[copiedCount].useRedText = FALSE; - data->field_0->arr[copiedCount].field_1B = 0; + data->playerList->players[copiedCount].rfu = sUnionRoomPlayer_DummyRfu; + data->playerList->players[copiedCount].timeoutCounter = 0; + data->playerList->players[copiedCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + data->playerList->players[copiedCount].useRedText = FALSE; + data->playerList->players[copiedCount].newPlayerCountdown = 0; } for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN) + if (data->playerList->players[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN) continue; - if (data->field_0->arr[i].field_1B != 64) + if (data->playerList->players[i].newPlayerCountdown != 64) continue; playerCount = i; @@ -945,7 +971,7 @@ void TryJoinLinkGroup(void) struct WirelessLink_Group *data; taskId = CreateTask(Task_TryJoinLinkGroup, 0); - sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data); + sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data); sGroup = data; data->state = LG_STATE_INIT; @@ -964,12 +990,12 @@ static void Task_TryJoinLinkGroup(u8 taskId) if (gSpecialVar_0x8004 == LINK_GROUP_BATTLE_TOWER && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN) gSpecialVar_0x8004++; gPlayerCurrActivity = sLinkGroupToURoomActivity[gSpecialVar_0x8004]; - SetHostRFUtgtGname(gPlayerCurrActivity, 0, 0); + SetHostRfuGameData(gPlayerCurrActivity, 0, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYER_LIST_SIZE * sizeof(struct RfuPlayer)); data->state = LG_STATE_CHOOSE_LEADER_MSG; break; case LG_STATE_CHOOSE_LEADER_MSG: @@ -977,17 +1003,17 @@ static void Task_TryJoinLinkGroup(u8 taskId) data->state = LG_STATE_INIT_WINDOWS; break; case LG_STATE_INIT_WINDOWS: - ClearUnkStruct_x1CArray(data->field_4, 4); - ClearUnkStruct_x20Array(data->field_0->arr, 16); - data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, gSpecialVar_0x8004); + ClearIncomingPlayerList(data->incomingPlayerList, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYER_LIST_SIZE); + data->listenTaskId = CreateTask_ListenForCompatiblePartners(data->incomingPlayerList, gSpecialVar_0x8004); data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel); - data->listWindowId = AddWindow(&gUnknown_082F0174); - data->playerNameAndIdWindowId = AddWindow(&gUnknown_082F017C); + data->listWindowId = AddWindow(&sWindowTemplate_GroupList); + data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_PlayerNameAndId); FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2)); - UR_AddTextPrinterParameterized(data->bButtonCancelWindowId, 0, sText_ChooseJoinCancel, 8, 1, 4); + PrintUnionRoomText(data->bButtonCancelWindowId, FONT_SMALL, sText_ChooseJoinCancel, 8, 1, UR_COLOR_CANCEL); PutWindowTilemap(data->bButtonCancelWindowId); - CopyWindowToVram(data->bButtonCancelWindowId, 2); + CopyWindowToVram(data->bButtonCancelWindowId, COPYWIN_GFX); DrawStdWindowFrame(data->listWindowId, FALSE); gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups; @@ -997,7 +1023,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) DrawStdWindowFrame(data->playerNameAndIdWindowId, FALSE); PutWindowTilemap(data->playerNameAndIdWindowId); PrintPlayerNameAndIdOnWindow(data->playerNameAndIdWindowId); - CopyWindowToVram(data->playerNameAndIdWindowId, 2); + CopyWindowToVram(data->playerNameAndIdWindowId, COPYWIN_GFX); CopyBgTilemapBufferToVram(0); data->leaderId = 0; @@ -1013,12 +1039,12 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; case 0: id = ListMenu_ProcessInput(data->listTaskId); - if (JOY_NEW(A_BUTTON) && id != -1) + if (JOY_NEW(A_BUTTON) && id != MENU_B_PRESSED) { // this unused variable along with the assignment is needed to match - u32 activity = data->field_0->arr[id].gname_uname.gname.activity; + u32 activity = data->playerList->players[id].rfu.data.activity; - if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started) + if (data->playerList->players[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->playerList->players[id].rfu.data.startedActivity) { u32 readyStatus = IsTryingToTradeAcrossVersionTooSoon(data, id); if (readyStatus == UR_TRADE_READY) @@ -1054,14 +1080,14 @@ static void Task_TryJoinLinkGroup(u8 taskId) GetYouAskedToJoinGroupPleaseWaitMessage(gStringVar4, gPlayerCurrActivity); if (PrintOnTextbox(&data->textState, gStringVar4)) { - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]); + CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->leaderId]); data->state = LG_STATE_MAIN; } break; case LG_STATE_MAIN: if (gReceivedRemoteLinkPlayers) { - gPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity; + gPlayerCurrActivity = data->playerList->players[data->leaderId].rfu.data.activity; RfuSetStatus(RFU_STATUS_OK, 0); switch (gPlayerCurrActivity) { @@ -1078,8 +1104,8 @@ static void Task_TryJoinLinkGroup(u8 taskId) case ACTIVITY_BATTLE_TOWER_OPEN: case ACTIVITY_RECORD_CORNER: case ACTIVITY_BERRY_BLENDER: - case ACTIVITY_WONDER_CARD2: - case ACTIVITY_WONDER_NEWS2: + case ACTIVITY_WONDER_CARD: + case ACTIVITY_WONDER_NEWS: case ACTIVITY_CONTEST_COOL: case ACTIVITY_CONTEST_BEAUTY: case ACTIVITY_CONTEST_CUTE: @@ -1159,7 +1185,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) RedrawListMenu(data->listTaskId); break; case 1: // NO - case -1: + case MENU_B_PRESSED: data->state = LG_STATE_ASK_JOIN_GROUP; RedrawListMenu(data->listTaskId); break; @@ -1188,8 +1214,8 @@ static void Task_TryJoinLinkGroup(u8 taskId) RemoveWindow(data->listWindowId); RemoveWindow(data->bButtonCancelWindowId); DestroyTask(data->listenTaskId); - Free(data->field_0); - Free(data->field_4); + Free(data->playerList); + Free(data->incomingPlayerList); data->state++; break; case LG_STATE_RFU_ERROR_SHUTDOWN: @@ -1237,13 +1263,13 @@ static void Task_TryJoinLinkGroup(u8 taskId) static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group *data, s32 id) { - struct UnkStruct_x20 *structPtr = &data->field_0->arr[id]; + struct RfuPlayer *partner = &data->playerList->players[id]; - if (gPlayerCurrActivity == ACTIVITY_TRADE && structPtr->gname_uname.gname.unk_00.version != VERSION_EMERALD) + if (gPlayerCurrActivity == ACTIVITY_TRADE && partner->rfu.data.compatibility.version != VERSION_EMERALD) { if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP)) return UR_TRADE_PLAYER_NOT_READY; - else if (structPtr->gname_uname.gname.unk_00.isChampion) + else if (partner->rfu.data.compatibility.isChampion) return UR_TRADE_READY; } else @@ -1260,9 +1286,9 @@ static void AskToJoinRfuGroup(struct WirelessLink_Group *data, s32 id) LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]); + CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->leaderId]); UpdateGameData_SetActivity(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, TRUE); - CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.playerName, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId)); + CreateTask_RfuReconnectWithParent(data->playerList->players[data->leaderId].rfu.name, ReadAsU16(data->playerList->players[data->leaderId].rfu.data.compatibility.playerTrainerId)); } u8 CreateTask_ListenToWireless(void) @@ -1271,7 +1297,7 @@ u8 CreateTask_ListenToWireless(void) struct WirelessLink_Group *data; taskId = CreateTask(Task_ListenToWireless, 0); - sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data); + sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data); data->state = 0; data->textState = 0; @@ -1288,19 +1314,19 @@ static void Task_ListenToWireless(u8 taskId) switch (data->state) { case 0: - SetHostRFUtgtGname(0, 0, 0); + SetHostRfuGameData(ACTIVITY_NONE, 0, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); - sub_80111B0(TRUE); - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); + RfuSetIgnoreError(TRUE); + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYER_LIST_SIZE * sizeof(struct RfuPlayer)); data->state = 2; break; case 2: - ClearUnkStruct_x1CArray(data->field_4, 4); - ClearUnkStruct_x20Array(data->field_0->arr, 16); - data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); + ClearIncomingPlayerList(data->incomingPlayerList, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYER_LIST_SIZE); + data->listenTaskId = CreateTask_ListenForCompatiblePartners(data->incomingPlayerList, 0xFF); data->leaderId = 0; data->state = 3; break; @@ -1312,8 +1338,8 @@ static void Task_ListenToWireless(u8 taskId) break; case 10: DestroyTask(data->listenTaskId); - Free(data->field_0); - Free(data->field_4); + Free(data->playerList); + Free(data->incomingPlayerList); LinkRfu_Shutdown(); data->state++; break; @@ -1348,27 +1374,26 @@ static bool32 IsPartnerActivityAcceptable(u32 activity, u32 linkGroup) return FALSE; } -static u8 URoomGroupListGetTextColor(struct WirelessLink_Group *data, u32 id) +static u8 GetGroupListTextColor(struct WirelessLink_Group *data, u32 id) { - if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (data->playerList->players[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (data->field_0->arr[id].gname_uname.gname.started) - return UR_COLOR_WHT_WHT_LTE; - else if (data->field_0->arr[id].useRedText) - return UR_COLOR_RED_WHT_LTR; - else if (data->field_0->arr[id].field_1B != 0) - return UR_COLOR_GRN_WHT_LTG; + if (data->playerList->players[id].rfu.data.startedActivity) + return UR_COLOR_WHITE; + else if (data->playerList->players[id].useRedText) + return UR_COLOR_RED; + else if (data->playerList->players[id].newPlayerCountdown != 0) + return UR_COLOR_GREEN; } - - return UR_COLOR_DKE_WHT_LTE; + return UR_COLOR_DEFAULT; } static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, u32 id, u8 y) { struct WirelessLink_Group *data = sWirelessLinkMain.group; - u8 colorId = URoomGroupListGetTextColor(data, id); + u8 colorId = GetGroupListTextColor(data, id); - PrintUnionRoomGroupOnWindow(windowId, 8, y, &data->field_0->arr[id], colorId, id); + PrintGroupMemberOnWindow(windowId, 8, y, &data->playerList->players[id], colorId, id); } static u8 GetNewLeaderCandidate(void) @@ -1378,48 +1403,48 @@ static u8 GetNewLeaderCandidate(void) u8 i; s32 id; - for (i = 0; i < 16; i++) + for (i = 0; i < MAX_RFU_PLAYER_LIST_SIZE; i++) { - if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_NONE) + if (data->playerList->players[i].groupScheduledAnim != UNION_ROOM_SPAWN_NONE) { - id = Findx20Inx1CArray(&data->field_0->arr[i], data->field_4->arr); + id = GetNewIncomingPlayerId(&data->playerList->players[i], data->incomingPlayerList->players); if (id != 0xFF) { - if (data->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (data->playerList->players[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (AreUnionRoomPlayerGnamesDifferent(&data->field_0->arr[i].gname_uname, &data->field_4->arr[id].gname_uname)) + if (ArePlayerDataDifferent(&data->playerList->players[i].rfu, &data->incomingPlayerList->players[id].rfu)) { - data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname; - data->field_0->arr[i].field_1B = 64; + data->playerList->players[i].rfu = data->incomingPlayerList->players[id].rfu; + data->playerList->players[i].newPlayerCountdown = 64; ret = 1; } else { - if (data->field_0->arr[i].field_1B != 0) + if (data->playerList->players[i].newPlayerCountdown != 0) { - data->field_0->arr[i].field_1B--; - if (data->field_0->arr[i].field_1B == 0) + data->playerList->players[i].newPlayerCountdown--; + if (data->playerList->players[i].newPlayerCountdown == 0) ret = 2; } } } else { - data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - data->field_0->arr[i].field_1B = 64; + data->playerList->players[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->playerList->players[i].newPlayerCountdown = 64; ret = 1; } - data->field_0->arr[i].timeoutCounter = 0; + data->playerList->players[i].timeoutCounter = 0; } else { - if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) + if (data->playerList->players[i].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) { - data->field_0->arr[i].timeoutCounter++; - if (data->field_0->arr[i].timeoutCounter >= 300) + data->playerList->players[i].timeoutCounter++; + if (data->playerList->players[i].timeoutCounter >= 300) { - data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; + data->playerList->players[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; ret = 2; } } @@ -1429,7 +1454,7 @@ static u8 GetNewLeaderCandidate(void) for (id = 0; id < RFU_CHILD_MAX; id++) { - if (Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], 16) != 0xFF) + if (TryAddIncomingPlayerToList(data->playerList->players, &data->incomingPlayerList->players[id], MAX_RFU_PLAYER_LIST_SIZE) != 0xFF) ret = 1; } @@ -1462,21 +1487,21 @@ static void Task_StartUnionRoomTrade(u8 taskId) case 1: if (GetBlockReceivedStatus() == 3) { - gEnemyParty[0] = *(struct Pokemon*)(gBlockRecvBuffer[GetMultiplayerId() ^ 1]); + gEnemyParty[0] = *(struct Pokemon *)(gBlockRecvBuffer[GetMultiplayerId() ^ 1]); IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES); ResetBlockReceivedFlags(); gTasks[taskId].data[0]++; } break; case 2: - memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, sizeof(struct MailStruct) * PARTY_SIZE + 4); - if (SendBlock(0, gBlockSendBuffer, sizeof(struct MailStruct) * PARTY_SIZE + 4)) + memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, sizeof(struct Mail) * PARTY_SIZE + 4); + if (SendBlock(0, gBlockSendBuffer, sizeof(struct Mail) * PARTY_SIZE + 4)) gTasks[taskId].data[0]++; break; case 3: if (GetBlockReceivedStatus() == 3) { - memcpy(gTradeMail, gBlockRecvBuffer[GetMultiplayerId() ^ 1], sizeof(struct MailStruct) * PARTY_SIZE); + memcpy(gTradeMail, gBlockRecvBuffer[GetMultiplayerId() ^ 1], sizeof(struct Mail) * PARTY_SIZE); ResetBlockReceivedFlags(); gSelectedTradeMonPositions[TRADE_PLAYER] = monId; gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE; @@ -1495,7 +1520,7 @@ static void Task_ExchangeCards(u8 taskId) { case 0: if (GetMultiplayerId() == 0) - SendBlockRequest(2); + SendBlockRequest(BLOCK_REQ_SIZE_100); gTasks[taskId].data[0]++; break; case 1: @@ -1507,17 +1532,21 @@ static void Task_ExchangeCards(u8 taskId) for (i = 0; i < GetLinkPlayerCount(); i++) { recvBuff = gBlockRecvBuffer[i]; - CopyTrainerCardData(&gTrainerCards[i], recvBuff, gLinkPlayers[i].version); + CopyTrainerCardData(&gTrainerCards[i], (struct TrainerCard *)recvBuff, gLinkPlayers[i].version); } if (GetLinkPlayerCount() == 2) { + // Note: hasAllFrontierSymbols is a re-used field. + // Here it is set by CreateTrainerCardInBuffer. + // If the player has a saved Wonder Card and it is the same Wonder Card + // as their partner then mystery gift stats are enabled. recvBuff = gBlockRecvBuffer[GetMultiplayerId() ^ 1]; - MEventHandleReceivedWonderCard(recvBuff[48]); + MysteryGift_TryEnableStatsByFlagId(((struct TrainerCard *)recvBuff)->hasAllFrontierSymbols); } else { - ResetReceivedWonderCardFlag(); + MysteryGift_DisableStats(); } ResetBlockReceivedFlags(); @@ -1563,8 +1592,8 @@ void StartUnionRoomBattle(u16 battleFlags) static void WarpForWirelessMinigame(u16 linkService, u16 x, u16 y) { VarSet(VAR_CABLE_CLUB_STATE, linkService); - SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); - SetDynamicWarpWithCoords(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); + SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE, x, y); + SetDynamicWarpWithCoords(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE, x, y); WarpIntoMap(); } @@ -1575,7 +1604,7 @@ static void WarpForCableClubActivity(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 l gFieldLinkPlayerCount = GetLinkPlayerCount(); gLocalLinkPlayerId = GetMultiplayerId(); SetCableClubWarp(); - SetWarpDestination(mapGroup, mapNum, -1, x, y); + SetWarpDestination(mapGroup, mapNum, WARP_ID_NONE, x, y); WarpIntoMap(); } @@ -1601,18 +1630,19 @@ static void CB2_TransitionToCableClub(void) static void CreateTrainerCardInBuffer(void *dest, bool32 setWonderCard) { - u16 *argAsU16Ptr = dest; + struct TrainerCard * card = (struct TrainerCard *)dest; + TrainerCard_GenerateCardForLinkPlayer(card); - TrainerCard_GenerateCardForPlayer((struct TrainerCard *)argAsU16Ptr); + // Below field is re-used, to be read by Task_ExchangeCards if (setWonderCard) - argAsU16Ptr[48] = GetWonderCardFlagID(); + card->hasAllFrontierSymbols = GetWonderCardFlagID(); else - argAsU16Ptr[48] = 0; + card->hasAllFrontierSymbols = 0; } static void Task_StartActivity(u8 taskId) { - ResetReceivedWonderCardFlag(); + MysteryGift_DisableStats(); switch (gPlayerCurrActivity) { case ACTIVITY_BATTLE_SINGLE: @@ -1624,7 +1654,7 @@ static void Task_StartActivity(u8 taskId) case ACTIVITY_BERRY_PICK: case ACTIVITY_SPIN_TRADE: case ACTIVITY_RECORD_CORNER: - RecordMixTrainerNames(); + SaveLinkTrainerNames(); break; } @@ -1688,7 +1718,7 @@ static void Task_StartActivity(u8 taskId) else { LinkRfu_StopManagerBeforeEnteringChat(); - SetHostRFUtgtGname(69, 0, 1); + SetHostRfuGameData(ACTIVITY_CHAT | IN_UNION_ROOM, 0, TRUE); } EnterUnionRoomChat(); break; @@ -1714,13 +1744,13 @@ static void Task_StartActivity(u8 taskId) DestroyTask(taskId); gSpecialVar_Result = LINKUP_SUCCESS; if (gPlayerCurrActivity != (ACTIVITY_TRADE | IN_UNION_ROOM)) - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); } static void Task_RunScriptAndFadeToActivity(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 *sendBuff = (u16*)(gBlockSendBuffer); + u16 *sendBuff = (u16 *)(gBlockSendBuffer); switch (data[0]) { @@ -1737,7 +1767,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) sendBuff[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL); gMain.savedCallback = NULL; data[0] = 4; - RecordMixTrainerNames(); + SaveLinkTrainerNames(); ResetBlockReceivedFlags(); break; case ACTIVITY_BERRY_BLENDER: @@ -1746,16 +1776,16 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) case ACTIVITY_CONTEST_CUTE: case ACTIVITY_CONTEST_SMART: case ACTIVITY_CONTEST_TOUGH: - RecordMixTrainerNames(); + SaveLinkTrainerNames(); DestroyTask(taskId); default: - EnableBothScriptContexts(); + ScriptContext_Enable(); data[0] = 1; break; } break; case 1: - if (!ScriptContext1_IsScriptSetUp()) + if (!ScriptContext_IsEnabled()) { FadeScreen(FADE_TO_BLACK, 0); data[0] = 2; @@ -1803,7 +1833,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) } break; case 6: - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); break; case 7: @@ -1814,7 +1844,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) if (gReceivedRemoteLinkPlayers == 0) { DestroyWirelessStatusIndicatorSprite(); - EnableBothScriptContexts(); + ScriptContext_Enable(); DestroyTask(taskId); } break; @@ -1832,13 +1862,14 @@ static void CreateTask_StartActivity(void) gTasks[taskId].data[0] = 0; } -void MEvent_CreateTask_Leader(u32 activity) +// Sending Wonder Card/News +void CreateTask_SendMysteryGift(u32 activity) { u8 taskId; struct WirelessLink_Leader *data; - taskId = CreateTask(Task_MEvent_Leader, 0); - sWirelessLinkMain.leader = data = (void*)(gTasks[taskId].data); + taskId = CreateTask(Task_SendMysteryGift, 0); + sWirelessLinkMain.leader = data = (void *)(gTasks[taskId].data); data->state = 0; data->textState = 0; @@ -1846,7 +1877,7 @@ void MEvent_CreateTask_Leader(u32 activity) gSpecialVar_Result = LINKUP_ONGOING; } -static void Task_MEvent_Leader(u8 taskId) +static void Task_SendMysteryGift(u8 taskId) { struct WirelessLink_Leader *data = sWirelessLinkMain.leader; struct WindowTemplate winTemplate; @@ -1857,29 +1888,29 @@ static void Task_MEvent_Leader(u8 taskId) case 0: gPlayerCurrActivity = data->activity; sPlayerActivityGroupSize = 2; - SetHostRFUtgtGname(data->activity, 0, 0); - SetGnameBufferWonderFlags(FALSE, FALSE); + SetHostRfuGameData(data->activity, 0, FALSE); + SetHostRfuWonderFlags(FALSE, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_LinkLeader(2); data->state = 1; break; case 1: - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); - data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); - ClearUnkStruct_x1CArray(data->field_4, 4); - ClearUnkStruct_x20Array(data->field_0->arr, 5); - LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.playerName); - data->field_0->arr[0].timeoutCounter = 0; - data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - data->field_0->arr[0].useRedText = FALSE; - data->field_0->arr[0].field_1B = 0; - data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYERS * sizeof(struct RfuPlayer)); + data->playerListBackup = AllocZeroed(MAX_RFU_PLAYERS * sizeof(struct RfuPlayer)); + ClearIncomingPlayerList(data->incomingPlayerList, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYERS); + CopyHostRfuGameDataAndUsername(&data->playerList->players[0].rfu.data, data->playerList->players[0].rfu.name); + data->playerList->players[0].timeoutCounter = 0; + data->playerList->players[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->playerList->players[0].useRedText = FALSE; + data->playerList->players[0].newPlayerCountdown = 0; + data->listenTaskId = CreateTask_ListenForCompatiblePartners(data->incomingPlayerList, 0xFF); winTemplate = sWindowTemplate_PlayerList; winTemplate.baseBlock = GetMysteryGiftBaseBlock(); - winTemplate.paletteNum = 0xC; + winTemplate.paletteNum = 12; data->listWindowId = AddWindow(&winTemplate); MG_DrawTextBorder(data->listWindowId); gMultiuseListMenuTemplate = sListMenuTemplate_PossibleGroupMembers; @@ -1892,7 +1923,7 @@ static void Task_MEvent_Leader(u8 taskId) break; case 2: StringCopy(gStringVar1, sLinkGroupActivityNameTexts[gPlayerCurrActivity]); - StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, gPlayerCurrActivity); + GetAwaitingCommunicationText(gStringVar4, gPlayerCurrActivity); data->state = 3; break; case 3: @@ -1908,9 +1939,9 @@ static void Task_MEvent_Leader(u8 taskId) } break; case 6: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_LinkWithFriendDropped)) + if (PrintMysteryGiftMenuMessage(&data->textState, sText_LinkWithFriendDropped)) { - data->playerCount = sub_8013398(data->field_0); + data->playerCount = LeaderPrunePlayerList(data->playerList); RedrawListMenu(data->listTaskId); data->state = 2; } @@ -1919,44 +1950,44 @@ static void Task_MEvent_Leader(u8 taskId) data->state = 7; break; case 7: - switch (mevent_message_print_and_prompt_yes_no(&data->textState, &data->field_14, 0, gStringVar4)) + switch (DoMysteryGiftYesNo(&data->textState, &data->yesNoWindowId, FALSE, gStringVar4)) { case 0: LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - data->field_0->arr[data->playerCount].field_1B = 0; + data->playerList->players[data->playerCount].newPlayerCountdown = 0; RedrawListMenu(data->listTaskId); data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_OK; - SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); data->state = 8; break; case 1: - case -1: + case MENU_B_PRESSED: data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_NO; - SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); data->state = 8; break; } break; case 8: - val = WaitSendRfuStatusToPartner(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + val = WaitSendRfuStatusToPartner(ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId), data->playerList->players[data->playerCount].rfu.name); if (val == 1) // Send complete { if (data->joinRequestAnswer == RFU_STATUS_JOIN_GROUP_OK) { - data->field_0->arr[data->playerCount].field_1B = 0; + data->playerList->players[data->playerCount].newPlayerCountdown = 0; RedrawListMenu(data->listTaskId); data->playerCount++; - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->playerCount - 1]); + CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->playerCount - 1]); StringExpandPlaceholders(gStringVar4, sText_AnOKWasSentToPlayer); data->state = 9; LinkRfu_StopManagerAndFinalizeSlots(); } else { - RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.playerName, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId)); - data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; - sub_8013398(data->field_0); + RequestDisconnectSlotByTrainerNameAndId(data->playerList->players[data->playerCount].rfu.name, ReadAsU16(data->playerList->players[data->playerCount].rfu.data.compatibility.playerTrainerId)); + data->playerList->players[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + LeaderPrunePlayerList(data->playerList); RedrawListMenu(data->listTaskId); data->state = 2; } @@ -1999,13 +2030,13 @@ static void Task_MEvent_Leader(u8 taskId) CopyBgTilemapBufferToVram(0); RemoveWindow(data->listWindowId); DestroyTask(data->listenTaskId); - Free(data->field_8); - Free(data->field_0); - Free(data->field_4); + Free(data->playerListBackup); + Free(data->playerList); + Free(data->incomingPlayerList); data->state++; break; case 14: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_PleaseStartOver)) + if (PrintMysteryGiftMenuMessage(&data->textState, sText_PleaseStartOver)) { DestroyTask(taskId); gSpecialVar_Result = LINKUP_FAILED; @@ -2027,9 +2058,9 @@ static void Task_MEvent_Leader(u8 taskId) CopyBgTilemapBufferToVram(0); RemoveWindow(data->listWindowId); DestroyTask(data->listenTaskId); - Free(data->field_8); - Free(data->field_0); - Free(data->field_4); + Free(data->playerListBackup); + Free(data->playerList); + Free(data->incomingPlayerList); SetLinkStandbyCallback(); data->state++; break; @@ -2040,36 +2071,36 @@ static void Task_MEvent_Leader(u8 taskId) } } -void MEvent_CreateTask_CardOrNewsWithFriend(u32 activity) +void CreateTask_LinkMysteryGiftWithFriend(u32 activity) { u8 taskId; struct WirelessLink_Group *data; taskId = CreateTask(Task_CardOrNewsWithFriend, 0); - sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data); + sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data); sGroup = data; data->state = 0; data->textState = 0; - data->isWonderNews = activity - ACTIVITY_WONDER_CARD2; + data->isWonderNews = activity - ACTIVITY_WONDER_CARD; gSpecialVar_Result = LINKUP_ONGOING; } static void Task_CardOrNewsWithFriend(u8 taskId) { s32 id; - struct WindowTemplate winTemplate1, winTemplate2; + struct WindowTemplate listWinTemplate, playerNameWinTemplate; struct WirelessLink_Group *data = sWirelessLinkMain.group; switch (data->state) { case 0: - SetHostRFUtgtGname(data->isWonderNews + ACTIVITY_WONDER_CARD2, 0, 0); + SetHostRfuGameData(data->isWonderNews + ACTIVITY_WONDER_CARD, 0, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYER_LIST_SIZE * sizeof(struct RfuPlayer)); data->state = 1; break; case 1: @@ -2077,18 +2108,18 @@ static void Task_CardOrNewsWithFriend(u8 taskId) data->state = 2; break; case 2: - ClearUnkStruct_x1CArray(data->field_4, 4); - ClearUnkStruct_x20Array(data->field_0->arr, 16); - data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, data->isWonderNews + LINK_GROUP_WONDER_CARD); + ClearIncomingPlayerList(data->incomingPlayerList, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYER_LIST_SIZE); + data->listenTaskId = CreateTask_ListenForCompatiblePartners(data->incomingPlayerList, data->isWonderNews + LINK_GROUP_WONDER_CARD); - winTemplate1 = gUnknown_082F0174; - winTemplate1.baseBlock = GetMysteryGiftBaseBlock(); - winTemplate1.paletteNum = 0xC; - data->listWindowId = AddWindow(&winTemplate1); + listWinTemplate = sWindowTemplate_GroupList; + listWinTemplate.baseBlock = GetMysteryGiftBaseBlock(); + listWinTemplate.paletteNum = 12; + data->listWindowId = AddWindow(&listWinTemplate); - winTemplate2 = gUnknown_082F017C; - winTemplate2.paletteNum = 0xC; - data->playerNameAndIdWindowId = AddWindow(&winTemplate2); + playerNameWinTemplate = sWindowTemplate_PlayerNameAndId; + playerNameWinTemplate.paletteNum = 12; + data->playerNameAndIdWindowId = AddWindow(&playerNameWinTemplate); MG_DrawTextBorder(data->listWindowId); gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups; @@ -2099,7 +2130,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) FillWindowPixelBuffer(data->playerNameAndIdWindowId, PIXEL_FILL(1)); PutWindowTilemap(data->playerNameAndIdWindowId); PrintPlayerNameAndIdOnWindow(data->playerNameAndIdWindowId); - CopyWindowToVram(data->playerNameAndIdWindowId, 2); + CopyWindowToVram(data->playerNameAndIdWindowId, COPYWIN_GFX); CopyBgTilemapBufferToVram(0); data->leaderId = 0; @@ -2120,16 +2151,16 @@ static void Task_CardOrNewsWithFriend(u8 taskId) { // this unused variable along with the assignment is needed to match u32 unusedVar; - unusedVar = data->field_0->arr[id].gname_uname.gname.activity; + unusedVar = data->playerList->players[id].rfu.data.activity; - if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started) + if (data->playerList->players[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->playerList->players[id].rfu.data.startedActivity) { data->leaderId = id; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]); - CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.playerName, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId)); + CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->leaderId]); + CreateTask_RfuReconnectWithParent(data->playerList->players[data->leaderId].rfu.name, ReadAsU16(data->playerList->players[data->leaderId].rfu.data.compatibility.playerTrainerId)); PlaySE(SE_POKENAV_ON); data->state = 4; } @@ -2147,13 +2178,13 @@ static void Task_CardOrNewsWithFriend(u8 taskId) break; case 4: AddTextPrinterToWindow1(sText_AwaitingPlayersResponse); - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]); + CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->leaderId]); data->state = 5; break; case 5: if (gReceivedRemoteLinkPlayers) { - gPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity; + gPlayerCurrActivity = data->playerList->players[data->leaderId].rfu.data.activity; data->state = 10; } @@ -2178,12 +2209,12 @@ static void Task_CardOrNewsWithFriend(u8 taskId) RemoveWindow(data->playerNameAndIdWindowId); RemoveWindow(data->listWindowId); DestroyTask(data->listenTaskId); - Free(data->field_0); - Free(data->field_4); + Free(data->playerList); + Free(data->incomingPlayerList); data->state++; break; case 9: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sLinkDroppedTexts[RfuGetStatus()])) + if (PrintMysteryGiftMenuMessage(&data->textState, sLinkDroppedTexts[RfuGetStatus()])) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); @@ -2209,18 +2240,18 @@ static void Task_CardOrNewsWithFriend(u8 taskId) } } -void MEvent_CreateTask_CardOrNewsOverWireless(u32 activity) +void CreateTask_LinkMysteryGiftOverWireless(u32 activity) { u8 taskId; struct WirelessLink_Group *data; taskId = CreateTask(Task_CardOrNewsOverWireless, 0); - sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data); + sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data); sGroup = data; data->state = 0; data->textState = 0; - data->isWonderNews = activity - ACTIVITY_WONDER_CARD2; + data->isWonderNews = activity - ACTIVITY_WONDER_CARD; gSpecialVar_Result = LINKUP_ONGOING; } @@ -2233,12 +2264,12 @@ static void Task_CardOrNewsOverWireless(u8 taskId) switch (data->state) { case 0: - SetHostRFUtgtGname(0, 0, 0); + SetHostRfuGameData(ACTIVITY_NONE, 0, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_JoinGroup(); - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); + data->incomingPlayerList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + data->playerList = AllocZeroed(MAX_RFU_PLAYER_LIST_SIZE * sizeof(struct RfuPlayer)); data->state = 1; break; case 1: @@ -2246,13 +2277,13 @@ static void Task_CardOrNewsOverWireless(u8 taskId) data->state = 2; break; case 2: - ClearUnkStruct_x1CArray(data->field_4, 4); - ClearUnkStruct_x20Array(data->field_0->arr, 16); - data->listenTaskId = CreateTask_ListenForPartnersWithSerial7F7D(data->field_4, data->isWonderNews + LINK_GROUP_WONDER_CARD); + ClearIncomingPlayerList(data->incomingPlayerList, RFU_CHILD_MAX); + ClearRfuPlayerList(data->playerList->players, MAX_RFU_PLAYER_LIST_SIZE); + data->listenTaskId = CreateTask_ListenForWonderDistributor(data->incomingPlayerList, data->isWonderNews + LINK_GROUP_WONDER_CARD); - if (data->field_13 != 0) + if (data->showListMenu) { - winTemplate = gUnknown_082F0174; + winTemplate = sWindowTemplate_GroupList; winTemplate.baseBlock = GetMysteryGiftBaseBlock(); data->listWindowId = AddWindow(&winTemplate); @@ -2274,23 +2305,23 @@ static void Task_CardOrNewsOverWireless(u8 taskId) case 1: PlaySE(SE_PC_LOGIN); default: - if (data->field_13 != 0) + if (data->showListMenu) RedrawListMenu(data->listTaskId); break; case 0: - if (data->field_13 != 0) + if (data->showListMenu) id = ListMenu_ProcessInput(data->listTaskId); if (data->refreshTimer > 120) { - if (data->field_0->arr[0].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[0].gname_uname.gname.started) + if (data->playerList->players[0].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->playerList->players[0].rfu.data.startedActivity) { - if (HasWonderCardOrNewsByLinkGroup(&data->field_0->arr[0].gname_uname.gname, data->isWonderNews + LINK_GROUP_WONDER_CARD)) + if (HasWonderCardOrNewsByLinkGroup(&data->playerList->players[0].rfu.data, data->isWonderNews + LINK_GROUP_WONDER_CARD)) { data->leaderId = 0; data->refreshTimer = 0; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - CreateTask_RfuReconnectWithParent(data->field_0->arr[0].gname_uname.playerName, ReadAsU16(data->field_0->arr[0].gname_uname.gname.unk_00.playerTrainerId)); + CreateTask_RfuReconnectWithParent(data->playerList->players[0].rfu.name, ReadAsU16(data->playerList->players[0].rfu.data.compatibility.playerTrainerId)); PlaySE(SE_POKENAV_ON); data->state = 4; } @@ -2312,13 +2343,13 @@ static void Task_CardOrNewsOverWireless(u8 taskId) break; case 4: AddTextPrinterToWindow1(sText_AwaitingResponseFromWirelessSystem); - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]); + CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->leaderId]); data->state = 5; break; case 5: if (gReceivedRemoteLinkPlayers) { - gPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity; + gPlayerCurrActivity = data->playerList->players[data->leaderId].rfu.data.activity; data->state = 12; } @@ -2339,19 +2370,19 @@ static void Task_CardOrNewsOverWireless(u8 taskId) case 8: case 10: case 12: - if (data->field_13 != 0) + if (data->showListMenu) { DestroyListMenuTask(data->listTaskId, 0, 0); CopyBgTilemapBufferToVram(0); RemoveWindow(data->listWindowId); } DestroyTask(data->listenTaskId); - Free(data->field_0); - Free(data->field_4); + Free(data->playerList); + Free(data->incomingPlayerList); data->state++; break; case 9: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_WirelessLinkDropped)) + if (PrintMysteryGiftMenuMessage(&data->textState, sText_WirelessLinkDropped)) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); @@ -2360,7 +2391,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) } break; case 7: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_WirelessSearchCanceled)) + if (PrintMysteryGiftMenuMessage(&data->textState, sText_WirelessSearchCanceled)) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); @@ -2369,7 +2400,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) } break; case 11: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sNoWonderSharedTexts[data->isWonderNews])) + if (PrintMysteryGiftMenuMessage(&data->textState, sNoWonderSharedTexts[data->isWonderNews])) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); @@ -2392,7 +2423,7 @@ void RunUnionRoom(void) { struct WirelessLink_URoom *uroom; - ClearAndInitHostRFUtgtGname(); + ResetHostRfuGameData(); CreateTask(Task_RunUnionRoom, 10); // dumb line needed to match @@ -2405,7 +2436,7 @@ void RunUnionRoom(void) uroom->state = UR_STATE_INIT; uroom->textState = 0; uroom->unknown = 0; - uroom->field_12 = 0; + uroom->unreadPlayerId = 0; gSpecialVar_Result = 0; ListMenuLoadStdPalAt(0xD0, 1); @@ -2435,14 +2466,18 @@ static void ScheduleFieldMessageAndExit(const u8 *src) StringExpandPlaceholders(gStringVar4, src); } -static void sub_80156B0(struct WirelessLink_URoom *uroom) +static void CopyPlayerListToBuffer(struct WirelessLink_URoom *uroom) { - memcpy(&gDecompressionBuffer[0x3F00], uroom->field_0, 0x100); + memcpy(&gDecompressionBuffer[sizeof(gDecompressionBuffer) - (MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer))], + uroom->playerList, + MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer)); } -static void sub_80156C8(struct WirelessLink_URoom *uroom) +static void CopyPlayerListFromBuffer(struct WirelessLink_URoom *uroom) { - memcpy(uroom->field_0, &gDecompressionBuffer[0x3F00], 0x100); + memcpy(uroom->playerList, + &gDecompressionBuffer[sizeof(gDecompressionBuffer) - (MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer))], + MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer)); } static void Task_RunUnionRoom(u8 taskId) @@ -2456,37 +2491,37 @@ static void Task_RunUnionRoom(u8 taskId) switch (uroom->state) { case UR_STATE_INIT: - uroom->field_4 = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C)); - uroom->field_C = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C)); - uroom->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20)); - uroom->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); - ClearUnkStruct_x20Array(uroom->field_0->arr, ARRAY_COUNT(uroom->field_0->arr)); + uroom->incomingChildList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + uroom->incomingParentList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + uroom->playerList = AllocZeroed(MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer)); + uroom->spawnPlayer = AllocZeroed(sizeof(struct RfuPlayer)); + ClearRfuPlayerList(uroom->playerList->players, MAX_UNION_ROOM_LEADERS); gPlayerCurrActivity = IN_UNION_ROOM; - uroom->searchTaskId = CreateTask_SearchForChildOrParent(uroom->field_C, uroom->field_4, LINK_GROUP_UNION_ROOM_RESUME); + uroom->searchTaskId = CreateTask_SearchForChildOrParent(uroom->incomingParentList, uroom->incomingChildList, LINK_GROUP_UNION_ROOM_RESUME); InitUnionRoomPlayerObjects(uroom->objects); SetTilesAroundUnionRoomPlayersPassable(); uroom->state = UR_STATE_INIT_OBJECTS; break; case UR_STATE_INIT_OBJECTS: - CreateGroupMemberSpritesInvisible(uroom->spriteIds, taskData[0]); + CreateUnionRoomPlayerSprites(uroom->spriteIds, taskData[0]); if (++taskData[0] == 8) uroom->state = UR_STATE_INIT_LINK; break; case UR_STATE_INIT_LINK: - SetHostRFUtgtGname(IN_UNION_ROOM, 0, 0); + SetHostRfuGameData(IN_UNION_ROOM, 0, FALSE); SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_EnterUnionRoom(); - ClearUnkStruct_x20Array(&uroom->field_8->arr[0], 1); - ClearUnkStruct_x1CArray(uroom->field_4, 4); - ClearUnkStruct_x1CArray(uroom->field_C, 4); + ClearRfuPlayerList(&uroom->spawnPlayer->players[0], 1); + ClearIncomingPlayerList(uroom->incomingChildList, RFU_CHILD_MAX); + ClearIncomingPlayerList(uroom->incomingParentList, RFU_CHILD_MAX); gSpecialVar_Result = 0; uroom->state = UR_STATE_CHECK_SELECTING_MON; break; case UR_STATE_CHECK_SELECTING_MON: - if ((GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_REGISTER - || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE) + if ((GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_REGISTER + || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE) && sUnionRoomTrade.state != URTRADE_STATE_NONE) { id = GetCursorSelectionMonId(); @@ -2510,7 +2545,7 @@ static void Task_RunUnionRoom(u8 taskId) } break; case URTRADE_STATE_OFFERING: - sub_80156C8(uroom); + CopyPlayerListFromBuffer(uroom); taskData[1] = sUnionRoomTrade.offerPlayerId; if (id >= PARTY_SIZE) { @@ -2557,14 +2592,14 @@ static void Task_RunUnionRoom(u8 taskId) gSpecialVar_Result = 0; } } - else if (ScriptContext2_IsEnabled() != TRUE) + else if (ArePlayerFieldControlsLocked() != TRUE) { if (JOY_NEW(A_BUTTON)) { - if (TryInteractWithUnionRoomMember(uroom->field_0, &taskData[0], &taskData[1], uroom->spriteIds)) + if (TryInteractWithUnionRoomMember(uroom->playerList, &taskData[0], &taskData[1], uroom->spriteIds)) { PlaySE(SE_SELECT); - UR_EnableScriptContext2AndFreezeObjectEvents(); + StartScriptInteraction(); uroom->state = UR_STATE_INTERACT_WITH_PLAYER; break; } @@ -2572,7 +2607,7 @@ static void Task_RunUnionRoom(u8 taskId) { UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); PlaySE(SE_PC_LOGIN); - UR_EnableScriptContext2AndFreezeObjectEvents(); + StartScriptInteraction(); StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); uroom->state = UR_STATE_CHECK_TRADING_BOARD; break; @@ -2581,16 +2616,16 @@ static void Task_RunUnionRoom(u8 taskId) switch (HandlePlayerListUpdate()) { - case 1: + case PLIST_NEW_PLAYER: PlaySE(SE_PC_LOGIN); - case 2: + case PLIST_RECENT_UPDATE: ScheduleUnionRoomPlayerRefresh(uroom); break; - case 4: + case PLIST_CONTACTED: uroom->state = UR_STATE_PLAYER_CONTACTED_YOU; - UR_EnableScriptContext2AndFreezeObjectEvents(); + StartScriptInteraction(); SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0); - UpdateGameData_SetActivity(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnerSpriteGenderParam(uroom), FALSE); + UpdateGameData_SetActivity(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnersInfo(uroom), FALSE); break; } HandleUnionRoomPlayerRefresh(uroom); @@ -2604,17 +2639,17 @@ static void Task_RunUnionRoom(u8 taskId) } break; case UR_STATE_INTERACT_WITH_PLAYER: - UR_RunTextPrinters_CheckPrinter0Active(); - playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + UR_RunTextPrinters(); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); - switch (UnionRoomGetPlayerInteractionResponse(uroom->field_0, taskData[0], taskData[1], playerGender)) + switch (UnionRoomGetPlayerInteractionResponse(uroom->playerList, taskData[0], taskData[1], playerGender)) { case 0: // Player is or was just doing an activity uroom->state = UR_STATE_PRINT_AND_EXIT; break; case 1: // Link communicating - sub_8012188(uroom->field_0->arr[taskData[1]].gname_uname.playerName, &uroom->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity); - uroom->field_12 = id; // Should be just 0, but won't match any other way. + TryConnectToUnionRoomParent(uroom->playerList->players[taskData[1]].rfu.name, &uroom->playerList->players[taskData[1]].rfu.data, gPlayerCurrActivity); + uroom->unreadPlayerId = id; // Should be just 0, but won't match any other way. uroom->state = UR_STATE_TRY_COMMUNICATING; break; case 2: // Ask to join chat @@ -2623,7 +2658,7 @@ static void Task_RunUnionRoom(u8 taskId) } break; case UR_STATE_TRY_COMMUNICATING: - UR_RunTextPrinters_CheckPrinter0Active(); + UR_RunTextPrinters(); switch (RfuGetStatus()) { case RFU_STATUS_NEW_CHILD_DETECTED: @@ -2661,20 +2696,20 @@ static void Task_RunUnionRoom(u8 taskId) if (!gReceivedRemoteLinkPlayers) { HandleCancelActivity(FALSE); - UpdateUnionRoomMemberFacing(taskData[0], taskData[1], uroom->field_0); + UpdateUnionRoomMemberFacing(taskData[0], taskData[1], uroom->playerList); uroom->state = UR_STATE_INIT_LINK; } break; case UR_STATE_DO_SOMETHING_PROMPT: - id = ConvPartnerUnameAndGetWhetherMetAlready(&uroom->field_0->arr[taskData[1]]); - playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + id = ConvPartnerUnameAndGetWhetherMetAlready(&uroom->playerList->players[taskData[1]]); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, sHiDoSomethingTexts[id][playerGender]); break; case UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT: - input = ListMenuHandler_AllItemsAvailable(&uroom->textState, - &uroom->topListMenuWindowId, - &uroom->topListMenuId, - &sWindowTemplate_InviteToActivity, + input = ListMenuHandler_AllItemsAvailable(&uroom->textState, + &uroom->topListMenuWindowId, + &uroom->topListMenuId, + &sWindowTemplate_InviteToActivity, &sListMenuTemplate_InviteToActivity); if (input != -1) { @@ -2685,7 +2720,7 @@ static void Task_RunUnionRoom(u8 taskId) else { uroom->partnerYesNoResponse = 0; - playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); if (input == -2 || input == IN_UNION_ROOM) { uroom->playerSendBuffer[0] = IN_UNION_ROOM; @@ -2696,7 +2731,7 @@ static void Task_RunUnionRoom(u8 taskId) else { gPlayerCurrActivity = input; - sPlayerActivityGroupSize = (u32)(input) >> 8; + sPlayerActivityGroupSize = (u32)input >> 8; // Extract capacity from sInviteToActivityMenuItems if (gPlayerCurrActivity == (ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM) && !HasAtLeastTwoMonsOfLevel30OrLower()) { ScheduleFieldMessageWithFollowupState(UR_STATE_DO_SOMETHING_PROMPT, sText_NeedTwoMonsOfLevel30OrLower1); @@ -2717,7 +2752,7 @@ static void Task_RunUnionRoom(u8 taskId) break; case UR_STATE_SEND_ACTIVITY_REQUEST: PollPartnerYesNoResponse(uroom); - playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); id = GetResponseIdx_InviteToURoomActivity(uroom->playerSendBuffer[0] & 0x3F); if (PrintOnTextbox(&uroom->textState, sText_WaitOrShowCardTexts[playerGender][id])) { @@ -2767,8 +2802,8 @@ static void Task_RunUnionRoom(u8 taskId) break; case UR_STATE_DO_SOMETHING_PROMPT_2: // Identical to UR_STATE_DO_SOMETHING_PROMPT - id = ConvPartnerUnameAndGetWhetherMetAlready(&uroom->field_0->arr[taskData[1]]); - playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + id = ConvPartnerUnameAndGetWhetherMetAlready(&uroom->playerList->players[taskData[1]]); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, sHiDoSomethingTexts[id][playerGender]); break; case UR_STATE_PRINT_CARD_INFO: @@ -2803,14 +2838,14 @@ static void Task_RunUnionRoom(u8 taskId) CopyBgTilemapBufferToVram(0); gPlayerCurrActivity = ACTIVITY_CHAT | IN_UNION_ROOM; UpdateGameData_SetActivity(ACTIVITY_CHAT | IN_UNION_ROOM, 0, TRUE); - sub_8012188(uroom->field_0->arr[taskData[1]].gname_uname.playerName, &uroom->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity); - uroom->field_12 = taskData[1]; + TryConnectToUnionRoomParent(uroom->playerList->players[taskData[1]].rfu.name, &uroom->playerList->players[taskData[1]].rfu.data, gPlayerCurrActivity); + uroom->unreadPlayerId = taskData[1]; uroom->state = UR_STATE_TRY_ACCEPT_CHAT_REQUEST_DELAY; taskData[3] = 0; break; case 1: // NO - case -1: - playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + case MENU_B_PRESSED: + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); ScheduleFieldMessageAndExit(sDeclineChatTexts[playerGender]); break; } @@ -2831,7 +2866,7 @@ static void Task_RunUnionRoom(u8 taskId) break; case RFU_STATUS_FATAL_ERROR: case RFU_STATUS_CONNECTION_ERROR: - playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (IsUnionRoomListenTaskActive() == TRUE) ScheduleFieldMessageAndExit(sChatDeclinedTexts[playerGender]); @@ -2847,7 +2882,7 @@ static void Task_RunUnionRoom(u8 taskId) case UR_STATE_ACCEPT_CHAT_REQUEST: if (RfuHasErrored()) { - playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (IsUnionRoomListenTaskActive() == TRUE) ScheduleFieldMessageAndExit(sChatDeclinedTexts[playerGender]); @@ -2859,7 +2894,7 @@ static void Task_RunUnionRoom(u8 taskId) break; case UR_STATE_PLAYER_CONTACTED_YOU: PlaySE(SE_DING_DONG); - sub_800EF7C(); + StopUnionRoomLinkManager(); uroom->state = UR_STATE_RECV_CONTACT_DATA; uroom->recvActivityRequest[0] = 0; break; @@ -2893,9 +2928,9 @@ static void Task_RunUnionRoom(u8 taskId) break; case UR_STATE_HANDLE_CONTACT_DATA: ReceiveUnionRoomActivityPacket(uroom); - if (UnionRoom_HandleContactFromOtherPlayer(uroom) && JOY_NEW(B_BUTTON)) + if (HandleContactFromOtherPlayer(uroom) && JOY_NEW(B_BUTTON)) { - sub_8011DE0(1); + Rfu_DisconnectPlayerById(1); StringCopy(gStringVar4, sText_ChatEnded); uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; } @@ -2909,11 +2944,11 @@ static void Task_RunUnionRoom(u8 taskId) case 0: // ACCEPT uroom->playerSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM; if (gPlayerCurrActivity == (ACTIVITY_CHAT | IN_UNION_ROOM)) - UpdateGameData_SetActivity(gPlayerCurrActivity | IN_UNION_ROOM, sub_801100C(1), FALSE); + UpdateGameData_SetActivity(gPlayerCurrActivity | IN_UNION_ROOM, GetLinkPlayerInfoFlags(1), FALSE); else - UpdateGameData_SetActivity(gPlayerCurrActivity | IN_UNION_ROOM, sub_801100C(1), TRUE); + UpdateGameData_SetActivity(gPlayerCurrActivity | IN_UNION_ROOM, GetLinkPlayerInfoFlags(1), TRUE); - uroom->field_8->arr[0].field_1B = 0; + uroom->spawnPlayer->players[0].newPlayerCountdown = 0; taskData[3] = 0; if (gPlayerCurrActivity == (ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM)) { @@ -2943,7 +2978,7 @@ static void Task_RunUnionRoom(u8 taskId) } break; case 1: // DECLINE - case -1: + case MENU_B_PRESSED: uroom->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; Rfu_SendPacket(uroom->playerSendBuffer); uroom->state = UR_STATE_DECLINE_ACTIVITY_REQUEST; @@ -2982,16 +3017,16 @@ static void Task_RunUnionRoom(u8 taskId) uroom->state = UR_STATE_START_ACTIVITY_FREE_UROOM; break; case UR_STATE_START_ACTIVITY_FREE_UROOM: - Free(uroom->field_8); - Free(uroom->field_0); - Free(uroom->field_C); - Free(uroom->field_4); + Free(uroom->spawnPlayer); + Free(uroom->playerList); + Free(uroom->incomingParentList); + Free(uroom->incomingChildList); DestroyTask(uroom->searchTaskId); - DestroyGroupMemberSprites(uroom->spriteIds); + DestroyUnionRoomPlayerSprites(uroom->spriteIds); uroom->state = UR_STATE_START_ACTIVITY_FADE; break; case UR_STATE_START_ACTIVITY_FADE: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); uroom->state = UR_STATE_START_ACTIVITY; break; case UR_STATE_START_ACTIVITY: @@ -3004,20 +3039,20 @@ static void Task_RunUnionRoom(u8 taskId) } break; case UR_STATE_INTERACT_WITH_ATTENDANT: - if (GetHostRFUtgtGname()->species == SPECIES_NONE) + if (GetHostRfuGameData()->tradeSpecies == SPECIES_NONE) { uroom->state = UR_STATE_REGISTER_PROMPT; } else { - if (GetHostRFUtgtGname()->species == SPECIES_EGG) + if (GetHostRfuGameData()->tradeSpecies == SPECIES_EGG) { StringCopy(gStringVar4, sText_CancelRegistrationOfEgg); } else { - StringCopy(gStringVar1, gSpeciesNames[GetHostRFUtgtGname()->species]); - ConvertIntToDecimalStringN(gStringVar2, GetHostRFUtgtGname()->level, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(gStringVar1, gSpeciesNames[GetHostRfuGameData()->tradeSpecies]); + ConvertIntToDecimalStringN(gStringVar2, GetHostRfuGameData()->tradeLevel, STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, sText_CancelRegistrationOfMon); } ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_REGISTRATION_PROMPT, gStringVar4); @@ -3028,10 +3063,10 @@ static void Task_RunUnionRoom(u8 taskId) uroom->state = UR_STATE_REGISTER_PROMPT_HANDLE_INPUT; break; case UR_STATE_REGISTER_PROMPT_HANDLE_INPUT: - input = ListMenuHandler_AllItemsAvailable(&uroom->textState, - &uroom->tradeBoardSelectWindowId, - &uroom->tradeBoardDetailsWindowId, - &sWindowTemplate_RegisterForTrade, + input = ListMenuHandler_AllItemsAvailable(&uroom->textState, + &uroom->tradeBoardMainWindowId, + &uroom->tradeBoardHeaderWindowId, + &sWindowTemplate_RegisterForTrade, &sListMenuTemplate_RegisterForTrade); if (input != -1) { @@ -3067,10 +3102,10 @@ static void Task_RunUnionRoom(u8 taskId) } break; case UR_STATE_REGISTER_REQUEST_TYPE: - input = ListMenuHandler_AllItemsAvailable(&uroom->textState, - &uroom->tradeBoardSelectWindowId, - &uroom->tradeBoardDetailsWindowId, - &gUnknown_082F0294, + input = ListMenuHandler_AllItemsAvailable(&uroom->textState, + &uroom->tradeBoardMainWindowId, + &uroom->tradeBoardHeaderWindowId, + &sWindowTemplate_TradingBoardRequestType, &sMenuTemplate_TradingBoardRequestType); if (input != -1) { @@ -3100,7 +3135,7 @@ static void Task_RunUnionRoom(u8 taskId) uroom->state = UR_STATE_CANCEL_REGISTRATION; break; case 1: // NO - case -1: + case MENU_B_PRESSED: HandleCancelActivity(TRUE); uroom->state = UR_STATE_MAIN; break; @@ -3124,7 +3159,13 @@ static void Task_RunUnionRoom(u8 taskId) uroom->state = UR_STATE_TRADING_BOARD_HANDLE_INPUT; break; case UR_STATE_TRADING_BOARD_HANDLE_INPUT: - input = TradeBoardMenuHandler(&uroom->textState, &uroom->tradeBoardSelectWindowId, &uroom->tradeBoardListMenuId, &uroom->tradeBoardDetailsWindowId, &gUnknown_082F034C, &sTradeBoardListMenuTemplate, uroom->field_0); + input = TradeBoardMenuHandler(&uroom->textState, + &uroom->tradeBoardMainWindowId, + &uroom->tradeBoardListMenuId, + &uroom->tradeBoardHeaderWindowId, + &sWindowTemplate_TradingBoardMain, + &sTradeBoardListMenuTemplate, + uroom->playerList); if (input != -1) { switch (input) @@ -3136,21 +3177,21 @@ static void Task_RunUnionRoom(u8 taskId) break; default: UR_ClearBg0(); - switch (IsRequestedTypeOrEggInPlayerParty(uroom->field_0->arr[input].gname_uname.gname.type, uroom->field_0->arr[input].gname_uname.gname.species)) + switch (IsRequestedTypeOrEggInPlayerParty(uroom->playerList->players[input].rfu.data.tradeType, uroom->playerList->players[input].rfu.data.tradeSpecies)) { case UR_TRADE_MATCH: - IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[input]); + CopyAndTranslatePlayerName(gStringVar1, &uroom->playerList->players[input]); ScheduleFieldMessageWithFollowupState(UR_STATE_TRADE_PROMPT, sText_AskTrainerToMakeTrade); taskData[1] = input; break; case UR_TRADE_NOTYPE: - IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[input]); - StringCopy(gStringVar2, gTypeNames[uroom->field_0->arr[input].gname_uname.gname.type]); + CopyAndTranslatePlayerName(gStringVar1, &uroom->playerList->players[input]); + StringCopy(gStringVar2, gTypeNames[uroom->playerList->players[input].rfu.data.tradeType]); ScheduleFieldMessageWithFollowupState(UR_STATE_TRADING_BOARD_LOAD, sText_DontHaveTypeTrainerWants); break; case UR_TRADE_NOEGG: - IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[input]); - StringCopy(gStringVar2, gTypeNames[uroom->field_0->arr[input].gname_uname.gname.type]); + CopyAndTranslatePlayerName(gStringVar1, &uroom->playerList->players[input]); + StringCopy(gStringVar2, gTypeNames[uroom->playerList->players[input].rfu.data.tradeType]); ScheduleFieldMessageWithFollowupState(UR_STATE_TRADING_BOARD_LOAD, sText_DontHaveEggTrainerWants); break; } @@ -3164,8 +3205,8 @@ static void Task_RunUnionRoom(u8 taskId) case 0: // YES uroom->state = UR_STATE_TRADE_SELECT_MON; break; - case -1: // NO - case 1: + case MENU_B_PRESSED: + case 1: // NO HandleCancelActivity(TRUE); uroom->state = UR_STATE_MAIN; break; @@ -3175,19 +3216,19 @@ static void Task_RunUnionRoom(u8 taskId) if (PrintOnTextbox(&uroom->textState, sText_WhichMonWillYouOffer)) { sUnionRoomTrade.state = URTRADE_STATE_OFFERING; - memcpy(&gPartnerTgtGnameSub, &uroom->field_0->arr[taskData[1]].gname_uname.gname.unk_00, sizeof(gPartnerTgtGnameSub)); - gUnionRoomRequestedMonType = uroom->field_0->arr[taskData[1]].gname_uname.gname.type; - gUnionRoomOfferedSpecies = uroom->field_0->arr[taskData[1]].gname_uname.gname.species; + memcpy(&gRfuPartnerCompatibilityData, &uroom->playerList->players[taskData[1]].rfu.data.compatibility, sizeof(gRfuPartnerCompatibilityData)); + gUnionRoomRequestedMonType = uroom->playerList->players[taskData[1]].rfu.data.tradeType; + gUnionRoomOfferedSpecies = uroom->playerList->players[taskData[1]].rfu.data.tradeSpecies; gFieldCallback = FieldCB_ContinueScriptUnionRoom; ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField); - sub_80156B0(uroom); + CopyPlayerListToBuffer(uroom); sUnionRoomTrade.offerPlayerId = taskData[1]; } break; case UR_STATE_TRADE_OFFER_MON: gPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM; - sub_8012188(uroom->field_0->arr[taskData[1]].gname_uname.playerName, &uroom->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity); - IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[taskData[1]]); + TryConnectToUnionRoomParent(uroom->playerList->players[taskData[1]].rfu.name, &uroom->playerList->players[taskData[1]].rfu.data, gPlayerCurrActivity); + CopyAndTranslatePlayerName(gStringVar1, &uroom->playerList->players[taskData[1]]); UR_PrintFieldMessage(sCommunicatingWaitTexts[2]); uroom->state = UR_STATE_TRY_COMMUNICATING; break; @@ -3195,7 +3236,7 @@ static void Task_RunUnionRoom(u8 taskId) if (PrintOnTextbox(&uroom->textState, gStringVar4)) { HandleCancelActivity(TRUE); - UpdateUnionRoomMemberFacing(taskData[0], taskData[1], uroom->field_0); + UpdateUnionRoomMemberFacing(taskData[0], taskData[1], uroom->playerList); uroom->state = UR_STATE_MAIN; } break; @@ -3214,7 +3255,7 @@ void SetUsingUnionRoomStartMenu(void) static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom *data) { - if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == 0x2F00) + if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & RFUCMD_MASK) == RFUCMD_SEND_PACKET) { data->recvActivityRequest[0] = gRecvCmds[1][1]; if (gRecvCmds[1][1] == (ACTIVITY_TRADE | IN_UNION_ROOM)) @@ -3225,7 +3266,7 @@ static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom *data) } } -static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *uroom) +static bool32 HandleContactFromOtherPlayer(struct WirelessLink_URoom *uroom) { if (uroom->recvActivityRequest[0] != 0) { @@ -3263,7 +3304,7 @@ void InitUnionRoom(void) data->state = 0; data->textState = 0; data->unknown = 0; - data->field_12 = 0; + data->unreadPlayerId = 0; sUnionRoomPlayerName[0] = EOS; } @@ -3279,38 +3320,38 @@ static void Task_InitUnionRoom(u8 taskId) data->state = 1; break; case 1: - SetHostRFUtgtGname(ACTIVITY_SEARCH, 0, 0); + SetHostRfuGameData(ACTIVITY_SEARCH, 0, FALSE); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_EnterUnionRoom(); - sub_80111B0(TRUE); + RfuSetIgnoreError(TRUE); data->state = 2; break; case 2: - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - ClearUnkStruct_x1CArray(data->field_4, 4); - data->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - ClearUnkStruct_x1CArray(data->field_C, 4); - data->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20)); - ClearUnkStruct_x20Array(data->field_0->arr, 8); - data->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); - ClearUnkStruct_x20Array(&data->field_8->arr[0], 1); - data->searchTaskId = CreateTask_SearchForChildOrParent(data->field_C, data->field_4, 10); + data->incomingChildList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + ClearIncomingPlayerList(data->incomingChildList, RFU_CHILD_MAX); + data->incomingParentList = AllocZeroed(RFU_CHILD_MAX * sizeof(struct RfuIncomingPlayer)); + ClearIncomingPlayerList(data->incomingParentList, RFU_CHILD_MAX); + data->playerList = AllocZeroed(MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer)); + ClearRfuPlayerList(data->playerList->players, MAX_UNION_ROOM_LEADERS); + data->spawnPlayer = AllocZeroed(sizeof(struct RfuPlayer)); + ClearRfuPlayerList(&data->spawnPlayer->players[0], 1); + data->searchTaskId = CreateTask_SearchForChildOrParent(data->incomingParentList, data->incomingChildList, LINK_GROUP_UNION_ROOM_INIT); data->state = 3; break; case 3: switch (HandlePlayerListUpdate()) { - case 1: - case 2: + case PLIST_NEW_PLAYER: + case PLIST_RECENT_UPDATE: if (sUnionRoomPlayerName[0] == EOS) { - for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) { - if (data->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (data->playerList->players[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - IntlConvPartnerUname7(text, &data->field_0->arr[i]); - if (PlayerHasMetTrainerBefore(ReadAsU16(data->field_0->arr[i].gname_uname.gname.unk_00.playerTrainerId), text)) + CopyAndTranslatePlayerName(text, &data->playerList->players[i]); + if (PlayerHasMetTrainerBefore(ReadAsU16(data->playerList->players[i].rfu.data.compatibility.playerTrainerId), text)) { StringCopy(sUnionRoomPlayerName, text); break; @@ -3319,15 +3360,15 @@ static void Task_InitUnionRoom(u8 taskId) } } break; - case 3: + case PLIST_UNUSED: break; } break; case 4: - free(data->field_8); - free(data->field_0); - free(data->field_C); - free(data->field_4); + free(data->spawnPlayer); + free(data->playerList); + free(data->incomingParentList); + free(data->incomingChildList); DestroyTask(data->searchTaskId); free(sWirelessLinkMain.uRoom); LinkRfu_Shutdown(); @@ -3355,160 +3396,150 @@ static u8 HandlePlayerListUpdate(void) s32 i; u8 j; struct WirelessLink_URoom *data = sWirelessLinkMain.uRoom; - s32 r7 = 0; + s32 retVal = PLIST_NONE; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (AreGnameUnameDifferent(&data->field_C->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy) == TRUE) + if (ArePlayersDifferent(&data->incomingParentList->players[i].rfu, &sUnionRoomPlayer_DummyRfu) == TRUE) { - data->field_8->arr[0].gname_uname = data->field_C->arr[i].gname_uname; - data->field_8->arr[0].timeoutCounter = 0; - data->field_8->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - data->field_8->arr[0].field_1B = 1; - return 4; + data->spawnPlayer->players[0].rfu = data->incomingParentList->players[i].rfu; + data->spawnPlayer->players[0].timeoutCounter = 0; + data->spawnPlayer->players[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->spawnPlayer->players[0].newPlayerCountdown = 1; + return PLIST_CONTACTED; } } - for (j = 0; j < ARRAY_COUNT(data->field_0->arr); j++) + for (j = 0; j < MAX_UNION_ROOM_LEADERS; j++) { - if (data->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_NONE) + if (data->playerList->players[j].groupScheduledAnim != UNION_ROOM_SPAWN_NONE) { - i = Findx20Inx1CArray(&data->field_0->arr[j], &data->field_4->arr[0]); + i = GetNewIncomingPlayerId(&data->playerList->players[j], &data->incomingChildList->players[0]); if (i != 0xFF) { - if (data->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (data->playerList->players[j].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (AreUnionRoomPlayerGnamesDifferent(&data->field_0->arr[j].gname_uname, &data->field_4->arr[i].gname_uname)) + if (ArePlayerDataDifferent(&data->playerList->players[j].rfu, &data->incomingChildList->players[i].rfu)) { - data->field_0->arr[j].gname_uname = data->field_4->arr[i].gname_uname; - data->field_0->arr[j].field_1B = 64; - r7 = 1; + data->playerList->players[j].rfu = data->incomingChildList->players[i].rfu; + data->playerList->players[j].newPlayerCountdown = 64; + retVal = PLIST_NEW_PLAYER; } - else if (data->field_0->arr[j].field_1B != 0) + else if (data->playerList->players[j].newPlayerCountdown != 0) { - data->field_0->arr[j].field_1B--; - if (data->field_0->arr[j].field_1B == 0) - r7 = 2; + data->playerList->players[j].newPlayerCountdown--; + if (data->playerList->players[j].newPlayerCountdown == 0) + retVal = PLIST_RECENT_UPDATE; } } else { - data->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - data->field_0->arr[j].field_1B = 0; - r7 = 2; + data->playerList->players[j].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->playerList->players[j].newPlayerCountdown = 0; + retVal = PLIST_RECENT_UPDATE; } - data->field_0->arr[j].timeoutCounter = 0; + data->playerList->players[j].timeoutCounter = 0; } - else if (data->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) + else if (data->playerList->players[j].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) { - data->field_0->arr[j].timeoutCounter++; - if (data->field_0->arr[j].timeoutCounter >= 600) + data->playerList->players[j].timeoutCounter++; + if (data->playerList->players[j].timeoutCounter >= 600) { - data->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; - r7 = 2; + data->playerList->players[j].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; + retVal = PLIST_RECENT_UPDATE; } } - else if (data->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) + else if (data->playerList->players[j].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) { - data->field_0->arr[j].timeoutCounter++; - if (data->field_0->arr[j].timeoutCounter >= 900) - { - ClearUnkStruct_x20Array(&data->field_0->arr[j], 1); - } + data->playerList->players[j].timeoutCounter++; + if (data->playerList->players[j].timeoutCounter >= 900) + ClearRfuPlayerList(&data->playerList->players[j], 1); } } } for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (Appendx1Ctox20(&data->field_0->arr[0], &data->field_4->arr[i], MAX_UNION_ROOM_PLAYERS) != 0xFF) - r7 = 1; - } + if (TryAddIncomingPlayerToList(&data->playerList->players[0], &data->incomingChildList->players[i], MAX_UNION_ROOM_LEADERS) != 0xFF) + retVal = PLIST_NEW_PLAYER; - return r7; + return retVal; } static void Task_SearchForChildOrParent(u8 taskId) { s32 i, j; - struct WirelessGnameUnamePair gname_uname; - struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + struct RfuPlayerData rfu; + struct RfuIncomingPlayerList **list = (void *) gTasks[taskId].data; bool8 isParent; for (i = 0; i < RFU_CHILD_MAX; i++) { - isParent = LinkRfu_GetNameIfCompatible(&gname_uname.gname, gname_uname.playerName, i); - if (!IsPartnerActivityAcceptable(gname_uname.gname.activity, gTasks[taskId].data[4])) - { - gname_uname = sWirelessGnameUnamePair_Dummy; - } - if (gname_uname.gname.unk_00.language == LANGUAGE_JAPANESE) - { - gname_uname = sWirelessGnameUnamePair_Dummy; - } + isParent = Rfu_GetCompatiblePlayerData(&rfu.data, rfu.name, i); + + if (!IsPartnerActivityAcceptable(rfu.data.activity, gTasks[taskId].data[4])) + rfu = sUnionRoomPlayer_DummyRfu; + if (rfu.data.compatibility.language == LANGUAGE_JAPANESE) + rfu = sUnionRoomPlayer_DummyRfu; + if (!isParent) { for (j = 0; j < i; j++) { - if (!AreGnameUnameDifferent(&ptr[1]->arr[j].gname_uname, &gname_uname)) - { - gname_uname = sWirelessGnameUnamePair_Dummy; - } + if (!ArePlayersDifferent(&list[1]->players[j].rfu, &rfu)) + rfu = sUnionRoomPlayer_DummyRfu; } - ptr[1]->arr[i].gname_uname = gname_uname; - ptr[1]->arr[i].active = AreGnameUnameDifferent(&ptr[1]->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy); + list[1]->players[i].rfu = rfu; + list[1]->players[i].active = ArePlayersDifferent(&list[1]->players[i].rfu, &sUnionRoomPlayer_DummyRfu); } else { - ptr[0]->arr[i].gname_uname = gname_uname; - ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy); + list[0]->players[i].rfu = rfu; + list[0]->players[i].active = ArePlayersDifferent(&list[0]->players[i].rfu, &sUnionRoomPlayer_DummyRfu); } } } -static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 * main4_parent, struct UnkStruct_Main4 * main4_child, u32 linkGroup) +static u8 CreateTask_SearchForChildOrParent(struct RfuIncomingPlayerList * parentList, struct RfuIncomingPlayerList * childList, u32 linkGroup) { u8 taskId = CreateTask(Task_SearchForChildOrParent, 0); - struct UnkStruct_Main4 ** data = (void *)gTasks[taskId].data; - data[0] = main4_parent; - data[1] = main4_child; + struct RfuIncomingPlayerList ** data = (void *)gTasks[taskId].data; + data[0] = parentList; + data[1] = childList; gTasks[taskId].data[4] = linkGroup; return taskId; } -static void Task_ListenForPartnersWithCompatibleSerialNos(u8 taskId) +static void Task_ListenForCompatiblePartners(u8 taskId) { s32 i, j; - struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + struct RfuIncomingPlayerList **list = (void *) gTasks[taskId].data; for (i = 0; i < RFU_CHILD_MAX; i++) { - LinkRfu_GetNameIfCompatible(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.playerName, i); - if (!IsPartnerActivityAcceptable(ptr[0]->arr[i].gname_uname.gname.activity, gTasks[taskId].data[2])) + Rfu_GetCompatiblePlayerData(&list[0]->players[i].rfu.data, list[0]->players[i].rfu.name, i); + if (!IsPartnerActivityAcceptable(list[0]->players[i].rfu.data.activity, gTasks[taskId].data[2])) { - ptr[0]->arr[i].gname_uname = sWirelessGnameUnamePair_Dummy; + list[0]->players[i].rfu = sUnionRoomPlayer_DummyRfu; } for (j = 0; j < i; j++) { - if (!AreGnameUnameDifferent(&ptr[0]->arr[j].gname_uname, &ptr[0]->arr[i].gname_uname)) - { - ptr[0]->arr[i].gname_uname = sWirelessGnameUnamePair_Dummy; - } + if (!ArePlayersDifferent(&list[0]->players[j].rfu, &list[0]->players[i].rfu)) + list[0]->players[i].rfu = sUnionRoomPlayer_DummyRfu; } - ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy); + list[0]->players[i].active = ArePlayersDifferent(&list[0]->players[i].rfu, &sUnionRoomPlayer_DummyRfu); } } -static bool32 HasWonderCardOrNewsByLinkGroup(struct GFtgtGname *gname, s16 linkGroup) +static bool32 HasWonderCardOrNewsByLinkGroup(struct RfuGameData *data, s16 linkGroup) { if (linkGroup == LINK_GROUP_WONDER_CARD) { - if (!gname->unk_00.hasCard) + if (!data->compatibility.hasCard) return FALSE; else return TRUE; } else if (linkGroup == LINK_GROUP_WONDER_NEWS) { - if (!gname->unk_00.hasNews) + if (!data->compatibility.hasNews) return FALSE; else return TRUE; @@ -3519,35 +3550,34 @@ static bool32 HasWonderCardOrNewsByLinkGroup(struct GFtgtGname *gname, s16 linkG } } -static void Task_ListenForPartnersWithSerial7F7D(u8 taskId) +static void Task_ListenForWonderDistributor(u8 taskId) { s32 i; - struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + struct RfuIncomingPlayerList **list = (void *) gTasks[taskId].data; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (LinkRfu_GetNameIfSerial7F7D(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.playerName, i)) - { - HasWonderCardOrNewsByLinkGroup(&ptr[0]->arr[i].gname_uname.gname, gTasks[taskId].data[2]); - } - ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy); + if (Rfu_GetWonderDistributorPlayerData(&list[0]->players[i].rfu.data, list[0]->players[i].rfu.name, i)) + HasWonderCardOrNewsByLinkGroup(&list[0]->players[i].rfu.data, gTasks[taskId].data[2]); + + list[0]->players[i].active = ArePlayersDifferent(&list[0]->players[i].rfu, &sUnionRoomPlayer_DummyRfu); } } -static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 * main4, u32 linkGroup) +static u8 CreateTask_ListenForCompatiblePartners(struct RfuIncomingPlayerList * list, u32 linkGroup) { - u8 taskId = CreateTask(Task_ListenForPartnersWithCompatibleSerialNos, 0); - struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; - ptr[0] = main4; + u8 taskId = CreateTask(Task_ListenForCompatiblePartners, 0); + struct RfuIncomingPlayerList **oldList = (void *) gTasks[taskId].data; + oldList[0] = list; gTasks[taskId].data[2] = linkGroup; return taskId; } -static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 * main4, u32 linkGroup) +static u8 CreateTask_ListenForWonderDistributor(struct RfuIncomingPlayerList * list, u32 linkGroup) { - u8 taskId = CreateTask(Task_ListenForPartnersWithSerial7F7D, 0); - struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; - ptr[0] = main4; + u8 taskId = CreateTask(Task_ListenForWonderDistributor, 0); + struct RfuIncomingPlayerList **oldList = (void *) gTasks[taskId].data; + oldList[0] = list; gTasks[taskId].data[2] = linkGroup; return taskId; } @@ -3555,13 +3585,13 @@ static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 * ma static bool32 UR_PrintFieldMessage(const u8 *src) { LoadMessageBoxAndBorderGfx(); - DrawDialogueFrame(0, 1); + DrawDialogueFrame(0, TRUE); StringExpandPlaceholders(gStringVar4, src); AddTextPrinterWithCustomSpeedForMessage(FALSE, 1); return FALSE; } -static bool32 UR_RunTextPrinters_CheckPrinter0Active(void) +static bool32 UR_RunTextPrinters(void) { if (!RunTextPrintersAndIsPrinter0Active()) return TRUE; @@ -3575,7 +3605,7 @@ static bool8 PrintOnTextbox(u8 *textState, const u8 *str) { case 0: LoadMessageBoxAndBorderGfx(); - DrawDialogueFrame(0, 1); + DrawDialogueFrame(0, TRUE); StringExpandPlaceholders(gStringVar4, str); AddTextPrinterForMessage_2(TRUE); (*textState)++; @@ -3599,28 +3629,26 @@ static s8 UnionRoomHandleYesNo(u8 *state, bool32 noDraw) { case 0: if (noDraw) - { return -3; - } DisplayYesNoMenuDefaultYes(); (*state)++; break; case 1: if (noDraw) { - sub_8198C78(); + EraseYesNoWindow(); *state = 0; return -3; } input = Menu_ProcessInputNoWrapClearOnChoose(); - if (input == -1 || input == 0 || input == 1) + if (input == MENU_B_PRESSED || input == 0 || input == 1) { *state = 0; return input; } break; } - return -2; + return MENU_NOTHING_CHOSEN; } static u8 CreateTradeBoardWindow(const struct WindowTemplate * template) @@ -3628,8 +3656,8 @@ static u8 CreateTradeBoardWindow(const struct WindowTemplate * template) u8 windowId = AddWindow(template); DrawStdWindowFrame(windowId, FALSE); FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - UR_AddTextPrinterParameterized(windowId, 1, sText_NameWantedOfferLv, 8, 1, 6); - CopyWindowToVram(windowId, 2); + PrintUnionRoomText(windowId, FONT_NORMAL, sText_NameWantedOfferLv, 8, 1, UR_COLOR_TRADE_BOARD_OTHER); + CopyWindowToVram(windowId, COPYWIN_GFX); PutWindowTilemap(windowId); return windowId; } @@ -3650,19 +3678,17 @@ static s32 ListMenuHandler_AllItemsAvailable(u8 *state, u8 *windowId, u8 *listMe winTemplateCopy = *winTemplate; maxWidth = Intl_GetListMenuWidth(menuTemplate); if (winTemplateCopy.width > maxWidth) - { winTemplateCopy.width = maxWidth; - } + if (winTemplateCopy.tilemapLeft + winTemplateCopy.width > 29) - { winTemplateCopy.tilemapLeft = max(29 - winTemplateCopy.width, 0); - } + *windowId = AddWindow(&winTemplateCopy); DrawStdWindowFrame(*windowId, FALSE); gMultiuseListMenuTemplate = *menuTemplate; gMultiuseListMenuTemplate.windowId = *windowId; *listMenuId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); - CopyWindowToVram(*windowId, TRUE); + CopyWindowToVram(*windowId, COPYWIN_MAP); (*state)++; break; case 1: @@ -3689,7 +3715,10 @@ static s32 ListMenuHandler_AllItemsAvailable(u8 *state, u8 *windowId, u8 *listMe return -1; } -static s32 TradeBoardMenuHandler(u8 *state, u8 *windowId, u8 *listMenuId, u8 *tradeBoardWindowId, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *traders) +static s32 TradeBoardMenuHandler(u8 *state, u8 *mainWindowId, u8 *listMenuId, u8 *headerWindowId, + const struct WindowTemplate *winTemplate, + const struct ListMenuTemplate *menuTemplate, + struct RfuPlayerList *list) { s32 input; s32 idx; @@ -3697,16 +3726,16 @@ static s32 TradeBoardMenuHandler(u8 *state, u8 *windowId, u8 *listMenuId, u8 *tr switch (*state) { case 0: - *tradeBoardWindowId = CreateTradeBoardWindow(&sWindowTemplate_TradingBoard); - *windowId = AddWindow(winTemplate); - DrawStdWindowFrame(*windowId, FALSE); + *headerWindowId = CreateTradeBoardWindow(&sWindowTemplate_TradingBoardHeader); + *mainWindowId = AddWindow(winTemplate); + DrawStdWindowFrame(*mainWindowId, FALSE); gMultiuseListMenuTemplate = *menuTemplate; - gMultiuseListMenuTemplate.windowId = *windowId; + gMultiuseListMenuTemplate.windowId = *mainWindowId; *listMenuId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1); (*state)++; break; case 1: - CopyWindowToVram(*windowId, TRUE); + CopyWindowToVram(*mainWindowId, COPYWIN_MAP); (*state)++; break; case 2: @@ -3716,19 +3745,19 @@ static s32 TradeBoardMenuHandler(u8 *state, u8 *windowId, u8 *listMenuId, u8 *tr if (input == 8 || JOY_NEW(B_BUTTON)) { DestroyListMenuTask(*listMenuId, NULL, NULL); - RemoveWindow(*windowId); - DeleteTradeBoardWindow(*tradeBoardWindowId); + RemoveWindow(*mainWindowId); + DeleteTradeBoardWindow(*headerWindowId); *state = 0; return -2; } else { - idx = GetIndexOfNthTradeBoardOffer(traders->arr, input); + idx = GetIndexOfNthTradeBoardOffer(list->players, input); if (idx >= 0) { DestroyListMenuTask(*listMenuId, NULL, NULL); - RemoveWindow(*windowId); - DeleteTradeBoardWindow(*tradeBoardWindowId); + RemoveWindow(*mainWindowId); + DeleteTradeBoardWindow(*headerWindowId); *state = 0; return idx; } @@ -3752,10 +3781,10 @@ static void UR_ClearBg0(void) static void JoinGroup_EnableScriptContexts(void) { - EnableBothScriptContexts(); + ScriptContext_Enable(); } -static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx) +static void PrintUnionRoomText(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx) { struct TextPrinterTemplate printerTemplate; @@ -3771,49 +3800,49 @@ static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str gTextFlags.useAlternateDownArrow = FALSE; switch (colorIdx) { - case UR_COLOR_DKE_WHT_LTE: + case UR_COLOR_DEFAULT: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_DARK_GRAY; printerTemplate.bgColor = TEXT_COLOR_WHITE; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GRAY; break; - case UR_COLOR_RED_WHT_LTR: + case UR_COLOR_RED: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_RED; printerTemplate.bgColor = TEXT_COLOR_WHITE; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_RED; break; - case UR_COLOR_GRN_WHT_LTG: + case UR_COLOR_GREEN: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_GREEN; printerTemplate.bgColor = TEXT_COLOR_WHITE; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREEN; break; - case UR_COLOR_WHT_WHT_LTE: + case UR_COLOR_WHITE: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_WHITE; printerTemplate.bgColor = TEXT_COLOR_WHITE; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GRAY; break; - case UR_COLOR_WHT_DKE_LTE: + case UR_COLOR_CANCEL: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_WHITE; printerTemplate.bgColor = TEXT_COLOR_DARK_GRAY; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GRAY; break; - case UR_COLOR_GRN_DN6_LTB: + case UR_COLOR_TRADE_BOARD_SELF: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_COLOR_LIGHT_GREEN; printerTemplate.bgColor = TEXT_DYNAMIC_COLOR_6; printerTemplate.shadowColor = TEXT_COLOR_LIGHT_BLUE; break; - case UR_COLOR_DN5_DN6_LTB: + case UR_COLOR_TRADE_BOARD_OTHER: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; printerTemplate.fgColor = TEXT_DYNAMIC_COLOR_5; @@ -3822,124 +3851,111 @@ static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str break; } - AddTextPrinter(&printerTemplate, 0xFF, NULL); + AddTextPrinter(&printerTemplate, TEXT_SKIP_DRAW, NULL); } -static void ClearUnkStruct_x20Array(struct UnkStruct_x20 *arr, u8 count) +static void ClearRfuPlayerList(struct RfuPlayer *players, u8 count) { s32 i; for (i = 0; i < count; i++) { - arr[i].gname_uname = sWirelessGnameUnamePair_Dummy; - arr[i].timeoutCounter = 255; - arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; - arr[i].useRedText = FALSE; - arr[i].field_1B = 0; + players[i].rfu = sUnionRoomPlayer_DummyRfu; + players[i].timeoutCounter = 255; + players[i].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + players[i].useRedText = FALSE; + players[i].newPlayerCountdown = 0; } } -static void ClearUnkStruct_x1CArray(struct UnkStruct_Main4 *main4, u8 count) +static void ClearIncomingPlayerList(struct RfuIncomingPlayerList *list, u8 count) { s32 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - main4->arr[i].gname_uname = sWirelessGnameUnamePair_Dummy; - main4->arr[i].active = FALSE; + list->players[i].rfu = sUnionRoomPlayer_DummyRfu; + list->players[i].active = FALSE; } } -static bool8 AreGnameUnameDifferent(struct WirelessGnameUnamePair* pair1, const struct WirelessGnameUnamePair* pair2) +// Checks player name and trainer id, returns TRUE if they are not the same +static bool8 ArePlayersDifferent(struct RfuPlayerData* player1, const struct RfuPlayerData* player2) { s32 i; for (i = 0; i < 2; i++) { - if (pair1->gname.unk_00.playerTrainerId[i] != pair2->gname.unk_00.playerTrainerId[i]) - { + if (player1->data.compatibility.playerTrainerId[i] != player2->data.compatibility.playerTrainerId[i]) return TRUE; - } } for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { - if (pair1->playerName[i] != pair2->playerName[i]) - { + if (player1->name[i] != player2->name[i]) return TRUE; - } } return FALSE; } -static bool32 AreUnionRoomPlayerGnamesDifferent(struct WirelessGnameUnamePair *pair1, struct WirelessGnameUnamePair *pair2) +static bool32 ArePlayerDataDifferent(struct RfuPlayerData *player1, struct RfuPlayerData *player2) { s32 i; - if (pair1->gname.activity != pair2->gname.activity) - { + if (player1->data.activity != player2->data.activity) return TRUE; - } - if (pair1->gname.started != pair2->gname.started) - { + if (player1->data.startedActivity != player2->data.startedActivity) return TRUE; - } for (i = 0; i < RFU_CHILD_MAX; i++) { - if (pair1->gname.child_sprite_gender[i] != pair2->gname.child_sprite_gender[i]) - { + if (player1->data.partnerInfo[i] != player2->data.partnerInfo[i]) return TRUE; - } } - if (pair1->gname.species != pair2->gname.species) - { + if (player1->data.tradeSpecies != player2->data.tradeSpecies) return TRUE; - } - if (pair1->gname.type != pair2->gname.type) - { + if (player1->data.tradeType != player2->data.tradeType) return TRUE; - } return FALSE; } -static u32 Findx20Inx1CArray(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1) +static u32 GetNewIncomingPlayerId(struct RfuPlayer *player, struct RfuIncomingPlayer *incomingPlayer) { - u8 result = 0xFF; + u8 result = 0xFF; // None s32 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (arg1[i].active && !AreGnameUnameDifferent(&arg0->gname_uname, &arg1[i].gname_uname)) + if (incomingPlayer[i].active && !ArePlayersDifferent(&player->rfu, &incomingPlayer[i].rfu)) { result = i; - arg1[i].active = FALSE; + incomingPlayer[i].active = FALSE; } } return result; } -static u8 Appendx1Ctox20(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 max) +static u8 TryAddIncomingPlayerToList(struct RfuPlayer *players, struct RfuIncomingPlayer *incomingPlayer, u8 max) { s32 i; - if (arg1->active) + if (incomingPlayer->active) { for (i = 0; i < max; i++) { - if (arg0[i].groupScheduledAnim == UNION_ROOM_SPAWN_NONE) + if (players[i].groupScheduledAnim == UNION_ROOM_SPAWN_NONE) { - arg0[i].gname_uname = arg1->gname_uname; - arg0[i].timeoutCounter = 0; - arg0[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - arg0[i].field_1B = 64; - arg1->active = FALSE; + players[i].rfu = incomingPlayer->rfu; + players[i].timeoutCounter = 0; + players[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + players[i].newPlayerCountdown = 64; + incomingPlayer->active = FALSE; return i; } } @@ -3948,39 +3964,39 @@ static u8 Appendx1Ctox20(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, return 0xFF; } -static void PrintUnionRoomGroupOnWindow(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 *group, u8 colorIdx, u8 id) +static void PrintGroupMemberOnWindow(u8 windowId, u8 x, u8 y, struct RfuPlayer *player, u8 colorIdx, u8 id) { u8 activity; u8 trainerId[6]; ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar4, sText_Colon); - UR_AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, 0); + PrintUnionRoomText(windowId, FONT_NORMAL, gStringVar4, x, y, UR_COLOR_DEFAULT); x += 18; - activity = group->gname_uname.gname.activity; - if (group->groupScheduledAnim == UNION_ROOM_SPAWN_IN && !(activity & IN_UNION_ROOM)) + activity = player->rfu.data.activity; + if (player->groupScheduledAnim == UNION_ROOM_SPAWN_IN && !(activity & IN_UNION_ROOM)) { - IntlConvPartnerUname7(gStringVar4, group); - UR_AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, colorIdx); - ConvertIntToDecimalStringN(trainerId, group->gname_uname.gname.unk_00.playerTrainerId[0] | (group->gname_uname.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + CopyAndTranslatePlayerName(gStringVar4, player); + PrintUnionRoomText(windowId, FONT_NORMAL, gStringVar4, x, y, colorIdx); + ConvertIntToDecimalStringN(trainerId, player->rfu.data.compatibility.playerTrainerId[0] | (player->rfu.data.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, sText_ID); StringAppend(gStringVar4, trainerId); - UR_AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x88), y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, gStringVar4, GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x88), y, colorIdx); } } -static void PrintGroupMemberCandidateOnWindowWithColor(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 *group, u8 colorIdx, u8 id) +static void PrintGroupCandidateOnWindow(u8 windowId, u8 x, u8 y, struct RfuPlayer *player, u8 colorIdx, u8 id) { u8 trainerId[6]; - if (group->groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (player->groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - IntlConvPartnerUname7(gStringVar4, group); - UR_AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, colorIdx); - ConvertIntToDecimalStringN(trainerId, group->gname_uname.gname.unk_00.playerTrainerId[0] | (group->gname_uname.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + CopyAndTranslatePlayerName(gStringVar4, player); + PrintUnionRoomText(windowId, FONT_NORMAL, gStringVar4, x, y, colorIdx); + ConvertIntToDecimalStringN(trainerId, player->rfu.data.compatibility.playerTrainerId[0] | (player->rfu.data.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, sText_ID); StringAppend(gStringVar4, trainerId); - UR_AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x68), y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, gStringVar4, GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x68), y, colorIdx); } } @@ -3989,10 +4005,10 @@ static bool32 IsPlayerFacingTradingBoard(void) s16 x, y; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - if (x != 2 + 7) + if (x != 2 + MAP_OFFSET) return FALSE; - if (y != 1 + 7) + if (y != 1 + MAP_OFFSET) return FALSE; if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING) @@ -4017,24 +4033,24 @@ static u32 GetResponseIdx_InviteToURoomActivity(s32 activity) } } -static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 *arg0) +static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct RfuPlayer *player) { u8 name[30]; - IntlConvPartnerUname7(name, arg0); - return PlayerHasMetTrainerBefore(ReadAsU16(arg0->gname_uname.gname.unk_00.playerTrainerId), name); + CopyAndTranslatePlayerName(name, player); + return PlayerHasMetTrainerBefore(ReadAsU16(player->rfu.data.compatibility.playerTrainerId), name); } -static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 *main0, bool8 overrideGender, u8 playerIdx, u32 playerGender) +static s32 UnionRoomGetPlayerInteractionResponse(struct RfuPlayerList *list, bool8 overrideGender, u8 playerIdx, u32 playerGender) { bool32 metBefore; - struct UnkStruct_x20 * r5 = &main0->arr[playerIdx]; + struct RfuPlayer * player = &list->players[playerIdx]; - if (!r5->gname_uname.gname.started && !overrideGender) + if (!player->rfu.data.startedActivity && !overrideGender) { - IntlConvPartnerUname7(gStringVar1, r5); - metBefore = PlayerHasMetTrainerBefore(ReadAsU16(r5->gname_uname.gname.unk_00.playerTrainerId), gStringVar1); - if (r5->gname_uname.gname.activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + CopyAndTranslatePlayerName(gStringVar1, player); + metBefore = PlayerHasMetTrainerBefore(ReadAsU16(player->rfu.data.compatibility.playerTrainerId), gStringVar1); + if (player->rfu.data.activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { StringExpandPlaceholders(gStringVar4, sJoinChatTexts[metBefore][playerGender]); return 2; @@ -4047,12 +4063,12 @@ static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 *main0, } else { - IntlConvPartnerUname7(gStringVar1, r5); + CopyAndTranslatePlayerName(gStringVar1, player); if (overrideGender) { - playerGender = (r5->gname_uname.gname.unk_00.playerTrainerId[overrideGender + 1] >> 3) & 1; + playerGender = (player->rfu.data.compatibility.playerTrainerId[overrideGender + 1] >> 3) & 1; } - switch (r5->gname_uname.gname.activity & 0x3F) + switch (player->rfu.data.activity & 0x3F) { case ACTIVITY_BATTLE_SINGLE: StringExpandPlaceholders(gStringVar4, sBattleReactionTexts[playerGender][Random() % ARRAY_COUNT(sBattleReactionTexts[0])]); @@ -4074,88 +4090,82 @@ static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 *main0, } } -void nullsub_14(u8 windowId, u32 itemId, u8 y) +void ItemPrintFunc_EmptyList(u8 windowId, u32 itemId, u8 y) { } -static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx) +static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct RfuGameData * data, const u8 *playerName, u8 colorIdx) { u8 levelStr[4]; - u16 species = gname->species; - u8 type = gname->type; - u8 level = gname->level; + u16 species = data->tradeSpecies; + u8 type = data->tradeType; + u8 level = data->tradeLevel; - UR_AddTextPrinterParameterized(windowId, 1, uname, 8, y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, playerName, 8, y, colorIdx); if (species == SPECIES_EGG) { - UR_AddTextPrinterParameterized(windowId, 1, sText_EggTrade, 68, y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, sText_EggTrade, 68, y, colorIdx); } else { BlitMenuInfoIcon(windowId, type + 1, 68, y); - UR_AddTextPrinterParameterized(windowId, 1, gSpeciesNames[species], 118, y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, gSpeciesNames[species], 118, y, colorIdx); ConvertIntToDecimalStringN(levelStr, level, STR_CONV_MODE_RIGHT_ALIGN, 3); - UR_AddTextPrinterParameterized(windowId, 1, levelStr, 198, y, colorIdx); + PrintUnionRoomText(windowId, FONT_NORMAL, levelStr, 198, y, colorIdx); } } static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y) { - struct WirelessLink_Leader *data = sWirelessLinkMain.leader; - struct GFtgtGname *rfu; + struct WirelessLink_Leader *leader = sWirelessLinkMain.leader; + struct RfuGameData *gameData; s32 i, j; u8 playerName[11]; - if (itemId == -3 && y == sTradeBoardListMenuTemplate.upText_Y) + if (itemId == LIST_HEADER && y == sTradeBoardListMenuTemplate.upText_Y) { - rfu = GetHostRFUtgtGname(); - if (rfu->species != SPECIES_NONE) - { - TradeBoardPrintItemInfo(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5); - } + gameData = GetHostRfuGameData(); + if (gameData->tradeSpecies != SPECIES_NONE) + TradeBoardPrintItemInfo(windowId, y, gameData, gSaveBlock2Ptr->playerName, UR_COLOR_TRADE_BOARD_SELF); } else { j = 0; - for (i = 0; i < (int)ARRAY_COUNT(data->field_0->arr); i++) + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) { - if (data->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && data->field_0->arr[i].gname_uname.gname.species != SPECIES_NONE) - { + if (leader->playerList->players[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && leader->playerList->players[i].rfu.data.tradeSpecies != SPECIES_NONE) j++; - } + if (j == itemId + 1) { - IntlConvPartnerUname7(playerName, &data->field_0->arr[i]); - TradeBoardPrintItemInfo(windowId, y, &data->field_0->arr[i].gname_uname.gname, playerName, 6); + CopyAndTranslatePlayerName(playerName, &leader->playerList->players[i]); + TradeBoardPrintItemInfo(windowId, y, &leader->playerList->players[i].rfu.data, playerName, UR_COLOR_TRADE_BOARD_OTHER); break; } } } } -static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * arg, s32 n) +static s32 GetIndexOfNthTradeBoardOffer(struct RfuPlayer * players, s32 n) { s32 i; s32 j = 0; - for (i = 0; i < 8; i++) + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) { - if (arg[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && arg[i].gname_uname.gname.species != SPECIES_NONE) - { + if (players[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && players[i].rfu.data.tradeSpecies != SPECIES_NONE) j++; - } + if (j == n + 1) - { return i; - } } return -1; } -static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct UnkStruct_Main0 *main0) +static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct RfuPlayerList *list) { - return main0->arr[playerIdx].gname_uname.gname.playerGender; + return list->players[playerIdx].rfu.data.playerGender; } static s32 IsRequestedTypeOrEggInPlayerParty(u32 type, u32 species) @@ -4168,9 +4178,7 @@ static s32 IsRequestedTypeOrEggInPlayerParty(u32 type, u32 species) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); if (species == SPECIES_EGG) - { return UR_TRADE_MATCH; - } } return UR_TRADE_NOEGG; } @@ -4180,9 +4188,7 @@ static s32 IsRequestedTypeOrEggInPlayerParty(u32 type, u32 species) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type) - { return UR_TRADE_MATCH; - } } return UR_TRADE_NOTYPE; } @@ -4247,7 +4253,7 @@ static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activityD StringCopy(uroom->activityRequestStrbufs[1], gSpeciesNames[sUnionRoomTrade.playerSpecies]); for (i = 0; i < RFU_CHILD_MAX; i++) { - if (gRfuLinkStatus->partner[i].serialNo == 2) + if (gRfuLinkStatus->partner[i].serialNo == RFU_SERIAL_GAME) { ConvertIntToDecimalStringN(uroom->activityRequestStrbufs[2], activityData[2], STR_CONV_MODE_LEFT_ALIGN, 3); StringCopy(uroom->activityRequestStrbufs[3], gSpeciesNames[activityData[1]]); @@ -4262,9 +4268,7 @@ static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activityD else { for (i = 0; i < RFU_CHILD_MAX; i++) - { DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, uroom->activityRequestStrbufs[i]); - } DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, sText_OfferToTradeMon); } result = 1; @@ -4302,9 +4306,9 @@ static bool32 PollPartnerYesNoResponse(struct WirelessLink_URoom *data) bool32 InUnionRoom(void) { - return gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(UNION_ROOM) - && gSaveBlock1Ptr->location.mapNum == MAP_NUM(UNION_ROOM) - ? TRUE : FALSE; + return gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(UNION_ROOM) + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(UNION_ROOM) + ? TRUE : FALSE; } static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) @@ -4314,11 +4318,9 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) for (i = 0; i < gPlayerPartyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= 30 - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) - { + if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= UNION_ROOM_MAX_LEVEL + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) count++; - } } if (count > 1) @@ -4327,16 +4329,16 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) return FALSE; } -static void ResetUnionRoomTrade(struct UnionRoomTrade *uroomTrade) +static void ResetUnionRoomTrade(struct UnionRoomTrade *trade) { - uroomTrade->state = URTRADE_STATE_NONE; - uroomTrade->type = 0; - uroomTrade->playerPersonality = 0; - uroomTrade->playerSpecies = 0; - uroomTrade->playerLevel = 0; - uroomTrade->species = 0; - uroomTrade->level = 0; - uroomTrade->personality = 0; + trade->state = URTRADE_STATE_NONE; + trade->type = 0; + trade->playerPersonality = 0; + trade->playerSpecies = SPECIES_NONE; + trade->playerLevel = 0; + trade->species = SPECIES_NONE; + trade->level = 0; + trade->personality = 0; } void Script_ResetUnionRoomTrade(void) @@ -4371,31 +4373,26 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 mult u16 cur_species; s32 i; - // player if (multiplayerId == 0) { species = trade->playerSpecies; personality = trade->playerPersonality; } - // partner else { species = trade->species; personality = trade->personality; } + // Find party position by comparing to personality and species for (i = 0; i < gPlayerPartyCount; i++) { cur_personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); if (cur_personality != personality) - { continue; - } cur_species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); if (cur_species != species) - { continue; - } response = i; break; } @@ -4406,7 +4403,7 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 mult static void HandleCancelActivity(bool32 setData) { UR_ClearBg0(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); UnionRoom_UnlockPlayerAndChatPartner(); gPlayerCurrActivity = ACTIVITY_NONE; if (setData) @@ -4416,23 +4413,23 @@ static void HandleCancelActivity(bool32 setData) } } -static void UR_EnableScriptContext2AndFreezeObjectEvents(void) +static void StartScriptInteraction(void) { - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjects_WaitForPlayer(); } -static u8 GetActivePartnerSpriteGenderParam(struct WirelessLink_URoom *data) +static u8 GetActivePartnersInfo(struct WirelessLink_URoom *data) { - u8 retVal = 0x80; + u8 retVal = PINFO_ACTIVE_FLAG; u8 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (data->field_C->arr[i].active) + if (data->incomingParentList->players[i].active) { - retVal |= data->field_C->arr[i].gname_uname.gname.playerGender << 3; - retVal |= data->field_C->arr[i].gname_uname.gname.unk_00.playerTrainerId[0] & 7; + retVal |= data->incomingParentList->players[i].rfu.data.playerGender << PINFO_GENDER_SHIFT; + retVal |= data->incomingParentList->players[i].rfu.data.compatibility.playerTrainerId[0] & PINFO_TID_MASK; break; } } @@ -4469,17 +4466,13 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct WirelessLink_URoom *d n = trainerCard->linkBattleWins; if (n > 9999) - { n = 9999; - } ConvertIntToDecimalStringN(data->trainerCardStrBuffer[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, data->trainerCardStrBuffer[0]); n = trainerCard->linkBattleLosses; if (n > 9999) - { n = 9999; - } ConvertIntToDecimalStringN(data->trainerCardStrBuffer[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, data->trainerCardStrBuffer[1]); @@ -4507,8 +4500,8 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct WirelessLink_URoom *d } } -static void IntlConvPartnerUname7(u8 *dest, struct UnkStruct_x20 *arg1) +static void CopyAndTranslatePlayerName(u8 *dest, struct RfuPlayer *player) { - StringCopy7(dest, arg1->gname_uname.playerName); - ConvertInternationalString(dest, arg1->gname_uname.gname.unk_00.language); + StringCopy_PlayerName(dest, player->rfu.name); + ConvertInternationalString(dest, player->rfu.data.compatibility.language); } diff --git a/src/union_room_battle.c b/src/union_room_battle.c index 2d1274f6ee..38866c940d 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -73,15 +73,15 @@ static void CB2_SetUpPartiesAndStartBattle(void) SetMainCallback2(CB2_InitBattle); } -static void AddTextPrinterForUnionRoomBattle(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed) +static void AddTextPrinterForUnionRoomBattle(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed) { s32 letterSpacing = 0; s32 lineSpacing = 1; FillWindowPixelBuffer(windowId, (sTextColors[0] << 4) | sTextColors[0]); - AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, sTextColors, speed, str); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, letterSpacing, lineSpacing, sTextColors, speed, str); } -static bool32 PrintUnionRoomBattleMessage(s16 * state, const u8 * str, s32 speed) +static bool32 PrintUnionRoomBattleMessage(s16 * state, const u8 *str, s32 speed) { switch (*state) { @@ -89,7 +89,7 @@ static bool32 PrintUnionRoomBattleMessage(s16 * state, const u8 * str, s32 speed DrawTextBorderOuter(0, 0x001, 0xD); AddTextPrinterForUnionRoomBattle(0, str, 0, 1, speed); PutWindowTilemap(0); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); (*state)++; break; case 1: @@ -132,7 +132,7 @@ void CB2_UnionRoomBattle(void) FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF); LoadUserWindowBorderGfx(0, 1, 0xD0); LoadUserWindowBorderGfx_(0, 1, 0xD0); - sub_819789C(); + Menu_LoadStdPal(); SetVBlankCallback(VBlankCB_UnionRoomBattle); gMain.state++; break; @@ -166,7 +166,7 @@ void CB2_UnionRoomBattle(void) case 4: if (GetBlockReceivedStatus() == 3) { - if (gBlockRecvBuffer[0][0] == (ACTIVITY_ACCEPT | IN_UNION_ROOM) + if (gBlockRecvBuffer[0][0] == (ACTIVITY_ACCEPT | IN_UNION_ROOM) && gBlockRecvBuffer[1][0] == (ACTIVITY_ACCEPT | IN_UNION_ROOM)) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 3167563ade..f8513b9f46 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -105,6 +105,17 @@ enum { CHAT_EXIT_DISBANDED, }; +enum { + GFXTAG_KEYBOARD_CURSOR, + GFXTAG_TEXT_ENTRY_ARROW, + GFXTAG_TEXT_ENTRY_CURSOR, + GFXTAG_RBUTTON_ICON, + GFXTAG_RBUTTON_LABELS, +}; + +// Shared by all above +#define PALTAG_INTERFACE 0 + struct UnionRoomChat { u32 filler1; @@ -123,7 +134,7 @@ struct UnionRoomChat u8 lastBufferCursorPos; u8 bufferCursorPos; u8 receivedPlayerIndex; - u8 exitType; + u8 exitType; // CHAT_EXIT_* bool8 changedRegisteredTexts; u8 afterSaveTimer; u8 messageEntryBuffer[2 * MAX_MESSAGE_LENGTH + 1]; @@ -238,7 +249,7 @@ static void SetBgTilemapBuffers(void); static void ClearBg0(void); static void LoadChatWindowBorderGfx(void); static void LoadChatWindowGfx(void); -static void sub_8020680(void); +static void LoadChatUnkPalette(void); static void LoadChatMessagesWindow(void); static void LoadKeyboardWindow(void); static void LoadKeyboardSwapWindow(void); @@ -249,9 +260,9 @@ static void CreateRButtonSprites(void); static void ShowKeyboardSwapMenu(void); static void HideKeyboardSwapMenu(void); static void SetKeyboardCursorInvisibility(bool32); -static bool32 sub_8020320(void); +static bool32 SlideKeyboardPageOut(void); static void PrintCurrentKeyboardPage(void); -static bool32 sub_8020368(void); +static bool32 SlideKeyboardPageIn(void); static void MoveKeyboardCursor(void); static void UpdateRButtonLabel(void); static void AddStdMessageWindow(int, u16); @@ -266,8 +277,8 @@ static void SetRegisteredTextPalette(bool32); static void PrintChatMessage(u16, u8 *, u8); static void StartKeyboardCursorAnim(void); static bool32 TryKeyboardCursorReopen(void); -static void sub_80207C0(s16); -static void sub_8020818(s16); +static void UpdateSlidingKeyboard(s16); +static void FinishSlidingKeyboard(s16); static bool32 Display_Dummy(u8 *); static bool32 Display_LoadGfx(u8 *state); static bool32 Display_ShowKeyboardSwapMenu(u8 *state); @@ -310,11 +321,11 @@ static void (*const sChatMainFunctions[])(void) = { [CHAT_FUNC_SAVE_AND_EXIT] = Chat_SaveAndExit }; -static const u8 sKeyboardPageMaxRow[UNION_ROOM_KB_PAGE_COUNT] = +static const u8 sKeyboardPageMaxRow[UNION_ROOM_KB_PAGE_COUNT] = { - [UNION_ROOM_KB_PAGE_UPPER] = 9, - [UNION_ROOM_KB_PAGE_LOWER] = 9, - [UNION_ROOM_KB_PAGE_EMOJI] = 9, + [UNION_ROOM_KB_PAGE_UPPER] = 9, + [UNION_ROOM_KB_PAGE_LOWER] = 9, + [UNION_ROOM_KB_PAGE_EMOJI] = 9, [UNION_ROOM_KB_PAGE_REGISTER] = 9 }; @@ -447,10 +458,10 @@ static const u8 sCaseToggleTable[256] = { [CHAR_LEFT_PAREN] = CHAR_LEFT_PAREN, [CHAR_RIGHT_PAREN] = CHAR_RIGHT_PAREN, [CHAR_AMPERSAND] = CHAR_AMPERSAND, - [CHAR_DBL_QUOT_LEFT] = CHAR_DBL_QUOT_LEFT, - [CHAR_DBL_QUOT_RIGHT] = CHAR_DBL_QUOT_RIGHT, - [CHAR_SGL_QUOT_LEFT] = CHAR_SGL_QUOT_LEFT, - [CHAR_SGL_QUOT_RIGHT] = CHAR_SGL_QUOT_RIGHT, + [CHAR_DBL_QUOTE_LEFT] = CHAR_DBL_QUOTE_LEFT, + [CHAR_DBL_QUOTE_RIGHT] = CHAR_DBL_QUOTE_RIGHT, + [CHAR_SGL_QUOTE_LEFT] = CHAR_SGL_QUOTE_LEFT, + [CHAR_SGL_QUOTE_RIGHT] = CHAR_SGL_QUOTE_RIGHT, [CHAR_MASCULINE_ORDINAL] = CHAR_MASCULINE_ORDINAL, [CHAR_FEMININE_ORDINAL] = CHAR_FEMININE_ORDINAL, [CHAR_BULLET] = CHAR_BULLET, @@ -466,45 +477,45 @@ static const u8 sCaseToggleTable[256] = { }; // Excludes UNION_ROOM_KB_PAGE_REGISTER, the text for which is chosen by the player -static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT - 1][UNION_ROOM_KB_ROW_COUNT] = +static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT - 1][UNION_ROOM_KB_ROW_COUNT] = { - [UNION_ROOM_KB_PAGE_UPPER] = + [UNION_ROOM_KB_PAGE_UPPER] = { - gText_UnionRoomChatKeyboard_ABCDE, - gText_UnionRoomChatKeyboard_FGHIJ, - gText_UnionRoomChatKeyboard_KLMNO, - gText_UnionRoomChatKeyboard_PQRST, - gText_UnionRoomChatKeyboard_UVWXY, - gText_UnionRoomChatKeyboard_Z, - gText_UnionRoomChatKeyboard_01234Upper, - gText_UnionRoomChatKeyboard_56789Upper, - gText_UnionRoomChatKeyboard_PunctuationUpper, + gText_UnionRoomChatKeyboard_ABCDE, + gText_UnionRoomChatKeyboard_FGHIJ, + gText_UnionRoomChatKeyboard_KLMNO, + gText_UnionRoomChatKeyboard_PQRST, + gText_UnionRoomChatKeyboard_UVWXY, + gText_UnionRoomChatKeyboard_Z, + gText_UnionRoomChatKeyboard_01234Upper, + gText_UnionRoomChatKeyboard_56789Upper, + gText_UnionRoomChatKeyboard_PunctuationUpper, gText_UnionRoomChatKeyboard_SymbolsUpper }, - [UNION_ROOM_KB_PAGE_LOWER] = + [UNION_ROOM_KB_PAGE_LOWER] = { - gText_UnionRoomChatKeyboard_abcde, - gText_UnionRoomChatKeyboard_fghij, - gText_UnionRoomChatKeyboard_klmno, - gText_UnionRoomChatKeyboard_pqrst, - gText_UnionRoomChatKeyboard_uvwxy, - gText_UnionRoomChatKeyboard_z, - gText_UnionRoomChatKeyboard_01234Lower, - gText_UnionRoomChatKeyboard_56789Lower, - gText_UnionRoomChatKeyboard_PunctuationLower, + gText_UnionRoomChatKeyboard_abcde, + gText_UnionRoomChatKeyboard_fghij, + gText_UnionRoomChatKeyboard_klmno, + gText_UnionRoomChatKeyboard_pqrst, + gText_UnionRoomChatKeyboard_uvwxy, + gText_UnionRoomChatKeyboard_z, + gText_UnionRoomChatKeyboard_01234Lower, + gText_UnionRoomChatKeyboard_56789Lower, + gText_UnionRoomChatKeyboard_PunctuationLower, gText_UnionRoomChatKeyboard_SymbolsLower }, - [UNION_ROOM_KB_PAGE_EMOJI] = + [UNION_ROOM_KB_PAGE_EMOJI] = { - gText_UnionRoomChatKeyboard_Emoji1, - gText_UnionRoomChatKeyboard_Emoji2, - gText_UnionRoomChatKeyboard_Emoji3, - gText_UnionRoomChatKeyboard_Emoji4, - gText_UnionRoomChatKeyboard_Emoji5, - gText_UnionRoomChatKeyboard_Emoji6, - gText_UnionRoomChatKeyboard_Emoji7, - gText_UnionRoomChatKeyboard_Emoji8, - gText_UnionRoomChatKeyboard_Emoji9, + gText_UnionRoomChatKeyboard_Emoji1, + gText_UnionRoomChatKeyboard_Emoji2, + gText_UnionRoomChatKeyboard_Emoji3, + gText_UnionRoomChatKeyboard_Emoji4, + gText_UnionRoomChatKeyboard_Emoji5, + gText_UnionRoomChatKeyboard_Emoji6, + gText_UnionRoomChatKeyboard_Emoji7, + gText_UnionRoomChatKeyboard_Emoji8, + gText_UnionRoomChatKeyboard_Emoji9, gText_UnionRoomChatKeyboard_Emoji10 } }; @@ -550,36 +561,36 @@ static const struct BgTemplate sBgTemplates[] = { static const struct WindowTemplate sWinTemplates[] = { { - .bg = 0x03, - .tilemapLeft = 0x08, - .tilemapTop = 0x01, - .width = 0x15, - .height = 0x13, - .paletteNum = 0x0f, + .bg = 3, + .tilemapLeft = 8, + .tilemapTop = 1, + .width = 21, + .height = 19, + .paletteNum = 15, .baseBlock = 0x0001, }, { - .bg = 0x01, - .tilemapLeft = 0x09, - .tilemapTop = 0x12, - .width = 0x0f, - .height = 0x02, - .paletteNum = 0x0c, + .bg = 1, + .tilemapLeft = 9, + .tilemapTop = 18, + .width = 15, + .height = 2, + .paletteNum = 12, .baseBlock = 0x007a, }, { - .bg = 0x01, - .tilemapLeft = 0x00, - .tilemapTop = 0x02, - .width = 0x06, - .height = 0x0f, - .paletteNum = 0x07, + .bg = 1, + .tilemapLeft = 0, + .tilemapTop = 2, + .width = 6, + .height = 15, + .paletteNum = 7, .baseBlock = 0x0020, }, { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x02, - .width = 0x07, - .height = 0x09, - .paletteNum = 0x0e, + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 2, + .width = 7, + .height = 9, + .paletteNum = 14, .baseBlock = 0x0013, }, DUMMY_WIN_TEMPLATE }; @@ -610,113 +621,113 @@ static const struct SubtaskInfo sDisplaySubtasks[] = { static const struct MessageWindowInfo sDisplayStdMessages[] = { [STDMESSAGE_QUIT_CHATTING] = { - .text = gText_QuitChatting, - .boxType = 1, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = FALSE, + .text = gText_QuitChatting, + .boxType = 1, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = FALSE, .useWiderBox = FALSE }, [STDMESSAGE_REGISTER_WHERE] = { - .text = gText_RegisterTextWhere, - .boxType = 1, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = FALSE, + .text = gText_RegisterTextWhere, + .boxType = 1, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = FALSE, .useWiderBox = FALSE }, [STDMESSAGE_REGISTER_HERE] = { - .text = gText_RegisterTextHere, - .boxType = 1, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = FALSE, + .text = gText_RegisterTextHere, + .boxType = 1, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = FALSE, .useWiderBox = FALSE }, [STDMESSAGE_INPUT_TEXT] = { - .text = gText_InputText, - .boxType = 1, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = FALSE, + .text = gText_InputText, + .boxType = 1, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = FALSE, .useWiderBox = FALSE }, [STDMESSAGE_EXITING_CHAT] = { - .text = gText_ExitingChat, - .boxType = 2, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = FALSE, + .text = gText_ExitingChat, + .boxType = 2, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = FALSE, .useWiderBox = FALSE }, [STDMESSAGE_LEADER_LEFT] = { - .text = gText_LeaderLeftEndingChat, - .boxType = 2, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = TRUE, + .text = gText_LeaderLeftEndingChat, + .boxType = 2, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = TRUE, .useWiderBox = FALSE }, [STDMESSAGE_ASK_SAVE] = { - .text = gText_RegisteredTextChangedOKToSave, - .boxType = 2, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = FALSE, + .text = gText_RegisteredTextChangedOKToSave, + .boxType = 2, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = FALSE, .useWiderBox = TRUE }, [STDMESSAGE_ASK_OVERWRITE] = { - .text = gText_AlreadySavedFile_Chat, - .boxType = 2, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = FALSE, + .text = gText_AlreadySavedFile_Chat, + .boxType = 2, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = FALSE, .useWiderBox = TRUE }, [STDMESSAGE_SAVING_NO_OFF] = { - .text = gText_SavingDontTurnOff_Chat, - .boxType = 2, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = FALSE, + .text = gText_SavingDontTurnOff_Chat, + .boxType = 2, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = FALSE, .useWiderBox = TRUE }, [STDMESSAGE_SAVED_THE_GAME] = { - .text = gText_PlayerSavedGame_Chat, - .boxType = 2, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = TRUE, + .text = gText_PlayerSavedGame_Chat, + .boxType = 2, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = TRUE, .useWiderBox = TRUE }, [STDMESSAGE_WARN_LEADER_LEAVE] = { - .text = gText_IfLeaderLeavesChatEnds, - .boxType = 2, - .x = 0, - .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, - .hasPlaceholders = FALSE, + .text = gText_IfLeaderLeavesChatEnds, + .boxType = 2, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .hasPlaceholders = FALSE, .useWiderBox = TRUE } }; @@ -783,8 +794,8 @@ static const union AnimCmd *const sAnims_KeyboardCursor[] = { }; static const struct SpriteTemplate sSpriteTemplate_KeyboardCursor = { - .tileTag = 0x0000, - .paletteTag = 0x0000, + .tileTag = GFXTAG_KEYBOARD_CURSOR, + .paletteTag = PALTAG_INTERFACE, .oam = &sOam_KeyboardCursor, .anims = sAnims_KeyboardCursor, .images = NULL, @@ -799,8 +810,8 @@ static const struct OamData sOam_TextEntrySprite = { }; static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = { - .tileTag = 0x0002, - .paletteTag = 0x0000, + .tileTag = GFXTAG_TEXT_ENTRY_CURSOR, + .paletteTag = PALTAG_INTERFACE, .oam = &sOam_TextEntrySprite, .anims = gDummySpriteAnimTable, .images = NULL, @@ -809,8 +820,8 @@ static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = { }; static const struct SpriteTemplate sSpriteTemplate_TextEntryArrow = { - .tileTag = 0x0001, - .paletteTag = 0x0000, + .tileTag = GFXTAG_TEXT_ENTRY_ARROW, + .paletteTag = PALTAG_INTERFACE, .oam = &sOam_TextEntrySprite, .anims = gDummySpriteAnimTable, .images = NULL, @@ -858,8 +869,8 @@ static const union AnimCmd *const sAnims_RButtonLabels[] = { }; static const struct SpriteTemplate sSpriteTemplate_RButtonIcon = { - .tileTag = 0x0003, - .paletteTag = 0x0000, + .tileTag = GFXTAG_RBUTTON_ICON, + .paletteTag = PALTAG_INTERFACE, .oam = &sOam_RButtonIcon, .anims = gDummySpriteAnimTable, .images = NULL, @@ -868,8 +879,8 @@ static const struct SpriteTemplate sSpriteTemplate_RButtonIcon = { }; static const struct SpriteTemplate sSpriteTemplate_RButtonLabels = { - .tileTag = 0x0004, - .paletteTag = 0x0000, + .tileTag = GFXTAG_RBUTTON_LABELS, + .paletteTag = PALTAG_INTERFACE, .oam = &sOam_RButtonLabel, .anims = sAnims_RButtonLabels, .images = NULL, @@ -879,7 +890,7 @@ static const struct SpriteTemplate sSpriteTemplate_RButtonLabels = { void EnterUnionRoomChat(void) { - sChat = Alloc(sizeof(struct UnionRoomChat)); + sChat = Alloc(sizeof(*sChat)); InitUnionRoomChat(sChat); gKeyRepeatStartDelay = 20; SetVBlankCallback(NULL); @@ -890,7 +901,7 @@ static void InitUnionRoomChat(struct UnionRoomChat *chat) { int i; - chat->funcId = 0; + chat->funcId = CHAT_FUNC_JOIN; chat->funcState = 0; chat->currentPage = 0; chat->currentCol = 0; @@ -901,7 +912,7 @@ static void InitUnionRoomChat(struct UnionRoomChat *chat) chat->messageEntryBuffer[0] = EOS; chat->linkPlayerCount = GetLinkPlayerCount(); chat->multiplayerId = GetMultiplayerId(); - chat->exitType = 0; + chat->exitType = CHAT_EXIT_NONE; chat->changedRegisteredTexts = FALSE; PrepareSendBuffer_Null(chat->sendMessageBuffer); for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) @@ -969,6 +980,8 @@ static void CB2_UnionRoomChatMain(void) static void Task_HandlePlayerInput(u8 taskId) { + // If exitType is not CHAT_EXIT_NONE, begin exit function. + // Otherwise just call main function below. switch (sChat->exitType) { case CHAT_EXIT_ONLY_LEADER: @@ -997,7 +1010,7 @@ static void Chat_Join(void) sChat->funcState++; // fall through case 1: - if (IsLinkTaskFinished() && !sub_8011A9C()) + if (IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive()) { if (SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer))) sChat->funcState++; @@ -1056,7 +1069,7 @@ static void Chat_HandleInput(void) } else { - SetChatFunction(5); + SetChatFunction(CHAT_FUNC_REGISTER); } } else if (HandleDPadInput()) @@ -1198,7 +1211,7 @@ static void Chat_AskQuitChatting(void) sChat->funcState = 3; break; case 0: - sub_80104B0(); + Rfu_StopPartnerSearch(); PrepareSendBuffer_Disband(sChat->sendMessageBuffer); sChat->funcState = 4; sChat->tryQuitAgainTimer = 0; @@ -1206,7 +1219,7 @@ static void Chat_AskQuitChatting(void) } break; case 4: - if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer))) + if (IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer))) { if (!sChat->multiplayerId) sChat->funcState = 6; @@ -1257,15 +1270,15 @@ static void Chat_Exit(void) } break; case 3: - if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer))) + if (IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer))) sChat->funcState++; break; case 4: - if ((GetBlockReceivedStatus() & 1) && !sub_8011A9C()) + if ((GetBlockReceivedStatus() & 1) && !Rfu_IsPlayerExchangeActive()) sChat->funcState++; break; case 5: - if (IsLinkTaskFinished() && !sub_8011A9C()) + if (IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive()) { SetCloseLinkCallback(); sChat->exitDelayTimer = 0; @@ -1300,7 +1313,7 @@ static void Chat_Drop(void) } break; case 1: - if (!IsDisplaySubtaskActive(0) && IsLinkTaskFinished() && !sub_8011A9C()) + if (!IsDisplaySubtaskActive(0) && IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive()) { SetCloseLinkCallback(); sChat->exitDelayTimer = 0; @@ -1346,7 +1359,7 @@ static void Chat_Disbanded(void) } break; case 2: - if (IsDisplaySubtaskActive(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C()) + if (IsDisplaySubtaskActive(0) != TRUE && IsLinkTaskFinished() && !Rfu_IsPlayerExchangeActive()) { SetCloseLinkCallback(); sChat->exitDelayTimer = 0; @@ -1384,7 +1397,7 @@ static void Chat_SendMessage(void) sChat->funcState++; // fall through case 1: - if (IsLinkTaskFinished() == TRUE && !sub_8011A9C() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer))) + if (IsLinkTaskFinished() == TRUE && !Rfu_IsPlayerExchangeActive() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer))) sChat->funcState++; break; case 2: @@ -1629,7 +1642,7 @@ static bool32 HandleDPadInput(void) return FALSE; } while (0); - return TRUE; + return TRUE; } static void AppendTextToMessage(void) @@ -1642,7 +1655,7 @@ static void AppendTextToMessage(void) if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER) { - // Going to append a single character + // Going to append a single character charsStr = sUnionRoomKeyboardText[sChat->currentPage][sChat->currentRow]; for (i = 0; i < sChat->currentCol; i++) { @@ -1819,7 +1832,7 @@ static void PrepareSendBuffer_Leave(u8 *buffer) buffer[0] = CHAT_MESSAGE_LEAVE; StringCopy(&buffer[1], gSaveBlock2Ptr->playerName); buffer[1 + (PLAYER_NAME_LENGTH + 1)] = sChat->multiplayerId; - sub_8011A50(); + RfuSetNormalDisconnectMode(); } static void PrepareSendBuffer_Drop(u8 *buffer) @@ -1970,10 +1983,10 @@ static int GetShouldShowCaseToggleIcon(void) { u8 *str = GetLastCharOfMessagePtr(); u32 character = *str; - if (character > 0xFF || sCaseToggleTable[character] == character || sCaseToggleTable[character] == 0) - return 3; + if (character > EOS || sCaseToggleTable[character] == character || sCaseToggleTable[character] == CHAR_SPACE) + return 3; // Don't show else - return 0; + return 0; // Show } static u8 *GetChatHostName(void) @@ -2028,7 +2041,7 @@ static void Task_ReceiveChatMessage(u8 taskId) } tBlockReceivedStatus = GetBlockReceivedStatus(); - if (!tBlockReceivedStatus && sub_8011A9C()) + if (!tBlockReceivedStatus && Rfu_IsPlayerExchangeActive()) return; tI = 0; @@ -2050,7 +2063,7 @@ static void Task_ReceiveChatMessage(u8 taskId) switch (buffer[0]) { default: - case CHAT_MESSAGE_CHAT: tNextState = 3; break; + case CHAT_MESSAGE_CHAT: tNextState = 3; break; case CHAT_MESSAGE_JOIN: tNextState = 3; break; case CHAT_MESSAGE_LEAVE: tNextState = 4; break; case CHAT_MESSAGE_DROP: tNextState = 5; break; @@ -2079,32 +2092,31 @@ static void Task_ReceiveChatMessage(u8 taskId) { if (GetLinkPlayerCount() == 2) { - sub_80104B0(); - sChat->exitType = 1; + Rfu_StopPartnerSearch(); + sChat->exitType = CHAT_EXIT_ONLY_LEADER; DestroyTask(taskId); return; } - - sub_8011DE0(tCurrLinkPlayer); + Rfu_DisconnectPlayerById(tCurrLinkPlayer); } tState = 3; break; case 5: if (sChat->multiplayerId) - sChat->exitType = 2; + sChat->exitType = CHAT_EXIT_DROPPED; DestroyTask(taskId); break; case 6: - sChat->exitType = 3; + sChat->exitType = CHAT_EXIT_DISBANDED; DestroyTask(taskId); break; case 2: - if (!sub_8011A9C()) + if (!Rfu_IsPlayerExchangeActive()) { if (!sChat->multiplayerId) - sub_80110B8(sChat->linkPlayerCount); + SetUnionRoomChatPlayerData(sChat->linkPlayerCount); tState = 1; } @@ -2148,8 +2160,7 @@ static bool32 IsDisplaySubtask0Active(void) static void FreeDisplay(void) { FreeSprites(); - if (sDisplay) - FREE_AND_SET_NULL(sDisplay); + TRY_FREE_AND_SET_NULL(sDisplay); FreeAllWindowBuffers(); gScanlineEffect.state = 3; @@ -2234,7 +2245,7 @@ static bool32 Display_LoadGfx(u8 *state) LoadChatWindowGfx(); break; case 4: - sub_8020680(); + LoadChatUnkPalette(); break; case 5: LoadChatMessagesWindow(); @@ -2264,7 +2275,7 @@ static bool32 Display_ShowKeyboardSwapMenu(u8 *state) { case 0: ShowKeyboardSwapMenu(); - CopyWindowToVram(3, 3); + CopyWindowToVram(3, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2280,7 +2291,7 @@ static bool32 Display_HideKeyboardSwapMenu(u8 *state) { case 0: HideKeyboardSwapMenu(); - CopyWindowToVram(3, 3); + CopyWindowToVram(3, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2296,18 +2307,18 @@ static bool32 Display_SwitchPages(u8 *state) { case 0: SetKeyboardCursorInvisibility(TRUE); - if (sub_8020320()) + if (SlideKeyboardPageOut()) return TRUE; PrintCurrentKeyboardPage(); - CopyWindowToVram(2, 2); + CopyWindowToVram(2, COPYWIN_GFX); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) return TRUE; break; case 2: - if (sub_8020368()) + if (SlideKeyboardPageIn()) return TRUE; MoveKeyboardCursor(); @@ -2333,7 +2344,7 @@ static bool32 Display_AskQuitChatting(u8 *state) case 0: AddStdMessageWindow(STDMESSAGE_QUIT_CHATTING, 0); AddYesNoMenuAt(23, 11, 1); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2377,7 +2388,7 @@ static bool32 Display_UpdateMessageBuffer(u8 *state) FillTextEntryWindow(x, width, 0); str = GetMessageEntryBuffer(); DrawTextEntryMessage(0, str, 3, 1, 2); - CopyWindowToVram(1, 2); + CopyWindowToVram(1, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2406,13 +2417,13 @@ static bool32 Display_AskRegisterText(u8 *state) length = StringLength_Multibyte(str); FillTextEntryWindow(x, length, PIXEL_FILL(6)); DrawTextEntryMessage(x, str, 0, 4, 5); - CopyWindowToVram(1, 2); + CopyWindowToVram(1, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { AddStdMessageWindow(STDMESSAGE_REGISTER_WHERE, 16); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); } else { @@ -2447,13 +2458,13 @@ static bool32 Display_CancelRegister(u8 *state) length = StringLength_Multibyte(str); FillTextEntryWindow(x, length, PIXEL_FILL(0)); DrawTextEntryMessage(x, str, 3, 1, 2); - CopyWindowToVram(1, 2); + CopyWindowToVram(1, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { HideStdMessageWindow(); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); } else { @@ -2485,7 +2496,7 @@ static bool32 Display_ReturnToKeyboard(u8 *state) { case 0: PrintCurrentKeyboardPage(); - CopyWindowToVram(2, 2); + CopyWindowToVram(2, COPYWIN_GFX); (*state)++; break; case 1: @@ -2511,7 +2522,7 @@ static bool32 Display_ScrollChat(u8 *state) str = GetLastReceivedMessage(); colorIdx = GetReceivedPlayerIndex(); PrintChatMessage(row, str, colorIdx); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) @@ -2531,7 +2542,7 @@ static bool32 Display_ScrollChat(u8 *state) // fall through case 2: ScrollWindow(0, 0, 5, PIXEL_FILL(1)); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); sDisplay->scrollCount++; (*state)++; // fall through @@ -2576,7 +2587,7 @@ static bool32 Display_PrintInputText(u8 *state) { case 0: AddStdMessageWindow(STDMESSAGE_INPUT_TEXT, 16); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); (*state)++; break; case 1: @@ -2592,7 +2603,7 @@ static bool32 Display_PrintExitingChat(u8 *state) { case 0: AddStdMessageWindow(STDMESSAGE_EXITING_CHAT, 0); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); (*state)++; break; case 1: @@ -2613,7 +2624,7 @@ static bool32 Display_PrintLeaderLeft(u8 *state) str = GetChatHostName(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); AddStdMessageWindow(STDMESSAGE_LEADER_LEFT, 0); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); (*state)++; break; case 1: @@ -2630,7 +2641,7 @@ static bool32 Display_AskSave(u8 *state) case 0: AddStdMessageWindow(STDMESSAGE_ASK_SAVE, 0); AddYesNoMenuAt(23, 10, 1); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); (*state)++; break; case 1: @@ -2647,7 +2658,7 @@ static bool32 Display_AskOverwriteSave(u8 *state) case 0: AddStdMessageWindow(STDMESSAGE_ASK_OVERWRITE, 0); AddYesNoMenuAt(23, 10, 1); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); (*state)++; break; case 1: @@ -2663,7 +2674,7 @@ static bool32 Display_PrintSavingDontTurnOff(u8 *state) { case 0: AddStdMessageWindow(STDMESSAGE_SAVING_NO_OFF, 0); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); (*state)++; break; case 1: @@ -2681,7 +2692,7 @@ static bool32 Display_PrintSavedTheGame(u8 *state) DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); AddStdMessageWindow(STDMESSAGE_SAVED_THE_GAME, 0); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); (*state)++; break; case 1: @@ -2698,7 +2709,7 @@ static bool32 Display_AskConfirmLeaderLeave(u8 *state) case 0: AddStdMessageWindow(STDMESSAGE_WARN_LEADER_LEAVE, 0); AddYesNoMenuAt(23, 10, 1); - CopyWindowToVram(sDisplay->messageWindowId, 3); + CopyWindowToVram(sDisplay->messageWindowId, COPYWIN_FULL); (*state)++; break; case 1: @@ -2728,10 +2739,10 @@ static void AddYesNoMenuAt(u8 left, u8 top, u8 initialCursorPos) { FillWindowPixelBuffer(sDisplay->yesNoMenuWindowId, PIXEL_FILL(1)); PutWindowTilemap(sDisplay->yesNoMenuWindowId); - AddTextPrinterParameterized(sDisplay->yesNoMenuWindowId, 1, gText_Yes, 8, 1, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(sDisplay->yesNoMenuWindowId, 1, gText_No, 8, 17, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(sDisplay->yesNoMenuWindowId, FONT_NORMAL, gText_Yes, 8, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(sDisplay->yesNoMenuWindowId, FONT_NORMAL, gText_No, 8, 17, TEXT_SKIP_DRAW, NULL); DrawTextBorderOuter(sDisplay->yesNoMenuWindowId, 1, 13); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sDisplay->yesNoMenuWindowId, 2, initialCursorPos); + InitMenuInUpperLeftCornerNormal(sDisplay->yesNoMenuWindowId, 2, initialCursorPos); } } @@ -2791,7 +2802,7 @@ static void AddStdMessageWindow(int msgId, u16 bg0vofs) str = sDisplayStdMessages[msgId].text; } - ChangeBgY(0, bg0vofs * 256, 0); + ChangeBgY(0, bg0vofs * 256, BG_COORD_SET); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (sDisplayStdMessages[msgId].boxType == 1) @@ -2799,11 +2810,11 @@ static void AddStdMessageWindow(int msgId, u16 bg0vofs) DrawTextBorderInner(windowId, 0xA, 2); AddTextPrinterParameterized5( windowId, - 1, + FONT_NORMAL, str, sDisplayStdMessages[msgId].x + 8, sDisplayStdMessages[msgId].y + 8, - TEXT_SPEED_FF, + TEXT_SKIP_DRAW, NULL, sDisplayStdMessages[msgId].letterSpacing, sDisplayStdMessages[msgId].lineSpacing); @@ -2813,11 +2824,11 @@ static void AddStdMessageWindow(int msgId, u16 bg0vofs) DrawTextBorderOuter(windowId, 0xA, 2); AddTextPrinterParameterized5( windowId, - 1, + FONT_NORMAL, str, sDisplayStdMessages[msgId].x, sDisplayStdMessages[msgId].y, - TEXT_SPEED_FF, + TEXT_SKIP_DRAW, NULL, sDisplayStdMessages[msgId].letterSpacing, sDisplayStdMessages[msgId].lineSpacing); @@ -2834,7 +2845,7 @@ static void HideStdMessageWindow(void) ClearWindowTilemap(sDisplay->messageWindowId); } - ChangeBgY(0, 0, 0); + ChangeBgY(0, 0, BG_COORD_SET); } static void DestroyStdMessageWindow(void) @@ -2865,7 +2876,7 @@ static void DrawTextEntryMessage(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shad strBuffer[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; strBuffer[2] = 8; StringCopy(&strBuffer[3], str); - AddTextPrinterParameterized3(1, 2, x * 8, 1, color, TEXT_SPEED_FF, strBuffer); + AddTextPrinterParameterized3(1, FONT_SHORT, x * 8, 1, color, TEXT_SKIP_DRAW, strBuffer); } static void PrintCurrentKeyboardPage(void) @@ -2900,7 +2911,7 @@ static void PrintCurrentKeyboardPage(void) return; StringCopy(&str[3], sUnionRoomKeyboardText[page][i]); - AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str); + AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); } } else @@ -2909,9 +2920,9 @@ static void PrintCurrentKeyboardPage(void) for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12) { str2 = GetRegisteredTextByRow(i); - if (GetStringWidth(0, str2, 0) <= 40) + if (GetStringWidth(FONT_SMALL, str2, 0) <= 40) { - AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str2); + AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str2); } else { @@ -2920,35 +2931,38 @@ static void PrintCurrentKeyboardPage(void) { length--; StringCopyN_Multibyte(str, str2, length); - } while (GetStringWidth(0, str, 0) > 35); + } while (GetStringWidth(FONT_SMALL, str, 0) > 35); - AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str); - AddTextPrinterParameterized3(2, 0, left + 35, top, color, TEXT_SPEED_FF, sText_Ellipsis); + AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(2, FONT_SMALL, left + 35, top, color, TEXT_SKIP_DRAW, sText_Ellipsis); } } } } -static bool32 sub_8020320(void) +#define KEYBOARD_HOFS_END 56 + +static bool32 SlideKeyboardPageOut(void) { - if (sDisplay->bg1hofs < 56) + if (sDisplay->bg1hofs < KEYBOARD_HOFS_END) { sDisplay->bg1hofs += 12; - if (sDisplay->bg1hofs >= 56) - sDisplay->bg1hofs = 56; + if (sDisplay->bg1hofs >= KEYBOARD_HOFS_END) + sDisplay->bg1hofs = KEYBOARD_HOFS_END; - if (sDisplay->bg1hofs < 56) + if (sDisplay->bg1hofs < KEYBOARD_HOFS_END) { - sub_80207C0(sDisplay->bg1hofs); + // Still sliding + UpdateSlidingKeyboard(sDisplay->bg1hofs); return TRUE; } } - sub_8020818(sDisplay->bg1hofs); + FinishSlidingKeyboard(sDisplay->bg1hofs); return FALSE; } -static bool32 sub_8020368(void) +static bool32 SlideKeyboardPageIn(void) { if (sDisplay->bg1hofs > 0) { @@ -2958,12 +2972,13 @@ static bool32 sub_8020368(void) if (sDisplay->bg1hofs > 0) { - sub_80207C0(sDisplay->bg1hofs); + // Still sliding + UpdateSlidingKeyboard(sDisplay->bg1hofs); return TRUE; } } - sub_8020818(sDisplay->bg1hofs); + FinishSlidingKeyboard(sDisplay->bg1hofs); return FALSE; } @@ -2971,8 +2986,8 @@ static void ShowKeyboardSwapMenu(void) { FillWindowPixelBuffer(3, PIXEL_FILL(1)); DrawTextBorderOuter(3, 1, 13); - PrintTextArray(3, 2, 8, 1, 14, 5, sKeyboardPageTitleTexts); - sub_81983AC(3, 2, 0, 1, 14, 5, GetCurrentKeyboardPage()); + PrintMenuActionTextsAtPos(3, FONT_SHORT, 8, 1, 14, ARRAY_COUNT(sKeyboardPageTitleTexts), sKeyboardPageTitleTexts); + InitMenuNormal(3, FONT_SHORT, 0, 1, 14, 5, GetCurrentKeyboardPage()); PutWindowTilemap(3); } @@ -2990,19 +3005,19 @@ static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx) color[1] = colorIdx * 2 + 2; color[2] = colorIdx * 2 + 3; FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); - AddTextPrinterParameterized3(0, 2, 0, row * 15 + 1, color, TEXT_SPEED_FF, str); + AddTextPrinterParameterized3(0, FONT_SHORT, 0, row * 15 + 1, color, TEXT_SKIP_DRAW, str); } static void ResetGpuBgState(void) { - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); ShowBg(0); ShowBg(1); ShowBg(2); @@ -3050,33 +3065,33 @@ static void LoadChatWindowGfx(void) ptr = DecompressAndCopyTileDataToVram(2, gUnionRoomChat_Background_Gfx, 0, 0, 0); if (ptr) { - CpuFastCopy(&ptr[0x220], sDisplay->unk2128, 0x20); - CpuFastCopy(&ptr[0x420], sDisplay->unk2148, 0x20); + CpuFastCopy(&ptr[0x220], sDisplay->unk2128, sizeof(sDisplay->unk2128)); + CpuFastCopy(&ptr[0x420], sDisplay->unk2148, sizeof(sDisplay->unk2148)); } CopyToBgTilemapBuffer(2, gUnionRoomChat_Background_Tilemap, 0, 0); CopyBgTilemapBufferToVram(2); } -static void sub_8020680(void) +static void LoadChatUnkPalette(void) { - LoadPalette(sUnk_Palette1, 0x80, 0x20); + LoadPalette(sUnk_Palette1, 0x80, sizeof(sUnk_Palette1)); RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); } static void LoadChatMessagesWindow(void) { - LoadPalette(sUnk_Palette2, 0xF0, 0x20); + LoadPalette(sUnk_Palette2, 0xF0, sizeof(sUnk_Palette2)); PutWindowTilemap(0); FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, 3); + CopyWindowToVram(0, COPYWIN_FULL); } static void LoadKeyboardWindow(void) { PutWindowTilemap(2); PrintCurrentKeyboardPage(); - CopyWindowToVram(2, 3); + CopyWindowToVram(2, COPYWIN_FULL); } static void LoadTextEntryWindow(void) @@ -3091,7 +3106,7 @@ static void LoadTextEntryWindow(void) FillWindowPixelBuffer(1, PIXEL_FILL(0)); PutWindowTilemap(1); - CopyWindowToVram(1, 3); + CopyWindowToVram(1, COPYWIN_FULL); } static void LoadKeyboardSwapWindow(void) @@ -3099,7 +3114,7 @@ static void LoadKeyboardSwapWindow(void) FillWindowPixelBuffer(3, PIXEL_FILL(1)); LoadUserWindowBorderGfx(3, 1, 0xD0); LoadUserWindowBorderGfx_(3, 0xA, 0x20); - LoadPalette(gUnknown_0860F074, 0xE0, 0x20); + LoadPalette(gStandardMenuPalette, 0xE0, 0x20); } static void InitScanlineEffect(void) @@ -3114,13 +3129,13 @@ static void InitScanlineEffect(void) ScanlineEffect_SetParams(params); } -static void sub_80207C0(s16 bg1hofs) +static void UpdateSlidingKeyboard(s16 bg1hofs) { CpuFill16(bg1hofs, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120); CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20); } -static void sub_8020818(s16 bg1hofs) +static void FinishSlidingKeyboard(s16 bg1hofs) { CpuFill16(bg1hofs, gScanlineEffectRegBuffers[0], 0x120); CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20); @@ -3135,7 +3150,7 @@ static bool32 TryAllocSprites(void) LoadCompressedSpriteSheet(&sSpriteSheets[i]); LoadSpritePalette(&sSpritePalette); - sSprites = Alloc(sizeof(struct UnionRoomChatSprites)); + sSprites = Alloc(sizeof(*sSprites)); if (!sSprites) return FALSE; @@ -3181,7 +3196,7 @@ static void MoveKeyboardCursor(void) static void SetRegisteredTextPalette(bool32 registering) { const u16 *palette = &sUnionRoomChatInterfacePal[registering * 2 + 1]; - u8 index = IndexOfSpritePaletteTag(0); + u8 index = IndexOfSpritePaletteTag(PALTAG_INTERFACE); LoadPalette(palette, index * 16 + 0x101, 4); } diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c index 671290e21e..923f6692f1 100644 --- a/src/union_room_player_avatar.c +++ b/src/union_room_player_avatar.c @@ -9,8 +9,12 @@ #include "constants/event_objects.h" #include "constants/event_object_movement.h" -#define UR_SPRITE_START_ID (MAX_SPRITES - MAX_UNION_ROOM_PLAYERS) -#define UR_PLAYER_SPRITE_ID(playerIdx, facingDir)(5 * playerIdx + facingDir) +#define UR_SPRITE_START_ID (MAX_SPRITES - MAX_UNION_ROOM_LEADERS) + +// Each parent player can lead a group of up to MAX_RFU_PLAYERS (including themselves). +// Multiply the leader's id by MAX_RFU_PLAYERS and add the member's id (0 if the leader) to +// get the sprite index of that player. +#define UR_PLAYER_SPRITE_ID(leaderId, memberId)(MAX_RFU_PLAYERS * leaderId + memberId) static EWRAM_DATA struct UnionRoomObject * sUnionObjWork = NULL; static EWRAM_DATA u32 sUnionObjRefreshTimer = 0; @@ -19,30 +23,31 @@ static u8 CreateTask_AnimateUnionRoomPlayers(void); static u32 IsUnionRoomPlayerInvisible(u32, u32); static void SetUnionRoomObjectFacingDirection(s32, s32, u8); -static const u8 sUnionRoomObjGfxIds[GENDER_COUNT][MAX_UNION_ROOM_PLAYERS + 2] = { +// + 2 is just to match, those elements are empty and never read +static const u8 sUnionRoomObjGfxIds[GENDER_COUNT][MAX_UNION_ROOM_LEADERS + 2] = { [MALE] = { - OBJ_EVENT_GFX_MAN_3, - OBJ_EVENT_GFX_BLACK_BELT, - OBJ_EVENT_GFX_CAMPER, - OBJ_EVENT_GFX_YOUNGSTER, - OBJ_EVENT_GFX_PSYCHIC_M, - OBJ_EVENT_GFX_BUG_CATCHER, - OBJ_EVENT_GFX_MAN_4, + OBJ_EVENT_GFX_MAN_3, + OBJ_EVENT_GFX_BLACK_BELT, + OBJ_EVENT_GFX_CAMPER, + OBJ_EVENT_GFX_YOUNGSTER, + OBJ_EVENT_GFX_PSYCHIC_M, + OBJ_EVENT_GFX_BUG_CATCHER, + OBJ_EVENT_GFX_MAN_4, OBJ_EVENT_GFX_MAN_5 }, [FEMALE] = { - OBJ_EVENT_GFX_WOMAN_5, - OBJ_EVENT_GFX_HEX_MANIAC, - OBJ_EVENT_GFX_PICNICKER, - OBJ_EVENT_GFX_LASS, - OBJ_EVENT_GFX_LASS, - OBJ_EVENT_GFX_GIRL_3, - OBJ_EVENT_GFX_WOMAN_2, + OBJ_EVENT_GFX_WOMAN_5, + OBJ_EVENT_GFX_HEX_MANIAC, + OBJ_EVENT_GFX_PICNICKER, + OBJ_EVENT_GFX_LASS, + OBJ_EVENT_GFX_LASS, + OBJ_EVENT_GFX_GIRL_3, + OBJ_EVENT_GFX_WOMAN_2, OBJ_EVENT_GFX_BEAUTY } }; -static const s16 sUnionRoomPlayerCoords[MAX_UNION_ROOM_PLAYERS][2] = { +static const s16 sUnionRoomPlayerCoords[MAX_UNION_ROOM_LEADERS][2] = { { 4, 6}, {13, 8}, {10, 6}, @@ -53,12 +58,16 @@ static const s16 sUnionRoomPlayerCoords[MAX_UNION_ROOM_PLAYERS][2] = { { 7, 8} }; -static const s8 sFacingDirectionOffsets[][2] = { - [DIR_NONE] = { 0, 0}, - [DIR_SOUTH] = { 1, 0}, - [DIR_NORTH] = { 0, -1}, - [DIR_WEST] = {-1, 0}, - [DIR_EAST] = { 0, 1} +// If there's a group of players interacting in the Union Room, the group +// leader will be at one of the positions above and each member in the group +// will be at one of the offsets from that position below. The leader will +// be at the first offset (0,0), as they're at the center. +static const s8 sUnionRoomGroupOffsets[MAX_RFU_PLAYERS][2] = { + { 0, 0}, // Center + { 1, 0}, // Left + { 0, -1}, // Top + {-1, 0}, // Right + { 0, 1} // Bottom }; static const u8 sOppositeFacingDirection[] = { @@ -69,12 +78,14 @@ static const u8 sOppositeFacingDirection[] = { [DIR_EAST] = DIR_WEST }; -static const u8 sNextFacingDirection[] = { - [DIR_NONE] = DIR_SOUTH, - [DIR_SOUTH] = DIR_WEST, - [DIR_NORTH] = DIR_SOUTH, - [DIR_WEST] = DIR_EAST, - [DIR_EAST] = DIR_NORTH +// Compare to sUnionRoomGroupOffsets, the direction each group member +// needs to be facing in order to face the group leader in the center. +static const u8 sMemberFacingDirections[MAX_RFU_PLAYERS] = { + DIR_SOUTH, // Leader, but never read + DIR_WEST, + DIR_SOUTH, + DIR_EAST, + DIR_NORTH }; static const u8 sUnionRoomLocalIds[] = { @@ -90,13 +101,13 @@ static const u8 sUnionRoomLocalIds[] = { // Unused static const u16 sHidePlayerFlags[] = { - FLAG_HIDE_UNION_ROOM_PLAYER_1, - FLAG_HIDE_UNION_ROOM_PLAYER_2, - FLAG_HIDE_UNION_ROOM_PLAYER_3, - FLAG_HIDE_UNION_ROOM_PLAYER_4, - FLAG_HIDE_UNION_ROOM_PLAYER_5, - FLAG_HIDE_UNION_ROOM_PLAYER_6, - FLAG_HIDE_UNION_ROOM_PLAYER_7, + FLAG_HIDE_UNION_ROOM_PLAYER_1, + FLAG_HIDE_UNION_ROOM_PLAYER_2, + FLAG_HIDE_UNION_ROOM_PLAYER_3, + FLAG_HIDE_UNION_ROOM_PLAYER_4, + FLAG_HIDE_UNION_ROOM_PLAYER_5, + FLAG_HIDE_UNION_ROOM_PLAYER_6, + FLAG_HIDE_UNION_ROOM_PLAYER_7, FLAG_HIDE_UNION_ROOM_PLAYER_8 }; @@ -118,21 +129,22 @@ static bool32 IsPlayerStandingStill(void) return FALSE; } +// Gender and trainer id are used to determine which sprite a player appears as static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id) { - return sUnionRoomObjGfxIds[gender][id % MAX_UNION_ROOM_PLAYERS]; + return sUnionRoomObjGfxIds[gender][id % MAX_UNION_ROOM_LEADERS]; } -static void GetUnionRoomPlayerFacingCoords(u32 playerIdx, u32 direction, s32 * x, s32 * y) +static void GetUnionRoomPlayerCoords(u32 leaderId, u32 memberId, s32 * x, s32 * y) { - *x = sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0] + 7; - *y = sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1] + 7; + *x = sUnionRoomPlayerCoords[leaderId][0] + sUnionRoomGroupOffsets[memberId][0] + MAP_OFFSET; + *y = sUnionRoomPlayerCoords[leaderId][1] + sUnionRoomGroupOffsets[memberId][1] + MAP_OFFSET; } -static bool32 IsUnionRoomPlayerFacingTileAt(u32 playerIdx, u32 direction, s32 x, s32 y) +static bool32 IsUnionRoomPlayerAt(u32 leaderId, u32 memberId, s32 x, s32 y) { - if ((sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0] + 7 == x) - && (sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1] + 7 == y)) + if ((sUnionRoomPlayerCoords[leaderId][0] + sUnionRoomGroupOffsets[memberId][0] + MAP_OFFSET == x) + && (sUnionRoomPlayerCoords[leaderId][1] + sUnionRoomGroupOffsets[memberId][1] + MAP_OFFSET == y)) return TRUE; else return FALSE; @@ -153,62 +165,50 @@ static void ShowUnionRoomPlayer(u32 player_idx) FlagClear(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); } -static void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId) +static void SetUnionRoomPlayerGfx(u32 leaderId, u32 gfxId) { - VarSet(VAR_OBJ_GFX_ID_0 + playerIdx, gfxId); + VarSet(VAR_OBJ_GFX_ID_0 + leaderId, gfxId); } -static void CreateUnionRoomPlayerObjectEvent(u32 playerIdx) +static void CreateUnionRoomPlayerObjectEvent(u32 leaderId) { - TrySpawnObjectEvent(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + TrySpawnObjectEvent(sUnionRoomLocalIds[leaderId], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); } -static void RemoveUnionRoomPlayerObjectEvent(u32 playerIdx) +static void RemoveUnionRoomPlayerObjectEvent(u32 leaderId) { - RemoveObjectEventByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + RemoveObjectEventByLocalIdAndMap(sUnionRoomLocalIds[leaderId], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); } -static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) +static bool32 SetUnionRoomPlayerEnterExitMovement(u32 leaderId, const u8 *movement) { u8 objectId; struct ObjectEvent * object; - if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) - { + if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[leaderId], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) return FALSE; - } object = &gObjectEvents[objectId]; if (ObjectEventIsMovementOverridden(object)) - { return FALSE; - } if (ObjectEventSetHeldMovement(object, *movement)) - { return FALSE; - } return TRUE; } -static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx) +static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 leaderId) { u8 objectId; struct ObjectEvent * object; - if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) - { + if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[leaderId], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) return TRUE; - } + object = &gObjectEvents[objectId]; if (!ObjectEventClearHeldMovementIfFinished(object)) - { return FALSE; - } - if (!ScriptContext2_IsEnabled()) - { + + if (!ArePlayerFieldControlsLocked()) UnfreezeObjectEvent(object); - } else - { FreezeObjectEvent(object); - } return TRUE; } @@ -218,7 +218,7 @@ u8 InitUnionRoomPlayerObjects(struct UnionRoomObject * players) sUnionObjRefreshTimer = 0; sUnionObjWork = players; - for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++) + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) { players[i].state = 0; players[i].gfxId = 0; @@ -228,22 +228,22 @@ u8 InitUnionRoomPlayerObjects(struct UnionRoomObject * players) return CreateTask_AnimateUnionRoomPlayers(); } -static bool32 AnimateUnionRoomPlayerDespawn(s8 * state, u32 playerIdx, struct UnionRoomObject * ptr) +static bool32 AnimateUnionRoomPlayerDespawn(s8 * state, u32 leaderId, struct UnionRoomObject * object) { switch (*state) { case 0: - if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerExit) == TRUE) + if (SetUnionRoomPlayerEnterExitMovement(leaderId, sMovement_UnionPlayerExit) == TRUE) { - HideUnionRoomPlayer(playerIdx); + HideUnionRoomPlayer(leaderId); (*state)++; } break; case 1: - if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx)) + if (TryReleaseUnionRoomPlayerObjectEvent(leaderId)) { - RemoveUnionRoomPlayerObjectEvent(playerIdx); - HideUnionRoomPlayer(playerIdx); + RemoveUnionRoomPlayerObjectEvent(leaderId); + HideUnionRoomPlayer(leaderId); *state = 0; return TRUE; } @@ -252,7 +252,7 @@ static bool32 AnimateUnionRoomPlayerDespawn(s8 * state, u32 playerIdx, struct Un return FALSE; } -static bool32 AnimateUnionRoomPlayerSpawn(s8 * state, u32 playerIdx, struct UnionRoomObject * ptr) +static bool32 AnimateUnionRoomPlayerSpawn(s8 * state, u32 leaderId, struct UnionRoomObject * object) { s16 x, y; @@ -260,32 +260,24 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * state, u32 playerIdx, struct Unio { case 0: if (!IsPlayerStandingStill()) - { break; - } PlayerGetDestCoords(&x, &y); - if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE) - { + if (IsUnionRoomPlayerAt(leaderId, 0, x, y) == TRUE) break; - } player_get_pos_including_state_based_drift(&x, &y); - if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE) - { + if (IsUnionRoomPlayerAt(leaderId, 0, x, y) == TRUE) break; - } - SetUnionRoomPlayerGfx(playerIdx, ptr->gfxId); - CreateUnionRoomPlayerObjectEvent(playerIdx); - ShowUnionRoomPlayer(playerIdx); + SetUnionRoomPlayerGfx(leaderId, object->gfxId); + CreateUnionRoomPlayerObjectEvent(leaderId); + ShowUnionRoomPlayer(leaderId); (*state)++; // fallthrough case 3: // incorrect? - if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerEnter) == TRUE) - { + if (SetUnionRoomPlayerEnterExitMovement(leaderId, sMovement_UnionPlayerEnter) == TRUE) (*state)++; - } break; case 2: - if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx)) + if (TryReleaseUnionRoomPlayerObjectEvent(leaderId)) { *state = 0; return TRUE; @@ -295,38 +287,38 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * state, u32 playerIdx, struct Unio return FALSE; } -static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 id) +static bool32 SpawnGroupLeader(u32 leaderId, u32 gender, u32 id) { - struct UnionRoomObject * ptr = &sUnionObjWork[playerIdx]; - ptr->schedAnim = UNION_ROOM_SPAWN_IN; - ptr->gfxId = GetUnionRoomPlayerGraphicsId(gender, id); + struct UnionRoomObject * object = &sUnionObjWork[leaderId]; + object->schedAnim = UNION_ROOM_SPAWN_IN; + object->gfxId = GetUnionRoomPlayerGraphicsId(gender, id); - if (ptr->state == 0) + if (object->state == 0) return TRUE; else return FALSE; } -static bool32 DespawnGroupLeader(u32 playerIdx) +static bool32 DespawnGroupLeader(u32 leaderId) { - struct UnionRoomObject * ptr = &sUnionObjWork[playerIdx]; - ptr->schedAnim = UNION_ROOM_SPAWN_OUT; + struct UnionRoomObject * object = &sUnionObjWork[leaderId]; + object->schedAnim = UNION_ROOM_SPAWN_OUT; - if (ptr->state == 1) + if (object->state == 1) return TRUE; else return FALSE; } -static void AnimateUnionRoomPlayer(u32 playerIdx, struct UnionRoomObject * ptr) +static void AnimateUnionRoomPlayer(u32 leaderId, struct UnionRoomObject * object) { - switch (ptr->state) + switch (object->state) { case 0: - if (ptr->schedAnim == UNION_ROOM_SPAWN_IN) + if (object->schedAnim == UNION_ROOM_SPAWN_IN) { - ptr->state = 2; - ptr->animState = 0; + object->state = 2; + object->animState = 0; } else { @@ -334,23 +326,23 @@ static void AnimateUnionRoomPlayer(u32 playerIdx, struct UnionRoomObject * ptr) } // fallthrough case 2: - if (!IsUnionRoomPlayerInvisible(playerIdx, 0) && ptr->schedAnim == UNION_ROOM_SPAWN_OUT) + if (!IsUnionRoomPlayerInvisible(leaderId, 0) && object->schedAnim == UNION_ROOM_SPAWN_OUT) { - ptr->state = 0; - ptr->animState = 0; - RemoveUnionRoomPlayerObjectEvent(playerIdx); - HideUnionRoomPlayer(playerIdx); + object->state = 0; + object->animState = 0; + RemoveUnionRoomPlayerObjectEvent(leaderId); + HideUnionRoomPlayer(leaderId); } - else if (AnimateUnionRoomPlayerSpawn(&ptr->animState, playerIdx, ptr) == TRUE) + else if (AnimateUnionRoomPlayerSpawn(&object->animState, leaderId, object) == TRUE) { - ptr->state = 1; + object->state = 1; } break; case 1: - if (ptr->schedAnim == UNION_ROOM_SPAWN_OUT) + if (object->schedAnim == UNION_ROOM_SPAWN_OUT) { - ptr->state = 3; - ptr->animState = 0; + object->state = 3; + object->animState = 0; } else { @@ -358,19 +350,17 @@ static void AnimateUnionRoomPlayer(u32 playerIdx, struct UnionRoomObject * ptr) } // fallthrough case 3: - if (AnimateUnionRoomPlayerDespawn(&ptr->animState, playerIdx, ptr) == 1) - { - ptr->state = 0; - } + if (AnimateUnionRoomPlayerDespawn(&object->animState, leaderId, object) == 1) + object->state = 0; break; } - ptr->schedAnim = UNION_ROOM_SPAWN_NONE; + object->schedAnim = UNION_ROOM_SPAWN_NONE; } static void Task_AnimateUnionRoomPlayers(u8 taskId) { s32 i; - for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++) + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) AnimateUnionRoomPlayer(i, &sUnionObjWork[i]); } @@ -386,15 +376,13 @@ static void DestroyTask_AnimateUnionRoomPlayers(void) { u8 taskId = FindTaskIdByFunc(Task_AnimateUnionRoomPlayers); if (taskId < NUM_TASKS) - { DestroyTask(taskId); - } } void DestroyUnionRoomPlayerObjects(void) { s32 i; - for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++) + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) { if (!IsUnionRoomPlayerHidden(i)) { @@ -406,120 +394,119 @@ void DestroyUnionRoomPlayerObjects(void) DestroyTask_AnimateUnionRoomPlayers(); } -void CreateGroupMemberSpritesInvisible(u8 * spriteIds, s32 playerIdx) +void CreateUnionRoomPlayerSprites(u8 *spriteIds, s32 leaderId) { - s32 direction; - - for (direction = DIR_NONE; direction <= DIR_EAST; direction++) + s32 memberId; + for (memberId = 0; memberId < MAX_RFU_PLAYERS; memberId++) { - s32 id = UR_PLAYER_SPRITE_ID(playerIdx, direction); - spriteIds[id] = CreateObjectSprite(OBJ_EVENT_GFX_MAN_4, - id - UR_SPRITE_START_ID, - sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0], - sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1], + s32 id = UR_PLAYER_SPRITE_ID(leaderId, memberId); + spriteIds[id] = CreateVirtualObject(OBJ_EVENT_GFX_MAN_4, + id - UR_SPRITE_START_ID, + sUnionRoomPlayerCoords[leaderId][0] + sUnionRoomGroupOffsets[memberId][0], + sUnionRoomPlayerCoords[leaderId][1] + sUnionRoomGroupOffsets[memberId][1], 3, 1); - SetObjectEventSpriteInvisibility(id - UR_SPRITE_START_ID, TRUE); + SetVirtualObjectInvisibility(id - UR_SPRITE_START_ID, TRUE); } } -void DestroyGroupMemberSprites(u8 * spriteIds) +void DestroyUnionRoomPlayerSprites(u8 *spriteIds) { s32 i; - for (i = 0; i < UR_PLAYER_SPRITE_ID(MAX_UNION_ROOM_PLAYERS, 0); i++) + for (i = 0; i < NUM_UNION_ROOM_SPRITES; i++) DestroySprite(&gSprites[spriteIds[i]]); } +// Clear the impassable metatiles around the group leaders that get set +// to prevent the player from walking through the group member sprites. void SetTilesAroundUnionRoomPlayersPassable(void) { - s32 i, direction, x, y; - for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++) + s32 i, memberId, x, y; + for (i = 0; i < MAX_UNION_ROOM_LEADERS; i++) { - for (direction = DIR_NONE; direction <= DIR_EAST; direction++) + for (memberId = 0; memberId < MAX_RFU_PLAYERS; memberId++) { - GetUnionRoomPlayerFacingCoords(i, direction, &x, &y); + GetUnionRoomPlayerCoords(i, memberId, &x, &y); MapGridSetMetatileImpassabilityAt(x, y, FALSE); } } } -static u8 GetNewFacingDirectionForUnionRoomPlayer(u32 direction, u32 playerIdx, struct GFtgtGname * gname) +static u8 GetNewFacingDirectionForUnionRoomPlayer(u32 memberId, u32 leaderId, struct RfuGameData * gameData) { - if (direction != DIR_NONE) - return sNextFacingDirection[direction]; - else if (gname->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + if (memberId) // If not leader + return sMemberFacingDirections[memberId]; + else if (gameData->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) return DIR_SOUTH; else return DIR_EAST; } -static bool32 IsUnionRoomPlayerInvisible(u32 playerIdx, u32 direction) +static bool32 IsUnionRoomPlayerInvisible(u32 leaderId, u32 memberId) { - return IsObjectEventSpriteInvisible(UR_PLAYER_SPRITE_ID(playerIdx, direction) - UR_SPRITE_START_ID); + return IsVirtualObjectInvisible(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID); } -static void SpawnGroupMember(u32 playerIdx, u32 direction, u8 graphicsId, struct GFtgtGname * gname) +static void SpawnGroupMember(u32 leaderId, u32 memberId, u8 graphicsId, struct RfuGameData * gameData) { s32 x, y; - s32 id = UR_PLAYER_SPRITE_ID(playerIdx, direction); - if (IsUnionRoomPlayerInvisible(playerIdx, direction) == TRUE) + s32 id = UR_PLAYER_SPRITE_ID(leaderId, memberId); + if (IsUnionRoomPlayerInvisible(leaderId, memberId) == TRUE) { - SetObjectEventSpriteInvisibility(id - UR_SPRITE_START_ID, FALSE); - SetObjectEventSpriteAnim(id - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_IN); + SetVirtualObjectInvisibility(id - UR_SPRITE_START_ID, FALSE); + SetVirtualObjectSpriteAnim(id - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_IN); } - SetObjectEventSpriteGraphics(id - UR_SPRITE_START_ID, graphicsId); - SetUnionRoomObjectFacingDirection(direction, playerIdx, GetNewFacingDirectionForUnionRoomPlayer(direction, playerIdx, gname)); - GetUnionRoomPlayerFacingCoords(playerIdx, direction, &x, &y); + SetVirtualObjectGraphics(id - UR_SPRITE_START_ID, graphicsId); + SetUnionRoomObjectFacingDirection(memberId, leaderId, GetNewFacingDirectionForUnionRoomPlayer(memberId, leaderId, gameData)); + GetUnionRoomPlayerCoords(leaderId, memberId, &x, &y); MapGridSetMetatileImpassabilityAt(x, y, TRUE); } -static void DespawnGroupMember(u32 playerIdx, u32 direction) +static void DespawnGroupMember(u32 leaderId, u32 memberId) { s32 x, y; - SetObjectEventSpriteAnim(UR_PLAYER_SPRITE_ID(playerIdx, direction) - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_OUT); - GetUnionRoomPlayerFacingCoords(playerIdx, direction, &x, &y); + SetVirtualObjectSpriteAnim(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_OUT); + GetUnionRoomPlayerCoords(leaderId, memberId, &x, &y); MapGridSetMetatileImpassabilityAt(x, y, FALSE); } -static void AssembleGroup(u32 playerIdx, struct GFtgtGname * gname) +static void AssembleGroup(u32 leaderId, struct RfuGameData * gameData) { s16 x, y, x2, y2; s32 i; PlayerGetDestCoords(&x, &y); player_get_pos_including_state_based_drift(&x2, &y2); - if (IsObjectEventSpriteInvisible(UR_PLAYER_SPRITE_ID(playerIdx, 0) - UR_SPRITE_START_ID) == TRUE) + if (IsVirtualObjectInvisible(UR_PLAYER_SPRITE_ID(leaderId, 0) - UR_SPRITE_START_ID) == TRUE) { - if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE || IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x2, y2) == TRUE) - { + if (IsUnionRoomPlayerAt(leaderId, 0, x, y) == TRUE || IsUnionRoomPlayerAt(leaderId, 0, x2, y2) == TRUE) return; - } - SpawnGroupMember(playerIdx, 0, GetUnionRoomPlayerGraphicsId(gname->playerGender, gname->unk_00.playerTrainerId[0]), gname); + SpawnGroupMember(leaderId, 0, GetUnionRoomPlayerGraphicsId(gameData->playerGender, gameData->compatibility.playerTrainerId[0]), gameData); } - for (i = 1; i < 5; i++) + for (i = 1; i < MAX_RFU_PLAYERS; i++) { - if (gname->child_sprite_gender[i - 1] == 0) + if (gameData->partnerInfo[i - 1] == 0) { - DespawnGroupMember(playerIdx, i); + DespawnGroupMember(leaderId, i); } - else if (IsUnionRoomPlayerFacingTileAt(playerIdx, i, x, y) == FALSE && IsUnionRoomPlayerFacingTileAt(playerIdx, i, x2, y2) == FALSE) + else if (IsUnionRoomPlayerAt(leaderId, i, x, y) == FALSE && IsUnionRoomPlayerAt(leaderId, i, x2, y2) == FALSE) { - SpawnGroupMember(playerIdx, i, GetUnionRoomPlayerGraphicsId((gname->child_sprite_gender[i - 1] >> 3) & 1, gname->child_sprite_gender[i - 1] & 7), gname); + SpawnGroupMember(leaderId, i, GetUnionRoomPlayerGraphicsId((gameData->partnerInfo[i - 1] >> PINFO_GENDER_SHIFT) & 1, + gameData->partnerInfo[i - 1] & PINFO_TID_MASK), + gameData); } } } -static void SpawnGroupLeaderAndMembers(u32 playerIdx, struct GFtgtGname * gname) +static void SpawnGroupLeaderAndMembers(u32 leaderId, struct RfuGameData * gameData) { u32 i; - switch (gname->activity) + switch (gameData->activity) { case ACTIVITY_NONE | IN_UNION_ROOM: case ACTIVITY_PLYRTALK | IN_UNION_ROOM: - SpawnGroupLeader(playerIdx, gname->playerGender, gname->unk_00.playerTrainerId[0]); - for (i = 0; i < 5; i++) - { - DespawnGroupMember(playerIdx, i); - } + SpawnGroupLeader(leaderId, gameData->playerGender, gameData->compatibility.playerTrainerId[0]); + for (i = 0; i < MAX_RFU_PLAYERS; i++) + DespawnGroupMember(leaderId, i); break; case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM: case ACTIVITY_TRADE | IN_UNION_ROOM: @@ -528,37 +515,31 @@ static void SpawnGroupLeaderAndMembers(u32 playerIdx, struct GFtgtGname * gname) case ACTIVITY_ACCEPT | IN_UNION_ROOM: case ACTIVITY_DECLINE | IN_UNION_ROOM: case ACTIVITY_NPCTALK | IN_UNION_ROOM: - DespawnGroupLeader(playerIdx); - AssembleGroup(playerIdx, gname); + DespawnGroupLeader(leaderId); + AssembleGroup(leaderId, gameData); break; } } -static void DespawnGroupLeaderAndMembers(u32 r5, struct GFtgtGname *gname) +static void DespawnGroupLeaderAndMembers(u32 leaderId, struct RfuGameData *gameData) { s32 i; - DespawnGroupLeader(r5); - for (i = 0; i < 5; i++) - { - DespawnGroupMember(r5, i); - } + DespawnGroupLeader(leaderId); + for (i = 0; i < MAX_RFU_PLAYERS; i++) + DespawnGroupMember(leaderId, i); } static void UpdateUnionRoomPlayerSprites(struct WirelessLink_URoom *uroom) { s32 i; - struct UnkStruct_x20 * r4; + struct RfuPlayer * leaders; sUnionObjRefreshTimer = 0; - for (i = 0, r4 = uroom->field_0->arr; i < MAX_UNION_ROOM_PLAYERS; i++) + for (i = 0, leaders = uroom->playerList->players; i < MAX_UNION_ROOM_LEADERS; i++) { - if (r4[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) - { - SpawnGroupLeaderAndMembers(i, &r4[i].gname_uname.gname); - } - else if (r4[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) - { - DespawnGroupLeaderAndMembers(i, &r4[i].gname_uname.gname); - } + if (leaders[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) + SpawnGroupLeaderAndMembers(i, &leaders[i].rfu.data); + else if (leaders[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) + DespawnGroupLeaderAndMembers(i, &leaders[i].rfu.data); } } @@ -570,64 +551,56 @@ void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom) void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom) { if (++sUnionObjRefreshTimer > 300) - { UpdateUnionRoomPlayerSprites(uroom); - } } -bool32 TryInteractWithUnionRoomMember(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds) +bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *list, s16 *memberIdPtr, s16 *leaderIdPtr, u8 *spriteIds) { s16 x, y; - s32 i, direction; - struct UnkStruct_x20 * r4; + s32 i, memberId; + struct RfuPlayer * leaders; if (!IsPlayerStandingStill()) - { return FALSE; - } + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - for (i = 0, r4 = main0->arr; i < MAX_UNION_ROOM_PLAYERS; i++) + for (i = 0, leaders = list->players; i < MAX_UNION_ROOM_LEADERS; i++) { - for (direction = DIR_NONE; direction <= DIR_EAST; direction++) + for (memberId = 0; memberId < MAX_RFU_PLAYERS; memberId++) { - s32 id = UR_PLAYER_SPRITE_ID(i, direction); - if (x != sUnionRoomPlayerCoords[i][0] + sFacingDirectionOffsets[direction][0] + 7) - { + s32 id = UR_PLAYER_SPRITE_ID(i, memberId); + + // Is the player in front of a group member position? + if (x != sUnionRoomPlayerCoords[i][0] + sUnionRoomGroupOffsets[memberId][0] + 7) continue; - } - if (y != sUnionRoomPlayerCoords[i][1] + sFacingDirectionOffsets[direction][1] + 7) - { + if (y != sUnionRoomPlayerCoords[i][1] + sUnionRoomGroupOffsets[memberId][1] + 7) continue; - } - if (IsObjectEventSpriteInvisible(id - UR_SPRITE_START_ID)) - { + + // Has a group member spawned at this position? + if (IsVirtualObjectInvisible(id - UR_SPRITE_START_ID)) continue; - } - if (IsObjectEventSpriteAnimating(id - UR_SPRITE_START_ID)) - { + if (IsVirtualObjectAnimating(id - UR_SPRITE_START_ID)) continue; - } - if (r4[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN) - { + if (leaders[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN) continue; - } - // Face player - SetUnionRoomObjectFacingDirection(direction, i, sOppositeFacingDirection[GetPlayerFacingDirection()]); - *directionPtr = direction; - *playerIdxPtr = i; + + // Interaction attempt successful, face player + SetUnionRoomObjectFacingDirection(memberId, i, sOppositeFacingDirection[GetPlayerFacingDirection()]); + *memberIdPtr = memberId; + *leaderIdPtr = i; return TRUE; } } return FALSE; } -static void SetUnionRoomObjectFacingDirection(s32 currDirection, s32 playerIdx, u8 newDirection) +static void SetUnionRoomObjectFacingDirection(s32 memberId, s32 leaderId, u8 newDirection) { - TurnObjectEventSprite(5 * playerIdx - UR_SPRITE_START_ID + currDirection, newDirection); + TurnVirtualObject(MAX_RFU_PLAYERS * leaderId - UR_SPRITE_START_ID + memberId, newDirection); // should be line below, but order is swapped here - // TurnObjectEventSprite(UR_PLAYER_SPRITE_ID(playerIdx, currDirection) - UR_SPRITE_START_ID, newDirection); + // TurnVirtualObject(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID, newDirection); } -void UpdateUnionRoomMemberFacing(u32 currDirection, u32 playerIdx, struct UnkStruct_Main0 *main0) +void UpdateUnionRoomMemberFacing(u32 memberId, u32 leaderId, struct RfuPlayerList *list) { - return SetUnionRoomObjectFacingDirection(currDirection, playerIdx, GetNewFacingDirectionForUnionRoomPlayer(currDirection, playerIdx, &main0->arr[playerIdx].gname_uname.gname)); + return SetUnionRoomObjectFacingDirection(memberId, leaderId, GetNewFacingDirectionForUnionRoomPlayer(memberId, leaderId, &list->players[leaderId].rfu.data)); } diff --git a/src/unk_text_util_2.c b/src/unk_text_util_2.c deleted file mode 100644 index 3459dde858..0000000000 --- a/src/unk_text_util_2.c +++ /dev/null @@ -1,220 +0,0 @@ -#include "global.h" -#include "main.h" -#include "window.h" -#include "text.h" -#include "sound.h" - -ALIGNED(4) -static const u8 sScrollDistances[] = {1, 2, 4}; -static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("graphics/fonts/font6.fwjpnfont"); - -static void DecompressGlyphFont6(u16); - -u16 Font6Func(struct TextPrinter *textPrinter) -{ - u16 char_; - struct TextPrinterSubStruct *subStruct; - subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - - switch (textPrinter->state) - { - case 0: - if (JOY_HELD(A_BUTTON | B_BUTTON) && subStruct->hasPrintBeenSpedUp) - { - textPrinter->delayCounter = 0; - } - if (textPrinter->delayCounter && textPrinter->textSpeed) - { - textPrinter->delayCounter --; - if (gTextFlags.canABSpeedUpPrint && JOY_NEW(A_BUTTON | B_BUTTON)) - { - subStruct->hasPrintBeenSpedUp = TRUE; - textPrinter->delayCounter = 0; - } - return 3; - } - if (gTextFlags.autoScroll) - { - textPrinter->delayCounter = 3; - } - else - { - textPrinter->delayCounter = textPrinter->textSpeed; - } - char_ = *textPrinter->printerTemplate.currentChar++; - switch (char_) - { - case EOS: - return 1; - case CHAR_NEWLINE: - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->printerTemplate.currentY += gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; - return 2; - case PLACEHOLDER_BEGIN: - textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_BEGIN: - char_ = *textPrinter->printerTemplate.currentChar++; - switch (char_) - { - case EXT_CTRL_CODE_COLOR: - textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case EXT_CTRL_CODE_HIGHLIGHT: - textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case EXT_CTRL_CODE_SHADOW: - textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW: - textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.bgColor = *++textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.shadowColor = *++textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case EXT_CTRL_CODE_PALETTE: - textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_SIZE: - subStruct->glyphId = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_RESET_SIZE: - return 2; - case EXT_CTRL_CODE_PAUSE: - textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++; - textPrinter->state = 6; - return 2; - case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: - textPrinter->state = 1; - if (gTextFlags.autoScroll) - { - subStruct->autoScrollDelay = 0; - } - return 3; - case EXT_CTRL_CODE_WAIT_SE: - textPrinter->state = 5; - return 3; - case EXT_CTRL_CODE_PLAY_BGM: - case EXT_CTRL_CODE_PLAY_SE: - textPrinter->printerTemplate.currentChar += 2; - return 2; - case EXT_CTRL_CODE_ESCAPE: - char_ = *++textPrinter->printerTemplate.currentChar; - break; - case EXT_CTRL_CODE_SHIFT_TEXT: - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_SHIFT_DOWN: - textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_FILL_WINDOW: - FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - return 2; - } - break; - case CHAR_PROMPT_CLEAR: - textPrinter->state = 2; - TextPrinterInitDownArrowCounters(textPrinter); - return 3; - case CHAR_PROMPT_SCROLL: - textPrinter->state = 3; - TextPrinterInitDownArrowCounters(textPrinter); - return 3; - case CHAR_EXTRA_SYMBOL: - char_ = *textPrinter->printerTemplate.currentChar++| 0x100; - break; - case CHAR_KEYPAD_ICON: - textPrinter->printerTemplate.currentChar++; - return 0; - } - DecompressGlyphFont6(char_); - CopyGlyphToWindow(textPrinter); - textPrinter->printerTemplate.currentX += gCurGlyph.width + textPrinter->printerTemplate.letterSpacing; - return 0; - case 1: - if (TextPrinterWait(textPrinter)) - { - textPrinter->state = 0; - } - return 3; - case 2: - if (TextPrinterWaitWithDownArrow(textPrinter)) - { - FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y; - textPrinter->state = 0; - } - return 3; - case 3: - if (TextPrinterWaitWithDownArrow(textPrinter)) - { - TextPrinterClearDownArrow(textPrinter); - textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->state = 4; - } - return 3; - case 4: - if (textPrinter->scrollDistance) - { - if (textPrinter->scrollDistance < sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed]) - { - ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->scrollDistance = 0; - } - else - { - ScrollWindow(textPrinter->printerTemplate.windowId, 0, sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->scrollDistance -= sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed]; - } - CopyWindowToVram(textPrinter->printerTemplate.windowId, 2); - } - else - { - textPrinter->state = 0; - } - return 3; - case 5: - if (!IsSEPlaying()) - { - textPrinter->state = 0; - } - return 3; - case 6: - if (textPrinter->delayCounter) - { - textPrinter->delayCounter --; - } - else - { - textPrinter->state = 0; - } - return 3; - } - return 1; -} - -static void DecompressGlyphFont6(u16 glyph) -{ - const u16 *glyphs; - - glyphs = sFont6BrailleGlyphs + 0x100 * (glyph / 8) + 0x10 * (glyph % 8); - DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); - DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8); - DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); - DecompressGlyphTile(glyphs + 0x88, gCurGlyph.gfxBufferBottom + 8); - gCurGlyph.width = 0x10; - gCurGlyph.height = 0x10; -} - -u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese) -{ - return 0x10; -} diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index cdcdfc5da6..2f16f220aa 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -29,7 +29,7 @@ This file handles the screen where the player chooses which pokemon to give a pokeblock to. The subsequent scene of feeding the pokeblock to the pokemon is handled by - pokeblock_feed.c, and the rest of the pokeblock menu (and + pokeblock_feed.c, and the rest of the pokeblock menu (and other pokeblock-related functions) are in pokeblock.c */ @@ -57,14 +57,14 @@ struct UsePokeblockSession u8 mainState; u8 unused1; u8 timer; - u8 statId; + u8 condition; u8 numEnhancements; u8 unused2; bool8 monInTopHalf; - u8 conditionsBeforeBlock[FLAVOR_COUNT]; - u8 conditionsAfterBlock[FLAVOR_COUNT]; - u8 enhancements[FLAVOR_COUNT]; - s16 pokeblockStatBoosts[FLAVOR_COUNT]; + u8 conditionsBeforeBlock[CONDITION_COUNT]; + u8 conditionsAfterBlock[CONDITION_COUNT]; + u8 enhancements[CONDITION_COUNT]; + s16 pokeblockStatBoosts[CONDITION_COUNT]; u8 numSelections; // num in party + 1 (for Cancel) u8 curSelection; bool8 (*loadNewSelection)(void); @@ -73,7 +73,7 @@ struct UsePokeblockSession u8 natureText[34]; }; -// This struct is identical to PokenavMonList, the struct used for managing lists of pokemon in the pokenav +// This struct is identical to PokenavMonListItem, the struct used for managing lists of pokemon in the pokenav // Given that this screen is essentially duplicated in the poknav, this struct was probably the same one with // a more general name/purpose // TODO: Once the pokenav conditions screens are documented, resolve the above @@ -142,7 +142,7 @@ static void LoadAndCreateUpDownSprites(void); static void CalculateNumAdditionalSparkles(u8); static void PrintFirstEnhancement(void); static bool8 TryPrintNextEnhancement(void); -static void BufferEnhancedStatText(u8 *, u8, s16); +static void BufferEnhancedText(u8 *, u8, s16); static void PrintMenuWindowText(const u8 *); static void CalculatePokeblockEffectiveness(struct Pokeblock *, struct Pokemon *); static void SpriteCB_UpDown(struct Sprite *); @@ -178,22 +178,22 @@ static const u32 sGraphData_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_scree // The condition/flavors aren't listed in their normal order in this file, they're listed as shown on the graph going counter-clockwise // Normally they would go Cool/Spicy, Beauty/Dry, Cute/Sweet, Smart/Bitter, Tough/Sour (also graph order, but clockwise) -static const u32 sMonDataConditions[FLAVOR_COUNT] = +static const u32 sConditionToMonData[CONDITION_COUNT] = { - MON_DATA_COOL, - MON_DATA_TOUGH, - MON_DATA_SMART, - MON_DATA_CUTE, - MON_DATA_BEAUTY + [CONDITION_COOL] = MON_DATA_COOL, + [CONDITION_TOUGH] = MON_DATA_TOUGH, + [CONDITION_SMART] = MON_DATA_SMART, + [CONDITION_CUTE] = MON_DATA_CUTE, + [CONDITION_BEAUTY] = MON_DATA_BEAUTY }; -static const u8 sFlavors[FLAVOR_COUNT] = +static const u8 sConditionToFlavor[CONDITION_COUNT] = { - FLAVOR_SPICY, - FLAVOR_SOUR, - FLAVOR_BITTER, - FLAVOR_SWEET, - FLAVOR_DRY + [CONDITION_COOL] = FLAVOR_SPICY, + [CONDITION_TOUGH] = FLAVOR_SOUR, + [CONDITION_SMART] = FLAVOR_BITTER, + [CONDITION_CUTE] = FLAVOR_SWEET, + [CONDITION_BEAUTY] = FLAVOR_DRY }; static const u8 sNatureTextColors[] = @@ -243,7 +243,7 @@ static const struct BgTemplate sBgTemplates[4] = } }; -static const struct WindowTemplate sWindowTemplates[WIN_COUNT + 1] = +static const struct WindowTemplate sWindowTemplates[WIN_COUNT + 1] = { [WIN_NAME] = { .bg = 0, @@ -275,7 +275,7 @@ static const struct WindowTemplate sWindowTemplates[WIN_COUNT + 1] = DUMMY_WIN_TEMPLATE }; -static const struct WindowTemplate sUsePokeblockYesNoWinTemplate = +static const struct WindowTemplate sUsePokeblockYesNoWinTemplate = { .bg = 0, .tilemapLeft = 24, @@ -286,16 +286,16 @@ static const struct WindowTemplate sUsePokeblockYesNoWinTemplate = .baseBlock = 0x83 }; -static const u8 *const sContestStatNames[] = +static const u8 *const sConditionNames[CONDITION_COUNT] = { - gText_Coolness, - gText_Toughness, - gText_Smartness, - gText_Cuteness, - gText_Beauty3 + [CONDITION_COOL] = gText_Coolness, + [CONDITION_TOUGH] = gText_Toughness, + [CONDITION_SMART] = gText_Smartness, + [CONDITION_CUTE] = gText_Cuteness, + [CONDITION_BEAUTY] = gText_Beauty3 }; -static const struct SpriteSheet sSpriteSheet_UpDown = +static const struct SpriteSheet sSpriteSheet_UpDown = { gUsePokeblockUpDown_Gfx, 0x200, TAG_UP_DOWN }; @@ -305,16 +305,16 @@ static const struct SpritePalette sSpritePalette_UpDown = gUsePokeblockUpDown_Pal, TAG_UP_DOWN }; -static const s16 sUpDownCoordsOnGraph[FLAVOR_COUNT][2] = +static const s16 sUpDownCoordsOnGraph[CONDITION_COUNT][2] = { - {156, 36}, - {117, 59}, - {117, 118}, - {197, 118}, - {197, 59} + [CONDITION_COOL] = {156, 36}, + [CONDITION_TOUGH] = {117, 59}, + [CONDITION_SMART] = {117, 118}, + [CONDITION_CUTE] = {197, 118}, + [CONDITION_BEAUTY] = {197, 59} }; -static const struct OamData sOam_UpDown = +static const struct OamData sOam_UpDown = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -357,7 +357,7 @@ static const struct SpriteTemplate sSpriteTemplate_UpDown = .callback = SpriteCallbackDummy, }; -static const struct OamData sOam_Condition = +static const struct OamData sOam_Condition = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -471,7 +471,7 @@ static void VBlankCB_UsePokeblockMenu(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_81D2108(&sMenu->graph); + ConditionGraph_Draw(&sMenu->graph); ScanlineEffect_InitHBlankDmaTransfer(); } @@ -487,7 +487,7 @@ static void LoadUsePokeblockMenu(void) { case 0: sMenu->curMonSpriteId = SPRITE_NONE; - InitConditionGraphData(&sMenu->graph); + ConditionGraph_Init(&sMenu->graph); sInfo->mainState++; break; case 1: @@ -497,7 +497,7 @@ static void LoadUsePokeblockMenu(void) break; case 2: SetVBlankCallback(NULL); - CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + CpuFill32(0, (void *)(VRAM), VRAM_SIZE); sInfo->mainState++; break; case 3: @@ -537,19 +537,19 @@ static void LoadUsePokeblockMenu(void) sInfo->mainState++; break; case 11: - sub_81D2754(sMenu->graph.stat[0], sMenu->graph.unk14[0]); - InitConditionGraphState(&sMenu->graph); + ConditionGraph_CalcPositions(sMenu->graph.conditions[0], sMenu->graph.savedPositions[0]); + ConditionGraph_InitResetScanline(&sMenu->graph); sInfo->mainState++; break; case 12: - if (!SetupConditionGraphScanlineParams(&sMenu->graph)) + if (!ConditionGraph_ResetScanline(&sMenu->graph)) { - sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[0], sMenu->graph.unk14[0]); + ConditionGraph_SetNewPositions(&sMenu->graph, sMenu->graph.savedPositions[0], sMenu->graph.savedPositions[0]); sInfo->mainState++; } break; case 13: - sub_81D2230(&sMenu->graph); + ConditionGraph_Update(&sMenu->graph); sInfo->mainState++; break; case 14: @@ -767,8 +767,6 @@ static void ShowUsePokeblockMenuForResults(void) static void ShowPokeblockResults(void) { - u8 var; - switch (sInfo->mainState) { case 0: @@ -783,14 +781,13 @@ static void ShowPokeblockResults(void) break; case 2: CalculateConditionEnhancements(); - sub_81D2754(sInfo->conditionsAfterBlock, sMenu->graph.unk14[3]); - sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[sMenu->curLoadId], sMenu->graph.unk14[3]); + ConditionGraph_CalcPositions(sInfo->conditionsAfterBlock, sMenu->graph.savedPositions[CONDITION_GRAPH_LOAD_MAX - 1]); + ConditionGraph_SetNewPositions(&sMenu->graph, sMenu->graph.savedPositions[sMenu->curLoadId], sMenu->graph.savedPositions[CONDITION_GRAPH_LOAD_MAX - 1]); LoadAndCreateUpDownSprites(); sInfo->mainState++; break; case 3: - var = TransitionConditionGraph(&sMenu->graph); - if (!var) + if (!ConditionGraph_TryUpdate(&sMenu->graph)) { CalculateNumAdditionalSparkles(GetPartyIdFromSelectionId(sMenu->info.curSelection)); if (sMenu->info.curSelection != sMenu->info.numSelections - 1) @@ -871,14 +868,14 @@ static void AskUsePokeblock(void) u8 stringBuffer[0x40]; GetMonData(&gPlayerParty[GetPartyIdFromSelectionId(sMenu->info.curSelection)], MON_DATA_NICKNAME, stringBuffer); - StringGetEnd10(stringBuffer); + StringGet_Nickname(stringBuffer); StringAppend(stringBuffer, gText_GetsAPokeBlockQuestion); StringCopy(gStringVar4, stringBuffer); FillWindowPixelBuffer(WIN_TEXT, 17); DrawTextBorderOuter(WIN_TEXT, 151, 14); - AddTextPrinterParameterized(WIN_TEXT, 1, gStringVar4, 0, 1, 0, NULL); + AddTextPrinterParameterized(WIN_TEXT, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); PutWindowTilemap(WIN_TEXT); - CopyWindowToVram(WIN_TEXT, 3); + CopyWindowToVram(WIN_TEXT, COPYWIN_FULL); CreateYesNoMenu(&sUsePokeblockYesNoWinTemplate, 151, 14, 0); } @@ -906,20 +903,20 @@ static void PrintFirstEnhancement(void) DrawTextBorderOuter(WIN_TEXT, 151, 14); FillWindowPixelBuffer(WIN_TEXT, 17); - for (sInfo->statId = 0; sInfo->statId < FLAVOR_COUNT; sInfo->statId++) + for (sInfo->condition = 0; sInfo->condition < CONDITION_COUNT; sInfo->condition++) { - if (sInfo->enhancements[sInfo->statId] != 0) + if (sInfo->enhancements[sInfo->condition] != 0) break; } - if (sInfo->statId < FLAVOR_COUNT) - BufferEnhancedStatText(gStringVar4, sInfo->statId, sInfo->enhancements[sInfo->statId]); + if (sInfo->condition < CONDITION_COUNT) + BufferEnhancedText(gStringVar4, sInfo->condition, sInfo->enhancements[sInfo->condition]); else - BufferEnhancedStatText(gStringVar4, sInfo->statId, 0); + BufferEnhancedText(gStringVar4, sInfo->condition, 0); PrintMenuWindowText(gStringVar4); PutWindowTilemap(WIN_TEXT); - CopyWindowToVram(WIN_TEXT, 3); + CopyWindowToVram(WIN_TEXT, COPYWIN_FULL); } static bool8 TryPrintNextEnhancement(void) @@ -928,22 +925,22 @@ static bool8 TryPrintNextEnhancement(void) while (1) { - sInfo->statId++; - if (sInfo->statId < FLAVOR_COUNT) + sInfo->condition++; + if (sInfo->condition < CONDITION_COUNT) { - if (sInfo->enhancements[sInfo->statId] != 0) + if (sInfo->enhancements[sInfo->condition] != 0) break; } else { - sInfo->statId = FLAVOR_COUNT; + sInfo->condition = CONDITION_COUNT; return FALSE; } } - BufferEnhancedStatText(gStringVar4, sInfo->statId, sInfo->enhancements[sInfo->statId]); + BufferEnhancedText(gStringVar4, sInfo->condition, sInfo->enhancements[sInfo->condition]); PrintMenuWindowText(gStringVar4); - CopyWindowToVram(WIN_TEXT, 2); + CopyWindowToVram(WIN_TEXT, COPYWIN_GFX); return TRUE; } @@ -952,24 +949,24 @@ static void PrintWontEatAnymore(void) { FillWindowPixelBuffer(WIN_TEXT, 17); DrawTextBorderOuter(WIN_TEXT, 151, 14); - AddTextPrinterParameterized(WIN_TEXT, 1, gText_WontEatAnymore, 0, 1, 0, NULL); + AddTextPrinterParameterized(WIN_TEXT, FONT_NORMAL, gText_WontEatAnymore, 0, 1, 0, NULL); PutWindowTilemap(WIN_TEXT); - CopyWindowToVram(WIN_TEXT, 3); + CopyWindowToVram(WIN_TEXT, COPYWIN_FULL); } static void EraseMenuWindow(void) { rbox_fill_rectangle(WIN_TEXT); ClearWindowTilemap(WIN_TEXT); - CopyWindowToVram(WIN_TEXT, 3); + CopyWindowToVram(WIN_TEXT, COPYWIN_FULL); } static void PrintMenuWindowText(const u8 *message) { - AddTextPrinterParameterized(WIN_TEXT, 1, gStringVar4, 0, 1, 0, NULL); + AddTextPrinterParameterized(WIN_TEXT, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); } -static void BufferEnhancedStatText(u8 *dest, u8 statId, s16 enhancement) +static void BufferEnhancedText(u8 *dest, u8 condition, s16 enhancement) { switch (enhancement) { @@ -979,7 +976,7 @@ static void BufferEnhancedStatText(u8 *dest, u8 statId, s16 enhancement) case -32768 ... -1: // if < 0 if (enhancement) dest[(u16)enhancement] += 0; // something you can't imagine - StringCopy(dest, sContestStatNames[statId]); + StringCopy(dest, sConditionNames[condition]); StringAppend(dest, gText_WasEnhanced); break; case 0: @@ -992,36 +989,36 @@ static void GetMonConditions(struct Pokemon *mon, u8 *data) { u16 i; - for (i = 0; i < FLAVOR_COUNT; i++) - data[i] = GetMonData(mon, sMonDataConditions[i]); + for (i = 0; i < CONDITION_COUNT; i++) + data[i] = GetMonData(mon, sConditionToMonData[i]); } static void AddPokeblockToConditions(struct Pokeblock *pokeblock, struct Pokemon *mon) { u16 i; - s16 cstat; + s16 stat; u8 data; - if (GetMonData(mon, MON_DATA_SHEEN) != 255) + if (GetMonData(mon, MON_DATA_SHEEN) != MAX_SHEEN) { CalculatePokeblockEffectiveness(pokeblock, mon); - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) { - data = GetMonData(mon, sMonDataConditions[i]); - cstat = data + sInfo->pokeblockStatBoosts[i]; - if (cstat < 0) - cstat = 0; - if (cstat > 255) - cstat = 255; - data = cstat; - SetMonData(mon, sMonDataConditions[i], &data); + data = GetMonData(mon, sConditionToMonData[i]); + stat = data + sInfo->pokeblockStatBoosts[i]; + if (stat < 0) + stat = 0; + if (stat > MAX_CONDITION) + stat = MAX_CONDITION; + data = stat; + SetMonData(mon, sConditionToMonData[i], &data); } - cstat = (u8)(GetMonData(mon, MON_DATA_SHEEN)) + pokeblock->feel; - if (cstat > 255) - cstat = 255; + stat = (u8)(GetMonData(mon, MON_DATA_SHEEN)) + pokeblock->feel; + if (stat > MAX_SHEEN) + stat = MAX_SHEEN; - data = cstat; + data = stat; SetMonData(mon, MON_DATA_SHEEN, &data); } } @@ -1035,19 +1032,19 @@ static void CalculateConditionEnhancements(void) GetMonConditions(mon, sInfo->conditionsBeforeBlock); AddPokeblockToConditions(sInfo->pokeblock, mon); GetMonConditions(mon, sInfo->conditionsAfterBlock); - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) sInfo->enhancements[i] = sInfo->conditionsAfterBlock[i] - sInfo->conditionsBeforeBlock[i]; } static void CalculatePokeblockEffectiveness(struct Pokeblock *pokeblock, struct Pokemon *mon) { - s8 i, direction, taste; + s8 i, direction, flavor; - sInfo->pokeblockStatBoosts[0] = pokeblock->spicy; - sInfo->pokeblockStatBoosts[1] = pokeblock->sour; - sInfo->pokeblockStatBoosts[2] = pokeblock->bitter; - sInfo->pokeblockStatBoosts[3] = pokeblock->sweet; - sInfo->pokeblockStatBoosts[4] = pokeblock->dry; + sInfo->pokeblockStatBoosts[CONDITION_COOL] = pokeblock->spicy; + sInfo->pokeblockStatBoosts[CONDITION_TOUGH] = pokeblock->sour; + sInfo->pokeblockStatBoosts[CONDITION_SMART] = pokeblock->bitter; + sInfo->pokeblockStatBoosts[CONDITION_CUTE] = pokeblock->sweet; + sInfo->pokeblockStatBoosts[CONDITION_BEAUTY] = pokeblock->dry; if (gPokeblockGain > 0) direction = 1; @@ -1056,7 +1053,7 @@ static void CalculatePokeblockEffectiveness(struct Pokeblock *pokeblock, struct else return; - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) { s16 amount = sInfo->pokeblockStatBoosts[i]; s8 boost = amount / 10; @@ -1064,9 +1061,9 @@ static void CalculatePokeblockEffectiveness(struct Pokeblock *pokeblock, struct if (amount % 10 >= 5) // round to the nearest boost++; - taste = GetMonFlavorRelation(mon, sFlavors[i]); - if (taste == direction) - sInfo->pokeblockStatBoosts[i] += boost * taste; + flavor = GetMonFlavorRelation(mon, sConditionToFlavor[i]); + if (flavor == direction) + sInfo->pokeblockStatBoosts[i] += boost * flavor; } } @@ -1075,7 +1072,7 @@ static bool8 IsSheenMaxed(void) if (GetBoxOrPartyMonData(sMenu->party[sMenu->info.curSelection].boxId, sMenu->party[sMenu->info.curSelection].monId, MON_DATA_SHEEN, - NULL) == 255) + NULL) == MAX_SHEEN) return TRUE; else return FALSE; @@ -1125,7 +1122,7 @@ static void LoadAndCreateUpDownSprites(void) LoadSpritePalette(&sSpritePalette_UpDown); sInfo->numEnhancements = 0; - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) { if (sInfo->enhancements[i] != 0) { @@ -1235,7 +1232,7 @@ static void UpdateMonPic(u8 loadId) sMenu->curMonSpriteId = spriteId; gSprites[sMenu->curMonSpriteId].callback = SpriteCB_MonPic; gSprites[sMenu->curMonSpriteId].y2 -= 34; - sMenu->curMonTileStart = (void*)(OBJ_VRAM0 + (sMenu->curMonSheet * 32)); + sMenu->curMonTileStart = (void *)(OBJ_VRAM0 + (sMenu->curMonSheet * 32)); sMenu->curMonPalette = (sMenu->curMonPalette * 16) + 0x100; } } @@ -1316,14 +1313,14 @@ static bool8 LoadUsePokeblockMenuGfx(void) switch (sMenu->info.helperState) { case 0: - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 136 << 6, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 136 << 6, BG_COORD_SET); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); @@ -1368,7 +1365,7 @@ static bool8 LoadUsePokeblockMenuGfx(void) LoadBgTilemap(2, sMenu->tilemapBuffer, 1280, 0); LoadPalette(gConditionGraphData_Pal, 48, 32); LoadPalette(gConditionText_Pal, 240, 32); - SetConditionGraphIOWindows(2); + ConditionGraph_InitWindow(2); break; default: sMenu->info.helperState = 0; @@ -1389,23 +1386,23 @@ static void UpdateMonInfoText(u16 loadId, bool8 firstPrint) FillWindowPixelBuffer(WIN_NATURE, PIXEL_FILL(0)); if (sMenu->info.curSelection != sMenu->info.numSelections - 1) { - AddTextPrinterParameterized(WIN_NAME, 1, sMenu->monNameStrings[loadId], 0, 1, 0, NULL); + AddTextPrinterParameterized(WIN_NAME, FONT_NORMAL, sMenu->monNameStrings[loadId], 0, 1, 0, NULL); partyIndex = GetPartyIdFromSelectionId(sMenu->info.curSelection); nature = GetNature(&gPlayerParty[partyIndex]); str = StringCopy(sMenu->info.natureText, gText_NatureSlash); str = StringCopy(str, gNatureNamePointers[nature]); - AddTextPrinterParameterized3(WIN_NATURE, 1, 2, 1, sNatureTextColors, 0, sMenu->info.natureText); + AddTextPrinterParameterized3(WIN_NATURE, FONT_NORMAL, 2, 1, sNatureTextColors, 0, sMenu->info.natureText); } if (firstPrint) { - CopyWindowToVram(WIN_NAME, 3); - CopyWindowToVram(WIN_NATURE, 3); + CopyWindowToVram(WIN_NAME, COPYWIN_FULL); + CopyWindowToVram(WIN_NATURE, COPYWIN_FULL); } else { - CopyWindowToVram(WIN_NAME, 2); - CopyWindowToVram(WIN_NATURE, 2); + CopyWindowToVram(WIN_NAME, COPYWIN_GFX); + CopyWindowToVram(WIN_NATURE, COPYWIN_GFX); } } @@ -1419,7 +1416,7 @@ static void UpdateSelection(bool8 up) else newLoadId = sMenu->nextLoadId; - sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[sMenu->curLoadId], sMenu->graph.unk14[newLoadId]); + ConditionGraph_SetNewPositions(&sMenu->graph, sMenu->graph.savedPositions[sMenu->curLoadId], sMenu->graph.savedPositions[newLoadId]); if (sMenu->info.curSelection == sMenu->info.numSelections - 1) startedOnMon = FALSE; // moving off of Cancel @@ -1487,7 +1484,7 @@ static bool8 LoadNewSelection_CancelToMon(void) sMenu->info.helperState++; break; case 2: - if (!TryUpdateConditionMonTransitionOn(&sMenu->graph, &sMenu->curMonXOffset)) + if (!ConditionMenu_UpdateMonEnter(&sMenu->graph, &sMenu->curMonXOffset)) { // Load the new adjacent pokemon (not the one being shown) LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId); @@ -1514,7 +1511,7 @@ static bool8 LoadNewSelection_MonToCancel(void) switch (sMenu->info.helperState) { case 0: - if (!TryUpdateConditionMonTransitionOff(&sMenu->graph, &sMenu->curMonXOffset)) + if (!ConditionMenu_UpdateMonExit(&sMenu->graph, &sMenu->curMonXOffset)) sMenu->info.helperState++; break; case 1: @@ -1538,7 +1535,7 @@ static bool8 LoadNewSelection_MonToMon(void) switch (sMenu->info.helperState) { case 0: - TransitionConditionGraph(&sMenu->graph); + ConditionGraph_TryUpdate(&sMenu->graph); if (!MoveConditionMonOffscreen(&sMenu->curMonXOffset)) { UpdateMonPic(sMenu->curLoadId); @@ -1550,7 +1547,7 @@ static bool8 LoadNewSelection_MonToMon(void) sMenu->info.helperState++; break; case 2: - if (!TryUpdateConditionMonTransitionOn(&sMenu->graph, &sMenu->curMonXOffset)) + if (!ConditionMenu_UpdateMonEnter(&sMenu->graph, &sMenu->curMonXOffset)) { // Load the new adjacent pokemon (not the one being shown) LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId); @@ -1580,9 +1577,9 @@ static void SpriteCB_MonPic(struct Sprite *sprite) static void SpriteCB_SelectionIconPokeball(struct Sprite *sprite) { if (sprite->data[0] == sMenu->info.curSelection) - StartSpriteAnim(sprite, 0); + StartSpriteAnim(sprite, CONDITION_ICON_SELECTED); else - StartSpriteAnim(sprite, 1); + StartSpriteAnim(sprite, CONDITION_ICON_UNSELECTED); } static void SpriteCB_SelectionIconCancel(struct Sprite *sprite) @@ -1594,15 +1591,12 @@ static void SpriteCB_SelectionIconCancel(struct Sprite *sprite) } // Calculate the max id for sparkles/stars that appear around the pokemon on the condition screen -// All pokemon start with 1 sparkle (added by CreateConditionSparkleSprites), so the number here +1 +// All pokemon start with 1 sparkle (added by CreateConditionSparkleSprites), so the number here +1 // is the total number of sparkles that appear static void CalculateNumAdditionalSparkles(u8 monIndex) { u8 sheen = GetMonData(&gPlayerParty[monIndex], MON_DATA_SHEEN); - - sMenu->numSparkles[sMenu->curLoadId] = (sheen != 255) - ? sheen / (255 / (MAX_CONDITION_SPARKLES - 1) + 1) - : MAX_CONDITION_SPARKLES - 1; + sMenu->numSparkles[sMenu->curLoadId] = GET_NUM_CONDITION_SPARKLES(sheen); } static void LoadConditionGfx(void) diff --git a/src/util.c b/src/util.c index a4e3fa4cfc..32f31a26dd 100644 --- a/src/util.c +++ b/src/util.c @@ -253,7 +253,7 @@ u16 CalcCRC16WithTable(const u8 *data, u32 length) return ~crc; } -u32 CalcByteArraySum(const u8* data, u32 length) +u32 CalcByteArraySum(const u8 *data, u32 length) { u32 sum, i; for (sum = 0, i = 0; i < length; i++) diff --git a/src/walda_phrase.c b/src/walda_phrase.c index 18fb2791b2..025f900e5a 100644 --- a/src/walda_phrase.c +++ b/src/walda_phrase.c @@ -12,17 +12,20 @@ extern const u8 gText_Peekaboo[]; -// this file's functions static void CB2_HandleGivenWaldaPhrase(void); -static u32 GetWaldaPhraseInputCase(u8 *inputPtr); -static bool32 TryCalculateWallpaper(u16* backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase); -static void sub_81D9D5C(u8 *array, u8 *letterTableIds, u32 arg2, u32 arg3, u32 loopCount); -static u32 sub_81D9DAC(u8 *array, u32 arg1, u32 loopCount); -static void sub_81D9C90(u8 *array, s32 arg1, s32 arg2); -static void sub_81D9CDC(u8 *array, u32 loopCount, u8 arg2); +static u32 GetWaldaPhraseInputCase(u8 *); +static bool32 TryCalculateWallpaper(u16 *, u16 *, u8 *, u8 *, u16, u8 *); +static void SetWallpaperDataFromLetter(u8 *, u8 *, u32, u32, u32); +static u32 GetWallpaperDataBits(u8 *, u32, u32); +static void RotateWallpaperDataLeft(u8 *, s32, s32); +static void MaskWallpaperData(u8 *, u32, u8); -// only consonants are allowed, no vowels, some lowercase letters are missing -static const u8 sWaldaLettersTable[] = +// There are 32 (2^5) unique letters allowed in a successful phrase for Walda. +#define BITS_PER_LETTER 5 + +// The letters allowed in a successful phrase for Walda +// All vowels are excluded, as well as X/x, Y/y, l, r, t, v, w, and z. +static const u8 sWaldaLettersTable[1 << BITS_PER_LETTER] = { CHAR_B, CHAR_C, CHAR_D, CHAR_F, CHAR_G, CHAR_H, CHAR_J, CHAR_K, CHAR_L, CHAR_M, CHAR_N, CHAR_P, CHAR_Q, CHAR_R, CHAR_S, CHAR_T, CHAR_V, CHAR_W, CHAR_Z, CHAR_b, CHAR_c, CHAR_d, CHAR_f, CHAR_g, CHAR_h, CHAR_j, CHAR_k, CHAR_m, CHAR_n, CHAR_p, CHAR_q, CHAR_s @@ -30,9 +33,9 @@ static const u8 sWaldaLettersTable[] = enum { - PHRASE_GIVEN_NEW, + PHRASE_CHANGED, PHRASE_NO_CHANGE, - PHRASE_FIRST_ATTEMPT + PHRASE_EMPTY }; u16 TryBufferWaldaPhrase(void) @@ -56,13 +59,15 @@ static void CB2_HandleGivenWaldaPhrase(void) switch (gSpecialVar_0x8004) { - case PHRASE_FIRST_ATTEMPT: + case PHRASE_EMPTY: + // If saved phrase is also empty, set default phrase + // Otherwise keep saved phrase if (IsWaldaPhraseEmpty()) SetWaldaPhrase(gText_Peekaboo); else gSpecialVar_0x8004 = PHRASE_NO_CHANGE; break; - case PHRASE_GIVEN_NEW: + case PHRASE_CHANGED: SetWaldaPhrase(gStringVar2); break; case PHRASE_NO_CHANGE: @@ -76,12 +81,16 @@ static void CB2_HandleGivenWaldaPhrase(void) static u32 GetWaldaPhraseInputCase(u8 *inputPtr) { + // No input given if (inputPtr[0] == EOS) - return PHRASE_FIRST_ATTEMPT; + return PHRASE_EMPTY; + + // Input given is the same as saved phrase if (StringCompare(inputPtr, GetWaldaPhrasePtr()) == 0) return PHRASE_NO_CHANGE; - return PHRASE_GIVEN_NEW; + // Input is new phrase + return PHRASE_CHANGED; } u16 TryGetWallpaperWithWaldaPhrase(void) @@ -99,7 +108,7 @@ u16 TryGetWallpaperWithWaldaPhrase(void) } SetWaldaWallpaperLockedOrUnlocked(gSpecialVar_Result); - return (bool8)(gSpecialVar_Result); + return (bool8)gSpecialVar_Result; } static u8 GetLetterTableId(u8 letter) @@ -115,132 +124,155 @@ static u8 GetLetterTableId(u8 letter) return ARRAY_COUNT(sWaldaLettersTable); } -static bool32 TryCalculateWallpaper(u16* backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase) +// Attempts to generate a wallpaper based on the given trainer id and phrase. +// Returns TRUE if successful and sets the wallpaper results to the given pointers. +// Returns FALSE if no wallpaper was generated (Walda "didn't like" the phrase). +// A 9-byte array is used to calculate the wallpaper's data. +// The elements of this array are defined below. +#define BG_COLOR_LO data[0] +#define BG_COLOR_HI data[1] +#define FG_COLOR_LO data[2] +#define FG_COLOR_HI data[3] +#define ICON_ID data[4] +#define PATTERN_ID data[5] +#define TID_CHECK_HI data[6] +#define TID_CHECK_LO data[7] +#define KEY data[8] +#define NUM_WALLPAPER_DATA_BYTES 9 +#define TO_BIT_OFFSET(i) (3 + (8 * (i))) // Convert a position in the phrase to a bit number into the wallpaper data array +static bool32 TryCalculateWallpaper(u16 *backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase) { s32 i; - ALIGNED(2) u8 array[12]; - u8 charsByTableId[16]; + ALIGNED(2) u8 data[NUM_WALLPAPER_DATA_BYTES]; + u8 charsByTableId[WALDA_PHRASE_LENGTH]; u16 *ptr; - if (StringLength(phrase) != 15) + // Reject any phrase that does not use the full length + if (StringLength(phrase) != WALDA_PHRASE_LENGTH) return FALSE; - for (i = 0; i < 15; i++) + // Reject any phrase that uses characters not in sWaldaLettersTable + for (i = 0; i < WALDA_PHRASE_LENGTH; i++) { charsByTableId[i] = GetLetterTableId(phrase[i]); if (charsByTableId[i] == ARRAY_COUNT(sWaldaLettersTable)) return FALSE; } - for (i = 0; i < 14; i++) - { - sub_81D9D5C(array, charsByTableId, (5 * i), 3 + (8 * i), 5); - } + // Use the given phrase to populate the wallpaper data array + // The data array is 9 bytes (72 bits) long, and each letter contributes to 5 bits of the array + // Because the phrase is 15 letters long there are 75 bits from the phrase to distribute + // Therefore the last letter contributes to the last 2 bits of the array, and the remaining 3 bits wrap around + for (i = 0; i < WALDA_PHRASE_LENGTH - 1; i++) + SetWallpaperDataFromLetter(data, charsByTableId, BITS_PER_LETTER * i, TO_BIT_OFFSET(i), BITS_PER_LETTER); - sub_81D9D5C(array, charsByTableId, 70, 115, 2); + // Do first 2 bits of the last letter + SetWallpaperDataFromLetter(data, charsByTableId, BITS_PER_LETTER * (WALDA_PHRASE_LENGTH - 1), TO_BIT_OFFSET(WALDA_PHRASE_LENGTH - 1), 2); - if (sub_81D9DAC(array, 0, 3) != sub_81D9DAC(charsByTableId, 117, 3)) + // Check the first 3 bits of the data array against the remaining 3 bits of the last letter + // Reject the phrase if they are not already the same + if (GetWallpaperDataBits(data, 0, 3) != GetWallpaperDataBits(charsByTableId, TO_BIT_OFFSET(WALDA_PHRASE_LENGTH - 1) + 2, 3)) return FALSE; - sub_81D9C90(array, 9, 21); - sub_81D9C90(array, 8, array[8] & 0xF); - sub_81D9CDC(array, 8, array[8] >> 4); + // Perform some relatively arbitrary changes to the wallpaper data using the last byte (KEY) + RotateWallpaperDataLeft(data, NUM_WALLPAPER_DATA_BYTES, 21); + RotateWallpaperDataLeft(data, NUM_WALLPAPER_DATA_BYTES - 1, KEY & 0xF); + MaskWallpaperData(data, NUM_WALLPAPER_DATA_BYTES - 1, KEY >> 4); - if (array[6] != (array[0] ^ array[2] ^ array[4] ^ (trainerId >> 8))) + // Reject the results of any phrase that are 'incompatible' with the player's trainer id + if (TID_CHECK_HI != (BG_COLOR_LO ^ FG_COLOR_LO ^ ICON_ID ^ (trainerId >> 8))) + return FALSE; + if (TID_CHECK_LO != (BG_COLOR_HI ^ FG_COLOR_HI ^ PATTERN_ID ^ (trainerId & 0xFF))) return FALSE; - if (array[7] != (array[1] ^ array[3] ^ array[5] ^ (trainerId & 0xFF))) - return FALSE; - - ptr = (u16*)(&array[0]); + // Successful phrase, save resulting wallpaper + ptr = (u16 *) &BG_COLOR_LO; *backgroundClr = *ptr; - ptr = (u16*)(&array[2]); + ptr = (u16 *) &FG_COLOR_LO; *foregroundClr = *ptr; - *iconId = array[4]; - *patternId = array[5]; + *iconId = ICON_ID; + *patternId = PATTERN_ID; return TRUE; } -static void sub_81D9C90(u8 *array, s32 arg1, s32 arg2) +static void RotateWallpaperDataLeft(u8 *data, s32 size, s32 numShifts) { s32 i, j; - u8 var1, var2; + u8 temp1, temp2; - for (i = arg2 - 1; i != -1; i--) + for (i = numShifts - 1; i != -1; i--) { - var1 = (array[0] & 0x80) >> 7; + temp1 = (data[0] & (1 << 7)) >> 7; - for (j = arg1 - 1; j >= 0; j--) + for (j = size - 1; j >= 0; j--) { - var2 = (array[j] & 0x80) >> 7; - array[j] <<= 1; - array[j] |= var1; - var1 = var2; + temp2 = (data[j] & (1 << 7)) >> 7; + data[j] <<= 1; + data[j] |= temp1; + temp1 = temp2; } } } -static void sub_81D9CDC(u8 *array, u32 loopCount, u8 arg2) +static void MaskWallpaperData(u8 *data, u32 size, u8 mask) { u32 i; - arg2 |= (arg2 << 4); + mask |= (mask << 4); - for (i = 0; i < loopCount; i++) - { - array[i] ^= arg2; - } + for (i = 0; i < size; i++) + data[i] ^= mask; } -static bool8 sub_81D9D0C(u8 *array, u32 arg1) +static bool8 GetWallpaperDataBit(u8 *data, u32 bitNum) { - u32 arrayId = arg1 >> 3; - u32 bits = 0x80 >> (7 & arg1); + u32 i = bitNum / 8; + u32 flag = (1 << 7) >> (bitNum % 8); - return ((array[arrayId] & bits) != 0); + return (data[i] & flag) != 0; } -static void sub_81D9D28(u8 *array, u32 arg1) +static void SetWallpaperDataBit(u8 *data, u32 bitNum) { - u32 arrayId = arg1 >> 3; - u8 bits = 0x80 >> (7 & arg1); + u32 i = bitNum / 8; + u8 flag = (1 << 7) >> (bitNum % 8); - array[arrayId] |= bits; + data[i] |= flag; } -static void sub_81D9D40(u8 *array, u32 arg1) +static void ClearWallpaperDataBit(u8 *data, u32 bitNum) { - u32 arrayId = arg1 >> 3; - u8 bits = ~(0x80 >> (7 & arg1)); + u32 i = bitNum / 8; + u8 mask = ~((1 << 7) >> (bitNum % 8)); - array[arrayId] &= bits; + data[i] &= mask; } -static void sub_81D9D5C(u8 *array, u8 *letterTableIds, u32 arg2, u32 arg3, u32 loopCount) +static void SetWallpaperDataFromLetter(u8 *data, u8 *letterTableIds, u32 setOffset, u32 getOffset, u32 numBits) { u32 i; - for (i = 0; i < loopCount; i++) + for (i = 0; i < numBits; i++) { - if (sub_81D9D0C(letterTableIds, arg3 + i)) - sub_81D9D28(array, arg2 + i); + if (GetWallpaperDataBit(letterTableIds, getOffset + i)) + SetWallpaperDataBit(data, setOffset + i); else - sub_81D9D40(array, arg2 + i); + ClearWallpaperDataBit(data, setOffset + i); } } -static u32 sub_81D9DAC(u8 *array, u32 arg1, u32 loopCount) +static u32 GetWallpaperDataBits(u8 *data, u32 offset, u32 numBits) { - u32 ret, i; + u32 bits, i; - for (ret = 0, i = 0; i < loopCount; i++) + for (bits = 0, i = 0; i < numBits; i++) { - ret <<= 1; - ret |= sub_81D9D0C(array, arg1 + i); + bits <<= 1; + bits |= GetWallpaperDataBit(data, offset + i); } - return ret; + return bits; } diff --git a/src/wallclock.c b/src/wallclock.c index 6f9bc02aee..5e0fae3a13 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -41,6 +41,8 @@ static void SpriteCB_HourHand(struct Sprite *sprite); static void SpriteCB_PMIndicator(struct Sprite *sprite); static void SpriteCB_AMIndicator(struct Sprite *sprite); +#define sTaskId data[0] + #define tMinuteHandAngle data[0] #define tHourHandAngle data[1] #define tHours data[2] @@ -628,14 +630,14 @@ static void LoadWallClockGraphics(void) SetGpuReg(REG_OFFSET_BG2CNT, 0); SetGpuReg(REG_OFFSET_BG1CNT, 0); SetGpuReg(REG_OFFSET_BG0CNT, 0); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000); DmaClear32(3, (void *)OAM, OAM_SIZE); DmaClear16(3, (void *)PLTT, PLTT_SIZE); @@ -696,26 +698,26 @@ void CB2_StartWallClock(void) gTasks[taskId].tHourHandAngle = 300; spriteId = CreateSprite(&sSpriteTemplate_MinuteHand, 120, 80, 1); - gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 0; spriteId = CreateSprite(&sSpriteTemplate_HourHand, 120, 80, 0); - gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 1; spriteId = CreateSprite(&sSpriteTemplate_PM, 120, 80, 2); - gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].data[1] = 45; spriteId = CreateSprite(&sSpriteTemplate_AM, 120, 80, 2); - gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].data[1] = 90; WallClockInit(); - AddTextPrinterParameterized(1, 1, gText_Confirm3, 0, 1, 0, NULL); + AddTextPrinterParameterized(1, FONT_NORMAL, gText_Confirm3, 0, 1, 0, NULL); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(2); } @@ -744,26 +746,26 @@ void CB2_ViewWallClock(void) } spriteId = CreateSprite(&sSpriteTemplate_MinuteHand, 120, 80, 1); - gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 0; spriteId = CreateSprite(&sSpriteTemplate_HourHand, 120, 80, 0); - gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 1; spriteId = CreateSprite(&sSpriteTemplate_PM, 120, 80, 2); - gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].data[1] = angle1; spriteId = CreateSprite(&sSpriteTemplate_AM, 120, 80, 2); - gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].data[1] = angle2; WallClockInit(); - AddTextPrinterParameterized(1, 1, gText_Cancel4, 0, 1, 0, NULL); + AddTextPrinterParameterized(1, FONT_NORMAL, gText_Cancel4, 0, 1, 0, NULL); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(2); } @@ -828,7 +830,7 @@ static void Task_SetClock_HandleInput(u8 taskId) static void Task_SetClock_AskConfirm(u8 taskId) { DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x250, 0x0d); - AddTextPrinterParameterized(0, 1, gText_IsThisTheCorrectTime, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, gText_IsThisTheCorrectTime, 0, 1, 0, NULL); PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); CreateYesNoMenu(&sWindowTemplate_ConfirmYesNo, 0x250, 0x0d, 1); @@ -1015,7 +1017,7 @@ static void InitClockWithRtc(u8 taskId) static void SpriteCB_MinuteHand(struct Sprite *sprite) { - u16 angle = gTasks[sprite->data[0]].tMinuteHandAngle; + u16 angle = gTasks[sprite->sTaskId].tMinuteHandAngle; s16 sin = Sin2(angle) / 16; s16 cos = Cos2(angle) / 16; u16 x, y; @@ -1035,7 +1037,7 @@ static void SpriteCB_MinuteHand(struct Sprite *sprite) static void SpriteCB_HourHand(struct Sprite *sprite) { - u16 angle = gTasks[sprite->data[0]].tHourHandAngle; + u16 angle = gTasks[sprite->sTaskId].tHourHandAngle; s16 sin = Sin2(angle) / 16; s16 cos = Cos2(angle) / 16; u16 x, y; @@ -1053,58 +1055,44 @@ static void SpriteCB_HourHand(struct Sprite *sprite) sprite->y2 = y; } +#define sAngle data[1] + static void SpriteCB_PMIndicator(struct Sprite *sprite) { - if (gTasks[sprite->data[0]].tPeriod != PERIOD_AM) + if (gTasks[sprite->sTaskId].tPeriod != PERIOD_AM) { - if (sprite->data[1] >= 60 && sprite->data[1] < 90) - { - sprite->data[1] += 5; - } - if (sprite->data[1] < 60) - { - sprite->data[1]++; - } + if (sprite->sAngle >= 60 && sprite->sAngle < 90) + sprite->sAngle += 5; + if (sprite->sAngle < 60) + sprite->sAngle++; } else { - if (sprite->data[1] >= 46 && sprite->data[1] < 76) - { - sprite->data[1] -= 5; - } - if (sprite->data[1] > 75) - { - sprite->data[1]--; - } + if (sprite->sAngle >= 46 && sprite->sAngle < 76) + sprite->sAngle -= 5; + if (sprite->sAngle > 75) + sprite->sAngle--; } - sprite->x2 = Cos2(sprite->data[1]) * 30 / 0x1000; - sprite->y2 = Sin2(sprite->data[1]) * 30 / 0x1000; + sprite->x2 = Cos2(sprite->sAngle) * 30 / 0x1000; + sprite->y2 = Sin2(sprite->sAngle) * 30 / 0x1000; } static void SpriteCB_AMIndicator(struct Sprite *sprite) { - if (gTasks[sprite->data[0]].tPeriod != PERIOD_AM) + if (gTasks[sprite->sTaskId].tPeriod != PERIOD_AM) { - if (sprite->data[1] >= 105 && sprite->data[1] < 135) - { - sprite->data[1] += 5; - } - if (sprite->data[1] < 105) - { - sprite->data[1]++; - } + if (sprite->sAngle >= 105 && sprite->sAngle < 135) + sprite->sAngle += 5; + if (sprite->sAngle < 105) + sprite->sAngle++; } else { - if (sprite->data[1] >= 91 && sprite->data[1] < 121) - { - sprite->data[1] -= 5; - } - if (sprite->data[1] > 120) - { - sprite->data[1]--; - } + if (sprite->sAngle >= 91 && sprite->sAngle < 121) + sprite->sAngle -= 5; + if (sprite->sAngle > 120) + sprite->sAngle--; } - sprite->x2 = Cos2(sprite->data[1]) * 30 / 0x1000; - sprite->y2 = Sin2(sprite->data[1]) * 30 / 0x1000; + sprite->x2 = Cos2(sprite->sAngle) * 30 / 0x1000; + sprite->y2 = Sin2(sprite->sAngle) * 30 / 0x1000; } diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 8bcb176055..8e197d547e 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -14,113 +14,153 @@ #include "tv.h" #include "link.h" #include "script.h" +#include "battle_debug.h" #include "battle_pike.h" #include "battle_pyramid.h" #include "constants/abilities.h" +#include "constants/battle_config.h" #include "constants/game_stat.h" #include "constants/items.h" #include "constants/layouts.h" -#include "constants/maps.h" #include "constants/weather.h" extern const u8 EventScript_RepelWoreOff[]; -#define NUM_FEEBAS_SPOTS 6 +#define MAX_ENCOUNTER_RATE 2880 + +#define NUM_FEEBAS_SPOTS 6 + +// Number of accessible fishing spots in each section of Route 119 +// Each section is an area of the route between the y coordinates in sRoute119WaterTileData +#define NUM_FISHING_SPOTS_1 131 +#define NUM_FISHING_SPOTS_2 167 +#define NUM_FISHING_SPOTS_3 149 +#define NUM_FISHING_SPOTS (NUM_FISHING_SPOTS_1 + NUM_FISHING_SPOTS_2 + NUM_FISHING_SPOTS_3) + +enum { + WILD_AREA_LAND, + WILD_AREA_WATER, + WILD_AREA_ROCKS, + WILD_AREA_FISHING, +}; + +#define WILD_CHECK_REPEL (1 << 0) +#define WILD_CHECK_KEEN_EYE (1 << 1) + +#define HEADER_NONE 0xFFFF -// this file's functions static u16 FeebasRandom(void); static void FeebasSeedRng(u16 seed); static bool8 IsWildLevelAllowedByRepel(u8 level); static void ApplyFluteEncounterRateMod(u32 *encRate); static void ApplyCleanseTagEncounterRateMod(u32 *encRate); -static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex); +static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u16 ability, u8 *monIndex); static bool8 IsAbilityAllowingEncounter(u8 level); -// EWRAM vars EWRAM_DATA static u8 sWildEncountersDisabled = 0; EWRAM_DATA static u32 sFeebasRngValue = 0; +EWRAM_DATA bool8 gIsFishingEncounter = 0; +EWRAM_DATA bool8 gIsSurfingEncounter = 0; #include "data/wild_encounters.h" -//Special Feebas-related data. -const struct WildPokemon gWildFeebasRoute119Data = {20, 25, SPECIES_FEEBAS}; +static const struct WildPokemon sWildFeebas = {20, 25, SPECIES_FEEBAS}; -const u16 gRoute119WaterTileData[] = +static const u16 sRoute119WaterTileData[] = { - 0, 0x2D, 0, - 0x2E, 0x5B, 0x83, - 0x5C, 0x8B, 0x12A, +//yMin, yMax, numSpots in previous sections + 0, 45, 0, + 46, 91, NUM_FISHING_SPOTS_1, + 92, 139, NUM_FISHING_SPOTS_1 + NUM_FISHING_SPOTS_2, }; -// code void DisableWildEncounters(bool8 disabled) { sWildEncountersDisabled = disabled; } -static u16 GetRoute119WaterTileNum(s16 x, s16 y, u8 section) +// Each fishing spot on Route 119 is given a number between 1 and NUM_FISHING_SPOTS inclusive. +// The number is determined by counting the valid fishing spots left to right top to bottom. +// The map is divided into three sections, with each section having a pre-counted number of +// fishing spots to start from to avoid counting a large number of spots at the bottom of the map. +// Note that a spot is considered valid if it is surfable and not a waterfall. To exclude all +// of the inaccessible water metatiles (so that they can't be selected as a Feebas spot) they +// use a different metatile that isn't actually surfable because it has MB_NORMAL instead. +// This function is given the coordinates and section of a fishing spot and returns which number it is. +static u16 GetFeebasFishingSpotId(s16 targetX, s16 targetY, u8 section) { - u16 xCur; - u16 yCur; - u16 yMin = gRoute119WaterTileData[section * 3 + 0]; - u16 yMax = gRoute119WaterTileData[section * 3 + 1]; - u16 tileNum = gRoute119WaterTileData[section * 3 + 2]; + u16 x, y; + u16 yMin = sRoute119WaterTileData[section * 3 + 0]; + u16 yMax = sRoute119WaterTileData[section * 3 + 1]; + u16 spotId = sRoute119WaterTileData[section * 3 + 2]; - for (yCur = yMin; yCur <= yMax; yCur++) + for (y = yMin; y <= yMax; y++) { - for (xCur = 0; xCur < gMapHeader.mapLayout->width; xCur++) + for (x = 0; x < gMapHeader.mapLayout->width; x++) { - u8 tileBehaviorId = MapGridGetMetatileBehaviorAt(xCur + 7, yCur + 7); - if (MetatileBehavior_IsSurfableAndNotWaterfall(tileBehaviorId) == TRUE) + u8 behavior = MapGridGetMetatileBehaviorAt(x + MAP_OFFSET, y + MAP_OFFSET); + if (MetatileBehavior_IsSurfableAndNotWaterfall(behavior) == TRUE) { - tileNum++; - if (x == xCur && y == yCur) - return tileNum; + spotId++; + if (targetX == x && targetY == y) + return spotId; } } } - return tileNum + 1; + return spotId + 1; } static bool8 CheckFeebas(void) { u8 i; u16 feebasSpots[NUM_FEEBAS_SPOTS]; - s16 x; - s16 y; + s16 x, y; u8 route119Section = 0; - u16 waterTileNum; + u16 spotId; if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE119) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE119)) { GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - x -= 7; - y -= 7; + x -= MAP_OFFSET; + y -= MAP_OFFSET; - if (y >= gRoute119WaterTileData[3 * 0 + 0] && y <= gRoute119WaterTileData[3 * 0 + 1]) + // Get which third of the map the player is in + if (y >= sRoute119WaterTileData[3 * 0 + 0] && y <= sRoute119WaterTileData[3 * 0 + 1]) route119Section = 0; - if (y >= gRoute119WaterTileData[3 * 1 + 0] && y <= gRoute119WaterTileData[3 * 1 + 1]) + if (y >= sRoute119WaterTileData[3 * 1 + 0] && y <= sRoute119WaterTileData[3 * 1 + 1]) route119Section = 1; - if (y >= gRoute119WaterTileData[3 * 2 + 0] && y <= gRoute119WaterTileData[3 * 2 + 1]) + if (y >= sRoute119WaterTileData[3 * 2 + 0] && y <= sRoute119WaterTileData[3 * 2 + 1]) route119Section = 2; - if (Random() % 100 > 49) // 50% chance of encountering Feebas + // 50% chance of encountering Feebas (assuming this is a Feebas spot) + if (Random() % 100 > 49) return FALSE; FeebasSeedRng(gSaveBlock1Ptr->dewfordTrends[0].rand); + + // Assign each Feebas spot to a random fishing spot. + // Randomness is fixed depending on the seed above. for (i = 0; i != NUM_FEEBAS_SPOTS;) { - feebasSpots[i] = FeebasRandom() % 447; + feebasSpots[i] = FeebasRandom() % NUM_FISHING_SPOTS; if (feebasSpots[i] == 0) - feebasSpots[i] = 447; + feebasSpots[i] = NUM_FISHING_SPOTS; + + // < 1 below is a pointless check, it will never be TRUE. + // >= 4 to skip fishing spots 1-3, because these are inaccessible + // spots at the top of the map, at (9,7), (7,13), and (15,16). + // The first accessible fishing spot is spot 4 at (18,18). if (feebasSpots[i] < 1 || feebasSpots[i] >= 4) i++; } - waterTileNum = GetRoute119WaterTileNum(x, y, route119Section); + + // Check which fishing spot the player is at, and see if + // it matches any of the Feebas spots. + spotId = GetFeebasFishingSpotId(x, y, route119Section); for (i = 0; i < NUM_FEEBAS_SPOTS; i++) { - if (waterTileNum == feebasSpots[i]) + if (spotId == feebasSpots[i]) return TRUE; } } @@ -138,6 +178,7 @@ static void FeebasSeedRng(u16 seed) sFeebasRngValue = seed; } +// LAND_WILD_COUNT static u8 ChooseWildMonIndex_Land(void) { u8 rand = Random() % ENCOUNTER_CHANCE_LAND_MONS_TOTAL; @@ -168,6 +209,7 @@ static u8 ChooseWildMonIndex_Land(void) return 11; } +// ROCK_WILD_COUNT / WATER_WILD_COUNT static u8 ChooseWildMonIndex_WaterRock(void) { u8 rand = Random() % ENCOUNTER_CHANCE_WATER_MONS_TOTAL; @@ -184,6 +226,7 @@ static u8 ChooseWildMonIndex_WaterRock(void) return 4; } +// FISH_WILD_COUNT static u8 ChooseWildMonIndex_Fishing(u8 rod) { u8 wildMonIndex = 0; @@ -246,7 +289,7 @@ static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon) // check ability for max level mon if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) { - u8 ability = GetMonAbility(&gPlayerParty[0]); + u16 ability = GetMonAbility(&gPlayerParty[0]); if (ability == ABILITY_HUSTLE || ability == ABILITY_VITAL_SPIRIT || ability == ABILITY_PRESSURE) { if (Random() % 2 == 0) @@ -256,7 +299,6 @@ static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon) rand--; } } - return min + rand; } @@ -267,7 +309,7 @@ static u16 GetCurrentMapWildMonHeaderId(void) for (i = 0; ; i++) { const struct WildPokemonHeader *wildHeader = &gWildMonHeaders[i]; - if (wildHeader->mapGroup == 0xFF) + if (wildHeader->mapGroup == MAP_GROUP(UNDEFINED)) break; if (gWildMonHeaders[i].mapGroup == gSaveBlock1Ptr->location.mapGroup && @@ -277,7 +319,7 @@ static u16 GetCurrentMapWildMonHeaderId(void) gSaveBlock1Ptr->location.mapNum == MAP_NUM(ALTERING_CAVE)) { u16 alteringCaveId = VarGet(VAR_ALTERING_CAVE_WILD_SET); - if (alteringCaveId > 8) + if (alteringCaveId >= NUM_ALTERING_CAVE_TABLES) alteringCaveId = 0; i += alteringCaveId; @@ -287,7 +329,7 @@ static u16 GetCurrentMapWildMonHeaderId(void) } } - return -1; + return HEADER_NONE; } static u8 PickWildMonNature(void) @@ -325,7 +367,7 @@ static u8 PickWildMonNature(void) // check synchronize for a pokemon with the same ability if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG) && GetMonAbility(&gPlayerParty[0]) == ABILITY_SYNCHRONIZE - && Random() % 2 == 0) + && ((B_SYNCHRONIZE_NATURE >= GEN_8) || Random() % 2 == 0)) { return GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY) % NUM_NATURES; } @@ -365,24 +407,13 @@ static void CreateWildMon(u16 species, u8 level) else gender = MON_FEMALE; - CreateMonWithGenderNatureLetter(&gEnemyParty[0], species, level, 32, gender, PickWildMonNature(), 0); + CreateMonWithGenderNatureLetter(&gEnemyParty[0], species, level, USE_RANDOM_IVS, gender, PickWildMonNature(), 0); return; } - CreateMonWithNature(&gEnemyParty[0], species, level, 32, PickWildMonNature()); + CreateMonWithNature(&gEnemyParty[0], species, level, USE_RANDOM_IVS, PickWildMonNature()); } -enum -{ - WILD_AREA_LAND, - WILD_AREA_WATER, - WILD_AREA_ROCKS, - WILD_AREA_FISHING, -}; - -#define WILD_CHECK_REPEL 0x1 -#define WILD_CHECK_KEEN_EYE 0x2 - static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 area, u8 flags) { u8 wildMonIndex = 0; @@ -395,12 +426,30 @@ static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 ar break; if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex)) break; + if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex)) + break; + if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex)) + break; + if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex)) + break; + if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex)) + break; wildMonIndex = ChooseWildMonIndex_Land(); break; case WILD_AREA_WATER: + if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex)) + break; if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex)) break; + if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex)) + break; + if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex)) + break; + if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex)) + break; + if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex)) + break; wildMonIndex = ChooseWildMonIndex_WaterRock(); break; @@ -436,7 +485,7 @@ static bool8 SetUpMassOutbreakEncounter(u8 flags) return FALSE; CreateWildMon(gSaveBlock1Ptr->outbreakPokemonSpecies, gSaveBlock1Ptr->outbreakPokemonLevel); - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) SetMonMoveSlot(&gEnemyParty[0], gSaveBlock1Ptr->outbreakPokemonMoves[i], i); return TRUE; @@ -444,7 +493,7 @@ static bool8 SetUpMassOutbreakEncounter(u8 flags) static bool8 DoMassOutbreakEncounterTest(void) { - if (gSaveBlock1Ptr->outbreakPokemonSpecies != 0 + if (gSaveBlock1Ptr->outbreakPokemonSpecies != SPECIES_NONE && gSaveBlock1Ptr->location.mapNum == gSaveBlock1Ptr->outbreakLocationMapNum && gSaveBlock1Ptr->location.mapGroup == gSaveBlock1Ptr->outbreakLocationMapGroup) { @@ -456,7 +505,7 @@ static bool8 DoMassOutbreakEncounterTest(void) static bool8 DoWildEncounterRateDiceRoll(u16 encounterRate) { - if (Random() % 2880 < encounterRate) + if (Random() % MAX_ENCOUNTER_RATE < encounterRate) return TRUE; else return FALSE; @@ -485,9 +534,17 @@ static bool8 DoWildEncounterRateTest(u32 encounterRate, bool8 ignoreAbility) encounterRate *= 2; else if (ability == ABILITY_SAND_VEIL && gSaveBlock1Ptr->weather == WEATHER_SANDSTORM) encounterRate /= 2; + else if (ability == ABILITY_SNOW_CLOAK && gSaveBlock1Ptr->weather == WEATHER_SNOW) + encounterRate /= 2; + else if (ability == ABILITY_QUICK_FEET) + encounterRate /= 2; + else if (ability == ABILITY_INFILTRATOR) + encounterRate /= 2; + else if (ability == ABILITY_NO_GUARD) + encounterRate = encounterRate * 3 / 2; } - if (encounterRate > 2880) - encounterRate = 2880; + if (encounterRate > MAX_ENCOUNTER_RATE) + encounterRate = MAX_ENCOUNTER_RATE; return DoWildEncounterRateDiceRoll(encounterRate); } @@ -519,7 +576,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi return FALSE; headerId = GetCurrentMapWildMonHeaderId(); - if (headerId == 0xFFFF) + if (headerId == HEADER_NONE) { if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS) { @@ -582,7 +639,17 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi // try a regular wild land encounter if (TryGenerateWildMon(gWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE) { - BattleSetup_StartWildBattle(); + if (TryDoDoubleWildBattle()) + { + struct Pokemon mon1 = gEnemyParty[0]; + TryGenerateWildMon(gWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_KEEN_EYE); + gEnemyParty[1] = mon1; + BattleSetup_StartDoubleWildBattle(); + } + else + { + BattleSetup_StartWildBattle(); + } return TRUE; } @@ -590,7 +657,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi } } else if (MetatileBehavior_IsWaterWildEncounter(currMetaTileBehavior) == TRUE - || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(currMetaTileBehavior) == TRUE)) + || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridgeOverWater(currMetaTileBehavior) == TRUE)) { if (AreLegendariesInSootopolisPreventingEncounters() == TRUE) return FALSE; @@ -614,7 +681,18 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi { if (TryGenerateWildMon(gWildMonHeaders[headerId].waterMonsInfo, WILD_AREA_WATER, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE) { - BattleSetup_StartWildBattle(); + gIsSurfingEncounter = TRUE; + if (TryDoDoubleWildBattle()) + { + struct Pokemon mon1 = gEnemyParty[0]; + TryGenerateWildMon(gWildMonHeaders[headerId].waterMonsInfo, WILD_AREA_WATER, WILD_CHECK_KEEN_EYE); + gEnemyParty[1] = mon1; + BattleSetup_StartDoubleWildBattle(); + } + else + { + BattleSetup_StartWildBattle(); + } return TRUE; } @@ -630,7 +708,7 @@ void RockSmashWildEncounter(void) { u16 headerId = GetCurrentMapWildMonHeaderId(); - if (headerId != 0xFFFF) + if (headerId != HEADER_NONE) { const struct WildPokemonInfo *wildPokemonInfo = gWildMonHeaders[headerId].rockSmashMonsInfo; @@ -638,8 +716,8 @@ void RockSmashWildEncounter(void) { gSpecialVar_Result = FALSE; } - else if (DoWildEncounterRateTest(wildPokemonInfo->encounterRate, 1) == TRUE - && TryGenerateWildMon(wildPokemonInfo, 2, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE) + else if (DoWildEncounterRateTest(wildPokemonInfo->encounterRate, TRUE) == TRUE + && TryGenerateWildMon(wildPokemonInfo, WILD_AREA_ROCKS, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE) { BattleSetup_StartWildBattle(); gSpecialVar_Result = TRUE; @@ -662,7 +740,7 @@ bool8 SweetScentWildEncounter(void) PlayerGetDestCoords(&x, &y); headerId = GetCurrentMapWildMonHeaderId(); - if (headerId == 0xFFFF) + if (headerId == HEADER_NONE) { if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS) { @@ -732,7 +810,7 @@ bool8 DoesCurrentMapHaveFishingMons(void) { u16 headerId = GetCurrentMapWildMonHeaderId(); - if (headerId != 0xFFFF && gWildMonHeaders[headerId].fishingMonsInfo != NULL) + if (headerId != HEADER_NONE && gWildMonHeaders[headerId].fishingMonsInfo != NULL) return TRUE; else return FALSE; @@ -744,9 +822,9 @@ void FishingWildEncounter(u8 rod) if (CheckFeebas() == TRUE) { - u8 level = ChooseWildMonLevel(&gWildFeebasRoute119Data); + u8 level = ChooseWildMonLevel(&sWildFeebas); - species = gWildFeebasRoute119Data.species; + species = sWildFeebas.species; CreateWildMon(species, level); } else @@ -755,6 +833,7 @@ void FishingWildEncounter(u8 rod) } IncrementGameStat(GAME_STAT_FISHING_CAPTURES); SetPokemonAnglerSpecies(species); + gIsFishingEncounter = TRUE; BattleSetup_StartWildBattle(); } @@ -766,7 +845,7 @@ u16 GetLocalWildMon(bool8 *isWaterMon) *isWaterMon = FALSE; headerId = GetCurrentMapWildMonHeaderId(); - if (headerId == 0xFFFF) + if (headerId == HEADER_NONE) return SPECIES_NONE; landMonsInfo = gWildMonHeaders[headerId].landMonsInfo; waterMonsInfo = gWildMonHeaders[headerId].waterMonsInfo; @@ -798,7 +877,7 @@ u16 GetLocalWaterMon(void) { u16 headerId = GetCurrentMapWildMonHeaderId(); - if (headerId != 0xFFFF) + if (headerId != HEADER_NONE) { const struct WildPokemonInfo *waterMonsInfo = gWildMonHeaders[headerId].waterMonsInfo; @@ -825,7 +904,7 @@ bool8 UpdateRepelCounter(void) VarSet(VAR_REPEL_STEP_COUNT, steps); if (steps == 0) { - ScriptContext1_SetupScript(EventScript_RepelWoreOff); + ScriptContext_SetupScript(EventScript_RepelWoreOff); return TRUE; } } @@ -857,7 +936,7 @@ static bool8 IsWildLevelAllowedByRepel(u8 wildLevel) static bool8 IsAbilityAllowingEncounter(u8 level) { - u8 ability; + u16 ability; if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) return TRUE; @@ -894,7 +973,7 @@ static bool8 TryGetRandomWildMonIndexByType(const struct WildPokemon *wildMon, u return TRUE; } -static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex) +static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u16 ability, u8 *monIndex) { if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) return FALSE; @@ -919,3 +998,16 @@ static void ApplyCleanseTagEncounterRateMod(u32 *encRate) if (GetMonData(&gPlayerParty[0], MON_DATA_HELD_ITEM) == ITEM_CLEANSE_TAG) *encRate = *encRate * 2 / 3; } + +bool8 TryDoDoubleWildBattle(void) +{ + if (GetSafariZoneFlag() || GetMonsStateToDoubles() != PLAYER_HAS_TWO_USABLE_MONS) + return FALSE; + else if (B_FLAG_FORCE_DOUBLE_WILD != 0 && FlagGet(B_FLAG_FORCE_DOUBLE_WILD)) + return TRUE; + #if B_DOUBLE_WILD_CHANCE != 0 + else if ((Random() % 100) + 1 < B_DOUBLE_WILD_CHANCE) + return TRUE; + #endif + return FALSE; +} diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index dbc71d6345..40e4bb84df 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -51,9 +51,9 @@ static void Task_WirelessCommunicationScreen(u8); static void WCSS_AddTextPrinterParameterized(u8, u8, const u8 *, u8, u8, u8); static bool32 UpdateCommunicationCounts(u32 *, u32 *, u32 *, u8); -static const u16 sBgTiles_Pal[] = INCBIN_U16("graphics/interface/wireless_info_screen.gbapal"); -static const u32 sBgTiles_Gfx[] = INCBIN_U32("graphics/interface/wireless_info_screen.4bpp.lz"); -static const u32 sBgTiles_Tilemap[] = INCBIN_U32("graphics/interface/wireless_info_screen.bin.lz"); +static const u16 sBgTiles_Pal[] = INCBIN_U16("graphics/link/wireless_info_screen.gbapal"); +static const u32 sBgTiles_Gfx[] = INCBIN_U32("graphics/link/wireless_info_screen.4bpp.lz"); +static const u32 sBgTiles_Tilemap[] = INCBIN_U32("graphics/link/wireless_info_screen.bin.lz"); static const struct BgTemplate sBgTemplates[] = { { @@ -114,8 +114,8 @@ static const u8 sActivityGroupInfo[][3] = { {ACTIVITY_BATTLE_DOUBLE, GROUPTYPE_BATTLE, 2}, {ACTIVITY_BATTLE_MULTI, GROUPTYPE_BATTLE, 4}, {ACTIVITY_TRADE, GROUPTYPE_TRADE, 2}, - {ACTIVITY_WONDER_CARD, GROUPTYPE_TOTAL, 2}, - {ACTIVITY_WONDER_NEWS, GROUPTYPE_TOTAL, 2}, + {ACTIVITY_WONDER_CARD_DUP, GROUPTYPE_TOTAL, 2}, + {ACTIVITY_WONDER_NEWS_DUP, GROUPTYPE_TOTAL, 2}, {ACTIVITY_POKEMON_JUMP, GROUPTYPE_TOTAL, 0}, {ACTIVITY_BERRY_CRUSH, GROUPTYPE_TOTAL, 0}, {ACTIVITY_BERRY_PICK, GROUPTYPE_TOTAL, 0}, @@ -132,8 +132,8 @@ static const u8 sActivityGroupInfo[][3] = { {ACTIVITY_NPCTALK | IN_UNION_ROOM, GROUPTYPE_UNION, 2}, {ACTIVITY_ACCEPT | IN_UNION_ROOM, GROUPTYPE_UNION, 1}, {ACTIVITY_DECLINE | IN_UNION_ROOM, GROUPTYPE_UNION, 1}, - {ACTIVITY_WONDER_CARD2, GROUPTYPE_TOTAL, 2}, - {ACTIVITY_WONDER_NEWS2, GROUPTYPE_TOTAL, 2}, + {ACTIVITY_WONDER_CARD, GROUPTYPE_TOTAL, 2}, + {ACTIVITY_WONDER_NEWS, GROUPTYPE_TOTAL, 2}, {ACTIVITY_CONTEST_COOL, GROUPTYPE_TOTAL, 0}, {ACTIVITY_CONTEST_BEAUTY, GROUPTYPE_TOTAL, 0}, {ACTIVITY_CONTEST_CUTE, GROUPTYPE_TOTAL, 0}, @@ -189,10 +189,10 @@ static void CB2_InitWirelessCommunicationScreen(void) sStatusScreen->taskId = CreateTask(Task_WirelessCommunicationScreen, 0); sStatusScreen->rfuTaskId = CreateTask_ListenToWireless(); sStatusScreen->prevGroupCounts[GROUPTYPE_TOTAL] = 1; - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); LoadPalette(sBgTiles_Pal, 0x00, 0x20); Menu_LoadStdPalAt(0xF0); DynamicPlaceholderTextUtil_Reset(); @@ -236,16 +236,16 @@ static void PrintHeaderTexts(void) FillWindowPixelBuffer(0, PIXEL_FILL(0)); FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0)); - WCSS_AddTextPrinterParameterized(0, 1, sHeaderTexts[0], GetStringCenterAlignXOffset(1, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN); + WCSS_AddTextPrinterParameterized(0, FONT_NORMAL, sHeaderTexts[0], GetStringCenterAlignXOffset(FONT_NORMAL, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN); for (i = 0; i < (int)ARRAY_COUNT(*sHeaderTexts) - 1; i++) { - WCSS_AddTextPrinterParameterized(1, 1, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY); + WCSS_AddTextPrinterParameterized(1, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY); } - WCSS_AddTextPrinterParameterized(1, 1, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_RED); + WCSS_AddTextPrinterParameterized(1, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_RED); PutWindowTilemap(0); - CopyWindowToVram(0, 2); + CopyWindowToVram(0, COPYWIN_GFX); PutWindowTilemap(1); - CopyWindowToVram(1, 2); + CopyWindowToVram(1, COPYWIN_GFX); } #define tState data[0] @@ -280,12 +280,12 @@ static void Task_WirelessCommunicationScreen(u8 taskId) { ConvertIntToDecimalStringN(gStringVar4, sStatusScreen->groupCounts[i], STR_CONV_MODE_RIGHT_ALIGN, 2); if (i != GROUPTYPE_TOTAL) - WCSS_AddTextPrinterParameterized(2, 1, gStringVar4, 12, 30 * i + 8, COLORMODE_WHITE_LGRAY); + WCSS_AddTextPrinterParameterized(2, FONT_NORMAL, gStringVar4, 12, 30 * i + 8, COLORMODE_WHITE_LGRAY); else - WCSS_AddTextPrinterParameterized(2, 1, gStringVar4, 12, 98, COLORMODE_RED); + WCSS_AddTextPrinterParameterized(2, FONT_NORMAL, gStringVar4, 12, 98, COLORMODE_RED); } PutWindowTilemap(2); - CopyWindowToVram(2, 3); + CopyWindowToVram(2, COPYWIN_FULL); } if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { @@ -311,7 +311,7 @@ static void Task_WirelessCommunicationScreen(u8 taskId) #undef tState -static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode) +static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 mode) { u8 color[3]; @@ -344,13 +344,13 @@ static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * break; } - AddTextPrinterParameterized4(windowId, fontId, x, y, 0, 0, color, -1, str); + AddTextPrinterParameterized4(windowId, fontId, x, y, 0, 0, color, TEXT_SKIP_DRAW, str); } -static u32 CountPlayersInGroupAndGetActivity(struct UnkStruct_x20 * unk20, u32 * groupCounts) +static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer * player, u32 * groupCounts) { int i, j, k; - u32 activity = unk20->gname_uname.gname.activity; + u32 activity = player->rfu.data.activity; #define group_activity(i) (sActivityGroupInfo[(i)][0]) #define group_type(i) (sActivityGroupInfo[(i)][1]) @@ -358,15 +358,13 @@ static u32 CountPlayersInGroupAndGetActivity(struct UnkStruct_x20 * unk20, u32 * for (i = 0; i < ARRAY_COUNT(sActivityGroupInfo); i++) { - if (activity == group_activity(i) && unk20->groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (activity == group_activity(i) && player->groupScheduledAnim == UNION_ROOM_SPAWN_IN) { if (group_players(i) == 0) { k = 0; for (j = 0; j < RFU_CHILD_MAX; j++) - { - if (unk20->gname_uname.gname.child_sprite_gender[j] != 0) k++; - } + if (player->rfu.data.partnerInfo[j] != 0) k++; k++; groupCounts[group_type(i)] += k; } @@ -398,12 +396,12 @@ static bool32 UpdateCommunicationCounts(u32 * groupCounts, u32 * prevGroupCounts { bool32 activitiesChanged = FALSE; u32 groupCountBuffer[NUM_GROUPTYPES] = {0, 0, 0, 0}; - struct UnkStruct_x20 ** data = (void *)gTasks[taskId].data; + struct RfuPlayer ** players = (void *)gTasks[taskId].data; s32 i; for (i = 0; i < NUM_TASK_DATA; i++) { - u32 activity = CountPlayersInGroupAndGetActivity(&(*data)[i], groupCountBuffer); + u32 activity = CountPlayersInGroupAndGetActivity(&(*players)[i], groupCountBuffer); if (activity != activities[i]) { activities[i] = activity; @@ -423,9 +421,9 @@ static bool32 UpdateCommunicationCounts(u32 * groupCounts, u32 * prevGroupCounts memcpy(groupCounts, groupCountBuffer, sizeof(groupCountBuffer)); memcpy(prevGroupCounts, groupCountBuffer, sizeof(groupCountBuffer)); - groupCounts[GROUPTYPE_TOTAL] = groupCounts[GROUPTYPE_TRADE] - + groupCounts[GROUPTYPE_BATTLE] - + groupCounts[GROUPTYPE_UNION] + groupCounts[GROUPTYPE_TOTAL] = groupCounts[GROUPTYPE_TRADE] + + groupCounts[GROUPTYPE_BATTLE] + + groupCounts[GROUPTYPE_UNION] + groupCounts[GROUPTYPE_TOTAL]; return TRUE; } diff --git a/src/wonder_news.c b/src/wonder_news.c new file mode 100644 index 0000000000..ec93d293ed --- /dev/null +++ b/src/wonder_news.c @@ -0,0 +1,160 @@ +#include "global.h" +#include "mystery_gift.h" +#include "random.h" +#include "event_data.h" +#include "wonder_news.h" + +/* + Wonder News related functions. + Because this feature is largely unused, the names in here are + mostly nebulous and without a real indication of purpose. +*/ + +enum { + NEWS_VAL_INVALID, + NEWS_VAL_RECV_FRIEND, + NEWS_VAL_RECV_WIRELESS, + NEWS_VAL_NONE, + NEWS_VAL_SENT, + NEWS_VAL_SENT_MAX, + NEWS_VAL_GET_MAX, +}; + +static u32 GetNewsId(struct WonderNewsMetadata *); +static void IncrementGetNewsCounter(struct WonderNewsMetadata *); +static u32 GetNewsValByNewsType(struct WonderNewsMetadata *); +static void IncrementSentNewsCounter(struct WonderNewsMetadata *); +static void ResetSentNewsCounter(struct WonderNewsMetadata *); + +void GenerateRandomWonderNews(u32 newsType) +{ + struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); + + data->newsType = newsType; + switch (newsType) + { + case WONDER_NEWS_NONE: + break; + case WONDER_NEWS_RECV_FRIEND: + case WONDER_NEWS_RECV_WIRELESS: + data->rand = (Random() % 15) + 16; + break; + case WONDER_NEWS_SENT: + data->rand = (Random() % 15) + 1; + break; + } +} + +void InitSavedWonderNews(void) +{ + struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); + + data->newsType = WONDER_NEWS_NONE; + data->sentCounter = 0; + data->getCounter = 0; + data->rand = 0; + VarSet(VAR_WONDER_NEWS_COUNTER, 0); +} + +// Unused +static void TryIncrementWonderNewsVar(void) +{ + u16 *var = GetVarPointer(VAR_WONDER_NEWS_COUNTER); + struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); + + if (data->getCounter > 4 && ++(*var) >= 500) + { + data->getCounter = 0; + *var = 0; + } +} + +// Unused +u16 RetrieveWonderNewsVal(void) +{ + u16 *result = &gSpecialVar_Result; + struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); + u16 newsVal; + + // Checks if Mystery Event is enabled, not Mystery Gift? + if (!IsMysteryEventEnabled() || !ValidateSavedWonderNews()) + return 0; + + newsVal = GetNewsValByNewsType(data); + + switch (newsVal) + { + case NEWS_VAL_RECV_FRIEND: + *result = GetNewsId(data); + break; + case NEWS_VAL_RECV_WIRELESS: + *result = GetNewsId(data); + break; + case NEWS_VAL_SENT: + *result = GetNewsId(data); + IncrementSentNewsCounter(data); + break; + case NEWS_VAL_SENT_MAX: + *result = GetNewsId(data); + ResetSentNewsCounter(data); + break; + case NEWS_VAL_INVALID: + case NEWS_VAL_NONE: + case NEWS_VAL_GET_MAX: + break; + } + + return newsVal; +} + +static u32 GetNewsId(struct WonderNewsMetadata *data) +{ + u32 id; + data->newsType = WONDER_NEWS_NONE; + id = data->rand + 132; + data->rand = 0; + IncrementGetNewsCounter(data); + return id; +} + +static void ResetSentNewsCounter(struct WonderNewsMetadata *data) +{ + data->sentCounter = 0; +} + +static void IncrementSentNewsCounter(struct WonderNewsMetadata *data) +{ + data->sentCounter++; + if (data->sentCounter > 4) + data->sentCounter = 4; +} + +static void IncrementGetNewsCounter(struct WonderNewsMetadata *data) +{ + data->getCounter++; + if (data->getCounter > 5) + data->getCounter = 5; +} + +static u32 GetNewsValByNewsType(struct WonderNewsMetadata *data) +{ + if (data->getCounter == 5) + return NEWS_VAL_GET_MAX; + + switch (data->newsType) + { + case WONDER_NEWS_NONE: + return NEWS_VAL_NONE; + case WONDER_NEWS_RECV_FRIEND: + return NEWS_VAL_RECV_FRIEND; + case WONDER_NEWS_RECV_WIRELESS: + return NEWS_VAL_RECV_WIRELESS; + case WONDER_NEWS_SENT: + if (data->sentCounter < 3) + return NEWS_VAL_SENT; + return NEWS_VAL_SENT_MAX; + default: + AGB_ASSERT(0); + return NEWS_VAL_INVALID; + } +} diff --git a/sym_bss.txt b/sym_bss.txt index 3166aee455..3a23e74789 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -50,11 +50,12 @@ .include "src/multiboot.o" .include "src/mirage_tower.o" .include "src/berry_fix_program.o" - .include "src/pokenav_conditions_2.o" - .include "src/pokenav_ribbons_2.o" + .include "src/pokenav_conditions_gfx.o" + .include "src/pokenav_ribbons_summary.o" .include "src/ereader_helpers.o" .include "src/faraway_island.o" .include "src/m4a_1.o" + .include "data/sound_data.o" .include "src/agb_flash.o" .include "src/siirtc.o" .include "*libgcc.a:dp-bit.o" diff --git a/sym_common.txt b/sym_common.txt index 1525d8aec8..407b183a7f 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -2,36 +2,36 @@ .include "main.o" @ ../gflib/bg.o .align 2 -gUnneededFireRedVariable: - .space 4 +gWindowTileAutoAllocEnabled: + .space 4 @ ../gflib/window.o - .align 4 + .align 4 gTransparentTileNumber: - .space 1 - .align 4 + .space 1 + .align 4 gWindowBgTilemapBuffers: - .space 16 + .space 16 @ ../gflib/text.o - .align 4 + .align 4 gFonts: - .space 4 - .align 2 + .space 4 + .align 2 gDisableTextPrinters: - .space 1 - .align 4 + .space 1 + .align 4 gCurGlyph: - .space 132 - .align 2 + .space 132 + .align 2 gTextFlags: - .space 4 + .space 4 @ ../gflib/sprite.o - .align 2 + .align 2 gOamMatrixAllocBitmap: - .space 4 - .align 2 + .space 4 + .align 2 gReservedSpritePaletteCount: - .space 1 - .align 4 + .space 1 + .align 4 .include "link.o" .include "AgbRfu_LinkManager.o" .include "link_rfu_2.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index 88c4461cb0..3e2c3b28da 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -9,14 +9,14 @@ .include "src/link_rfu_3.o" .include "src/link_rfu_2.o" .include "src/union_room.o" - .include "src/mystery_gift.o" + .include "src/mystery_gift_menu.o" .include "src/union_room_player_avatar.o" .include "src/wireless_communication_status_screen.o" .include "src/union_room_battle.o" - .include "src/mevent2.o" - .include "src/mevent_801BAAC.o" - .include "src/mevent_server.o" - .include "src/mevent_client.o" + .include "src/mystery_gift.o" + .include "src/mystery_gift_view.o" + .include "src/mystery_gift_server.o" + .include "src/mystery_gift_client.o" .include "src/union_room_chat.o" .include "src/berry_crush.o" .include "src/berry_powder.o" @@ -91,7 +91,7 @@ .include "src/region_map.o" .include "src/decoration.o" .include "src/slot_machine.o" - .include "src/battle_ai_script_commands.o" + .include "src/battle_ai_main.o" .include "src/fldeff_misc.o" .include "src/pokeblock.o" .include "src/field_specials.o" @@ -143,7 +143,7 @@ .include "src/pokedex_area_region_map.o" .include "src/battle_pyramid_bag.o" .include "src/pokenav.o" - .include "src/pokenav_match_call_ui.o" + .include "src/pokenav_list.o" .include "src/menu_specialized.o" .include "src/faraway_island.o" .include "src/trainer_hill.o" diff --git a/tools/aif2pcm/main.c b/tools/aif2pcm/main.c index 3dad6fcf80..720db1acae 100644 --- a/tools/aif2pcm/main.c +++ b/tools/aif2pcm/main.c @@ -51,8 +51,12 @@ do \ typedef struct { unsigned long num_samples; - uint8_t *samples; + union { + uint8_t *samples8; + uint16_t *samples16; + }; uint8_t midi_note; + uint8_t sample_size; bool has_loop; unsigned long loop_offset; double sample_rate; @@ -208,11 +212,11 @@ void read_aif(struct Bytes *aif, AifData *aif_data) num_sample_frames |= (aif->data[pos++] << 8); num_sample_frames |= (uint8_t)aif->data[pos++]; - short sample_size = (aif->data[pos++] << 8); - sample_size |= (uint8_t)aif->data[pos++]; - if (sample_size != 8) + aif_data->sample_size = (aif->data[pos++] << 8); + aif_data->sample_size |= (uint8_t)aif->data[pos++]; + if (aif_data->sample_size != 8 && aif_data->sample_size != 16) { - FATAL_ERROR("sampleSize (%d) in the COMM Chunk must be 8!\n", sample_size); + FATAL_ERROR("sampleSize (%d) in the COMM Chunk must be 8 or 16!\n", aif_data->sample_size); } double sample_rate = ieee754_read_extended((uint8_t*)(aif->data + pos)); @@ -295,11 +299,28 @@ void read_aif(struct Bytes *aif, AifData *aif_data) pos += 8; unsigned long num_samples = chunk_size - 8; - uint8_t *sample_data = (uint8_t *)malloc(num_samples * sizeof(uint8_t)); - memcpy(sample_data, &aif->data[pos], num_samples); - - aif_data->samples = sample_data; - aif_data->real_num_samples = num_samples; + if (aif_data->sample_size == 8) + { + uint8_t *sample_data = (uint8_t *)malloc(num_samples * sizeof(uint8_t)); + memcpy(sample_data, &aif->data[pos], num_samples); + + aif_data->samples8 = sample_data; + aif_data->real_num_samples = num_samples; + } + else + { + uint16_t *sample_data = (uint16_t *)malloc(num_samples * sizeof(uint16_t)); + uint16_t *sample_data_swapped = (uint16_t *)malloc(num_samples * sizeof(uint16_t)); + memcpy(sample_data, &aif->data[pos], num_samples); + for (long unsigned i = 0; i < num_samples; i++) + { + sample_data_swapped[i] = __builtin_bswap16(sample_data[i]); + } + + aif_data->samples16 = sample_data_swapped; + aif_data->real_num_samples = num_samples; + free(sample_data); + } pos += chunk_size - 8; } else @@ -550,8 +571,21 @@ do { \ void aif2pcm(const char *aif_filename, const char *pcm_filename, bool compress) { struct Bytes *aif = read_bytearray(aif_filename); - AifData aif_data = {0,0,0,0,0,0,0}; + AifData aif_data = {0}; read_aif(aif, &aif_data); + + // Convert 16-bit to 8-bit if necessary + if (aif_data.sample_size == 16) + { + aif_data.real_num_samples /= 2; + uint8_t *converted_samples = malloc(aif_data.real_num_samples * sizeof(uint8_t)); + for (unsigned long i = 0; i < aif_data.real_num_samples; i++) + { + converted_samples[i] = aif_data.samples16[i] >> 8; + } + free(aif_data.samples16); + aif_data.samples8 = converted_samples; + } int header_size = 0x10; struct Bytes *pcm; @@ -560,7 +594,7 @@ void aif2pcm(const char *aif_filename, const char *pcm_filename, bool compress) if (compress) { struct Bytes *input = malloc(sizeof(struct Bytes)); - input->data = aif_data.samples; + input->data = aif_data.samples8; input->length = aif_data.real_num_samples; pcm = delta_compress(input); free(input); @@ -568,7 +602,7 @@ void aif2pcm(const char *aif_filename, const char *pcm_filename, bool compress) else { pcm = malloc(sizeof(struct Bytes)); - pcm->data = aif_data.samples; + pcm->data = aif_data.samples8; pcm->length = aif_data.real_num_samples; } output.length = header_size + pcm->length; @@ -591,7 +625,7 @@ void aif2pcm(const char *aif_filename, const char *pcm_filename, bool compress) free(aif); free(pcm); free(output.data); - free(aif_data.samples); + free(aif_data.samples8); } // Reads a .pcm file containing an array of 8-bit samples and produces an .aif file. @@ -631,8 +665,8 @@ void pcm2aif(const char *pcm_filename, const char *aif_filename, uint32_t base_n pcm->data += 0x10; } - aif_data->samples = malloc(pcm->length); - memcpy(aif_data->samples, pcm->data, pcm->length); + aif_data->samples8 = malloc(pcm->length); + memcpy(aif_data->samples8, pcm->data, pcm->length); struct Bytes *aif = malloc(sizeof(struct Bytes)); aif->length = 54 + 60 + pcm->length; @@ -819,14 +853,14 @@ void pcm2aif(const char *pcm_filename, const char *aif_filename, uint32_t base_n // Sound Data Chunk soundData for (unsigned int i = 0; i < aif_data->loop_offset; i++) { - aif->data[pos++] = aif_data->samples[i]; + aif->data[pos++] = aif_data->samples8[i]; } int j = 0; for (unsigned int i = aif_data->loop_offset; i < pcm->length; i++) { int pcm_index = aif_data->loop_offset + (j++ % (pcm->length - aif_data->loop_offset)); - aif->data[pos++] = aif_data->samples[pcm_index]; + aif->data[pos++] = aif_data->samples8[pcm_index]; } aif->length = pos; diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index b4244aa8d6..8728fa8d09 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -1,8 +1,10 @@ CC = gcc CFLAGS = -Wall -Wextra -Werror -Wno-sign-compare -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK +CFLAGS += $(shell pkg-config --cflags libpng) LIBS = -lpng -lz +LDFLAGS += $(shell pkg-config --libs-only-L libpng) SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index 4e85953fdc..832e9bb397 100644 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -397,7 +397,7 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int free(buffer); } -void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) +void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) { int tileSize = bitDepth * 8; @@ -424,7 +424,8 @@ void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int m FATAL_ERROR("The specified number of tiles (%d) is greater than the maximum possible value (%d).\n", numTiles, maxNumTiles); int bufferSize = numTiles * tileSize; - unsigned char *buffer = malloc(bufferSize); + int maxBufferSize = maxNumTiles * tileSize; + unsigned char *buffer = malloc(maxBufferSize); if (buffer == NULL) FATAL_ERROR("Failed to allocate memory for pixels.\n"); @@ -433,17 +434,36 @@ void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int m switch (bitDepth) { case 1: - ConvertToTiles1Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); + ConvertToTiles1Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; case 4: - ConvertToTiles4Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); + ConvertToTiles4Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; case 8: - ConvertToTiles8Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); + ConvertToTiles8Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; } - WriteWholeFile(path, buffer, bufferSize); + bool zeroPadded = true; + for (int i = bufferSize; i < maxBufferSize && zeroPadded; i++) { + if (buffer[i] != 0) + { + switch (numTilesMode) + { + case NUM_TILES_IGNORE: + break; + case NUM_TILES_WARN: + fprintf(stderr, "Ignoring -num_tiles %d because tile %d contains non-transparent pixels.\n", numTiles, 1 + i / tileSize); + zeroPadded = false; + break; + case NUM_TILES_ERROR: + FATAL_ERROR("Tile %d contains non-transparent pixels.\n", 1 + i / tileSize); + break; + } + } + } + + WriteWholeFile(path, buffer, zeroPadded ? bufferSize : maxBufferSize); free(buffer); } diff --git a/tools/gbagfx/gfx.h b/tools/gbagfx/gfx.h index edb9e62c41..f1dbfcf4f7 100644 --- a/tools/gbagfx/gfx.h +++ b/tools/gbagfx/gfx.h @@ -44,8 +44,14 @@ struct Image { bool isAffine; }; +enum NumTilesMode { + NUM_TILES_IGNORE, + NUM_TILES_WARN, + NUM_TILES_ERROR, +}; + void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); -void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); void FreeImage(struct Image *image); void ReadGbaPalette(char *path, struct Palette *palette); void WriteGbaPalette(char *path, struct Palette *palette); diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c index cf30316961..5d4faacab0 100644 --- a/tools/gbagfx/main.c +++ b/tools/gbagfx/main.c @@ -77,7 +77,7 @@ void ConvertPngToGba(char *inputPath, char *outputPath, struct PngToGbaOptions * ReadPng(inputPath, &image); - WriteImage(outputPath, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); + WriteImage(outputPath, options->numTilesMode, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); FreeImage(&image); } @@ -179,6 +179,7 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a char *outputFileExtension = GetFileExtensionAfterDot(outputPath); int bitDepth = outputFileExtension[0] - '0'; struct PngToGbaOptions options; + options.numTilesMode = NUM_TILES_IGNORE; options.numTiles = 0; options.bitDepth = bitDepth; options.metatileWidth = 1; @@ -203,6 +204,12 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a if (options.numTiles < 1) FATAL_ERROR("Number of tiles must be positive.\n"); } + else if (strcmp(option, "-Wnum_tiles") == 0) { + options.numTilesMode = NUM_TILES_WARN; + } + else if (strcmp(option, "-Werror=num_tiles") == 0) { + options.numTilesMode = NUM_TILES_ERROR; + } else if (strcmp(option, "-mwidth") == 0) { if (i + 1 >= argc) diff --git a/tools/gbagfx/options.h b/tools/gbagfx/options.h index 3b038f572d..250b723450 100644 --- a/tools/gbagfx/options.h +++ b/tools/gbagfx/options.h @@ -4,6 +4,7 @@ #define OPTIONS_H #include +#include "gfx.h" struct GbaToPngOptions { char *paletteFilePath; @@ -18,6 +19,7 @@ struct GbaToPngOptions { struct PngToGbaOptions { int numTiles; + enum NumTilesMode numTilesMode; int bitDepth; int metatileWidth; int metatileHeight; diff --git a/tools/gbagfx/rl.c b/tools/gbagfx/rl.c index 968c9347eb..993ac64497 100644 --- a/tools/gbagfx/rl.c +++ b/tools/gbagfx/rl.c @@ -101,7 +101,7 @@ unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize) srcPos++; uncompressedLength++; } - + if (uncompressedLength > 0) { dest[destPos++] = uncompressedLength - 1; diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index d767b469e9..3eab98f2be 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -230,7 +230,7 @@ string generate_map_events_text(Json map_data) { text << bgs_label << ":\n"; for (auto &bg_event : map_data["bg_events"].array_items()) { if (bg_event["type"] == "sign") { - text << "\tbg_event " + text << "\tbg_sign_event " << bg_event["x"].int_value() << ", " << bg_event["y"].int_value() << ", " << bg_event["elevation"].int_value() << ", " diff --git a/tools/mid2agb/agb.cpp b/tools/mid2agb/agb.cpp index d4d79f1337..caa6f0ecd9 100644 --- a/tools/mid2agb/agb.cpp +++ b/tools/mid2agb/agb.cpp @@ -18,6 +18,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +#include #include #include #include @@ -503,7 +504,7 @@ void PrintAgbTrack(std::vector& events) ResetTrackVars(); break; case EventType::Tempo: - PrintByte("TEMPO , %u*%s_tbs/2", 60000000 / event.param2, g_asmLabel.c_str()); + PrintByte("TEMPO , %u*%s_tbs/2", static_cast(round(60000000.0f / static_cast(event.param2))), g_asmLabel.c_str()); PrintWait(event.time); break; case EventType::InstrumentChange: diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index 7756cadc52..af16e232d3 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -26,6 +26,7 @@ #include "char_util.h" #include "utf8.h" #include "string_parser.h" +#include "../../gflib/characters.h" AsmFile::AsmFile(std::string filename) : m_filename(filename) { @@ -281,7 +282,7 @@ int AsmFile::ReadString(unsigned char* s) while (length < padLength) { - s[length++] = 0; + s[length++] = CHAR_SPACE; } } @@ -290,40 +291,92 @@ int AsmFile::ReadString(unsigned char* s) return length; } +void AsmFile::VerifyStringLength(int length) +{ + if (length == kMaxStringLength) + RaiseError("mapped string longer than %d bytes", kMaxStringLength); +} + int AsmFile::ReadBraille(unsigned char* s) { static std::map encoding = { - { 'A', 0x01 }, - { 'B', 0x05 }, - { 'C', 0x03 }, - { 'D', 0x0B }, - { 'E', 0x09 }, - { 'F', 0x07 }, - { 'G', 0x0F }, - { 'H', 0x0D }, - { 'I', 0x06 }, - { 'J', 0x0E }, - { 'K', 0x11 }, - { 'L', 0x15 }, - { 'M', 0x13 }, - { 'N', 0x1B }, - { 'O', 0x19 }, - { 'P', 0x17 }, - { 'Q', 0x1F }, - { 'R', 0x1D }, - { 'S', 0x16 }, - { 'T', 0x1E }, - { 'U', 0x31 }, - { 'V', 0x35 }, - { 'W', 0x2E }, - { 'X', 0x33 }, - { 'Y', 0x3B }, - { 'Z', 0x39 }, - { ' ', 0x00 }, - { ',', 0x04 }, - { '.', 0x2C }, - { '$', 0xFF }, + { 'A', BRAILLE_CHAR_A }, + { 'B', BRAILLE_CHAR_B }, + { 'C', BRAILLE_CHAR_C }, + { 'D', BRAILLE_CHAR_D }, + { 'E', BRAILLE_CHAR_E }, + { 'F', BRAILLE_CHAR_F }, + { 'G', BRAILLE_CHAR_G }, + { 'H', BRAILLE_CHAR_H }, + { 'I', BRAILLE_CHAR_I }, + { 'J', BRAILLE_CHAR_J }, + { 'K', BRAILLE_CHAR_K }, + { 'L', BRAILLE_CHAR_L }, + { 'M', BRAILLE_CHAR_M }, + { 'N', BRAILLE_CHAR_N }, + { 'O', BRAILLE_CHAR_O }, + { 'P', BRAILLE_CHAR_P }, + { 'Q', BRAILLE_CHAR_Q }, + { 'R', BRAILLE_CHAR_R }, + { 'S', BRAILLE_CHAR_S }, + { 'T', BRAILLE_CHAR_T }, + { 'U', BRAILLE_CHAR_U }, + { 'V', BRAILLE_CHAR_V }, + { 'W', BRAILLE_CHAR_W }, + { 'X', BRAILLE_CHAR_X }, + { 'Y', BRAILLE_CHAR_Y }, + { 'Z', BRAILLE_CHAR_Z }, + { 'a', BRAILLE_CHAR_A }, + { 'b', BRAILLE_CHAR_B }, + { 'c', BRAILLE_CHAR_C }, + { 'd', BRAILLE_CHAR_D }, + { 'e', BRAILLE_CHAR_E }, + { 'f', BRAILLE_CHAR_F }, + { 'g', BRAILLE_CHAR_G }, + { 'h', BRAILLE_CHAR_H }, + { 'i', BRAILLE_CHAR_I }, + { 'j', BRAILLE_CHAR_J }, + { 'k', BRAILLE_CHAR_K }, + { 'l', BRAILLE_CHAR_L }, + { 'm', BRAILLE_CHAR_M }, + { 'n', BRAILLE_CHAR_N }, + { 'o', BRAILLE_CHAR_O }, + { 'p', BRAILLE_CHAR_P }, + { 'q', BRAILLE_CHAR_Q }, + { 'r', BRAILLE_CHAR_R }, + { 's', BRAILLE_CHAR_S }, + { 't', BRAILLE_CHAR_T }, + { 'u', BRAILLE_CHAR_U }, + { 'v', BRAILLE_CHAR_V }, + { 'w', BRAILLE_CHAR_W }, + { 'x', BRAILLE_CHAR_X }, + { 'y', BRAILLE_CHAR_Y }, + { 'z', BRAILLE_CHAR_Z }, + { '0', BRAILLE_CHAR_0 }, + { '1', BRAILLE_CHAR_1 }, + { '2', BRAILLE_CHAR_2 }, + { '3', BRAILLE_CHAR_3 }, + { '4', BRAILLE_CHAR_4 }, + { '5', BRAILLE_CHAR_5 }, + { '6', BRAILLE_CHAR_6 }, + { '7', BRAILLE_CHAR_7 }, + { '8', BRAILLE_CHAR_8 }, + { '9', BRAILLE_CHAR_9 }, + { ' ', BRAILLE_CHAR_SPACE }, + { ',', BRAILLE_CHAR_COMMA }, + { '.', BRAILLE_CHAR_PERIOD }, + { '?', BRAILLE_CHAR_QUESTION_MARK }, + { '!', BRAILLE_CHAR_EXCL_MARK }, + { ':', BRAILLE_CHAR_COLON }, + { ';', BRAILLE_CHAR_SEMICOLON }, + { '-', BRAILLE_CHAR_HYPHEN }, + { '/', BRAILLE_CHAR_SLASH }, + { '(', BRAILLE_CHAR_PAREN }, + { ')', BRAILLE_CHAR_PAREN }, + { '\'', BRAILLE_CHAR_APOSTROPHE }, + { '#', BRAILLE_CHAR_NUMBER }, + { '$', EOS }, }; SkipWhitespace(); @@ -335,14 +388,13 @@ int AsmFile::ReadBraille(unsigned char* s) m_pos++; + bool inNumber = false; while (m_buffer[m_pos] != '"') { - if (length == kMaxStringLength) - RaiseError("mapped string longer than %d bytes", kMaxStringLength); - if (m_buffer[m_pos] == '\\' && m_buffer[m_pos + 1] == 'n') { - s[length++] = 0xFE; + VerifyStringLength(length); + s[length++] = CHAR_NEWLINE; m_pos += 2; } else @@ -357,6 +409,21 @@ int AsmFile::ReadBraille(unsigned char* s) RaiseError("character '\\x%02X' not valid in braille string", m_buffer[m_pos]); } + if (!inNumber && c >= '0' && c <= '9' ) + { + // Output number indicator at start of a number + inNumber = true; + VerifyStringLength(length); + s[length++] = BRAILLE_CHAR_NUMBER; + } + else if (inNumber && encoding[c] == BRAILLE_CHAR_SPACE) + { + // Number ends at a space. + // Non-number characters encountered before a space will simply be output as is. + inNumber = false; + } + + VerifyStringLength(length); s[length++] = encoding[c]; m_pos++; } diff --git a/tools/preproc/asm_file.h b/tools/preproc/asm_file.h index d73b36e90b..29435f76a4 100644 --- a/tools/preproc/asm_file.h +++ b/tools/preproc/asm_file.h @@ -67,6 +67,7 @@ private: void ReportDiagnostic(const char* type, const char* format, std::va_list args); void RaiseError(const char* format, ...); void RaiseWarning(const char* format, ...); + void VerifyStringLength(int length); }; #endif // ASM_FILE_H diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 0bc88a42b7..92e44b5459 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -1,8 +1,10 @@ CC ?= gcc CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK +CFLAGS += $(shell pkg-config --cflags libpng) LIBS = -lpng -lz +LDFLAGS += $(shell pkg-config --libs-only-L libpng) SRCS = main.c convert_png.c util.c font.c